nxt-pick-datetime 16.1.0 → 17.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/class/date-time.class.mjs +6 -6
- package/esm2022/lib/date-time/calendar/calendar.component.mjs +6 -6
- package/esm2022/lib/date-time/calendar-body/calendar-body.component.mjs +5 -5
- package/esm2022/lib/date-time/calendar-month-view/calendar-month-view.component.mjs +6 -6
- package/esm2022/lib/date-time/calendar-multi-year-view/calendar-multi-year-view.component.mjs +5 -5
- package/esm2022/lib/date-time/calendar-year-view/calendar-year-view.component.mjs +6 -6
- package/esm2022/lib/date-time/date-time-inline/date-time-inline.component.mjs +6 -6
- package/esm2022/lib/date-time/date-time-picker/date-time-picker.component.mjs +6 -6
- package/esm2022/lib/date-time/date-time-picker-container/date-time-picker-container.component.mjs +5 -5
- package/esm2022/lib/date-time/date-time-picker-input.directive.mjs +6 -6
- package/esm2022/lib/date-time/date-time-picker-intl.service.mjs +3 -3
- package/esm2022/lib/date-time/date-time-picker-trigger.directive.mjs +5 -5
- package/esm2022/lib/date-time/date-time.module.mjs +4 -4
- package/esm2022/lib/date-time/number-fixed-len.pipe.mjs +3 -3
- package/esm2022/lib/date-time/timer/timer.component.mjs +5 -5
- package/esm2022/lib/date-time/timer-box/timer-box.component.mjs +5 -5
- package/esm2022/lib/dialog/dialog-container/dialog-container.component.mjs +6 -6
- package/esm2022/lib/dialog/dialog.module.mjs +4 -4
- package/esm2022/lib/dialog/dialog.service.mjs +5 -5
- package/esm2022/moment-adapter/date-time-adapter.class.mjs +5 -5
- package/esm2022/moment-adapter/moment-adapter.module.mjs +4 -4
- package/esm2022/native-adapter/date-time-adapter.class.mjs +5 -5
- package/esm2022/native-adapter/native-adapter.module.mjs +4 -4
- package/fesm2022/nxt-pick-datetime-moment-adapter.mjs +9 -9
- package/fesm2022/nxt-pick-datetime-native-adapter.mjs +9 -9
- package/fesm2022/nxt-pick-datetime.mjs +84 -84
- package/fesm2022/nxt-pick-datetime.mjs.map +1 -1
- package/package.json +8 -8
|
@@ -492,13 +492,13 @@ export class DateTimeComponent extends DateTimeDirective {
|
|
|
492
492
|
]);
|
|
493
493
|
return;
|
|
494
494
|
}
|
|
495
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
496
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
495
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.1", ngImport: i0, type: DateTimeComponent, deps: [{ token: i1.Overlay }, { token: i0.ViewContainerRef }, { token: i2.DialogService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i3.DateTimeAdapter }, { token: NXT_DTPICKER_SCROLL_STRATEGY }, { token: NXT_DATE_TIME_FORMATS }, { token: DOCUMENT, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
496
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.1", type: DateTimeComponent, selector: "nxt-date-time", inputs: { backdropClass: "backdropClass", panelClass: "panelClass", startAt: "startAt", pickerType: "pickerType", pickerMode: "pickerMode", disabled: "disabled", isOpen: "isOpen", scrollStrategy: "scrollStrategy" }, outputs: { afterPickerOpened: "open", afterPickerClosed: "close", yearSelected: "yearSelected", monthSelected: "monthSelected", isOpenChange: "isOpenChange" }, usesInheritance: true, ngImport: i0, template: "\r\n", styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
497
497
|
}
|
|
498
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
498
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.1", ngImport: i0, type: DateTimeComponent, decorators: [{
|
|
499
499
|
type: Component,
|
|
500
500
|
args: [{ selector: 'nxt-date-time', changeDetection: ChangeDetectionStrategy.OnPush, preserveWhitespaces: false, template: "\r\n" }]
|
|
501
|
-
}], ctorParameters:
|
|
501
|
+
}], ctorParameters: () => [{ type: i1.Overlay }, { type: i0.ViewContainerRef }, { type: i2.DialogService }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i3.DateTimeAdapter }, { type: undefined, decorators: [{
|
|
502
502
|
type: Inject,
|
|
503
503
|
args: [NXT_DTPICKER_SCROLL_STRATEGY]
|
|
504
504
|
}] }, { type: undefined, decorators: [{
|
|
@@ -509,7 +509,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.1", ngImpor
|
|
|
509
509
|
}, {
|
|
510
510
|
type: Inject,
|
|
511
511
|
args: [DOCUMENT]
|
|
512
|
-
}] }]
|
|
512
|
+
}] }], propDecorators: { backdropClass: [{
|
|
513
513
|
type: Input
|
|
514
514
|
}], panelClass: [{
|
|
515
515
|
type: Input
|
|
@@ -538,4 +538,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.1", ngImpor
|
|
|
538
538
|
}], isOpenChange: [{
|
|
539
539
|
type: Output
|
|
540
540
|
}] } });
|
|
541
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9waWNrLWRhdGV0aW1lL3NyYy9saWIvZGF0ZS10aW1lL2RhdGUtdGltZS1waWNrZXIvZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9waWNrLWRhdGV0aW1lL3NyYy9saWIvZGF0ZS10aW1lL2RhdGUtdGltZS1waWNrZXIvZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUE7QUFDbkQsT0FBTyxFQUF1QixPQUFPLEVBQUUsYUFBYSxFQUFnRCxNQUFNLHNCQUFzQixDQUFBO0FBQ2hJLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUNyRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDMUMsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQWdCLFlBQVksRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBNkIsUUFBUSxFQUFFLE1BQU0sRUFBb0IsTUFBTSxlQUFlLENBQUE7QUFDL00sT0FBTyxFQUFFLEtBQUssRUFBZ0IsTUFBTSxNQUFNLENBQUE7QUFDMUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUU3QyxPQUFPLEVBQW1CLHFCQUFxQixFQUFFLE1BQU0sb0NBQW9DLENBQUE7QUFDM0YsT0FBTyxFQUFFLGlCQUFpQixFQUEwQixNQUFNLDZCQUE2QixDQUFBO0FBR3ZGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG9FQUFvRSxDQUFBOzs7OztBQUcvRzs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUcsSUFBSSxjQUFjLENBRTVELDhCQUE4QixDQUFDLENBQUE7QUFFakMsZ0JBQWdCO0FBQ2hCLE1BQU0sVUFBVSw2Q0FBNkMsQ0FDekQsT0FBZ0I7SUFFaEIsTUFBTSxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFBO0lBQ2pELE9BQU8sRUFBRSxDQUFBO0FBQ2IsQ0FBQztBQUVELGdCQUFnQjtBQUNoQixNQUFNLENBQUMsTUFBTSxxQ0FBcUMsR0FBRztJQUNqRCxPQUFPLEVBQUUsNEJBQTRCO0lBQ3JDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQztJQUNmLFVBQVUsRUFBRSw2Q0FBNkM7Q0FDNUQsQ0FBQTtBQVNELE1BQU0sT0FBTyxpQkFBcUIsU0FBUSxpQkFBb0I7SUFVMUQ7Ozs7T0FJRztJQUNILElBQ0ksT0FBTztRQUNQLDZGQUE2RjtRQUM3RixxQkFBcUI7UUFDckIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFBO1NBQ3ZCO1FBRUQsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsS0FBSyxRQUFRLEVBQUU7Z0JBQ3ZDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUE7YUFDN0I7aUJBQU0sSUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsS0FBSyxPQUFPO2dCQUNwQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsS0FBSyxXQUFXLEVBQzFDO2dCQUNFLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUE7YUFDakM7aUJBQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsS0FBSyxTQUFTLEVBQUU7Z0JBQy9DLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUE7YUFDakM7U0FDSjtRQUNELE9BQU07SUFDVixDQUFDO0lBRUQsSUFBSSxPQUFPLENBQUMsSUFBbUI7UUFDM0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUM3QixJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FDekMsQ0FBQTtJQUNMLENBQUM7SUFHRDs7Ozs7O09BTUc7SUFDSCxJQUNJLFVBQVU7UUFDVixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUE7SUFDM0IsQ0FBQztJQUVELElBQUksVUFBVSxDQUFDLEdBQWU7UUFDMUIsSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUMxQixJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQTtZQUN0QixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ2YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxDQUFBO2FBQ3pDO1NBQ0o7SUFDTCxDQUFDO0lBR0Q7Ozs7O09BS0c7SUFDSCxJQUNJLFVBQVU7UUFDVixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUE7SUFDM0IsQ0FBQztJQUVELElBQUksVUFBVSxDQUFDLElBQWdCO1FBQzNCLElBQUksSUFBSSxLQUFLLE9BQU8sRUFBRTtZQUNsQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQTtTQUMxQjthQUFNO1lBQ0gsSUFBSSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUE7U0FDOUI7SUFDTCxDQUFDO0lBR0Qsc0RBQXNEO0lBQ3RELElBQ2EsUUFBUTtRQUNqQixPQUFPLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFBO0lBQ3RELENBQUM7SUFFRCxJQUFhLFFBQVEsQ0FBQyxLQUFjO1FBQ2hDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFBO1FBQ2YsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUMxQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQTtZQUN0QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtTQUNsQztJQUNMLENBQUM7SUFHRCxtQ0FBbUM7SUFDbkMsSUFDSSxNQUFNO1FBQ04sT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFBO0lBQ3ZCLENBQUM7SUFFRCxJQUFJLE1BQU0sQ0FBQyxHQUFZO1FBQ25CLElBQUksR0FBRztZQUNILElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQTs7WUFFWCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUE7SUFDcEIsQ0FBQztJQXFFRCxJQUFJLE9BQU87UUFDUCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUE7SUFDeEIsQ0FBQztJQUdELElBQUksUUFBUTtRQUNSLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQTtJQUN6QixDQUFDO0lBRUQsSUFBSSxRQUFRLENBQUMsS0FBb0I7UUFDN0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUE7UUFDdEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQTtJQUN0QyxDQUFDO0lBR0QsSUFBSSxTQUFTO1FBQ1QsT0FBTyxJQUFJLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQTtJQUNoQyxDQUFDO0lBRUQsSUFBSSxTQUFTLENBQUMsTUFBNEI7UUFDdEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUE7UUFDeEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQTtJQUN0QyxDQUFDO0lBRUQsa0NBQWtDO0lBQ2xDLElBQUksR0FBRztRQUNILE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDL0MsQ0FBQztJQUVELGtDQUFrQztJQUNsQyxJQUFJLEdBQUc7UUFDSCxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQy9DLENBQUM7SUFFRCxJQUFJLGNBQWM7UUFDZCxPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsY0FBYyxDQUFBO0lBQ3hDLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDVixPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFBO0lBQ3BDLENBQUM7SUFFRCxJQUFJLGNBQWM7UUFDZCxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLGNBQWMsQ0FBQTtJQUMxQyxDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2IsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxhQUFhLENBQUE7SUFDekMsQ0FBQztJQUVELFlBQ3FCLE9BQWdCLEVBQ2hCLGdCQUFrQyxFQUNsQyxhQUE0QixFQUM1QixNQUFjLEVBQ1osY0FBaUMsRUFDcEQsZUFBbUMsRUFFbEIscUJBQTJDLEVBRTVELGVBQWdDLEVBR2YsUUFBbUI7UUFFcEMsS0FBSyxDQUFDLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQTtRQWR0QixZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQ2hCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNaLG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQUduQywwQkFBcUIsR0FBckIscUJBQXFCLENBQXNCO1FBSzNDLGFBQVEsR0FBUixRQUFRLENBQVc7UUF6TWhDLGdCQUFXLEdBQWUsTUFBTSxDQUFBO1FBc0JoQyxnQkFBVyxHQUFlLE9BQU8sQ0FBQTtRQW1DakMsWUFBTyxHQUFZLEtBQUssQ0FBQTtRQW9CaEM7O1dBRUc7UUFDSCw0REFBNEQ7UUFFbkQsc0JBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQTtRQUVyRDs7V0FFRztRQUNILDREQUE0RDtRQUVuRCxzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFBO1FBRXJEOzs7O1dBSUc7UUFFTSxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFLLENBQUE7UUFFN0M7Ozs7V0FJRztRQUVNLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQUssQ0FBQTtRQUU5Qzs7V0FFRztRQUVNLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQTtRQUVuRDs7V0FFRztRQUNNLDBCQUFxQixHQUFHLElBQUksWUFBWSxFQUE0QixDQUFBO1FBRTdFOztXQUVHO1FBQ00sbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFBO1FBK0I3QyxlQUFVLEdBQUcsSUFBSSxLQUFLLEVBQWlCLENBQUE7SUFvRC9DLENBQUM7SUFFRCxRQUFRLEtBQUssQ0FBQztJQUVkLFdBQVc7UUFDUCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUE7UUFDWixJQUFJLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxDQUFBO1FBQzlCLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFBO1FBQzNCLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUE7UUFFOUIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtTQUMxQjtJQUNMLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBZ0M7UUFDMUMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsTUFBTSxLQUFLLENBQ1Asa0VBQWtFLENBQ3JFLENBQUE7U0FDSjtRQUVELElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFBO1FBQ3JCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDNUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUN0QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQTthQUN6QjtpQkFBTTtnQkFDSCxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQTthQUN4QjtRQUNMLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUVELElBQUk7UUFDQSxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUMvQixPQUFNO1NBQ1Q7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNoQixNQUFNLEtBQUssQ0FDUCwrREFBK0QsQ0FDbEUsQ0FBQTtTQUNKO1FBRUQsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBNEIsQ0FBQTtTQUM3RTtRQUVELGtDQUFrQztRQUNsQyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDckIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQTtTQUN0QzthQUFNLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUMzQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFBO1NBQ3hDO1FBRUQsa0ZBQWtGO1FBQ2xGLDBDQUEwQztRQUMxQyxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxVQUFVLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNsRSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUMzQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQzNDLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFDNUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUMzQyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQzVDLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFDOUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUNqRCxDQUFBO1NBQ0o7UUFFRCxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssUUFBUTtZQUM1QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUE7O1lBRW5CLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQTtRQUV0QixJQUFJLElBQUksQ0FBQyxlQUFlO1lBQ3BCLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQTtRQUV0QyxnREFBZ0Q7UUFDaEQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsZ0JBQWdCLENBQUMsU0FBUyxDQUN2RSxHQUFHLEVBQUU7WUFDRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUE7UUFDaEIsQ0FBQyxDQUNKLENBQUE7UUFFRCxxREFBcUQ7UUFDckQsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUscUJBQXFCLENBQUMsU0FBUyxDQUNqRixDQUFDLEtBQVUsRUFBRSxFQUFFO1lBQ1gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUM3QixDQUFDLENBQ0osQ0FBQTtJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxJQUFhO1FBQ2hCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNyQixJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQTtTQUM3QjthQUFNO1lBQ0gsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUE7U0FDdkI7UUFFRDs7Ozs7Ozs7V0FRRztRQUNILElBQ0ksSUFBSSxDQUFDLFVBQVUsS0FBSyxRQUFRO1lBQzVCLElBQUksQ0FBQyxVQUFVLEtBQUssVUFBVTtZQUM5QixDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQztnQkFDNUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN0RCxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BELENBQUMsSUFBSSxDQUFDLFVBQVUsS0FBSyxPQUFPO29CQUN4QixJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztvQkFDakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQzdCO1lBQ0UsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFBO1NBQ3ZCO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsVUFBVSxDQUFDLGNBQWlCO1FBQ3hCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFBO0lBQzFDLENBQUM7SUFFRDs7T0FFRztJQUNILFdBQVcsQ0FBQyxlQUFrQjtRQUMxQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQTtJQUM1QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDZixPQUFNO1NBQ1Q7UUFFRCxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUM5QyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFBO1NBQ3pCO1FBRUQsSUFDSSxJQUFJLENBQUMscUJBQXFCO1lBQzFCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLEVBQ3ZDO1lBQ0UsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxDQUFBO1NBQ3RDO1FBRUQsSUFBSSxDQUFDLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxDQUFBO1FBQ3ZDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxTQUFTLENBQUE7UUFFcEMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLFdBQVcsRUFBRSxDQUFBO1FBQzVDLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxTQUFTLENBQUE7UUFFekMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLFdBQVcsRUFBRSxDQUFBO1FBQ3pDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxTQUFTLENBQUE7UUFFdEMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUE7WUFDdEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUE7U0FDN0I7UUFFRCxNQUFNLGFBQWEsR0FBRyxHQUFHLEVBQUU7WUFDdkIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNkLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFBO2dCQUNwQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7Z0JBQ3BDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtnQkFDN0IsSUFBSSxDQUFDLHdCQUF3QixHQUFHLFNBQVMsQ0FBQTthQUM1QztRQUNMLENBQUMsQ0FBQTtRQUVELElBQ0ksSUFBSSxDQUFDLHdCQUF3QjtZQUM3QixPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLEtBQUssVUFBVSxFQUMzRDtZQUNFLDBGQUEwRjtZQUMxRiwyRkFBMkY7WUFDM0YseUZBQXlGO1lBQ3pGLHVGQUF1RjtZQUN2RiwyQ0FBMkM7WUFDM0MsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssRUFBRSxDQUFBO1lBQ3JDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQTtTQUM1QjthQUFNO1lBQ0gsYUFBYSxFQUFFLENBQUE7U0FDbEI7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxhQUFhLENBQUMsTUFBWTtRQUN0QixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDckIsTUFBTSxRQUFRLEdBQ1YsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLENBQUE7WUFDL0QsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtTQUM1QzthQUFNLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUMzQixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQTtTQUNsRDtRQUVELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQTtRQUNaLE9BQU07SUFDVixDQUFDO0lBRUQ7O09BRUc7SUFDSyxZQUFZO1FBQ2hCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ3BDLDBCQUEwQixFQUMxQjtZQUNJLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLGFBQWEsRUFBRTtnQkFDWCwyQkFBMkI7Z0JBQzNCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTthQUMvRDtZQUNELFNBQVMsRUFBRTtnQkFDUCxlQUFlO2dCQUNmLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTthQUN6RDtZQUNELGdCQUFnQixFQUFFLElBQUksQ0FBQyxnQkFBZ0I7WUFDdkMsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFO1NBQ3RFLENBQ0osQ0FBQTtRQUNELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQTtRQUV2RCxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDdEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUE7WUFDbkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1lBQ3BDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUNqQyxDQUFDLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFBO0lBQzlELENBQUM7SUFFRDs7T0FFRztJQUNLLFdBQVc7UUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFO1lBQzdCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLGVBQWUsQ0FFOUMsMEJBQTBCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUE7U0FDdkQ7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNoQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUE7U0FDckI7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsRUFBRTtZQUMvQixNQUFNLFlBQVksR0FFRixJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQTtZQUNqRSxJQUFJLENBQUMsZUFBZSxHQUFHLFlBQVksRUFBRSxRQUFRLENBQUE7WUFFN0Msc0RBQXNEO1lBQ3RELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUTtpQkFDZixZQUFZLEVBQUU7aUJBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDYixTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNaLElBQUksQ0FBQyxRQUFRLEVBQUUsY0FBYyxFQUFFLENBQUE7WUFDbkMsQ0FBQyxDQUFDLENBQUE7WUFFTixtQkFBbUI7WUFDbkIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsa0JBQWtCO2lCQUNoRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNiLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ1osSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUE7Z0JBQ25CLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtnQkFDcEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFBO1lBQ2pDLENBQUMsQ0FBQyxDQUFBO1NBQ1Q7SUFDTCxDQUFDO0lBRU8sV0FBVztRQUNmLE1BQU0sYUFBYSxHQUFHLElBQUksYUFBYSxDQUFDO1lBQ3BDLGdCQUFnQixFQUFFLElBQUksQ0FBQywyQkFBMkIsRUFBRTtZQUNwRCxXQUFXLEVBQUUsSUFBSTtZQUNqQixhQUFhLEVBQUU7Z0JBQ1gsa0NBQWtDO2dCQUNsQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7YUFDL0Q7WUFDRCxjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUU7WUFDbkUsVUFBVSxFQUFFO2dCQUNSLGNBQWM7Z0JBQ2QsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO2FBQ3pEO1NBQ0osQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUVsRCxLQUFLLENBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsRUFDN0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsRUFDM0IsSUFBSSxDQUFDLFFBQVE7YUFDUixhQUFhLEVBQUU7YUFDZixJQUFJLENBQ0QsTUFBTSxDQUNGLEtBQUssQ0FBQyxFQUFFLENBQ0osQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxRQUFRO1lBQ3BDLENBQUMsSUFBSSxDQUFDLFFBQVE7Z0JBQ1YsS0FBSyxDQUFDLE1BQU07Z0JBQ1osS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUN2RCxDQUNKLENBQ1IsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUE7SUFDbkMsQ0FBQztJQUVEOztPQUVHO0lBQ0ssMkJBQTJCO1FBQy9CLElBQUksSUFBSSxDQUFDLFFBQVE7WUFDYixPQUFPLElBQUksQ0FBQyxPQUFPO2lCQUNkLFFBQVEsRUFBRTtpQkFDVixtQkFBbUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQztpQkFDN0MscUJBQXFCLENBQUMsbUJBQW1CLENBQUM7aUJBQzFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQztpQkFDN0IsUUFBUSxDQUFDLEtBQUssQ0FBQztpQkFDZixhQUFhLENBQUM7Z0JBQ1g7b0JBQ0ksT0FBTyxFQUFFLE9BQU87b0JBQ2hCLE9BQU8sRUFBRSxRQUFRO29CQUNqQixRQUFRLEVBQUUsT0FBTztvQkFDakIsUUFBUSxFQUFFLEtBQUs7aUJBQ2xCO2dCQUNEO29CQUNJLE9BQU8sRUFBRSxPQUFPO29CQUNoQixPQUFPLEVBQUUsS0FBSztvQkFDZCxRQUFRLEVBQUUsT0FBTztvQkFDakIsUUFBUSxFQUFFLFFBQVE7aUJBQ3JCO2dCQUNEO29CQUNJLE9BQU8sRUFBRSxLQUFLO29CQUNkLE9BQU8sRUFBRSxRQUFRO29CQUNqQixRQUFRLEVBQUUsS0FBSztvQkFDZixRQUFRLEVBQUUsS0FBSztpQkFDbEI7Z0JBQ0Q7b0JBQ0ksT0FBTyxFQUFFLEtBQUs7b0JBQ2QsT0FBTyxFQUFFLEtBQUs7b0JBQ2QsUUFBUSxFQUFFLEtBQUs7b0JBQ2YsUUFBUSxFQUFFLFFBQVE7aUJBQ3JCO2dCQUNEO29CQUNJLE9BQU8sRUFBRSxPQUFPO29CQUNoQixPQUFPLEVBQUUsS0FBSztvQkFDZCxRQUFRLEVBQUUsT0FBTztvQkFDakIsUUFBUSxFQUFFLEtBQUs7b0JBQ2YsT0FBTyxFQUFFLENBQUMsR0FBRztpQkFDaEI7Z0JBQ0Q7b0JBQ0ksT0FBTyxFQUFFLE9BQU87b0JBQ2hCLE9BQU8sRUFBRSxLQUFLO29CQUNkLFFBQVEsRUFBRSxPQUFPO29CQUNqQixRQUFRLEVBQUUsS0FBSztvQkFDZixPQUFPLEVBQUUsQ0FBQyxHQUFHO2lCQUNoQjthQUNKLENBQUMsQ0FBQTtRQUNWLE9BQU07SUFDVixDQUFDOzhHQXRtQlEsaUJBQWlCLDRMQStPZCw0QkFBNEIsYUFFNUIscUJBQXFCLGFBR3JCLFFBQVE7a0dBcFBYLGlCQUFpQixvY0M5QzlCLE1BQ0E7OzJGRDZDYSxpQkFBaUI7a0JBUDdCLFNBQVM7K0JBQ0ksZUFBZSxtQkFHUix1QkFBdUIsQ0FBQyxNQUFNLHVCQUMxQixLQUFLOzswQkFpUHJCLE1BQU07MkJBQUMsNEJBQTRCOzswQkFFbkMsTUFBTTsyQkFBQyxxQkFBcUI7OzBCQUU1QixRQUFROzswQkFDUixNQUFNOzJCQUFDLFFBQVE7NENBalBwQixhQUFhO3NCQURaLEtBQUs7Z0JBS04sVUFBVTtzQkFEVCxLQUFLO2dCQVVGLE9BQU87c0JBRFYsS0FBSztnQkFzQ0YsVUFBVTtzQkFEYixLQUFLO2dCQXNCRixVQUFVO3NCQURiLEtBQUs7Z0JBZ0JPLFFBQVE7c0JBRHBCLEtBQUs7Z0JBZ0JGLE1BQU07c0JBRFQsS0FBSztnQkFnQk4sY0FBYztzQkFEYixLQUFLO2dCQVFHLGlCQUFpQjtzQkFEekIsTUFBTTt1QkFBQyxNQUFNO2dCQVFMLGlCQUFpQjtzQkFEekIsTUFBTTt1QkFBQyxPQUFPO2dCQVNOLFlBQVk7c0JBRHBCLE1BQU07Z0JBU0UsYUFBYTtzQkFEckIsTUFBTTtnQkFPRSxZQUFZO3NCQURwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29lcmNlQXJyYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nXHJcbmltcG9ydCB7IEJsb2NrU2Nyb2xsU3RyYXRlZ3ksIE92ZXJsYXksIE92ZXJsYXlDb25maWcsIE92ZXJsYXlSZWYsIFBvc2l0aW9uU3RyYXRlZ3ksIFNjcm9sbFN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknXHJcbmltcG9ydCB7IENvbXBvbmVudFBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnXHJcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJ1xyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgQ29tcG9uZW50UmVmLCBFdmVudEVtaXR0ZXIsIEluamVjdCwgSW5qZWN0aW9uVG9rZW4sIElucHV0LCBOZ1pvbmUsIE9uRGVzdHJveSwgT25Jbml0LCBPcHRpb25hbCwgT3V0cHV0LCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcclxuaW1wb3J0IHsgbWVyZ2UsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnXHJcbmltcG9ydCB7IGZpbHRlciwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xyXG5pbXBvcnQgeyBEYXRlVGltZUFkYXB0ZXIgfSBmcm9tICcuLi8uLi9jbGFzcy9kYXRlLXRpbWUtYWRhcHRlci5jbGFzcydcclxuaW1wb3J0IHsgRGF0ZVRpbWVGb3JtYXRzLCBOWFRfREFURV9USU1FX0ZPUk1BVFMgfSBmcm9tICcuLi8uLi9jbGFzcy9kYXRlLXRpbWUtZm9ybWF0LmNsYXNzJ1xyXG5pbXBvcnQgeyBEYXRlVGltZURpcmVjdGl2ZSwgUGlja2VyTW9kZSwgUGlja2VyVHlwZSB9IGZyb20gJy4uLy4uL2NsYXNzL2RhdGUtdGltZS5jbGFzcydcclxuaW1wb3J0IHsgRGlhbG9nUmVmIH0gZnJvbSAnLi4vLi4vY2xhc3MvZGlhbG9nLXJlZi5jbGFzcydcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJy4uLy4uL2RpYWxvZy9kaWFsb2cuc2VydmljZSdcclxuaW1wb3J0IHsgRGF0ZVRpbWVDb250YWluZXJDb21wb25lbnQgfSBmcm9tICcuLi9kYXRlLXRpbWUtcGlja2VyLWNvbnRhaW5lci9kYXRlLXRpbWUtcGlja2VyLWNvbnRhaW5lci5jb21wb25lbnQnXHJcbmltcG9ydCB7IERhdGVUaW1lSW5wdXREaXJlY3RpdmUgfSBmcm9tICcuLi9kYXRlLXRpbWUtcGlja2VyLWlucHV0LmRpcmVjdGl2ZSdcclxuXHJcbi8qKlxyXG4gKiBJbmplY3Rpb24gdG9rZW4gdGhhdCBkZXRlcm1pbmVzIHRoZSBzY3JvbGwgaGFuZGxpbmcgd2hpbGUgdGhlIGR0UGlja2VyIGlzIG9wZW4uXHJcbiAqXHJcbiAqIEBpbnRlcm5hbFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IE5YVF9EVFBJQ0tFUl9TQ1JPTExfU1RSQVRFR1kgPSBuZXcgSW5qZWN0aW9uVG9rZW48XHJcbiAgICAoKSA9PiBTY3JvbGxTdHJhdGVneVxyXG4+KCdOWFRfRFRQSUNLRVJfU0NST0xMX1NUUkFURUdZJylcclxuXHJcbi8qKiBAaW50ZXJuYWwgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIE5YVF9EVFBJQ0tFUl9TQ1JPTExfU1RSQVRFR1lfUFJPVklERVJfRkFDVE9SWShcclxuICAgIG92ZXJsYXk6IE92ZXJsYXlcclxuKTogKCkgPT4gQmxvY2tTY3JvbGxTdHJhdGVneSB7XHJcbiAgICBjb25zdCBmbiA9ICgpID0+IG92ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5ibG9jaygpXHJcbiAgICByZXR1cm4gZm5cclxufVxyXG5cclxuLyoqIEBpbnRlcm5hbCAqL1xyXG5leHBvcnQgY29uc3QgTlhUX0RUUElDS0VSX1NDUk9MTF9TVFJBVEVHWV9QUk9WSURFUiA9IHtcclxuICAgIHByb3ZpZGU6IE5YVF9EVFBJQ0tFUl9TQ1JPTExfU1RSQVRFR1ksXHJcbiAgICBkZXBzOiBbT3ZlcmxheV0sXHJcbiAgICB1c2VGYWN0b3J5OiBOWFRfRFRQSUNLRVJfU0NST0xMX1NUUkFURUdZX1BST1ZJREVSX0ZBQ1RPUllcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ254dC1kYXRlLXRpbWUnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2RhdGUtdGltZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiBmYWxzZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGF0ZVRpbWVDb21wb25lbnQ8VD4gZXh0ZW5kcyBEYXRlVGltZURpcmVjdGl2ZTxUPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAgIC8qKiBDdXN0b20gY2xhc3MgZm9yIHRoZSBwaWNrZXIgYmFja2Ryb3AgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBiYWNrZHJvcENsYXNzPzogc3RyaW5nIHwgc3RyaW5nW11cclxuXHJcbiAgICAvKiogQ3VzdG9tIGNsYXNzIGZvciB0aGUgcGlja2VyIG92ZXJsYXkgcGFuZSAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHBhbmVsQ2xhc3M/OiBzdHJpbmcgfCBzdHJpbmdbXVxyXG5cclxuICAgIHByaXZhdGUgX3N0YXJ0QXQ/OiBUXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBkYXRlIHRvIHNob3cgd2hlbiBwaWNrZXIgb3BlbnNcclxuICAgICAqXHJcbiAgICAgKiBEZWZhdWx0cyB0byBzZWxlY3RlZCBkYXRlIChpZiBhdmFpbGFibGUpIG9yIGN1cnJlbnQgZGF0ZS5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCBzdGFydEF0KCkge1xyXG4gICAgICAgIC8vIElmIGFuIGV4cGxpY2l0IHN0YXJ0QXQgaXMgc2V0IHdlIHN0YXJ0IHRoZXJlLCBvdGhlcndpc2Ugd2Ugc3RhcnQgYXQgd2hhdGV2ZXIgdGhlIGN1cnJlbnRseVxyXG4gICAgICAgIC8vIHNlbGVjdGVkIHZhbHVlIGlzLlxyXG4gICAgICAgIGlmICh0aGlzLl9zdGFydEF0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGFydEF0XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5fZHRJbnB1dCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fZHRJbnB1dC5zZWxlY3RNb2RlID09PSAnc2luZ2xlJykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2R0SW5wdXQudmFsdWVcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgICAgIHRoaXMuX2R0SW5wdXQuc2VsZWN0TW9kZSA9PT0gJ3JhbmdlJyB8fFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fZHRJbnB1dC5zZWxlY3RNb2RlID09PSAncmFuZ2VGcm9tJ1xyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9kdElucHV0LnZhbHVlc1swXVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2R0SW5wdXQuc2VsZWN0TW9kZSA9PT0gJ3JhbmdlVG8nKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZHRJbnB1dC52YWx1ZXNbMV1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICBzZXQgc3RhcnRBdChkYXRlOiBUIHwgdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy5fc3RhcnRBdCA9IHRoaXMuZ2V0VmFsaWREYXRlKFxyXG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlci5kZXNlcmlhbGl6ZShkYXRlKVxyXG4gICAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9waWNrZXJUeXBlOiBQaWNrZXJUeXBlID0gJ2JvdGgnXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgdHlwZSBvZiB0aGUgZGF0ZVRpbWUgcGlja2VyXHJcbiAgICAgKlxyXG4gICAgICogLSAgICBgJ2JvdGgnYCAtIHNob3cgYm90aCBjYWxlbmRhciBhbmQgdGltZXJcclxuICAgICAqIC0gICAgYCdjYWxlbmRhcidgIC0gc2hvdyBvbmx5IGNhbGVuZGFyXHJcbiAgICAgKiAtICAgIGAndGltZXInYCAtIHNob3cgb25seSB0aW1lclxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IHBpY2tlclR5cGUoKTogUGlja2VyVHlwZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BpY2tlclR5cGVcclxuICAgIH1cclxuXHJcbiAgICBzZXQgcGlja2VyVHlwZSh2YWw6IFBpY2tlclR5cGUpIHtcclxuICAgICAgICBpZiAodmFsICE9PSB0aGlzLl9waWNrZXJUeXBlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3BpY2tlclR5cGUgPSB2YWxcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2R0SW5wdXQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2R0SW5wdXQuZm9ybWF0TmF0aXZlSW5wdXRWYWx1ZSgpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfcGlja2VyTW9kZTogUGlja2VyTW9kZSA9ICdwb3B1cCdcclxuICAgIC8qKlxyXG4gICAgICogVGhlIHN0eWxlIHRoZSBwaWNrZXIgd291bGQgb3BlbiBhc1xyXG4gICAgICpcclxuICAgICAqIC0gICAgYCdwb3B1cCdgIC0gZGlzcGxheSBwaWNrZXIgYXR0YWNoZWQgdG8gdGhlIHRyaWdnZXIgZWxlbWVudFxyXG4gICAgICogLSAgICBgJ2RpYWxvZydgIC0gZGlzcGxheSBwaWNrZXIgYXMgYSBkaWFsb2dcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCBwaWNrZXJNb2RlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9waWNrZXJNb2RlXHJcbiAgICB9XHJcblxyXG4gICAgc2V0IHBpY2tlck1vZGUobW9kZTogUGlja2VyTW9kZSkge1xyXG4gICAgICAgIGlmIChtb2RlID09PSAncG9wdXAnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3BpY2tlck1vZGUgPSBtb2RlXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fcGlja2VyTW9kZSA9ICdkaWFsb2cnXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2Rpc2FibGVkPzogYm9vbGVhblxyXG4gICAgLyoqIFdoZXRoZXIgdGhlIGRhdGUgdGltZSBwaWNrZXIgc2hvdWxkIGJlIGRpc2FibGVkICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgb3ZlcnJpZGUgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZCA/PyAhIXRoaXMuX2R0SW5wdXQ/LmRpc2FibGVkXHJcbiAgICB9XHJcblxyXG4gICAgb3ZlcnJpZGUgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgdmFsdWUgPSAhIXZhbHVlXHJcbiAgICAgICAgaWYgKHZhbHVlICE9PSB0aGlzLl9kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9kaXNhYmxlZCA9IHZhbHVlXHJcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZWRDaGFuZ2UubmV4dCh2YWx1ZSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfaXNPcGVuOiBib29sZWFuID0gZmFsc2VcclxuICAgIC8qKiBXaGV0aGVyIHRoZSBjYWxlbmRhciBpcyBvcGVuICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IGlzT3BlbigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faXNPcGVuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0IGlzT3Blbih2YWw6IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAodmFsKVxyXG4gICAgICAgICAgICB0aGlzLm9wZW4oKVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5jbG9zZSgpXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgc2Nyb2xsIHN0cmF0ZWd5IHdoZW4gdGhlIHBpY2tlciBpcyBvcGVuIChzZWUgW0NESyBkb2N1bWVudGF0aW9uXShodHRwczovL21hdGVyaWFsLmFuZ3VsYXIuaW8vY2RrL292ZXJsYXkvb3ZlcnZpZXcjc2Nyb2xsLXN0cmF0ZWdpZXMpKVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgc2Nyb2xsU3RyYXRlZ3k/OiBTY3JvbGxTdHJhdGVneVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGJhY2sgd2hlbiB0aGUgcGlja2VyIGlzIG9wZW5lZFxyXG4gICAgICovXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1yZW5hbWVcclxuICAgIEBPdXRwdXQoJ29wZW4nKVxyXG4gICAgcmVhZG9ubHkgYWZ0ZXJQaWNrZXJPcGVuZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KClcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxiYWNrIHdoZW4gdGhlIHBpY2tlciBpcyBjbG9zZWRcclxuICAgICAqL1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtcmVuYW1lXHJcbiAgICBAT3V0cHV0KCdjbG9zZScpXHJcbiAgICByZWFkb25seSBhZnRlclBpY2tlckNsb3NlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRW1pdHMgc2VsZWN0ZWQgeWVhciBpbiBtdWx0aS15ZWFyIHZpZXdcclxuICAgICAqXHJcbiAgICAgKiBUaGlzIGRvZXNuJ3QgaW1wbHkgYSBjaGFuZ2Ugb24gdGhlIHNlbGVjdGVkIGRhdGUuXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcmVhZG9ubHkgeWVhclNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxUPigpXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFbWl0cyBzZWxlY3RlZCBtb250aCBpbiB5ZWFyIHZpZXdcclxuICAgICAqXHJcbiAgICAgKiBUaGlzIGRvZXNuJ3QgaW1wbHkgYSBjaGFuZ2Ugb24gdGhlIHNlbGVjdGVkIGRhdGUuXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcmVhZG9ubHkgbW9udGhTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8VD4oKVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRW1pdHMgd2hlbiBwaWNrZXIgb3BlbiBzdGF0ZSBjaGFuZ2VzXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcmVhZG9ubHkgaXNPcGVuQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFbWl0IHdoZW4gdGhlIHNlbGVjdGVkIHZhbHVlIGhhcyBiZWVuIGNvbmZpcm1lZFxyXG4gICAgICovXHJcbiAgICByZWFkb25seSBjb25maXJtU2VsZWN0ZWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEFycmF5PFQgfCB1bmRlZmluZWQ+IHwgVD4oKVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRW1pdHMgd2hlbiB0aGUgZGF0ZSB0aW1lIHBpY2tlciBpcyBkaXNhYmxlZFxyXG4gICAgICovXHJcbiAgICByZWFkb25seSBkaXNhYmxlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKVxyXG5cclxuICAgIHByaXZhdGUgcGlja2VyQ29udGFpbmVyUG9ydGFsPzogQ29tcG9uZW50UG9ydGFsPFxyXG4gICAgICAgIERhdGVUaW1lQ29udGFpbmVyQ29tcG9uZW50PFQ+XHJcbiAgICA+XHJcbiAgICBwcml2YXRlIHBpY2tlckNvbnRhaW5lcj86IERhdGVUaW1lQ29udGFpbmVyQ29tcG9uZW50PFQ+XHJcbiAgICBwcml2YXRlIHBvcHVwUmVmPzogT3ZlcmxheVJlZlxyXG4gICAgcHJpdmF0ZSBkaWFsb2dSZWY/OiBEaWFsb2dSZWY8RGF0ZVRpbWVDb250YWluZXJDb21wb25lbnQ8VD4+XHJcbiAgICBwcml2YXRlIGR0SW5wdXRTdWI/OiBTdWJzY3JpcHRpb25cclxuICAgIHByaXZhdGUgaGlkZVBpY2tlclN0cmVhbVN1Yj86IFN1YnNjcmlwdGlvblxyXG4gICAgcHJpdmF0ZSBjb25maXJtU2VsZWN0ZWRTdHJlYW1TdWI/OiBTdWJzY3JpcHRpb25cclxuICAgIHByaXZhdGUgcGlja2VyT3BlbmVkU3RyZWFtU3ViPzogU3Vic2NyaXB0aW9uXHJcblxyXG4gICAgLyoqIFRoZSBlbGVtZW50IHRoYXQgd2FzIGZvY3VzZWQgYmVmb3JlIHRoZSBkYXRlIHRpbWUgcGlja2VyIHdhcyBpc09wZW4gKi9cclxuICAgIHByaXZhdGUgZm9jdXNlZEVsZW1lbnRCZWZvcmVPcGVuPzogSFRNTEVsZW1lbnRcclxuXHJcbiAgICBwcml2YXRlIF9kdElucHV0PzogRGF0ZVRpbWVJbnB1dERpcmVjdGl2ZTxUPlxyXG4gICAgZ2V0IGR0SW5wdXQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2R0SW5wdXRcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9zZWxlY3RlZD86IFRcclxuICAgIGdldCBzZWxlY3RlZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRcclxuICAgIH1cclxuXHJcbiAgICBzZXQgc2VsZWN0ZWQodmFsdWU6IFQgfCB1bmRlZmluZWQpIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3RlZCA9IHZhbHVlXHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3NlbGVjdGVkcyA9IG5ldyBBcnJheTxUIHwgdW5kZWZpbmVkPigpXHJcbiAgICBnZXQgc2VsZWN0ZWRzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZHMgfHwgW11cclxuICAgIH1cclxuXHJcbiAgICBzZXQgc2VsZWN0ZWRzKHZhbHVlczogQXJyYXk8VCB8IHVuZGVmaW5lZD4pIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3RlZHMgPSB2YWx1ZXNcclxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpXHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFRoZSBtaW5pbXVtIHNlbGVjdGFibGUgZGF0ZSAqL1xyXG4gICAgZ2V0IG1pbigpIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuX2R0SW5wdXQgJiYgdGhpcy5fZHRJbnB1dC5taW4pXHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFRoZSBtYXhpbXVtIHNlbGVjdGFibGUgZGF0ZSAqL1xyXG4gICAgZ2V0IG1heCgpIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuX2R0SW5wdXQgJiYgdGhpcy5fZHRJbnB1dC5tYXgpXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGRhdGVUaW1lRmlsdGVyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kdElucHV0Py5kYXRlVGltZUZpbHRlclxyXG4gICAgfVxyXG5cclxuICAgIGdldCBzZWxlY3RNb2RlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kdElucHV0Py5zZWxlY3RNb2RlXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGlzSW5TaW5nbGVNb2RlKCkge1xyXG4gICAgICAgIHJldHVybiAhIXRoaXMuX2R0SW5wdXQ/LmlzSW5TaW5nbGVNb2RlXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGlzSW5SYW5nZU1vZGUoKSB7XHJcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZHRJbnB1dD8uaXNJblJhbmdlTW9kZVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgb3ZlcmxheTogT3ZlcmxheSxcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgbmdab25lOiBOZ1pvbmUsXHJcbiAgICAgICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICBkYXRlVGltZUFkYXB0ZXI6IERhdGVUaW1lQWRhcHRlcjxUPixcclxuICAgICAgICBASW5qZWN0KE5YVF9EVFBJQ0tFUl9TQ1JPTExfU1RSQVRFR1kpXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0U2Nyb2xsU3RyYXRlZ3k6ICgpID0+IFNjcm9sbFN0cmF0ZWd5LFxyXG4gICAgICAgIEBJbmplY3QoTlhUX0RBVEVfVElNRV9GT1JNQVRTKVxyXG4gICAgICAgIGRhdGVUaW1lRm9ybWF0czogRGF0ZVRpbWVGb3JtYXRzLFxyXG4gICAgICAgIEBPcHRpb25hbCgpXHJcbiAgICAgICAgQEluamVjdChET0NVTUVOVClcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50PzogRG9jdW1lbnRcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKGRhdGVUaW1lQWRhcHRlciwgZGF0ZVRpbWVGb3JtYXRzKVxyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkgeyB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jbG9zZSgpXHJcbiAgICAgICAgdGhpcy5kdElucHV0U3ViPy51bnN1YnNjcmliZSgpXHJcbiAgICAgICAgdGhpcy5kdElucHV0U3ViID0gdW5kZWZpbmVkXHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZENoYW5nZS5jb21wbGV0ZSgpXHJcblxyXG4gICAgICAgIGlmICh0aGlzLnBvcHVwUmVmKSB7XHJcbiAgICAgICAgICAgIHRoaXMucG9wdXBSZWYuZGlzcG9zZSgpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVySW5wdXQoaW5wdXQ6IERhdGVUaW1lSW5wdXREaXJlY3RpdmU8VD4pOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5fZHRJbnB1dCkge1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcclxuICAgICAgICAgICAgICAgICdBIE54dCBEYXRlVGltZVBpY2tlciBjYW4gb25seSBiZSBhc3NvY2lhdGVkIHdpdGggYSBzaW5nbGUgaW5wdXQuJ1xyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9kdElucHV0ID0gaW5wdXRcclxuICAgICAgICB0aGlzLmR0SW5wdXRTdWIgPSB0aGlzLl9kdElucHV0LnZhbHVlQ2hhbmdlLnN1YnNjcmliZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkcyA9IHZhbHVlXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkID0gdmFsdWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgb3BlbigpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5faXNPcGVuIHx8IHRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuX2R0SW5wdXQpIHtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXHJcbiAgICAgICAgICAgICAgICAnQXR0ZW1wdGVkIHRvIG9wZW4gYW4gRGF0ZVRpbWVQaWNrZXIgd2l0aCBubyBhc3NvY2lhdGVkIGlucHV0LidcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZG9jdW1lbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5mb2N1c2VkRWxlbWVudEJlZm9yZU9wZW4gPSB0aGlzLmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnRcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHJlc2V0IHRoZSBwaWNrZXIgc2VsZWN0ZWQgdmFsdWVcclxuICAgICAgICBpZiAodGhpcy5pc0luU2luZ2xlTW9kZSkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkID0gdGhpcy5fZHRJbnB1dC52YWx1ZVxyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0luUmFuZ2VNb2RlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRzID0gdGhpcy5fZHRJbnB1dC52YWx1ZXNcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHdoZW4gdGhlIHBpY2tlciBpcyBvcGVuICwgd2UgbWFrZSBzdXJlIHRoZSBwaWNrZXIncyBjdXJyZW50IHNlbGVjdGVkIHRpbWUgdmFsdWVcclxuICAgICAgICAvLyBpcyB0aGUgc2FtZSBhcyB0aGUgX3N0YXJ0QXQgdGltZSB2YWx1ZS5cclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZCAmJiB0aGlzLnBpY2tlclR5cGUgIT09ICdjYWxlbmRhcicgJiYgdGhpcy5fc3RhcnRBdCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuY3JlYXRlRGF0ZShcclxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldFllYXIodGhpcy5zZWxlY3RlZCksXHJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRNb250aCh0aGlzLnNlbGVjdGVkKSxcclxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldERhdGUodGhpcy5zZWxlY3RlZCksXHJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRIb3Vycyh0aGlzLl9zdGFydEF0KSxcclxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldE1pbnV0ZXModGhpcy5fc3RhcnRBdCksXHJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRTZWNvbmRzKHRoaXMuX3N0YXJ0QXQpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnBpY2tlck1vZGUgPT09ICdkaWFsb2cnKVxyXG4gICAgICAgICAgICB0aGlzLm9wZW5Bc0RpYWxvZygpXHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLm9wZW5Bc1BvcHVwKClcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucGlja2VyQ29udGFpbmVyKVxyXG4gICAgICAgICAgICB0aGlzLnBpY2tlckNvbnRhaW5lci5waWNrZXIgPSB0aGlzXHJcblxyXG4gICAgICAgIC8vIExpc3RlbiB0byBwaWNrZXIgY29udGFpbmVyJ3MgaGlkZVBpY2tlclN0cmVhbVxyXG4gICAgICAgIHRoaXMuaGlkZVBpY2tlclN0cmVhbVN1YiA9IHRoaXMucGlja2VyQ29udGFpbmVyPy5oaWRlUGlja2VyU3RyZWFtLnN1YnNjcmliZShcclxuICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApXHJcblxyXG4gICAgICAgIC8vIExpc3RlbiB0byBwaWNrZXIgY29udGFpbmVyJ3MgY29uZmlybVNlbGVjdGVkU3RyZWFtXHJcbiAgICAgICAgdGhpcy5jb25maXJtU2VsZWN0ZWRTdHJlYW1TdWIgPSB0aGlzLnBpY2tlckNvbnRhaW5lcj8uY29uZmlybVNlbGVjdGVkU3RyZWFtLnN1YnNjcmliZShcclxuICAgICAgICAgICAgKGV2ZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlybVNlbGVjdChldmVudClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNlbGVjdHMgdGhlIGdpdmVuIGRhdGVcclxuICAgICAqL1xyXG4gICAgc2VsZWN0KGRhdGU6IFRbXSB8IFQpOiB2b2lkIHtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRlKSkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkcyA9IFsuLi5kYXRlXVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWQgPSBkYXRlXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDYXNlcyBpbiB3aGljaCBhdXRvbWF0aWNhbGx5IGNvbmZpcm0gdGhlIHNlbGVjdCB3aGVuIGRhdGUgb3IgZGF0ZXMgYXJlIHNlbGVjdGVkOlxyXG4gICAgICAgICAqIDEpIHBpY2tlciBtb2RlIGlzIE5PVCAnZGlhbG9nJ1xyXG4gICAgICAgICAqIDIpIHBpY2tlciB0eXBlIGlzICdjYWxlbmRhcicgYW5kIHNlbGVjdE1vZGUgaXMgJ3NpbmdsZScuXHJcbiAgICAgICAgICogMykgcGlja2VyIHR5cGUgaXMgJ2NhbGVuZGFyJyBhbmQgc2VsZWN0TW9kZSBpcyAncmFuZ2UnIGFuZFxyXG4gICAgICAgICAqICAgIHRoZSAnc2VsZWN0ZWRzJyBoYXMgJ2Zyb20nKHNlbGVjdGVkc1swXSkgYW5kICd0bycoc2VsZWN0ZWRzWzFdKSB2YWx1ZXMuXHJcbiAgICAgICAgICogNCkgc2VsZWN0TW9kZSBpcyAncmFuZ2VGcm9tJyBhbmQgc2VsZWN0ZWRzWzBdIGhhcyB2YWx1ZS5cclxuICAgICAgICAgKiA1KSBzZWxlY3RNb2RlIGlzICdyYW5nZVRvJyBhbmQgc2VsZWN0ZWRzWzFdIGhhcyB2YWx1ZS5cclxuICAgICAgICAgKi9cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMucGlja2VyTW9kZSAhPT0gJ2RpYWxvZycgJiZcclxuICAgICAgICAgICAgdGhpcy5waWNrZXJUeXBlID09PSAnY2FsZW5kYXInICYmXHJcbiAgICAgICAgICAgICgodGhpcy5zZWxlY3RNb2RlID09PSAnc2luZ2xlJyAmJiB0aGlzLnNlbGVjdGVkKSB8fFxyXG4gICAgICAgICAgICAgICAgKHRoaXMuc2VsZWN0TW9kZSA9PT0gJ3JhbmdlRnJvbScgJiYgdGhpcy5zZWxlY3RlZHNbMF0pIHx8XHJcbiAgICAgICAgICAgICAgICAodGhpcy5zZWxlY3RNb2RlID09PSAncmFuZ2VUbycgJiYgdGhpcy5zZWxlY3RlZHNbMV0pIHx8XHJcbiAgICAgICAgICAgICAgICAodGhpcy5zZWxlY3RNb2RlID09PSAncmFuZ2UnICYmXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZHNbMF0gJiZcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkc1sxXSkpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlybVNlbGVjdCgpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRW1pdHMgdGhlIHNlbGVjdGVkIHllYXIgaW4gbXVsdGkteWVhciB2aWV3XHJcbiAgICAgKi9cclxuICAgIHNlbGVjdFllYXIobm9ybWFsaXplZFllYXI6IFQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnllYXJTZWxlY3RlZC5lbWl0KG5vcm1hbGl6ZWRZZWFyKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRW1pdHMgc2VsZWN0ZWQgbW9udGggaW4geWVhciB2aWV3XHJcbiAgICAgKi9cclxuICAgIHNlbGVjdE1vbnRoKG5vcm1hbGl6ZWRNb250aDogVCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubW9udGhTZWxlY3RlZC5lbWl0KG5vcm1hbGl6ZWRNb250aClcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhpZGUgdGhlIHBpY2tlclxyXG4gICAgICovXHJcbiAgICBjbG9zZSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2lzT3Blbikge1xyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnBvcHVwUmVmICYmIHRoaXMucG9wdXBSZWYuaGFzQXR0YWNoZWQoKSkge1xyXG4gICAgICAgICAgICB0aGlzLnBvcHVwUmVmLmRldGFjaCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMucGlja2VyQ29udGFpbmVyUG9ydGFsICYmXHJcbiAgICAgICAgICAgIHRoaXMucGlja2VyQ29udGFpbmVyUG9ydGFsLmlzQXR0YWNoZWRcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5waWNrZXJDb250YWluZXJQb3J0YWwuZGV0YWNoKClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaGlkZVBpY2tlclN0cmVhbVN1Yj8udW5zdWJzY3JpYmUoKVxyXG4gICAgICAgIHRoaXMuaGlkZVBpY2tlclN0cmVhbVN1YiA9IHVuZGVmaW5lZFxyXG5cclxuICAgICAgICB0aGlzLmNvbmZpcm1TZWxlY3RlZFN0cmVhbVN1Yj8udW5zdWJzY3JpYmUoKVxyXG4gICAgICAgIHRoaXMuY29uZmlybVNlbGVjdGVkU3RyZWFtU3ViID0gdW5kZWZpbmVkXHJcblxyXG4gICAgICAgIHRoaXMucGlja2VyT3BlbmVkU3RyZWFtU3ViPy51bnN1YnNjcmliZSgpXHJcbiAgICAgICAgdGhpcy5waWNrZXJPcGVuZWRTdHJlYW1TdWIgPSB1bmRlZmluZWRcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZGlhbG9nUmVmKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKClcclxuICAgICAgICAgICAgdGhpcy5kaWFsb2dSZWYgPSB1bmRlZmluZWRcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGNvbXBsZXRlQ2xvc2UgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc09wZW4pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2lzT3BlbiA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzT3BlbkNoYW5nZS5lbWl0KHRoaXMuX2lzT3BlbilcclxuICAgICAgICAgICAgICAgIHRoaXMuYWZ0ZXJQaWNrZXJDbG9zZWQuZW1pdCgpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzZWRFbGVtZW50QmVmb3JlT3BlbiA9IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMuZm9jdXNlZEVsZW1lbnRCZWZvcmVPcGVuICYmXHJcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLmZvY3VzZWRFbGVtZW50QmVmb3JlT3Blbi5mb2N1cyA9PT0gJ2Z1bmN0aW9uJ1xyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICAvLyBCZWNhdXNlIElFIG1vdmVzIGZvY3VzIGFzeW5jaHJvbm91c2x5LCB3ZSBjYW4ndCBjb3VudCBvbiBpdCBiZWluZyByZXN0b3JlZCBiZWZvcmUgd2UndmVcclxuICAgICAgICAgICAgLy8gbWFya2VkIHRoZSBkYXRlcGlja2VyIGFzIGNsb3NlZC4gSWYgdGhlIGV2ZW50IGZpcmVzIG91dCBvZiBzZXF1ZW5jZSBhbmQgdGhlIGVsZW1lbnQgdGhhdFxyXG4gICAgICAgICAgICAvLyB3ZSdyZSByZWZvY3VzaW5nIG9wZW5zIHRoZSBkYXRlcGlja2VyIG9uIGZvY3VzLCB0aGUgdXNlciBjb3VsZCBiZSBzdHVjayB3aXRoIG5vdCBiZWluZ1xyXG4gICAgICAgICAgICAvLyBhYmxlIHRvIGNsb3NlIHRoZSBjYWxlbmRhciBhdCBhbGwuIFdlIHdvcmsgYXJvdW5kIGl0IGJ5IG1ha2luZyB0aGUgbG9naWMsIHRoYXQgbWFya3NcclxuICAgICAgICAgICAgLy8gdGhlIGRhdGVwaWNrZXIgYXMgY2xvc2VkLCBhc3luYyBhcyB3ZWxsLlxyXG4gICAgICAgICAgICB0aGlzLmZvY3VzZWRFbGVtZW50QmVmb3JlT3Blbi5mb2N1cygpXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoY29tcGxldGVDbG9zZSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb21wbGV0ZUNsb3NlKClcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb25maXJtIHRoZSBzZWxlY3RlZCB2YWx1ZVxyXG4gICAgICovXHJcbiAgICBjb25maXJtU2VsZWN0KF9ldmVudD86IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmlzSW5TaW5nbGVNb2RlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID1cclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWQgfHwgdGhpcy5zdGFydEF0IHx8IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLm5vdygpXHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlybVNlbGVjdGVkQ2hhbmdlLmVtaXQoc2VsZWN0ZWQpXHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzSW5SYW5nZU1vZGUpIHtcclxuICAgICAgICAgICAgdGhpcy5jb25maXJtU2VsZWN0ZWRDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkcylcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY2xvc2UoKVxyXG4gICAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT3BlbiB0aGUgcGlja2VyIGFzIGEgZGlhbG9nXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgb3BlbkFzRGlhbG9nKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZGlhbG9nUmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oXHJcbiAgICAgICAgICAgIERhdGVUaW1lQ29udGFpbmVyQ29tcG9uZW50LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBhdXRvRm9jdXM6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgYmFja2Ryb3BDbGFzczogW1xyXG4gICAgICAgICAgICAgICAgICAgICdjZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wJyxcclxuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLmJhY2tkcm9wQ2xhc3MgPyBjb2VyY2VBcnJheSh0aGlzLmJhY2tkcm9wQ2xhc3MpIDogW11cclxuICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICBwYW5lQ2xhc3M6IFtcclxuICAgICAgICAgICAgICAgICAgICAnbnh0LWR0LWRpYWxvZycsXHJcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5wYW5lbENsYXNzID8gY29lcmNlQXJyYXkodGhpcy5wYW5lbENsYXNzKSA6IFtdXHJcbiAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgdmlld0NvbnRhaW5lclJlZjogdGhpcy52aWV3Q29udGFpbmVyUmVmLFxyXG4gICAgICAgICAgICAgICAgc2Nyb2xsU3RyYXRlZ3k6IHRoaXMuc2Nyb2xsU3RyYXRlZ3kgfHwgdGhpcy5kZWZhdWx0U2Nyb2xsU3RyYXRlZ3koKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKVxyXG4gICAgICAgIHRoaXMucGlja2VyQ29udGFpbmVyID0gdGhpcy5kaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2VcclxuXHJcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuYWZ0ZXJPcGVuKCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5faXNPcGVuID0gdHJ1ZVxyXG4gICAgICAgICAgICB0aGlzLmlzT3BlbkNoYW5nZS5lbWl0KHRoaXMuX2lzT3BlbilcclxuICAgICAgICAgICAgdGhpcy5hZnRlclBpY2tlck9wZW5lZC5lbWl0KClcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2xvc2UoKSlcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE9wZW4gdGhlIHBpY2tlciBhcyBwb3B1cFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIG9wZW5Bc1BvcHVwKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5waWNrZXJDb250YWluZXJQb3J0YWwpIHtcclxuICAgICAgICAgICAgdGhpcy5waWNrZXJDb250YWluZXJQb3J0YWwgPSBuZXcgQ29tcG9uZW50UG9ydGFsPFxyXG4gICAgICAgICAgICAgICAgRGF0ZVRpbWVDb250YWluZXJDb21wb25lbnQ8VD5cclxuICAgICAgICAgICAgPihEYXRlVGltZUNvbnRhaW5lckNvbXBvbmVudCwgdGhpcy52aWV3Q29udGFpbmVyUmVmKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnBvcHVwUmVmKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlUG9wdXAoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnBvcHVwUmVmPy5oYXNBdHRhY2hlZCgpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPFxyXG4gICAgICAgICAgICAgICAgRGF0ZVRpbWVDb250YWluZXJDb21wb25lbnQ8VD5cclxuICAgICAgICAgICAgPiB8IHVuZGVmaW5lZCA9IHRoaXMucG9wdXBSZWY/LmF0dGFjaCh0aGlzLnBpY2tlckNvbnRhaW5lclBvcnRhbClcclxuICAgICAgICAgICAgdGhpcy5waWNrZXJDb250YWluZXIgPSBjb21wb25lbnRSZWY/Lmluc3RhbmNlXHJcblxyXG4gICAgICAgICAgICAvLyBVcGRhdGUgdGhlIHBvc2l0aW9uIG9uY2UgdGhlIGNhbGVuZGFyIGhhcyByZW5kZXJlZC5cclxuICAgICAgICAgICAgdGhpcy5uZ1pvbmUub25TdGFibGVcclxuICAgICAgICAgICAgICAgIC5hc09ic2VydmFibGUoKVxyXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZSgxKSlcclxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucG9wdXBSZWY/LnVwZGF0ZVBvc2l0aW9uKClcclxuICAgICAgICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgICAvLyBlbWl0IG9wZW4gc3RyZWFtXHJcbiAgICAgICAgICAgIHRoaXMucGlja2VyT3BlbmVkU3RyZWFtU3ViID0gdGhpcy5waWNrZXJDb250YWluZXI/LnBpY2tlck9wZW5lZFN0cmVhbVxyXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZSgxKSlcclxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2lzT3BlbiA9IHRydWVcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzT3BlbkNoYW5nZS5lbWl0KHRoaXMuX2lzT3BlbilcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFmdGVyUGlja2VyT3BlbmVkLmVtaXQoKVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjcmVhdGVQb3B1cCgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBvdmVybGF5Q29uZmlnID0gbmV3IE92ZXJsYXlDb25maWcoe1xyXG4gICAgICAgICAgICBwb3NpdGlvblN0cmF0ZWd5OiB0aGlzLmNyZWF0ZVBvcHVwUG9zaXRpb25TdHJhdGVneSgpLFxyXG4gICAgICAgICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgICAgICAgYmFja2Ryb3BDbGFzczogW1xyXG4gICAgICAgICAgICAgICAgJ2Nkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wJyxcclxuICAgICAgICAgICAgICAgIC4uLnRoaXMuYmFja2Ryb3BDbGFzcyA/IGNvZXJjZUFycmF5KHRoaXMuYmFja2Ryb3BDbGFzcykgOiBbXVxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICBzY3JvbGxTdHJhdGVneTogdGhpcy5zY3JvbGxTdHJhdGVneSB8fCB0aGlzLmRlZmF1bHRTY3JvbGxTdHJhdGVneSgpLFxyXG4gICAgICAgICAgICBwYW5lbENsYXNzOiBbXHJcbiAgICAgICAgICAgICAgICAnbnh0LWR0LXBvcHVwJyxcclxuICAgICAgICAgICAgICAgIC4uLnRoaXMucGFuZWxDbGFzcyA/IGNvZXJjZUFycmF5KHRoaXMucGFuZWxDbGFzcykgOiBbXVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgdGhpcy5wb3B1cFJlZiA9IHRoaXMub3ZlcmxheS5jcmVhdGUob3ZlcmxheUNvbmZpZylcclxuXHJcbiAgICAgICAgbWVyZ2UoXHJcbiAgICAgICAgICAgIHRoaXMucG9wdXBSZWYuYmFja2Ryb3BDbGljaygpLFxyXG4gICAgICAgICAgICB0aGlzLnBvcHVwUmVmLmRldGFjaG1lbnRzKCksXHJcbiAgICAgICAgICAgIHRoaXMucG9wdXBSZWZcclxuICAgICAgICAgICAgICAgIC5rZXlkb3duRXZlbnRzKClcclxuICAgICAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQgPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICEhKGV2ZW50LmNvZGUudG9Mb3dlckNhc2UoKSA9PT0gJ2VzY2FwZScgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5fZHRJbnB1dCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5hbHRLZXkgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuY29kZS50b0xvd2VyQ2FzZSgpID09PSAnYXJyb3d1cCcpKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICApLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNsb3NlKCkpXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGUgdGhlIHBvcHVwIFBvc2l0aW9uU3RyYXRlZ3kuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgY3JlYXRlUG9wdXBQb3NpdGlvblN0cmF0ZWd5KCk6IFBvc2l0aW9uU3RyYXRlZ3kgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIGlmICh0aGlzLl9kdElucHV0KVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vdmVybGF5XHJcbiAgICAgICAgICAgICAgICAucG9zaXRpb24oKVxyXG4gICAgICAgICAgICAgICAgLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5fZHRJbnB1dC5lbGVtZW50UmVmKVxyXG4gICAgICAgICAgICAgICAgLndpdGhUcmFuc2Zvcm1PcmlnaW5PbignLm54dC1kdC1jb250YWluZXInKVxyXG4gICAgICAgICAgICAgICAgLndpdGhGbGV4aWJsZURpbWVuc2lvbnMoZmFsc2UpXHJcbiAgICAgICAgICAgICAgICAud2l0aFB1c2goZmFsc2UpXHJcbiAgICAgICAgICAgICAgICAud2l0aFBvc2l0aW9ucyhbXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5ZOiAnYm90dG9tJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJsYXlZOiAndG9wJ1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5ZOiAndG9wJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJsYXlZOiAnYm90dG9tJ1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5YOiAnZW5kJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luWTogJ2JvdHRvbScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJsYXlYOiAnZW5kJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheVk6ICd0b3AnXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpblg6ICdlbmQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5ZOiAndG9wJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheVg6ICdlbmQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvdmVybGF5WTogJ2JvdHRvbSdcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luWDogJ3N0YXJ0JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luWTogJ3RvcCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvdmVybGF5WTogJ3RvcCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldFk6IC0xNzZcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luWDogJ3N0YXJ0JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luWTogJ3RvcCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvdmVybGF5WTogJ3RvcCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldFk6IC0zNTJcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBdKVxyXG4gICAgICAgIHJldHVyblxyXG4gICAgfVxyXG59XHJcbiIsIlxyXG4iXX0=
|
|
541
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9waWNrLWRhdGV0aW1lL3NyYy9saWIvZGF0ZS10aW1lL2RhdGUtdGltZS1waWNrZXIvZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9waWNrLWRhdGV0aW1lL3NyYy9saWIvZGF0ZS10aW1lL2RhdGUtdGltZS1waWNrZXIvZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUE7QUFDbkQsT0FBTyxFQUF1QixPQUFPLEVBQUUsYUFBYSxFQUFnRCxNQUFNLHNCQUFzQixDQUFBO0FBQ2hJLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUNyRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDMUMsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQWdCLFlBQVksRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBNkIsUUFBUSxFQUFFLE1BQU0sRUFBb0IsTUFBTSxlQUFlLENBQUE7QUFDL00sT0FBTyxFQUFFLEtBQUssRUFBZ0IsTUFBTSxNQUFNLENBQUE7QUFDMUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUU3QyxPQUFPLEVBQW1CLHFCQUFxQixFQUFFLE1BQU0sb0NBQW9DLENBQUE7QUFDM0YsT0FBTyxFQUFFLGlCQUFpQixFQUEwQixNQUFNLDZCQUE2QixDQUFBO0FBR3ZGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG9FQUFvRSxDQUFBOzs7OztBQUcvRzs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdB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QUFFLE9BQU87b0JBQ2hCLE9BQU8sRUFBRSxLQUFLO29CQUNkLFFBQVEsRUFBRSxPQUFPO29CQUNqQixRQUFRLEVBQUUsS0FBSztvQkFDZixPQUFPLEVBQUUsQ0FBQyxHQUFHO2lCQUNoQjthQUNKLENBQUMsQ0FBQTtRQUNWLE9BQU07SUFDVixDQUFDOzhHQXRtQlEsaUJBQWlCLDRMQStPZCw0QkFBNEIsYUFFNUIscUJBQXFCLGFBR3JCLFFBQVE7a0dBcFBYLGlCQUFpQixvY0M5QzlCLE1BQ0E7OzJGRDZDYSxpQkFBaUI7a0JBUDdCLFNBQVM7K0JBQ0ksZUFBZSxtQkFHUix1QkFBdUIsQ0FBQyxNQUFNLHVCQUMxQixLQUFLOzswQkFpUHJCLE1BQU07MkJBQUMsNEJBQTRCOzswQkFFbkMsTUFBTTsyQkFBQyxxQkFBcUI7OzBCQUU1QixRQUFROzswQkFDUixNQUFNOzJCQUFDLFFBQVE7eUNBalBwQixhQUFhO3NCQURaLEtBQUs7Z0JBS04sVUFBVTtzQkFEVCxLQUFLO2dCQVVGLE9BQU87c0JBRFYsS0FBSztnQkFzQ0YsVUFBVTtzQkFEYixLQUFLO2dCQXNCRixVQUFVO3NCQURiLEtBQUs7Z0JBZ0JPLFFBQVE7c0JBRHBCLEtBQUs7Z0JBZ0JGLE1BQU07c0JBRFQsS0FBSztnQkFnQk4sY0FBYztzQkFEYixLQUFLO2dCQVFHLGlCQUFpQjtzQkFEekIsTUFBTTt1QkFBQyxNQUFNO2dCQVFMLGlCQUFpQjtzQkFEekIsTUFBTTt1QkFBQyxPQUFPO2dCQVNOLFlBQVk7c0JBRHBCLE1BQU07Z0JBU0UsYUFBYTtzQkFEckIsTUFBTTtnQkFPRSxZQUFZO3NCQURwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29lcmNlQXJyYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nXHJcbmltcG9ydCB7IEJsb2NrU2Nyb2xsU3RyYXRlZ3ksIE92ZXJsYXksIE92ZXJsYXlDb25maWcsIE92ZXJsYXlSZWYsIFBvc2l0aW9uU3RyYXRlZ3ksIFNjcm9sbFN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknXHJcbmltcG9ydCB7IENvbXBvbmVudFBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnXHJcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJ1xyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgQ29tcG9uZW50UmVmLCBFdmVudEVtaXR0ZXIsIEluamVjdCwgSW5qZWN0aW9uVG9rZW4sIElucHV0LCBOZ1pvbmUsIE9uRGVzdHJveSwgT25Jbml0LCBPcHRpb25hbCwgT3V0cHV0LCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcclxuaW1wb3J0IHsgbWVyZ2UsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnXHJcbmltcG9ydCB7IGZpbHRlciwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xyXG5pbXBvcnQgeyBEYXRlVGltZUFkYXB0ZXIgfSBmcm9tICcuLi8uLi9jbGFzcy9kYXRlLXRpbWUtYWRhcHRlci5jbGFzcydcclxuaW1wb3J0IHsgRGF0ZVRpbWVGb3JtYXRzLCBOWFRfREFURV9USU1FX0ZPUk1BVFMgfSBmcm9tICcuLi8uLi9jbGFzcy9kYXRlLXRpbWUtZm9ybWF0LmNsYXNzJ1xyXG5pbXBvcnQgeyBEYXRlVGltZURpcmVjdGl2ZSwgUGlja2VyTW9kZSwgUGlja2VyVHlwZSB9IGZyb20gJy4uLy4uL2NsYXNzL2RhdGUtdGltZS5jbGFzcydcclxuaW1wb3J0IHsgRGlhbG9nUmVmIH0gZnJvbSAnLi4vLi4vY2xhc3MvZGlhbG9nLXJlZi5jbGFzcydcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJy4uLy4uL2RpYWxvZy9kaWFsb2cuc2VydmljZSdcclxuaW1wb3J0IHsgRGF0ZVRpbWVDb250YWluZXJDb21wb25lbnQgfSBmcm9tICcuLi9kYXRlLXRpbWUtcGlja2VyLWNvbnRhaW5lci9kYXRlLXRpbWUtcGlja2VyLWNvbnRhaW5lci5jb21wb25lbnQnXHJcbmltcG9ydCB7IERhdGVUaW1lSW5wdXREaXJlY3RpdmUgfSBmcm9tICcuLi9kYXRlLXRpbWUtcGlja2VyLWlucHV0LmRpcmVjdGl2ZSdcclxuXHJcbi8qKlxyXG4gKiBJbmplY3Rpb24gdG9rZW4gdGhhdCBkZXRlcm1pbmVzIHRoZSBzY3JvbGwgaGFuZGxpbmcgd2hpbGUgdGhlIGR0UGlja2VyIGlzIG9wZW4uXHJcbiAqXHJcbiAqIEBpbnRlcm5hbFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IE5YVF9EVFBJQ0tFUl9TQ1JPTExfU1RSQVRFR1kgPSBuZXcgSW5qZWN0aW9uVG9rZW48XHJcbiAgICAoKSA9PiBTY3JvbGxTdHJhdGVneVxyXG4+KCdOWFRfRFRQSUNLRVJfU0NST0xMX1NUUkFURUdZJylcclxuXHJcbi8qKiBAaW50ZXJuYWwgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIE5YVF9EVFBJQ0tFUl9TQ1JPTExfU1RSQVRFR1lfUFJPVklERVJfRkFDVE9SWShcclxuICAgIG92ZXJsYXk6IE92ZXJsYXlcclxuKTogKCkgPT4gQmxvY2tTY3JvbGxTdHJhdGVneSB7XHJcbiAgICBjb25zdCBmbiA9ICgpID0+IG92ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5ibG9jaygpXHJcbiAgICByZXR1cm4gZm5cclxufVxyXG5cclxuLyoqIEBpbnRlcm5hbCAqL1xyXG5leHBvcnQgY29uc3QgTlhUX0RUUElDS0VSX1NDUk9MTF9TVFJBVEVHWV9QUk9WSURFUiA9IHtcclxuICAgIHByb3ZpZGU6IE5YVF9EVFBJQ0tFUl9TQ1JPTExfU1RSQVRFR1ksXHJcbiAgICBkZXBzOiBbT3ZlcmxheV0sXHJcbiAgICB1c2VGYWN0b3J5OiBOWFRfRFRQSUNLRVJfU0NST0xMX1NUUkFURUdZX1BST1ZJREVSX0ZBQ1RPUllcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ254dC1kYXRlLXRpbWUnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2RhdGUtdGltZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiBmYWxzZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGF0ZVRpbWVDb21wb25lbnQ8VD4gZXh0ZW5kcyBEYXRlVGltZURpcmVjdGl2ZTxUPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAgIC8qKiBDdXN0b20gY2xhc3MgZm9yIHRoZSBwaWNrZXIgYmFja2Ryb3AgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBiYWNrZHJvcENsYXNzPzogc3RyaW5nIHwgc3RyaW5nW11cclxuXHJcbiAgICAvKiogQ3VzdG9tIGNsYXNzIGZvciB0aGUgcGlja2VyIG92ZXJsYXkgcGFuZSAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHBhbmVsQ2xhc3M/OiBzdHJpbmcgfCBzdHJpbmdbXVxyXG5cclxuICAgIHByaXZhdGUgX3N0YXJ0QXQ/OiBUXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBkYXRlIHRvIHNob3cgd2hlbiBwaWNrZXIgb3BlbnNcclxuICAgICAqXHJcbiAgICAgKiBEZWZhdWx0cyB0byBzZWxlY3RlZCBkYXRlIChpZiBhdmFpbGFibGUpIG9yIGN1cnJlbnQgZGF0ZS5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCBzdGFydEF0KCkge1xyXG4gICAgICAgIC8vIElmIGFuIGV4cGxpY2l0IHN0YXJ0QXQgaXMgc2V0IHdlIHN0YXJ0IHRoZXJlLCBvdGhlcndpc2Ugd2Ugc3RhcnQgYXQgd2hhdGV2ZXIgdGhlIGN1cnJlbnRseVxyXG4gICAgICAgIC8vIHNlbGVjdGVkIHZhbHVlIGlzLlxyXG4gICAgICAgIGlmICh0aGlzLl9zdGFydEF0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGFydEF0XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5fZHRJbnB1dCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fZHRJbnB1dC5zZWxlY3RNb2RlID09PSAnc2luZ2xlJykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2R0SW5wdXQudmFsdWVcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgICAgIHRoaXMuX2R0SW5wdXQuc2VsZWN0TW9kZSA9PT0gJ3JhbmdlJyB8fFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fZHRJbnB1dC5zZWxlY3RNb2RlID09PSAncmFuZ2VGcm9tJ1xyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9kdElucHV0LnZhbHVlc1swXVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2R0SW5wdXQuc2VsZWN0TW9kZSA9PT0gJ3JhbmdlVG8nKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZHRJbnB1dC52YWx1ZXNbMV1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICBzZXQgc3RhcnRBdChkYXRlOiBUIHwgdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy5fc3RhcnRBdCA9IHRoaXMuZ2V0VmFsaWREYXRlKFxyXG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlci5kZXNlcmlhbGl6ZShkYXRlKVxyXG4gICAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9waWNrZXJUeXBlOiBQaWNrZXJUeXBlID0gJ2JvdGgnXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgdHlwZSBvZiB0aGUgZGF0ZVRpbWUgcGlja2VyXHJcbiAgICAgKlxyXG4gICAgICogLSAgICBgJ2JvdGgnYCAtIHNob3cgYm90aCBjYWxlbmRhciBhbmQgdGltZXJcclxuICAgICAqIC0gICAgYCdjYWxlbmRhcidgIC0gc2hvdyBvbmx5IGNhbGVuZGFyXHJcbiAgICAgKiAtICAgIGAndGltZXInYCAtIHNob3cgb25seSB0aW1lclxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IHBpY2tlclR5cGUoKTogUGlja2VyVHlwZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BpY2tlclR5cGVcclxuICAgIH1cclxuXHJcbiAgICBzZXQgcGlja2VyVHlwZSh2YWw6IFBpY2tlclR5cGUpIHtcclxuICAgICAgICBpZiAodmFsICE9PSB0aGlzLl9waWNrZXJUeXBlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3BpY2tlclR5cGUgPSB2YWxcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2R0SW5wdXQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2R0SW5wdXQuZm9ybWF0TmF0aXZlSW5wdXRWYWx1ZSgpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfcGlja2VyTW9kZTogUGlja2VyTW9kZSA9ICdwb3B1cCdcclxuICAgIC8qKlxyXG4gICAgICogVGhlIHN0eWxlIHRoZSBwaWNrZXIgd291bGQgb3BlbiBhc1xyXG4gICAgICpcclxuICAgICAqIC0gICAgYCdwb3B1cCdgIC0gZGlzcGxheSBwaWNrZXIgYXR0YWNoZWQgdG8gdGhlIHRyaWdnZXIgZWxlbWVudFxyXG4gICAgICogLSAgICBgJ2RpYWxvZydgIC0gZGlzcGxheSBwaWNrZXIgYXMgYSBkaWFsb2dcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCBwaWNrZXJNb2RlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9waWNrZXJNb2RlXHJcbiAgICB9XHJcblxyXG4gICAgc2V0IHBpY2tlck1vZGUobW9kZTogUGlja2VyTW9kZSkge1xyXG4gICAgICAgIGlmIChtb2RlID09PSAncG9wdXAnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3BpY2tlck1vZGUgPSBtb2RlXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fcGlja2VyTW9kZSA9ICdkaWFsb2cnXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2Rpc2FibGVkPzogYm9vbGVhblxyXG4gICAgLyoqIFdoZXRoZXIgdGhlIGRhdGUgdGltZSBwaWNrZXIgc2hvdWxkIGJlIGRpc2FibGVkICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgb3ZlcnJpZGUgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZCA/PyAhIXRoaXMuX2R0SW5wdXQ/LmRpc2FibGVkXHJcbiAgICB9XHJcblxyXG4gICAgb3ZlcnJpZGUgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgdmFsdWUgPSAhIXZhbHVlXHJcbiAgICAgICAgaWYgKHZhbHVlICE9PSB0aGlzLl9kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9kaXNhYmxlZCA9IHZhbHVlXHJcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZWRDaGFuZ2UubmV4dCh2YWx1ZSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfaXNPcGVuOiBib29sZWFuID0gZmFsc2VcclxuICAgIC8qKiBXaGV0aGVyIHRoZSBjYWxlbmRhciBpcyBvcGVuICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IGlzT3BlbigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faXNPcGVuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0IGlzT3Blbih2YWw6IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAodmFsKVxyXG4gICAgICAgICAgICB0aGlzLm9wZW4oKVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5jbG9zZSgpXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgc2Nyb2xsIHN0cmF0ZWd5IHdoZW4gdGhlIHBpY2tlciBpcyBvcGVuIChzZWUgW0NESyBkb2N1bWVudGF0aW9uXShodHRwczovL21hdGVyaWFsLmFuZ3VsYXIuaW8vY2RrL292ZXJsYXkvb3ZlcnZpZXcjc2Nyb2xsLXN0cmF0ZWdpZXMpKVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgc2Nyb2xsU3RyYXRlZ3k/OiBTY3JvbGxTdHJhdGVneVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGJhY2sgd2hlbiB0aGUgcGlja2VyIGlzIG9wZW5lZFxyXG4gICAgICovXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1yZW5hbWVcclxuICAgIEBPdXRwdXQoJ29wZW4nKVxyXG4gICAgcmVhZG9ubHkgYWZ0ZXJQaWNrZXJPcGVuZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KClcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxiYWNrIHdoZW4gdGhlIHBpY2tlciBpcyBjbG9zZWRcclxuICAgICAqL1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtcmVuYW1lXHJcbiAgICBAT3V0cHV0KCdjbG9zZScpXHJcbiAgICByZWFkb25seSBhZnRlclBpY2tlckNsb3NlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRW1pdHMgc2VsZWN0ZWQgeWVhciBpbiBtdWx0aS15ZWFyIHZpZXdcclxuICAgICAqXHJcbiAgICAgKiBUaGlzIGRvZXNuJ3QgaW1wbHkgYSBjaGFuZ2Ugb24gdGhlIHNlbGVjdGVkIGRhdGUuXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcmVhZG9ubHkgeWVhclNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxUPigpXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFbWl0cyBzZWxlY3RlZCBtb250aCBpbiB5ZWFyIHZpZXdcclxuICAgICAqXHJcbiAgICAgKiBUaGlzIGRvZXNuJ3QgaW1wbHkgYSBjaGFuZ2Ugb24gdGhlIHNlbGVjdGVkIGRhdGUuXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcmVhZG9ubHkgbW9udGhTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8VD4oKVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRW1pdHMgd2hlbiBwaWNrZXIgb3BlbiBzdGF0ZSBjaGFuZ2VzXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcmVhZG9ubHkgaXNPcGVuQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFbWl0IHdoZW4gdGhlIHNlbGVjdGVkIHZhbHVlIGhhcyBiZWVuIGNvbmZpcm1lZFxyXG4gICAgICovXHJcbiAgICByZWFkb25seSBjb25maXJtU2VsZWN0ZWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEFycmF5PFQgfCB1bmRlZmluZWQ+IHwgVD4oKVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRW1pdHMgd2hlbiB0aGUgZGF0ZSB0aW1lIHBpY2tlciBpcyBkaXNhYmxlZFxyXG4gICAgICovXHJcbiAgICByZWFkb25seSBkaXNhYmxlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKVxyXG5cclxuICAgIHByaXZhdGUgcGlja2VyQ29udGFpbmVyUG9ydGFsPzogQ29tcG9uZW50UG9ydGFsPFxyXG4gICAgICAgIERhdGVUaW1lQ29udGFpbmVyQ29tcG9uZW50PFQ+XHJcbiAgICA+XHJcbiAgICBwcml2YXRlIHBpY2tlckNvbnRhaW5lcj86IERhdGVUaW1lQ29udGFpbmVyQ29tcG9uZW50PFQ+XHJcbiAgICBwcml2YXRlIHBvcHVwUmVmPzogT3ZlcmxheVJlZlxyXG4gICAgcHJpdmF0ZSBkaWFsb2dSZWY/OiBEaWFsb2dSZWY8RGF0ZVRpbWVDb250YWluZXJDb21wb25lbnQ8VD4+XHJcbiAgICBwcml2YXRlIGR0SW5wdXRTdWI/OiBTdWJzY3JpcHRpb25cclxuICAgIHByaXZhdGUgaGlkZVBpY2tlclN0cmVhbVN1Yj86IFN1YnNjcmlwdGlvblxyXG4gICAgcHJpdmF0ZSBjb25maXJtU2VsZWN0ZWRTdHJlYW1TdWI/OiBTdWJzY3JpcHRpb25cclxuICAgIHByaXZhdGUgcGlja2VyT3BlbmVkU3RyZWFtU3ViPzogU3Vic2NyaXB0aW9uXHJcblxyXG4gICAgLyoqIFRoZSBlbGVtZW50IHRoYXQgd2FzIGZvY3VzZWQgYmVmb3JlIHRoZSBkYXRlIHRpbWUgcGlja2VyIHdhcyBpc09wZW4gKi9cclxuICAgIHByaXZhdGUgZm9jdXNlZEVsZW1lbnRCZWZvcmVPcGVuPzogSFRNTEVsZW1lbnRcclxuXHJcbiAgICBwcml2YXRlIF9kdElucHV0PzogRGF0ZVRpbWVJbnB1dERpcmVjdGl2ZTxUPlxyXG4gICAgZ2V0IGR0SW5wdXQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2R0SW5wdXRcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9zZWxlY3RlZD86IFRcclxuICAgIGdldCBzZWxlY3RlZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRcclxuICAgIH1cclxuXHJcbiAgICBzZXQgc2VsZWN0ZWQodmFsdWU6IFQgfCB1bmRlZmluZWQpIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3RlZCA9IHZhbHVlXHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3NlbGVjdGVkcyA9IG5ldyBBcnJheTxUIHwgdW5kZWZpbmVkPigpXHJcbiAgICBnZXQgc2VsZWN0ZWRzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZHMgfHwgW11cclxuICAgIH1cclxuXHJcbiAgICBzZXQgc2VsZWN0ZWRzKHZhbHVlczogQXJyYXk8VCB8IHVuZGVmaW5lZD4pIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3RlZHMgPSB2YWx1ZXNcclxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpXHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFRoZSBtaW5pbXVtIHNlbGVjdGFibGUgZGF0ZSAqL1xyXG4gICAgZ2V0IG1pbigpIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuX2R0SW5wdXQgJiYgdGhpcy5fZHRJbnB1dC5taW4pXHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFRoZSBtYXhpbXVtIHNlbGVjdGFibGUgZGF0ZSAqL1xyXG4gICAgZ2V0IG1heCgpIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuX2R0SW5wdXQgJiYgdGhpcy5fZHRJbnB1dC5tYXgpXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGRhdGVUaW1lRmlsdGVyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kdElucHV0Py5kYXRlVGltZUZpbHRlclxyXG4gICAgfVxyXG5cclxuICAgIGdldCBzZWxlY3RNb2RlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kdElucHV0Py5zZWxlY3RNb2RlXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGlzSW5TaW5nbGVNb2RlKCkge1xyXG4gICAgICAgIHJldHVybiAhIXRoaXMuX2R0SW5wdXQ/LmlzSW5TaW5nbGVNb2RlXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGlzSW5SYW5nZU1vZGUoKSB7XHJcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZHRJbnB1dD8uaXNJblJhbmdlTW9kZVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgb3ZlcmxheTogT3ZlcmxheSxcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgbmdab25lOiBOZ1pvbmUsXHJcbiAgICAgICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICBkYXRlVGltZUFkYXB0ZXI6IERhdGVUaW1lQWRhcHRlcjxUPixcclxuICAgICAgICBASW5qZWN0KE5YVF9EVFBJQ0tFUl9TQ1JPTExfU1RSQVRFR1kpXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0U2Nyb2xsU3RyYXRlZ3k6ICgpID0+IFNjcm9sbFN0cmF0ZWd5LFxyXG4gICAgICAgIEBJbmplY3QoTlhUX0RBVEVfVElNRV9GT1JNQVRTKVxyXG4gICAgICAgIGRhdGVUaW1lRm9ybWF0czogRGF0ZVRpbWVGb3JtYXRzLFxyXG4gICAgICAgIEBPcHRpb25hbCgpXHJcbiAgICAgICAgQEluamVjdChET0NVTUVOVClcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50PzogRG9jdW1lbnRcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKGRhdGVUaW1lQWRhcHRlciwgZGF0ZVRpbWVGb3JtYXRzKVxyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkgeyB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jbG9zZSgpXHJcbiAgICAgICAgdGhpcy5kdElucHV0U3ViPy51bnN1YnNjcmliZSgpXHJcbiAgICAgICAgdGhpcy5kdElucHV0U3ViID0gdW5kZWZpbmVkXHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZENoYW5nZS5jb21wbGV0ZSgpXHJcblxyXG4gICAgICAgIGlmICh0aGlzLnBvcHVwUmVmKSB7XHJcbiAgICAgICAgICAgIHRoaXMucG9wdXBSZWYuZGlzcG9zZSgpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVySW5wdXQoaW5wdXQ6IERhdGVUaW1lSW5wdXREaXJlY3RpdmU8VD4pOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5fZHRJbnB1dCkge1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcclxuICAgICAgICAgICAgICAgICdBIE54dCBEYXRlVGltZVBpY2tlciBjYW4gb25seSBiZSBhc3NvY2lhdGVkIHdpdGggYSBzaW5nbGUgaW5wdXQuJ1xyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9kdElucHV0ID0gaW5wdXRcclxuICAgICAgICB0aGlzLmR0SW5wdXRTdWIgPSB0aGlzLl9kdElucHV0LnZhbHVlQ2hhbmdlLnN1YnNjcmliZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkcyA9IHZhbHVlXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkID0gdmFsdWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgb3BlbigpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5faXNPcGVuIHx8IHRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuX2R0SW5wdXQpIHtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXHJcbiAgICAgICAgICAgICAgICAnQXR0ZW1wdGVkIHRvIG9wZW4gYW4gRGF0ZVRpbWVQaWNrZXIgd2l0aCBubyBhc3NvY2lhdGVkIGlucHV0LidcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZG9jdW1lbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5mb2N1c2VkRWxlbWVudEJlZm9yZU9wZW4gPSB0aGlzLmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnRcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHJlc2V0IHRoZSBwaWNrZXIgc2VsZWN0ZWQgdmFsdWVcclxuICAgICAgICBpZiAodGhpcy5pc0luU2luZ2xlTW9kZSkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkID0gdGhpcy5fZHRJbnB1dC52YWx1ZVxyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0luUmFuZ2VNb2RlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRzID0gdGhpcy5fZHRJbnB1dC52YWx1ZXNcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHdoZW4gdGhlIHBpY2tlciBpcyBvcGVuICwgd2UgbWFrZSBzdXJlIHRoZSBwaWNrZXIncyBjdXJyZW50IHNlbGVjdGVkIHRpbWUgdmFsdWVcclxuICAgICAgICAvLyBpcyB0aGUgc2FtZSBhcyB0aGUgX3N0YXJ0QXQgdGltZSB2YWx1ZS5cclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZCAmJiB0aGlzLnBpY2tlclR5cGUgIT09ICdjYWxlbmRhcicgJiYgdGhpcy5fc3RhcnRBdCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuY3JlYXRlRGF0ZShcclxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldFllYXIodGhpcy5zZWxlY3RlZCksXHJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRNb250aCh0aGlzLnNlbGVjdGVkKSxcclxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldERhdGUodGhpcy5zZWxlY3RlZCksXHJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRIb3Vycyh0aGlzLl9zdGFydEF0KSxcclxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldE1pbnV0ZXModGhpcy5fc3RhcnRBdCksXHJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRTZWNvbmRzKHRoaXMuX3N0YXJ0QXQpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnBpY2tlck1vZGUgPT09ICdkaWFsb2cnKVxyXG4gICAgICAgICAgICB0aGlzLm9wZW5Bc0RpYWxvZygpXHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLm9wZW5Bc1BvcHVwKClcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucGlja2VyQ29udGFpbmVyKVxyXG4gICAgICAgICAgICB0aGlzLnBpY2tlckNvbnRhaW5lci5waWNrZXIgPSB0aGlzXHJcblxyXG4gICAgICAgIC8vIExpc3RlbiB0byBwaWNrZXIgY29udGFpbmVyJ3MgaGlkZVBpY2tlclN0cmVhbVxyXG4gICAgICAgIHRoaXMuaGlkZVBpY2tlclN0cmVhbVN1YiA9IHRoaXMucGlja2VyQ29udGFpbmVyPy5oaWRlUGlja2VyU3RyZWFtLnN1YnNjcmliZShcclxuICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApXHJcblxyXG4gICAgICAgIC8vIExpc3RlbiB0byBwaWNrZXIgY29udGFpbmVyJ3MgY29uZmlybVNlbGVjdGVkU3RyZWFtXHJcbiAgICAgICAgdGhpcy5jb25maXJtU2VsZWN0ZWRTdHJlYW1TdWIgPSB0aGlzLnBpY2tlckNvbnRhaW5lcj8uY29uZmlybVNlbGVjdGVkU3RyZWFtLnN1YnNjcmliZShcclxuICAgICAgICAgICAgKGV2ZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlybVNlbGVjdChldmVudClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNlbGVjdHMgdGhlIGdpdmVuIGRhdGVcclxuICAgICAqL1xyXG4gICAgc2VsZWN0KGRhdGU6IFRbXSB8IFQpOiB2b2lkIHtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRlKSkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkcyA9IFsuLi5kYXRlXVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWQgPSBkYXRlXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDYXNlcyBpbiB3aGljaCBhdXRvbWF0aWNhbGx5IGNvbmZpcm0gdGhlIHNlbGVjdCB3aGVuIGRhdGUgb3IgZGF0ZXMgYXJlIHNlbGVjdGVkOlxyXG4gICAgICAgICAqIDEpIHBpY2tlciBtb2RlIGlzIE5PVCAnZGlhbG9nJ1xyXG4gICAgICAgICAqIDIpIHBpY2tlciB0eXBlIGlzICdjYWxlbmRhcicgYW5kIHNlbGVjdE1vZGUgaXMgJ3NpbmdsZScuXHJcbiAgICAgICAgICogMykgcGlja2VyIHR5cGUgaXMgJ2NhbGVuZGFyJyBhbmQgc2VsZWN0TW9kZSBpcyAncmFuZ2UnIGFuZFxyXG4gICAgICAgICAqICAgIHRoZSAnc2VsZWN0ZWRzJyBoYXMgJ2Zyb20nKHNlbGVjdGVkc1swXSkgYW5kICd0bycoc2VsZWN0ZWRzWzFdKSB2YWx1ZXMuXHJcbiAgICAgICAgICogNCkgc2VsZWN0TW9kZSBpcyAncmFuZ2VGcm9tJyBhbmQgc2VsZWN0ZWRzWzBdIGhhcyB2YWx1ZS5cclxuICAgICAgICAgKiA1KSBzZWxlY3RNb2RlIGlzICdyYW5nZVRvJyBhbmQgc2VsZWN0ZWRzWzFdIGhhcyB2YWx1ZS5cclxuICAgICAgICAgKi9cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMucGlja2VyTW9kZSAhPT0gJ2RpYWxvZycgJiZcclxuICAgICAgICAgICAgdGhpcy5waWNrZXJUeXBlID09PSAnY2FsZW5kYXInICYmXHJcbiAgICAgICAgICAgICgodGhpcy5zZWxlY3RNb2RlID09PSAnc2luZ2xlJyAmJiB0aGlzLnNlbGVjdGVkKSB8fFxyXG4gICAgICAgICAgICAgICAgKHRoaXMuc2VsZWN0TW9kZSA9PT0gJ3JhbmdlRnJvbScgJiYgdGhpcy5zZWxlY3RlZHNbMF0pIHx8XHJcbiAgICAgICAgICAgICAgICAodGhpcy5zZWxlY3RNb2RlID09PSAncmFuZ2VUbycgJiYgdGhpcy5zZWxlY3RlZHNbMV0pIHx8XHJcbiAgICAgICAgICAgICAgICAodGhpcy5zZWxlY3RNb2RlID09PSAncmFuZ2UnICYmXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZHNbMF0gJiZcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkc1sxXSkpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlybVNlbGVjdCgpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRW1pdHMgdGhlIHNlbGVjdGVkIHllYXIgaW4gbXVsdGkteWVhciB2aWV3XHJcbiAgICAgKi9cclxuICAgIHNlbGVjdFllYXIobm9ybWFsaXplZFllYXI6IFQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnllYXJTZWxlY3RlZC5lbWl0KG5vcm1hbGl6ZWRZZWFyKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRW1pdHMgc2VsZWN0ZWQgbW9udGggaW4geWVhciB2aWV3XHJcbiAgICAgKi9cclxuICAgIHNlbGVjdE1vbnRoKG5vcm1hbGl6ZWRNb250aDogVCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubW9udGhTZWxlY3RlZC5lbWl0KG5vcm1hbGl6ZWRNb250aClcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhpZGUgdGhlIHBpY2tlclxyXG4gICAgICovXHJcbiAgICBjbG9zZSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2lzT3Blbikge1xyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnBvcHVwUmVmICYmIHRoaXMucG9wdXBSZWYuaGFzQXR0YWNoZWQoKSkge1xyXG4gICAgICAgICAgICB0aGlzLnBvcHVwUmVmLmRldGFjaCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMucGlja2VyQ29udGFpbmVyUG9ydGFsICYmXHJcbiAgICAgICAgICAgIHRoaXMucGlja2VyQ29udGFpbmVyUG9ydGFsLmlzQXR0YWNoZWRcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5waWNrZXJDb250YWluZXJQb3J0YWwuZGV0YWNoKClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaGlkZVBpY2tlclN0cmVhbVN1Yj8udW5zdWJzY3JpYmUoKVxyXG4gICAgICAgIHRoaXMuaGlkZVBpY2tlclN0cmVhbVN1YiA9IHVuZGVmaW5lZFxyXG5cclxuICAgICAgICB0aGlzLmNvbmZpcm1TZWxlY3RlZFN0cmVhbVN1Yj8udW5zdWJzY3JpYmUoKVxyXG4gICAgICAgIHRoaXMuY29uZmlybVNlbGVjdGVkU3RyZWFtU3ViID0gdW5kZWZpbmVkXHJcblxyXG4gICAgICAgIHRoaXMucGlja2VyT3BlbmVkU3RyZWFtU3ViPy51bnN1YnNjcmliZSgpXHJcbiAgICAgICAgdGhpcy5waWNrZXJPcGVuZWRTdHJlYW1TdWIgPSB1bmRlZmluZWRcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZGlhbG9nUmVmKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKClcclxuICAgICAgICAgICAgdGhpcy5kaWFsb2dSZWYgPSB1bmRlZmluZWRcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGNvbXBsZXRlQ2xvc2UgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc09wZW4pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2lzT3BlbiA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzT3BlbkNoYW5nZS5lbWl0KHRoaXMuX2lzT3BlbilcclxuICAgICAgICAgICAgICAgIHRoaXMuYWZ0ZXJQaWNrZXJDbG9zZWQuZW1pdCgpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzZWRFbGVtZW50QmVmb3JlT3BlbiA9IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMuZm9jdXNlZEVsZW1lbnRCZWZvcmVPcGVuICYmXHJcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLmZvY3VzZWRFbGVtZW50QmVmb3JlT3Blbi5mb2N1cyA9PT0gJ2Z1bmN0aW9uJ1xyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICAvLyBCZWNhdXNlIElFIG1vdmVzIGZvY3VzIGFzeW5jaHJvbm91c2x5LCB3ZSBjYW4ndCBjb3VudCBvbiBpdCBiZWluZyByZXN0b3JlZCBiZWZvcmUgd2UndmVcclxuICAgICAgICAgICAgLy8gbWFya2VkIHRoZSBkYXRlcGlja2VyIGFzIGNsb3NlZC4gSWYgdGhlIGV2ZW50IGZpcmVzIG91dCBvZiBzZXF1ZW5jZSBhbmQgdGhlIGVsZW1lbnQgdGhhdFxyXG4gICAgICAgICAgICAvLyB3ZSdyZSByZWZvY3VzaW5nIG9wZW5zIHRoZSBkYXRlcGlja2VyIG9uIGZvY3VzLCB0aGUgdXNlciBjb3VsZCBiZSBzdHVjayB3aXRoIG5vdCBiZWluZ1xyXG4gICAgICAgICAgICAvLyBhYmxlIHRvIGNsb3NlIHRoZSBjYWxlbmRhciBhdCBhbGwuIFdlIHdvcmsgYXJvdW5kIGl0IGJ5IG1ha2luZyB0aGUgbG9naWMsIHRoYXQgbWFya3NcclxuICAgICAgICAgICAgLy8gdGhlIGRhdGVwaWNrZXIgYXMgY2xvc2VkLCBhc3luYyBhcyB3ZWxsLlxyXG4gICAgICAgICAgICB0aGlzLmZvY3VzZWRFbGVtZW50QmVmb3JlT3Blbi5mb2N1cygpXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoY29tcGxldGVDbG9zZSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb21wbGV0ZUNsb3NlKClcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb25maXJtIHRoZSBzZWxlY3RlZCB2YWx1ZVxyXG4gICAgICovXHJcbiAgICBjb25maXJtU2VsZWN0KF9ldmVudD86IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmlzSW5TaW5nbGVNb2RlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID1cclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWQgfHwgdGhpcy5zdGFydEF0IHx8IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLm5vdygpXHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlybVNlbGVjdGVkQ2hhbmdlLmVtaXQoc2VsZWN0ZWQpXHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzSW5SYW5nZU1vZGUpIHtcclxuICAgICAgICAgICAgdGhpcy5jb25maXJtU2VsZWN0ZWRDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkcylcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY2xvc2UoKVxyXG4gICAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT3BlbiB0aGUgcGlja2VyIGFzIGEgZGlhbG9nXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgb3BlbkFzRGlhbG9nKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZGlhbG9nUmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oXHJcbiAgICAgICAgICAgIERhdGVUaW1lQ29udGFpbmVyQ29tcG9uZW50LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBhdXRvRm9jdXM6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgYmFja2Ryb3BDbGFzczogW1xyXG4gICAgICAgICAgICAgICAgICAgICdjZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wJyxcclxuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLmJhY2tkcm9wQ2xhc3MgPyBjb2VyY2VBcnJheSh0aGlzLmJhY2tkcm9wQ2xhc3MpIDogW11cclxuICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICBwYW5lQ2xhc3M6IFtcclxuICAgICAgICAgICAgICAgICAgICAnbnh0LWR0LWRpYWxvZycsXHJcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5wYW5lbENsYXNzID8gY29lcmNlQXJyYXkodGhpcy5wYW5lbENsYXNzKSA6IFtdXHJcbiAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgdmlld0NvbnRhaW5lclJlZjogdGhpcy52aWV3Q29udGFpbmVyUmVmLFxyXG4gICAgICAgICAgICAgICAgc2Nyb2xsU3RyYXRlZ3k6IHRoaXMuc2Nyb2xsU3RyYXRlZ3kgfHwgdGhpcy5kZWZhdWx0U2Nyb2xsU3RyYXRlZ3koKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKVxyXG4gICAgICAgIHRoaXMucGlja2VyQ29udGFpbmVyID0gdGhpcy5kaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2VcclxuXHJcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuYWZ0ZXJPcGVuKCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5faXNPcGVuID0gdHJ1ZVxyXG4gICAgICAgICAgICB0aGlzLmlzT3BlbkNoYW5nZS5lbWl0KHRoaXMuX2lzT3BlbilcclxuICAgICAgICAgICAgdGhpcy5hZnRlclBpY2tlck9wZW5lZC5lbWl0KClcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2xvc2UoKSlcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE9wZW4gdGhlIHBpY2tlciBhcyBwb3B1cFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIG9wZW5Bc1BvcHVwKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5waWNrZXJDb250YWluZXJQb3J0YWwpIHtcclxuICAgICAgICAgICAgdGhpcy5waWNrZXJDb250YWluZXJQb3J0YWwgPSBuZXcgQ29tcG9uZW50UG9ydGFsPFxyXG4gICAgICAgICAgICAgICAgRGF0ZVRpbWVDb250YWluZXJDb21wb25lbnQ8VD5cclxuICAgICAgICAgICAgPihEYXRlVGltZUNvbnRhaW5lckNvbXBvbmVudCwgdGhpcy52aWV3Q29udGFpbmVyUmVmKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnBvcHVwUmVmKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlUG9wdXAoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnBvcHVwUmVmPy5oYXNBdHRhY2hlZCgpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPFxyXG4gICAgICAgICAgICAgICAgRGF0ZVRpbWVDb250YWluZXJDb21wb25lbnQ8VD5cclxuICAgICAgICAgICAgPiB8IHVuZGVmaW5lZCA9IHRoaXMucG9wdXBSZWY/LmF0dGFjaCh0aGlzLnBpY2tlckNvbnRhaW5lclBvcnRhbClcclxuICAgICAgICAgICAgdGhpcy5waWNrZXJDb250YWluZXIgPSBjb21wb25lbnRSZWY/Lmluc3RhbmNlXHJcblxyXG4gICAgICAgICAgICAvLyBVcGRhdGUgdGhlIHBvc2l0aW9uIG9uY2UgdGhlIGNhbGVuZGFyIGhhcyByZW5kZXJlZC5cclxuICAgICAgICAgICAgdGhpcy5uZ1pvbmUub25TdGFibGVcclxuICAgICAgICAgICAgICAgIC5hc09ic2VydmFibGUoKVxyXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZSgxKSlcclxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucG9wdXBSZWY/LnVwZGF0ZVBvc2l0aW9uKClcclxuICAgICAgICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgICAvLyBlbWl0IG9wZW4gc3RyZWFtXHJcbiAgICAgICAgICAgIHRoaXMucGlja2VyT3BlbmVkU3RyZWFtU3ViID0gdGhpcy5waWNrZXJDb250YWluZXI/LnBpY2tlck9wZW5lZFN0cmVhbVxyXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZSgxKSlcclxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2lzT3BlbiA9IHRydWVcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzT3BlbkNoYW5nZS5lbWl0KHRoaXMuX2lzT3BlbilcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFmdGVyUGlja2VyT3BlbmVkLmVtaXQoKVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjcmVhdGVQb3B1cCgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBvdmVybGF5Q29uZmlnID0gbmV3IE92ZXJsYXlDb25maWcoe1xyXG4gICAgICAgICAgICBwb3NpdGlvblN0cmF0ZWd5OiB0aGlzLmNyZWF0ZVBvcHVwUG9zaXRpb25TdHJhdGVneSgpLFxyXG4gICAgICAgICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgICAgICAgYmFja2Ryb3BDbGFzczogW1xyXG4gICAgICAgICAgICAgICAgJ2Nkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wJyxcclxuICAgICAgICAgICAgICAgIC4uLnRoaXMuYmFja2Ryb3BDbGFzcyA/IGNvZXJjZUFycmF5KHRoaXMuYmFja2Ryb3BDbGFzcykgOiBbXVxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICBzY3JvbGxTdHJhdGVneTogdGhpcy5zY3JvbGxTdHJhdGVneSB8fCB0aGlzLmRlZmF1bHRTY3JvbGxTdHJhdGVneSgpLFxyXG4gICAgICAgICAgICBwYW5lbENsYXNzOiBbXHJcbiAgICAgICAgICAgICAgICAnbnh0LWR0LXBvcHVwJyxcclxuICAgICAgICAgICAgICAgIC4uLnRoaXMucGFuZWxDbGFzcyA/IGNvZXJjZUFycmF5KHRoaXMucGFuZWxDbGFzcykgOiBbXVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgdGhpcy5wb3B1cFJlZiA9IHRoaXMub3ZlcmxheS5jcmVhdGUob3ZlcmxheUNvbmZpZylcclxuXHJcbiAgICAgICAgbWVyZ2UoXHJcbiAgICAgICAgICAgIHRoaXMucG9wdXBSZWYuYmFja2Ryb3BDbGljaygpLFxyXG4gICAgICAgICAgICB0aGlzLnBvcHVwUmVmLmRldGFjaG1lbnRzKCksXHJcbiAgICAgICAgICAgIHRoaXMucG9wdXBSZWZcclxuICAgICAgICAgICAgICAgIC5rZXlkb3duRXZlbnRzKClcclxuICAgICAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQgPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICEhKGV2ZW50LmNvZGUudG9Mb3dlckNhc2UoKSA9PT0gJ2VzY2FwZScgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5fZHRJbnB1dCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5hbHRLZXkgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuY29kZS50b0xvd2VyQ2FzZSgpID09PSAnYXJyb3d1cCcpKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICApLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNsb3NlKCkpXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGUgdGhlIHBvcHVwIFBvc2l0aW9uU3RyYXRlZ3kuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgY3JlYXRlUG9wdXBQb3NpdGlvblN0cmF0ZWd5KCk6IFBvc2l0aW9uU3RyYXRlZ3kgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIGlmICh0aGlzLl9kdElucHV0KVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vdmVybGF5XHJcbiAgICAgICAgICAgICAgICAucG9zaXRpb24oKVxyXG4gICAgICAgICAgICAgICAgLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5fZHRJbnB1dC5lbGVtZW50UmVmKVxyXG4gICAgICAgICAgICAgICAgLndpdGhUcmFuc2Zvcm1PcmlnaW5PbignLm54dC1kdC1jb250YWluZXInKVxyXG4gICAgICAgICAgICAgICAgLndpdGhGbGV4aWJsZURpbWVuc2lvbnMoZmFsc2UpXHJcbiAgICAgICAgICAgICAgICAud2l0aFB1c2goZmFsc2UpXHJcbiAgICAgICAgICAgICAgICAud2l0aFBvc2l0aW9ucyhbXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5ZOiAnYm90dG9tJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJsYXlZOiAndG9wJ1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5ZOiAndG9wJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJsYXlZOiAnYm90dG9tJ1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5YOiAnZW5kJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luWTogJ2JvdHRvbScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJsYXlYOiAnZW5kJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheVk6ICd0b3AnXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpblg6ICdlbmQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5ZOiAndG9wJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheVg6ICdlbmQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvdmVybGF5WTogJ2JvdHRvbSdcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luWDogJ3N0YXJ0JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luWTogJ3RvcCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvdmVybGF5WTogJ3RvcCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldFk6IC0xNzZcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luWDogJ3N0YXJ0JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luWTogJ3RvcCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvdmVybGF5WTogJ3RvcCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldFk6IC0zNTJcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBdKVxyXG4gICAgICAgIHJldHVyblxyXG4gICAgfVxyXG59XHJcbiIsIlxyXG4iXX0=
|
package/esm2022/lib/date-time/date-time-picker-container/date-time-picker-container.component.mjs
CHANGED
|
@@ -343,19 +343,19 @@ export class DateTimeContainerComponent {
|
|
|
343
343
|
this.timer.focus();
|
|
344
344
|
}
|
|
345
345
|
}
|
|
346
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
347
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
346
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.1", ngImport: i0, type: DateTimeContainerComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1.DateTimeIntl }, { token: i2.DateTimeAdapter }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
347
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.1", type: DateTimeContainerComponent, selector: "nxt-date-time-container", host: { listeners: { "@transformPicker.done": "handleContainerAnimationDone($event)" }, properties: { "class.nxt-dt-container": "this.containerClass", "class.nxt-dt-popup-container": "this.popupContainerClass", "class.nxt-dt-dialog-container": "this.dialogContainerClass", "class.nxt-dt-inline-container": "this.inlineContainerClass", "class.nxt-dt-container-disabled": "this.containerDisabledClass", "attr.id": "this.containerId", "@transformPicker": "this.containerAnimation" } }, viewQueries: [{ propertyName: "calendar", first: true, predicate: CalendarComponent, descendants: true }, { propertyName: "timer", first: true, predicate: TimerComponent, descendants: true }], ngImport: i0, template: "<div [cdkTrapFocus]=\"picker?.pickerMode !== 'inline'\"\r\n [@fadeInPicker]=\"picker?.pickerMode === 'inline'? '' : 'enter'\"\r\n class=\"nxt-dt-container-inner\">\r\n\r\n <nxt-date-time-calendar *ngIf=\"pickerType === 'both' || pickerType === 'calendar'\"\r\n class=\"nxt-dt-container-row\"\r\n [firstDayOfWeek]=\"picker?.firstDayOfWeek ?? 0\"\r\n [(pickerMoment)]=\"pickerMoment\"\r\n [selected]=\"picker?.selected\"\r\n [selecteds]=\"picker?.selecteds ?? []\"\r\n [selectMode]=\"picker?.selectMode\"\r\n [min]=\"picker?.min\"\r\n [max]=\"picker?.max\"\r\n [dateTimeFilter]=\"picker?.dateTimeFilter\"\r\n [startView]=\"picker?.startView ?? 'month'\"\r\n [hideOtherMonths]=\"!!picker?.hideOtherMonths\"\r\n (yearSelected)=\"picker?.selectYear($event)\"\r\n (monthSelected)=\"picker?.selectMonth($event)\"\r\n (selectedChange)=\"dateSelected($event)\"></nxt-date-time-calendar>\r\n\r\n <nxt-date-time-timer *ngIf=\"pickerType === 'both' || pickerType === 'timer'\"\r\n class=\"nxt-dt-container-row\"\r\n [pickerMoment]=\"pickerMoment\"\r\n [min]=\"picker?.min\"\r\n [max]=\"picker?.max\"\r\n [showSecondsTimer]=\"!!picker?.showSecondsTimer\"\r\n [hour12Timer]=\"!!picker?.hour12Timer\"\r\n [stepHour]=\"picker?.stepHour ?? 1\"\r\n [stepMinute]=\"picker?.stepMinute ?? 1\"\r\n [stepSecond]=\"picker?.stepSecond ?? 1\"\r\n (selectedChange)=\"timeSelected($event)\"></nxt-date-time-timer>\r\n\r\n <div *ngIf=\"picker?.isInRangeMode\"\r\n role=\"radiogroup\"\r\n class=\"nxt-dt-container-info nxt-dt-container-row\">\r\n <div role=\"radio\"\r\n [tabindex]=\"activeSelectedIndex === 0 ? 0 : -1\"\r\n [attr.aria-checked]=\"activeSelectedIndex === 0\"\r\n class=\"nxt-dt-control nxt-dt-container-range nxt-dt-container-from\"\r\n [ngClass]=\"{'nxt-dt-container-info-active': activeSelectedIndex === 0}\"\r\n (click)=\"handleClickOnInfoGroup($event, 0)\"\r\n (keydown)=\"handleKeydownOnInfoGroup($event, to, 0)\"\r\n #from>\r\n <span class=\"nxt-dt-control-content nxt-dt-container-range-content\"\r\n tabindex=\"-1\">\r\n <span class=\"nxt-dt-container-info-label\">{{fromLabel}}:</span>\r\n <span class=\"nxt-dt-container-info-value\">{{fromFormattedValue}}</span>\r\n </span>\r\n </div>\r\n <div role=\"radio\"\r\n [tabindex]=\"activeSelectedIndex === 1 ? 0 : -1\"\r\n [attr.aria-checked]=\"activeSelectedIndex === 1\"\r\n class=\"nxt-dt-control nxt-dt-container-range nxt-dt-container-to\"\r\n [ngClass]=\"{'nxt-dt-container-info-active': activeSelectedIndex === 1}\"\r\n (click)=\"handleClickOnInfoGroup($event, 1)\"\r\n (keydown)=\"handleKeydownOnInfoGroup($event, from, 1)\"\r\n #to>\r\n <span class=\"nxt-dt-control-content nxt-dt-container-range-content\"\r\n tabindex=\"-1\">\r\n <span class=\"nxt-dt-container-info-label\">{{toLabel}}:</span>\r\n <span class=\"nxt-dt-container-info-value\">{{toFormattedValue}}</span>\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"showControlButtons\"\r\n class=\"nxt-dt-container-buttons nxt-dt-container-row\">\r\n <button class=\"nxt-dt-control nxt-dt-control-button nxt-dt-container-control-button\"\r\n type=\"button\"\r\n tabindex=\"0\"\r\n (click)=\"onCancelClicked($event)\">\r\n <span class=\"nxt-dt-control-content nxt-dt-control-button-content\"\r\n tabindex=\"-1\">\r\n {{cancelLabel}}\r\n </span>\r\n </button>\r\n <button class=\"nxt-dt-control nxt-dt-control-button nxt-dt-container-control-button\"\r\n type=\"button\"\r\n tabindex=\"0\"\r\n (click)=\"onSetClicked($event)\">\r\n <span class=\"nxt-dt-control-content nxt-dt-control-button-content\"\r\n tabindex=\"-1\">\r\n {{setLabel}}\r\n </span>\r\n </button>\r\n </div>\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "component", type: i5.TimerComponent, selector: "nxt-date-time-timer", inputs: ["pickerMoment", "min", "max", "showSecondsTimer", "hour12Timer", "stepHour", "stepMinute", "stepSecond"], outputs: ["selectedChange"] }, { kind: "component", type: i6.CalendarComponent, selector: "nxt-date-time-calendar", inputs: ["dateTimeFilter", "firstDayOfWeek", "min", "max", "pickerMoment", "selectMode", "selected", "selecteds", "startView", "hideOtherMonths"], outputs: ["pickerMomentChange", "selectedChange", "userSelection", "yearSelected", "monthSelected"] }], animations: [
|
|
348
348
|
dateTimePickerAnimations.transformPicker,
|
|
349
349
|
dateTimePickerAnimations.fadeInPicker
|
|
350
350
|
], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
351
351
|
}
|
|
352
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
352
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.1", ngImport: i0, type: DateTimeContainerComponent, decorators: [{
|
|
353
353
|
type: Component,
|
|
354
354
|
args: [{ selector: 'nxt-date-time-container', changeDetection: ChangeDetectionStrategy.OnPush, preserveWhitespaces: false, animations: [
|
|
355
355
|
dateTimePickerAnimations.transformPicker,
|
|
356
356
|
dateTimePickerAnimations.fadeInPicker
|
|
357
357
|
], template: "<div [cdkTrapFocus]=\"picker?.pickerMode !== 'inline'\"\r\n [@fadeInPicker]=\"picker?.pickerMode === 'inline'? '' : 'enter'\"\r\n class=\"nxt-dt-container-inner\">\r\n\r\n <nxt-date-time-calendar *ngIf=\"pickerType === 'both' || pickerType === 'calendar'\"\r\n class=\"nxt-dt-container-row\"\r\n [firstDayOfWeek]=\"picker?.firstDayOfWeek ?? 0\"\r\n [(pickerMoment)]=\"pickerMoment\"\r\n [selected]=\"picker?.selected\"\r\n [selecteds]=\"picker?.selecteds ?? []\"\r\n [selectMode]=\"picker?.selectMode\"\r\n [min]=\"picker?.min\"\r\n [max]=\"picker?.max\"\r\n [dateTimeFilter]=\"picker?.dateTimeFilter\"\r\n [startView]=\"picker?.startView ?? 'month'\"\r\n [hideOtherMonths]=\"!!picker?.hideOtherMonths\"\r\n (yearSelected)=\"picker?.selectYear($event)\"\r\n (monthSelected)=\"picker?.selectMonth($event)\"\r\n (selectedChange)=\"dateSelected($event)\"></nxt-date-time-calendar>\r\n\r\n <nxt-date-time-timer *ngIf=\"pickerType === 'both' || pickerType === 'timer'\"\r\n class=\"nxt-dt-container-row\"\r\n [pickerMoment]=\"pickerMoment\"\r\n [min]=\"picker?.min\"\r\n [max]=\"picker?.max\"\r\n [showSecondsTimer]=\"!!picker?.showSecondsTimer\"\r\n [hour12Timer]=\"!!picker?.hour12Timer\"\r\n [stepHour]=\"picker?.stepHour ?? 1\"\r\n [stepMinute]=\"picker?.stepMinute ?? 1\"\r\n [stepSecond]=\"picker?.stepSecond ?? 1\"\r\n (selectedChange)=\"timeSelected($event)\"></nxt-date-time-timer>\r\n\r\n <div *ngIf=\"picker?.isInRangeMode\"\r\n role=\"radiogroup\"\r\n class=\"nxt-dt-container-info nxt-dt-container-row\">\r\n <div role=\"radio\"\r\n [tabindex]=\"activeSelectedIndex === 0 ? 0 : -1\"\r\n [attr.aria-checked]=\"activeSelectedIndex === 0\"\r\n class=\"nxt-dt-control nxt-dt-container-range nxt-dt-container-from\"\r\n [ngClass]=\"{'nxt-dt-container-info-active': activeSelectedIndex === 0}\"\r\n (click)=\"handleClickOnInfoGroup($event, 0)\"\r\n (keydown)=\"handleKeydownOnInfoGroup($event, to, 0)\"\r\n #from>\r\n <span class=\"nxt-dt-control-content nxt-dt-container-range-content\"\r\n tabindex=\"-1\">\r\n <span class=\"nxt-dt-container-info-label\">{{fromLabel}}:</span>\r\n <span class=\"nxt-dt-container-info-value\">{{fromFormattedValue}}</span>\r\n </span>\r\n </div>\r\n <div role=\"radio\"\r\n [tabindex]=\"activeSelectedIndex === 1 ? 0 : -1\"\r\n [attr.aria-checked]=\"activeSelectedIndex === 1\"\r\n class=\"nxt-dt-control nxt-dt-container-range nxt-dt-container-to\"\r\n [ngClass]=\"{'nxt-dt-container-info-active': activeSelectedIndex === 1}\"\r\n (click)=\"handleClickOnInfoGroup($event, 1)\"\r\n (keydown)=\"handleKeydownOnInfoGroup($event, from, 1)\"\r\n #to>\r\n <span class=\"nxt-dt-control-content nxt-dt-container-range-content\"\r\n tabindex=\"-1\">\r\n <span class=\"nxt-dt-container-info-label\">{{toLabel}}:</span>\r\n <span class=\"nxt-dt-container-info-value\">{{toFormattedValue}}</span>\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"showControlButtons\"\r\n class=\"nxt-dt-container-buttons nxt-dt-container-row\">\r\n <button class=\"nxt-dt-control nxt-dt-control-button nxt-dt-container-control-button\"\r\n type=\"button\"\r\n tabindex=\"0\"\r\n (click)=\"onCancelClicked($event)\">\r\n <span class=\"nxt-dt-control-content nxt-dt-control-button-content\"\r\n tabindex=\"-1\">\r\n {{cancelLabel}}\r\n </span>\r\n </button>\r\n <button class=\"nxt-dt-control nxt-dt-control-button nxt-dt-container-control-button\"\r\n type=\"button\"\r\n tabindex=\"0\"\r\n (click)=\"onSetClicked($event)\">\r\n <span class=\"nxt-dt-control-content nxt-dt-control-button-content\"\r\n tabindex=\"-1\">\r\n {{setLabel}}\r\n </span>\r\n </button>\r\n </div>\r\n</div>\r\n" }]
|
|
358
|
-
}], ctorParameters:
|
|
358
|
+
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i1.DateTimeIntl }, { type: i2.DateTimeAdapter }], propDecorators: { calendar: [{
|
|
359
359
|
type: ViewChild,
|
|
360
360
|
args: [CalendarComponent]
|
|
361
361
|
}], timer: [{
|
|
@@ -386,4 +386,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.1", ngImpor
|
|
|
386
386
|
type: HostListener,
|
|
387
387
|
args: ['@transformPicker.done', ['$event']]
|
|
388
388
|
}] } });
|
|
389
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLXBpY2tlci1jb250YWluZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcGljay1kYXRldGltZS9zcmMvbGliL2RhdGUtdGltZS9kYXRlLXRpbWUtcGlja2VyLWNvbnRhaW5lci9kYXRlLXRpbWUtcGlja2VyLWNvbnRhaW5lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9waWNrLWRhdGV0aW1lL3NyYy9saWIvZGF0ZS10aW1lL2RhdGUtdGltZS1waWNrZXItY29udGFpbmVyL2RhdGUtdGltZS1waWNrZXItY29udGFpbmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBbUMsdUJBQXVCLEVBQXFCLFNBQVMsRUFBYyxXQUFXLEVBQUUsWUFBWSxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUNoTCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBRzlCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFBO0FBRWxFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUN6RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQTs7Ozs7Ozs7QUFFbEYsZ0JBQWdCO0FBWWhCLE1BQU0sT0FBTywwQkFBMEI7SUFtQ25DLElBQUksWUFBWTtRQUNaLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFBO0lBQ2pDLENBQUM7SUFFRCxJQUFJLFlBQVksQ0FBQyxLQUFvQjtRQUNqQyxJQUFJLEtBQUssRUFBRTtZQUNQLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FDbkQsS0FBSyxFQUNMLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUNoQixJQUFJLENBQUMsTUFBTSxFQUFFLEdB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Qi9CLDRCQUE0QjtzQkFEM0IsWUFBWTt1QkFBQyx1QkFBdUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFuaW1hdGlvbkV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucydcclxuaW1wb3J0IHsgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEhvc3RCaW5kaW5nLCBIb3N0TGlzdGVuZXIsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnXHJcbmltcG9ydCB7IERhdGVUaW1lQWRhcHRlciB9IGZyb20gJy4uLy4uL2NsYXNzL2RhdGUtdGltZS1hZGFwdGVyLmNsYXNzJ1xyXG5pbXBvcnQgeyBEYXRlVGltZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2NsYXNzL2RhdGUtdGltZS5jbGFzcydcclxuaW1wb3J0IHsgQ2FsZW5kYXJDb21wb25lbnQgfSBmcm9tICcuLi9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQnXHJcbmltcG9ydCB7IERhdGVUaW1lSW50bCB9IGZyb20gJy4uL2RhdGUtdGltZS1waWNrZXItaW50bC5zZXJ2aWNlJ1xyXG5pbXBvcnQgeyBUaW1lckNvbXBvbmVudCB9IGZyb20gJy4uL3RpbWVyL3RpbWVyLmNvbXBvbmVudCdcclxuaW1wb3J0IHsgZGF0ZVRpbWVQaWNrZXJBbmltYXRpb25zIH0gZnJvbSAnLi9kYXRlLXRpbWUtcGlja2VyLWNvbnRhaW5lci5hbmltYXRpb25zJ1xyXG5cclxuLyoqIEBpbnRlcm5hbCAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnbnh0LWRhdGUtdGltZS1jb250YWluZXInLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2RhdGUtdGltZS1waWNrZXItY29udGFpbmVyLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2RhdGUtdGltZS1waWNrZXItY29udGFpbmVyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICAgIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlLFxyXG4gICAgYW5pbWF0aW9uczogW1xyXG4gICAgICAgIGRhdGVUaW1lUGlja2VyQW5pbWF0aW9ucy50cmFuc2Zvcm1QaWNrZXIsXHJcbiAgICAgICAgZGF0ZVRpbWVQaWNrZXJBbmltYXRpb25zLmZhZGVJblBpY2tlclxyXG4gICAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGF0ZVRpbWVDb250YWluZXJDb21wb25lbnQ8VD4gaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQge1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoQ2FsZW5kYXJDb21wb25lbnQpXHJcbiAgICBjYWxlbmRhcj86IENhbGVuZGFyQ29tcG9uZW50PFQ+XHJcblxyXG4gICAgQFZpZXdDaGlsZChUaW1lckNvbXBvbmVudClcclxuICAgIHRpbWVyPzogVGltZXJDb21wb25lbnQ8VD5cclxuXHJcbiAgICBwaWNrZXI/OiBEYXRlVGltZURpcmVjdGl2ZTxUPlxyXG4gICAgYWN0aXZlU2VsZWN0ZWRJbmRleCA9IDAgLy8gVGhlIGN1cnJlbnQgYWN0aXZlIFNlbGVjdGVkSW5kZXggaW4gcmFuZ2Ugc2VsZWN0IG1vZGUgKDA6ICdmcm9tJywgMTogJ3RvJylcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0cmVhbSBlbWl0cyB3aGVuIHRyeSB0byBoaWRlIHBpY2tlclxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGhpZGVQaWNrZXIkID0gbmV3IFN1YmplY3Q8dm9pZD4oKVxyXG5cclxuICAgIHJlYWRvbmx5IGhpZGVQaWNrZXJTdHJlYW0gPSB0aGlzLmhpZGVQaWNrZXIkLmFzT2JzZXJ2YWJsZSgpXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdHJlYW0gZW1pdHMgd2hlbiB0cnkgdG8gY29uZmlybSB0aGUgc2VsZWN0ZWQgdmFsdWVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb25maXJtU2VsZWN0ZWQkID0gbmV3IFN1YmplY3Q8RXZlbnQ+KClcclxuXHJcbiAgICByZWFkb25seSBjb25maXJtU2VsZWN0ZWRTdHJlYW0gPSB0aGlzLmNvbmZpcm1TZWxlY3RlZCQuYXNPYnNlcnZhYmxlKClcclxuXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBpY2tlck9wZW5lZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpXHJcblxyXG4gICAgcmVhZG9ubHkgcGlja2VyT3BlbmVkU3RyZWFtID0gdGhpcy5waWNrZXJPcGVuZWQkLmFzT2JzZXJ2YWJsZSgpXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgY3VycmVudCBwaWNrZXIgbW9tZW50LiBUaGlzIGRldGVybWluZXMgd2hpY2ggdGltZSBwZXJpb2QgaXMgc2hvd24gYW5kIHdoaWNoIGRhdGUgaXNcclxuICAgICAqIGhpZ2hsaWdodGVkIHdoZW4gdXNpbmcga2V5Ym9hcmQgbmF2aWdhdGlvbi5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfY2xhbVBpY2tlck1vbWVudD86IFRcclxuXHJcbiAgICBnZXQgcGlja2VyTW9tZW50KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jbGFtUGlja2VyTW9tZW50XHJcbiAgICB9XHJcblxyXG4gICAgc2V0IHBpY2tlck1vbWVudCh2YWx1ZTogVCB8IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9jbGFtUGlja2VyTW9tZW50ID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuY2xhbXBEYXRlKFxyXG4gICAgICAgICAgICAgICAgdmFsdWUsXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBpY2tlcj8ubWluLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5waWNrZXI/Lm1heFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2RSZWYubWFya0ZvckNoZWNrKClcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcGlja2VyVHlwZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5waWNrZXI/LnBpY2tlclR5cGVcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY2FuY2VsTGFiZWwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5waWNrZXJJbnRsLmNhbmNlbEJ0bkxhYmVsXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNldExhYmVsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGlja2VySW50bC5zZXRCdG5MYWJlbFxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHJhbmdlICdmcm9tJyBsYWJlbFxyXG4gICAgICovXHJcbiAgICBnZXQgZnJvbUxhYmVsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGlja2VySW50bC5yYW5nZUZyb21MYWJlbFxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHJhbmdlICd0bycgbGFiZWxcclxuICAgICAqL1xyXG4gICAgZ2V0IHRvTGFiZWwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5waWNrZXJJbnRsLnJhbmdlVG9MYWJlbFxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHJhbmdlICdmcm9tJyBmb3JtYXR0ZWQgdmFsdWVcclxuICAgICAqL1xyXG4gICAgZ2V0IGZyb21Gb3JtYXR0ZWRWYWx1ZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5waWNrZXI/LnNlbGVjdGVkc1swXVxyXG4gICAgICAgIHJldHVybiB2YWx1ZVxyXG4gICAgICAgICAgICA/IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmZvcm1hdCh2YWx1ZSwgdGhpcy5waWNrZXI/LmZvcm1hdFN0cmluZylcclxuICAgICAgICAgICAgOiAnJ1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHJhbmdlICd0bycgZm9ybWF0dGVkIHZhbHVlXHJcbiAgICAgKi9cclxuICAgIGdldCB0b0Zvcm1hdHRlZFZhbHVlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnBpY2tlcj8uc2VsZWN0ZWRzWzFdXHJcbiAgICAgICAgcmV0dXJuIHZhbHVlXHJcbiAgICAgICAgICAgID8gdGhpcy5kYXRlVGltZUFkYXB0ZXIuZm9ybWF0KHZhbHVlLCB0aGlzLnBpY2tlcj8uZm9ybWF0U3RyaW5nKVxyXG4gICAgICAgICAgICA6ICcnXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYXNlcyBpbiB3aGljaCB0aGUgY29udHJvbCBidXR0b25zIHNob3cgaW4gdGhlIHBpY2tlclxyXG4gICAgICogMSkgcGlja2VyIG1vZGUgaXMgJ2RpYWxvZydcclxuICAgICAqIDIpIHBpY2tlciB0eXBlIGlzIE5PVCAnY2FsZW5kYXInIGFuZCB0aGUgcGlja2VyIG1vZGUgaXMgTk9UICdpbmxpbmUnXHJcbiAgICAgKi9cclxuICAgIGdldCBzaG93Q29udHJvbEJ1dHRvbnMoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgdGhpcy5waWNrZXI/LnBpY2tlck1vZGUgPT09ICdkaWFsb2cnIHx8XHJcbiAgICAgICAgICAgICh0aGlzLnBpY2tlcj8ucGlja2VyVHlwZSAhPT0gJ2NhbGVuZGFyJyAmJlxyXG4gICAgICAgICAgICAgICAgdGhpcy5waWNrZXI/LnBpY2tlck1vZGUgIT09ICdpbmxpbmUnKVxyXG4gICAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY29udGFpbmVyRWxtKCk6IEhUTUxFbGVtZW50IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lbG1SZWYubmF0aXZlRWxlbWVudFxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaW50ZXJuYWwgKi9cclxuICAgIEBIb3N0QmluZGluZygnY2xhc3Mubnh0LWR0LWNvbnRhaW5lcicpXHJcbiAgICBnZXQgY29udGFpbmVyQ2xhc3MoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRydWVcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLm54dC1kdC1wb3B1cC1jb250YWluZXInKVxyXG4gICAgZ2V0IHBvcHVwQ29udGFpbmVyQ2xhc3MoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGlja2VyPy5waWNrZXJNb2RlID09PSAncG9wdXAnXHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5ueHQtZHQtZGlhbG9nLWNvbnRhaW5lcicpXHJcbiAgICBnZXQgZGlhbG9nQ29udGFpbmVyQ2xhc3MoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGlja2VyPy5waWNrZXJNb2RlID09PSAnZGlhbG9nJ1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaW50ZXJuYWwgKi9cclxuICAgIEBIb3N0QmluZGluZygnY2xhc3Mubnh0LWR0LWlubGluZS1jb250YWluZXInKVxyXG4gICAgZ2V0IGlubGluZUNvbnRhaW5lckNsYXNzKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBpY2tlcj8ucGlja2VyTW9kZSA9PT0gJ2lubGluZSdcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLm54dC1kdC1jb250YWluZXItZGlzYWJsZWQnKVxyXG4gICAgZ2V0IGNvbnRhaW5lckRpc2FibGVkQ2xhc3MoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICEhdGhpcy5waWNrZXI/LmRpc2FibGVkXHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcclxuICAgIGdldCBjb250YWluZXJJZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBpY2tlcj8uaWRcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICBASG9zdEJpbmRpbmcoJ0B0cmFuc2Zvcm1QaWNrZXInKVxyXG4gICAgZ2V0IGNvbnRhaW5lckFuaW1hdGlvbigpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBpY2tlcj8ucGlja2VyTW9kZSA9PT0gJ2lubGluZScgPyAnJyA6ICdlbnRlcidcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGVsbVJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBwaWNrZXJJbnRsOiBEYXRlVGltZUludGwsXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBkYXRlVGltZUFkYXB0ZXI6IERhdGVUaW1lQWRhcHRlcjxUPlxyXG4gICAgKSB7IH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHsgfVxyXG5cclxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmluaXRQaWNrZXIoKVxyXG4gICAgfVxyXG5cclxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmZvY3VzUGlja2VyKClcclxuICAgIH1cclxuXHJcbiAgICBASG9zdExpc3RlbmVyKCdAdHJhbnNmb3JtUGlja2VyLmRvbmUnLCBbJyRldmVudCddKVxyXG4gICAgaGFuZGxlQ29udGFpbmVyQW5pbWF0aW9uRG9uZShldmVudDogQW5pbWF0aW9uRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB0b1N0YXRlID0gZXZlbnQudG9TdGF0ZVxyXG4gICAgICAgIGlmICh0b1N0YXRlID09PSAnZW50ZXInKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGlja2VyT3BlbmVkJC5uZXh0KClcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZGF0ZVNlbGVjdGVkKGRhdGU/OiBUKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IHJlc3VsdFxyXG5cclxuICAgICAgICBpZiAodGhpcy5waWNrZXI/LmlzSW5TaW5nbGVNb2RlKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMuZGF0ZVNlbGVjdGVkSW5TaW5nbGVNb2RlKGRhdGUpXHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGlja2VyTW9tZW50ID0gcmVzdWx0XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBpY2tlci5zZWxlY3QocmVzdWx0KVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gd2UgY2xvc2UgdGhlIHBpY2tlciB3aGVuIHJlc3VsdCBpcyB1bmRlZmluZWQgYW5kIHBpY2tlclR5cGUgaXMgY2FsZW5kYXIuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5waWNrZXJUeXBlID09PSAnY2FsZW5kYXInKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWRlUGlja2VyJC5uZXh0KClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnBpY2tlcj8uaXNJblJhbmdlTW9kZSkge1xyXG4gICAgICAgICAgICByZXN1bHQgPSB0aGlzLmRhdGVTZWxlY3RlZEluUmFuZ2VNb2RlKGRhdGUpXHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGlja2VyTW9tZW50ID0gcmVzdWx0W3RoaXMuYWN0aXZlU2VsZWN0ZWRJbmRleF1cclxuICAgICAgICAgICAgICAgIHRoaXMucGlja2VyLnNlbGVjdChyZXN1bHQpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGltZVNlbGVjdGVkKHRpbWU/OiBUKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5waWNrZXJNb21lbnQgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5jbG9uZSh0aW1lKVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMucGlja2VyPy5kYXRlVGltZUNoZWNrZXIodGhpcy5waWNrZXJNb21lbnQpKSB7XHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMucGlja2VyLmlzSW5TaW5nbGVNb2RlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGlja2VyLnNlbGVjdCh0aGlzLnBpY2tlck1vbWVudClcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5waWNrZXIuaXNJblJhbmdlTW9kZSkge1xyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZHMgPSBbLi4udGhpcy5waWNrZXI/LnNlbGVjdGVkcyB8fCBbXV1cclxuXHJcbiAgICAgICAgICAgIC8vIGNoZWNrIGlmIHRoZSAnZnJvbScgaXMgYWZ0ZXIgJ3RvJyBvciAndG8naXMgYmVmb3JlICdmcm9tJ1xyXG4gICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIHdlIHNldCBib3RoIHRoZSAnZnJvbScgYW5kICd0bycgdGhlIHNhbWUgdmFsdWVcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgKHRoaXMuYWN0aXZlU2VsZWN0ZWRJbmRleCA9PT0gMCAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkc1sxXSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmNvbXBhcmUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGlja2VyTW9tZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZHNbMV1cclxuICAgICAgICAgICAgICAgICAgICApID09PSAxKSB8fFxyXG4gICAgICAgICAgICAgICAgKHRoaXMuYWN0aXZlU2VsZWN0ZWRJbmRleCA9PT0gMSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkc1swXSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmNvbXBhcmUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGlja2VyTW9tZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZHNbMF1cclxuICAgICAgICAgICAgICAgICAgICApID09PSAtMSlcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZHNbMF0gPSB0aGlzLnBpY2tlck1vbWVudFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRzWzFdID0gdGhpcy5waWNrZXJNb21lbnRcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkc1t0aGlzLmFjdGl2ZVNlbGVjdGVkSW5kZXhdID0gdGhpcy5waWNrZXJNb21lbnRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5waWNrZXIuc2VsZWN0KHNlbGVjdGVkcylcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIYW5kbGUgY2xpY2sgb24gY2FuY2VsIGJ1dHRvblxyXG4gICAgICovXHJcbiAgICBvbkNhbmNlbENsaWNrZWQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5oaWRlUGlja2VyJC5uZXh0KClcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIYW5kbGUgY2xpY2sgb24gc2V0IGJ1dHRvblxyXG4gICAgICovXHJcbiAgICBvblNldENsaWNrZWQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnBpY2tlcj8uZGF0ZVRpbWVDaGVja2VyPy4odGhpcy5waWNrZXJNb21lbnQpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGlkZVBpY2tlciQubmV4dCgpXHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNvbmZpcm1TZWxlY3RlZCQubmV4dChldmVudClcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIYW5kbGUgY2xpY2sgb24gaW5mb3JtIHJhZGlvIGdyb3VwXHJcbiAgICAgKi9cclxuICAgIGhhbmRsZUNsaWNrT25JbmZvR3JvdXAoZXZlbnQ6IGFueSwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2V0QWN0aXZlU2VsZWN0ZWRJbmRleChpbmRleClcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXHJcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhhbmRsZSBjbGljayBvbiBpbmZvcm0gcmFkaW8gZ3JvdXBcclxuICAgICAqL1xyXG4gICAgaGFuZGxlS2V5ZG93bk9uSW5mb0dyb3VwKFxyXG4gICAgICAgIGV2ZW50OiBhbnksXHJcbiAgICAgICAgbmV4dDogYW55LFxyXG4gICAgICAgIGluZGV4OiBudW1iZXJcclxuICAgICk6IHZvaWQge1xyXG4gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5Q29kZSkge1xyXG4gICAgICAgICAgICBjYXNlICdBcnJvd0Rvd24nOlxyXG4gICAgICAgICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcclxuICAgICAgICAgICAgY2FzZSAnQXJyb3dVcCc6XHJcbiAgICAgICAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XHJcbiAgICAgICAgICAgICAgICBuZXh0LmZvY3VzKClcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlU2VsZWN0ZWRJbmRleChpbmRleCA9PT0gMCA/IDEgOiAwKVxyXG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxyXG4gICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcblxyXG4gICAgICAgICAgICBjYXNlICdTcGFjZSc6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVNlbGVjdGVkSW5kZXgoaW5kZXgpXHJcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXHJcbiAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIHZhbHVlIG9mIGFjdGl2ZVNlbGVjdGVkSW5kZXhcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBzZXRBY3RpdmVTZWxlY3RlZEluZGV4KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMucGlja2VyPy5zZWxlY3RNb2RlID09PSAncmFuZ2UnICYmXHJcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlU2VsZWN0ZWRJbmRleCAhPT0gaW5kZXhcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5hY3RpdmVTZWxlY3RlZEluZGV4ID0gaW5kZXhcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5waWNrZXI/LnNlbGVjdGVkc1t0aGlzLmFjdGl2ZVNlbGVjdGVkSW5kZXhdXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBpY2tlci5zZWxlY3RlZHMgJiYgc2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGlja2VyTW9tZW50ID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuY2xvbmUoc2VsZWN0ZWQpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0UGlja2VyKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucGlja2VyTW9tZW50ID0gdGhpcy5waWNrZXI/LnN0YXJ0QXQgfHwgdGhpcy5kYXRlVGltZUFkYXB0ZXIubm93KClcclxuICAgICAgICB0aGlzLmFjdGl2ZVNlbGVjdGVkSW5kZXggPSB0aGlzLnBpY2tlcj8uc2VsZWN0TW9kZSA9PT0gJ3JhbmdlVG8nID8gMSA6IDBcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNlbGVjdCBjYWxlbmRhciBkYXRlIGluIHNpbmdsZSBtb2RlLFxyXG4gICAgICogaXQgcmV0dXJucyB1bmRlZmluZWQgd2hlbiBkYXRlIGlzIG5vdCBzZWxlY3RlZC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBkYXRlU2VsZWN0ZWRJblNpbmdsZU1vZGUoZGF0ZT86IFQpOiBUIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICBpZiAodGhpcy5kYXRlVGltZUFkYXB0ZXIuaXNTYW1lRGF5KGRhdGUsIHRoaXMucGlja2VyPy5zZWxlY3RlZCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlQW5kQ2hlY2tDYWxlbmRhckRhdGUoZGF0ZSlcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNlbGVjdCBkYXRlcyBpbiByYW5nZSBNb2RlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZGF0ZVNlbGVjdGVkSW5SYW5nZU1vZGUoZGF0ZT86IFQpOiBBcnJheTxUIHwgdW5kZWZpbmVkPiB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgbGV0IGZyb20gPSB0aGlzLnBpY2tlcj8uc2VsZWN0ZWRzWzBdXHJcbiAgICAgICAgbGV0IHRvID0gdGhpcy5waWNrZXI/LnNlbGVjdGVkc1sxXVxyXG5cclxuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLnVwZGF0ZUFuZENoZWNrQ2FsZW5kYXJEYXRlKGRhdGUpXHJcblxyXG4gICAgICAgIGlmICghcmVzdWx0KSB7XHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gaWYgdGhlIGdpdmVuIGNhbGVuZGFyIGRheSBpcyBhZnRlciBvciBlcXVhbCB0byAnZnJvbScsXHJcbiAgICAgICAgLy8gc2V0IHRocyBnaXZlbiBkYXRlIGFzICd0bydcclxuICAgICAgICAvLyBvdGhlcndpc2UsIHNldCBpdCBhcyAnZnJvbScgYW5kIHNldCAndG8nIHRvIHVuZGVmaW5lZFxyXG4gICAgICAgIGlmICh0aGlzLnBpY2tlcj8uc2VsZWN0TW9kZSA9PT0gJ3JhbmdlJykge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBpY2tlci5zZWxlY3RlZHMgJiZcclxuICAgICAgICAgICAgICAgIHRoaXMucGlja2VyLnNlbGVjdGVkcy5sZW5ndGggJiZcclxuICAgICAgICAgICAgICAgICF0byAmJlxyXG4gICAgICAgICAgICAgICAgZnJvbSAmJlxyXG4gICAgICAgICAgICAgICAgKHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyhyZXN1bHQsIGZyb20pID8/IDApID49IDBcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICB0byA9IHJlc3VsdFxyXG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVTZWxlY3RlZEluZGV4ID0gMVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZnJvbSA9IHJlc3VsdFxyXG4gICAgICAgICAgICAgICAgdG8gPSB1bmRlZmluZWRcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlU2VsZWN0ZWRJbmRleCA9IDBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5waWNrZXI/LnNlbGVjdE1vZGUgPT09ICdyYW5nZUZyb20nKSB7XHJcbiAgICAgICAgICAgIGZyb20gPSByZXN1bHRcclxuXHJcbiAgICAgICAgICAgIC8vIGlmIHRoZSBmcm9tIHZhbHVlIGlzIGFmdGVyIHRoZSB0byB2YWx1ZSwgc2V0IHRoZSB0byB2YWx1ZSBhcyB1bmRlZmluZWRcclxuICAgICAgICAgICAgaWYgKHRvICYmIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmNvbXBhcmUoZnJvbSwgdG8pID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdG8gPSB1bmRlZmluZWRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5waWNrZXI/LnNlbGVjdE1vZGUgPT09ICdyYW5nZVRvJykge1xyXG4gICAgICAgICAgICB0byA9IHJlc3VsdFxyXG5cclxuICAgICAgICAgICAgLy8gaWYgdGhlIGZyb20gdmFsdWUgaXMgYWZ0ZXIgdGhlIHRvIHZhbHVlLCBzZXQgdGhlIGZyb20gdmFsdWUgYXMgdW5kZWZpbmVkXHJcbiAgICAgICAgICAgIGlmIChmcm9tICYmIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmNvbXBhcmUoZnJvbSwgdG8pID4gMCkge1xyXG4gICAgICAgICAgICAgICAgZnJvbSA9IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gW2Zyb20sIHRvXVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIHRoZSBnaXZlbiBjYWxlbmRhciBkYXRlJ3MgdGltZSBhbmQgY2hlY2sgaWYgaXQgaXMgdmFsaWRcclxuICAgICAqIEJlY2F1c2UgdGhlIGNhbGVuZGFyIGRhdGUgaGFzIDAwOjAwOjAwIGFzIGRlZmF1bHQgdGltZSwgaWYgdGhlIHBpY2tlciB0eXBlIGlzICdib3RoJyxcclxuICAgICAqIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBnaXZlbiBjYWxlbmRhciBkYXRlJ3MgdGltZSBiZWZvcmUgc2VsZWN0aW5nIGl0LlxyXG4gICAgICogaWYgaXQgaXMgdmFsaWQsIHJldHVybiB0aGUgdXBkYXRlZCBkYXRlVGltZVxyXG4gICAgICogaWYgaXQgaXMgbm90IHZhbGlkLCByZXR1cm4gdW5kZWZpbmVkXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgdXBkYXRlQW5kQ2hlY2tDYWxlbmRhckRhdGUoZGF0ZT86IFQpOiBUIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICBsZXQgcmVzdWx0XHJcblxyXG4gICAgICAgIC8vIGlmIHRoZSBwaWNrZXIgaXMgJ2JvdGgnLCB1cGRhdGUgdGhlIGNhbGVuZGFyIGRhdGUncyB0aW1lIHZhbHVlXHJcbiAgICAgICAgaWYgKHRoaXMucGlja2VyPy5waWNrZXJUeXBlID09PSAnYm90aCcpIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuY3JlYXRlRGF0ZShcclxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldFllYXIoZGF0ZSksXHJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRNb250aChkYXRlKSxcclxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldERhdGUoZGF0ZSksXHJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRIb3Vycyh0aGlzLnBpY2tlck1vbWVudCksXHJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRNaW51dGVzKHRoaXMucGlja2VyTW9tZW50KSxcclxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldFNlY29uZHModGhpcy5waWNrZXJNb21lbnQpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuY2xhbXBEYXRlKFxyXG4gICAgICAgICAgICAgICAgcmVzdWx0LFxyXG4gICAgICAgICAgICAgICAgdGhpcy5waWNrZXIubWluLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5waWNrZXIubWF4XHJcbiAgICAgICAgICAgIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXN1bHQgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5jbG9uZShkYXRlKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gY2hlY2sgdGhlIHVwZGF0ZWQgZGF0ZVRpbWVcclxuICAgICAgICByZXR1cm4gdGhpcy5waWNrZXI/LmRhdGVUaW1lQ2hlY2tlcihyZXN1bHQpID8gcmVzdWx0IDogdW5kZWZpbmVkXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGb2N1cyB0byB0aGUgcGlja2VyXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZm9jdXNQaWNrZXIoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMucGlja2VyPy5waWNrZXJNb2RlID09PSAnaW5saW5lJykge1xyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNhbGVuZGFyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FsZW5kYXIuZm9jdXNBY3RpdmVDZWxsKClcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudGltZXIpIHtcclxuICAgICAgICAgICAgdGhpcy50aW1lci5mb2N1cygpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIjxkaXYgW2Nka1RyYXBGb2N1c109XCJwaWNrZXI/LnBpY2tlck1vZGUgIT09ICdpbmxpbmUnXCJcclxuICAgIFtAZmFkZUluUGlja2VyXT1cInBpY2tlcj8ucGlja2VyTW9kZSA9PT0gJ2lubGluZSc/ICcnIDogJ2VudGVyJ1wiXHJcbiAgICBjbGFzcz1cIm54dC1kdC1jb250YWluZXItaW5uZXJcIj5cclxuXHJcbiAgICA8bnh0LWRhdGUtdGltZS1jYWxlbmRhciAqbmdJZj1cInBpY2tlclR5cGUgPT09ICdib3RoJyB8fCBwaWNrZXJUeXBlID09PSAnY2FsZW5kYXInXCJcclxuICAgICAgICBjbGFzcz1cIm54dC1kdC1jb250YWluZXItcm93XCJcclxuICAgICAgICBbZmlyc3REYXlPZldlZWtdPVwicGlja2VyPy5maXJzdERheU9mV2VlayA/PyAwXCJcclxuICAgICAgICBbKHBpY2tlck1vbWVudCldPVwicGlja2VyTW9tZW50XCJcclxuICAgICAgICBbc2VsZWN0ZWRdPVwicGlja2VyPy5zZWxlY3RlZFwiXHJcbiAgICAgICAgW3NlbGVjdGVkc109XCJwaWNrZXI/LnNlbGVjdGVkcyA/PyBbXVwiXHJcbiAgICAgICAgW3NlbGVjdE1vZGVdPVwicGlja2VyPy5zZWxlY3RNb2RlXCJcclxuICAgICAgICBbbWluXT1cInBpY2tlcj8ubWluXCJcclxuICAgICAgICBbbWF4XT1cInBpY2tlcj8ubWF4XCJcclxuICAgICAgICBbZGF0ZVRpbWVGaWx0ZXJdPVwicGlja2VyPy5kYXRlVGltZUZpbHRlclwiXHJcbiAgICAgICAgW3N0YXJ0Vmlld109XCJwaWNrZXI/LnN0YXJ0VmlldyA/PyAnbW9udGgnXCJcclxuICAgICAgICBbaGlkZU90aGVyTW9udGhzXT1cIiEhcGlja2VyPy5oaWRlT3RoZXJNb250aHNcIlxyXG4gICAgICAgICh5ZWFyU2VsZWN0ZWQpPVwicGlja2VyPy5zZWxlY3RZZWFyKCRldmVudClcIlxyXG4gICAgICAgIChtb250aFNlbGVjdGVkKT1cInBpY2tlcj8uc2VsZWN0TW9udGgoJGV2ZW50KVwiXHJcbiAgICAgICAgKHNlbGVjdGVkQ2hhbmdlKT1cImRhdGVTZWxlY3RlZCgkZXZlbnQpXCI+PC9ueHQtZGF0ZS10aW1lLWNhbGVuZGFyPlxyXG5cclxuICAgIDxueHQtZGF0ZS10aW1lLXRpbWVyICpuZ0lmPVwicGlja2VyVHlwZSA9PT0gJ2JvdGgnIHx8IHBpY2tlclR5cGUgPT09ICd0aW1lcidcIlxyXG4gICAgICAgIGNsYXNzPVwibnh0LWR0LWNvbnRhaW5lci1yb3dcIlxyXG4gICAgICAgIFtwaWNrZXJNb21lbnRdPVwicGlja2VyTW9tZW50XCJcclxuICAgICAgICBbbWluXT1cInBpY2tlcj8ubWluXCJcclxuICAgICAgICBbbWF4XT1cInBpY2tlcj8ubWF4XCJcclxuICAgICAgICBbc2hvd1NlY29uZHNUaW1lcl09XCIhIXBpY2tlcj8uc2hvd1NlY29uZHNUaW1lclwiXHJcbiAgICAgICAgW2hvdXIxMlRpbWVyXT1cIiEhcGlja2VyPy5ob3VyMTJUaW1lclwiXHJcbiAgICAgICAgW3N0ZXBIb3VyXT1cInBpY2tlcj8uc3RlcEhvdXIgPz8gMVwiXHJcbiAgICAgICAgW3N0ZXBNaW51dGVdPVwicGlja2VyPy5zdGVwTWludXRlID8/IDFcIlxyXG4gICAgICAgIFtzdGVwU2Vjb25kXT1cInBpY2tlcj8uc3RlcFNlY29uZCA/PyAxXCJcclxuICAgICAgICAoc2VsZWN0ZWRDaGFuZ2UpPVwidGltZVNlbGVjdGVkKCRldmVudClcIj48L254dC1kYXRlLXRpbWUtdGltZXI+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cInBpY2tlcj8uaXNJblJhbmdlTW9kZVwiXHJcbiAgICAgICAgcm9sZT1cInJhZGlvZ3JvdXBcIlxyXG4gICAgICAgIGNsYXNzPVwibnh0LWR0LWNvbnRhaW5lci1pbmZvIG54dC1kdC1jb250YWluZXItcm93XCI+XHJcbiAgICAgICAgPGRpdiByb2xlPVwicmFkaW9cIlxyXG4gICAgICAgICAgICBbdGFiaW5kZXhdPVwiYWN0aXZlU2VsZWN0ZWRJbmRleCA9PT0gMCA/IDAgOiAtMVwiXHJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtY2hlY2tlZF09XCJhY3RpdmVTZWxlY3RlZEluZGV4ID09PSAwXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJueHQtZHQtY29udHJvbCBueHQtZHQtY29udGFpbmVyLXJhbmdlIG54dC1kdC1jb250YWluZXItZnJvbVwiXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnbnh0LWR0LWNvbnRhaW5lci1pbmZvLWFjdGl2ZSc6IGFjdGl2ZVNlbGVjdGVkSW5kZXggPT09IDB9XCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUNsaWNrT25JbmZvR3JvdXAoJGV2ZW50LCAwKVwiXHJcbiAgICAgICAgICAgIChrZXlkb3duKT1cImhhbmRsZUtleWRvd25PbkluZm9Hcm91cCgkZXZlbnQsIHRvLCAwKVwiXHJcbiAgICAgICAgICAgICNmcm9tPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm54dC1kdC1jb250cm9sLWNvbnRlbnQgbnh0LWR0LWNvbnRhaW5lci1yYW5nZS1jb250ZW50XCJcclxuICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibnh0LWR0LWNvbnRhaW5lci1pbmZvLWxhYmVsXCI+e3tmcm9tTGFiZWx9fTo8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm54dC1kdC1jb250YWluZXItaW5mby12YWx1ZVwiPnt7ZnJvbUZvcm1hdHRlZFZhbHVlfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IHJvbGU9XCJyYWRpb1wiXHJcbiAgICAgICAgICAgIFt0YWJpbmRleF09XCJhY3RpdmVTZWxlY3RlZEluZGV4ID09PSAxID8gMCA6IC0xXCJcclxuICAgICAgICAgICAgW2F0dHIuYXJpYS1jaGVja2VkXT1cImFjdGl2ZVNlbGVjdGVkSW5kZXggPT09IDFcIlxyXG4gICAgICAgICAgICBjbGFzcz1cIm54dC1kdC1jb250cm9sIG54dC1kdC1jb250YWluZXItcmFuZ2Ugbnh0LWR0LWNvbnRhaW5lci10b1wiXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnbnh0LWR0LWNvbnRhaW5lci1pbmZvLWFjdGl2ZSc6IGFjdGl2ZVNlbGVjdGVkSW5kZXggPT09IDF9XCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUNsaWNrT25JbmZvR3JvdXAoJGV2ZW50LCAxKVwiXHJcbiAgICAgICAgICAgIChrZXlkb3duKT1cImhhbmRsZUtleWRvd25PbkluZm9Hcm91cCgkZXZlbnQsIGZyb20sIDEpXCJcclxuICAgICAgICAgICAgI3RvPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm54dC1kdC1jb250cm9sLWNvbnRlbnQgbnh0LWR0LWNvbnRhaW5lci1yYW5nZS1jb250ZW50XCJcclxuICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibnh0LWR0LWNvbnRhaW5lci1pbmZvLWxhYmVsXCI+e3t0b0xhYmVsfX06PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJueHQtZHQtY29udGFpbmVyLWluZm8tdmFsdWVcIj57e3RvRm9ybWF0dGVkVmFsdWV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cInNob3dDb250cm9sQnV0dG9uc1wiXHJcbiAgICAgICAgY2xhc3M9XCJueHQtZHQtY29udGFpbmVyLWJ1dHRvbnMgbnh0LWR0LWNvbnRhaW5lci1yb3dcIj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwibnh0LWR0LWNvbnRyb2wgbnh0LWR0LWNvbnRyb2wtYnV0dG9uIG54dC1kdC1jb250YWluZXItY29udHJvbC1idXR0b25cIlxyXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2FuY2VsQ2xpY2tlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibnh0LWR0LWNvbnRyb2wtY29udGVudCBueHQtZHQtY29udHJvbC1idXR0b24tY29udGVudFwiXHJcbiAgICAgICAgICAgICAgICB0YWJpbmRleD1cIi0xXCI+XHJcbiAgICAgICAgICAgICAgICB7e2NhbmNlbExhYmVsfX1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJueHQtZHQtY29udHJvbCBueHQtZHQtY29udHJvbC1idXR0b24gbnh0LWR0LWNvbnRhaW5lci1jb250cm9sLWJ1dHRvblwiXHJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwib25TZXRDbGlja2VkKCRldmVudClcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJueHQtZHQtY29udHJvbC1jb250ZW50IG54dC1kdC1jb250cm9sLWJ1dHRvbi1jb250ZW50XCJcclxuICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIj5cclxuICAgICAgICAgICAgICAgIHt7c2V0TGFiZWx9fVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
389
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLXBpY2tlci1jb250YWluZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcGljay1kYXRldGltZS9zcmMvbGliL2RhdGUtdGltZS9kYXRlLXRpbWUtcGlja2VyLWNvbnRhaW5lci9kYXRlLXRpbWUtcGlja2VyLWNvbnRhaW5lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9waWNrLWRhdGV0aW1lL3NyYy9saWIvZGF0ZS10aW1lL2RhdGUtdGltZS1waWNrZXItY29udGFpbmVyL2RhdGUtdGltZS1waWNrZXItY29udGFpbmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBbUMsdUJBQXVCLEVBQXFCLFNBQVMsRUFBYyxXQUFXLEVBQUUsWUFBWSxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUNoTCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBRzlCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFBO0FBRWxFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUN6RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQTs7Ozs7Ozs7QUFFbEYsZ0JBQWdCO0FBWWhCLE1BQU0sT0FBTywwQkFBMEI7SUFtQ25DLElBQUksWUFBWTtRQUNaLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFBO0lBQ2pDLENBQUM7SUFFRCxJQUFJLFlBQVksQ0FBQyxLQUFvQjtRQUNqQyxJQUFJLEtBQUssRUFBRTtZQUNQLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FDbkQsS0FBSyxFQUNMLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUNoQixJQUFJLENBQUMsTUFBTSxFQUFFLEdB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Qi9CLDRCQUE0QjtzQkFEM0IsWUFBWTt1QkFBQyx1QkFBdUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFuaW1hdGlvbkV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucydcclxuaW1wb3J0IHsgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEhvc3RCaW5kaW5nLCBIb3N0TGlzdGVuZXIsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnXHJcbmltcG9ydCB7IERhdGVUaW1lQWRhcHRlciB9IGZyb20gJy4uLy4uL2NsYXNzL2RhdGUtdGltZS1hZGFwdGVyLmNsYXNzJ1xyXG5pbXBvcnQgeyBEYXRlVGltZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2NsYXNzL2RhdGUtdGltZS5jbGFzcydcclxuaW1wb3J0IHsgQ2FsZW5kYXJDb21wb25lbnQgfSBmcm9tICcuLi9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQnXHJcbmltcG9ydCB7IERhdGVUaW1lSW50bCB9IGZyb20gJy4uL2RhdGUtdGltZS1waWNrZXItaW50bC5zZXJ2aWNlJ1xyXG5pbXBvcnQgeyBUaW1lckNvbXBvbmVudCB9IGZyb20gJy4uL3RpbWVyL3RpbWVyLmNvbXBvbmVudCdcclxuaW1wb3J0IHsgZGF0ZVRpbWVQaWNrZXJBbmltYXRpb25zIH0gZnJvbSAnLi9kYXRlLXRpbWUtcGlja2VyLWNvbnRhaW5lci5hbmltYXRpb25zJ1xyXG5cclxuLyoqIEBpbnRlcm5hbCAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnbnh0LWRhdGUtdGltZS1jb250YWluZXInLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2RhdGUtdGltZS1waWNrZXItY29udGFpbmVyLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2RhdGUtdGltZS1waWNrZXItY29udGFpbmVyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICAgIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlLFxyXG4gICAgYW5pbWF0aW9uczogW1xyXG4gICAgICAgIGRhdGVUaW1lUGlja2VyQW5pbWF0aW9ucy50cmFuc2Zvcm1QaWNrZXIsXHJcbiAgICAgICAgZGF0ZVRpbWVQaWNrZXJBbmltYXRpb25zLmZhZGVJblBpY2tlclxyXG4gICAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGF0ZVRpbWVDb250YWluZXJDb21wb25lbnQ8VD4gaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQge1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoQ2FsZW5kYXJDb21wb25lbnQpXHJcbiAgICBjYWxlbmRhcj86IENhbGVuZGFyQ29tcG9uZW50PFQ+XHJcblxyXG4gICAgQFZpZXdDaGlsZChUaW1lckNvbXBvbmVudClcclxuICAgIHRpbWVyPzogVGltZXJDb21wb25lbnQ8VD5cclxuXHJcbiAgICBwaWNrZXI/OiBEYXRlVGltZURpcmVjdGl2ZTxUPlxyXG4gICAgYWN0aXZlU2VsZWN0ZWRJbmRleCA9IDAgLy8gVGhlIGN1cnJlbnQgYWN0aXZlIFNlbGVjdGVkSW5kZXggaW4gcmFuZ2Ugc2VsZWN0IG1vZGUgKDA6ICdmcm9tJywgMTogJ3RvJylcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0cmVhbSBlbWl0cyB3aGVuIHRyeSB0byBoaWRlIHBpY2tlclxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGhpZGVQaWNrZXIkID0gbmV3IFN1YmplY3Q8dm9pZD4oKVxyXG5cclxuICAgIHJlYWRvbmx5IGhpZGVQaWNrZXJTdHJlYW0gPSB0aGlzLmhpZGVQaWNrZXIkLmFzT2JzZXJ2YWJsZSgpXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdHJlYW0gZW1pdHMgd2hlbiB0cnkgdG8gY29uZmlybSB0aGUgc2VsZWN0ZWQgdmFsdWVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb25maXJtU2VsZWN0ZWQkID0gbmV3IFN1YmplY3Q8RXZlbnQ+KClcclxuXHJcbiAgICByZWFkb25seSBjb25maXJtU2VsZWN0ZWRTdHJlYW0gPSB0aGlzLmNvbmZpcm1TZWxlY3RlZCQuYXNPYnNlcnZhYmxlKClcclxuXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBpY2tlck9wZW5lZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpXHJcblxyXG4gICAgcmVhZG9ubHkgcGlja2VyT3BlbmVkU3RyZWFtID0gdGhpcy5waWNrZXJPcGVuZWQkLmFzT2JzZXJ2YWJsZSgpXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgY3VycmVudCBwaWNrZXIgbW9tZW50LiBUaGlzIGRldGVybWluZXMgd2hpY2ggdGltZSBwZXJpb2QgaXMgc2hvd24gYW5kIHdoaWNoIGRhdGUgaXNcclxuICAgICAqIGhpZ2hsaWdodGVkIHdoZW4gdXNpbmcga2V5Ym9hcmQgbmF2aWdhdGlvbi5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfY2xhbVBpY2tlck1vbWVudD86IFRcclxuXHJcbiAgICBnZXQgcGlja2VyTW9tZW50KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jbGFtUGlja2VyTW9tZW50XHJcbiAgICB9XHJcblxyXG4gICAgc2V0IHBpY2tlck1vbWVudCh2YWx1ZTogVCB8IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9jbGFtUGlja2VyTW9tZW50ID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuY2xhbXBEYXRlKFxyXG4gICAgICAgICAgICAgICAgdmFsdWUsXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBpY2tlcj8ubWluLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5waWNrZXI/Lm1heFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2RSZWYubWFya0ZvckNoZWNrKClcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcGlja2VyVHlwZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5waWNrZXI/LnBpY2tlclR5cGVcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY2FuY2VsTGFiZWwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5waWNrZXJJbnRsLmNhbmNlbEJ0bkxhYmVsXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNldExhYmVsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGlja2VySW50bC5zZXRCdG5MYWJlbFxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHJhbmdlICdmcm9tJyBsYWJlbFxyXG4gICAgICovXHJcbiAgICBnZXQgZnJvbUxhYmVsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGlja2VySW50bC5yYW5nZUZyb21MYWJlbFxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHJhbmdlICd0bycgbGFiZWxcclxuICAgICAqL1xyXG4gICAgZ2V0IHRvTGFiZWwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5waWNrZXJJbnRsLnJhbmdlVG9MYWJlbFxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHJhbmdlICdmcm9tJyBmb3JtYXR0ZWQgdmFsdWVcclxuICAgICAqL1xyXG4gICAgZ2V0IGZyb21Gb3JtYXR0ZWRWYWx1ZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5waWNrZXI/LnNlbGVjdGVkc1swXVxyXG4gICAgICAgIHJldHVybiB2YWx1ZVxyXG4gICAgICAgICAgICA/IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmZvcm1hdCh2YWx1ZSwgdGhpcy5waWNrZXI/LmZvcm1hdFN0cmluZylcclxuICAgICAgICAgICAgOiAnJ1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHJhbmdlICd0bycgZm9ybWF0dGVkIHZhbHVlXHJcbiAgICAgKi9cclxuICAgIGdldCB0b0Zvcm1hdHRlZFZhbHVlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnBpY2tlcj8uc2VsZWN0ZWRzWzFdXHJcbiAgICAgICAgcmV0dXJuIHZhbHVlXHJcbiAgICAgICAgICAgID8gdGhpcy5kYXRlVGltZUFkYXB0ZXIuZm9ybWF0KHZhbHVlLCB0aGlzLnBpY2tlcj8uZm9ybWF0U3RyaW5nKVxyXG4gICAgICAgICAgICA6ICcnXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYXNlcyBpbiB3aGljaCB0aGUgY29udHJvbCBidXR0b25zIHNob3cgaW4gdGhlIHBpY2tlclxyXG4gICAgICogMSkgcGlja2VyIG1vZGUgaXMgJ2RpYWxvZydcclxuICAgICAqIDIpIHBpY2tlciB0eXBlIGlzIE5PVCAnY2FsZW5kYXInIGFuZCB0aGUgcGlja2VyIG1vZGUgaXMgTk9UICdpbmxpbmUnXHJcbiAgICAgKi9cclxuICAgIGdldCBzaG93Q29udHJvbEJ1dHRvbnMoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgdGhpcy5waWNrZXI/LnBpY2tlck1vZGUgPT09ICdkaWFsb2cnIHx8XHJcbiAgICAgICAgICAgICh0aGlzLnBpY2tlcj8ucGlja2VyVHlwZSAhPT0gJ2NhbGVuZGFyJyAmJlxyXG4gICAgICAgICAgICAgICAgdGhpcy5waWNrZXI/LnBpY2tlck1vZGUgIT09ICdpbmxpbmUnKVxyXG4gICAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY29udGFpbmVyRWxtKCk6IEhUTUxFbGVtZW50IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lbG1SZWYubmF0aXZlRWxlbWVudFxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaW50ZXJuYWwgKi9cclxuICAgIEBIb3N0QmluZGluZygnY2xhc3Mubnh0LWR0LWNvbnRhaW5lcicpXHJcbiAgICBnZXQgY29udGFpbmVyQ2xhc3MoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRydWVcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLm54dC1kdC1wb3B1cC1jb250YWluZXInKVxyXG4gICAgZ2V0IHBvcHVwQ29udGFpbmVyQ2xhc3MoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGlja2VyPy5waWNrZXJNb2RlID09PSAncG9wdXAnXHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5ueHQtZHQtZGlhbG9nLWNvbnRhaW5lcicpXHJcbiAgICBnZXQgZGlhbG9nQ29udGFpbmVyQ2xhc3MoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGlja2VyPy5waWNrZXJNb2RlID09PSAnZGlhbG9nJ1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaW50ZXJuYWwgKi9cclxuICAgIEBIb3N0QmluZGluZygnY2xhc3Mubnh0LWR0LWlubGluZS1jb250YWluZXInKVxyXG4gICAgZ2V0IGlubGluZUNvbnRhaW5lckNsYXNzKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBpY2tlcj8ucGlja2VyTW9kZSA9PT0gJ2lubGluZSdcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLm54dC1kdC1jb250YWluZXItZGlzYWJsZWQnKVxyXG4gICAgZ2V0IGNvbnRhaW5lckRpc2FibGVkQ2xhc3MoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICEhdGhpcy5waWNrZXI/LmRpc2FibGVkXHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcclxuICAgIGdldCBjb250YWluZXJJZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBpY2tlcj8uaWRcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICBASG9zdEJpbmRpbmcoJ0B0cmFuc2Zvcm1QaWNrZXInKVxyXG4gICAgZ2V0IGNvbnRhaW5lckFuaW1hdGlvbigpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBpY2tlcj8ucGlja2VyTW9kZSA9PT0gJ2lubGluZScgPyAnJyA6ICdlbnRlcidcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGVsbVJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBwaWNrZXJJbnRsOiBEYXRlVGltZUludGwsXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBkYXRlVGltZUFkYXB0ZXI6IERhdGVUaW1lQWRhcHRlcjxUPlxyXG4gICAgKSB7IH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHsgfVxyXG5cclxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmluaXRQaWNrZXIoKVxyXG4gICAgfVxyXG5cclxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmZvY3VzUGlja2VyKClcclxuICAgIH1cclxuXHJcbiAgICBASG9zdExpc3RlbmVyKCdAdHJhbnNmb3JtUGlja2VyLmRvbmUnLCBbJyRldmVudCddKVxyXG4gICAgaGFuZGxlQ29udGFpbmVyQW5pbWF0aW9uRG9uZShldmVudDogQW5pbWF0aW9uRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB0b1N0YXRlID0gZXZlbnQudG9TdGF0ZVxyXG4gICAgICAgIGlmICh0b1N0YXRlID09PSAnZW50ZXInKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGlja2VyT3BlbmVkJC5uZXh0KClcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZGF0ZVNlbGVjdGVkKGRhdGU/OiBUKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IHJlc3VsdFxyXG5cclxuICAgICAgICBpZiAodGhpcy5waWNrZXI/LmlzSW5TaW5nbGVNb2RlKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMuZGF0ZVNlbGVjdGVkSW5TaW5nbGVNb2RlKGRhdGUpXHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGlja2VyTW9tZW50ID0gcmVzdWx0XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBpY2tlci5zZWxlY3QocmVzdWx0KVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gd2UgY2xvc2UgdGhlIHBpY2tlciB3aGVuIHJlc3VsdCBpcyB1bmRlZmluZWQgYW5kIHBpY2tlclR5cGUgaXMgY2FsZW5kYXIuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5waWNrZXJUeXBlID09PSAnY2FsZW5kYXInKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWRlUGlja2VyJC5uZXh0KClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnBpY2tlcj8uaXNJblJhbmdlTW9kZSkge1xyXG4gICAgICAgICAgICByZXN1bHQgPSB0aGlzLmRhdGVTZWxlY3RlZEluUmFuZ2VNb2RlKGRhdGUpXHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGlja2VyTW9tZW50ID0gcmVzdWx0W3RoaXMuYWN0aXZlU2VsZWN0ZWRJbmRleF1cclxuICAgICAgICAgICAgICAgIHRoaXMucGlja2VyLnNlbGVjdChyZXN1bHQpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGltZVNlbGVjdGVkKHRpbWU/OiBUKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5waWNrZXJNb21lbnQgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5jbG9uZSh0aW1lKVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMucGlja2VyPy5kYXRlVGltZUNoZWNrZXIodGhpcy5waWNrZXJNb21lbnQpKSB7XHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMucGlja2VyLmlzSW5TaW5nbGVNb2RlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGlja2VyLnNlbGVjdCh0aGlzLnBpY2tlck1vbWVudClcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5waWNrZXIuaXNJblJhbmdlTW9kZSkge1xyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZHMgPSBbLi4udGhpcy5waWNrZXI/LnNlbGVjdGVkcyB8fCBbXV1cclxuXHJcbiAgICAgICAgICAgIC8vIGNoZWNrIGlmIHRoZSAnZnJvbScgaXMgYWZ0ZXIgJ3RvJyBvciAndG8naXMgYmVmb3JlICdmcm9tJ1xyXG4gICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIHdlIHNldCBib3RoIHRoZSAnZnJvbScgYW5kICd0bycgdGhlIHNhbWUgdmFsdWVcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgKHRoaXMuYWN0aXZlU2VsZWN0ZWRJbmRleCA9PT0gMCAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkc1sxXSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmNvbXBhcmUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGlja2VyTW9tZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZHNbMV1cclxuICAgICAgICAgICAgICAgICAgICApID09PSAxKSB8fFxyXG4gICAgICAgICAgICAgICAgKHRoaXMuYWN0aXZlU2VsZWN0ZWRJbmRleCA9PT0gMSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkc1swXSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmNvbXBhcmUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGlja2VyTW9tZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZHNbMF1cclxuICAgICAgICAgICAgICAgICAgICApID09PSAtMSlcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZHNbMF0gPSB0aGlzLnBpY2tlck1vbWVudFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRzWzFdID0gdGhpcy5waWNrZXJNb21lbnRcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkc1t0aGlzLmFjdGl2ZVNlbGVjdGVkSW5kZXhdID0gdGhpcy5waWNrZXJNb21lbnRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5waWNrZXIuc2VsZWN0KHNlbGVjdGVkcylcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIYW5kbGUgY2xpY2sgb24gY2FuY2VsIGJ1dHRvblxyXG4gICAgICovXHJcbiAgICBvbkNhbmNlbENsaWNrZWQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5oaWRlUGlja2VyJC5uZXh0KClcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIYW5kbGUgY2xpY2sgb24gc2V0IGJ1dHRvblxyXG4gICAgICovXHJcbiAgICBvblNldENsaWNrZWQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnBpY2tlcj8uZGF0ZVRpbWVDaGVja2VyPy4odGhpcy5waWNrZXJNb21lbnQpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGlkZVBpY2tlciQubmV4dCgpXHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNvbmZpcm1TZWxlY3RlZCQubmV4dChldmVudClcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIYW5kbGUgY2xpY2sgb24gaW5mb3JtIHJhZGlvIGdyb3VwXHJcbiAgICAgKi9cclxuICAgIGhhbmRsZUNsaWNrT25JbmZvR3JvdXAoZXZlbnQ6IGFueSwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2V0QWN0aXZlU2VsZWN0ZWRJbmRleChpbmRleClcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXHJcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhhbmRsZSBjbGljayBvbiBpbmZvcm0gcmFkaW8gZ3JvdXBcclxuICAgICAqL1xyXG4gICAgaGFuZGxlS2V5ZG93bk9uSW5mb0dyb3VwKFxyXG4gICAgICAgIGV2ZW50OiBhbnksXHJcbiAgICAgICAgbmV4dDogYW55LFxyXG4gICAgICAgIGluZGV4OiBudW1iZXJcclxuICAgICk6IHZvaWQge1xyXG4gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5Q29kZSkge1xyXG4gICAgICAgICAgICBjYXNlICdBcnJvd0Rvd24nOlxyXG4gICAgICAgICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcclxuICAgICAgICAgICAgY2FzZSAnQXJyb3dVcCc6XHJcbiAgICAgICAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XHJcbiAgICAgICAgICAgICAgICBuZXh0LmZvY3VzKClcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlU2VsZWN0ZWRJbmRleChpbmRleCA9PT0gMCA/IDEgOiAwKVxyXG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxyXG4gICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcblxyXG4gICAgICAgICAgICBjYXNlICdTcGFjZSc6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVNlbGVjdGVkSW5kZXgoaW5kZXgpXHJcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXHJcbiAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIHZhbHVlIG9mIGFjdGl2ZVNlbGVjdGVkSW5kZXhcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBzZXRBY3RpdmVTZWxlY3RlZEluZGV4KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMucGlja2VyPy5zZWxlY3RNb2RlID09PSAncmFuZ2UnICYmXHJcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlU2VsZWN0ZWRJbmRleCAhPT0gaW5kZXhcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5hY3RpdmVTZWxlY3RlZEluZGV4ID0gaW5kZXhcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5waWNrZXI/LnNlbGVjdGVkc1t0aGlzLmFjdGl2ZVNlbGVjdGVkSW5kZXhdXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBpY2tlci5zZWxlY3RlZHMgJiYgc2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGlja2VyTW9tZW50ID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuY2xvbmUoc2VsZWN0ZWQpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0UGlja2VyKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucGlja2VyTW9tZW50ID0gdGhpcy5waWNrZXI/LnN0YXJ0QXQgfHwgdGhpcy5kYXRlVGltZUFkYXB0ZXIubm93KClcclxuICAgICAgICB0aGlzLmFjdGl2ZVNlbGVjdGVkSW5kZXggPSB0aGlzLnBpY2tlcj8uc2VsZWN0TW9kZSA9PT0gJ3JhbmdlVG8nID8gMSA6IDBcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNlbGVjdCBjYWxlbmRhciBkYXRlIGluIHNpbmdsZSBtb2RlLFxyXG4gICAgICogaXQgcmV0dXJucyB1bmRlZmluZWQgd2hlbiBkYXRlIGlzIG5vdCBzZWxlY3RlZC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBkYXRlU2VsZWN0ZWRJblNpbmdsZU1vZGUoZGF0ZT86IFQpOiBUIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICBpZiAodGhpcy5kYXRlVGltZUFkYXB0ZXIuaXNTYW1lRGF5KGRhdGUsIHRoaXMucGlja2VyPy5zZWxlY3RlZCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlQW5kQ2hlY2tDYWxlbmRhckRhdGUoZGF0ZSlcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNlbGVjdCBkYXRlcyBpbiByYW5nZSBNb2RlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZGF0ZVNlbGVjdGVkSW5SYW5nZU1vZGUoZGF0ZT86IFQpOiBBcnJheTxUIHwgdW5kZWZpbmVkPiB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgbGV0IGZyb20gPSB0aGlzLnBpY2tlcj8uc2VsZWN0ZWRzWzBdXHJcbiAgICAgICAgbGV0IHRvID0gdGhpcy5waWNrZXI/LnNlbGVjdGVkc1sxXVxyXG5cclxuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLnVwZGF0ZUFuZENoZWNrQ2FsZW5kYXJEYXRlKGRhdGUpXHJcblxyXG4gICAgICAgIGlmICghcmVzdWx0KSB7XHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gaWYgdGhlIGdpdmVuIGNhbGVuZGFyIGRheSBpcyBhZnRlciBvciBlcXVhbCB0byAnZnJvbScsXHJcbiAgICAgICAgLy8gc2V0IHRocyBnaXZlbiBkYXRlIGFzICd0bydcclxuICAgICAgICAvLyBvdGhlcndpc2UsIHNldCBpdCBhcyAnZnJvbScgYW5kIHNldCAndG8nIHRvIHVuZGVmaW5lZFxyXG4gICAgICAgIGlmICh0aGlzLnBpY2tlcj8uc2VsZWN0TW9kZSA9PT0gJ3JhbmdlJykge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBpY2tlci5zZWxlY3RlZHMgJiZcclxuICAgICAgICAgICAgICAgIHRoaXMucGlja2VyLnNlbGVjdGVkcy5sZW5ndGggJiZcclxuICAgICAgICAgICAgICAgICF0byAmJlxyXG4gICAgICAgICAgICAgICAgZnJvbSAmJlxyXG4gICAgICAgICAgICAgICAgKHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyhyZXN1bHQsIGZyb20pID8/IDApID49IDBcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICB0byA9IHJlc3VsdFxyXG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVTZWxlY3RlZEluZGV4ID0gMVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZnJvbSA9IHJlc3VsdFxyXG4gICAgICAgICAgICAgICAgdG8gPSB1bmRlZmluZWRcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlU2VsZWN0ZWRJbmRleCA9IDBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5waWNrZXI/LnNlbGVjdE1vZGUgPT09ICdyYW5nZUZyb20nKSB7XHJcbiAgICAgICAgICAgIGZyb20gPSByZXN1bHRcclxuXHJcbiAgICAgICAgICAgIC8vIGlmIHRoZSBmcm9tIHZhbHVlIGlzIGFmdGVyIHRoZSB0byB2YWx1ZSwgc2V0IHRoZSB0byB2YWx1ZSBhcyB1bmRlZmluZWRcclxuICAgICAgICAgICAgaWYgKHRvICYmIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmNvbXBhcmUoZnJvbSwgdG8pID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdG8gPSB1bmRlZmluZWRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5waWNrZXI/LnNlbGVjdE1vZGUgPT09ICdyYW5nZVRvJykge1xyXG4gICAgICAgICAgICB0byA9IHJlc3VsdFxyXG5cclxuICAgICAgICAgICAgLy8gaWYgdGhlIGZyb20gdmFsdWUgaXMgYWZ0ZXIgdGhlIHRvIHZhbHVlLCBzZXQgdGhlIGZyb20gdmFsdWUgYXMgdW5kZWZpbmVkXHJcbiAgICAgICAgICAgIGlmIChmcm9tICYmIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmNvbXBhcmUoZnJvbSwgdG8pID4gMCkge1xyXG4gICAgICAgICAgICAgICAgZnJvbSA9IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gW2Zyb20sIHRvXVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIHRoZSBnaXZlbiBjYWxlbmRhciBkYXRlJ3MgdGltZSBhbmQgY2hlY2sgaWYgaXQgaXMgdmFsaWRcclxuICAgICAqIEJlY2F1c2UgdGhlIGNhbGVuZGFyIGRhdGUgaGFzIDAwOjAwOjAwIGFzIGRlZmF1bHQgdGltZSwgaWYgdGhlIHBpY2tlciB0eXBlIGlzICdib3RoJyxcclxuICAgICAqIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBnaXZlbiBjYWxlbmRhciBkYXRlJ3MgdGltZSBiZWZvcmUgc2VsZWN0aW5nIGl0LlxyXG4gICAgICogaWYgaXQgaXMgdmFsaWQsIHJldHVybiB0aGUgdXBkYXRlZCBkYXRlVGltZVxyXG4gICAgICogaWYgaXQgaXMgbm90IHZhbGlkLCByZXR1cm4gdW5kZWZpbmVkXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgdXBkYXRlQW5kQ2hlY2tDYWxlbmRhckRhdGUoZGF0ZT86IFQpOiBUIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICBsZXQgcmVzdWx0XHJcblxyXG4gICAgICAgIC8vIGlmIHRoZSBwaWNrZXIgaXMgJ2JvdGgnLCB1cGRhdGUgdGhlIGNhbGVuZGFyIGRhdGUncyB0aW1lIHZhbHVlXHJcbiAgICAgICAgaWYgKHRoaXMucGlja2VyPy5waWNrZXJUeXBlID09PSAnYm90aCcpIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuY3JlYXRlRGF0ZShcclxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldFllYXIoZGF0ZSksXHJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRNb250aChkYXRlKSxcclxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldERhdGUoZGF0ZSksXHJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRIb3Vycyh0aGlzLnBpY2tlck1vbWVudCksXHJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRNaW51dGVzKHRoaXMucGlja2VyTW9tZW50KSxcclxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldFNlY29uZHModGhpcy5waWNrZXJNb21lbnQpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuY2xhbXBEYXRlKFxyXG4gICAgICAgICAgICAgICAgcmVzdWx0LFxyXG4gICAgICAgICAgICAgICAgdGhpcy5waWNrZXIubWluLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5waWNrZXIubWF4XHJcbiAgICAgICAgICAgIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXN1bHQgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5jbG9uZShkYXRlKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gY2hlY2sgdGhlIHVwZGF0ZWQgZGF0ZVRpbWVcclxuICAgICAgICByZXR1cm4gdGhpcy5waWNrZXI/LmRhdGVUaW1lQ2hlY2tlcihyZXN1bHQpID8gcmVzdWx0IDogdW5kZWZpbmVkXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGb2N1cyB0byB0aGUgcGlja2VyXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZm9jdXNQaWNrZXIoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMucGlja2VyPy5waWNrZXJNb2RlID09PSAnaW5saW5lJykge1xyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNhbGVuZGFyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FsZW5kYXIuZm9jdXNBY3RpdmVDZWxsKClcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudGltZXIpIHtcclxuICAgICAgICAgICAgdGhpcy50aW1lci5mb2N1cygpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIjxkaXYgW2Nka1RyYXBGb2N1c109XCJwaWNrZXI/LnBpY2tlck1vZGUgIT09ICdpbmxpbmUnXCJcclxuICAgIFtAZmFkZUluUGlja2VyXT1cInBpY2tlcj8ucGlja2VyTW9kZSA9PT0gJ2lubGluZSc/ICcnIDogJ2VudGVyJ1wiXHJcbiAgICBjbGFzcz1cIm54dC1kdC1jb250YWluZXItaW5uZXJcIj5cclxuXHJcbiAgICA8bnh0LWRhdGUtdGltZS1jYWxlbmRhciAqbmdJZj1cInBpY2tlclR5cGUgPT09ICdib3RoJyB8fCBwaWNrZXJUeXBlID09PSAnY2FsZW5kYXInXCJcclxuICAgICAgICBjbGFzcz1cIm54dC1kdC1jb250YWluZXItcm93XCJcclxuICAgICAgICBbZmlyc3REYXlPZldlZWtdPVwicGlja2VyPy5maXJzdERheU9mV2VlayA/PyAwXCJcclxuICAgICAgICBbKHBpY2tlck1vbWVudCldPVwicGlja2VyTW9tZW50XCJcclxuICAgICAgICBbc2VsZWN0ZWRdPVwicGlja2VyPy5zZWxlY3RlZFwiXHJcbiAgICAgICAgW3NlbGVjdGVkc109XCJwaWNrZXI/LnNlbGVjdGVkcyA/PyBbXVwiXHJcbiAgICAgICAgW3NlbGVjdE1vZGVdPVwicGlja2VyPy5zZWxlY3RNb2RlXCJcclxuICAgICAgICBbbWluXT1cInBpY2tlcj8ubWluXCJcclxuICAgICAgICBbbWF4XT1cInBpY2tlcj8ubWF4XCJcclxuICAgICAgICBbZGF0ZVRpbWVGaWx0ZXJdPVwicGlja2VyPy5kYXRlVGltZUZpbHRlclwiXHJcbiAgICAgICAgW3N0YXJ0Vmlld109XCJwaWNrZXI/LnN0YXJ0VmlldyA/PyAnbW9udGgnXCJcclxuICAgICAgICBbaGlkZU90aGVyTW9udGhzXT1cIiEhcGlja2VyPy5oaWRlT3RoZXJNb250aHNcIlxyXG4gICAgICAgICh5ZWFyU2VsZWN0ZWQpPVwicGlja2VyPy5zZWxlY3RZZWFyKCRldmVudClcIlxyXG4gICAgICAgIChtb250aFNlbGVjdGVkKT1cInBpY2tlcj8uc2VsZWN0TW9udGgoJGV2ZW50KVwiXHJcbiAgICAgICAgKHNlbGVjdGVkQ2hhbmdlKT1cImRhdGVTZWxlY3RlZCgkZXZlbnQpXCI+PC9ueHQtZGF0ZS10aW1lLWNhbGVuZGFyPlxyXG5cclxuICAgIDxueHQtZGF0ZS10aW1lLXRpbWVyICpuZ0lmPVwicGlja2VyVHlwZSA9PT0gJ2JvdGgnIHx8IHBpY2tlclR5cGUgPT09ICd0aW1lcidcIlxyXG4gICAgICAgIGNsYXNzPVwibnh0LWR0LWNvbnRhaW5lci1yb3dcIlxyXG4gICAgICAgIFtwaWNrZXJNb21lbnRdPVwicGlja2VyTW9tZW50XCJcclxuICAgICAgICBbbWluXT1cInBpY2tlcj8ubWluXCJcclxuICAgICAgICBbbWF4XT1cInBpY2tlcj8ubWF4XCJcclxuICAgICAgICBbc2hvd1NlY29uZHNUaW1lcl09XCIhIXBpY2tlcj8uc2hvd1NlY29uZHNUaW1lclwiXHJcbiAgICAgICAgW2hvdXIxMlRpbWVyXT1cIiEhcGlja2VyPy5ob3VyMTJUaW1lclwiXHJcbiAgICAgICAgW3N0ZXBIb3VyXT1cInBpY2tlcj8uc3RlcEhvdXIgPz8gMVwiXHJcbiAgICAgICAgW3N0ZXBNaW51dGVdPVwicGlja2VyPy5zdGVwTWludXRlID8/IDFcIlxyXG4gICAgICAgIFtzdGVwU2Vjb25kXT1cInBpY2tlcj8uc3RlcFNlY29uZCA/PyAxXCJcclxuICAgICAgICAoc2VsZWN0ZWRDaGFuZ2UpPVwidGltZVNlbGVjdGVkKCRldmVudClcIj48L254dC1kYXRlLXRpbWUtdGltZXI+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cInBpY2tlcj8uaXNJblJhbmdlTW9kZVwiXHJcbiAgICAgICAgcm9sZT1cInJhZGlvZ3JvdXBcIlxyXG4gICAgICAgIGNsYXNzPVwibnh0LWR0LWNvbnRhaW5lci1pbmZvIG54dC1kdC1jb250YWluZXItcm93XCI+XHJcbiAgICAgICAgPGRpdiByb2xlPVwicmFkaW9cIlxyXG4gICAgICAgICAgICBbdGFiaW5kZXhdPVwiYWN0aXZlU2VsZWN0ZWRJbmRleCA9PT0gMCA/IDAgOiAtMVwiXHJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtY2hlY2tlZF09XCJhY3RpdmVTZWxlY3RlZEluZGV4ID09PSAwXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJueHQtZHQtY29udHJvbCBueHQtZHQtY29udGFpbmVyLXJhbmdlIG54dC1kdC1jb250YWluZXItZnJvbVwiXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnbnh0LWR0LWNvbnRhaW5lci1pbmZvLWFjdGl2ZSc6IGFjdGl2ZVNlbGVjdGVkSW5kZXggPT09IDB9XCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUNsaWNrT25JbmZvR3JvdXAoJGV2ZW50LCAwKVwiXHJcbiAgICAgICAgICAgIChrZXlkb3duKT1cImhhbmRsZUtleWRvd25PbkluZm9Hcm91cCgkZXZlbnQsIHRvLCAwKVwiXHJcbiAgICAgICAgICAgICNmcm9tPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm54dC1kdC1jb250cm9sLWNvbnRlbnQgbnh0LWR0LWNvbnRhaW5lci1yYW5nZS1jb250ZW50XCJcclxuICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibnh0LWR0LWNvbnRhaW5lci1pbmZvLWxhYmVsXCI+e3tmcm9tTGFiZWx9fTo8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm54dC1kdC1jb250YWluZXItaW5mby12YWx1ZVwiPnt7ZnJvbUZvcm1hdHRlZFZhbHVlfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IHJvbGU9XCJyYWRpb1wiXHJcbiAgICAgICAgICAgIFt0YWJpbmRleF09XCJhY3RpdmVTZWxlY3RlZEluZGV4ID09PSAxID8gMCA6IC0xXCJcclxuICAgICAgICAgICAgW2F0dHIuYXJpYS1jaGVja2VkXT1cImFjdGl2ZVNlbGVjdGVkSW5kZXggPT09IDFcIlxyXG4gICAgICAgICAgICBjbGFzcz1cIm54dC1kdC1jb250cm9sIG54dC1kdC1jb250YWluZXItcmFuZ2Ugbnh0LWR0LWNvbnRhaW5lci10b1wiXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnbnh0LWR0LWNvbnRhaW5lci1pbmZvLWFjdGl2ZSc6IGFjdGl2ZVNlbGVjdGVkSW5kZXggPT09IDF9XCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUNsaWNrT25JbmZvR3JvdXAoJGV2ZW50LCAxKVwiXHJcbiAgICAgICAgICAgIChrZXlkb3duKT1cImhhbmRsZUtleWRvd25PbkluZm9Hcm91cCgkZXZlbnQsIGZyb20sIDEpXCJcclxuICAgICAgICAgICAgI3RvPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm54dC1kdC1jb250cm9sLWNvbnRlbnQgbnh0LWR0LWNvbnRhaW5lci1yYW5nZS1jb250ZW50XCJcclxuICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibnh0LWR0LWNvbnRhaW5lci1pbmZvLWxhYmVsXCI+e3t0b0xhYmVsfX06PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJueHQtZHQtY29udGFpbmVyLWluZm8tdmFsdWVcIj57e3RvRm9ybWF0dGVkVmFsdWV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cInNob3dDb250cm9sQnV0dG9uc1wiXHJcbiAgICAgICAgY2xhc3M9XCJueHQtZHQtY29udGFpbmVyLWJ1dHRvbnMgbnh0LWR0LWNvbnRhaW5lci1yb3dcIj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwibnh0LWR0LWNvbnRyb2wgbnh0LWR0LWNvbnRyb2wtYnV0dG9uIG54dC1kdC1jb250YWluZXItY29udHJvbC1idXR0b25cIlxyXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2FuY2VsQ2xpY2tlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibnh0LWR0LWNvbnRyb2wtY29udGVudCBueHQtZHQtY29udHJvbC1idXR0b24tY29udGVudFwiXHJcbiAgICAgICAgICAgICAgICB0YWJpbmRleD1cIi0xXCI+XHJcbiAgICAgICAgICAgICAgICB7e2NhbmNlbExhYmVsfX1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJueHQtZHQtY29udHJvbCBueHQtZHQtY29udHJvbC1idXR0b24gbnh0LWR0LWNvbnRhaW5lci1jb250cm9sLWJ1dHRvblwiXHJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwib25TZXRDbGlja2VkKCRldmVudClcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJueHQtZHQtY29udHJvbC1jb250ZW50IG54dC1kdC1jb250cm9sLWJ1dHRvbi1jb250ZW50XCJcclxuICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIj5cclxuICAgICAgICAgICAgICAgIHt7c2V0TGFiZWx9fVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
|