@acorex/components 6.5.90 → 6.5.91

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 (543) hide show
  1. package/README.md +2 -6
  2. package/acorex-components.d.ts +5 -0
  3. package/esm2020/acorex-components.mjs +5 -0
  4. package/esm2020/lib/accordion/accordion.component.mjs +44 -0
  5. package/esm2020/lib/accordion/accordion.module.mjs +20 -0
  6. package/esm2020/lib/base/base-page.class.mjs +94 -0
  7. package/esm2020/lib/base/components.class.mjs +17 -0
  8. package/esm2020/lib/base/element.class.mjs +294 -0
  9. package/esm2020/lib/base/events.class.mjs +11 -0
  10. package/esm2020/lib/button/button.component.mjs +71 -0
  11. package/esm2020/lib/button/button.module.mjs +21 -0
  12. package/esm2020/lib/calendar/calendar-box/calendar-box.component.mjs +413 -0
  13. package/esm2020/lib/calendar/calendar-box/calendar-box.module.mjs +22 -0
  14. package/esm2020/lib/calendar/scheduler/scheduler-views.property.mjs +54 -0
  15. package/esm2020/lib/calendar/scheduler/scheduler.class.mjs +18 -0
  16. package/esm2020/lib/calendar/scheduler/scheduler.component.mjs +213 -0
  17. package/esm2020/lib/calendar/scheduler/scheduler.module.mjs +68 -0
  18. package/esm2020/lib/calendar/scheduler/toolbars/scheduler-toolbar-navigator.mjs +132 -0
  19. package/esm2020/lib/calendar/scheduler/toolbars/scheduler-toolbar-views.mjs +37 -0
  20. package/esm2020/lib/calendar/scheduler/views/agenda/scheduler-agenda-view.component.mjs +47 -0
  21. package/esm2020/lib/calendar/scheduler/views/daytime/scheduler-daytime-view.component.mjs +95 -0
  22. package/esm2020/lib/calendar/scheduler/views/month/scheduler-month-view.component.mjs +204 -0
  23. package/esm2020/lib/calendar/scheduler/views/scheduler-view.component.mjs +99 -0
  24. package/esm2020/lib/calendar/scheduler/views/timeline/scheduler-timeline-view.component.mjs +77 -0
  25. package/esm2020/lib/checkbox/checkbox.component.mjs +98 -0
  26. package/esm2020/lib/checkbox/checkbox.module.mjs +20 -0
  27. package/esm2020/lib/color-picker/color-box/color-box.component.mjs +422 -0
  28. package/esm2020/lib/color-picker/color-picker.component.mjs +82 -0
  29. package/esm2020/lib/color-picker/color-picker.module.mjs +24 -0
  30. package/esm2020/lib/context-menu/context-menu.component.mjs +65 -0
  31. package/esm2020/lib/context-menu/context-menu.directive.mjs +135 -0
  32. package/esm2020/lib/context-menu/context-menu.module.mjs +20 -0
  33. package/esm2020/lib/data-filter/columns/filter-column-date.component.mjs +138 -0
  34. package/esm2020/lib/data-filter/columns/filter-column-number.component.mjs +117 -0
  35. package/esm2020/lib/data-filter/columns/filter-column-selection.component.mjs +74 -0
  36. package/esm2020/lib/data-filter/columns/filter-column-string.component.mjs +117 -0
  37. package/esm2020/lib/data-filter/filter-panel/filter-panel.component.mjs +258 -0
  38. package/esm2020/lib/data-filter/filter.class.mjs +44 -0
  39. package/esm2020/lib/data-filter/filter.module.mjs +90 -0
  40. package/esm2020/lib/data-filter/toolbar/filter-toolbar.component.mjs +166 -0
  41. package/esm2020/lib/data-list/core/data-list.component.mjs +40 -0
  42. package/esm2020/lib/data-list/list/list.component.mjs +124 -0
  43. package/esm2020/lib/data-list/list/list.module.mjs +22 -0
  44. package/esm2020/lib/data-list/list/toolbar-list-view.component.mjs +85 -0
  45. package/esm2020/lib/data-source/datasource.component.mjs +47 -0
  46. package/esm2020/lib/data-source/datasource.module.mjs +18 -0
  47. package/esm2020/lib/data-source/read-param.mjs +5 -0
  48. package/esm2020/lib/date-picker/date-picker.component.mjs +702 -0
  49. package/esm2020/lib/date-picker/date-picker.module.mjs +25 -0
  50. package/esm2020/lib/dialog/dialog.component.mjs +24 -0
  51. package/esm2020/lib/dialog/dialog.module.mjs +21 -0
  52. package/esm2020/lib/dialog/dialog.service.mjs +150 -0
  53. package/esm2020/lib/drawer/content.component.mjs +18 -0
  54. package/esm2020/lib/drawer/drawer-container.component.mjs +36 -0
  55. package/esm2020/lib/drawer/drawer.component.mjs +142 -0
  56. package/esm2020/lib/drawer/drawer.module.mjs +23 -0
  57. package/esm2020/lib/dropdown/dropdown.component.mjs +176 -0
  58. package/esm2020/lib/dropdown/dropdown.module.mjs +26 -0
  59. package/esm2020/lib/fieldset/fieldset.component.mjs +59 -0
  60. package/esm2020/lib/fieldset/fieldset.module.mjs +19 -0
  61. package/esm2020/lib/form-group/form-group.component.mjs +34 -0
  62. package/esm2020/lib/form-group/form-group.module.mjs +21 -0
  63. package/esm2020/lib/label/label.component.mjs +19 -0
  64. package/esm2020/lib/label/label.module.mjs +21 -0
  65. package/esm2020/lib/loading/loading-indicator.component.mjs +17 -0
  66. package/esm2020/lib/loading/loading-panel.component.mjs +44 -0
  67. package/esm2020/lib/loading/loading.module.mjs +21 -0
  68. package/{esm2022 → esm2020}/lib/loading/loading.service.mjs +45 -47
  69. package/esm2020/lib/menu/menu-item.component.mjs +47 -0
  70. package/esm2020/lib/menu/menu.component.mjs +86 -0
  71. package/esm2020/lib/menu/menu.module.mjs +22 -0
  72. package/esm2020/lib/menu/menu2.component.mjs +96 -0
  73. package/esm2020/lib/number-box/number-box.component.mjs +622 -0
  74. package/esm2020/lib/number-box/number-box.module.mjs +21 -0
  75. package/esm2020/lib/page/content.component.mjs +32 -0
  76. package/esm2020/lib/page/footer.component.mjs +19 -0
  77. package/esm2020/lib/page/page.component.mjs +53 -0
  78. package/esm2020/lib/page/page.module.mjs +22 -0
  79. package/esm2020/lib/panel-box/panel-box.component.mjs +88 -0
  80. package/esm2020/lib/panel-box/panel-box.module.mjs +19 -0
  81. package/esm2020/lib/password-box/password-box.component.mjs +31 -0
  82. package/esm2020/lib/password-box/password-box.module.mjs +23 -0
  83. package/esm2020/lib/popover/custom-cdk-overlay.service.mjs +48 -0
  84. package/esm2020/lib/popover/overlay.service.mjs +91 -0
  85. package/esm2020/lib/popover/popover.component.mjs +133 -0
  86. package/esm2020/lib/popover/popover.module.mjs +19 -0
  87. package/esm2020/lib/popup/popup.component.mjs +147 -0
  88. package/esm2020/lib/popup/popup.module.mjs +25 -0
  89. package/esm2020/lib/popup/popup.service.mjs +93 -0
  90. package/esm2020/lib/progress-bar/progress-bar.component.mjs +19 -0
  91. package/esm2020/lib/progress-bar/progress-bar.module.mjs +19 -0
  92. package/esm2020/lib/property-editor/editors/check-editor/check-editor.mjs +61 -0
  93. package/esm2020/lib/property-editor/editors/check-editor/check.module.mjs +22 -0
  94. package/esm2020/lib/property-editor/editors/color-editor/color.editor.mjs +38 -0
  95. package/esm2020/lib/property-editor/editors/color-editor/color.module.mjs +24 -0
  96. package/esm2020/lib/property-editor/editors/column-editor/column.editor.mjs +115 -0
  97. package/esm2020/lib/property-editor/editors/column-editor/column.module.mjs +32 -0
  98. package/esm2020/lib/property-editor/editors/conditional-color-editor/conditional-color.editor.mjs +211 -0
  99. package/esm2020/lib/property-editor/editors/conditional-color-editor/conditional-color.module.mjs +78 -0
  100. package/esm2020/lib/property-editor/editors/date-editor/date.editor.mjs +51 -0
  101. package/esm2020/lib/property-editor/editors/date-editor/date.module.mjs +24 -0
  102. package/esm2020/lib/property-editor/editors/number-editor/number.editor.mjs +63 -0
  103. package/esm2020/lib/property-editor/editors/number-editor/number.module.mjs +24 -0
  104. package/esm2020/lib/property-editor/editors/range-editor/range.editor.mjs +140 -0
  105. package/esm2020/lib/property-editor/editors/range-editor/range.module.mjs +61 -0
  106. package/esm2020/lib/property-editor/editors/searchbar-selectbox-editor/searchbar-selectbox-editor.mjs +72 -0
  107. package/esm2020/lib/property-editor/editors/selectbox-editor/selectbox.editor.mjs +71 -0
  108. package/esm2020/lib/property-editor/editors/selectbox-editor/selectbox.module.mjs +25 -0
  109. package/esm2020/lib/property-editor/editors/selection-editor/selection-editor.mjs +69 -0
  110. package/esm2020/lib/property-editor/editors/selection-editor/selection.module.mjs +22 -0
  111. package/esm2020/lib/property-editor/editors/switch-editor/number.editor.mjs +29 -0
  112. package/esm2020/lib/property-editor/editors/switch-editor/number.module.mjs +25 -0
  113. package/esm2020/lib/property-editor/editors/text-editor/text.editor.mjs +32 -0
  114. package/esm2020/lib/property-editor/editors/text-editor/text.module.mjs +24 -0
  115. package/esm2020/lib/property-editor/editors/textarea-editor/textarea.editor.mjs +32 -0
  116. package/esm2020/lib/property-editor/editors/textarea-editor/textarea.module.mjs +24 -0
  117. package/esm2020/lib/property-editor/editors/time-editor/time.editor.mjs +43 -0
  118. package/esm2020/lib/property-editor/editors/time-editor/time.module.mjs +24 -0
  119. package/esm2020/lib/property-editor/property-editor-renderer.directive.mjs +157 -0
  120. package/esm2020/lib/property-editor/property-editor.class.mjs +102 -0
  121. package/esm2020/lib/property-editor/property-editor.module.mjs +196 -0
  122. package/esm2020/lib/query-builder/query-builder-group.component.mjs +124 -0
  123. package/esm2020/lib/query-builder/query-builder-popup/query-builder-popup.component.mjs +172 -0
  124. package/esm2020/lib/query-builder/query-builder-rule.component.mjs +399 -0
  125. package/esm2020/lib/query-builder/query-builder.class.mjs +20 -0
  126. package/esm2020/lib/query-builder/query-builder.component.mjs +87 -0
  127. package/esm2020/lib/query-builder/query-builder.module.mjs +62 -0
  128. package/esm2020/lib/query-builder/query-builder.service.mjs +197 -0
  129. package/esm2020/lib/search-bar/search-bar.component.mjs +286 -0
  130. package/esm2020/lib/search-bar/search-bar.module.mjs +63 -0
  131. package/esm2020/lib/searchbox/searchbox.component.mjs +81 -0
  132. package/esm2020/lib/searchbox/searchbox.module.mjs +24 -0
  133. package/esm2020/lib/selectbox/selectbox.component.mjs +961 -0
  134. package/esm2020/lib/selectbox/selectbox.module.mjs +44 -0
  135. package/esm2020/lib/selectbox/selectbox2.component.mjs +574 -0
  136. package/esm2020/lib/selection-list/selection-list.component.mjs +108 -0
  137. package/esm2020/lib/selection-list/selection-list.module.mjs +21 -0
  138. package/esm2020/lib/switch/switch.component.mjs +51 -0
  139. package/esm2020/lib/switch/switch.module.mjs +20 -0
  140. package/esm2020/lib/tab-page/tab-page-Renderer.component.mjs +71 -0
  141. package/esm2020/lib/tab-page/tab-page-host.component.mjs +114 -0
  142. package/esm2020/lib/tab-page/tab-page.module.mjs +21 -0
  143. package/esm2020/lib/tab-page/tab-page.service.mjs +160 -0
  144. package/esm2020/lib/tab-strip/tab-strip.component.mjs +36 -0
  145. package/esm2020/lib/tab-strip/tab-strip.module.mjs +19 -0
  146. package/esm2020/lib/tab-view/dynamic-tabs.directive.mjs +24 -0
  147. package/esm2020/lib/tab-view/tab-view.component.mjs +105 -0
  148. package/esm2020/lib/tab-view/tab-view.module.mjs +21 -0
  149. package/esm2020/lib/tab-view/tab.component.mjs +30 -0
  150. package/esm2020/lib/textarea/textarea.component.mjs +26 -0
  151. package/esm2020/lib/textarea/textarea.module.mjs +21 -0
  152. package/esm2020/lib/textbox/textbox.component.mjs +39 -0
  153. package/esm2020/lib/textbox/textbox.module.mjs +24 -0
  154. package/esm2020/lib/time-picker/time-picker.component.mjs +943 -0
  155. package/esm2020/lib/time-picker/time-picker.module.mjs +22 -0
  156. package/esm2020/lib/toast/toast-message/toast-message.component.mjs +74 -0
  157. package/esm2020/lib/toast/toast-wrapper/toast-wrapper.component.mjs +13 -0
  158. package/esm2020/lib/toast/toast.module.mjs +21 -0
  159. package/esm2020/lib/toast/toast.service.mjs +44 -0
  160. package/esm2020/lib/toolbar/group-button/toolbar-group-button.component.mjs +78 -0
  161. package/esm2020/lib/toolbar/menu/toolbar-menu.component.mjs +57 -0
  162. package/esm2020/lib/toolbar/search/toolbar-search.component.mjs +54 -0
  163. package/esm2020/lib/toolbar/title/toolbar-title.component.mjs +47 -0
  164. package/esm2020/lib/toolbar/toolbar-item.mjs +6 -0
  165. package/esm2020/lib/toolbar/toolbar.component.mjs +13 -0
  166. package/esm2020/lib/toolbar/toolbar.module.mjs +40 -0
  167. package/esm2020/lib/tooltip/tooltip.directive.mjs +100 -0
  168. package/esm2020/lib/tooltip/tooltip.module.mjs +19 -0
  169. package/esm2020/lib/tree-side-menu/tree-side-menu.component.mjs +646 -0
  170. package/esm2020/lib/tree-side-menu/tree-side-menu.module.mjs +35 -0
  171. package/esm2020/lib/tree-view/tree-view.component.mjs +775 -0
  172. package/esm2020/lib/tree-view/tree-view.module.mjs +22 -0
  173. package/esm2020/lib/upload-file/upload-file.component.mjs +208 -0
  174. package/esm2020/lib/upload-file/upload-file.events.mjs +2 -0
  175. package/esm2020/lib/upload-file/upload-file.module.mjs +24 -0
  176. package/esm2020/lib/validation/validation-form.component.mjs +65 -0
  177. package/esm2020/lib/validation/validation-rule.widget.mjs +111 -0
  178. package/esm2020/lib/validation/validation.class.mjs +2 -0
  179. package/esm2020/lib/validation/validation.component.mjs +89 -0
  180. package/esm2020/lib/validation/validation.module.mjs +34 -0
  181. package/esm2020/public-api.mjs +158 -0
  182. package/fesm2015/acorex-components.mjs +16013 -0
  183. package/fesm2015/acorex-components.mjs.map +1 -0
  184. package/{fesm2022 → fesm2020}/acorex-components.mjs +15212 -16111
  185. package/fesm2020/acorex-components.mjs.map +1 -0
  186. package/lib/accordion/accordion.component.d.ts +13 -13
  187. package/lib/accordion/accordion.module.d.ts +9 -9
  188. package/lib/base/base-page.class.d.ts +46 -46
  189. package/lib/base/components.class.d.ts +10 -10
  190. package/lib/base/element.class.d.ts +106 -106
  191. package/lib/base/events.class.d.ts +18 -18
  192. package/lib/button/button.component.d.ts +21 -21
  193. package/lib/button/button.module.d.ts +8 -8
  194. package/lib/calendar/calendar-box/calendar-box.component.d.ts +81 -81
  195. package/lib/calendar/calendar-box/calendar-box.module.d.ts +11 -11
  196. package/lib/calendar/scheduler/scheduler-views.property.d.ts +19 -19
  197. package/lib/calendar/scheduler/scheduler.class.d.ts +36 -36
  198. package/lib/calendar/scheduler/scheduler.component.d.ts +39 -39
  199. package/lib/calendar/scheduler/scheduler.module.d.ts +21 -21
  200. package/lib/calendar/scheduler/toolbars/scheduler-toolbar-navigator.d.ts +25 -25
  201. package/lib/calendar/scheduler/toolbars/scheduler-toolbar-views.d.ts +14 -14
  202. package/lib/calendar/scheduler/views/agenda/scheduler-agenda-view.component.d.ts +16 -16
  203. package/lib/calendar/scheduler/views/daytime/scheduler-daytime-view.component.d.ts +26 -26
  204. package/lib/calendar/scheduler/views/month/scheduler-month-view.component.d.ts +37 -37
  205. package/lib/calendar/scheduler/views/scheduler-view.component.d.ts +28 -28
  206. package/lib/calendar/scheduler/views/timeline/scheduler-timeline-view.component.d.ts +24 -24
  207. package/lib/checkbox/checkbox.component.d.ts +30 -30
  208. package/lib/checkbox/checkbox.module.d.ts +9 -9
  209. package/lib/color-picker/color-box/color-box.component.d.ts +25 -25
  210. package/lib/color-picker/color-picker.component.d.ts +30 -30
  211. package/lib/color-picker/color-picker.module.d.ts +13 -13
  212. package/lib/context-menu/context-menu.component.d.ts +22 -22
  213. package/lib/context-menu/context-menu.directive.d.ts +38 -38
  214. package/lib/context-menu/context-menu.module.d.ts +9 -9
  215. package/lib/data-filter/columns/filter-column-date.component.d.ts +22 -22
  216. package/lib/data-filter/columns/filter-column-number.component.d.ts +15 -15
  217. package/lib/data-filter/columns/filter-column-selection.component.d.ts +18 -18
  218. package/lib/data-filter/columns/filter-column-string.component.d.ts +15 -15
  219. package/lib/data-filter/filter-panel/filter-panel.component.d.ts +45 -45
  220. package/lib/data-filter/filter.class.d.ts +40 -40
  221. package/lib/data-filter/filter.module.d.ts +24 -24
  222. package/lib/data-filter/toolbar/filter-toolbar.component.d.ts +25 -25
  223. package/lib/data-list/core/data-list.component.d.ts +15 -15
  224. package/lib/data-list/list/list.component.d.ts +40 -40
  225. package/lib/data-list/list/list.module.d.ts +11 -11
  226. package/lib/data-list/list/toolbar-list-view.component.d.ts +17 -17
  227. package/lib/data-source/datasource.component.d.ts +16 -16
  228. package/lib/data-source/datasource.module.d.ts +7 -7
  229. package/lib/data-source/read-param.d.ts +40 -40
  230. package/lib/date-picker/date-picker.component.d.ts +81 -81
  231. package/lib/date-picker/date-picker.module.d.ts +14 -14
  232. package/lib/dialog/dialog.component.d.ts +14 -14
  233. package/lib/dialog/dialog.module.d.ts +10 -10
  234. package/lib/dialog/dialog.service.d.ts +36 -36
  235. package/lib/drawer/content.component.d.ts +7 -7
  236. package/lib/drawer/drawer-container.component.d.ts +10 -10
  237. package/lib/drawer/drawer.component.d.ts +34 -34
  238. package/lib/drawer/drawer.module.d.ts +10 -10
  239. package/lib/dropdown/dropdown.component.d.ts +38 -38
  240. package/lib/dropdown/dropdown.module.d.ts +13 -13
  241. package/lib/fieldset/fieldset.component.d.ts +11 -11
  242. package/lib/fieldset/fieldset.module.d.ts +8 -8
  243. package/lib/form-group/form-group.component.d.ts +14 -14
  244. package/lib/form-group/form-group.module.d.ts +8 -8
  245. package/lib/label/label.component.d.ts +9 -9
  246. package/lib/label/label.module.d.ts +8 -8
  247. package/lib/loading/loading-indicator.component.d.ts +9 -9
  248. package/lib/loading/loading-panel.component.d.ts +13 -13
  249. package/lib/loading/loading.module.d.ts +10 -10
  250. package/lib/loading/loading.service.d.ts +13 -13
  251. package/lib/menu/menu-item.component.d.ts +18 -18
  252. package/lib/menu/menu.component.d.ts +35 -35
  253. package/lib/menu/menu.module.d.ts +11 -11
  254. package/lib/menu/menu2.component.d.ts +21 -21
  255. package/lib/number-box/number-box.component.d.ts +52 -52
  256. package/lib/number-box/number-box.module.d.ts +10 -10
  257. package/lib/page/content.component.d.ts +8 -8
  258. package/lib/page/footer.component.d.ts +5 -5
  259. package/lib/page/page.component.d.ts +16 -16
  260. package/lib/page/page.module.d.ts +11 -11
  261. package/lib/panel-box/panel-box.component.d.ts +19 -19
  262. package/lib/panel-box/panel-box.module.d.ts +8 -8
  263. package/lib/password-box/password-box.component.d.ts +12 -12
  264. package/lib/password-box/password-box.module.d.ts +10 -10
  265. package/lib/popover/custom-cdk-overlay.service.d.ts +19 -19
  266. package/lib/popover/overlay.service.d.ts +32 -32
  267. package/lib/popover/popover.component.d.ts +35 -35
  268. package/lib/popover/popover.module.d.ts +8 -8
  269. package/lib/popup/popup.component.d.ts +40 -40
  270. package/lib/popup/popup.module.d.ts +13 -13
  271. package/lib/popup/popup.service.d.ts +22 -22
  272. package/lib/progress-bar/progress-bar.component.d.ts +7 -7
  273. package/lib/progress-bar/progress-bar.module.d.ts +8 -8
  274. package/lib/property-editor/editors/check-editor/check-editor.d.ts +19 -19
  275. package/lib/property-editor/editors/check-editor/check.module.d.ts +11 -11
  276. package/lib/property-editor/editors/color-editor/color.editor.d.ts +13 -13
  277. package/lib/property-editor/editors/color-editor/color.module.d.ts +12 -12
  278. package/lib/property-editor/editors/column-editor/column.editor.d.ts +34 -34
  279. package/lib/property-editor/editors/column-editor/column.module.d.ts +20 -20
  280. package/lib/property-editor/editors/conditional-color-editor/conditional-color.editor.d.ts +44 -44
  281. package/lib/property-editor/editors/conditional-color-editor/conditional-color.module.d.ts +19 -19
  282. package/lib/property-editor/editors/date-editor/date.editor.d.ts +28 -28
  283. package/lib/property-editor/editors/date-editor/date.module.d.ts +12 -12
  284. package/lib/property-editor/editors/number-editor/number.editor.d.ts +20 -20
  285. package/lib/property-editor/editors/number-editor/number.module.d.ts +12 -12
  286. package/lib/property-editor/editors/range-editor/range.editor.d.ts +29 -29
  287. package/lib/property-editor/editors/range-editor/range.module.d.ts +18 -18
  288. package/lib/property-editor/editors/searchbar-selectbox-editor/searchbar-selectbox-editor.d.ts +29 -29
  289. package/lib/property-editor/editors/selectbox-editor/selectbox.editor.d.ts +28 -28
  290. package/lib/property-editor/editors/selectbox-editor/selectbox.module.d.ts +14 -14
  291. package/lib/property-editor/editors/selection-editor/selection-editor.d.ts +25 -25
  292. package/lib/property-editor/editors/selection-editor/selection.module.d.ts +11 -11
  293. package/lib/property-editor/editors/switch-editor/number.editor.d.ts +11 -11
  294. package/lib/property-editor/editors/switch-editor/number.module.d.ts +13 -13
  295. package/lib/property-editor/editors/text-editor/text.editor.d.ts +18 -18
  296. package/lib/property-editor/editors/text-editor/text.module.d.ts +12 -12
  297. package/lib/property-editor/editors/textarea-editor/textarea.editor.d.ts +17 -17
  298. package/lib/property-editor/editors/textarea-editor/textarea.module.d.ts +12 -12
  299. package/lib/property-editor/editors/time-editor/time.editor.d.ts +17 -17
  300. package/lib/property-editor/editors/time-editor/time.module.d.ts +12 -12
  301. package/lib/property-editor/property-editor-renderer.directive.d.ts +31 -31
  302. package/lib/property-editor/property-editor.class.d.ts +93 -93
  303. package/lib/property-editor/property-editor.module.d.ts +21 -21
  304. package/lib/query-builder/query-builder-group.component.d.ts +33 -33
  305. package/lib/query-builder/query-builder-popup/query-builder-popup.component.d.ts +35 -35
  306. package/lib/query-builder/query-builder-rule.component.d.ts +45 -45
  307. package/lib/query-builder/query-builder.class.d.ts +45 -45
  308. package/lib/query-builder/query-builder.component.d.ts +29 -29
  309. package/lib/query-builder/query-builder.module.d.ts +23 -23
  310. package/lib/query-builder/query-builder.service.d.ts +18 -18
  311. package/lib/search-bar/search-bar.component.d.ts +62 -62
  312. package/lib/search-bar/search-bar.module.d.ts +18 -18
  313. package/lib/searchbox/searchbox.component.d.ts +22 -22
  314. package/lib/searchbox/searchbox.module.d.ts +13 -13
  315. package/lib/selectbox/selectbox.component.d.ts +118 -118
  316. package/lib/selectbox/selectbox.module.d.ts +15 -15
  317. package/lib/selectbox/selectbox2.component.d.ts +103 -103
  318. package/lib/selection-list/selection-list.component.d.ts +32 -32
  319. package/lib/selection-list/selection-list.module.d.ts +10 -10
  320. package/lib/switch/switch.component.d.ts +20 -20
  321. package/lib/switch/switch.module.d.ts +9 -9
  322. package/lib/tab-page/tab-page-Renderer.component.d.ts +16 -16
  323. package/lib/tab-page/tab-page-host.component.d.ts +24 -24
  324. package/lib/tab-page/tab-page.module.d.ts +10 -10
  325. package/lib/tab-page/tab-page.service.d.ts +30 -30
  326. package/lib/tab-strip/tab-strip.component.d.ts +28 -28
  327. package/lib/tab-strip/tab-strip.module.d.ts +8 -8
  328. package/lib/tab-view/dynamic-tabs.directive.d.ts +16 -16
  329. package/lib/tab-view/tab-view.component.d.ts +26 -26
  330. package/lib/tab-view/tab-view.module.d.ts +10 -10
  331. package/lib/tab-view/tab.component.d.ts +12 -12
  332. package/lib/textarea/textarea.component.d.ts +12 -12
  333. package/lib/textarea/textarea.module.d.ts +8 -8
  334. package/lib/textbox/textbox.component.d.ts +16 -16
  335. package/lib/textbox/textbox.module.d.ts +11 -11
  336. package/lib/time-picker/time-picker.component.d.ts +52 -52
  337. package/lib/time-picker/time-picker.module.d.ts +11 -11
  338. package/lib/toast/toast-message/toast-message.component.d.ts +18 -18
  339. package/lib/toast/toast-wrapper/toast-wrapper.component.d.ts +8 -8
  340. package/lib/toast/toast.module.d.ts +9 -9
  341. package/lib/toast/toast.service.d.ts +18 -18
  342. package/lib/toolbar/group-button/toolbar-group-button.component.d.ts +12 -12
  343. package/lib/toolbar/menu/toolbar-menu.component.d.ts +24 -24
  344. package/lib/toolbar/search/toolbar-search.component.d.ts +16 -16
  345. package/lib/toolbar/title/toolbar-title.component.d.ts +9 -9
  346. package/lib/toolbar/toolbar-item.d.ts +3 -3
  347. package/lib/toolbar/toolbar.component.d.ts +8 -8
  348. package/lib/toolbar/toolbar.module.d.ts +14 -14
  349. package/lib/tooltip/tooltip.directive.d.ts +21 -21
  350. package/lib/tooltip/tooltip.module.d.ts +8 -8
  351. package/lib/tree-side-menu/tree-side-menu.component.d.ts +111 -111
  352. package/lib/tree-side-menu/tree-side-menu.module.d.ts +11 -11
  353. package/lib/tree-view/tree-view.component.d.ts +121 -121
  354. package/lib/tree-view/tree-view.module.d.ts +11 -11
  355. package/lib/upload-file/upload-file.component.d.ts +42 -42
  356. package/lib/upload-file/upload-file.events.d.ts +10 -10
  357. package/lib/upload-file/upload-file.module.d.ts +13 -13
  358. package/lib/validation/validation-form.component.d.ts +19 -19
  359. package/lib/validation/validation-rule.widget.d.ts +23 -23
  360. package/lib/validation/validation.class.d.ts +16 -16
  361. package/lib/validation/validation.component.d.ts +25 -25
  362. package/lib/validation/validation.module.d.ts +11 -11
  363. package/package.json +20 -15
  364. package/{index.d.ts → public-api.d.ts} +155 -155
  365. package/esm2022/acorex-components.mjs +0 -5
  366. package/esm2022/index.mjs +0 -158
  367. package/esm2022/lib/accordion/accordion.component.mjs +0 -45
  368. package/esm2022/lib/accordion/accordion.module.mjs +0 -20
  369. package/esm2022/lib/base/base-page.class.mjs +0 -95
  370. package/esm2022/lib/base/components.class.mjs +0 -17
  371. package/esm2022/lib/base/element.class.mjs +0 -301
  372. package/esm2022/lib/base/events.class.mjs +0 -17
  373. package/esm2022/lib/button/button.component.mjs +0 -74
  374. package/esm2022/lib/button/button.module.mjs +0 -21
  375. package/esm2022/lib/calendar/calendar-box/calendar-box.component.mjs +0 -426
  376. package/esm2022/lib/calendar/calendar-box/calendar-box.module.mjs +0 -22
  377. package/esm2022/lib/calendar/scheduler/scheduler-views.property.mjs +0 -59
  378. package/esm2022/lib/calendar/scheduler/scheduler.class.mjs +0 -16
  379. package/esm2022/lib/calendar/scheduler/scheduler.component.mjs +0 -226
  380. package/esm2022/lib/calendar/scheduler/scheduler.module.mjs +0 -68
  381. package/esm2022/lib/calendar/scheduler/toolbars/scheduler-toolbar-navigator.mjs +0 -136
  382. package/esm2022/lib/calendar/scheduler/toolbars/scheduler-toolbar-views.mjs +0 -37
  383. package/esm2022/lib/calendar/scheduler/views/agenda/scheduler-agenda-view.component.mjs +0 -49
  384. package/esm2022/lib/calendar/scheduler/views/daytime/scheduler-daytime-view.component.mjs +0 -102
  385. package/esm2022/lib/calendar/scheduler/views/month/scheduler-month-view.component.mjs +0 -214
  386. package/esm2022/lib/calendar/scheduler/views/scheduler-view.component.mjs +0 -99
  387. package/esm2022/lib/calendar/scheduler/views/timeline/scheduler-timeline-view.component.mjs +0 -85
  388. package/esm2022/lib/checkbox/checkbox.component.mjs +0 -102
  389. package/esm2022/lib/checkbox/checkbox.module.mjs +0 -20
  390. package/esm2022/lib/color-picker/color-box/color-box.component.mjs +0 -423
  391. package/esm2022/lib/color-picker/color-picker.component.mjs +0 -89
  392. package/esm2022/lib/color-picker/color-picker.module.mjs +0 -24
  393. package/esm2022/lib/context-menu/context-menu.component.mjs +0 -68
  394. package/esm2022/lib/context-menu/context-menu.directive.mjs +0 -146
  395. package/esm2022/lib/context-menu/context-menu.module.mjs +0 -20
  396. package/esm2022/lib/data-filter/columns/filter-column-date.component.mjs +0 -140
  397. package/esm2022/lib/data-filter/columns/filter-column-number.component.mjs +0 -119
  398. package/esm2022/lib/data-filter/columns/filter-column-selection.component.mjs +0 -75
  399. package/esm2022/lib/data-filter/columns/filter-column-string.component.mjs +0 -119
  400. package/esm2022/lib/data-filter/filter-panel/filter-panel.component.mjs +0 -267
  401. package/esm2022/lib/data-filter/filter.class.mjs +0 -46
  402. package/esm2022/lib/data-filter/filter.module.mjs +0 -88
  403. package/esm2022/lib/data-filter/toolbar/filter-toolbar.component.mjs +0 -168
  404. package/esm2022/lib/data-list/core/data-list.component.mjs +0 -37
  405. package/esm2022/lib/data-list/list/list.component.mjs +0 -134
  406. package/esm2022/lib/data-list/list/list.module.mjs +0 -22
  407. package/esm2022/lib/data-list/list/toolbar-list-view.component.mjs +0 -84
  408. package/esm2022/lib/data-source/datasource.component.mjs +0 -47
  409. package/esm2022/lib/data-source/datasource.module.mjs +0 -18
  410. package/esm2022/lib/data-source/read-param.mjs +0 -7
  411. package/esm2022/lib/date-picker/date-picker.component.mjs +0 -718
  412. package/esm2022/lib/date-picker/date-picker.module.mjs +0 -49
  413. package/esm2022/lib/dialog/dialog.component.mjs +0 -26
  414. package/esm2022/lib/dialog/dialog.module.mjs +0 -21
  415. package/esm2022/lib/dialog/dialog.service.mjs +0 -160
  416. package/esm2022/lib/drawer/content.component.mjs +0 -18
  417. package/esm2022/lib/drawer/drawer-container.component.mjs +0 -38
  418. package/esm2022/lib/drawer/drawer.component.mjs +0 -146
  419. package/esm2022/lib/drawer/drawer.module.mjs +0 -23
  420. package/esm2022/lib/dropdown/dropdown.component.mjs +0 -186
  421. package/esm2022/lib/dropdown/dropdown.module.mjs +0 -26
  422. package/esm2022/lib/fieldset/fieldset.component.mjs +0 -57
  423. package/esm2022/lib/fieldset/fieldset.module.mjs +0 -19
  424. package/esm2022/lib/form-group/form-group.component.mjs +0 -37
  425. package/esm2022/lib/form-group/form-group.module.mjs +0 -21
  426. package/esm2022/lib/label/label.component.mjs +0 -19
  427. package/esm2022/lib/label/label.module.mjs +0 -21
  428. package/esm2022/lib/loading/loading-indicator.component.mjs +0 -18
  429. package/esm2022/lib/loading/loading-panel.component.mjs +0 -45
  430. package/esm2022/lib/loading/loading.module.mjs +0 -21
  431. package/esm2022/lib/menu/menu-item.component.mjs +0 -50
  432. package/esm2022/lib/menu/menu.component.mjs +0 -98
  433. package/esm2022/lib/menu/menu.module.mjs +0 -22
  434. package/esm2022/lib/menu/menu2.component.mjs +0 -100
  435. package/esm2022/lib/number-box/number-box.component.mjs +0 -628
  436. package/esm2022/lib/number-box/number-box.module.mjs +0 -21
  437. package/esm2022/lib/page/content.component.mjs +0 -27
  438. package/esm2022/lib/page/footer.component.mjs +0 -19
  439. package/esm2022/lib/page/page.component.mjs +0 -57
  440. package/esm2022/lib/page/page.module.mjs +0 -22
  441. package/esm2022/lib/panel-box/panel-box.component.mjs +0 -87
  442. package/esm2022/lib/panel-box/panel-box.module.mjs +0 -19
  443. package/esm2022/lib/password-box/password-box.component.mjs +0 -32
  444. package/esm2022/lib/password-box/password-box.module.mjs +0 -23
  445. package/esm2022/lib/popover/custom-cdk-overlay.service.mjs +0 -50
  446. package/esm2022/lib/popover/overlay.service.mjs +0 -94
  447. package/esm2022/lib/popover/popover.component.mjs +0 -145
  448. package/esm2022/lib/popover/popover.module.mjs +0 -19
  449. package/esm2022/lib/popup/popup.component.mjs +0 -159
  450. package/esm2022/lib/popup/popup.module.mjs +0 -25
  451. package/esm2022/lib/popup/popup.service.mjs +0 -94
  452. package/esm2022/lib/progress-bar/progress-bar.component.mjs +0 -16
  453. package/esm2022/lib/progress-bar/progress-bar.module.mjs +0 -19
  454. package/esm2022/lib/property-editor/editors/check-editor/check-editor.mjs +0 -65
  455. package/esm2022/lib/property-editor/editors/check-editor/check.module.mjs +0 -22
  456. package/esm2022/lib/property-editor/editors/color-editor/color.editor.mjs +0 -41
  457. package/esm2022/lib/property-editor/editors/color-editor/color.module.mjs +0 -24
  458. package/esm2022/lib/property-editor/editors/column-editor/column.editor.mjs +0 -118
  459. package/esm2022/lib/property-editor/editors/column-editor/column.module.mjs +0 -32
  460. package/esm2022/lib/property-editor/editors/conditional-color-editor/conditional-color.editor.mjs +0 -216
  461. package/esm2022/lib/property-editor/editors/conditional-color-editor/conditional-color.module.mjs +0 -76
  462. package/esm2022/lib/property-editor/editors/date-editor/date.editor.mjs +0 -87
  463. package/esm2022/lib/property-editor/editors/date-editor/date.module.mjs +0 -24
  464. package/esm2022/lib/property-editor/editors/number-editor/number.editor.mjs +0 -66
  465. package/esm2022/lib/property-editor/editors/number-editor/number.module.mjs +0 -24
  466. package/esm2022/lib/property-editor/editors/range-editor/range.editor.mjs +0 -145
  467. package/esm2022/lib/property-editor/editors/range-editor/range.module.mjs +0 -59
  468. package/esm2022/lib/property-editor/editors/searchbar-selectbox-editor/searchbar-selectbox-editor.mjs +0 -76
  469. package/esm2022/lib/property-editor/editors/selectbox-editor/selectbox.editor.mjs +0 -75
  470. package/esm2022/lib/property-editor/editors/selectbox-editor/selectbox.module.mjs +0 -25
  471. package/esm2022/lib/property-editor/editors/selection-editor/selection-editor.mjs +0 -73
  472. package/esm2022/lib/property-editor/editors/selection-editor/selection.module.mjs +0 -22
  473. package/esm2022/lib/property-editor/editors/switch-editor/number.editor.mjs +0 -30
  474. package/esm2022/lib/property-editor/editors/switch-editor/number.module.mjs +0 -25
  475. package/esm2022/lib/property-editor/editors/text-editor/text.editor.mjs +0 -36
  476. package/esm2022/lib/property-editor/editors/text-editor/text.module.mjs +0 -24
  477. package/esm2022/lib/property-editor/editors/textarea-editor/textarea.editor.mjs +0 -35
  478. package/esm2022/lib/property-editor/editors/textarea-editor/textarea.module.mjs +0 -24
  479. package/esm2022/lib/property-editor/editors/time-editor/time.editor.mjs +0 -47
  480. package/esm2022/lib/property-editor/editors/time-editor/time.module.mjs +0 -24
  481. package/esm2022/lib/property-editor/property-editor-renderer.directive.mjs +0 -167
  482. package/esm2022/lib/property-editor/property-editor.class.mjs +0 -108
  483. package/esm2022/lib/property-editor/property-editor.module.mjs +0 -194
  484. package/esm2022/lib/query-builder/query-builder-group.component.mjs +0 -129
  485. package/esm2022/lib/query-builder/query-builder-popup/query-builder-popup.component.mjs +0 -177
  486. package/esm2022/lib/query-builder/query-builder-rule.component.mjs +0 -428
  487. package/esm2022/lib/query-builder/query-builder.class.mjs +0 -42
  488. package/esm2022/lib/query-builder/query-builder.component.mjs +0 -92
  489. package/esm2022/lib/query-builder/query-builder.module.mjs +0 -62
  490. package/esm2022/lib/query-builder/query-builder.service.mjs +0 -199
  491. package/esm2022/lib/search-bar/search-bar.component.mjs +0 -293
  492. package/esm2022/lib/search-bar/search-bar.module.mjs +0 -61
  493. package/esm2022/lib/searchbox/searchbox.component.mjs +0 -82
  494. package/esm2022/lib/searchbox/searchbox.module.mjs +0 -24
  495. package/esm2022/lib/selectbox/selectbox.component.mjs +0 -1025
  496. package/esm2022/lib/selectbox/selectbox.module.mjs +0 -44
  497. package/esm2022/lib/selectbox/selectbox2.component.mjs +0 -617
  498. package/esm2022/lib/selection-list/selection-list.component.mjs +0 -113
  499. package/esm2022/lib/selection-list/selection-list.module.mjs +0 -21
  500. package/esm2022/lib/switch/switch.component.mjs +0 -55
  501. package/esm2022/lib/switch/switch.module.mjs +0 -20
  502. package/esm2022/lib/tab-page/tab-page-Renderer.component.mjs +0 -75
  503. package/esm2022/lib/tab-page/tab-page-host.component.mjs +0 -124
  504. package/esm2022/lib/tab-page/tab-page.module.mjs +0 -21
  505. package/esm2022/lib/tab-page/tab-page.service.mjs +0 -158
  506. package/esm2022/lib/tab-strip/tab-strip.component.mjs +0 -38
  507. package/esm2022/lib/tab-strip/tab-strip.module.mjs +0 -19
  508. package/esm2022/lib/tab-view/dynamic-tabs.directive.mjs +0 -25
  509. package/esm2022/lib/tab-view/tab-view.component.mjs +0 -110
  510. package/esm2022/lib/tab-view/tab-view.module.mjs +0 -21
  511. package/esm2022/lib/tab-view/tab.component.mjs +0 -33
  512. package/esm2022/lib/textarea/textarea.component.mjs +0 -27
  513. package/esm2022/lib/textarea/textarea.module.mjs +0 -21
  514. package/esm2022/lib/textbox/textbox.component.mjs +0 -42
  515. package/esm2022/lib/textbox/textbox.module.mjs +0 -36
  516. package/esm2022/lib/time-picker/time-picker.component.mjs +0 -1104
  517. package/esm2022/lib/time-picker/time-picker.module.mjs +0 -34
  518. package/esm2022/lib/toast/toast-message/toast-message.component.mjs +0 -76
  519. package/esm2022/lib/toast/toast-wrapper/toast-wrapper.component.mjs +0 -13
  520. package/esm2022/lib/toast/toast.module.mjs +0 -21
  521. package/esm2022/lib/toast/toast.service.mjs +0 -45
  522. package/esm2022/lib/toolbar/group-button/toolbar-group-button.component.mjs +0 -77
  523. package/esm2022/lib/toolbar/menu/toolbar-menu.component.mjs +0 -62
  524. package/esm2022/lib/toolbar/search/toolbar-search.component.mjs +0 -56
  525. package/esm2022/lib/toolbar/title/toolbar-title.component.mjs +0 -37
  526. package/esm2022/lib/toolbar/toolbar-item.mjs +0 -4
  527. package/esm2022/lib/toolbar/toolbar.component.mjs +0 -13
  528. package/esm2022/lib/toolbar/toolbar.module.mjs +0 -40
  529. package/esm2022/lib/tooltip/tooltip.directive.mjs +0 -104
  530. package/esm2022/lib/tooltip/tooltip.module.mjs +0 -19
  531. package/esm2022/lib/tree-side-menu/tree-side-menu.component.mjs +0 -697
  532. package/esm2022/lib/tree-side-menu/tree-side-menu.module.mjs +0 -33
  533. package/esm2022/lib/tree-view/tree-view.component.mjs +0 -854
  534. package/esm2022/lib/tree-view/tree-view.module.mjs +0 -22
  535. package/esm2022/lib/upload-file/upload-file.component.mjs +0 -218
  536. package/esm2022/lib/upload-file/upload-file.events.mjs +0 -2
  537. package/esm2022/lib/upload-file/upload-file.module.mjs +0 -24
  538. package/esm2022/lib/validation/validation-form.component.mjs +0 -68
  539. package/esm2022/lib/validation/validation-rule.widget.mjs +0 -114
  540. package/esm2022/lib/validation/validation.class.mjs +0 -2
  541. package/esm2022/lib/validation/validation.component.mjs +0 -89
  542. package/esm2022/lib/validation/validation.module.mjs +0 -34
  543. package/fesm2022/acorex-components.mjs.map +0 -1
@@ -0,0 +1,961 @@
1
+ import { Component, ViewEncapsulation, ChangeDetectionStrategy, Input, EventEmitter, Output, ViewChild, ChangeDetectorRef, ElementRef, ContentChild, NgZone, TemplateRef } from '@angular/core';
2
+ import { Observable } from 'rxjs';
3
+ import { debounceTime, distinctUntilChanged } from 'rxjs/operators';
4
+ import { AXTextBoxComponent } from '../textbox/textbox.component';
5
+ import { AXDropdownComponent } from '../dropdown/dropdown.component';
6
+ import { AXValidatableComponent } from '../base/element.class';
7
+ import { AXDataSourceComponent } from '../data-source/datasource.component';
8
+ import { AXValidation } from '../validation/validation.component';
9
+ import { AXBaseEvent } from '../base/events.class';
10
+ import { AXSearchBoxComponent } from '../searchbox/searchbox.component';
11
+ import { AXConfig } from '@acorex/core';
12
+ import { differenceBy } from 'lodash';
13
+ import * as i0 from "@angular/core";
14
+ import * as i1 from "../dropdown/dropdown.component";
15
+ import * as i2 from "../textbox/textbox.component";
16
+ import * as i3 from "../searchbox/searchbox.component";
17
+ import * as i4 from "../checkbox/checkbox.component";
18
+ import * as i5 from "@acorex/core";
19
+ import * as i6 from "@angular/common";
20
+ export class AXSelectBoxSelectionChangedEvent extends AXBaseEvent {
21
+ constructor(component, selectedItems, selectedValues) {
22
+ super();
23
+ this.selectedItems = selectedItems;
24
+ this.selectedValues = selectedValues;
25
+ this.component = component;
26
+ }
27
+ }
28
+ export class AXSelectBoxComponent extends AXValidatableComponent {
29
+ constructor(cdr, ref, zone) {
30
+ super();
31
+ this.cdr = cdr;
32
+ this.ref = ref;
33
+ this.zone = zone;
34
+ this.showDropDownButton = true;
35
+ this.showCheckBox = true;
36
+ this.readonly = false;
37
+ this.rtl = AXConfig.get('layout.rtl');
38
+ this.disabled = false;
39
+ this.size = 'md';
40
+ this.allowNull = true;
41
+ this.textAlign = null;
42
+ this.bufferSize = 20;
43
+ this.remoteOperation = false;
44
+ this.fitParent = true;
45
+ this.dropdownWidth = '300px';
46
+ this.dropdownToggle = new EventEmitter();
47
+ // this input is Private and only use in LOV
48
+ this.currentfocusedIndex = -1;
49
+ this.showLoading = false;
50
+ this.skip = -1;
51
+ this.searchText = '';
52
+ // @Input()
53
+ // chipsWidth: string = '';
54
+ this.text = '';
55
+ this.totalCount = 0;
56
+ this.allowSearch = true;
57
+ this.textField = 'text';
58
+ this.valueField = 'value';
59
+ this.disabledField = 'disabled';
60
+ this.mode = 'single';
61
+ this.itemRemove = false;
62
+ this.itemsChange = new EventEmitter();
63
+ this.onBlur = new EventEmitter();
64
+ this.onFocus = new EventEmitter();
65
+ this._items = [];
66
+ this.hasSelectedValue = false;
67
+ this.itemsFiltered = [];
68
+ // #endregion
69
+ this.dropDownDisabled = false;
70
+ this.selectionChanged = new EventEmitter();
71
+ this.selectedItemsChange = new EventEmitter();
72
+ this._selectedItems = [];
73
+ this.delay = 500;
74
+ this.selectedValuesChange = new EventEmitter();
75
+ }
76
+ get dataSource() {
77
+ return this._dataSource ? this._dataSource : this._contentDataSource;
78
+ }
79
+ set dataSource(v) {
80
+ this._dataSource = v;
81
+ }
82
+ get validation() {
83
+ return this._validation ? this._validation : this._contentValidation;
84
+ }
85
+ set validation(v) {
86
+ this._validation = v;
87
+ }
88
+ get items() {
89
+ return this._items;
90
+ }
91
+ set items(v) {
92
+ this._items = v;
93
+ if (this.itemsChange) {
94
+ this.itemsChange.emit(v);
95
+ }
96
+ if (this.itemsStatusObserver) {
97
+ this.itemsStatusObserver.next(this.items.length);
98
+ }
99
+ }
100
+ get selectedItems() {
101
+ return this._selectedItems || [];
102
+ }
103
+ set selectedItems(v) {
104
+ this.setSelectedItemsChange(v);
105
+ // if (!v) {
106
+ // v = [];
107
+ // }
108
+ // const old = this.selectedItems;
109
+ // if (JSON.stringify(old) !== JSON.stringify(v)) {
110
+ // this._selectedItems = this.mode == 'single' ? v.slice(0, 1) : [...new Set(v)]; //[...new Set(v[0])] : [...new Set(v)];
111
+ // this._selectedItems.forEach((c) => (c.selected = true));
112
+ // this.selectedItemsChange.emit(this._selectedItems);
113
+ // this.selectedValuesChange.emit(this.selectedValues);
114
+ // this.clearValidationStyle(this.ref.nativeElement);
115
+ // this.waitForData(() => {
116
+ // if (this._selectedItems) {
117
+ // this.items.forEach((c) => (c.selected = this._selectedItems.some((i) => i[this.valueField] == c[this.valueField])));
118
+ // }
119
+ // });
120
+ // }
121
+ }
122
+ setSelectedItemsChange(v, old = this.selectedItems) {
123
+ if (!v) {
124
+ v = [];
125
+ }
126
+ // const old = this.selectedItems;
127
+ var f = differenceBy(old, v, this.valueField);
128
+ var s = differenceBy(v, old, this.valueField);
129
+ // if (JSON.stringify(old) !== JSON.stringify(v)) {
130
+ if (f.length != 0 || s.length != 0) {
131
+ this._selectedItems = this.mode == 'single' ? v.slice(0, 1) : [...new Set(v)]; //[...new Set(v[0])] : [...new Set(v)];
132
+ this._selectedItems.forEach((c) => (c.selected = true));
133
+ this.selectedItemsChange.emit(this._selectedItems);
134
+ this.selectedValuesChange.emit(this.selectedValues);
135
+ this.clearValidationStyle(this.ref.nativeElement);
136
+ this.waitForData(() => {
137
+ if (this._selectedItems) {
138
+ this.items.forEach((c) => (c.selected = this._selectedItems.some((i) => i[this.valueField] == c[this.valueField])));
139
+ }
140
+ });
141
+ }
142
+ }
143
+ ngOnInit() {
144
+ if (this.rowTemplate === undefined && this.rowInputTemplate != undefined) {
145
+ this.rowTemplate = this.rowInputTemplate;
146
+ }
147
+ if (this.rtl == null) {
148
+ this.rtl = window.getComputedStyle(this.ref.nativeElement, null).getPropertyValue('direction') === 'rtl';
149
+ }
150
+ }
151
+ scrolled(e) {
152
+ if (this.remoteOperation &&
153
+ this.totalCount > this.items.length &&
154
+ this.listContainer.nativeElement.scrollHeight != 0 &&
155
+ this.listContainer.nativeElement.scrollHeight - this.listContainer.nativeElement.scrollTop - 300 < 50) {
156
+ if (this.skip !== this.items.length) {
157
+ this.showLoading = true;
158
+ this.skip = this.items.length;
159
+ const params = {};
160
+ params.skip = this.items.length;
161
+ params.take = this.bufferSize; //* (Math.floor(this.items.length / this.bufferSize) + 1);
162
+ if (this.textbox) {
163
+ params.searchText = this.text;
164
+ }
165
+ else {
166
+ params.searchText = null;
167
+ }
168
+ this.fetch(params);
169
+ }
170
+ }
171
+ }
172
+ setSelectedItems(v, isUserInput) {
173
+ let changed = false;
174
+ if (isUserInput) {
175
+ changed = JSON.stringify(v) !== JSON.stringify(this.selectedItems);
176
+ }
177
+ this.selectedItems = v;
178
+ this.setSelectedIndex();
179
+ if (isUserInput && changed) {
180
+ this.emitSelectionChangedEvent();
181
+ }
182
+ }
183
+ textChanged(e) {
184
+ if ((e.value === null || e.value === undefined || e.value === '') && (e.oldValue === null || e.oldValue === undefined || e.oldValue === '')) {
185
+ }
186
+ else {
187
+ this.currentfocusedIndex = -1;
188
+ if (this.remoteOperation) {
189
+ this.searchText = this.text;
190
+ // this.searchText = e.value;
191
+ // this.text = e.value;
192
+ // this.items = [];
193
+ if (this.items) {
194
+ let t = this.items.length;
195
+ for (let i = 0; i < t; i++) {
196
+ this.items.pop();
197
+ }
198
+ }
199
+ // this.items.forEach((element) => {
200
+ // this.items.pop();
201
+ // });
202
+ const params = {};
203
+ params.searchText = this.text;
204
+ // params.searchText = e.value;
205
+ params.skip = 0;
206
+ params.take = this.bufferSize;
207
+ this.fetch(params);
208
+ }
209
+ }
210
+ }
211
+ isItemDisabled(item) {
212
+ if (item[this.disabledField] == true) {
213
+ return true;
214
+ }
215
+ else if (this.disabledCallback) {
216
+ return this.disabledCallback({ item, index: -1 });
217
+ }
218
+ else {
219
+ return false;
220
+ }
221
+ }
222
+ onButtonClick(e) {
223
+ }
224
+ setSelectedIndex(sign = null) {
225
+ if (sign == null) {
226
+ if (!this.remoteOperation && this.text && this.text !== '') {
227
+ this.currentfocusedIndex = this.items
228
+ .filter((c) => c[this.textField].toLowerCase().includes(this.text.toLowerCase()))
229
+ .indexOf(this.selectedItems[this.selectedItems.length - 1]);
230
+ }
231
+ else {
232
+ this.currentfocusedIndex = this.items.indexOf(this.selectedItems[this.selectedItems.length - 1]);
233
+ }
234
+ }
235
+ else {
236
+ sign === -1 ? this.currentfocusedIndex-- : this.currentfocusedIndex++;
237
+ }
238
+ if (this.remoteOperation) {
239
+ this.itemsFiltered = this.items;
240
+ }
241
+ else {
242
+ this.itemsFiltered = this.text
243
+ ? this.items.filter((c) => c[this.textField].toLowerCase().includes(this.text.toLowerCase()))
244
+ : this.items;
245
+ }
246
+ this.currentfocusedIndex =
247
+ this.currentfocusedIndex < 0
248
+ ? 0
249
+ : this.currentfocusedIndex >= this.itemsFiltered.length
250
+ ? this.itemsFiltered.length - 1
251
+ : this.currentfocusedIndex;
252
+ //
253
+ // set scroll
254
+ if (this.listContainer) {
255
+ this.zone.runOutsideAngular(() => {
256
+ const itemDiv = this.listContainer.nativeElement.querySelector(`.list-item:nth-child(${this.currentfocusedIndex})`);
257
+ if (itemDiv) {
258
+ itemDiv.scrollIntoView({ behavior: 'smooth' });
259
+ }
260
+ });
261
+ }
262
+ }
263
+ get selectedValues() {
264
+ if (this.mode === 'single') {
265
+ return this._selectedItems.map((c) => c[this.valueField])[0];
266
+ }
267
+ else {
268
+ return this._selectedItems.map((c) => c[this.valueField]) || [];
269
+ }
270
+ }
271
+ set selectedValues(v) {
272
+ if (this.compareSelectedValues(v)) {
273
+ return;
274
+ }
275
+ if (v == null) {
276
+ this.selectedItems = [];
277
+ }
278
+ else {
279
+ if (v !== undefined) {
280
+ if (v != [] && v != '' && v != null) {
281
+ this.hasSelectedValue = true;
282
+ }
283
+ this.waitForData(() => {
284
+ if (this.mode === 'single') {
285
+ if (this.items.filter((c) => v == c[this.valueField])) {
286
+ this.selectedItems = this.items.filter((c) => v == c[this.valueField]);
287
+ }
288
+ else {
289
+ this.selectedItems = [];
290
+ }
291
+ }
292
+ else {
293
+ if (Array.isArray(v)) {
294
+ if (this.selectedItems.length > v.length) {
295
+ this.selectedItems = this.selectedItems.filter((c) => v.includes(c[this.valueField]));
296
+ }
297
+ else {
298
+ let addId = [];
299
+ v.forEach((vId) => {
300
+ addId.push({
301
+ [this.valueField]: vId
302
+ });
303
+ });
304
+ let newId = differenceBy(addId, this.selectedItems, this.valueField);
305
+ let vv = [];
306
+ newId.forEach((rc) => {
307
+ vv.push(rc[this.valueField]);
308
+ });
309
+ this.items
310
+ .filter((c) => vv.includes(c[this.valueField]))
311
+ .forEach((res) => {
312
+ this.selectedItems.push(res);
313
+ });
314
+ // this.selectedItems.push(this.items.filter((c) => vv.includes(c[this.valueField])));
315
+ this.setSelectedItemsChange(this.selectedItems, vv.length > 0 ? [1] : this.selectedItems);
316
+ }
317
+ // this.selectedItems = this.items.filter((c) => v.includes(c[this.valueField]));
318
+ }
319
+ else if (v) {
320
+ this.selectedItems = this.items.filter((c) => v === c[this.valueField]);
321
+ }
322
+ else {
323
+ this.selectedItems = [];
324
+ }
325
+ }
326
+ this.selectedValuesChange.emit(this.selectedValues);
327
+ this.cdr.markForCheck();
328
+ this.cdr.detectChanges();
329
+ });
330
+ }
331
+ }
332
+ }
333
+ compareSelectedValues(newValue) {
334
+ const currentValue = this.selectedValues;
335
+ return (currentValue == null && newValue == null) || JSON.stringify(currentValue) === JSON.stringify(newValue);
336
+ }
337
+ setSelectedValues(v, isUserInput) {
338
+ const changed = isUserInput ? !this.compareSelectedValues(v) : false;
339
+ this.selectedValues = v;
340
+ if (isUserInput && changed) {
341
+ this.emitSelectionChangedEvent();
342
+ }
343
+ }
344
+ emitSelectionChangedEvent() {
345
+ this.selectedValuesChange.emit(this.selectedValues);
346
+ this.selectionChanged.emit(new AXSelectBoxSelectionChangedEvent(this, this.selectedItems, this.selectedValues));
347
+ }
348
+ ngAfterViewInit() {
349
+ if (this.bufferSize < 10) {
350
+ this.bufferSize = 10;
351
+ }
352
+ if (this.mode == 'single') {
353
+ this.showCheckBox = false;
354
+ }
355
+ else {
356
+ this.showCheckBox = true;
357
+ }
358
+ if (!this.remoteOperation || (this.remoteOperation && this.hasSelectedValue)) {
359
+ this.refresh();
360
+ }
361
+ }
362
+ dropdownToggleSelecBox(e) {
363
+ this.text = '';
364
+ if (this.dropdown.isOpen) {
365
+ this.refresh();
366
+ setTimeout(() => {
367
+ if (this.serchBox) {
368
+ this.serchBox.focus();
369
+ }
370
+ }, 1);
371
+ }
372
+ else {
373
+ // this.refresh();
374
+ }
375
+ this.dropdownToggle.emit(e);
376
+ }
377
+ ngAfterContentInit() {
378
+ // if (!this.allowSearch) {
379
+ // if (this.readonly == false) {
380
+ // this.itemRemove = true;
381
+ // this.readonly = true;
382
+ // }
383
+ // }
384
+ this.initValidation(this.ref, 'selectedItems', this.validation);
385
+ if (this.dataSource) {
386
+ // if (this.allowSearch == false) {
387
+ // this.fetch();
388
+ // }
389
+ this.dataSource.onDataReceived.subscribe((c) => {
390
+ this.showLoading = false;
391
+ this.dataReceived(c.data.result);
392
+ });
393
+ }
394
+ this.cdr.markForCheck();
395
+ this.cdr.detectChanges();
396
+ }
397
+ dataReceived(data) {
398
+ if (this.remoteOperation) {
399
+ if (this.searchText && this.searchText != null && this.searchText !== '') {
400
+ if (data.totalCount) {
401
+ if (this.items.length == 0) {
402
+ //this.items = data.items;
403
+ data.items.forEach((item) => {
404
+ this.items.push(item);
405
+ });
406
+ }
407
+ else {
408
+ data.items.forEach((item) => {
409
+ this.items.push(item);
410
+ });
411
+ // if (this.itemsStatusObserver) {
412
+ // this.itemsStatusObserver.next(this.items.length);
413
+ // }
414
+ }
415
+ this.totalCount = data.totalCount;
416
+ }
417
+ else {
418
+ if (this.items.length == 0) {
419
+ this.items = data.items;
420
+ }
421
+ else {
422
+ data.items.forEach((item) => {
423
+ this.items.push(item);
424
+ });
425
+ // if (this.itemsStatusObserver) {
426
+ // this.itemsStatusObserver.next(this.items.length);
427
+ // }
428
+ }
429
+ this.totalCount = data.items == undefined ? 0 : data.items.length;
430
+ }
431
+ }
432
+ else if (data.items && data.items.length === data.totalCount) {
433
+ this.items = data.items;
434
+ this.totalCount = data.items.length;
435
+ }
436
+ else if (data.totalCount) {
437
+ data.items.forEach((elm) => {
438
+ this.items.push(elm);
439
+ });
440
+ // if (this.itemsStatusObserver) {
441
+ // this.itemsStatusObserver.next(this.items.length);
442
+ // }
443
+ this.totalCount = data.totalCount;
444
+ }
445
+ else {
446
+ data.forEach((elm) => {
447
+ this.items.push(elm);
448
+ // if (this.itemsStatusObserver) {
449
+ // this.itemsStatusObserver.next(this.items.length);
450
+ // }
451
+ });
452
+ this.totalCount = data.length;
453
+ }
454
+ }
455
+ else {
456
+ this.items = data;
457
+ }
458
+ this.cdr.markForCheck();
459
+ this.cdr.detectChanges();
460
+ this.dropdown.updatePosition();
461
+ }
462
+ // private params: AXDataSourceReadParams = {};
463
+ fetch(params = {}) {
464
+ // this.params = params;
465
+ if (this.dataSource) {
466
+ this.showLoading = true;
467
+ this.dataSource.fetch(params);
468
+ }
469
+ }
470
+ refresh() {
471
+ const params = {};
472
+ if (this.remoteOperation) {
473
+ params.skip = 0;
474
+ this.skip = 0;
475
+ params.take = this.bufferSize;
476
+ }
477
+ if (this.dataSource != undefined) {
478
+ // this.items = [];
479
+ // this.items.forEach((element) => {
480
+ // this.items.pop();
481
+ // });
482
+ if (this.items) {
483
+ let t = this.items.length;
484
+ for (let i = 0; i < t; i++) {
485
+ this.items.pop();
486
+ }
487
+ }
488
+ this.fetch(params);
489
+ }
490
+ }
491
+ handleItemRemoveClick(item) {
492
+ if (this.mode === 'single') {
493
+ // this.selectedItems = null;
494
+ this.setSelectedValues(null, true);
495
+ // this.selectedItemsChange.emit(this._selectedItems);
496
+ // this.clearValidationStyle(this.ref.nativeElement);
497
+ }
498
+ else {
499
+ // this.selectedItems = this.selectedItems.filter((c) => c !== item);
500
+ this.setSelectedItems(this.selectedItems.filter((c) => c[this.valueField] !== item[this.valueField]), true);
501
+ // this._selectedItems = this._selectedItems.filter(c => c !== item);
502
+ // this.selectedItemsChange.emit(this._selectedItems);
503
+ // this.clearValidationStyle(this.ref.nativeElement);
504
+ }
505
+ // this.text = '';
506
+ this.validate();
507
+ this.cdr.markForCheck();
508
+ }
509
+ onFocusTextBox(e) { }
510
+ onTextBoxClick(e) {
511
+ if (this.disabled == false && this.readonly == false) {
512
+ this.dropdown.open();
513
+ }
514
+ }
515
+ handleItemClick(e, item) {
516
+ if (this.isItemDisabled(item) == false) {
517
+ const value = item[this.valueField];
518
+ if (this.mode === 'single') {
519
+ // this.selectedValues = value;
520
+ this.setSelectedValues(value, true);
521
+ }
522
+ else {
523
+ const exists = this.selectedValues.slice(0);
524
+ if (exists.includes(value)) {
525
+ if (this.allowNull == true || (this.allowNull == false && this.selectedItems.length > 1)) {
526
+ this.handleItemRemoveClick(item);
527
+ }
528
+ }
529
+ else {
530
+ exists.push(value);
531
+ // this.selectedValues = exists;
532
+ this.setSelectedValues(exists, true);
533
+ }
534
+ }
535
+ if (this.mode == 'single') {
536
+ this.text = '';
537
+ this.dropdown.close();
538
+ this.cdr.markForCheck();
539
+ }
540
+ // if (e.stopPropagation() == undefined) {
541
+ // e.stopPropagation();
542
+ // }
543
+ setTimeout(() => {
544
+ if (this.serchBox) {
545
+ this.serchBox.focus();
546
+ }
547
+ }, 0);
548
+ }
549
+ e.stopPropagation();
550
+ }
551
+ handleKeyEventSearch(e) {
552
+ if (this.disabled || this.readonly) {
553
+ this.dropdown.close();
554
+ setTimeout(() => {
555
+ this.textBoxSelectBox.focus();
556
+ }, 0);
557
+ return false;
558
+ }
559
+ if (e.key === 'Escape') {
560
+ this.text = null;
561
+ setTimeout(() => {
562
+ this.textBoxSelectBox.focus();
563
+ }, 0);
564
+ }
565
+ if ((e.key === 'ArrowDown' || e.key === 'ArrowUp') && this.getItems().length > 0 && e.type === 'keydown') {
566
+ if (this.mode === 'single') {
567
+ this.currentfocusedIndex = this.currentfocusedIndex + (e.key === 'ArrowDown' ? 1 : -1);
568
+ this.selectedItemByIndex(this.currentfocusedIndex);
569
+ }
570
+ else {
571
+ if (this.dropdown.isOpen) {
572
+ this.setSelectedIndex(e.key === 'ArrowDown' ? 1 : -1);
573
+ }
574
+ else {
575
+ this.dropdown.open();
576
+ setTimeout(() => {
577
+ if (this.serchBox) {
578
+ this.serchBox.focus();
579
+ }
580
+ }, 0);
581
+ }
582
+ }
583
+ }
584
+ // if (e.key == 'Enter' && this.dropdown.isOpen && this.mode == 'single') {
585
+ // this.dropdown.close();
586
+ // setTimeout(() => {
587
+ // this.dropdown.focus();
588
+ // }, 0);
589
+ // }
590
+ //e.stopPropagation();
591
+ //e.preventDefault();
592
+ e.stopImmediatePropagation();
593
+ if (e.type === 'keydown' && e.key == 'Enter' && this.dropdown.isOpen) {
594
+ if (!this.remoteOperation && this.text && this.text !== '') {
595
+ this.itemsFiltered = this.items.filter((c) => c[this.textField].toLowerCase().includes(this.text.toLowerCase()));
596
+ if (this.itemsFiltered.length === 1) {
597
+ this.currentfocusedIndex = 0;
598
+ }
599
+ }
600
+ else {
601
+ this.itemsFiltered = this.items;
602
+ }
603
+ if (this.selectedItems.filter((c) => c[this.valueField] === this.itemsFiltered[this.currentfocusedIndex][this.valueField]).length > 0 &&
604
+ this.mode == 'multiple') {
605
+ if (this.allowNull == true || (this.allowNull == false && this.selectedItems.length > 1)) {
606
+ if (!this.remoteOperation && this.text && this.text !== '') {
607
+ this.selectedItems = this.selectedItems.filter((c) => c !==
608
+ this.items.filter((c) => c[this.textField].toLowerCase().includes(this.text.toLowerCase()))[this.currentfocusedIndex]);
609
+ }
610
+ else {
611
+ this.selectedItems = this.selectedItems.filter((c) => c[this.valueField] !== this.items[this.currentfocusedIndex][this.valueField]);
612
+ }
613
+ this.emitSelectionChangedEvent();
614
+ }
615
+ }
616
+ else {
617
+ if (this.mode == 'multiple') {
618
+ if (this.currentfocusedIndex != -1) {
619
+ if (!this.remoteOperation && this.text && this.text !== '') {
620
+ if (this.itemsFiltered.length === 1) {
621
+ this.selectedItems.push(this.itemsFiltered[0]);
622
+ }
623
+ else {
624
+ this.selectedItems.push(this.itemsFiltered[this.currentfocusedIndex]);
625
+ }
626
+ }
627
+ else {
628
+ this.selectedItems.push(this.items[this.currentfocusedIndex]);
629
+ }
630
+ this.emitSelectionChangedEvent();
631
+ }
632
+ }
633
+ else {
634
+ if (this.text && this.itemsFiltered?.length === 1) {
635
+ this.setSelectedItems(this.itemsFiltered, true);
636
+ }
637
+ if (this.mode == 'single') {
638
+ this.dropdown.close();
639
+ setTimeout(() => {
640
+ this.textBoxSelectBox.focus();
641
+ }, 0);
642
+ }
643
+ }
644
+ }
645
+ e.stopPropagation();
646
+ e.preventDefault();
647
+ e.stopImmediatePropagation();
648
+ }
649
+ this.cdr.markForCheck();
650
+ }
651
+ isChar(str) {
652
+ if (str.includes('Shift') ||
653
+ str.includes('Tab') ||
654
+ str.includes('Control') ||
655
+ str.includes('Alt') ||
656
+ str.includes('CapsLock') ||
657
+ str.includes('Meta') ||
658
+ str.includes('ContextMenu') ||
659
+ str.includes('Enter') ||
660
+ str.includes('Backspace') ||
661
+ str.includes('PrintScreen') ||
662
+ str.includes('ScrollLock') ||
663
+ str.includes('Pause') ||
664
+ str.includes('Home') ||
665
+ str.includes('End') ||
666
+ str.includes('Insert') ||
667
+ str.includes('PageUp') ||
668
+ str.includes('Delete') ||
669
+ str.includes('PageDown') ||
670
+ str.includes('NumLock') ||
671
+ str.includes('Escape') ||
672
+ str.includes('Arrow') ||
673
+ str.includes('ّF1') ||
674
+ str.includes('F2') ||
675
+ str.includes('F3') ||
676
+ str.includes('F4') ||
677
+ str.includes('F5') ||
678
+ str.includes('F6') ||
679
+ str.includes('F7') ||
680
+ str.includes('F8') ||
681
+ str.includes('F9') ||
682
+ str.includes('F10') ||
683
+ str.includes('F11') ||
684
+ str.includes('F12')) {
685
+ return false;
686
+ }
687
+ else {
688
+ return true;
689
+ }
690
+ }
691
+ handleKeyEvent(e) {
692
+ // const NumberMinusPattern = /[a-zA-Z0-9\-]/g;
693
+ // const Farsi = /[پچجحخهعغفقثصضشسیبلاتنمکگوئدذرزطظژؤإأءًٌٍَُِّ\s]+$/;
694
+ // const inputChar = String.fromCharCode(e.charCode);
695
+ // const patternEn = /^[a-zA-Z0-9]*$/;
696
+ // const pattern = /^[\u0600-\u06FF\s]+$/;
697
+ const inputChar = e.key;
698
+ if ((inputChar != 'Backspace' &&
699
+ inputChar != 'Backspace' &&
700
+ inputChar != 'Tab' &&
701
+ inputChar != 'Enter' &&
702
+ inputChar != 'Escape' &&
703
+ inputChar != 'ArrowDown' &&
704
+ inputChar != 'ArrowUp') ||
705
+ e.code === 'Space' ||
706
+ e.ctrlKey == true) {
707
+ e.preventDefault();
708
+ }
709
+ if (e.key === 'Backspace' &&
710
+ e.type === 'keydown' &&
711
+ ((this.allowNull === true && this.selectedItems.length > 0) || (this.allowNull === false && this.selectedItems.length > 1))) {
712
+ this.selectedItems.pop();
713
+ this.emitSelectionChangedEvent();
714
+ }
715
+ if (this.disabled || this.readonly) {
716
+ this.dropdown.close();
717
+ setTimeout(() => {
718
+ this.textBoxSelectBox.focus();
719
+ }, 0);
720
+ return false;
721
+ }
722
+ const INPUT = String.fromCharCode(e.keyCode);
723
+ if (this.isChar(e.key) && this.allowSearch && e.ctrlKey == false) {
724
+ this.dropdown.open();
725
+ setTimeout(() => {
726
+ if (this.serchBox) {
727
+ this.serchBox.focus();
728
+ }
729
+ }, 0);
730
+ this.text = e.key;
731
+ }
732
+ if (e.key === 'Escape') {
733
+ this.text = null;
734
+ this.dropdown.close();
735
+ setTimeout(() => {
736
+ this.textBoxSelectBox.focus();
737
+ }, 0);
738
+ }
739
+ if ((e.key === 'ArrowDown' || e.key === 'ArrowUp') && this.getItems().length > 0 && e.type === 'keydown') {
740
+ if (this.mode === 'single') {
741
+ this.selectedItemByIndex(this.currentfocusedIndex + (e.key === 'ArrowDown' ? 1 : -1));
742
+ }
743
+ else {
744
+ if (this.dropdown.isOpen) {
745
+ // this.setSelectedIndex((e.key === 'ArrowDown' ? 1 : -1));
746
+ if (this.allowSearch == false) {
747
+ this.setSelectedIndex(e.key === 'ArrowDown' ? 1 : -1);
748
+ }
749
+ else {
750
+ setTimeout(() => {
751
+ if (this.serchBox) {
752
+ this.serchBox.focus();
753
+ }
754
+ }, 0);
755
+ }
756
+ }
757
+ else {
758
+ this.dropdown.open();
759
+ if (this.allowSearch == true) {
760
+ setTimeout(() => {
761
+ if (this.serchBox) {
762
+ this.serchBox.focus();
763
+ }
764
+ }, 0);
765
+ }
766
+ }
767
+ }
768
+ }
769
+ if (this.allowSearch === false) {
770
+ if (e.type === 'keydown' && e.key == 'Enter' && this.dropdown.isOpen) {
771
+ e.stopImmediatePropagation();
772
+ if (this.selectedItems.filter((c) => c[this.valueField] === this.itemsFiltered[this.currentfocusedIndex][this.valueField]).length > 0 &&
773
+ this.mode == 'multiple') {
774
+ if (this.allowNull == true || (this.allowNull == false && this.selectedItems.length > 1)) {
775
+ if (!this.remoteOperation && this.text && this.text !== '') {
776
+ this.selectedItems = this.selectedItems.filter((c) => c !==
777
+ this.items.filter((c) => c[this.textField].toLowerCase().includes(this.text.toLowerCase()))[this.currentfocusedIndex]);
778
+ }
779
+ else {
780
+ this.selectedItems = this.selectedItems.filter((c) => c[this.valueField] !== this.items[this.currentfocusedIndex][this.valueField]);
781
+ }
782
+ this.emitSelectionChangedEvent();
783
+ }
784
+ }
785
+ else {
786
+ if (this.mode == 'multiple') {
787
+ if (this.currentfocusedIndex != -1) {
788
+ if (!this.remoteOperation && this.text && this.text !== '') {
789
+ if (this.itemsFiltered.length === 1) {
790
+ this.selectedItems.push(this.itemsFiltered[0]);
791
+ }
792
+ else {
793
+ this.selectedItems.push(this.itemsFiltered[this.currentfocusedIndex]);
794
+ }
795
+ }
796
+ else {
797
+ this.selectedItems.push(this.items[this.currentfocusedIndex]);
798
+ }
799
+ this.emitSelectionChangedEvent();
800
+ }
801
+ }
802
+ else {
803
+ if (this.text && this.itemsFiltered.length === 1) {
804
+ this.setSelectedItems(this.itemsFiltered, true);
805
+ }
806
+ if (this.mode == 'single') {
807
+ this.dropdown.close();
808
+ setTimeout(() => {
809
+ this.textBoxSelectBox.focus();
810
+ }, 0);
811
+ }
812
+ }
813
+ }
814
+ }
815
+ }
816
+ this.cdr.markForCheck();
817
+ }
818
+ focus() {
819
+ this.textbox.focus();
820
+ }
821
+ selectedItemByIndex(index) {
822
+ let item = [];
823
+ if (!this.remoteOperation && this.text && this.text !== '') {
824
+ this.itemsFiltered = this.items.filter((c) => c[this.textField].toLowerCase().includes(this.text.toLowerCase()));
825
+ item = this.itemsFiltered[index];
826
+ }
827
+ else {
828
+ item = this.items[index];
829
+ }
830
+ //
831
+ // const item = this.text ? this.items.filter((c) => (c[this.textField] as string).toLowerCase().includes(this.text.toLowerCase()))[index] : this.items[index];
832
+ if (item) {
833
+ this.setSelectedItems([item], true);
834
+ }
835
+ this.setSelectedIndex();
836
+ }
837
+ getItems() {
838
+ if (this.items == null) {
839
+ return [];
840
+ }
841
+ return !this.remoteOperation && this.text && this.text !== ''
842
+ ? this.items.filter((c) => c[this.textField].toLowerCase().includes(this.text.toLowerCase()))
843
+ : this.items;
844
+ }
845
+ isItemSelected(item) {
846
+ return this.selectedItems && this.selectedItems.filter((c) => c[this.valueField] === item[this.valueField]).length > 0;
847
+ }
848
+ waitForData(callbackfn) {
849
+ if (this.items && this.items.length) {
850
+ callbackfn();
851
+ }
852
+ else if (!this.itemsStatusObserver) {
853
+ Observable.create((observer) => {
854
+ this.itemsStatusObserver = observer;
855
+ })
856
+ .pipe(debounceTime(100))
857
+ .pipe(distinctUntilChanged())
858
+ .subscribe((c) => {
859
+ callbackfn();
860
+ });
861
+ }
862
+ }
863
+ }
864
+ AXSelectBoxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AXSelectBoxComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
865
+ AXSelectBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", 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", 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: [{ provide: AXValidatableComponent, useExisting: AXSelectBoxComponent }], 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 #d [size]=\"size\" [fitParent]=\"fitParent\" [dropdownWidth]=\"dropdownWidth\" [rtl]=\"rtl\"\r\n [showDropDownButton]=\"showDropDownButton\" [disabled]=\"disabled\" [readonly]=\"readonly\"\r\n (dropdownToggle)=\"dropdownToggleSelecBox($event)\">\r\n <ng-container start>\r\n <ng-content select=\"[start]\">\r\n </ng-content>\r\n </ng-container>\r\n <ng-container header>\r\n <div class=\"ax chips-container\" [horizontalScroll]=\"40\">\r\n <div class=\"chips\" [class.chips-blank]=\"mode === 'single'\" [title]=\"item[textField]\"\r\n *ngFor=\"let item of selectedItems\">\r\n <span class=\"chips-text\"\r\n [ngStyle]=\"{'width': item[textField].length > 15 && this.mode ==='multiple' ? '110px' : 'auto'}\">\r\n {{ item[textField] }}\r\n </span>\r\n <span class=\"close-icon\" (click)=\"handleItemRemoveClick(item)\"\r\n *ngIf=\"(readonly!=true || itemRemove ==true)&& disabled!=true && (allowNull==true || (selectedItems.length > 1))\">\r\n <i class=\"far fa-times close\"></i>\r\n </span>\r\n </div>\r\n <div class=\"search-wrapper\" (click)=\"onTextBoxClick($event)\">\r\n <ax-text-box #textBoxSelectBox [textAlign]=\"textAlign\"\r\n [placeholder]=\"selectedItems.length == 0 ? placeholder : ''\" [readonly]=\"readonly\"\r\n [disabled]=\"disabled\" (onkey)=\"handleKeyEvent($event)\" [size]=\"size\"\r\n (onFocus)=\"onFocusTextBox($event)\">\r\n </ax-text-box>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container end>\r\n <ng-content select=\"[end]\">\r\n </ng-content>\r\n </ng-container>\r\n\r\n <ng-container panel>\r\n <div *ngIf=\"allowSearch\" class=\"search-wrapper\" style=\"padding: 0.7em;\">\r\n <ax-search-box #serchBox [(value)]=\"text\" (onkey)=\"handleKeyEventSearch($event)\"\r\n (textChanged)=\"textChanged($event)\" (onButtonClick)=\"textChanged($event)\">\r\n </ax-search-box>\r\n </div>\r\n <div class=\"ax list-container\">\r\n <div #listContainer class=\"list-container-items\" (scroll)=\"scrolled($event)\">\r\n <ng-container *ngIf=\"getItems().length>0; then thenTemplate; else elseTemplate\"></ng-container>\r\n <ng-template #thenTemplate>\r\n <div [class.ax-state-disabled]=\"isItemDisabled(item)\" class=\"list-item\"\r\n *ngFor=\"let item of getItems();let i = index\" [class.focused]=\"i==currentfocusedIndex\"\r\n [class.selected]=\"isItemSelected(item)\" (click)=\"handleItemClick($event,item)\">\r\n <div style=\"display: flex;\">\r\n <ax-check-box *ngIf=\"showCheckBox\" [size]=\"size\" [value]=\"isItemSelected(item)\"\r\n [disabled]=\"(!allowNull && selectedItems.length === 1 && isItemSelected(item)) || isItemDisabled(item)\"\r\n (onClick)=\"handleItemClick($event,item)\">\r\n </ax-check-box>\r\n <ng-container *ngIf=\"rowTemplate; else elseTemplate\">\r\n <div style=\"white-space: nowrap;text-overflow: ellipsis;overflow: hidden;flex: 1;\"\r\n [title]=\"item[textField]\"\r\n [ngStyle]=\"(showCheckBox) ? {'padding-inline-start': '0.5rem'}:''\">\r\n <ng-container *ngTemplateOutlet=\"rowTemplate; context:{ $implicit: item }\">\r\n </ng-container>\r\n </div>\r\n\r\n </ng-container>\r\n <ng-template #elseTemplate>\r\n <div style=\"white-space: nowrap;text-overflow: ellipsis;overflow: hidden;flex: 1;\"\r\n [title]=\"item[textField]\"\r\n [ngStyle]=\"(showCheckBox) ? {'padding-inline-start': '0.5rem'}:''\">\r\n {{ item[textField] }}\r\n </div>\r\n </ng-template>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n </ng-template>\r\n <div *ngIf=\"showLoading\" class=\"ax-pad-sm\" style=\"text-align: center;\">\r\n <i class=\"far fa-spinner-third fa-pulse fa-2x\" style=\"color: var(--ax-primary-color);\"></i>\r\n\r\n </div>\r\n <!-- <ax-loading-indicator ></ax-loading-indicator> -->\r\n <ng-template #elseTemplate>\r\n <ng-container *ngIf=\"showLoading == true; then searchTemplate else noDataTemplate\"></ng-container>\r\n <ng-template #searchTemplate>\r\n <div class=\"list-item\">\r\n {{'common.search' | trans}}\r\n </div>\r\n </ng-template>\r\n <ng-template #noDataTemplate>\r\n <div class=\"list-item\">\r\n {{'common.noDataFound' | trans}}\r\n </div>\r\n </ng-template>\r\n\r\n </ng-template>\r\n\r\n </div>\r\n\r\n </div>\r\n </ng-container>\r\n\r\n</ax-drop-down>", components: [{ type: i1.AXDropdownComponent, selector: "ax-drop-down", inputs: ["rtl", "readonly", "loading", "dropdownWidth"], outputs: ["dropdownToggle", "onButtonClick"] }, { type: i2.AXTextBoxComponent, selector: "ax-text-box", inputs: ["mask", "type", "showMask", "maxLength", "maskGuid", "maskPlaceholder", "maskKeepCharPositions"] }, { type: i3.AXSearchBoxComponent, selector: "ax-search-box", inputs: ["placeholder", "text", "delay"], outputs: ["textChanged", "onButtonClick"] }, { type: i4.AXCheckBoxComponent, selector: "ax-check-box", inputs: ["readonly", "disabled", "size", "label", "tabIndex", "indeterminate", "value"], outputs: ["onValueChanged", "valueChange", "onClick"] }], directives: [{ type: i5.AXHorizontalScrollDirective, selector: "[horizontalScroll]", inputs: ["horizontalScroll"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "trans": i5.AXTranslatorPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
866
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AXSelectBoxComponent, decorators: [{
867
+ type: Component,
868
+ args: [{ selector: 'ax-select-box', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: { style: 'width: 100%' }, providers: [{ provide: AXValidatableComponent, useExisting: AXSelectBoxComponent }], template: "<ax-drop-down #d [size]=\"size\" [fitParent]=\"fitParent\" [dropdownWidth]=\"dropdownWidth\" [rtl]=\"rtl\"\r\n [showDropDownButton]=\"showDropDownButton\" [disabled]=\"disabled\" [readonly]=\"readonly\"\r\n (dropdownToggle)=\"dropdownToggleSelecBox($event)\">\r\n <ng-container start>\r\n <ng-content select=\"[start]\">\r\n </ng-content>\r\n </ng-container>\r\n <ng-container header>\r\n <div class=\"ax chips-container\" [horizontalScroll]=\"40\">\r\n <div class=\"chips\" [class.chips-blank]=\"mode === 'single'\" [title]=\"item[textField]\"\r\n *ngFor=\"let item of selectedItems\">\r\n <span class=\"chips-text\"\r\n [ngStyle]=\"{'width': item[textField].length > 15 && this.mode ==='multiple' ? '110px' : 'auto'}\">\r\n {{ item[textField] }}\r\n </span>\r\n <span class=\"close-icon\" (click)=\"handleItemRemoveClick(item)\"\r\n *ngIf=\"(readonly!=true || itemRemove ==true)&& disabled!=true && (allowNull==true || (selectedItems.length > 1))\">\r\n <i class=\"far fa-times close\"></i>\r\n </span>\r\n </div>\r\n <div class=\"search-wrapper\" (click)=\"onTextBoxClick($event)\">\r\n <ax-text-box #textBoxSelectBox [textAlign]=\"textAlign\"\r\n [placeholder]=\"selectedItems.length == 0 ? placeholder : ''\" [readonly]=\"readonly\"\r\n [disabled]=\"disabled\" (onkey)=\"handleKeyEvent($event)\" [size]=\"size\"\r\n (onFocus)=\"onFocusTextBox($event)\">\r\n </ax-text-box>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container end>\r\n <ng-content select=\"[end]\">\r\n </ng-content>\r\n </ng-container>\r\n\r\n <ng-container panel>\r\n <div *ngIf=\"allowSearch\" class=\"search-wrapper\" style=\"padding: 0.7em;\">\r\n <ax-search-box #serchBox [(value)]=\"text\" (onkey)=\"handleKeyEventSearch($event)\"\r\n (textChanged)=\"textChanged($event)\" (onButtonClick)=\"textChanged($event)\">\r\n </ax-search-box>\r\n </div>\r\n <div class=\"ax list-container\">\r\n <div #listContainer class=\"list-container-items\" (scroll)=\"scrolled($event)\">\r\n <ng-container *ngIf=\"getItems().length>0; then thenTemplate; else elseTemplate\"></ng-container>\r\n <ng-template #thenTemplate>\r\n <div [class.ax-state-disabled]=\"isItemDisabled(item)\" class=\"list-item\"\r\n *ngFor=\"let item of getItems();let i = index\" [class.focused]=\"i==currentfocusedIndex\"\r\n [class.selected]=\"isItemSelected(item)\" (click)=\"handleItemClick($event,item)\">\r\n <div style=\"display: flex;\">\r\n <ax-check-box *ngIf=\"showCheckBox\" [size]=\"size\" [value]=\"isItemSelected(item)\"\r\n [disabled]=\"(!allowNull && selectedItems.length === 1 && isItemSelected(item)) || isItemDisabled(item)\"\r\n (onClick)=\"handleItemClick($event,item)\">\r\n </ax-check-box>\r\n <ng-container *ngIf=\"rowTemplate; else elseTemplate\">\r\n <div style=\"white-space: nowrap;text-overflow: ellipsis;overflow: hidden;flex: 1;\"\r\n [title]=\"item[textField]\"\r\n [ngStyle]=\"(showCheckBox) ? {'padding-inline-start': '0.5rem'}:''\">\r\n <ng-container *ngTemplateOutlet=\"rowTemplate; context:{ $implicit: item }\">\r\n </ng-container>\r\n </div>\r\n\r\n </ng-container>\r\n <ng-template #elseTemplate>\r\n <div style=\"white-space: nowrap;text-overflow: ellipsis;overflow: hidden;flex: 1;\"\r\n [title]=\"item[textField]\"\r\n [ngStyle]=\"(showCheckBox) ? {'padding-inline-start': '0.5rem'}:''\">\r\n {{ item[textField] }}\r\n </div>\r\n </ng-template>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n </ng-template>\r\n <div *ngIf=\"showLoading\" class=\"ax-pad-sm\" style=\"text-align: center;\">\r\n <i class=\"far fa-spinner-third fa-pulse fa-2x\" style=\"color: var(--ax-primary-color);\"></i>\r\n\r\n </div>\r\n <!-- <ax-loading-indicator ></ax-loading-indicator> -->\r\n <ng-template #elseTemplate>\r\n <ng-container *ngIf=\"showLoading == true; then searchTemplate else noDataTemplate\"></ng-container>\r\n <ng-template #searchTemplate>\r\n <div class=\"list-item\">\r\n {{'common.search' | trans}}\r\n </div>\r\n </ng-template>\r\n <ng-template #noDataTemplate>\r\n <div class=\"list-item\">\r\n {{'common.noDataFound' | trans}}\r\n </div>\r\n </ng-template>\r\n\r\n </ng-template>\r\n\r\n </div>\r\n\r\n </div>\r\n </ng-container>\r\n\r\n</ax-drop-down>" }]
869
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { showDropDownButton: [{
870
+ type: Input
871
+ }], rowTemplate: [{
872
+ type: ContentChild,
873
+ args: [TemplateRef, { static: true }]
874
+ }], rowInputTemplate: [{
875
+ type: Input
876
+ }], span: [{
877
+ type: ViewChild,
878
+ args: [AXTextBoxComponent, { static: true }]
879
+ }], textbox: [{
880
+ type: ViewChild,
881
+ args: [AXTextBoxComponent, { static: true }]
882
+ }], listContainer: [{
883
+ type: ViewChild,
884
+ args: ['listContainer', { static: true }]
885
+ }], serchBox: [{
886
+ type: ViewChild,
887
+ args: ['serchBox', { static: false }]
888
+ }], textBoxSelectBox: [{
889
+ type: ViewChild,
890
+ args: ['textBoxSelectBox', { static: true }]
891
+ }], showCheckBox: [{
892
+ type: Input
893
+ }], readonly: [{
894
+ type: Input
895
+ }], rtl: [{
896
+ type: Input
897
+ }], disabled: [{
898
+ type: Input
899
+ }], placeholder: [{
900
+ type: Input
901
+ }], size: [{
902
+ type: Input
903
+ }], allowNull: [{
904
+ type: Input
905
+ }], textAlign: [{
906
+ type: Input
907
+ }], bufferSize: [{
908
+ type: Input
909
+ }], remoteOperation: [{
910
+ type: Input
911
+ }], fitParent: [{
912
+ type: Input
913
+ }], dropdownWidth: [{
914
+ type: Input
915
+ }], dropdownToggle: [{
916
+ type: Output
917
+ }], _contentDataSource: [{
918
+ type: ContentChild,
919
+ args: [AXDataSourceComponent, { static: true }]
920
+ }], dataSource: [{
921
+ type: Input
922
+ }], _contentValidation: [{
923
+ type: ContentChild,
924
+ args: [AXValidation, { static: true }]
925
+ }], validation: [{
926
+ type: Input
927
+ }], dropdown: [{
928
+ type: ViewChild,
929
+ args: ['d', { static: true }]
930
+ }], disabledCallback: [{
931
+ type: Input
932
+ }], allowSearch: [{
933
+ type: Input
934
+ }], textField: [{
935
+ type: Input
936
+ }], valueField: [{
937
+ type: Input
938
+ }], disabledField: [{
939
+ type: Input
940
+ }], mode: [{
941
+ type: Input
942
+ }], itemsChange: [{
943
+ type: Output
944
+ }], onBlur: [{
945
+ type: Output
946
+ }], onFocus: [{
947
+ type: Output
948
+ }], items: [{
949
+ type: Input
950
+ }], selectionChanged: [{
951
+ type: Output
952
+ }], selectedItemsChange: [{
953
+ type: Output
954
+ }], selectedItems: [{
955
+ type: Input
956
+ }], selectedValuesChange: [{
957
+ type: Output
958
+ }], selectedValues: [{
959
+ type: Input
960
+ }] } });
961
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0Ym94LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fjb3JleC9jb21wb25lbnRzL3NyYy9saWIvc2VsZWN0Ym94L3NlbGVjdGJveC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hY29yZXgvY29tcG9uZW50cy9zcmMvbGliL3NlbGVjdGJveC9zZWxlY3Rib3guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsdUJBQXVCLEVBQ3ZCLEtBQUssRUFDTCxZQUFZLEVBQ1osTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBR04sV0FBVyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEMsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3JFLE9BQU8sRUFBK0Qsc0JBQXNCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM1SCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFbEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFFBQVEsQ0FBQzs7Ozs7Ozs7QUFDdEMsTUFBTSxPQUFPLGdDQUFpQyxTQUFRLFdBQVc7SUFDL0QsWUFBWSxTQUFjLEVBQVMsYUFBb0IsRUFBUyxjQUEyQjtRQUN6RixLQUFLLEVBQUUsQ0FBQztRQUR5QixrQkFBYSxHQUFiLGFBQWEsQ0FBTztRQUFTLG1CQUFjLEdBQWQsY0FBYyxDQUFhO1FBRXpGLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0lBQzdCLENBQUM7Q0FDRjtBQVVELE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxzQkFBc0I7SUEwRjlELFlBQW9CLEdBQXNCLEVBQVUsR0FBZSxFQUFVLElBQVk7UUFDdkYsS0FBSyxFQUFFLENBQUM7UUFEVSxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUFVLFFBQUcsR0FBSCxHQUFHLENBQVk7UUFBVSxTQUFJLEdBQUosSUFBSSxDQUFRO1FBekZoRix1QkFBa0IsR0FBWSxJQUFJLENBQUM7UUFzQm5DLGlCQUFZLEdBQVksSUFBSSxDQUFDO1FBRTdCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFFMUIsUUFBRyxHQUFZLFFBQVEsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFMUMsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUkxQixTQUFJLEdBQWtCLElBQUksQ0FBQztRQUUzQixjQUFTLEdBQVksSUFBSSxDQUFDO1FBRTFCLGNBQVMsR0FBNEIsSUFBSSxDQUFDO1FBRTFDLGVBQVUsR0FBVyxFQUFFLENBQUM7UUFFeEIsb0JBQWUsR0FBWSxLQUFLLENBQUM7UUFFakMsY0FBUyxHQUFZLElBQUksQ0FBQztRQUUxQixrQkFBYSxHQUFXLE9BQU8sQ0FBQTtRQUd4QyxtQkFBYyxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBQzVELDRDQUE0QztRQUU1Qyx3QkFBbUIsR0FBVyxDQUFDLENBQUMsQ0FBQztRQUNqQyxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUU3QixTQUFJLEdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDbEIsZUFBVSxHQUFXLEVBQUUsQ0FBQztRQUN4QixXQUFXO1FBQ1gsMkJBQTJCO1FBRTNCLFNBQUksR0FBVyxFQUFFLENBQUM7UUFDbEIsZUFBVSxHQUFXLENBQUMsQ0FBQztRQXVDZCxnQkFBVyxHQUFZLElBQUksQ0FBQztRQUM1QixjQUFTLEdBQVcsTUFBTSxDQUFDO1FBQzNCLGVBQVUsR0FBVyxPQUFPLENBQUM7UUFDN0Isa0JBQWEsR0FBVyxVQUFVLENBQUM7UUFDbkMsU0FBSSxHQUEwQixRQUFRLENBQUM7UUFDaEQsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUNsQixnQkFBVyxHQUF3QixJQUFJLFlBQVksRUFBUyxDQUFDO1FBRTdELFdBQU0sR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUVwRCxZQUFPLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFFdkQsV0FBTSxHQUFVLEVBQUUsQ0FBQztRQWUzQixxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFDbEMsa0JBQWEsR0FBVSxFQUFFLENBQUM7UUFFMUIsYUFBYTtRQUViLHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUdsQyxxQkFBZ0IsR0FBbUQsSUFBSSxZQUFZLEVBQW9DLENBQUM7UUFHeEgsd0JBQW1CLEdBQXdCLElBQUksWUFBWSxFQUFTLENBQUM7UUFFN0QsbUJBQWMsR0FBVSxFQUFFLENBQUM7UUE2Rm5DLFVBQUssR0FBVyxHQUFHLENBQUM7UUFvRnBCLHlCQUFvQixHQUE4QixJQUFJLFlBQVksRUFBZSxDQUFDO0lBaE9sRixDQUFDO0lBekJELElBQ1csVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUN2RSxDQUFDO0lBRUQsSUFBVyxVQUFVLENBQUMsQ0FBd0I7UUFDNUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQU9ELElBQ1csVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUN2RSxDQUFDO0lBRUQsSUFBVyxVQUFVLENBQUMsQ0FBZTtRQUNuQyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBd0JELElBQ1csS0FBSztRQUNkLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBQ0QsSUFBVyxLQUFLLENBQUMsQ0FBUTtRQUN2QixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNoQixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDcEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDMUI7UUFDRCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtZQUM1QixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDbEQ7SUFDSCxDQUFDO0lBZ0JELElBQ1csYUFBYTtRQUN0QixPQUFPLElBQUksQ0FBQyxjQUFjLElBQUksRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFDRCxJQUFXLGFBQWEsQ0FBQyxDQUFRO1FBQy9CLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQixZQUFZO1FBQ1osWUFBWTtRQUNaLElBQUk7UUFFSixrQ0FBa0M7UUFDbEMsbURBQW1EO1FBQ25ELDJIQUEySDtRQUMzSCw2REFBNkQ7UUFDN0Qsd0RBQXdEO1FBQ3hELHlEQUF5RDtRQUN6RCx1REFBdUQ7UUFDdkQsNkJBQTZCO1FBQzdCLGlDQUFpQztRQUNqQyw2SEFBNkg7UUFDN0gsUUFBUTtRQUNSLFFBQVE7UUFDUixJQUFJO0lBQ04sQ0FBQztJQUVELHNCQUFzQixDQUFDLENBQVEsRUFBRSxNQUFhLElBQUksQ0FBQyxhQUFhO1FBQzlELElBQUksQ0FBQyxDQUFDLEVBQUU7WUFDTixDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQ1I7UUFDRCxrQ0FBa0M7UUFDbEMsSUFBSSxDQUFDLEdBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5QyxtREFBbUQ7UUFDbkQsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtZQUNsQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyx1Q0FBdUM7WUFDdEgsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3hELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ25ELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ3BELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ2xELElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFO2dCQUNwQixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7b0JBQ3ZCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDckg7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxTQUFTLEVBQUU7WUFDeEUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7U0FDMUM7UUFDRCxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxLQUFLLEtBQUssQ0FBQztTQUMxRztJQUNILENBQUM7SUFFRCxRQUFRLENBQUMsQ0FBQztRQUNSLElBQ0UsSUFBSSxDQUFDLGVBQWU7WUFDcEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU07WUFDbkMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsWUFBWSxJQUFJLENBQUM7WUFDbEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUNyRztZQUNBLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRTtnQkFDbkMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7Z0JBQzlCLE1BQU0sTUFBTSxHQUEyQixFQUFFLENBQUM7Z0JBQzFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7Z0JBQ2hDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLDBEQUEwRDtnQkFDekYsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO29CQUNoQixNQUFNLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7aUJBQy9CO3FCQUFNO29CQUNMLE1BQU0sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO2lCQUMxQjtnQkFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3BCO1NBQ0Y7SUFDSCxDQUFDO0lBQ08sZ0JBQWdCLENBQUMsQ0FBUSxFQUFFLFdBQW9CO1FBQ3JELElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLFdBQVcsRUFBRTtZQUNmLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQ3BFO1FBQ0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDeEIsSUFBSSxXQUFXLElBQUksT0FBTyxFQUFFO1lBQzFCLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1NBQ2xDO0lBQ0gsQ0FBQztJQU1ELFdBQVcsQ0FBQyxDQUFDO1FBQ1gsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssU0FBUyxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsUUFBUSxLQUFLLFNBQVMsSUFBSSxDQUFDLENBQUMsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFO1NBQzVJO2FBQU07WUFDTCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDOUIsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO2dCQUN4QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7Z0JBQzVCLDhCQUE4QjtnQkFDOUIsdUJBQXVCO2dCQUN2QixtQkFBbUI7Z0JBQ25CLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtvQkFDZCxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztvQkFDMUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTt3QkFDMUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztxQkFDbEI7aUJBQ0Y7Z0JBRUQsb0NBQW9DO2dCQUNwQyxzQkFBc0I7Z0JBQ3RCLE1BQU07Z0JBQ04sTUFBTSxNQUFNLEdBQTJCLEVBQUUsQ0FBQztnQkFDMUMsTUFBTSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUM5QiwrQkFBK0I7Z0JBQy9CLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO2dCQUNoQixNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDcEI7U0FDRjtJQUNILENBQUM7SUFFRCxjQUFjLENBQUMsSUFBUztRQUN0QixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksSUFBSSxFQUFFO1lBQ3BDLE9BQU8sSUFBSSxDQUFDO1NBQ2I7YUFBTSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUNoQyxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ25EO2FBQU07WUFDTCxPQUFPLEtBQUssQ0FBQztTQUNkO0lBQ0gsQ0FBQztJQUVELGFBQWEsQ0FBQyxDQUFDO0lBQ2YsQ0FBQztJQUVPLGdCQUFnQixDQUFDLE9BQXNCLElBQUk7UUFDakQsSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFO1lBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxFQUFFLEVBQUU7Z0JBQzFELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsS0FBSztxQkFDbEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBWSxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7cUJBQzVGLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDL0Q7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNsRztTQUNGO2FBQU07WUFDTCxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztTQUN2RTtRQUVELElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN4QixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7U0FDakM7YUFBTTtZQUNMLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUk7Z0JBQzVCLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO2dCQUN6RyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztTQUNoQjtRQUVELElBQUksQ0FBQyxtQkFBbUI7WUFDdEIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLENBQUM7Z0JBQzFCLENBQUMsQ0FBQyxDQUFDO2dCQUNILENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNO29CQUNyRCxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQztvQkFDL0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztRQUNqQyxFQUFFO1FBQ0YsYUFBYTtRQUNiLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRTtnQkFDL0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLHdCQUF3QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO2dCQUNwSCxJQUFJLE9BQU8sRUFBRTtvQkFDWCxPQUFPLENBQUMsY0FBYyxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7aUJBQ2hEO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFLRCxJQUNXLGNBQWM7UUFDdkIsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTtZQUMxQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDOUQ7YUFBTTtZQUNMLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDakU7SUFDSCxDQUFDO0lBRUQsSUFBVyxjQUFjLENBQUMsQ0FBYztRQUN0QyxJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNqQyxPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUU7WUFDYixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztTQUN6QjthQUFNO1lBQ0wsSUFBSSxDQUFDLEtBQUssU0FBUyxFQUFFO2dCQUNuQixJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFO29CQUNuQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO2lCQUM5QjtnQkFFRCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRTtvQkFDcEIsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTt3QkFDMUIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRTs0QkFDckQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQzt5QkFDeEU7NkJBQU07NEJBQ0wsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7eUJBQ3pCO3FCQUNGO3lCQUFNO3dCQUNMLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTs0QkFDcEIsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFO2dDQUN4QyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDOzZCQUN2RjtpQ0FBTTtnQ0FDTCxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7Z0NBQ2YsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO29DQUNoQixLQUFLLENBQUMsSUFBSSxDQUFDO3dDQUNULENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEdBQUc7cUNBQ3ZCLENBQUMsQ0FBQztnQ0FDTCxDQUFDLENBQUMsQ0FBQztnQ0FFSCxJQUFJLEtBQUssR0FBRyxZQUFZLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dDQUNyRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7Z0NBQ1osS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFO29DQUNuQixFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztnQ0FDL0IsQ0FBQyxDQUFDLENBQUM7Z0NBQ0gsSUFBSSxDQUFDLEtBQUs7cUNBQ1AsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztxQ0FDOUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7b0NBQ2YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0NBQy9CLENBQUMsQ0FBQyxDQUFDO2dDQUNMLHVGQUF1RjtnQ0FDdkYsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzs2QkFDM0Y7NEJBRUQsa0ZBQWtGO3lCQUNuRjs2QkFBTSxJQUFJLENBQUMsRUFBRTs0QkFDWixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO3lCQUN6RTs2QkFBTTs0QkFDTCxJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQzt5QkFDekI7cUJBQ0Y7b0JBQ0QsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7b0JBQ3BELElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7b0JBQ3hCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQzNCLENBQUMsQ0FBQyxDQUFDO2FBQ0o7U0FDRjtJQUNILENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxRQUFxQjtRQUNqRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQ3pDLE9BQU8sQ0FBQyxZQUFZLElBQUksSUFBSSxJQUFJLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDakgsQ0FBQztJQUVPLGlCQUFpQixDQUFDLENBQWMsRUFBRSxXQUFvQjtRQUM1RCxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDckUsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7UUFDeEIsSUFBSSxXQUFXLElBQUksT0FBTyxFQUFFO1lBQzFCLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1NBQ2xDO0lBQ0gsQ0FBQztJQUVPLHlCQUF5QjtRQUMvQixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksZ0NBQWdDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7SUFDbEgsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1NBQ3RCO1FBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLFFBQVEsRUFBRTtZQUN6QixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztTQUMzQjthQUFNO1lBQ0wsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7U0FDMUI7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUU7WUFDNUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ2hCO0lBQ0gsQ0FBQztJQUNELHNCQUFzQixDQUFDLENBQUM7UUFDdEIsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7UUFDZixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNmLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO29CQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO2lCQUN2QjtZQUNILENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNQO2FBQU07WUFDTCxtQkFBbUI7U0FDcEI7UUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLDJCQUEyQjtRQUMzQixvQ0FBb0M7UUFDcEMsa0NBQWtDO1FBQ2xDLGdDQUFnQztRQUNoQyxRQUFRO1FBQ1IsSUFBSTtRQUNKLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxlQUFlLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2hFLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNuQixtQ0FBbUM7WUFDbkMsa0JBQWtCO1lBQ2xCLElBQUk7WUFDSixJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDN0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNuQyxDQUFDLENBQUMsQ0FBQztTQUNKO1FBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFTyxZQUFZLENBQUMsSUFBUztRQUM1QixJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDeEIsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssRUFBRSxFQUFFO2dCQUN4RSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7b0JBQ25CLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO3dCQUMxQiwwQkFBMEI7d0JBQzFCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7NEJBQzFCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUN4QixDQUFDLENBQUMsQ0FBQztxQkFDSjt5QkFBTTt3QkFDTCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFOzRCQUMxQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDeEIsQ0FBQyxDQUFDLENBQUM7d0JBQ0gsa0NBQWtDO3dCQUNsQyxzREFBc0Q7d0JBQ3RELElBQUk7cUJBQ0w7b0JBRUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO2lCQUNuQztxQkFBTTtvQkFDTCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTt3QkFDMUIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO3FCQUN6Qjt5QkFBTTt3QkFDTCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFOzRCQUMxQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDeEIsQ0FBQyxDQUFDLENBQUM7d0JBQ0gsa0NBQWtDO3dCQUNsQyxzREFBc0Q7d0JBQ3RELElBQUk7cUJBQ0w7b0JBQ0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztpQkFDbkU7YUFDRjtpQkFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDOUQsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2dCQUN4QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO2FBQ3JDO2lCQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDMUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3ZCLENBQUMsQ0FBQyxDQUFDO2dCQUNILGtDQUFrQztnQkFDbEMsc0RBQXNEO2dCQUN0RCxJQUFJO2dCQUNKLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQzthQUNuQztpQkFBTTtnQkFDTCxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7b0JBQ25CLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNyQixrQ0FBa0M7b0JBQ2xDLHNEQUFzRDtvQkFDdEQsSUFBSTtnQkFDTixDQUFDLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7YUFDL0I7U0FDRjthQUFNO1lBQ0wsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7U0FDbkI7UUFFRCxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsK0NBQStDO0lBRS9DLEtBQUssQ0FBQyxTQUFpQyxFQUFFO1FBQ3ZDLHlCQUF5QjtRQUN6QixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFDeEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDL0I7SUFDSCxDQUFDO0lBRUQsT0FBTztRQUNMLE1BQU0sTUFBTSxHQUEyQixFQUFFLENBQUM7UUFDMUMsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3hCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1lBQ2hCLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1lBQ2QsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1NBQy9CO1FBQ0QsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLFNBQVMsRUFBRTtZQUNoQyxtQkFBbUI7WUFDbkIsb0NBQW9DO1lBQ3BDLHNCQUFzQjtZQUN0QixNQUFNO1lBRU4sSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNkLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO2dCQUMxQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUMxQixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO2lCQUNsQjthQUNGO1lBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNwQjtJQUNILENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxJQUFJO1FBQ3hCLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUU7WUFDMUIsNkJBQTZCO1lBQzdCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDbkMsc0RBQXNEO1lBQ3RELHFEQUFxRDtTQUN0RDthQUFNO1lBQ0wscUVBQXFFO1lBQ3JFLElBQUksQ0FBQyxnQkFBZ0IsQ0FDbkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUM5RSxJQUFJLENBQ0wsQ0FBQztZQUNGLHFFQUFxRTtZQUNyRSxzREFBc0Q7WUFDdEQscURBQXFEO1NBQ3REO1FBQ0Qsa0JBQWtCO1FBQ2xCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNoQixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFFckIsY0FBYyxDQUFDLENBQUM7UUFDZCxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksS0FBSyxFQUFFO1lBQ3BELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDdEI7SUFDSCxDQUFDO0lBRUQsZUFBZSxDQUFDLENBQWEsRUFBRSxJQUFTO1FBQ3RDLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLEVBQUU7WUFDdEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUVwQyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFO2dCQUMxQiwrQkFBK0I7Z0JBQy9CLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDckM7aUJBQU07Z0JBQ0wsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzVDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtvQkFDMUIsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFO3dCQUN4RixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7cUJBQ2xDO2lCQUNGO3FCQUFNO29CQUNMLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ25CLGdDQUFnQztvQkFDaEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztpQkFDdEM7YUFDRjtZQUVELElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxRQUFRLEVBQUU7Z0JBQ3pCLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUNmLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7YUFDekI7WUFDRCwwQ0FBMEM7WUFDMUMsMkJBQTJCO1lBQzNCLElBQUk7WUFDSixVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtvQkFDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztpQkFDdkI7WUFDSCxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDUDtRQUVELENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsb0JBQW9CLENBQUMsQ0FBZ0I7UUFDbkMsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDbEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN0QixVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNoQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDTixPQUFPLEtBQUssQ0FBQztTQUNkO1FBQ0QsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLFFBQVEsRUFBRTtZQUN0QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztZQUNqQixVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNoQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDUDtRQUNELElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLFdBQVcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLFNBQVMsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFO1lBQ3hHLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN2RixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7YUFDcEQ7aUJBQU07Z0JBQ0wsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRTtvQkFDeEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3ZEO3FCQUFNO29CQUNMLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ3JCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7d0JBQ2QsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFOzRCQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO3lCQUN2QjtvQkFDSCxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQ1A7YUFDRjtTQUNGO1FBQ0QsMkVBQTJFO1FBQzNFLDZCQUE2QjtRQUM3Qix5QkFBeUI7UUFDekIsaUNBQWlDO1FBQ2pDLGFBQWE7UUFDYixJQUFJO1FBQ0osc0JBQXNCO1FBQ3RCLHFCQUFxQjtRQUNyQixDQUFDLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksT0FBTyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFO1lBQ3BFLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxFQUFFLEVBQUU7Z0JBQzFELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFZLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUM3SCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtvQkFDbkMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLENBQUMsQ0FBQztpQkFDOUI7YUFDRjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7YUFDakM7WUFFRCxJQUNFLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUM7Z0JBQ2pJLElBQUksQ0FBQyxJQUFJLElBQUksVUFBVSxFQUN2QjtnQkFDQSxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUU7b0JBQ3hGLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxFQUFFLEVBQUU7d0JBQzFELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQzVDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDSixDQUFDOzRCQUNELElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBWSxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FDcEksQ0FBQztxQkFDSDt5QkFBTTt3QkFDTCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7cUJBQ3JJO29CQUNELElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO2lCQUNsQzthQUNGO2lCQUFNO2dCQUNMLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxVQUFVLEVBQUU7b0JBQzNCLElBQUksSUFBSSxDQUFDLG1CQUFtQixJQUFJLENBQUMsQ0FBQyxFQUFFO3dCQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssRUFBRSxFQUFFOzRCQUMxRCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtnQ0FDbkMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOzZCQUNoRDtpQ0FBTTtnQ0FDTCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7NkJBQ3ZFO3lCQUNGOzZCQUFNOzRCQUNMLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQzt5QkFDL0Q7d0JBQ0QsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7cUJBQ2xDO2lCQUNGO3FCQUFNO29CQUNMLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLE1BQU0sS0FBSyxDQUFDLEVBQUU7d0JBQ2pELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO3FCQUNqRDtvQkFDRCxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksUUFBUSxFQUFFO3dCQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO3dCQUN0QixVQUFVLENBQUMsR0FBRyxFQUFFOzRCQUNkLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQzt3QkFDaEMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO3FCQUNQO2lCQUNGO2FBQ0Y7WUFDRCxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDcEIsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ25CLENBQUMsQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1NBQzlCO1FBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsTUFBTSxDQUFDLEdBQVc7UUFDaEIsSUFDRSxHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztZQUNyQixHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztZQUNuQixHQUFHLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztZQUN2QixHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztZQUNuQixHQUFHLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQztZQUN4QixHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUNwQixHQUFHLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQztZQUMzQixHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztZQUNyQixHQUFHLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQztZQUN6QixHQUFHLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQztZQUMzQixHQUFHLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQztZQUMxQixHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztZQUNyQixHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUNwQixHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztZQUNuQixHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztZQUN0QixHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztZQUN0QixHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztZQUN0QixHQUFHLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQztZQUN4QixHQUFHLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztZQUN2QixHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztZQUN0QixHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztZQUNyQixHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztZQUNuQixHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztZQUNsQixHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztZQUNsQixHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztZQUNsQixHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztZQUNsQixHQUFHLENBQUMs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QUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU07Z0JBRUcsTUFBTTtzQkFBZixNQUFNO2dCQUVHLE9BQU87c0JBQWhCLE1BQU07Z0JBSUksS0FBSztzQkFEZixLQUFLO2dCQXNCTixnQkFBZ0I7c0JBRGYsTUFBTTtnQkFJUCxtQkFBbUI7c0JBRGxCLE1BQU07Z0JBS0ksYUFBYTtzQkFEdkIsS0FBSztnQkFnTE4sb0JBQW9CO3NCQURuQixNQUFNO2dCQUlJLGNBQWM7c0JBRHhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBJbnB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgT3V0cHV0LFxyXG4gIFZpZXdDaGlsZCxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBFbGVtZW50UmVmLFxyXG4gIENvbnRlbnRDaGlsZCxcclxuICBOZ1pvbmUsXHJcbiAgUXVlcnlMaXN0LFxyXG4gIENvbnRlbnRDaGlsZHJlbixcclxuICBUZW1wbGF0ZVJlZlxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEFYVGV4dEJveENvbXBvbmVudCB9IGZyb20gJy4uL3RleHRib3gvdGV4dGJveC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBWERyb3Bkb3duQ29tcG9uZW50IH0gZnJvbSAnLi4vZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgQVhCYXNlU2l6YWJsZUNvbXBvbmVudCwgQVhCYXNlSW5wdXRDb21wb25lbnQsIEFYRWxlbWVudFNpemUsIEFYVmFsaWRhdGFibGVDb21wb25lbnQgfSBmcm9tICcuLi9iYXNlL2VsZW1lbnQuY2xhc3MnO1xyXG5pbXBvcnQgeyBBWERhdGFTb3VyY2VDb21wb25lbnQgfSBmcm9tICcuLi9kYXRhLXNvdXJjZS9kYXRhc291cmNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFYVmFsaWRhdGlvbiB9IGZyb20gJy4uL3ZhbGlkYXRpb24vdmFsaWRhdGlvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBWERhdGFTb3VyY2VSZWFkUGFyYW1zIH0gZnJvbSAnLi4vZGF0YS1zb3VyY2UvcmVhZC1wYXJhbSc7XHJcbmltcG9ydCB7IEFYQmFzZUV2ZW50IH0gZnJvbSAnLi4vYmFzZS9ldmVudHMuY2xhc3MnO1xyXG5pbXBvcnQgeyBBWFNlYXJjaEJveENvbXBvbmVudCB9IGZyb20gJy4uL3NlYXJjaGJveC9zZWFyY2hib3guY29tcG9uZW50JztcclxuaW1wb3J0IHsgQVhDb25maWcgfSBmcm9tICdAYWNvcmV4L2NvcmUnO1xyXG5pbXBvcnQgeyBkaWZmZXJlbmNlQnkgfSBmcm9tICdsb2Rhc2gnO1xyXG5leHBvcnQgY2xhc3MgQVhTZWxlY3RCb3hTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXh0ZW5kcyBBWEJhc2VFdmVudCB7XHJcbiAgY29uc3RydWN0b3IoY29tcG9uZW50OiBhbnksIHB1YmxpYyBzZWxlY3RlZEl0ZW1zOiBhbnlbXSwgcHVibGljIHNlbGVjdGVkVmFsdWVzOiBhbnlbXSB8IGFueSkge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIHRoaXMuY29tcG9uZW50ID0gY29tcG9uZW50O1xyXG4gIH1cclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdheC1zZWxlY3QtYm94JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc2VsZWN0Ym94LmNvbXBvbmVudC5odG1sJyxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIGhvc3Q6IHsgc3R5bGU6ICd3aWR0aDogMTAwJScgfSxcclxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IEFYVmFsaWRhdGFibGVDb21wb25lbnQsIHVzZUV4aXN0aW5nOiBBWFNlbGVjdEJveENvbXBvbmVudCB9XVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQVhTZWxlY3RCb3hDb21wb25lbnQgZXh0ZW5kcyBBWFZhbGlkYXRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgQVhCYXNlU2l6YWJsZUNvbXBvbmVudCwgQVhCYXNlSW5wdXRDb21wb25lbnQge1xyXG4gIEBJbnB1dCgpIHNob3dEcm9wRG93bkJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoVGVtcGxhdGVSZWYsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgcm93VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcm93SW5wdXRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKEFYVGV4dEJveENvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcclxuICBzcGFuOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcclxuXHJcbiAgQFZpZXdDaGlsZChBWFRleHRCb3hDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgdGV4dGJveDogQVhUZXh0Qm94Q29tcG9uZW50O1xyXG5cclxuICBAVmlld0NoaWxkKCdsaXN0Q29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUgfSlcclxuICBsaXN0Q29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcclxuXHJcbiAgQFZpZXdDaGlsZCgnc2VyY2hCb3gnLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBzZXJjaEJveDogQVhTZWFyY2hCb3hDb21wb25lbnQ7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3RleHRCb3hTZWxlY3RCb3gnLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIHRleHRCb3hTZWxlY3RCb3g6IEFYVGV4dEJveENvbXBvbmVudDtcclxuXHJcbiAgQElucHV0KCkgc2hvd0NoZWNrQm94OiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KCkgcmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgcnRsOiBib29sZWFuID0gQVhDb25maWcuZ2V0KCdsYXlvdXQucnRsJyk7XHJcblxyXG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmc7XHJcblxyXG4gIEBJbnB1dCgpIHNpemU6IEFYRWxlbWVudFNpemUgPSAnbWQnO1xyXG5cclxuICBASW5wdXQoKSBhbGxvd051bGw6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBASW5wdXQoKSB0ZXh0QWxpZ246ICdyaWdodCcgfCAnbGVmdCcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgQElucHV0KCkgYnVmZmVyU2l6ZTogbnVtYmVyID0gMjA7XHJcblxyXG4gIEBJbnB1dCgpIHJlbW90ZU9wZXJhdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKSBmaXRQYXJlbnQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBASW5wdXQoKSBkcm9wZG93bldpZHRoOiBzdHJpbmcgPSAnMzAwcHgnXHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIGRyb3Bkb3duVG9nZ2xlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIC8vIHRoaXMgaW5wdXQgaXMgUHJpdmF0ZSBhbmQgb25seSB1c2UgaW4gTE9WXHJcblxyXG4gIGN1cnJlbnRmb2N1c2VkSW5kZXg6IG51bWJlciA9IC0xO1xyXG4gIHNob3dMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHNraXA6IG51bWJlciA9IC0xO1xyXG4gIHNlYXJjaFRleHQ6IHN0cmluZyA9ICcnO1xyXG4gIC8vIEBJbnB1dCgpXHJcbiAgLy8gY2hpcHNXaWR0aDogc3RyaW5nID0gJyc7XHJcblxyXG4gIHRleHQ6IHN0cmluZyA9ICcnO1xyXG4gIHRvdGFsQ291bnQ6IG51bWJlciA9IDA7XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoQVhEYXRhU291cmNlQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIHByaXZhdGUgX2NvbnRlbnREYXRhU291cmNlOiBBWERhdGFTb3VyY2VDb21wb25lbnQ7XHJcblxyXG4gIHByaXZhdGUgX2RhdGFTb3VyY2U6IEFYRGF0YVNvdXJjZUNvbXBvbmVudDtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZ2V0IGRhdGFTb3VyY2UoKTogQVhEYXRhU291cmNlQ29tcG9uZW50IHtcclxuICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlID8gdGhpcy5fZGF0YVNvdXJjZSA6IHRoaXMuX2NvbnRlbnREYXRhU291cmNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBkYXRhU291cmNlKHY6IEFYRGF0YVNvdXJjZUNvbXBvbmVudCkge1xyXG4gICAgdGhpcy5fZGF0YVNvdXJjZSA9IHY7XHJcbiAgfVxyXG5cclxuICBAQ29udGVudENoaWxkKEFYVmFsaWRhdGlvbiwgeyBzdGF0aWM6IHRydWUgfSlcclxuICBwcml2YXRlIF9jb250ZW50VmFsaWRhdGlvbjogQVhWYWxpZGF0aW9uO1xyXG5cclxuICBwcml2YXRlIF92YWxpZGF0aW9uOiBBWFZhbGlkYXRpb247XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGdldCB2YWxpZGF0aW9uKCk6IEFYVmFsaWRhdGlvbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fdmFsaWRhdGlvbiA/IHRoaXMuX3ZhbGlkYXRpb24gOiB0aGlzLl9jb250ZW50VmFsaWRhdGlvbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgdmFsaWRhdGlvbih2OiBBWFZhbGlkYXRpb24pIHtcclxuICAgIHRoaXMuX3ZhbGlkYXRpb24gPSB2O1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIHJlZjogRWxlbWVudFJlZiwgcHJpdmF0ZSB6b25lOiBOZ1pvbmUpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBAVmlld0NoaWxkKCdkJywgeyBzdGF0aWM6IHRydWUgfSlcclxuICBkcm9wZG93bjogQVhEcm9wZG93bkNvbXBvbmVudDtcclxuXHJcbiAgQElucHV0KCkgZGlzYWJsZWRDYWxsYmFjazogKGU6IHsgaXRlbTogYW55OyBpbmRleDogbnVtYmVyIH0pID0+IGJvb2xlYW47XHJcblxyXG4gIEBJbnB1dCgpIGFsbG93U2VhcmNoOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSB0ZXh0RmllbGQ6IHN0cmluZyA9ICd0ZXh0JztcclxuICBASW5wdXQoKSB2YWx1ZUZpZWxkOiBzdHJpbmcgPSAndmFsdWUnO1xyXG4gIEBJbnB1dCgpIGRpc2FibGVkRmllbGQ6IHN0cmluZyA9ICdkaXNhYmxlZCc7XHJcbiAgQElucHV0KCkgbW9kZTogJ3NpbmdsZScgfCAnbXVsdGlwbGUnID0gJ3NpbmdsZSc7XHJcbiAgaXRlbVJlbW92ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBPdXRwdXQoKSBpdGVtc0NoYW5nZTogRXZlbnRFbWl0dGVyPGFueVtdPiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XHJcblxyXG4gIEBPdXRwdXQoKSBvbkJsdXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIEBPdXRwdXQoKSBvbkZvY3VzOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBwcml2YXRlIF9pdGVtczogYW55W10gPSBbXTtcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBnZXQgaXRlbXMoKTogYW55W10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IGl0ZW1zKHY6IGFueVtdKSB7XHJcbiAgICB0aGlzLl9pdGVtcyA9IHY7XHJcbiAgICBpZiAodGhpcy5pdGVtc0NoYW5nZSkge1xyXG4gICAgICB0aGlzLml0ZW1zQ2hhbmdlLmVtaXQodik7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5pdGVtc1N0YXR1c09ic2VydmVyKSB7XHJcbiAgICAgIHRoaXMuaXRlbXNTdGF0dXNPYnNlcnZlci5uZXh0KHRoaXMuaXRlbXMubGVuZ3RoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhc1NlbGVjdGVkVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpdGVtc0ZpbHRlcmVkOiBhbnlbXSA9IFtdO1xyXG5cclxuICAvLyAjZW5kcmVnaW9uXHJcblxyXG4gIGRyb3BEb3duRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgc2VsZWN0aW9uQ2hhbmdlZDogRXZlbnRFbWl0dGVyPEFYU2VsZWN0Qm94U2VsZWN0aW9uQ2hhbmdlZEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8QVhTZWxlY3RCb3hTZWxlY3Rpb25DaGFuZ2VkRXZlbnQ+KCk7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHNlbGVjdGVkSXRlbXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnlbXT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xyXG5cclxuICBwcml2YXRlIF9zZWxlY3RlZEl0ZW1zOiBhbnlbXSA9IFtdO1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGdldCBzZWxlY3RlZEl0ZW1zKCk6IGFueVtdIHtcclxuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZEl0ZW1zIHx8IFtdO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IHNlbGVjdGVkSXRlbXModjogYW55W10pIHtcclxuICAgIHRoaXMuc2V0U2VsZWN0ZWRJdGVtc0NoYW5nZSh2KTtcclxuICAgIC8vIGlmICghdikge1xyXG4gICAgLy8gICB2ID0gW107XHJcbiAgICAvLyB9XHJcblxyXG4gICAgLy8gY29uc3Qgb2xkID0gdGhpcy5zZWxlY3RlZEl0ZW1zO1xyXG4gICAgLy8gaWYgKEpTT04uc3RyaW5naWZ5KG9sZCkgIT09IEpTT04uc3RyaW5naWZ5KHYpKSB7XHJcbiAgICAvLyAgIHRoaXMuX3NlbGVjdGVkSXRlbXMgPSB0aGlzLm1vZGUgPT0gJ3NpbmdsZScgPyB2LnNsaWNlKDAsIDEpIDogWy4uLm5ldyBTZXQodildOyAvL1suLi5uZXcgU2V0KHZbMF0pXSA6IFsuLi5uZXcgU2V0KHYpXTtcclxuICAgIC8vICAgdGhpcy5fc2VsZWN0ZWRJdGVtcy5mb3JFYWNoKChjKSA9PiAoYy5zZWxlY3RlZCA9IHRydWUpKTtcclxuICAgIC8vICAgdGhpcy5zZWxlY3RlZEl0ZW1zQ2hhbmdlLmVtaXQodGhpcy5fc2VsZWN0ZWRJdGVtcyk7XHJcbiAgICAvLyAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXNDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkVmFsdWVzKTtcclxuICAgIC8vICAgdGhpcy5jbGVhclZhbGlkYXRpb25TdHlsZSh0aGlzLnJlZi5uYXRpdmVFbGVtZW50KTtcclxuICAgIC8vICAgdGhpcy53YWl0Rm9yRGF0YSgoKSA9PiB7XHJcbiAgICAvLyAgICAgaWYgKHRoaXMuX3NlbGVjdGVkSXRlbXMpIHtcclxuICAgIC8vICAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaCgoYykgPT4gKGMuc2VsZWN0ZWQgPSB0aGlzLl9zZWxlY3RlZEl0ZW1zLnNvbWUoKGkpID0+IGlbdGhpcy52YWx1ZUZpZWxkXSA9PSBjW3RoaXMudmFsdWVGaWVsZF0pKSk7XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICB9KTtcclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIHNldFNlbGVjdGVkSXRlbXNDaGFuZ2UodjogYW55W10sIG9sZDogYW55W10gPSB0aGlzLnNlbGVjdGVkSXRlbXMpIHtcclxuICAgIGlmICghdikge1xyXG4gICAgICB2ID0gW107XHJcbiAgICB9XHJcbiAgICAvLyBjb25zdCBvbGQgPSB0aGlzLnNlbGVjdGVkSXRlbXM7XHJcbiAgICB2YXIgZiA9IGRpZmZlcmVuY2VCeShvbGQsIHYsIHRoaXMudmFsdWVGaWVsZCk7XHJcbiAgICB2YXIgcyA9IGRpZmZlcmVuY2VCeSh2LCBvbGQsIHRoaXMudmFsdWVGaWVsZCk7XHJcbiAgICAvLyBpZiAoSlNPTi5zdHJpbmdpZnkob2xkKSAhPT0gSlNPTi5zdHJpbmdpZnkodikpIHtcclxuICAgIGlmIChmLmxlbmd0aCAhPSAwIHx8IHMubGVuZ3RoICE9IDApIHtcclxuICAgICAgdGhpcy5fc2VsZWN0ZWRJdGVtcyA9IHRoaXMubW9kZSA9PSAnc2luZ2xlJyA/IHYuc2xpY2UoMCwgMSkgOiBbLi4ubmV3IFNldCh2KV07IC8vWy4uLm5ldyBTZXQodlswXSldIDogWy4uLm5ldyBTZXQodildO1xyXG4gICAgICB0aGlzLl9zZWxlY3RlZEl0ZW1zLmZvckVhY2goKGMpID0+IChjLnNlbGVjdGVkID0gdHJ1ZSkpO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXNDaGFuZ2UuZW1pdCh0aGlzLl9zZWxlY3RlZEl0ZW1zKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlc0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRWYWx1ZXMpO1xyXG4gICAgICB0aGlzLmNsZWFyVmFsaWRhdGlvblN0eWxlKHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgICB0aGlzLndhaXRGb3JEYXRhKCgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5fc2VsZWN0ZWRJdGVtcykge1xyXG4gICAgICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKChjKSA9PiAoYy5zZWxlY3RlZCA9IHRoaXMuX3NlbGVjdGVkSXRlbXMuc29tZSgoaSkgPT4gaVt0aGlzLnZhbHVlRmllbGRdID09IGNbdGhpcy52YWx1ZUZpZWxkXSkpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBpZiAodGhpcy5yb3dUZW1wbGF0ZSA9PT0gdW5kZWZpbmVkICYmIHRoaXMucm93SW5wdXRUZW1wbGF0ZSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5yb3dUZW1wbGF0ZSA9IHRoaXMucm93SW5wdXRUZW1wbGF0ZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnJ0bCA9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMucnRsID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5yZWYubmF0aXZlRWxlbWVudCwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnZGlyZWN0aW9uJykgPT09ICdydGwnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2Nyb2xsZWQoZSkge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnJlbW90ZU9wZXJhdGlvbiAmJlxyXG4gICAgICB0aGlzLnRvdGFsQ291bnQgPiB0aGlzLml0ZW1zLmxlbmd0aCAmJlxyXG4gICAgICB0aGlzLmxpc3RDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHQgIT0gMCAmJlxyXG4gICAgICB0aGlzLmxpc3RDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHQgLSB0aGlzLmxpc3RDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgLSAzMDAgPCA1MFxyXG4gICAgKSB7XHJcbiAgICAgIGlmICh0aGlzLnNraXAgIT09IHRoaXMuaXRlbXMubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5zaG93TG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5za2lwID0gdGhpcy5pdGVtcy5sZW5ndGg7XHJcbiAgICAgICAgY29uc3QgcGFyYW1zOiBBWERhdGFTb3VyY2VSZWFkUGFyYW1zID0ge307XHJcbiAgICAgICAgcGFyYW1zLnNraXAgPSB0aGlzLml0ZW1zLmxlbmd0aDtcclxuICAgICAgICBwYXJhbXMudGFrZSA9IHRoaXMuYnVmZmVyU2l6ZTsgLy8qIChNYXRoLmZsb29yKHRoaXMuaXRlbXMubGVuZ3RoIC8gdGhpcy5idWZmZXJTaXplKSArIDEpO1xyXG4gICAgICAgIGlmICh0aGlzLnRleHRib3gpIHtcclxuICAgICAgICAgIHBhcmFtcy5zZWFyY2hUZXh0ID0gdGhpcy50ZXh0O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBwYXJhbXMuc2VhcmNoVGV4dCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZmV0Y2gocGFyYW1zKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIHNldFNlbGVjdGVkSXRlbXModjogYW55W10sIGlzVXNlcklucHV0OiBib29sZWFuKSB7XHJcbiAgICBsZXQgY2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgaWYgKGlzVXNlcklucHV0KSB7XHJcbiAgICAgIGNoYW5nZWQgPSBKU09OLnN0cmluZ2lmeSh2KSAhPT0gSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZEl0ZW1zKTtcclxuICAgIH1cclxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHY7XHJcbiAgICB0aGlzLnNldFNlbGVjdGVkSW5kZXgoKTtcclxuICAgIGlmIChpc1VzZXJJbnB1dCAmJiBjaGFuZ2VkKSB7XHJcbiAgICAgIHRoaXMuZW1pdFNlbGVjdGlvbkNoYW5nZWRFdmVudCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZWFyY2hDaGFuZ2VPYnNlcnZlcjogYW55O1xyXG5cclxuICBkZWxheTogbnVtYmVyID0gNTAwO1xyXG5cclxuICB0ZXh0Q2hhbmdlZChlKSB7XHJcbiAgICBpZiAoKGUudmFsdWUgPT09IG51bGwgfHwgZS52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGUudmFsdWUgPT09ICcnKSAmJiAoZS5vbGRWYWx1ZSA9PT0gbnVsbCB8fCBlLm9sZFZhbHVlID09PSB1bmRlZmluZWQgfHwgZS5vbGRWYWx1ZSA9PT0gJycpKSB7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXggPSAtMTtcclxuICAgICAgaWYgKHRoaXMucmVtb3RlT3BlcmF0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gdGhpcy50ZXh0O1xyXG4gICAgICAgIC8vICB0aGlzLnNlYXJjaFRleHQgPSBlLnZhbHVlO1xyXG4gICAgICAgIC8vIHRoaXMudGV4dCA9IGUudmFsdWU7XHJcbiAgICAgICAgLy8gdGhpcy5pdGVtcyA9IFtdO1xyXG4gICAgICAgIGlmICh0aGlzLml0ZW1zKSB7XHJcbiAgICAgICAgICBsZXQgdCA9IHRoaXMuaXRlbXMubGVuZ3RoO1xyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0OyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5pdGVtcy5wb3AoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHRoaXMuaXRlbXMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xyXG4gICAgICAgIC8vICAgdGhpcy5pdGVtcy5wb3AoKTtcclxuICAgICAgICAvLyB9KTtcclxuICAgICAgICBjb25zdCBwYXJhbXM6IEFYRGF0YVNvdXJjZVJlYWRQYXJhbXMgPSB7fTtcclxuICAgICAgICBwYXJhbXMuc2VhcmNoVGV4dCA9IHRoaXMudGV4dDtcclxuICAgICAgICAvLyBwYXJhbXMuc2VhcmNoVGV4dCA9IGUudmFsdWU7XHJcbiAgICAgICAgcGFyYW1zLnNraXAgPSAwO1xyXG4gICAgICAgIHBhcmFtcy50YWtlID0gdGhpcy5idWZmZXJTaXplO1xyXG4gICAgICAgIHRoaXMuZmV0Y2gocGFyYW1zKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNJdGVtRGlzYWJsZWQoaXRlbTogYW55KTogYm9vbGVhbiB7XHJcbiAgICBpZiAoaXRlbVt0aGlzLmRpc2FibGVkRmllbGRdID09IHRydWUpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuZGlzYWJsZWRDYWxsYmFjaykge1xyXG4gICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZENhbGxiYWNrKHsgaXRlbSwgaW5kZXg6IC0xIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25CdXR0b25DbGljayhlKSB7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFNlbGVjdGVkSW5kZXgoc2lnbjogLTEgfCAxIHwgbnVsbCA9IG51bGwpOiB2b2lkIHtcclxuICAgIGlmIChzaWduID09IG51bGwpIHtcclxuICAgICAgaWYgKCF0aGlzLnJlbW90ZU9wZXJhdGlvbiAmJiB0aGlzLnRleHQgJiYgdGhpcy50ZXh0ICE9PSAnJykge1xyXG4gICAgICAgIHRoaXMuY3VycmVudGZvY3VzZWRJbmRleCA9IHRoaXMuaXRlbXNcclxuICAgICAgICAgIC5maWx0ZXIoKGMpID0+IChjW3RoaXMudGV4dEZpZWxkXSBhcyBzdHJpbmcpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy50ZXh0LnRvTG93ZXJDYXNlKCkpKVxyXG4gICAgICAgICAgLmluZGV4T2YodGhpcy5zZWxlY3RlZEl0ZW1zW3RoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggLSAxXSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4ID0gdGhpcy5pdGVtcy5pbmRleE9mKHRoaXMuc2VsZWN0ZWRJdGVtc1t0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoIC0gMV0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzaWduID09PSAtMSA/IHRoaXMuY3VycmVudGZvY3VzZWRJbmRleC0tIDogdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4Kys7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucmVtb3RlT3BlcmF0aW9uKSB7XHJcbiAgICAgIHRoaXMuaXRlbXNGaWx0ZXJlZCA9IHRoaXMuaXRlbXM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLml0ZW1zRmlsdGVyZWQgPSB0aGlzLnRleHRcclxuICAgICAgICA/IHRoaXMuaXRlbXMuZmlsdGVyKChjKSA9PiAoY1t0aGlzLnRleHRGaWVsZF0gYXMgc3RyaW5nKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMudGV4dC50b0xvd2VyQ2FzZSgpKSlcclxuICAgICAgICA6IHRoaXMuaXRlbXM7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4ID1cclxuICAgICAgdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4IDwgMFxyXG4gICAgICAgID8gMFxyXG4gICAgICAgIDogdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4ID49IHRoaXMuaXRlbXNGaWx0ZXJlZC5sZW5ndGhcclxuICAgICAgICAgID8gdGhpcy5pdGVtc0ZpbHRlcmVkLmxlbmd0aCAtIDFcclxuICAgICAgICAgIDogdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4O1xyXG4gICAgLy9cclxuICAgIC8vIHNldCBzY3JvbGxcclxuICAgIGlmICh0aGlzLmxpc3RDb250YWluZXIpIHtcclxuICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcclxuICAgICAgICBjb25zdCBpdGVtRGl2ID0gdGhpcy5saXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihgLmxpc3QtaXRlbTpudGgtY2hpbGQoJHt0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXh9KWApO1xyXG4gICAgICAgIGlmIChpdGVtRGl2KSB7XHJcbiAgICAgICAgICBpdGVtRGl2LnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAT3V0cHV0KClcclxuICBzZWxlY3RlZFZhbHVlc0NoYW5nZTogRXZlbnRFbWl0dGVyPGFueVtdIHwgYW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10gfCBhbnk+KCk7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGdldCBzZWxlY3RlZFZhbHVlcygpOiBhbnlbXSB8IGFueSB7XHJcbiAgICBpZiAodGhpcy5tb2RlID09PSAnc2luZ2xlJykge1xyXG4gICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRJdGVtcy5tYXAoKGMpID0+IGNbdGhpcy52YWx1ZUZpZWxkXSlbMF07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRJdGVtcy5tYXAoKGMpID0+IGNbdGhpcy52YWx1ZUZpZWxkXSkgfHwgW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHNlbGVjdGVkVmFsdWVzKHY6IGFueVtdIHwgYW55KSB7XHJcbiAgICBpZiAodGhpcy5jb21wYXJlU2VsZWN0ZWRWYWx1ZXModikpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHYgPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh2ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBpZiAodiAhPSBbXSAmJiB2ICE9ICcnICYmIHYgIT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhpcy5oYXNTZWxlY3RlZFZhbHVlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMud2FpdEZvckRhdGEoKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ3NpbmdsZScpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXRlbXMuZmlsdGVyKChjKSA9PiB2ID09IGNbdGhpcy52YWx1ZUZpZWxkXSkpIHtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLml0ZW1zLmZpbHRlcigoYykgPT4gdiA9PSBjW3RoaXMudmFsdWVGaWVsZF0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2KSkge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gdi5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuc2VsZWN0ZWRJdGVtcy5maWx0ZXIoKGMpID0+IHYuaW5jbHVkZXMoY1t0aGlzLnZhbHVlRmllbGRdKSk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGxldCBhZGRJZCA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdi5mb3JFYWNoKCh2SWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgYWRkSWQucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgW3RoaXMudmFsdWVGaWVsZF06IHZJZFxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBuZXdJZCA9IGRpZmZlcmVuY2VCeShhZGRJZCwgdGhpcy5zZWxlY3RlZEl0ZW1zLCB0aGlzLnZhbHVlRmllbGQpO1xyXG4gICAgICAgICAgICAgICAgbGV0IHZ2ID0gW107XHJcbiAgICAgICAgICAgICAgICBuZXdJZC5mb3JFYWNoKChyYykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICB2di5wdXNoKHJjW3RoaXMudmFsdWVGaWVsZF0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zXHJcbiAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGMpID0+IHZ2LmluY2x1ZGVzKGNbdGhpcy52YWx1ZUZpZWxkXSkpXHJcbiAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKChyZXMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaChyZXMpO1xyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIC8vICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaCh0aGlzLml0ZW1zLmZpbHRlcigoYykgPT4gdnYuaW5jbHVkZXMoY1t0aGlzLnZhbHVlRmllbGRdKSkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZEl0ZW1zQ2hhbmdlKHRoaXMuc2VsZWN0ZWRJdGVtcywgdnYubGVuZ3RoID4gMCA/IFsxXSA6IHRoaXMuc2VsZWN0ZWRJdGVtcyk7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAvLyAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5pdGVtcy5maWx0ZXIoKGMpID0+IHYuaW5jbHVkZXMoY1t0aGlzLnZhbHVlRmllbGRdKSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodikge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuaXRlbXMuZmlsdGVyKChjKSA9PiB2ID09PSBjW3RoaXMudmFsdWVGaWVsZF0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFZhbHVlcyk7XHJcbiAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb21wYXJlU2VsZWN0ZWRWYWx1ZXMobmV3VmFsdWU6IGFueVtdIHwgYW55KSB7XHJcbiAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB0aGlzLnNlbGVjdGVkVmFsdWVzO1xyXG4gICAgcmV0dXJuIChjdXJyZW50VmFsdWUgPT0gbnVsbCAmJiBuZXdWYWx1ZSA9PSBudWxsKSB8fCBKU09OLnN0cmluZ2lmeShjdXJyZW50VmFsdWUpID09PSBKU09OLnN0cmluZ2lmeShuZXdWYWx1ZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFNlbGVjdGVkVmFsdWVzKHY6IGFueVtdIHwgYW55LCBpc1VzZXJJbnB1dDogYm9vbGVhbikge1xyXG4gICAgY29uc3QgY2hhbmdlZCA9IGlzVXNlcklucHV0ID8gIXRoaXMuY29tcGFyZVNlbGVjdGVkVmFsdWVzKHYpIDogZmFsc2U7XHJcbiAgICB0aGlzLnNlbGVjdGVkVmFsdWVzID0gdjtcclxuICAgIGlmIChpc1VzZXJJbnB1dCAmJiBjaGFuZ2VkKSB7XHJcbiAgICAgIHRoaXMuZW1pdFNlbGVjdGlvbkNoYW5nZWRFdmVudCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBlbWl0U2VsZWN0aW9uQ2hhbmdlZEV2ZW50KCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlc0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRWYWx1ZXMpO1xyXG4gICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2VkLmVtaXQobmV3IEFYU2VsZWN0Qm94U2VsZWN0aW9uQ2hhbmdlZEV2ZW50KHRoaXMsIHRoaXMuc2VsZWN0ZWRJdGVtcywgdGhpcy5zZWxlY3RlZFZhbHVlcykpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuYnVmZmVyU2l6ZSA8IDEwKSB7XHJcbiAgICAgIHRoaXMuYnVmZmVyU2l6ZSA9IDEwO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMubW9kZSA9PSAnc2luZ2xlJykge1xyXG4gICAgICB0aGlzLnNob3dDaGVja0JveCA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zaG93Q2hlY2tCb3ggPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLnJlbW90ZU9wZXJhdGlvbiB8fCAodGhpcy5yZW1vdGVPcGVyYXRpb24gJiYgdGhpcy5oYXNTZWxlY3RlZFZhbHVlKSkge1xyXG4gICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgIH1cclxuICB9XHJcbiAgZHJvcGRvd25Ub2dnbGVTZWxlY0JveChlKSB7XHJcbiAgICB0aGlzLnRleHQgPSAnJztcclxuICAgIGlmICh0aGlzLmRyb3Bkb3duLmlzT3Blbikge1xyXG4gICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VyY2hCb3gpIHtcclxuICAgICAgICAgIHRoaXMuc2VyY2hCb3guZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIDEpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gIHRoaXMucmVmcmVzaCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kcm9wZG93blRvZ2dsZS5lbWl0KGUpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xyXG4gICAgLy8gaWYgKCF0aGlzLmFsbG93U2VhcmNoKSB7XHJcbiAgICAvLyAgICAgaWYgKHRoaXMucmVhZG9ubHkgPT0gZmFsc2UpIHtcclxuICAgIC8vICAgICAgICAgdGhpcy5pdGVtUmVtb3ZlID0gdHJ1ZTtcclxuICAgIC8vICAgICAgICAgdGhpcy5yZWFkb25seSA9IHRydWU7XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gfVxyXG4gICAgdGhpcy5pbml0VmFsaWRhdGlvbih0aGlzLnJlZiwgJ3NlbGVjdGVkSXRlbXMnLCB0aGlzLnZhbGlkYXRpb24pO1xyXG4gICAgaWYgKHRoaXMuZGF0YVNvdXJjZSkge1xyXG4gICAgICAvLyBpZiAodGhpcy5hbGxvd1NlYXJjaCA9PSBmYWxzZSkge1xyXG4gICAgICAvLyAgIHRoaXMuZmV0Y2goKTtcclxuICAgICAgLy8gfVxyXG4gICAgICB0aGlzLmRhdGFTb3VyY2Uub25EYXRhUmVjZWl2ZWQuc3Vic2NyaWJlKChjKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zaG93TG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZGF0YVJlY2VpdmVkKGMuZGF0YS5yZXN1bHQpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBkYXRhUmVjZWl2ZWQoZGF0YTogYW55KSB7XHJcbiAgICBpZiAodGhpcy5yZW1vdGVPcGVyYXRpb24pIHtcclxuICAgICAgaWYgKHRoaXMuc2VhcmNoVGV4dCAmJiB0aGlzLnNlYXJjaFRleHQgIT0gbnVsbCAmJiB0aGlzLnNlYXJjaFRleHQgIT09ICcnKSB7XHJcbiAgICAgICAgaWYgKGRhdGEudG90YWxDb3VudCkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuaXRlbXMubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgLy90aGlzLml0ZW1zID0gZGF0YS5pdGVtcztcclxuICAgICAgICAgICAgZGF0YS5pdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5pdGVtcy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGRhdGEuaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuaXRlbXMucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIC8vIGlmICh0aGlzLml0ZW1zU3RhdHVzT2JzZXJ2ZXIpIHtcclxuICAgICAgICAgICAgLy8gICB0aGlzLml0ZW1zU3RhdHVzT2JzZXJ2ZXIubmV4dCh0aGlzLml0ZW1zLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSBkYXRhLnRvdGFsQ291bnQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmICh0aGlzLml0ZW1zLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXMgPSBkYXRhLml0ZW1zO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZGF0YS5pdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5pdGVtcy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgLy8gaWYgKHRoaXMuaXRlbXNTdGF0dXNPYnNlcnZlcikge1xyXG4gICAgICAgICAgICAvLyAgIHRoaXMuaXRlbXNTdGF0dXNPYnNlcnZlci5uZXh0KHRoaXMuaXRlbXMubGVuZ3RoKTtcclxuICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy50b3RhbENvdW50ID0gZGF0YS5pdGVtcyA9PSB1bmRlZmluZWQgPyAwIDogZGF0YS5pdGVtcy5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKGRhdGEuaXRlbXMgJiYgZGF0YS5pdGVtcy5sZW5ndGggPT09IGRhdGEudG90YWxDb3VudCkge1xyXG4gICAgICAgIHRoaXMuaXRlbXMgPSBkYXRhLml0ZW1zO1xyXG4gICAgICAgIHRoaXMudG90YWxDb3VudCA9IGRhdGEuaXRlbXMubGVuZ3RoO1xyXG4gICAgICB9IGVsc2UgaWYgKGRhdGEudG90YWxDb3VudCkge1xyXG4gICAgICAgIGRhdGEuaXRlbXMuZm9yRWFjaCgoZWxtKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goZWxtKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICAvLyBpZiAodGhpcy5pdGVtc1N0YXR1c09ic2VydmVyKSB7XHJcbiAgICAgICAgLy8gICB0aGlzLml0ZW1zU3RhdHVzT2JzZXJ2ZXIubmV4dCh0aGlzLml0ZW1zLmxlbmd0aCk7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICAgIHRoaXMudG90YWxDb3VudCA9IGRhdGEudG90YWxDb3VudDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBkYXRhLmZvckVhY2goKGVsbSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pdGVtcy5wdXNoKGVsbSk7XHJcbiAgICAgICAgICAvLyBpZiAodGhpcy5pdGVtc1N0YXR1c09ic2VydmVyKSB7XHJcbiAgICAgICAgICAvLyAgIHRoaXMuaXRlbXNTdGF0dXNPYnNlcnZlci5uZXh0KHRoaXMuaXRlbXMubGVuZ3RoKTtcclxuICAgICAgICAgIC8vIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSBkYXRhLmxlbmd0aDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pdGVtcyA9IGRhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG4gICAgdGhpcy5kcm9wZG93bi51cGRhdGVQb3NpdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgLy8gcHJpdmF0ZSBwYXJhbXM6IEFYRGF0YVNvdXJjZVJlYWRQYXJhbXMgPSB7fTtcclxuXHJcbiAgZmV0Y2gocGFyYW1zOiBBWERhdGFTb3VyY2VSZWFkUGFyYW1zID0ge30pIHtcclxuICAgIC8vICB0aGlzLnBhcmFtcyA9IHBhcmFtcztcclxuICAgIGlmICh0aGlzLmRhdGFTb3VyY2UpIHtcclxuICAgICAgdGhpcy5zaG93TG9hZGluZyA9IHRydWU7XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5mZXRjaChwYXJhbXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVmcmVzaCgpIHtcclxuICAgIGNvbnN0IHBhcmFtczogQVhEYXRhU291cmNlUmVhZFBhcmFtcyA9IHt9O1xyXG4gICAgaWYgKHRoaXMucmVtb3RlT3BlcmF0aW9uKSB7XHJcbiAgICAgIHBhcmFtcy5za2lwID0gMDtcclxuICAgICAgdGhpcy5za2lwID0gMDtcclxuICAgICAgcGFyYW1zLnRha2UgPSB0aGlzLmJ1ZmZlclNpemU7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5kYXRhU291cmNlICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAvLyB0aGlzLml0ZW1zID0gW107XHJcbiAgICAgIC8vIHRoaXMuaXRlbXMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xyXG4gICAgICAvLyAgIHRoaXMuaXRlbXMucG9wKCk7XHJcbiAgICAgIC8vIH0pO1xyXG5cclxuICAgICAgaWYgKHRoaXMuaXRlbXMpIHtcclxuICAgICAgICBsZXQgdCA9IHRoaXMuaXRlbXMubGVuZ3RoO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdDsgaSsrKSB7XHJcbiAgICAgICAgICB0aGlzLml0ZW1zLnBvcCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5mZXRjaChwYXJhbXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlSXRlbVJlbW92ZUNsaWNrKGl0ZW0pIHtcclxuICAgIGlmICh0aGlzLm1vZGUgPT09ICdzaW5nbGUnKSB7XHJcbiAgICAgIC8vIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IG51bGw7XHJcbiAgICAgIHRoaXMuc2V0U2VsZWN0ZWRWYWx1ZXMobnVsbCwgdHJ1ZSk7XHJcbiAgICAgIC8vIHRoaXMuc2VsZWN0ZWRJdGVtc0NoYW5nZS5lbWl0KHRoaXMuX3NlbGVjdGVkSXRlbXMpO1xyXG4gICAgICAvLyB0aGlzLmNsZWFyVmFsaWRhdGlvblN0eWxlKHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5zZWxlY3RlZEl0ZW1zLmZpbHRlcigoYykgPT4gYyAhPT0gaXRlbSk7XHJcbiAgICAgIHRoaXMuc2V0U2VsZWN0ZWRJdGVtcyhcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKChjKSA9PiBjW3RoaXMudmFsdWVGaWVsZF0gIT09IGl0ZW1bdGhpcy52YWx1ZUZpZWxkXSksXHJcbiAgICAgICAgdHJ1ZVxyXG4gICAgICApO1xyXG4gICAgICAvLyB0aGlzLl9zZWxlY3RlZEl0ZW1zID0gdGhpcy5fc2VsZWN0ZWRJdGVtcy5maWx0ZXIoYyA9PiBjICE9PSBpdGVtKTtcclxuICAgICAgLy8gdGhpcy5zZWxlY3RlZEl0ZW1zQ2hhbmdlLmVtaXQodGhpcy5fc2VsZWN0ZWRJdGVtcyk7XHJcbiAgICAgIC8vIHRoaXMuY2xlYXJWYWxpZGF0aW9uU3R5bGUodGhpcy5yZWYubmF0aXZlRWxlbWVudCk7XHJcbiAgICB9XHJcbiAgICAvLyB0aGlzLnRleHQgPSAnJztcclxuICAgIHRoaXMudmFsaWRhdGUoKTtcclxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgb25Gb2N1c1RleHRCb3goZSkgeyB9XHJcblxyXG4gIG9uVGV4dEJveENsaWNrKGUpIHtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkID09IGZhbHNlICYmIHRoaXMucmVhZG9ubHkgPT0gZmFsc2UpIHtcclxuICAgICAgdGhpcy5kcm9wZG93bi5vcGVuKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVJdGVtQ2xpY2soZTogTW91c2VFdmVudCwgaXRlbTogYW55KSB7XHJcbiAgICBpZiAodGhpcy5pc0l0ZW1EaXNhYmxlZChpdGVtKSA9PSBmYWxzZSkge1xyXG4gICAgICBjb25zdCB2YWx1ZSA9IGl0ZW1bdGhpcy52YWx1ZUZpZWxkXTtcclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdzaW5nbGUnKSB7XHJcbiAgICAgICAgLy8gdGhpcy5zZWxlY3RlZFZhbHVlcyA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRWYWx1ZXModmFsdWUsIHRydWUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGV4aXN0cyA9IHRoaXMuc2VsZWN0ZWRWYWx1ZXMuc2xpY2UoMCk7XHJcbiAgICAgICAgaWYgKGV4aXN0cy5pbmNsdWRlcyh2YWx1ZSkpIHtcclxuICAgICAgICAgIGlmICh0aGlzLmFsbG93TnVsbCA9PSB0cnVlIHx8ICh0aGlzLmFsbG93TnVsbCA9PSBmYWxzZSAmJiB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMSkpIHtcclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVJdGVtUmVtb3ZlQ2xpY2soaXRlbSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGV4aXN0cy5wdXNoKHZhbHVlKTtcclxuICAgICAgICAgIC8vIHRoaXMuc2VsZWN0ZWRWYWx1ZXMgPSBleGlzdHM7XHJcbiAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkVmFsdWVzKGV4aXN0cywgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5tb2RlID09ICdzaW5nbGUnKSB7XHJcbiAgICAgICAgdGhpcy50ZXh0ID0gJyc7XHJcbiAgICAgICAgdGhpcy5kcm9wZG93bi5jbG9zZSgpO1xyXG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIGlmIChlLnN0b3BQcm9wYWdhdGlvbigpID09IHVuZGVmaW5lZCkge1xyXG4gICAgICAvLyAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgLy8gfVxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5zZXJjaEJveCkge1xyXG4gICAgICAgICAgdGhpcy5zZXJjaEJveC5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSwgMCk7XHJcbiAgICB9XHJcblxyXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZUtleUV2ZW50U2VhcmNoKGU6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpIHtcclxuICAgICAgdGhpcy5kcm9wZG93bi5jbG9zZSgpO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLnRleHRCb3hTZWxlY3RCb3guZm9jdXMoKTtcclxuICAgICAgfSwgMCk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmIChlLmtleSA9PT0gJ0VzY2FwZScpIHtcclxuICAgICAgdGhpcy50ZXh0ID0gbnVsbDtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy50ZXh0Qm94U2VsZWN0Qm94LmZvY3VzKCk7XHJcbiAgICAgIH0sIDApO1xyXG4gICAgfVxyXG4gICAgaWYgKChlLmtleSA9PT0gJ0Fycm93RG93bicgfHwgZS5rZXkgPT09ICdBcnJvd1VwJykgJiYgdGhpcy5nZXRJdGVtcygpLmxlbmd0aCA+IDAgJiYgZS50eXBlID09PSAna2V5ZG93bicpIHtcclxuICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ3NpbmdsZScpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXggPSB0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXggKyAoZS5rZXkgPT09ICdBcnJvd0Rvd24nID8gMSA6IC0xKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUJ5SW5kZXgodGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAodGhpcy5kcm9wZG93bi5pc09wZW4pIHtcclxuICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRJbmRleChlLmtleSA9PT0gJ0Fycm93RG93bicgPyAxIDogLTEpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmRyb3Bkb3duLm9wZW4oKTtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZXJjaEJveCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VyY2hCb3guZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBpZiAoZS5rZXkgPT0gJ0VudGVyJyAmJiB0aGlzLmRyb3Bkb3duLmlzT3BlbiAmJiB0aGlzLm1vZGUgPT0gJ3NpbmdsZScpIHtcclxuICAgIC8vICAgICB0aGlzLmRyb3Bkb3duLmNsb3NlKCk7XHJcbiAgICAvLyAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAvLyAgICAgICAgIHRoaXMuZHJvcGRvd24uZm9jdXMoKTtcclxuICAgIC8vICAgICB9LCAwKTtcclxuICAgIC8vIH1cclxuICAgIC8vZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIC8vZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuICAgIGlmIChlLnR5cGUgPT09ICdrZXlkb3duJyAmJiBlLmtleSA9PSAnRW50ZXInICYmIHRoaXMuZHJvcGRvd24uaXNPcGVuKSB7XHJcbiAgICAgIGlmICghdGhpcy5yZW1vdGVPcGVyYXRpb24gJiYgdGhpcy50ZXh0ICYmIHRoaXMudGV4dCAhPT0gJycpIHtcclxuICAgICAgICB0aGlzLml0ZW1zRmlsdGVyZWQgPSB0aGlzLml0ZW1zLmZpbHRlcigoYykgPT4gKGNbdGhpcy50ZXh0RmllbGRdIGFzIHN0cmluZykudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnRleHQudG9Mb3dlckNhc2UoKSkpO1xyXG4gICAgICAgIGlmICh0aGlzLml0ZW1zRmlsdGVyZWQubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXggPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLml0ZW1zRmlsdGVyZWQgPSB0aGlzLml0ZW1zO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLmZpbHRlcigoYykgPT4gY1t0aGlzLnZhbHVlRmllbGRdID09PSB0aGlzLml0ZW1zRmlsdGVyZWRbdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4XVt0aGlzLnZhbHVlRmllbGRdKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgdGhpcy5tb2RlID09ICdtdWx0aXBsZSdcclxuICAgICAgKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYWxsb3dOdWxsID09IHRydWUgfHwgKHRoaXMuYWxsb3dOdWxsID09IGZhbHNlICYmIHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAxKSkge1xyXG4gICAgICAgICAgaWYgKCF0aGlzLnJlbW90ZU9wZXJhdGlvbiAmJiB0aGlzLnRleHQgJiYgdGhpcy50ZXh0ICE9PSAnJykge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgIChjKSA9PlxyXG4gICAgICAgICAgICAgICAgYyAhPT1cclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMuZmlsdGVyKChjKSA9PiAoY1t0aGlzLnRleHRGaWVsZF0gYXMgc3RyaW5nKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMudGV4dC50b0xvd2VyQ2FzZSgpKSlbdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4XVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5zZWxlY3RlZEl0ZW1zLmZpbHRlcigoYykgPT4gY1t0aGlzLnZhbHVlRmllbGRdICE9PSB0aGlzLml0ZW1zW3RoaXMuY3VycmVudGZvY3VzZWRJbmRleF1bdGhpcy52YWx1ZUZpZWxkXSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmVtaXRTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZSA9PSAnbXVsdGlwbGUnKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4ICE9IC0xKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5yZW1vdGVPcGVyYXRpb24gJiYgdGhpcy50ZXh0ICYmIHRoaXMudGV4dCAhPT0gJycpIHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5pdGVtc0ZpbHRlcmVkLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2godGhpcy5pdGVtc0ZpbHRlcmVkWzBdKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2godGhpcy5pdGVtc0ZpbHRlcmVkW3RoaXMuY3VycmVudGZvY3VzZWRJbmRleF0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaCh0aGlzLml0ZW1zW3RoaXMuY3VycmVudGZvY3VzZWRJbmRleF0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdFNlbGVjdGlvbkNoYW5nZWRFdmVudCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAodGhpcy50ZXh0ICYmIHRoaXMuaXRlbXNGaWx0ZXJlZD8ubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRJdGVtcyh0aGlzLml0ZW1zRmlsdGVyZWQsIHRydWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoaXMubW9kZSA9PSAnc2luZ2xlJykge1xyXG4gICAgICAgICAgICB0aGlzLmRyb3Bkb3duLmNsb3NlKCk7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMudGV4dEJveFNlbGVjdEJveC5mb2N1cygpO1xyXG4gICAgICAgICAgICB9LCAwKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBpc0NoYXIoc3RyOiBzdHJpbmcpIHtcclxuICAgIGlmIChcclxuICAgICAgc3RyLmluY2x1ZGVzKCdTaGlmdCcpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnVGFiJykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdDb250cm9sJykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdBbHQnKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ0NhcHNMb2NrJykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdNZXRhJykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdDb250ZXh0TWVudScpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnRW50ZXInKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ0JhY2tzcGFjZScpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnUHJpbnRTY3JlZW4nKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ1Njcm9sbExvY2snKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ1BhdXNlJykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdIb21lJykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdFbmQnKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ0luc2VydCcpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnUGFnZVVwJykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdEZWxldGUnKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ1BhZ2VEb3duJykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdOdW1Mb2NrJykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdFc2NhcGUnKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ0Fycm93JykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCfZkUYxJykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdGMicpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnRjMnKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ0Y0JykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdGNScpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnRjYnKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ0Y3JykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdGOCcpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnRjknKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ0YxMCcpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnRjExJykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdGMTInKVxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlS2V5RXZlbnQoZTogYW55KSB7XHJcbiAgICAvLyBjb25zdCBOdW1iZXJNaW51c1BhdHRlcm4gPSAvW2EtekEtWjAtOVxcLV0vZztcclxuICAgIC8vIGNvbnN0IEZhcnNpID0gL1vZvtqG2KzYrdiu2YfYudi62YHZgtir2LXYtti02LPbjNio2YTYp9iq2YbZhdqp2q/ZiNim2K/YsNix2LLYt9i42pjYpNil2KPYodmL2YzZjdmO2Y/ZkNmRXFxzXSskLztcclxuICAgIC8vICBjb25zdCBpbnB1dENoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGUuY2hhckNvZGUpO1xyXG4gICAgLy8gY29uc3QgcGF0dGVybkVuID0gL15bYS16QS1aMC05XSokLztcclxuICAgIC8vIGNvbnN0IHBhdHRlcm4gPSAvXltcXHUwNjAwLVxcdTA2RkZcXHNdKyQvO1xyXG4gICAgY29uc3QgaW5wdXRDaGFyID0gZS5rZXk7XHJcbiAgICBpZiAoXHJcbiAgICAgIChpbnB1dENoYXIgIT0gJ0JhY2tzcGFjZScgJiZcclxuICAgICAgICBpbnB1dENoYXIgIT0gJ0JhY2tzcGFjZScgJiZcclxuICAgICAgICBpbnB1dENoYXIgIT0gJ1RhYicgJiZcclxuICAgICAgICBpbnB1dENoYXIgIT0gJ0VudGVyJyAmJlxyXG4gICAgICAgIGlucHV0Q2hhciAhPSAnRXNjYXBlJyAmJlxyXG4gICAgICAgIGlucHV0Q2hhciAhPSAnQXJyb3dEb3duJyAmJlxyXG4gICAgICAgIGlucHV0Q2hhciAhPSAnQXJyb3dVcCcpIHx8XHJcbiAgICAgIGUuY29kZSA9PT0gJ1NwYWNlJyB8fFxyXG4gICAgICBlLmN0cmxLZXkgPT0gdHJ1ZVxyXG4gICAgKSB7XHJcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgZS5rZXkgPT09ICdCYWNrc3BhY2UnICYmXHJcbiAgICAgIGUudHlwZSA9PT0gJ2tleWRvd24nICYmXHJcbiAgICAgICgodGhpcy5hbGxvd051bGwgPT09IHRydWUgJiYgdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDApIHx8ICh0aGlzLmFsbG93TnVsbCA9PT0gZmFsc2UgJiYgdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDEpKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5wb3AoKTtcclxuICAgICAgdGhpcy5lbWl0U2VsZWN0aW9uQ2hhbmdlZEV2ZW50KCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSB7XHJcbiAgICAgIHRoaXMuZHJvcGRvd24uY2xvc2UoKTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy50ZXh0Qm94U2VsZWN0Qm94LmZvY3VzKCk7XHJcbiAgICAgIH0sIDApO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBjb25zdCBJTlBVVCA9IFN0cmluZy5mcm9tQ2hhckNvZGUoZS5rZXlDb2RlKTtcclxuICAgIGlmICh0aGlzLmlzQ2hhcihlLmtleSkgJiYgdGhpcy5hbGxvd1NlYXJjaCAmJiBlLmN0cmxLZXkgPT0gZmFsc2UpIHtcclxuICAgICAgdGhpcy5kcm9wZG93bi5vcGVuKCk7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnNlcmNoQm94KSB7XHJcbiAgICAgICAgICB0aGlzLnNlcmNoQm94LmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCAwKTtcclxuICAgICAgdGhpcy50ZXh0ID0gZS5rZXk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGUua2V5ID09PSAnRXNjYXBlJykge1xyXG4gICAgICB0aGlzLnRleHQgPSBudWxsO1xyXG4gICAgICB0aGlzLmRyb3Bkb3duLmNsb3NlKCk7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudGV4dEJveFNlbGVjdEJveC5mb2N1cygpO1xyXG4gICAgICB9LCAwKTtcclxuICAgIH1cclxuICAgIGlmICgoZS5rZXkgPT09ICdBcnJvd0Rvd24nIHx8IGUua2V5ID09PSAnQXJyb3dVcCcpICYmIHRoaXMuZ2V0SXRlbXMoKS5sZW5ndGggPiAwICYmIGUudHlwZSA9PT0gJ2tleWRvd24nKSB7XHJcbiAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdzaW5nbGUnKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1CeUluZGV4KHRoaXMuY3VycmVudGZvY3VzZWRJbmRleCArIChlLmtleSA9PT0gJ0Fycm93RG93bicgPyAxIDogLTEpKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAodGhpcy5kcm9wZG93bi5pc09wZW4pIHtcclxuICAgICAgICAgIC8vICB0aGlzLnNldFNlbGVjdGVkSW5kZXgoKGUua2V5ID09PSAnQXJyb3dEb3duJyA/IDEgOiAtMSkpO1xyXG4gICAgICAgICAgaWYgKHRoaXMuYWxsb3dTZWFyY2ggPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZEluZGV4KGUua2V5ID09PSAnQXJyb3dEb3duJyA/IDEgOiAtMSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5zZXJjaEJveCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXJjaEJveC5mb2N1cygpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZHJvcGRvd24ub3BlbigpO1xyXG4gICAgICAgICAgaWYgKHRoaXMuYWxsb3dTZWFyY2ggPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5zZXJjaEJveCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXJjaEJveC5mb2N1cygpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuYWxsb3dTZWFyY2ggPT09IGZhbHNlKSB7XHJcbiAgICAgIGlmIChlLnR5cGUgPT09ICdrZXlkb3duJyAmJiBlLmtleSA9PSAnRW50ZXInICYmIHRoaXMuZHJvcGRvd24uaXNPcGVuKSB7XHJcbiAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKChjKSA9PiBjW3RoaXMudmFsdWVGaWVsZF0gPT09IHRoaXMuaXRlbXNGaWx0ZXJlZFt0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXhdW3RoaXMudmFsdWVGaWVsZF0pLmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgIHRoaXMubW9kZSA9PSAnbXVsdGlwbGUnXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5hbGxvd051bGwgPT0gdHJ1ZSB8fCAodGhpcy5hbGxvd051bGwgPT0gZmFsc2UgJiYgdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDEpKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5yZW1vdGVPcGVyYXRpb24gJiYgdGhpcy50ZXh0ICYmIHRoaXMudGV4dCAhPT0gJycpIHtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgKGMpID0+XHJcbiAgICAgICAgICAgICAgICAgIGMgIT09XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMuZmlsdGVyKChjKSA9PiAoY1t0aGlzLnRleHRGaWVsZF0gYXMgc3RyaW5nKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMudGV4dC50b0xvd2VyQ2FzZSgpKSlbdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4XVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5zZWxlY3RlZEl0ZW1zLmZpbHRlcigoYykgPT4gY1t0aGlzLnZhbHVlRmllbGRdICE9PSB0aGlzLml0ZW1zW3RoaXMuY3VycmVudGZvY3VzZWRJbmRleF1bdGhpcy52YWx1ZUZpZWxkXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5lbWl0U2VsZWN0aW9uQ2hhbmdlZEV2ZW50KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmICh0aGlzLm1vZGUgPT0gJ211bHRpcGxlJykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4ICE9IC0xKSB7XHJcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLnJlbW90ZU9wZXJhdGlvbiAmJiB0aGlzLnRleHQgJiYgdGhpcy50ZXh0ICE9PSAnJykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXRlbXNGaWx0ZXJlZC5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2godGhpcy5pdGVtc0ZpbHRlcmVkWzBdKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5wdXNoKHRoaXMuaXRlbXNGaWx0ZXJlZFt0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXhdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2godGhpcy5pdGVtc1t0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXhdKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdGhpcy5lbWl0U2VsZWN0aW9uQ2hhbmdlZEV2ZW50KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRleHQgJiYgdGhpcy5pdGVtc0ZpbHRlcmVkLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRJdGVtcyh0aGlzLml0ZW1zRmlsdGVyZWQsIHRydWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm1vZGUgPT0gJ3NpbmdsZScpIHtcclxuICAgICAgICAgICAgICB0aGlzLmRyb3Bkb3duLmNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRleHRCb3hTZWxlY3RCb3guZm9jdXMoKTtcclxuICAgICAgICAgICAgICB9LCAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgZm9jdXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLnRleHRib3guZm9jdXMoKTtcclxuICB9XHJcblxyXG4gIHNlbGVjdGVkSXRlbUJ5SW5kZXgoaW5kZXg6IG51bWJlcikge1xyXG4gICAgbGV0IGl0ZW0gPSBbXTtcclxuICAgIGlmICghdGhpcy5yZW1vdGVPcGVyYXRpb24gJiYgdGhpcy50ZXh0ICYmIHRoaXMudGV4dCAhPT0gJycpIHtcclxuICAgICAgdGhpcy5pdGVtc0ZpbHRlcmVkID0gdGhpcy5pdGVtcy5maWx0ZXIoKGMpID0+IChjW3RoaXMudGV4dEZpZWxkXSBhcyBzdHJpbmcpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy50ZXh0LnRvTG93ZXJDYXNlKCkpKTtcclxuXHJcbiAgICAgIGl0ZW0gPSB0aGlzLml0ZW1zRmlsdGVyZWRbaW5kZXhdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaXRlbSA9IHRoaXMuaXRlbXNbaW5kZXhdO1xyXG4gICAgfVxyXG4gICAgLy9cclxuICAgIC8vICBjb25zdCBpdGVtID0gdGhpcy50ZXh0ID8gdGhpcy5pdGVtcy5maWx0ZXIoKGMpID0+IChjW3RoaXMudGV4dEZpZWxkXSBhcyBzdHJpbmcpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy50ZXh0LnRvTG93ZXJDYXNlKCkpKVtpbmRleF0gOiB0aGlzLml0ZW1zW2luZGV4XTtcclxuICAgIGlmIChpdGVtKSB7XHJcbiAgICAgIHRoaXMuc2V0U2VsZWN0ZWRJdGVtcyhbaXRlbV0sIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2V0U2VsZWN0ZWRJbmRleCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0SXRlbXMoKTogYW55W10ge1xyXG4gICAgaWYgKHRoaXMuaXRlbXMgPT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgICByZXR1cm4gIXRoaXMucmVtb3RlT3BlcmF0aW9uICYmIHRoaXMudGV4dCAmJiB0aGlzLnRleHQgIT09ICcnXHJcbiAgICAgID8gdGhpcy5pdGVtcy5maWx0ZXIoKGMpID0+IChjW3RoaXMudGV4dEZpZWxkXSBhcyBzdHJpbmcpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy50ZXh0LnRvTG93ZXJDYXNlKCkpKVxyXG4gICAgICA6IHRoaXMuaXRlbXM7XHJcbiAgfVxyXG5cclxuICBpc0l0ZW1TZWxlY3RlZChpdGVtOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkSXRlbXMgJiYgdGhpcy5zZWxlY3RlZEl0ZW1zLmZpbHRlcigoYykgPT4gY1t0aGlzLnZhbHVlRmllbGRdID09PSBpdGVtW3RoaXMudmFsdWVGaWVsZF0pLmxlbmd0aCA+IDA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGl0ZW1zU3RhdHVzT2JzZXJ2ZXI6IGFueTtcclxuICBwcml2YXRlIHdhaXRGb3JEYXRhKGNhbGxiYWNrZm46ICgpID0+IHZvaWQpIHtcclxuICAgIGlmICh0aGlzLml0ZW1zICYmIHRoaXMuaXRlbXMubGVuZ3RoKSB7XHJcbiAgICAgIGNhbGxiYWNrZm4oKTtcclxuICAgIH0gZWxzZSBpZiAoIXRoaXMuaXRlbXNTdGF0dXNPYnNlcnZlcikge1xyXG4gICAgICBPYnNlcnZhYmxlLmNyZWF0ZSgob2JzZXJ2ZXIpID0+IHtcclxuICAgICAgICB0aGlzLml0ZW1zU3RhdHVzT2JzZXJ2ZXIgPSBvYnNlcnZlcjtcclxuICAgICAgfSlcclxuICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoMTAwKSlcclxuICAgICAgICAucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKGMpID0+IHtcclxuICAgICAgICAgIGNhbGxiYWNrZm4oKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGF4LWRyb3AtZG93biAjZCBbc2l6ZV09XCJzaXplXCIgW2ZpdFBhcmVudF09XCJmaXRQYXJlbnRcIiBbZHJvcGRvd25XaWR0aF09XCJkcm9wZG93bldpZHRoXCIgW3J0bF09XCJydGxcIlxyXG4gICAgW3Nob3dEcm9wRG93bkJ1dHRvbl09XCJzaG93RHJvcERvd25CdXR0b25cIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxyXG4gICAgKGRyb3Bkb3duVG9nZ2xlKT1cImRyb3Bkb3duVG9nZ2xlU2VsZWNCb3goJGV2ZW50KVwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciBzdGFydD5cclxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbc3RhcnRdXCI+XHJcbiAgICAgICAgPC9uZy1jb250ZW50PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8bmctY29udGFpbmVyIGhlYWRlcj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXggY2hpcHMtY29udGFpbmVyXCIgW2hvcml6b250YWxTY3JvbGxdPVwiNDBcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXBzXCIgW2NsYXNzLmNoaXBzLWJsYW5rXT1cIm1vZGUgPT09ICdzaW5nbGUnXCIgW3RpdGxlXT1cIml0ZW1bdGV4dEZpZWxkXVwiXHJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBzZWxlY3RlZEl0ZW1zXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBzLXRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsnd2lkdGgnOiBpdGVtW3RleHRGaWVsZF0ubGVuZ3RoID4gMTUgJiYgdGhpcy5tb2RlID09PSdtdWx0aXBsZScgPyAnMTEwcHgnIDogJ2F1dG8nfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGl0ZW1bdGV4dEZpZWxkXSB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjbG9zZS1pY29uXCIgKGNsaWNrKT1cImhhbmRsZUl0ZW1SZW1vdmVDbGljayhpdGVtKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIocmVhZG9ubHkhPXRydWUgfHwgaXRlbVJlbW92ZSA9PXRydWUpJiYgZGlzYWJsZWQhPXRydWUgJiYgKGFsbG93TnVsbD09dHJ1ZSB8fCAoc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAxKSlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhciBmYS10aW1lcyBjbG9zZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtd3JhcHBlclwiIChjbGljayk9XCJvblRleHRCb3hDbGljaygkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICA8YXgtdGV4dC1ib3ggI3RleHRCb3hTZWxlY3RCb3ggW3RleHRBbGlnbl09XCJ0ZXh0QWxpZ25cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJzZWxlY3RlZEl0ZW1zLmxlbmd0aCA9PSAwID8gcGxhY2Vob2xkZXIgOiAnJ1wiIFtyZWFkb25seV09XCJyZWFkb25seVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgKG9ua2V5KT1cImhhbmRsZUtleUV2ZW50KCRldmVudClcIiBbc2l6ZV09XCJzaXplXCJcclxuICAgICAgICAgICAgICAgICAgICAob25Gb2N1cyk9XCJvbkZvY3VzVGV4dEJveCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICA8L2F4LXRleHQtYm94PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPG5nLWNvbnRhaW5lciBlbmQ+XHJcbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2VuZF1cIj5cclxuICAgICAgICA8L25nLWNvbnRlbnQ+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8bmctY29udGFpbmVyIHBhbmVsPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJhbGxvd1NlYXJjaFwiIGNsYXNzPVwic2VhcmNoLXdyYXBwZXJcIiBzdHlsZT1cInBhZGRpbmc6IDAuN2VtO1wiPlxyXG4gICAgICAgICAgICA8YXgtc2VhcmNoLWJveCAjc2VyY2hCb3ggWyh2YWx1ZSldPVwidGV4dFwiIChvbmtleSk9XCJoYW5kbGVLZXlFdmVudFNlYXJjaCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICh0ZXh0Q2hhbmdlZCk9XCJ0ZXh0Q2hhbmdlZCgkZXZlbnQpXCIgKG9uQnV0dG9uQ2xpY2spPVwidGV4dENoYW5nZWQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICA8L2F4LXNlYXJjaC1ib3g+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImF4IGxpc3QtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgI2xpc3RDb250YWluZXIgY2xhc3M9XCJsaXN0LWNvbnRhaW5lci1pdGVtc1wiIChzY3JvbGwpPVwic2Nyb2xsZWQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldEl0ZW1zKCkubGVuZ3RoPjA7IHRoZW4gdGhlblRlbXBsYXRlOyBlbHNlIGVsc2VUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN0aGVuVGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbY2xhc3MuYXgtc3RhdGUtZGlzYWJsZWRdPVwiaXNJdGVtRGlzYWJsZWQoaXRlbSlcIiBjbGFzcz1cImxpc3QtaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdldEl0ZW1zKCk7bGV0IGkgPSBpbmRleFwiIFtjbGFzcy5mb2N1c2VkXT1cImk9PWN1cnJlbnRmb2N1c2VkSW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwiaXNJdGVtU2VsZWN0ZWQoaXRlbSlcIiAoY2xpY2spPVwiaGFuZGxlSXRlbUNsaWNrKCRldmVudCxpdGVtKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxheC1jaGVjay1ib3ggKm5nSWY9XCJzaG93Q2hlY2tCb3hcIiBbc2l6ZV09XCJzaXplXCIgW3ZhbHVlXT1cImlzSXRlbVNlbGVjdGVkKGl0ZW0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiKCFhbGxvd051bGwgJiYgc2VsZWN0ZWRJdGVtcy5sZW5ndGggPT09IDEgJiYgaXNJdGVtU2VsZWN0ZWQoaXRlbSkpIHx8IGlzSXRlbURpc2FibGVkKGl0ZW0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25DbGljayk9XCJoYW5kbGVJdGVtQ2xpY2soJGV2ZW50LGl0ZW0pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2F4LWNoZWNrLWJveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3dUZW1wbGF0ZTsgZWxzZSBlbHNlVGVtcGxhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwid2hpdGUtc3BhY2U6IG5vd3JhcDt0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztvdmVyZmxvdzogaGlkZGVuO2ZsZXg6IDE7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIml0ZW1bdGV4dEZpZWxkXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIihzaG93Q2hlY2tCb3gpID8geydwYWRkaW5nLWlubGluZS1zdGFydCc6ICcwLjVyZW0nfTonJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicm93VGVtcGxhdGU7IGNvbnRleHQ6eyAkaW1wbGljaXQ6IGl0ZW0gfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZWxzZVRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ3aGl0ZS1zcGFjZTogbm93cmFwO3RleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO292ZXJmbG93OiBoaWRkZW47ZmxleDogMTtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiaXRlbVt0ZXh0RmllbGRdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiKHNob3dDaGVja0JveCkgPyB7J3BhZGRpbmctaW5saW5lLXN0YXJ0JzogJzAuNXJlbSd9OicnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW1bdGV4dEZpZWxkXSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dMb2FkaW5nXCIgY2xhc3M9XCJheC1wYWQtc21cIiBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhciBmYS1zcGlubmVyLXRoaXJkIGZhLXB1bHNlIGZhLTJ4XCIgc3R5bGU9XCJjb2xvcjogdmFyKC0tYXgtcHJpbWFyeS1jb2xvcik7XCI+PC9pPlxyXG5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8YXgtbG9hZGluZy1pbmRpY2F0b3IgPjwvYXgtbG9hZGluZy1pbmRpY2F0b3I+IC0tPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNlbHNlVGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dMb2FkaW5nID09IHRydWU7IHRoZW4gc2VhcmNoVGVtcGxhdGUgZWxzZSBub0RhdGFUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2VhcmNoVGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7J2NvbW1vbi5zZWFyY2gnIHwgdHJhbnN9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9EYXRhVGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7J2NvbW1vbi5ub0RhdGFGb3VuZCcgfCB0cmFuc319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuPC9heC1kcm9wLWRvd24+Il19