cmat 0.0.16 → 0.0.18

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 (498) hide show
  1. package/components/carousel/carousel.component.d.ts +136 -0
  2. package/components/carousel/carousel.interface.d.ts +38 -0
  3. package/components/carousel/index.d.ts +5 -0
  4. package/components/carousel/public-api.d.ts +2 -0
  5. package/components/custom-formly/public-api.d.ts +1 -0
  6. package/components/custom-formly/types/knob/knob.component.d.ts +36 -0
  7. package/components/custom-formly/types/table/table.component.d.ts +3 -8
  8. package/components/custom-formly/wrappers/form-field/form-field.component.d.ts +4 -4
  9. package/components/image-viewer/image-viewer.component.d.ts +76 -0
  10. package/components/image-viewer/index.d.ts +5 -0
  11. package/components/image-viewer/public-api.d.ts +1 -0
  12. package/components/knob-input/index.d.ts +5 -0
  13. package/components/knob-input/knob-input.component.d.ts +95 -0
  14. package/components/knob-input/public-api.d.ts +1 -0
  15. package/components/material-datetimepicker/datetimepicker-input.d.ts +2 -2
  16. package/components/opt-input/index.d.ts +5 -0
  17. package/components/opt-input/models/config.d.ts +14 -0
  18. package/components/opt-input/otp-input.component.d.ts +70 -0
  19. package/components/opt-input/public-api.d.ts +1 -0
  20. package/components/opt-input/utils/keyboard-util.d.ts +9 -0
  21. package/components/opt-input/utils/object-util.d.ts +3 -0
  22. package/components/org-chart/designer/chart-designer.component.d.ts +17 -0
  23. package/components/org-chart/index.d.ts +5 -0
  24. package/components/org-chart/node/chart-node.component.d.ts +17 -0
  25. package/components/org-chart/node/node.type.d.ts +22 -0
  26. package/components/org-chart/org-chart.component.d.ts +12 -0
  27. package/components/org-chart/public-api.d.ts +2 -0
  28. package/components/popover/popover.interfaces.d.ts +1 -1
  29. package/components/select-search/select-search.component.d.ts +2 -1
  30. package/components/select-table/index.d.ts +5 -0
  31. package/components/select-table/public-api.d.ts +2 -0
  32. package/components/select-table/select-table.component.d.ts +96 -0
  33. package/components/select-table/select-table.type.d.ts +20 -0
  34. package/components/select-tree/select-tree.component.d.ts +11 -12
  35. package/components/speed-dial/index.d.ts +5 -0
  36. package/components/speed-dial/public-api.d.ts +2 -0
  37. package/components/speed-dial/speed-dial.component.d.ts +63 -0
  38. package/components/transfer-picker/interface.d.ts +0 -1
  39. package/components/transfer-picker/transfer-picker-source/transfer-picker-source.component.d.ts +8 -6
  40. package/components/treetable/index.d.ts +5 -0
  41. package/components/treetable/public-api.d.ts +2 -0
  42. package/components/treetable/treetable.component.d.ts +32 -0
  43. package/components/treetable/treetable.interface.d.ts +9 -0
  44. package/directives/animate-on-scroll/animate-on-scroll.directive.d.ts +4 -4
  45. package/directives/arrow-cursor/arrow-cursor.directive.d.ts +31 -0
  46. package/directives/arrow-cursor/index.d.ts +5 -0
  47. package/directives/arrow-cursor/public-api.d.ts +1 -0
  48. package/directives/data-exporter/constants.d.ts +26 -0
  49. package/directives/data-exporter/data-exporter.directive.d.ts +18 -0
  50. package/directives/data-exporter/index.d.ts +5 -0
  51. package/directives/data-exporter/mime.d.ts +5 -0
  52. package/directives/data-exporter/options.d.ts +21 -0
  53. package/directives/data-exporter/public-api.d.ts +2 -0
  54. package/directives/data-exporter/services/exporters/csv-exporter.service.d.ts +12 -0
  55. package/directives/data-exporter/services/exporters/exporter.d.ts +4 -0
  56. package/directives/data-exporter/services/exporters/file-exporter.d.ts +8 -0
  57. package/directives/data-exporter/services/exporters/json-exporter.service.d.ts +11 -0
  58. package/directives/data-exporter/services/exporters/txt-exporter.service.d.ts +12 -0
  59. package/directives/data-exporter/services/exporters/worksheet-exporter.d.ts +10 -0
  60. package/directives/data-exporter/services/exporters/xls-exporter.service.d.ts +14 -0
  61. package/directives/data-exporter/services/exporters/xlsx-exporter.service.d.ts +9 -0
  62. package/directives/data-exporter/services/file-util.d.ts +8 -0
  63. package/directives/data-exporter/services/service-locator.service.d.ts +11 -0
  64. package/directives/debounce/abstract-debounce.directive.d.ts +1 -1
  65. package/fesm2022/cmat-animations.mjs.map +1 -1
  66. package/fesm2022/cmat-components-adapter.mjs +9 -9
  67. package/fesm2022/cmat-components-adapter.mjs.map +1 -1
  68. package/fesm2022/cmat-components-breadcrumb.mjs +10 -10
  69. package/fesm2022/cmat-components-breadcrumb.mjs.map +1 -1
  70. package/fesm2022/cmat-components-card.mjs +4 -4
  71. package/fesm2022/cmat-components-card.mjs.map +1 -1
  72. package/fesm2022/cmat-components-carousel.mjs +711 -0
  73. package/fesm2022/cmat-components-carousel.mjs.map +1 -0
  74. package/fesm2022/cmat-components-cascade.mjs +12 -12
  75. package/fesm2022/cmat-components-cascade.mjs.map +1 -1
  76. package/fesm2022/cmat-components-chip-input.mjs +5 -5
  77. package/fesm2022/cmat-components-chip-input.mjs.map +1 -1
  78. package/fesm2022/cmat-components-custom-formly.mjs +168 -155
  79. package/fesm2022/cmat-components-custom-formly.mjs.map +1 -1
  80. package/fesm2022/cmat-components-date-range.mjs +5 -5
  81. package/fesm2022/cmat-components-date-range.mjs.map +1 -1
  82. package/fesm2022/cmat-components-drawer.mjs +6 -6
  83. package/fesm2022/cmat-components-drawer.mjs.map +1 -1
  84. package/fesm2022/cmat-components-fullscreen.mjs +4 -4
  85. package/fesm2022/cmat-components-fullscreen.mjs.map +1 -1
  86. package/fesm2022/cmat-components-highlight.mjs +7 -7
  87. package/fesm2022/cmat-components-highlight.mjs.map +1 -1
  88. package/fesm2022/cmat-components-image-viewer.mjs +227 -0
  89. package/fesm2022/cmat-components-image-viewer.mjs.map +1 -0
  90. package/fesm2022/cmat-components-json-editor.mjs +4 -4
  91. package/fesm2022/cmat-components-json-editor.mjs.map +1 -1
  92. package/fesm2022/cmat-components-knob-input.mjs +404 -0
  93. package/fesm2022/cmat-components-knob-input.mjs.map +1 -0
  94. package/fesm2022/cmat-components-masonry.mjs +4 -4
  95. package/fesm2022/cmat-components-masonry.mjs.map +1 -1
  96. package/fesm2022/cmat-components-material-color-picker.mjs +4 -4
  97. package/fesm2022/cmat-components-material-color-picker.mjs.map +1 -1
  98. package/fesm2022/cmat-components-material-datetimepicker.mjs +53 -53
  99. package/fesm2022/cmat-components-material-datetimepicker.mjs.map +1 -1
  100. package/fesm2022/cmat-components-navigation.mjs +51 -51
  101. package/fesm2022/cmat-components-navigation.mjs.map +1 -1
  102. package/fesm2022/cmat-components-opt-input.mjs +457 -0
  103. package/fesm2022/cmat-components-opt-input.mjs.map +1 -0
  104. package/fesm2022/cmat-components-org-chart.mjs +141 -0
  105. package/fesm2022/cmat-components-org-chart.mjs.map +1 -0
  106. package/fesm2022/cmat-components-pagination.mjs +13 -13
  107. package/fesm2022/cmat-components-pagination.mjs.map +1 -1
  108. package/fesm2022/cmat-components-password-strength.mjs +12 -12
  109. package/fesm2022/cmat-components-password-strength.mjs.map +1 -1
  110. package/fesm2022/cmat-components-popover.mjs +10 -10
  111. package/fesm2022/cmat-components-popover.mjs.map +1 -1
  112. package/fesm2022/cmat-components-progress-bar.mjs +4 -4
  113. package/fesm2022/cmat-components-progress-bar.mjs.map +1 -1
  114. package/fesm2022/cmat-components-rating.mjs +4 -4
  115. package/fesm2022/cmat-components-rating.mjs.map +1 -1
  116. package/fesm2022/cmat-components-select-search.mjs +11 -11
  117. package/fesm2022/cmat-components-select-search.mjs.map +1 -1
  118. package/fesm2022/cmat-components-select-table.mjs +658 -0
  119. package/fesm2022/cmat-components-select-table.mjs.map +1 -0
  120. package/fesm2022/cmat-components-select-tree.mjs +75 -57
  121. package/fesm2022/cmat-components-select-tree.mjs.map +1 -1
  122. package/fesm2022/cmat-components-speed-dial.mjs +312 -0
  123. package/fesm2022/cmat-components-speed-dial.mjs.map +1 -0
  124. package/fesm2022/cmat-components-timeline.mjs +14 -14
  125. package/fesm2022/cmat-components-timeline.mjs.map +1 -1
  126. package/fesm2022/cmat-components-toast.mjs +11 -11
  127. package/fesm2022/cmat-components-toast.mjs.map +1 -1
  128. package/fesm2022/cmat-components-transfer-picker.mjs +60 -41
  129. package/fesm2022/cmat-components-transfer-picker.mjs.map +1 -1
  130. package/fesm2022/cmat-components-treetable.mjs +122 -0
  131. package/fesm2022/cmat-components-treetable.mjs.map +1 -0
  132. package/fesm2022/cmat-components-upload.mjs +11 -11
  133. package/fesm2022/cmat-components-upload.mjs.map +1 -1
  134. package/fesm2022/cmat-directives-animate-on-scroll.mjs +21 -21
  135. package/fesm2022/cmat-directives-animate-on-scroll.mjs.map +1 -1
  136. package/fesm2022/cmat-directives-arrow-cursor.mjs +184 -0
  137. package/fesm2022/cmat-directives-arrow-cursor.mjs.map +1 -0
  138. package/fesm2022/cmat-directives-autofocus.mjs +3 -3
  139. package/fesm2022/cmat-directives-autofocus.mjs.map +1 -1
  140. package/fesm2022/cmat-directives-data-exporter.mjs +324 -0
  141. package/fesm2022/cmat-directives-data-exporter.mjs.map +1 -0
  142. package/fesm2022/cmat-directives-debounce.mjs +9 -9
  143. package/fesm2022/cmat-directives-debounce.mjs.map +1 -1
  144. package/fesm2022/cmat-directives-digit-only.mjs +8 -6
  145. package/fesm2022/cmat-directives-digit-only.mjs.map +1 -1
  146. package/fesm2022/cmat-directives-equal-validator.mjs +3 -3
  147. package/fesm2022/cmat-directives-equal-validator.mjs.map +1 -1
  148. package/fesm2022/cmat-lib-mock-api.mjs +6 -6
  149. package/fesm2022/cmat-lib-mock-api.mjs.map +1 -1
  150. package/fesm2022/cmat-pipes-bytes.mjs +3 -3
  151. package/fesm2022/cmat-pipes-bytes.mjs.map +1 -1
  152. package/fesm2022/cmat-pipes-date-format.mjs +3 -3
  153. package/fesm2022/cmat-pipes-date-format.mjs.map +1 -1
  154. package/fesm2022/cmat-pipes-find-by-key.mjs +3 -3
  155. package/fesm2022/cmat-pipes-find-by-key.mjs.map +1 -1
  156. package/fesm2022/cmat-pipes-group-by.mjs +3 -3
  157. package/fesm2022/cmat-pipes-group-by.mjs.map +1 -1
  158. package/fesm2022/cmat-pipes-keys.mjs +3 -3
  159. package/fesm2022/cmat-pipes-keys.mjs.map +1 -1
  160. package/fesm2022/cmat-pipes-secure.mjs +3 -3
  161. package/fesm2022/cmat-pipes-secure.mjs.map +1 -1
  162. package/fesm2022/cmat-pipes-uppercase.mjs +3 -3
  163. package/fesm2022/cmat-pipes-uppercase.mjs.map +1 -1
  164. package/fesm2022/cmat-services-alert.mjs +3 -3
  165. package/fesm2022/cmat-services-alert.mjs.map +1 -1
  166. package/fesm2022/cmat-services-config.mjs +6 -6
  167. package/fesm2022/cmat-services-config.mjs.map +1 -1
  168. package/fesm2022/cmat-services-confirmation.mjs +7 -7
  169. package/fesm2022/cmat-services-confirmation.mjs.map +1 -1
  170. package/fesm2022/cmat-services-data.mjs +5 -5
  171. package/fesm2022/cmat-services-data.mjs.map +1 -1
  172. package/fesm2022/cmat-services-export-as.mjs +211 -0
  173. package/fesm2022/cmat-services-export-as.mjs.map +1 -0
  174. package/fesm2022/cmat-services-loading.mjs +6 -6
  175. package/fesm2022/cmat-services-loading.mjs.map +1 -1
  176. package/fesm2022/cmat-services-local-storage.mjs +3 -3
  177. package/fesm2022/cmat-services-local-storage.mjs.map +1 -1
  178. package/fesm2022/cmat-services-media-watcher.mjs +3 -3
  179. package/fesm2022/cmat-services-media-watcher.mjs.map +1 -1
  180. package/fesm2022/cmat-services-platform.mjs +3 -3
  181. package/fesm2022/cmat-services-platform.mjs.map +1 -1
  182. package/fesm2022/cmat-services-splash-screen.mjs +3 -3
  183. package/fesm2022/cmat-services-splash-screen.mjs.map +1 -1
  184. package/fesm2022/cmat-services-title.mjs +3 -3
  185. package/fesm2022/cmat-services-title.mjs.map +1 -1
  186. package/fesm2022/cmat-services-translation.mjs +3 -3
  187. package/fesm2022/cmat-services-translation.mjs.map +1 -1
  188. package/fesm2022/cmat-services-utils.mjs +35 -3
  189. package/fesm2022/cmat-services-utils.mjs.map +1 -1
  190. package/fesm2022/cmat-validators.mjs.map +1 -1
  191. package/fesm2022/cmat-version.mjs.map +1 -1
  192. package/icons/arrow-cursor.svg +1 -1
  193. package/package.json +81 -147
  194. package/services/data/data.service.d.ts +1 -1
  195. package/services/export-as/export-as-config.model.d.ts +8 -0
  196. package/services/export-as/export-as.service.d.ts +43 -0
  197. package/services/export-as/index.d.ts +5 -0
  198. package/services/export-as/public-api.d.ts +2 -0
  199. package/services/utils/utils.service.d.ts +4 -0
  200. package/styles/overrides/angular-material.scss +95 -13
  201. package/esm2022/animations/cmat-animations.mjs +0 -5
  202. package/esm2022/animations/defaults.mjs +0 -12
  203. package/esm2022/animations/dropdown.mjs +0 -26
  204. package/esm2022/animations/expand-collapse.mjs +0 -17
  205. package/esm2022/animations/fade.mjs +0 -170
  206. package/esm2022/animations/public-api.mjs +0 -19
  207. package/esm2022/animations/shake.mjs +0 -59
  208. package/esm2022/animations/slide.mjs +0 -124
  209. package/esm2022/animations/transform.mjs +0 -16
  210. package/esm2022/animations/zoom.mjs +0 -38
  211. package/esm2022/cmat.mjs +0 -5
  212. package/esm2022/components/adapter/cmat-components-adapter.mjs +0 -5
  213. package/esm2022/components/adapter/datetime-adapter.mjs +0 -127
  214. package/esm2022/components/adapter/datetime-formats.mjs +0 -3
  215. package/esm2022/components/adapter/dayjs-date-adapter.mjs +0 -198
  216. package/esm2022/components/adapter/dayjs-date-formats.mjs +0 -12
  217. package/esm2022/components/adapter/dayjs-datetime-adapter.mjs +0 -100
  218. package/esm2022/components/adapter/dayjs-datetime-formats.mjs +0 -21
  219. package/esm2022/components/adapter/native-datetime-adapter.mjs +0 -130
  220. package/esm2022/components/adapter/native-datetime-formats.mjs +0 -15
  221. package/esm2022/components/adapter/public-api.mjs +0 -9
  222. package/esm2022/components/breadcrumb/breadcrumb-item.directive.mjs +0 -19
  223. package/esm2022/components/breadcrumb/breadcrumb.component.mjs +0 -94
  224. package/esm2022/components/breadcrumb/breadcrumb.service.mjs +0 -333
  225. package/esm2022/components/breadcrumb/cmat-components-breadcrumb.mjs +0 -5
  226. package/esm2022/components/breadcrumb/public-api.mjs +0 -6
  227. package/esm2022/components/breadcrumb/types/breadcrumb.config.mjs +0 -2
  228. package/esm2022/components/breadcrumb/types/breadcrumb.mjs +0 -2
  229. package/esm2022/components/card/card.component.mjs +0 -49
  230. package/esm2022/components/card/card.types.mjs +0 -2
  231. package/esm2022/components/card/cmat-components-card.mjs +0 -5
  232. package/esm2022/components/card/public-api.mjs +0 -3
  233. package/esm2022/components/cascade/cascade-bottom-sheet/cascade-bottom-sheet.component.mjs +0 -49
  234. package/esm2022/components/cascade/cascade-list/cascade-list.component.mjs +0 -384
  235. package/esm2022/components/cascade/cascade-menu/cascade-menu.component.mjs +0 -22
  236. package/esm2022/components/cascade/cmat-components-cascade.mjs +0 -5
  237. package/esm2022/components/cascade/options.interface.mjs +0 -2
  238. package/esm2022/components/cascade/public-api.mjs +0 -4
  239. package/esm2022/components/chip-input/chip-input.component.mjs +0 -251
  240. package/esm2022/components/chip-input/cmat-components-chip-input.mjs +0 -5
  241. package/esm2022/components/chip-input/public-api.mjs +0 -2
  242. package/esm2022/components/custom-formly/cmat-components-custom-formly.mjs +0 -5
  243. package/esm2022/components/custom-formly/extension/addons.extension.mjs +0 -13
  244. package/esm2022/components/custom-formly/public-api.mjs +0 -29
  245. package/esm2022/components/custom-formly/types/button/button.component.mjs +0 -81
  246. package/esm2022/components/custom-formly/types/cascade/cascade.component.mjs +0 -71
  247. package/esm2022/components/custom-formly/types/checklist/checklist.component.mjs +0 -161
  248. package/esm2022/components/custom-formly/types/chips/chips.component.mjs +0 -55
  249. package/esm2022/components/custom-formly/types/color-picker/color-picker.component.mjs +0 -15
  250. package/esm2022/components/custom-formly/types/date-range/date-range.component.mjs +0 -25
  251. package/esm2022/components/custom-formly/types/datepicker/datepicker.component.mjs +0 -51
  252. package/esm2022/components/custom-formly/types/multicheckbox/multicheckbox.component.mjs +0 -88
  253. package/esm2022/components/custom-formly/types/number/number.component.mjs +0 -27
  254. package/esm2022/components/custom-formly/types/quill/quill.component.mjs +0 -171
  255. package/esm2022/components/custom-formly/types/radio/radio.component.mjs +0 -87
  256. package/esm2022/components/custom-formly/types/rating/rating.component.mjs +0 -27
  257. package/esm2022/components/custom-formly/types/repeat/repeat.component.mjs +0 -25
  258. package/esm2022/components/custom-formly/types/select/select.component.mjs +0 -167
  259. package/esm2022/components/custom-formly/types/select-tree/select-tree.component.mjs +0 -66
  260. package/esm2022/components/custom-formly/types/stepper/horizontal/stepper.component.mjs +0 -28
  261. package/esm2022/components/custom-formly/types/stepper/stepper.type.mjs +0 -2
  262. package/esm2022/components/custom-formly/types/stepper/vertical/stepper.component.mjs +0 -28
  263. package/esm2022/components/custom-formly/types/table/table.component.mjs +0 -127
  264. package/esm2022/components/custom-formly/types/tabs/tab.component.mjs +0 -16
  265. package/esm2022/components/custom-formly/types/tags/tags.component.mjs +0 -146
  266. package/esm2022/components/custom-formly/types/textarea/textarea.component.mjs +0 -25
  267. package/esm2022/components/custom-formly/types/upload/upload.component.mjs +0 -58
  268. package/esm2022/components/custom-formly/wrappers/addons/addons.component.mjs +0 -92
  269. package/esm2022/components/custom-formly/wrappers/card/card.component.mjs +0 -14
  270. package/esm2022/components/custom-formly/wrappers/expansion/expansion.component.mjs +0 -14
  271. package/esm2022/components/custom-formly/wrappers/form-field/form-field.component.mjs +0 -47
  272. package/esm2022/components/custom-formly/wrappers/panel/panel.component.mjs +0 -12
  273. package/esm2022/components/date-range/cmat-components-date-range.mjs +0 -5
  274. package/esm2022/components/date-range/date-range.component.mjs +0 -558
  275. package/esm2022/components/date-range/public-api.mjs +0 -2
  276. package/esm2022/components/drawer/cmat-components-drawer.mjs +0 -5
  277. package/esm2022/components/drawer/drawer.component.mjs +0 -301
  278. package/esm2022/components/drawer/drawer.service.mjs +0 -41
  279. package/esm2022/components/drawer/drawer.types.mjs +0 -2
  280. package/esm2022/components/drawer/public-api.mjs +0 -4
  281. package/esm2022/components/fullscreen/cmat-components-fullscreen.mjs +0 -5
  282. package/esm2022/components/fullscreen/fullscreen.component.mjs +0 -44
  283. package/esm2022/components/fullscreen/public-api.mjs +0 -2
  284. package/esm2022/components/highlight/cmat-components-highlight.mjs +0 -5
  285. package/esm2022/components/highlight/highlight.component.mjs +0 -80
  286. package/esm2022/components/highlight/highlight.service.mjs +0 -47
  287. package/esm2022/components/highlight/public-api.mjs +0 -3
  288. package/esm2022/components/json-editor/cmat-components-json-editor.mjs +0 -5
  289. package/esm2022/components/json-editor/json-editor.component.mjs +0 -176
  290. package/esm2022/components/json-editor/public-api.mjs +0 -2
  291. package/esm2022/components/masonry/cmat-components-masonry.mjs +0 -5
  292. package/esm2022/components/masonry/masonry.component.mjs +0 -54
  293. package/esm2022/components/masonry/public-api.mjs +0 -2
  294. package/esm2022/components/material-color-picker/base-color.mjs +0 -13
  295. package/esm2022/components/material-color-picker/cmat-components-material-color-picker.mjs +0 -5
  296. package/esm2022/components/material-color-picker/material-color-picker.component.mjs +0 -147
  297. package/esm2022/components/material-color-picker/public-api.mjs +0 -3
  298. package/esm2022/components/material-color-picker/selected-color.mjs +0 -3
  299. package/esm2022/components/material-datetimepicker/calendar-body.mjs +0 -76
  300. package/esm2022/components/material-datetimepicker/calendar.mjs +0 -670
  301. package/esm2022/components/material-datetimepicker/clock.mjs +0 -290
  302. package/esm2022/components/material-datetimepicker/cmat-components-material-datetimepicker.mjs +0 -5
  303. package/esm2022/components/material-datetimepicker/datetimepicker-animations.mjs +0 -34
  304. package/esm2022/components/material-datetimepicker/datetimepicker-errors.mjs +0 -6
  305. package/esm2022/components/material-datetimepicker/datetimepicker-filtertype.mjs +0 -8
  306. package/esm2022/components/material-datetimepicker/datetimepicker-input.mjs +0 -341
  307. package/esm2022/components/material-datetimepicker/datetimepicker-intl.mjs +0 -63
  308. package/esm2022/components/material-datetimepicker/datetimepicker-toggle.mjs +0 -87
  309. package/esm2022/components/material-datetimepicker/datetimepicker-types.mjs +0 -2
  310. package/esm2022/components/material-datetimepicker/datetimepicker.mjs +0 -531
  311. package/esm2022/components/material-datetimepicker/month-view.mjs +0 -141
  312. package/esm2022/components/material-datetimepicker/multi-year-view.mjs +0 -197
  313. package/esm2022/components/material-datetimepicker/public-api.mjs +0 -11
  314. package/esm2022/components/material-datetimepicker/time.mjs +0 -455
  315. package/esm2022/components/material-datetimepicker/year-view.mjs +0 -124
  316. package/esm2022/components/navigation/cmat-components-navigation.mjs +0 -5
  317. package/esm2022/components/navigation/horizontal/components/basic/basic.component.mjs +0 -70
  318. package/esm2022/components/navigation/horizontal/components/branch/branch.component.mjs +0 -82
  319. package/esm2022/components/navigation/horizontal/components/divider/divider.component.mjs +0 -47
  320. package/esm2022/components/navigation/horizontal/components/spacer/spacer.component.mjs +0 -47
  321. package/esm2022/components/navigation/horizontal/horizontal.component.mjs +0 -87
  322. package/esm2022/components/navigation/navigation.service.mjs +0 -140
  323. package/esm2022/components/navigation/navigation.types.mjs +0 -3
  324. package/esm2022/components/navigation/public-api.mjs +0 -5
  325. package/esm2022/components/navigation/vertical/components/aside/aside.component.mjs +0 -162
  326. package/esm2022/components/navigation/vertical/components/basic/basic.component.mjs +0 -60
  327. package/esm2022/components/navigation/vertical/components/collapsable/collapsable.component.mjs +0 -277
  328. package/esm2022/components/navigation/vertical/components/divider/divider.component.mjs +0 -56
  329. package/esm2022/components/navigation/vertical/components/group/group.component.mjs +0 -78
  330. package/esm2022/components/navigation/vertical/components/spacer/spacer.component.mjs +0 -56
  331. package/esm2022/components/navigation/vertical/vertical.component.mjs +0 -584
  332. package/esm2022/components/pagination/cmat-components-pagination.mjs +0 -5
  333. package/esm2022/components/pagination/pagination.component.mjs +0 -67
  334. package/esm2022/components/pagination/pagination.directive.mjs +0 -197
  335. package/esm2022/components/pagination/pagination.instance.mjs +0 -2
  336. package/esm2022/components/pagination/pagination.pipe.mjs +0 -100
  337. package/esm2022/components/pagination/pagination.service.mjs +0 -90
  338. package/esm2022/components/pagination/public-api.mjs +0 -6
  339. package/esm2022/components/password-strength/animations/index.mjs +0 -48
  340. package/esm2022/components/password-strength/cmat-components-password-strength.mjs +0 -5
  341. package/esm2022/components/password-strength/enum.mjs +0 -17
  342. package/esm2022/components/password-strength/mat-pass-toggle-visibility/mat-pass-toggle-visibility.component.mjs +0 -27
  343. package/esm2022/components/password-strength/mat-password-strength/mat-password-strength.component.mjs +0 -206
  344. package/esm2022/components/password-strength/mat-password-strength-info/mat-password-strength-info.component.mjs +0 -150
  345. package/esm2022/components/password-strength/mat-password-strength-validator.mjs +0 -36
  346. package/esm2022/components/password-strength/public-api.mjs +0 -4
  347. package/esm2022/components/password-strength/regexp.class.mjs +0 -8
  348. package/esm2022/components/popover/cmat-components-popover.mjs +0 -5
  349. package/esm2022/components/popover/popover-trigger.mjs +0 -442
  350. package/esm2022/components/popover/popover.component.mjs +0 -348
  351. package/esm2022/components/popover/popover.errors.mjs +0 -27
  352. package/esm2022/components/popover/popover.interfaces.mjs +0 -2
  353. package/esm2022/components/popover/popover.target.mjs +0 -18
  354. package/esm2022/components/popover/popover.type.mjs +0 -2
  355. package/esm2022/components/popover/public-api.mjs +0 -5
  356. package/esm2022/components/progress-bar/cmat-components-progress-bar.mjs +0 -5
  357. package/esm2022/components/progress-bar/progress-bar.component.mjs +0 -58
  358. package/esm2022/components/progress-bar/public-api.mjs +0 -2
  359. package/esm2022/components/rating/cmat-components-rating.mjs +0 -5
  360. package/esm2022/components/rating/public-api.mjs +0 -2
  361. package/esm2022/components/rating/rating.component.mjs +0 -202
  362. package/esm2022/components/select-search/cmat-components-select-search.mjs +0 -5
  363. package/esm2022/components/select-search/default-options.mjs +0 -16
  364. package/esm2022/components/select-search/public-api.mjs +0 -3
  365. package/esm2022/components/select-search/select-no-entries-found.directive.mjs +0 -14
  366. package/esm2022/components/select-search/select-search-clear.directive.mjs +0 -14
  367. package/esm2022/components/select-search/select-search.component.mjs +0 -485
  368. package/esm2022/components/select-tree/cmat-components-select-tree.mjs +0 -5
  369. package/esm2022/components/select-tree/public-api.mjs +0 -4
  370. package/esm2022/components/select-tree/select-tree.component.mjs +0 -565
  371. package/esm2022/components/select-tree/select-tree.flatnode.mjs +0 -3
  372. package/esm2022/components/select-tree/select-tree.node.mjs +0 -3
  373. package/esm2022/components/timeline/cmat-components-timeline.mjs +0 -5
  374. package/esm2022/components/timeline/public-api.mjs +0 -3
  375. package/esm2022/components/timeline/timeline-item/timeline-item.component.mjs +0 -70
  376. package/esm2022/components/timeline/timeline.component.mjs +0 -107
  377. package/esm2022/components/toast/cmat-components-toast.mjs +0 -5
  378. package/esm2022/components/toast/models/global-config.model.mjs +0 -2
  379. package/esm2022/components/toast/models/toast.model.mjs +0 -2
  380. package/esm2022/components/toast/models/type.model.mjs +0 -2
  381. package/esm2022/components/toast/public-api.mjs +0 -7
  382. package/esm2022/components/toast/toast-modal.component.mjs +0 -53
  383. package/esm2022/components/toast/toast.component.mjs +0 -30
  384. package/esm2022/components/toast/toast.service.mjs +0 -122
  385. package/esm2022/components/transfer-picker/cmat-components-transfer-picker.mjs +0 -5
  386. package/esm2022/components/transfer-picker/filter/filter.component.mjs +0 -91
  387. package/esm2022/components/transfer-picker/interface.mjs +0 -17
  388. package/esm2022/components/transfer-picker/public-api.mjs +0 -8
  389. package/esm2022/components/transfer-picker/search/search.component.mjs +0 -38
  390. package/esm2022/components/transfer-picker/transfer-picker-source/transfer-picker-source.component.mjs +0 -201
  391. package/esm2022/components/transfer-picker/transfer-picker-target/transfer-picker-target.component.mjs +0 -32
  392. package/esm2022/components/transfer-picker/transfer-picker.component.mjs +0 -84
  393. package/esm2022/components/transfer-picker/transfer-picker.service.mjs +0 -137
  394. package/esm2022/components/upload/cmat-components-upload.mjs +0 -5
  395. package/esm2022/components/upload/files.type.mjs +0 -2
  396. package/esm2022/components/upload/files.util.service.mjs +0 -89
  397. package/esm2022/components/upload/public-api.mjs +0 -5
  398. package/esm2022/components/upload/upload-queue/upload-queue.component.mjs +0 -155
  399. package/esm2022/components/upload/upload.component.mjs +0 -118
  400. package/esm2022/directives/animate-on-scroll/animate-on-scroll.directive.mjs +0 -126
  401. package/esm2022/directives/animate-on-scroll/cmat-directives-animate-on-scroll.mjs +0 -5
  402. package/esm2022/directives/animate-on-scroll/public-api.mjs +0 -2
  403. package/esm2022/directives/animate-on-scroll/scroll.service.mjs +0 -38
  404. package/esm2022/directives/autofocus/autofocus.directive.mjs +0 -20
  405. package/esm2022/directives/autofocus/cmat-directives-autofocus.mjs +0 -5
  406. package/esm2022/directives/autofocus/public-api.mjs +0 -2
  407. package/esm2022/directives/debounce/abstract-debounce.directive.mjs +0 -34
  408. package/esm2022/directives/debounce/cmat-directives-debounce.mjs +0 -5
  409. package/esm2022/directives/debounce/debounce-click.directive.mjs +0 -25
  410. package/esm2022/directives/debounce/debounce-keyup.directive.mjs +0 -25
  411. package/esm2022/directives/debounce/public-api.mjs +0 -3
  412. package/esm2022/directives/digit-only/cmat-directives-digit-only.mjs +0 -5
  413. package/esm2022/directives/digit-only/digit-only.directive.mjs +0 -298
  414. package/esm2022/directives/digit-only/mask.directive.mjs +0 -84
  415. package/esm2022/directives/digit-only/public-api.mjs +0 -3
  416. package/esm2022/directives/equal-validator/cmat-directives-equal-validator.mjs +0 -5
  417. package/esm2022/directives/equal-validator/equal-validator.directive.mjs +0 -54
  418. package/esm2022/directives/equal-validator/public-api.mjs +0 -2
  419. package/esm2022/lib/mock-api/cmat-lib-mock-api.mjs +0 -5
  420. package/esm2022/lib/mock-api/mock-api.constants.mjs +0 -3
  421. package/esm2022/lib/mock-api/mock-api.interceptor.mjs +0 -73
  422. package/esm2022/lib/mock-api/mock-api.request-handler.mjs +0 -48
  423. package/esm2022/lib/mock-api/mock-api.service.mjs +0 -93
  424. package/esm2022/lib/mock-api/mock-api.types.mjs +0 -2
  425. package/esm2022/lib/mock-api/mock-api.utils.mjs +0 -16
  426. package/esm2022/lib/mock-api/public-api.mjs +0 -6
  427. package/esm2022/pipes/bytes/bytes.pipe.mjs +0 -25
  428. package/esm2022/pipes/bytes/cmat-pipes-bytes.mjs +0 -5
  429. package/esm2022/pipes/bytes/public-api.mjs +0 -2
  430. package/esm2022/pipes/date-format/cmat-pipes-date-format.mjs +0 -5
  431. package/esm2022/pipes/date-format/date-format.pipe.mjs +0 -20
  432. package/esm2022/pipes/date-format/public-api.mjs +0 -2
  433. package/esm2022/pipes/find-by-key/cmat-pipes-find-by-key.mjs +0 -5
  434. package/esm2022/pipes/find-by-key/find-by-key.pipe.mjs +0 -23
  435. package/esm2022/pipes/find-by-key/public-api.mjs +0 -2
  436. package/esm2022/pipes/group-by/cmat-pipes-group-by.mjs +0 -5
  437. package/esm2022/pipes/group-by/group-by.pipe.mjs +0 -29
  438. package/esm2022/pipes/group-by/public-api.mjs +0 -2
  439. package/esm2022/pipes/keys/cmat-pipes-keys.mjs +0 -5
  440. package/esm2022/pipes/keys/keys.pipe.mjs +0 -26
  441. package/esm2022/pipes/keys/public-api.mjs +0 -2
  442. package/esm2022/pipes/secure/cmat-pipes-secure.mjs +0 -5
  443. package/esm2022/pipes/secure/public-api.mjs +0 -2
  444. package/esm2022/pipes/secure/secure-pipe.mjs +0 -46
  445. package/esm2022/pipes/uppercase/cmat-pipes-uppercase.mjs +0 -5
  446. package/esm2022/pipes/uppercase/public-api.mjs +0 -2
  447. package/esm2022/pipes/uppercase/uppercase.pipe.mjs +0 -17
  448. package/esm2022/public-api.mjs +0 -2
  449. package/esm2022/services/alert/alert.dialog.mjs +0 -12
  450. package/esm2022/services/alert/alert.message.mjs +0 -9
  451. package/esm2022/services/alert/alert.service.mjs +0 -166
  452. package/esm2022/services/alert/cmat-services-alert.mjs +0 -5
  453. package/esm2022/services/alert/enum.mjs +0 -15
  454. package/esm2022/services/alert/public-api.mjs +0 -5
  455. package/esm2022/services/config/cmat-services-config.mjs +0 -5
  456. package/esm2022/services/config/config.constants.mjs +0 -3
  457. package/esm2022/services/config/config.service.mjs +0 -35
  458. package/esm2022/services/config/public-api.mjs +0 -4
  459. package/esm2022/services/config/urlStateConfig.service.mjs +0 -30
  460. package/esm2022/services/confirmation/cmat-services-confirmation.mjs +0 -5
  461. package/esm2022/services/confirmation/confirmation.service.mjs +0 -51
  462. package/esm2022/services/confirmation/confirmation.types.mjs +0 -2
  463. package/esm2022/services/confirmation/dialog/dialog.component.mjs +0 -25
  464. package/esm2022/services/confirmation/public-api.mjs +0 -3
  465. package/esm2022/services/data/cmat-services-data.mjs +0 -5
  466. package/esm2022/services/data/data.service.mjs +0 -169
  467. package/esm2022/services/data/public-api.mjs +0 -2
  468. package/esm2022/services/loading/cmat-services-loading.mjs +0 -5
  469. package/esm2022/services/loading/loading.interceptor.mjs +0 -29
  470. package/esm2022/services/loading/loading.service.mjs +0 -72
  471. package/esm2022/services/loading/public-api.mjs +0 -3
  472. package/esm2022/services/local-storage/cmat-services-local-storage.mjs +0 -5
  473. package/esm2022/services/local-storage/local-storage.service.mjs +0 -22
  474. package/esm2022/services/local-storage/public-api.mjs +0 -2
  475. package/esm2022/services/media-watcher/cmat-services-media-watcher.mjs +0 -5
  476. package/esm2022/services/media-watcher/media-watcher.service.mjs +0 -55
  477. package/esm2022/services/media-watcher/public-api.mjs +0 -2
  478. package/esm2022/services/platform/cmat-services-platform.mjs +0 -5
  479. package/esm2022/services/platform/platform.service.mjs +0 -46
  480. package/esm2022/services/platform/public-api.mjs +0 -2
  481. package/esm2022/services/splash-screen/cmat-services-splash-screen.mjs +0 -5
  482. package/esm2022/services/splash-screen/public-api.mjs +0 -2
  483. package/esm2022/services/splash-screen/splash-screen.service.mjs +0 -42
  484. package/esm2022/services/title/cmat-services-title.mjs +0 -5
  485. package/esm2022/services/title/public-api.mjs +0 -2
  486. package/esm2022/services/title/title.service.mjs +0 -46
  487. package/esm2022/services/translation/cmat-services-translation.mjs +0 -5
  488. package/esm2022/services/translation/public-api.mjs +0 -2
  489. package/esm2022/services/translation/translation.service.mjs +0 -62
  490. package/esm2022/services/utils/cmat-services-utils.mjs +0 -5
  491. package/esm2022/services/utils/public-api.mjs +0 -2
  492. package/esm2022/services/utils/utils.service.mjs +0 -435
  493. package/esm2022/validators/cmat-validators.mjs +0 -5
  494. package/esm2022/validators/public-api.mjs +0 -2
  495. package/esm2022/validators/validators.mjs +0 -33
  496. package/esm2022/version/cmat-version.mjs +0 -5
  497. package/esm2022/version/public-api.mjs +0 -2
  498. package/esm2022/version/version.mjs +0 -11
@@ -1,4 +0,0 @@
1
- export * from './mat-pass-toggle-visibility/mat-pass-toggle-visibility.component';
2
- export * from './mat-password-strength/mat-password-strength.component';
3
- export * from './mat-password-strength-info/mat-password-strength-info.component';
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NtYXQvY29tcG9uZW50cy9wYXNzd29yZC1zdHJlbmd0aC9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUVBQW1FLENBQUM7QUFDbEYsY0FBYyx5REFBeUQsQ0FBQztBQUN4RSxjQUFjLG1FQUFtRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9tYXQtcGFzcy10b2dnbGUtdmlzaWJpbGl0eS9tYXQtcGFzcy10b2dnbGUtdmlzaWJpbGl0eS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL21hdC1wYXNzd29yZC1zdHJlbmd0aC9tYXQtcGFzc3dvcmQtc3RyZW5ndGguY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9tYXQtcGFzc3dvcmQtc3RyZW5ndGgtaW5mby9tYXQtcGFzc3dvcmQtc3RyZW5ndGgtaW5mby5jb21wb25lbnQnO1xyXG4iXX0=
@@ -1,8 +0,0 @@
1
- // eslint-disable-next-line @typescript-eslint/naming-convention
2
- export const RegExpValidator = {
3
- 'lowerCase': RegExp(/^(?=.*?[a-z])/),
4
- 'upperCase': RegExp(/^(?=.*?[A-Z])/),
5
- 'digit': RegExp(/^(?=.*?[0-9])/),
6
- 'specialChar': RegExp(/^(?=.*?[" !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~"])/),
7
- };
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnZXhwLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY21hdC9jb21wb25lbnRzL3Bhc3N3b3JkLXN0cmVuZ3RoL3JlZ2V4cC5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxnRUFBZ0U7QUFDaEUsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHO0lBQzNCLFdBQVcsRUFBRSxNQUFNLENBQUMsZUFBZSxDQUFDO0lBQ3BDLFdBQVcsRUFBRSxNQUFNLENBQUMsZUFBZSxDQUFDO0lBQ3BDLE9BQU8sRUFBRSxNQUFNLENBQUMsZUFBZSxDQUFDO0lBQ2hDLGFBQWEsRUFBRSxNQUFNLENBQUMsK0NBQStDLENBQUM7Q0FDekUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cclxuZXhwb3J0IGNvbnN0IFJlZ0V4cFZhbGlkYXRvciA9IHtcclxuICAgICdsb3dlckNhc2UnOiBSZWdFeHAoL14oPz0uKj9bYS16XSkvKSxcclxuICAgICd1cHBlckNhc2UnOiBSZWdFeHAoL14oPz0uKj9bQS1aXSkvKSxcclxuICAgICdkaWdpdCc6IFJlZ0V4cCgvXig/PS4qP1swLTldKS8pLFxyXG4gICAgJ3NwZWNpYWxDaGFyJzogUmVnRXhwKC9eKD89Lio/W1wiICFcIiMkJSYnKCkqKywtLi86Ozw9Pj9AW1xcXV5fYHt8fX5cIl0pLyksXHJcbn07XHJcbiJdfQ==
@@ -1,5 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './public-api';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY21hdC1jb21wb25lbnRzLXBvcG92ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbWF0L2NvbXBvbmVudHMvcG9wb3Zlci9jbWF0LWNvbXBvbmVudHMtcG9wb3Zlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19
@@ -1,442 +0,0 @@
1
- import { isFakeMousedownFromScreenReader } from '@angular/cdk/a11y';
2
- import { OverlayConfig, } from '@angular/cdk/overlay';
3
- import { TemplatePortal } from '@angular/cdk/portal';
4
- import { Directive, EventEmitter, HostBinding, HostListener, Input, Optional, Output, } from '@angular/core';
5
- import { Subject } from 'rxjs';
6
- import { takeUntil } from 'rxjs/operators';
7
- import { throwCmatPopoverMissingError } from './popover.errors';
8
- import * as i0 from "@angular/core";
9
- import * as i1 from "@angular/cdk/overlay";
10
- import * as i2 from "@angular/cdk/bidi";
11
- /**
12
- * This directive is intended to be used in conjunction with an cmat-popover tag. It is
13
- * responsible for toggling the display of the provided popover instance.
14
- */
15
- export class CmatPopoverTriggerDirective {
16
- constructor(_overlay, _elementRef, _viewContainerRef, _dir, _changeDetectorRef) {
17
- this._overlay = _overlay;
18
- this._elementRef = _elementRef;
19
- this._viewContainerRef = _viewContainerRef;
20
- this._dir = _dir;
21
- this._changeDetectorRef = _changeDetectorRef;
22
- this.ariaHaspopup = true;
23
- /** Event emitted when the associated popover is opened. */
24
- this.popoverOpened = new EventEmitter();
25
- /** Event emitted when the associated popover is closed. */
26
- this.popoverClosed = new EventEmitter();
27
- this.popoverOpened$ = new Subject();
28
- this.popoverClosed$ = new Subject();
29
- this._overlayRef = null;
30
- this._popoverOpen = false;
31
- this._halt = false;
32
- // tracking input type is necessary so it's possible to only auto-focus
33
- // the first item of the list when the popover is opened via the keyboard
34
- this._openedByMouse = false;
35
- this._onDestroy = new Subject();
36
- }
37
- /** Whether the popover is open. */
38
- get popoverOpen() {
39
- return this._popoverOpen;
40
- }
41
- /** The text direction of the containing app. */
42
- get dir() {
43
- return this._dir && this._dir.value === 'rtl' ? 'rtl' : 'ltr';
44
- }
45
- onClick() {
46
- if (this.popover.triggerEvent === 'click') {
47
- this.togglePopover();
48
- }
49
- }
50
- onMouseEnter() {
51
- this._halt = false;
52
- if (this.popover.triggerEvent === 'hover') {
53
- this._mouseoverTimer = setTimeout(() => {
54
- this.openPopover();
55
- }, this.popover.enterDelay);
56
- }
57
- }
58
- onMouseLeave() {
59
- if (this.popover.triggerEvent === 'hover') {
60
- if (this._mouseoverTimer) {
61
- clearTimeout(this._mouseoverTimer);
62
- this._mouseoverTimer = null;
63
- }
64
- if (this._popoverOpen) {
65
- setTimeout(() => {
66
- if (!this.popover.closeDisabled) {
67
- this.closePopover();
68
- }
69
- }, this.popover.leaveDelay);
70
- }
71
- else {
72
- this._halt = true;
73
- }
74
- }
75
- }
76
- handleMousedown(event) {
77
- if (event && !isFakeMousedownFromScreenReader(event)) {
78
- this._openedByMouse = true;
79
- }
80
- }
81
- ngAfterViewInit() {
82
- this._checkPopover();
83
- this._setCurrentConfig();
84
- this.popover.closed.subscribe(() => this.closePopover());
85
- }
86
- ngOnDestroy() {
87
- this.destroyPopover();
88
- }
89
- /** Toggles the popover between the open and closed states. */
90
- togglePopover() {
91
- return this._popoverOpen ? this.closePopover() : this.openPopover();
92
- }
93
- /** Opens the popover. */
94
- openPopover() {
95
- if (!this._popoverOpen && !this._halt) {
96
- this._createOverlay().attach(this._portal);
97
- this._subscribeToBackdrop();
98
- this._subscribeToDetachments();
99
- this._initPopover();
100
- }
101
- }
102
- /** Closes the popover. */
103
- closePopover() {
104
- if (this._overlayRef) {
105
- this._overlayRef.detach();
106
- this._resetPopover();
107
- }
108
- this.destroyPopover();
109
- }
110
- /** Removes the popover from the DOM. */
111
- destroyPopover() {
112
- if (this._mouseoverTimer) {
113
- clearTimeout(this._mouseoverTimer);
114
- this._mouseoverTimer = null;
115
- }
116
- if (this._overlayRef) {
117
- this._overlayRef.dispose();
118
- this._overlayRef = null;
119
- this._cleanUpSubscriptions();
120
- }
121
- this._onDestroy.next();
122
- this._onDestroy.complete();
123
- }
124
- /** Focuses the popover trigger. */
125
- focus() {
126
- this._elementRef.nativeElement.focus();
127
- }
128
- /**
129
- * This method ensures that the popover closes when the overlay backdrop is clicked.
130
- * We do not use first() here because doing so would not catch clicks from within
131
- * the popover, and it would fail to unsubscribe properly. Instead, we unsubscribe
132
- * explicitly when the popover is closed or destroyed.
133
- */
134
- _subscribeToBackdrop() {
135
- if (this._overlayRef) {
136
- /** Only subscribe to backdrop if trigger event is click */
137
- if (this.triggerEvent === 'click' && this.popover.closeOnBackdropClick === true) {
138
- this._overlayRef
139
- .backdropClick()
140
- .pipe(takeUntil(this.popoverClosed$), takeUntil(this._onDestroy))
141
- .subscribe(() => {
142
- this.popover.emitCloseEvent();
143
- });
144
- }
145
- }
146
- }
147
- _subscribeToDetachments() {
148
- if (this._overlayRef) {
149
- this._overlayRef
150
- .detachments()
151
- .pipe(takeUntil(this.popoverClosed$), takeUntil(this._onDestroy))
152
- .subscribe(() => {
153
- this._setPopoverClosed();
154
- });
155
- }
156
- }
157
- /**
158
- * This method sets the popover state to open and focuses the first item if
159
- * the popover was opened via the keyboard.
160
- */
161
- _initPopover() {
162
- this._setPopoverOpened();
163
- }
164
- /**
165
- * This method resets the popover when it's closed, most importantly restoring
166
- * focus to the popover trigger if the popover was opened via the keyboard.
167
- */
168
- _resetPopover() {
169
- this._setPopoverClosed();
170
- // Focus only needs to be reset to the host element if the popover was opened
171
- // by the keyboard and manually shifted to the first popover item.
172
- if (!this._openedByMouse) {
173
- this.focus();
174
- }
175
- this._openedByMouse = false;
176
- }
177
- /** set state rather than toggle to support triggers sharing a popover */
178
- _setPopoverOpened() {
179
- if (!this._popoverOpen) {
180
- this._popoverOpen = true;
181
- this.popoverOpened$.next();
182
- this.popoverOpened.emit();
183
- }
184
- }
185
- /** set state rather than toggle to support triggers sharing a popover */
186
- _setPopoverClosed() {
187
- if (this._popoverOpen) {
188
- this._popoverOpen = false;
189
- this.popoverClosed$.next();
190
- this.popoverClosed.emit();
191
- }
192
- }
193
- /**
194
- * This method checks that a valid instance of MdPopover has been passed into
195
- * mdPopoverTriggerFor. If not, an exception is thrown.
196
- */
197
- _checkPopover() {
198
- if (!this.popover) {
199
- throwCmatPopoverMissingError();
200
- }
201
- }
202
- /**
203
- * This method creates the overlay from the provided popover's template and saves its
204
- * OverlayRef so that it can be attached to the DOM when openPopover is called.
205
- */
206
- _createOverlay() {
207
- if (!this._overlayRef) {
208
- this._portal = new TemplatePortal(this.popover.templateRef, this._viewContainerRef);
209
- const config = this._getOverlayConfig();
210
- this._subscribeToPositions(config.positionStrategy);
211
- this._overlayRef = this._overlay.create(config);
212
- }
213
- return this._overlayRef;
214
- }
215
- /**
216
- * This method builds the configuration object needed to create the overlay, the OverlayConfig.
217
- *
218
- * @returns OverlayConfig
219
- */
220
- _getOverlayConfig() {
221
- const overlayState = new OverlayConfig();
222
- overlayState.positionStrategy = this._getPosition();
223
- /** Display overlay backdrop if trigger event is click */
224
- if (this.triggerEvent === 'click') {
225
- overlayState.hasBackdrop = true;
226
- overlayState.backdropClass = 'cdk-overlay-transparent-backdrop';
227
- }
228
- overlayState.direction = this._dir;
229
- overlayState.scrollStrategy = this._getOverlayScrollStrategy(this.popover.scrollStrategy);
230
- return overlayState;
231
- }
232
- /**
233
- * This method returns the scroll strategy used by the cdk/overlay.
234
- */
235
- _getOverlayScrollStrategy(strategy) {
236
- switch (strategy) {
237
- case 'noop':
238
- return this._overlay.scrollStrategies.noop();
239
- case 'close':
240
- return this._overlay.scrollStrategies.close();
241
- case 'block':
242
- return this._overlay.scrollStrategies.block();
243
- case 'reposition':
244
- default:
245
- return this._overlay.scrollStrategies.reposition();
246
- }
247
- }
248
- /**
249
- * Listens to changes in the position of the overlay and sets the correct classes
250
- * on the popover based on the new position. This ensures the animation origin is always
251
- * correct, even if a fallback position is used for the overlay.
252
- */
253
- _subscribeToPositions(position) {
254
- this._positionSubscription = position.positionChanges.subscribe((change) => {
255
- const posX = change.connectionPair.overlayX === 'start'
256
- ? 'after'
257
- : change.connectionPair.overlayX === 'end'
258
- ? 'before'
259
- : 'center';
260
- const posY = change.connectionPair.overlayY === 'top'
261
- ? 'below'
262
- : change.connectionPair.overlayY === 'bottom'
263
- ? 'above'
264
- : 'center';
265
- const pos = this.popover.position[0] === 'above' || this.popover.position[0] === 'below'
266
- ? [posY, posX]
267
- : [posX, posY];
268
- // required for ChangeDetectionStrategy.OnPush
269
- this._changeDetectorRef.markForCheck();
270
- this.popover.setCurrentStyles(pos);
271
- this.popover.setPositionClasses(pos);
272
- });
273
- }
274
- /**
275
- * This method builds the position strategy for the overlay, so the popover is properly connected
276
- * to the trigger.
277
- *
278
- * @returns ConnectedPositionStrategy
279
- */
280
- _getPosition() {
281
- const [originX, origin2ndX, origin3rdX] = this.popover.position[0] === 'before' || this.popover.position[1] === 'after'
282
- ? ['start', 'center', 'end']
283
- : this.popover.position[0] === 'after' || this.popover.position[1] === 'before'
284
- ? ['end', 'center', 'start']
285
- : ['center', 'start', 'end'];
286
- const [originY, origin2ndY, origin3rdY] = this.popover.position[0] === 'above' || this.popover.position[1] === 'below'
287
- ? ['top', 'center', 'bottom']
288
- : this.popover.position[0] === 'below' || this.popover.position[1] === 'above'
289
- ? ['bottom', 'center', 'top']
290
- : ['center', 'top', 'bottom'];
291
- const [overlayX, overlayFallbackX] = this.popover.position[0] === 'below' || this.popover.position[0] === 'above'
292
- ? [originX, originX]
293
- : this.popover.position[0] === 'before'
294
- ? ['end', 'start']
295
- : ['start', 'end'];
296
- const [overlayY, overlayFallbackY] = this.popover.position[0] === 'before' || this.popover.position[0] === 'after'
297
- ? [originY, originY]
298
- : this.popover.position[0] === 'below'
299
- ? ['top', 'bottom']
300
- : ['bottom', 'top'];
301
- const originFallbackX = overlayX;
302
- const originFallbackY = overlayY;
303
- const offsetX = this.popover.xOffset && !isNaN(Number(this.popover.xOffset))
304
- ? Number(this.dir === 'ltr' ? this.popover.xOffset : -this.popover.xOffset)
305
- : 0;
306
- const offsetY = this.popover.yOffset && !isNaN(Number(this.popover.yOffset))
307
- ? Number(this.popover.yOffset)
308
- : 0;
309
- /**
310
- * For overriding position element, when `cmatPopoverTargetAt` has a valid element reference.
311
- * Useful for sticking popover to parent element and offsetting arrow to trigger element.
312
- * If undefined defaults to the trigger element reference.
313
- */
314
- let element = this._elementRef;
315
- if (typeof this.targetElement !== 'undefined') {
316
- this.popover.containerPositioning = true;
317
- element = this.targetElement._elementRef;
318
- }
319
- let positions = [{ originX, originY, overlayX, overlayY }];
320
- if (this.popover.position[0] === 'above' || this.popover.position[0] === 'below') {
321
- positions = [
322
- { originX, originY, overlayX, overlayY, offsetY },
323
- { originX: origin2ndX, originY, overlayX: origin2ndX, overlayY, offsetY },
324
- { originX: origin3rdX, originY, overlayX: origin3rdX, overlayY, offsetY },
325
- {
326
- originX,
327
- originY: originFallbackY,
328
- overlayX,
329
- overlayY: overlayFallbackY,
330
- offsetY: -offsetY,
331
- },
332
- {
333
- originX: origin2ndX,
334
- originY: originFallbackY,
335
- overlayX: origin2ndX,
336
- overlayY: overlayFallbackY,
337
- offsetY: -offsetY,
338
- },
339
- {
340
- originX: origin3rdX,
341
- originY: originFallbackY,
342
- overlayX: origin3rdX,
343
- overlayY: overlayFallbackY,
344
- offsetY: -offsetY,
345
- },
346
- ];
347
- }
348
- if (this.popover.position[0] === 'before' || this.popover.position[0] === 'after') {
349
- positions = [
350
- { originX, originY, overlayX, overlayY, offsetX },
351
- { originX, originY: origin2ndY, overlayX, overlayY: origin2ndY, offsetX },
352
- { originX, originY: origin3rdY, overlayX, overlayY: origin3rdY, offsetX },
353
- {
354
- originX: originFallbackX,
355
- originY,
356
- overlayX: overlayFallbackX,
357
- overlayY,
358
- offsetX: -offsetX,
359
- },
360
- {
361
- originX: originFallbackX,
362
- originY: origin2ndY,
363
- overlayX: overlayFallbackX,
364
- overlayY: origin2ndY,
365
- offsetX: -offsetX,
366
- },
367
- {
368
- originX: originFallbackX,
369
- originY: origin3rdY,
370
- overlayX: overlayFallbackX,
371
- overlayY: origin3rdY,
372
- offsetX: -offsetX,
373
- },
374
- ];
375
- }
376
- return this._overlay
377
- .position()
378
- .flexibleConnectedTo(element)
379
- .withLockedPosition()
380
- .withPositions(positions)
381
- .withDefaultOffsetX(offsetX)
382
- .withDefaultOffsetY(offsetY);
383
- }
384
- _cleanUpSubscriptions() {
385
- if (this._backdropSubscription) {
386
- this._backdropSubscription.unsubscribe();
387
- }
388
- if (this._positionSubscription) {
389
- this._positionSubscription.unsubscribe();
390
- }
391
- if (this._detachmentsSubscription) {
392
- this._detachmentsSubscription.unsubscribe();
393
- }
394
- }
395
- _setCurrentConfig() {
396
- if (this.triggerEvent) {
397
- this.popover.triggerEvent = this.triggerEvent;
398
- }
399
- this.popover.setCurrentStyles();
400
- }
401
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: CmatPopoverTriggerDirective, deps: [{ token: i1.Overlay }, { token: i0.ElementRef }, { token: i0.ViewContainerRef }, { token: i2.Directionality, optional: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive }); }
402
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.9", type: CmatPopoverTriggerDirective, isStandalone: true, selector: "[cmatPopoverTriggerFor],[cmatPopoverTargetAt],[cmatPopoverTriggerOn]", inputs: { popover: ["cmatPopoverTriggerFor", "popover"], targetElement: ["cmatPopoverTargetAt", "targetElement"], triggerEvent: ["cmatPopoverTriggerOn", "triggerEvent"] }, outputs: { popoverOpened: "popoverOpened", popoverClosed: "popoverClosed" }, host: { listeners: { "click": "onClick($event)", "mouseenter": "onMouseEnter($event)", "mouseleave": "onMouseLeave($event)", "mousedown": "handleMousedown($event)" }, properties: { "attr.aria-haspopup": "this.ariaHaspopup" } }, exportAs: ["cmatPopoverTrigger"], ngImport: i0 }); }
403
- }
404
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: CmatPopoverTriggerDirective, decorators: [{
405
- type: Directive,
406
- args: [{
407
- selector: '[cmatPopoverTriggerFor],[cmatPopoverTargetAt],[cmatPopoverTriggerOn]',
408
- standalone: true,
409
- exportAs: 'cmatPopoverTrigger'
410
- }]
411
- }], ctorParameters: () => [{ type: i1.Overlay }, { type: i0.ElementRef }, { type: i0.ViewContainerRef }, { type: i2.Directionality, decorators: [{
412
- type: Optional
413
- }] }, { type: i0.ChangeDetectorRef }], propDecorators: { ariaHaspopup: [{
414
- type: HostBinding,
415
- args: ['attr.aria-haspopup']
416
- }], popover: [{
417
- type: Input,
418
- args: ['cmatPopoverTriggerFor']
419
- }], targetElement: [{
420
- type: Input,
421
- args: ['cmatPopoverTargetAt']
422
- }], triggerEvent: [{
423
- type: Input,
424
- args: ['cmatPopoverTriggerOn']
425
- }], popoverOpened: [{
426
- type: Output
427
- }], popoverClosed: [{
428
- type: Output
429
- }], onClick: [{
430
- type: HostListener,
431
- args: ['click', ['$event']]
432
- }], onMouseEnter: [{
433
- type: HostListener,
434
- args: ['mouseenter', ['$event']]
435
- }], onMouseLeave: [{
436
- type: HostListener,
437
- args: ['mouseleave', ['$event']]
438
- }], handleMousedown: [{
439
- type: HostListener,
440
- args: ['mousedown', ['$event']]
441
- }] } });
442
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci10cmlnZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY21hdC9jb21wb25lbnRzL3BvcG92ZXIvcG9wb3Zlci10cmlnZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXBFLE9BQU8sRUFLSCxhQUFhLEdBSWhCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFHSCxTQUFTLEVBRVQsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUVMLFFBQVEsRUFDUixNQUFNLEdBRVQsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7O0FBU2hFOzs7R0FHRztBQU9ILE1BQU0sT0FBTywyQkFBMkI7SUFzQ3BDLFlBQ1ksUUFBaUIsRUFDakIsV0FBdUIsRUFDdkIsaUJBQW1DLEVBQ3ZCLElBQW9CLEVBQ2hDLGtCQUFxQztRQUpyQyxhQUFRLEdBQVIsUUFBUSxDQUFTO1FBQ2pCLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBQ3ZCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBa0I7UUFDdkIsU0FBSSxHQUFKLElBQUksQ0FBZ0I7UUFDaEMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFtQjtRQTFDZCxpQkFBWSxHQUFHLElBQUksQ0FBQztRQVV2RCwyREFBMkQ7UUFDakQsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRW5ELDJEQUEyRDtRQUNqRCxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7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QUVEOzs7OztPQUtHO0lBQ0ssWUFBWTtRQUNoQixNQUFNLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsR0FDbkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLE9BQU87WUFDekUsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUM7WUFDNUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRO2dCQUMzRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQztnQkFDNUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV6QyxNQUFNLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsR0FDbkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLE9BQU87WUFDeEUsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUM7WUFDN0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxPQUFPO2dCQUMxRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQztnQkFDN0IsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztR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QUNsRCxDQUFDO1FBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ3BDLENBQUM7OEdBdGRRLDJCQUEyQjtrR0FBM0IsMkJBQTJCOzsyRkFBM0IsMkJBQTJCO2tCQUx2QyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxzRUFBc0U7b0JBQ2hGLFVBQVUsRUFBQyxJQUFJO29CQUNmLFFBQVEsRUFBRSxvQkFBb0I7aUJBQ2pDOzswQkEyQ1EsUUFBUTt5RUF6Q3NCLFlBQVk7c0JBQTlDLFdBQVc7dUJBQUMsb0JBQW9CO2dCQUVELE9BQU87c0JBQXRDLEtBQUs7dUJBQUMsdUJBQXVCO2dCQUdBLGFBQWE7c0JBQTFDLEtBQUs7dUJBQUMscUJBQXFCO2dCQUdHLFlBQVk7c0JBQTFDLEtBQUs7dUJBQUMsc0JBQXNCO2dCQUduQixhQUFhO3NCQUF0QixNQUFNO2dCQUdHLGFBQWE7c0JBQXRCLE1BQU07Z0JBeUNQLE9BQU87c0JBRE4sWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBUWpDLFlBQVk7c0JBRFgsWUFBWTt1QkFBQyxZQUFZLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBV3RDLFlBQVk7c0JBRFgsWUFBWTt1QkFBQyxZQUFZLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBbUJ0QyxlQUFlO3NCQURkLFlBQVk7dUJBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiXHJcbmltcG9ydCB7IGlzRmFrZU1vdXNlZG93bkZyb21TY3JlZW5SZWFkZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XHJcbmltcG9ydCB7IERpcmVjdGlvbiwgRGlyZWN0aW9uYWxpdHkgfSBmcm9tICdAYW5ndWxhci9jZGsvYmlkaSc7XHJcbmltcG9ydCB7XHJcbiAgICBDb25uZWN0ZWRQb3NpdGlvbixcclxuICAgIEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneSxcclxuICAgIEhvcml6b250YWxDb25uZWN0aW9uUG9zLFxyXG4gICAgT3ZlcmxheSxcclxuICAgIE92ZXJsYXlDb25maWcsXHJcbiAgICBPdmVybGF5UmVmLFxyXG4gICAgU2Nyb2xsU3RyYXRlZ3ksXHJcbiAgICBWZXJ0aWNhbENvbm5lY3Rpb25Qb3MsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xyXG5pbXBvcnQgeyBUZW1wbGF0ZVBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xyXG5pbXBvcnQge1xyXG4gICAgQWZ0ZXJWaWV3SW5pdCxcclxuICAgIENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgRGlyZWN0aXZlLFxyXG4gICAgRWxlbWVudFJlZixcclxuICAgIEV2ZW50RW1pdHRlcixcclxuICAgIEhvc3RCaW5kaW5nLFxyXG4gICAgSG9zdExpc3RlbmVyLFxyXG4gICAgSW5wdXQsXHJcbiAgICBPbkRlc3Ryb3ksXHJcbiAgICBPcHRpb25hbCxcclxuICAgIE91dHB1dCxcclxuICAgIFZpZXdDb250YWluZXJSZWYsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IHRocm93Q21hdFBvcG92ZXJNaXNzaW5nRXJyb3IgfSBmcm9tICcuL3BvcG92ZXIuZXJyb3JzJztcclxuaW1wb3J0IHsgQ21hdFBvcG92ZXJQYW5lbCwgQ21hdFRhcmdldCB9IGZyb20gJy4vcG9wb3Zlci5pbnRlcmZhY2VzJztcclxuaW1wb3J0IHtcclxuICAgIENtYXRQb3BvdmVyUG9zaXRpb24sXHJcbiAgICBDbWF0UG9wb3ZlclBvc2l0aW9uU3RhcnQsXHJcbiAgICBDbWF0UG9wb3ZlclNjcm9sbFN0cmF0ZWd5LFxyXG4gICAgQ21hdFBvcG92ZXJUcmlnZ2VyRXZlbnQsXHJcbn0gZnJvbSAnLi9wb3BvdmVyLnR5cGUnO1xyXG5cclxuLyoqXHJcbiAqIFRoaXMgZGlyZWN0aXZlIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBhbiBjbWF0LXBvcG92ZXIgdGFnLiBJdCBpc1xyXG4gKiByZXNwb25zaWJsZSBmb3IgdG9nZ2xpbmcgdGhlIGRpc3BsYXkgb2YgdGhlIHByb3ZpZGVkIHBvcG92ZXIgaW5zdGFuY2UuXHJcbiAqL1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgICBzZWxlY3RvcjogJ1tjbWF0UG9wb3ZlclRyaWdnZXJGb3JdLFtjbWF0UG9wb3ZlclRhcmdldEF0XSxbY21hdFBvcG92ZXJUcmlnZ2VyT25dJyxcclxuICAgIHN0YW5kYWxvbmU6dHJ1ZSxcclxuICAgIGV4cG9ydEFzOiAnY21hdFBvcG92ZXJUcmlnZ2VyJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ21hdFBvcG92ZXJUcmlnZ2VyRGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWhhc3BvcHVwJykgYXJpYUhhc3BvcHVwID0gdHJ1ZTtcclxuICAgIC8qKiBSZWZlcmVuY2VzIHRoZSBwb3BvdmVyIGluc3RhbmNlIHRoYXQgdGhlIHRyaWdnZXIgaXMgYXNzb2NpYXRlZCB3aXRoLiAqL1xyXG4gICAgQElucHV0KCdjbWF0UG9wb3ZlclRyaWdnZXJGb3InKSBwb3BvdmVyITogQ21hdFBvcG92ZXJQYW5lbDtcclxuXHJcbiAgICAvKiogUmVmZXJlbmNlcyB0aGUgcG9wb3ZlciB0YXJnZXQgaW5zdGFuY2UgdGhhdCB0aGUgdHJpZ2dlciBpcyBhc3NvY2lhdGVkIHdpdGguICovXHJcbiAgICBASW5wdXQoJ2NtYXRQb3BvdmVyVGFyZ2V0QXQnKSB0YXJnZXRFbGVtZW50ITogQ21hdFRhcmdldDtcclxuXHJcbiAgICAvKiogUG9wb3ZlciB0cmlnZ2VyIGV2ZW50ICovXHJcbiAgICBASW5wdXQoJ2NtYXRQb3BvdmVyVHJpZ2dlck9uJykgdHJpZ2dlckV2ZW50ITogQ21hdFBvcG92ZXJUcmlnZ2VyRXZlbnQ7XHJcblxyXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgYXNzb2NpYXRlZCBwb3BvdmVyIGlzIG9wZW5lZC4gKi9cclxuICAgIEBPdXRwdXQoKSBwb3BvdmVyT3BlbmVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIGFzc29jaWF0ZWQgcG9wb3ZlciBpcyBjbG9zZWQuICovXHJcbiAgICBAT3V0cHV0KCkgcG9wb3ZlckNsb3NlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgICBwb3BvdmVyT3BlbmVkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgICBwb3BvdmVyQ2xvc2VkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gICAgcHJpdmF0ZSBfcG9ydGFsITogVGVtcGxhdGVQb3J0YWw7XHJcbiAgICBwcml2YXRlIF9vdmVybGF5UmVmOiBPdmVybGF5UmVmIHwgbnVsbCA9IG51bGw7XHJcbiAgICBwcml2YXRlIF9wb3BvdmVyT3BlbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBfaGFsdCA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBfYmFja2Ryb3BTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XHJcbiAgICBwcml2YXRlIF9wb3NpdGlvblN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcclxuICAgIHByaXZhdGUgX2RldGFjaG1lbnRzU3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xyXG5cclxuICAgIHByaXZhdGUgX21vdXNlb3ZlclRpbWVyOiBhbnk7XHJcblxyXG4gICAgLy8gdHJhY2tpbmcgaW5wdXQgdHlwZSBpcyBuZWNlc3Nhcnkgc28gaXQncyBwb3NzaWJsZSB0byBvbmx5IGF1dG8tZm9jdXNcclxuICAgIC8vIHRoZSBmaXJzdCBpdGVtIG9mIHRoZSBsaXN0IHdoZW4gdGhlIHBvcG92ZXIgaXMgb3BlbmVkIHZpYSB0aGUga2V5Ym9hcmRcclxuICAgIHByaXZhdGUgX29wZW5lZEJ5TW91c2UgPSBmYWxzZTtcclxuXHJcbiAgICBwcml2YXRlIF9vbkRlc3Ryb3kgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuXHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBfb3ZlcmxheTogT3ZlcmxheSxcclxuICAgICAgICBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmLFxyXG4gICAgICAgIHByaXZhdGUgX3ZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXHJcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfZGlyOiBEaXJlY3Rpb25hbGl0eSxcclxuICAgICAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuICAgICkgeyB9XHJcblxyXG4gICAgLyoqIFdoZXRoZXIgdGhlIHBvcG92ZXIgaXMgb3Blbi4gKi9cclxuICAgIGdldCBwb3BvdmVyT3BlbigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcG9wb3Zlck9wZW47XHJcbiAgICB9XHJcbiAgICAvKiogVGhlIHRleHQgZGlyZWN0aW9uIG9mIHRoZSBjb250YWluaW5nIGFwcC4gKi9cclxuICAgIGdldCBkaXIoKTogRGlyZWN0aW9uIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZGlyICYmIHRoaXMuX2Rpci52YWx1ZSA9PT0gJ3J0bCcgPyAncnRsJyA6ICdsdHInO1xyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcclxuICAgIG9uQ2xpY2soKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMucG9wb3Zlci50cmlnZ2VyRXZlbnQgPT09ICdjbGljaycpIHtcclxuICAgICAgICAgICAgdGhpcy50b2dnbGVQb3BvdmVyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0TGlzdGVuZXIoJ21vdXNlZW50ZXInLCBbJyRldmVudCddKVxyXG4gICAgb25Nb3VzZUVudGVyKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2hhbHQgPSBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5wb3BvdmVyLnRyaWdnZXJFdmVudCA9PT0gJ2hvdmVyJykge1xyXG4gICAgICAgICAgICB0aGlzLl9tb3VzZW92ZXJUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuUG9wb3ZlcigpO1xyXG4gICAgICAgICAgICB9LCB0aGlzLnBvcG92ZXIuZW50ZXJEZWxheSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCBbJyRldmVudCddKVxyXG4gICAgb25Nb3VzZUxlYXZlKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnBvcG92ZXIudHJpZ2dlckV2ZW50ID09PSAnaG92ZXInKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9tb3VzZW92ZXJUaW1lcikge1xyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX21vdXNlb3ZlclRpbWVyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX21vdXNlb3ZlclRpbWVyID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5fcG9wb3Zlck9wZW4pIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5wb3BvdmVyLmNsb3NlRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZVBvcG92ZXIoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LCB0aGlzLnBvcG92ZXIubGVhdmVEZWxheSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9oYWx0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIEBIb3N0TGlzdGVuZXIoJ21vdXNlZG93bicsIFsnJGV2ZW50J10pXHJcbiAgICBoYW5kbGVNb3VzZWRvd24oZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBpZiAoZXZlbnQgJiYgIWlzRmFrZU1vdXNlZG93bkZyb21TY3JlZW5SZWFkZXIoZXZlbnQpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX29wZW5lZEJ5TW91c2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9jaGVja1BvcG92ZXIoKTtcclxuICAgICAgICB0aGlzLl9zZXRDdXJyZW50Q29uZmlnKCk7XHJcbiAgICAgICAgdGhpcy5wb3BvdmVyLmNsb3NlZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jbG9zZVBvcG92ZXIoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5kZXN0cm95UG9wb3ZlcigpO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgLyoqIFRvZ2dsZXMgdGhlIHBvcG92ZXIgYmV0d2VlbiB0aGUgb3BlbiBhbmQgY2xvc2VkIHN0YXRlcy4gKi9cclxuICAgIHRvZ2dsZVBvcG92ZXIoKTogdm9pZCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BvcG92ZXJPcGVuID8gdGhpcy5jbG9zZVBvcG92ZXIoKSA6IHRoaXMub3BlblBvcG92ZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogT3BlbnMgdGhlIHBvcG92ZXIuICovXHJcbiAgICBvcGVuUG9wb3ZlcigpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuX3BvcG92ZXJPcGVuICYmICF0aGlzLl9oYWx0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NyZWF0ZU92ZXJsYXkoKS5hdHRhY2godGhpcy5fcG9ydGFsKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3N1YnNjcmliZVRvQmFja2Ryb3AoKTtcclxuICAgICAgICAgICAgdGhpcy5fc3Vic2NyaWJlVG9EZXRhY2htZW50cygpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5faW5pdFBvcG92ZXIoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIENsb3NlcyB0aGUgcG9wb3Zlci4gKi9cclxuICAgIGNsb3NlUG9wb3ZlcigpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5fb3ZlcmxheVJlZikge1xyXG4gICAgICAgICAgICB0aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpO1xyXG4gICAgICAgICAgICB0aGlzLl9yZXNldFBvcG92ZXIoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZGVzdHJveVBvcG92ZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogUmVtb3ZlcyB0aGUgcG9wb3ZlciBmcm9tIHRoZSBET00uICovXHJcbiAgICBkZXN0cm95UG9wb3ZlcigpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5fbW91c2VvdmVyVGltZXIpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX21vdXNlb3ZlclRpbWVyKTtcclxuICAgICAgICAgICAgdGhpcy5fbW91c2VvdmVyVGltZXIgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fb3ZlcmxheVJlZikge1xyXG4gICAgICAgICAgICB0aGlzLl9vdmVybGF5UmVmLmRpc3Bvc2UoKTtcclxuICAgICAgICAgICAgdGhpcy5fb3ZlcmxheVJlZiA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuX2NsZWFuVXBTdWJzY3JpcHRpb25zKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kubmV4dCgpO1xyXG4gICAgICAgIHRoaXMuX29uRGVzdHJveS5jb21wbGV0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBGb2N1c2VzIHRoZSBwb3BvdmVyIHRyaWdnZXIuICovXHJcbiAgICBmb2N1cygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIGVuc3VyZXMgdGhhdCB0aGUgcG9wb3ZlciBjbG9zZXMgd2hlbiB0aGUgb3ZlcmxheSBiYWNrZHJvcCBpcyBjbGlja2VkLlxyXG4gICAgICogV2UgZG8gbm90IHVzZSBmaXJzdCgpIGhlcmUgYmVjYXVzZSBkb2luZyBzbyB3b3VsZCBub3QgY2F0Y2ggY2xpY2tzIGZyb20gd2l0aGluXHJcbiAgICAgKiB0aGUgcG9wb3ZlciwgYW5kIGl0IHdvdWxkIGZhaWwgdG8gdW5zdWJzY3JpYmUgcHJvcGVybHkuIEluc3RlYWQsIHdlIHVuc3Vic2NyaWJlXHJcbiAgICAgKiBleHBsaWNpdGx5IHdoZW4gdGhlIHBvcG92ZXIgaXMgY2xvc2VkIG9yIGRlc3Ryb3llZC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfc3Vic2NyaWJlVG9CYWNrZHJvcCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5fb3ZlcmxheVJlZikge1xyXG4gICAgICAgICAgICAvKiogT25seSBzdWJzY3JpYmUgdG8gYmFja2Ryb3AgaWYgdHJpZ2dlciBldmVudCBpcyBjbGljayAqL1xyXG4gICAgICAgICAgICBpZiAodGhpcy50cmlnZ2VyRXZlbnQgPT09ICdjbGljaycgJiYgdGhpcy5wb3BvdmVyLmNsb3NlT25CYWNrZHJvcENsaWNrID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9vdmVybGF5UmVmXHJcbiAgICAgICAgICAgICAgICAgICAgLmJhY2tkcm9wQ2xpY2soKVxyXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnBvcG92ZXJDbG9zZWQkKSwgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSkpXHJcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9wb3Zlci5lbWl0Q2xvc2VFdmVudCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3N1YnNjcmliZVRvRGV0YWNobWVudHMoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuX292ZXJsYXlSZWYpIHtcclxuICAgICAgICAgICAgdGhpcy5fb3ZlcmxheVJlZlxyXG4gICAgICAgICAgICAgICAgLmRldGFjaG1lbnRzKClcclxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnBvcG92ZXJDbG9zZWQkKSwgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSkpXHJcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXRQb3BvdmVyQ2xvc2VkKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBwb3BvdmVyIHN0YXRlIHRvIG9wZW4gYW5kIGZvY3VzZXMgdGhlIGZpcnN0IGl0ZW0gaWZcclxuICAgICAqIHRoZSBwb3BvdmVyIHdhcyBvcGVuZWQgdmlhIHRoZSBrZXlib2FyZC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfaW5pdFBvcG92ZXIoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fc2V0UG9wb3Zlck9wZW5lZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgcmVzZXRzIHRoZSBwb3BvdmVyIHdoZW4gaXQncyBjbG9zZWQsIG1vc3QgaW1wb3J0YW50bHkgcmVzdG9yaW5nXHJcbiAgICAgKiBmb2N1cyB0byB0aGUgcG9wb3ZlciB0cmlnZ2VyIGlmIHRoZSBwb3BvdmVyIHdhcyBvcGVuZWQgdmlhIHRoZSBrZXlib2FyZC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfcmVzZXRQb3BvdmVyKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3NldFBvcG92ZXJDbG9zZWQoKTtcclxuXHJcbiAgICAgICAgLy8gRm9jdXMgb25seSBuZWVkcyB0byBiZSByZXNldCB0byB0aGUgaG9zdCBlbGVtZW50IGlmIHRoZSBwb3BvdmVyIHdhcyBvcGVuZWRcclxuICAgICAgICAvLyBieSB0aGUga2V5Ym9hcmQgYW5kIG1hbnVhbGx5IHNoaWZ0ZWQgdG8gdGhlIGZpcnN0IHBvcG92ZXIgaXRlbS5cclxuICAgICAgICBpZiAoIXRoaXMuX29wZW5lZEJ5TW91c2UpIHtcclxuICAgICAgICAgICAgdGhpcy5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9vcGVuZWRCeU1vdXNlID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIHNldCBzdGF0ZSByYXRoZXIgdGhhbiB0b2dnbGUgdG8gc3VwcG9ydCB0cmlnZ2VycyBzaGFyaW5nIGEgcG9wb3ZlciAqL1xyXG4gICAgcHJpdmF0ZSBfc2V0UG9wb3Zlck9wZW5lZCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuX3BvcG92ZXJPcGVuKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3BvcG92ZXJPcGVuID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucG9wb3Zlck9wZW5lZCQubmV4dCgpO1xyXG4gICAgICAgICAgICB0aGlzLnBvcG92ZXJPcGVuZWQuZW1pdCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKiogc2V0IHN0YXRlIHJhdGhlciB0aGFuIHRvZ2dsZSB0byBzdXBwb3J0IHRyaWdnZXJzIHNoYXJpbmcgYSBwb3BvdmVyICovXHJcbiAgICBwcml2YXRlIF9zZXRQb3BvdmVyQ2xvc2VkKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLl9wb3BvdmVyT3Blbikge1xyXG4gICAgICAgICAgICB0aGlzLl9wb3BvdmVyT3BlbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5wb3BvdmVyQ2xvc2VkJC5uZXh0KCk7XHJcbiAgICAgICAgICAgIHRoaXMucG9wb3ZlckNsb3NlZC5lbWl0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogIFRoaXMgbWV0aG9kIGNoZWNrcyB0aGF0IGEgdmFsaWQgaW5zdGFuY2Ugb2YgTWRQb3BvdmVyIGhhcyBiZWVuIHBhc3NlZCBpbnRvXHJcbiAgICAgKiAgbWRQb3BvdmVyVHJpZ2dlckZvci4gSWYgbm90LCBhbiBleGNlcHRpb24gaXMgdGhyb3duLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF9jaGVja1BvcG92ZXIoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnBvcG92ZXIpIHtcclxuICAgICAgICAgICAgdGhyb3dDbWF0UG9wb3Zlck1pc3NpbmdFcnJvcigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqICBUaGlzIG1ldGhvZCBjcmVhdGVzIHRoZSBvdmVybGF5IGZyb20gdGhlIHByb3ZpZGVkIHBvcG92ZXIncyB0ZW1wbGF0ZSBhbmQgc2F2ZXMgaXRzXHJcbiAgICAgKiAgT3ZlcmxheVJlZiBzbyB0aGF0IGl0IGNhbiBiZSBhdHRhY2hlZCB0byB0aGUgRE9NIHdoZW4gb3BlblBvcG92ZXIgaXMgY2FsbGVkLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF9jcmVhdGVPdmVybGF5KCk6IE92ZXJsYXlSZWYge1xyXG4gICAgICAgIGlmICghdGhpcy5fb3ZlcmxheVJlZikge1xyXG4gICAgICAgICAgICB0aGlzLl9wb3J0YWwgPSBuZXcgVGVtcGxhdGVQb3J0YWwodGhpcy5wb3BvdmVyLnRlbXBsYXRlUmVmLCB0aGlzLl92aWV3Q29udGFpbmVyUmVmKTtcclxuICAgICAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5fZ2V0T3ZlcmxheUNvbmZpZygpO1xyXG4gICAgICAgICAgICB0aGlzLl9zdWJzY3JpYmVUb1Bvc2l0aW9ucyhjb25maWcucG9zaXRpb25TdHJhdGVneSBhcyBGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3kpO1xyXG4gICAgICAgICAgICB0aGlzLl9vdmVybGF5UmVmID0gdGhpcy5fb3ZlcmxheS5jcmVhdGUoY29uZmlnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9vdmVybGF5UmVmO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgYnVpbGRzIHRoZSBjb25maWd1cmF0aW9uIG9iamVjdCBuZWVkZWQgdG8gY3JlYXRlIHRoZSBvdmVybGF5LCB0aGUgT3ZlcmxheUNvbmZpZy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyBPdmVybGF5Q29uZmlnXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX2dldE92ZXJsYXlDb25maWcoKTogT3ZlcmxheUNvbmZpZyB7XHJcbiAgICAgICAgY29uc3Qgb3ZlcmxheVN0YXRlID0gbmV3IE92ZXJsYXlDb25maWcoKTtcclxuICAgICAgICBvdmVybGF5U3RhdGUucG9zaXRpb25TdHJhdGVneSA9IHRoaXMuX2dldFBvc2l0aW9uKCk7XHJcblxyXG4gICAgICAgIC8qKiBEaXNwbGF5IG92ZXJsYXkgYmFja2Ryb3AgaWYgdHJpZ2dlciBldmVudCBpcyBjbGljayAqL1xyXG4gICAgICAgIGlmICh0aGlzLnRyaWdnZXJFdmVudCA9PT0gJ2NsaWNrJykge1xyXG4gICAgICAgICAgICBvdmVybGF5U3RhdGUuaGFzQmFja2Ryb3AgPSB0cnVlO1xyXG4gICAgICAgICAgICBvdmVybGF5U3RhdGUuYmFja2Ryb3BDbGFzcyA9ICdjZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBvdmVybGF5U3RhdGUuZGlyZWN0aW9uID0gdGhpcy5fZGlyO1xyXG4gICAgICAgIG92ZXJsYXlTdGF0ZS5zY3JvbGxTdHJhdGVneSA9IHRoaXMuX2dldE92ZXJsYXlTY3JvbGxTdHJhdGVneSh0aGlzLnBvcG92ZXIuc2Nyb2xsU3RyYXRlZ3kpO1xyXG5cclxuICAgICAgICByZXR1cm4gb3ZlcmxheVN0YXRlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgc2Nyb2xsIHN0cmF0ZWd5IHVzZWQgYnkgdGhlIGNkay9vdmVybGF5LlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF9nZXRPdmVybGF5U2Nyb2xsU3RyYXRlZ3koc3RyYXRlZ3k6IENtYXRQb3BvdmVyU2Nyb2xsU3RyYXRlZ3kpOiBTY3JvbGxTdHJhdGVneSB7XHJcbiAgICAgICAgc3dpdGNoIChzdHJhdGVneSkge1xyXG4gICAgICAgICAgICBjYXNlICdub29wJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMubm9vcCgpO1xyXG4gICAgICAgICAgICBjYXNlICdjbG9zZSc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLmNsb3NlKCk7XHJcbiAgICAgICAgICAgIGNhc2UgJ2Jsb2NrJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMuYmxvY2soKTtcclxuICAgICAgICAgICAgY2FzZSAncmVwb3NpdGlvbic6XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBMaXN0ZW5zIHRvIGNoYW5nZXMgaW4gdGhlIHBvc2l0aW9uIG9mIHRoZSBvdmVybGF5IGFuZCBzZXRzIHRoZSBjb3JyZWN0IGNsYXNzZXNcclxuICAgICAqIG9uIHRoZSBwb3BvdmVyIGJhc2VkIG9uIHRoZSBuZXcgcG9zaXRpb24uIFRoaXMgZW5zdXJlcyB0aGUgYW5pbWF0aW9uIG9yaWdpbiBpcyBhbHdheXNcclxuICAgICAqIGNvcnJlY3QsIGV2ZW4gaWYgYSBmYWxsYmFjayBwb3NpdGlvbiBpcyB1c2VkIGZvciB0aGUgb3ZlcmxheS5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfc3Vic2NyaWJlVG9Qb3NpdGlvbnMocG9zaXRpb246IEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3Bvc2l0aW9uU3Vic2NyaXB0aW9uID0gcG9zaXRpb24ucG9zaXRpb25DaGFuZ2VzLnN1YnNjcmliZSgoY2hhbmdlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBvc1ggPVxyXG4gICAgICAgICAgICAgICAgY2hhbmdlLmNvbm5lY3Rpb25QYWlyLm92ZXJsYXlYID09PSAnc3RhcnQnXHJcbiAgICAgICAgICAgICAgICAgICAgPyAnYWZ0ZXInXHJcbiAgICAgICAgICAgICAgICAgICAgOiBjaGFuZ2UuY29ubmVjdGlvblBhaXIub3ZlcmxheVggPT09ICdlbmQnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ2JlZm9yZSdcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiAnY2VudGVyJztcclxuICAgICAgICAgICAgY29uc3QgcG9zWSA9XHJcbiAgICAgICAgICAgICAgICBjaGFuZ2UuY29ubmVjdGlvblBhaXIub3ZlcmxheVkgPT09ICd0b3AnXHJcbiAgICAgICAgICAgICAgICAgICAgPyAnYmVsb3cnXHJcbiAgICAgICAgICAgICAgICAgICAgOiBjaGFuZ2UuY29ubmVjdGlvblBhaXIub3ZlcmxheVkgPT09ICdib3R0b20nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ2Fib3ZlJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICdjZW50ZXInO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgcG9zOiBDbWF0UG9wb3ZlclBvc2l0aW9uID1cclxuICAgICAgICAgICAgICAgIHRoaXMucG9wb3Zlci5wb3NpdGlvblswXSA9PT0gJ2Fib3ZlJyB8fCB0aGlzLnBvcG92ZXIucG9zaXRpb25bMF0gPT09ICdiZWxvdydcclxuICAgICAgICAgICAgICAgICAgICA/IFtwb3NZIGFzIENtYXRQb3BvdmVyUG9zaXRpb25TdGFydCwgcG9zWF1cclxuICAgICAgICAgICAgICAgICAgICA6IFtwb3NYIGFzIENtYXRQb3BvdmVyUG9zaXRpb25TdGFydCwgcG9zWV07XHJcblxyXG4gICAgICAgICAgICAvLyByZXF1aXJlZCBmb3IgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5wb3BvdmVyLnNldEN1cnJlbnRTdHlsZXMocG9zKTtcclxuICAgICAgICAgICAgdGhpcy5wb3BvdmVyLnNldFBvc2l0aW9uQ2xhc3Nlcyhwb3MpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgYnVpbGRzIHRoZSBwb3NpdGlvbiBzdHJhdGVneSBmb3IgdGhlIG92ZXJsYXksIHNvIHRoZSBwb3BvdmVyIGlzIHByb3Blcmx5IGNvbm5lY3RlZFxyXG4gICAgICogdG8gdGhlIHRyaWdnZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMgQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF9nZXRQb3NpdGlvbigpOiBGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3kge1xyXG4gICAgICAgIGNvbnN0IFtvcmlnaW5YLCBvcmlnaW4ybmRYLCBvcmlnaW4zcmRYXTogSG9yaXpvbnRhbENvbm5lY3Rpb25Qb3NbXSA9XHJcbiAgICAgICAgICAgIHRoaXMucG9wb3Zlci5wb3NpdGlvblswXSA9PT0gJ2JlZm9yZScgfHwgdGhpcy5wb3BvdmVyLnBvc2l0aW9uWzFdID09PSAnYWZ0ZXInXHJcbiAgICAgICAgICAgICAgICA/IFsnc3RhcnQnLCAnY2VudGVyJywgJ2VuZCddXHJcbiAgICAgICAgICAgICAgICA6IHRoaXMucG9wb3Zlci5wb3NpdGlvblswXSA9PT0gJ2FmdGVyJyB8fCB0aGlzLnBvcG92ZXIucG9zaXRpb25bMV0gPT09ICdiZWZvcmUnXHJcbiAgICAgICAgICAgICAgICAgICAgPyBbJ2VuZCcsICdjZW50ZXInLCAnc3RhcnQnXVxyXG4gICAgICAgICAgICAgICAgICAgIDogWydjZW50ZXInLCAnc3RhcnQnLCAnZW5kJ107XHJcblxyXG4gICAgICAgIGNvbnN0IFtvcmlnaW5ZLCBvcmlnaW4ybmRZLCBvcmlnaW4zcmRZXTogVmVydGljYWxDb25uZWN0aW9uUG9zW10gPVxyXG4gICAgICAgICAgICB0aGlzLnBvcG92ZXIucG9zaXRpb25bMF0gPT09ICdhYm92ZScgfHwgdGhpcy5wb3BvdmVyLnBvc2l0aW9uWzFdID09PSAnYmVsb3cnXHJcbiAgICAgICAgICAgICAgICA/IFsndG9wJywgJ2NlbnRlcicsICdib3R0b20nXVxyXG4gICAgICAgICAgICAgICAgOiB0aGlzLnBvcG92ZXIucG9zaXRpb25bMF0gPT09ICdiZWxvdycgfHwgdGhpcy5wb3BvdmVyLnBvc2l0aW9uWzFdID09PSAnYWJvdmUnXHJcbiAgICAgICAgICAgICAgICAgICAgPyBbJ2JvdHRvbScsICdjZW50ZXInLCAndG9wJ11cclxuICAgICAgICAgICAgICAgICAgICA6IFsnY2VudGVyJywgJ3RvcCcsICdib3R0b20nXTtcclxuXHJcbiAgICAgICAgY29uc3QgW292ZXJsYXlYLCBvdmVybGF5RmFsbGJhY2tYXTogSG9yaXpvbnRhbENvbm5lY3Rpb25Qb3NbXSA9XHJcbiAgICAgICAgICAgIHRoaXMucG9wb3Zlci5wb3NpdGlvblswXSA9PT0gJ2JlbG93JyB8fCB0aGlzLnBvcG92ZXIucG9zaXRpb25bMF0gPT09ICdhYm92ZSdcclxuICAgICAgICAgICAgICAgID8gW29yaWdpblgsIG9yaWdpblhdXHJcbiAgICAgICAgICAgICAgICA6IHRoaXMucG9wb3Zlci5wb3NpdGlvblswXSA9PT0gJ2JlZm9yZSdcclxuICAgICAgICAgICAgICAgICAgICA/IFsnZW5kJywgJ3N0YXJ0J11cclxuICAgICAgICAgICAgICAgICAgICA6IFsnc3RhcnQnLCAnZW5kJ107XHJcblxyXG4gICAgICAgIGNvbnN0IFtvdmVybGF5WSwgb3ZlcmxheUZhbGxiYWNrWV06IFZlcnRpY2FsQ29ubmVjdGlvblBvc1tdID1cclxuICAgICAgICAgICAgdGhpcy5wb3BvdmVyLnBvc2l0aW9uWzBdID09PSAnYmVmb3JlJyB8fCB0aGlzLnBvcG92ZXIucG9zaXRpb25bMF0gPT09ICdhZnRlcidcclxuICAgICAgICAgICAgICAgID8gW29yaWdpblksIG9yaWdpblldXHJcbiAgICAgICAgICAgICAgICA6IHRoaXMucG9wb3Zlci5wb3NpdGlvblswXSA9PT0gJ2JlbG93J1xyXG4gICAgICAgICAgICAgICAgICAgID8gWyd0b3AnLCAnYm90dG9tJ11cclxuICAgICAgICAgICAgICAgICAgICA6IFsnYm90dG9tJywgJ3RvcCddO1xyXG5cclxuICAgICAgICBjb25zdCBvcmlnaW5GYWxsYmFja1ggPSBvdmVybGF5WDtcclxuICAgICAgICBjb25zdCBvcmlnaW5GYWxsYmFja1kgPSBvdmVybGF5WTtcclxuXHJcbiAgICAgICAgY29uc3Qgb2Zmc2V0WCA9XHJcbiAgICAgICAgICAgIHRoaXMucG9wb3Zlci54T2Zmc2V0ICYmICFpc05hTihOdW1iZXIodGhpcy5wb3BvdmVyLnhPZmZzZXQpKVxyXG4gICAgICAgICAgICAgICAgPyBOdW1iZXIodGhpcy5kaXIgPT09ICdsdHInID8gdGhpcy5wb3BvdmVyLnhPZmZzZXQgOiAtdGhpcy5wb3BvdmVyLnhPZmZzZXQpXHJcbiAgICAgICAgICAgICAgICA6IDA7XHJcbiAgICAgICAgY29uc3Qgb2Zmc2V0WSA9XHJcbiAgICAgICAgICAgIHRoaXMucG9wb3Zlci55T2Zmc2V0ICYmICFpc05hTihOdW1iZXIodGhpcy5wb3BvdmVyLnlPZmZzZXQpKVxyXG4gICAgICAgICAgICAgICAgPyBOdW1iZXIodGhpcy5wb3BvdmVyLnlPZmZzZXQpXHJcbiAgICAgICAgICAgICAgICA6IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEZvciBvdmVycmlkaW5nIHBvc2l0aW9uIGVsZW1lbnQsIHdoZW4gYGNtYXRQb3BvdmVyVGFyZ2V0QXRgIGhhcyBhIHZhbGlkIGVsZW1lbnQgcmVmZXJlbmNlLlxyXG4gICAgICAgICAqIFVzZWZ1bCBmb3Igc3RpY2tpbmcgcG9wb3ZlciB0byBwYXJlbnQgZWxlbWVudCBhbmQgb2Zmc2V0dGluZyBhcnJvdyB0byB0cmlnZ2VyIGVsZW1lbnQuXHJcbiAgICAgICAgICogSWYgdW5kZWZpbmVkIGRlZmF1bHRzIHRvIHRoZSB0cmlnZ2VyIGVsZW1lbnQgcmVmZXJlbmNlLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGxldCBlbGVtZW50ID0gdGhpcy5fZWxlbWVudFJlZjtcclxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGFyZ2V0RWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgdGhpcy5wb3BvdmVyLmNvbnRhaW5lclBvc2l0aW9uaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgZWxlbWVudCA9IHRoaXMudGFyZ2V0RWxlbWVudC5fZWxlbWVudFJlZjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBwb3NpdGlvbnM6IENvbm5lY3RlZFBvc2l0aW9uW10gPSBbeyBvcmlnaW5YLCBvcmlnaW5ZLCBvdmVybGF5WCwgb3ZlcmxheVkgfV07XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnBvcG92ZXIucG9zaXRpb25bMF0gPT09ICdhYm92ZScgfHwgdGhpcy5wb3BvdmVyLnBvc2l0aW9uWzBdID09PSAnYmVsb3cnKSB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9ucyA9IFtcclxuICAgICAgICAgICAgICAgIHsgb3JpZ2luWCwgb3JpZ2luWSwgb3ZlcmxheVgsIG92ZXJsYXlZLCBvZmZzZXRZIH0sXHJcbiAgICAgICAgICAgICAgICB7IG9yaWdpblg6IG9yaWdpbjJuZFgsIG9yaWdpblksIG92ZXJsYXlYOiBvcmlnaW4ybmRYLCBvdmVybGF5WSwgb2Zmc2V0WSB9LFxyXG4gICAgICAgICAgICAgICAgeyBvcmlnaW5YOiBvcmlnaW4zcmRYLCBvcmlnaW5ZLCBvdmVybGF5WDogb3JpZ2luM3JkWCwgb3ZlcmxheVksIG9mZnNldFkgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBvcmlnaW5YLFxyXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpblk6IG9yaWdpbkZhbGxiYWNrWSxcclxuICAgICAgICAgICAgICAgICAgICBvdmVybGF5WCxcclxuICAgICAgICAgICAgICAgICAgICBvdmVybGF5WTogb3ZlcmxheUZhbGxiYWNrWSxcclxuICAgICAgICAgICAgICAgICAgICBvZmZzZXRZOiAtb2Zmc2V0WSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luWDogb3JpZ2luMm5kWCxcclxuICAgICAgICAgICAgICAgICAgICBvcmlnaW5ZOiBvcmlnaW5GYWxsYmFja1ksXHJcbiAgICAgICAgICAgICAgICAgICAgb3ZlcmxheVg6IG9yaWdpbjJuZFgsXHJcbiAgICAgICAgICAgICAgICAgICAgb3ZlcmxheVk6IG92ZXJsYXlGYWxsYmFja1ksXHJcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WTogLW9mZnNldFksXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpblg6IG9yaWdpbjNyZFgsXHJcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luWTogb3JpZ2luRmFsbGJhY2tZLFxyXG4gICAgICAgICAgICAgICAgICAgIG92ZXJsYXlYOiBvcmlnaW4zcmRYLFxyXG4gICAgICAgICAgICAgICAgICAgIG92ZXJsYXlZOiBvdmVybGF5RmFsbGJhY2tZLFxyXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldFk6IC1vZmZzZXRZLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnBvcG92ZXIucG9zaXRpb25bMF0gPT09ICdiZWZvcmUnIHx8IHRoaXMucG9wb3Zlci5wb3NpdGlvblswXSA9PT0gJ2FmdGVyJykge1xyXG4gICAgICAgICAgICBwb3NpdGlvbnMgPSBbXHJcbiAgICAgICAgICAgICAgICB7IG9yaWdpblgsIG9yaWdpblksIG92ZXJsYXlYLCBvdmVybGF5WSwgb2Zmc2V0WCB9LFxyXG4gICAgICAgICAgICAgICAgeyBvcmlnaW5YLCBvcmlnaW5ZOiBvcmlnaW4ybmRZLCBvdmVybGF5WCwgb3ZlcmxheVk6IG9yaWdpbjJuZFksIG9mZnNldFggfSxcclxuICAgICAgICAgICAgICAgIHsgb3JpZ2luWCwgb3JpZ2luWTogb3JpZ2luM3JkWSwgb3ZlcmxheVgsIG92ZXJsYXlZOiBvcmlnaW4zcmRZLCBvZmZzZXRYIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luWDogb3JpZ2luRmFsbGJhY2tYLFxyXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpblksXHJcbiAgICAgICAgICAgICAgICAgICAgb3ZlcmxheVg6IG92ZXJsYXlGYWxsYmFja1gsXHJcbiAgICAgICAgICAgICAgICAgICAgb3ZlcmxheVksXHJcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WDogLW9mZnNldFgsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpblg6IG9yaWdpbkZhbGxiYWNrWCxcclxuICAgICAgICAgICAgICAgICAgICBvcmlnaW5ZOiBvcmlnaW4ybmRZLFxyXG4gICAgICAgICAgICAgICAgICAgIG92ZXJsYXlYOiBvdmVybGF5RmFsbGJhY2tYLFxyXG4gICAgICAgICAgICAgICAgICAgIG92ZXJsYXlZOiBvcmlnaW4ybmRZLFxyXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldFg6IC1vZmZzZXRYLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBvcmlnaW5YOiBvcmlnaW5GYWxsYmFja1gsXHJcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luWTogb3JpZ2luM3JkWSxcclxuICAgICAgICAgICAgICAgICAgICBvdmVybGF5WDogb3ZlcmxheUZhbGxiYWNrWCxcclxuICAgICAgICAgICAgICAgICAgICBvdmVybGF5WTogb3JpZ2luM3JkWSxcclxuICAgICAgICAgICAgICAgICAgICBvZmZzZXRYOiAtb2Zmc2V0WCxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fb3ZlcmxheVxyXG4gICAgICAgICAgICAucG9zaXRpb24oKVxyXG4gICAgICAgICAgICAuZmxleGlibGVDb25uZWN0ZWRUbyhlbGVtZW50KVxyXG4gICAgICAgICAgICAud2l0aExvY2tlZFBvc2l0aW9uKClcclxuICAgICAgICAgICAgLndpdGhQb3NpdGlvbnMocG9zaXRpb25zKVxyXG4gICAgICAgICAgICAud2l0aERlZmF1bHRPZmZzZXRYKG9mZnNldFgpXHJcbiAgICAgICAgICAgIC53aXRoRGVmYXVsdE9mZnNldFkob2Zmc2V0WSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfY2xlYW5VcFN1YnNjcmlwdGlvbnMoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2JhY2tkcm9wU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2JhY2tkcm9wU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLl9wb3NpdGlvblN1YnNjcmlwdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLl9wb3NpdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fZGV0YWNobWVudHNTdWJzY3JpcHRpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5fZGV0YWNobWVudHNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIF9zZXRDdXJyZW50Q29uZmlnKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnRyaWdnZXJFdmVudCkge1xyXG4gICAgICAgICAgICB0aGlzLnBvcG92ZXIudHJpZ2dlckV2ZW50ID0gdGhpcy50cmlnZ2VyRXZlbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBvcG92ZXIuc2V0Q3VycmVudFN0eWxlcygpO1xyXG4gICAgfVxyXG5cclxufVxyXG4iXX0=