@ng-nest/ui 17.0.0 → 17.0.2

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 (661) hide show
  1. package/affix/affix.component.d.ts +1 -2
  2. package/affix/affix.module.d.ts +1 -3
  3. package/alert/alert.component.d.ts +4 -5
  4. package/alert/alert.module.d.ts +1 -8
  5. package/anchor/anchor-inner.component.d.ts +1 -1
  6. package/anchor/anchor.component.d.ts +6 -7
  7. package/anchor/anchor.module.d.ts +2 -6
  8. package/api/api.component.d.ts +4 -4
  9. package/api/api.module.d.ts +1 -2
  10. package/auto-complete/auto-complete-portal.component.d.ts +3 -5
  11. package/auto-complete/auto-complete.component.d.ts +12 -13
  12. package/auto-complete/auto-complete.module.d.ts +1 -9
  13. package/avatar/avatar-group.component.d.ts +1 -2
  14. package/avatar/avatar.component.d.ts +6 -7
  15. package/avatar/avatar.module.d.ts +2 -6
  16. package/back-top/back-top.component.d.ts +7 -12
  17. package/back-top/back-top.module.d.ts +1 -5
  18. package/badge/badge.component.d.ts +3 -8
  19. package/badge/badge.module.d.ts +1 -3
  20. package/base-form/base-form.component.d.ts +1 -1
  21. package/base-form/base-form.module.d.ts +1 -2
  22. package/border/border.component.d.ts +4 -4
  23. package/border/border.module.d.ts +1 -1
  24. package/button/button.component.d.ts +8 -10
  25. package/button/button.module.d.ts +1 -5
  26. package/button/buttons.component.d.ts +4 -5
  27. package/calendar/calendar.component.d.ts +9 -13
  28. package/calendar/calendar.module.d.ts +1 -10
  29. package/card/card.component.d.ts +2 -6
  30. package/card/card.module.d.ts +1 -5
  31. package/carousel/carousel-panel.component.d.ts +10 -13
  32. package/carousel/carousel.component.d.ts +4 -7
  33. package/carousel/carousel.module.d.ts +1 -5
  34. package/cascade/cascade-portal.component.d.ts +4 -5
  35. package/cascade/cascade.component.d.ts +14 -13
  36. package/cascade/cascade.module.d.ts +1 -9
  37. package/checkbox/checkbox.component.d.ts +6 -8
  38. package/checkbox/checkbox.module.d.ts +1 -8
  39. package/collapse/collapse-panel.component.d.ts +5 -8
  40. package/collapse/collapse.component.d.ts +3 -7
  41. package/collapse/collapse.module.d.ts +1 -5
  42. package/color/color.component.d.ts +4 -5
  43. package/color/color.module.d.ts +1 -3
  44. package/color-picker/color-picker-portal.component.d.ts +7 -11
  45. package/color-picker/color-picker.component.d.ts +11 -12
  46. package/color-picker/color-picker.module.d.ts +1 -11
  47. package/comment/comment-reply.component.d.ts +4 -9
  48. package/comment/comment.component.d.ts +5 -9
  49. package/comment/comment.module.d.ts +1 -11
  50. package/container/aside.component.d.ts +5 -5
  51. package/container/container.component.d.ts +2 -3
  52. package/container/container.module.d.ts +1 -3
  53. package/container/footer.component.d.ts +5 -7
  54. package/container/header.component.d.ts +5 -7
  55. package/container/main.component.d.ts +4 -4
  56. package/crumb/crumb.component.d.ts +4 -5
  57. package/crumb/crumb.module.d.ts +1 -5
  58. package/date-picker/date-picker-portal.component.d.ts +5 -9
  59. package/date-picker/date-picker.component.d.ts +14 -16
  60. package/date-picker/date-picker.module.d.ts +2 -21
  61. package/date-picker/date-quarter.pipe.d.ts +1 -1
  62. package/date-picker/date-range-portal.component.d.ts +1 -1
  63. package/date-picker/date-range.component.d.ts +16 -18
  64. package/date-picker/picker-date.component.d.ts +8 -11
  65. package/date-picker/picker-month.component.d.ts +8 -11
  66. package/date-picker/picker-quarter.component.d.ts +9 -14
  67. package/date-picker/picker-year.component.d.ts +5 -8
  68. package/description/description-item.component.d.ts +1 -2
  69. package/description/description.component.d.ts +4 -5
  70. package/description/description.module.d.ts +2 -5
  71. package/dialog/dialog-container.component.d.ts +1 -2
  72. package/dialog/dialog-portal.component.d.ts +1 -1
  73. package/dialog/dialog-portal.directives.d.ts +13 -17
  74. package/dialog/dialog.component.d.ts +15 -17
  75. package/dialog/dialog.module.d.ts +1 -14
  76. package/dialog/dialog.service.d.ts +8 -10
  77. package/doc/doc.component.d.ts +6 -6
  78. package/doc/doc.module.d.ts +1 -2
  79. package/drag/drag.directive.d.ts +5 -6
  80. package/drag/drag.module.d.ts +1 -2
  81. package/drawer/drawer-container.component.d.ts +1 -2
  82. package/drawer/drawer-portal.component.d.ts +1 -2
  83. package/drawer/drawer-portal.directives.d.ts +5 -6
  84. package/drawer/drawer.component.d.ts +10 -15
  85. package/drawer/drawer.module.d.ts +2 -8
  86. package/drawer/drawer.service.d.ts +5 -7
  87. package/dropdown/dropdown-portal.component.d.ts +1 -1
  88. package/dropdown/dropdown.component.d.ts +10 -13
  89. package/dropdown/dropdown.module.d.ts +1 -7
  90. package/empty/empty.component.d.ts +4 -7
  91. package/empty/empty.module.d.ts +1 -6
  92. package/esm2022/affix/affix.component.mjs +10 -10
  93. package/esm2022/affix/affix.module.mjs +4 -7
  94. package/esm2022/alert/alert.component.mjs +26 -18
  95. package/esm2022/alert/alert.module.mjs +4 -12
  96. package/esm2022/alert/alert.property.mjs +1 -1
  97. package/esm2022/anchor/anchor-inner.component.mjs +3 -2
  98. package/esm2022/anchor/anchor.component.mjs +21 -21
  99. package/esm2022/anchor/anchor.module.mjs +4 -9
  100. package/esm2022/anchor/anchor.property.mjs +1 -1
  101. package/esm2022/api/api.component.mjs +13 -11
  102. package/esm2022/api/api.module.mjs +4 -6
  103. package/esm2022/auto-complete/auto-complete-portal.component.mjs +14 -15
  104. package/esm2022/auto-complete/auto-complete.component.mjs +43 -30
  105. package/esm2022/auto-complete/auto-complete.module.mjs +5 -14
  106. package/esm2022/avatar/avatar-group.component.mjs +6 -6
  107. package/esm2022/avatar/avatar.component.mjs +17 -18
  108. package/esm2022/avatar/avatar.module.mjs +4 -9
  109. package/esm2022/avatar/avatar.property.mjs +1 -1
  110. package/esm2022/back-top/back-top.component.mjs +25 -29
  111. package/esm2022/back-top/back-top.module.mjs +4 -9
  112. package/esm2022/badge/badge.component.mjs +18 -22
  113. package/esm2022/badge/badge.module.mjs +4 -7
  114. package/esm2022/base-form/base-form.component.mjs +9 -4
  115. package/esm2022/base-form/base-form.module.mjs +4 -5
  116. package/esm2022/base-form/base-form.property.mjs +1 -1
  117. package/esm2022/border/border.component.mjs +13 -11
  118. package/esm2022/border/border.module.mjs +3 -3
  119. package/esm2022/button/button.component.mjs +19 -23
  120. package/esm2022/button/button.module.mjs +4 -9
  121. package/esm2022/button/button.property.mjs +1 -1
  122. package/esm2022/button/buttons.component.mjs +15 -14
  123. package/esm2022/calendar/calendar.component.mjs +35 -25
  124. package/esm2022/calendar/calendar.module.mjs +4 -14
  125. package/esm2022/card/card.component.mjs +14 -16
  126. package/esm2022/card/card.module.mjs +4 -9
  127. package/esm2022/carousel/carousel-panel.component.mjs +37 -33
  128. package/esm2022/carousel/carousel.component.mjs +19 -22
  129. package/esm2022/carousel/carousel.module.mjs +5 -10
  130. package/esm2022/carousel/carousel.property.mjs +1 -1
  131. package/esm2022/cascade/cascade-portal.component.mjs +19 -17
  132. package/esm2022/cascade/cascade.component.mjs +37 -30
  133. package/esm2022/cascade/cascade.module.mjs +5 -14
  134. package/esm2022/checkbox/checkbox.component.mjs +31 -23
  135. package/esm2022/checkbox/checkbox.module.mjs +4 -12
  136. package/esm2022/collapse/collapse-panel.component.mjs +19 -20
  137. package/esm2022/collapse/collapse.component.mjs +11 -14
  138. package/esm2022/collapse/collapse.module.mjs +4 -9
  139. package/esm2022/color/color.component.mjs +15 -16
  140. package/esm2022/color/color.module.mjs +4 -7
  141. package/esm2022/color-picker/color-picker-portal.component.mjs +53 -35
  142. package/esm2022/color-picker/color-picker.component.mjs +36 -35
  143. package/esm2022/color-picker/color-picker.module.mjs +5 -42
  144. package/esm2022/comment/comment-reply.component.mjs +18 -18
  145. package/esm2022/comment/comment.component.mjs +32 -24
  146. package/esm2022/comment/comment.module.mjs +4 -41
  147. package/esm2022/comment/comment.property.mjs +1 -1
  148. package/esm2022/container/aside.component.mjs +15 -12
  149. package/esm2022/container/container.component.mjs +14 -13
  150. package/esm2022/container/container.module.mjs +5 -35
  151. package/esm2022/container/footer.component.mjs +17 -20
  152. package/esm2022/container/header.component.mjs +17 -20
  153. package/esm2022/container/main.component.mjs +14 -11
  154. package/esm2022/core/config/config.service.mjs +8 -3
  155. package/esm2022/core/services/preloading-strategy.service.mjs +4 -3
  156. package/esm2022/crumb/crumb.component.mjs +15 -15
  157. package/esm2022/crumb/crumb.module.mjs +4 -9
  158. package/esm2022/date-picker/date-picker-portal.component.mjs +36 -27
  159. package/esm2022/date-picker/date-picker.component.mjs +51 -46
  160. package/esm2022/date-picker/date-picker.module.mjs +5 -106
  161. package/esm2022/date-picker/date-quarter.pipe.mjs +3 -3
  162. package/esm2022/date-picker/date-range-portal.component.mjs +22 -11
  163. package/esm2022/date-picker/date-range.component.mjs +53 -51
  164. package/esm2022/date-picker/picker-date.component.mjs +44 -38
  165. package/esm2022/date-picker/picker-month.component.mjs +30 -28
  166. package/esm2022/date-picker/picker-quarter.component.mjs +30 -30
  167. package/esm2022/date-picker/picker-year.component.mjs +25 -23
  168. package/esm2022/description/description-item.component.mjs +7 -9
  169. package/esm2022/description/description.component.mjs +13 -13
  170. package/esm2022/description/description.module.mjs +4 -8
  171. package/esm2022/dialog/dialog-container.component.mjs +8 -7
  172. package/esm2022/dialog/dialog-portal.component.mjs +27 -11
  173. package/esm2022/dialog/dialog-portal.directives.mjs +39 -39
  174. package/esm2022/dialog/dialog-ref.mjs +1 -1
  175. package/esm2022/dialog/dialog.component.mjs +40 -47
  176. package/esm2022/dialog/dialog.module.mjs +11 -69
  177. package/esm2022/dialog/dialog.service.mjs +15 -16
  178. package/esm2022/doc/doc.component.mjs +12 -9
  179. package/esm2022/doc/doc.module.mjs +4 -6
  180. package/esm2022/drag/drag.directive.mjs +10 -10
  181. package/esm2022/drag/drag.module.mjs +4 -6
  182. package/esm2022/drawer/drawer-container.component.mjs +8 -7
  183. package/esm2022/drawer/drawer-portal.component.mjs +12 -11
  184. package/esm2022/drawer/drawer-portal.directives.mjs +17 -16
  185. package/esm2022/drawer/drawer.component.mjs +23 -32
  186. package/esm2022/drawer/drawer.module.mjs +9 -25
  187. package/esm2022/drawer/drawer.service.mjs +14 -14
  188. package/esm2022/dropdown/dropdown-portal.component.mjs +7 -5
  189. package/esm2022/dropdown/dropdown.component.mjs +31 -24
  190. package/esm2022/dropdown/dropdown.module.mjs +5 -12
  191. package/esm2022/empty/empty.component.mjs +21 -17
  192. package/esm2022/empty/empty.module.mjs +4 -10
  193. package/esm2022/examples/examples.component.mjs +12 -9
  194. package/esm2022/examples/examples.module.mjs +4 -6
  195. package/esm2022/find/find.component.mjs +48 -29
  196. package/esm2022/find/find.module.mjs +4 -52
  197. package/esm2022/form/control.component.mjs +69 -39
  198. package/esm2022/form/form.component.mjs +27 -18
  199. package/esm2022/form/form.module.mjs +4 -69
  200. package/esm2022/highlight/highlight.component.mjs +26 -23
  201. package/esm2022/highlight/highlight.module.mjs +4 -8
  202. package/esm2022/i18n/i18n.directive.mjs +13 -10
  203. package/esm2022/i18n/i18n.module.mjs +3 -3
  204. package/esm2022/i18n/i18n.pipe.mjs +4 -3
  205. package/esm2022/i18n/i18n.service.mjs +7 -11
  206. package/esm2022/icon/icon.component.mjs +20 -21
  207. package/esm2022/icon/icon.module.mjs +4 -9
  208. package/esm2022/icon/icon.property.mjs +1 -1
  209. package/esm2022/icon/icon.service.mjs +35 -34
  210. package/esm2022/image/image-group.component.mjs +4 -3
  211. package/esm2022/image/image-preview.component.mjs +26 -31
  212. package/esm2022/image/image.component.mjs +30 -29
  213. package/esm2022/image/image.module.mjs +4 -13
  214. package/esm2022/inner/inner.component.mjs +14 -13
  215. package/esm2022/inner/inner.module.mjs +4 -7
  216. package/esm2022/input/input-group.component.mjs +12 -13
  217. package/esm2022/input/input.component.mjs +33 -34
  218. package/esm2022/input/input.module.mjs +4 -11
  219. package/esm2022/input-number/input-number.component.mjs +23 -26
  220. package/esm2022/input-number/input-number.module.mjs +4 -11
  221. package/esm2022/keyword/keyword.directive.mjs +13 -13
  222. package/esm2022/keyword/keyword.module.mjs +4 -7
  223. package/esm2022/keyword/keyword.property.mjs +3 -3
  224. package/esm2022/layout/col.component.mjs +14 -18
  225. package/esm2022/layout/layout.module.mjs +4 -7
  226. package/esm2022/layout/layout.property.mjs +1 -1
  227. package/esm2022/layout/row.component.mjs +12 -12
  228. package/esm2022/link/link.component.mjs +17 -18
  229. package/esm2022/link/link.module.mjs +4 -10
  230. package/esm2022/list/list-drop-group.directive.mjs +3 -2
  231. package/esm2022/list/list-option.component.mjs +16 -16
  232. package/esm2022/list/list.component.mjs +38 -32
  233. package/esm2022/list/list.module.mjs +4 -52
  234. package/esm2022/loading/loading.component.mjs +19 -21
  235. package/esm2022/loading/loading.module.mjs +4 -10
  236. package/esm2022/menu/menu-node.component.mjs +17 -17
  237. package/esm2022/menu/menu.component.mjs +21 -23
  238. package/esm2022/menu/menu.module.mjs +4 -11
  239. package/esm2022/message/message.component.mjs +10 -11
  240. package/esm2022/message/message.module.mjs +5 -12
  241. package/esm2022/message/message.service.mjs +12 -12
  242. package/esm2022/message-box/message-box.component.mjs +20 -8
  243. package/esm2022/message-box/message-box.module.mjs +5 -47
  244. package/esm2022/message-box/message-box.service.mjs +12 -11
  245. package/esm2022/notification/notification.component.mjs +10 -11
  246. package/esm2022/notification/notification.module.mjs +5 -12
  247. package/esm2022/notification/notification.service.mjs +14 -10
  248. package/esm2022/outlet/outlet.directive.mjs +9 -9
  249. package/esm2022/outlet/outlet.module.mjs +4 -6
  250. package/esm2022/page-header/page-header.component.mjs +19 -18
  251. package/esm2022/page-header/page-header.module.mjs +4 -8
  252. package/esm2022/pagination/pagination.component.mjs +39 -29
  253. package/esm2022/pagination/pagination.module.mjs +4 -13
  254. package/esm2022/pattern/pattern.component.mjs +12 -9
  255. package/esm2022/pattern/pattern.module.mjs +4 -6
  256. package/esm2022/popconfirm/popconfirm.component.mjs +24 -25
  257. package/esm2022/popconfirm/popconfirm.module.mjs +4 -11
  258. package/esm2022/popover/popover-portal.component.mjs +15 -14
  259. package/esm2022/popover/popover.directive.mjs +16 -18
  260. package/esm2022/popover/popover.module.mjs +5 -11
  261. package/esm2022/portal/portal.module.mjs +6 -9
  262. package/esm2022/portal/portal.service.mjs +12 -11
  263. package/esm2022/progress/progress.component.mjs +16 -18
  264. package/esm2022/progress/progress.module.mjs +4 -9
  265. package/esm2022/radio/radio.component.mjs +21 -21
  266. package/esm2022/radio/radio.module.mjs +4 -12
  267. package/esm2022/rate/rate.component.mjs +22 -21
  268. package/esm2022/rate/rate.module.mjs +4 -11
  269. package/esm2022/resizable/resizable.directive.mjs +56 -45
  270. package/esm2022/resizable/resizable.module.mjs +5 -7
  271. package/esm2022/resizable/resizable.property.mjs +3 -3
  272. package/esm2022/result/result.component.mjs +15 -18
  273. package/esm2022/result/result.module.mjs +4 -9
  274. package/esm2022/ripple/ripple.directive.mjs +11 -10
  275. package/esm2022/ripple/ripple.module.mjs +5 -8
  276. package/esm2022/select/select-portal.component.mjs +6 -4
  277. package/esm2022/select/select.component.mjs +52 -50
  278. package/esm2022/select/select.module.mjs +5 -46
  279. package/esm2022/skeleton/skeleton.component.mjs +14 -16
  280. package/esm2022/skeleton/skeleton.module.mjs +4 -8
  281. package/esm2022/slider/slider.component.mjs +38 -35
  282. package/esm2022/slider/slider.module.mjs +5 -11
  283. package/esm2022/slider-select/slider-select.component.mjs +45 -37
  284. package/esm2022/slider-select/slider-select.module.mjs +4 -36
  285. package/esm2022/statistic/countdown.component.mjs +14 -15
  286. package/esm2022/statistic/statistic.component.mjs +13 -13
  287. package/esm2022/statistic/statistic.module.mjs +4 -9
  288. package/esm2022/steps/steps.component.mjs +17 -18
  289. package/esm2022/steps/steps.module.mjs +4 -9
  290. package/esm2022/switch/switch.component.mjs +18 -17
  291. package/esm2022/switch/switch.module.mjs +4 -11
  292. package/esm2022/table/table-body.component.mjs +19 -9
  293. package/esm2022/table/table-foot.component.mjs +12 -15
  294. package/esm2022/table/table-head.component.mjs +33 -27
  295. package/esm2022/table/table.component.mjs +20 -10
  296. package/esm2022/table/table.module.mjs +4 -69
  297. package/esm2022/tabs/tab-content.component.mjs +12 -9
  298. package/esm2022/tabs/tab-link.directive.mjs +7 -5
  299. package/esm2022/tabs/tab.component.mjs +11 -10
  300. package/esm2022/tabs/tabs.component.mjs +28 -26
  301. package/esm2022/tabs/tabs.module.mjs +5 -26
  302. package/esm2022/tag/tag.component.mjs +16 -19
  303. package/esm2022/tag/tag.module.mjs +4 -9
  304. package/esm2022/text-retract/text-retract.component.mjs +17 -18
  305. package/esm2022/text-retract/text-retract.module.mjs +4 -10
  306. package/esm2022/textarea/textarea.component.mjs +24 -24
  307. package/esm2022/textarea/textarea.module.mjs +4 -10
  308. package/esm2022/theme/theme.component.mjs +44 -30
  309. package/esm2022/theme/theme.module.mjs +4 -40
  310. package/esm2022/time-ago/time-ago.module.mjs +4 -6
  311. package/esm2022/time-ago/time-ago.pipe.mjs +20 -20
  312. package/esm2022/time-picker/time-picker-frame.component.mjs +31 -29
  313. package/esm2022/time-picker/time-picker-portal.component.mjs +19 -19
  314. package/esm2022/time-picker/time-picker.component.mjs +39 -40
  315. package/esm2022/time-picker/time-picker.module.mjs +5 -46
  316. package/esm2022/time-range/time-range.module.mjs +4 -4
  317. package/esm2022/time-range/time-range.pipe.mjs +3 -3
  318. package/esm2022/timeline/timeline.component.mjs +17 -19
  319. package/esm2022/timeline/timeline.module.mjs +4 -11
  320. package/esm2022/tooltip/tooltip-portal.component.mjs +15 -14
  321. package/esm2022/tooltip/tooltip.directive.mjs +15 -18
  322. package/esm2022/tooltip/tooltip.module.mjs +5 -11
  323. package/esm2022/transfer/transfer.component.mjs +68 -54
  324. package/esm2022/transfer/transfer.module.mjs +4 -57
  325. package/esm2022/tree/tree-node.component.mjs +36 -29
  326. package/esm2022/tree/tree.component.mjs +10 -12
  327. package/esm2022/tree/tree.module.mjs +4 -41
  328. package/esm2022/tree/tree.service.mjs +4 -3
  329. package/esm2022/tree-file/tree-file.component.mjs +34 -30
  330. package/esm2022/tree-file/tree-file.module.mjs +4 -13
  331. package/esm2022/tree-select/tree-select-portal.component.mjs +25 -25
  332. package/esm2022/tree-select/tree-select.component.mjs +53 -51
  333. package/esm2022/tree-select/tree-select.module.mjs +6 -54
  334. package/esm2022/typography/typography.component.mjs +11 -11
  335. package/esm2022/typography/typography.module.mjs +4 -7
  336. package/esm2022/upload/upload-portal.component.mjs +11 -12
  337. package/esm2022/upload/upload.component.mjs +42 -39
  338. package/esm2022/upload/upload.module.mjs +4 -53
  339. package/examples/examples.component.d.ts +6 -6
  340. package/examples/examples.module.d.ts +1 -2
  341. package/fesm2022/ng-nest-ui-affix.mjs +12 -15
  342. package/fesm2022/ng-nest-ui-affix.mjs.map +1 -1
  343. package/fesm2022/ng-nest-ui-alert.mjs +26 -25
  344. package/fesm2022/ng-nest-ui-alert.mjs.map +1 -1
  345. package/fesm2022/ng-nest-ui-anchor.mjs +24 -26
  346. package/fesm2022/ng-nest-ui-anchor.mjs.map +1 -1
  347. package/fesm2022/ng-nest-ui-api.mjs +15 -15
  348. package/fesm2022/ng-nest-ui-api.mjs.map +1 -1
  349. package/fesm2022/ng-nest-ui-auto-complete.mjs +58 -50
  350. package/fesm2022/ng-nest-ui-auto-complete.mjs.map +1 -1
  351. package/fesm2022/ng-nest-ui-avatar.mjs +23 -27
  352. package/fesm2022/ng-nest-ui-avatar.mjs.map +1 -1
  353. package/fesm2022/ng-nest-ui-back-top.mjs +26 -33
  354. package/fesm2022/ng-nest-ui-back-top.mjs.map +1 -1
  355. package/fesm2022/ng-nest-ui-badge.mjs +20 -26
  356. package/fesm2022/ng-nest-ui-badge.mjs.map +1 -1
  357. package/fesm2022/ng-nest-ui-base-form.mjs +11 -6
  358. package/fesm2022/ng-nest-ui-base-form.mjs.map +1 -1
  359. package/fesm2022/ng-nest-ui-border.mjs +14 -12
  360. package/fesm2022/ng-nest-ui-border.mjs.map +1 -1
  361. package/fesm2022/ng-nest-ui-button.mjs +30 -38
  362. package/fesm2022/ng-nest-ui-button.mjs.map +1 -1
  363. package/fesm2022/ng-nest-ui-calendar.mjs +35 -33
  364. package/fesm2022/ng-nest-ui-calendar.mjs.map +1 -1
  365. package/fesm2022/ng-nest-ui-card.mjs +15 -21
  366. package/fesm2022/ng-nest-ui-card.mjs.map +1 -1
  367. package/fesm2022/ng-nest-ui-carousel.mjs +52 -54
  368. package/fesm2022/ng-nest-ui-carousel.mjs.map +1 -1
  369. package/fesm2022/ng-nest-ui-cascade.mjs +54 -51
  370. package/fesm2022/ng-nest-ui-cascade.mjs.map +1 -1
  371. package/fesm2022/ng-nest-ui-checkbox.mjs +32 -30
  372. package/fesm2022/ng-nest-ui-checkbox.mjs.map +1 -1
  373. package/fesm2022/ng-nest-ui-collapse.mjs +27 -36
  374. package/fesm2022/ng-nest-ui-collapse.mjs.map +1 -1
  375. package/fesm2022/ng-nest-ui-color-picker.mjs +84 -98
  376. package/fesm2022/ng-nest-ui-color-picker.mjs.map +1 -1
  377. package/fesm2022/ng-nest-ui-color.mjs +16 -18
  378. package/fesm2022/ng-nest-ui-color.mjs.map +1 -1
  379. package/fesm2022/ng-nest-ui-comment.mjs +43 -72
  380. package/fesm2022/ng-nest-ui-comment.mjs.map +1 -1
  381. package/fesm2022/ng-nest-ui-container.mjs +61 -94
  382. package/fesm2022/ng-nest-ui-container.mjs.map +1 -1
  383. package/fesm2022/ng-nest-ui-core.mjs +10 -4
  384. package/fesm2022/ng-nest-ui-core.mjs.map +1 -1
  385. package/fesm2022/ng-nest-ui-crumb.mjs +16 -20
  386. package/fesm2022/ng-nest-ui-crumb.mjs.map +1 -1
  387. package/fesm2022/ng-nest-ui-date-picker.mjs +247 -293
  388. package/fesm2022/ng-nest-ui-date-picker.mjs.map +1 -1
  389. package/fesm2022/ng-nest-ui-description.mjs +19 -25
  390. package/fesm2022/ng-nest-ui-description.mjs.map +1 -1
  391. package/fesm2022/ng-nest-ui-dialog.mjs +180 -223
  392. package/fesm2022/ng-nest-ui-dialog.mjs.map +1 -1
  393. package/fesm2022/ng-nest-ui-doc.mjs +13 -12
  394. package/fesm2022/ng-nest-ui-doc.mjs.map +1 -1
  395. package/fesm2022/ng-nest-ui-drag.mjs +13 -14
  396. package/fesm2022/ng-nest-ui-drag.mjs.map +1 -1
  397. package/fesm2022/ng-nest-ui-drawer.mjs +114 -133
  398. package/fesm2022/ng-nest-ui-drawer.mjs.map +1 -1
  399. package/fesm2022/ng-nest-ui-dropdown.mjs +39 -33
  400. package/fesm2022/ng-nest-ui-dropdown.mjs.map +1 -1
  401. package/fesm2022/ng-nest-ui-empty.mjs +21 -24
  402. package/fesm2022/ng-nest-ui-empty.mjs.map +1 -1
  403. package/fesm2022/ng-nest-ui-examples.mjs +13 -12
  404. package/fesm2022/ng-nest-ui-examples.mjs.map +1 -1
  405. package/fesm2022/ng-nest-ui-find.mjs +49 -76
  406. package/fesm2022/ng-nest-ui-find.mjs.map +1 -1
  407. package/fesm2022/ng-nest-ui-form.mjs +88 -112
  408. package/fesm2022/ng-nest-ui-form.mjs.map +1 -1
  409. package/fesm2022/ng-nest-ui-highlight.mjs +28 -27
  410. package/fesm2022/ng-nest-ui-highlight.mjs.map +1 -1
  411. package/fesm2022/ng-nest-ui-i18n.mjs +21 -21
  412. package/fesm2022/ng-nest-ui-i18n.mjs.map +1 -1
  413. package/fesm2022/ng-nest-ui-icon.mjs +55 -57
  414. package/fesm2022/ng-nest-ui-icon.mjs.map +1 -1
  415. package/fesm2022/ng-nest-ui-image.mjs +50 -61
  416. package/fesm2022/ng-nest-ui-image.mjs.map +1 -1
  417. package/fesm2022/ng-nest-ui-inner.mjs +15 -17
  418. package/fesm2022/ng-nest-ui-inner.mjs.map +1 -1
  419. package/fesm2022/ng-nest-ui-input-number.mjs +25 -31
  420. package/fesm2022/ng-nest-ui-input-number.mjs.map +1 -1
  421. package/fesm2022/ng-nest-ui-input.mjs +41 -49
  422. package/fesm2022/ng-nest-ui-input.mjs.map +1 -1
  423. package/fesm2022/ng-nest-ui-keyword.mjs +17 -19
  424. package/fesm2022/ng-nest-ui-keyword.mjs.map +1 -1
  425. package/fesm2022/ng-nest-ui-layout.mjs +25 -31
  426. package/fesm2022/ng-nest-ui-layout.mjs.map +1 -1
  427. package/fesm2022/ng-nest-ui-link.mjs +18 -24
  428. package/fesm2022/ng-nest-ui-link.mjs.map +1 -1
  429. package/fesm2022/ng-nest-ui-list.mjs +51 -86
  430. package/fesm2022/ng-nest-ui-list.mjs.map +1 -1
  431. package/fesm2022/ng-nest-ui-loading.mjs +20 -27
  432. package/fesm2022/ng-nest-ui-loading.mjs.map +1 -1
  433. package/fesm2022/ng-nest-ui-menu.mjs +33 -41
  434. package/fesm2022/ng-nest-ui-menu.mjs.map +1 -1
  435. package/fesm2022/ng-nest-ui-message-box.mjs +33 -58
  436. package/fesm2022/ng-nest-ui-message-box.mjs.map +1 -1
  437. package/fesm2022/ng-nest-ui-message.mjs +22 -28
  438. package/fesm2022/ng-nest-ui-message.mjs.map +1 -1
  439. package/fesm2022/ng-nest-ui-notification.mjs +24 -26
  440. package/fesm2022/ng-nest-ui-notification.mjs.map +1 -1
  441. package/fesm2022/ng-nest-ui-outlet.mjs +11 -13
  442. package/fesm2022/ng-nest-ui-outlet.mjs.map +1 -1
  443. package/fesm2022/ng-nest-ui-page-header.mjs +20 -23
  444. package/fesm2022/ng-nest-ui-page-header.mjs.map +1 -1
  445. package/fesm2022/ng-nest-ui-pagination.mjs +39 -37
  446. package/fesm2022/ng-nest-ui-pagination.mjs.map +1 -1
  447. package/fesm2022/ng-nest-ui-pattern.mjs +13 -12
  448. package/fesm2022/ng-nest-ui-pattern.mjs.map +1 -1
  449. package/fesm2022/ng-nest-ui-popconfirm.mjs +25 -33
  450. package/fesm2022/ng-nest-ui-popconfirm.mjs.map +1 -1
  451. package/fesm2022/ng-nest-ui-popover.mjs +31 -35
  452. package/fesm2022/ng-nest-ui-popover.mjs.map +1 -1
  453. package/fesm2022/ng-nest-ui-portal.mjs +25 -25
  454. package/fesm2022/ng-nest-ui-portal.mjs.map +1 -1
  455. package/fesm2022/ng-nest-ui-progress.mjs +16 -22
  456. package/fesm2022/ng-nest-ui-progress.mjs.map +1 -1
  457. package/fesm2022/ng-nest-ui-radio.mjs +22 -28
  458. package/fesm2022/ng-nest-ui-radio.mjs.map +1 -1
  459. package/fesm2022/ng-nest-ui-rate.mjs +23 -27
  460. package/fesm2022/ng-nest-ui-rate.mjs.map +1 -1
  461. package/fesm2022/ng-nest-ui-resizable.mjs +62 -52
  462. package/fesm2022/ng-nest-ui-resizable.mjs.map +1 -1
  463. package/fesm2022/ng-nest-ui-result.mjs +16 -23
  464. package/fesm2022/ng-nest-ui-result.mjs.map +1 -1
  465. package/fesm2022/ng-nest-ui-ripple.mjs +14 -15
  466. package/fesm2022/ng-nest-ui-ripple.mjs.map +1 -1
  467. package/fesm2022/ng-nest-ui-select.mjs +59 -92
  468. package/fesm2022/ng-nest-ui-select.mjs.map +1 -1
  469. package/fesm2022/ng-nest-ui-skeleton.mjs +15 -20
  470. package/fesm2022/ng-nest-ui-skeleton.mjs.map +1 -1
  471. package/fesm2022/ng-nest-ui-slider-select.mjs +46 -66
  472. package/fesm2022/ng-nest-ui-slider-select.mjs.map +1 -1
  473. package/fesm2022/ng-nest-ui-slider.mjs +40 -42
  474. package/fesm2022/ng-nest-ui-slider.mjs.map +1 -1
  475. package/fesm2022/ng-nest-ui-statistic.mjs +25 -30
  476. package/fesm2022/ng-nest-ui-statistic.mjs.map +1 -1
  477. package/fesm2022/ng-nest-ui-steps.mjs +18 -23
  478. package/fesm2022/ng-nest-ui-steps.mjs.map +1 -1
  479. package/fesm2022/ng-nest-ui-switch.mjs +19 -23
  480. package/fesm2022/ng-nest-ui-switch.mjs.map +1 -1
  481. package/fesm2022/ng-nest-ui-table.mjs +86 -128
  482. package/fesm2022/ng-nest-ui-table.mjs.map +1 -1
  483. package/fesm2022/ng-nest-ui-tabs.mjs +52 -63
  484. package/fesm2022/ng-nest-ui-tabs.mjs.map +1 -1
  485. package/fesm2022/ng-nest-ui-tag.mjs +17 -24
  486. package/fesm2022/ng-nest-ui-tag.mjs.map +1 -1
  487. package/fesm2022/ng-nest-ui-text-retract.mjs +17 -23
  488. package/fesm2022/ng-nest-ui-text-retract.mjs.map +1 -1
  489. package/fesm2022/ng-nest-ui-textarea.mjs +25 -29
  490. package/fesm2022/ng-nest-ui-textarea.mjs.map +1 -1
  491. package/fesm2022/ng-nest-ui-theme.mjs +45 -64
  492. package/fesm2022/ng-nest-ui-theme.mjs.map +1 -1
  493. package/fesm2022/ng-nest-ui-time-ago.mjs +21 -23
  494. package/fesm2022/ng-nest-ui-time-ago.mjs.map +1 -1
  495. package/fesm2022/ng-nest-ui-time-picker.mjs +82 -119
  496. package/fesm2022/ng-nest-ui-time-picker.mjs.map +1 -1
  497. package/fesm2022/ng-nest-ui-time-range.mjs +5 -5
  498. package/fesm2022/ng-nest-ui-time-range.mjs.map +1 -1
  499. package/fesm2022/ng-nest-ui-timeline.mjs +18 -26
  500. package/fesm2022/ng-nest-ui-timeline.mjs.map +1 -1
  501. package/fesm2022/ng-nest-ui-tooltip.mjs +30 -35
  502. package/fesm2022/ng-nest-ui-tooltip.mjs.map +1 -1
  503. package/fesm2022/ng-nest-ui-transfer.mjs +68 -104
  504. package/fesm2022/ng-nest-ui-transfer.mjs.map +1 -1
  505. package/fesm2022/ng-nest-ui-tree-file.mjs +35 -39
  506. package/fesm2022/ng-nest-ui-tree-file.mjs.map +1 -1
  507. package/fesm2022/ng-nest-ui-tree-select.mjs +77 -119
  508. package/fesm2022/ng-nest-ui-tree-select.mjs.map +1 -1
  509. package/fesm2022/ng-nest-ui-tree.mjs +48 -76
  510. package/fesm2022/ng-nest-ui-tree.mjs.map +1 -1
  511. package/fesm2022/ng-nest-ui-typography.mjs +13 -15
  512. package/fesm2022/ng-nest-ui-typography.mjs.map +1 -1
  513. package/fesm2022/ng-nest-ui-upload.mjs +51 -95
  514. package/fesm2022/ng-nest-ui-upload.mjs.map +1 -1
  515. package/find/find.component.d.ts +6 -7
  516. package/find/find.module.d.ts +1 -13
  517. package/form/control.component.d.ts +6 -7
  518. package/form/form.component.d.ts +4 -6
  519. package/form/form.module.d.ts +1 -24
  520. package/highlight/highlight.component.d.ts +12 -10
  521. package/highlight/highlight.module.d.ts +1 -4
  522. package/i18n/i18n.directive.d.ts +6 -7
  523. package/i18n/i18n.module.d.ts +1 -1
  524. package/i18n/i18n.pipe.d.ts +1 -1
  525. package/i18n/i18n.service.d.ts +3 -2
  526. package/icon/icon.component.d.ts +7 -9
  527. package/icon/icon.module.d.ts +1 -3
  528. package/icon/icon.property.d.ts +1 -1
  529. package/icon/icon.service.d.ts +6 -7
  530. package/image/image-group.component.d.ts +1 -1
  531. package/image/image-preview.component.d.ts +5 -10
  532. package/image/image.component.d.ts +9 -14
  533. package/image/image.module.d.ts +3 -11
  534. package/inner/inner.component.d.ts +2 -3
  535. package/inner/inner.module.d.ts +1 -3
  536. package/input/input-group.component.d.ts +3 -6
  537. package/input/input.component.d.ts +8 -10
  538. package/input/input.module.d.ts +2 -8
  539. package/input-number/input-number.component.d.ts +5 -6
  540. package/input-number/input-number.module.d.ts +1 -7
  541. package/keyword/keyword.directive.d.ts +3 -4
  542. package/keyword/keyword.module.d.ts +1 -3
  543. package/keyword/keyword.property.d.ts +1 -1
  544. package/layout/col.component.d.ts +5 -7
  545. package/layout/layout.module.d.ts +1 -3
  546. package/layout/row.component.d.ts +3 -4
  547. package/link/link.component.d.ts +5 -7
  548. package/link/link.module.d.ts +1 -6
  549. package/list/list-drop-group.directive.d.ts +1 -1
  550. package/list/list-option.component.d.ts +6 -7
  551. package/list/list.component.d.ts +9 -12
  552. package/list/list.module.d.ts +1 -13
  553. package/loading/loading.component.d.ts +7 -10
  554. package/loading/loading.module.d.ts +1 -6
  555. package/menu/menu-node.component.d.ts +6 -7
  556. package/menu/menu.component.d.ts +4 -7
  557. package/menu/menu.module.d.ts +1 -7
  558. package/message/message.component.d.ts +3 -6
  559. package/message/message.module.d.ts +1 -5
  560. package/message/message.service.d.ts +4 -5
  561. package/message-box/message-box.component.d.ts +1 -1
  562. package/message-box/message-box.module.d.ts +1 -11
  563. package/message-box/message-box.service.d.ts +2 -5
  564. package/notification/notification.component.d.ts +3 -6
  565. package/notification/notification.module.d.ts +1 -5
  566. package/notification/notification.service.d.ts +1 -3
  567. package/outlet/outlet.directive.d.ts +4 -5
  568. package/outlet/outlet.module.d.ts +1 -2
  569. package/package.json +72 -72
  570. package/page-header/page-header.component.d.ts +5 -7
  571. package/page-header/page-header.module.d.ts +1 -4
  572. package/pagination/pagination.component.d.ts +8 -10
  573. package/pagination/pagination.module.d.ts +1 -9
  574. package/pattern/pattern.component.d.ts +4 -4
  575. package/pattern/pattern.module.d.ts +1 -2
  576. package/popconfirm/popconfirm.component.d.ts +6 -9
  577. package/popconfirm/popconfirm.module.d.ts +1 -7
  578. package/popover/popover-portal.component.d.ts +4 -5
  579. package/popover/popover.directive.d.ts +9 -10
  580. package/popover/popover.module.d.ts +1 -6
  581. package/portal/portal.module.d.ts +1 -3
  582. package/portal/portal.service.d.ts +3 -4
  583. package/progress/progress.component.d.ts +3 -7
  584. package/progress/progress.module.d.ts +1 -5
  585. package/radio/radio.component.d.ts +6 -8
  586. package/radio/radio.module.d.ts +1 -8
  587. package/rate/rate.component.d.ts +6 -8
  588. package/rate/rate.module.d.ts +1 -7
  589. package/resizable/resizable.directive.d.ts +5 -7
  590. package/resizable/resizable.module.d.ts +1 -2
  591. package/resizable/resizable.property.d.ts +1 -1
  592. package/result/result.component.d.ts +3 -7
  593. package/result/result.module.d.ts +1 -5
  594. package/ripple/ripple.directive.d.ts +4 -5
  595. package/ripple/ripple.module.d.ts +1 -3
  596. package/select/select-portal.component.d.ts +1 -1
  597. package/select/select.component.d.ts +14 -15
  598. package/select/select.module.d.ts +1 -12
  599. package/skeleton/skeleton.component.d.ts +3 -6
  600. package/skeleton/skeleton.module.d.ts +1 -4
  601. package/slider/slider.component.d.ts +5 -7
  602. package/slider/slider.module.d.ts +1 -7
  603. package/slider-select/slider-select.component.d.ts +6 -7
  604. package/slider-select/slider-select.module.d.ts +1 -9
  605. package/statistic/countdown.component.d.ts +6 -7
  606. package/statistic/statistic.component.d.ts +2 -3
  607. package/statistic/statistic.module.d.ts +1 -5
  608. package/steps/steps.component.d.ts +4 -7
  609. package/steps/steps.module.d.ts +1 -5
  610. package/style/core/base.scss +0 -7
  611. package/style/core/index.css +1 -8
  612. package/style/core/index.css.map +1 -1
  613. package/style/params/colors.scss +1 -1
  614. package/switch/switch.component.d.ts +6 -7
  615. package/switch/switch.module.d.ts +1 -7
  616. package/table/table-body.component.d.ts +1 -1
  617. package/table/table-foot.component.d.ts +3 -6
  618. package/table/table-head.component.d.ts +5 -7
  619. package/table/table.component.d.ts +1 -1
  620. package/table/table.module.d.ts +4 -17
  621. package/tabs/tab-content.component.d.ts +6 -6
  622. package/tabs/tab-link.directive.d.ts +2 -2
  623. package/tabs/tab.component.d.ts +2 -3
  624. package/tabs/tabs.component.d.ts +8 -9
  625. package/tabs/tabs.module.d.ts +3 -9
  626. package/tag/tag.component.d.ts +4 -8
  627. package/tag/tag.module.d.ts +1 -5
  628. package/text-retract/text-retract.component.d.ts +6 -10
  629. package/text-retract/text-retract.module.d.ts +1 -6
  630. package/textarea/textarea.component.d.ts +5 -7
  631. package/textarea/textarea.module.d.ts +1 -6
  632. package/theme/theme.component.d.ts +8 -9
  633. package/theme/theme.module.d.ts +1 -10
  634. package/time-ago/time-ago.module.d.ts +1 -1
  635. package/time-ago/time-ago.pipe.d.ts +6 -9
  636. package/time-picker/time-picker-frame.component.d.ts +5 -6
  637. package/time-picker/time-picker-portal.component.d.ts +5 -7
  638. package/time-picker/time-picker.component.d.ts +14 -16
  639. package/time-picker/time-picker.module.d.ts +2 -13
  640. package/time-range/time-range.module.d.ts +1 -1
  641. package/time-range/time-range.pipe.d.ts +1 -1
  642. package/timeline/timeline.component.d.ts +5 -8
  643. package/timeline/timeline.module.d.ts +1 -7
  644. package/tooltip/tooltip-portal.component.d.ts +4 -5
  645. package/tooltip/tooltip.directive.d.ts +8 -9
  646. package/tooltip/tooltip.module.d.ts +1 -6
  647. package/transfer/transfer.component.d.ts +6 -9
  648. package/transfer/transfer.module.d.ts +1 -15
  649. package/tree/tree-node.component.d.ts +6 -10
  650. package/tree/tree.component.d.ts +1 -1
  651. package/tree/tree.module.d.ts +1 -11
  652. package/tree-file/tree-file.component.d.ts +5 -10
  653. package/tree-file/tree-file.module.d.ts +1 -9
  654. package/tree-select/tree-select-portal.component.d.ts +5 -7
  655. package/tree-select/tree-select.component.d.ts +14 -15
  656. package/tree-select/tree-select.module.d.ts +1 -14
  657. package/typography/typography.component.d.ts +3 -4
  658. package/typography/typography.module.d.ts +1 -3
  659. package/upload/upload-portal.component.d.ts +5 -7
  660. package/upload/upload.component.d.ts +12 -15
  661. package/upload/upload.module.d.ts +1 -14
@@ -1,25 +1,56 @@
1
- import { Component, ViewEncapsulation, ChangeDetectionStrategy, ViewChild } from '@angular/core';
1
+ import { Component, ViewEncapsulation, ChangeDetectorRef, ChangeDetectionStrategy, ViewChild, inject } from '@angular/core';
2
2
  import { XTransferPrefix, XTransferProperty } from './transfer.property';
3
- import { XIsChange, XIsEmpty, XSetData, XRemove, XIsArray, XIsObject, XIsObjectArray, XIsBoolean, XIsFunction, XIsUndefined } from '@ng-nest/ui/core';
3
+ import { XIsChange, XIsEmpty, XSetData, XConfigService, XRemove, XIsArray, XIsObject, XIsObjectArray, XIsBoolean, XIsFunction, XIsUndefined } from '@ng-nest/ui/core';
4
4
  import { Subject } from 'rxjs';
5
5
  import { debounceTime, distinctUntilChanged, map, takeUntil } from 'rxjs/operators';
6
- import { transferArrayItem, moveItemInArray } from '@angular/cdk/drag-drop';
6
+ import { transferArrayItem, moveItemInArray, DragDropModule } from '@angular/cdk/drag-drop';
7
7
  import { XValueAccessor } from '@ng-nest/ui/base-form';
8
+ import { XI18nPipe, XI18nService } from '@ng-nest/ui/i18n';
9
+ import { XTreeComponent } from '@ng-nest/ui/tree';
10
+ import { XTableComponent } from '@ng-nest/ui/table';
11
+ import { CommonModule } from '@angular/common';
12
+ import { FormsModule } from '@angular/forms';
13
+ import { XOutletDirective } from '@ng-nest/ui/outlet';
14
+ import { XCheckboxComponent } from '@ng-nest/ui/checkbox';
15
+ import { XButtonComponent } from '@ng-nest/ui/button';
16
+ import { XInputComponent } from '@ng-nest/ui/input';
17
+ import { XKeywordDirective } from '@ng-nest/ui/keyword';
18
+ import { XLinkComponent } from '@ng-nest/ui/link';
8
19
  import * as i0 from "@angular/core";
9
- import * as i1 from "@ng-nest/ui/core";
10
- import * as i2 from "@ng-nest/ui/i18n";
11
- import * as i3 from "@angular/common";
12
- import * as i4 from "@angular/forms";
13
- import * as i5 from "@angular/cdk/drag-drop";
14
- import * as i6 from "@ng-nest/ui/outlet";
15
- import * as i7 from "@ng-nest/ui/checkbox";
16
- import * as i8 from "@ng-nest/ui/button";
17
- import * as i9 from "@ng-nest/ui/input";
18
- import * as i10 from "@ng-nest/ui/tree";
19
- import * as i11 from "@ng-nest/ui/table";
20
- import * as i12 from "@ng-nest/ui/keyword";
21
- import * as i13 from "@ng-nest/ui/link";
20
+ import * as i1 from "@angular/common";
21
+ import * as i2 from "@angular/forms";
22
+ import * as i3 from "@angular/cdk/drag-drop";
22
23
  export class XTransferComponent extends XTransferProperty {
24
+ constructor() {
25
+ super(...arguments);
26
+ this.nodes = [];
27
+ this.left = {
28
+ list: [],
29
+ searchList: [],
30
+ checkedCount: 0,
31
+ direction: 'left',
32
+ disabledButton: true
33
+ };
34
+ this.right = {
35
+ list: [],
36
+ searchList: [],
37
+ checkedCount: 0,
38
+ direction: 'right',
39
+ disabledButton: true
40
+ };
41
+ this.searchInput = '';
42
+ this.searchInputLeftChange = new Subject();
43
+ this.searchInputRightChange = new Subject();
44
+ this.searchDebounceTime = 200;
45
+ this.locale = {};
46
+ this._unSubject = new Subject();
47
+ this.treeActivatedId = [];
48
+ this.tableData = [];
49
+ this.isObjectArray = false;
50
+ this.cdr = inject(ChangeDetectorRef);
51
+ this.i18n = inject(XI18nService);
52
+ this.configService = inject(XConfigService);
53
+ }
23
54
  get localTitle() {
24
55
  if (this.type === 'tree') {
25
56
  return this.locale.treeTitle;
@@ -46,38 +77,6 @@ export class XTransferComponent extends XTransferProperty {
46
77
  return this.value;
47
78
  }
48
79
  }
49
- constructor(renderer, elementRef, cdr, configService, i18n) {
50
- super();
51
- this.renderer = renderer;
52
- this.elementRef = elementRef;
53
- this.cdr = cdr;
54
- this.configService = configService;
55
- this.i18n = i18n;
56
- this.nodes = [];
57
- this.left = {
58
- list: [],
59
- searchList: [],
60
- checkedCount: 0,
61
- direction: 'left',
62
- disabledButton: true
63
- };
64
- this.right = {
65
- list: [],
66
- searchList: [],
67
- checkedCount: 0,
68
- direction: 'right',
69
- disabledButton: true
70
- };
71
- this.searchInput = '';
72
- this.searchInputLeftChange = new Subject();
73
- this.searchInputRightChange = new Subject();
74
- this.searchDebounceTime = 200;
75
- this.locale = {};
76
- this._unSubject = new Subject();
77
- this.treeActivatedId = [];
78
- this.tableData = [];
79
- this.isObjectArray = false;
80
- }
81
80
  ngOnInit() {
82
81
  this.setTitles();
83
82
  this.setListStyle();
@@ -165,7 +164,9 @@ export class XTransferComponent extends XTransferProperty {
165
164
  return x;
166
165
  });
167
166
  if (this.type === 'tree' && source.direction === 'left') {
168
- this.treeActivatedId = $event ? source.list.map((x) => x.id) : source.list.filter((x) => x.disabled).map((x) => x.id);
167
+ this.treeActivatedId = $event
168
+ ? source.list.map((x) => x.id)
169
+ : source.list.filter((x) => x.disabled).map((x) => x.id);
169
170
  }
170
171
  source.checkedCount = $event ? list.length : 0;
171
172
  source.indeterminate = $event;
@@ -587,17 +588,30 @@ export class XTransferComponent extends XTransferProperty {
587
588
  this.right.tableHeadSearchTpl = this.tableHeadSearchTpl[1];
588
589
  }
589
590
  }
590
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: XTransferComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.XConfigService }, { token: i2.XI18nService }], target: i0.ɵɵFactoryTarget.Component }); }
591
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.2", type: XTransferComponent, selector: "x-transfer", providers: [XValueAccessor(XTransferComponent)], viewQueries: [{ propertyName: "leftTableCom", first: true, predicate: ["leftTableCom"], descendants: true }, { propertyName: "rightTableCom", first: true, predicate: ["rightTableCom"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div #transfer class=\"x-transfer\" cdkDropListGroup [ngClass]=\"classMap\">\r\n <div class=\"x-transfer-box\" [class.x-transfer-has-footer]=\"left.footerTpl\">\r\n <ng-container *ngTemplateOutlet=\"sourceTitleTpl; context: { source: left }\"></ng-container>\r\n <div [ngStyle]=\"left.listStyle!\" class=\"x-transfer-list\">\r\n <ng-container [ngSwitch]=\"type\">\r\n <ul\r\n *ngSwitchCase=\"'list'\"\r\n cdkDropList\r\n (cdkDropListDropped)=\"dropCdk($event)\"\r\n [cdkDropListData]=\"left.list\"\r\n [cdkDropListDisabled]=\"!drag && type === 'list'\"\r\n [cdkDropListEnterPredicate]=\"predicate\"\r\n class=\"x-transfer-droplist\"\r\n >\r\n <li class=\"x-transfer-item\" *ngFor=\"let node of left.list; trackBy: trackByNode\" cdkDrag [cdkDragData]=\"node\">\r\n <ng-container *ngTemplateOutlet=\"sourceNodeTpl; context: { node: node, source: left }\"></ng-container>\r\n </li>\r\n </ul>\r\n <x-tree\r\n *ngSwitchCase=\"'tree'\"\r\n [data]=\"left.list!\"\r\n multiple\r\n allowManyActivated\r\n [(activatedId)]=\"treeActivatedId\"\r\n (nodeClick)=\"onTreeNodeClick($event)\"\r\n [labelTpl]=\"treeLabelTpl\"\r\n ></x-tree>\r\n <ng-template #treeLabelTpl let-node=\"$node\">\r\n <span class=\"x-transfer-tree-label\" x-keyword [text]=\"left.searchInput!\">{{ node.label }}</span>\r\n </ng-template>\r\n <x-table\r\n #leftTableCom\r\n *ngSwitchCase=\"'table'\"\r\n [data]=\"tableData\"\r\n [columns]=\"tableColumns!\"\r\n [(size)]=\"tableSize\"\r\n [(index)]=\"tableIndex\"\r\n (indexChange)=\"getTableData()\"\r\n [query]=\"tableQuery\"\r\n [total]=\"tableTotal\"\r\n (activatedRowChange)=\"onTableCheckedRow($event, left)\"\r\n (headCheckboxChange)=\"onTableCheckedAll($event, left)\"\r\n hiddenWrapBorder\r\n hiddenPaginationBorder\r\n showEllipsis=\"false\"\r\n showTotal=\"false\"\r\n paginationPosition=\"bottom-center\"\r\n allowSelectRow=\"false\"\r\n [headSearchTpl]=\"left.tableHeadSearchTpl\"\r\n ></x-table>\r\n </ng-container>\r\n </div>\r\n <div class=\"x-transfer-footer\" *ngIf=\"left.footerTpl\">\r\n <ng-container *ngTemplateOutlet=\"left.footerTpl; context: { $source: left }\"></ng-container>\r\n </div>\r\n </div>\r\n <div class=\"x-transfer-buttons\">\r\n <x-button type=\"primary\" icon=\"fto-chevron-right\" [disabled]=\"left.disabledButton\" (click)=\"move(left, right)\"></x-button>\r\n <x-button type=\"primary\" icon=\"fto-chevron-left\" [disabled]=\"right.disabledButton\" (click)=\"move(right, left)\"></x-button>\r\n </div>\r\n <div class=\"x-transfer-box\" [class.x-transfer-has-footer]=\"right.footerTpl\">\r\n <ng-container *ngTemplateOutlet=\"sourceTitleTpl; context: { source: right }\"></ng-container>\r\n <div [ngSwitch]=\"type\" [ngStyle]=\"right.listStyle!\" class=\"x-transfer-list\">\r\n <x-table\r\n #rightTableCom\r\n *ngSwitchCase=\"'table'\"\r\n [data]=\"right.list!\"\r\n [columns]=\"tableColumns!\"\r\n (activatedRowChange)=\"onTableCheckedRow($event, right)\"\r\n (headCheckboxChange)=\"onTableCheckedAll($event, right)\"\r\n hiddenWrapBorder\r\n hiddenPaginationBorder\r\n showPagination=\"false\"\r\n showEllipsis=\"false\"\r\n showTotal=\"false\"\r\n paginationPosition=\"bottom-center\"\r\n allowSelectRow=\"false\"\r\n [headSearchTpl]=\"right.tableHeadSearchTpl\"\r\n ></x-table>\r\n <ul\r\n *ngSwitchDefault\r\n cdkDropList\r\n (cdkDropListDropped)=\"dropCdk($event)\"\r\n [cdkDropListData]=\"right.list\"\r\n [cdkDropListDisabled]=\"!drag || (drag && type !== 'list')\"\r\n [cdkDropListEnterPredicate]=\"predicate\"\r\n class=\"x-transfer-droplist\"\r\n >\r\n <li class=\"x-transfer-item\" *ngFor=\"let node of right.list; trackBy: trackByNode\" cdkDrag [cdkDragData]=\"node\">\r\n <ng-container *ngTemplateOutlet=\"sourceNodeTpl; context: { node: node, source: right }\"></ng-container>\r\n </li>\r\n </ul>\r\n </div>\r\n <div class=\"x-transfer-footer\" *ngIf=\"right.footerTpl\">\r\n <ng-container *ngTemplateOutlet=\"right.footerTpl; context: { $source: right }\"></ng-container>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #sourceTitleTpl let-source=\"source\">\r\n <div class=\"x-transfer-title\">\r\n <div class=\"x-transfer-title-left\">\r\n <x-checkbox\r\n *ngIf=\"source.title && !source.hiddenCheckAll\"\r\n [data]=\"[titleTpl ? '' : source.title]\"\r\n [(ngModel)]=\"source.checkedAll\"\r\n (ngModelChange)=\"checkedAllChange($event, source)\"\r\n [indeterminate]=\"source.indeterminate\"\r\n ></x-checkbox>\r\n <span *ngIf=\"source.title && source.hiddenCheckAll\">{{ source.title }}</span>\r\n <x-link *ngIf=\"inverse && type === 'list'\" class=\"x-transfer-inverse\" type=\"primary\" (click)=\"onInverse(source)\">{{\r\n 'transfer.inverse' | xI18n\r\n }}</x-link>\r\n </div>\r\n <ng-container *xOutlet=\"titleTpl; context: { $title: source.title, $checkedCount: source.checkedCount, $count: source.count }\"\r\n ><span class=\"x-transfer-total\">{{ source.checkedCount }} / {{ source.count }}</span></ng-container\r\n >\r\n </div>\r\n <div class=\"x-transfer-search\" *ngIf=\"search && type !== 'table'\">\r\n <x-input icon=\"fto-search\" [(ngModel)]=\"source.searchInput\" (ngModelChange)=\"onSearchInputChange(source)\" clearable></x-input>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #sourceNodeTpl let-node=\"node\" let-source=\"source\">\r\n <x-checkbox\r\n [data]=\"[{ id: node.id, label: nodeTpl ? nodeTpl : labelTpl, node: node }]\"\r\n [disabled]=\"node.disabled\"\r\n [(ngModel)]=\"node.checked\"\r\n (ngModelChange)=\"checkedChange($event, source)\"\r\n ></x-checkbox>\r\n <ng-template #labelTpl>\r\n <span x-keyword [text]=\"source.searchInput!\">{{ node.label }}</span>\r\n </ng-template>\r\n</ng-template>\r\n", styles: [".x-transfer{margin:0;padding:0;display:inline-flex;align-items:center}.x-transfer-title{padding:.25rem .5625rem;display:flex;align-items:center;justify-content:space-between;border:var(--x-border-width) var(--x-border-style) var(--x-border);border-top-left-radius:var(--x-border-radius);border-top-right-radius:var(--x-border-radius);background-color:var(--x-background);color:var(--x-text-300)}.x-transfer-title-left{display:inline-flex;align-items:center}.x-transfer-inverse{margin:0 .5rem}.x-transfer-total{margin-left:.325rem}.x-transfer-box{min-width:12rem}.x-transfer-list{display:flex;flex-direction:column;height:18rem;width:100%;border:var(--x-border-width) var(--x-border-style) var(--x-border);border-top:none;border-bottom-left-radius:var(--x-border-radius);border-bottom-right-radius:var(--x-border-radius);overflow:auto}.x-transfer-item{padding:.125rem .25rem;border-radius:var(--x-border-radius);display:flex;align-items:center;border:.0625rem dashed transparent;transition:border-color var(--x-animation-duration-base),background-color var(--x-animation-duration-base),color var(--x-animation-duration-base)}.x-transfer-droplist{height:100%;padding:.25rem}.x-transfer-droplist.cdk-drop-list-dragging .x-transfer-item:hover{background-color:transparent}.x-transfer-droplist.cdk-drop-list-dragging .x-transfer-item.cdk-drag-placeholder{border-color:var(--x-primary);color:var(--x-primary);background-color:var(--x-background);opacity:.8}.x-transfer-droplist.cdk-drop-list-dragging .x-transfer-item:not(.cdk-drag-placeholder){transition:transform var(--x-animation-duration-base) cubic-bezier(0,0,.2,1)}.x-transfer-buttons{margin:0 1rem;display:flex;flex-direction:column}.x-transfer-buttons>x-button:not(:first-child){margin-top:.5rem}.x-transfer-search{padding:.5rem;border-left:var(--x-border-width) var(--x-border-style) var(--x-border);border-right:var(--x-border-width) var(--x-border-style) var(--x-border)}.x-transfer-search x-input{width:100%}.x-transfer-tree-label{flex:1}.x-transfer-footer{padding:.25rem .5625rem;border:var(--x-border-width) var(--x-border-style) var(--x-border);border-bottom-left-radius:var(--x-border-radius);border-bottom-right-radius:var(--x-border-radius)}.x-transfer-has-footer .x-transfer-list{border-bottom-left-radius:0;border-bottom-right-radius:0;border-bottom:none}body>li.x-transfer-item.cdk-drag-preview{padding:.125rem .25rem;border-radius:var(--x-border-radius);display:flex;align-items:center;border:.0625rem dashed transparent;border-color:var(--x-border);color:var(--x-text-400);background-color:var(--x-background-a100);opacity:.9}body>li.x-transfer-item.cdk-drag-animating{transition:transform var(--x-animation-duration-base) cubic-bezier(0,0,.2,1)}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i3.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i5.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i5.CdkDropListGroup, selector: "[cdkDropListGroup]", inputs: ["cdkDropListGroupDisabled"], exportAs: ["cdkDropListGroup"] }, { kind: "directive", type: i5.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i6.XOutletDirective, selector: "[xOutlet]", inputs: ["xOutletContext", "xOutlet"] }, { kind: "component", type: i7.XCheckboxComponent, selector: "x-checkbox" }, { kind: "component", type: i8.XButtonComponent, selector: "x-button" }, { kind: "component", type: i9.XInputComponent, selector: "x-input" }, { kind: "component", type: i10.XTreeComponent, selector: "x-tree" }, { kind: "component", type: i11.XTableComponent, selector: "x-table" }, { kind: "directive", type: i12.XKeywordDirective, selector: "[x-keyword]" }, { kind: "component", type: i13.XLinkComponent, selector: "x-link" }, { kind: "pipe", type: i2.XI18nPipe, name: "xI18n" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
591
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: XTransferComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
592
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.2", type: XTransferComponent, isStandalone: true, selector: "x-transfer", providers: [XValueAccessor(XTransferComponent)], viewQueries: [{ propertyName: "leftTableCom", first: true, predicate: ["leftTableCom"], descendants: true }, { propertyName: "rightTableCom", first: true, predicate: ["rightTableCom"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div #transfer class=\"x-transfer\" cdkDropListGroup [ngClass]=\"classMap\">\r\n <div class=\"x-transfer-box\" [class.x-transfer-has-footer]=\"left.footerTpl\">\r\n <ng-container *ngTemplateOutlet=\"sourceTitleTpl; context: { source: left }\"></ng-container>\r\n <div [ngStyle]=\"left.listStyle!\" class=\"x-transfer-list\">\r\n <ng-container [ngSwitch]=\"type\">\r\n <ul\r\n *ngSwitchCase=\"'list'\"\r\n cdkDropList\r\n (cdkDropListDropped)=\"dropCdk($event)\"\r\n [cdkDropListData]=\"left.list\"\r\n [cdkDropListDisabled]=\"!drag && type === 'list'\"\r\n [cdkDropListEnterPredicate]=\"predicate\"\r\n class=\"x-transfer-droplist\"\r\n >\r\n <li class=\"x-transfer-item\" *ngFor=\"let node of left.list; trackBy: trackByNode\" cdkDrag [cdkDragData]=\"node\">\r\n <ng-container *ngTemplateOutlet=\"sourceNodeTpl; context: { node: node, source: left }\"></ng-container>\r\n </li>\r\n </ul>\r\n <x-tree\r\n *ngSwitchCase=\"'tree'\"\r\n [data]=\"left.list!\"\r\n multiple\r\n allowManyActivated\r\n [(activatedId)]=\"treeActivatedId\"\r\n (nodeClick)=\"onTreeNodeClick($event)\"\r\n [labelTpl]=\"treeLabelTpl\"\r\n ></x-tree>\r\n <ng-template #treeLabelTpl let-node=\"$node\">\r\n <span class=\"x-transfer-tree-label\" x-keyword [text]=\"left.searchInput!\">{{ node.label }}</span>\r\n </ng-template>\r\n <x-table\r\n #leftTableCom\r\n *ngSwitchCase=\"'table'\"\r\n [data]=\"tableData\"\r\n [columns]=\"tableColumns!\"\r\n [(size)]=\"tableSize\"\r\n [(index)]=\"tableIndex\"\r\n (indexChange)=\"getTableData()\"\r\n [query]=\"tableQuery\"\r\n [total]=\"tableTotal\"\r\n (activatedRowChange)=\"onTableCheckedRow($event, left)\"\r\n (headCheckboxChange)=\"onTableCheckedAll($event, left)\"\r\n hiddenWrapBorder\r\n hiddenPaginationBorder\r\n showEllipsis=\"false\"\r\n showTotal=\"false\"\r\n paginationPosition=\"bottom-center\"\r\n allowSelectRow=\"false\"\r\n [headSearchTpl]=\"left.tableHeadSearchTpl\"\r\n ></x-table>\r\n </ng-container>\r\n </div>\r\n <div class=\"x-transfer-footer\" *ngIf=\"left.footerTpl\">\r\n <ng-container *ngTemplateOutlet=\"left.footerTpl; context: { $source: left }\"></ng-container>\r\n </div>\r\n </div>\r\n <div class=\"x-transfer-buttons\">\r\n <x-button type=\"primary\" icon=\"fto-chevron-right\" [disabled]=\"left.disabledButton\" (click)=\"move(left, right)\"></x-button>\r\n <x-button type=\"primary\" icon=\"fto-chevron-left\" [disabled]=\"right.disabledButton\" (click)=\"move(right, left)\"></x-button>\r\n </div>\r\n <div class=\"x-transfer-box\" [class.x-transfer-has-footer]=\"right.footerTpl\">\r\n <ng-container *ngTemplateOutlet=\"sourceTitleTpl; context: { source: right }\"></ng-container>\r\n <div [ngSwitch]=\"type\" [ngStyle]=\"right.listStyle!\" class=\"x-transfer-list\">\r\n <x-table\r\n #rightTableCom\r\n *ngSwitchCase=\"'table'\"\r\n [data]=\"right.list!\"\r\n [columns]=\"tableColumns!\"\r\n (activatedRowChange)=\"onTableCheckedRow($event, right)\"\r\n (headCheckboxChange)=\"onTableCheckedAll($event, right)\"\r\n hiddenWrapBorder\r\n hiddenPaginationBorder\r\n showPagination=\"false\"\r\n showEllipsis=\"false\"\r\n showTotal=\"false\"\r\n paginationPosition=\"bottom-center\"\r\n allowSelectRow=\"false\"\r\n [headSearchTpl]=\"right.tableHeadSearchTpl\"\r\n ></x-table>\r\n <ul\r\n *ngSwitchDefault\r\n cdkDropList\r\n (cdkDropListDropped)=\"dropCdk($event)\"\r\n [cdkDropListData]=\"right.list\"\r\n [cdkDropListDisabled]=\"!drag || (drag && type !== 'list')\"\r\n [cdkDropListEnterPredicate]=\"predicate\"\r\n class=\"x-transfer-droplist\"\r\n >\r\n <li class=\"x-transfer-item\" *ngFor=\"let node of right.list; trackBy: trackByNode\" cdkDrag [cdkDragData]=\"node\">\r\n <ng-container *ngTemplateOutlet=\"sourceNodeTpl; context: { node: node, source: right }\"></ng-container>\r\n </li>\r\n </ul>\r\n </div>\r\n <div class=\"x-transfer-footer\" *ngIf=\"right.footerTpl\">\r\n <ng-container *ngTemplateOutlet=\"right.footerTpl; context: { $source: right }\"></ng-container>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #sourceTitleTpl let-source=\"source\">\r\n <div class=\"x-transfer-title\">\r\n <div class=\"x-transfer-title-left\">\r\n <x-checkbox\r\n *ngIf=\"source.title && !source.hiddenCheckAll\"\r\n [data]=\"[titleTpl ? '' : source.title]\"\r\n [(ngModel)]=\"source.checkedAll\"\r\n (ngModelChange)=\"checkedAllChange($event, source)\"\r\n [indeterminate]=\"source.indeterminate\"\r\n ></x-checkbox>\r\n <span *ngIf=\"source.title && source.hiddenCheckAll\">{{ source.title }}</span>\r\n <x-link *ngIf=\"inverse && type === 'list'\" class=\"x-transfer-inverse\" type=\"primary\" (click)=\"onInverse(source)\">{{\r\n 'transfer.inverse' | xI18n\r\n }}</x-link>\r\n </div>\r\n <ng-container *xOutlet=\"titleTpl; context: { $title: source.title, $checkedCount: source.checkedCount, $count: source.count }\"\r\n ><span class=\"x-transfer-total\">{{ source.checkedCount }} / {{ source.count }}</span></ng-container\r\n >\r\n </div>\r\n <div class=\"x-transfer-search\" *ngIf=\"search && type !== 'table'\">\r\n <x-input icon=\"fto-search\" [(ngModel)]=\"source.searchInput\" (ngModelChange)=\"onSearchInputChange(source)\" clearable></x-input>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #sourceNodeTpl let-node=\"node\" let-source=\"source\">\r\n <x-checkbox\r\n [data]=\"[{ id: node.id, label: nodeTpl ? nodeTpl : labelTpl, node: node }]\"\r\n [disabled]=\"node.disabled\"\r\n [(ngModel)]=\"node.checked\"\r\n (ngModelChange)=\"checkedChange($event, source)\"\r\n ></x-checkbox>\r\n <ng-template #labelTpl>\r\n <span x-keyword [text]=\"source.searchInput!\">{{ node.label }}</span>\r\n </ng-template>\r\n</ng-template>\r\n", styles: [".x-transfer{margin:0;padding:0;display:inline-flex;align-items:center}.x-transfer-title{padding:.25rem .5625rem;display:flex;align-items:center;justify-content:space-between;border:var(--x-border-width) var(--x-border-style) var(--x-border);border-top-left-radius:var(--x-border-radius);border-top-right-radius:var(--x-border-radius);background-color:var(--x-background);color:var(--x-text-300)}.x-transfer-title-left{display:inline-flex;align-items:center}.x-transfer-inverse{margin:0 .5rem}.x-transfer-total{margin-left:.325rem}.x-transfer-box{min-width:12rem}.x-transfer-list{display:flex;flex-direction:column;height:18rem;width:100%;border:var(--x-border-width) var(--x-border-style) var(--x-border);border-top:none;border-bottom-left-radius:var(--x-border-radius);border-bottom-right-radius:var(--x-border-radius);overflow:auto}.x-transfer-item{margin:0;padding:.125rem .25rem;border-radius:var(--x-border-radius);display:flex;align-items:center;border:.0625rem dashed transparent;transition:border-color var(--x-animation-duration-base),background-color var(--x-animation-duration-base),color var(--x-animation-duration-base)}.x-transfer-droplist{margin:0;height:100%;padding:.25rem;list-style:none}.x-transfer-droplist.cdk-drop-list-dragging .x-transfer-item:hover{background-color:transparent}.x-transfer-droplist.cdk-drop-list-dragging .x-transfer-item.cdk-drag-placeholder{border-color:var(--x-primary);color:var(--x-primary);background-color:var(--x-background);opacity:.8}.x-transfer-droplist.cdk-drop-list-dragging .x-transfer-item:not(.cdk-drag-placeholder){transition:transform var(--x-animation-duration-base) cubic-bezier(0,0,.2,1)}.x-transfer-buttons{margin:0 1rem;display:flex;flex-direction:column}.x-transfer-buttons>x-button:not(:first-child){margin-top:.5rem}.x-transfer-search{padding:.5rem;border-left:var(--x-border-width) var(--x-border-style) var(--x-border);border-right:var(--x-border-width) var(--x-border-style) var(--x-border)}.x-transfer-search x-input{width:100%}.x-transfer-tree-label{flex:1}.x-transfer-footer{padding:.25rem .5625rem;border:var(--x-border-width) var(--x-border-style) var(--x-border);border-bottom-left-radius:var(--x-border-radius);border-bottom-right-radius:var(--x-border-radius)}.x-transfer-has-footer .x-transfer-list{border-bottom-left-radius:0;border-bottom-right-radius:0;border-bottom:none}body>li.x-transfer-item.cdk-drag-preview{margin:0;padding:.125rem .25rem;border-radius:var(--x-border-radius);display:flex;align-items:center;border:.0625rem dashed transparent;border-color:var(--x-border);color:var(--x-text-400);background-color:var(--x-background-a100);opacity:.9}body>li.x-transfer-item.cdk-drag-animating{transition:transform var(--x-animation-duration-base) cubic-bezier(0,0,.2,1)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i3.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i3.CdkDropListGroup, selector: "[cdkDropListGroup]", inputs: ["cdkDropListGroupDisabled"], exportAs: ["cdkDropListGroup"] }, { kind: "directive", type: i3.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: XOutletDirective, selector: "[xOutlet]", inputs: ["xOutletContext", "xOutlet"] }, { kind: "component", type: XCheckboxComponent, selector: "x-checkbox" }, { kind: "component", type: XButtonComponent, selector: "x-button" }, { kind: "component", type: XInputComponent, selector: "x-input" }, { kind: "component", type: XTreeComponent, selector: "x-tree" }, { kind: "component", type: XTableComponent, selector: "x-table" }, { kind: "directive", type: XKeywordDirective, selector: "[x-keyword]" }, { kind: "component", type: XLinkComponent, selector: "x-link" }, { kind: "pipe", type: XI18nPipe, name: "xI18n" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
592
593
  }
593
594
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: XTransferComponent, decorators: [{
594
595
  type: Component,
595
- args: [{ selector: `${XTransferPrefix}`, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [XValueAccessor(XTransferComponent)], template: "<div #transfer class=\"x-transfer\" cdkDropListGroup [ngClass]=\"classMap\">\r\n <div class=\"x-transfer-box\" [class.x-transfer-has-footer]=\"left.footerTpl\">\r\n <ng-container *ngTemplateOutlet=\"sourceTitleTpl; context: { source: left }\"></ng-container>\r\n <div [ngStyle]=\"left.listStyle!\" class=\"x-transfer-list\">\r\n <ng-container [ngSwitch]=\"type\">\r\n <ul\r\n *ngSwitchCase=\"'list'\"\r\n cdkDropList\r\n (cdkDropListDropped)=\"dropCdk($event)\"\r\n [cdkDropListData]=\"left.list\"\r\n [cdkDropListDisabled]=\"!drag && type === 'list'\"\r\n [cdkDropListEnterPredicate]=\"predicate\"\r\n class=\"x-transfer-droplist\"\r\n >\r\n <li class=\"x-transfer-item\" *ngFor=\"let node of left.list; trackBy: trackByNode\" cdkDrag [cdkDragData]=\"node\">\r\n <ng-container *ngTemplateOutlet=\"sourceNodeTpl; context: { node: node, source: left }\"></ng-container>\r\n </li>\r\n </ul>\r\n <x-tree\r\n *ngSwitchCase=\"'tree'\"\r\n [data]=\"left.list!\"\r\n multiple\r\n allowManyActivated\r\n [(activatedId)]=\"treeActivatedId\"\r\n (nodeClick)=\"onTreeNodeClick($event)\"\r\n [labelTpl]=\"treeLabelTpl\"\r\n ></x-tree>\r\n <ng-template #treeLabelTpl let-node=\"$node\">\r\n <span class=\"x-transfer-tree-label\" x-keyword [text]=\"left.searchInput!\">{{ node.label }}</span>\r\n </ng-template>\r\n <x-table\r\n #leftTableCom\r\n *ngSwitchCase=\"'table'\"\r\n [data]=\"tableData\"\r\n [columns]=\"tableColumns!\"\r\n [(size)]=\"tableSize\"\r\n [(index)]=\"tableIndex\"\r\n (indexChange)=\"getTableData()\"\r\n [query]=\"tableQuery\"\r\n [total]=\"tableTotal\"\r\n (activatedRowChange)=\"onTableCheckedRow($event, left)\"\r\n (headCheckboxChange)=\"onTableCheckedAll($event, left)\"\r\n hiddenWrapBorder\r\n hiddenPaginationBorder\r\n showEllipsis=\"false\"\r\n showTotal=\"false\"\r\n paginationPosition=\"bottom-center\"\r\n allowSelectRow=\"false\"\r\n [headSearchTpl]=\"left.tableHeadSearchTpl\"\r\n ></x-table>\r\n </ng-container>\r\n </div>\r\n <div class=\"x-transfer-footer\" *ngIf=\"left.footerTpl\">\r\n <ng-container *ngTemplateOutlet=\"left.footerTpl; context: { $source: left }\"></ng-container>\r\n </div>\r\n </div>\r\n <div class=\"x-transfer-buttons\">\r\n <x-button type=\"primary\" icon=\"fto-chevron-right\" [disabled]=\"left.disabledButton\" (click)=\"move(left, right)\"></x-button>\r\n <x-button type=\"primary\" icon=\"fto-chevron-left\" [disabled]=\"right.disabledButton\" (click)=\"move(right, left)\"></x-button>\r\n </div>\r\n <div class=\"x-transfer-box\" [class.x-transfer-has-footer]=\"right.footerTpl\">\r\n <ng-container *ngTemplateOutlet=\"sourceTitleTpl; context: { source: right }\"></ng-container>\r\n <div [ngSwitch]=\"type\" [ngStyle]=\"right.listStyle!\" class=\"x-transfer-list\">\r\n <x-table\r\n #rightTableCom\r\n *ngSwitchCase=\"'table'\"\r\n [data]=\"right.list!\"\r\n [columns]=\"tableColumns!\"\r\n (activatedRowChange)=\"onTableCheckedRow($event, right)\"\r\n (headCheckboxChange)=\"onTableCheckedAll($event, right)\"\r\n hiddenWrapBorder\r\n hiddenPaginationBorder\r\n showPagination=\"false\"\r\n showEllipsis=\"false\"\r\n showTotal=\"false\"\r\n paginationPosition=\"bottom-center\"\r\n allowSelectRow=\"false\"\r\n [headSearchTpl]=\"right.tableHeadSearchTpl\"\r\n ></x-table>\r\n <ul\r\n *ngSwitchDefault\r\n cdkDropList\r\n (cdkDropListDropped)=\"dropCdk($event)\"\r\n [cdkDropListData]=\"right.list\"\r\n [cdkDropListDisabled]=\"!drag || (drag && type !== 'list')\"\r\n [cdkDropListEnterPredicate]=\"predicate\"\r\n class=\"x-transfer-droplist\"\r\n >\r\n <li class=\"x-transfer-item\" *ngFor=\"let node of right.list; trackBy: trackByNode\" cdkDrag [cdkDragData]=\"node\">\r\n <ng-container *ngTemplateOutlet=\"sourceNodeTpl; context: { node: node, source: right }\"></ng-container>\r\n </li>\r\n </ul>\r\n </div>\r\n <div class=\"x-transfer-footer\" *ngIf=\"right.footerTpl\">\r\n <ng-container *ngTemplateOutlet=\"right.footerTpl; context: { $source: right }\"></ng-container>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #sourceTitleTpl let-source=\"source\">\r\n <div class=\"x-transfer-title\">\r\n <div class=\"x-transfer-title-left\">\r\n <x-checkbox\r\n *ngIf=\"source.title && !source.hiddenCheckAll\"\r\n [data]=\"[titleTpl ? '' : source.title]\"\r\n [(ngModel)]=\"source.checkedAll\"\r\n (ngModelChange)=\"checkedAllChange($event, source)\"\r\n [indeterminate]=\"source.indeterminate\"\r\n ></x-checkbox>\r\n <span *ngIf=\"source.title && source.hiddenCheckAll\">{{ source.title }}</span>\r\n <x-link *ngIf=\"inverse && type === 'list'\" class=\"x-transfer-inverse\" type=\"primary\" (click)=\"onInverse(source)\">{{\r\n 'transfer.inverse' | xI18n\r\n }}</x-link>\r\n </div>\r\n <ng-container *xOutlet=\"titleTpl; context: { $title: source.title, $checkedCount: source.checkedCount, $count: source.count }\"\r\n ><span class=\"x-transfer-total\">{{ source.checkedCount }} / {{ source.count }}</span></ng-container\r\n >\r\n </div>\r\n <div class=\"x-transfer-search\" *ngIf=\"search && type !== 'table'\">\r\n <x-input icon=\"fto-search\" [(ngModel)]=\"source.searchInput\" (ngModelChange)=\"onSearchInputChange(source)\" clearable></x-input>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #sourceNodeTpl let-node=\"node\" let-source=\"source\">\r\n <x-checkbox\r\n [data]=\"[{ id: node.id, label: nodeTpl ? nodeTpl : labelTpl, node: node }]\"\r\n [disabled]=\"node.disabled\"\r\n [(ngModel)]=\"node.checked\"\r\n (ngModelChange)=\"checkedChange($event, source)\"\r\n ></x-checkbox>\r\n <ng-template #labelTpl>\r\n <span x-keyword [text]=\"source.searchInput!\">{{ node.label }}</span>\r\n </ng-template>\r\n</ng-template>\r\n", styles: [".x-transfer{margin:0;padding:0;display:inline-flex;align-items:center}.x-transfer-title{padding:.25rem .5625rem;display:flex;align-items:center;justify-content:space-between;border:var(--x-border-width) var(--x-border-style) var(--x-border);border-top-left-radius:var(--x-border-radius);border-top-right-radius:var(--x-border-radius);background-color:var(--x-background);color:var(--x-text-300)}.x-transfer-title-left{display:inline-flex;align-items:center}.x-transfer-inverse{margin:0 .5rem}.x-transfer-total{margin-left:.325rem}.x-transfer-box{min-width:12rem}.x-transfer-list{display:flex;flex-direction:column;height:18rem;width:100%;border:var(--x-border-width) var(--x-border-style) var(--x-border);border-top:none;border-bottom-left-radius:var(--x-border-radius);border-bottom-right-radius:var(--x-border-radius);overflow:auto}.x-transfer-item{padding:.125rem .25rem;border-radius:var(--x-border-radius);display:flex;align-items:center;border:.0625rem dashed transparent;transition:border-color var(--x-animation-duration-base),background-color var(--x-animation-duration-base),color var(--x-animation-duration-base)}.x-transfer-droplist{height:100%;padding:.25rem}.x-transfer-droplist.cdk-drop-list-dragging .x-transfer-item:hover{background-color:transparent}.x-transfer-droplist.cdk-drop-list-dragging .x-transfer-item.cdk-drag-placeholder{border-color:var(--x-primary);color:var(--x-primary);background-color:var(--x-background);opacity:.8}.x-transfer-droplist.cdk-drop-list-dragging .x-transfer-item:not(.cdk-drag-placeholder){transition:transform var(--x-animation-duration-base) cubic-bezier(0,0,.2,1)}.x-transfer-buttons{margin:0 1rem;display:flex;flex-direction:column}.x-transfer-buttons>x-button:not(:first-child){margin-top:.5rem}.x-transfer-search{padding:.5rem;border-left:var(--x-border-width) var(--x-border-style) var(--x-border);border-right:var(--x-border-width) var(--x-border-style) var(--x-border)}.x-transfer-search x-input{width:100%}.x-transfer-tree-label{flex:1}.x-transfer-footer{padding:.25rem .5625rem;border:var(--x-border-width) var(--x-border-style) var(--x-border);border-bottom-left-radius:var(--x-border-radius);border-bottom-right-radius:var(--x-border-radius)}.x-transfer-has-footer .x-transfer-list{border-bottom-left-radius:0;border-bottom-right-radius:0;border-bottom:none}body>li.x-transfer-item.cdk-drag-preview{padding:.125rem .25rem;border-radius:var(--x-border-radius);display:flex;align-items:center;border:.0625rem dashed transparent;border-color:var(--x-border);color:var(--x-text-400);background-color:var(--x-background-a100);opacity:.9}body>li.x-transfer-item.cdk-drag-animating{transition:transform var(--x-animation-duration-base) cubic-bezier(0,0,.2,1)}\n"] }]
596
- }], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.XConfigService }, { type: i2.XI18nService }], propDecorators: { leftTableCom: [{
596
+ args: [{ selector: `${XTransferPrefix}`, standalone: true, imports: [
597
+ CommonModule,
598
+ FormsModule,
599
+ DragDropModule,
600
+ XOutletDirective,
601
+ XCheckboxComponent,
602
+ XButtonComponent,
603
+ XInputComponent,
604
+ XTreeComponent,
605
+ XTableComponent,
606
+ XKeywordDirective,
607
+ XLinkComponent,
608
+ XI18nPipe
609
+ ], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [XValueAccessor(XTransferComponent)], template: "<div #transfer class=\"x-transfer\" cdkDropListGroup [ngClass]=\"classMap\">\r\n <div class=\"x-transfer-box\" [class.x-transfer-has-footer]=\"left.footerTpl\">\r\n <ng-container *ngTemplateOutlet=\"sourceTitleTpl; context: { source: left }\"></ng-container>\r\n <div [ngStyle]=\"left.listStyle!\" class=\"x-transfer-list\">\r\n <ng-container [ngSwitch]=\"type\">\r\n <ul\r\n *ngSwitchCase=\"'list'\"\r\n cdkDropList\r\n (cdkDropListDropped)=\"dropCdk($event)\"\r\n [cdkDropListData]=\"left.list\"\r\n [cdkDropListDisabled]=\"!drag && type === 'list'\"\r\n [cdkDropListEnterPredicate]=\"predicate\"\r\n class=\"x-transfer-droplist\"\r\n >\r\n <li class=\"x-transfer-item\" *ngFor=\"let node of left.list; trackBy: trackByNode\" cdkDrag [cdkDragData]=\"node\">\r\n <ng-container *ngTemplateOutlet=\"sourceNodeTpl; context: { node: node, source: left }\"></ng-container>\r\n </li>\r\n </ul>\r\n <x-tree\r\n *ngSwitchCase=\"'tree'\"\r\n [data]=\"left.list!\"\r\n multiple\r\n allowManyActivated\r\n [(activatedId)]=\"treeActivatedId\"\r\n (nodeClick)=\"onTreeNodeClick($event)\"\r\n [labelTpl]=\"treeLabelTpl\"\r\n ></x-tree>\r\n <ng-template #treeLabelTpl let-node=\"$node\">\r\n <span class=\"x-transfer-tree-label\" x-keyword [text]=\"left.searchInput!\">{{ node.label }}</span>\r\n </ng-template>\r\n <x-table\r\n #leftTableCom\r\n *ngSwitchCase=\"'table'\"\r\n [data]=\"tableData\"\r\n [columns]=\"tableColumns!\"\r\n [(size)]=\"tableSize\"\r\n [(index)]=\"tableIndex\"\r\n (indexChange)=\"getTableData()\"\r\n [query]=\"tableQuery\"\r\n [total]=\"tableTotal\"\r\n (activatedRowChange)=\"onTableCheckedRow($event, left)\"\r\n (headCheckboxChange)=\"onTableCheckedAll($event, left)\"\r\n hiddenWrapBorder\r\n hiddenPaginationBorder\r\n showEllipsis=\"false\"\r\n showTotal=\"false\"\r\n paginationPosition=\"bottom-center\"\r\n allowSelectRow=\"false\"\r\n [headSearchTpl]=\"left.tableHeadSearchTpl\"\r\n ></x-table>\r\n </ng-container>\r\n </div>\r\n <div class=\"x-transfer-footer\" *ngIf=\"left.footerTpl\">\r\n <ng-container *ngTemplateOutlet=\"left.footerTpl; context: { $source: left }\"></ng-container>\r\n </div>\r\n </div>\r\n <div class=\"x-transfer-buttons\">\r\n <x-button type=\"primary\" icon=\"fto-chevron-right\" [disabled]=\"left.disabledButton\" (click)=\"move(left, right)\"></x-button>\r\n <x-button type=\"primary\" icon=\"fto-chevron-left\" [disabled]=\"right.disabledButton\" (click)=\"move(right, left)\"></x-button>\r\n </div>\r\n <div class=\"x-transfer-box\" [class.x-transfer-has-footer]=\"right.footerTpl\">\r\n <ng-container *ngTemplateOutlet=\"sourceTitleTpl; context: { source: right }\"></ng-container>\r\n <div [ngSwitch]=\"type\" [ngStyle]=\"right.listStyle!\" class=\"x-transfer-list\">\r\n <x-table\r\n #rightTableCom\r\n *ngSwitchCase=\"'table'\"\r\n [data]=\"right.list!\"\r\n [columns]=\"tableColumns!\"\r\n (activatedRowChange)=\"onTableCheckedRow($event, right)\"\r\n (headCheckboxChange)=\"onTableCheckedAll($event, right)\"\r\n hiddenWrapBorder\r\n hiddenPaginationBorder\r\n showPagination=\"false\"\r\n showEllipsis=\"false\"\r\n showTotal=\"false\"\r\n paginationPosition=\"bottom-center\"\r\n allowSelectRow=\"false\"\r\n [headSearchTpl]=\"right.tableHeadSearchTpl\"\r\n ></x-table>\r\n <ul\r\n *ngSwitchDefault\r\n cdkDropList\r\n (cdkDropListDropped)=\"dropCdk($event)\"\r\n [cdkDropListData]=\"right.list\"\r\n [cdkDropListDisabled]=\"!drag || (drag && type !== 'list')\"\r\n [cdkDropListEnterPredicate]=\"predicate\"\r\n class=\"x-transfer-droplist\"\r\n >\r\n <li class=\"x-transfer-item\" *ngFor=\"let node of right.list; trackBy: trackByNode\" cdkDrag [cdkDragData]=\"node\">\r\n <ng-container *ngTemplateOutlet=\"sourceNodeTpl; context: { node: node, source: right }\"></ng-container>\r\n </li>\r\n </ul>\r\n </div>\r\n <div class=\"x-transfer-footer\" *ngIf=\"right.footerTpl\">\r\n <ng-container *ngTemplateOutlet=\"right.footerTpl; context: { $source: right }\"></ng-container>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #sourceTitleTpl let-source=\"source\">\r\n <div class=\"x-transfer-title\">\r\n <div class=\"x-transfer-title-left\">\r\n <x-checkbox\r\n *ngIf=\"source.title && !source.hiddenCheckAll\"\r\n [data]=\"[titleTpl ? '' : source.title]\"\r\n [(ngModel)]=\"source.checkedAll\"\r\n (ngModelChange)=\"checkedAllChange($event, source)\"\r\n [indeterminate]=\"source.indeterminate\"\r\n ></x-checkbox>\r\n <span *ngIf=\"source.title && source.hiddenCheckAll\">{{ source.title }}</span>\r\n <x-link *ngIf=\"inverse && type === 'list'\" class=\"x-transfer-inverse\" type=\"primary\" (click)=\"onInverse(source)\">{{\r\n 'transfer.inverse' | xI18n\r\n }}</x-link>\r\n </div>\r\n <ng-container *xOutlet=\"titleTpl; context: { $title: source.title, $checkedCount: source.checkedCount, $count: source.count }\"\r\n ><span class=\"x-transfer-total\">{{ source.checkedCount }} / {{ source.count }}</span></ng-container\r\n >\r\n </div>\r\n <div class=\"x-transfer-search\" *ngIf=\"search && type !== 'table'\">\r\n <x-input icon=\"fto-search\" [(ngModel)]=\"source.searchInput\" (ngModelChange)=\"onSearchInputChange(source)\" clearable></x-input>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #sourceNodeTpl let-node=\"node\" let-source=\"source\">\r\n <x-checkbox\r\n [data]=\"[{ id: node.id, label: nodeTpl ? nodeTpl : labelTpl, node: node }]\"\r\n [disabled]=\"node.disabled\"\r\n [(ngModel)]=\"node.checked\"\r\n (ngModelChange)=\"checkedChange($event, source)\"\r\n ></x-checkbox>\r\n <ng-template #labelTpl>\r\n <span x-keyword [text]=\"source.searchInput!\">{{ node.label }}</span>\r\n </ng-template>\r\n</ng-template>\r\n", styles: [".x-transfer{margin:0;padding:0;display:inline-flex;align-items:center}.x-transfer-title{padding:.25rem .5625rem;display:flex;align-items:center;justify-content:space-between;border:var(--x-border-width) var(--x-border-style) var(--x-border);border-top-left-radius:var(--x-border-radius);border-top-right-radius:var(--x-border-radius);background-color:var(--x-background);color:var(--x-text-300)}.x-transfer-title-left{display:inline-flex;align-items:center}.x-transfer-inverse{margin:0 .5rem}.x-transfer-total{margin-left:.325rem}.x-transfer-box{min-width:12rem}.x-transfer-list{display:flex;flex-direction:column;height:18rem;width:100%;border:var(--x-border-width) var(--x-border-style) var(--x-border);border-top:none;border-bottom-left-radius:var(--x-border-radius);border-bottom-right-radius:var(--x-border-radius);overflow:auto}.x-transfer-item{margin:0;padding:.125rem .25rem;border-radius:var(--x-border-radius);display:flex;align-items:center;border:.0625rem dashed transparent;transition:border-color var(--x-animation-duration-base),background-color var(--x-animation-duration-base),color var(--x-animation-duration-base)}.x-transfer-droplist{margin:0;height:100%;padding:.25rem;list-style:none}.x-transfer-droplist.cdk-drop-list-dragging .x-transfer-item:hover{background-color:transparent}.x-transfer-droplist.cdk-drop-list-dragging .x-transfer-item.cdk-drag-placeholder{border-color:var(--x-primary);color:var(--x-primary);background-color:var(--x-background);opacity:.8}.x-transfer-droplist.cdk-drop-list-dragging .x-transfer-item:not(.cdk-drag-placeholder){transition:transform var(--x-animation-duration-base) cubic-bezier(0,0,.2,1)}.x-transfer-buttons{margin:0 1rem;display:flex;flex-direction:column}.x-transfer-buttons>x-button:not(:first-child){margin-top:.5rem}.x-transfer-search{padding:.5rem;border-left:var(--x-border-width) var(--x-border-style) var(--x-border);border-right:var(--x-border-width) var(--x-border-style) var(--x-border)}.x-transfer-search x-input{width:100%}.x-transfer-tree-label{flex:1}.x-transfer-footer{padding:.25rem .5625rem;border:var(--x-border-width) var(--x-border-style) var(--x-border);border-bottom-left-radius:var(--x-border-radius);border-bottom-right-radius:var(--x-border-radius)}.x-transfer-has-footer .x-transfer-list{border-bottom-left-radius:0;border-bottom-right-radius:0;border-bottom:none}body>li.x-transfer-item.cdk-drag-preview{margin:0;padding:.125rem .25rem;border-radius:var(--x-border-radius);display:flex;align-items:center;border:.0625rem dashed transparent;border-color:var(--x-border);color:var(--x-text-400);background-color:var(--x-background-a100);opacity:.9}body>li.x-transfer-item.cdk-drag-animating{transition:transform var(--x-animation-duration-base) cubic-bezier(0,0,.2,1)}\n"] }]
610
+ }], propDecorators: { leftTableCom: [{
597
611
  type: ViewChild,
598
612
  args: ['leftTableCom']
599
613
  }], rightTableCom: [{
600
614
  type: ViewChild,
601
615
  args: ['rightTableCom']
602
616
  }] } });
603
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL25nLW5lc3QvdWkvdHJhbnNmZXIvdHJhbnNmZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGliL25nLW5lc3QvdWkvdHJhbnNmZXIvdHJhbnNmZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxpQkFBaUIsRUFJakIsdUJBQXVCLEVBSXZCLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFrQyxpQkFBaUIsRUFBaUIsTUFBTSxxQkFBcUIsQ0FBQztBQUN4SCxPQUFPLEVBQ0wsU0FBUyxFQUNULFFBQVEsRUFDUixRQUFRLEVBRVIsT0FBTyxFQUNQLFFBQVEsRUFDUixTQUFTLEVBQ1QsY0FBYyxFQUNkLFVBQVUsRUFDVixXQUFXLEVBRVgsWUFBWSxFQUNiLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUF3QixNQUFNLHdCQUF3QixDQUFDO0FBQ2xHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FBYXZELE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxpQkFBaUI7SUF1QnZELElBQVksVUFBVTtRQUNwQixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFO1lBQ3hCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7U0FDOUI7YUFBTTtZQUNMLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENB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LFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzNDO0lBQ0gsQ0FBQztJQUVPLHFCQUFxQjtRQUMzQixJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUM7WUFBRSxPQUFPO1FBQ2xELElBQUksSUFBSSxDQUFDLGtCQUFtQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsa0JBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDNUQ7UUFDRCxJQUFJLElBQUksQ0FBQyxrQkFBbUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGtCQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzdEO0lBQ0gsQ0FBQztpSUFqa0JVLGtCQUFrQjtxSEFBbEIsa0JBQWtCLHFDQUZsQixDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLHFSQzFDakQsMnRNQXNJQTs7MkZEMUZhLGtCQUFrQjtrQkFSOUIsU0FBUzsrQkFDRSxHQUFHLGVBQWUsRUFBRSxpQkFHZixpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDLENBQUMsY0FBYyxvQkFBb0IsQ0FBQzsrTEFHcEIsWUFBWTtzQkFBdEMsU0FBUzt1QkFBQyxjQUFjO2dCQUNHLGFBQWE7c0JBQXhDLFNBQVM7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIE9uSW5pdCxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxuICBSZW5kZXJlcjIsXHJcbiAgRWxlbWVudFJlZixcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkRlc3Ryb3ksXHJcbiAgVmlld0NoaWxkXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFhUcmFuc2ZlclByZWZpeCwgWFRyYW5zZmVyTm9kZSwgWFRyYW5zZmVyU291cmNlLCBYVHJhbnNmZXJQcm9wZXJ0eSwgWFRyYW5zZmVyVHlwZSB9IGZyb20gJy4vdHJhbnNmZXIucHJvcGVydHknO1xyXG5pbXBvcnQge1xyXG4gIFhJc0NoYW5nZSxcclxuICBYSXNFbXB0eSxcclxuICBYU2V0RGF0YSxcclxuICBYQ29uZmlnU2VydmljZSxcclxuICBYUmVtb3ZlLFxyXG4gIFhJc0FycmF5LFxyXG4gIFhJc09iamVjdCxcclxuICBYSXNPYmplY3RBcnJheSxcclxuICBYSXNCb29sZWFuLFxyXG4gIFhJc0Z1bmN0aW9uLFxyXG4gIFhSZXN1bHRMaXN0LFxyXG4gIFhJc1VuZGVmaW5lZFxyXG59IGZyb20gJ0BuZy1uZXN0L3VpL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyB0cmFuc2ZlckFycmF5SXRlbSwgbW92ZUl0ZW1JbkFycmF5LCBDZGtEcmFnRHJvcCwgQ2RrRHJhZyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xyXG5pbXBvcnQgeyBYVmFsdWVBY2Nlc3NvciB9IGZyb20gJ0BuZy1uZXN0L3VpL2Jhc2UtZm9ybSc7XHJcbmltcG9ydCB7IFhJMThuU2VydmljZSwgWEkxOG5UcmFuc2ZlciB9IGZyb20gJ0BuZy1uZXN0L3VpL2kxOG4nO1xyXG5pbXBvcnQgeyBYVHJlZU5vZGUgfSBmcm9tICdAbmctbmVzdC91aS90cmVlJztcclxuaW1wb3J0IHsgWFRhYmxlQ29sdW1uLCBYVGFibGVDb21wb25lbnQsIFhUYWJsZUhlYWRDaGVja2JveCB9IGZyb20gJ0BuZy1uZXN0L3VpL3RhYmxlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBgJHtYVHJhbnNmZXJQcmVmaXh9YCxcclxuICB0ZW1wbGF0ZVVybDogJy4vdHJhbnNmZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RyYW5zZmVyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBwcm92aWRlcnM6IFtYVmFsdWVBY2Nlc3NvcihYVHJhbnNmZXJDb21wb25lbnQpXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgWFRyYW5zZmVyQ29tcG9uZW50IGV4dGVuZHMgWFRyYW5zZmVyUHJvcGVydHkgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuICBAVmlld0NoaWxkKCdsZWZ0VGFibGVDb20nKSBsZWZ0VGFibGVDb20/OiBYVGFibGVDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZCgncmlnaHRUYWJsZUNvbScpIHJpZ2h0VGFibGVDb20/OiBYVGFibGVDb21wb25lbnQ7XHJcbiAgbm9kZXM6IFhUcmFuc2Zlck5vZGVbXSA9IFtdO1xyXG4gIGxlZnQ6IFhUcmFuc2ZlclNvdXJjZSA9IHtcclxuICAgIGxpc3Q6IFtdLFxyXG4gICAgc2VhcmNoTGlzdDogW10sXHJcbiAgICBjaGVja2VkQ291bnQ6IDAsXHJcbiAgICBkaXJlY3Rpb246ICdsZWZ0JyxcclxuICAgIGRpc2FibGVkQnV0dG9uOiB0cnVlXHJcbiAgfTtcclxuICByaWdodDogWFRyYW5zZmVyU291cmNlID0ge1xyXG4gICAgbGlzdDogW10sXHJcbiAgICBzZWFyY2hMaXN0OiBbXSxcclxuICAgIGNoZWNrZWRDb3VudDogMCxcclxuICAgIGRpcmVjdGlvbjogJ3JpZ2h0JyxcclxuICAgIGRpc2FibGVkQnV0dG9uOiB0cnVlXHJcbiAgfTtcclxuICBzZWFyY2hJbnB1dDogc3RyaW5nID0gJyc7XHJcbiAgc2VhcmNoSW5wdXRMZWZ0Q2hhbmdlID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xyXG4gIHNlYXJjaElucHV0UmlnaHRDaGFuZ2UgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XHJcbiAgc2VhcmNoRGVib3VuY2VUaW1lID0gMjAwO1xyXG4gIGxvY2FsZTogWEkxOG5UcmFuc2ZlciA9IHt9O1xyXG4gIHByaXZhdGUgZ2V0IGxvY2FsVGl0bGUoKSB7XHJcbiAgICBpZiAodGhpcy50eXBlID09PSAndHJlZScpIHtcclxuICAgICAgcmV0dXJuIHRoaXMubG9jYWxlLnRyZWVUaXRsZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmxvY2FsZS5saXN0VGl0bGU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgX3VuU3ViamVjdCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgdHJlZUFjdGl2YXRlZElkOiBhbnlbXSA9IFtdO1xyXG4gIHRhYmxlRGF0YTogWFRyYW5zZmVyTm9kZVtdID0gW107XHJcbiAgdGFibGVDaGVja2JveENvbHVtbj86IFhUYWJsZUNvbHVtbjtcclxuICBpc09iamVjdEFycmF5ID0gZmFsc2U7XHJcbiAgb3ZlcnJpZGUgd3JpdGVWYWx1ZSh2YWx1ZTogYW55W10pOiB2b2lkIHtcclxuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICAgIGlmIChYSXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgdGhpcy50cmVlQWN0aXZhdGVkSWQgPSBbLi4udmFsdWVdO1xyXG4gICAgICBpZiAoWElzT2JqZWN0QXJyYXkodmFsdWUpKSB7XHJcbiAgICAgICAgdGhpcy5pc09iamVjdEFycmF5ID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5zZXRMaXN0KHRoaXMubm9kZXMpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHZhbHVlcygpIHtcclxuICAgIGlmICh0aGlzLmlzT2JqZWN0QXJyYXkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMudmFsdWUubWFwKCh4KSA9PiB4LmlkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgIHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcclxuICAgIHB1YmxpYyBvdmVycmlkZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHVibGljIGNvbmZpZ1NlcnZpY2U6IFhDb25maWdTZXJ2aWNlLFxyXG4gICAgcHVibGljIGkxOG46IFhJMThuU2VydmljZVxyXG4gICkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5zZXRUaXRsZXMoKTtcclxuICAgIHRoaXMuc2V0TGlzdFN0eWxlKCk7XHJcbiAgICB0aGlzLnNldEhpZGRlbkNoZWNrQWxsKCk7XHJcbiAgICB0aGlzLmdldFRhYmxlQ2hlY2tDb2x1bW4oKTtcclxuICAgIHRoaXMuc2V0Rm9vdGVyVHBsKCk7XHJcbiAgICB0aGlzLnNldFRhYmxlSGVhZFNlYXJjaFRwbCgpO1xyXG4gICAgdGhpcy5pMThuLmxvY2FsZUNoYW5nZVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHgpID0+IHgudHJhbnNmZXIgYXMgWEkxOG5UcmFuc2ZlciksXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX3VuU3ViamVjdClcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2NhbGUgPSB4O1xyXG4gICAgICAgIFhJc0VtcHR5KHRoaXMudGl0bGVzKSAmJiB0aGlzLnNldFRpdGxlcygpO1xyXG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICB9KTtcclxuICAgIHRoaXMuc2VhcmNoSW5wdXRMZWZ0Q2hhbmdlXHJcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSh0aGlzLnNlYXJjaERlYm91bmNlVGltZSksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIHRha2VVbnRpbCh0aGlzLl91blN1YmplY3QpKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLnNldFNlYXJjaElucHV0Q2hhbmdlKHRoaXMubGVmdCk7XHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5zZWFyY2hJbnB1dFJpZ2h0Q2hhbmdlXHJcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSh0aGlzLnNlYXJjaERlYm91bmNlVGltZSksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIHRha2VVbnRpbCh0aGlzLl91blN1YmplY3QpKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLnNldFNlYXJjaElucHV0Q2hhbmdlKHRoaXMucmlnaHQpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGNvbnN0IHsgZGF0YSB9ID0gY2hhbmdlcztcclxuICAgIFhJc0NoYW5nZShkYXRhKSAmJiB0aGlzLnNldERhdGEoKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5fdW5TdWJqZWN0Lm5leHQoKTtcclxuICAgIHRoaXMuX3VuU3ViamVjdC51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgb25TZWFyY2hJbnB1dENoYW5nZShzb3VyY2U6IFhUcmFuc2ZlclNvdXJjZSkge1xyXG4gICAgaWYgKHNvdXJjZS5kaXJlY3Rpb24gPT09ICdsZWZ0Jykge1xyXG4gICAgICB0aGlzLnNlYXJjaElucHV0TGVmdENoYW5nZS5uZXh0KHNvdXJjZS5zZWFyY2hJbnB1dCEpO1xyXG4gICAgfSBlbHNlIGlmIChzb3VyY2UuZGlyZWN0aW9uID09PSAncmlnaHQnKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoSW5wdXRSaWdodENoYW5nZS5uZXh0KHNvdXJjZS5zZWFyY2hJbnB1dCEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0U2VhcmNoSW5wdXRDaGFuZ2Uoc291cmNlOiBYVHJhbnNmZXJTb3VyY2UpIHtcclxuICAgIGlmIChYSXNVbmRlZmluZWQoc291cmNlLnNlYXJjaElucHV0KSkgcmV0dXJuO1xyXG4gICAgaWYgKFhJc0VtcHR5KHNvdXJjZS5zZWFyY2hJbnB1dCkpIHtcclxuICAgICAgc291cmNlLmxpc3QgPSBbLi4uc291cmNlLnNlYXJjaExpc3QhXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHN3aXRjaCAodGhpcy50eXBlKSB7XHJcbiAgICAgICAgY2FzZSAnbGlzdCc6XHJcbiAgICAgICAgICBzb3VyY2UubGlzdCA9IHNvdXJjZS5zZWFyY2hMaXN0Py5maWx0ZXIoKHgpID0+IHgubGFiZWwuaW5kZXhPZihzb3VyY2Uuc2VhcmNoSW5wdXQpID49IDApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAndHJlZSc6XHJcbiAgICAgICAgICBpZiAoc291cmNlLmRpcmVjdGlvbiA9PT0gJ3JpZ2h0Jykge1xyXG4gICAgICAgICAgICBzb3VyY2UubGlzdCA9IHNvdXJjZS5zZWFyY2hMaXN0Py5maWx0ZXIoKHgpID0+IHgubGFiZWwuaW5kZXhPZihzb3VyY2Uuc2VhcmNoSW5wdXQpID49IDApO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChzb3VyY2UuZGlyZWN0aW9uID09PSAnbGVmdCcpIHtcclxuICAgICAgICAgICAgbGV0IHNlYXJjaExpc3QgPSBzb3VyY2Uuc2VhcmNoTGlzdD8uZmlsdGVyKCh4KSA9PiB4LmxhYmVsLmluZGV4T2Yoc291cmNlLnNlYXJjaElucHV0KSA+PSAwKSE7XHJcbiAgICAgICAgICAgIGxldCBwYXJlbnRzOiBYVHJhbnNmZXJOb2RlW10gPSBbXTtcclxuICAgICAgICAgICAgY29uc3QgZmluZFBhcmVudCA9IChpdGVtOiBYVHJhbnNmZXJOb2RlKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKCFpdGVtLnBpZCkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIGxldCBwYXJlbnQgPSBzb3VyY2Uuc2VhcmNoTGlzdD8uZmluZCgoeCkgPT4geC5pZCA9PT0gaXRlbS5waWQpO1xyXG4gICAgICAgICAgICAgIGlmIChwYXJlbnQgJiYgIXBhcmVudHMuc29tZSgoeCkgPT4geC5pZCA9PT0gcGFyZW50IS5pZCkpIHtcclxuICAgICAgICAgICAgICAgIHBhcmVudHMucHVzaChwYXJlbnQpO1xyXG4gICAgICAgICAgICAgICAgZmluZFBhcmVudChwYXJlbnQpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiBzZWFyY2hMaXN0KSB7XHJcbiAgICAgICAgICAgICAgZmluZFBhcmVudChpdGVtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzb3VyY2UubGlzdCA9IFsuLi5zZWFyY2hMaXN0LCAuLi5wYXJlbnRzXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ3RhYmxlJzpcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldExpc3RDb3VudCh0aGlzLnR5cGUsIHNvdXJjZSk7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBjaGVja2VkQWxsQ2hhbmdlKCRldmVudDogYm9vbGVhbiwgc291cmNlOiBYVHJhbnNmZXJTb3VyY2UpIHtcclxuICAgIGxldCBsaXN0OiBYVHJhbnNmZXJOb2RlW10gPSAoc291cmNlLmxpc3Q/LmZpbHRlcigoeCkgPT4gIXguZGlzYWJsZWQpIGFzIFhUcmFuc2Zlck5vZGVbXSkubWFwKCh4KSA9PiB7XHJcbiAgICAgIHguY2hlY2tlZCA9ICRldmVudDtcclxuICAgICAgcmV0dXJuIHg7XHJcbiAgICB9KTtcclxuICAgIGlmICh0aGlzLnR5cGUgPT09ICd0cmVlJyAmJiBzb3VyY2UuZGlyZWN0aW9uID09PSAnbGVmdCcpIHtcclxuICAgICAgdGhpcy50cmVlQWN0aXZhdGVkSWQgPSAkZXZlbnQgPyBzb3VyY2UubGlzdCEubWFwKCh4KSA9PiB4LmlkKSEgOiBzb3VyY2UubGlzdCEuZmlsdGVyKCh4KSA9PiB4LmRpc2FibGVkKS5tYXAoKHgpID0+IHguaWQpO1xyXG4gICAgfVxyXG4gICAgc291cmNlLmNoZWNrZWRDb3VudCA9ICRldmVudCA/IGxpc3QubGVuZ3RoIDogMDtcclxuICAgIHNvdXJjZS5pbmRldGVybWluYXRlID0gJGV2ZW50O1xyXG4gICAgdGhpcy5zZXRCdXR0b25EaXNhYmxlZChzb3VyY2UpO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tlZENoYW5nZSgkZXZlbnQ6IGJvb2xlYW4sIHNvdXJjZTogWFRyYW5zZmVyU291cmNlKSB7XHJcbiAgICBpZiAoISRldmVudCkgKHNvdXJjZS5jaGVja2VkQ291bnQgYXMgbnVtYmVyKS0tO1xyXG4gICAgZWxzZSAoc291cmNlLmNoZWNrZWRDb3VudCBhcyBudW1iZXIpKys7XHJcbiAgICB0aGlzLnNldENoZWNrZWRBbGwoc291cmNlKTtcclxuICAgIHRoaXMuc2V0QnV0dG9uRGlzYWJsZWQoc291cmNlKTtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIG1vdmUoZnJvbTogWFRyYW5zZmVyU291cmNlLCB0bzogWFRyYW5zZmVyU291cmNlKSB7XHJcbiAgICBpZiAoZnJvbS5kaXNhYmxlZEJ1dHRvbikgcmV0dXJuO1xyXG4gICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcclxuICAgICAgY2FzZSAnbGlzdCc6XHJcbiAgICAgICAgdGhpcy5tb3ZlTGlzdChmcm9tLCB0byk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3RyZWUnOlxyXG4gICAgICAgIHRoaXMubW92ZVRyZWUoZnJvbSwgdG8pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICd0YWJsZSc6XHJcbiAgICAgICAgdGhpcy5tb3ZlVGFibGUoZnJvbSwgdG8pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtb3ZlTGlzdChmcm9tOiBYVHJhbnNmZXJTb3VyY2UsIHRvOiBYVHJhbnNmZXJTb3VyY2UpIHtcclxuICAgIGxldCBjaGVja2VkSXRlbXMgPSBmcm9tLmxpc3Q/LmZpbHRlcigoeCkgPT4gIXguZGlzYWJsZWQgJiYgeC5jaGVja2VkKSE7XHJcbiAgICBsZXQgaiA9IDA7XHJcbiAgICBjaGVja2VkSXRlbXMuZm9yRWFjaCgoeCkgPT4ge1xyXG4gICAgICBsZXQgaW5kZXggPSBmcm9tLmxpc3Q/LmluZGV4T2YoeCkgYXMgbnVtYmVyO1xyXG4gICAgICB4LmNoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgdHJhbnNmZXJBcnJheUl0ZW0oZnJvbS5saXN0ISwgdG8ubGlzdCEsIGluZGV4LCBqKTtcclxuICAgICAgaWYgKHRoaXMuc2VhcmNoKSB7XHJcbiAgICAgICAgaW5kZXggPSBmcm9tLnNlYXJjaExpc3Q/LmluZGV4T2YoeCkgYXMgbnVtYmVyO1xyXG4gICAgICAgIHRyYW5zZmVyQXJyYXlJdGVtKGZyb20uc2VhcmNoTGlzdCEsIHRvLnNlYXJjaExpc3QhLCBpbmRleCwgaik7XHJcbiAgICAgIH1cclxuICAgICAgaisrO1xyXG4gICAgfSk7XHJcbiAgICBmcm9tLmxpc3QgPSBbLi4uZnJvbS5saXN0IV07XHJcbiAgICB0by5saXN0ID0gWy4uLnRvLmxpc3QhXTtcclxuICAgIHRoaXMuc2V0Q2hlY2tlZENvdW50KCdsaXN0JywgZnJvbSwgdG8pO1xyXG4gICAgdGhpcy5zZXRMaXN0Q291bnQoJ2xpc3QnLCBmcm9tLCB0byk7XHJcbiAgICB0aGlzLnNldENoZWNrZWRBbGwoZnJvbSwgdG8pO1xyXG4gICAgdGhpcy5zZXRCdXR0b25EaXNhYmxlZChmcm9tLCB0byk7XHJcbiAgICB0aGlzLnNldFNlYXJjaExpc3QoZnJvbSwgdG8pO1xyXG4gICAgdGhpcy5zZXRWYWx1ZSgpO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtb3ZlVHJlZShmcm9tOiBYVHJhbnNmZXJTb3VyY2UsIHRvOiBYVHJhbnNmZXJTb3VyY2UpIHtcclxuICAgIGxldCBjaGVja2VkSXRlbXM6IFhUcmFuc2Zlck5vZGVbXSA9IFtdO1xyXG4gICAgaWYgKHRvLmRpcmVjdGlvbiA9PT0gJ3JpZ2h0Jykge1xyXG4gICAgICBjaGVja2VkSXRlbXMgPSBmcm9tLmxpc3Q/LmZpbHRlcigoeCkgPT4gIXguZGlzYWJsZWQgJiYgIVhJc0VtcHR5KHRoaXMudHJlZUFjdGl2YXRlZElkKSAmJiB0aGlzLnRyZWVBY3RpdmF0ZWRJZC5pbmNsdWRlcyh4LmlkKSkhO1xyXG4gICAgICBjaGVja2VkSXRlbXMuZm9yRWFjaCgoeDogWFRyZWVOb2RlKSA9PiB7XHJcbiAgICAgICAgeC5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgeC5jaGFuZ2UgJiYgeC5jaGFuZ2UoKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRvLmxpc3Q/LnVuc2hpZnQoXHJcbiAgICAgICAgLi4uY2hlY2tlZEl0ZW1zLm1hcCgoeCkgPT4ge1xyXG4gICAgICAgICAgbGV0IHJlcyA9IHsgLi4ueCB9O1xyXG4gICAgICAgICAgcmVzLmNoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgICAgIHJlcy5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnNldENoZWNrZWRDb3VudCgndHJlZScsIGZyb20pO1xyXG4gICAgICB0aGlzLnNldENoZWNrZWRDb3VudCgnbGlzdCcsIHRvKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNoZWNrZWRJdGVtcyA9IFhSZW1vdmUoZnJvbS5saXN0ISwgKHgpID0+ICF4LmRpc2FibGVkICYmIHguY2hlY2tlZCEpO1xyXG4gICAgICBpZiAodGhpcy5zZWFyY2gpIHtcclxuICAgICAgICBYUmVtb3ZlKGZyb20uc2VhcmNoTGlzdCEsICh4KSA9PiAheC5kaXNhYmxlZCAmJiB4LmNoZWNrZWQhKTtcclxuICAgICAgfVxyXG4gICAgICBmb3IgKGxldCBpdGVtIG9mIGNoZWNrZWRJdGVtcykge1xyXG4gICAgICAgIGxldCBub2RlOiBYVHJlZU5vZGUgPSB0by5saXN0Py5maW5kKCh4KSA9PiB4LmlkID09PSBpdGVtLmlkKSE7XHJcbiAgICAgICAgaWYgKG5vZGUpIHtcclxuICAgICAgICAgIG5vZGUuY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgbm9kZS5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgY29uc3QgaWR4ID0gdGhpcy50cmVlQWN0aXZhdGVkSWQuZmluZEluZGV4KCh4KSA9PiB4ID09PSBub2RlLmlkKTtcclxuICAgICAgICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnRyZWVBY3RpdmF0ZWRJZC5zcGxpY2UoaWR4LCAxKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIG5vZGUuY2hhbmdlICYmIG5vZGUuY2hhbmdlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2V0Q2hlY2tlZENvdW50KCd0cmVlJywgdG8pO1xyXG4gICAgICB0aGlzLnNldENoZWNrZWRDb3VudCgnbGlzdCcsIGZyb20pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZXRDaGVja2VkQWxsKGZyb20sIHRvKTtcclxuICAgIHRoaXMuc2V0TGlzdENvdW50KCdsaXN0JywgZnJvbSwgdG8pO1xyXG4gICAgdGhpcy5zZXRCdXR0b25EaXNhYmxlZChmcm9tLCB0byk7XHJcbiAgICB0aGlzLnNldFNlYXJjaExpc3QoZnJvbSwgdG8pO1xyXG4gICAgdGhpcy5zZXRWYWx1ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtb3ZlVGFibGUoZnJvbTogWFRyYW5zZmVyU291cmNlLCB0bzogWFRyYW5zZmVyU291cmNlKSB7XHJcbiAgICBsZXQgY2hlY2tlZEl0ZW1zOiBYVHJhbnNmZXJOb2RlW10gPSBbXTtcclxuICAgIGlmICh0by5kaXJlY3Rpb24gPT09ICdyaWdodCcpIHtcclxuICAgICAgY2hlY2tlZEl0ZW1zID0gZnJvbS5saXN0Py5maWx0ZXIoKHgpID0+ICF4LmRpc2FibGVkICYmIHguY2hlY2tlZCkhO1xyXG4gICAgICB0by5saXN0ID0gW1xyXG4gICAgICAgIC4uLmNoZWNrZWRJdGVtcy5tYXAoKHgpID0+IHtcclxuICAgICAgICAgIGNvbnN0IHJlcyA9IHsgLi4ueCB9O1xyXG4gICAgICAgICAgeC5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICB4LmNoZWNrZWQgPSB0cnVlO1xyXG4gICAgICAgICAgcmVzLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICByZXMuY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KSxcclxuICAgICAgICAuLi50by5saXN0IVxyXG4gICAgICBdO1xyXG4gICAgICB0aGlzLnRhYmxlRGF0YSA9IFsuLi5mcm9tLmxpc3QhXTtcclxuICAgICAgdGhpcy5zZXRDaGVja2VkQ291bnQoJ3RhYmxlJywgZnJvbSk7XHJcbiAgICAgIHRoaXMuc2V0Q2hlY2tlZENvdW50KCdsaXN0JywgdG8pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY2hlY2tlZEl0ZW1zID0gWFJlbW92ZShmcm9tLmxpc3QhLCAoeCkgPT4gIXguZGlzYWJsZWQgJiYgeC5jaGVja2VkISk7XHJcbiAgICAgIGNvbnN0IGlkcyA9IGNoZWNrZWRJdGVtcy5tYXAoKHgpID0+IHguaWQpO1xyXG4gICAgICBmb3IgKGxldCBpdGVtIG9mIHRvLmxpc3QhKSB7XHJcbiAgICAgICAgaWYgKGlkcy5pbmNsdWRlcyhpdGVtLmlkKSkge1xyXG4gICAgICAgICAgaXRlbS5jaGVja2VkID0gZmFsc2U7XHJcbiAgICAgICAgICBpdGVtLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGZyb20ubGlzdCA9IFsuLi5mcm9tLmxpc3QhXTtcclxuICAgICAgdGhpcy50YWJsZURhdGEgPSBbLi4udG8ubGlzdCFdO1xyXG4gICAgICB0aGlzLnNldENoZWNrZWRDb3VudCgndGFibGUnLCB0byk7XHJcbiAgICAgIHRoaXMuc2V0Q2hlY2tlZENvdW50KCdsaXN0JywgZnJvbSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldExpc3RDb3VudCgndGFibGUnLCBmcm9tLCB0byk7XHJcbiAgICB0aGlzLnNldENoZWNrZWRBbGwoZnJvbSwgdG8pO1xyXG4gICAgdGhpcy5zZXRCdXR0b25EaXNhYmxlZChmcm9tLCB0byk7XHJcbiAgICB0aGlzLnNldFNlYXJjaExpc3QoZnJvbSwgdG8pO1xyXG4gICAgdGhpcy5zZXRWYWx1ZSgpO1xyXG4gIH1cclxuXHJcbiAgZHJvcENkayhldmVudDogQ2RrRHJhZ0Ryb3A8WFRyYW5zZmVyTm9kZVtdIHwgdW5kZWZpbmVkLCBhbnk+KSB7XHJcbiAgICBjb25zdCBldiA9IGV2ZW50IGFzIENka0RyYWdEcm9wPFhUcmFuc2Zlck5vZGVbXT47XHJcbiAgICBpZiAoZXYucHJldmlvdXNDb250YWluZXIgPT09IGV2LmNvbnRhaW5lcikge1xyXG4gICAgICBtb3ZlSXRlbUluQXJyYXkoZXYuY29udGFpbmVyLmRhdGEsIGV2LnByZXZpb3VzSW5kZXgsIGV2LmN1cnJlbnRJbmRleCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0cmFuc2ZlckFycmF5SXRlbShldi5wcmV2aW91c0NvbnRhaW5lci5kYXRhLCBldi5jb250YWluZXIuZGF0YSwgZXYucHJldmlvdXNJbmRleCwgZXYuY3VycmVudEluZGV4KTtcclxuICAgICAgdGhpcy5zZXRDaGVja2VkQ291bnQoJ2xpc3QnLCB0aGlzLmxlZnQsIHRoaXMucmlnaHQpO1xyXG4gICAgICB0aGlzLnNldENoZWNrZWRBbGwodGhpcy5sZWZ0LCB0aGlzLnJpZ2h0KTtcclxuICAgICAgdGhpcy5zZXRMaXN0Q291bnQoJ2xpc3QnLCB0aGlzLmxlZnQsIHRoaXMucmlnaHQpO1xyXG4gICAgICB0aGlzLnNldEJ1dHRvbkRpc2FibGVkKHRoaXMubGVmdCwgdGhpcy5yaWdodCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldFNlYXJjaExpc3QodGhpcy5sZWZ0LCB0aGlzLnJpZ2h0KTtcclxuICAgIHRoaXMuc2V0VmFsdWUoKTtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHByZWRpY2F0ZShpdGVtOiBDZGtEcmFnPFhUcmFuc2Zlck5vZGU+KSB7XHJcbiAgICByZXR1cm4gIWl0ZW0uZGF0YS5kaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIHRyYWNrQnlOb2RlKF9pbmRleDogbnVtYmVyLCBpdGVtOiBYVHJhbnNmZXJOb2RlKSB7XHJcbiAgICByZXR1cm4gaXRlbS5pZDtcclxuICB9XHJcblxyXG4gIHNldExpc3RDb3VudCh0eXBlOiBYVHJhbnNmZXJUeXBlID0gJ2xpc3QnLCAuLi5zb3VyY2VzOiBYVHJhbnNmZXJTb3VyY2VbXSkge1xyXG4gICAgaWYgKFsnbGlzdCcsICd0cmVlJ10uaW5jbHVkZXModHlwZSkpIHtcclxuICAgICAgZm9yIChsZXQgc291cmNlIG9mIHNvdXJjZXMpIHtcclxuICAgICAgICBzb3VyY2UuY291bnQgPSBzb3VyY2UubGlzdD8uZmlsdGVyKCh4KSA9PiAheC5kaXNhYmxlZCkubGVuZ3RoO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICd0YWJsZScpIHtcclxuICAgICAgZm9yIChsZXQgc291cmNlIG9mIHNvdXJjZXMpIHtcclxuICAgICAgICBpZiAoc291cmNlLmRpcmVjdGlvbiA9PT0gJ2xlZnQnKSB7XHJcbiAgICAgICAgICBzb3VyY2UuY291bnQgPSB0aGlzLnRhYmxlVG90YWwgLSB0aGlzLnJpZ2h0Lmxpc3QhLmxlbmd0aCB8fCAwO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBzb3VyY2UuY291bnQgPSBzb3VyY2UubGlzdD8uZmlsdGVyKCh4KSA9PiAheC5kaXNhYmxlZCkubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25UcmVlTm9kZUNsaWNrKF9ub2RlOiBYVHJlZU5vZGUpIHtcclxuICAgIHRoaXMuc2V0Q2hlY2tlZENvdW50KCd0cmVlJywgdGhpcy5sZWZ0KTtcclxuICAgIHRoaXMuc2V0Q2hlY2tlZEFsbCh0aGlzLmxlZnQpO1xyXG4gICAgdGhpcy5zZXRCdXR0b25EaXNhYmxlZCh0aGlzLmxlZnQpO1xyXG4gIH1cclxuXHJcbiAgb25UYWJsZUNoZWNrZWRSb3cocm93OiBYVHJhbnNmZXJOb2RlLCBzb3VyY2U6IFhUcmFuc2ZlclNvdXJjZSkge1xyXG4gICAgaWYgKCF0aGlzLnRhYmxlQ2hlY2tib3hDb2x1bW4pIHJldHVybjtcclxuICAgIGxldCBjaGVja2VkID0gcm93W3RoaXMudGFibGVDaGVja2JveENvbHVtbi5pZF07XHJcbiAgICByb3cuY2hlY2tlZCA9IGNoZWNrZWQ7XHJcbiAgICB0aGlzLnNldENoZWNrZWRDb3VudCgndGFibGUnLCBzb3VyY2UpO1xyXG4gICAgdGhpcy5zZXRDaGVja2VkQWxsKHNvdXJjZSk7XHJcbiAgICB0aGlzLnNldEJ1dHRvbkRpc2FibGVkKHNvdXJjZSk7XHJcbiAgfVxyXG5cclxuICBvblRhYmxlQ2hlY2tlZEFsbChyb3c6IFhUYWJsZUhlYWRDaGVja2JveCwgc291cmNlOiBYVHJhbnNmZXJTb3VyY2UpIHtcclxuICAgIGlmICghdGhpcy50YWJsZUNoZWNrYm94Q29sdW1uKSByZXR1cm47XHJcbiAgICBsZXQgY2hlY2tlZCA9IHJvdy5jaGVja2JveFt0aGlzLnRhYmxlQ2hlY2tib3hDb2x1bW4uaWRdO1xyXG4gICAgZm9yIChsZXQgaXRlbSBvZiBzb3VyY2UubGlzdCEpIHtcclxuICAgICAgaWYgKCFpdGVtLmRpc2FibGVkKSB7XHJcbiAgICAgICAgaXRlbS5jaGVja2VkID0gY2hlY2tlZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5zZXRDaGVja2VkQ291bnQoJ3RhYmxlJywgc291cmNlKTtcclxuICAgIHRoaXMuc2V0QnV0dG9uRGlzYWJsZWQoc291cmNlKTtcclxuICB9XHJcblxyXG4gIG9uSW52ZXJzZShzb3VyY2U6IFhUcmFuc2ZlclNvdXJjZSkge1xyXG4gICAgZm9yIChsZXQgaXRlbSBvZiBzb3VyY2UubGlzdCEpIHtcclxuICAgICAgaWYgKCFpdGVtLmRpc2FibGVkKSB7XHJcbiAgICAgICAgaXRlbS5jaGVja2VkID0gIWl0ZW0uY2hlY2tlZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IHR5cGUgPSBgJHt0aGlzLnR5cGV9YCBhcyBYVHJhbnNmZXJUeXBlO1xyXG4gICAgaWYgKHR5cGUgPT09ICd0cmVlJyAmJiBzb3VyY2UuZGlyZWN0aW9uID09PSAncmlnaHQnKSB7XHJcbiAgICAgIHR5cGUgPSAnbGlzdCc7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldENoZWNrZWRDb3VudCh0eXBlLCBzb3VyY2UpO1xyXG4gICAgdGhpcy5zZXRDaGVja2VkQWxsKHNvdXJjZSk7XHJcbiAgICB0aGlzLnNldEJ1dHRvbkRpc2FibGVkKHNvdXJjZSk7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFRhYmxlQ2hlY2tDb2x1bW4oKSB7XHJcbiAgICBpZiAodGhpcy50eXBlICE9PSAndGFibGUnIHx8IFhJc0VtcHR5KHRoaXMudGFibGVDb2x1bW5zKSkgcmV0dXJuO1xyXG4gICAgdGhpcy50YWJsZUNoZWNrYm94Q29sdW1uID0gdGhpcy50YWJsZUNvbHVtbnM/LmZpbmQoKHgpID0+IHgucm93Q2hlY2tlZCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldENoZWNrZWRBbGwoLi4uc291cmNlczogWFRyYW5zZmVyU291cmNlW10pIHtcclxuICAgIGZvciAobGV0IHNvdXJjZSBvZiBzb3VyY2VzKSB7XHJcbiAgICAgIGlmICgoc291cmNlLmNoZWNrZWRDb3VudCBhcyBudW1iZXIpID4gMCkge1xyXG4gICAgICAgIGlmIChzb3VyY2UuY2hlY2tlZENvdW50ID09PSBzb3VyY2UubGlzdD8uZmlsdGVyKCh4KSA9PiAheC5kaXNhYmxlZCkubGVuZ3RoKSB7XHJcbiAgICAgICAgICBzb3VyY2UuY2hlY2tlZEFsbCA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHNvdXJjZS5jaGVja2VkQWxsID0gZmFsc2U7XHJcbiAgICAgICAgICBzb3VyY2UuaW5kZXRlcm1pbmF0ZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHNvdXJjZS5jaGVja2VkQWxsID0gZmFsc2U7XHJcbiAgICAgICAgc291cmNlLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRDaGVja2VkQ291bnQodHlwZTogWFRyYW5zZmVyVHlwZSA9ICdsaXN0JywgLi4uc291cmNlczogWFRyYW5zZmVyU291cmNlW10pIHtcclxuICAgIGZvciAobGV0IHNvdXJjZSBvZiBzb3VyY2VzKSB7XHJcbiAgICAgIGlmIChbJ3RhYmxlJywgJ2xpc3QnXS5pbmNsdWRlcyh0eXBlKSkge1xyXG4gICAgICAgIHNvdXJjZS5jaGVja2VkQ291bnQgPSBzb3VyY2UubGlzdD8uZmlsdGVyKCh4KSA9PiAheC5kaXNhYmxlZCAmJiB4LmNoZWNrZWQpLmxlbmd0aDtcclxuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAndHJlZScpIHtcclxuICAgICAgICBzb3VyY2UuY2hlY2tlZENvdW50ID0gc291cmNlLmxpc3Q/LmZpbHRlcihcclxuICAgICAgICAgICh4KSA9PiAheC5kaXNhYmxlZCAmJiAhWElzRW1wdHkodGhpcy50cmVlQWN0aXZhdGVkSWQpICYmIHRoaXMudHJlZUFjdGl2YXRlZElkLmluY2x1ZGVzKHguaWQpXHJcbiAgICAgICAgKS5sZW5ndGg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0QnV0dG9uRGlzYWJsZWQoLi4uc291cmNlczogWFRyYW5zZmVyU291cmNlW10pIHtcclxuICAgIGZvciAobGV0IHNvdXJjZSBvZiBzb3VyY2VzKSBzb3VyY2UuZGlzYWJsZWRCdXR0b24gPSBzb3VyY2UuY2hlY2tlZENvdW50ID09PSAwO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRWYWx1ZSgpIHtcclxuICAgIGlmICh0aGlzLmlzT2JqZWN0QXJyYXkpIHtcclxuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMucmlnaHQubGlzdCE7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5yaWdodC5saXN0Py5tYXAoKHgpID0+IHguaWQpITtcclxuICAgIH1cclxuICAgIHRoaXMub25DaGFuZ2UodGhpcy52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFNlYXJjaExpc3QoLi4uc291cmNlczogWFRyYW5zZmVyU291cmNlW10pIHtcclxuICAgIGlmICh0aGlzLnNlYXJjaCkge1xyXG4gICAgICBmb3IgKGxldCBzb3VyY2Ugb2Ygc291cmNlcykge1xyXG4gICAgICAgIGlmIChYSXNFbXB0eShzb3VyY2Uuc2VhcmNoSW5wdXQpKSB7XHJcbiAgICAgICAgICBzb3VyY2Uuc2VhcmNoTGlzdCA9IFsuLi4oc291cmNlLmxpc3QgYXMgWFRyYW5zZmVyTm9kZVtdKV07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldERhdGEoKSB7XHJcbiAgICBpZiAodGhpcy50eXBlID09PSAndGFibGUnKSB7XHJcbiAgICAgIHRoaXMuZ2V0VGFibGVEYXRhKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIFhTZXREYXRhPFhUcmFuc2Zlck5vZGU+KHRoaXMuZGF0YSwgdGhpcy5fdW5TdWJqZWN0KS5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgdGhpcy5zZXRMaXN0KHgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldExpc3QoZGF0YTogWFRyYW5zZmVyTm9kZVtdKSB7XHJcbiAgICBpZiAoWElzRW1wdHkoZGF0YSkpIHJldHVybjtcclxuICAgIHN3aXRjaCAodGhpcy50eXBlKSB7XHJcbiAgICAgIGNhc2UgJ2xpc3QnOlxyXG4gICAgICAgIHRoaXMubm9kZXMgPSBkYXRhO1xyXG4gICAgICAgIGlmICghWElzRW1wdHkodGhpcy52YWx1ZXMpKSB7XHJcbiAgICAgICAgICB0aGlzLmxlZnQubGlzdCA9IHRoaXMubm9kZXMuZmlsdGVyKCh4KSA9PiB0aGlzLnZhbHVlcy5pbmRleE9mKHguaWQpIDwgMCk7XHJcbiAgICAgICAgICB0aGlzLnJpZ2h0Lmxpc3QgPSB0aGlzLm5vZGVzLmZpbHRlcigoeCkgPT4gdGhpcy52YWx1ZXMuaW5kZXhPZih4LmlkKSA+PSAwKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5sZWZ0Lmxpc3QgPSBbLi4udGhpcy5ub2Rlc107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0U2VhcmNoTGlzdCh0aGlzLmxlZnQsIHRoaXMucmlnaHQpO1xyXG4gICAgICAgIHRoaXMuc2V0TGlzdENvdW50KHRoaXMudHlwZSwgdGhpcy5sZWZ0LCB0aGlzLnJpZ2h0KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAndHJlZSc6XHJcbiAgICAgICAgdGhpcy5ub2RlcyA9IGRhdGE7XHJcbiAgICAgICAgdGhpcy5zZXRUcmVlTm9kZURpc2FibGVkKCk7XHJcbiAgICAgICAgdGhpcy5sZWZ0Lmxpc3QgPSBbLi4udGhpcy5ub2Rlc107XHJcbiAgICAgICAgaWYgKCFYSXNFbXB0eSh0aGlzLnZhbHVlcykpIHtcclxuICAgICAgICAgIHRoaXMucmlnaHQubGlzdCA9IHRoaXMubm9kZXNcclxuICAgICAgICAgICAgLmZpbHRlcigoeCkgPT4gdGhpcy52YWx1ZXMuaW5kZXhPZih4LmlkKSA+PSAwKVxyXG4gICAgICAgICAgICAubWFwKCh4KSA9PiB7XHJcbiAgICAgICAgICAgICAgbGV0IHJlcyA9IHsgLi4ueCB9O1xyXG4gICAgICAgICAgICAgIHJlcy5jaGVja2VkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgcmVzLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0U2VhcmNoTGlzdCh0aGlzLmxlZnQsIHRoaXMucmlnaHQpO1xyXG4gICAgICAgIHRoaXMuc2V0TGlzdENvdW50KHRoaXMudHlwZSwgdGhpcy5sZWZ0LCB0aGlzLnJpZ2h0KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAndGFibGUnOlxyXG4gICAgICAgIHRoaXMubm9kZXMgPSBkYXRhO1xyXG4gICAgICAgIHRoaXMuc2V0VGFibGVEYXRhRGlzYWJsZWQoKTtcclxuICAgICAgICB0aGlzLmxlZnQubGlzdCA9IFsuLi50aGlzLm5vZGVzXTtcclxuICAgICAgICBpZiAoIVhJc0VtcHR5KHRoaXMudmFsdWVzKSkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuaXNPYmplY3RBcnJheSkge1xyXG4gICAgICAgICAgICB0aGlzLnJpZ2h0Lmxpc3QgPSBbXHJcbiAgICAgICAgICAgICAgLi4udGhpcy52YWx1ZS5tYXAoKHgpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCByZXMgPSB7IC4uLnggfTtcclxuICAgICAgICAgICAgICAgIHJlcy5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgcmVzLmNoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgXTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucmlnaHQubGlzdCA9IFsuLi50aGlzLnZhbHVlXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRTZWFyY2hMaXN0KHRoaXMubGVmdCwgdGhpcy5yaWdodCk7XHJcbiAgICAgICAgdGhpcy5zZXRMaXN0Q291bnQodGhpcy50eXBlLCB0aGlzLmxlZnQsIHRoaXMucmlnaHQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0VGFibGVEYXRhKCkge1xyXG4gICAgaWYgKFhJc0Z1bmN0aW9uKHRoaXMuZGF0YSkpIHtcclxuICAgICAgKHRoaXMuZGF0YSBhcyBGdW5jdGlvbikodGhpcy50YWJsZUluZGV4LCB0aGlzLnRhYmxlU2l6ZSwgdGhpcy50YWJsZVF1ZXJ5KS5zdWJzY3JpYmUoKHg6IFhSZXN1bHRMaXN0PFhUcmFuc2Zlck5vZGU+KSA9PiB7XHJcbiAgICAgICAgdGhpcy50YWJsZVRvdGFsID0geC50b3RhbCE7XHJcbiAgICAgICAgdGhpcy50YWJsZURhdGEgPSB4Lmxpc3QhO1xyXG4gICAgICAgIHRoaXMuc2V0TGlzdCh4Lmxpc3QhKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFRpdGxlcygpIHtcclxuICAgIGxldCB0aXRsZXM6IHN0cmluZ1tdID0gW107XHJcbiAgICBpZiAoWElzRW1wdHkodGhpcy50aXRsZXMpKSB7XHJcbiAgICAgIHRpdGxlcyA9IFt0aGlzLmxvY2FsVGl0bGUhLCB0aGlzLmxvY2FsZS5zZWxlY3RlZFRpdGxlIV07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aXRsZXMgPSB0aGlzLnRpdGxlcztcclxuICAgIH1cclxuICAgIGlmICh0aXRsZXMubGVuZ3RoID4gMCkgdGhpcy5sZWZ0LnRpdGxlID0gdGl0bGVzWzBdO1xyXG4gICAgaWYgKHRpdGxlcy5sZW5ndGggPiAxKSB0aGlzLnJpZ2h0LnRpdGxlID0gdGl0bGVzWzFdO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRMaXN0U3R5bGUoKSB7XHJcbiAgICBpZiAoWElzRW1wdHkodGhpcy5saXN0U3R5bGUpKSByZXR1cm47XHJcbiAgICBsZXQgc3R5bGVzOiBvYmplY3RbXSA9IFtdO1xyXG4gICAgaWYgKFhJc09iamVjdCh0aGlzLmxpc3RTdHlsZSkpIHtcclxuICAgICAgc3R5bGVzID0gW3RoaXMubGlzdFN0eWxlLCB0aGlzLmxpc3RTdHlsZV07XHJcbiAgICB9IGVsc2UgaWYgKFhJc09iamVjdEFycmF5KHRoaXMubGlzdFN0eWxlKSkge1xyXG4gICAgICBzdHlsZXMgPSB0aGlzLmxpc3RTdHlsZSBhcyBvYmplY3RbXTtcclxuICAgIH1cclxuICAgIGlmIChzdHlsZXMubGVuZ3RoID4gMCkgdGhpcy5sZWZ0Lmxpc3RTdHlsZSA9IHN0eWxlc1swXTtcclxuICAgIGlmIChzdHlsZXMubGVuZ3RoID4gMSkgdGhpcy5yaWdodC5saXN0U3R5bGUgPSBzdHlsZXNbMV07XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFRyZWVOb2RlRGlzYWJsZWQoKSB7XHJcbiAgICBpZiAoIVhJc0VtcHR5KHRoaXMudmFsdWVzKSAmJiB0aGlzLm5vZGVzKSB7XHJcbiAgICAgIGZvciAobGV0IGl0ZW0gb2YgdGhpcy5ub2Rlcykge1xyXG4gICAgICAgIGxldCBoYXNJbiA9IHRoaXMudmFsdWVzLmluZGV4T2YoaXRlbS5pZCkgPj0gMDtcclxuICAgICAgICBpdGVtLmRpc2FibGVkID0gaGFzSW47XHJcbiAgICAgICAgaXRlbS5jaGVja2VkID0gaGFzSW47XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0VGFibGVEYXRhRGlzYWJsZWQoKSB7XHJcbiAgICBpZiAoIVhJc0VtcHR5KHRoaXMudmFsdWVzKSAmJiB0aGlzLm5vZGVzKSB7XHJcbiAgICAgIGZvciAobGV0IGl0ZW0gb2YgdGhpcy5ub2Rlcykge1xyXG4gICAgICAgIGxldCBoYXNJbiA9IHRoaXMudmFsdWVzLmluZGV4T2YoaXRlbS5pZCkgPj0gMDtcclxuICAgICAgICBpdGVtLmRpc2FibGVkID0gaGFzSW47XHJcbiAgICAgICAgaXRlbS5jaGVja2VkID0gaGFzSW47XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0SGlkZGVuQ2hlY2tBbGwoKSB7XHJcbiAgICBpZiAoWElzRW1wdHkodGhpcy5oaWRkZW5DaGVja0FsbCkpIHJldHVybjtcclxuICAgIGlmICh0aGlzLmhpZGRlbkNoZWNrQWxsIS5sZW5ndGggPiAwICYmIFhJc0Jvb2xlYW4odGhpcy5oaWRkZW5DaGVja0FsbCFbMF0pKSB0aGlzLmxlZnQuaGlkZGVuQ2hlY2tBbGwgPSB0aGlzLmhpZGRlbkNoZWNrQWxsIVswXTtcclxuICAgIGlmICh0aGlzLmhpZGRlbkNoZWNrQWxsIS5sZW5ndGggPiAxICYmIFhJc0Jvb2xlYW4odGhpcy5oaWRkZW5DaGVja0FsbCFbMV0pKSB0aGlzLnJpZ2h0LmhpZGRlbkNoZWNrQWxsID0gdGhpcy5oaWRkZW5DaGVja0FsbCFbMV07XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEZvb3RlclRwbCgpIHtcclxuICAgIGlmIChYSXNVbmRlZmluZWQodGhpcy5mb290ZXJUcGwpKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5mb290ZXJUcGwhLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5sZWZ0LmZvb3RlclRwbCA9IHRoaXMuZm9vdGVyVHBsIVswXTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmZvb3RlclRwbCEubGVuZ3RoID4gMSkge1xyXG4gICAgICB0aGlzLnJpZ2h0LmZvb3RlclRwbCA9IHRoaXMuZm9vdGVyVHBsIVsxXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0VGFibGVIZWFkU2VhcmNoVHBsKCkge1xyXG4gICAgaWYgKFhJc1VuZGVmaW5lZCh0aGlzLnRhYmxlSGVhZFNlYXJjaFRwbCkpIHJldHVybjtcclxuICAgIGlmICh0aGlzLnRhYmxlSGVhZFNlYXJjaFRwbCEubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmxlZnQudGFibGVIZWFkU2VhcmNoVHBsID0gdGhpcy50YWJsZUhlYWRTZWFyY2hUcGwhWzBdO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMudGFibGVIZWFkU2VhcmNoVHBsIS5sZW5ndGggPiAxKSB7XHJcbiAgICAgIHRoaXMucmlnaHQudGFibGVIZWFkU2VhcmNoVHBsID0gdGhpcy50YWJsZUhlYWRTZWFyY2hUcGwhWzFdO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2ICN0cmFuc2ZlciBjbGFzcz1cIngtdHJhbnNmZXJcIiBjZGtEcm9wTGlzdEdyb3VwIFtuZ0NsYXNzXT1cImNsYXNzTWFwXCI+XHJcbiAgPGRpdiBjbGFzcz1cIngtdHJhbnNmZXItYm94XCIgW2NsYXNzLngtdHJhbnNmZXItaGFzLWZvb3Rlcl09XCJsZWZ0LmZvb3RlclRwbFwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNvdXJjZVRpdGxlVHBsOyBjb250ZXh0OiB7IHNvdXJjZTogbGVmdCB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8ZGl2IFtuZ1N0eWxlXT1cImxlZnQubGlzdFN0eWxlIVwiIGNsYXNzPVwieC10cmFuc2Zlci1saXN0XCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cInR5cGVcIj5cclxuICAgICAgICA8dWxcclxuICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInbGlzdCdcIlxyXG4gICAgICAgICAgY2RrRHJvcExpc3RcclxuICAgICAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcENkaygkZXZlbnQpXCJcclxuICAgICAgICAgIFtjZGtEcm9wTGlzdERhdGFdPVwibGVmdC5saXN0XCJcclxuICAgICAgICAgIFtjZGtEcm9wTGlzdERpc2FibGVkXT1cIiFkcmFnICYmIHR5cGUgPT09ICdsaXN0J1wiXHJcbiAgICAgICAgICBbY2RrRHJvcExpc3RFbnRlclByZWRpY2F0ZV09XCJwcmVkaWNhdGVcIlxyXG4gICAgICAgICAgY2xhc3M9XCJ4LXRyYW5zZmVyLWRyb3BsaXN0XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bGkgY2xhc3M9XCJ4LXRyYW5zZmVyLWl0ZW1cIiAqbmdGb3I9XCJsZXQgbm9kZSBvZiBsZWZ0Lmxpc3Q7IHRyYWNrQnk6IHRyYWNrQnlOb2RlXCIgY2RrRHJhZyBbY2RrRHJhZ0RhdGFdPVwibm9kZVwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic291cmNlTm9kZVRwbDsgY29udGV4dDogeyBub2RlOiBub2RlLCBzb3VyY2U6IGxlZnQgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgICAgIDx4LXRyZWVcclxuICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCIndHJlZSdcIlxyXG4gICAgICAgICAgW2RhdGFdPVwibGVmdC5saXN0IVwiXHJcbiAgICAgICAgICBtdWx0aXBsZVxyXG4gICAgICAgICAgYWxsb3dNYW55QWN0aXZhdGVkXHJcbiAgICAgICAgICBbKGFjdGl2YXRlZElkKV09XCJ0cmVlQWN0aXZhdGVkSWRcIlxyXG4gICAgICAgICAgKG5vZGVDbGljayk9XCJvblRyZWVOb2RlQ2xpY2soJGV2ZW50KVwiXHJcbiAgICAgICAgICBbbGFiZWxUcGxdPVwidHJlZUxhYmVsVHBsXCJcclxuICAgICAgICA+PC94LXRyZWU+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICN0cmVlTGFiZWxUcGwgbGV0LW5vZGU9XCIkbm9kZVwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ4LXRyYW5zZmVyLXRyZWUtbGFiZWxcIiB4LWtleXdvcmQgW3RleHRdPVwibGVmdC5zZWFyY2hJbnB1dCFcIj57eyBub2RlLmxhYmVsIH19PC9zcGFuPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPHgtdGFibGVcclxuICAgICAgICAgICNsZWZ0VGFibGVDb21cclxuICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCIndGFibGUnXCJcclxuICAgICAgICAgIFtkYXRhXT1cInRhYmxlRGF0YVwiXHJcbiAgICAgICAgICBbY29sdW1uc109XCJ0YWJsZUNvbHVtbnMhXCJcclxuICAgICAgICAgIFsoc2l6ZSldPVwidGFibGVTaXplXCJcclxuICAgICAgICAgIFsoaW5kZXgpXT1cInRhYmxlSW5kZXhcIlxyXG4gICAgICAgICAgKGluZGV4Q2hhbmdlKT1cImdldFRhYmxlRGF0YSgpXCJcclxuICAgICAgICAgIFtxdWVyeV09XCJ0YWJsZVF1ZXJ5XCJcclxuICAgICAgICAgIFt0b3RhbF09XCJ0YWJsZVRvdGFsXCJcclxuICAgICAgICAgIChhY3RpdmF0ZWRSb3dDaGFuZ2UpPVwib25UYWJsZUNoZWNrZWRSb3coJGV2ZW50LCBsZWZ0KVwiXHJcbiAgICAgICAgICAoaGVhZENoZWNrYm94Q2hhbmdlKT1cIm9uVGFibGVDaGVja2VkQWxsKCRldmVudCwgbGVmdClcIlxyXG4gICAgICAgICAgaGlkZGVuV3JhcEJvcmRlclxyXG4gICAgICAgICAgaGlkZGVuUGFnaW5hdGlvbkJvcmRlclxyXG4gICAgICAgICAgc2hvd0VsbGlwc2lzPVwiZmFsc2VcIlxyXG4gICAgICAgICAgc2hvd1RvdGFsPVwiZmFsc2VcIlxyXG4gICAgICAgICAgcGFnaW5hdGlvblBvc2l0aW9uPVwiYm90dG9tLWNlbnRlclwiXHJcbiAgICAgICAgICBhbGxvd1NlbGVjdFJvdz1cImZhbHNlXCJcclxuICAgICAgICAgIFtoZWFkU2VhcmNoVHBsXT1cImxlZnQudGFibGVIZWFkU2VhcmNoVHBsXCJcclxuICAgICAgICA+PC94LXRhYmxlPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIngtdHJhbnNmZXItZm9vdGVyXCIgKm5nSWY9XCJsZWZ0LmZvb3RlclRwbFwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibGVmdC5mb290ZXJUcGw7IGNvbnRleHQ6IHsgJHNvdXJjZTogbGVmdCB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwieC10cmFuc2Zlci1idXR0b25zXCI+XHJcbiAgICA8eC1idXR0b24gdHlwZT1cInByaW1hcnlcIiBpY29uPVwiZnRvLWNoZXZyb24tcmlnaHRcIiBbZGlzYWJsZWRdPVwibGVmdC5kaXNhYmxlZEJ1dHRvblwiIChjbGljayk9XCJtb3ZlKGxlZnQsIHJpZ2h0KVwiPjwveC1idXR0b24+XHJcbiAgICA8eC1idXR0b24gdHlwZT1cInByaW1hcnlcIiBpY29uPVwiZnRvLWNoZXZyb24tbGVmdFwiIFtkaXNhYmxlZF09XCJyaWdodC5kaXNhYmxlZEJ1dHRvblwiIChjbGljayk9XCJtb3ZlKHJpZ2h0LCBsZWZ0KVwiPjwveC1idXR0b24+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cIngtdHJhbnNmZXItYm94XCIgW2NsYXNzLngtdHJhbnNmZXItaGFzLWZvb3Rlcl09XCJyaWdodC5mb290ZXJUcGxcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzb3VyY2VUaXRsZVRwbDsgY29udGV4dDogeyBzb3VyY2U6IHJpZ2h0IH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDxkaXYgW25nU3dpdGNoXT1cInR5cGVcIiBbbmdTdHlsZV09XCJyaWdodC5saXN0U3R5bGUhXCIgY2xhc3M9XCJ4LXRyYW5zZmVyLWxpc3RcIj5cclxuICAgICAgPHgtdGFibGVcclxuICAgICAgICAjcmlnaHRUYWJsZUNvbVxyXG4gICAgICAgICpuZ1N3aXRjaENhc2U9XCIndGFibGUnXCJcclxuICAgICAgICBbZGF0YV09XCJyaWdodC5saXN0IVwiXHJcbiAgICAgICAgW2NvbHVtbnNdPVwidGFibGVDb2x1bW5zIVwiXHJcbiAgICAgICAgKGFjdGl2YXRlZFJvd0NoYW5nZSk9XCJvblRhYmxlQ2hlY2tlZFJvdygkZXZlbnQsIHJpZ2h0KVwiXHJcbiAgICAgICAgKGhlYWRDaGVja2JveENoYW5nZSk9XCJvblRhYmxlQ2hlY2tlZEFsbCgkZXZlbnQsIHJpZ2h0KVwiXHJcbiAgICAgICAgaGlkZGVuV3JhcEJvcmRlclxyXG4gICAgICAgIGhpZGRlblBhZ2luYXRpb25Cb3JkZXJcclxuICAgICAgICBzaG93UGFnaW5hdGlvbj1cImZhbHNlXCJcclxuICAgICAgICBzaG93RWxsaXBzaXM9XCJmYWxzZVwiXHJcbiAgICAgICAgc2hvd1RvdGFsPVwiZmFsc2VcIlxyXG4gICAgICAgIHBhZ2luYXRpb25Qb3NpdGlvbj1cImJvdHRvbS1jZW50ZXJcIlxyXG4gICAgICAgIGFsbG93U2VsZWN0Um93PVwiZmFsc2VcIlxyXG4gICAgICAgIFtoZWFkU2VhcmNoVHBsXT1cInJpZ2h0LnRhYmxlSGVhZFNlYXJjaFRwbFwiXHJcbiAgICAgID48L3gtdGFibGU+XHJcbiAgICAgIDx1bFxyXG4gICAgICAgICpuZ1N3aXRjaERlZmF1bHRcclxuICAgICAgICBjZGtEcm9wTGlzdFxyXG4gICAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcENkaygkZXZlbnQpXCJcclxuICAgICAgICBbY2RrRHJvcExpc3REYXRhXT1cInJpZ2h0Lmxpc3RcIlxyXG4gICAgICAgIFtjZGtEcm9wTGlzdERpc2FibGVkXT1cIiFkcmFnIHx8IChkcmFnICYmIHR5cGUgIT09ICdsaXN0JylcIlxyXG4gICAgICAgIFtjZGtEcm9wTGlzdEVudGVyUHJlZGljYXRlXT1cInByZWRpY2F0ZVwiXHJcbiAgICAgICAgY2xhc3M9XCJ4LXRyYW5zZmVyLWRyb3BsaXN0XCJcclxuICAgICAgPlxyXG4gICAgICAgIDxsaSBjbGFzcz1cIngtdHJhbnNmZXItaXRlbVwiICpuZ0Zvcj1cImxldCBub2RlIG9mIHJpZ2h0Lmxpc3Q7IHRyYWNrQnk6IHRyYWNrQnlOb2RlXCIgY2RrRHJhZyBbY2RrRHJhZ0RhdGFdPVwibm9kZVwiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNvdXJjZU5vZGVUcGw7IGNvbnRleHQ6IHsgbm9kZTogbm9kZSwgc291cmNlOiByaWdodCB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgPC91bD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIngtdHJhbnNmZXItZm9vdGVyXCIgKm5nSWY9XCJyaWdodC5mb290ZXJUcGxcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInJpZ2h0LmZvb3RlclRwbDsgY29udGV4dDogeyAkc291cmNlOiByaWdodCB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48bmctdGVtcGxhdGUgI3NvdXJjZVRpdGxlVHBsIGxldC1zb3VyY2U9XCJzb3VyY2VcIj5cclxuICA8ZGl2IGNsYXNzPVwieC10cmFuc2Zlci10aXRsZVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIngtdHJhbnNmZXItdGl0bGUtbGVmdFwiPlxyXG4gICAgICA8eC1jaGVja2JveFxyXG4gICAgICAgICpuZ0lmPVwic291cmNlLnRpdGxlICYmICFzb3VyY2UuaGlkZGVuQ2hlY2tBbGxcIlxyXG4gICAgICAgIFtkYXRhXT1cIlt0aXRsZVRwbCA/ICcnIDogc291cmNlLnRpdGxlXVwiXHJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJzb3VyY2UuY2hlY2tlZEFsbFwiXHJcbiAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hlY2tlZEFsbENoYW5nZSgkZXZlbnQsIHNvdXJjZSlcIlxyXG4gICAgICAgIFtpbmRldGVybWluYXRlXT1cInNvdXJjZS5pbmRldGVybWluYXRlXCJcclxuICAgICAgPjwveC1jaGVja2JveD5cclxuICAgICAgPHNwYW4gKm5nSWY9XCJzb3VyY2UudGl0bGUgJiYgc291cmNlLmhpZGRlbkNoZWNrQWxsXCI+e3sgc291cmNlLnRpdGxlIH19PC9zcGFuPlxyXG4gICAgICA8eC1saW5rICpuZ0lmPVwiaW52ZXJzZSAmJiB0eXBlID09PSAnbGlzdCdcIiBjbGFzcz1cIngtdHJhbnNmZXItaW52ZXJzZVwiIHR5cGU9XCJwcmltYXJ5XCIgKGNsaWNrKT1cIm9uSW52ZXJzZShzb3VyY2UpXCI+e3tcclxuICAgICAgICAndHJhbnNmZXIuaW52ZXJzZScgfCB4STE4blxyXG4gICAgICB9fTwveC1saW5rPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8bmctY29udGFpbmVyICp4T3V0bGV0PVwidGl0bGVUcGw7IGNvbnRleHQ6IHsgJHRpdGxlOiBzb3VyY2UudGl0bGUsICRjaGVja2VkQ291bnQ6IHNvdXJjZS5jaGVja2VkQ291bnQsICRjb3VudDogc291cmNlLmNvdW50IH1cIlxyXG4gICAgICA+PHNwYW4gY2xhc3M9XCJ4LXRyYW5zZmVyLXRvdGFsXCI+e3sgc291cmNlLmNoZWNrZWRDb3VudCB9fSAvIHt7IHNvdXJjZS5jb3VudCB9fTwvc3Bhbj48L25nLWNvbnRhaW5lclxyXG4gICAgPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJ4LXRyYW5zZmVyLXNlYXJjaFwiICpuZ0lmPVwic2VhcmNoICYmIHR5cGUgIT09ICd0YWJsZSdcIj5cclxuICAgIDx4LWlucHV0IGljb249XCJmdG8tc2VhcmNoXCIgWyhuZ01vZGVsKV09XCJzb3VyY2Uuc2VhcmNoSW5wdXRcIiAobmdNb2RlbENoYW5nZSk9XCJvblNlYXJjaElucHV0Q2hhbmdlKHNvdXJjZSlcIiBjbGVhcmFibGU+PC94LWlucHV0PlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNzb3VyY2VOb2RlVHBsIGxldC1ub2RlPVwibm9kZVwiIGxldC1zb3VyY2U9XCJzb3VyY2VcIj5cclxuICA8eC1jaGVja2JveFxyXG4gICAgW2RhdGFdPVwiW3sgaWQ6IG5vZGUuaWQsIGxhYmVsOiBub2RlVHBsID8gbm9kZVRwbCA6IGxhYmVsVHBsLCBub2RlOiBub2RlIH1dXCJcclxuICAgIFtkaXNhYmxlZF09XCJub2RlLmRpc2FibGVkXCJcclxuICAgIFsobmdNb2RlbCldPVwibm9kZS5jaGVja2VkXCJcclxuICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoZWNrZWRDaGFuZ2UoJGV2ZW50LCBzb3VyY2UpXCJcclxuICA+PC94LWNoZWNrYm94PlxyXG4gIDxuZy10ZW1wbGF0ZSAjbGFiZWxUcGw+XHJcbiAgICA8c3BhbiB4LWtleXdvcmQgW3RleHRdPVwic291cmNlLnNlYXJjaElucHV0IVwiPnt7IG5vZGUubGFiZWwgfX08L3NwYW4+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19
617
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL25nLW5lc3QvdWkvdHJhbnNmZXIvdHJhbnNmZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGliL25nLW5lc3QvdWkvdHJhbnNmZXIvdHJhbnNmZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxpQkFBaUIsRUFDakIsaUJBQWlCLEVBQ2pCLHVCQUF1QixFQUl2QixTQUFTLEVBQ1QsTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQWtDLGlCQUFpQixFQUFpQixNQUFNLHFCQUFxQixDQUFDO0FBQ3hILE9BQU8sRUFDTCxTQUFTLEVBQ1QsUUFBUSxFQUNSLFFBQVEsRUFDUixjQUFjLEVBQ2QsT0FBTyxFQUNQLFFBQVEsRUFDUixTQUFTLEVBQ1QsY0FBYyxFQUNkLFVBQVUsRUFDVixXQUFXLEVBRVgsWUFBWSxFQUNiLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUF3QixjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNsSCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQWlCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUUsT0FBTyxFQUFFLGNBQWMsRUFBYSxNQUFNLGtCQUFrQixDQUFDO0FBQzdELE9BQU8sRUFBZ0IsZUFBZSxFQUFzQixNQUFNLG1CQUFtQixDQUFDO0FBQ3RGLE9BQU8s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QyxrQkFBa0IsQ0FBQyxDQUFDLHFSQ2hFakQsMnRNQXNJQSxnd0ZEdkZJLFlBQVkscTJCQUNaLFdBQVcsOFZBQ1gsY0FBYyxzbUNBQ2QsZ0JBQWdCLDZGQUNoQixrQkFBa0IsdURBQ2xCLGdCQUFnQixxREFDaEIsZUFBZSxvREFDZixjQUFjLG1EQUNkLGVBQWUsb0RBQ2YsaUJBQWlCLHdEQUNqQixjQUFjLDhDQUNkLFNBQVM7OzJGQVFBLGtCQUFrQjtrQkF2QjlCLFNBQVM7K0JBQ0UsR0FBRyxlQUFlLEVBQUUsY0FDbEIsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxjQUFjO3dCQUNkLGdCQUFnQjt3QkFDaEIsa0JBQWtCO3dCQUNsQixnQkFBZ0I7d0JBQ2hCLGVBQWU7d0JBQ2YsY0FBYzt3QkFDZCxlQUFlO3dCQUNmLGlCQUFpQjt3QkFDakIsY0FBYzt3QkFDZCxTQUFTO3FCQUNWLGlCQUdjLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0sYUFDcEMsQ0FBQyxjQUFjLG9CQUFvQixDQUFDOzhCQUdwQixZQUFZO3NCQUF0QyxTQUFTO3VCQUFDLGNBQWM7Z0JBQ0csYUFBYTtzQkFBeEMsU0FBUzt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgT25Jbml0LFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uRGVzdHJveSxcclxuICBWaWV3Q2hpbGQsXHJcbiAgaW5qZWN0XHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFhUcmFuc2ZlclByZWZpeCwgWFRyYW5zZmVyTm9kZSwgWFRyYW5zZmVyU291cmNlLCBYVHJhbnNmZXJQcm9wZXJ0eSwgWFRyYW5zZmVyVHlwZSB9IGZyb20gJy4vdHJhbnNmZXIucHJvcGVydHknO1xyXG5pbXBvcnQge1xyXG4gIFhJc0NoYW5nZSxcclxuICBYSXNFbXB0eSxcclxuICBYU2V0RGF0YSxcclxuICBYQ29uZmlnU2VydmljZSxcclxuICBYUmVtb3ZlLFxyXG4gIFhJc0FycmF5LFxyXG4gIFhJc09iamVjdCxcclxuICBYSXNPYmplY3RBcnJheSxcclxuICBYSXNCb29sZWFuLFxyXG4gIFhJc0Z1bmN0aW9uLFxyXG4gIFhSZXN1bHRMaXN0LFxyXG4gIFhJc1VuZGVmaW5lZFxyXG59IGZyb20gJ0BuZy1uZXN0L3VpL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyB0cmFuc2ZlckFycmF5SXRlbSwgbW92ZUl0ZW1JbkFycmF5LCBDZGtEcmFnRHJvcCwgQ2RrRHJhZywgRHJhZ0Ryb3BNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcclxuaW1wb3J0IHsgWFZhbHVlQWNjZXNzb3IgfSBmcm9tICdAbmctbmVzdC91aS9iYXNlLWZvcm0nO1xyXG5pbXBvcnQgeyBYSTE4blBpcGUsIFhJMThuU2VydmljZSwgWEkxOG5UcmFuc2ZlciB9IGZyb20gJ0BuZy1uZXN0L3VpL2kxOG4nO1xyXG5pbXBvcnQgeyBYVHJlZUNvbXBvbmVudCwgWFRyZWVOb2RlIH0gZnJvbSAnQG5nLW5lc3QvdWkvdHJlZSc7XHJcbmltcG9ydCB7IFhUYWJsZUNvbHVtbiwgWFRhYmxlQ29tcG9uZW50LCBYVGFibGVIZWFkQ2hlY2tib3ggfSBmcm9tICdAbmctbmVzdC91aS90YWJsZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBYT3V0bGV0RGlyZWN0aXZlIH0gZnJvbSAnQG5nLW5lc3QvdWkvb3V0bGV0JztcclxuaW1wb3J0IHsgWENoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnQG5nLW5lc3QvdWkvY2hlY2tib3gnO1xyXG5pbXBvcnQgeyBYQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQG5nLW5lc3QvdWkvYnV0dG9uJztcclxuaW1wb3J0IHsgWElucHV0Q29tcG9uZW50IH0gZnJvbSAnQG5nLW5lc3QvdWkvaW5wdXQnO1xyXG5pbXBvcnQgeyBYS2V5d29yZERpcmVjdGl2ZSB9IGZyb20gJ0BuZy1uZXN0L3VpL2tleXdvcmQnO1xyXG5pbXBvcnQgeyBYTGlua0NvbXBvbmVudCB9IGZyb20gJ0BuZy1uZXN0L3VpL2xpbmsnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IGAke1hUcmFuc2ZlclByZWZpeH1gLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBEcmFnRHJvcE1vZHVsZSxcclxuICAgIFhPdXRsZXREaXJlY3RpdmUsXHJcbiAgICBYQ2hlY2tib3hDb21wb25lbnQsXHJcbiAgICBYQnV0dG9uQ29tcG9uZW50LFxyXG4gICAgWElucHV0Q29tcG9uZW50LFxyXG4gICAgWFRyZWVDb21wb25lbnQsXHJcbiAgICBYVGFibGVDb21wb25lbnQsXHJcbiAgICBYS2V5d29yZERpcmVjdGl2ZSxcclxuICAgIFhMaW5rQ29tcG9uZW50LFxyXG4gICAgWEkxOG5QaXBlXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vdHJhbnNmZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RyYW5zZmVyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBwcm92aWRlcnM6IFtYVmFsdWVBY2Nlc3NvcihYVHJhbnNmZXJDb21wb25lbnQpXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgWFRyYW5zZmVyQ29tcG9uZW50IGV4dGVuZHMgWFRyYW5zZmVyUHJvcGVydHkgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuICBAVmlld0NoaWxkKCdsZWZ0VGFibGVDb20nKSBsZWZ0VGFibGVDb20/OiBYVGFibGVDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZCgncmlnaHRUYWJsZUNvbScpIHJpZ2h0VGFibGVDb20/OiBYVGFibGVDb21wb25lbnQ7XHJcbiAgbm9kZXM6IFhUcmFuc2Zlck5vZGVbXSA9IFtdO1xyXG4gIGxlZnQ6IFhUcmFuc2ZlclNvdXJjZSA9IHtcclxuICAgIGxpc3Q6IFtdLFxyXG4gICAgc2VhcmNoTGlzdDogW10sXHJcbiAgICBjaGVja2VkQ291bnQ6IDAsXHJcbiAgICBkaXJlY3Rpb246ICdsZWZ0JyxcclxuICAgIGRpc2FibGVkQnV0dG9uOiB0cnVlXHJcbiAgfTtcclxuICByaWdodDogWFRyYW5zZmVyU291cmNlID0ge1xyXG4gICAgbGlzdDogW10sXHJcbiAgICBzZWFyY2hMaXN0OiBbXSxcclxuICAgIGNoZWNrZWRDb3VudDogMCxcclxuICAgIGRpcmVjdGlvbjogJ3JpZ2h0JyxcclxuICAgIGRpc2FibGVkQnV0dG9uOiB0cnVlXHJcbiAgfTtcclxuICBzZWFyY2hJbnB1dDogc3RyaW5nID0gJyc7XHJcbiAgc2VhcmNoSW5wdXRMZWZ0Q2hhbmdlID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xyXG4gIHNlYXJjaElucHV0UmlnaHRDaGFuZ2UgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XHJcbiAgc2VhcmNoRGVib3VuY2VUaW1lID0gMjAwO1xyXG4gIGxvY2FsZTogWEkxOG5UcmFuc2ZlciA9IHt9O1xyXG4gIHByaXZhdGUgZ2V0IGxvY2FsVGl0bGUoKSB7XHJcbiAgICBpZiAodGhpcy50eXBlID09PSAndHJlZScpIHtcclxuICAgICAgcmV0dXJuIHRoaXMubG9jYWxlLnRyZWVUaXRsZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmxvY2FsZS5saXN0VGl0bGU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgX3VuU3ViamVjdCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgdHJlZUFjdGl2YXRlZElkOiBhbnlbXSA9IFtdO1xyXG4gIHRhYmxlRGF0YTogWFRyYW5zZmVyTm9kZVtdID0gW107XHJcbiAgdGFibGVDaGVja2JveENvbHVtbj86IFhUYWJsZUNvbHVtbjtcclxuICBpc09iamVjdEFycmF5ID0gZmFsc2U7XHJcbiAgb3ZlcnJpZGUgd3JpdGVWYWx1ZSh2YWx1ZTogYW55W10pOiB2b2lkIHtcclxuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICAgIGlmIChYSXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgdGhpcy50cmVlQWN0aXZhdGVkSWQgPSBbLi4udmFsdWVdO1xyXG4gICAgICBpZiAoWElzT2JqZWN0QXJyYXkodmFsdWUpKSB7XHJcbiAgICAgICAgdGhpcy5pc09iamVjdEFycmF5ID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5zZXRMaXN0KHRoaXMubm9kZXMpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHZhbHVlcygpIHtcclxuICAgIGlmICh0aGlzLmlzT2JqZWN0QXJyYXkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMudmFsdWUubWFwKCh4KSA9PiB4LmlkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxuICBcclxuICBvdmVycmlkZSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpXHJcbiAgcHJpdmF0ZSBpMThuID0gaW5qZWN0KFhJMThuU2VydmljZSlcclxuICBjb25maWdTZXJ2aWNlID0gaW5qZWN0KFhDb25maWdTZXJ2aWNlKVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuc2V0VGl0bGVzKCk7XHJcbiAgICB0aGlzLnNldExpc3RTdHlsZSgpO1xyXG4gICAgdGhpcy5zZXRIaWRkZW5DaGVja0FsbCgpO1xyXG4gICAgdGhpcy5nZXRUYWJsZUNoZWNrQ29sdW1uKCk7XHJcbiAgICB0aGlzLnNldEZvb3RlclRwbCgpO1xyXG4gICAgdGhpcy5zZXRUYWJsZUhlYWRTZWFyY2hUcGwoKTtcclxuICAgIHRoaXMuaTE4bi5sb2NhbGVDaGFuZ2VcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKCh4KSA9PiB4LnRyYW5zZmVyIGFzIFhJMThuVHJhbnNmZXIpLFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl91blN1YmplY3QpXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgIHRoaXMubG9jYWxlID0geDtcclxuICAgICAgICBYSXNFbXB0eSh0aGlzLnRpdGxlcykgJiYgdGhpcy5zZXRUaXRsZXMoKTtcclxuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgfSk7XHJcbiAgICB0aGlzLnNlYXJjaElucHV0TGVmdENoYW5nZVxyXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUodGhpcy5zZWFyY2hEZWJvdW5jZVRpbWUpLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCB0YWtlVW50aWwodGhpcy5fdW5TdWJqZWN0KSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXRTZWFyY2hJbnB1dENoYW5nZSh0aGlzLmxlZnQpO1xyXG4gICAgICB9KTtcclxuICAgIHRoaXMuc2VhcmNoSW5wdXRSaWdodENoYW5nZVxyXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUodGhpcy5zZWFyY2hEZWJvdW5jZVRpbWUpLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCB0YWtlVW50aWwodGhpcy5fdW5TdWJqZWN0KSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXRTZWFyY2hJbnB1dENoYW5nZSh0aGlzLnJpZ2h0KTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBjb25zdCB7IGRhdGEgfSA9IGNoYW5nZXM7XHJcbiAgICBYSXNDaGFuZ2UoZGF0YSkgJiYgdGhpcy5zZXREYXRhKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuX3VuU3ViamVjdC5uZXh0KCk7XHJcbiAgICB0aGlzLl91blN1YmplY3QudW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIG9uU2VhcmNoSW5wdXRDaGFuZ2Uoc291cmNlOiBYVHJhbnNmZXJTb3VyY2UpIHtcclxuICAgIGlmIChzb3VyY2UuZGlyZWN0aW9uID09PSAnbGVmdCcpIHtcclxuICAgICAgdGhpcy5zZWFyY2hJbnB1dExlZnRDaGFuZ2UubmV4dChzb3VyY2Uuc2VhcmNoSW5wdXQhKTtcclxuICAgIH0gZWxzZSBpZiAoc291cmNlLmRpcmVjdGlvbiA9PT0gJ3JpZ2h0Jykge1xyXG4gICAgICB0aGlzLnNlYXJjaElucHV0UmlnaHRDaGFuZ2UubmV4dChzb3VyY2Uuc2VhcmNoSW5wdXQhKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFNlYXJjaElucHV0Q2hhbmdlKHNvdXJjZTogWFRyYW5zZmVyU291cmNlKSB7XHJcbiAgICBpZiAoWElzVW5kZWZpbmVkKHNvdXJjZS5zZWFyY2hJbnB1dCkpIHJldHVybjtcclxuICAgIGlmIChYSXNFbXB0eShzb3VyY2Uuc2VhcmNoSW5wdXQpKSB7XHJcbiAgICAgIHNvdXJjZS5saXN0ID0gWy4uLnNvdXJjZS5zZWFyY2hMaXN0IV07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xyXG4gICAgICAgIGNhc2UgJ2xpc3QnOlxyXG4gICAgICAgICAgc291cmNlLmxpc3QgPSBzb3VyY2Uuc2VhcmNoTGlzdD8uZmlsdGVyKCh4KSA9PiB4LmxhYmVsLmluZGV4T2Yoc291cmNlLnNlYXJjaElucHV0KSA+PSAwKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ3RyZWUnOlxyXG4gICAgICAgICAgaWYgKHNvdXJjZS5kaXJlY3Rpb24gPT09ICdyaWdodCcpIHtcclxuICAgICAgICAgICAgc291cmNlLmxpc3QgPSBzb3VyY2Uuc2VhcmNoTGlzdD8uZmlsdGVyKCh4KSA9PiB4LmxhYmVsLmluZGV4T2Yoc291cmNlLnNlYXJjaElucHV0KSA+PSAwKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoc291cmNlLmRpcmVjdGlvbiA9PT0gJ2xlZnQnKSB7XHJcbiAgICAgICAgICAgIGxldCBzZWFyY2hMaXN0ID0gc291cmNlLnNlYXJjaExpc3Q/LmZpbHRlcigoeCkgPT4geC5sYWJlbC5pbmRleE9mKHNvdXJjZS5zZWFyY2hJbnB1dCkgPj0gMCkhO1xyXG4gICAgICAgICAgICBsZXQgcGFyZW50czogWFRyYW5zZmVyTm9kZVtdID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbmRQYXJlbnQgPSAoaXRlbTogWFRyYW5zZmVyTm9kZSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmICghaXRlbS5waWQpIHJldHVybjtcclxuICAgICAgICAgICAgICBsZXQgcGFyZW50ID0gc291cmNlLnNlYXJjaExpc3Q/LmZpbmQoKHgpID0+IHguaWQgPT09IGl0ZW0ucGlkKTtcclxuICAgICAgICAgICAgICBpZiAocGFyZW50ICYmICFwYXJlbnRzLnNvbWUoKHgpID0+IHguaWQgPT09IHBhcmVudCEuaWQpKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJlbnRzLnB1c2gocGFyZW50KTtcclxuICAgICAgICAgICAgICAgIGZpbmRQYXJlbnQocGFyZW50KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2Ygc2VhcmNoTGlzdCkge1xyXG4gICAgICAgICAgICAgIGZpbmRQYXJlbnQoaXRlbSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc291cmNlLmxpc3QgPSBbLi4uc2VhcmNoTGlzdCwgLi4ucGFyZW50c107XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICd0YWJsZSc6XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5zZXRMaXN0Q291bnQodGhpcy50eXBlLCBzb3VyY2UpO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tlZEFsbENoYW5nZSgkZXZlbnQ6IGJvb2xlYW4sIHNvdXJjZTogWFRyYW5zZmVyU291cmNlKSB7XHJcbiAgICBsZXQgbGlzdDogWFRyYW5zZmVyTm9kZVtdID0gKHNvdXJjZS5saXN0Py5maWx0ZXIoKHgpID0+ICF4LmRpc2FibGVkKSBhcyBYVHJhbnNmZXJOb2RlW10pLm1hcCgoeCkgPT4ge1xyXG4gICAgICB4LmNoZWNrZWQgPSAkZXZlbnQ7XHJcbiAgICAgIHJldHVybiB4O1xyXG4gICAgfSk7XHJcbiAgICBpZiAodGhpcy50eXBlID09PSAndHJlZScgJiYgc291cmNlLmRpcmVjdGlvbiA9PT0gJ2xlZnQnKSB7XHJcbiAgICAgIHRoaXMudHJlZUFjdGl2YXRlZElkID0gJGV2ZW50XHJcbiAgICAgICAgPyBzb3VyY2UubGlzdCEubWFwKCh4KSA9PiB4LmlkKSFcclxuICAgICAgICA6IHNvdXJjZS5saXN0IS5maWx0ZXIoKHgpID0+IHguZGlzYWJsZWQpLm1hcCgoeCkgPT4geC5pZCk7XHJcbiAgICB9XHJcbiAgICBzb3VyY2UuY2hlY2tlZENvdW50ID0gJGV2ZW50ID8gbGlzdC5sZW5ndGggOiAwO1xyXG4gICAgc291cmNlLmluZGV0ZXJtaW5hdGUgPSAkZXZlbnQ7XHJcbiAgICB0aGlzLnNldEJ1dHRvbkRpc2FibGVkKHNvdXJjZSk7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBjaGVja2VkQ2hhbmdlKCRldmVudDogYm9vbGVhbiwgc291cmNlOiBYVHJhbnNmZXJTb3VyY2UpIHtcclxuICAgIGlmICghJGV2ZW50KSAoc291cmNlLmNoZWNrZWRDb3VudCBhcyBudW1iZXIpLS07XHJcbiAgICBlbHNlIChzb3VyY2UuY2hlY2tlZENvdW50IGFzIG51bWJlcikrKztcclxuICAgIHRoaXMuc2V0Q2hlY2tlZEFsbChzb3VyY2UpO1xyXG4gICAgdGhpcy5zZXRCdXR0b25EaXNhYmxlZChzb3VyY2UpO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgbW92ZShmcm9tOiBYVHJhbnNmZXJTb3VyY2UsIHRvOiBYVHJhbnNmZXJTb3VyY2UpIHtcclxuICAgIGlmIChmcm9tLmRpc2FibGVkQnV0dG9uKSByZXR1cm47XHJcbiAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xyXG4gICAgICBjYXNlICdsaXN0JzpcclxuICAgICAgICB0aGlzLm1vdmVMaXN0KGZyb20sIHRvKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAndHJlZSc6XHJcbiAgICAgICAgdGhpcy5tb3ZlVHJlZShmcm9tLCB0byk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3RhYmxlJzpcclxuICAgICAgICB0aGlzLm1vdmVUYWJsZShmcm9tLCB0byk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1vdmVMaXN0KGZyb206IFhUcmFuc2ZlclNvdXJjZSwgdG86IFhUcmFuc2ZlclNvdXJjZSkge1xyXG4gICAgbGV0IGNoZWNrZWRJdGVtcyA9IGZyb20ubGlzdD8uZmlsdGVyKCh4KSA9PiAheC5kaXNhYmxlZCAmJiB4LmNoZWNrZWQpITtcclxuICAgIGxldCBqID0gMDtcclxuICAgIGNoZWNrZWRJdGVtcy5mb3JFYWNoKCh4KSA9PiB7XHJcbiAgICAgIGxldCBpbmRleCA9IGZyb20ubGlzdD8uaW5kZXhPZih4KSBhcyBudW1iZXI7XHJcbiAgICAgIHguY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgICB0cmFuc2ZlckFycmF5SXRlbShmcm9tLmxpc3QhLCB0by5saXN0ISwgaW5kZXgsIGopO1xyXG4gICAgICBpZiAodGhpcy5zZWFyY2gpIHtcclxuICAgICAgICBpbmRleCA9IGZyb20uc2VhcmNoTGlzdD8uaW5kZXhPZih4KSBhcyBudW1iZXI7XHJcbiAgICAgICAgdHJhbnNmZXJBcnJheUl0ZW0oZnJvbS5zZWFyY2hMaXN0ISwgdG8uc2VhcmNoTGlzdCEsIGluZGV4LCBqKTtcclxuICAgICAgfVxyXG4gICAgICBqKys7XHJcbiAgICB9KTtcclxuICAgIGZyb20ubGlzdCA9IFsuLi5mcm9tLmxpc3QhXTtcclxuICAgIHRvLmxpc3QgPSBbLi4udG8ubGlzdCFdO1xyXG4gICAgdGhpcy5zZXRDaGVja2VkQ291bnQoJ2xpc3QnLCBmcm9tLCB0byk7XHJcbiAgICB0aGlzLnNldExpc3RDb3VudCgnbGlzdCcsIGZyb20sIHRvKTtcclxuICAgIHRoaXMuc2V0Q2hlY2tlZEFsbChmcm9tLCB0byk7XHJcbiAgICB0aGlzLnNldEJ1dHRvbkRpc2FibGVkKGZyb20sIHRvKTtcclxuICAgIHRoaXMuc2V0U2VhcmNoTGlzdChmcm9tLCB0byk7XHJcbiAgICB0aGlzLnNldFZhbHVlKCk7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1vdmVUcmVlKGZyb206IFhUcmFuc2ZlclNvdXJjZSwgdG86IFhUcmFuc2ZlclNvdXJjZSkge1xyXG4gICAgbGV0IGNoZWNrZWRJdGVtczogWFRyYW5zZmVyTm9kZVtdID0gW107XHJcbiAgICBpZiAodG8uZGlyZWN0aW9uID09PSAncmlnaHQnKSB7XHJcbiAgICAgIGNoZWNrZWRJdGVtcyA9IGZyb20ubGlzdD8uZmlsdGVyKFxyXG4gICAgICAgICh4KSA9PiAheC5kaXNhYmxlZCAmJiAhWElzRW1wdHkodGhpcy50cmVlQWN0aXZhdGVkSWQpICYmIHRoaXMudHJlZUFjdGl2YXRlZElkLmluY2x1ZGVzKHguaWQpXHJcbiAgICAgICkhO1xyXG4gICAgICBjaGVja2VkSXRlbXMuZm9yRWFjaCgoeDogWFRyZWVOb2RlKSA9PiB7XHJcbiAgICAgICAgeC5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgeC5jaGFuZ2UgJiYgeC5jaGFuZ2UoKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRvLmxpc3Q/LnVuc2hpZnQoXHJcbiAgICAgICAgLi4uY2hlY2tlZEl0ZW1zLm1hcCgoeCkgPT4ge1xyXG4gICAgICAgICAgbGV0IHJlcyA9IHsgLi4ueCB9O1xyXG4gICAgICAgICAgcmVzLmNoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgICAgIHJlcy5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnNldENoZWNrZWRDb3VudCgndHJlZScsIGZyb20pO1xyXG4gICAgICB0aGlzLnNldENoZWNrZWRDb3VudCgnbGlzdCcsIHRvKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNoZWNrZWRJdGVtcyA9IFhSZW1vdmUoZnJvbS5saXN0ISwgKHgpID0+ICF4LmRpc2FibGVkICYmIHguY2hlY2tlZCEpO1xyXG4gICAgICBpZiAodGhpcy5zZWFyY2gpIHtcclxuICAgICAgICBYUmVtb3ZlKGZyb20uc2VhcmNoTGlzdCEsICh4KSA9PiAheC5kaXNhYmxlZCAmJiB4LmNoZWNrZWQhKTtcclxuICAgICAgfVxyXG4gICAgICBmb3IgKGxldCBpdGVtIG9mIGNoZWNrZWRJdGVtcykge1xyXG4gICAgICAgIGxldCBub2RlOiBYVHJlZU5vZGUgPSB0by5saXN0Py5maW5kKCh4KSA9PiB4LmlkID09PSBpdGVtLmlkKSE7XHJcbiAgICAgICAgaWYgKG5vZGUpIHtcclxuICAgICAgICAgIG5vZGUuY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgbm9kZS5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgY29uc3QgaWR4ID0gdGhpcy50cmVlQWN0aXZhdGVkSWQuZmluZEluZGV4KCh4KSA9PiB4ID09PSBub2RlLmlkKTtcclxuICAgICAgICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnRyZWVBY3RpdmF0ZWRJZC5zcGxpY2UoaWR4LCAxKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIG5vZGUuY2hhbmdlICYmIG5vZGUuY2hhbmdlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2V0Q2hlY2tlZENvdW50KCd0cmVlJywgdG8pO1xyXG4gICAgICB0aGlzLnNldENoZWNrZWRDb3VudCgnbGlzdCcsIGZyb20pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZXRDaGVja2VkQWxsKGZyb20sIHRvKTtcclxuICAgIHRoaXMuc2V0TGlzdENvdW50KCdsaXN0JywgZnJvbSwgdG8pO1xyXG4gICAgdGhpcy5zZXRCdXR0b25EaXNhYmxlZChmcm9tLCB0byk7XHJcbiAgICB0aGlzLnNldFNlYXJjaExpc3QoZnJvbSwgdG8pO1xyXG4gICAgdGhpcy5zZXRWYWx1ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtb3ZlVGFibGUoZnJvbTogWFRyYW5zZmVyU291cmNlLCB0bzogWFRyYW5zZmVyU291cmNlKSB7XHJcbiAgICBsZXQgY2hlY2tlZEl0ZW1zOiBYVHJhbnNmZXJOb2RlW10gPSBbXTtcclxuICAgIGlmICh0by5kaXJlY3Rpb24gPT09ICdyaWdodCcpIHtcclxuICAgICAgY2hlY2tlZEl0ZW1zID0gZnJvbS5saXN0Py5maWx0ZXIoKHgpID0+ICF4LmRpc2FibGVkICYmIHguY2hlY2tlZCkhO1xyXG4gICAgICB0by5saXN0ID0gW1xyXG4gICAgICAgIC4uLmNoZWNrZWRJdGVtcy5tYXAoKHgpID0+IHtcclxuICAgICAgICAgIGNvbnN0IHJlcyA9IHsgLi4ueCB9O1xyXG4gICAgICAgICAgeC5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICB4LmNoZWNrZWQgPSB0cnVlO1xyXG4gICAgICAgICAgcmVzLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICByZXMuY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KSxcclxuICAgICAgICAuLi50by5saXN0IVxyXG4gICAgICBdO1xyXG4gICAgICB0aGlzLnRhYmxlRGF0YSA9IFsuLi5mcm9tLmxpc3QhXTtcclxuICAgICAgdGhpcy5zZXRDaGVja2VkQ291bnQoJ3RhYmxlJywgZnJvbSk7XHJcbiAgICAgIHRoaXMuc2V0Q2hlY2tlZENvdW50KCdsaXN0JywgdG8pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY2hlY2tlZEl0ZW1zID0gWFJlbW92ZShmcm9tLmxpc3QhLCAoeCkgPT4gIXguZGlzYWJsZWQgJiYgeC5jaGVja2VkISk7XHJcbiAgICAgIGNvbnN0IGlkcyA9IGNoZWNrZWRJdGVtcy5tYXAoKHgpID0+IHguaWQpO1xyXG4gICAgICBmb3IgKGxldCBpdGVtIG9mIHRvLmxpc3QhKSB7XHJcbiAgICAgICAgaWYgKGlkcy5pbmNsdWRlcyhpdGVtLmlkKSkge1xyXG4gICAgICAgICAgaXRlbS5jaGVja2VkID0gZmFsc2U7XHJcbiAgICAgICAgICBpdGVtLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGZyb20ubGlzdCA9IFsuLi5mcm9tLmxpc3QhXTtcclxuICAgICAgdGhpcy50YWJsZURhdGEgPSBbLi4udG8ubGlzdCFdO1xyXG4gICAgICB0aGlzLnNldENoZWNrZWRDb3VudCgndGFibGUnLCB0byk7XHJcbiAgICAgIHRoaXMuc2V0Q2hlY2tlZENvdW50KCdsaXN0JywgZnJvbSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldExpc3RDb3VudCgndGFibGUnLCBmcm9tLCB0byk7XHJcbiAgICB0aGlzLnNldENoZWNrZWRBbGwoZnJvbSwgdG8pO1xyXG4gICAgdGhpcy5zZXRCdXR0b25EaXNhYmxlZChmcm9tLCB0byk7XHJcbiAgICB0aGlzLnNldFNlYXJjaExpc3QoZnJvbSwgdG8pO1xyXG4gICAgdGhpcy5zZXRWYWx1ZSgpO1xyXG4gIH1cclxuXHJcbiAgZHJvcENkayhldmVudDogQ2RrRHJhZ0Ryb3A8WFRyYW5zZmVyTm9kZVtdIHwgdW5kZWZpbmVkLCBhbnk+KSB7XHJcbiAgICBjb25zdCBldiA9IGV2ZW50IGFzIENka0RyYWdEcm9wPFhUcmFuc2Zlck5vZGVbXT47XHJcbiAgICBpZiAoZXYucHJldmlvdXNDb250YWluZXIgPT09IGV2LmNvbnRhaW5lcikge1xyXG4gICAgICBtb3ZlSXRlbUluQXJyYXkoZXYuY29udGFpbmVyLmRhdGEsIGV2LnByZXZpb3VzSW5kZXgsIGV2LmN1cnJlbnRJbmRleCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0cmFuc2ZlckFycmF5SXRlbShldi5wcmV2aW91c0NvbnRhaW5lci5kYXRhLCBldi5jb250YWluZXIuZGF0YSwgZXYucHJldmlvdXNJbmRleCwgZXYuY3VycmVudEluZGV4KTtcclxuICAgICAgdGhpcy5zZXRDaGVja2VkQ291bnQoJ2xpc3QnLCB0aGlzLmxlZnQsIHRoaXMucmlnaHQpO1xyXG4gICAgICB0aGlzLnNldENoZWNrZWRBbGwodGhpcy5sZWZ0LCB0aGlzLnJpZ2h0KTtcclxuICAgICAgdGhpcy5zZXRMaXN0Q291bnQoJ2xpc3QnLCB0aGlzLmxlZnQsIHRoaXMucmlnaHQpO1xyXG4gICAgICB0aGlzLnNldEJ1dHRvbkRpc2FibGVkKHRoaXMubGVmdCwgdGhpcy5yaWdodCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldFNlYXJjaExpc3QodGhpcy5sZWZ0LCB0aGlzLnJpZ2h0KTtcclxuICAgIHRoaXMuc2V0VmFsdWUoKTtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHByZWRpY2F0ZShpdGVtOiBDZGtEcmFnPFhUcmFuc2Zlck5vZGU+KSB7XHJcbiAgICByZXR1cm4gIWl0ZW0uZGF0YS5kaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIHRyYWNrQnlOb2RlKF9pbmRleDogbnVtYmVyLCBpdGVtOiBYVHJhbnNmZXJOb2RlKSB7XHJcbiAgICByZXR1cm4gaXRlbS5pZDtcclxuICB9XHJcblxyXG4gIHNldExpc3RDb3VudCh0eXBlOiBYVHJhbnNmZXJUeXBlID0gJ2xpc3QnLCAuLi5zb3VyY2VzOiBYVHJhbnNmZXJTb3VyY2VbXSkge1xyXG4gICAgaWYgKFsnbGlzdCcsICd0cmVlJ10uaW5jbHVkZXModHlwZSkpIHtcclxuICAgICAgZm9yIChsZXQgc291cmNlIG9mIHNvdXJjZXMpIHtcclxuICAgICAgICBzb3VyY2UuY291bnQgPSBzb3VyY2UubGlzdD8uZmlsdGVyKCh4KSA9PiAheC5kaXNhYmxlZCkubGVuZ3RoO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICd0YWJsZScpIHtcclxuICAgICAgZm9yIChsZXQgc291cmNlIG9mIHNvdXJjZXMpIHtcclxuICAgICAgICBpZiAoc291cmNlLmRpcmVjdGlvbiA9PT0gJ2xlZnQnKSB7XHJcbiAgICAgICAgICBzb3VyY2UuY291bnQgPSB0aGlzLnRhYmxlVG90YWwgLSB0aGlzLnJpZ2h0Lmxpc3QhLmxlbmd0aCB8fCAwO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBzb3VyY2UuY291bnQgPSBzb3VyY2UubGlzdD8uZmlsdGVyKCh4KSA9PiAheC5kaXNhYmxlZCkubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25UcmVlTm9kZUNsaWNrKF9ub2RlOiBYVHJlZU5vZGUpIHtcclxuICAgIHRoaXMuc2V0Q2hlY2tlZENvdW50KCd0cmVlJywgdGhpcy5sZWZ0KTtcclxuICAgIHRoaXMuc2V0Q2hlY2tlZEFsbCh0aGlzLmxlZnQpO1xyXG4gICAgdGhpcy5zZXRCdXR0b25EaXNhYmxlZCh0aGlzLmxlZnQpO1xyXG4gIH1cclxuXHJcbiAgb25UYWJsZUNoZWNrZWRSb3cocm93OiBYVHJhbnNmZXJOb2RlLCBzb3VyY2U6IFhUcmFuc2ZlclNvdXJjZSkge1xyXG4gICAgaWYgKCF0aGlzLnRhYmxlQ2hlY2tib3hDb2x1bW4pIHJldHVybjtcclxuICAgIGxldCBjaGVja2VkID0gcm93W3RoaXMudGFibGVDaGVja2JveENvbHVtbi5pZF07XHJcbiAgICByb3cuY2hlY2tlZCA9IGNoZWNrZWQ7XHJcbiAgICB0aGlzLnNldENoZWNrZWRDb3VudCgndGFibGUnLCBzb3VyY2UpO1xyXG4gICAgdGhpcy5zZXRDaGVja2VkQWxsKHNvdXJjZSk7XHJcbiAgICB0aGlzLnNldEJ1dHRvbkRpc2FibGVkKHNvdXJjZSk7XHJcbiAgfVxyXG5cclxuICBvblRhYmxlQ2hlY2tlZEFsbChyb3c6IFhUYWJsZUhlYWRDaGVja2JveCwgc291cmNlOiBYVHJhbnNmZXJTb3VyY2UpIHtcclxuICAgIGlmICghdGhpcy50YWJsZUNoZWNrYm94Q29sdW1uKSByZXR1cm47XHJcbiAgICBsZXQgY2hlY2tlZCA9IHJvdy5jaGVja2JveFt0aGlzLnRhYmxlQ2hlY2tib3hDb2x1bW4uaWRdO1xyXG4gICAgZm9yIChsZXQgaXRlbSBvZiBzb3VyY2UubGlzdCEpIHtcclxuICAgICAgaWYgKCFpdGVtLmRpc2FibGVkKSB7XHJcbiAgICAgICAgaXRlbS5jaGVja2VkID0gY2hlY2tlZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5zZXRDaGVja2VkQ291bnQoJ3RhYmxlJywgc291cmNlKTtcclxuICAgIHRoaXMuc2V0QnV0dG9uRGlzYWJsZWQoc291cmNlKTtcclxuICB9XHJcblxyXG4gIG9uSW52ZXJzZShzb3VyY2U6IFhUcmFuc2ZlclNvdXJjZSkge1xyXG4gICAgZm9yIChsZXQgaXRlbSBvZiBzb3VyY2UubGlzdCEpIHtcclxuICAgICAgaWYgKCFpdGVtLmRpc2FibGVkKSB7XHJcbiAgICAgICAgaXRlbS5jaGVja2VkID0gIWl0ZW0uY2hlY2tlZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IHR5cGUgPSBgJHt0aGlzLnR5cGV9YCBhcyBYVHJhbnNmZXJUeXBlO1xyXG4gICAgaWYgKHR5cGUgPT09ICd0cmVlJyAmJiBzb3VyY2UuZGlyZWN0aW9uID09PSAncmlnaHQnKSB7XHJcbiAgICAgIHR5cGUgPSAnbGlzdCc7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldENoZWNrZWRDb3VudCh0eXBlLCBzb3VyY2UpO1xyXG4gICAgdGhpcy5zZXRDaGVja2VkQWxsKHNvdXJjZSk7XHJcbiAgICB0aGlzLnNldEJ1dHRvbkRpc2FibGVkKHNvdXJjZSk7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFRhYmxlQ2hlY2tDb2x1bW4oKSB7XHJcbiAgICBpZiAodGhpcy50eXBlICE9PSAndGFibGUnIHx8IFhJc0VtcHR5KHRoaXMudGFibGVDb2x1bW5zKSkgcmV0dXJuO1xyXG4gICAgdGhpcy50YWJsZUNoZWNrYm94Q29sdW1uID0gdGhpcy50YWJsZUNvbHVtbnM/LmZpbmQoKHgpID0+IHgucm93Q2hlY2tlZCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldENoZWNrZWRBbGwoLi4uc291cmNlczogWFRyYW5zZmVyU291cmNlW10pIHtcclxuICAgIGZvciAobGV0IHNvdXJjZSBvZiBzb3VyY2VzKSB7XHJcbiAgICAgIGlmICgoc291cmNlLmNoZWNrZWRDb3VudCBhcyBudW1iZXIpID4gMCkge1xyXG4gICAgICAgIGlmIChzb3VyY2UuY2hlY2tlZENvdW50ID09PSBzb3VyY2UubGlzdD8uZmlsdGVyKCh4KSA9PiAheC5kaXNhYmxlZCkubGVuZ3RoKSB7XHJcbiAgICAgICAgICBzb3VyY2UuY2hlY2tlZEFsbCA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHNvdXJjZS5jaGVja2VkQWxsID0gZmFsc2U7XHJcbiAgICAgICAgICBzb3VyY2UuaW5kZXRlcm1pbmF0ZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHNvdXJjZS5jaGVja2VkQWxsID0gZmFsc2U7XHJcbiAgICAgICAgc291cmNlLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRDaGVja2VkQ291bnQodHlwZTogWFRyYW5zZmVyVHlwZSA9ICdsaXN0JywgLi4uc291cmNlczogWFRyYW5zZmVyU291cmNlW10pIHtcclxuICAgIGZvciAobGV0IHNvdXJjZSBvZiBzb3VyY2VzKSB7XHJcbiAgICAgIGlmIChbJ3RhYmxlJywgJ2xpc3QnXS5pbmNsdWRlcyh0eXBlKSkge1xyXG4gICAgICAgIHNvdXJjZS5jaGVja2VkQ291bnQgPSBzb3VyY2UubGlzdD8uZmlsdGVyKCh4KSA9PiAheC5kaXNhYmxlZCAmJiB4LmNoZWNrZWQpLmxlbmd0aDtcclxuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAndHJlZScpIHtcclxuICAgICAgICBzb3VyY2UuY2hlY2tlZENvdW50ID0gc291cmNlLmxpc3Q/LmZpbHRlcihcclxuICAgICAgICAgICh4KSA9PiAheC5kaXNhYmxlZCAmJiAhWElzRW1wdHkodGhpcy50cmVlQWN0aXZhdGVkSWQpICYmIHRoaXMudHJlZUFjdGl2YXRlZElkLmluY2x1ZGVzKHguaWQpXHJcbiAgICAgICAgKS5sZW5ndGg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0QnV0dG9uRGlzYWJsZWQoLi4uc291cmNlczogWFRyYW5zZmVyU291cmNlW10pIHtcclxuICAgIGZvciAobGV0IHNvdXJjZSBvZiBzb3VyY2VzKSBzb3VyY2UuZGlzYWJsZWRCdXR0b24gPSBzb3VyY2UuY2hlY2tlZENvdW50ID09PSAwO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRWYWx1ZSgpIHtcclxuICAgIGlmICh0aGlzLmlzT2JqZWN0QXJyYXkpIHtcclxuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMucmlnaHQubGlzdCE7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5yaWdodC5saXN0Py5tYXAoKHgpID0+IHguaWQpITtcclxuICAgIH1cclxuICAgIHRoaXMub25DaGFuZ2UodGhpcy52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFNlYXJjaExpc3QoLi4uc291cmNlczogWFRyYW5zZmVyU291cmNlW10pIHtcclxuICAgIGlmICh0aGlzLnNlYXJjaCkge1xyXG4gICAgICBmb3IgKGxldCBzb3VyY2Ugb2Ygc291cmNlcykge1xyXG4gICAgICAgIGlmIChYSXNFbXB0eShzb3VyY2Uuc2VhcmNoSW5wdXQpKSB7XHJcbiAgICAgICAgICBzb3VyY2Uuc2VhcmNoTGlzdCA9IFsuLi4oc291cmNlLmxpc3QgYXMgWFRyYW5zZmVyTm9kZVtdKV07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldERhdGEoKSB7XHJcbiAgICBpZiAodGhpcy50eXBlID09PSAndGFibGUnKSB7XHJcbiAgICAgIHRoaXMuZ2V0VGFibGVEYXRhKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIFhTZXREYXRhPFhUcmFuc2Zlck5vZGU+KHRoaXMuZGF0YSwgdGhpcy5fdW5TdWJqZWN0KS5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgdGhpcy5zZXRMaXN0KHgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldExpc3QoZGF0YTogWFRyYW5zZmVyTm9kZVtdKSB7XHJcbiAgICBpZiAoWElzRW1wdHkoZGF0YSkpIHJldHVybjtcclxuICAgIHN3aXRjaCAodGhpcy50eXBlKSB7XHJcbiAgICAgIGNhc2UgJ2xpc3QnOlxyXG4gICAgICAgIHRoaXMubm9kZXMgPSBkYXRhO1xyXG4gICAgICAgIGlmICghWElzRW1wdHkodGhpcy52YWx1ZXMpKSB7XHJcbiAgICAgICAgICB0aGlzLmxlZnQubGlzdCA9IHRoaXMubm9kZXMuZmlsdGVyKCh4KSA9PiB0aGlzLnZhbHVlcy5pbmRleE9mKHguaWQpIDwgMCk7XHJcbiAgICAgICAgICB0aGlzLnJpZ2h0Lmxpc3QgPSB0aGlzLm5vZGVzLmZpbHRlcigoeCkgPT4gdGhpcy52YWx1ZXMuaW5kZXhPZih4LmlkKSA+PSAwKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5sZWZ0Lmxpc3QgPSBbLi4udGhpcy5ub2Rlc107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0U2VhcmNoTGlzdCh0aGlzLmxlZnQsIHRoaXMucmlnaHQpO1xyXG4gICAgICAgIHRoaXMuc2V0TGlzdENvdW50KHRoaXMudHlwZSwgdGhpcy5sZWZ0LCB0aGlzLnJpZ2h0KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAndHJlZSc6XHJcbiAgICAgICAgdGhpcy5ub2RlcyA9IGRhdGE7XHJcbiAgICAgICAgdGhpcy5zZXRUcmVlTm9kZURpc2FibGVkKCk7XHJcbiAgICAgICAgdGhpcy5sZWZ0Lmxpc3QgPSBbLi4udGhpcy5ub2Rlc107XHJcbiAgICAgICAgaWYgKCFYSXNFbXB0eSh0aGlzLnZhbHVlcykpIHtcclxuICAgICAgICAgIHRoaXMucmlnaHQubGlzdCA9IHRoaXMubm9kZXNcclxuICAgICAgICAgICAgLmZpbHRlcigoeCkgPT4gdGhpcy52YWx1ZXMuaW5kZXhPZih4LmlkKSA+PSAwKVxyXG4gICAgICAgICAgICAubWFwKCh4KSA9PiB7XHJcbiAgICAgICAgICAgICAgbGV0IHJlcyA9IHsgLi4ueCB9O1xyXG4gICAgICAgICAgICAgIHJlcy5jaGVja2VkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgcmVzLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0U2VhcmNoTGlzdCh0aGlzLmxlZnQsIHRoaXMucmlnaHQpO1xyXG4gICAgICAgIHRoaXMuc2V0TGlzdENvdW50KHRoaXMudHlwZSwgdGhpcy5sZWZ0LCB0aGlzLnJpZ2h0KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAndGFibGUnOlxyXG4gICAgICAgIHRoaXMubm9kZXMgPSBkYXRhO1xyXG4gICAgICAgIHRoaXMuc2V0VGFibGVEYXRhRGlzYWJsZWQoKTtcclxuICAgICAgICB0aGlzLmxlZnQubGlzdCA9IFsuLi50aGlzLm5vZGVzXTtcclxuICAgICAgICBpZiAoIVhJc0VtcHR5KHRoaXMudmFsdWVzKSkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuaXNPYmplY3RBcnJheSkge1xyXG4gICAgICAgICAgICB0aGlzLnJpZ2h0Lmxpc3QgPSBbXHJcbiAgICAgICAgICAgICAgLi4udGhpcy52YWx1ZS5tYXAoKHgpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCByZXMgPSB7IC4uLnggfTtcclxuICAgICAgICAgICAgICAgIHJlcy5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgcmVzLmNoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgXTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucmlnaHQubGlzdCA9IFsuLi50aGlzLnZhbHVlXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRTZWFyY2hMaXN0KHRoaXMubGVmdCwgdGhpcy5yaWdodCk7XHJcbiAgICAgICAgdGhpcy5zZXRMaXN0Q291bnQodGhpcy50eXBlLCB0aGlzLmxlZnQsIHRoaXMucmlnaHQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0VGFibGVEYXRhKCkge1xyXG4gICAgaWYgKFhJc0Z1bmN0aW9uKHRoaXMuZGF0YSkpIHtcclxuICAgICAgKHRoaXMuZGF0YSBhcyBGdW5jdGlvbikodGhpcy50YWJsZUluZGV4LCB0aGlzLnRhYmxlU2l6ZSwgdGhpcy50YWJsZVF1ZXJ5KS5zdWJzY3JpYmUoXHJcbiAgICAgICAgKHg6IFhSZXN1bHRMaXN0PFhUcmFuc2Zlck5vZGU+KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRhYmxlVG90YWwgPSB4LnRvdGFsITtcclxuICAgICAgICAgIHRoaXMudGFibGVEYXRhID0geC5saXN0ITtcclxuICAgICAgICAgIHRoaXMuc2V0TGlzdCh4Lmxpc3QhKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFRpdGxlcygpIHtcclxuICAgIGxldCB0aXRsZXM6IHN0cmluZ1tdID0gW107XHJcbiAgICBpZiAoWElzRW1wdHkodGhpcy50aXRsZXMpKSB7XHJcbiAgICAgIHRpdGxlcyA9IFt0aGlzLmxvY2FsVGl0bGUhLCB0aGlzLmxvY2FsZS5zZWxlY3RlZFRpdGxlIV07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aXRsZXMgPSB0aGlzLnRpdGxlcztcclxuICAgIH1cclxuICAgIGlmICh0aXRsZXMubGVuZ3RoID4gMCkgdGhpcy5sZWZ0LnRpdGxlID0gdGl0bGVzWzBdO1xyXG4gICAgaWYgKHRpdGxlcy5sZW5ndGggPiAxKSB0aGlzLnJpZ2h0LnRpdGxlID0gdGl0bGVzWzFdO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRMaXN0U3R5bGUoKSB7XHJcbiAgICBpZiAoWElzRW1wdHkodGhpcy5saXN0U3R5bGUpKSByZXR1cm47XHJcbiAgICBsZXQgc3R5bGVzOiBvYmplY3RbXSA9IFtdO1xyXG4gICAgaWYgKFhJc09iamVjdCh0aGlzLmxpc3RTdHlsZSkpIHtcclxuICAgICAgc3R5bGVzID0gW3RoaXMubGlzdFN0eWxlLCB0aGlzLmxpc3RTdHlsZV07XHJcbiAgICB9IGVsc2UgaWYgKFhJc09iamVjdEFycmF5KHRoaXMubGlzdFN0eWxlKSkge1xyXG4gICAgICBzdHlsZXMgPSB0aGlzLmxpc3RTdHlsZSBhcyBvYmplY3RbXTtcclxuICAgIH1cclxuICAgIGlmIChzdHlsZXMubGVuZ3RoID4gMCkgdGhpcy5sZWZ0Lmxpc3RTdHlsZSA9IHN0eWxlc1swXTtcclxuICAgIGlmIChzdHlsZXMubGVuZ3RoID4gMSkgdGhpcy5yaWdodC5saXN0U3R5bGUgPSBzdHlsZXNbMV07XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFRyZWVOb2RlRGlzYWJsZWQoKSB7XHJcbiAgICBpZiAoIVhJc0VtcHR5KHRoaXMudmFsdWVzKSAmJiB0aGlzLm5vZGVzKSB7XHJcbiAgICAgIGZvciAobGV0IGl0ZW0gb2YgdGhpcy5ub2Rlcykge1xyXG4gICAgICAgIGxldCBoYXNJbiA9IHRoaXMudmFsdWVzLmluZGV4T2YoaXRlbS5pZCkgPj0gMDtcclxuICAgICAgICBpdGVtLmRpc2FibGVkID0gaGFzSW47XHJcbiAgICAgICAgaXRlbS5jaGVja2VkID0gaGFzSW47XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0VGFibGVEYXRhRGlzYWJsZWQoKSB7XHJcbiAgICBpZiAoIVhJc0VtcHR5KHRoaXMudmFsdWVzKSAmJiB0aGlzLm5vZGVzKSB7XHJcbiAgICAgIGZvciAobGV0IGl0ZW0gb2YgdGhpcy5ub2Rlcykge1xyXG4gICAgICAgIGxldCBoYXNJbiA9IHRoaXMudmFsdWVzLmluZGV4T2YoaXRlbS5pZCkgPj0gMDtcclxuICAgICAgICBpdGVtLmRpc2FibGVkID0gaGFzSW47XHJcbiAgICAgICAgaXRlbS5jaGVja2VkID0gaGFzSW47XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0SGlkZGVuQ2hlY2tBbGwoKSB7XHJcbiAgICBpZiAoWElzRW1wdHkodGhpcy5oaWRkZW5DaGVja0FsbCkpIHJldHVybjtcclxuICAgIGlmICh0aGlzLmhpZGRlbkNoZWNrQWxsIS5sZW5ndGggPiAwICYmIFhJc0Jvb2xlYW4odGhpcy5oaWRkZW5DaGVja0FsbCFbMF0pKVxyXG4gICAgICB0aGlzLmxlZnQuaGlkZGVuQ2hlY2tBbGwgPSB0aGlzLmhpZGRlbkNoZWNrQWxsIVswXTtcclxuICAgIGlmICh0aGlzLmhpZGRlbkNoZWNrQWxsIS5sZW5ndGggPiAxICYmIFhJc0Jvb2xlYW4odGhpcy5oaWRkZW5DaGVja0FsbCFbMV0pKVxyXG4gICAgICB0aGlzLnJpZ2h0LmhpZGRlbkNoZWNrQWxsID0gdGhpcy5oaWRkZW5DaGVja0FsbCFbMV07XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEZvb3RlclRwbCgpIHtcclxuICAgIGlmIChYSXNVbmRlZmluZWQodGhpcy5mb290ZXJUcGwpKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5mb290ZXJUcGwhLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5sZWZ0LmZvb3RlclRwbCA9IHRoaXMuZm9vdGVyVHBsIVswXTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmZvb3RlclRwbCEubGVuZ3RoID4gMSkge1xyXG4gICAgICB0aGlzLnJpZ2h0LmZvb3RlclRwbCA9IHRoaXMuZm9vdGVyVHBsIVsxXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0VGFibGVIZWFkU2VhcmNoVHBsKCkge1xyXG4gICAgaWYgKFhJc1VuZGVmaW5lZCh0aGlzLnRhYmxlSGVhZFNlYXJjaFRwbCkpIHJldHVybjtcclxuICAgIGlmICh0aGlzLnRhYmxlSGVhZFNlYXJjaFRwbCEubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmxlZnQudGFibGVIZWFkU2VhcmNoVHBsID0gdGhpcy50YWJsZUhlYWRTZWFyY2hUcGwhWzBdO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMudGFibGVIZWFkU2VhcmNoVHBsIS5sZW5ndGggPiAxKSB7XHJcbiAgICAgIHRoaXMucmlnaHQudGFibGVIZWFkU2VhcmNoVHBsID0gdGhpcy50YWJsZUhlYWRTZWFyY2hUcGwhWzFdO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2ICN0cmFuc2ZlciBjbGFzcz1cIngtdHJhbnNmZXJcIiBjZGtEcm9wTGlzdEdyb3VwIFtuZ0NsYXNzXT1cImNsYXNzTWFwXCI+XHJcbiAgPGRpdiBjbGFzcz1cIngtdHJhbnNmZXItYm94XCIgW2NsYXNzLngtdHJhbnNmZXItaGFzLWZvb3Rlcl09XCJsZWZ0LmZvb3RlclRwbFwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNvdXJjZVRpdGxlVHBsOyBjb250ZXh0OiB7IHNvdXJjZTogbGVmdCB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8ZGl2IFtuZ1N0eWxlXT1cImxlZnQubGlzdFN0eWxlIVwiIGNsYXNzPVwieC10cmFuc2Zlci1saXN0XCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cInR5cGVcIj5cclxuICAgICAgICA8dWxcclxuICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInbGlzdCdcIlxyXG4gICAgICAgICAgY2RrRHJvcExpc3RcclxuICAgICAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcENkaygkZXZlbnQpXCJcclxuICAgICAgICAgIFtjZGtEcm9wTGlzdERhdGFdPVwibGVmdC5saXN0XCJcclxuICAgICAgICAgIFtjZGtEcm9wTGlzdERpc2FibGVkXT1cIiFkcmFnICYmIHR5cGUgPT09ICdsaXN0J1wiXHJcbiAgICAgICAgICBbY2RrRHJvcExpc3RFbnRlclByZWRpY2F0ZV09XCJwcmVkaWNhdGVcIlxyXG4gICAgICAgICAgY2xhc3M9XCJ4LXRyYW5zZmVyLWRyb3BsaXN0XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bGkgY2xhc3M9XCJ4LXRyYW5zZmVyLWl0ZW1cIiAqbmdGb3I9XCJsZXQgbm9kZSBvZiBsZWZ0Lmxpc3Q7IHRyYWNrQnk6IHRyYWNrQnlOb2RlXCIgY2RrRHJhZyBbY2RrRHJhZ0RhdGFdPVwibm9kZVwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic291cmNlTm9kZVRwbDsgY29udGV4dDogeyBub2RlOiBub2RlLCBzb3VyY2U6IGxlZnQgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgICAgIDx4LXRyZWVcclxuICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCIndHJlZSdcIlxyXG4gICAgICAgICAgW2RhdGFdPVwibGVmdC5saXN0IVwiXHJcbiAgICAgICAgICBtdWx0aXBsZVxyXG4gICAgICAgICAgYWxsb3dNYW55QWN0aXZhdGVkXHJcbiAgICAgICAgICBbKGFjdGl2YXRlZElkKV09XCJ0cmVlQWN0aXZhdGVkSWRcIlxyXG4gICAgICAgICAgKG5vZGVDbGljayk9XCJvblRyZWVOb2RlQ2xpY2soJGV2ZW50KVwiXHJcbiAgICAgICAgICBbbGFiZWxUcGxdPVwidHJlZUxhYmVsVHBsXCJcclxuICAgICAgICA+PC94LXRyZWU+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICN0cmVlTGFiZWxUcGwgbGV0LW5vZGU9XCIkbm9kZVwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ4LXRyYW5zZmVyLXRyZWUtbGFiZWxcIiB4LWtleXdvcmQgW3RleHRdPVwibGVmdC5zZWFyY2hJbnB1dCFcIj57eyBub2RlLmxhYmVsIH19PC9zcGFuPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPHgtdGFibGVcclxuICAgICAgICAgICNsZWZ0VGFibGVDb21cclxuICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCIndGFibGUnXCJcclxuICAgICAgICAgIFtkYXRhXT1cInRhYmxlRGF0YVwiXHJcbiAgICAgICAgICBbY29sdW1uc109XCJ0YWJsZUNvbHVtbnMhXCJcclxuICAgICAgICAgIFsoc2l6ZSldPVwidGFibGVTaXplXCJcclxuICAgICAgICAgIFsoaW5kZXgpXT1cInRhYmxlSW5kZXhcIlxyXG4gICAgICAgICAgKGluZGV4Q2hhbmdlKT1cImdldFRhYmxlRGF0YSgpXCJcclxuICAgICAgICAgIFtxdWVyeV09XCJ0YWJsZVF1ZXJ5XCJcclxuICAgICAgICAgIFt0b3RhbF09XCJ0YWJsZVRvdGFsXCJcclxuICAgICAgICAgIChhY3RpdmF0ZWRSb3dDaGFuZ2UpPVwib25UYWJsZUNoZWNrZWRSb3coJGV2ZW50LCBsZWZ0KVwiXHJcbiAgICAgICAgICAoaGVhZENoZWNrYm94Q2hhbmdlKT1cIm9uVGFibGVDaGVja2VkQWxsKCRldmVudCwgbGVmdClcIlxyXG4gICAgICAgICAgaGlkZGVuV3JhcEJvcmRlclxyXG4gICAgICAgICAgaGlkZGVuUGFnaW5hdGlvbkJvcmRlclxyXG4gICAgICAgICAgc2hvd0VsbGlwc2lzPVwiZmFsc2VcIlxyXG4gICAgICAgICAgc2hvd1RvdGFsPVwiZmFsc2VcIlxyXG4gICAgICAgICAgcGFnaW5hdGlvblBvc2l0aW9uPVwiYm90dG9tLWNlbnRlclwiXHJcbiAgICAgICAgICBhbGxvd1NlbGVjdFJvdz1cImZhbHNlXCJcclxuICAgICAgICAgIFtoZWFkU2VhcmNoVHBsXT1cImxlZnQudGFibGVIZWFkU2VhcmNoVHBsXCJcclxuICAgICAgICA+PC94LXRhYmxlPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIngtdHJhbnNmZXItZm9vdGVyXCIgKm5nSWY9XCJsZWZ0LmZvb3RlclRwbFwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibGVmdC5mb290ZXJUcGw7IGNvbnRleHQ6IHsgJHNvdXJjZTogbGVmdCB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwieC10cmFuc2Zlci1idXR0b25zXCI+XHJcbiAgICA8eC1idXR0b24gdHlwZT1cInByaW1hcnlcIiBpY29uPVwiZnRvLWNoZXZyb24tcmlnaHRcIiBbZGlzYWJsZWRdPVwibGVmdC5kaXNhYmxlZEJ1dHRvblwiIChjbGljayk9XCJtb3ZlKGxlZnQsIHJpZ2h0KVwiPjwveC1idXR0b24+XHJcbiAgICA8eC1idXR0b24gdHlwZT1cInByaW1hcnlcIiBpY29uPVwiZnRvLWNoZXZyb24tbGVmdFwiIFtkaXNhYmxlZF09XCJyaWdodC5kaXNhYmxlZEJ1dHRvblwiIChjbGljayk9XCJtb3ZlKHJpZ2h0LCBsZWZ0KVwiPjwveC1idXR0b24+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cIngtdHJhbnNmZXItYm94XCIgW2NsYXNzLngtdHJhbnNmZXItaGFzLWZvb3Rlcl09XCJyaWdodC5mb290ZXJUcGxcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzb3VyY2VUaXRsZVRwbDsgY29udGV4dDogeyBzb3VyY2U6IHJpZ2h0IH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDxkaXYgW25nU3dpdGNoXT1cInR5cGVcIiBbbmdTdHlsZV09XCJyaWdodC5saXN0U3R5bGUhXCIgY2xhc3M9XCJ4LXRyYW5zZmVyLWxpc3RcIj5cclxuICAgICAgPHgtdGFibGVcclxuICAgICAgICAjcmlnaHRUYWJsZUNvbVxyXG4gICAgICAgICpuZ1N3aXRjaENhc2U9XCIndGFibGUnXCJcclxuICAgICAgICBbZGF0YV09XCJyaWdodC5saXN0IVwiXHJcbiAgICAgICAgW2NvbHVtbnNdPVwidGFibGVDb2x1bW5zIVwiXHJcbiAgICAgICAgKGFjdGl2YXRlZFJvd0NoYW5nZSk9XCJvblRhYmxlQ2hlY2tlZFJvdygkZXZlbnQsIHJpZ2h0KVwiXHJcbiAgICAgICAgKGhlYWRDaGVja2JveENoYW5nZSk9XCJvblRhYmxlQ2hlY2tlZEFsbCgkZXZlbnQsIHJpZ2h0KVwiXHJcbiAgICAgICAgaGlkZGVuV3JhcEJvcmRlclxyXG4gICAgICAgIGhpZGRlblBhZ2luYXRpb25Cb3JkZXJcclxuICAgICAgICBzaG93UGFnaW5hdGlvbj1cImZhbHNlXCJcclxuICAgICAgICBzaG93RWxsaXBzaXM9XCJmYWxzZVwiXHJcbiAgICAgICAgc2hvd1RvdGFsPVwiZmFsc2VcIlxyXG4gICAgICAgIHBhZ2luYXRpb25Qb3NpdGlvbj1cImJvdHRvbS1jZW50ZXJcIlxyXG4gICAgICAgIGFsbG93U2VsZWN0Um93PVwiZmFsc2VcIlxyXG4gICAgICAgIFtoZWFkU2VhcmNoVHBsXT1cInJpZ2h0LnRhYmxlSGVhZFNlYXJjaFRwbFwiXHJcbiAgICAgID48L3gtdGFibGU+XHJcbiAgICAgIDx1bFxyXG4gICAgICAgICpuZ1N3aXRjaERlZmF1bHRcclxuICAgICAgICBjZGtEcm9wTGlzdFxyXG4gICAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcENkaygkZXZlbnQpXCJcclxuICAgICAgICBbY2RrRHJvcExpc3REYXRhXT1cInJpZ2h0Lmxpc3RcIlxyXG4gICAgICAgIFtjZGtEcm9wTGlzdERpc2FibGVkXT1cIiFkcmFnIHx8IChkcmFnICYmIHR5cGUgIT09ICdsaXN0JylcIlxyXG4gICAgICAgIFtjZGtEcm9wTGlzdEVudGVyUHJlZGljYXRlXT1cInByZWRpY2F0ZVwiXHJcbiAgICAgICAgY2xhc3M9XCJ4LXRyYW5zZmVyLWRyb3BsaXN0XCJcclxuICAgICAgPlxyXG4gICAgICAgIDxsaSBjbGFzcz1cIngtdHJhbnNmZXItaXRlbVwiICpuZ0Zvcj1cImxldCBub2RlIG9mIHJpZ2h0Lmxpc3Q7IHRyYWNrQnk6IHRyYWNrQnlOb2RlXCIgY2RrRHJhZyBbY2RrRHJhZ0RhdGFdPVwibm9kZVwiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNvdXJjZU5vZGVUcGw7IGNvbnRleHQ6IHsgbm9kZTogbm9kZSwgc291cmNlOiByaWdodCB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgPC91bD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIngtdHJhbnNmZXItZm9vdGVyXCIgKm5nSWY9XCJyaWdodC5mb290ZXJUcGxcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInJpZ2h0LmZvb3RlclRwbDsgY29udGV4dDogeyAkc291cmNlOiByaWdodCB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48bmctdGVtcGxhdGUgI3NvdXJjZVRpdGxlVHBsIGxldC1zb3VyY2U9XCJzb3VyY2VcIj5cclxuICA8ZGl2IGNsYXNzPVwieC10cmFuc2Zlci10aXRsZVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIngtdHJhbnNmZXItdGl0bGUtbGVmdFwiPlxyXG4gICAgICA8eC1jaGVja2JveFxyXG4gICAgICAgICpuZ0lmPVwic291cmNlLnRpdGxlICYmICFzb3VyY2UuaGlkZGVuQ2hlY2tBbGxcIlxyXG4gICAgICAgIFtkYXRhXT1cIlt0aXRsZVRwbCA/ICcnIDogc291cmNlLnRpdGxlXVwiXHJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJzb3VyY2UuY2hlY2tlZEFsbFwiXHJcbiAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hlY2tlZEFsbENoYW5nZSgkZXZlbnQsIHNvdXJjZSlcIlxyXG4gICAgICAgIFtpbmRldGVybWluYXRlXT1cInNvdXJjZS5pbmRldGVybWluYXRlXCJcclxuICAgICAgPjwveC1jaGVja2JveD5cclxuICAgICAgPHNwYW4gKm5nSWY9XCJzb3VyY2UudGl0bGUgJiYgc291cmNlLmhpZGRlbkNoZWNrQWxsXCI+e3sgc291cmNlLnRpdGxlIH19PC9zcGFuPlxyXG4gICAgICA8eC1saW5rICpuZ0lmPVwiaW52ZXJzZSAmJiB0eXBlID09PSAnbGlzdCdcIiBjbGFzcz1cIngtdHJhbnNmZXItaW52ZXJzZVwiIHR5cGU9XCJwcmltYXJ5XCIgKGNsaWNrKT1cIm9uSW52ZXJzZShzb3VyY2UpXCI+e3tcclxuICAgICAgICAndHJhbnNmZXIuaW52ZXJzZScgfCB4STE4blxyXG4gICAgICB9fTwveC1saW5rPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8bmctY29udGFpbmVyICp4T3V0bGV0PVwidGl0bGVUcGw7IGNvbnRleHQ6IHsgJHRpdGxlOiBzb3VyY2UudGl0bGUsICRjaGVja2VkQ291bnQ6IHNvdXJjZS5jaGVja2VkQ291bnQsICRjb3VudDogc291cmNlLmNvdW50IH1cIlxyXG4gICAgICA+PHNwYW4gY2xhc3M9XCJ4LXRyYW5zZmVyLXRvdGFsXCI+e3sgc291cmNlLmNoZWNrZWRDb3VudCB9fSAvIHt7IHNvdXJjZS5jb3VudCB9fTwvc3Bhbj48L25nLWNvbnRhaW5lclxyXG4gICAgPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJ4LXRyYW5zZmVyLXNlYXJjaFwiICpuZ0lmPVwic2VhcmNoICYmIHR5cGUgIT09ICd0YWJsZSdcIj5cclxuICAgIDx4LWlucHV0IGljb249XCJmdG8tc2VhcmNoXCIgWyhuZ01vZGVsKV09XCJzb3VyY2Uuc2VhcmNoSW5wdXRcIiAobmdNb2RlbENoYW5nZSk9XCJvblNlYXJjaElucHV0Q2hhbmdlKHNvdXJjZSlcIiBjbGVhcmFibGU+PC94LWlucHV0PlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNzb3VyY2VOb2RlVHBsIGxldC1ub2RlPVwibm9kZVwiIGxldC1zb3VyY2U9XCJzb3VyY2VcIj5cclxuICA8eC1jaGVja2JveFxyXG4gICAgW2RhdGFdPVwiW3sgaWQ6IG5vZGUuaWQsIGxhYmVsOiBub2RlVHBsID8gbm9kZVRwbCA6IGxhYmVsVHBsLCBub2RlOiBub2RlIH1dXCJcclxuICAgIFtkaXNhYmxlZF09XCJub2RlLmRpc2FibGVkXCJcclxuICAgIFsobmdNb2RlbCldPVwibm9kZS5jaGVja2VkXCJcclxuICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoZWNrZWRDaGFuZ2UoJGV2ZW50LCBzb3VyY2UpXCJcclxuICA+PC94LWNoZWNrYm94PlxyXG4gIDxuZy10ZW1wbGF0ZSAjbGFiZWxUcGw+XHJcbiAgICA8c3BhbiB4LWtleXdvcmQgW3RleHRdPVwic291cmNlLnNlYXJjaElucHV0IVwiPnt7IG5vZGUubGFiZWwgfX08L3NwYW4+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19