@sbb-esta/lyne-elements 1.14.1 → 1.15.1
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/autocomplete/autocomplete.d.ts +1 -1
- package/autocomplete/autocomplete.d.ts.map +1 -1
- package/autocomplete-grid/autocomplete-grid/autocomplete-grid.d.ts +1 -1
- package/autocomplete-grid/autocomplete-grid/autocomplete-grid.d.ts.map +1 -1
- package/autocomplete-grid/autocomplete-grid.js +6 -6
- package/autocomplete.js +20 -19
- package/calendar/calendar.d.ts +1 -1
- package/calendar/calendar.d.ts.map +1 -1
- package/calendar.js +25 -27
- package/checkbox/checkbox-panel/checkbox-panel.d.ts +1 -1
- package/checkbox/checkbox-panel/checkbox-panel.d.ts.map +1 -1
- package/checkbox/checkbox-panel.js +5 -5
- package/checkbox/common.js +1 -1
- package/clock/clock.d.ts +1 -1
- package/clock/clock.d.ts.map +1 -1
- package/clock.js +2 -2
- package/container/sticky-bar/sticky-bar.d.ts +29 -2
- package/container/sticky-bar/sticky-bar.d.ts.map +1 -1
- package/container/sticky-bar.js +69 -31
- package/core/base-elements/link-base-element.d.ts +1 -0
- package/core/base-elements/link-base-element.d.ts.map +1 -1
- package/core/base-elements.js +46 -43
- package/core/config/config.d.ts +3 -0
- package/core/config/config.d.ts.map +1 -1
- package/core/controllers/media-matchers-controller.d.ts +32 -0
- package/core/controllers/media-matchers-controller.d.ts.map +1 -0
- package/core/controllers.d.ts +1 -0
- package/core/controllers.d.ts.map +1 -1
- package/core/controllers.js +75 -33
- package/core/dom/breakpoint.d.ts +2 -1
- package/core/dom/breakpoint.d.ts.map +1 -1
- package/core/dom.js +7 -7
- package/core/mixins/form-associated-checkbox-mixin.d.ts.map +1 -1
- package/core/mixins.js +8 -1
- package/core/styles/core/mediaqueries.scss +1 -2
- package/core/styles/mixins/buttons.scss +5 -5
- package/core/testing/event-spy.d.ts +6 -4
- package/core/testing/event-spy.d.ts.map +1 -1
- package/core/testing.js +82 -55
- package/custom-elements.json +953 -97
- package/datepicker/datepicker/datepicker.d.ts.map +1 -1
- package/development/autocomplete/autocomplete.d.ts +1 -1
- package/development/autocomplete/autocomplete.d.ts.map +1 -1
- package/development/autocomplete-grid/autocomplete-grid/autocomplete-grid.d.ts +1 -1
- package/development/autocomplete-grid/autocomplete-grid/autocomplete-grid.d.ts.map +1 -1
- package/development/autocomplete-grid/autocomplete-grid.js +4 -3
- package/development/autocomplete.js +4 -3
- package/development/calendar/calendar.d.ts +1 -1
- package/development/calendar/calendar.d.ts.map +1 -1
- package/development/calendar.js +8 -11
- package/development/checkbox/checkbox-panel/checkbox-panel.d.ts +1 -1
- package/development/checkbox/checkbox-panel/checkbox-panel.d.ts.map +1 -1
- package/development/checkbox/checkbox-panel.js +2 -2
- package/development/checkbox/common.js +2 -2
- package/development/clock/clock.d.ts +1 -1
- package/development/clock/clock.d.ts.map +1 -1
- package/development/clock.js +3 -3
- package/development/container/sticky-bar/sticky-bar.d.ts +29 -2
- package/development/container/sticky-bar/sticky-bar.d.ts.map +1 -1
- package/development/container/sticky-bar.js +149 -36
- package/development/core/base-elements/link-base-element.d.ts +1 -0
- package/development/core/base-elements/link-base-element.d.ts.map +1 -1
- package/development/core/base-elements.js +5 -2
- package/development/core/config/config.d.ts +3 -0
- package/development/core/config/config.d.ts.map +1 -1
- package/development/core/config.js +1 -1
- package/development/core/controllers/media-matchers-controller.d.ts +32 -0
- package/development/core/controllers/media-matchers-controller.d.ts.map +1 -0
- package/development/core/controllers.d.ts +1 -0
- package/development/core/controllers.d.ts.map +1 -1
- package/development/core/controllers.js +65 -1
- package/development/core/dom/breakpoint.d.ts +2 -1
- package/development/core/dom/breakpoint.d.ts.map +1 -1
- package/development/core/dom.js +2 -2
- package/development/core/mixins/form-associated-checkbox-mixin.d.ts.map +1 -1
- package/development/core/mixins.js +9 -2
- package/development/core/testing/event-spy.d.ts +6 -4
- package/development/core/testing/event-spy.d.ts.map +1 -1
- package/development/core/testing.js +35 -1
- package/development/datepicker/datepicker/datepicker.d.ts.map +1 -1
- package/development/datepicker/datepicker.js +1 -1
- package/development/dialog/dialog.js +2 -2
- package/development/expansion-panel/expansion-panel-header/expansion-panel-header.d.ts +2 -0
- package/development/expansion-panel/expansion-panel-header/expansion-panel-header.d.ts.map +1 -1
- package/development/expansion-panel/expansion-panel-header.js +7 -3
- package/development/file-selector/file-selector.d.ts +5 -0
- package/development/file-selector/file-selector.d.ts.map +1 -1
- package/development/file-selector.js +8 -1
- package/development/flip-card/flip-card/flip-card.d.ts +4 -0
- package/development/flip-card/flip-card/flip-card.d.ts.map +1 -1
- package/development/flip-card/flip-card-details.js +4 -6
- package/development/flip-card/flip-card-summary/flip-card-summary.d.ts +1 -1
- package/development/flip-card/flip-card-summary/flip-card-summary.d.ts.map +1 -1
- package/development/flip-card/flip-card-summary.js +9 -10
- package/development/flip-card/flip-card.js +26 -2
- package/development/form-field/form-field.js +5 -3
- package/development/icon/icon.d.ts +1 -1
- package/development/icon.js +1 -1
- package/development/image/image.d.ts.map +1 -1
- package/development/image.js +3 -19
- package/development/map-container.js +3 -2
- package/development/menu/menu/menu.d.ts +1 -0
- package/development/menu/menu/menu.d.ts.map +1 -1
- package/development/menu/menu.js +15 -11
- package/development/navigation/navigation-section.js +4 -14
- package/development/navigation/navigation.js +3 -13
- package/development/notification.js +3 -2
- package/development/paginator/paginator/paginator.d.ts +1 -5
- package/development/paginator/paginator/paginator.d.ts.map +1 -1
- package/development/paginator/paginator.js +19 -27
- package/development/popover/popover/popover.d.ts.map +1 -1
- package/development/popover/popover.js +9 -16
- package/development/radio-button/radio-button-panel/radio-button-panel.d.ts +1 -1
- package/development/radio-button/radio-button-panel/radio-button-panel.d.ts.map +1 -1
- package/development/radio-button/radio-button-panel.js +2 -2
- package/development/sbb-tokens-BdGhUJjM.js +33 -0
- package/development/select/select.d.ts +6 -5
- package/development/select/select.d.ts.map +1 -1
- package/development/select.js +23 -14
- package/development/slider/slider.d.ts +5 -0
- package/development/slider/slider.d.ts.map +1 -1
- package/development/slider.js +8 -1
- package/development/table/table-wrapper/table-wrapper.d.ts +1 -1
- package/development/table/table-wrapper/table-wrapper.d.ts.map +1 -1
- package/development/table/table-wrapper.js +1 -1
- package/development/teaser/teaser.d.ts +2 -1
- package/development/teaser/teaser.d.ts.map +1 -1
- package/development/teaser-product/common/teaser-product-common.d.ts +1 -1
- package/development/teaser-product/common/teaser-product-common.d.ts.map +1 -1
- package/development/teaser-product/common.js +19 -19
- package/development/teaser-product/teaser-product/teaser-product.d.ts +2 -1
- package/development/teaser-product/teaser-product/teaser-product.d.ts.map +1 -1
- package/development/teaser-product/teaser-product.js +44 -12
- package/development/teaser.js +33 -7
- package/development/timetable-occupancy-icon/timetable-occupancy-icon.d.ts +2 -1
- package/development/timetable-occupancy-icon/timetable-occupancy-icon.d.ts.map +1 -1
- package/development/timetable-occupancy-icon.js +11 -9
- package/development/toggle-check/toggle-check.d.ts +1 -1
- package/development/toggle-check/toggle-check.d.ts.map +1 -1
- package/development/toggle-check.js +2 -2
- package/dialog/dialog.js +1 -1
- package/expansion-panel/expansion-panel-header/expansion-panel-header.d.ts +2 -0
- package/expansion-panel/expansion-panel-header/expansion-panel-header.d.ts.map +1 -1
- package/expansion-panel/expansion-panel-header.js +25 -23
- package/file-selector/file-selector.d.ts +5 -0
- package/file-selector/file-selector.d.ts.map +1 -1
- package/file-selector.js +7 -0
- package/flip-card/flip-card/flip-card.d.ts +4 -0
- package/flip-card/flip-card/flip-card.d.ts.map +1 -1
- package/flip-card/flip-card-details.js +6 -6
- package/flip-card/flip-card-summary/flip-card-summary.d.ts +1 -1
- package/flip-card/flip-card-summary/flip-card-summary.d.ts.map +1 -1
- package/flip-card/flip-card-summary.js +8 -8
- package/flip-card/flip-card.js +56 -42
- package/icon/icon.d.ts +1 -1
- package/image/image.d.ts.map +1 -1
- package/image.js +46 -45
- package/map-container.js +7 -7
- package/menu/menu/menu.d.ts +1 -0
- package/menu/menu/menu.d.ts.map +1 -1
- package/menu/menu.js +45 -41
- package/navigation/navigation-section.js +7 -7
- package/navigation/navigation.js +8 -8
- package/package.json +1 -1
- package/paginator/paginator/paginator.d.ts +1 -5
- package/paginator/paginator/paginator.d.ts.map +1 -1
- package/paginator/paginator.js +50 -52
- package/popover/popover/popover.d.ts.map +1 -1
- package/popover/popover.js +42 -46
- package/radio-button/radio-button-panel/radio-button-panel.d.ts +1 -1
- package/radio-button/radio-button-panel/radio-button-panel.d.ts.map +1 -1
- package/radio-button/radio-button-panel.js +7 -7
- package/sbb-tokens-Dx20OtVg.js +18 -0
- package/select/select.d.ts +6 -5
- package/select/select.d.ts.map +1 -1
- package/select.js +55 -53
- package/slider/slider.d.ts +5 -0
- package/slider/slider.d.ts.map +1 -1
- package/slider.js +12 -5
- package/table/table-wrapper/table-wrapper.d.ts +1 -1
- package/table/table-wrapper/table-wrapper.d.ts.map +1 -1
- package/teaser/teaser.d.ts +2 -1
- package/teaser/teaser.d.ts.map +1 -1
- package/teaser-product/common/teaser-product-common.d.ts +1 -1
- package/teaser-product/common/teaser-product-common.d.ts.map +1 -1
- package/teaser-product/common.js +22 -20
- package/teaser-product/teaser-product/teaser-product.d.ts +2 -1
- package/teaser-product/teaser-product/teaser-product.d.ts.map +1 -1
- package/teaser-product/teaser-product.js +26 -13
- package/teaser.js +38 -26
- package/timetable-occupancy-icon/timetable-occupancy-icon.d.ts +2 -1
- package/timetable-occupancy-icon/timetable-occupancy-icon.d.ts.map +1 -1
- package/timetable-occupancy-icon.js +45 -44
- package/toggle-check/toggle-check.d.ts +1 -1
- package/toggle-check/toggle-check.d.ts.map +1 -1
- package/toggle-check.js +1 -1
package/development/calendar.js
CHANGED
|
@@ -11,10 +11,9 @@ import { customElement, property, state } from "lit/decorators.js";
|
|
|
11
11
|
import { classMap } from "lit/directives/class-map.js";
|
|
12
12
|
import { sbbInputModalityDetector, isArrowKeyOrPageKeysPressed } from "./core/a11y.js";
|
|
13
13
|
import { readConfig } from "./core/config.js";
|
|
14
|
-
import {
|
|
14
|
+
import { SbbLanguageController, SbbMediaMatcherController, SbbMediaQueryBreakpointMediumAndAbove } from "./core/controllers.js";
|
|
15
15
|
import { defaultDateAdapter, YEARS_PER_PAGE, DAYS_PER_ROW, MONTHS_PER_ROW, YEARS_PER_ROW } from "./core/datetime.js";
|
|
16
16
|
import { forceType } from "./core/decorators.js";
|
|
17
|
-
import { isBreakpoint } from "./core/dom.js";
|
|
18
17
|
import { EventEmitter } from "./core/eventing.js";
|
|
19
18
|
import { i18nPreviousMonth, i18nNextMonth, i18nYearMonthSelection, i18nPreviousYear, i18nNextYear, i18nCalendarDateSelection, i18nPreviousYearRange, i18nNextYearRange } from "./core/i18n.js";
|
|
20
19
|
import { SbbHydrationMixin } from "./core/mixins.js";
|
|
@@ -391,10 +390,12 @@ let SbbCalendarElement = (() => {
|
|
|
391
390
|
this._monthNames = this._dateAdapter.getMonthNames("long");
|
|
392
391
|
this._resetFocus = false;
|
|
393
392
|
__privateSet(this, __initialized_accessor_storage, __runInitializers(this, __initialized_initializers, false));
|
|
394
|
-
this.
|
|
395
|
-
this._language = new SbbLanguageController(this).withHandler(() => {
|
|
393
|
+
this._language = (__runInitializers(this, __initialized_extraInitializers), new SbbLanguageController(this).withHandler(() => {
|
|
396
394
|
this._monthNames = this._dateAdapter.getMonthNames("long");
|
|
397
395
|
this._createMonthRows();
|
|
396
|
+
}));
|
|
397
|
+
this._mediaMatcher = new SbbMediaMatcherController(this, {
|
|
398
|
+
[SbbMediaQueryBreakpointMediumAndAbove]: () => this._init()
|
|
398
399
|
});
|
|
399
400
|
this._createMonthRows();
|
|
400
401
|
this._setWeekdays();
|
|
@@ -500,17 +501,12 @@ let SbbCalendarElement = (() => {
|
|
|
500
501
|
this._init();
|
|
501
502
|
}
|
|
502
503
|
connectedCallback() {
|
|
503
|
-
var _a2;
|
|
504
504
|
super.connectedCallback();
|
|
505
505
|
this.resetPosition();
|
|
506
506
|
this.focus = () => {
|
|
507
507
|
this._resetFocus = true;
|
|
508
508
|
this._focusCell();
|
|
509
509
|
};
|
|
510
|
-
(_a2 = globalThis.window) == null ? void 0 : _a2.addEventListener("resize", () => this._init(), {
|
|
511
|
-
passive: true,
|
|
512
|
-
signal: this._abort.signal
|
|
513
|
-
});
|
|
514
510
|
}
|
|
515
511
|
willUpdate(changedProperties) {
|
|
516
512
|
super.willUpdate(changedProperties);
|
|
@@ -544,7 +540,7 @@ let SbbCalendarElement = (() => {
|
|
|
544
540
|
if (activeDate) {
|
|
545
541
|
this._assignActiveDate(activeDate);
|
|
546
542
|
}
|
|
547
|
-
this._wide =
|
|
543
|
+
this._wide = (this._mediaMatcher.matches(SbbMediaQueryBreakpointMediumAndAbove) ?? false) && this.wide;
|
|
548
544
|
this._weeks = this._createWeekRows(this._activeDate);
|
|
549
545
|
this._years = this._createYearRows();
|
|
550
546
|
this._nextMonthWeeks = [[]];
|
|
@@ -856,6 +852,7 @@ let SbbCalendarElement = (() => {
|
|
|
856
852
|
lastElementIndexForWideMode: index === indexInView ? this._dateAdapter.getNumDaysInMonth(this._dateAdapter.addCalendarMonths(this._dateAdapter.deserialize(day.value), -1)) : cells.length
|
|
857
853
|
};
|
|
858
854
|
}
|
|
855
|
+
// Month view is not dependent from `wide` value, so some parameters are fixed.
|
|
859
856
|
case "month": {
|
|
860
857
|
return {
|
|
861
858
|
verticalOffset: MONTHS_PER_ROW,
|
|
@@ -1331,4 +1328,4 @@ let SbbCalendarElement = (() => {
|
|
|
1331
1328
|
export {
|
|
1332
1329
|
SbbCalendarElement
|
|
1333
1330
|
};
|
|
1334
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50cy9jYWxlbmRhci9jYWxlbmRhci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICB0eXBlIENTU1Jlc3VsdEdyb3VwLFxuICBodG1sLFxuICBpc1NlcnZlcixcbiAgTGl0RWxlbWVudCxcbiAgbm90aGluZyxcbiAgdHlwZSBQcm9wZXJ0eVZhbHVlcyxcbiAgdHlwZSBUZW1wbGF0ZVJlc3VsdCxcbn0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IGNsYXNzTWFwIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvY2xhc3MtbWFwLmpzJztcblxuaW1wb3J0IHsgaXNBcnJvd0tleU9yUGFnZUtleXNQcmVzc2VkLCBzYmJJbnB1dE1vZGFsaXR5RGV0ZWN0b3IgfSBmcm9tICcuLi9jb3JlL2ExMXkuanMnO1xuaW1wb3J0IHsgcmVhZENvbmZpZyB9IGZyb20gJy4uL2NvcmUvY29uZmlnLmpzJztcbmltcG9ydCB7IFNiYkNvbm5lY3RlZEFib3J0Q29udHJvbGxlciwgU2JiTGFuZ3VhZ2VDb250cm9sbGVyIH0gZnJvbSAnLi4vY29yZS9jb250cm9sbGVycy5qcyc7XG5pbXBvcnQgdHlwZSB7IERhdGVBZGFwdGVyIH0gZnJvbSAnLi4vY29yZS9kYXRldGltZS5qcyc7XG5pbXBvcnQge1xuICBEQVlTX1BFUl9ST1csXG4gIGRlZmF1bHREYXRlQWRhcHRlcixcbiAgTU9OVEhTX1BFUl9ST1csXG4gIFlFQVJTX1BFUl9QQUdFLFxuICBZRUFSU19QRVJfUk9XLFxufSBmcm9tICcuLi9jb3JlL2RhdGV0aW1lLmpzJztcbmltcG9ydCB7IGZvcmNlVHlwZSB9IGZyb20gJy4uL2NvcmUvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBpc0JyZWFrcG9pbnQgfSBmcm9tICcuLi9jb3JlL2RvbS5qcyc7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICcuLi9jb3JlL2V2ZW50aW5nLmpzJztcbmltcG9ydCB7XG4gIGkxOG5DYWxlbmRhckRhdGVTZWxlY3Rpb24sXG4gIGkxOG5OZXh0TW9udGgsXG4gIGkxOG5OZXh0WWVhcixcbiAgaTE4bk5leHRZZWFyUmFuZ2UsXG4gIGkxOG5QcmV2aW91c01vbnRoLFxuICBpMThuUHJldmlvdXNZZWFyLFxuICBpMThuUHJldmlvdXNZZWFyUmFuZ2UsXG4gIGkxOG5ZZWFyTW9udGhTZWxlY3Rpb24sXG59IGZyb20gJy4uL2NvcmUvaTE4bi5qcyc7XG5pbXBvcnQgdHlwZSB7IFNiYkRhdGVMaWtlIH0gZnJvbSAnLi4vY29yZS9pbnRlcmZhY2VzLmpzJztcbmltcG9ydCB7IFNiYkh5ZHJhdGlvbk1peGluIH0gZnJvbSAnLi4vY29yZS9taXhpbnMuanMnO1xuXG5pbXBvcnQgc3R5bGUgZnJvbSAnLi9jYWxlbmRhci5zY3NzP2xpdCZpbmxpbmUnO1xuXG5pbXBvcnQgJy4uL2J1dHRvbi9zZWNvbmRhcnktYnV0dG9uLmpzJztcbmltcG9ydCAnLi4vaWNvbi5qcyc7XG5pbXBvcnQgJy4uL3NjcmVlbi1yZWFkZXItb25seS5qcyc7XG5cbi8qKlxuICogSW4ga2V5Ym9hcmQgbmF2aWdhdGlvbiwgdGhlIGNlbGwncyBpbmRleCBhbmQgdGhlIGVsZW1lbnQncyBpbmRleCBpbiBpdHMgbW9udGggLyB5ZWFyIGJhdGNoIG11c3QgYmUgZGlzdGluZ3Vpc2hlZDtcbiAqIHRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIG5hdmlnYXRpb24gaW4gdGhlIHZlcnRpY2FsIGRpcmVjdGlvbiB1c2luZyBzb21lIGtleXMgaXMgcmVzdHJpY3RlZCB0byBhIHNpbmdsZSBtb250aCBmb3IgZGF5cyxcbiAqIGFuZCB0byBhIHNpbmdsZSByYW5nZSBvZiAyNCB5ZWFycyBmb3IgeWVhcnMuIFdoaWxlIHRoZSBsYXR0ZXIgaXMgZWFzeSB0byB1bmRlcnN0YW5kLCB0aGUgY2VsbCdzIGluZGV4IGlzIHRoZSBpbmRleFxuICogb2YgdGhlIGVsZW1lbnQgaW4gdGhlIGFycmF5IG9mIGFsbCB0aGUgcmVuZGVyZWQgY2VsbHMuIEluIG5vbi13aWRlIG1vZGUsIHRoZXJlJ3Mgbm8gaXNzdWUgYmVjYXVzZSB0aGUgZWxlbWVudCBpbmRleFxuICogaXMgYmFzaWNhbGx5IHRoZSBjZWxsJ3MgaW5kZXggcGx1cyAxIChlbGVtZW50IHdpdGggaW5kZXggMCBkaXNwbGF5cyB0aGUgMXN0IG9mIG1vbnRoLCBlbGVtZW50IHdpdGggaW5kZXggMSBkaXNwbGF5cyB0aGUgMm5kIGFuZCBzbyBvbikuXG4gKiBJbiB3aWRlIG1vZGUsIHRoZSBjZWxsJ3MgaW5kZXggY2FuIGdvIGZyb20gMCB0byA0NyBmb3IgeWVhcnMgKHR3byBiYXRjaGVzIG9mIDI0IHllYXJzKSwgYW5kIGZyb20gMCB0byBhIG1heGltdW0gb2YgNjEgZm9yIGRheXNcbiAqICh0d28gY29uc2VjdXRpdmUgbW9udGhzIG9mIDMxIGRheXMsIGFzIEp1bHktQXVndXN0IG9yIERlY2VtYmVyLUphbnVhcnkpLCBkZXBlbmRpbmcgb24gdGhlIGxlbmd0aHMgb2YgdGhlIHJlbmRlcmVkIG1vbnRocztcbiAqIHRoZSBlbGVtZW50IGluZGV4IGluc3RlYWQgZ29lcyBmcm9tIDAgdG8gYSBtYXggdmFsdWUgb2YgMjQgZm9yIHllYXJzIGFuZCAzMSBmb3IgZGF5cy5cbiAqIE1vcmVvdmVyLCBpbiBkYXkgdmlldywgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHNlY29uZCByZW5kZXJlZCBtb250aCBhbmQgdGhlIGluZGV4IG9mIHRoZSBsYXN0IHJlbmRlcmVkIGRheVxuICogY2FuIGFsc28gdmFyeSBkZXBlbmRpbmcgb24gd2hpY2ggbW9udGhzIGFyZSByZW5kZXJlZDsgZm9yIEp1bHktQXVndXN0IHRoZXkgYXJlIGVxdWFscyB0byAzMSBhbmQgNjEsIHdoaWxlIGZvciBGZWJydWFyeS1NYXJjaCB0aGV5IGFyZSAyOCBhbmQgNTguXG4gKiBTbywgc29tZSBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgYXJlIG5lZWRlZCwgYmVzaWRlIHRoZSBjZWxsJ3MgaW5kZXgsIHRvIGNvcnJlY3RseSBjYWxjdWxhdGUgdGhlIGVsZW1lbnQgdG8gbmF2aWdhdGUgdG8uXG4gKi9cbmludGVyZmFjZSBDYWxlbmRhcktleWJvYXJkTmF2aWdhdGlvblBhcmFtZXRlcnMge1xuICAvKiogVGhlIGVsZW1lbnQgaW5kZXggd2l0aGluIGl0cyBtb250aCAob3IgeWVhciByYW5nZSkuICovXG4gIGVsZW1lbnRJbmRleEZvcldpZGVNb2RlOiBudW1iZXI7XG4gIC8qKiBJbiB3aWRlIG1vZGUsIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgc2Vjb25kIHBhbmVsLCBvciwgYWx0ZXJuYXRpdmVseSwgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgZmlyc3QgcGFuZWwuICovXG4gIG9mZnNldEZvcldpZGVNb2RlOiBudW1iZXI7XG4gIC8qKiBUaGUgaW5kZXggb2YgdGhlIGxhc3QgZWxlbWVudCB3aXRoaW4gdGhlIGVsZW1lbnQncyBtb250aCAob3IgeWVhciByYW5nZSkuICovXG4gIGxhc3RFbGVtZW50SW5kZXhGb3JXaWRlTW9kZTogbnVtYmVyO1xuICAvKiogVGhlIG51bWJlciBvZiBjZWxscyBkaXNwbGF5ZWQgaW4gYSBzaW5nbGUgcm93LCBkZXBlbmRpbmcgb24gdGhlIHJlbmRlcmVkIHZpZXcuICovXG4gIHZlcnRpY2FsT2Zmc2V0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF5IHtcbiAgdmFsdWU6IHN0cmluZztcbiAgZGF5VmFsdWU6IHN0cmluZztcbiAgbW9udGhWYWx1ZTogc3RyaW5nO1xuICB5ZWFyVmFsdWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNb250aCB7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIGxvbmdWYWx1ZTogc3RyaW5nO1xuICBtb250aFZhbHVlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2Vla2RheSB7XG4gIGxvbmc6IHN0cmluZztcbiAgbmFycm93OiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIENhbGVuZGFyVmlldyA9ICdkYXknIHwgJ21vbnRoJyB8ICd5ZWFyJztcblxuLyoqXG4gKiBJdCBkaXNwbGF5cyBhIGNhbGVuZGFyIHdoaWNoIGFsbG93cyB0byBjaG9vc2UgYSBkYXRlLlxuICpcbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8VD59IGRhdGVTZWxlY3RlZCAtIEV2ZW50IGVtaXR0ZWQgb24gZGF0ZSBzZWxlY3Rpb24uXG4gKi9cbmV4cG9ydFxuQGN1c3RvbUVsZW1lbnQoJ3NiYi1jYWxlbmRhcicpXG5jbGFzcyBTYmJDYWxlbmRhckVsZW1lbnQ8VCA9IERhdGU+IGV4dGVuZHMgU2JiSHlkcmF0aW9uTWl4aW4oTGl0RWxlbWVudCkge1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBzdHlsZTtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBldmVudHMgPSB7XG4gICAgZGF0ZVNlbGVjdGVkOiAnZGF0ZVNlbGVjdGVkJyxcbiAgfSBhcyBjb25zdDtcblxuICAvKiogSWYgc2V0IHRvIHRydWUsIHR3byBtb250aHMgYXJlIGRpc3BsYXllZCAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3Igd2lkZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBUaGUgaW5pdGlhbCB2aWV3IG9mIHRoZSBjYWxlbmRhciB3aGljaCBzaG91bGQgYmUgZGlzcGxheWVkIG9uIG9wZW5pbmcuICovXG4gIEBwcm9wZXJ0eSgpIHB1YmxpYyBhY2Nlc3NvciB2aWV3OiBDYWxlbmRhclZpZXcgPSAnZGF5JztcblxuICAvKiogVGhlIG1pbmltdW0gdmFsaWQgZGF0ZS4gVGFrZXMgVCBPYmplY3QsIElTT1N0cmluZywgYW5kIFVuaXggVGltZXN0YW1wIChudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSBKYW4gMSwgMTk3MCkuICovXG4gIEBwcm9wZXJ0eSgpXG4gIHB1YmxpYyBzZXQgbWluKHZhbHVlOiBTYmJEYXRlTGlrZTxUPiB8IG51bGwpIHtcbiAgICB0aGlzLl9taW4gPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRWYWxpZERhdGVPck51bGwodGhpcy5fZGF0ZUFkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpKTtcbiAgfVxuICBwdWJsaWMgZ2V0IG1pbigpOiBUIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX21pbiA/PyBudWxsO1xuICB9XG4gIHByaXZhdGUgX21pbj86IFQgfCBudWxsO1xuXG4gIC8qKiBUaGUgbWF4aW11bSB2YWxpZCBkYXRlLiBUYWtlcyBUIE9iamVjdCwgSVNPU3RyaW5nLCBhbmQgVW5peCBUaW1lc3RhbXAgKG51bWJlciBvZiBzZWNvbmRzIHNpbmNlIEphbiAxLCAxOTcwKS4gKi9cbiAgQHByb3BlcnR5KClcbiAgcHVibGljIHNldCBtYXgodmFsdWU6IFNiYkRhdGVMaWtlPFQ+IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fbWF4ID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0VmFsaWREYXRlT3JOdWxsKHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKHZhbHVlKSk7XG4gIH1cbiAgcHVibGljIGdldCBtYXgoKTogVCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9tYXggPz8gbnVsbDtcbiAgfVxuICBwcml2YXRlIF9tYXg/OiBUIHwgbnVsbDtcblxuICAvKiogQSBjb25maWd1cmVkIGRhdGUgd2hpY2ggYWN0cyBhcyB0aGUgY3VycmVudCBkYXRlIGluc3RlYWQgb2YgdGhlIHJlYWwgY3VycmVudCBkYXRlLiBSZWNvbW1lbmRlZCBmb3IgdGVzdGluZyBwdXJwb3Nlcy4gKi9cbiAgQHByb3BlcnR5KClcbiAgcHVibGljIHNldCBub3codmFsdWU6IFNiYkRhdGVMaWtlPFQ+IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fbm93ID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0VmFsaWREYXRlT3JOdWxsKHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKHZhbHVlKSk7XG4gIH1cbiAgcHVibGljIGdldCBub3coKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuX25vdyA/PyB0aGlzLl9kYXRlQWRhcHRlci50b2RheSgpO1xuICB9XG4gIHByaXZhdGUgX25vdzogVCB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBUaGUgc2VsZWN0ZWQgZGF0ZS4gVGFrZXMgVCBPYmplY3QsIElTT1N0cmluZywgYW5kIFVuaXggVGltZXN0YW1wIChudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSBKYW4gMSwgMTk3MCkuICovXG4gIEBwcm9wZXJ0eSgpXG4gIHB1YmxpYyBzZXQgc2VsZWN0ZWQodmFsdWU6IFNiYkRhdGVMaWtlPFQ+IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fc2VsZWN0ZWREYXRlID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0VmFsaWREYXRlT3JOdWxsKHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKHZhbHVlKSk7XG4gICAgaWYgKFxuICAgICAgISF0aGlzLl9zZWxlY3RlZERhdGUgJiZcbiAgICAgICghdGhpcy5faXNEYXlJblJhbmdlKHRoaXMuX2RhdGVBZGFwdGVyLnRvSXNvODYwMSh0aGlzLl9zZWxlY3RlZERhdGUpKSB8fFxuICAgICAgICB0aGlzLl9kYXRlRmlsdGVyKHRoaXMuX3NlbGVjdGVkRGF0ZSkpXG4gICAgKSB7XG4gICAgICB0aGlzLl9zZWxlY3RlZCA9IHRoaXMuX2RhdGVBZGFwdGVyLnRvSXNvODYwMSh0aGlzLl9zZWxlY3RlZERhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zZWxlY3RlZCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldCBzZWxlY3RlZCgpOiBUIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkRGF0ZSA/PyBudWxsO1xuICB9XG4gIHByaXZhdGUgX3NlbGVjdGVkRGF0ZT86IFQgfCBudWxsO1xuXG4gIC8qKiBBIGZ1bmN0aW9uIHVzZWQgdG8gZmlsdGVyIG91dCBkYXRlcy4gKi9cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnZGF0ZS1maWx0ZXInIH0pIHB1YmxpYyBhY2Nlc3NvciBkYXRlRmlsdGVyOlxuICAgIHwgKChkYXRlOiBUIHwgbnVsbCkgPT4gYm9vbGVhbilcbiAgICB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgX2RhdGVBZGFwdGVyOiBEYXRlQWRhcHRlcjxUPiA9IHJlYWRDb25maWcoKS5kYXRldGltZT8uZGF0ZUFkYXB0ZXIgPz8gZGVmYXVsdERhdGVBZGFwdGVyO1xuXG4gIC8qKiBFdmVudCBlbWl0dGVkIG9uIGRhdGUgc2VsZWN0aW9uLiAqL1xuICBwcml2YXRlIF9kYXRlU2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxUPiA9IG5ldyBFdmVudEVtaXR0ZXIoXG4gICAgdGhpcyxcbiAgICBTYmJDYWxlbmRhckVsZW1lbnQuZXZlbnRzLmRhdGVTZWxlY3RlZCxcbiAgKTtcblxuICAvKiogVGhlIGN1cnJlbnRseSBhY3RpdmUgZGF0ZS4gKi9cbiAgQHN0YXRlKCkgcHJpdmF0ZSBhY2Nlc3NvciBfYWN0aXZlRGF0ZTogVCA9IHRoaXMubm93O1xuXG4gIC8qKiBUaGUgc2VsZWN0ZWQgZGF0ZSBhcyBJU09TdHJpbmcuICovXG4gIEBzdGF0ZSgpIHByaXZhdGUgYWNjZXNzb3IgX3NlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqIFRoZSBjdXJyZW50IHdpZGUgcHJvcGVydHkgY29uc2lkZXJpbmcgcHJvcGVydHkgdmFsdWUgYW5kIGJyZWFrcG9pbnRzLiBGcm9tIHplcm8gdG8gc21hbGwgYHdpZGVgIGhhcyBhbHdheXMgdG8gYmUgZmFsc2UuICovXG4gIEBzdGF0ZSgpXG4gIHByaXZhdGUgc2V0IF93aWRlKHdpZGU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnRvZ2dsZUF0dHJpYnV0ZSgnZGF0YS13aWRlJywgd2lkZSk7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgX3dpZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKCdkYXRhLXdpZGUnKTtcbiAgfVxuXG4gIEBzdGF0ZSgpIHByaXZhdGUgYWNjZXNzb3IgX2NhbGVuZGFyVmlldzogQ2FsZW5kYXJWaWV3ID0gJ2RheSc7XG5cbiAgcHJpdmF0ZSBfbmV4dENhbGVuZGFyVmlldzogQ2FsZW5kYXJWaWV3ID0gJ2RheSc7XG5cbiAgLyoqIEEgbGlzdCBvZiBkYXlzLCBpbiB0d28gZm9ybWF0cyAobG9uZyBhbmQgc2luZ2xlIGNoYXIpLiAqL1xuICBwcml2YXRlIF93ZWVrZGF5cyE6IFdlZWtkYXlbXTtcblxuICAvKiogR3JpZCBvZiBjYWxlbmRhciBjZWxscyByZXByZXNlbnRpbmcgdGhlIGRhdGVzIG9mIHRoZSBtb250aC4gKi9cbiAgcHJpdmF0ZSBfd2Vla3M6IERheVtdW10gPSBbXTtcblxuICAvKiogR3JpZCBvZiBjYWxlbmRhciBjZWxscyByZXByZXNlbnRpbmcgbW9udGhzLiAqL1xuICBwcml2YXRlIF9tb250aHMhOiBNb250aFtdW107XG5cbiAgLyoqIEdyaWQgb2YgY2FsZW5kYXIgY2VsbHMgcmVwcmVzZW50aW5nIHllYXJzLiAqL1xuICBwcml2YXRlIF95ZWFycyE6IG51bWJlcltdW107XG5cbiAgLyoqIEdyaWQgb2YgY2FsZW5kYXIgY2VsbHMgcmVwcmVzZW50aW5nIHllYXJzIGZvciB0aGUgd2lkZSB2aWV3LiAqL1xuICBwcml2YXRlIF9uZXh0TW9udGhZZWFycyE6IG51bWJlcltdW107XG5cbiAgLyoqIEdyaWQgb2YgY2FsZW5kYXIgY2VsbHMgcmVwcmVzZW50aW5nIHRoZSBkYXRlcyBvZiB0aGUgbmV4dCBtb250aC4gKi9cbiAgcHJpdmF0ZSBfbmV4dE1vbnRoV2Vla3MhOiBEYXlbXVtdO1xuXG4gIC8qKiBBbiBhcnJheSBjb250YWluaW5nIGFsbCB0aGUgbW9udGggbmFtZXMgaW4gdGhlIGN1cnJlbnQgbGFuZ3VhZ2UuICovXG4gIHByaXZhdGUgX21vbnRoTmFtZXM6IHN0cmluZ1tdID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TW9udGhOYW1lcygnbG9uZycpO1xuXG4gIC8qKiBBIGxpc3Qgb2YgYnV0dG9ucyBjb3JyZXNwb25kaW5nIHRvIGRheXMsIG1vbnRocyBvciB5ZWFycyBkZXBlbmRpbmcgb24gdGhlIHZpZXcuICovXG4gIHByaXZhdGUgZ2V0IF9jZWxscygpOiBIVE1MQnV0dG9uRWxlbWVudFtdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShcbiAgICAgIHRoaXMuc2hhZG93Um9vdCEucXVlcnlTZWxlY3RvckFsbCgnLnNiYi1jYWxlbmRhcl9fY2VsbCcpID8/IFtdLFxuICAgICkgYXMgSFRNTEJ1dHRvbkVsZW1lbnRbXTtcbiAgfVxuXG4gIC8qKiBUaGUgY2hvc2VuIHllYXIgaW4gdGhlIHllYXIgc2VsZWN0aW9uIHZpZXcuICovXG4gIHByaXZhdGUgX2Nob3NlblllYXI/OiBudW1iZXI7XG5cbiAgLyoqIFRoZSBjaG9zZW4gbW9udGggaW4gdGhlIHllYXIgc2VsZWN0aW9uIHZpZXcuICovXG4gIHByaXZhdGUgX2Nob3Nlbk1vbnRoPzogbnVtYmVyO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBmb2N1cyBzaG91bGQgYmUgcmVzZXQgb24gZm9jdXNDZWxsLiAqL1xuICBwcml2YXRlIF9yZXNldEZvY3VzID0gZmFsc2U7XG5cbiAgQHN0YXRlKClcbiAgcHJpdmF0ZSBhY2Nlc3NvciBfaW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIF9hYm9ydCA9IG5ldyBTYmJDb25uZWN0ZWRBYm9ydENvbnRyb2xsZXIodGhpcyk7XG4gIHByaXZhdGUgX2xhbmd1YWdlID0gbmV3IFNiYkxhbmd1YWdlQ29udHJvbGxlcih0aGlzKS53aXRoSGFuZGxlcigoKSA9PiB7XG4gICAgdGhpcy5fbW9udGhOYW1lcyA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldE1vbnRoTmFtZXMoJ2xvbmcnKTtcbiAgICB0aGlzLl9jcmVhdGVNb250aFJvd3MoKTtcbiAgfSk7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fY3JlYXRlTW9udGhSb3dzKCk7XG4gICAgdGhpcy5fc2V0V2Vla2RheXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2RhdGVGaWx0ZXIoZGF0ZTogVCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRhdGVGaWx0ZXI/LihkYXRlKSA/PyB0cnVlO1xuICB9XG5cbiAgLyoqIFJlc2V0cyB0aGUgYWN0aXZlIG1vbnRoIGFjY29yZGluZyB0byB0aGUgbmV3IHN0YXRlIG9mIHRoZSBjYWxlbmRhci4gKi9cbiAgcHVibGljIHJlc2V0UG9zaXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fcmVzZXRDYWxlbmRhclZpZXcoKTtcbiAgICB0aGlzLl9pbml0KCk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLnJlc2V0UG9zaXRpb24oKTtcbiAgICB0aGlzLmZvY3VzID0gKCkgPT4ge1xuICAgICAgdGhpcy5fcmVzZXRGb2N1cyA9IHRydWU7XG4gICAgICB0aGlzLl9mb2N1c0NlbGwoKTtcbiAgICB9O1xuICAgIGdsb2JhbFRoaXMud2luZG93Py5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCAoKSA9PiB0aGlzLl9pbml0KCksIHtcbiAgICAgIHBhc3NpdmU6IHRydWUsXG4gICAgICBzaWduYWw6IHRoaXMuX2Fib3J0LnNpZ25hbCxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSB3aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLndpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgaWYgKCF0aGlzLl9pbml0aWFsaXplZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ3dpZGUnKSkge1xuICAgICAgdGhpcy5yZXNldFBvc2l0aW9uKCk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygndmlldycpKSB7XG4gICAgICB0aGlzLl9zZXRDaG9zZW5ZZWFyKCk7XG4gICAgICB0aGlzLl9jaG9zZW5Nb250aCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX25leHRDYWxlbmRhclZpZXcgPSB0aGlzLl9jYWxlbmRhclZpZXcgPSB0aGlzLnZpZXc7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgc3VwZXIudXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7XG4gICAgLy8gVGhlIGNhbGVuZGFyIG5lZWRzIHRvIGNhbGN1bGF0ZSB0YWItaW5kZXhlcyBvbiBmaXJzdCByZW5kZXIsXG4gICAgLy8gYW5kIGV2ZXJ5IHRpbWUgYSBkYXRlIGlzIHNlbGVjdGVkIG9yIHRoZSBtb250aCB2aWV3IGNoYW5nZXMuXG4gICAgdGhpcy5fc2V0VGFiSW5kZXgoKTtcbiAgICAvLyBXaGVuIGNoYW5naW5nIHZpZXcgdG8geWVhci9tb250aCwgdGhlIHRhYmluZGV4IGlzIGNoYW5nZWQsIGJ1dCB0aGUgZm9jdXNlZCBlbGVtZW50IGlzIG5vdCxcbiAgICAvLyBzbyBpZiB0aGUgbmF2aWdhdGlvbiBpcyBkb25lIHZpYSBrZXlib2FyZCwgdGhlcmUncyB0aGUgbmVlZFxuICAgIC8vIHRvIGNhbGwgdGhlIGBfZm9jdXNDZWxsKClgIG1ldGhvZCBleHBsaWNpdGx5IHRvIGNvcnJlY3RseSBzZXQgdGhlIGZvY3VzLlxuICAgIGlmIChzYmJJbnB1dE1vZGFsaXR5RGV0ZWN0b3IubW9zdFJlY2VudE1vZGFsaXR5ID09PSAna2V5Ym9hcmQnKSB7XG4gICAgICB0aGlzLl9mb2N1c0NlbGwoKTtcbiAgICB9XG4gIH1cblxuICAvKiogSW5pdGlhbGl6ZXMgdGhlIGNvbXBvbmVudC4gKi9cbiAgcHJpdmF0ZSBfaW5pdChhY3RpdmVEYXRlPzogVCk6IHZvaWQge1xuICAgIC8vRHVlIHRvIGl0cyBjb21wbGV4aXR5LCB0aGUgY2FsZWRhciBpcyBvbmx5IGluaXRpYWxpemVkIG9uIGNsaWVudCBzaWRlXG4gICAgaWYgKGlzU2VydmVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmICh0aGlzLmh5ZHJhdGlvblJlcXVpcmVkKSB7XG4gICAgICB0aGlzLmh5ZHJhdGlvbkNvbXBsZXRlLnRoZW4oKCkgPT4gdGhpcy5faW5pdCgpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoYWN0aXZlRGF0ZSkge1xuICAgICAgdGhpcy5fYXNzaWduQWN0aXZlRGF0ZShhY3RpdmVEYXRlKTtcbiAgICB9XG4gICAgdGhpcy5fd2lkZSA9IGlzQnJlYWtwb2ludCgnbWVkaXVtJykgJiYgdGhpcy53aWRlO1xuICAgIHRoaXMuX3dlZWtzID0gdGhpcy5fY3JlYXRlV2Vla1Jvd3ModGhpcy5fYWN0aXZlRGF0ZSk7XG4gICAgdGhpcy5feWVhcnMgPSB0aGlzLl9jcmVhdGVZZWFyUm93cygpO1xuICAgIHRoaXMuX25leHRNb250aFdlZWtzID0gW1tdXTtcbiAgICB0aGlzLl9uZXh0TW9udGhZZWFycyA9IFtbXV07XG4gICAgaWYgKHRoaXMuX3dpZGUpIHtcbiAgICAgIGNvbnN0IG5leHRNb250aERhdGUgPSB0aGlzLl9kYXRlQWRhcHRlci5hZGRDYWxlbmRhck1vbnRocyh0aGlzLl9hY3RpdmVEYXRlLCAxKTtcbiAgICAgIHRoaXMuX25leHRNb250aFdlZWtzID0gdGhpcy5fY3JlYXRlV2Vla1Jvd3MobmV4dE1vbnRoRGF0ZSk7XG4gICAgICB0aGlzLl9uZXh0TW9udGhZZWFycyA9IHRoaXMuX2NyZWF0ZVllYXJSb3dzKFlFQVJTX1BFUl9QQUdFKTtcbiAgICB9XG4gICAgdGhpcy5faW5pdGlhbGl6ZWQgPSB0cnVlO1xuICB9XG5cbiAgLyoqIEZvY3VzZXMgb24gYSBkYXkgY2VsbCBwcmlvcml0aXppbmcgdGhlIHNlbGVjdGVkIGRheSwgdGhlIGN1cnJlbnQgZGF5LCBhbmQgbGFzdGx5LCB0aGUgZmlyc3Qgc2VsZWN0YWJsZSBkYXkuICovXG4gIHByaXZhdGUgX2ZvY3VzQ2VsbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcmVzZXRGb2N1cykge1xuICAgICAgdGhpcy5fZ2V0Rmlyc3RGb2N1c2FibGUoKT8uZm9jdXMoKTtcbiAgICAgIHRoaXMuX3Jlc2V0Rm9jdXMgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKiogQ3JlYXRlcyB0aGUgYXJyYXkgb2Ygd2Vla2RheXMuICovXG4gIHByaXZhdGUgX3NldFdlZWtkYXlzKCk6IHZvaWQge1xuICAgIGNvbnN0IG5hcnJvd1dlZWtkYXlzOiBzdHJpbmdbXSA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldERheU9mV2Vla05hbWVzKCduYXJyb3cnKTtcbiAgICBjb25zdCBsb25nV2Vla2RheXM6IHN0cmluZ1tdID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0RGF5T2ZXZWVrTmFtZXMoJ2xvbmcnKTtcbiAgICBjb25zdCB3ZWVrZGF5czogV2Vla2RheVtdID0gbG9uZ1dlZWtkYXlzLm1hcCgobG9uZzogc3RyaW5nLCBpOiBudW1iZXIpID0+ICh7XG4gICAgICBsb25nLFxuICAgICAgbmFycm93OiBuYXJyb3dXZWVrZGF5c1tpXSxcbiAgICB9KSk7XG5cbiAgICAvLyBSb3RhdGVzIHRoZSBsYWJlbHMgZm9yIGRheXMgb2YgdGhlIHdlZWsgYmFzZWQgb24gdGhlIGNvbmZpZ3VyZWQgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgIGNvbnN0IGZpcnN0RGF5T2ZXZWVrOiBudW1iZXIgPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRGaXJzdERheU9mV2VlaygpO1xuICAgIHRoaXMuX3dlZWtkYXlzID0gd2Vla2RheXMuc2xpY2UoZmlyc3REYXlPZldlZWspLmNvbmNhdCh3ZWVrZGF5cy5zbGljZSgwLCBmaXJzdERheU9mV2VlaykpO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgdGhlIHJvd3MgZm9yIGVhY2ggd2Vlay4gKi9cbiAgcHJpdmF0ZSBfY3JlYXRlV2Vla1Jvd3ModmFsdWU6IFQpOiBEYXlbXVtdIHtcbiAgICBjb25zdCBkYXlzSW5Nb250aDogbnVtYmVyID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TnVtRGF5c0luTW9udGgodmFsdWUpO1xuICAgIGNvbnN0IGRhdGVOYW1lczogc3RyaW5nW10gPSB0aGlzLl9kYXRlQWRhcHRlci5nZXREYXRlTmFtZXMoKTtcbiAgICBjb25zdCB3ZWVrczogRGF5W11bXSA9IFtbXV07XG4gICAgY29uc3Qgd2Vla09mZnNldCA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldEZpcnN0V2Vla09mZnNldCh2YWx1ZSk7XG4gICAgZm9yIChsZXQgaSA9IDAsIGNlbGwgPSB3ZWVrT2Zmc2V0OyBpIDwgZGF5c0luTW9udGg7IGkrKywgY2VsbCsrKSB7XG4gICAgICBpZiAoY2VsbCA9PT0gREFZU19QRVJfUk9XKSB7XG4gICAgICAgIHdlZWtzLnB1c2goW10pO1xuICAgICAgICBjZWxsID0gMDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLl9kYXRlQWRhcHRlci5jcmVhdGVEYXRlKFxuICAgICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHZhbHVlKSxcbiAgICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TW9udGgodmFsdWUpLFxuICAgICAgICBpICsgMSxcbiAgICAgICkhO1xuICAgICAgd2Vla3Nbd2Vla3MubGVuZ3RoIC0gMV0ucHVzaCh7XG4gICAgICAgIHZhbHVlOiB0aGlzLl9kYXRlQWRhcHRlci50b0lzbzg2MDEoZGF0ZSksXG4gICAgICAgIGRheVZhbHVlOiBkYXRlTmFtZXNbaV0sXG4gICAgICAgIG1vbnRoVmFsdWU6IFN0cmluZyh0aGlzLl9kYXRlQWRhcHRlci5nZXRNb250aChkYXRlKSksXG4gICAgICAgIHllYXJWYWx1ZTogU3RyaW5nKHRoaXMuX2RhdGVBZGFwdGVyLmdldFllYXIoZGF0ZSkpLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB3ZWVrcztcbiAgfVxuXG4gIC8qKiBDcmVhdGVzIHRoZSByb3dzIGZvciB0aGUgbW9udGggc2VsZWN0aW9uIHZpZXcuICovXG4gIHByaXZhdGUgX2NyZWF0ZU1vbnRoUm93cygpOiB2b2lkIHtcbiAgICBjb25zdCBzaG9ydE5hbWVzOiBzdHJpbmdbXSA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldE1vbnRoTmFtZXMoJ3Nob3J0Jyk7XG4gICAgY29uc3QgbW9udGhzOiBNb250aFtdID0gbmV3IEFycmF5KDEyKS5maWxsKG51bGwpLm1hcChcbiAgICAgIChfLCBpOiBudW1iZXIpOiBNb250aCA9PiAoe1xuICAgICAgICB2YWx1ZTogc2hvcnROYW1lc1tpXSxcbiAgICAgICAgbG9uZ1ZhbHVlOiB0aGlzLl9tb250aE5hbWVzW2ldLFxuICAgICAgICBtb250aFZhbHVlOiBpICsgMSxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgY29uc3Qgcm93czogbnVtYmVyID0gMTIgLyBNT05USFNfUEVSX1JPVztcbiAgICBjb25zdCBtb250aEFycmF5OiBNb250aFtdW10gPSBbXTtcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICBtb250aEFycmF5LnB1c2gobW9udGhzLnNsaWNlKE1PTlRIU19QRVJfUk9XICogaSwgTU9OVEhTX1BFUl9ST1cgKiAoaSArIDEpKSk7XG4gICAgfVxuICAgIHRoaXMuX21vbnRocyA9IG1vbnRoQXJyYXk7XG4gIH1cblxuICAvKiogQ3JlYXRlcyB0aGUgcm93cyBmb3IgdGhlIHllYXIgc2VsZWN0aW9uIHZpZXcuICovXG4gIHByaXZhdGUgX2NyZWF0ZVllYXJSb3dzKG9mZnNldDogbnVtYmVyID0gMCk6IG51bWJlcltdW10ge1xuICAgIGNvbnN0IHN0YXJ0VmFsdWVZZWFyVmlldzogbnVtYmVyID0gdGhpcy5fZ2V0U3RhcnRWYWx1ZVllYXJWaWV3KCk7XG4gICAgY29uc3QgYWxsWWVhcnM6IG51bWJlcltdID0gbmV3IEFycmF5KFlFQVJTX1BFUl9QQUdFKVxuICAgICAgLmZpbGwoMClcbiAgICAgIC5tYXAoKF8sIGk6IG51bWJlcikgPT4gc3RhcnRWYWx1ZVllYXJWaWV3ICsgb2Zmc2V0ICsgaSk7XG4gICAgY29uc3Qgcm93czogbnVtYmVyID0gWUVBUlNfUEVSX1BBR0UgLyBZRUFSU19QRVJfUk9XO1xuICAgIGNvbnN0IHllYXJBcnJheTogbnVtYmVyW11bXSA9IFtdO1xuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgIHllYXJBcnJheS5wdXNoKGFsbFllYXJzLnNsaWNlKFlFQVJTX1BFUl9ST1cgKiBpLCBZRUFSU19QRVJfUk9XICogKGkgKyAxKSkpO1xuICAgIH1cbiAgICByZXR1cm4geWVhckFycmF5O1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIGZpcnN0IHllYXIgdGhhdCB3aWxsIGJlIHNob3duIGluIHRoZSB5ZWFyIHNlbGVjdGlvbiBwYW5lbC5cbiAgICogSWYgYG1pbkRhdGVgIGFuZCBgbWF4RGF0ZWAgYXJlIGJvdGggbnVsbCwgdGhlIHN0YXJ0aW5nIHllYXIgaXMgY2FsY3VsYXRlZCBhc1xuICAgKiB0aGUgbXVsdGlwbGUgb2YgWUVBUlNfUEVSX1BBR0UgY2xvc2VzdCB0byBhbmQgbGVzcyB0aGFuIGFjdGl2ZURhdGUsXG4gICAqIGUuZy4sIHdpdGggYFlFQVJTX1BFUl9QQUdFYCA9IDI0IGFuZCBgYWN0aXZlRGF0ZWAgPSAyMDIwLCB0aGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gMjAxNiAoMjQgKiA4MyksXG4gICAqIHdoaWxlIHdpdGggYGFjdGl2ZURhdGVgID0gMjAwMCwgdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIDE5OTIgKDI0ICogODIpLlxuICAgKiBJZiBgbWluRGF0ZWAgaXMgbm90IG51bGwsIGl0IHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgeWVhcjsgaWYgYG1heERhdGVgIGlzIG5vdCBudWxsLFxuICAgKiBpdCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHllYXIgbWludXMgYFlFQVJTX1BFUl9QQUdFYCwgc28gdGhhdCB0aGUgYG1heERhdGVgIGlzIHRoZSBsYXN0IHJlbmRlcmVkIHllYXIuXG4gICAqIElmIGJvdGggYXJlIG5vdCBudWxsLCBgbWF4RGF0ZWAgaGFzIHByaW9yaXR5IG92ZXIgYG1pbkRhdGVgLlxuICAgKi9cbiAgcHJpdmF0ZSBfZ2V0U3RhcnRWYWx1ZVllYXJWaWV3KCk6IG51bWJlciB7XG4gICAgbGV0IHN0YXJ0aW5nWWVhciA9IDA7XG4gICAgaWYgKHRoaXMubWF4KSB7XG4gICAgICBzdGFydGluZ1llYXIgPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHRoaXMubWF4KSAtIFlFQVJTX1BFUl9QQUdFICsgMTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubWluKSB7XG4gICAgICBzdGFydGluZ1llYXIgPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHRoaXMubWluKTtcbiAgICB9XG4gICAgY29uc3QgYWN0aXZlWWVhciA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldFllYXIodGhpcy5fYWN0aXZlRGF0ZSk7XG4gICAgcmV0dXJuIChcbiAgICAgIGFjdGl2ZVllYXIgLVxuICAgICAgKCgoKGFjdGl2ZVllYXIgLSBzdGFydGluZ1llYXIpICUgWUVBUlNfUEVSX1BBR0UpICsgWUVBUlNfUEVSX1BBR0UpICUgWUVBUlNfUEVSX1BBR0UpXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBDaGVja3MgaWYgZGF0ZSBpcyB3aXRoaW4gdGhlIG1pbi1tYXggcmFuZ2UuICovXG4gIHByaXZhdGUgX2lzRGF5SW5SYW5nZShkYXRlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMubWluICYmICF0aGlzLm1heCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGlzQmVmb3JlTWluOiBib29sZWFuID1cbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmlzVmFsaWQodGhpcy5taW4pICYmXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5jb21wYXJlRGF0ZSh0aGlzLm1pbiEsIHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKGRhdGUpISkgPiAwO1xuICAgIGNvbnN0IGlzQWZ0ZXJNYXg6IGJvb2xlYW4gPVxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuaXNWYWxpZCh0aGlzLm1heCkgJiZcbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmNvbXBhcmVEYXRlKHRoaXMubWF4ISwgdGhpcy5fZGF0ZUFkYXB0ZXIuZGVzZXJpYWxpemUoZGF0ZSkhKSA8IDA7XG4gICAgcmV0dXJuICEoaXNCZWZvcmVNaW4gfHwgaXNBZnRlck1heCk7XG4gIH1cblxuICBwcml2YXRlIF9pc01vbnRoSW5SYW5nZShtb250aDogbnVtYmVyLCB5ZWFyOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMubWluICYmICF0aGlzLm1heCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgaXNCZWZvcmVNaW46IGJvb2xlYW4gPVxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuaXNWYWxpZCh0aGlzLm1pbikgJiZcbiAgICAgICh5ZWFyIDwgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcih0aGlzLm1pbiEpIHx8XG4gICAgICAgICh5ZWFyID09PSB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHRoaXMubWluISkgJiZcbiAgICAgICAgICBtb250aCA8IHRoaXMuX2RhdGVBZGFwdGVyLmdldE1vbnRoKHRoaXMubWluISkpKTtcblxuICAgIGNvbnN0IGlzQWZ0ZXJNYXg6IGJvb2xlYW4gPVxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuaXNWYWxpZCh0aGlzLm1heCkgJiZcbiAgICAgICh5ZWFyID4gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcih0aGlzLm1heCEpIHx8XG4gICAgICAgICh5ZWFyID09PSB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHRoaXMubWF4ISkgJiZcbiAgICAgICAgICBtb250aCA+IHRoaXMuX2RhdGVBZGFwdGVyLmdldE1vbnRoKHRoaXMubWF4ISkpKTtcblxuICAgIHJldHVybiAhKGlzQmVmb3JlTWluIHx8IGlzQWZ0ZXJNYXgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXNZZWFySW5SYW5nZSh5ZWFyOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMubWluICYmICF0aGlzLm1heCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGlzQmVmb3JlTWluOiBib29sZWFuID1cbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmlzVmFsaWQodGhpcy5taW4pICYmIHRoaXMuX2RhdGVBZGFwdGVyLmdldFllYXIodGhpcy5taW4hKSA+IHllYXI7XG4gICAgY29uc3QgaXNBZnRlck1heDogYm9vbGVhbiA9XG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5pc1ZhbGlkKHRoaXMubWF4KSAmJiB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHRoaXMubWF4ISkgPCB5ZWFyO1xuICAgIHJldHVybiAhKGlzQmVmb3JlTWluIHx8IGlzQWZ0ZXJNYXgpO1xuICB9XG5cbiAgLy8gSW1wbGVtZW50YXRpb24gYWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2NvbXBvbmVudHMvYmxvYi9tYWluL3NyYy9tYXRlcmlhbC9kYXRlcGlja2VyL3llYXItdmlldy50cyNMMzY2XG4gIHByaXZhdGUgX2lzTW9udGhGaWx0ZXJlZE91dChtb250aDogbnVtYmVyLCB5ZWFyOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuZGF0ZUZpbHRlcikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgZmlyc3RPZk1vbnRoID0gdGhpcy5fZGF0ZUFkYXB0ZXIuY3JlYXRlRGF0ZSh5ZWFyLCBtb250aCwgMSkhO1xuICAgIGZvciAoXG4gICAgICBsZXQgZGF0ZTogVCA9IGZpcnN0T2ZNb250aDtcbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmdldE1vbnRoKGRhdGUpID09IG1vbnRoO1xuICAgICAgZGF0ZSA9IHRoaXMuX2RhdGVBZGFwdGVyLmFkZENhbGVuZGFyRGF5cyhkYXRlLCAxKVxuICAgICkge1xuICAgICAgaWYgKHRoaXMuZGF0ZUZpbHRlcihkYXRlKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBJbXBsZW1lbnRhdGlvbiBhZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY29tcG9uZW50cy9ibG9iL21haW4vc3JjL21hdGVyaWFsL2RhdGVwaWNrZXIvbXVsdGkteWVhci12aWV3LnRzI0wzNTFcbiAgcHJpdmF0ZSBfaXNZZWFyRmlsdGVyZWRPdXQoeWVhcjogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmRhdGVGaWx0ZXIpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGZpcnN0T2ZZZWFyID0gdGhpcy5fZGF0ZUFkYXB0ZXIuY3JlYXRlRGF0ZSh5ZWFyLCAxLCAxKSE7XG4gICAgZm9yIChcbiAgICAgIGxldCBkYXRlOiBUID0gZmlyc3RPZlllYXI7XG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKGRhdGUpID09IHllYXI7XG4gICAgICBkYXRlID0gdGhpcy5fZGF0ZUFkYXB0ZXIuYWRkQ2FsZW5kYXJEYXlzKGRhdGUsIDEpXG4gICAgKSB7XG4gICAgICBpZiAodGhpcy5kYXRlRmlsdGVyKGRhdGUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKiBFbWl0cyB0aGUgc2VsZWN0ZWQgZGF0ZSBhbmQgc2V0cyBpdCBpbnRlcm5hbGx5LiAqL1xuICBwcml2YXRlIF9zZWxlY3REYXRlKGRheTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fY2hvc2VuTW9udGggPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fc2V0Q2hvc2VuWWVhcigpO1xuICAgIGlmICh0aGlzLl9zZWxlY3RlZCAhPT0gZGF5KSB7XG4gICAgICB0aGlzLl9zZWxlY3RlZCA9IGRheTtcbiAgICAgIHRoaXMuX2RhdGVTZWxlY3RlZC5lbWl0KHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKGRheSkhKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zZXRDaG9zZW5ZZWFyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnZpZXcgPT09ICdtb250aCcpIHtcbiAgICAgIHRoaXMuX2Nob3NlblllYXIgPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKFxuICAgICAgICB0aGlzLl9kYXRlQWRhcHRlci5kZXNlcmlhbGl6ZSh0aGlzLl9zZWxlY3RlZCkgPz8gdGhpcy5zZWxlY3RlZCA/PyB0aGlzLm5vdyxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2Nob3NlblllYXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfYXNzaWduQWN0aXZlRGF0ZShkYXRlOiBUKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubWluICYmIHRoaXMuX2RhdGVBZGFwdGVyLmNvbXBhcmVEYXRlKHRoaXMubWluLCBkYXRlKSA+IDApIHtcbiAgICAgIHRoaXMuX2FjdGl2ZURhdGUgPSB0aGlzLm1pbjtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMubWF4ICYmIHRoaXMuX2RhdGVBZGFwdGVyLmNvbXBhcmVEYXRlKHRoaXMubWF4LCBkYXRlKSA8IDApIHtcbiAgICAgIHRoaXMuX2FjdGl2ZURhdGUgPSB0aGlzLm1heDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fYWN0aXZlRGF0ZSA9IGRhdGU7XG4gIH1cblxuICAvKiogR29lcyB0byB0aGUgbW9udGggaWRlbnRpZmllZCBieSB0aGUgc2hpZnQuICovXG4gIHByaXZhdGUgX2dvVG9EaWZmZXJlbnRNb250aChtb250aHM6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX2luaXQodGhpcy5fZGF0ZUFkYXB0ZXIuYWRkQ2FsZW5kYXJNb250aHModGhpcy5fYWN0aXZlRGF0ZSwgbW9udGhzKSk7XG4gIH1cblxuICBwcml2YXRlIF9nb1RvRGlmZmVyZW50WWVhcih5ZWFyczogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fY2hvc2VuWWVhciEgKz0geWVhcnM7XG4gICAgLy8gQ2FuJ3QgdXNlIGBfYXNzaWduQWN0aXZlRGF0ZSguLi4pYCBoZXJlLCBiZWNhdXNlIGl0IHdpbGwgc2V0IGl0IHRvIG1pbi9tYXggdmFsdWUgaWYgYXJndW1lbnQgaXMgb3V0IG9mIHJhbmdlXG4gICAgdGhpcy5fYWN0aXZlRGF0ZSA9IHRoaXMuX2RhdGVBZGFwdGVyLmNyZWF0ZURhdGUoXG4gICAgICB0aGlzLl9jaG9zZW5ZZWFyISxcbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmdldE1vbnRoKHRoaXMuX2FjdGl2ZURhdGUpLFxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0RGF0ZSh0aGlzLl9hY3RpdmVEYXRlKSxcbiAgICApO1xuICAgIHRoaXMuX2luaXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2dvVG9EaWZmZXJlbnRZZWFyUmFuZ2UoeWVhcnM6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX2luaXQodGhpcy5fZGF0ZUFkYXB0ZXIuYWRkQ2FsZW5kYXJZZWFycyh0aGlzLl9hY3RpdmVEYXRlLCB5ZWFycykpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcHJldkRpc2FibGVkKHByZXZEYXRlOiBUKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLm1pbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fZGF0ZUFkYXB0ZXIuY29tcGFyZURhdGUocHJldkRhdGUsIHRoaXMubWluKSA8IDA7XG4gIH1cblxuICBwcml2YXRlIF9uZXh0RGlzYWJsZWQobmV4dERhdGU6IFQpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMubWF4KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9kYXRlQWRhcHRlci5jb21wYXJlRGF0ZShuZXh0RGF0ZSwgdGhpcy5tYXgpID4gMDtcbiAgfVxuXG4gIC8qKiBDaGVja3MgaWYgdGhlIFwicHJldmlvdXMgbW9udGhcIiBidXR0b24gc2hvdWxkIGJlIGRpc2FibGVkLiAqL1xuICBwcml2YXRlIF9wcmV2aW91c01vbnRoRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcHJldk1vbnRoID0gdGhpcy5fZGF0ZUFkYXB0ZXIuYWRkQ2FsZW5kYXJEYXlzKFxuICAgICAgdGhpcy5fYWN0aXZlRGF0ZSxcbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmdldERhdGUodGhpcy5fYWN0aXZlRGF0ZSkgKiAtMSxcbiAgICApO1xuICAgIHJldHVybiB0aGlzLl9wcmV2RGlzYWJsZWQocHJldk1vbnRoKTtcbiAgfVxuXG4gIC8qKiBDaGVja3MgaWYgdGhlIFwibmV4dCBtb250aFwiIGJ1dHRvbiBzaG91bGQgYmUgZGlzYWJsZWQuICovXG4gIHByaXZhdGUgX25leHRNb250aERpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIGxldCBuZXh0TW9udGggPSB0aGlzLl9kYXRlQWRhcHRlci5hZGRDYWxlbmRhck1vbnRocyh0aGlzLl9hY3RpdmVEYXRlLCB0aGlzLl93aWRlID8gMiA6IDEpO1xuICAgIG5leHRNb250aCA9IHRoaXMuX2RhdGVBZGFwdGVyLmNyZWF0ZURhdGUoXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKG5leHRNb250aCksXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRNb250aChuZXh0TW9udGgpLFxuICAgICAgMSxcbiAgICApO1xuICAgIHJldHVybiB0aGlzLl9uZXh0RGlzYWJsZWQobmV4dE1vbnRoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3ByZXZpb3VzWWVhckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHByZXZZZWFyID0gdGhpcy5fZGF0ZUFkYXB0ZXIuY3JlYXRlRGF0ZShcbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmdldFllYXIodGhpcy5fYWN0aXZlRGF0ZSkgLSAxLFxuICAgICAgMTIsXG4gICAgICAzMSxcbiAgICApO1xuICAgIHJldHVybiB0aGlzLl9wcmV2RGlzYWJsZWQocHJldlllYXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBfbmV4dFllYXJEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBuZXh0WWVhciA9IHRoaXMuX2RhdGVBZGFwdGVyLmNyZWF0ZURhdGUoXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHRoaXMuX2FjdGl2ZURhdGUpICsgKHRoaXMuX3dpZGUgPyAyIDogMSksXG4gICAgICAxLFxuICAgICAgMSxcbiAgICApO1xuICAgIHJldHVybiB0aGlzLl9uZXh0RGlzYWJsZWQobmV4dFllYXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcHJldmlvdXNZZWFyUmFuZ2VEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBwcmV2WWVhciA9IHRoaXMuX2RhdGVBZGFwdGVyLmNyZWF0ZURhdGUodGhpcy5feWVhcnNbMF1bMF0gLSAxLCAxMiwgMzEpO1xuICAgIHJldHVybiB0aGlzLl9wcmV2RGlzYWJsZWQocHJldlllYXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBfbmV4dFllYXJSYW5nZURpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHllYXJzID0gdGhpcy5fd2lkZSA/IHRoaXMuX25leHRNb250aFllYXJzIDogdGhpcy5feWVhcnM7XG4gICAgY29uc3QgbGFzdFllYXJSYW5nZSA9IHllYXJzW3llYXJzLmxlbmd0aCAtIDFdO1xuICAgIGNvbnN0IGxhc3RZZWFyID0gbGFzdFllYXJSYW5nZVtsYXN0WWVhclJhbmdlLmxlbmd0aCAtIDFdO1xuICAgIGNvbnN0IG5leHRZZWFyID0gdGhpcy5fZGF0ZUFkYXB0ZXIuY3JlYXRlRGF0ZShsYXN0WWVhciArIDEsIDEsIDEpO1xuICAgIHJldHVybiB0aGlzLl9uZXh0RGlzYWJsZWQobmV4dFllYXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlVGFibGVCbHVyKGV2ZW50VGFyZ2V0OiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIGlmIChldmVudFRhcmdldD8ubG9jYWxOYW1lICE9PSAnYnV0dG9uJykge1xuICAgICAgdGhpcy5fc2V0VGFiSW5kZXgoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zZXRUYWJJbmRleCgpOiB2b2lkIHtcbiAgICBBcnJheS5mcm9tKFxuICAgICAgdGhpcy5zaGFkb3dSb290IS5xdWVyeVNlbGVjdG9yQWxsKCcuc2JiLWNhbGVuZGFyX19jZWxsW3RhYmluZGV4PVwiMFwiXScpID8/IFtdLFxuICAgICkuZm9yRWFjaCgoZGF5KSA9PiAoKGRheSBhcyBIVE1MRWxlbWVudCkudGFiSW5kZXggPSAtMSkpO1xuICAgIGNvbnN0IGZpcnN0Rm9jdXNhYmxlID0gdGhpcy5fZ2V0Rmlyc3RGb2N1c2FibGUoKTtcbiAgICBpZiAoZmlyc3RGb2N1c2FibGUpIHtcbiAgICAgIGZpcnN0Rm9jdXNhYmxlLnRhYkluZGV4ID0gMDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9nZXRGaXJzdEZvY3VzYWJsZSgpOiBIVE1MQnV0dG9uRWxlbWVudCB7XG4gICAgY29uc3QgYWN0aXZlID0gdGhpcy5fc2VsZWN0ZWQgPyB0aGlzLl9kYXRlQWRhcHRlci5kZXNlcmlhbGl6ZSh0aGlzLl9zZWxlY3RlZCkhIDogdGhpcy5ub3c7XG4gICAgbGV0IGZpcnN0Rm9jdXNhYmxlID1cbiAgICAgIHRoaXMuc2hhZG93Um9vdCEucXVlcnlTZWxlY3RvcignLnNiYi1jYWxlbmRhcl9fc2VsZWN0ZWQnKSA/P1xuICAgICAgdGhpcy5zaGFkb3dSb290IS5xdWVyeVNlbGVjdG9yKFxuICAgICAgICBgW2RhdGEtZGF5PVwiJHt0aGlzLl9kYXRlQWRhcHRlci5nZXREYXRlKGFjdGl2ZSl9ICR7dGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TW9udGgoXG4gICAgICAgICAgYWN0aXZlLFxuICAgICAgICApfSAke3RoaXMuX2RhdGVBZGFwdGVyLmdldFllYXIoYWN0aXZlKX1cIl1gLFxuICAgICAgKSA/P1xuICAgICAgdGhpcy5zaGFkb3dSb290IS5xdWVyeVNlbGVjdG9yKGBbZGF0YS1tb250aD1cIiR7dGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TW9udGgoYWN0aXZlKX1cIl1gKSA/P1xuICAgICAgdGhpcy5zaGFkb3dSb290IS5xdWVyeVNlbGVjdG9yKGBbZGF0YS15ZWFyPVwiJHt0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKGFjdGl2ZSl9XCJdYCk7XG4gICAgaWYgKCFmaXJzdEZvY3VzYWJsZSB8fCAoZmlyc3RGb2N1c2FibGUgYXMgSFRNTEJ1dHRvbkVsZW1lbnQpPy5kaXNhYmxlZCkge1xuICAgICAgZmlyc3RGb2N1c2FibGUgPSB0aGlzLnNoYWRvd1Jvb3QhLnF1ZXJ5U2VsZWN0b3IoJy5zYmItY2FsZW5kYXJfX2NlbGw6bm90KFtkaXNhYmxlZF0pJyk7XG4gICAgfVxuICAgIHJldHVybiAoZmlyc3RGb2N1c2FibGUgYXMgSFRNTEJ1dHRvbkVsZW1lbnQpIHx8IG51bGw7XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVLZXlib2FyZEV2ZW50KGV2ZW50OiBLZXlib2FyZEV2ZW50LCBkYXk/OiBEYXkpOiB2b2lkIHtcbiAgICBpZiAoaXNBcnJvd0tleU9yUGFnZUtleXNQcmVzc2VkKGV2ZW50KSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgLy8gR2V0cyB0aGUgY3VycmVudGx5IHJlbmRlcmVkIHRhYmxlJ3MgY2VsbDtcbiAgICAvLyB0aGV5IGNvdWxkIGJlIGRheXMsIG1vbnRocyBvciB5ZWFycyBiYXNlZCBvbiB0aGUgY3VycmVudCBzZWxlY3Rpb24gdmlldy5cbiAgICAvLyBJZiBgd2lkZWAgaXMgdHJ1ZSwgeWVhcnMgYXJlIGRvdWJsZWQgaW4gbnVtYmVyIGFuZCBkYXlzIGFyZSAocm91Z2hseSkgZG91YmxlZCB0b28sIGFmZmVjdGluZyB0aGUgYGluZGV4YCBjYWxjdWxhdGlvbi5cbiAgICBjb25zdCBjZWxsczogSFRNTEJ1dHRvbkVsZW1lbnRbXSA9IHRoaXMuX2NlbGxzO1xuICAgIGNvbnN0IGluZGV4OiBudW1iZXIgPSBjZWxscy5maW5kSW5kZXgoKGU6IEhUTUxCdXR0b25FbGVtZW50KSA9PiBlID09PSBldmVudC50YXJnZXQpO1xuICAgIGNvbnN0IG5leHRFbDogSFRNTEJ1dHRvbkVsZW1lbnQgPSB0aGlzLl9uYXZpZ2F0ZUJ5S2V5Ym9hcmQoZXZlbnQsIGluZGV4LCBjZWxscywgZGF5KTtcbiAgICBjb25zdCBhY3RpdmVFbDogSFRNTEJ1dHRvbkVsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3QhLmFjdGl2ZUVsZW1lbnQgYXMgSFRNTEJ1dHRvbkVsZW1lbnQ7XG4gICAgaWYgKG5leHRFbCAhPT0gYWN0aXZlRWwpIHtcbiAgICAgIChuZXh0RWwgYXMgSFRNTEJ1dHRvbkVsZW1lbnQpLnRhYkluZGV4ID0gMDtcbiAgICAgIG5leHRFbD8uZm9jdXMoKTtcbiAgICAgIChhY3RpdmVFbCBhcyBIVE1MQnV0dG9uRWxlbWVudCkudGFiSW5kZXggPSAtMTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgaW5kZXggb2YgdGhlIGVsZW1lbnQgdG8gbW92ZSB0bywgYmFzZWQgb24gYSBsaXN0IG9mIGVsZW1lbnRzICh3aGljaCBjYW4gYmUgcG90ZW50aWFsbHkgZGlzYWJsZWQpLFxuICAgKiB0aGUga2V5Ym9hcmQgaW5wdXQgYW5kIHRoZSBwb3NpdGlvbiBvZiB0aGUgY3VycmVudCBlbGVtZW50IGluIHRoZSBsaXN0LlxuICAgKiBJbiB0aGUgZGF5IHZpZXcsIHRoZSBgZGF5PzogRGF5YCBwYXJhbWV0ZXIgaXMgbWFuZGF0b3J5IGZvciBjYWxjdWxhdGlvbixcbiAgICogd2hpbGUgaW4gbW9udGggYW5kIHllYXIgdmlldyBpdCdzIG5vdCBkdWUgdG8gdGhlIGZpeGVkIGFtb3VudCBvZiByZW5kZXJlZCBjZWxscy5cbiAgICovXG4gIHByaXZhdGUgX25hdmlnYXRlQnlLZXlib2FyZChcbiAgICBldnQ6IEtleWJvYXJkRXZlbnQsXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBjZWxsczogSFRNTEJ1dHRvbkVsZW1lbnRbXSxcbiAgICBkYXk/OiBEYXksXG4gICk6IEhUTUxCdXR0b25FbGVtZW50IHtcbiAgICBjb25zdCB7XG4gICAgICBlbGVtZW50SW5kZXhGb3JXaWRlTW9kZSxcbiAgICAgIG9mZnNldEZvcldpZGVNb2RlLFxuICAgICAgbGFzdEVsZW1lbnRJbmRleEZvcldpZGVNb2RlLFxuICAgICAgdmVydGljYWxPZmZzZXQsXG4gICAgfTogQ2FsZW5kYXJLZXlib2FyZE5hdmlnYXRpb25QYXJhbWV0ZXJzID0gdGhpcy5fY2FsY3VsYXRlUGFyYW1ldGVyc0ZvcktleWJvYXJkTmF2aWdhdGlvbihcbiAgICAgIGNlbGxzLFxuICAgICAgaW5kZXgsXG4gICAgICBkYXksXG4gICAgKTtcblxuICAgIHN3aXRjaCAoZXZ0LmtleSkge1xuICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgIHJldHVybiB0aGlzLl9maW5kTmV4dChjZWxscywgaW5kZXgsIC12ZXJ0aWNhbE9mZnNldCk7XG4gICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgICByZXR1cm4gdGhpcy5fZmluZE5leHQoY2VsbHMsIGluZGV4LCB2ZXJ0aWNhbE9mZnNldCk7XG4gICAgICBjYXNlICdBcnJvd0xlZnQnOlxuICAgICAgICByZXR1cm4gdGhpcy5fZmluZE5leHQoY2VsbHMsIGluZGV4LCAtMSk7XG4gICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmROZXh0KGNlbGxzLCBpbmRleCwgMSk7XG4gICAgICBjYXNlICdIb21lJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmRGaXJzdChjZWxscywgb2Zmc2V0Rm9yV2lkZU1vZGUpO1xuICAgICAgY2FzZSAnUGFnZVVwJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmRGaXJzdE9uQ29sdW1uKFxuICAgICAgICAgIGNlbGxzLFxuICAgICAgICAgIGVsZW1lbnRJbmRleEZvcldpZGVNb2RlLFxuICAgICAgICAgIG9mZnNldEZvcldpZGVNb2RlLFxuICAgICAgICAgIHZlcnRpY2FsT2Zmc2V0LFxuICAgICAgICApO1xuICAgICAgY2FzZSAnUGFnZURvd24nOlxuICAgICAgICByZXR1cm4gdGhpcy5fZmluZExhc3RPbkNvbHVtbihjZWxscywgaW5kZXgsIGxhc3RFbGVtZW50SW5kZXhGb3JXaWRlTW9kZSwgdmVydGljYWxPZmZzZXQpO1xuICAgICAgY2FzZSAnRW5kJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmRMYXN0KGNlbGxzLCBsYXN0RWxlbWVudEluZGV4Rm9yV2lkZU1vZGUgLSAxKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBjZWxsc1tpbmRleF07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIHBhcmFtZXRlciBuZWVkZWQgaW4ga2V5Ym9hcmQgbmF2aWdhdGlvbi5cbiAgICogU2luY2UgdGhyZWUgdmlld3MgYXJlIG5vdyBhdmFpbGFibGUsIHRoZSBmdW5jdGlvbiBjcmVhdGVzIGFuZCByZXR1cm5zIHRoZSBjb3JyZWN0IHBhcmFtZXRlcnMgZm9yIGVhY2ggb2YgdGhlbVxuICAgKiBieSBjb25zaWRlcmluZyB0aGUgbnVtYmVyIG9mIGNlbGxzIHBlciBlYWNoIHJvdyBhbmQgdGhlIGNvcnJlY3Rpb24gZm9yIHRoZSB3aWRlIG1vZGUuXG4gICAqIEBwYXJhbSBjZWxscyBUaGUgYXJyYXkgb2YgcmVuZGVyZWQgdGFibGUgY2VsbHM7IHRoZXkgYXJlIGJ1dHRvbnMgdGhhdCBjYW4gcmVwcmVzZW50IGRheXMsIG1vbnRocyBvciB5ZWFycy5cbiAgICogQHBhcmFtIGluZGV4IFRoZSBzdGFydGluZyBlbGVtZW50J3MgaW5kZXggaW4gdGhlIGNlbGwgYXJyYXkuXG4gICAqIEBwYXJhbSBkYXkgKG9wdGlvbmFsKSBPbmx5IGluIHRoZSBkYXkgdmlldywgdGhlIGRheSByZXByZXNlbnRlZCBieSB0aGUgc3RhcnRpbmcgY2VsbC5cbiAgICovXG4gIHByaXZhdGUgX2NhbGN1bGF0ZVBhcmFtZXRlcnNGb3JLZXlib2FyZE5hdmlnYXRpb24oXG4gICAgY2VsbHM6IEhUTUxCdXR0b25FbGVtZW50W10sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBkYXk/OiBEYXksXG4gICk6IENhbGVuZGFyS2V5Ym9hcmROYXZpZ2F0aW9uUGFyYW1ldGVycyB7XG4gICAgc3dpdGNoICh0aGlzLl9jYWxlbmRhclZpZXcpIHtcbiAgICAgIGNhc2UgJ2RheSc6IHtcbiAgICAgICAgY29uc3QgaW5kZXhJblZpZXcgPSArZGF5IS5kYXlWYWx1ZSAtIDE7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdmVydGljYWxPZmZzZXQ6IERBWVNfUEVSX1JPVyxcbiAgICAgICAgICBlbGVtZW50SW5kZXhGb3JXaWRlTW9kZTogaW5kZXhJblZpZXcsXG4gICAgICAgICAgb2Zmc2V0Rm9yV2lkZU1vZGU6IGluZGV4IC0gaW5kZXhJblZpZXcsXG4gICAgICAgICAgbGFzdEVsZW1lbnRJbmRleEZvcldpZGVNb2RlOlxuICAgICAgICAgICAgaW5kZXggPT09IGluZGV4SW5WaWV3XG4gICAgICAgICAgICAgID8gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TnVtRGF5c0luTW9udGgoXG4gICAgICAgICAgICAgICAgICB0aGlzLl9kYXRlQWRhcHRlci5hZGRDYWxlbmRhck1vbnRocyhcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZGVzZXJpYWxpemUoZGF5IS52YWx1ZSkhLFxuICAgICAgICAgICAgICAgICAgICAtMSxcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IGNlbGxzLmxlbmd0aCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIC8vIE1vbnRoIHZpZXcgaXMgbm90IGRlcGVuZGVudCBmcm9tIGB3aWRlYCB2YWx1ZSwgc28gc29tZSBwYXJhbWV0ZXJzIGFyZSBmaXhlZC5cbiAgICAgIGNhc2UgJ21vbnRoJzoge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHZlcnRpY2FsT2Zmc2V0OiBNT05USFNfUEVSX1JPVyxcbiAgICAgICAgICBlbGVtZW50SW5kZXhGb3JXaWRlTW9kZTogaW5kZXgsXG4gICAgICAgICAgb2Zmc2V0Rm9yV2lkZU1vZGU6IDAsXG4gICAgICAgICAgbGFzdEVsZW1lbnRJbmRleEZvcldpZGVNb2RlOiAxMixcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3llYXInOiB7XG4gICAgICAgIGNvbnN0IG9mZnNldDogbnVtYmVyID0gTWF0aC50cnVuYyhpbmRleCAvIFlFQVJTX1BFUl9QQUdFKSAqIFlFQVJTX1BFUl9QQUdFO1xuICAgICAgICBjb25zdCBpbmRleEluVmlldzogbnVtYmVyID0gb2Zmc2V0ID09PSAwID8gaW5kZXggOiBpbmRleCAtIFlFQVJTX1BFUl9QQUdFO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHZlcnRpY2FsT2Zmc2V0OiBZRUFSU19QRVJfUk9XLFxuICAgICAgICAgIGVsZW1lbnRJbmRleEZvcldpZGVNb2RlOiBpbmRleEluVmlldyxcbiAgICAgICAgICBvZmZzZXRGb3JXaWRlTW9kZTogaW5kZXggLSBpbmRleEluVmlldyxcbiAgICAgICAgICBsYXN0RWxlbWVudEluZGV4Rm9yV2lkZU1vZGU6IG9mZnNldCA9PT0gMCA/IFlFQVJTX1BFUl9QQUdFIDogWUVBUlNfUEVSX1BBR0UgKiAyLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBuZXh0IGVsZW1lbnQgb2YgdGhlIHByb3ZpZGVkIGFycmF5IHN0YXJ0aW5nIGZyb20gYGluZGV4YCBieSBhZGRpbmcgYGRlbHRhYC5cbiAgICogSWYgdGhlIGZvdW5kIGVsZW1lbnQgaXMgZGlzYWJsZWQsIGl0IGNvbnRpbnVlcyBhZGRpbmcgYGRlbHRhYCB1bnRpbCBpdCBmaW5kcyBhbiBlbmFibGVkIG9uZSBpbiB0aGUgYXJyYXkgYm91bmRzLlxuICAgKi9cbiAgcHJpdmF0ZSBfZmluZE5leHQoZGF5czogSFRNTEJ1dHRvbkVsZW1lbnRbXSwgaW5kZXg6IG51bWJlciwgZGVsdGE6IG51bWJlcik6IEhUTUxCdXR0b25FbGVtZW50IHtcbiAgICBsZXQgbmV4dEluZGV4ID0gaW5kZXggKyBkZWx0YTtcbiAgICB3aGlsZSAobmV4dEluZGV4IDwgZGF5cy5sZW5ndGggJiYgZGF5c1tuZXh0SW5kZXhdPy5kaXNhYmxlZCkge1xuICAgICAgbmV4dEluZGV4ICs9IGRlbHRhO1xuICAgIH1cbiAgICByZXR1cm4gZGF5c1tuZXh0SW5kZXhdID8/IGRheXNbaW5kZXhdO1xuICB9XG5cbiAgLyoqIEZpbmQgdGhlIGZpcnN0IGVuYWJsZWQgZWxlbWVudCBpbiB0aGUgcHJvdmlkZWQgYXJyYXkuICovXG4gIHByaXZhdGUgX2ZpbmRGaXJzdChkYXlzOiBIVE1MQnV0dG9uRWxlbWVudFtdLCBmaXJzdE9mQ3VycmVudE1vbnRoOiBudW1iZXIpOiBIVE1MQnV0dG9uRWxlbWVudCB7XG4gICAgcmV0dXJuICFkYXlzW2ZpcnN0T2ZDdXJyZW50TW9udGhdLmRpc2FibGVkXG4gICAgICA/IGRheXNbZmlyc3RPZkN1cnJlbnRNb250aF1cbiAgICAgIDogdGhpcy5fZmluZE5leHQoZGF5cywgZmlyc3RPZkN1cnJlbnRNb250aCwgMSk7XG4gIH1cblxuICAvKiogRmluZCB0aGUgbGFzdCBlbmFibGVkIGVsZW1lbnQgaW4gdGhlIHByb3ZpZGVkIGFycmF5LiAqL1xuICBwcml2YXRlIF9maW5kTGFzdChkYXlzOiBIVE1MQnV0dG9uRWxlbWVudFtdLCBsYXN0T2ZDdXJyZW50TW9udGg6IG51bWJlcik6IEhUTUxCdXR0b25FbGVtZW50IHtcbiAgICByZXR1cm4gIWRheXNbbGFzdE9mQ3VycmVudE1vbnRoXS5kaXNhYmxlZFxuICAgICAgPyBkYXlzW2xhc3RPZkN1cnJlbnRNb250aF1cbiAgICAgIDogdGhpcy5fZmluZE5leHQoZGF5cywgbGFzdE9mQ3VycmVudE1vbnRoLCAtMSk7XG4gIH1cblxuICAvKiogRmluZCB0aGUgZmlyc3QgZW5hYmxlZCBlbGVtZW50IGluIHRoZSBzYW1lIGNvbHVtbiBvZiB0aGUgcHJvdmlkZWQgYXJyYXkuICovXG4gIHByaXZhdGUgX2ZpbmRGaXJzdE9uQ29sdW1uKFxuICAgIGRheXM6IEhUTUxCdXR0b25FbGVtZW50W10sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBvZmZzZXQ6IG51bWJlcixcbiAgICB2ZXJ0aWNhbE9mZnNldDogbnVtYmVyLFxuICApOiBIVE1MQnV0dG9uRWxlbWVudCB7XG4gICAgY29uc3QgbmV4dEluZGV4ID0gKGluZGV4ICUgdmVydGljYWxPZmZzZXQpICsgb2Zmc2V0O1xuICAgIHJldHVybiAhZGF5c1tuZXh0SW5kZXhdLmRpc2FibGVkXG4gICAgICA/IGRheXNbbmV4dEluZGV4XVxuICAgICAgOiB0aGlzLl9maW5kTmV4dChkYXlzLCBuZXh0SW5kZXgsIHZlcnRpY2FsT2Zmc2V0KTtcbiAgfVxuXG4gIC8qKiBGaW5kIHRoZSBsYXN0IGVuYWJsZWQgZWxlbWVudCBpbiB0aGUgc2FtZSBjb2x1bW4gb2YgdGhlIHByb3ZpZGVkIGFycmF5LiAqL1xuICBwcml2YXRlIF9maW5kTGFzdE9uQ29sdW1uKFxuICAgIGRheXM6IEhUTUxCdXR0b25FbGVtZW50W10sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBvZmZzZXQ6IG51bWJlcixcbiAgICB2ZXJ0aWNhbE9mZnNldDogbnVtYmVyLFxuICApOiBIVE1MQnV0dG9uRWxlbWVudCB7XG4gICAgY29uc3QgbmV4dEluZGV4ID0gaW5kZXggKyBNYXRoLnRydW5jKChvZmZzZXQgLSBpbmRleCAtIDEpIC8gdmVydGljYWxPZmZzZXQpICogdmVydGljYWxPZmZzZXQ7XG4gICAgcmV0dXJuICFkYXlzW25leHRJbmRleF0uZGlzYWJsZWRcbiAgICAgID8gZGF5c1tuZXh0SW5kZXhdXG4gICAgICA6IHRoaXMuX2ZpbmROZXh0KGRheXMsIG5leHRJbmRleCwgLXZlcnRpY2FsT2Zmc2V0KTtcbiAgfVxuXG4gIHByaXZhdGUgX3Jlc2V0Q2FsZW5kYXJWaWV3KGluaXRUcmFuc2l0aW9uID0gZmFsc2UpOiB2b2lkIHtcbiAgICB0aGlzLl9yZXNldEZvY3VzID0gdHJ1ZTtcbiAgICB0aGlzLl9hY3RpdmVEYXRlID0gdGhpcy5zZWxlY3RlZCA/PyB0aGlzLm5vdztcbiAgICB0aGlzLl9zZXRDaG9zZW5ZZWFyKCk7XG4gICAgdGhpcy5fY2hvc2VuTW9udGggPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fbmV4dENhbGVuZGFyVmlldyA9IHRoaXMuX2NhbGVuZGFyVmlldyA9IHRoaXMudmlldztcblxuICAgIGlmIChpbml0VHJhbnNpdGlvbikge1xuICAgICAgdGhpcy5fc3RhcnRUYWJsZVRyYW5zaXRpb24oKTtcbiAgICB9XG4gIH1cblxuICAvKiogUmVuZGVyIHRoZSB2aWV3IGZvciB0aGUgZGF5IHNlbGVjdGlvbi4gKi9cbiAgcHJpdmF0ZSBfcmVuZGVyRGF5VmlldygpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgY29uc3QgbmV4dE1vbnRoQWN0aXZlRGF0ZSA9IHRoaXMuX3dpZGVcbiAgICAgID8gdGhpcy5fZGF0ZUFkYXB0ZXIuYWRkQ2FsZW5kYXJNb250aHModGhpcy5fYWN0aXZlRGF0ZSwgMSlcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1jYWxlbmRhcl9fY29udHJvbHNcIj5cbiAgICAgICAgJHt0aGlzLl9nZXRBcnJvdyhcbiAgICAgICAgICAnbGVmdCcsXG4gICAgICAgICAgKCkgPT4gdGhpcy5fZ29Ub0RpZmZlcmVudE1vbnRoKC0xKSxcbiAgICAgICAgICBpMThuUHJldmlvdXNNb250aFt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XSxcbiAgICAgICAgICB0aGlzLl9wcmV2aW91c01vbnRoRGlzYWJsZWQoKSxcbiAgICAgICAgKX1cbiAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1jYWxlbmRhcl9fY29udHJvbHMtbW9udGhcIj5cbiAgICAgICAgICAke3RoaXMuX2NyZWF0ZUxhYmVsRm9yRGF5Vmlldyh0aGlzLl9hY3RpdmVEYXRlKX1cbiAgICAgICAgICAke3RoaXMuX3dpZGUgPyB0aGlzLl9jcmVhdGVMYWJlbEZvckRheVZpZXcobmV4dE1vbnRoQWN0aXZlRGF0ZSEpIDogbm90aGluZ31cbiAgICAgICAgICA8c2JiLXNjcmVlbi1yZWFkZXItb25seSByb2xlPVwic3RhdHVzXCI+XG4gICAgICAgICAgICAke3RoaXMuX2NyZWF0ZUFyaWFMYWJlbEZvckRheVZpZXcodGhpcy5fYWN0aXZlRGF0ZSwgbmV4dE1vbnRoQWN0aXZlRGF0ZSEpfVxuICAgICAgICAgIDwvc2JiLXNjcmVlbi1yZWFkZXItb25seT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgICR7dGhpcy5fZ2V0QXJyb3coXG4gICAgICAgICAgJ3JpZ2h0JyxcbiAgICAgICAgICAoKSA9PiB0aGlzLl9nb1RvRGlmZmVyZW50TW9udGgoMSksXG4gICAgICAgICAgaTE4bk5leHRNb250aFt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XSxcbiAgICAgICAgICB0aGlzLl9uZXh0TW9udGhEaXNhYmxlZCgpLFxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZS1jb250YWluZXIgc2JiLWNhbGVuZGFyX190YWJsZS1kYXktdmlld1wiPlxuICAgICAgICAke3RoaXMuX2NyZWF0ZURheVRhYmxlKHRoaXMuX3dlZWtzKX1cbiAgICAgICAgJHt0aGlzLl93aWRlID8gdGhpcy5fY3JlYXRlRGF5VGFibGUodGhpcy5fbmV4dE1vbnRoV2Vla3MpIDogbm90aGluZ31cbiAgICAgIDwvZGl2PlxuICAgIGA7XG4gIH1cblxuICAvKiogQ3JlYXRlcyB0aGUgbGFiZWwgd2l0aCB0aGUgbW9udGggZm9yIHRoZSBkYWlseSB2aWV3LiAqL1xuICBwcml2YXRlIF9jcmVhdGVMYWJlbEZvckRheVZpZXcoZDogVCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICBjb25zdCBtb250aExhYmVsID0gYCR7XG4gICAgICB0aGlzLl9tb250aE5hbWVzW3RoaXMuX2RhdGVBZGFwdGVyLmdldE1vbnRoKGQpIC0gMV1cbiAgICB9ICR7dGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcihkKX1gO1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJzYmItY2FsZW5kYXJfX2RhdGUtc2VsZWN0aW9uIHNiYi1jYWxlbmRhcl9fY29udHJvbHMtY2hhbmdlLWRhdGVcIlxuICAgICAgICBhcmlhLWxhYmVsPVwiJHtpMThuWWVhck1vbnRoU2VsZWN0aW9uW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfSAke21vbnRoTGFiZWx9XCJcbiAgICAgICAgQGNsaWNrPSR7KCkgPT4ge1xuICAgICAgICAgIHRoaXMuX3Jlc2V0Rm9jdXMgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuX25leHRDYWxlbmRhclZpZXcgPSAneWVhcic7XG4gICAgICAgICAgdGhpcy5fc3RhcnRUYWJsZVRyYW5zaXRpb24oKTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgJHttb250aExhYmVsfVxuICAgICAgICA8c2JiLWljb24gbmFtZT1cImNoZXZyb24tc21hbGwtZG93bi1zbWFsbFwiPjwvc2JiLWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICBgO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgdGhlIGFyaWEtbGFiZWwgZm9yIHRoZSBkYWlseSB2aWV3LiAqL1xuICBwcml2YXRlIF9jcmVhdGVBcmlhTGFiZWxGb3JEYXlWaWV3KC4uLmRhdGVzOiBUW10pOiBzdHJpbmcge1xuICAgIGxldCBtb250aExhYmVsID0gJyc7XG4gICAgZm9yIChjb25zdCBkIG9mIGRhdGVzKSB7XG4gICAgICBpZiAoZCkge1xuICAgICAgICBtb250aExhYmVsICs9IGAke1xuICAgICAgICAgIHRoaXMuX21vbnRoTmFtZXNbdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TW9udGgoZCkgLSAxXVxuICAgICAgICB9ICR7dGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcihkKX0gYDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1vbnRoTGFiZWw7XG4gIH1cblxuICAvKiogQ3JlYXRlcyB0aGUgY2FsZW5kYXIgdGFibGUgZm9yIHRoZSBkYWlseSB2aWV3LiAqL1xuICBwcml2YXRlIF9jcmVhdGVEYXlUYWJsZSh3ZWVrczogRGF5W11bXSk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDx0YWJsZVxuICAgICAgICBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGVcIlxuICAgICAgICBAZm9jdXNvdXQ9JHsoZXZlbnQ6IEZvY3VzRXZlbnQpID0+XG4gICAgICAgICAgdGhpcy5faGFuZGxlVGFibGVCbHVyKGV2ZW50LnJlbGF0ZWRUYXJnZXQgYXMgSFRNTEVsZW1lbnQpfVxuICAgICAgICBAYW5pbWF0aW9uZW5kPSR7KGU6IEFuaW1hdGlvbkV2ZW50KSA9PiB0aGlzLl90YWJsZUFuaW1hdGlvbkVuZChlKX1cbiAgICAgID5cbiAgICAgICAgPHRoZWFkIGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZS1oZWFkZXJcIj5cbiAgICAgICAgICA8dHIgY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlLWhlYWRlci1yb3dcIj5cbiAgICAgICAgICAgICR7dGhpcy5fY3JlYXRlRGF5VGFibGVIZWFkZXIoKX1cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3RoZWFkPlxuICAgICAgICA8dGJvZHkgY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlLWJvZHlcIj5cbiAgICAgICAgICAke3RoaXMuX2NyZWF0ZURheVRhYmxlQm9keSh3ZWVrcyl9XG4gICAgICAgIDwvdGJvZHk+XG4gICAgICA8L3RhYmxlPlxuICAgIGA7XG4gIH1cblxuICAvKiogQ3JlYXRlcyB0aGUgdGFibGUgaGVhZGVyIHdpdGggdGhlIG1vbnRoIGhlYWRlciBjZWxscy4gKi9cbiAgcHJpdmF0ZSBfY3JlYXRlRGF5VGFibGVIZWFkZXIoKTogVGVtcGxhdGVSZXN1bHRbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzLm1hcChcbiAgICAgIChkYXk6IFdlZWtkYXkpID0+IGh0bWxgXG4gICAgICAgIDx0aCBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtaGVhZGVyXCI+XG4gICAgICAgICAgPHNiYi1zY3JlZW4tcmVhZGVyLW9ubHk+JHtkYXkubG9uZ308L3NiYi1zY3JlZW4tcmVhZGVyLW9ubHk+XG4gICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JHtkYXkubmFycm93fTwvc3Bhbj5cbiAgICAgICAgPC90aD5cbiAgICAgIGAsXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBDcmVhdGVzIHRoZSB0YWJsZSBib2R5IHdpdGggdGhlIGRheSBjZWxscy4gRm9yIHRoZSBmaXJzdCByb3csIGl0IGFsc28gY29uc2lkZXJzIHRoZSBwb3NzaWJsZSBkYXkncyBvZmZzZXQuICovXG4gIHByaXZhdGUgX2NyZWF0ZURheVRhYmxlQm9keSh3ZWVrczogRGF5W11bXSk6IFRlbXBsYXRlUmVzdWx0W10ge1xuICAgIGNvbnN0IHRvZGF5OiBzdHJpbmcgPSB0aGlzLl9kYXRlQWRhcHRlci50b0lzbzg2MDEodGhpcy5ub3cpO1xuICAgIHJldHVybiB3ZWVrcy5tYXAoKHdlZWs6IERheVtdLCByb3dJbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCBmaXJzdFJvd09mZnNldDogbnVtYmVyID0gREFZU19QRVJfUk9XIC0gd2Vlay5sZW5ndGg7XG4gICAgICBpZiAocm93SW5kZXggPT09IDAgJiYgZmlyc3RSb3dPZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIGh0bWxgXG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgJHtbLi4uQXJyYXkoZmlyc3RSb3dPZmZzZXQpLmtleXMoKV0ubWFwKFxuICAgICAgICAgICAgICAoKSA9PlxuICAgICAgICAgICAgICAgIGh0bWxgPHRkXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtZGF0YVwiXG4gICAgICAgICAgICAgICAgICBkYXRhLWRheT0ke2AwICR7d2Vla1swXS5tb250aFZhbHVlfSAke3dlZWtbMF0ueWVhclZhbHVlfWB9XG4gICAgICAgICAgICAgICAgPjwvdGQ+YCxcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICAke3RoaXMuX2NyZWF0ZURheUNlbGxzKHdlZWssIHRvZGF5KX1cbiAgICAgICAgICA8L3RyPlxuICAgICAgICBgO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGh0bWxgPHRyPlxuICAgICAgICAke3RoaXMuX2NyZWF0ZURheUNlbGxzKHdlZWssIHRvZGF5KX1cbiAgICAgIDwvdHI+YDtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBDcmVhdGVzIHRoZSBjZWxscyBmb3IgdGhlIGRhaWx5IHZpZXcuICovXG4gIHByaXZhdGUgX2NyZWF0ZURheUNlbGxzKHdlZWs6IERheVtdLCB0b2RheTogc3RyaW5nKTogVGVtcGxhdGVSZXN1bHRbXSB7XG4gICAgcmV0dXJuIHdlZWsubWFwKChkYXk6IERheSkgPT4ge1xuICAgICAgY29uc3QgaXNPdXRPZlJhbmdlID0gIXRoaXMuX2lzRGF5SW5SYW5nZShkYXkudmFsdWUpO1xuICAgICAgY29uc3QgaXNGaWx0ZXJlZE91dCA9ICF0aGlzLl9kYXRlRmlsdGVyKHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKGRheS52YWx1ZSkhKTtcbiAgICAgIGNvbnN0IHNlbGVjdGVkOiBib29sZWFuID0gISF0aGlzLl9zZWxlY3RlZCAmJiBkYXkudmFsdWUgPT09IHRoaXMuX3NlbGVjdGVkO1xuICAgICAgY29uc3QgZGF5VmFsdWUgPSBgJHtkYXkuZGF5VmFsdWV9ICR7ZGF5Lm1vbnRoVmFsdWV9ICR7ZGF5LnllYXJWYWx1ZX1gO1xuICAgICAgY29uc3QgaXNUb2RheSA9IGRheS52YWx1ZSA9PT0gdG9kYXk7XG4gICAgICByZXR1cm4gaHRtbGBcbiAgICAgICAgPHRkXG4gICAgICAgICAgY2xhc3M9JHtjbGFzc01hcCh7XG4gICAgICAgICAgICAnc2JiLWNhbGVuZGFyX190YWJsZS1kYXRhJzogdHJ1ZSxcbiAgICAgICAgICAgICdzYmItY2FsZW5kYXJfX3RhYmxlLWRhdGEtc2VsZWN0ZWQnOiBzZWxlY3RlZCxcbiAgICAgICAgICB9KX1cbiAgICAgICAgPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPSR7Y2xhc3NNYXAoe1xuICAgICAgICAgICAgICAnc2JiLWNhbGVuZGFyX19jZWxsJzogdHJ1ZSxcbiAgICAgICAgICAgICAgJ3NiYi1jYWxlbmRhcl9fZGF5JzogdHJ1ZSxcbiAgICAgICAgICAgICAgJ3NiYi1jYWxlbmRhcl9fY2VsbC1jdXJyZW50JzogaXNUb2RheSxcbiAgICAgICAgICAgICAgJ3NiYi1jYWxlbmRhcl9fc2VsZWN0ZWQnOiBzZWxlY3RlZCxcbiAgICAgICAgICAgICAgJ3NiYi1jYWxlbmRhcl9fY3Jvc3NlZC1vdXQnOiAhaXNPdXRPZlJhbmdlICYmIGlzRmlsdGVyZWRPdXQsXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuX3NlbGVjdERhdGUoZGF5LnZhbHVlKX1cbiAgICAgICAgICAgID9kaXNhYmxlZD0ke2lzT3V0T2ZSYW5nZSB8fCBpc0ZpbHRlcmVkT3V0fVxuICAgICAgICAgICAgYXJpYS1sYWJlbD0ke3RoaXMuX2RhdGVBZGFwdGVyLmdldEFjY2Vzc2liaWxpdHlGb3JtYXREYXRlKGRheS52YWx1ZSl9XG4gICAgICAgICAgICBhcmlhLXByZXNzZWQ9JHtzZWxlY3RlZH1cbiAgICAgICAgICAgIGFyaWEtZGlzYWJsZWQ9JHtpc091dE9mUmFuZ2UgfHwgaXNGaWx0ZXJlZE91dH1cbiAgICAgICAgICAgIGFyaWEtY3VycmVudD0ke2lzVG9kYXkgPyAnZGF0ZScgOiBub3RoaW5nfVxuICAgICAgICAgICAgZGF0YS1kYXk9JHtkYXlWYWx1ZSB8fCBub3RoaW5nfVxuICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICBAa2V5ZG93bj0keyhldnQ6IEtleWJvYXJkRXZlbnQpID0+IHRoaXMuX2hhbmRsZUtleWJvYXJkRXZlbnQoZXZ0LCBkYXkpfVxuICAgICAgICAgICAgc2JiLXBvcG92ZXItY2xvc2VcbiAgICAgICAgICA+XG4gICAgICAgICAgICAke2RheS5kYXlWYWx1ZX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC90ZD5cbiAgICAgIGA7XG4gICAgfSk7XG4gIH1cblxuICAvKiogUmVuZGVyIHRoZSB2aWV3IGZvciB0aGUgbW9udGggc2VsZWN0aW9uLiAqL1xuICBwcml2YXRlIF9yZW5kZXJNb250aFZpZXcoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1jYWxlbmRhcl9fY29udHJvbHNcIj5cbiAgICAgICAgJHt0aGlzLl9nZXRBcnJvdyhcbiAgICAgICAgICAnbGVmdCcsXG4gICAgICAgICAgKCkgPT4gdGhpcy5fZ29Ub0RpZmZlcmVudFllYXIoLTEpLFxuICAgICAgICAgIGkxOG5QcmV2aW91c1llYXJbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF0sXG4gICAgICAgICAgdGhpcy5fcHJldmlvdXNZZWFyRGlzYWJsZWQoKSxcbiAgICAgICAgKX1cbiAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1jYWxlbmRhcl9fY29udHJvbHMtbW9udGhcIj4ke3RoaXMuX2NyZWF0ZUxhYmVsRm9yTW9udGhWaWV3KCl9PC9kaXY+XG4gICAgICAgICR7dGhpcy5fZ2V0QXJyb3coXG4gICAgICAgICAgJ3JpZ2h0JyxcbiAgICAgICAgICAoKSA9PiB0aGlzLl9nb1RvRGlmZmVyZW50WWVhcigxKSxcbiAgICAgICAgICBpMThuTmV4dFllYXJbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF0sXG4gICAgICAgICAgdGhpcy5fbmV4dFllYXJEaXNhYmxlZCgpLFxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZS1jb250YWluZXIgc2JiLWNhbGVuZGFyX190YWJsZS1tb250aC12aWV3XCI+XG4gICAgICAgICR7dGhpcy5fY3JlYXRlTW9udGhUYWJsZSh0aGlzLl9tb250aHMsIHRoaXMuX2Nob3NlblllYXIhKX1cbiAgICAgICAgJHt0aGlzLl93aWRlID8gdGhpcy5fY3JlYXRlTW9udGhUYWJsZSh0aGlzLl9tb250aHMsIHRoaXMuX2Nob3NlblllYXIhICsgMSkgOiBub3RoaW5nfVxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgfVxuXG4gIC8qKiBDcmVhdGVzIHRoZSBsYWJlbCB3aXRoIHRoZSB5ZWFyIGZvciB0aGUgbW9udGhseSB2aWV3LiAqL1xuICBwcml2YXRlIF9jcmVhdGVMYWJlbEZvck1vbnRoVmlldygpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGlkPVwic2JiLWNhbGVuZGFyX19tb250aC1zZWxlY3Rpb25cIlxuICAgICAgICBjbGFzcz1cInNiYi1jYWxlbmRhcl9fY29udHJvbHMtY2hhbmdlLWRhdGVcIlxuICAgICAgICBhcmlhLWxhYmVsPSR7YCR7aTE4bkNhbGVuZGFyRGF0ZVNlbGVjdGlvblt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX0gJHt0aGlzLl9jaG9zZW5ZZWFyfWB9XG4gICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuX3Jlc2V0Q2FsZW5kYXJWaWV3KHRydWUpfVxuICAgICAgPlxuICAgICAgICAke3RoaXMuX2Nob3NlblllYXJ9ICR7dGhpcy5fd2lkZSA/IGAgLSAke3RoaXMuX2Nob3NlblllYXIhICsgMX1gIDogbm90aGluZ31cbiAgICAgICAgPHNiYi1pY29uIG5hbWU9XCJjaGV2cm9uLXNtYWxsLXVwLXNtYWxsXCI+PC9zYmItaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPHNiYi1zY3JlZW4tcmVhZGVyLW9ubHkgcm9sZT1cInN0YXR1c1wiPiAke3RoaXMuX2Nob3NlblllYXJ9IDwvc2JiLXNjcmVlbi1yZWFkZXItb25seT5gO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgdGhlIHRhYmxlIGZvciB0aGUgbW9udGggc2VsZWN0aW9uIHZpZXcuICovXG4gIHByaXZhdGUgX2NyZWF0ZU1vbnRoVGFibGUobW9udGhzOiBNb250aFtdW10sIHllYXI6IG51bWJlcik6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDx0YWJsZVxuICAgICAgICBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGVcIlxuICAgICAgICBAYW5pbWF0aW9uZW5kPSR7KGU6IEFuaW1hdGlvbkV2ZW50KSA9PiB0aGlzLl90YWJsZUFuaW1hdGlvbkVuZChlKX1cbiAgICAgID5cbiAgICAgICAgJHt0aGlzLl93aWRlXG4gICAgICAgICAgPyBodG1sYDx0aGVhZCBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtaGVhZGVyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgIDx0ciBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtaGVhZGVyLXJvd1wiPlxuICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtaGVhZGVyXCIgY29sc3Bhbj0ke01PTlRIU19QRVJfUk9XfT4ke3llYXJ9PC90aD5cbiAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDwvdGhlYWQ+YFxuICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgPHRib2R5IGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZS1ib2R5XCI+XG4gICAgICAgICAgJHttb250aHMubWFwKFxuICAgICAgICAgICAgKHJvdzogTW9udGhbXSkgPT4gaHRtbGBcbiAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICR7cm93Lm1hcCgobW9udGg6IE1vbnRoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBpc091dE9mUmFuZ2UgPSAhdGhpcy5faXNNb250aEluUmFuZ2UobW9udGgubW9udGhWYWx1ZSwgeWVhcik7XG4gICAgICAgICAgICAgICAgICBjb25zdCBpc0ZpbHRlcmVkT3V0ID0gIXRoaXMuX2lzTW9udGhGaWx0ZXJlZE91dChtb250aC5tb250aFZhbHVlLCB5ZWFyKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkTW9udGggPSB0aGlzLl9zZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMuX2RhdGVBZGFwdGVyLmdldE1vbnRoKHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKHRoaXMuX3NlbGVjdGVkKSEpXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRZZWFyID0gdGhpcy5fc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKHRoaXMuX3NlbGVjdGVkKSEpXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWQ6IGJvb2xlYW4gPVxuICAgICAgICAgICAgICAgICAgICAhIXRoaXMuX3NlbGVjdGVkICYmIHllYXIgPT09IHNlbGVjdGVkWWVhciAmJiBtb250aC5tb250aFZhbHVlID09PSBzZWxlY3RlZE1vbnRoO1xuXG4gICAgICAgICAgICAgICAgICBjb25zdCBpc0N1cnJlbnRNb250aCA9XG4gICAgICAgICAgICAgICAgICAgIHllYXIgPT09IHRoaXMuX2RhdGVBZGFwdGVyLmdldFllYXIodGhpcy5ub3cpICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmdldE1vbnRoKHRoaXMubm93KSA9PT0gbW9udGgubW9udGhWYWx1ZTtcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGh0bWxgIDx0ZFxuICAgICAgICAgICAgICAgICAgICBjbGFzcz0ke2NsYXNzTWFwKHtcbiAgICAgICAgICAgICAgICAgICAgICAnc2JiLWNhbGVuZGFyX190YWJsZS1kYXRhJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAnc2JiLWNhbGVuZGFyX190YWJsZS1tb250aCc6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9JHtjbGFzc01hcCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAnc2JiLWNhbGVuZGFyX19jZWxsJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdzYmItY2FsZW5kYXJfX3BpbGwnOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3NiYi1jYWxlbmRhcl9fY2VsbC1jdXJyZW50JzogaXNDdXJyZW50TW9udGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAnc2JiLWNhbGVuZGFyX19jcm9zc2VkLW91dCc6ICFpc091dE9mUmFuZ2UgJiYgaXNGaWx0ZXJlZE91dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdzYmItY2FsZW5kYXJfX3NlbGVjdGVkJzogc2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5fb25Nb250aFNlbGVjdGlvbihtb250aC5tb250aFZhbHVlLCB5ZWFyKX1cbiAgICAgICAgICAgICAgICAgICAgICA/ZGlzYWJsZWQ9JHtpc091dE9mUmFuZ2UgfHwgaXNGaWx0ZXJlZE91dH1cbiAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPSR7YCR7bW9udGgubG9uZ1ZhbHVlfSAke3llYXJ9YH1cbiAgICAgICAgICAgICAgICAgICAgICBhcmlhLXByZXNzZWQ9JHtzZWxlY3RlZH1cbiAgICAgICAgICAgICAgICAgICAgICBhcmlhLWRpc2FibGVkPSR7U3RyaW5nKGlzT3V0T2ZSYW5nZSB8fCBpc0ZpbHRlcmVkT3V0KX1cbiAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnRoPSR7bW9udGgubW9udGhWYWx1ZSB8fCBub3RoaW5nfVxuICAgICAgICAgICAgICAgICAgICAgIEBrZXlkb3duPSR7KGV2dDogS2V5Ym9hcmRFdmVudCkgPT4gdGhpcy5faGFuZGxlS2V5Ym9hcmRFdmVudChldnQpfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgJHttb250aC52YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8L3RkPmA7XG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICBgLFxuICAgICAgICAgICl9XG4gICAgICAgIDwvdGJvZHk+XG4gICAgICA8L3RhYmxlPlxuICAgIGA7XG4gIH1cblxuICAvKiogU2VsZWN0IHRoZSBtb250aCBhbmQgY2hhbmdlIHRoZSB2aWV3IHRvIGRheSBzZWxlY3Rpb24uICovXG4gIHByaXZhdGUgX29uTW9udGhTZWxlY3Rpb24obW9udGg6IG51bWJlciwgeWVhcjogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fY2hvc2VuTW9udGggPSBtb250aDtcbiAgICB0aGlzLl9uZXh0Q2FsZW5kYXJWaWV3ID0gJ2RheSc7XG4gICAgdGhpcy5faW5pdChcbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmNyZWF0ZURhdGUoXG4gICAgICAgIHllYXIsXG4gICAgICAgIHRoaXMuX2Nob3Nlbk1vbnRoLFxuICAgICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXREYXRlKHRoaXMuX2FjdGl2ZURhdGUpLFxuICAgICAgKSxcbiAgICApO1xuICAgIHRoaXMuX3N0YXJ0VGFibGVUcmFuc2l0aW9uKCk7XG4gIH1cblxuICAvKiogUmVuZGVyIHRoZSB2aWV3IGZvciB0aGUgeWVhciBzZWxlY3Rpb24uICovXG4gIHByaXZhdGUgX3JlbmRlclllYXJWaWV3KCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItY2FsZW5kYXJfX2NvbnRyb2xzXCI+XG4gICAgICAgICR7dGhpcy5fZ2V0QXJyb3coXG4gICAgICAgICAgJ2xlZnQnLFxuICAgICAgICAgICgpID0+IHRoaXMuX2dvVG9EaWZmZXJlbnRZZWFyUmFuZ2UoLVlFQVJTX1BFUl9QQUdFKSxcbiAgICAgICAgICBpMThuUHJldmlvdXNZZWFyUmFuZ2UoWUVBUlNfUEVSX1BBR0UpW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdLFxuICAgICAgICAgIHRoaXMuX3ByZXZpb3VzWWVhclJhbmdlRGlzYWJsZWQoKSxcbiAgICAgICAgKX1cbiAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1jYWxlbmRhcl9fY29udHJvbHMtbW9udGhcIj4ke3RoaXMuX2NyZWF0ZUxhYmVsRm9yWWVhclZpZXcoKX08L2Rpdj5cbiAgICAgICAgJHt0aGlzLl9nZXRBcnJvdyhcbiAgICAgICAgICAncmlnaHQnLFxuICAgICAgICAgICgpID0+IHRoaXMuX2dvVG9EaWZmZXJlbnRZZWFyUmFuZ2UoWUVBUlNfUEVSX1BBR0UpLFxuICAgICAgICAgIGkxOG5OZXh0WWVhclJhbmdlKFlFQVJTX1BFUl9QQUdFKVt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XSxcbiAgICAgICAgICB0aGlzLl9uZXh0WWVhclJhbmdlRGlzYWJsZWQoKSxcbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtY29udGFpbmVyIHNiYi1jYWxlbmRhcl9fdGFibGUteWVhci12aWV3XCI+XG4gICAgICAgICR7dGhpcy5fY3JlYXRlWWVhclRhYmxlKHRoaXMuX3llYXJzKX1cbiAgICAgICAgJHt0aGlzLl93aWRlID8gdGhpcy5fY3JlYXRlWWVhclRhYmxlKHRoaXMuX25leHRNb250aFllYXJzLCB0cnVlKSA6IG5vdGhpbmd9XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgdGhlIGJ1dHRvbiBhcnJvdyBmb3IgYWxsIHRoZSB2aWV3cy4gKi9cbiAgcHJpdmF0ZSBfZ2V0QXJyb3coXG4gICAgZGlyZWN0aW9uOiAnbGVmdCcgfCAncmlnaHQnLFxuICAgIGNsaWNrOiAoKSA9PiB2b2lkLFxuICAgIGFyaWFMYWJlbDogc3RyaW5nLFxuICAgIGRpc2FibGVkOiBib29sZWFuLFxuICApOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgPHNiYi1zZWNvbmRhcnktYnV0dG9uXG4gICAgICBzaXplPVwibVwiXG4gICAgICBpY29uLW5hbWU9XCJjaGV2cm9uLXNtYWxsLSR7ZGlyZWN0aW9ufS1zbWFsbFwiXG4gICAgICBhcmlhLWxhYmVsPSR7YXJpYUxhYmVsfVxuICAgICAgQGNsaWNrPSR7Y2xpY2t9XG4gICAgICA/ZGlzYWJsZWQ9JHtkaXNhYmxlZH1cbiAgICAgIGlkPVwic2JiLWNhbGVuZGFyX19jb250cm9scy0ke2RpcmVjdGlvbiA9PT0gJ2xlZnQnID8gJ3ByZXZpb3VzJyA6ICduZXh0J31cIlxuICAgID48L3NiYi1zZWNvbmRhcnktYnV0dG9uPmA7XG4gIH1cblxuICAvKiogQ3JlYXRlcyB0aGUgbGFiZWwgd2l0aCB0aGUgeWVhciByYW5nZSBmb3IgdGhlIHllYXJseSB2aWV3LiAqL1xuICBwcml2YXRlIF9jcmVhdGVMYWJlbEZvclllYXJWaWV3KCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICBjb25zdCBmaXJzdFllYXI6IG51bWJlciA9IHRoaXMuX3llYXJzLmZsYXQoKVswXTtcbiAgICBjb25zdCBsYXN0WWVhckFycmF5OiBudW1iZXJbXSA9ICh0aGlzLl93aWRlID8gdGhpcy5fbmV4dE1vbnRoWWVhcnMgOiB0aGlzLl95ZWFycykuZmxhdCgpO1xuICAgIGNvbnN0IGxhc3RZZWFyOiBudW1iZXIgPSBsYXN0WWVhckFycmF5W2xhc3RZZWFyQXJyYXkubGVuZ3RoIC0gMV07XG4gICAgY29uc3QgeWVhckxhYmVsID0gYCR7Zmlyc3RZZWFyfSAtICR7bGFzdFllYXJ9YDtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGlkPVwic2JiLWNhbGVuZGFyX195ZWFyLXNlbGVjdGlvblwiXG4gICAgICAgIGNsYXNzPVwic2JiLWNhbGVuZGFyX19jb250cm9scy1jaGFuZ2UtZGF0ZVwiXG4gICAgICAgIGFyaWEtbGFiZWw9XCIke2kxOG5DYWxlbmRhckRhdGVTZWxlY3Rpb25bdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19ICR7eWVhckxhYmVsfVwiXG4gICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuX3Jlc2V0Q2FsZW5kYXJWaWV3KHRydWUpfVxuICAgICAgPlxuICAgICAgICAke3llYXJMYWJlbH1cbiAgICAgICAgPHNiYi1pY29uIG5hbWU9XCJjaGV2cm9uLXNtYWxsLXVwLXNtYWxsXCI+PC9zYmItaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPHNiYi1zY3JlZW4tcmVhZGVyLW9ubHkgcm9sZT1cInN0YXR1c1wiPiAke3llYXJMYWJlbH0gPC9zYmItc2NyZWVuLXJlYWRlci1vbmx5PlxuICAgIGA7XG4gIH1cblxuICAvKiogQ3JlYXRlcyB0aGUgdGFibGUgZm9yIHRoZSB5ZWFyIHNlbGVjdGlvbiB2aWV3LiAqL1xuICBwcml2YXRlIF9jcmVhdGVZZWFyVGFibGUoeWVhcnM6IG51bWJlcltdW10sIHNoaWZ0UmlnaHQgPSBmYWxzZSk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICBjb25zdCBub3cgPSB0aGlzLm5vdztcbiAgICByZXR1cm4gaHRtbGAgPHRhYmxlXG4gICAgICBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGVcIlxuICAgICAgQGFuaW1hdGlvbmVuZD0keyhlOiBBbmltYXRpb25FdmVudCkgPT4gdGhpcy5fdGFibGVBbmltYXRpb25FbmQoZSl9XG4gICAgPlxuICAgICAgPHRib2R5IGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZS1ib2R5XCI+XG4gICAgICAgICR7eWVhcnMubWFwKFxuICAgICAgICAgIChyb3c6IG51bWJlcltdKSA9PlxuICAgICAgICAgICAgaHRtbGAgPHRyPlxuICAgICAgICAgICAgICAke3Jvdy5tYXAoKHllYXI6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzT3V0T2ZSYW5nZSA9ICF0aGlzLl9pc1llYXJJblJhbmdlKHllYXIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzRmlsdGVyZWRPdXQgPSAhdGhpcy5faXNZZWFyRmlsdGVyZWRPdXQoeWVhcik7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRZZWFyID0gdGhpcy5fc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgID8gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcih0aGlzLl9kYXRlQWRhcHRlci5kZXNlcmlhbGl6ZSh0aGlzLl9zZWxlY3RlZCkhKVxuICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWQ6IGJvb2xlYW4gPSAhIXRoaXMuX3NlbGVjdGVkICYmIHllYXIgPT09IHNlbGVjdGVkWWVhcjtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0N1cnJlbnRZZWFyID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcihub3cpID09PSB5ZWFyO1xuICAgICAgICAgICAgICAgIHJldHVybiBodG1sYCA8dGQgY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlLWRhdGEgc2JiLWNhbGVuZGFyX190YWJsZS15ZWFyXCI+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPSR7Y2xhc3NNYXAoe1xuICAgICAgICAgICAgICAgICAgICAgICdzYmItY2FsZW5kYXJfX2NlbGwnOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICdzYmItY2FsZW5kYXJfX3BpbGwnOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICdzYmItY2FsZW5kYXJfX2NlbGwtY3VycmVudCc6IGlzQ3VycmVudFllYXIsXG4gICAgICAgICAgICAgICAgICAgICAgJ3NiYi1jYWxlbmRhcl9fY3Jvc3NlZC1vdXQnOiAhaXNPdXRPZlJhbmdlICYmIGlzRmlsdGVyZWRPdXQsXG4gICAgICAgICAgICAgICAgICAgICAgJ3NiYi1jYWxlbmRhcl9fc2VsZWN0ZWQnOiBzZWxlY3RlZCxcbiAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuX29uWWVhclNlbGVjdGlvbih5ZWFyLCBzaGlmdFJpZ2h0KX1cbiAgICAgICAgICAgICAgICAgICAgP2Rpc2FibGVkPSR7aXNPdXRPZlJhbmdlIHx8IGlzRmlsdGVyZWRPdXR9XG4gICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9JHt5ZWFyfVxuICAgICAgICAgICAgICAgICAgICBhcmlhLXByZXNzZWQ9JHtzZWxlY3RlZH1cbiAgICAgICAgICAgICAgICAgICAgYXJpYS1kaXNhYmxlZD0ke1N0cmluZyhpc091dE9mUmFuZ2UgfHwgaXNGaWx0ZXJlZE91dCl9XG4gICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICAgICAgICBkYXRhLXllYXI9JHt5ZWFyIHx8IG5vdGhpbmd9XG4gICAgICAgICAgICAgICAgICAgIEBrZXlkb3duPSR7KGV2dDogS2V5Ym9hcmRFdmVudCkgPT4gdGhpcy5faGFuZGxlS2V5Ym9hcmRFdmVudChldnQpfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAke3llYXJ9XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L3RkPmA7XG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgPC90cj5gLFxuICAgICAgICApfVxuICAgICAgPC90Ym9keT5cbiAgICA8L3RhYmxlPmA7XG4gIH1cblxuICAvKiogU2VsZWN0IHRoZSB5ZWFyIGFuZCBjaGFuZ2UgdGhlIHZpZXcgdG8gbW9udGggc2VsZWN0aW9uLiAqL1xuICBwcml2YXRlIF9vblllYXJTZWxlY3Rpb24oeWVhcjogbnVtYmVyLCByaWdodFNpZGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLl9jaG9zZW5ZZWFyID0gcmlnaHRTaWRlID8geWVhciAtIDEgOiB5ZWFyO1xuICAgIHRoaXMuX25leHRDYWxlbmRhclZpZXcgPSAnbW9udGgnO1xuICAgIHRoaXMuX2Fzc2lnbkFjdGl2ZURhdGUoXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5jcmVhdGVEYXRlKFxuICAgICAgICB0aGlzLl9jaG9zZW5ZZWFyLFxuICAgICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRNb250aCh0aGlzLl9hY3RpdmVEYXRlKSxcbiAgICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0RGF0ZSh0aGlzLl9hY3RpdmVEYXRlKSxcbiAgICAgICksXG4gICAgKTtcbiAgICB0aGlzLl9zdGFydFRhYmxlVHJhbnNpdGlvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0VmlldygpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgaWYgKGlzU2VydmVyIHx8IHRoaXMuaHlkcmF0aW9uUmVxdWlyZWQpIHtcbiAgICAgIC8vIFRPRE86IFdlIGRpc2FibGUgU1NSIGZvciBjYWxlbmRhciBmb3Igbm93LiBGaWd1cmUgb3VyLCBpZiB0aGVyZSBpcyBhIHdheVxuICAgICAgLy8gdG8gZW5hYmxlIGl0LCB3aGlsZSBjb25zaWRlcmluZyBpMThuIGFuZCBkYXRlIGluZm9ybWF0aW9uLlxuICAgICAgcmV0dXJuIGh0bWxgJHtub3RoaW5nfWA7XG4gICAgfVxuICAgIHN3aXRjaCAodGhpcy5fY2FsZW5kYXJWaWV3KSB7XG4gICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlclllYXJWaWV3KCk7XG4gICAgICBjYXNlICdtb250aCc6XG4gICAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJNb250aFZpZXcoKTtcbiAgICAgIGNhc2UgJ2RheSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdGhpcy5fcmVuZGVyRGF5VmlldygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3RhYmxlQW5pbWF0aW9uRW5kKGV2ZW50OiBBbmltYXRpb25FdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHRhYmxlID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGlmIChldmVudC5hbmltYXRpb25OYW1lID09PSAnaGlkZScpIHtcbiAgICAgIHRhYmxlLmNsYXNzTGlzdC5yZW1vdmUoJ3NiYi1jYWxlbmRhcl9fdGFibGUtaGlkZScpO1xuICAgICAgdGhpcy5fcmVzZXRGb2N1cyA9IHRydWU7XG4gICAgICB0aGlzLl9jYWxlbmRhclZpZXcgPSB0aGlzLl9uZXh0Q2FsZW5kYXJWaWV3O1xuICAgIH0gZWxzZSBpZiAoZXZlbnQuYW5pbWF0aW9uTmFtZSA9PT0gJ3Nob3cnKSB7XG4gICAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS10cmFuc2l0aW9uJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc3RhcnRUYWJsZVRyYW5zaXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy50b2dnbGVBdHRyaWJ1dGUoJ2RhdGEtdHJhbnNpdGlvbicsIHRydWUpO1xuICAgIHRoaXMuc2hhZG93Um9vdFxuICAgICAgPy5xdWVyeVNlbGVjdG9yQWxsKCd0YWJsZScpXG4gICAgICA/LmZvckVhY2goKGUpID0+IGUuY2xhc3NMaXN0LnRvZ2dsZSgnc2JiLWNhbGVuZGFyX190YWJsZS1oaWRlJykpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlbmRlcigpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgPGRpdiBjbGFzcz1cInNiYi1jYWxlbmRhcl9fd3JhcHBlclwiPiR7dGhpcy5fZ2V0VmlldygpfTwvZGl2PmA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi1jYWxlbmRhcic6IFNiYkNhbGVuZGFyRWxlbWVudDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIlNiYkNhbGVuZGFyRWxlbWVudCIsIl9hIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFnR00sc0JBQWtCLE1BQUE7OzBCQUR2QixjQUFjLGNBQWMsQ0FBQzs7OztvQkFDYSxrQkFBa0IsVUFBVTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztB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
|
|
1331
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50cy9jYWxlbmRhci9jYWxlbmRhci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICB0eXBlIENTU1Jlc3VsdEdyb3VwLFxuICBodG1sLFxuICBpc1NlcnZlcixcbiAgTGl0RWxlbWVudCxcbiAgbm90aGluZyxcbiAgdHlwZSBQcm9wZXJ0eVZhbHVlcyxcbiAgdHlwZSBUZW1wbGF0ZVJlc3VsdCxcbn0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IGNsYXNzTWFwIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvY2xhc3MtbWFwLmpzJztcblxuaW1wb3J0IHsgaXNBcnJvd0tleU9yUGFnZUtleXNQcmVzc2VkLCBzYmJJbnB1dE1vZGFsaXR5RGV0ZWN0b3IgfSBmcm9tICcuLi9jb3JlL2ExMXkuanMnO1xuaW1wb3J0IHsgcmVhZENvbmZpZyB9IGZyb20gJy4uL2NvcmUvY29uZmlnLmpzJztcbmltcG9ydCB7XG4gIFNiYkxhbmd1YWdlQ29udHJvbGxlcixcbiAgU2JiTWVkaWFNYXRjaGVyQ29udHJvbGxlcixcbiAgU2JiTWVkaWFRdWVyeUJyZWFrcG9pbnRNZWRpdW1BbmRBYm92ZSxcbn0gZnJvbSAnLi4vY29yZS9jb250cm9sbGVycy5qcyc7XG5pbXBvcnQgdHlwZSB7IERhdGVBZGFwdGVyIH0gZnJvbSAnLi4vY29yZS9kYXRldGltZS5qcyc7XG5pbXBvcnQge1xuICBEQVlTX1BFUl9ST1csXG4gIGRlZmF1bHREYXRlQWRhcHRlcixcbiAgTU9OVEhTX1BFUl9ST1csXG4gIFlFQVJTX1BFUl9QQUdFLFxuICBZRUFSU19QRVJfUk9XLFxufSBmcm9tICcuLi9jb3JlL2RhdGV0aW1lLmpzJztcbmltcG9ydCB7IGZvcmNlVHlwZSB9IGZyb20gJy4uL2NvcmUvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICcuLi9jb3JlL2V2ZW50aW5nLmpzJztcbmltcG9ydCB7XG4gIGkxOG5DYWxlbmRhckRhdGVTZWxlY3Rpb24sXG4gIGkxOG5OZXh0TW9udGgsXG4gIGkxOG5OZXh0WWVhcixcbiAgaTE4bk5leHRZZWFyUmFuZ2UsXG4gIGkxOG5QcmV2aW91c01vbnRoLFxuICBpMThuUHJldmlvdXNZZWFyLFxuICBpMThuUHJldmlvdXNZZWFyUmFuZ2UsXG4gIGkxOG5ZZWFyTW9udGhTZWxlY3Rpb24sXG59IGZyb20gJy4uL2NvcmUvaTE4bi5qcyc7XG5pbXBvcnQgdHlwZSB7IFNiYkRhdGVMaWtlIH0gZnJvbSAnLi4vY29yZS9pbnRlcmZhY2VzLmpzJztcbmltcG9ydCB7IFNiYkh5ZHJhdGlvbk1peGluIH0gZnJvbSAnLi4vY29yZS9taXhpbnMuanMnO1xuXG5pbXBvcnQgc3R5bGUgZnJvbSAnLi9jYWxlbmRhci5zY3NzP2xpdCZpbmxpbmUnO1xuXG5pbXBvcnQgJy4uL2J1dHRvbi9zZWNvbmRhcnktYnV0dG9uLmpzJztcbmltcG9ydCAnLi4vaWNvbi5qcyc7XG5pbXBvcnQgJy4uL3NjcmVlbi1yZWFkZXItb25seS5qcyc7XG5cbi8qKlxuICogSW4ga2V5Ym9hcmQgbmF2aWdhdGlvbiwgdGhlIGNlbGwncyBpbmRleCBhbmQgdGhlIGVsZW1lbnQncyBpbmRleCBpbiBpdHMgbW9udGggLyB5ZWFyIGJhdGNoIG11c3QgYmUgZGlzdGluZ3Vpc2hlZDtcbiAqIHRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIG5hdmlnYXRpb24gaW4gdGhlIHZlcnRpY2FsIGRpcmVjdGlvbiB1c2luZyBzb21lIGtleXMgaXMgcmVzdHJpY3RlZCB0byBhIHNpbmdsZSBtb250aCBmb3IgZGF5cyxcbiAqIGFuZCB0byBhIHNpbmdsZSByYW5nZSBvZiAyNCB5ZWFycyBmb3IgeWVhcnMuIFdoaWxlIHRoZSBsYXR0ZXIgaXMgZWFzeSB0byB1bmRlcnN0YW5kLCB0aGUgY2VsbCdzIGluZGV4IGlzIHRoZSBpbmRleFxuICogb2YgdGhlIGVsZW1lbnQgaW4gdGhlIGFycmF5IG9mIGFsbCB0aGUgcmVuZGVyZWQgY2VsbHMuIEluIG5vbi13aWRlIG1vZGUsIHRoZXJlJ3Mgbm8gaXNzdWUgYmVjYXVzZSB0aGUgZWxlbWVudCBpbmRleFxuICogaXMgYmFzaWNhbGx5IHRoZSBjZWxsJ3MgaW5kZXggcGx1cyAxIChlbGVtZW50IHdpdGggaW5kZXggMCBkaXNwbGF5cyB0aGUgMXN0IG9mIG1vbnRoLCBlbGVtZW50IHdpdGggaW5kZXggMSBkaXNwbGF5cyB0aGUgMm5kIGFuZCBzbyBvbikuXG4gKiBJbiB3aWRlIG1vZGUsIHRoZSBjZWxsJ3MgaW5kZXggY2FuIGdvIGZyb20gMCB0byA0NyBmb3IgeWVhcnMgKHR3byBiYXRjaGVzIG9mIDI0IHllYXJzKSwgYW5kIGZyb20gMCB0byBhIG1heGltdW0gb2YgNjEgZm9yIGRheXNcbiAqICh0d28gY29uc2VjdXRpdmUgbW9udGhzIG9mIDMxIGRheXMsIGFzIEp1bHktQXVndXN0IG9yIERlY2VtYmVyLUphbnVhcnkpLCBkZXBlbmRpbmcgb24gdGhlIGxlbmd0aHMgb2YgdGhlIHJlbmRlcmVkIG1vbnRocztcbiAqIHRoZSBlbGVtZW50IGluZGV4IGluc3RlYWQgZ29lcyBmcm9tIDAgdG8gYSBtYXggdmFsdWUgb2YgMjQgZm9yIHllYXJzIGFuZCAzMSBmb3IgZGF5cy5cbiAqIE1vcmVvdmVyLCBpbiBkYXkgdmlldywgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHNlY29uZCByZW5kZXJlZCBtb250aCBhbmQgdGhlIGluZGV4IG9mIHRoZSBsYXN0IHJlbmRlcmVkIGRheVxuICogY2FuIGFsc28gdmFyeSBkZXBlbmRpbmcgb24gd2hpY2ggbW9udGhzIGFyZSByZW5kZXJlZDsgZm9yIEp1bHktQXVndXN0IHRoZXkgYXJlIGVxdWFscyB0byAzMSBhbmQgNjEsIHdoaWxlIGZvciBGZWJydWFyeS1NYXJjaCB0aGV5IGFyZSAyOCBhbmQgNTguXG4gKiBTbywgc29tZSBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgYXJlIG5lZWRlZCwgYmVzaWRlIHRoZSBjZWxsJ3MgaW5kZXgsIHRvIGNvcnJlY3RseSBjYWxjdWxhdGUgdGhlIGVsZW1lbnQgdG8gbmF2aWdhdGUgdG8uXG4gKi9cbmludGVyZmFjZSBDYWxlbmRhcktleWJvYXJkTmF2aWdhdGlvblBhcmFtZXRlcnMge1xuICAvKiogVGhlIGVsZW1lbnQgaW5kZXggd2l0aGluIGl0cyBtb250aCAob3IgeWVhciByYW5nZSkuICovXG4gIGVsZW1lbnRJbmRleEZvcldpZGVNb2RlOiBudW1iZXI7XG4gIC8qKiBJbiB3aWRlIG1vZGUsIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgc2Vjb25kIHBhbmVsLCBvciwgYWx0ZXJuYXRpdmVseSwgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgZmlyc3QgcGFuZWwuICovXG4gIG9mZnNldEZvcldpZGVNb2RlOiBudW1iZXI7XG4gIC8qKiBUaGUgaW5kZXggb2YgdGhlIGxhc3QgZWxlbWVudCB3aXRoaW4gdGhlIGVsZW1lbnQncyBtb250aCAob3IgeWVhciByYW5nZSkuICovXG4gIGxhc3RFbGVtZW50SW5kZXhGb3JXaWRlTW9kZTogbnVtYmVyO1xuICAvKiogVGhlIG51bWJlciBvZiBjZWxscyBkaXNwbGF5ZWQgaW4gYSBzaW5nbGUgcm93LCBkZXBlbmRpbmcgb24gdGhlIHJlbmRlcmVkIHZpZXcuICovXG4gIHZlcnRpY2FsT2Zmc2V0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF5IHtcbiAgdmFsdWU6IHN0cmluZztcbiAgZGF5VmFsdWU6IHN0cmluZztcbiAgbW9udGhWYWx1ZTogc3RyaW5nO1xuICB5ZWFyVmFsdWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNb250aCB7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIGxvbmdWYWx1ZTogc3RyaW5nO1xuICBtb250aFZhbHVlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2Vla2RheSB7XG4gIGxvbmc6IHN0cmluZztcbiAgbmFycm93OiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIENhbGVuZGFyVmlldyA9ICdkYXknIHwgJ21vbnRoJyB8ICd5ZWFyJztcblxuLyoqXG4gKiBJdCBkaXNwbGF5cyBhIGNhbGVuZGFyIHdoaWNoIGFsbG93cyB0byBjaG9vc2UgYSBkYXRlLlxuICpcbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8VD59IGRhdGVTZWxlY3RlZCAtIEV2ZW50IGVtaXR0ZWQgb24gZGF0ZSBzZWxlY3Rpb24uXG4gKi9cbmV4cG9ydFxuQGN1c3RvbUVsZW1lbnQoJ3NiYi1jYWxlbmRhcicpXG5jbGFzcyBTYmJDYWxlbmRhckVsZW1lbnQ8VCA9IERhdGU+IGV4dGVuZHMgU2JiSHlkcmF0aW9uTWl4aW4oTGl0RWxlbWVudCkge1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBzdHlsZTtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBldmVudHMgPSB7XG4gICAgZGF0ZVNlbGVjdGVkOiAnZGF0ZVNlbGVjdGVkJyxcbiAgfSBhcyBjb25zdDtcblxuICAvKiogSWYgc2V0IHRvIHRydWUsIHR3byBtb250aHMgYXJlIGRpc3BsYXllZCAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3Igd2lkZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBUaGUgaW5pdGlhbCB2aWV3IG9mIHRoZSBjYWxlbmRhciB3aGljaCBzaG91bGQgYmUgZGlzcGxheWVkIG9uIG9wZW5pbmcuICovXG4gIEBwcm9wZXJ0eSgpIHB1YmxpYyBhY2Nlc3NvciB2aWV3OiBDYWxlbmRhclZpZXcgPSAnZGF5JztcblxuICAvKiogVGhlIG1pbmltdW0gdmFsaWQgZGF0ZS4gVGFrZXMgVCBPYmplY3QsIElTT1N0cmluZywgYW5kIFVuaXggVGltZXN0YW1wIChudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSBKYW4gMSwgMTk3MCkuICovXG4gIEBwcm9wZXJ0eSgpXG4gIHB1YmxpYyBzZXQgbWluKHZhbHVlOiBTYmJEYXRlTGlrZTxUPiB8IG51bGwpIHtcbiAgICB0aGlzLl9taW4gPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRWYWxpZERhdGVPck51bGwodGhpcy5fZGF0ZUFkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpKTtcbiAgfVxuICBwdWJsaWMgZ2V0IG1pbigpOiBUIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX21pbiA/PyBudWxsO1xuICB9XG4gIHByaXZhdGUgX21pbj86IFQgfCBudWxsO1xuXG4gIC8qKiBUaGUgbWF4aW11bSB2YWxpZCBkYXRlLiBUYWtlcyBUIE9iamVjdCwgSVNPU3RyaW5nLCBhbmQgVW5peCBUaW1lc3RhbXAgKG51bWJlciBvZiBzZWNvbmRzIHNpbmNlIEphbiAxLCAxOTcwKS4gKi9cbiAgQHByb3BlcnR5KClcbiAgcHVibGljIHNldCBtYXgodmFsdWU6IFNiYkRhdGVMaWtlPFQ+IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fbWF4ID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0VmFsaWREYXRlT3JOdWxsKHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKHZhbHVlKSk7XG4gIH1cbiAgcHVibGljIGdldCBtYXgoKTogVCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9tYXggPz8gbnVsbDtcbiAgfVxuICBwcml2YXRlIF9tYXg/OiBUIHwgbnVsbDtcblxuICAvKiogQSBjb25maWd1cmVkIGRhdGUgd2hpY2ggYWN0cyBhcyB0aGUgY3VycmVudCBkYXRlIGluc3RlYWQgb2YgdGhlIHJlYWwgY3VycmVudCBkYXRlLiBSZWNvbW1lbmRlZCBmb3IgdGVzdGluZyBwdXJwb3Nlcy4gKi9cbiAgQHByb3BlcnR5KClcbiAgcHVibGljIHNldCBub3codmFsdWU6IFNiYkRhdGVMaWtlPFQ+IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fbm93ID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0VmFsaWREYXRlT3JOdWxsKHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKHZhbHVlKSk7XG4gIH1cbiAgcHVibGljIGdldCBub3coKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuX25vdyA/PyB0aGlzLl9kYXRlQWRhcHRlci50b2RheSgpO1xuICB9XG4gIHByaXZhdGUgX25vdzogVCB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBUaGUgc2VsZWN0ZWQgZGF0ZS4gVGFrZXMgVCBPYmplY3QsIElTT1N0cmluZywgYW5kIFVuaXggVGltZXN0YW1wIChudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSBKYW4gMSwgMTk3MCkuICovXG4gIEBwcm9wZXJ0eSgpXG4gIHB1YmxpYyBzZXQgc2VsZWN0ZWQodmFsdWU6IFNiYkRhdGVMaWtlPFQ+IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fc2VsZWN0ZWREYXRlID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0VmFsaWREYXRlT3JOdWxsKHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKHZhbHVlKSk7XG4gICAgaWYgKFxuICAgICAgISF0aGlzLl9zZWxlY3RlZERhdGUgJiZcbiAgICAgICghdGhpcy5faXNEYXlJblJhbmdlKHRoaXMuX2RhdGVBZGFwdGVyLnRvSXNvODYwMSh0aGlzLl9zZWxlY3RlZERhdGUpKSB8fFxuICAgICAgICB0aGlzLl9kYXRlRmlsdGVyKHRoaXMuX3NlbGVjdGVkRGF0ZSkpXG4gICAgKSB7XG4gICAgICB0aGlzLl9zZWxlY3RlZCA9IHRoaXMuX2RhdGVBZGFwdGVyLnRvSXNvODYwMSh0aGlzLl9zZWxlY3RlZERhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zZWxlY3RlZCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldCBzZWxlY3RlZCgpOiBUIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkRGF0ZSA/PyBudWxsO1xuICB9XG4gIHByaXZhdGUgX3NlbGVjdGVkRGF0ZT86IFQgfCBudWxsO1xuXG4gIC8qKiBBIGZ1bmN0aW9uIHVzZWQgdG8gZmlsdGVyIG91dCBkYXRlcy4gKi9cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnZGF0ZS1maWx0ZXInIH0pIHB1YmxpYyBhY2Nlc3NvciBkYXRlRmlsdGVyOlxuICAgIHwgKChkYXRlOiBUIHwgbnVsbCkgPT4gYm9vbGVhbilcbiAgICB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgX2RhdGVBZGFwdGVyOiBEYXRlQWRhcHRlcjxUPiA9IHJlYWRDb25maWcoKS5kYXRldGltZT8uZGF0ZUFkYXB0ZXIgPz8gZGVmYXVsdERhdGVBZGFwdGVyO1xuXG4gIC8qKiBFdmVudCBlbWl0dGVkIG9uIGRhdGUgc2VsZWN0aW9uLiAqL1xuICBwcml2YXRlIF9kYXRlU2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxUPiA9IG5ldyBFdmVudEVtaXR0ZXIoXG4gICAgdGhpcyxcbiAgICBTYmJDYWxlbmRhckVsZW1lbnQuZXZlbnRzLmRhdGVTZWxlY3RlZCxcbiAgKTtcblxuICAvKiogVGhlIGN1cnJlbnRseSBhY3RpdmUgZGF0ZS4gKi9cbiAgQHN0YXRlKCkgcHJpdmF0ZSBhY2Nlc3NvciBfYWN0aXZlRGF0ZTogVCA9IHRoaXMubm93O1xuXG4gIC8qKiBUaGUgc2VsZWN0ZWQgZGF0ZSBhcyBJU09TdHJpbmcuICovXG4gIEBzdGF0ZSgpIHByaXZhdGUgYWNjZXNzb3IgX3NlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqIFRoZSBjdXJyZW50IHdpZGUgcHJvcGVydHkgY29uc2lkZXJpbmcgcHJvcGVydHkgdmFsdWUgYW5kIGJyZWFrcG9pbnRzLiBGcm9tIHplcm8gdG8gc21hbGwgYHdpZGVgIGhhcyBhbHdheXMgdG8gYmUgZmFsc2UuICovXG4gIEBzdGF0ZSgpXG4gIHByaXZhdGUgc2V0IF93aWRlKHdpZGU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnRvZ2dsZUF0dHJpYnV0ZSgnZGF0YS13aWRlJywgd2lkZSk7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgX3dpZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKCdkYXRhLXdpZGUnKTtcbiAgfVxuXG4gIEBzdGF0ZSgpIHByaXZhdGUgYWNjZXNzb3IgX2NhbGVuZGFyVmlldzogQ2FsZW5kYXJWaWV3ID0gJ2RheSc7XG5cbiAgcHJpdmF0ZSBfbmV4dENhbGVuZGFyVmlldzogQ2FsZW5kYXJWaWV3ID0gJ2RheSc7XG5cbiAgLyoqIEEgbGlzdCBvZiBkYXlzLCBpbiB0d28gZm9ybWF0cyAobG9uZyBhbmQgc2luZ2xlIGNoYXIpLiAqL1xuICBwcml2YXRlIF93ZWVrZGF5cyE6IFdlZWtkYXlbXTtcblxuICAvKiogR3JpZCBvZiBjYWxlbmRhciBjZWxscyByZXByZXNlbnRpbmcgdGhlIGRhdGVzIG9mIHRoZSBtb250aC4gKi9cbiAgcHJpdmF0ZSBfd2Vla3M6IERheVtdW10gPSBbXTtcblxuICAvKiogR3JpZCBvZiBjYWxlbmRhciBjZWxscyByZXByZXNlbnRpbmcgbW9udGhzLiAqL1xuICBwcml2YXRlIF9tb250aHMhOiBNb250aFtdW107XG5cbiAgLyoqIEdyaWQgb2YgY2FsZW5kYXIgY2VsbHMgcmVwcmVzZW50aW5nIHllYXJzLiAqL1xuICBwcml2YXRlIF95ZWFycyE6IG51bWJlcltdW107XG5cbiAgLyoqIEdyaWQgb2YgY2FsZW5kYXIgY2VsbHMgcmVwcmVzZW50aW5nIHllYXJzIGZvciB0aGUgd2lkZSB2aWV3LiAqL1xuICBwcml2YXRlIF9uZXh0TW9udGhZZWFycyE6IG51bWJlcltdW107XG5cbiAgLyoqIEdyaWQgb2YgY2FsZW5kYXIgY2VsbHMgcmVwcmVzZW50aW5nIHRoZSBkYXRlcyBvZiB0aGUgbmV4dCBtb250aC4gKi9cbiAgcHJpdmF0ZSBfbmV4dE1vbnRoV2Vla3MhOiBEYXlbXVtdO1xuXG4gIC8qKiBBbiBhcnJheSBjb250YWluaW5nIGFsbCB0aGUgbW9udGggbmFtZXMgaW4gdGhlIGN1cnJlbnQgbGFuZ3VhZ2UuICovXG4gIHByaXZhdGUgX21vbnRoTmFtZXM6IHN0cmluZ1tdID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TW9udGhOYW1lcygnbG9uZycpO1xuXG4gIC8qKiBBIGxpc3Qgb2YgYnV0dG9ucyBjb3JyZXNwb25kaW5nIHRvIGRheXMsIG1vbnRocyBvciB5ZWFycyBkZXBlbmRpbmcgb24gdGhlIHZpZXcuICovXG4gIHByaXZhdGUgZ2V0IF9jZWxscygpOiBIVE1MQnV0dG9uRWxlbWVudFtdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShcbiAgICAgIHRoaXMuc2hhZG93Um9vdCEucXVlcnlTZWxlY3RvckFsbCgnLnNiYi1jYWxlbmRhcl9fY2VsbCcpID8/IFtdLFxuICAgICkgYXMgSFRNTEJ1dHRvbkVsZW1lbnRbXTtcbiAgfVxuXG4gIC8qKiBUaGUgY2hvc2VuIHllYXIgaW4gdGhlIHllYXIgc2VsZWN0aW9uIHZpZXcuICovXG4gIHByaXZhdGUgX2Nob3NlblllYXI/OiBudW1iZXI7XG5cbiAgLyoqIFRoZSBjaG9zZW4gbW9udGggaW4gdGhlIHllYXIgc2VsZWN0aW9uIHZpZXcuICovXG4gIHByaXZhdGUgX2Nob3Nlbk1vbnRoPzogbnVtYmVyO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBmb2N1cyBzaG91bGQgYmUgcmVzZXQgb24gZm9jdXNDZWxsLiAqL1xuICBwcml2YXRlIF9yZXNldEZvY3VzID0gZmFsc2U7XG5cbiAgQHN0YXRlKClcbiAgcHJpdmF0ZSBhY2Nlc3NvciBfaW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIF9sYW5ndWFnZSA9IG5ldyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIodGhpcykud2l0aEhhbmRsZXIoKCkgPT4ge1xuICAgIHRoaXMuX21vbnRoTmFtZXMgPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRNb250aE5hbWVzKCdsb25nJyk7XG4gICAgdGhpcy5fY3JlYXRlTW9udGhSb3dzKCk7XG4gIH0pO1xuICBwcml2YXRlIF9tZWRpYU1hdGNoZXIgPSBuZXcgU2JiTWVkaWFNYXRjaGVyQ29udHJvbGxlcih0aGlzLCB7XG4gICAgW1NiYk1lZGlhUXVlcnlCcmVha3BvaW50TWVkaXVtQW5kQWJvdmVdOiAoKSA9PiB0aGlzLl9pbml0KCksXG4gIH0pO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2NyZWF0ZU1vbnRoUm93cygpO1xuICAgIHRoaXMuX3NldFdlZWtkYXlzKCk7XG4gIH1cblxuICBwcml2YXRlIF9kYXRlRmlsdGVyKGRhdGU6IFQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kYXRlRmlsdGVyPy4oZGF0ZSkgPz8gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBSZXNldHMgdGhlIGFjdGl2ZSBtb250aCBhY2NvcmRpbmcgdG8gdGhlIG5ldyBzdGF0ZSBvZiB0aGUgY2FsZW5kYXIuICovXG4gIHB1YmxpYyByZXNldFBvc2l0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX3Jlc2V0Q2FsZW5kYXJWaWV3KCk7XG4gICAgdGhpcy5faW5pdCgpO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5yZXNldFBvc2l0aW9uKCk7XG4gICAgdGhpcy5mb2N1cyA9ICgpID0+IHtcbiAgICAgIHRoaXMuX3Jlc2V0Rm9jdXMgPSB0cnVlO1xuICAgICAgdGhpcy5fZm9jdXNDZWxsKCk7XG4gICAgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSB3aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLndpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgaWYgKCF0aGlzLl9pbml0aWFsaXplZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ3dpZGUnKSkge1xuICAgICAgdGhpcy5yZXNldFBvc2l0aW9uKCk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygndmlldycpKSB7XG4gICAgICB0aGlzLl9zZXRDaG9zZW5ZZWFyKCk7XG4gICAgICB0aGlzLl9jaG9zZW5Nb250aCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX25leHRDYWxlbmRhclZpZXcgPSB0aGlzLl9jYWxlbmRhclZpZXcgPSB0aGlzLnZpZXc7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgc3VwZXIudXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7XG4gICAgLy8gVGhlIGNhbGVuZGFyIG5lZWRzIHRvIGNhbGN1bGF0ZSB0YWItaW5kZXhlcyBvbiBmaXJzdCByZW5kZXIsXG4gICAgLy8gYW5kIGV2ZXJ5IHRpbWUgYSBkYXRlIGlzIHNlbGVjdGVkIG9yIHRoZSBtb250aCB2aWV3IGNoYW5nZXMuXG4gICAgdGhpcy5fc2V0VGFiSW5kZXgoKTtcbiAgICAvLyBXaGVuIGNoYW5naW5nIHZpZXcgdG8geWVhci9tb250aCwgdGhlIHRhYmluZGV4IGlzIGNoYW5nZWQsIGJ1dCB0aGUgZm9jdXNlZCBlbGVtZW50IGlzIG5vdCxcbiAgICAvLyBzbyBpZiB0aGUgbmF2aWdhdGlvbiBpcyBkb25lIHZpYSBrZXlib2FyZCwgdGhlcmUncyB0aGUgbmVlZFxuICAgIC8vIHRvIGNhbGwgdGhlIGBfZm9jdXNDZWxsKClgIG1ldGhvZCBleHBsaWNpdGx5IHRvIGNvcnJlY3RseSBzZXQgdGhlIGZvY3VzLlxuICAgIGlmIChzYmJJbnB1dE1vZGFsaXR5RGV0ZWN0b3IubW9zdFJlY2VudE1vZGFsaXR5ID09PSAna2V5Ym9hcmQnKSB7XG4gICAgICB0aGlzLl9mb2N1c0NlbGwoKTtcbiAgICB9XG4gIH1cblxuICAvKiogSW5pdGlhbGl6ZXMgdGhlIGNvbXBvbmVudC4gKi9cbiAgcHJpdmF0ZSBfaW5pdChhY3RpdmVEYXRlPzogVCk6IHZvaWQge1xuICAgIC8vIER1ZSB0byBpdHMgY29tcGxleGl0eSwgdGhlIGNhbGVuZGFyIGlzIG9ubHkgaW5pdGlhbGl6ZWQgb24gY2xpZW50IHNpZGVcbiAgICBpZiAoaXNTZXJ2ZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaHlkcmF0aW9uUmVxdWlyZWQpIHtcbiAgICAgIHRoaXMuaHlkcmF0aW9uQ29tcGxldGUudGhlbigoKSA9PiB0aGlzLl9pbml0KCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChhY3RpdmVEYXRlKSB7XG4gICAgICB0aGlzLl9hc3NpZ25BY3RpdmVEYXRlKGFjdGl2ZURhdGUpO1xuICAgIH1cbiAgICB0aGlzLl93aWRlID1cbiAgICAgICh0aGlzLl9tZWRpYU1hdGNoZXIubWF0Y2hlcyhTYmJNZWRpYVF1ZXJ5QnJlYWtwb2ludE1lZGl1bUFuZEFib3ZlKSA/PyBmYWxzZSkgJiYgdGhpcy53aWRlO1xuICAgIHRoaXMuX3dlZWtzID0gdGhpcy5fY3JlYXRlV2Vla1Jvd3ModGhpcy5fYWN0aXZlRGF0ZSk7XG4gICAgdGhpcy5feWVhcnMgPSB0aGlzLl9jcmVhdGVZZWFyUm93cygpO1xuICAgIHRoaXMuX25leHRNb250aFdlZWtzID0gW1tdXTtcbiAgICB0aGlzLl9uZXh0TW9udGhZZWFycyA9IFtbXV07XG4gICAgaWYgKHRoaXMuX3dpZGUpIHtcbiAgICAgIGNvbnN0IG5leHRNb250aERhdGUgPSB0aGlzLl9kYXRlQWRhcHRlci5hZGRDYWxlbmRhck1vbnRocyh0aGlzLl9hY3RpdmVEYXRlLCAxKTtcbiAgICAgIHRoaXMuX25leHRNb250aFdlZWtzID0gdGhpcy5fY3JlYXRlV2Vla1Jvd3MobmV4dE1vbnRoRGF0ZSk7XG4gICAgICB0aGlzLl9uZXh0TW9udGhZZWFycyA9IHRoaXMuX2NyZWF0ZVllYXJSb3dzKFlFQVJTX1BFUl9QQUdFKTtcbiAgICB9XG4gICAgdGhpcy5faW5pdGlhbGl6ZWQgPSB0cnVlO1xuICB9XG5cbiAgLyoqIEZvY3VzZXMgb24gYSBkYXkgY2VsbCBwcmlvcml0aXppbmcgdGhlIHNlbGVjdGVkIGRheSwgdGhlIGN1cnJlbnQgZGF5LCBhbmQgbGFzdGx5LCB0aGUgZmlyc3Qgc2VsZWN0YWJsZSBkYXkuICovXG4gIHByaXZhdGUgX2ZvY3VzQ2VsbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcmVzZXRGb2N1cykge1xuICAgICAgdGhpcy5fZ2V0Rmlyc3RGb2N1c2FibGUoKT8uZm9jdXMoKTtcbiAgICAgIHRoaXMuX3Jlc2V0Rm9jdXMgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKiogQ3JlYXRlcyB0aGUgYXJyYXkgb2Ygd2Vla2RheXMuICovXG4gIHByaXZhdGUgX3NldFdlZWtkYXlzKCk6IHZvaWQge1xuICAgIGNvbnN0IG5hcnJvd1dlZWtkYXlzOiBzdHJpbmdbXSA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldERheU9mV2Vla05hbWVzKCduYXJyb3cnKTtcbiAgICBjb25zdCBsb25nV2Vla2RheXM6IHN0cmluZ1tdID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0RGF5T2ZXZWVrTmFtZXMoJ2xvbmcnKTtcbiAgICBjb25zdCB3ZWVrZGF5czogV2Vla2RheVtdID0gbG9uZ1dlZWtkYXlzLm1hcCgobG9uZzogc3RyaW5nLCBpOiBudW1iZXIpID0+ICh7XG4gICAgICBsb25nLFxuICAgICAgbmFycm93OiBuYXJyb3dXZWVrZGF5c1tpXSxcbiAgICB9KSk7XG5cbiAgICAvLyBSb3RhdGVzIHRoZSBsYWJlbHMgZm9yIGRheXMgb2YgdGhlIHdlZWsgYmFzZWQgb24gdGhlIGNvbmZpZ3VyZWQgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgIGNvbnN0IGZpcnN0RGF5T2ZXZWVrOiBudW1iZXIgPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRGaXJzdERheU9mV2VlaygpO1xuICAgIHRoaXMuX3dlZWtkYXlzID0gd2Vla2RheXMuc2xpY2UoZmlyc3REYXlPZldlZWspLmNvbmNhdCh3ZWVrZGF5cy5zbGljZSgwLCBmaXJzdERheU9mV2VlaykpO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgdGhlIHJvd3MgZm9yIGVhY2ggd2Vlay4gKi9cbiAgcHJpdmF0ZSBfY3JlYXRlV2Vla1Jvd3ModmFsdWU6IFQpOiBEYXlbXVtdIHtcbiAgICBjb25zdCBkYXlzSW5Nb250aDogbnVtYmVyID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TnVtRGF5c0luTW9udGgodmFsdWUpO1xuICAgIGNvbnN0IGRhdGVOYW1lczogc3RyaW5nW10gPSB0aGlzLl9kYXRlQWRhcHRlci5nZXREYXRlTmFtZXMoKTtcbiAgICBjb25zdCB3ZWVrczogRGF5W11bXSA9IFtbXV07XG4gICAgY29uc3Qgd2Vla09mZnNldCA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldEZpcnN0V2Vla09mZnNldCh2YWx1ZSk7XG4gICAgZm9yIChsZXQgaSA9IDAsIGNlbGwgPSB3ZWVrT2Zmc2V0OyBpIDwgZGF5c0luTW9udGg7IGkrKywgY2VsbCsrKSB7XG4gICAgICBpZiAoY2VsbCA9PT0gREFZU19QRVJfUk9XKSB7XG4gICAgICAgIHdlZWtzLnB1c2goW10pO1xuICAgICAgICBjZWxsID0gMDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLl9kYXRlQWRhcHRlci5jcmVhdGVEYXRlKFxuICAgICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHZhbHVlKSxcbiAgICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TW9udGgodmFsdWUpLFxuICAgICAgICBpICsgMSxcbiAgICAgICkhO1xuICAgICAgd2Vla3Nbd2Vla3MubGVuZ3RoIC0gMV0ucHVzaCh7XG4gICAgICAgIHZhbHVlOiB0aGlzLl9kYXRlQWRhcHRlci50b0lzbzg2MDEoZGF0ZSksXG4gICAgICAgIGRheVZhbHVlOiBkYXRlTmFtZXNbaV0sXG4gICAgICAgIG1vbnRoVmFsdWU6IFN0cmluZyh0aGlzLl9kYXRlQWRhcHRlci5nZXRNb250aChkYXRlKSksXG4gICAgICAgIHllYXJWYWx1ZTogU3RyaW5nKHRoaXMuX2RhdGVBZGFwdGVyLmdldFllYXIoZGF0ZSkpLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB3ZWVrcztcbiAgfVxuXG4gIC8qKiBDcmVhdGVzIHRoZSByb3dzIGZvciB0aGUgbW9udGggc2VsZWN0aW9uIHZpZXcuICovXG4gIHByaXZhdGUgX2NyZWF0ZU1vbnRoUm93cygpOiB2b2lkIHtcbiAgICBjb25zdCBzaG9ydE5hbWVzOiBzdHJpbmdbXSA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldE1vbnRoTmFtZXMoJ3Nob3J0Jyk7XG4gICAgY29uc3QgbW9udGhzOiBNb250aFtdID0gbmV3IEFycmF5KDEyKS5maWxsKG51bGwpLm1hcChcbiAgICAgIChfLCBpOiBudW1iZXIpOiBNb250aCA9PiAoe1xuICAgICAgICB2YWx1ZTogc2hvcnROYW1lc1tpXSxcbiAgICAgICAgbG9uZ1ZhbHVlOiB0aGlzLl9tb250aE5hbWVzW2ldLFxuICAgICAgICBtb250aFZhbHVlOiBpICsgMSxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgY29uc3Qgcm93czogbnVtYmVyID0gMTIgLyBNT05USFNfUEVSX1JPVztcbiAgICBjb25zdCBtb250aEFycmF5OiBNb250aFtdW10gPSBbXTtcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICBtb250aEFycmF5LnB1c2gobW9udGhzLnNsaWNlKE1PTlRIU19QRVJfUk9XICogaSwgTU9OVEhTX1BFUl9ST1cgKiAoaSArIDEpKSk7XG4gICAgfVxuICAgIHRoaXMuX21vbnRocyA9IG1vbnRoQXJyYXk7XG4gIH1cblxuICAvKiogQ3JlYXRlcyB0aGUgcm93cyBmb3IgdGhlIHllYXIgc2VsZWN0aW9uIHZpZXcuICovXG4gIHByaXZhdGUgX2NyZWF0ZVllYXJSb3dzKG9mZnNldDogbnVtYmVyID0gMCk6IG51bWJlcltdW10ge1xuICAgIGNvbnN0IHN0YXJ0VmFsdWVZZWFyVmlldzogbnVtYmVyID0gdGhpcy5fZ2V0U3RhcnRWYWx1ZVllYXJWaWV3KCk7XG4gICAgY29uc3QgYWxsWWVhcnM6IG51bWJlcltdID0gbmV3IEFycmF5KFlFQVJTX1BFUl9QQUdFKVxuICAgICAgLmZpbGwoMClcbiAgICAgIC5tYXAoKF8sIGk6IG51bWJlcikgPT4gc3RhcnRWYWx1ZVllYXJWaWV3ICsgb2Zmc2V0ICsgaSk7XG4gICAgY29uc3Qgcm93czogbnVtYmVyID0gWUVBUlNfUEVSX1BBR0UgLyBZRUFSU19QRVJfUk9XO1xuICAgIGNvbnN0IHllYXJBcnJheTogbnVtYmVyW11bXSA9IFtdO1xuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgIHllYXJBcnJheS5wdXNoKGFsbFllYXJzLnNsaWNlKFlFQVJTX1BFUl9ST1cgKiBpLCBZRUFSU19QRVJfUk9XICogKGkgKyAxKSkpO1xuICAgIH1cbiAgICByZXR1cm4geWVhckFycmF5O1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIGZpcnN0IHllYXIgdGhhdCB3aWxsIGJlIHNob3duIGluIHRoZSB5ZWFyIHNlbGVjdGlvbiBwYW5lbC5cbiAgICogSWYgYG1pbkRhdGVgIGFuZCBgbWF4RGF0ZWAgYXJlIGJvdGggbnVsbCwgdGhlIHN0YXJ0aW5nIHllYXIgaXMgY2FsY3VsYXRlZCBhc1xuICAgKiB0aGUgbXVsdGlwbGUgb2YgWUVBUlNfUEVSX1BBR0UgY2xvc2VzdCB0byBhbmQgbGVzcyB0aGFuIGFjdGl2ZURhdGUsXG4gICAqIGUuZy4sIHdpdGggYFlFQVJTX1BFUl9QQUdFYCA9IDI0IGFuZCBgYWN0aXZlRGF0ZWAgPSAyMDIwLCB0aGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gMjAxNiAoMjQgKiA4MyksXG4gICAqIHdoaWxlIHdpdGggYGFjdGl2ZURhdGVgID0gMjAwMCwgdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIDE5OTIgKDI0ICogODIpLlxuICAgKiBJZiBgbWluRGF0ZWAgaXMgbm90IG51bGwsIGl0IHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgeWVhcjsgaWYgYG1heERhdGVgIGlzIG5vdCBudWxsLFxuICAgKiBpdCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHllYXIgbWludXMgYFlFQVJTX1BFUl9QQUdFYCwgc28gdGhhdCB0aGUgYG1heERhdGVgIGlzIHRoZSBsYXN0IHJlbmRlcmVkIHllYXIuXG4gICAqIElmIGJvdGggYXJlIG5vdCBudWxsLCBgbWF4RGF0ZWAgaGFzIHByaW9yaXR5IG92ZXIgYG1pbkRhdGVgLlxuICAgKi9cbiAgcHJpdmF0ZSBfZ2V0U3RhcnRWYWx1ZVllYXJWaWV3KCk6IG51bWJlciB7XG4gICAgbGV0IHN0YXJ0aW5nWWVhciA9IDA7XG4gICAgaWYgKHRoaXMubWF4KSB7XG4gICAgICBzdGFydGluZ1llYXIgPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHRoaXMubWF4KSAtIFlFQVJTX1BFUl9QQUdFICsgMTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubWluKSB7XG4gICAgICBzdGFydGluZ1llYXIgPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHRoaXMubWluKTtcbiAgICB9XG4gICAgY29uc3QgYWN0aXZlWWVhciA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldFllYXIodGhpcy5fYWN0aXZlRGF0ZSk7XG4gICAgcmV0dXJuIChcbiAgICAgIGFjdGl2ZVllYXIgLVxuICAgICAgKCgoKGFjdGl2ZVllYXIgLSBzdGFydGluZ1llYXIpICUgWUVBUlNfUEVSX1BBR0UpICsgWUVBUlNfUEVSX1BBR0UpICUgWUVBUlNfUEVSX1BBR0UpXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBDaGVja3MgaWYgZGF0ZSBpcyB3aXRoaW4gdGhlIG1pbi1tYXggcmFuZ2UuICovXG4gIHByaXZhdGUgX2lzRGF5SW5SYW5nZShkYXRlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMubWluICYmICF0aGlzLm1heCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGlzQmVmb3JlTWluOiBib29sZWFuID1cbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmlzVmFsaWQodGhpcy5taW4pICYmXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5jb21wYXJlRGF0ZSh0aGlzLm1pbiEsIHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKGRhdGUpISkgPiAwO1xuICAgIGNvbnN0IGlzQWZ0ZXJNYXg6IGJvb2xlYW4gPVxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuaXNWYWxpZCh0aGlzLm1heCkgJiZcbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmNvbXBhcmVEYXRlKHRoaXMubWF4ISwgdGhpcy5fZGF0ZUFkYXB0ZXIuZGVzZXJpYWxpemUoZGF0ZSkhKSA8IDA7XG4gICAgcmV0dXJuICEoaXNCZWZvcmVNaW4gfHwgaXNBZnRlck1heCk7XG4gIH1cblxuICBwcml2YXRlIF9pc01vbnRoSW5SYW5nZShtb250aDogbnVtYmVyLCB5ZWFyOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMubWluICYmICF0aGlzLm1heCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgaXNCZWZvcmVNaW46IGJvb2xlYW4gPVxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuaXNWYWxpZCh0aGlzLm1pbikgJiZcbiAgICAgICh5ZWFyIDwgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcih0aGlzLm1pbiEpIHx8XG4gICAgICAgICh5ZWFyID09PSB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHRoaXMubWluISkgJiZcbiAgICAgICAgICBtb250aCA8IHRoaXMuX2RhdGVBZGFwdGVyLmdldE1vbnRoKHRoaXMubWluISkpKTtcblxuICAgIGNvbnN0IGlzQWZ0ZXJNYXg6IGJvb2xlYW4gPVxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuaXNWYWxpZCh0aGlzLm1heCkgJiZcbiAgICAgICh5ZWFyID4gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcih0aGlzLm1heCEpIHx8XG4gICAgICAgICh5ZWFyID09PSB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHRoaXMubWF4ISkgJiZcbiAgICAgICAgICBtb250aCA+IHRoaXMuX2RhdGVBZGFwdGVyLmdldE1vbnRoKHRoaXMubWF4ISkpKTtcblxuICAgIHJldHVybiAhKGlzQmVmb3JlTWluIHx8IGlzQWZ0ZXJNYXgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXNZZWFySW5SYW5nZSh5ZWFyOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMubWluICYmICF0aGlzLm1heCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGlzQmVmb3JlTWluOiBib29sZWFuID1cbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmlzVmFsaWQodGhpcy5taW4pICYmIHRoaXMuX2RhdGVBZGFwdGVyLmdldFllYXIodGhpcy5taW4hKSA+IHllYXI7XG4gICAgY29uc3QgaXNBZnRlck1heDogYm9vbGVhbiA9XG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5pc1ZhbGlkKHRoaXMubWF4KSAmJiB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHRoaXMubWF4ISkgPCB5ZWFyO1xuICAgIHJldHVybiAhKGlzQmVmb3JlTWluIHx8IGlzQWZ0ZXJNYXgpO1xuICB9XG5cbiAgLy8gSW1wbGVtZW50YXRpb24gYWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2NvbXBvbmVudHMvYmxvYi9tYWluL3NyYy9tYXRlcmlhbC9kYXRlcGlja2VyL3llYXItdmlldy50cyNMMzY2XG4gIHByaXZhdGUgX2lzTW9udGhGaWx0ZXJlZE91dChtb250aDogbnVtYmVyLCB5ZWFyOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuZGF0ZUZpbHRlcikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgZmlyc3RPZk1vbnRoID0gdGhpcy5fZGF0ZUFkYXB0ZXIuY3JlYXRlRGF0ZSh5ZWFyLCBtb250aCwgMSkhO1xuICAgIGZvciAoXG4gICAgICBsZXQgZGF0ZTogVCA9IGZpcnN0T2ZNb250aDtcbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmdldE1vbnRoKGRhdGUpID09IG1vbnRoO1xuICAgICAgZGF0ZSA9IHRoaXMuX2RhdGVBZGFwdGVyLmFkZENhbGVuZGFyRGF5cyhkYXRlLCAxKVxuICAgICkge1xuICAgICAgaWYgKHRoaXMuZGF0ZUZpbHRlcihkYXRlKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBJbXBsZW1lbnRhdGlvbiBhZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY29tcG9uZW50cy9ibG9iL21haW4vc3JjL21hdGVyaWFsL2RhdGVwaWNrZXIvbXVsdGkteWVhci12aWV3LnRzI0wzNTFcbiAgcHJpdmF0ZSBfaXNZZWFyRmlsdGVyZWRPdXQoeWVhcjogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmRhdGVGaWx0ZXIpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGZpcnN0T2ZZZWFyID0gdGhpcy5fZGF0ZUFkYXB0ZXIuY3JlYXRlRGF0ZSh5ZWFyLCAxLCAxKSE7XG4gICAgZm9yIChcbiAgICAgIGxldCBkYXRlOiBUID0gZmlyc3RPZlllYXI7XG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKGRhdGUpID09IHllYXI7XG4gICAgICBkYXRlID0gdGhpcy5fZGF0ZUFkYXB0ZXIuYWRkQ2FsZW5kYXJEYXlzKGRhdGUsIDEpXG4gICAgKSB7XG4gICAgICBpZiAodGhpcy5kYXRlRmlsdGVyKGRhdGUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKiBFbWl0cyB0aGUgc2VsZWN0ZWQgZGF0ZSBhbmQgc2V0cyBpdCBpbnRlcm5hbGx5LiAqL1xuICBwcml2YXRlIF9zZWxlY3REYXRlKGRheTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fY2hvc2VuTW9udGggPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fc2V0Q2hvc2VuWWVhcigpO1xuICAgIGlmICh0aGlzLl9zZWxlY3RlZCAhPT0gZGF5KSB7XG4gICAgICB0aGlzLl9zZWxlY3RlZCA9IGRheTtcbiAgICAgIHRoaXMuX2RhdGVTZWxlY3RlZC5lbWl0KHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKGRheSkhKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zZXRDaG9zZW5ZZWFyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnZpZXcgPT09ICdtb250aCcpIHtcbiAgICAgIHRoaXMuX2Nob3NlblllYXIgPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKFxuICAgICAgICB0aGlzLl9kYXRlQWRhcHRlci5kZXNlcmlhbGl6ZSh0aGlzLl9zZWxlY3RlZCkgPz8gdGhpcy5zZWxlY3RlZCA/PyB0aGlzLm5vdyxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2Nob3NlblllYXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfYXNzaWduQWN0aXZlRGF0ZShkYXRlOiBUKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubWluICYmIHRoaXMuX2RhdGVBZGFwdGVyLmNvbXBhcmVEYXRlKHRoaXMubWluLCBkYXRlKSA+IDApIHtcbiAgICAgIHRoaXMuX2FjdGl2ZURhdGUgPSB0aGlzLm1pbjtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMubWF4ICYmIHRoaXMuX2RhdGVBZGFwdGVyLmNvbXBhcmVEYXRlKHRoaXMubWF4LCBkYXRlKSA8IDApIHtcbiAgICAgIHRoaXMuX2FjdGl2ZURhdGUgPSB0aGlzLm1heDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fYWN0aXZlRGF0ZSA9IGRhdGU7XG4gIH1cblxuICAvKiogR29lcyB0byB0aGUgbW9udGggaWRlbnRpZmllZCBieSB0aGUgc2hpZnQuICovXG4gIHByaXZhdGUgX2dvVG9EaWZmZXJlbnRNb250aChtb250aHM6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX2luaXQodGhpcy5fZGF0ZUFkYXB0ZXIuYWRkQ2FsZW5kYXJNb250aHModGhpcy5fYWN0aXZlRGF0ZSwgbW9udGhzKSk7XG4gIH1cblxuICBwcml2YXRlIF9nb1RvRGlmZmVyZW50WWVhcih5ZWFyczogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fY2hvc2VuWWVhciEgKz0geWVhcnM7XG4gICAgLy8gQ2FuJ3QgdXNlIGBfYXNzaWduQWN0aXZlRGF0ZSguLi4pYCBoZXJlLCBiZWNhdXNlIGl0IHdpbGwgc2V0IGl0IHRvIG1pbi9tYXggdmFsdWUgaWYgYXJndW1lbnQgaXMgb3V0IG9mIHJhbmdlXG4gICAgdGhpcy5fYWN0aXZlRGF0ZSA9IHRoaXMuX2RhdGVBZGFwdGVyLmNyZWF0ZURhdGUoXG4gICAgICB0aGlzLl9jaG9zZW5ZZWFyISxcbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmdldE1vbnRoKHRoaXMuX2FjdGl2ZURhdGUpLFxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0RGF0ZSh0aGlzLl9hY3RpdmVEYXRlKSxcbiAgICApO1xuICAgIHRoaXMuX2luaXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2dvVG9EaWZmZXJlbnRZZWFyUmFuZ2UoeWVhcnM6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX2luaXQodGhpcy5fZGF0ZUFkYXB0ZXIuYWRkQ2FsZW5kYXJZZWFycyh0aGlzLl9hY3RpdmVEYXRlLCB5ZWFycykpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcHJldkRpc2FibGVkKHByZXZEYXRlOiBUKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLm1pbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fZGF0ZUFkYXB0ZXIuY29tcGFyZURhdGUocHJldkRhdGUsIHRoaXMubWluKSA8IDA7XG4gIH1cblxuICBwcml2YXRlIF9uZXh0RGlzYWJsZWQobmV4dERhdGU6IFQpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMubWF4KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9kYXRlQWRhcHRlci5jb21wYXJlRGF0ZShuZXh0RGF0ZSwgdGhpcy5tYXgpID4gMDtcbiAgfVxuXG4gIC8qKiBDaGVja3MgaWYgdGhlIFwicHJldmlvdXMgbW9udGhcIiBidXR0b24gc2hvdWxkIGJlIGRpc2FibGVkLiAqL1xuICBwcml2YXRlIF9wcmV2aW91c01vbnRoRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcHJldk1vbnRoID0gdGhpcy5fZGF0ZUFkYXB0ZXIuYWRkQ2FsZW5kYXJEYXlzKFxuICAgICAgdGhpcy5fYWN0aXZlRGF0ZSxcbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmdldERhdGUodGhpcy5fYWN0aXZlRGF0ZSkgKiAtMSxcbiAgICApO1xuICAgIHJldHVybiB0aGlzLl9wcmV2RGlzYWJsZWQocHJldk1vbnRoKTtcbiAgfVxuXG4gIC8qKiBDaGVja3MgaWYgdGhlIFwibmV4dCBtb250aFwiIGJ1dHRvbiBzaG91bGQgYmUgZGlzYWJsZWQuICovXG4gIHByaXZhdGUgX25leHRNb250aERpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIGxldCBuZXh0TW9udGggPSB0aGlzLl9kYXRlQWRhcHRlci5hZGRDYWxlbmRhck1vbnRocyh0aGlzLl9hY3RpdmVEYXRlLCB0aGlzLl93aWRlID8gMiA6IDEpO1xuICAgIG5leHRNb250aCA9IHRoaXMuX2RhdGVBZGFwdGVyLmNyZWF0ZURhdGUoXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKG5leHRNb250aCksXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRNb250aChuZXh0TW9udGgpLFxuICAgICAgMSxcbiAgICApO1xuICAgIHJldHVybiB0aGlzLl9uZXh0RGlzYWJsZWQobmV4dE1vbnRoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3ByZXZpb3VzWWVhckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHByZXZZZWFyID0gdGhpcy5fZGF0ZUFkYXB0ZXIuY3JlYXRlRGF0ZShcbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmdldFllYXIodGhpcy5fYWN0aXZlRGF0ZSkgLSAxLFxuICAgICAgMTIsXG4gICAgICAzMSxcbiAgICApO1xuICAgIHJldHVybiB0aGlzLl9wcmV2RGlzYWJsZWQocHJldlllYXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBfbmV4dFllYXJEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBuZXh0WWVhciA9IHRoaXMuX2RhdGVBZGFwdGVyLmNyZWF0ZURhdGUoXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHRoaXMuX2FjdGl2ZURhdGUpICsgKHRoaXMuX3dpZGUgPyAyIDogMSksXG4gICAgICAxLFxuICAgICAgMSxcbiAgICApO1xuICAgIHJldHVybiB0aGlzLl9uZXh0RGlzYWJsZWQobmV4dFllYXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcHJldmlvdXNZZWFyUmFuZ2VEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBwcmV2WWVhciA9IHRoaXMuX2RhdGVBZGFwdGVyLmNyZWF0ZURhdGUodGhpcy5feWVhcnNbMF1bMF0gLSAxLCAxMiwgMzEpO1xuICAgIHJldHVybiB0aGlzLl9wcmV2RGlzYWJsZWQocHJldlllYXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBfbmV4dFllYXJSYW5nZURpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHllYXJzID0gdGhpcy5fd2lkZSA/IHRoaXMuX25leHRNb250aFllYXJzIDogdGhpcy5feWVhcnM7XG4gICAgY29uc3QgbGFzdFllYXJSYW5nZSA9IHllYXJzW3llYXJzLmxlbmd0aCAtIDFdO1xuICAgIGNvbnN0IGxhc3RZZWFyID0gbGFzdFllYXJSYW5nZVtsYXN0WWVhclJhbmdlLmxlbmd0aCAtIDFdO1xuICAgIGNvbnN0IG5leHRZZWFyID0gdGhpcy5fZGF0ZUFkYXB0ZXIuY3JlYXRlRGF0ZShsYXN0WWVhciArIDEsIDEsIDEpO1xuICAgIHJldHVybiB0aGlzLl9uZXh0RGlzYWJsZWQobmV4dFllYXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlVGFibGVCbHVyKGV2ZW50VGFyZ2V0OiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIGlmIChldmVudFRhcmdldD8ubG9jYWxOYW1lICE9PSAnYnV0dG9uJykge1xuICAgICAgdGhpcy5fc2V0VGFiSW5kZXgoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zZXRUYWJJbmRleCgpOiB2b2lkIHtcbiAgICBBcnJheS5mcm9tKFxuICAgICAgdGhpcy5zaGFkb3dSb290IS5xdWVyeVNlbGVjdG9yQWxsKCcuc2JiLWNhbGVuZGFyX19jZWxsW3RhYmluZGV4PVwiMFwiXScpID8/IFtdLFxuICAgICkuZm9yRWFjaCgoZGF5KSA9PiAoKGRheSBhcyBIVE1MRWxlbWVudCkudGFiSW5kZXggPSAtMSkpO1xuICAgIGNvbnN0IGZpcnN0Rm9jdXNhYmxlID0gdGhpcy5fZ2V0Rmlyc3RGb2N1c2FibGUoKTtcbiAgICBpZiAoZmlyc3RGb2N1c2FibGUpIHtcbiAgICAgIGZpcnN0Rm9jdXNhYmxlLnRhYkluZGV4ID0gMDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9nZXRGaXJzdEZvY3VzYWJsZSgpOiBIVE1MQnV0dG9uRWxlbWVudCB7XG4gICAgY29uc3QgYWN0aXZlID0gdGhpcy5fc2VsZWN0ZWQgPyB0aGlzLl9kYXRlQWRhcHRlci5kZXNlcmlhbGl6ZSh0aGlzLl9zZWxlY3RlZCkhIDogdGhpcy5ub3c7XG4gICAgbGV0IGZpcnN0Rm9jdXNhYmxlID1cbiAgICAgIHRoaXMuc2hhZG93Um9vdCEucXVlcnlTZWxlY3RvcignLnNiYi1jYWxlbmRhcl9fc2VsZWN0ZWQnKSA/P1xuICAgICAgdGhpcy5zaGFkb3dSb290IS5xdWVyeVNlbGVjdG9yKFxuICAgICAgICBgW2RhdGEtZGF5PVwiJHt0aGlzLl9kYXRlQWRhcHRlci5nZXREYXRlKGFjdGl2ZSl9ICR7dGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TW9udGgoXG4gICAgICAgICAgYWN0aXZlLFxuICAgICAgICApfSAke3RoaXMuX2RhdGVBZGFwdGVyLmdldFllYXIoYWN0aXZlKX1cIl1gLFxuICAgICAgKSA/P1xuICAgICAgdGhpcy5zaGFkb3dSb290IS5xdWVyeVNlbGVjdG9yKGBbZGF0YS1tb250aD1cIiR7dGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TW9udGgoYWN0aXZlKX1cIl1gKSA/P1xuICAgICAgdGhpcy5zaGFkb3dSb290IS5xdWVyeVNlbGVjdG9yKGBbZGF0YS15ZWFyPVwiJHt0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKGFjdGl2ZSl9XCJdYCk7XG4gICAgaWYgKCFmaXJzdEZvY3VzYWJsZSB8fCAoZmlyc3RGb2N1c2FibGUgYXMgSFRNTEJ1dHRvbkVsZW1lbnQpPy5kaXNhYmxlZCkge1xuICAgICAgZmlyc3RGb2N1c2FibGUgPSB0aGlzLnNoYWRvd1Jvb3QhLnF1ZXJ5U2VsZWN0b3IoJy5zYmItY2FsZW5kYXJfX2NlbGw6bm90KFtkaXNhYmxlZF0pJyk7XG4gICAgfVxuICAgIHJldHVybiAoZmlyc3RGb2N1c2FibGUgYXMgSFRNTEJ1dHRvbkVsZW1lbnQpIHx8IG51bGw7XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVLZXlib2FyZEV2ZW50KGV2ZW50OiBLZXlib2FyZEV2ZW50LCBkYXk/OiBEYXkpOiB2b2lkIHtcbiAgICBpZiAoaXNBcnJvd0tleU9yUGFnZUtleXNQcmVzc2VkKGV2ZW50KSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgLy8gR2V0cyB0aGUgY3VycmVudGx5IHJlbmRlcmVkIHRhYmxlJ3MgY2VsbDtcbiAgICAvLyB0aGV5IGNvdWxkIGJlIGRheXMsIG1vbnRocyBvciB5ZWFycyBiYXNlZCBvbiB0aGUgY3VycmVudCBzZWxlY3Rpb24gdmlldy5cbiAgICAvLyBJZiBgd2lkZWAgaXMgdHJ1ZSwgeWVhcnMgYXJlIGRvdWJsZWQgaW4gbnVtYmVyIGFuZCBkYXlzIGFyZSAocm91Z2hseSkgZG91YmxlZCB0b28sIGFmZmVjdGluZyB0aGUgYGluZGV4YCBjYWxjdWxhdGlvbi5cbiAgICBjb25zdCBjZWxsczogSFRNTEJ1dHRvbkVsZW1lbnRbXSA9IHRoaXMuX2NlbGxzO1xuICAgIGNvbnN0IGluZGV4OiBudW1iZXIgPSBjZWxscy5maW5kSW5kZXgoKGU6IEhUTUxCdXR0b25FbGVtZW50KSA9PiBlID09PSBldmVudC50YXJnZXQpO1xuICAgIGNvbnN0IG5leHRFbDogSFRNTEJ1dHRvbkVsZW1lbnQgPSB0aGlzLl9uYXZpZ2F0ZUJ5S2V5Ym9hcmQoZXZlbnQsIGluZGV4LCBjZWxscywgZGF5KTtcbiAgICBjb25zdCBhY3RpdmVFbDogSFRNTEJ1dHRvbkVsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3QhLmFjdGl2ZUVsZW1lbnQgYXMgSFRNTEJ1dHRvbkVsZW1lbnQ7XG4gICAgaWYgKG5leHRFbCAhPT0gYWN0aXZlRWwpIHtcbiAgICAgIChuZXh0RWwgYXMgSFRNTEJ1dHRvbkVsZW1lbnQpLnRhYkluZGV4ID0gMDtcbiAgICAgIG5leHRFbD8uZm9jdXMoKTtcbiAgICAgIChhY3RpdmVFbCBhcyBIVE1MQnV0dG9uRWxlbWVudCkudGFiSW5kZXggPSAtMTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgaW5kZXggb2YgdGhlIGVsZW1lbnQgdG8gbW92ZSB0bywgYmFzZWQgb24gYSBsaXN0IG9mIGVsZW1lbnRzICh3aGljaCBjYW4gYmUgcG90ZW50aWFsbHkgZGlzYWJsZWQpLFxuICAgKiB0aGUga2V5Ym9hcmQgaW5wdXQgYW5kIHRoZSBwb3NpdGlvbiBvZiB0aGUgY3VycmVudCBlbGVtZW50IGluIHRoZSBsaXN0LlxuICAgKiBJbiB0aGUgZGF5IHZpZXcsIHRoZSBgZGF5PzogRGF5YCBwYXJhbWV0ZXIgaXMgbWFuZGF0b3J5IGZvciBjYWxjdWxhdGlvbixcbiAgICogd2hpbGUgaW4gbW9udGggYW5kIHllYXIgdmlldyBpdCdzIG5vdCBkdWUgdG8gdGhlIGZpeGVkIGFtb3VudCBvZiByZW5kZXJlZCBjZWxscy5cbiAgICovXG4gIHByaXZhdGUgX25hdmlnYXRlQnlLZXlib2FyZChcbiAgICBldnQ6IEtleWJvYXJkRXZlbnQsXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBjZWxsczogSFRNTEJ1dHRvbkVsZW1lbnRbXSxcbiAgICBkYXk/OiBEYXksXG4gICk6IEhUTUxCdXR0b25FbGVtZW50IHtcbiAgICBjb25zdCB7XG4gICAgICBlbGVtZW50SW5kZXhGb3JXaWRlTW9kZSxcbiAgICAgIG9mZnNldEZvcldpZGVNb2RlLFxuICAgICAgbGFzdEVsZW1lbnRJbmRleEZvcldpZGVNb2RlLFxuICAgICAgdmVydGljYWxPZmZzZXQsXG4gICAgfTogQ2FsZW5kYXJLZXlib2FyZE5hdmlnYXRpb25QYXJhbWV0ZXJzID0gdGhpcy5fY2FsY3VsYXRlUGFyYW1ldGVyc0ZvcktleWJvYXJkTmF2aWdhdGlvbihcbiAgICAgIGNlbGxzLFxuICAgICAgaW5kZXgsXG4gICAgICBkYXksXG4gICAgKTtcblxuICAgIHN3aXRjaCAoZXZ0LmtleSkge1xuICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgIHJldHVybiB0aGlzLl9maW5kTmV4dChjZWxscywgaW5kZXgsIC12ZXJ0aWNhbE9mZnNldCk7XG4gICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgICByZXR1cm4gdGhpcy5fZmluZE5leHQoY2VsbHMsIGluZGV4LCB2ZXJ0aWNhbE9mZnNldCk7XG4gICAgICBjYXNlICdBcnJvd0xlZnQnOlxuICAgICAgICByZXR1cm4gdGhpcy5fZmluZE5leHQoY2VsbHMsIGluZGV4LCAtMSk7XG4gICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmROZXh0KGNlbGxzLCBpbmRleCwgMSk7XG4gICAgICBjYXNlICdIb21lJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmRGaXJzdChjZWxscywgb2Zmc2V0Rm9yV2lkZU1vZGUpO1xuICAgICAgY2FzZSAnUGFnZVVwJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmRGaXJzdE9uQ29sdW1uKFxuICAgICAgICAgIGNlbGxzLFxuICAgICAgICAgIGVsZW1lbnRJbmRleEZvcldpZGVNb2RlLFxuICAgICAgICAgIG9mZnNldEZvcldpZGVNb2RlLFxuICAgICAgICAgIHZlcnRpY2FsT2Zmc2V0LFxuICAgICAgICApO1xuICAgICAgY2FzZSAnUGFnZURvd24nOlxuICAgICAgICByZXR1cm4gdGhpcy5fZmluZExhc3RPbkNvbHVtbihjZWxscywgaW5kZXgsIGxhc3RFbGVtZW50SW5kZXhGb3JXaWRlTW9kZSwgdmVydGljYWxPZmZzZXQpO1xuICAgICAgY2FzZSAnRW5kJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmRMYXN0KGNlbGxzLCBsYXN0RWxlbWVudEluZGV4Rm9yV2lkZU1vZGUgLSAxKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBjZWxsc1tpbmRleF07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIHBhcmFtZXRlciBuZWVkZWQgaW4ga2V5Ym9hcmQgbmF2aWdhdGlvbi5cbiAgICogU2luY2UgdGhyZWUgdmlld3MgYXJlIG5vdyBhdmFpbGFibGUsIHRoZSBmdW5jdGlvbiBjcmVhdGVzIGFuZCByZXR1cm5zIHRoZSBjb3JyZWN0IHBhcmFtZXRlcnMgZm9yIGVhY2ggb2YgdGhlbVxuICAgKiBieSBjb25zaWRlcmluZyB0aGUgbnVtYmVyIG9mIGNlbGxzIHBlciBlYWNoIHJvdyBhbmQgdGhlIGNvcnJlY3Rpb24gZm9yIHRoZSB3aWRlIG1vZGUuXG4gICAqIEBwYXJhbSBjZWxscyBUaGUgYXJyYXkgb2YgcmVuZGVyZWQgdGFibGUgY2VsbHM7IHRoZXkgYXJlIGJ1dHRvbnMgdGhhdCBjYW4gcmVwcmVzZW50IGRheXMsIG1vbnRocyBvciB5ZWFycy5cbiAgICogQHBhcmFtIGluZGV4IFRoZSBzdGFydGluZyBlbGVtZW50J3MgaW5kZXggaW4gdGhlIGNlbGwgYXJyYXkuXG4gICAqIEBwYXJhbSBkYXkgKG9wdGlvbmFsKSBPbmx5IGluIHRoZSBkYXkgdmlldywgdGhlIGRheSByZXByZXNlbnRlZCBieSB0aGUgc3RhcnRpbmcgY2VsbC5cbiAgICovXG4gIHByaXZhdGUgX2NhbGN1bGF0ZVBhcmFtZXRlcnNGb3JLZXlib2FyZE5hdmlnYXRpb24oXG4gICAgY2VsbHM6IEhUTUxCdXR0b25FbGVtZW50W10sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBkYXk/OiBEYXksXG4gICk6IENhbGVuZGFyS2V5Ym9hcmROYXZpZ2F0aW9uUGFyYW1ldGVycyB7XG4gICAgc3dpdGNoICh0aGlzLl9jYWxlbmRhclZpZXcpIHtcbiAgICAgIGNhc2UgJ2RheSc6IHtcbiAgICAgICAgY29uc3QgaW5kZXhJblZpZXcgPSArZGF5IS5kYXlWYWx1ZSAtIDE7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdmVydGljYWxPZmZzZXQ6IERBWVNfUEVSX1JPVyxcbiAgICAgICAgICBlbGVtZW50SW5kZXhGb3JXaWRlTW9kZTogaW5kZXhJblZpZXcsXG4gICAgICAgICAgb2Zmc2V0Rm9yV2lkZU1vZGU6IGluZGV4IC0gaW5kZXhJblZpZXcsXG4gICAgICAgICAgbGFzdEVsZW1lbnRJbmRleEZvcldpZGVNb2RlOlxuICAgICAgICAgICAgaW5kZXggPT09IGluZGV4SW5WaWV3XG4gICAgICAgICAgICAgID8gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TnVtRGF5c0luTW9udGgoXG4gICAgICAgICAgICAgICAgICB0aGlzLl9kYXRlQWRhcHRlci5hZGRDYWxlbmRhck1vbnRocyhcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZGVzZXJpYWxpemUoZGF5IS52YWx1ZSkhLFxuICAgICAgICAgICAgICAgICAgICAtMSxcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IGNlbGxzLmxlbmd0aCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIC8vIE1vbnRoIHZpZXcgaXMgbm90IGRlcGVuZGVudCBmcm9tIGB3aWRlYCB2YWx1ZSwgc28gc29tZSBwYXJhbWV0ZXJzIGFyZSBmaXhlZC5cbiAgICAgIGNhc2UgJ21vbnRoJzoge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHZlcnRpY2FsT2Zmc2V0OiBNT05USFNfUEVSX1JPVyxcbiAgICAgICAgICBlbGVtZW50SW5kZXhGb3JXaWRlTW9kZTogaW5kZXgsXG4gICAgICAgICAgb2Zmc2V0Rm9yV2lkZU1vZGU6IDAsXG4gICAgICAgICAgbGFzdEVsZW1lbnRJbmRleEZvcldpZGVNb2RlOiAxMixcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3llYXInOiB7XG4gICAgICAgIGNvbnN0IG9mZnNldDogbnVtYmVyID0gTWF0aC50cnVuYyhpbmRleCAvIFlFQVJTX1BFUl9QQUdFKSAqIFlFQVJTX1BFUl9QQUdFO1xuICAgICAgICBjb25zdCBpbmRleEluVmlldzogbnVtYmVyID0gb2Zmc2V0ID09PSAwID8gaW5kZXggOiBpbmRleCAtIFlFQVJTX1BFUl9QQUdFO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHZlcnRpY2FsT2Zmc2V0OiBZRUFSU19QRVJfUk9XLFxuICAgICAgICAgIGVsZW1lbnRJbmRleEZvcldpZGVNb2RlOiBpbmRleEluVmlldyxcbiAgICAgICAgICBvZmZzZXRGb3JXaWRlTW9kZTogaW5kZXggLSBpbmRleEluVmlldyxcbiAgICAgICAgICBsYXN0RWxlbWVudEluZGV4Rm9yV2lkZU1vZGU6IG9mZnNldCA9PT0gMCA/IFlFQVJTX1BFUl9QQUdFIDogWUVBUlNfUEVSX1BBR0UgKiAyLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBuZXh0IGVsZW1lbnQgb2YgdGhlIHByb3ZpZGVkIGFycmF5IHN0YXJ0aW5nIGZyb20gYGluZGV4YCBieSBhZGRpbmcgYGRlbHRhYC5cbiAgICogSWYgdGhlIGZvdW5kIGVsZW1lbnQgaXMgZGlzYWJsZWQsIGl0IGNvbnRpbnVlcyBhZGRpbmcgYGRlbHRhYCB1bnRpbCBpdCBmaW5kcyBhbiBlbmFibGVkIG9uZSBpbiB0aGUgYXJyYXkgYm91bmRzLlxuICAgKi9cbiAgcHJpdmF0ZSBfZmluZE5leHQoZGF5czogSFRNTEJ1dHRvbkVsZW1lbnRbXSwgaW5kZXg6IG51bWJlciwgZGVsdGE6IG51bWJlcik6IEhUTUxCdXR0b25FbGVtZW50IHtcbiAgICBsZXQgbmV4dEluZGV4ID0gaW5kZXggKyBkZWx0YTtcbiAgICB3aGlsZSAobmV4dEluZGV4IDwgZGF5cy5sZW5ndGggJiYgZGF5c1tuZXh0SW5kZXhdPy5kaXNhYmxlZCkge1xuICAgICAgbmV4dEluZGV4ICs9IGRlbHRhO1xuICAgIH1cbiAgICByZXR1cm4gZGF5c1tuZXh0SW5kZXhdID8/IGRheXNbaW5kZXhdO1xuICB9XG5cbiAgLyoqIEZpbmQgdGhlIGZpcnN0IGVuYWJsZWQgZWxlbWVudCBpbiB0aGUgcHJvdmlkZWQgYXJyYXkuICovXG4gIHByaXZhdGUgX2ZpbmRGaXJzdChkYXlzOiBIVE1MQnV0dG9uRWxlbWVudFtdLCBmaXJzdE9mQ3VycmVudE1vbnRoOiBudW1iZXIpOiBIVE1MQnV0dG9uRWxlbWVudCB7XG4gICAgcmV0dXJuICFkYXlzW2ZpcnN0T2ZDdXJyZW50TW9udGhdLmRpc2FibGVkXG4gICAgICA/IGRheXNbZmlyc3RPZkN1cnJlbnRNb250aF1cbiAgICAgIDogdGhpcy5fZmluZE5leHQoZGF5cywgZmlyc3RPZkN1cnJlbnRNb250aCwgMSk7XG4gIH1cblxuICAvKiogRmluZCB0aGUgbGFzdCBlbmFibGVkIGVsZW1lbnQgaW4gdGhlIHByb3ZpZGVkIGFycmF5LiAqL1xuICBwcml2YXRlIF9maW5kTGFzdChkYXlzOiBIVE1MQnV0dG9uRWxlbWVudFtdLCBsYXN0T2ZDdXJyZW50TW9udGg6IG51bWJlcik6IEhUTUxCdXR0b25FbGVtZW50IHtcbiAgICByZXR1cm4gIWRheXNbbGFzdE9mQ3VycmVudE1vbnRoXS5kaXNhYmxlZFxuICAgICAgPyBkYXlzW2xhc3RPZkN1cnJlbnRNb250aF1cbiAgICAgIDogdGhpcy5fZmluZE5leHQoZGF5cywgbGFzdE9mQ3VycmVudE1vbnRoLCAtMSk7XG4gIH1cblxuICAvKiogRmluZCB0aGUgZmlyc3QgZW5hYmxlZCBlbGVtZW50IGluIHRoZSBzYW1lIGNvbHVtbiBvZiB0aGUgcHJvdmlkZWQgYXJyYXkuICovXG4gIHByaXZhdGUgX2ZpbmRGaXJzdE9uQ29sdW1uKFxuICAgIGRheXM6IEhUTUxCdXR0b25FbGVtZW50W10sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBvZmZzZXQ6IG51bWJlcixcbiAgICB2ZXJ0aWNhbE9mZnNldDogbnVtYmVyLFxuICApOiBIVE1MQnV0dG9uRWxlbWVudCB7XG4gICAgY29uc3QgbmV4dEluZGV4ID0gKGluZGV4ICUgdmVydGljYWxPZmZzZXQpICsgb2Zmc2V0O1xuICAgIHJldHVybiAhZGF5c1tuZXh0SW5kZXhdLmRpc2FibGVkXG4gICAgICA/IGRheXNbbmV4dEluZGV4XVxuICAgICAgOiB0aGlzLl9maW5kTmV4dChkYXlzLCBuZXh0SW5kZXgsIHZlcnRpY2FsT2Zmc2V0KTtcbiAgfVxuXG4gIC8qKiBGaW5kIHRoZSBsYXN0IGVuYWJsZWQgZWxlbWVudCBpbiB0aGUgc2FtZSBjb2x1bW4gb2YgdGhlIHByb3ZpZGVkIGFycmF5LiAqL1xuICBwcml2YXRlIF9maW5kTGFzdE9uQ29sdW1uKFxuICAgIGRheXM6IEhUTUxCdXR0b25FbGVtZW50W10sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBvZmZzZXQ6IG51bWJlcixcbiAgICB2ZXJ0aWNhbE9mZnNldDogbnVtYmVyLFxuICApOiBIVE1MQnV0dG9uRWxlbWVudCB7XG4gICAgY29uc3QgbmV4dEluZGV4ID0gaW5kZXggKyBNYXRoLnRydW5jKChvZmZzZXQgLSBpbmRleCAtIDEpIC8gdmVydGljYWxPZmZzZXQpICogdmVydGljYWxPZmZzZXQ7XG4gICAgcmV0dXJuICFkYXlzW25leHRJbmRleF0uZGlzYWJsZWRcbiAgICAgID8gZGF5c1tuZXh0SW5kZXhdXG4gICAgICA6IHRoaXMuX2ZpbmROZXh0KGRheXMsIG5leHRJbmRleCwgLXZlcnRpY2FsT2Zmc2V0KTtcbiAgfVxuXG4gIHByaXZhdGUgX3Jlc2V0Q2FsZW5kYXJWaWV3KGluaXRUcmFuc2l0aW9uID0gZmFsc2UpOiB2b2lkIHtcbiAgICB0aGlzLl9yZXNldEZvY3VzID0gdHJ1ZTtcbiAgICB0aGlzLl9hY3RpdmVEYXRlID0gdGhpcy5zZWxlY3RlZCA/PyB0aGlzLm5vdztcbiAgICB0aGlzLl9zZXRDaG9zZW5ZZWFyKCk7XG4gICAgdGhpcy5fY2hvc2VuTW9udGggPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fbmV4dENhbGVuZGFyVmlldyA9IHRoaXMuX2NhbGVuZGFyVmlldyA9IHRoaXMudmlldztcblxuICAgIGlmIChpbml0VHJhbnNpdGlvbikge1xuICAgICAgdGhpcy5fc3RhcnRUYWJsZVRyYW5zaXRpb24oKTtcbiAgICB9XG4gIH1cblxuICAvKiogUmVuZGVyIHRoZSB2aWV3IGZvciB0aGUgZGF5IHNlbGVjdGlvbi4gKi9cbiAgcHJpdmF0ZSBfcmVuZGVyRGF5VmlldygpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgY29uc3QgbmV4dE1vbnRoQWN0aXZlRGF0ZSA9IHRoaXMuX3dpZGVcbiAgICAgID8gdGhpcy5fZGF0ZUFkYXB0ZXIuYWRkQ2FsZW5kYXJNb250aHModGhpcy5fYWN0aXZlRGF0ZSwgMSlcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1jYWxlbmRhcl9fY29udHJvbHNcIj5cbiAgICAgICAgJHt0aGlzLl9nZXRBcnJvdyhcbiAgICAgICAgICAnbGVmdCcsXG4gICAgICAgICAgKCkgPT4gdGhpcy5fZ29Ub0RpZmZlcmVudE1vbnRoKC0xKSxcbiAgICAgICAgICBpMThuUHJldmlvdXNNb250aFt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XSxcbiAgICAgICAgICB0aGlzLl9wcmV2aW91c01vbnRoRGlzYWJsZWQoKSxcbiAgICAgICAgKX1cbiAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1jYWxlbmRhcl9fY29udHJvbHMtbW9udGhcIj5cbiAgICAgICAgICAke3RoaXMuX2NyZWF0ZUxhYmVsRm9yRGF5Vmlldyh0aGlzLl9hY3RpdmVEYXRlKX1cbiAgICAgICAgICAke3RoaXMuX3dpZGUgPyB0aGlzLl9jcmVhdGVMYWJlbEZvckRheVZpZXcobmV4dE1vbnRoQWN0aXZlRGF0ZSEpIDogbm90aGluZ31cbiAgICAgICAgICA8c2JiLXNjcmVlbi1yZWFkZXItb25seSByb2xlPVwic3RhdHVzXCI+XG4gICAgICAgICAgICAke3RoaXMuX2NyZWF0ZUFyaWFMYWJlbEZvckRheVZpZXcodGhpcy5fYWN0aXZlRGF0ZSwgbmV4dE1vbnRoQWN0aXZlRGF0ZSEpfVxuICAgICAgICAgIDwvc2JiLXNjcmVlbi1yZWFkZXItb25seT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgICR7dGhpcy5fZ2V0QXJyb3coXG4gICAgICAgICAgJ3JpZ2h0JyxcbiAgICAgICAgICAoKSA9PiB0aGlzLl9nb1RvRGlmZmVyZW50TW9udGgoMSksXG4gICAgICAgICAgaTE4bk5leHRNb250aFt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XSxcbiAgICAgICAgICB0aGlzLl9uZXh0TW9udGhEaXNhYmxlZCgpLFxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZS1jb250YWluZXIgc2JiLWNhbGVuZGFyX190YWJsZS1kYXktdmlld1wiPlxuICAgICAgICAke3RoaXMuX2NyZWF0ZURheVRhYmxlKHRoaXMuX3dlZWtzKX1cbiAgICAgICAgJHt0aGlzLl93aWRlID8gdGhpcy5fY3JlYXRlRGF5VGFibGUodGhpcy5fbmV4dE1vbnRoV2Vla3MpIDogbm90aGluZ31cbiAgICAgIDwvZGl2PlxuICAgIGA7XG4gIH1cblxuICAvKiogQ3JlYXRlcyB0aGUgbGFiZWwgd2l0aCB0aGUgbW9udGggZm9yIHRoZSBkYWlseSB2aWV3LiAqL1xuICBwcml2YXRlIF9jcmVhdGVMYWJlbEZvckRheVZpZXcoZDogVCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICBjb25zdCBtb250aExhYmVsID0gYCR7XG4gICAgICB0aGlzLl9tb250aE5hbWVzW3RoaXMuX2RhdGVBZGFwdGVyLmdldE1vbnRoKGQpIC0gMV1cbiAgICB9ICR7dGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcihkKX1gO1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJzYmItY2FsZW5kYXJfX2RhdGUtc2VsZWN0aW9uIHNiYi1jYWxlbmRhcl9fY29udHJvbHMtY2hhbmdlLWRhdGVcIlxuICAgICAgICBhcmlhLWxhYmVsPVwiJHtpMThuWWVhck1vbnRoU2VsZWN0aW9uW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfSAke21vbnRoTGFiZWx9XCJcbiAgICAgICAgQGNsaWNrPSR7KCkgPT4ge1xuICAgICAgICAgIHRoaXMuX3Jlc2V0Rm9jdXMgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuX25leHRDYWxlbmRhclZpZXcgPSAneWVhcic7XG4gICAgICAgICAgdGhpcy5fc3RhcnRUYWJsZVRyYW5zaXRpb24oKTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgJHttb250aExhYmVsfVxuICAgICAgICA8c2JiLWljb24gbmFtZT1cImNoZXZyb24tc21hbGwtZG93bi1zbWFsbFwiPjwvc2JiLWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICBgO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgdGhlIGFyaWEtbGFiZWwgZm9yIHRoZSBkYWlseSB2aWV3LiAqL1xuICBwcml2YXRlIF9jcmVhdGVBcmlhTGFiZWxGb3JEYXlWaWV3KC4uLmRhdGVzOiBUW10pOiBzdHJpbmcge1xuICAgIGxldCBtb250aExhYmVsID0gJyc7XG4gICAgZm9yIChjb25zdCBkIG9mIGRhdGVzKSB7XG4gICAgICBpZiAoZCkge1xuICAgICAgICBtb250aExhYmVsICs9IGAke1xuICAgICAgICAgIHRoaXMuX21vbnRoTmFtZXNbdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TW9udGgoZCkgLSAxXVxuICAgICAgICB9ICR7dGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcihkKX0gYDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1vbnRoTGFiZWw7XG4gIH1cblxuICAvKiogQ3JlYXRlcyB0aGUgY2FsZW5kYXIgdGFibGUgZm9yIHRoZSBkYWlseSB2aWV3LiAqL1xuICBwcml2YXRlIF9jcmVhdGVEYXlUYWJsZSh3ZWVrczogRGF5W11bXSk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDx0YWJsZVxuICAgICAgICBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGVcIlxuICAgICAgICBAZm9jdXNvdXQ9JHsoZXZlbnQ6IEZvY3VzRXZlbnQpID0+XG4gICAgICAgICAgdGhpcy5faGFuZGxlVGFibGVCbHVyKGV2ZW50LnJlbGF0ZWRUYXJnZXQgYXMgSFRNTEVsZW1lbnQpfVxuICAgICAgICBAYW5pbWF0aW9uZW5kPSR7KGU6IEFuaW1hdGlvbkV2ZW50KSA9PiB0aGlzLl90YWJsZUFuaW1hdGlvbkVuZChlKX1cbiAgICAgID5cbiAgICAgICAgPHRoZWFkIGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZS1oZWFkZXJcIj5cbiAgICAgICAgICA8dHIgY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlLWhlYWRlci1yb3dcIj5cbiAgICAgICAgICAgICR7dGhpcy5fY3JlYXRlRGF5VGFibGVIZWFkZXIoKX1cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3RoZWFkPlxuICAgICAgICA8dGJvZHkgY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlLWJvZHlcIj5cbiAgICAgICAgICAke3RoaXMuX2NyZWF0ZURheVRhYmxlQm9keSh3ZWVrcyl9XG4gICAgICAgIDwvdGJvZHk+XG4gICAgICA8L3RhYmxlPlxuICAgIGA7XG4gIH1cblxuICAvKiogQ3JlYXRlcyB0aGUgdGFibGUgaGVhZGVyIHdpdGggdGhlIG1vbnRoIGhlYWRlciBjZWxscy4gKi9cbiAgcHJpdmF0ZSBfY3JlYXRlRGF5VGFibGVIZWFkZXIoKTogVGVtcGxhdGVSZXN1bHRbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzLm1hcChcbiAgICAgIChkYXk6IFdlZWtkYXkpID0+IGh0bWxgXG4gICAgICAgIDx0aCBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtaGVhZGVyXCI+XG4gICAgICAgICAgPHNiYi1zY3JlZW4tcmVhZGVyLW9ubHk+JHtkYXkubG9uZ308L3NiYi1zY3JlZW4tcmVhZGVyLW9ubHk+XG4gICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JHtkYXkubmFycm93fTwvc3Bhbj5cbiAgICAgICAgPC90aD5cbiAgICAgIGAsXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBDcmVhdGVzIHRoZSB0YWJsZSBib2R5IHdpdGggdGhlIGRheSBjZWxscy4gRm9yIHRoZSBmaXJzdCByb3csIGl0IGFsc28gY29uc2lkZXJzIHRoZSBwb3NzaWJsZSBkYXkncyBvZmZzZXQuICovXG4gIHByaXZhdGUgX2NyZWF0ZURheVRhYmxlQm9keSh3ZWVrczogRGF5W11bXSk6IFRlbXBsYXRlUmVzdWx0W10ge1xuICAgIGNvbnN0IHRvZGF5OiBzdHJpbmcgPSB0aGlzLl9kYXRlQWRhcHRlci50b0lzbzg2MDEodGhpcy5ub3cpO1xuICAgIHJldHVybiB3ZWVrcy5tYXAoKHdlZWs6IERheVtdLCByb3dJbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCBmaXJzdFJvd09mZnNldDogbnVtYmVyID0gREFZU19QRVJfUk9XIC0gd2Vlay5sZW5ndGg7XG4gICAgICBpZiAocm93SW5kZXggPT09IDAgJiYgZmlyc3RSb3dPZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIGh0bWxgXG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgJHtbLi4uQXJyYXkoZmlyc3RSb3dPZmZzZXQpLmtleXMoKV0ubWFwKFxuICAgICAgICAgICAgICAoKSA9PlxuICAgICAgICAgICAgICAgIGh0bWxgPHRkXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtZGF0YVwiXG4gICAgICAgICAgICAgICAgICBkYXRhLWRheT0ke2AwICR7d2Vla1swXS5tb250aFZhbHVlfSAke3dlZWtbMF0ueWVhclZhbHVlfWB9XG4gICAgICAgICAgICAgICAgPjwvdGQ+YCxcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICAke3RoaXMuX2NyZWF0ZURheUNlbGxzKHdlZWssIHRvZGF5KX1cbiAgICAgICAgICA8L3RyPlxuICAgICAgICBgO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGh0bWxgPHRyPlxuICAgICAgICAke3RoaXMuX2NyZWF0ZURheUNlbGxzKHdlZWssIHRvZGF5KX1cbiAgICAgIDwvdHI+YDtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBDcmVhdGVzIHRoZSBjZWxscyBmb3IgdGhlIGRhaWx5IHZpZXcuICovXG4gIHByaXZhdGUgX2NyZWF0ZURheUNlbGxzKHdlZWs6IERheVtdLCB0b2RheTogc3RyaW5nKTogVGVtcGxhdGVSZXN1bHRbXSB7XG4gICAgcmV0dXJuIHdlZWsubWFwKChkYXk6IERheSkgPT4ge1xuICAgICAgY29uc3QgaXNPdXRPZlJhbmdlID0gIXRoaXMuX2lzRGF5SW5SYW5nZShkYXkudmFsdWUpO1xuICAgICAgY29uc3QgaXNGaWx0ZXJlZE91dCA9ICF0aGlzLl9kYXRlRmlsdGVyKHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKGRheS52YWx1ZSkhKTtcbiAgICAgIGNvbnN0IHNlbGVjdGVkOiBib29sZWFuID0gISF0aGlzLl9zZWxlY3RlZCAmJiBkYXkudmFsdWUgPT09IHRoaXMuX3NlbGVjdGVkO1xuICAgICAgY29uc3QgZGF5VmFsdWUgPSBgJHtkYXkuZGF5VmFsdWV9ICR7ZGF5Lm1vbnRoVmFsdWV9ICR7ZGF5LnllYXJWYWx1ZX1gO1xuICAgICAgY29uc3QgaXNUb2RheSA9IGRheS52YWx1ZSA9PT0gdG9kYXk7XG4gICAgICByZXR1cm4gaHRtbGBcbiAgICAgICAgPHRkXG4gICAgICAgICAgY2xhc3M9JHtjbGFzc01hcCh7XG4gICAgICAgICAgICAnc2JiLWNhbGVuZGFyX190YWJsZS1kYXRhJzogdHJ1ZSxcbiAgICAgICAgICAgICdzYmItY2FsZW5kYXJfX3RhYmxlLWRhdGEtc2VsZWN0ZWQnOiBzZWxlY3RlZCxcbiAgICAgICAgICB9KX1cbiAgICAgICAgPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPSR7Y2xhc3NNYXAoe1xuICAgICAgICAgICAgICAnc2JiLWNhbGVuZGFyX19jZWxsJzogdHJ1ZSxcbiAgICAgICAgICAgICAgJ3NiYi1jYWxlbmRhcl9fZGF5JzogdHJ1ZSxcbiAgICAgICAgICAgICAgJ3NiYi1jYWxlbmRhcl9fY2VsbC1jdXJyZW50JzogaXNUb2RheSxcbiAgICAgICAgICAgICAgJ3NiYi1jYWxlbmRhcl9fc2VsZWN0ZWQnOiBzZWxlY3RlZCxcbiAgICAgICAgICAgICAgJ3NiYi1jYWxlbmRhcl9fY3Jvc3NlZC1vdXQnOiAhaXNPdXRPZlJhbmdlICYmIGlzRmlsdGVyZWRPdXQsXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuX3NlbGVjdERhdGUoZGF5LnZhbHVlKX1cbiAgICAgICAgICAgID9kaXNhYmxlZD0ke2lzT3V0T2ZSYW5nZSB8fCBpc0ZpbHRlcmVkT3V0fVxuICAgICAgICAgICAgYXJpYS1sYWJlbD0ke3RoaXMuX2RhdGVBZGFwdGVyLmdldEFjY2Vzc2liaWxpdHlGb3JtYXREYXRlKGRheS52YWx1ZSl9XG4gICAgICAgICAgICBhcmlhLXByZXNzZWQ9JHtzZWxlY3RlZH1cbiAgICAgICAgICAgIGFyaWEtZGlzYWJsZWQ9JHtpc091dE9mUmFuZ2UgfHwgaXNGaWx0ZXJlZE91dH1cbiAgICAgICAgICAgIGFyaWEtY3VycmVudD0ke2lzVG9kYXkgPyAnZGF0ZScgOiBub3RoaW5nfVxuICAgICAgICAgICAgZGF0YS1kYXk9JHtkYXlWYWx1ZSB8fCBub3RoaW5nfVxuICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICBAa2V5ZG93bj0keyhldnQ6IEtleWJvYXJkRXZlbnQpID0+IHRoaXMuX2hhbmRsZUtleWJvYXJkRXZlbnQoZXZ0LCBkYXkpfVxuICAgICAgICAgICAgc2JiLXBvcG92ZXItY2xvc2VcbiAgICAgICAgICA+XG4gICAgICAgICAgICAke2RheS5kYXlWYWx1ZX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC90ZD5cbiAgICAgIGA7XG4gICAgfSk7XG4gIH1cblxuICAvKiogUmVuZGVyIHRoZSB2aWV3IGZvciB0aGUgbW9udGggc2VsZWN0aW9uLiAqL1xuICBwcml2YXRlIF9yZW5kZXJNb250aFZpZXcoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1jYWxlbmRhcl9fY29udHJvbHNcIj5cbiAgICAgICAgJHt0aGlzLl9nZXRBcnJvdyhcbiAgICAgICAgICAnbGVmdCcsXG4gICAgICAgICAgKCkgPT4gdGhpcy5fZ29Ub0RpZmZlcmVudFllYXIoLTEpLFxuICAgICAgICAgIGkxOG5QcmV2aW91c1llYXJbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF0sXG4gICAgICAgICAgdGhpcy5fcHJldmlvdXNZZWFyRGlzYWJsZWQoKSxcbiAgICAgICAgKX1cbiAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1jYWxlbmRhcl9fY29udHJvbHMtbW9udGhcIj4ke3RoaXMuX2NyZWF0ZUxhYmVsRm9yTW9udGhWaWV3KCl9PC9kaXY+XG4gICAgICAgICR7dGhpcy5fZ2V0QXJyb3coXG4gICAgICAgICAgJ3JpZ2h0JyxcbiAgICAgICAgICAoKSA9PiB0aGlzLl9nb1RvRGlmZmVyZW50WWVhcigxKSxcbiAgICAgICAgICBpMThuTmV4dFllYXJbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF0sXG4gICAgICAgICAgdGhpcy5fbmV4dFllYXJEaXNhYmxlZCgpLFxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZS1jb250YWluZXIgc2JiLWNhbGVuZGFyX190YWJsZS1tb250aC12aWV3XCI+XG4gICAgICAgICR7dGhpcy5fY3JlYXRlTW9udGhUYWJsZSh0aGlzLl9tb250aHMsIHRoaXMuX2Nob3NlblllYXIhKX1cbiAgICAgICAgJHt0aGlzLl93aWRlID8gdGhpcy5fY3JlYXRlTW9udGhUYWJsZSh0aGlzLl9tb250aHMsIHRoaXMuX2Nob3NlblllYXIhICsgMSkgOiBub3RoaW5nfVxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgfVxuXG4gIC8qKiBDcmVhdGVzIHRoZSBsYWJlbCB3aXRoIHRoZSB5ZWFyIGZvciB0aGUgbW9udGhseSB2aWV3LiAqL1xuICBwcml2YXRlIF9jcmVhdGVMYWJlbEZvck1vbnRoVmlldygpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGlkPVwic2JiLWNhbGVuZGFyX19tb250aC1zZWxlY3Rpb25cIlxuICAgICAgICBjbGFzcz1cInNiYi1jYWxlbmRhcl9fY29udHJvbHMtY2hhbmdlLWRhdGVcIlxuICAgICAgICBhcmlhLWxhYmVsPSR7YCR7aTE4bkNhbGVuZGFyRGF0ZVNlbGVjdGlvblt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX0gJHt0aGlzLl9jaG9zZW5ZZWFyfWB9XG4gICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuX3Jlc2V0Q2FsZW5kYXJWaWV3KHRydWUpfVxuICAgICAgPlxuICAgICAgICAke3RoaXMuX2Nob3NlblllYXJ9ICR7dGhpcy5fd2lkZSA/IGAgLSAke3RoaXMuX2Nob3NlblllYXIhICsgMX1gIDogbm90aGluZ31cbiAgICAgICAgPHNiYi1pY29uIG5hbWU9XCJjaGV2cm9uLXNtYWxsLXVwLXNtYWxsXCI+PC9zYmItaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPHNiYi1zY3JlZW4tcmVhZGVyLW9ubHkgcm9sZT1cInN0YXR1c1wiPiAke3RoaXMuX2Nob3NlblllYXJ9IDwvc2JiLXNjcmVlbi1yZWFkZXItb25seT5gO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgdGhlIHRhYmxlIGZvciB0aGUgbW9udGggc2VsZWN0aW9uIHZpZXcuICovXG4gIHByaXZhdGUgX2NyZWF0ZU1vbnRoVGFibGUobW9udGhzOiBNb250aFtdW10sIHllYXI6IG51bWJlcik6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDx0YWJsZVxuICAgICAgICBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGVcIlxuICAgICAgICBAYW5pbWF0aW9uZW5kPSR7KGU6IEFuaW1hdGlvbkV2ZW50KSA9PiB0aGlzLl90YWJsZUFuaW1hdGlvbkVuZChlKX1cbiAgICAgID5cbiAgICAgICAgJHt0aGlzLl93aWRlXG4gICAgICAgICAgPyBodG1sYDx0aGVhZCBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtaGVhZGVyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgIDx0ciBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtaGVhZGVyLXJvd1wiPlxuICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtaGVhZGVyXCIgY29sc3Bhbj0ke01PTlRIU19QRVJfUk9XfT4ke3llYXJ9PC90aD5cbiAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDwvdGhlYWQ+YFxuICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgPHRib2R5IGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZS1ib2R5XCI+XG4gICAgICAgICAgJHttb250aHMubWFwKFxuICAgICAgICAgICAgKHJvdzogTW9udGhbXSkgPT4gaHRtbGBcbiAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICR7cm93Lm1hcCgobW9udGg6IE1vbnRoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBpc091dE9mUmFuZ2UgPSAhdGhpcy5faXNNb250aEluUmFuZ2UobW9udGgubW9udGhWYWx1ZSwgeWVhcik7XG4gICAgICAgICAgICAgICAgICBjb25zdCBpc0ZpbHRlcmVkT3V0ID0gIXRoaXMuX2lzTW9udGhGaWx0ZXJlZE91dChtb250aC5tb250aFZhbHVlLCB5ZWFyKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkTW9udGggPSB0aGlzLl9zZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMuX2RhdGVBZGFwdGVyLmdldE1vbnRoKHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKHRoaXMuX3NlbGVjdGVkKSEpXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRZZWFyID0gdGhpcy5fc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKHRoaXMuX3NlbGVjdGVkKSEpXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWQ6IGJvb2xlYW4gPVxuICAgICAgICAgICAgICAgICAgICAhIXRoaXMuX3NlbGVjdGVkICYmIHllYXIgPT09IHNlbGVjdGVkWWVhciAmJiBtb250aC5tb250aFZhbHVlID09PSBzZWxlY3RlZE1vbnRoO1xuXG4gICAgICAgICAgICAgICAgICBjb25zdCBpc0N1cnJlbnRNb250aCA9XG4gICAgICAgICAgICAgICAgICAgIHllYXIgPT09IHRoaXMuX2RhdGVBZGFwdGVyLmdldFllYXIodGhpcy5ub3cpICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmdldE1vbnRoKHRoaXMubm93KSA9PT0gbW9udGgubW9udGhWYWx1ZTtcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGh0bWxgIDx0ZFxuICAgICAgICAgICAgICAgICAgICBjbGFzcz0ke2NsYXNzTWFwKHtcbiAgICAgICAgICAgICAgICAgICAgICAnc2JiLWNhbGVuZGFyX190YWJsZS1kYXRhJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAnc2JiLWNhbGVuZGFyX190YWJsZS1tb250aCc6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9JHtjbGFzc01hcCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAnc2JiLWNhbGVuZGFyX19jZWxsJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdzYmItY2FsZW5kYXJfX3BpbGwnOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3NiYi1jYWxlbmRhcl9fY2VsbC1jdXJyZW50JzogaXNDdXJyZW50TW9udGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAnc2JiLWNhbGVuZGFyX19jcm9zc2VkLW91dCc6ICFpc091dE9mUmFuZ2UgJiYgaXNGaWx0ZXJlZE91dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdzYmItY2FsZW5kYXJfX3NlbGVjdGVkJzogc2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5fb25Nb250aFNlbGVjdGlvbihtb250aC5tb250aFZhbHVlLCB5ZWFyKX1cbiAgICAgICAgICAgICAgICAgICAgICA/ZGlzYWJsZWQ9JHtpc091dE9mUmFuZ2UgfHwgaXNGaWx0ZXJlZE91dH1cbiAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPSR7YCR7bW9udGgubG9uZ1ZhbHVlfSAke3llYXJ9YH1cbiAgICAgICAgICAgICAgICAgICAgICBhcmlhLXByZXNzZWQ9JHtzZWxlY3RlZH1cbiAgICAgICAgICAgICAgICAgICAgICBhcmlhLWRpc2FibGVkPSR7U3RyaW5nKGlzT3V0T2ZSYW5nZSB8fCBpc0ZpbHRlcmVkT3V0KX1cbiAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnRoPSR7bW9udGgubW9udGhWYWx1ZSB8fCBub3RoaW5nfVxuICAgICAgICAgICAgICAgICAgICAgIEBrZXlkb3duPSR7KGV2dDogS2V5Ym9hcmRFdmVudCkgPT4gdGhpcy5faGFuZGxlS2V5Ym9hcmRFdmVudChldnQpfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgJHttb250aC52YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8L3RkPmA7XG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICBgLFxuICAgICAgICAgICl9XG4gICAgICAgIDwvdGJvZHk+XG4gICAgICA8L3RhYmxlPlxuICAgIGA7XG4gIH1cblxuICAvKiogU2VsZWN0IHRoZSBtb250aCBhbmQgY2hhbmdlIHRoZSB2aWV3IHRvIGRheSBzZWxlY3Rpb24uICovXG4gIHByaXZhdGUgX29uTW9udGhTZWxlY3Rpb24obW9udGg6IG51bWJlciwgeWVhcjogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fY2hvc2VuTW9udGggPSBtb250aDtcbiAgICB0aGlzLl9uZXh0Q2FsZW5kYXJWaWV3ID0gJ2RheSc7XG4gICAgdGhpcy5faW5pdChcbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmNyZWF0ZURhdGUoXG4gICAgICAgIHllYXIsXG4gICAgICAgIHRoaXMuX2Nob3Nlbk1vbnRoLFxuICAgICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXREYXRlKHRoaXMuX2FjdGl2ZURhdGUpLFxuICAgICAgKSxcbiAgICApO1xuICAgIHRoaXMuX3N0YXJ0VGFibGVUcmFuc2l0aW9uKCk7XG4gIH1cblxuICAvKiogUmVuZGVyIHRoZSB2aWV3IGZvciB0aGUgeWVhciBzZWxlY3Rpb24uICovXG4gIHByaXZhdGUgX3JlbmRlclllYXJWaWV3KCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItY2FsZW5kYXJfX2NvbnRyb2xzXCI+XG4gICAgICAgICR7dGhpcy5fZ2V0QXJyb3coXG4gICAgICAgICAgJ2xlZnQnLFxuICAgICAgICAgICgpID0+IHRoaXMuX2dvVG9EaWZmZXJlbnRZZWFyUmFuZ2UoLVlFQVJTX1BFUl9QQUdFKSxcbiAgICAgICAgICBpMThuUHJldmlvdXNZZWFyUmFuZ2UoWUVBUlNfUEVSX1BBR0UpW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdLFxuICAgICAgICAgIHRoaXMuX3ByZXZpb3VzWWVhclJhbmdlRGlzYWJsZWQoKSxcbiAgICAgICAgKX1cbiAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1jYWxlbmRhcl9fY29udHJvbHMtbW9udGhcIj4ke3RoaXMuX2NyZWF0ZUxhYmVsRm9yWWVhclZpZXcoKX08L2Rpdj5cbiAgICAgICAgJHt0aGlzLl9nZXRBcnJvdyhcbiAgICAgICAgICAncmlnaHQnLFxuICAgICAgICAgICgpID0+IHRoaXMuX2dvVG9EaWZmZXJlbnRZZWFyUmFuZ2UoWUVBUlNfUEVSX1BBR0UpLFxuICAgICAgICAgIGkxOG5OZXh0WWVhclJhbmdlKFlFQVJTX1BFUl9QQUdFKVt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XSxcbiAgICAgICAgICB0aGlzLl9uZXh0WWVhclJhbmdlRGlzYWJsZWQoKSxcbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtY29udGFpbmVyIHNiYi1jYWxlbmRhcl9fdGFibGUteWVhci12aWV3XCI+XG4gICAgICAgICR7dGhpcy5fY3JlYXRlWWVhclRhYmxlKHRoaXMuX3llYXJzKX1cbiAgICAgICAgJHt0aGlzLl93aWRlID8gdGhpcy5fY3JlYXRlWWVhclRhYmxlKHRoaXMuX25leHRNb250aFllYXJzLCB0cnVlKSA6IG5vdGhpbmd9XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgdGhlIGJ1dHRvbiBhcnJvdyBmb3IgYWxsIHRoZSB2aWV3cy4gKi9cbiAgcHJpdmF0ZSBfZ2V0QXJyb3coXG4gICAgZGlyZWN0aW9uOiAnbGVmdCcgfCAncmlnaHQnLFxuICAgIGNsaWNrOiAoKSA9PiB2b2lkLFxuICAgIGFyaWFMYWJlbDogc3RyaW5nLFxuICAgIGRpc2FibGVkOiBib29sZWFuLFxuICApOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgPHNiYi1zZWNvbmRhcnktYnV0dG9uXG4gICAgICBzaXplPVwibVwiXG4gICAgICBpY29uLW5hbWU9XCJjaGV2cm9uLXNtYWxsLSR7ZGlyZWN0aW9ufS1zbWFsbFwiXG4gICAgICBhcmlhLWxhYmVsPSR7YXJpYUxhYmVsfVxuICAgICAgQGNsaWNrPSR7Y2xpY2t9XG4gICAgICA/ZGlzYWJsZWQ9JHtkaXNhYmxlZH1cbiAgICAgIGlkPVwic2JiLWNhbGVuZGFyX19jb250cm9scy0ke2RpcmVjdGlvbiA9PT0gJ2xlZnQnID8gJ3ByZXZpb3VzJyA6ICduZXh0J31cIlxuICAgID48L3NiYi1zZWNvbmRhcnktYnV0dG9uPmA7XG4gIH1cblxuICAvKiogQ3JlYXRlcyB0aGUgbGFiZWwgd2l0aCB0aGUgeWVhciByYW5nZSBmb3IgdGhlIHllYXJseSB2aWV3LiAqL1xuICBwcml2YXRlIF9jcmVhdGVMYWJlbEZvclllYXJWaWV3KCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICBjb25zdCBmaXJzdFllYXI6IG51bWJlciA9IHRoaXMuX3llYXJzLmZsYXQoKVswXTtcbiAgICBjb25zdCBsYXN0WWVhckFycmF5OiBudW1iZXJbXSA9ICh0aGlzLl93aWRlID8gdGhpcy5fbmV4dE1vbnRoWWVhcnMgOiB0aGlzLl95ZWFycykuZmxhdCgpO1xuICAgIGNvbnN0IGxhc3RZZWFyOiBudW1iZXIgPSBsYXN0WWVhckFycmF5W2xhc3RZZWFyQXJyYXkubGVuZ3RoIC0gMV07XG4gICAgY29uc3QgeWVhckxhYmVsID0gYCR7Zmlyc3RZZWFyfSAtICR7bGFzdFllYXJ9YDtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGlkPVwic2JiLWNhbGVuZGFyX195ZWFyLXNlbGVjdGlvblwiXG4gICAgICAgIGNsYXNzPVwic2JiLWNhbGVuZGFyX19jb250cm9scy1jaGFuZ2UtZGF0ZVwiXG4gICAgICAgIGFyaWEtbGFiZWw9XCIke2kxOG5DYWxlbmRhckRhdGVTZWxlY3Rpb25bdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19ICR7eWVhckxhYmVsfVwiXG4gICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuX3Jlc2V0Q2FsZW5kYXJWaWV3KHRydWUpfVxuICAgICAgPlxuICAgICAgICAke3llYXJMYWJlbH1cbiAgICAgICAgPHNiYi1pY29uIG5hbWU9XCJjaGV2cm9uLXNtYWxsLXVwLXNtYWxsXCI+PC9zYmItaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPHNiYi1zY3JlZW4tcmVhZGVyLW9ubHkgcm9sZT1cInN0YXR1c1wiPiAke3llYXJMYWJlbH0gPC9zYmItc2NyZWVuLXJlYWRlci1vbmx5PlxuICAgIGA7XG4gIH1cblxuICAvKiogQ3JlYXRlcyB0aGUgdGFibGUgZm9yIHRoZSB5ZWFyIHNlbGVjdGlvbiB2aWV3LiAqL1xuICBwcml2YXRlIF9jcmVhdGVZZWFyVGFibGUoeWVhcnM6IG51bWJlcltdW10sIHNoaWZ0UmlnaHQgPSBmYWxzZSk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICBjb25zdCBub3cgPSB0aGlzLm5vdztcbiAgICByZXR1cm4gaHRtbGAgPHRhYmxlXG4gICAgICBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGVcIlxuICAgICAgQGFuaW1hdGlvbmVuZD0keyhlOiBBbmltYXRpb25FdmVudCkgPT4gdGhpcy5fdGFibGVBbmltYXRpb25FbmQoZSl9XG4gICAgPlxuICAgICAgPHRib2R5IGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZS1ib2R5XCI+XG4gICAgICAgICR7eWVhcnMubWFwKFxuICAgICAgICAgIChyb3c6IG51bWJlcltdKSA9PlxuICAgICAgICAgICAgaHRtbGAgPHRyPlxuICAgICAgICAgICAgICAke3Jvdy5tYXAoKHllYXI6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzT3V0T2ZSYW5nZSA9ICF0aGlzLl9pc1llYXJJblJhbmdlKHllYXIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzRmlsdGVyZWRPdXQgPSAhdGhpcy5faXNZZWFyRmlsdGVyZWRPdXQoeWVhcik7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRZZWFyID0gdGhpcy5fc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgID8gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcih0aGlzLl9kYXRlQWRhcHRlci5kZXNlcmlhbGl6ZSh0aGlzLl9zZWxlY3RlZCkhKVxuICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWQ6IGJvb2xlYW4gPSAhIXRoaXMuX3NlbGVjdGVkICYmIHllYXIgPT09IHNlbGVjdGVkWWVhcjtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0N1cnJlbnRZZWFyID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcihub3cpID09PSB5ZWFyO1xuICAgICAgICAgICAgICAgIHJldHVybiBodG1sYCA8dGQgY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlLWRhdGEgc2JiLWNhbGVuZGFyX190YWJsZS15ZWFyXCI+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPSR7Y2xhc3NNYXAoe1xuICAgICAgICAgICAgICAgICAgICAgICdzYmItY2FsZW5kYXJfX2NlbGwnOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICdzYmItY2FsZW5kYXJfX3BpbGwnOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICdzYmItY2FsZW5kYXJfX2NlbGwtY3VycmVudCc6IGlzQ3VycmVudFllYXIsXG4gICAgICAgICAgICAgICAgICAgICAgJ3NiYi1jYWxlbmRhcl9fY3Jvc3NlZC1vdXQnOiAhaXNPdXRPZlJhbmdlICYmIGlzRmlsdGVyZWRPdXQsXG4gICAgICAgICAgICAgICAgICAgICAgJ3NiYi1jYWxlbmRhcl9fc2VsZWN0ZWQnOiBzZWxlY3RlZCxcbiAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuX29uWWVhclNlbGVjdGlvbih5ZWFyLCBzaGlmdFJpZ2h0KX1cbiAgICAgICAgICAgICAgICAgICAgP2Rpc2FibGVkPSR7aXNPdXRPZlJhbmdlIHx8IGlzRmlsdGVyZWRPdXR9XG4gICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9JHt5ZWFyfVxuICAgICAgICAgICAgICAgICAgICBhcmlhLXByZXNzZWQ9JHtzZWxlY3RlZH1cbiAgICAgICAgICAgICAgICAgICAgYXJpYS1kaXNhYmxlZD0ke1N0cmluZyhpc091dE9mUmFuZ2UgfHwgaXNGaWx0ZXJlZE91dCl9XG4gICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICAgICAgICBkYXRhLXllYXI9JHt5ZWFyIHx8IG5vdGhpbmd9XG4gICAgICAgICAgICAgICAgICAgIEBrZXlkb3duPSR7KGV2dDogS2V5Ym9hcmRFdmVudCkgPT4gdGhpcy5faGFuZGxlS2V5Ym9hcmRFdmVudChldnQpfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAke3llYXJ9XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L3RkPmA7XG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgPC90cj5gLFxuICAgICAgICApfVxuICAgICAgPC90Ym9keT5cbiAgICA8L3RhYmxlPmA7XG4gIH1cblxuICAvKiogU2VsZWN0IHRoZSB5ZWFyIGFuZCBjaGFuZ2UgdGhlIHZpZXcgdG8gbW9udGggc2VsZWN0aW9uLiAqL1xuICBwcml2YXRlIF9vblllYXJTZWxlY3Rpb24oeWVhcjogbnVtYmVyLCByaWdodFNpZGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLl9jaG9zZW5ZZWFyID0gcmlnaHRTaWRlID8geWVhciAtIDEgOiB5ZWFyO1xuICAgIHRoaXMuX25leHRDYWxlbmRhclZpZXcgPSAnbW9udGgnO1xuICAgIHRoaXMuX2Fzc2lnbkFjdGl2ZURhdGUoXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5jcmVhdGVEYXRlKFxuICAgICAgICB0aGlzLl9jaG9zZW5ZZWFyLFxuICAgICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRNb250aCh0aGlzLl9hY3RpdmVEYXRlKSxcbiAgICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0RGF0ZSh0aGlzLl9hY3RpdmVEYXRlKSxcbiAgICAgICksXG4gICAgKTtcbiAgICB0aGlzLl9zdGFydFRhYmxlVHJhbnNpdGlvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0VmlldygpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgaWYgKGlzU2VydmVyIHx8IHRoaXMuaHlkcmF0aW9uUmVxdWlyZWQpIHtcbiAgICAgIC8vIFRPRE86IFdlIGRpc2FibGUgU1NSIGZvciBjYWxlbmRhciBmb3Igbm93LiBGaWd1cmUgb3VyLCBpZiB0aGVyZSBpcyBhIHdheVxuICAgICAgLy8gdG8gZW5hYmxlIGl0LCB3aGlsZSBjb25zaWRlcmluZyBpMThuIGFuZCBkYXRlIGluZm9ybWF0aW9uLlxuICAgICAgcmV0dXJuIGh0bWxgJHtub3RoaW5nfWA7XG4gICAgfVxuICAgIHN3aXRjaCAodGhpcy5fY2FsZW5kYXJWaWV3KSB7XG4gICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlclllYXJWaWV3KCk7XG4gICAgICBjYXNlICdtb250aCc6XG4gICAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJNb250aFZpZXcoKTtcbiAgICAgIGNhc2UgJ2RheSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdGhpcy5fcmVuZGVyRGF5VmlldygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3RhYmxlQW5pbWF0aW9uRW5kKGV2ZW50OiBBbmltYXRpb25FdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHRhYmxlID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGlmIChldmVudC5hbmltYXRpb25OYW1lID09PSAnaGlkZScpIHtcbiAgICAgIHRhYmxlLmNsYXNzTGlzdC5yZW1vdmUoJ3NiYi1jYWxlbmRhcl9fdGFibGUtaGlkZScpO1xuICAgICAgdGhpcy5fcmVzZXRGb2N1cyA9IHRydWU7XG4gICAgICB0aGlzLl9jYWxlbmRhclZpZXcgPSB0aGlzLl9uZXh0Q2FsZW5kYXJWaWV3O1xuICAgIH0gZWxzZSBpZiAoZXZlbnQuYW5pbWF0aW9uTmFtZSA9PT0gJ3Nob3cnKSB7XG4gICAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS10cmFuc2l0aW9uJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc3RhcnRUYWJsZVRyYW5zaXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy50b2dnbGVBdHRyaWJ1dGUoJ2RhdGEtdHJhbnNpdGlvbicsIHRydWUpO1xuICAgIHRoaXMuc2hhZG93Um9vdFxuICAgICAgPy5xdWVyeVNlbGVjdG9yQWxsKCd0YWJsZScpXG4gICAgICA/LmZvckVhY2goKGUpID0+IGUuY2xhc3NMaXN0LnRvZ2dsZSgnc2JiLWNhbGVuZGFyX190YWJsZS1oaWRlJykpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlbmRlcigpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgPGRpdiBjbGFzcz1cInNiYi1jYWxlbmRhcl9fd3JhcHBlclwiPiR7dGhpcy5fZ2V0VmlldygpfTwvZGl2PmA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi1jYWxlbmRhcic6IFNiYkNhbGVuZGFyRWxlbWVudDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIlNiYkNhbGVuZGFyRWxlbWVudCIsIl9hIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQW1HTSxzQkFBa0IsTUFBQTs7MEJBRHZCLGNBQWMsY0FBYyxDQUFDOzs7O29CQUNhLGtCQUFrQixVQUFVOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
|
|
@@ -31,7 +31,7 @@ export declare class SbbCheckboxPanelElement extends SbbCheckboxPanelElement_bas
|
|
|
31
31
|
* in relation to the parent selection panel changes.
|
|
32
32
|
*/
|
|
33
33
|
protected stateChange: EventEmitter<SbbCheckboxPanelStateChange>;
|
|
34
|
-
protected willUpdate(changedProperties: PropertyValues<this>):
|
|
34
|
+
protected willUpdate(changedProperties: PropertyValues<this>): void;
|
|
35
35
|
protected render(): TemplateResult;
|
|
36
36
|
}
|
|
37
37
|
declare global {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkbox-panel.d.ts","sourceRoot":"","sources":["../../../../../src/elements/checkbox/checkbox-panel/checkbox-panel.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EAEnB,UAAU,EAEV,KAAK,cAAc,EACnB,KAAK,cAAc,EACpB,MAAM,KAAK,CAAC;AAIb,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,KAAK,EACV,qBAAqB,EACrB,sBAAsB,EACtB,cAAc,EACf,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAGL,KAAK,YAAY,EAElB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,6BAA6B,CAAC;AACrC,OAAO,0BAA0B,CAAC;AAElC,MAAM,MAAM,2BAA2B,GAAG,OAAO,CAC/C,cAAc,EACd,sBAAsB,GAAG,qBAAqB,CAC/C,CAAC;;AAEF;;;;;;;;;;;GAWG;AACH,qBAGM,uBAAwB,SAAQ,4BAErC;IACC,OAAuB,MAAM,EAAE,cAAc,CAA2C;IAGxF,gBAAuB,MAAM;;;;MAIlB;IAEX,oBAAoB;IACpB,SAEgB,IAAI,EAAE,YAAY,CAAO;IAEzC;;;;OAIG;IACH,SAAS,CAAC,WAAW,EAAE,YAAY,CAAC,2BAA2B,CAAC,CAI9D;
|
|
1
|
+
{"version":3,"file":"checkbox-panel.d.ts","sourceRoot":"","sources":["../../../../../src/elements/checkbox/checkbox-panel/checkbox-panel.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EAEnB,UAAU,EAEV,KAAK,cAAc,EACnB,KAAK,cAAc,EACpB,MAAM,KAAK,CAAC;AAIb,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,KAAK,EACV,qBAAqB,EACrB,sBAAsB,EACtB,cAAc,EACf,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAGL,KAAK,YAAY,EAElB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,6BAA6B,CAAC;AACrC,OAAO,0BAA0B,CAAC;AAElC,MAAM,MAAM,2BAA2B,GAAG,OAAO,CAC/C,cAAc,EACd,sBAAsB,GAAG,qBAAqB,CAC/C,CAAC;;AAEF;;;;;;;;;;;GAWG;AACH,qBAGM,uBAAwB,SAAQ,4BAErC;IACC,OAAuB,MAAM,EAAE,cAAc,CAA2C;IAGxF,gBAAuB,MAAM;;;;MAIlB;IAEX,oBAAoB;IACpB,SAEgB,IAAI,EAAE,YAAY,CAAO;IAEzC;;;;OAIG;IACH,SAAS,CAAC,WAAW,EAAE,YAAY,CAAC,2BAA2B,CAAC,CAI9D;cAEiB,UAAU,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;cAkBzD,MAAM,IAAI,cAAc;CA8B5C;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAE7B,oBAAoB,EAAE,uBAAuB,CAAC;KAC/C;CACF"}
|
|
@@ -38,7 +38,7 @@ let SbbCheckboxPanelElement = (() => {
|
|
|
38
38
|
set size(value) {
|
|
39
39
|
__privateSet(this, _size_accessor_storage, value);
|
|
40
40
|
}
|
|
41
|
-
|
|
41
|
+
willUpdate(changedProperties) {
|
|
42
42
|
super.willUpdate(changedProperties);
|
|
43
43
|
if (changedProperties.has("checked")) {
|
|
44
44
|
this.toggleAttribute("data-checked", this.checked);
|
|
@@ -102,4 +102,4 @@ let SbbCheckboxPanelElement = (() => {
|
|
|
102
102
|
export {
|
|
103
103
|
SbbCheckboxPanelElement
|
|
104
104
|
};
|
|
105
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3gtcGFuZWwuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy9jaGVja2JveC9jaGVja2JveC1wYW5lbC9jaGVja2JveC1wYW5lbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICB0eXBlIENTU1Jlc3VsdEdyb3VwLFxuICBodG1sLFxuICBMaXRFbGVtZW50LFxuICBub3RoaW5nLFxuICB0eXBlIFByb3BlcnR5VmFsdWVzLFxuICB0eXBlIFRlbXBsYXRlUmVzdWx0LFxufSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCB7IGdldE92ZXJyaWRlLCBzbG90U3RhdGUgfSBmcm9tICcuLi8uLi9jb3JlL2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnLi4vLi4vY29yZS9ldmVudGluZy5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIFNiYkNoZWNrZWRTdGF0ZUNoYW5nZSxcbiAgU2JiRGlzYWJsZWRTdGF0ZUNoYW5nZSxcbiAgU2JiU3RhdGVDaGFuZ2UsXG59IGZyb20gJy4uLy4uL2NvcmUvaW50ZXJmYWNlcy90eXBlcy5qcyc7XG5pbXBvcnQge1xuICBwYW5lbENvbW1vblN0eWxlLFxuICBTYmJQYW5lbE1peGluLFxuICB0eXBlIFNiYlBhbmVsU2l6ZSxcbiAgU2JiVXBkYXRlU2NoZWR1bGVyTWl4aW4sXG59IGZyb20gJy4uLy4uL2NvcmUvbWl4aW5zLmpzJztcbmltcG9ydCB7IGNoZWNrYm94Q29tbW9uU3R5bGUsIFNiYkNoZWNrYm94Q29tbW9uRWxlbWVudE1peGluIH0gZnJvbSAnLi4vY29tbW9uLmpzJztcblxuaW1wb3J0ICcuLi8uLi9zY3JlZW4tcmVhZGVyLW9ubHkuanMnO1xuaW1wb3J0ICcuLi8uLi92aXN1YWwtY2hlY2tib3guanMnO1xuXG5leHBvcnQgdHlwZSBTYmJDaGVja2JveFBhbmVsU3RhdGVDaGFuZ2UgPSBFeHRyYWN0PFxuICBTYmJTdGF0ZUNoYW5nZSxcbiAgU2JiRGlzYWJsZWRTdGF0ZUNoYW5nZSB8IFNiYkNoZWNrZWRTdGF0ZUNoYW5nZVxuPjtcblxuLyoqXG4gKiBJdCBkaXNwbGF5cyBhIGNoZWNrYm94IGVuaGFuY2VkIHdpdGggc2VsZWN0aW9uIHBhbmVsIGRlc2lnbi5cbiAqXG4gKiBAc2xvdCAtIFVzZSB0aGUgdW5uYW1lZCBzbG90IHRvIGFkZCBjb250ZW50IHRvIHRoZSBgc2JiLWNoZWNrYm94YC5cbiAqIEBzbG90IHN1YnRleHQgLSBTbG90IHVzZWQgdG8gcmVuZGVyIGEgc3VidGV4dCB1bmRlciB0aGUgbGFiZWwgKG9ubHkgdmlzaWJsZSB3aXRoaW4gYSBzZWxlY3Rpb24gcGFuZWwpLlxuICogQHNsb3Qgc3VmZml4IC0gU2xvdCB1c2VkIHRvIHJlbmRlciBhZGRpdGlvbmFsIGNvbnRlbnQgYWZ0ZXIgdGhlIGxhYmVsIChvbmx5IHZpc2libGUgd2l0aGluIGEgc2VsZWN0aW9uIHBhbmVsKS5cbiAqIEBzbG90IGJhZGdlIC0gVXNlIHRoaXMgc2xvdCB0byBwcm92aWRlIGEgYHNiYi1jYXJkLWJhZGdlYCAob3B0aW9uYWwpLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gZGlkQ2hhbmdlIC0gRGVwcmVjYXRlZC4gdXNlZCBmb3IgUmVhY3QuIFdpbGwgcHJvYmFibHkgYmUgcmVtb3ZlZCBvbmNlIFJlYWN0IDE5IGlzIGF2YWlsYWJsZS5cbiAqIEBldmVudCB7RXZlbnR9IGNoYW5nZSAtIEV2ZW50IGZpcmVkIG9uIGNoYW5nZS5cbiAqIEBldmVudCB7SW5wdXRFdmVudH0gaW5wdXQgLSBFdmVudCBmaXJlZCBvbiBpbnB1dC5cbiAqIEBvdmVycmlkZVR5cGUgdmFsdWUgLSBzdHJpbmcgfCBudWxsXG4gKi9cbmV4cG9ydFxuQGN1c3RvbUVsZW1lbnQoJ3NiYi1jaGVja2JveC1wYW5lbCcpXG5Ac2xvdFN0YXRlKClcbmNsYXNzIFNiYkNoZWNrYm94UGFuZWxFbGVtZW50IGV4dGVuZHMgU2JiUGFuZWxNaXhpbihcbiAgU2JiQ2hlY2tib3hDb21tb25FbGVtZW50TWl4aW4oU2JiVXBkYXRlU2NoZWR1bGVyTWl4aW4oTGl0RWxlbWVudCkpLFxuKSB7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IFtjaGVja2JveENvbW1vblN0eWxlLCBwYW5lbENvbW1vblN0eWxlXTtcblxuICAvLyBGSVhNRSB1c2luZyAuLi5zdXBlci5ldmVudHMgcmVxdWlyZXM6IGh0dHBzOi8vZ2l0aHViLmNvbS9zYmItZGVzaWduLXN5c3RlbXMvbHluZS1jb21wb25lbnRzL2lzc3Vlcy8yNjAwXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgZXZlbnRzID0ge1xuICAgIGRpZENoYW5nZTogJ2RpZENoYW5nZScsXG4gICAgc3RhdGVDaGFuZ2U6ICdzdGF0ZUNoYW5nZScsXG4gICAgcGFuZWxDb25uZWN0ZWQ6ICdwYW5lbENvbm5lY3RlZCcsXG4gIH0gYXMgY29uc3Q7XG5cbiAgLyoqIFNpemUgdmFyaWFudC4gKi9cbiAgQHByb3BlcnR5KHsgcmVmbGVjdDogdHJ1ZSB9KVxuICBAZ2V0T3ZlcnJpZGUoKGksIHYpID0+IChpLmdyb3VwPy5zaXplID8gKGkuZ3JvdXAuc2l6ZSA9PT0gJ3hzJyA/
|
|
105
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3gtcGFuZWwuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy9jaGVja2JveC9jaGVja2JveC1wYW5lbC9jaGVja2JveC1wYW5lbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICB0eXBlIENTU1Jlc3VsdEdyb3VwLFxuICBodG1sLFxuICBMaXRFbGVtZW50LFxuICBub3RoaW5nLFxuICB0eXBlIFByb3BlcnR5VmFsdWVzLFxuICB0eXBlIFRlbXBsYXRlUmVzdWx0LFxufSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCB7IGdldE92ZXJyaWRlLCBzbG90U3RhdGUgfSBmcm9tICcuLi8uLi9jb3JlL2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnLi4vLi4vY29yZS9ldmVudGluZy5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIFNiYkNoZWNrZWRTdGF0ZUNoYW5nZSxcbiAgU2JiRGlzYWJsZWRTdGF0ZUNoYW5nZSxcbiAgU2JiU3RhdGVDaGFuZ2UsXG59IGZyb20gJy4uLy4uL2NvcmUvaW50ZXJmYWNlcy90eXBlcy5qcyc7XG5pbXBvcnQge1xuICBwYW5lbENvbW1vblN0eWxlLFxuICBTYmJQYW5lbE1peGluLFxuICB0eXBlIFNiYlBhbmVsU2l6ZSxcbiAgU2JiVXBkYXRlU2NoZWR1bGVyTWl4aW4sXG59IGZyb20gJy4uLy4uL2NvcmUvbWl4aW5zLmpzJztcbmltcG9ydCB7IGNoZWNrYm94Q29tbW9uU3R5bGUsIFNiYkNoZWNrYm94Q29tbW9uRWxlbWVudE1peGluIH0gZnJvbSAnLi4vY29tbW9uLmpzJztcblxuaW1wb3J0ICcuLi8uLi9zY3JlZW4tcmVhZGVyLW9ubHkuanMnO1xuaW1wb3J0ICcuLi8uLi92aXN1YWwtY2hlY2tib3guanMnO1xuXG5leHBvcnQgdHlwZSBTYmJDaGVja2JveFBhbmVsU3RhdGVDaGFuZ2UgPSBFeHRyYWN0PFxuICBTYmJTdGF0ZUNoYW5nZSxcbiAgU2JiRGlzYWJsZWRTdGF0ZUNoYW5nZSB8IFNiYkNoZWNrZWRTdGF0ZUNoYW5nZVxuPjtcblxuLyoqXG4gKiBJdCBkaXNwbGF5cyBhIGNoZWNrYm94IGVuaGFuY2VkIHdpdGggc2VsZWN0aW9uIHBhbmVsIGRlc2lnbi5cbiAqXG4gKiBAc2xvdCAtIFVzZSB0aGUgdW5uYW1lZCBzbG90IHRvIGFkZCBjb250ZW50IHRvIHRoZSBgc2JiLWNoZWNrYm94YC5cbiAqIEBzbG90IHN1YnRleHQgLSBTbG90IHVzZWQgdG8gcmVuZGVyIGEgc3VidGV4dCB1bmRlciB0aGUgbGFiZWwgKG9ubHkgdmlzaWJsZSB3aXRoaW4gYSBzZWxlY3Rpb24gcGFuZWwpLlxuICogQHNsb3Qgc3VmZml4IC0gU2xvdCB1c2VkIHRvIHJlbmRlciBhZGRpdGlvbmFsIGNvbnRlbnQgYWZ0ZXIgdGhlIGxhYmVsIChvbmx5IHZpc2libGUgd2l0aGluIGEgc2VsZWN0aW9uIHBhbmVsKS5cbiAqIEBzbG90IGJhZGdlIC0gVXNlIHRoaXMgc2xvdCB0byBwcm92aWRlIGEgYHNiYi1jYXJkLWJhZGdlYCAob3B0aW9uYWwpLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gZGlkQ2hhbmdlIC0gRGVwcmVjYXRlZC4gdXNlZCBmb3IgUmVhY3QuIFdpbGwgcHJvYmFibHkgYmUgcmVtb3ZlZCBvbmNlIFJlYWN0IDE5IGlzIGF2YWlsYWJsZS5cbiAqIEBldmVudCB7RXZlbnR9IGNoYW5nZSAtIEV2ZW50IGZpcmVkIG9uIGNoYW5nZS5cbiAqIEBldmVudCB7SW5wdXRFdmVudH0gaW5wdXQgLSBFdmVudCBmaXJlZCBvbiBpbnB1dC5cbiAqIEBvdmVycmlkZVR5cGUgdmFsdWUgLSBzdHJpbmcgfCBudWxsXG4gKi9cbmV4cG9ydFxuQGN1c3RvbUVsZW1lbnQoJ3NiYi1jaGVja2JveC1wYW5lbCcpXG5Ac2xvdFN0YXRlKClcbmNsYXNzIFNiYkNoZWNrYm94UGFuZWxFbGVtZW50IGV4dGVuZHMgU2JiUGFuZWxNaXhpbihcbiAgU2JiQ2hlY2tib3hDb21tb25FbGVtZW50TWl4aW4oU2JiVXBkYXRlU2NoZWR1bGVyTWl4aW4oTGl0RWxlbWVudCkpLFxuKSB7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IFtjaGVja2JveENvbW1vblN0eWxlLCBwYW5lbENvbW1vblN0eWxlXTtcblxuICAvLyBGSVhNRSB1c2luZyAuLi5zdXBlci5ldmVudHMgcmVxdWlyZXM6IGh0dHBzOi8vZ2l0aHViLmNvbS9zYmItZGVzaWduLXN5c3RlbXMvbHluZS1jb21wb25lbnRzL2lzc3Vlcy8yNjAwXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgZXZlbnRzID0ge1xuICAgIGRpZENoYW5nZTogJ2RpZENoYW5nZScsXG4gICAgc3RhdGVDaGFuZ2U6ICdzdGF0ZUNoYW5nZScsXG4gICAgcGFuZWxDb25uZWN0ZWQ6ICdwYW5lbENvbm5lY3RlZCcsXG4gIH0gYXMgY29uc3Q7XG5cbiAgLyoqIFNpemUgdmFyaWFudC4gKi9cbiAgQHByb3BlcnR5KHsgcmVmbGVjdDogdHJ1ZSB9KVxuICBAZ2V0T3ZlcnJpZGUoKGksIHYpID0+IChpLmdyb3VwPy5zaXplID8gKGkuZ3JvdXAuc2l6ZSA9PT0gJ3hzJyA/ICdzJyA6IGkuZ3JvdXAuc2l6ZSkgOiB2KSlcbiAgcHVibGljIGFjY2Vzc29yIHNpemU6IFNiYlBhbmVsU2l6ZSA9ICdtJztcblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEludGVybmFsIGV2ZW50IHRoYXQgZW1pdHMgd2hlbmV2ZXIgdGhlIHN0YXRlIG9mIHRoZSBjaGVja2JveFxuICAgKiBpbiByZWxhdGlvbiB0byB0aGUgcGFyZW50IHNlbGVjdGlvbiBwYW5lbCBjaGFuZ2VzLlxuICAgKi9cbiAgcHJvdGVjdGVkIHN0YXRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8U2JiQ2hlY2tib3hQYW5lbFN0YXRlQ2hhbmdlPiA9IG5ldyBFdmVudEVtaXR0ZXIoXG4gICAgdGhpcyxcbiAgICBTYmJDaGVja2JveFBhbmVsRWxlbWVudC5ldmVudHMuc3RhdGVDaGFuZ2UsXG4gICAgeyBidWJibGVzOiB0cnVlIH0sXG4gICk7XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHdpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgc3VwZXIud2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdjaGVja2VkJykpIHtcbiAgICAgIC8vIEFzIFNiYkZvcm1Bc3NvY2lhdGVkQ2hlY2tib3hNaXhpbiBkb2VzIG5vdCByZWZsZWN0IGNoZWNrZWQgcHJvcGVydHksIHdlIGFkZCBhIGRhdGEtY2hlY2tlZC5cbiAgICAgIHRoaXMudG9nZ2xlQXR0cmlidXRlKCdkYXRhLWNoZWNrZWQnLCB0aGlzLmNoZWNrZWQpO1xuXG4gICAgICBpZiAodGhpcy5jaGVja2VkICE9PSBjaGFuZ2VkUHJvcGVydGllcy5nZXQoJ2NoZWNrZWQnKSEpIHtcbiAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZS5lbWl0KHsgdHlwZTogJ2NoZWNrZWQnLCBjaGVja2VkOiB0aGlzLmNoZWNrZWQgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ2Rpc2FibGVkJykpIHtcbiAgICAgIGlmICh0aGlzLmRpc2FibGVkICE9PSBjaGFuZ2VkUHJvcGVydGllcy5nZXQoJ2Rpc2FibGVkJykhKSB7XG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2UuZW1pdCh7IHR5cGU6ICdkaXNhYmxlZCcsIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXIoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPHNwYW4gY2xhc3M9XCJzYmItc2VsZWN0aW9uLXBhbmVsXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzYmItc2VsZWN0aW9uLXBhbmVsX19iYWRnZVwiPlxuICAgICAgICAgIDxzbG90IG5hbWU9XCJiYWRnZVwiPjwvc2xvdD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwic2JiLWNoZWNrYm94LXdyYXBwZXJcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNiYi1jaGVja2JveFwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmItY2hlY2tib3hfX2lubmVyXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2JiLWNoZWNrYm94X19hbGlnbmVyXCI+XG4gICAgICAgICAgICAgICAgPHNiYi12aXN1YWwtY2hlY2tib3hcbiAgICAgICAgICAgICAgICAgID9jaGVja2VkPSR7dGhpcy5jaGVja2VkfVxuICAgICAgICAgICAgICAgICAgP2luZGV0ZXJtaW5hdGU9JHt0aGlzLmluZGV0ZXJtaW5hdGV9XG4gICAgICAgICAgICAgICAgICA/ZGlzYWJsZWQ9JHt0aGlzLmRpc2FibGVkIHx8IHRoaXMuZm9ybURpc2FibGVkfVxuICAgICAgICAgICAgICAgID48L3NiYi12aXN1YWwtY2hlY2tib3g+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmItY2hlY2tib3hfX2xhYmVsXCI+XG4gICAgICAgICAgICAgICAgPHNsb3Q+PC9zbG90PlxuICAgICAgICAgICAgICAgIDxzbG90IG5hbWU9XCJzdWZmaXhcIj48L3Nsb3Q+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxzbG90IG5hbWU9XCJzdWJ0ZXh0XCI+PC9zbG90PlxuICAgICAgICAgICAgJHt0aGlzLmV4cGFuc2lvblN0YXRlXG4gICAgICAgICAgICAgID8gaHRtbGA8c2JiLXNjcmVlbi1yZWFkZXItb25seT4ke3RoaXMuZXhwYW5zaW9uU3RhdGV9PC9zYmItc2NyZWVuLXJlYWRlci1vbmx5PmBcbiAgICAgICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9zcGFuPlxuICAgIGA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi1jaGVja2JveC1wYW5lbCc6IFNiYkNoZWNrYm94UGFuZWxFbGVtZW50O1xuICB9XG59XG4iXSwibmFtZXMiOlsiU2JiQ2hlY2tib3hQYW5lbEVsZW1lbnQiLCJfYSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztJQWdETSwyQkFBdUIsTUFBQTs7QUFGNUIsTUFBQSxtQkFBQSxDQUFBLGNBQWMsb0JBQW9CLEdBQ2xDLFdBQVc7Ozs7b0JBQzBCLGNBQ3BDLDhCQUE4Qix3QkFBd0IsVUFBVSxDQUFDLENBQUM7Ozs7QUFEdENBLE1BQUFBLDRCQUFBLG1CQUFRLFlBRXJDO0FBQUE7O0FBYUM7QUFBZ0IseUJBQUEsd0JBQUEsa0JBQUEsTUFBQSxvQkFBcUIsR0FBRztBQU85QixXQUFBLGlFQUF5RCxJQUFJLGFBQ3JFLE1BQ0FBLHlCQUF3QixPQUFPLGFBQy9CLEVBQUUsU0FBUyxLQUFNLENBQUE7QUFBQSxJQUFBO0FBQUE7QUFBQSxJQVZuQixJQUFnQixPQUF5QjtBQUFBLGFBQUEsbUJBQUE7QUFBQSxJQUFBO0FBQUEsSUFBekMsSUFBZ0IsS0FBeUIsT0FBQTtBQUFBLHlCQUFBLHdCQUFBO0FBQUEsSUFBQTtBQUFBLElBYXRCLFdBQVcsbUJBQXVDO0FBQ25FLFlBQU0sV0FBVyxpQkFBaUI7QUFFOUIsVUFBQSxrQkFBa0IsSUFBSSxTQUFTLEdBQUc7QUFFL0IsYUFBQSxnQkFBZ0IsZ0JBQWdCLEtBQUssT0FBTztBQUVqRCxZQUFJLEtBQUssWUFBWSxrQkFBa0IsSUFBSSxTQUFTLEdBQUk7QUFDakQsZUFBQSxZQUFZLEtBQUssRUFBRSxNQUFNLFdBQVcsU0FBUyxLQUFLLFNBQVM7QUFBQSxRQUFBO0FBQUEsTUFDbEU7QUFFRSxVQUFBLGtCQUFrQixJQUFJLFVBQVUsR0FBRztBQUNyQyxZQUFJLEtBQUssYUFBYSxrQkFBa0IsSUFBSSxVQUFVLEdBQUk7QUFDbkQsZUFBQSxZQUFZLEtBQUssRUFBRSxNQUFNLFlBQVksVUFBVSxLQUFLLFVBQVU7QUFBQSxRQUFBO0FBQUEsTUFDckU7QUFBQSxJQUNGO0FBQUEsSUFHaUIsU0FBTTtBQUNoQixhQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsNkJBVWtCLEtBQUssT0FBTztBQUFBLG1DQUNOLEtBQUssYUFBYTtBQUFBLDhCQUN2QixLQUFLLFlBQVksS0FBSyxZQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGNBU2xELEtBQUssaUJBQ0gsK0JBQStCLEtBQUssY0FBYyw4QkFDbEQsT0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQTtBQUFBLEtBdkRyQjs7d0JBRkMsU0FBUyxFQUFFLFNBQVMsTUFBTSxHQUMxQixZQUFZLENBQUMsR0FBRzs7QUFBTyxlQUFBQyxNQUFBLEVBQUUsVUFBRixnQkFBQUEsSUFBUyxRQUFRLEVBQUUsTUFBTSxTQUFTLE9BQU8sTUFBTSxFQUFFLE1BQU0sT0FBUTtBQUFBLEtBQUUsQ0FBQztBQUMxRSxpQkFBQSxJQUFBLE1BQUEsa0JBQUEsRUFBQSxNQUFBLFlBQUEsTUFBQSxRQUFBLFFBQUEsT0FBQSxTQUFBLE9BQUEsUUFBQSxFQUFBLEtBQUEsQ0FBQSxRQUFBLFVBQUEsS0FBQSxLQUFBLENBQUEsUUFBQSxJQUFBLE1BQUEsS0FBQSxDQUFBLEtBQUEsVUFBQTtBQUFBLFVBQUEsT0FBeUI7QUFBQSxTQUFBLFVBQUEsYUFBQSxvQkFBQSx1QkFBQTtBQWYzQyxpQkE0RUMsTUFBQSxtQkFBQSxFQUFBLE9BQUEsV0FBQSxHQUFBLGtCQUFBLEVBQUEsTUFBQSxTQUFBLE1BQUEsV0FBQSxNQUFBLFVBQUEsVUFBQSxHQUFBLE1BQUEsdUJBQUE7OztRQXpFd0IsR0FBQSxTQUF5QixDQUFDLHFCQUFxQixnQkFBZ0IsR0FHL0QsR0FBQSxTQUFTO0FBQUEsSUFDOUIsV0FBVztBQUFBLElBQ1gsYUFBYTtBQUFBLElBQ2IsZ0JBQWdCO0FBQUEsRUFDUixHQVZOLGtCQUF1QixZQUFBLHVCQUFBLEdBQUM7OzsifQ==
|