@c8y/ngx-components 1021.62.9 → 1021.64.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/core/bottom-drawer/bottom-drawer-ref.d.ts +4 -0
  2. package/core/bottom-drawer/bottom-drawer-ref.d.ts.map +1 -1
  3. package/core/plugins/plugins.model.d.ts +1 -0
  4. package/core/plugins/plugins.model.d.ts.map +1 -1
  5. package/core/plugins/plugins.service.d.ts +5 -2
  6. package/core/plugins/plugins.service.d.ts.map +1 -1
  7. package/echart/services/echarts-options.service.d.ts +3 -1
  8. package/echart/services/echarts-options.service.d.ts.map +1 -1
  9. package/ecosystem/application-plugins/application-plugin-readme.component.d.ts +15 -0
  10. package/ecosystem/application-plugins/application-plugin-readme.component.d.ts.map +1 -0
  11. package/ecosystem/application-plugins/application-plugins.component.d.ts +4 -2
  12. package/ecosystem/application-plugins/application-plugins.component.d.ts.map +1 -1
  13. package/ecosystem/application-plugins/application-plugins.module.d.ts +4 -3
  14. package/ecosystem/application-plugins/application-plugins.module.d.ts.map +1 -1
  15. package/ecosystem/application-plugins/install-plugin.component.d.ts +8 -4
  16. package/ecosystem/application-plugins/install-plugin.component.d.ts.map +1 -1
  17. package/ecosystem/application-plugins/plugin-list.component.d.ts +10 -26
  18. package/ecosystem/application-plugins/plugin-list.component.d.ts.map +1 -1
  19. package/ecosystem/application-plugins/plugin-list.service.d.ts +27 -0
  20. package/ecosystem/application-plugins/plugin-list.service.d.ts.map +1 -0
  21. package/ecosystem/packages/package-details/package-details.component.d.ts +7 -9
  22. package/ecosystem/packages/package-details/package-details.component.d.ts.map +1 -1
  23. package/ecosystem/packages/package-versions/package-contents/contents-plugins/contents-plugins.component.d.ts +5 -1
  24. package/ecosystem/packages/package-versions/package-contents/contents-plugins/contents-plugins.component.d.ts.map +1 -1
  25. package/ecosystem/packages/package-versions/package-contents/packages-contents.component.d.ts +6 -3
  26. package/ecosystem/packages/package-versions/package-contents/packages-contents.component.d.ts.map +1 -1
  27. package/ecosystem/packages/package-versions/packages-versions.component.d.ts +9 -2
  28. package/ecosystem/packages/package-versions/packages-versions.component.d.ts.map +1 -1
  29. package/esm2022/alarms/alarm-details.component.mjs +3 -3
  30. package/esm2022/alarms/alarms-filter.component.mjs +3 -3
  31. package/esm2022/alarms/alarms-icon.component.mjs +3 -3
  32. package/esm2022/alarms/alarms-interval-refresh.component.mjs +3 -3
  33. package/esm2022/alarms/alarms-list.component.mjs +3 -3
  34. package/esm2022/alarms/alarms.component.mjs +3 -3
  35. package/esm2022/auth-configuration/sso-configuration/sso-configuration.component.mjs +3 -3
  36. package/esm2022/core/bottom-drawer/bottom-drawer-ref.mjs +9 -3
  37. package/esm2022/core/countdown-interval/countdown-interval.component.mjs +3 -3
  38. package/esm2022/core/plugins/plugins.model.mjs +1 -1
  39. package/esm2022/core/plugins/plugins.service.mjs +25 -5
  40. package/esm2022/echart/services/echarts-options.service.mjs +28 -12
  41. package/esm2022/ecosystem/application-plugins/application-plugin-readme.component.mjs +26 -0
  42. package/esm2022/ecosystem/application-plugins/application-plugins.component.mjs +26 -11
  43. package/esm2022/ecosystem/application-plugins/application-plugins.module.mjs +6 -3
  44. package/esm2022/ecosystem/application-plugins/install-plugin.component.mjs +21 -15
  45. package/esm2022/ecosystem/application-plugins/plugin-list-item.component.mjs +3 -3
  46. package/esm2022/ecosystem/application-plugins/plugin-list.component.mjs +26 -202
  47. package/esm2022/ecosystem/application-plugins/plugin-list.service.mjs +200 -0
  48. package/esm2022/ecosystem/application-properties/update-application-modal/update-application-modal.component.mjs +1 -1
  49. package/esm2022/ecosystem/packages/package-details/package-details.component.mjs +25 -44
  50. package/esm2022/ecosystem/packages/package-versions/package-contents/contents-plugins/contents-plugins.component.mjs +14 -4
  51. package/esm2022/ecosystem/packages/package-versions/package-contents/packages-contents.component.mjs +13 -6
  52. package/esm2022/ecosystem/packages/package-versions/packages-versions.component.mjs +22 -8
  53. package/esm2022/ecosystem/shared/list-filters/list-filters.component.mjs +3 -3
  54. package/esm2022/register-device/device-registration-view.component.mjs +39 -9
  55. package/esm2022/register-device/general/general-device-registration-button.component.mjs +13 -14
  56. package/esm2022/register-device/general/general-device-registration.component.mjs +19 -5
  57. package/esm2022/register-device/general/general-device-registration.service.mjs +30 -0
  58. package/esm2022/register-device/index.mjs +2 -1
  59. package/esm2022/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.mjs +3 -3
  60. package/fesm2022/c8y-ngx-components-alarms.mjs +12 -12
  61. package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
  62. package/fesm2022/c8y-ngx-components-auth-configuration.mjs +2 -2
  63. package/fesm2022/c8y-ngx-components-auth-configuration.mjs.map +1 -1
  64. package/fesm2022/c8y-ngx-components-echart.mjs +26 -11
  65. package/fesm2022/c8y-ngx-components-echart.mjs.map +1 -1
  66. package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs +205 -138
  67. package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
  68. package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs +2 -2
  69. package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
  70. package/fesm2022/c8y-ngx-components-ecosystem.mjs +257 -176
  71. package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
  72. package/fesm2022/c8y-ngx-components-register-device.mjs +86 -19
  73. package/fesm2022/c8y-ngx-components-register-device.mjs.map +1 -1
  74. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs +2 -2
  75. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs.map +1 -1
  76. package/fesm2022/c8y-ngx-components.mjs +33 -7
  77. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  78. package/locales/de.po +3 -0
  79. package/locales/es.po +3 -0
  80. package/locales/fr.po +3 -0
  81. package/locales/ja_JP.po +3 -0
  82. package/locales/ko.po +3 -0
  83. package/locales/locales.pot +36 -6
  84. package/locales/nl.po +3 -0
  85. package/locales/pl.po +3 -0
  86. package/locales/pt_BR.po +3 -0
  87. package/locales/zh_CN.po +3 -0
  88. package/locales/zh_TW.po +3 -0
  89. package/package.json +1 -1
  90. package/register-device/device-registration-view.component.d.ts +6 -1
  91. package/register-device/device-registration-view.component.d.ts.map +1 -1
  92. package/register-device/general/general-device-registration-button.component.d.ts +3 -3
  93. package/register-device/general/general-device-registration-button.component.d.ts.map +1 -1
  94. package/register-device/general/general-device-registration.component.d.ts +5 -0
  95. package/register-device/general/general-device-registration.component.d.ts.map +1 -1
  96. package/register-device/general/general-device-registration.service.d.ts +9 -0
  97. package/register-device/general/general-device-registration.service.d.ts.map +1 -0
  98. package/register-device/index.d.ts +1 -0
  99. package/register-device/index.d.ts.map +1 -1
@@ -147,11 +147,11 @@ export class AlarmsListComponent {
147
147
  this.activeChildParam$.subscribe();
148
148
  }
149
149
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AlarmsListComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.AlarmsViewService }, { token: i3.ContextRouteService }, { token: i1.Router }], target: i0.ɵɵFactoryTarget.Component }); }
150
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AlarmsListComponent, selector: "c8y-alarms-list", inputs: { alarms: "alarms", hasPermissions: "hasPermissions", typeFilters: "typeFilters", loadMoreMode: "loadMoreMode", navigationOptions: "navigationOptions", isInitialLoading: "isInitialLoading", splitView: "splitView" }, outputs: { onSelectedAlarm: "onSelectedAlarm", onScrollingStateChange: "onScrollingStateChange" }, viewQueries: [{ propertyName: "innerScrollWrapper", first: true, predicate: ["scrollWrapper"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"inner-scroll\"\n [ngClass]=\"{ 'split-view__list bg-level-1': splitView, 'bg-component': !splitView }\"\n data-cy=\"c8y-alarms-list\"\n #scrollWrapper\n>\n <div\n class=\"flex-wrap flex-no-shrink sticky-top m-b-16\"\n [ngClass]=\"{\n 'separator-bottom card-header p-b-0': splitView,\n 'd-flex fit-w separator-top-bottom widget-bar p-l-16 p-r-16':\n !splitView && navigationOptions.allowNavigationToAlarmsView\n }\"\n >\n <div\n class=\"h4 card-title\"\n *ngIf=\"splitView\"\n >\n {{ 'Alarms list' | translate }}\n </div>\n <div\n [ngClass]=\"{ 'fit-w d-flex a-i-center gap-16': !splitView, 'fit-h-20 m-l-auto': splitView }\"\n >\n <ng-content></ng-content>\n </div>\n <!-- Loading -->\n <div\n class=\"fit-w overflow-hidden\"\n [ngClass]=\"{ 'p-t-16': splitView }\"\n >\n <div\n class=\"loading-bar\"\n style=\"z-index: 101\"\n [ngClass]=\"{ active: isInitialLoading && !isEmptyListLoading }\"\n ></div>\n </div>\n\n <div\n class=\"alert alert-warning\"\n role=\"alert\"\n translate\n *ngIf=\"\n !isEmptyListLoading &&\n (activeChildParam$ | async) &&\n (activeAlarm$ | async)?.id !== (activeChildParam$ | async)\n \"\n >\n The selected alarm is not currently in the list, change your filter.\n </div>\n </div>\n <c8y-list-group\n class=\"p-r-16 interactive\"\n [ngStyle]=\"{ opacity: isInitialLoading && !isEmptyListLoading ? 0.2 : 1 }\"\n style=\"transition: opacity 0.15s linear\"\n data-cy=\"c8y-alarm-list--group\"\n >\n <c8y-li-timeline\n class=\"pointer\"\n role=\"button\"\n data-cy=\"c8y-alarm-list--timeline-repeat\"\n *c8yFor=\"let alarm of alarms; let i = index; pipe: mapAlarmLink; loadMore: loadMoreMode\"\n [routerLink]=\"navigationOptions.allowNavigationToAlarmsView ? alarm.link : null\"\n routerLinkActive=\"active\"\n [queryParamsHandling]=\"navigationOptions.queryParamsHandling\"\n (isActiveChange)=\"activeRouteChanged($event, liScrollAnchor, alarm)\"\n (click)=\"onAlarmOpen(alarm)\"\n [queryParams]=\"\n navigationOptions.includeClearedQueryParams\n ? { showCleared: alarm.status === 'CLEARED' }\n : {}\n \"\n >\n <span\n [attr.aria-label]=\"alarmLastOccurrenceLabel | translate\"\n [tooltip]=\"alarmLastOccurrenceLabel | translate\"\n placement=\"right\"\n container=\"body\"\n [delay]=\"500\"\n >\n {{ alarm.time | c8yDate: 'mediumDate' }}\n {{ alarm.time | c8yDate: 'mediumTime' }}\n </span>\n <c8y-li\n style=\"scroll-margin-top: 56px\"\n #liScrollAnchor\n >\n <c8y-li-icon class=\"a-s-start\">\n <div class=\"alarm-icons\">\n <c8y-alarms-icon [typeFilters]=\"typeFilters\" [alarm]=\"alarm\"></c8y-alarms-icon>\n </div>\n <button\n class=\"btn-clean text-center\"\n [attr.aria-label]=\"\n alarmBadgeTooltip\n | translate\n : { alarmFirstOccurrenceTime: alarm.firstOccurrenceTime | c8yDate: 'medium' }\n \"\n [tooltip]=\"\n alarmBadgeTooltip\n | translate\n : { alarmFirstOccurrenceTime: alarm.firstOccurrenceTime | c8yDate: 'medium' }\n \"\n placement=\"right\"\n container=\"body\"\n type=\"button\"\n *ngIf=\"alarm.firstOccurrenceTime\"\n (click)=\"$event.stopPropagation()\"\n [delay]=\"500\"\n >\n <span\n class=\"badge badge-info\"\n *ngIf=\"alarm.count > 1\"\n >\n {{ alarm.count }}\n </span>\n </button>\n </c8y-li-icon>\n <c8y-li-body class=\"a-s-stretch\">\n <div class=\"d-flex a-i-start fit-h\">\n <div class=\"min-width-0 flex-grow\">\n <p class=\"text-truncate-wrap p-b-4\">\n {{ alarm.text | translate }}\n </p>\n <div class=\"d-flex\">\n <p\n class=\"small text-muted text-truncate flex-grow\"\n [title]=\"alarm.source.name\"\n >\n <i [c8yIcon]=\"'exchange'\"></i>\n {{ alarm.source.name }}\n </p>\n <div class=\"d-flex\">\n <div\n [title]=\"item.title | translate\"\n *ngFor=\"let item of alarm | alarmListIndicator | async\"\n >\n <i\n [class]=\"item.class\"\n [c8yIcon]=\"item.icon\"\n ></i>\n </div>\n </div>\n </div>\n </div>\n </div>\n </c8y-li-body>\n </c8y-li>\n </c8y-li-timeline>\n <c8y-loading *ngIf=\"isInitialLoading && isEmptyListLoading\"></c8y-loading>\n <div\n class=\"p-relative p-l-24\"\n *ngIf=\"isEmptyListLoading && !isInitialLoading\"\n >\n <c8y-ui-empty-state\n [icon]=\"'c8y-alert-idle'\"\n [title]=\"'No alarms to display.' | translate\"\n data-cy=\"alarm-list--empty-state\"\n *ngIf=\"hasPermissions; else alertsA\"\n >\n <p c8y-guide-docs>\n <small\n translate\n ngNonBindable\n >\n Find out more in the\n <a\n c8y-guide-href=\"/docs/device-management-application/monitoring-and-controlling-devices/#working-with-alarms\"\n >\n user documentation\n </a>\n .\n </small>\n </p>\n </c8y-ui-empty-state>\n </div>\n </c8y-list-group>\n</div>\n\n<ng-template #alertsA>\n <c8y-dynamic-component-alerts [alerts]=\"alertAggregator\"></c8y-dynamic-component-alerts>\n</ng-template>\n", dependencies: [{ kind: "component", type: i3.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i3.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i3.ForOfDirective, selector: "[c8yFor]", inputs: ["c8yForOf", "c8yForLoadMore", "c8yForPipe", "c8yForNotFound", "c8yForMaxIterations", "c8yForLoadingTemplate", "c8yForLoadNextLabel", "c8yForLoadingLabel", "c8yForRealtime", "c8yForRealtimeOptions", "c8yForComparator", "c8yForEnableVirtualScroll", "c8yForVirtualScrollElementSize", "c8yForVirtualScrollStrategy", "c8yForVirtualScrollContainerHeight"], outputs: ["c8yForCount", "c8yForChange", "c8yForLoadMoreComponent"] }, { kind: "component", type: i3.LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "directive", type: i3.GuideHrefDirective, selector: "[c8y-guide-href]", inputs: ["c8y-guide-href"] }, { kind: "component", type: i3.GuideDocsComponent, selector: "[c8y-guide-docs]" }, { kind: "component", type: i3.DynamicComponentAlertsComponent, selector: "c8y-dynamic-component-alerts", inputs: ["alerts"] }, { kind: "component", type: i3.ListGroupComponent, selector: "c8y-list-group" }, { kind: "component", type: i3.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i3.ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "component", type: i3.ListItemBodyComponent, selector: "c8y-list-item-body, c8y-li-body", inputs: ["body"] }, { kind: "component", type: i3.ListItemTimelineComponent, selector: "c8y-list-item-timeline, c8y-li-timeline" }, { kind: "directive", type: i5.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "directive", type: i6.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i1.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "component", type: i7.AlarmsIconComponent, selector: "c8y-alarms-icon", inputs: ["alarm", "typeFilters"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.DatePipe, name: "c8yDate" }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }, { kind: "pipe", type: i8.AlarmListIndicatorPipe, name: "alarmListIndicator" }] }); }
150
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AlarmsListComponent, selector: "c8y-alarms-list", inputs: { alarms: "alarms", hasPermissions: "hasPermissions", typeFilters: "typeFilters", loadMoreMode: "loadMoreMode", navigationOptions: "navigationOptions", isInitialLoading: "isInitialLoading", splitView: "splitView" }, outputs: { onSelectedAlarm: "onSelectedAlarm", onScrollingStateChange: "onScrollingStateChange" }, viewQueries: [{ propertyName: "innerScrollWrapper", first: true, predicate: ["scrollWrapper"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"inner-scroll\"\n [ngClass]=\"{ 'split-view__list bg-level-1': splitView, 'bg-component': !splitView }\"\n data-cy=\"c8y-alarms-list\"\n #scrollWrapper\n>\n <div\n class=\"flex-wrap flex-no-shrink sticky-top m-b-16\"\n [ngClass]=\"{\n 'separator-bottom card-header p-b-0': splitView,\n 'd-flex fit-w separator-top-bottom widget-bar p-l-16 p-r-16':\n !splitView && navigationOptions.allowNavigationToAlarmsView\n }\"\n >\n <div\n class=\"h4 card-title\"\n *ngIf=\"splitView\"\n >\n {{ 'Alarms list' | translate }}\n </div>\n <div\n [ngClass]=\"{ 'fit-w d-flex a-i-center gap-16': !splitView, 'fit-h-20 m-l-auto': splitView }\"\n >\n <ng-content></ng-content>\n </div>\n <!-- Loading -->\n <div\n class=\"fit-w overflow-hidden\"\n [ngClass]=\"{ 'p-t-16': splitView }\"\n >\n <div\n class=\"loading-bar\"\n data-cy=\"c8y-alarms-list--loading-bar\"\n style=\"z-index: 101\"\n [ngClass]=\"{ active: isInitialLoading && !isEmptyListLoading }\"\n ></div>\n </div>\n\n <div\n class=\"alert alert-warning\"\n role=\"alert\"\n translate\n *ngIf=\"\n !isEmptyListLoading &&\n (activeChildParam$ | async) &&\n (activeAlarm$ | async)?.id !== (activeChildParam$ | async)\n \"\n >\n The selected alarm is not currently in the list, change your filter.\n </div>\n </div>\n <c8y-list-group\n class=\"p-r-16 interactive\"\n [ngStyle]=\"{ opacity: isInitialLoading && !isEmptyListLoading ? 0.2 : 1 }\"\n style=\"transition: opacity 0.15s linear\"\n data-cy=\"c8y-alarms-list--group\"\n >\n <c8y-li-timeline\n class=\"pointer\"\n role=\"button\"\n data-cy=\"c8y-alarms-list--timeline-repeat\"\n *c8yFor=\"let alarm of alarms; let i = index; pipe: mapAlarmLink; loadMore: loadMoreMode\"\n [routerLink]=\"navigationOptions.allowNavigationToAlarmsView ? alarm.link : null\"\n routerLinkActive=\"active\"\n [queryParamsHandling]=\"navigationOptions.queryParamsHandling\"\n (isActiveChange)=\"activeRouteChanged($event, liScrollAnchor, alarm)\"\n (click)=\"onAlarmOpen(alarm)\"\n [queryParams]=\"\n navigationOptions.includeClearedQueryParams\n ? { showCleared: alarm.status === 'CLEARED' }\n : {}\n \"\n >\n <span\n [attr.aria-label]=\"alarmLastOccurrenceLabel | translate\"\n [tooltip]=\"alarmLastOccurrenceLabel | translate\"\n placement=\"right\"\n data-cy=\"c8y-alarms-list--last-occurrence-date\"\n container=\"body\"\n [delay]=\"500\"\n >\n {{ alarm.time | c8yDate: 'mediumDate' }}\n {{ alarm.time | c8yDate: 'mediumTime' }}\n </span>\n <c8y-li\n style=\"scroll-margin-top: 56px\"\n #liScrollAnchor\n >\n <c8y-li-icon class=\"a-s-start\">\n <div class=\"alarm-icons\">\n <c8y-alarms-icon [typeFilters]=\"typeFilters\" [alarm]=\"alarm\"></c8y-alarms-icon>\n </div>\n <button\n class=\"btn-clean text-center\"\n data-cy=\"c8y-alarms-list--badge\"\n [attr.aria-label]=\"\n alarmBadgeTooltip\n | translate\n : { alarmFirstOccurrenceTime: alarm.firstOccurrenceTime | c8yDate: 'medium' }\n \"\n [tooltip]=\"\n alarmBadgeTooltip\n | translate\n : { alarmFirstOccurrenceTime: alarm.firstOccurrenceTime | c8yDate: 'medium' }\n \"\n placement=\"right\"\n container=\"body\"\n type=\"button\"\n *ngIf=\"alarm.firstOccurrenceTime\"\n (click)=\"$event.stopPropagation()\"\n [delay]=\"500\"\n >\n <span\n class=\"badge badge-info\"\n *ngIf=\"alarm.count > 1\"\n >\n {{ alarm.count }}\n </span>\n </button>\n </c8y-li-icon>\n <c8y-li-body class=\"a-s-stretch\">\n <div class=\"d-flex a-i-start fit-h\">\n <div class=\"min-width-0 flex-grow\">\n <p class=\"text-truncate-wrap p-b-4\" data-cy=\"c8y-alarms-list--alarm-text\">\n {{ alarm.text | translate }}\n </p>\n <div class=\"d-flex\">\n <p\n class=\"small text-muted text-truncate flex-grow\"\n [title]=\"alarm.source.name\"\n data-cy=\"c8y-alarms-list--alarm-source-name\"\n >\n <i [c8yIcon]=\"'exchange'\"></i>\n {{ alarm.source.name }}\n </p>\n <div class=\"d-flex\">\n <div\n [title]=\"item.title | translate\"\n *ngFor=\"let item of alarm | alarmListIndicator | async\"\n >\n <i\n [class]=\"item.class\"\n [c8yIcon]=\"item.icon\"\n ></i>\n </div>\n </div>\n </div>\n </div>\n </div>\n </c8y-li-body>\n </c8y-li>\n </c8y-li-timeline>\n <c8y-loading\n data-cy=\"c8y-alarms-list--c8y-loading\"\n *ngIf=\"isInitialLoading && isEmptyListLoading\"></c8y-loading>\n <div\n class=\"p-relative p-l-24\"\n *ngIf=\"isEmptyListLoading && !isInitialLoading\"\n >\n <c8y-ui-empty-state\n [icon]=\"'c8y-alert-idle'\"\n [title]=\"'No alarms to display.' | translate\"\n data-cy=\"c8y-alarms-list--empty-state\"\n *ngIf=\"hasPermissions; else alertsA\"\n >\n <p c8y-guide-docs>\n <small\n translate\n ngNonBindable\n >\n Find out more in the\n <a\n c8y-guide-href=\"/docs/device-management-application/monitoring-and-controlling-devices/#working-with-alarms\"\n >\n user documentation\n </a>\n .\n </small>\n </p>\n </c8y-ui-empty-state>\n </div>\n </c8y-list-group>\n</div>\n\n<ng-template #alertsA>\n <c8y-dynamic-component-alerts [alerts]=\"alertAggregator\"></c8y-dynamic-component-alerts>\n</ng-template>\n", dependencies: [{ kind: "component", type: i3.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i3.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i3.ForOfDirective, selector: "[c8yFor]", inputs: ["c8yForOf", "c8yForLoadMore", "c8yForPipe", "c8yForNotFound", "c8yForMaxIterations", "c8yForLoadingTemplate", "c8yForLoadNextLabel", "c8yForLoadingLabel", "c8yForRealtime", "c8yForRealtimeOptions", "c8yForComparator", "c8yForEnableVirtualScroll", "c8yForVirtualScrollElementSize", "c8yForVirtualScrollStrategy", "c8yForVirtualScrollContainerHeight"], outputs: ["c8yForCount", "c8yForChange", "c8yForLoadMoreComponent"] }, { kind: "component", type: i3.LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "directive", type: i3.GuideHrefDirective, selector: "[c8y-guide-href]", inputs: ["c8y-guide-href"] }, { kind: "component", type: i3.GuideDocsComponent, selector: "[c8y-guide-docs]" }, { kind: "component", type: i3.DynamicComponentAlertsComponent, selector: "c8y-dynamic-component-alerts", inputs: ["alerts"] }, { kind: "component", type: i3.ListGroupComponent, selector: "c8y-list-group" }, { kind: "component", type: i3.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i3.ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "component", type: i3.ListItemBodyComponent, selector: "c8y-list-item-body, c8y-li-body", inputs: ["body"] }, { kind: "component", type: i3.ListItemTimelineComponent, selector: "c8y-list-item-timeline, c8y-li-timeline" }, { kind: "directive", type: i5.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "directive", type: i6.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i1.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "component", type: i7.AlarmsIconComponent, selector: "c8y-alarms-icon", inputs: ["alarm", "typeFilters"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.DatePipe, name: "c8yDate" }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }, { kind: "pipe", type: i8.AlarmListIndicatorPipe, name: "alarmListIndicator" }] }); }
151
151
  }
152
152
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AlarmsListComponent, decorators: [{
153
153
  type: Component,
154
- args: [{ selector: 'c8y-alarms-list', template: "<div\n class=\"inner-scroll\"\n [ngClass]=\"{ 'split-view__list bg-level-1': splitView, 'bg-component': !splitView }\"\n data-cy=\"c8y-alarms-list\"\n #scrollWrapper\n>\n <div\n class=\"flex-wrap flex-no-shrink sticky-top m-b-16\"\n [ngClass]=\"{\n 'separator-bottom card-header p-b-0': splitView,\n 'd-flex fit-w separator-top-bottom widget-bar p-l-16 p-r-16':\n !splitView && navigationOptions.allowNavigationToAlarmsView\n }\"\n >\n <div\n class=\"h4 card-title\"\n *ngIf=\"splitView\"\n >\n {{ 'Alarms list' | translate }}\n </div>\n <div\n [ngClass]=\"{ 'fit-w d-flex a-i-center gap-16': !splitView, 'fit-h-20 m-l-auto': splitView }\"\n >\n <ng-content></ng-content>\n </div>\n <!-- Loading -->\n <div\n class=\"fit-w overflow-hidden\"\n [ngClass]=\"{ 'p-t-16': splitView }\"\n >\n <div\n class=\"loading-bar\"\n style=\"z-index: 101\"\n [ngClass]=\"{ active: isInitialLoading && !isEmptyListLoading }\"\n ></div>\n </div>\n\n <div\n class=\"alert alert-warning\"\n role=\"alert\"\n translate\n *ngIf=\"\n !isEmptyListLoading &&\n (activeChildParam$ | async) &&\n (activeAlarm$ | async)?.id !== (activeChildParam$ | async)\n \"\n >\n The selected alarm is not currently in the list, change your filter.\n </div>\n </div>\n <c8y-list-group\n class=\"p-r-16 interactive\"\n [ngStyle]=\"{ opacity: isInitialLoading && !isEmptyListLoading ? 0.2 : 1 }\"\n style=\"transition: opacity 0.15s linear\"\n data-cy=\"c8y-alarm-list--group\"\n >\n <c8y-li-timeline\n class=\"pointer\"\n role=\"button\"\n data-cy=\"c8y-alarm-list--timeline-repeat\"\n *c8yFor=\"let alarm of alarms; let i = index; pipe: mapAlarmLink; loadMore: loadMoreMode\"\n [routerLink]=\"navigationOptions.allowNavigationToAlarmsView ? alarm.link : null\"\n routerLinkActive=\"active\"\n [queryParamsHandling]=\"navigationOptions.queryParamsHandling\"\n (isActiveChange)=\"activeRouteChanged($event, liScrollAnchor, alarm)\"\n (click)=\"onAlarmOpen(alarm)\"\n [queryParams]=\"\n navigationOptions.includeClearedQueryParams\n ? { showCleared: alarm.status === 'CLEARED' }\n : {}\n \"\n >\n <span\n [attr.aria-label]=\"alarmLastOccurrenceLabel | translate\"\n [tooltip]=\"alarmLastOccurrenceLabel | translate\"\n placement=\"right\"\n container=\"body\"\n [delay]=\"500\"\n >\n {{ alarm.time | c8yDate: 'mediumDate' }}\n {{ alarm.time | c8yDate: 'mediumTime' }}\n </span>\n <c8y-li\n style=\"scroll-margin-top: 56px\"\n #liScrollAnchor\n >\n <c8y-li-icon class=\"a-s-start\">\n <div class=\"alarm-icons\">\n <c8y-alarms-icon [typeFilters]=\"typeFilters\" [alarm]=\"alarm\"></c8y-alarms-icon>\n </div>\n <button\n class=\"btn-clean text-center\"\n [attr.aria-label]=\"\n alarmBadgeTooltip\n | translate\n : { alarmFirstOccurrenceTime: alarm.firstOccurrenceTime | c8yDate: 'medium' }\n \"\n [tooltip]=\"\n alarmBadgeTooltip\n | translate\n : { alarmFirstOccurrenceTime: alarm.firstOccurrenceTime | c8yDate: 'medium' }\n \"\n placement=\"right\"\n container=\"body\"\n type=\"button\"\n *ngIf=\"alarm.firstOccurrenceTime\"\n (click)=\"$event.stopPropagation()\"\n [delay]=\"500\"\n >\n <span\n class=\"badge badge-info\"\n *ngIf=\"alarm.count > 1\"\n >\n {{ alarm.count }}\n </span>\n </button>\n </c8y-li-icon>\n <c8y-li-body class=\"a-s-stretch\">\n <div class=\"d-flex a-i-start fit-h\">\n <div class=\"min-width-0 flex-grow\">\n <p class=\"text-truncate-wrap p-b-4\">\n {{ alarm.text | translate }}\n </p>\n <div class=\"d-flex\">\n <p\n class=\"small text-muted text-truncate flex-grow\"\n [title]=\"alarm.source.name\"\n >\n <i [c8yIcon]=\"'exchange'\"></i>\n {{ alarm.source.name }}\n </p>\n <div class=\"d-flex\">\n <div\n [title]=\"item.title | translate\"\n *ngFor=\"let item of alarm | alarmListIndicator | async\"\n >\n <i\n [class]=\"item.class\"\n [c8yIcon]=\"item.icon\"\n ></i>\n </div>\n </div>\n </div>\n </div>\n </div>\n </c8y-li-body>\n </c8y-li>\n </c8y-li-timeline>\n <c8y-loading *ngIf=\"isInitialLoading && isEmptyListLoading\"></c8y-loading>\n <div\n class=\"p-relative p-l-24\"\n *ngIf=\"isEmptyListLoading && !isInitialLoading\"\n >\n <c8y-ui-empty-state\n [icon]=\"'c8y-alert-idle'\"\n [title]=\"'No alarms to display.' | translate\"\n data-cy=\"alarm-list--empty-state\"\n *ngIf=\"hasPermissions; else alertsA\"\n >\n <p c8y-guide-docs>\n <small\n translate\n ngNonBindable\n >\n Find out more in the\n <a\n c8y-guide-href=\"/docs/device-management-application/monitoring-and-controlling-devices/#working-with-alarms\"\n >\n user documentation\n </a>\n .\n </small>\n </p>\n </c8y-ui-empty-state>\n </div>\n </c8y-list-group>\n</div>\n\n<ng-template #alertsA>\n <c8y-dynamic-component-alerts [alerts]=\"alertAggregator\"></c8y-dynamic-component-alerts>\n</ng-template>\n" }]
154
+ args: [{ selector: 'c8y-alarms-list', template: "<div\n class=\"inner-scroll\"\n [ngClass]=\"{ 'split-view__list bg-level-1': splitView, 'bg-component': !splitView }\"\n data-cy=\"c8y-alarms-list\"\n #scrollWrapper\n>\n <div\n class=\"flex-wrap flex-no-shrink sticky-top m-b-16\"\n [ngClass]=\"{\n 'separator-bottom card-header p-b-0': splitView,\n 'd-flex fit-w separator-top-bottom widget-bar p-l-16 p-r-16':\n !splitView && navigationOptions.allowNavigationToAlarmsView\n }\"\n >\n <div\n class=\"h4 card-title\"\n *ngIf=\"splitView\"\n >\n {{ 'Alarms list' | translate }}\n </div>\n <div\n [ngClass]=\"{ 'fit-w d-flex a-i-center gap-16': !splitView, 'fit-h-20 m-l-auto': splitView }\"\n >\n <ng-content></ng-content>\n </div>\n <!-- Loading -->\n <div\n class=\"fit-w overflow-hidden\"\n [ngClass]=\"{ 'p-t-16': splitView }\"\n >\n <div\n class=\"loading-bar\"\n data-cy=\"c8y-alarms-list--loading-bar\"\n style=\"z-index: 101\"\n [ngClass]=\"{ active: isInitialLoading && !isEmptyListLoading }\"\n ></div>\n </div>\n\n <div\n class=\"alert alert-warning\"\n role=\"alert\"\n translate\n *ngIf=\"\n !isEmptyListLoading &&\n (activeChildParam$ | async) &&\n (activeAlarm$ | async)?.id !== (activeChildParam$ | async)\n \"\n >\n The selected alarm is not currently in the list, change your filter.\n </div>\n </div>\n <c8y-list-group\n class=\"p-r-16 interactive\"\n [ngStyle]=\"{ opacity: isInitialLoading && !isEmptyListLoading ? 0.2 : 1 }\"\n style=\"transition: opacity 0.15s linear\"\n data-cy=\"c8y-alarms-list--group\"\n >\n <c8y-li-timeline\n class=\"pointer\"\n role=\"button\"\n data-cy=\"c8y-alarms-list--timeline-repeat\"\n *c8yFor=\"let alarm of alarms; let i = index; pipe: mapAlarmLink; loadMore: loadMoreMode\"\n [routerLink]=\"navigationOptions.allowNavigationToAlarmsView ? alarm.link : null\"\n routerLinkActive=\"active\"\n [queryParamsHandling]=\"navigationOptions.queryParamsHandling\"\n (isActiveChange)=\"activeRouteChanged($event, liScrollAnchor, alarm)\"\n (click)=\"onAlarmOpen(alarm)\"\n [queryParams]=\"\n navigationOptions.includeClearedQueryParams\n ? { showCleared: alarm.status === 'CLEARED' }\n : {}\n \"\n >\n <span\n [attr.aria-label]=\"alarmLastOccurrenceLabel | translate\"\n [tooltip]=\"alarmLastOccurrenceLabel | translate\"\n placement=\"right\"\n data-cy=\"c8y-alarms-list--last-occurrence-date\"\n container=\"body\"\n [delay]=\"500\"\n >\n {{ alarm.time | c8yDate: 'mediumDate' }}\n {{ alarm.time | c8yDate: 'mediumTime' }}\n </span>\n <c8y-li\n style=\"scroll-margin-top: 56px\"\n #liScrollAnchor\n >\n <c8y-li-icon class=\"a-s-start\">\n <div class=\"alarm-icons\">\n <c8y-alarms-icon [typeFilters]=\"typeFilters\" [alarm]=\"alarm\"></c8y-alarms-icon>\n </div>\n <button\n class=\"btn-clean text-center\"\n data-cy=\"c8y-alarms-list--badge\"\n [attr.aria-label]=\"\n alarmBadgeTooltip\n | translate\n : { alarmFirstOccurrenceTime: alarm.firstOccurrenceTime | c8yDate: 'medium' }\n \"\n [tooltip]=\"\n alarmBadgeTooltip\n | translate\n : { alarmFirstOccurrenceTime: alarm.firstOccurrenceTime | c8yDate: 'medium' }\n \"\n placement=\"right\"\n container=\"body\"\n type=\"button\"\n *ngIf=\"alarm.firstOccurrenceTime\"\n (click)=\"$event.stopPropagation()\"\n [delay]=\"500\"\n >\n <span\n class=\"badge badge-info\"\n *ngIf=\"alarm.count > 1\"\n >\n {{ alarm.count }}\n </span>\n </button>\n </c8y-li-icon>\n <c8y-li-body class=\"a-s-stretch\">\n <div class=\"d-flex a-i-start fit-h\">\n <div class=\"min-width-0 flex-grow\">\n <p class=\"text-truncate-wrap p-b-4\" data-cy=\"c8y-alarms-list--alarm-text\">\n {{ alarm.text | translate }}\n </p>\n <div class=\"d-flex\">\n <p\n class=\"small text-muted text-truncate flex-grow\"\n [title]=\"alarm.source.name\"\n data-cy=\"c8y-alarms-list--alarm-source-name\"\n >\n <i [c8yIcon]=\"'exchange'\"></i>\n {{ alarm.source.name }}\n </p>\n <div class=\"d-flex\">\n <div\n [title]=\"item.title | translate\"\n *ngFor=\"let item of alarm | alarmListIndicator | async\"\n >\n <i\n [class]=\"item.class\"\n [c8yIcon]=\"item.icon\"\n ></i>\n </div>\n </div>\n </div>\n </div>\n </div>\n </c8y-li-body>\n </c8y-li>\n </c8y-li-timeline>\n <c8y-loading\n data-cy=\"c8y-alarms-list--c8y-loading\"\n *ngIf=\"isInitialLoading && isEmptyListLoading\"></c8y-loading>\n <div\n class=\"p-relative p-l-24\"\n *ngIf=\"isEmptyListLoading && !isInitialLoading\"\n >\n <c8y-ui-empty-state\n [icon]=\"'c8y-alert-idle'\"\n [title]=\"'No alarms to display.' | translate\"\n data-cy=\"c8y-alarms-list--empty-state\"\n *ngIf=\"hasPermissions; else alertsA\"\n >\n <p c8y-guide-docs>\n <small\n translate\n ngNonBindable\n >\n Find out more in the\n <a\n c8y-guide-href=\"/docs/device-management-application/monitoring-and-controlling-devices/#working-with-alarms\"\n >\n user documentation\n </a>\n .\n </small>\n </p>\n </c8y-ui-empty-state>\n </div>\n </c8y-list-group>\n</div>\n\n<ng-template #alertsA>\n <c8y-dynamic-component-alerts [alerts]=\"alertAggregator\"></c8y-dynamic-component-alerts>\n</ng-template>\n" }]
155
155
  }], ctorParameters: () => [{ type: i1.ActivatedRoute }, { type: i2.AlarmsViewService }, { type: i3.ContextRouteService }, { type: i1.Router }], propDecorators: { alarms: [{
156
156
  type: Input
157
157
  }], hasPermissions: [{
@@ -174,4 +174,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
174
174
  type: ViewChild,
175
175
  args: ['scrollWrapper']
176
176
  }] } });
177
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxhcm1zLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vYWxhcm1zL2FsYXJtcy1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL2FsYXJtcy9hbGFybXMtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFFTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFeEUsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixxQkFBcUIsRUFDckIsK0JBQStCLEVBRy9CLE9BQU8sRUFDUixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdFLE9BQU8sRUFDTCxZQUFZLEVBQ1osb0JBQW9CLEVBQ3BCLE1BQU0sRUFDTixHQUFHLEVBQ0gsV0FBVyxFQUNYLFNBQVMsRUFDVCxTQUFTLEVBQ1YsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7Ozs7OztBQVExRCxNQUFNLE9BQU8sbUJBQW1CO0lBbUc5QixZQUNVLGNBQThCLEVBQzlCLGlCQUFvQyxFQUNwQyxtQkFBd0MsRUFDeEMsTUFBYztRQUhkLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDeEMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQXRHZixzQkFBaUIsR0FBRyxPQUFPLENBQ2xDLHVIQUF1SCxDQUN4SCxD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d0luaXQsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIE5hdmlnYXRpb25FbmQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBJQWxhcm0sIElSZXN1bHRMaXN0IH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHtcbiAgQ29udGV4dFJvdXRlU2VydmljZSxcbiAgRHluYW1pY0NvbXBvbmVudEFsZXJ0LFxuICBEeW5hbWljQ29tcG9uZW50QWxlcnRBZ2dyZWdhdG9yLFxuICBMaXN0SXRlbUNvbXBvbmVudCxcbiAgTG9hZE1vcmVNb2RlLFxuICBnZXR0ZXh0XG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBmcm9tRXZlbnQsIHBpcGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIGRlYm91bmNlVGltZSxcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIGZpbHRlcixcbiAgbWFwLFxuICBzaGFyZVJlcGxheSxcbiAgc3dpdGNoTWFwLFxuICB0YWtlVW50aWxcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQWxhcm1zVmlld1NlcnZpY2UgfSBmcm9tICcuL2FsYXJtcy12aWV3LnNlcnZpY2UnO1xuaW1wb3J0IHsgQWxhcm1OYXZpZ2F0aW9uT3B0aW9ucyB9IGZyb20gJy4vYWxhcm1zLm1vZGVsJztcbmltcG9ydCB7IEFsYXJtRGV0YWlscyB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvYWxhcm0tZXZlbnQtc2VsZWN0b3InO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktYWxhcm1zLWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vYWxhcm1zLWxpc3QuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEFsYXJtc0xpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIHJlYWRvbmx5IGFsYXJtQmFkZ2VUb29sdGlwID0gZ2V0dGV4dChcbiAgICAnTnVtYmVyIG9mIG9jY3VycmVuY2VzYG51bWJlciBvZiBvY2N1cnJlbmNlcyBvZiBhbGFybWAuIEZpcnN0IG9jY3VycmVuY2Uge3sgYWxhcm1GaXJzdE9jY3VycmVuY2VUaW1lIH19IChkZXZpY2UgdGltZSkuJ1xuICApO1xuICByZWFkb25seSBhbGFybUxhc3RPY2N1cnJlbmNlTGFiZWwgPSBnZXR0ZXh0KCdMYXN0IG9jY3VycmVuY2Ugb2YgdGhpcyBhbGFybSAoZGV2aWNlIHRpbWUpLicpO1xuXG4gIC8qKlxuICAgKiBJbnB1dCBwcm9wZXJ0eSBmb3IgcmVjZWl2aW5nIGEgbGlzdCBvZiBhbGFybXMuXG4gICAqL1xuICBASW5wdXQoKVxuICBhbGFybXM6IElSZXN1bHRMaXN0PElBbGFybSAmIHsgbGluaz86IHN0cmluZyB9PjtcblxuICBASW5wdXQoKSBoYXNQZXJtaXNzaW9ucyA9IHRydWU7XG5cbiAgLyoqXG4gICAqIElucHV0IHByb3BlcnR5IGZvciB0aGUgY3VycmVudGx5IGFwcGxpZWQgdHlwZSBmaWx0ZXJzLlxuICAgKi9cbiAgQElucHV0KClcbiAgdHlwZUZpbHRlcnM6IEFsYXJtRGV0YWlsc1tdID0gW107XG5cbiAgLyoqXG4gICAqIElucHV0IHByb3BlcnR5IGZvciByZWNlaXZpbmcgbG9hZCBtb3JlIG1vZGUuXG4gICAqL1xuICBASW5wdXQoKVxuICBsb2FkTW9yZU1vZGU6IExvYWRNb3JlTW9kZSA9ICdoaWRkZW4nO1xuXG4gIC8qKlxuICAgKiBEZWZpbmVzIG9wdGlvbnMsIGhvdyB0aGUgYWxhcm0gbGlzdCBzaG91bGQgYmUgbmF2aWdhdGVkIGlmIGEgdXNlclxuICAgKiBjbGlja3Mgb24gYW4gYWxhcm0uXG4gICAqL1xuICBASW5wdXQoKVxuICBuYXZpZ2F0aW9uT3B0aW9uczogQWxhcm1OYXZpZ2F0aW9uT3B0aW9ucyA9IHtcbiAgICBhbGxvd05hdmlnYXRpb25Ub0FsYXJtc1ZpZXc6IHRydWUsXG4gICAgYWx3YXlzTmF2aWdhdGVUb0FsbEFsYXJtczogZmFsc2UsXG4gICAgaW5jbHVkZUNsZWFyZWRRdWVyeVBhcmFtczogZmFsc2UsXG4gICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJ1xuICB9O1xuXG4gIC8qKlxuICAgKiBDb250cm9scyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgbG9hZGluZyBiYXJcbiAgICogV2hlbiBzZXQgdG8gYGZhbHNlYCwgdGhlIGFsYXJtIGxpc3QgaXMgZGlzcGxheWVkLiBXaGVuIHNldCB0byBgdHJ1ZWAsIHRoZSBvcGFjaXR5IG9mIGFsYXJtcyBsaXN0IGlzIGNoYW5nZWQgYW5kIGEgbG9hZGluZyBiYXIgaXMgc2hvd24uXG4gICAqL1xuICBASW5wdXQoKVxuICBpc0luaXRpYWxMb2FkaW5nID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIENvbnRyb2xzIHRoZSB2aXNpYmlsaXR5IGFuZCBmdW5jdGlvbmFsaXR5IG9mIHNvbWUgY29tcG9uZW50c1xuICAgKiBXaGVuIHNldCB0byBgdHJ1ZWAsIG1lYW5zIHRoZSBsaXN0IGlzIGRpc3BsYXllZCBpbiBhIHNwbGl0IHZpZXcgbGF5b3V0OlxuICAgKiB0aGUgbGlzdCBvbiB0aGUgZmlyc3QgY29sdW1uIGFuZCB0aGUgc2VsZWN0ZWQgcmVjb3JkIGRldGFpbCBvbiB0aGUgc2Vjb25kIGNvbHVtbiAodGhlIGNvY2twaXRcbiAgICogYWxhcm1zIHZpZXcgZm9yIGV4YW1wbGUpXG4gICAqIFdoZW4gc2V0IHRvIGZhbHNlLCB0aGUgbGlzdCBpcyBkaXNwbGF5ZWQgYXMgYSBzdGFuZGFsb25lIGNvbXBvbmVudCwgb3BlbmluZyB0aGUgZGV0YWlsIHdpbGxcbiAgICogcmVkaXJlY3QgdG8gdGhlIGFsYXJtc1xuICAgKi9cbiAgQElucHV0KClcbiAgc3BsaXRWaWV3ID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEVtaXRzIGFuIGluc3RhbmNlIG9mIGEgc2VsZWN0ZWQgYWxhcm0gd2hlbiBvbmUgaXMgY2hvc2VuIGZyb20gdGhlIGxpc3QuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgb25TZWxlY3RlZEFsYXJtID0gbmV3IEV2ZW50RW1pdHRlcjxJQWxhcm0+KCk7XG5cbiAgLyoqXG4gICAqIEVtaXRzIGEgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIHRoZSBzY3JvbGxpbmcgc3RhdGU6IHRydWUgd2hlbiB0aGUgdXNlciBzdGFydHMgc2Nyb2xsaW5nLCBhbmQgZmFsc2Ugd2hlbiB0aGUgdXNlciByZWFjaGVzIHRoZSB0b3Agb2YgdGhlIGxpc3QuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgb25TY3JvbGxpbmdTdGF0ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAvKipcbiAgICogQ3VycmVudCBhbGFybSBvciBsYXN0IGFsYXJtIG1hcmtlZCBhcyBhY3RpdmUgYnkgdGhlIHJvdXRlckxpbmtBY3RpdmUgZGlyZWN0aXZlLlxuICAgKi9cbiAgYWN0aXZlQWxhcm0kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJQWxhcm0+KG51bGwpO1xuICBhY3RpdmVDaGlsZFBhcmFtJCA9IG5ldyBPYnNlcnZhYmxlPHN0cmluZz4oKTtcblxuICBAVmlld0NoaWxkKCdzY3JvbGxXcmFwcGVyJylcbiAgaW5uZXJTY3JvbGxXcmFwcGVyOiBFbGVtZW50UmVmO1xuXG4gIGlzU2Nyb2xsaW5nID0gZmFsc2U7XG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGM4eS1sb2FkaW5nIGNvbXBvbmVudCBzaG91bGQgYmUgZGlzcGxheWVkLlxuICAgKiBUaGUgbG9hZGluZyBjb21wb25lbnQgaXMgc2hvd24gd2hlbiBubyBhbGFybXMgYXJlIGRpc3BsYXllZCBpbiB0aGUgdmlldyBvciB3aGVuIHRoZSByZXF1ZXN0IGlzIGluaXRpYWwsXG4gICAqIGFzIHdlIGRvbid0IHdhbnQgdG8gc2VlIGVtcHR5IHNwYWNlIG9uIGFsYXJtIGxpc3QgZHVyaW5nIGxvYWRpbmcuXG4gICAqL1xuICBpc0VtcHR5TGlzdExvYWRpbmcgPSB0cnVlO1xuXG4gIGFsZXJ0QWdncmVnYXRvciA9IG5ldyBEeW5hbWljQ29tcG9uZW50QWxlcnRBZ2dyZWdhdG9yKCk7XG5cbiAgbWFwQWxhcm1MaW5rID0gcGlwZShcbiAgICBtYXAoKGFsYXJtczogSUFsYXJtW10pID0+XG4gICAgICBhbGFybXMubWFwKChhbGFybTogSUFsYXJtKSA9PiB7XG4gICAgICAgIGFsYXJtLmxpbmsgPSB0aGlzLmdldFJvdXRlckxpbmsoYWxhcm0pO1xuICAgICAgICByZXR1cm4gYWxhcm07XG4gICAgICB9KVxuICAgIClcbiAgKTtcblxuICBwcml2YXRlIGRlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBISURFX0lOVEVSVkFMX0NPVU5URE9XTl9TQ1JPTEwgPSA1MDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIGFsYXJtc1ZpZXdTZXJ2aWNlOiBBbGFybXNWaWV3U2VydmljZSxcbiAgICBwcml2YXRlIGNvbnRleHRSb3V0ZVNlcnZpY2U6IENvbnRleHRSb3V0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlclxuICApIHtcbiAgICB0aGlzLnZlcmlmeUlmRmlsdGVyc01hdGNoaW5nQWxhcm0oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIHRoZSBjaGFuZ2Ugb2YgdGhlIGFjdGl2ZSByb3V0ZS5cbiAgICpcbiAgICogQHBhcmFtIGlzQWN0aXZlIC0gQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgcm91dGUgaXMgYWN0aXZlIG9yIG5vdC5cbiAgICogQHBhcmFtIHNjcm9sbEFuY2hvciAtIFRoZSBMaXN0SXRlbUNvbXBvbmVudCB1c2VkIGFzIGEgc2Nyb2xsIGFuY2hvci5cbiAgICogQHBhcmFtIGFsYXJtIC0gVGhlIElBbGFybSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBhY3RpdmUgYWxhcm0uXG4gICAqL1xuICBhY3RpdmVSb3V0ZUNoYW5nZWQoaXNBY3RpdmU6IGJvb2xlYW4sIHNjcm9sbEFuY2hvcjogTGlzdEl0ZW1Db21wb25lbnQsIGFsYXJtOiBJQWxhcm0pOiB2b2lkIHtcbiAgICBpZiAoaXNBY3RpdmUpIHtcbiAgICAgIHNjcm9sbEFuY2hvci5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoe1xuICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgICAgIGJsb2NrOiAnbmVhcmVzdCdcbiAgICAgIH0pO1xuICAgICAgdGhpcy5hY3RpdmVBbGFybSQubmV4dChhbGFybSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmFsYXJtcyAmJiBjaGFuZ2VzLmFsYXJtcykge1xuICAgICAgdGhpcy5hY3RpdmVBbGFybSQubmV4dChudWxsKTtcbiAgICAgIHRoaXMuaXNFbXB0eUxpc3RMb2FkaW5nID0gIXRoaXMuYWxhcm1zPy5kYXRhPy5sZW5ndGg7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXMuaGFzUGVybWlzc2lvbnM/LmN1cnJlbnRWYWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuYWxlcnRBZ2dyZWdhdG9yLmFkZEFsZXJ0cyhcbiAgICAgICAgbmV3IER5bmFtaWNDb21wb25lbnRBbGVydCh7XG4gICAgICAgICAgdHlwZTogJ3N5c3RlbScsXG4gICAgICAgICAgdGV4dDogZ2V0dGV4dChcIllvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gdmlldyBhbGFybXMuXCIpXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hbGFybXNWaWV3U2VydmljZS5pc0ludGVydmFsUmVmcmVzaCgpKSB7XG4gICAgICBjb25zdCBzY3JvbGxFbGVtZW50ID0gdGhpcy5pbm5lclNjcm9sbFdyYXBwZXIubmF0aXZlRWxlbWVudDtcbiAgICAgIGZyb21FdmVudChzY3JvbGxFbGVtZW50LCAnc2Nyb2xsJylcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLCBkZWJvdW5jZVRpbWUoMzAwKSlcbiAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgIHRoaXMuaXNTY3JvbGxpbmcgPSB0aGlzLnNob3VsZENvdW50ZG93bkludGVydmFsQmVIaWRkZW4odGFyZ2V0KTtcbiAgICAgICAgICB0aGlzLm9uU2Nyb2xsaW5nU3RhdGVDaGFuZ2UuZW1pdCh0aGlzLmlzU2Nyb2xsaW5nKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgb25BbGFybU9wZW4oYWxhcm06IElBbGFybSk6IHZvaWQge1xuICAgIHRoaXMub25TZWxlY3RlZEFsYXJtLmVtaXQoYWxhcm0pO1xuICB9XG5cbiAgZ2V0Um91dGVyTGluayhhbGFybTogSUFsYXJtKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5uYXZpZ2F0aW9uT3B0aW9ucy5hbHdheXNOYXZpZ2F0ZVRvQWxsQWxhcm1zKSB7XG4gICAgICByZXR1cm4gdGhpcy5hbGFybXNWaWV3U2VydmljZS5nZXRSb3V0ZXJMaW5rKG51bGwsIGFsYXJtKTtcbiAgICB9XG4gICAgY29uc3QgY29udGV4dERhdGEgPSB0aGlzLmNvbnRleHRSb3V0ZVNlcnZpY2UuZ2V0Q29udGV4dERhdGEodGhpcy5hY3RpdmF0ZWRSb3V0ZSk7XG4gICAgcmV0dXJuIHRoaXMuYWxhcm1zVmlld1NlcnZpY2UuZ2V0Um91dGVyTGluayhjb250ZXh0RGF0YSwgYWxhcm0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG91bGRDb3VudGRvd25JbnRlcnZhbEJlSGlkZGVuKHRhcmdldDogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICBjb25zdCBzY3JvbGxUb3BQaXhlbHMgPSB0YXJnZXQuc2Nyb2xsVG9wO1xuICAgIHJldHVybiBzY3JvbGxUb3BQaXhlbHMgPiB0aGlzLkhJREVfSU5URVJWQUxfQ09VTlRET1dOX1NDUk9MTDtcbiAgfVxuXG4gIHByaXZhdGUgdmVyaWZ5SWZGaWx0ZXJzTWF0Y2hpbmdBbGFybSgpIHtcbiAgICB0aGlzLmFjdGl2ZUNoaWxkUGFyYW0kID0gdGhpcy5yb3V0ZXIuZXZlbnRzLnBpcGUoXG4gICAgICBmaWx0ZXIoZSA9PiBlIGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCAmJiB0aGlzLmFjdGl2YXRlZFJvdXRlLmNoaWxkcmVuLmxlbmd0aCA+IDApLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuYWN0aXZhdGVkUm91dGUuY2hpbGRyZW5bMF0ucGFyYW1zKSxcbiAgICAgIG1hcChwYXJhbXMgPT4gcGFyYW1zLmlkKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICBzaGFyZVJlcGxheSgpLFxuICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpXG4gICAgKTtcblxuICAgIC8vIGRvbmUgdG8gZ2V0IHRoZSBmaXJzdCBuYXZpZ2F0aW9uXG4gICAgdGhpcy5hY3RpdmVDaGlsZFBhcmFtJC5zdWJzY3JpYmUoKTtcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cImlubmVyLXNjcm9sbFwiXG4gIFtuZ0NsYXNzXT1cInsgJ3NwbGl0LXZpZXdfX2xpc3QgYmctbGV2ZWwtMSc6IHNwbGl0VmlldywgJ2JnLWNvbXBvbmVudCc6ICFzcGxpdFZpZXcgfVwiXG4gIGRhdGEtY3k9XCJjOHktYWxhcm1zLWxpc3RcIlxuICAjc2Nyb2xsV3JhcHBlclxuPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJmbGV4LXdyYXAgZmxleC1uby1zaHJpbmsgc3RpY2t5LXRvcCBtLWItMTZcIlxuICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICdzZXBhcmF0b3ItYm90dG9tIGNhcmQtaGVhZGVyIHAtYi0wJzogc3BsaXRWaWV3LFxuICAgICAgJ2QtZmxleCBmaXQtdyBzZXBhcmF0b3ItdG9wLWJvdHRvbSB3aWRnZXQtYmFyIHAtbC0xNiBwLXItMTYnOlxuICAgICAgICAhc3BsaXRWaWV3ICYmIG5hdmlnYXRpb25PcHRpb25zLmFsbG93TmF2aWdhdGlvblRvQWxhcm1zVmlld1xuICAgIH1cIlxuICA+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJoNCBjYXJkLXRpdGxlXCJcbiAgICAgICpuZ0lmPVwic3BsaXRWaWV3XCJcbiAgICA+XG4gICAgICB7eyAnQWxhcm1zIGxpc3QnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgW25nQ2xhc3NdPVwieyAnZml0LXcgZC1mbGV4IGEtaS1jZW50ZXIgZ2FwLTE2JzogIXNwbGl0VmlldywgJ2ZpdC1oLTIwIG0tbC1hdXRvJzogc3BsaXRWaWV3IH1cIlxuICAgID5cbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgICA8IS0tICBMb2FkaW5nIC0tPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZml0LXcgb3ZlcmZsb3ctaGlkZGVuXCJcbiAgICAgIFtuZ0NsYXNzXT1cInsgJ3AtdC0xNic6IHNwbGl0VmlldyB9XCJcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwibG9hZGluZy1iYXJcIlxuICAgICAgICBzdHlsZT1cInotaW5kZXg6IDEwMVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgYWN0aXZlOiBpc0luaXRpYWxMb2FkaW5nICYmICFpc0VtcHR5TGlzdExvYWRpbmcgfVwiXG4gICAgICA+PC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImFsZXJ0IGFsZXJ0LXdhcm5pbmdcIlxuICAgICAgcm9sZT1cImFsZXJ0XCJcbiAgICAgIHRyYW5zbGF0ZVxuICAgICAgKm5nSWY9XCJcbiAgICAgICAgIWlzRW1wdHlMaXN0TG9hZGluZyAmJlxuICAgICAgICAoYWN0aXZlQ2hpbGRQYXJhbSQgfCBhc3luYykgJiZcbiAgICAgICAgKGFjdGl2ZUFsYXJtJCB8IGFzeW5jKT8uaWQgIT09IChhY3RpdmVDaGlsZFBhcmFtJCB8IGFzeW5jKVxuICAgICAgXCJcbiAgICA+XG4gICAgICBUaGUgc2VsZWN0ZWQgYWxhcm0gaXMgbm90IGN1cnJlbnRseSBpbiB0aGUgbGlzdCwgY2hhbmdlIHlvdXIgZmlsdGVyLlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGM4eS1saXN0LWdyb3VwXG4gICAgY2xhc3M9XCJwLXItMTYgaW50ZXJhY3RpdmVcIlxuICAgIFtuZ1N0eWxlXT1cInsgb3BhY2l0eTogaXNJbml0aWFsTG9hZGluZyAmJiAhaXNFbXB0eUxpc3RMb2FkaW5nID8gMC4yIDogMSB9XCJcbiAgICBzdHlsZT1cInRyYW5zaXRpb246IG9wYWNpdHkgMC4xNXMgbGluZWFyXCJcbiAgICBkYXRhLWN5PVwiYzh5LWFsYXJtLWxpc3QtLWdyb3VwXCJcbiAgPlxuICAgIDxjOHktbGktdGltZWxpbmVcbiAgICAgIGNsYXNzPVwicG9pbnRlclwiXG4gICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgIGRhdGEtY3k9XCJjOHktYWxhcm0tbGlzdC0tdGltZWxpbmUtcmVwZWF0XCJcbiAgICAgICpjOHlGb3I9XCJsZXQgYWxhcm0gb2YgYWxhcm1zOyBsZXQgaSA9IGluZGV4OyBwaXBlOiBtYXBBbGFybUxpbms7IGxvYWRNb3JlOiBsb2FkTW9yZU1vZGVcIlxuICAgICAgW3JvdXRlckxpbmtdPVwibmF2aWdhdGlvbk9wdGlvbnMuYWxsb3dOYXZpZ2F0aW9uVG9BbGFybXNWaWV3ID8gYWxhcm0ubGluayA6IG51bGxcIlxuICAgICAgcm91dGVyTGlua0FjdGl2ZT1cImFjdGl2ZVwiXG4gICAgICBbcXVlcnlQYXJhbXNIYW5kbGluZ109XCJuYXZpZ2F0aW9uT3B0aW9ucy5xdWVyeVBhcmFtc0hhbmRsaW5nXCJcbiAgICAgIChpc0FjdGl2ZUNoYW5nZSk9XCJhY3RpdmVSb3V0ZUNoYW5nZWQoJGV2ZW50LCBsaVNjcm9sbEFuY2hvciwgYWxhcm0pXCJcbiAgICAgIChjbGljayk9XCJvbkFsYXJtT3BlbihhbGFybSlcIlxuICAgICAgW3F1ZXJ5UGFyYW1zXT1cIlxuICAgICAgICBuYXZpZ2F0aW9uT3B0aW9ucy5pbmNsdWRlQ2xlYXJlZFF1ZXJ5UGFyYW1zXG4gICAgICAgICAgPyB7IHNob3dDbGVhcmVkOiBhbGFybS5zdGF0dXMgPT09ICdDTEVBUkVEJyB9XG4gICAgICAgICAgOiB7fVxuICAgICAgXCJcbiAgICA+XG4gICAgICA8c3BhblxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFsYXJtTGFzdE9jY3VycmVuY2VMYWJlbCB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIFt0b29sdGlwXT1cImFsYXJtTGFzdE9jY3VycmVuY2VMYWJlbCB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIHBsYWNlbWVudD1cInJpZ2h0XCJcbiAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgIFtkZWxheV09XCI1MDBcIlxuICAgICAgPlxuICAgICAgICB7eyBhbGFybS50aW1lIHwgYzh5RGF0ZTogJ21lZGl1bURhdGUnIH19XG4gICAgICAgIHt7IGFsYXJtLnRpbWUgfCBjOHlEYXRlOiAnbWVkaXVtVGltZScgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxjOHktbGlcbiAgICAgICAgc3R5bGU9XCJzY3JvbGwtbWFyZ2luLXRvcDogNTZweFwiXG4gICAgICAgICNsaVNjcm9sbEFuY2hvclxuICAgICAgPlxuICAgICAgICA8Yzh5LWxpLWljb24gY2xhc3M9XCJhLXMtc3RhcnRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxhcm0taWNvbnNcIj5cbiAgICAgICAgICAgIDxjOHktYWxhcm1zLWljb24gW3R5cGVGaWx0ZXJzXT1cInR5cGVGaWx0ZXJzXCIgW2FsYXJtXT1cImFsYXJtXCI+PC9jOHktYWxhcm1zLWljb24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJidG4tY2xlYW4gdGV4dC1jZW50ZXJcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJcbiAgICAgICAgICAgICAgYWxhcm1CYWRnZVRvb2x0aXBcbiAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgOiB7IGFsYXJtRmlyc3RPY2N1cnJlbmNlVGltZTogYWxhcm0uZmlyc3RPY2N1cnJlbmNlVGltZSB8IGM4eURhdGU6ICdtZWRpdW0nIH1cbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbdG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgYWxhcm1CYWRnZVRvb2x0aXBcbiAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgOiB7IGFsYXJtRmlyc3RPY2N1cnJlbmNlVGltZTogYWxhcm0uZmlyc3RPY2N1cnJlbmNlVGltZSB8IGM4eURhdGU6ICdtZWRpdW0nIH1cbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBwbGFjZW1lbnQ9XCJyaWdodFwiXG4gICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgKm5nSWY9XCJhbGFybS5maXJzdE9jY3VycmVuY2VUaW1lXCJcbiAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgW2RlbGF5XT1cIjUwMFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgY2xhc3M9XCJiYWRnZSBiYWRnZS1pbmZvXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJhbGFybS5jb3VudCA+IDFcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBhbGFybS5jb3VudCB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2M4eS1saS1pY29uPlxuICAgICAgICA8Yzh5LWxpLWJvZHkgY2xhc3M9XCJhLXMtc3RyZXRjaFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYS1pLXN0YXJ0IGZpdC1oXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWluLXdpZHRoLTAgZmxleC1ncm93XCI+XG4gICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC10cnVuY2F0ZS13cmFwIHAtYi00XCI+XG4gICAgICAgICAgICAgICAge3sgYWxhcm0udGV4dCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICAgICAgICAgICAgICA8cFxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzbWFsbCB0ZXh0LW11dGVkIHRleHQtdHJ1bmNhdGUgZmxleC1ncm93XCJcbiAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJhbGFybS5zb3VyY2UubmFtZVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGkgW2M4eUljb25dPVwiJ2V4Y2hhbmdlJ1wiPjwvaT5cbiAgICAgICAgICAgICAgICAgIHt7IGFsYXJtLnNvdXJjZS5uYW1lIH19XG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIml0ZW0udGl0bGUgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBhbGFybSB8IGFsYXJtTGlzdEluZGljYXRvciB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiaXRlbS5jbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2M4eUljb25dPVwiaXRlbS5pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2M4eS1saS1ib2R5PlxuICAgICAgPC9jOHktbGk+XG4gICAgPC9jOHktbGktdGltZWxpbmU+XG4gICAgPGM4eS1sb2FkaW5nICpuZ0lmPVwiaXNJbml0aWFsTG9hZGluZyAmJiBpc0VtcHR5TGlzdExvYWRpbmdcIj48L2M4eS1sb2FkaW5nPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwicC1yZWxhdGl2ZSBwLWwtMjRcIlxuICAgICAgKm5nSWY9XCJpc0VtcHR5TGlzdExvYWRpbmcgJiYgIWlzSW5pdGlhbExvYWRpbmdcIlxuICAgID5cbiAgICAgIDxjOHktdWktZW1wdHktc3RhdGVcbiAgICAgICAgW2ljb25dPVwiJ2M4eS1hbGVydC1pZGxlJ1wiXG4gICAgICAgIFt0aXRsZV09XCInTm8gYWxhcm1zIHRvIGRpc3BsYXkuJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIGRhdGEtY3k9XCJhbGFybS1saXN0LS1lbXB0eS1zdGF0ZVwiXG4gICAgICAgICpuZ0lmPVwiaGFzUGVybWlzc2lvbnM7IGVsc2UgYWxlcnRzQVwiXG4gICAgICA+XG4gICAgICAgIDxwIGM4eS1ndWlkZS1kb2NzPlxuICAgICAgICAgIDxzbWFsbFxuICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICBuZ05vbkJpbmRhYmxlXG4gICAgICAgICAgPlxuICAgICAgICAgICAgRmluZCBvdXQgbW9yZSBpbiB0aGVcbiAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgIGM4eS1ndWlkZS1ocmVmPVwiL2RvY3MvZGV2aWNlLW1hbmFnZW1lbnQtYXBwbGljYXRpb24vbW9uaXRvcmluZy1hbmQtY29udHJvbGxpbmctZGV2aWNlcy8jd29ya2luZy13aXRoLWFsYXJtc1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHVzZXIgZG9jdW1lbnRhdGlvblxuICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgLlxuICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgIDwvcD5cbiAgICAgIDwvYzh5LXVpLWVtcHR5LXN0YXRlPlxuICAgIDwvZGl2PlxuICA8L2M4eS1saXN0LWdyb3VwPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjYWxlcnRzQT5cbiAgPGM4eS1keW5hbWljLWNvbXBvbmVudC1hbGVydHMgW2FsZXJ0c109XCJhbGVydEFnZ3JlZ2F0b3JcIj48L2M4eS1keW5hbWljLWNvbXBvbmVudC1hbGVydHM+XG48L25nLXRlbXBsYXRlPlxuIl19
177
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxhcm1zLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vYWxhcm1zL2FsYXJtcy1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL2FsYXJtcy9hbGFybXMtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFFTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFeEUsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixxQkFBcUIsRUFDckIsK0JBQStCLEVBRy9CLE9BQU8sRUFDUixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdFLE9BQU8sRUFDTCxZQUFZLEVBQ1osb0JBQW9CLEVBQ3BCLE1BQU0sRUFDTixHQUFHLEVBQ0gsV0FBVyxFQUNYLFNBQVMsRUFDVCxTQUFTLEVBQ1YsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7Ozs7OztBQVExRCxNQUFNLE9BQU8sbUJBQW1CO0lBbUc5QixZQUNVLGNBQThCLEVBQzlCLGlCQUFvQyxFQUNwQyxtQkFBd0MsRUFDeEMsTUFBYztRQUhkLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDeEMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQXRHZixzQkFBaUIsR0FBRyxPQUFPLENBQ2xDLHVIQUF1SCxDQUN4SCxD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d0luaXQsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIE5hdmlnYXRpb25FbmQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBJQWxhcm0sIElSZXN1bHRMaXN0IH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHtcbiAgQ29udGV4dFJvdXRlU2VydmljZSxcbiAgRHluYW1pY0NvbXBvbmVudEFsZXJ0LFxuICBEeW5hbWljQ29tcG9uZW50QWxlcnRBZ2dyZWdhdG9yLFxuICBMaXN0SXRlbUNvbXBvbmVudCxcbiAgTG9hZE1vcmVNb2RlLFxuICBnZXR0ZXh0XG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBmcm9tRXZlbnQsIHBpcGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIGRlYm91bmNlVGltZSxcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIGZpbHRlcixcbiAgbWFwLFxuICBzaGFyZVJlcGxheSxcbiAgc3dpdGNoTWFwLFxuICB0YWtlVW50aWxcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQWxhcm1zVmlld1NlcnZpY2UgfSBmcm9tICcuL2FsYXJtcy12aWV3LnNlcnZpY2UnO1xuaW1wb3J0IHsgQWxhcm1OYXZpZ2F0aW9uT3B0aW9ucyB9IGZyb20gJy4vYWxhcm1zLm1vZGVsJztcbmltcG9ydCB7IEFsYXJtRGV0YWlscyB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvYWxhcm0tZXZlbnQtc2VsZWN0b3InO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktYWxhcm1zLWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vYWxhcm1zLWxpc3QuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEFsYXJtc0xpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIHJlYWRvbmx5IGFsYXJtQmFkZ2VUb29sdGlwID0gZ2V0dGV4dChcbiAgICAnTnVtYmVyIG9mIG9jY3VycmVuY2VzYG51bWJlciBvZiBvY2N1cnJlbmNlcyBvZiBhbGFybWAuIEZpcnN0IG9jY3VycmVuY2Uge3sgYWxhcm1GaXJzdE9jY3VycmVuY2VUaW1lIH19IChkZXZpY2UgdGltZSkuJ1xuICApO1xuICByZWFkb25seSBhbGFybUxhc3RPY2N1cnJlbmNlTGFiZWwgPSBnZXR0ZXh0KCdMYXN0IG9jY3VycmVuY2Ugb2YgdGhpcyBhbGFybSAoZGV2aWNlIHRpbWUpLicpO1xuXG4gIC8qKlxuICAgKiBJbnB1dCBwcm9wZXJ0eSBmb3IgcmVjZWl2aW5nIGEgbGlzdCBvZiBhbGFybXMuXG4gICAqL1xuICBASW5wdXQoKVxuICBhbGFybXM6IElSZXN1bHRMaXN0PElBbGFybSAmIHsgbGluaz86IHN0cmluZyB9PjtcblxuICBASW5wdXQoKSBoYXNQZXJtaXNzaW9ucyA9IHRydWU7XG5cbiAgLyoqXG4gICAqIElucHV0IHByb3BlcnR5IGZvciB0aGUgY3VycmVudGx5IGFwcGxpZWQgdHlwZSBmaWx0ZXJzLlxuICAgKi9cbiAgQElucHV0KClcbiAgdHlwZUZpbHRlcnM6IEFsYXJtRGV0YWlsc1tdID0gW107XG5cbiAgLyoqXG4gICAqIElucHV0IHByb3BlcnR5IGZvciByZWNlaXZpbmcgbG9hZCBtb3JlIG1vZGUuXG4gICAqL1xuICBASW5wdXQoKVxuICBsb2FkTW9yZU1vZGU6IExvYWRNb3JlTW9kZSA9ICdoaWRkZW4nO1xuXG4gIC8qKlxuICAgKiBEZWZpbmVzIG9wdGlvbnMsIGhvdyB0aGUgYWxhcm0gbGlzdCBzaG91bGQgYmUgbmF2aWdhdGVkIGlmIGEgdXNlclxuICAgKiBjbGlja3Mgb24gYW4gYWxhcm0uXG4gICAqL1xuICBASW5wdXQoKVxuICBuYXZpZ2F0aW9uT3B0aW9uczogQWxhcm1OYXZpZ2F0aW9uT3B0aW9ucyA9IHtcbiAgICBhbGxvd05hdmlnYXRpb25Ub0FsYXJtc1ZpZXc6IHRydWUsXG4gICAgYWx3YXlzTmF2aWdhdGVUb0FsbEFsYXJtczogZmFsc2UsXG4gICAgaW5jbHVkZUNsZWFyZWRRdWVyeVBhcmFtczogZmFsc2UsXG4gICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJ1xuICB9O1xuXG4gIC8qKlxuICAgKiBDb250cm9scyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgbG9hZGluZyBiYXJcbiAgICogV2hlbiBzZXQgdG8gYGZhbHNlYCwgdGhlIGFsYXJtIGxpc3QgaXMgZGlzcGxheWVkLiBXaGVuIHNldCB0byBgdHJ1ZWAsIHRoZSBvcGFjaXR5IG9mIGFsYXJtcyBsaXN0IGlzIGNoYW5nZWQgYW5kIGEgbG9hZGluZyBiYXIgaXMgc2hvd24uXG4gICAqL1xuICBASW5wdXQoKVxuICBpc0luaXRpYWxMb2FkaW5nID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIENvbnRyb2xzIHRoZSB2aXNpYmlsaXR5IGFuZCBmdW5jdGlvbmFsaXR5IG9mIHNvbWUgY29tcG9uZW50c1xuICAgKiBXaGVuIHNldCB0byBgdHJ1ZWAsIG1lYW5zIHRoZSBsaXN0IGlzIGRpc3BsYXllZCBpbiBhIHNwbGl0IHZpZXcgbGF5b3V0OlxuICAgKiB0aGUgbGlzdCBvbiB0aGUgZmlyc3QgY29sdW1uIGFuZCB0aGUgc2VsZWN0ZWQgcmVjb3JkIGRldGFpbCBvbiB0aGUgc2Vjb25kIGNvbHVtbiAodGhlIGNvY2twaXRcbiAgICogYWxhcm1zIHZpZXcgZm9yIGV4YW1wbGUpXG4gICAqIFdoZW4gc2V0IHRvIGZhbHNlLCB0aGUgbGlzdCBpcyBkaXNwbGF5ZWQgYXMgYSBzdGFuZGFsb25lIGNvbXBvbmVudCwgb3BlbmluZyB0aGUgZGV0YWlsIHdpbGxcbiAgICogcmVkaXJlY3QgdG8gdGhlIGFsYXJtc1xuICAgKi9cbiAgQElucHV0KClcbiAgc3BsaXRWaWV3ID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEVtaXRzIGFuIGluc3RhbmNlIG9mIGEgc2VsZWN0ZWQgYWxhcm0gd2hlbiBvbmUgaXMgY2hvc2VuIGZyb20gdGhlIGxpc3QuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgb25TZWxlY3RlZEFsYXJtID0gbmV3IEV2ZW50RW1pdHRlcjxJQWxhcm0+KCk7XG5cbiAgLyoqXG4gICAqIEVtaXRzIGEgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIHRoZSBzY3JvbGxpbmcgc3RhdGU6IHRydWUgd2hlbiB0aGUgdXNlciBzdGFydHMgc2Nyb2xsaW5nLCBhbmQgZmFsc2Ugd2hlbiB0aGUgdXNlciByZWFjaGVzIHRoZSB0b3Agb2YgdGhlIGxpc3QuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgb25TY3JvbGxpbmdTdGF0ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAvKipcbiAgICogQ3VycmVudCBhbGFybSBvciBsYXN0IGFsYXJtIG1hcmtlZCBhcyBhY3RpdmUgYnkgdGhlIHJvdXRlckxpbmtBY3RpdmUgZGlyZWN0aXZlLlxuICAgKi9cbiAgYWN0aXZlQWxhcm0kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJQWxhcm0+KG51bGwpO1xuICBhY3RpdmVDaGlsZFBhcmFtJCA9IG5ldyBPYnNlcnZhYmxlPHN0cmluZz4oKTtcblxuICBAVmlld0NoaWxkKCdzY3JvbGxXcmFwcGVyJylcbiAgaW5uZXJTY3JvbGxXcmFwcGVyOiBFbGVtZW50UmVmO1xuXG4gIGlzU2Nyb2xsaW5nID0gZmFsc2U7XG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGM4eS1sb2FkaW5nIGNvbXBvbmVudCBzaG91bGQgYmUgZGlzcGxheWVkLlxuICAgKiBUaGUgbG9hZGluZyBjb21wb25lbnQgaXMgc2hvd24gd2hlbiBubyBhbGFybXMgYXJlIGRpc3BsYXllZCBpbiB0aGUgdmlldyBvciB3aGVuIHRoZSByZXF1ZXN0IGlzIGluaXRpYWwsXG4gICAqIGFzIHdlIGRvbid0IHdhbnQgdG8gc2VlIGVtcHR5IHNwYWNlIG9uIGFsYXJtIGxpc3QgZHVyaW5nIGxvYWRpbmcuXG4gICAqL1xuICBpc0VtcHR5TGlzdExvYWRpbmcgPSB0cnVlO1xuXG4gIGFsZXJ0QWdncmVnYXRvciA9IG5ldyBEeW5hbWljQ29tcG9uZW50QWxlcnRBZ2dyZWdhdG9yKCk7XG5cbiAgbWFwQWxhcm1MaW5rID0gcGlwZShcbiAgICBtYXAoKGFsYXJtczogSUFsYXJtW10pID0+XG4gICAgICBhbGFybXMubWFwKChhbGFybTogSUFsYXJtKSA9PiB7XG4gICAgICAgIGFsYXJtLmxpbmsgPSB0aGlzLmdldFJvdXRlckxpbmsoYWxhcm0pO1xuICAgICAgICByZXR1cm4gYWxhcm07XG4gICAgICB9KVxuICAgIClcbiAgKTtcblxuICBwcml2YXRlIGRlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBISURFX0lOVEVSVkFMX0NPVU5URE9XTl9TQ1JPTEwgPSA1MDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIGFsYXJtc1ZpZXdTZXJ2aWNlOiBBbGFybXNWaWV3U2VydmljZSxcbiAgICBwcml2YXRlIGNvbnRleHRSb3V0ZVNlcnZpY2U6IENvbnRleHRSb3V0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlclxuICApIHtcbiAgICB0aGlzLnZlcmlmeUlmRmlsdGVyc01hdGNoaW5nQWxhcm0oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIHRoZSBjaGFuZ2Ugb2YgdGhlIGFjdGl2ZSByb3V0ZS5cbiAgICpcbiAgICogQHBhcmFtIGlzQWN0aXZlIC0gQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgcm91dGUgaXMgYWN0aXZlIG9yIG5vdC5cbiAgICogQHBhcmFtIHNjcm9sbEFuY2hvciAtIFRoZSBMaXN0SXRlbUNvbXBvbmVudCB1c2VkIGFzIGEgc2Nyb2xsIGFuY2hvci5cbiAgICogQHBhcmFtIGFsYXJtIC0gVGhlIElBbGFybSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBhY3RpdmUgYWxhcm0uXG4gICAqL1xuICBhY3RpdmVSb3V0ZUNoYW5nZWQoaXNBY3RpdmU6IGJvb2xlYW4sIHNjcm9sbEFuY2hvcjogTGlzdEl0ZW1Db21wb25lbnQsIGFsYXJtOiBJQWxhcm0pOiB2b2lkIHtcbiAgICBpZiAoaXNBY3RpdmUpIHtcbiAgICAgIHNjcm9sbEFuY2hvci5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoe1xuICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgICAgIGJsb2NrOiAnbmVhcmVzdCdcbiAgICAgIH0pO1xuICAgICAgdGhpcy5hY3RpdmVBbGFybSQubmV4dChhbGFybSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmFsYXJtcyAmJiBjaGFuZ2VzLmFsYXJtcykge1xuICAgICAgdGhpcy5hY3RpdmVBbGFybSQubmV4dChudWxsKTtcbiAgICAgIHRoaXMuaXNFbXB0eUxpc3RMb2FkaW5nID0gIXRoaXMuYWxhcm1zPy5kYXRhPy5sZW5ndGg7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXMuaGFzUGVybWlzc2lvbnM/LmN1cnJlbnRWYWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuYWxlcnRBZ2dyZWdhdG9yLmFkZEFsZXJ0cyhcbiAgICAgICAgbmV3IER5bmFtaWNDb21wb25lbnRBbGVydCh7XG4gICAgICAgICAgdHlwZTogJ3N5c3RlbScsXG4gICAgICAgICAgdGV4dDogZ2V0dGV4dChcIllvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gdmlldyBhbGFybXMuXCIpXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hbGFybXNWaWV3U2VydmljZS5pc0ludGVydmFsUmVmcmVzaCgpKSB7XG4gICAgICBjb25zdCBzY3JvbGxFbGVtZW50ID0gdGhpcy5pbm5lclNjcm9sbFdyYXBwZXIubmF0aXZlRWxlbWVudDtcbiAgICAgIGZyb21FdmVudChzY3JvbGxFbGVtZW50LCAnc2Nyb2xsJylcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLCBkZWJvdW5jZVRpbWUoMzAwKSlcbiAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgIHRoaXMuaXNTY3JvbGxpbmcgPSB0aGlzLnNob3VsZENvdW50ZG93bkludGVydmFsQmVIaWRkZW4odGFyZ2V0KTtcbiAgICAgICAgICB0aGlzLm9uU2Nyb2xsaW5nU3RhdGVDaGFuZ2UuZW1pdCh0aGlzLmlzU2Nyb2xsaW5nKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgb25BbGFybU9wZW4oYWxhcm06IElBbGFybSk6IHZvaWQge1xuICAgIHRoaXMub25TZWxlY3RlZEFsYXJtLmVtaXQoYWxhcm0pO1xuICB9XG5cbiAgZ2V0Um91dGVyTGluayhhbGFybTogSUFsYXJtKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5uYXZpZ2F0aW9uT3B0aW9ucy5hbHdheXNOYXZpZ2F0ZVRvQWxsQWxhcm1zKSB7XG4gICAgICByZXR1cm4gdGhpcy5hbGFybXNWaWV3U2VydmljZS5nZXRSb3V0ZXJMaW5rKG51bGwsIGFsYXJtKTtcbiAgICB9XG4gICAgY29uc3QgY29udGV4dERhdGEgPSB0aGlzLmNvbnRleHRSb3V0ZVNlcnZpY2UuZ2V0Q29udGV4dERhdGEodGhpcy5hY3RpdmF0ZWRSb3V0ZSk7XG4gICAgcmV0dXJuIHRoaXMuYWxhcm1zVmlld1NlcnZpY2UuZ2V0Um91dGVyTGluayhjb250ZXh0RGF0YSwgYWxhcm0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG91bGRDb3VudGRvd25JbnRlcnZhbEJlSGlkZGVuKHRhcmdldDogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICBjb25zdCBzY3JvbGxUb3BQaXhlbHMgPSB0YXJnZXQuc2Nyb2xsVG9wO1xuICAgIHJldHVybiBzY3JvbGxUb3BQaXhlbHMgPiB0aGlzLkhJREVfSU5URVJWQUxfQ09VTlRET1dOX1NDUk9MTDtcbiAgfVxuXG4gIHByaXZhdGUgdmVyaWZ5SWZGaWx0ZXJzTWF0Y2hpbmdBbGFybSgpIHtcbiAgICB0aGlzLmFjdGl2ZUNoaWxkUGFyYW0kID0gdGhpcy5yb3V0ZXIuZXZlbnRzLnBpcGUoXG4gICAgICBmaWx0ZXIoZSA9PiBlIGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCAmJiB0aGlzLmFjdGl2YXRlZFJvdXRlLmNoaWxkcmVuLmxlbmd0aCA+IDApLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuYWN0aXZhdGVkUm91dGUuY2hpbGRyZW5bMF0ucGFyYW1zKSxcbiAgICAgIG1hcChwYXJhbXMgPT4gcGFyYW1zLmlkKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICBzaGFyZVJlcGxheSgpLFxuICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpXG4gICAgKTtcblxuICAgIC8vIGRvbmUgdG8gZ2V0IHRoZSBmaXJzdCBuYXZpZ2F0aW9uXG4gICAgdGhpcy5hY3RpdmVDaGlsZFBhcmFtJC5zdWJzY3JpYmUoKTtcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cImlubmVyLXNjcm9sbFwiXG4gIFtuZ0NsYXNzXT1cInsgJ3NwbGl0LXZpZXdfX2xpc3QgYmctbGV2ZWwtMSc6IHNwbGl0VmlldywgJ2JnLWNvbXBvbmVudCc6ICFzcGxpdFZpZXcgfVwiXG4gIGRhdGEtY3k9XCJjOHktYWxhcm1zLWxpc3RcIlxuICAjc2Nyb2xsV3JhcHBlclxuPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJmbGV4LXdyYXAgZmxleC1uby1zaHJpbmsgc3RpY2t5LXRvcCBtLWItMTZcIlxuICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICdzZXBhcmF0b3ItYm90dG9tIGNhcmQtaGVhZGVyIHAtYi0wJzogc3BsaXRWaWV3LFxuICAgICAgJ2QtZmxleCBmaXQtdyBzZXBhcmF0b3ItdG9wLWJvdHRvbSB3aWRnZXQtYmFyIHAtbC0xNiBwLXItMTYnOlxuICAgICAgICAhc3BsaXRWaWV3ICYmIG5hdmlnYXRpb25PcHRpb25zLmFsbG93TmF2aWdhdGlvblRvQWxhcm1zVmlld1xuICAgIH1cIlxuICA+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJoNCBjYXJkLXRpdGxlXCJcbiAgICAgICpuZ0lmPVwic3BsaXRWaWV3XCJcbiAgICA+XG4gICAgICB7eyAnQWxhcm1zIGxpc3QnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgW25nQ2xhc3NdPVwieyAnZml0LXcgZC1mbGV4IGEtaS1jZW50ZXIgZ2FwLTE2JzogIXNwbGl0VmlldywgJ2ZpdC1oLTIwIG0tbC1hdXRvJzogc3BsaXRWaWV3IH1cIlxuICAgID5cbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgICA8IS0tICBMb2FkaW5nIC0tPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZml0LXcgb3ZlcmZsb3ctaGlkZGVuXCJcbiAgICAgIFtuZ0NsYXNzXT1cInsgJ3AtdC0xNic6IHNwbGl0VmlldyB9XCJcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwibG9hZGluZy1iYXJcIlxuICAgICAgICBkYXRhLWN5PVwiYzh5LWFsYXJtcy1saXN0LS1sb2FkaW5nLWJhclwiXG4gICAgICAgIHN0eWxlPVwiei1pbmRleDogMTAxXCJcbiAgICAgICAgW25nQ2xhc3NdPVwieyBhY3RpdmU6IGlzSW5pdGlhbExvYWRpbmcgJiYgIWlzRW1wdHlMaXN0TG9hZGluZyB9XCJcbiAgICAgID48L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiYWxlcnQgYWxlcnQtd2FybmluZ1wiXG4gICAgICByb2xlPVwiYWxlcnRcIlxuICAgICAgdHJhbnNsYXRlXG4gICAgICAqbmdJZj1cIlxuICAgICAgICAhaXNFbXB0eUxpc3RMb2FkaW5nICYmXG4gICAgICAgIChhY3RpdmVDaGlsZFBhcmFtJCB8IGFzeW5jKSAmJlxuICAgICAgICAoYWN0aXZlQWxhcm0kIHwgYXN5bmMpPy5pZCAhPT0gKGFjdGl2ZUNoaWxkUGFyYW0kIHwgYXN5bmMpXG4gICAgICBcIlxuICAgID5cbiAgICAgIFRoZSBzZWxlY3RlZCBhbGFybSBpcyBub3QgY3VycmVudGx5IGluIHRoZSBsaXN0LCBjaGFuZ2UgeW91ciBmaWx0ZXIuXG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8Yzh5LWxpc3QtZ3JvdXBcbiAgICBjbGFzcz1cInAtci0xNiBpbnRlcmFjdGl2ZVwiXG4gICAgW25nU3R5bGVdPVwieyBvcGFjaXR5OiBpc0luaXRpYWxMb2FkaW5nICYmICFpc0VtcHR5TGlzdExvYWRpbmcgPyAwLjIgOiAxIH1cIlxuICAgIHN0eWxlPVwidHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cyBsaW5lYXJcIlxuICAgIGRhdGEtY3k9XCJjOHktYWxhcm1zLWxpc3QtLWdyb3VwXCJcbiAgPlxuICAgIDxjOHktbGktdGltZWxpbmVcbiAgICAgIGNsYXNzPVwicG9pbnRlclwiXG4gICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgIGRhdGEtY3k9XCJjOHktYWxhcm1zLWxpc3QtLXRpbWVsaW5lLXJlcGVhdFwiXG4gICAgICAqYzh5Rm9yPVwibGV0IGFsYXJtIG9mIGFsYXJtczsgbGV0IGkgPSBpbmRleDsgcGlwZTogbWFwQWxhcm1MaW5rOyBsb2FkTW9yZTogbG9hZE1vcmVNb2RlXCJcbiAgICAgIFtyb3V0ZXJMaW5rXT1cIm5hdmlnYXRpb25PcHRpb25zLmFsbG93TmF2aWdhdGlvblRvQWxhcm1zVmlldyA/IGFsYXJtLmxpbmsgOiBudWxsXCJcbiAgICAgIHJvdXRlckxpbmtBY3RpdmU9XCJhY3RpdmVcIlxuICAgICAgW3F1ZXJ5UGFyYW1zSGFuZGxpbmddPVwibmF2aWdhdGlvbk9wdGlvbnMucXVlcnlQYXJhbXNIYW5kbGluZ1wiXG4gICAgICAoaXNBY3RpdmVDaGFuZ2UpPVwiYWN0aXZlUm91dGVDaGFuZ2VkKCRldmVudCwgbGlTY3JvbGxBbmNob3IsIGFsYXJtKVwiXG4gICAgICAoY2xpY2spPVwib25BbGFybU9wZW4oYWxhcm0pXCJcbiAgICAgIFtxdWVyeVBhcmFtc109XCJcbiAgICAgICAgbmF2aWdhdGlvbk9wdGlvbnMuaW5jbHVkZUNsZWFyZWRRdWVyeVBhcmFtc1xuICAgICAgICAgID8geyBzaG93Q2xlYXJlZDogYWxhcm0uc3RhdHVzID09PSAnQ0xFQVJFRCcgfVxuICAgICAgICAgIDoge31cbiAgICAgIFwiXG4gICAgPlxuICAgICAgPHNwYW5cbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhbGFybUxhc3RPY2N1cnJlbmNlTGFiZWwgfCB0cmFuc2xhdGVcIlxuICAgICAgICBbdG9vbHRpcF09XCJhbGFybUxhc3RPY2N1cnJlbmNlTGFiZWwgfCB0cmFuc2xhdGVcIlxuICAgICAgICBwbGFjZW1lbnQ9XCJyaWdodFwiXG4gICAgICAgIGRhdGEtY3k9XCJjOHktYWxhcm1zLWxpc3QtLWxhc3Qtb2NjdXJyZW5jZS1kYXRlXCJcbiAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgIFtkZWxheV09XCI1MDBcIlxuICAgICAgPlxuICAgICAgICB7eyBhbGFybS50aW1lIHwgYzh5RGF0ZTogJ21lZGl1bURhdGUnIH19XG4gICAgICAgIHt7IGFsYXJtLnRpbWUgfCBjOHlEYXRlOiAnbWVkaXVtVGltZScgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxjOHktbGlcbiAgICAgICAgc3R5bGU9XCJzY3JvbGwtbWFyZ2luLXRvcDogNTZweFwiXG4gICAgICAgICNsaVNjcm9sbEFuY2hvclxuICAgICAgPlxuICAgICAgICA8Yzh5LWxpLWljb24gY2xhc3M9XCJhLXMtc3RhcnRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxhcm0taWNvbnNcIj5cbiAgICAgICAgICAgIDxjOHktYWxhcm1zLWljb24gW3R5cGVGaWx0ZXJzXT1cInR5cGVGaWx0ZXJzXCIgW2FsYXJtXT1cImFsYXJtXCI+PC9jOHktYWxhcm1zLWljb24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJidG4tY2xlYW4gdGV4dC1jZW50ZXJcIlxuICAgICAgICAgICAgZGF0YS1jeT1cImM4eS1hbGFybXMtbGlzdC0tYmFkZ2VcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJcbiAgICAgICAgICAgICAgYWxhcm1CYWRnZVRvb2x0aXBcbiAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgOiB7IGFsYXJtRmlyc3RPY2N1cnJlbmNlVGltZTogYWxhcm0uZmlyc3RPY2N1cnJlbmNlVGltZSB8IGM4eURhdGU6ICdtZWRpdW0nIH1cbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbdG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgYWxhcm1CYWRnZVRvb2x0aXBcbiAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgOiB7IGFsYXJtRmlyc3RPY2N1cnJlbmNlVGltZTogYWxhcm0uZmlyc3RPY2N1cnJlbmNlVGltZSB8IGM4eURhdGU6ICdtZWRpdW0nIH1cbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBwbGFjZW1lbnQ9XCJyaWdodFwiXG4gICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgKm5nSWY9XCJhbGFybS5maXJzdE9jY3VycmVuY2VUaW1lXCJcbiAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgW2RlbGF5XT1cIjUwMFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgY2xhc3M9XCJiYWRnZSBiYWRnZS1pbmZvXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJhbGFybS5jb3VudCA+IDFcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBhbGFybS5jb3VudCB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2M4eS1saS1pY29uPlxuICAgICAgICA8Yzh5LWxpLWJvZHkgY2xhc3M9XCJhLXMtc3RyZXRjaFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYS1pLXN0YXJ0IGZpdC1oXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWluLXdpZHRoLTAgZmxleC1ncm93XCI+XG4gICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC10cnVuY2F0ZS13cmFwIHAtYi00XCIgZGF0YS1jeT1cImM4eS1hbGFybXMtbGlzdC0tYWxhcm0tdGV4dFwiPlxuICAgICAgICAgICAgICAgIHt7IGFsYXJtLnRleHQgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XG4gICAgICAgICAgICAgICAgPHBcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwic21hbGwgdGV4dC1tdXRlZCB0ZXh0LXRydW5jYXRlIGZsZXgtZ3Jvd1wiXG4gICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiYWxhcm0uc291cmNlLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgZGF0YS1jeT1cImM4eS1hbGFybXMtbGlzdC0tYWxhcm0tc291cmNlLW5hbWVcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxpIFtjOHlJY29uXT1cIidleGNoYW5nZSdcIj48L2k+XG4gICAgICAgICAgICAgICAgICB7eyBhbGFybS5zb3VyY2UubmFtZSB9fVxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJpdGVtLnRpdGxlIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgYWxhcm0gfCBhbGFybUxpc3RJbmRpY2F0b3IgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cIml0ZW0uY2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjOHlJY29uXT1cIml0ZW0uaWNvblwiXG4gICAgICAgICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9jOHktbGktYm9keT5cbiAgICAgIDwvYzh5LWxpPlxuICAgIDwvYzh5LWxpLXRpbWVsaW5lPlxuICAgIDxjOHktbG9hZGluZ1xuICAgICAgZGF0YS1jeT1cImM4eS1hbGFybXMtbGlzdC0tYzh5LWxvYWRpbmdcIlxuICAgICAgKm5nSWY9XCJpc0luaXRpYWxMb2FkaW5nICYmIGlzRW1wdHlMaXN0TG9hZGluZ1wiPjwvYzh5LWxvYWRpbmc+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJwLXJlbGF0aXZlIHAtbC0yNFwiXG4gICAgICAqbmdJZj1cImlzRW1wdHlMaXN0TG9hZGluZyAmJiAhaXNJbml0aWFsTG9hZGluZ1wiXG4gICAgPlxuICAgICAgPGM4eS11aS1lbXB0eS1zdGF0ZVxuICAgICAgICBbaWNvbl09XCInYzh5LWFsZXJ0LWlkbGUnXCJcbiAgICAgICAgW3RpdGxlXT1cIidObyBhbGFybXMgdG8gZGlzcGxheS4nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgZGF0YS1jeT1cImM4eS1hbGFybXMtbGlzdC0tZW1wdHktc3RhdGVcIlxuICAgICAgICAqbmdJZj1cImhhc1Blcm1pc3Npb25zOyBlbHNlIGFsZXJ0c0FcIlxuICAgICAgPlxuICAgICAgICA8cCBjOHktZ3VpZGUtZG9jcz5cbiAgICAgICAgICA8c21hbGxcbiAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgICAgbmdOb25CaW5kYWJsZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIEZpbmQgb3V0IG1vcmUgaW4gdGhlXG4gICAgICAgICAgICA8YVxuICAgICAgICAgICAgICBjOHktZ3VpZGUtaHJlZj1cIi9kb2NzL2RldmljZS1tYW5hZ2VtZW50LWFwcGxpY2F0aW9uL21vbml0b3JpbmctYW5kLWNvbnRyb2xsaW5nLWRldmljZXMvI3dvcmtpbmctd2l0aC1hbGFybXNcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB1c2VyIGRvY3VtZW50YXRpb25cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIC5cbiAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICA8L3A+XG4gICAgICA8L2M4eS11aS1lbXB0eS1zdGF0ZT5cbiAgICA8L2Rpdj5cbiAgPC9jOHktbGlzdC1ncm91cD5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2FsZXJ0c0E+XG4gIDxjOHktZHluYW1pYy1jb21wb25lbnQtYWxlcnRzIFthbGVydHNdPVwiYWxlcnRBZ2dyZWdhdG9yXCI+PC9jOHktZHluYW1pYy1jb21wb25lbnQtYWxlcnRzPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -185,13 +185,13 @@ export class AlarmsComponent {
185
185
  }
186
186
  }
187
187
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AlarmsComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.AlarmsViewService }, { token: i3.AlarmWithChildrenRealtimeService }, { token: i3.AlertService }, { token: i3.ContextRouteService }, { token: i3.ModalService }, { token: i4.TranslateService }, { token: i1.Router }], target: i0.ɵɵFactoryTarget.Component }); }
188
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AlarmsComponent, selector: "c8y-alarms", providers: [AlarmWithChildrenRealtimeService], viewQueries: [{ propertyName: "alarmIntervalRefreshComponent", first: true, predicate: AlarmsIntervalRefreshComponent, descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"(activatedRoute.data | async)?.title\">\n <c8y-title>{{ TITLE | translate }}</c8y-title>\n</ng-container>\n\n<c8y-action-bar-item\n [placement]=\"'left'\"\n itemClass=\"navbar-form min-width-fit\"\n>\n <c8y-alarms-filter\n class=\"d-block fit-w\"\n [contextSourceId]=\"contextSourceId\"\n (onFilterApplied)=\"applyFormFilters($event)\"\n ></c8y-alarms-filter>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'left'\"\n itemClass=\"navbar-form min-width-fit\"\n>\n <c8y-alarms-date-filter (dateFilterChange)=\"applyFormFilters($event)\"></c8y-alarms-date-filter>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'left'\"\n itemClass=\"navbar-form\"\n>\n <c8y-alarms-type-filter\n class=\"d-block fit-w\"\n [alarms]=\"alarms$ | async\"\n (onFilterChanged)=\"applyTypeFilters($event)\"\n ></c8y-alarms-type-filter>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"0\"\n>\n <button\n class=\"btn btn-link\"\n [title]=\"'Clear all alarms' | translate\"\n type=\"button\"\n (click)=\"clearAll()\"\n data-cy=\"c8y-alarms-view--clear-all-button\"\n >\n <i c8yIcon=\"c8y-alert-idle\"></i>\n {{ 'Clear all`alarms`' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<!--Realtime button-->\n<ng-template #realtimeRefresh>\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-default btn-sm\"\n [attr.aria-label]=\"'Refresh' | translate\"\n [tooltip]=\"\n (isRealtimeActive | async)\n ? (NEW_REALTIME_ALARM_MESSAGE | translate)\n : (REFRESH_LABEL | translate)\n \"\n placement=\"left\"\n container=\"body\"\n type=\"button\"\n [adaptivePosition]=\"false\"\n [delay]=\"500\"\n [disabled]=\"isLoading$ | async\"\n (click)=\"refresh()\"\n >\n <span\n class=\"tag tag--info m-r-8\"\n *ngIf=\"isRealtimeActive | async\"\n >\n {{ 'New alarms' | translate }}\n </span>\n <i\n c8yIcon=\"refresh\"\n [ngClass]=\"{ 'icon-spin': isLoading$ | async }\"\n ></i>\n </button>\n <button\n class=\"c8y-realtime btn btn-default btn-sm\"\n [attr.aria-label]=\"realtimeIconTitle\"\n [tooltip]=\"realtimeIconTitle\"\n placement=\"bottom\"\n type=\"button\"\n data-cy=\"c8y-alarms--realtime-button\"\n [container]=\"'body'\"\n (click)=\"toggleRealtimeState()\"\n >\n <span\n class=\"c8y-pulse m-0\"\n [ngClass]=\"{\n active: isRealtimeToggleOn,\n inactive: !isRealtimeToggleOn\n }\"\n ></span>\n </button>\n </div>\n</ng-template>\n\n<c8y-help\n src=\"/docs/device-management-application/monitoring-and-controlling-devices/#working-with-alarms\"\n></c8y-help>\n\n<div class=\"card content-fullpage split-view--5-7 grid__row--1\">\n <c8y-alarms-list\n class=\"d-contents\"\n [isInitialLoading]=\"isLoading$ | async\"\n [alarms]=\"alarms$ | async\"\n [typeFilters]=\"typeFilters\"\n (onScrollingStateChange)=\"changeInterval(!$event)\"\n (onSelectedAlarm)=\"changeInterval(false)\"\n [splitView]=\"true\"\n [hasPermissions]=\"!isDisabled\"\n >\n <ng-container *ngIf=\"isIntervalRefresh; else realtimeRefresh\">\n <c8y-alarms-interval-refresh\n [alarmsListLoading$]=\"isLoading$\"\n [isIntervalToggleEnabled]=\"shouldShowIntervalToggle$ | async\"\n (onCountdownEnded)=\"refresh()\"\n [isDisabled]=\"isDisabled\"\n ></c8y-alarms-interval-refresh>\n </ng-container>\n </c8y-alarms-list>\n\n <router-outlet class=\"d-contents\"></router-outlet>\n</div>\n", dependencies: [{ kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "component", type: i3.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: i3.HelpComponent, selector: "c8y-help", inputs: ["src", "isCollapsed", "priority", "icon"] }, { kind: "directive", type: i6.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "directive", type: i1.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: i7.AlarmsFilterComponent, selector: "c8y-alarms-filter", inputs: ["contextSourceId"], outputs: ["onFilterApplied"] }, { kind: "component", type: i8.AlarmsIntervalRefreshComponent, selector: "c8y-alarms-interval-refresh", inputs: ["isDisabled", "alarmsListLoading$", "isIntervalToggleEnabled"], outputs: ["onCountdownEnded"] }, { kind: "component", type: i9.AlarmsListComponent, selector: "c8y-alarms-list", inputs: ["alarms", "hasPermissions", "typeFilters", "loadMoreMode", "navigationOptions", "isInitialLoading", "splitView"], outputs: ["onSelectedAlarm", "onScrollingStateChange"] }, { kind: "component", type: i10.AlarmsDateFilterComponent, selector: "c8y-alarms-date-filter", inputs: ["DEFAULT_INTERVAL", "updateQueryParams", "date"], outputs: ["dateFilterChange"] }, { kind: "component", type: i11.AlarmsTypeFilterComponent, selector: "c8y-alarms-type-filter", inputs: ["alarms", "possibleFilters", "activeFilters"], outputs: ["onFilterChanged"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }] }); }
188
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AlarmsComponent, selector: "c8y-alarms", providers: [AlarmWithChildrenRealtimeService], viewQueries: [{ propertyName: "alarmIntervalRefreshComponent", first: true, predicate: AlarmsIntervalRefreshComponent, descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"(activatedRoute.data | async)?.title\">\n <c8y-title>{{ TITLE | translate }}</c8y-title>\n</ng-container>\n\n<c8y-action-bar-item\n [placement]=\"'left'\"\n itemClass=\"navbar-form min-width-fit\"\n>\n <c8y-alarms-filter\n class=\"d-block fit-w\"\n [contextSourceId]=\"contextSourceId\"\n (onFilterApplied)=\"applyFormFilters($event)\"\n ></c8y-alarms-filter>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'left'\"\n itemClass=\"navbar-form min-width-fit\"\n>\n <c8y-alarms-date-filter (dateFilterChange)=\"applyFormFilters($event)\"></c8y-alarms-date-filter>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'left'\"\n itemClass=\"navbar-form\"\n>\n <c8y-alarms-type-filter\n class=\"d-block fit-w\"\n [alarms]=\"alarms$ | async\"\n (onFilterChanged)=\"applyTypeFilters($event)\"\n ></c8y-alarms-type-filter>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"0\"\n>\n <button\n class=\"btn btn-link\"\n [title]=\"'Clear all alarms' | translate\"\n type=\"button\"\n (click)=\"clearAll()\"\n data-cy=\"c8y-alarms-view--clear-all-button\"\n >\n <i c8yIcon=\"c8y-alert-idle\"></i>\n {{ 'Clear all`alarms`' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<!--Realtime button-->\n<ng-template #realtimeRefresh>\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-default btn-sm\"\n [attr.aria-label]=\"'Refresh' | translate\"\n [tooltip]=\"\n (isRealtimeActive | async)\n ? (NEW_REALTIME_ALARM_MESSAGE | translate)\n : (REFRESH_LABEL | translate)\n \"\n placement=\"left\"\n container=\"body\"\n type=\"button\"\n [adaptivePosition]=\"false\"\n [delay]=\"500\"\n [disabled]=\"isLoading$ | async\"\n (click)=\"refresh()\"\n >\n <span\n class=\"tag tag--info m-r-8\"\n *ngIf=\"isRealtimeActive | async\"\n >\n {{ 'New alarms' | translate }}\n </span>\n <i\n c8yIcon=\"refresh\"\n [ngClass]=\"{ 'icon-spin': isLoading$ | async }\"\n ></i>\n </button>\n <button\n class=\"c8y-realtime btn btn-default btn-sm\"\n [attr.aria-label]=\"realtimeIconTitle\"\n [tooltip]=\"realtimeIconTitle\"\n data-cy=\"c8y-alarms--realtime-button\"\n placement=\"bottom\"\n type=\"button\"\n data-cy=\"c8y-alarms--realtime-button\"\n [container]=\"'body'\"\n (click)=\"toggleRealtimeState()\"\n >\n <span\n class=\"c8y-pulse m-0\"\n [ngClass]=\"{\n active: isRealtimeToggleOn,\n inactive: !isRealtimeToggleOn\n }\"\n ></span>\n </button>\n </div>\n</ng-template>\n\n<c8y-help\n src=\"/docs/device-management-application/monitoring-and-controlling-devices/#working-with-alarms\"\n></c8y-help>\n\n<div class=\"card content-fullpage split-view--5-7 grid__row--1\">\n <c8y-alarms-list\n class=\"d-contents\"\n [isInitialLoading]=\"isLoading$ | async\"\n [alarms]=\"alarms$ | async\"\n [typeFilters]=\"typeFilters\"\n (onScrollingStateChange)=\"changeInterval(!$event)\"\n (onSelectedAlarm)=\"changeInterval(false)\"\n [splitView]=\"true\"\n [hasPermissions]=\"!isDisabled\"\n >\n <ng-container *ngIf=\"isIntervalRefresh; else realtimeRefresh\">\n <c8y-alarms-interval-refresh\n [alarmsListLoading$]=\"isLoading$\"\n [isIntervalToggleEnabled]=\"shouldShowIntervalToggle$ | async\"\n (onCountdownEnded)=\"refresh()\"\n [isDisabled]=\"isDisabled\"\n ></c8y-alarms-interval-refresh>\n </ng-container>\n </c8y-alarms-list>\n\n <router-outlet class=\"d-contents\"></router-outlet>\n</div>\n", dependencies: [{ kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "component", type: i3.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: i3.HelpComponent, selector: "c8y-help", inputs: ["src", "isCollapsed", "priority", "icon"] }, { kind: "directive", type: i6.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "directive", type: i1.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: i7.AlarmsFilterComponent, selector: "c8y-alarms-filter", inputs: ["contextSourceId"], outputs: ["onFilterApplied"] }, { kind: "component", type: i8.AlarmsIntervalRefreshComponent, selector: "c8y-alarms-interval-refresh", inputs: ["isDisabled", "alarmsListLoading$", "isIntervalToggleEnabled"], outputs: ["onCountdownEnded"] }, { kind: "component", type: i9.AlarmsListComponent, selector: "c8y-alarms-list", inputs: ["alarms", "hasPermissions", "typeFilters", "loadMoreMode", "navigationOptions", "isInitialLoading", "splitView"], outputs: ["onSelectedAlarm", "onScrollingStateChange"] }, { kind: "component", type: i10.AlarmsDateFilterComponent, selector: "c8y-alarms-date-filter", inputs: ["DEFAULT_INTERVAL", "updateQueryParams", "date"], outputs: ["dateFilterChange"] }, { kind: "component", type: i11.AlarmsTypeFilterComponent, selector: "c8y-alarms-type-filter", inputs: ["alarms", "possibleFilters", "activeFilters"], outputs: ["onFilterChanged"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }] }); }
189
189
  }
190
190
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AlarmsComponent, decorators: [{
191
191
  type: Component,
192
- args: [{ selector: 'c8y-alarms', providers: [AlarmWithChildrenRealtimeService], template: "<ng-container *ngIf=\"(activatedRoute.data | async)?.title\">\n <c8y-title>{{ TITLE | translate }}</c8y-title>\n</ng-container>\n\n<c8y-action-bar-item\n [placement]=\"'left'\"\n itemClass=\"navbar-form min-width-fit\"\n>\n <c8y-alarms-filter\n class=\"d-block fit-w\"\n [contextSourceId]=\"contextSourceId\"\n (onFilterApplied)=\"applyFormFilters($event)\"\n ></c8y-alarms-filter>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'left'\"\n itemClass=\"navbar-form min-width-fit\"\n>\n <c8y-alarms-date-filter (dateFilterChange)=\"applyFormFilters($event)\"></c8y-alarms-date-filter>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'left'\"\n itemClass=\"navbar-form\"\n>\n <c8y-alarms-type-filter\n class=\"d-block fit-w\"\n [alarms]=\"alarms$ | async\"\n (onFilterChanged)=\"applyTypeFilters($event)\"\n ></c8y-alarms-type-filter>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"0\"\n>\n <button\n class=\"btn btn-link\"\n [title]=\"'Clear all alarms' | translate\"\n type=\"button\"\n (click)=\"clearAll()\"\n data-cy=\"c8y-alarms-view--clear-all-button\"\n >\n <i c8yIcon=\"c8y-alert-idle\"></i>\n {{ 'Clear all`alarms`' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<!--Realtime button-->\n<ng-template #realtimeRefresh>\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-default btn-sm\"\n [attr.aria-label]=\"'Refresh' | translate\"\n [tooltip]=\"\n (isRealtimeActive | async)\n ? (NEW_REALTIME_ALARM_MESSAGE | translate)\n : (REFRESH_LABEL | translate)\n \"\n placement=\"left\"\n container=\"body\"\n type=\"button\"\n [adaptivePosition]=\"false\"\n [delay]=\"500\"\n [disabled]=\"isLoading$ | async\"\n (click)=\"refresh()\"\n >\n <span\n class=\"tag tag--info m-r-8\"\n *ngIf=\"isRealtimeActive | async\"\n >\n {{ 'New alarms' | translate }}\n </span>\n <i\n c8yIcon=\"refresh\"\n [ngClass]=\"{ 'icon-spin': isLoading$ | async }\"\n ></i>\n </button>\n <button\n class=\"c8y-realtime btn btn-default btn-sm\"\n [attr.aria-label]=\"realtimeIconTitle\"\n [tooltip]=\"realtimeIconTitle\"\n placement=\"bottom\"\n type=\"button\"\n data-cy=\"c8y-alarms--realtime-button\"\n [container]=\"'body'\"\n (click)=\"toggleRealtimeState()\"\n >\n <span\n class=\"c8y-pulse m-0\"\n [ngClass]=\"{\n active: isRealtimeToggleOn,\n inactive: !isRealtimeToggleOn\n }\"\n ></span>\n </button>\n </div>\n</ng-template>\n\n<c8y-help\n src=\"/docs/device-management-application/monitoring-and-controlling-devices/#working-with-alarms\"\n></c8y-help>\n\n<div class=\"card content-fullpage split-view--5-7 grid__row--1\">\n <c8y-alarms-list\n class=\"d-contents\"\n [isInitialLoading]=\"isLoading$ | async\"\n [alarms]=\"alarms$ | async\"\n [typeFilters]=\"typeFilters\"\n (onScrollingStateChange)=\"changeInterval(!$event)\"\n (onSelectedAlarm)=\"changeInterval(false)\"\n [splitView]=\"true\"\n [hasPermissions]=\"!isDisabled\"\n >\n <ng-container *ngIf=\"isIntervalRefresh; else realtimeRefresh\">\n <c8y-alarms-interval-refresh\n [alarmsListLoading$]=\"isLoading$\"\n [isIntervalToggleEnabled]=\"shouldShowIntervalToggle$ | async\"\n (onCountdownEnded)=\"refresh()\"\n [isDisabled]=\"isDisabled\"\n ></c8y-alarms-interval-refresh>\n </ng-container>\n </c8y-alarms-list>\n\n <router-outlet class=\"d-contents\"></router-outlet>\n</div>\n" }]
192
+ args: [{ selector: 'c8y-alarms', providers: [AlarmWithChildrenRealtimeService], template: "<ng-container *ngIf=\"(activatedRoute.data | async)?.title\">\n <c8y-title>{{ TITLE | translate }}</c8y-title>\n</ng-container>\n\n<c8y-action-bar-item\n [placement]=\"'left'\"\n itemClass=\"navbar-form min-width-fit\"\n>\n <c8y-alarms-filter\n class=\"d-block fit-w\"\n [contextSourceId]=\"contextSourceId\"\n (onFilterApplied)=\"applyFormFilters($event)\"\n ></c8y-alarms-filter>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'left'\"\n itemClass=\"navbar-form min-width-fit\"\n>\n <c8y-alarms-date-filter (dateFilterChange)=\"applyFormFilters($event)\"></c8y-alarms-date-filter>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'left'\"\n itemClass=\"navbar-form\"\n>\n <c8y-alarms-type-filter\n class=\"d-block fit-w\"\n [alarms]=\"alarms$ | async\"\n (onFilterChanged)=\"applyTypeFilters($event)\"\n ></c8y-alarms-type-filter>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"0\"\n>\n <button\n class=\"btn btn-link\"\n [title]=\"'Clear all alarms' | translate\"\n type=\"button\"\n (click)=\"clearAll()\"\n data-cy=\"c8y-alarms-view--clear-all-button\"\n >\n <i c8yIcon=\"c8y-alert-idle\"></i>\n {{ 'Clear all`alarms`' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<!--Realtime button-->\n<ng-template #realtimeRefresh>\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-default btn-sm\"\n [attr.aria-label]=\"'Refresh' | translate\"\n [tooltip]=\"\n (isRealtimeActive | async)\n ? (NEW_REALTIME_ALARM_MESSAGE | translate)\n : (REFRESH_LABEL | translate)\n \"\n placement=\"left\"\n container=\"body\"\n type=\"button\"\n [adaptivePosition]=\"false\"\n [delay]=\"500\"\n [disabled]=\"isLoading$ | async\"\n (click)=\"refresh()\"\n >\n <span\n class=\"tag tag--info m-r-8\"\n *ngIf=\"isRealtimeActive | async\"\n >\n {{ 'New alarms' | translate }}\n </span>\n <i\n c8yIcon=\"refresh\"\n [ngClass]=\"{ 'icon-spin': isLoading$ | async }\"\n ></i>\n </button>\n <button\n class=\"c8y-realtime btn btn-default btn-sm\"\n [attr.aria-label]=\"realtimeIconTitle\"\n [tooltip]=\"realtimeIconTitle\"\n data-cy=\"c8y-alarms--realtime-button\"\n placement=\"bottom\"\n type=\"button\"\n data-cy=\"c8y-alarms--realtime-button\"\n [container]=\"'body'\"\n (click)=\"toggleRealtimeState()\"\n >\n <span\n class=\"c8y-pulse m-0\"\n [ngClass]=\"{\n active: isRealtimeToggleOn,\n inactive: !isRealtimeToggleOn\n }\"\n ></span>\n </button>\n </div>\n</ng-template>\n\n<c8y-help\n src=\"/docs/device-management-application/monitoring-and-controlling-devices/#working-with-alarms\"\n></c8y-help>\n\n<div class=\"card content-fullpage split-view--5-7 grid__row--1\">\n <c8y-alarms-list\n class=\"d-contents\"\n [isInitialLoading]=\"isLoading$ | async\"\n [alarms]=\"alarms$ | async\"\n [typeFilters]=\"typeFilters\"\n (onScrollingStateChange)=\"changeInterval(!$event)\"\n (onSelectedAlarm)=\"changeInterval(false)\"\n [splitView]=\"true\"\n [hasPermissions]=\"!isDisabled\"\n >\n <ng-container *ngIf=\"isIntervalRefresh; else realtimeRefresh\">\n <c8y-alarms-interval-refresh\n [alarmsListLoading$]=\"isLoading$\"\n [isIntervalToggleEnabled]=\"shouldShowIntervalToggle$ | async\"\n (onCountdownEnded)=\"refresh()\"\n [isDisabled]=\"isDisabled\"\n ></c8y-alarms-interval-refresh>\n </ng-container>\n </c8y-alarms-list>\n\n <router-outlet class=\"d-contents\"></router-outlet>\n</div>\n" }]
193
193
  }], ctorParameters: () => [{ type: i1.ActivatedRoute }, { type: i2.AlarmsViewService }, { type: i3.AlarmWithChildrenRealtimeService }, { type: i3.AlertService }, { type: i3.ContextRouteService }, { type: i3.ModalService }, { type: i4.TranslateService }, { type: i1.Router }], propDecorators: { alarmIntervalRefreshComponent: [{
194
194
  type: ViewChild,
195
195
  args: [AlarmsIntervalRefreshComponent]
196
196
  }] } });
197
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxhcm1zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2FsYXJtcy9hbGFybXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vYWxhcm1zL2FsYXJtcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBSUwsZUFBZSxFQUdoQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQ0wsZ0NBQWdDLEVBQ2hDLFlBQVksRUFDWixtQkFBbUIsRUFFbkIsWUFBWSxFQUNaLFdBQVcsRUFDWCxPQUFPLEVBQ1IsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNyRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLHlCQUF5QixFQUMxQixNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7O0FBT3hCLE1BQU0sT0FBTyxlQUFlO0lBMEIxQixZQUNTLGNBQThCLEVBQzdCLGlCQUFvQyxFQUNwQyxnQ0FBa0UsRUFDbEUsWUFBMEIsRUFDMUIsbUJBQXdDLEVBQ3hDLFlBQTBCLEVBQzFCLGdCQUFrQyxFQUNsQyxNQUFjO1FBUGYsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzdCLHNCQUFp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YyxDQUFDLENBQUM7UUFDbEYsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ2xCLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsR0FBRyxZQUFZLENBQUM7UUFDOUMsSUFDRSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxRQUFRLENBQzNGLE9BQU8sQ0FDUixFQUNELENBQUM7WUFDRCxJQUFJLENBQUMsZUFBZSxHQUFHLFdBQVcsRUFBRSxFQUFFLENBQUM7UUFDekMsQ0FBQztJQUNILENBQUM7K0dBM05VLGVBQWU7bUdBQWYsZUFBZSxxQ0FGZixDQUFDLGdDQUFnQyxDQUFDLHlGQU9sQyw4QkFBOEIsZ0RDekMzQyxtbkhBK0hBOzs0RkQzRmEsZUFBZTtrQkFMM0IsU0FBUzsrQkFDRSxZQUFZLGFBRVgsQ0FBQyxnQ0FBZ0MsQ0FBQzs4U0FRN0MsNkJBQTZCO3NCQUQ1QixTQUFTO3VCQUFDLDhCQUE4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBBbGFybVF1ZXJ5RmlsdGVyLFxuICBJQWxhcm0sXG4gIElSZXN1bHRMaXN0LFxuICBTRVZFUklUWV9MQUJFTFMsXG4gIFNldmVyaXR5RmlsdGVyLFxuICBTZXZlcml0eVR5cGVcbn0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHtcbiAgQWxhcm1XaXRoQ2hpbGRyZW5SZWFsdGltZVNlcnZpY2UsXG4gIEFsZXJ0U2VydmljZSxcbiAgQ29udGV4dFJvdXRlU2VydmljZSxcbiAgRGF0ZVRpbWVDb250ZXh0LFxuICBNb2RhbFNlcnZpY2UsXG4gIFZpZXdDb250ZXh0LFxuICBnZXR0ZXh0XG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgQWxhcm1EZXRhaWxzIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9hbGFybS1ldmVudC1zZWxlY3Rvcic7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgdGFrZVVudGlsLCB0aHJvdHRsZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBbGFybXNJbnRlcnZhbFJlZnJlc2hDb21wb25lbnQgfSBmcm9tICcuL2FsYXJtcy1pbnRlcnZhbC1yZWZyZXNoLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBbGFybXNWaWV3U2VydmljZSB9IGZyb20gJy4vYWxhcm1zLXZpZXcuc2VydmljZSc7XG5pbXBvcnQge1xuICBBbGFybUxpc3RGb3JtRmlsdGVycyxcbiAgREVGQVVMVF9TRVZFUklUWV9WQUxVRVMsXG4gIFRIUk9UVExFX1JFQUxUSU1FX1JFRlJFU0hcbn0gZnJvbSAnLi9hbGFybXMubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktYWxhcm1zJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FsYXJtcy5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVyczogW0FsYXJtV2l0aENoaWxkcmVuUmVhbHRpbWVTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBBbGFybXNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHJlYWRvbmx5IE5FV19SRUFMVElNRV9BTEFSTV9NRVNTQUdFID0gdGhpcy5hbGFybXNWaWV3U2VydmljZS5SRUFMVElNRV9VUERBVEVfQUxBUk1TX01FU1NBR0U7XG4gIHJlYWRvbmx5IFRJVExFID0gZ2V0dGV4dCgnQWxhcm1zJyk7XG4gIHJlYWRvbmx5IFJFRlJFU0hfTEFCRUwgPSBnZXR0ZXh0KCdSZWZyZXNoJyk7XG5cbiAgQFZpZXdDaGlsZChBbGFybXNJbnRlcnZhbFJlZnJlc2hDb21wb25lbnQpXG4gIGFsYXJtSW50ZXJ2YWxSZWZyZXNoQ29tcG9uZW50OiBBbGFybXNJbnRlcnZhbFJlZnJlc2hDb21wb25lbnQ7XG4gIGFsYXJtcyQ6IEJlaGF2aW9yU3ViamVjdDxJUmVzdWx0TGlzdDxJQWxhcm0+PiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVJlc3VsdExpc3Q8SUFsYXJtPj4obnVsbCk7XG4gIGNvbnRleHRTb3VyY2VJZDogbnVtYmVyIHwgc3RyaW5nIHwgbnVsbDtcbiAgLyoqIHJlc3BvbnNpYmxlIGZvciBzaG93aW5nIGVpdGhlciByZWFsdGltZSBidXR0b24gb3IgaW50ZXJ2YWxzLCBiYXNlZCBvbiAncmVmcmVzaFR5cGUnIGtleSBpbiBPcHRpb25zU2VydmljZSAqL1xuICBpc0ludGVydmFsUmVmcmVzaDogYm9vbGVhbjtcbiAgaXNMb2FkaW5nJDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGlzUmVhbHRpbWVBY3RpdmUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhbHRpbWVJY29uVGl0bGU6IHN0cmluZztcbiAgc2hvdWxkU2hvd0ludGVydmFsVG9nZ2xlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gIGlzUmVhbHRpbWVUb2dnbGVPbiA9IHRydWU7XG4gIHR5cGVGaWx0ZXJzOiBBbGFybURldGFpbHNbXSA9IFtdO1xuICBpc0Rpc2FibGVkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBkZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgc2VsZWN0ZWRTZXZlcml0aWVzID0gT2JqZWN0LmtleXMoU0VWRVJJVFlfTEFCRUxTKSBhcyBTZXZlcml0eVR5cGVbXTtcbiAgcHJpdmF0ZSBzZXZlcml0eU9wdGlvbnM6IFNldmVyaXR5RmlsdGVyID0gREVGQVVMVF9TRVZFUklUWV9WQUxVRVM7XG4gIHByaXZhdGUgc2hvd0NsZWFyZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSByZWFkb25seSBXQUlUX1RJTUVfQVZPSURfTVVMVElQTEVfUkVRVUVTVF9CWV9QQVJBTV9DSEFOR0UgPSAxMDA7XG4gIHByaXZhdGUgc2VsZWN0ZWREYXRlczogRGF0ZVRpbWVDb250ZXh0O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSBhbGFybXNWaWV3U2VydmljZTogQWxhcm1zVmlld1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGFybVdpdGhDaGlsZHJlblJlYWx0aW1lU2VydmljZTogQWxhcm1XaXRoQ2hpbGRyZW5SZWFsdGltZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIGNvbnRleHRSb3V0ZVNlcnZpY2U6IENvbnRleHRSb3V0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlclxuICApIHtcbiAgICB0aGlzLmlzSW50ZXJ2YWxSZWZyZXNoID0gdGhpcy5hbGFybXNWaWV3U2VydmljZS5pc0ludGVydmFsUmVmcmVzaCgpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZUNvbnRleHRTb3VyY2VJZCgpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgY29uc3QgaXNJbkRldGFpbFZpZXcgPSAhIXRoaXMuYWN0aXZhdGVkUm91dGUuY2hpbGRyZW5bMF0/LnNuYXBzaG90LnBhcmFtcy5pZDtcbiAgICBpZiAoaXNJbkRldGFpbFZpZXcpIHtcbiAgICAgIHRoaXMuY2hhbmdlSW50ZXJ2YWwoZmFsc2UpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5pc0ludGVydmFsUmVmcmVzaCkge1xuICAgICAgdGhpcy5oYW5kbGVMZWdhY3lSZWFsdGltZSgpO1xuICAgIH1cblxuICAgIHRoaXMuYWxhcm1zVmlld1NlcnZpY2UucmVsb2FkQWxhcm1zTGlzdCRcbiAgICAgIC5waXBlKFxuICAgICAgICBkZWJvdW5jZVRpbWUodGhpcy5XQUlUX1RJTUVfQVZPSURfTVVMVElQTEVfUkVRVUVTVF9CWV9QQVJBTV9DSEFOR0UpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZUFsYXJtcygpO1xuICAgICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBhcHBseVR5cGVGaWx0ZXJzKHR5cGVGaWx0ZXJzOiBBbGFybURldGFpbHNbXSk6IHZvaWQge1xuICAgIHRoaXMudHlwZUZpbHRlcnMgPSB0eXBlRmlsdGVycztcbiAgICB0aGlzLmFsYXJtc1ZpZXdTZXJ2aWNlLnJlbG9hZEFsYXJtc0xpc3QkLm5leHQoKTtcbiAgICB0aGlzLmlzUmVhbHRpbWVBY3RpdmUubmV4dChmYWxzZSk7XG4gIH1cblxuICBhcHBseUZvcm1GaWx0ZXJzKHsgc2V2ZXJpdHlPcHRpb25zLCBzaG93Q2xlYXJlZCwgc2VsZWN0ZWREYXRlcyB9OiBBbGFybUxpc3RGb3JtRmlsdGVycyk6IHZvaWQge1xuICAgIHRoaXMuc2V2ZXJpdHlPcHRpb25zID0gc2V2ZXJpdHlPcHRpb25zO1xuICAgIHRoaXMuc2hvd0NsZWFyZWQgPSBzaG93Q2xlYXJlZDtcbiAgICB0aGlzLnNlbGVjdGVkRGF0ZXMgPSBzZWxlY3RlZERhdGVzO1xuICAgIHRoaXMuc2VsZWN0ZWRTZXZlcml0aWVzID0gdGhpcy5hbGFybXNWaWV3U2VydmljZS51cGRhdGVTZWxlY3RlZFNldmVyaXRpZXModGhpcy5zZXZlcml0eU9wdGlvbnMpO1xuICAgIHRoaXMuYWxhcm1zVmlld1NlcnZpY2UucmVsb2FkQWxhcm1zTGlzdCQubmV4dCgpO1xuICAgIHRoaXMuaXNSZWFsdGltZUFjdGl2ZS5uZXh0KGZhbHNlKTtcbiAgfVxuXG4gIGFzeW5jIGFwcGx5RGF0ZUZpbHRlcihzZWxlY3RlZERhdGVzOiBbRGF0ZSwgRGF0ZV0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmFsYXJtcyQubmV4dChhd2FpdCB0aGlzLmFsYXJtc1ZpZXdTZXJ2aWNlLnJldHJpZXZlQWxhcm1zQnlEYXRlKHNlbGVjdGVkRGF0ZXMpKTtcbiAgICB0aGlzLmlzUmVhbHRpbWVBY3RpdmUubmV4dChmYWxzZSk7XG4gIH1cblxuICBhc3luYyBjbGVhckFsbCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdHJhbnNsYXRlZEJvZHkgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgZ2V0dGV4dCgnRG8geW91IHJlYWxseSB3YW50IHRvIGNsZWFyIGFsbCBhbGFybXMgb2Ygc2VsZWN0ZWQgc2V2ZXJpdGllcz8nKVxuICAgICAgKTtcbiAgICAgIGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLmNvbmZpcm0oXG4gICAgICAgIGdldHRleHQoJ0NvbmZpcm0gY2xlYXJpbmcgYWxhcm1zPycpLFxuICAgICAgICB0cmFuc2xhdGVkQm9keSxcbiAgICAgICAgJ2RhbmdlcicsXG4gICAgICAgIHtcbiAgICAgICAgICBvazogZ2V0dGV4dCgnQ29uZmlybScpLFxuICAgICAgICAgIGNhbmNlbDogZ2V0dGV4dCgnQ2FuY2VsJylcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIG1vZGFsIGNhbmNlbGVkXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5jbGVhckFsYXJtcygpO1xuICB9XG5cbiAgcmVmcmVzaCgpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZUFsYXJtcygpO1xuICAgIHRoaXMuaXNSZWFsdGltZUFjdGl2ZS5uZXh0KGZhbHNlKTtcbiAgfVxuXG4gIGNoYW5nZUludGVydmFsKHZhbHVlID0gdHJ1ZSk6IHZvaWQge1xuICAgIHRoaXMuc2hvdWxkU2hvd0ludGVydmFsVG9nZ2xlJC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHRvZ2dsZVJlYWx0aW1lU3RhdGUoKTogdm9pZCB7XG4gICAgdGhpcy5pc1JlYWx0aW1lVG9nZ2xlT24gPSAhdGhpcy5pc1JlYWx0aW1lVG9nZ2xlT247XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUxlZ2FjeVJlYWx0aW1lKCkge1xuICAgIHRoaXMucmVhbHRpbWVJY29uVGl0bGUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChnZXR0ZXh0KCdSZWFsdGltZSBhY3RpdmUnKSk7XG4gICAgdGhpcy5zdWJzY3JpYmVUb1JlYWx0aW1lVXBkYXRlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjbGVhckFsYXJtcygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5hbGFybXNWaWV3U2VydmljZS5jbGVhckFsbEFjdGl2ZUFsYXJtcyhcbiAgICAgICAgdGhpcy5zZWxlY3RlZFNldmVyaXRpZXMsXG4gICAgICAgIHRoaXMuY29udGV4dFNvdXJjZUlkXG4gICAgICApO1xuXG4gICAgICBpZiAocmVzdWx0LnJlc29sdmVkSW1tZWRpYXRlbHkpIHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2Vzcyh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChnZXR0ZXh0KCdBbGFybXMgY2xlYXJlZC4nKSkpO1xuICAgICAgICB0aGlzLmJhY2tUb1Jvb3RSb3V0ZSgpO1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoXG4gICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoZ2V0dGV4dCgnQWxhcm1zIGFyZSBiZWluZyBjbGVhcmVkIGluIGJhY2tncm91bmQuJykpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZFNlcnZlckZhaWx1cmUoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYmFja1RvUm9vdFJvdXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnRleHREYXRhID0gdGhpcy5jb250ZXh0Um91dGVTZXJ2aWNlLmdldENvbnRleHREYXRhKHRoaXMuYWN0aXZhdGVkUm91dGUpO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKHRoaXMuYWxhcm1zVmlld1NlcnZpY2UuZ2V0Um91dGVyTmF2aWdhdGlvbkFycmF5KGNvbnRleHREYXRhKSwge1xuICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJ1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRBbGFybXMoKTogUHJvbWlzZTxJUmVzdWx0TGlzdDxJQWxhcm0+PiB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nJC5uZXh0KHRydWUpO1xuXG4gICAgICBjb25zdCBhZGRpdGlvbmFsRmlsdGVyOiBQYXJ0aWFsPEFsYXJtUXVlcnlGaWx0ZXI+ID0ge307XG5cbiAgICAgIGlmICh0aGlzLmNvbnRleHRTb3VyY2VJZCkge1xuICAgICAgICAoYWRkaXRpb25hbEZpbHRlci5zb3VyY2UgPSB0aGlzLmNvbnRleHRTb3VyY2VJZCksXG4gICAgICAgICAgKGFkZGl0aW9uYWxGaWx0ZXIud2l0aFNvdXJjZUFzc2V0cyA9IHRydWUpLFxuICAgICAgICAgIChhZGRpdGlvbmFsRmlsdGVyLndpdGhTb3VyY2VEZXZpY2VzID0gdHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnR5cGVGaWx0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgYWRkaXRpb25hbEZpbHRlci50eXBlID0gdGhpcy50eXBlRmlsdGVycy5tYXAoKHsgZmlsdGVycyB9KSA9PiBmaWx0ZXJzLnR5cGUpLmpvaW4oJywnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWxhcm1zVmlld1NlcnZpY2UucmV0cmlldmVGaWx0ZXJlZEFsYXJtcyhcbiAgICAgICAgdGhpcy5zZWxlY3RlZFNldmVyaXRpZXMsXG4gICAgICAgIHRoaXMuc2hvd0NsZWFyZWQsXG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlcyxcbiAgICAgICAgYWRkaXRpb25hbEZpbHRlclxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yPy5yZXM/LnN0YXR1cyA9PT0gNDAzKSB7XG4gICAgICAgIHRoaXMuaXNEaXNhYmxlZCA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZFNlcnZlckZhaWx1cmUoZXJyb3IpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmlzTG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVBbGFybXMoKSB7XG4gICAgdGhpcy5hbGFybXMkLm5leHQoYXdhaXQgdGhpcy5nZXRBbGFybXMoKSk7XG4gIH1cblxuICBwcml2YXRlIHN1YnNjcmliZVRvUmVhbHRpbWVVcGRhdGVzKCk6IHZvaWQge1xuICAgIHRoaXMuYWxhcm1XaXRoQ2hpbGRyZW5SZWFsdGltZVNlcnZpY2VcbiAgICAgIC5vbkFsbCQodGhpcy5jb250ZXh0U291cmNlSWQpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgICB0aHJvdHRsZVRpbWUoVEhST1RUTEVfUkVBTFRJTUVfUkVGUkVTSCwgdW5kZWZpbmVkLCB7IHRyYWlsaW5nOiB0cnVlIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaXNSZWFsdGltZVRvZ2dsZU9uKSB7XG4gICAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5pc1JlYWx0aW1lQWN0aXZlLm5leHQodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplQ29udGV4dFNvdXJjZUlkKCk6IHZvaWQge1xuICAgIGNvbnN0IHJvdXRlQ29udGV4dCA9IHRoaXMuY29udGV4dFJvdXRlU2VydmljZS5nZXRDb250ZXh0RGF0YSh0aGlzLmFjdGl2YXRlZFJvdXRlKTtcbiAgICBpZiAoIXJvdXRlQ29udGV4dCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB7IGNvbnRleHQsIGNvbnRleHREYXRhIH0gPSByb3V0ZUNvbnRleHQ7XG4gICAgaWYgKFxuICAgICAgW1ZpZXdDb250ZXh0LkRldmljZSwgVmlld0NvbnRleHQuR3JvdXAsIFZpZXdDb250ZXh0LlNlcnZpY2UsIFZpZXdDb250ZXh0LlNpbXVsYXRvcnNdLmluY2x1ZGVzKFxuICAgICAgICBjb250ZXh0XG4gICAgICApXG4gICAgKSB7XG4gICAgICB0aGlzLmNvbnRleHRTb3VyY2VJZCA9IGNvbnRleHREYXRhPy5pZDtcbiAgICB9XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCIoYWN0aXZhdGVkUm91dGUuZGF0YSB8IGFzeW5jKT8udGl0bGVcIj5cbiAgPGM4eS10aXRsZT57eyBUSVRMRSB8IHRyYW5zbGF0ZSB9fTwvYzh5LXRpdGxlPlxuPC9uZy1jb250YWluZXI+XG5cbjxjOHktYWN0aW9uLWJhci1pdGVtXG4gIFtwbGFjZW1lbnRdPVwiJ2xlZnQnXCJcbiAgaXRlbUNsYXNzPVwibmF2YmFyLWZvcm0gbWluLXdpZHRoLWZpdFwiXG4+XG4gIDxjOHktYWxhcm1zLWZpbHRlclxuICAgIGNsYXNzPVwiZC1ibG9jayBmaXQtd1wiXG4gICAgW2NvbnRleHRTb3VyY2VJZF09XCJjb250ZXh0U291cmNlSWRcIlxuICAgIChvbkZpbHRlckFwcGxpZWQpPVwiYXBwbHlGb3JtRmlsdGVycygkZXZlbnQpXCJcbiAgPjwvYzh5LWFsYXJtcy1maWx0ZXI+XG48L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG5cbjxjOHktYWN0aW9uLWJhci1pdGVtXG4gIFtwbGFjZW1lbnRdPVwiJ2xlZnQnXCJcbiAgaXRlbUNsYXNzPVwibmF2YmFyLWZvcm0gbWluLXdpZHRoLWZpdFwiXG4+XG4gIDxjOHktYWxhcm1zLWRhdGUtZmlsdGVyIChkYXRlRmlsdGVyQ2hhbmdlKT1cImFwcGx5Rm9ybUZpbHRlcnMoJGV2ZW50KVwiPjwvYzh5LWFsYXJtcy1kYXRlLWZpbHRlcj5cbjwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuPGM4eS1hY3Rpb24tYmFyLWl0ZW1cbiAgW3BsYWNlbWVudF09XCInbGVmdCdcIlxuICBpdGVtQ2xhc3M9XCJuYXZiYXItZm9ybVwiXG4+XG4gIDxjOHktYWxhcm1zLXR5cGUtZmlsdGVyXG4gICAgY2xhc3M9XCJkLWJsb2NrIGZpdC13XCJcbiAgICBbYWxhcm1zXT1cImFsYXJtcyQgfCBhc3luY1wiXG4gICAgKG9uRmlsdGVyQ2hhbmdlZCk9XCJhcHBseVR5cGVGaWx0ZXJzKCRldmVudClcIlxuICA+PC9jOHktYWxhcm1zLXR5cGUtZmlsdGVyPlxuPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG48Yzh5LWFjdGlvbi1iYXItaXRlbVxuICBbcGxhY2VtZW50XT1cIidyaWdodCdcIlxuICBbcHJpb3JpdHldPVwiMFwiXG4+XG4gIDxidXR0b25cbiAgICBjbGFzcz1cImJ0biBidG4tbGlua1wiXG4gICAgW3RpdGxlXT1cIidDbGVhciBhbGwgYWxhcm1zJyB8IHRyYW5zbGF0ZVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgKGNsaWNrKT1cImNsZWFyQWxsKClcIlxuICAgIGRhdGEtY3k9XCJjOHktYWxhcm1zLXZpZXctLWNsZWFyLWFsbC1idXR0b25cIlxuICA+XG4gICAgPGkgYzh5SWNvbj1cImM4eS1hbGVydC1pZGxlXCI+PC9pPlxuICAgIHt7ICdDbGVhciBhbGxgYWxhcm1zYCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG48L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG5cbjwhLS1SZWFsdGltZSBidXR0b24tLT5cbjxuZy10ZW1wbGF0ZSAjcmVhbHRpbWVSZWZyZXNoPlxuICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYnRuXCI+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLXNtXCJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1JlZnJlc2gnIHwgdHJhbnNsYXRlXCJcbiAgICAgIFt0b29sdGlwXT1cIlxuICAgICAgICAoaXNSZWFsdGltZUFjdGl2ZSB8IGFzeW5jKVxuICAgICAgICAgID8gKE5FV19SRUFMVElNRV9BTEFSTV9NRVNTQUdFIHwgdHJhbnNsYXRlKVxuICAgICAgICAgIDogKFJFRlJFU0hfTEFCRUwgfCB0cmFuc2xhdGUpXG4gICAgICBcIlxuICAgICAgcGxhY2VtZW50PVwibGVmdFwiXG4gICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgW2FkYXB0aXZlUG9zaXRpb25dPVwiZmFsc2VcIlxuICAgICAgW2RlbGF5XT1cIjUwMFwiXG4gICAgICBbZGlzYWJsZWRdPVwiaXNMb2FkaW5nJCB8IGFzeW5jXCJcbiAgICAgIChjbGljayk9XCJyZWZyZXNoKClcIlxuICAgID5cbiAgICAgIDxzcGFuXG4gICAgICAgIGNsYXNzPVwidGFnIHRhZy0taW5mbyBtLXItOFwiXG4gICAgICAgICpuZ0lmPVwiaXNSZWFsdGltZUFjdGl2ZSB8IGFzeW5jXCJcbiAgICAgID5cbiAgICAgICAge3sgJ05ldyBhbGFybXMnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L3NwYW4+XG4gICAgICA8aVxuICAgICAgICBjOHlJY29uPVwicmVmcmVzaFwiXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgJ2ljb24tc3Bpbic6IGlzTG9hZGluZyQgfCBhc3luYyB9XCJcbiAgICAgID48L2k+XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJjOHktcmVhbHRpbWUgYnRuIGJ0bi1kZWZhdWx0IGJ0bi1zbVwiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInJlYWx0aW1lSWNvblRpdGxlXCJcbiAgICAgIFt0b29sdGlwXT1cInJlYWx0aW1lSWNvblRpdGxlXCJcbiAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGRhdGEtY3k9XCJjOHktYWxhcm1zLS1yZWFsdGltZS1idXR0b25cIlxuICAgICAgW2NvbnRhaW5lcl09XCInYm9keSdcIlxuICAgICAgKGNsaWNrKT1cInRvZ2dsZVJlYWx0aW1lU3RhdGUoKVwiXG4gICAgPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3M9XCJjOHktcHVsc2UgbS0wXCJcbiAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgIGFjdGl2ZTogaXNSZWFsdGltZVRvZ2dsZU9uLFxuICAgICAgICAgIGluYWN0aXZlOiAhaXNSZWFsdGltZVRvZ2dsZU9uXG4gICAgICAgIH1cIlxuICAgICAgPjwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48Yzh5LWhlbHBcbiAgc3JjPVwiL2RvY3MvZGV2aWNlLW1hbmFnZW1lbnQtYXBwbGljYXRpb24vbW9uaXRvcmluZy1hbmQtY29udHJvbGxpbmctZGV2aWNlcy8jd29ya2luZy13aXRoLWFsYXJtc1wiXG4+PC9jOHktaGVscD5cblxuPGRpdiBjbGFzcz1cImNhcmQgY29udGVudC1mdWxscGFnZSBzcGxpdC12aWV3LS01LTcgZ3JpZF9fcm93LS0xXCI+XG4gIDxjOHktYWxhcm1zLWxpc3RcbiAgICBjbGFzcz1cImQtY29udGVudHNcIlxuICAgIFtpc0luaXRpYWxMb2FkaW5nXT1cImlzTG9hZGluZyQgfCBhc3luY1wiXG4gICAgW2FsYXJtc109XCJhbGFybXMkIHwgYXN5bmNcIlxuICAgIFt0eXBlRmlsdGVyc109XCJ0eXBlRmlsdGVyc1wiXG4gICAgKG9uU2Nyb2xsaW5nU3RhdGVDaGFuZ2UpPVwiY2hhbmdlSW50ZXJ2YWwoISRldmVudClcIlxuICAgIChvblNlbGVjdGVkQWxhcm0pPVwiY2hhbmdlSW50ZXJ2YWwoZmFsc2UpXCJcbiAgICBbc3BsaXRWaWV3XT1cInRydWVcIlxuICAgIFtoYXNQZXJtaXNzaW9uc109XCIhaXNEaXNhYmxlZFwiXG4gID5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNJbnRlcnZhbFJlZnJlc2g7IGVsc2UgcmVhbHRpbWVSZWZyZXNoXCI+XG4gICAgICA8Yzh5LWFsYXJtcy1pbnRlcnZhbC1yZWZyZXNoXG4gICAgICAgIFthbGFybXNMaXN0TG9hZGluZyRdPVwiaXNMb2FkaW5nJFwiXG4gICAgICAgIFtpc0ludGVydmFsVG9nZ2xlRW5hYmxlZF09XCJzaG91bGRTaG93SW50ZXJ2YWxUb2dnbGUkIHwgYXN5bmNcIlxuICAgICAgICAob25Db3VudGRvd25FbmRlZCk9XCJyZWZyZXNoKClcIlxuICAgICAgICBbaXNEaXNhYmxlZF09XCJpc0Rpc2FibGVkXCJcbiAgICAgID48L2M4eS1hbGFybXMtaW50ZXJ2YWwtcmVmcmVzaD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9jOHktYWxhcm1zLWxpc3Q+XG5cbiAgPHJvdXRlci1vdXRsZXQgY2xhc3M9XCJkLWNvbnRlbnRzXCI+PC9yb3V0ZXItb3V0bGV0PlxuPC9kaXY+XG4iXX0=
197
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxhcm1zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2FsYXJtcy9hbGFybXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vYWxhcm1zL2FsYXJtcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBSUwsZUFBZSxFQUdoQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQ0wsZ0NBQWdDLEVBQ2hDLFlBQVksRUFDWixtQkFBbUIsRUFFbkIsWUFBWSxFQUNaLFdBQVcsRUFDWCxPQUFPLEVBQ1IsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNyRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLHlCQUF5QixFQUMxQixNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7O0FBT3hCLE1BQU0sT0FBTyxlQUFlO0lBMEIxQixZQUNTLGNBQThCLEVBQzdCLGlCQUFvQyxFQUNwQyxnQ0FBa0UsRUFDbEUsWUFBMEIsRUFDMUIsbUJBQXdDLEVBQ3hDLFlBQTBCLEVBQzFCLGdCQUFrQyxFQUNsQyxNQUFjO1FBUGYsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzdCLHNCQUFp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YyxDQUFDLENBQUM7UUFDbEYsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ2xCLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsR0FBRyxZQUFZLENBQUM7UUFDOUMsSUFDRSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxRQUFRLENBQzNGLE9BQU8sQ0FDUixFQUNELENBQUM7WUFDRCxJQUFJLENBQUMsZUFBZSxHQUFHLFdBQVcsRUFBRSxFQUFFLENBQUM7UUFDekMsQ0FBQztJQUNILENBQUM7K0dBM05VLGVBQWU7bUdBQWYsZUFBZSxxQ0FGZixDQUFDLGdDQUFnQyxDQUFDLHlGQU9sQyw4QkFBOEIsZ0RDekMzQyxrcUhBZ0lBOzs0RkQ1RmEsZUFBZTtrQkFMM0IsU0FBUzsrQkFDRSxZQUFZLGFBRVgsQ0FBQyxnQ0FBZ0MsQ0FBQzs4U0FRN0MsNkJBQTZCO3NCQUQ1QixTQUFTO3VCQUFDLDhCQUE4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBBbGFybVF1ZXJ5RmlsdGVyLFxuICBJQWxhcm0sXG4gIElSZXN1bHRMaXN0LFxuICBTRVZFUklUWV9MQUJFTFMsXG4gIFNldmVyaXR5RmlsdGVyLFxuICBTZXZlcml0eVR5cGVcbn0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHtcbiAgQWxhcm1XaXRoQ2hpbGRyZW5SZWFsdGltZVNlcnZpY2UsXG4gIEFsZXJ0U2VydmljZSxcbiAgQ29udGV4dFJvdXRlU2VydmljZSxcbiAgRGF0ZVRpbWVDb250ZXh0LFxuICBNb2RhbFNlcnZpY2UsXG4gIFZpZXdDb250ZXh0LFxuICBnZXR0ZXh0XG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgQWxhcm1EZXRhaWxzIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9hbGFybS1ldmVudC1zZWxlY3Rvcic7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgdGFrZVVudGlsLCB0aHJvdHRsZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBbGFybXNJbnRlcnZhbFJlZnJlc2hDb21wb25lbnQgfSBmcm9tICcuL2FsYXJtcy1pbnRlcnZhbC1yZWZyZXNoLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBbGFybXNWaWV3U2VydmljZSB9IGZyb20gJy4vYWxhcm1zLXZpZXcuc2VydmljZSc7XG5pbXBvcnQge1xuICBBbGFybUxpc3RGb3JtRmlsdGVycyxcbiAgREVGQVVMVF9TRVZFUklUWV9WQUxVRVMsXG4gIFRIUk9UVExFX1JFQUxUSU1FX1JFRlJFU0hcbn0gZnJvbSAnLi9hbGFybXMubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktYWxhcm1zJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FsYXJtcy5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVyczogW0FsYXJtV2l0aENoaWxkcmVuUmVhbHRpbWVTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBBbGFybXNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHJlYWRvbmx5IE5FV19SRUFMVElNRV9BTEFSTV9NRVNTQUdFID0gdGhpcy5hbGFybXNWaWV3U2VydmljZS5SRUFMVElNRV9VUERBVEVfQUxBUk1TX01FU1NBR0U7XG4gIHJlYWRvbmx5IFRJVExFID0gZ2V0dGV4dCgnQWxhcm1zJyk7XG4gIHJlYWRvbmx5IFJFRlJFU0hfTEFCRUwgPSBnZXR0ZXh0KCdSZWZyZXNoJyk7XG5cbiAgQFZpZXdDaGlsZChBbGFybXNJbnRlcnZhbFJlZnJlc2hDb21wb25lbnQpXG4gIGFsYXJtSW50ZXJ2YWxSZWZyZXNoQ29tcG9uZW50OiBBbGFybXNJbnRlcnZhbFJlZnJlc2hDb21wb25lbnQ7XG4gIGFsYXJtcyQ6IEJlaGF2aW9yU3ViamVjdDxJUmVzdWx0TGlzdDxJQWxhcm0+PiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVJlc3VsdExpc3Q8SUFsYXJtPj4obnVsbCk7XG4gIGNvbnRleHRTb3VyY2VJZDogbnVtYmVyIHwgc3RyaW5nIHwgbnVsbDtcbiAgLyoqIHJlc3BvbnNpYmxlIGZvciBzaG93aW5nIGVpdGhlciByZWFsdGltZSBidXR0b24gb3IgaW50ZXJ2YWxzLCBiYXNlZCBvbiAncmVmcmVzaFR5cGUnIGtleSBpbiBPcHRpb25zU2VydmljZSAqL1xuICBpc0ludGVydmFsUmVmcmVzaDogYm9vbGVhbjtcbiAgaXNMb2FkaW5nJDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGlzUmVhbHRpbWVBY3RpdmUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhbHRpbWVJY29uVGl0bGU6IHN0cmluZztcbiAgc2hvdWxkU2hvd0ludGVydmFsVG9nZ2xlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gIGlzUmVhbHRpbWVUb2dnbGVPbiA9IHRydWU7XG4gIHR5cGVGaWx0ZXJzOiBBbGFybURldGFpbHNbXSA9IFtdO1xuICBpc0Rpc2FibGVkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBkZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgc2VsZWN0ZWRTZXZlcml0aWVzID0gT2JqZWN0LmtleXMoU0VWRVJJVFlfTEFCRUxTKSBhcyBTZXZlcml0eVR5cGVbXTtcbiAgcHJpdmF0ZSBzZXZlcml0eU9wdGlvbnM6IFNldmVyaXR5RmlsdGVyID0gREVGQVVMVF9TRVZFUklUWV9WQUxVRVM7XG4gIHByaXZhdGUgc2hvd0NsZWFyZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSByZWFkb25seSBXQUlUX1RJTUVfQVZPSURfTVVMVElQTEVfUkVRVUVTVF9CWV9QQVJBTV9DSEFOR0UgPSAxMDA7XG4gIHByaXZhdGUgc2VsZWN0ZWREYXRlczogRGF0ZVRpbWVDb250ZXh0O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSBhbGFybXNWaWV3U2VydmljZTogQWxhcm1zVmlld1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGFybVdpdGhDaGlsZHJlblJlYWx0aW1lU2VydmljZTogQWxhcm1XaXRoQ2hpbGRyZW5SZWFsdGltZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIGNvbnRleHRSb3V0ZVNlcnZpY2U6IENvbnRleHRSb3V0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlclxuICApIHtcbiAgICB0aGlzLmlzSW50ZXJ2YWxSZWZyZXNoID0gdGhpcy5hbGFybXNWaWV3U2VydmljZS5pc0ludGVydmFsUmVmcmVzaCgpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZUNvbnRleHRTb3VyY2VJZCgpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgY29uc3QgaXNJbkRldGFpbFZpZXcgPSAhIXRoaXMuYWN0aXZhdGVkUm91dGUuY2hpbGRyZW5bMF0/LnNuYXBzaG90LnBhcmFtcy5pZDtcbiAgICBpZiAoaXNJbkRldGFpbFZpZXcpIHtcbiAgICAgIHRoaXMuY2hhbmdlSW50ZXJ2YWwoZmFsc2UpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5pc0ludGVydmFsUmVmcmVzaCkge1xuICAgICAgdGhpcy5oYW5kbGVMZWdhY3lSZWFsdGltZSgpO1xuICAgIH1cblxuICAgIHRoaXMuYWxhcm1zVmlld1NlcnZpY2UucmVsb2FkQWxhcm1zTGlzdCRcbiAgICAgIC5waXBlKFxuICAgICAgICBkZWJvdW5jZVRpbWUodGhpcy5XQUlUX1RJTUVfQVZPSURfTVVMVElQTEVfUkVRVUVTVF9CWV9QQVJBTV9DSEFOR0UpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZUFsYXJtcygpO1xuICAgICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBhcHBseVR5cGVGaWx0ZXJzKHR5cGVGaWx0ZXJzOiBBbGFybURldGFpbHNbXSk6IHZvaWQge1xuICAgIHRoaXMudHlwZUZpbHRlcnMgPSB0eXBlRmlsdGVycztcbiAgICB0aGlzLmFsYXJtc1ZpZXdTZXJ2aWNlLnJlbG9hZEFsYXJtc0xpc3QkLm5leHQoKTtcbiAgICB0aGlzLmlzUmVhbHRpbWVBY3RpdmUubmV4dChmYWxzZSk7XG4gIH1cblxuICBhcHBseUZvcm1GaWx0ZXJzKHsgc2V2ZXJpdHlPcHRpb25zLCBzaG93Q2xlYXJlZCwgc2VsZWN0ZWREYXRlcyB9OiBBbGFybUxpc3RGb3JtRmlsdGVycyk6IHZvaWQge1xuICAgIHRoaXMuc2V2ZXJpdHlPcHRpb25zID0gc2V2ZXJpdHlPcHRpb25zO1xuICAgIHRoaXMuc2hvd0NsZWFyZWQgPSBzaG93Q2xlYXJlZDtcbiAgICB0aGlzLnNlbGVjdGVkRGF0ZXMgPSBzZWxlY3RlZERhdGVzO1xuICAgIHRoaXMuc2VsZWN0ZWRTZXZlcml0aWVzID0gdGhpcy5hbGFybXNWaWV3U2VydmljZS51cGRhdGVTZWxlY3RlZFNldmVyaXRpZXModGhpcy5zZXZlcml0eU9wdGlvbnMpO1xuICAgIHRoaXMuYWxhcm1zVmlld1NlcnZpY2UucmVsb2FkQWxhcm1zTGlzdCQubmV4dCgpO1xuICAgIHRoaXMuaXNSZWFsdGltZUFjdGl2ZS5uZXh0KGZhbHNlKTtcbiAgfVxuXG4gIGFzeW5jIGFwcGx5RGF0ZUZpbHRlcihzZWxlY3RlZERhdGVzOiBbRGF0ZSwgRGF0ZV0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmFsYXJtcyQubmV4dChhd2FpdCB0aGlzLmFsYXJtc1ZpZXdTZXJ2aWNlLnJldHJpZXZlQWxhcm1zQnlEYXRlKHNlbGVjdGVkRGF0ZXMpKTtcbiAgICB0aGlzLmlzUmVhbHRpbWVBY3RpdmUubmV4dChmYWxzZSk7XG4gIH1cblxuICBhc3luYyBjbGVhckFsbCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdHJhbnNsYXRlZEJvZHkgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgZ2V0dGV4dCgnRG8geW91IHJlYWxseSB3YW50IHRvIGNsZWFyIGFsbCBhbGFybXMgb2Ygc2VsZWN0ZWQgc2V2ZXJpdGllcz8nKVxuICAgICAgKTtcbiAgICAgIGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLmNvbmZpcm0oXG4gICAgICAgIGdldHRleHQoJ0NvbmZpcm0gY2xlYXJpbmcgYWxhcm1zPycpLFxuICAgICAgICB0cmFuc2xhdGVkQm9keSxcbiAgICAgICAgJ2RhbmdlcicsXG4gICAgICAgIHtcbiAgICAgICAgICBvazogZ2V0dGV4dCgnQ29uZmlybScpLFxuICAgICAgICAgIGNhbmNlbDogZ2V0dGV4dCgnQ2FuY2VsJylcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIG1vZGFsIGNhbmNlbGVkXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5jbGVhckFsYXJtcygpO1xuICB9XG5cbiAgcmVmcmVzaCgpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZUFsYXJtcygpO1xuICAgIHRoaXMuaXNSZWFsdGltZUFjdGl2ZS5uZXh0KGZhbHNlKTtcbiAgfVxuXG4gIGNoYW5nZUludGVydmFsKHZhbHVlID0gdHJ1ZSk6IHZvaWQge1xuICAgIHRoaXMuc2hvdWxkU2hvd0ludGVydmFsVG9nZ2xlJC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHRvZ2dsZVJlYWx0aW1lU3RhdGUoKTogdm9pZCB7XG4gICAgdGhpcy5pc1JlYWx0aW1lVG9nZ2xlT24gPSAhdGhpcy5pc1JlYWx0aW1lVG9nZ2xlT247XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUxlZ2FjeVJlYWx0aW1lKCkge1xuICAgIHRoaXMucmVhbHRpbWVJY29uVGl0bGUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChnZXR0ZXh0KCdSZWFsdGltZSBhY3RpdmUnKSk7XG4gICAgdGhpcy5zdWJzY3JpYmVUb1JlYWx0aW1lVXBkYXRlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjbGVhckFsYXJtcygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5hbGFybXNWaWV3U2VydmljZS5jbGVhckFsbEFjdGl2ZUFsYXJtcyhcbiAgICAgICAgdGhpcy5zZWxlY3RlZFNldmVyaXRpZXMsXG4gICAgICAgIHRoaXMuY29udGV4dFNvdXJjZUlkXG4gICAgICApO1xuXG4gICAgICBpZiAocmVzdWx0LnJlc29sdmVkSW1tZWRpYXRlbHkpIHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2Vzcyh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChnZXR0ZXh0KCdBbGFybXMgY2xlYXJlZC4nKSkpO1xuICAgICAgICB0aGlzLmJhY2tUb1Jvb3RSb3V0ZSgpO1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoXG4gICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoZ2V0dGV4dCgnQWxhcm1zIGFyZSBiZWluZyBjbGVhcmVkIGluIGJhY2tncm91bmQuJykpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZFNlcnZlckZhaWx1cmUoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYmFja1RvUm9vdFJvdXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnRleHREYXRhID0gdGhpcy5jb250ZXh0Um91dGVTZXJ2aWNlLmdldENvbnRleHREYXRhKHRoaXMuYWN0aXZhdGVkUm91dGUpO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKHRoaXMuYWxhcm1zVmlld1NlcnZpY2UuZ2V0Um91dGVyTmF2aWdhdGlvbkFycmF5KGNvbnRleHREYXRhKSwge1xuICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJ1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRBbGFybXMoKTogUHJvbWlzZTxJUmVzdWx0TGlzdDxJQWxhcm0+PiB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nJC5uZXh0KHRydWUpO1xuXG4gICAgICBjb25zdCBhZGRpdGlvbmFsRmlsdGVyOiBQYXJ0aWFsPEFsYXJtUXVlcnlGaWx0ZXI+ID0ge307XG5cbiAgICAgIGlmICh0aGlzLmNvbnRleHRTb3VyY2VJZCkge1xuICAgICAgICAoYWRkaXRpb25hbEZpbHRlci5zb3VyY2UgPSB0aGlzLmNvbnRleHRTb3VyY2VJZCksXG4gICAgICAgICAgKGFkZGl0aW9uYWxGaWx0ZXIud2l0aFNvdXJjZUFzc2V0cyA9IHRydWUpLFxuICAgICAgICAgIChhZGRpdGlvbmFsRmlsdGVyLndpdGhTb3VyY2VEZXZpY2VzID0gdHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnR5cGVGaWx0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgYWRkaXRpb25hbEZpbHRlci50eXBlID0gdGhpcy50eXBlRmlsdGVycy5tYXAoKHsgZmlsdGVycyB9KSA9PiBmaWx0ZXJzLnR5cGUpLmpvaW4oJywnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWxhcm1zVmlld1NlcnZpY2UucmV0cmlldmVGaWx0ZXJlZEFsYXJtcyhcbiAgICAgICAgdGhpcy5zZWxlY3RlZFNldmVyaXRpZXMsXG4gICAgICAgIHRoaXMuc2hvd0NsZWFyZWQsXG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlcyxcbiAgICAgICAgYWRkaXRpb25hbEZpbHRlclxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yPy5yZXM/LnN0YXR1cyA9PT0gNDAzKSB7XG4gICAgICAgIHRoaXMuaXNEaXNhYmxlZCA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZFNlcnZlckZhaWx1cmUoZXJyb3IpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmlzTG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVBbGFybXMoKSB7XG4gICAgdGhpcy5hbGFybXMkLm5leHQoYXdhaXQgdGhpcy5nZXRBbGFybXMoKSk7XG4gIH1cblxuICBwcml2YXRlIHN1YnNjcmliZVRvUmVhbHRpbWVVcGRhdGVzKCk6IHZvaWQge1xuICAgIHRoaXMuYWxhcm1XaXRoQ2hpbGRyZW5SZWFsdGltZVNlcnZpY2VcbiAgICAgIC5vbkFsbCQodGhpcy5jb250ZXh0U291cmNlSWQpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgICB0aHJvdHRsZVRpbWUoVEhST1RUTEVfUkVBTFRJTUVfUkVGUkVTSCwgdW5kZWZpbmVkLCB7IHRyYWlsaW5nOiB0cnVlIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaXNSZWFsdGltZVRvZ2dsZU9uKSB7XG4gICAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5pc1JlYWx0aW1lQWN0aXZlLm5leHQodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplQ29udGV4dFNvdXJjZUlkKCk6IHZvaWQge1xuICAgIGNvbnN0IHJvdXRlQ29udGV4dCA9IHRoaXMuY29udGV4dFJvdXRlU2VydmljZS5nZXRDb250ZXh0RGF0YSh0aGlzLmFjdGl2YXRlZFJvdXRlKTtcbiAgICBpZiAoIXJvdXRlQ29udGV4dCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB7IGNvbnRleHQsIGNvbnRleHREYXRhIH0gPSByb3V0ZUNvbnRleHQ7XG4gICAgaWYgKFxuICAgICAgW1ZpZXdDb250ZXh0LkRldmljZSwgVmlld0NvbnRleHQuR3JvdXAsIFZpZXdDb250ZXh0LlNlcnZpY2UsIFZpZXdDb250ZXh0LlNpbXVsYXRvcnNdLmluY2x1ZGVzKFxuICAgICAgICBjb250ZXh0XG4gICAgICApXG4gICAgKSB7XG4gICAgICB0aGlzLmNvbnRleHRTb3VyY2VJZCA9IGNvbnRleHREYXRhPy5pZDtcbiAgICB9XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCIoYWN0aXZhdGVkUm91dGUuZGF0YSB8IGFzeW5jKT8udGl0bGVcIj5cbiAgPGM4eS10aXRsZT57eyBUSVRMRSB8IHRyYW5zbGF0ZSB9fTwvYzh5LXRpdGxlPlxuPC9uZy1jb250YWluZXI+XG5cbjxjOHktYWN0aW9uLWJhci1pdGVtXG4gIFtwbGFjZW1lbnRdPVwiJ2xlZnQnXCJcbiAgaXRlbUNsYXNzPVwibmF2YmFyLWZvcm0gbWluLXdpZHRoLWZpdFwiXG4+XG4gIDxjOHktYWxhcm1zLWZpbHRlclxuICAgIGNsYXNzPVwiZC1ibG9jayBmaXQtd1wiXG4gICAgW2NvbnRleHRTb3VyY2VJZF09XCJjb250ZXh0U291cmNlSWRcIlxuICAgIChvbkZpbHRlckFwcGxpZWQpPVwiYXBwbHlGb3JtRmlsdGVycygkZXZlbnQpXCJcbiAgPjwvYzh5LWFsYXJtcy1maWx0ZXI+XG48L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG5cbjxjOHktYWN0aW9uLWJhci1pdGVtXG4gIFtwbGFjZW1lbnRdPVwiJ2xlZnQnXCJcbiAgaXRlbUNsYXNzPVwibmF2YmFyLWZvcm0gbWluLXdpZHRoLWZpdFwiXG4+XG4gIDxjOHktYWxhcm1zLWRhdGUtZmlsdGVyIChkYXRlRmlsdGVyQ2hhbmdlKT1cImFwcGx5Rm9ybUZpbHRlcnMoJGV2ZW50KVwiPjwvYzh5LWFsYXJtcy1kYXRlLWZpbHRlcj5cbjwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuPGM4eS1hY3Rpb24tYmFyLWl0ZW1cbiAgW3BsYWNlbWVudF09XCInbGVmdCdcIlxuICBpdGVtQ2xhc3M9XCJuYXZiYXItZm9ybVwiXG4+XG4gIDxjOHktYWxhcm1zLXR5cGUtZmlsdGVyXG4gICAgY2xhc3M9XCJkLWJsb2NrIGZpdC13XCJcbiAgICBbYWxhcm1zXT1cImFsYXJtcyQgfCBhc3luY1wiXG4gICAgKG9uRmlsdGVyQ2hhbmdlZCk9XCJhcHBseVR5cGVGaWx0ZXJzKCRldmVudClcIlxuICA+PC9jOHktYWxhcm1zLXR5cGUtZmlsdGVyPlxuPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG48Yzh5LWFjdGlvbi1iYXItaXRlbVxuICBbcGxhY2VtZW50XT1cIidyaWdodCdcIlxuICBbcHJpb3JpdHldPVwiMFwiXG4+XG4gIDxidXR0b25cbiAgICBjbGFzcz1cImJ0biBidG4tbGlua1wiXG4gICAgW3RpdGxlXT1cIidDbGVhciBhbGwgYWxhcm1zJyB8IHRyYW5zbGF0ZVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgKGNsaWNrKT1cImNsZWFyQWxsKClcIlxuICAgIGRhdGEtY3k9XCJjOHktYWxhcm1zLXZpZXctLWNsZWFyLWFsbC1idXR0b25cIlxuICA+XG4gICAgPGkgYzh5SWNvbj1cImM4eS1hbGVydC1pZGxlXCI+PC9pPlxuICAgIHt7ICdDbGVhciBhbGxgYWxhcm1zYCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG48L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG5cbjwhLS1SZWFsdGltZSBidXR0b24tLT5cbjxuZy10ZW1wbGF0ZSAjcmVhbHRpbWVSZWZyZXNoPlxuICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYnRuXCI+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLXNtXCJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1JlZnJlc2gnIHwgdHJhbnNsYXRlXCJcbiAgICAgIFt0b29sdGlwXT1cIlxuICAgICAgICAoaXNSZWFsdGltZUFjdGl2ZSB8IGFzeW5jKVxuICAgICAgICAgID8gKE5FV19SRUFMVElNRV9BTEFSTV9NRVNTQUdFIHwgdHJhbnNsYXRlKVxuICAgICAgICAgIDogKFJFRlJFU0hfTEFCRUwgfCB0cmFuc2xhdGUpXG4gICAgICBcIlxuICAgICAgcGxhY2VtZW50PVwibGVmdFwiXG4gICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgW2FkYXB0aXZlUG9zaXRpb25dPVwiZmFsc2VcIlxuICAgICAgW2RlbGF5XT1cIjUwMFwiXG4gICAgICBbZGlzYWJsZWRdPVwiaXNMb2FkaW5nJCB8IGFzeW5jXCJcbiAgICAgIChjbGljayk9XCJyZWZyZXNoKClcIlxuICAgID5cbiAgICAgIDxzcGFuXG4gICAgICAgIGNsYXNzPVwidGFnIHRhZy0taW5mbyBtLXItOFwiXG4gICAgICAgICpuZ0lmPVwiaXNSZWFsdGltZUFjdGl2ZSB8IGFzeW5jXCJcbiAgICAgID5cbiAgICAgICAge3sgJ05ldyBhbGFybXMnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L3NwYW4+XG4gICAgICA8aVxuICAgICAgICBjOHlJY29uPVwicmVmcmVzaFwiXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgJ2ljb24tc3Bpbic6IGlzTG9hZGluZyQgfCBhc3luYyB9XCJcbiAgICAgID48L2k+XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJjOHktcmVhbHRpbWUgYnRuIGJ0bi1kZWZhdWx0IGJ0bi1zbVwiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInJlYWx0aW1lSWNvblRpdGxlXCJcbiAgICAgIFt0b29sdGlwXT1cInJlYWx0aW1lSWNvblRpdGxlXCJcbiAgICAgIGRhdGEtY3k9XCJjOHktYWxhcm1zLS1yZWFsdGltZS1idXR0b25cIlxuICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgZGF0YS1jeT1cImM4eS1hbGFybXMtLXJlYWx0aW1lLWJ1dHRvblwiXG4gICAgICBbY29udGFpbmVyXT1cIidib2R5J1wiXG4gICAgICAoY2xpY2spPVwidG9nZ2xlUmVhbHRpbWVTdGF0ZSgpXCJcbiAgICA+XG4gICAgICA8c3BhblxuICAgICAgICBjbGFzcz1cImM4eS1wdWxzZSBtLTBcIlxuICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgYWN0aXZlOiBpc1JlYWx0aW1lVG9nZ2xlT24sXG4gICAgICAgICAgaW5hY3RpdmU6ICFpc1JlYWx0aW1lVG9nZ2xlT25cbiAgICAgICAgfVwiXG4gICAgICA+PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxjOHktaGVscFxuICBzcmM9XCIvZG9jcy9kZXZpY2UtbWFuYWdlbWVudC1hcHBsaWNhdGlvbi9tb25pdG9yaW5nLWFuZC1jb250cm9sbGluZy1kZXZpY2VzLyN3b3JraW5nLXdpdGgtYWxhcm1zXCJcbj48L2M4eS1oZWxwPlxuXG48ZGl2IGNsYXNzPVwiY2FyZCBjb250ZW50LWZ1bGxwYWdlIHNwbGl0LXZpZXctLTUtNyBncmlkX19yb3ctLTFcIj5cbiAgPGM4eS1hbGFybXMtbGlzdFxuICAgIGNsYXNzPVwiZC1jb250ZW50c1wiXG4gICAgW2lzSW5pdGlhbExvYWRpbmddPVwiaXNMb2FkaW5nJCB8IGFzeW5jXCJcbiAgICBbYWxhcm1zXT1cImFsYXJtcyQgfCBhc3luY1wiXG4gICAgW3R5cGVGaWx0ZXJzXT1cInR5cGVGaWx0ZXJzXCJcbiAgICAob25TY3JvbGxpbmdTdGF0ZUNoYW5nZSk9XCJjaGFuZ2VJbnRlcnZhbCghJGV2ZW50KVwiXG4gICAgKG9uU2VsZWN0ZWRBbGFybSk9XCJjaGFuZ2VJbnRlcnZhbChmYWxzZSlcIlxuICAgIFtzcGxpdFZpZXddPVwidHJ1ZVwiXG4gICAgW2hhc1Blcm1pc3Npb25zXT1cIiFpc0Rpc2FibGVkXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0ludGVydmFsUmVmcmVzaDsgZWxzZSByZWFsdGltZVJlZnJlc2hcIj5cbiAgICAgIDxjOHktYWxhcm1zLWludGVydmFsLXJlZnJlc2hcbiAgICAgICAgW2FsYXJtc0xpc3RMb2FkaW5nJF09XCJpc0xvYWRpbmckXCJcbiAgICAgICAgW2lzSW50ZXJ2YWxUb2dnbGVFbmFibGVkXT1cInNob3VsZFNob3dJbnRlcnZhbFRvZ2dsZSQgfCBhc3luY1wiXG4gICAgICAgIChvbkNvdW50ZG93bkVuZGVkKT1cInJlZnJlc2goKVwiXG4gICAgICAgIFtpc0Rpc2FibGVkXT1cImlzRGlzYWJsZWRcIlxuICAgICAgPjwvYzh5LWFsYXJtcy1pbnRlcnZhbC1yZWZyZXNoPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2M4eS1hbGFybXMtbGlzdD5cblxuICA8cm91dGVyLW91dGxldCBjbGFzcz1cImQtY29udGVudHNcIj48L3JvdXRlci1vdXRsZXQ+XG48L2Rpdj5cbiJdfQ==
@@ -94,13 +94,13 @@ export class SsoConfigurationComponent {
94
94
  return await this.modalService.confirm(gettext('Force users to log out'), modalBody, Status.WARNING, modalLabels);
95
95
  }
96
96
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SsoConfigurationComponent, deps: [{ token: i1.SsoConfigurationService }, { token: i2.ApplicationService }, { token: i2.UserGroupService }, { token: i2.InventoryRoleService }, { token: i3.AlertService }, { token: i3.ModalService }, { token: i3.LoginService }, { token: i3.AppStateService }, { token: i3.TenantUiService }], target: i0.ɵɵFactoryTarget.Component }); }
97
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: SsoConfigurationComponent, selector: "c8y-sso-configuration", viewQueries: [{ propertyName: "ssoConfigurationForm", first: true, predicate: ["ssoConfigurationForm"], descendants: true }], ngImport: i0, template: "<c8y-title>{{ 'Single sign-on' | translate }}</c8y-title>\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'cog'\"\n [label]=\"'Settings' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'cog'\"\n [label]=\"'Single sign-on' | translate\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reload' | translate }}\"\n type=\"button\"\n (click)=\"loadSsoConfiguration()\"\n >\n <i\n c8yIcon=\"refresh\"\n [ngClass]=\"{ 'icon-spin': reloading$ | async }\"\n ></i>\n {{ 'Reload' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'left'\"\n itemClass=\"navbar-form hidden-xs\"\n>\n <div\n class=\"form-group\"\n title=\"{{ 'Template' | translate }}\"\n >\n <label\n class=\"control-label\"\n for=\"template\"\n >\n {{ 'Template' | translate }}\n </label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n id=\"template\"\n name=\"template\"\n *ngIf=\"ssoConfiguration\"\n [(ngModel)]=\"ssoConfiguration.template\"\n >\n <option\n *ngFor=\"let templateType of templateTypeConfig | keyvalue\"\n [ngValue]=\"templateType.key\"\n >\n {{ templateType.value.label | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n</c8y-action-bar-item>\n\n<div class=\"row\">\n <div class=\"col-lg-12 col-lg-max\">\n <form\n class=\"card card--fullpage\"\n #ssoConfigurationForm=\"ngForm\"\n novalidate\n >\n <div class=\"card-header separator\">\n <div class=\"card-title\">\n {{ 'Single sign-on' | translate }}\n </div>\n </div>\n\n <div class=\"inner-scroll\">\n <div\n class=\"card-block p-0\"\n *ngIf=\"ssoConfiguration\"\n >\n <c8y-custom-template\n *ngIf=\"ssoConfiguration.template === templateType.CUSTOM\"\n [ssoConfiguration]=\"ssoConfiguration\"\n [ssoConfigurationChangeTrigger]=\"saveSubject.asObservable()\"\n (ssoConfigurationChange)=\"save($event)\"\n [apps]=\"apps\"\n [groups]=\"groups\"\n [inventoryRoles]=\"inventoryRoles\"\n ></c8y-custom-template>\n\n <c8y-aad-template\n *ngIf=\"ssoConfiguration.template === templateType.AZURE\"\n [ssoConfiguration]=\"ssoConfiguration\"\n [ssoConfigurationChangeTrigger]=\"saveSubject.asObservable()\"\n (ssoConfigurationChange)=\"save($event)\"\n [apps]=\"apps\"\n [groups]=\"groups\"\n [inventoryRoles]=\"inventoryRoles\"\n ></c8y-aad-template>\n\n <c8y-key-cloak-template\n *ngIf=\"ssoConfiguration.template === templateType.KEYCLOAK\"\n [ssoConfiguration]=\"ssoConfiguration\"\n [ssoConfigurationChangeTrigger]=\"saveSubject.asObservable()\"\n (ssoConfigurationChange)=\"save($event)\"\n [apps]=\"apps\"\n [groups]=\"groups\"\n [inventoryRoles]=\"inventoryRoles\"\n ></c8y-key-cloak-template>\n </div>\n </div>\n <div class=\"card-footer separator\">\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"submit\"\n (click)=\"saveSubject.next()\"\n [disabled]=\"!ssoConfigurationForm.form.valid || ssoConfigurationForm.form.pristine\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </form>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: i3.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "component", type: i3.BreadcrumbComponent, selector: "c8y-breadcrumb" }, { kind: "component", type: i3.BreadcrumbItemComponent, selector: "c8y-breadcrumb-item", inputs: ["icon", "translate", "label", "path", "injector"] }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i5.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i6.CustomTemplateComponent, selector: "c8y-custom-template" }, { kind: "component", type: i7.KeyCloakTemplateComponent, selector: "c8y-key-cloak-template" }, { kind: "component", type: i8.AadTemplateComponent, selector: "c8y-aad-template" }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.KeyValuePipe, name: "keyvalue" }] }); }
97
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: SsoConfigurationComponent, selector: "c8y-sso-configuration", viewQueries: [{ propertyName: "ssoConfigurationForm", first: true, predicate: ["ssoConfigurationForm"], descendants: true }], ngImport: i0, template: "<c8y-title>{{ 'Single sign-on' | translate }}</c8y-title>\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'cog'\"\n [label]=\"'Settings' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'cog'\"\n [label]=\"'Single sign-on' | translate\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reload' | translate }}\"\n type=\"button\"\n (click)=\"loadSsoConfiguration()\"\n >\n <i\n c8yIcon=\"refresh\"\n [ngClass]=\"{ 'icon-spin': reloading$ | async }\"\n ></i>\n {{ 'Reload' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'left'\"\n itemClass=\"navbar-form hidden-xs\"\n>\n <div\n class=\"form-group d-flex m-b-0\"\n title=\"{{ 'Template' | translate }}\"\n >\n <label\n class=\"control-label\"\n for=\"template\"\n >\n {{ 'Template' | translate }}\n </label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n id=\"template\"\n name=\"template\"\n *ngIf=\"ssoConfiguration\"\n [(ngModel)]=\"ssoConfiguration.template\"\n >\n <option\n *ngFor=\"let templateType of templateTypeConfig | keyvalue\"\n [ngValue]=\"templateType.key\"\n >\n {{ templateType.value.label | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n</c8y-action-bar-item>\n\n<div class=\"row\">\n <div class=\"col-lg-12 col-lg-max\">\n <form\n class=\"card card--fullpage\"\n #ssoConfigurationForm=\"ngForm\"\n novalidate\n >\n <div class=\"card-header separator\">\n <div class=\"card-title\">\n {{ 'Single sign-on' | translate }}\n </div>\n </div>\n\n <div class=\"inner-scroll\">\n <div\n class=\"card-block p-0\"\n *ngIf=\"ssoConfiguration\"\n >\n <c8y-custom-template\n *ngIf=\"ssoConfiguration.template === templateType.CUSTOM\"\n [ssoConfiguration]=\"ssoConfiguration\"\n [ssoConfigurationChangeTrigger]=\"saveSubject.asObservable()\"\n (ssoConfigurationChange)=\"save($event)\"\n [apps]=\"apps\"\n [groups]=\"groups\"\n [inventoryRoles]=\"inventoryRoles\"\n ></c8y-custom-template>\n\n <c8y-aad-template\n *ngIf=\"ssoConfiguration.template === templateType.AZURE\"\n [ssoConfiguration]=\"ssoConfiguration\"\n [ssoConfigurationChangeTrigger]=\"saveSubject.asObservable()\"\n (ssoConfigurationChange)=\"save($event)\"\n [apps]=\"apps\"\n [groups]=\"groups\"\n [inventoryRoles]=\"inventoryRoles\"\n ></c8y-aad-template>\n\n <c8y-key-cloak-template\n *ngIf=\"ssoConfiguration.template === templateType.KEYCLOAK\"\n [ssoConfiguration]=\"ssoConfiguration\"\n [ssoConfigurationChangeTrigger]=\"saveSubject.asObservable()\"\n (ssoConfigurationChange)=\"save($event)\"\n [apps]=\"apps\"\n [groups]=\"groups\"\n [inventoryRoles]=\"inventoryRoles\"\n ></c8y-key-cloak-template>\n </div>\n </div>\n <div class=\"card-footer separator\">\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"submit\"\n (click)=\"saveSubject.next()\"\n [disabled]=\"!ssoConfigurationForm.form.valid || ssoConfigurationForm.form.pristine\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </form>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: i3.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "component", type: i3.BreadcrumbComponent, selector: "c8y-breadcrumb" }, { kind: "component", type: i3.BreadcrumbItemComponent, selector: "c8y-breadcrumb-item", inputs: ["icon", "translate", "label", "path", "injector"] }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i5.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i6.CustomTemplateComponent, selector: "c8y-custom-template" }, { kind: "component", type: i7.KeyCloakTemplateComponent, selector: "c8y-key-cloak-template" }, { kind: "component", type: i8.AadTemplateComponent, selector: "c8y-aad-template" }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.KeyValuePipe, name: "keyvalue" }] }); }
98
98
  }
99
99
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SsoConfigurationComponent, decorators: [{
100
100
  type: Component,
101
- args: [{ selector: 'c8y-sso-configuration', template: "<c8y-title>{{ 'Single sign-on' | translate }}</c8y-title>\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'cog'\"\n [label]=\"'Settings' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'cog'\"\n [label]=\"'Single sign-on' | translate\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reload' | translate }}\"\n type=\"button\"\n (click)=\"loadSsoConfiguration()\"\n >\n <i\n c8yIcon=\"refresh\"\n [ngClass]=\"{ 'icon-spin': reloading$ | async }\"\n ></i>\n {{ 'Reload' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'left'\"\n itemClass=\"navbar-form hidden-xs\"\n>\n <div\n class=\"form-group\"\n title=\"{{ 'Template' | translate }}\"\n >\n <label\n class=\"control-label\"\n for=\"template\"\n >\n {{ 'Template' | translate }}\n </label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n id=\"template\"\n name=\"template\"\n *ngIf=\"ssoConfiguration\"\n [(ngModel)]=\"ssoConfiguration.template\"\n >\n <option\n *ngFor=\"let templateType of templateTypeConfig | keyvalue\"\n [ngValue]=\"templateType.key\"\n >\n {{ templateType.value.label | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n</c8y-action-bar-item>\n\n<div class=\"row\">\n <div class=\"col-lg-12 col-lg-max\">\n <form\n class=\"card card--fullpage\"\n #ssoConfigurationForm=\"ngForm\"\n novalidate\n >\n <div class=\"card-header separator\">\n <div class=\"card-title\">\n {{ 'Single sign-on' | translate }}\n </div>\n </div>\n\n <div class=\"inner-scroll\">\n <div\n class=\"card-block p-0\"\n *ngIf=\"ssoConfiguration\"\n >\n <c8y-custom-template\n *ngIf=\"ssoConfiguration.template === templateType.CUSTOM\"\n [ssoConfiguration]=\"ssoConfiguration\"\n [ssoConfigurationChangeTrigger]=\"saveSubject.asObservable()\"\n (ssoConfigurationChange)=\"save($event)\"\n [apps]=\"apps\"\n [groups]=\"groups\"\n [inventoryRoles]=\"inventoryRoles\"\n ></c8y-custom-template>\n\n <c8y-aad-template\n *ngIf=\"ssoConfiguration.template === templateType.AZURE\"\n [ssoConfiguration]=\"ssoConfiguration\"\n [ssoConfigurationChangeTrigger]=\"saveSubject.asObservable()\"\n (ssoConfigurationChange)=\"save($event)\"\n [apps]=\"apps\"\n [groups]=\"groups\"\n [inventoryRoles]=\"inventoryRoles\"\n ></c8y-aad-template>\n\n <c8y-key-cloak-template\n *ngIf=\"ssoConfiguration.template === templateType.KEYCLOAK\"\n [ssoConfiguration]=\"ssoConfiguration\"\n [ssoConfigurationChangeTrigger]=\"saveSubject.asObservable()\"\n (ssoConfigurationChange)=\"save($event)\"\n [apps]=\"apps\"\n [groups]=\"groups\"\n [inventoryRoles]=\"inventoryRoles\"\n ></c8y-key-cloak-template>\n </div>\n </div>\n <div class=\"card-footer separator\">\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"submit\"\n (click)=\"saveSubject.next()\"\n [disabled]=\"!ssoConfigurationForm.form.valid || ssoConfigurationForm.form.pristine\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </form>\n </div>\n</div>\n" }]
101
+ args: [{ selector: 'c8y-sso-configuration', template: "<c8y-title>{{ 'Single sign-on' | translate }}</c8y-title>\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'cog'\"\n [label]=\"'Settings' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'cog'\"\n [label]=\"'Single sign-on' | translate\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reload' | translate }}\"\n type=\"button\"\n (click)=\"loadSsoConfiguration()\"\n >\n <i\n c8yIcon=\"refresh\"\n [ngClass]=\"{ 'icon-spin': reloading$ | async }\"\n ></i>\n {{ 'Reload' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'left'\"\n itemClass=\"navbar-form hidden-xs\"\n>\n <div\n class=\"form-group d-flex m-b-0\"\n title=\"{{ 'Template' | translate }}\"\n >\n <label\n class=\"control-label\"\n for=\"template\"\n >\n {{ 'Template' | translate }}\n </label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n id=\"template\"\n name=\"template\"\n *ngIf=\"ssoConfiguration\"\n [(ngModel)]=\"ssoConfiguration.template\"\n >\n <option\n *ngFor=\"let templateType of templateTypeConfig | keyvalue\"\n [ngValue]=\"templateType.key\"\n >\n {{ templateType.value.label | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n</c8y-action-bar-item>\n\n<div class=\"row\">\n <div class=\"col-lg-12 col-lg-max\">\n <form\n class=\"card card--fullpage\"\n #ssoConfigurationForm=\"ngForm\"\n novalidate\n >\n <div class=\"card-header separator\">\n <div class=\"card-title\">\n {{ 'Single sign-on' | translate }}\n </div>\n </div>\n\n <div class=\"inner-scroll\">\n <div\n class=\"card-block p-0\"\n *ngIf=\"ssoConfiguration\"\n >\n <c8y-custom-template\n *ngIf=\"ssoConfiguration.template === templateType.CUSTOM\"\n [ssoConfiguration]=\"ssoConfiguration\"\n [ssoConfigurationChangeTrigger]=\"saveSubject.asObservable()\"\n (ssoConfigurationChange)=\"save($event)\"\n [apps]=\"apps\"\n [groups]=\"groups\"\n [inventoryRoles]=\"inventoryRoles\"\n ></c8y-custom-template>\n\n <c8y-aad-template\n *ngIf=\"ssoConfiguration.template === templateType.AZURE\"\n [ssoConfiguration]=\"ssoConfiguration\"\n [ssoConfigurationChangeTrigger]=\"saveSubject.asObservable()\"\n (ssoConfigurationChange)=\"save($event)\"\n [apps]=\"apps\"\n [groups]=\"groups\"\n [inventoryRoles]=\"inventoryRoles\"\n ></c8y-aad-template>\n\n <c8y-key-cloak-template\n *ngIf=\"ssoConfiguration.template === templateType.KEYCLOAK\"\n [ssoConfiguration]=\"ssoConfiguration\"\n [ssoConfigurationChangeTrigger]=\"saveSubject.asObservable()\"\n (ssoConfigurationChange)=\"save($event)\"\n [apps]=\"apps\"\n [groups]=\"groups\"\n [inventoryRoles]=\"inventoryRoles\"\n ></c8y-key-cloak-template>\n </div>\n </div>\n <div class=\"card-footer separator\">\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"submit\"\n (click)=\"saveSubject.next()\"\n [disabled]=\"!ssoConfigurationForm.form.valid || ssoConfigurationForm.form.pristine\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </form>\n </div>\n</div>\n" }]
102
102
  }], ctorParameters: () => [{ type: i1.SsoConfigurationService }, { type: i2.ApplicationService }, { type: i2.UserGroupService }, { type: i2.InventoryRoleService }, { type: i3.AlertService }, { type: i3.ModalService }, { type: i3.LoginService }, { type: i3.AppStateService }, { type: i3.TenantUiService }], propDecorators: { ssoConfigurationForm: [{
103
103
  type: ViewChild,
104
104
  args: ['ssoConfigurationForm']
105
105
  }] } });
106
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3NvLWNvbmZpZ3VyYXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vYXV0aC1jb25maWd1cmF0aW9uL3Nzby1jb25maWd1cmF0aW9uL3Nzby1jb25maWd1cmF0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL2F1dGgtY29uZmlndXJhdGlvbi9zc28tY29uZmlndXJhdGlvbi9zc28tY29uZmlndXJhdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixnQkFBZ0IsRUFHaEIscUJBQXFCLEVBQ3JCLG9CQUFvQixFQUVyQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQ0wsT0FBTyxFQUNQLFlBQVksRUFDWixZQUFZLEVBQ1osTUFBTSxFQUNOLFlBQVksRUFDWixlQUFlLEVBQ2YsZUFBZSxFQUNoQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFnQixPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDeEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0QsT0FBTyxFQUFvQixZQUFZLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMvRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7QUFNeEMsTUFBTSxPQUFPLHlCQUF5QjtJQStCcEMsWUFDVSx1QkFBZ0QsRUFDaEQsa0JBQXNDLEVBQ3RDLGdCQUFrQyxFQUNsQyxvQkFBMEMsRUFDMUMsWUFBMEIsRUFDMUIsWUFBMEIsRUFDMUIsWUFBMEIsRUFDMUIsZUFBZ0MsRUFDaEMsZUFBZ0M7UUFSaEMsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUF5QjtRQUNoRCx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQUMxQyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBbEMxQyxpQkFBWSxHQUFHLFlBQVksQ0FBQztRQUM1Qix1QkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztRQUV4QyxlQUFVLEdBQTZCLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xFLFdBQU0sR0FBdUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNoRCxnQkFBVyxHQUFrQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBTW5DLFVBQUssR0FBUSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDbkMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQ3JDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FDYixRQUFRLENBQUM7WUFDUCxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsb0JBQW9CLEVBQUU7WUFDckUsSUFBSSxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDNUIsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDeEIsY0FBYyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtTQUN6QyxDQUFDLENBQ0gsRUFDRCxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFDdEMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7SUFZQyxDQUFDO0lBRUosUUFBUTtRQUNOLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FDMUMsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLEVBQUUsRUFBRTtZQUNyRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztZQUNqQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztZQUNyQixJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztZQUNyQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUM7UUFDM0MsQ0FBQyxDQUNGLENBQUM7UUFDRixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsb0JBQW9CO1FBQ2xCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUNsRCxDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUksQ0FBQyxnQkFBZ0I7UUFDekIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztZQUN2QyxNQUFNLGNBQWMsR0FDbEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyx1QkFBdUIsRUFBRSxLQUFLLHFCQUFxQixDQUFDLEtBQUssQ0FBQztZQUNqRixJQUFJLGNBQWMsRUFBRSxDQUFDO2dCQUNuQixNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDMUMsQ0FBQztZQUNELE1BQU0sSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzFELElBQUksY0FBYyxFQUFFLENBQUM7Z0JBQ25CLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2dCQUM1QixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDO1lBQzdELENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUNaLElBQUksRUFBRSxFQUFFLENBQUM7Z0JBQ1AsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6QyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDOUIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRU8sZUFBZTtRQUNyQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN2RSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQ2YsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUNuRCxDQUFDO0lBQ0osQ0FBQztJQUVPLFNBQVM7UUFDZixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3ZELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksRUFDZixLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQ25ELENBQUM7SUFDSixDQUFDO0lBRU8saUJBQWlCO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDM0QsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUNmLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FDbkQsQ0FBQztJQUNKLENBQUM7SUFFTyxLQUFLLENBQUMseUJBQXlCO1FBQ3JDLE1BQU0sV0FBVyxHQUFHLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUMzRixNQUFNLFNBQVMsR0FBRyxPQUFPLENBQ3ZCLGtJQUFrSSxDQUNuSSxDQUFDO1FBQ0YsT0FBTyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUNwQyxPQUFPLENBQUMsd0JBQXdCLENBQUMsRUFDakMsU0FBUyxFQUNULE1BQU0sQ0FBQyxPQUFPLEVBQ2QsV0FBVyxDQUNaLENBQUM7SUFDSixDQUFDOytHQXhIVSx5QkFBeUI7bUdBQXpCLHlCQUF5QiwyTEM3QnRDLG1ySEE0SEE7OzRGRC9GYSx5QkFBeUI7a0JBSnJDLFNBQVM7K0JBQ0UsdUJBQXVCOzRVQWdCRSxvQkFBb0I7c0JBQXRELFNBQVM7dUJBQUMsc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBcHBsaWNhdGlvblNlcnZpY2UsXG4gIFVzZXJHcm91cFNlcnZpY2UsXG4gIElBcHBsaWNhdGlvbixcbiAgSVVzZXJHcm91cCxcbiAgVGVuYW50TG9naW5PcHRpb25UeXBlLFxuICBJbnZlbnRvcnlSb2xlU2VydmljZSxcbiAgSUlkZW50aWZpZWRcbn0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHtcbiAgZ2V0dGV4dCxcbiAgQWxlcnRTZXJ2aWNlLFxuICBNb2RhbFNlcnZpY2UsXG4gIFN0YXR1cyxcbiAgTG9naW5TZXJ2aWNlLFxuICBBcHBTdGF0ZVNlcnZpY2UsXG4gIFRlbmFudFVpU2VydmljZVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZm9ya0pvaW4sIFN1YnNjcmlwdGlvbiwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgc2hhcmVSZXBsYXksIHRhcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgU3NvQ29uZmlndXJhdGlvbiwgVGVtcGxhdGVUeXBlLCB0ZW1wbGF0ZVR5cGVDb25maWcgfSBmcm9tICcuL3Nzby1jb25maWd1cmF0aW9uLm1vZGVsJztcbmltcG9ydCB7IFNzb0NvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9zc28tY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IE5nRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LXNzby1jb25maWd1cmF0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Nzby1jb25maWd1cmF0aW9uLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBTc29Db25maWd1cmF0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgYXBwczogSUFwcGxpY2F0aW9uW107XG4gIGdyb3VwczogSVVzZXJHcm91cFtdO1xuICBpbnZlbnRvcnlSb2xlczogSUlkZW50aWZpZWRbXTtcbiAgc3NvQ29uZmlndXJhdGlvbjogU3NvQ29uZmlndXJhdGlvbjtcblxuICB0ZW1wbGF0ZVR5cGUgPSBUZW1wbGF0ZVR5cGU7XG4gIHRlbXBsYXRlVHlwZUNvbmZpZyA9IHRlbXBsYXRlVHlwZUNvbmZpZztcblxuICByZWxvYWRpbmckOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcbiAgcmVsb2FkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHNhdmVTdWJqZWN0OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcblxuICBAVmlld0NoaWxkKCdzc29Db25maWd1cmF0aW9uRm9ybScpIHNzb0NvbmZpZ3VyYXRpb25Gb3JtITogTmdGb3JtO1xuXG4gIHByaXZhdGUgZGF0YVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIHByaXZhdGUgZGF0YSQ6IGFueSA9IHRoaXMucmVsb2FkLnBpcGUoXG4gICAgdGFwKCgpID0+IHRoaXMucmVsb2FkaW5nJC5uZXh0KHRydWUpKSxcbiAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgIGZvcmtKb2luKHtcbiAgICAgICAgc3NvQ29uZmlndXJhdGlvbjogdGhpcy5zc29Db25maWd1cmF0aW9uU2VydmljZS5nZXRTc29Db25maWd1cmF0aW9uJCgpLFxuICAgICAgICBhcHBzOiB0aGlzLmdldEFwcGxpY2F0aW9ucygpLFxuICAgICAgICBncm91cHM6IHRoaXMuZ2V0R3JvdXBzKCksXG4gICAgICAgIGludmVudG9yeVJvbGVzOiB0aGlzLmdldEludmVudG9yeVJvbGVzKClcbiAgICAgIH0pXG4gICAgKSxcbiAgICB0YXAoKCkgPT4gdGhpcy5yZWxvYWRpbmckLm5leHQoZmFsc2UpKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc3NvQ29uZmlndXJhdGlvblNlcnZpY2U6IFNzb0NvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgYXBwbGljYXRpb25TZXJ2aWNlOiBBcHBsaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1c2VyR3JvdXBTZXJ2aWNlOiBVc2VyR3JvdXBTZXJ2aWNlLFxuICAgIHByaXZhdGUgaW52ZW50b3J5Um9sZVNlcnZpY2U6IEludmVudG9yeVJvbGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIGxvZ2luU2VydmljZTogTG9naW5TZXJ2aWNlLFxuICAgIHByaXZhdGUgYXBwU3RhdGVTZXJ2aWNlOiBBcHBTdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0ZW5hbnRVaVNlcnZpY2U6IFRlbmFudFVpU2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5kYXRhU3Vic2NyaXB0aW9uID0gdGhpcy5kYXRhJC5zdWJzY3JpYmUoXG4gICAgICAoeyBzc29Db25maWd1cmF0aW9uLCBhcHBzLCBncm91cHMsIGludmVudG9yeVJvbGVzIH0pID0+IHtcbiAgICAgICAgdGhpcy5hcHBzID0gYXBwcztcbiAgICAgICAgdGhpcy5ncm91cHMgPSBncm91cHM7XG4gICAgICAgIHRoaXMuaW52ZW50b3J5Um9sZXMgPSBpbnZlbnRvcnlSb2xlcztcbiAgICAgICAgdGhpcy5zc29Db25maWd1cmF0aW9uID0gc3NvQ29uZmlndXJhdGlvbjtcbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMubG9hZFNzb0NvbmZpZ3VyYXRpb24oKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGF0YVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgbG9hZFNzb0NvbmZpZ3VyYXRpb24oKSB7XG4gICAgdGhpcy5yZWxvYWQubmV4dCgpO1xuICAgIHRoaXMuc3NvQ29uZmlndXJhdGlvbkZvcm0uZm9ybS5tYXJrQXNQcmlzdGluZSgpO1xuICB9XG5cbiAgYXN5bmMgc2F2ZShzc29Db25maWd1cmF0aW9uKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMud2FybkFib3V0Rm9yY2VVc2Vyc0xvZ091dCgpO1xuICAgICAgY29uc3QgbG9nb3V0UmVxdWlyZWQgPVxuICAgICAgICB0aGlzLnRlbmFudFVpU2VydmljZS5nZXRDdXJyZW50VXNlckxvZ2luTW9kZSgpICE9PSBUZW5hbnRMb2dpbk9wdGlvblR5cGUuQkFTSUM7XG4gICAgICBpZiAobG9nb3V0UmVxdWlyZWQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2UuY29uZmlybUxvZ291dCgpO1xuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5zc29Db25maWd1cmF0aW9uU2VydmljZS5zYXZlKHNzb0NvbmZpZ3VyYXRpb24pO1xuICAgICAgaWYgKGxvZ291dFJlcXVpcmVkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9naW5TZXJ2aWNlLmxvZ291dCh0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubG9hZFNzb0NvbmZpZ3VyYXRpb24oKTtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhnZXR0ZXh0KCdDb25maWd1cmF0aW9uIHNhdmVkLicpKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgaWYgKGV4KSB7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZFNlcnZlckZhaWx1cmUoZXgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2FkU3NvQ29uZmlndXJhdGlvbigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0QXBwbGljYXRpb25zKCk6IFByb21pc2U8dm9pZCB8IElBcHBsaWNhdGlvbltdPiB7XG4gICAgcmV0dXJuIHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmxpc3RCeVRlbmFudChudWxsLCB7IHBhZ2VTaXplOiAxMDAgfSkudGhlbihcbiAgICAgIHJlcyA9PiByZXMuZGF0YSxcbiAgICAgIGVycm9yID0+IHRoaXMuYWxlcnRTZXJ2aWNlLmFkZFNlcnZlckZhaWx1cmUoZXJyb3IpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0R3JvdXBzKCk6IFByb21pc2U8dm9pZCB8IElVc2VyR3JvdXBbXT4ge1xuICAgIHJldHVybiB0aGlzLnVzZXJHcm91cFNlcnZpY2UubGlzdCh7IHBhZ2VTaXplOiAxMDAgfSkudGhlbihcbiAgICAgIHJlcyA9PiByZXMuZGF0YSxcbiAgICAgIGVycm9yID0+IHRoaXMuYWxlcnRTZXJ2aWNlLmFkZFNlcnZlckZhaWx1cmUoZXJyb3IpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0SW52ZW50b3J5Um9sZXMoKTogUHJvbWlzZTx2b2lkIHwgSUlkZW50aWZpZWRbXT4ge1xuICAgIHJldHVybiB0aGlzLmludmVudG9yeVJvbGVTZXJ2aWNlLmxpc3QoeyBwYWdlU2l6ZTogMTAwIH0pLnRoZW4oXG4gICAgICByZXMgPT4gcmVzLmRhdGEsXG4gICAgICBlcnJvciA9PiB0aGlzLmFsZXJ0U2VydmljZS5hZGRTZXJ2ZXJGYWlsdXJlKGVycm9yKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHdhcm5BYm91dEZvcmNlVXNlcnNMb2dPdXQoKSB7XG4gICAgY29uc3QgbW9kYWxMYWJlbHMgPSB7IG9rOiBnZXR0ZXh0KCdVcGRhdGUgYW5kIGxvZyBvdXQgdXNlcnMnKSwgY2FuY2VsOiBnZXR0ZXh0KCdDYW5jZWwnKSB9O1xuICAgIGNvbnN0IG1vZGFsQm9keSA9IGdldHRleHQoXG4gICAgICAnVXBkYXRpbmcgU1NPIGNvbmZpZ3VyYXRpb24gd2lsbCBsb2cgb3V0IGFsbCB1c2VycyBsb2dnZWQgd2l0aCBcIk9BSS1TZWN1cmVcIiBvciBcIlNpbmdsZSBzaWduLW9uIHJlZGlyZWN0XCIuIERvIHlvdSB3YW50IHRvIHByb2NlZWQ/J1xuICAgICk7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLmNvbmZpcm0oXG4gICAgICBnZXR0ZXh0KCdGb3JjZSB1c2VycyB0byBsb2cgb3V0JyksXG4gICAgICBtb2RhbEJvZHksXG4gICAgICBTdGF0dXMuV0FSTklORyxcbiAgICAgIG1vZGFsTGFiZWxzXG4gICAgKTtcbiAgfVxufVxuIiwiPGM4eS10aXRsZT57eyAnU2luZ2xlIHNpZ24tb24nIHwgdHJhbnNsYXRlIH19PC9jOHktdGl0bGU+XG48Yzh5LWJyZWFkY3J1bWI+XG4gIDxjOHktYnJlYWRjcnVtYi1pdGVtXG4gICAgW2ljb25dPVwiJ2NvZydcIlxuICAgIFtsYWJlbF09XCInU2V0dGluZ3MnIHwgdHJhbnNsYXRlXCJcbiAgPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbiAgPGM4eS1icmVhZGNydW1iLWl0ZW1cbiAgICBbaWNvbl09XCInY29nJ1wiXG4gICAgW2xhYmVsXT1cIidTaW5nbGUgc2lnbi1vbicgfCB0cmFuc2xhdGVcIlxuICA+PC9jOHktYnJlYWRjcnVtYi1pdGVtPlxuPC9jOHktYnJlYWRjcnVtYj5cblxuPGM4eS1hY3Rpb24tYmFyLWl0ZW0gW3BsYWNlbWVudF09XCIncmlnaHQnXCI+XG4gIDxidXR0b25cbiAgICBjbGFzcz1cImJ0biBidG4tbGlua1wiXG4gICAgdGl0bGU9XCJ7eyAnUmVsb2FkJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgKGNsaWNrKT1cImxvYWRTc29Db25maWd1cmF0aW9uKClcIlxuICA+XG4gICAgPGlcbiAgICAgIGM4eUljb249XCJyZWZyZXNoXCJcbiAgICAgIFtuZ0NsYXNzXT1cInsgJ2ljb24tc3Bpbic6IHJlbG9hZGluZyQgfCBhc3luYyB9XCJcbiAgICA+PC9pPlxuICAgIHt7ICdSZWxvYWQnIHwgdHJhbnNsYXRlIH19XG4gIDwvYnV0dG9uPlxuPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG48Yzh5LWFjdGlvbi1iYXItaXRlbVxuICBbcGxhY2VtZW50XT1cIidsZWZ0J1wiXG4gIGl0ZW1DbGFzcz1cIm5hdmJhci1mb3JtIGhpZGRlbi14c1wiXG4+XG4gIDxkaXZcbiAgICBjbGFzcz1cImZvcm0tZ3JvdXBcIlxuICAgIHRpdGxlPVwie3sgJ1RlbXBsYXRlJyB8IHRyYW5zbGF0ZSB9fVwiXG4gID5cbiAgICA8bGFiZWxcbiAgICAgIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiXG4gICAgICBmb3I9XCJ0ZW1wbGF0ZVwiXG4gICAgPlxuICAgICAge3sgJ1RlbXBsYXRlJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvbGFiZWw+XG4gICAgPGRpdiBjbGFzcz1cImM4eS1zZWxlY3Qtd3JhcHBlclwiPlxuICAgICAgPHNlbGVjdFxuICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgIGlkPVwidGVtcGxhdGVcIlxuICAgICAgICBuYW1lPVwidGVtcGxhdGVcIlxuICAgICAgICAqbmdJZj1cInNzb0NvbmZpZ3VyYXRpb25cIlxuICAgICAgICBbKG5nTW9kZWwpXT1cInNzb0NvbmZpZ3VyYXRpb24udGVtcGxhdGVcIlxuICAgICAgPlxuICAgICAgICA8b3B0aW9uXG4gICAgICAgICAgKm5nRm9yPVwibGV0IHRlbXBsYXRlVHlwZSBvZiB0ZW1wbGF0ZVR5cGVDb25maWcgfCBrZXl2YWx1ZVwiXG4gICAgICAgICAgW25nVmFsdWVdPVwidGVtcGxhdGVUeXBlLmtleVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyB0ZW1wbGF0ZVR5cGUudmFsdWUubGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9vcHRpb24+XG4gICAgICA8L3NlbGVjdD5cbiAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG5cbjxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgPGRpdiBjbGFzcz1cImNvbC1sZy0xMiBjb2wtbGctbWF4XCI+XG4gICAgPGZvcm1cbiAgICAgIGNsYXNzPVwiY2FyZCBjYXJkLS1mdWxscGFnZVwiXG4gICAgICAjc3NvQ29uZmlndXJhdGlvbkZvcm09XCJuZ0Zvcm1cIlxuICAgICAgbm92YWxpZGF0ZVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBzZXBhcmF0b3JcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdGl0bGVcIj5cbiAgICAgICAgICB7eyAnU2luZ2xlIHNpZ24tb24nIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJpbm5lci1zY3JvbGxcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiY2FyZC1ibG9jayBwLTBcIlxuICAgICAgICAgICpuZ0lmPVwic3NvQ29uZmlndXJhdGlvblwiXG4gICAgICAgID5cbiAgICAgICAgICA8Yzh5LWN1c3RvbS10ZW1wbGF0ZVxuICAgICAgICAgICAgKm5nSWY9XCJzc29Db25maWd1cmF0aW9uLnRlbXBsYXRlID09PSB0ZW1wbGF0ZVR5cGUuQ1VTVE9NXCJcbiAgICAgICAgICAgIFtzc29Db25maWd1cmF0aW9uXT1cInNzb0NvbmZpZ3VyYXRpb25cIlxuICAgICAgICAgICAgW3Nzb0NvbmZpZ3VyYXRpb25DaGFuZ2VUcmlnZ2VyXT1cInNhdmVTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpXCJcbiAgICAgICAgICAgIChzc29Db25maWd1cmF0aW9uQ2hhbmdlKT1cInNhdmUoJGV2ZW50KVwiXG4gICAgICAgICAgICBbYXBwc109XCJhcHBzXCJcbiAgICAgICAgICAgIFtncm91cHNdPVwiZ3JvdXBzXCJcbiAgICAgICAgICAgIFtpbnZlbnRvcnlSb2xlc109XCJpbnZlbnRvcnlSb2xlc1wiXG4gICAgICAgICAgPjwvYzh5LWN1c3RvbS10ZW1wbGF0ZT5cblxuICAgICAgICAgIDxjOHktYWFkLXRlbXBsYXRlXG4gICAgICAgICAgICAqbmdJZj1cInNzb0NvbmZpZ3VyYXRpb24udGVtcGxhdGUgPT09IHRlbXBsYXRlVHlwZS5BWlVSRVwiXG4gICAgICAgICAgICBbc3NvQ29uZmlndXJhdGlvbl09XCJzc29Db25maWd1cmF0aW9uXCJcbiAgICAgICAgICAgIFtzc29Db25maWd1cmF0aW9uQ2hhbmdlVHJpZ2dlcl09XCJzYXZlU3ViamVjdC5hc09ic2VydmFibGUoKVwiXG4gICAgICAgICAgICAoc3NvQ29uZmlndXJhdGlvbkNoYW5nZSk9XCJzYXZlKCRldmVudClcIlxuICAgICAgICAgICAgW2FwcHNdPVwiYXBwc1wiXG4gICAgICAgICAgICBbZ3JvdXBzXT1cImdyb3Vwc1wiXG4gICAgICAgICAgICBbaW52ZW50b3J5Um9sZXNdPVwiaW52ZW50b3J5Um9sZXNcIlxuICAgICAgICAgID48L2M4eS1hYWQtdGVtcGxhdGU+XG5cbiAgICAgICAgICA8Yzh5LWtleS1jbG9hay10ZW1wbGF0ZVxuICAgICAgICAgICAgKm5nSWY9XCJzc29Db25maWd1cmF0aW9uLnRlbXBsYXRlID09PSB0ZW1wbGF0ZVR5cGUuS0VZQ0xPQUtcIlxuICAgICAgICAgICAgW3Nzb0NvbmZpZ3VyYXRpb25dPVwic3NvQ29uZmlndXJhdGlvblwiXG4gICAgICAgICAgICBbc3NvQ29uZmlndXJhdGlvbkNoYW5nZVRyaWdnZXJdPVwic2F2ZVN1YmplY3QuYXNPYnNlcnZhYmxlKClcIlxuICAgICAgICAgICAgKHNzb0NvbmZpZ3VyYXRpb25DaGFuZ2UpPVwic2F2ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIFthcHBzXT1cImFwcHNcIlxuICAgICAgICAgICAgW2dyb3Vwc109XCJncm91cHNcIlxuICAgICAgICAgICAgW2ludmVudG9yeVJvbGVzXT1cImludmVudG9yeVJvbGVzXCJcbiAgICAgICAgICA+PC9jOHkta2V5LWNsb2FrLXRlbXBsYXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtZm9vdGVyIHNlcGFyYXRvclwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxuICAgICAgICAgIHRpdGxlPVwie3sgJ1NhdmUnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAoY2xpY2spPVwic2F2ZVN1YmplY3QubmV4dCgpXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiIXNzb0NvbmZpZ3VyYXRpb25Gb3JtLmZvcm0udmFsaWQgfHwgc3NvQ29uZmlndXJhdGlvbkZvcm0uZm9ybS5wcmlzdGluZVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyAnU2F2ZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Zvcm0+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3NvLWNvbmZpZ3VyYXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vYXV0aC1jb25maWd1cmF0aW9uL3Nzby1jb25maWd1cmF0aW9uL3Nzby1jb25maWd1cmF0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL2F1dGgtY29uZmlndXJhdGlvbi9zc28tY29uZmlndXJhdGlvbi9zc28tY29uZmlndXJhdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixnQkFBZ0IsRUFHaEIscUJBQXFCLEVBQ3JCLG9CQUFvQixFQUVyQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQ0wsT0FBTyxFQUNQLFlBQVksRUFDWixZQUFZLEVBQ1osTUFBTSxFQUNOLFlBQVksRUFDWixlQUFlLEVBQ2YsZUFBZSxFQUNoQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFnQixPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDeEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0QsT0FBTyxFQUFvQixZQUFZLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMvRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7QUFNeEMsTUFBTSxPQUFPLHlCQUF5QjtJQStCcEMsWUFDVSx1QkFBZ0QsRUFDaEQsa0JBQXNDLEVBQ3RDLGdCQUFrQyxFQUNsQyxvQkFBMEMsRUFDMUMsWUFBMEIsRUFDMUIsWUFBMEIs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QVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDM0QsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUNmLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FDbkQsQ0FBQztJQUNKLENBQUM7SUFFTyxLQUFLLENBQUMseUJBQXlCO1FBQ3JDLE1BQU0sV0FBVyxHQUFHLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUMzRixNQUFNLFNBQVMsR0FBRyxPQUFPLENBQ3ZCLGtJQUFrSSxDQUNuSSxDQUFDO1FBQ0YsT0FBTyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUNwQyxPQUFPLENBQUMsd0JBQXdCLENBQUMsRUFDakMsU0FBUyxFQUNULE1BQU0sQ0FBQyxPQUFPLEVBQ2QsV0FBVyxDQUNaLENBQUM7SUFDSixDQUFDOytHQXhIVSx5QkFBeUI7bUdBQXpCLHlCQUF5QiwyTEM3QnRDLGdzSEE0SEE7OzRGRC9GYSx5QkFBeUI7a0JBSnJDLFNBQVM7K0JBQ0UsdUJBQXVCOzRVQWdCRSxvQkFBb0I7c0JBQXRELFNBQVM7dUJBQUMsc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBcHBsaWNhdGlvblNlcnZpY2UsXG4gIFVzZXJHcm91cFNlcnZpY2UsXG4gIElBcHBsaWNhdGlvbixcbiAgSVVzZXJHcm91cCxcbiAgVGVuYW50TG9naW5PcHRpb25UeXBlLFxuICBJbnZlbnRvcnlSb2xlU2VydmljZSxcbiAgSUlkZW50aWZpZWRcbn0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHtcbiAgZ2V0dGV4dCxcbiAgQWxlcnRTZXJ2aWNlLFxuICBNb2RhbFNlcnZpY2UsXG4gIFN0YXR1cyxcbiAgTG9naW5TZXJ2aWNlLFxuICBBcHBTdGF0ZVNlcnZpY2UsXG4gIFRlbmFudFVpU2VydmljZVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZm9ya0pvaW4sIFN1YnNjcmlwdGlvbiwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgc2hhcmVSZXBsYXksIHRhcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgU3NvQ29uZmlndXJhdGlvbiwgVGVtcGxhdGVUeXBlLCB0ZW1wbGF0ZVR5cGVDb25maWcgfSBmcm9tICcuL3Nzby1jb25maWd1cmF0aW9uLm1vZGVsJztcbmltcG9ydCB7IFNzb0NvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9zc28tY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IE5nRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LXNzby1jb25maWd1cmF0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Nzby1jb25maWd1cmF0aW9uLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBTc29Db25maWd1cmF0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgYXBwczogSUFwcGxpY2F0aW9uW107XG4gIGdyb3VwczogSVVzZXJHcm91cFtdO1xuICBpbnZlbnRvcnlSb2xlczogSUlkZW50aWZpZWRbXTtcbiAgc3NvQ29uZmlndXJhdGlvbjogU3NvQ29uZmlndXJhdGlvbjtcblxuICB0ZW1wbGF0ZVR5cGUgPSBUZW1wbGF0ZVR5cGU7XG4gIHRlbXBsYXRlVHlwZUNvbmZpZyA9IHRlbXBsYXRlVHlwZUNvbmZpZztcblxuICByZWxvYWRpbmckOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcbiAgcmVsb2FkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHNhdmVTdWJqZWN0OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcblxuICBAVmlld0NoaWxkKCdzc29Db25maWd1cmF0aW9uRm9ybScpIHNzb0NvbmZpZ3VyYXRpb25Gb3JtITogTmdGb3JtO1xuXG4gIHByaXZhdGUgZGF0YVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIHByaXZhdGUgZGF0YSQ6IGFueSA9IHRoaXMucmVsb2FkLnBpcGUoXG4gICAgdGFwKCgpID0+IHRoaXMucmVsb2FkaW5nJC5uZXh0KHRydWUpKSxcbiAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgIGZvcmtKb2luKHtcbiAgICAgICAgc3NvQ29uZmlndXJhdGlvbjogdGhpcy5zc29Db25maWd1cmF0aW9uU2VydmljZS5nZXRTc29Db25maWd1cmF0aW9uJCgpLFxuICAgICAgICBhcHBzOiB0aGlzLmdldEFwcGxpY2F0aW9ucygpLFxuICAgICAgICBncm91cHM6IHRoaXMuZ2V0R3JvdXBzKCksXG4gICAgICAgIGludmVudG9yeVJvbGVzOiB0aGlzLmdldEludmVudG9yeVJvbGVzKClcbiAgICAgIH0pXG4gICAgKSxcbiAgICB0YXAoKCkgPT4gdGhpcy5yZWxvYWRpbmckLm5leHQoZmFsc2UpKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc3NvQ29uZmlndXJhdGlvblNlcnZpY2U6IFNzb0NvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgYXBwbGljYXRpb25TZXJ2aWNlOiBBcHBsaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1c2VyR3JvdXBTZXJ2aWNlOiBVc2VyR3JvdXBTZXJ2aWNlLFxuICAgIHByaXZhdGUgaW52ZW50b3J5Um9sZVNlcnZpY2U6IEludmVudG9yeVJvbGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIGxvZ2luU2VydmljZTogTG9naW5TZXJ2aWNlLFxuICAgIHByaXZhdGUgYXBwU3RhdGVTZXJ2aWNlOiBBcHBTdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0ZW5hbnRVaVNlcnZpY2U6IFRlbmFudFVpU2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5kYXRhU3Vic2NyaXB0aW9uID0gdGhpcy5kYXRhJC5zdWJzY3JpYmUoXG4gICAgICAoeyBzc29Db25maWd1cmF0aW9uLCBhcHBzLCBncm91cHMsIGludmVudG9yeVJvbGVzIH0pID0+IHtcbiAgICAgICAgdGhpcy5hcHBzID0gYXBwcztcbiAgICAgICAgdGhpcy5ncm91cHMgPSBncm91cHM7XG4gICAgICAgIHRoaXMuaW52ZW50b3J5Um9sZXMgPSBpbnZlbnRvcnlSb2xlcztcbiAgICAgICAgdGhpcy5zc29Db25maWd1cmF0aW9uID0gc3NvQ29uZmlndXJhdGlvbjtcbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMubG9hZFNzb0NvbmZpZ3VyYXRpb24oKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGF0YVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgbG9hZFNzb0NvbmZpZ3VyYXRpb24oKSB7XG4gICAgdGhpcy5yZWxvYWQubmV4dCgpO1xuICAgIHRoaXMuc3NvQ29uZmlndXJhdGlvbkZvcm0uZm9ybS5tYXJrQXNQcmlzdGluZSgpO1xuICB9XG5cbiAgYXN5bmMgc2F2ZShzc29Db25maWd1cmF0aW9uKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMud2FybkFib3V0Rm9yY2VVc2Vyc0xvZ091dCgpO1xuICAgICAgY29uc3QgbG9nb3V0UmVxdWlyZWQgPVxuICAgICAgICB0aGlzLnRlbmFudFVpU2VydmljZS5nZXRDdXJyZW50VXNlckxvZ2luTW9kZSgpICE9PSBUZW5hbnRMb2dpbk9wdGlvblR5cGUuQkFTSUM7XG4gICAgICBpZiAobG9nb3V0UmVxdWlyZWQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2UuY29uZmlybUxvZ291dCgpO1xuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5zc29Db25maWd1cmF0aW9uU2VydmljZS5zYXZlKHNzb0NvbmZpZ3VyYXRpb24pO1xuICAgICAgaWYgKGxvZ291dFJlcXVpcmVkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9naW5TZXJ2aWNlLmxvZ291dCh0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubG9hZFNzb0NvbmZpZ3VyYXRpb24oKTtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhnZXR0ZXh0KCdDb25maWd1cmF0aW9uIHNhdmVkLicpKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgaWYgKGV4KSB7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZFNlcnZlckZhaWx1cmUoZXgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2FkU3NvQ29uZmlndXJhdGlvbigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0QXBwbGljYXRpb25zKCk6IFByb21pc2U8dm9pZCB8IElBcHBsaWNhdGlvbltdPiB7XG4gICAgcmV0dXJuIHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmxpc3RCeVRlbmFudChudWxsLCB7IHBhZ2VTaXplOiAxMDAgfSkudGhlbihcbiAgICAgIHJlcyA9PiByZXMuZGF0YSxcbiAgICAgIGVycm9yID0+IHRoaXMuYWxlcnRTZXJ2aWNlLmFkZFNlcnZlckZhaWx1cmUoZXJyb3IpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0R3JvdXBzKCk6IFByb21pc2U8dm9pZCB8IElVc2VyR3JvdXBbXT4ge1xuICAgIHJldHVybiB0aGlzLnVzZXJHcm91cFNlcnZpY2UubGlzdCh7IHBhZ2VTaXplOiAxMDAgfSkudGhlbihcbiAgICAgIHJlcyA9PiByZXMuZGF0YSxcbiAgICAgIGVycm9yID0+IHRoaXMuYWxlcnRTZXJ2aWNlLmFkZFNlcnZlckZhaWx1cmUoZXJyb3IpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0SW52ZW50b3J5Um9sZXMoKTogUHJvbWlzZTx2b2lkIHwgSUlkZW50aWZpZWRbXT4ge1xuICAgIHJldHVybiB0aGlzLmludmVudG9yeVJvbGVTZXJ2aWNlLmxpc3QoeyBwYWdlU2l6ZTogMTAwIH0pLnRoZW4oXG4gICAgICByZXMgPT4gcmVzLmRhdGEsXG4gICAgICBlcnJvciA9PiB0aGlzLmFsZXJ0U2VydmljZS5hZGRTZXJ2ZXJGYWlsdXJlKGVycm9yKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHdhcm5BYm91dEZvcmNlVXNlcnNMb2dPdXQoKSB7XG4gICAgY29uc3QgbW9kYWxMYWJlbHMgPSB7IG9rOiBnZXR0ZXh0KCdVcGRhdGUgYW5kIGxvZyBvdXQgdXNlcnMnKSwgY2FuY2VsOiBnZXR0ZXh0KCdDYW5jZWwnKSB9O1xuICAgIGNvbnN0IG1vZGFsQm9keSA9IGdldHRleHQoXG4gICAgICAnVXBkYXRpbmcgU1NPIGNvbmZpZ3VyYXRpb24gd2lsbCBsb2cgb3V0IGFsbCB1c2VycyBsb2dnZWQgd2l0aCBcIk9BSS1TZWN1cmVcIiBvciBcIlNpbmdsZSBzaWduLW9uIHJlZGlyZWN0XCIuIERvIHlvdSB3YW50IHRvIHByb2NlZWQ/J1xuICAgICk7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLmNvbmZpcm0oXG4gICAgICBnZXR0ZXh0KCdGb3JjZSB1c2VycyB0byBsb2cgb3V0JyksXG4gICAgICBtb2RhbEJvZHksXG4gICAgICBTdGF0dXMuV0FSTklORyxcbiAgICAgIG1vZGFsTGFiZWxzXG4gICAgKTtcbiAgfVxufVxuIiwiPGM4eS10aXRsZT57eyAnU2luZ2xlIHNpZ24tb24nIHwgdHJhbnNsYXRlIH19PC9jOHktdGl0bGU+XG48Yzh5LWJyZWFkY3J1bWI+XG4gIDxjOHktYnJlYWRjcnVtYi1pdGVtXG4gICAgW2ljb25dPVwiJ2NvZydcIlxuICAgIFtsYWJlbF09XCInU2V0dGluZ3MnIHwgdHJhbnNsYXRlXCJcbiAgPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbiAgPGM4eS1icmVhZGNydW1iLWl0ZW1cbiAgICBbaWNvbl09XCInY29nJ1wiXG4gICAgW2xhYmVsXT1cIidTaW5nbGUgc2lnbi1vbicgfCB0cmFuc2xhdGVcIlxuICA+PC9jOHktYnJlYWRjcnVtYi1pdGVtPlxuPC9jOHktYnJlYWRjcnVtYj5cblxuPGM4eS1hY3Rpb24tYmFyLWl0ZW0gW3BsYWNlbWVudF09XCIncmlnaHQnXCI+XG4gIDxidXR0b25cbiAgICBjbGFzcz1cImJ0biBidG4tbGlua1wiXG4gICAgdGl0bGU9XCJ7eyAnUmVsb2FkJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgKGNsaWNrKT1cImxvYWRTc29Db25maWd1cmF0aW9uKClcIlxuICA+XG4gICAgPGlcbiAgICAgIGM4eUljb249XCJyZWZyZXNoXCJcbiAgICAgIFtuZ0NsYXNzXT1cInsgJ2ljb24tc3Bpbic6IHJlbG9hZGluZyQgfCBhc3luYyB9XCJcbiAgICA+PC9pPlxuICAgIHt7ICdSZWxvYWQnIHwgdHJhbnNsYXRlIH19XG4gIDwvYnV0dG9uPlxuPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG48Yzh5LWFjdGlvbi1iYXItaXRlbVxuICBbcGxhY2VtZW50XT1cIidsZWZ0J1wiXG4gIGl0ZW1DbGFzcz1cIm5hdmJhci1mb3JtIGhpZGRlbi14c1wiXG4+XG4gIDxkaXZcbiAgICBjbGFzcz1cImZvcm0tZ3JvdXAgZC1mbGV4IG0tYi0wXCJcbiAgICB0aXRsZT1cInt7ICdUZW1wbGF0ZScgfCB0cmFuc2xhdGUgfX1cIlxuICA+XG4gICAgPGxhYmVsXG4gICAgICBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIlxuICAgICAgZm9yPVwidGVtcGxhdGVcIlxuICAgID5cbiAgICAgIHt7ICdUZW1wbGF0ZScgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2xhYmVsPlxuICAgIDxkaXYgY2xhc3M9XCJjOHktc2VsZWN0LXdyYXBwZXJcIj5cbiAgICAgIDxzZWxlY3RcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICBpZD1cInRlbXBsYXRlXCJcbiAgICAgICAgbmFtZT1cInRlbXBsYXRlXCJcbiAgICAgICAgKm5nSWY9XCJzc29Db25maWd1cmF0aW9uXCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJzc29Db25maWd1cmF0aW9uLnRlbXBsYXRlXCJcbiAgICAgID5cbiAgICAgICAgPG9wdGlvblxuICAgICAgICAgICpuZ0Zvcj1cImxldCB0ZW1wbGF0ZVR5cGUgb2YgdGVtcGxhdGVUeXBlQ29uZmlnIHwga2V5dmFsdWVcIlxuICAgICAgICAgIFtuZ1ZhbHVlXT1cInRlbXBsYXRlVHlwZS5rZXlcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgdGVtcGxhdGVUeXBlLnZhbHVlLmxhYmVsIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvb3B0aW9uPlxuICAgICAgPC9zZWxlY3Q+XG4gICAgICA8c3Bhbj48L3NwYW4+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG48ZGl2IGNsYXNzPVwicm93XCI+XG4gIDxkaXYgY2xhc3M9XCJjb2wtbGctMTIgY29sLWxnLW1heFwiPlxuICAgIDxmb3JtXG4gICAgICBjbGFzcz1cImNhcmQgY2FyZC0tZnVsbHBhZ2VcIlxuICAgICAgI3Nzb0NvbmZpZ3VyYXRpb25Gb3JtPVwibmdGb3JtXCJcbiAgICAgIG5vdmFsaWRhdGVcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgc2VwYXJhdG9yXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlXCI+XG4gICAgICAgICAge3sgJ1NpbmdsZSBzaWduLW9uJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiaW5uZXItc2Nyb2xsXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImNhcmQtYmxvY2sgcC0wXCJcbiAgICAgICAgICAqbmdJZj1cInNzb0NvbmZpZ3VyYXRpb25cIlxuICAgICAgICA+XG4gICAgICAgICAgPGM4eS1jdXN0b20tdGVtcGxhdGVcbiAgICAgICAgICAgICpuZ0lmPVwic3NvQ29uZmlndXJhdGlvbi50ZW1wbGF0ZSA9PT0gdGVtcGxhdGVUeXBlLkNVU1RPTVwiXG4gICAgICAgICAgICBbc3NvQ29uZmlndXJhdGlvbl09XCJzc29Db25maWd1cmF0aW9uXCJcbiAgICAgICAgICAgIFtzc29Db25maWd1cmF0aW9uQ2hhbmdlVHJpZ2dlcl09XCJzYXZlU3ViamVjdC5hc09ic2VydmFibGUoKVwiXG4gICAgICAgICAgICAoc3NvQ29uZmlndXJhdGlvbkNoYW5nZSk9XCJzYXZlKCRldmVudClcIlxuICAgICAgICAgICAgW2FwcHNdPVwiYXBwc1wiXG4gICAgICAgICAgICBbZ3JvdXBzXT1cImdyb3Vwc1wiXG4gICAgICAgICAgICBbaW52ZW50b3J5Um9sZXNdPVwiaW52ZW50b3J5Um9sZXNcIlxuICAgICAgICAgID48L2M4eS1jdXN0b20tdGVtcGxhdGU+XG5cbiAgICAgICAgICA8Yzh5LWFhZC10ZW1wbGF0ZVxuICAgICAgICAgICAgKm5nSWY9XCJzc29Db25maWd1cmF0aW9uLnRlbXBsYXRlID09PSB0ZW1wbGF0ZVR5cGUuQVpVUkVcIlxuICAgICAgICAgICAgW3Nzb0NvbmZpZ3VyYXRpb25dPVwic3NvQ29uZmlndXJhdGlvblwiXG4gICAgICAgICAgICBbc3NvQ29uZmlndXJhdGlvbkNoYW5nZVRyaWdnZXJdPVwic2F2ZVN1YmplY3QuYXNPYnNlcnZhYmxlKClcIlxuICAgICAgICAgICAgKHNzb0NvbmZpZ3VyYXRpb25DaGFuZ2UpPVwic2F2ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIFthcHBzXT1cImFwcHNcIlxuICAgICAgICAgICAgW2dyb3Vwc109XCJncm91cHNcIlxuICAgICAgICAgICAgW2ludmVudG9yeVJvbGVzXT1cImludmVudG9yeVJvbGVzXCJcbiAgICAgICAgICA+PC9jOHktYWFkLXRlbXBsYXRlPlxuXG4gICAgICAgICAgPGM4eS1rZXktY2xvYWstdGVtcGxhdGVcbiAgICAgICAgICAgICpuZ0lmPVwic3NvQ29uZmlndXJhdGlvbi50ZW1wbGF0ZSA9PT0gdGVtcGxhdGVUeXBlLktFWUNMT0FLXCJcbiAgICAgICAgICAgIFtzc29Db25maWd1cmF0aW9uXT1cInNzb0NvbmZpZ3VyYXRpb25cIlxuICAgICAgICAgICAgW3Nzb0NvbmZpZ3VyYXRpb25DaGFuZ2VUcmlnZ2VyXT1cInNhdmVTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpXCJcbiAgICAgICAgICAgIChzc29Db25maWd1cmF0aW9uQ2hhbmdlKT1cInNhdmUoJGV2ZW50KVwiXG4gICAgICAgICAgICBbYXBwc109XCJhcHBzXCJcbiAgICAgICAgICAgIFtncm91cHNdPVwiZ3JvdXBzXCJcbiAgICAgICAgICAgIFtpbnZlbnRvcnlSb2xlc109XCJpbnZlbnRvcnlSb2xlc1wiXG4gICAgICAgICAgPjwvYzh5LWtleS1jbG9hay10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWZvb3RlciBzZXBhcmF0b3JcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICAgICAgICB0aXRsZT1cInt7ICdTYXZlJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgKGNsaWNrKT1cInNhdmVTdWJqZWN0Lm5leHQoKVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiFzc29Db25maWd1cmF0aW9uRm9ybS5mb3JtLnZhbGlkIHx8IHNzb0NvbmZpZ3VyYXRpb25Gb3JtLmZvcm0ucHJpc3RpbmVcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgJ1NhdmUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9mb3JtPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19