@acorex/components 6.5.91 → 6.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (544) hide show
  1. package/README.md +7 -3
  2. package/esm2022/acorex-components.mjs +5 -0
  3. package/esm2022/index.mjs +158 -0
  4. package/esm2022/lib/accordion/accordion.component.mjs +45 -0
  5. package/esm2022/lib/accordion/accordion.module.mjs +20 -0
  6. package/esm2022/lib/base/base-page.class.mjs +97 -0
  7. package/esm2022/lib/base/components.class.mjs +17 -0
  8. package/esm2022/lib/base/element.class.mjs +301 -0
  9. package/esm2022/lib/base/events.class.mjs +17 -0
  10. package/esm2022/lib/button/button.component.mjs +74 -0
  11. package/esm2022/lib/button/button.module.mjs +21 -0
  12. package/esm2022/lib/calendar/calendar-box/calendar-box.component.mjs +426 -0
  13. package/esm2022/lib/calendar/calendar-box/calendar-box.module.mjs +22 -0
  14. package/esm2022/lib/calendar/scheduler/scheduler-views.property.mjs +59 -0
  15. package/esm2022/lib/calendar/scheduler/scheduler.class.mjs +16 -0
  16. package/esm2022/lib/calendar/scheduler/scheduler.component.mjs +226 -0
  17. package/esm2022/lib/calendar/scheduler/scheduler.module.mjs +68 -0
  18. package/esm2022/lib/calendar/scheduler/toolbars/scheduler-toolbar-navigator.mjs +136 -0
  19. package/esm2022/lib/calendar/scheduler/toolbars/scheduler-toolbar-views.mjs +37 -0
  20. package/esm2022/lib/calendar/scheduler/views/agenda/scheduler-agenda-view.component.mjs +49 -0
  21. package/esm2022/lib/calendar/scheduler/views/daytime/scheduler-daytime-view.component.mjs +102 -0
  22. package/esm2022/lib/calendar/scheduler/views/month/scheduler-month-view.component.mjs +214 -0
  23. package/esm2022/lib/calendar/scheduler/views/scheduler-view.component.mjs +99 -0
  24. package/esm2022/lib/calendar/scheduler/views/timeline/scheduler-timeline-view.component.mjs +85 -0
  25. package/esm2022/lib/checkbox/checkbox.component.mjs +102 -0
  26. package/esm2022/lib/checkbox/checkbox.module.mjs +20 -0
  27. package/esm2022/lib/color-picker/color-box/color-box.component.mjs +423 -0
  28. package/esm2022/lib/color-picker/color-picker.component.mjs +89 -0
  29. package/esm2022/lib/color-picker/color-picker.module.mjs +24 -0
  30. package/esm2022/lib/context-menu/context-menu.component.mjs +68 -0
  31. package/esm2022/lib/context-menu/context-menu.directive.mjs +146 -0
  32. package/esm2022/lib/context-menu/context-menu.module.mjs +20 -0
  33. package/esm2022/lib/data-filter/columns/filter-column-date.component.mjs +140 -0
  34. package/esm2022/lib/data-filter/columns/filter-column-number.component.mjs +119 -0
  35. package/esm2022/lib/data-filter/columns/filter-column-selection.component.mjs +75 -0
  36. package/esm2022/lib/data-filter/columns/filter-column-string.component.mjs +119 -0
  37. package/esm2022/lib/data-filter/filter-panel/filter-panel.component.mjs +267 -0
  38. package/esm2022/lib/data-filter/filter.class.mjs +46 -0
  39. package/esm2022/lib/data-filter/filter.module.mjs +88 -0
  40. package/esm2022/lib/data-filter/toolbar/filter-toolbar.component.mjs +168 -0
  41. package/esm2022/lib/data-list/core/data-list.component.mjs +37 -0
  42. package/esm2022/lib/data-list/list/list.component.mjs +134 -0
  43. package/esm2022/lib/data-list/list/list.module.mjs +22 -0
  44. package/esm2022/lib/data-list/list/toolbar-list-view.component.mjs +84 -0
  45. package/esm2022/lib/data-source/datasource.component.mjs +47 -0
  46. package/esm2022/lib/data-source/datasource.module.mjs +18 -0
  47. package/esm2022/lib/data-source/read-param.mjs +7 -0
  48. package/esm2022/lib/date-picker/date-picker.component.mjs +1093 -0
  49. package/esm2022/lib/date-picker/date-picker.module.mjs +49 -0
  50. package/esm2022/lib/dialog/dialog.component.mjs +26 -0
  51. package/esm2022/lib/dialog/dialog.module.mjs +21 -0
  52. package/esm2022/lib/dialog/dialog.service.mjs +160 -0
  53. package/esm2022/lib/drawer/content.component.mjs +18 -0
  54. package/esm2022/lib/drawer/drawer-container.component.mjs +38 -0
  55. package/esm2022/lib/drawer/drawer.component.mjs +146 -0
  56. package/esm2022/lib/drawer/drawer.module.mjs +23 -0
  57. package/esm2022/lib/dropdown/dropdown.component.mjs +186 -0
  58. package/esm2022/lib/dropdown/dropdown.module.mjs +26 -0
  59. package/esm2022/lib/fieldset/fieldset.component.mjs +57 -0
  60. package/esm2022/lib/fieldset/fieldset.module.mjs +19 -0
  61. package/esm2022/lib/form-group/form-group.component.mjs +37 -0
  62. package/esm2022/lib/form-group/form-group.module.mjs +21 -0
  63. package/esm2022/lib/label/label.component.mjs +19 -0
  64. package/esm2022/lib/label/label.module.mjs +21 -0
  65. package/esm2022/lib/loading/loading-indicator.component.mjs +18 -0
  66. package/esm2022/lib/loading/loading-panel.component.mjs +45 -0
  67. package/esm2022/lib/loading/loading.module.mjs +21 -0
  68. package/esm2022/lib/loading/loading.service.mjs +47 -0
  69. package/esm2022/lib/menu/menu-item.component.mjs +50 -0
  70. package/esm2022/lib/menu/menu.component.mjs +98 -0
  71. package/esm2022/lib/menu/menu.module.mjs +22 -0
  72. package/esm2022/lib/menu/menu2.component.mjs +100 -0
  73. package/esm2022/lib/number-box/number-box.component.mjs +628 -0
  74. package/esm2022/lib/number-box/number-box.module.mjs +21 -0
  75. package/esm2022/lib/page/content.component.mjs +27 -0
  76. package/esm2022/lib/page/footer.component.mjs +19 -0
  77. package/esm2022/lib/page/page.component.mjs +57 -0
  78. package/esm2022/lib/page/page.module.mjs +22 -0
  79. package/esm2022/lib/panel-box/panel-box.component.mjs +87 -0
  80. package/esm2022/lib/panel-box/panel-box.module.mjs +19 -0
  81. package/esm2022/lib/password-box/password-box.component.mjs +32 -0
  82. package/esm2022/lib/password-box/password-box.module.mjs +23 -0
  83. package/esm2022/lib/popover/custom-cdk-overlay.service.mjs +50 -0
  84. package/esm2022/lib/popover/overlay.service.mjs +94 -0
  85. package/esm2022/lib/popover/popover.component.mjs +145 -0
  86. package/esm2022/lib/popover/popover.module.mjs +19 -0
  87. package/esm2022/lib/popup/popup.component.mjs +160 -0
  88. package/esm2022/lib/popup/popup.module.mjs +25 -0
  89. package/esm2022/lib/popup/popup.service.mjs +94 -0
  90. package/esm2022/lib/progress-bar/progress-bar.component.mjs +16 -0
  91. package/esm2022/lib/progress-bar/progress-bar.module.mjs +19 -0
  92. package/esm2022/lib/property-editor/editors/check-editor/check-editor.mjs +65 -0
  93. package/esm2022/lib/property-editor/editors/check-editor/check.module.mjs +22 -0
  94. package/esm2022/lib/property-editor/editors/color-editor/color.editor.mjs +41 -0
  95. package/esm2022/lib/property-editor/editors/color-editor/color.module.mjs +24 -0
  96. package/esm2022/lib/property-editor/editors/column-editor/column.editor.mjs +118 -0
  97. package/esm2022/lib/property-editor/editors/column-editor/column.module.mjs +32 -0
  98. package/esm2022/lib/property-editor/editors/conditional-color-editor/conditional-color.editor.mjs +216 -0
  99. package/esm2022/lib/property-editor/editors/conditional-color-editor/conditional-color.module.mjs +76 -0
  100. package/esm2022/lib/property-editor/editors/date-editor/date.editor.mjs +87 -0
  101. package/esm2022/lib/property-editor/editors/date-editor/date.module.mjs +24 -0
  102. package/esm2022/lib/property-editor/editors/number-editor/number.editor.mjs +69 -0
  103. package/esm2022/lib/property-editor/editors/number-editor/number.module.mjs +24 -0
  104. package/esm2022/lib/property-editor/editors/range-editor/range.editor.mjs +145 -0
  105. package/esm2022/lib/property-editor/editors/range-editor/range.module.mjs +59 -0
  106. package/esm2022/lib/property-editor/editors/searchbar-selectbox-editor/searchbar-selectbox-editor.mjs +76 -0
  107. package/esm2022/lib/property-editor/editors/selectbox-editor/selectbox.editor.mjs +75 -0
  108. package/esm2022/lib/property-editor/editors/selectbox-editor/selectbox.module.mjs +25 -0
  109. package/esm2022/lib/property-editor/editors/selection-editor/selection-editor.mjs +73 -0
  110. package/esm2022/lib/property-editor/editors/selection-editor/selection.module.mjs +22 -0
  111. package/esm2022/lib/property-editor/editors/switch-editor/number.editor.mjs +30 -0
  112. package/esm2022/lib/property-editor/editors/switch-editor/number.module.mjs +25 -0
  113. package/esm2022/lib/property-editor/editors/text-editor/text.editor.mjs +36 -0
  114. package/esm2022/lib/property-editor/editors/text-editor/text.module.mjs +24 -0
  115. package/esm2022/lib/property-editor/editors/textarea-editor/textarea.editor.mjs +35 -0
  116. package/esm2022/lib/property-editor/editors/textarea-editor/textarea.module.mjs +24 -0
  117. package/esm2022/lib/property-editor/editors/time-editor/time.editor.mjs +47 -0
  118. package/esm2022/lib/property-editor/editors/time-editor/time.module.mjs +24 -0
  119. package/esm2022/lib/property-editor/property-editor-renderer.directive.mjs +167 -0
  120. package/esm2022/lib/property-editor/property-editor.class.mjs +108 -0
  121. package/esm2022/lib/property-editor/property-editor.module.mjs +194 -0
  122. package/esm2022/lib/query-builder/query-builder-group.component.mjs +129 -0
  123. package/esm2022/lib/query-builder/query-builder-popup/query-builder-popup.component.mjs +177 -0
  124. package/esm2022/lib/query-builder/query-builder-rule.component.mjs +428 -0
  125. package/esm2022/lib/query-builder/query-builder.class.mjs +42 -0
  126. package/esm2022/lib/query-builder/query-builder.component.mjs +92 -0
  127. package/esm2022/lib/query-builder/query-builder.module.mjs +62 -0
  128. package/esm2022/lib/query-builder/query-builder.service.mjs +199 -0
  129. package/esm2022/lib/search-bar/search-bar.component.mjs +293 -0
  130. package/esm2022/lib/search-bar/search-bar.module.mjs +61 -0
  131. package/esm2022/lib/searchbox/searchbox.component.mjs +106 -0
  132. package/esm2022/lib/searchbox/searchbox.module.mjs +24 -0
  133. package/esm2022/lib/selectbox/selectbox.component.mjs +1134 -0
  134. package/esm2022/lib/selectbox/selectbox.module.mjs +44 -0
  135. package/esm2022/lib/selectbox/selectbox2.component.mjs +617 -0
  136. package/esm2022/lib/selection-list/selection-list.component.mjs +113 -0
  137. package/esm2022/lib/selection-list/selection-list.module.mjs +21 -0
  138. package/esm2022/lib/switch/switch.component.mjs +55 -0
  139. package/esm2022/lib/switch/switch.module.mjs +20 -0
  140. package/esm2022/lib/tab-page/tab-page-Renderer.component.mjs +75 -0
  141. package/esm2022/lib/tab-page/tab-page-host.component.mjs +124 -0
  142. package/esm2022/lib/tab-page/tab-page.module.mjs +21 -0
  143. package/esm2022/lib/tab-page/tab-page.service.mjs +159 -0
  144. package/esm2022/lib/tab-strip/tab-strip.component.mjs +38 -0
  145. package/esm2022/lib/tab-strip/tab-strip.module.mjs +19 -0
  146. package/esm2022/lib/tab-view/dynamic-tabs.directive.mjs +25 -0
  147. package/esm2022/lib/tab-view/tab-view.component.mjs +110 -0
  148. package/esm2022/lib/tab-view/tab-view.module.mjs +21 -0
  149. package/esm2022/lib/tab-view/tab.component.mjs +33 -0
  150. package/esm2022/lib/textarea/textarea.component.mjs +27 -0
  151. package/esm2022/lib/textarea/textarea.module.mjs +21 -0
  152. package/esm2022/lib/textbox/textbox.component.mjs +42 -0
  153. package/esm2022/lib/textbox/textbox.module.mjs +36 -0
  154. package/esm2022/lib/time-picker/time-picker.component.mjs +1107 -0
  155. package/esm2022/lib/time-picker/time-picker.module.mjs +34 -0
  156. package/esm2022/lib/toast/toast-message/toast-message.component.mjs +76 -0
  157. package/esm2022/lib/toast/toast-wrapper/toast-wrapper.component.mjs +13 -0
  158. package/esm2022/lib/toast/toast.module.mjs +21 -0
  159. package/esm2022/lib/toast/toast.service.mjs +45 -0
  160. package/esm2022/lib/toolbar/group-button/toolbar-group-button.component.mjs +77 -0
  161. package/esm2022/lib/toolbar/menu/toolbar-menu.component.mjs +62 -0
  162. package/esm2022/lib/toolbar/search/toolbar-search.component.mjs +56 -0
  163. package/esm2022/lib/toolbar/title/toolbar-title.component.mjs +37 -0
  164. package/esm2022/lib/toolbar/toolbar-item.mjs +4 -0
  165. package/esm2022/lib/toolbar/toolbar.component.mjs +13 -0
  166. package/esm2022/lib/toolbar/toolbar.module.mjs +40 -0
  167. package/esm2022/lib/tooltip/tooltip.directive.mjs +104 -0
  168. package/esm2022/lib/tooltip/tooltip.module.mjs +19 -0
  169. package/esm2022/lib/tree-side-menu/tree-side-menu.component.mjs +697 -0
  170. package/esm2022/lib/tree-side-menu/tree-side-menu.module.mjs +33 -0
  171. package/esm2022/lib/tree-view/tree-view.component.mjs +854 -0
  172. package/esm2022/lib/tree-view/tree-view.module.mjs +22 -0
  173. package/esm2022/lib/upload-file/upload-file.component.mjs +226 -0
  174. package/esm2022/lib/upload-file/upload-file.events.mjs +2 -0
  175. package/esm2022/lib/upload-file/upload-file.module.mjs +24 -0
  176. package/esm2022/lib/validation/validation-form.component.mjs +68 -0
  177. package/esm2022/lib/validation/validation-rule.widget.mjs +114 -0
  178. package/esm2022/lib/validation/validation.class.mjs +2 -0
  179. package/esm2022/lib/validation/validation.component.mjs +89 -0
  180. package/esm2022/lib/validation/validation.module.mjs +34 -0
  181. package/{fesm2020 → fesm2022}/acorex-components.mjs +17004 -15581
  182. package/fesm2022/acorex-components.mjs.map +1 -0
  183. package/{public-api.d.ts → index.d.ts} +155 -155
  184. package/lib/accordion/accordion.component.d.ts +13 -13
  185. package/lib/accordion/accordion.module.d.ts +9 -9
  186. package/lib/base/base-page.class.d.ts +46 -46
  187. package/lib/base/components.class.d.ts +10 -10
  188. package/lib/base/element.class.d.ts +106 -106
  189. package/lib/base/events.class.d.ts +18 -18
  190. package/lib/button/button.component.d.ts +21 -21
  191. package/lib/button/button.module.d.ts +8 -8
  192. package/lib/calendar/calendar-box/calendar-box.component.d.ts +81 -81
  193. package/lib/calendar/calendar-box/calendar-box.module.d.ts +11 -11
  194. package/lib/calendar/scheduler/scheduler-views.property.d.ts +19 -19
  195. package/lib/calendar/scheduler/scheduler.class.d.ts +36 -36
  196. package/lib/calendar/scheduler/scheduler.component.d.ts +39 -39
  197. package/lib/calendar/scheduler/scheduler.module.d.ts +21 -21
  198. package/lib/calendar/scheduler/toolbars/scheduler-toolbar-navigator.d.ts +25 -25
  199. package/lib/calendar/scheduler/toolbars/scheduler-toolbar-views.d.ts +14 -14
  200. package/lib/calendar/scheduler/views/agenda/scheduler-agenda-view.component.d.ts +16 -16
  201. package/lib/calendar/scheduler/views/daytime/scheduler-daytime-view.component.d.ts +26 -26
  202. package/lib/calendar/scheduler/views/month/scheduler-month-view.component.d.ts +37 -37
  203. package/lib/calendar/scheduler/views/scheduler-view.component.d.ts +28 -28
  204. package/lib/calendar/scheduler/views/timeline/scheduler-timeline-view.component.d.ts +24 -24
  205. package/lib/checkbox/checkbox.component.d.ts +30 -30
  206. package/lib/checkbox/checkbox.module.d.ts +9 -9
  207. package/lib/color-picker/color-box/color-box.component.d.ts +25 -25
  208. package/lib/color-picker/color-picker.component.d.ts +30 -30
  209. package/lib/color-picker/color-picker.module.d.ts +13 -13
  210. package/lib/context-menu/context-menu.component.d.ts +22 -22
  211. package/lib/context-menu/context-menu.directive.d.ts +38 -38
  212. package/lib/context-menu/context-menu.module.d.ts +9 -9
  213. package/lib/data-filter/columns/filter-column-date.component.d.ts +22 -22
  214. package/lib/data-filter/columns/filter-column-number.component.d.ts +15 -15
  215. package/lib/data-filter/columns/filter-column-selection.component.d.ts +18 -18
  216. package/lib/data-filter/columns/filter-column-string.component.d.ts +15 -15
  217. package/lib/data-filter/filter-panel/filter-panel.component.d.ts +45 -45
  218. package/lib/data-filter/filter.class.d.ts +40 -40
  219. package/lib/data-filter/filter.module.d.ts +24 -24
  220. package/lib/data-filter/toolbar/filter-toolbar.component.d.ts +25 -25
  221. package/lib/data-list/core/data-list.component.d.ts +15 -15
  222. package/lib/data-list/list/list.component.d.ts +40 -40
  223. package/lib/data-list/list/list.module.d.ts +11 -11
  224. package/lib/data-list/list/toolbar-list-view.component.d.ts +17 -17
  225. package/lib/data-source/datasource.component.d.ts +16 -16
  226. package/lib/data-source/datasource.module.d.ts +7 -7
  227. package/lib/data-source/read-param.d.ts +40 -40
  228. package/lib/date-picker/date-picker.component.d.ts +81 -81
  229. package/lib/date-picker/date-picker.module.d.ts +14 -14
  230. package/lib/dialog/dialog.component.d.ts +14 -14
  231. package/lib/dialog/dialog.module.d.ts +10 -10
  232. package/lib/dialog/dialog.service.d.ts +36 -36
  233. package/lib/drawer/content.component.d.ts +7 -7
  234. package/lib/drawer/drawer-container.component.d.ts +10 -10
  235. package/lib/drawer/drawer.component.d.ts +34 -34
  236. package/lib/drawer/drawer.module.d.ts +10 -10
  237. package/lib/dropdown/dropdown.component.d.ts +38 -38
  238. package/lib/dropdown/dropdown.module.d.ts +13 -13
  239. package/lib/fieldset/fieldset.component.d.ts +11 -11
  240. package/lib/fieldset/fieldset.module.d.ts +8 -8
  241. package/lib/form-group/form-group.component.d.ts +14 -14
  242. package/lib/form-group/form-group.module.d.ts +8 -8
  243. package/lib/label/label.component.d.ts +9 -9
  244. package/lib/label/label.module.d.ts +8 -8
  245. package/lib/loading/loading-indicator.component.d.ts +9 -9
  246. package/lib/loading/loading-panel.component.d.ts +13 -13
  247. package/lib/loading/loading.module.d.ts +10 -10
  248. package/lib/loading/loading.service.d.ts +13 -13
  249. package/lib/menu/menu-item.component.d.ts +18 -18
  250. package/lib/menu/menu.component.d.ts +35 -35
  251. package/lib/menu/menu.module.d.ts +11 -11
  252. package/lib/menu/menu2.component.d.ts +21 -21
  253. package/lib/number-box/number-box.component.d.ts +52 -52
  254. package/lib/number-box/number-box.module.d.ts +10 -10
  255. package/lib/page/content.component.d.ts +8 -8
  256. package/lib/page/footer.component.d.ts +5 -5
  257. package/lib/page/page.component.d.ts +16 -16
  258. package/lib/page/page.module.d.ts +11 -11
  259. package/lib/panel-box/panel-box.component.d.ts +19 -19
  260. package/lib/panel-box/panel-box.module.d.ts +8 -8
  261. package/lib/password-box/password-box.component.d.ts +12 -12
  262. package/lib/password-box/password-box.module.d.ts +10 -10
  263. package/lib/popover/custom-cdk-overlay.service.d.ts +19 -19
  264. package/lib/popover/overlay.service.d.ts +32 -32
  265. package/lib/popover/popover.component.d.ts +35 -35
  266. package/lib/popover/popover.module.d.ts +8 -8
  267. package/lib/popup/popup.component.d.ts +40 -40
  268. package/lib/popup/popup.module.d.ts +13 -13
  269. package/lib/popup/popup.service.d.ts +22 -22
  270. package/lib/progress-bar/progress-bar.component.d.ts +7 -7
  271. package/lib/progress-bar/progress-bar.module.d.ts +8 -8
  272. package/lib/property-editor/editors/check-editor/check-editor.d.ts +19 -19
  273. package/lib/property-editor/editors/check-editor/check.module.d.ts +11 -11
  274. package/lib/property-editor/editors/color-editor/color.editor.d.ts +13 -13
  275. package/lib/property-editor/editors/color-editor/color.module.d.ts +12 -12
  276. package/lib/property-editor/editors/column-editor/column.editor.d.ts +34 -34
  277. package/lib/property-editor/editors/column-editor/column.module.d.ts +20 -20
  278. package/lib/property-editor/editors/conditional-color-editor/conditional-color.editor.d.ts +44 -44
  279. package/lib/property-editor/editors/conditional-color-editor/conditional-color.module.d.ts +19 -19
  280. package/lib/property-editor/editors/date-editor/date.editor.d.ts +28 -28
  281. package/lib/property-editor/editors/date-editor/date.module.d.ts +12 -12
  282. package/lib/property-editor/editors/number-editor/number.editor.d.ts +21 -20
  283. package/lib/property-editor/editors/number-editor/number.module.d.ts +12 -12
  284. package/lib/property-editor/editors/range-editor/range.editor.d.ts +29 -29
  285. package/lib/property-editor/editors/range-editor/range.module.d.ts +18 -18
  286. package/lib/property-editor/editors/searchbar-selectbox-editor/searchbar-selectbox-editor.d.ts +29 -29
  287. package/lib/property-editor/editors/selectbox-editor/selectbox.editor.d.ts +28 -28
  288. package/lib/property-editor/editors/selectbox-editor/selectbox.module.d.ts +14 -14
  289. package/lib/property-editor/editors/selection-editor/selection-editor.d.ts +25 -25
  290. package/lib/property-editor/editors/selection-editor/selection.module.d.ts +11 -11
  291. package/lib/property-editor/editors/switch-editor/number.editor.d.ts +11 -11
  292. package/lib/property-editor/editors/switch-editor/number.module.d.ts +13 -13
  293. package/lib/property-editor/editors/text-editor/text.editor.d.ts +18 -18
  294. package/lib/property-editor/editors/text-editor/text.module.d.ts +12 -12
  295. package/lib/property-editor/editors/textarea-editor/textarea.editor.d.ts +17 -17
  296. package/lib/property-editor/editors/textarea-editor/textarea.module.d.ts +12 -12
  297. package/lib/property-editor/editors/time-editor/time.editor.d.ts +17 -17
  298. package/lib/property-editor/editors/time-editor/time.module.d.ts +12 -12
  299. package/lib/property-editor/property-editor-renderer.directive.d.ts +31 -31
  300. package/lib/property-editor/property-editor.class.d.ts +93 -93
  301. package/lib/property-editor/property-editor.module.d.ts +21 -21
  302. package/lib/query-builder/query-builder-group.component.d.ts +33 -33
  303. package/lib/query-builder/query-builder-popup/query-builder-popup.component.d.ts +35 -35
  304. package/lib/query-builder/query-builder-rule.component.d.ts +45 -45
  305. package/lib/query-builder/query-builder.class.d.ts +45 -45
  306. package/lib/query-builder/query-builder.component.d.ts +29 -29
  307. package/lib/query-builder/query-builder.module.d.ts +23 -23
  308. package/lib/query-builder/query-builder.service.d.ts +18 -18
  309. package/lib/search-bar/search-bar.component.d.ts +62 -62
  310. package/lib/search-bar/search-bar.module.d.ts +18 -18
  311. package/lib/searchbox/searchbox.component.d.ts +23 -22
  312. package/lib/searchbox/searchbox.module.d.ts +13 -13
  313. package/lib/selectbox/selectbox.component.d.ts +149 -118
  314. package/lib/selectbox/selectbox.module.d.ts +15 -15
  315. package/lib/selectbox/selectbox2.component.d.ts +103 -103
  316. package/lib/selection-list/selection-list.component.d.ts +32 -32
  317. package/lib/selection-list/selection-list.module.d.ts +10 -10
  318. package/lib/switch/switch.component.d.ts +20 -20
  319. package/lib/switch/switch.module.d.ts +9 -9
  320. package/lib/tab-page/tab-page-Renderer.component.d.ts +16 -16
  321. package/lib/tab-page/tab-page-host.component.d.ts +24 -24
  322. package/lib/tab-page/tab-page.module.d.ts +10 -10
  323. package/lib/tab-page/tab-page.service.d.ts +30 -30
  324. package/lib/tab-strip/tab-strip.component.d.ts +28 -28
  325. package/lib/tab-strip/tab-strip.module.d.ts +8 -8
  326. package/lib/tab-view/dynamic-tabs.directive.d.ts +16 -16
  327. package/lib/tab-view/tab-view.component.d.ts +26 -26
  328. package/lib/tab-view/tab-view.module.d.ts +10 -10
  329. package/lib/tab-view/tab.component.d.ts +12 -12
  330. package/lib/textarea/textarea.component.d.ts +12 -12
  331. package/lib/textarea/textarea.module.d.ts +8 -8
  332. package/lib/textbox/textbox.component.d.ts +16 -16
  333. package/lib/textbox/textbox.module.d.ts +11 -11
  334. package/lib/time-picker/time-picker.component.d.ts +53 -52
  335. package/lib/time-picker/time-picker.module.d.ts +11 -11
  336. package/lib/toast/toast-message/toast-message.component.d.ts +18 -18
  337. package/lib/toast/toast-wrapper/toast-wrapper.component.d.ts +8 -8
  338. package/lib/toast/toast.module.d.ts +9 -9
  339. package/lib/toast/toast.service.d.ts +18 -18
  340. package/lib/toolbar/group-button/toolbar-group-button.component.d.ts +12 -12
  341. package/lib/toolbar/menu/toolbar-menu.component.d.ts +24 -24
  342. package/lib/toolbar/search/toolbar-search.component.d.ts +16 -16
  343. package/lib/toolbar/title/toolbar-title.component.d.ts +9 -9
  344. package/lib/toolbar/toolbar-item.d.ts +3 -3
  345. package/lib/toolbar/toolbar.component.d.ts +8 -8
  346. package/lib/toolbar/toolbar.module.d.ts +14 -14
  347. package/lib/tooltip/tooltip.directive.d.ts +21 -21
  348. package/lib/tooltip/tooltip.module.d.ts +8 -8
  349. package/lib/tree-side-menu/tree-side-menu.component.d.ts +111 -111
  350. package/lib/tree-side-menu/tree-side-menu.module.d.ts +11 -11
  351. package/lib/tree-view/tree-view.component.d.ts +121 -121
  352. package/lib/tree-view/tree-view.module.d.ts +11 -11
  353. package/lib/upload-file/upload-file.component.d.ts +42 -42
  354. package/lib/upload-file/upload-file.events.d.ts +10 -10
  355. package/lib/upload-file/upload-file.module.d.ts +13 -13
  356. package/lib/validation/validation-form.component.d.ts +19 -19
  357. package/lib/validation/validation-rule.widget.d.ts +23 -23
  358. package/lib/validation/validation.class.d.ts +16 -16
  359. package/lib/validation/validation.component.d.ts +25 -25
  360. package/lib/validation/validation.module.d.ts +11 -11
  361. package/package.json +15 -20
  362. package/acorex-components.d.ts +0 -5
  363. package/esm2020/acorex-components.mjs +0 -5
  364. package/esm2020/lib/accordion/accordion.component.mjs +0 -44
  365. package/esm2020/lib/accordion/accordion.module.mjs +0 -20
  366. package/esm2020/lib/base/base-page.class.mjs +0 -94
  367. package/esm2020/lib/base/components.class.mjs +0 -17
  368. package/esm2020/lib/base/element.class.mjs +0 -294
  369. package/esm2020/lib/base/events.class.mjs +0 -11
  370. package/esm2020/lib/button/button.component.mjs +0 -71
  371. package/esm2020/lib/button/button.module.mjs +0 -21
  372. package/esm2020/lib/calendar/calendar-box/calendar-box.component.mjs +0 -413
  373. package/esm2020/lib/calendar/calendar-box/calendar-box.module.mjs +0 -22
  374. package/esm2020/lib/calendar/scheduler/scheduler-views.property.mjs +0 -54
  375. package/esm2020/lib/calendar/scheduler/scheduler.class.mjs +0 -18
  376. package/esm2020/lib/calendar/scheduler/scheduler.component.mjs +0 -213
  377. package/esm2020/lib/calendar/scheduler/scheduler.module.mjs +0 -68
  378. package/esm2020/lib/calendar/scheduler/toolbars/scheduler-toolbar-navigator.mjs +0 -132
  379. package/esm2020/lib/calendar/scheduler/toolbars/scheduler-toolbar-views.mjs +0 -37
  380. package/esm2020/lib/calendar/scheduler/views/agenda/scheduler-agenda-view.component.mjs +0 -47
  381. package/esm2020/lib/calendar/scheduler/views/daytime/scheduler-daytime-view.component.mjs +0 -95
  382. package/esm2020/lib/calendar/scheduler/views/month/scheduler-month-view.component.mjs +0 -204
  383. package/esm2020/lib/calendar/scheduler/views/scheduler-view.component.mjs +0 -99
  384. package/esm2020/lib/calendar/scheduler/views/timeline/scheduler-timeline-view.component.mjs +0 -77
  385. package/esm2020/lib/checkbox/checkbox.component.mjs +0 -98
  386. package/esm2020/lib/checkbox/checkbox.module.mjs +0 -20
  387. package/esm2020/lib/color-picker/color-box/color-box.component.mjs +0 -422
  388. package/esm2020/lib/color-picker/color-picker.component.mjs +0 -82
  389. package/esm2020/lib/color-picker/color-picker.module.mjs +0 -24
  390. package/esm2020/lib/context-menu/context-menu.component.mjs +0 -65
  391. package/esm2020/lib/context-menu/context-menu.directive.mjs +0 -135
  392. package/esm2020/lib/context-menu/context-menu.module.mjs +0 -20
  393. package/esm2020/lib/data-filter/columns/filter-column-date.component.mjs +0 -138
  394. package/esm2020/lib/data-filter/columns/filter-column-number.component.mjs +0 -117
  395. package/esm2020/lib/data-filter/columns/filter-column-selection.component.mjs +0 -74
  396. package/esm2020/lib/data-filter/columns/filter-column-string.component.mjs +0 -117
  397. package/esm2020/lib/data-filter/filter-panel/filter-panel.component.mjs +0 -258
  398. package/esm2020/lib/data-filter/filter.class.mjs +0 -44
  399. package/esm2020/lib/data-filter/filter.module.mjs +0 -90
  400. package/esm2020/lib/data-filter/toolbar/filter-toolbar.component.mjs +0 -166
  401. package/esm2020/lib/data-list/core/data-list.component.mjs +0 -40
  402. package/esm2020/lib/data-list/list/list.component.mjs +0 -124
  403. package/esm2020/lib/data-list/list/list.module.mjs +0 -22
  404. package/esm2020/lib/data-list/list/toolbar-list-view.component.mjs +0 -85
  405. package/esm2020/lib/data-source/datasource.component.mjs +0 -47
  406. package/esm2020/lib/data-source/datasource.module.mjs +0 -18
  407. package/esm2020/lib/data-source/read-param.mjs +0 -5
  408. package/esm2020/lib/date-picker/date-picker.component.mjs +0 -702
  409. package/esm2020/lib/date-picker/date-picker.module.mjs +0 -25
  410. package/esm2020/lib/dialog/dialog.component.mjs +0 -24
  411. package/esm2020/lib/dialog/dialog.module.mjs +0 -21
  412. package/esm2020/lib/dialog/dialog.service.mjs +0 -150
  413. package/esm2020/lib/drawer/content.component.mjs +0 -18
  414. package/esm2020/lib/drawer/drawer-container.component.mjs +0 -36
  415. package/esm2020/lib/drawer/drawer.component.mjs +0 -142
  416. package/esm2020/lib/drawer/drawer.module.mjs +0 -23
  417. package/esm2020/lib/dropdown/dropdown.component.mjs +0 -176
  418. package/esm2020/lib/dropdown/dropdown.module.mjs +0 -26
  419. package/esm2020/lib/fieldset/fieldset.component.mjs +0 -59
  420. package/esm2020/lib/fieldset/fieldset.module.mjs +0 -19
  421. package/esm2020/lib/form-group/form-group.component.mjs +0 -34
  422. package/esm2020/lib/form-group/form-group.module.mjs +0 -21
  423. package/esm2020/lib/label/label.component.mjs +0 -19
  424. package/esm2020/lib/label/label.module.mjs +0 -21
  425. package/esm2020/lib/loading/loading-indicator.component.mjs +0 -17
  426. package/esm2020/lib/loading/loading-panel.component.mjs +0 -44
  427. package/esm2020/lib/loading/loading.module.mjs +0 -21
  428. package/esm2020/lib/loading/loading.service.mjs +0 -45
  429. package/esm2020/lib/menu/menu-item.component.mjs +0 -47
  430. package/esm2020/lib/menu/menu.component.mjs +0 -86
  431. package/esm2020/lib/menu/menu.module.mjs +0 -22
  432. package/esm2020/lib/menu/menu2.component.mjs +0 -96
  433. package/esm2020/lib/number-box/number-box.component.mjs +0 -622
  434. package/esm2020/lib/number-box/number-box.module.mjs +0 -21
  435. package/esm2020/lib/page/content.component.mjs +0 -32
  436. package/esm2020/lib/page/footer.component.mjs +0 -19
  437. package/esm2020/lib/page/page.component.mjs +0 -53
  438. package/esm2020/lib/page/page.module.mjs +0 -22
  439. package/esm2020/lib/panel-box/panel-box.component.mjs +0 -88
  440. package/esm2020/lib/panel-box/panel-box.module.mjs +0 -19
  441. package/esm2020/lib/password-box/password-box.component.mjs +0 -31
  442. package/esm2020/lib/password-box/password-box.module.mjs +0 -23
  443. package/esm2020/lib/popover/custom-cdk-overlay.service.mjs +0 -48
  444. package/esm2020/lib/popover/overlay.service.mjs +0 -91
  445. package/esm2020/lib/popover/popover.component.mjs +0 -133
  446. package/esm2020/lib/popover/popover.module.mjs +0 -19
  447. package/esm2020/lib/popup/popup.component.mjs +0 -147
  448. package/esm2020/lib/popup/popup.module.mjs +0 -25
  449. package/esm2020/lib/popup/popup.service.mjs +0 -93
  450. package/esm2020/lib/progress-bar/progress-bar.component.mjs +0 -19
  451. package/esm2020/lib/progress-bar/progress-bar.module.mjs +0 -19
  452. package/esm2020/lib/property-editor/editors/check-editor/check-editor.mjs +0 -61
  453. package/esm2020/lib/property-editor/editors/check-editor/check.module.mjs +0 -22
  454. package/esm2020/lib/property-editor/editors/color-editor/color.editor.mjs +0 -38
  455. package/esm2020/lib/property-editor/editors/color-editor/color.module.mjs +0 -24
  456. package/esm2020/lib/property-editor/editors/column-editor/column.editor.mjs +0 -115
  457. package/esm2020/lib/property-editor/editors/column-editor/column.module.mjs +0 -32
  458. package/esm2020/lib/property-editor/editors/conditional-color-editor/conditional-color.editor.mjs +0 -211
  459. package/esm2020/lib/property-editor/editors/conditional-color-editor/conditional-color.module.mjs +0 -78
  460. package/esm2020/lib/property-editor/editors/date-editor/date.editor.mjs +0 -51
  461. package/esm2020/lib/property-editor/editors/date-editor/date.module.mjs +0 -24
  462. package/esm2020/lib/property-editor/editors/number-editor/number.editor.mjs +0 -63
  463. package/esm2020/lib/property-editor/editors/number-editor/number.module.mjs +0 -24
  464. package/esm2020/lib/property-editor/editors/range-editor/range.editor.mjs +0 -140
  465. package/esm2020/lib/property-editor/editors/range-editor/range.module.mjs +0 -61
  466. package/esm2020/lib/property-editor/editors/searchbar-selectbox-editor/searchbar-selectbox-editor.mjs +0 -72
  467. package/esm2020/lib/property-editor/editors/selectbox-editor/selectbox.editor.mjs +0 -71
  468. package/esm2020/lib/property-editor/editors/selectbox-editor/selectbox.module.mjs +0 -25
  469. package/esm2020/lib/property-editor/editors/selection-editor/selection-editor.mjs +0 -69
  470. package/esm2020/lib/property-editor/editors/selection-editor/selection.module.mjs +0 -22
  471. package/esm2020/lib/property-editor/editors/switch-editor/number.editor.mjs +0 -29
  472. package/esm2020/lib/property-editor/editors/switch-editor/number.module.mjs +0 -25
  473. package/esm2020/lib/property-editor/editors/text-editor/text.editor.mjs +0 -32
  474. package/esm2020/lib/property-editor/editors/text-editor/text.module.mjs +0 -24
  475. package/esm2020/lib/property-editor/editors/textarea-editor/textarea.editor.mjs +0 -32
  476. package/esm2020/lib/property-editor/editors/textarea-editor/textarea.module.mjs +0 -24
  477. package/esm2020/lib/property-editor/editors/time-editor/time.editor.mjs +0 -43
  478. package/esm2020/lib/property-editor/editors/time-editor/time.module.mjs +0 -24
  479. package/esm2020/lib/property-editor/property-editor-renderer.directive.mjs +0 -157
  480. package/esm2020/lib/property-editor/property-editor.class.mjs +0 -102
  481. package/esm2020/lib/property-editor/property-editor.module.mjs +0 -196
  482. package/esm2020/lib/query-builder/query-builder-group.component.mjs +0 -124
  483. package/esm2020/lib/query-builder/query-builder-popup/query-builder-popup.component.mjs +0 -172
  484. package/esm2020/lib/query-builder/query-builder-rule.component.mjs +0 -399
  485. package/esm2020/lib/query-builder/query-builder.class.mjs +0 -20
  486. package/esm2020/lib/query-builder/query-builder.component.mjs +0 -87
  487. package/esm2020/lib/query-builder/query-builder.module.mjs +0 -62
  488. package/esm2020/lib/query-builder/query-builder.service.mjs +0 -197
  489. package/esm2020/lib/search-bar/search-bar.component.mjs +0 -286
  490. package/esm2020/lib/search-bar/search-bar.module.mjs +0 -63
  491. package/esm2020/lib/searchbox/searchbox.component.mjs +0 -81
  492. package/esm2020/lib/searchbox/searchbox.module.mjs +0 -24
  493. package/esm2020/lib/selectbox/selectbox.component.mjs +0 -961
  494. package/esm2020/lib/selectbox/selectbox.module.mjs +0 -44
  495. package/esm2020/lib/selectbox/selectbox2.component.mjs +0 -574
  496. package/esm2020/lib/selection-list/selection-list.component.mjs +0 -108
  497. package/esm2020/lib/selection-list/selection-list.module.mjs +0 -21
  498. package/esm2020/lib/switch/switch.component.mjs +0 -51
  499. package/esm2020/lib/switch/switch.module.mjs +0 -20
  500. package/esm2020/lib/tab-page/tab-page-Renderer.component.mjs +0 -71
  501. package/esm2020/lib/tab-page/tab-page-host.component.mjs +0 -114
  502. package/esm2020/lib/tab-page/tab-page.module.mjs +0 -21
  503. package/esm2020/lib/tab-page/tab-page.service.mjs +0 -160
  504. package/esm2020/lib/tab-strip/tab-strip.component.mjs +0 -36
  505. package/esm2020/lib/tab-strip/tab-strip.module.mjs +0 -19
  506. package/esm2020/lib/tab-view/dynamic-tabs.directive.mjs +0 -24
  507. package/esm2020/lib/tab-view/tab-view.component.mjs +0 -105
  508. package/esm2020/lib/tab-view/tab-view.module.mjs +0 -21
  509. package/esm2020/lib/tab-view/tab.component.mjs +0 -30
  510. package/esm2020/lib/textarea/textarea.component.mjs +0 -26
  511. package/esm2020/lib/textarea/textarea.module.mjs +0 -21
  512. package/esm2020/lib/textbox/textbox.component.mjs +0 -39
  513. package/esm2020/lib/textbox/textbox.module.mjs +0 -24
  514. package/esm2020/lib/time-picker/time-picker.component.mjs +0 -943
  515. package/esm2020/lib/time-picker/time-picker.module.mjs +0 -22
  516. package/esm2020/lib/toast/toast-message/toast-message.component.mjs +0 -74
  517. package/esm2020/lib/toast/toast-wrapper/toast-wrapper.component.mjs +0 -13
  518. package/esm2020/lib/toast/toast.module.mjs +0 -21
  519. package/esm2020/lib/toast/toast.service.mjs +0 -44
  520. package/esm2020/lib/toolbar/group-button/toolbar-group-button.component.mjs +0 -78
  521. package/esm2020/lib/toolbar/menu/toolbar-menu.component.mjs +0 -57
  522. package/esm2020/lib/toolbar/search/toolbar-search.component.mjs +0 -54
  523. package/esm2020/lib/toolbar/title/toolbar-title.component.mjs +0 -47
  524. package/esm2020/lib/toolbar/toolbar-item.mjs +0 -6
  525. package/esm2020/lib/toolbar/toolbar.component.mjs +0 -13
  526. package/esm2020/lib/toolbar/toolbar.module.mjs +0 -40
  527. package/esm2020/lib/tooltip/tooltip.directive.mjs +0 -100
  528. package/esm2020/lib/tooltip/tooltip.module.mjs +0 -19
  529. package/esm2020/lib/tree-side-menu/tree-side-menu.component.mjs +0 -646
  530. package/esm2020/lib/tree-side-menu/tree-side-menu.module.mjs +0 -35
  531. package/esm2020/lib/tree-view/tree-view.component.mjs +0 -775
  532. package/esm2020/lib/tree-view/tree-view.module.mjs +0 -22
  533. package/esm2020/lib/upload-file/upload-file.component.mjs +0 -208
  534. package/esm2020/lib/upload-file/upload-file.events.mjs +0 -2
  535. package/esm2020/lib/upload-file/upload-file.module.mjs +0 -24
  536. package/esm2020/lib/validation/validation-form.component.mjs +0 -65
  537. package/esm2020/lib/validation/validation-rule.widget.mjs +0 -111
  538. package/esm2020/lib/validation/validation.class.mjs +0 -2
  539. package/esm2020/lib/validation/validation.component.mjs +0 -89
  540. package/esm2020/lib/validation/validation.module.mjs +0 -34
  541. package/esm2020/public-api.mjs +0 -158
  542. package/fesm2015/acorex-components.mjs +0 -16013
  543. package/fesm2015/acorex-components.mjs.map +0 -1
  544. package/fesm2020/acorex-components.mjs.map +0 -1
@@ -0,0 +1,1134 @@
1
+ import { AXConfig } from '@acorex/core';
2
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ElementRef, EventEmitter, Input, NgZone, Output, TemplateRef, ViewChild, ViewEncapsulation, } from '@angular/core';
3
+ import { differenceBy } from 'lodash';
4
+ import { Observable } from 'rxjs';
5
+ import { debounceTime, distinctUntilChanged } from 'rxjs/operators';
6
+ import { AXValidatableComponent, } from '../base/element.class';
7
+ import { AXBaseEvent } from '../base/events.class';
8
+ import { AXDataSourceComponent } from '../data-source/datasource.component';
9
+ import { AXDropdownComponent } from '../dropdown/dropdown.component';
10
+ import { AXSearchBoxComponent } from '../searchbox/searchbox.component';
11
+ import { AXTextBoxComponent } from '../textbox/textbox.component';
12
+ import { AXValidation } from '../validation/validation.component';
13
+ import * as i0 from "@angular/core";
14
+ import * as i1 from "@angular/common";
15
+ import * as i2 from "../dropdown/dropdown.component";
16
+ import * as i3 from "../textbox/textbox.component";
17
+ import * as i4 from "../checkbox/checkbox.component";
18
+ import * as i5 from "../searchbox/searchbox.component";
19
+ import * as i6 from "@acorex/core";
20
+ export class AXSelectBoxSelectionChangedEvent extends AXBaseEvent {
21
+ selectedItems;
22
+ selectedValues;
23
+ constructor(component, selectedItems, selectedValues) {
24
+ super();
25
+ this.selectedItems = selectedItems;
26
+ this.selectedValues = selectedValues;
27
+ this.component = component;
28
+ }
29
+ }
30
+ export class AXSelectBoxComponent extends AXValidatableComponent {
31
+ cdr;
32
+ ref;
33
+ zone;
34
+ showDropDownButton = true;
35
+ rowTemplate;
36
+ rowInputTemplate;
37
+ span;
38
+ textbox;
39
+ listContainer;
40
+ serchBox;
41
+ textBoxSelectBox;
42
+ showCheckBox = true;
43
+ readonly = false;
44
+ rtl = AXConfig.get('layout.rtl');
45
+ disabled = false;
46
+ placeholder;
47
+ size = 'md';
48
+ allowNull = true;
49
+ textAlign = null;
50
+ bufferSize = 20;
51
+ remoteOperation = false;
52
+ fitParent = true;
53
+ dropdownWidth = '300px';
54
+ multiLine = false;
55
+ dropdownToggle = new EventEmitter();
56
+ // this input is Private and only use in LOV
57
+ onDemandTranslate = false;
58
+ currentfocusedIndex = -1;
59
+ showLoading = false;
60
+ skip = -1;
61
+ searchText = '';
62
+ // @Input()
63
+ // chipsWidth: string = '';
64
+ text = '';
65
+ totalCount = 0;
66
+ _contentDataSource;
67
+ _dataSource;
68
+ get dataSource() {
69
+ return this._dataSource ? this._dataSource : this._contentDataSource;
70
+ }
71
+ set dataSource(v) {
72
+ this._dataSource = v;
73
+ }
74
+ _contentValidation;
75
+ _validation;
76
+ get validation() {
77
+ return this._validation ? this._validation : this._contentValidation;
78
+ }
79
+ set validation(v) {
80
+ this._validation = v;
81
+ }
82
+ constructor(cdr, ref, zone) {
83
+ super();
84
+ this.cdr = cdr;
85
+ this.ref = ref;
86
+ this.zone = zone;
87
+ }
88
+ dropdown;
89
+ disabledCallback;
90
+ allowSearch = true;
91
+ textField = 'text';
92
+ valueField = 'value';
93
+ disabledField = 'disabled';
94
+ mode = 'single';
95
+ itemRemove = false;
96
+ itemsChange = new EventEmitter();
97
+ onBlur = new EventEmitter();
98
+ onFocus = new EventEmitter();
99
+ _items = [];
100
+ get items() {
101
+ return this._items;
102
+ }
103
+ set items(v) {
104
+ this._items = v;
105
+ if (this.itemsChange) {
106
+ this.itemsChange.emit(v);
107
+ }
108
+ if (this.itemsStatusObserver) {
109
+ this.itemsStatusObserver.next(this.items.length);
110
+ }
111
+ }
112
+ hasSelectedValue = false;
113
+ itemsFiltered = [];
114
+ // #endregion
115
+ dropDownDisabled = false;
116
+ selectionChanged = new EventEmitter();
117
+ selectedItemsChange = new EventEmitter();
118
+ _selectedItems = [];
119
+ get selectedItems() {
120
+ return this._selectedItems || [];
121
+ }
122
+ set selectedItems(v) {
123
+ this.setSelectedItemsChange(v);
124
+ // if (!v) {
125
+ // v = [];
126
+ // }
127
+ // const old = this.selectedItems;
128
+ // if (JSON.stringify(old) !== JSON.stringify(v)) {
129
+ // this._selectedItems = this.mode == 'single' ? v.slice(0, 1) : [...new Set(v)]; //[...new Set(v[0])] : [...new Set(v)];
130
+ // this._selectedItems.forEach((c) => (c.selected = true));
131
+ // this.selectedItemsChange.emit(this._selectedItems);
132
+ // this.selectedValuesChange.emit(this.selectedValues);
133
+ // this.clearValidationStyle(this.ref.nativeElement);
134
+ // this.waitForData(() => {
135
+ // if (this._selectedItems) {
136
+ // this.items.forEach((c) => (c.selected = this._selectedItems.some((i) => i[this.valueField] == c[this.valueField])));
137
+ // }
138
+ // });
139
+ // }
140
+ }
141
+ setSelectedItemsChange(v, old = this.selectedItems) {
142
+ if (!v) {
143
+ v = [];
144
+ }
145
+ // const old = this.selectedItems;
146
+ var f = differenceBy(old, v, this.valueField);
147
+ var s = differenceBy(v, old, this.valueField);
148
+ // if (JSON.stringify(old) !== JSON.stringify(v)) {
149
+ if (f.length != 0 || s.length != 0) {
150
+ this._selectedItems =
151
+ this.mode == 'single' ? v.slice(0, 1) : [...new Set(v)]; //[...new Set(v[0])] : [...new Set(v)];
152
+ this._selectedItems.forEach((c) => (c.selected = true));
153
+ this.selectedItemsChange.emit(this._selectedItems);
154
+ this.selectedValuesChange.emit(this.selectedValues);
155
+ this.clearValidationStyle(this.ref.nativeElement);
156
+ this.waitForData(() => {
157
+ if (this._selectedItems) {
158
+ this.items.forEach((c) => (c.selected = this._selectedItems.some((i) => i[this.valueField] == c[this.valueField])));
159
+ }
160
+ });
161
+ }
162
+ }
163
+ ngOnInit() {
164
+ if (this.rowTemplate === undefined && this.rowInputTemplate != undefined) {
165
+ this.rowTemplate = this.rowInputTemplate;
166
+ }
167
+ if (this.rtl == null) {
168
+ this.rtl =
169
+ window
170
+ .getComputedStyle(this.ref.nativeElement, null)
171
+ .getPropertyValue('direction') === 'rtl';
172
+ }
173
+ }
174
+ scrolled(e) {
175
+ if (this.remoteOperation &&
176
+ this.totalCount > this.items.length &&
177
+ this.listContainer.nativeElement.scrollHeight != 0 &&
178
+ this.listContainer.nativeElement.scrollHeight -
179
+ this.listContainer.nativeElement.scrollTop -
180
+ 300 <
181
+ 50) {
182
+ if (this.skip !== this.items.length) {
183
+ this.showLoading = true;
184
+ this.skip = this.items.length;
185
+ const params = {};
186
+ params.skip = this.items.length;
187
+ params.take = this.bufferSize; //* (Math.floor(this.items.length / this.bufferSize) + 1);
188
+ if (this.textbox) {
189
+ params.searchText = this.text;
190
+ }
191
+ else {
192
+ params.searchText = null;
193
+ }
194
+ this.fetch(params);
195
+ }
196
+ }
197
+ }
198
+ setSelectedItems(v, isUserInput) {
199
+ let changed = false;
200
+ if (isUserInput) {
201
+ changed = JSON.stringify(v) !== JSON.stringify(this.selectedItems);
202
+ }
203
+ this.selectedItems = v;
204
+ this.setSelectedIndex();
205
+ if (isUserInput && changed) {
206
+ this.emitSelectionChangedEvent();
207
+ }
208
+ }
209
+ searchChangeObserver;
210
+ delay = 500;
211
+ textChanged(e) {
212
+ if ((e.value === null || e.value === undefined || e.value === '') &&
213
+ (e.oldValue === null || e.oldValue === undefined || e.oldValue === '')) {
214
+ }
215
+ else {
216
+ this.currentfocusedIndex = -1;
217
+ if (this.remoteOperation) {
218
+ this.searchText = this.text;
219
+ // this.searchText = e.value;
220
+ // this.text = e.value;
221
+ // this.items = [];
222
+ if (this.items) {
223
+ let t = this.items.length;
224
+ for (let i = 0; i < t; i++) {
225
+ this.items.pop();
226
+ }
227
+ }
228
+ // this.items.forEach((element) => {
229
+ // this.items.pop();
230
+ // });
231
+ const params = {};
232
+ params.searchText = this.text;
233
+ // params.searchText = e.value;
234
+ params.skip = 0;
235
+ params.take = this.bufferSize;
236
+ this.fetch(params);
237
+ }
238
+ }
239
+ }
240
+ isItemDisabled(item) {
241
+ if (item[this.disabledField] == true) {
242
+ return true;
243
+ }
244
+ else if (this.disabledCallback) {
245
+ return this.disabledCallback({ item, index: -1 });
246
+ }
247
+ else {
248
+ return false;
249
+ }
250
+ }
251
+ onButtonClick(e) { }
252
+ setSelectedIndex(sign = null) {
253
+ if (sign == null) {
254
+ if (!this.remoteOperation && this.text && this.text !== '') {
255
+ this.currentfocusedIndex = this.items
256
+ .filter((c) => c[this.textField]
257
+ .toLowerCase()
258
+ .includes(this.text.toLowerCase()))
259
+ .indexOf(this.selectedItems[this.selectedItems.length - 1]);
260
+ }
261
+ else {
262
+ this.currentfocusedIndex = this.items.indexOf(this.selectedItems[this.selectedItems.length - 1]);
263
+ }
264
+ }
265
+ else {
266
+ sign === -1 ? this.currentfocusedIndex-- : this.currentfocusedIndex++;
267
+ }
268
+ if (this.remoteOperation) {
269
+ this.itemsFiltered = this.items;
270
+ }
271
+ else {
272
+ this.itemsFiltered = this.text
273
+ ? this.items.filter((c) => c[this.textField]
274
+ .toLowerCase()
275
+ .includes(this.text.toLowerCase()))
276
+ : this.items;
277
+ }
278
+ this.currentfocusedIndex =
279
+ this.currentfocusedIndex < 0
280
+ ? 0
281
+ : this.currentfocusedIndex >= this.itemsFiltered.length
282
+ ? this.itemsFiltered.length - 1
283
+ : this.currentfocusedIndex;
284
+ //
285
+ // set scroll
286
+ if (this.listContainer) {
287
+ this.zone.runOutsideAngular(() => {
288
+ const itemDiv = this.listContainer.nativeElement.querySelector(`.list-item:nth-child(${this.currentfocusedIndex})`);
289
+ if (itemDiv) {
290
+ itemDiv.scrollIntoView({ behavior: 'smooth' });
291
+ }
292
+ });
293
+ }
294
+ }
295
+ selectedValuesChange = new EventEmitter();
296
+ get selectedValues() {
297
+ if (this.mode === 'single') {
298
+ return this._selectedItems.map((c) => c[this.valueField])[0];
299
+ }
300
+ else {
301
+ return this._selectedItems.map((c) => c[this.valueField]) || [];
302
+ }
303
+ }
304
+ set selectedValues(v) {
305
+ if (this.compareSelectedValues(v)) {
306
+ return;
307
+ }
308
+ if (v == null) {
309
+ this.selectedItems = [];
310
+ }
311
+ else {
312
+ if (v !== undefined) {
313
+ if (v != [] && v != '' && v != null) {
314
+ this.hasSelectedValue = true;
315
+ }
316
+ this.waitForData(() => {
317
+ if (this.mode === 'single') {
318
+ if (this.items.filter((c) => v == c[this.valueField])) {
319
+ this.selectedItems = this.items.filter((c) => v == c[this.valueField]);
320
+ }
321
+ else {
322
+ this.selectedItems = [];
323
+ }
324
+ }
325
+ else {
326
+ if (Array.isArray(v)) {
327
+ if (this.selectedItems.length > v.length) {
328
+ this.selectedItems = this.selectedItems.filter((c) => v.includes(c[this.valueField]));
329
+ }
330
+ else {
331
+ let addId = [];
332
+ v.forEach((vId) => {
333
+ addId.push({
334
+ [this.valueField]: vId,
335
+ });
336
+ });
337
+ let newId = differenceBy(addId, this.selectedItems, this.valueField);
338
+ let vv = [];
339
+ newId.forEach((rc) => {
340
+ vv.push(rc[this.valueField]);
341
+ });
342
+ this.items
343
+ .filter((c) => vv.includes(c[this.valueField]))
344
+ .forEach((res) => {
345
+ this.selectedItems.push(res);
346
+ });
347
+ // this.selectedItems.push(this.items.filter((c) => vv.includes(c[this.valueField])));
348
+ this.setSelectedItemsChange(this.selectedItems, vv.length > 0 ? [1] : this.selectedItems);
349
+ }
350
+ // this.selectedItems = this.items.filter((c) => v.includes(c[this.valueField]));
351
+ }
352
+ else if (v) {
353
+ this.selectedItems = this.items.filter((c) => v === c[this.valueField]);
354
+ }
355
+ else {
356
+ this.selectedItems = [];
357
+ }
358
+ }
359
+ this.selectedValuesChange.emit(this.selectedValues);
360
+ this.cdr.markForCheck();
361
+ this.cdr.detectChanges();
362
+ });
363
+ }
364
+ }
365
+ }
366
+ compareSelectedValues(newValue) {
367
+ const currentValue = this.selectedValues;
368
+ return ((currentValue == null && newValue == null) ||
369
+ JSON.stringify(currentValue) === JSON.stringify(newValue));
370
+ }
371
+ setSelectedValues(v, isUserInput) {
372
+ const changed = isUserInput ? !this.compareSelectedValues(v) : false;
373
+ this.selectedValues = v;
374
+ if (isUserInput && changed) {
375
+ this.emitSelectionChangedEvent();
376
+ }
377
+ }
378
+ emitSelectionChangedEvent() {
379
+ this.selectedValuesChange.emit(this.selectedValues);
380
+ this.selectionChanged.emit(new AXSelectBoxSelectionChangedEvent(this, this.selectedItems, this.selectedValues));
381
+ }
382
+ ngAfterViewInit() {
383
+ if (this.bufferSize < 10) {
384
+ this.bufferSize = 10;
385
+ }
386
+ if (this.mode == 'single') {
387
+ this.showCheckBox = false;
388
+ }
389
+ else {
390
+ this.showCheckBox = true;
391
+ }
392
+ if (!this.remoteOperation ||
393
+ (this.remoteOperation && this.hasSelectedValue)) {
394
+ this.refresh();
395
+ }
396
+ }
397
+ dropdownToggleSelecBox(e) {
398
+ this.text = '';
399
+ if (this.dropdown.isOpen) {
400
+ this.refresh();
401
+ setTimeout(() => {
402
+ if (this.serchBox) {
403
+ this.serchBox.focus();
404
+ }
405
+ }, 1);
406
+ }
407
+ else {
408
+ // this.refresh();
409
+ }
410
+ this.dropdownToggle.emit(e);
411
+ }
412
+ ngAfterContentInit() {
413
+ // if (!this.allowSearch) {
414
+ // if (this.readonly == false) {
415
+ // this.itemRemove = true;
416
+ // this.readonly = true;
417
+ // }
418
+ // }
419
+ this.initValidation(this.ref, 'selectedItems', this.validation);
420
+ if (this.dataSource) {
421
+ // if (this.allowSearch == false) {
422
+ // this.fetch();
423
+ // }
424
+ this.dataSource.onDataReceived.subscribe((c) => {
425
+ this.showLoading = false;
426
+ this.dataReceived(c.data.result);
427
+ });
428
+ }
429
+ this.cdr.markForCheck();
430
+ this.cdr.detectChanges();
431
+ }
432
+ dataReceived(data) {
433
+ if (this.remoteOperation) {
434
+ if (this.searchText &&
435
+ this.searchText != null &&
436
+ this.searchText !== '') {
437
+ if (data.totalCount) {
438
+ if (this.items.length == 0) {
439
+ //this.items = data.items;
440
+ data.items.forEach((item) => {
441
+ this.items.push(item);
442
+ });
443
+ }
444
+ else {
445
+ data.items.forEach((item) => {
446
+ this.items.push(item);
447
+ });
448
+ // if (this.itemsStatusObserver) {
449
+ // this.itemsStatusObserver.next(this.items.length);
450
+ // }
451
+ }
452
+ this.totalCount = data.totalCount;
453
+ }
454
+ else {
455
+ if (this.items.length == 0) {
456
+ this.items = data.items;
457
+ }
458
+ else {
459
+ data.items.forEach((item) => {
460
+ this.items.push(item);
461
+ });
462
+ // if (this.itemsStatusObserver) {
463
+ // this.itemsStatusObserver.next(this.items.length);
464
+ // }
465
+ }
466
+ this.totalCount = data.items == undefined ? 0 : data.items.length;
467
+ }
468
+ }
469
+ else if (data.items && data.items.length === data.totalCount) {
470
+ this.items = data.items;
471
+ this.totalCount = data.items.length;
472
+ }
473
+ else if (data.totalCount) {
474
+ data.items.forEach((elm) => {
475
+ this.items.push(elm);
476
+ });
477
+ // if (this.itemsStatusObserver) {
478
+ // this.itemsStatusObserver.next(this.items.length);
479
+ // }
480
+ this.totalCount = data.totalCount;
481
+ }
482
+ else {
483
+ data.forEach((elm) => {
484
+ this.items.push(elm);
485
+ // if (this.itemsStatusObserver) {
486
+ // this.itemsStatusObserver.next(this.items.length);
487
+ // }
488
+ });
489
+ this.totalCount = data.length;
490
+ }
491
+ }
492
+ else {
493
+ this.items = data;
494
+ }
495
+ this.cdr.markForCheck();
496
+ this.cdr.detectChanges();
497
+ this.dropdown.updatePosition();
498
+ }
499
+ // private params: AXDataSourceReadParams = {};
500
+ fetch(params = {}) {
501
+ // this.params = params;
502
+ if (this.dataSource) {
503
+ if (this.onDemandTranslate && params?.searchText) {
504
+ params.searchText = this.translateSearch(params?.searchText);
505
+ }
506
+ this.showLoading = true;
507
+ this.dataSource.fetch(params);
508
+ }
509
+ }
510
+ translateSearch(searchText) {
511
+ const latinPattern = /[A-Za-z;'\/\\[\],]/;
512
+ const asciiToPersianMap = {
513
+ 113: 'ض',
514
+ 119: 'ص',
515
+ 101: 'ث',
516
+ 114: 'ق',
517
+ 116: 'ف',
518
+ 121: 'غ',
519
+ 117: 'ع',
520
+ 105: 'ه',
521
+ 111: 'خ',
522
+ 112: 'ح',
523
+ 97: 'ش',
524
+ 115: 'س',
525
+ 100: 'ی',
526
+ 102: 'ب',
527
+ 103: 'ل',
528
+ 104: 'ا',
529
+ 106: 'ت',
530
+ 107: 'ن',
531
+ 108: 'م',
532
+ 59: 'ک',
533
+ 122: 'ظ',
534
+ 120: 'ط',
535
+ 99: 'ز',
536
+ 118: 'ر',
537
+ 98: 'ذ',
538
+ 110: 'د',
539
+ 44: 'و',
540
+ 39: 'گ',
541
+ 67: 'ژ',
542
+ 93: 'چ',
543
+ 91: 'ج',
544
+ 92: 'پ',
545
+ 109: 'ئ',
546
+ };
547
+ if (latinPattern.test(searchText)) {
548
+ searchText = searchText
549
+ .split('')
550
+ .map((char) => {
551
+ const asciiValue = char.charCodeAt(0);
552
+ if (asciiToPersianMap[asciiValue]) {
553
+ return asciiToPersianMap[asciiValue];
554
+ }
555
+ else {
556
+ return char;
557
+ }
558
+ })
559
+ .join('');
560
+ }
561
+ return searchText;
562
+ }
563
+ refresh() {
564
+ const params = {};
565
+ if (this.remoteOperation) {
566
+ params.skip = 0;
567
+ this.skip = 0;
568
+ params.take = this.bufferSize;
569
+ }
570
+ if (this.dataSource != undefined) {
571
+ // this.items = [];
572
+ // this.items.forEach((element) => {
573
+ // this.items.pop();
574
+ // });
575
+ if (this.items) {
576
+ let t = this.items.length;
577
+ for (let i = 0; i < t; i++) {
578
+ this.items.pop();
579
+ }
580
+ }
581
+ this.fetch(params);
582
+ }
583
+ }
584
+ handleItemRemoveClick(item) {
585
+ if (this.mode === 'single') {
586
+ // this.selectedItems = null;
587
+ this.setSelectedValues(null, true);
588
+ // this.selectedItemsChange.emit(this._selectedItems);
589
+ // this.clearValidationStyle(this.ref.nativeElement);
590
+ }
591
+ else {
592
+ // this.selectedItems = this.selectedItems.filter((c) => c !== item);
593
+ this.setSelectedItems(this.selectedItems.filter((c) => c[this.valueField] !== item[this.valueField]), true);
594
+ // this._selectedItems = this._selectedItems.filter(c => c !== item);
595
+ // this.selectedItemsChange.emit(this._selectedItems);
596
+ // this.clearValidationStyle(this.ref.nativeElement);
597
+ }
598
+ // this.text = '';
599
+ this.validate();
600
+ this.cdr.markForCheck();
601
+ }
602
+ onFocusTextBox(e) { }
603
+ onTextBoxClick(e) {
604
+ if (this.disabled == false && this.readonly == false) {
605
+ this.dropdown.open();
606
+ }
607
+ }
608
+ handleItemClick(e, item) {
609
+ if (this.isItemDisabled(item) == false) {
610
+ const value = item[this.valueField];
611
+ if (this.mode === 'single') {
612
+ // this.selectedValues = value;
613
+ this.setSelectedValues(value, true);
614
+ }
615
+ else {
616
+ const exists = this.selectedValues.slice(0);
617
+ if (exists.includes(value)) {
618
+ if (this.allowNull == true ||
619
+ (this.allowNull == false && this.selectedItems.length > 1)) {
620
+ this.handleItemRemoveClick(item);
621
+ }
622
+ }
623
+ else {
624
+ exists.push(value);
625
+ // this.selectedValues = exists;
626
+ this.setSelectedValues(exists, true);
627
+ }
628
+ }
629
+ if (this.mode == 'single') {
630
+ this.text = '';
631
+ this.dropdown.close();
632
+ this.cdr.markForCheck();
633
+ }
634
+ // if (e.stopPropagation() == undefined) {
635
+ // e.stopPropagation();
636
+ // }
637
+ setTimeout(() => {
638
+ if (this.serchBox) {
639
+ this.serchBox.focus();
640
+ }
641
+ }, 0);
642
+ }
643
+ e.stopPropagation();
644
+ }
645
+ handleKeyEventSearch(e) {
646
+ if (this.disabled || this.readonly) {
647
+ this.dropdown.close();
648
+ setTimeout(() => {
649
+ this.textBoxSelectBox.focus();
650
+ }, 0);
651
+ return false;
652
+ }
653
+ if (e.key === 'Escape') {
654
+ this.text = null;
655
+ setTimeout(() => {
656
+ this.textBoxSelectBox.focus();
657
+ }, 0);
658
+ }
659
+ if ((e.key === 'ArrowDown' || e.key === 'ArrowUp') &&
660
+ this.getItems().length > 0 &&
661
+ e.type === 'keydown') {
662
+ if (this.mode === 'single') {
663
+ this.currentfocusedIndex =
664
+ this.currentfocusedIndex + (e.key === 'ArrowDown' ? 1 : -1);
665
+ this.selectedItemByIndex(this.currentfocusedIndex);
666
+ }
667
+ else {
668
+ if (this.dropdown.isOpen) {
669
+ this.setSelectedIndex(e.key === 'ArrowDown' ? 1 : -1);
670
+ }
671
+ else {
672
+ this.dropdown.open();
673
+ setTimeout(() => {
674
+ if (this.serchBox) {
675
+ this.serchBox.focus();
676
+ }
677
+ }, 0);
678
+ }
679
+ }
680
+ }
681
+ // if (e.key == 'Enter' && this.dropdown.isOpen && this.mode == 'single') {
682
+ // this.dropdown.close();
683
+ // setTimeout(() => {
684
+ // this.dropdown.focus();
685
+ // }, 0);
686
+ // }
687
+ //e.stopPropagation();
688
+ //e.preventDefault();
689
+ e.stopImmediatePropagation();
690
+ if (e.type === 'keydown' && e.key == 'Enter' && this.dropdown.isOpen) {
691
+ if (!this.remoteOperation && this.text && this.text !== '') {
692
+ this.itemsFiltered = this.items.filter((c) => c[this.textField]
693
+ .toLowerCase()
694
+ .includes(this.text.toLowerCase()));
695
+ if (this.itemsFiltered.length === 1) {
696
+ this.currentfocusedIndex = 0;
697
+ }
698
+ }
699
+ else {
700
+ this.itemsFiltered = this.items;
701
+ }
702
+ if (this.selectedItems.filter((c) => c[this.valueField] ===
703
+ this.itemsFiltered[this.currentfocusedIndex][this.valueField]).length > 0 &&
704
+ this.mode == 'multiple') {
705
+ if (this.allowNull == true ||
706
+ (this.allowNull == false && this.selectedItems.length > 1)) {
707
+ if (!this.remoteOperation && this.text && this.text !== '') {
708
+ this.selectedItems = this.selectedItems.filter((c) => c !==
709
+ this.items.filter((c) => c[this.textField]
710
+ .toLowerCase()
711
+ .includes(this.text.toLowerCase()))[this.currentfocusedIndex]);
712
+ }
713
+ else {
714
+ this.selectedItems = this.selectedItems.filter((c) => c[this.valueField] !==
715
+ this.items[this.currentfocusedIndex][this.valueField]);
716
+ }
717
+ this.emitSelectionChangedEvent();
718
+ }
719
+ }
720
+ else {
721
+ if (this.mode == 'multiple') {
722
+ if (this.currentfocusedIndex != -1) {
723
+ if (!this.remoteOperation && this.text && this.text !== '') {
724
+ if (this.itemsFiltered.length === 1) {
725
+ this.selectedItems.push(this.itemsFiltered[0]);
726
+ }
727
+ else {
728
+ this.selectedItems.push(this.itemsFiltered[this.currentfocusedIndex]);
729
+ }
730
+ }
731
+ else {
732
+ this.selectedItems.push(this.items[this.currentfocusedIndex]);
733
+ }
734
+ this.emitSelectionChangedEvent();
735
+ }
736
+ }
737
+ else {
738
+ if (this.text && this.itemsFiltered?.length === 1) {
739
+ this.setSelectedItems(this.itemsFiltered, true);
740
+ }
741
+ if (this.mode == 'single') {
742
+ this.dropdown.close();
743
+ setTimeout(() => {
744
+ this.textBoxSelectBox.focus();
745
+ }, 0);
746
+ }
747
+ }
748
+ }
749
+ e.stopPropagation();
750
+ e.preventDefault();
751
+ e.stopImmediatePropagation();
752
+ }
753
+ this.cdr.markForCheck();
754
+ }
755
+ isChar(str) {
756
+ if (str.includes('Shift') ||
757
+ str.includes('Tab') ||
758
+ str.includes('Control') ||
759
+ str.includes('Alt') ||
760
+ str.includes('CapsLock') ||
761
+ str.includes('Meta') ||
762
+ str.includes('ContextMenu') ||
763
+ str.includes('Enter') ||
764
+ str.includes('Backspace') ||
765
+ str.includes('PrintScreen') ||
766
+ str.includes('ScrollLock') ||
767
+ str.includes('Pause') ||
768
+ str.includes('Home') ||
769
+ str.includes('End') ||
770
+ str.includes('Insert') ||
771
+ str.includes('PageUp') ||
772
+ str.includes('Delete') ||
773
+ str.includes('PageDown') ||
774
+ str.includes('NumLock') ||
775
+ str.includes('Escape') ||
776
+ str.includes('Arrow') ||
777
+ str.includes('ّF1') ||
778
+ str.includes('F2') ||
779
+ str.includes('F3') ||
780
+ str.includes('F4') ||
781
+ str.includes('F5') ||
782
+ str.includes('F6') ||
783
+ str.includes('F7') ||
784
+ str.includes('F8') ||
785
+ str.includes('F9') ||
786
+ str.includes('F10') ||
787
+ str.includes('F11') ||
788
+ str.includes('F12')) {
789
+ return false;
790
+ }
791
+ else {
792
+ return true;
793
+ }
794
+ }
795
+ handleKeyEvent(e) {
796
+ // const NumberMinusPattern = /[a-zA-Z0-9\-]/g;
797
+ // const Farsi = /[پچجحخهعغفقثصضشسیبلاتنمکگوئدذرزطظژؤإأءًٌٍَُِّ\s]+$/;
798
+ // const inputChar = String.fromCharCode(e.charCode);
799
+ // const patternEn = /^[a-zA-Z0-9]*$/;
800
+ // const pattern = /^[\u0600-\u06FF\s]+$/;
801
+ const inputChar = e.key;
802
+ if ((inputChar != 'Backspace' &&
803
+ inputChar != 'Backspace' &&
804
+ inputChar != 'Tab' &&
805
+ inputChar != 'Enter' &&
806
+ inputChar != 'Escape' &&
807
+ inputChar != 'ArrowDown' &&
808
+ inputChar != 'ArrowUp') ||
809
+ e.code === 'Space' ||
810
+ e.ctrlKey == true) {
811
+ e.preventDefault();
812
+ }
813
+ if (e.key === 'Backspace' &&
814
+ e.type === 'keydown' &&
815
+ ((this.allowNull === true && this.selectedItems.length > 0) ||
816
+ (this.allowNull === false && this.selectedItems.length > 1))) {
817
+ this.selectedItems.pop();
818
+ this.emitSelectionChangedEvent();
819
+ }
820
+ if (this.disabled || this.readonly) {
821
+ this.dropdown.close();
822
+ setTimeout(() => {
823
+ this.textBoxSelectBox.focus();
824
+ }, 0);
825
+ return false;
826
+ }
827
+ const INPUT = String.fromCharCode(e.keyCode);
828
+ if (this.isChar(e.key) && this.allowSearch && e.ctrlKey == false) {
829
+ this.dropdown.open();
830
+ setTimeout(() => {
831
+ if (this.serchBox) {
832
+ this.serchBox.focus();
833
+ }
834
+ }, 0);
835
+ this.text = e.key;
836
+ }
837
+ if (e.key === 'Escape') {
838
+ this.text = null;
839
+ this.dropdown.close();
840
+ setTimeout(() => {
841
+ this.textBoxSelectBox.focus();
842
+ }, 0);
843
+ }
844
+ if ((e.key === 'ArrowDown' || e.key === 'ArrowUp') &&
845
+ this.getItems().length > 0 &&
846
+ e.type === 'keydown') {
847
+ if (this.mode === 'single') {
848
+ this.selectedItemByIndex(this.currentfocusedIndex + (e.key === 'ArrowDown' ? 1 : -1));
849
+ }
850
+ else {
851
+ if (this.dropdown.isOpen) {
852
+ // this.setSelectedIndex((e.key === 'ArrowDown' ? 1 : -1));
853
+ if (this.allowSearch == false) {
854
+ this.setSelectedIndex(e.key === 'ArrowDown' ? 1 : -1);
855
+ }
856
+ else {
857
+ setTimeout(() => {
858
+ if (this.serchBox) {
859
+ this.serchBox.focus();
860
+ }
861
+ }, 0);
862
+ }
863
+ }
864
+ else {
865
+ this.dropdown.open();
866
+ if (this.allowSearch == true) {
867
+ setTimeout(() => {
868
+ if (this.serchBox) {
869
+ this.serchBox.focus();
870
+ }
871
+ }, 0);
872
+ }
873
+ }
874
+ }
875
+ }
876
+ if (this.allowSearch === false) {
877
+ if (e.type === 'keydown' && e.key == 'Enter' && this.dropdown.isOpen) {
878
+ e.stopImmediatePropagation();
879
+ if (this.selectedItems.filter((c) => c[this.valueField] ===
880
+ this.itemsFiltered[this.currentfocusedIndex][this.valueField]).length > 0 &&
881
+ this.mode == 'multiple') {
882
+ if (this.allowNull == true ||
883
+ (this.allowNull == false && this.selectedItems.length > 1)) {
884
+ if (!this.remoteOperation && this.text && this.text !== '') {
885
+ this.selectedItems = this.selectedItems.filter((c) => c !==
886
+ this.items.filter((c) => c[this.textField]
887
+ .toLowerCase()
888
+ .includes(this.text.toLowerCase()))[this.currentfocusedIndex]);
889
+ }
890
+ else {
891
+ this.selectedItems = this.selectedItems.filter((c) => c[this.valueField] !==
892
+ this.items[this.currentfocusedIndex][this.valueField]);
893
+ }
894
+ this.emitSelectionChangedEvent();
895
+ }
896
+ }
897
+ else {
898
+ if (this.mode == 'multiple') {
899
+ if (this.currentfocusedIndex != -1) {
900
+ if (!this.remoteOperation && this.text && this.text !== '') {
901
+ if (this.itemsFiltered.length === 1) {
902
+ this.selectedItems.push(this.itemsFiltered[0]);
903
+ }
904
+ else {
905
+ this.selectedItems.push(this.itemsFiltered[this.currentfocusedIndex]);
906
+ }
907
+ }
908
+ else {
909
+ this.selectedItems.push(this.items[this.currentfocusedIndex]);
910
+ }
911
+ this.emitSelectionChangedEvent();
912
+ }
913
+ }
914
+ else {
915
+ if (this.text && this.itemsFiltered.length === 1) {
916
+ this.setSelectedItems(this.itemsFiltered, true);
917
+ }
918
+ if (this.mode == 'single') {
919
+ this.dropdown.close();
920
+ setTimeout(() => {
921
+ this.textBoxSelectBox.focus();
922
+ }, 0);
923
+ }
924
+ }
925
+ }
926
+ }
927
+ }
928
+ this.cdr.markForCheck();
929
+ }
930
+ focus() {
931
+ this.textbox.focus();
932
+ }
933
+ selectedItemByIndex(index) {
934
+ let item = [];
935
+ if (!this.remoteOperation && this.text && this.text !== '') {
936
+ this.itemsFiltered = this.items.filter((c) => c[this.textField]
937
+ .toLowerCase()
938
+ .includes(this.text.toLowerCase()));
939
+ item = this.itemsFiltered[index];
940
+ }
941
+ else {
942
+ item = this.items[index];
943
+ }
944
+ //
945
+ // const item = this.text ? this.items.filter((c) => (c[this.textField] as string).toLowerCase().includes(this.text.toLowerCase()))[index] : this.items[index];
946
+ if (item) {
947
+ this.setSelectedItems([item], true);
948
+ }
949
+ this.setSelectedIndex();
950
+ }
951
+ noAccentOrigin = {
952
+ ك: 'ک',
953
+ ﻷ: 'لا',
954
+ ؤ: 'و',
955
+ ى: 'ی',
956
+ ي: 'ی',
957
+ ئ: 'ی',
958
+ أ: 'ا',
959
+ إ: 'ا',
960
+ آ: 'ا',
961
+ ٱ: 'ا',
962
+ ٳ: 'ا',
963
+ ة: 'ه',
964
+ ء: '',
965
+ 'ِ': '',
966
+ 'ْ': '',
967
+ 'ُ': '',
968
+ 'َ': '',
969
+ 'ّ': '',
970
+ 'ٍ': '',
971
+ 'ً': '',
972
+ 'ٌ': '',
973
+ 'ٓ': '',
974
+ 'ٰ': '',
975
+ 'ٔ': '',
976
+ '�': '',
977
+ };
978
+ getItems() {
979
+ if (this.items == null) {
980
+ return [];
981
+ }
982
+ if (!this.remoteOperation && this.text && this.text !== '') {
983
+ return this.items.filter((c) => {
984
+ const convertedTextField = this.convertArabicToPersian(c[this.textField], this.noAccentOrigin);
985
+ const convertedText = this.convertArabicToPersian(this.text, this.noAccentOrigin);
986
+ return convertedTextField
987
+ .toLowerCase()
988
+ .includes(convertedText.toLowerCase());
989
+ });
990
+ }
991
+ else {
992
+ return this.items;
993
+ }
994
+ }
995
+ convertArabicToPersian(inputString, conversionMap) {
996
+ let textConvert = '';
997
+ for (let i = 0; i < inputString.length; i++) {
998
+ const currentChar = inputString[i];
999
+ if (conversionMap[currentChar]) {
1000
+ textConvert += conversionMap[currentChar];
1001
+ }
1002
+ else {
1003
+ textConvert += currentChar;
1004
+ }
1005
+ }
1006
+ return textConvert;
1007
+ }
1008
+ isItemSelected(item) {
1009
+ return (this.selectedItems &&
1010
+ this.selectedItems.filter((c) => c[this.valueField] === item[this.valueField]).length > 0);
1011
+ }
1012
+ itemsStatusObserver;
1013
+ waitForData(callbackfn) {
1014
+ if (this.items && this.items.length) {
1015
+ callbackfn();
1016
+ }
1017
+ else if (!this.itemsStatusObserver) {
1018
+ Observable.create((observer) => {
1019
+ this.itemsStatusObserver = observer;
1020
+ })
1021
+ .pipe(debounceTime(100))
1022
+ .pipe(distinctUntilChanged())
1023
+ .subscribe((c) => {
1024
+ callbackfn();
1025
+ });
1026
+ }
1027
+ }
1028
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AXSelectBoxComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
1029
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AXSelectBoxComponent, selector: "ax-select-box", inputs: { showDropDownButton: "showDropDownButton", rowInputTemplate: "rowInputTemplate", showCheckBox: "showCheckBox", readonly: "readonly", rtl: "rtl", disabled: "disabled", placeholder: "placeholder", size: "size", allowNull: "allowNull", textAlign: "textAlign", bufferSize: "bufferSize", remoteOperation: "remoteOperation", fitParent: "fitParent", dropdownWidth: "dropdownWidth", multiLine: "multiLine", onDemandTranslate: "onDemandTranslate", dataSource: "dataSource", validation: "validation", disabledCallback: "disabledCallback", allowSearch: "allowSearch", textField: "textField", valueField: "valueField", disabledField: "disabledField", mode: "mode", items: "items", selectedItems: "selectedItems", selectedValues: "selectedValues" }, outputs: { dropdownToggle: "dropdownToggle", itemsChange: "itemsChange", onBlur: "onBlur", onFocus: "onFocus", selectionChanged: "selectionChanged", selectedItemsChange: "selectedItemsChange", selectedValuesChange: "selectedValuesChange" }, host: { styleAttribute: "width: 100%" }, providers: [
1030
+ { provide: AXValidatableComponent, useExisting: AXSelectBoxComponent },
1031
+ ], queries: [{ propertyName: "rowTemplate", first: true, predicate: TemplateRef, descendants: true, static: true }, { propertyName: "_contentDataSource", first: true, predicate: AXDataSourceComponent, descendants: true, static: true }, { propertyName: "_contentValidation", first: true, predicate: AXValidation, descendants: true, static: true }], viewQueries: [{ propertyName: "span", first: true, predicate: AXTextBoxComponent, descendants: true, static: true }, { propertyName: "textbox", first: true, predicate: AXTextBoxComponent, descendants: true, static: true }, { propertyName: "listContainer", first: true, predicate: ["listContainer"], descendants: true, static: true }, { propertyName: "serchBox", first: true, predicate: ["serchBox"], descendants: true }, { propertyName: "textBoxSelectBox", first: true, predicate: ["textBoxSelectBox"], descendants: true, static: true }, { propertyName: "dropdown", first: true, predicate: ["d"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<ax-drop-down\n #d\n [size]=\"size\"\n [fitParent]=\"fitParent\"\n [dropdownWidth]=\"dropdownWidth\"\n [rtl]=\"rtl\"\n [showDropDownButton]=\"showDropDownButton\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n (dropdownToggle)=\"dropdownToggleSelecBox($event)\"\n>\n <ng-container start>\n <ng-content select=\"[start]\"> </ng-content>\n </ng-container>\n <ng-container header>\n <div\n class=\"ax chips-container\"\n [class.multiline]=\"multiLine\"\n [style.padding]=\"selectedItems.length && multiLine ? '0.25rem' : ''\"\n >\n <div\n class=\"chips\"\n [class.chips-blank]=\"mode === 'single'\"\n [title]=\"item[textField]\"\n *ngFor=\"let item of selectedItems\"\n >\n <span\n class=\"chips-text\"\n [ngStyle]=\"{\n width:\n item[textField].length > 15 &&\n this.mode === 'multiple' &&\n !multiLine\n ? '110px'\n : 'auto'\n }\"\n >\n {{ item[textField] }}\n </span>\n <span\n class=\"close-icon\"\n (click)=\"handleItemRemoveClick(item)\"\n *ngIf=\"\n (readonly != true || itemRemove == true) &&\n disabled != true &&\n (allowNull == true || selectedItems.length > 1)\n \"\n >\n <i class=\"far fa-times close\"></i>\n </span>\n </div>\n <div class=\"search-wrapper\" (click)=\"onTextBoxClick($event)\">\n <ax-text-box\n #textBoxSelectBox\n [textAlign]=\"textAlign\"\n [placeholder]=\"selectedItems.length == 0 ? placeholder : ''\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n (onkey)=\"handleKeyEvent($event)\"\n [size]=\"size\"\n (onFocus)=\"onFocusTextBox($event)\"\n >\n </ax-text-box>\n </div>\n </div>\n </ng-container>\n <ng-container end>\n <ng-content select=\"[end]\"> </ng-content>\n </ng-container>\n\n <ng-container panel>\n <div *ngIf=\"allowSearch\" class=\"search-wrapper\" style=\"padding: 0.7em\">\n <ax-search-box\n #serchBox\n [onDemandTranslate]=\"onDemandTranslate\"\n [(value)]=\"text\"\n (onkey)=\"handleKeyEventSearch($event)\"\n (textChanged)=\"textChanged($event)\"\n (onButtonClick)=\"textChanged($event)\"\n >\n </ax-search-box>\n </div>\n <div class=\"ax list-container\">\n <div\n #listContainer\n class=\"list-container-items\"\n (scroll)=\"scrolled($event)\"\n >\n <ng-container\n *ngIf=\"getItems().length > 0; then thenTemplate; else elseTemplate\"\n ></ng-container>\n <ng-template #thenTemplate>\n <div\n [class.ax-state-disabled]=\"isItemDisabled(item)\"\n class=\"list-item\"\n *ngFor=\"let item of getItems(); let i = index\"\n [class.focused]=\"i == currentfocusedIndex\"\n [class.selected]=\"isItemSelected(item)\"\n (click)=\"handleItemClick($event, item)\"\n >\n <div style=\"display: flex\">\n <ax-check-box\n *ngIf=\"showCheckBox\"\n [size]=\"size\"\n [value]=\"isItemSelected(item)\"\n [disabled]=\"\n (!allowNull &&\n selectedItems.length === 1 &&\n isItemSelected(item)) ||\n isItemDisabled(item)\n \"\n (onClick)=\"handleItemClick($event, item)\"\n >\n </ax-check-box>\n <ng-container *ngIf=\"rowTemplate; else elseTemplate\">\n <div\n style=\"\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n flex: 1;\n \"\n [title]=\"item[textField]\"\n [ngStyle]=\"\n showCheckBox ? { 'padding-inline-start': '0.5rem' } : ''\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"\n rowTemplate;\n context: { $implicit: item }\n \"\n >\n </ng-container>\n </div>\n </ng-container>\n <ng-template #elseTemplate>\n <div\n style=\"\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n flex: 1;\n \"\n [title]=\"item[textField]\"\n [ngStyle]=\"\n showCheckBox ? { 'padding-inline-start': '0.5rem' } : ''\n \"\n >\n {{ item[textField] }}\n </div>\n </ng-template>\n </div>\n </div>\n </ng-template>\n <div *ngIf=\"showLoading\" class=\"ax-pad-sm\" style=\"text-align: center\">\n <i\n class=\"far fa-spinner-third fa-pulse fa-2x\"\n style=\"color: var(--ax-primary-color)\"\n ></i>\n </div>\n <!-- <ax-loading-indicator ></ax-loading-indicator> -->\n <ng-template #elseTemplate>\n <ng-container\n *ngIf=\"\n showLoading == true;\n then searchTemplate;\n else noDataTemplate\n \"\n ></ng-container>\n <ng-template #searchTemplate>\n <div class=\"list-item\">\n {{ 'common.search' | trans }}\n </div>\n </ng-template>\n <ng-template #noDataTemplate>\n <div class=\"list-item\">\n {{ 'common.noDataFound' | trans }}\n </div>\n </ng-template>\n </ng-template>\n </div>\n </div>\n </ng-container>\n</ax-drop-down>\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.AXDropdownComponent, selector: "ax-drop-down", inputs: ["rtl", "readonly", "loading", "dropdownWidth"], outputs: ["dropdownToggle", "onButtonClick"] }, { kind: "component", type: i3.AXTextBoxComponent, selector: "ax-text-box", inputs: ["mask", "showMask", "type", "maxLength", "maskGuid", "maskPlaceholder", "maskKeepCharPositions"] }, { kind: "component", type: i4.AXCheckBoxComponent, selector: "ax-check-box", inputs: ["readonly", "disabled", "size", "label", "tabIndex", "indeterminate", "value"], outputs: ["onValueChanged", "valueChange", "onClick"] }, { kind: "component", type: i5.AXSearchBoxComponent, selector: "ax-search-box", inputs: ["placeholder", "onDemandTranslate", "text", "delay"], outputs: ["textChanged", "onButtonClick"] }, { kind: "pipe", type: i6.AXTranslatorPipe, name: "trans" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1032
+ }
1033
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AXSelectBoxComponent, decorators: [{
1034
+ type: Component,
1035
+ args: [{ selector: 'ax-select-box', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: { style: 'width: 100%' }, providers: [
1036
+ { provide: AXValidatableComponent, useExisting: AXSelectBoxComponent },
1037
+ ], template: "<ax-drop-down\n #d\n [size]=\"size\"\n [fitParent]=\"fitParent\"\n [dropdownWidth]=\"dropdownWidth\"\n [rtl]=\"rtl\"\n [showDropDownButton]=\"showDropDownButton\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n (dropdownToggle)=\"dropdownToggleSelecBox($event)\"\n>\n <ng-container start>\n <ng-content select=\"[start]\"> </ng-content>\n </ng-container>\n <ng-container header>\n <div\n class=\"ax chips-container\"\n [class.multiline]=\"multiLine\"\n [style.padding]=\"selectedItems.length && multiLine ? '0.25rem' : ''\"\n >\n <div\n class=\"chips\"\n [class.chips-blank]=\"mode === 'single'\"\n [title]=\"item[textField]\"\n *ngFor=\"let item of selectedItems\"\n >\n <span\n class=\"chips-text\"\n [ngStyle]=\"{\n width:\n item[textField].length > 15 &&\n this.mode === 'multiple' &&\n !multiLine\n ? '110px'\n : 'auto'\n }\"\n >\n {{ item[textField] }}\n </span>\n <span\n class=\"close-icon\"\n (click)=\"handleItemRemoveClick(item)\"\n *ngIf=\"\n (readonly != true || itemRemove == true) &&\n disabled != true &&\n (allowNull == true || selectedItems.length > 1)\n \"\n >\n <i class=\"far fa-times close\"></i>\n </span>\n </div>\n <div class=\"search-wrapper\" (click)=\"onTextBoxClick($event)\">\n <ax-text-box\n #textBoxSelectBox\n [textAlign]=\"textAlign\"\n [placeholder]=\"selectedItems.length == 0 ? placeholder : ''\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n (onkey)=\"handleKeyEvent($event)\"\n [size]=\"size\"\n (onFocus)=\"onFocusTextBox($event)\"\n >\n </ax-text-box>\n </div>\n </div>\n </ng-container>\n <ng-container end>\n <ng-content select=\"[end]\"> </ng-content>\n </ng-container>\n\n <ng-container panel>\n <div *ngIf=\"allowSearch\" class=\"search-wrapper\" style=\"padding: 0.7em\">\n <ax-search-box\n #serchBox\n [onDemandTranslate]=\"onDemandTranslate\"\n [(value)]=\"text\"\n (onkey)=\"handleKeyEventSearch($event)\"\n (textChanged)=\"textChanged($event)\"\n (onButtonClick)=\"textChanged($event)\"\n >\n </ax-search-box>\n </div>\n <div class=\"ax list-container\">\n <div\n #listContainer\n class=\"list-container-items\"\n (scroll)=\"scrolled($event)\"\n >\n <ng-container\n *ngIf=\"getItems().length > 0; then thenTemplate; else elseTemplate\"\n ></ng-container>\n <ng-template #thenTemplate>\n <div\n [class.ax-state-disabled]=\"isItemDisabled(item)\"\n class=\"list-item\"\n *ngFor=\"let item of getItems(); let i = index\"\n [class.focused]=\"i == currentfocusedIndex\"\n [class.selected]=\"isItemSelected(item)\"\n (click)=\"handleItemClick($event, item)\"\n >\n <div style=\"display: flex\">\n <ax-check-box\n *ngIf=\"showCheckBox\"\n [size]=\"size\"\n [value]=\"isItemSelected(item)\"\n [disabled]=\"\n (!allowNull &&\n selectedItems.length === 1 &&\n isItemSelected(item)) ||\n isItemDisabled(item)\n \"\n (onClick)=\"handleItemClick($event, item)\"\n >\n </ax-check-box>\n <ng-container *ngIf=\"rowTemplate; else elseTemplate\">\n <div\n style=\"\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n flex: 1;\n \"\n [title]=\"item[textField]\"\n [ngStyle]=\"\n showCheckBox ? { 'padding-inline-start': '0.5rem' } : ''\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"\n rowTemplate;\n context: { $implicit: item }\n \"\n >\n </ng-container>\n </div>\n </ng-container>\n <ng-template #elseTemplate>\n <div\n style=\"\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n flex: 1;\n \"\n [title]=\"item[textField]\"\n [ngStyle]=\"\n showCheckBox ? { 'padding-inline-start': '0.5rem' } : ''\n \"\n >\n {{ item[textField] }}\n </div>\n </ng-template>\n </div>\n </div>\n </ng-template>\n <div *ngIf=\"showLoading\" class=\"ax-pad-sm\" style=\"text-align: center\">\n <i\n class=\"far fa-spinner-third fa-pulse fa-2x\"\n style=\"color: var(--ax-primary-color)\"\n ></i>\n </div>\n <!-- <ax-loading-indicator ></ax-loading-indicator> -->\n <ng-template #elseTemplate>\n <ng-container\n *ngIf=\"\n showLoading == true;\n then searchTemplate;\n else noDataTemplate\n \"\n ></ng-container>\n <ng-template #searchTemplate>\n <div class=\"list-item\">\n {{ 'common.search' | trans }}\n </div>\n </ng-template>\n <ng-template #noDataTemplate>\n <div class=\"list-item\">\n {{ 'common.noDataFound' | trans }}\n </div>\n </ng-template>\n </ng-template>\n </div>\n </div>\n </ng-container>\n</ax-drop-down>\n" }]
1038
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { showDropDownButton: [{
1039
+ type: Input
1040
+ }], rowTemplate: [{
1041
+ type: ContentChild,
1042
+ args: [TemplateRef, { static: true }]
1043
+ }], rowInputTemplate: [{
1044
+ type: Input
1045
+ }], span: [{
1046
+ type: ViewChild,
1047
+ args: [AXTextBoxComponent, { static: true }]
1048
+ }], textbox: [{
1049
+ type: ViewChild,
1050
+ args: [AXTextBoxComponent, { static: true }]
1051
+ }], listContainer: [{
1052
+ type: ViewChild,
1053
+ args: ['listContainer', { static: true }]
1054
+ }], serchBox: [{
1055
+ type: ViewChild,
1056
+ args: ['serchBox', { static: false }]
1057
+ }], textBoxSelectBox: [{
1058
+ type: ViewChild,
1059
+ args: ['textBoxSelectBox', { static: true }]
1060
+ }], showCheckBox: [{
1061
+ type: Input
1062
+ }], readonly: [{
1063
+ type: Input
1064
+ }], rtl: [{
1065
+ type: Input
1066
+ }], disabled: [{
1067
+ type: Input
1068
+ }], placeholder: [{
1069
+ type: Input
1070
+ }], size: [{
1071
+ type: Input
1072
+ }], allowNull: [{
1073
+ type: Input
1074
+ }], textAlign: [{
1075
+ type: Input
1076
+ }], bufferSize: [{
1077
+ type: Input
1078
+ }], remoteOperation: [{
1079
+ type: Input
1080
+ }], fitParent: [{
1081
+ type: Input
1082
+ }], dropdownWidth: [{
1083
+ type: Input
1084
+ }], multiLine: [{
1085
+ type: Input
1086
+ }], dropdownToggle: [{
1087
+ type: Output
1088
+ }], onDemandTranslate: [{
1089
+ type: Input
1090
+ }], _contentDataSource: [{
1091
+ type: ContentChild,
1092
+ args: [AXDataSourceComponent, { static: true }]
1093
+ }], dataSource: [{
1094
+ type: Input
1095
+ }], _contentValidation: [{
1096
+ type: ContentChild,
1097
+ args: [AXValidation, { static: true }]
1098
+ }], validation: [{
1099
+ type: Input
1100
+ }], dropdown: [{
1101
+ type: ViewChild,
1102
+ args: ['d', { static: true }]
1103
+ }], disabledCallback: [{
1104
+ type: Input
1105
+ }], allowSearch: [{
1106
+ type: Input
1107
+ }], textField: [{
1108
+ type: Input
1109
+ }], valueField: [{
1110
+ type: Input
1111
+ }], disabledField: [{
1112
+ type: Input
1113
+ }], mode: [{
1114
+ type: Input
1115
+ }], itemsChange: [{
1116
+ type: Output
1117
+ }], onBlur: [{
1118
+ type: Output
1119
+ }], onFocus: [{
1120
+ type: Output
1121
+ }], items: [{
1122
+ type: Input
1123
+ }], selectionChanged: [{
1124
+ type: Output
1125
+ }], selectedItemsChange: [{
1126
+ type: Output
1127
+ }], selectedItems: [{
1128
+ type: Input
1129
+ }], selectedValuesChange: [{
1130
+ type: Output
1131
+ }], selectedValues: [{
1132
+ type: Input
1133
+ }] } });
1134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0Ym94LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9zcmMvbGliL3NlbGVjdGJveC9zZWxlY3Rib3guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3NyYy9saWIvc2VsZWN0Ym94L3NlbGVjdGJveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDTixXQUFXLEVBQ1gsU0FBUyxFQUNULGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEMsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BFLE9BQU8sRUFJTCxzQkFBc0IsR0FDdkIsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFFNUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDckUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9DQUFvQyxDQUFD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O1lBQ3BCLEdBQUcsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDO1lBQzNCLEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO1lBQ3JCLEdBQUcsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDO1lBQ3pCLEdBQUcsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDO1lBQzNCLEdBQUcsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDO1lBQzFCLEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO1lBQ3JCLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQ3BCLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1lBQ25CLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO1lBQ3RCLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO1lBQ3RCLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO1lBQ3RCLEdBQUcsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO1lBQ3hCLEdBQUcsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO1lBQ3ZCLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO1lBQ3RCLEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO1lBQ3JCLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1lBQ25CLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1lBQ2xCLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1lBQ2xCLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1lBQ2xCLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1lBQ2xCLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1lBQ2xCLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1lBQ2xCLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1lBQ2xCLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1lBQ2xCLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFD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eEIsS0FBSztnQkFFRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFFSSxXQUFXO3NCQUFwQixNQUFNO2dCQUVHLE1BQU07c0JBQWYsTUFBTTtnQkFFRyxPQUFPO3NCQUFoQixNQUFNO2dCQUlJLEtBQUs7c0JBRGYsS0FBSztnQkFzQk4sZ0JBQWdCO3NCQURmLE1BQU07Z0JBS1AsbUJBQW1CO3NCQURsQixNQUFNO2dCQUtJLGFBQWE7c0JBRHZCLEtBQUs7Z0JBME1OLG9CQUFvQjtzQkFEbkIsTUFBTTtnQkFNSSxjQUFjO3NCQUR4QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhDb25maWcgfSBmcm9tICdAYWNvcmV4L2NvcmUnO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBPdXRwdXQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGRpZmZlcmVuY2VCeSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgQVhCYXNlSW5wdXRDb21wb25lbnQsXG4gIEFYQmFzZVNpemFibGVDb21wb25lbnQsXG4gIEFYRWxlbWVudFNpemUsXG4gIEFYVmFsaWRhdGFibGVDb21wb25lbnQsXG59IGZyb20gJy4uL2Jhc2UvZWxlbWVudC5jbGFzcyc7XG5pbXBvcnQgeyBBWEJhc2VFdmVudCB9IGZyb20gJy4uL2Jhc2UvZXZlbnRzLmNsYXNzJztcbmltcG9ydCB7IEFYRGF0YVNvdXJjZUNvbXBvbmVudCB9IGZyb20gJy4uL2RhdGEtc291cmNlL2RhdGFzb3VyY2UuY29tcG9uZW50JztcbmltcG9ydCB7IEFYRGF0YVNvdXJjZVJlYWRQYXJhbXMgfSBmcm9tICcuLi9kYXRhLXNvdXJjZS9yZWFkLXBhcmFtJztcbmltcG9ydCB7IEFYRHJvcGRvd25Db21wb25lbnQgfSBmcm9tICcuLi9kcm9wZG93bi9kcm9wZG93bi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhTZWFyY2hCb3hDb21wb25lbnQgfSBmcm9tICcuLi9zZWFyY2hib3gvc2VhcmNoYm94LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBWFRleHRCb3hDb21wb25lbnQgfSBmcm9tICcuLi90ZXh0Ym94L3RleHRib3guY29tcG9uZW50JztcbmltcG9ydCB7IEFYVmFsaWRhdGlvbiB9IGZyb20gJy4uL3ZhbGlkYXRpb24vdmFsaWRhdGlvbi5jb21wb25lbnQnO1xuZXhwb3J0IGNsYXNzIEFYU2VsZWN0Qm94U2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV4dGVuZHMgQVhCYXNlRXZlbnQge1xuICBjb25zdHJ1Y3RvcihcbiAgICBjb21wb25lbnQ6IGFueSxcbiAgICBwdWJsaWMgc2VsZWN0ZWRJdGVtczogYW55W10sXG4gICAgcHVibGljIHNlbGVjdGVkVmFsdWVzOiBhbnlbXSB8IGFueVxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuY29tcG9uZW50ID0gY29tcG9uZW50O1xuICB9XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4LXNlbGVjdC1ib3gnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2VsZWN0Ym94LmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGhvc3Q6IHsgc3R5bGU6ICd3aWR0aDogMTAwJScgfSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgeyBwcm92aWRlOiBBWFZhbGlkYXRhYmxlQ29tcG9uZW50LCB1c2VFeGlzdGluZzogQVhTZWxlY3RCb3hDb21wb25lbnQgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQVhTZWxlY3RCb3hDb21wb25lbnRcbiAgZXh0ZW5kcyBBWFZhbGlkYXRhYmxlQ29tcG9uZW50XG4gIGltcGxlbWVudHMgQVhCYXNlU2l6YWJsZUNvbXBvbmVudCwgQVhCYXNlSW5wdXRDb21wb25lbnRcbntcbiAgQElucHV0KCkgc2hvd0Ryb3BEb3duQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcblxuICBAQ29udGVudENoaWxkKFRlbXBsYXRlUmVmLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICByb3dUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICBASW5wdXQoKVxuICByb3dJbnB1dFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAVmlld0NoaWxkKEFYVGV4dEJveENvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcbiAgc3BhbjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgQFZpZXdDaGlsZChBWFRleHRCb3hDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHRleHRib3g6IEFYVGV4dEJveENvbXBvbmVudDtcblxuICBAVmlld0NoaWxkKCdsaXN0Q29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgbGlzdENvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cbiAgQFZpZXdDaGlsZCgnc2VyY2hCb3gnLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgc2VyY2hCb3g6IEFYU2VhcmNoQm94Q29tcG9uZW50O1xuXG4gIEBWaWV3Q2hpbGQoJ3RleHRCb3hTZWxlY3RCb3gnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICB0ZXh0Qm94U2VsZWN0Qm94OiBBWFRleHRCb3hDb21wb25lbnQ7XG5cbiAgQElucHV0KCkgc2hvd0NoZWNrQm94OiBib29sZWFuID0gdHJ1ZTtcblxuICBASW5wdXQoKSByZWFkb25seTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHJ0bDogYm9vbGVhbiA9IEFYQ29uZmlnLmdldCgnbGF5b3V0LnJ0bCcpO1xuXG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZztcblxuICBASW5wdXQoKSBzaXplOiBBWEVsZW1lbnRTaXplID0gJ21kJztcblxuICBASW5wdXQoKSBhbGxvd051bGw6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBJbnB1dCgpIHRleHRBbGlnbjogJ3JpZ2h0JyB8ICdsZWZ0JyB8IG51bGwgPSBudWxsO1xuXG4gIEBJbnB1dCgpIGJ1ZmZlclNpemU6IG51bWJlciA9IDIwO1xuXG4gIEBJbnB1dCgpIHJlbW90ZU9wZXJhdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIGZpdFBhcmVudDogYm9vbGVhbiA9IHRydWU7XG5cbiAgQElucHV0KCkgZHJvcGRvd25XaWR0aDogc3RyaW5nID0gJzMwMHB4JztcblxuICBASW5wdXQoKSBtdWx0aUxpbmUgPSBmYWxzZTtcblxuICBAT3V0cHV0KClcbiAgZHJvcGRvd25Ub2dnbGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIC8vIHRoaXMgaW5wdXQgaXMgUHJpdmF0ZSBhbmQgb25seSB1c2UgaW4gTE9WXG5cbiAgQElucHV0KCkgb25EZW1hbmRUcmFuc2xhdGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjdXJyZW50Zm9jdXNlZEluZGV4OiBudW1iZXIgPSAtMTtcbiAgc2hvd0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBza2lwOiBudW1iZXIgPSAtMTtcbiAgc2VhcmNoVGV4dDogc3RyaW5nID0gJyc7XG4gIC8vIEBJbnB1dCgpXG4gIC8vIGNoaXBzV2lkdGg6IHN0cmluZyA9ICcnO1xuXG4gIHRleHQ6IHN0cmluZyA9ICcnO1xuICB0b3RhbENvdW50OiBudW1iZXIgPSAwO1xuXG4gIEBDb250ZW50Q2hpbGQoQVhEYXRhU291cmNlQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBwcml2YXRlIF9jb250ZW50RGF0YVNvdXJjZTogQVhEYXRhU291cmNlQ29tcG9uZW50O1xuXG4gIHByaXZhdGUgX2RhdGFTb3VyY2U6IEFYRGF0YVNvdXJjZUNvbXBvbmVudDtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IGRhdGFTb3VyY2UoKTogQVhEYXRhU291cmNlQ29tcG9uZW50IHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZSA/IHRoaXMuX2RhdGFTb3VyY2UgOiB0aGlzLl9jb250ZW50RGF0YVNvdXJjZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgZGF0YVNvdXJjZSh2OiBBWERhdGFTb3VyY2VDb21wb25lbnQpIHtcbiAgICB0aGlzLl9kYXRhU291cmNlID0gdjtcbiAgfVxuXG4gIEBDb250ZW50Q2hpbGQoQVhWYWxpZGF0aW9uLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBwcml2YXRlIF9jb250ZW50VmFsaWRhdGlvbjogQVhWYWxpZGF0aW9uO1xuXG4gIHByaXZhdGUgX3ZhbGlkYXRpb246IEFYVmFsaWRhdGlvbjtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IHZhbGlkYXRpb24oKTogQVhWYWxpZGF0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsaWRhdGlvbiA/IHRoaXMuX3ZhbGlkYXRpb24gOiB0aGlzLl9jb250ZW50VmFsaWRhdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgdmFsaWRhdGlvbih2OiBBWFZhbGlkYXRpb24pIHtcbiAgICB0aGlzLl92YWxpZGF0aW9uID0gdjtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIHpvbmU6IE5nWm9uZVxuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgQFZpZXdDaGlsZCgnZCcsIHsgc3RhdGljOiB0cnVlIH0pXG4gIGRyb3Bkb3duOiBBWERyb3Bkb3duQ29tcG9uZW50O1xuXG4gIEBJbnB1dCgpIGRpc2FibGVkQ2FsbGJhY2s6IChlOiB7IGl0ZW06IGFueTsgaW5kZXg6IG51bWJlciB9KSA9PiBib29sZWFuO1xuXG4gIEBJbnB1dCgpIGFsbG93U2VhcmNoOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgdGV4dEZpZWxkOiBzdHJpbmcgPSAndGV4dCc7XG4gIEBJbnB1dCgpIHZhbHVlRmllbGQ6IHN0cmluZyA9ICd2YWx1ZSc7XG4gIEBJbnB1dCgpIGRpc2FibGVkRmllbGQ6IHN0cmluZyA9ICdkaXNhYmxlZCc7XG4gIEBJbnB1dCgpIG1vZGU6ICdzaW5nbGUnIHwgJ211bHRpcGxlJyA9ICdzaW5nbGUnO1xuICBpdGVtUmVtb3ZlOiBib29sZWFuID0gZmFsc2U7XG4gIEBPdXRwdXQoKSBpdGVtc0NoYW5nZTogRXZlbnRFbWl0dGVyPGFueVtdPiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XG5cbiAgQE91dHB1dCgpIG9uQmx1cjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KCkgb25Gb2N1czogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBwcml2YXRlIF9pdGVtczogYW55W10gPSBbXTtcbiAgQElucHV0KClcbiAgcHVibGljIGdldCBpdGVtcygpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zO1xuICB9XG4gIHB1YmxpYyBzZXQgaXRlbXModjogYW55W10pIHtcbiAgICB0aGlzLl9pdGVtcyA9IHY7XG4gICAgaWYgKHRoaXMuaXRlbXNDaGFuZ2UpIHtcbiAgICAgIHRoaXMuaXRlbXNDaGFuZ2UuZW1pdCh2KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXRlbXNTdGF0dXNPYnNlcnZlcikge1xuICAgICAgdGhpcy5pdGVtc1N0YXR1c09ic2VydmVyLm5leHQodGhpcy5pdGVtcy5sZW5ndGgpO1xuICAgIH1cbiAgfVxuXG4gIGhhc1NlbGVjdGVkVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXRlbXNGaWx0ZXJlZDogYW55W10gPSBbXTtcblxuICAvLyAjZW5kcmVnaW9uXG5cbiAgZHJvcERvd25EaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKVxuICBzZWxlY3Rpb25DaGFuZ2VkOiBFdmVudEVtaXR0ZXI8QVhTZWxlY3RCb3hTZWxlY3Rpb25DaGFuZ2VkRXZlbnQ+ID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyPEFYU2VsZWN0Qm94U2VsZWN0aW9uQ2hhbmdlZEV2ZW50PigpO1xuXG4gIEBPdXRwdXQoKVxuICBzZWxlY3RlZEl0ZW1zQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55W10+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcblxuICBwcml2YXRlIF9zZWxlY3RlZEl0ZW1zOiBhbnlbXSA9IFtdO1xuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IHNlbGVjdGVkSXRlbXMoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZEl0ZW1zIHx8IFtdO1xuICB9XG4gIHB1YmxpYyBzZXQgc2VsZWN0ZWRJdGVtcyh2OiBhbnlbXSkge1xuICAgIHRoaXMuc2V0U2VsZWN0ZWRJdGVtc0NoYW5nZSh2KTtcbiAgICAvLyBpZiAoIXYpIHtcbiAgICAvLyAgIHYgPSBbXTtcbiAgICAvLyB9XG5cbiAgICAvLyBjb25zdCBvbGQgPSB0aGlzLnNlbGVjdGVkSXRlbXM7XG4gICAgLy8gaWYgKEpTT04uc3RyaW5naWZ5KG9sZCkgIT09IEpTT04uc3RyaW5naWZ5KHYpKSB7XG4gICAgLy8gICB0aGlzLl9zZWxlY3RlZEl0ZW1zID0gdGhpcy5tb2RlID09ICdzaW5nbGUnID8gdi5zbGljZSgwLCAxKSA6IFsuLi5uZXcgU2V0KHYpXTsgLy9bLi4ubmV3IFNldCh2WzBdKV0gOiBbLi4ubmV3IFNldCh2KV07XG4gICAgLy8gICB0aGlzLl9zZWxlY3RlZEl0ZW1zLmZvckVhY2goKGMpID0+IChjLnNlbGVjdGVkID0gdHJ1ZSkpO1xuICAgIC8vICAgdGhpcy5zZWxlY3RlZEl0ZW1zQ2hhbmdlLmVtaXQodGhpcy5fc2VsZWN0ZWRJdGVtcyk7XG4gICAgLy8gICB0aGlzLnNlbGVjdGVkVmFsdWVzQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFZhbHVlcyk7XG4gICAgLy8gICB0aGlzLmNsZWFyVmFsaWRhdGlvblN0eWxlKHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgIC8vICAgdGhpcy53YWl0Rm9yRGF0YSgoKSA9PiB7XG4gICAgLy8gICAgIGlmICh0aGlzLl9zZWxlY3RlZEl0ZW1zKSB7XG4gICAgLy8gICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKChjKSA9PiAoYy5zZWxlY3RlZCA9IHRoaXMuX3NlbGVjdGVkSXRlbXMuc29tZSgoaSkgPT4gaVt0aGlzLnZhbHVlRmllbGRdID09IGNbdGhpcy52YWx1ZUZpZWxkXSkpKTtcbiAgICAvLyAgICAgfVxuICAgIC8vICAgfSk7XG4gICAgLy8gfVxuICB9XG5cbiAgc2V0U2VsZWN0ZWRJdGVtc0NoYW5nZSh2OiBhbnlbXSwgb2xkOiBhbnlbXSA9IHRoaXMuc2VsZWN0ZWRJdGVtcykge1xuICAgIGlmICghdikge1xuICAgICAgdiA9IFtdO1xuICAgIH1cbiAgICAvLyBjb25zdCBvbGQgPSB0aGlzLnNlbGVjdGVkSXRlbXM7XG4gICAgdmFyIGYgPSBkaWZmZXJlbmNlQnkob2xkLCB2LCB0aGlzLnZhbHVlRmllbGQpO1xuICAgIHZhciBzID0gZGlmZmVyZW5jZUJ5KHYsIG9sZCwgdGhpcy52YWx1ZUZpZWxkKTtcbiAgICAvLyBpZiAoSlNPTi5zdHJpbmdpZnkob2xkKSAhPT0gSlNPTi5zdHJpbmdpZnkodikpIHtcbiAgICBpZiAoZi5sZW5ndGggIT0gMCB8fCBzLmxlbmd0aCAhPSAwKSB7XG4gICAgICB0aGlzLl9zZWxlY3RlZEl0ZW1zID1cbiAgICAgICAgdGhpcy5tb2RlID09ICdzaW5nbGUnID8gdi5zbGljZSgwLCAxKSA6IFsuLi5uZXcgU2V0KHYpXTsgLy9bLi4ubmV3IFNldCh2WzBdKV0gOiBbLi4ubmV3IFNldCh2KV07XG4gICAgICB0aGlzLl9zZWxlY3RlZEl0ZW1zLmZvckVhY2goKGMpID0+IChjLnNlbGVjdGVkID0gdHJ1ZSkpO1xuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zQ2hhbmdlLmVtaXQodGhpcy5fc2VsZWN0ZWRJdGVtcyk7XG4gICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFZhbHVlcyk7XG4gICAgICB0aGlzLmNsZWFyVmFsaWRhdGlvblN0eWxlKHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgdGhpcy53YWl0Rm9yRGF0YSgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9zZWxlY3RlZEl0ZW1zKSB7XG4gICAgICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKFxuICAgICAgICAgICAgKGMpID0+XG4gICAgICAgICAgICAgIChjLnNlbGVjdGVkID0gdGhpcy5fc2VsZWN0ZWRJdGVtcy5zb21lKFxuICAgICAgICAgICAgICAgIChpKSA9PiBpW3RoaXMudmFsdWVGaWVsZF0gPT0gY1t0aGlzLnZhbHVlRmllbGRdXG4gICAgICAgICAgICAgICkpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMucm93VGVtcGxhdGUgPT09IHVuZGVmaW5lZCAmJiB0aGlzLnJvd0lucHV0VGVtcGxhdGUgIT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnJvd1RlbXBsYXRlID0gdGhpcy5yb3dJbnB1dFRlbXBsYXRlO1xuICAgIH1cbiAgICBpZiAodGhpcy5ydGwgPT0gbnVsbCkge1xuICAgICAgdGhpcy5ydGwgPVxuICAgICAgICB3aW5kb3dcbiAgICAgICAgICAuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLnJlZi5uYXRpdmVFbGVtZW50LCBudWxsKVxuICAgICAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKCdkaXJlY3Rpb24nKSA9PT0gJ3J0bCc7XG4gICAgfVxuICB9XG5cbiAgc2Nyb2xsZWQoZSkge1xuICAgIGlmIChcbiAgICAgIHRoaXMucmVtb3RlT3BlcmF0aW9uICYmXG4gICAgICB0aGlzLnRvdGFsQ291bnQgPiB0aGlzLml0ZW1zLmxlbmd0aCAmJlxuICAgICAgdGhpcy5saXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0ICE9IDAgJiZcbiAgICAgIHRoaXMubGlzdENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodCAtXG4gICAgICAgIHRoaXMubGlzdENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCAtXG4gICAgICAgIDMwMCA8XG4gICAgICAgIDUwXG4gICAgKSB7XG4gICAgICBpZiAodGhpcy5za2lwICE9PSB0aGlzLml0ZW1zLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnNob3dMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5za2lwID0gdGhpcy5pdGVtcy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHBhcmFtczogQVhEYXRhU291cmNlUmVhZFBhcmFtcyA9IHt9O1xuICAgICAgICBwYXJhbXMuc2tpcCA9IHRoaXMuaXRlbXMubGVuZ3RoO1xuICAgICAgICBwYXJhbXMudGFrZSA9IHRoaXMuYnVmZmVyU2l6ZTsgLy8qIChNYXRoLmZsb29yKHRoaXMuaXRlbXMubGVuZ3RoIC8gdGhpcy5idWZmZXJTaXplKSArIDEpO1xuICAgICAgICBpZiAodGhpcy50ZXh0Ym94KSB7XG4gICAgICAgICAgcGFyYW1zLnNlYXJjaFRleHQgPSB0aGlzLnRleHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGFyYW1zLnNlYXJjaFRleHQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmV0Y2gocGFyYW1zKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBzZXRTZWxlY3RlZEl0ZW1zKHY6IGFueVtdLCBpc1VzZXJJbnB1dDogYm9vbGVhbikge1xuICAgIGxldCBjaGFuZ2VkID0gZmFsc2U7XG4gICAgaWYgKGlzVXNlcklucHV0KSB7XG4gICAgICBjaGFuZ2VkID0gSlNPTi5zdHJpbmdpZnkodikgIT09IEpTT04uc3RyaW5naWZ5KHRoaXMuc2VsZWN0ZWRJdGVtcyk7XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHY7XG4gICAgdGhpcy5zZXRTZWxlY3RlZEluZGV4KCk7XG4gICAgaWYgKGlzVXNlcklucHV0ICYmIGNoYW5nZWQpIHtcbiAgICAgIHRoaXMuZW1pdFNlbGVjdGlvbkNoYW5nZWRFdmVudCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2VhcmNoQ2hhbmdlT2JzZXJ2ZXI6IGFueTtcblxuICBkZWxheTogbnVtYmVyID0gNTAwO1xuXG4gIHRleHRDaGFuZ2VkKGUpIHtcbiAgICBpZiAoXG4gICAgICAoZS52YWx1ZSA9PT0gbnVsbCB8fCBlLnZhbHVlID09PSB1bmRlZmluZWQgfHwgZS52YWx1ZSA9PT0gJycpICYmXG4gICAgICAoZS5vbGRWYWx1ZSA9PT0gbnVsbCB8fCBlLm9sZFZhbHVlID09PSB1bmRlZmluZWQgfHwgZS5vbGRWYWx1ZSA9PT0gJycpXG4gICAgKSB7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3VycmVudGZvY3VzZWRJbmRleCA9IC0xO1xuICAgICAgaWYgKHRoaXMucmVtb3RlT3BlcmF0aW9uKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dCA9IHRoaXMudGV4dDtcbiAgICAgICAgLy8gIHRoaXMuc2VhcmNoVGV4dCA9IGUudmFsdWU7XG4gICAgICAgIC8vIHRoaXMudGV4dCA9IGUudmFsdWU7XG4gICAgICAgIC8vIHRoaXMuaXRlbXMgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuaXRlbXMpIHtcbiAgICAgICAgICBsZXQgdCA9IHRoaXMuaXRlbXMubGVuZ3RoO1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLml0ZW1zLnBvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRoaXMuaXRlbXMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICAvLyAgIHRoaXMuaXRlbXMucG9wKCk7XG4gICAgICAgIC8vIH0pO1xuICAgICAgICBjb25zdCBwYXJhbXM6IEFYRGF0YVNvdXJjZVJlYWRQYXJhbXMgPSB7fTtcbiAgICAgICAgcGFyYW1zLnNlYXJjaFRleHQgPSB0aGlzLnRleHQ7XG4gICAgICAgIC8vIHBhcmFtcy5zZWFyY2hUZXh0ID0gZS52YWx1ZTtcbiAgICAgICAgcGFyYW1zLnNraXAgPSAwO1xuICAgICAgICBwYXJhbXMudGFrZSA9IHRoaXMuYnVmZmVyU2l6ZTtcbiAgICAgICAgdGhpcy5mZXRjaChwYXJhbXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlzSXRlbURpc2FibGVkKGl0ZW06IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmIChpdGVtW3RoaXMuZGlzYWJsZWRGaWVsZF0gPT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICh0aGlzLmRpc2FibGVkQ2FsbGJhY2spIHtcbiAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkQ2FsbGJhY2soeyBpdGVtLCBpbmRleDogLTEgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBvbkJ1dHRvbkNsaWNrKGUpIHt9XG5cbiAgcHJpdmF0ZSBzZXRTZWxlY3RlZEluZGV4KHNpZ246IC0xIHwgMSB8IG51bGwgPSBudWxsKTogdm9pZCB7XG4gICAgaWYgKHNpZ24gPT0gbnVsbCkge1xuICAgICAgaWYgKCF0aGlzLnJlbW90ZU9wZXJhdGlvbiAmJiB0aGlzLnRleHQgJiYgdGhpcy50ZXh0ICE9PSAnJykge1xuICAgICAgICB0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXggPSB0aGlzLml0ZW1zXG4gICAgICAgICAgLmZpbHRlcigoYykgPT5cbiAgICAgICAgICAgIChjW3RoaXMudGV4dEZpZWxkXSBhcyBzdHJpbmcpXG4gICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgIC5pbmNsdWRlcyh0aGlzLnRleHQudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICApXG4gICAgICAgICAgLmluZGV4T2YodGhpcy5zZWxlY3RlZEl0ZW1zW3RoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggLSAxXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXggPSB0aGlzLml0ZW1zLmluZGV4T2YoXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zW3RoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggLSAxXVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzaWduID09PSAtMSA/IHRoaXMuY3VycmVudGZvY3VzZWRJbmRleC0tIDogdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4Kys7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVtb3RlT3BlcmF0aW9uKSB7XG4gICAgICB0aGlzLml0ZW1zRmlsdGVyZWQgPSB0aGlzLml0ZW1zO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLml0ZW1zRmlsdGVyZWQgPSB0aGlzLnRleHRcbiAgICAgICAgPyB0aGlzLml0ZW1zLmZpbHRlcigoYykgPT5cbiAgICAgICAgICAgIChjW3RoaXMudGV4dEZpZWxkXSBhcyBzdHJpbmcpXG4gICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgIC5pbmNsdWRlcyh0aGlzLnRleHQudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICApXG4gICAgICAgIDogdGhpcy5pdGVtcztcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXggPVxuICAgICAgdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4IDwgMFxuICAgICAgICA/IDBcbiAgICAgICAgOiB0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXggPj0gdGhpcy5pdGVtc0ZpbHRlcmVkLmxlbmd0aFxuICAgICAgICA/IHRoaXMuaXRlbXNGaWx0ZXJlZC5sZW5ndGggLSAxXG4gICAgICAgIDogdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4O1xuICAgIC8vXG4gICAgLy8gc2V0IHNjcm9sbFxuICAgIGlmICh0aGlzLmxpc3RDb250YWluZXIpIHtcbiAgICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgIGNvbnN0IGl0ZW1EaXYgPSB0aGlzLmxpc3RDb250YWluZXIubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgIGAubGlzdC1pdGVtOm50aC1jaGlsZCgke3RoaXMuY3VycmVudGZvY3VzZWRJbmRleH0pYFxuICAgICAgICApO1xuICAgICAgICBpZiAoaXRlbURpdikge1xuICAgICAgICAgIGl0ZW1EaXYuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIEBPdXRwdXQoKVxuICBzZWxlY3RlZFZhbHVlc0NoYW5nZTogRXZlbnRFbWl0dGVyPGFueVtdIHwgYW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8XG4gICAgYW55W10gfCBhbnlcbiAgPigpO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRWYWx1ZXMoKTogYW55W10gfCBhbnkge1xuICAgIGlmICh0aGlzLm1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRJdGVtcy5tYXAoKGMpID0+IGNbdGhpcy52YWx1ZUZpZWxkXSlbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZEl0ZW1zLm1hcCgoYykgPT4gY1t0aGlzLnZhbHVlRmllbGRdKSB8fCBbXTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0IHNlbGVjdGVkVmFsdWVzKHY6IGFueVtdIHwgYW55KSB7XG4gICAgaWYgKHRoaXMuY29tcGFyZVNlbGVjdGVkVmFsdWVzKHYpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh2ID09IG51bGwpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh2ICE9IFtdISAmJiB2ICE9ICcnICYmIHYgIT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMuaGFzU2VsZWN0ZWRWYWx1ZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLndhaXRGb3JEYXRhKCgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5tb2RlID09PSAnc2luZ2xlJykge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXRlbXMuZmlsdGVyKChjKSA9PiB2ID09IGNbdGhpcy52YWx1ZUZpZWxkXSkpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5pdGVtcy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKGMpID0+IHYgPT0gY1t0aGlzLnZhbHVlRmllbGRdXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodikpIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiB2Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuc2VsZWN0ZWRJdGVtcy5maWx0ZXIoKGMpID0+XG4gICAgICAgICAgICAgICAgICB2LmluY2x1ZGVzKGNbdGhpcy52YWx1ZUZpZWxkXSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBhZGRJZCA9IFtdO1xuICAgICAgICAgICAgICAgIHYuZm9yRWFjaCgodklkKSA9PiB7XG4gICAgICAgICAgICAgICAgICBhZGRJZC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgW3RoaXMudmFsdWVGaWVsZF06IHZJZCxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgbGV0IG5ld0lkID0gZGlmZmVyZW5jZUJ5KFxuICAgICAgICAgICAgICAgICAgYWRkSWQsXG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMsXG4gICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlRmllbGRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGxldCB2diA9IFtdO1xuICAgICAgICAgICAgICAgIG5ld0lkLmZvckVhY2goKHJjKSA9PiB7XG4gICAgICAgICAgICAgICAgICB2di5wdXNoKHJjW3RoaXMudmFsdWVGaWVsZF0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNcbiAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGMpID0+IHZ2LmluY2x1ZGVzKGNbdGhpcy52YWx1ZUZpZWxkXSkpXG4gICAgICAgICAgICAgICAgICAuZm9yRWFjaCgocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5wdXNoKHJlcyk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAvLyAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2godGhpcy5pdGVtcy5maWx0ZXIoKGMpID0+IHZ2LmluY2x1ZGVzKGNbdGhpcy52YWx1ZUZpZWxkXSkpKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkSXRlbXNDaGFuZ2UoXG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMsXG4gICAgICAgICAgICAgICAgICB2di5sZW5ndGggPiAwID8gWzFdIDogdGhpcy5zZWxlY3RlZEl0ZW1zXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8vICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLml0ZW1zLmZpbHRlcigoYykgPT4gdi5pbmNsdWRlcyhjW3RoaXMudmFsdWVGaWVsZF0pKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodikge1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLml0ZW1zLmZpbHRlcihcbiAgICAgICAgICAgICAgICAoYykgPT4gdiA9PT0gY1t0aGlzLnZhbHVlRmllbGRdXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlc0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRWYWx1ZXMpO1xuICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb21wYXJlU2VsZWN0ZWRWYWx1ZXMobmV3VmFsdWU6IGFueVtdIHwgYW55KSB7XG4gICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy5zZWxlY3RlZFZhbHVlcztcbiAgICByZXR1cm4gKFxuICAgICAgKGN1cnJlbnRWYWx1ZSA9PSBudWxsICYmIG5ld1ZhbHVlID09IG51bGwpIHx8XG4gICAgICBKU09OLnN0cmluZ2lmeShjdXJyZW50VmFsdWUpID09PSBKU09OLnN0cmluZ2lmeShuZXdWYWx1ZSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRTZWxlY3RlZFZhbHVlcyh2OiBhbnlbXSB8IGFueSwgaXNVc2VySW5wdXQ6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBjaGFuZ2VkID0gaXNVc2VySW5wdXQgPyAhdGhpcy5jb21wYXJlU2VsZWN0ZWRWYWx1ZXModikgOiBmYWxzZTtcbiAgICB0aGlzLnNlbGVjdGVkVmFsdWVzID0gdjtcbiAgICBpZiAoaXNVc2VySW5wdXQgJiYgY2hhbmdlZCkge1xuICAgICAgdGhpcy5lbWl0U2VsZWN0aW9uQ2hhbmdlZEV2ZW50KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBlbWl0U2VsZWN0aW9uQ2hhbmdlZEV2ZW50KCkge1xuICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXNDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkVmFsdWVzKTtcbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZWQuZW1pdChcbiAgICAgIG5ldyBBWFNlbGVjdEJveFNlbGVjdGlvbkNoYW5nZWRFdmVudChcbiAgICAgICAgdGhpcyxcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLFxuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5idWZmZXJTaXplIDwgMTApIHtcbiAgICAgIHRoaXMuYnVmZmVyU2l6ZSA9IDEwO1xuICAgIH1cbiAgICBpZiAodGhpcy5tb2RlID09ICdzaW5nbGUnKSB7XG4gICAgICB0aGlzLnNob3dDaGVja0JveCA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNob3dDaGVja0JveCA9IHRydWU7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICF0aGlzLnJlbW90ZU9wZXJhdGlvbiB8fFxuICAgICAgKHRoaXMucmVtb3RlT3BlcmF0aW9uICYmIHRoaXMuaGFzU2VsZWN0ZWRWYWx1ZSlcbiAgICApIHtcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH1cbiAgfVxuICBkcm9wZG93blRvZ2dsZVNlbGVjQm94KGUpIHtcbiAgICB0aGlzLnRleHQgPSAnJztcbiAgICBpZiAodGhpcy5kcm9wZG93bi5pc09wZW4pIHtcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnNlcmNoQm94KSB7XG4gICAgICAgICAgdGhpcy5zZXJjaEJveC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9LCAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gIHRoaXMucmVmcmVzaCgpO1xuICAgIH1cbiAgICB0aGlzLmRyb3Bkb3duVG9nZ2xlLmVtaXQoZSk7XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgLy8gaWYgKCF0aGlzLmFsbG93U2VhcmNoKSB7XG4gICAgLy8gICAgIGlmICh0aGlzLnJlYWRvbmx5ID09IGZhbHNlKSB7XG4gICAgLy8gICAgICAgICB0aGlzLml0ZW1SZW1vdmUgPSB0cnVlO1xuICAgIC8vICAgICAgICAgdGhpcy5yZWFkb25seSA9IHRydWU7XG4gICAgLy8gICAgIH1cbiAgICAvLyB9XG4gICAgdGhpcy5pbml0VmFsaWRhdGlvbih0aGlzLnJlZiwgJ3NlbGVjdGVkSXRlbXMnLCB0aGlzLnZhbGlkYXRpb24pO1xuICAgIGlmICh0aGlzLmRhdGFTb3VyY2UpIHtcbiAgICAgIC8vIGlmICh0aGlzLmFsbG93U2VhcmNoID09IGZhbHNlKSB7XG4gICAgICAvLyAgIHRoaXMuZmV0Y2goKTtcbiAgICAgIC8vIH1cbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5vbkRhdGFSZWNlaXZlZC5zdWJzY3JpYmUoKGMpID0+IHtcbiAgICAgICAgdGhpcy5zaG93TG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmRhdGFSZWNlaXZlZChjLmRhdGEucmVzdWx0KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwcml2YXRlIGRhdGFSZWNlaXZlZChkYXRhOiBhbnkpIHtcbiAgICBpZiAodGhpcy5yZW1vdGVPcGVyYXRpb24pIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5zZWFyY2hUZXh0ICYmXG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dCAhPSBudWxsICYmXG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dCAhPT0gJydcbiAgICAgICkge1xuICAgICAgICBpZiAoZGF0YS50b3RhbENvdW50KSB7XG4gICAgICAgICAgaWYgKHRoaXMuaXRlbXMubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIC8vdGhpcy5pdGVtcyA9IGRhdGEuaXRlbXM7XG4gICAgICAgICAgICBkYXRhLml0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5pdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEuaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIGlmICh0aGlzLml0ZW1zU3RhdHVzT2JzZXJ2ZXIpIHtcbiAgICAgICAgICAgIC8vICAgdGhpcy5pdGVtc1N0YXR1c09ic2VydmVyLm5leHQodGhpcy5pdGVtcy5sZW5ndGgpO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMudG90YWxDb3VudCA9IGRhdGEudG90YWxDb3VudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy5pdGVtcy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgdGhpcy5pdGVtcyA9IGRhdGEuaXRlbXM7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEuaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIGlmICh0aGlzLml0ZW1zU3RhdHVzT2JzZXJ2ZXIpIHtcbiAgICAgICAgICAgIC8vICAgdGhpcy5pdGVtc1N0YXR1c09ic2VydmVyLm5leHQodGhpcy5pdGVtcy5sZW5ndGgpO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSBkYXRhLml0ZW1zID09IHVuZGVmaW5lZCA/IDAgOiBkYXRhLml0ZW1zLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChkYXRhLml0ZW1zICYmIGRhdGEuaXRlbXMubGVuZ3RoID09PSBkYXRhLnRvdGFsQ291bnQpIHtcbiAgICAgICAgdGhpcy5pdGVtcyA9IGRhdGEuaXRlbXM7XG4gICAgICAgIHRoaXMudG90YWxDb3VudCA9IGRhdGEuaXRlbXMubGVuZ3RoO1xuICAgICAgfSBlbHNlIGlmIChkYXRhLnRvdGFsQ291bnQpIHtcbiAgICAgICAgZGF0YS5pdGVtcy5mb3JFYWNoKChlbG0pID0+IHtcbiAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goZWxtKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGlmICh0aGlzLml0ZW1zU3RhdHVzT2JzZXJ2ZXIpIHtcbiAgICAgICAgLy8gICB0aGlzLml0ZW1zU3RhdHVzT2JzZXJ2ZXIubmV4dCh0aGlzLml0ZW1zLmxlbmd0aCk7XG4gICAgICAgIC8vIH1cbiAgICAgICAgdGhpcy50b3RhbENvdW50ID0gZGF0YS50b3RhbENvdW50O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YS5mb3JFYWNoKChlbG0pID0+IHtcbiAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goZWxtKTtcbiAgICAgICAgICAvLyBpZiAodGhpcy5pdGVtc1N0YXR1c09ic2VydmVyKSB7XG4gICAgICAgICAgLy8gICB0aGlzLml0ZW1zU3RhdHVzT2JzZXJ2ZXIubmV4dCh0aGlzLml0ZW1zLmxlbmd0aCk7XG4gICAgICAgICAgLy8gfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy50b3RhbENvdW50ID0gZGF0YS5sZW5ndGg7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXRlbXMgPSBkYXRhO1xuICAgIH1cblxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcblxuICAgIHRoaXMuZHJvcGRvd24udXBkYXRlUG9zaXRpb24oKTtcbiAgfVxuXG4gIC8vIHByaXZhdGUgcGFyYW1zOiBBWERhdGFTb3VyY2VSZWFkUGFyYW1zID0ge307XG5cbiAgZmV0Y2gocGFyYW1zOiBBWERhdGFTb3VyY2VSZWFkUGFyYW1zID0ge30pIHtcbiAgICAvLyAgdGhpcy5wYXJhbXMgPSBwYXJhbXM7XG4gICAgaWYgKHRoaXMuZGF0YVNvdXJjZSkge1xuICAgICAgaWYgKHRoaXMub25EZW1hbmRUcmFuc2xhdGUgJiYgcGFyYW1zPy5zZWFyY2hUZXh0KSB7XG4gICAgICAgIHBhcmFtcy5zZWFyY2hUZXh0ID0gdGhpcy50cmFuc2xhdGVTZWFyY2gocGFyYW1zPy5zZWFyY2hUZXh0KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2hvd0xvYWRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5kYXRhU291cmNlLmZldGNoKHBhcmFtcyk7XG4gICAgfVxuICB9XG5cbiAgdHJhbnNsYXRlU2VhcmNoKHNlYXJjaFRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbGF0aW5QYXR0ZXJuID0gL1tBLVphLXo7J1xcL1xcXFxbXFxdLF0vO1xuICAgIGNvbnN0IGFzY2lpVG9QZXJzaWFuTWFwID0ge1xuICAgICAgMTEzOiAn2LYnLFxuICAgICAgMTE5OiAn2LUnLFxuICAgICAgMTAxOiAn2KsnLFxuICAgICAgMTE0OiAn2YInLFxuICAgICAgMTE2OiAn2YEnLFxuICAgICAgMTIxOiAn2LonLFxuICAgICAgMTE3OiAn2LknLFxuICAgICAgMTA1OiAn2YcnLFxuICAgICAgMTExOiAn2K4nLFxuICAgICAgMTEyOiAn2K0nLFxuICAgICAgOTc6ICfYtCcsXG4gICAgICAxMTU6ICfYsycsXG4gICAgICAxMDA6ICfbjCcsXG4gICAgICAxMDI6ICfYqCcsXG4gICAgICAxMDM6ICfZhCcsXG4gICAgICAxMDQ6ICfYpycsXG4gICAgICAxMDY6ICfYqicsXG4gICAgICAxMDc6ICfZhicsXG4gICAgICAxMDg6ICfZhScsXG4gICAgICA1OTogJ9qpJyxcbiAgICAgIDEyMjogJ9i4JyxcbiAgICAgIDEyMDogJ9i3JyxcbiAgICAgIDk5OiAn2LInLFxuICAgICAgMTE4OiAn2LEnLFxuICAgICAgOTg6ICfYsCcsXG4gICAgICAxMTA6ICfYrycsXG4gICAgICA0NDogJ9mIJyxcbiAgICAgIDM5OiAn2q8nLFxuICAgICAgNjc6ICfamCcsXG4gICAgICA5MzogJ9qGJyxcbiAgICAgIDkxOiAn2KwnLFxuICAgICAgOTI6ICfZvicsXG4gICAgICAxMDk6ICfYpicsXG4gICAgfTtcbiAgICBpZiAobGF0aW5QYXR0ZXJuLnRlc3Qoc2VhcmNoVGV4dCkpIHtcbiAgICAgIHNlYXJjaFRleHQgPSBzZWFyY2hUZXh0XG4gICAgICAgIC5zcGxpdCgnJylcbiAgICAgICAgLm1hcCgoY2hhcikgPT4ge1xuICAgICAgICAgIGNvbnN0IGFzY2lpVmFsdWUgPSBjaGFyLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgICAgaWYgKGFzY2lpVG9QZXJzaWFuTWFwW2FzY2lpVmFsdWVdKSB7XG4gICAgICAgICAgICByZXR1cm4gYXNjaWlUb1BlcnNpYW5NYXBbYXNjaWlWYWx1ZV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBjaGFyO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmpvaW4oJycpO1xuICAgIH1cbiAgICByZXR1cm4gc2VhcmNoVGV4dDtcbiAgfVxuXG4gIHJlZnJlc2goKSB7XG4gICAgY29uc3QgcGFyYW1zOiBBWERhdGFTb3VyY2VSZWFkUGFyYW1zID0ge307XG4gICAgaWYgKHRoaXMucmVtb3RlT3BlcmF0aW9uKSB7XG4gICAgICBwYXJhbXMuc2tpcCA9IDA7XG4gICAgICB0aGlzLnNraXAgPSAwO1xuICAgICAgcGFyYW1zLnRha2UgPSB0aGlzLmJ1ZmZlclNpemU7XG4gICAgfVxuICAgIGlmICh0aGlzLmRhdGFTb3VyY2UgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyB0aGlzLml0ZW1zID0gW107XG4gICAgICAvLyB0aGlzLml0ZW1zLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgIC8vICAgdGhpcy5pdGVtcy5wb3AoKTtcbiAgICAgIC8vIH0pO1xuXG4gICAgICBpZiAodGhpcy5pdGVtcykge1xuICAgICAgICBsZXQgdCA9IHRoaXMuaXRlbXMubGVuZ3RoO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHQ7IGkrKykge1xuICAgICAgICAgIHRoaXMuaXRlbXMucG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5mZXRjaChwYXJhbXMpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUl0ZW1SZW1vdmVDbGljayhpdGVtKSB7XG4gICAgaWYgKHRoaXMubW9kZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgIC8vIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IG51bGw7XG4gICAgICB0aGlzLnNldFNlbGVjdGVkVmFsdWVzKG51bGwsIHRydWUpO1xuICAgICAgLy8gdGhpcy5zZWxlY3RlZEl0ZW1zQ2hhbmdlLmVtaXQodGhpcy5fc2VsZWN0ZWRJdGVtcyk7XG4gICAgICAvLyB0aGlzLmNsZWFyVmFsaWRhdGlvblN0eWxlKHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKChjKSA9PiBjICE9PSBpdGVtKTtcbiAgICAgIHRoaXMuc2V0U2VsZWN0ZWRJdGVtcyhcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLmZpbHRlcihcbiAgICAgICAgICAoYykgPT4gY1t0aGlzLnZhbHVlRmllbGRdICE9PSBpdGVtW3RoaXMudmFsdWVGaWVsZF1cbiAgICAgICAgKSxcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICAgIC8vIHRoaXMuX3NlbGVjdGVkSXRlbXMgPSB0aGlzLl9zZWxlY3RlZEl0ZW1zLmZpbHRlcihjID0+IGMgIT09IGl0ZW0pO1xuICAgICAgLy8gdGhpcy5zZWxlY3RlZEl0ZW1zQ2hhbmdlLmVtaXQodGhpcy5fc2VsZWN0ZWRJdGVtcyk7XG4gICAgICAvLyB0aGlzLmNsZWFyVmFsaWRhdGlvblN0eWxlKHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cbiAgICAvLyB0aGlzLnRleHQgPSAnJztcbiAgICB0aGlzLnZhbGlkYXRlKCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvbkZvY3VzVGV4dEJveChlKSB7fVxuXG4gIG9uVGV4dEJveENsaWNrKGUpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCA9PSBmYWxzZSAmJiB0aGlzLnJlYWRvbmx5ID09IGZhbHNlKSB7XG4gICAgICB0aGlzLmRyb3Bkb3duLm9wZW4oKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVJdGVtQ2xpY2soZTogTW91c2VFdmVudCwgaXRlbTogYW55KSB7XG4gICAgaWYgKHRoaXMuaXNJdGVtRGlzYWJsZWQoaXRlbSkgPT0gZmFsc2UpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gaXRlbVt0aGlzLnZhbHVlRmllbGRdO1xuXG4gICAgICBpZiAodGhpcy5tb2RlID09PSAnc2luZ2xlJykge1xuICAgICAgICAvLyB0aGlzLnNlbGVjdGVkVmFsdWVzID0gdmFsdWU7XG4gICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRWYWx1ZXModmFsdWUsIHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZXhpc3RzID0gdGhpcy5zZWxlY3RlZFZhbHVlcy5zbGljZSgwKTtcbiAgICAgICAgaWYgKGV4aXN0cy5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmFsbG93TnVsbCA9PSB0cnVlIHx8XG4gICAgICAgICAgICAodGhpcy5hbGxvd051bGwgPT0gZmFsc2UgJiYgdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDEpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUl0ZW1SZW1vdmVDbGljayhpdGVtKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXhpc3RzLnB1c2godmFsdWUpO1xuICAgICAgICAgIC8vIHRoaXMuc2VsZWN0ZWRWYWx1ZXMgPSBleGlzdHM7XG4gICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZFZhbHVlcyhleGlzdHMsIHRydWUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm1vZGUgPT0gJ3NpbmdsZScpIHtcbiAgICAgICAgdGhpcy50ZXh0ID0gJyc7XG4gICAgICAgIHRoaXMuZHJvcGRvd24uY2xvc2UoKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG4gICAgICAvLyBpZiAoZS5zdG9wUHJvcGFnYXRpb24oKSA9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgLy8gfVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnNlcmNoQm94KSB7XG4gICAgICAgICAgdGhpcy5zZXJjaEJveC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9LCAwKTtcbiAgICB9XG5cbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgaGFuZGxlS2V5RXZlbnRTZWFyY2goZTogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpIHtcbiAgICAgIHRoaXMuZHJvcGRvd24uY2xvc2UoKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnRleHRCb3hTZWxlY3RCb3guZm9jdXMoKTtcbiAgICAgIH0sIDApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoZS5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICB0aGlzLnRleHQgPSBudWxsO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMudGV4dEJveFNlbGVjdEJveC5mb2N1cygpO1xuICAgICAgfSwgMCk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIChlLmtleSA9PT0gJ0Fycm93RG93bicgfHwgZS5rZXkgPT09ICdBcnJvd1VwJykgJiZcbiAgICAgIHRoaXMuZ2V0SXRlbXMoKS5sZW5ndGggPiAwICYmXG4gICAgICBlLnR5cGUgPT09ICdrZXlkb3duJ1xuICAgICkge1xuICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4ID1cbiAgICAgICAgICB0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXggKyAoZS5rZXkgPT09ICdBcnJvd0Rvd24nID8gMSA6IC0xKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1CeUluZGV4KHRoaXMuY3VycmVudGZvY3VzZWRJbmRleCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5kcm9wZG93bi5pc09wZW4pIHtcbiAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkSW5kZXgoZS5rZXkgPT09ICdBcnJvd0Rvd24nID8gMSA6IC0xKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRyb3Bkb3duLm9wZW4oKTtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlcmNoQm94KSB7XG4gICAgICAgICAgICAgIHRoaXMuc2VyY2hCb3guZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBpZiAoZS5rZXkgPT0gJ0VudGVyJyAmJiB0aGlzLmRyb3Bkb3duLmlzT3BlbiAmJiB0aGlzLm1vZGUgPT0gJ3NpbmdsZScpIHtcbiAgICAvLyAgICAgdGhpcy5kcm9wZG93bi5jbG9zZSgpO1xuICAgIC8vICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgICAgICAgIHRoaXMuZHJvcGRvd24uZm9jdXMoKTtcbiAgICAvLyAgICAgfSwgMCk7XG4gICAgLy8gfVxuICAgIC8vZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAvL2UucHJldmVudERlZmF1bHQoKTtcbiAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgIGlmIChlLnR5cGUgPT09ICdrZXlkb3duJyAmJiBlLmtleSA9PSAnRW50ZXInICYmIHRoaXMuZHJvcGRvd24uaXNPcGVuKSB7XG4gICAgICBpZiAoIXRoaXMucmVtb3RlT3BlcmF0aW9uICYmIHRoaXMudGV4dCAmJiB0aGlzLnRleHQgIT09ICcnKSB7XG4gICAgICAgIHRoaXMuaXRlbXNGaWx0ZXJlZCA9IHRoaXMuaXRlbXMuZmlsdGVyKChjKSA9PlxuICAgICAgICAgIChjW3RoaXMudGV4dEZpZWxkXSBhcyBzdHJpbmcpXG4gICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgLmluY2x1ZGVzKHRoaXMudGV4dC50b0xvd2VyQ2FzZSgpKVxuICAgICAgICApO1xuICAgICAgICBpZiAodGhpcy5pdGVtc0ZpbHRlcmVkLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIHRoaXMuY3VycmVudGZvY3VzZWRJbmRleCA9IDA7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaXRlbXNGaWx0ZXJlZCA9IHRoaXMuaXRlbXM7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLmZpbHRlcihcbiAgICAgICAgICAoYykgPT5cbiAgICAgICAgICAgIGNbdGhpcy52YWx1ZUZpZWxkXSA9PT1cbiAgICAgICAgICAgIHRoaXMuaXRlbXNGaWx0ZXJlZFt0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXhdW3RoaXMudmFsdWVGaWVsZF1cbiAgICAgICAgKS5sZW5ndGggPiAwICYmXG4gICAgICAgIHRoaXMubW9kZSA9PSAnbXVsdGlwbGUnXG4gICAgICApIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuYWxsb3dOdWxsID09IHRydWUgfHxcbiAgICAgICAgICAodGhpcy5hbGxvd051bGwgPT0gZmFsc2UgJiYgdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDEpXG4gICAgICAgICkge1xuICAgICAgICAgIGlmICghdGhpcy5yZW1vdGVPcGVyYXRpb24gJiYgdGhpcy50ZXh0ICYmIHRoaXMudGV4dCAhPT0gJycpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuc2VsZWN0ZWRJdGVtcy5maWx0ZXIoXG4gICAgICAgICAgICAgIChjKSA9PlxuICAgICAgICAgICAgICAgIGMgIT09XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtcy5maWx0ZXIoKGMpID0+XG4gICAgICAgICAgICAgICAgICAoY1t0aGlzLnRleHRGaWVsZF0gYXMgc3RyaW5nKVxuICAgICAgICAgICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICAgICAgICAuaW5jbHVkZXModGhpcy50ZXh0LnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgICAgICAgKVt0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXhdXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKFxuICAgICAgICAgICAgICAoYykgPT5cbiAgICAgICAgICAgICAgICBjW3RoaXMudmFsdWVGaWVsZF0gIT09XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1t0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXhdW3RoaXMudmFsdWVGaWVsZF1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZW1pdFNlbGVjdGlvbkNoYW5nZWRFdmVudCgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5tb2RlID09ICdtdWx0aXBsZScpIHtcbiAgICAgICAgICBpZiAodGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4ICE9IC0xKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMucmVtb3RlT3BlcmF0aW9uICYmIHRoaXMudGV4dCAmJiB0aGlzLnRleHQgIT09ICcnKSB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLml0ZW1zRmlsdGVyZWQubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2godGhpcy5pdGVtc0ZpbHRlcmVkWzBdKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaChcbiAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNGaWx0ZXJlZFt0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXhdXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2godGhpcy5pdGVtc1t0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZW1pdFNlbGVjdGlvbkNoYW5nZWRFdmVudCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy50ZXh0ICYmIHRoaXMuaXRlbXNGaWx0ZXJlZD8ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkSXRlbXModGhpcy5pdGVtc0ZpbHRlcmVkLCB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMubW9kZSA9PSAnc2luZ2xlJykge1xuICAgICAgICAgICAgdGhpcy5kcm9wZG93bi5jbG9zZSgpO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMudGV4dEJveFNlbGVjdEJveC5mb2N1cygpO1xuICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBpc0NoYXIoc3RyOiBzdHJpbmcpIHtcbiAgICBpZiAoXG4gICAgICBzdHIuaW5jbHVkZXMoJ1NoaWZ0JykgfHxcbiAgICAgIHN0ci5pbmNsdWRlcygnVGFiJykgfHxcbiAgICAgIHN0ci5pbmNsdWRlcygnQ29udHJvbCcpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ0FsdCcpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ0NhcHNMb2NrJykgfHxcbiAgICAgIHN0ci5pbmNsdWRlcygnTWV0YScpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ0NvbnRleHRNZW51JykgfHxcbiAgICAgIHN0ci5pbmNsdWRlcygnRW50ZXInKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdCYWNrc3BhY2UnKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdQcmludFNjcmVlbicpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ1Njcm9sbExvY2snKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdQYXVzZScpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ0hvbWUnKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdFbmQnKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdJbnNlcnQnKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdQYWdlVXAnKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdEZWxldGUnKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdQYWdlRG93bicpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ051bUxvY2snKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdFc2NhcGUnKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdBcnJvdycpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ9mRRjEnKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdGMicpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ0YzJykgfHxcbiAgICAgIHN0ci5pbmNsdWRlcygnRjQnKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdGNScpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ0Y2JykgfHxcbiAgICAgIHN0ci5pbmNsdWRlcygnRjcnKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdGOCcpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ0Y5JykgfHxcbiAgICAgIHN0ci5pbmNsdWRlcygnRjEwJykgfHxcbiAgICAgIHN0ci5pbmNsdWRlcygnRjExJykgfHxcbiAgICAgIHN0ci5pbmNsdWRlcygnRjEyJylcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlS2V5RXZlbnQoZTogYW55KSB7XG4gICAgLy8gY29uc3QgTnVtYmVyTWludXNQYXR0ZXJuID0gL1thLXpBLVowLTlcXC1dL2c7XG4gICAgLy8gY29uc3QgRmFyc2kgPSAvW9m+2obYrNit2K7Zh9i52LrZgdmC2KvYtdi22LTYs9uM2KjZhNin2KrZhtmF2qnar9mI2KbYr9iw2LHYsti32LjamNik2KXYo9ih2YvZjNmN2Y7Zj9mQ2ZFcXHNdKyQvO1xuICAgIC8vICBjb25zdCBpbnB1dENoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGUuY2hhckNvZGUpO1xuICAgIC8vIGNvbnN0IHBhdHRlcm5FbiA9IC9eW2EtekEtWjAtOV0qJC87XG4gICAgLy8gY29uc3QgcGF0dGVybiA9IC9eW1xcdTA2MDAtXFx1MDZGRlxcc10rJC87XG4gICAgY29uc3QgaW5wdXRDaGFyID0gZS5rZXk7XG4gICAgaWYgKFxuICAgICAgKGlucHV0Q2hhciAhPSAnQmFja3NwYWNlJyAmJlxuICAgICAgICBpbnB1dENoYXIgIT0gJ0JhY2tzcGFjZScgJiZcbiAgICAgICAgaW5wdXRDaGFyICE9ICdUYWInICYmXG4gICAgICAgIGlucHV0Q2hhciAhPSAnRW50ZXInICYmXG4gICAgICAgIGlucHV0Q2hhciAhPSAnRXNjYXBlJyAmJlxuICAgICAgICBpbnB1dENoYXIgIT0gJ0Fycm93RG93bicgJiZcbiAgICAgICAgaW5wdXRDaGFyICE9ICdBcnJvd1VwJykgfHxcbiAgICAgIGUuY29kZSA9PT0gJ1NwYWNlJyB8fFxuICAgICAgZS5jdHJsS2V5ID09IHRydWVcbiAgICApIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgZS5rZXkgPT09ICdCYWNrc3BhY2UnICYmXG4gICAgICBlLnR5cGUgPT09ICdrZXlkb3duJyAmJlxuICAgICAgKCh0aGlzLmFsbG93TnVsbCA9PT0gdHJ1ZSAmJiB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCkgfHxcbiAgICAgICAgKHRoaXMuYWxsb3dOdWxsID09PSBmYWxzZSAmJiB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMSkpXG4gICAgKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucG9wKCk7XG4gICAgICB0aGlzLmVtaXRTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkge1xuICAgICAgdGhpcy5kcm9wZG93bi5jbG9zZSgpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMudGV4dEJveFNlbGVjdEJveC5mb2N1cygpO1xuICAgICAgfSwgMCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IElOUFVUID0gU3RyaW5nLmZyb21DaGFyQ29kZShlLmtleUNvZGUpO1xuICAgIGlmICh0aGlzLmlzQ2hhcihlLmtleSkgJiYgdGhpcy5hbGxvd1NlYXJjaCAmJiBlLmN0cmxLZXkgPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuZHJvcGRvd24ub3BlbigpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnNlcmNoQm94KSB7XG4gICAgICAgICAgdGhpcy5zZXJjaEJveC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9LCAwKTtcbiAgICAgIHRoaXMudGV4dCA9IGUua2V5O1xuICAgIH1cblxuICAgIGlmIChlLmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgIHRoaXMudGV4dCA9IG51bGw7XG4gICAgICB0aGlzLmRyb3Bkb3duLmNsb3NlKCk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy50ZXh0Qm94U2VsZWN0Qm94LmZvY3VzKCk7XG4gICAgICB9LCAwKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgKGUua2V5ID09PSAnQXJyb3dEb3duJyB8fCBlLmtleSA9PT0gJ0Fycm93VXAnKSAmJlxuICAgICAgdGhpcy5nZXRJdGVtcygpLmxlbmd0aCA+IDAgJiZcbiAgICAgIGUudHlwZSA9PT0gJ2tleWRvd24nXG4gICAgKSB7XG4gICAgICBpZiAodGhpcy5tb2RlID09PSAnc2luZ2xlJykge1xuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUJ5SW5kZXgoXG4gICAgICAgICAgdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4ICsgKGUua2V5ID09PSAnQXJyb3dEb3duJyA/IDEgOiAtMSlcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLmRyb3Bkb3duLmlzT3Blbikge1xuICAgICAgICAgIC8vICB0aGlzLnNldFNlbGVjdGVkSW5kZXgoKGUua2V5ID09PSAnQXJyb3dEb3duJyA/IDEgOiAtMSkpO1xuICAgICAgICAgIGlmICh0aGlzLmFsbG93U2VhcmNoID09IGZhbHNlKSB7XG4gICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkSW5kZXgoZS5rZXkgPT09ICdBcnJvd0Rvd24nID8gMSA6IC0xKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLnNlcmNoQm94KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXJjaEJveC5mb2N1cygpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kcm9wZG93bi5vcGVuKCk7XG4gICAgICAgICAgaWYgKHRoaXMuYWxsb3dTZWFyY2ggPT0gdHJ1ZSkge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLnNlcmNoQm94KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXJjaEJveC5mb2N1cygpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5hbGxvd1NlYXJjaCA9PT0gZmFsc2UpIHtcbiAgICAgIGlmIChlLnR5cGUgPT09ICdrZXlkb3duJyAmJiBlLmtleSA9PSAnRW50ZXInICYmIHRoaXMuZHJvcGRvd24uaXNPcGVuKSB7XG4gICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKFxuICAgICAgICAgICAgKGMpID0+XG4gICAgICAgICAgICAgIGNbdGhpcy52YWx1ZUZpZWxkXSA9PT1cbiAgICAgICAgICAgICAgdGhpcy5pdGVtc0ZpbHRlcmVkW3RoaXMuY3VycmVudGZvY3VzZWRJbmRleF1bdGhpcy52YWx1ZUZpZWxkXVxuICAgICAgICAgICkubGVuZ3RoID4gMCAmJlxuICAgICAgICAgIHRoaXMubW9kZSA9PSAnbXVsdGlwbGUnXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuYWxsb3dOdWxsID09IHRydWUgfHxcbiAgICAgICAgICAgICh0aGlzLmFsbG93TnVsbCA9PSBmYWxzZSAmJiB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5yZW1vdGVPcGVyYXRpb24gJiYgdGhpcy50ZXh0ICYmIHRoaXMudGV4dCAhPT0gJycpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5zZWxlY3RlZEl0ZW1zLmZpbHRlcihcbiAgICAgICAgICAgICAgICAoYykgPT5cbiAgICAgICAgICAgICAgICAgIGMgIT09XG4gICAgICAgICAgICAgICAgICB0aGlzLml0ZW1zLmZpbHRlcigoYykgPT5cbiAgICAgICAgICAgICAgICAgICAgKGNbdGhpcy50ZXh0RmllbGRdIGFzIHN0cmluZylcbiAgICAgICAgICAgICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICAgICAgICAgIC5pbmNsdWRlcyh0aGlzLnRleHQudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAgICAgICAgIClbdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4XVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5zZWxlY3RlZEl0ZW1zLmZpbHRlcihcbiAgICAgICAgICAgICAgICAoYykgPT5cbiAgICAgICAgICAgICAgICAgIGNbdGhpcy52YWx1ZUZpZWxkXSAhPT1cbiAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4XVt0aGlzLnZhbHVlRmllbGRdXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmVtaXRTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMubW9kZSA9PSAnbXVsdGlwbGUnKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4ICE9IC0xKSB7XG4gICAgICAgICAgICAgIGlmICghdGhpcy5yZW1vdGVPcGVyYXRpb24gJiYgdGhpcy50ZXh0ICYmIHRoaXMudGV4dCAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pdGVtc0ZpbHRlcmVkLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2godGhpcy5pdGVtc0ZpbHRlcmVkWzBdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNGaWx0ZXJlZFt0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXhdXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaCh0aGlzLml0ZW1zW3RoaXMuY3VycmVudGZvY3VzZWRJbmRleF0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMuZW1pdFNlbGVjdGlvbkNoYW5nZWRFdmVudCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy50ZXh0ICYmIHRoaXMuaXRlbXNGaWx0ZXJlZC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZEl0ZW1zKHRoaXMuaXRlbXNGaWx0ZXJlZCwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5tb2RlID09ICdzaW5nbGUnKSB7XG4gICAgICAgICAgICAgIHRoaXMuZHJvcGRvd24uY2xvc2UoKTtcbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50ZXh0Qm94U2VsZWN0Qm94LmZvY3VzKCk7XG4gICAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgZm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy50ZXh0Ym94LmZvY3VzKCk7XG4gIH1cblxuICBzZWxlY3RlZEl0ZW1CeUluZGV4KGluZGV4OiBudW1iZXIpIHtcbiAgICBsZXQgaXRlbSA9IFtdO1xuICAgIGlmICghdGhpcy5yZW1vdGVPcGVyYXRpb24gJiYgdGhpcy50ZXh0ICYmIHRoaXMudGV4dCAhPT0gJycpIHtcbiAgICAgIHRoaXMuaXRlbXNGaWx0ZXJlZCA9IHRoaXMuaXRlbXMuZmlsdGVyKChjKSA9PlxuICAgICAgICAoY1t0aGlzLnRleHRGaWVsZF0gYXMgc3RyaW5nKVxuICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgLmluY2x1ZGVzKHRoaXMudGV4dC50b0xvd2VyQ2FzZSgpKVxuICAgICAgKTtcblxuICAgICAgaXRlbSA9IHRoaXMuaXRlbXNGaWx0ZXJlZFtpbmRleF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZW0gPSB0aGlzLml0ZW1zW2luZGV4XTtcbiAgICB9XG4gICAgLy9cbiAgICAvLyAgY29uc3QgaXRlbSA9IHRoaXMudGV4dCA/IHRoaXMuaXRlbXMuZmlsdGVyKChjKSA9PiAoY1t0aGlzLnRleHRGaWVsZF0gYXMgc3RyaW5nKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMudGV4dC50b0xvd2VyQ2FzZSgpKSlbaW5kZXhdIDogdGhpcy5pdGVtc1tpbmRleF07XG4gICAgaWYgKGl0ZW0pIHtcbiAgICAgIHRoaXMuc2V0U2VsZWN0ZWRJdGVtcyhbaXRlbV0sIHRydWUpO1xuICAgIH1cblxuICAgIHRoaXMuc2V0U2VsZWN0ZWRJbmRleCgpO1xuICB9XG5cbiAgbm9BY2NlbnRPcmlnaW4gPSB7XG4gICAg2YM6ICfaqScsXG4gICAg77u3OiAn2YTYpycsXG4gICAg2KQ6ICfZiCcsXG4gICAg2Yk6ICfbjCcsXG4gICAg2Yo6ICfbjCcsXG4gICAg2KY6ICfbjCcsXG4gICAg2KM6ICfYpycsXG4gICAg2KU6ICfYpycsXG4gICAg2KI6ICfYpycsXG4gICAg2bE6ICfYpycsXG4gICAg2bM6ICfYpycsXG4gICAg2Kk6ICfZhycsXG4gICAg2KE6ICcnLFxuICAgICfZkCc6ICcnLFxuICAgICfZkic6ICcnLFxuICAgICfZjyc6ICcnLFxuICAgICfZjic6ICcnLFxuICAgICfZkSc6ICcnLFxuICAgICfZjSc6ICcnLFxuICAgICfZiyc6ICcnLFxuICAgICfZjCc6ICcnLFxuICAgICfZkyc6ICcnLFxuICAgICfZsCc6ICcnLFxuICAgICfZlCc6ICcnLFxuICAgICfvv70nOiAnJyxcbiAgfTtcblxuICBnZXRJdGVtcygpOiBhbnlbXSB7XG4gICAgaWYgKHRoaXMuaXRlbXMgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBpZiAoIXRoaXMucmVtb3RlT3BlcmF0aW9uICYmIHRoaXMudGV4dCAmJiB0aGlzLnRleHQgIT09ICcnKSB7XG4gICAgICByZXR1cm4gdGhpcy5pdGVtcy5maWx0ZXIoKGMpID0+IHtcbiAgICAgICAgY29uc3QgY29udmVydGVkVGV4dEZpZWxkID0gdGhpcy5jb252ZXJ0QXJhYmljVG9QZXJzaWFuKFxuICAgICAgICAgIGNbdGhpcy50ZXh0RmllbGRdLFxuICAgICAgICAgIHRoaXMubm9BY2NlbnRPcmlnaW5cbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgY29udmVydGVkVGV4dCA9IHRoaXMuY29udmVydEFyYWJpY1RvUGVyc2lhbihcbiAgICAgICAgICB0aGlzLnRleHQsXG4gICAgICAgICAgdGhpcy5ub0FjY2VudE9yaWdpblxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gY29udmVydGVkVGV4dEZpZWxkXG4gICAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAuaW5jbHVkZXMoY29udmVydGVkVGV4dC50b0xvd2VyQ2FzZSgpKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5pdGVtcztcbiAgICB9XG4gIH1cblxuICBjb252ZXJ0QXJhYmljVG9QZXJzaWFuKGlucHV0U3RyaW5nLCBjb252ZXJzaW9uTWFwKSB7XG4gICAgbGV0IHRleHRDb252ZXJ0ID0gJyc7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dFN0cmluZy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgY3VycmVudENoYXIgPSBpbnB1dFN0cmluZ1tpXTtcbiAgICAgIGlmIChjb252ZXJzaW9uTWFwW2N1cnJlbnRDaGFyXSkge1xuICAgICAgICB0ZXh0Q29udmVydCArPSBjb252ZXJzaW9uTWFwW2N1cnJlbnRDaGFyXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRleHRDb252ZXJ0ICs9IGN1cnJlbnRDaGFyO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGV4dENvbnZlcnQ7XG4gIH1cblxuICBpc0l0ZW1TZWxlY3RlZChpdGVtOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zICYmXG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKFxuICAgICAgICAoYykgPT4gY1t0aGlzLnZhbHVlRmllbGRdID09PSBpdGVtW3RoaXMudmFsdWVGaWVsZF1cbiAgICAgICkubGVuZ3RoID4gMFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGl0ZW1zU3RhdHVzT2JzZXJ2ZXI6IGFueTtcbiAgcHJpdmF0ZSB3YWl0Rm9yRGF0YShjYWxsYmFja2ZuOiAoKSA9PiB2b2lkKSB7XG4gICAgaWYgKHRoaXMuaXRlbXMgJiYgdGhpcy5pdGVtcy5sZW5ndGgpIHtcbiAgICAgIGNhbGxiYWNrZm4oKTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLml0ZW1zU3RhdHVzT2JzZXJ2ZXIpIHtcbiAgICAgIE9ic2VydmFibGUuY3JlYXRlKChvYnNlcnZlcikgPT4ge1xuICAgICAgICB0aGlzLml0ZW1zU3RhdHVzT2JzZXJ2ZXIgPSBvYnNlcnZlcjtcbiAgICAgIH0pXG4gICAgICAgIC5waXBlKGRlYm91bmNlVGltZSgxMDApKVxuICAgICAgICAucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKVxuICAgICAgICAuc3Vic2NyaWJlKChjKSA9PiB7XG4gICAgICAgICAgY2FsbGJhY2tmbigpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiIsIjxheC1kcm9wLWRvd25cbiAgI2RcbiAgW3NpemVdPVwic2l6ZVwiXG4gIFtmaXRQYXJlbnRdPVwiZml0UGFyZW50XCJcbiAgW2Ryb3Bkb3duV2lkdGhdPVwiZHJvcGRvd25XaWR0aFwiXG4gIFtydGxdPVwicnRsXCJcbiAgW3Nob3dEcm9wRG93bkJ1dHRvbl09XCJzaG93RHJvcERvd25CdXR0b25cIlxuICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAoZHJvcGRvd25Ub2dnbGUpPVwiZHJvcGRvd25Ub2dnbGVTZWxlY0JveCgkZXZlbnQpXCJcbj5cbiAgPG5nLWNvbnRhaW5lciBzdGFydD5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbc3RhcnRdXCI+IDwvbmctY29udGVudD5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgaGVhZGVyPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiYXggY2hpcHMtY29udGFpbmVyXCJcbiAgICAgIFtjbGFzcy5tdWx0aWxpbmVdPVwibXVsdGlMaW5lXCJcbiAgICAgIFtzdHlsZS5wYWRkaW5nXT1cInNlbGVjdGVkSXRlbXMubGVuZ3RoICYmIG11bHRpTGluZSA/ICcwLjI1cmVtJyA6ICcnXCJcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiY2hpcHNcIlxuICAgICAgICBbY2xhc3MuY2hpcHMtYmxhbmtdPVwibW9kZSA9PT0gJ3NpbmdsZSdcIlxuICAgICAgICBbdGl0bGVdPVwiaXRlbVt0ZXh0RmllbGRdXCJcbiAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygc2VsZWN0ZWRJdGVtc1wiXG4gICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJjaGlwcy10ZXh0XCJcbiAgICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICB3aWR0aDpcbiAgICAgICAgICAgICAgaXRlbVt0ZXh0RmllbGRdLmxlbmd0aCA+IDE1ICYmXG4gICAgICAgICAgICAgIHRoaXMubW9kZSA9PT0gJ211bHRpcGxlJyAmJlxuICAgICAgICAgICAgICAhbXVsdGlMaW5lXG4gICAgICAgICAgICAgICAgPyAnMTEwcHgnXG4gICAgICAgICAgICAgICAgOiAnYXV0bydcbiAgICAgICAgICB9XCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGl0ZW1bdGV4dEZpZWxkXSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJjbG9zZS1pY29uXCJcbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlSXRlbVJlbW92ZUNsaWNrKGl0ZW0pXCJcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgKHJlYWRvbmx5ICE9IHRydWUgfHwgaXRlbVJlbW92ZSA9PSB0cnVlKSAmJlxuICAgICAgICAgICAgZGlzYWJsZWQgIT0gdHJ1ZSAmJlxuICAgICAgICAgICAgKGFsbG93TnVsbCA9PSB0cnVlIHx8IHNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMSlcbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYXIgZmEtdGltZXMgY2xvc2VcIj48L2k+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC13cmFwcGVyXCIgKGNsaWNrKT1cIm9uVGV4dEJveENsaWNrKCRldmVudClcIj5cbiAgICAgICAgPGF4LXRleHQtYm94XG4gICAgICAgICAgI3RleHRCb3hTZWxlY3RCb3hcbiAgICAgICAgICBbdGV4dEFsaWduXT1cInRleHRBbGlnblwiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInNlbGVjdGVkSXRlbXMubGVuZ3RoID09IDAgPyBwbGFjZWhvbGRlciA6ICcnXCJcbiAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgKG9ua2V5KT1cImhhbmRsZUtleUV2ZW50KCRldmVudClcIlxuICAgICAgICAgIFtzaXplXT1cInNpemVcIlxuICAgICAgICAgIChvbkZvY3VzKT1cIm9uRm9jdXNUZXh0Qm94KCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgIDwvYXgtdGV4dC1ib3g+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgZW5kPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltlbmRdXCI+IDwvbmctY29udGVudD5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPG5nLWNvbnRhaW5lciBwYW5lbD5cbiAgICA8ZGl2ICpuZ0lmPVwiYWxsb3dTZWFyY2hcIiBjbGFzcz1cInNlYXJjaC13cmFwcGVyXCIgc3R5bGU9XCJwYWRkaW5nOiAwLjdlbVwiPlxuICAgICAgPGF4LXNlYXJjaC1ib3hcbiAgICAgICAgI3NlcmNoQm94XG4gICAgICAgIFtvbkRlbWFuZFRyYW5zbGF0ZV09XCJvbkRlbWFuZFRyYW5zbGF0ZVwiXG4gICAgICAgIFsodmFsdWUpXT1cInRleHRcIlxuICAgICAgICAob25rZXkpPVwiaGFuZGxlS2V5RXZlbnRTZWFyY2goJGV2ZW50KVwiXG4gICAgICAgICh0ZXh0Q2hhbmdlZCk9XCJ0ZXh0Q2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgKG9uQnV0dG9uQ2xpY2spPVwidGV4dENoYW5nZWQoJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICA8L2F4LXNlYXJjaC1ib3g+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImF4IGxpc3QtY29udGFpbmVyXCI+XG4gICAgICA8ZGl2XG4gICAgICAgICNsaXN0Q29udGFpbmVyXG4gICAgICAgIGNsYXNzPVwibGlzdC1jb250YWluZXItaXRlbXNcIlxuICAgICAgICAoc2Nyb2xsKT1cInNjcm9sbGVkKCRldmVudClcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nSWY9XCJnZXRJdGVtcygpLmxlbmd0aCA+IDA7IHRoZW4gdGhlblRlbXBsYXRlOyBlbHNlIGVsc2VUZW1wbGF0ZVwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICN0aGVuVGVtcGxhdGU+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgW2NsYXNzLmF4LXN0YXRlLWRpc2FibGVkXT1cImlzSXRlbURpc2FibGVkKGl0ZW0pXCJcbiAgICAgICAgICAgIGNsYXNzPVwibGlzdC1pdGVtXCJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdldEl0ZW1zKCk7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgICAgW2NsYXNzLmZvY3VzZWRdPVwiaSA9PSBjdXJyZW50Zm9jdXNlZEluZGV4XCJcbiAgICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJpc0l0ZW1TZWxlY3RlZChpdGVtKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlSXRlbUNsaWNrKCRldmVudCwgaXRlbSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4XCI+XG4gICAgICAgICAgICAgIDxheC1jaGVjay1ib3hcbiAgICAgICAgICAgICAgICAqbmdJZj1cInNob3dDaGVja0JveFwiXG4gICAgICAgICAgICAgICAgW3NpemVdPVwic2l6ZVwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cImlzSXRlbVNlbGVjdGVkKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiXG4gICAgICAgICAgICAgICAgICAoIWFsbG93TnVsbCAmJlxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW1zLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICAgICAgICAgICAgICBpc0l0ZW1TZWxlY3RlZChpdGVtKSkgfHxcbiAgICAgICAgICAgICAgICAgIGlzSXRlbURpc2FibGVkKGl0ZW0pXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAob25DbGljayk9XCJoYW5kbGVJdGVtQ2xpY2soJGV2ZW50LCBpdGVtKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9heC1jaGVjay1ib3g+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3dUZW1wbGF0ZTsgZWxzZSBlbHNlVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBzdHlsZT1cIlxuICAgICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAgICAgICAgICAgZmxleDogMTtcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiaXRlbVt0ZXh0RmllbGRdXCJcbiAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIlxuICAgICAgICAgICAgICAgICAgICBzaG93Q2hlY2tCb3ggPyB7ICdwYWRkaW5nLWlubGluZS1zdGFydCc6ICcwLjVyZW0nIH0gOiAnJ1xuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgcm93VGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0gfVxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Vsc2VUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBzdHlsZT1cIlxuICAgICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAgICAgICAgICAgZmxleDogMTtcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiaXRlbVt0ZXh0RmllbGRdXCJcbiAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIlxuICAgICAgICAgICAgICAgICAgICBzaG93Q2hlY2tCb3ggPyB7ICdwYWRkaW5nLWlubGluZS1zdGFydCc6ICcwLjVyZW0nIH0gOiAnJ1xuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7eyBpdGVtW3RleHRGaWVsZF0gfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0xvYWRpbmdcIiBjbGFzcz1cImF4LXBhZC1zbVwiIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyXCI+XG4gICAgICAgICAgPGlcbiAgICAgICAgICAgIGNsYXNzPVwiZmFyIGZhLXNwaW5uZXItdGhpcmQgZmEtcHVsc2UgZmEtMnhcIlxuICAgICAgICAgICAgc3R5bGU9XCJjb2xvcjogdmFyKC0tYXgtcHJpbWFyeS1jb2xvcilcIlxuICAgICAgICAgID48L2k+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8IS0tIDxheC1sb2FkaW5nLWluZGljYXRvciA+PC9heC1sb2FkaW5nLWluZGljYXRvcj4gLS0+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZWxzZVRlbXBsYXRlPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIHNob3dMb2FkaW5nID09IHRydWU7XG4gICAgICAgICAgICAgIHRoZW4gc2VhcmNoVGVtcGxhdGU7XG4gICAgICAgICAgICAgIGVsc2Ugbm9EYXRhVGVtcGxhdGVcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2VhcmNoVGVtcGxhdGU+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1pdGVtXCI+XG4gICAgICAgICAgICAgIHt7ICdjb21tb24uc2VhcmNoJyB8IHRyYW5zIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9EYXRhVGVtcGxhdGU+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1pdGVtXCI+XG4gICAgICAgICAgICAgIHt7ICdjb21tb24ubm9EYXRhRm91bmQnIHwgdHJhbnMgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG48L2F4LWRyb3AtZG93bj5cbiJdfQ==