@vendure/admin-ui 2.1.0-next.1 → 2.1.0-next.3

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 (256) hide show
  1. package/catalog/components/collection-detail/collection-detail.component.d.ts +3 -1
  2. package/catalog/components/create-product-variant-dialog/create-product-variant-dialog.component.d.ts +6 -4
  3. package/catalog/components/facet-detail/facet-detail.component.d.ts +3 -1
  4. package/catalog/components/product-detail/product-detail.component.d.ts +3 -1
  5. package/catalog/components/stock-location-detail/stock-location-detail.component.d.ts +3 -1
  6. package/core/common/base-detail.component.d.ts +11 -1
  7. package/core/common/component-registry-types.d.ts +2 -1
  8. package/core/common/utilities/custom-field-default-value.d.ts +6 -0
  9. package/core/common/version.d.ts +1 -1
  10. package/core/components/app-shell/app-shell.component.d.ts +2 -0
  11. package/core/extension/add-action-bar-item.d.ts +28 -0
  12. package/core/extension/add-nav-menu-item.d.ts +60 -0
  13. package/core/extension/components/angular-route.component.d.ts +6 -0
  14. package/core/extension/components/route.component.d.ts +13 -0
  15. package/core/extension/providers/page-metadata.service.d.ts +9 -0
  16. package/core/{providers/bulk-action-registry → extension}/register-bulk-action.d.ts +1 -1
  17. package/core/extension/register-custom-detail-component.d.ts +10 -0
  18. package/core/{providers/dashboard-widget → extension}/register-dashboard-widget.d.ts +5 -1
  19. package/core/extension/register-data-table-component.d.ts +44 -0
  20. package/core/extension/register-form-input-component.d.ts +50 -0
  21. package/core/extension/register-history-entry-component.d.ts +11 -0
  22. package/core/extension/register-route-component.d.ts +59 -0
  23. package/core/extension/types.d.ts +11 -0
  24. package/core/providers/component-registry/component-registry.service.d.ts +6 -3
  25. package/core/providers/custom-detail-component/custom-detail-component-types.d.ts +2 -1
  26. package/core/providers/custom-detail-component/custom-detail-component.service.d.ts +0 -9
  27. package/core/providers/custom-history-entry-component/history-entry-component.service.d.ts +1 -10
  28. package/core/providers/dashboard-widget/dashboard-widget-types.d.ts +17 -1
  29. package/core/providers/modal/modal.service.d.ts +1 -3
  30. package/core/providers/nav-builder/nav-builder.service.d.ts +0 -85
  31. package/core/public_api.d.ts +16 -3
  32. package/core/shared/components/custom-detail-component-host/custom-detail-component-host.component.d.ts +3 -3
  33. package/core/shared/components/data-table-2/data-table-column.component.d.ts +2 -2
  34. package/core/shared/components/data-table-2/data-table-custom-component.service.d.ts +52 -0
  35. package/core/shared/components/data-table-2/data-table-custom-field-column.component.d.ts +0 -1
  36. package/core/shared/components/data-table-2/data-table2.component.d.ts +9 -2
  37. package/core/shared/components/modal-dialog/dialog-component-outlet.component.d.ts +2 -3
  38. package/core/shared/components/order-state-label/order-state-label.component.d.ts +1 -1
  39. package/core/shared/components/ui-extension-point/ui-extension-point.component.d.ts +13 -4
  40. package/core/shared/dynamic-form-inputs/default-form-inputs.d.ts +15 -0
  41. package/core/shared/dynamic-form-inputs/dynamic-form-input/dynamic-form-input.component.d.ts +3 -3
  42. package/core/shared/shared.module.d.ts +25 -25
  43. package/customer/components/customer-detail/customer-detail.component.d.ts +3 -1
  44. package/customer/components/customer-group-detail/customer-group-detail.component.d.ts +3 -1
  45. package/customer/components/customer-history/customer-history-entry-host.component.d.ts +2 -3
  46. package/customer/components/customer-list/customer-list.component.d.ts +1 -0
  47. package/dashboard/components/dashboard-widget/dashboard-widget.component.d.ts +1 -3
  48. package/esm2022/catalog/components/asset-detail/asset-detail.component.mjs +3 -3
  49. package/esm2022/catalog/components/collection-contents/collection-contents.component.mjs +3 -3
  50. package/esm2022/catalog/components/collection-data-table/collection-data-table.component.mjs +3 -3
  51. package/esm2022/catalog/components/collection-detail/collection-detail.component.mjs +3 -3
  52. package/esm2022/catalog/components/collection-list/collection-list.component.mjs +3 -3
  53. package/esm2022/catalog/components/create-product-variant-dialog/create-product-variant-dialog.component.mjs +8 -5
  54. package/esm2022/catalog/components/facet-detail/facet-detail.component.mjs +3 -3
  55. package/esm2022/catalog/components/facet-list/facet-list.component.mjs +3 -3
  56. package/esm2022/catalog/components/move-collections-dialog/move-collections-dialog.component.mjs +3 -3
  57. package/esm2022/catalog/components/product-detail/product-detail.component.mjs +3 -3
  58. package/esm2022/catalog/components/product-list/product-list.component.mjs +3 -3
  59. package/esm2022/catalog/components/product-options-editor/product-options-editor.component.mjs +3 -3
  60. package/esm2022/catalog/components/product-variant-detail/product-variant-detail.component.mjs +3 -3
  61. package/esm2022/catalog/components/product-variant-list/product-variant-list.component.mjs +3 -3
  62. package/esm2022/catalog/components/product-variants-editor/product-variants-editor.component.mjs +3 -3
  63. package/esm2022/catalog/components/stock-location-detail/stock-location-detail.component.mjs +3 -3
  64. package/esm2022/catalog/components/stock-location-list/stock-location-list.component.mjs +3 -3
  65. package/esm2022/core/common/base-detail.component.mjs +9 -7
  66. package/esm2022/core/common/component-registry-types.mjs +1 -1
  67. package/esm2022/core/common/utilities/create-updated-translatable.mjs +5 -23
  68. package/esm2022/core/common/utilities/custom-field-default-value.mjs +28 -0
  69. package/esm2022/core/common/version.mjs +2 -2
  70. package/esm2022/core/components/app-shell/app-shell.component.mjs +16 -10
  71. package/esm2022/core/components/channel-switcher/channel-switcher.component.mjs +3 -3
  72. package/esm2022/core/components/main-nav/main-nav.component.mjs +3 -3
  73. package/esm2022/core/components/settings-nav/settings-nav.component.mjs +1 -1
  74. package/esm2022/core/core.module.mjs +2 -2
  75. package/esm2022/core/extension/add-action-bar-item.mjs +38 -0
  76. package/esm2022/core/extension/add-nav-menu-item.mjs +79 -0
  77. package/esm2022/core/extension/components/angular-route.component.mjs +22 -0
  78. package/esm2022/core/extension/components/route.component.mjs +59 -0
  79. package/esm2022/core/extension/providers/page-metadata.service.mjs +20 -0
  80. package/esm2022/core/extension/register-bulk-action.mjs +63 -0
  81. package/esm2022/core/extension/register-custom-detail-component.mjs +20 -0
  82. package/esm2022/core/extension/register-dashboard-widget.mjs +36 -0
  83. package/esm2022/core/extension/register-data-table-component.mjs +50 -0
  84. package/esm2022/core/extension/register-form-input-component.mjs +60 -0
  85. package/esm2022/core/extension/register-history-entry-component.mjs +21 -0
  86. package/esm2022/core/extension/register-route-component.mjs +44 -0
  87. package/esm2022/core/extension/types.mjs +2 -0
  88. package/esm2022/core/providers/component-registry/component-registry.service.mjs +3 -3
  89. package/esm2022/core/providers/custom-detail-component/custom-detail-component-types.mjs +1 -1
  90. package/esm2022/core/providers/custom-detail-component/custom-detail-component.service.mjs +2 -19
  91. package/esm2022/core/providers/custom-history-entry-component/history-entry-component.service.mjs +2 -20
  92. package/esm2022/core/providers/dashboard-widget/dashboard-widget-types.mjs +1 -1
  93. package/esm2022/core/providers/data-table/data-table-filter-collection.mjs +1 -8
  94. package/esm2022/core/providers/data-table/data-table-filter.mjs +1 -1
  95. package/esm2022/core/providers/modal/modal.service.mjs +5 -7
  96. package/esm2022/core/providers/nav-builder/nav-builder.service.mjs +2 -113
  97. package/esm2022/core/public_api.mjs +17 -4
  98. package/esm2022/core/shared/components/action-bar-items/action-bar-items.component.mjs +3 -3
  99. package/esm2022/core/shared/components/asset-gallery/asset-gallery.component.mjs +3 -3
  100. package/esm2022/core/shared/components/card/card.component.mjs +3 -3
  101. package/esm2022/core/shared/components/chip/chip.component.mjs +2 -2
  102. package/esm2022/core/shared/components/custom-detail-component-host/custom-detail-component-host.component.mjs +13 -9
  103. package/esm2022/core/shared/components/data-table-2/data-table-column.component.mjs +5 -6
  104. package/esm2022/core/shared/components/data-table-2/data-table-custom-component.service.mjs +26 -0
  105. package/esm2022/core/shared/components/data-table-2/data-table-custom-field-column.component.mjs +2 -4
  106. package/esm2022/core/shared/components/data-table-2/data-table2.component.mjs +23 -10
  107. package/esm2022/core/shared/components/data-table-filter-label/data-table-filter-label.component.mjs +3 -3
  108. package/esm2022/core/shared/components/data-table-filter-presets/add-filter-preset-button.component.mjs +2 -2
  109. package/esm2022/core/shared/components/data-table-filter-presets/data-table-filter-presets.component.mjs +3 -3
  110. package/esm2022/core/shared/components/data-table-filter-presets/filter-preset.service.mjs +1 -1
  111. package/esm2022/core/shared/components/data-table-filter-presets/rename-filter-preset-dialog.component.mjs +3 -3
  112. package/esm2022/core/shared/components/data-table-filters/data-table-filters.component.mjs +6 -4
  113. package/esm2022/core/shared/components/facet-value-chip/facet-value-chip.component.mjs +2 -2
  114. package/esm2022/core/shared/components/modal-dialog/dialog-component-outlet.component.mjs +6 -8
  115. package/esm2022/core/shared/components/page-title/page-title.component.mjs +3 -3
  116. package/esm2022/core/shared/components/rich-text-editor/rich-text-editor.component.mjs +2 -2
  117. package/esm2022/core/shared/components/tabbed-custom-fields/tabbed-custom-fields.component.mjs +2 -2
  118. package/esm2022/core/shared/components/ui-extension-point/ui-extension-point.component.mjs +97 -5
  119. package/esm2022/core/shared/dynamic-form-inputs/default-form-inputs.mjs +44 -0
  120. package/esm2022/core/shared/dynamic-form-inputs/dynamic-form-input/dynamic-form-input.component.mjs +20 -16
  121. package/esm2022/core/shared/shared.module.mjs +14 -13
  122. package/esm2022/customer/components/customer-detail/customer-detail.component.mjs +5 -5
  123. package/esm2022/customer/components/customer-group-detail/customer-group-detail.component.mjs +3 -3
  124. package/esm2022/customer/components/customer-group-detail-dialog/customer-group-detail-dialog.component.mjs +3 -2
  125. package/esm2022/customer/components/customer-group-list/customer-group-list.component.mjs +3 -3
  126. package/esm2022/customer/components/customer-group-member-list/customer-group-member-list.component.mjs +3 -3
  127. package/esm2022/customer/components/customer-history/customer-history-entry-host.component.mjs +5 -7
  128. package/esm2022/customer/components/customer-list/customer-list.component.mjs +10 -7
  129. package/esm2022/dashboard/components/dashboard-widget/dashboard-widget.component.mjs +4 -7
  130. package/esm2022/dashboard/widgets/latest-orders-widget/latest-orders-widget.component.mjs +3 -3
  131. package/esm2022/marketing/components/promotion-detail/promotion-detail.component.mjs +3 -3
  132. package/esm2022/marketing/components/promotion-list/promotion-list.component.mjs +3 -3
  133. package/esm2022/order/components/order-data-table/order-data-table.component.mjs +2 -2
  134. package/esm2022/order/components/order-detail/order-detail.component.mjs +3 -3
  135. package/esm2022/order/components/order-history/order-history-entry-host.component.mjs +7 -9
  136. package/esm2022/order/components/order-list/order-list.component.mjs +3 -3
  137. package/esm2022/order/components/order-table/order-table.component.mjs +3 -3
  138. package/esm2022/react/components/react-custom-column.component.mjs +25 -0
  139. package/esm2022/react/components/react-custom-detail.component.mjs +23 -0
  140. package/esm2022/react/components/react-form-input.component.mjs +24 -0
  141. package/esm2022/react/components/react-route.component.mjs +26 -0
  142. package/esm2022/react/directives/react-component-host.directive.mjs +54 -0
  143. package/esm2022/react/public_api.mjs +19 -0
  144. package/esm2022/react/react-components/Card.mjs +28 -0
  145. package/esm2022/react/react-components/Link.mjs +30 -0
  146. package/esm2022/react/react-hooks/use-detail-component-data.mjs +48 -0
  147. package/esm2022/react/react-hooks/use-form-control.mjs +66 -0
  148. package/esm2022/react/react-hooks/use-injector.mjs +33 -0
  149. package/esm2022/react/react-hooks/use-page-metadata.mjs +41 -0
  150. package/esm2022/react/react-hooks/use-query.mjs +124 -0
  151. package/esm2022/react/register-react-custom-detail-component.mjs +33 -0
  152. package/esm2022/react/register-react-data-table-component.mjs +62 -0
  153. package/esm2022/react/register-react-form-input-component.mjs +27 -0
  154. package/esm2022/react/register-react-route-component.mjs +25 -0
  155. package/esm2022/react/types.mjs +2 -0
  156. package/esm2022/react/vendure-admin-ui-react.mjs +5 -0
  157. package/esm2022/settings/components/admin-detail/admin-detail.component.mjs +3 -3
  158. package/esm2022/settings/components/administrator-list/administrator-list.component.mjs +3 -3
  159. package/esm2022/settings/components/channel-detail/channel-detail.component.mjs +10 -10
  160. package/esm2022/settings/components/channel-list/channel-list.component.mjs +3 -3
  161. package/esm2022/settings/components/country-detail/country-detail.component.mjs +3 -3
  162. package/esm2022/settings/components/country-list/country-list.component.mjs +3 -3
  163. package/esm2022/settings/components/global-settings/global-settings.component.mjs +3 -3
  164. package/esm2022/settings/components/payment-method-detail/payment-method-detail.component.mjs +3 -3
  165. package/esm2022/settings/components/payment-method-list/payment-method-list.component.mjs +3 -3
  166. package/esm2022/settings/components/profile/profile.component.mjs +3 -3
  167. package/esm2022/settings/components/role-list/role-list.component.mjs +3 -3
  168. package/esm2022/settings/components/seller-detail/seller-detail.component.mjs +3 -3
  169. package/esm2022/settings/components/seller-list/seller-list.component.mjs +3 -3
  170. package/esm2022/settings/components/shipping-method-detail/shipping-method-detail.component.mjs +3 -3
  171. package/esm2022/settings/components/shipping-method-list/shipping-method-list.component.mjs +3 -3
  172. package/esm2022/settings/components/tax-category-detail/tax-category-detail.component.mjs +3 -3
  173. package/esm2022/settings/components/tax-category-list/tax-category-list.component.mjs +3 -3
  174. package/esm2022/settings/components/tax-rate-detail/tax-rate-detail.component.mjs +3 -3
  175. package/esm2022/settings/components/tax-rate-list/tax-rate-list.component.mjs +3 -3
  176. package/esm2022/settings/components/zone-detail/zone-detail.component.mjs +3 -3
  177. package/esm2022/settings/components/zone-list/zone-list.component.mjs +3 -3
  178. package/esm2022/settings/components/zone-member-list/zone-member-list.component.mjs +3 -3
  179. package/esm2022/settings/settings.routes.mjs +1 -1
  180. package/esm2022/system/components/job-list/job-list.component.mjs +3 -3
  181. package/fesm2022/vendure-admin-ui-catalog.mjs +34 -31
  182. package/fesm2022/vendure-admin-ui-catalog.mjs.map +1 -1
  183. package/fesm2022/vendure-admin-ui-core.mjs +659 -346
  184. package/fesm2022/vendure-admin-ui-core.mjs.map +1 -1
  185. package/fesm2022/vendure-admin-ui-customer.mjs +19 -18
  186. package/fesm2022/vendure-admin-ui-customer.mjs.map +1 -1
  187. package/fesm2022/vendure-admin-ui-dashboard.mjs +5 -8
  188. package/fesm2022/vendure-admin-ui-dashboard.mjs.map +1 -1
  189. package/fesm2022/vendure-admin-ui-marketing.mjs +4 -4
  190. package/fesm2022/vendure-admin-ui-marketing.mjs.map +1 -1
  191. package/fesm2022/vendure-admin-ui-order.mjs +14 -16
  192. package/fesm2022/vendure-admin-ui-order.mjs.map +1 -1
  193. package/fesm2022/vendure-admin-ui-react.mjs +641 -0
  194. package/fesm2022/vendure-admin-ui-react.mjs.map +1 -0
  195. package/fesm2022/vendure-admin-ui-settings.mjs +41 -41
  196. package/fesm2022/vendure-admin-ui-settings.mjs.map +1 -1
  197. package/fesm2022/vendure-admin-ui-system.mjs +2 -2
  198. package/fesm2022/vendure-admin-ui-system.mjs.map +1 -1
  199. package/marketing/components/promotion-detail/promotion-detail.component.d.ts +3 -1
  200. package/order/components/order-detail/order-detail.component.d.ts +3 -1
  201. package/order/components/order-history/order-history-entry-host.component.d.ts +2 -3
  202. package/package.json +22 -14
  203. package/react/components/react-custom-column.component.d.ts +17 -0
  204. package/react/components/react-custom-detail.component.d.ts +24 -0
  205. package/react/components/react-form-input.component.d.ts +20 -0
  206. package/react/components/react-route.component.d.ts +10 -0
  207. package/react/directives/react-component-host.directive.d.ts +23 -0
  208. package/react/index.d.ts +5 -0
  209. package/react/public_api.d.ts +17 -0
  210. package/react/react-components/Card.d.ts +24 -0
  211. package/react/react-components/Link.d.ts +22 -0
  212. package/react/react-hooks/use-detail-component-data.d.ts +32 -0
  213. package/react/react-hooks/use-form-control.d.ts +29 -0
  214. package/react/react-hooks/use-injector.d.ts +24 -0
  215. package/react/react-hooks/use-page-metadata.d.ts +30 -0
  216. package/react/react-hooks/use-query.d.ts +92 -0
  217. package/react/register-react-custom-detail-component.d.ts +38 -0
  218. package/react/register-react-data-table-component.d.ts +81 -0
  219. package/react/register-react-form-input-component.d.ts +9 -0
  220. package/react/register-react-route-component.d.ts +26 -0
  221. package/react/types.d.ts +17 -0
  222. package/settings/components/admin-detail/admin-detail.component.d.ts +3 -1
  223. package/settings/components/channel-detail/channel-detail.component.d.ts +5 -3
  224. package/settings/components/country-detail/country-detail.component.d.ts +3 -1
  225. package/settings/components/global-settings/global-settings.component.d.ts +3 -1
  226. package/settings/components/payment-method-detail/payment-method-detail.component.d.ts +3 -1
  227. package/settings/components/profile/profile.component.d.ts +3 -1
  228. package/settings/components/seller-detail/seller-detail.component.d.ts +3 -1
  229. package/settings/components/shipping-method-detail/shipping-method-detail.component.d.ts +3 -1
  230. package/settings/components/tax-category-detail/tax-category-detail.component.d.ts +3 -1
  231. package/settings/components/tax-rate-detail/tax-rate-detail.component.d.ts +3 -1
  232. package/settings/components/zone-detail/zone-detail.component.d.ts +3 -1
  233. package/static/i18n-messages/cs.json +789 -789
  234. package/static/i18n-messages/de.json +789 -789
  235. package/static/i18n-messages/en.json +789 -789
  236. package/static/i18n-messages/es.json +789 -789
  237. package/static/i18n-messages/fr.json +789 -789
  238. package/static/i18n-messages/he.json +789 -789
  239. package/static/i18n-messages/it.json +789 -789
  240. package/static/i18n-messages/pl.json +789 -789
  241. package/static/i18n-messages/pt_BR.json +789 -789
  242. package/static/i18n-messages/pt_PT.json +789 -789
  243. package/static/i18n-messages/ru.json +789 -789
  244. package/static/i18n-messages/uk.json +789 -789
  245. package/static/i18n-messages/zh_Hans.json +789 -789
  246. package/static/i18n-messages/zh_Hant.json +789 -789
  247. package/static/styles/_mixins.scss +4 -4
  248. package/static/styles/global/_forms.scss +2 -2
  249. package/static/styles/rtl.scss +1 -1
  250. package/static/styles/theme/dark.scss +1 -16
  251. package/static/styles/theme/default.scss +1 -0
  252. package/static/theme.min.css +1 -1
  253. package/core/shared/dynamic-form-inputs/register-dynamic-input-components.d.ts +0 -64
  254. package/esm2022/core/providers/bulk-action-registry/register-bulk-action.mjs +0 -63
  255. package/esm2022/core/providers/dashboard-widget/register-dashboard-widget.mjs +0 -32
  256. package/esm2022/core/shared/dynamic-form-inputs/register-dynamic-input-components.mjs +0 -102
@@ -1,4 +1,4 @@
1
- import { ChangeDetectionStrategy, Component, ContentChild, ContentChildren, EventEmitter, inject, Input, Output, TemplateRef, } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, ContentChild, ContentChildren, EventEmitter, inject, Injector, Input, Output, TemplateRef, } from '@angular/core';
2
2
  import { ActivatedRoute } from '@angular/router';
3
3
  import { PaginationService } from 'ngx-pagination';
4
4
  import { Subject } from 'rxjs';
@@ -6,6 +6,7 @@ import { distinctUntilChanged, map, takeUntil } from 'rxjs/operators';
6
6
  import { BulkActionMenuComponent } from '../bulk-action-menu/bulk-action-menu.component';
7
7
  import { FilterPresetService } from '../data-table-filter-presets/filter-preset.service';
8
8
  import { DataTable2ColumnComponent } from './data-table-column.component';
9
+ import { DataTableCustomComponentService, } from './data-table-custom-component.service';
9
10
  import { DataTableCustomFieldColumnComponent } from './data-table-custom-field-column.component';
10
11
  import { DataTable2SearchComponent } from './data-table-search.component';
11
12
  import * as i0 from "@angular/core";
@@ -17,12 +18,13 @@ import * as i5 from "../items-per-page-controls/items-per-page-controls.componen
17
18
  import * as i6 from "../pagination-controls/pagination-controls.component";
18
19
  import * as i7 from "../form-field/form-field-control.directive";
19
20
  import * as i8 from "../empty-placeholder/empty-placeholder.component";
20
- import * as i9 from "../data-table-filters/data-table-filters.component";
21
- import * as i10 from "../data-table-column-picker/data-table-column-picker.component";
22
- import * as i11 from "../data-table-filter-presets/data-table-filter-presets.component";
23
- import * as i12 from "../data-table-filter-presets/add-filter-preset-button.component";
24
- import * as i13 from "ngx-pagination";
25
- import * as i14 from "@ngx-translate/core";
21
+ import * as i9 from "../ui-extension-point/ui-extension-point.component";
22
+ import * as i10 from "../data-table-filters/data-table-filters.component";
23
+ import * as i11 from "../data-table-column-picker/data-table-column-picker.component";
24
+ import * as i12 from "../data-table-filter-presets/data-table-filter-presets.component";
25
+ import * as i13 from "../data-table-filter-presets/add-filter-preset-button.component";
26
+ import * as i14 from "ngx-pagination";
27
+ import * as i15 from "@ngx-translate/core";
26
28
  /**
27
29
  * @description
28
30
  * A table for displaying PaginatedList results. It is designed to be used inside components which
@@ -93,8 +95,11 @@ export class DataTable2Component {
93
95
  this.activeIndex = -1;
94
96
  this.pageChange = new EventEmitter();
95
97
  this.itemsPerPageChange = new EventEmitter();
98
+ this.injector = inject(Injector);
96
99
  this.route = inject(ActivatedRoute);
97
100
  this.filterPresetService = inject(FilterPresetService);
101
+ this.dataTableCustomComponentService = inject(DataTableCustomComponentService);
102
+ this.customComponents = new Map();
98
103
  // This is used to apply a `user-select: none` CSS rule to the table,
99
104
  // which allows shift-click multi-row selection
100
105
  this.disableSelect = false;
@@ -170,6 +175,14 @@ export class DataTable2Component {
170
175
  column.setVisibility(column.hiddenByDefault);
171
176
  }
172
177
  column.onColumnChange(updateColumnVisibility);
178
+ const config = this.dataTableCustomComponentService.getCustomComponentsFor(this.id, column.id);
179
+ if (config) {
180
+ const injector = Injector.create({
181
+ parent: this.injector,
182
+ providers: config.providers ?? [],
183
+ });
184
+ this.customComponents.set(column.id, { config, injector });
185
+ }
173
186
  });
174
187
  if (this.selectionManager) {
175
188
  document.addEventListener('keydown', this.shiftDownHandler, { passive: true });
@@ -248,11 +261,11 @@ export class DataTable2Component {
248
261
  return dataTableConfig;
249
262
  }
250
263
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: DataTable2Component, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.LocalStorageService }, { token: i2.DataService }], target: i0.ɵɵFactoryTarget.Component }); }
251
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.2", type: DataTable2Component, selector: "vdr-data-table-2", inputs: { id: "id", items: "items", itemsPerPage: "itemsPerPage", currentPage: "currentPage", totalItems: "totalItems", emptyStateLabel: "emptyStateLabel", filters: "filters", activeIndex: "activeIndex" }, outputs: { pageChange: "pageChange", itemsPerPageChange: "itemsPerPageChange" }, providers: [PaginationService, FilterPresetService], queries: [{ propertyName: "searchComponent", first: true, predicate: DataTable2SearchComponent, descendants: true }, { propertyName: "bulkActionMenuComponent", first: true, predicate: BulkActionMenuComponent, descendants: true }, { propertyName: "customSearchTemplate", first: true, predicate: ["vdrDt2CustomSearch"], descendants: true }, { propertyName: "columns", predicate: DataTable2ColumnComponent }, { propertyName: "customFieldColumns", predicate: DataTableCustomFieldColumnComponent }, { propertyName: "templateRefs", predicate: TemplateRef }], usesOnChanges: true, ngImport: i0, template: "<div class=\"bulk-actions\">\r\n <ng-content select=\"vdr-bulk-action-menu\"></ng-content>\r\n</div>\r\n<div class=\"table-wrapper\">\r\n <vdr-data-table-filter-presets [filters]=\"filters\" [dataTableId]=\"id\"></vdr-data-table-filter-presets>\r\n <table class=\"\" [class.no-select]=\"disableSelect\">\r\n <thead [class.items-selected]=\"selectionManager?.selection.length\">\r\n <tr class=\"heading-row\">\r\n <th *ngIf=\"selectionManager\" class=\"selection-col\">\r\n <input\r\n type=\"checkbox\"\r\n clrCheckbox\r\n [checked]=\"selectionManager?.areAllCurrentItemsSelected()\"\r\n (change)=\"onToggleAllClick()\"\r\n />\r\n </th>\r\n <th\r\n *ngFor=\"let column of visibleSortedColumns; last as isLast\"\r\n [class.expand]=\"column.expand\"\r\n >\r\n <div class=\"cell-content\" [ngClass]=\"column.align\">\r\n <span>{{ column.heading }}</span>\r\n <div *ngIf=\"column.sort as sort\" class=\"sort-toggle\">\r\n <button (click)=\"sort.toggleSortOrder()\" [class.active]=\"sort.sortOrder\">\r\n <clr-icon *ngIf=\"!sort.sortOrder\" shape=\"two-way-arrows left\"></clr-icon>\r\n <clr-icon *ngIf=\"sort.sortOrder === 'ASC'\" shape=\"arrow up\"></clr-icon>\r\n <clr-icon *ngIf=\"sort.sortOrder === 'DESC'\" shape=\"arrow down\"></clr-icon>\r\n </button>\r\n <div class=\"sort-label\" *ngIf=\"sort.sortOrder\">{{ sort.sortOrder }}</div>\r\n </div>\r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"column-picker\">\r\n <vdr-data-table-colum-picker\r\n [uiLanguage]=\"uiLanguage$ | async\"\r\n [columns]=\"sortedColumns\"\r\n (reorder)=\"onColumnReorder($event)\"\r\n (resetColumns)=\"onColumnsReset()\"\r\n ></vdr-data-table-colum-picker>\r\n </div>\r\n </th>\r\n </tr>\r\n <tr *ngIf=\"searchComponent || customSearchTemplate || filters?.length\">\r\n <th\r\n [attr.colspan]=\"visibleSortedColumns.length + (selectionManager ? 2 : 1)\"\r\n class=\"filter-row\"\r\n [class.active]=\"showSearchFilterRow\"\r\n >\r\n <button\r\n class=\"button-ghost toggle-search-filter-row\"\r\n [class.active]=\"showSearchFilterRow\"\r\n (click)=\"toggleSearchFilterRow()\"\r\n [title]=\"'common.search-and-filter-list' | translate\"\r\n >\r\n <clr-icon shape=\"search\"></clr-icon>\r\n </button>\r\n <div class=\"filter-row-wrapper\" [class.hidden]=\"!showSearchFilterRow\">\r\n <ng-container *ngTemplateOutlet=\"searchComponent?.template\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"customSearchTemplate\"></ng-container>\r\n <ng-container *ngIf=\"filters\">\r\n <div class=\"filters\">\r\n <vdr-data-table-filters\r\n *ngFor=\"let activeFilter of filters.activeFilters\"\r\n [filterWithValue]=\"activeFilter\"\r\n [filters]=\"filters\"\r\n class=\"mt-1\"\r\n ></vdr-data-table-filters>\r\n <vdr-data-table-filters\r\n *ngIf=\"filters.length\"\r\n [filters]=\"filters\"\r\n class=\"mt-1\"\r\n ></vdr-data-table-filters>\r\n <vdr-add-filter-preset-button\r\n [filters]=\"filters\"\r\n [dataTableId]=\"id\"\r\n ></vdr-add-filter-preset-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr\r\n *ngFor=\"\r\n let item of items\r\n | paginate\r\n : {\r\n id: id,\r\n itemsPerPage: itemsPerPage,\r\n currentPage: currentPage,\r\n totalItems: totalItems\r\n };\r\n index as i;\r\n trackBy: trackByFn\r\n \"\r\n >\r\n <td *ngIf=\"selectionManager\" class=\"selection-col\" [class.active]=\"activeIndex === i\">\r\n <input\r\n type=\"checkbox\"\r\n clrCheckbox\r\n [checked]=\"selectionManager?.isSelected(item)\"\r\n (click)=\"onRowClick(item, $event)\"\r\n />\r\n </td>\r\n <td *ngFor=\"let column of visibleSortedColumns\" [class.active]=\"activeIndex === i\">\r\n <div class=\"cell-content\" [ngClass]=\"column.align\">\r\n <ng-container\r\n *ngTemplateOutlet=\"column.template; context: { item: item, index: i }\"\r\n ></ng-container>\r\n </div>\r\n </td>\r\n <td [class.active]=\"activeIndex === i\"><!-- column select --></td>\r\n </tr>\r\n <ng-container>\r\n <tr *ngIf=\"!items?.length\">\r\n <td [attr.colspan]=\"visibleSortedColumns.length + (selectionManager ? 2 : 1)\">\r\n <vdr-empty-placeholder [emptyStateLabel]=\"emptyStateLabel\"></vdr-empty-placeholder>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n </table>\r\n</div>\r\n<div class=\"table-footer\">\r\n <vdr-items-per-page-controls\r\n *ngIf=\"totalItems\"\r\n [itemsPerPage]=\"itemsPerPage\"\r\n (itemsPerPageChange)=\"itemsPerPageChange.emit($event)\"\r\n ></vdr-items-per-page-controls>\r\n <div *ngIf=\"totalItems\" class=\"total-items-count\">\r\n {{ 'common.total-items' | translate : { currentStart, currentEnd, totalItems } }}\r\n </div>\r\n\r\n <vdr-pagination-controls\r\n *ngIf=\"totalItems\"\r\n [id]=\"id\"\r\n [currentPage]=\"currentPage\"\r\n [itemsPerPage]=\"itemsPerPage\"\r\n [totalItems]=\"totalItems\"\r\n (pageChange)=\"pageChange.emit($event)\"\r\n ></vdr-pagination-controls>\r\n</div>\r\n", styles: [":host{display:block;max-width:100%;position:relative;margin-bottom:calc(var(--space-unit) * 4);container-type:inline-size}th{border-bottom:1px solid var(--color-weight-200);font-size:var(--font-size-xs);font-weight:600;text-transform:uppercase;position:relative;white-space:nowrap}th,td{padding:calc(var(--space-unit) * 1.5) calc(var(--space-unit) * 1)}tr td:first-of-type,tr th:first-of-type{text-align:center}@media screen and (min-width: 992px){tr td:first-of-type,tr th:first-of-type{padding-inline-start:var(--surface-margin-left);text-align:start}}th:last-of-type,td:last-of-type{border-inline-end:1px solid var(--color-weight-200)}tr:first-of-type th:last-of-type{border-image:linear-gradient(0deg,var(--color-weight-200),transparent) 1}tr:last-of-type td:last-of-type{border-image:linear-gradient(180deg,var(--color-weight-200),transparent) 1}tbody td{border-bottom:1px solid var(--color-table-row-separator)}tbody tr:hover{background-color:var(--color-table-row-hover-bg)}.bulk-actions{margin-inline-start:calc(var(--space-unit) * 5);background-color:var(--color-surface-bg);z-index:10;display:flex;position:absolute;top:5px;height:40px}@media screen and (min-width: 992px){.bulk-actions{margin-inline-start:calc(var(--space-unit) * 8.5)}}@media screen and (min-width: 1280px){.bulk-actions{margin-inline-start:calc(var(--space-unit) * 10.5)}}.table-wrapper{display:block;overflow-y:hidden;overflow-x:auto;width:100%;max-width:var(--surface-width)}table{width:100%}table.no-select{-webkit-user-select:none;user-select:none}.column-picker{width:24px}.sort-toggle{display:flex;align-items:center;margin-inline-start:calc(var(--space-unit) * .5)}.sort-toggle button{border:0;border-radius:var(--border-radius-lg);color:var(--color-weight-500);padding:0 2px;cursor:pointer;background-color:transparent}.sort-toggle button.active{color:var(--color-primary-700)}.sort-toggle .sort-label{margin-inline-start:calc(var(--space-unit) * .5);font-size:10px;color:var(--color-primary-600);font-weight:400}.toggle-search-filter-row{position:absolute;top:-12px;left:4px}@media screen and (min-width: 1280px){.toggle-search-filter-row{left:8px}}.toggle-search-filter-row.active{background-color:var(--color-primary-700);color:var(--color-primary-100);border-color:var(--color-primary-700)}th.filter-row{position:relative;font-size:var(--font-size-base);font-weight:400;background-color:var(--color-weight-100);box-shadow:var(--data-table-filter-box-shadow);border-left-width:0;border-right-width:0;text-align:initial;padding:0}th.filter-row input{width:100%}th.filter-row.active{border-bottom:1px solid var(--color-weight-200)}th.filter-row .filters{margin-top:calc(var(--space-unit) * 1);display:flex;flex-wrap:wrap;gap:calc(var(--space-unit) * .5)}.filter-row-wrapper{padding:calc(var(--space-unit) * 4);padding-inline-start:0;max-height:150px;transition:max-height .2s,padding .2s,opacity .2s}.filter-row-wrapper.hidden{max-height:0px;padding-top:0;padding-bottom:0;overflow:hidden;opacity:0}.cell-link{display:block;width:100%;height:100%}td.active{background-color:var(--color-table-row-active-bg)}.cell-content{display:flex;align-items:center;line-height:var(--font-size-sm);color:var(--color-weight-700)}.cell-content.left{justify-content:flex-start}.cell-content.center{justify-content:center}.cell-content.right{justify-content:flex-end}.selection-col{width:calc(var(--space-unit) * 8)}vdr-empty-placeholder{width:100%}.table-footer{display:flex;align-items:baseline;justify-content:space-between;margin-top:var(--space-unit);margin-inline-start:var(--surface-margin-left);margin-inline-end:var(--space-unit)}.total-items-count{font-size:var(--font-size-xs)}@container (max-width: 500px){.total-items-count{display:none}}\n"], dependencies: [{ kind: "directive", type: i3.ClrDatagridItemsTrackBy, selector: "[ngForTrackBy]", inputs: ["ngForTrackBy"] }, { kind: "directive", type: i3.ClrIconCustomTag, selector: "clr-icon" }, { kind: "directive", type: i3.ClrCheckbox, selector: "[clrCheckbox],[clrToggle]" }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.ItemsPerPageControlsComponent, selector: "vdr-items-per-page-controls", inputs: ["itemsPerPage"], outputs: ["itemsPerPageChange"] }, { kind: "component", type: i6.PaginationControlsComponent, selector: "vdr-pagination-controls", inputs: ["id", "currentPage", "itemsPerPage", "totalItems"], outputs: ["pageChange"] }, { kind: "directive", type: i7.FormFieldControlDirective, selector: "input, textarea, select" }, { kind: "component", type: i8.EmptyPlaceholderComponent, selector: "vdr-empty-placeholder", inputs: ["emptyStateLabel"] }, { kind: "component", type: i9.DataTableFiltersComponent, selector: "vdr-data-table-filters", inputs: ["filters", "filterWithValue"] }, { kind: "component", type: i10.DataTableColumnPickerComponent, selector: "vdr-data-table-colum-picker", inputs: ["columns", "uiLanguage"], outputs: ["reorder", "resetColumns"] }, { kind: "component", type: i11.DataTableFilterPresetsComponent, selector: "vdr-data-table-filter-presets", inputs: ["dataTableId", "filters"] }, { kind: "component", type: i12.AddFilterPresetButtonComponent, selector: "vdr-add-filter-preset-button", inputs: ["dataTableId", "filters"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i13.PaginatePipe, name: "paginate" }, { kind: "pipe", type: i14.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
264
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.2", type: DataTable2Component, selector: "vdr-data-table-2", inputs: { id: "id", items: "items", itemsPerPage: "itemsPerPage", currentPage: "currentPage", totalItems: "totalItems", emptyStateLabel: "emptyStateLabel", filters: "filters", activeIndex: "activeIndex" }, outputs: { pageChange: "pageChange", itemsPerPageChange: "itemsPerPageChange" }, providers: [PaginationService, FilterPresetService], queries: [{ propertyName: "searchComponent", first: true, predicate: DataTable2SearchComponent, descendants: true }, { propertyName: "bulkActionMenuComponent", first: true, predicate: BulkActionMenuComponent, descendants: true }, { propertyName: "customSearchTemplate", first: true, predicate: ["vdrDt2CustomSearch"], descendants: true }, { propertyName: "columns", predicate: DataTable2ColumnComponent }, { propertyName: "customFieldColumns", predicate: DataTableCustomFieldColumnComponent }, { propertyName: "templateRefs", predicate: TemplateRef }], usesOnChanges: true, ngImport: i0, template: "<vdr-data-table-filter-presets\r\n *ngIf=\"filters\"\r\n [filters]=\"filters\"\r\n [dataTableId]=\"id\"\r\n></vdr-data-table-filter-presets>\r\n<div class=\"table-wrapper\">\r\n <div class=\"bulk-actions\">\r\n <ng-content select=\"vdr-bulk-action-menu\"></ng-content>\r\n </div>\r\n <table class=\"\" [class.no-select]=\"disableSelect\">\r\n <thead [class.items-selected]=\"selectionManager?.selection.length\">\r\n <tr class=\"heading-row\">\r\n <th *ngIf=\"selectionManager\" class=\"selection-col\">\r\n <input\r\n type=\"checkbox\"\r\n clrCheckbox\r\n [checked]=\"selectionManager?.areAllCurrentItemsSelected()\"\r\n (change)=\"onToggleAllClick()\"\r\n />\r\n </th>\r\n <th\r\n *ngFor=\"let column of visibleSortedColumns; last as isLast\"\r\n [class.expand]=\"column.expand\"\r\n >\r\n <div class=\"cell-content\" [ngClass]=\"column.align\">\r\n <vdr-ui-extension-point\r\n [locationId]=\"id\"\r\n [metadata]=\"column.id\"\r\n api=\"dataTable\"\r\n [topPx]=\"-6\"\r\n [leftPx]=\"-24\"\r\n display=\"block\"\r\n >\r\n <span>{{ column.heading }}</span>\r\n </vdr-ui-extension-point>\r\n <div *ngIf=\"column.sort as sort\" class=\"sort-toggle\">\r\n <button (click)=\"sort.toggleSortOrder()\" [class.active]=\"sort.sortOrder\">\r\n <clr-icon *ngIf=\"!sort.sortOrder\" shape=\"two-way-arrows left\"></clr-icon>\r\n <clr-icon *ngIf=\"sort.sortOrder === 'ASC'\" shape=\"arrow up\"></clr-icon>\r\n <clr-icon *ngIf=\"sort.sortOrder === 'DESC'\" shape=\"arrow down\"></clr-icon>\r\n </button>\r\n <div class=\"sort-label\" *ngIf=\"sort.sortOrder\">{{ sort.sortOrder }}</div>\r\n </div>\r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"column-picker\">\r\n <vdr-data-table-colum-picker\r\n [uiLanguage]=\"uiLanguage$ | async\"\r\n [columns]=\"sortedColumns\"\r\n (reorder)=\"onColumnReorder($event)\"\r\n (resetColumns)=\"onColumnsReset()\"\r\n ></vdr-data-table-colum-picker>\r\n </div>\r\n </th>\r\n </tr>\r\n <tr *ngIf=\"searchComponent || customSearchTemplate || filters?.length\">\r\n <th\r\n [attr.colspan]=\"visibleSortedColumns.length + (selectionManager ? 2 : 1)\"\r\n class=\"filter-row\"\r\n [class.active]=\"showSearchFilterRow\"\r\n >\r\n <button\r\n class=\"button-ghost toggle-search-filter-row\"\r\n [class.active]=\"showSearchFilterRow\"\r\n (click)=\"toggleSearchFilterRow()\"\r\n [title]=\"'common.search-and-filter-list' | translate\"\r\n >\r\n <clr-icon shape=\"search\"></clr-icon>\r\n </button>\r\n <div class=\"filter-row-wrapper\" [class.hidden]=\"!showSearchFilterRow\">\r\n <ng-container *ngTemplateOutlet=\"searchComponent?.template\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"customSearchTemplate\"></ng-container>\r\n <ng-container *ngIf=\"filters\">\r\n <div class=\"filters\">\r\n <vdr-data-table-filters\r\n *ngFor=\"let activeFilter of filters.activeFilters\"\r\n [filterWithValue]=\"activeFilter\"\r\n [filters]=\"filters\"\r\n class=\"mt-1\"\r\n ></vdr-data-table-filters>\r\n <vdr-data-table-filters\r\n *ngIf=\"filters.length\"\r\n [filters]=\"filters\"\r\n class=\"mt-1\"\r\n ></vdr-data-table-filters>\r\n <vdr-add-filter-preset-button\r\n [filters]=\"filters\"\r\n [dataTableId]=\"id\"\r\n ></vdr-add-filter-preset-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr\r\n *ngFor=\"\r\n let item of items\r\n | paginate\r\n : {\r\n id: id,\r\n itemsPerPage: itemsPerPage,\r\n currentPage: currentPage,\r\n totalItems: totalItems\r\n };\r\n index as i;\r\n trackBy: trackByFn\r\n \"\r\n >\r\n <td *ngIf=\"selectionManager\" class=\"selection-col\" [class.active]=\"activeIndex === i\">\r\n <input\r\n type=\"checkbox\"\r\n clrCheckbox\r\n [checked]=\"selectionManager?.isSelected(item)\"\r\n (click)=\"onRowClick(item, $event)\"\r\n />\r\n </td>\r\n <td *ngFor=\"let column of visibleSortedColumns\" [class.active]=\"activeIndex === i\">\r\n <div class=\"cell-content\" [ngClass]=\"column.align\">\r\n <ng-container\r\n *ngIf=\"customComponents.get(column.id) as componentConfig; else defaultComponent\"\r\n >\r\n <ng-container\r\n *ngComponentOutlet=\"\r\n componentConfig.config.component;\r\n inputs: { rowItem: item };\r\n injector: componentConfig.injector\r\n \"\r\n ></ng-container>\r\n </ng-container>\r\n <ng-template #defaultComponent>\r\n <ng-container\r\n *ngTemplateOutlet=\"column.template; context: { item: item, index: i }\"\r\n ></ng-container>\r\n </ng-template>\r\n </div>\r\n </td>\r\n <td [class.active]=\"activeIndex === i\"><!-- column select --></td>\r\n </tr>\r\n <ng-container>\r\n <tr *ngIf=\"!items?.length\">\r\n <td [attr.colspan]=\"visibleSortedColumns.length + (selectionManager ? 2 : 1)\">\r\n <vdr-empty-placeholder [emptyStateLabel]=\"emptyStateLabel\"></vdr-empty-placeholder>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n </table>\r\n</div>\r\n<div class=\"table-footer\">\r\n <vdr-items-per-page-controls\r\n *ngIf=\"totalItems\"\r\n [itemsPerPage]=\"itemsPerPage\"\r\n (itemsPerPageChange)=\"itemsPerPageChange.emit($event)\"\r\n ></vdr-items-per-page-controls>\r\n <div *ngIf=\"totalItems\" class=\"total-items-count\">\r\n {{ 'common.total-items' | translate : { currentStart, currentEnd, totalItems } }}\r\n </div>\r\n\r\n <vdr-pagination-controls\r\n *ngIf=\"totalItems\"\r\n [id]=\"id\"\r\n [currentPage]=\"currentPage\"\r\n [itemsPerPage]=\"itemsPerPage\"\r\n [totalItems]=\"totalItems\"\r\n (pageChange)=\"pageChange.emit($event)\"\r\n ></vdr-pagination-controls>\r\n</div>\r\n", styles: [":host{display:block;max-width:100%;position:relative;margin-bottom:calc(var(--space-unit) * 4);container-type:inline-size}th{border-bottom:1px solid var(--color-table-header-border);font-size:var(--font-size-xs);font-weight:600;text-transform:uppercase;position:relative;white-space:nowrap}th,td{padding:calc(var(--space-unit) * 1.5) calc(var(--space-unit) * 1)}tr td:first-of-type,tr th:first-of-type{text-align:center}@media screen and (min-width: 992px){tr td:first-of-type,tr th:first-of-type{padding-inline-start:var(--surface-margin-left);text-align:start}}th:last-of-type,td:last-of-type{border-inline-end:1px solid var(--color-table-header-border)}tr:first-of-type th:last-of-type{border-image:linear-gradient(0deg,var(--color-table-header-border),transparent) 1}tr:last-of-type td:last-of-type{border-image:linear-gradient(180deg,var(--color-table-header-border),transparent) 1}tbody td{border-bottom:1px solid var(--color-table-row-separator)}tbody tr:hover{background-color:var(--color-table-row-hover-bg)}.bulk-actions{margin-inline-start:calc(var(--space-unit) * 5);background-color:var(--color-surface-bg);z-index:10;display:flex;position:absolute;top:5px;height:40px}@media screen and (min-width: 992px){.bulk-actions{margin-inline-start:calc(var(--space-unit) * 8.5)}}@media screen and (min-width: 1280px){.bulk-actions{margin-inline-start:calc(var(--space-unit) * 10.5)}}.table-wrapper{display:block;overflow-y:hidden;overflow-x:auto;position:relative;width:100%;max-width:var(--surface-width)}table{width:100%}table.no-select{-webkit-user-select:none;user-select:none}.column-picker{width:24px}.sort-toggle{display:flex;align-items:center;margin-inline-start:calc(var(--space-unit) * .5)}.sort-toggle button{border:0;border-radius:var(--border-radius-lg);color:var(--color-weight-500);padding:0 2px;cursor:pointer;background-color:transparent}.sort-toggle button.active{color:var(--color-primary-700)}.sort-toggle .sort-label{margin-inline-start:calc(var(--space-unit) * .5);font-size:10px;color:var(--color-primary-600);font-weight:400}.toggle-search-filter-row{position:absolute;top:-12px;left:4px}@media screen and (min-width: 1280px){.toggle-search-filter-row{left:8px}}.toggle-search-filter-row.active{background-color:var(--color-primary-700);color:var(--color-primary-100);border-color:var(--color-primary-700)}th.filter-row{position:relative;font-size:var(--font-size-base);font-weight:400;background-color:var(--color-weight-100);box-shadow:var(--data-table-filter-box-shadow);border-left-width:0;border-right-width:0;text-align:initial;padding:0}th.filter-row input{width:100%}th.filter-row.active{border-bottom:1px solid var(--color-table-header-border)}th.filter-row .filters{margin-top:calc(var(--space-unit) * 1);display:flex;flex-wrap:wrap;gap:calc(var(--space-unit) * .5)}.filter-row-wrapper{padding:calc(var(--space-unit) * 4);padding-inline-start:0;max-height:150px;transition:max-height .2s,padding .2s,opacity .2s}.filter-row-wrapper.hidden{max-height:0px;padding-top:0;padding-bottom:0;overflow:hidden;opacity:0}.cell-link{display:block;width:100%;height:100%}td.active{background-color:var(--color-table-row-active-bg)}.cell-content{display:flex;align-items:center;line-height:var(--font-size-sm);color:var(--color-weight-700)}.cell-content.left{justify-content:flex-start}.cell-content.center{justify-content:center}.cell-content.right{justify-content:flex-end}.selection-col{width:calc(var(--space-unit) * 8)}vdr-empty-placeholder{width:100%}.table-footer{display:flex;align-items:baseline;justify-content:space-between;margin-top:var(--space-unit);margin-inline-start:var(--surface-margin-left);margin-inline-end:var(--space-unit)}.total-items-count{font-size:var(--font-size-xs)}@container (max-width: 500px){.total-items-count{display:none}}\n"], dependencies: [{ kind: "directive", type: i3.ClrDatagridItemsTrackBy, selector: "[ngForTrackBy]", inputs: ["ngForTrackBy"] }, { kind: "directive", type: i3.ClrIconCustomTag, selector: "clr-icon" }, { kind: "directive", type: i3.ClrCheckbox, selector: "[clrCheckbox],[clrToggle]" }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.ItemsPerPageControlsComponent, selector: "vdr-items-per-page-controls", inputs: ["itemsPerPage"], outputs: ["itemsPerPageChange"] }, { kind: "component", type: i6.PaginationControlsComponent, selector: "vdr-pagination-controls", inputs: ["id", "currentPage", "itemsPerPage", "totalItems"], outputs: ["pageChange"] }, { kind: "directive", type: i7.FormFieldControlDirective, selector: "input, textarea, select" }, { kind: "component", type: i8.EmptyPlaceholderComponent, selector: "vdr-empty-placeholder", inputs: ["emptyStateLabel"] }, { kind: "component", type: i9.UiExtensionPointComponent, selector: "vdr-ui-extension-point", inputs: ["locationId", "metadata", "topPx", "leftPx", "display", "api"] }, { kind: "component", type: i10.DataTableFiltersComponent, selector: "vdr-data-table-filters", inputs: ["filters", "filterWithValue"] }, { kind: "component", type: i11.DataTableColumnPickerComponent, selector: "vdr-data-table-colum-picker", inputs: ["columns", "uiLanguage"], outputs: ["reorder", "resetColumns"] }, { kind: "component", type: i12.DataTableFilterPresetsComponent, selector: "vdr-data-table-filter-presets", inputs: ["dataTableId", "filters"] }, { kind: "component", type: i13.AddFilterPresetButtonComponent, selector: "vdr-add-filter-preset-button", inputs: ["dataTableId", "filters"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i14.PaginatePipe, name: "paginate" }, { kind: "pipe", type: i15.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
252
265
  }
253
266
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: DataTable2Component, decorators: [{
254
267
  type: Component,
255
- args: [{ selector: 'vdr-data-table-2', changeDetection: ChangeDetectionStrategy.OnPush, providers: [PaginationService, FilterPresetService], template: "<div class=\"bulk-actions\">\r\n <ng-content select=\"vdr-bulk-action-menu\"></ng-content>\r\n</div>\r\n<div class=\"table-wrapper\">\r\n <vdr-data-table-filter-presets [filters]=\"filters\" [dataTableId]=\"id\"></vdr-data-table-filter-presets>\r\n <table class=\"\" [class.no-select]=\"disableSelect\">\r\n <thead [class.items-selected]=\"selectionManager?.selection.length\">\r\n <tr class=\"heading-row\">\r\n <th *ngIf=\"selectionManager\" class=\"selection-col\">\r\n <input\r\n type=\"checkbox\"\r\n clrCheckbox\r\n [checked]=\"selectionManager?.areAllCurrentItemsSelected()\"\r\n (change)=\"onToggleAllClick()\"\r\n />\r\n </th>\r\n <th\r\n *ngFor=\"let column of visibleSortedColumns; last as isLast\"\r\n [class.expand]=\"column.expand\"\r\n >\r\n <div class=\"cell-content\" [ngClass]=\"column.align\">\r\n <span>{{ column.heading }}</span>\r\n <div *ngIf=\"column.sort as sort\" class=\"sort-toggle\">\r\n <button (click)=\"sort.toggleSortOrder()\" [class.active]=\"sort.sortOrder\">\r\n <clr-icon *ngIf=\"!sort.sortOrder\" shape=\"two-way-arrows left\"></clr-icon>\r\n <clr-icon *ngIf=\"sort.sortOrder === 'ASC'\" shape=\"arrow up\"></clr-icon>\r\n <clr-icon *ngIf=\"sort.sortOrder === 'DESC'\" shape=\"arrow down\"></clr-icon>\r\n </button>\r\n <div class=\"sort-label\" *ngIf=\"sort.sortOrder\">{{ sort.sortOrder }}</div>\r\n </div>\r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"column-picker\">\r\n <vdr-data-table-colum-picker\r\n [uiLanguage]=\"uiLanguage$ | async\"\r\n [columns]=\"sortedColumns\"\r\n (reorder)=\"onColumnReorder($event)\"\r\n (resetColumns)=\"onColumnsReset()\"\r\n ></vdr-data-table-colum-picker>\r\n </div>\r\n </th>\r\n </tr>\r\n <tr *ngIf=\"searchComponent || customSearchTemplate || filters?.length\">\r\n <th\r\n [attr.colspan]=\"visibleSortedColumns.length + (selectionManager ? 2 : 1)\"\r\n class=\"filter-row\"\r\n [class.active]=\"showSearchFilterRow\"\r\n >\r\n <button\r\n class=\"button-ghost toggle-search-filter-row\"\r\n [class.active]=\"showSearchFilterRow\"\r\n (click)=\"toggleSearchFilterRow()\"\r\n [title]=\"'common.search-and-filter-list' | translate\"\r\n >\r\n <clr-icon shape=\"search\"></clr-icon>\r\n </button>\r\n <div class=\"filter-row-wrapper\" [class.hidden]=\"!showSearchFilterRow\">\r\n <ng-container *ngTemplateOutlet=\"searchComponent?.template\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"customSearchTemplate\"></ng-container>\r\n <ng-container *ngIf=\"filters\">\r\n <div class=\"filters\">\r\n <vdr-data-table-filters\r\n *ngFor=\"let activeFilter of filters.activeFilters\"\r\n [filterWithValue]=\"activeFilter\"\r\n [filters]=\"filters\"\r\n class=\"mt-1\"\r\n ></vdr-data-table-filters>\r\n <vdr-data-table-filters\r\n *ngIf=\"filters.length\"\r\n [filters]=\"filters\"\r\n class=\"mt-1\"\r\n ></vdr-data-table-filters>\r\n <vdr-add-filter-preset-button\r\n [filters]=\"filters\"\r\n [dataTableId]=\"id\"\r\n ></vdr-add-filter-preset-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr\r\n *ngFor=\"\r\n let item of items\r\n | paginate\r\n : {\r\n id: id,\r\n itemsPerPage: itemsPerPage,\r\n currentPage: currentPage,\r\n totalItems: totalItems\r\n };\r\n index as i;\r\n trackBy: trackByFn\r\n \"\r\n >\r\n <td *ngIf=\"selectionManager\" class=\"selection-col\" [class.active]=\"activeIndex === i\">\r\n <input\r\n type=\"checkbox\"\r\n clrCheckbox\r\n [checked]=\"selectionManager?.isSelected(item)\"\r\n (click)=\"onRowClick(item, $event)\"\r\n />\r\n </td>\r\n <td *ngFor=\"let column of visibleSortedColumns\" [class.active]=\"activeIndex === i\">\r\n <div class=\"cell-content\" [ngClass]=\"column.align\">\r\n <ng-container\r\n *ngTemplateOutlet=\"column.template; context: { item: item, index: i }\"\r\n ></ng-container>\r\n </div>\r\n </td>\r\n <td [class.active]=\"activeIndex === i\"><!-- column select --></td>\r\n </tr>\r\n <ng-container>\r\n <tr *ngIf=\"!items?.length\">\r\n <td [attr.colspan]=\"visibleSortedColumns.length + (selectionManager ? 2 : 1)\">\r\n <vdr-empty-placeholder [emptyStateLabel]=\"emptyStateLabel\"></vdr-empty-placeholder>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n </table>\r\n</div>\r\n<div class=\"table-footer\">\r\n <vdr-items-per-page-controls\r\n *ngIf=\"totalItems\"\r\n [itemsPerPage]=\"itemsPerPage\"\r\n (itemsPerPageChange)=\"itemsPerPageChange.emit($event)\"\r\n ></vdr-items-per-page-controls>\r\n <div *ngIf=\"totalItems\" class=\"total-items-count\">\r\n {{ 'common.total-items' | translate : { currentStart, currentEnd, totalItems } }}\r\n </div>\r\n\r\n <vdr-pagination-controls\r\n *ngIf=\"totalItems\"\r\n [id]=\"id\"\r\n [currentPage]=\"currentPage\"\r\n [itemsPerPage]=\"itemsPerPage\"\r\n [totalItems]=\"totalItems\"\r\n (pageChange)=\"pageChange.emit($event)\"\r\n ></vdr-pagination-controls>\r\n</div>\r\n", styles: [":host{display:block;max-width:100%;position:relative;margin-bottom:calc(var(--space-unit) * 4);container-type:inline-size}th{border-bottom:1px solid var(--color-weight-200);font-size:var(--font-size-xs);font-weight:600;text-transform:uppercase;position:relative;white-space:nowrap}th,td{padding:calc(var(--space-unit) * 1.5) calc(var(--space-unit) * 1)}tr td:first-of-type,tr th:first-of-type{text-align:center}@media screen and (min-width: 992px){tr td:first-of-type,tr th:first-of-type{padding-inline-start:var(--surface-margin-left);text-align:start}}th:last-of-type,td:last-of-type{border-inline-end:1px solid var(--color-weight-200)}tr:first-of-type th:last-of-type{border-image:linear-gradient(0deg,var(--color-weight-200),transparent) 1}tr:last-of-type td:last-of-type{border-image:linear-gradient(180deg,var(--color-weight-200),transparent) 1}tbody td{border-bottom:1px solid var(--color-table-row-separator)}tbody tr:hover{background-color:var(--color-table-row-hover-bg)}.bulk-actions{margin-inline-start:calc(var(--space-unit) * 5);background-color:var(--color-surface-bg);z-index:10;display:flex;position:absolute;top:5px;height:40px}@media screen and (min-width: 992px){.bulk-actions{margin-inline-start:calc(var(--space-unit) * 8.5)}}@media screen and (min-width: 1280px){.bulk-actions{margin-inline-start:calc(var(--space-unit) * 10.5)}}.table-wrapper{display:block;overflow-y:hidden;overflow-x:auto;width:100%;max-width:var(--surface-width)}table{width:100%}table.no-select{-webkit-user-select:none;user-select:none}.column-picker{width:24px}.sort-toggle{display:flex;align-items:center;margin-inline-start:calc(var(--space-unit) * .5)}.sort-toggle button{border:0;border-radius:var(--border-radius-lg);color:var(--color-weight-500);padding:0 2px;cursor:pointer;background-color:transparent}.sort-toggle button.active{color:var(--color-primary-700)}.sort-toggle .sort-label{margin-inline-start:calc(var(--space-unit) * .5);font-size:10px;color:var(--color-primary-600);font-weight:400}.toggle-search-filter-row{position:absolute;top:-12px;left:4px}@media screen and (min-width: 1280px){.toggle-search-filter-row{left:8px}}.toggle-search-filter-row.active{background-color:var(--color-primary-700);color:var(--color-primary-100);border-color:var(--color-primary-700)}th.filter-row{position:relative;font-size:var(--font-size-base);font-weight:400;background-color:var(--color-weight-100);box-shadow:var(--data-table-filter-box-shadow);border-left-width:0;border-right-width:0;text-align:initial;padding:0}th.filter-row input{width:100%}th.filter-row.active{border-bottom:1px solid var(--color-weight-200)}th.filter-row .filters{margin-top:calc(var(--space-unit) * 1);display:flex;flex-wrap:wrap;gap:calc(var(--space-unit) * .5)}.filter-row-wrapper{padding:calc(var(--space-unit) * 4);padding-inline-start:0;max-height:150px;transition:max-height .2s,padding .2s,opacity .2s}.filter-row-wrapper.hidden{max-height:0px;padding-top:0;padding-bottom:0;overflow:hidden;opacity:0}.cell-link{display:block;width:100%;height:100%}td.active{background-color:var(--color-table-row-active-bg)}.cell-content{display:flex;align-items:center;line-height:var(--font-size-sm);color:var(--color-weight-700)}.cell-content.left{justify-content:flex-start}.cell-content.center{justify-content:center}.cell-content.right{justify-content:flex-end}.selection-col{width:calc(var(--space-unit) * 8)}vdr-empty-placeholder{width:100%}.table-footer{display:flex;align-items:baseline;justify-content:space-between;margin-top:var(--space-unit);margin-inline-start:var(--surface-margin-left);margin-inline-end:var(--space-unit)}.total-items-count{font-size:var(--font-size-xs)}@container (max-width: 500px){.total-items-count{display:none}}\n"] }]
268
+ args: [{ selector: 'vdr-data-table-2', changeDetection: ChangeDetectionStrategy.OnPush, providers: [PaginationService, FilterPresetService], template: "<vdr-data-table-filter-presets\r\n *ngIf=\"filters\"\r\n [filters]=\"filters\"\r\n [dataTableId]=\"id\"\r\n></vdr-data-table-filter-presets>\r\n<div class=\"table-wrapper\">\r\n <div class=\"bulk-actions\">\r\n <ng-content select=\"vdr-bulk-action-menu\"></ng-content>\r\n </div>\r\n <table class=\"\" [class.no-select]=\"disableSelect\">\r\n <thead [class.items-selected]=\"selectionManager?.selection.length\">\r\n <tr class=\"heading-row\">\r\n <th *ngIf=\"selectionManager\" class=\"selection-col\">\r\n <input\r\n type=\"checkbox\"\r\n clrCheckbox\r\n [checked]=\"selectionManager?.areAllCurrentItemsSelected()\"\r\n (change)=\"onToggleAllClick()\"\r\n />\r\n </th>\r\n <th\r\n *ngFor=\"let column of visibleSortedColumns; last as isLast\"\r\n [class.expand]=\"column.expand\"\r\n >\r\n <div class=\"cell-content\" [ngClass]=\"column.align\">\r\n <vdr-ui-extension-point\r\n [locationId]=\"id\"\r\n [metadata]=\"column.id\"\r\n api=\"dataTable\"\r\n [topPx]=\"-6\"\r\n [leftPx]=\"-24\"\r\n display=\"block\"\r\n >\r\n <span>{{ column.heading }}</span>\r\n </vdr-ui-extension-point>\r\n <div *ngIf=\"column.sort as sort\" class=\"sort-toggle\">\r\n <button (click)=\"sort.toggleSortOrder()\" [class.active]=\"sort.sortOrder\">\r\n <clr-icon *ngIf=\"!sort.sortOrder\" shape=\"two-way-arrows left\"></clr-icon>\r\n <clr-icon *ngIf=\"sort.sortOrder === 'ASC'\" shape=\"arrow up\"></clr-icon>\r\n <clr-icon *ngIf=\"sort.sortOrder === 'DESC'\" shape=\"arrow down\"></clr-icon>\r\n </button>\r\n <div class=\"sort-label\" *ngIf=\"sort.sortOrder\">{{ sort.sortOrder }}</div>\r\n </div>\r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"column-picker\">\r\n <vdr-data-table-colum-picker\r\n [uiLanguage]=\"uiLanguage$ | async\"\r\n [columns]=\"sortedColumns\"\r\n (reorder)=\"onColumnReorder($event)\"\r\n (resetColumns)=\"onColumnsReset()\"\r\n ></vdr-data-table-colum-picker>\r\n </div>\r\n </th>\r\n </tr>\r\n <tr *ngIf=\"searchComponent || customSearchTemplate || filters?.length\">\r\n <th\r\n [attr.colspan]=\"visibleSortedColumns.length + (selectionManager ? 2 : 1)\"\r\n class=\"filter-row\"\r\n [class.active]=\"showSearchFilterRow\"\r\n >\r\n <button\r\n class=\"button-ghost toggle-search-filter-row\"\r\n [class.active]=\"showSearchFilterRow\"\r\n (click)=\"toggleSearchFilterRow()\"\r\n [title]=\"'common.search-and-filter-list' | translate\"\r\n >\r\n <clr-icon shape=\"search\"></clr-icon>\r\n </button>\r\n <div class=\"filter-row-wrapper\" [class.hidden]=\"!showSearchFilterRow\">\r\n <ng-container *ngTemplateOutlet=\"searchComponent?.template\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"customSearchTemplate\"></ng-container>\r\n <ng-container *ngIf=\"filters\">\r\n <div class=\"filters\">\r\n <vdr-data-table-filters\r\n *ngFor=\"let activeFilter of filters.activeFilters\"\r\n [filterWithValue]=\"activeFilter\"\r\n [filters]=\"filters\"\r\n class=\"mt-1\"\r\n ></vdr-data-table-filters>\r\n <vdr-data-table-filters\r\n *ngIf=\"filters.length\"\r\n [filters]=\"filters\"\r\n class=\"mt-1\"\r\n ></vdr-data-table-filters>\r\n <vdr-add-filter-preset-button\r\n [filters]=\"filters\"\r\n [dataTableId]=\"id\"\r\n ></vdr-add-filter-preset-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr\r\n *ngFor=\"\r\n let item of items\r\n | paginate\r\n : {\r\n id: id,\r\n itemsPerPage: itemsPerPage,\r\n currentPage: currentPage,\r\n totalItems: totalItems\r\n };\r\n index as i;\r\n trackBy: trackByFn\r\n \"\r\n >\r\n <td *ngIf=\"selectionManager\" class=\"selection-col\" [class.active]=\"activeIndex === i\">\r\n <input\r\n type=\"checkbox\"\r\n clrCheckbox\r\n [checked]=\"selectionManager?.isSelected(item)\"\r\n (click)=\"onRowClick(item, $event)\"\r\n />\r\n </td>\r\n <td *ngFor=\"let column of visibleSortedColumns\" [class.active]=\"activeIndex === i\">\r\n <div class=\"cell-content\" [ngClass]=\"column.align\">\r\n <ng-container\r\n *ngIf=\"customComponents.get(column.id) as componentConfig; else defaultComponent\"\r\n >\r\n <ng-container\r\n *ngComponentOutlet=\"\r\n componentConfig.config.component;\r\n inputs: { rowItem: item };\r\n injector: componentConfig.injector\r\n \"\r\n ></ng-container>\r\n </ng-container>\r\n <ng-template #defaultComponent>\r\n <ng-container\r\n *ngTemplateOutlet=\"column.template; context: { item: item, index: i }\"\r\n ></ng-container>\r\n </ng-template>\r\n </div>\r\n </td>\r\n <td [class.active]=\"activeIndex === i\"><!-- column select --></td>\r\n </tr>\r\n <ng-container>\r\n <tr *ngIf=\"!items?.length\">\r\n <td [attr.colspan]=\"visibleSortedColumns.length + (selectionManager ? 2 : 1)\">\r\n <vdr-empty-placeholder [emptyStateLabel]=\"emptyStateLabel\"></vdr-empty-placeholder>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n </table>\r\n</div>\r\n<div class=\"table-footer\">\r\n <vdr-items-per-page-controls\r\n *ngIf=\"totalItems\"\r\n [itemsPerPage]=\"itemsPerPage\"\r\n (itemsPerPageChange)=\"itemsPerPageChange.emit($event)\"\r\n ></vdr-items-per-page-controls>\r\n <div *ngIf=\"totalItems\" class=\"total-items-count\">\r\n {{ 'common.total-items' | translate : { currentStart, currentEnd, totalItems } }}\r\n </div>\r\n\r\n <vdr-pagination-controls\r\n *ngIf=\"totalItems\"\r\n [id]=\"id\"\r\n [currentPage]=\"currentPage\"\r\n [itemsPerPage]=\"itemsPerPage\"\r\n [totalItems]=\"totalItems\"\r\n (pageChange)=\"pageChange.emit($event)\"\r\n ></vdr-pagination-controls>\r\n</div>\r\n", styles: [":host{display:block;max-width:100%;position:relative;margin-bottom:calc(var(--space-unit) * 4);container-type:inline-size}th{border-bottom:1px solid var(--color-table-header-border);font-size:var(--font-size-xs);font-weight:600;text-transform:uppercase;position:relative;white-space:nowrap}th,td{padding:calc(var(--space-unit) * 1.5) calc(var(--space-unit) * 1)}tr td:first-of-type,tr th:first-of-type{text-align:center}@media screen and (min-width: 992px){tr td:first-of-type,tr th:first-of-type{padding-inline-start:var(--surface-margin-left);text-align:start}}th:last-of-type,td:last-of-type{border-inline-end:1px solid var(--color-table-header-border)}tr:first-of-type th:last-of-type{border-image:linear-gradient(0deg,var(--color-table-header-border),transparent) 1}tr:last-of-type td:last-of-type{border-image:linear-gradient(180deg,var(--color-table-header-border),transparent) 1}tbody td{border-bottom:1px solid var(--color-table-row-separator)}tbody tr:hover{background-color:var(--color-table-row-hover-bg)}.bulk-actions{margin-inline-start:calc(var(--space-unit) * 5);background-color:var(--color-surface-bg);z-index:10;display:flex;position:absolute;top:5px;height:40px}@media screen and (min-width: 992px){.bulk-actions{margin-inline-start:calc(var(--space-unit) * 8.5)}}@media screen and (min-width: 1280px){.bulk-actions{margin-inline-start:calc(var(--space-unit) * 10.5)}}.table-wrapper{display:block;overflow-y:hidden;overflow-x:auto;position:relative;width:100%;max-width:var(--surface-width)}table{width:100%}table.no-select{-webkit-user-select:none;user-select:none}.column-picker{width:24px}.sort-toggle{display:flex;align-items:center;margin-inline-start:calc(var(--space-unit) * .5)}.sort-toggle button{border:0;border-radius:var(--border-radius-lg);color:var(--color-weight-500);padding:0 2px;cursor:pointer;background-color:transparent}.sort-toggle button.active{color:var(--color-primary-700)}.sort-toggle .sort-label{margin-inline-start:calc(var(--space-unit) * .5);font-size:10px;color:var(--color-primary-600);font-weight:400}.toggle-search-filter-row{position:absolute;top:-12px;left:4px}@media screen and (min-width: 1280px){.toggle-search-filter-row{left:8px}}.toggle-search-filter-row.active{background-color:var(--color-primary-700);color:var(--color-primary-100);border-color:var(--color-primary-700)}th.filter-row{position:relative;font-size:var(--font-size-base);font-weight:400;background-color:var(--color-weight-100);box-shadow:var(--data-table-filter-box-shadow);border-left-width:0;border-right-width:0;text-align:initial;padding:0}th.filter-row input{width:100%}th.filter-row.active{border-bottom:1px solid var(--color-table-header-border)}th.filter-row .filters{margin-top:calc(var(--space-unit) * 1);display:flex;flex-wrap:wrap;gap:calc(var(--space-unit) * .5)}.filter-row-wrapper{padding:calc(var(--space-unit) * 4);padding-inline-start:0;max-height:150px;transition:max-height .2s,padding .2s,opacity .2s}.filter-row-wrapper.hidden{max-height:0px;padding-top:0;padding-bottom:0;overflow:hidden;opacity:0}.cell-link{display:block;width:100%;height:100%}td.active{background-color:var(--color-table-row-active-bg)}.cell-content{display:flex;align-items:center;line-height:var(--font-size-sm);color:var(--color-weight-700)}.cell-content.left{justify-content:flex-start}.cell-content.center{justify-content:center}.cell-content.right{justify-content:flex-end}.selection-col{width:calc(var(--space-unit) * 8)}vdr-empty-placeholder{width:100%}.table-footer{display:flex;align-items:baseline;justify-content:space-between;margin-top:var(--space-unit);margin-inline-start:var(--surface-margin-left);margin-inline-end:var(--space-unit)}.total-items-count{font-size:var(--font-size-xs)}@container (max-width: 500px){.total-items-count{display:none}}\n"] }]
256
269
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.LocalStorageService }, { type: i2.DataService }]; }, propDecorators: { id: [{
257
270
  type: Input
258
271
  }], items: [{
@@ -292,4 +305,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImpor
292
305
  type: ContentChildren,
293
306
  args: [TemplateRef]
294
307
  }] } });
295
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZTIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb3JlL3NyYy9zaGFyZWQvY29tcG9uZW50cy9kYXRhLXRhYmxlLTIvZGF0YS10YWJsZTIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb3JlL3NyYy9zaGFyZWQvY29tcG9uZW50cy9kYXRhLXRhYmxlLTIvZGF0YS10YWJsZTIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBR04sV0FBVyxHQUNkLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFLdEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFFekYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDekYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDMUUsT0FBTyxFQUFFLG1DQUFtQyxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDakcsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sK0JBQStCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFMUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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QWlCckMseUJBQXlCLDBGQUN6Qix1QkFBdUIsMEtBSnBCLHlCQUF5QixxREFDekIsbUNBQW1DLCtDQUtuQyxXQUFXLGtEQ3ZIaEMseXlPQWdKQTs7MkZEM0NhLG1CQUFtQjtrQkFQL0IsU0FBUzsrQkFDSSxrQkFBa0IsbUJBR1gsdUJBQXVCLENBQUMsTUFBTSxhQUNwQyxDQUFDLGlCQUFpQixFQUFFLG1CQUFtQixDQUFDO29LQUcxQyxFQUFFO3NCQUFWLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0ksVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBRXFDLE9BQU87c0JBQWxELGVBQWU7dUJBQUMseUJBQXlCO2dCQUUxQyxrQkFBa0I7c0JBRGpCLGVBQWU7dUJBQUMsbUNBQW1DO2dCQUVYLGVBQWU7c0JBQXZELFlBQVk7dUJBQUMseUJBQXlCO2dCQUNBLHVCQUF1QjtzQkFBN0QsWUFBWTt1QkFBQyx1QkFBdUI7Z0JBQ0Qsb0JBQW9CO3NCQUF2RCxZQUFZO3VCQUFDLG9CQUFvQjtnQkFDSixZQUFZO3NCQUF6QyxlQUFlO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBUZW1wbGF0ZVJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBQYWdpbmF0aW9uU2VydmljZSB9IGZyb20gJ25neC1wYWdpbmF0aW9uJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IExhbmd1YWdlQ29kZSB9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9nZW5lcmF0ZWQtdHlwZXMnO1xuaW1wb3J0IHsgRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9kYXRhL3Byb3ZpZGVycy9kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0YVRhYmxlRmlsdGVyQ29sbGVjdGlvbiB9IGZyb20gJy4uLy4uLy4uL3Byb3ZpZGVycy9kYXRhLXRhYmxlL2RhdGEtdGFibGUtZmlsdGVyLWNvbGxlY3Rpb24nO1xuaW1wb3J0IHsgRGF0YVRhYmxlQ29uZmlnLCBMb2NhbFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL2xvY2FsLXN0b3JhZ2UvbG9jYWwtc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IEJ1bGtBY3Rpb25NZW51Q29tcG9uZW50IH0gZnJvbSAnLi4vYnVsay1hY3Rpb24tbWVudS9idWxrLWFjdGlvbi1tZW51LmNvbXBvbmVudCc7XG5cbmltcG9ydCB7IEZpbHRlclByZXNldFNlcnZpY2UgfSBmcm9tICcuLi9kYXRhLXRhYmxlLWZpbHRlci1wcmVzZXRzL2ZpbHRlci1wcmVzZXQuc2VydmljZSc7XG5pbXBvcnQgeyBEYXRhVGFibGUyQ29sdW1uQ29tcG9uZW50IH0gZnJvbSAnLi9kYXRhLXRhYmxlLWNvbHVtbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF0YVRhYmxlQ3VzdG9tRmllbGRDb2x1bW5Db21wb25lbnQgfSBmcm9tICcuL2RhdGEtdGFibGUtY3VzdG9tLWZpZWxkLWNvbHVtbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF0YVRhYmxlMlNlYXJjaENvbXBvbmVudCB9IGZyb20gJy4vZGF0YS10YWJsZS1zZWFyY2guY29tcG9uZW50JztcblxuLyoqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEEgdGFibGUgZm9yIGRpc3BsYXlpbmcgUGFnaW5hdGVkTGlzdCByZXN1bHRzLiBJdCBpcyBkZXNpZ25lZCB0byBiZSB1c2VkIGluc2lkZSBjb21wb25lbnRzIHdoaWNoXG4gKiBleHRlbmQgdGhlIHtAbGluayBCYXNlTGlzdENvbXBvbmVudH0gb3Ige0BsaW5rIFR5cGVkQmFzZUxpc3RDb21wb25lbnR9IGNsYXNzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBIVE1MXG4gKiA8dmRyLWRhdGEtdGFibGUtMlxuICogICAgIGlkPVwicHJvZHVjdC1yZXZpZXctbGlzdFwiXG4gKiAgICAgW2l0ZW1zXT1cIml0ZW1zJCB8IGFzeW5jXCJcbiAqICAgICBbaXRlbXNQZXJQYWdlXT1cIml0ZW1zUGVyUGFnZSQgfCBhc3luY1wiXG4gKiAgICAgW3RvdGFsSXRlbXNdPVwidG90YWxJdGVtcyQgfCBhc3luY1wiXG4gKiAgICAgW2N1cnJlbnRQYWdlXT1cImN1cnJlbnRQYWdlJCB8IGFzeW5jXCJcbiAqICAgICBbZmlsdGVyc109XCJmaWx0ZXJzXCJcbiAqICAgICAocGFnZUNoYW5nZSk9XCJzZXRQYWdlTnVtYmVyKCRldmVudClcIlxuICogICAgIChpdGVtc1BlclBhZ2VDaGFuZ2UpPVwic2V0SXRlbXNQZXJQYWdlKCRldmVudClcIlxuICogPlxuICogICAgIDx2ZHItYnVsay1hY3Rpb24tbWVudVxuICogICAgICAgICBsb2NhdGlvbklkPVwicHJvZHVjdC1yZXZpZXctbGlzdFwiXG4gKiAgICAgICAgIFtob3N0Q29tcG9uZW50XT1cInRoaXNcIlxuICogICAgICAgICBbc2VsZWN0aW9uTWFuYWdlcl09XCJzZWxlY3Rpb25NYW5hZ2VyXCJcbiAqICAgICAvPlxuICogICAgIDx2ZHItZHQyLXNlYXJjaFxuICogICAgICAgICBbc2VhcmNoVGVybUNvbnRyb2xdPVwic2VhcmNoVGVybUNvbnRyb2xcIlxuICogICAgICAgICBzZWFyY2hUZXJtUGxhY2Vob2xkZXI9XCJGaWx0ZXIgYnkgdGl0bGVcIlxuICogICAgIC8+XG4gKiAgICAgPHZkci1kdDItY29sdW1uIFtoZWFkaW5nXT1cIidjb21tb24uaWQnIHwgdHJhbnNsYXRlXCIgW2hpZGRlbkJ5RGVmYXVsdF09XCJ0cnVlXCI+XG4gKiAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtcmV2aWV3PVwiaXRlbVwiPlxuICogICAgICAgICAgICAge3sgcmV2aWV3LmlkIH19XG4gKiAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gKiAgICAgPC92ZHItZHQyLWNvbHVtbj5cbiAqICAgICA8dmRyLWR0Mi1jb2x1bW5cbiAqICAgICAgICAgW2hlYWRpbmddPVwiJ2NvbW1vbi5jcmVhdGVkLWF0JyB8IHRyYW5zbGF0ZVwiXG4gKiAgICAgICAgIFtoaWRkZW5CeURlZmF1bHRdPVwidHJ1ZVwiXG4gKiAgICAgICAgIFtzb3J0XT1cInNvcnRzLmdldCgnY3JlYXRlZEF0JylcIlxuICogICAgID5cbiAqICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1yZXZpZXc9XCJpdGVtXCI+XG4gKiAgICAgICAgICAgICB7eyByZXZpZXcuY3JlYXRlZEF0IHwgbG9jYWxlRGF0ZSA6ICdzaG9ydCcgfX1cbiAqICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAqICAgICA8L3Zkci1kdDItY29sdW1uPlxuICogICAgIDx2ZHItZHQyLWNvbHVtblxuICogICAgICAgICBbaGVhZGluZ109XCInY29tbW9uLnVwZGF0ZWQtYXQnIHwgdHJhbnNsYXRlXCJcbiAqICAgICAgICAgW2hpZGRlbkJ5RGVmYXVsdF09XCJ0cnVlXCJcbiAqICAgICAgICAgW3NvcnRdPVwic29ydHMuZ2V0KCd1cGRhdGVkQXQnKVwiXG4gKiAgICAgPlxuICogICAgICAgICA8bmctdGVtcGxhdGUgbGV0LXJldmlldz1cIml0ZW1cIj5cbiAqICAgICAgICAgICAgIHt7IHJldmlldy51cGRhdGVkQXQgfCBsb2NhbGVEYXRlIDogJ3Nob3J0JyB9fVxuICogICAgICAgICA8L25nLXRlbXBsYXRlPlxuICogICAgIDwvdmRyLWR0Mi1jb2x1bW4+XG4gKiAgICAgPHZkci1kdDItY29sdW1uIFtoZWFkaW5nXT1cIidjb21tb24ubmFtZScgfCB0cmFuc2xhdGVcIiBbb3B0aW9uYWxdPVwiZmFsc2VcIiBbc29ydF09XCJzb3J0cy5nZXQoJ25hbWUnKVwiPlxuICogICAgICAgICA8bmctdGVtcGxhdGUgbGV0LXJldmlldz1cIml0ZW1cIj5cbiAqICAgICAgICAgICAgIDxhIGNsYXNzPVwiYnV0dG9uLWdob3N0XCIgW3JvdXRlckxpbmtdPVwiWycuLycsIHJldmlldy5pZF1cIlxuICogICAgICAgICAgICAgICAgID48c3Bhbj57eyByZXZpZXcubmFtZSB9fTwvc3Bhbj5cbiAqICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJhcnJvdyByaWdodFwiPjwvY2xyLWljb24+XG4gKiAgICAgICAgICAgICA8L2E+XG4gKiAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gKiAgICAgPC92ZHItZHQyLWNvbHVtbj5cbiAqIDwvdmRyLWRhdGEtdGFibGUtMj5cbiAqIGBgYFxuICpcbiAqIEBkb2NzQ2F0ZWdvcnkgY29tcG9uZW50c1xuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3Zkci1kYXRhLXRhYmxlLTInLFxuICAgIHRlbXBsYXRlVXJsOiAnZGF0YS10YWJsZTIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWydkYXRhLXRhYmxlMi5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW1BhZ2luYXRpb25TZXJ2aWNlLCBGaWx0ZXJQcmVzZXRTZXJ2aWNlXSxcbn0pXG5leHBvcnQgY2xhc3MgRGF0YVRhYmxlMkNvbXBvbmVudDxUPiBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgICBASW5wdXQoKSBpZDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGl0ZW1zOiBUW107XG4gICAgQElucHV0KCkgaXRlbXNQZXJQYWdlOiBudW1iZXI7XG4gICAgQElucHV0KCkgY3VycmVudFBhZ2U6IG51bWJlcjtcbiAgICBASW5wdXQoKSB0b3RhbEl0ZW1zOiBudW1iZXI7XG4gICAgQElucHV0KCkgZW1wdHlTdGF0ZUxhYmVsOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZmlsdGVyczogRGF0YVRhYmxlRmlsdGVyQ29sbGVjdGlvbjtcbiAgICBASW5wdXQoKSBhY3RpdmVJbmRleCA9IC0xO1xuICAgIEBPdXRwdXQoKSBwYWdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gICAgQE91dHB1dCgpIGl0ZW1zUGVyUGFnZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbihEYXRhVGFibGUyQ29sdW1uQ29tcG9uZW50KSBjb2x1bW5zOiBRdWVyeUxpc3Q8RGF0YVRhYmxlMkNvbHVtbkNvbXBvbmVudDxUPj47XG4gICAgQENvbnRlbnRDaGlsZHJlbihEYXRhVGFibGVDdXN0b21GaWVsZENvbHVtbkNvbXBvbmVudClcbiAgICBjdXN0b21GaWVsZENvbHVtbnM6IFF1ZXJ5TGlzdDxEYXRhVGFibGVDdXN0b21GaWVsZENvbHVtbkNvbXBvbmVudDxUPj47XG4gICAgQENvbnRlbnRDaGlsZChEYXRhVGFibGUyU2VhcmNoQ29tcG9uZW50KSBzZWFyY2hDb21wb25lbnQ6IERhdGFUYWJsZTJTZWFyY2hDb21wb25lbnQ7XG4gICAgQENvbnRlbnRDaGlsZChCdWxrQWN0aW9uTWVudUNvbXBvbmVudCkgYnVsa0FjdGlvbk1lbnVDb21wb25lbnQ6IEJ1bGtBY3Rpb25NZW51Q29tcG9uZW50O1xuICAgIEBDb250ZW50Q2hpbGQoJ3ZkckR0MkN1c3RvbVNlYXJjaCcpIGN1c3RvbVNlYXJjaFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBDb250ZW50Q2hpbGRyZW4oVGVtcGxhdGVSZWYpIHRlbXBsYXRlUmVmczogUXVlcnlMaXN0PFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gICAgcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuICAgIGZpbHRlclByZXNldFNlcnZpY2UgPSBpbmplY3QoRmlsdGVyUHJlc2V0U2VydmljZSk7XG5cbiAgICByb3dUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBjdXJyZW50U3RhcnQ6IG51bWJlcjtcbiAgICBjdXJyZW50RW5kOiBudW1iZXI7XG4gICAgLy8gVGhpcyBpcyB1c2VkIHRvIGFwcGx5IGEgYHVzZXItc2VsZWN0OiBub25lYCBDU1MgcnVsZSB0byB0aGUgdGFibGUsXG4gICAgLy8gd2hpY2ggYWxsb3dzIHNoaWZ0LWNsaWNrIG11bHRpLXJvdyBzZWxlY3Rpb25cbiAgICBkaXNhYmxlU2VsZWN0ID0gZmFsc2U7XG4gICAgc2hvd1NlYXJjaEZpbHRlclJvdyA9IGZhbHNlO1xuXG4gICAgcHJvdGVjdGVkIHVpTGFuZ3VhZ2UkOiBPYnNlcnZhYmxlPExhbmd1YWdlQ29kZT47XG4gICAgcHJvdGVjdGVkIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcm90ZWN0ZWQgbG9jYWxTdG9yYWdlU2VydmljZTogTG9jYWxTdG9yYWdlU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSxcbiAgICApIHtcbiAgICAgICAgdGhpcy51aUxhbmd1YWdlJCA9IHRoaXMuZGF0YVNlcnZpY2UuY2xpZW50XG4gICAgICAgICAgICAudWlTdGF0ZSgpXG4gICAgICAgICAgICAuc3RyZWFtJC5waXBlKG1hcCgoeyB1aVN0YXRlIH0pID0+IHVpU3RhdGUubGFuZ3VhZ2UpKTtcbiAgICB9XG5cbiAgICBnZXQgc2VsZWN0aW9uTWFuYWdlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVsa0FjdGlvbk1lbnVDb21wb25lbnQ/LnNlbGVjdGlvbk1hbmFnZXI7XG4gICAgfVxuXG4gICAgZ2V0IGFsbENvbHVtbnMoKSB7XG4gICAgICAgIHJldHVybiBbLi4uKHRoaXMuY29sdW1ucyA/PyBbXSksIC4uLih0aGlzLmN1c3RvbUZpZWxkQ29sdW1ucyA/PyBbXSldO1xuICAgIH1cblxuICAgIGdldCB2aXNpYmxlU29ydGVkQ29sdW1ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc29ydGVkQ29sdW1ucy5maWx0ZXIoYyA9PiBjLnZpc2libGUpO1xuICAgIH1cblxuICAgIGdldCBzb3J0ZWRDb2x1bW5zKCkge1xuICAgICAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5hbGxDb2x1bW5zO1xuICAgICAgICBjb25zdCBkYXRhVGFibGVDb25maWcgPSB0aGlzLmdldERhdGFUYWJsZUNvbmZpZygpO1xuICAgICAgICBmb3IgKGNvbnN0IFtpZCwgaW5kZXhdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGFUYWJsZUNvbmZpZ1t0aGlzLmlkXS5vcmRlcikpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IGNvbHVtbnMuZmluZChjID0+IGMuaWQgPT09IGlkKTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGNvbHVtbnMuZmluZEluZGV4KGMgPT4gYy5pZCA9PT0gaWQpO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRJbmRleCAhPT0gLTEgJiYgY29sdW1uKSB7XG4gICAgICAgICAgICAgICAgY29sdW1ucy5zcGxpY2UoY3VycmVudEluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICBjb2x1bW5zLnNwbGljZShpbmRleCwgMCwgY29sdW1uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29sdW1ucztcbiAgICB9XG5cbiAgICBwcml2YXRlIHNoaWZ0RG93bkhhbmRsZXIgPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5ICYmICF0aGlzLmRpc2FibGVTZWxlY3QpIHtcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZVNlbGVjdCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHByaXZhdGUgc2hpZnRVcEhhbmRsZXIgPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZVNlbGVjdCkge1xuICAgICAgICAgICAgdGhpcy5kaXNhYmxlU2VsZWN0ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgaWYgKGNoYW5nZXMuaXRlbXMpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0YXJ0ID0gdGhpcy5pdGVtc1BlclBhZ2UgKiAodGhpcy5jdXJyZW50UGFnZSAtIDEpO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50RW5kID0gdGhpcy5jdXJyZW50U3RhcnQgKyBjaGFuZ2VzLml0ZW1zLmN1cnJlbnRWYWx1ZT8ubGVuZ3RoO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25NYW5hZ2VyPy5zZXRDdXJyZW50SXRlbXModGhpcy5pdGVtcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTWFuYWdlcikge1xuICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuc2hpZnREb3duSGFuZGxlcik7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuc2hpZnRVcEhhbmRsZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJvd1RlbXBsYXRlID0gdGhpcy50ZW1wbGF0ZVJlZnMubGFzdDtcbiAgICAgICAgY29uc3QgZGF0YVRhYmxlQ29uZmlnID0gdGhpcy5nZXREYXRhVGFibGVDb25maWcoKTtcblxuICAgICAgICBpZiAoIXRoaXMuaWQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgTm8gaWQgd2FzIGFzc2lnbmVkIHRvIHRoZSBkYXRhIHRhYmxlIGNvbXBvbmVudGApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHVwZGF0ZUNvbHVtblZpc2liaWxpdHkgPSAoKSA9PiB7XG4gICAgICAgICAgICBkYXRhVGFibGVDb25maWdbdGhpcy5pZF0udmlzaWJpbGl0eSA9IHRoaXMuYWxsQ29sdW1uc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoYyA9PiAoYy52aXNpYmxlICYmIGMuaGlkZGVuQnlEZWZhdWx0KSB8fCAoIWMudmlzaWJsZSAmJiAhYy5oaWRkZW5CeURlZmF1bHQpKVxuICAgICAgICAgICAgICAgIC5tYXAoYyA9PiBjLmlkKTtcbiAgICAgICAgICAgIHRoaXMubG9jYWxTdG9yYWdlU2VydmljZS5zZXQoJ2RhdGFUYWJsZUNvbmZpZycsIGRhdGFUYWJsZUNvbmZpZyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5hbGxDb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcbiAgICAgICAgICAgIGlmIChkYXRhVGFibGVDb25maWc/Llt0aGlzLmlkXT8udmlzaWJpbGl0eS5pbmNsdWRlcyhjb2x1bW4uaWQpKSB7XG4gICAgICAgICAgICAgICAgY29sdW1uLnNldFZpc2liaWxpdHkoY29sdW1uLmhpZGRlbkJ5RGVmYXVsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb2x1bW4ub25Db2x1bW5DaGFuZ2UodXBkYXRlQ29sdW1uVmlzaWJpbGl0eSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1hbmFnZXIpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLnNoaWZ0RG93bkhhbmRsZXIsIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5zaGlmdFVwSGFuZGxlciwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuICAgICAgICAgICAgdGhpcy5idWxrQWN0aW9uTWVudUNvbXBvbmVudC5vbkNsZWFyU2VsZWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1hbmFnZXIuc2V0Q3VycmVudEl0ZW1zKHRoaXMuaXRlbXMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2hvd1NlYXJjaEZpbHRlclJvdyA9XG4gICAgICAgICAgICAhIXRoaXMuZmlsdGVycz8uYWN0aXZlRmlsdGVycy5sZW5ndGggfHxcbiAgICAgICAgICAgIChkYXRhVGFibGVDb25maWc/Llt0aGlzLmlkXT8uc2hvd1NlYXJjaEZpbHRlclJvdyA/PyBmYWxzZSk7XG4gICAgICAgIHRoaXMuY29sdW1ucy5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnNlbGVjdGlvbk1hbmFnZXI/LnNlbGVjdGlvbkNoYW5nZXMkXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpO1xuXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1hbmFnZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVNlcnZpY2UuY2xpZW50XG4gICAgICAgICAgICAgICAgLnVzZXJTdGF0dXMoKVxuICAgICAgICAgICAgICAgIC5tYXBTdHJlYW0oKHsgdXNlclN0YXR1cyB9KSA9PiB1c2VyU3RhdHVzLmFjdGl2ZUNoYW5uZWxJZClcbiAgICAgICAgICAgICAgICAucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCB0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTWFuYWdlcj8uY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ29sdW1uUmVvcmRlcihldmVudDogeyBjb2x1bW46IERhdGFUYWJsZTJDb2x1bW5Db21wb25lbnQ8YW55PjsgbmV3SW5kZXg6IG51bWJlciB9KSB7XG4gICAgICAgIGNvbnN0IG5hdHVyYWxJbmRleCA9IHRoaXMuYWxsQ29sdW1ucy5maW5kSW5kZXgoYyA9PiBjLmlkID09PSBldmVudC5jb2x1bW4uaWQpO1xuICAgICAgICBjb25zdCBkYXRhVGFibGVDb25maWcgPSB0aGlzLmdldERhdGFUYWJsZUNvbmZpZygpO1xuICAgICAgICBpZiAobmF0dXJhbEluZGV4ID09PSBldmVudC5uZXdJbmRleCkge1xuICAgICAgICAgICAgZGVsZXRlIGRhdGFUYWJsZUNvbmZpZ1t0aGlzLmlkXS5vcmRlcltldmVudC5jb2x1bW4uaWRdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0YVRhYmxlQ29uZmlnW3RoaXMuaWRdLm9yZGVyW2V2ZW50LmNvbHVtbi5pZF0gPSBldmVudC5uZXdJbmRleDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvY2FsU3RvcmFnZVNlcnZpY2Uuc2V0KCdkYXRhVGFibGVDb25maWcnLCBkYXRhVGFibGVDb25maWcpO1xuICAgIH1cblxuICAgIG9uQ29sdW1uc1Jlc2V0KCkge1xuICAgICAgICBjb25zdCBkYXRhVGFibGVDb25maWcgPSB0aGlzLmdldERhdGFUYWJsZUNvbmZpZygpO1xuICAgICAgICBkYXRhVGFibGVDb25maWdbdGhpcy5pZF0ub3JkZXIgPSB7fTtcbiAgICAgICAgZGF0YVRhYmxlQ29uZmlnW3RoaXMuaWRdLnZpc2liaWxpdHkgPSBbXTtcbiAgICAgICAgdGhpcy5sb2NhbFN0b3JhZ2VTZXJ2aWNlLnNldCgnZGF0YVRhYmxlQ29uZmlnJywgZGF0YVRhYmxlQ29uZmlnKTtcbiAgICB9XG5cbiAgICB0b2dnbGVTZWFyY2hGaWx0ZXJSb3coKSB7XG4gICAgICAgIHRoaXMuc2hvd1NlYXJjaEZpbHRlclJvdyA9ICF0aGlzLnNob3dTZWFyY2hGaWx0ZXJSb3c7XG4gICAgICAgIGNvbnN0IGRhdGFUYWJsZUNvbmZpZyA9IHRoaXMuZ2V0RGF0YVRhYmxlQ29uZmlnKCk7XG4gICAgICAgIGRhdGFUYWJsZUNvbmZpZ1t0aGlzLmlkXS5zaG93U2VhcmNoRmlsdGVyUm93ID0gdGhpcy5zaG93U2VhcmNoRmlsdGVyUm93O1xuICAgICAgICB0aGlzLmxvY2FsU3RvcmFnZVNlcnZpY2Uuc2V0KCdkYXRhVGFibGVDb25maWcnLCBkYXRhVGFibGVDb25maWcpO1xuICAgIH1cblxuICAgIHRyYWNrQnlGbihpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpIHtcbiAgICAgICAgaWYgKChpdGVtIGFzIGFueSkuaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIChpdGVtIGFzIGFueSkuaWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblRvZ2dsZUFsbENsaWNrKCkge1xuICAgICAgICB0aGlzLnNlbGVjdGlvbk1hbmFnZXI/LnRvZ2dsZVNlbGVjdEFsbCgpO1xuICAgIH1cblxuICAgIG9uUm93Q2xpY2soaXRlbTogVCwgZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25NYW5hZ2VyPy50b2dnbGVTZWxlY3Rpb24oaXRlbSwgZXZlbnQpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXREYXRhVGFibGVDb25maWcoKTogRGF0YVRhYmxlQ29uZmlnIHtcbiAgICAgICAgY29uc3QgZGF0YVRhYmxlQ29uZmlnID0gdGhpcy5sb2NhbFN0b3JhZ2VTZXJ2aWNlLmdldCgnZGF0YVRhYmxlQ29uZmlnJykgPz8ge307XG4gICAgICAgIGlmICghZGF0YVRhYmxlQ29uZmlnW3RoaXMuaWRdKSB7XG4gICAgICAgICAgICBkYXRhVGFibGVDb25maWdbdGhpcy5pZF0gPSB7XG4gICAgICAgICAgICAgICAgdmlzaWJpbGl0eTogW10sXG4gICAgICAgICAgICAgICAgb3JkZXI6IHt9LFxuICAgICAgICAgICAgICAgIHNob3dTZWFyY2hGaWx0ZXJSb3c6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGZpbHRlclByZXNldHM6IFtdLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YVRhYmxlQ29uZmlnO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJidWxrLWFjdGlvbnNcIj5cclxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cInZkci1idWxrLWFjdGlvbi1tZW51XCI+PC9uZy1jb250ZW50PlxyXG48L2Rpdj5cclxuPGRpdiBjbGFzcz1cInRhYmxlLXdyYXBwZXJcIj5cclxuICAgIDx2ZHItZGF0YS10YWJsZS1maWx0ZXItcHJlc2V0cyBbZmlsdGVyc109XCJmaWx0ZXJzXCIgW2RhdGFUYWJsZUlkXT1cImlkXCI+PC92ZHItZGF0YS10YWJsZS1maWx0ZXItcHJlc2V0cz5cclxuICAgIDx0YWJsZSBjbGFzcz1cIlwiIFtjbGFzcy5uby1zZWxlY3RdPVwiZGlzYWJsZVNlbGVjdFwiPlxyXG4gICAgICAgIDx0aGVhZCBbY2xhc3MuaXRlbXMtc2VsZWN0ZWRdPVwic2VsZWN0aW9uTWFuYWdlcj8uc2VsZWN0aW9uLmxlbmd0aFwiPlxyXG4gICAgICAgICAgICA8dHIgY2xhc3M9XCJoZWFkaW5nLXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPHRoICpuZ0lmPVwic2VsZWN0aW9uTWFuYWdlclwiIGNsYXNzPVwic2VsZWN0aW9uLWNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbHJDaGVja2JveFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJzZWxlY3Rpb25NYW5hZ2VyPy5hcmVBbGxDdXJyZW50SXRlbXNTZWxlY3RlZCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblRvZ2dsZUFsbENsaWNrKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgPHRoXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiB2aXNpYmxlU29ydGVkQ29sdW1uczsgbGFzdCBhcyBpc0xhc3RcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5leHBhbmRdPVwiY29sdW1uLmV4cGFuZFwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNlbGwtY29udGVudFwiIFtuZ0NsYXNzXT1cImNvbHVtbi5hbGlnblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBjb2x1bW4uaGVhZGluZyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbHVtbi5zb3J0IGFzIHNvcnRcIiBjbGFzcz1cInNvcnQtdG9nZ2xlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJzb3J0LnRvZ2dsZVNvcnRPcmRlcigpXCIgW2NsYXNzLmFjdGl2ZV09XCJzb3J0LnNvcnRPcmRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiAqbmdJZj1cIiFzb3J0LnNvcnRPcmRlclwiIHNoYXBlPVwidHdvLXdheS1hcnJvd3MgbGVmdFwiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uICpuZ0lmPVwic29ydC5zb3J0T3JkZXIgPT09ICdBU0MnXCIgc2hhcGU9XCJhcnJvdyB1cFwiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uICpuZ0lmPVwic29ydC5zb3J0T3JkZXIgPT09ICdERVNDJ1wiIHNoYXBlPVwiYXJyb3cgZG93blwiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzb3J0LWxhYmVsXCIgKm5nSWY9XCJzb3J0LnNvcnRPcmRlclwiPnt7IHNvcnQuc29ydE9yZGVyIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgIDx0aD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uLXBpY2tlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWRhdGEtdGFibGUtY29sdW0tcGlja2VyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdWlMYW5ndWFnZV09XCJ1aUxhbmd1YWdlJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5zXT1cInNvcnRlZENvbHVtbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlb3JkZXIpPVwib25Db2x1bW5SZW9yZGVyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlc2V0Q29sdW1ucyk9XCJvbkNvbHVtbnNSZXNldCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvdmRyLWRhdGEtdGFibGUtY29sdW0tcGlja2VyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPHRyICpuZ0lmPVwic2VhcmNoQ29tcG9uZW50IHx8IGN1c3RvbVNlYXJjaFRlbXBsYXRlIHx8IGZpbHRlcnM/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgPHRoXHJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuY29sc3Bhbl09XCJ2aXNpYmxlU29ydGVkQ29sdW1ucy5sZW5ndGggKyAoc2VsZWN0aW9uTWFuYWdlciA/IDIgOiAxKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmaWx0ZXItcm93XCJcclxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cInNob3dTZWFyY2hGaWx0ZXJSb3dcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidXR0b24tZ2hvc3QgdG9nZ2xlLXNlYXJjaC1maWx0ZXItcm93XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJzaG93U2VhcmNoRmlsdGVyUm93XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNlYXJjaEZpbHRlclJvdygpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidjb21tb24uc2VhcmNoLWFuZC1maWx0ZXItbGlzdCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwic2VhcmNoXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLXJvdy13cmFwcGVyXCIgW2NsYXNzLmhpZGRlbl09XCIhc2hvd1NlYXJjaEZpbHRlclJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2VhcmNoQ29tcG9uZW50Py50ZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY3VzdG9tU2VhcmNoVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlcnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXJzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1kYXRhLXRhYmxlLWZpbHRlcnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFjdGl2ZUZpbHRlciBvZiBmaWx0ZXJzLmFjdGl2ZUZpbHRlcnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmlsdGVyV2l0aFZhbHVlXT1cImFjdGl2ZUZpbHRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJzXT1cImZpbHRlcnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm10LTFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3Zkci1kYXRhLXRhYmxlLWZpbHRlcnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1kYXRhLXRhYmxlLWZpbHRlcnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmaWx0ZXJzLmxlbmd0aFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJzXT1cImZpbHRlcnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm10LTFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3Zkci1kYXRhLXRhYmxlLWZpbHRlcnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1hZGQtZmlsdGVyLXByZXNldC1idXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbHRlcnNdPVwiZmlsdGVyc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhVGFibGVJZF09XCJpZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvdmRyLWFkZC1maWx0ZXItcHJlc2V0LWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgPC90aGVhZD5cclxuICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgIDx0clxyXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGl0ZW0gb2YgaXRlbXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgfCBwYWdpbmF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtc1BlclBhZ2U6IGl0ZW1zUGVyUGFnZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlOiBjdXJyZW50UGFnZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsSXRlbXM6IHRvdGFsSXRlbXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICBpbmRleCBhcyBpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlGblxyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwic2VsZWN0aW9uTWFuYWdlclwiIGNsYXNzPVwic2VsZWN0aW9uLWNvbFwiIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlSW5kZXggPT09IGlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xyQ2hlY2tib3hcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0aW9uTWFuYWdlcj8uaXNTZWxlY3RlZChpdGVtKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKGl0ZW0sICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgdmlzaWJsZVNvcnRlZENvbHVtbnNcIiBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZUluZGV4ID09PSBpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNlbGwtY29udGVudFwiIFtuZ0NsYXNzXT1cImNvbHVtbi5hbGlnblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImNvbHVtbi50ZW1wbGF0ZTsgY29udGV4dDogeyBpdGVtOiBpdGVtLCBpbmRleDogaSB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgIDx0ZCBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZUluZGV4ID09PSBpXCI+PCEtLSBjb2x1bW4gc2VsZWN0IC0tPjwvdGQ+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8dHIgKm5nSWY9XCIhaXRlbXM/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCBbYXR0ci5jb2xzcGFuXT1cInZpc2libGVTb3J0ZWRDb2x1bW5zLmxlbmd0aCArIChzZWxlY3Rpb25NYW5hZ2VyID8gMiA6IDEpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZW1wdHktcGxhY2Vob2xkZXIgW2VtcHR5U3RhdGVMYWJlbF09XCJlbXB0eVN0YXRlTGFiZWxcIj48L3Zkci1lbXB0eS1wbGFjZWhvbGRlcj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC90Ym9keT5cclxuICAgIDwvdGFibGU+XHJcbjwvZGl2PlxyXG48ZGl2IGNsYXNzPVwidGFibGUtZm9vdGVyXCI+XHJcbiAgICA8dmRyLWl0ZW1zLXBlci1wYWdlLWNvbnRyb2xzXHJcbiAgICAgICAgKm5nSWY9XCJ0b3RhbEl0ZW1zXCJcclxuICAgICAgICBbaXRlbXNQZXJQYWdlXT1cIml0ZW1zUGVyUGFnZVwiXHJcbiAgICAgICAgKGl0ZW1zUGVyUGFnZUNoYW5nZSk9XCJpdGVtc1BlclBhZ2VDaGFuZ2UuZW1pdCgkZXZlbnQpXCJcclxuICAgID48L3Zkci1pdGVtcy1wZXItcGFnZS1jb250cm9scz5cclxuICAgIDxkaXYgKm5nSWY9XCJ0b3RhbEl0ZW1zXCIgY2xhc3M9XCJ0b3RhbC1pdGVtcy1jb3VudFwiPlxyXG4gICAgICAgIHt7ICdjb21tb24udG90YWwtaXRlbXMnIHwgdHJhbnNsYXRlIDogeyBjdXJyZW50U3RhcnQsIGN1cnJlbnRFbmQsIHRvdGFsSXRlbXMgfSB9fVxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPHZkci1wYWdpbmF0aW9uLWNvbnRyb2xzXHJcbiAgICAgICAgKm5nSWY9XCJ0b3RhbEl0ZW1zXCJcclxuICAgICAgICBbaWRdPVwiaWRcIlxyXG4gICAgICAgIFtjdXJyZW50UGFnZV09XCJjdXJyZW50UGFnZVwiXHJcbiAgICAgICAgW2l0ZW1zUGVyUGFnZV09XCJpdGVtc1BlclBhZ2VcIlxyXG4gICAgICAgIFt0b3RhbEl0ZW1zXT1cInRvdGFsSXRlbXNcIlxyXG4gICAgICAgIChwYWdlQ2hhbmdlKT1cInBhZ2VDaGFuZ2UuZW1pdCgkZXZlbnQpXCJcclxuICAgID48L3Zkci1wYWdpbmF0aW9uLWNvbnRyb2xzPlxyXG48L2Rpdj5cclxuIl19
308
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZTIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb3JlL3NyYy9zaGFyZWQvY29tcG9uZW50cy9kYXRhLXRhYmxlLTIvZGF0YS10YWJsZTIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb3JlL3NyYy9zaGFyZWQvY29tcG9uZW50cy9kYXRhLXRhYmxlLTIvZGF0YS10YWJsZTIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixZQUFZLEVBQ1osTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEVBR0wsTUFBTSxFQUdOLFdBQVcsR0FDZCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBS3RFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBRXpGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzFFLE9BQU8sRUFFSCwrQkFBK0IsR0FFbEMsTUFBTSx1Q0FBdUMsQ0FBQztBQUMvQyxPQUFPLEVBQUUsbUNBQW1DLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNqRyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7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SSxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFFcUMsT0FBTztzQkFBbEQsZUFBZTt1QkFBQyx5QkFBeUI7Z0JBRTFDLGtCQUFrQjtzQkFEakIsZUFBZTt1QkFBQyxtQ0FBbUM7Z0JBRVgsZUFBZTtzQkFBdkQsWUFBWTt1QkFBQyx5QkFBeUI7Z0JBQ0EsdUJBQXVCO3NCQUE3RCxZQUFZO3VCQUFDLHVCQUF1QjtnQkFDRCxvQkFBb0I7c0JBQXZELFlBQVk7dUJBQUMsb0JBQW9CO2dCQUNKLFlBQVk7c0JBQXpDLGVBQWU7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBBZnRlckNvbnRlbnRJbml0LFxyXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIENvbXBvbmVudCxcclxuICAgIENvbnRlbnRDaGlsZCxcclxuICAgIENvbnRlbnRDaGlsZHJlbixcclxuICAgIEV2ZW50RW1pdHRlcixcclxuICAgIGluamVjdCxcclxuICAgIEluamVjdG9yLFxyXG4gICAgSW5wdXQsXHJcbiAgICBPbkNoYW5nZXMsXHJcbiAgICBPbkRlc3Ryb3ksXHJcbiAgICBPdXRwdXQsXHJcbiAgICBRdWVyeUxpc3QsXHJcbiAgICBTaW1wbGVDaGFuZ2VzLFxyXG4gICAgVGVtcGxhdGVSZWYsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgUGFnaW5hdGlvblNlcnZpY2UgfSBmcm9tICduZ3gtcGFnaW5hdGlvbic7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBMYW5ndWFnZUNvZGUgfSBmcm9tICcuLi8uLi8uLi9jb21tb24vZ2VuZXJhdGVkLXR5cGVzJztcclxuaW1wb3J0IHsgRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9kYXRhL3Byb3ZpZGVycy9kYXRhLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEYXRhVGFibGVGaWx0ZXJDb2xsZWN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL2RhdGEtdGFibGUvZGF0YS10YWJsZS1maWx0ZXItY29sbGVjdGlvbic7XHJcbmltcG9ydCB7IERhdGFUYWJsZUNvbmZpZywgTG9jYWxTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3Byb3ZpZGVycy9sb2NhbC1zdG9yYWdlL2xvY2FsLXN0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEJ1bGtBY3Rpb25NZW51Q29tcG9uZW50IH0gZnJvbSAnLi4vYnVsay1hY3Rpb24tbWVudS9idWxrLWFjdGlvbi1tZW51LmNvbXBvbmVudCc7XHJcblxyXG5pbXBvcnQgeyBGaWx0ZXJQcmVzZXRTZXJ2aWNlIH0gZnJvbSAnLi4vZGF0YS10YWJsZS1maWx0ZXItcHJlc2V0cy9maWx0ZXItcHJlc2V0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEYXRhVGFibGUyQ29sdW1uQ29tcG9uZW50IH0gZnJvbSAnLi9kYXRhLXRhYmxlLWNvbHVtbi5jb21wb25lbnQnO1xyXG5pbXBvcnQge1xyXG4gICAgRGF0YVRhYmxlQ29tcG9uZW50Q29uZmlnLFxyXG4gICAgRGF0YVRhYmxlQ3VzdG9tQ29tcG9uZW50U2VydmljZSxcclxuICAgIERhdGFUYWJsZUxvY2F0aW9uSWQsXHJcbn0gZnJvbSAnLi9kYXRhLXRhYmxlLWN1c3RvbS1jb21wb25lbnQuc2VydmljZSc7XHJcbmltcG9ydCB7IERhdGFUYWJsZUN1c3RvbUZpZWxkQ29sdW1uQ29tcG9uZW50IH0gZnJvbSAnLi9kYXRhLXRhYmxlLWN1c3RvbS1maWVsZC1jb2x1bW4uY29tcG9uZW50JztcclxuaW1wb3J0IHsgRGF0YVRhYmxlMlNlYXJjaENvbXBvbmVudCB9IGZyb20gJy4vZGF0YS10YWJsZS1zZWFyY2guY29tcG9uZW50JztcclxuXHJcbi8qKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogQSB0YWJsZSBmb3IgZGlzcGxheWluZyBQYWdpbmF0ZWRMaXN0IHJlc3VsdHMuIEl0IGlzIGRlc2lnbmVkIHRvIGJlIHVzZWQgaW5zaWRlIGNvbXBvbmVudHMgd2hpY2hcclxuICogZXh0ZW5kIHRoZSB7QGxpbmsgQmFzZUxpc3RDb21wb25lbnR9IG9yIHtAbGluayBUeXBlZEJhc2VMaXN0Q29tcG9uZW50fSBjbGFzcy5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgSFRNTFxyXG4gKiA8dmRyLWRhdGEtdGFibGUtMlxyXG4gKiAgICAgaWQ9XCJwcm9kdWN0LXJldmlldy1saXN0XCJcclxuICogICAgIFtpdGVtc109XCJpdGVtcyQgfCBhc3luY1wiXHJcbiAqICAgICBbaXRlbXNQZXJQYWdlXT1cIml0ZW1zUGVyUGFnZSQgfCBhc3luY1wiXHJcbiAqICAgICBbdG90YWxJdGVtc109XCJ0b3RhbEl0ZW1zJCB8IGFzeW5jXCJcclxuICogICAgIFtjdXJyZW50UGFnZV09XCJjdXJyZW50UGFnZSQgfCBhc3luY1wiXHJcbiAqICAgICBbZmlsdGVyc109XCJmaWx0ZXJzXCJcclxuICogICAgIChwYWdlQ2hhbmdlKT1cInNldFBhZ2VOdW1iZXIoJGV2ZW50KVwiXHJcbiAqICAgICAoaXRlbXNQZXJQYWdlQ2hhbmdlKT1cInNldEl0ZW1zUGVyUGFnZSgkZXZlbnQpXCJcclxuICogPlxyXG4gKiAgICAgPHZkci1idWxrLWFjdGlvbi1tZW51XHJcbiAqICAgICAgICAgbG9jYXRpb25JZD1cInByb2R1Y3QtcmV2aWV3LWxpc3RcIlxyXG4gKiAgICAgICAgIFtob3N0Q29tcG9uZW50XT1cInRoaXNcIlxyXG4gKiAgICAgICAgIFtzZWxlY3Rpb25NYW5hZ2VyXT1cInNlbGVjdGlvbk1hbmFnZXJcIlxyXG4gKiAgICAgLz5cclxuICogICAgIDx2ZHItZHQyLXNlYXJjaFxyXG4gKiAgICAgICAgIFtzZWFyY2hUZXJtQ29udHJvbF09XCJzZWFyY2hUZXJtQ29udHJvbFwiXHJcbiAqICAgICAgICAgc2VhcmNoVGVybVBsYWNlaG9sZGVyPVwiRmlsdGVyIGJ5IHRpdGxlXCJcclxuICogICAgIC8+XHJcbiAqICAgICA8dmRyLWR0Mi1jb2x1bW4gW2hlYWRpbmddPVwiJ2NvbW1vbi5pZCcgfCB0cmFuc2xhdGVcIiBbaGlkZGVuQnlEZWZhdWx0XT1cInRydWVcIj5cclxuICogICAgICAgICA8bmctdGVtcGxhdGUgbGV0LXJldmlldz1cIml0ZW1cIj5cclxuICogICAgICAgICAgICAge3sgcmV2aWV3LmlkIH19XHJcbiAqICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICogICAgIDwvdmRyLWR0Mi1jb2x1bW4+XHJcbiAqICAgICA8dmRyLWR0Mi1jb2x1bW5cclxuICogICAgICAgICBbaGVhZGluZ109XCInY29tbW9uLmNyZWF0ZWQtYXQnIHwgdHJhbnNsYXRlXCJcclxuICogICAgICAgICBbaGlkZGVuQnlEZWZhdWx0XT1cInRydWVcIlxyXG4gKiAgICAgICAgIFtzb3J0XT1cInNvcnRzLmdldCgnY3JlYXRlZEF0JylcIlxyXG4gKiAgICAgPlxyXG4gKiAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtcmV2aWV3PVwiaXRlbVwiPlxyXG4gKiAgICAgICAgICAgICB7eyByZXZpZXcuY3JlYXRlZEF0IHwgbG9jYWxlRGF0ZSA6ICdzaG9ydCcgfX1cclxuICogICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gKiAgICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICogICAgIDx2ZHItZHQyLWNvbHVtblxyXG4gKiAgICAgICAgIFtoZWFkaW5nXT1cIidjb21tb24udXBkYXRlZC1hdCcgfCB0cmFuc2xhdGVcIlxyXG4gKiAgICAgICAgIFtoaWRkZW5CeURlZmF1bHRdPVwidHJ1ZVwiXHJcbiAqICAgICAgICAgW3NvcnRdPVwic29ydHMuZ2V0KCd1cGRhdGVkQXQnKVwiXHJcbiAqICAgICA+XHJcbiAqICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1yZXZpZXc9XCJpdGVtXCI+XHJcbiAqICAgICAgICAgICAgIHt7IHJldmlldy51cGRhdGVkQXQgfCBsb2NhbGVEYXRlIDogJ3Nob3J0JyB9fVxyXG4gKiAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAqICAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gKiAgICAgPHZkci1kdDItY29sdW1uIFtoZWFkaW5nXT1cIidjb21tb24ubmFtZScgfCB0cmFuc2xhdGVcIiBbb3B0aW9uYWxdPVwiZmFsc2VcIiBbc29ydF09XCJzb3J0cy5nZXQoJ25hbWUnKVwiPlxyXG4gKiAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtcmV2aWV3PVwiaXRlbVwiPlxyXG4gKiAgICAgICAgICAgICA8YSBjbGFzcz1cImJ1dHRvbi1naG9zdFwiIFtyb3V0ZXJMaW5rXT1cIlsnLi8nLCByZXZpZXcuaWRdXCJcclxuICogICAgICAgICAgICAgICAgID48c3Bhbj57eyByZXZpZXcubmFtZSB9fTwvc3Bhbj5cclxuICogICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cImFycm93IHJpZ2h0XCI+PC9jbHItaWNvbj5cclxuICogICAgICAgICAgICAgPC9hPlxyXG4gKiAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAqICAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gKiA8L3Zkci1kYXRhLXRhYmxlLTI+XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAZG9jc0NhdGVnb3J5IGNvbXBvbmVudHNcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICd2ZHItZGF0YS10YWJsZS0yJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnZGF0YS10YWJsZTIuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJ2RhdGEtdGFibGUyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICAgIHByb3ZpZGVyczogW1BhZ2luYXRpb25TZXJ2aWNlLCBGaWx0ZXJQcmVzZXRTZXJ2aWNlXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIERhdGFUYWJsZTJDb21wb25lbnQ8VD4gaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XHJcbiAgICBASW5wdXQoKSBpZDogRGF0YVRhYmxlTG9jYXRpb25JZDtcclxuICAgIEBJbnB1dCgpIGl0ZW1zOiBUW107XHJcbiAgICBASW5wdXQoKSBpdGVtc1BlclBhZ2U6IG51bWJlcjtcclxuICAgIEBJbnB1dCgpIGN1cnJlbnRQYWdlOiBudW1iZXI7XHJcbiAgICBASW5wdXQoKSB0b3RhbEl0ZW1zOiBudW1iZXI7XHJcbiAgICBASW5wdXQoKSBlbXB0eVN0YXRlTGFiZWw6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIGZpbHRlcnM6IERhdGFUYWJsZUZpbHRlckNvbGxlY3Rpb247XHJcbiAgICBASW5wdXQoKSBhY3RpdmVJbmRleCA9IC0xO1xyXG4gICAgQE91dHB1dCgpIHBhZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcclxuICAgIEBPdXRwdXQoKSBpdGVtc1BlclBhZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcclxuXHJcbiAgICBAQ29udGVudENoaWxkcmVuKERhdGFUYWJsZTJDb2x1bW5Db21wb25lbnQpIGNvbHVtbnM6IFF1ZXJ5TGlzdDxEYXRhVGFibGUyQ29sdW1uQ29tcG9uZW50PFQ+PjtcclxuICAgIEBDb250ZW50Q2hpbGRyZW4oRGF0YVRhYmxlQ3VzdG9tRmllbGRDb2x1bW5Db21wb25lbnQpXHJcbiAgICBjdXN0b21GaWVsZENvbHVtbnM6IFF1ZXJ5TGlzdDxEYXRhVGFibGVDdXN0b21GaWVsZENvbHVtbkNvbXBvbmVudDxUPj47XHJcbiAgICBAQ29udGVudENoaWxkKERhdGFUYWJsZTJTZWFyY2hDb21wb25lbnQpIHNlYXJjaENvbXBvbmVudDogRGF0YVRhYmxlMlNlYXJjaENvbXBvbmVudDtcclxuICAgIEBDb250ZW50Q2hpbGQoQnVsa0FjdGlvbk1lbnVDb21wb25lbnQpIGJ1bGtBY3Rpb25NZW51Q29tcG9uZW50OiBCdWxrQWN0aW9uTWVudUNvbXBvbmVudDtcclxuICAgIEBDb250ZW50Q2hpbGQoJ3ZkckR0MkN1c3RvbVNlYXJjaCcpIGN1c3RvbVNlYXJjaFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gICAgQENvbnRlbnRDaGlsZHJlbihUZW1wbGF0ZVJlZikgdGVtcGxhdGVSZWZzOiBRdWVyeUxpc3Q8VGVtcGxhdGVSZWY8YW55Pj47XHJcblxyXG4gICAgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xyXG4gICAgcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xyXG4gICAgZmlsdGVyUHJlc2V0U2VydmljZSA9IGluamVjdChGaWx0ZXJQcmVzZXRTZXJ2aWNlKTtcclxuICAgIGRhdGFUYWJsZUN1c3RvbUNvbXBvbmVudFNlcnZpY2UgPSBpbmplY3QoRGF0YVRhYmxlQ3VzdG9tQ29tcG9uZW50U2VydmljZSk7XHJcbiAgICBwcm90ZWN0ZWQgY3VzdG9tQ29tcG9uZW50cyA9IG5ldyBNYXA8c3RyaW5nLCB7IGNvbmZpZzogRGF0YVRhYmxlQ29tcG9uZW50Q29uZmlnOyBpbmplY3RvcjogSW5qZWN0b3IgfT4oKTtcclxuXHJcbiAgICByb3dUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICAgIGN1cnJlbnRTdGFydDogbnVtYmVyO1xyXG4gICAgY3VycmVudEVuZDogbnVtYmVyO1xyXG4gICAgLy8gVGhpcyBpcyB1c2VkIHRvIGFwcGx5IGEgYHVzZXItc2VsZWN0OiBub25lYCBDU1MgcnVsZSB0byB0aGUgdGFibGUsXHJcbiAgICAvLyB3aGljaCBhbGxvd3Mgc2hpZnQtY2xpY2sgbXVsdGktcm93IHNlbGVjdGlvblxyXG4gICAgZGlzYWJsZVNlbGVjdCA9IGZhbHNlO1xyXG4gICAgc2hvd1NlYXJjaEZpbHRlclJvdyA9IGZhbHNlO1xyXG5cclxuICAgIHByb3RlY3RlZCB1aUxhbmd1YWdlJDogT2JzZXJ2YWJsZTxMYW5ndWFnZUNvZGU+O1xyXG4gICAgcHJvdGVjdGVkIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcm90ZWN0ZWQgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICAgIHByb3RlY3RlZCBsb2NhbFN0b3JhZ2VTZXJ2aWNlOiBMb2NhbFN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHByb3RlY3RlZCBkYXRhU2VydmljZTogRGF0YVNlcnZpY2UsXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLnVpTGFuZ3VhZ2UkID0gdGhpcy5kYXRhU2VydmljZS5jbGllbnRcclxuICAgICAgICAgICAgLnVpU3RhdGUoKVxyXG4gICAgICAgICAgICAuc3RyZWFtJC5waXBlKG1hcCgoeyB1aVN0YXRlIH0pID0+IHVpU3RhdGUubGFuZ3VhZ2UpKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2VsZWN0aW9uTWFuYWdlcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5idWxrQWN0aW9uTWVudUNvbXBvbmVudD8uc2VsZWN0aW9uTWFuYWdlcjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgYWxsQ29sdW1ucygpIHtcclxuICAgICAgICByZXR1cm4gWy4uLih0aGlzLmNvbHVtbnMgPz8gW10pLCAuLi4odGhpcy5jdXN0b21GaWVsZENvbHVtbnMgPz8gW10pXTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgdmlzaWJsZVNvcnRlZENvbHVtbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc29ydGVkQ29sdW1ucy5maWx0ZXIoYyA9PiBjLnZpc2libGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzb3J0ZWRDb2x1bW5zKCkge1xyXG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmFsbENvbHVtbnM7XHJcbiAgICAgICAgY29uc3QgZGF0YVRhYmxlQ29uZmlnID0gdGhpcy5nZXREYXRhVGFibGVDb25maWcoKTtcclxuICAgICAgICBmb3IgKGNvbnN0IFtpZCwgaW5kZXhdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGFUYWJsZUNvbmZpZ1t0aGlzLmlkXS5vcmRlcikpIHtcclxuICAgICAgICAgICAgY29uc3QgY29sdW1uID0gY29sdW1ucy5maW5kKGMgPT4gYy5pZCA9PT0gaWQpO1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50SW5kZXggPSBjb2x1bW5zLmZpbmRJbmRleChjID0+IGMuaWQgPT09IGlkKTtcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnRJbmRleCAhPT0gLTEgJiYgY29sdW1uKSB7XHJcbiAgICAgICAgICAgICAgICBjb2x1bW5zLnNwbGljZShjdXJyZW50SW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgY29sdW1ucy5zcGxpY2UoaW5kZXgsIDAsIGNvbHVtbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNvbHVtbnM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzaGlmdERvd25IYW5kbGVyID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5ICYmICF0aGlzLmRpc2FibGVTZWxlY3QpIHtcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlU2VsZWN0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHByaXZhdGUgc2hpZnRVcEhhbmRsZXIgPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5kaXNhYmxlU2VsZWN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZVNlbGVjdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgICAgIGlmIChjaGFuZ2VzLml0ZW1zKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0YXJ0ID0gdGhpcy5pdGVtc1BlclBhZ2UgKiAodGhpcy5jdXJyZW50UGFnZSAtIDEpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRFbmQgPSB0aGlzLmN1cnJlbnRTdGFydCArIGNoYW5nZXMuaXRlbXMuY3VycmVudFZhbHVlPy5sZW5ndGg7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTWFuYWdlcj8uc2V0Q3VycmVudEl0ZW1zKHRoaXMuaXRlbXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuICAgICAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTWFuYWdlcikge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5zaGlmdERvd25IYW5kbGVyKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0aGlzLnNoaWZ0VXBIYW5kbGVyKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucm93VGVtcGxhdGUgPSB0aGlzLnRlbXBsYXRlUmVmcy5sYXN0O1xyXG4gICAgICAgIGNvbnN0IGRhdGFUYWJsZUNvbmZpZyA9IHRoaXMuZ2V0RGF0YVRhYmxlQ29uZmlnKCk7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5pZCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYE5vIGlkIHdhcyBhc3NpZ25lZCB0byB0aGUgZGF0YSB0YWJsZSBjb21wb25lbnRgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdXBkYXRlQ29sdW1uVmlzaWJpbGl0eSA9ICgpID0+IHtcclxuICAgICAgICAgICAgZGF0YVRhYmxlQ29uZmlnW3RoaXMuaWRdLnZpc2liaWxpdHkgPSB0aGlzLmFsbENvbHVtbnNcclxuICAgICAgICAgICAgICAgIC5maWx0ZXIoYyA9PiAoYy52aXNpYmxlICYmIGMuaGlkZGVuQnlEZWZhdWx0KSB8fCAoIWMudmlzaWJsZSAmJiAhYy5oaWRkZW5CeURlZmF1bHQpKVxyXG4gICAgICAgICAgICAgICAgLm1hcChjID0+IGMuaWQpO1xyXG4gICAgICAgICAgICB0aGlzLmxvY2FsU3RvcmFnZVNlcnZpY2Uuc2V0KCdkYXRhVGFibGVDb25maWcnLCBkYXRhVGFibGVDb25maWcpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuYWxsQ29sdW1ucy5mb3JFYWNoKGNvbHVtbiA9PiB7XHJcbiAgICAgICAgICAgIGlmIChkYXRhVGFibGVDb25maWc/Llt0aGlzLmlkXT8udmlzaWJpbGl0eS5pbmNsdWRlcyhjb2x1bW4uaWQpKSB7XHJcbiAgICAgICAgICAgICAgICBjb2x1bW4uc2V0VmlzaWJpbGl0eShjb2x1bW4uaGlkZGVuQnlEZWZhdWx0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb2x1bW4ub25Db2x1bW5DaGFuZ2UodXBkYXRlQ29sdW1uVmlzaWJpbGl0eSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuZGF0YVRhYmxlQ3VzdG9tQ29tcG9uZW50U2VydmljZS5nZXRDdXN0b21Db21wb25lbnRzRm9yKHRoaXMuaWQsIGNvbHVtbi5pZCk7XHJcbiAgICAgICAgICAgIGlmIChjb25maWcpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IHRoaXMuaW5qZWN0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBjb25maWcucHJvdmlkZXJzID8/IFtdLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1c3RvbUNvbXBvbmVudHMuc2V0KGNvbHVtbi5pZCwgeyBjb25maWcsIGluamVjdG9yIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1hbmFnZXIpIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuc2hpZnREb3duSGFuZGxlciwgeyBwYXNzaXZlOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuc2hpZnRVcEhhbmRsZXIsIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgdGhpcy5idWxrQWN0aW9uTWVudUNvbXBvbmVudC5vbkNsZWFyU2VsZWN0aW9uKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1hbmFnZXIuc2V0Q3VycmVudEl0ZW1zKHRoaXMuaXRlbXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNob3dTZWFyY2hGaWx0ZXJSb3cgPVxyXG4gICAgICAgICAgICAhIXRoaXMuZmlsdGVycz8uYWN0aXZlRmlsdGVycy5sZW5ndGggfHxcclxuICAgICAgICAgICAgKGRhdGFUYWJsZUNvbmZpZz8uW3RoaXMuaWRdPy5zaG93U2VhcmNoRmlsdGVyUm93ID8/IGZhbHNlKTtcclxuICAgICAgICB0aGlzLmNvbHVtbnMuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnNlbGVjdGlvbk1hbmFnZXI/LnNlbGVjdGlvbkNoYW5nZXMkXHJcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTWFuYWdlcikge1xyXG4gICAgICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLmNsaWVudFxyXG4gICAgICAgICAgICAgICAgLnVzZXJTdGF0dXMoKVxyXG4gICAgICAgICAgICAgICAgLm1hcFN0cmVhbSgoeyB1c2VyU3RhdHVzIH0pID0+IHVzZXJTdGF0dXMuYWN0aXZlQ2hhbm5lbElkKVxyXG4gICAgICAgICAgICAgICAgLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25NYW5hZ2VyPy5jbGVhclNlbGVjdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uQ29sdW1uUmVvcmRlcihldmVudDogeyBjb2x1bW46IERhdGFUYWJsZTJDb2x1bW5Db21wb25lbnQ8YW55PjsgbmV3SW5kZXg6IG51bWJlciB9KSB7XHJcbiAgICAgICAgY29uc3QgbmF0dXJhbEluZGV4ID0gdGhpcy5hbGxDb2x1bW5zLmZpbmRJbmRleChjID0+IGMuaWQgPT09IGV2ZW50LmNvbHVtbi5pZCk7XHJcbiAgICAgICAgY29uc3QgZGF0YVRhYmxlQ29uZmlnID0gdGhpcy5nZXREYXRhVGFibGVDb25maWcoKTtcclxuICAgICAgICBpZiAobmF0dXJhbEluZGV4ID09PSBldmVudC5uZXdJbmRleCkge1xyXG4gICAgICAgICAgICBkZWxldGUgZGF0YVRhYmxlQ29uZmlnW3RoaXMuaWRdLm9yZGVyW2V2ZW50LmNvbHVtbi5pZF07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZGF0YVRhYmxlQ29uZmlnW3RoaXMuaWRdLm9yZGVyW2V2ZW50LmNvbHVtbi5pZF0gPSBldmVudC5uZXdJbmRleDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5sb2NhbFN0b3JhZ2VTZXJ2aWNlLnNldCgnZGF0YVRhYmxlQ29uZmlnJywgZGF0YVRhYmxlQ29uZmlnKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNvbHVtbnNSZXNldCgpIHtcclxuICAgICAgICBjb25zdCBkYXRhVGFibGVDb25maWcgPSB0aGlzLmdldERhdGFUYWJsZUNvbmZpZygpO1xyXG4gICAgICAgIGRhdGFUYWJsZUNvbmZpZ1t0aGlzLmlkXS5vcmRlciA9IHt9O1xyXG4gICAgICAgIGRhdGFUYWJsZUNvbmZpZ1t0aGlzLmlkXS52aXNpYmlsaXR5ID0gW107XHJcbiAgICAgICAgdGhpcy5sb2NhbFN0b3JhZ2VTZXJ2aWNlLnNldCgnZGF0YVRhYmxlQ29uZmlnJywgZGF0YVRhYmxlQ29uZmlnKTtcclxuICAgIH1cclxuXHJcbiAgICB0b2dnbGVTZWFyY2hGaWx0ZXJSb3coKSB7XHJcbiAgICAgICAgdGhpcy5zaG93U2VhcmNoRmlsdGVyUm93ID0gIXRoaXMuc2hvd1NlYXJjaEZpbHRlclJvdztcclxuICAgICAgICBjb25zdCBkYXRhVGFibGVDb25maWcgPSB0aGlzLmdldERhdGFUYWJsZUNvbmZpZygpO1xyXG4gICAgICAgIGRhdGFUYWJsZUNvbmZpZ1t0aGlzLmlkXS5zaG93U2VhcmNoRmlsdGVyUm93ID0gdGhpcy5zaG93U2VhcmNoRmlsdGVyUm93O1xyXG4gICAgICAgIHRoaXMubG9jYWxTdG9yYWdlU2VydmljZS5zZXQoJ2RhdGFUYWJsZUNvbmZpZycsIGRhdGFUYWJsZUNvbmZpZyk7XHJcbiAgICB9XHJcblxyXG4gICAgdHJhY2tCeUZuKGluZGV4OiBudW1iZXIsIGl0ZW06IGFueSkge1xyXG4gICAgICAgIGlmICgoaXRlbSBhcyBhbnkpLmlkICE9IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIChpdGVtIGFzIGFueSkuaWQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGluZGV4O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvblRvZ2dsZUFsbENsaWNrKCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uTWFuYWdlcj8udG9nZ2xlU2VsZWN0QWxsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25Sb3dDbGljayhpdGVtOiBULCBldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uTWFuYWdlcj8udG9nZ2xlU2VsZWN0aW9uKGl0ZW0sIGV2ZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0RGF0YVRhYmxlQ29uZmlnKCk6IERhdGFUYWJsZUNvbmZpZyB7XHJcbiAgICAgICAgY29uc3QgZGF0YVRhYmxlQ29uZmlnID0gdGhpcy5sb2NhbFN0b3JhZ2VTZXJ2aWNlLmdldCgnZGF0YVRhYmxlQ29uZmlnJykgPz8ge307XHJcbiAgICAgICAgaWYgKCFkYXRhVGFibGVDb25maWdbdGhpcy5pZF0pIHtcclxuICAgICAgICAgICAgZGF0YVRhYmxlQ29uZmlnW3RoaXMuaWRdID0ge1xyXG4gICAgICAgICAgICAgICAgdmlzaWJpbGl0eTogW10sXHJcbiAgICAgICAgICAgICAgICBvcmRlcjoge30sXHJcbiAgICAgICAgICAgICAgICBzaG93U2VhcmNoRmlsdGVyUm93OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGZpbHRlclByZXNldHM6IFtdLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGF0YVRhYmxlQ29uZmlnO1xyXG4gICAgfVxyXG59XHJcbiIsIjx2ZHItZGF0YS10YWJsZS1maWx0ZXItcHJlc2V0c1xyXG4gICAgKm5nSWY9XCJmaWx0ZXJzXCJcclxuICAgIFtmaWx0ZXJzXT1cImZpbHRlcnNcIlxyXG4gICAgW2RhdGFUYWJsZUlkXT1cImlkXCJcclxuPjwvdmRyLWRhdGEtdGFibGUtZmlsdGVyLXByZXNldHM+XHJcbjxkaXYgY2xhc3M9XCJ0YWJsZS13cmFwcGVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYnVsay1hY3Rpb25zXCI+XHJcbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwidmRyLWJ1bGstYWN0aW9uLW1lbnVcIj48L25nLWNvbnRlbnQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDx0YWJsZSBjbGFzcz1cIlwiIFtjbGFzcy5uby1zZWxlY3RdPVwiZGlzYWJsZVNlbGVjdFwiPlxyXG4gICAgICAgIDx0aGVhZCBbY2xhc3MuaXRlbXMtc2VsZWN0ZWRdPVwic2VsZWN0aW9uTWFuYWdlcj8uc2VsZWN0aW9uLmxlbmd0aFwiPlxyXG4gICAgICAgICAgICA8dHIgY2xhc3M9XCJoZWFkaW5nLXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPHRoICpuZ0lmPVwic2VsZWN0aW9uTWFuYWdlclwiIGNsYXNzPVwic2VsZWN0aW9uLWNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbHJDaGVja2JveFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJzZWxlY3Rpb25NYW5hZ2VyPy5hcmVBbGxDdXJyZW50SXRlbXNTZWxlY3RlZCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblRvZ2dsZUFsbENsaWNrKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgPHRoXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiB2aXNpYmxlU29ydGVkQ29sdW1uczsgbGFzdCBhcyBpc0xhc3RcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5leHBhbmRdPVwiY29sdW1uLmV4cGFuZFwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNlbGwtY29udGVudFwiIFtuZ0NsYXNzXT1cImNvbHVtbi5hbGlnblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLXVpLWV4dGVuc2lvbi1wb2ludFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xvY2F0aW9uSWRdPVwiaWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21ldGFkYXRhXT1cImNvbHVtbi5pZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcGk9XCJkYXRhVGFibGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RvcFB4XT1cIi02XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsZWZ0UHhdPVwiLTI0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk9XCJibG9ja1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGNvbHVtbi5oZWFkaW5nIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci11aS1leHRlbnNpb24tcG9pbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb2x1bW4uc29ydCBhcyBzb3J0XCIgY2xhc3M9XCJzb3J0LXRvZ2dsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwic29ydC50b2dnbGVTb3J0T3JkZXIoKVwiIFtjbGFzcy5hY3RpdmVdPVwic29ydC5zb3J0T3JkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gKm5nSWY9XCIhc29ydC5zb3J0T3JkZXJcIiBzaGFwZT1cInR3by13YXktYXJyb3dzIGxlZnRcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiAqbmdJZj1cInNvcnQuc29ydE9yZGVyID09PSAnQVNDJ1wiIHNoYXBlPVwiYXJyb3cgdXBcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiAqbmdJZj1cInNvcnQuc29ydE9yZGVyID09PSAnREVTQydcIiBzaGFwZT1cImFycm93IGRvd25cIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic29ydC1sYWJlbFwiICpuZ0lmPVwic29ydC5zb3J0T3JkZXJcIj57eyBzb3J0LnNvcnRPcmRlciB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICA8dGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbi1waWNrZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1kYXRhLXRhYmxlLWNvbHVtLXBpY2tlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3VpTGFuZ3VhZ2VdPVwidWlMYW5ndWFnZSQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sdW1uc109XCJzb3J0ZWRDb2x1bW5zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZW9yZGVyKT1cIm9uQ29sdW1uUmVvcmRlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZXNldENvbHVtbnMpPVwib25Db2x1bW5zUmVzZXQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3Zkci1kYXRhLXRhYmxlLWNvbHVtLXBpY2tlcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDx0ciAqbmdJZj1cInNlYXJjaENvbXBvbmVudCB8fCBjdXN0b21TZWFyY2hUZW1wbGF0ZSB8fCBmaWx0ZXJzPy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgIDx0aFxyXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmNvbHNwYW5dPVwidmlzaWJsZVNvcnRlZENvbHVtbnMubGVuZ3RoICsgKHNlbGVjdGlvbk1hbmFnZXIgPyAyIDogMSlcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmlsdGVyLXJvd1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJzaG93U2VhcmNoRmlsdGVyUm93XCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uLWdob3N0IHRvZ2dsZS1zZWFyY2gtZmlsdGVyLXJvd1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwic2hvd1NlYXJjaEZpbHRlclJvd1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTZWFyY2hGaWx0ZXJSb3coKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInY29tbW9uLnNlYXJjaC1hbmQtZmlsdGVyLWxpc3QnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cInNlYXJjaFwiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbHRlci1yb3ctd3JhcHBlclwiIFtjbGFzcy5oaWRkZW5dPVwiIXNob3dTZWFyY2hGaWx0ZXJSb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNlYXJjaENvbXBvbmVudD8udGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImN1c3RvbVNlYXJjaFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXJzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZGF0YS10YWJsZS1maWx0ZXJzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBhY3RpdmVGaWx0ZXIgb2YgZmlsdGVycy5hY3RpdmVGaWx0ZXJzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbHRlcldpdGhWYWx1ZV09XCJhY3RpdmVGaWx0ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmlsdGVyc109XCJmaWx0ZXJzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtdC0xXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC92ZHItZGF0YS10YWJsZS1maWx0ZXJzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZGF0YS10YWJsZS1maWx0ZXJzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZmlsdGVycy5sZW5ndGhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmlsdGVyc109XCJmaWx0ZXJzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtdC0xXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC92ZHItZGF0YS10YWJsZS1maWx0ZXJzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItYWRkLWZpbHRlci1wcmVzZXQtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJzXT1cImZpbHRlcnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YVRhYmxlSWRdPVwiaWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3Zkci1hZGQtZmlsdGVyLXByZXNldC1idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgPHRib2R5PlxyXG4gICAgICAgICAgICA8dHJcclxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpdGVtIG9mIGl0ZW1zXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHwgcGFnaW5hdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXNQZXJQYWdlOiBpdGVtc1BlclBhZ2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGFnZTogY3VycmVudFBhZ2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbEl0ZW1zOiB0b3RhbEl0ZW1zXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgaW5kZXggYXMgaTtcclxuICAgICAgICAgICAgICAgICAgICB0cmFja0J5OiB0cmFja0J5Rm5cclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cInNlbGVjdGlvbk1hbmFnZXJcIiBjbGFzcz1cInNlbGVjdGlvbi1jb2xcIiBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZUluZGV4ID09PSBpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsckNoZWNrYm94XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInNlbGVjdGlvbk1hbmFnZXI/LmlzU2VsZWN0ZWQoaXRlbSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Sb3dDbGljayhpdGVtLCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIHZpc2libGVTb3J0ZWRDb2x1bW5zXCIgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVJbmRleCA9PT0gaVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZWxsLWNvbnRlbnRcIiBbbmdDbGFzc109XCJjb2x1bW4uYWxpZ25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjdXN0b21Db21wb25lbnRzLmdldChjb2x1bW4uaWQpIGFzIGNvbXBvbmVudENvbmZpZzsgZWxzZSBkZWZhdWx0Q29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0NvbXBvbmVudE91dGxldD1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRDb25maWcuY29uZmlnLmNvbXBvbmVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRzOiB7IHJvd0l0ZW06IGl0ZW0gfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5qZWN0b3I6IGNvbXBvbmVudENvbmZpZy5pbmplY3RvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRDb21wb25lbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb2x1bW4udGVtcGxhdGU7IGNvbnRleHQ6IHsgaXRlbTogaXRlbSwgaW5kZXg6IGkgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlSW5kZXggPT09IGlcIj48IS0tIGNvbHVtbiBzZWxlY3QgLS0+PC90ZD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDx0ciAqbmdJZj1cIiFpdGVtcz8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkIFthdHRyLmNvbHNwYW5dPVwidmlzaWJsZVNvcnRlZENvbHVtbnMubGVuZ3RoICsgKHNlbGVjdGlvbk1hbmFnZXIgPyAyIDogMSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1lbXB0eS1wbGFjZWhvbGRlciBbZW1wdHlTdGF0ZUxhYmVsXT1cImVtcHR5U3RhdGVMYWJlbFwiPjwvdmRyLWVtcHR5LXBsYWNlaG9sZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L3Rib2R5PlxyXG4gICAgPC90YWJsZT5cclxuPC9kaXY+XHJcbjxkaXYgY2xhc3M9XCJ0YWJsZS1mb290ZXJcIj5cclxuICAgIDx2ZHItaXRlbXMtcGVyLXBhZ2UtY29udHJvbHNcclxuICAgICAgICAqbmdJZj1cInRvdGFsSXRlbXNcIlxyXG4gICAgICAgIFtpdGVtc1BlclBhZ2VdPVwiaXRlbXNQZXJQYWdlXCJcclxuICAgICAgICAoaXRlbXNQZXJQYWdlQ2hhbmdlKT1cIml0ZW1zUGVyUGFnZUNoYW5nZS5lbWl0KCRldmVudClcIlxyXG4gICAgPjwvdmRyLWl0ZW1zLXBlci1wYWdlLWNvbnRyb2xzPlxyXG4gICAgPGRpdiAqbmdJZj1cInRvdGFsSXRlbXNcIiBjbGFzcz1cInRvdGFsLWl0ZW1zLWNvdW50XCI+XHJcbiAgICAgICAge3sgJ2NvbW1vbi50b3RhbC1pdGVtcycgfCB0cmFuc2xhdGUgOiB7IGN1cnJlbnRTdGFydCwgY3VycmVudEVuZCwgdG90YWxJdGVtcyB9IH19XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8dmRyLXBhZ2luYXRpb24tY29udHJvbHNcclxuICAgICAgICAqbmdJZj1cInRvdGFsSXRlbXNcIlxyXG4gICAgICAgIFtpZF09XCJpZFwiXHJcbiAgICAgICAgW2N1cnJlbnRQYWdlXT1cImN1cnJlbnRQYWdlXCJcclxuICAgICAgICBbaXRlbXNQZXJQYWdlXT1cIml0ZW1zUGVyUGFnZVwiXHJcbiAgICAgICAgW3RvdGFsSXRlbXNdPVwidG90YWxJdGVtc1wiXHJcbiAgICAgICAgKHBhZ2VDaGFuZ2UpPVwicGFnZUNoYW5nZS5lbWl0KCRldmVudClcIlxyXG4gICAgPjwvdmRyLXBhZ2luYXRpb24tY29udHJvbHM+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -21,12 +21,12 @@ export class DataTableFilterLabelComponent {
21
21
  }));
22
22
  }
23
23
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: DataTableFilterLabelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
24
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.2", type: DataTableFilterLabelComponent, selector: "vdr-data-table-filter-label", inputs: { filterWithValue: "filterWithValue" }, ngImport: i0, template: "<span><vdr-localized-text [text]=\"filterWithValue.filter.label\" />:</span>\n<div>\n <ng-container *ngIf=\"filterWithValue.isSelect()\">\n {{ filterWithValue.value?.join(', ') }}\n </ng-container>\n <ng-container *ngIf=\"filterWithValue.isId()\">\n <span *ngIf=\"filterWithValue.value?.operator === 'eq'\">{{ 'common.operator-eq' | translate }}</span>\n <span *ngIf=\"filterWithValue.value?.operator === 'notEq'\">{{\n 'common.operator-not-eq' | translate\n }}</span>\n <span> \"{{ filterWithValue.value?.term }}\"</span>\n </ng-container>\n <ng-container *ngIf=\"filterWithValue.isText()\">\n <span *ngIf=\"filterWithValue.value?.operator === 'contains'\">{{\n 'common.operator-contains' | translate\n }}</span>\n <span *ngIf=\"filterWithValue.value?.operator === 'eq'\">{{ 'common.operator-eq' | translate }}</span>\n <span *ngIf=\"filterWithValue.value?.operator === 'notContains'\">{{\n 'common.operator-notContains' | translate\n }}</span>\n <span *ngIf=\"filterWithValue.value?.operator === 'notEq'\">{{\n 'common.operator-not-eq' | translate\n }}</span>\n <span *ngIf=\"filterWithValue.value?.operator === 'regex'\">{{\n 'common.operator-regex' | translate\n }}</span>\n <span> \"{{ filterWithValue.value?.term }}\"</span>\n </ng-container>\n <ng-container *ngIf=\"filterWithValue.isBoolean()\">\n <span *ngIf=\"filterWithValue?.value\">{{ 'common.boolean-true' | translate }}</span>\n <span *ngIf=\"!filterWithValue?.value\">{{ 'common.boolean-false' | translate }}</span>\n </ng-container>\n <ng-container *ngIf=\"filterWithValue.isDateRange()\">\n <ng-container *ngIf=\"filterWithValue.value.mode === 'relative'\">\n <span *ngIf=\"filterWithValue.value.relativeUnit === 'day'\">\n {{ 'datetime.relative-past-days' | translate: { count: filterWithValue.value.relativeValue } }}\n </span>\n <span *ngIf=\"filterWithValue.value.relativeUnit === 'month'\">\n {{ 'datetime.relative-past-months' | translate: { count: filterWithValue.value.relativeValue } }}\n </span>\n <span *ngIf=\"filterWithValue.value.relativeUnit === 'year'\">\n {{ 'datetime.relative-past-years' | translate: { count: filterWithValue.value.relativeValue } }}\n </span>\n </ng-container>\n <ng-container *ngIf=\"filterWithValue.value.mode === 'range'\">\n <span *ngIf=\"filterWithValue.value?.start && filterWithValue.value?.end\">\n {{ filterWithValue.value?.start | localeDate : 'shortDate' }} -\n {{ filterWithValue.value?.end | localeDate : 'shortDate' }}\n </span>\n <span *ngIf=\"filterWithValue.value?.start && !filterWithValue.value?.end\">\n > {{ filterWithValue.value?.start | localeDate : 'shortDate' }}\n </span>\n <span *ngIf=\"filterWithValue.value?.end && !filterWithValue.value?.start\">\n < {{ filterWithValue.value?.end | localeDate : 'shortDate' }}\n </span>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"filterWithValue.isNumber()\">\n <span *ngIf=\"filterWithValue.value?.operator === 'eq'\"> = </span>\n <span *ngIf=\"filterWithValue.value?.operator === 'gt'\"> > </span>\n <span *ngIf=\"filterWithValue.value?.operator === 'lt'\"> < </span>\n <span *ngIf=\"$any(filterWithValue.filter.type).inputType === 'currency'\">{{\n +filterWithValue.value?.amount | localeCurrency\n }}</span>\n <span *ngIf=\"$any(filterWithValue.filter.type).inputType !== 'currency'\">{{\n +filterWithValue.value?.amount\n }}</span>\n </ng-container>\n <ng-container *ngIf=\"filterWithValue.isCustom()\">\n <span>{{ customFilterLabel$ | async }}</span>\n </ng-container>\n</div>\n", styles: [":host{display:flex;gap:calc(var(--space-unit) / 2)}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.LocalizedTextComponent, selector: "vdr-localized-text", inputs: ["text"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "pipe", type: i4.LocaleDatePipe, name: "localeDate" }, { kind: "pipe", type: i5.LocaleCurrencyPipe, name: "localeCurrency" }], changeDetection: i0.ChangeDetectionStrategy.Default }); }
24
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.2", type: DataTableFilterLabelComponent, selector: "vdr-data-table-filter-label", inputs: { filterWithValue: "filterWithValue" }, ngImport: i0, template: "<span><vdr-localized-text [text]=\"filterWithValue.filter.label\" />:</span>\r\n<div>\r\n <ng-container *ngIf=\"filterWithValue.isSelect()\">\r\n {{ filterWithValue.value?.join(', ') }}\r\n </ng-container>\r\n <ng-container *ngIf=\"filterWithValue.isId()\">\r\n <span *ngIf=\"filterWithValue.value?.operator === 'eq'\">{{ 'common.operator-eq' | translate }}</span>\r\n <span *ngIf=\"filterWithValue.value?.operator === 'notEq'\">{{\r\n 'common.operator-not-eq' | translate\r\n }}</span>\r\n <span> \"{{ filterWithValue.value?.term }}\"</span>\r\n </ng-container>\r\n <ng-container *ngIf=\"filterWithValue.isText()\">\r\n <span *ngIf=\"filterWithValue.value?.operator === 'contains'\">{{\r\n 'common.operator-contains' | translate\r\n }}</span>\r\n <span *ngIf=\"filterWithValue.value?.operator === 'eq'\">{{ 'common.operator-eq' | translate }}</span>\r\n <span *ngIf=\"filterWithValue.value?.operator === 'notContains'\">{{\r\n 'common.operator-notContains' | translate\r\n }}</span>\r\n <span *ngIf=\"filterWithValue.value?.operator === 'notEq'\">{{\r\n 'common.operator-not-eq' | translate\r\n }}</span>\r\n <span *ngIf=\"filterWithValue.value?.operator === 'regex'\">{{\r\n 'common.operator-regex' | translate\r\n }}</span>\r\n <span> \"{{ filterWithValue.value?.term }}\"</span>\r\n </ng-container>\r\n <ng-container *ngIf=\"filterWithValue.isBoolean()\">\r\n <span *ngIf=\"filterWithValue?.value\">{{ 'common.boolean-true' | translate }}</span>\r\n <span *ngIf=\"!filterWithValue?.value\">{{ 'common.boolean-false' | translate }}</span>\r\n </ng-container>\r\n <ng-container *ngIf=\"filterWithValue.isDateRange()\">\r\n <ng-container *ngIf=\"filterWithValue.value.mode === 'relative'\">\r\n <span *ngIf=\"filterWithValue.value.relativeUnit === 'day'\">\r\n {{ 'datetime.relative-past-days' | translate: { count: filterWithValue.value.relativeValue } }}\r\n </span>\r\n <span *ngIf=\"filterWithValue.value.relativeUnit === 'month'\">\r\n {{ 'datetime.relative-past-months' | translate: { count: filterWithValue.value.relativeValue } }}\r\n </span>\r\n <span *ngIf=\"filterWithValue.value.relativeUnit === 'year'\">\r\n {{ 'datetime.relative-past-years' | translate: { count: filterWithValue.value.relativeValue } }}\r\n </span>\r\n </ng-container>\r\n <ng-container *ngIf=\"filterWithValue.value.mode === 'range'\">\r\n <span *ngIf=\"filterWithValue.value?.start && filterWithValue.value?.end\">\r\n {{ filterWithValue.value?.start | localeDate : 'shortDate' }} -\r\n {{ filterWithValue.value?.end | localeDate : 'shortDate' }}\r\n </span>\r\n <span *ngIf=\"filterWithValue.value?.start && !filterWithValue.value?.end\">\r\n > {{ filterWithValue.value?.start | localeDate : 'shortDate' }}\r\n </span>\r\n <span *ngIf=\"filterWithValue.value?.end && !filterWithValue.value?.start\">\r\n < {{ filterWithValue.value?.end | localeDate : 'shortDate' }}\r\n </span>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"filterWithValue.isNumber()\">\r\n <span *ngIf=\"filterWithValue.value?.operator === 'eq'\"> = </span>\r\n <span *ngIf=\"filterWithValue.value?.operator === 'gt'\"> > </span>\r\n <span *ngIf=\"filterWithValue.value?.operator === 'lt'\"> < </span>\r\n <span *ngIf=\"$any(filterWithValue.filter.type).inputType === 'currency'\">{{\r\n +filterWithValue.value?.amount | localeCurrency\r\n }}</span>\r\n <span *ngIf=\"$any(filterWithValue.filter.type).inputType !== 'currency'\">{{\r\n +filterWithValue.value?.amount\r\n }}</span>\r\n </ng-container>\r\n <ng-container *ngIf=\"filterWithValue.isCustom()\">\r\n <span>{{ customFilterLabel$ | async }}</span>\r\n </ng-container>\r\n</div>\r\n", styles: [":host{display:flex;gap:calc(var(--space-unit) / 2)}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.LocalizedTextComponent, selector: "vdr-localized-text", inputs: ["text"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "pipe", type: i4.LocaleDatePipe, name: "localeDate" }, { kind: "pipe", type: i5.LocaleCurrencyPipe, name: "localeCurrency" }], changeDetection: i0.ChangeDetectionStrategy.Default }); }
25
25
  }
26
26
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: DataTableFilterLabelComponent, decorators: [{
27
27
  type: Component,
28
- args: [{ selector: 'vdr-data-table-filter-label', changeDetection: ChangeDetectionStrategy.Default, template: "<span><vdr-localized-text [text]=\"filterWithValue.filter.label\" />:</span>\n<div>\n <ng-container *ngIf=\"filterWithValue.isSelect()\">\n {{ filterWithValue.value?.join(', ') }}\n </ng-container>\n <ng-container *ngIf=\"filterWithValue.isId()\">\n <span *ngIf=\"filterWithValue.value?.operator === 'eq'\">{{ 'common.operator-eq' | translate }}</span>\n <span *ngIf=\"filterWithValue.value?.operator === 'notEq'\">{{\n 'common.operator-not-eq' | translate\n }}</span>\n <span> \"{{ filterWithValue.value?.term }}\"</span>\n </ng-container>\n <ng-container *ngIf=\"filterWithValue.isText()\">\n <span *ngIf=\"filterWithValue.value?.operator === 'contains'\">{{\n 'common.operator-contains' | translate\n }}</span>\n <span *ngIf=\"filterWithValue.value?.operator === 'eq'\">{{ 'common.operator-eq' | translate }}</span>\n <span *ngIf=\"filterWithValue.value?.operator === 'notContains'\">{{\n 'common.operator-notContains' | translate\n }}</span>\n <span *ngIf=\"filterWithValue.value?.operator === 'notEq'\">{{\n 'common.operator-not-eq' | translate\n }}</span>\n <span *ngIf=\"filterWithValue.value?.operator === 'regex'\">{{\n 'common.operator-regex' | translate\n }}</span>\n <span> \"{{ filterWithValue.value?.term }}\"</span>\n </ng-container>\n <ng-container *ngIf=\"filterWithValue.isBoolean()\">\n <span *ngIf=\"filterWithValue?.value\">{{ 'common.boolean-true' | translate }}</span>\n <span *ngIf=\"!filterWithValue?.value\">{{ 'common.boolean-false' | translate }}</span>\n </ng-container>\n <ng-container *ngIf=\"filterWithValue.isDateRange()\">\n <ng-container *ngIf=\"filterWithValue.value.mode === 'relative'\">\n <span *ngIf=\"filterWithValue.value.relativeUnit === 'day'\">\n {{ 'datetime.relative-past-days' | translate: { count: filterWithValue.value.relativeValue } }}\n </span>\n <span *ngIf=\"filterWithValue.value.relativeUnit === 'month'\">\n {{ 'datetime.relative-past-months' | translate: { count: filterWithValue.value.relativeValue } }}\n </span>\n <span *ngIf=\"filterWithValue.value.relativeUnit === 'year'\">\n {{ 'datetime.relative-past-years' | translate: { count: filterWithValue.value.relativeValue } }}\n </span>\n </ng-container>\n <ng-container *ngIf=\"filterWithValue.value.mode === 'range'\">\n <span *ngIf=\"filterWithValue.value?.start && filterWithValue.value?.end\">\n {{ filterWithValue.value?.start | localeDate : 'shortDate' }} -\n {{ filterWithValue.value?.end | localeDate : 'shortDate' }}\n </span>\n <span *ngIf=\"filterWithValue.value?.start && !filterWithValue.value?.end\">\n > {{ filterWithValue.value?.start | localeDate : 'shortDate' }}\n </span>\n <span *ngIf=\"filterWithValue.value?.end && !filterWithValue.value?.start\">\n < {{ filterWithValue.value?.end | localeDate : 'shortDate' }}\n </span>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"filterWithValue.isNumber()\">\n <span *ngIf=\"filterWithValue.value?.operator === 'eq'\"> = </span>\n <span *ngIf=\"filterWithValue.value?.operator === 'gt'\"> > </span>\n <span *ngIf=\"filterWithValue.value?.operator === 'lt'\"> < </span>\n <span *ngIf=\"$any(filterWithValue.filter.type).inputType === 'currency'\">{{\n +filterWithValue.value?.amount | localeCurrency\n }}</span>\n <span *ngIf=\"$any(filterWithValue.filter.type).inputType !== 'currency'\">{{\n +filterWithValue.value?.amount\n }}</span>\n </ng-container>\n <ng-container *ngIf=\"filterWithValue.isCustom()\">\n <span>{{ customFilterLabel$ | async }}</span>\n </ng-container>\n</div>\n", styles: [":host{display:flex;gap:calc(var(--space-unit) / 2)}\n"] }]
28
+ args: [{ selector: 'vdr-data-table-filter-label', changeDetection: ChangeDetectionStrategy.Default, template: "<span><vdr-localized-text [text]=\"filterWithValue.filter.label\" />:</span>\r\n<div>\r\n <ng-container *ngIf=\"filterWithValue.isSelect()\">\r\n {{ filterWithValue.value?.join(', ') }}\r\n </ng-container>\r\n <ng-container *ngIf=\"filterWithValue.isId()\">\r\n <span *ngIf=\"filterWithValue.value?.operator === 'eq'\">{{ 'common.operator-eq' | translate }}</span>\r\n <span *ngIf=\"filterWithValue.value?.operator === 'notEq'\">{{\r\n 'common.operator-not-eq' | translate\r\n }}</span>\r\n <span> \"{{ filterWithValue.value?.term }}\"</span>\r\n </ng-container>\r\n <ng-container *ngIf=\"filterWithValue.isText()\">\r\n <span *ngIf=\"filterWithValue.value?.operator === 'contains'\">{{\r\n 'common.operator-contains' | translate\r\n }}</span>\r\n <span *ngIf=\"filterWithValue.value?.operator === 'eq'\">{{ 'common.operator-eq' | translate }}</span>\r\n <span *ngIf=\"filterWithValue.value?.operator === 'notContains'\">{{\r\n 'common.operator-notContains' | translate\r\n }}</span>\r\n <span *ngIf=\"filterWithValue.value?.operator === 'notEq'\">{{\r\n 'common.operator-not-eq' | translate\r\n }}</span>\r\n <span *ngIf=\"filterWithValue.value?.operator === 'regex'\">{{\r\n 'common.operator-regex' | translate\r\n }}</span>\r\n <span> \"{{ filterWithValue.value?.term }}\"</span>\r\n </ng-container>\r\n <ng-container *ngIf=\"filterWithValue.isBoolean()\">\r\n <span *ngIf=\"filterWithValue?.value\">{{ 'common.boolean-true' | translate }}</span>\r\n <span *ngIf=\"!filterWithValue?.value\">{{ 'common.boolean-false' | translate }}</span>\r\n </ng-container>\r\n <ng-container *ngIf=\"filterWithValue.isDateRange()\">\r\n <ng-container *ngIf=\"filterWithValue.value.mode === 'relative'\">\r\n <span *ngIf=\"filterWithValue.value.relativeUnit === 'day'\">\r\n {{ 'datetime.relative-past-days' | translate: { count: filterWithValue.value.relativeValue } }}\r\n </span>\r\n <span *ngIf=\"filterWithValue.value.relativeUnit === 'month'\">\r\n {{ 'datetime.relative-past-months' | translate: { count: filterWithValue.value.relativeValue } }}\r\n </span>\r\n <span *ngIf=\"filterWithValue.value.relativeUnit === 'year'\">\r\n {{ 'datetime.relative-past-years' | translate: { count: filterWithValue.value.relativeValue } }}\r\n </span>\r\n </ng-container>\r\n <ng-container *ngIf=\"filterWithValue.value.mode === 'range'\">\r\n <span *ngIf=\"filterWithValue.value?.start && filterWithValue.value?.end\">\r\n {{ filterWithValue.value?.start | localeDate : 'shortDate' }} -\r\n {{ filterWithValue.value?.end | localeDate : 'shortDate' }}\r\n </span>\r\n <span *ngIf=\"filterWithValue.value?.start && !filterWithValue.value?.end\">\r\n > {{ filterWithValue.value?.start | localeDate : 'shortDate' }}\r\n </span>\r\n <span *ngIf=\"filterWithValue.value?.end && !filterWithValue.value?.start\">\r\n < {{ filterWithValue.value?.end | localeDate : 'shortDate' }}\r\n </span>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"filterWithValue.isNumber()\">\r\n <span *ngIf=\"filterWithValue.value?.operator === 'eq'\"> = </span>\r\n <span *ngIf=\"filterWithValue.value?.operator === 'gt'\"> > </span>\r\n <span *ngIf=\"filterWithValue.value?.operator === 'lt'\"> < </span>\r\n <span *ngIf=\"$any(filterWithValue.filter.type).inputType === 'currency'\">{{\r\n +filterWithValue.value?.amount | localeCurrency\r\n }}</span>\r\n <span *ngIf=\"$any(filterWithValue.filter.type).inputType !== 'currency'\">{{\r\n +filterWithValue.value?.amount\r\n }}</span>\r\n </ng-container>\r\n <ng-container *ngIf=\"filterWithValue.isCustom()\">\r\n <span>{{ customFilterLabel$ | async }}</span>\r\n </ng-container>\r\n</div>\r\n", styles: [":host{display:flex;gap:calc(var(--space-unit) / 2)}\n"] }]
29
29
  }], propDecorators: { filterWithValue: [{
30
30
  type: Input
31
31
  }] } });
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS1maWx0ZXItbGFiZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb3JlL3NyYy9zaGFyZWQvY29tcG9uZW50cy9kYXRhLXRhYmxlLWZpbHRlci1sYWJlbC9kYXRhLXRhYmxlLWZpbHRlci1sYWJlbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvcmUvc3JjL3NoYXJlZC9jb21wb25lbnRzL2RhdGEtdGFibGUtZmlsdGVyLWxhYmVsL2RhdGEtdGFibGUtZmlsdGVyLWxhYmVsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7O0FBV3ZFLE1BQU0sT0FBTyw2QkFBNkI7SUFJdEMsUUFBUTtRQUNKLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUMvQyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLElBQUksQ0FDOUUsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNYLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUU7Z0JBQ3JELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDMUYsT0FBTyxPQUFPLFdBQVcsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQ2hGO2lCQUFNO2dCQUNILE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ2pCO1FBQ0wsQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNOLENBQUM7OEdBakJRLDZCQUE2QjtrR0FBN0IsNkJBQTZCLG1IQ1oxQywrN0hBd0VBOzsyRkQ1RGEsNkJBQTZCO2tCQU56QyxTQUFTOytCQUNJLDZCQUE2QixtQkFHdEIsdUJBQXVCLENBQUMsT0FBTzs4QkFHdkMsZUFBZTtzQkFBdkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgZnJvbSwgbWVyZ2UsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgTGFuZ3VhZ2VDb2RlLCBMb2NhbGl6ZWRTdHJpbmcgfSBmcm9tICcuLi8uLi8uLi9jb21tb24vZ2VuZXJhdGVkLXR5cGVzJztcclxuaW1wb3J0IHsgRGF0YVRhYmxlRmlsdGVyIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL2RhdGEtdGFibGUvZGF0YS10YWJsZS1maWx0ZXInO1xyXG5pbXBvcnQgeyBGaWx0ZXJXaXRoVmFsdWUgfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvZGF0YS10YWJsZS9kYXRhLXRhYmxlLWZpbHRlci1jb2xsZWN0aW9uJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICd2ZHItZGF0YS10YWJsZS1maWx0ZXItbGFiZWwnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2RhdGEtdGFibGUtZmlsdGVyLWxhYmVsLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2RhdGEtdGFibGUtZmlsdGVyLWxhYmVsLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LkRlZmF1bHQsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEYXRhVGFibGVGaWx0ZXJMYWJlbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBASW5wdXQoKSBmaWx0ZXJXaXRoVmFsdWU6IEZpbHRlcldpdGhWYWx1ZTtcclxuICAgIHByb3RlY3RlZCBjdXN0b21GaWx0ZXJMYWJlbCQ/OiBPYnNlcnZhYmxlPHN0cmluZz47XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyVmFsdWVVcGRhdGUkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgICAgICB0aGlzLmZpbHRlcldpdGhWYWx1ZS5vblVwZGF0ZSgoKSA9PiBmaWx0ZXJWYWx1ZVVwZGF0ZSQubmV4dCgpKTtcclxuICAgICAgICB0aGlzLmN1c3RvbUZpbHRlckxhYmVsJCA9IG1lcmdlKG9mKHRoaXMuZmlsdGVyV2l0aFZhbHVlKSwgZmlsdGVyVmFsdWVVcGRhdGUkKS5waXBlKFxyXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZmlsdGVyV2l0aFZhbHVlPy5maWx0ZXIudHlwZS5raW5kID09PSAnY3VzdG9tJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsUmVzdWx0ID0gdGhpcy5maWx0ZXJXaXRoVmFsdWUuZmlsdGVyLnR5cGUuZ2V0TGFiZWwodGhpcy5maWx0ZXJXaXRoVmFsdWUudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgbGFiZWxSZXN1bHQgPT09ICdzdHJpbmcnID8gb2YobGFiZWxSZXN1bHQpIDogZnJvbShsYWJlbFJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZignJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn1cclxuIiwiPHNwYW4+PHZkci1sb2NhbGl6ZWQtdGV4dCBbdGV4dF09XCJmaWx0ZXJXaXRoVmFsdWUuZmlsdGVyLmxhYmVsXCIgLz46PC9zcGFuPlxuPGRpdj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVyV2l0aFZhbHVlLmlzU2VsZWN0KClcIj5cbiAgICAgICAge3sgZmlsdGVyV2l0aFZhbHVlLnZhbHVlPy5qb2luKCcsICcpIH19XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlcldpdGhWYWx1ZS5pc0lkKClcIj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJmaWx0ZXJXaXRoVmFsdWUudmFsdWU/Lm9wZXJhdG9yID09PSAnZXEnXCI+e3sgJ2NvbW1vbi5vcGVyYXRvci1lcScgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiZmlsdGVyV2l0aFZhbHVlLnZhbHVlPy5vcGVyYXRvciA9PT0gJ25vdEVxJ1wiPnt7XG4gICAgICAgICAgICAnY29tbW9uLm9wZXJhdG9yLW5vdC1lcScgfCB0cmFuc2xhdGVcbiAgICAgICAgfX08L3NwYW4+XG4gICAgICAgIDxzcGFuPiBcInt7IGZpbHRlcldpdGhWYWx1ZS52YWx1ZT8udGVybSB9fVwiPC9zcGFuPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXJXaXRoVmFsdWUuaXNUZXh0KClcIj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJmaWx0ZXJXaXRoVmFsdWUudmFsdWU/Lm9wZXJhdG9yID09PSAnY29udGFpbnMnXCI+e3tcbiAgICAgICAgICAgICdjb21tb24ub3BlcmF0b3ItY29udGFpbnMnIHwgdHJhbnNsYXRlXG4gICAgICAgIH19PC9zcGFuPlxuICAgICAgICA8c3BhbiAqbmdJZj1cImZpbHRlcldpdGhWYWx1ZS52YWx1ZT8ub3BlcmF0b3IgPT09ICdlcSdcIj57eyAnY29tbW9uLm9wZXJhdG9yLWVxJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJmaWx0ZXJXaXRoVmFsdWUudmFsdWU/Lm9wZXJhdG9yID09PSAnbm90Q29udGFpbnMnXCI+e3tcbiAgICAgICAgICAgICdjb21tb24ub3BlcmF0b3Itbm90Q29udGFpbnMnIHwgdHJhbnNsYXRlXG4gICAgICAgIH19PC9zcGFuPlxuICAgICAgICA8c3BhbiAqbmdJZj1cImZpbHRlcldpdGhWYWx1ZS52YWx1ZT8ub3BlcmF0b3IgPT09ICdub3RFcSdcIj57e1xuICAgICAgICAgICAgJ2NvbW1vbi5vcGVyYXRvci1ub3QtZXEnIHwgdHJhbnNsYXRlXG4gICAgICAgIH19PC9zcGFuPlxuICAgICAgICA8c3BhbiAqbmdJZj1cImZpbHRlcldpdGhWYWx1ZS52YWx1ZT8ub3BlcmF0b3IgPT09ICdyZWdleCdcIj57e1xuICAgICAgICAgICAgJ2NvbW1vbi5vcGVyYXRvci1yZWdleCcgfCB0cmFuc2xhdGVcbiAgICAgICAgfX08L3NwYW4+XG4gICAgICAgIDxzcGFuPiBcInt7IGZpbHRlcldpdGhWYWx1ZS52YWx1ZT8udGVybSB9fVwiPC9zcGFuPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXJXaXRoVmFsdWUuaXNCb29sZWFuKClcIj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJmaWx0ZXJXaXRoVmFsdWU/LnZhbHVlXCI+e3sgJ2NvbW1vbi5ib29sZWFuLXRydWUnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICA8c3BhbiAqbmdJZj1cIiFmaWx0ZXJXaXRoVmFsdWU/LnZhbHVlXCI+e3sgJ2NvbW1vbi5ib29sZWFuLWZhbHNlJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVyV2l0aFZhbHVlLmlzRGF0ZVJhbmdlKClcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlcldpdGhWYWx1ZS52YWx1ZS5tb2RlID09PSAncmVsYXRpdmUnXCI+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZpbHRlcldpdGhWYWx1ZS52YWx1ZS5yZWxhdGl2ZVVuaXQgPT09ICdkYXknXCI+XG4gICAgICAgICAgICAgICAge3sgJ2RhdGV0aW1lLnJlbGF0aXZlLXBhc3QtZGF5cycgfCB0cmFuc2xhdGU6IHsgY291bnQ6IGZpbHRlcldpdGhWYWx1ZS52YWx1ZS5yZWxhdGl2ZVZhbHVlIH0gfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZmlsdGVyV2l0aFZhbHVlLnZhbHVlLnJlbGF0aXZlVW5pdCA9PT0gJ21vbnRoJ1wiPlxuICAgICAgICAgICAgICAgIHt7ICdkYXRldGltZS5yZWxhdGl2ZS1wYXN0LW1vbnRocycgfCB0cmFuc2xhdGU6IHsgY291bnQ6IGZpbHRlcldpdGhWYWx1ZS52YWx1ZS5yZWxhdGl2ZVZhbHVlIH0gfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZmlsdGVyV2l0aFZhbHVlLnZhbHVlLnJlbGF0aXZlVW5pdCA9PT0gJ3llYXInXCI+XG4gICAgICAgICAgICAgICAge3sgJ2RhdGV0aW1lLnJlbGF0aXZlLXBhc3QteWVhcnMnIHwgdHJhbnNsYXRlOiB7IGNvdW50OiBmaWx0ZXJXaXRoVmFsdWUudmFsdWUucmVsYXRpdmVWYWx1ZSB9IH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVyV2l0aFZhbHVlLnZhbHVlLm1vZGUgPT09ICdyYW5nZSdcIj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZmlsdGVyV2l0aFZhbHVlLnZhbHVlPy5zdGFydCAmJiBmaWx0ZXJXaXRoVmFsdWUudmFsdWU/LmVuZFwiPlxuICAgICAgICAgICAgICAgIHt7IGZpbHRlcldpdGhWYWx1ZS52YWx1ZT8uc3RhcnQgfCBsb2NhbGVEYXRlIDogJ3Nob3J0RGF0ZScgfX0gLVxuICAgICAgICAgICAgICAgIHt7IGZpbHRlcldpdGhWYWx1ZS52YWx1ZT8uZW5kIHwgbG9jYWxlRGF0ZSA6ICdzaG9ydERhdGUnIH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZpbHRlcldpdGhWYWx1ZS52YWx1ZT8uc3RhcnQgJiYgIWZpbHRlcldpdGhWYWx1ZS52YWx1ZT8uZW5kXCI+XG4gICAgICAgICAgICAgICAgPiB7eyBmaWx0ZXJXaXRoVmFsdWUudmFsdWU/LnN0YXJ0IHwgbG9jYWxlRGF0ZSA6ICdzaG9ydERhdGUnIH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZpbHRlcldpdGhWYWx1ZS52YWx1ZT8uZW5kICYmICFmaWx0ZXJXaXRoVmFsdWUudmFsdWU/LnN0YXJ0XCI+XG4gICAgICAgICAgICAgICAgPCB7eyBmaWx0ZXJXaXRoVmFsdWUudmFsdWU/LmVuZCB8IGxvY2FsZURhdGUgOiAnc2hvcnREYXRlJyB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVyV2l0aFZhbHVlLmlzTnVtYmVyKClcIj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJmaWx0ZXJXaXRoVmFsdWUudmFsdWU/Lm9wZXJhdG9yID09PSAnZXEnXCI+ID0gPC9zcGFuPlxuICAgICAgICA8c3BhbiAqbmdJZj1cImZpbHRlcldpdGhWYWx1ZS52YWx1ZT8ub3BlcmF0b3IgPT09ICdndCdcIj4gPiA8L3NwYW4+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiZmlsdGVyV2l0aFZhbHVlLnZhbHVlPy5vcGVyYXRvciA9PT0gJ2x0J1wiPiA8IDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCIkYW55KGZpbHRlcldpdGhWYWx1ZS5maWx0ZXIudHlwZSkuaW5wdXRUeXBlID09PSAnY3VycmVuY3knXCI+e3tcbiAgICAgICAgICAgICtmaWx0ZXJXaXRoVmFsdWUudmFsdWU/LmFtb3VudCB8IGxvY2FsZUN1cnJlbmN5XG4gICAgICAgIH19PC9zcGFuPlxuICAgICAgICA8c3BhbiAqbmdJZj1cIiRhbnkoZmlsdGVyV2l0aFZhbHVlLmZpbHRlci50eXBlKS5pbnB1dFR5cGUgIT09ICdjdXJyZW5jeSdcIj57e1xuICAgICAgICAgICAgK2ZpbHRlcldpdGhWYWx1ZS52YWx1ZT8uYW1vdW50XG4gICAgICAgIH19PC9zcGFuPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXJXaXRoVmFsdWUuaXNDdXN0b20oKVwiPlxuICAgICAgICA8c3Bhbj57eyBjdXN0b21GaWx0ZXJMYWJlbCQgfCBhc3luYyB9fTwvc3Bhbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuIl19
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS1maWx0ZXItbGFiZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb3JlL3NyYy9zaGFyZWQvY29tcG9uZW50cy9kYXRhLXRhYmxlLWZpbHRlci1sYWJlbC9kYXRhLXRhYmxlLWZpbHRlci1sYWJlbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvcmUvc3JjL3NoYXJlZC9jb21wb25lbnRzL2RhdGEtdGFibGUtZmlsdGVyLWxhYmVsL2RhdGEtdGFibGUtZmlsdGVyLWxhYmVsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7O0FBV3ZFLE1BQU0sT0FBTyw2QkFBNkI7SUFJdEMsUUFBUTtRQUNKLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUMvQyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLElBQUksQ0FDOUUsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNYLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUU7Z0JBQ3JELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDMUYsT0FBTyxPQUFPLFdBQVcsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQ2hGO2lCQUFNO2dCQUNILE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ2pCO1FBQ0wsQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNOLENBQUM7OEdBakJRLDZCQUE2QjtrR0FBN0IsNkJBQTZCLG1IQ1oxQywra0lBd0VBOzsyRkQ1RGEsNkJBQTZCO2tCQU56QyxTQUFTOytCQUNJLDZCQUE2QixtQkFHdEIsdUJBQXVCLENBQUMsT0FBTzs4QkFHdkMsZUFBZTtzQkFBdkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgZnJvbSwgbWVyZ2UsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgTGFuZ3VhZ2VDb2RlLCBMb2NhbGl6ZWRTdHJpbmcgfSBmcm9tICcuLi8uLi8uLi9jb21tb24vZ2VuZXJhdGVkLXR5cGVzJztcclxuaW1wb3J0IHsgRGF0YVRhYmxlRmlsdGVyIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL2RhdGEtdGFibGUvZGF0YS10YWJsZS1maWx0ZXInO1xyXG5pbXBvcnQgeyBGaWx0ZXJXaXRoVmFsdWUgfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvZGF0YS10YWJsZS9kYXRhLXRhYmxlLWZpbHRlci1jb2xsZWN0aW9uJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICd2ZHItZGF0YS10YWJsZS1maWx0ZXItbGFiZWwnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2RhdGEtdGFibGUtZmlsdGVyLWxhYmVsLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2RhdGEtdGFibGUtZmlsdGVyLWxhYmVsLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LkRlZmF1bHQsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEYXRhVGFibGVGaWx0ZXJMYWJlbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBASW5wdXQoKSBmaWx0ZXJXaXRoVmFsdWU6IEZpbHRlcldpdGhWYWx1ZTtcclxuICAgIHByb3RlY3RlZCBjdXN0b21GaWx0ZXJMYWJlbCQ/OiBPYnNlcnZhYmxlPHN0cmluZz47XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyVmFsdWVVcGRhdGUkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgICAgICB0aGlzLmZpbHRlcldpdGhWYWx1ZS5vblVwZGF0ZSgoKSA9PiBmaWx0ZXJWYWx1ZVVwZGF0ZSQubmV4dCgpKTtcclxuICAgICAgICB0aGlzLmN1c3RvbUZpbHRlckxhYmVsJCA9IG1lcmdlKG9mKHRoaXMuZmlsdGVyV2l0aFZhbHVlKSwgZmlsdGVyVmFsdWVVcGRhdGUkKS5waXBlKFxyXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZmlsdGVyV2l0aFZhbHVlPy5maWx0ZXIudHlwZS5raW5kID09PSAnY3VzdG9tJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsUmVzdWx0ID0gdGhpcy5maWx0ZXJXaXRoVmFsdWUuZmlsdGVyLnR5cGUuZ2V0TGFiZWwodGhpcy5maWx0ZXJXaXRoVmFsdWUudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgbGFiZWxSZXN1bHQgPT09ICdzdHJpbmcnID8gb2YobGFiZWxSZXN1bHQpIDogZnJvbShsYWJlbFJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZignJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn1cclxuIiwiPHNwYW4+PHZkci1sb2NhbGl6ZWQtdGV4dCBbdGV4dF09XCJmaWx0ZXJXaXRoVmFsdWUuZmlsdGVyLmxhYmVsXCIgLz46PC9zcGFuPlxyXG48ZGl2PlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlcldpdGhWYWx1ZS5pc1NlbGVjdCgpXCI+XHJcbiAgICAgICAge3sgZmlsdGVyV2l0aFZhbHVlLnZhbHVlPy5qb2luKCcsICcpIH19XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXJXaXRoVmFsdWUuaXNJZCgpXCI+XHJcbiAgICAgICAgPHNwYW4gKm5nSWY9XCJmaWx0ZXJXaXRoVmFsdWUudmFsdWU/Lm9wZXJhdG9yID09PSAnZXEnXCI+e3sgJ2NvbW1vbi5vcGVyYXRvci1lcScgfCB0cmFuc2xhdGUgfX08L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gKm5nSWY9XCJmaWx0ZXJXaXRoVmFsdWUudmFsdWU/Lm9wZXJhdG9yID09PSAnbm90RXEnXCI+e3tcclxuICAgICAgICAgICAgJ2NvbW1vbi5vcGVyYXRvci1ub3QtZXEnIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgfX08L3NwYW4+XHJcbiAgICAgICAgPHNwYW4+IFwie3sgZmlsdGVyV2l0aFZhbHVlLnZhbHVlPy50ZXJtIH19XCI8L3NwYW4+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXJXaXRoVmFsdWUuaXNUZXh0KClcIj5cclxuICAgICAgICA8c3BhbiAqbmdJZj1cImZpbHRlcldpdGhWYWx1ZS52YWx1ZT8ub3BlcmF0b3IgPT09ICdjb250YWlucydcIj57e1xyXG4gICAgICAgICAgICAnY29tbW9uLm9wZXJhdG9yLWNvbnRhaW5zJyB8IHRyYW5zbGF0ZVxyXG4gICAgICAgIH19PC9zcGFuPlxyXG4gICAgICAgIDxzcGFuICpuZ0lmPVwiZmlsdGVyV2l0aFZhbHVlLnZhbHVlPy5vcGVyYXRvciA9PT0gJ2VxJ1wiPnt7ICdjb21tb24ub3BlcmF0b3ItZXEnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxyXG4gICAgICAgIDxzcGFuICpuZ0lmPVwiZmlsdGVyV2l0aFZhbHVlLnZhbHVlPy5vcGVyYXRvciA9PT0gJ25vdENvbnRhaW5zJ1wiPnt7XHJcbiAgICAgICAgICAgICdjb21tb24ub3BlcmF0b3Itbm90Q29udGFpbnMnIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgfX08L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gKm5nSWY9XCJmaWx0ZXJXaXRoVmFsdWUudmFsdWU/Lm9wZXJhdG9yID09PSAnbm90RXEnXCI+e3tcclxuICAgICAgICAgICAgJ2NvbW1vbi5vcGVyYXRvci1ub3QtZXEnIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgfX08L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gKm5nSWY9XCJmaWx0ZXJXaXRoVmFsdWUudmFsdWU/Lm9wZXJhdG9yID09PSAncmVnZXgnXCI+e3tcclxuICAgICAgICAgICAgJ2NvbW1vbi5vcGVyYXRvci1yZWdleCcgfCB0cmFuc2xhdGVcclxuICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICA8c3Bhbj4gXCJ7eyBmaWx0ZXJXaXRoVmFsdWUudmFsdWU/LnRlcm0gfX1cIjwvc3Bhbj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlcldpdGhWYWx1ZS5pc0Jvb2xlYW4oKVwiPlxyXG4gICAgICAgIDxzcGFuICpuZ0lmPVwiZmlsdGVyV2l0aFZhbHVlPy52YWx1ZVwiPnt7ICdjb21tb24uYm9vbGVhbi10cnVlJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cclxuICAgICAgICA8c3BhbiAqbmdJZj1cIiFmaWx0ZXJXaXRoVmFsdWU/LnZhbHVlXCI+e3sgJ2NvbW1vbi5ib29sZWFuLWZhbHNlJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlcldpdGhWYWx1ZS5pc0RhdGVSYW5nZSgpXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlcldpdGhWYWx1ZS52YWx1ZS5tb2RlID09PSAncmVsYXRpdmUnXCI+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZmlsdGVyV2l0aFZhbHVlLnZhbHVlLnJlbGF0aXZlVW5pdCA9PT0gJ2RheSdcIj5cclxuICAgICAgICAgICAgICAgIHt7ICdkYXRldGltZS5yZWxhdGl2ZS1wYXN0LWRheXMnIHwgdHJhbnNsYXRlOiB7IGNvdW50OiBmaWx0ZXJXaXRoVmFsdWUudmFsdWUucmVsYXRpdmVWYWx1ZSB9IH19XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmaWx0ZXJXaXRoVmFsdWUudmFsdWUucmVsYXRpdmVVbml0ID09PSAnbW9udGgnXCI+XHJcbiAgICAgICAgICAgICAgICB7eyAnZGF0ZXRpbWUucmVsYXRpdmUtcGFzdC1tb250aHMnIHwgdHJhbnNsYXRlOiB7IGNvdW50OiBmaWx0ZXJXaXRoVmFsdWUudmFsdWUucmVsYXRpdmVWYWx1ZSB9IH19XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmaWx0ZXJXaXRoVmFsdWUudmFsdWUucmVsYXRpdmVVbml0ID09PSAneWVhcidcIj5cclxuICAgICAgICAgICAgICAgIHt7ICdkYXRldGltZS5yZWxhdGl2ZS1wYXN0LXllYXJzJyB8IHRyYW5zbGF0ZTogeyBjb3VudDogZmlsdGVyV2l0aFZhbHVlLnZhbHVlLnJlbGF0aXZlVmFsdWUgfSB9fVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlcldpdGhWYWx1ZS52YWx1ZS5tb2RlID09PSAncmFuZ2UnXCI+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZmlsdGVyV2l0aFZhbHVlLnZhbHVlPy5zdGFydCAmJiBmaWx0ZXJXaXRoVmFsdWUudmFsdWU/LmVuZFwiPlxyXG4gICAgICAgICAgICAgICAge3sgZmlsdGVyV2l0aFZhbHVlLnZhbHVlPy5zdGFydCB8IGxvY2FsZURhdGUgOiAnc2hvcnREYXRlJyB9fSAtXHJcbiAgICAgICAgICAgICAgICB7eyBmaWx0ZXJXaXRoVmFsdWUudmFsdWU/LmVuZCB8IGxvY2FsZURhdGUgOiAnc2hvcnREYXRlJyB9fVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZmlsdGVyV2l0aFZhbHVlLnZhbHVlPy5zdGFydCAmJiAhZmlsdGVyV2l0aFZhbHVlLnZhbHVlPy5lbmRcIj5cclxuICAgICAgICAgICAgICAgID4ge3sgZmlsdGVyV2l0aFZhbHVlLnZhbHVlPy5zdGFydCB8IGxvY2FsZURhdGUgOiAnc2hvcnREYXRlJyB9fVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZmlsdGVyV2l0aFZhbHVlLnZhbHVlPy5lbmQgJiYgIWZpbHRlcldpdGhWYWx1ZS52YWx1ZT8uc3RhcnRcIj5cclxuICAgICAgICAgICAgICAgIDwge3sgZmlsdGVyV2l0aFZhbHVlLnZhbHVlPy5lbmQgfCBsb2NhbGVEYXRlIDogJ3Nob3J0RGF0ZScgfX1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVyV2l0aFZhbHVlLmlzTnVtYmVyKClcIj5cclxuICAgICAgICA8c3BhbiAqbmdJZj1cImZpbHRlcldpdGhWYWx1ZS52YWx1ZT8ub3BlcmF0b3IgPT09ICdlcSdcIj4gPSA8L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gKm5nSWY9XCJmaWx0ZXJXaXRoVmFsdWUudmFsdWU/Lm9wZXJhdG9yID09PSAnZ3QnXCI+ID4gPC9zcGFuPlxyXG4gICAgICAgIDxzcGFuICpuZ0lmPVwiZmlsdGVyV2l0aFZhbHVlLnZhbHVlPy5vcGVyYXRvciA9PT0gJ2x0J1wiPiA8IDwvc3Bhbj5cclxuICAgICAgICA8c3BhbiAqbmdJZj1cIiRhbnkoZmlsdGVyV2l0aFZhbHVlLmZpbHRlci50eXBlKS5pbnB1dFR5cGUgPT09ICdjdXJyZW5jeSdcIj57e1xyXG4gICAgICAgICAgICArZmlsdGVyV2l0aFZhbHVlLnZhbHVlPy5hbW91bnQgfCBsb2NhbGVDdXJyZW5jeVxyXG4gICAgICAgIH19PC9zcGFuPlxyXG4gICAgICAgIDxzcGFuICpuZ0lmPVwiJGFueShmaWx0ZXJXaXRoVmFsdWUuZmlsdGVyLnR5cGUpLmlucHV0VHlwZSAhPT0gJ2N1cnJlbmN5J1wiPnt7XHJcbiAgICAgICAgICAgICtmaWx0ZXJXaXRoVmFsdWUudmFsdWU/LmFtb3VudFxyXG4gICAgICAgIH19PC9zcGFuPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVyV2l0aFZhbHVlLmlzQ3VzdG9tKClcIj5cclxuICAgICAgICA8c3Bhbj57eyBjdXN0b21GaWx0ZXJMYWJlbCQgfCBhc3luYyB9fTwvc3Bhbj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG48L2Rpdj5cclxuIl19
@@ -22,7 +22,7 @@ export class AddFilterPresetButtonComponent {
22
22
  this.destroy$ = new Subject();
23
23
  }
24
24
  ngOnInit() {
25
- merge(this.route.queryParamMap.pipe(map(qpm => qpm.get('filters')), distinctUntilChanged(), takeUntil(this.destroy$)), this.filterPresetService.presetChanges$).subscribe(() => {
25
+ merge(this.route.queryParamMap.pipe(map(qpm => qpm.get('filters')), distinctUntilChanged(), takeUntil(this.destroy$)), this.filterPresetService.presetChanges$, this.filters.valueChanges).subscribe(() => {
26
26
  this.changeDetector.markForCheck();
27
27
  this.updateSelectedFilterPreset();
28
28
  });
@@ -66,4 +66,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImpor
66
66
  type: ViewChild,
67
67
  args: ['addPresetDropdown']
68
68
  }] } });
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWZpbHRlci1wcmVzZXQtYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29yZS9zcmMvc2hhcmVkL2NvbXBvbmVudHMvZGF0YS10YWJsZS1maWx0ZXItcHJlc2V0cy9hZGQtZmlsdGVyLXByZXNldC1idXR0b24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb3JlL3NyYy9zaGFyZWQvY29tcG9uZW50cy9kYXRhLXRhYmxlLWZpbHRlci1wcmVzZXRzL2FkZC1maWx0ZXItcHJlc2V0LWJ1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxLQUFLLEVBR0wsU0FBUyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7QUFXdEUsTUFBTSxPQUFPLDhCQUE4QjtJQVF2QyxZQUNZLG1CQUF3QyxFQUN4QyxjQUFpQyxFQUNqQyxLQUFxQjtRQUZyQix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQUNqQyxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQU5qQyxxQkFBZ0IsR0FBRyxJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMvQixhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQU1wQyxDQUFDO0lBRUosUUFBUTtRQUNKLEtBQUssQ0FDRCxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ3pCLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFDOUIsb0JBQW9CLEVBQUUsRUFDdEIsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FDM0IsRUFDRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxDQUMxQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDYixJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELGdCQUFnQjtRQUNaLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7UUFDekMsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksRUFBRTtZQUN0QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDdEMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO2dCQUM3QixJQUFJO2dCQUNKLEtBQUs7YUFDUixDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ25DLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUN2QztRQUNELElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFTywwQkFBMEI7UUFDOUIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxtQkFBbUI7YUFDL0MsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQzthQUNsQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUM7SUFDL0QsQ0FBQzs4R0FwRFEsOEJBQThCO2tHQUE5Qiw4QkFBOEIsd1BDdkIzQyw2cUNBK0JBOzsyRkRSYSw4QkFBOEI7a0JBTjFDLFNBQVM7K0JBQ0ksOEJBQThCLG1CQUd2Qix1QkFBdUIsQ0FBQyxNQUFNO3VLQUdwQixXQUFXO3NCQUFyQyxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFDRSxPQUFPO3NCQUFqQyxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFDTyxpQkFBaUI7c0JBQWhELFNBQVM7dUJBQUMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBtZXJnZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRGF0YVRhYmxlRmlsdGVyQ29sbGVjdGlvbiB9IGZyb20gJy4uLy4uLy4uL3Byb3ZpZGVycy9kYXRhLXRhYmxlL2RhdGEtdGFibGUtZmlsdGVyLWNvbGxlY3Rpb24nO1xuaW1wb3J0IHsgRHJvcGRvd25Db21wb25lbnQgfSBmcm9tICcuLi9kcm9wZG93bi9kcm9wZG93bi5jb21wb25lbnQnO1xuaW1wb3J0IHsgRmlsdGVyUHJlc2V0U2VydmljZSB9IGZyb20gJy4vZmlsdGVyLXByZXNldC5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd2ZHItYWRkLWZpbHRlci1wcmVzZXQtYnV0dG9uJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYWRkLWZpbHRlci1wcmVzZXQtYnV0dG9uLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9hZGQtZmlsdGVyLXByZXNldC1idXR0b24uY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQWRkRmlsdGVyUHJlc2V0QnV0dG9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIGRhdGFUYWJsZUlkOiBzdHJpbmc7XG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgZmlsdGVyczogRGF0YVRhYmxlRmlsdGVyQ29sbGVjdGlvbjtcbiAgICBAVmlld0NoaWxkKCdhZGRQcmVzZXREcm9wZG93bicpIGFkZFByZXNldERyb3Bkb3duOiBEcm9wZG93bkNvbXBvbmVudDtcbiAgICBzZWxlY3RlZEZpbHRlclByZXNldDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGZpbHRlclByZXNldE5hbWUgPSBuZXcgRm9ybUNvbnRyb2woJycpO1xuICAgIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgZmlsdGVyUHJlc2V0U2VydmljZTogRmlsdGVyUHJlc2V0U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICkge31cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBtZXJnZShcbiAgICAgICAgICAgIHRoaXMucm91dGUucXVlcnlQYXJhbU1hcC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcChxcG0gPT4gcXBtLmdldCgnZmlsdGVycycpKSxcbiAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB0aGlzLmZpbHRlclByZXNldFNlcnZpY2UucHJlc2V0Q2hhbmdlcyQsXG4gICAgICAgICkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkRmlsdGVyUHJlc2V0KCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIHNhdmVGaWx0ZXJQcmVzZXQoKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLmZpbHRlclByZXNldE5hbWUudmFsdWU7XG4gICAgICAgIGlmICh0aGlzLmZpbHRlcnMgJiYgbmFtZSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmZpbHRlcnMuc2VyaWFsaXplKCk7XG4gICAgICAgICAgICB0aGlzLmZpbHRlclByZXNldFNlcnZpY2Uuc2F2ZUZpbHRlclByZXNldCh7XG4gICAgICAgICAgICAgICAgZGF0YVRhYmxlSWQ6IHRoaXMuZGF0YVRhYmxlSWQsXG4gICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJQcmVzZXROYW1lLnNldFZhbHVlKCcnKTtcbiAgICAgICAgICAgIHRoaXMuYWRkUHJlc2V0RHJvcGRvd24udG9nZ2xlT3BlbigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRGaWx0ZXJQcmVzZXQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVNlbGVjdGVkRmlsdGVyUHJlc2V0KCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkRmlsdGVyUHJlc2V0ID0gdGhpcy5maWx0ZXJQcmVzZXRTZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0RmlsdGVyUHJlc2V0cyh0aGlzLmRhdGFUYWJsZUlkKVxuICAgICAgICAgICAgLmZpbmQocCA9PiBwLnZhbHVlID09PSB0aGlzLmZpbHRlcnMuc2VyaWFsaXplKCkpPy5uYW1lO1xuICAgIH1cbn1cbiIsIjx2ZHItZHJvcGRvd24gI2FkZFByZXNldERyb3Bkb3duPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICAgIGNsYXNzPVwiYWRkLXByZXNldC1idXR0b24gbXQtMVwiXHJcbiAgICAgICAgdmRyRHJvcGRvd25UcmlnZ2VyXHJcbiAgICAgICAgW2NsYXNzLnZpc2libGVdPVwiZmlsdGVycy5hY3RpdmVGaWx0ZXJzLmxlbmd0aCA+IDAgJiYgIXNlbGVjdGVkRmlsdGVyUHJlc2V0XCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiZmlsdGVycy5hY3RpdmVGaWx0ZXJzLmxlbmd0aCA9PT0gMCB8fCAhIXNlbGVjdGVkRmlsdGVyUHJlc2V0XCJcclxuICAgID5cclxuICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJmbG9wcHlcIi8+XHJcbiAgICAgICAgPGRpdj57eyAnY29tbW9uLnNhdmUtZmlsdGVyLXByZXNldCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPHZkci1kcm9wZG93bi1tZW51XHJcbiAgICAgICAgdmRyUG9zaXRpb249XCJib3R0b20tbGVmdFwiXHJcbiAgICAgICAgW2Nka1RyYXBGb2N1c109XCJ0cnVlXCJcclxuICAgICAgICBbY2RrVHJhcEZvY3VzQXV0b0NhcHR1cmVdPVwidHJ1ZVwiXHJcbiAgICA+XHJcbiAgICAgICAgPGZvcm0gY2xhc3M9XCJteC0xXCI+XHJcbiAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidjb21tb24uZmlsdGVyLXByZXNldC1uYW1lJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZpbHRlclByZXNldE5hbWVcIlxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcmVzZXQtY3JlYXRlLXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbiBtdC0yXCIgKGNsaWNrKT1cInNhdmVGaWx0ZXJQcmVzZXQoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7ICdjb21tb24uY3JlYXRlJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZm9ybT5cclxuICAgIDwvdmRyLWRyb3Bkb3duLW1lbnU+XHJcbjwvdmRyLWRyb3Bkb3duPlxyXG4iXX0=
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWZpbHRlci1wcmVzZXQtYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29yZS9zcmMvc2hhcmVkL2NvbXBvbmVudHMvZGF0YS10YWJsZS1maWx0ZXItcHJlc2V0cy9hZGQtZmlsdGVyLXByZXNldC1idXR0b24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb3JlL3NyYy9zaGFyZWQvY29tcG9uZW50cy9kYXRhLXRhYmxlLWZpbHRlci1wcmVzZXRzL2FkZC1maWx0ZXItcHJlc2V0LWJ1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxLQUFLLEVBR0wsU0FBUyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7QUFXdEUsTUFBTSxPQUFPLDhCQUE4QjtJQVF2QyxZQUNZLG1CQUF3QyxFQUN4QyxjQUFpQyxFQUNqQyxLQUFxQjtRQUZyQix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQUNqQyxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQU5qQyxxQkFBZ0IsR0FBRyxJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMvQixhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQU1wQyxDQUFDO0lBRUosUUFBUTtRQUNKLEtBQUssQ0FDRCxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ3pCLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFDOUIsb0JBQW9CLEVBQUUsRUFDdEIsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FDM0IsRUFDRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxFQUN2QyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FDNUIsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxnQkFBZ0I7UUFDWixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDO1FBQ3pDLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLEVBQUU7WUFDdEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN2QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsZ0JBQWdCLENBQUM7Z0JBQ3RDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztnQkFDN0IsSUFBSTtnQkFDSixLQUFLO2FBQ1IsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNuQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxFQUFFLENBQUM7U0FDdkM7UUFDRCxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRU8sMEJBQTBCO1FBQzlCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CO2FBQy9DLGdCQUFnQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7YUFDbEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDO0lBQy9ELENBQUM7OEdBckRRLDhCQUE4QjtrR0FBOUIsOEJBQThCLHdQQ3ZCM0MsNnFDQStCQTs7MkZEUmEsOEJBQThCO2tCQU4xQyxTQUFTOytCQUNJLDhCQUE4QixtQkFHdkIsdUJBQXVCLENBQUMsTUFBTTt1S0FHcEIsV0FBVztzQkFBckMsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBQ0UsT0FBTztzQkFBakMsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBQ08saUJBQWlCO3NCQUFoRCxTQUFTO3VCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICAgIENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgSW5wdXQsXHJcbiAgICBPbkRlc3Ryb3ksXHJcbiAgICBPbkluaXQsXHJcbiAgICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IG1lcmdlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgRGF0YVRhYmxlRmlsdGVyQ29sbGVjdGlvbiB9IGZyb20gJy4uLy4uLy4uL3Byb3ZpZGVycy9kYXRhLXRhYmxlL2RhdGEtdGFibGUtZmlsdGVyLWNvbGxlY3Rpb24nO1xyXG5pbXBvcnQgeyBEcm9wZG93bkNvbXBvbmVudCB9IGZyb20gJy4uL2Ryb3Bkb3duL2Ryb3Bkb3duLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZpbHRlclByZXNldFNlcnZpY2UgfSBmcm9tICcuL2ZpbHRlci1wcmVzZXQuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAndmRyLWFkZC1maWx0ZXItcHJlc2V0LWJ1dHRvbicsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vYWRkLWZpbHRlci1wcmVzZXQtYnV0dG9uLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2FkZC1maWx0ZXItcHJlc2V0LWJ1dHRvbi5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBZGRGaWx0ZXJQcmVzZXRCdXR0b25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBkYXRhVGFibGVJZDogc3RyaW5nO1xyXG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgZmlsdGVyczogRGF0YVRhYmxlRmlsdGVyQ29sbGVjdGlvbjtcclxuICAgIEBWaWV3Q2hpbGQoJ2FkZFByZXNldERyb3Bkb3duJykgYWRkUHJlc2V0RHJvcGRvd246IERyb3Bkb3duQ29tcG9uZW50O1xyXG4gICAgc2VsZWN0ZWRGaWx0ZXJQcmVzZXQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICAgIGZpbHRlclByZXNldE5hbWUgPSBuZXcgRm9ybUNvbnRyb2woJycpO1xyXG4gICAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBmaWx0ZXJQcmVzZXRTZXJ2aWNlOiBGaWx0ZXJQcmVzZXRTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgKSB7fVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIG1lcmdlKFxyXG4gICAgICAgICAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1NYXAucGlwZShcclxuICAgICAgICAgICAgICAgIG1hcChxcG0gPT4gcXBtLmdldCgnZmlsdGVycycpKSxcclxuICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyUHJlc2V0U2VydmljZS5wcmVzZXRDaGFuZ2VzJCxcclxuICAgICAgICAgICAgdGhpcy5maWx0ZXJzLnZhbHVlQ2hhbmdlcyxcclxuICAgICAgICApLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRGaWx0ZXJQcmVzZXQoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuICAgICAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZUZpbHRlclByZXNldCgpIHtcclxuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5maWx0ZXJQcmVzZXROYW1lLnZhbHVlO1xyXG4gICAgICAgIGlmICh0aGlzLmZpbHRlcnMgJiYgbmFtZSkge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZmlsdGVycy5zZXJpYWxpemUoKTtcclxuICAgICAgICAgICAgdGhpcy5maWx0ZXJQcmVzZXRTZXJ2aWNlLnNhdmVGaWx0ZXJQcmVzZXQoe1xyXG4gICAgICAgICAgICAgICAgZGF0YVRhYmxlSWQ6IHRoaXMuZGF0YVRhYmxlSWQsXHJcbiAgICAgICAgICAgICAgICBuYW1lLFxyXG4gICAgICAgICAgICAgICAgdmFsdWUsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmZpbHRlclByZXNldE5hbWUuc2V0VmFsdWUoJycpO1xyXG4gICAgICAgICAgICB0aGlzLmFkZFByZXNldERyb3Bkb3duLnRvZ2dsZU9wZW4oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZEZpbHRlclByZXNldCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlU2VsZWN0ZWRGaWx0ZXJQcmVzZXQoKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlclByZXNldCA9IHRoaXMuZmlsdGVyUHJlc2V0U2VydmljZVxyXG4gICAgICAgICAgICAuZ2V0RmlsdGVyUHJlc2V0cyh0aGlzLmRhdGFUYWJsZUlkKVxyXG4gICAgICAgICAgICAuZmluZChwID0+IHAudmFsdWUgPT09IHRoaXMuZmlsdGVycy5zZXJpYWxpemUoKSk/Lm5hbWU7XHJcbiAgICB9XHJcbn1cclxuIiwiPHZkci1kcm9wZG93biAjYWRkUHJlc2V0RHJvcGRvd24+XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgICAgY2xhc3M9XCJhZGQtcHJlc2V0LWJ1dHRvbiBtdC0xXCJcclxuICAgICAgICB2ZHJEcm9wZG93blRyaWdnZXJcclxuICAgICAgICBbY2xhc3MudmlzaWJsZV09XCJmaWx0ZXJzLmFjdGl2ZUZpbHRlcnMubGVuZ3RoID4gMCAmJiAhc2VsZWN0ZWRGaWx0ZXJQcmVzZXRcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJmaWx0ZXJzLmFjdGl2ZUZpbHRlcnMubGVuZ3RoID09PSAwIHx8ICEhc2VsZWN0ZWRGaWx0ZXJQcmVzZXRcIlxyXG4gICAgPlxyXG4gICAgICAgIDxjbHItaWNvbiBzaGFwZT1cImZsb3BweVwiLz5cclxuICAgICAgICA8ZGl2Pnt7ICdjb21tb24uc2F2ZS1maWx0ZXItcHJlc2V0JyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8dmRyLWRyb3Bkb3duLW1lbnVcclxuICAgICAgICB2ZHJQb3NpdGlvbj1cImJvdHRvbS1sZWZ0XCJcclxuICAgICAgICBbY2RrVHJhcEZvY3VzXT1cInRydWVcIlxyXG4gICAgICAgIFtjZGtUcmFwRm9jdXNBdXRvQ2FwdHVyZV09XCJ0cnVlXCJcclxuICAgID5cclxuICAgICAgICA8Zm9ybSBjbGFzcz1cIm14LTFcIj5cclxuICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2NvbW1vbi5maWx0ZXItcHJlc2V0LW5hbWUnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZmlsdGVyUHJlc2V0TmFtZVwiXHJcbiAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByZXNldC1jcmVhdGUtcm93XCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uIG10LTJcIiAoY2xpY2spPVwic2F2ZUZpbHRlclByZXNldCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgJ2NvbW1vbi5jcmVhdGUnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9mb3JtPlxyXG4gICAgPC92ZHItZHJvcGRvd24tbWVudT5cclxuPC92ZHItZHJvcGRvd24+XHJcbiJdfQ==