@kirbydesign/designsystem 5.0.22 → 5.2.2

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.
Files changed (46) hide show
  1. package/bundles/kirbydesign-designsystem-testing-base.umd.js +3 -1
  2. package/bundles/kirbydesign-designsystem-testing-base.umd.js.map +1 -1
  3. package/bundles/kirbydesign-designsystem-testing-base.umd.min.js +1 -1
  4. package/bundles/kirbydesign-designsystem-testing-base.umd.min.js.map +1 -1
  5. package/bundles/kirbydesign-designsystem.umd.js +84 -38
  6. package/bundles/kirbydesign-designsystem.umd.js.map +1 -1
  7. package/bundles/kirbydesign-designsystem.umd.min.js +1 -1
  8. package/bundles/kirbydesign-designsystem.umd.min.js.map +1 -1
  9. package/esm2015/lib/components/calendar/calendar.component.js +8 -2
  10. package/esm2015/lib/components/calendar/calendar.component.metadata.json +1 -1
  11. package/esm2015/lib/components/card/card.component.js +7 -2
  12. package/esm2015/lib/components/card/card.component.metadata.json +1 -1
  13. package/esm2015/lib/components/chart/chart-js/chart-js.service.js +22 -6
  14. package/esm2015/lib/components/chart/chart-js/configured-chart-js.js +4 -3
  15. package/esm2015/lib/components/chart/chart-js/configured-chart-js.metadata.json +1 -1
  16. package/esm2015/lib/components/chart/chart.component.js +24 -20
  17. package/esm2015/lib/components/chart/chart.component.metadata.json +1 -1
  18. package/esm2015/lib/components/item/item.component.js +1 -1
  19. package/esm2015/lib/components/item/item.component.metadata.json +1 -1
  20. package/esm2015/lib/components/item-sliding/item-sliding.component.js +1 -1
  21. package/esm2015/lib/components/item-sliding/item-sliding.component.metadata.json +1 -1
  22. package/esm2015/lib/components/list/list-experimental/list-experimental.component.js +3 -2
  23. package/esm2015/lib/components/list/list-experimental/list-experimental.component.metadata.json +1 -1
  24. package/esm2015/lib/components/modal/footer/modal-footer.component.js +6 -4
  25. package/esm2015/lib/components/modal/footer/modal-footer.component.metadata.json +1 -1
  26. package/esm2015/lib/directives/fit-heading/fit-heading.directive.js +10 -2
  27. package/esm2015/testing-base/lib/components/mock.card.component.js +2 -1
  28. package/esm2015/testing-base/lib/components/mock.card.component.metadata.json +1 -1
  29. package/esm2015/testing-base/lib/components/mock.modal-footer.component.js +3 -2
  30. package/esm2015/testing-base/lib/components/mock.modal-footer.component.metadata.json +1 -1
  31. package/fesm2015/kirbydesign-designsystem-testing-base.js +3 -1
  32. package/fesm2015/kirbydesign-designsystem-testing-base.js.map +1 -1
  33. package/fesm2015/kirbydesign-designsystem.js +77 -34
  34. package/fesm2015/kirbydesign-designsystem.js.map +1 -1
  35. package/kirbydesign-designsystem.metadata.json +1 -1
  36. package/lib/components/calendar/calendar.component.d.ts +1 -0
  37. package/lib/components/card/card.component.d.ts +2 -0
  38. package/lib/components/chart/chart-js/configured-chart-js.d.ts +1 -0
  39. package/lib/components/chart/chart.component.d.ts +1 -0
  40. package/lib/components/modal/footer/modal-footer.component.d.ts +1 -0
  41. package/package.json +2 -2
  42. package/readme.md +2 -7
  43. package/scss/base/_html-list.scss +1 -0
  44. package/testing-base/kirbydesign-designsystem-testing-base.metadata.json +1 -1
  45. package/testing-base/lib/components/mock.card.component.d.ts +1 -0
  46. package/testing-base/lib/components/mock.modal-footer.component.d.ts +1 -0
@@ -27,6 +27,11 @@ export class CalendarComponent {
27
27
  this.disableFutureDates = false;
28
28
  this.alwaysEnableToday = false;
29
29
  this.customLocales = {};
30
+ /*
31
+ Experimental: Input property not documented on purpose.
32
+ For context see: https://github.com/kirbydesign/designsystem/issues/2087
33
+ */
34
+ this.usePopover = false;
30
35
  this._disabledDates = [];
31
36
  this.includedLocales = { da, enGB, enUS };
32
37
  this.locale = this.mapLocale(locale);
@@ -356,7 +361,7 @@ export class CalendarComponent {
356
361
  CalendarComponent.decorators = [
357
362
  { type: Component, args: [{
358
363
  selector: 'kirby-calendar',
359
- template: "<div class=\"header\">\n <div class=\"month-navigator\">\n <button [disabled]=\"!_canNavigateBack\" (click)=\"_changeMonth(-1)\">\n <kirby-icon name=\"arrow-back\"></kirby-icon>\n </button>\n\n <div class=\"month-and-year\">\n <span class=\"month\">{{ activeMonthName }}</span\n ><span *ngIf=\"!_hasYearNavigator\" class=\"year\">{{ activeYear }}</span>\n </div>\n\n <button [disabled]=\"!_canNavigateForward\" (click)=\"_changeMonth(1)\">\n <kirby-icon name=\"arrow-more\"></kirby-icon>\n </button>\n </div>\n <kirby-dropdown\n *ngIf=\"_hasYearNavigator\"\n [selectedIndex]=\"navigatedYear\"\n [items]=\"navigableYears\"\n popout=\"left\"\n (change)=\"_changeYear($event)\"\n >\n </kirby-dropdown>\n</div>\n\n<table>\n <thead>\n <tr>\n <th *ngFor=\"let weekDay of _weekDays\">{{ weekDay }}</th>\n </tr>\n </thead>\n\n <tbody>\n <tr *ngFor=\"let week of _month\">\n <td *ngFor=\"let day of week\">\n <div\n (click)=\"_onDateSelected(day)\"\n class=\"{{ day.cssClasses }}\"\n [class.selected]=\"day.isSelected\"\n >\n {{ day.date }}\n </div>\n </td>\n </tr>\n </tbody>\n</table>\n\n<!-- <iframe src=\"kirby/components/calendar/calendar.webview.html\" #calendarContainer style=\"width: 320px; height: 304px; border: 0\"> -->\n",
364
+ template: "<div class=\"header\">\n <div class=\"month-navigator\">\n <button [disabled]=\"!_canNavigateBack\" (click)=\"_changeMonth(-1)\">\n <kirby-icon name=\"arrow-back\"></kirby-icon>\n </button>\n\n <div class=\"month-and-year\">\n <span class=\"month\">{{ activeMonthName }}</span\n ><span *ngIf=\"!_hasYearNavigator\" class=\"year\">{{ activeYear }}</span>\n </div>\n\n <button [disabled]=\"!_canNavigateForward\" (click)=\"_changeMonth(1)\">\n <kirby-icon name=\"arrow-more\"></kirby-icon>\n </button>\n </div>\n <kirby-dropdown\n *ngIf=\"_hasYearNavigator\"\n [usePopover]=\"usePopover\"\n [selectedIndex]=\"navigatedYear\"\n [items]=\"navigableYears\"\n popout=\"left\"\n (change)=\"_changeYear($event)\"\n >\n </kirby-dropdown>\n</div>\n\n<table>\n <thead>\n <tr>\n <th *ngFor=\"let weekDay of _weekDays\">{{ weekDay }}</th>\n </tr>\n </thead>\n\n <tbody>\n <tr *ngFor=\"let week of _month\">\n <td *ngFor=\"let day of week\">\n <div\n (click)=\"_onDateSelected(day)\"\n class=\"{{ day.cssClasses }}\"\n [class.selected]=\"day.isSelected\"\n >\n {{ day.date }}\n </div>\n </td>\n </tr>\n </tbody>\n</table>\n\n<!-- <iframe src=\"kirby/components/calendar/calendar.webview.html\" #calendarContainer style=\"width: 320px; height: 304px; border: 0\"> -->\n",
360
365
  providers: [CalendarHelper],
361
366
  styles: ["table{width:100%;border-collapse:collapse;-webkit-user-select:none;user-select:none;margin-bottom:8px}td,th{text-align:center;padding:0}td:first-child,th:first-child{padding-left:8px}td:last-child,th:last-child{padding-right:8px}th{height:50px;border-bottom:1px solid var(--kirby-background-color)}.header,td,th{background-color:transparent}.header{margin:8px 8px 0}.header,.month-navigator{display:flex;justify-content:space-between}.month-navigator{flex-grow:1;align-items:center}.month-navigator button{background-color:transparent;outline:none;border:none;color:inherit;cursor:pointer;height:40px;width:40px;padding:0}.month-navigator button:disabled{opacity:.5;pointer-events:none}.month-and-year{-webkit-user-select:none;user-select:none}.month-and-year .month{font-weight:700;margin-right:8px}:host(.has-year-navigator) .month-navigator{flex-grow:0}:host(.has-year-navigator) .month-and-year{width:80px;margin:0 8px;text-align:center}:host(.has-year-navigator) .month{margin-right:0}.day{display:inline-flex;align-items:center;justify-content:center;border-radius:20px;width:40px;height:40px;margin:4px 0}.day.selectable,.day.selected{cursor:pointer}.day.disabled,.day:not(.selectable){color:var(--kirby-text-color-semi-dark)}.day.today{color:var(--kirby-medium-contrast);background-color:var(--kirby-medium)}.day.selected{color:var(--kirby-black-contrast);background-color:var(--kirby-black)}.day:not(.current-month){visibility:hidden;pointer-events:none}.day.selectable:not(.selected):hover{color:var(--kirby-light-contrast);background-color:var(--kirby-light)}"]
362
367
  },] }
@@ -377,6 +382,7 @@ CalendarComponent.propDecorators = {
377
382
  disableFutureDates: [{ type: Input }],
378
383
  alwaysEnableToday: [{ type: Input }],
379
384
  customLocales: [{ type: Input }],
385
+ usePopover: [{ type: Input }],
380
386
  yearNavigatorOptions: [{ type: Input }],
381
387
  selectedDate: [{ type: Input }],
382
388
  disabledDates: [{ type: Input }],
@@ -385,4 +391,4 @@ CalendarComponent.propDecorators = {
385
391
  maxDate: [{ type: Input }],
386
392
  _hasYearNavigator: [{ type: HostBinding, args: ['class.has-year-navigator',] }]
387
393
  };
388
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9kZXNpZ25zeXN0ZW0vc3JjL2xpYi9jb21wb25lbnRzL2NhbGVuZGFyL2NhbGVuZGFyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLE1BQU0sRUFDTixLQUFLLEVBQ0wsU0FBUyxFQUdULE1BQU0sRUFFTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLEdBQUcsRUFDSCxnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLFVBQVUsRUFDVixTQUFTLEVBQ1QsTUFBTSxFQUNOLE9BQU8sRUFDUCxPQUFPLEVBQ1AsUUFBUSxFQUNSLFNBQVMsRUFDVCxXQUFXLEVBQ1gsU0FBUyxFQUVULFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxHQUNaLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzdELE9BQU8sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWpELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBSTFELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQWEzRCxJQUFLLFFBU0o7QUFURCxXQUFLLFFBQVE7SUFDWCwyQkFBZSxDQUFBO0lBQ2YsNkJBQWlCLENBQUE7SUFDakIsMkJBQWUsQ0FBQTtJQUNmLHlCQUFhLENBQUE7SUFDYiwyQkFBZSxDQUFBO0lBQ2YsK0JBQW1CLENBQUE7SUFDbkIsK0JBQW1CLENBQUE7SUFDbkIseUNBQTZCLENBQUE7QUFDL0IsQ0FBQyxFQVRJLFFBQVEsS0FBUixRQUFRLFFBU1o7QUFR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LEdBQUcsU0FBUyxDQUFDO1FBQzFDLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxhQUFhLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3pGLENBQUM7OztZQTFiRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLGdCQUFnQjtnQkFDMUIsczJDQUF3QztnQkFFeEMsU0FBUyxFQUFFLENBQUMsY0FBYyxDQUFDOzthQUM1Qjs7OztZQTdCUSxjQUFjO3lDQW9KZ0MsTUFBTSxTQUFDLFNBQVM7OztnQ0FySHBFLFNBQVMsU0FBQyxtQkFBbUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7eUJBQ2hELE1BQU07eUJBQ04sTUFBTTt5QkFDTixNQUFNO3VCQUNOLEtBQUs7OEJBQ0wsS0FBSzsrQkFDTCxLQUFLO2lDQUNMLEtBQUs7Z0NBQ0wsS0FBSzs0QkFDTCxLQUFLO21DQVFMLEtBQUs7MkJBc0JMLEtBQUs7NEJBY0wsS0FBSzt3QkFRTCxLQUFLO3NCQVFMLEtBQUs7c0JBV0wsS0FBSztnQ0FnQ0wsV0FBVyxTQUFDLDBCQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgTE9DQUxFX0lELFxuICBPbkNoYW5nZXMsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgYWRkLFxuICBkaWZmZXJlbmNlSW5EYXlzLFxuICBlYWNoRGF5T2ZJbnRlcnZhbCxcbiAgZW5kT2ZNb250aCxcbiAgZW5kT2ZXZWVrLFxuICBmb3JtYXQsXG4gIGdldFllYXIsXG4gIGlzQWZ0ZXIsXG4gIGlzQmVmb3JlLFxuICBpc1NhbWVEYXksXG4gIGlzU2FtZU1vbnRoLFxuICBpc1dlZWtlbmQsXG4gIExvY2FsZSBhcyBMb2NhbGVEYXRlRm5zLFxuICBzdGFydE9mRGF5LFxuICBzdGFydE9mTW9udGgsXG4gIHN0YXJ0T2ZXZWVrLFxufSBmcm9tICdkYXRlLWZucyc7XG5pbXBvcnQgeyB1dGNUb1pvbmVkVGltZSwgem9uZWRUaW1lVG9VdGMgfSBmcm9tICdkYXRlLWZucy10eic7XG5pbXBvcnQgeyBkYSwgZW5HQiwgZW5VUyB9IGZyb20gJ2RhdGUtZm5zL2xvY2FsZSc7XG5cbmltcG9ydCB7IGNhcGl0YWxpemVGaXJzdExldHRlciB9IGZyb20gJ0BraXJieWRlc2lnbi9jb3JlJztcblxuaW1wb3J0IHsgQ2FsZW5kYXJDZWxsIH0gZnJvbSAnLi9oZWxwZXJzL2NhbGVuZGFyLWNlbGwubW9kZWwnO1xuaW1wb3J0IHsgQ2FsZW5kYXJPcHRpb25zIH0gZnJvbSAnLi9oZWxwZXJzL2NhbGVuZGFyLW9wdGlvbnMubW9kZWwnO1xuaW1wb3J0IHsgQ2FsZW5kYXJIZWxwZXIgfSBmcm9tICcuL2hlbHBlcnMvY2FsZW5kYXIuaGVscGVyJztcbmltcG9ydCB7IENhbGVuZGFyWWVhck5hdmlnYXRvckNvbmZpZyB9IGZyb20gJy4vb3B0aW9ucy9jYWxlbmRhci15ZWFyLW5hdmlnYXRvci1jb25maWcnO1xuXG5leHBvcnQgdHlwZSBMb2NhbGUgPSBMb2NhbGVEYXRlRm5zO1xuaW50ZXJmYWNlIENhbGVuZGFyRGF5IHtcbiAgaXNDdXJyZW50TW9udGg6IGJvb2xlYW47XG4gIGlzVG9kYXk6IGJvb2xlYW47XG4gIGlzV2Vla2VuZDogYm9vbGVhbjtcbiAgaXNQYXN0OiBib29sZWFuO1xuICBpc0Z1dHVyZTogYm9vbGVhbjtcbiAgaXNEaXNhYmxlZDogYm9vbGVhbjtcbn1cblxuZW51bSBUaW1lVW5pdCB7XG4gIHllYXJzID0gJ3llYXJzJyxcbiAgbW9udGhzID0gJ21vbnRocycsXG4gIHdlZWtzID0gJ3dlZWtzJyxcbiAgZGF5cyA9ICdkYXlzJyxcbiAgaG91cnMgPSAnaG91cnMnLFxuICBtaW51dGVzID0gJ21pbnV0ZXMnLFxuICBzZWNvbmRzID0gJ3NlY29uZHMnLFxuICBtaWxsaXNlY29uZHMgPSAnbWlsbGlzZWNvbmRzJyxcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAna2lyYnktY2FsZW5kYXInLFxuICB0ZW1wbGF0ZVVybDogJy4vY2FsZW5kYXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jYWxlbmRhci5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtDYWxlbmRhckhlbHBlcl0sXG59KVxuZXhwb3J0IGNsYXNzIENhbGVuZGFyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMge1xuICBAVmlld0NoaWxkKCdjYWxlbmRhckNvbnRhaW5lcicsIHsgc3RhdGljOiBmYWxzZSB9KSBjYWxlbmRhckNvbnRhaW5lcjogRWxlbWVudFJlZjtcbiAgQE91dHB1dCgpIGRhdGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGU+KCk7XG4gIEBPdXRwdXQoKSBkYXRlU2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlPigpO1xuICBAT3V0cHV0KCkgeWVhclNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuICBASW5wdXQoKSB0aW1lem9uZTogJ2xvY2FsJyB8ICdVVEMnID0gJ2xvY2FsJztcbiAgQElucHV0KCkgZGlzYWJsZVdlZWtlbmRzID0gZmFsc2U7XG4gIEBJbnB1dCgpIGRpc2FibGVQYXN0RGF0ZXMgPSBmYWxzZTtcbiAgQElucHV0KCkgZGlzYWJsZUZ1dHVyZURhdGVzID0gZmFsc2U7XG4gIEBJbnB1dCgpIGFsd2F5c0VuYWJsZVRvZGF5ID0gZmFsc2U7XG4gIEBJbnB1dCgpIGN1c3RvbUxvY2FsZXM6IHsgW2tleTogc3RyaW5nXTogTG9jYWxlIH0gPSB7fTtcbiAgLyoqXG4gICAqIENvbmZpZ3VyYXRpb24gZm9yIHRoZSB5ZWFyIG5hdmlnYXRvci5cbiAgICpcbiAgICogSW50ZXJuYWxseSwgY2FsZW5kYXIgY29tcG9uZW50OlxuICAgKiAtIGJhc2VzIHllYXJOYXZpZ2F0b3JPcHRpb25zLmZyb20gYW5kIHllYXJOYXZpZ2F0b3JPcHRpb25zLnRvIG9uIHRvZGF5RGF0ZSBpZiBhIG51bWJlciBpcyBwcm92aWRlZFxuICAgKiAtIHByaW9yaXRpemVzIG1pbkRhdGUgYW5kIG1heERhdGUgb3ZlciB5ZWFyTmF2aWdhdG9yT3B0aW9ucy5mcm9tIGFuZCB5ZWFyTmF2aWdhdG9yT3B0aW9ucy50b1xuICAgKi9cbiAgQElucHV0KCkgeWVhck5hdmlnYXRvck9wdGlvbnM6IENhbGVuZGFyWWVhck5hdmlnYXRvckNvbmZpZztcblxuICBfbW9udGg6IENhbGVuZGFyQ2VsbFtdW107XG4gIF93ZWVrRGF5czogc3RyaW5nW107XG4gIHByaXZhdGUgc2VsZWN0ZWREYXk6IENhbGVuZGFyQ2VsbDtcbiAgLy8gTk9URTogSW50ZXJuYWxseSwgYWxsIERhdGVzXG4gIC8vIGFyZSBub3JtYWxpemVkIHRvIHBvaW50IHRvIGxvY2FsIHRpbWV6b25lIG1pZG5pZ2h0LCByZWdhcmRsZXNzIG9mIHRoZSB0aW1lem9uZVxuICAvLyBzZXR0aW5nLlxuICBwcml2YXRlIGFjdGl2ZU1vbnRoOiBEYXRlO1xuICBwcml2YXRlIF9zZWxlY3RlZERhdGU6IERhdGU7XG4gIHByaXZhdGUgX2Rpc2FibGVkRGF0ZXM6IERhdGVbXSA9IFtdO1xuICBwcml2YXRlIF90b2RheURhdGU6IERhdGU7XG4gIHByaXZhdGUgX21pbkRhdGU6IERhdGU7XG4gIHByaXZhdGUgX21heERhdGU6IERhdGU7XG4gIHByaXZhdGUgbG9jYWxlOiBMb2NhbGU7XG4gIHByaXZhdGUgdGltZVpvbmVOYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgaW5jbHVkZWRMb2NhbGVzID0geyBkYSwgZW5HQiwgZW5VUyB9O1xuXG4gIGdldCBzZWxlY3RlZERhdGUoKTogRGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkRGF0ZTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBzZWxlY3RlZERhdGUodmFsdWVMb2NhbE9yVVRDOiBEYXRlKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLm5vcm1hbGl6ZURhdGUodmFsdWVMb2NhbE9yVVRDKTtcbiAgICB0aGlzLnNldEFjdGl2ZU1vbnRoKHZhbHVlKTtcblxuICAgIGlmICh0aGlzLmhhc0RhdGVDaGFuZ2VkKHZhbHVlLCB0aGlzLl9zZWxlY3RlZERhdGUpKSB7XG4gICAgICB0aGlzLm9uU2VsZWN0ZWREYXRlQ2hhbmdlKHZhbHVlKTtcbiAgICAgIHRoaXMuX3NlbGVjdGVkRGF0ZSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGdldCBkaXNhYmxlZERhdGVzKCk6IERhdGVbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkRGF0ZXM7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgZGlzYWJsZWREYXRlcyh2YWx1ZTogRGF0ZVtdKSB7XG4gICAgdGhpcy5fZGlzYWJsZWREYXRlcyA9ICh2YWx1ZSB8fCBbXSkubWFwKChkYXRlKSA9PiB0aGlzLm5vcm1hbGl6ZURhdGUoZGF0ZSkpO1xuICB9XG5cbiAgZ2V0IHRvZGF5RGF0ZSgpOiBEYXRlIHtcbiAgICByZXR1cm4gdGhpcy5fdG9kYXlEYXRlO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IHRvZGF5RGF0ZSh2YWx1ZTogRGF0ZSkge1xuICAgIHRoaXMuX3RvZGF5RGF0ZSA9IHRoaXMubm9ybWFsaXplRGF0ZSh2YWx1ZSk7XG4gIH1cblxuICBnZXQgbWluRGF0ZSgpOiBEYXRlIHtcbiAgICByZXR1cm4gdGhpcy5fbWluRGF0ZTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBtaW5EYXRlKHZhbHVlOiBEYXRlKSB7XG4gICAgaWYgKHZhbHVlICYmIHRoaXMuYWN0aXZlTW9udGggJiYgaXNCZWZvcmUodGhpcy5hY3RpdmVNb250aCwgdmFsdWUpKSB7XG4gICAgICB0aGlzLnNldEFjdGl2ZU1vbnRoKHZhbHVlKTtcbiAgICB9XG4gICAgdGhpcy5fbWluRGF0ZSA9IHRoaXMubm9ybWFsaXplRGF0ZSh2YWx1ZSk7XG4gIH1cblxuICBnZXQgbWF4RGF0ZSgpOiBEYXRlIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4RGF0ZTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBtYXhEYXRlKHZhbHVlOiBEYXRlKSB7XG4gICAgaWYgKHZhbHVlICYmIHRoaXMuYWN0aXZlTW9udGggJiYgaXNBZnRlcih0aGlzLmFjdGl2ZU1vbnRoLCB2YWx1ZSkpIHtcbiAgICAgIHRoaXMuc2V0QWN0aXZlTW9udGgodmFsdWUpO1xuICAgIH1cbiAgICB0aGlzLl9tYXhEYXRlID0gdGhpcy5ub3JtYWxpemVEYXRlKHZhbHVlKTtcbiAgfVxuXG4gIGdldCBhY3RpdmVNb250aE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKHRoaXMuZm9ybWF0V2l0aExvY2FsZSh0aGlzLmFjdGl2ZU1vbnRoLCAnTU1NTScpKTtcbiAgfVxuXG4gIGdldCBhY3RpdmVZZWFyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybWF0V2l0aExvY2FsZSh0aGlzLmFjdGl2ZU1vbnRoLCAneXl5eScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgbmF2aWdhYmxlIHllYXJzIGZvciB5ZWFyIG5hdmlnYXRvciBiYXNlZCBvbiB5ZWFyTmF2aWdhdG9yT3B0aW9ucy5cbiAgICovXG4gIGdldCBuYXZpZ2FibGVZZWFycygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgZGF0ZU9mRmlyc3ROYXZpZ2FibGVZZWFyID1cbiAgICAgIHRoaXMubWluRGF0ZSB8fCB0aGlzLmdldERhdGVGcm9tTmF2aWdhYmxlWWVhcih0aGlzLnllYXJOYXZpZ2F0b3JPcHRpb25zLmZyb20pO1xuXG4gICAgY29uc3QgZGF0ZU9mTGFzdE5hdmlnYWJsZVllYXIgPVxuICAgICAgdGhpcy5tYXhEYXRlIHx8IHRoaXMuZ2V0RGF0ZUZyb21OYXZpZ2FibGVZZWFyKHRoaXMueWVhck5hdmlnYXRvck9wdGlvbnMudG8pO1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0WWVhcnNCZXR3ZWVuRGF0ZXMoZGF0ZU9mRmlyc3ROYXZpZ2FibGVZZWFyLCBkYXRlT2ZMYXN0TmF2aWdhYmxlWWVhcik7XG4gIH1cblxuICBnZXQgbmF2aWdhdGVkWWVhcigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLm5hdmlnYWJsZVllYXJzLmluZGV4T2YodGhpcy5hY3RpdmVZZWFyKTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuaGFzLXllYXItbmF2aWdhdG9yJylcbiAgZ2V0IF9oYXNZZWFyTmF2aWdhdG9yKCkge1xuICAgIHJldHVybiAhIXRoaXMueWVhck5hdmlnYXRvck9wdGlvbnM7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNhbGVuZGFySGVscGVyOiBDYWxlbmRhckhlbHBlciwgQEluamVjdChMT0NBTEVfSUQpIGxvY2FsZTogc3RyaW5nKSB7XG4gICAgdGhpcy5sb2NhbGUgPSB0aGlzLm1hcExvY2FsZShsb2NhbGUpO1xuICAgIHRoaXMudGltZVpvbmVOYW1lID0gSW50bC5EYXRlVGltZUZvcm1hdCgpLnJlc29sdmVkT3B0aW9ucygpLnRpbWVab25lO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRXaXRoTG9jYWxlKGRhdGU6IERhdGUsIGZvcm1hdFN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZm9ybWF0KGRhdGUsIGZvcm1hdFN0cmluZywge1xuICAgICAgbG9jYWxlOiB0aGlzLmxvY2FsZSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwTG9jYWxlKGxvY2FsZTogc3RyaW5nKTogTG9jYWxlIHtcbiAgICBpZiAobG9jYWxlID09PSAnZW4nKSB7XG4gICAgICBsb2NhbGUgPSAnZW5HQic7IC8vIGlmIGVuZ2xpc2ggbG9jYWxlIGlzIHByb3ZpZGVkIHdpdGhvdXQgcmVnaW9uLCB3ZSBkZWZhdWx0IHRvIEdCXG4gICAgfVxuICAgIGxvY2FsZSA9IGxvY2FsZS5yZXBsYWNlKCctJywgJycpO1xuICAgIGNvbnN0IGF2YWlsYWJsZUxvY2FsZXMgPSB7IC4uLnRoaXMuaW5jbHVkZWRMb2NhbGVzLCAuLi50aGlzLmN1c3RvbUxvY2FsZXMgfTtcblxuICAgIHJldHVybiBhdmFpbGFibGVMb2NhbGVzW2xvY2FsZV0gfHwgdGhpcy5pbmNsdWRlZExvY2FsZXMuZW5HQjsgLy8gRGVmYXVsdCB0byBlbkdCIGlmIGluamVjdGVkIGxvY2FsZSBkb2VzbnQgZXhpc3RcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuX3dlZWtEYXlzID0gdGhpcy5nZXRXZWVrRGF5cygpO1xuICAgIHRoaXMuc2V0QWN0aXZlTW9udGgodGhpcy5zZWxlY3RlZERhdGUpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuY2FsZW5kYXJIZWxwZXIuaW5pdChcbiAgICAgIHRoaXMuY2FsZW5kYXJDb250YWluZXIsXG4gICAgICB0aGlzLmdldEhlbHBlck9wdGlvbnMoKSxcbiAgICAgIHRoaXMuX29uRGF0ZVNlbGVjdGVkLmJpbmQodGhpcyksXG4gICAgICB0aGlzLm9uQ2hhbmdlTW9udGguYmluZCh0aGlzKVxuICAgICk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmFjdGl2ZU1vbnRoKSByZXR1cm47XG4gICAgaWYgKFxuICAgICAgY2hhbmdlcy5kaXNhYmxlV2Vla2VuZHMgfHxcbiAgICAgIGNoYW5nZXMuZGlzYWJsZVBhc3REYXRlcyB8fFxuICAgICAgY2hhbmdlcy5kaXNhYmxlRnV0dXJlRGF0ZXMgfHxcbiAgICAgIGNoYW5nZXMuZGlzYWJsZWREYXRlcyB8fFxuICAgICAgY2hhbmdlcy5taW5EYXRlIHx8XG4gICAgICBjaGFuZ2VzLm1heERhdGUgfHxcbiAgICAgIGNoYW5nZXMudG9kYXlEYXRlIHx8XG4gICAgICBjaGFuZ2VzLnRpbWV6b25lXG4gICAgKSB7XG4gICAgICB0aGlzLnJlZnJlc2hBY3RpdmVNb250aCgpO1xuICAgICAgdGhpcy5jYWxlbmRhckhlbHBlci51cGRhdGUodGhpcy5nZXRIZWxwZXJPcHRpb25zKCkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0QWN0aXZlTW9udGgoZGF0ZTogRGF0ZSA9IG5ldyBEYXRlKCkpIHtcbiAgICBpZiAoIXRoaXMuYWN0aXZlTW9udGggfHwgIWlzU2FtZU1vbnRoKHRoaXMuYWN0aXZlTW9udGgsIGRhdGUpKSB7XG4gICAgICB0aGlzLmFjdGl2ZU1vbnRoID0gc3RhcnRPZk1vbnRoKGRhdGUpO1xuICAgICAgdGhpcy5yZWZyZXNoQWN0aXZlTW9udGgoKTtcbiAgICAgIHRoaXMuY2FsZW5kYXJIZWxwZXIudXBkYXRlKHRoaXMuZ2V0SGVscGVyT3B0aW9ucygpKTtcbiAgICB9XG4gIH1cblxuICAvLyBGb3IgbGVuaWVuY3ksIHRoZSBjb21wb25lbnQgd2lsbCBhY2NlcHQgYW55IERhdGUgdGhhdCBwb2ludHMgdG8gZWl0aGVyIFVUQyBtaWRuaWdodFxuICAvLyBvciB0byBsb2NhbCB0aW1lem9uZSBtaWRuaWdodCBhbHRob3VnaCB3ZSB3aWxsIGludGVybmFsbHkgbm9ybWFsaXplIHRoZSByZXByZXNlbnRhdGlvblxuICAvLyBvZiBhbGwgcmVjZWl2ZWQgZGF0ZXMgdG8gcG9pbnQgdG8gbG9jYWwgdGltZXpvbmUgbWlkbmlnaHQuXG4gIC8vIFdlIGN1cnJlbnRseSBsb2cgbm8gd2FybmluZ3MgaWYgdGhlIGRhdGUgZG9lc24ndCBtYXRjaCB0aGUgdGltZXpvbmUgc2V0dGluZyBvclxuICAvLyBpZiBpdCBkb2Vzbid0IHBvaW50IHRvIG1pZG5pZ2h0LlxuICBwcml2YXRlIG5vcm1hbGl6ZURhdGUoZGF0ZUxvY2FsT3JVVEM6IERhdGUpIHtcbiAgICBpZiAoIWRhdGVMb2NhbE9yVVRDKSByZXR1cm47XG5cbiAgICBpZiAoc3RhcnRPZkRheShkYXRlTG9jYWxPclVUQykuZ2V0VGltZSgpID09PSBkYXRlTG9jYWxPclVUQy5nZXRUaW1lKCkpIHtcbiAgICAgIC8vIGRhdGUgaXMgbG9jYWwgdGltZXpvbmUgbWlkbmlnaHRcbiAgICAgIHJldHVybiBkYXRlTG9jYWxPclVUQztcbiAgICB9XG4gICAgaWYgKFxuICAgICAgc3RhcnRPZkRheSh1dGNUb1pvbmVkVGltZShkYXRlTG9jYWxPclVUQywgdGhpcy50aW1lWm9uZU5hbWUpKS5nZXRUaW1lKCkgPT09XG4gICAgICB1dGNUb1pvbmVkVGltZShkYXRlTG9jYWxPclVUQywgdGhpcy50aW1lWm9uZU5hbWUpLmdldFRpbWUoKVxuICAgICkge1xuICAgICAgLy8gdGhlIGRhdGUgaXMgYSBVVEMgbWlkbmlnaHQ7IGNyZWF0ZSB0aGUgZXF1aXZhbGVudCBsb2NhbCB0aW1lem9uZSBtaWRuaWdodCBkYXRlXG4gICAgICBjb25zdCBub3JtYWxpemVkVVRDZGF0ZSA9IHV0Y1RvWm9uZWRUaW1lKGRhdGVMb2NhbE9yVVRDLCB0aGlzLnRpbWVab25lTmFtZSk7XG4gICAgICByZXR1cm4gbm9ybWFsaXplZFVUQ2RhdGU7XG4gICAgfVxuICAgIC8vIGRvZXMgbm90IHBvaW50IHRvIG1pZG5pZ2h0IHNvIHdlIG1ha2UgaXRcbiAgICByZXR1cm4gc3RhcnRPZkRheShkYXRlTG9jYWxPclVUQyk7XG4gIH1cblxuICBwcml2YXRlIGdldFdlZWtEYXlzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuXG4gICAgY29uc3Qgd2VlayA9IGVhY2hEYXlPZkludGVydmFsKHtcbiAgICAgIHN0YXJ0OiBzdGFydE9mV2Vlayhub3csIHsgbG9jYWxlOiB0aGlzLmxvY2FsZSB9KSxcbiAgICAgIGVuZDogZW5kT2ZXZWVrKG5vdywgeyBsb2NhbGU6IHRoaXMubG9jYWxlIH0pLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHdlZWsubWFwKChkYXRlKSA9PiB0aGlzLmdldEZpcnN0TGV0dGVyT2ZXZWVrRGF5Q2FwaXRhbGl6ZWQoZGF0ZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRGaXJzdExldHRlck9mV2Vla0RheUNhcGl0YWxpemVkKGRhdGU6IERhdGUpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtYXRXaXRoTG9jYWxlKGRhdGUsICdFRUVFRScpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNEYXRlQ2hhbmdlZChuZXdEYXRlOiBEYXRlLCBwcmV2aW91c0RhdGU6IERhdGUpOiBib29sZWFuIHtcbiAgICBpZiAoIW5ld0RhdGUgJiYgIXByZXZpb3VzRGF0ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAobmV3RGF0ZSBpbnN0YW5jZW9mIERhdGUgJiYgIXByZXZpb3VzRGF0ZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiAhaXNTYW1lRGF5KG5ld0RhdGUsIHByZXZpb3VzRGF0ZSk7XG4gIH1cblxuICBwcml2YXRlIGlzRGlzYWJsZWREYXRlKGRhdGU6IERhdGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kaXNhYmxlZERhdGVzLnNvbWUoKGRpc2FibGVkRGF0ZSkgPT4ge1xuICAgICAgcmV0dXJuIGlzU2FtZURheShkaXNhYmxlZERhdGUsIGRhdGUpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVmcmVzaEFjdGl2ZU1vbnRoKCkge1xuICAgIGlmICghdGhpcy5hY3RpdmVNb250aCkgcmV0dXJuO1xuXG4gICAgY29uc3QgbW9udGhTdGFydCA9IHN0YXJ0T2ZNb250aCh0aGlzLmFjdGl2ZU1vbnRoKTtcbiAgICBjb25zdCBtb250aEVuZCA9IGVuZE9mTW9udGgodGhpcy5hY3RpdmVNb250aCk7XG4gICAgY29uc3Qgc3RhcnRPZkZpcnN0V2VlayA9IHN0YXJ0T2ZXZWVrKG1vbnRoU3RhcnQsIHsgbG9jYWxlOiB0aGlzLmxvY2FsZSB9KTtcbiAgICBjb25zdCBlbmRPZkxhc3RXZWVrID0gZW5kT2ZXZWVrKG1vbnRoRW5kLCB7IGxvY2FsZTogdGhpcy5sb2NhbGUgfSk7XG4gICAgY29uc3QgdG90YWxEYXlDb3VudCA9IGRpZmZlcmVuY2VJbkRheXMoZW5kT2ZMYXN0V2Vlaywgc3RhcnRPZkZpcnN0V2VlaykgKyAxO1xuICAgIGNvbnN0IHRvZGF5ID0gdGhpcy50b2RheURhdGUgPyBzdGFydE9mRGF5KHRoaXMudG9kYXlEYXRlKSA6IHN0YXJ0T2ZEYXkobmV3IERhdGUoKSk7XG5cbiAgICBjb25zdCBkYXlzQXJyYXkgPSBBcnJheS5mcm9tKEFycmF5KHRvdGFsRGF5Q291bnQpLmtleXMoKSk7XG5cbiAgICBjb25zdCBkYXlzOiBDYWxlbmRhckNlbGxbXSA9IGRheXNBcnJheS5tYXAoKG51bWJlcikgPT4ge1xuICAgICAgY29uc3QgY2VsbERhdGUgPSBhZGQoc3RhcnRPZkZpcnN0V2VlaywgeyBbVGltZVVuaXQuZGF5c106IG51bWJlciB9KTtcbiAgICAgIGNvbnN0IGRheSA9IHRoaXMuZ2V0Q2FsZW5kYXJEYXkoY2VsbERhdGUsIHRvZGF5LCBtb250aFN0YXJ0KTtcblxuICAgICAgY29uc3QgaXNTZWxlY3RhYmxlID0gdGhpcy5pc1NlbGVjdGFibGUoZGF5LCBjZWxsRGF0ZSk7XG4gICAgICBjb25zdCBpc1NlbGVjdGVkID0gaXNTYW1lRGF5KHRoaXMuc2VsZWN0ZWREYXRlLCBjZWxsRGF0ZSk7XG4gICAgICBjb25zdCBjZWxsID0ge1xuICAgICAgICBkYXRlOiBjZWxsRGF0ZS5nZXREYXRlKCksXG4gICAgICAgIGlzQ3VycmVudE1vbnRoOiBkYXkuaXNDdXJyZW50TW9udGgsXG4gICAgICAgIGlzU2VsZWN0YWJsZSxcbiAgICAgICAgaXNTZWxlY3RlZCxcbiAgICAgICAgY3NzQ2xhc3NlczogdGhpcy5nZXRDc3NDbGFzc2VzKGRheSwgaXNTZWxlY3RhYmxlLCBpc1NlbGVjdGVkKSxcbiAgICAgIH07XG4gICAgICBpZiAoaXNTZWxlY3RlZCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkRGF5ID0gY2VsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjZWxsO1xuICAgIH0pO1xuICAgIHRoaXMuX21vbnRoID0gdGhpcy5jaHVuayhkYXlzLCA3KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2FsZW5kYXJEYXkoZGF0ZTogRGF0ZSwgdG9kYXk6IERhdGUsIG1vbnRoU3RhcnQ6IERhdGUpOiBDYWxlbmRhckRheSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVG9kYXk6IGlzU2FtZURheSh0b2RheSwgZGF0ZSksXG4gICAgICBpc1Bhc3Q6IGlzQmVmb3JlKGRhdGUsIHRvZGF5KSxcbiAgICAgIGlzRnV0dXJlOiBpc0FmdGVyKGRhdGUsIHRvZGF5KSxcbiAgICAgIGlzV2Vla2VuZDogaXNXZWVrZW5kKGRhdGUpLFxuICAgICAgaXNDdXJyZW50TW9udGg6IGlzU2FtZU1vbnRoKGRhdGUsIG1vbnRoU3RhcnQpLFxuICAgICAgaXNEaXNhYmxlZDogdGhpcy5pc0Rpc2FibGVkRGF0ZShkYXRlKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBpc1NlbGVjdGFibGUoZGF5OiBDYWxlbmRhckRheSwgZGF0ZTogRGF0ZSkge1xuICAgIHJldHVybiAoXG4gICAgICAodGhpcy5hbHdheXNFbmFibGVUb2RheSAmJiBkYXkuaXNUb2RheSkgfHxcbiAgICAgICghZGF5LmlzRGlzYWJsZWQgJiZcbiAgICAgICAgZGF5LmlzQ3VycmVudE1vbnRoICYmXG4gICAgICAgICEodGhpcy5kaXNhYmxlV2Vla2VuZHMgJiYgZGF5LmlzV2Vla2VuZCkgJiZcbiAgICAgICAgISh0aGlzLmRpc2FibGVQYXN0RGF0ZXMgJiYgZGF5LmlzUGFzdCkgJiZcbiAgICAgICAgISh0aGlzLmRpc2FibGVGdXR1cmVEYXRlcyAmJiBkYXkuaXNGdXR1cmUpICYmXG4gICAgICAgICEodGhpcy5taW5EYXRlICYmIGlzQmVmb3JlKGRhdGUsIHRoaXMubWluRGF0ZSkpICYmXG4gICAgICAgICEodGhpcy5tYXhEYXRlICYmIGlzQWZ0ZXIoZGF0ZSwgdGhpcy5tYXhEYXRlKSkpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q3NzQ2xhc3NlcyhkYXk6IENhbGVuZGFyRGF5LCBpc1NlbGVjdGFibGU6IGJvb2xlYW4sIGlzU2VsZWN0ZWQ6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBjc3NDbGFzc2VzID0ge1xuICAgICAgJ2N1cnJlbnQtbW9udGgnOiBkYXkuaXNDdXJyZW50TW9udGgsXG4gICAgICB3ZWVrZW5kOiBkYXkuaXNXZWVrZW5kLFxuICAgICAgdG9kYXk6IGRheS5pc1RvZGF5LFxuICAgICAgc2VsZWN0YWJsZTogaXNTZWxlY3RhYmxlLFxuICAgICAgc2VsZWN0ZWQ6IGlzU2VsZWN0ZWQsXG4gICAgICBwYXN0OiBkYXkuaXNQYXN0LFxuICAgICAgZGlzYWJsZWQ6IGRheS5pc0Rpc2FibGVkLFxuICAgIH07XG4gICAgbGV0IGNzc0NsYXNzU3RyaW5nID0gJ2RheSc7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gY3NzQ2xhc3Nlcykge1xuICAgICAgaWYgKGNzc0NsYXNzZXNba2V5XSkge1xuICAgICAgICBjc3NDbGFzc1N0cmluZyArPSAnICcgKyBrZXk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjc3NDbGFzc1N0cmluZztcbiAgfVxuXG4gIHByaXZhdGUgY2h1bmsoYXJyYXk6IGFueVtdLCBzaXplOiBudW1iZXIpIHtcbiAgICBjb25zdCByZXN1bHRzID0gW107XG4gICAgd2hpbGUgKGFycmF5Lmxlbmd0aCkge1xuICAgICAgcmVzdWx0cy5wdXNoKGFycmF5LnNwbGljZSgwLCBzaXplKSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG5cbiAgcHJpdmF0ZSBvblNlbGVjdGVkRGF0ZUNoYW5nZShuZXdEYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWREYXkpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXkuaXNTZWxlY3RlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld0RheSA9IHRoaXMuZ2V0Q2VsbChuZXdEYXRlKTtcbiAgICBpZiAobmV3RGF5KSB7XG4gICAgICBuZXdEYXkuaXNTZWxlY3RlZCA9IHRydWU7XG4gICAgICB0aGlzLnNlbGVjdGVkRGF5ID0gbmV3RGF5O1xuICAgIH1cbiAgICB0aGlzLmNhbGVuZGFySGVscGVyLnNldFNlbGVjdGVkRGF5KG5ld0RhdGUuZ2V0RGF0ZSgpKTtcbiAgfVxuXG4gIF9vbkRhdGVTZWxlY3RlZChuZXdEYXk6IENhbGVuZGFyQ2VsbCkge1xuICAgIGlmIChuZXdEYXkuaXNTZWxlY3RhYmxlICYmIG5ld0RheS5kYXRlKSB7XG4gICAgICBsZXQgbmV3RGF0ZSA9IG5ldyBEYXRlKHRoaXMuYWN0aXZlTW9udGgpO1xuXG4gICAgICBpZiAodGhpcy50aW1lem9uZSA9PT0gJ1VUQycpIHtcbiAgICAgICAgbmV3RGF0ZSA9IHpvbmVkVGltZVRvVXRjKHRoaXMuc3VidHJhY3RUaW1lem9uZU9mZnNldChuZXdEYXRlKSwgdGhpcy50aW1lWm9uZU5hbWUpO1xuICAgICAgfVxuXG4gICAgICBuZXdEYXRlLnNldERhdGUobmV3RGF5LmRhdGUpO1xuICAgICAgY29uc3QgZGF0ZVRvRW1pdCA9IG5ld0RhdGU7XG5cbiAgICAgIGlmICh0aGlzLmhhc0RhdGVDaGFuZ2VkKG5ld0RhdGUsIHRoaXMuX3NlbGVjdGVkRGF0ZSkpIHtcbiAgICAgICAgdGhpcy5vblNlbGVjdGVkRGF0ZUNoYW5nZShuZXdEYXRlKTtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWREYXRlID0gbmV3RGF0ZTtcbiAgICAgICAgdGhpcy5kYXRlQ2hhbmdlLmVtaXQoZGF0ZVRvRW1pdCk7XG4gICAgICB9XG4gICAgICB0aGlzLmRhdGVTZWxlY3QuZW1pdChkYXRlVG9FbWl0KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9uQ2hhbmdlTW9udGgoZGlyZWN0aW9uOiBudW1iZXIpIHtcbiAgICB0aGlzLl9jaGFuZ2VNb250aChkaXJlY3Rpb24pO1xuICAgIHRoaXMuY2FsZW5kYXJIZWxwZXIudXBkYXRlKHRoaXMuZ2V0SGVscGVyT3B0aW9ucygpKTtcbiAgfVxuXG4gIF9jaGFuZ2VNb250aChpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5jaGFuZ2VBY3RpdmVWaWV3KGluZGV4LCBUaW1lVW5pdC5tb250aHMpO1xuICB9XG5cbiAgX2NoYW5nZVllYXIoeWVhcjogc3RyaW5nKSB7XG4gICAgY29uc3QgeWVhck51bWVyaWMgPSBOdW1iZXIoeWVhcik7XG4gICAgdGhpcy5jaGFuZ2VBY3RpdmVWaWV3KHllYXJOdW1lcmljIC0gZ2V0WWVhcih0aGlzLmFjdGl2ZU1vbnRoKSwgVGltZVVuaXQueWVhcnMpO1xuICAgIHRoaXMueWVhclNlbGVjdC5lbWl0KHllYXJOdW1lcmljKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hhbmdlQWN0aXZlVmlldyhpbmRleDogbnVtYmVyLCB1bml0OiBUaW1lVW5pdCkge1xuICAgIGlmIChpbmRleCA9PT0gMCkgcmV0dXJuO1xuICAgIHRoaXMuYWN0aXZlTW9udGggPSBhZGQodGhpcy5hY3RpdmVNb250aCwgeyBbdW5pdF06IGluZGV4IH0pO1xuXG4gICAgdGhpcy5yZWZyZXNoQWN0aXZlTW9udGgoKTtcbiAgfVxuXG4gIGdldCBfY2FuTmF2aWdhdGVCYWNrKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHJlYWNoZWRQYXN0RGF0ZXNMaW1pdCA9XG4gICAgICB0aGlzLmRpc2FibGVQYXN0RGF0ZXMgJiYgaXNTYW1lTW9udGgodGhpcy5hY3RpdmVNb250aCwgdGhpcy50b2RheURhdGUpO1xuXG4gICAgY29uc3QgcmVhY2hlZE9yRXhjZWVkZWRNaW5EYXRlID1cbiAgICAgIHRoaXMubWluRGF0ZSAmJlxuICAgICAgKGlzU2FtZU1vbnRoKHRoaXMuYWN0aXZlTW9udGgsIHRoaXMubWluRGF0ZSkgfHwgaXNCZWZvcmUodGhpcy5hY3RpdmVNb250aCwgdGhpcy5taW5EYXRlKSk7XG5cbiAgICByZXR1cm4gIXJlYWNoZWRQYXN0RGF0ZXNMaW1pdCAmJiAhcmVhY2hlZE9yRXhjZWVkZWRNaW5EYXRlO1xuICB9XG5cbiAgZ2V0IF9jYW5OYXZpZ2F0ZUZvcndhcmQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcmVhY2hlZEZ1dHVyZURhdGVzTGltaXQgPVxuICAgICAgdGhpcy5kaXNhYmxlRnV0dXJlRGF0ZXMgJiYgaXNTYW1lTW9udGgodGhpcy5hY3RpdmVNb250aCwgdGhpcy50b2RheURhdGUpO1xuXG4gICAgY29uc3QgcmVhY2hlZE9yRXhjZWVkZWRNYXhEYXRlID1cbiAgICAgIHRoaXMubWF4RGF0ZSAmJlxuICAgICAgKGlzU2FtZU1vbnRoKHRoaXMuYWN0aXZlTW9udGgsIHRoaXMubWF4RGF0ZSkgfHwgaXNBZnRlcih0aGlzLmFjdGl2ZU1vbnRoLCB0aGlzLm1heERhdGUpKTtcblxuICAgIHJldHVybiAhcmVhY2hlZEZ1dHVyZURhdGVzTGltaXQgJiYgIXJlYWNoZWRPckV4Y2VlZGVkTWF4RGF0ZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2VsbChkYXRlOiBEYXRlKSB7XG4gICAgbGV0IGZvdW5kRGF5ID0gbnVsbDtcbiAgICBpZiAoZGF0ZSkge1xuICAgICAgZm9yIChsZXQgd2VlayBvZiB0aGlzLl9tb250aCkge1xuICAgICAgICBmb3VuZERheSA9IHdlZWsuZmluZCgoZGF5KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGRheS5pc0N1cnJlbnRNb250aCAmJiBkYXkuZGF0ZSA9PT0gZGF0ZS5nZXREYXRlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZm91bmREYXkpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZm91bmREYXk7XG4gIH1cblxuICBwcml2YXRlIGdldEhlbHBlck9wdGlvbnMoKTogQ2FsZW5kYXJPcHRpb25zIHtcbiAgICByZXR1cm4ge1xuICAgICAgY2FuTmF2aWdhdGVCYWNrOiB0aGlzLl9jYW5OYXZpZ2F0ZUJhY2ssXG4gICAgICBjYW5OYXZpZ2F0ZUZvcndhcmQ6IHRoaXMuX2Nhbk5hdmlnYXRlRm9yd2FyZCxcbiAgICAgIHllYXI6IHRoaXMuYWN0aXZlWWVhcixcbiAgICAgIG1vbnRoTmFtZTogdGhpcy5hY3RpdmVNb250aE5hbWUsXG4gICAgICB3ZWVrRGF5czogdGhpcy5fd2Vla0RheXMsXG4gICAgICBtb250aDogdGhpcy5fbW9udGgsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3VidHJhY3RUaW1lem9uZU9mZnNldChkYXRlOiBEYXRlKTogRGF0ZSB7XG4gICAgY29uc3QgdGltZXpvbmVPZmZzZXRJbk1zID0gZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpICogNjAgKiAxMDAwO1xuICAgIHJldHVybiBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSAtIHRpbWV6b25lT2Zmc2V0SW5Ncyk7XG4gIH1cblxuICBwcml2YXRlIGdldERhdGVGcm9tTmF2aWdhYmxlWWVhcihuYXZpZ2FibGVZZWFyOiBudW1iZXIgfCBEYXRlKTogRGF0ZSB7XG4gICAgaWYgKG5hdmlnYWJsZVllYXIgaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4gbmF2aWdhYmxlWWVhcjtcbiAgICBjb25zdCB0b2RheSA9IHRoaXMudG9kYXlEYXRlIHx8IG5ldyBEYXRlKCk7XG4gICAgcmV0dXJuIG5ldyBEYXRlKHRvZGF5LmdldEZ1bGxZZWFyKCkgKyBuYXZpZ2FibGVZZWFyLCAwLCAxKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0WWVhcnNCZXR3ZWVuRGF0ZXMoc3RhcnREYXRlOiBEYXRlLCBlbmREYXRlOiBEYXRlKTogc3RyaW5nW10ge1xuICAgIC8vIEVuc3VyZSB5ZWFycyBhcmUgb3JkZXJlZCBjb3JyZWN0bHkgaWYgcGFyYW1ldGVycyBhcmUgc3dpdGNoZWQ6XG4gICAgY29uc3QgW3N0YXJ0WWVhciwgZW5kWWVhcl0gPSBbc3RhcnREYXRlLmdldEZ1bGxZZWFyKCksIGVuZERhdGUuZ2V0RnVsbFllYXIoKV0uc29ydCgpO1xuICAgIGNvbnN0IG51bWJlck9mWWVhcnMgPSBlbmRZZWFyIC0gc3RhcnRZZWFyO1xuICAgIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiBudW1iZXJPZlllYXJzICsgMSB9LCAoXywgaSkgPT4gKHN0YXJ0WWVhciArIGkpLnRvU3RyaW5nKCkpO1xuICB9XG59XG4iXX0=
394
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9kZXNpZ25zeXN0ZW0vc3JjL2xpYi9jb21wb25lbnRzL2NhbGVuZGFyL2NhbGVuZGFyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLE1BQU0sRUFDTixLQUFLLEVBQ0wsU0FBUyxFQUdULE1BQU0sRUFFTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLEdBQUcsRUFDSCxnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLFVBQVUsRUFDVixTQUFTLEVBQ1QsTUFBTSxFQUNOLE9BQU8sRUFDUCxPQUFPLEVBQ1AsUUFBUSxFQUNSLFNBQVMsRUFDVCxXQUFXLEVBQ1gsU0FBUyxFQUVULFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxHQUNaLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzdELE9BQU8sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWpELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBSTFELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQWEzRCxJQUFLLFFBU0o7QUFURCxXQUFLLFFBQVE7SUFDWCwyQkFBZSxDQUFBO0lBQ2YsNkJBQWlCLENBQUE7SUFDakIsMkJBQWUsQ0FBQTtJQUNmLHlCQUFhLENBQUE7SUFDYiwyQkFBZSxDQUFBO0lBQ2YsK0JBQW1CLENBQUE7SUFDbkIsK0JBQW1CLENBQUE7SUFDbkIseUNBQTZCLENBQUE7QUFDL0IsQ0FBQyxFQVRJLFFBQVEsS0FBUixRQUFRLFFBU1o7QUFR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QUksRUFBRSxDQUFDO1FBQ3JGLE1BQU0sYUFBYSxHQUFHLE9BQU8sR0FBRyxTQUFTLENBQUM7UUFDMUMsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLGFBQWEsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDekYsQ0FBQzs7O1lBL2JGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsZ0JBQWdCO2dCQUMxQix1NENBQXdDO2dCQUV4QyxTQUFTLEVBQUUsQ0FBQyxjQUFjLENBQUM7O2FBQzVCOzs7O1lBN0JRLGNBQWM7eUNBeUpnQyxNQUFNLFNBQUMsU0FBUzs7O2dDQTFIcEUsU0FBUyxTQUFDLG1CQUFtQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTt5QkFDaEQsTUFBTTt5QkFDTixNQUFNO3lCQUNOLE1BQU07dUJBQ04sS0FBSzs4QkFDTCxLQUFLOytCQUNMLEtBQUs7aUNBQ0wsS0FBSztnQ0FDTCxLQUFLOzRCQUNMLEtBQUs7eUJBS0wsS0FBSzttQ0FRTCxLQUFLOzJCQXNCTCxLQUFLOzRCQWNMLEtBQUs7d0JBUUwsS0FBSztzQkFRTCxLQUFLO3NCQVdMLEtBQUs7Z0NBZ0NMLFdBQVcsU0FBQywwQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIExPQ0FMRV9JRCxcbiAgT25DaGFuZ2VzLFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIGFkZCxcbiAgZGlmZmVyZW5jZUluRGF5cyxcbiAgZWFjaERheU9mSW50ZXJ2YWwsXG4gIGVuZE9mTW9udGgsXG4gIGVuZE9mV2VlayxcbiAgZm9ybWF0LFxuICBnZXRZZWFyLFxuICBpc0FmdGVyLFxuICBpc0JlZm9yZSxcbiAgaXNTYW1lRGF5LFxuICBpc1NhbWVNb250aCxcbiAgaXNXZWVrZW5kLFxuICBMb2NhbGUgYXMgTG9jYWxlRGF0ZUZucyxcbiAgc3RhcnRPZkRheSxcbiAgc3RhcnRPZk1vbnRoLFxuICBzdGFydE9mV2Vlayxcbn0gZnJvbSAnZGF0ZS1mbnMnO1xuaW1wb3J0IHsgdXRjVG9ab25lZFRpbWUsIHpvbmVkVGltZVRvVXRjIH0gZnJvbSAnZGF0ZS1mbnMtdHonO1xuaW1wb3J0IHsgZGEsIGVuR0IsIGVuVVMgfSBmcm9tICdkYXRlLWZucy9sb2NhbGUnO1xuXG5pbXBvcnQgeyBjYXBpdGFsaXplRmlyc3RMZXR0ZXIgfSBmcm9tICdAa2lyYnlkZXNpZ24vY29yZSc7XG5cbmltcG9ydCB7IENhbGVuZGFyQ2VsbCB9IGZyb20gJy4vaGVscGVycy9jYWxlbmRhci1jZWxsLm1vZGVsJztcbmltcG9ydCB7IENhbGVuZGFyT3B0aW9ucyB9IGZyb20gJy4vaGVscGVycy9jYWxlbmRhci1vcHRpb25zLm1vZGVsJztcbmltcG9ydCB7IENhbGVuZGFySGVscGVyIH0gZnJvbSAnLi9oZWxwZXJzL2NhbGVuZGFyLmhlbHBlcic7XG5pbXBvcnQgeyBDYWxlbmRhclllYXJOYXZpZ2F0b3JDb25maWcgfSBmcm9tICcuL29wdGlvbnMvY2FsZW5kYXIteWVhci1uYXZpZ2F0b3ItY29uZmlnJztcblxuZXhwb3J0IHR5cGUgTG9jYWxlID0gTG9jYWxlRGF0ZUZucztcbmludGVyZmFjZSBDYWxlbmRhckRheSB7XG4gIGlzQ3VycmVudE1vbnRoOiBib29sZWFuO1xuICBpc1RvZGF5OiBib29sZWFuO1xuICBpc1dlZWtlbmQ6IGJvb2xlYW47XG4gIGlzUGFzdDogYm9vbGVhbjtcbiAgaXNGdXR1cmU6IGJvb2xlYW47XG4gIGlzRGlzYWJsZWQ6IGJvb2xlYW47XG59XG5cbmVudW0gVGltZVVuaXQge1xuICB5ZWFycyA9ICd5ZWFycycsXG4gIG1vbnRocyA9ICdtb250aHMnLFxuICB3ZWVrcyA9ICd3ZWVrcycsXG4gIGRheXMgPSAnZGF5cycsXG4gIGhvdXJzID0gJ2hvdXJzJyxcbiAgbWludXRlcyA9ICdtaW51dGVzJyxcbiAgc2Vjb25kcyA9ICdzZWNvbmRzJyxcbiAgbWlsbGlzZWNvbmRzID0gJ21pbGxpc2Vjb25kcycsXG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2tpcmJ5LWNhbGVuZGFyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NhbGVuZGFyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2FsZW5kYXIuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbQ2FsZW5kYXJIZWxwZXJdLFxufSlcbmV4cG9ydCBjbGFzcyBDYWxlbmRhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzIHtcbiAgQFZpZXdDaGlsZCgnY2FsZW5kYXJDb250YWluZXInLCB7IHN0YXRpYzogZmFsc2UgfSkgY2FsZW5kYXJDb250YWluZXI6IEVsZW1lbnRSZWY7XG4gIEBPdXRwdXQoKSBkYXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlPigpO1xuICBAT3V0cHV0KCkgZGF0ZVNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZT4oKTtcbiAgQE91dHB1dCgpIHllYXJTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgQElucHV0KCkgdGltZXpvbmU6ICdsb2NhbCcgfCAnVVRDJyA9ICdsb2NhbCc7XG4gIEBJbnB1dCgpIGRpc2FibGVXZWVrZW5kcyA9IGZhbHNlO1xuICBASW5wdXQoKSBkaXNhYmxlUGFzdERhdGVzID0gZmFsc2U7XG4gIEBJbnB1dCgpIGRpc2FibGVGdXR1cmVEYXRlcyA9IGZhbHNlO1xuICBASW5wdXQoKSBhbHdheXNFbmFibGVUb2RheSA9IGZhbHNlO1xuICBASW5wdXQoKSBjdXN0b21Mb2NhbGVzOiB7IFtrZXk6IHN0cmluZ106IExvY2FsZSB9ID0ge307XG4gIC8qIFxuICAgIEV4cGVyaW1lbnRhbDogSW5wdXQgcHJvcGVydHkgbm90IGRvY3VtZW50ZWQgb24gcHVycG9zZS4gXG4gICAgRm9yIGNvbnRleHQgc2VlOiBodHRwczovL2dpdGh1Yi5jb20va2lyYnlkZXNpZ24vZGVzaWduc3lzdGVtL2lzc3Vlcy8yMDg3XG4gICovXG4gIEBJbnB1dCgpIHVzZVBvcG92ZXIgPSBmYWxzZTtcbiAgLyoqXG4gICAqIENvbmZpZ3VyYXRpb24gZm9yIHRoZSB5ZWFyIG5hdmlnYXRvci5cbiAgICpcbiAgICogSW50ZXJuYWxseSwgY2FsZW5kYXIgY29tcG9uZW50OlxuICAgKiAtIGJhc2VzIHllYXJOYXZpZ2F0b3JPcHRpb25zLmZyb20gYW5kIHllYXJOYXZpZ2F0b3JPcHRpb25zLnRvIG9uIHRvZGF5RGF0ZSBpZiBhIG51bWJlciBpcyBwcm92aWRlZFxuICAgKiAtIHByaW9yaXRpemVzIG1pbkRhdGUgYW5kIG1heERhdGUgb3ZlciB5ZWFyTmF2aWdhdG9yT3B0aW9ucy5mcm9tIGFuZCB5ZWFyTmF2aWdhdG9yT3B0aW9ucy50b1xuICAgKi9cbiAgQElucHV0KCkgeWVhck5hdmlnYXRvck9wdGlvbnM6IENhbGVuZGFyWWVhck5hdmlnYXRvckNvbmZpZztcblxuICBfbW9udGg6IENhbGVuZGFyQ2VsbFtdW107XG4gIF93ZWVrRGF5czogc3RyaW5nW107XG4gIHByaXZhdGUgc2VsZWN0ZWREYXk6IENhbGVuZGFyQ2VsbDtcbiAgLy8gTk9URTogSW50ZXJuYWxseSwgYWxsIERhdGVzXG4gIC8vIGFyZSBub3JtYWxpemVkIHRvIHBvaW50IHRvIGxvY2FsIHRpbWV6b25lIG1pZG5pZ2h0LCByZWdhcmRsZXNzIG9mIHRoZSB0aW1lem9uZVxuICAvLyBzZXR0aW5nLlxuICBwcml2YXRlIGFjdGl2ZU1vbnRoOiBEYXRlO1xuICBwcml2YXRlIF9zZWxlY3RlZERhdGU6IERhdGU7XG4gIHByaXZhdGUgX2Rpc2FibGVkRGF0ZXM6IERhdGVbXSA9IFtdO1xuICBwcml2YXRlIF90b2RheURhdGU6IERhdGU7XG4gIHByaXZhdGUgX21pbkRhdGU6IERhdGU7XG4gIHByaXZhdGUgX21heERhdGU6IERhdGU7XG4gIHByaXZhdGUgbG9jYWxlOiBMb2NhbGU7XG4gIHByaXZhdGUgdGltZVpvbmVOYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgaW5jbHVkZWRMb2NhbGVzID0geyBkYSwgZW5HQiwgZW5VUyB9O1xuXG4gIGdldCBzZWxlY3RlZERhdGUoKTogRGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkRGF0ZTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBzZWxlY3RlZERhdGUodmFsdWVMb2NhbE9yVVRDOiBEYXRlKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLm5vcm1hbGl6ZURhdGUodmFsdWVMb2NhbE9yVVRDKTtcbiAgICB0aGlzLnNldEFjdGl2ZU1vbnRoKHZhbHVlKTtcblxuICAgIGlmICh0aGlzLmhhc0RhdGVDaGFuZ2VkKHZhbHVlLCB0aGlzLl9zZWxlY3RlZERhdGUpKSB7XG4gICAgICB0aGlzLm9uU2VsZWN0ZWREYXRlQ2hhbmdlKHZhbHVlKTtcbiAgICAgIHRoaXMuX3NlbGVjdGVkRGF0ZSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGdldCBkaXNhYmxlZERhdGVzKCk6IERhdGVbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkRGF0ZXM7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgZGlzYWJsZWREYXRlcyh2YWx1ZTogRGF0ZVtdKSB7XG4gICAgdGhpcy5fZGlzYWJsZWREYXRlcyA9ICh2YWx1ZSB8fCBbXSkubWFwKChkYXRlKSA9PiB0aGlzLm5vcm1hbGl6ZURhdGUoZGF0ZSkpO1xuICB9XG5cbiAgZ2V0IHRvZGF5RGF0ZSgpOiBEYXRlIHtcbiAgICByZXR1cm4gdGhpcy5fdG9kYXlEYXRlO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IHRvZGF5RGF0ZSh2YWx1ZTogRGF0ZSkge1xuICAgIHRoaXMuX3RvZGF5RGF0ZSA9IHRoaXMubm9ybWFsaXplRGF0ZSh2YWx1ZSk7XG4gIH1cblxuICBnZXQgbWluRGF0ZSgpOiBEYXRlIHtcbiAgICByZXR1cm4gdGhpcy5fbWluRGF0ZTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBtaW5EYXRlKHZhbHVlOiBEYXRlKSB7XG4gICAgaWYgKHZhbHVlICYmIHRoaXMuYWN0aXZlTW9udGggJiYgaXNCZWZvcmUodGhpcy5hY3RpdmVNb250aCwgdmFsdWUpKSB7XG4gICAgICB0aGlzLnNldEFjdGl2ZU1vbnRoKHZhbHVlKTtcbiAgICB9XG4gICAgdGhpcy5fbWluRGF0ZSA9IHRoaXMubm9ybWFsaXplRGF0ZSh2YWx1ZSk7XG4gIH1cblxuICBnZXQgbWF4RGF0ZSgpOiBEYXRlIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4RGF0ZTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBtYXhEYXRlKHZhbHVlOiBEYXRlKSB7XG4gICAgaWYgKHZhbHVlICYmIHRoaXMuYWN0aXZlTW9udGggJiYgaXNBZnRlcih0aGlzLmFjdGl2ZU1vbnRoLCB2YWx1ZSkpIHtcbiAgICAgIHRoaXMuc2V0QWN0aXZlTW9udGgodmFsdWUpO1xuICAgIH1cbiAgICB0aGlzLl9tYXhEYXRlID0gdGhpcy5ub3JtYWxpemVEYXRlKHZhbHVlKTtcbiAgfVxuXG4gIGdldCBhY3RpdmVNb250aE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKHRoaXMuZm9ybWF0V2l0aExvY2FsZSh0aGlzLmFjdGl2ZU1vbnRoLCAnTU1NTScpKTtcbiAgfVxuXG4gIGdldCBhY3RpdmVZZWFyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybWF0V2l0aExvY2FsZSh0aGlzLmFjdGl2ZU1vbnRoLCAneXl5eScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgbmF2aWdhYmxlIHllYXJzIGZvciB5ZWFyIG5hdmlnYXRvciBiYXNlZCBvbiB5ZWFyTmF2aWdhdG9yT3B0aW9ucy5cbiAgICovXG4gIGdldCBuYXZpZ2FibGVZZWFycygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgZGF0ZU9mRmlyc3ROYXZpZ2FibGVZZWFyID1cbiAgICAgIHRoaXMubWluRGF0ZSB8fCB0aGlzLmdldERhdGVGcm9tTmF2aWdhYmxlWWVhcih0aGlzLnllYXJOYXZpZ2F0b3JPcHRpb25zLmZyb20pO1xuXG4gICAgY29uc3QgZGF0ZU9mTGFzdE5hdmlnYWJsZVllYXIgPVxuICAgICAgdGhpcy5tYXhEYXRlIHx8IHRoaXMuZ2V0RGF0ZUZyb21OYXZpZ2FibGVZZWFyKHRoaXMueWVhck5hdmlnYXRvck9wdGlvbnMudG8pO1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0WWVhcnNCZXR3ZWVuRGF0ZXMoZGF0ZU9mRmlyc3ROYXZpZ2FibGVZZWFyLCBkYXRlT2ZMYXN0TmF2aWdhYmxlWWVhcik7XG4gIH1cblxuICBnZXQgbmF2aWdhdGVkWWVhcigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLm5hdmlnYWJsZVllYXJzLmluZGV4T2YodGhpcy5hY3RpdmVZZWFyKTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuaGFzLXllYXItbmF2aWdhdG9yJylcbiAgZ2V0IF9oYXNZZWFyTmF2aWdhdG9yKCkge1xuICAgIHJldHVybiAhIXRoaXMueWVhck5hdmlnYXRvck9wdGlvbnM7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNhbGVuZGFySGVscGVyOiBDYWxlbmRhckhlbHBlciwgQEluamVjdChMT0NBTEVfSUQpIGxvY2FsZTogc3RyaW5nKSB7XG4gICAgdGhpcy5sb2NhbGUgPSB0aGlzLm1hcExvY2FsZShsb2NhbGUpO1xuICAgIHRoaXMudGltZVpvbmVOYW1lID0gSW50bC5EYXRlVGltZUZvcm1hdCgpLnJlc29sdmVkT3B0aW9ucygpLnRpbWVab25lO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRXaXRoTG9jYWxlKGRhdGU6IERhdGUsIGZvcm1hdFN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZm9ybWF0KGRhdGUsIGZvcm1hdFN0cmluZywge1xuICAgICAgbG9jYWxlOiB0aGlzLmxvY2FsZSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwTG9jYWxlKGxvY2FsZTogc3RyaW5nKTogTG9jYWxlIHtcbiAgICBpZiAobG9jYWxlID09PSAnZW4nKSB7XG4gICAgICBsb2NhbGUgPSAnZW5HQic7IC8vIGlmIGVuZ2xpc2ggbG9jYWxlIGlzIHByb3ZpZGVkIHdpdGhvdXQgcmVnaW9uLCB3ZSBkZWZhdWx0IHRvIEdCXG4gICAgfVxuICAgIGxvY2FsZSA9IGxvY2FsZS5yZXBsYWNlKCctJywgJycpO1xuICAgIGNvbnN0IGF2YWlsYWJsZUxvY2FsZXMgPSB7IC4uLnRoaXMuaW5jbHVkZWRMb2NhbGVzLCAuLi50aGlzLmN1c3RvbUxvY2FsZXMgfTtcblxuICAgIHJldHVybiBhdmFpbGFibGVMb2NhbGVzW2xvY2FsZV0gfHwgdGhpcy5pbmNsdWRlZExvY2FsZXMuZW5HQjsgLy8gRGVmYXVsdCB0byBlbkdCIGlmIGluamVjdGVkIGxvY2FsZSBkb2VzbnQgZXhpc3RcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuX3dlZWtEYXlzID0gdGhpcy5nZXRXZWVrRGF5cygpO1xuICAgIHRoaXMuc2V0QWN0aXZlTW9udGgodGhpcy5zZWxlY3RlZERhdGUpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuY2FsZW5kYXJIZWxwZXIuaW5pdChcbiAgICAgIHRoaXMuY2FsZW5kYXJDb250YWluZXIsXG4gICAgICB0aGlzLmdldEhlbHBlck9wdGlvbnMoKSxcbiAgICAgIHRoaXMuX29uRGF0ZVNlbGVjdGVkLmJpbmQodGhpcyksXG4gICAgICB0aGlzLm9uQ2hhbmdlTW9udGguYmluZCh0aGlzKVxuICAgICk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmFjdGl2ZU1vbnRoKSByZXR1cm47XG4gICAgaWYgKFxuICAgICAgY2hhbmdlcy5kaXNhYmxlV2Vla2VuZHMgfHxcbiAgICAgIGNoYW5nZXMuZGlzYWJsZVBhc3REYXRlcyB8fFxuICAgICAgY2hhbmdlcy5kaXNhYmxlRnV0dXJlRGF0ZXMgfHxcbiAgICAgIGNoYW5nZXMuZGlzYWJsZWREYXRlcyB8fFxuICAgICAgY2hhbmdlcy5taW5EYXRlIHx8XG4gICAgICBjaGFuZ2VzLm1heERhdGUgfHxcbiAgICAgIGNoYW5nZXMudG9kYXlEYXRlIHx8XG4gICAgICBjaGFuZ2VzLnRpbWV6b25lXG4gICAgKSB7XG4gICAgICB0aGlzLnJlZnJlc2hBY3RpdmVNb250aCgpO1xuICAgICAgdGhpcy5jYWxlbmRhckhlbHBlci51cGRhdGUodGhpcy5nZXRIZWxwZXJPcHRpb25zKCkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0QWN0aXZlTW9udGgoZGF0ZTogRGF0ZSA9IG5ldyBEYXRlKCkpIHtcbiAgICBpZiAoIXRoaXMuYWN0aXZlTW9udGggfHwgIWlzU2FtZU1vbnRoKHRoaXMuYWN0aXZlTW9udGgsIGRhdGUpKSB7XG4gICAgICB0aGlzLmFjdGl2ZU1vbnRoID0gc3RhcnRPZk1vbnRoKGRhdGUpO1xuICAgICAgdGhpcy5yZWZyZXNoQWN0aXZlTW9udGgoKTtcbiAgICAgIHRoaXMuY2FsZW5kYXJIZWxwZXIudXBkYXRlKHRoaXMuZ2V0SGVscGVyT3B0aW9ucygpKTtcbiAgICB9XG4gIH1cblxuICAvLyBGb3IgbGVuaWVuY3ksIHRoZSBjb21wb25lbnQgd2lsbCBhY2NlcHQgYW55IERhdGUgdGhhdCBwb2ludHMgdG8gZWl0aGVyIFVUQyBtaWRuaWdodFxuICAvLyBvciB0byBsb2NhbCB0aW1lem9uZSBtaWRuaWdodCBhbHRob3VnaCB3ZSB3aWxsIGludGVybmFsbHkgbm9ybWFsaXplIHRoZSByZXByZXNlbnRhdGlvblxuICAvLyBvZiBhbGwgcmVjZWl2ZWQgZGF0ZXMgdG8gcG9pbnQgdG8gbG9jYWwgdGltZXpvbmUgbWlkbmlnaHQuXG4gIC8vIFdlIGN1cnJlbnRseSBsb2cgbm8gd2FybmluZ3MgaWYgdGhlIGRhdGUgZG9lc24ndCBtYXRjaCB0aGUgdGltZXpvbmUgc2V0dGluZyBvclxuICAvLyBpZiBpdCBkb2Vzbid0IHBvaW50IHRvIG1pZG5pZ2h0LlxuICBwcml2YXRlIG5vcm1hbGl6ZURhdGUoZGF0ZUxvY2FsT3JVVEM6IERhdGUpIHtcbiAgICBpZiAoIWRhdGVMb2NhbE9yVVRDKSByZXR1cm47XG5cbiAgICBpZiAoc3RhcnRPZkRheShkYXRlTG9jYWxPclVUQykuZ2V0VGltZSgpID09PSBkYXRlTG9jYWxPclVUQy5nZXRUaW1lKCkpIHtcbiAgICAgIC8vIGRhdGUgaXMgbG9jYWwgdGltZXpvbmUgbWlkbmlnaHRcbiAgICAgIHJldHVybiBkYXRlTG9jYWxPclVUQztcbiAgICB9XG4gICAgaWYgKFxuICAgICAgc3RhcnRPZkRheSh1dGNUb1pvbmVkVGltZShkYXRlTG9jYWxPclVUQywgdGhpcy50aW1lWm9uZU5hbWUpKS5nZXRUaW1lKCkgPT09XG4gICAgICB1dGNUb1pvbmVkVGltZShkYXRlTG9jYWxPclVUQywgdGhpcy50aW1lWm9uZU5hbWUpLmdldFRpbWUoKVxuICAgICkge1xuICAgICAgLy8gdGhlIGRhdGUgaXMgYSBVVEMgbWlkbmlnaHQ7IGNyZWF0ZSB0aGUgZXF1aXZhbGVudCBsb2NhbCB0aW1lem9uZSBtaWRuaWdodCBkYXRlXG4gICAgICBjb25zdCBub3JtYWxpemVkVVRDZGF0ZSA9IHV0Y1RvWm9uZWRUaW1lKGRhdGVMb2NhbE9yVVRDLCB0aGlzLnRpbWVab25lTmFtZSk7XG4gICAgICByZXR1cm4gbm9ybWFsaXplZFVUQ2RhdGU7XG4gICAgfVxuICAgIC8vIGRvZXMgbm90IHBvaW50IHRvIG1pZG5pZ2h0IHNvIHdlIG1ha2UgaXRcbiAgICByZXR1cm4gc3RhcnRPZkRheShkYXRlTG9jYWxPclVUQyk7XG4gIH1cblxuICBwcml2YXRlIGdldFdlZWtEYXlzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuXG4gICAgY29uc3Qgd2VlayA9IGVhY2hEYXlPZkludGVydmFsKHtcbiAgICAgIHN0YXJ0OiBzdGFydE9mV2Vlayhub3csIHsgbG9jYWxlOiB0aGlzLmxvY2FsZSB9KSxcbiAgICAgIGVuZDogZW5kT2ZXZWVrKG5vdywgeyBsb2NhbGU6IHRoaXMubG9jYWxlIH0pLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHdlZWsubWFwKChkYXRlKSA9PiB0aGlzLmdldEZpcnN0TGV0dGVyT2ZXZWVrRGF5Q2FwaXRhbGl6ZWQoZGF0ZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRGaXJzdExldHRlck9mV2Vla0RheUNhcGl0YWxpemVkKGRhdGU6IERhdGUpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtYXRXaXRoTG9jYWxlKGRhdGUsICdFRUVFRScpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNEYXRlQ2hhbmdlZChuZXdEYXRlOiBEYXRlLCBwcmV2aW91c0RhdGU6IERhdGUpOiBib29sZWFuIHtcbiAgICBpZiAoIW5ld0RhdGUgJiYgIXByZXZpb3VzRGF0ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAobmV3RGF0ZSBpbnN0YW5jZW9mIERhdGUgJiYgIXByZXZpb3VzRGF0ZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiAhaXNTYW1lRGF5KG5ld0RhdGUsIHByZXZpb3VzRGF0ZSk7XG4gIH1cblxuICBwcml2YXRlIGlzRGlzYWJsZWREYXRlKGRhdGU6IERhdGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kaXNhYmxlZERhdGVzLnNvbWUoKGRpc2FibGVkRGF0ZSkgPT4ge1xuICAgICAgcmV0dXJuIGlzU2FtZURheShkaXNhYmxlZERhdGUsIGRhdGUpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVmcmVzaEFjdGl2ZU1vbnRoKCkge1xuICAgIGlmICghdGhpcy5hY3RpdmVNb250aCkgcmV0dXJuO1xuXG4gICAgY29uc3QgbW9udGhTdGFydCA9IHN0YXJ0T2ZNb250aCh0aGlzLmFjdGl2ZU1vbnRoKTtcbiAgICBjb25zdCBtb250aEVuZCA9IGVuZE9mTW9udGgodGhpcy5hY3RpdmVNb250aCk7XG4gICAgY29uc3Qgc3RhcnRPZkZpcnN0V2VlayA9IHN0YXJ0T2ZXZWVrKG1vbnRoU3RhcnQsIHsgbG9jYWxlOiB0aGlzLmxvY2FsZSB9KTtcbiAgICBjb25zdCBlbmRPZkxhc3RXZWVrID0gZW5kT2ZXZWVrKG1vbnRoRW5kLCB7IGxvY2FsZTogdGhpcy5sb2NhbGUgfSk7XG4gICAgY29uc3QgdG90YWxEYXlDb3VudCA9IGRpZmZlcmVuY2VJbkRheXMoZW5kT2ZMYXN0V2Vlaywgc3RhcnRPZkZpcnN0V2VlaykgKyAxO1xuICAgIGNvbnN0IHRvZGF5ID0gdGhpcy50b2RheURhdGUgPyBzdGFydE9mRGF5KHRoaXMudG9kYXlEYXRlKSA6IHN0YXJ0T2ZEYXkobmV3IERhdGUoKSk7XG5cbiAgICBjb25zdCBkYXlzQXJyYXkgPSBBcnJheS5mcm9tKEFycmF5KHRvdGFsRGF5Q291bnQpLmtleXMoKSk7XG5cbiAgICBjb25zdCBkYXlzOiBDYWxlbmRhckNlbGxbXSA9IGRheXNBcnJheS5tYXAoKG51bWJlcikgPT4ge1xuICAgICAgY29uc3QgY2VsbERhdGUgPSBhZGQoc3RhcnRPZkZpcnN0V2VlaywgeyBbVGltZVVuaXQuZGF5c106IG51bWJlciB9KTtcbiAgICAgIGNvbnN0IGRheSA9IHRoaXMuZ2V0Q2FsZW5kYXJEYXkoY2VsbERhdGUsIHRvZGF5LCBtb250aFN0YXJ0KTtcblxuICAgICAgY29uc3QgaXNTZWxlY3RhYmxlID0gdGhpcy5pc1NlbGVjdGFibGUoZGF5LCBjZWxsRGF0ZSk7XG4gICAgICBjb25zdCBpc1NlbGVjdGVkID0gaXNTYW1lRGF5KHRoaXMuc2VsZWN0ZWREYXRlLCBjZWxsRGF0ZSk7XG4gICAgICBjb25zdCBjZWxsID0ge1xuICAgICAgICBkYXRlOiBjZWxsRGF0ZS5nZXREYXRlKCksXG4gICAgICAgIGlzQ3VycmVudE1vbnRoOiBkYXkuaXNDdXJyZW50TW9udGgsXG4gICAgICAgIGlzU2VsZWN0YWJsZSxcbiAgICAgICAgaXNTZWxlY3RlZCxcbiAgICAgICAgY3NzQ2xhc3NlczogdGhpcy5nZXRDc3NDbGFzc2VzKGRheSwgaXNTZWxlY3RhYmxlLCBpc1NlbGVjdGVkKSxcbiAgICAgIH07XG4gICAgICBpZiAoaXNTZWxlY3RlZCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkRGF5ID0gY2VsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjZWxsO1xuICAgIH0pO1xuICAgIHRoaXMuX21vbnRoID0gdGhpcy5jaHVuayhkYXlzLCA3KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2FsZW5kYXJEYXkoZGF0ZTogRGF0ZSwgdG9kYXk6IERhdGUsIG1vbnRoU3RhcnQ6IERhdGUpOiBDYWxlbmRhckRheSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVG9kYXk6IGlzU2FtZURheSh0b2RheSwgZGF0ZSksXG4gICAgICBpc1Bhc3Q6IGlzQmVmb3JlKGRhdGUsIHRvZGF5KSxcbiAgICAgIGlzRnV0dXJlOiBpc0FmdGVyKGRhdGUsIHRvZGF5KSxcbiAgICAgIGlzV2Vla2VuZDogaXNXZWVrZW5kKGRhdGUpLFxuICAgICAgaXNDdXJyZW50TW9udGg6IGlzU2FtZU1vbnRoKGRhdGUsIG1vbnRoU3RhcnQpLFxuICAgICAgaXNEaXNhYmxlZDogdGhpcy5pc0Rpc2FibGVkRGF0ZShkYXRlKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBpc1NlbGVjdGFibGUoZGF5OiBDYWxlbmRhckRheSwgZGF0ZTogRGF0ZSkge1xuICAgIHJldHVybiAoXG4gICAgICAodGhpcy5hbHdheXNFbmFibGVUb2RheSAmJiBkYXkuaXNUb2RheSkgfHxcbiAgICAgICghZGF5LmlzRGlzYWJsZWQgJiZcbiAgICAgICAgZGF5LmlzQ3VycmVudE1vbnRoICYmXG4gICAgICAgICEodGhpcy5kaXNhYmxlV2Vla2VuZHMgJiYgZGF5LmlzV2Vla2VuZCkgJiZcbiAgICAgICAgISh0aGlzLmRpc2FibGVQYXN0RGF0ZXMgJiYgZGF5LmlzUGFzdCkgJiZcbiAgICAgICAgISh0aGlzLmRpc2FibGVGdXR1cmVEYXRlcyAmJiBkYXkuaXNGdXR1cmUpICYmXG4gICAgICAgICEodGhpcy5taW5EYXRlICYmIGlzQmVmb3JlKGRhdGUsIHRoaXMubWluRGF0ZSkpICYmXG4gICAgICAgICEodGhpcy5tYXhEYXRlICYmIGlzQWZ0ZXIoZGF0ZSwgdGhpcy5tYXhEYXRlKSkpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q3NzQ2xhc3NlcyhkYXk6IENhbGVuZGFyRGF5LCBpc1NlbGVjdGFibGU6IGJvb2xlYW4sIGlzU2VsZWN0ZWQ6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBjc3NDbGFzc2VzID0ge1xuICAgICAgJ2N1cnJlbnQtbW9udGgnOiBkYXkuaXNDdXJyZW50TW9udGgsXG4gICAgICB3ZWVrZW5kOiBkYXkuaXNXZWVrZW5kLFxuICAgICAgdG9kYXk6IGRheS5pc1RvZGF5LFxuICAgICAgc2VsZWN0YWJsZTogaXNTZWxlY3RhYmxlLFxuICAgICAgc2VsZWN0ZWQ6IGlzU2VsZWN0ZWQsXG4gICAgICBwYXN0OiBkYXkuaXNQYXN0LFxuICAgICAgZGlzYWJsZWQ6IGRheS5pc0Rpc2FibGVkLFxuICAgIH07XG4gICAgbGV0IGNzc0NsYXNzU3RyaW5nID0gJ2RheSc7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gY3NzQ2xhc3Nlcykge1xuICAgICAgaWYgKGNzc0NsYXNzZXNba2V5XSkge1xuICAgICAgICBjc3NDbGFzc1N0cmluZyArPSAnICcgKyBrZXk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjc3NDbGFzc1N0cmluZztcbiAgfVxuXG4gIHByaXZhdGUgY2h1bmsoYXJyYXk6IGFueVtdLCBzaXplOiBudW1iZXIpIHtcbiAgICBjb25zdCByZXN1bHRzID0gW107XG4gICAgd2hpbGUgKGFycmF5Lmxlbmd0aCkge1xuICAgICAgcmVzdWx0cy5wdXNoKGFycmF5LnNwbGljZSgwLCBzaXplKSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG5cbiAgcHJpdmF0ZSBvblNlbGVjdGVkRGF0ZUNoYW5nZShuZXdEYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWREYXkpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXkuaXNTZWxlY3RlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld0RheSA9IHRoaXMuZ2V0Q2VsbChuZXdEYXRlKTtcbiAgICBpZiAobmV3RGF5KSB7XG4gICAgICBuZXdEYXkuaXNTZWxlY3RlZCA9IHRydWU7XG4gICAgICB0aGlzLnNlbGVjdGVkRGF5ID0gbmV3RGF5O1xuICAgIH1cbiAgICB0aGlzLmNhbGVuZGFySGVscGVyLnNldFNlbGVjdGVkRGF5KG5ld0RhdGUuZ2V0RGF0ZSgpKTtcbiAgfVxuXG4gIF9vbkRhdGVTZWxlY3RlZChuZXdEYXk6IENhbGVuZGFyQ2VsbCkge1xuICAgIGlmIChuZXdEYXkuaXNTZWxlY3RhYmxlICYmIG5ld0RheS5kYXRlKSB7XG4gICAgICBsZXQgbmV3RGF0ZSA9IG5ldyBEYXRlKHRoaXMuYWN0aXZlTW9udGgpO1xuXG4gICAgICBpZiAodGhpcy50aW1lem9uZSA9PT0gJ1VUQycpIHtcbiAgICAgICAgbmV3RGF0ZSA9IHpvbmVkVGltZVRvVXRjKHRoaXMuc3VidHJhY3RUaW1lem9uZU9mZnNldChuZXdEYXRlKSwgdGhpcy50aW1lWm9uZU5hbWUpO1xuICAgICAgfVxuXG4gICAgICBuZXdEYXRlLnNldERhdGUobmV3RGF5LmRhdGUpO1xuICAgICAgY29uc3QgZGF0ZVRvRW1pdCA9IG5ld0RhdGU7XG5cbiAgICAgIGlmICh0aGlzLmhhc0RhdGVDaGFuZ2VkKG5ld0RhdGUsIHRoaXMuX3NlbGVjdGVkRGF0ZSkpIHtcbiAgICAgICAgdGhpcy5vblNlbGVjdGVkRGF0ZUNoYW5nZShuZXdEYXRlKTtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWREYXRlID0gbmV3RGF0ZTtcbiAgICAgICAgdGhpcy5kYXRlQ2hhbmdlLmVtaXQoZGF0ZVRvRW1pdCk7XG4gICAgICB9XG4gICAgICB0aGlzLmRhdGVTZWxlY3QuZW1pdChkYXRlVG9FbWl0KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9uQ2hhbmdlTW9udGgoZGlyZWN0aW9uOiBudW1iZXIpIHtcbiAgICB0aGlzLl9jaGFuZ2VNb250aChkaXJlY3Rpb24pO1xuICAgIHRoaXMuY2FsZW5kYXJIZWxwZXIudXBkYXRlKHRoaXMuZ2V0SGVscGVyT3B0aW9ucygpKTtcbiAgfVxuXG4gIF9jaGFuZ2VNb250aChpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5jaGFuZ2VBY3RpdmVWaWV3KGluZGV4LCBUaW1lVW5pdC5tb250aHMpO1xuICB9XG5cbiAgX2NoYW5nZVllYXIoeWVhcjogc3RyaW5nKSB7XG4gICAgY29uc3QgeWVhck51bWVyaWMgPSBOdW1iZXIoeWVhcik7XG4gICAgdGhpcy5jaGFuZ2VBY3RpdmVWaWV3KHllYXJOdW1lcmljIC0gZ2V0WWVhcih0aGlzLmFjdGl2ZU1vbnRoKSwgVGltZVVuaXQueWVhcnMpO1xuICAgIHRoaXMueWVhclNlbGVjdC5lbWl0KHllYXJOdW1lcmljKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hhbmdlQWN0aXZlVmlldyhpbmRleDogbnVtYmVyLCB1bml0OiBUaW1lVW5pdCkge1xuICAgIGlmIChpbmRleCA9PT0gMCkgcmV0dXJuO1xuICAgIHRoaXMuYWN0aXZlTW9udGggPSBhZGQodGhpcy5hY3RpdmVNb250aCwgeyBbdW5pdF06IGluZGV4IH0pO1xuXG4gICAgdGhpcy5yZWZyZXNoQWN0aXZlTW9udGgoKTtcbiAgfVxuXG4gIGdldCBfY2FuTmF2aWdhdGVCYWNrKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHJlYWNoZWRQYXN0RGF0ZXNMaW1pdCA9XG4gICAgICB0aGlzLmRpc2FibGVQYXN0RGF0ZXMgJiYgaXNTYW1lTW9udGgodGhpcy5hY3RpdmVNb250aCwgdGhpcy50b2RheURhdGUpO1xuXG4gICAgY29uc3QgcmVhY2hlZE9yRXhjZWVkZWRNaW5EYXRlID1cbiAgICAgIHRoaXMubWluRGF0ZSAmJlxuICAgICAgKGlzU2FtZU1vbnRoKHRoaXMuYWN0aXZlTW9udGgsIHRoaXMubWluRGF0ZSkgfHwgaXNCZWZvcmUodGhpcy5hY3RpdmVNb250aCwgdGhpcy5taW5EYXRlKSk7XG5cbiAgICByZXR1cm4gIXJlYWNoZWRQYXN0RGF0ZXNMaW1pdCAmJiAhcmVhY2hlZE9yRXhjZWVkZWRNaW5EYXRlO1xuICB9XG5cbiAgZ2V0IF9jYW5OYXZpZ2F0ZUZvcndhcmQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcmVhY2hlZEZ1dHVyZURhdGVzTGltaXQgPVxuICAgICAgdGhpcy5kaXNhYmxlRnV0dXJlRGF0ZXMgJiYgaXNTYW1lTW9udGgodGhpcy5hY3RpdmVNb250aCwgdGhpcy50b2RheURhdGUpO1xuXG4gICAgY29uc3QgcmVhY2hlZE9yRXhjZWVkZWRNYXhEYXRlID1cbiAgICAgIHRoaXMubWF4RGF0ZSAmJlxuICAgICAgKGlzU2FtZU1vbnRoKHRoaXMuYWN0aXZlTW9udGgsIHRoaXMubWF4RGF0ZSkgfHwgaXNBZnRlcih0aGlzLmFjdGl2ZU1vbnRoLCB0aGlzLm1heERhdGUpKTtcblxuICAgIHJldHVybiAhcmVhY2hlZEZ1dHVyZURhdGVzTGltaXQgJiYgIXJlYWNoZWRPckV4Y2VlZGVkTWF4RGF0ZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2VsbChkYXRlOiBEYXRlKSB7XG4gICAgbGV0IGZvdW5kRGF5ID0gbnVsbDtcbiAgICBpZiAoZGF0ZSkge1xuICAgICAgZm9yIChsZXQgd2VlayBvZiB0aGlzLl9tb250aCkge1xuICAgICAgICBmb3VuZERheSA9IHdlZWsuZmluZCgoZGF5KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGRheS5pc0N1cnJlbnRNb250aCAmJiBkYXkuZGF0ZSA9PT0gZGF0ZS5nZXREYXRlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZm91bmREYXkpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZm91bmREYXk7XG4gIH1cblxuICBwcml2YXRlIGdldEhlbHBlck9wdGlvbnMoKTogQ2FsZW5kYXJPcHRpb25zIHtcbiAgICByZXR1cm4ge1xuICAgICAgY2FuTmF2aWdhdGVCYWNrOiB0aGlzLl9jYW5OYXZpZ2F0ZUJhY2ssXG4gICAgICBjYW5OYXZpZ2F0ZUZvcndhcmQ6IHRoaXMuX2Nhbk5hdmlnYXRlRm9yd2FyZCxcbiAgICAgIHllYXI6IHRoaXMuYWN0aXZlWWVhcixcbiAgICAgIG1vbnRoTmFtZTogdGhpcy5hY3RpdmVNb250aE5hbWUsXG4gICAgICB3ZWVrRGF5czogdGhpcy5fd2Vla0RheXMsXG4gICAgICBtb250aDogdGhpcy5fbW9udGgsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3VidHJhY3RUaW1lem9uZU9mZnNldChkYXRlOiBEYXRlKTogRGF0ZSB7XG4gICAgY29uc3QgdGltZXpvbmVPZmZzZXRJbk1zID0gZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpICogNjAgKiAxMDAwO1xuICAgIHJldHVybiBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSAtIHRpbWV6b25lT2Zmc2V0SW5Ncyk7XG4gIH1cblxuICBwcml2YXRlIGdldERhdGVGcm9tTmF2aWdhYmxlWWVhcihuYXZpZ2FibGVZZWFyOiBudW1iZXIgfCBEYXRlKTogRGF0ZSB7XG4gICAgaWYgKG5hdmlnYWJsZVllYXIgaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4gbmF2aWdhYmxlWWVhcjtcbiAgICBjb25zdCB0b2RheSA9IHRoaXMudG9kYXlEYXRlIHx8IG5ldyBEYXRlKCk7XG4gICAgcmV0dXJuIG5ldyBEYXRlKHRvZGF5LmdldEZ1bGxZZWFyKCkgKyBuYXZpZ2FibGVZZWFyLCAwLCAxKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0WWVhcnNCZXR3ZWVuRGF0ZXMoc3RhcnREYXRlOiBEYXRlLCBlbmREYXRlOiBEYXRlKTogc3RyaW5nW10ge1xuICAgIC8vIEVuc3VyZSB5ZWFycyBhcmUgb3JkZXJlZCBjb3JyZWN0bHkgaWYgcGFyYW1ldGVycyBhcmUgc3dpdGNoZWQ6XG4gICAgY29uc3QgW3N0YXJ0WWVhciwgZW5kWWVhcl0gPSBbc3RhcnREYXRlLmdldEZ1bGxZZWFyKCksIGVuZERhdGUuZ2V0RnVsbFllYXIoKV0uc29ydCgpO1xuICAgIGNvbnN0IG51bWJlck9mWWVhcnMgPSBlbmRZZWFyIC0gc3RhcnRZZWFyO1xuICAgIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiBudW1iZXJPZlllYXJzICsgMSB9LCAoXywgaSkgPT4gKHN0YXJ0WWVhciArIGkpLnRvU3RyaW5nKCkpO1xuICB9XG59XG4iXX0=
@@ -1 +1 @@
1
- [{"__symbolic":"module","version":4,"metadata":{"Locale":{"__symbolic":"interface"},"CalendarComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":64,"character":1},"arguments":[{"selector":"kirby-calendar","providers":[{"__symbolic":"reference","module":"./helpers/calendar.helper","name":"CalendarHelper","line":68,"character":14}],"template":"<div class=\"header\">\n <div class=\"month-navigator\">\n <button [disabled]=\"!_canNavigateBack\" (click)=\"_changeMonth(-1)\">\n <kirby-icon name=\"arrow-back\"></kirby-icon>\n </button>\n\n <div class=\"month-and-year\">\n <span class=\"month\">{{ activeMonthName }}</span\n ><span *ngIf=\"!_hasYearNavigator\" class=\"year\">{{ activeYear }}</span>\n </div>\n\n <button [disabled]=\"!_canNavigateForward\" (click)=\"_changeMonth(1)\">\n <kirby-icon name=\"arrow-more\"></kirby-icon>\n </button>\n </div>\n <kirby-dropdown\n *ngIf=\"_hasYearNavigator\"\n [selectedIndex]=\"navigatedYear\"\n [items]=\"navigableYears\"\n popout=\"left\"\n (change)=\"_changeYear($event)\"\n >\n </kirby-dropdown>\n</div>\n\n<table>\n <thead>\n <tr>\n <th *ngFor=\"let weekDay of _weekDays\">{{ weekDay }}</th>\n </tr>\n </thead>\n\n <tbody>\n <tr *ngFor=\"let week of _month\">\n <td *ngFor=\"let day of week\">\n <div\n (click)=\"_onDateSelected(day)\"\n class=\"{{ day.cssClasses }}\"\n [class.selected]=\"day.isSelected\"\n >\n {{ day.date }}\n </div>\n </td>\n </tr>\n </tbody>\n</table>\n\n<!-- <iframe src=\"kirby/components/calendar/calendar.webview.html\" #calendarContainer style=\"width: 320px; height: 304px; border: 0\"> -->\n","styles":["table{width:100%;border-collapse:collapse;-webkit-user-select:none;user-select:none;margin-bottom:8px}td,th{text-align:center;padding:0}td:first-child,th:first-child{padding-left:8px}td:last-child,th:last-child{padding-right:8px}th{height:50px;border-bottom:1px solid var(--kirby-background-color)}.header,td,th{background-color:transparent}.header{margin:8px 8px 0}.header,.month-navigator{display:flex;justify-content:space-between}.month-navigator{flex-grow:1;align-items:center}.month-navigator button{background-color:transparent;outline:none;border:none;color:inherit;cursor:pointer;height:40px;width:40px;padding:0}.month-navigator button:disabled{opacity:.5;pointer-events:none}.month-and-year{-webkit-user-select:none;user-select:none}.month-and-year .month{font-weight:700;margin-right:8px}:host(.has-year-navigator) .month-navigator{flex-grow:0}:host(.has-year-navigator) .month-and-year{width:80px;margin:0 8px;text-align:center}:host(.has-year-navigator) .month{margin-right:0}.day{display:inline-flex;align-items:center;justify-content:center;border-radius:20px;width:40px;height:40px;margin:4px 0}.day.selectable,.day.selected{cursor:pointer}.day.disabled,.day:not(.selectable){color:var(--kirby-text-color-semi-dark)}.day.today{color:var(--kirby-medium-contrast);background-color:var(--kirby-medium)}.day.selected{color:var(--kirby-black-contrast);background-color:var(--kirby-black)}.day:not(.current-month){visibility:hidden;pointer-events:none}.day.selectable:not(.selected):hover{color:var(--kirby-light-contrast);background-color:var(--kirby-light)}"]}]}],"members":{"calendarContainer":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":71,"character":3},"arguments":["calendarContainer",{"static":false}]}]}],"dateChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":72,"character":3}}]}],"dateSelect":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":73,"character":3}}]}],"yearSelect":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":74,"character":3}}]}],"timezone":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":75,"character":3}}]}],"disableWeekends":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":76,"character":3}}]}],"disablePastDates":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":77,"character":3}}]}],"disableFutureDates":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":78,"character":3}}]}],"alwaysEnableToday":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":79,"character":3}}]}],"customLocales":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":80,"character":3}}]}],"yearNavigatorOptions":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":88,"character":3}}]}],"selectedDate":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":110,"character":3}}]}],"disabledDates":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":124,"character":3}}]}],"todayDate":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":132,"character":3}}]}],"minDate":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":140,"character":3}}]}],"maxDate":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":151,"character":3}}]}],"_hasYearNavigator":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostBinding","line":183,"character":3},"arguments":["class.has-year-navigator"]}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":188,"character":55},"arguments":[{"__symbolic":"reference","module":"@angular/core","name":"LOCALE_ID","line":188,"character":62}]}]],"parameters":[{"__symbolic":"reference","module":"./helpers/calendar.helper","name":"CalendarHelper","line":188,"character":38},{"__symbolic":"reference","name":"string"}]}],"formatWithLocale":[{"__symbolic":"method"}],"mapLocale":[{"__symbolic":"method"}],"ngOnInit":[{"__symbolic":"method"}],"ngAfterViewInit":[{"__symbolic":"method"}],"ngOnChanges":[{"__symbolic":"method"}],"setActiveMonth":[{"__symbolic":"method"}],"normalizeDate":[{"__symbolic":"method"}],"getWeekDays":[{"__symbolic":"method"}],"getFirstLetterOfWeekDayCapitalized":[{"__symbolic":"method"}],"hasDateChanged":[{"__symbolic":"method"}],"isDisabledDate":[{"__symbolic":"method"}],"refreshActiveMonth":[{"__symbolic":"method"}],"getCalendarDay":[{"__symbolic":"method"}],"isSelectable":[{"__symbolic":"method"}],"getCssClasses":[{"__symbolic":"method"}],"chunk":[{"__symbolic":"method"}],"onSelectedDateChange":[{"__symbolic":"method"}],"_onDateSelected":[{"__symbolic":"method"}],"onChangeMonth":[{"__symbolic":"method"}],"_changeMonth":[{"__symbolic":"method"}],"_changeYear":[{"__symbolic":"method"}],"changeActiveView":[{"__symbolic":"method"}],"getCell":[{"__symbolic":"method"}],"getHelperOptions":[{"__symbolic":"method"}],"subtractTimezoneOffset":[{"__symbolic":"method"}],"getDateFromNavigableYear":[{"__symbolic":"method"}],"getYearsBetweenDates":[{"__symbolic":"method"}]}}}}]
1
+ [{"__symbolic":"module","version":4,"metadata":{"Locale":{"__symbolic":"interface"},"CalendarComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":64,"character":1},"arguments":[{"selector":"kirby-calendar","providers":[{"__symbolic":"reference","module":"./helpers/calendar.helper","name":"CalendarHelper","line":68,"character":14}],"template":"<div class=\"header\">\n <div class=\"month-navigator\">\n <button [disabled]=\"!_canNavigateBack\" (click)=\"_changeMonth(-1)\">\n <kirby-icon name=\"arrow-back\"></kirby-icon>\n </button>\n\n <div class=\"month-and-year\">\n <span class=\"month\">{{ activeMonthName }}</span\n ><span *ngIf=\"!_hasYearNavigator\" class=\"year\">{{ activeYear }}</span>\n </div>\n\n <button [disabled]=\"!_canNavigateForward\" (click)=\"_changeMonth(1)\">\n <kirby-icon name=\"arrow-more\"></kirby-icon>\n </button>\n </div>\n <kirby-dropdown\n *ngIf=\"_hasYearNavigator\"\n [usePopover]=\"usePopover\"\n [selectedIndex]=\"navigatedYear\"\n [items]=\"navigableYears\"\n popout=\"left\"\n (change)=\"_changeYear($event)\"\n >\n </kirby-dropdown>\n</div>\n\n<table>\n <thead>\n <tr>\n <th *ngFor=\"let weekDay of _weekDays\">{{ weekDay }}</th>\n </tr>\n </thead>\n\n <tbody>\n <tr *ngFor=\"let week of _month\">\n <td *ngFor=\"let day of week\">\n <div\n (click)=\"_onDateSelected(day)\"\n class=\"{{ day.cssClasses }}\"\n [class.selected]=\"day.isSelected\"\n >\n {{ day.date }}\n </div>\n </td>\n </tr>\n </tbody>\n</table>\n\n<!-- <iframe src=\"kirby/components/calendar/calendar.webview.html\" #calendarContainer style=\"width: 320px; height: 304px; border: 0\"> -->\n","styles":["table{width:100%;border-collapse:collapse;-webkit-user-select:none;user-select:none;margin-bottom:8px}td,th{text-align:center;padding:0}td:first-child,th:first-child{padding-left:8px}td:last-child,th:last-child{padding-right:8px}th{height:50px;border-bottom:1px solid var(--kirby-background-color)}.header,td,th{background-color:transparent}.header{margin:8px 8px 0}.header,.month-navigator{display:flex;justify-content:space-between}.month-navigator{flex-grow:1;align-items:center}.month-navigator button{background-color:transparent;outline:none;border:none;color:inherit;cursor:pointer;height:40px;width:40px;padding:0}.month-navigator button:disabled{opacity:.5;pointer-events:none}.month-and-year{-webkit-user-select:none;user-select:none}.month-and-year .month{font-weight:700;margin-right:8px}:host(.has-year-navigator) .month-navigator{flex-grow:0}:host(.has-year-navigator) .month-and-year{width:80px;margin:0 8px;text-align:center}:host(.has-year-navigator) .month{margin-right:0}.day{display:inline-flex;align-items:center;justify-content:center;border-radius:20px;width:40px;height:40px;margin:4px 0}.day.selectable,.day.selected{cursor:pointer}.day.disabled,.day:not(.selectable){color:var(--kirby-text-color-semi-dark)}.day.today{color:var(--kirby-medium-contrast);background-color:var(--kirby-medium)}.day.selected{color:var(--kirby-black-contrast);background-color:var(--kirby-black)}.day:not(.current-month){visibility:hidden;pointer-events:none}.day.selectable:not(.selected):hover{color:var(--kirby-light-contrast);background-color:var(--kirby-light)}"]}]}],"members":{"calendarContainer":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":71,"character":3},"arguments":["calendarContainer",{"static":false}]}]}],"dateChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":72,"character":3}}]}],"dateSelect":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":73,"character":3}}]}],"yearSelect":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":74,"character":3}}]}],"timezone":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":75,"character":3}}]}],"disableWeekends":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":76,"character":3}}]}],"disablePastDates":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":77,"character":3}}]}],"disableFutureDates":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":78,"character":3}}]}],"alwaysEnableToday":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":79,"character":3}}]}],"customLocales":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":80,"character":3}}]}],"usePopover":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":85,"character":3}}]}],"yearNavigatorOptions":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":93,"character":3}}]}],"selectedDate":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":115,"character":3}}]}],"disabledDates":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":129,"character":3}}]}],"todayDate":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":137,"character":3}}]}],"minDate":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":145,"character":3}}]}],"maxDate":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":156,"character":3}}]}],"_hasYearNavigator":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostBinding","line":188,"character":3},"arguments":["class.has-year-navigator"]}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":193,"character":55},"arguments":[{"__symbolic":"reference","module":"@angular/core","name":"LOCALE_ID","line":193,"character":62}]}]],"parameters":[{"__symbolic":"reference","module":"./helpers/calendar.helper","name":"CalendarHelper","line":193,"character":38},{"__symbolic":"reference","name":"string"}]}],"formatWithLocale":[{"__symbolic":"method"}],"mapLocale":[{"__symbolic":"method"}],"ngOnInit":[{"__symbolic":"method"}],"ngAfterViewInit":[{"__symbolic":"method"}],"ngOnChanges":[{"__symbolic":"method"}],"setActiveMonth":[{"__symbolic":"method"}],"normalizeDate":[{"__symbolic":"method"}],"getWeekDays":[{"__symbolic":"method"}],"getFirstLetterOfWeekDayCapitalized":[{"__symbolic":"method"}],"hasDateChanged":[{"__symbolic":"method"}],"isDisabledDate":[{"__symbolic":"method"}],"refreshActiveMonth":[{"__symbolic":"method"}],"getCalendarDay":[{"__symbolic":"method"}],"isSelectable":[{"__symbolic":"method"}],"getCssClasses":[{"__symbolic":"method"}],"chunk":[{"__symbolic":"method"}],"onSelectedDateChange":[{"__symbolic":"method"}],"_onDateSelected":[{"__symbolic":"method"}],"onChangeMonth":[{"__symbolic":"method"}],"_changeMonth":[{"__symbolic":"method"}],"_changeYear":[{"__symbolic":"method"}],"changeActiveView":[{"__symbolic":"method"}],"getCell":[{"__symbolic":"method"}],"getHelperOptions":[{"__symbolic":"method"}],"subtractTimezoneOffset":[{"__symbolic":"method"}],"getDateFromNavigableYear":[{"__symbolic":"method"}],"getYearsBetweenDates":[{"__symbolic":"method"}]}}}}]
@@ -13,6 +13,9 @@ export class CardComponent {
13
13
  this.flat = false;
14
14
  this.highlighted = false;
15
15
  }
16
+ set backgroundImageUrl(value) {
17
+ this._backgroundImage = `url('${value}')`;
18
+ }
16
19
  set sizes(value) {
17
20
  if (typeof value === 'string') {
18
21
  console.error('Sizes property cannot be a string. Please ensure the size property is bound as an expression:\n[sizes]="{...}"');
@@ -55,7 +58,7 @@ CardComponent.decorators = [
55
58
  { type: Component, args: [{
56
59
  selector: 'kirby-card',
57
60
  template: "<ng-content select=\"kirby-card-header\"></ng-content>\n<div class=\"content-wrapper\" [class.padding]=\"hasPadding\">\n <ng-content></ng-content>\n</div>\n<ng-content select=\"kirby-card-footer\"></ng-content>\n",
58
- styles: [":host{--kirby-card-main-background-color:var(--kirby-white);--kirby-card-main-color:var(--kirby-white-contrast);--kirby-card-footer-background-color:var(--kirby-white);--kirby-card-footer-color:var(--kirby-white-contrast);border-radius:16px;box-shadow:0 5px 10px -10px rgba(28,28,28,.3),0 0 5px 0 rgba(28,28,28,.08);color:var(--kirby-card-main-color);background-color:var(--kirby-card-main-background-color);display:flex;flex-direction:column;justify-content:space-between;overflow:hidden;position:relative;z-index:1;width:var(--kirby-card-width,auto)}:host .content-wrapper.padding{padding:16px}:host.highlighted{box-shadow:0 10px 15px -10px rgba(28,28,28,.3),0 0 5px 0 rgba(28,28,28,.08)}:host.flat{box-shadow:none}:host[role=button]{cursor:pointer;outline-offset:2px}:host-context(.swiper-slide-active){box-shadow:0 10px 15px -10px rgba(28,28,28,.3),0 0 5px 0 rgba(28,28,28,.08);transition:all .5s;transform:translateY(-3px)}:host(.primary){--kirby-card-main-background-color:var(--kirby-primary);--kirby-card-main-color:var(--kirby-primary-contrast)}:host(.secondary){--kirby-card-main-background-color:var(--kirby-secondary);--kirby-card-main-color:var(--kirby-secondary-contrast)}:host(.tertiary){--kirby-card-main-background-color:var(--kirby-tertiary);--kirby-card-main-color:var(--kirby-tertiary-contrast)}:host(.success){--kirby-card-main-background-color:var(--kirby-success);--kirby-card-main-color:var(--kirby-success-contrast)}:host(.warning){--kirby-card-main-background-color:var(--kirby-warning);--kirby-card-main-color:var(--kirby-warning-contrast)}:host(.danger){--kirby-card-main-background-color:var(--kirby-danger);--kirby-card-main-color:var(--kirby-danger-contrast)}:host(.light){--kirby-card-main-background-color:var(--kirby-light);--kirby-card-main-color:var(--kirby-light-contrast)}:host(.medium){--kirby-card-main-background-color:var(--kirby-medium);--kirby-card-main-color:var(--kirby-medium-contrast)}:host(.dark){--kirby-card-main-background-color:var(--kirby-dark);--kirby-card-main-color:var(--kirby-dark-contrast)}"]
61
+ styles: [":host{--kirby-card-main-background-color:var(--kirby-white);--kirby-card-main-color:var(--kirby-white-contrast);--kirby-card-footer-background-color:var(--kirby-white);--kirby-card-footer-color:var(--kirby-white-contrast);border-radius:16px;box-shadow:0 5px 10px -10px rgba(28,28,28,.3),0 0 5px 0 rgba(28,28,28,.08);color:var(--kirby-card-main-color);background-color:var(--kirby-card-main-background-color);background-image:var(--kirby-card-background-image);background-repeat:var(--kirby-card-background-repeat,no-repeat);background-position:var(--kirby-card-background-position,center);background-size:var(--kirby-card-background-size,cover);display:flex;flex-direction:column;justify-content:space-between;overflow:hidden;position:relative;z-index:1;width:var(--kirby-card-width,auto)}:host .content-wrapper.padding{padding:16px}:host.highlighted{box-shadow:0 10px 15px -10px rgba(28,28,28,.3),0 0 5px 0 rgba(28,28,28,.08)}:host.flat{box-shadow:none}:host[role=button]{cursor:pointer;outline-offset:2px}:host-context(.swiper-slide-active){box-shadow:0 10px 15px -10px rgba(28,28,28,.3),0 0 5px 0 rgba(28,28,28,.08);transition:all .5s;transform:translateY(-3px)}:host(.primary){--kirby-card-main-background-color:var(--kirby-primary);--kirby-card-main-color:var(--kirby-primary-contrast)}:host(.secondary){--kirby-card-main-background-color:var(--kirby-secondary);--kirby-card-main-color:var(--kirby-secondary-contrast)}:host(.tertiary){--kirby-card-main-background-color:var(--kirby-tertiary);--kirby-card-main-color:var(--kirby-tertiary-contrast)}:host(.success){--kirby-card-main-background-color:var(--kirby-success);--kirby-card-main-color:var(--kirby-success-contrast)}:host(.warning){--kirby-card-main-background-color:var(--kirby-warning);--kirby-card-main-color:var(--kirby-warning-contrast)}:host(.danger){--kirby-card-main-background-color:var(--kirby-danger);--kirby-card-main-color:var(--kirby-danger-contrast)}:host(.light){--kirby-card-main-background-color:var(--kirby-light);--kirby-card-main-color:var(--kirby-light-contrast)}:host(.medium){--kirby-card-main-background-color:var(--kirby-medium);--kirby-card-main-color:var(--kirby-medium-contrast)}:host(.dark){--kirby-card-main-background-color:var(--kirby-dark);--kirby-card-main-color:var(--kirby-dark-contrast)}"]
59
62
  },] }
60
63
  ];
61
64
  /** @nocollapse */
@@ -67,10 +70,12 @@ CardComponent.ctorParameters = () => [
67
70
  CardComponent.propDecorators = {
68
71
  title: [{ type: Input }],
69
72
  subtitle: [{ type: Input }],
73
+ _backgroundImage: [{ type: HostBinding, args: ['style.--kirby-card-background-image',] }],
74
+ backgroundImageUrl: [{ type: Input }],
70
75
  hasPadding: [{ type: Input }],
71
76
  sizes: [{ type: Input }],
72
77
  flat: [{ type: HostBinding, args: ['class.flat',] }],
73
78
  highlighted: [{ type: HostBinding, args: ['class.highlighted',] }],
74
79
  mode: [{ type: Input }]
75
80
  };
76
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Rlc2lnbnN5c3RlbS9zcmMvbGliL2NvbXBvbmVudHMvY2FyZC9jYXJkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixXQUFXLEVBQ1gsS0FBSyxFQUdMLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQVExRixNQUFNLE9BQU8sYUFBYTtJQWdDeEIsWUFDVSxVQUFzQixFQUN0QixxQkFBNEMsRUFDNUMsUUFBbUI7UUFGbkIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QiwwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBQzVDLGFBQVEsR0FBUixRQUFRLENBQVc7UUE1QnJCLDRCQUF1QixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztZQUMzRCxLQUFLLEVBQUUsR0FBRztZQUNWLE1BQU0sRUFBRSxHQUFHO1lBQ1gsS0FBSyxFQUFFLElBQUk7U0FDWixDQUFDLENBQUM7UUFhSCxTQUFJLEdBQVksS0FBSyxDQUFDO1FBRXRCLGdCQUFXLEdBQVksS0FBSyxDQUFDO0lBVTFCLENBQUM7SUF2QkosSUFDSSxLQUFLLENBQUMsS0FBaUM7UUFDekMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7WUFDN0IsT0FBTyxDQUFDLEtBQUssQ0FDWCxnSEFBZ0gsQ0FDakgsQ0FBQztTQUNIO1FBQ0QsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBTUQsSUFBYSxJQUFJLENBQUMsS0FBNkI7UUFDN0MsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLEtBQUssTUFBTSxDQUFDO1FBQzdCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxLQUFLLGFBQWEsQ0FBQztJQUM3QyxDQUFDO0lBUUQsUUFBUTtRQUNOLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzNGLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVPLHFCQUFxQixDQUFDLEtBQWlDO1FBQzdELE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVPLHdCQUF3QixDQUFDLENBQW1CLEVBQUUsQ0FBbUI7UUFDdkUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVPLFlBQVksQ0FBQyxLQUEwQjtRQUM3QyxNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQztRQUNqQyxNQUFNLHNCQUFzQixHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRSxNQUFNLHVCQUF1QixHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuRSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxHQUFHLHVCQUF1QixFQUFFO1lBQ3JELElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxzQkFBc0IsRUFBRSxDQUFDLENBQUM7U0FDM0Y7YUFBTTtZQUNMLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO2dCQUNyRCxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxJQUFJLEtBQUssRUFBRTtvQkFDcEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxJQUFJLENBQUMsQ0FBQztpQkFDbkU7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQzs7O1lBeEVGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsWUFBWTtnQkFDdEIsaU9BQW9DOzthQUVyQzs7OztZQWZDLFVBQVU7WUFRSCxxQkFBcUI7WUFINUIsU0FBUzs7O29CQVlSLEtBQUs7dUJBQ0wsS0FBSzt5QkFFTCxLQUFLO29CQVNMLEtBQUs7bUJBVUwsV0FBVyxTQUFDLFlBQVk7MEJBRXhCLFdBQVcsU0FBQyxtQkFBbUI7bUJBRS9CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFJlbmRlcmVyMixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFJlc2l6ZU9ic2VydmVyU2VydmljZSB9IGZyb20gJy4uL3NoYXJlZC9yZXNpemUtb2JzZXJ2ZXIvcmVzaXplLW9ic2VydmVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVzaXplT2JzZXJ2ZXJFbnRyeSB9IGZyb20gJy4uL3NoYXJlZC9yZXNpemUtb2JzZXJ2ZXIvdHlwZXMvcmVzaXplLW9ic2VydmVyLWVudHJ5JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAna2lyYnktY2FyZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jYXJkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2FyZC5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBDYXJkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nO1xuICBASW5wdXQoKSBzdWJ0aXRsZTogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIGhhc1BhZGRpbmc6IGJvb2xlYW47XG5cbiAgcHJpdmF0ZSBzaXplc1NvcnRlZEJ5QnJlYWtwb2ludCA9IHRoaXMuc29ydFNpemVzQnlCcmVha3BvaW50KHtcbiAgICBzbWFsbDogMzYwLFxuICAgIG1lZGl1bTogNzIwLFxuICAgIGxhcmdlOiAxMDI0LFxuICB9KTtcblxuICBASW5wdXQoKVxuICBzZXQgc2l6ZXModmFsdWU6IHsgW3NpemU6IHN0cmluZ106IG51bWJlciB9KSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICdTaXplcyBwcm9wZXJ0eSBjYW5ub3QgYmUgYSBzdHJpbmcuIFBsZWFzZSBlbnN1cmUgdGhlIHNpemUgcHJvcGVydHkgaXMgYm91bmQgYXMgYW4gZXhwcmVzc2lvbjpcXG5bc2l6ZXNdPVwiey4uLn1cIidcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuc2l6ZXNTb3J0ZWRCeUJyZWFrcG9pbnQgPSB0aGlzLnNvcnRTaXplc0J5QnJlYWtwb2ludCh2YWx1ZSk7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZsYXQnKVxuICBmbGF0OiBib29sZWFuID0gZmFsc2U7XG4gIEBIb3N0QmluZGluZygnY2xhc3MuaGlnaGxpZ2h0ZWQnKVxuICBoaWdobGlnaHRlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzZXQgbW9kZSh2YWx1ZTogJ2ZsYXQnIHwgJ2hpZ2hsaWdodGVkJykge1xuICAgIHRoaXMuZmxhdCA9IHZhbHVlID09PSAnZmxhdCc7XG4gICAgdGhpcy5oaWdobGlnaHRlZCA9IHZhbHVlID09PSAnaGlnaGxpZ2h0ZWQnO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgcmVzaXplT2JzZXJ2ZXJTZXJ2aWNlOiBSZXNpemVPYnNlcnZlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyU2VydmljZS5vYnNlcnZlKHRoaXMuZWxlbWVudFJlZiwgKGVudHJ5KSA9PiB0aGlzLmhhbmRsZVJlc2l6ZShlbnRyeSkpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5yZXNpemVPYnNlcnZlclNlcnZpY2UudW5vYnNlcnZlKHRoaXMuZWxlbWVudFJlZik7XG4gIH1cblxuICBwcml2YXRlIHNvcnRTaXplc0J5QnJlYWtwb2ludChzaXplczogeyBbc2l6ZTogc3RyaW5nXTogbnVtYmVyIH0pOiBbc3RyaW5nLCBudW1iZXJdW10ge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhzaXplcykuc29ydCh0aGlzLmNvbXBhcmVTaXplc0J5QnJlYWtwb2ludCk7XG4gIH1cblxuICBwcml2YXRlIGNvbXBhcmVTaXplc0J5QnJlYWtwb2ludChhOiBbc3RyaW5nLCBudW1iZXJdLCBiOiBbc3RyaW5nLCBudW1iZXJdKTogbnVtYmVyIHtcbiAgICByZXR1cm4gYVsxXSA+IGJbMV0gPyAxIDogYlsxXSA+IGFbMV0gPyAtMSA6IDA7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVJlc2l6ZShlbnRyeTogUmVzaXplT2JzZXJ2ZXJFbnRyeSkge1xuICAgIGNvbnN0IHNpemVBdHRyaWJ1dGVOYW1lID0gJ3NpemUnO1xuICAgIGNvbnN0IHNtYWxsZXN0QnJlYWtwb2ludE5hbWUgPSB0aGlzLnNpemVzU29ydGVkQnlCcmVha3BvaW50WzBdWzBdO1xuICAgIGNvbnN0IHNtYWxsZXN0QnJlYWtwb2ludFdpZHRoID0gdGhpcy5zaXplc1NvcnRlZEJ5QnJlYWtwb2ludFswXVsxXTtcbiAgICBpZiAoZW50cnkuY29udGVudFJlY3Qud2lkdGggPCBzbWFsbGVzdEJyZWFrcG9pbnRXaWR0aCkge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoZW50cnkudGFyZ2V0LCBzaXplQXR0cmlidXRlTmFtZSwgYDwke3NtYWxsZXN0QnJlYWtwb2ludE5hbWV9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2l6ZXNTb3J0ZWRCeUJyZWFrcG9pbnQuZm9yRWFjaCgoW3NpemUsIHdpZHRoXSkgPT4ge1xuICAgICAgICBpZiAoZW50cnkuY29udGVudFJlY3Qud2lkdGggPj0gd2lkdGgpIHtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShlbnRyeS50YXJnZXQsIHNpemVBdHRyaWJ1dGVOYW1lLCBzaXplKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG4iXX0=
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Rlc2lnbnN5c3RlbS9zcmMvbGliL2NvbXBvbmVudHMvY2FyZC9jYXJkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixXQUFXLEVBQ1gsS0FBSyxFQUdMLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQVExRixNQUFNLE9BQU8sYUFBYTtJQXdDeEIsWUFDVSxVQUFzQixFQUN0QixxQkFBNEMsRUFDNUMsUUFBbUI7UUFGbkIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QiwwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBQzVDLGFBQVEsR0FBUixRQUFRLENBQVc7UUE1QnJCLDRCQUF1QixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztZQUMzRCxLQUFLLEVBQUUsR0FBRztZQUNWLE1BQU0sRUFBRSxHQUFHO1lBQ1gsS0FBSyxFQUFFLElBQUk7U0FDWixDQUFDLENBQUM7UUFhSCxTQUFJLEdBQVksS0FBSyxDQUFDO1FBRXRCLGdCQUFXLEdBQVksS0FBSyxDQUFDO0lBVTFCLENBQUM7SUFyQ0osSUFDSSxrQkFBa0IsQ0FBQyxLQUFhO1FBQ2xDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxRQUFRLEtBQUssSUFBSSxDQUFDO0lBQzVDLENBQUM7SUFXRCxJQUNJLEtBQUssQ0FBQyxLQUFpQztRQUN6QyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtZQUM3QixPQUFPLENBQUMsS0FBSyxDQUNYLGdIQUFnSCxDQUNqSCxDQUFDO1NBQ0g7UUFDRCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFNRCxJQUFhLElBQUksQ0FBQyxLQUE2QjtRQUM3QyxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssS0FBSyxNQUFNLENBQUM7UUFDN0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLEtBQUssYUFBYSxDQUFDO0lBQzdDLENBQUM7SUFRRCxRQUFRO1FBQ04sSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDM0YsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRU8scUJBQXFCLENBQUMsS0FBaUM7UUFDN0QsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRU8sd0JBQXdCLENBQUMsQ0FBbUIsRUFBRSxDQUFtQjtRQUN2RSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRU8sWUFBWSxDQUFDLEtBQTBCO1FBQzdDLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDO1FBQ2pDLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25FLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsdUJBQXVCLEVBQUU7WUFDckQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxJQUFJLHNCQUFzQixFQUFFLENBQUMsQ0FBQztTQUMzRjthQUFNO1lBQ0wsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7Z0JBQ3JELElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFLLElBQUksS0FBSyxFQUFFO29CQUNwQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLGlCQUFpQixFQUFFLElBQUksQ0FBQyxDQUFDO2lCQUNuRTtZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDOzs7WUFoRkYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxZQUFZO2dCQUN0QixpT0FBb0M7O2FBRXJDOzs7O1lBZkMsVUFBVTtZQVFILHFCQUFxQjtZQUg1QixTQUFTOzs7b0JBWVIsS0FBSzt1QkFDTCxLQUFLOytCQUVMLFdBQVcsU0FBQyxxQ0FBcUM7aUNBR2pELEtBQUs7eUJBS0wsS0FBSztvQkFTTCxLQUFLO21CQVVMLFdBQVcsU0FBQyxZQUFZOzBCQUV4QixXQUFXLFNBQUMsbUJBQW1CO21CQUUvQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBSZW5kZXJlcjIsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBSZXNpemVPYnNlcnZlclNlcnZpY2UgfSBmcm9tICcuLi9zaGFyZWQvcmVzaXplLW9ic2VydmVyL3Jlc2l6ZS1vYnNlcnZlci5zZXJ2aWNlJztcbmltcG9ydCB7IFJlc2l6ZU9ic2VydmVyRW50cnkgfSBmcm9tICcuLi9zaGFyZWQvcmVzaXplLW9ic2VydmVyL3R5cGVzL3Jlc2l6ZS1vYnNlcnZlci1lbnRyeSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2tpcmJ5LWNhcmQnLFxuICB0ZW1wbGF0ZVVybDogJy4vY2FyZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NhcmQuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgQ2FyZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgdGl0bGU6IHN0cmluZztcbiAgQElucHV0KCkgc3VidGl0bGU6IHN0cmluZztcblxuICBASG9zdEJpbmRpbmcoJ3N0eWxlLi0ta2lyYnktY2FyZC1iYWNrZ3JvdW5kLWltYWdlJylcbiAgX2JhY2tncm91bmRJbWFnZTogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBiYWNrZ3JvdW5kSW1hZ2VVcmwodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2JhY2tncm91bmRJbWFnZSA9IGB1cmwoJyR7dmFsdWV9JylgO1xuICB9XG5cbiAgQElucHV0KClcbiAgaGFzUGFkZGluZzogYm9vbGVhbjtcblxuICBwcml2YXRlIHNpemVzU29ydGVkQnlCcmVha3BvaW50ID0gdGhpcy5zb3J0U2l6ZXNCeUJyZWFrcG9pbnQoe1xuICAgIHNtYWxsOiAzNjAsXG4gICAgbWVkaXVtOiA3MjAsXG4gICAgbGFyZ2U6IDEwMjQsXG4gIH0pO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBzaXplcyh2YWx1ZTogeyBbc2l6ZTogc3RyaW5nXTogbnVtYmVyIH0pIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgJ1NpemVzIHByb3BlcnR5IGNhbm5vdCBiZSBhIHN0cmluZy4gUGxlYXNlIGVuc3VyZSB0aGUgc2l6ZSBwcm9wZXJ0eSBpcyBib3VuZCBhcyBhbiBleHByZXNzaW9uOlxcbltzaXplc109XCJ7Li4ufVwiJ1xuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5zaXplc1NvcnRlZEJ5QnJlYWtwb2ludCA9IHRoaXMuc29ydFNpemVzQnlCcmVha3BvaW50KHZhbHVlKTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZmxhdCcpXG4gIGZsYXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5oaWdobGlnaHRlZCcpXG4gIGhpZ2hsaWdodGVkOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNldCBtb2RlKHZhbHVlOiAnZmxhdCcgfCAnaGlnaGxpZ2h0ZWQnKSB7XG4gICAgdGhpcy5mbGF0ID0gdmFsdWUgPT09ICdmbGF0JztcbiAgICB0aGlzLmhpZ2hsaWdodGVkID0gdmFsdWUgPT09ICdoaWdobGlnaHRlZCc7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSByZXNpemVPYnNlcnZlclNlcnZpY2U6IFJlc2l6ZU9ic2VydmVyU2VydmljZSxcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjJcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXJTZXJ2aWNlLm9ic2VydmUodGhpcy5lbGVtZW50UmVmLCAoZW50cnkpID0+IHRoaXMuaGFuZGxlUmVzaXplKGVudHJ5KSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyU2VydmljZS51bm9ic2VydmUodGhpcy5lbGVtZW50UmVmKTtcbiAgfVxuXG4gIHByaXZhdGUgc29ydFNpemVzQnlCcmVha3BvaW50KHNpemVzOiB7IFtzaXplOiBzdHJpbmddOiBudW1iZXIgfSk6IFtzdHJpbmcsIG51bWJlcl1bXSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHNpemVzKS5zb3J0KHRoaXMuY29tcGFyZVNpemVzQnlCcmVha3BvaW50KTtcbiAgfVxuXG4gIHByaXZhdGUgY29tcGFyZVNpemVzQnlCcmVha3BvaW50KGE6IFtzdHJpbmcsIG51bWJlcl0sIGI6IFtzdHJpbmcsIG51bWJlcl0pOiBudW1iZXIge1xuICAgIHJldHVybiBhWzFdID4gYlsxXSA/IDEgOiBiWzFdID4gYVsxXSA/IC0xIDogMDtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlUmVzaXplKGVudHJ5OiBSZXNpemVPYnNlcnZlckVudHJ5KSB7XG4gICAgY29uc3Qgc2l6ZUF0dHJpYnV0ZU5hbWUgPSAnc2l6ZSc7XG4gICAgY29uc3Qgc21hbGxlc3RCcmVha3BvaW50TmFtZSA9IHRoaXMuc2l6ZXNTb3J0ZWRCeUJyZWFrcG9pbnRbMF1bMF07XG4gICAgY29uc3Qgc21hbGxlc3RCcmVha3BvaW50V2lkdGggPSB0aGlzLnNpemVzU29ydGVkQnlCcmVha3BvaW50WzBdWzFdO1xuICAgIGlmIChlbnRyeS5jb250ZW50UmVjdC53aWR0aCA8IHNtYWxsZXN0QnJlYWtwb2ludFdpZHRoKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShlbnRyeS50YXJnZXQsIHNpemVBdHRyaWJ1dGVOYW1lLCBgPCR7c21hbGxlc3RCcmVha3BvaW50TmFtZX1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaXplc1NvcnRlZEJ5QnJlYWtwb2ludC5mb3JFYWNoKChbc2l6ZSwgd2lkdGhdKSA9PiB7XG4gICAgICAgIGlmIChlbnRyeS5jb250ZW50UmVjdC53aWR0aCA+PSB3aWR0aCkge1xuICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKGVudHJ5LnRhcmdldCwgc2l6ZUF0dHJpYnV0ZU5hbWUsIHNpemUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -1 +1 @@
1
- [{"__symbolic":"module","version":4,"metadata":{"CardComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":13,"character":1},"arguments":[{"selector":"kirby-card","template":"<ng-content select=\"kirby-card-header\"></ng-content>\n<div class=\"content-wrapper\" [class.padding]=\"hasPadding\">\n <ng-content></ng-content>\n</div>\n<ng-content select=\"kirby-card-footer\"></ng-content>\n","styles":[":host{--kirby-card-main-background-color:var(--kirby-white);--kirby-card-main-color:var(--kirby-white-contrast);--kirby-card-footer-background-color:var(--kirby-white);--kirby-card-footer-color:var(--kirby-white-contrast);border-radius:16px;box-shadow:0 5px 10px -10px rgba(28,28,28,.3),0 0 5px 0 rgba(28,28,28,.08);color:var(--kirby-card-main-color);background-color:var(--kirby-card-main-background-color);display:flex;flex-direction:column;justify-content:space-between;overflow:hidden;position:relative;z-index:1;width:var(--kirby-card-width,auto)}:host .content-wrapper.padding{padding:16px}:host.highlighted{box-shadow:0 10px 15px -10px rgba(28,28,28,.3),0 0 5px 0 rgba(28,28,28,.08)}:host.flat{box-shadow:none}:host[role=button]{cursor:pointer;outline-offset:2px}:host-context(.swiper-slide-active){box-shadow:0 10px 15px -10px rgba(28,28,28,.3),0 0 5px 0 rgba(28,28,28,.08);transition:all .5s;transform:translateY(-3px)}:host(.primary){--kirby-card-main-background-color:var(--kirby-primary);--kirby-card-main-color:var(--kirby-primary-contrast)}:host(.secondary){--kirby-card-main-background-color:var(--kirby-secondary);--kirby-card-main-color:var(--kirby-secondary-contrast)}:host(.tertiary){--kirby-card-main-background-color:var(--kirby-tertiary);--kirby-card-main-color:var(--kirby-tertiary-contrast)}:host(.success){--kirby-card-main-background-color:var(--kirby-success);--kirby-card-main-color:var(--kirby-success-contrast)}:host(.warning){--kirby-card-main-background-color:var(--kirby-warning);--kirby-card-main-color:var(--kirby-warning-contrast)}:host(.danger){--kirby-card-main-background-color:var(--kirby-danger);--kirby-card-main-color:var(--kirby-danger-contrast)}:host(.light){--kirby-card-main-background-color:var(--kirby-light);--kirby-card-main-color:var(--kirby-light-contrast)}:host(.medium){--kirby-card-main-background-color:var(--kirby-medium);--kirby-card-main-color:var(--kirby-medium-contrast)}:host(.dark){--kirby-card-main-background-color:var(--kirby-dark);--kirby-card-main-color:var(--kirby-dark-contrast)}"]}]}],"members":{"title":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":19,"character":3}}]}],"subtitle":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":20,"character":3}}]}],"hasPadding":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":22,"character":3}}]}],"sizes":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":31,"character":3}}]}],"flat":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostBinding","line":41,"character":3},"arguments":["class.flat"]}]}],"highlighted":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostBinding","line":43,"character":3},"arguments":["class.highlighted"]}]}],"mode":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":45,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":51,"character":24},{"__symbolic":"reference","module":"../shared/resize-observer/resize-observer.service","name":"ResizeObserverService","line":52,"character":35},{"__symbolic":"reference","module":"@angular/core","name":"Renderer2","line":53,"character":22}]}],"ngOnInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"sortSizesByBreakpoint":[{"__symbolic":"method"}],"compareSizesByBreakpoint":[{"__symbolic":"method"}],"handleResize":[{"__symbolic":"method"}]}}}}]
1
+ [{"__symbolic":"module","version":4,"metadata":{"CardComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":13,"character":1},"arguments":[{"selector":"kirby-card","template":"<ng-content select=\"kirby-card-header\"></ng-content>\n<div class=\"content-wrapper\" [class.padding]=\"hasPadding\">\n <ng-content></ng-content>\n</div>\n<ng-content select=\"kirby-card-footer\"></ng-content>\n","styles":[":host{--kirby-card-main-background-color:var(--kirby-white);--kirby-card-main-color:var(--kirby-white-contrast);--kirby-card-footer-background-color:var(--kirby-white);--kirby-card-footer-color:var(--kirby-white-contrast);border-radius:16px;box-shadow:0 5px 10px -10px rgba(28,28,28,.3),0 0 5px 0 rgba(28,28,28,.08);color:var(--kirby-card-main-color);background-color:var(--kirby-card-main-background-color);background-image:var(--kirby-card-background-image);background-repeat:var(--kirby-card-background-repeat,no-repeat);background-position:var(--kirby-card-background-position,center);background-size:var(--kirby-card-background-size,cover);display:flex;flex-direction:column;justify-content:space-between;overflow:hidden;position:relative;z-index:1;width:var(--kirby-card-width,auto)}:host .content-wrapper.padding{padding:16px}:host.highlighted{box-shadow:0 10px 15px -10px rgba(28,28,28,.3),0 0 5px 0 rgba(28,28,28,.08)}:host.flat{box-shadow:none}:host[role=button]{cursor:pointer;outline-offset:2px}:host-context(.swiper-slide-active){box-shadow:0 10px 15px -10px rgba(28,28,28,.3),0 0 5px 0 rgba(28,28,28,.08);transition:all .5s;transform:translateY(-3px)}:host(.primary){--kirby-card-main-background-color:var(--kirby-primary);--kirby-card-main-color:var(--kirby-primary-contrast)}:host(.secondary){--kirby-card-main-background-color:var(--kirby-secondary);--kirby-card-main-color:var(--kirby-secondary-contrast)}:host(.tertiary){--kirby-card-main-background-color:var(--kirby-tertiary);--kirby-card-main-color:var(--kirby-tertiary-contrast)}:host(.success){--kirby-card-main-background-color:var(--kirby-success);--kirby-card-main-color:var(--kirby-success-contrast)}:host(.warning){--kirby-card-main-background-color:var(--kirby-warning);--kirby-card-main-color:var(--kirby-warning-contrast)}:host(.danger){--kirby-card-main-background-color:var(--kirby-danger);--kirby-card-main-color:var(--kirby-danger-contrast)}:host(.light){--kirby-card-main-background-color:var(--kirby-light);--kirby-card-main-color:var(--kirby-light-contrast)}:host(.medium){--kirby-card-main-background-color:var(--kirby-medium);--kirby-card-main-color:var(--kirby-medium-contrast)}:host(.dark){--kirby-card-main-background-color:var(--kirby-dark);--kirby-card-main-color:var(--kirby-dark-contrast)}"]}]}],"members":{"title":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":19,"character":3}}]}],"subtitle":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":20,"character":3}}]}],"_backgroundImage":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostBinding","line":22,"character":3},"arguments":["style.--kirby-card-background-image"]}]}],"backgroundImageUrl":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":25,"character":3}}]}],"hasPadding":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":30,"character":3}}]}],"sizes":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":39,"character":3}}]}],"flat":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostBinding","line":49,"character":3},"arguments":["class.flat"]}]}],"highlighted":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostBinding","line":51,"character":3},"arguments":["class.highlighted"]}]}],"mode":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":53,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":59,"character":24},{"__symbolic":"reference","module":"../shared/resize-observer/resize-observer.service","name":"ResizeObserverService","line":60,"character":35},{"__symbolic":"reference","module":"@angular/core","name":"Renderer2","line":61,"character":22}]}],"ngOnInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"sortSizesByBreakpoint":[{"__symbolic":"method"}],"compareSizesByBreakpoint":[{"__symbolic":"method"}],"handleResize":[{"__symbolic":"method"}]}}}}]
@@ -193,12 +193,28 @@ export class ChartJSService {
193
193
  createConfigurationObject(type, datasets, options, labels) {
194
194
  const typeConfig = this.chartConfigService.getTypeConfig(type);
195
195
  const labelsToApply = (() => {
196
- if ((labels === null || labels === void 0 ? void 0 : labels.length) > 0)
197
- return labels;
198
- else if (type === 'stock')
196
+ var _a, _b;
197
+ if (type === 'stock') {
198
+ /*
199
+ The time scale will auto generate labels based on data.
200
+ It should be possible to pass an empty array to get the default
201
+ behaviour of chart.js when using stock chart.
202
+
203
+ TODO: Simplify to always pass labels, if given, to chart.js.
204
+ Would be a breaking change. See issue:
205
+ https://github.com/kirbydesign/designsystem/issues/2085
206
+ */
207
+ const shouldUseTimescaleLabels = (labels === null || labels === void 0 ? void 0 : labels.length) === 0 && ((_b = (_a = options === null || options === void 0 ? void 0 : options.scales) === null || _a === void 0 ? void 0 : _a.x) === null || _b === void 0 ? void 0 : _b.type) === 'time';
208
+ if (shouldUseTimescaleLabels)
209
+ return labels;
199
210
  return this.getDefaultStockLabels(datasets, this.locale);
200
- else
201
- return this.createBlankLabels(datasets); // ChartJS requires labels
211
+ }
212
+ else if ((labels === null || labels === void 0 ? void 0 : labels.length) > 0) {
213
+ return labels;
214
+ }
215
+ else {
216
+ return this.createBlankLabels(datasets);
217
+ }
202
218
  })();
203
219
  return mergeDeepAll(typeConfig, {
204
220
  data: {
@@ -295,4 +311,4 @@ ChartJSService.decorators = [
295
311
  ChartJSService.ctorParameters = () => [
296
312
  { type: ChartConfigService }
297
313
  ];
298
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQtanMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvZGVzaWduc3lzdGVtL3NyYy9saWIvY29tcG9uZW50cy9jaGFydC9jaGFydC1qcy9jaGFydC1qcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHdkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVsQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQU1MLGFBQWEsR0FDZCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRXJFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUU5QyxNQUFNLG9CQUFvQixHQUFHLE9BQU8sQ0FBQztBQUdyQyxNQUFNLE9BQU8sY0FBYztJQU96QixZQUFvQixrQkFBc0M7UUFBdEMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtJQUFHLENBQUM7SUFFdkQsV0FBVyxDQUFDLElBU2xCO1FBQ0MsTUFBTSxFQUNKLGFBQWEsRUFDYixJQUFJLEVBQ0osSUFBSSxFQUNKLE1BQU0sRUFDTixhQUFhLEVBQ2IsV0FBVyxFQUNYLGdCQUFnQixFQUNoQixtQkFBbUIsR0FDcEIsR0FBRyxJQUFJLENBQUM7UUFFVCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLElBQUksSUFBSSxDQUFDO1FBQ2pELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxtQkFBbUIsSUFBSSxJQUFJLENBQUM7UUFDdkQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFBLGdCQUFnQixhQUFoQixnQkFBZ0IsdUJBQWhCLGdCQUFnQixD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QUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFO2dCQUM5RCxLQUFLLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN2QixPQUFPLEdBQUcsS0FBSyxDQUFDO2FBQ2pCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQzVCLENBQUM7OztZQTdYRixVQUFVOzs7O1lBTkYsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWxlbWVudFJlZiwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZlRWxlbWVudCwgQ2hhcnRDb25maWd1cmF0aW9uLCBDaGFydE9wdGlvbnMsIFNjYXR0ZXJEYXRhUG9pbnQgfSBmcm9tICdjaGFydC5qcyc7XG5pbXBvcnQgeyBBbm5vdGF0aW9uT3B0aW9ucyB9IGZyb20gJ2NoYXJ0anMtcGx1Z2luLWFubm90YXRpb24nO1xuaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSAnZGF0ZS1mbnMnO1xuXG5pbXBvcnQgeyBtZXJnZURlZXBBbGwgfSBmcm9tICcuLi8uLi8uLi9oZWxwZXJzL21lcmdlLWRlZXAnO1xuaW1wb3J0IHtcbiAgQ2hhcnREYXRhTGFiZWxPcHRpb25zLFxuICBDaGFydERhdGFzZXQsXG4gIENoYXJ0SGlnaGxpZ2h0ZWRFbGVtZW50cyxcbiAgQ2hhcnRMb2NhbGUsXG4gIENoYXJ0VHlwZSxcbiAgaXNOdW1iZXJBcnJheSxcbn0gZnJvbSAnLi4vY2hhcnQudHlwZXMnO1xuaW1wb3J0IHsgQ2hhcnRDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vY29uZmlncy9jaGFydC1jb25maWcuc2VydmljZSc7XG5cbmltcG9ydCB7IENoYXJ0IH0gZnJvbSAnLi9jb25maWd1cmVkLWNoYXJ0LWpzJztcblxuY29uc3QgQ0hBUlRfTE9DQUxFX0RFRkFVTFQgPSAnZW4tVVMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ2hhcnRKU1NlcnZpY2Uge1xuICBwcml2YXRlIGNoYXJ0OiBDaGFydDtcbiAgcHJpdmF0ZSBkYXRhTGFiZWxPcHRpb25zOiBDaGFydERhdGFMYWJlbE9wdGlvbnM7XG4gIHByaXZhdGUgaGlnaGxpZ2h0ZWRFbGVtZW50czogQ2hhcnRIaWdobGlnaHRlZEVsZW1lbnRzO1xuICBwcml2YXRlIGNoYXJ0VHlwZTogQ2hhcnRUeXBlO1xuICBwcml2YXRlIGxvY2FsZTogQ2hhcnRMb2NhbGU7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjaGFydENvbmZpZ1NlcnZpY2U6IENoYXJ0Q29uZmlnU2VydmljZSkge31cblxuICBwdWJsaWMgcmVuZGVyQ2hhcnQoYXJnczoge1xuICAgIHRhcmdldEVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTENhbnZhc0VsZW1lbnQ+O1xuICAgIHR5cGU6IENoYXJ0VHlwZTtcbiAgICBkYXRhOiBDaGFydERhdGFzZXRbXSB8IG51bWJlcltdO1xuICAgIGxhYmVscz86IHN0cmluZ1tdIHwgc3RyaW5nW11bXTtcbiAgICBjdXN0b21PcHRpb25zPzogQ2hhcnRPcHRpb25zO1xuICAgIGFubm90YXRpb25zPzogQW5ub3RhdGlvbk9wdGlvbnNbXTtcbiAgICBkYXRhTGFiZWxPcHRpb25zPzogQ2hhcnREYXRhTGFiZWxPcHRpb25zO1xuICAgIGhpZ2hsaWdodGVkRWxlbWVudHM/OiBDaGFydEhpZ2hsaWdodGVkRWxlbWVudHM7XG4gIH0pOiB2b2lkIHtcbiAgICBjb25zdCB7XG4gICAgICB0YXJnZXRFbGVtZW50LFxuICAgICAgdHlwZSxcbiAgICAgIGRhdGEsXG4gICAgICBsYWJlbHMsXG4gICAgICBjdXN0b21PcHRpb25zLFxuICAgICAgYW5ub3RhdGlvbnMsXG4gICAgICBkYXRhTGFiZWxPcHRpb25zLFxuICAgICAgaGlnaGxpZ2h0ZWRFbGVtZW50cyxcbiAgICB9ID0gYXJncztcblxuICAgIHRoaXMuZGF0YUxhYmVsT3B0aW9ucyA9IGRhdGFMYWJlbE9wdGlvbnMgfHwgbnVsbDtcbiAgICB0aGlzLmhpZ2hsaWdodGVkRWxlbWVudHMgPSBoaWdobGlnaHRlZEVsZW1lbnRzIHx8IG51bGw7XG4gICAgdGhpcy5jaGFydFR5cGUgPSB0eXBlO1xuICAgIHRoaXMubG9jYWxlID0gZGF0YUxhYmVsT3B0aW9ucz8ubG9jYWxlIHx8IENIQVJUX0xPQ0FMRV9ERUZBVUxUO1xuXG4gICAgY29uc3QgZGF0YXNldHMgPSB0aGlzLmNyZWF0ZURhdGFzZXRzKGRhdGEpO1xuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuY3JlYXRlT3B0aW9uc09iamVjdCh7XG4gICAgICBjdXN0b21PcHRpb25zLFxuICAgICAgYW5ub3RhdGlvbnMsXG4gICAgICBkYXRhTGFiZWxPcHRpb25zLFxuICAgIH0pO1xuICAgIGxldCBjb25maWcgPSB0aGlzLmNyZWF0ZUNvbmZpZ3VyYXRpb25PYmplY3QodHlwZSwgZGF0YXNldHMsIG9wdGlvbnMsIGxhYmVscyk7XG5cbiAgICB0aGlzLmluaXRpYWxpemVOZXdDaGFydCh0YXJnZXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIGNvbmZpZyk7XG4gIH1cblxuICBwdWJsaWMgcmVkcmF3Q2hhcnQoKSB7XG4gICAgdGhpcy5jaGFydC51cGRhdGUoKTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVEYXRhKGRhdGE6IENoYXJ0RGF0YXNldFtdIHwgbnVtYmVyW10pOiB2b2lkIHtcbiAgICBjb25zdCBkYXRhc2V0cyA9IHRoaXMuY3JlYXRlRGF0YXNldHMoZGF0YSk7XG5cbiAgICB0aGlzLmNoYXJ0LmRhdGEuZGF0YXNldHMgPSBkYXRhc2V0cztcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVMYWJlbHMobGFiZWxzOiBzdHJpbmdbXSB8IHN0cmluZ1tdW10pIHtcbiAgICB0aGlzLmNoYXJ0LmRhdGEubGFiZWxzID0gbGFiZWxzO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVR5cGUodHlwZTogQ2hhcnRUeXBlLCBjdXN0b21PcHRpb25zPzogQ2hhcnRPcHRpb25zKSB7XG4gICAgaWYgKHR5cGUgPT09ICdiYXInIHx8IHR5cGUgPT09ICdjb2x1bW4nKSB7XG4gICAgICAvKiBpbmRleEF4aXMgZG9lcyBub3QgdXBkYXRlIHByZWRpY3RhYmx5OyB1cGRhdGUgYnkgcmVwbGFjaW5nIFxuICAgICAgICAgdGhlIGNoYXJ0IGVudGlyZWx5IGluc3RlYWQgKi9cbiAgICAgIHRoaXMuZGVzdHJ1Y3RpdmVseVVwZGF0ZVR5cGUodHlwZSwgY3VzdG9tT3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubm9uRGVzdHJ1Y3RpdmVseVVwZGF0ZVR5cGUodHlwZSwgY3VzdG9tT3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldERhdGFMYWJlbE9wdGlvbnMoZGF0YUxhYmVsT3B0aW9uczogQ2hhcnREYXRhTGFiZWxPcHRpb25zKSB7XG4gICAgdGhpcy5kYXRhTGFiZWxPcHRpb25zID0gZGF0YUxhYmVsT3B0aW9ucztcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVPcHRpb25zKGN1c3RvbU9wdGlvbnM6IENoYXJ0T3B0aW9ucywgdHlwZTogQ2hhcnRUeXBlKSB7XG4gICAgY29uc3QgYW5ub3RhdGlvbnMgPSB0aGlzLmdldEV4aXN0aW5nQ2hhcnRBbm5vdGF0aW9ucygpO1xuICAgIHRoaXMuY2hhcnRUeXBlID0gdHlwZTtcbiAgICB0aGlzLmNoYXJ0Lm9wdGlvbnMgPSB0aGlzLmNyZWF0ZU9wdGlvbnNPYmplY3QoeyBjdXN0b21PcHRpb25zLCBhbm5vdGF0aW9ucyB9KTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVBbm5vdGF0aW9ucyhhbm5vdGF0aW9uczogQW5ub3RhdGlvbk9wdGlvbnNbXSkge1xuICAgIGNvbnN0IGFubm90YXRpb25zV2l0aERlZmF1bHRzID0gdGhpcy5hcHBseURlZmF1bHRzVG9Bbm5vdGF0aW9ucyhhbm5vdGF0aW9ucyk7XG4gICAgdGhpcy5jaGFydC5vcHRpb25zLnBsdWdpbnMuYW5ub3RhdGlvbi5hbm5vdGF0aW9ucyA9IGFubm90YXRpb25zV2l0aERlZmF1bHRzO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZUhpZ2hsaWdodGVkRWxlbWVudHMoaGlnaGxpZ2h0ZWRFbGVtZW50cz86IENoYXJ0SGlnaGxpZ2h0ZWRFbGVtZW50cykge1xuICAgIHRoaXMuaGlnaGxpZ2h0ZWRFbGVtZW50cyA9IGhpZ2hsaWdodGVkRWxlbWVudHM7XG4gICAgY29uc3Qgb2xkRGF0YXNldHMgPSB0aGlzLmNoYXJ0LmRhdGEuZGF0YXNldHMgYXMgQ2hhcnREYXRhc2V0W107XG5cbiAgICAvLyBDbGVhciBvbGQgZGF0YXNldHMgb2YgaGlnaGxpZ2h0ZWQgZWxlbWVudHNcbiAgICBvbGREYXRhc2V0cy5tYXAoKGRhdGFzZXQpID0+IHtcbiAgICAgIGlmIChkYXRhc2V0Py5raXJieU9wdGlvbnM/LmhpZ2hsaWdodGVkRWxlbWVudHMpIHtcbiAgICAgICAgZGVsZXRlIGRhdGFzZXQua2lyYnlPcHRpb25zLmhpZ2hsaWdodGVkRWxlbWVudHM7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmNoYXJ0LmRhdGEuZGF0YXNldHMgPSB0aGlzLmNyZWF0ZURhdGFzZXRzKG9sZERhdGFzZXRzKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RXhpc3RpbmdDaGFydEFubm90YXRpb25zKCk6IEFubm90YXRpb25PcHRpb25zW10ge1xuICAgIGNvbnN0IGFubm90YXRpb25zID0gdGhpcy5jaGFydC5vcHRpb25zLnBsdWdpbnM/LmFubm90YXRpb24/LmFubm90YXRpb25zO1xuICAgIC8qIEluIGJyb3dzZXIgY2hhcnQuanMgbWlnaHQgcmV0dXJuIGFubm90YXRpb25zIGFzIGEgUHJveHkgb2JqZWN0OyBmb3JjZSBpdCB0byBiZSBhbiBhcnJheS5cbiAgICAgICBFYWNoIGFubm90YXRpb25PcHRpb24gaW4gdGhlIHJlc3VsdGluZyBhcnJheSAgd2lsbCBhbHNvIGJlIGEgUHJveHkgb2JqZWN0LiBcbiAgICAgICBCdXQgaW50ZXJuYWxseSBjaGFydC5qcyB3aWxsIGp1c3Qgd29yayB3aXRoIHRoZW0gYXMgbm9ybWFsIHZhbHVlcyAqL1xuICAgIGlmIChhbm5vdGF0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmtleXMoYW5ub3RhdGlvbnMpLm1hcCgoa2V5KSA9PiBhbm5vdGF0aW9uc1trZXldKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZGVzdHJ1Y3RpdmVseVVwZGF0ZVR5cGUodHlwZTogQ2hhcnRUeXBlLCBjdXN0b21PcHRpb25zPzogQ2hhcnRPcHRpb25zKSB7XG4gICAgY29uc3QgZGF0YXNldHMgPSB0aGlzLmNoYXJ0LmRhdGEuZGF0YXNldHMgYXMgQ2hhcnREYXRhc2V0W107XG4gICAgY29uc3QgbGFiZWxzID0gdGhpcy5jaGFydC5kYXRhLmxhYmVscztcbiAgICBjb25zdCBhbm5vdGF0aW9ucyA9IHRoaXMuZ2V0RXhpc3RpbmdDaGFydEFubm90YXRpb25zKCk7XG5cbiAgICB0aGlzLmNoYXJ0VHlwZSA9IHR5cGU7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuY3JlYXRlT3B0aW9uc09iamVjdCh7IGN1c3RvbU9wdGlvbnMsIGFubm90YXRpb25zIH0pO1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY3JlYXRlQ29uZmlndXJhdGlvbk9iamVjdCh0eXBlLCBkYXRhc2V0cywgb3B0aW9ucywgbGFiZWxzKTtcbiAgICBjb25zdCBjYW52YXNFbGVtZW50ID0gdGhpcy5jaGFydC5jYW52YXM7XG5cbiAgICB0aGlzLmNoYXJ0LmRlc3Ryb3koKTtcbiAgICB0aGlzLmluaXRpYWxpemVOZXdDaGFydChjYW52YXNFbGVtZW50LCBjb25maWcpO1xuICB9XG5cbiAgcHJpdmF0ZSBub25EZXN0cnVjdGl2ZWx5VXBkYXRlVHlwZShjaGFydFR5cGU6IENoYXJ0VHlwZSwgY3VzdG9tT3B0aW9ucz86IENoYXJ0T3B0aW9ucykge1xuICAgIGNvbnN0IGFubm90YXRpb25zID0gdGhpcy5nZXRFeGlzdGluZ0NoYXJ0QW5ub3RhdGlvbnMoKTtcbiAgICB0aGlzLmNoYXJ0VHlwZSA9IGNoYXJ0VHlwZTtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5jcmVhdGVPcHRpb25zT2JqZWN0KHtcbiAgICAgIGN1c3RvbU9wdGlvbnMsXG4gICAgICBhbm5vdGF0aW9ucyxcbiAgICB9KTtcblxuICAgIHRoaXMuY2hhcnQub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5jaGFydC5jb25maWcudHlwZSA9IHRoaXMuY2hhcnRDb25maWdTZXJ2aWNlLmNoYXJ0VHlwZVRvQ2hhcnRKU1R5cGUoY2hhcnRUeXBlKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZU5ld0NoYXJ0KGNhbnZhc0VsZW1lbnQ6IEhUTUxDYW52YXNFbGVtZW50LCBjb25maWc6IENoYXJ0Q29uZmlndXJhdGlvbikge1xuICAgIHRoaXMuY2hhcnQgPSBuZXcgQ2hhcnQoY2FudmFzRWxlbWVudCwgY29uZmlnKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQmxhbmtMYWJlbHMoZGF0YXNldHM6IENoYXJ0RGF0YXNldFtdKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGxhcmdlc3REYXRhc2V0ID0gZGF0YXNldHMucmVkdWNlKChwcmV2aW91c0RhdGFzZXQsIGN1cnJlbnREYXRhc2V0KSA9PlxuICAgICAgcHJldmlvdXNEYXRhc2V0LmRhdGEubGVuZ3RoID4gY3VycmVudERhdGFzZXQuZGF0YS5sZW5ndGggPyBwcmV2aW91c0RhdGFzZXQgOiBjdXJyZW50RGF0YXNldFxuICAgICk7XG4gICAgcmV0dXJuIEFycmF5KGxhcmdlc3REYXRhc2V0LmRhdGEubGVuZ3RoKS5maWxsKCcnKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlEZWZhdWx0c1RvQW5ub3RhdGlvbnMoYW5ub3RhdGlvbnM6IEFubm90YXRpb25PcHRpb25zW10pIHtcbiAgICByZXR1cm4gYW5ub3RhdGlvbnMubWFwKChhbm5vdGF0aW9uKSA9PiB7XG4gICAgICBjb25zdCBhbm5vdGF0aW9uVHlwZURlZmF1bHRzID0gdGhpcy5jaGFydENvbmZpZ1NlcnZpY2UuZ2V0QW5ub3RhdGlvbkRlZmF1bHRzKGFubm90YXRpb24udHlwZSk7XG4gICAgICByZXR1cm4gbWVyZ2VEZWVwQWxsKGFubm90YXRpb25UeXBlRGVmYXVsdHMsIGFubm90YXRpb24pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVBbm5vdGF0aW9uUGx1Z2luT3B0aW9uc09iamVjdChhbm5vdGF0aW9uczogQW5ub3RhdGlvbk9wdGlvbnNbXSkge1xuICAgIGNvbnN0IGFubm90YXRpb25zV2l0aERlZmF1bHRzID0gdGhpcy5hcHBseURlZmF1bHRzVG9Bbm5vdGF0aW9ucyhhbm5vdGF0aW9ucyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBsdWdpbnM6IHtcbiAgICAgICAgYW5ub3RhdGlvbjoge1xuICAgICAgICAgIGFubm90YXRpb25zOiBhbm5vdGF0aW9uc1dpdGhEZWZhdWx0cyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlJbnRlcmFjdGlvbkZ1bmN0aW9uc0V4dGVuc2lvbnMob3B0aW9uczogQ2hhcnRPcHRpb25zKTogQ2hhcnRPcHRpb25zIHtcbiAgICBjb25zdCBpbnRlcmFjdGlvbkZ1bmN0aW9uc0V4dGVuc2lvbnMgPSB0aGlzLmNoYXJ0Q29uZmlnU2VydmljZS5nZXRJbnRlcmFjdGlvbkZ1bmN0aW9uc0V4dGVuc2lvbnMoKTtcbiAgICBPYmplY3QuZW50cmllcyhpbnRlcmFjdGlvbkZ1bmN0aW9uc0V4dGVuc2lvbnMpLmZvckVhY2goKFtrZXksIF9dKSA9PiB7XG4gICAgICBjb25zdCBjYWxsYmFjayA9IG9wdGlvbnNba2V5XTtcbiAgICAgIG9wdGlvbnNba2V5XSA9IChlOiBFdmVudCwgYTogQWN0aXZlRWxlbWVudFtdLCBjOiBDaGFydCkgPT4ge1xuICAgICAgICBpbnRlcmFjdGlvbkZ1bmN0aW9uc0V4dGVuc2lvbnNba2V5XShlLCBhLCBjLCBjYWxsYmFjayk7XG4gICAgICB9O1xuICAgIH0pO1xuICAgIHJldHVybiBvcHRpb25zO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVTdG9ja09wdGlvbnNPYmplY3QoZGF0YUxhYmVsT3B0aW9uczogQ2hhcnREYXRhTGFiZWxPcHRpb25zKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxvY2FsZTogdGhpcy5sb2NhbGUsXG4gICAgICBwbHVnaW5zOiB7XG4gICAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgICBjYWxsYmFja3M6IHtcbiAgICAgICAgICAgIHRpdGxlOiAodG9vbHRpcEl0ZW1zKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGRhdGUgPSB0b0RhdGUoKHRvb2x0aXBJdGVtc1swXT8ucmF3IGFzIGFueSk/LngpO1xuICAgICAgICAgICAgICBpZiAoZGF0ZS52YWx1ZU9mKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0ZS50b0xvY2FsZVRpbWVTdHJpbmcodGhpcy5sb2NhbGUsIHtcbiAgICAgICAgICAgICAgICAgIGRheTogJ251bWVyaWMnLFxuICAgICAgICAgICAgICAgICAgbW9udGg6ICdzaG9ydCcsXG4gICAgICAgICAgICAgICAgICBob3VyOiAnMi1kaWdpdCcsXG4gICAgICAgICAgICAgICAgICBtaW51dGU6ICcyLWRpZ2l0JyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhYmVsOiAoY29udGV4dCkgPT4ge1xuICAgICAgICAgICAgICAvLyBJdCdzIG5vdCBwb3NzaWJsZSB0byBhZGQgc3BhY2luZyBiZXR3ZWVuIGNvbG9yIGxlZ2VuZCBhbmQgdGV4dCBzbyB3ZVxuICAgICAgICAgICAgICAvLyBwcmVmaXggd2l0aCBhIHNwYWNlLlxuICAgICAgICAgICAgICByZXR1cm4gJyAnICsgY29udGV4dC5mb3JtYXR0ZWRWYWx1ZSArIChkYXRhTGFiZWxPcHRpb25zLnZhbHVlU3VmZml4IHx8ICcnKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBzY2FsZXM6IHtcbiAgICAgICAgeToge1xuICAgICAgICAgIHRpY2tzOiB7XG4gICAgICAgICAgICBjYWxsYmFjazogKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiB2YWx1ZSArIChkYXRhTGFiZWxPcHRpb25zLnZhbHVlU3VmZml4IHx8ICcnKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlT3B0aW9uc09iamVjdChhcmdzOiB7XG4gICAgY3VzdG9tT3B0aW9ucz86IENoYXJ0T3B0aW9ucztcbiAgICBhbm5vdGF0aW9ucz86IEFubm90YXRpb25PcHRpb25zW107XG4gICAgZGF0YUxhYmVsT3B0aW9ucz86IENoYXJ0RGF0YUxhYmVsT3B0aW9ucztcbiAgfSk6IENoYXJ0T3B0aW9ucyB7XG4gICAgY29uc3QgeyBjdXN0b21PcHRpb25zLCBhbm5vdGF0aW9ucywgZGF0YUxhYmVsT3B0aW9uczogY2hhcnREYXRhTGFiZWxPcHRpb25zIH0gPSBhcmdzO1xuXG4gICAgY29uc3QgdHlwZUNvbmZpZyA9IHRoaXMuY2hhcnRDb25maWdTZXJ2aWNlLmdldFR5cGVDb25maWcodGhpcy5jaGFydFR5cGUpO1xuICAgIGNvbnN0IHR5cGVDb25maWdPcHRpb25zID0gdHlwZUNvbmZpZz8ub3B0aW9ucztcbiAgICBjb25zdCBhbm5vdGF0aW9uUGx1Z2luT3B0aW9ucyA9IGFubm90YXRpb25zXG4gICAgICA/IHRoaXMuY3JlYXRlQW5ub3RhdGlvblBsdWdpbk9wdGlvbnNPYmplY3QoYW5ub3RhdGlvbnMpXG4gICAgICA6IHt9O1xuICAgIGNvbnN0IHN0b2NrT3B0aW9uczogQ2hhcnRPcHRpb25zID1cbiAgICAgIHRoaXMuY2hhcnRUeXBlID09PSAnc3RvY2snID8gdGhpcy5jcmVhdGVTdG9ja09wdGlvbnNPYmplY3QoY2hhcnREYXRhTGFiZWxPcHRpb25zKSA6IHt9O1xuXG4gICAgbGV0IG9wdGlvbnM6IENoYXJ0T3B0aW9ucyA9IG1lcmdlRGVlcEFsbChcbiAgICAgIHN0b2NrT3B0aW9ucyxcbiAgICAgIHR5cGVDb25maWdPcHRpb25zLFxuICAgICAgY3VzdG9tT3B0aW9ucyxcbiAgICAgIGFubm90YXRpb25QbHVnaW5PcHRpb25zXG4gICAgKTtcblxuICAgIHJldHVybiB0aGlzLmFwcGx5SW50ZXJhY3Rpb25GdW5jdGlvbnNFeHRlbnNpb25zKG9wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREZWZhdWx0U3RvY2tMYWJlbHMoZGF0YXNldHM6IENoYXJ0RGF0YXNldFtdLCBsb2NhbGU6IENoYXJ0TG9jYWxlKSB7XG4gICAgY29uc3QgbGFyZ2VzdERhdGFzZXQgPSBkYXRhc2V0cy5yZWR1Y2UoKHByZXZpb3VzRGF0YXNldCwgY3VycmVudERhdGFzZXQpID0+XG4gICAgICBwcmV2aW91c0RhdGFzZXQuZGF0YS5sZW5ndGggPiBjdXJyZW50RGF0YXNldC5kYXRhLmxlbmd0aCA/IHByZXZpb3VzRGF0YXNldCA6IGN1cnJlbnREYXRhc2V0XG4gICAgKTtcbiAgICByZXR1cm4gbGFyZ2VzdERhdGFzZXQuZGF0YS5tYXAoKHBvaW50OiBTY2F0dGVyRGF0YVBvaW50KSA9PlxuICAgICAgdG9EYXRlKHBvaW50LngpLnRvTG9jYWxlRGF0ZVN0cmluZyhsb2NhbGUsIHtcbiAgICAgICAgbW9udGg6ICdzaG9ydCcsXG4gICAgICAgIGRheTogJ251bWVyaWMnLFxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVDb25maWd1cmF0aW9uT2JqZWN0KFxuICAgIHR5cGU6IENoYXJ0VHlwZSxcbiAgICBkYXRhc2V0czogQ2hhcnREYXRhc2V0W10sXG4gICAgb3B0aW9uczogQ2hhcnRPcHRpb25zLFxuICAgIGxhYmVscz86IHVua25vd25bXVxuICApOiBDaGFydENvbmZpZ3VyYXRpb24ge1xuICAgIGNvbnN0IHR5cGVDb25maWcgPSB0aGlzLmNoYXJ0Q29uZmlnU2VydmljZS5nZXRUeXBlQ29uZmlnKHR5cGUpO1xuXG4gICAgY29uc3QgbGFiZWxzVG9BcHBseSA9ICgoKSA9PiB7XG4gICAgICBpZiAobGFiZWxzPy5sZW5ndGggPiAwKSByZXR1cm4gbGFiZWxzO1xuICAgICAgZWxzZSBpZiAodHlwZSA9PT0gJ3N0b2NrJykgcmV0dXJuIHRoaXMuZ2V0RGVmYXVsdFN0b2NrTGFiZWxzKGRhdGFzZXRzLCB0aGlzLmxvY2FsZSk7XG4gICAgICBlbHNlIHJldHVybiB0aGlzLmNyZWF0ZUJsYW5rTGFiZWxzKGRhdGFzZXRzKTsgLy8gQ2hhcnRKUyByZXF1aXJlcyBsYWJlbHNcbiAgICB9KSgpO1xuXG4gICAgcmV0dXJuIG1lcmdlRGVlcEFsbCh0eXBlQ29uZmlnLCB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIGxhYmVsczogbGFiZWxzVG9BcHBseSxcbiAgICAgICAgZGF0YXNldHMsXG4gICAgICB9LFxuICAgICAgb3B0aW9ucyxcbiAgICB9KSBhcyBDaGFydENvbmZpZ3VyYXRpb247XG4gIH1cblxuICBwcml2YXRlIGFkZEhpZ2hsaWdodGVkRWxlbWVudHNUb0RhdGFzZXRzKFxuICAgIGhpZ2hsaWdodGVkRWxlbWVudHM6IENoYXJ0SGlnaGxpZ2h0ZWRFbGVtZW50cyxcbiAgICBkYXRhc2V0czogQ2hhcnREYXRhc2V0W11cbiAgKSB7XG4gICAgaGlnaGxpZ2h0ZWRFbGVtZW50cy5mb3JFYWNoKChbZGF0YXNldEluZGV4LCBkYXRhSW5kZXhdKSA9PiB7XG4gICAgICBjb25zdCBkYXRhc2V0ID0gZGF0YXNldHNbZGF0YXNldEluZGV4XTtcbiAgICAgIGlmICghZGF0YXNldCkgcmV0dXJuO1xuXG4gICAgICBpZiAoZGF0YXNldD8ua2lyYnlPcHRpb25zPy5oaWdobGlnaHRlZEVsZW1lbnRzKSB7XG4gICAgICAgIGRhdGFzZXQua2lyYnlPcHRpb25zLmhpZ2hsaWdodGVkRWxlbWVudHMucHVzaChkYXRhSW5kZXgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YXNldC5raXJieU9wdGlvbnMgPSB7XG4gICAgICAgICAgLi4uZGF0YXNldC5raXJieU9wdGlvbnMsXG4gICAgICAgICAgaGlnaGxpZ2h0ZWRFbGVtZW50czogW2RhdGFJbmRleF0sXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcHJpdmF0ZSBjcmVhdGVEYXRhc2V0cyhkYXRhOiBDaGFydERhdGFzZXRbXSB8IG51bWJlcltdKTogQ2hhcnREYXRhc2V0W10ge1xuICAgIC8vIFdlIG5lZWQgdG8gbW9kaWZ5IHRoZSBkYXRhc2V0cyBpbiBvcmRlciB0byBhZGQgZGF0YWxhYmVscy5cbiAgICBpZiAoXG4gICAgICB0aGlzLmRhdGFMYWJlbE9wdGlvbnM/LnNob3dDdXJyZW50IHx8XG4gICAgICB0aGlzLmRhdGFMYWJlbE9wdGlvbnM/LnNob3dNYXggfHxcbiAgICAgIHRoaXMuZGF0YUxhYmVsT3B0aW9ucz8uc2hvd01pblxuICAgICkge1xuICAgICAgZGF0YSA9IHRoaXMuYWRkRGF0YUxhYmVsc0RhdGEoZGF0YSk7XG4gICAgfVxuICAgIGxldCBkYXRhc2V0cyA9IGlzTnVtYmVyQXJyYXkoZGF0YSkgPyBbeyBkYXRhIH1dIDogZGF0YTtcbiAgICBpZiAodGhpcy5oaWdobGlnaHRlZEVsZW1lbnRzKVxuICAgICAgdGhpcy5hZGRIaWdobGlnaHRlZEVsZW1lbnRzVG9EYXRhc2V0cyh0aGlzLmhpZ2hsaWdodGVkRWxlbWVudHMsIGRhdGFzZXRzKTtcblxuICAgIC8qIFxuICAgICAgIEhhY2t5IHNvbHV0aW9uLiBTaG91bGQgYmUgZml4ZWQgaW4gdGhpcyBpc3N1ZTpcbiAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9raXJieWRlc2lnbi9kZXNpZ25zeXN0ZW0vaXNzdWVzLzE5NjcgXG4gICAgKi9cbiAgICBpZiAodGhpcy5jaGFydFR5cGUgPT09ICdzdG9jaycpIHtcbiAgICAgIGRhdGFzZXRzLmZvckVhY2goKGRhdGFzZXQpID0+IHtcbiAgICAgICAgZGF0YXNldC5raXJieU9wdGlvbnMgPSB7XG4gICAgICAgICAgLi4uZGF0YXNldC5raXJieU9wdGlvbnMsXG4gICAgICAgICAgaXNTdG9ja0NoYXJ0OiB0cnVlLFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGFzZXRzO1xuICB9XG4gIC8qKlxuICAgKiBEZWNvcmF0ZSBDaGFydERhdGFzZXQgd2l0aCBwcm9wZXJ0aWVzIHRvIGFsbG93IGZvciBkYXRhbGFiZWxzLlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YVxuICAgKiBAcmV0dXJucyBDaGFydERhdGFzZXRbXVxuICAgKi9cbiAgcHVibGljIGFkZERhdGFMYWJlbHNEYXRhKGRhdGE6IENoYXJ0RGF0YXNldFtdIHwgbnVtYmVyW10pOiBDaGFydERhdGFzZXRbXSB7XG4gICAgaWYgKGlzTnVtYmVyQXJyYXkoZGF0YSkpIHtcbiAgICAgIHRocm93IEVycm9yKFwiQ3VycmVudGx5IGl0J3MgaW1wb3NzaWJsZSB0byBhZGQgZGF0YUxhYmVscyB0byBub24gU2NhdHRlckRhdGFQb2ludCBkYXRhc2V0c1wiKTtcbiAgICB9XG5cbiAgICBjb25zdCBkZWNvcmF0ZURhdGFQb2ludCA9IChcbiAgICAgIHNldDogQ2hhcnREYXRhc2V0LFxuICAgICAgYXhpczogJ3gnIHwgJ3knLFxuICAgICAgZGlyZWN0aW9uOiAnaGlnaCcgfCAnbG93JyxcbiAgICAgIHBvc2l0aW9uOiAnYm90dG9tJyB8ICd0b3AnIHwgJ2xlZnQnIHwgJ3JpZ2h0J1xuICAgICk6IHZvaWQgPT4ge1xuICAgICAgY29uc3QgeyB2YWx1ZSwgcG9pbnRlciB9ID0gdGhpcy5sb2NhdGVWYWx1ZUluZGV4SW5EYXRhc2V0KHNldCwgYXhpcywgZGlyZWN0aW9uKTtcbiAgICAgIHNldC5kYXRhW3BvaW50ZXJdID0ge1xuICAgICAgICAuLi4oc2V0LmRhdGFbcG9pbnRlcl0gYXMgU2NhdHRlckRhdGFQb2ludCksXG4gICAgICAgIGRhdGFsYWJlbDoge1xuICAgICAgICAgIHZhbHVlOiB2YWx1ZSArICh0aGlzLmRhdGFMYWJlbE9wdGlvbnMudmFsdWVTdWZmaXggfHwgJycpLFxuICAgICAgICAgIHBvc2l0aW9uLFxuICAgICAgICB9LFxuICAgICAgfSBhcyBTY2F0dGVyRGF0YVBvaW50O1xuICAgIH07XG5cbiAgICBkYXRhLm1hcCgoc2V0KSA9PiB7XG4gICAgICBpZiAodGhpcy5kYXRhTGFiZWxPcHRpb25zLnNob3dNaW4pIHtcbiAgICAgICAgZGVjb3JhdGVEYXRhUG9pbnQoc2V0LCAneScsICdsb3cnLCAnYm90dG9tJyk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5kYXRhTGFiZWxPcHRpb25zLnNob3dNYXgpIHtcbiAgICAgICAgZGVjb3JhdGVEYXRhUG9pbnQoc2V0LCAneScsICdoaWdoJywgJ3RvcCcpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZGF0YUxhYmVsT3B0aW9ucy5zaG93Q3VycmVudCkge1xuICAgICAgICBkZWNvcmF0ZURhdGFQb2ludChzZXQsICd4JywgJ2hpZ2gnLCAncmlnaHQnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHByaXZhdGUgbG9jYXRlVmFsdWVJbmRleEluRGF0YXNldChcbiAgICBkYXRhc2V0OiBDaGFydERhdGFzZXQsXG4gICAgYXhpczogc3RyaW5nLFxuICAgIGRpcmVjdGlvbjogJ2xvdycgfCAnaGlnaCdcbiAgKTogeyB2YWx1ZTogbnVtYmVyOyBwb2ludGVyOiBudW1iZXIgfSB7XG4gICAgbGV0IHBvaW50ZXI6IG51bWJlcjtcbiAgICBsZXQgdmFsdWU6IG51bWJlcjtcbiAgICBkYXRhc2V0LmRhdGEuZm9yRWFjaCgoZGF0YXBvaW50LCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGRpcmVjdGlvbiA9PSAnbG93JyAmJiAoIXZhbHVlIHx8IGRhdGFwb2ludFtheGlzXSA8IHZhbHVlKSkge1xuICAgICAgICB2YWx1ZSA9IGRhdGFwb2ludFsneSddO1xuICAgICAgICBwb2ludGVyID0gaW5kZXg7XG4gICAgICB9XG4gICAgICBpZiAoZGlyZWN0aW9uID09ICdoaWdoJyAmJiAoIXZhbHVlIHx8IGRhdGFwb2ludFtheGlzXSA+IHZhbHVlKSkge1xuICAgICAgICB2YWx1ZSA9IGRhdGFwb2ludFsneSddO1xuICAgICAgICBwb2ludGVyID0gaW5kZXg7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHsgdmFsdWUsIHBvaW50ZXIgfTtcbiAgfVxufVxuIl19
314
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQtanMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvZGVzaWduc3lzdGVtL3NyYy9saWIvY29tcG9uZW50cy9jaGFydC9jaGFydC1qcy9jaGFydC1qcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHdkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVsQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQU1MLGFBQWEsR0FDZCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRXJFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUU5QyxNQUFNLG9CQUFvQixHQUFHLE9BQU8sQ0FBQztBQUdyQyxNQUFNLE9BQU8sY0FBYztJQU96QixZQUFvQixrQkFBc0M7UUFBdEMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtJQUFHLENBQUM7SUFFdkQsV0FBVyxDQUFDLElBU2xCO1FBQ0MsTUFBTSxFQUNKLGFBQWEsRUFDYixJQUFJLEVBQ0osSUFBSSxFQUNKLE1BQU0sRUFDTixhQUFhLEVBQ2IsV0FBVyxFQUNYLGdCQUFnQixFQUNoQixtQkFBbUIsR0FDcEIsR0FBRyxJQUFJLENBQUM7UUFFVCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLElBQUksSUFBSSxDQUFDO1FBQ2pELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxtQkFBbUIsSUFBSSxJQUFJLENBQUM7UUFDdkQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFBLGdCQUFnQixhQUFoQixnQkFBZ0IsdUJBQWhCLGdCQUFnQixD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LEtBQUssRUFBRSxFQUFFO1lBQ3hDLElBQUksU0FBUyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRTtnQkFDN0QsS0FBSyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDdkIsT0FBTyxHQUFHLEtBQUssQ0FBQzthQUNqQjtZQUNELElBQUksU0FBUyxJQUFJLE1BQU0sSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRTtnQkFDOUQsS0FBSyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDdkIsT0FBTyxHQUFHLEtBQUssQ0FBQzthQUNqQjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUM1QixDQUFDOzs7WUE3WUYsVUFBVTs7OztZQU5GLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVsZW1lbnRSZWYsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2ZUVsZW1lbnQsIENoYXJ0Q29uZmlndXJhdGlvbiwgQ2hhcnRPcHRpb25zLCBTY2F0dGVyRGF0YVBvaW50IH0gZnJvbSAnY2hhcnQuanMnO1xuaW1wb3J0IHsgQW5ub3RhdGlvbk9wdGlvbnMgfSBmcm9tICdjaGFydGpzLXBsdWdpbi1hbm5vdGF0aW9uJztcbmltcG9ydCB7IHRvRGF0ZSB9IGZyb20gJ2RhdGUtZm5zJztcblxuaW1wb3J0IHsgbWVyZ2VEZWVwQWxsIH0gZnJvbSAnLi4vLi4vLi4vaGVscGVycy9tZXJnZS1kZWVwJztcbmltcG9ydCB7XG4gIENoYXJ0RGF0YUxhYmVsT3B0aW9ucyxcbiAgQ2hhcnREYXRhc2V0LFxuICBDaGFydEhpZ2hsaWdodGVkRWxlbWVudHMsXG4gIENoYXJ0TG9jYWxlLFxuICBDaGFydFR5cGUsXG4gIGlzTnVtYmVyQXJyYXksXG59IGZyb20gJy4uL2NoYXJ0LnR5cGVzJztcbmltcG9ydCB7IENoYXJ0Q29uZmlnU2VydmljZSB9IGZyb20gJy4uL2NvbmZpZ3MvY2hhcnQtY29uZmlnLnNlcnZpY2UnO1xuXG5pbXBvcnQgeyBDaGFydCB9IGZyb20gJy4vY29uZmlndXJlZC1jaGFydC1qcyc7XG5cbmNvbnN0IENIQVJUX0xPQ0FMRV9ERUZBVUxUID0gJ2VuLVVTJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENoYXJ0SlNTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBjaGFydDogQ2hhcnQ7XG4gIHByaXZhdGUgZGF0YUxhYmVsT3B0aW9uczogQ2hhcnREYXRhTGFiZWxPcHRpb25zO1xuICBwcml2YXRlIGhpZ2hsaWdodGVkRWxlbWVudHM6IENoYXJ0SGlnaGxpZ2h0ZWRFbGVtZW50cztcbiAgcHJpdmF0ZSBjaGFydFR5cGU6IENoYXJ0VHlwZTtcbiAgcHJpdmF0ZSBsb2NhbGU6IENoYXJ0TG9jYWxlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2hhcnRDb25maWdTZXJ2aWNlOiBDaGFydENvbmZpZ1NlcnZpY2UpIHt9XG5cbiAgcHVibGljIHJlbmRlckNoYXJ0KGFyZ3M6IHtcbiAgICB0YXJnZXRFbGVtZW50OiBFbGVtZW50UmVmPEhUTUxDYW52YXNFbGVtZW50PjtcbiAgICB0eXBlOiBDaGFydFR5cGU7XG4gICAgZGF0YTogQ2hhcnREYXRhc2V0W10gfCBudW1iZXJbXTtcbiAgICBsYWJlbHM/OiBzdHJpbmdbXSB8IHN0cmluZ1tdW107XG4gICAgY3VzdG9tT3B0aW9ucz86IENoYXJ0T3B0aW9ucztcbiAgICBhbm5vdGF0aW9ucz86IEFubm90YXRpb25PcHRpb25zW107XG4gICAgZGF0YUxhYmVsT3B0aW9ucz86IENoYXJ0RGF0YUxhYmVsT3B0aW9ucztcbiAgICBoaWdobGlnaHRlZEVsZW1lbnRzPzogQ2hhcnRIaWdobGlnaHRlZEVsZW1lbnRzO1xuICB9KTogdm9pZCB7XG4gICAgY29uc3Qge1xuICAgICAgdGFyZ2V0RWxlbWVudCxcbiAgICAgIHR5cGUsXG4gICAgICBkYXRhLFxuICAgICAgbGFiZWxzLFxuICAgICAgY3VzdG9tT3B0aW9ucyxcbiAgICAgIGFubm90YXRpb25zLFxuICAgICAgZGF0YUxhYmVsT3B0aW9ucyxcbiAgICAgIGhpZ2hsaWdodGVkRWxlbWVudHMsXG4gICAgfSA9IGFyZ3M7XG5cbiAgICB0aGlzLmRhdGFMYWJlbE9wdGlvbnMgPSBkYXRhTGFiZWxPcHRpb25zIHx8IG51bGw7XG4gICAgdGhpcy5oaWdobGlnaHRlZEVsZW1lbnRzID0gaGlnaGxpZ2h0ZWRFbGVtZW50cyB8fCBudWxsO1xuICAgIHRoaXMuY2hhcnRUeXBlID0gdHlwZTtcbiAgICB0aGlzLmxvY2FsZSA9IGRhdGFMYWJlbE9wdGlvbnM/LmxvY2FsZSB8fCBDSEFSVF9MT0NBTEVfREVGQVVMVDtcblxuICAgIGNvbnN0IGRhdGFzZXRzID0gdGhpcy5jcmVhdGVEYXRhc2V0cyhkYXRhKTtcblxuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmNyZWF0ZU9wdGlvbnNPYmplY3Qoe1xuICAgICAgY3VzdG9tT3B0aW9ucyxcbiAgICAgIGFubm90YXRpb25zLFxuICAgICAgZGF0YUxhYmVsT3B0aW9ucyxcbiAgICB9KTtcbiAgICBsZXQgY29uZmlnID0gdGhpcy5jcmVhdGVDb25maWd1cmF0aW9uT2JqZWN0KHR5cGUsIGRhdGFzZXRzLCBvcHRpb25zLCBsYWJlbHMpO1xuXG4gICAgdGhpcy5pbml0aWFsaXplTmV3Q2hhcnQodGFyZ2V0RWxlbWVudC5uYXRpdmVFbGVtZW50LCBjb25maWcpO1xuICB9XG5cbiAgcHVibGljIHJlZHJhd0NoYXJ0KCkge1xuICAgIHRoaXMuY2hhcnQudXBkYXRlKCk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlRGF0YShkYXRhOiBDaGFydERhdGFzZXRbXSB8IG51bWJlcltdKTogdm9pZCB7XG4gICAgY29uc3QgZGF0YXNldHMgPSB0aGlzLmNyZWF0ZURhdGFzZXRzKGRhdGEpO1xuXG4gICAgdGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzID0gZGF0YXNldHM7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlTGFiZWxzKGxhYmVsczogc3RyaW5nW10gfCBzdHJpbmdbXVtdKSB7XG4gICAgdGhpcy5jaGFydC5kYXRhLmxhYmVscyA9IGxhYmVscztcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVUeXBlKHR5cGU6IENoYXJ0VHlwZSwgY3VzdG9tT3B0aW9ucz86IENoYXJ0T3B0aW9ucykge1xuICAgIGlmICh0eXBlID09PSAnYmFyJyB8fCB0eXBlID09PSAnY29sdW1uJykge1xuICAgICAgLyogaW5kZXhBeGlzIGRvZXMgbm90IHVwZGF0ZSBwcmVkaWN0YWJseTsgdXBkYXRlIGJ5IHJlcGxhY2luZyBcbiAgICAgICAgIHRoZSBjaGFydCBlbnRpcmVseSBpbnN0ZWFkICovXG4gICAgICB0aGlzLmRlc3RydWN0aXZlbHlVcGRhdGVUeXBlKHR5cGUsIGN1c3RvbU9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm5vbkRlc3RydWN0aXZlbHlVcGRhdGVUeXBlKHR5cGUsIGN1c3RvbU9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXREYXRhTGFiZWxPcHRpb25zKGRhdGFMYWJlbE9wdGlvbnM6IENoYXJ0RGF0YUxhYmVsT3B0aW9ucykge1xuICAgIHRoaXMuZGF0YUxhYmVsT3B0aW9ucyA9IGRhdGFMYWJlbE9wdGlvbnM7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlT3B0aW9ucyhjdXN0b21PcHRpb25zOiBDaGFydE9wdGlvbnMsIHR5cGU6IENoYXJ0VHlwZSkge1xuICAgIGNvbnN0IGFubm90YXRpb25zID0gdGhpcy5nZXRFeGlzdGluZ0NoYXJ0QW5ub3RhdGlvbnMoKTtcbiAgICB0aGlzLmNoYXJ0VHlwZSA9IHR5cGU7XG4gICAgdGhpcy5jaGFydC5vcHRpb25zID0gdGhpcy5jcmVhdGVPcHRpb25zT2JqZWN0KHsgY3VzdG9tT3B0aW9ucywgYW5ub3RhdGlvbnMgfSk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlQW5ub3RhdGlvbnMoYW5ub3RhdGlvbnM6IEFubm90YXRpb25PcHRpb25zW10pIHtcbiAgICBjb25zdCBhbm5vdGF0aW9uc1dpdGhEZWZhdWx0cyA9IHRoaXMuYXBwbHlEZWZhdWx0c1RvQW5ub3RhdGlvbnMoYW5ub3RhdGlvbnMpO1xuICAgIHRoaXMuY2hhcnQub3B0aW9ucy5wbHVnaW5zLmFubm90YXRpb24uYW5ub3RhdGlvbnMgPSBhbm5vdGF0aW9uc1dpdGhEZWZhdWx0cztcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVIaWdobGlnaHRlZEVsZW1lbnRzKGhpZ2hsaWdodGVkRWxlbWVudHM/OiBDaGFydEhpZ2hsaWdodGVkRWxlbWVudHMpIHtcbiAgICB0aGlzLmhpZ2hsaWdodGVkRWxlbWVudHMgPSBoaWdobGlnaHRlZEVsZW1lbnRzO1xuICAgIGNvbnN0IG9sZERhdGFzZXRzID0gdGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzIGFzIENoYXJ0RGF0YXNldFtdO1xuXG4gICAgLy8gQ2xlYXIgb2xkIGRhdGFzZXRzIG9mIGhpZ2hsaWdodGVkIGVsZW1lbnRzXG4gICAgb2xkRGF0YXNldHMubWFwKChkYXRhc2V0KSA9PiB7XG4gICAgICBpZiAoZGF0YXNldD8ua2lyYnlPcHRpb25zPy5oaWdobGlnaHRlZEVsZW1lbnRzKSB7XG4gICAgICAgIGRlbGV0ZSBkYXRhc2V0LmtpcmJ5T3B0aW9ucy5oaWdobGlnaHRlZEVsZW1lbnRzO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzID0gdGhpcy5jcmVhdGVEYXRhc2V0cyhvbGREYXRhc2V0cyk7XG4gIH1cblxuICBwcml2YXRlIGdldEV4aXN0aW5nQ2hhcnRBbm5vdGF0aW9ucygpOiBBbm5vdGF0aW9uT3B0aW9uc1tdIHtcbiAgICBjb25zdCBhbm5vdGF0aW9ucyA9IHRoaXMuY2hhcnQub3B0aW9ucy5wbHVnaW5zPy5hbm5vdGF0aW9uPy5hbm5vdGF0aW9ucztcbiAgICAvKiBJbiBicm93c2VyIGNoYXJ0LmpzIG1pZ2h0IHJldHVybiBhbm5vdGF0aW9ucyBhcyBhIFByb3h5IG9iamVjdDsgZm9yY2UgaXQgdG8gYmUgYW4gYXJyYXkuXG4gICAgICAgRWFjaCBhbm5vdGF0aW9uT3B0aW9uIGluIHRoZSByZXN1bHRpbmcgYXJyYXkgIHdpbGwgYWxzbyBiZSBhIFByb3h5IG9iamVjdC4gXG4gICAgICAgQnV0IGludGVybmFsbHkgY2hhcnQuanMgd2lsbCBqdXN0IHdvcmsgd2l0aCB0aGVtIGFzIG5vcm1hbCB2YWx1ZXMgKi9cbiAgICBpZiAoYW5ub3RhdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGFubm90YXRpb25zKS5tYXAoKGtleSkgPT4gYW5ub3RhdGlvbnNba2V5XSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRlc3RydWN0aXZlbHlVcGRhdGVUeXBlKHR5cGU6IENoYXJ0VHlwZSwgY3VzdG9tT3B0aW9ucz86IENoYXJ0T3B0aW9ucykge1xuICAgIGNvbnN0IGRhdGFzZXRzID0gdGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzIGFzIENoYXJ0RGF0YXNldFtdO1xuICAgIGNvbnN0IGxhYmVscyA9IHRoaXMuY2hhcnQuZGF0YS5sYWJlbHM7XG4gICAgY29uc3QgYW5ub3RhdGlvbnMgPSB0aGlzLmdldEV4aXN0aW5nQ2hhcnRBbm5vdGF0aW9ucygpO1xuXG4gICAgdGhpcy5jaGFydFR5cGUgPSB0eXBlO1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmNyZWF0ZU9wdGlvbnNPYmplY3QoeyBjdXN0b21PcHRpb25zLCBhbm5vdGF0aW9ucyB9KTtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNyZWF0ZUNvbmZpZ3VyYXRpb25PYmplY3QodHlwZSwgZGF0YXNldHMsIG9wdGlvbnMsIGxhYmVscyk7XG4gICAgY29uc3QgY2FudmFzRWxlbWVudCA9IHRoaXMuY2hhcnQuY2FudmFzO1xuXG4gICAgdGhpcy5jaGFydC5kZXN0cm95KCk7XG4gICAgdGhpcy5pbml0aWFsaXplTmV3Q2hhcnQoY2FudmFzRWxlbWVudCwgY29uZmlnKTtcbiAgfVxuXG4gIHByaXZhdGUgbm9uRGVzdHJ1Y3RpdmVseVVwZGF0ZVR5cGUoY2hhcnRUeXBlOiBDaGFydFR5cGUsIGN1c3RvbU9wdGlvbnM/OiBDaGFydE9wdGlvbnMpIHtcbiAgICBjb25zdCBhbm5vdGF0aW9ucyA9IHRoaXMuZ2V0RXhpc3RpbmdDaGFydEFubm90YXRpb25zKCk7XG4gICAgdGhpcy5jaGFydFR5cGUgPSBjaGFydFR5cGU7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuY3JlYXRlT3B0aW9uc09iamVjdCh7XG4gICAgICBjdXN0b21PcHRpb25zLFxuICAgICAgYW5ub3RhdGlvbnMsXG4gICAgfSk7XG5cbiAgICB0aGlzLmNoYXJ0Lm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMuY2hhcnQuY29uZmlnLnR5cGUgPSB0aGlzLmNoYXJ0Q29uZmlnU2VydmljZS5jaGFydFR5cGVUb0NoYXJ0SlNUeXBlKGNoYXJ0VHlwZSk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVOZXdDaGFydChjYW52YXNFbGVtZW50OiBIVE1MQ2FudmFzRWxlbWVudCwgY29uZmlnOiBDaGFydENvbmZpZ3VyYXRpb24pIHtcbiAgICB0aGlzLmNoYXJ0ID0gbmV3IENoYXJ0KGNhbnZhc0VsZW1lbnQsIGNvbmZpZyk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUJsYW5rTGFiZWxzKGRhdGFzZXRzOiBDaGFydERhdGFzZXRbXSk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBsYXJnZXN0RGF0YXNldCA9IGRhdGFzZXRzLnJlZHVjZSgocHJldmlvdXNEYXRhc2V0LCBjdXJyZW50RGF0YXNldCkgPT5cbiAgICAgIHByZXZpb3VzRGF0YXNldC5kYXRhLmxlbmd0aCA+IGN1cnJlbnREYXRhc2V0LmRhdGEubGVuZ3RoID8gcHJldmlvdXNEYXRhc2V0IDogY3VycmVudERhdGFzZXRcbiAgICApO1xuICAgIHJldHVybiBBcnJheShsYXJnZXN0RGF0YXNldC5kYXRhLmxlbmd0aCkuZmlsbCgnJyk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5RGVmYXVsdHNUb0Fubm90YXRpb25zKGFubm90YXRpb25zOiBBbm5vdGF0aW9uT3B0aW9uc1tdKSB7XG4gICAgcmV0dXJuIGFubm90YXRpb25zLm1hcCgoYW5ub3RhdGlvbikgPT4ge1xuICAgICAgY29uc3QgYW5ub3RhdGlvblR5cGVEZWZhdWx0cyA9IHRoaXMuY2hhcnRDb25maWdTZXJ2aWNlLmdldEFubm90YXRpb25EZWZhdWx0cyhhbm5vdGF0aW9uLnR5cGUpO1xuICAgICAgcmV0dXJuIG1lcmdlRGVlcEFsbChhbm5vdGF0aW9uVHlwZURlZmF1bHRzLCBhbm5vdGF0aW9uKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQW5ub3RhdGlvblBsdWdpbk9wdGlvbnNPYmplY3QoYW5ub3RhdGlvbnM6IEFubm90YXRpb25PcHRpb25zW10pIHtcbiAgICBjb25zdCBhbm5vdGF0aW9uc1dpdGhEZWZhdWx0cyA9IHRoaXMuYXBwbHlEZWZhdWx0c1RvQW5ub3RhdGlvbnMoYW5ub3RhdGlvbnMpO1xuICAgIHJldHVybiB7XG4gICAgICBwbHVnaW5zOiB7XG4gICAgICAgIGFubm90YXRpb246IHtcbiAgICAgICAgICBhbm5vdGF0aW9uczogYW5ub3RhdGlvbnNXaXRoRGVmYXVsdHMsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFwcGx5SW50ZXJhY3Rpb25GdW5jdGlvbnNFeHRlbnNpb25zKG9wdGlvbnM6IENoYXJ0T3B0aW9ucyk6IENoYXJ0T3B0aW9ucyB7XG4gICAgY29uc3QgaW50ZXJhY3Rpb25GdW5jdGlvbnNFeHRlbnNpb25zID0gdGhpcy5jaGFydENvbmZpZ1NlcnZpY2UuZ2V0SW50ZXJhY3Rpb25GdW5jdGlvbnNFeHRlbnNpb25zKCk7XG4gICAgT2JqZWN0LmVudHJpZXMoaW50ZXJhY3Rpb25GdW5jdGlvbnNFeHRlbnNpb25zKS5mb3JFYWNoKChba2V5LCBfXSkgPT4ge1xuICAgICAgY29uc3QgY2FsbGJhY2sgPSBvcHRpb25zW2tleV07XG4gICAgICBvcHRpb25zW2tleV0gPSAoZTogRXZlbnQsIGE6IEFjdGl2ZUVsZW1lbnRbXSwgYzogQ2hhcnQpID0+IHtcbiAgICAgICAgaW50ZXJhY3Rpb25GdW5jdGlvbnNFeHRlbnNpb25zW2tleV0oZSwgYSwgYywgY2FsbGJhY2spO1xuICAgICAgfTtcbiAgICB9KTtcbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlU3RvY2tPcHRpb25zT2JqZWN0KGRhdGFMYWJlbE9wdGlvbnM6IENoYXJ0RGF0YUxhYmVsT3B0aW9ucykge1xuICAgIHJldHVybiB7XG4gICAgICBsb2NhbGU6IHRoaXMubG9jYWxlLFxuICAgICAgcGx1Z2luczoge1xuICAgICAgICB0b29sdGlwOiB7XG4gICAgICAgICAgY2FsbGJhY2tzOiB7XG4gICAgICAgICAgICB0aXRsZTogKHRvb2x0aXBJdGVtcykgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBkYXRlID0gdG9EYXRlKCh0b29sdGlwSXRlbXNbMF0/LnJhdyBhcyBhbnkpPy54KTtcbiAgICAgICAgICAgICAgaWYgKGRhdGUudmFsdWVPZigpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGUudG9Mb2NhbGVUaW1lU3RyaW5nKHRoaXMubG9jYWxlLCB7XG4gICAgICAgICAgICAgICAgICBkYXk6ICdudW1lcmljJyxcbiAgICAgICAgICAgICAgICAgIG1vbnRoOiAnc2hvcnQnLFxuICAgICAgICAgICAgICAgICAgaG91cjogJzItZGlnaXQnLFxuICAgICAgICAgICAgICAgICAgbWludXRlOiAnMi1kaWdpdCcsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYWJlbDogKGNvbnRleHQpID0+IHtcbiAgICAgICAgICAgICAgLy8gSXQncyBub3QgcG9zc2libGUgdG8gYWRkIHNwYWNpbmcgYmV0d2VlbiBjb2xvciBsZWdlbmQgYW5kIHRleHQgc28gd2VcbiAgICAgICAgICAgICAgLy8gcHJlZml4IHdpdGggYSBzcGFjZS5cbiAgICAgICAgICAgICAgcmV0dXJuICcgJyArIGNvbnRleHQuZm9ybWF0dGVkVmFsdWUgKyAoZGF0YUxhYmVsT3B0aW9ucy52YWx1ZVN1ZmZpeCB8fCAnJyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgc2NhbGVzOiB7XG4gICAgICAgIHk6IHtcbiAgICAgICAgICB0aWNrczoge1xuICAgICAgICAgICAgY2FsbGJhY2s6ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgKyAoZGF0YUxhYmVsT3B0aW9ucy52YWx1ZVN1ZmZpeCB8fCAnJyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU9wdGlvbnNPYmplY3QoYXJnczoge1xuICAgIGN1c3RvbU9wdGlvbnM/OiBDaGFydE9wdGlvbnM7XG4gICAgYW5ub3RhdGlvbnM/OiBBbm5vdGF0aW9uT3B0aW9uc1tdO1xuICAgIGRhdGFMYWJlbE9wdGlvbnM/OiBDaGFydERhdGFMYWJlbE9wdGlvbnM7XG4gIH0pOiBDaGFydE9wdGlvbnMge1xuICAgIGNvbnN0IHsgY3VzdG9tT3B0aW9ucywgYW5ub3RhdGlvbnMsIGRhdGFMYWJlbE9wdGlvbnM6IGNoYXJ0RGF0YUxhYmVsT3B0aW9ucyB9ID0gYXJncztcblxuICAgIGNvbnN0IHR5cGVDb25maWcgPSB0aGlzLmNoYXJ0Q29uZmlnU2VydmljZS5nZXRUeXBlQ29uZmlnKHRoaXMuY2hhcnRUeXBlKTtcbiAgICBjb25zdCB0eXBlQ29uZmlnT3B0aW9ucyA9IHR5cGVDb25maWc/Lm9wdGlvbnM7XG4gICAgY29uc3QgYW5ub3RhdGlvblBsdWdpbk9wdGlvbnMgPSBhbm5vdGF0aW9uc1xuICAgICAgPyB0aGlzLmNyZWF0ZUFubm90YXRpb25QbHVnaW5PcHRpb25zT2JqZWN0KGFubm90YXRpb25zKVxuICAgICAgOiB7fTtcbiAgICBjb25zdCBzdG9ja09wdGlvbnM6IENoYXJ0T3B0aW9ucyA9XG4gICAgICB0aGlzLmNoYXJ0VHlwZSA9PT0gJ3N0b2NrJyA/IHRoaXMuY3JlYXRlU3RvY2tPcHRpb25zT2JqZWN0KGNoYXJ0RGF0YUxhYmVsT3B0aW9ucykgOiB7fTtcblxuICAgIGxldCBvcHRpb25zOiBDaGFydE9wdGlvbnMgPSBtZXJnZURlZXBBbGwoXG4gICAgICBzdG9ja09wdGlvbnMsXG4gICAgICB0eXBlQ29uZmlnT3B0aW9ucyxcbiAgICAgIGN1c3RvbU9wdGlvbnMsXG4gICAgICBhbm5vdGF0aW9uUGx1Z2luT3B0aW9uc1xuICAgICk7XG5cbiAgICByZXR1cm4gdGhpcy5hcHBseUludGVyYWN0aW9uRnVuY3Rpb25zRXh0ZW5zaW9ucyhvcHRpb25zKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGVmYXVsdFN0b2NrTGFiZWxzKGRhdGFzZXRzOiBDaGFydERhdGFzZXRbXSwgbG9jYWxlOiBDaGFydExvY2FsZSkge1xuICAgIGNvbnN0IGxhcmdlc3REYXRhc2V0ID0gZGF0YXNldHMucmVkdWNlKChwcmV2aW91c0RhdGFzZXQsIGN1cnJlbnREYXRhc2V0KSA9PlxuICAgICAgcHJldmlvdXNEYXRhc2V0LmRhdGEubGVuZ3RoID4gY3VycmVudERhdGFzZXQuZGF0YS5sZW5ndGggPyBwcmV2aW91c0RhdGFzZXQgOiBjdXJyZW50RGF0YXNldFxuICAgICk7XG4gICAgcmV0dXJuIGxhcmdlc3REYXRhc2V0LmRhdGEubWFwKChwb2ludDogU2NhdHRlckRhdGFQb2ludCkgPT5cbiAgICAgIHRvRGF0ZShwb2ludC54KS50b0xvY2FsZURhdGVTdHJpbmcobG9jYWxlLCB7XG4gICAgICAgIG1vbnRoOiAnc2hvcnQnLFxuICAgICAgICBkYXk6ICdudW1lcmljJyxcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQ29uZmlndXJhdGlvbk9iamVjdChcbiAgICB0eXBlOiBDaGFydFR5cGUsXG4gICAgZGF0YXNldHM6IENoYXJ0RGF0YXNldFtdLFxuICAgIG9wdGlvbnM6IENoYXJ0T3B0aW9ucyxcbiAgICBsYWJlbHM/OiB1bmtub3duW11cbiAgKTogQ2hhcnRDb25maWd1cmF0aW9uIHtcbiAgICBjb25zdCB0eXBlQ29uZmlnID0gdGhpcy5jaGFydENvbmZpZ1NlcnZpY2UuZ2V0VHlwZUNvbmZpZyh0eXBlKTtcblxuICAgIGNvbnN0IGxhYmVsc1RvQXBwbHkgPSAoKCkgPT4ge1xuICAgICAgaWYgKHR5cGUgPT09ICdzdG9jaycpIHtcbiAgICAgICAgLyogXG4gICAgICAgICAgIFRoZSB0aW1lIHNjYWxlIHdpbGwgYXV0byBnZW5lcmF0ZSBsYWJlbHMgYmFzZWQgb24gZGF0YS4gXG4gICAgICAgICAgIEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBwYXNzIGFuIGVtcHR5IGFycmF5IHRvIGdldCB0aGUgZGVmYXVsdCBcbiAgICAgICAgICAgYmVoYXZpb3VyIG9mIGNoYXJ0LmpzIHdoZW4gdXNpbmcgc3RvY2sgY2hhcnQuIFxuXG4gICAgICAgICAgIFRPRE86IFNpbXBsaWZ5IHRvIGFsd2F5cyBwYXNzIGxhYmVscywgaWYgZ2l2ZW4sIHRvIGNoYXJ0LmpzLlxuICAgICAgICAgICBXb3VsZCBiZSBhIGJyZWFraW5nIGNoYW5nZS4gU2VlIGlzc3VlOiBcbiAgICAgICAgICAgaHR0cHM6Ly9naXRodWIuY29tL2tpcmJ5ZGVzaWduL2Rlc2lnbnN5c3RlbS9pc3N1ZXMvMjA4NVxuICAgICAgICAqL1xuICAgICAgICBjb25zdCBzaG91bGRVc2VUaW1lc2NhbGVMYWJlbHMgPVxuICAgICAgICAgIGxhYmVscz8ubGVuZ3RoID09PSAwICYmIG9wdGlvbnM/LnNjYWxlcz8ueD8udHlwZSA9PT0gJ3RpbWUnO1xuICAgICAgICBpZiAoc2hvdWxkVXNlVGltZXNjYWxlTGFiZWxzKSByZXR1cm4gbGFiZWxzO1xuICAgICAgICByZXR1cm4gdGhpcy5nZXREZWZhdWx0U3RvY2tMYWJlbHMoZGF0YXNldHMsIHRoaXMubG9jYWxlKTtcbiAgICAgIH0gZWxzZSBpZiAobGFiZWxzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBsYWJlbHM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVCbGFua0xhYmVscyhkYXRhc2V0cyk7XG4gICAgICB9XG4gICAgfSkoKTtcblxuICAgIHJldHVybiBtZXJnZURlZXBBbGwodHlwZUNvbmZpZywge1xuICAgICAgZGF0YToge1xuICAgICAgICBsYWJlbHM6IGxhYmVsc1RvQXBwbHksXG4gICAgICAgIGRhdGFzZXRzLFxuICAgICAgfSxcbiAgICAgIG9wdGlvbnMsXG4gICAgfSkgYXMgQ2hhcnRDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRIaWdobGlnaHRlZEVsZW1lbnRzVG9EYXRhc2V0cyhcbiAgICBoaWdobGlnaHRlZEVsZW1lbnRzOiBDaGFydEhpZ2hsaWdodGVkRWxlbWVudHMsXG4gICAgZGF0YXNldHM6IENoYXJ0RGF0YXNldFtdXG4gICkge1xuICAgIGhpZ2hsaWdodGVkRWxlbWVudHMuZm9yRWFjaCgoW2RhdGFzZXRJbmRleCwgZGF0YUluZGV4XSkgPT4ge1xuICAgICAgY29uc3QgZGF0YXNldCA9IGRhdGFzZXRzW2RhdGFzZXRJbmRleF07XG4gICAgICBpZiAoIWRhdGFzZXQpIHJldHVybjtcblxuICAgICAgaWYgKGRhdGFzZXQ/LmtpcmJ5T3B0aW9ucz8uaGlnaGxpZ2h0ZWRFbGVtZW50cykge1xuICAgICAgICBkYXRhc2V0LmtpcmJ5T3B0aW9ucy5oaWdobGlnaHRlZEVsZW1lbnRzLnB1c2goZGF0YUluZGV4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGFzZXQua2lyYnlPcHRpb25zID0ge1xuICAgICAgICAgIC4uLmRhdGFzZXQua2lyYnlPcHRpb25zLFxuICAgICAgICAgIGhpZ2hsaWdodGVkRWxlbWVudHM6IFtkYXRhSW5kZXhdLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHByaXZhdGUgY3JlYXRlRGF0YXNldHMoZGF0YTogQ2hhcnREYXRhc2V0W10gfCBudW1iZXJbXSk6IENoYXJ0RGF0YXNldFtdIHtcbiAgICAvLyBXZSBuZWVkIHRvIG1vZGlmeSB0aGUgZGF0YXNldHMgaW4gb3JkZXIgdG8gYWRkIGRhdGFsYWJlbHMuXG4gICAgaWYgKFxuICAgICAgdGhpcy5kYXRhTGFiZWxPcHRpb25zPy5zaG93Q3VycmVudCB8fFxuICAgICAgdGhpcy5kYXRhTGFiZWxPcHRpb25zPy5zaG93TWF4IHx8XG4gICAgICB0aGlzLmRhdGFMYWJlbE9wdGlvbnM/LnNob3dNaW5cbiAgICApIHtcbiAgICAgIGRhdGEgPSB0aGlzLmFkZERhdGFMYWJlbHNEYXRhKGRhdGEpO1xuICAgIH1cbiAgICBsZXQgZGF0YXNldHMgPSBpc051bWJlckFycmF5KGRhdGEpID8gW3sgZGF0YSB9XSA6IGRhdGE7XG4gICAgaWYgKHRoaXMuaGlnaGxpZ2h0ZWRFbGVtZW50cylcbiAgICAgIHRoaXMuYWRkSGlnaGxpZ2h0ZWRFbGVtZW50c1RvRGF0YXNldHModGhpcy5oaWdobGlnaHRlZEVsZW1lbnRzLCBkYXRhc2V0cyk7XG5cbiAgICAvKiBcbiAgICAgICBIYWNreSBzb2x1dGlvbi4gU2hvdWxkIGJlIGZpeGVkIGluIHRoaXMgaXNzdWU6XG4gICAgICBodHRwczovL2dpdGh1Yi5jb20va2lyYnlkZXNpZ24vZGVzaWduc3lzdGVtL2lzc3Vlcy8xOTY3IFxuICAgICovXG4gICAgaWYgKHRoaXMuY2hhcnRUeXBlID09PSAnc3RvY2snKSB7XG4gICAgICBkYXRhc2V0cy5mb3JFYWNoKChkYXRhc2V0KSA9PiB7XG4gICAgICAgIGRhdGFzZXQua2lyYnlPcHRpb25zID0ge1xuICAgICAgICAgIC4uLmRhdGFzZXQua2lyYnlPcHRpb25zLFxuICAgICAgICAgIGlzU3RvY2tDaGFydDogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhc2V0cztcbiAgfVxuICAvKipcbiAgICogRGVjb3JhdGUgQ2hhcnREYXRhc2V0IHdpdGggcHJvcGVydGllcyB0byBhbGxvdyBmb3IgZGF0YWxhYmVscy5cbiAgICpcbiAgICogQHBhcmFtIGRhdGFcbiAgICogQHJldHVybnMgQ2hhcnREYXRhc2V0W11cbiAgICovXG4gIHB1YmxpYyBhZGREYXRhTGFiZWxzRGF0YShkYXRhOiBDaGFydERhdGFzZXRbXSB8IG51bWJlcltdKTogQ2hhcnREYXRhc2V0W10ge1xuICAgIGlmIChpc051bWJlckFycmF5KGRhdGEpKSB7XG4gICAgICB0aHJvdyBFcnJvcihcIkN1cnJlbnRseSBpdCdzIGltcG9zc2libGUgdG8gYWRkIGRhdGFMYWJlbHMgdG8gbm9uIFNjYXR0ZXJEYXRhUG9pbnQgZGF0YXNldHNcIik7XG4gICAgfVxuXG4gICAgY29uc3QgZGVjb3JhdGVEYXRhUG9pbnQgPSAoXG4gICAgICBzZXQ6IENoYXJ0RGF0YXNldCxcbiAgICAgIGF4aXM6ICd4JyB8ICd5JyxcbiAgICAgIGRpcmVjdGlvbjogJ2hpZ2gnIHwgJ2xvdycsXG4gICAgICBwb3NpdGlvbjogJ2JvdHRvbScgfCAndG9wJyB8ICdsZWZ0JyB8ICdyaWdodCdcbiAgICApOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHsgdmFsdWUsIHBvaW50ZXIgfSA9IHRoaXMubG9jYXRlVmFsdWVJbmRleEluRGF0YXNldChzZXQsIGF4aXMsIGRpcmVjdGlvbik7XG4gICAgICBzZXQuZGF0YVtwb2ludGVyXSA9IHtcbiAgICAgICAgLi4uKHNldC5kYXRhW3BvaW50ZXJdIGFzIFNjYXR0ZXJEYXRhUG9pbnQpLFxuICAgICAgICBkYXRhbGFiZWw6IHtcbiAgICAgICAgICB2YWx1ZTogdmFsdWUgKyAodGhpcy5kYXRhTGFiZWxPcHRpb25zLnZhbHVlU3VmZml4IHx8ICcnKSxcbiAgICAgICAgICBwb3NpdGlvbixcbiAgICAgICAgfSxcbiAgICAgIH0gYXMgU2NhdHRlckRhdGFQb2ludDtcbiAgICB9O1xuXG4gICAgZGF0YS5tYXAoKHNldCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZGF0YUxhYmVsT3B0aW9ucy5zaG93TWluKSB7XG4gICAgICAgIGRlY29yYXRlRGF0YVBvaW50KHNldCwgJ3knLCAnbG93JywgJ2JvdHRvbScpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZGF0YUxhYmVsT3B0aW9ucy5zaG93TWF4KSB7XG4gICAgICAgIGRlY29yYXRlRGF0YVBvaW50KHNldCwgJ3knLCAnaGlnaCcsICd0b3AnKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmRhdGFMYWJlbE9wdGlvbnMuc2hvd0N1cnJlbnQpIHtcbiAgICAgICAgZGVjb3JhdGVEYXRhUG9pbnQoc2V0LCAneCcsICdoaWdoJywgJ3JpZ2h0Jyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBwcml2YXRlIGxvY2F0ZVZhbHVlSW5kZXhJbkRhdGFzZXQoXG4gICAgZGF0YXNldDogQ2hhcnREYXRhc2V0LFxuICAgIGF4aXM6IHN0cmluZyxcbiAgICBkaXJlY3Rpb246ICdsb3cnIHwgJ2hpZ2gnXG4gICk6IHsgdmFsdWU6IG51bWJlcjsgcG9pbnRlcjogbnVtYmVyIH0ge1xuICAgIGxldCBwb2ludGVyOiBudW1iZXI7XG4gICAgbGV0IHZhbHVlOiBudW1iZXI7XG4gICAgZGF0YXNldC5kYXRhLmZvckVhY2goKGRhdGFwb2ludCwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChkaXJlY3Rpb24gPT0gJ2xvdycgJiYgKCF2YWx1ZSB8fCBkYXRhcG9pbnRbYXhpc10gPCB2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUgPSBkYXRhcG9pbnRbJ3knXTtcbiAgICAgICAgcG9pbnRlciA9IGluZGV4O1xuICAgICAgfVxuICAgICAgaWYgKGRpcmVjdGlvbiA9PSAnaGlnaCcgJiYgKCF2YWx1ZSB8fCBkYXRhcG9pbnRbYXhpc10gPiB2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUgPSBkYXRhcG9pbnRbJ3knXTtcbiAgICAgICAgcG9pbnRlciA9IGluZGV4O1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB7IHZhbHVlLCBwb2ludGVyIH07XG4gIH1cbn1cbiJdfQ==