@c8y/ngx-components 1021.80.1 → 1021.81.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 (88) hide show
  1. package/core/data-grid/column/tree-node-column/tree-node.cell-renderer.component.d.ts +23 -0
  2. package/core/data-grid/column/tree-node-column/tree-node.cell-renderer.component.d.ts.map +1 -0
  3. package/core/data-grid/column/tree-node-column/tree-node.data-grid-column.d.ts +23 -0
  4. package/core/data-grid/column/tree-node-column/tree-node.data-grid-column.d.ts.map +1 -0
  5. package/core/data-grid/column/tree-node-column/tree-node.header-cell-renderer.component.d.ts +6 -0
  6. package/core/data-grid/column/tree-node-column/tree-node.header-cell-renderer.component.d.ts.map +1 -0
  7. package/core/data-grid/data-grid.component.d.ts +29 -1
  8. package/core/data-grid/data-grid.component.d.ts.map +1 -1
  9. package/core/data-grid/data-grid.model.d.ts +13 -1
  10. package/core/data-grid/data-grid.model.d.ts.map +1 -1
  11. package/core/data-grid/grid-data-source.d.ts +11 -2
  12. package/core/data-grid/grid-data-source.d.ts.map +1 -1
  13. package/core/data-grid/index.d.ts +4 -1
  14. package/core/data-grid/index.d.ts.map +1 -1
  15. package/esm2022/branding/shared/lazy/branding/branding.component.mjs +2 -2
  16. package/esm2022/context-dashboard/dashboard-manager/type-dashboard-target-assets-grid/type-dashboard-target-assets-grid.component.mjs +1 -1
  17. package/esm2022/context-dashboard/dashboard-manager/type-dashboards-list/type-dashboards-list.component.mjs +1 -1
  18. package/esm2022/core/data-grid/column/tree-node-column/tree-node.cell-renderer.component.mjs +87 -0
  19. package/esm2022/core/data-grid/column/tree-node-column/tree-node.data-grid-column.mjs +15 -0
  20. package/esm2022/core/data-grid/column/tree-node-column/tree-node.header-cell-renderer.component.mjs +15 -0
  21. package/esm2022/core/data-grid/configure-custom-column/asset-property-grid.component.mjs +1 -1
  22. package/esm2022/core/data-grid/data-grid.component.mjs +68 -11
  23. package/esm2022/core/data-grid/data-grid.model.mjs +1 -1
  24. package/esm2022/core/data-grid/grid-data-source.mjs +92 -22
  25. package/esm2022/core/data-grid/index.mjs +5 -2
  26. package/esm2022/device-grid/device-grid.component.mjs +1 -1
  27. package/esm2022/device-profile/device-profile-list.component.mjs +1 -1
  28. package/esm2022/device-provisioned-certificates/device-tab-provisioned-certificates.component.mjs +1 -1
  29. package/esm2022/ecosystem/application-plugins/application-plugins.component.mjs +1 -1
  30. package/esm2022/files-repository/files-repository.component.mjs +1 -1
  31. package/esm2022/messaging-management/messaging/topic/topic-list-view.component.mjs +2 -2
  32. package/esm2022/messaging-management/messaging/topic/topic-subscribers-view/topic-subscribers-view.component.mjs +2 -2
  33. package/esm2022/operations/bulk-single-operations-list/single-operations-list.component.mjs +2 -2
  34. package/esm2022/remote-access/configurations/remote-access-configuration-list/remote-access-configuration-list.component.mjs +2 -2
  35. package/esm2022/repository/configuration/list/configuration-list.component.mjs +1 -1
  36. package/esm2022/repository/firmware/list/firmware-list.component.mjs +1 -1
  37. package/esm2022/repository/software/list/software-list.component.mjs +1 -1
  38. package/esm2022/search/search-grid.component.mjs +1 -1
  39. package/esm2022/services/services-device-tab/services-device-tab.component.mjs +1 -1
  40. package/esm2022/sub-assets/sub-assets-grid.component.mjs +1 -1
  41. package/esm2022/tenants/tenant-list/tenant-list.component.mjs +1 -1
  42. package/esm2022/translation-editor/lazy/translation-editor/translation-editor.component.mjs +2 -2
  43. package/fesm2022/{c8y-ngx-components-asset-property-grid.component-CmhkghTo.mjs → c8y-ngx-components-asset-property-grid.component-xQgHuomT.mjs} +3 -3
  44. package/fesm2022/{c8y-ngx-components-asset-property-grid.component-CmhkghTo.mjs.map → c8y-ngx-components-asset-property-grid.component-xQgHuomT.mjs.map} +1 -1
  45. package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs +1 -1
  46. package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs.map +1 -1
  47. package/fesm2022/{c8y-ngx-components-c8y-ngx-components-D-YOjLHK.mjs → c8y-ngx-components-c8y-ngx-components-D2rmddmn.mjs} +455 -228
  48. package/fesm2022/c8y-ngx-components-c8y-ngx-components-D2rmddmn.mjs.map +1 -0
  49. package/fesm2022/c8y-ngx-components-context-dashboard.mjs +2 -2
  50. package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  51. package/fesm2022/c8y-ngx-components-device-grid.mjs +1 -1
  52. package/fesm2022/c8y-ngx-components-device-grid.mjs.map +1 -1
  53. package/fesm2022/c8y-ngx-components-device-profile.mjs +1 -1
  54. package/fesm2022/c8y-ngx-components-device-profile.mjs.map +1 -1
  55. package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs +1 -1
  56. package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs.map +1 -1
  57. package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs +1 -1
  58. package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
  59. package/fesm2022/c8y-ngx-components-ecosystem.mjs +1 -1
  60. package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
  61. package/fesm2022/c8y-ngx-components-files-repository.mjs +1 -1
  62. package/fesm2022/c8y-ngx-components-files-repository.mjs.map +1 -1
  63. package/fesm2022/c8y-ngx-components-messaging-management.mjs +2 -2
  64. package/fesm2022/c8y-ngx-components-messaging-management.mjs.map +1 -1
  65. package/fesm2022/c8y-ngx-components-operations-bulk-single-operations-list.mjs +1 -1
  66. package/fesm2022/c8y-ngx-components-operations-bulk-single-operations-list.mjs.map +1 -1
  67. package/fesm2022/c8y-ngx-components-remote-access-configurations.mjs +1 -1
  68. package/fesm2022/c8y-ngx-components-remote-access-configurations.mjs.map +1 -1
  69. package/fesm2022/c8y-ngx-components-repository-configuration.mjs +1 -1
  70. package/fesm2022/c8y-ngx-components-repository-configuration.mjs.map +1 -1
  71. package/fesm2022/c8y-ngx-components-repository-firmware.mjs +1 -1
  72. package/fesm2022/c8y-ngx-components-repository-firmware.mjs.map +1 -1
  73. package/fesm2022/c8y-ngx-components-repository-software.mjs +1 -1
  74. package/fesm2022/c8y-ngx-components-repository-software.mjs.map +1 -1
  75. package/fesm2022/c8y-ngx-components-search.mjs +1 -1
  76. package/fesm2022/c8y-ngx-components-search.mjs.map +1 -1
  77. package/fesm2022/c8y-ngx-components-services.mjs +1 -1
  78. package/fesm2022/c8y-ngx-components-services.mjs.map +1 -1
  79. package/fesm2022/c8y-ngx-components-sub-assets.mjs +1 -1
  80. package/fesm2022/c8y-ngx-components-sub-assets.mjs.map +1 -1
  81. package/fesm2022/c8y-ngx-components-tenants.mjs +1 -1
  82. package/fesm2022/c8y-ngx-components-tenants.mjs.map +1 -1
  83. package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs +1 -1
  84. package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs.map +1 -1
  85. package/fesm2022/c8y-ngx-components.mjs +1 -1
  86. package/locales/locales.pot +6 -0
  87. package/package.json +1 -1
  88. package/fesm2022/c8y-ngx-components-c8y-ngx-components-D-YOjLHK.mjs.map +0 -1
@@ -149,7 +149,7 @@ export class FilesRepositoryComponent {
149
149
  await this.modalService.confirm(title, body, status, labels);
150
150
  }
151
151
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FilesRepositoryComponent, deps: [{ token: i1.FilesRepositoryService }, { token: i2.InventoryBinaryService }, { token: i3.ModalService }, { token: i3.AlertService }, { token: i4.BsModalService }, { token: i3.FilesService }, { token: i5.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
152
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FilesRepositoryComponent, selector: "c8y-files-repository", viewQueries: [{ propertyName: "dataGrid", first: true, predicate: DataGridComponent, descendants: true, static: true }], ngImport: i0, template: "<c8y-title>\n {{ title | translate }}\n</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n icon=\"c8y-management\"\n [label]=\"managementTitle | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"title | translate\"></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Upload files' | translate }}\"\n *c8yIfAllowed=\"['ROLE_INVENTORY_ADMIN', 'ROLE_INVENTORY_CREATE']; allowAny: true\"\n (click)=\"openFileUploadComponent()\"\n data-cy=\"c8y-files-repository--open-file-upload-component\"\n >\n <i c8yIcon=\"upload\"></i>\n {{ 'Upload files' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-help src=\"/docs/standard-tenant/managing-data/#file-repository\"></c8y-help>\n\n<div class=\"content-fullpage border-top border-bottom\">\n <c8y-data-grid\n [title]=\"title\"\n [loadMoreItemsLabel]=\"loadMoreItemsLabel\"\n [loadingItemsLabel]=\"loadingItemsLabel\"\n [displayOptions]=\"displayOptions\"\n [columns]=\"columns\"\n [pagination]=\"pagination\"\n [infiniteScroll]=\"infiniteScroll\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n [actionControls]=\"actionControls\"\n [selectable]=\"selectable\"\n [showSearch]=\"true\"\n [refresh]=\"refresh\"\n [bulkActionControls]=\"bulkActionControls\"\n >\n <c8y-ui-empty-state\n [icon]=\"stats?.size > 0 ? 'search' : 'c8y-archive'\"\n [title]=\"stats?.size > 0 ? (noResultsMessage | translate) : (noDataMessage | translate)\"\n [subtitle]=\"stats?.size > 0 ? (noResultsSubtitle | translate) : (noDataSubtitle | translate)\"\n *emptyStateContext=\"let stats\"\n [horizontal]=\"stats?.size > 0\"\n >\n <p *ngIf=\"stats?.size === 0\">\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Upload file' | translate }}\"\n type=\"button\"\n (click)=\"openFileUploadComponent()\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Upload file' | translate }}\n </button>\n </p>\n </c8y-ui-empty-state>\n\n <c8y-column name=\"name\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value }}\">\n <div class=\"d-flex j-c-between a-i-center\">\n {{ context.value }}\n <c8y-file-preview\n class=\"m-l-auto\"\n [mo]=\"context.item\"\n >\n <button\n class=\"btn btn-emphasis btn-icon\"\n [title]=\"'Preview file' | translate\"\n type=\"button\"\n customButton\n >\n <i c8yIcon=\"search\"></i>\n </button>\n </c8y-file-preview>\n </div>\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"length\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value }} B\">\n {{ context.value | bytes }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"lastUpdated\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value | c8yDate }}\">\n {{ context.value | c8yDate }}\n </span>\n </ng-container>\n </c8y-column>\n </c8y-data-grid>\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: "component", type: i3.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i3.EmptyStateContextDirective, selector: "[emptyStateContext]" }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.IfAllowedDirective, selector: "[c8yIfAllowed]", inputs: ["c8yIfAllowed", "c8yIfAllowedAllowAny"] }, { kind: "directive", type: i3.CellRendererDefDirective, selector: "[c8yCellRendererDef]" }, { kind: "directive", type: i3.ColumnDirective, selector: "c8y-column", inputs: ["name"] }, { kind: "component", type: i3.DataGridComponent, selector: "c8y-data-grid", inputs: ["title", "loadMoreItemsLabel", "loadingItemsLabel", "showSearch", "refresh", "columns", "rows", "pagination", "infiniteScroll", "serverSideDataCallback", "selectable", "singleSelection", "selectionPrimaryKey", "displayOptions", "actionControls", "bulkActionControls", "headerActionControls", "searchText", "configureColumnsEnabled", "showCounterWarning", "activeClassName", "expandableRows", "hideReload"], outputs: ["rowMouseOver", "rowMouseLeave", "rowClick", "onConfigChange", "onBeforeFilter", "onBeforeSearch", "onFilter", "itemsSelect", "onReload", "onAddCustomColumn", "onRemoveCustomColumn", "onColumnFilterReset", "onSort", "onPageSizeChange", "onColumnReordered", "onColumnVisibilityChange"] }, { kind: "component", type: i3.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: i3.HelpComponent, selector: "c8y-help", inputs: ["src", "isCollapsed", "priority", "icon"] }, { kind: "component", type: i7.FilePreviewComponent, selector: "c8y-file-preview", inputs: ["mo"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i3.DatePipe, name: "c8yDate" }, { kind: "pipe", type: i3.BytesPipe, name: "bytes" }] }); }
152
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FilesRepositoryComponent, selector: "c8y-files-repository", viewQueries: [{ propertyName: "dataGrid", first: true, predicate: DataGridComponent, descendants: true, static: true }], ngImport: i0, template: "<c8y-title>\n {{ title | translate }}\n</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n icon=\"c8y-management\"\n [label]=\"managementTitle | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"title | translate\"></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Upload files' | translate }}\"\n *c8yIfAllowed=\"['ROLE_INVENTORY_ADMIN', 'ROLE_INVENTORY_CREATE']; allowAny: true\"\n (click)=\"openFileUploadComponent()\"\n data-cy=\"c8y-files-repository--open-file-upload-component\"\n >\n <i c8yIcon=\"upload\"></i>\n {{ 'Upload files' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-help src=\"/docs/standard-tenant/managing-data/#file-repository\"></c8y-help>\n\n<div class=\"content-fullpage border-top border-bottom\">\n <c8y-data-grid\n [title]=\"title\"\n [loadMoreItemsLabel]=\"loadMoreItemsLabel\"\n [loadingItemsLabel]=\"loadingItemsLabel\"\n [displayOptions]=\"displayOptions\"\n [columns]=\"columns\"\n [pagination]=\"pagination\"\n [infiniteScroll]=\"infiniteScroll\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n [actionControls]=\"actionControls\"\n [selectable]=\"selectable\"\n [showSearch]=\"true\"\n [refresh]=\"refresh\"\n [bulkActionControls]=\"bulkActionControls\"\n >\n <c8y-ui-empty-state\n [icon]=\"stats?.size > 0 ? 'search' : 'c8y-archive'\"\n [title]=\"stats?.size > 0 ? (noResultsMessage | translate) : (noDataMessage | translate)\"\n [subtitle]=\"stats?.size > 0 ? (noResultsSubtitle | translate) : (noDataSubtitle | translate)\"\n *emptyStateContext=\"let stats\"\n [horizontal]=\"stats?.size > 0\"\n >\n <p *ngIf=\"stats?.size === 0\">\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Upload file' | translate }}\"\n type=\"button\"\n (click)=\"openFileUploadComponent()\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Upload file' | translate }}\n </button>\n </p>\n </c8y-ui-empty-state>\n\n <c8y-column name=\"name\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value }}\">\n <div class=\"d-flex j-c-between a-i-center\">\n {{ context.value }}\n <c8y-file-preview\n class=\"m-l-auto\"\n [mo]=\"context.item\"\n >\n <button\n class=\"btn btn-emphasis btn-icon\"\n [title]=\"'Preview file' | translate\"\n type=\"button\"\n customButton\n >\n <i c8yIcon=\"search\"></i>\n </button>\n </c8y-file-preview>\n </div>\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"length\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value }} B\">\n {{ context.value | bytes }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"lastUpdated\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value | c8yDate }}\">\n {{ context.value | c8yDate }}\n </span>\n </ng-container>\n </c8y-column>\n </c8y-data-grid>\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: "component", type: i3.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i3.EmptyStateContextDirective, selector: "[emptyStateContext]" }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.IfAllowedDirective, selector: "[c8yIfAllowed]", inputs: ["c8yIfAllowed", "c8yIfAllowedAllowAny"] }, { kind: "directive", type: i3.CellRendererDefDirective, selector: "[c8yCellRendererDef]" }, { kind: "directive", type: i3.ColumnDirective, selector: "c8y-column", inputs: ["name"] }, { kind: "component", type: i3.DataGridComponent, selector: "c8y-data-grid", inputs: ["title", "loadMoreItemsLabel", "loadingItemsLabel", "showSearch", "refresh", "columns", "rows", "pagination", "childNodePagination", "infiniteScroll", "serverSideDataCallback", "selectable", "singleSelection", "selectionPrimaryKey", "displayOptions", "actionControls", "bulkActionControls", "headerActionControls", "searchText", "configureColumnsEnabled", "showCounterWarning", "activeClassName", "expandableRows", "treeGrid", "hideReload", "childNodesProperty", "parentNodeLabelProperty"], outputs: ["rowMouseOver", "rowMouseLeave", "rowClick", "onConfigChange", "onBeforeFilter", "onBeforeSearch", "onFilter", "itemsSelect", "onReload", "onAddCustomColumn", "onRemoveCustomColumn", "onColumnFilterReset", "onSort", "onPageSizeChange", "onColumnReordered", "onColumnVisibilityChange"] }, { kind: "component", type: i3.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: i3.HelpComponent, selector: "c8y-help", inputs: ["src", "isCollapsed", "priority", "icon"] }, { kind: "component", type: i7.FilePreviewComponent, selector: "c8y-file-preview", inputs: ["mo"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i3.DatePipe, name: "c8yDate" }, { kind: "pipe", type: i3.BytesPipe, name: "bytes" }] }); }
153
153
  }
154
154
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FilesRepositoryComponent, decorators: [{
155
155
  type: Component,
@@ -52,7 +52,7 @@ export class TopicListViewComponent {
52
52
  .subscribe(() => this.refresh.emit());
53
53
  }
54
54
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TopicListViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
55
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TopicListViewComponent, isStandalone: true, selector: "app-topic-list-view", ngImport: i0, template: "<c8y-title>{{ namespaceLabel$ | async }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'monitoring'\"\n [label]=\"'Monitoring' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [label]=\"'Messaging service' | translate\"\n [path]=\"'/monitoring/messaging-service'\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"namespaceLabel$ | async\"></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <a\n class=\"btn btn-link\"\n title=\"{{ 'Reload' | translate }}\"\n (click)=\"refresh.emit()\"\n >\n <i\n c8yIcon=\"refresh\"\n [ngClass]=\"{ 'icon-spin': loading$ | async }\"\n ></i>\n {{ 'Reload' | translate }}\n </a>\n</c8y-action-bar-item>\n\n<div class=\"card content-fullpage d-flex d-col\">\n <div class=\"bg-level-1 separator-bottom flex-no-shrink\">\n <div\n class=\"card-block\"\n style=\"min-height: 172px\"\n >\n <div\n class=\"col-md-4 m-b-24 col-xs-12 d-flex p-t-24 gap-16 text-default a-i-center a-s-stretch\"\n >\n <div class=\"text-center d-col\">\n <i\n class=\"m-b-8 icon-40 c8y-icon-duocolor\"\n [c8yIcon]=\"icon$ | async\"\n ></i>\n <span class=\"tag tag--info\">{{ 'Service' | translate }}</span>\n </div>\n <span class=\"h4 text-break-all\">{{ namespaceLabel$ | async }}</span>\n </div>\n <div class=\"col-md-4\">\n <fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend>\n {{ 'Service usage/limits' | translate }}\n </legend>\n\n <ng-container *ngIf=\"loading$ | async; else serviceUsageLimits\">\n <c8y-loading></c8y-loading>\n </ng-container>\n\n <ng-template #serviceUsageLimits>\n <ng-container *ngIf=\"(namespaceDetails$ | async)?.namespace as namespace\">\n <ul class=\"list-unstyled small animated fadeIn\">\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">{{ 'Topics' | translate }}</label>\n <ng-container *ngIf=\"namespace?.topics?.limit !== 0\">\n <app-usage\n [count]=\"namespace?.topics?.count\"\n [limit]=\"namespace?.topics?.limit\"\n ></app-usage>\n <span class=\"m-l-16\">\n {{ namespace?.topics?.count | number }} /\n {{ namespace?.topics?.limit | backlogQuotaLimit }}\n </span>\n </ng-container>\n <ng-container *ngIf=\"namespace?.topics?.limit === 0\">\n <span class=\"m-l-16\">{{ namespace?.topics?.count | number }}</span>\n </ng-container>\n </li>\n\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">{{ 'Subscribers' | translate }}</label>\n <span class=\"m-l-16\">\n {{ namespace?.subscribers?.count | number }}\n </span>\n </li>\n\n <li class=\"p-t-4 p-b-4 d-flex text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">{{ 'Publishers' | translate }}</label>\n <span class=\"m-l-16\">\n {{ namespace?.publishers?.count | number }}\n </span>\n </li>\n </ul>\n </ng-container>\n </ng-template>\n </fieldset>\n </div>\n <div class=\"col-md-4\">\n <fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend>{{ 'Service message backlog limits' | translate }}</legend>\n\n <ng-container *ngIf=\"loading$ | async; else serviceMessageBacklogLimits\">\n <c8y-loading></c8y-loading>\n </ng-container>\n\n <ng-template #serviceMessageBacklogLimits>\n <ng-container *ngIf=\"(namespaceDetails$ | async)?.policies as policies\">\n <ul class=\"list-unstyled small animated fadeIn\">\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">\n {{ 'Backlog quota (per topic)' | translate }}\n </label>\n <span\n title=\"{{\n policies?.backlogQuota?.limit > 0\n ? (policies.backlogQuota.limit | bytes: 0 : true)\n : '-'\n }}\"\n >\n {{\n policies?.backlogQuota?.limit > 0\n ? (policies.backlogQuota.limit | bytes: 0)\n : '-'\n }}\n </span>\n </li>\n\n <li class=\"p-t-4 p-b-4 d-flex text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">\n {{ 'Backlog time to live (TTL)' | translate }}\n </label>\n <span>{{ policies?.messageTTL | timeToLive }}</span>\n </li>\n </ul>\n </ng-container>\n </ng-template>\n </fieldset>\n </div>\n </div>\n </div>\n\n <c8y-data-grid\n class=\"d-contents\"\n [title]=\"tableTitle | translate\"\n [loadingItemsLabel]=\"loadingItemsLabel | translate\"\n [loadMoreItemsLabel]=\"loadMoreItemsLabel | translate\"\n [columns]=\"columns\"\n [pagination]=\"pagination\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n [refresh]=\"refresh\"\n [hideReload]=\"true\"\n >\n <c8y-ui-empty-state\n [icon]=\"stats?.size > 0 ? 'search' : 'day-view'\"\n [title]=\"stats?.size > 0 ? (noResultsMessage | translate) : (noDataMessage | translate)\"\n [subtitle]=\"stats?.size > 0 ? (noResultsSubtitle | translate) : (noDataSubtitle | translate)\"\n *emptyStateContext=\"let stats\"\n [horizontal]=\"stats?.size > 0\"\n ></c8y-ui-empty-state>\n\n <c8y-column name=\"name\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <a\n title=\"{{ context.value }}\"\n [routerLink]=\"['topic', context.item.id]\"\n >\n {{ context.value }}\n </a>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"msgRateIn\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value | number }}\">\n {{ context.value | number }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"msgRateOut\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value | number }}\">\n {{ context.value | number }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"subscribers\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <a\n title=\"{{ context.value | number }}\"\n [routerLink]=\"['topic', context.item.id, 'subscribers']\"\n >\n {{ context.value | number }}\n </a>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"backlogSize\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value | bytes: 2 : true }}\">\n {{ context.value | bytes: 2 }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"backlogUsagePercentage\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value / 100 | percent: '1.0-2' }}\">\n {{ context.value / 100 | percent: '1.0-2' }}\n </span>\n </ng-container>\n </c8y-column>\n </c8y-data-grid>\n</div>\n", dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: HeaderModule }, { kind: "component", type: i1.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "ngmodule", type: DataGridModule }, { kind: "directive", type: i1.CellRendererDefDirective, selector: "[c8yCellRendererDef]" }, { kind: "directive", type: i1.ColumnDirective, selector: "c8y-column", inputs: ["name"] }, { kind: "component", type: i1.DataGridComponent, selector: "c8y-data-grid", inputs: ["title", "loadMoreItemsLabel", "loadingItemsLabel", "showSearch", "refresh", "columns", "rows", "pagination", "infiniteScroll", "serverSideDataCallback", "selectable", "singleSelection", "selectionPrimaryKey", "displayOptions", "actionControls", "bulkActionControls", "headerActionControls", "searchText", "configureColumnsEnabled", "showCounterWarning", "activeClassName", "expandableRows", "hideReload"], outputs: ["rowMouseOver", "rowMouseLeave", "rowClick", "onConfigChange", "onBeforeFilter", "onBeforeSearch", "onFilter", "itemsSelect", "onReload", "onAddCustomColumn", "onRemoveCustomColumn", "onColumnFilterReset", "onSort", "onPageSizeChange", "onColumnReordered", "onColumnVisibilityChange"] }, { kind: "pipe", type: DecimalPipe, name: "number" }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: BacklogQuotaLimitPipe, name: "backlogQuotaLimit" }, { kind: "component", type: UsageComponent, selector: "app-usage", inputs: ["count", "limit", "percentage"] }, { kind: "pipe", type: BytesPipe, name: "bytes" }, { kind: "pipe", type: TimeToLivePipe, name: "timeToLive" }, { kind: "ngmodule", type: BreadcrumbModule }, { kind: "component", type: i1.BreadcrumbComponent, selector: "c8y-breadcrumb" }, { kind: "component", type: i1.BreadcrumbItemComponent, selector: "c8y-breadcrumb-item", inputs: ["icon", "translate", "label", "path", "injector"] }, { kind: "component", type: LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: PercentPipe, name: "percent" }, { kind: "component", type: EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: EmptyStateContextDirective, selector: "[emptyStateContext]" }, { kind: "pipe", type: AsyncPipe, name: "async" }] }); }
55
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TopicListViewComponent, isStandalone: true, selector: "app-topic-list-view", ngImport: i0, template: "<c8y-title>{{ namespaceLabel$ | async }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'monitoring'\"\n [label]=\"'Monitoring' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [label]=\"'Messaging service' | translate\"\n [path]=\"'/monitoring/messaging-service'\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"namespaceLabel$ | async\"></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <a\n class=\"btn btn-link\"\n title=\"{{ 'Reload' | translate }}\"\n (click)=\"refresh.emit()\"\n >\n <i\n c8yIcon=\"refresh\"\n [ngClass]=\"{ 'icon-spin': loading$ | async }\"\n ></i>\n {{ 'Reload' | translate }}\n </a>\n</c8y-action-bar-item>\n\n<div class=\"card content-fullpage d-flex d-col\">\n <div class=\"bg-level-1 separator-bottom flex-no-shrink\">\n <div\n class=\"card-block\"\n style=\"min-height: 172px\"\n >\n <div\n class=\"col-md-4 m-b-24 col-xs-12 d-flex p-t-24 gap-16 text-default a-i-center a-s-stretch\"\n >\n <div class=\"text-center d-col\">\n <i\n class=\"m-b-8 icon-40 c8y-icon-duocolor\"\n [c8yIcon]=\"icon$ | async\"\n ></i>\n <span class=\"tag tag--info\">{{ 'Service' | translate }}</span>\n </div>\n <span class=\"h4 text-break-all\">{{ namespaceLabel$ | async }}</span>\n </div>\n <div class=\"col-md-4\">\n <fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend>\n {{ 'Service usage/limits' | translate }}\n </legend>\n\n <ng-container *ngIf=\"loading$ | async; else serviceUsageLimits\">\n <c8y-loading></c8y-loading>\n </ng-container>\n\n <ng-template #serviceUsageLimits>\n <ng-container *ngIf=\"(namespaceDetails$ | async)?.namespace as namespace\">\n <ul class=\"list-unstyled small animated fadeIn\">\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">{{ 'Topics' | translate }}</label>\n <ng-container *ngIf=\"namespace?.topics?.limit !== 0\">\n <app-usage\n [count]=\"namespace?.topics?.count\"\n [limit]=\"namespace?.topics?.limit\"\n ></app-usage>\n <span class=\"m-l-16\">\n {{ namespace?.topics?.count | number }} /\n {{ namespace?.topics?.limit | backlogQuotaLimit }}\n </span>\n </ng-container>\n <ng-container *ngIf=\"namespace?.topics?.limit === 0\">\n <span class=\"m-l-16\">{{ namespace?.topics?.count | number }}</span>\n </ng-container>\n </li>\n\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">{{ 'Subscribers' | translate }}</label>\n <span class=\"m-l-16\">\n {{ namespace?.subscribers?.count | number }}\n </span>\n </li>\n\n <li class=\"p-t-4 p-b-4 d-flex text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">{{ 'Publishers' | translate }}</label>\n <span class=\"m-l-16\">\n {{ namespace?.publishers?.count | number }}\n </span>\n </li>\n </ul>\n </ng-container>\n </ng-template>\n </fieldset>\n </div>\n <div class=\"col-md-4\">\n <fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend>{{ 'Service message backlog limits' | translate }}</legend>\n\n <ng-container *ngIf=\"loading$ | async; else serviceMessageBacklogLimits\">\n <c8y-loading></c8y-loading>\n </ng-container>\n\n <ng-template #serviceMessageBacklogLimits>\n <ng-container *ngIf=\"(namespaceDetails$ | async)?.policies as policies\">\n <ul class=\"list-unstyled small animated fadeIn\">\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">\n {{ 'Backlog quota (per topic)' | translate }}\n </label>\n <span\n title=\"{{\n policies?.backlogQuota?.limit > 0\n ? (policies.backlogQuota.limit | bytes: 0 : true)\n : '-'\n }}\"\n >\n {{\n policies?.backlogQuota?.limit > 0\n ? (policies.backlogQuota.limit | bytes: 0)\n : '-'\n }}\n </span>\n </li>\n\n <li class=\"p-t-4 p-b-4 d-flex text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">\n {{ 'Backlog time to live (TTL)' | translate }}\n </label>\n <span>{{ policies?.messageTTL | timeToLive }}</span>\n </li>\n </ul>\n </ng-container>\n </ng-template>\n </fieldset>\n </div>\n </div>\n </div>\n\n <c8y-data-grid\n class=\"d-contents\"\n [title]=\"tableTitle | translate\"\n [loadingItemsLabel]=\"loadingItemsLabel | translate\"\n [loadMoreItemsLabel]=\"loadMoreItemsLabel | translate\"\n [columns]=\"columns\"\n [pagination]=\"pagination\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n [refresh]=\"refresh\"\n [hideReload]=\"true\"\n >\n <c8y-ui-empty-state\n [icon]=\"stats?.size > 0 ? 'search' : 'day-view'\"\n [title]=\"stats?.size > 0 ? (noResultsMessage | translate) : (noDataMessage | translate)\"\n [subtitle]=\"stats?.size > 0 ? (noResultsSubtitle | translate) : (noDataSubtitle | translate)\"\n *emptyStateContext=\"let stats\"\n [horizontal]=\"stats?.size > 0\"\n ></c8y-ui-empty-state>\n\n <c8y-column name=\"name\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <a\n title=\"{{ context.value }}\"\n [routerLink]=\"['topic', context.item.id]\"\n >\n {{ context.value }}\n </a>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"msgRateIn\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value | number }}\">\n {{ context.value | number }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"msgRateOut\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value | number }}\">\n {{ context.value | number }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"subscribers\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <a\n title=\"{{ context.value | number }}\"\n [routerLink]=\"['topic', context.item.id, 'subscribers']\"\n >\n {{ context.value | number }}\n </a>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"backlogSize\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value | bytes: 2 : true }}\">\n {{ context.value | bytes: 2 }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"backlogUsagePercentage\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value / 100 | percent: '1.0-2' }}\">\n {{ context.value / 100 | percent: '1.0-2' }}\n </span>\n </ng-container>\n </c8y-column>\n </c8y-data-grid>\n</div>\n", dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: HeaderModule }, { kind: "component", type: i1.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "ngmodule", type: DataGridModule }, { kind: "directive", type: i1.CellRendererDefDirective, selector: "[c8yCellRendererDef]" }, { kind: "directive", type: i1.ColumnDirective, selector: "c8y-column", inputs: ["name"] }, { kind: "component", type: i1.DataGridComponent, selector: "c8y-data-grid", inputs: ["title", "loadMoreItemsLabel", "loadingItemsLabel", "showSearch", "refresh", "columns", "rows", "pagination", "childNodePagination", "infiniteScroll", "serverSideDataCallback", "selectable", "singleSelection", "selectionPrimaryKey", "displayOptions", "actionControls", "bulkActionControls", "headerActionControls", "searchText", "configureColumnsEnabled", "showCounterWarning", "activeClassName", "expandableRows", "treeGrid", "hideReload", "childNodesProperty", "parentNodeLabelProperty"], outputs: ["rowMouseOver", "rowMouseLeave", "rowClick", "onConfigChange", "onBeforeFilter", "onBeforeSearch", "onFilter", "itemsSelect", "onReload", "onAddCustomColumn", "onRemoveCustomColumn", "onColumnFilterReset", "onSort", "onPageSizeChange", "onColumnReordered", "onColumnVisibilityChange"] }, { kind: "pipe", type: DecimalPipe, name: "number" }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: BacklogQuotaLimitPipe, name: "backlogQuotaLimit" }, { kind: "component", type: UsageComponent, selector: "app-usage", inputs: ["count", "limit", "percentage"] }, { kind: "pipe", type: BytesPipe, name: "bytes" }, { kind: "pipe", type: TimeToLivePipe, name: "timeToLive" }, { kind: "ngmodule", type: BreadcrumbModule }, { kind: "component", type: i1.BreadcrumbComponent, selector: "c8y-breadcrumb" }, { kind: "component", type: i1.BreadcrumbItemComponent, selector: "c8y-breadcrumb-item", inputs: ["icon", "translate", "label", "path", "injector"] }, { kind: "component", type: LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: PercentPipe, name: "percent" }, { kind: "component", type: EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: EmptyStateContextDirective, selector: "[emptyStateContext]" }, { kind: "pipe", type: AsyncPipe, name: "async" }] }); }
56
56
  }
57
57
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TopicListViewComponent, decorators: [{
58
58
  type: Component,
@@ -78,4 +78,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
78
78
  AsyncPipe
79
79
  ], selector: 'app-topic-list-view', standalone: true, template: "<c8y-title>{{ namespaceLabel$ | async }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'monitoring'\"\n [label]=\"'Monitoring' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [label]=\"'Messaging service' | translate\"\n [path]=\"'/monitoring/messaging-service'\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"namespaceLabel$ | async\"></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <a\n class=\"btn btn-link\"\n title=\"{{ 'Reload' | translate }}\"\n (click)=\"refresh.emit()\"\n >\n <i\n c8yIcon=\"refresh\"\n [ngClass]=\"{ 'icon-spin': loading$ | async }\"\n ></i>\n {{ 'Reload' | translate }}\n </a>\n</c8y-action-bar-item>\n\n<div class=\"card content-fullpage d-flex d-col\">\n <div class=\"bg-level-1 separator-bottom flex-no-shrink\">\n <div\n class=\"card-block\"\n style=\"min-height: 172px\"\n >\n <div\n class=\"col-md-4 m-b-24 col-xs-12 d-flex p-t-24 gap-16 text-default a-i-center a-s-stretch\"\n >\n <div class=\"text-center d-col\">\n <i\n class=\"m-b-8 icon-40 c8y-icon-duocolor\"\n [c8yIcon]=\"icon$ | async\"\n ></i>\n <span class=\"tag tag--info\">{{ 'Service' | translate }}</span>\n </div>\n <span class=\"h4 text-break-all\">{{ namespaceLabel$ | async }}</span>\n </div>\n <div class=\"col-md-4\">\n <fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend>\n {{ 'Service usage/limits' | translate }}\n </legend>\n\n <ng-container *ngIf=\"loading$ | async; else serviceUsageLimits\">\n <c8y-loading></c8y-loading>\n </ng-container>\n\n <ng-template #serviceUsageLimits>\n <ng-container *ngIf=\"(namespaceDetails$ | async)?.namespace as namespace\">\n <ul class=\"list-unstyled small animated fadeIn\">\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">{{ 'Topics' | translate }}</label>\n <ng-container *ngIf=\"namespace?.topics?.limit !== 0\">\n <app-usage\n [count]=\"namespace?.topics?.count\"\n [limit]=\"namespace?.topics?.limit\"\n ></app-usage>\n <span class=\"m-l-16\">\n {{ namespace?.topics?.count | number }} /\n {{ namespace?.topics?.limit | backlogQuotaLimit }}\n </span>\n </ng-container>\n <ng-container *ngIf=\"namespace?.topics?.limit === 0\">\n <span class=\"m-l-16\">{{ namespace?.topics?.count | number }}</span>\n </ng-container>\n </li>\n\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">{{ 'Subscribers' | translate }}</label>\n <span class=\"m-l-16\">\n {{ namespace?.subscribers?.count | number }}\n </span>\n </li>\n\n <li class=\"p-t-4 p-b-4 d-flex text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">{{ 'Publishers' | translate }}</label>\n <span class=\"m-l-16\">\n {{ namespace?.publishers?.count | number }}\n </span>\n </li>\n </ul>\n </ng-container>\n </ng-template>\n </fieldset>\n </div>\n <div class=\"col-md-4\">\n <fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend>{{ 'Service message backlog limits' | translate }}</legend>\n\n <ng-container *ngIf=\"loading$ | async; else serviceMessageBacklogLimits\">\n <c8y-loading></c8y-loading>\n </ng-container>\n\n <ng-template #serviceMessageBacklogLimits>\n <ng-container *ngIf=\"(namespaceDetails$ | async)?.policies as policies\">\n <ul class=\"list-unstyled small animated fadeIn\">\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">\n {{ 'Backlog quota (per topic)' | translate }}\n </label>\n <span\n title=\"{{\n policies?.backlogQuota?.limit > 0\n ? (policies.backlogQuota.limit | bytes: 0 : true)\n : '-'\n }}\"\n >\n {{\n policies?.backlogQuota?.limit > 0\n ? (policies.backlogQuota.limit | bytes: 0)\n : '-'\n }}\n </span>\n </li>\n\n <li class=\"p-t-4 p-b-4 d-flex text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">\n {{ 'Backlog time to live (TTL)' | translate }}\n </label>\n <span>{{ policies?.messageTTL | timeToLive }}</span>\n </li>\n </ul>\n </ng-container>\n </ng-template>\n </fieldset>\n </div>\n </div>\n </div>\n\n <c8y-data-grid\n class=\"d-contents\"\n [title]=\"tableTitle | translate\"\n [loadingItemsLabel]=\"loadingItemsLabel | translate\"\n [loadMoreItemsLabel]=\"loadMoreItemsLabel | translate\"\n [columns]=\"columns\"\n [pagination]=\"pagination\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n [refresh]=\"refresh\"\n [hideReload]=\"true\"\n >\n <c8y-ui-empty-state\n [icon]=\"stats?.size > 0 ? 'search' : 'day-view'\"\n [title]=\"stats?.size > 0 ? (noResultsMessage | translate) : (noDataMessage | translate)\"\n [subtitle]=\"stats?.size > 0 ? (noResultsSubtitle | translate) : (noDataSubtitle | translate)\"\n *emptyStateContext=\"let stats\"\n [horizontal]=\"stats?.size > 0\"\n ></c8y-ui-empty-state>\n\n <c8y-column name=\"name\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <a\n title=\"{{ context.value }}\"\n [routerLink]=\"['topic', context.item.id]\"\n >\n {{ context.value }}\n </a>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"msgRateIn\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value | number }}\">\n {{ context.value | number }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"msgRateOut\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value | number }}\">\n {{ context.value | number }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"subscribers\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <a\n title=\"{{ context.value | number }}\"\n [routerLink]=\"['topic', context.item.id, 'subscribers']\"\n >\n {{ context.value | number }}\n </a>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"backlogSize\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value | bytes: 2 : true }}\">\n {{ context.value | bytes: 2 }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"backlogUsagePercentage\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value / 100 | percent: '1.0-2' }}\">\n {{ context.value / 100 | percent: '1.0-2' }}\n </span>\n </ng-container>\n </c8y-column>\n </c8y-data-grid>\n</div>\n" }]
80
80
  }] });
81
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9waWMtbGlzdC12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL21lc3NhZ2luZy1tYW5hZ2VtZW50L21lc3NhZ2luZy90b3BpYy90b3BpYy1saXN0LXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbWVzc2FnaW5nLW1hbmFnZW1lbnQvbWVzc2FnaW5nL3RvcGljL3RvcGljLWxpc3Qtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzdELE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsZUFBZSxFQUNmLGdCQUFnQixFQUNoQixTQUFTLEVBQ1QsZ0JBQWdCLEVBRWhCLGNBQWMsRUFFZCxtQkFBbUIsRUFDbkIsMEJBQTBCLEVBQzFCLE9BQU8sRUFDUCxZQUFZLEVBQ1osYUFBYSxFQUNiLGdCQUFnQixFQUlqQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDN0YsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDN0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0s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SixzQkFBc0IsMEpBQ3RCLE9BQU8sb0ZBQ1AsYUFBYSxzRUFDYixXQUFXLGdEQUNYLG1CQUFtQixvSEFDbkIsMEJBQTBCLDJEQUMxQixTQUFTOzs0RkFNQSxzQkFBc0I7a0JBMUJsQyxTQUFTOzhCQUNDO3dCQUNQLFVBQVU7d0JBQ1YsWUFBWTt3QkFDWixjQUFjO3dCQUNkLFdBQVc7d0JBQ1gsZ0JBQWdCO3dCQUNoQixxQkFBcUI7d0JBQ3JCLGNBQWM7d0JBQ2QsU0FBUzt3QkFDVCxjQUFjO3dCQUNkLGdCQUFnQjt3QkFDaEIsZ0JBQWdCO3dCQUNoQixJQUFJO3dCQUNKLHNCQUFzQjt3QkFDdEIsT0FBTzt3QkFDUCxhQUFhO3dCQUNiLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQiwwQkFBMEI7d0JBQzFCLFNBQVM7cUJBQ1YsWUFDUyxxQkFBcUIsY0FDbkIsSUFBSSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRGVzdHJveVJlZiwgRXZlbnRFbWl0dGVyLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXJMaW5rIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7XG4gIEFjdGlvbkJhckl0ZW1Db21wb25lbnQsXG4gIEFwcFN0YXRlU2VydmljZSxcbiAgQnJlYWRjcnVtYk1vZHVsZSxcbiAgQnl0ZXNQaXBlLFxuICBDOHlUcmFuc2xhdGVQaXBlLFxuICBDb2x1bW4sXG4gIERhdGFHcmlkTW9kdWxlLFxuICBEYXRhU291cmNlTW9kaWZpZXIsXG4gIEVtcHR5U3RhdGVDb21wb25lbnQsXG4gIEVtcHR5U3RhdGVDb250ZXh0RGlyZWN0aXZlLFxuICBnZXR0ZXh0LFxuICBIZWFkZXJNb2R1bGUsXG4gIEljb25EaXJlY3RpdmUsXG4gIExvYWRpbmdDb21wb25lbnQsXG4gIFBhZ2luYXRpb24sXG4gIFNlcnZlclNpZGVEYXRhQ2FsbGJhY2ssXG4gIFNlcnZlclNpZGVEYXRhUmVzdWx0XG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgQXN5bmNQaXBlLCBEZWNpbWFsUGlwZSwgTmdDbGFzcywgTmdJZiwgUGVyY2VudFBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTWVzc2FnaW5nTmFtZXNwYWNlc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9hcGkvc2VydmljZXMvbWVzc2FnaW5nLW5hbWVzcGFjZXMuc2VydmljZSc7XG5pbXBvcnQgeyBCYWNrbG9nUXVvdGFMaW1pdFBpcGUgfSBmcm9tICcuLi8uLi91dGlscy9iYWNrbG9nLXF1b3RhLWxpbWl0LnBpcGUnO1xuaW1wb3J0IHsgVXNhZ2VDb21wb25lbnQgfSBmcm9tICcuLi9zaGFyZWQvdXNhZ2UvdXNhZ2UuY29tcG9uZW50JztcbmltcG9ydCB7IFRpbWVUb0xpdmVQaXBlIH0gZnJvbSAnLi4vLi4vdXRpbHMvdGltZS10by1saXZlLnBpcGUnO1xuaW1wb3J0IHsgTkFNRVNQQUNFX1BST1BTIH0gZnJvbSAnLi4vLi4vdXRpbHMvbmFtZXNwYWNlLXByb3BzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFRvcGljc0RhdGFHcmlkU2VydmljZSB9IGZyb20gJy4vdG9waWNzLWRhdGEtZ3JpZC5zZXJ2aWNlJztcbmltcG9ydCB7IG1hcCwgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBmaXJzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuXG5AQ29tcG9uZW50KHtcbiAgaW1wb3J0czogW1xuICAgIFJvdXRlckxpbmssXG4gICAgSGVhZGVyTW9kdWxlLFxuICAgIERhdGFHcmlkTW9kdWxlLFxuICAgIERlY2ltYWxQaXBlLFxuICAgIEM4eVRyYW5zbGF0ZVBpcGUsXG4gICAgQmFja2xvZ1F1b3RhTGltaXRQaXBlLFxuICAgIFVzYWdlQ29tcG9uZW50LFxuICAgIEJ5dGVzUGlwZSxcbiAgICBUaW1lVG9MaXZlUGlwZSxcbiAgICBCcmVhZGNydW1iTW9kdWxlLFxuICAgIExvYWRpbmdDb21wb25lbnQsXG4gICAgTmdJZixcbiAgICBBY3Rpb25CYXJJdGVtQ29tcG9uZW50LFxuICAgIE5nQ2xhc3MsXG4gICAgSWNvbkRpcmVjdGl2ZSxcbiAgICBQZXJjZW50UGlwZSxcbiAgICBFbXB0eVN0YXRlQ29tcG9uZW50LFxuICAgIEVtcHR5U3RhdGVDb250ZXh0RGlyZWN0aXZlLFxuICAgIEFzeW5jUGlwZVxuICBdLFxuICBzZWxlY3RvcjogJ2FwcC10b3BpYy1saXN0LXZpZXcnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICB0ZW1wbGF0ZVVybDogJy4vdG9waWMtbGlzdC12aWV3LmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBUb3BpY0xpc3RWaWV3Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgYXBwU3RhdGUgPSBpbmplY3QoQXBwU3RhdGVTZXJ2aWNlKTtcbiAgbmFtZXNwYWNlc1NlcnZpY2UgPSBpbmplY3QoTWVzc2FnaW5nTmFtZXNwYWNlc1NlcnZpY2UpO1xuICB0b3BpY3NEYXRhR3JpZFNlcnZpY2UgPSBpbmplY3QoVG9waWNzRGF0YUdyaWRTZXJ2aWNlKTtcbiAgdHJhbnNsYXRlU2VydmljZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcbiAgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICBsb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWZyZXNoID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIHRlbmFudElkJCA9IHRoaXMuYXBwU3RhdGUuY3VycmVudFRlbmFudC5waXBlKG1hcCh0ZW5hbnQgPT4gdGVuYW50Lm5hbWUpKTtcbiAgbmFtZXNwYWNlSWQkID0gdGhpcy5yb3V0ZS5wYXJhbXMucGlwZShtYXAocGFyYW1zID0+IHBhcmFtc1snbmFtZXNwYWNlJ10gYXMgc3RyaW5nKSk7XG4gIG5hbWVzcGFjZUxhYmVsJCA9IHRoaXMubmFtZXNwYWNlSWQkLnBpcGUoXG4gICAgbWFwKG5hbWVzcGFjZUlkID0+IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KE5BTUVTUEFDRV9QUk9QU1tuYW1lc3BhY2VJZF0ubGFiZWwpKVxuICApO1xuICBpY29uJCA9IHRoaXMubmFtZXNwYWNlSWQkLnBpcGUobWFwKG5hbWVzcGFjZUlkID0+IE5BTUVTUEFDRV9QUk9QU1tuYW1lc3BhY2VJZF0uaWNvbikpO1xuXG4gIG5hbWVzcGFjZURldGFpbHMkID0gY29tYmluZUxhdGVzdChbdGhpcy50ZW5hbnRJZCQsIHRoaXMubmFtZXNwYWNlSWQkLCB0aGlzLnJlZnJlc2hdKS5waXBlKFxuICAgIHRhcCgoKSA9PiB0aGlzLmxvYWRpbmckLm5leHQodHJ1ZSkpLFxuICAgIHN3aXRjaE1hcCgoW3RlbmFudElkLCBuYW1lc3BhY2VJZF0pID0+XG4gICAgICB0aGlzLm5hbWVzcGFjZXNTZXJ2aWNlLmdldE5hbWVzcGFjZURldGFpbHModGVuYW50SWQsIG5hbWVzcGFjZUlkKVxuICAgICksXG4gICAgdGFwKCgpID0+IHRoaXMubG9hZGluZyQubmV4dChmYWxzZSkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgdGFibGVUaXRsZSA9IGdldHRleHQoJ1RvcGljcycpO1xuICBsb2FkaW5nSXRlbXNMYWJlbCA9IGdldHRleHQoJ0xvYWRpbmcgdG9waWNzLi4uJyk7XG4gIGxvYWRNb3JlSXRlbXNMYWJlbCA9IGdldHRleHQoJ0xvYWQgbW9yZSB0b3BpY3MnKTtcbiAgbm9SZXN1bHRzTWVzc2FnZSA9IGdldHRleHQoJ05vIG1hdGNoaW5nIHRvcGljcyBmb3VuZC4nKTtcbiAgbm9SZXN1bHRzU3VidGl0bGUgPSBnZXR0ZXh0KCdSZWZpbmUgeW91ciBzZWFyY2ggdGVybXMgb3IgY2hlY2sgeW91ciBzcGVsbGluZy4nKTtcbiAgbm9EYXRhTWVzc2FnZSA9IGdldHRleHQoJ05vIHRvcGljcyB0byBkaXNwbGF5LicpO1xuICBub0RhdGFTdWJ0aXRsZSA9IGdldHRleHQoJ0NyZWF0ZSBuZXcgdG9waWNzIHRvIG1vbml0b3IgdGhlbSBoZXJlLicpO1xuXG4gIGNvbHVtbnM6IENvbHVtbltdID0gdGhpcy50b3BpY3NEYXRhR3JpZFNlcnZpY2UuZ2V0Q29sdW1ucygpO1xuICBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uID0ge1xuICAgIHBhZ2VTaXplOiAyMCxcbiAgICBjdXJyZW50UGFnZTogMVxuICB9O1xuXG4gIHNlcnZlclNpZGVEYXRhQ2FsbGJhY2s6IFNlcnZlclNpZGVEYXRhQ2FsbGJhY2sgPSB0aGlzLm9uRGF0YVNvdXJjZU1vZGlmaWVyLmJpbmQodGhpcyk7XG4gIGFzeW5jIG9uRGF0YVNvdXJjZU1vZGlmaWVyKFxuICAgIGRhdGFTb3VyY2VNb2RpZmllcjogRGF0YVNvdXJjZU1vZGlmaWVyXG4gICk6IFByb21pc2U8U2VydmVyU2lkZURhdGFSZXN1bHQ+IHtcbiAgICByZXR1cm4gZmlyc3RWYWx1ZUZyb20oXG4gICAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLnRlbmFudElkJCwgdGhpcy5uYW1lc3BhY2VJZCRdKS5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKFt0ZW5hbnRJZCwgbmFtZXNwYWNlSWRdKSA9PlxuICAgICAgICAgIHRoaXMudG9waWNzRGF0YUdyaWRTZXJ2aWNlLmdldFNlcnZlclNpZGVEYXRhKHRlbmFudElkLCBuYW1lc3BhY2VJZCwgZGF0YVNvdXJjZU1vZGlmaWVyKVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLnJvdXRlLnBhcmFtc1xuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMucmVmcmVzaC5lbWl0KCkpO1xuICB9XG59XG4iLCI8Yzh5LXRpdGxlPnt7IG5hbWVzcGFjZUxhYmVsJCB8IGFzeW5jIH19PC9jOHktdGl0bGU+XG5cbjxjOHktYnJlYWRjcnVtYj5cbiAgPGM4eS1icmVhZGNydW1iLWl0ZW1cbiAgICBbaWNvbl09XCInbW9uaXRvcmluZydcIlxuICAgIFtsYWJlbF09XCInTW9uaXRvcmluZycgfCB0cmFuc2xhdGVcIlxuICA+PC9jOHktYnJlYWRjcnVtYi1pdGVtPlxuICA8Yzh5LWJyZWFkY3J1bWItaXRlbVxuICAgIFtsYWJlbF09XCInTWVzc2FnaW5nIHNlcnZpY2UnIHwgdHJhbnNsYXRlXCJcbiAgICBbcGF0aF09XCInL21vbml0b3JpbmcvbWVzc2FnaW5nLXNlcnZpY2UnXCJcbiAgPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbiAgPGM4eS1icmVhZGNydW1iLWl0ZW0gW2xhYmVsXT1cIm5hbWVzcGFjZUxhYmVsJCB8IGFzeW5jXCI+PC9jOHktYnJlYWRjcnVtYi1pdGVtPlxuPC9jOHktYnJlYWRjcnVtYj5cblxuPGM4eS1hY3Rpb24tYmFyLWl0ZW0gW3BsYWNlbWVudF09XCIncmlnaHQnXCI+XG4gIDxhXG4gICAgY2xhc3M9XCJidG4gYnRuLWxpbmtcIlxuICAgIHRpdGxlPVwie3sgJ1JlbG9hZCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgIChjbGljayk9XCJyZWZyZXNoLmVtaXQoKVwiXG4gID5cbiAgICA8aVxuICAgICAgYzh5SWNvbj1cInJlZnJlc2hcIlxuICAgICAgW25nQ2xhc3NdPVwieyAnaWNvbi1zcGluJzogbG9hZGluZyQgfCBhc3luYyB9XCJcbiAgICA+PC9pPlxuICAgIHt7ICdSZWxvYWQnIHwgdHJhbnNsYXRlIH19XG4gIDwvYT5cbjwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuPGRpdiBjbGFzcz1cImNhcmQgY29udGVudC1mdWxscGFnZSBkLWZsZXggZC1jb2xcIj5cbiAgPGRpdiBjbGFzcz1cImJnLWxldmVsLTEgc2VwYXJhdG9yLWJvdHRvbSBmbGV4LW5vLXNocmlua1wiPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiY2FyZC1ibG9ja1wiXG4gICAgICBzdHlsZT1cIm1pbi1oZWlnaHQ6IDE3MnB4XCJcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiY29sLW1kLTQgbS1iLTI0IGNvbC14cy0xMiBkLWZsZXggcC10LTI0IGdhcC0xNiB0ZXh0LWRlZmF1bHQgYS1pLWNlbnRlciBhLXMtc3RyZXRjaFwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBkLWNvbFwiPlxuICAgICAgICAgIDxpXG4gICAgICAgICAgICBjbGFzcz1cIm0tYi04IGljb24tNDAgYzh5LWljb24tZHVvY29sb3JcIlxuICAgICAgICAgICAgW2M4eUljb25dPVwiaWNvbiQgfCBhc3luY1wiXG4gICAgICAgICAgPjwvaT5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRhZyB0YWctLWluZm9cIj57eyAnU2VydmljZScgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c3BhbiBjbGFzcz1cImg0IHRleHQtYnJlYWstYWxsXCI+e3sgbmFtZXNwYWNlTGFiZWwkIHwgYXN5bmMgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxuICAgICAgICA8ZmllbGRzZXQgY2xhc3M9XCJjOHktZmllbGRzZXQgYzh5LWZpZWxkc2V0LS1sZ1wiPlxuICAgICAgICAgIDxsZWdlbmQ+XG4gICAgICAgICAgICB7eyAnU2VydmljZSB1c2FnZS9saW1pdHMnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9sZWdlbmQ+XG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibG9hZGluZyQgfCBhc3luYzsgZWxzZSBzZXJ2aWNlVXNhZ2VMaW1pdHNcIj5cbiAgICAgICAgICAgIDxjOHktbG9hZGluZz48L2M4eS1sb2FkaW5nPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNzZXJ2aWNlVXNhZ2VMaW1pdHM+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKG5hbWVzcGFjZURldGFpbHMkIHwgYXN5bmMpPy5uYW1lc3BhY2UgYXMgbmFtZXNwYWNlXCI+XG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtdW5zdHlsZWQgc21hbGwgYW5pbWF0ZWQgZmFkZUluXCI+XG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicC10LTQgcC1iLTQgZC1mbGV4IHNlcGFyYXRvci1ib3R0b20gdGV4dC1ub3dyYXBcIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInNtYWxsIG0tYi0wIG0tci1hdXRvXCI+e3sgJ1RvcGljcycgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5hbWVzcGFjZT8udG9waWNzPy5saW1pdCAhPT0gMFwiPlxuICAgICAgICAgICAgICAgICAgICA8YXBwLXVzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgW2NvdW50XT1cIm5hbWVzcGFjZT8udG9waWNzPy5jb3VudFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2xpbWl0XT1cIm5hbWVzcGFjZT8udG9waWNzPy5saW1pdFwiXG4gICAgICAgICAgICAgICAgICAgID48L2FwcC11c2FnZT5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtLWwtMTZcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBuYW1lc3BhY2U/LnRvcGljcz8uY291bnQgfCBudW1iZXIgfX0gL1xuICAgICAgICAgICAgICAgICAgICAgIHt7IG5hbWVzcGFjZT8udG9waWNzPy5saW1pdCB8IGJhY2tsb2dRdW90YUxpbWl0IH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5hbWVzcGFjZT8udG9waWNzPy5saW1pdCA9PT0gMFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm0tbC0xNlwiPnt7IG5hbWVzcGFjZT8udG9waWNzPy5jb3VudCB8IG51bWJlciB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbGk+XG5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJwLXQtNCBwLWItNCBkLWZsZXggc2VwYXJhdG9yLWJvdHRvbSB0ZXh0LW5vd3JhcFwiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwic21hbGwgbS1iLTAgbS1yLWF1dG9cIj57eyAnU3Vic2NyaWJlcnMnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibS1sLTE2XCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IG5hbWVzcGFjZT8uc3Vic2NyaWJlcnM/LmNvdW50IHwgbnVtYmVyIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9saT5cblxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInAtdC00IHAtYi00IGQtZmxleCB0ZXh0LW5vd3JhcFwiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwic21hbGwgbS1iLTAgbS1yLWF1dG9cIj57eyAnUHVibGlzaGVycycgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtLWwtMTZcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgbmFtZXNwYWNlPy5wdWJsaXNoZXJzPy5jb3VudCB8IG51bWJlciB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgICAgPGZpZWxkc2V0IGNsYXNzPVwiYzh5LWZpZWxkc2V0IGM4eS1maWVsZHNldC0tbGdcIj5cbiAgICAgICAgICA8bGVnZW5kPnt7ICdTZXJ2aWNlIG1lc3NhZ2UgYmFja2xvZyBsaW1pdHMnIHwgdHJhbnNsYXRlIH19PC9sZWdlbmQ+XG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibG9hZGluZyQgfCBhc3luYzsgZWxzZSBzZXJ2aWNlTWVzc2FnZUJhY2tsb2dMaW1pdHNcIj5cbiAgICAgICAgICAgIDxjOHktbG9hZGluZz48L2M4eS1sb2FkaW5nPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNzZXJ2aWNlTWVzc2FnZUJhY2tsb2dMaW1pdHM+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKG5hbWVzcGFjZURldGFpbHMkIHwgYXN5bmMpPy5wb2xpY2llcyBhcyBwb2xpY2llc1wiPlxuICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LXVuc3R5bGVkIHNtYWxsIGFuaW1hdGVkIGZhZGVJblwiPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInAtdC00IHAtYi00IGQtZmxleCBzZXBhcmF0b3ItYm90dG9tIHRleHQtbm93cmFwXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzbWFsbCBtLWItMCBtLXItYXV0b1wiPlxuICAgICAgICAgICAgICAgICAgICB7eyAnQmFja2xvZyBxdW90YSAocGVyIHRvcGljKScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICB0aXRsZT1cInt7XG4gICAgICAgICAgICAgICAgICAgICAgcG9saWNpZXM/LmJhY2tsb2dRdW90YT8ubGltaXQgPiAwXG4gICAgICAgICAgICAgICAgICAgICAgICA/IChwb2xpY2llcy5iYWNrbG9nUXVvdGEubGltaXQgfCBieXRlczogMCA6IHRydWUpXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICctJ1xuICAgICAgICAgICAgICAgICAgICB9fVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgcG9saWNpZXM/LmJhY2tsb2dRdW90YT8ubGltaXQgPiAwXG4gICAgICAgICAgICAgICAgICAgICAgICA/IChwb2xpY2llcy5iYWNrbG9nUXVvdGEubGltaXQgfCBieXRlczogMClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJy0nXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9saT5cblxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInAtdC00IHAtYi00IGQtZmxleCB0ZXh0LW5vd3JhcFwiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwic21hbGwgbS1iLTAgbS1yLWF1dG9cIj5cbiAgICAgICAgICAgICAgICAgICAge3sgJ0JhY2tsb2cgdGltZSB0byBsaXZlIChUVEwpJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IHBvbGljaWVzPy5tZXNzYWdlVFRMIHwgdGltZVRvTGl2ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9maWVsZHNldD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8Yzh5LWRhdGEtZ3JpZFxuICAgIGNsYXNzPVwiZC1jb250ZW50c1wiXG4gICAgW3RpdGxlXT1cInRhYmxlVGl0bGUgfCB0cmFuc2xhdGVcIlxuICAgIFtsb2FkaW5nSXRlbXNMYWJlbF09XCJsb2FkaW5nSXRlbXNMYWJlbCB8IHRyYW5zbGF0ZVwiXG4gICAgW2xvYWRNb3JlSXRlbXNMYWJlbF09XCJsb2FkTW9yZUl0ZW1zTGFiZWwgfCB0cmFuc2xhdGVcIlxuICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIlxuICAgIFtwYWdpbmF0aW9uXT1cInBhZ2luYXRpb25cIlxuICAgIFtzZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrXT1cInNlcnZlclNpZGVEYXRhQ2FsbGJhY2tcIlxuICAgIFtyZWZyZXNoXT1cInJlZnJlc2hcIlxuICAgIFtoaWRlUmVsb2FkXT1cInRydWVcIlxuICA+XG4gICAgPGM4eS11aS1lbXB0eS1zdGF0ZVxuICAgICAgW2ljb25dPVwic3RhdHM/LnNpemUgPiAwID8gJ3NlYXJjaCcgOiAnZGF5LXZpZXcnXCJcbiAgICAgIFt0aXRsZV09XCJzdGF0cz8uc2l6ZSA+IDAgPyAobm9SZXN1bHRzTWVzc2FnZSB8IHRyYW5zbGF0ZSkgOiAobm9EYXRhTWVzc2FnZSB8IHRyYW5zbGF0ZSlcIlxuICAgICAgW3N1YnRpdGxlXT1cInN0YXRzPy5zaXplID4gMCA/IChub1Jlc3VsdHNTdWJ0aXRsZSB8IHRyYW5zbGF0ZSkgOiAobm9EYXRhU3VidGl0bGUgfCB0cmFuc2xhdGUpXCJcbiAgICAgICplbXB0eVN0YXRlQ29udGV4dD1cImxldCBzdGF0c1wiXG4gICAgICBbaG9yaXpvbnRhbF09XCJzdGF0cz8uc2l6ZSA+IDBcIlxuICAgID48L2M4eS11aS1lbXB0eS1zdGF0ZT5cblxuICAgIDxjOHktY29sdW1uIG5hbWU9XCJuYW1lXCI+XG4gICAgICA8bmctY29udGFpbmVyICpjOHlDZWxsUmVuZGVyZXJEZWY9XCJsZXQgY29udGV4dFwiPlxuICAgICAgICA8YVxuICAgICAgICAgIHRpdGxlPVwie3sgY29udGV4dC52YWx1ZSB9fVwiXG4gICAgICAgICAgW3JvdXRlckxpbmtdPVwiWyd0b3BpYycsIGNvbnRleHQuaXRlbS5pZF1cIlxuICAgICAgICA+XG4gICAgICAgICAge3sgY29udGV4dC52YWx1ZSB9fVxuICAgICAgICA8L2E+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2M4eS1jb2x1bW4+XG5cbiAgICA8Yzh5LWNvbHVtbiBuYW1lPVwibXNnUmF0ZUluXCI+XG4gICAgICA8bmctY29udGFpbmVyICpjOHlDZWxsUmVuZGVyZXJEZWY9XCJsZXQgY29udGV4dFwiPlxuICAgICAgICA8c3BhbiB0aXRsZT1cInt7IGNvbnRleHQudmFsdWUgfCBudW1iZXIgfX1cIj5cbiAgICAgICAgICB7eyBjb250ZXh0LnZhbHVlIHwgbnVtYmVyIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvYzh5LWNvbHVtbj5cblxuICAgIDxjOHktY29sdW1uIG5hbWU9XCJtc2dSYXRlT3V0XCI+XG4gICAgICA8bmctY29udGFpbmVyICpjOHlDZWxsUmVuZGVyZXJEZWY9XCJsZXQgY29udGV4dFwiPlxuICAgICAgICA8c3BhbiB0aXRsZT1cInt7IGNvbnRleHQudmFsdWUgfCBudW1iZXIgfX1cIj5cbiAgICAgICAgICB7eyBjb250ZXh0LnZhbHVlIHwgbnVtYmVyIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvYzh5LWNvbHVtbj5cblxuICAgIDxjOHktY29sdW1uIG5hbWU9XCJzdWJzY3JpYmVyc1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqYzh5Q2VsbFJlbmRlcmVyRGVmPVwibGV0IGNvbnRleHRcIj5cbiAgICAgICAgPGFcbiAgICAgICAgICB0aXRsZT1cInt7IGNvbnRleHQudmFsdWUgfCBudW1iZXIgfX1cIlxuICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIlsndG9waWMnLCBjb250ZXh0Lml0ZW0uaWQsICdzdWJzY3JpYmVycyddXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGNvbnRleHQudmFsdWUgfCBudW1iZXIgfX1cbiAgICAgICAgPC9hPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9jOHktY29sdW1uPlxuXG4gICAgPGM4eS1jb2x1bW4gbmFtZT1cImJhY2tsb2dTaXplXCI+XG4gICAgICA8bmctY29udGFpbmVyICpjOHlDZWxsUmVuZGVyZXJEZWY9XCJsZXQgY29udGV4dFwiPlxuICAgICAgICA8c3BhbiB0aXRsZT1cInt7IGNvbnRleHQudmFsdWUgfCBieXRlczogMiA6IHRydWUgfX1cIj5cbiAgICAgICAgICB7eyBjb250ZXh0LnZhbHVlIHwgYnl0ZXM6IDIgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9jOHktY29sdW1uPlxuXG4gICAgPGM4eS1jb2x1bW4gbmFtZT1cImJhY2tsb2dVc2FnZVBlcmNlbnRhZ2VcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKmM4eUNlbGxSZW5kZXJlckRlZj1cImxldCBjb250ZXh0XCI+XG4gICAgICAgIDxzcGFuIHRpdGxlPVwie3sgY29udGV4dC52YWx1ZSAvIDEwMCB8IHBlcmNlbnQ6ICcxLjAtMicgfX1cIj5cbiAgICAgICAgICB7eyBjb250ZXh0LnZhbHVlIC8gMTAwIHwgcGVyY2VudDogJzEuMC0yJyB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2M4eS1jb2x1bW4+XG4gIDwvYzh5LWRhdGEtZ3JpZD5cbjwvZGl2PlxuIl19
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9waWMtbGlzdC12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL21lc3NhZ2luZy1tYW5hZ2VtZW50L21lc3NhZ2luZy90b3BpYy90b3BpYy1saXN0LXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbWVzc2FnaW5nLW1hbmFnZW1lbnQvbWVzc2FnaW5nL3RvcGljL3RvcGljLWxpc3Qtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzdELE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsZUFBZSxFQUNmLGdCQUFnQixFQUNoQixTQUFTLEVBQ1QsZ0JBQWdCLEVBRWhCLGNBQWMsRUFFZCxtQkFBbUIsRUFDbkIsMEJBQTBCLEVBQzFCLE9BQU8sRUFDUCxZQUFZLEVBQ1osYUFBYSxFQUNiLGdCQUFnQixFQUlqQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDN0YsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDN0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0s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SixzQkFBc0IsMEpBQ3RCLE9BQU8sb0ZBQ1AsYUFBYSxzRUFDYixXQUFXLGdEQUNYLG1CQUFtQixvSEFDbkIsMEJBQTBCLDJEQUMxQixTQUFTOzs0RkFNQSxzQkFBc0I7a0JBMUJsQyxTQUFTOzhCQUNDO3dCQUNQLFVBQVU7d0JBQ1YsWUFBWTt3QkFDWixjQUFjO3dCQUNkLFdBQVc7d0JBQ1gsZ0JBQWdCO3dCQUNoQixxQkFBcUI7d0JBQ3JCLGNBQWM7d0JBQ2QsU0FBUzt3QkFDVCxjQUFjO3dCQUNkLGdCQUFnQjt3QkFDaEIsZ0JBQWdCO3dCQUNoQixJQUFJO3dCQUNKLHNCQUFzQjt3QkFDdEIsT0FBTzt3QkFDUCxhQUFhO3dCQUNiLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQiwwQkFBMEI7d0JBQzFCLFNBQVM7cUJBQ1YsWUFDUyxxQkFBcUIsY0FDbkIsSUFBSSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRGVzdHJveVJlZiwgRXZlbnRFbWl0dGVyLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXJMaW5rIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7XG4gIEFjdGlvbkJhckl0ZW1Db21wb25lbnQsXG4gIEFwcFN0YXRlU2VydmljZSxcbiAgQnJlYWRjcnVtYk1vZHVsZSxcbiAgQnl0ZXNQaXBlLFxuICBDOHlUcmFuc2xhdGVQaXBlLFxuICBDb2x1bW4sXG4gIERhdGFHcmlkTW9kdWxlLFxuICBEYXRhU291cmNlTW9kaWZpZXIsXG4gIEVtcHR5U3RhdGVDb21wb25lbnQsXG4gIEVtcHR5U3RhdGVDb250ZXh0RGlyZWN0aXZlLFxuICBnZXR0ZXh0LFxuICBIZWFkZXJNb2R1bGUsXG4gIEljb25EaXJlY3RpdmUsXG4gIExvYWRpbmdDb21wb25lbnQsXG4gIFBhZ2luYXRpb24sXG4gIFNlcnZlclNpZGVEYXRhQ2FsbGJhY2ssXG4gIFNlcnZlclNpZGVEYXRhUmVzdWx0XG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgQXN5bmNQaXBlLCBEZWNpbWFsUGlwZSwgTmdDbGFzcywgTmdJZiwgUGVyY2VudFBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTWVzc2FnaW5nTmFtZXNwYWNlc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9hcGkvc2VydmljZXMvbWVzc2FnaW5nLW5hbWVzcGFjZXMuc2VydmljZSc7XG5pbXBvcnQgeyBCYWNrbG9nUXVvdGFMaW1pdFBpcGUgfSBmcm9tICcuLi8uLi91dGlscy9iYWNrbG9nLXF1b3RhLWxpbWl0LnBpcGUnO1xuaW1wb3J0IHsgVXNhZ2VDb21wb25lbnQgfSBmcm9tICcuLi9zaGFyZWQvdXNhZ2UvdXNhZ2UuY29tcG9uZW50JztcbmltcG9ydCB7IFRpbWVUb0xpdmVQaXBlIH0gZnJvbSAnLi4vLi4vdXRpbHMvdGltZS10by1saXZlLnBpcGUnO1xuaW1wb3J0IHsgTkFNRVNQQUNFX1BST1BTIH0gZnJvbSAnLi4vLi4vdXRpbHMvbmFtZXNwYWNlLXByb3BzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFRvcGljc0RhdGFHcmlkU2VydmljZSB9IGZyb20gJy4vdG9waWNzLWRhdGEtZ3JpZC5zZXJ2aWNlJztcbmltcG9ydCB7IG1hcCwgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBmaXJzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuXG5AQ29tcG9uZW50KHtcbiAgaW1wb3J0czogW1xuICAgIFJvdXRlckxpbmssXG4gICAgSGVhZGVyTW9kdWxlLFxuICAgIERhdGFHcmlkTW9kdWxlLFxuICAgIERlY2ltYWxQaXBlLFxuICAgIEM4eVRyYW5zbGF0ZVBpcGUsXG4gICAgQmFja2xvZ1F1b3RhTGltaXRQaXBlLFxuICAgIFVzYWdlQ29tcG9uZW50LFxuICAgIEJ5dGVzUGlwZSxcbiAgICBUaW1lVG9MaXZlUGlwZSxcbiAgICBCcmVhZGNydW1iTW9kdWxlLFxuICAgIExvYWRpbmdDb21wb25lbnQsXG4gICAgTmdJZixcbiAgICBBY3Rpb25CYXJJdGVtQ29tcG9uZW50LFxuICAgIE5nQ2xhc3MsXG4gICAgSWNvbkRpcmVjdGl2ZSxcbiAgICBQZXJjZW50UGlwZSxcbiAgICBFbXB0eVN0YXRlQ29tcG9uZW50LFxuICAgIEVtcHR5U3RhdGVDb250ZXh0RGlyZWN0aXZlLFxuICAgIEFzeW5jUGlwZVxuICBdLFxuICBzZWxlY3RvcjogJ2FwcC10b3BpYy1saXN0LXZpZXcnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICB0ZW1wbGF0ZVVybDogJy4vdG9waWMtbGlzdC12aWV3LmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBUb3BpY0xpc3RWaWV3Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgYXBwU3RhdGUgPSBpbmplY3QoQXBwU3RhdGVTZXJ2aWNlKTtcbiAgbmFtZXNwYWNlc1NlcnZpY2UgPSBpbmplY3QoTWVzc2FnaW5nTmFtZXNwYWNlc1NlcnZpY2UpO1xuICB0b3BpY3NEYXRhR3JpZFNlcnZpY2UgPSBpbmplY3QoVG9waWNzRGF0YUdyaWRTZXJ2aWNlKTtcbiAgdHJhbnNsYXRlU2VydmljZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcbiAgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICBsb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWZyZXNoID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIHRlbmFudElkJCA9IHRoaXMuYXBwU3RhdGUuY3VycmVudFRlbmFudC5waXBlKG1hcCh0ZW5hbnQgPT4gdGVuYW50Lm5hbWUpKTtcbiAgbmFtZXNwYWNlSWQkID0gdGhpcy5yb3V0ZS5wYXJhbXMucGlwZShtYXAocGFyYW1zID0+IHBhcmFtc1snbmFtZXNwYWNlJ10gYXMgc3RyaW5nKSk7XG4gIG5hbWVzcGFjZUxhYmVsJCA9IHRoaXMubmFtZXNwYWNlSWQkLnBpcGUoXG4gICAgbWFwKG5hbWVzcGFjZUlkID0+IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KE5BTUVTUEFDRV9QUk9QU1tuYW1lc3BhY2VJZF0ubGFiZWwpKVxuICApO1xuICBpY29uJCA9IHRoaXMubmFtZXNwYWNlSWQkLnBpcGUobWFwKG5hbWVzcGFjZUlkID0+IE5BTUVTUEFDRV9QUk9QU1tuYW1lc3BhY2VJZF0uaWNvbikpO1xuXG4gIG5hbWVzcGFjZURldGFpbHMkID0gY29tYmluZUxhdGVzdChbdGhpcy50ZW5hbnRJZCQsIHRoaXMubmFtZXNwYWNlSWQkLCB0aGlzLnJlZnJlc2hdKS5waXBlKFxuICAgIHRhcCgoKSA9PiB0aGlzLmxvYWRpbmckLm5leHQodHJ1ZSkpLFxuICAgIHN3aXRjaE1hcCgoW3RlbmFudElkLCBuYW1lc3BhY2VJZF0pID0+XG4gICAgICB0aGlzLm5hbWVzcGFjZXNTZXJ2aWNlLmdldE5hbWVzcGFjZURldGFpbHModGVuYW50SWQsIG5hbWVzcGFjZUlkKVxuICAgICksXG4gICAgdGFwKCgpID0+IHRoaXMubG9hZGluZyQubmV4dChmYWxzZSkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgdGFibGVUaXRsZSA9IGdldHRleHQoJ1RvcGljcycpO1xuICBsb2FkaW5nSXRlbXNMYWJlbCA9IGdldHRleHQoJ0xvYWRpbmcgdG9waWNzLi4uJyk7XG4gIGxvYWRNb3JlSXRlbXNMYWJlbCA9IGdldHRleHQoJ0xvYWQgbW9yZSB0b3BpY3MnKTtcbiAgbm9SZXN1bHRzTWVzc2FnZSA9IGdldHRleHQoJ05vIG1hdGNoaW5nIHRvcGljcyBmb3VuZC4nKTtcbiAgbm9SZXN1bHRzU3VidGl0bGUgPSBnZXR0ZXh0KCdSZWZpbmUgeW91ciBzZWFyY2ggdGVybXMgb3IgY2hlY2sgeW91ciBzcGVsbGluZy4nKTtcbiAgbm9EYXRhTWVzc2FnZSA9IGdldHRleHQoJ05vIHRvcGljcyB0byBkaXNwbGF5LicpO1xuICBub0RhdGFTdWJ0aXRsZSA9IGdldHRleHQoJ0NyZWF0ZSBuZXcgdG9waWNzIHRvIG1vbml0b3IgdGhlbSBoZXJlLicpO1xuXG4gIGNvbHVtbnM6IENvbHVtbltdID0gdGhpcy50b3BpY3NEYXRhR3JpZFNlcnZpY2UuZ2V0Q29sdW1ucygpO1xuICBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uID0ge1xuICAgIHBhZ2VTaXplOiAyMCxcbiAgICBjdXJyZW50UGFnZTogMVxuICB9O1xuXG4gIHNlcnZlclNpZGVEYXRhQ2FsbGJhY2s6IFNlcnZlclNpZGVEYXRhQ2FsbGJhY2sgPSB0aGlzLm9uRGF0YVNvdXJjZU1vZGlmaWVyLmJpbmQodGhpcyk7XG4gIGFzeW5jIG9uRGF0YVNvdXJjZU1vZGlmaWVyKFxuICAgIGRhdGFTb3VyY2VNb2RpZmllcjogRGF0YVNvdXJjZU1vZGlmaWVyXG4gICk6IFByb21pc2U8U2VydmVyU2lkZURhdGFSZXN1bHQ+IHtcbiAgICByZXR1cm4gZmlyc3RWYWx1ZUZyb20oXG4gICAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLnRlbmFudElkJCwgdGhpcy5uYW1lc3BhY2VJZCRdKS5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKFt0ZW5hbnRJZCwgbmFtZXNwYWNlSWRdKSA9PlxuICAgICAgICAgIHRoaXMudG9waWNzRGF0YUdyaWRTZXJ2aWNlLmdldFNlcnZlclNpZGVEYXRhKHRlbmFudElkLCBuYW1lc3BhY2VJZCwgZGF0YVNvdXJjZU1vZGlmaWVyKVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLnJvdXRlLnBhcmFtc1xuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMucmVmcmVzaC5lbWl0KCkpO1xuICB9XG59XG4iLCI8Yzh5LXRpdGxlPnt7IG5hbWVzcGFjZUxhYmVsJCB8IGFzeW5jIH19PC9jOHktdGl0bGU+XG5cbjxjOHktYnJlYWRjcnVtYj5cbiAgPGM4eS1icmVhZGNydW1iLWl0ZW1cbiAgICBbaWNvbl09XCInbW9uaXRvcmluZydcIlxuICAgIFtsYWJlbF09XCInTW9uaXRvcmluZycgfCB0cmFuc2xhdGVcIlxuICA+PC9jOHktYnJlYWRjcnVtYi1pdGVtPlxuICA8Yzh5LWJyZWFkY3J1bWItaXRlbVxuICAgIFtsYWJlbF09XCInTWVzc2FnaW5nIHNlcnZpY2UnIHwgdHJhbnNsYXRlXCJcbiAgICBbcGF0aF09XCInL21vbml0b3JpbmcvbWVzc2FnaW5nLXNlcnZpY2UnXCJcbiAgPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbiAgPGM4eS1icmVhZGNydW1iLWl0ZW0gW2xhYmVsXT1cIm5hbWVzcGFjZUxhYmVsJCB8IGFzeW5jXCI+PC9jOHktYnJlYWRjcnVtYi1pdGVtPlxuPC9jOHktYnJlYWRjcnVtYj5cblxuPGM4eS1hY3Rpb24tYmFyLWl0ZW0gW3BsYWNlbWVudF09XCIncmlnaHQnXCI+XG4gIDxhXG4gICAgY2xhc3M9XCJidG4gYnRuLWxpbmtcIlxuICAgIHRpdGxlPVwie3sgJ1JlbG9hZCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgIChjbGljayk9XCJyZWZyZXNoLmVtaXQoKVwiXG4gID5cbiAgICA8aVxuICAgICAgYzh5SWNvbj1cInJlZnJlc2hcIlxuICAgICAgW25nQ2xhc3NdPVwieyAnaWNvbi1zcGluJzogbG9hZGluZyQgfCBhc3luYyB9XCJcbiAgICA+PC9pPlxuICAgIHt7ICdSZWxvYWQnIHwgdHJhbnNsYXRlIH19XG4gIDwvYT5cbjwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuPGRpdiBjbGFzcz1cImNhcmQgY29udGVudC1mdWxscGFnZSBkLWZsZXggZC1jb2xcIj5cbiAgPGRpdiBjbGFzcz1cImJnLWxldmVsLTEgc2VwYXJhdG9yLWJvdHRvbSBmbGV4LW5vLXNocmlua1wiPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiY2FyZC1ibG9ja1wiXG4gICAgICBzdHlsZT1cIm1pbi1oZWlnaHQ6IDE3MnB4XCJcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiY29sLW1kLTQgbS1iLTI0IGNvbC14cy0xMiBkLWZsZXggcC10LTI0IGdhcC0xNiB0ZXh0LWRlZmF1bHQgYS1pLWNlbnRlciBhLXMtc3RyZXRjaFwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBkLWNvbFwiPlxuICAgICAgICAgIDxpXG4gICAgICAgICAgICBjbGFzcz1cIm0tYi04IGljb24tNDAgYzh5LWljb24tZHVvY29sb3JcIlxuICAgICAgICAgICAgW2M4eUljb25dPVwiaWNvbiQgfCBhc3luY1wiXG4gICAgICAgICAgPjwvaT5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRhZyB0YWctLWluZm9cIj57eyAnU2VydmljZScgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c3BhbiBjbGFzcz1cImg0IHRleHQtYnJlYWstYWxsXCI+e3sgbmFtZXNwYWNlTGFiZWwkIHwgYXN5bmMgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxuICAgICAgICA8ZmllbGRzZXQgY2xhc3M9XCJjOHktZmllbGRzZXQgYzh5LWZpZWxkc2V0LS1sZ1wiPlxuICAgICAgICAgIDxsZWdlbmQ+XG4gICAgICAgICAgICB7eyAnU2VydmljZSB1c2FnZS9saW1pdHMnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9sZWdlbmQ+XG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibG9hZGluZyQgfCBhc3luYzsgZWxzZSBzZXJ2aWNlVXNhZ2VMaW1pdHNcIj5cbiAgICAgICAgICAgIDxjOHktbG9hZGluZz48L2M4eS1sb2FkaW5nPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNzZXJ2aWNlVXNhZ2VMaW1pdHM+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKG5hbWVzcGFjZURldGFpbHMkIHwgYXN5bmMpPy5uYW1lc3BhY2UgYXMgbmFtZXNwYWNlXCI+XG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtdW5zdHlsZWQgc21hbGwgYW5pbWF0ZWQgZmFkZUluXCI+XG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicC10LTQgcC1iLTQgZC1mbGV4IHNlcGFyYXRvci1ib3R0b20gdGV4dC1ub3dyYXBcIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInNtYWxsIG0tYi0wIG0tci1hdXRvXCI+e3sgJ1RvcGljcycgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5hbWVzcGFjZT8udG9waWNzPy5saW1pdCAhPT0gMFwiPlxuICAgICAgICAgICAgICAgICAgICA8YXBwLXVzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgW2NvdW50XT1cIm5hbWVzcGFjZT8udG9waWNzPy5jb3VudFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2xpbWl0XT1cIm5hbWVzcGFjZT8udG9waWNzPy5saW1pdFwiXG4gICAgICAgICAgICAgICAgICAgID48L2FwcC11c2FnZT5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtLWwtMTZcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBuYW1lc3BhY2U/LnRvcGljcz8uY291bnQgfCBudW1iZXIgfX0gL1xuICAgICAgICAgICAgICAgICAgICAgIHt7IG5hbWVzcGFjZT8udG9waWNzPy5saW1pdCB8IGJhY2tsb2dRdW90YUxpbWl0IH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5hbWVzcGFjZT8udG9waWNzPy5saW1pdCA9PT0gMFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm0tbC0xNlwiPnt7IG5hbWVzcGFjZT8udG9waWNzPy5jb3VudCB8IG51bWJlciB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbGk+XG5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJwLXQtNCBwLWItNCBkLWZsZXggc2VwYXJhdG9yLWJvdHRvbSB0ZXh0LW5vd3JhcFwiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwic21hbGwgbS1iLTAgbS1yLWF1dG9cIj57eyAnU3Vic2NyaWJlcnMnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibS1sLTE2XCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IG5hbWVzcGFjZT8uc3Vic2NyaWJlcnM/LmNvdW50IHwgbnVtYmVyIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9saT5cblxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInAtdC00IHAtYi00IGQtZmxleCB0ZXh0LW5vd3JhcFwiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwic21hbGwgbS1iLTAgbS1yLWF1dG9cIj57eyAnUHVibGlzaGVycycgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtLWwtMTZcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgbmFtZXNwYWNlPy5wdWJsaXNoZXJzPy5jb3VudCB8IG51bWJlciB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgICAgPGZpZWxkc2V0IGNsYXNzPVwiYzh5LWZpZWxkc2V0IGM4eS1maWVsZHNldC0tbGdcIj5cbiAgICAgICAgICA8bGVnZW5kPnt7ICdTZXJ2aWNlIG1lc3NhZ2UgYmFja2xvZyBsaW1pdHMnIHwgdHJhbnNsYXRlIH19PC9sZWdlbmQ+XG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibG9hZGluZyQgfCBhc3luYzsgZWxzZSBzZXJ2aWNlTWVzc2FnZUJhY2tsb2dMaW1pdHNcIj5cbiAgICAgICAgICAgIDxjOHktbG9hZGluZz48L2M4eS1sb2FkaW5nPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNzZXJ2aWNlTWVzc2FnZUJhY2tsb2dMaW1pdHM+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKG5hbWVzcGFjZURldGFpbHMkIHwgYXN5bmMpPy5wb2xpY2llcyBhcyBwb2xpY2llc1wiPlxuICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LXVuc3R5bGVkIHNtYWxsIGFuaW1hdGVkIGZhZGVJblwiPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInAtdC00IHAtYi00IGQtZmxleCBzZXBhcmF0b3ItYm90dG9tIHRleHQtbm93cmFwXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzbWFsbCBtLWItMCBtLXItYXV0b1wiPlxuICAgICAgICAgICAgICAgICAgICB7eyAnQmFja2xvZyBxdW90YSAocGVyIHRvcGljKScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICB0aXRsZT1cInt7XG4gICAgICAgICAgICAgICAgICAgICAgcG9saWNpZXM/LmJhY2tsb2dRdW90YT8ubGltaXQgPiAwXG4gICAgICAgICAgICAgICAgICAgICAgICA/IChwb2xpY2llcy5iYWNrbG9nUXVvdGEubGltaXQgfCBieXRlczogMCA6IHRydWUpXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICctJ1xuICAgICAgICAgICAgICAgICAgICB9fVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgcG9saWNpZXM/LmJhY2tsb2dRdW90YT8ubGltaXQgPiAwXG4gICAgICAgICAgICAgICAgICAgICAgICA/IChwb2xpY2llcy5iYWNrbG9nUXVvdGEubGltaXQgfCBieXRlczogMClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJy0nXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9saT5cblxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInAtdC00IHAtYi00IGQtZmxleCB0ZXh0LW5vd3JhcFwiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwic21hbGwgbS1iLTAgbS1yLWF1dG9cIj5cbiAgICAgICAgICAgICAgICAgICAge3sgJ0JhY2tsb2cgdGltZSB0byBsaXZlIChUVEwpJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IHBvbGljaWVzPy5tZXNzYWdlVFRMIHwgdGltZVRvTGl2ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9maWVsZHNldD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8Yzh5LWRhdGEtZ3JpZFxuICAgIGNsYXNzPVwiZC1jb250ZW50c1wiXG4gICAgW3RpdGxlXT1cInRhYmxlVGl0bGUgfCB0cmFuc2xhdGVcIlxuICAgIFtsb2FkaW5nSXRlbXNMYWJlbF09XCJsb2FkaW5nSXRlbXNMYWJlbCB8IHRyYW5zbGF0ZVwiXG4gICAgW2xvYWRNb3JlSXRlbXNMYWJlbF09XCJsb2FkTW9yZUl0ZW1zTGFiZWwgfCB0cmFuc2xhdGVcIlxuICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIlxuICAgIFtwYWdpbmF0aW9uXT1cInBhZ2luYXRpb25cIlxuICAgIFtzZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrXT1cInNlcnZlclNpZGVEYXRhQ2FsbGJhY2tcIlxuICAgIFtyZWZyZXNoXT1cInJlZnJlc2hcIlxuICAgIFtoaWRlUmVsb2FkXT1cInRydWVcIlxuICA+XG4gICAgPGM4eS11aS1lbXB0eS1zdGF0ZVxuICAgICAgW2ljb25dPVwic3RhdHM/LnNpemUgPiAwID8gJ3NlYXJjaCcgOiAnZGF5LXZpZXcnXCJcbiAgICAgIFt0aXRsZV09XCJzdGF0cz8uc2l6ZSA+IDAgPyAobm9SZXN1bHRzTWVzc2FnZSB8IHRyYW5zbGF0ZSkgOiAobm9EYXRhTWVzc2FnZSB8IHRyYW5zbGF0ZSlcIlxuICAgICAgW3N1YnRpdGxlXT1cInN0YXRzPy5zaXplID4gMCA/IChub1Jlc3VsdHNTdWJ0aXRsZSB8IHRyYW5zbGF0ZSkgOiAobm9EYXRhU3VidGl0bGUgfCB0cmFuc2xhdGUpXCJcbiAgICAgICplbXB0eVN0YXRlQ29udGV4dD1cImxldCBzdGF0c1wiXG4gICAgICBbaG9yaXpvbnRhbF09XCJzdGF0cz8uc2l6ZSA+IDBcIlxuICAgID48L2M4eS11aS1lbXB0eS1zdGF0ZT5cblxuICAgIDxjOHktY29sdW1uIG5hbWU9XCJuYW1lXCI+XG4gICAgICA8bmctY29udGFpbmVyICpjOHlDZWxsUmVuZGVyZXJEZWY9XCJsZXQgY29udGV4dFwiPlxuICAgICAgICA8YVxuICAgICAgICAgIHRpdGxlPVwie3sgY29udGV4dC52YWx1ZSB9fVwiXG4gICAgICAgICAgW3JvdXRlckxpbmtdPVwiWyd0b3BpYycsIGNvbnRleHQuaXRlbS5pZF1cIlxuICAgICAgICA+XG4gICAgICAgICAge3sgY29udGV4dC52YWx1ZSB9fVxuICAgICAgICA8L2E+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2M4eS1jb2x1bW4+XG5cbiAgICA8Yzh5LWNvbHVtbiBuYW1lPVwibXNnUmF0ZUluXCI+XG4gICAgICA8bmctY29udGFpbmVyICpjOHlDZWxsUmVuZGVyZXJEZWY9XCJsZXQgY29udGV4dFwiPlxuICAgICAgICA8c3BhbiB0aXRsZT1cInt7IGNvbnRleHQudmFsdWUgfCBudW1iZXIgfX1cIj5cbiAgICAgICAgICB7eyBjb250ZXh0LnZhbHVlIHwgbnVtYmVyIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvYzh5LWNvbHVtbj5cblxuICAgIDxjOHktY29sdW1uIG5hbWU9XCJtc2dSYXRlT3V0XCI+XG4gICAgICA8bmctY29udGFpbmVyICpjOHlDZWxsUmVuZGVyZXJEZWY9XCJsZXQgY29udGV4dFwiPlxuICAgICAgICA8c3BhbiB0aXRsZT1cInt7IGNvbnRleHQudmFsdWUgfCBudW1iZXIgfX1cIj5cbiAgICAgICAgICB7eyBjb250ZXh0LnZhbHVlIHwgbnVtYmVyIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvYzh5LWNvbHVtbj5cblxuICAgIDxjOHktY29sdW1uIG5hbWU9XCJzdWJzY3JpYmVyc1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqYzh5Q2VsbFJlbmRlcmVyRGVmPVwibGV0IGNvbnRleHRcIj5cbiAgICAgICAgPGFcbiAgICAgICAgICB0aXRsZT1cInt7IGNvbnRleHQudmFsdWUgfCBudW1iZXIgfX1cIlxuICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIlsndG9waWMnLCBjb250ZXh0Lml0ZW0uaWQsICdzdWJzY3JpYmVycyddXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGNvbnRleHQudmFsdWUgfCBudW1iZXIgfX1cbiAgICAgICAgPC9hPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9jOHktY29sdW1uPlxuXG4gICAgPGM4eS1jb2x1bW4gbmFtZT1cImJhY2tsb2dTaXplXCI+XG4gICAgICA8bmctY29udGFpbmVyICpjOHlDZWxsUmVuZGVyZXJEZWY9XCJsZXQgY29udGV4dFwiPlxuICAgICAgICA8c3BhbiB0aXRsZT1cInt7IGNvbnRleHQudmFsdWUgfCBieXRlczogMiA6IHRydWUgfX1cIj5cbiAgICAgICAgICB7eyBjb250ZXh0LnZhbHVlIHwgYnl0ZXM6IDIgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9jOHktY29sdW1uPlxuXG4gICAgPGM4eS1jb2x1bW4gbmFtZT1cImJhY2tsb2dVc2FnZVBlcmNlbnRhZ2VcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKmM4eUNlbGxSZW5kZXJlckRlZj1cImxldCBjb250ZXh0XCI+XG4gICAgICAgIDxzcGFuIHRpdGxlPVwie3sgY29udGV4dC52YWx1ZSAvIDEwMCB8IHBlcmNlbnQ6ICcxLjAtMicgfX1cIj5cbiAgICAgICAgICB7eyBjb250ZXh0LnZhbHVlIC8gMTAwIHwgcGVyY2VudDogJzEuMC0yJyB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2M4eS1jb2x1bW4+XG4gIDwvYzh5LWRhdGEtZ3JpZD5cbjwvZGl2PlxuIl19
@@ -109,7 +109,7 @@ export class TopicSubscribersViewComponent {
109
109
  this.topicSubscribersDataGridService.bulkUnsubscribeSubscribers(subscribers, () => this.refresh.emit());
110
110
  }
111
111
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TopicSubscribersViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
112
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TopicSubscribersViewComponent, isStandalone: true, selector: "app-topic-subscribers-view", viewQueries: [{ propertyName: "dataGrid", first: true, predicate: DataGridComponent, descendants: true, static: true }], ngImport: i0, template: "<c8y-title>{{ topicName$ | async }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'monitoring'\"\n [label]=\"'Monitoring' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [label]=\"'Messaging service' | translate\"\n [path]=\"'/monitoring/messaging-service'\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [label]=\"namespaceLabel$ | async\"\n [path]=\"'/monitoring/messaging-service/namespace/' + (namespaceId$ | async)\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"topicName$ | async\"></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <a\n class=\"btn btn-link\"\n title=\"{{ 'Reload' | translate }}\"\n (click)=\"refresh.emit()\"\n >\n <i\n c8yIcon=\"refresh\"\n [ngClass]=\"{ 'icon-spin': loading$ | async }\"\n ></i>\n {{ 'Reload' | translate }}\n </a>\n</c8y-action-bar-item>\n\n<div class=\"card content-fullpage d-flex d-col\">\n <div class=\"bg-level-1 separator-bottom flex-no-shrink\">\n <div class=\"card-block\">\n <div\n class=\"col-md-4 m-b-24 col-xs-12 d-flex p-t-24 gap-16 text-default a-i-center a-s-stretch\"\n >\n <div class=\"text-center d-col\">\n <i\n class=\"m-b-8 icon-40 c8y-icon-duocolor\"\n [c8yIcon]=\"'day-view'\"\n ></i>\n <span class=\"tag tag--default\">{{ 'Topic' | translate }}</span>\n </div>\n <span class=\"h4\">{{ topicName$ | async }}</span>\n </div>\n <div class=\"col-md-4\">\n <fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend translate>Topic usage</legend>\n\n <ng-container *ngIf=\"loading$ | async; else topicSummary\">\n <c8y-loading></c8y-loading>\n </ng-container>\n\n <ng-template #topicSummary>\n <ng-container *ngIf=\"overview$ | async as overview\">\n <ul class=\"list-unstyled small animated fadeIn\">\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">{{ 'Active subscribers' | translate }}</label>\n <span class=\"m-l-16\">{{ overview.topic.activeSubscribers | number }}</span>\n </li>\n\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">{{ 'Total subscribers' | translate }}</label>\n <span class=\"m-l-16\">{{ overview.topic.subscribers | number }}</span>\n </li>\n\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">\n {{ 'Total unacknowledged messages' | translate }}\n </label>\n <span class=\"m-l-16\">{{ overview.topic.unackMsgBacklog | number }}</span>\n </li>\n\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">\n {{ 'Message rate in' | translate }}\n </label>\n <span\n class=\"m-l-16\"\n ngNonBindable\n translate\n [translateParams]=\"{\n messagesPerSecond: overview.topic.msgRateIn | number\n }\"\n >\n {{ messagesPerSecond }} msg/s\n </span>\n </li>\n\n <li class=\"p-t-4 p-b-4 d-flex text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">\n {{ 'Message rate out' | translate }}\n </label>\n <span\n class=\"m-l-16\"\n ngNonBindable\n translate\n [translateParams]=\"{\n messagesPerSecond: overview.topic.msgRateOut | number\n }\"\n >\n {{ messagesPerSecond }} msg/s\n </span>\n </li>\n </ul>\n </ng-container>\n </ng-template>\n </fieldset>\n </div>\n\n <div class=\"col-md-4\">\n <fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend translate>Topic message backlog</legend>\n\n <ng-container *ngIf=\"loading$ | async; else topicBacklog\">\n <c8y-loading></c8y-loading>\n </ng-container>\n\n <ng-template #topicBacklog>\n <ng-container *ngIf=\"overview$ | async as overview\">\n <ul class=\"list-unstyled small animated fadeIn\">\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label\n class=\"small m-b-0 m-r-auto\"\n translate\n >\n Backlog usage\n </label>\n <app-usage [percentage]=\"overview.topic.backlogUsagePercentage\"></app-usage>\n <span class=\"m-l-16\">{{ overview.topic.backlogSize | bytes }}</span>\n </li>\n\n <li class=\"p-t-4 p-b-4 d-flex text-nowrap\">\n <label\n class=\"small m-b-0 m-r-auto\"\n translate\n >\n Backlog quota\n </label>\n <span class=\"m-l-16\">\n {{\n overview.policies.backlogQuota?.limit > 0\n ? (overview.policies.backlogQuota?.limit | bytes)\n : '-'\n }}\n </span>\n </li>\n </ul>\n </ng-container>\n </ng-template>\n </fieldset>\n </div>\n </div>\n </div>\n <c8y-data-grid\n class=\"content-fullpage d-flex d-col border-top border-bottom\"\n [title]=\"tableTitle | translate\"\n [loadingItemsLabel]=\"loadingItemsLabel | translate\"\n [loadMoreItemsLabel]=\"loadMoreItemsLabel | translate\"\n [columns]=\"columns\"\n [pagination]=\"pagination\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n [refresh]=\"refresh\"\n [hideReload]=\"true\"\n [selectable]=\"selectable\"\n [actionControls]=\"actionControls\"\n [bulkActionControls]=\"bulkActionControls\"\n >\n <c8y-ui-empty-state\n [icon]=\"stats?.size > 0 ? 'search' : 'input'\"\n [title]=\"stats?.size > 0 ? (noResultsMessage | translate) : (noDataMessage | translate)\"\n [subtitle]=\"stats?.size > 0 ? (noResultsSubtitle | translate) : (noDataSubtitle | translate)\"\n *emptyStateContext=\"let stats\"\n [horizontal]=\"stats?.size > 0\"\n ></c8y-ui-empty-state>\n\n <c8y-column name=\"name\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value }}\">\n {{ context.value }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"activeClients\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value | number }}\">\n {{ context.value | number }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"messageAckRate\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value | number }}\">\n {{ context.value | number }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"lastAcknowledgeDate\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span\n title=\"{{ context.value }}\"\n *ngIf=\"context.value; else noLastAcknwoldegeDate\"\n >\n {{ context.value | relativeTime }}\n </span>\n <ng-template #noLastAcknwoldegeDate>&ndash;</ng-template>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"unackMsgBacklog\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value | number }}\">\n {{ context.value | number }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"backlogUsagePercentage\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value / 100 | percent: '1.0-2' }}\">\n {{ context.value / 100 | percent: '1.0-2' }}\n </span>\n </ng-container>\n </c8y-column>\n </c8y-data-grid>\n</div>\n", dependencies: [{ kind: "ngmodule", type: DataGridModule }, { kind: "directive", type: i1.CellRendererDefDirective, selector: "[c8yCellRendererDef]" }, { kind: "directive", type: i1.ColumnDirective, selector: "c8y-column", inputs: ["name"] }, { kind: "component", type: i1.DataGridComponent, selector: "c8y-data-grid", inputs: ["title", "loadMoreItemsLabel", "loadingItemsLabel", "showSearch", "refresh", "columns", "rows", "pagination", "infiniteScroll", "serverSideDataCallback", "selectable", "singleSelection", "selectionPrimaryKey", "displayOptions", "actionControls", "bulkActionControls", "headerActionControls", "searchText", "configureColumnsEnabled", "showCounterWarning", "activeClassName", "expandableRows", "hideReload"], outputs: ["rowMouseOver", "rowMouseLeave", "rowClick", "onConfigChange", "onBeforeFilter", "onBeforeSearch", "onFilter", "itemsSelect", "onReload", "onAddCustomColumn", "onRemoveCustomColumn", "onColumnFilterReset", "onSort", "onPageSizeChange", "onColumnReordered", "onColumnVisibilityChange"] }, { kind: "pipe", type: DecimalPipe, name: "number" }, { kind: "ngmodule", type: HeaderModule }, { kind: "component", type: i1.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "pipe", type: RelativeTimePipe, name: "relativeTime" }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.PercentPipe, name: "percent" }, { kind: "pipe", type: BytesPipe, name: "bytes" }, { kind: "ngmodule", type: BreadcrumbModule }, { kind: "component", type: i1.BreadcrumbComponent, selector: "c8y-breadcrumb" }, { kind: "component", type: i1.BreadcrumbItemComponent, selector: "c8y-breadcrumb-item", inputs: ["icon", "translate", "label", "path", "injector"] }, { kind: "component", type: UsageComponent, selector: "app-usage", inputs: ["count", "limit", "percentage"] }, { kind: "component", type: ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "component", type: EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: EmptyStateContextDirective, selector: "[emptyStateContext]" }, { kind: "component", type: LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }] }); }
112
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TopicSubscribersViewComponent, isStandalone: true, selector: "app-topic-subscribers-view", viewQueries: [{ propertyName: "dataGrid", first: true, predicate: DataGridComponent, descendants: true, static: true }], ngImport: i0, template: "<c8y-title>{{ topicName$ | async }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'monitoring'\"\n [label]=\"'Monitoring' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [label]=\"'Messaging service' | translate\"\n [path]=\"'/monitoring/messaging-service'\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [label]=\"namespaceLabel$ | async\"\n [path]=\"'/monitoring/messaging-service/namespace/' + (namespaceId$ | async)\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"topicName$ | async\"></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <a\n class=\"btn btn-link\"\n title=\"{{ 'Reload' | translate }}\"\n (click)=\"refresh.emit()\"\n >\n <i\n c8yIcon=\"refresh\"\n [ngClass]=\"{ 'icon-spin': loading$ | async }\"\n ></i>\n {{ 'Reload' | translate }}\n </a>\n</c8y-action-bar-item>\n\n<div class=\"card content-fullpage d-flex d-col\">\n <div class=\"bg-level-1 separator-bottom flex-no-shrink\">\n <div class=\"card-block\">\n <div\n class=\"col-md-4 m-b-24 col-xs-12 d-flex p-t-24 gap-16 text-default a-i-center a-s-stretch\"\n >\n <div class=\"text-center d-col\">\n <i\n class=\"m-b-8 icon-40 c8y-icon-duocolor\"\n [c8yIcon]=\"'day-view'\"\n ></i>\n <span class=\"tag tag--default\">{{ 'Topic' | translate }}</span>\n </div>\n <span class=\"h4\">{{ topicName$ | async }}</span>\n </div>\n <div class=\"col-md-4\">\n <fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend translate>Topic usage</legend>\n\n <ng-container *ngIf=\"loading$ | async; else topicSummary\">\n <c8y-loading></c8y-loading>\n </ng-container>\n\n <ng-template #topicSummary>\n <ng-container *ngIf=\"overview$ | async as overview\">\n <ul class=\"list-unstyled small animated fadeIn\">\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">{{ 'Active subscribers' | translate }}</label>\n <span class=\"m-l-16\">{{ overview.topic.activeSubscribers | number }}</span>\n </li>\n\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">{{ 'Total subscribers' | translate }}</label>\n <span class=\"m-l-16\">{{ overview.topic.subscribers | number }}</span>\n </li>\n\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">\n {{ 'Total unacknowledged messages' | translate }}\n </label>\n <span class=\"m-l-16\">{{ overview.topic.unackMsgBacklog | number }}</span>\n </li>\n\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">\n {{ 'Message rate in' | translate }}\n </label>\n <span\n class=\"m-l-16\"\n ngNonBindable\n translate\n [translateParams]=\"{\n messagesPerSecond: overview.topic.msgRateIn | number\n }\"\n >\n {{ messagesPerSecond }} msg/s\n </span>\n </li>\n\n <li class=\"p-t-4 p-b-4 d-flex text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">\n {{ 'Message rate out' | translate }}\n </label>\n <span\n class=\"m-l-16\"\n ngNonBindable\n translate\n [translateParams]=\"{\n messagesPerSecond: overview.topic.msgRateOut | number\n }\"\n >\n {{ messagesPerSecond }} msg/s\n </span>\n </li>\n </ul>\n </ng-container>\n </ng-template>\n </fieldset>\n </div>\n\n <div class=\"col-md-4\">\n <fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend translate>Topic message backlog</legend>\n\n <ng-container *ngIf=\"loading$ | async; else topicBacklog\">\n <c8y-loading></c8y-loading>\n </ng-container>\n\n <ng-template #topicBacklog>\n <ng-container *ngIf=\"overview$ | async as overview\">\n <ul class=\"list-unstyled small animated fadeIn\">\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label\n class=\"small m-b-0 m-r-auto\"\n translate\n >\n Backlog usage\n </label>\n <app-usage [percentage]=\"overview.topic.backlogUsagePercentage\"></app-usage>\n <span class=\"m-l-16\">{{ overview.topic.backlogSize | bytes }}</span>\n </li>\n\n <li class=\"p-t-4 p-b-4 d-flex text-nowrap\">\n <label\n class=\"small m-b-0 m-r-auto\"\n translate\n >\n Backlog quota\n </label>\n <span class=\"m-l-16\">\n {{\n overview.policies.backlogQuota?.limit > 0\n ? (overview.policies.backlogQuota?.limit | bytes)\n : '-'\n }}\n </span>\n </li>\n </ul>\n </ng-container>\n </ng-template>\n </fieldset>\n </div>\n </div>\n </div>\n <c8y-data-grid\n class=\"content-fullpage d-flex d-col border-top border-bottom\"\n [title]=\"tableTitle | translate\"\n [loadingItemsLabel]=\"loadingItemsLabel | translate\"\n [loadMoreItemsLabel]=\"loadMoreItemsLabel | translate\"\n [columns]=\"columns\"\n [pagination]=\"pagination\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n [refresh]=\"refresh\"\n [hideReload]=\"true\"\n [selectable]=\"selectable\"\n [actionControls]=\"actionControls\"\n [bulkActionControls]=\"bulkActionControls\"\n >\n <c8y-ui-empty-state\n [icon]=\"stats?.size > 0 ? 'search' : 'input'\"\n [title]=\"stats?.size > 0 ? (noResultsMessage | translate) : (noDataMessage | translate)\"\n [subtitle]=\"stats?.size > 0 ? (noResultsSubtitle | translate) : (noDataSubtitle | translate)\"\n *emptyStateContext=\"let stats\"\n [horizontal]=\"stats?.size > 0\"\n ></c8y-ui-empty-state>\n\n <c8y-column name=\"name\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value }}\">\n {{ context.value }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"activeClients\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value | number }}\">\n {{ context.value | number }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"messageAckRate\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value | number }}\">\n {{ context.value | number }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"lastAcknowledgeDate\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span\n title=\"{{ context.value }}\"\n *ngIf=\"context.value; else noLastAcknwoldegeDate\"\n >\n {{ context.value | relativeTime }}\n </span>\n <ng-template #noLastAcknwoldegeDate>&ndash;</ng-template>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"unackMsgBacklog\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value | number }}\">\n {{ context.value | number }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"backlogUsagePercentage\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value / 100 | percent: '1.0-2' }}\">\n {{ context.value / 100 | percent: '1.0-2' }}\n </span>\n </ng-container>\n </c8y-column>\n </c8y-data-grid>\n</div>\n", dependencies: [{ kind: "ngmodule", type: DataGridModule }, { kind: "directive", type: i1.CellRendererDefDirective, selector: "[c8yCellRendererDef]" }, { kind: "directive", type: i1.ColumnDirective, selector: "c8y-column", inputs: ["name"] }, { kind: "component", type: i1.DataGridComponent, selector: "c8y-data-grid", inputs: ["title", "loadMoreItemsLabel", "loadingItemsLabel", "showSearch", "refresh", "columns", "rows", "pagination", "childNodePagination", "infiniteScroll", "serverSideDataCallback", "selectable", "singleSelection", "selectionPrimaryKey", "displayOptions", "actionControls", "bulkActionControls", "headerActionControls", "searchText", "configureColumnsEnabled", "showCounterWarning", "activeClassName", "expandableRows", "treeGrid", "hideReload", "childNodesProperty", "parentNodeLabelProperty"], outputs: ["rowMouseOver", "rowMouseLeave", "rowClick", "onConfigChange", "onBeforeFilter", "onBeforeSearch", "onFilter", "itemsSelect", "onReload", "onAddCustomColumn", "onRemoveCustomColumn", "onColumnFilterReset", "onSort", "onPageSizeChange", "onColumnReordered", "onColumnVisibilityChange"] }, { kind: "pipe", type: DecimalPipe, name: "number" }, { kind: "ngmodule", type: HeaderModule }, { kind: "component", type: i1.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "pipe", type: RelativeTimePipe, name: "relativeTime" }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.PercentPipe, name: "percent" }, { kind: "pipe", type: BytesPipe, name: "bytes" }, { kind: "ngmodule", type: BreadcrumbModule }, { kind: "component", type: i1.BreadcrumbComponent, selector: "c8y-breadcrumb" }, { kind: "component", type: i1.BreadcrumbItemComponent, selector: "c8y-breadcrumb-item", inputs: ["icon", "translate", "label", "path", "injector"] }, { kind: "component", type: UsageComponent, selector: "app-usage", inputs: ["count", "limit", "percentage"] }, { kind: "component", type: ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "component", type: EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: EmptyStateContextDirective, selector: "[emptyStateContext]" }, { kind: "component", type: LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }] }); }
113
113
  }
114
114
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TopicSubscribersViewComponent, decorators: [{
115
115
  type: Component,
@@ -134,4 +134,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
134
134
  type: ViewChild,
135
135
  args: [DataGridComponent, { static: true }]
136
136
  }] } });
137
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9waWMtc3Vic2NyaWJlcnMtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9tZXNzYWdpbmctbWFuYWdlbWVudC9tZXNzYWdpbmcvdG9waWMvdG9waWMtc3Vic2NyaWJlcnMtdmlldy90b3BpYy1zdWJzY3JpYmVycy12aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL21lc3NhZ2luZy1tYW5hZ2VtZW50L21lc3NhZ2luZy90b3BpYy90b3BpYy1zdWJzY3JpYmVycy12aWV3L3RvcGljLXN1YnNjcmliZXJzLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLHNCQUFzQixFQUV0QixlQUFlLEVBQ2YsZ0JBQWdCLEVBRWhCLFNBQVMsRUFDVCxxQkFBcUIsRUFDckIsZ0JBQWdCLEVBRWhCLGlCQUFpQixFQUNqQixjQUFjLEVBRWQsbUJBQW1CLEVBQ25CLDBCQUEwQixFQUMxQixPQUFPLEVBQ1AsWUFBWSxFQUNaLGFBQWEsRUFDYixnQkFBZ0IsRUFFaEIsV0FBVyxFQUNYLGdCQUFnQixFQUdqQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ3hGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxlQUFlLEVBQUUs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VUFBVTthQUNwQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsK0JBQStCLENBQUMsMEJBQTBCLENBQUMsV0FBVyxFQUFFLEdBQUcsRUFBRSxDQUNoRixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUNwQixDQUFDO0lBQ0osQ0FBQzsrR0FySVUsNkJBQTZCO21HQUE3Qiw2QkFBNkIsZ0lBc0U3QixpQkFBaUIsOERDM0k5QixnN1FBdU9BLDJDRHBMSSxjQUFjLHUrQkFDZCxXQUFXLDhDQUNYLFlBQVksbUlBQ1oscUJBQXFCLG1FQUNyQixnQkFBZ0IsZ0RBQ2hCLGdCQUFnQixpREFDaEIsWUFBWSwwVUFDWixTQUFTLDZDQUNULGdCQUFnQixzUUFDaEIsY0FBYyxnR0FDZCxzQkFBc0IsMEpBQ3RCLGFBQWEsMkVBQ2IsbUJBQW1CLG9IQUNuQiwwQkFBMEIsZ0VBQzFCLGdCQUFnQjs7NEZBSVAsNkJBQTZCO2tCQXRCekMsU0FBUzsrQkFDRSw0QkFBNEIsY0FDMUIsSUFBSSxXQUNQO3dCQUNQLGNBQWM7d0JBQ2QsV0FBVzt3QkFDWCxZQUFZO3dCQUNaLHFCQUFxQjt3QkFDckIsZ0JBQWdCO3dCQUNoQixnQkFBZ0I7d0JBQ2hCLFlBQVk7d0JBQ1osU0FBUzt3QkFDVCxnQkFBZ0I7d0JBQ2hCLGNBQWM7d0JBQ2Qsc0JBQXNCO3dCQUN0QixhQUFhO3dCQUNiLG1CQUFtQjt3QkFDbkIsMEJBQTBCO3dCQUMxQixnQkFBZ0I7cUJBQ2pCOzhCQXlFK0MsUUFBUTtzQkFBdkQsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIERlc3Ryb3lSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgaW5qZWN0LFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBY3Rpb25CYXJJdGVtQ29tcG9uZW50LFxuICBBY3Rpb25Db250cm9sLFxuICBBcHBTdGF0ZVNlcnZpY2UsXG4gIEJyZWFkY3J1bWJNb2R1bGUsXG4gIEJ1bGtBY3Rpb25Db250cm9sLFxuICBCeXRlc1BpcGUsXG4gIEM4eVRyYW5zbGF0ZURpcmVjdGl2ZSxcbiAgQzh5VHJhbnNsYXRlUGlwZSxcbiAgQ29sdW1uLFxuICBEYXRhR3JpZENvbXBvbmVudCxcbiAgRGF0YUdyaWRNb2R1bGUsXG4gIERhdGFTb3VyY2VNb2RpZmllcixcbiAgRW1wdHlTdGF0ZUNvbXBvbmVudCxcbiAgRW1wdHlTdGF0ZUNvbnRleHREaXJlY3RpdmUsXG4gIGdldHRleHQsXG4gIEhlYWRlck1vZHVsZSxcbiAgSWNvbkRpcmVjdGl2ZSxcbiAgTG9hZGluZ0NvbXBvbmVudCxcbiAgUGFnaW5hdGlvbixcbiAgUGVybWlzc2lvbnMsXG4gIFJlbGF0aXZlVGltZVBpcGUsXG4gIFNlcnZlclNpZGVEYXRhQ2FsbGJhY2ssXG4gIFNlcnZlclNpZGVEYXRhUmVzdWx0XG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBEZWNpbWFsUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNZXNzYWdpbmdUb3BpY1R5cGUgfSBmcm9tICcuLi8uLi8uLi9hcGkvbW9kZWwvdG9waWNUeXBlJztcbmltcG9ydCB7IE1lc3NhZ2luZ1RvcGljc1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9hcGkvc2VydmljZXMvbWVzc2FnaW5nLXRvcGljcy5zZXJ2aWNlJztcbmltcG9ydCB7IE1lc3NhZ2luZ05hbWVzcGFjZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vYXBpL3NlcnZpY2VzL21lc3NhZ2luZy1uYW1lc3BhY2VzLnNlcnZpY2UnO1xuaW1wb3J0IHsgTkFNRVNQQUNFX1BST1BTIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvbmFtZXNwYWNlLXByb3BzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFRvcGljU3Vic2NyaWJlcnNEYXRhR3JpZFNlcnZpY2UgfSBmcm9tICcuL3RvcGljLXN1YnNjcmliZXJzLWRhdGEtZ3JpZC5zZXJ2aWNlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgVXNhZ2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9zaGFyZWQvdXNhZ2UvdXNhZ2UuY29tcG9uZW50JztcbmltcG9ydCB7IE1lc3NhZ2luZ1N1YnNjcmliZXIgfSBmcm9tICcuLi8uLi8uLi9hcGkvbW9kZWwvc3Vic2NyaWJlcic7XG5pbXBvcnQgeyBNZXNzYWdpbmdTdWJzY3JpYmVyVG9EZWxldGUgfSBmcm9tICcuLi8uLi8uLi9hcGkvbW9kZWwvc3Vic2NyaWJlclRvRGVsZXRlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXRvcGljLXN1YnNjcmliZXJzLXZpZXcnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgRGF0YUdyaWRNb2R1bGUsXG4gICAgRGVjaW1hbFBpcGUsXG4gICAgSGVhZGVyTW9kdWxlLFxuICAgIEM4eVRyYW5zbGF0ZURpcmVjdGl2ZSxcbiAgICBSZWxhdGl2ZVRpbWVQaXBlLFxuICAgIEM4eVRyYW5zbGF0ZVBpcGUsXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEJ5dGVzUGlwZSxcbiAgICBCcmVhZGNydW1iTW9kdWxlLFxuICAgIFVzYWdlQ29tcG9uZW50LFxuICAgIEFjdGlvbkJhckl0ZW1Db21wb25lbnQsXG4gICAgSWNvbkRpcmVjdGl2ZSxcbiAgICBFbXB0eVN0YXRlQ29tcG9uZW50LFxuICAgIEVtcHR5U3RhdGVDb250ZXh0RGlyZWN0aXZlLFxuICAgIExvYWRpbmdDb21wb25lbnRcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3RvcGljLXN1YnNjcmliZXJzLXZpZXcuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFRvcGljU3Vic2NyaWJlcnNWaWV3Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgYXBwU3RhdGUgPSBpbmplY3QoQXBwU3RhdGVTZXJ2aWNlKTtcbiAgbmFtZXNwYWNlc1NlcnZpY2UgPSBpbmplY3QoTWVzc2FnaW5nTmFtZXNwYWNlc1NlcnZpY2UpO1xuICB0b3BpY3NTZXJ2aWNlID0gaW5qZWN0KE1lc3NhZ2luZ1RvcGljc1NlcnZpY2UpO1xuICB0b3BpY1N1YnNjcmliZXJzRGF0YUdyaWRTZXJ2aWNlID0gaW5qZWN0KFRvcGljU3Vic2NyaWJlcnNEYXRhR3JpZFNlcnZpY2UpO1xuICB0cmFuc2xhdGVTZXJ2aWNlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuICBwZXJtaXNzaW9ucyA9IGluamVjdChQZXJtaXNzaW9ucyk7XG4gIGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgbG9hZGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVmcmVzaCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICB0ZW5hbnRJZCQgPSB0aGlzLmFwcFN0YXRlLmN1cnJlbnRUZW5hbnQucGlwZShtYXAodGVuYW50ID0+IHRlbmFudC5uYW1lKSk7XG4gIG5hbWVzcGFjZUlkJCA9IHRoaXMucm91dGUucGFyYW1zLnBpcGUobWFwKHBhcmFtcyA9PiBwYXJhbXNbJ25hbWVzcGFjZSddIGFzIHN0cmluZykpO1xuICBuYW1lc3BhY2VMYWJlbCQgPSB0aGlzLm5hbWVzcGFjZUlkJC5waXBlKFxuICAgIG1hcChuYW1lc3BhY2VJZCA9PiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChOQU1FU1BBQ0VfUFJPUFNbbmFtZXNwYWNlSWRdLmxhYmVsKSlcbiAgKTtcbiAgdG9waWNJZCQgPSB0aGlzLnJvdXRlLnBhcmFtcy5waXBlKG1hcChwYXJhbXMgPT4gcGFyYW1zWyd0b3BpYyddIGFzIHN0cmluZykpO1xuICBvdmVydmlldyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLnRlbmFudElkJCwgdGhpcy5uYW1lc3BhY2VJZCQsIHRoaXMudG9waWNJZCQsIHRoaXMucmVmcmVzaF0pLnBpcGUoXG4gICAgdGFwKCgpID0+IHRoaXMubG9hZGluZyQubmV4dCh0cnVlKSksXG4gICAgc3dpdGNoTWFwKGFzeW5jIChbdGVuYW50SWQsIG5hbWVzcGFjZUlkLCB0b3BpY0lkXSkgPT4gKHtcbiAgICAgIHRvcGljOiAoXG4gICAgICAgIGF3YWl0IHRoaXMudG9waWNzU2VydmljZS5kZXRhaWwoe1xuICAgICAgICAgIHRlbmFudDogdGVuYW50SWQsXG4gICAgICAgICAgbmFtZXNwYWNlOiBuYW1lc3BhY2VJZCxcbiAgICAgICAgICB0b3BpYzogdG9waWNJZCxcbiAgICAgICAgICB0eXBlOiBNZXNzYWdpbmdUb3BpY1R5cGUuUGVyc2lzdGVudFxuICAgICAgICB9KVxuICAgICAgKS5kYXRhLFxuICAgICAgcG9saWNpZXM6IGF3YWl0IHRoaXMubmFtZXNwYWNlc1NlcnZpY2UuZ2V0TmFtZXNwYWNlUG9saWNpZXModGVuYW50SWQsIG5hbWVzcGFjZUlkKVxuICAgIH0pKSxcbiAgICB0YXAoKCkgPT4gdGhpcy5sb2FkaW5nJC5uZXh0KGZhbHNlKSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcbiAgdG9waWNOYW1lJCA9IHRoaXMub3ZlcnZpZXckLnBpcGUobWFwKG92ZXJ2aWV3ID0+IG92ZXJ2aWV3LnRvcGljLm5hbWUpKTtcblxuICB0YWJsZVRpdGxlID0gZ2V0dGV4dCgnU3Vic2NyaWJlcnMnKTtcbiAgbG9hZGluZ0l0ZW1zTGFiZWwgPSBnZXR0ZXh0KCdMb2FkaW5nIHN1YnNjcmliZXJzLi4uJyk7XG4gIGxvYWRNb3JlSXRlbXNMYWJlbCA9IGdldHRleHQoJ0xvYWQgbW9yZSBzdWJzY3JpYmVycycpO1xuICBub1Jlc3VsdHNNZXNzYWdlID0gZ2V0dGV4dCgnTm8gbWF0Y2hpbmcgc3Vic2NyaWJlcnMgZm91bmQuJyk7XG4gIG5vUmVzdWx0c1N1YnRpdGxlID0gZ2V0dGV4dCgnUmVmaW5lIHlvdXIgc2VhcmNoIHRlcm1zIG9yIGNoZWNrIHlvdXIgc3BlbGxpbmcuJyk7XG4gIG5vRGF0YU1lc3NhZ2UgPSBnZXR0ZXh0KCdObyBzdWJzY3JpYmVycyB0byBkaXNwbGF5LicpO1xuICBub0RhdGFTdWJ0aXRsZSA9IGdldHRleHQoJ0NyZWF0ZSBuZXcgc3Vic2NyaWJlcnMgdG8gbW9uaXRvciB0aGVtIGhlcmUuJyk7XG5cbiAgY29sdW1uczogQ29sdW1uW10gPSB0aGlzLnRvcGljU3Vic2NyaWJlcnNEYXRhR3JpZFNlcnZpY2UuZ2V0Q29sdW1ucygpO1xuICBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uID0ge1xuICAgIHBhZ2VTaXplOiAyMCxcbiAgICBjdXJyZW50UGFnZTogMVxuICB9O1xuXG4gIHNlbGVjdGFibGUgPSB0cnVlO1xuICBhY3Rpb25Db250cm9sczogQWN0aW9uQ29udHJvbFtdID0gW1xuICAgIHtcbiAgICAgIHR5cGU6ICd1bnN1YnNjcmliZVN1YnNjcmliZXInLFxuICAgICAgaWNvbjogJ3Vuc3Vic2NyaWJlJyxcbiAgICAgIHRleHQ6IGdldHRleHQoJ1Vuc3Vic2NyaWJlJyksXG4gICAgICBjYWxsYmFjazogKHN1YnNjcmliZXI6IE1lc3NhZ2luZ1N1YnNjcmliZXIpID0+IHRoaXMudW5zdWJzY3JpYmVTdWJzY3JpYmVyKHN1YnNjcmliZXIpLFxuICAgICAgc2hvd0lmOiAoKSA9PiB0aGlzLnBlcm1pc3Npb25zLmhhc1JvbGUoUGVybWlzc2lvbnMuUk9MRV9URU5BTlRfTUFOQUdFTUVOVF9BRE1JTilcbiAgICB9XG4gIF07XG4gIGJ1bGtBY3Rpb25Db250cm9sczogQnVsa0FjdGlvbkNvbnRyb2xbXSA9IFtcbiAgICB7XG4gICAgICB0eXBlOiAndW5zdWJzY3JpYmVTdWJzY3JpYmVyJyxcbiAgICAgIGljb246ICd1bnN1YnNjcmliZScsXG4gICAgICB0ZXh0OiBnZXR0ZXh0KCdVbnN1YnNjcmliZScpLFxuICAgICAgY2FsbGJhY2s6IChzdWJzY3JpYmVyc05hbWVzOiBzdHJpbmdbXSkgPT4gdGhpcy5idWxrVW5zdWJzY3JpYmVTdWJzY3JpYmVycyhzdWJzY3JpYmVyc05hbWVzKSxcbiAgICAgIHNob3dJZjogKCkgPT4gdGhpcy5wZXJtaXNzaW9ucy5oYXNSb2xlKFBlcm1pc3Npb25zLlJPTEVfVEVOQU5UX01BTkFHRU1FTlRfQURNSU4pXG4gICAgfVxuICBdO1xuICBAVmlld0NoaWxkKERhdGFHcmlkQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KSBkYXRhR3JpZDogRGF0YUdyaWRDb21wb25lbnQ7XG5cbiAgc2VydmVyU2lkZURhdGFDYWxsYmFjazogU2VydmVyU2lkZURhdGFDYWxsYmFjayA9IHRoaXMub25EYXRhU291cmNlTW9kaWZpZXIuYmluZCh0aGlzKTtcbiAgYXN5bmMgb25EYXRhU291cmNlTW9kaWZpZXIoXG4gICAgZGF0YVNvdXJjZU1vZGlmaWVyOiBEYXRhU291cmNlTW9kaWZpZXJcbiAgKTogUHJvbWlzZTxTZXJ2ZXJTaWRlRGF0YVJlc3VsdD4ge1xuICAgIHJldHVybiBmaXJzdFZhbHVlRnJvbShcbiAgICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMudGVuYW50SWQkLCB0aGlzLm5hbWVzcGFjZUlkJCwgdGhpcy50b3BpY0lkJF0pLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoW3RlbmFudElkLCBuYW1lc3BhY2VJZCwgdG9waWNJZF0pID0+XG4gICAgICAgICAgdGhpcy50b3BpY1N1YnNjcmliZXJzRGF0YUdyaWRTZXJ2aWNlLmdldFNlcnZlclNpZGVEYXRhKFxuICAgICAgICAgICAgdGVuYW50SWQsXG4gICAgICAgICAgICBuYW1lc3BhY2VJZCxcbiAgICAgICAgICAgIHRvcGljSWQsXG4gICAgICAgICAgICBNZXNzYWdpbmdUb3BpY1R5cGUuUGVyc2lzdGVudCxcbiAgICAgICAgICAgIGRhdGFTb3VyY2VNb2RpZmllclxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5yZWZyZXNoLmVtaXQoKTtcbiAgfVxuXG4gIGFzeW5jIHVuc3Vic2NyaWJlU3Vic2NyaWJlcihzdWJzY3JpYmVyOiBNZXNzYWdpbmdTdWJzY3JpYmVyKSB7XG4gICAgY29uc3QgdGVuYW50ID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy50ZW5hbnRJZCQpO1xuICAgIGNvbnN0IG5hbWVzcGFjZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMubmFtZXNwYWNlSWQkKTtcbiAgICBjb25zdCB0b3BpYyA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMudG9waWNJZCQpO1xuICAgIHRoaXMudG9waWNTdWJzY3JpYmVyc0RhdGFHcmlkU2VydmljZS51bnN1YnNjcmliZVN1YnNjcmliZXIoXG4gICAgICB7XG4gICAgICAgIC4uLnN1YnNjcmliZXIsXG4gICAgICAgIHRlbmFudCxcbiAgICAgICAgbmFtZXNwYWNlLFxuICAgICAgICB0b3BpYyxcbiAgICAgICAgdHlwZTogTWVzc2FnaW5nVG9waWNUeXBlLlBlcnNpc3RlbnRcbiAgICAgIH0sXG4gICAgICAoKSA9PiB0aGlzLnJlZnJlc2guZW1pdCgpXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGJ1bGtVbnN1YnNjcmliZVN1YnNjcmliZXJzKHN1YnNjcmliZXJzTmFtZXM6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGVuYW50ID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy50ZW5hbnRJZCQpO1xuICAgIGNvbnN0IG5hbWVzcGFjZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMubmFtZXNwYWNlSWQkKTtcbiAgICBjb25zdCB0b3BpYyA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMudG9waWNJZCQpO1xuICAgIGNvbnN0IGFsbFN1YnNjcmliZXJzOiBNZXNzYWdpbmdTdWJzY3JpYmVyW10gPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcbiAgICAgIHRoaXMuZGF0YUdyaWQuZGF0YVNvdXJjZS5kYXRhJFxuICAgICk7XG5cbiAgICBjb25zdCBzdWJzY3JpYmVyczogTWVzc2FnaW5nU3Vic2NyaWJlclRvRGVsZXRlW10gPSBzdWJzY3JpYmVyc05hbWVzLm1hcChzdWJzY3JpYmVyTmFtZSA9PiB7XG4gICAgICBjb25zdCBzdWJzY3JpYmVyID0gYWxsU3Vic2NyaWJlcnMuZmluZChzdWJzY3JpYmVyID0+IHN1YnNjcmliZXIubmFtZSA9PT0gc3Vic2NyaWJlck5hbWUpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3Vic2NyaWJlcixcbiAgICAgICAgdGVuYW50LFxuICAgICAgICBuYW1lc3BhY2UsXG4gICAgICAgIHRvcGljLFxuICAgICAgICB0eXBlOiBNZXNzYWdpbmdUb3BpY1R5cGUuUGVyc2lzdGVudFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIHRoaXMudG9waWNTdWJzY3JpYmVyc0RhdGFHcmlkU2VydmljZS5idWxrVW5zdWJzY3JpYmVTdWJzY3JpYmVycyhzdWJzY3JpYmVycywgKCkgPT5cbiAgICAgIHRoaXMucmVmcmVzaC5lbWl0KClcbiAgICApO1xuICB9XG59XG4iLCI8Yzh5LXRpdGxlPnt7IHRvcGljTmFtZSQgfCBhc3luYyB9fTwvYzh5LXRpdGxlPlxuXG48Yzh5LWJyZWFkY3J1bWI+XG4gIDxjOHktYnJlYWRjcnVtYi1pdGVtXG4gICAgW2ljb25dPVwiJ21vbml0b3JpbmcnXCJcbiAgICBbbGFiZWxdPVwiJ01vbml0b3JpbmcnIHwgdHJhbnNsYXRlXCJcbiAgPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbiAgPGM4eS1icmVhZGNydW1iLWl0ZW1cbiAgICBbbGFiZWxdPVwiJ01lc3NhZ2luZyBzZXJ2aWNlJyB8IHRyYW5zbGF0ZVwiXG4gICAgW3BhdGhdPVwiJy9tb25pdG9yaW5nL21lc3NhZ2luZy1zZXJ2aWNlJ1wiXG4gID48L2M4eS1icmVhZGNydW1iLWl0ZW0+XG4gIDxjOHktYnJlYWRjcnVtYi1pdGVtXG4gICAgW2xhYmVsXT1cIm5hbWVzcGFjZUxhYmVsJCB8IGFzeW5jXCJcbiAgICBbcGF0aF09XCInL21vbml0b3JpbmcvbWVzc2FnaW5nLXNlcnZpY2UvbmFtZXNwYWNlLycgKyAobmFtZXNwYWNlSWQkIHwgYXN5bmMpXCJcbiAgPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbiAgPGM4eS1icmVhZGNydW1iLWl0ZW0gW2xhYmVsXT1cInRvcGljTmFtZSQgfCBhc3luY1wiPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbjwvYzh5LWJyZWFkY3J1bWI+XG5cbjxjOHktYWN0aW9uLWJhci1pdGVtIFtwbGFjZW1lbnRdPVwiJ3JpZ2h0J1wiPlxuICA8YVxuICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rXCJcbiAgICB0aXRsZT1cInt7ICdSZWxvYWQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAoY2xpY2spPVwicmVmcmVzaC5lbWl0KClcIlxuICA+XG4gICAgPGlcbiAgICAgIGM4eUljb249XCJyZWZyZXNoXCJcbiAgICAgIFtuZ0NsYXNzXT1cInsgJ2ljb24tc3Bpbic6IGxvYWRpbmckIHwgYXN5bmMgfVwiXG4gICAgPjwvaT5cbiAgICB7eyAnUmVsb2FkJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2E+XG48L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG5cbjxkaXYgY2xhc3M9XCJjYXJkIGNvbnRlbnQtZnVsbHBhZ2UgZC1mbGV4IGQtY29sXCI+XG4gIDxkaXYgY2xhc3M9XCJiZy1sZXZlbC0xIHNlcGFyYXRvci1ib3R0b20gZmxleC1uby1zaHJpbmtcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ibG9ja1wiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImNvbC1tZC00IG0tYi0yNCBjb2wteHMtMTIgZC1mbGV4IHAtdC0yNCBnYXAtMTYgdGV4dC1kZWZhdWx0IGEtaS1jZW50ZXIgYS1zLXN0cmV0Y2hcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgZC1jb2xcIj5cbiAgICAgICAgICA8aVxuICAgICAgICAgICAgY2xhc3M9XCJtLWItOCBpY29uLTQwIGM4eS1pY29uLWR1b2NvbG9yXCJcbiAgICAgICAgICAgIFtjOHlJY29uXT1cIidkYXktdmlldydcIlxuICAgICAgICAgID48L2k+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0YWcgdGFnLS1kZWZhdWx0XCI+e3sgJ1RvcGljJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiaDRcIj57eyB0b3BpY05hbWUkIHwgYXN5bmMgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxuICAgICAgICA8ZmllbGRzZXQgY2xhc3M9XCJjOHktZmllbGRzZXQgYzh5LWZpZWxkc2V0LS1sZ1wiPlxuICAgICAgICAgIDxsZWdlbmQgdHJhbnNsYXRlPlRvcGljIHVzYWdlPC9sZWdlbmQ+XG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibG9hZGluZyQgfCBhc3luYzsgZWxzZSB0b3BpY1N1bW1hcnlcIj5cbiAgICAgICAgICAgIDxjOHktbG9hZGluZz48L2M4eS1sb2FkaW5nPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICN0b3BpY1N1bW1hcnk+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib3ZlcnZpZXckIHwgYXN5bmMgYXMgb3ZlcnZpZXdcIj5cbiAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibGlzdC11bnN0eWxlZCBzbWFsbCBhbmltYXRlZCBmYWRlSW5cIj5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJwLXQtNCBwLWItNCBkLWZsZXggc2VwYXJhdG9yLWJvdHRvbSB0ZXh0LW5vd3JhcFwiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwic21hbGwgbS1iLTAgbS1yLWF1dG9cIj57eyAnQWN0aXZlIHN1YnNjcmliZXJzJyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm0tbC0xNlwiPnt7IG92ZXJ2aWV3LnRvcGljLmFjdGl2ZVN1YnNjcmliZXJzIHwgbnVtYmVyIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbGk+XG5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJwLXQtNCBwLWItNCBkLWZsZXggc2VwYXJhdG9yLWJvdHRvbSB0ZXh0LW5vd3JhcFwiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwic21hbGwgbS1iLTAgbS1yLWF1dG9cIj57eyAnVG90YWwgc3Vic2NyaWJlcnMnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibS1sLTE2XCI+e3sgb3ZlcnZpZXcudG9waWMuc3Vic2NyaWJlcnMgfCBudW1iZXIgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9saT5cblxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInAtdC00IHAtYi00IGQtZmxleCBzZXBhcmF0b3ItYm90dG9tIHRleHQtbm93cmFwXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzbWFsbCBtLWItMCBtLXItYXV0b1wiPlxuICAgICAgICAgICAgICAgICAgICB7eyAnVG90YWwgdW5hY2tub3dsZWRnZWQgbWVzc2FnZXMnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtLWwtMTZcIj57eyBvdmVydmlldy50b3BpYy51bmFja01zZ0JhY2tsb2cgfCBudW1iZXIgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9saT5cblxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInAtdC00IHAtYi00IGQtZmxleCBzZXBhcmF0b3ItYm90dG9tIHRleHQtbm93cmFwXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzbWFsbCBtLWItMCBtLXItYXV0b1wiPlxuICAgICAgICAgICAgICAgICAgICB7eyAnTWVzc2FnZSByYXRlIGluJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibS1sLTE2XCJcbiAgICAgICAgICAgICAgICAgICAgbmdOb25CaW5kYWJsZVxuICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgICAgW3RyYW5zbGF0ZVBhcmFtc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZXNQZXJTZWNvbmQ6IG92ZXJ2aWV3LnRvcGljLm1zZ1JhdGVJbiB8IG51bWJlclxuICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3sgbWVzc2FnZXNQZXJTZWNvbmQgfX0gbXNnL3NcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2xpPlxuXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicC10LTQgcC1iLTQgZC1mbGV4IHRleHQtbm93cmFwXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzbWFsbCBtLWItMCBtLXItYXV0b1wiPlxuICAgICAgICAgICAgICAgICAgICB7eyAnTWVzc2FnZSByYXRlIG91dCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm0tbC0xNlwiXG4gICAgICAgICAgICAgICAgICAgIG5nTm9uQmluZGFibGVcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICAgIFt0cmFuc2xhdGVQYXJhbXNdPVwie1xuICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VzUGVyU2Vjb25kOiBvdmVydmlldy50b3BpYy5tc2dSYXRlT3V0IHwgbnVtYmVyXG4gICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7eyBtZXNzYWdlc1BlclNlY29uZCB9fSBtc2cvc1xuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxuICAgICAgICA8ZmllbGRzZXQgY2xhc3M9XCJjOHktZmllbGRzZXQgYzh5LWZpZWxkc2V0LS1sZ1wiPlxuICAgICAgICAgIDxsZWdlbmQgdHJhbnNsYXRlPlRvcGljIG1lc3NhZ2UgYmFja2xvZzwvbGVnZW5kPlxuXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvYWRpbmckIHwgYXN5bmM7IGVsc2UgdG9waWNCYWNrbG9nXCI+XG4gICAgICAgICAgICA8Yzh5LWxvYWRpbmc+PC9jOHktbG9hZGluZz5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdG9waWNCYWNrbG9nPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm92ZXJ2aWV3JCB8IGFzeW5jIGFzIG92ZXJ2aWV3XCI+XG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtdW5zdHlsZWQgc21hbGwgYW5pbWF0ZWQgZmFkZUluXCI+XG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicC10LTQgcC1iLTQgZC1mbGV4IHNlcGFyYXRvci1ib3R0b20gdGV4dC1ub3dyYXBcIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNtYWxsIG0tYi0wIG0tci1hdXRvXCJcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIEJhY2tsb2cgdXNhZ2VcbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8YXBwLXVzYWdlIFtwZXJjZW50YWdlXT1cIm92ZXJ2aWV3LnRvcGljLmJhY2tsb2dVc2FnZVBlcmNlbnRhZ2VcIj48L2FwcC11c2FnZT5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibS1sLTE2XCI+e3sgb3ZlcnZpZXcudG9waWMuYmFja2xvZ1NpemUgfCBieXRlcyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2xpPlxuXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicC10LTQgcC1iLTQgZC1mbGV4IHRleHQtbm93cmFwXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzbWFsbCBtLWItMCBtLXItYXV0b1wiXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICBCYWNrbG9nIHF1b3RhXG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtLWwtMTZcIj5cbiAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICBvdmVydmlldy5wb2xpY2llcy5iYWNrbG9nUXVvdGE/LmxpbWl0ID4gMFxuICAgICAgICAgICAgICAgICAgICAgICAgPyAob3ZlcnZpZXcucG9saWNpZXMuYmFja2xvZ1F1b3RhPy5saW1pdCB8IGJ5dGVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAnLSdcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9maWVsZHNldD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGM4eS1kYXRhLWdyaWRcbiAgICBjbGFzcz1cImNvbnRlbnQtZnVsbHBhZ2UgZC1mbGV4IGQtY29sIGJvcmRlci10b3AgYm9yZGVyLWJvdHRvbVwiXG4gICAgW3RpdGxlXT1cInRhYmxlVGl0bGUgfCB0cmFuc2xhdGVcIlxuICAgIFtsb2FkaW5nSXRlbXNMYWJlbF09XCJsb2FkaW5nSXRlbXNMYWJlbCB8IHRyYW5zbGF0ZVwiXG4gICAgW2xvYWRNb3JlSXRlbXNMYWJlbF09XCJsb2FkTW9yZUl0ZW1zTGFiZWwgfCB0cmFuc2xhdGVcIlxuICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIlxuICAgIFtwYWdpbmF0aW9uXT1cInBhZ2luYXRpb25cIlxuICAgIFtzZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrXT1cInNlcnZlclNpZGVEYXRhQ2FsbGJhY2tcIlxuICAgIFtyZWZyZXNoXT1cInJlZnJlc2hcIlxuICAgIFtoaWRlUmVsb2FkXT1cInRydWVcIlxuICAgIFtzZWxlY3RhYmxlXT1cInNlbGVjdGFibGVcIlxuICAgIFthY3Rpb25Db250cm9sc109XCJhY3Rpb25Db250cm9sc1wiXG4gICAgW2J1bGtBY3Rpb25Db250cm9sc109XCJidWxrQWN0aW9uQ29udHJvbHNcIlxuICA+XG4gICAgPGM4eS11aS1lbXB0eS1zdGF0ZVxuICAgICAgW2ljb25dPVwic3RhdHM/LnNpemUgPiAwID8gJ3NlYXJjaCcgOiAnaW5wdXQnXCJcbiAgICAgIFt0aXRsZV09XCJzdGF0cz8uc2l6ZSA+IDAgPyAobm9SZXN1bHRzTWVzc2FnZSB8IHRyYW5zbGF0ZSkgOiAobm9EYXRhTWVzc2FnZSB8IHRyYW5zbGF0ZSlcIlxuICAgICAgW3N1YnRpdGxlXT1cInN0YXRzPy5zaXplID4gMCA/IChub1Jlc3VsdHNTdWJ0aXRsZSB8IHRyYW5zbGF0ZSkgOiAobm9EYXRhU3VidGl0bGUgfCB0cmFuc2xhdGUpXCJcbiAgICAgICplbXB0eVN0YXRlQ29udGV4dD1cImxldCBzdGF0c1wiXG4gICAgICBbaG9yaXpvbnRhbF09XCJzdGF0cz8uc2l6ZSA+IDBcIlxuICAgID48L2M4eS11aS1lbXB0eS1zdGF0ZT5cblxuICAgIDxjOHktY29sdW1uIG5hbWU9XCJuYW1lXCI+XG4gICAgICA8bmctY29udGFpbmVyICpjOHlDZWxsUmVuZGVyZXJEZWY9XCJsZXQgY29udGV4dFwiPlxuICAgICAgICA8c3BhbiB0aXRsZT1cInt7IGNvbnRleHQudmFsdWUgfX1cIj5cbiAgICAgICAgICB7eyBjb250ZXh0LnZhbHVlIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvYzh5LWNvbHVtbj5cblxuICAgIDxjOHktY29sdW1uIG5hbWU9XCJhY3RpdmVDbGllbnRzXCI+XG4gICAgICA8bmctY29udGFpbmVyICpjOHlDZWxsUmVuZGVyZXJEZWY9XCJsZXQgY29udGV4dFwiPlxuICAgICAgICA8c3BhbiB0aXRsZT1cInt7IGNvbnRleHQudmFsdWUgfCBudW1iZXIgfX1cIj5cbiAgICAgICAgICB7eyBjb250ZXh0LnZhbHVlIHwgbnVtYmVyIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvYzh5LWNvbHVtbj5cblxuICAgIDxjOHktY29sdW1uIG5hbWU9XCJtZXNzYWdlQWNrUmF0ZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqYzh5Q2VsbFJlbmRlcmVyRGVmPVwibGV0IGNvbnRleHRcIj5cbiAgICAgICAgPHNwYW4gdGl0bGU9XCJ7eyBjb250ZXh0LnZhbHVlIHwgbnVtYmVyIH19XCI+XG4gICAgICAgICAge3sgY29udGV4dC52YWx1ZSB8IG51bWJlciB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2M4eS1jb2x1bW4+XG5cbiAgICA8Yzh5LWNvbHVtbiBuYW1lPVwibGFzdEFja25vd2xlZGdlRGF0ZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqYzh5Q2VsbFJlbmRlcmVyRGVmPVwibGV0IGNvbnRleHRcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICB0aXRsZT1cInt7IGNvbnRleHQudmFsdWUgfX1cIlxuICAgICAgICAgICpuZ0lmPVwiY29udGV4dC52YWx1ZTsgZWxzZSBub0xhc3RBY2tud29sZGVnZURhdGVcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgY29udGV4dC52YWx1ZSB8IHJlbGF0aXZlVGltZSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9MYXN0QWNrbndvbGRlZ2VEYXRlPiZuZGFzaDs8L25nLXRlbXBsYXRlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9jOHktY29sdW1uPlxuXG4gICAgPGM4eS1jb2x1bW4gbmFtZT1cInVuYWNrTXNnQmFja2xvZ1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqYzh5Q2VsbFJlbmRlcmVyRGVmPVwibGV0IGNvbnRleHRcIj5cbiAgICAgICAgPHNwYW4gdGl0bGU9XCJ7eyBjb250ZXh0LnZhbHVlIHwgbnVtYmVyIH19XCI+XG4gICAgICAgICAge3sgY29udGV4dC52YWx1ZSB8IG51bWJlciB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2M4eS1jb2x1bW4+XG5cbiAgICA8Yzh5LWNvbHVtbiBuYW1lPVwiYmFja2xvZ1VzYWdlUGVyY2VudGFnZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqYzh5Q2VsbFJlbmRlcmVyRGVmPVwibGV0IGNvbnRleHRcIj5cbiAgICAgICAgPHNwYW4gdGl0bGU9XCJ7eyBjb250ZXh0LnZhbHVlIC8gMTAwIHwgcGVyY2VudDogJzEuMC0yJyB9fVwiPlxuICAgICAgICAgIHt7IGNvbnRleHQudmFsdWUgLyAxMDAgfCBwZXJjZW50OiAnMS4wLTInIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvYzh5LWNvbHVtbj5cbiAgPC9jOHktZGF0YS1ncmlkPlxuPC9kaXY+XG4iXX0=
137
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9waWMtc3Vic2NyaWJlcnMtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9tZXNzYWdpbmctbWFuYWdlbWVudC9tZXNzYWdpbmcvdG9waWMvdG9waWMtc3Vic2NyaWJlcnMtdmlldy90b3BpYy1zdWJzY3JpYmVycy12aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL21lc3NhZ2luZy1tYW5hZ2VtZW50L21lc3NhZ2luZy90b3BpYy90b3BpYy1zdWJzY3JpYmVycy12aWV3L3RvcGljLXN1YnNjcmliZXJzLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLHNCQUFzQixFQUV0QixlQUFlLEVBQ2YsZ0JBQWdCLEVBRWhCLFNBQVMsRUFDVCxxQkFBcUIsRUFDckIsZ0JBQWdCLEVBRWhCLGlCQUFpQixFQUNqQixjQUFjLEVBRWQsbUJBQW1CLEVBQ25CLDBCQUEwQixFQUMxQixPQUFPLEVBQ1AsWUFBWSxFQUNaLGFBQWEsRUFDYixnQkFBZ0IsRUFFaEIsV0FBVyxFQUNYLGdCQUFnQixFQUdqQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ3hGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxlQUFlLEVBQUUs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VUFBVTthQUNwQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsK0JBQStCLENBQUMsMEJBQTBCLENBQUMsV0FBVyxFQUFFLEdBQUcsRUFBRSxDQUNoRixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUNwQixDQUFDO0lBQ0osQ0FBQzsrR0FySVUsNkJBQTZCO21HQUE3Qiw2QkFBNkIsZ0lBc0U3QixpQkFBaUIsOERDM0k5QixnN1FBdU9BLDJDRHBMSSxjQUFjLDJqQ0FDZCxXQUFXLDhDQUNYLFlBQVksbUlBQ1oscUJBQXFCLG1FQUNyQixnQkFBZ0IsZ0RBQ2hCLGdCQUFnQixpREFDaEIsWUFBWSwwVUFDWixTQUFTLDZDQUNULGdCQUFnQixzUUFDaEIsY0FBYyxnR0FDZCxzQkFBc0IsMEpBQ3RCLGFBQWEsMkVBQ2IsbUJBQW1CLG9IQUNuQiwwQkFBMEIsZ0VBQzFCLGdCQUFnQjs7NEZBSVAsNkJBQTZCO2tCQXRCekMsU0FBUzsrQkFDRSw0QkFBNEIsY0FDMUIsSUFBSSxXQUNQO3dCQUNQLGNBQWM7d0JBQ2QsV0FBVzt3QkFDWCxZQUFZO3dCQUNaLHFCQUFxQjt3QkFDckIsZ0JBQWdCO3dCQUNoQixnQkFBZ0I7d0JBQ2hCLFlBQVk7d0JBQ1osU0FBUzt3QkFDVCxnQkFBZ0I7d0JBQ2hCLGNBQWM7d0JBQ2Qsc0JBQXNCO3dCQUN0QixhQUFhO3dCQUNiLG1CQUFtQjt3QkFDbkIsMEJBQTBCO3dCQUMxQixnQkFBZ0I7cUJBQ2pCOzhCQXlFK0MsUUFBUTtzQkFBdkQsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIERlc3Ryb3lSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgaW5qZWN0LFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBY3Rpb25CYXJJdGVtQ29tcG9uZW50LFxuICBBY3Rpb25Db250cm9sLFxuICBBcHBTdGF0ZVNlcnZpY2UsXG4gIEJyZWFkY3J1bWJNb2R1bGUsXG4gIEJ1bGtBY3Rpb25Db250cm9sLFxuICBCeXRlc1BpcGUsXG4gIEM4eVRyYW5zbGF0ZURpcmVjdGl2ZSxcbiAgQzh5VHJhbnNsYXRlUGlwZSxcbiAgQ29sdW1uLFxuICBEYXRhR3JpZENvbXBvbmVudCxcbiAgRGF0YUdyaWRNb2R1bGUsXG4gIERhdGFTb3VyY2VNb2RpZmllcixcbiAgRW1wdHlTdGF0ZUNvbXBvbmVudCxcbiAgRW1wdHlTdGF0ZUNvbnRleHREaXJlY3RpdmUsXG4gIGdldHRleHQsXG4gIEhlYWRlck1vZHVsZSxcbiAgSWNvbkRpcmVjdGl2ZSxcbiAgTG9hZGluZ0NvbXBvbmVudCxcbiAgUGFnaW5hdGlvbixcbiAgUGVybWlzc2lvbnMsXG4gIFJlbGF0aXZlVGltZVBpcGUsXG4gIFNlcnZlclNpZGVEYXRhQ2FsbGJhY2ssXG4gIFNlcnZlclNpZGVEYXRhUmVzdWx0XG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBEZWNpbWFsUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNZXNzYWdpbmdUb3BpY1R5cGUgfSBmcm9tICcuLi8uLi8uLi9hcGkvbW9kZWwvdG9waWNUeXBlJztcbmltcG9ydCB7IE1lc3NhZ2luZ1RvcGljc1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9hcGkvc2VydmljZXMvbWVzc2FnaW5nLXRvcGljcy5zZXJ2aWNlJztcbmltcG9ydCB7IE1lc3NhZ2luZ05hbWVzcGFjZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vYXBpL3NlcnZpY2VzL21lc3NhZ2luZy1uYW1lc3BhY2VzLnNlcnZpY2UnO1xuaW1wb3J0IHsgTkFNRVNQQUNFX1BST1BTIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvbmFtZXNwYWNlLXByb3BzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFRvcGljU3Vic2NyaWJlcnNEYXRhR3JpZFNlcnZpY2UgfSBmcm9tICcuL3RvcGljLXN1YnNjcmliZXJzLWRhdGEtZ3JpZC5zZXJ2aWNlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgVXNhZ2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9zaGFyZWQvdXNhZ2UvdXNhZ2UuY29tcG9uZW50JztcbmltcG9ydCB7IE1lc3NhZ2luZ1N1YnNjcmliZXIgfSBmcm9tICcuLi8uLi8uLi9hcGkvbW9kZWwvc3Vic2NyaWJlcic7XG5pbXBvcnQgeyBNZXNzYWdpbmdTdWJzY3JpYmVyVG9EZWxldGUgfSBmcm9tICcuLi8uLi8uLi9hcGkvbW9kZWwvc3Vic2NyaWJlclRvRGVsZXRlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXRvcGljLXN1YnNjcmliZXJzLXZpZXcnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgRGF0YUdyaWRNb2R1bGUsXG4gICAgRGVjaW1hbFBpcGUsXG4gICAgSGVhZGVyTW9kdWxlLFxuICAgIEM4eVRyYW5zbGF0ZURpcmVjdGl2ZSxcbiAgICBSZWxhdGl2ZVRpbWVQaXBlLFxuICAgIEM4eVRyYW5zbGF0ZVBpcGUsXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEJ5dGVzUGlwZSxcbiAgICBCcmVhZGNydW1iTW9kdWxlLFxuICAgIFVzYWdlQ29tcG9uZW50LFxuICAgIEFjdGlvbkJhckl0ZW1Db21wb25lbnQsXG4gICAgSWNvbkRpcmVjdGl2ZSxcbiAgICBFbXB0eVN0YXRlQ29tcG9uZW50LFxuICAgIEVtcHR5U3RhdGVDb250ZXh0RGlyZWN0aXZlLFxuICAgIExvYWRpbmdDb21wb25lbnRcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3RvcGljLXN1YnNjcmliZXJzLXZpZXcuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFRvcGljU3Vic2NyaWJlcnNWaWV3Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgYXBwU3RhdGUgPSBpbmplY3QoQXBwU3RhdGVTZXJ2aWNlKTtcbiAgbmFtZXNwYWNlc1NlcnZpY2UgPSBpbmplY3QoTWVzc2FnaW5nTmFtZXNwYWNlc1NlcnZpY2UpO1xuICB0b3BpY3NTZXJ2aWNlID0gaW5qZWN0KE1lc3NhZ2luZ1RvcGljc1NlcnZpY2UpO1xuICB0b3BpY1N1YnNjcmliZXJzRGF0YUdyaWRTZXJ2aWNlID0gaW5qZWN0KFRvcGljU3Vic2NyaWJlcnNEYXRhR3JpZFNlcnZpY2UpO1xuICB0cmFuc2xhdGVTZXJ2aWNlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuICBwZXJtaXNzaW9ucyA9IGluamVjdChQZXJtaXNzaW9ucyk7XG4gIGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgbG9hZGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVmcmVzaCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICB0ZW5hbnRJZCQgPSB0aGlzLmFwcFN0YXRlLmN1cnJlbnRUZW5hbnQucGlwZShtYXAodGVuYW50ID0+IHRlbmFudC5uYW1lKSk7XG4gIG5hbWVzcGFjZUlkJCA9IHRoaXMucm91dGUucGFyYW1zLnBpcGUobWFwKHBhcmFtcyA9PiBwYXJhbXNbJ25hbWVzcGFjZSddIGFzIHN0cmluZykpO1xuICBuYW1lc3BhY2VMYWJlbCQgPSB0aGlzLm5hbWVzcGFjZUlkJC5waXBlKFxuICAgIG1hcChuYW1lc3BhY2VJZCA9PiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChOQU1FU1BBQ0VfUFJPUFNbbmFtZXNwYWNlSWRdLmxhYmVsKSlcbiAgKTtcbiAgdG9waWNJZCQgPSB0aGlzLnJvdXRlLnBhcmFtcy5waXBlKG1hcChwYXJhbXMgPT4gcGFyYW1zWyd0b3BpYyddIGFzIHN0cmluZykpO1xuICBvdmVydmlldyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLnRlbmFudElkJCwgdGhpcy5uYW1lc3BhY2VJZCQsIHRoaXMudG9waWNJZCQsIHRoaXMucmVmcmVzaF0pLnBpcGUoXG4gICAgdGFwKCgpID0+IHRoaXMubG9hZGluZyQubmV4dCh0cnVlKSksXG4gICAgc3dpdGNoTWFwKGFzeW5jIChbdGVuYW50SWQsIG5hbWVzcGFjZUlkLCB0b3BpY0lkXSkgPT4gKHtcbiAgICAgIHRvcGljOiAoXG4gICAgICAgIGF3YWl0IHRoaXMudG9waWNzU2VydmljZS5kZXRhaWwoe1xuICAgICAgICAgIHRlbmFudDogdGVuYW50SWQsXG4gICAgICAgICAgbmFtZXNwYWNlOiBuYW1lc3BhY2VJZCxcbiAgICAgICAgICB0b3BpYzogdG9waWNJZCxcbiAgICAgICAgICB0eXBlOiBNZXNzYWdpbmdUb3BpY1R5cGUuUGVyc2lzdGVudFxuICAgICAgICB9KVxuICAgICAgKS5kYXRhLFxuICAgICAgcG9saWNpZXM6IGF3YWl0IHRoaXMubmFtZXNwYWNlc1NlcnZpY2UuZ2V0TmFtZXNwYWNlUG9saWNpZXModGVuYW50SWQsIG5hbWVzcGFjZUlkKVxuICAgIH0pKSxcbiAgICB0YXAoKCkgPT4gdGhpcy5sb2FkaW5nJC5uZXh0KGZhbHNlKSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcbiAgdG9waWNOYW1lJCA9IHRoaXMub3ZlcnZpZXckLnBpcGUobWFwKG92ZXJ2aWV3ID0+IG92ZXJ2aWV3LnRvcGljLm5hbWUpKTtcblxuICB0YWJsZVRpdGxlID0gZ2V0dGV4dCgnU3Vic2NyaWJlcnMnKTtcbiAgbG9hZGluZ0l0ZW1zTGFiZWwgPSBnZXR0ZXh0KCdMb2FkaW5nIHN1YnNjcmliZXJzLi4uJyk7XG4gIGxvYWRNb3JlSXRlbXNMYWJlbCA9IGdldHRleHQoJ0xvYWQgbW9yZSBzdWJzY3JpYmVycycpO1xuICBub1Jlc3VsdHNNZXNzYWdlID0gZ2V0dGV4dCgnTm8gbWF0Y2hpbmcgc3Vic2NyaWJlcnMgZm91bmQuJyk7XG4gIG5vUmVzdWx0c1N1YnRpdGxlID0gZ2V0dGV4dCgnUmVmaW5lIHlvdXIgc2VhcmNoIHRlcm1zIG9yIGNoZWNrIHlvdXIgc3BlbGxpbmcuJyk7XG4gIG5vRGF0YU1lc3NhZ2UgPSBnZXR0ZXh0KCdObyBzdWJzY3JpYmVycyB0byBkaXNwbGF5LicpO1xuICBub0RhdGFTdWJ0aXRsZSA9IGdldHRleHQoJ0NyZWF0ZSBuZXcgc3Vic2NyaWJlcnMgdG8gbW9uaXRvciB0aGVtIGhlcmUuJyk7XG5cbiAgY29sdW1uczogQ29sdW1uW10gPSB0aGlzLnRvcGljU3Vic2NyaWJlcnNEYXRhR3JpZFNlcnZpY2UuZ2V0Q29sdW1ucygpO1xuICBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uID0ge1xuICAgIHBhZ2VTaXplOiAyMCxcbiAgICBjdXJyZW50UGFnZTogMVxuICB9O1xuXG4gIHNlbGVjdGFibGUgPSB0cnVlO1xuICBhY3Rpb25Db250cm9sczogQWN0aW9uQ29udHJvbFtdID0gW1xuICAgIHtcbiAgICAgIHR5cGU6ICd1bnN1YnNjcmliZVN1YnNjcmliZXInLFxuICAgICAgaWNvbjogJ3Vuc3Vic2NyaWJlJyxcbiAgICAgIHRleHQ6IGdldHRleHQoJ1Vuc3Vic2NyaWJlJyksXG4gICAgICBjYWxsYmFjazogKHN1YnNjcmliZXI6IE1lc3NhZ2luZ1N1YnNjcmliZXIpID0+IHRoaXMudW5zdWJzY3JpYmVTdWJzY3JpYmVyKHN1YnNjcmliZXIpLFxuICAgICAgc2hvd0lmOiAoKSA9PiB0aGlzLnBlcm1pc3Npb25zLmhhc1JvbGUoUGVybWlzc2lvbnMuUk9MRV9URU5BTlRfTUFOQUdFTUVOVF9BRE1JTilcbiAgICB9XG4gIF07XG4gIGJ1bGtBY3Rpb25Db250cm9sczogQnVsa0FjdGlvbkNvbnRyb2xbXSA9IFtcbiAgICB7XG4gICAgICB0eXBlOiAndW5zdWJzY3JpYmVTdWJzY3JpYmVyJyxcbiAgICAgIGljb246ICd1bnN1YnNjcmliZScsXG4gICAgICB0ZXh0OiBnZXR0ZXh0KCdVbnN1YnNjcmliZScpLFxuICAgICAgY2FsbGJhY2s6IChzdWJzY3JpYmVyc05hbWVzOiBzdHJpbmdbXSkgPT4gdGhpcy5idWxrVW5zdWJzY3JpYmVTdWJzY3JpYmVycyhzdWJzY3JpYmVyc05hbWVzKSxcbiAgICAgIHNob3dJZjogKCkgPT4gdGhpcy5wZXJtaXNzaW9ucy5oYXNSb2xlKFBlcm1pc3Npb25zLlJPTEVfVEVOQU5UX01BTkFHRU1FTlRfQURNSU4pXG4gICAgfVxuICBdO1xuICBAVmlld0NoaWxkKERhdGFHcmlkQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KSBkYXRhR3JpZDogRGF0YUdyaWRDb21wb25lbnQ7XG5cbiAgc2VydmVyU2lkZURhdGFDYWxsYmFjazogU2VydmVyU2lkZURhdGFDYWxsYmFjayA9IHRoaXMub25EYXRhU291cmNlTW9kaWZpZXIuYmluZCh0aGlzKTtcbiAgYXN5bmMgb25EYXRhU291cmNlTW9kaWZpZXIoXG4gICAgZGF0YVNvdXJjZU1vZGlmaWVyOiBEYXRhU291cmNlTW9kaWZpZXJcbiAgKTogUHJvbWlzZTxTZXJ2ZXJTaWRlRGF0YVJlc3VsdD4ge1xuICAgIHJldHVybiBmaXJzdFZhbHVlRnJvbShcbiAgICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMudGVuYW50SWQkLCB0aGlzLm5hbWVzcGFjZUlkJCwgdGhpcy50b3BpY0lkJF0pLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoW3RlbmFudElkLCBuYW1lc3BhY2VJZCwgdG9waWNJZF0pID0+XG4gICAgICAgICAgdGhpcy50b3BpY1N1YnNjcmliZXJzRGF0YUdyaWRTZXJ2aWNlLmdldFNlcnZlclNpZGVEYXRhKFxuICAgICAgICAgICAgdGVuYW50SWQsXG4gICAgICAgICAgICBuYW1lc3BhY2VJZCxcbiAgICAgICAgICAgIHRvcGljSWQsXG4gICAgICAgICAgICBNZXNzYWdpbmdUb3BpY1R5cGUuUGVyc2lzdGVudCxcbiAgICAgICAgICAgIGRhdGFTb3VyY2VNb2RpZmllclxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5yZWZyZXNoLmVtaXQoKTtcbiAgfVxuXG4gIGFzeW5jIHVuc3Vic2NyaWJlU3Vic2NyaWJlcihzdWJzY3JpYmVyOiBNZXNzYWdpbmdTdWJzY3JpYmVyKSB7XG4gICAgY29uc3QgdGVuYW50ID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy50ZW5hbnRJZCQpO1xuICAgIGNvbnN0IG5hbWVzcGFjZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMubmFtZXNwYWNlSWQkKTtcbiAgICBjb25zdCB0b3BpYyA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMudG9waWNJZCQpO1xuICAgIHRoaXMudG9waWNTdWJzY3JpYmVyc0RhdGFHcmlkU2VydmljZS51bnN1YnNjcmliZVN1YnNjcmliZXIoXG4gICAgICB7XG4gICAgICAgIC4uLnN1YnNjcmliZXIsXG4gICAgICAgIHRlbmFudCxcbiAgICAgICAgbmFtZXNwYWNlLFxuICAgICAgICB0b3BpYyxcbiAgICAgICAgdHlwZTogTWVzc2FnaW5nVG9waWNUeXBlLlBlcnNpc3RlbnRcbiAgICAgIH0sXG4gICAgICAoKSA9PiB0aGlzLnJlZnJlc2guZW1pdCgpXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGJ1bGtVbnN1YnNjcmliZVN1YnNjcmliZXJzKHN1YnNjcmliZXJzTmFtZXM6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGVuYW50ID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy50ZW5hbnRJZCQpO1xuICAgIGNvbnN0IG5hbWVzcGFjZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMubmFtZXNwYWNlSWQkKTtcbiAgICBjb25zdCB0b3BpYyA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMudG9waWNJZCQpO1xuICAgIGNvbnN0IGFsbFN1YnNjcmliZXJzOiBNZXNzYWdpbmdTdWJzY3JpYmVyW10gPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcbiAgICAgIHRoaXMuZGF0YUdyaWQuZGF0YVNvdXJjZS5kYXRhJFxuICAgICk7XG5cbiAgICBjb25zdCBzdWJzY3JpYmVyczogTWVzc2FnaW5nU3Vic2NyaWJlclRvRGVsZXRlW10gPSBzdWJzY3JpYmVyc05hbWVzLm1hcChzdWJzY3JpYmVyTmFtZSA9PiB7XG4gICAgICBjb25zdCBzdWJzY3JpYmVyID0gYWxsU3Vic2NyaWJlcnMuZmluZChzdWJzY3JpYmVyID0+IHN1YnNjcmliZXIubmFtZSA9PT0gc3Vic2NyaWJlck5hbWUpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3Vic2NyaWJlcixcbiAgICAgICAgdGVuYW50LFxuICAgICAgICBuYW1lc3BhY2UsXG4gICAgICAgIHRvcGljLFxuICAgICAgICB0eXBlOiBNZXNzYWdpbmdUb3BpY1R5cGUuUGVyc2lzdGVudFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIHRoaXMudG9waWNTdWJzY3JpYmVyc0RhdGFHcmlkU2VydmljZS5idWxrVW5zdWJzY3JpYmVTdWJzY3JpYmVycyhzdWJzY3JpYmVycywgKCkgPT5cbiAgICAgIHRoaXMucmVmcmVzaC5lbWl0KClcbiAgICApO1xuICB9XG59XG4iLCI8Yzh5LXRpdGxlPnt7IHRvcGljTmFtZSQgfCBhc3luYyB9fTwvYzh5LXRpdGxlPlxuXG48Yzh5LWJyZWFkY3J1bWI+XG4gIDxjOHktYnJlYWRjcnVtYi1pdGVtXG4gICAgW2ljb25dPVwiJ21vbml0b3JpbmcnXCJcbiAgICBbbGFiZWxdPVwiJ01vbml0b3JpbmcnIHwgdHJhbnNsYXRlXCJcbiAgPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbiAgPGM4eS1icmVhZGNydW1iLWl0ZW1cbiAgICBbbGFiZWxdPVwiJ01lc3NhZ2luZyBzZXJ2aWNlJyB8IHRyYW5zbGF0ZVwiXG4gICAgW3BhdGhdPVwiJy9tb25pdG9yaW5nL21lc3NhZ2luZy1zZXJ2aWNlJ1wiXG4gID48L2M4eS1icmVhZGNydW1iLWl0ZW0+XG4gIDxjOHktYnJlYWRjcnVtYi1pdGVtXG4gICAgW2xhYmVsXT1cIm5hbWVzcGFjZUxhYmVsJCB8IGFzeW5jXCJcbiAgICBbcGF0aF09XCInL21vbml0b3JpbmcvbWVzc2FnaW5nLXNlcnZpY2UvbmFtZXNwYWNlLycgKyAobmFtZXNwYWNlSWQkIHwgYXN5bmMpXCJcbiAgPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbiAgPGM4eS1icmVhZGNydW1iLWl0ZW0gW2xhYmVsXT1cInRvcGljTmFtZSQgfCBhc3luY1wiPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbjwvYzh5LWJyZWFkY3J1bWI+XG5cbjxjOHktYWN0aW9uLWJhci1pdGVtIFtwbGFjZW1lbnRdPVwiJ3JpZ2h0J1wiPlxuICA8YVxuICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rXCJcbiAgICB0aXRsZT1cInt7ICdSZWxvYWQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAoY2xpY2spPVwicmVmcmVzaC5lbWl0KClcIlxuICA+XG4gICAgPGlcbiAgICAgIGM4eUljb249XCJyZWZyZXNoXCJcbiAgICAgIFtuZ0NsYXNzXT1cInsgJ2ljb24tc3Bpbic6IGxvYWRpbmckIHwgYXN5bmMgfVwiXG4gICAgPjwvaT5cbiAgICB7eyAnUmVsb2FkJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2E+XG48L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG5cbjxkaXYgY2xhc3M9XCJjYXJkIGNvbnRlbnQtZnVsbHBhZ2UgZC1mbGV4IGQtY29sXCI+XG4gIDxkaXYgY2xhc3M9XCJiZy1sZXZlbC0xIHNlcGFyYXRvci1ib3R0b20gZmxleC1uby1zaHJpbmtcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ibG9ja1wiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImNvbC1tZC00IG0tYi0yNCBjb2wteHMtMTIgZC1mbGV4IHAtdC0yNCBnYXAtMTYgdGV4dC1kZWZhdWx0IGEtaS1jZW50ZXIgYS1zLXN0cmV0Y2hcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgZC1jb2xcIj5cbiAgICAgICAgICA8aVxuICAgICAgICAgICAgY2xhc3M9XCJtLWItOCBpY29uLTQwIGM4eS1pY29uLWR1b2NvbG9yXCJcbiAgICAgICAgICAgIFtjOHlJY29uXT1cIidkYXktdmlldydcIlxuICAgICAgICAgID48L2k+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0YWcgdGFnLS1kZWZhdWx0XCI+e3sgJ1RvcGljJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiaDRcIj57eyB0b3BpY05hbWUkIHwgYXN5bmMgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxuICAgICAgICA8ZmllbGRzZXQgY2xhc3M9XCJjOHktZmllbGRzZXQgYzh5LWZpZWxkc2V0LS1sZ1wiPlxuICAgICAgICAgIDxsZWdlbmQgdHJhbnNsYXRlPlRvcGljIHVzYWdlPC9sZWdlbmQ+XG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibG9hZGluZyQgfCBhc3luYzsgZWxzZSB0b3BpY1N1bW1hcnlcIj5cbiAgICAgICAgICAgIDxjOHktbG9hZGluZz48L2M4eS1sb2FkaW5nPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICN0b3BpY1N1bW1hcnk+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib3ZlcnZpZXckIHwgYXN5bmMgYXMgb3ZlcnZpZXdcIj5cbiAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibGlzdC11bnN0eWxlZCBzbWFsbCBhbmltYXRlZCBmYWRlSW5cIj5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJwLXQtNCBwLWItNCBkLWZsZXggc2VwYXJhdG9yLWJvdHRvbSB0ZXh0LW5vd3JhcFwiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwic21hbGwgbS1iLTAgbS1yLWF1dG9cIj57eyAnQWN0aXZlIHN1YnNjcmliZXJzJyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm0tbC0xNlwiPnt7IG92ZXJ2aWV3LnRvcGljLmFjdGl2ZVN1YnNjcmliZXJzIHwgbnVtYmVyIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbGk+XG5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJwLXQtNCBwLWItNCBkLWZsZXggc2VwYXJhdG9yLWJvdHRvbSB0ZXh0LW5vd3JhcFwiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwic21hbGwgbS1iLTAgbS1yLWF1dG9cIj57eyAnVG90YWwgc3Vic2NyaWJlcnMnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibS1sLTE2XCI+e3sgb3ZlcnZpZXcudG9waWMuc3Vic2NyaWJlcnMgfCBudW1iZXIgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9saT5cblxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInAtdC00IHAtYi00IGQtZmxleCBzZXBhcmF0b3ItYm90dG9tIHRleHQtbm93cmFwXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzbWFsbCBtLWItMCBtLXItYXV0b1wiPlxuICAgICAgICAgICAgICAgICAgICB7eyAnVG90YWwgdW5hY2tub3dsZWRnZWQgbWVzc2FnZXMnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtLWwtMTZcIj57eyBvdmVydmlldy50b3BpYy51bmFja01zZ0JhY2tsb2cgfCBudW1iZXIgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9saT5cblxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInAtdC00IHAtYi00IGQtZmxleCBzZXBhcmF0b3ItYm90dG9tIHRleHQtbm93cmFwXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzbWFsbCBtLWItMCBtLXItYXV0b1wiPlxuICAgICAgICAgICAgICAgICAgICB7eyAnTWVzc2FnZSByYXRlIGluJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibS1sLTE2XCJcbiAgICAgICAgICAgICAgICAgICAgbmdOb25CaW5kYWJsZVxuICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgICAgW3RyYW5zbGF0ZVBhcmFtc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZXNQZXJTZWNvbmQ6IG92ZXJ2aWV3LnRvcGljLm1zZ1JhdGVJbiB8IG51bWJlclxuICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3sgbWVzc2FnZXNQZXJTZWNvbmQgfX0gbXNnL3NcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2xpPlxuXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicC10LTQgcC1iLTQgZC1mbGV4IHRleHQtbm93cmFwXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzbWFsbCBtLWItMCBtLXItYXV0b1wiPlxuICAgICAgICAgICAgICAgICAgICB7eyAnTWVzc2FnZSByYXRlIG91dCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm0tbC0xNlwiXG4gICAgICAgICAgICAgICAgICAgIG5nTm9uQmluZGFibGVcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICAgIFt0cmFuc2xhdGVQYXJhbXNdPVwie1xuICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VzUGVyU2Vjb25kOiBvdmVydmlldy50b3BpYy5tc2dSYXRlT3V0IHwgbnVtYmVyXG4gICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7eyBtZXNzYWdlc1BlclNlY29uZCB9fSBtc2cvc1xuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxuICAgICAgICA8ZmllbGRzZXQgY2xhc3M9XCJjOHktZmllbGRzZXQgYzh5LWZpZWxkc2V0LS1sZ1wiPlxuICAgICAgICAgIDxsZWdlbmQgdHJhbnNsYXRlPlRvcGljIG1lc3NhZ2UgYmFja2xvZzwvbGVnZW5kPlxuXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvYWRpbmckIHwgYXN5bmM7IGVsc2UgdG9waWNCYWNrbG9nXCI+XG4gICAgICAgICAgICA8Yzh5LWxvYWRpbmc+PC9jOHktbG9hZGluZz5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdG9waWNCYWNrbG9nPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm92ZXJ2aWV3JCB8IGFzeW5jIGFzIG92ZXJ2aWV3XCI+XG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtdW5zdHlsZWQgc21hbGwgYW5pbWF0ZWQgZmFkZUluXCI+XG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicC10LTQgcC1iLTQgZC1mbGV4IHNlcGFyYXRvci1ib3R0b20gdGV4dC1ub3dyYXBcIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNtYWxsIG0tYi0wIG0tci1hdXRvXCJcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIEJhY2tsb2cgdXNhZ2VcbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8YXBwLXVzYWdlIFtwZXJjZW50YWdlXT1cIm92ZXJ2aWV3LnRvcGljLmJhY2tsb2dVc2FnZVBlcmNlbnRhZ2VcIj48L2FwcC11c2FnZT5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibS1sLTE2XCI+e3sgb3ZlcnZpZXcudG9waWMuYmFja2xvZ1NpemUgfCBieXRlcyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2xpPlxuXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicC10LTQgcC1iLTQgZC1mbGV4IHRleHQtbm93cmFwXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzbWFsbCBtLWItMCBtLXItYXV0b1wiXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICBCYWNrbG9nIHF1b3RhXG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtLWwtMTZcIj5cbiAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICBvdmVydmlldy5wb2xpY2llcy5iYWNrbG9nUXVvdGE/LmxpbWl0ID4gMFxuICAgICAgICAgICAgICAgICAgICAgICAgPyAob3ZlcnZpZXcucG9saWNpZXMuYmFja2xvZ1F1b3RhPy5saW1pdCB8IGJ5dGVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAnLSdcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9maWVsZHNldD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGM4eS1kYXRhLWdyaWRcbiAgICBjbGFzcz1cImNvbnRlbnQtZnVsbHBhZ2UgZC1mbGV4IGQtY29sIGJvcmRlci10b3AgYm9yZGVyLWJvdHRvbVwiXG4gICAgW3RpdGxlXT1cInRhYmxlVGl0bGUgfCB0cmFuc2xhdGVcIlxuICAgIFtsb2FkaW5nSXRlbXNMYWJlbF09XCJsb2FkaW5nSXRlbXNMYWJlbCB8IHRyYW5zbGF0ZVwiXG4gICAgW2xvYWRNb3JlSXRlbXNMYWJlbF09XCJsb2FkTW9yZUl0ZW1zTGFiZWwgfCB0cmFuc2xhdGVcIlxuICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIlxuICAgIFtwYWdpbmF0aW9uXT1cInBhZ2luYXRpb25cIlxuICAgIFtzZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrXT1cInNlcnZlclNpZGVEYXRhQ2FsbGJhY2tcIlxuICAgIFtyZWZyZXNoXT1cInJlZnJlc2hcIlxuICAgIFtoaWRlUmVsb2FkXT1cInRydWVcIlxuICAgIFtzZWxlY3RhYmxlXT1cInNlbGVjdGFibGVcIlxuICAgIFthY3Rpb25Db250cm9sc109XCJhY3Rpb25Db250cm9sc1wiXG4gICAgW2J1bGtBY3Rpb25Db250cm9sc109XCJidWxrQWN0aW9uQ29udHJvbHNcIlxuICA+XG4gICAgPGM4eS11aS1lbXB0eS1zdGF0ZVxuICAgICAgW2ljb25dPVwic3RhdHM/LnNpemUgPiAwID8gJ3NlYXJjaCcgOiAnaW5wdXQnXCJcbiAgICAgIFt0aXRsZV09XCJzdGF0cz8uc2l6ZSA+IDAgPyAobm9SZXN1bHRzTWVzc2FnZSB8IHRyYW5zbGF0ZSkgOiAobm9EYXRhTWVzc2FnZSB8IHRyYW5zbGF0ZSlcIlxuICAgICAgW3N1YnRpdGxlXT1cInN0YXRzPy5zaXplID4gMCA/IChub1Jlc3VsdHNTdWJ0aXRsZSB8IHRyYW5zbGF0ZSkgOiAobm9EYXRhU3VidGl0bGUgfCB0cmFuc2xhdGUpXCJcbiAgICAgICplbXB0eVN0YXRlQ29udGV4dD1cImxldCBzdGF0c1wiXG4gICAgICBbaG9yaXpvbnRhbF09XCJzdGF0cz8uc2l6ZSA+IDBcIlxuICAgID48L2M4eS11aS1lbXB0eS1zdGF0ZT5cblxuICAgIDxjOHktY29sdW1uIG5hbWU9XCJuYW1lXCI+XG4gICAgICA8bmctY29udGFpbmVyICpjOHlDZWxsUmVuZGVyZXJEZWY9XCJsZXQgY29udGV4dFwiPlxuICAgICAgICA8c3BhbiB0aXRsZT1cInt7IGNvbnRleHQudmFsdWUgfX1cIj5cbiAgICAgICAgICB7eyBjb250ZXh0LnZhbHVlIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvYzh5LWNvbHVtbj5cblxuICAgIDxjOHktY29sdW1uIG5hbWU9XCJhY3RpdmVDbGllbnRzXCI+XG4gICAgICA8bmctY29udGFpbmVyICpjOHlDZWxsUmVuZGVyZXJEZWY9XCJsZXQgY29udGV4dFwiPlxuICAgICAgICA8c3BhbiB0aXRsZT1cInt7IGNvbnRleHQudmFsdWUgfCBudW1iZXIgfX1cIj5cbiAgICAgICAgICB7eyBjb250ZXh0LnZhbHVlIHwgbnVtYmVyIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvYzh5LWNvbHVtbj5cblxuICAgIDxjOHktY29sdW1uIG5hbWU9XCJtZXNzYWdlQWNrUmF0ZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqYzh5Q2VsbFJlbmRlcmVyRGVmPVwibGV0IGNvbnRleHRcIj5cbiAgICAgICAgPHNwYW4gdGl0bGU9XCJ7eyBjb250ZXh0LnZhbHVlIHwgbnVtYmVyIH19XCI+XG4gICAgICAgICAge3sgY29udGV4dC52YWx1ZSB8IG51bWJlciB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2M4eS1jb2x1bW4+XG5cbiAgICA8Yzh5LWNvbHVtbiBuYW1lPVwibGFzdEFja25vd2xlZGdlRGF0ZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqYzh5Q2VsbFJlbmRlcmVyRGVmPVwibGV0IGNvbnRleHRcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICB0aXRsZT1cInt7IGNvbnRleHQudmFsdWUgfX1cIlxuICAgICAgICAgICpuZ0lmPVwiY29udGV4dC52YWx1ZTsgZWxzZSBub0xhc3RBY2tud29sZGVnZURhdGVcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgY29udGV4dC52YWx1ZSB8IHJlbGF0aXZlVGltZSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9MYXN0QWNrbndvbGRlZ2VEYXRlPiZuZGFzaDs8L25nLXRlbXBsYXRlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9jOHktY29sdW1uPlxuXG4gICAgPGM4eS1jb2x1bW4gbmFtZT1cInVuYWNrTXNnQmFja2xvZ1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqYzh5Q2VsbFJlbmRlcmVyRGVmPVwibGV0IGNvbnRleHRcIj5cbiAgICAgICAgPHNwYW4gdGl0bGU9XCJ7eyBjb250ZXh0LnZhbHVlIHwgbnVtYmVyIH19XCI+XG4gICAgICAgICAge3sgY29udGV4dC52YWx1ZSB8IG51bWJlciB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2M4eS1jb2x1bW4+XG5cbiAgICA8Yzh5LWNvbHVtbiBuYW1lPVwiYmFja2xvZ1VzYWdlUGVyY2VudGFnZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqYzh5Q2VsbFJlbmRlcmVyRGVmPVwibGV0IGNvbnRleHRcIj5cbiAgICAgICAgPHNwYW4gdGl0bGU9XCJ7eyBjb250ZXh0LnZhbHVlIC8gMTAwIHwgcGVyY2VudDogJzEuMC0yJyB9fVwiPlxuICAgICAgICAgIHt7IGNvbnRleHQudmFsdWUgLyAxMDAgfCBwZXJjZW50OiAnMS4wLTInIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvYzh5LWNvbHVtbj5cbiAgPC9jOHktZGF0YS1ncmlkPlxuPC9kaXY+XG4iXX0=
@@ -127,7 +127,7 @@ export class SingleOperationsListComponent {
127
127
  }
128
128
  }
129
129
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SingleOperationsListComponent, deps: [{ token: i1.BulkOperationsService }], target: i0.ɵɵFactoryTarget.Component }); }
130
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: SingleOperationsListComponent, isStandalone: true, selector: "c8y-single-operations-list", inputs: { bulkOperation: "bulkOperation", readOnly: "readOnly" }, outputs: { onRetryFailedOperations: "onRetryFailedOperations" }, viewQueries: [{ propertyName: "statusFilter", first: true, predicate: StatusFilterComponent, descendants: true }, { propertyName: "dataGrid", first: true, predicate: DataGridComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container\n *ngIf=\"\n bulkOperation.progress.failed ||\n bulkOperation.progress.executing ||\n bulkOperation.progress.pending ||\n bulkOperation.progress.successful\n \"\n>\n <div\n class=\"legend form-block p-t-16 m-b-0\"\n translate\n >\n Operations\n </div>\n <div class=\"d-flex a-i-center\">\n <div class=\"d-flex a-i-center p-b-8\">\n <span\n class=\"m-r-4 text-medium\"\n translate\n >\n Filter by status\n </span>\n <c8y-status-filter\n small\n [options]=\"OPERATION_STATUS_OPTIONS_MAP\"\n (onFilterChanged)=\"reload($event)\"\n ></c8y-status-filter>\n </div>\n <div\n class=\"m-l-auto p-b-8\"\n *ngIf=\"!readOnly && bulkOperation.progress.failed > 0\"\n >\n <button\n class=\"btn btn-navbar\"\n title=\"{{ 'Retry failed operations' | translate }}\"\n (click)=\"retryBulkOperation()\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"repeat\"\n ></i>\n <span translate>Retry failed operations</span>\n </button>\n </div>\n </div>\n <c8y-data-grid\n [actionControls]=\"actions\"\n [columns]=\"columns\"\n [displayOptions]=\"displayOptions\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n [pagination]=\"pagination\"\n >\n <c8y-ui-empty-state\n icon=\"search\"\n [title]=\"'No single operations of the selected status to display.' | translate\"\n [subtitle]=\"'Single operations will be displayed here' | translate\"\n horizontal\n ></c8y-ui-empty-state>\n </c8y-data-grid>\n</ng-container>\n", dependencies: [{ kind: "ngmodule", type: StatusFilterModule }, { kind: "component", type: i2.StatusFilterComponent, selector: "c8y-status-filter", inputs: ["options", "multiple", "small"], outputs: ["onFilterChanged"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "ngmodule", type: DataGridModule }, { kind: "component", type: i3.DataGridComponent, selector: "c8y-data-grid", inputs: ["title", "loadMoreItemsLabel", "loadingItemsLabel", "showSearch", "refresh", "columns", "rows", "pagination", "infiniteScroll", "serverSideDataCallback", "selectable", "singleSelection", "selectionPrimaryKey", "displayOptions", "actionControls", "bulkActionControls", "headerActionControls", "searchText", "configureColumnsEnabled", "showCounterWarning", "activeClassName", "expandableRows", "hideReload"], outputs: ["rowMouseOver", "rowMouseLeave", "rowClick", "onConfigChange", "onBeforeFilter", "onBeforeSearch", "onFilter", "itemsSelect", "onReload", "onAddCustomColumn", "onRemoveCustomColumn", "onColumnFilterReset", "onSort", "onPageSizeChange", "onColumnReordered", "onColumnVisibilityChange"] }, { kind: "component", type: EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }] }); }
130
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: SingleOperationsListComponent, isStandalone: true, selector: "c8y-single-operations-list", inputs: { bulkOperation: "bulkOperation", readOnly: "readOnly" }, outputs: { onRetryFailedOperations: "onRetryFailedOperations" }, viewQueries: [{ propertyName: "statusFilter", first: true, predicate: StatusFilterComponent, descendants: true }, { propertyName: "dataGrid", first: true, predicate: DataGridComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container\n *ngIf=\"\n bulkOperation.progress.failed ||\n bulkOperation.progress.executing ||\n bulkOperation.progress.pending ||\n bulkOperation.progress.successful\n \"\n>\n <div\n class=\"legend form-block p-t-16 m-b-0\"\n translate\n >\n Operations\n </div>\n <div class=\"d-flex a-i-center\">\n <div class=\"d-flex a-i-center p-b-8\">\n <span\n class=\"m-r-4 text-medium\"\n translate\n >\n Filter by status\n </span>\n <c8y-status-filter\n small\n [options]=\"OPERATION_STATUS_OPTIONS_MAP\"\n (onFilterChanged)=\"reload($event)\"\n ></c8y-status-filter>\n </div>\n <div\n class=\"m-l-auto p-b-8\"\n *ngIf=\"!readOnly && bulkOperation.progress.failed > 0\"\n >\n <button\n class=\"btn btn-navbar\"\n title=\"{{ 'Retry failed operations' | translate }}\"\n (click)=\"retryBulkOperation()\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"repeat\"\n ></i>\n <span translate>Retry failed operations</span>\n </button>\n </div>\n </div>\n <c8y-data-grid\n [actionControls]=\"actions\"\n [columns]=\"columns\"\n [displayOptions]=\"displayOptions\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n [pagination]=\"pagination\"\n >\n <c8y-ui-empty-state\n icon=\"search\"\n [title]=\"'No single operations of the selected status to display.' | translate\"\n [subtitle]=\"'Single operations will be displayed here' | translate\"\n horizontal\n ></c8y-ui-empty-state>\n </c8y-data-grid>\n</ng-container>\n", dependencies: [{ kind: "ngmodule", type: StatusFilterModule }, { kind: "component", type: i2.StatusFilterComponent, selector: "c8y-status-filter", inputs: ["options", "multiple", "small"], outputs: ["onFilterChanged"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "ngmodule", type: DataGridModule }, { kind: "component", type: i3.DataGridComponent, selector: "c8y-data-grid", inputs: ["title", "loadMoreItemsLabel", "loadingItemsLabel", "showSearch", "refresh", "columns", "rows", "pagination", "childNodePagination", "infiniteScroll", "serverSideDataCallback", "selectable", "singleSelection", "selectionPrimaryKey", "displayOptions", "actionControls", "bulkActionControls", "headerActionControls", "searchText", "configureColumnsEnabled", "showCounterWarning", "activeClassName", "expandableRows", "treeGrid", "hideReload", "childNodesProperty", "parentNodeLabelProperty"], outputs: ["rowMouseOver", "rowMouseLeave", "rowClick", "onConfigChange", "onBeforeFilter", "onBeforeSearch", "onFilter", "itemsSelect", "onReload", "onAddCustomColumn", "onRemoveCustomColumn", "onColumnFilterReset", "onSort", "onPageSizeChange", "onColumnReordered", "onColumnVisibilityChange"] }, { kind: "component", type: EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }] }); }
131
131
  }
132
132
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SingleOperationsListComponent, decorators: [{
133
133
  type: Component,
@@ -152,4 +152,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
152
152
  type: ViewChild,
153
153
  args: [DataGridComponent, { static: false }]
154
154
  }] } });
155
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luZ2xlLW9wZXJhdGlvbnMtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9vcGVyYXRpb25zL2J1bGstc2luZ2xlLW9wZXJhdGlvbnMtbGlzdC9zaW5nbGUtb3BlcmF0aW9ucy1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL29wZXJhdGlvbnMvYnVsay1zaW5nbGUtb3BlcmF0aW9ucy1saXN0L3NpbmdsZS1vcGVyYXRpb25zLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZDLE9BQU8sRUFFTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBRUwsTUFBTSxFQUVOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBSUwsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDaEIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUVMLFlBQVksRUFDWixnQkFBZ0IsRUFFaEIsaUJBQWlCLEVBQ2pCLGNBQWMsRUFHZCxtQkFBbUIsRUFDbkIsT0FBTyxFQUNQLGFBQWEsRUFJZCxNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQy9GLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsZ0JBQWdCLEVBQ2hCLHVCQUF1QixFQUN2Qix5QkFBeUIsRUFDMUIsTUFBTSw2Q0FBNkMsQ0FBQztBQUNyRCxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLDRCQUE0QixFQUc3QixNQUFNLHVDQUF1QyxDQUFDO0FBQy9DLE9BQU8sRUFDTCxxQkFBcUIsRUFDckIsa0JBQWtCLEVBQ25CLE1BQU0sOENBQThDLENBQUM7QUFDdEQsT0FBTyxFQUFFLElB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RSxLQUFLLEVBQUU7Z0JBR25ELFFBQVE7c0JBRFAsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBpbmplY3QsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHtcbiAgSU9wZXJhdGlvbixcbiAgSU9wZXJhdGlvbkJ1bGssXG4gIElSZXN1bHRMaXN0LFxuICBPcGVyYXRpb25TZXJ2aWNlLFxuICBPcGVyYXRpb25TdGF0dXNcbn0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHtcbiAgQWN0aW9uQ29udHJvbCxcbiAgQWxlcnRTZXJ2aWNlLFxuICBDOHlUcmFuc2xhdGVQaXBlLFxuICBDb2x1bW4sXG4gIERhdGFHcmlkQ29tcG9uZW50LFxuICBEYXRhR3JpZE1vZHVsZSxcbiAgRGF0YVNvdXJjZU1vZGlmaWVyLFxuICBEaXNwbGF5T3B0aW9ucyxcbiAgRW1wdHlTdGF0ZUNvbXBvbmVudCxcbiAgZ2V0dGV4dCxcbiAgSWNvbkRpcmVjdGl2ZSxcbiAgUGFnaW5hdGlvbixcbiAgU2VydmVyU2lkZURhdGFDYWxsYmFjayxcbiAgU2VydmVyU2lkZURhdGFSZXN1bHRcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBCdWxrT3BlcmF0aW9uc1NlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL29wZXJhdGlvbnMvYnVsay1vcGVyYXRpb25zLXNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQ3JlYXRpb25UaW1lR3JpZENvbHVtbixcbiAgRGV2aWNlR3JpZENvbHVtbixcbiAgRmFpbHVyZVJlYXNvbkdyaWRDb2x1bW4sXG4gIE9wZXJhdGlvblN0YXR1c0dyaWRDb2x1bW5cbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9vcGVyYXRpb25zL2dyaWQtY29sdW1ucyc7XG5pbXBvcnQge1xuICBPUEVSQVRJT05fU1RBVFVTX0xBQkVMUyxcbiAgT1BFUkFUSU9OX1NUQVRVU19PUFRJT05TX01BUCxcbiAgT3BlcmF0aW9uU3RhdHVzT3B0aW9uLFxuICBPcGVyYXRpb25TdGF0dXNPcHRpb25zTWFwU2hhcmVkXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvb3BlcmF0aW9ucy9zaGFyZWQnO1xuaW1wb3J0IHtcbiAgU3RhdHVzRmlsdGVyQ29tcG9uZW50LFxuICBTdGF0dXNGaWx0ZXJNb2R1bGVcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9vcGVyYXRpb25zL3N0YXR1cy1maWx0ZXInO1xuaW1wb3J0IHsgb21pdCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBtZXJnZSwgU3ViamVjdCwgdGhyb3R0bGVUaW1lIH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ2M4eS1zaW5nbGUtb3BlcmF0aW9ucy1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NpbmdsZS1vcGVyYXRpb25zLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBpbXBvcnRzOiBbXG4gICAgU3RhdHVzRmlsdGVyTW9kdWxlLFxuICAgIE5nSWYsXG4gICAgQzh5VHJhbnNsYXRlUGlwZSxcbiAgICBJY29uRGlyZWN0aXZlLFxuICAgIERhdGFHcmlkTW9kdWxlLFxuICAgIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBTaW5nbGVPcGVyYXRpb25zTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpXG4gIGJ1bGtPcGVyYXRpb246IFBhcnRpYWw8SU9wZXJhdGlvbkJ1bGs+O1xuICBASW5wdXQoKVxuICByZWFkT25seSA9IGZhbHNlO1xuICBAT3V0cHV0KCkgb25SZXRyeUZhaWxlZE9wZXJhdGlvbnM6IEV2ZW50RW1pdHRlcjxQYXJ0aWFsPElPcGVyYXRpb25CdWxrPj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQFZpZXdDaGlsZChTdGF0dXNGaWx0ZXJDb21wb25lbnQsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBzdGF0dXNGaWx0ZXI6IFN0YXR1c0ZpbHRlckNvbXBvbmVudDtcbiAgQFZpZXdDaGlsZChEYXRhR3JpZENvbXBvbmVudCwgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIGRhdGFHcmlkOiBEYXRhR3JpZENvbXBvbmVudDtcblxuICBPUEVSQVRJT05fU1RBVFVTID0geyAuLi5PcGVyYXRpb25TdGF0dXMsIEFMTDogZ2V0dGV4dCgnQUxMJykgfTtcbiAgT1BFUkFUSU9OX1NUQVRVU19MQUJFTFMgPSBPUEVSQVRJT05fU1RBVFVTX0xBQkVMUztcbiAgT1BFUkFUSU9OX1NUQVRVU19PUFRJT05TX01BUDogT3BlcmF0aW9uU3RhdHVzT3B0aW9uc01hcFNoYXJlZCA9IE9QRVJBVElPTl9TVEFUVVNfT1BUSU9OU19NQVA7XG4gIHNpbmdsZU9wZXJhdGlvbnM6IElSZXN1bHRMaXN0PElPcGVyYXRpb24+O1xuXG4gIGRpc3BsYXlPcHRpb25zOiBQYXJ0aWFsPERpc3BsYXlPcHRpb25zPiA9IHtcbiAgICBncmlkSGVhZGVyOiBmYWxzZVxuICB9O1xuICBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uID0ge1xuICAgIHBhZ2VTaXplOiAyNSxcbiAgICBjdXJyZW50UGFnZTogMVxuICB9O1xuXG4gIGNvbHVtbnM6IENvbHVtbltdID0gW1xuICAgIG5ldyBPcGVyYXRpb25TdGF0dXNHcmlkQ29sdW1uKCksXG4gICAgbmV3IERldmljZUdyaWRDb2x1bW4oKSxcbiAgICBuZXcgQ3JlYXRpb25UaW1lR3JpZENvbHVtbigpLFxuICAgIG5ldyBGYWlsdXJlUmVhc29uR3JpZENvbHVtbigpXG4gIF07XG5cbiAgYWN0aW9uczogQWN0aW9uQ29udHJvbFtdID0gW1xuICAgIHtcbiAgICAgIHR5cGU6ICdyZXRyeScsXG4gICAgICBpY29uOiAncmVwZWF0JyxcbiAgICAgIGxhYmVsOiBnZXR0ZXh0KCdSZXRyeSBvcGVyYXRpb24nKSxcbiAgICAgIHRleHQ6IGdldHRleHQoJ1JldHJ5IG9wZXJhdGlvbicpLFxuICAgICAgY2FsbGJhY2s6IG9wZXJhdGlvbiA9PiB7XG4gICAgICAgIHRoaXMucmV0cnlTaW5nbGVPcGVyYXRpb24ob3BlcmF0aW9uKTtcbiAgICAgIH0sXG4gICAgICBzaG93SWY6IG9wZXJhdGlvbiA9PlxuICAgICAgICAhdGhpcy5yZWFkT25seSAmJlxuICAgICAgICBvcGVyYXRpb24uc3RhdHVzLnRvU3RyaW5nKCkgPT09IE9QRVJBVElPTl9TVEFUVVNfT1BUSU9OU19NQVAuRkFJTEVELnN0YXR1cy50b1N0cmluZygpXG4gICAgfVxuICBdO1xuXG4gIHNlcnZlclNpZGVEYXRhQ2FsbGJhY2s6IFNlcnZlclNpZGVEYXRhQ2FsbGJhY2s7XG5cbiAgcHJpdmF0ZSBvcGVyYXRpb25TZXJ2aWNlID0gaW5qZWN0KE9wZXJhdGlvblNlcnZpY2UpO1xuICBwcml2YXRlIGFsZXJ0U2VydmljZSA9IGluamVjdChBbGVydFNlcnZpY2UpO1xuICBwcml2YXRlIGZpbHRlclN0YXR1czogT3BlcmF0aW9uU3RhdHVzO1xuICBwcml2YXRlIHJlbG9hZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIHJlbG9hZFRocm90dGxlZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYnVsa09wZXJhdGlvbnNTZXJ2aWNlOiBCdWxrT3BlcmF0aW9uc1NlcnZpY2UpIHtcbiAgICB0aGlzLnNlcnZlclNpZGVEYXRhQ2FsbGJhY2sgPSB0aGlzLm9uRGF0YVNvdXJjZU1vZGlmaWVyLmJpbmQodGhpcyk7XG4gICAgbWVyZ2UodGhpcy5yZWxvYWQkLCB0aGlzLnJlbG9hZFRocm90dGxlZCQucGlwZSh0aHJvdHRsZVRpbWUoMzBfMDAwKSkpXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5kYXRhR3JpZD8ucmVsb2FkKGZhbHNlKSk7XG4gIH1cblxuICBhc3luYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKHRoaXMuc3RhdHVzRmlsdGVyKSB7XG4gICAgICB0aGlzLnNldFN0YXR1c0ZpbHRlcihmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzLmJ1bGtPcGVyYXRpb24gJiYgIWNoYW5nZXMuYnVsa09wZXJhdGlvbi5maXJzdENoYW5nZSkge1xuICAgICAgdGhpcy5yZWxvYWRUaHJvdHRsZWQkLm5leHQoKTtcbiAgICB9XG4gIH1cblxuICByZWxvYWQob3B0aW9uPzogT3BlcmF0aW9uU3RhdHVzT3B0aW9uW10pIHtcbiAgICBjb25zdCBbb3B0XSA9IG9wdGlvbiA/PyBbXTtcbiAgICB0aGlzLmZpbHRlclN0YXR1cyA9IG9wdD8uc3RhdHVzID8/IHRoaXMuZmlsdGVyU3RhdHVzO1xuICAgIHRoaXMucmVsb2FkJC5uZXh0KCk7XG4gIH1cblxuICBhc3luYyBvbkRhdGFTb3VyY2VNb2RpZmllcihcbiAgICBkYXRhU291cmNlTW9kaWZpZXI6IERhdGFTb3VyY2VNb2RpZmllclxuICApOiBQcm9taXNlPFNlcnZlclNpZGVEYXRhUmVzdWx0PiB7XG4gICAgY29uc3QgZmlsdGVyID0gdGhpcy5maWx0ZXJTdGF0dXMgPz8gdGhpcy5nZXRGaWx0ZXJUeXBlT2ZTaW5nbGVPcGVyYXRpb25zKCk7XG4gICAgY29uc3QgeyByZXMsIGRhdGEsIHBhZ2luZyB9ID0gYXdhaXQgdGhpcy5idWxrT3BlcmF0aW9uc1NlcnZpY2UuZ2V0U2luZ2xlT3BlcmF0aW9uc0J5U3RhdHVzKFxuICAgICAgZmlsdGVyLFxuICAgICAgdGhpcy5idWxrT3BlcmF0aW9uLmlkLFxuICAgICAgZGF0YVNvdXJjZU1vZGlmaWVyLnBhZ2luYXRpb25cbiAgICApO1xuXG4gICAgY29uc3QgZmlsdGVyZWRTaXplID0gYXdhaXQgdGhpcy5idWxrT3BlcmF0aW9uc1NlcnZpY2UuZ2V0U2luZ2xlT3BlcmF0aW9uc0NvdW50QnlTdGF0dXMoXG4gICAgICBmaWx0ZXIsXG4gICAgICB0aGlzLmJ1bGtPcGVyYXRpb24uaWRcbiAgICApO1xuXG4gICAgY29uc3Qgc2l6ZSA9IGF3YWl0IHRoaXMuYnVsa09wZXJhdGlvbnNTZXJ2aWNlLmdldFNpbmdsZU9wZXJhdGlvbnNUb3RhbCh0aGlzLmJ1bGtPcGVyYXRpb24uaWQpO1xuXG4gICAgY29uc3Qgc2VydmVyU2lkZURhdGFSZXN1bHQ6IFNlcnZlclNpZGVEYXRhUmVzdWx0ID0geyByZXMsIGRhdGEsIHBhZ2luZywgZmlsdGVyZWRTaXplLCBzaXplIH07XG5cbiAgICByZXR1cm4gc2VydmVyU2lkZURhdGFSZXN1bHQ7XG4gIH1cblxuICBzZXRTdGF0dXNGaWx0ZXIoZW1pdCA9IHRydWUpIHtcbiAgICBpZiAodGhpcy5zdGF0dXNGaWx0ZXIpIHtcbiAgICAgIGNvbnN0IHR5cGVGaWx0ZXIgPSB0aGlzLmdldEZpbHRlclR5cGVPZlNpbmdsZU9wZXJhdGlvbnMoKTtcbiAgICAgIHRoaXMuc3RhdHVzRmlsdGVyLnByZXNldChcbiAgICAgICAgdHlwZUZpbHRlciA9PT0gdGhpcy5PUEVSQVRJT05fU1RBVFVTLkFMTFxuICAgICAgICAgID8gW11cbiAgICAgICAgICA6IFt7IGxhYmVsOiB0aGlzLk9QRVJBVElPTl9TVEFUVVNfTEFCRUxTW3R5cGVGaWx0ZXJdIH1dLFxuICAgICAgICBlbWl0XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRUaW1lb3V0KHRoaXMuc2V0U3RhdHVzRmlsdGVyLmJpbmQodGhpcywgZW1pdCkpO1xuICAgIH1cbiAgfVxuXG4gIGdldEZpbHRlclR5cGVPZlNpbmdsZU9wZXJhdGlvbnMoKSB7XG4gICAgY29uc3QgeyBwcm9ncmVzcyB9ID0gdGhpcy5idWxrT3BlcmF0aW9uO1xuXG4gICAgaWYgKHByb2dyZXNzLmZhaWxlZCA+IDApIHtcbiAgICAgIHJldHVybiB0aGlzLk9QRVJBVElPTl9TVEFUVVMuRkFJTEVEO1xuICAgIH0gZWxzZSBpZiAocHJvZ3Jlc3MuZmFpbGVkID09PSAwICYmIHByb2dyZXNzLnN1Y2Nlc3NmdWwgPT09IDAgJiYgcHJvZ3Jlc3MucGVuZGluZyA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuT1BFUkFUSU9OX1NUQVRVUy5FWEVDVVRJTkc7XG4gICAgfSBlbHNlIGlmIChwcm9ncmVzcy5mYWlsZWQgPT09IDAgJiYgcHJvZ3Jlc3Muc3VjY2Vzc2Z1bCA9PT0gMCAmJiBwcm9ncmVzcy5leGVjdXRpbmcgPT09IDApIHtcbiAgICAgIHJldHVybiB0aGlzLk9QRVJBVElPTl9TVEFUVVMuUEVORElORztcbiAgICB9IGVsc2UgaWYgKHByb2dyZXNzLmZhaWxlZCA9PT0gMCAmJiBwcm9ncmVzcy5wZW5kaW5nID09PSAwICYmIHByb2dyZXNzLmV4ZWN1dGluZyA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuT1BFUkFUSU9OX1NUQVRVUy5TVUNDRVNTRlVMO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLk9QRVJBVElPTl9TVEFUVVMuQUxMO1xuICB9XG5cbiAgcmV0cnlCdWxrT3BlcmF0aW9uKCkge1xuICAgIHRoaXMub25SZXRyeUZhaWxlZE9wZXJhdGlvbnMuZW1pdCh0aGlzLmJ1bGtPcGVyYXRpb24pO1xuICB9XG5cbiAgYXN5bmMgcmV0cnlTaW5nbGVPcGVyYXRpb24oc2luZ2xlT3BlcmF0aW9uKSB7XG4gICAgY29uc3Qgb3BlcmF0aW9uVG9DcmVhdGUgPSBvbWl0KHNpbmdsZU9wZXJhdGlvbiwgW1xuICAgICAgJ2lkJyxcbiAgICAgICdzZWxmJyxcbiAgICAgICdzdGF0dXMnLFxuICAgICAgJ2ZhaWx1cmVSZWFzb24nLFxuICAgICAgJ2NyZWF0aW9uVGltZScsXG4gICAgICAnZGVsaXZlcnknXG4gICAgXSk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5vcGVyYXRpb25TZXJ2aWNlLmNyZWF0ZShvcGVyYXRpb25Ub0NyZWF0ZSk7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5zdWNjZXNzKGdldHRleHQoJ09wZXJhdGlvbiBjcmVhdGVkLicpKTtcbiAgICB9IGNhdGNoIChlcikge1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShlcik7XG4gICAgfVxuICB9XG59XG4iLCI8bmctY29udGFpbmVyXG4gICpuZ0lmPVwiXG4gICAgYnVsa09wZXJhdGlvbi5wcm9ncmVzcy5mYWlsZWQgfHxcbiAgICBidWxrT3BlcmF0aW9uLnByb2dyZXNzLmV4ZWN1dGluZyB8fFxuICAgIGJ1bGtPcGVyYXRpb24ucHJvZ3Jlc3MucGVuZGluZyB8fFxuICAgIGJ1bGtPcGVyYXRpb24ucHJvZ3Jlc3Muc3VjY2Vzc2Z1bFxuICBcIlxuPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJsZWdlbmQgZm9ybS1ibG9jayBwLXQtMTYgbS1iLTBcIlxuICAgIHRyYW5zbGF0ZVxuICA+XG4gICAgT3BlcmF0aW9uc1xuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImQtZmxleCBhLWktY2VudGVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBhLWktY2VudGVyIHAtYi04XCI+XG4gICAgICA8c3BhblxuICAgICAgICBjbGFzcz1cIm0tci00IHRleHQtbWVkaXVtXCJcbiAgICAgICAgdHJhbnNsYXRlXG4gICAgICA+XG4gICAgICAgIEZpbHRlciBieSBzdGF0dXNcbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxjOHktc3RhdHVzLWZpbHRlclxuICAgICAgICBzbWFsbFxuICAgICAgICBbb3B0aW9uc109XCJPUEVSQVRJT05fU1RBVFVTX09QVElPTlNfTUFQXCJcbiAgICAgICAgKG9uRmlsdGVyQ2hhbmdlZCk9XCJyZWxvYWQoJGV2ZW50KVwiXG4gICAgICA+PC9jOHktc3RhdHVzLWZpbHRlcj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cIm0tbC1hdXRvIHAtYi04XCJcbiAgICAgICpuZ0lmPVwiIXJlYWRPbmx5ICYmIGJ1bGtPcGVyYXRpb24ucHJvZ3Jlc3MuZmFpbGVkID4gMFwiXG4gICAgPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImJ0biBidG4tbmF2YmFyXCJcbiAgICAgICAgdGl0bGU9XCJ7eyAnUmV0cnkgZmFpbGVkIG9wZXJhdGlvbnMnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgKGNsaWNrKT1cInJldHJ5QnVsa09wZXJhdGlvbigpXCJcbiAgICAgID5cbiAgICAgICAgPGlcbiAgICAgICAgICBjbGFzcz1cIm0tci00XCJcbiAgICAgICAgICBjOHlJY29uPVwicmVwZWF0XCJcbiAgICAgICAgPjwvaT5cbiAgICAgICAgPHNwYW4gdHJhbnNsYXRlPlJldHJ5IGZhaWxlZCBvcGVyYXRpb25zPC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8Yzh5LWRhdGEtZ3JpZFxuICAgIFthY3Rpb25Db250cm9sc109XCJhY3Rpb25zXCJcbiAgICBbY29sdW1uc109XCJjb2x1bW5zXCJcbiAgICBbZGlzcGxheU9wdGlvbnNdPVwiZGlzcGxheU9wdGlvbnNcIlxuICAgIFtzZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrXT1cInNlcnZlclNpZGVEYXRhQ2FsbGJhY2tcIlxuICAgIFtwYWdpbmF0aW9uXT1cInBhZ2luYXRpb25cIlxuICA+XG4gICAgPGM4eS11aS1lbXB0eS1zdGF0ZVxuICAgICAgaWNvbj1cInNlYXJjaFwiXG4gICAgICBbdGl0bGVdPVwiJ05vIHNpbmdsZSBvcGVyYXRpb25zIG9mIHRoZSBzZWxlY3RlZCBzdGF0dXMgdG8gZGlzcGxheS4nIHwgdHJhbnNsYXRlXCJcbiAgICAgIFtzdWJ0aXRsZV09XCInU2luZ2xlIG9wZXJhdGlvbnMgd2lsbCBiZSBkaXNwbGF5ZWQgaGVyZScgfCB0cmFuc2xhdGVcIlxuICAgICAgaG9yaXpvbnRhbFxuICAgID48L2M4eS11aS1lbXB0eS1zdGF0ZT5cbiAgPC9jOHktZGF0YS1ncmlkPlxuPC9uZy1jb250YWluZXI+XG4iXX0=
155
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luZ2xlLW9wZXJhdGlvbnMtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9vcGVyYXRpb25zL2J1bGstc2luZ2xlLW9wZXJhdGlvbnMtbGlzdC9zaW5nbGUtb3BlcmF0aW9ucy1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL29wZXJhdGlvbnMvYnVsay1zaW5nbGUtb3BlcmF0aW9ucy1saXN0L3NpbmdsZS1vcGVyYXRpb25zLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZDLE9BQU8sRUFFTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBRUwsTUFBTSxFQUVOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBSUwsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDaEIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUVMLFlBQVksRUFDWixnQkFBZ0IsRUFFaEIsaUJBQWlCLEVBQ2pCLGNBQWMsRUFHZCxtQkFBbUIsRUFDbkIsT0FBTyxFQUNQLGFBQWEsRUFJZCxNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQy9GLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsZ0JBQWdCLEVBQ2hCLHVCQUF1QixFQUN2Qix5QkFBeUIsRUFDMUIsTUFBTSw2Q0FBNkMsQ0FBQztBQUNyRCxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLDRCQUE0QixFQUc3QixNQUFNLHVDQUF1QyxDQUFDO0FBQy9DLE9BQU8sRUFDTCxxQkFBcUIsRUFDckIsa0JBQWtCLEVBQ25CLE1BQU0sOENBQThDLENBQUM7QUFDdEQsT0FBTyxFQUFFLElB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RSxLQUFLLEVBQUU7Z0JBR25ELFFBQVE7c0JBRFAsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBpbmplY3QsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHtcbiAgSU9wZXJhdGlvbixcbiAgSU9wZXJhdGlvbkJ1bGssXG4gIElSZXN1bHRMaXN0LFxuICBPcGVyYXRpb25TZXJ2aWNlLFxuICBPcGVyYXRpb25TdGF0dXNcbn0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHtcbiAgQWN0aW9uQ29udHJvbCxcbiAgQWxlcnRTZXJ2aWNlLFxuICBDOHlUcmFuc2xhdGVQaXBlLFxuICBDb2x1bW4sXG4gIERhdGFHcmlkQ29tcG9uZW50LFxuICBEYXRhR3JpZE1vZHVsZSxcbiAgRGF0YVNvdXJjZU1vZGlmaWVyLFxuICBEaXNwbGF5T3B0aW9ucyxcbiAgRW1wdHlTdGF0ZUNvbXBvbmVudCxcbiAgZ2V0dGV4dCxcbiAgSWNvbkRpcmVjdGl2ZSxcbiAgUGFnaW5hdGlvbixcbiAgU2VydmVyU2lkZURhdGFDYWxsYmFjayxcbiAgU2VydmVyU2lkZURhdGFSZXN1bHRcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBCdWxrT3BlcmF0aW9uc1NlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL29wZXJhdGlvbnMvYnVsay1vcGVyYXRpb25zLXNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQ3JlYXRpb25UaW1lR3JpZENvbHVtbixcbiAgRGV2aWNlR3JpZENvbHVtbixcbiAgRmFpbHVyZVJlYXNvbkdyaWRDb2x1bW4sXG4gIE9wZXJhdGlvblN0YXR1c0dyaWRDb2x1bW5cbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9vcGVyYXRpb25zL2dyaWQtY29sdW1ucyc7XG5pbXBvcnQge1xuICBPUEVSQVRJT05fU1RBVFVTX0xBQkVMUyxcbiAgT1BFUkFUSU9OX1NUQVRVU19PUFRJT05TX01BUCxcbiAgT3BlcmF0aW9uU3RhdHVzT3B0aW9uLFxuICBPcGVyYXRpb25TdGF0dXNPcHRpb25zTWFwU2hhcmVkXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvb3BlcmF0aW9ucy9zaGFyZWQnO1xuaW1wb3J0IHtcbiAgU3RhdHVzRmlsdGVyQ29tcG9uZW50LFxuICBTdGF0dXNGaWx0ZXJNb2R1bGVcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9vcGVyYXRpb25zL3N0YXR1cy1maWx0ZXInO1xuaW1wb3J0IHsgb21pdCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBtZXJnZSwgU3ViamVjdCwgdGhyb3R0bGVUaW1lIH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ2M4eS1zaW5nbGUtb3BlcmF0aW9ucy1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NpbmdsZS1vcGVyYXRpb25zLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBpbXBvcnRzOiBbXG4gICAgU3RhdHVzRmlsdGVyTW9kdWxlLFxuICAgIE5nSWYsXG4gICAgQzh5VHJhbnNsYXRlUGlwZSxcbiAgICBJY29uRGlyZWN0aXZlLFxuICAgIERhdGFHcmlkTW9kdWxlLFxuICAgIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBTaW5nbGVPcGVyYXRpb25zTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpXG4gIGJ1bGtPcGVyYXRpb246IFBhcnRpYWw8SU9wZXJhdGlvbkJ1bGs+O1xuICBASW5wdXQoKVxuICByZWFkT25seSA9IGZhbHNlO1xuICBAT3V0cHV0KCkgb25SZXRyeUZhaWxlZE9wZXJhdGlvbnM6IEV2ZW50RW1pdHRlcjxQYXJ0aWFsPElPcGVyYXRpb25CdWxrPj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQFZpZXdDaGlsZChTdGF0dXNGaWx0ZXJDb21wb25lbnQsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBzdGF0dXNGaWx0ZXI6IFN0YXR1c0ZpbHRlckNvbXBvbmVudDtcbiAgQFZpZXdDaGlsZChEYXRhR3JpZENvbXBvbmVudCwgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIGRhdGFHcmlkOiBEYXRhR3JpZENvbXBvbmVudDtcblxuICBPUEVSQVRJT05fU1RBVFVTID0geyAuLi5PcGVyYXRpb25TdGF0dXMsIEFMTDogZ2V0dGV4dCgnQUxMJykgfTtcbiAgT1BFUkFUSU9OX1NUQVRVU19MQUJFTFMgPSBPUEVSQVRJT05fU1RBVFVTX0xBQkVMUztcbiAgT1BFUkFUSU9OX1NUQVRVU19PUFRJT05TX01BUDogT3BlcmF0aW9uU3RhdHVzT3B0aW9uc01hcFNoYXJlZCA9IE9QRVJBVElPTl9TVEFUVVNfT1BUSU9OU19NQVA7XG4gIHNpbmdsZU9wZXJhdGlvbnM6IElSZXN1bHRMaXN0PElPcGVyYXRpb24+O1xuXG4gIGRpc3BsYXlPcHRpb25zOiBQYXJ0aWFsPERpc3BsYXlPcHRpb25zPiA9IHtcbiAgICBncmlkSGVhZGVyOiBmYWxzZVxuICB9O1xuICBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uID0ge1xuICAgIHBhZ2VTaXplOiAyNSxcbiAgICBjdXJyZW50UGFnZTogMVxuICB9O1xuXG4gIGNvbHVtbnM6IENvbHVtbltdID0gW1xuICAgIG5ldyBPcGVyYXRpb25TdGF0dXNHcmlkQ29sdW1uKCksXG4gICAgbmV3IERldmljZUdyaWRDb2x1bW4oKSxcbiAgICBuZXcgQ3JlYXRpb25UaW1lR3JpZENvbHVtbigpLFxuICAgIG5ldyBGYWlsdXJlUmVhc29uR3JpZENvbHVtbigpXG4gIF07XG5cbiAgYWN0aW9uczogQWN0aW9uQ29udHJvbFtdID0gW1xuICAgIHtcbiAgICAgIHR5cGU6ICdyZXRyeScsXG4gICAgICBpY29uOiAncmVwZWF0JyxcbiAgICAgIGxhYmVsOiBnZXR0ZXh0KCdSZXRyeSBvcGVyYXRpb24nKSxcbiAgICAgIHRleHQ6IGdldHRleHQoJ1JldHJ5IG9wZXJhdGlvbicpLFxuICAgICAgY2FsbGJhY2s6IG9wZXJhdGlvbiA9PiB7XG4gICAgICAgIHRoaXMucmV0cnlTaW5nbGVPcGVyYXRpb24ob3BlcmF0aW9uKTtcbiAgICAgIH0sXG4gICAgICBzaG93SWY6IG9wZXJhdGlvbiA9PlxuICAgICAgICAhdGhpcy5yZWFkT25seSAmJlxuICAgICAgICBvcGVyYXRpb24uc3RhdHVzLnRvU3RyaW5nKCkgPT09IE9QRVJBVElPTl9TVEFUVVNfT1BUSU9OU19NQVAuRkFJTEVELnN0YXR1cy50b1N0cmluZygpXG4gICAgfVxuICBdO1xuXG4gIHNlcnZlclNpZGVEYXRhQ2FsbGJhY2s6IFNlcnZlclNpZGVEYXRhQ2FsbGJhY2s7XG5cbiAgcHJpdmF0ZSBvcGVyYXRpb25TZXJ2aWNlID0gaW5qZWN0KE9wZXJhdGlvblNlcnZpY2UpO1xuICBwcml2YXRlIGFsZXJ0U2VydmljZSA9IGluamVjdChBbGVydFNlcnZpY2UpO1xuICBwcml2YXRlIGZpbHRlclN0YXR1czogT3BlcmF0aW9uU3RhdHVzO1xuICBwcml2YXRlIHJlbG9hZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIHJlbG9hZFRocm90dGxlZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYnVsa09wZXJhdGlvbnNTZXJ2aWNlOiBCdWxrT3BlcmF0aW9uc1NlcnZpY2UpIHtcbiAgICB0aGlzLnNlcnZlclNpZGVEYXRhQ2FsbGJhY2sgPSB0aGlzLm9uRGF0YVNvdXJjZU1vZGlmaWVyLmJpbmQodGhpcyk7XG4gICAgbWVyZ2UodGhpcy5yZWxvYWQkLCB0aGlzLnJlbG9hZFRocm90dGxlZCQucGlwZSh0aHJvdHRsZVRpbWUoMzBfMDAwKSkpXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5kYXRhR3JpZD8ucmVsb2FkKGZhbHNlKSk7XG4gIH1cblxuICBhc3luYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKHRoaXMuc3RhdHVzRmlsdGVyKSB7XG4gICAgICB0aGlzLnNldFN0YXR1c0ZpbHRlcihmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzLmJ1bGtPcGVyYXRpb24gJiYgIWNoYW5nZXMuYnVsa09wZXJhdGlvbi5maXJzdENoYW5nZSkge1xuICAgICAgdGhpcy5yZWxvYWRUaHJvdHRsZWQkLm5leHQoKTtcbiAgICB9XG4gIH1cblxuICByZWxvYWQob3B0aW9uPzogT3BlcmF0aW9uU3RhdHVzT3B0aW9uW10pIHtcbiAgICBjb25zdCBbb3B0XSA9IG9wdGlvbiA/PyBbXTtcbiAgICB0aGlzLmZpbHRlclN0YXR1cyA9IG9wdD8uc3RhdHVzID8/IHRoaXMuZmlsdGVyU3RhdHVzO1xuICAgIHRoaXMucmVsb2FkJC5uZXh0KCk7XG4gIH1cblxuICBhc3luYyBvbkRhdGFTb3VyY2VNb2RpZmllcihcbiAgICBkYXRhU291cmNlTW9kaWZpZXI6IERhdGFTb3VyY2VNb2RpZmllclxuICApOiBQcm9taXNlPFNlcnZlclNpZGVEYXRhUmVzdWx0PiB7XG4gICAgY29uc3QgZmlsdGVyID0gdGhpcy5maWx0ZXJTdGF0dXMgPz8gdGhpcy5nZXRGaWx0ZXJUeXBlT2ZTaW5nbGVPcGVyYXRpb25zKCk7XG4gICAgY29uc3QgeyByZXMsIGRhdGEsIHBhZ2luZyB9ID0gYXdhaXQgdGhpcy5idWxrT3BlcmF0aW9uc1NlcnZpY2UuZ2V0U2luZ2xlT3BlcmF0aW9uc0J5U3RhdHVzKFxuICAgICAgZmlsdGVyLFxuICAgICAgdGhpcy5idWxrT3BlcmF0aW9uLmlkLFxuICAgICAgZGF0YVNvdXJjZU1vZGlmaWVyLnBhZ2luYXRpb25cbiAgICApO1xuXG4gICAgY29uc3QgZmlsdGVyZWRTaXplID0gYXdhaXQgdGhpcy5idWxrT3BlcmF0aW9uc1NlcnZpY2UuZ2V0U2luZ2xlT3BlcmF0aW9uc0NvdW50QnlTdGF0dXMoXG4gICAgICBmaWx0ZXIsXG4gICAgICB0aGlzLmJ1bGtPcGVyYXRpb24uaWRcbiAgICApO1xuXG4gICAgY29uc3Qgc2l6ZSA9IGF3YWl0IHRoaXMuYnVsa09wZXJhdGlvbnNTZXJ2aWNlLmdldFNpbmdsZU9wZXJhdGlvbnNUb3RhbCh0aGlzLmJ1bGtPcGVyYXRpb24uaWQpO1xuXG4gICAgY29uc3Qgc2VydmVyU2lkZURhdGFSZXN1bHQ6IFNlcnZlclNpZGVEYXRhUmVzdWx0ID0geyByZXMsIGRhdGEsIHBhZ2luZywgZmlsdGVyZWRTaXplLCBzaXplIH07XG5cbiAgICByZXR1cm4gc2VydmVyU2lkZURhdGFSZXN1bHQ7XG4gIH1cblxuICBzZXRTdGF0dXNGaWx0ZXIoZW1pdCA9IHRydWUpIHtcbiAgICBpZiAodGhpcy5zdGF0dXNGaWx0ZXIpIHtcbiAgICAgIGNvbnN0IHR5cGVGaWx0ZXIgPSB0aGlzLmdldEZpbHRlclR5cGVPZlNpbmdsZU9wZXJhdGlvbnMoKTtcbiAgICAgIHRoaXMuc3RhdHVzRmlsdGVyLnByZXNldChcbiAgICAgICAgdHlwZUZpbHRlciA9PT0gdGhpcy5PUEVSQVRJT05fU1RBVFVTLkFMTFxuICAgICAgICAgID8gW11cbiAgICAgICAgICA6IFt7IGxhYmVsOiB0aGlzLk9QRVJBVElPTl9TVEFUVVNfTEFCRUxTW3R5cGVGaWx0ZXJdIH1dLFxuICAgICAgICBlbWl0XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRUaW1lb3V0KHRoaXMuc2V0U3RhdHVzRmlsdGVyLmJpbmQodGhpcywgZW1pdCkpO1xuICAgIH1cbiAgfVxuXG4gIGdldEZpbHRlclR5cGVPZlNpbmdsZU9wZXJhdGlvbnMoKSB7XG4gICAgY29uc3QgeyBwcm9ncmVzcyB9ID0gdGhpcy5idWxrT3BlcmF0aW9uO1xuXG4gICAgaWYgKHByb2dyZXNzLmZhaWxlZCA+IDApIHtcbiAgICAgIHJldHVybiB0aGlzLk9QRVJBVElPTl9TVEFUVVMuRkFJTEVEO1xuICAgIH0gZWxzZSBpZiAocHJvZ3Jlc3MuZmFpbGVkID09PSAwICYmIHByb2dyZXNzLnN1Y2Nlc3NmdWwgPT09IDAgJiYgcHJvZ3Jlc3MucGVuZGluZyA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuT1BFUkFUSU9OX1NUQVRVUy5FWEVDVVRJTkc7XG4gICAgfSBlbHNlIGlmIChwcm9ncmVzcy5mYWlsZWQgPT09IDAgJiYgcHJvZ3Jlc3Muc3VjY2Vzc2Z1bCA9PT0gMCAmJiBwcm9ncmVzcy5leGVjdXRpbmcgPT09IDApIHtcbiAgICAgIHJldHVybiB0aGlzLk9QRVJBVElPTl9TVEFUVVMuUEVORElORztcbiAgICB9IGVsc2UgaWYgKHByb2dyZXNzLmZhaWxlZCA9PT0gMCAmJiBwcm9ncmVzcy5wZW5kaW5nID09PSAwICYmIHByb2dyZXNzLmV4ZWN1dGluZyA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuT1BFUkFUSU9OX1NUQVRVUy5TVUNDRVNTRlVMO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLk9QRVJBVElPTl9TVEFUVVMuQUxMO1xuICB9XG5cbiAgcmV0cnlCdWxrT3BlcmF0aW9uKCkge1xuICAgIHRoaXMub25SZXRyeUZhaWxlZE9wZXJhdGlvbnMuZW1pdCh0aGlzLmJ1bGtPcGVyYXRpb24pO1xuICB9XG5cbiAgYXN5bmMgcmV0cnlTaW5nbGVPcGVyYXRpb24oc2luZ2xlT3BlcmF0aW9uKSB7XG4gICAgY29uc3Qgb3BlcmF0aW9uVG9DcmVhdGUgPSBvbWl0KHNpbmdsZU9wZXJhdGlvbiwgW1xuICAgICAgJ2lkJyxcbiAgICAgICdzZWxmJyxcbiAgICAgICdzdGF0dXMnLFxuICAgICAgJ2ZhaWx1cmVSZWFzb24nLFxuICAgICAgJ2NyZWF0aW9uVGltZScsXG4gICAgICAnZGVsaXZlcnknXG4gICAgXSk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5vcGVyYXRpb25TZXJ2aWNlLmNyZWF0ZShvcGVyYXRpb25Ub0NyZWF0ZSk7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5zdWNjZXNzKGdldHRleHQoJ09wZXJhdGlvbiBjcmVhdGVkLicpKTtcbiAgICB9IGNhdGNoIChlcikge1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShlcik7XG4gICAgfVxuICB9XG59XG4iLCI8bmctY29udGFpbmVyXG4gICpuZ0lmPVwiXG4gICAgYnVsa09wZXJhdGlvbi5wcm9ncmVzcy5mYWlsZWQgfHxcbiAgICBidWxrT3BlcmF0aW9uLnByb2dyZXNzLmV4ZWN1dGluZyB8fFxuICAgIGJ1bGtPcGVyYXRpb24ucHJvZ3Jlc3MucGVuZGluZyB8fFxuICAgIGJ1bGtPcGVyYXRpb24ucHJvZ3Jlc3Muc3VjY2Vzc2Z1bFxuICBcIlxuPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJsZWdlbmQgZm9ybS1ibG9jayBwLXQtMTYgbS1iLTBcIlxuICAgIHRyYW5zbGF0ZVxuICA+XG4gICAgT3BlcmF0aW9uc1xuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImQtZmxleCBhLWktY2VudGVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBhLWktY2VudGVyIHAtYi04XCI+XG4gICAgICA8c3BhblxuICAgICAgICBjbGFzcz1cIm0tci00IHRleHQtbWVkaXVtXCJcbiAgICAgICAgdHJhbnNsYXRlXG4gICAgICA+XG4gICAgICAgIEZpbHRlciBieSBzdGF0dXNcbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxjOHktc3RhdHVzLWZpbHRlclxuICAgICAgICBzbWFsbFxuICAgICAgICBbb3B0aW9uc109XCJPUEVSQVRJT05fU1RBVFVTX09QVElPTlNfTUFQXCJcbiAgICAgICAgKG9uRmlsdGVyQ2hhbmdlZCk9XCJyZWxvYWQoJGV2ZW50KVwiXG4gICAgICA+PC9jOHktc3RhdHVzLWZpbHRlcj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cIm0tbC1hdXRvIHAtYi04XCJcbiAgICAgICpuZ0lmPVwiIXJlYWRPbmx5ICYmIGJ1bGtPcGVyYXRpb24ucHJvZ3Jlc3MuZmFpbGVkID4gMFwiXG4gICAgPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImJ0biBidG4tbmF2YmFyXCJcbiAgICAgICAgdGl0bGU9XCJ7eyAnUmV0cnkgZmFpbGVkIG9wZXJhdGlvbnMnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgKGNsaWNrKT1cInJldHJ5QnVsa09wZXJhdGlvbigpXCJcbiAgICAgID5cbiAgICAgICAgPGlcbiAgICAgICAgICBjbGFzcz1cIm0tci00XCJcbiAgICAgICAgICBjOHlJY29uPVwicmVwZWF0XCJcbiAgICAgICAgPjwvaT5cbiAgICAgICAgPHNwYW4gdHJhbnNsYXRlPlJldHJ5IGZhaWxlZCBvcGVyYXRpb25zPC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8Yzh5LWRhdGEtZ3JpZFxuICAgIFthY3Rpb25Db250cm9sc109XCJhY3Rpb25zXCJcbiAgICBbY29sdW1uc109XCJjb2x1bW5zXCJcbiAgICBbZGlzcGxheU9wdGlvbnNdPVwiZGlzcGxheU9wdGlvbnNcIlxuICAgIFtzZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrXT1cInNlcnZlclNpZGVEYXRhQ2FsbGJhY2tcIlxuICAgIFtwYWdpbmF0aW9uXT1cInBhZ2luYXRpb25cIlxuICA+XG4gICAgPGM4eS11aS1lbXB0eS1zdGF0ZVxuICAgICAgaWNvbj1cInNlYXJjaFwiXG4gICAgICBbdGl0bGVdPVwiJ05vIHNpbmdsZSBvcGVyYXRpb25zIG9mIHRoZSBzZWxlY3RlZCBzdGF0dXMgdG8gZGlzcGxheS4nIHwgdHJhbnNsYXRlXCJcbiAgICAgIFtzdWJ0aXRsZV09XCInU2luZ2xlIG9wZXJhdGlvbnMgd2lsbCBiZSBkaXNwbGF5ZWQgaGVyZScgfCB0cmFuc2xhdGVcIlxuICAgICAgaG9yaXpvbnRhbFxuICAgID48L2M4eS11aS1lbXB0eS1zdGF0ZT5cbiAgPC9jOHktZGF0YS1ncmlkPlxuPC9uZy1jb250YWluZXI+XG4iXX0=