primeng 18.0.0 → 18.0.2-patch.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (361) hide show
  1. package/accordion/accordion.d.ts +7 -7
  2. package/autocomplete/autocomplete.d.ts +21 -8
  3. package/badge/badge.d.ts +1 -3
  4. package/basecomponent/basecomponent.d.ts +2 -5
  5. package/blockui/blockui.d.ts +10 -5
  6. package/breadcrumb/breadcrumb.d.ts +9 -6
  7. package/button/button.d.ts +10 -4
  8. package/calendar/calendar.d.ts +29 -15
  9. package/card/card.d.ts +12 -5
  10. package/carousel/carousel.d.ts +10 -4
  11. package/cascadeselect/cascadeselect.d.ts +18 -8
  12. package/checkbox/checkbox.d.ts +8 -4
  13. package/chip/chip.d.ts +9 -7
  14. package/chips/chips.d.ts +237 -0
  15. package/chips/chips.interface.d.ts +66 -0
  16. package/chips/index.d.ts +5 -0
  17. package/chips/public_api.d.ts +2 -0
  18. package/chips/style/chipsstyle.d.ts +69 -0
  19. package/confirmdialog/confirmdialog.d.ts +14 -5
  20. package/confirmpopup/confirmpopup.d.ts +11 -5
  21. package/contextmenu/contextmenu.d.ts +10 -6
  22. package/datepicker/datepicker.d.ts +113 -33
  23. package/dialog/dialog.d.ts +15 -4
  24. package/divider/divider.d.ts +1 -1
  25. package/dock/dock.d.ts +7 -4
  26. package/drawer/drawer.d.ts +18 -10
  27. package/dropdown/dropdown.d.ts +4 -3
  28. package/dynamicdialog/dynamicdialog.d.ts +1 -0
  29. package/editor/editor.d.ts +7 -3
  30. package/esm2022/accordion/accordion.mjs +58 -43
  31. package/esm2022/autocomplete/autocomplete.mjs +153 -92
  32. package/esm2022/badge/badge.mjs +39 -32
  33. package/esm2022/basecomponent/basecomponent.mjs +3 -26
  34. package/esm2022/blockui/blockui.mjs +38 -18
  35. package/esm2022/breadcrumb/breadcrumb.mjs +50 -32
  36. package/esm2022/button/button.mjs +55 -28
  37. package/esm2022/calendar/calendar.mjs +207 -143
  38. package/esm2022/card/card.mjs +96 -46
  39. package/esm2022/carousel/carousel.mjs +74 -42
  40. package/esm2022/cascadeselect/cascadeselect.mjs +100 -62
  41. package/esm2022/checkbox/checkbox.mjs +32 -14
  42. package/esm2022/chip/chip.mjs +117 -96
  43. package/esm2022/chips/chips.interface.mjs +2 -0
  44. package/esm2022/chips/chips.mjs +827 -0
  45. package/esm2022/chips/primeng-chips.mjs +5 -0
  46. package/esm2022/chips/public_api.mjs +3 -0
  47. package/esm2022/chips/style/chipsstyle.mjs +175 -0
  48. package/esm2022/confirmdialog/confirmdialog.mjs +96 -57
  49. package/esm2022/confirmpopup/confirmpopup.mjs +57 -29
  50. package/esm2022/contextmenu/contextmenu.mjs +51 -20
  51. package/esm2022/datepicker/datepicker.mjs +198 -156
  52. package/esm2022/dialog/dialog.mjs +98 -52
  53. package/esm2022/divider/divider.mjs +2 -4
  54. package/esm2022/dock/dock.mjs +31 -13
  55. package/esm2022/drawer/drawer.mjs +112 -70
  56. package/esm2022/dropdown/dropdown.mjs +13 -5
  57. package/esm2022/dynamicdialog/dynamicdialog-config.mjs +13 -13
  58. package/esm2022/dynamicdialog/dynamicdialog.mjs +9 -5
  59. package/esm2022/editor/editor.mjs +27 -11
  60. package/esm2022/fieldset/fieldset.mjs +61 -33
  61. package/esm2022/fileupload/fileupload.mjs +139 -89
  62. package/esm2022/galleria/galleria.mjs +18 -9
  63. package/esm2022/image/image.mjs +113 -66
  64. package/esm2022/imagecompare/imagecompare.mjs +31 -11
  65. package/esm2022/inplace/inplace.mjs +49 -24
  66. package/esm2022/inputmask/inputmask.mjs +30 -14
  67. package/esm2022/inputmask/style/inputmaskstyle.mjs +2 -2
  68. package/esm2022/inputnumber/inputnumber.mjs +55 -47
  69. package/esm2022/inputotp/inputotp.mjs +30 -11
  70. package/esm2022/listbox/listbox.mjs +137 -78
  71. package/esm2022/megamenu/megamenu.mjs +105 -59
  72. package/esm2022/menu/menu.mjs +26 -26
  73. package/esm2022/menubar/menubar.mjs +70 -35
  74. package/esm2022/message/message.mjs +50 -26
  75. package/esm2022/messages/messages.mjs +13 -4
  76. package/esm2022/metergroup/metergroup.mjs +63 -31
  77. package/esm2022/multiselect/multiselect.mjs +247 -156
  78. package/esm2022/orderlist/orderlist.mjs +125 -70
  79. package/esm2022/organizationchart/organizationchart.mjs +30 -14
  80. package/esm2022/overlay/overlay.mjs +27 -7
  81. package/esm2022/overlaypanel/overlaypanel.mjs +33 -10
  82. package/esm2022/paginator/paginator.mjs +92 -60
  83. package/esm2022/panel/panel.mjs +160 -100
  84. package/esm2022/panelmenu/panelmenu.mjs +55 -32
  85. package/esm2022/password/password.mjs +88 -49
  86. package/esm2022/picklist/picklist.mjs +363 -259
  87. package/esm2022/popover/popover.mjs +29 -12
  88. package/esm2022/progressbar/progressbar.mjs +27 -9
  89. package/esm2022/rating/rating.mjs +46 -22
  90. package/esm2022/scroller/scroller.mjs +47 -37
  91. package/esm2022/scrollpanel/scrollpanel.mjs +28 -9
  92. package/esm2022/scrolltop/scrolltop.mjs +17 -10
  93. package/esm2022/select/select.mjs +198 -119
  94. package/esm2022/selectbutton/selectbutton.mjs +26 -11
  95. package/esm2022/sidebar/sidebar.mjs +82 -60
  96. package/esm2022/speeddial/speeddial.mjs +54 -29
  97. package/esm2022/splitbutton/splitbutton.mjs +41 -18
  98. package/esm2022/splitter/splitter.mjs +5 -5
  99. package/esm2022/stepper/stepper.mjs +27 -13
  100. package/esm2022/table/table.mjs +107 -96
  101. package/esm2022/tabmenu/tabmenu.mjs +54 -27
  102. package/esm2022/tabs/tablist.mjs +28 -20
  103. package/esm2022/tabview/tabview.mjs +106 -54
  104. package/esm2022/tag/tag.mjs +68 -44
  105. package/esm2022/tieredmenu/tieredmenu.mjs +44 -21
  106. package/esm2022/timeline/timeline.mjs +41 -17
  107. package/esm2022/toast/toast.mjs +31 -9
  108. package/esm2022/togglebutton/togglebutton.mjs +45 -30
  109. package/esm2022/toggleswitch/toggleswitch.mjs +28 -9
  110. package/esm2022/toolbar/toolbar.mjs +47 -21
  111. package/esm2022/tooltip/tooltip.mjs +35 -70
  112. package/esm2022/tree/tree.mjs +114 -97
  113. package/esm2022/treeselect/treeselect.mjs +156 -89
  114. package/esm2022/treetable/treetable.mjs +31 -12
  115. package/esm2022/usestyle/usestyle.mjs +2 -2
  116. package/fesm2022/primeng-accordion.mjs +59 -44
  117. package/fesm2022/primeng-accordion.mjs.map +1 -1
  118. package/fesm2022/primeng-animateonscroll.mjs +1 -1
  119. package/fesm2022/primeng-api.mjs +1 -1
  120. package/fesm2022/primeng-autocomplete.mjs +152 -91
  121. package/fesm2022/primeng-autocomplete.mjs.map +1 -1
  122. package/fesm2022/primeng-avatar.mjs +1 -1
  123. package/fesm2022/primeng-avatargroup.mjs +1 -1
  124. package/fesm2022/primeng-badge.mjs +40 -33
  125. package/fesm2022/primeng-badge.mjs.map +1 -1
  126. package/fesm2022/primeng-basecomponent.mjs +2 -25
  127. package/fesm2022/primeng-basecomponent.mjs.map +1 -1
  128. package/fesm2022/primeng-blockui.mjs +37 -17
  129. package/fesm2022/primeng-blockui.mjs.map +1 -1
  130. package/fesm2022/primeng-breadcrumb.mjs +49 -31
  131. package/fesm2022/primeng-breadcrumb.mjs.map +1 -1
  132. package/fesm2022/primeng-button.mjs +54 -27
  133. package/fesm2022/primeng-button.mjs.map +1 -1
  134. package/fesm2022/primeng-buttongroup.mjs +1 -1
  135. package/fesm2022/primeng-calendar.mjs +207 -143
  136. package/fesm2022/primeng-calendar.mjs.map +1 -1
  137. package/fesm2022/primeng-card.mjs +95 -45
  138. package/fesm2022/primeng-card.mjs.map +1 -1
  139. package/fesm2022/primeng-carousel.mjs +73 -41
  140. package/fesm2022/primeng-carousel.mjs.map +1 -1
  141. package/fesm2022/primeng-cascadeselect.mjs +99 -61
  142. package/fesm2022/primeng-cascadeselect.mjs.map +1 -1
  143. package/fesm2022/primeng-chart.mjs +1 -1
  144. package/fesm2022/primeng-checkbox.mjs +31 -13
  145. package/fesm2022/primeng-checkbox.mjs.map +1 -1
  146. package/fesm2022/primeng-chip.mjs +116 -95
  147. package/fesm2022/primeng-chip.mjs.map +1 -1
  148. package/fesm2022/primeng-chips.mjs +1006 -0
  149. package/fesm2022/primeng-chips.mjs.map +1 -0
  150. package/fesm2022/primeng-colorpicker.mjs +1 -1
  151. package/fesm2022/primeng-confirmdialog.mjs +95 -56
  152. package/fesm2022/primeng-confirmdialog.mjs.map +1 -1
  153. package/fesm2022/primeng-confirmpopup.mjs +57 -29
  154. package/fesm2022/primeng-confirmpopup.mjs.map +1 -1
  155. package/fesm2022/primeng-contextmenu.mjs +50 -19
  156. package/fesm2022/primeng-contextmenu.mjs.map +1 -1
  157. package/fesm2022/primeng-dataview.mjs +2 -2
  158. package/fesm2022/primeng-datepicker.mjs +198 -156
  159. package/fesm2022/primeng-datepicker.mjs.map +1 -1
  160. package/fesm2022/primeng-defer.mjs +1 -1
  161. package/fesm2022/primeng-dialog.mjs +97 -51
  162. package/fesm2022/primeng-dialog.mjs.map +1 -1
  163. package/fesm2022/primeng-divider.mjs +2 -4
  164. package/fesm2022/primeng-divider.mjs.map +1 -1
  165. package/fesm2022/primeng-dock.mjs +30 -12
  166. package/fesm2022/primeng-dock.mjs.map +1 -1
  167. package/fesm2022/primeng-dragdrop.mjs +1 -1
  168. package/fesm2022/primeng-drawer.mjs +111 -69
  169. package/fesm2022/primeng-drawer.mjs.map +1 -1
  170. package/fesm2022/primeng-dropdown.mjs +12 -4
  171. package/fesm2022/primeng-dropdown.mjs.map +1 -1
  172. package/fesm2022/primeng-dynamicdialog.mjs +21 -17
  173. package/fesm2022/primeng-dynamicdialog.mjs.map +1 -1
  174. package/fesm2022/primeng-editor.mjs +26 -10
  175. package/fesm2022/primeng-editor.mjs.map +1 -1
  176. package/fesm2022/primeng-fieldset.mjs +61 -33
  177. package/fesm2022/primeng-fieldset.mjs.map +1 -1
  178. package/fesm2022/primeng-fileupload.mjs +138 -88
  179. package/fesm2022/primeng-fileupload.mjs.map +1 -1
  180. package/fesm2022/primeng-floatlabel.mjs +1 -1
  181. package/fesm2022/primeng-fluid.mjs +1 -1
  182. package/fesm2022/primeng-galleria.mjs +17 -8
  183. package/fesm2022/primeng-galleria.mjs.map +1 -1
  184. package/fesm2022/primeng-iconfield.mjs +1 -1
  185. package/fesm2022/primeng-icons-baseicon.mjs +1 -1
  186. package/fesm2022/primeng-iftalabel.mjs +1 -1
  187. package/fesm2022/primeng-image.mjs +112 -65
  188. package/fesm2022/primeng-image.mjs.map +1 -1
  189. package/fesm2022/primeng-imagecompare.mjs +30 -10
  190. package/fesm2022/primeng-imagecompare.mjs.map +1 -1
  191. package/fesm2022/primeng-inplace.mjs +48 -23
  192. package/fesm2022/primeng-inplace.mjs.map +1 -1
  193. package/fesm2022/primeng-inputgroupaddon.mjs +1 -1
  194. package/fesm2022/primeng-inputicon.mjs +1 -1
  195. package/fesm2022/primeng-inputmask.mjs +30 -14
  196. package/fesm2022/primeng-inputmask.mjs.map +1 -1
  197. package/fesm2022/primeng-inputnumber.mjs +54 -46
  198. package/fesm2022/primeng-inputnumber.mjs.map +1 -1
  199. package/fesm2022/primeng-inputotp.mjs +29 -10
  200. package/fesm2022/primeng-inputotp.mjs.map +1 -1
  201. package/fesm2022/primeng-inputswitch.mjs +1 -1
  202. package/fesm2022/primeng-inputtext.mjs +1 -1
  203. package/fesm2022/primeng-inputtextarea.mjs +1 -1
  204. package/fesm2022/primeng-keyfilter.mjs +1 -1
  205. package/fesm2022/primeng-knob.mjs +1 -1
  206. package/fesm2022/primeng-listbox.mjs +136 -77
  207. package/fesm2022/primeng-listbox.mjs.map +1 -1
  208. package/fesm2022/primeng-megamenu.mjs +104 -58
  209. package/fesm2022/primeng-megamenu.mjs.map +1 -1
  210. package/fesm2022/primeng-menu.mjs +26 -26
  211. package/fesm2022/primeng-menu.mjs.map +1 -1
  212. package/fesm2022/primeng-menubar.mjs +69 -34
  213. package/fesm2022/primeng-menubar.mjs.map +1 -1
  214. package/fesm2022/primeng-message.mjs +49 -25
  215. package/fesm2022/primeng-message.mjs.map +1 -1
  216. package/fesm2022/primeng-messages.mjs +12 -3
  217. package/fesm2022/primeng-messages.mjs.map +1 -1
  218. package/fesm2022/primeng-metergroup.mjs +62 -30
  219. package/fesm2022/primeng-metergroup.mjs.map +1 -1
  220. package/fesm2022/primeng-multiselect.mjs +246 -155
  221. package/fesm2022/primeng-multiselect.mjs.map +1 -1
  222. package/fesm2022/primeng-orderlist.mjs +124 -69
  223. package/fesm2022/primeng-orderlist.mjs.map +1 -1
  224. package/fesm2022/primeng-organizationchart.mjs +30 -14
  225. package/fesm2022/primeng-organizationchart.mjs.map +1 -1
  226. package/fesm2022/primeng-overlay.mjs +26 -6
  227. package/fesm2022/primeng-overlay.mjs.map +1 -1
  228. package/fesm2022/primeng-overlaybadge.mjs +1 -1
  229. package/fesm2022/primeng-overlaypanel.mjs +33 -10
  230. package/fesm2022/primeng-overlaypanel.mjs.map +1 -1
  231. package/fesm2022/primeng-paginator.mjs +91 -59
  232. package/fesm2022/primeng-paginator.mjs.map +1 -1
  233. package/fesm2022/primeng-panel.mjs +160 -100
  234. package/fesm2022/primeng-panel.mjs.map +1 -1
  235. package/fesm2022/primeng-panelmenu.mjs +55 -32
  236. package/fesm2022/primeng-panelmenu.mjs.map +1 -1
  237. package/fesm2022/primeng-password.mjs +87 -48
  238. package/fesm2022/primeng-password.mjs.map +1 -1
  239. package/fesm2022/primeng-picklist.mjs +362 -258
  240. package/fesm2022/primeng-picklist.mjs.map +1 -1
  241. package/fesm2022/primeng-popover.mjs +29 -12
  242. package/fesm2022/primeng-popover.mjs.map +1 -1
  243. package/fesm2022/primeng-progressbar.mjs +26 -8
  244. package/fesm2022/primeng-progressbar.mjs.map +1 -1
  245. package/fesm2022/primeng-progressspinner.mjs +1 -1
  246. package/fesm2022/primeng-radiobutton.mjs +1 -1
  247. package/fesm2022/primeng-rating.mjs +45 -21
  248. package/fesm2022/primeng-rating.mjs.map +1 -1
  249. package/fesm2022/primeng-scroller.mjs +46 -36
  250. package/fesm2022/primeng-scroller.mjs.map +1 -1
  251. package/fesm2022/primeng-scrollpanel.mjs +27 -8
  252. package/fesm2022/primeng-scrollpanel.mjs.map +1 -1
  253. package/fesm2022/primeng-scrolltop.mjs +17 -10
  254. package/fesm2022/primeng-scrolltop.mjs.map +1 -1
  255. package/fesm2022/primeng-select.mjs +197 -118
  256. package/fesm2022/primeng-select.mjs.map +1 -1
  257. package/fesm2022/primeng-selectbutton.mjs +25 -10
  258. package/fesm2022/primeng-selectbutton.mjs.map +1 -1
  259. package/fesm2022/primeng-sidebar.mjs +81 -59
  260. package/fesm2022/primeng-sidebar.mjs.map +1 -1
  261. package/fesm2022/primeng-skeleton.mjs +1 -1
  262. package/fesm2022/primeng-slider.mjs +1 -1
  263. package/fesm2022/primeng-speeddial.mjs +53 -28
  264. package/fesm2022/primeng-speeddial.mjs.map +1 -1
  265. package/fesm2022/primeng-splitbutton.mjs +40 -17
  266. package/fesm2022/primeng-splitbutton.mjs.map +1 -1
  267. package/fesm2022/primeng-splitter.mjs +6 -6
  268. package/fesm2022/primeng-splitter.mjs.map +1 -1
  269. package/fesm2022/primeng-stepper.mjs +27 -13
  270. package/fesm2022/primeng-stepper.mjs.map +1 -1
  271. package/fesm2022/primeng-steps.mjs +1 -1
  272. package/fesm2022/primeng-styleclass.mjs +1 -1
  273. package/fesm2022/primeng-table.mjs +107 -96
  274. package/fesm2022/primeng-table.mjs.map +1 -1
  275. package/fesm2022/primeng-tabmenu.mjs +53 -26
  276. package/fesm2022/primeng-tabmenu.mjs.map +1 -1
  277. package/fesm2022/primeng-tabs.mjs +27 -19
  278. package/fesm2022/primeng-tabs.mjs.map +1 -1
  279. package/fesm2022/primeng-tabview.mjs +106 -54
  280. package/fesm2022/primeng-tabview.mjs.map +1 -1
  281. package/fesm2022/primeng-tag.mjs +67 -43
  282. package/fesm2022/primeng-tag.mjs.map +1 -1
  283. package/fesm2022/primeng-terminal.mjs +1 -1
  284. package/fesm2022/primeng-textarea.mjs +1 -1
  285. package/fesm2022/primeng-tieredmenu.mjs +43 -20
  286. package/fesm2022/primeng-tieredmenu.mjs.map +1 -1
  287. package/fesm2022/primeng-timeline.mjs +40 -16
  288. package/fesm2022/primeng-timeline.mjs.map +1 -1
  289. package/fesm2022/primeng-toast.mjs +31 -9
  290. package/fesm2022/primeng-toast.mjs.map +1 -1
  291. package/fesm2022/primeng-togglebutton.mjs +44 -29
  292. package/fesm2022/primeng-togglebutton.mjs.map +1 -1
  293. package/fesm2022/primeng-toggleswitch.mjs +27 -8
  294. package/fesm2022/primeng-toggleswitch.mjs.map +1 -1
  295. package/fesm2022/primeng-toolbar.mjs +46 -20
  296. package/fesm2022/primeng-toolbar.mjs.map +1 -1
  297. package/fesm2022/primeng-tooltip.mjs +35 -70
  298. package/fesm2022/primeng-tooltip.mjs.map +1 -1
  299. package/fesm2022/primeng-tree.mjs +114 -97
  300. package/fesm2022/primeng-tree.mjs.map +1 -1
  301. package/fesm2022/primeng-treeselect.mjs +155 -88
  302. package/fesm2022/primeng-treeselect.mjs.map +1 -1
  303. package/fesm2022/primeng-treetable.mjs +30 -11
  304. package/fesm2022/primeng-treetable.mjs.map +1 -1
  305. package/fesm2022/primeng-usestyle.mjs +1 -1
  306. package/fesm2022/primeng-usestyle.mjs.map +1 -1
  307. package/fieldset/fieldset.d.ts +12 -6
  308. package/fileupload/fileupload.d.ts +19 -8
  309. package/galleria/galleria.d.ts +3 -2
  310. package/image/image.d.ts +18 -7
  311. package/imagecompare/imagecompare.d.ts +7 -2
  312. package/inplace/inplace.d.ts +12 -6
  313. package/inputmask/inputmask.d.ts +8 -4
  314. package/inputnumber/inputnumber.d.ts +11 -6
  315. package/inputotp/inputotp.d.ts +7 -2
  316. package/listbox/listbox.d.ts +17 -4
  317. package/megamenu/megamenu.d.ts +16 -7
  318. package/menu/menu.d.ts +6 -6
  319. package/menubar/menubar.d.ts +13 -6
  320. package/message/message.d.ts +10 -4
  321. package/messages/messages.d.ts +4 -3
  322. package/metergroup/metergroup.d.ts +11 -3
  323. package/multiselect/multiselect.d.ts +36 -17
  324. package/orderlist/orderlist.d.ts +23 -11
  325. package/organizationchart/organizationchart.d.ts +6 -4
  326. package/overlay/overlay.d.ts +6 -3
  327. package/overlaypanel/overlaypanel.d.ts +6 -3
  328. package/package.json +171 -165
  329. package/paginator/paginator.d.ts +15 -8
  330. package/panel/panel.d.ts +14 -5
  331. package/panelmenu/panelmenu.d.ts +8 -4
  332. package/password/password.d.ts +15 -7
  333. package/picklist/picklist.d.ts +23 -3
  334. package/popover/popover.d.ts +8 -5
  335. package/progressbar/progressbar.d.ts +7 -3
  336. package/rating/rating.d.ts +11 -5
  337. package/scroller/scroller.d.ts +9 -4
  338. package/scrollpanel/scrollpanel.d.ts +7 -3
  339. package/scrolltop/scrolltop.d.ts +7 -4
  340. package/select/select.d.ts +31 -13
  341. package/selectbutton/selectbutton.d.ts +7 -3
  342. package/sidebar/sidebar.d.ts +9 -2
  343. package/speeddial/speeddial.d.ts +9 -4
  344. package/splitbutton/splitbutton.d.ts +9 -5
  345. package/splitter/splitter.d.ts +4 -4
  346. package/stepper/stepper.d.ts +8 -3
  347. package/table/table.d.ts +2 -2
  348. package/tabmenu/tabmenu.d.ts +12 -7
  349. package/tabs/tablist.d.ts +6 -2
  350. package/tabview/tabview.d.ts +16 -7
  351. package/tag/tag.d.ts +8 -9
  352. package/tieredmenu/tieredmenu.d.ts +10 -6
  353. package/timeline/timeline.d.ts +7 -2
  354. package/toast/toast.d.ts +7 -3
  355. package/togglebutton/togglebutton.d.ts +8 -3
  356. package/toggleswitch/toggleswitch.d.ts +6 -2
  357. package/toolbar/toolbar.d.ts +9 -4
  358. package/tooltip/tooltip.d.ts +2 -1
  359. package/tree/tree.d.ts +23 -10
  360. package/treeselect/treeselect.d.ts +26 -12
  361. package/treetable/treetable.d.ts +7 -5
@@ -0,0 +1,827 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { ChangeDetectionStrategy, Component, ContentChildren, EventEmitter, Input, NgModule, Output, ViewChild, ViewEncapsulation, booleanAttribute, forwardRef, inject, numberAttribute } from '@angular/core';
3
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
4
+ import { PrimeTemplate, SharedModule } from 'primeng/api';
5
+ import { AutoFocusModule } from 'primeng/autofocus';
6
+ import { TimesIcon } from 'primeng/icons/times';
7
+ import { TimesCircleIcon } from 'primeng/icons/timescircle';
8
+ import { InputTextModule } from 'primeng/inputtext';
9
+ import { UniqueComponentId } from 'primeng/utils';
10
+ import { ChipsStyle } from './style/chipsstyle';
11
+ import { BaseComponent } from 'primeng/basecomponent';
12
+ import { ChipModule } from 'primeng/chip';
13
+ import * as i0 from "@angular/core";
14
+ import * as i1 from "primeng/config";
15
+ import * as i2 from "@angular/common";
16
+ import * as i3 from "primeng/autofocus";
17
+ import * as i4 from "primeng/chip";
18
+ const _c0 = ["inputtext"];
19
+ const _c1 = ["container"];
20
+ const _c2 = (a0, a1, a2, a3) => ({ "p-inputchips p-component p-input-wrapper": true, "p-disabled": a0, "p-focus": a1, "p-inputwrapper-filled": a2, "p-inputwrapper-focus": a3 });
21
+ const _c3 = a0 => ({ "p-chips-clearable": a0 });
22
+ const _c4 = a0 => ({ "p-inputchips-chip-item": true, "p-focus": a0 });
23
+ const _c5 = a0 => ({ $implicit: a0 });
24
+ const _c6 = a0 => ({ removeItem: a0 });
25
+ function Chips_li_3_ng_container_2_Template(rf, ctx) { if (rf & 1) {
26
+ i0.ɵɵelementContainer(0);
27
+ } }
28
+ function Chips_li_3_p_chip_3_ng_container_1_Template(rf, ctx) { if (rf & 1) {
29
+ i0.ɵɵelementContainer(0);
30
+ } }
31
+ function Chips_li_3_p_chip_3_ng_template_2_ng_container_0_TimesCircleIcon_1_Template(rf, ctx) { if (rf & 1) {
32
+ const _r7 = i0.ɵɵgetCurrentView();
33
+ i0.ɵɵelementStart(0, "TimesCircleIcon", 16);
34
+ i0.ɵɵlistener("click", function Chips_li_3_p_chip_3_ng_template_2_ng_container_0_TimesCircleIcon_1_Template_TimesCircleIcon_click_0_listener($event) { i0.ɵɵrestoreView(_r7); const i_r6 = i0.ɵɵnextContext(4).index; const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.removeItem($event, i_r6)); });
35
+ i0.ɵɵelementEnd();
36
+ } if (rf & 2) {
37
+ i0.ɵɵproperty("styleClass", "p-chips-token-icon");
38
+ i0.ɵɵattribute("data-pc-section", "removeTokenIcon")("aria-hidden", true);
39
+ } }
40
+ function Chips_li_3_p_chip_3_ng_template_2_ng_container_0_span_2_1_ng_template_0_Template(rf, ctx) { }
41
+ function Chips_li_3_p_chip_3_ng_template_2_ng_container_0_span_2_1_Template(rf, ctx) { if (rf & 1) {
42
+ i0.ɵɵtemplate(0, Chips_li_3_p_chip_3_ng_template_2_ng_container_0_span_2_1_ng_template_0_Template, 0, 0, "ng-template");
43
+ } }
44
+ function Chips_li_3_p_chip_3_ng_template_2_ng_container_0_span_2_Template(rf, ctx) { if (rf & 1) {
45
+ const _r8 = i0.ɵɵgetCurrentView();
46
+ i0.ɵɵelementStart(0, "span", 17);
47
+ i0.ɵɵlistener("click", function Chips_li_3_p_chip_3_ng_template_2_ng_container_0_span_2_Template_span_click_0_listener($event) { i0.ɵɵrestoreView(_r8); const i_r6 = i0.ɵɵnextContext(4).index; const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.removeItem($event, i_r6)); });
48
+ i0.ɵɵtemplate(1, Chips_li_3_p_chip_3_ng_template_2_ng_container_0_span_2_1_Template, 1, 0, null, 11);
49
+ i0.ɵɵelementEnd();
50
+ } if (rf & 2) {
51
+ const ctx_r3 = i0.ɵɵnextContext(5);
52
+ i0.ɵɵattribute("data-pc-section", "removeTokenIcon")("aria-hidden", true);
53
+ i0.ɵɵadvance();
54
+ i0.ɵɵproperty("ngTemplateOutlet", ctx_r3.removeTokenIconTemplate)("ngTemplateOutletContext", i0.ɵɵpureFunction1(4, _c6, ctx_r3.removeItem.bind(ctx_r3)));
55
+ } }
56
+ function Chips_li_3_p_chip_3_ng_template_2_ng_container_0_Template(rf, ctx) { if (rf & 1) {
57
+ i0.ɵɵelementContainerStart(0);
58
+ i0.ɵɵtemplate(1, Chips_li_3_p_chip_3_ng_template_2_ng_container_0_TimesCircleIcon_1_Template, 1, 3, "TimesCircleIcon", 14)(2, Chips_li_3_p_chip_3_ng_template_2_ng_container_0_span_2_Template, 2, 6, "span", 15);
59
+ i0.ɵɵelementContainerEnd();
60
+ } if (rf & 2) {
61
+ const ctx_r3 = i0.ɵɵnextContext(4);
62
+ i0.ɵɵadvance();
63
+ i0.ɵɵproperty("ngIf", !ctx_r3.removeTokenIconTemplate);
64
+ i0.ɵɵadvance();
65
+ i0.ɵɵproperty("ngIf", ctx_r3.removeTokenIconTemplate);
66
+ } }
67
+ function Chips_li_3_p_chip_3_ng_template_2_Template(rf, ctx) { if (rf & 1) {
68
+ i0.ɵɵtemplate(0, Chips_li_3_p_chip_3_ng_template_2_ng_container_0_Template, 3, 2, "ng-container", 9);
69
+ } if (rf & 2) {
70
+ const ctx_r3 = i0.ɵɵnextContext(3);
71
+ i0.ɵɵproperty("ngIf", !ctx_r3.disabled);
72
+ } }
73
+ function Chips_li_3_p_chip_3_Template(rf, ctx) { if (rf & 1) {
74
+ const _r5 = i0.ɵɵgetCurrentView();
75
+ i0.ɵɵelementStart(0, "p-chip", 13);
76
+ i0.ɵɵlistener("onRemove", function Chips_li_3_p_chip_3_Template_p_chip_onRemove_0_listener($event) { i0.ɵɵrestoreView(_r5); const i_r6 = i0.ɵɵnextContext().index; const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.removeItem($event, i_r6)); });
77
+ i0.ɵɵtemplate(1, Chips_li_3_p_chip_3_ng_container_1_Template, 1, 0, "ng-container", 11)(2, Chips_li_3_p_chip_3_ng_template_2_Template, 1, 1, "ng-template", null, 3, i0.ɵɵtemplateRefExtractor);
78
+ i0.ɵɵelementEnd();
79
+ } if (rf & 2) {
80
+ const item_r3 = i0.ɵɵnextContext().$implicit;
81
+ const ctx_r3 = i0.ɵɵnextContext();
82
+ i0.ɵɵproperty("label", ctx_r3.field ? ctx_r3.resolveFieldData(item_r3, ctx_r3.field) : item_r3)("removeIcon", ctx_r3.chipIcon);
83
+ i0.ɵɵadvance();
84
+ i0.ɵɵproperty("ngTemplateOutlet", ctx_r3.itemTemplate)("ngTemplateOutletContext", i0.ɵɵpureFunction1(4, _c5, item_r3));
85
+ } }
86
+ function Chips_li_3_Template(rf, ctx) { if (rf & 1) {
87
+ const _r2 = i0.ɵɵgetCurrentView();
88
+ i0.ɵɵelementStart(0, "li", 10, 2);
89
+ i0.ɵɵlistener("click", function Chips_li_3_Template_li_click_0_listener($event) { const item_r3 = i0.ɵɵrestoreView(_r2).$implicit; const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.onItemClick($event, item_r3)); })("contextmenu", function Chips_li_3_Template_li_contextmenu_0_listener($event) { const item_r3 = i0.ɵɵrestoreView(_r2).$implicit; const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.onItemContextMenu($event, item_r3)); });
90
+ i0.ɵɵtemplate(2, Chips_li_3_ng_container_2_Template, 1, 0, "ng-container", 11)(3, Chips_li_3_p_chip_3_Template, 4, 6, "p-chip", 12);
91
+ i0.ɵɵelementEnd();
92
+ } if (rf & 2) {
93
+ const item_r3 = ctx.$implicit;
94
+ const i_r6 = ctx.index;
95
+ const ctx_r3 = i0.ɵɵnextContext();
96
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(11, _c4, ctx_r3.focusedIndex === i_r6));
97
+ i0.ɵɵattribute("id", ctx_r3.id + "_chips_item_" + i_r6)("ariaLabel", item_r3)("aria-selected", true)("aria-setsize", ctx_r3.value.length)("aria-posinset", i_r6 + 1)("data-p-focused", ctx_r3.focusedIndex === i_r6)("data-pc-section", "token");
98
+ i0.ɵɵadvance(2);
99
+ i0.ɵɵproperty("ngTemplateOutlet", ctx_r3.itemTemplate)("ngTemplateOutletContext", i0.ɵɵpureFunction1(13, _c5, item_r3));
100
+ i0.ɵɵadvance();
101
+ i0.ɵɵproperty("ngIf", !ctx_r3.itemTemplate);
102
+ } }
103
+ function Chips_li_7_TimesIcon_1_Template(rf, ctx) { if (rf & 1) {
104
+ const _r9 = i0.ɵɵgetCurrentView();
105
+ i0.ɵɵelementStart(0, "TimesIcon", 16);
106
+ i0.ɵɵlistener("click", function Chips_li_7_TimesIcon_1_Template_TimesIcon_click_0_listener() { i0.ɵɵrestoreView(_r9); const ctx_r3 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r3.clear()); });
107
+ i0.ɵɵelementEnd();
108
+ } if (rf & 2) {
109
+ i0.ɵɵproperty("styleClass", "p-chips-clear-icon");
110
+ } }
111
+ function Chips_li_7_span_2_1_ng_template_0_Template(rf, ctx) { }
112
+ function Chips_li_7_span_2_1_Template(rf, ctx) { if (rf & 1) {
113
+ i0.ɵɵtemplate(0, Chips_li_7_span_2_1_ng_template_0_Template, 0, 0, "ng-template");
114
+ } }
115
+ function Chips_li_7_span_2_Template(rf, ctx) { if (rf & 1) {
116
+ const _r10 = i0.ɵɵgetCurrentView();
117
+ i0.ɵɵelementStart(0, "span", 19);
118
+ i0.ɵɵlistener("click", function Chips_li_7_span_2_Template_span_click_0_listener() { i0.ɵɵrestoreView(_r10); const ctx_r3 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r3.clear()); });
119
+ i0.ɵɵtemplate(1, Chips_li_7_span_2_1_Template, 1, 0, null, 20);
120
+ i0.ɵɵelementEnd();
121
+ } if (rf & 2) {
122
+ const ctx_r3 = i0.ɵɵnextContext(2);
123
+ i0.ɵɵadvance();
124
+ i0.ɵɵproperty("ngTemplateOutlet", ctx_r3.clearIconTemplate);
125
+ } }
126
+ function Chips_li_7_Template(rf, ctx) { if (rf & 1) {
127
+ i0.ɵɵelementStart(0, "li");
128
+ i0.ɵɵtemplate(1, Chips_li_7_TimesIcon_1_Template, 1, 1, "TimesIcon", 14)(2, Chips_li_7_span_2_Template, 2, 1, "span", 18);
129
+ i0.ɵɵelementEnd();
130
+ } if (rf & 2) {
131
+ const ctx_r3 = i0.ɵɵnextContext();
132
+ i0.ɵɵadvance();
133
+ i0.ɵɵproperty("ngIf", !ctx_r3.clearIconTemplate);
134
+ i0.ɵɵadvance();
135
+ i0.ɵɵproperty("ngIf", ctx_r3.clearIconTemplate);
136
+ } }
137
+ export const CHIPS_VALUE_ACCESSOR = {
138
+ provide: NG_VALUE_ACCESSOR,
139
+ useExisting: forwardRef(() => Chips),
140
+ multi: true
141
+ };
142
+ /**
143
+ * Chips groups a collection of contents in tabs.
144
+ * @group Components
145
+ */
146
+ export class Chips extends BaseComponent {
147
+ el;
148
+ cd;
149
+ config;
150
+ /**
151
+ * Inline style of the element.
152
+ * @group Props
153
+ */
154
+ style;
155
+ /**
156
+ * Style class of the element.
157
+ * @group Props
158
+ */
159
+ styleClass;
160
+ /**
161
+ * When present, it specifies that the element should be disabled.
162
+ * @group Props
163
+ */
164
+ disabled;
165
+ /**
166
+ * Name of the property to display on a chip.
167
+ * @group Props
168
+ */
169
+ field;
170
+ /**
171
+ * Advisory information to display on input.
172
+ * @group Props
173
+ */
174
+ placeholder;
175
+ /**
176
+ * Maximum number of entries allowed.
177
+ * @group Props
178
+ */
179
+ max;
180
+ /**
181
+ * Maximum length of a chip.
182
+ * @group Props
183
+ */
184
+ maxLength;
185
+ /**
186
+ * Defines a string that labels the input for accessibility.
187
+ * @group Props
188
+ */
189
+ ariaLabel;
190
+ /**
191
+ * Establishes relationships between the component and label(s) where its value should be one or more element IDs.
192
+ * @group Props
193
+ */
194
+ ariaLabelledBy;
195
+ /**
196
+ * Index of the element in tabbing order.
197
+ * @group Props
198
+ */
199
+ tabindex;
200
+ /**
201
+ * Identifier of the focus input to match a label defined for the component.
202
+ * @group Props
203
+ */
204
+ inputId;
205
+ /**
206
+ * Whether to allow duplicate values or not.
207
+ * @group Props
208
+ */
209
+ allowDuplicate = true;
210
+ /**
211
+ * Defines whether duplication check should be case-sensitive
212
+ * @group Props
213
+ */
214
+ caseSensitiveDuplication = true;
215
+ /**
216
+ * Inline style of the input field.
217
+ * @group Props
218
+ */
219
+ inputStyle;
220
+ /**
221
+ * Style class of the input field.
222
+ * @group Props
223
+ */
224
+ inputStyleClass;
225
+ /**
226
+ * Icon to display in chip remove action..
227
+ * @group Props
228
+ */
229
+ chipIcon;
230
+ /**
231
+ * Whether to add an item on tab key press.
232
+ * @group Props
233
+ */
234
+ addOnTab;
235
+ /**
236
+ * Whether to add an item when the input loses focus.
237
+ * @group Props
238
+ */
239
+ addOnBlur;
240
+ /**
241
+ * Separator char to add an item when pressed in addition to the enter key.
242
+ * @group Props
243
+ */
244
+ separator;
245
+ /**
246
+ * When enabled, a clear icon is displayed to clear the value.
247
+ * @group Props
248
+ */
249
+ showClear = false;
250
+ /**
251
+ * When present, it specifies that the component should automatically get focus on load.
252
+ * @group Props
253
+ */
254
+ autofocus;
255
+ /**
256
+ * Specifies the input variant of the component.
257
+ * @group Props
258
+ */
259
+ variant = 'outlined';
260
+ /**
261
+ * Callback to invoke on chip add.
262
+ * @param {ChipsAddEvent} event - Custom chip add event.
263
+ * @group Emits
264
+ */
265
+ onAdd = new EventEmitter();
266
+ /**
267
+ * Callback to invoke on chip remove.
268
+ * @param {ChipsRemoveEvent} event - Custom chip remove event.
269
+ * @group Emits
270
+ */
271
+ onRemove = new EventEmitter();
272
+ /**
273
+ * Callback to invoke on focus of input field.
274
+ * @param {Event} event - Browser event.
275
+ * @group Emits
276
+ */
277
+ onFocus = new EventEmitter();
278
+ /**
279
+ * Callback to invoke on blur of input field.
280
+ * @param {Event} event - Browser event.
281
+ * @group Emits
282
+ */
283
+ onBlur = new EventEmitter();
284
+ /**
285
+ * Callback to invoke on chip clicked.
286
+ * @param {ChipsClickEvent} event - Custom chip click event.
287
+ * @group Emits
288
+ */
289
+ onChipClick = new EventEmitter();
290
+ /**
291
+ * Callback to invoke on chip contextmenu.
292
+ * @param {ChipsClickEvent} event - Custom chip contextmenu event.
293
+ * @group Emits
294
+ */
295
+ onChipContextMenu = new EventEmitter();
296
+ /**
297
+ * Callback to invoke on clear token clicked.
298
+ * @group Emits
299
+ */
300
+ onClear = new EventEmitter();
301
+ inputViewChild;
302
+ containerViewChild;
303
+ templates;
304
+ itemTemplate;
305
+ removeTokenIconTemplate;
306
+ clearIconTemplate;
307
+ value;
308
+ onModelChange = () => { };
309
+ onModelTouched = () => { };
310
+ valueChanged;
311
+ id = UniqueComponentId();
312
+ focused;
313
+ focusedIndex;
314
+ filled;
315
+ _componentStyle = inject(ChipsStyle);
316
+ get focusedOptionId() {
317
+ return this.focusedIndex !== null ? `${this.id}_chips_item_${this.focusedIndex}` : null;
318
+ }
319
+ get isMaxedOut() {
320
+ return this.max && this.value && this.max === this.value.length;
321
+ }
322
+ constructor(el, cd, config) {
323
+ super();
324
+ this.el = el;
325
+ this.cd = cd;
326
+ this.config = config;
327
+ console.log('Deprecated since v18. Use AutoComplete component instead with its typeahead property.');
328
+ }
329
+ ngAfterContentInit() {
330
+ this.templates.forEach((item) => {
331
+ switch (item.getType()) {
332
+ case 'item':
333
+ this.itemTemplate = item.template;
334
+ break;
335
+ case 'removetokenicon':
336
+ this.removeTokenIconTemplate = item.template;
337
+ break;
338
+ case 'clearicon':
339
+ this.clearIconTemplate = item.template;
340
+ break;
341
+ default:
342
+ this.itemTemplate = item.template;
343
+ break;
344
+ }
345
+ });
346
+ this.updateFilledState();
347
+ }
348
+ onWrapperClick() {
349
+ this.inputViewChild?.nativeElement.focus();
350
+ }
351
+ onContainerFocus() {
352
+ this.focused = true;
353
+ }
354
+ onContainerBlur() {
355
+ this.focusedIndex = -1;
356
+ this.focused = false;
357
+ }
358
+ onContainerKeyDown(event) {
359
+ switch (event.code) {
360
+ case 'ArrowLeft':
361
+ this.onArrowLeftKeyOn();
362
+ break;
363
+ case 'ArrowRight':
364
+ this.onArrowRightKeyOn();
365
+ break;
366
+ case 'Backspace':
367
+ this.onBackspaceKeyOn(event);
368
+ break;
369
+ case 'Space':
370
+ if (this.focusedIndex !== null && this.value && this.value.length > 0) {
371
+ this.onItemClick(event, this.value[this.focusedIndex]);
372
+ }
373
+ break;
374
+ default:
375
+ break;
376
+ }
377
+ }
378
+ onArrowLeftKeyOn() {
379
+ if (this.inputViewChild.nativeElement.value.length === 0 && this.value && this.value.length > 0) {
380
+ this.focusedIndex = this.focusedIndex === null ? this.value.length - 1 : this.focusedIndex - 1;
381
+ if (this.focusedIndex < 0)
382
+ this.focusedIndex = 0;
383
+ }
384
+ }
385
+ onArrowRightKeyOn() {
386
+ if (this.inputViewChild.nativeElement.value.length === 0 && this.value && this.value.length > 0) {
387
+ if (this.focusedIndex === this.value.length - 1) {
388
+ this.focusedIndex = null;
389
+ this.inputViewChild?.nativeElement.focus();
390
+ }
391
+ else {
392
+ this.focusedIndex++;
393
+ }
394
+ }
395
+ }
396
+ onBackspaceKeyOn(event) {
397
+ if (this.focusedIndex !== null) {
398
+ this.removeItem(event, this.focusedIndex);
399
+ }
400
+ }
401
+ onInput() {
402
+ this.updateFilledState();
403
+ this.focusedIndex = null;
404
+ }
405
+ onPaste(event) {
406
+ if (!this.disabled) {
407
+ if (this.separator) {
408
+ const pastedData = (event.clipboardData || this.document.defaultView['clipboardData']).getData('Text');
409
+ pastedData.split(this.separator).forEach((val) => {
410
+ this.addItem(event, val, true);
411
+ });
412
+ this.inputViewChild.nativeElement.value = '';
413
+ }
414
+ this.updateFilledState();
415
+ }
416
+ }
417
+ updateFilledState() {
418
+ if (!this.value || this.value.length === 0) {
419
+ this.filled = this.inputViewChild && this.inputViewChild.nativeElement && this.inputViewChild.nativeElement.value != '';
420
+ }
421
+ else {
422
+ this.filled = true;
423
+ }
424
+ }
425
+ onItemClick(event, item) {
426
+ this.onChipClick.emit({
427
+ originalEvent: event,
428
+ value: item
429
+ });
430
+ }
431
+ onItemContextMenu(event, item) {
432
+ this.onChipContextMenu.emit({
433
+ originalEvent: event,
434
+ value: item
435
+ });
436
+ }
437
+ writeValue(value) {
438
+ this.value = value;
439
+ this.updateMaxedOut();
440
+ this.updateFilledState();
441
+ this.cd.markForCheck();
442
+ }
443
+ registerOnChange(fn) {
444
+ this.onModelChange = fn;
445
+ }
446
+ registerOnTouched(fn) {
447
+ this.onModelTouched = fn;
448
+ }
449
+ setDisabledState(val) {
450
+ this.disabled = val;
451
+ this.cd.markForCheck();
452
+ }
453
+ resolveFieldData(data, field) {
454
+ if (data && field) {
455
+ if (field.indexOf('.') == -1) {
456
+ return data[field];
457
+ }
458
+ else {
459
+ let fields = field.split('.');
460
+ let value = data;
461
+ for (var i = 0, len = fields.length; i < len; ++i) {
462
+ value = value[fields[i]];
463
+ }
464
+ return value;
465
+ }
466
+ }
467
+ else {
468
+ return null;
469
+ }
470
+ }
471
+ onInputFocus(event) {
472
+ this.focused = true;
473
+ this.focusedIndex = null;
474
+ this.onFocus.emit(event);
475
+ }
476
+ onInputBlur(event) {
477
+ this.focused = false;
478
+ this.focusedIndex = null;
479
+ if (this.addOnBlur && this.inputViewChild.nativeElement.value) {
480
+ this.addItem(event, this.inputViewChild.nativeElement.value, false);
481
+ }
482
+ this.onModelTouched();
483
+ this.onBlur.emit(event);
484
+ }
485
+ removeItem(event, index) {
486
+ if (this.disabled) {
487
+ return;
488
+ }
489
+ let removedItem = this.value[index];
490
+ this.value = this.value.filter((val, i) => i != index);
491
+ this.focusedIndex = null;
492
+ this.inputViewChild.nativeElement.focus();
493
+ this.onModelChange(this.value);
494
+ this.onRemove.emit({
495
+ originalEvent: event,
496
+ value: removedItem
497
+ });
498
+ this.updateFilledState();
499
+ this.updateMaxedOut();
500
+ }
501
+ addItem(event, item, preventDefault) {
502
+ this.value = this.value || [];
503
+ if (item && item.trim().length) {
504
+ const newItemIsDuplicate = this.caseSensitiveDuplication ? this.value.includes(item) : this.value.some((val) => val.toLowerCase() === item.toLowerCase());
505
+ if ((this.allowDuplicate || !newItemIsDuplicate) && !this.isMaxedOut) {
506
+ this.value = [...this.value, item];
507
+ this.onModelChange(this.value);
508
+ this.onAdd.emit({
509
+ originalEvent: event,
510
+ value: item
511
+ });
512
+ }
513
+ }
514
+ this.updateFilledState();
515
+ this.updateMaxedOut();
516
+ this.inputViewChild.nativeElement.value = '';
517
+ if (preventDefault) {
518
+ event.preventDefault();
519
+ }
520
+ }
521
+ /**
522
+ * Callback to invoke on filter reset.
523
+ * @group Method
524
+ */
525
+ clear() {
526
+ this.value = null;
527
+ this.updateFilledState();
528
+ this.onModelChange(this.value);
529
+ this.updateMaxedOut();
530
+ this.onClear.emit();
531
+ }
532
+ onKeyDown(event) {
533
+ const inputValue = event.target.value;
534
+ switch (event.code) {
535
+ case 'Backspace':
536
+ if (inputValue.length === 0 && this.value && this.value.length > 0) {
537
+ if (this.focusedIndex !== null) {
538
+ this.removeItem(event, this.focusedIndex);
539
+ }
540
+ else
541
+ this.removeItem(event, this.value.length - 1);
542
+ }
543
+ break;
544
+ case 'Enter':
545
+ case 'NumpadEnter':
546
+ if (inputValue && inputValue.trim().length && !this.isMaxedOut) {
547
+ this.addItem(event, inputValue, true);
548
+ }
549
+ break;
550
+ case 'Tab':
551
+ if (this.addOnTab && inputValue && inputValue.trim().length && !this.isMaxedOut) {
552
+ this.addItem(event, inputValue, true);
553
+ event.preventDefault();
554
+ }
555
+ break;
556
+ case 'ArrowLeft':
557
+ if (inputValue.length === 0 && this.value && this.value.length > 0) {
558
+ this.containerViewChild?.nativeElement.focus();
559
+ }
560
+ break;
561
+ case 'ArrowRight':
562
+ event.stopPropagation();
563
+ break;
564
+ default:
565
+ if (this.separator) {
566
+ if (this.separator === event.key || event.key.match(this.separator)) {
567
+ this.addItem(event, inputValue, true);
568
+ }
569
+ }
570
+ break;
571
+ }
572
+ }
573
+ updateMaxedOut() {
574
+ if (this.inputViewChild && this.inputViewChild.nativeElement) {
575
+ if (this.isMaxedOut) {
576
+ // Calling `blur` is necessary because firefox does not call `onfocus` events
577
+ // for disabled inputs, unlike chromium browsers.
578
+ this.inputViewChild.nativeElement.blur();
579
+ this.inputViewChild.nativeElement.disabled = true;
580
+ }
581
+ else {
582
+ if (this.disabled) {
583
+ this.inputViewChild.nativeElement.blur();
584
+ }
585
+ this.inputViewChild.nativeElement.disabled = this.disabled || false;
586
+ }
587
+ }
588
+ }
589
+ static ɵfac = function Chips_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || Chips)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i1.PrimeNG)); };
590
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: Chips, selectors: [["p-chips"]], contentQueries: function Chips_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
591
+ i0.ɵɵcontentQuery(dirIndex, PrimeTemplate, 4);
592
+ } if (rf & 2) {
593
+ let _t;
594
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.templates = _t);
595
+ } }, viewQuery: function Chips_Query(rf, ctx) { if (rf & 1) {
596
+ i0.ɵɵviewQuery(_c0, 5);
597
+ i0.ɵɵviewQuery(_c1, 5);
598
+ } if (rf & 2) {
599
+ let _t;
600
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.inputViewChild = _t.first);
601
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.containerViewChild = _t.first);
602
+ } }, hostAttrs: [1, "p-element", "p-inputwrapper"], hostVars: 6, hostBindings: function Chips_HostBindings(rf, ctx) { if (rf & 2) {
603
+ i0.ɵɵclassProp("p-inputwrapper-filled", ctx.filled)("p-inputwrapper-focus", ctx.focused)("p-chips-clearable", ctx.showClear);
604
+ } }, inputs: { style: "style", styleClass: "styleClass", disabled: [2, "disabled", "disabled", booleanAttribute], field: "field", placeholder: "placeholder", max: [2, "max", "max", numberAttribute], maxLength: "maxLength", ariaLabel: "ariaLabel", ariaLabelledBy: "ariaLabelledBy", tabindex: [2, "tabindex", "tabindex", numberAttribute], inputId: "inputId", allowDuplicate: [2, "allowDuplicate", "allowDuplicate", booleanAttribute], caseSensitiveDuplication: [2, "caseSensitiveDuplication", "caseSensitiveDuplication", booleanAttribute], inputStyle: "inputStyle", inputStyleClass: "inputStyleClass", chipIcon: "chipIcon", addOnTab: [2, "addOnTab", "addOnTab", booleanAttribute], addOnBlur: [2, "addOnBlur", "addOnBlur", booleanAttribute], separator: "separator", showClear: [2, "showClear", "showClear", booleanAttribute], autofocus: [2, "autofocus", "autofocus", booleanAttribute], variant: "variant" }, outputs: { onAdd: "onAdd", onRemove: "onRemove", onFocus: "onFocus", onBlur: "onBlur", onChipClick: "onChipClick", onChipContextMenu: "onChipContextMenu", onClear: "onClear" }, standalone: true, features: [i0.ɵɵProvidersFeature([CHIPS_VALUE_ACCESSOR, ChipsStyle]), i0.ɵɵInputTransformsFeature, i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature], decls: 8, vars: 31, consts: [["container", ""], ["inputtext", ""], ["token", ""], ["removeicon", ""], [3, "ngClass", "ngStyle"], ["tabindex", "-1", "role", "listbox", 1, "p-inputchips-input", 3, "click", "focus", "blur", "keydown"], ["role", "option", 3, "ngClass", "click", "contextmenu", 4, "ngFor", "ngForOf"], ["role", "option", 1, "p-inputchips-input-item", 3, "ngClass"], ["type", "text", "pAutoFocus", "", 1, "test", 3, "keydown", "input", "paste", "focus", "blur", "disabled", "ngStyle", "autofocus"], [4, "ngIf"], ["role", "option", 3, "click", "contextmenu", "ngClass"], [4, "ngTemplateOutlet", "ngTemplateOutletContext"], ["class", "p-inputchips-chip", "removable", "", 3, "label", "removeIcon", "onRemove", 4, "ngIf"], ["removable", "", 1, "p-inputchips-chip", 3, "onRemove", "label", "removeIcon"], [3, "styleClass", "click", 4, "ngIf"], ["class", "p-chips-token-icon", 3, "click", 4, "ngIf"], [3, "click", "styleClass"], [1, "p-chips-token-icon", 3, "click"], ["class", "p-chips-clear-icon", 3, "click", 4, "ngIf"], [1, "p-chips-clear-icon", 3, "click"], [4, "ngTemplateOutlet"]], template: function Chips_Template(rf, ctx) { if (rf & 1) {
605
+ const _r1 = i0.ɵɵgetCurrentView();
606
+ i0.ɵɵelementStart(0, "div", 4)(1, "ul", 5, 0);
607
+ i0.ɵɵlistener("click", function Chips_Template_ul_click_1_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onWrapperClick()); })("focus", function Chips_Template_ul_focus_1_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onContainerFocus()); })("blur", function Chips_Template_ul_blur_1_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onContainerBlur()); })("keydown", function Chips_Template_ul_keydown_1_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onContainerKeyDown($event)); });
608
+ i0.ɵɵtemplate(3, Chips_li_3_Template, 4, 15, "li", 6);
609
+ i0.ɵɵelementStart(4, "li", 7)(5, "input", 8, 1);
610
+ i0.ɵɵlistener("keydown", function Chips_Template_input_keydown_5_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onKeyDown($event)); })("input", function Chips_Template_input_input_5_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onInput()); })("paste", function Chips_Template_input_paste_5_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onPaste($event)); })("focus", function Chips_Template_input_focus_5_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onInputFocus($event)); })("blur", function Chips_Template_input_blur_5_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onInputBlur($event)); });
611
+ i0.ɵɵelementEnd()();
612
+ i0.ɵɵtemplate(7, Chips_li_7_Template, 3, 2, "li", 9);
613
+ i0.ɵɵelementEnd()();
614
+ } if (rf & 2) {
615
+ i0.ɵɵclassMap(ctx.styleClass);
616
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction4(24, _c2, ctx.disabled, ctx.focused, ctx.value && ctx.value.length || (ctx.inputViewChild == null ? null : ctx.inputViewChild.nativeElement.value) && (ctx.inputViewChild == null ? null : ctx.inputViewChild.nativeElement.value.length), ctx.focused))("ngStyle", ctx.style);
617
+ i0.ɵɵattribute("data-pc-name", "chips")("data-pc-section", "root");
618
+ i0.ɵɵadvance();
619
+ i0.ɵɵattribute("aria-labelledby", ctx.ariaLabelledBy)("aria-label", ctx.ariaLabel)("aria-activedescendant", ctx.focused ? ctx.focusedOptionId : undefined)("aria-orientation", "horizontal")("data-pc-section", "container");
620
+ i0.ɵɵadvance(2);
621
+ i0.ɵɵproperty("ngForOf", ctx.value);
622
+ i0.ɵɵadvance();
623
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(29, _c3, ctx.showClear && !ctx.disabled));
624
+ i0.ɵɵattribute("data-pc-section", "inputToken");
625
+ i0.ɵɵadvance();
626
+ i0.ɵɵclassMap(ctx.inputStyleClass);
627
+ i0.ɵɵproperty("disabled", ctx.disabled || ctx.isMaxedOut)("ngStyle", ctx.inputStyle)("autofocus", ctx.autofocus);
628
+ i0.ɵɵattribute("id", ctx.inputId)("maxlength", ctx.maxLength)("placeholder", ctx.value && ctx.value.length ? null : ctx.placeholder)("tabindex", ctx.tabindex);
629
+ i0.ɵɵadvance(2);
630
+ i0.ɵɵproperty("ngIf", ctx.value != null && ctx.filled && !ctx.disabled && ctx.showClear);
631
+ } }, dependencies: [CommonModule, i2.NgClass, i2.NgForOf, i2.NgIf, i2.NgTemplateOutlet, i2.NgStyle, InputTextModule, SharedModule, AutoFocusModule, i3.AutoFocus, TimesCircleIcon, TimesIcon, ChipModule, i4.Chip], encapsulation: 2, changeDetection: 0 });
632
+ }
633
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(Chips, [{
634
+ type: Component,
635
+ args: [{
636
+ selector: 'p-chips',
637
+ standalone: true,
638
+ imports: [CommonModule, InputTextModule, SharedModule, AutoFocusModule, TimesCircleIcon, TimesIcon, ChipModule],
639
+ template: `
640
+ <div
641
+ [ngClass]="{
642
+ 'p-inputchips p-component p-input-wrapper': true,
643
+ 'p-disabled': disabled,
644
+ 'p-focus': focused,
645
+ 'p-inputwrapper-filled': (value && value.length) || (this.inputViewChild?.nativeElement.value && this.inputViewChild?.nativeElement.value.length),
646
+ 'p-inputwrapper-focus': focused
647
+ }"
648
+ [ngStyle]="style"
649
+ [class]="styleClass"
650
+ [attr.data-pc-name]="'chips'"
651
+ [attr.data-pc-section]="'root'"
652
+ >
653
+ <ul
654
+ #container
655
+ class="p-inputchips-input"
656
+ tabindex="-1"
657
+ role="listbox"
658
+ [attr.aria-labelledby]="ariaLabelledBy"
659
+ [attr.aria-label]="ariaLabel"
660
+ [attr.aria-activedescendant]="focused ? focusedOptionId : undefined"
661
+ [attr.aria-orientation]="'horizontal'"
662
+ (click)="onWrapperClick()"
663
+ (focus)="onContainerFocus()"
664
+ (blur)="onContainerBlur()"
665
+ (keydown)="onContainerKeyDown($event)"
666
+ [attr.data-pc-section]="'container'"
667
+ >
668
+ <li
669
+ #token
670
+ *ngFor="let item of value; let i = index"
671
+ [attr.id]="id + '_chips_item_' + i"
672
+ role="option"
673
+ [attr.ariaLabel]="item"
674
+ [attr.aria-selected]="true"
675
+ [attr.aria-setsize]="value.length"
676
+ [attr.aria-posinset]="i + 1"
677
+ [attr.data-p-focused]="focusedIndex === i"
678
+ [ngClass]="{ 'p-inputchips-chip-item': true, 'p-focus': focusedIndex === i }"
679
+ (click)="onItemClick($event, item)"
680
+ (contextmenu)="onItemContextMenu($event, item)"
681
+ [attr.data-pc-section]="'token'"
682
+ >
683
+ <ng-container *ngTemplateOutlet="itemTemplate; context: { $implicit: item }"></ng-container>
684
+ <p-chip *ngIf="!itemTemplate" class="p-inputchips-chip" [label]="field ? resolveFieldData(item, field) : item" [removeIcon]="chipIcon" removable (onRemove)="removeItem($event, i)">
685
+ <ng-container *ngTemplateOutlet="itemTemplate; context: { $implicit: item }"></ng-container>
686
+ <ng-template #removeicon>
687
+ <ng-container *ngIf="!disabled">
688
+ <TimesCircleIcon [styleClass]="'p-chips-token-icon'" *ngIf="!removeTokenIconTemplate" (click)="removeItem($event, i)" [attr.data-pc-section]="'removeTokenIcon'" [attr.aria-hidden]="true" />
689
+ <span *ngIf="removeTokenIconTemplate" class="p-chips-token-icon" (click)="removeItem($event, i)" [attr.data-pc-section]="'removeTokenIcon'" [attr.aria-hidden]="true">
690
+ <ng-template *ngTemplateOutlet="removeTokenIconTemplate; context: { removeItem: removeItem.bind(this) }"></ng-template>
691
+ </span>
692
+ </ng-container>
693
+ </ng-template>
694
+ </p-chip>
695
+ </li>
696
+ <li class="p-inputchips-input-item" [ngClass]="{ 'p-chips-clearable': showClear && !disabled }" [attr.data-pc-section]="'inputToken'" role="option">
697
+ <input
698
+ #inputtext
699
+ type="text"
700
+ [attr.id]="inputId"
701
+ [attr.maxlength]="maxLength"
702
+ [attr.placeholder]="value && value.length ? null : placeholder"
703
+ [attr.tabindex]="tabindex"
704
+ (keydown)="onKeyDown($event)"
705
+ (input)="onInput()"
706
+ (paste)="onPaste($event)"
707
+ (focus)="onInputFocus($event)"
708
+ (blur)="onInputBlur($event)"
709
+ [disabled]="disabled || isMaxedOut"
710
+ [ngStyle]="inputStyle"
711
+ [class]="inputStyleClass"
712
+ pAutoFocus
713
+ [autofocus]="autofocus"
714
+ class="test"
715
+ />
716
+ </li>
717
+ <li *ngIf="value != null && filled && !disabled && showClear">
718
+ <TimesIcon *ngIf="!clearIconTemplate" [styleClass]="'p-chips-clear-icon'" (click)="clear()" />
719
+ <span *ngIf="clearIconTemplate" class="p-chips-clear-icon" (click)="clear()">
720
+ <ng-template *ngTemplateOutlet="clearIconTemplate"></ng-template>
721
+ </span>
722
+ </li>
723
+ </ul>
724
+ </div>
725
+ `,
726
+ host: {
727
+ class: 'p-element p-inputwrapper',
728
+ '[class.p-inputwrapper-filled]': 'filled',
729
+ '[class.p-inputwrapper-focus]': 'focused',
730
+ '[class.p-chips-clearable]': 'showClear'
731
+ },
732
+ providers: [CHIPS_VALUE_ACCESSOR, ChipsStyle],
733
+ changeDetection: ChangeDetectionStrategy.OnPush,
734
+ encapsulation: ViewEncapsulation.None
735
+ }]
736
+ }], () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.PrimeNG }], { style: [{
737
+ type: Input
738
+ }], styleClass: [{
739
+ type: Input
740
+ }], disabled: [{
741
+ type: Input,
742
+ args: [{ transform: booleanAttribute }]
743
+ }], field: [{
744
+ type: Input
745
+ }], placeholder: [{
746
+ type: Input
747
+ }], max: [{
748
+ type: Input,
749
+ args: [{ transform: numberAttribute }]
750
+ }], maxLength: [{
751
+ type: Input
752
+ }], ariaLabel: [{
753
+ type: Input
754
+ }], ariaLabelledBy: [{
755
+ type: Input
756
+ }], tabindex: [{
757
+ type: Input,
758
+ args: [{ transform: numberAttribute }]
759
+ }], inputId: [{
760
+ type: Input
761
+ }], allowDuplicate: [{
762
+ type: Input,
763
+ args: [{ transform: booleanAttribute }]
764
+ }], caseSensitiveDuplication: [{
765
+ type: Input,
766
+ args: [{ transform: booleanAttribute }]
767
+ }], inputStyle: [{
768
+ type: Input
769
+ }], inputStyleClass: [{
770
+ type: Input
771
+ }], chipIcon: [{
772
+ type: Input
773
+ }], addOnTab: [{
774
+ type: Input,
775
+ args: [{ transform: booleanAttribute }]
776
+ }], addOnBlur: [{
777
+ type: Input,
778
+ args: [{ transform: booleanAttribute }]
779
+ }], separator: [{
780
+ type: Input
781
+ }], showClear: [{
782
+ type: Input,
783
+ args: [{ transform: booleanAttribute }]
784
+ }], autofocus: [{
785
+ type: Input,
786
+ args: [{ transform: booleanAttribute }]
787
+ }], variant: [{
788
+ type: Input
789
+ }], onAdd: [{
790
+ type: Output
791
+ }], onRemove: [{
792
+ type: Output
793
+ }], onFocus: [{
794
+ type: Output
795
+ }], onBlur: [{
796
+ type: Output
797
+ }], onChipClick: [{
798
+ type: Output
799
+ }], onChipContextMenu: [{
800
+ type: Output
801
+ }], onClear: [{
802
+ type: Output
803
+ }], inputViewChild: [{
804
+ type: ViewChild,
805
+ args: ['inputtext']
806
+ }], containerViewChild: [{
807
+ type: ViewChild,
808
+ args: ['container']
809
+ }], templates: [{
810
+ type: ContentChildren,
811
+ args: [PrimeTemplate]
812
+ }] }); })();
813
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(Chips, { className: "Chips" }); })();
814
+ export class ChipsModule {
815
+ static ɵfac = function ChipsModule_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ChipsModule)(); };
816
+ static ɵmod = /*@__PURE__*/ i0.ɵɵdefineNgModule({ type: ChipsModule });
817
+ static ɵinj = /*@__PURE__*/ i0.ɵɵdefineInjector({ imports: [Chips, SharedModule, SharedModule] });
818
+ }
819
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ChipsModule, [{
820
+ type: NgModule,
821
+ args: [{
822
+ imports: [Chips, SharedModule],
823
+ exports: [Chips, SharedModule]
824
+ }]
825
+ }], null, null); })();
826
+ (function () { (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(ChipsModule, { imports: [Chips, SharedModule], exports: [Chips, SharedModule] }); })();
827
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpcHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY2hpcHMvY2hpcHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFFSCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULGVBQWUsRUFFZixZQUFZLEVBQ1osS0FBSyxFQUNMLFFBQVEsRUFDUixNQUFNLEVBR04sU0FBUyxFQUNULGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDaEIsVUFBVSxFQUNWLE1BQU0sRUFDTixlQUFlLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFcEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7SUEyRHRCLHdCQUE0Rjs7O0lBRXhGLHdCQUE0Rjs7OztJQUdwRiwyQ0FBNkw7SUFBdkcsK1FBQVMsK0JBQXFCLEtBQUM7SUFBckgsaUJBQTZMOztJQUE1SyxpREFBbUM7Ozs7O0lBRWhELHVIQUF5Rzs7OztJQUQ3Ryxn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a0JBQWhCLE1BQU07WUFFaUIsY0FBYztrQkFBckMsU0FBUzttQkFBQyxXQUFXO1lBRUUsa0JBQWtCO2tCQUF6QyxTQUFTO21CQUFDLFdBQVc7WUFFVSxTQUFTO2tCQUF4QyxlQUFlO21CQUFDLGFBQWE7O2tGQTdKckIsS0FBSztBQTZmbEIsTUFBTSxPQUFPLFdBQVc7cUdBQVgsV0FBVzs0REFBWCxXQUFXO2dFQUhWLEtBQUssRUFBRSxZQUFZLEVBQ1osWUFBWTs7aUZBRXBCLFdBQVc7Y0FKdkIsUUFBUTtlQUFDO2dCQUNOLE9BQU8sRUFBRSxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUM7Z0JBQzlCLE9BQU8sRUFBRSxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUM7YUFDakM7O3dGQUNZLFdBQVcsY0E3ZlgsS0FBSyxFQTBmRyxZQUFZLGFBMWZwQixLQUFLLEVBMmZHLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5wdXQsXG4gICAgTmdNb2R1bGUsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgICBmb3J3YXJkUmVmLFxuICAgIGluamVjdCxcbiAgICBudW1iZXJBdHRyaWJ1dGVcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBQcmltZVRlbXBsYXRlLCBTaGFyZWRNb2R1bGUgfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQgeyBBdXRvRm9jdXNNb2R1bGUgfSBmcm9tICdwcmltZW5nL2F1dG9mb2N1cyc7XG5pbXBvcnQgeyBUaW1lc0ljb24gfSBmcm9tICdwcmltZW5nL2ljb25zL3RpbWVzJztcbmltcG9ydCB7IFRpbWVzQ2lyY2xlSWNvbiB9IGZyb20gJ3ByaW1lbmcvaWNvbnMvdGltZXNjaXJjbGUnO1xuaW1wb3J0IHsgSW5wdXRUZXh0TW9kdWxlIH0gZnJvbSAncHJpbWVuZy9pbnB1dHRleHQnO1xuaW1wb3J0IHsgTnVsbGFibGUgfSBmcm9tICdwcmltZW5nL3RzLWhlbHBlcnMnO1xuaW1wb3J0IHsgVW5pcXVlQ29tcG9uZW50SWQgfSBmcm9tICdwcmltZW5nL3V0aWxzJztcbmltcG9ydCB7IENoaXBzQWRkRXZlbnQsIENoaXBzQ2xpY2tFdmVudCwgQ2hpcHNDb250ZXh0TWVudUV2ZW50LCBDaGlwc1JlbW92ZUV2ZW50IH0gZnJvbSAnLi9jaGlwcy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUHJpbWVORyB9IGZyb20gJ3ByaW1lbmcvY29uZmlnJztcbmltcG9ydCB7IENoaXBzU3R5bGUgfSBmcm9tICcuL3N0eWxlL2NoaXBzc3R5bGUnO1xuaW1wb3J0IHsgQmFzZUNvbXBvbmVudCB9IGZyb20gJ3ByaW1lbmcvYmFzZWNvbXBvbmVudCc7XG5pbXBvcnQgeyBDaGlwTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9jaGlwJztcblxuZXhwb3J0IGNvbnN0IENISVBTX1ZBTFVFX0FDQ0VTU09SOiBhbnkgPSB7XG4gICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQ2hpcHMpLFxuICAgIG11bHRpOiB0cnVlXG59O1xuLyoqXG4gKiBDaGlwcyBncm91cHMgYSBjb2xsZWN0aW9uIG9mIGNvbnRlbnRzIGluIHRhYnMuXG4gKiBAZ3JvdXAgQ29tcG9uZW50c1xuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3AtY2hpcHMnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgSW5wdXRUZXh0TW9kdWxlLCBTaGFyZWRNb2R1bGUsIEF1dG9Gb2N1c01vZHVsZSwgVGltZXNDaXJjbGVJY29uLCBUaW1lc0ljb24sIENoaXBNb2R1bGVdLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAncC1pbnB1dGNoaXBzIHAtY29tcG9uZW50IHAtaW5wdXQtd3JhcHBlcic6IHRydWUsXG4gICAgICAgICAgICAgICAgJ3AtZGlzYWJsZWQnOiBkaXNhYmxlZCxcbiAgICAgICAgICAgICAgICAncC1mb2N1cyc6IGZvY3VzZWQsXG4gICAgICAgICAgICAgICAgJ3AtaW5wdXR3cmFwcGVyLWZpbGxlZCc6ICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGgpIHx8ICh0aGlzLmlucHV0Vmlld0NoaWxkPy5uYXRpdmVFbGVtZW50LnZhbHVlICYmIHRoaXMuaW5wdXRWaWV3Q2hpbGQ/Lm5hdGl2ZUVsZW1lbnQudmFsdWUubGVuZ3RoKSxcbiAgICAgICAgICAgICAgICAncC1pbnB1dHdyYXBwZXItZm9jdXMnOiBmb2N1c2VkXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIFtuZ1N0eWxlXT1cInN0eWxlXCJcbiAgICAgICAgICAgIFtjbGFzc109XCJzdHlsZUNsYXNzXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtcGMtbmFtZV09XCInY2hpcHMnXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtcGMtc2VjdGlvbl09XCIncm9vdCdcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8dWxcbiAgICAgICAgICAgICAgICAjY29udGFpbmVyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJwLWlucHV0Y2hpcHMtaW5wdXRcIlxuICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICAgIHJvbGU9XCJsaXN0Ym94XCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiYXJpYUxhYmVsbGVkQnlcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWFjdGl2ZWRlc2NlbmRhbnRdPVwiZm9jdXNlZCA/IGZvY3VzZWRPcHRpb25JZCA6IHVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1vcmllbnRhdGlvbl09XCInaG9yaXpvbnRhbCdcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbldyYXBwZXJDbGljaygpXCJcbiAgICAgICAgICAgICAgICAoZm9jdXMpPVwib25Db250YWluZXJGb2N1cygpXCJcbiAgICAgICAgICAgICAgICAoYmx1cik9XCJvbkNvbnRhaW5lckJsdXIoKVwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24pPVwib25Db250YWluZXJLZXlEb3duKCRldmVudClcIlxuICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtcGMtc2VjdGlvbl09XCInY29udGFpbmVyJ1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAgICN0b2tlblxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiB2YWx1ZTsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmlkXT1cImlkICsgJ19jaGlwc19pdGVtXycgKyBpXCJcbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cIm9wdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWFMYWJlbF09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1zZXRzaXplXT1cInZhbHVlLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtcG9zaW5zZXRdPVwiaSArIDFcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXAtZm9jdXNlZF09XCJmb2N1c2VkSW5kZXggPT09IGlcIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdwLWlucHV0Y2hpcHMtY2hpcC1pdGVtJzogdHJ1ZSwgJ3AtZm9jdXMnOiBmb2N1c2VkSW5kZXggPT09IGkgfVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkl0ZW1DbGljaygkZXZlbnQsIGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgKGNvbnRleHRtZW51KT1cIm9uSXRlbUNvbnRleHRNZW51KCRldmVudCwgaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXBjLXNlY3Rpb25dPVwiJ3Rva2VuJ1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbVRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogaXRlbSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDxwLWNoaXAgKm5nSWY9XCIhaXRlbVRlbXBsYXRlXCIgY2xhc3M9XCJwLWlucHV0Y2hpcHMtY2hpcFwiIFtsYWJlbF09XCJmaWVsZCA/IHJlc29sdmVGaWVsZERhdGEoaXRlbSwgZmllbGQpIDogaXRlbVwiIFtyZW1vdmVJY29uXT1cImNoaXBJY29uXCIgcmVtb3ZhYmxlIChvblJlbW92ZSk9XCJyZW1vdmVJdGVtKCRldmVudCwgaSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBpdGVtIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVtb3ZlaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWRpc2FibGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUaW1lc0NpcmNsZUljb24gW3N0eWxlQ2xhc3NdPVwiJ3AtY2hpcHMtdG9rZW4taWNvbidcIiAqbmdJZj1cIiFyZW1vdmVUb2tlbkljb25UZW1wbGF0ZVwiIChjbGljayk9XCJyZW1vdmVJdGVtKCRldmVudCwgaSlcIiBbYXR0ci5kYXRhLXBjLXNlY3Rpb25dPVwiJ3JlbW92ZVRva2VuSWNvbidcIiBbYXR0ci5hcmlhLWhpZGRlbl09XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJyZW1vdmVUb2tlbkljb25UZW1wbGF0ZVwiIGNsYXNzPVwicC1jaGlwcy10b2tlbi1pY29uXCIgKGNsaWNrKT1cInJlbW92ZUl0ZW0oJGV2ZW50LCBpKVwiIFthdHRyLmRhdGEtcGMtc2VjdGlvbl09XCIncmVtb3ZlVG9rZW5JY29uJ1wiIFthdHRyLmFyaWEtaGlkZGVuXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cInJlbW92ZVRva2VuSWNvblRlbXBsYXRlOyBjb250ZXh0OiB7IHJlbW92ZUl0ZW06IHJlbW92ZUl0ZW0uYmluZCh0aGlzKSB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPC9wLWNoaXA+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJwLWlucHV0Y2hpcHMtaW5wdXQtaXRlbVwiIFtuZ0NsYXNzXT1cInsgJ3AtY2hpcHMtY2xlYXJhYmxlJzogc2hvd0NsZWFyICYmICFkaXNhYmxlZCB9XCIgW2F0dHIuZGF0YS1wYy1zZWN0aW9uXT1cIidpbnB1dFRva2VuJ1wiIHJvbGU9XCJvcHRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAjaW5wdXR0ZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCJpbnB1dElkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLm1heGxlbmd0aF09XCJtYXhMZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIucGxhY2Vob2xkZXJdPVwidmFsdWUgJiYgdmFsdWUubGVuZ3RoID8gbnVsbCA6IHBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cInRhYmluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJvbklucHV0KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKHBhc3RlKT1cIm9uUGFzdGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoZm9jdXMpPVwib25JbnB1dEZvY3VzKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwib25JbnB1dEJsdXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgaXNNYXhlZE91dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJpbnB1dFN0eWxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJpbnB1dFN0eWxlQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcEF1dG9Gb2N1c1xuICAgICAgICAgICAgICAgICAgICAgICAgW2F1dG9mb2N1c109XCJhdXRvZm9jdXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXN0XCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cInZhbHVlICE9IG51bGwgJiYgZmlsbGVkICYmICFkaXNhYmxlZCAmJiBzaG93Q2xlYXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPFRpbWVzSWNvbiAqbmdJZj1cIiFjbGVhckljb25UZW1wbGF0ZVwiIFtzdHlsZUNsYXNzXT1cIidwLWNoaXBzLWNsZWFyLWljb24nXCIgKGNsaWNrKT1cImNsZWFyKClcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNsZWFySWNvblRlbXBsYXRlXCIgY2xhc3M9XCJwLWNoaXBzLWNsZWFyLWljb25cIiAoY2xpY2spPVwiY2xlYXIoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2xlYXJJY29uVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvZGl2PlxuICAgIGAsXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ3AtZWxlbWVudCBwLWlucHV0d3JhcHBlcicsXG4gICAgICAgICdbY2xhc3MucC1pbnB1dHdyYXBwZXItZmlsbGVkXSc6ICdmaWxsZWQnLFxuICAgICAgICAnW2NsYXNzLnAtaW5wdXR3cmFwcGVyLWZvY3VzXSc6ICdmb2N1c2VkJyxcbiAgICAgICAgJ1tjbGFzcy5wLWNoaXBzLWNsZWFyYWJsZV0nOiAnc2hvd0NsZWFyJ1xuICAgIH0sXG4gICAgcHJvdmlkZXJzOiBbQ0hJUFNfVkFMVUVfQUNDRVNTT1IsIENoaXBzU3R5bGVdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgQ2hpcHMgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICAgIC8qKlxuICAgICAqIElubGluZSBzdHlsZSBvZiB0aGUgZWxlbWVudC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBzdHlsZTogeyBba2xhc3M6IHN0cmluZ106IGFueSB9IHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBTdHlsZSBjbGFzcyBvZiB0aGUgZWxlbWVudC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBzdHlsZUNsYXNzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogV2hlbiBwcmVzZW50LCBpdCBzcGVjaWZpZXMgdGhhdCB0aGUgZWxlbWVudCBzaG91bGQgYmUgZGlzYWJsZWQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGRpc2FibGVkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIE5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGRpc3BsYXkgb24gYSBjaGlwLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGZpZWxkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogQWR2aXNvcnkgaW5mb3JtYXRpb24gdG8gZGlzcGxheSBvbiBpbnB1dC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIE1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMgYWxsb3dlZC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSBtYXg6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBNYXhpbXVtIGxlbmd0aCBvZiBhIGNoaXAuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgbWF4TGVuZ3RoOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogRGVmaW5lcyBhIHN0cmluZyB0aGF0IGxhYmVscyB0aGUgaW5wdXQgZm9yIGFjY2Vzc2liaWxpdHkuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgYXJpYUxhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogRXN0YWJsaXNoZXMgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZSBjb21wb25lbnQgYW5kIGxhYmVsKHMpIHdoZXJlIGl0cyB2YWx1ZSBzaG91bGQgYmUgb25lIG9yIG1vcmUgZWxlbWVudCBJRHMuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgYXJpYUxhYmVsbGVkQnk6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBJbmRleCBvZiB0aGUgZWxlbWVudCBpbiB0YWJiaW5nIG9yZGVyLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pIHRhYmluZGV4OiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogSWRlbnRpZmllciBvZiB0aGUgZm9jdXMgaW5wdXQgdG8gbWF0Y2ggYSBsYWJlbCBkZWZpbmVkIGZvciB0aGUgY29tcG9uZW50LlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGlucHV0SWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIGFsbG93IGR1cGxpY2F0ZSB2YWx1ZXMgb3Igbm90LlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBhbGxvd0R1cGxpY2F0ZTogYm9vbGVhbiA9IHRydWU7XG4gICAgLyoqXG4gICAgICogRGVmaW5lcyB3aGV0aGVyIGR1cGxpY2F0aW9uIGNoZWNrIHNob3VsZCBiZSBjYXNlLXNlbnNpdGl2ZVxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBjYXNlU2Vuc2l0aXZlRHVwbGljYXRpb246IGJvb2xlYW4gPSB0cnVlO1xuICAgIC8qKlxuICAgICAqIElubGluZSBzdHlsZSBvZiB0aGUgaW5wdXQgZmllbGQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgaW5wdXRTdHlsZTogeyBba2xhc3M6IHN0cmluZ106IGFueSB9IHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBTdHlsZSBjbGFzcyBvZiB0aGUgaW5wdXQgZmllbGQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgaW5wdXRTdHlsZUNsYXNzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogSWNvbiB0byBkaXNwbGF5IGluIGNoaXAgcmVtb3ZlIGFjdGlvbi4uXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgY2hpcEljb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIGFkZCBhbiBpdGVtIG9uIHRhYiBrZXkgcHJlc3MuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGFkZE9uVGFiOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gYWRkIGFuIGl0ZW0gd2hlbiB0aGUgaW5wdXQgbG9zZXMgZm9jdXMuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGFkZE9uQmx1cjogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBTZXBhcmF0b3IgY2hhciB0byBhZGQgYW4gaXRlbSB3aGVuIHByZXNzZWQgaW4gYWRkaXRpb24gdG8gdGhlIGVudGVyIGtleS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBzZXBhcmF0b3I6IHN0cmluZyB8IFJlZ0V4cCB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBXaGVuIGVuYWJsZWQsIGEgY2xlYXIgaWNvbiBpcyBkaXNwbGF5ZWQgdG8gY2xlYXIgdGhlIHZhbHVlLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBzaG93Q2xlYXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBXaGVuIHByZXNlbnQsIGl0IHNwZWNpZmllcyB0aGF0IHRoZSBjb21wb25lbnQgc2hvdWxkIGF1dG9tYXRpY2FsbHkgZ2V0IGZvY3VzIG9uIGxvYWQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGF1dG9mb2N1czogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgdGhlIGlucHV0IHZhcmlhbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSB2YXJpYW50OiAnZmlsbGVkJyB8ICdvdXRsaW5lZCcgPSAnb3V0bGluZWQnO1xuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIHRvIGludm9rZSBvbiBjaGlwIGFkZC5cbiAgICAgKiBAcGFyYW0ge0NoaXBzQWRkRXZlbnR9IGV2ZW50IC0gQ3VzdG9tIGNoaXAgYWRkIGV2ZW50LlxuICAgICAqIEBncm91cCBFbWl0c1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkFkZDogRXZlbnRFbWl0dGVyPENoaXBzQWRkRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxDaGlwc0FkZEV2ZW50PigpO1xuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIHRvIGludm9rZSBvbiBjaGlwIHJlbW92ZS5cbiAgICAgKiBAcGFyYW0ge0NoaXBzUmVtb3ZlRXZlbnR9IGV2ZW50IC0gQ3VzdG9tIGNoaXAgcmVtb3ZlIGV2ZW50LlxuICAgICAqIEBncm91cCBFbWl0c1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblJlbW92ZTogRXZlbnRFbWl0dGVyPENoaXBzUmVtb3ZlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxDaGlwc1JlbW92ZUV2ZW50PigpO1xuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIHRvIGludm9rZSBvbiBmb2N1cyBvZiBpbnB1dCBmaWVsZC5cbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudCAtIEJyb3dzZXIgZXZlbnQuXG4gICAgICogQGdyb3VwIEVtaXRzXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRm9jdXM6IEV2ZW50RW1pdHRlcjxFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIHRvIGludm9rZSBvbiBibHVyIG9mIGlucHV0IGZpZWxkLlxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IC0gQnJvd3NlciBldmVudC5cbiAgICAgKiBAZ3JvdXAgRW1pdHNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CbHVyOiBFdmVudEVtaXR0ZXI8RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcbiAgICAvKipcbiAgICAgKiBDYWxsYmFjayB0byBpbnZva2Ugb24gY2hpcCBjbGlja2VkLlxuICAgICAqIEBwYXJhbSB7Q2hpcHNDbGlja0V2ZW50fSBldmVudCAtIEN1c3RvbSBjaGlwIGNsaWNrIGV2ZW50LlxuICAgICAqIEBncm91cCBFbWl0c1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNoaXBDbGljazogRXZlbnRFbWl0dGVyPENoaXBzQ2xpY2tFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPENoaXBzQ2xpY2tFdmVudD4oKTtcbiAgICAvKipcbiAgICAgKiBDYWxsYmFjayB0byBpbnZva2Ugb24gY2hpcCBjb250ZXh0bWVudS5cbiAgICAgKiBAcGFyYW0ge0NoaXBzQ2xpY2tFdmVudH0gZXZlbnQgLSBDdXN0b20gY2hpcCBjb250ZXh0bWVudSBldmVudC5cbiAgICAgKiBAZ3JvdXAgRW1pdHNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25DaGlwQ29udGV4dE1lbnU6IEV2ZW50RW1pdHRlcjxDaGlwc0NvbnRleHRNZW51RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxDaGlwc0NvbnRleHRNZW51RXZlbnQ+KCk7XG4gICAgLyoqXG4gICAgICogQ2FsbGJhY2sgdG8gaW52b2tlIG9uIGNsZWFyIHRva2VuIGNsaWNrZWQuXG4gICAgICogQGdyb3VwIEVtaXRzXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ2xlYXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICBAVmlld0NoaWxkKCdpbnB1dHRleHQnKSBpbnB1dFZpZXdDaGlsZCE6IEVsZW1lbnRSZWY7XG5cbiAgICBAVmlld0NoaWxkKCdjb250YWluZXInKSBjb250YWluZXJWaWV3Q2hpbGQhOiBFbGVtZW50UmVmO1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbihQcmltZVRlbXBsYXRlKSB0ZW1wbGF0ZXMhOiBRdWVyeUxpc3Q8YW55PjtcblxuICAgIHB1YmxpYyBpdGVtVGVtcGxhdGU6IE51bGxhYmxlPFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gICAgcmVtb3ZlVG9rZW5JY29uVGVtcGxhdGU6IE51bGxhYmxlPFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gICAgY2xlYXJJY29uVGVtcGxhdGU6IE51bGxhYmxlPFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gICAgdmFsdWU6IGFueTtcblxuICAgIG9uTW9kZWxDaGFuZ2U6IEZ1bmN0aW9uID0gKCkgPT4ge307XG5cbiAgICBvbk1vZGVsVG91Y2hlZDogRnVuY3Rpb24gPSAoKSA9PiB7fTtcblxuICAgIHZhbHVlQ2hhbmdlZDogTnVsbGFibGU8Ym9vbGVhbj47XG5cbiAgICBpZCA9IFVuaXF1ZUNvbXBvbmVudElkKCk7XG5cbiAgICBmb2N1c2VkOiBOdWxsYWJsZTxib29sZWFuPjtcblxuICAgIGZvY3VzZWRJbmRleDogTnVsbGFibGU8bnVtYmVyPjtcblxuICAgIGZpbGxlZDogTnVsbGFibGU8Ym9vbGVhbj47XG5cbiAgICBfY29tcG9uZW50U3R5bGUgPSBpbmplY3QoQ2hpcHNTdHlsZSk7XG5cbiAgICBnZXQgZm9jdXNlZE9wdGlvbklkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mb2N1c2VkSW5kZXggIT09IG51bGwgPyBgJHt0aGlzLmlkfV9jaGlwc19pdGVtXyR7dGhpcy5mb2N1c2VkSW5kZXh9YCA6IG51bGw7XG4gICAgfVxuXG4gICAgZ2V0IGlzTWF4ZWRPdXQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1heCAmJiB0aGlzLnZhbHVlICYmIHRoaXMubWF4ID09PSB0aGlzLnZhbHVlLmxlbmd0aDtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGVsOiBFbGVtZW50UmVmLFxuICAgICAgICBwdWJsaWMgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwdWJsaWMgY29uZmlnOiBQcmltZU5HXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdEZXByZWNhdGVkIHNpbmNlIHYxOC4gVXNlIEF1dG9Db21wbGV0ZSBjb21wb25lbnQgaW5zdGVhZCB3aXRoIGl0cyB0eXBlYWhlYWQgcHJvcGVydHkuJyk7XG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgICB0aGlzLnRlbXBsYXRlcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBzd2l0Y2ggKGl0ZW0uZ2V0VHlwZSgpKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnaXRlbSc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbVRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdyZW1vdmV0b2tlbmljb24nOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZVRva2VuSWNvblRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdjbGVhcmljb24nOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsZWFySWNvblRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1UZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnVwZGF0ZUZpbGxlZFN0YXRlKCk7XG4gICAgfVxuXG4gICAgb25XcmFwcGVyQ2xpY2soKSB7XG4gICAgICAgIHRoaXMuaW5wdXRWaWV3Q2hpbGQ/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICBvbkNvbnRhaW5lckZvY3VzKCkge1xuICAgICAgICB0aGlzLmZvY3VzZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIG9uQ29udGFpbmVyQmx1cigpIHtcbiAgICAgICAgdGhpcy5mb2N1c2VkSW5kZXggPSAtMTtcbiAgICAgICAgdGhpcy5mb2N1c2VkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgb25Db250YWluZXJLZXlEb3duKGV2ZW50KSB7XG4gICAgICAgIHN3aXRjaCAoZXZlbnQuY29kZSkge1xuICAgICAgICAgICAgY2FzZSAnQXJyb3dMZWZ0JzpcbiAgICAgICAgICAgICAgICB0aGlzLm9uQXJyb3dMZWZ0S2V5T24oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnQXJyb3dSaWdodCc6XG4gICAgICAgICAgICAgICAgdGhpcy5vbkFycm93UmlnaHRLZXlPbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdCYWNrc3BhY2UnOlxuICAgICAgICAgICAgICAgIHRoaXMub25CYWNrc3BhY2VLZXlPbihldmVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ1NwYWNlJzpcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5mb2N1c2VkSW5kZXggIT09IG51bGwgJiYgdGhpcy52YWx1ZSAmJiB0aGlzLnZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkl0ZW1DbGljayhldmVudCwgdGhpcy52YWx1ZVt0aGlzLmZvY3VzZWRJbmRleF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQXJyb3dMZWZ0S2V5T24oKSB7XG4gICAgICAgIGlmICh0aGlzLmlucHV0Vmlld0NoaWxkLm5hdGl2ZUVsZW1lbnQudmFsdWUubGVuZ3RoID09PSAwICYmIHRoaXMudmFsdWUgJiYgdGhpcy52YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzZWRJbmRleCA9IHRoaXMuZm9jdXNlZEluZGV4ID09PSBudWxsID8gdGhpcy52YWx1ZS5sZW5ndGggLSAxIDogdGhpcy5mb2N1c2VkSW5kZXggLSAxO1xuICAgICAgICAgICAgaWYgKHRoaXMuZm9jdXNlZEluZGV4IDwgMCkgdGhpcy5mb2N1c2VkSW5kZXggPSAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25BcnJvd1JpZ2h0S2V5T24oKSB7XG4gICAgICAgIGlmICh0aGlzLmlucHV0Vmlld0NoaWxkLm5hdGl2ZUVsZW1lbnQudmFsdWUubGVuZ3RoID09PSAwICYmIHRoaXMudmFsdWUgJiYgdGhpcy52YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5mb2N1c2VkSW5kZXggPT09IHRoaXMudmFsdWUubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNlZEluZGV4ID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0Vmlld0NoaWxkPy5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNlZEluZGV4Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkJhY2tzcGFjZUtleU9uKGV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmZvY3VzZWRJbmRleCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKGV2ZW50LCB0aGlzLmZvY3VzZWRJbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbklucHV0KCkge1xuICAgICAgICB0aGlzLnVwZGF0ZUZpbGxlZFN0YXRlKCk7XG4gICAgICAgIHRoaXMuZm9jdXNlZEluZGV4ID0gbnVsbDtcbiAgICB9XG5cbiAgICBvblBhc3RlKGV2ZW50OiBhbnkpIHtcbiAgICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zZXBhcmF0b3IpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXN0ZWREYXRhOiBzdHJpbmcgPSAoZXZlbnQuY2xpcGJvYXJkRGF0YSB8fCAodGhpcy5kb2N1bWVudC5kZWZhdWx0VmlldyBhcyBhbnkpWydjbGlwYm9hcmREYXRhJ10pLmdldERhdGEoJ1RleHQnKTtcbiAgICAgICAgICAgICAgICBwYXN0ZWREYXRhLnNwbGl0KHRoaXMuc2VwYXJhdG9yKS5mb3JFYWNoKCh2YWw6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEl0ZW0oZXZlbnQsIHZhbCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dFZpZXdDaGlsZC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlRmlsbGVkU3RhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZUZpbGxlZFN0YXRlKCkge1xuICAgICAgICBpZiAoIXRoaXMudmFsdWUgfHwgdGhpcy52YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuZmlsbGVkID0gdGhpcy5pbnB1dFZpZXdDaGlsZCAmJiB0aGlzLmlucHV0Vmlld0NoaWxkLm5hdGl2ZUVsZW1lbnQgJiYgdGhpcy5pbnB1dFZpZXdDaGlsZC5uYXRpdmVFbGVtZW50LnZhbHVlICE9ICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5maWxsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25JdGVtQ2xpY2soZXZlbnQ6IEV2ZW50LCBpdGVtOiBhbnkpIHtcbiAgICAgICAgdGhpcy5vbkNoaXBDbGljay5lbWl0KHtcbiAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgdmFsdWU6IGl0ZW1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25JdGVtQ29udGV4dE1lbnUoZXZlbnQ6IEV2ZW50LCBpdGVtOiBhbnkpIHtcbiAgICAgICAgdGhpcy5vbkNoaXBDb250ZXh0TWVudS5lbWl0KHtcbiAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgdmFsdWU6IGl0ZW1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy51cGRhdGVNYXhlZE91dCgpO1xuICAgICAgICB0aGlzLnVwZGF0ZUZpbGxlZFN0YXRlKCk7XG4gICAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogRnVuY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdlID0gZm47XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IEZ1bmN0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Nb2RlbFRvdWNoZWQgPSBmbjtcbiAgICB9XG5cbiAgICBzZXREaXNhYmxlZFN0YXRlKHZhbDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gdmFsO1xuICAgICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIHJlc29sdmVGaWVsZERhdGEoZGF0YTogYW55LCBmaWVsZDogc3RyaW5nKTogYW55IHtcbiAgICAgICAgaWYgKGRhdGEgJiYgZmllbGQpIHtcbiAgICAgICAgICAgIGlmIChmaWVsZC5pbmRleE9mKCcuJykgPT0gLTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YVtmaWVsZF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBmaWVsZHM6IHN0cmluZ1tdID0gZmllbGQuc3BsaXQoJy4nKTtcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBkYXRhO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBmaWVsZHMubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZVtmaWVsZHNbaV1dO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uSW5wdXRGb2N1cyhldmVudDogRm9jdXNFdmVudCkge1xuICAgICAgICB0aGlzLmZvY3VzZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmZvY3VzZWRJbmRleCA9IG51bGw7XG4gICAgICAgIHRoaXMub25Gb2N1cy5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICBvbklucHV0Qmx1cihldmVudDogRm9jdXNFdmVudCkge1xuICAgICAgICB0aGlzLmZvY3VzZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5mb2N1c2VkSW5kZXggPSBudWxsO1xuICAgICAgICBpZiAodGhpcy5hZGRPbkJsdXIgJiYgdGhpcy5pbnB1dFZpZXdDaGlsZC5uYXRpdmVFbGVtZW50LnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmFkZEl0ZW0oZXZlbnQsIHRoaXMuaW5wdXRWaWV3Q2hpbGQubmF0aXZlRWxlbWVudC52YWx1ZSwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub25Nb2RlbFRvdWNoZWQoKTtcbiAgICAgICAgdGhpcy5vbkJsdXIuZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgcmVtb3ZlSXRlbShldmVudDogRXZlbnQsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZW1vdmVkSXRlbSA9IHRoaXMudmFsdWVbaW5kZXhdO1xuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZS5maWx0ZXIoKHZhbDogYW55LCBpOiBudW1iZXIpID0+IGkgIT0gaW5kZXgpO1xuICAgICAgICB0aGlzLmZvY3VzZWRJbmRleCA9IG51bGw7XG4gICAgICAgIHRoaXMuaW5wdXRWaWV3Q2hpbGQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuXG4gICAgICAgIHRoaXMub25Nb2RlbENoYW5nZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgdGhpcy5vblJlbW92ZS5lbWl0KHtcbiAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgdmFsdWU6IHJlbW92ZWRJdGVtXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnVwZGF0ZUZpbGxlZFN0YXRlKCk7XG4gICAgICAgIHRoaXMudXBkYXRlTWF4ZWRPdXQoKTtcbiAgICB9XG5cbiAgICBhZGRJdGVtKGV2ZW50OiBFdmVudCwgaXRlbTogc3RyaW5nLCBwcmV2ZW50RGVmYXVsdDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZSB8fCBbXTtcblxuICAgICAgICBpZiAoaXRlbSAmJiBpdGVtLnRyaW0oKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0l0ZW1Jc0R1cGxpY2F0ZSA9IHRoaXMuY2FzZVNlbnNpdGl2ZUR1cGxpY2F0aW9uID8gdGhpcy52YWx1ZS5pbmNsdWRlcyhpdGVtKSA6IHRoaXMudmFsdWUuc29tZSgodmFsKSA9PiB2YWwudG9Mb3dlckNhc2UoKSA9PT0gaXRlbS50b0xvd2VyQ2FzZSgpKTtcblxuICAgICAgICAgICAgaWYgKCh0aGlzLmFsbG93RHVwbGljYXRlIHx8ICFuZXdJdGVtSXNEdXBsaWNhdGUpICYmICF0aGlzLmlzTWF4ZWRPdXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gWy4uLnRoaXMudmFsdWUsIGl0ZW1dO1xuICAgICAgICAgICAgICAgIHRoaXMub25Nb2RlbENoYW5nZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQWRkLmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBldmVudCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGl0ZW1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBkYXRlRmlsbGVkU3RhdGUoKTtcbiAgICAgICAgdGhpcy51cGRhdGVNYXhlZE91dCgpO1xuICAgICAgICB0aGlzLmlucHV0Vmlld0NoaWxkLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcblxuICAgICAgICBpZiAocHJldmVudERlZmF1bHQpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxsYmFjayB0byBpbnZva2Ugb24gZmlsdGVyIHJlc2V0LlxuICAgICAqIEBncm91cCBNZXRob2RcbiAgICAgKi9cbiAgICBwdWJsaWMgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBudWxsO1xuICAgICAgICB0aGlzLnVwZGF0ZUZpbGxlZFN0YXRlKCk7XG4gICAgICAgIHRoaXMub25Nb2RlbENoYW5nZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgdGhpcy51cGRhdGVNYXhlZE91dCgpO1xuICAgICAgICB0aGlzLm9uQ2xlYXIuZW1pdCgpO1xuICAgIH1cblxuICAgIG9uS2V5RG93bihldmVudCkge1xuICAgICAgICBjb25zdCBpbnB1dFZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuXG4gICAgICAgIHN3aXRjaCAoZXZlbnQuY29kZSkge1xuICAgICAgICAgICAgY2FzZSAnQmFja3NwYWNlJzpcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXRWYWx1ZS5sZW5ndGggPT09IDAgJiYgdGhpcy52YWx1ZSAmJiB0aGlzLnZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZm9jdXNlZEluZGV4ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUl0ZW0oZXZlbnQsIHRoaXMuZm9jdXNlZEluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHRoaXMucmVtb3ZlSXRlbShldmVudCwgdGhpcy52YWx1ZS5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgICAgICAgY2FzZSAnTnVtcGFkRW50ZXInOlxuICAgICAgICAgICAgICAgIGlmIChpbnB1dFZhbHVlICYmIGlucHV0VmFsdWUudHJpbSgpLmxlbmd0aCAmJiAhdGhpcy5pc01heGVkT3V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkSXRlbShldmVudCwgaW5wdXRWYWx1ZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ1RhYic6XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYWRkT25UYWIgJiYgaW5wdXRWYWx1ZSAmJiBpbnB1dFZhbHVlLnRyaW0oKS5sZW5ndGggJiYgIXRoaXMuaXNNYXhlZE91dCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEl0ZW0oZXZlbnQsIGlucHV0VmFsdWUsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdBcnJvd0xlZnQnOlxuICAgICAgICAgICAgICAgIGlmIChpbnB1dFZhbHVlLmxlbmd0aCA9PT0gMCAmJiB0aGlzLnZhbHVlICYmIHRoaXMudmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lclZpZXdDaGlsZD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcbiAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZXBhcmF0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VwYXJhdG9yID09PSBldmVudC5rZXkgfHwgZXZlbnQua2V5Lm1hdGNoKHRoaXMuc2VwYXJhdG9yKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRJdGVtKGV2ZW50LCBpbnB1dFZhbHVlLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlTWF4ZWRPdXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlucHV0Vmlld0NoaWxkICYmIHRoaXMuaW5wdXRWaWV3Q2hpbGQubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNNYXhlZE91dCkge1xuICAgICAgICAgICAgICAgIC8vIENhbGxpbmcgYGJsdXJgIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIGZpcmVmb3ggZG9lcyBub3QgY2FsbCBgb25mb2N1c2AgZXZlbnRzXG4gICAgICAgICAgICAgICAgLy8gZm9yIGRpc2FibGVkIGlucHV0cywgdW5saWtlIGNocm9taXVtIGJyb3dzZXJzLlxuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRWaWV3Q2hpbGQubmF0aXZlRWxlbWVudC5ibHVyKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dFZpZXdDaGlsZC5uYXRpdmVFbGVtZW50LmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dFZpZXdDaGlsZC5uYXRpdmVFbGVtZW50LmJsdXIoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0Vmlld0NoaWxkLm5hdGl2ZUVsZW1lbnQuZGlzYWJsZWQgPSB0aGlzLmRpc2FibGVkIHx8IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtDaGlwcywgU2hhcmVkTW9kdWxlXSxcbiAgICBleHBvcnRzOiBbQ2hpcHMsIFNoYXJlZE1vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgQ2hpcHNNb2R1bGUge31cbiJdfQ==