@tilde-nlp/ngx-common 6.1.94 → 8.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (646) hide show
  1. package/fesm2022/tilde-nlp-ngx-common.mjs +227 -233
  2. package/fesm2022/tilde-nlp-ngx-common.mjs.map +1 -1
  3. package/index.d.ts +2468 -3
  4. package/package.json +7 -9
  5. package/styles/tilde-theme.scss +2 -1
  6. package/web-components/3rdpartylicenses.txt +22 -22
  7. package/web-components/index.html +2 -2
  8. package/web-components/main.js +26 -15
  9. package/web-components/polyfills.js +3 -3
  10. package/web-components/prerendered-routes.json +3 -0
  11. package/web-components/styles.css +1 -1
  12. package/esm2022/lib/close-button/close-button.component.mjs +0 -53
  13. package/esm2022/lib/close-button/close-button.module.mjs +0 -37
  14. package/esm2022/lib/close-button/index.mjs +0 -3
  15. package/esm2022/lib/company-product/company-product.component.mjs +0 -34
  16. package/esm2022/lib/company-product/company-product.module.mjs +0 -23
  17. package/esm2022/lib/company-product/index.mjs +0 -3
  18. package/esm2022/lib/confirmation-modal/confirmation-modal.component.mjs +0 -78
  19. package/esm2022/lib/confirmation-modal/confirmation-modal.module.mjs +0 -22
  20. package/esm2022/lib/confirmation-modal/index.mjs +0 -6
  21. package/esm2022/lib/confirmation-modal/models/confirmation-body.model.mjs +0 -2
  22. package/esm2022/lib/confirmation-modal/models/confirmation.enum.mjs +0 -6
  23. package/esm2022/lib/confirmation-modal/services/confirmation.service.mjs +0 -25
  24. package/esm2022/lib/confirmation-modal/services/index.mjs +0 -2
  25. package/esm2022/lib/constants/error-codes.const.mjs +0 -5
  26. package/esm2022/lib/constants/index.mjs +0 -4
  27. package/esm2022/lib/constants/last-used-system-local-storage-key.const.mjs +0 -6
  28. package/esm2022/lib/constants/screen-size.const.mjs +0 -11
  29. package/esm2022/lib/core/auth/addon.model.mjs +0 -2
  30. package/esm2022/lib/core/auth/auth-subscription.model.mjs +0 -2
  31. package/esm2022/lib/core/auth/index.mjs +0 -5
  32. package/esm2022/lib/core/auth/jwt-token.model.mjs +0 -2
  33. package/esm2022/lib/core/auth/subscription-plan.enum.mjs +0 -18
  34. package/esm2022/lib/core/index.mjs +0 -4
  35. package/esm2022/lib/core/localization/index.mjs +0 -3
  36. package/esm2022/lib/core/localization/missing-translation-handler.service.mjs +0 -21
  37. package/esm2022/lib/core/localization/select-language-dialog-component/index.mjs +0 -2
  38. package/esm2022/lib/core/localization/select-language-dialog-component/select-language-dialog.component.mjs +0 -109
  39. package/esm2022/lib/core/title-strategy/custom-title-strategy.provider.mjs +0 -9
  40. package/esm2022/lib/core/title-strategy/custom-title-strategy.service.mjs +0 -41
  41. package/esm2022/lib/core/title-strategy/index.mjs +0 -3
  42. package/esm2022/lib/directives/click-outside/click-outside.directive.mjs +0 -31
  43. package/esm2022/lib/directives/click-outside/click-outside.module.mjs +0 -25
  44. package/esm2022/lib/directives/click-outside/index.mjs +0 -3
  45. package/esm2022/lib/directives/drag-and-drop/drag-and-drop.directive.mjs +0 -66
  46. package/esm2022/lib/directives/drag-and-drop/drag-and-drop.module.mjs +0 -25
  47. package/esm2022/lib/directives/drag-and-drop/index.mjs +0 -3
  48. package/esm2022/lib/directives/index.mjs +0 -4
  49. package/esm2022/lib/directives/mat-button-loading/index.mjs +0 -3
  50. package/esm2022/lib/directives/mat-button-loading/mat-button-loading.directive.mjs +0 -65
  51. package/esm2022/lib/directives/mat-button-loading/mat-button-loading.module.mjs +0 -21
  52. package/esm2022/lib/extension-dialog/components/index.mjs +0 -2
  53. package/esm2022/lib/extension-dialog/components/open-extension-dialog/open-extension-dialog.component.mjs +0 -32
  54. package/esm2022/lib/extension-dialog/extension-dialog.component.mjs +0 -231
  55. package/esm2022/lib/extension-dialog/extension-dialog.module.mjs +0 -52
  56. package/esm2022/lib/extension-dialog/icons/file-types/excel.icon.mjs +0 -22
  57. package/esm2022/lib/extension-dialog/icons/file-types/index.mjs +0 -10
  58. package/esm2022/lib/extension-dialog/icons/file-types/interchange.icon.mjs +0 -6
  59. package/esm2022/lib/extension-dialog/icons/file-types/office-other.icon.mjs +0 -6
  60. package/esm2022/lib/extension-dialog/icons/file-types/other.icon.mjs +0 -6
  61. package/esm2022/lib/extension-dialog/icons/file-types/pdf.icon.mjs +0 -12
  62. package/esm2022/lib/extension-dialog/icons/file-types/powerpoint.icon.mjs +0 -10
  63. package/esm2022/lib/extension-dialog/icons/file-types/scanned.icon.mjs +0 -6
  64. package/esm2022/lib/extension-dialog/icons/file-types/web.icon.mjs +0 -6
  65. package/esm2022/lib/extension-dialog/icons/file-types/word.icon.mjs +0 -11
  66. package/esm2022/lib/extension-dialog/icons/index.mjs +0 -2
  67. package/esm2022/lib/extension-dialog/index.mjs +0 -6
  68. package/esm2022/lib/extension-dialog/models/enums/file-categories.enum.mjs +0 -9
  69. package/esm2022/lib/extension-dialog/models/enums/file-extensions.enum.mjs +0 -36
  70. package/esm2022/lib/extension-dialog/models/enums/file-type-icons.enum.mjs +0 -13
  71. package/esm2022/lib/extension-dialog/models/enums/file-types.enum.mjs +0 -13
  72. package/esm2022/lib/extension-dialog/models/enums/index.mjs +0 -5
  73. package/esm2022/lib/extension-dialog/models/index.mjs +0 -3
  74. package/esm2022/lib/extension-dialog/models/interfaces/config.mjs +0 -2
  75. package/esm2022/lib/extension-dialog/models/interfaces/dialog-data.model.mjs +0 -2
  76. package/esm2022/lib/extension-dialog/models/interfaces/index.mjs +0 -3
  77. package/esm2022/lib/extension-dialog/services/extension-dialog.service.mjs +0 -22
  78. package/esm2022/lib/extension-dialog/services/index.mjs +0 -2
  79. package/esm2022/lib/file-upload/file-upload.component.mjs +0 -254
  80. package/esm2022/lib/file-upload/file-upload.module.mjs +0 -51
  81. package/esm2022/lib/file-upload/index.mjs +0 -4
  82. package/esm2022/lib/file-upload/models/file-upload-error-type.enum.mjs +0 -8
  83. package/esm2022/lib/file-upload/models/file-upload-error.model.mjs +0 -2
  84. package/esm2022/lib/file-upload/models/file-upload.icon.mjs +0 -2
  85. package/esm2022/lib/file-upload/models/index.mjs +0 -3
  86. package/esm2022/lib/filter-bar/filter-bar.component.mjs +0 -409
  87. package/esm2022/lib/filter-bar/filter-bar.module.mjs +0 -72
  88. package/esm2022/lib/filter-bar/index.mjs +0 -4
  89. package/esm2022/lib/filter-bar/models/filter-bar-change-event.model.mjs +0 -2
  90. package/esm2022/lib/filter-bar/models/filter-bar-filter-item.model.mjs +0 -2
  91. package/esm2022/lib/filter-bar/models/filter-bar-filter-search.model.mjs +0 -2
  92. package/esm2022/lib/filter-bar/models/filter-bar-filter-single-selection.model.mjs +0 -2
  93. package/esm2022/lib/filter-bar/models/filter-bar-filter.model.mjs +0 -2
  94. package/esm2022/lib/filter-bar/models/filter-bar-settings.model.mjs +0 -2
  95. package/esm2022/lib/filter-bar/models/index.mjs +0 -5
  96. package/esm2022/lib/footer/footer.component.mjs +0 -143
  97. package/esm2022/lib/footer/footer.module.mjs +0 -35
  98. package/esm2022/lib/footer/index.mjs +0 -3
  99. package/esm2022/lib/global-message/global-message.component.mjs +0 -51
  100. package/esm2022/lib/global-message/index.mjs +0 -2
  101. package/esm2022/lib/helpers/auth-headers.helper.mjs +0 -19
  102. package/esm2022/lib/helpers/conversion.helper.mjs +0 -11
  103. package/esm2022/lib/helpers/custom-paginator-internatioinalization.helper.mjs +0 -56
  104. package/esm2022/lib/helpers/file-extension.helper.mjs +0 -6
  105. package/esm2022/lib/helpers/file-size-label.helper.mjs +0 -27
  106. package/esm2022/lib/helpers/hash.helper.mjs +0 -14
  107. package/esm2022/lib/helpers/html-element-parse.helper.mjs +0 -15
  108. package/esm2022/lib/helpers/html.helper.mjs +0 -57
  109. package/esm2022/lib/helpers/index.mjs +0 -13
  110. package/esm2022/lib/helpers/missing-translation.helper.mjs +0 -7
  111. package/esm2022/lib/helpers/resolution.helper.mjs +0 -7
  112. package/esm2022/lib/helpers/save-file.helper.mjs +0 -14
  113. package/esm2022/lib/helpers/sort.helper.mjs +0 -73
  114. package/esm2022/lib/inline-message/index.mjs +0 -4
  115. package/esm2022/lib/inline-message/inline-message.component.mjs +0 -71
  116. package/esm2022/lib/inline-message/inline-message.module.mjs +0 -33
  117. package/esm2022/lib/inline-message/models/index.mjs +0 -4
  118. package/esm2022/lib/inline-message/models/inline-message-icon-position.enum.mjs +0 -6
  119. package/esm2022/lib/inline-message/models/inline-message-type.enum.mjs +0 -7
  120. package/esm2022/lib/inline-message/models/inline-message.model.mjs +0 -2
  121. package/esm2022/lib/llm/components/llm-rephrase/llm-rephrase.component.mjs +0 -48
  122. package/esm2022/lib/llm/components/llm-summary/llm-summary.component.mjs +0 -48
  123. package/esm2022/lib/llm/components/llm-textarea-with-actions/llm-textarea-with-actions.component.mjs +0 -337
  124. package/esm2022/lib/llm/icons/index.mjs +0 -2
  125. package/esm2022/lib/llm/icons/llm-menu.icon.mjs +0 -14
  126. package/esm2022/lib/llm/index.mjs +0 -4
  127. package/esm2022/lib/llm/llm.component.mjs +0 -122
  128. package/esm2022/lib/llm/llm.module.mjs +0 -86
  129. package/esm2022/lib/llm/models/index.mjs +0 -4
  130. package/esm2022/lib/llm/models/llm-actions.enum.mjs +0 -6
  131. package/esm2022/lib/llm/models/llm-configuration.model.mjs +0 -2
  132. package/esm2022/lib/llm/models/llm-configuration.token.mjs +0 -3
  133. package/esm2022/lib/llm/models/llm-data.model.mjs +0 -2
  134. package/esm2022/lib/llm/models/llm-writing-style.enum.mjs +0 -7
  135. package/esm2022/lib/llm/services/llm-helper.service.mjs +0 -102
  136. package/esm2022/lib/llm/shared/llm-textarea/llm-textarea.component.mjs +0 -111
  137. package/esm2022/lib/multi-functional-table/constants/disable-export-attribute-name.const.mjs +0 -2
  138. package/esm2022/lib/multi-functional-table/constants/index.mjs +0 -2
  139. package/esm2022/lib/multi-functional-table/index.mjs +0 -5
  140. package/esm2022/lib/multi-functional-table/models/batch-config.model.mjs +0 -2
  141. package/esm2022/lib/multi-functional-table/models/column-config.model.mjs +0 -2
  142. package/esm2022/lib/multi-functional-table/models/column-select-config.model.mjs +0 -2
  143. package/esm2022/lib/multi-functional-table/models/export-config.model.mjs +0 -2
  144. package/esm2022/lib/multi-functional-table/models/export-format.enum.mjs +0 -5
  145. package/esm2022/lib/multi-functional-table/models/filter-config.model.mjs +0 -2
  146. package/esm2022/lib/multi-functional-table/models/index.mjs +0 -8
  147. package/esm2022/lib/multi-functional-table/models/multi-functional-table-config.model.mjs +0 -2
  148. package/esm2022/lib/multi-functional-table/models/paginator-config.model.mjs +0 -2
  149. package/esm2022/lib/multi-functional-table/models/selected-column-local-storage-config.model.mjs +0 -2
  150. package/esm2022/lib/multi-functional-table/multi-functional-table.component.mjs +0 -691
  151. package/esm2022/lib/multi-functional-table/multi-functional-table.module.mjs +0 -93
  152. package/esm2022/lib/new-feature-dialog/index.mjs +0 -3
  153. package/esm2022/lib/new-feature-dialog/models/index.mjs +0 -2
  154. package/esm2022/lib/new-feature-dialog/models/mobile-screen-custom-position.model.mjs +0 -2
  155. package/esm2022/lib/new-feature-dialog/new-feature-dialog-wrapper/new-feature-dialog-wrapper.component.mjs +0 -105
  156. package/esm2022/lib/new-feature-dialog/new-feature-dialog-wrapper/new-feature-dialog.service.mjs +0 -37
  157. package/esm2022/lib/new-feature-dialog/new-feature-dialog.component.mjs +0 -40
  158. package/esm2022/lib/notification-message/enums/index.mjs +0 -2
  159. package/esm2022/lib/notification-message/enums/notification-message-type.enum.mjs +0 -9
  160. package/esm2022/lib/notification-message/index.mjs +0 -5
  161. package/esm2022/lib/notification-message/interfaces/index.mjs +0 -2
  162. package/esm2022/lib/notification-message/interfaces/notification-message.model.mjs +0 -2
  163. package/esm2022/lib/notification-message/notification-message.component.mjs +0 -195
  164. package/esm2022/lib/notification-message/notification-message.module.mjs +0 -49
  165. package/esm2022/lib/open-close-button/index.mjs +0 -5
  166. package/esm2022/lib/open-close-button/injection-tokens/index.mjs +0 -2
  167. package/esm2022/lib/open-close-button/injection-tokens/open-close-btn-icons.token.mjs +0 -2
  168. package/esm2022/lib/open-close-button/models/index.mjs +0 -2
  169. package/esm2022/lib/open-close-button/models/open-close-btn-icons.model.mjs +0 -2
  170. package/esm2022/lib/open-close-button/open-close-button.component.mjs +0 -114
  171. package/esm2022/lib/open-close-button/open-close-button.module.mjs +0 -22
  172. package/esm2022/lib/pipes/date-ago/date-ago.module.mjs +0 -29
  173. package/esm2022/lib/pipes/date-ago/date-ago.pipe.mjs +0 -114
  174. package/esm2022/lib/pipes/date-ago/index.mjs +0 -3
  175. package/esm2022/lib/pipes/date-ago/models/date-ago-interval.model.mjs +0 -2
  176. package/esm2022/lib/pipes/date-ago/models/date-ago-settings.model.mjs +0 -2
  177. package/esm2022/lib/pipes/date-ago/models/date-ago-settings.token.mjs +0 -2
  178. package/esm2022/lib/pipes/date-ago/models/date-ago.model.mjs +0 -2
  179. package/esm2022/lib/pipes/date-ago/models/index.mjs +0 -5
  180. package/esm2022/lib/pipes/domain-translate/domain-translate.pipe.mjs +0 -30
  181. package/esm2022/lib/pipes/domain-translate/index.mjs +0 -2
  182. package/esm2022/lib/pipes/file-size-label/enums/file-size-unit.enum.mjs +0 -8
  183. package/esm2022/lib/pipes/file-size-label/enums/index.mjs +0 -2
  184. package/esm2022/lib/pipes/file-size-label/file-size-label.pipe.mjs +0 -22
  185. package/esm2022/lib/pipes/file-size-label/index.mjs +0 -3
  186. package/esm2022/lib/pipes/filter-with-highlight/filter-with-highlight.module.mjs +0 -25
  187. package/esm2022/lib/pipes/filter-with-highlight/filter-with-highlight.pipe.mjs +0 -43
  188. package/esm2022/lib/pipes/filter-with-highlight/index.mjs +0 -3
  189. package/esm2022/lib/pipes/index.mjs +0 -13
  190. package/esm2022/lib/pipes/language-translate/index.mjs +0 -3
  191. package/esm2022/lib/pipes/language-translate/language-translate.module.mjs +0 -19
  192. package/esm2022/lib/pipes/language-translate/language-translate.pipe.mjs +0 -126
  193. package/esm2022/lib/pipes/object-length/index.mjs +0 -3
  194. package/esm2022/lib/pipes/object-length/object-length.module.mjs +0 -19
  195. package/esm2022/lib/pipes/object-length/object-length.pipe.mjs +0 -23
  196. package/esm2022/lib/pipes/sort-alphabetically/index.mjs +0 -3
  197. package/esm2022/lib/pipes/sort-alphabetically/sort-alphabetically.module.mjs +0 -19
  198. package/esm2022/lib/pipes/sort-alphabetically/sort-alphabetically.pipe.mjs +0 -21
  199. package/esm2022/lib/pipes/sort-by-number/index.mjs +0 -2
  200. package/esm2022/lib/pipes/sort-by-number/sort-by-number.pipe.mjs +0 -23
  201. package/esm2022/lib/pipes/sort-domains/index.mjs +0 -2
  202. package/esm2022/lib/pipes/sort-domains/sort-domains.pipe.mjs +0 -51
  203. package/esm2022/lib/pipes/sort-language-list/index.mjs +0 -3
  204. package/esm2022/lib/pipes/sort-language-list/models/index.mjs +0 -2
  205. package/esm2022/lib/pipes/sort-language-list/models/translated-language.model.mjs +0 -2
  206. package/esm2022/lib/pipes/sort-language-list/sort-language-list.pipe.mjs +0 -58
  207. package/esm2022/lib/pipes/sort-translations/index.mjs +0 -3
  208. package/esm2022/lib/pipes/sort-translations/sort-translations.module.mjs +0 -23
  209. package/esm2022/lib/pipes/sort-translations/sort-translations.pipe.mjs +0 -60
  210. package/esm2022/lib/pipes/sort-translations-by-property/index.mjs +0 -3
  211. package/esm2022/lib/pipes/sort-translations-by-property/sort-translations-by-property.module.mjs +0 -19
  212. package/esm2022/lib/pipes/sort-translations-by-property/sort-translations-by-property.pipe.mjs +0 -43
  213. package/esm2022/lib/plausible/index.mjs +0 -5
  214. package/esm2022/lib/plausible/models/index.mjs +0 -2
  215. package/esm2022/lib/plausible/models/plausible-event.model.mjs +0 -2
  216. package/esm2022/lib/plausible/plausible-event.directive.mjs +0 -42
  217. package/esm2022/lib/plausible/plausible.helper.mjs +0 -37
  218. package/esm2022/lib/plausible/plausible.module.mjs +0 -25
  219. package/esm2022/lib/services/alert/alert.service.mjs +0 -172
  220. package/esm2022/lib/services/alert/index.mjs +0 -4
  221. package/esm2022/lib/services/alert/injection-tokens/alert-configuration.token.mjs +0 -2
  222. package/esm2022/lib/services/alert/injection-tokens/index.mjs +0 -2
  223. package/esm2022/lib/services/alert/models/alert-configuration.model.mjs +0 -2
  224. package/esm2022/lib/services/alert/models/index.mjs +0 -2
  225. package/esm2022/lib/services/dom/dom.service.mjs +0 -21
  226. package/esm2022/lib/services/dom/index.mjs +0 -2
  227. package/esm2022/lib/services/icon/icon.service.mjs +0 -35
  228. package/esm2022/lib/services/icon/index.mjs +0 -2
  229. package/esm2022/lib/services/index.mjs +0 -7
  230. package/esm2022/lib/services/language-translate/index.mjs +0 -2
  231. package/esm2022/lib/services/language-translate/language-translate.service.mjs +0 -25
  232. package/esm2022/lib/services/notification/index.mjs +0 -3
  233. package/esm2022/lib/services/notification/models/index.mjs +0 -3
  234. package/esm2022/lib/services/notification/models/notification.model.mjs +0 -2
  235. package/esm2022/lib/services/notification/models/operations.enum.mjs +0 -6
  236. package/esm2022/lib/services/notification/notification.service.mjs +0 -35
  237. package/esm2022/lib/services/system/index.mjs +0 -2
  238. package/esm2022/lib/services/system/system.service.mjs +0 -20
  239. package/esm2022/lib/sidebar/index.mjs +0 -3
  240. package/esm2022/lib/sidebar/services/index.mjs +0 -2
  241. package/esm2022/lib/sidebar/services/sidebar.service.mjs +0 -24
  242. package/esm2022/lib/sidebar/sidebar.component.mjs +0 -30
  243. package/esm2022/lib/status-display/index.mjs +0 -4
  244. package/esm2022/lib/status-display/models/index.mjs +0 -2
  245. package/esm2022/lib/status-display/models/status-display-config.model.mjs +0 -2
  246. package/esm2022/lib/status-display/status-display.component.mjs +0 -71
  247. package/esm2022/lib/status-display/status-display.module.mjs +0 -22
  248. package/esm2022/lib/subscription/chargebee-mount.service.mjs +0 -16
  249. package/esm2022/lib/subscription/index.mjs +0 -3
  250. package/esm2022/lib/subscription/models/chargebee-settings.model.mjs +0 -2
  251. package/esm2022/lib/subscription/models/index.mjs +0 -2
  252. package/esm2022/lib/subscription/models/subscription-quota-display.model.mjs +0 -2
  253. package/esm2022/lib/subscription/models/subscription-state.enum.mjs +0 -8
  254. package/esm2022/lib/subscription/subscription.component.mjs +0 -392
  255. package/esm2022/lib/terminology/components/terminology-panel/terminology-collection-list/terminology-collection-card/terminology-collection-card.component.mjs +0 -279
  256. package/esm2022/lib/terminology/components/terminology-panel/terminology-collection-list/terminology-collection-list.component.mjs +0 -161
  257. package/esm2022/lib/terminology/components/terminology-panel/terminology-create-collection/terminology-create-collection-dialog/terminology-create-collection-dialog.component.mjs +0 -121
  258. package/esm2022/lib/terminology/components/terminology-panel/terminology-create-collection/terminology-create-collection.component.mjs +0 -72
  259. package/esm2022/lib/terminology/components/terminology-panel/terminology-panel.component.mjs +0 -151
  260. package/esm2022/lib/terminology/config/models/index.mjs +0 -2
  261. package/esm2022/lib/terminology/config/models/terminology-config.model.mjs +0 -2
  262. package/esm2022/lib/terminology/config/services/index.mjs +0 -2
  263. package/esm2022/lib/terminology/config/services/terminology-config/terminology-config.service.mjs +0 -47
  264. package/esm2022/lib/terminology/enums/combined-collection-tooltip-key.enum.mjs +0 -6
  265. package/esm2022/lib/terminology/enums/engine-term-collection-scope.enum.mjs +0 -6
  266. package/esm2022/lib/terminology/enums/engine-term-collection-source.enum.mjs +0 -6
  267. package/esm2022/lib/terminology/enums/engine-term-collection-status.enum.mjs +0 -8
  268. package/esm2022/lib/terminology/enums/engine-term-collection-sub-status.enum.mjs +0 -14
  269. package/esm2022/lib/terminology/enums/index.mjs +0 -7
  270. package/esm2022/lib/terminology/enums/mt-collection-status.enum.mjs +0 -11
  271. package/esm2022/lib/terminology/icons/collections-menu.icon.mjs +0 -18
  272. package/esm2022/lib/terminology/icons/index.mjs +0 -2
  273. package/esm2022/lib/terminology/index.mjs +0 -10
  274. package/esm2022/lib/terminology/models/active-data.model.mjs +0 -2
  275. package/esm2022/lib/terminology/models/add-engine-terms-request-params.model.mjs +0 -2
  276. package/esm2022/lib/terminology/models/combined-collection.model.mjs +0 -181
  277. package/esm2022/lib/terminology/models/default-term-collection-order-update.model.mjs +0 -2
  278. package/esm2022/lib/terminology/models/domain.model.mjs +0 -2
  279. package/esm2022/lib/terminology/models/engine-term-collection-access-scope-update.model.mjs +0 -2
  280. package/esm2022/lib/terminology/models/engine-term-collection-access-scope.model.mjs +0 -2
  281. package/esm2022/lib/terminology/models/engine-term-collection-access-update.model.mjs +0 -2
  282. package/esm2022/lib/terminology/models/engine-term-collection-access.model.mjs +0 -2
  283. package/esm2022/lib/terminology/models/engine-term-collection-list.model.mjs +0 -2
  284. package/esm2022/lib/terminology/models/engine-term-collection.model.mjs +0 -2
  285. package/esm2022/lib/terminology/models/index.mjs +0 -19
  286. package/esm2022/lib/terminology/models/lang-list-item.model.mjs +0 -2
  287. package/esm2022/lib/terminology/models/mt-collection.model.mjs +0 -2
  288. package/esm2022/lib/terminology/models/system.model.mjs +0 -2
  289. package/esm2022/lib/terminology/models/terminology-engine.model.mjs +0 -2
  290. package/esm2022/lib/terminology/models/tld-term-collection-languages.model.mjs +0 -2
  291. package/esm2022/lib/terminology/models/tld-term-collection.model.mjs +0 -2
  292. package/esm2022/lib/terminology/models/update-engine-terms-request-params.model.mjs +0 -2
  293. package/esm2022/lib/terminology/models/vendor.model.mjs +0 -2
  294. package/esm2022/lib/terminology/services/engine-term-api/engine-term-api.service.mjs +0 -48
  295. package/esm2022/lib/terminology/services/engine-term-api/index.mjs +0 -2
  296. package/esm2022/lib/terminology/services/index.mjs +0 -5
  297. package/esm2022/lib/terminology/services/system-api-v2/models/engine-deployment.model.mjs +0 -2
  298. package/esm2022/lib/terminology/services/system-api-v2/models/engine-domain-list.model.mjs +0 -2
  299. package/esm2022/lib/terminology/services/system-api-v2/models/engine-domain.model.mjs +0 -2
  300. package/esm2022/lib/terminology/services/system-api-v2/models/engine-list.model.mjs +0 -2
  301. package/esm2022/lib/terminology/services/system-api-v2/models/engine-status.enum.mjs +0 -11
  302. package/esm2022/lib/terminology/services/system-api-v2/models/engine-sub-status.enum.mjs +0 -18
  303. package/esm2022/lib/terminology/services/system-api-v2/models/engine.model.mjs +0 -2
  304. package/esm2022/lib/terminology/services/system-api-v2/models/index.mjs +0 -9
  305. package/esm2022/lib/terminology/services/system-api-v2/models/revision.model.mjs +0 -2
  306. package/esm2022/lib/terminology/services/system-api-v2/models/tilde-vendor.const.mjs +0 -2
  307. package/esm2022/lib/terminology/services/system-api-v2/models/worker-status.model.mjs +0 -2
  308. package/esm2022/lib/terminology/services/system-api-v2/system-api.service.mjs +0 -109
  309. package/esm2022/lib/terminology/services/terminology/terminology.service.mjs +0 -323
  310. package/esm2022/lib/terminology/services/terminology-api/terminology-api.service.mjs +0 -86
  311. package/esm2022/lib/terminology/services/terminology-collection/index.mjs +0 -2
  312. package/esm2022/lib/terminology/services/terminology-collection/terminology-collection.service.mjs +0 -54
  313. package/esm2022/lib/terminology/terminology.component.mjs +0 -241
  314. package/esm2022/lib/terminology/terminology.module.mjs +0 -102
  315. package/esm2022/lib/text-to-speech/index.mjs +0 -3
  316. package/esm2022/lib/text-to-speech/models/index.mjs +0 -2
  317. package/esm2022/lib/text-to-speech/models/voice.model.mjs +0 -2
  318. package/esm2022/lib/text-to-speech/services/tts-api.service.mjs +0 -18
  319. package/esm2022/lib/text-to-speech/text-to-speech.component.mjs +0 -172
  320. package/esm2022/lib/tld-loader/index.mjs +0 -3
  321. package/esm2022/lib/tld-loader/tld-loader.component.mjs +0 -16
  322. package/esm2022/lib/tld-loader/tld-loader.module.mjs +0 -21
  323. package/esm2022/lib/toast/index.mjs +0 -3
  324. package/esm2022/lib/toast/models/toast.model.mjs +0 -2
  325. package/esm2022/lib/toast/toast-service/index.mjs +0 -2
  326. package/esm2022/lib/toast/toast-service/toast-service.service.mjs +0 -42
  327. package/esm2022/lib/toast/toast.component.mjs +0 -57
  328. package/esm2022/public-api.mjs +0 -32
  329. package/esm2022/tilde-nlp-ngx-common.mjs +0 -5
  330. package/lib/close-button/close-button.component.d.ts +0 -13
  331. package/lib/close-button/close-button.module.d.ts +0 -11
  332. package/lib/close-button/index.d.ts +0 -2
  333. package/lib/company-product/company-product.component.d.ts +0 -7
  334. package/lib/company-product/company-product.module.d.ts +0 -8
  335. package/lib/company-product/index.d.ts +0 -2
  336. package/lib/confirmation-modal/confirmation-modal.component.d.ts +0 -12
  337. package/lib/confirmation-modal/confirmation-modal.module.d.ts +0 -11
  338. package/lib/confirmation-modal/index.d.ts +0 -5
  339. package/lib/confirmation-modal/models/confirmation-body.model.d.ts +0 -8
  340. package/lib/confirmation-modal/models/confirmation.enum.d.ts +0 -4
  341. package/lib/confirmation-modal/services/confirmation.service.d.ts +0 -12
  342. package/lib/confirmation-modal/services/index.d.ts +0 -1
  343. package/lib/constants/error-codes.const.d.ts +0 -3
  344. package/lib/constants/index.d.ts +0 -3
  345. package/lib/constants/last-used-system-local-storage-key.const.d.ts +0 -5
  346. package/lib/constants/screen-size.const.d.ts +0 -10
  347. package/lib/core/auth/addon.model.d.ts +0 -4
  348. package/lib/core/auth/auth-subscription.model.d.ts +0 -12
  349. package/lib/core/auth/index.d.ts +0 -4
  350. package/lib/core/auth/jwt-token.model.d.ts +0 -30
  351. package/lib/core/auth/subscription-plan.enum.d.ts +0 -16
  352. package/lib/core/index.d.ts +0 -3
  353. package/lib/core/localization/index.d.ts +0 -2
  354. package/lib/core/localization/missing-translation-handler.service.d.ts +0 -8
  355. package/lib/core/localization/select-language-dialog-component/index.d.ts +0 -1
  356. package/lib/core/localization/select-language-dialog-component/select-language-dialog.component.d.ts +0 -15
  357. package/lib/core/title-strategy/custom-title-strategy.provider.d.ts +0 -2
  358. package/lib/core/title-strategy/custom-title-strategy.service.d.ts +0 -14
  359. package/lib/core/title-strategy/index.d.ts +0 -2
  360. package/lib/directives/click-outside/click-outside.directive.d.ts +0 -10
  361. package/lib/directives/click-outside/click-outside.module.d.ts +0 -8
  362. package/lib/directives/click-outside/index.d.ts +0 -2
  363. package/lib/directives/drag-and-drop/drag-and-drop.directive.d.ts +0 -14
  364. package/lib/directives/drag-and-drop/drag-and-drop.module.d.ts +0 -8
  365. package/lib/directives/drag-and-drop/index.d.ts +0 -2
  366. package/lib/directives/index.d.ts +0 -3
  367. package/lib/directives/mat-button-loading/index.d.ts +0 -2
  368. package/lib/directives/mat-button-loading/mat-button-loading.directive.d.ts +0 -18
  369. package/lib/directives/mat-button-loading/mat-button-loading.module.d.ts +0 -8
  370. package/lib/extension-dialog/components/index.d.ts +0 -1
  371. package/lib/extension-dialog/components/open-extension-dialog/open-extension-dialog.component.d.ts +0 -10
  372. package/lib/extension-dialog/extension-dialog.component.d.ts +0 -21
  373. package/lib/extension-dialog/extension-dialog.module.d.ts +0 -15
  374. package/lib/extension-dialog/icons/file-types/excel.icon.d.ts +0 -1
  375. package/lib/extension-dialog/icons/file-types/index.d.ts +0 -9
  376. package/lib/extension-dialog/icons/file-types/interchange.icon.d.ts +0 -1
  377. package/lib/extension-dialog/icons/file-types/office-other.icon.d.ts +0 -1
  378. package/lib/extension-dialog/icons/file-types/other.icon.d.ts +0 -1
  379. package/lib/extension-dialog/icons/file-types/pdf.icon.d.ts +0 -1
  380. package/lib/extension-dialog/icons/file-types/powerpoint.icon.d.ts +0 -1
  381. package/lib/extension-dialog/icons/file-types/scanned.icon.d.ts +0 -1
  382. package/lib/extension-dialog/icons/file-types/web.icon.d.ts +0 -1
  383. package/lib/extension-dialog/icons/file-types/word.icon.d.ts +0 -1
  384. package/lib/extension-dialog/icons/index.d.ts +0 -1
  385. package/lib/extension-dialog/index.d.ts +0 -5
  386. package/lib/extension-dialog/models/enums/file-categories.enum.d.ts +0 -7
  387. package/lib/extension-dialog/models/enums/file-extensions.enum.d.ts +0 -34
  388. package/lib/extension-dialog/models/enums/file-type-icons.enum.d.ts +0 -11
  389. package/lib/extension-dialog/models/enums/file-types.enum.d.ts +0 -11
  390. package/lib/extension-dialog/models/enums/index.d.ts +0 -4
  391. package/lib/extension-dialog/models/index.d.ts +0 -2
  392. package/lib/extension-dialog/models/interfaces/config.d.ts +0 -18
  393. package/lib/extension-dialog/models/interfaces/dialog-data.model.d.ts +0 -3
  394. package/lib/extension-dialog/models/interfaces/index.d.ts +0 -2
  395. package/lib/extension-dialog/services/extension-dialog.service.d.ts +0 -9
  396. package/lib/extension-dialog/services/index.d.ts +0 -1
  397. package/lib/file-upload/file-upload.component.d.ts +0 -39
  398. package/lib/file-upload/file-upload.module.d.ts +0 -15
  399. package/lib/file-upload/index.d.ts +0 -3
  400. package/lib/file-upload/models/file-upload-error-type.enum.d.ts +0 -6
  401. package/lib/file-upload/models/file-upload-error.model.d.ts +0 -7
  402. package/lib/file-upload/models/file-upload.icon.d.ts +0 -1
  403. package/lib/file-upload/models/index.d.ts +0 -2
  404. package/lib/filter-bar/filter-bar.component.d.ts +0 -54
  405. package/lib/filter-bar/filter-bar.module.d.ts +0 -19
  406. package/lib/filter-bar/index.d.ts +0 -3
  407. package/lib/filter-bar/models/filter-bar-change-event.model.d.ts +0 -6
  408. package/lib/filter-bar/models/filter-bar-filter-item.model.d.ts +0 -11
  409. package/lib/filter-bar/models/filter-bar-filter-search.model.d.ts +0 -10
  410. package/lib/filter-bar/models/filter-bar-filter-single-selection.model.d.ts +0 -13
  411. package/lib/filter-bar/models/filter-bar-filter.model.d.ts +0 -24
  412. package/lib/filter-bar/models/filter-bar-settings.model.d.ts +0 -20
  413. package/lib/filter-bar/models/index.d.ts +0 -4
  414. package/lib/footer/footer.component.d.ts +0 -15
  415. package/lib/footer/footer.module.d.ts +0 -11
  416. package/lib/footer/index.d.ts +0 -2
  417. package/lib/global-message/global-message.component.d.ts +0 -10
  418. package/lib/global-message/index.d.ts +0 -1
  419. package/lib/helpers/auth-headers.helper.d.ts +0 -4
  420. package/lib/helpers/conversion.helper.d.ts +0 -4
  421. package/lib/helpers/custom-paginator-internatioinalization.helper.d.ts +0 -9
  422. package/lib/helpers/file-extension.helper.d.ts +0 -3
  423. package/lib/helpers/file-size-label.helper.d.ts +0 -2
  424. package/lib/helpers/hash.helper.d.ts +0 -3
  425. package/lib/helpers/html-element-parse.helper.d.ts +0 -3
  426. package/lib/helpers/html.helper.d.ts +0 -18
  427. package/lib/helpers/index.d.ts +0 -12
  428. package/lib/helpers/missing-translation.helper.d.ts +0 -4
  429. package/lib/helpers/resolution.helper.d.ts +0 -3
  430. package/lib/helpers/save-file.helper.d.ts +0 -4
  431. package/lib/helpers/sort.helper.d.ts +0 -32
  432. package/lib/inline-message/index.d.ts +0 -3
  433. package/lib/inline-message/inline-message.component.d.ts +0 -10
  434. package/lib/inline-message/inline-message.module.d.ts +0 -10
  435. package/lib/inline-message/models/index.d.ts +0 -3
  436. package/lib/inline-message/models/inline-message-icon-position.enum.d.ts +0 -4
  437. package/lib/inline-message/models/inline-message-type.enum.d.ts +0 -5
  438. package/lib/inline-message/models/inline-message.model.d.ts +0 -10
  439. package/lib/llm/components/llm-rephrase/llm-rephrase.component.d.ts +0 -11
  440. package/lib/llm/components/llm-summary/llm-summary.component.d.ts +0 -11
  441. package/lib/llm/components/llm-textarea-with-actions/llm-textarea-with-actions.component.d.ts +0 -61
  442. package/lib/llm/icons/index.d.ts +0 -1
  443. package/lib/llm/icons/llm-menu.icon.d.ts +0 -2
  444. package/lib/llm/index.d.ts +0 -3
  445. package/lib/llm/llm.component.d.ts +0 -30
  446. package/lib/llm/llm.module.d.ts +0 -24
  447. package/lib/llm/models/index.d.ts +0 -3
  448. package/lib/llm/models/llm-actions.enum.d.ts +0 -4
  449. package/lib/llm/models/llm-configuration.model.d.ts +0 -6
  450. package/lib/llm/models/llm-configuration.token.d.ts +0 -3
  451. package/lib/llm/models/llm-data.model.d.ts +0 -12
  452. package/lib/llm/models/llm-writing-style.enum.d.ts +0 -5
  453. package/lib/llm/services/llm-helper.service.d.ts +0 -23
  454. package/lib/llm/shared/llm-textarea/llm-textarea.component.d.ts +0 -25
  455. package/lib/multi-functional-table/constants/disable-export-attribute-name.const.d.ts +0 -1
  456. package/lib/multi-functional-table/constants/index.d.ts +0 -1
  457. package/lib/multi-functional-table/index.d.ts +0 -4
  458. package/lib/multi-functional-table/models/batch-config.model.d.ts +0 -4
  459. package/lib/multi-functional-table/models/column-config.model.d.ts +0 -18
  460. package/lib/multi-functional-table/models/column-select-config.model.d.ts +0 -14
  461. package/lib/multi-functional-table/models/export-config.model.d.ts +0 -9
  462. package/lib/multi-functional-table/models/export-format.enum.d.ts +0 -3
  463. package/lib/multi-functional-table/models/filter-config.model.d.ts +0 -7
  464. package/lib/multi-functional-table/models/index.d.ts +0 -7
  465. package/lib/multi-functional-table/models/multi-functional-table-config.model.d.ts +0 -53
  466. package/lib/multi-functional-table/models/paginator-config.model.d.ts +0 -8
  467. package/lib/multi-functional-table/models/selected-column-local-storage-config.model.d.ts +0 -20
  468. package/lib/multi-functional-table/multi-functional-table.component.d.ts +0 -116
  469. package/lib/multi-functional-table/multi-functional-table.module.d.ts +0 -22
  470. package/lib/new-feature-dialog/index.d.ts +0 -2
  471. package/lib/new-feature-dialog/models/index.d.ts +0 -1
  472. package/lib/new-feature-dialog/models/mobile-screen-custom-position.model.d.ts +0 -5
  473. package/lib/new-feature-dialog/new-feature-dialog-wrapper/new-feature-dialog-wrapper.component.d.ts +0 -26
  474. package/lib/new-feature-dialog/new-feature-dialog-wrapper/new-feature-dialog.service.d.ts +0 -10
  475. package/lib/new-feature-dialog/new-feature-dialog.component.d.ts +0 -6
  476. package/lib/notification-message/enums/index.d.ts +0 -1
  477. package/lib/notification-message/enums/notification-message-type.enum.d.ts +0 -7
  478. package/lib/notification-message/index.d.ts +0 -4
  479. package/lib/notification-message/interfaces/index.d.ts +0 -1
  480. package/lib/notification-message/interfaces/notification-message.model.d.ts +0 -28
  481. package/lib/notification-message/notification-message.component.d.ts +0 -22
  482. package/lib/notification-message/notification-message.module.d.ts +0 -14
  483. package/lib/open-close-button/index.d.ts +0 -4
  484. package/lib/open-close-button/injection-tokens/index.d.ts +0 -1
  485. package/lib/open-close-button/injection-tokens/open-close-btn-icons.token.d.ts +0 -1
  486. package/lib/open-close-button/models/index.d.ts +0 -1
  487. package/lib/open-close-button/models/open-close-btn-icons.model.d.ts +0 -4
  488. package/lib/open-close-button/open-close-button.component.d.ts +0 -22
  489. package/lib/open-close-button/open-close-button.module.d.ts +0 -11
  490. package/lib/pipes/date-ago/date-ago.module.d.ts +0 -9
  491. package/lib/pipes/date-ago/date-ago.pipe.d.ts +0 -20
  492. package/lib/pipes/date-ago/index.d.ts +0 -2
  493. package/lib/pipes/date-ago/models/date-ago-interval.model.d.ts +0 -5
  494. package/lib/pipes/date-ago/models/date-ago-settings.model.d.ts +0 -26
  495. package/lib/pipes/date-ago/models/date-ago-settings.token.d.ts +0 -1
  496. package/lib/pipes/date-ago/models/date-ago.model.d.ts +0 -4
  497. package/lib/pipes/date-ago/models/index.d.ts +0 -4
  498. package/lib/pipes/domain-translate/domain-translate.pipe.d.ts +0 -10
  499. package/lib/pipes/domain-translate/index.d.ts +0 -1
  500. package/lib/pipes/file-size-label/enums/file-size-unit.enum.d.ts +0 -6
  501. package/lib/pipes/file-size-label/enums/index.d.ts +0 -1
  502. package/lib/pipes/file-size-label/file-size-label.pipe.d.ts +0 -8
  503. package/lib/pipes/file-size-label/index.d.ts +0 -2
  504. package/lib/pipes/filter-with-highlight/filter-with-highlight.module.d.ts +0 -8
  505. package/lib/pipes/filter-with-highlight/filter-with-highlight.pipe.d.ts +0 -7
  506. package/lib/pipes/filter-with-highlight/index.d.ts +0 -2
  507. package/lib/pipes/index.d.ts +0 -12
  508. package/lib/pipes/language-translate/index.d.ts +0 -2
  509. package/lib/pipes/language-translate/language-translate.module.d.ts +0 -8
  510. package/lib/pipes/language-translate/language-translate.pipe.d.ts +0 -21
  511. package/lib/pipes/object-length/index.d.ts +0 -2
  512. package/lib/pipes/object-length/object-length.module.d.ts +0 -8
  513. package/lib/pipes/object-length/object-length.pipe.d.ts +0 -7
  514. package/lib/pipes/sort-alphabetically/index.d.ts +0 -2
  515. package/lib/pipes/sort-alphabetically/sort-alphabetically.module.d.ts +0 -8
  516. package/lib/pipes/sort-alphabetically/sort-alphabetically.pipe.d.ts +0 -7
  517. package/lib/pipes/sort-by-number/index.d.ts +0 -1
  518. package/lib/pipes/sort-by-number/sort-by-number.pipe.d.ts +0 -7
  519. package/lib/pipes/sort-domains/index.d.ts +0 -1
  520. package/lib/pipes/sort-domains/sort-domains.pipe.d.ts +0 -15
  521. package/lib/pipes/sort-language-list/index.d.ts +0 -2
  522. package/lib/pipes/sort-language-list/models/index.d.ts +0 -1
  523. package/lib/pipes/sort-language-list/models/translated-language.model.d.ts +0 -4
  524. package/lib/pipes/sort-language-list/sort-language-list.pipe.d.ts +0 -10
  525. package/lib/pipes/sort-translations/index.d.ts +0 -2
  526. package/lib/pipes/sort-translations/sort-translations.module.d.ts +0 -8
  527. package/lib/pipes/sort-translations/sort-translations.pipe.d.ts +0 -20
  528. package/lib/pipes/sort-translations-by-property/index.d.ts +0 -2
  529. package/lib/pipes/sort-translations-by-property/sort-translations-by-property.module.d.ts +0 -8
  530. package/lib/pipes/sort-translations-by-property/sort-translations-by-property.pipe.d.ts +0 -16
  531. package/lib/plausible/index.d.ts +0 -4
  532. package/lib/plausible/models/index.d.ts +0 -1
  533. package/lib/plausible/models/plausible-event.model.d.ts +0 -7
  534. package/lib/plausible/plausible-event.directive.d.ts +0 -11
  535. package/lib/plausible/plausible.helper.d.ts +0 -15
  536. package/lib/plausible/plausible.module.d.ts +0 -8
  537. package/lib/services/alert/alert.service.d.ts +0 -37
  538. package/lib/services/alert/index.d.ts +0 -3
  539. package/lib/services/alert/injection-tokens/alert-configuration.token.d.ts +0 -1
  540. package/lib/services/alert/injection-tokens/index.d.ts +0 -1
  541. package/lib/services/alert/models/alert-configuration.model.d.ts +0 -7
  542. package/lib/services/alert/models/index.d.ts +0 -1
  543. package/lib/services/dom/dom.service.d.ts +0 -7
  544. package/lib/services/dom/index.d.ts +0 -1
  545. package/lib/services/icon/icon.service.d.ts +0 -14
  546. package/lib/services/icon/index.d.ts +0 -1
  547. package/lib/services/index.d.ts +0 -6
  548. package/lib/services/language-translate/index.d.ts +0 -1
  549. package/lib/services/language-translate/language-translate.service.d.ts +0 -10
  550. package/lib/services/notification/index.d.ts +0 -2
  551. package/lib/services/notification/models/index.d.ts +0 -2
  552. package/lib/services/notification/models/notification.model.d.ts +0 -6
  553. package/lib/services/notification/models/operations.enum.d.ts +0 -4
  554. package/lib/services/notification/notification.service.d.ts +0 -15
  555. package/lib/services/system/index.d.ts +0 -1
  556. package/lib/services/system/system.service.d.ts +0 -11
  557. package/lib/sidebar/index.d.ts +0 -2
  558. package/lib/sidebar/services/index.d.ts +0 -1
  559. package/lib/sidebar/services/sidebar.service.d.ts +0 -10
  560. package/lib/sidebar/sidebar.component.d.ts +0 -8
  561. package/lib/status-display/index.d.ts +0 -3
  562. package/lib/status-display/models/index.d.ts +0 -1
  563. package/lib/status-display/models/status-display-config.model.d.ts +0 -15
  564. package/lib/status-display/status-display.component.d.ts +0 -7
  565. package/lib/status-display/status-display.module.d.ts +0 -11
  566. package/lib/subscription/chargebee-mount.service.d.ts +0 -6
  567. package/lib/subscription/index.d.ts +0 -2
  568. package/lib/subscription/models/chargebee-settings.model.d.ts +0 -4
  569. package/lib/subscription/models/index.d.ts +0 -1
  570. package/lib/subscription/models/subscription-quota-display.model.d.ts +0 -9
  571. package/lib/subscription/models/subscription-state.enum.d.ts +0 -6
  572. package/lib/subscription/subscription.component.d.ts +0 -30
  573. package/lib/terminology/components/terminology-panel/terminology-collection-list/terminology-collection-card/terminology-collection-card.component.d.ts +0 -28
  574. package/lib/terminology/components/terminology-panel/terminology-collection-list/terminology-collection-list.component.d.ts +0 -30
  575. package/lib/terminology/components/terminology-panel/terminology-create-collection/terminology-create-collection-dialog/terminology-create-collection-dialog.component.d.ts +0 -32
  576. package/lib/terminology/components/terminology-panel/terminology-create-collection/terminology-create-collection.component.d.ts +0 -20
  577. package/lib/terminology/components/terminology-panel/terminology-panel.component.d.ts +0 -37
  578. package/lib/terminology/config/models/index.d.ts +0 -1
  579. package/lib/terminology/config/models/terminology-config.model.d.ts +0 -45
  580. package/lib/terminology/config/services/index.d.ts +0 -1
  581. package/lib/terminology/config/services/terminology-config/terminology-config.service.d.ts +0 -10
  582. package/lib/terminology/enums/combined-collection-tooltip-key.enum.d.ts +0 -4
  583. package/lib/terminology/enums/engine-term-collection-scope.enum.d.ts +0 -4
  584. package/lib/terminology/enums/engine-term-collection-source.enum.d.ts +0 -4
  585. package/lib/terminology/enums/engine-term-collection-status.enum.d.ts +0 -6
  586. package/lib/terminology/enums/engine-term-collection-sub-status.enum.d.ts +0 -12
  587. package/lib/terminology/enums/index.d.ts +0 -6
  588. package/lib/terminology/enums/mt-collection-status.enum.d.ts +0 -8
  589. package/lib/terminology/icons/collections-menu.icon.d.ts +0 -1
  590. package/lib/terminology/icons/index.d.ts +0 -1
  591. package/lib/terminology/index.d.ts +0 -9
  592. package/lib/terminology/models/active-data.model.d.ts +0 -23
  593. package/lib/terminology/models/add-engine-terms-request-params.model.d.ts +0 -7
  594. package/lib/terminology/models/combined-collection.model.d.ts +0 -91
  595. package/lib/terminology/models/default-term-collection-order-update.model.d.ts +0 -5
  596. package/lib/terminology/models/domain.model.d.ts +0 -9
  597. package/lib/terminology/models/engine-term-collection-access-scope-update.model.d.ts +0 -3
  598. package/lib/terminology/models/engine-term-collection-access-scope.model.d.ts +0 -4
  599. package/lib/terminology/models/engine-term-collection-access-update.model.d.ts +0 -5
  600. package/lib/terminology/models/engine-term-collection-access.model.d.ts +0 -6
  601. package/lib/terminology/models/engine-term-collection-list.model.d.ts +0 -4
  602. package/lib/terminology/models/engine-term-collection.model.d.ts +0 -24
  603. package/lib/terminology/models/index.d.ts +0 -18
  604. package/lib/terminology/models/lang-list-item.model.d.ts +0 -6
  605. package/lib/terminology/models/mt-collection.model.d.ts +0 -17
  606. package/lib/terminology/models/system.model.d.ts +0 -12
  607. package/lib/terminology/models/terminology-engine.model.d.ts +0 -15
  608. package/lib/terminology/models/tld-term-collection-languages.model.d.ts +0 -11
  609. package/lib/terminology/models/tld-term-collection.model.d.ts +0 -46
  610. package/lib/terminology/models/update-engine-terms-request-params.model.d.ts +0 -4
  611. package/lib/terminology/models/vendor.model.d.ts +0 -5
  612. package/lib/terminology/services/engine-term-api/engine-term-api.service.d.ts +0 -19
  613. package/lib/terminology/services/engine-term-api/index.d.ts +0 -1
  614. package/lib/terminology/services/index.d.ts +0 -4
  615. package/lib/terminology/services/system-api-v2/models/engine-deployment.model.d.ts +0 -9
  616. package/lib/terminology/services/system-api-v2/models/engine-domain-list.model.d.ts +0 -4
  617. package/lib/terminology/services/system-api-v2/models/engine-domain.model.d.ts +0 -5
  618. package/lib/terminology/services/system-api-v2/models/engine-list.model.d.ts +0 -4
  619. package/lib/terminology/services/system-api-v2/models/engine-status.enum.d.ts +0 -9
  620. package/lib/terminology/services/system-api-v2/models/engine-sub-status.enum.d.ts +0 -16
  621. package/lib/terminology/services/system-api-v2/models/engine.model.d.ts +0 -24
  622. package/lib/terminology/services/system-api-v2/models/index.d.ts +0 -8
  623. package/lib/terminology/services/system-api-v2/models/revision.model.d.ts +0 -9
  624. package/lib/terminology/services/system-api-v2/models/tilde-vendor.const.d.ts +0 -1
  625. package/lib/terminology/services/system-api-v2/models/worker-status.model.d.ts +0 -12
  626. package/lib/terminology/services/system-api-v2/system-api.service.d.ts +0 -17
  627. package/lib/terminology/services/terminology/terminology.service.d.ts +0 -62
  628. package/lib/terminology/services/terminology-api/terminology-api.service.d.ts +0 -18
  629. package/lib/terminology/services/terminology-collection/index.d.ts +0 -1
  630. package/lib/terminology/services/terminology-collection/terminology-collection.service.d.ts +0 -17
  631. package/lib/terminology/terminology.component.d.ts +0 -42
  632. package/lib/terminology/terminology.module.d.ts +0 -28
  633. package/lib/text-to-speech/index.d.ts +0 -2
  634. package/lib/text-to-speech/models/index.d.ts +0 -1
  635. package/lib/text-to-speech/models/voice.model.d.ts +0 -4
  636. package/lib/text-to-speech/services/tts-api.service.d.ts +0 -9
  637. package/lib/text-to-speech/text-to-speech.component.d.ts +0 -21
  638. package/lib/tld-loader/index.d.ts +0 -2
  639. package/lib/tld-loader/tld-loader.component.d.ts +0 -5
  640. package/lib/tld-loader/tld-loader.module.d.ts +0 -7
  641. package/lib/toast/index.d.ts +0 -2
  642. package/lib/toast/models/toast.model.d.ts +0 -5
  643. package/lib/toast/toast-service/index.d.ts +0 -1
  644. package/lib/toast/toast-service/toast-service.service.d.ts +0 -12
  645. package/lib/toast/toast.component.d.ts +0 -11
  646. package/public-api.d.ts +0 -28
@@ -1,691 +0,0 @@
1
- import { SelectionModel } from '@angular/cdk/collections';
2
- import { Component, ContentChild, ContentChildren, effect, ElementRef, EventEmitter, input, Input, Output, ViewChild } from '@angular/core';
3
- import { MatPaginator } from '@angular/material/paginator';
4
- import { MatSort } from '@angular/material/sort';
5
- import { MatColumnDef, MatHeaderRowDef, MatNoDataRow, MatRowDef, MatTable, MatTableDataSource } from '@angular/material/table';
6
- import { map, take } from 'rxjs';
7
- import { HtmlElementParseHelper } from '../helpers';
8
- import { SaveFileHelper } from '../helpers/save-file.helper';
9
- import { DISABLE_EXPORT_ATTRIBUTE_NAME } from './constants/disable-export-attribute-name.const';
10
- import { ExportFormat } from './models';
11
- import * as i0 from "@angular/core";
12
- import * as i1 from "../services";
13
- import * as i2 from "@ngx-translate/core";
14
- import * as i3 from "@angular/common";
15
- import * as i4 from "@angular/material/table";
16
- import * as i5 from "@angular/material/button";
17
- import * as i6 from "@angular/material/menu";
18
- import * as i7 from "@angular/material/checkbox";
19
- import * as i8 from "@angular/forms";
20
- import * as i9 from "../filter-bar/filter-bar.component";
21
- import * as i10 from "@ngbracket/ngx-layout/flex";
22
- import * as i11 from "@ngbracket/ngx-layout/extended";
23
- import * as i12 from "@angular/material/tooltip";
24
- import * as i13 from "../status-display/status-display.component";
25
- import * as i14 from "@angular/material/icon";
26
- import * as i15 from "@angular/material/paginator";
27
- const _c0 = ["tableContainer"];
28
- const _c1 = ["filterBar"];
29
- const _c2 = [[["", "additionalActions", ""]], [["", "batchActions", ""]], "*"];
30
- const _c3 = ["[additionalActions]", "[batchActions]", "*"];
31
- const _c4 = () => [10];
32
- function MultiFunctionalTableComponent_button_3_Template(rf, ctx) { if (rf & 1) {
33
- const _r2 = i0.ɵɵgetCurrentView();
34
- i0.ɵɵelementStart(0, "button", 25);
35
- i0.ɵɵlistener("click", function MultiFunctionalTableComponent_button_3_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.export()); });
36
- i0.ɵɵelementStart(1, "span", 26);
37
- i0.ɵɵtext(2, "cloud_download");
38
- i0.ɵɵelementEnd();
39
- i0.ɵɵelementStart(3, "span");
40
- i0.ɵɵtext(4);
41
- i0.ɵɵpipe(5, "translate");
42
- i0.ɵɵelementEnd()();
43
- } if (rf & 2) {
44
- i0.ɵɵadvance(4);
45
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(5, 1, "MULTI_FUNCTIONAL_TABLE.EXPORT"));
46
- } }
47
- function MultiFunctionalTableComponent_div_4_div_7_Template(rf, ctx) { if (rf & 1) {
48
- const _r5 = i0.ɵɵgetCurrentView();
49
- i0.ɵɵelementStart(0, "div", 31)(1, "button", 32);
50
- i0.ɵɵlistener("click", function MultiFunctionalTableComponent_div_4_div_7_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r5); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.clearFilters()); });
51
- i0.ɵɵelementStart(2, "mat-icon");
52
- i0.ɵɵtext(3, "close");
53
- i0.ɵɵelementEnd()()();
54
- } }
55
- function MultiFunctionalTableComponent_div_4_Template(rf, ctx) { if (rf & 1) {
56
- const _r4 = i0.ɵɵgetCurrentView();
57
- i0.ɵɵelementStart(0, "div", 27)(1, "button", 28);
58
- i0.ɵɵlistener("click", function MultiFunctionalTableComponent_div_4_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.toggleFilterBar()); });
59
- i0.ɵɵelementStart(2, "span", 29);
60
- i0.ɵɵtext(3, "filter_list");
61
- i0.ɵɵelementEnd();
62
- i0.ɵɵelementStart(4, "span");
63
- i0.ɵɵtext(5);
64
- i0.ɵɵpipe(6, "translate");
65
- i0.ɵɵelementEnd()();
66
- i0.ɵɵtemplate(7, MultiFunctionalTableComponent_div_4_div_7_Template, 4, 0, "div", 30);
67
- i0.ɵɵelementEnd();
68
- } if (rf & 2) {
69
- const ctx_r2 = i0.ɵɵnextContext();
70
- i0.ɵɵadvance();
71
- i0.ɵɵclassProp("filter-active", ctx_r2.filterBarVisible);
72
- i0.ɵɵadvance(4);
73
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(6, 4, "MULTI_FUNCTIONAL_TABLE.FILTER_TOGGLE"));
74
- i0.ɵɵadvance(2);
75
- i0.ɵɵproperty("ngIf", ctx_r2.showFilterReset);
76
- } }
77
- function MultiFunctionalTableComponent_div_5_button_7_Template(rf, ctx) { if (rf & 1) {
78
- const _r7 = i0.ɵɵgetCurrentView();
79
- i0.ɵɵelementStart(0, "button", 37);
80
- i0.ɵɵlistener("click", function MultiFunctionalTableComponent_div_5_button_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r7); i0.ɵɵnextContext(); const wildSearch_r8 = i0.ɵɵreference(5); const ctx_r2 = i0.ɵɵnextContext(); wildSearch_r8.value = ""; return i0.ɵɵresetView(ctx_r2.search({ target: { value: "" } })); });
81
- i0.ɵɵelementStart(1, "mat-icon");
82
- i0.ɵɵtext(2, "close");
83
- i0.ɵɵelementEnd()();
84
- } }
85
- function MultiFunctionalTableComponent_div_5_Template(rf, ctx) { if (rf & 1) {
86
- const _r6 = i0.ɵɵgetCurrentView();
87
- i0.ɵɵelementStart(0, "div", 33)(1, "mat-icon", 34);
88
- i0.ɵɵpipe(2, "translate");
89
- i0.ɵɵtext(3, "search");
90
- i0.ɵɵelementEnd();
91
- i0.ɵɵelementStart(4, "input", 35, 3);
92
- i0.ɵɵpipe(6, "translate");
93
- i0.ɵɵlistener("keyup", function MultiFunctionalTableComponent_div_5_Template_input_keyup_4_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.search($event)); });
94
- i0.ɵɵelementEnd();
95
- i0.ɵɵtemplate(7, MultiFunctionalTableComponent_div_5_button_7_Template, 3, 0, "button", 36);
96
- i0.ɵɵelementEnd();
97
- } if (rf & 2) {
98
- let tmp_6_0;
99
- const wildSearch_r8 = i0.ɵɵreference(5);
100
- const ctx_r2 = i0.ɵɵnextContext();
101
- i0.ɵɵadvance();
102
- i0.ɵɵproperty("matTooltip", ctx_r2.hideSearchTooltip ? "" : i0.ɵɵpipeBind1(2, 4, ctx_r2.searchTooltip));
103
- i0.ɵɵadvance(3);
104
- i0.ɵɵproperty("value", (tmp_6_0 = ctx_r2.config.filter == null ? null : ctx_r2.config.filter.settings == null ? null : ctx_r2.config.filter.settings.searchValue) !== null && tmp_6_0 !== undefined ? tmp_6_0 : "")("placeholder", i0.ɵɵpipeBind1(6, 6, ctx_r2.searchTitle));
105
- i0.ɵɵadvance(3);
106
- i0.ɵɵproperty("ngIf", ctx_r2.showSearchClearButton && wildSearch_r8.value);
107
- } }
108
- function MultiFunctionalTableComponent_tld_filter_bar_7_Template(rf, ctx) { if (rf & 1) {
109
- const _r9 = i0.ɵɵgetCurrentView();
110
- i0.ɵɵelementStart(0, "tld-filter-bar", 38, 4);
111
- i0.ɵɵlistener("filterBarChange", function MultiFunctionalTableComponent_tld_filter_bar_7_Template_tld_filter_bar_filterBarChange_0_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.filtersChanged($event)); });
112
- i0.ɵɵelementEnd();
113
- } if (rf & 2) {
114
- const ctx_r2 = i0.ɵɵnextContext();
115
- i0.ɵɵproperty("filterRowVisible", ctx_r2.filterBarVisible)("settings", ctx_r2.config.filter.settings);
116
- } }
117
- function MultiFunctionalTableComponent_Conditional_9_Template(rf, ctx) { if (rf & 1) {
118
- const _r10 = i0.ɵɵgetCurrentView();
119
- i0.ɵɵdeclareLet(0);
120
- i0.ɵɵelementStart(1, "mat-paginator", 39);
121
- i0.ɵɵpipe(2, "translate");
122
- i0.ɵɵlistener("page", function MultiFunctionalTableComponent_Conditional_9_Template_mat_paginator_page_1_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.paginatorChange($event)); });
123
- i0.ɵɵelementEnd();
124
- } if (rf & 2) {
125
- let tmp_7_0;
126
- const paginatorConfig_r11 = i0.ɵɵnextContext().config.paginator;
127
- i0.ɵɵadvance();
128
- i0.ɵɵproperty("hidePageSize", !paginatorConfig_r11.showPageSize)("showFirstLastButtons", paginatorConfig_r11.showFirstLastButtons)("pageSizeOptions", (tmp_7_0 = paginatorConfig_r11.pageSizeOptions) !== null && tmp_7_0 !== undefined ? tmp_7_0 : i0.ɵɵpureFunction0(6, _c4));
129
- i0.ɵɵattribute("aria-label", i0.ɵɵpipeBind1(2, 4, "MULTI_FUNCTIONAL_TABLE.PAGINATOR_LABEL"));
130
- } }
131
- function MultiFunctionalTableComponent_th_16_Template(rf, ctx) { if (rf & 1) {
132
- const _r12 = i0.ɵɵgetCurrentView();
133
- i0.ɵɵelementStart(0, "th", 40)(1, "mat-checkbox", 41);
134
- i0.ɵɵpipe(2, "translate");
135
- i0.ɵɵlistener("change", function MultiFunctionalTableComponent_th_16_Template_mat_checkbox_change_1_listener() { i0.ɵɵrestoreView(_r12); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.toggleAllRowSelection()); });
136
- i0.ɵɵelementEnd()();
137
- } if (rf & 2) {
138
- const ctx_r2 = i0.ɵɵnextContext();
139
- i0.ɵɵadvance();
140
- i0.ɵɵproperty("matTooltip", i0.ɵɵpipeBind1(2, 4, "MULTI_FUNCTIONAL_TABLE.SELECT_ALL"))("disabled", ctx_r2.config.batchConfig.checkBoxesDisabled)("checked", ctx_r2.matSelection.hasValue() && ctx_r2.isAllSelected())("indeterminate", ctx_r2.matSelection.hasValue() && !ctx_r2.isAllSelected());
141
- } }
142
- function MultiFunctionalTableComponent_td_17_mat_checkbox_1_Template(rf, ctx) { if (rf & 1) {
143
- const _r13 = i0.ɵɵgetCurrentView();
144
- i0.ɵɵelementStart(0, "mat-checkbox", 44);
145
- i0.ɵɵpipe(1, "translate");
146
- i0.ɵɵlistener("click", function MultiFunctionalTableComponent_td_17_mat_checkbox_1_Template_mat_checkbox_click_0_listener($event) { i0.ɵɵrestoreView(_r13); return i0.ɵɵresetView($event.stopPropagation()); })("change", function MultiFunctionalTableComponent_td_17_mat_checkbox_1_Template_mat_checkbox_change_0_listener() { i0.ɵɵrestoreView(_r13); const element_r14 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.toggleElementSelection(element_r14)); });
147
- i0.ɵɵelementEnd();
148
- } if (rf & 2) {
149
- const element_r14 = i0.ɵɵnextContext().$implicit;
150
- const ctx_r2 = i0.ɵɵnextContext();
151
- i0.ɵɵproperty("matTooltip", i0.ɵɵpipeBind1(1, 3, "MULTI_FUNCTIONAL_TABLE.SELECT"))("disabled", ctx_r2.config.batchConfig.checkBoxesDisabled || ctx_r2.preselectedItems.includes(element_r14) && ctx_r2.disablePreselectedItems)("checked", ctx_r2.matSelection.isSelected(element_r14));
152
- } }
153
- function MultiFunctionalTableComponent_td_17_Template(rf, ctx) { if (rf & 1) {
154
- i0.ɵɵelementStart(0, "td", 42);
155
- i0.ɵɵtemplate(1, MultiFunctionalTableComponent_td_17_mat_checkbox_1_Template, 2, 5, "mat-checkbox", 43);
156
- i0.ɵɵelementEnd();
157
- } if (rf & 2) {
158
- const element_r14 = ctx.$implicit;
159
- const ctx_r2 = i0.ɵɵnextContext();
160
- i0.ɵɵadvance();
161
- i0.ɵɵproperty("ngIf", ctx_r2.isRowCheckboxAlwaysVisible || ctx_r2.hoveredRow === element_r14 || ctx_r2.matSelection.isSelected(element_r14));
162
- } }
163
- function MultiFunctionalTableComponent_tr_18_Template(rf, ctx) { if (rf & 1) {
164
- i0.ɵɵelement(0, "tr", 45);
165
- } }
166
- function MultiFunctionalTableComponent_tr_19_Template(rf, ctx) { if (rf & 1) {
167
- const _r15 = i0.ɵɵgetCurrentView();
168
- i0.ɵɵelementStart(0, "tr", 46);
169
- i0.ɵɵlistener("click", function MultiFunctionalTableComponent_tr_19_Template_tr_click_0_listener() { const row_r16 = i0.ɵɵrestoreView(_r15).$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView((ctx_r2.config == null ? null : ctx_r2.config.rowClickCallback) && (!ctx_r2.config.disableRowClick || !(ctx_r2.config == null ? null : ctx_r2.config.disableRowClick(row_r16))) ? ctx_r2.config == null ? null : ctx_r2.config.rowClickCallback(row_r16) : null); })("mouseover", function MultiFunctionalTableComponent_tr_19_Template_tr_mouseover_0_listener() { const ctx_r16 = i0.ɵɵrestoreView(_r15); const row_r16 = ctx_r16.$implicit; const index_r18 = ctx_r16.index; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.rowHovered(index_r18, row_r16)); })("mouseleave", function MultiFunctionalTableComponent_tr_19_Template_tr_mouseleave_0_listener() { i0.ɵɵrestoreView(_r15); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.rowHoverLeave()); });
170
- i0.ɵɵelementEnd();
171
- } if (rf & 2) {
172
- const row_r16 = ctx.$implicit;
173
- const index_r18 = ctx.index;
174
- const ctx_r2 = i0.ɵɵnextContext();
175
- i0.ɵɵclassProp("row-clickable", (ctx_r2.config == null ? null : ctx_r2.config.rowClickCallback) && (!ctx_r2.config.disableRowClick || !(ctx_r2.config == null ? null : ctx_r2.config.disableRowClick(row_r16))))("highlight-error", ctx_r2.highlightErrorElement(index_r18, row_r16))("highlight", ctx_r2.isElementHighlighted(index_r18, row_r16));
176
- } }
177
- function MultiFunctionalTableComponent_th_21_Template(rf, ctx) { if (rf & 1) {
178
- i0.ɵɵelementStart(0, "th", 40)(1, "div", 47)(2, "button", 48)(3, "span", 29);
179
- i0.ɵɵtext(4, "more_vert");
180
- i0.ɵɵelementEnd()()()();
181
- } if (rf & 2) {
182
- i0.ɵɵnextContext();
183
- const columnMenu_r19 = i0.ɵɵreference(25);
184
- i0.ɵɵadvance(2);
185
- i0.ɵɵproperty("matMenuTriggerFor", columnMenu_r19);
186
- } }
187
- function MultiFunctionalTableComponent_td_22_Template(rf, ctx) { if (rf & 1) {
188
- i0.ɵɵelement(0, "td", 42);
189
- } }
190
- function MultiFunctionalTableComponent_ng_container_23_tr_1_Template(rf, ctx) { if (rf & 1) {
191
- i0.ɵɵelementStart(0, "tr")(1, "td", 50);
192
- i0.ɵɵelement(2, "lib-status-display", 51);
193
- i0.ɵɵelementEnd()();
194
- } if (rf & 2) {
195
- const ctx_r2 = i0.ɵɵnextContext(2);
196
- i0.ɵɵadvance(2);
197
- i0.ɵɵproperty("config", ctx_r2.noDataRowConfig);
198
- } }
199
- function MultiFunctionalTableComponent_ng_container_23_Template(rf, ctx) { if (rf & 1) {
200
- i0.ɵɵelementContainerStart(0);
201
- i0.ɵɵtemplate(1, MultiFunctionalTableComponent_ng_container_23_tr_1_Template, 3, 1, "tr", 49);
202
- i0.ɵɵelementContainerEnd();
203
- } }
204
- function MultiFunctionalTableComponent_div_27_Template(rf, ctx) { if (rf & 1) {
205
- const _r20 = i0.ɵɵgetCurrentView();
206
- i0.ɵɵelementStart(0, "div")(1, "mat-checkbox", 52);
207
- i0.ɵɵtwoWayListener("ngModelChange", function MultiFunctionalTableComponent_div_27_Template_mat_checkbox_ngModelChange_1_listener($event) { const column_r21 = i0.ɵɵrestoreView(_r20).$implicit; i0.ɵɵtwoWayBindingSet(column_r21.selected, $event) || (column_r21.selected = $event); return i0.ɵɵresetView($event); });
208
- i0.ɵɵtext(2);
209
- i0.ɵɵpipe(3, "translate");
210
- i0.ɵɵelementEnd()();
211
- } if (rf & 2) {
212
- const column_r21 = ctx.$implicit;
213
- i0.ɵɵadvance();
214
- i0.ɵɵtwoWayProperty("ngModel", column_r21.selected);
215
- i0.ɵɵadvance();
216
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(3, 2, column_r21.displayName), " ");
217
- } }
218
- export class MultiFunctionalTableComponent {
219
- #dataSource;
220
- get dataSource() {
221
- return (this.#dataSource ?? this.config.dataSource);
222
- }
223
- set selection(value) {
224
- this.matSelection.setSelection(...(value ?? []));
225
- }
226
- get ignoreAttributeName() { return DISABLE_EXPORT_ATTRIBUTE_NAME; }
227
- get filterActive() { return this.config.filter?.enabled; }
228
- get showFilterToggle() { return !this.config.filter?.hideFilterToggle; }
229
- get showFilterReset() { return this.config.filter?.settings.filters?.find(filter => filter.selectedValues?.length); }
230
- constructor(domService, translateService) {
231
- this.domService = domService;
232
- this.translateService = translateService;
233
- this.matSelection = new SelectionModel(true, []);
234
- this.trackByFn = this.defaultTrackBy;
235
- // Set this to false if you want to display checkboxes only on row hover.
236
- this.isRowCheckboxAlwaysVisible = true;
237
- this.disablePreselectedItems = false;
238
- //#region Output properties
239
- this.filterBarChange = new EventEmitter();
240
- this.paginatorUpdate = new EventEmitter();
241
- this.exported = new EventEmitter();
242
- this.selectionChange = this.matSelection.changed.asObservable().pipe(map(() => { return this.matSelection.selected; }));
243
- /** This property will be taken into account only if config.DataSource not set. */
244
- this.data = input();
245
- this.dataSourceUpdateEffect = effect(() => { this.updateDataSourceData(); });
246
- this.noDataRowIcon = "manage_search";
247
- this.isDragging = false;
248
- this.startX = 0;
249
- this.startY = 0;
250
- this.scrollLeft = 0;
251
- this.scrollTop = 0;
252
- this.batchColumnName = "batch";
253
- this.columnSelectColumnName = "columnSelect";
254
- }
255
- //#region Angular lifecycle hooks
256
- ngOnInit() {
257
- this.createDataSource();
258
- this.readFromLocalStorage();
259
- this.setFilterVisibility();
260
- this.setColumnSelectProperties();
261
- this.setExportProperties();
262
- this.setNoDataRowProperties();
263
- this.preselectedItems = this.matSelection.selected;
264
- this.searchTooltip = this.config.filter?.settings?.searchTooltip ?? 'FILTER_BAR.SEARCH_TOOLTIP';
265
- this.searchTitle = this.config.filter?.settings?.searchTitle ?? 'FILTER_BAR.SEARCH';
266
- this.showSearch = !this.config.filter?.settings?.hideSearch;
267
- this.showSearchClearButton = this.config.filter?.settings?.showSearchClearButton ?? true;
268
- this.hideSearchTooltip = !this.config.filter?.settings?.hideTooltip;
269
- }
270
- ngAfterContentInit() {
271
- this.columnDefs.forEach(columnDef => this.table.addColumnDef(columnDef));
272
- this.rowDefs.forEach(rowDef => this.table.addRowDef(rowDef));
273
- this.headerRowDefs.forEach(headerRowDef => this.table.addHeaderRowDef(headerRowDef));
274
- this.headerRowDefs.forEach(headerRowDef => this.table.addHeaderRowDef(headerRowDef));
275
- this.table.setNoDataRow(this.noDataRow);
276
- }
277
- ngAfterViewInit() {
278
- this.dataSource.sort = this.sort;
279
- this.dataSource.paginator = this.paginator;
280
- if (this.config.paginator?.initialPage) {
281
- this.paginator.pageIndex = this.config.paginator.initialPage;
282
- }
283
- }
284
- //#endregion
285
- search(event) {
286
- const input = event.target?.value;
287
- this.config.filter.settings.searchInput = input;
288
- this.filterBarChange.emit({ ...this.filters, input });
289
- this.updatePaginator(0);
290
- }
291
- updateDisplayColumns(initial = false) {
292
- this.batchSelectedEnabled = this.config.batchConfig?.enabled ? true : false;
293
- const allColumns = this.config.columnSelect?.columns ?? [];
294
- this.displayColumns = [];
295
- this.configurableColumns = allColumns.filter(column => !column.notConfigurable);
296
- if (this.batchSelectedEnabled) {
297
- this.displayColumns.push(this.batchColumnName);
298
- }
299
- if (!allColumns.length) {
300
- return;
301
- }
302
- const localStorageValue = this.localStorageValue ?? {};
303
- if (!localStorageValue.columns) {
304
- localStorageValue.columns = {};
305
- }
306
- allColumns.forEach((column) => {
307
- if (initial) {
308
- column.selected = localStorageValue.columns?.[column.name] ?? column.selected;
309
- }
310
- else {
311
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
312
- localStorageValue.columns[column.name] = column.selected;
313
- }
314
- if (column.selected) {
315
- this.displayColumns.push(column.name);
316
- }
317
- });
318
- if (this.columnSelectActive) {
319
- this.displayColumns.push(this.columnSelectColumnName);
320
- }
321
- if (!initial) {
322
- this.updateLocalStorage(localStorageValue);
323
- }
324
- }
325
- toggleFilterBar() {
326
- const localstorageObject = this.localStorageValue ?? {};
327
- if (!localstorageObject.filter) {
328
- localstorageObject.filter = {};
329
- }
330
- this.filterBarVisible = !this.filterBarVisible;
331
- localstorageObject.filter.visible = this.filterBarVisible;
332
- this.updateLocalStorage(localstorageObject);
333
- }
334
- filtersChanged(filters) {
335
- this.filters = { ...filters, input: this.config.filter.settings.searchInput ?? '' };
336
- this.filterBarChange.emit(this.filters);
337
- }
338
- clearFilters() {
339
- this.config.filter?.settings.filters?.forEach((filter) => {
340
- filter.selectedValues = [];
341
- });
342
- this.filterBar.removeAllFilters();
343
- }
344
- export() {
345
- this.dataSource.connect().pipe(take(1)).subscribe((data) => {
346
- this.exported.emit(data);
347
- });
348
- if (this.config.export?.fileOptions) {
349
- this.exportToFile();
350
- }
351
- }
352
- isElementHighlighted(ix, element) {
353
- let isHovered = false;
354
- if (this.hoveredRow && this.hoveredRowIndex !== undefined) {
355
- isHovered = this.trackByFn(this.hoveredRowIndex, this.hoveredRow) === this.trackByFn(ix, element);
356
- }
357
- return isHovered ||
358
- this.highlightedElements?.some((highlightElement, highlightElementIx) => this.trackByFn(highlightElementIx, highlightElement) === this.trackByFn(ix, element));
359
- }
360
- highlightErrorElement(ix, element) {
361
- return this.highlightedErrorElements?.some((highlightElement, highlightElementIx) => this.trackByFn(highlightElementIx, highlightElement) === this.trackByFn(ix, element));
362
- }
363
- //#region Methods for batch selection
364
- isAllSelected() {
365
- const numSelected = this.matSelection.selected.length;
366
- const numRows = this.dataSource?.data.length;
367
- return numSelected === numRows;
368
- }
369
- toggleAllRowSelection() {
370
- if (this.isAllSelected()) {
371
- if (this.disablePreselectedItems) {
372
- // deselect only those items which were not already preselected
373
- this.matSelection.deselect(...this.matSelection.selected.filter(elm => !this.preselectedItems.map(elm => elm).includes(elm)));
374
- return;
375
- }
376
- else {
377
- this.matSelection.clear();
378
- return;
379
- }
380
- }
381
- this.matSelection.select(...this.dataSource?.data ?? []);
382
- }
383
- toggleElementSelection(element) {
384
- this.matSelection.toggle(element);
385
- }
386
- onMouseDown(event) {
387
- if (this.config.disableMouseDragging) {
388
- return;
389
- }
390
- this.isDragging = true;
391
- this.startX = event.pageX - this.tableContainer.nativeElement.offsetLeft;
392
- this.startY = event.pageY - this.tableContainer.nativeElement.offsetTop;
393
- this.scrollLeft = this.tableContainer.nativeElement.scrollLeft;
394
- this.scrollTop = this.tableContainer.nativeElement.scrollTop;
395
- // canceling any previous animation frame
396
- if (this.scrollMovement !== null) {
397
- cancelAnimationFrame(this.scrollMovement);
398
- }
399
- }
400
- onMouseMove(event) {
401
- if (this.config.disableMouseDragging) {
402
- return;
403
- }
404
- this.checkTableOverflow();
405
- if (!this.isDragging) {
406
- return;
407
- }
408
- // using requestAnimationFrame for smoother updates
409
- if (this.scrollMovement === null) {
410
- this.scrollMovement = requestAnimationFrame(() => {
411
- if (!this.tableOverflow) {
412
- return;
413
- }
414
- const x = event.pageX - this.tableContainer.nativeElement.offsetLeft;
415
- const y = event.pageY - this.tableContainer.nativeElement.offsetTop;
416
- // calculating the differences in movement
417
- const walkX = (x - this.startX) * 2;
418
- const walkY = (y - this.startY) * 2;
419
- // updating scroll positions
420
- this.tableContainer.nativeElement.scrollLeft = this.scrollLeft - walkX;
421
- this.tableContainer.nativeElement.scrollTop = this.scrollTop - walkY;
422
- this.scrollMovement = null;
423
- });
424
- }
425
- }
426
- onMouseUp() {
427
- if (this.config.disableMouseDragging) {
428
- return;
429
- }
430
- this.isDragging = false;
431
- // canceling any pending animation
432
- if (this.scrollMovement !== null) {
433
- cancelAnimationFrame(this.scrollMovement);
434
- this.scrollMovement = null;
435
- }
436
- }
437
- paginatorChange(change) {
438
- this.paginatorUpdate.emit(change);
439
- }
440
- //#endregion
441
- rowHovered(index, row) {
442
- this.hoveredRow = row;
443
- this.hoveredRowIndex = index;
444
- }
445
- rowHoverLeave() {
446
- this.hoveredRow = null;
447
- this.hoveredRowIndex = undefined;
448
- }
449
- defaultTrackBy(ix) {
450
- return ix;
451
- }
452
- checkTableOverflow() {
453
- // when data is available we should check once for table overflow
454
- // when there wasnt overflow, but width of the table became bigger, then we are reseting tableOverflow variable
455
- // same for when there was overflow, but size of the table is same as container, so overflow is gone and we reseting tableOverflow variable again
456
- if ((this.dataSource?.data.length && this.tableOverflow === undefined) ||
457
- (!this.tableOverflow && this.tableContainer.nativeElement.clientWidth < this.tableElementRef.nativeElement.clientWidth) ||
458
- (this.tableOverflow && this.tableContainer.nativeElement.clientWidth === this.tableElementRef.nativeElement.clientWidth)) {
459
- if (this.tableContainer.nativeElement.clientWidth < this.tableElementRef.nativeElement.clientWidth) {
460
- this.tableOverflow = true;
461
- }
462
- else {
463
- this.tableOverflow = false;
464
- }
465
- }
466
- }
467
- exportToFile() {
468
- if (!this.config.export?.fileOptions?.saveToFile) {
469
- return;
470
- }
471
- let fileString = "";
472
- let extension;
473
- switch (this.config.export.fileOptions.format) {
474
- case ExportFormat.CSV:
475
- default:
476
- extension = ExportFormat.CSV;
477
- fileString = HtmlElementParseHelper.tableAsCsv(this.tableElementRef.nativeElement, this.ignoreAttributeName);
478
- break;
479
- }
480
- const translatedFileName = this.translateService.instant(this.config.export.fileOptions.fileName);
481
- SaveFileHelper.saveFile(fileString, `${translatedFileName}.${extension}`);
482
- }
483
- updateLocalStorage(newValue) {
484
- this.localStorageValue = newValue;
485
- if (this.config.localStorageKey && newValue) {
486
- this.domService.localStorage?.setItem(this.config.localStorageKey, JSON.stringify(newValue));
487
- }
488
- }
489
- readFromLocalStorage() {
490
- if (this.config.localStorageKey) {
491
- try {
492
- const localStorageString = this.domService.localStorage?.getItem(this.config.localStorageKey);
493
- if (localStorageString) {
494
- this.localStorageValue = JSON.parse(localStorageString);
495
- }
496
- }
497
- // eslint-disable-next-line no-empty
498
- catch {
499
- }
500
- }
501
- }
502
- setColumnSelectProperties() {
503
- this.columnSelectActive = this.config.columnSelect?.enabled ? true : false;
504
- this.updateDisplayColumns(true);
505
- }
506
- setFilterVisibility() {
507
- this.filterBarVisible = this.localStorageValue?.filter?.visible ?? this.config?.filter?.visible ?? false;
508
- }
509
- setNoDataRowProperties() {
510
- if (this.config.noDataRow) {
511
- this.noDataRowActive = true;
512
- this.noDataRowConfig = this.config.noDataRow;
513
- this.noDataRowConfig.icon = this.config.noDataRow?.icon ?? this.noDataRowIcon;
514
- }
515
- }
516
- setExportProperties() {
517
- if (this.config.export?.enabled) {
518
- this.exportActive = true;
519
- }
520
- }
521
- createDataSource() {
522
- if (!this.config.dataSource) {
523
- this.#dataSource = new MatTableDataSource(this.data());
524
- }
525
- }
526
- updateDataSourceData() {
527
- const data = this.data();
528
- if (!data || !this.#dataSource) {
529
- return;
530
- }
531
- const shouldInitializePaginator = !this.#dataSource.data.length;
532
- this.#dataSource.data = data;
533
- // if data is async loaded, page needs to be set on first load.
534
- if (shouldInitializePaginator) {
535
- this.updatePaginator(this.config.paginator?.initialPage ?? 0);
536
- }
537
- }
538
- updatePaginator(pageIndex) {
539
- this.paginator.pageIndex = pageIndex;
540
- }
541
- static { this.ɵfac = function MultiFunctionalTableComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || MultiFunctionalTableComponent)(i0.ɵɵdirectiveInject(i1.DOMService), i0.ɵɵdirectiveInject(i2.TranslateService)); }; }
542
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MultiFunctionalTableComponent, selectors: [["tld-multi-functional-table"]], contentQueries: function MultiFunctionalTableComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
543
- i0.ɵɵcontentQuery(dirIndex, MatNoDataRow, 5);
544
- i0.ɵɵcontentQuery(dirIndex, MatHeaderRowDef, 4);
545
- i0.ɵɵcontentQuery(dirIndex, MatRowDef, 5);
546
- i0.ɵɵcontentQuery(dirIndex, MatColumnDef, 4);
547
- } if (rf & 2) {
548
- let _t;
549
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.noDataRow = _t.first);
550
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.headerRowDefs = _t);
551
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.rowDefs = _t);
552
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.columnDefs = _t);
553
- } }, viewQuery: function MultiFunctionalTableComponent_Query(rf, ctx) { if (rf & 1) {
554
- i0.ɵɵviewQuery(MatTable, 7);
555
- i0.ɵɵviewQuery(MatSort, 5);
556
- i0.ɵɵviewQuery(_c0, 5);
557
- i0.ɵɵviewQuery(_c1, 5);
558
- i0.ɵɵviewQuery(MatPaginator, 5);
559
- i0.ɵɵviewQuery(MatTable, 5, ElementRef);
560
- } if (rf & 2) {
561
- let _t;
562
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.table = _t.first);
563
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.sort = _t.first);
564
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.tableContainer = _t.first);
565
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.filterBar = _t.first);
566
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.paginator = _t.first);
567
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.tableElementRef = _t.first);
568
- } }, inputs: { config: "config", highlightedElements: "highlightedElements", trackByFn: "trackByFn", highlightedErrorElements: "highlightedErrorElements", selection: "selection", isRowCheckboxAlwaysVisible: "isRowCheckboxAlwaysVisible", disablePreselectedItems: "disablePreselectedItems", data: [1, "data"] }, outputs: { filterBarChange: "filterBarChange", paginatorUpdate: "paginatorUpdate", exported: "exported", selectionChange: "selectionChange" }, ngContentSelectors: _c3, decls: 32, vars: 22, consts: [["tableContainer", ""], ["table", ""], ["columnMenu", "matMenu"], ["wildSearch", ""], ["filterBar", ""], ["fxLayout", "column", "fxLayoutGap", "0.75rem", 3, "ngClass.lt-md"], ["fxLayout", "row", "fxLayout.lt-md", "column", "fxLayoutGap.lt-md", "0.75rem"], ["fxFlex", "", "fxLayout.lt-md", "column", "fxLayoutGap", "0.75rem", "fxLayoutAlign", "start center", "fxLayoutAlign.lt-md", "start start", 1, "action-row"], ["class", "export-data", "mat-stroked-button", "", "color", "accent", 3, "click", 4, "ngIf"], ["fxFlex", "", "fxLayoutGap", "0.5rem", "fxLayoutAlign", "start center", 4, "ngIf"], ["fxLayout", "row", "fxLayoutAlign", "start center", "class", "wild-search-wrapper", 4, "ngIf"], [3, "filterRowVisible", "settings", "filterBarChange", 4, "ngIf"], [3, "hidePageSize", "showFirstLastButtons", "pageSizeOptions"], [1, "table-overflow", 3, "mousedown", "mouseup", "mouseleave", "mousemove"], ["mat-table", "", 3, "dataSource", "trackBy"], [3, "matColumnDef"], ["class", "row-select", "mat-header-cell", "", "disable-export", "", 4, "matHeaderCellDef"], ["class", "row-select", "mat-cell", "", "disable-export", "", 4, "matCellDef"], ["mat-header-row", "", 4, "matHeaderRowDef", "matHeaderRowDefSticky"], ["mat-row", "", 3, "row-clickable", "highlight-error", "highlight", "click", "mouseover", "mouseleave", 4, "matRowDef", "matRowDefColumns"], [4, "ngIf"], [1, "column-select-menu", 3, "click"], [4, "ngFor", "ngForOf"], [1, "column-select-save"], ["mat-flat-button", "", "color", "accent", 3, "click"], ["mat-stroked-button", "", "color", "accent", 1, "export-data", 3, "click"], [1, "material-icons-outlined"], ["fxFlex", "", "fxLayoutGap", "0.5rem", "fxLayoutAlign", "start center"], ["mat-stroked-button", "", "color", "accent", 3, "click"], [1, "material-icons"], ["class", "clear-filters-wrapper", 4, "ngIf"], [1, "clear-filters-wrapper"], ["mat-icon-button", "", 3, "click"], ["fxLayout", "row", "fxLayoutAlign", "start center", 1, "wild-search-wrapper"], [1, "search-icon", 3, "matTooltip"], ["type", "text", 3, "keyup", "value", "placeholder"], ["mat-icon-button", "", "class", "wild-search-clear-btn", 3, "click", 4, "ngIf"], ["mat-icon-button", "", 1, "wild-search-clear-btn", 3, "click"], [3, "filterBarChange", "filterRowVisible", "settings"], [3, "page", "hidePageSize", "showFirstLastButtons", "pageSizeOptions"], ["mat-header-cell", "", "disable-export", "", 1, "row-select"], [3, "change", "matTooltip", "disabled", "checked", "indeterminate"], ["mat-cell", "", "disable-export", "", 1, "row-select"], [3, "matTooltip", "disabled", "checked", "click", "change", 4, "ngIf"], [3, "click", "change", "matTooltip", "disabled", "checked"], ["mat-header-row", ""], ["mat-row", "", 3, "click", "mouseover", "mouseleave"], [1, "column-selector-wrapper"], ["mat-icon-button", "", "color", "accent", 1, "column-selector", 3, "matMenuTriggerFor"], [4, "matNoDataRow"], ["colspan", "99"], [3, "config"], [3, "ngModelChange", "ngModel"]], template: function MultiFunctionalTableComponent_Template(rf, ctx) { if (rf & 1) {
569
- const _r1 = i0.ɵɵgetCurrentView();
570
- i0.ɵɵprojectionDef(_c2);
571
- i0.ɵɵelementStart(0, "div", 5)(1, "div", 6)(2, "div", 7);
572
- i0.ɵɵtemplate(3, MultiFunctionalTableComponent_button_3_Template, 6, 3, "button", 8)(4, MultiFunctionalTableComponent_div_4_Template, 8, 6, "div", 9);
573
- i0.ɵɵelementEnd();
574
- i0.ɵɵtemplate(5, MultiFunctionalTableComponent_div_5_Template, 8, 8, "div", 10);
575
- i0.ɵɵprojection(6);
576
- i0.ɵɵelementEnd();
577
- i0.ɵɵtemplate(7, MultiFunctionalTableComponent_tld_filter_bar_7_Template, 2, 2, "tld-filter-bar", 11);
578
- i0.ɵɵprojection(8, 1);
579
- i0.ɵɵtemplate(9, MultiFunctionalTableComponent_Conditional_9_Template, 3, 7, "mat-paginator", 12);
580
- i0.ɵɵelementStart(10, "div", 13, 0);
581
- i0.ɵɵlistener("mousedown", function MultiFunctionalTableComponent_Template_div_mousedown_10_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onMouseDown($event)); })("mouseup", function MultiFunctionalTableComponent_Template_div_mouseup_10_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onMouseUp()); })("mouseleave", function MultiFunctionalTableComponent_Template_div_mouseleave_10_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onMouseUp()); })("mousemove", function MultiFunctionalTableComponent_Template_div_mousemove_10_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onMouseMove($event)); });
582
- i0.ɵɵelementStart(12, "table", 14, 1);
583
- i0.ɵɵprojection(14, 2);
584
- i0.ɵɵelementContainerStart(15, 15);
585
- i0.ɵɵtemplate(16, MultiFunctionalTableComponent_th_16_Template, 3, 6, "th", 16)(17, MultiFunctionalTableComponent_td_17_Template, 2, 1, "td", 17);
586
- i0.ɵɵelementContainerEnd();
587
- i0.ɵɵtemplate(18, MultiFunctionalTableComponent_tr_18_Template, 1, 0, "tr", 18)(19, MultiFunctionalTableComponent_tr_19_Template, 1, 6, "tr", 19);
588
- i0.ɵɵelementContainerStart(20, 15);
589
- i0.ɵɵtemplate(21, MultiFunctionalTableComponent_th_21_Template, 5, 1, "th", 16)(22, MultiFunctionalTableComponent_td_22_Template, 1, 0, "td", 17);
590
- i0.ɵɵelementContainerEnd();
591
- i0.ɵɵtemplate(23, MultiFunctionalTableComponent_ng_container_23_Template, 2, 0, "ng-container", 20);
592
- i0.ɵɵelementEnd()()();
593
- i0.ɵɵelementStart(24, "mat-menu", null, 2)(26, "div", 21);
594
- i0.ɵɵlistener("click", function MultiFunctionalTableComponent_Template_div_click_26_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView($event.stopPropagation()); });
595
- i0.ɵɵtemplate(27, MultiFunctionalTableComponent_div_27_Template, 4, 4, "div", 22);
596
- i0.ɵɵelementStart(28, "div", 23)(29, "button", 24);
597
- i0.ɵɵlistener("click", function MultiFunctionalTableComponent_Template_button_click_29_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.updateDisplayColumns()); });
598
- i0.ɵɵtext(30);
599
- i0.ɵɵpipe(31, "translate");
600
- i0.ɵɵelementEnd()()()();
601
- } if (rf & 2) {
602
- let tmp_15_0;
603
- i0.ɵɵproperty("ngClass.lt-md", "mobile");
604
- i0.ɵɵadvance(3);
605
- i0.ɵɵproperty("ngIf", ctx.exportActive);
606
- i0.ɵɵadvance();
607
- i0.ɵɵproperty("ngIf", ctx.filterActive && ctx.showFilterToggle);
608
- i0.ɵɵadvance();
609
- i0.ɵɵproperty("ngIf", ctx.showSearch);
610
- i0.ɵɵadvance(2);
611
- i0.ɵɵproperty("ngIf", ctx.config.filter && ctx.config.filter.enabled);
612
- i0.ɵɵadvance(2);
613
- i0.ɵɵconditional((ctx.config.paginator == null ? null : ctx.config.paginator.enabled) ? 9 : -1);
614
- i0.ɵɵadvance();
615
- i0.ɵɵclassProp("table-sticky-header", ctx.config == null ? null : ctx.config.stickyHeader)("table-dragable", ctx.tableOverflow && !(ctx.config == null ? null : ctx.config.disableMouseDragging));
616
- i0.ɵɵadvance(2);
617
- i0.ɵɵproperty("dataSource", ctx.dataSource)("trackBy", ctx.trackByFn);
618
- i0.ɵɵadvance(3);
619
- i0.ɵɵproperty("matColumnDef", ctx.batchColumnName);
620
- i0.ɵɵadvance(3);
621
- i0.ɵɵproperty("matHeaderRowDef", ctx.displayColumns)("matHeaderRowDefSticky", (tmp_15_0 = ctx.config == null ? null : ctx.config.stickyHeader) !== null && tmp_15_0 !== undefined ? tmp_15_0 : false);
622
- i0.ɵɵadvance();
623
- i0.ɵɵproperty("matRowDefColumns", ctx.displayColumns);
624
- i0.ɵɵadvance();
625
- i0.ɵɵproperty("matColumnDef", ctx.columnSelectColumnName);
626
- i0.ɵɵadvance(3);
627
- i0.ɵɵproperty("ngIf", ctx.noDataRowActive);
628
- i0.ɵɵadvance(4);
629
- i0.ɵɵproperty("ngForOf", ctx.configurableColumns);
630
- i0.ɵɵadvance(3);
631
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(31, 20, "MULTI_FUNCTIONAL_TABLE.COLUMN_SELECT_SAVE"), " ");
632
- } }, dependencies: [i3.NgForOf, i3.NgIf, i4.MatTable, i4.MatHeaderCellDef, i4.MatHeaderRowDef, i4.MatColumnDef, i4.MatCellDef, i4.MatRowDef, i4.MatHeaderCell, i4.MatCell, i4.MatHeaderRow, i4.MatRow, i4.MatNoDataRow, i5.MatButton, i5.MatIconButton, i6.MatMenu, i6.MatMenuTrigger, i7.MatCheckbox, i8.NgControlStatus, i8.NgModel, i9.FilterBarComponent, i10.DefaultLayoutDirective, i10.DefaultLayoutGapDirective, i10.DefaultLayoutAlignDirective, i10.DefaultFlexDirective, i11.DefaultClassDirective, i12.MatTooltip, i13.StatusDisplayComponent, i14.MatIcon, i15.MatPaginator, i2.TranslatePipe], styles: ["[_nghost-%COMP%] th, [_nghost-%COMP%] tr{white-space:nowrap}[_nghost-%COMP%] td:not(:first-of-type){padding-right:10px!important}[_nghost-%COMP%] tr.mat-mdc-row:hover, [_nghost-%COMP%] tr.mat-mdc-row.highlight{background-color:var(--base-95)}[_nghost-%COMP%] tr.mat-mdc-row.highlight-error{background-color:var(--warning-light)}[_nghost-%COMP%] .export-data .mdc-button__label{display:flex;align-items:center}[_nghost-%COMP%] .mat-mdc-cell, [_nghost-%COMP%] .mat-mdc-header-cell, [_nghost-%COMP%] .mdc-data-table__row:last-child{border-bottom-color:var(--base-70)}[_nghost-%COMP%] .mdc-data-table__row:last-child{border-bottom-width:1px;border-bottom-style:solid}[_nghost-%COMP%] .mdc-data-table__cell:nth-child(2), [_nghost-%COMP%] .mdc-data-table__header-cell:nth-child(2){padding:0 16px 0 10px}[_nghost-%COMP%] td+.cdk-column-columnSelect{display:none}[_nghost-%COMP%] .clear-filters-wrapper .mat-mdc-icon-button, [_nghost-%COMP%] .clear-filters-wrapper .mat-mdc-icon-button .mat-mdc-button-touch-target{height:36px!important;width:36px!important}[_nghost-%COMP%] .clear-filters-wrapper mat-icon{margin-top:-2px;margin-left:-2px}[_nghost-%COMP%] .filter-active{background-color:var(--neutral-95)}[_nghost-%COMP%] .row-actions{opacity:0}[_nghost-%COMP%] .mobile .row-actions, [_nghost-%COMP%] .highlight .row-actions{opacity:1}[_nghost-%COMP%] .mat-mdc-paginator-range-actions button{padding:8px}table[_ngcontent-%COMP%]{width:100%}.wild-search-wrapper[_ngcontent-%COMP%]{position:relative;padding:5px 10px;border-radius:4px;border:1px solid var(--neutral-50);margin:0 8px}.wild-search-wrapper[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{margin-right:30px}.wild-search-wrapper[_ngcontent-%COMP%] .search-icon[_ngcontent-%COMP%]{color:var(--base-40)}.wild-search-wrapper[_ngcontent-%COMP%] .wild-search-clear-btn[_ngcontent-%COMP%]{position:absolute;right:3px}.wild-search-wrapper[_ngcontent-%COMP%] .mat-mdc-icon-button[_ngcontent-%COMP%], .wild-search-wrapper[_ngcontent-%COMP%] .mat-mdc-icon-button[_ngcontent-%COMP%] .mat-mdc-button-touch-target[_ngcontent-%COMP%]{height:33px!important;width:33px!important}.wild-search-wrapper[_ngcontent-%COMP%] .mat-mdc-icon-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%], .wild-search-wrapper[_ngcontent-%COMP%] .mat-mdc-icon-button[_ngcontent-%COMP%] .material-icons[_ngcontent-%COMP%], .wild-search-wrapper[_ngcontent-%COMP%] .mat-mdc-icon-button[_ngcontent-%COMP%] .material-icons-outlined[_ngcontent-%COMP%]{top:5px!important;left:5px!important}.mobile[_ngcontent-%COMP%] .wild-search-wrapper[_ngcontent-%COMP%]{margin:0}.column-selector-wrapper[_ngcontent-%COMP%]{display:flex;justify-content:end}.column-select-menu[_ngcontent-%COMP%]{padding:8px 18px 8px 8px}.column-select-save[_ngcontent-%COMP%]{padding-left:8px;padding-top:8px}.column-select-save[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{width:100%}.row-clickable[_ngcontent-%COMP%]{cursor:pointer}.row-clickable[_ngcontent-%COMP%]:active{background-color:var(--base-70)!important}.material-icons[_ngcontent-%COMP%], .material-icons-outlined[_ngcontent-%COMP%]{margin-right:.5rem}.table-action-button[_ngcontent-%COMP%]{margin-bottom:1rem}th.mat-mdc-header-cell[_ngcontent-%COMP%]:first-of-type, td.mat-mdc-cell[_ngcontent-%COMP%]:first-of-type, td.mat-mdc-footer-cell[_ngcontent-%COMP%]:first-of-type{padding:0 0 0 10px}.row-select[_ngcontent-%COMP%]{width:0}.table-overflow[_ngcontent-%COMP%]{overflow-x:auto}.table-dragable[_ngcontent-%COMP%]{cursor:grab;-webkit-user-select:none;user-select:none}.table-dragable[_ngcontent-%COMP%]:active{cursor:grabbing}.table-sticky-header[_ngcontent-%COMP%]{max-height:70vh}"] }); }
633
- }
634
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MultiFunctionalTableComponent, [{
635
- type: Component,
636
- args: [{ selector: 'tld-multi-functional-table', template: "<div [ngClass.lt-md]=\"'mobile'\" fxLayout=\"column\" fxLayoutGap=\"0.75rem\">\r\n <div fxLayout=\"row\" fxLayout.lt-md=\"column\" fxLayoutGap.lt-md=\"0.75rem\">\r\n <div\r\n fxFlex\r\n fxLayout.lt-md=\"column\"\r\n fxLayoutGap=\"0.75rem\"\r\n fxLayoutAlign=\"start center\"\r\n fxLayoutAlign.lt-md=\"start start\"\r\n class=\"action-row\"\r\n >\r\n <button\r\n class=\"export-data\"\r\n mat-stroked-button\r\n color=\"accent\"\r\n *ngIf=\"exportActive\"\r\n (click)=\"export()\"\r\n >\r\n <span class=\"material-icons-outlined\">cloud_download</span>\r\n <span>{{ \"MULTI_FUNCTIONAL_TABLE.EXPORT\" | translate }}</span>\r\n </button>\r\n\r\n <div\r\n *ngIf=\"filterActive && showFilterToggle\"\r\n fxFlex\r\n fxLayoutGap=\"0.5rem\"\r\n fxLayoutAlign=\"start center\"\r\n >\r\n <button\r\n [class.filter-active]=\"filterBarVisible\"\r\n mat-stroked-button\r\n color=\"accent\"\r\n (click)=\"toggleFilterBar()\"\r\n >\r\n <span class=\"material-icons\">filter_list</span>\r\n <span>{{ \"MULTI_FUNCTIONAL_TABLE.FILTER_TOGGLE\" | translate }}</span>\r\n </button>\r\n\r\n <div *ngIf=\"showFilterReset\" class=\"clear-filters-wrapper\">\r\n <button mat-icon-button (click)=\"clearFilters()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"showSearch\"\r\n fxLayout=\"row\"\r\n fxLayoutAlign=\"start center\"\r\n class=\"wild-search-wrapper\"\r\n >\r\n <mat-icon\r\n class=\"search-icon\"\r\n [matTooltip]=\"hideSearchTooltip ? '' : (searchTooltip | translate)\"\r\n >search</mat-icon\r\n >\r\n <input\r\n [value]=\"config.filter?.settings?.searchValue ?? ''\"\r\n #wildSearch\r\n type=\"text\"\r\n [placeholder]=\"searchTitle | translate\"\r\n (keyup)=\"search($event)\"\r\n />\r\n <button\r\n *ngIf=\"showSearchClearButton && wildSearch.value\"\r\n mat-icon-button\r\n class=\"wild-search-clear-btn\"\r\n (click)=\"wildSearch.value = ''; search({ target: { value: '' } })\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n\r\n <ng-content select=\"[additionalActions]\"></ng-content>\r\n </div>\r\n\r\n <tld-filter-bar\r\n *ngIf=\"config.filter && config.filter.enabled\"\r\n #filterBar\r\n [filterRowVisible]=\"filterBarVisible\"\r\n [settings]=\"config.filter.settings\"\r\n (filterBarChange)=\"filtersChanged($event)\"\r\n >\r\n </tld-filter-bar>\r\n\r\n <ng-content select=\"[batchActions]\"></ng-content>\r\n\r\n @if(config.paginator?.enabled){\r\n @let paginatorConfig = config.paginator!;\r\n\r\n <mat-paginator [hidePageSize]=\"!paginatorConfig.showPageSize\" [showFirstLastButtons]=\"paginatorConfig.showFirstLastButtons\"\r\n [attr.aria-label]=\"'MULTI_FUNCTIONAL_TABLE.PAGINATOR_LABEL' | translate\" [pageSizeOptions]=\"paginatorConfig.pageSizeOptions ?? [10]\" (page)=\"paginatorChange($event)\">\r\n </mat-paginator>\r\n }\r\n <div\r\n #tableContainer\r\n class=\"table-overflow\"\r\n [class.table-sticky-header]=\"config?.stickyHeader\"\r\n [class.table-dragable]=\"tableOverflow && !config?.disableMouseDragging\"\r\n (mousedown)=\"onMouseDown($event)\"\r\n (mouseup)=\"onMouseUp()\"\r\n (mouseleave)=\"onMouseUp()\"\r\n (mousemove)=\"onMouseMove($event)\"\r\n >\r\n <table\r\n #table\r\n mat-table\r\n [dataSource]=\"dataSource!\"\r\n [trackBy]=\"trackByFn\"\r\n >\r\n <ng-content></ng-content>\r\n <ng-container [matColumnDef]=\"batchColumnName\">\r\n <th class=\"row-select\" mat-header-cell *matHeaderCellDef disable-export>\r\n <mat-checkbox\r\n [matTooltip]=\"'MULTI_FUNCTIONAL_TABLE.SELECT_ALL' | translate\"\r\n [disabled]=\"config.batchConfig!.checkBoxesDisabled\"\r\n (change)=\"toggleAllRowSelection()\"\r\n [checked]=\"matSelection.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"matSelection.hasValue() && !isAllSelected()\"\r\n >\r\n </mat-checkbox>\r\n </th>\r\n <td\r\n class=\"row-select\"\r\n mat-cell\r\n *matCellDef=\"let element\"\r\n disable-export\r\n >\r\n <mat-checkbox\r\n [matTooltip]=\"'MULTI_FUNCTIONAL_TABLE.SELECT' | translate\"\r\n *ngIf=\"\r\n isRowCheckboxAlwaysVisible ||\r\n hoveredRow === element ||\r\n matSelection.isSelected(element)\r\n \"\r\n [disabled]=\"\r\n config.batchConfig!.checkBoxesDisabled ||\r\n (preselectedItems.includes(element) && disablePreselectedItems)\r\n \"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"toggleElementSelection(element)\"\r\n [checked]=\"matSelection.isSelected(element)\"\r\n >\r\n </mat-checkbox>\r\n </td>\r\n </ng-container>\r\n <tr\r\n mat-header-row\r\n *matHeaderRowDef=\"displayColumns; sticky: config?.stickyHeader ?? false\"\r\n ></tr>\r\n <tr\r\n mat-row\r\n *matRowDef=\"let row; let index = index; columns: displayColumns\"\r\n (click)=\"\r\n config?.rowClickCallback && (!config.disableRowClick || !config?.disableRowClick(row))\r\n ? config?.rowClickCallback(row)\r\n : null\r\n \"\r\n (mouseover)=\"rowHovered(index,row)\"\r\n (mouseleave)=\"rowHoverLeave()\"\r\n [class.row-clickable]=\"\r\n config?.rowClickCallback && (!config.disableRowClick || !config?.disableRowClick(row))\r\n \"\r\n [class.highlight-error]=\"highlightErrorElement(index, row)\"\r\n [class.highlight]=\"isElementHighlighted(index,row)\"\r\n ></tr>\r\n\r\n <ng-container [matColumnDef]=\"columnSelectColumnName\">\r\n <th class=\"row-select\" mat-header-cell *matHeaderCellDef disable-export>\r\n <div class=\"column-selector-wrapper\">\r\n <button\r\n class=\"column-selector\"\r\n mat-icon-button\r\n color=\"accent\"\r\n [matMenuTriggerFor]=\"columnMenu\"\r\n >\r\n <span class=\"material-icons\">more_vert</span>\r\n </button>\r\n </div>\r\n </th>\r\n <td\r\n class=\"row-select\"\r\n mat-cell\r\n *matCellDef=\"let element\"\r\n disable-export\r\n ></td>\r\n </ng-container>\r\n <ng-container *ngIf=\"noDataRowActive\">\r\n <tr *matNoDataRow>\r\n <!-- add random number to make sure it takes full width -->\r\n <td colspan=\"99\">\r\n <lib-status-display [config]=\"noDataRowConfig\"></lib-status-display>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </table>\r\n </div>\r\n</div>\r\n\r\n<mat-menu #columnMenu=\"matMenu\">\r\n <div class=\"column-select-menu\" (click)=\"$event.stopPropagation()\">\r\n <div *ngFor=\"let column of configurableColumns\">\r\n <mat-checkbox [(ngModel)]=\"column.selected\">\r\n {{ column.displayName | translate }}\r\n </mat-checkbox>\r\n </div>\r\n\r\n <div class=\"column-select-save\">\r\n <button\r\n mat-flat-button\r\n color=\"accent\"\r\n (click)=\"updateDisplayColumns()\"\r\n >\r\n {{ \"MULTI_FUNCTIONAL_TABLE.COLUMN_SELECT_SAVE\" | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n</mat-menu>\r\n", styles: [":host ::ng-deep th,:host ::ng-deep tr{white-space:nowrap}:host ::ng-deep td:not(:first-of-type){padding-right:10px!important}:host ::ng-deep tr.mat-mdc-row:hover,:host ::ng-deep tr.mat-mdc-row.highlight{background-color:var(--base-95)}:host ::ng-deep tr.mat-mdc-row.highlight-error{background-color:var(--warning-light)}:host ::ng-deep .export-data .mdc-button__label{display:flex;align-items:center}:host ::ng-deep .mat-mdc-cell,:host ::ng-deep .mat-mdc-header-cell,:host ::ng-deep .mdc-data-table__row:last-child{border-bottom-color:var(--base-70)}:host ::ng-deep .mdc-data-table__row:last-child{border-bottom-width:1px;border-bottom-style:solid}:host ::ng-deep .mdc-data-table__cell:nth-child(2),:host ::ng-deep .mdc-data-table__header-cell:nth-child(2){padding:0 16px 0 10px}:host ::ng-deep td+.cdk-column-columnSelect{display:none}:host ::ng-deep .clear-filters-wrapper .mat-mdc-icon-button,:host ::ng-deep .clear-filters-wrapper .mat-mdc-icon-button .mat-mdc-button-touch-target{height:36px!important;width:36px!important}:host ::ng-deep .clear-filters-wrapper mat-icon{margin-top:-2px;margin-left:-2px}:host ::ng-deep .filter-active{background-color:var(--neutral-95)}:host ::ng-deep .row-actions{opacity:0}:host ::ng-deep .mobile .row-actions,:host ::ng-deep .highlight .row-actions{opacity:1}:host ::ng-deep .mat-mdc-paginator-range-actions button{padding:8px}table{width:100%}.wild-search-wrapper{position:relative;padding:5px 10px;border-radius:4px;border:1px solid var(--neutral-50);margin:0 8px}.wild-search-wrapper input{margin-right:30px}.wild-search-wrapper .search-icon{color:var(--base-40)}.wild-search-wrapper .wild-search-clear-btn{position:absolute;right:3px}.wild-search-wrapper .mat-mdc-icon-button,.wild-search-wrapper .mat-mdc-icon-button .mat-mdc-button-touch-target{height:33px!important;width:33px!important}.wild-search-wrapper .mat-mdc-icon-button mat-icon,.wild-search-wrapper .mat-mdc-icon-button .material-icons,.wild-search-wrapper .mat-mdc-icon-button .material-icons-outlined{top:5px!important;left:5px!important}.mobile .wild-search-wrapper{margin:0}.column-selector-wrapper{display:flex;justify-content:end}.column-select-menu{padding:8px 18px 8px 8px}.column-select-save{padding-left:8px;padding-top:8px}.column-select-save button{width:100%}.row-clickable{cursor:pointer}.row-clickable:active{background-color:var(--base-70)!important}.material-icons,.material-icons-outlined{margin-right:.5rem}.table-action-button{margin-bottom:1rem}th.mat-mdc-header-cell:first-of-type,td.mat-mdc-cell:first-of-type,td.mat-mdc-footer-cell:first-of-type{padding:0 0 0 10px}.row-select{width:0}.table-overflow{overflow-x:auto}.table-dragable{cursor:grab;-webkit-user-select:none;user-select:none}.table-dragable:active{cursor:grabbing}.table-sticky-header{max-height:70vh}\n"] }]
637
- }], () => [{ type: i1.DOMService }, { type: i2.TranslateService }], { config: [{
638
- type: Input
639
- }], highlightedElements: [{
640
- type: Input
641
- }], trackByFn: [{
642
- type: Input
643
- }], highlightedErrorElements: [{
644
- type: Input
645
- }], selection: [{
646
- type: Input
647
- }], isRowCheckboxAlwaysVisible: [{
648
- type: Input
649
- }], disablePreselectedItems: [{
650
- type: Input
651
- }], filterBarChange: [{
652
- type: Output
653
- }], paginatorUpdate: [{
654
- type: Output
655
- }], exported: [{
656
- type: Output
657
- }], selectionChange: [{
658
- type: Output
659
- }], headerRowDefs: [{
660
- type: ContentChildren,
661
- args: [MatHeaderRowDef]
662
- }], rowDefs: [{
663
- type: ContentChildren,
664
- args: [MatRowDef, { descendants: true }]
665
- }], columnDefs: [{
666
- type: ContentChildren,
667
- args: [MatColumnDef]
668
- }], noDataRow: [{
669
- type: ContentChild,
670
- args: [MatNoDataRow]
671
- }], table: [{
672
- type: ViewChild,
673
- args: [MatTable, { static: true }]
674
- }], sort: [{
675
- type: ViewChild,
676
- args: [MatSort]
677
- }], tableContainer: [{
678
- type: ViewChild,
679
- args: ['tableContainer']
680
- }], filterBar: [{
681
- type: ViewChild,
682
- args: ['filterBar']
683
- }], paginator: [{
684
- type: ViewChild,
685
- args: [MatPaginator]
686
- }], tableElementRef: [{
687
- type: ViewChild,
688
- args: [MatTable, { read: ElementRef }]
689
- }] }); })();
690
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MultiFunctionalTableComponent, { className: "MultiFunctionalTableComponent", filePath: "lib\\multi-functional-table\\multi-functional-table.component.ts", lineNumber: 26 }); })();
691
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktZnVuY3Rpb25hbC10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtY29tbW9uL3NyYy9saWIvbXVsdGktZnVuY3Rpb25hbC10YWJsZS9tdWx0aS1mdW5jdGlvbmFsLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21tb24vc3JjL2xpYi9tdWx0aS1mdW5jdGlvbmFsLXRhYmxlL211bHRpLWZ1bmN0aW9uYWwtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBbUMsU0FBUyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQWEsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hNLE9BQU8sRUFBRSxZQUFZLEVBQWEsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUUvSCxPQUFPLEVBQUUsR0FBRyxFQUFjLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUc3QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRzdELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7Ozs7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QURFLG9HQUNGOzs7aUZEN0xPLDZCQUE2QjtjQU56QyxTQUFTOzJCQUVFLDRCQUE0QjswRUFZN0IsTUFBTTtrQkFBZCxLQUFLO1lBQ0csbUJBQW1CO2tCQUEzQixLQUFLO1lBQ0csU0FBUztrQkFBakIsS0FBSztZQUNHLHdCQUF3QjtrQkFBaEMsS0FBSztZQUNPLFNBQVM7a0JBQXJCLEtBQUs7WUFLRywwQkFBMEI7a0JBQWxDLEtBQUs7WUFDRyx1QkFBdUI7a0JBQS9CLEtBQUs7WUFHSSxlQUFlO2tCQUF4QixNQUFNO1lBQ0csZUFBZTtrQkFBeEIsTUFBTTtZQUNHLFFBQVE7a0JBQWpCLE1BQU07WUFDRyxlQUFlO2tCQUF4QixNQUFNO1lBSTJCLGFBQWE7a0JBQTlDLGVBQWU7bUJBQUMsZUFBZTtZQUNtQixPQUFPO2tCQUF6RCxlQUFlO21CQUFDLFNBQVMsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUU7WUFDbEIsVUFBVTtrQkFBeEMsZUFBZTttQkFBQyxZQUFZO1lBQ0QsU0FBUztrQkFBcEMsWUFBWTttQkFBQyxZQUFZO1lBRWEsS0FBSztrQkFBM0MsU0FBUzttQkFBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO1lBQ2pCLElBQUk7a0JBQXZCLFNBQVM7bUJBQUMsT0FBTztZQUVXLGNBQWM7a0JBQTFDLFNBQVM7bUJBQUMsZ0JBQWdCO1lBQ0gsU0FBUztrQkFBaEMsU0FBUzttQkFBQyxXQUFXO1lBQ0csU0FBUztrQkFBakMsU0FBUzttQkFBQyxZQUFZO1lBSW9CLGVBQWU7a0JBQXpELFNBQVM7bUJBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTs7a0ZBMUM5Qiw2QkFBNkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XHJcbmltcG9ydCB7IEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgQ29udGVudENoaWxkLCBDb250ZW50Q2hpbGRyZW4sIGVmZmVjdCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBpbnB1dCwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBRdWVyeUxpc3QsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IsIFBhZ2VFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7IE1hdFNvcnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcclxuaW1wb3J0IHsgTWF0Q29sdW1uRGVmLCBNYXRIZWFkZXJSb3dEZWYsIE1hdE5vRGF0YVJvdywgTWF0Um93RGVmLCBNYXRUYWJsZSwgTWF0VGFibGVEYXRhU291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IG1hcCwgT2JzZXJ2YWJsZSwgdGFrZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBGaWx0ZXJCYXJDb21wb25lbnQgfSBmcm9tICcuLi9maWx0ZXItYmFyJztcclxuaW1wb3J0IHsgRmlsdGVyQmFyQ2hhbmdlRXZlbnQgfSBmcm9tICcuLi9maWx0ZXItYmFyL21vZGVscy9maWx0ZXItYmFyLWNoYW5nZS1ldmVudC5tb2RlbCc7XHJcbmltcG9ydCB7IEh0bWxFbGVtZW50UGFyc2VIZWxwZXIgfSBmcm9tICcuLi9oZWxwZXJzJztcclxuaW1wb3J0IHsgU2F2ZUZpbGVIZWxwZXIgfSBmcm9tICcuLi9oZWxwZXJzL3NhdmUtZmlsZS5oZWxwZXInO1xyXG5pbXBvcnQgeyBET01TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMnO1xyXG5pbXBvcnQgeyBTdGF0dXNEaXNwbGF5Q29uZmlnIH0gZnJvbSAnLi4vc3RhdHVzLWRpc3BsYXkvbW9kZWxzL3N0YXR1cy1kaXNwbGF5LWNvbmZpZy5tb2RlbCc7XHJcbmltcG9ydCB7IERJU0FCTEVfRVhQT1JUX0FUVFJJQlVURV9OQU1FIH0gZnJvbSAnLi9jb25zdGFudHMvZGlzYWJsZS1leHBvcnQtYXR0cmlidXRlLW5hbWUuY29uc3QnO1xyXG5pbXBvcnQgeyBFeHBvcnRGb3JtYXQgfSBmcm9tICcuL21vZGVscyc7XHJcbmltcG9ydCB7IENvbHVtbkNvbmZpZyB9IGZyb20gJy4vbW9kZWxzL2NvbHVtbi1jb25maWcubW9kZWwnO1xyXG5pbXBvcnQgeyBNdWx0aUZ1bmN0aW9uYWxUYWJsZUNvbmZpZyB9IGZyb20gJy4vbW9kZWxzL211bHRpLWZ1bmN0aW9uYWwtdGFibGUtY29uZmlnLm1vZGVsJztcclxuaW1wb3J0IHsgU2VsZWN0ZWRDb2x1bW5Mb2NhbFN0b3JhZ2VDb25maWcgfSBmcm9tICcuL21vZGVscy9zZWxlY3RlZC1jb2x1bW4tbG9jYWwtc3RvcmFnZS1jb25maWcubW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcclxuICBzZWxlY3RvcjogJ3RsZC1tdWx0aS1mdW5jdGlvbmFsLXRhYmxlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbXVsdGktZnVuY3Rpb25hbC10YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbXVsdGktZnVuY3Rpb25hbC10YWJsZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNdWx0aUZ1bmN0aW9uYWxUYWJsZUNvbXBvbmVudDxUPiBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgcmVhZG9ubHkgbWF0U2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbk1vZGVsPFQ+KHRydWUsIFtdKTtcclxuXHJcbiAgI2RhdGFTb3VyY2U6IE1hdFRhYmxlRGF0YVNvdXJjZTxUPiB8IHVuZGVmaW5lZDtcclxuICBnZXQgZGF0YVNvdXJjZSgpOiBNYXRUYWJsZURhdGFTb3VyY2U8VD4ge1xyXG4gICAgcmV0dXJuICh0aGlzLiNkYXRhU291cmNlID8/IHRoaXMuY29uZmlnLmRhdGFTb3VyY2UpITtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIGNvbmZpZyE6IE11bHRpRnVuY3Rpb25hbFRhYmxlQ29uZmlnPFQ+O1xyXG4gIEBJbnB1dCgpIGhpZ2hsaWdodGVkRWxlbWVudHMhOiBUW107XHJcbiAgQElucHV0KCkgdHJhY2tCeUZuOiAoaXg6IG51bWJlciwgcm93OiBUKSA9PiBzdHJpbmcgfCBudW1iZXIgPSB0aGlzLmRlZmF1bHRUcmFja0J5O1xyXG4gIEBJbnB1dCgpIGhpZ2hsaWdodGVkRXJyb3JFbGVtZW50cyE6IFRbXTtcclxuICBASW5wdXQoKSBzZXQgc2VsZWN0aW9uKHZhbHVlOiBUW10pIHtcclxuICAgIHRoaXMubWF0U2VsZWN0aW9uLnNldFNlbGVjdGlvbiguLi4odmFsdWUgPz8gW10pKTtcclxuICB9XHJcblxyXG4gIC8vIFNldCB0aGlzIHRvIGZhbHNlIGlmIHlvdSB3YW50IHRvIGRpc3BsYXkgY2hlY2tib3hlcyBvbmx5IG9uIHJvdyBob3Zlci5cclxuICBASW5wdXQoKSBpc1Jvd0NoZWNrYm94QWx3YXlzVmlzaWJsZSA9IHRydWU7XHJcbiAgQElucHV0KCkgZGlzYWJsZVByZXNlbGVjdGVkSXRlbXMgPSBmYWxzZTtcclxuXHJcbiAgLy8jcmVnaW9uIE91dHB1dCBwcm9wZXJ0aWVzXHJcbiAgQE91dHB1dCgpIGZpbHRlckJhckNoYW5nZTogRXZlbnRFbWl0dGVyPEZpbHRlckJhckNoYW5nZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsdGVyQmFyQ2hhbmdlRXZlbnQ+KCk7XHJcbiAgQE91dHB1dCgpIHBhZ2luYXRvclVwZGF0ZTogRXZlbnRFbWl0dGVyPFBhZ2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFBhZ2VFdmVudD4oKTtcclxuICBAT3V0cHV0KCkgZXhwb3J0ZWQ6IEV2ZW50RW1pdHRlcjxUW10+ID0gbmV3IEV2ZW50RW1pdHRlcjxUW10+KCk7XHJcbiAgQE91dHB1dCgpIHNlbGVjdGlvbkNoYW5nZTogT2JzZXJ2YWJsZTxUW10+ID0gdGhpcy5tYXRTZWxlY3Rpb24uY2hhbmdlZC5hc09ic2VydmFibGUoKS5waXBlKG1hcCgoKSA9PiB7IHJldHVybiB0aGlzLm1hdFNlbGVjdGlvbi5zZWxlY3RlZDsgfSkpO1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyAjcmVnaW9uIFByb3BlcnRpZXMgZm9yIG1hdCB0YWJsZSB3cmFwcGVyXHJcbiAgQENvbnRlbnRDaGlsZHJlbihNYXRIZWFkZXJSb3dEZWYpIGhlYWRlclJvd0RlZnMhOiBRdWVyeUxpc3Q8TWF0SGVhZGVyUm93RGVmPjtcclxuICBAQ29udGVudENoaWxkcmVuKE1hdFJvd0RlZiwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSByb3dEZWZzITogUXVlcnlMaXN0PE1hdFJvd0RlZjxUPj47XHJcbiAgQENvbnRlbnRDaGlsZHJlbihNYXRDb2x1bW5EZWYpIGNvbHVtbkRlZnMhOiBRdWVyeUxpc3Q8TWF0Q29sdW1uRGVmPjtcclxuICBAQ29udGVudENoaWxkKE1hdE5vRGF0YVJvdykgbm9EYXRhUm93ITogTWF0Tm9EYXRhUm93O1xyXG5cclxuICBAVmlld0NoaWxkKE1hdFRhYmxlLCB7IHN0YXRpYzogdHJ1ZSB9KSB0YWJsZSE6IE1hdFRhYmxlPFQ+O1xyXG4gIEBWaWV3Q2hpbGQoTWF0U29ydCkgc29ydCE6IE1hdFNvcnQ7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3RhYmxlQ29udGFpbmVyJykgdGFibGVDb250YWluZXIhOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcclxuICBAVmlld0NoaWxkKCdmaWx0ZXJCYXInKSBmaWx0ZXJCYXIhOiBGaWx0ZXJCYXJDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZChNYXRQYWdpbmF0b3IpIHBhZ2luYXRvciE6IE1hdFBhZ2luYXRvcjtcclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIEBWaWV3Q2hpbGQoTWF0VGFibGUsIHsgcmVhZDogRWxlbWVudFJlZiB9KSB0YWJsZUVsZW1lbnRSZWYhOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcclxuXHJcbiAgLyoqIFRoaXMgcHJvcGVydHkgd2lsbCBiZSB0YWtlbiBpbnRvIGFjY291bnQgb25seSBpZiBjb25maWcuRGF0YVNvdXJjZSBub3Qgc2V0LiAqL1xyXG4gIGRhdGEgPSBpbnB1dDxUW10+KCk7XHJcbiAgZGF0YVNvdXJjZVVwZGF0ZUVmZmVjdCA9IGVmZmVjdCgoKSA9PiB7IHRoaXMudXBkYXRlRGF0YVNvdXJjZURhdGEoKTsgfSlcclxuXHJcbiAgcHJlc2VsZWN0ZWRJdGVtcyE6IFRbXTtcclxuXHJcbiAgZ2V0IGlnbm9yZUF0dHJpYnV0ZU5hbWUoKSB7IHJldHVybiBESVNBQkxFX0VYUE9SVF9BVFRSSUJVVEVfTkFNRSB9XHJcbiAgZGlzcGxheUNvbHVtbnMhOiBzdHJpbmdbXTtcclxuXHJcbiAgY29sdW1uU2VsZWN0QWN0aXZlITogYm9vbGVhbjtcclxuICBleHBvcnRBY3RpdmUhOiBib29sZWFuO1xyXG4gIG5vRGF0YVJvd0FjdGl2ZSE6IGJvb2xlYW47XHJcblxyXG4gIGZpbHRlcnMhOiBGaWx0ZXJCYXJDaGFuZ2VFdmVudDtcclxuICBmaWx0ZXJCYXJWaXNpYmxlITogYm9vbGVhbjtcclxuXHJcbiAgaGlkZVNlYXJjaFRvb2x0aXAhOiBib29sZWFuO1xyXG4gIHNob3dTZWFyY2ghOiBib29sZWFuO1xyXG4gIHNob3dTZWFyY2hDbGVhckJ1dHRvbiE6IGJvb2xlYW47XHJcbiAgc2VhcmNoVGl0bGUhOiBzdHJpbmc7XHJcbiAgc2VhcmNoVG9vbHRpcCE6IHN0cmluZztcclxuXHJcbiAgbm9EYXRhUm93Q29uZmlnITogU3RhdHVzRGlzcGxheUNvbmZpZztcclxuICBub0RhdGFSb3dJY29uID0gXCJtYW5hZ2Vfc2VhcmNoXCI7XHJcblxyXG4gIGNvbmZpZ3VyYWJsZUNvbHVtbnMhOiBDb2x1bW5Db25maWdbXTtcclxuICBiYXRjaFNlbGVjdGVkRW5hYmxlZCE6IGJvb2xlYW47XHJcblxyXG4gIC8vIGlzIHVzZWQgaW4gaHRtbCB0byBkaXNwbGF5IGJhdGNoIGNoZWNrYm94IG9uIGhvdmVyZWQgcm93XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBob3ZlcmVkUm93OiBhbnk7XHJcbiAgaG92ZXJlZFJvd0luZGV4OiBudW1iZXIgfCB1bmRlZmluZWQ7XHJcblxyXG4gIC8vIHByb3BlcnRpZXMgZm9yIG92ZXJmbG93IHNjcm9sbGluZyB3aXRoIG1vdXNlIGNsaWNrXHJcbiAgdGFibGVPdmVyZmxvdyE6IGJvb2xlYW47XHJcbiAgcHJpdmF0ZSBzY3JvbGxNb3ZlbWVudCE6IG51bWJlciB8IG51bGw7XHJcbiAgcHJpdmF0ZSBpc0RyYWdnaW5nID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBzdGFydFggPSAwO1xyXG4gIHByaXZhdGUgc3RhcnRZID0gMDtcclxuICBwcml2YXRlIHNjcm9sbExlZnQgPSAwO1xyXG4gIHByaXZhdGUgc2Nyb2xsVG9wID0gMDtcclxuXHJcbiAgZ2V0IGZpbHRlckFjdGl2ZSgpIHsgcmV0dXJuIHRoaXMuY29uZmlnLmZpbHRlcj8uZW5hYmxlZDsgfVxyXG4gIGdldCBzaG93RmlsdGVyVG9nZ2xlKCkgeyByZXR1cm4gIXRoaXMuY29uZmlnLmZpbHRlcj8uaGlkZUZpbHRlclRvZ2dsZTsgfVxyXG5cclxuICBnZXQgc2hvd0ZpbHRlclJlc2V0KCkgeyByZXR1cm4gdGhpcy5jb25maWcuZmlsdGVyPy5zZXR0aW5ncy5maWx0ZXJzPy5maW5kKGZpbHRlciA9PiBmaWx0ZXIuc2VsZWN0ZWRWYWx1ZXM/Lmxlbmd0aCkgfVxyXG5cclxuICBwcml2YXRlIGxvY2FsU3RvcmFnZVZhbHVlITogU2VsZWN0ZWRDb2x1bW5Mb2NhbFN0b3JhZ2VDb25maWc7XHJcbiAgcmVhZG9ubHkgYmF0Y2hDb2x1bW5OYW1lID0gXCJiYXRjaFwiO1xyXG4gIHJlYWRvbmx5IGNvbHVtblNlbGVjdENvbHVtbk5hbWUgPSBcImNvbHVtblNlbGVjdFwiO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGRvbVNlcnZpY2U6IERPTVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UpIHsgfVxyXG5cclxuICAvLyNyZWdpb24gQW5ndWxhciBsaWZlY3ljbGUgaG9va3NcclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY3JlYXRlRGF0YVNvdXJjZSgpO1xyXG4gICAgdGhpcy5yZWFkRnJvbUxvY2FsU3RvcmFnZSgpO1xyXG4gICAgdGhpcy5zZXRGaWx0ZXJWaXNpYmlsaXR5KCk7XHJcbiAgICB0aGlzLnNldENvbHVtblNlbGVjdFByb3BlcnRpZXMoKTtcclxuICAgIHRoaXMuc2V0RXhwb3J0UHJvcGVydGllcygpO1xyXG4gICAgdGhpcy5zZXROb0RhdGFSb3dQcm9wZXJ0aWVzKCk7XHJcbiAgICB0aGlzLnByZXNlbGVjdGVkSXRlbXMgPSB0aGlzLm1hdFNlbGVjdGlvbi5zZWxlY3RlZDtcclxuICAgIHRoaXMuc2VhcmNoVG9vbHRpcCA9IHRoaXMuY29uZmlnLmZpbHRlcj8uc2V0dGluZ3M/LnNlYXJjaFRvb2x0aXAgPz8gJ0ZJTFRFUl9CQVIuU0VBUkNIX1RPT0xUSVAnO1xyXG4gICAgdGhpcy5zZWFyY2hUaXRsZSA9IHRoaXMuY29uZmlnLmZpbHRlcj8uc2V0dGluZ3M/LnNlYXJjaFRpdGxlID8/ICdGSUxURVJfQkFSLlNFQVJDSCc7XHJcbiAgICB0aGlzLnNob3dTZWFyY2ggPSAhdGhpcy5jb25maWcuZmlsdGVyPy5zZXR0aW5ncz8uaGlkZVNlYXJjaDtcclxuICAgIHRoaXMuc2hvd1NlYXJjaENsZWFyQnV0dG9uID0gdGhpcy5jb25maWcuZmlsdGVyPy5zZXR0aW5ncz8uc2hvd1NlYXJjaENsZWFyQnV0dG9uID8/IHRydWU7XHJcbiAgICB0aGlzLmhpZGVTZWFyY2hUb29sdGlwID0gIXRoaXMuY29uZmlnLmZpbHRlcj8uc2V0dGluZ3M/LmhpZGVUb29sdGlwO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xyXG4gICAgdGhpcy5jb2x1bW5EZWZzLmZvckVhY2goY29sdW1uRGVmID0+IHRoaXMudGFibGUuYWRkQ29sdW1uRGVmKGNvbHVtbkRlZikpO1xyXG4gICAgdGhpcy5yb3dEZWZzLmZvckVhY2gocm93RGVmID0+IHRoaXMudGFibGUuYWRkUm93RGVmKHJvd0RlZikpO1xyXG4gICAgdGhpcy5oZWFkZXJSb3dEZWZzLmZvckVhY2goaGVhZGVyUm93RGVmID0+IHRoaXMudGFibGUuYWRkSGVhZGVyUm93RGVmKGhlYWRlclJvd0RlZikpO1xyXG4gICAgdGhpcy5oZWFkZXJSb3dEZWZzLmZvckVhY2goaGVhZGVyUm93RGVmID0+IHRoaXMudGFibGUuYWRkSGVhZGVyUm93RGVmKGhlYWRlclJvd0RlZikpO1xyXG4gICAgdGhpcy50YWJsZS5zZXROb0RhdGFSb3codGhpcy5ub0RhdGFSb3cpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kYXRhU291cmNlLnNvcnQgPSB0aGlzLnNvcnQ7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yID0gdGhpcy5wYWdpbmF0b3I7XHJcblxyXG4gICAgaWYgKHRoaXMuY29uZmlnLnBhZ2luYXRvcj8uaW5pdGlhbFBhZ2UpIHtcclxuICAgICAgdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ID0gdGhpcy5jb25maWcucGFnaW5hdG9yLmluaXRpYWxQYWdlO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgc2VhcmNoKGV2ZW50OiB7IHRhcmdldDogeyB2YWx1ZTogc3RyaW5nIH0gfSB8IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIGNvbnN0IGlucHV0ID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KT8udmFsdWU7XHJcbiAgICB0aGlzLmNvbmZpZy5maWx0ZXIhLnNldHRpbmdzLnNlYXJjaElucHV0ID0gaW5wdXQ7XHJcbiAgICB0aGlzLmZpbHRlckJhckNoYW5nZS5lbWl0KHsgLi4udGhpcy5maWx0ZXJzLCBpbnB1dCB9KTtcclxuICAgIHRoaXMudXBkYXRlUGFnaW5hdG9yKDApO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlRGlzcGxheUNvbHVtbnMoaW5pdGlhbCA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLmJhdGNoU2VsZWN0ZWRFbmFibGVkID0gdGhpcy5jb25maWcuYmF0Y2hDb25maWc/LmVuYWJsZWQgPyB0cnVlIDogZmFsc2U7XHJcbiAgICBjb25zdCBhbGxDb2x1bW5zID0gdGhpcy5jb25maWcuY29sdW1uU2VsZWN0Py5jb2x1bW5zID8/IFtdO1xyXG4gICAgdGhpcy5kaXNwbGF5Q29sdW1ucyA9IFtdO1xyXG4gICAgdGhpcy5jb25maWd1cmFibGVDb2x1bW5zID0gYWxsQ29sdW1ucy5maWx0ZXIoY29sdW1uID0+ICFjb2x1bW4ubm90Q29uZmlndXJhYmxlKTtcclxuXHJcbiAgICBpZiAodGhpcy5iYXRjaFNlbGVjdGVkRW5hYmxlZCkge1xyXG4gICAgICB0aGlzLmRpc3BsYXlDb2x1bW5zLnB1c2godGhpcy5iYXRjaENvbHVtbk5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghYWxsQ29sdW1ucy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGxvY2FsU3RvcmFnZVZhbHVlID0gdGhpcy5sb2NhbFN0b3JhZ2VWYWx1ZSA/PyB7fTtcclxuICAgIGlmICghbG9jYWxTdG9yYWdlVmFsdWUuY29sdW1ucykge1xyXG4gICAgICBsb2NhbFN0b3JhZ2VWYWx1ZS5jb2x1bW5zID0ge307XHJcbiAgICB9XHJcblxyXG4gICAgYWxsQ29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcclxuICAgICAgaWYgKGluaXRpYWwpIHtcclxuICAgICAgICBjb2x1bW4uc2VsZWN0ZWQgPSBsb2NhbFN0b3JhZ2VWYWx1ZS5jb2x1bW5zPy5bY29sdW1uLm5hbWVdID8/IGNvbHVtbi5zZWxlY3RlZDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxyXG4gICAgICAgIGxvY2FsU3RvcmFnZVZhbHVlLmNvbHVtbnMhW2NvbHVtbi5uYW1lXSA9IGNvbHVtbi5zZWxlY3RlZDtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGNvbHVtbi5zZWxlY3RlZCkge1xyXG4gICAgICAgIHRoaXMuZGlzcGxheUNvbHVtbnMucHVzaChjb2x1bW4ubmFtZSk7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcblxyXG4gICAgaWYgKHRoaXMuY29sdW1uU2VsZWN0QWN0aXZlKSB7XHJcbiAgICAgIHRoaXMuZGlzcGxheUNvbHVtbnMucHVzaCh0aGlzLmNvbHVtblNlbGVjdENvbHVtbk5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghaW5pdGlhbCkge1xyXG4gICAgICB0aGlzLnVwZGF0ZUxvY2FsU3RvcmFnZShsb2NhbFN0b3JhZ2VWYWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0b2dnbGVGaWx0ZXJCYXIoKSB7XHJcbiAgICBjb25zdCBsb2NhbHN0b3JhZ2VPYmplY3QgPSB0aGlzLmxvY2FsU3RvcmFnZVZhbHVlID8/IHt9O1xyXG4gICAgaWYgKCFsb2NhbHN0b3JhZ2VPYmplY3QuZmlsdGVyKSB7XHJcbiAgICAgIGxvY2Fsc3RvcmFnZU9iamVjdC5maWx0ZXIgPSB7fTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZpbHRlckJhclZpc2libGUgPSAhdGhpcy5maWx0ZXJCYXJWaXNpYmxlO1xyXG4gICAgbG9jYWxzdG9yYWdlT2JqZWN0LmZpbHRlci52aXNpYmxlID0gdGhpcy5maWx0ZXJCYXJWaXNpYmxlO1xyXG4gICAgdGhpcy51cGRhdGVMb2NhbFN0b3JhZ2UobG9jYWxzdG9yYWdlT2JqZWN0KTtcclxuICB9XHJcblxyXG4gIGZpbHRlcnNDaGFuZ2VkKGZpbHRlcnM6IEZpbHRlckJhckNoYW5nZUV2ZW50KSB7XHJcbiAgICB0aGlzLmZpbHRlcnMgPSB7IC4uLmZpbHRlcnMsIGlucHV0OiB0aGlzLmNvbmZpZy5maWx0ZXIhLnNldHRpbmdzLnNlYXJjaElucHV0ID8/ICcnIH07XHJcbiAgICB0aGlzLmZpbHRlckJhckNoYW5nZS5lbWl0KHRoaXMuZmlsdGVycyk7XHJcbiAgfVxyXG5cclxuICBjbGVhckZpbHRlcnMoKSB7XHJcbiAgICB0aGlzLmNvbmZpZy5maWx0ZXI/LnNldHRpbmdzLmZpbHRlcnM/LmZvckVhY2goKGZpbHRlcikgPT4ge1xyXG4gICAgICBmaWx0ZXIuc2VsZWN0ZWRWYWx1ZXMgPSBbXTtcclxuICAgIH0pXHJcblxyXG4gICAgdGhpcy5maWx0ZXJCYXIucmVtb3ZlQWxsRmlsdGVycygpO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0KCkge1xyXG4gICAgdGhpcy5kYXRhU291cmNlIS5jb25uZWN0KCkucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKGRhdGEpID0+IHtcclxuICAgICAgdGhpcy5leHBvcnRlZC5lbWl0KGRhdGEpO1xyXG4gICAgfSlcclxuXHJcbiAgICBpZiAodGhpcy5jb25maWcuZXhwb3J0Py5maWxlT3B0aW9ucykge1xyXG4gICAgICB0aGlzLmV4cG9ydFRvRmlsZSgpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpc0VsZW1lbnRIaWdobGlnaHRlZChpeDogbnVtYmVyLCBlbGVtZW50OiBUKSB7XHJcbiAgICBsZXQgaXNIb3ZlcmVkID0gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5ob3ZlcmVkUm93ICYmIHRoaXMuaG92ZXJlZFJvd0luZGV4ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaXNIb3ZlcmVkID0gdGhpcy50cmFja0J5Rm4odGhpcy5ob3ZlcmVkUm93SW5kZXgsIHRoaXMuaG92ZXJlZFJvdykgPT09IHRoaXMudHJhY2tCeUZuKGl4LCBlbGVtZW50KTtcclxuICAgIH1cclxuICAgIHJldHVybiBpc0hvdmVyZWQgfHxcclxuICAgICAgdGhpcy5oaWdobGlnaHRlZEVsZW1lbnRzPy5zb21lKChoaWdobGlnaHRFbGVtZW50LCBoaWdobGlnaHRFbGVtZW50SXgpID0+IHRoaXMudHJhY2tCeUZuKGhpZ2hsaWdodEVsZW1lbnRJeCwgaGlnaGxpZ2h0RWxlbWVudCkgPT09IHRoaXMudHJhY2tCeUZuKGl4LCBlbGVtZW50KSk7XHJcbiAgfVxyXG5cclxuICBoaWdobGlnaHRFcnJvckVsZW1lbnQoaXg6IG51bWJlciwgZWxlbWVudDogVCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaGlnaGxpZ2h0ZWRFcnJvckVsZW1lbnRzPy5zb21lKChoaWdobGlnaHRFbGVtZW50LCBoaWdobGlnaHRFbGVtZW50SXgpID0+IHRoaXMudHJhY2tCeUZuKGhpZ2hsaWdodEVsZW1lbnRJeCwgaGlnaGxpZ2h0RWxlbWVudCkgPT09IHRoaXMudHJhY2tCeUZuKGl4LCBlbGVtZW50KSk7XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gTWV0aG9kcyBmb3IgYmF0Y2ggc2VsZWN0aW9uXHJcbiAgaXNBbGxTZWxlY3RlZCgpIHtcclxuICAgIGNvbnN0IG51bVNlbGVjdGVkID0gdGhpcy5tYXRTZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoO1xyXG4gICAgY29uc3QgbnVtUm93cyA9IHRoaXMuZGF0YVNvdXJjZT8uZGF0YS5sZW5ndGg7XHJcbiAgICByZXR1cm4gbnVtU2VsZWN0ZWQgPT09IG51bVJvd3M7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVBbGxSb3dTZWxlY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5pc0FsbFNlbGVjdGVkKCkpIHtcclxuICAgICAgaWYgKHRoaXMuZGlzYWJsZVByZXNlbGVjdGVkSXRlbXMpIHtcclxuICAgICAgICAvLyBkZXNlbGVjdCBvbmx5IHRob3NlIGl0ZW1zIHdoaWNoIHdlcmUgbm90IGFscmVhZHkgcHJlc2VsZWN0ZWRcclxuICAgICAgICB0aGlzLm1hdFNlbGVjdGlvbi5kZXNlbGVjdChcclxuICAgICAgICAgIC4uLnRoaXMubWF0U2VsZWN0aW9uLnNlbGVjdGVkLmZpbHRlcihlbG0gPT4gIXRoaXMucHJlc2VsZWN0ZWRJdGVtcy5tYXAoZWxtID0+IGVsbSkuaW5jbHVkZXMoZWxtKSlcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLm1hdFNlbGVjdGlvbi5jbGVhcigpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubWF0U2VsZWN0aW9uLnNlbGVjdCguLi50aGlzLmRhdGFTb3VyY2U/LmRhdGEgPz8gW10pO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlRWxlbWVudFNlbGVjdGlvbihlbGVtZW50OiBUKSB7XHJcbiAgICB0aGlzLm1hdFNlbGVjdGlvbi50b2dnbGUoZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBvbk1vdXNlRG93bihldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnLmRpc2FibGVNb3VzZURyYWdnaW5nKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmlzRHJhZ2dpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5zdGFydFggPSBldmVudC5wYWdlWCAtIHRoaXMudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRMZWZ0O1xyXG4gICAgdGhpcy5zdGFydFkgPSBldmVudC5wYWdlWSAtIHRoaXMudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRUb3A7XHJcbiAgICB0aGlzLnNjcm9sbExlZnQgPSB0aGlzLnRhYmxlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdDtcclxuICAgIHRoaXMuc2Nyb2xsVG9wID0gdGhpcy50YWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcDtcclxuXHJcbiAgICAvLyBjYW5jZWxpbmcgYW55IHByZXZpb3VzIGFuaW1hdGlvbiBmcmFtZVxyXG4gICAgaWYgKHRoaXMuc2Nyb2xsTW92ZW1lbnQgIT09IG51bGwpIHtcclxuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5zY3JvbGxNb3ZlbWVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbk1vdXNlTW92ZShldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnLmRpc2FibGVNb3VzZURyYWdnaW5nKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNoZWNrVGFibGVPdmVyZmxvdygpO1xyXG5cclxuICAgIGlmICghdGhpcy5pc0RyYWdnaW5nKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyB1c2luZyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgZm9yIHNtb290aGVyIHVwZGF0ZXNcclxuICAgIGlmICh0aGlzLnNjcm9sbE1vdmVtZW50ID09PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuc2Nyb2xsTW92ZW1lbnQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy50YWJsZU92ZXJmbG93KSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB4ID0gZXZlbnQucGFnZVggLSB0aGlzLnRhYmxlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0TGVmdDtcclxuICAgICAgICBjb25zdCB5ID0gZXZlbnQucGFnZVkgLSB0aGlzLnRhYmxlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0VG9wO1xyXG5cclxuICAgICAgICAvLyBjYWxjdWxhdGluZyB0aGUgZGlmZmVyZW5jZXMgaW4gbW92ZW1lbnRcclxuICAgICAgICBjb25zdCB3YWxrWCA9ICh4IC0gdGhpcy5zdGFydFgpICogMjtcclxuICAgICAgICBjb25zdCB3YWxrWSA9ICh5IC0gdGhpcy5zdGFydFkpICogMjtcclxuXHJcbiAgICAgICAgLy8gdXBkYXRpbmcgc2Nyb2xsIHBvc2l0aW9uc1xyXG4gICAgICAgIHRoaXMudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID0gdGhpcy5zY3JvbGxMZWZ0IC0gd2Fsa1g7XHJcbiAgICAgICAgdGhpcy50YWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IHRoaXMuc2Nyb2xsVG9wIC0gd2Fsa1k7XHJcblxyXG4gICAgICAgIHRoaXMuc2Nyb2xsTW92ZW1lbnQgPSBudWxsO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uTW91c2VVcCgpIHtcclxuICAgIGlmICh0aGlzLmNvbmZpZy5kaXNhYmxlTW91c2VEcmFnZ2luZykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7XHJcblxyXG4gICAgLy8gY2FuY2VsaW5nIGFueSBwZW5kaW5nIGFuaW1hdGlvblxyXG4gICAgaWYgKHRoaXMuc2Nyb2xsTW92ZW1lbnQgIT09IG51bGwpIHtcclxuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5zY3JvbGxNb3ZlbWVudCk7XHJcbiAgICAgIHRoaXMuc2Nyb2xsTW92ZW1lbnQgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcGFnaW5hdG9yQ2hhbmdlKGNoYW5nZTogUGFnZUV2ZW50KSB7XHJcbiAgICB0aGlzLnBhZ2luYXRvclVwZGF0ZS5lbWl0KGNoYW5nZSk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICByb3dIb3ZlcmVkKGluZGV4OiBudW1iZXIsIHJvdzogVCkge1xyXG4gICAgdGhpcy5ob3ZlcmVkUm93ID0gcm93O1xyXG4gICAgdGhpcy5ob3ZlcmVkUm93SW5kZXggPSBpbmRleDtcclxuICB9XHJcblxyXG4gIHJvd0hvdmVyTGVhdmUoKSB7XHJcbiAgICB0aGlzLmhvdmVyZWRSb3cgPSBudWxsO1xyXG4gICAgdGhpcy5ob3ZlcmVkUm93SW5kZXggPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBkZWZhdWx0VHJhY2tCeShpeDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBpeDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2hlY2tUYWJsZU92ZXJmbG93KCk6IHZvaWQge1xyXG4gICAgLy8gd2hlbiBkYXRhIGlzIGF2YWlsYWJsZSB3ZSBzaG91bGQgY2hlY2sgb25jZSBmb3IgdGFibGUgb3ZlcmZsb3dcclxuICAgIC8vIHdoZW4gdGhlcmUgd2FzbnQgb3ZlcmZsb3csIGJ1dCB3aWR0aCBvZiB0aGUgdGFibGUgYmVjYW1lIGJpZ2dlciwgdGhlbiB3ZSBhcmUgcmVzZXRpbmcgdGFibGVPdmVyZmxvdyB2YXJpYWJsZVxyXG4gICAgLy8gc2FtZSBmb3Igd2hlbiB0aGVyZSB3YXMgb3ZlcmZsb3csIGJ1dCBzaXplIG9mIHRoZSB0YWJsZSBpcyBzYW1lIGFzIGNvbnRhaW5lciwgc28gb3ZlcmZsb3cgaXMgZ29uZSBhbmQgd2UgcmVzZXRpbmcgdGFibGVPdmVyZmxvdyB2YXJpYWJsZSBhZ2FpblxyXG4gICAgaWYgKCh0aGlzLmRhdGFTb3VyY2U/LmRhdGEubGVuZ3RoICYmIHRoaXMudGFibGVPdmVyZmxvdyA9PT0gdW5kZWZpbmVkKSB8fFxyXG4gICAgICAoIXRoaXMudGFibGVPdmVyZmxvdyAmJiB0aGlzLnRhYmxlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGggPCB0aGlzLnRhYmxlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoKSB8fFxyXG4gICAgICAodGhpcy50YWJsZU92ZXJmbG93ICYmIHRoaXMudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCA9PT0gdGhpcy50YWJsZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCkpIHtcclxuXHJcbiAgICAgIGlmICh0aGlzLnRhYmxlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGggPCB0aGlzLnRhYmxlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoKSB7XHJcbiAgICAgICAgdGhpcy50YWJsZU92ZXJmbG93ID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnRhYmxlT3ZlcmZsb3cgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleHBvcnRUb0ZpbGUoKSB7XHJcbiAgICBpZiAoIXRoaXMuY29uZmlnLmV4cG9ydD8uZmlsZU9wdGlvbnM/LnNhdmVUb0ZpbGUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBmaWxlU3RyaW5nID0gXCJcIjtcclxuICAgIGxldCBleHRlbnNpb24hOiBFeHBvcnRGb3JtYXQ7XHJcbiAgICBzd2l0Y2ggKHRoaXMuY29uZmlnLmV4cG9ydC5maWxlT3B0aW9ucy5mb3JtYXQpIHtcclxuICAgICAgY2FzZSBFeHBvcnRGb3JtYXQuQ1NWOlxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGV4dGVuc2lvbiA9IEV4cG9ydEZvcm1hdC5DU1Y7XHJcbiAgICAgICAgZmlsZVN0cmluZyA9IEh0bWxFbGVtZW50UGFyc2VIZWxwZXIudGFibGVBc0Nzdih0aGlzLnRhYmxlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCB0aGlzLmlnbm9yZUF0dHJpYnV0ZU5hbWUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdHJhbnNsYXRlZEZpbGVOYW1lID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQodGhpcy5jb25maWcuZXhwb3J0LmZpbGVPcHRpb25zLmZpbGVOYW1lKTtcclxuICAgIFNhdmVGaWxlSGVscGVyLnNhdmVGaWxlKGZpbGVTdHJpbmcsIGAke3RyYW5zbGF0ZWRGaWxlTmFtZX0uJHtleHRlbnNpb259YCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUxvY2FsU3RvcmFnZShuZXdWYWx1ZTogU2VsZWN0ZWRDb2x1bW5Mb2NhbFN0b3JhZ2VDb25maWcpIHtcclxuICAgIHRoaXMubG9jYWxTdG9yYWdlVmFsdWUgPSBuZXdWYWx1ZTtcclxuICAgIGlmICh0aGlzLmNvbmZpZy5sb2NhbFN0b3JhZ2VLZXkgJiYgbmV3VmFsdWUpIHtcclxuICAgICAgdGhpcy5kb21TZXJ2aWNlLmxvY2FsU3RvcmFnZT8uc2V0SXRlbSh0aGlzLmNvbmZpZy5sb2NhbFN0b3JhZ2VLZXksIEpTT04uc3RyaW5naWZ5KG5ld1ZhbHVlKSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgcmVhZEZyb21Mb2NhbFN0b3JhZ2UoKSB7XHJcbiAgICBpZiAodGhpcy5jb25maWcubG9jYWxTdG9yYWdlS2V5KSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgbG9jYWxTdG9yYWdlU3RyaW5nID0gdGhpcy5kb21TZXJ2aWNlLmxvY2FsU3RvcmFnZT8uZ2V0SXRlbSh0aGlzLmNvbmZpZy5sb2NhbFN0b3JhZ2VLZXkpO1xyXG4gICAgICAgIGlmIChsb2NhbFN0b3JhZ2VTdHJpbmcpIHtcclxuICAgICAgICAgIHRoaXMubG9jYWxTdG9yYWdlVmFsdWUgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZVN0cmluZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eVxyXG4gICAgICBjYXRjaCB7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0Q29sdW1uU2VsZWN0UHJvcGVydGllcygpIHtcclxuICAgIHRoaXMuY29sdW1uU2VsZWN0QWN0aXZlID0gdGhpcy5jb25maWcuY29sdW1uU2VsZWN0Py5lbmFibGVkID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgdGhpcy51cGRhdGVEaXNwbGF5Q29sdW1ucyh0cnVlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0RmlsdGVyVmlzaWJpbGl0eSgpIHtcclxuICAgIHRoaXMuZmlsdGVyQmFyVmlzaWJsZSA9IHRoaXMubG9jYWxTdG9yYWdlVmFsdWU/LmZpbHRlcj8udmlzaWJsZSA/PyB0aGlzLmNvbmZpZz8uZmlsdGVyPy52aXNpYmxlID8/IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXROb0RhdGFSb3dQcm9wZXJ0aWVzKCkge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnLm5vRGF0YVJvdykge1xyXG4gICAgICB0aGlzLm5vRGF0YVJvd0FjdGl2ZSA9IHRydWU7XHJcbiAgICAgIHRoaXMubm9EYXRhUm93Q29uZmlnID0gdGhpcy5jb25maWcubm9EYXRhUm93O1xyXG4gICAgICB0aGlzLm5vRGF0YVJvd0NvbmZpZy5pY29uID0gdGhpcy5jb25maWcubm9EYXRhUm93Py5pY29uID8/IHRoaXMubm9EYXRhUm93SWNvbjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0RXhwb3J0UHJvcGVydGllcygpIHtcclxuICAgIGlmICh0aGlzLmNvbmZpZy5leHBvcnQ/LmVuYWJsZWQpIHtcclxuICAgICAgdGhpcy5leHBvcnRBY3RpdmUgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVEYXRhU291cmNlKCkge1xyXG4gICAgaWYgKCF0aGlzLmNvbmZpZy5kYXRhU291cmNlKSB7XHJcbiAgICAgIHRoaXMuI2RhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlPFQ+KHRoaXMuZGF0YSgpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlRGF0YVNvdXJjZURhdGEoKSB7XHJcbiAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhKCk7XHJcbiAgICBpZiAoIWRhdGEgfHwgIXRoaXMuI2RhdGFTb3VyY2UpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNob3VsZEluaXRpYWxpemVQYWdpbmF0b3IgPSAhdGhpcy4jZGF0YVNvdXJjZS5kYXRhLmxlbmd0aDtcclxuICAgIHRoaXMuI2RhdGFTb3VyY2UuZGF0YSA9IGRhdGE7XHJcblxyXG4gICAgLy8gaWYgZGF0YSBpcyBhc3luYyBsb2FkZWQsIHBhZ2UgbmVlZHMgdG8gYmUgc2V0IG9uIGZpcnN0IGxvYWQuXHJcbiAgICBpZiAoc2hvdWxkSW5pdGlhbGl6ZVBhZ2luYXRvcikge1xyXG4gICAgICB0aGlzLnVwZGF0ZVBhZ2luYXRvcih0aGlzLmNvbmZpZy5wYWdpbmF0b3I/LmluaXRpYWxQYWdlID8/IDApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVQYWdpbmF0b3IocGFnZUluZGV4OiBudW1iZXIpIHtcclxuICAgIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCA9IHBhZ2VJbmRleDtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBbbmdDbGFzcy5sdC1tZF09XCInbW9iaWxlJ1wiIGZ4TGF5b3V0PVwiY29sdW1uXCIgZnhMYXlvdXRHYXA9XCIwLjc1cmVtXCI+XHJcbiAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0Lmx0LW1kPVwiY29sdW1uXCIgZnhMYXlvdXRHYXAubHQtbWQ9XCIwLjc1cmVtXCI+XHJcbiAgICA8ZGl2XHJcbiAgICAgIGZ4RmxleFxyXG4gICAgICBmeExheW91dC5sdC1tZD1cImNvbHVtblwiXHJcbiAgICAgIGZ4TGF5b3V0R2FwPVwiMC43NXJlbVwiXHJcbiAgICAgIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIlxyXG4gICAgICBmeExheW91dEFsaWduLmx0LW1kPVwic3RhcnQgc3RhcnRcIlxyXG4gICAgICBjbGFzcz1cImFjdGlvbi1yb3dcIlxyXG4gICAgPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgY2xhc3M9XCJleHBvcnQtZGF0YVwiXHJcbiAgICAgICAgbWF0LXN0cm9rZWQtYnV0dG9uXHJcbiAgICAgICAgY29sb3I9XCJhY2NlbnRcIlxyXG4gICAgICAgICpuZ0lmPVwiZXhwb3J0QWN0aXZlXCJcclxuICAgICAgICAoY2xpY2spPVwiZXhwb3J0KClcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPmNsb3VkX2Rvd25sb2FkPC9zcGFuPlxyXG4gICAgICAgIDxzcGFuPnt7IFwiTVVMVElfRlVOQ1RJT05BTF9UQUJMRS5FWFBPUlRcIiB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgKm5nSWY9XCJmaWx0ZXJBY3RpdmUgJiYgc2hvd0ZpbHRlclRvZ2dsZVwiXHJcbiAgICAgICAgZnhGbGV4XHJcbiAgICAgICAgZnhMYXlvdXRHYXA9XCIwLjVyZW1cIlxyXG4gICAgICAgIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgW2NsYXNzLmZpbHRlci1hY3RpdmVdPVwiZmlsdGVyQmFyVmlzaWJsZVwiXHJcbiAgICAgICAgICBtYXQtc3Ryb2tlZC1idXR0b25cclxuICAgICAgICAgIGNvbG9yPVwiYWNjZW50XCJcclxuICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVGaWx0ZXJCYXIoKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPmZpbHRlcl9saXN0PC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4+e3sgXCJNVUxUSV9GVU5DVElPTkFMX1RBQkxFLkZJTFRFUl9UT0dHTEVcIiB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgPGRpdiAqbmdJZj1cInNob3dGaWx0ZXJSZXNldFwiIGNsYXNzPVwiY2xlYXItZmlsdGVycy13cmFwcGVyXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiY2xlYXJGaWx0ZXJzKClcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXZcclxuICAgICAgKm5nSWY9XCJzaG93U2VhcmNoXCJcclxuICAgICAgZnhMYXlvdXQ9XCJyb3dcIlxyXG4gICAgICBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCJcclxuICAgICAgY2xhc3M9XCJ3aWxkLXNlYXJjaC13cmFwcGVyXCJcclxuICAgID5cclxuICAgICAgPG1hdC1pY29uXHJcbiAgICAgICAgY2xhc3M9XCJzZWFyY2gtaWNvblwiXHJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiaGlkZVNlYXJjaFRvb2x0aXAgPyAnJyA6IChzZWFyY2hUb29sdGlwIHwgdHJhbnNsYXRlKVwiXHJcbiAgICAgICAgPnNlYXJjaDwvbWF0LWljb25cclxuICAgICAgPlxyXG4gICAgICA8aW5wdXRcclxuICAgICAgICBbdmFsdWVdPVwiY29uZmlnLmZpbHRlcj8uc2V0dGluZ3M/LnNlYXJjaFZhbHVlID8/ICcnXCJcclxuICAgICAgICAjd2lsZFNlYXJjaFxyXG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwic2VhcmNoVGl0bGUgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgIChrZXl1cCk9XCJzZWFyY2goJGV2ZW50KVwiXHJcbiAgICAgIC8+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICAqbmdJZj1cInNob3dTZWFyY2hDbGVhckJ1dHRvbiAmJiB3aWxkU2VhcmNoLnZhbHVlXCJcclxuICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICBjbGFzcz1cIndpbGQtc2VhcmNoLWNsZWFyLWJ0blwiXHJcbiAgICAgICAgKGNsaWNrKT1cIndpbGRTZWFyY2gudmFsdWUgPSAnJzsgc2VhcmNoKHsgdGFyZ2V0OiB7IHZhbHVlOiAnJyB9IH0pXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2FkZGl0aW9uYWxBY3Rpb25zXVwiPjwvbmctY29udGVudD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPHRsZC1maWx0ZXItYmFyXHJcbiAgICAqbmdJZj1cImNvbmZpZy5maWx0ZXIgJiYgY29uZmlnLmZpbHRlci5lbmFibGVkXCJcclxuICAgICNmaWx0ZXJCYXJcclxuICAgIFtmaWx0ZXJSb3dWaXNpYmxlXT1cImZpbHRlckJhclZpc2libGVcIlxyXG4gICAgW3NldHRpbmdzXT1cImNvbmZpZy5maWx0ZXIuc2V0dGluZ3NcIlxyXG4gICAgKGZpbHRlckJhckNoYW5nZSk9XCJmaWx0ZXJzQ2hhbmdlZCgkZXZlbnQpXCJcclxuICA+XHJcbiAgPC90bGQtZmlsdGVyLWJhcj5cclxuXHJcbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2JhdGNoQWN0aW9uc11cIj48L25nLWNvbnRlbnQ+XHJcblxyXG4gIEBpZihjb25maWcucGFnaW5hdG9yPy5lbmFibGVkKXtcclxuICAgIEBsZXQgcGFnaW5hdG9yQ29uZmlnID0gY29uZmlnLnBhZ2luYXRvciE7XHJcblxyXG4gICAgPG1hdC1wYWdpbmF0b3IgW2hpZGVQYWdlU2l6ZV09XCIhcGFnaW5hdG9yQ29uZmlnLnNob3dQYWdlU2l6ZVwiIFtzaG93Rmlyc3RMYXN0QnV0dG9uc109XCJwYWdpbmF0b3JDb25maWcuc2hvd0ZpcnN0TGFzdEJ1dHRvbnNcIlxyXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCInTVVMVElfRlVOQ1RJT05BTF9UQUJMRS5QQUdJTkFUT1JfTEFCRUwnIHwgdHJhbnNsYXRlXCIgW3BhZ2VTaXplT3B0aW9uc109XCJwYWdpbmF0b3JDb25maWcucGFnZVNpemVPcHRpb25zID8/IFsxMF1cIiAocGFnZSk9XCJwYWdpbmF0b3JDaGFuZ2UoJGV2ZW50KVwiPlxyXG4gICAgPC9tYXQtcGFnaW5hdG9yPlxyXG4gIH1cclxuICA8ZGl2XHJcbiAgICAjdGFibGVDb250YWluZXJcclxuICAgIGNsYXNzPVwidGFibGUtb3ZlcmZsb3dcIlxyXG4gICAgW2NsYXNzLnRhYmxlLXN0aWNreS1oZWFkZXJdPVwiY29uZmlnPy5zdGlja3lIZWFkZXJcIlxyXG4gICAgW2NsYXNzLnRhYmxlLWRyYWdhYmxlXT1cInRhYmxlT3ZlcmZsb3cgJiYgIWNvbmZpZz8uZGlzYWJsZU1vdXNlRHJhZ2dpbmdcIlxyXG4gICAgKG1vdXNlZG93bik9XCJvbk1vdXNlRG93bigkZXZlbnQpXCJcclxuICAgIChtb3VzZXVwKT1cIm9uTW91c2VVcCgpXCJcclxuICAgIChtb3VzZWxlYXZlKT1cIm9uTW91c2VVcCgpXCJcclxuICAgIChtb3VzZW1vdmUpPVwib25Nb3VzZU1vdmUoJGV2ZW50KVwiXHJcbiAgPlxyXG4gICAgPHRhYmxlXHJcbiAgICAgICN0YWJsZVxyXG4gICAgICBtYXQtdGFibGVcclxuICAgICAgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZSFcIlxyXG4gICAgICBbdHJhY2tCeV09XCJ0cmFja0J5Rm5cIlxyXG4gICAgPlxyXG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbiAgICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09XCJiYXRjaENvbHVtbk5hbWVcIj5cclxuICAgICAgICA8dGggY2xhc3M9XCJyb3ctc2VsZWN0XCIgbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGRpc2FibGUtZXhwb3J0PlxyXG4gICAgICAgICAgPG1hdC1jaGVja2JveFxyXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCInTVVMVElfRlVOQ1RJT05BTF9UQUJMRS5TRUxFQ1RfQUxMJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb25maWcuYmF0Y2hDb25maWchLmNoZWNrQm94ZXNEaXNhYmxlZFwiXHJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlQWxsUm93U2VsZWN0aW9uKClcIlxyXG4gICAgICAgICAgICBbY2hlY2tlZF09XCJtYXRTZWxlY3Rpb24uaGFzVmFsdWUoKSAmJiBpc0FsbFNlbGVjdGVkKClcIlxyXG4gICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJtYXRTZWxlY3Rpb24uaGFzVmFsdWUoKSAmJiAhaXNBbGxTZWxlY3RlZCgpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgIDwvdGg+XHJcbiAgICAgICAgPHRkXHJcbiAgICAgICAgICBjbGFzcz1cInJvdy1zZWxlY3RcIlxyXG4gICAgICAgICAgbWF0LWNlbGxcclxuICAgICAgICAgICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIlxyXG4gICAgICAgICAgZGlzYWJsZS1leHBvcnRcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bWF0LWNoZWNrYm94XHJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidNVUxUSV9GVU5DVElPTkFMX1RBQkxFLlNFTEVDVCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgIGlzUm93Q2hlY2tib3hBbHdheXNWaXNpYmxlIHx8XHJcbiAgICAgICAgICAgICAgaG92ZXJlZFJvdyA9PT0gZWxlbWVudCB8fFxyXG4gICAgICAgICAgICAgIG1hdFNlbGVjdGlvbi5pc1NlbGVjdGVkKGVsZW1lbnQpXHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJcclxuICAgICAgICAgICAgICBjb25maWcuYmF0Y2hDb25maWchLmNoZWNrQm94ZXNEaXNhYmxlZCB8fFxyXG4gICAgICAgICAgICAgIChwcmVzZWxlY3RlZEl0ZW1zLmluY2x1ZGVzKGVsZW1lbnQpICYmIGRpc2FibGVQcmVzZWxlY3RlZEl0ZW1zKVxyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcclxuICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVFbGVtZW50U2VsZWN0aW9uKGVsZW1lbnQpXCJcclxuICAgICAgICAgICAgW2NoZWNrZWRdPVwibWF0U2VsZWN0aW9uLmlzU2VsZWN0ZWQoZWxlbWVudClcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDx0clxyXG4gICAgICAgIG1hdC1oZWFkZXItcm93XHJcbiAgICAgICAgKm1hdEhlYWRlclJvd0RlZj1cImRpc3BsYXlDb2x1bW5zOyBzdGlja3k6IGNvbmZpZz8uc3RpY2t5SGVhZGVyID8/IGZhbHNlXCJcclxuICAgICAgPjwvdHI+XHJcbiAgICAgIDx0clxyXG4gICAgICAgIG1hdC1yb3dcclxuICAgICAgICAqbWF0Um93RGVmPVwibGV0IHJvdzsgbGV0IGluZGV4ID0gaW5kZXg7IGNvbHVtbnM6IGRpc3BsYXlDb2x1bW5zXCJcclxuICAgICAgICAoY2xpY2spPVwiXHJcbiAgICAgICAgICBjb25maWc/LnJvd0NsaWNrQ2FsbGJhY2sgJiYgKCFjb25maWcuZGlzYWJsZVJvd0NsaWNrIHx8ICFjb25maWc/LmRpc2FibGVSb3dDbGljayhyb3cpKVxyXG4gICAgICAgICAgICA/IGNvbmZpZz8ucm93Q2xpY2tDYWxsYmFjayhyb3cpXHJcbiAgICAgICAgICAgIDogbnVsbFxyXG4gICAgICAgIFwiXHJcbiAgICAgICAgKG1vdXNlb3Zlcik9XCJyb3dIb3ZlcmVkKGluZGV4LHJvdylcIlxyXG4gICAgICAgIChtb3VzZWxlYXZlKT1cInJvd0hvdmVyTGVhdmUoKVwiXHJcbiAgICAgICAgW2NsYXNzLnJvdy1jbGlja2FibGVdPVwiXHJcbiAgICAgICAgICBjb25maWc/LnJvd0NsaWNrQ2FsbGJhY2sgJiYgKCFjb25maWcuZGlzYWJsZVJvd0NsaWNrIHx8ICFjb25maWc/LmRpc2FibGVSb3dDbGljayhyb3cpKVxyXG4gICAgICAgIFwiXHJcbiAgICAgICAgW2NsYXNzLmhpZ2hsaWdodC1lcnJvcl09XCJoaWdobGlnaHRFcnJvckVsZW1lbnQoaW5kZXgsIHJvdylcIlxyXG4gICAgICAgIFtjbGFzcy5oaWdobGlnaHRdPVwiaXNFbGVtZW50SGlnaGxpZ2h0ZWQoaW5kZXgscm93KVwiXHJcbiAgICAgID48L3RyPlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT1cImNvbHVtblNlbGVjdENvbHVtbk5hbWVcIj5cclxuICAgICAgICA8dGggY2xhc3M9XCJyb3ctc2VsZWN0XCIgbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGRpc2FibGUtZXhwb3J0PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbi1zZWxlY3Rvci13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICBjbGFzcz1cImNvbHVtbi1zZWxlY3RvclwiXHJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgICAgY29sb3I9XCJhY2NlbnRcIlxyXG4gICAgICAgICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJjb2x1bW5NZW51XCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5tb3JlX3ZlcnQ8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC90aD5cclxuICAgICAgICA8dGRcclxuICAgICAgICAgIGNsYXNzPVwicm93LXNlbGVjdFwiXHJcbiAgICAgICAgICBtYXQtY2VsbFxyXG4gICAgICAgICAgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiXHJcbiAgICAgICAgICBkaXNhYmxlLWV4cG9ydFxyXG4gICAgICAgID48L3RkPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vRGF0YVJvd0FjdGl2ZVwiPlxyXG4gICAgICAgIDx0ciAqbWF0Tm9EYXRhUm93PlxyXG4gICAgICAgICAgPCEtLSBhZGQgcmFuZG9tIG51bWJlciB0byBtYWtlIHN1cmUgaXQgdGFrZXMgZnVsbCB3aWR0aCAtLT5cclxuICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiOTlcIj5cclxuICAgICAgICAgICAgPGxpYi1zdGF0dXMtZGlzcGxheSBbY29uZmlnXT1cIm5vRGF0YVJvd0NvbmZpZ1wiPjwvbGliLXN0YXR1cy1kaXNwbGF5PlxyXG4gICAgICAgICAgPC90ZD5cclxuICAgICAgICA8L3RyPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvdGFibGU+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPG1hdC1tZW51ICNjb2x1bW5NZW51PVwibWF0TWVudVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJjb2x1bW4tc2VsZWN0LW1lbnVcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XHJcbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29uZmlndXJhYmxlQ29sdW1uc1wiPlxyXG4gICAgICA8bWF0LWNoZWNrYm94IFsobmdNb2RlbCldPVwiY29sdW1uLnNlbGVjdGVkXCI+XHJcbiAgICAgICAge3sgY29sdW1uLmRpc3BsYXlOYW1lIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImNvbHVtbi1zZWxlY3Qtc2F2ZVwiPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgbWF0LWZsYXQtYnV0dG9uXHJcbiAgICAgICAgY29sb3I9XCJhY2NlbnRcIlxyXG4gICAgICAgIChjbGljayk9XCJ1cGRhdGVEaXNwbGF5Q29sdW1ucygpXCJcclxuICAgICAgPlxyXG4gICAgICAgIHt7IFwiTVVMVElfRlVOQ1RJT05BTF9UQUJMRS5DT0xVTU5fU0VMRUNUX1NBVkVcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L21hdC1tZW51PlxyXG4iXX0=