ngx-tethys 18.0.8 → 18.1.0-next.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 (607) hide show
  1. package/CHANGELOG.md +19 -1
  2. package/action/action.component.d.ts +1 -2
  3. package/affix/affix.component.d.ts +2 -4
  4. package/alert/alert.component.d.ts +11 -19
  5. package/anchor/anchor-link.component.d.ts +2 -4
  6. package/anchor/anchor.component.d.ts +2 -7
  7. package/arrow-switcher/arrow-switcher.component.d.ts +1 -2
  8. package/autocomplete/autocomplete.component.d.ts +1 -2
  9. package/autocomplete/autocomplete.trigger.directive.d.ts +3 -5
  10. package/autocomplete/overlay/autocomplete-container.component.d.ts +4 -4
  11. package/autocomplete/overlay/autocomplete.service.d.ts +3 -5
  12. package/avatar/avatar.component.d.ts +1 -3
  13. package/avatar/avatar.pipe.d.ts +0 -2
  14. package/back-top/back-top.component.d.ts +2 -4
  15. package/badge/badge.component.d.ts +2 -2
  16. package/breadcrumb/breadcrumb-item.component.d.ts +1 -2
  17. package/breadcrumb/breadcrumb.component.d.ts +1 -2
  18. package/button/button.component.d.ts +1 -2
  19. package/calendar/calendar-header.component.d.ts +1 -2
  20. package/calendar/calendar.component.d.ts +1 -2
  21. package/carousel/carousel-item.directive.d.ts +1 -2
  22. package/carousel/carousel.component.d.ts +1 -4
  23. package/carousel/carousel.service.d.ts +1 -2
  24. package/cascader/cascader.component.d.ts +4 -4
  25. package/checkbox/checkbox.component.d.ts +0 -2
  26. package/collapse/collapse-item.component.d.ts +2 -4
  27. package/color-picker/color-picker-panel.component.d.ts +2 -3
  28. package/color-picker/color-picker.component.d.ts +2 -4
  29. package/color-picker/coordinates.directive.d.ts +1 -2
  30. package/color-picker/parts/alpha/alpha.component.d.ts +1 -2
  31. package/color-picker/parts/hue/hue.component.d.ts +1 -2
  32. package/color-picker/parts/saturation/saturation.component.d.ts +1 -2
  33. package/copy/copy.directive.d.ts +0 -2
  34. package/core/click-positioner.d.ts +0 -2
  35. package/core/scroll.d.ts +1 -2
  36. package/core/update-host-class.service.d.ts +1 -2
  37. package/date-picker/abstract-picker.component.d.ts +1 -1
  38. package/date-picker/abstract-picker.directive.d.ts +2 -3
  39. package/date-picker/base-picker.component.d.ts +2 -3
  40. package/date-picker/date-picker.component.d.ts +2 -2
  41. package/date-picker/date-picker.directive.d.ts +1 -3
  42. package/date-picker/date-picker.service.d.ts +2 -2
  43. package/date-picker/index.d.ts +26 -27
  44. package/date-picker/lib/calendar/calendar-footer.component.d.ts +1 -2
  45. package/date-picker/lib/calendar/calendar-header.component.d.ts +0 -1
  46. package/date-picker/lib/date/date-header.component.d.ts +0 -3
  47. package/date-picker/lib/date/date-table-cell.component.d.ts +1 -1
  48. package/date-picker/lib/date/date-table.component.d.ts +1 -3
  49. package/date-picker/lib/date-carousel/date-carousel.component.d.ts +1 -2
  50. package/date-picker/lib/decade/decade-header.component.d.ts +1 -1
  51. package/date-picker/lib/month/month-header.component.d.ts +0 -3
  52. package/date-picker/lib/month/month-table.component.d.ts +1 -2
  53. package/date-picker/lib/popups/date-popup.component.d.ts +1 -4
  54. package/date-picker/lib/popups/inner-popup.component.d.ts +0 -2
  55. package/date-picker/lib/quarter/quarter-table.component.d.ts +1 -2
  56. package/date-picker/lib/year/year-header.component.d.ts +0 -1
  57. package/date-picker/month-picker.component.d.ts +2 -2
  58. package/date-picker/picker.component.d.ts +1 -3
  59. package/date-picker/picker.pipes.d.ts +0 -3
  60. package/date-picker/quarter-picker.component.d.ts +2 -2
  61. package/date-picker/range-picker.component.d.ts +2 -2
  62. package/date-picker/range-picker.directive.d.ts +2 -3
  63. package/date-picker/week-picker.component.d.ts +2 -2
  64. package/date-picker/year-picker.component.d.ts +2 -2
  65. package/date-range/date-range.component.d.ts +3 -11
  66. package/date-range/optional-dates/optional-dates.component.d.ts +0 -2
  67. package/dialog/body/dialog-body.component.d.ts +0 -2
  68. package/dialog/confirm/confirm.component.d.ts +2 -3
  69. package/dialog/dialog-container.component.d.ts +4 -5
  70. package/dialog/dialog.service.d.ts +4 -4
  71. package/dialog/footer/dialog-footer.component.d.ts +2 -2
  72. package/dialog/header/dialog-header.component.d.ts +2 -6
  73. package/divider/divider.component.d.ts +8 -2
  74. package/dot/dot.component.d.ts +1 -2
  75. package/drag-drop/drag-content.directive.d.ts +2 -3
  76. package/drag-drop/drag-handle.directive.d.ts +2 -3
  77. package/drag-drop/drag.directive.d.ts +4 -5
  78. package/drag-drop/drop-container.directive.d.ts +6 -3
  79. package/dropdown/dropdown-active.directive.d.ts +3 -4
  80. package/dropdown/dropdown-menu-item.directive.d.ts +1 -2
  81. package/dropdown/dropdown-submenu.component.d.ts +1 -3
  82. package/dropdown/dropdown.directive.d.ts +3 -5
  83. package/empty/empty.component.d.ts +6 -6
  84. package/esm2022/action/action.component.mjs +20 -21
  85. package/esm2022/affix/affix.component.mjs +11 -14
  86. package/esm2022/alert/alert.component.mjs +55 -81
  87. package/esm2022/anchor/anchor-link.component.mjs +23 -16
  88. package/esm2022/anchor/anchor.component.mjs +27 -24
  89. package/esm2022/arrow-switcher/arrow-switcher.component.mjs +25 -26
  90. package/esm2022/autocomplete/autocomplete.component.mjs +11 -11
  91. package/esm2022/autocomplete/autocomplete.trigger.directive.mjs +30 -37
  92. package/esm2022/autocomplete/overlay/autocomplete-container.component.mjs +11 -15
  93. package/esm2022/autocomplete/overlay/autocomplete.service.mjs +14 -21
  94. package/esm2022/avatar/avatar-list/avatar-list.component.mjs +4 -4
  95. package/esm2022/avatar/avatar.component.mjs +27 -28
  96. package/esm2022/avatar/avatar.pipe.mjs +6 -7
  97. package/esm2022/back-top/back-top.component.mjs +14 -18
  98. package/esm2022/badge/badge.component.mjs +8 -9
  99. package/esm2022/breadcrumb/breadcrumb-item.component.mjs +7 -7
  100. package/esm2022/breadcrumb/breadcrumb.component.mjs +15 -17
  101. package/esm2022/button/button-icon.component.mjs +4 -4
  102. package/esm2022/button/button.component.mjs +15 -15
  103. package/esm2022/calendar/calendar-header.component.mjs +15 -15
  104. package/esm2022/calendar/calendar.component.mjs +14 -15
  105. package/esm2022/card/header.component.mjs +4 -4
  106. package/esm2022/carousel/carousel-item.directive.mjs +7 -6
  107. package/esm2022/carousel/carousel.component.mjs +13 -15
  108. package/esm2022/carousel/carousel.service.mjs +7 -9
  109. package/esm2022/cascader/cascader-li.component.mjs +4 -4
  110. package/esm2022/cascader/cascader-search-option.component.mjs +4 -4
  111. package/esm2022/cascader/cascader.component.mjs +15 -22
  112. package/esm2022/checkbox/checkbox.component.mjs +11 -13
  113. package/esm2022/collapse/collapse-item.component.mjs +21 -24
  114. package/esm2022/color-picker/color-picker-panel.component.mjs +14 -15
  115. package/esm2022/color-picker/color-picker.component.mjs +10 -11
  116. package/esm2022/color-picker/coordinates.directive.mjs +10 -10
  117. package/esm2022/color-picker/parts/alpha/alpha.component.mjs +6 -6
  118. package/esm2022/color-picker/parts/hue/hue.component.mjs +6 -6
  119. package/esm2022/color-picker/parts/saturation/saturation.component.mjs +9 -9
  120. package/esm2022/comment/comment.component.mjs +4 -4
  121. package/esm2022/copy/copy.directive.mjs +8 -12
  122. package/esm2022/core/click-positioner.mjs +6 -7
  123. package/esm2022/core/scroll.mjs +7 -9
  124. package/esm2022/core/store/store.mjs +1 -1
  125. package/esm2022/core/update-host-class.service.mjs +6 -6
  126. package/esm2022/date-picker/abstract-picker.component.mjs +5 -5
  127. package/esm2022/date-picker/abstract-picker.directive.mjs +42 -44
  128. package/esm2022/date-picker/base-picker.component.mjs +26 -26
  129. package/esm2022/date-picker/date-picker.component.mjs +10 -11
  130. package/esm2022/date-picker/date-picker.directive.mjs +6 -8
  131. package/esm2022/date-picker/date-picker.service.mjs +6 -10
  132. package/esm2022/date-picker/index.mjs +27 -28
  133. package/esm2022/date-picker/lib/calendar/calendar-footer.component.mjs +7 -8
  134. package/esm2022/date-picker/lib/calendar/calendar-header.component.mjs +6 -7
  135. package/esm2022/date-picker/lib/date/date-header.component.mjs +6 -12
  136. package/esm2022/date-picker/lib/date/date-table-cell.component.mjs +4 -4
  137. package/esm2022/date-picker/lib/date/date-table.component.mjs +10 -12
  138. package/esm2022/date-picker/lib/date-carousel/date-carousel.component.mjs +16 -16
  139. package/esm2022/date-picker/lib/decade/decade-header.component.mjs +8 -11
  140. package/esm2022/date-picker/lib/decade/decade-table.component.mjs +4 -4
  141. package/esm2022/date-picker/lib/month/month-header.component.mjs +6 -12
  142. package/esm2022/date-picker/lib/month/month-table.component.mjs +9 -10
  143. package/esm2022/date-picker/lib/popups/date-popup.component.mjs +14 -29
  144. package/esm2022/date-picker/lib/popups/inner-popup.component.mjs +14 -20
  145. package/esm2022/date-picker/lib/quarter/quarter-table.component.mjs +9 -10
  146. package/esm2022/date-picker/lib/year/year-header.component.mjs +6 -12
  147. package/esm2022/date-picker/lib/year/year-table.component.mjs +4 -4
  148. package/esm2022/date-picker/month-picker.component.mjs +9 -11
  149. package/esm2022/date-picker/picker.component.mjs +24 -35
  150. package/esm2022/date-picker/picker.pipes.mjs +10 -11
  151. package/esm2022/date-picker/quarter-picker.component.mjs +9 -11
  152. package/esm2022/date-picker/range-picker.component.mjs +9 -11
  153. package/esm2022/date-picker/range-picker.directive.mjs +6 -8
  154. package/esm2022/date-picker/week-picker.component.mjs +9 -11
  155. package/esm2022/date-picker/year-picker.component.mjs +9 -11
  156. package/esm2022/date-range/date-range.component.mjs +17 -18
  157. package/esm2022/date-range/optional-dates/optional-dates.component.mjs +9 -13
  158. package/esm2022/dialog/body/dialog-body.component.mjs +11 -12
  159. package/esm2022/dialog/confirm/confirm.component.mjs +10 -14
  160. package/esm2022/dialog/dialog-container.component.mjs +13 -18
  161. package/esm2022/dialog/dialog.service.mjs +10 -17
  162. package/esm2022/dialog/footer/dialog-footer.component.mjs +10 -14
  163. package/esm2022/dialog/header/dialog-header.component.mjs +17 -22
  164. package/esm2022/divider/divider.component.mjs +21 -13
  165. package/esm2022/dot/dot.component.mjs +7 -7
  166. package/esm2022/drag-drop/drag-content.directive.mjs +7 -9
  167. package/esm2022/drag-drop/drag-handle.directive.mjs +7 -9
  168. package/esm2022/drag-drop/drag.directive.mjs +13 -16
  169. package/esm2022/drag-drop/drop-container.directive.mjs +13 -13
  170. package/esm2022/dropdown/dropdown-active.directive.mjs +9 -12
  171. package/esm2022/dropdown/dropdown-menu-item.directive.mjs +12 -12
  172. package/esm2022/dropdown/dropdown-menu.component.mjs +11 -7
  173. package/esm2022/dropdown/dropdown-submenu.component.mjs +9 -10
  174. package/esm2022/dropdown/dropdown.directive.mjs +12 -10
  175. package/esm2022/empty/empty.component.mjs +17 -20
  176. package/esm2022/flexible-text/flexible-text.component.mjs +16 -17
  177. package/esm2022/form/form-group-error/form-group-error.component.mjs +12 -15
  178. package/esm2022/form/form-group-label.directive.mjs +9 -10
  179. package/esm2022/form/form-group.component.mjs +18 -22
  180. package/esm2022/form/form-submit.directive.mjs +6 -7
  181. package/esm2022/form/form-validator-loader.mjs +1 -1
  182. package/esm2022/form/form-validator.service.mjs +12 -13
  183. package/esm2022/form/form.directive.mjs +11 -16
  184. package/esm2022/form/from-group-footer/form-group-footer.component.mjs +13 -19
  185. package/esm2022/form/validator/unique-validator.directive.mjs +7 -10
  186. package/esm2022/fullscreen/fullscreen.component.mjs +10 -11
  187. package/esm2022/fullscreen/fullscreen.service.mjs +7 -10
  188. package/esm2022/grid/thy-col.directive.mjs +9 -14
  189. package/esm2022/grid/thy-grid-item.component.mjs +8 -14
  190. package/esm2022/grid/thy-grid.component.mjs +7 -8
  191. package/esm2022/guider/guider-hint/guider-hint.component.mjs +4 -4
  192. package/esm2022/guider/guider.directive.mjs +8 -9
  193. package/esm2022/guider/guider.service.mjs +12 -19
  194. package/esm2022/icon/icon-registry.mjs +11 -16
  195. package/esm2022/icon/icon.component.mjs +8 -9
  196. package/esm2022/image/image-group.component.mjs +7 -7
  197. package/esm2022/image/image.directive.mjs +11 -12
  198. package/esm2022/image/image.service.mjs +8 -14
  199. package/esm2022/image/preview/image-preview.component.mjs +36 -41
  200. package/esm2022/input/input-count.component.mjs +7 -10
  201. package/esm2022/input/input-group.component.mjs +15 -16
  202. package/esm2022/input/input-search.component.mjs +9 -10
  203. package/esm2022/input/input.component.mjs +17 -17
  204. package/esm2022/input/input.directive.mjs +12 -17
  205. package/esm2022/input-number/input-number.component.mjs +6 -6
  206. package/esm2022/layout/header.component.mjs +4 -4
  207. package/esm2022/layout/sidebar-header.component.mjs +4 -4
  208. package/esm2022/layout/sidebar.component.mjs +125 -121
  209. package/esm2022/list/list-item-meta.component.mjs +4 -4
  210. package/esm2022/list/selection/selection-list.mjs +25 -25
  211. package/esm2022/loading/loading.component.mjs +10 -11
  212. package/esm2022/mention/mention.directive.mjs +9 -14
  213. package/esm2022/mention/suggestions/suggestions.component.mjs +11 -12
  214. package/esm2022/menu/group/menu-group.component.mjs +37 -38
  215. package/esm2022/menu/item/action/menu-item-action.component.mjs +15 -16
  216. package/esm2022/menu/item/menu-item.component.mjs +8 -9
  217. package/esm2022/message/abstract/abstract-message-container.component.mjs +5 -5
  218. package/esm2022/message/abstract/abstract-message.component.mjs +6 -6
  219. package/esm2022/message/message-container.component.mjs +21 -15
  220. package/esm2022/message/message-queue.service.mjs +6 -8
  221. package/esm2022/message/message.component.mjs +9 -10
  222. package/esm2022/message/message.service.mjs +10 -11
  223. package/esm2022/nav/icon-nav/icon-nav-link.directive.mjs +4 -5
  224. package/esm2022/nav/icon-nav/icon-nav.component.mjs +6 -6
  225. package/esm2022/nav/nav-ink-bar.directive.mjs +9 -14
  226. package/esm2022/nav/nav-item.directive.mjs +8 -11
  227. package/esm2022/nav/nav.component.mjs +35 -38
  228. package/esm2022/nav/nav.pipe.mjs +6 -7
  229. package/esm2022/notify/notify-container.component.mjs +11 -14
  230. package/esm2022/notify/notify-queue.service.mjs +6 -8
  231. package/esm2022/notify/notify.component.mjs +10 -10
  232. package/esm2022/notify/notify.service.mjs +11 -12
  233. package/esm2022/pagination/pagination.component.mjs +41 -46
  234. package/esm2022/pagination/pagination.pipe.mjs +6 -7
  235. package/esm2022/popover/header/popover-header.component.mjs +15 -17
  236. package/esm2022/popover/popover-container.component.mjs +11 -13
  237. package/esm2022/popover/popover.directive.mjs +13 -12
  238. package/esm2022/popover/popover.service.mjs +14 -26
  239. package/esm2022/progress/progress-circle.component.mjs +4 -7
  240. package/esm2022/progress/progress-strip.component.mjs +10 -13
  241. package/esm2022/progress/progress.component.mjs +5 -8
  242. package/esm2022/property/property-item.component.mjs +13 -16
  243. package/esm2022/property-operation/property-operation.component.mjs +27 -28
  244. package/esm2022/radio/button/radio-button.component.mjs +9 -15
  245. package/esm2022/radio/group/radio-group.component.mjs +17 -17
  246. package/esm2022/radio/radio.component.mjs +12 -18
  247. package/esm2022/rate/rate.component.mjs +10 -10
  248. package/esm2022/resizable/resizable.directive.mjs +10 -12
  249. package/esm2022/resizable/resizable.service.mjs +7 -9
  250. package/esm2022/resizable/resize-handle.component.mjs +16 -14
  251. package/esm2022/resizable/resize-handles.component.mjs +12 -5
  252. package/esm2022/result/result.component.mjs +4 -4
  253. package/esm2022/segment/segment-item.component.mjs +15 -18
  254. package/esm2022/segment/segment.component.mjs +29 -30
  255. package/esm2022/select/custom-select/custom-select.component.mjs +19 -35
  256. package/esm2022/select/native-select/native-select.component.mjs +10 -11
  257. package/esm2022/shared/base-form-check.component.mjs +7 -8
  258. package/esm2022/shared/directives/string-or-template-outlet.directive.mjs +7 -7
  259. package/esm2022/shared/directives/thy-autofocus.directive.mjs +10 -10
  260. package/esm2022/shared/directives/thy-contextmenu.directive.mjs +8 -8
  261. package/esm2022/shared/directives/thy-ctrl-enter.directive.mjs +8 -8
  262. package/esm2022/shared/directives/thy-enter.directive.mjs +8 -8
  263. package/esm2022/shared/directives/thy-scroll.directive.mjs +21 -21
  264. package/esm2022/shared/directives/thy-show.mjs +11 -11
  265. package/esm2022/shared/directives/thy-stop-propagation.directive.mjs +7 -5
  266. package/esm2022/shared/directives/view-outlet.directive.mjs +7 -7
  267. package/esm2022/shared/ng-transclude.directive.mjs +6 -5
  268. package/esm2022/shared/option/group/option-group.component.mjs +10 -10
  269. package/esm2022/shared/option/list-option/list-option.component.mjs +14 -22
  270. package/esm2022/shared/option/option.component.mjs +11 -22
  271. package/esm2022/shared/select/select-control/select-control.component.mjs +27 -27
  272. package/esm2022/skeleton/skeleton-circle.component.mjs +7 -15
  273. package/esm2022/skeleton/skeleton-rectangle.component.mjs +7 -15
  274. package/esm2022/skeleton/stylized/bullet-list.component.mjs +8 -9
  275. package/esm2022/skeleton/stylized/list.component.mjs +8 -9
  276. package/esm2022/skeleton/stylized/paragraph.component.mjs +8 -9
  277. package/esm2022/slide/drawer/drawer-container.directive.mjs +6 -6
  278. package/esm2022/slide/slide-container.component.mjs +12 -16
  279. package/esm2022/slide/slide-header/slide-header.component.mjs +13 -14
  280. package/esm2022/slide/slide-ref.service.mjs +1 -1
  281. package/esm2022/slide/slide.service.mjs +8 -12
  282. package/esm2022/slider/slider.component.mjs +8 -8
  283. package/esm2022/space/space.component.mjs +16 -16
  284. package/esm2022/statistic/statistic.component.mjs +23 -23
  285. package/esm2022/stepper/step.component.mjs +6 -11
  286. package/esm2022/stepper/stepper-button.directive.mjs +10 -11
  287. package/esm2022/stepper/stepper.component.mjs +5 -5
  288. package/esm2022/strength/strength.component.mjs +11 -12
  289. package/esm2022/switch/switch.component.mjs +11 -11
  290. package/esm2022/table/table-column.component.mjs +58 -63
  291. package/esm2022/table/table-skeleton.component.mjs +35 -38
  292. package/esm2022/table/table.component.mjs +19 -29
  293. package/esm2022/tabs/tab-content.component.mjs +9 -9
  294. package/esm2022/tabs/tabs.component.mjs +22 -25
  295. package/esm2022/tag/tag.component.mjs +22 -22
  296. package/esm2022/time-picker/inner/inner-time-picker.component.mjs +12 -12
  297. package/esm2022/time-picker/time-picker-panel.component.mjs +31 -34
  298. package/esm2022/time-picker/time-picker.component.mjs +33 -43
  299. package/esm2022/timeline/timeline-item.component.mjs +15 -16
  300. package/esm2022/timeline/timeline.component.mjs +15 -16
  301. package/esm2022/tooltip/tooltip.component.mjs +17 -17
  302. package/esm2022/tooltip/tooltip.directive.mjs +11 -10
  303. package/esm2022/tooltip/tooltip.service.mjs +9 -13
  304. package/esm2022/transfer/transfer-list.component.mjs +9 -9
  305. package/esm2022/transfer/transfer.component.mjs +4 -4
  306. package/esm2022/tree/tree-node.component.mjs +16 -20
  307. package/esm2022/tree/tree.component.mjs +90 -96
  308. package/esm2022/tree-select/tree-select.component.mjs +28 -36
  309. package/esm2022/typography/bg-color.directive.mjs +9 -9
  310. package/esm2022/typography/text/text.component.mjs +3 -4
  311. package/esm2022/typography/text-color.directive.mjs +9 -9
  312. package/esm2022/upload/file-drop.directive.mjs +1 -1
  313. package/esm2022/upload/file-select-base.mjs +5 -6
  314. package/esm2022/upload/file-select.component.mjs +4 -3
  315. package/esm2022/upload/upload.service.mjs +6 -7
  316. package/esm2022/version.mjs +2 -2
  317. package/esm2022/vote/vote.component.mjs +4 -4
  318. package/esm2022/watermark/watermark.directive.mjs +12 -12
  319. package/fesm2022/ngx-tethys-action.mjs +20 -20
  320. package/fesm2022/ngx-tethys-action.mjs.map +1 -1
  321. package/fesm2022/ngx-tethys-affix.mjs +12 -14
  322. package/fesm2022/ngx-tethys-affix.mjs.map +1 -1
  323. package/fesm2022/ngx-tethys-alert.mjs +54 -80
  324. package/fesm2022/ngx-tethys-alert.mjs.map +1 -1
  325. package/fesm2022/ngx-tethys-anchor.mjs +48 -35
  326. package/fesm2022/ngx-tethys-anchor.mjs.map +1 -1
  327. package/fesm2022/ngx-tethys-arrow-switcher.mjs +25 -25
  328. package/fesm2022/ngx-tethys-arrow-switcher.mjs.map +1 -1
  329. package/fesm2022/ngx-tethys-autocomplete.mjs +63 -75
  330. package/fesm2022/ngx-tethys-autocomplete.mjs.map +1 -1
  331. package/fesm2022/ngx-tethys-avatar.mjs +32 -32
  332. package/fesm2022/ngx-tethys-avatar.mjs.map +1 -1
  333. package/fesm2022/ngx-tethys-back-top.mjs +15 -18
  334. package/fesm2022/ngx-tethys-back-top.mjs.map +1 -1
  335. package/fesm2022/ngx-tethys-badge.mjs +8 -8
  336. package/fesm2022/ngx-tethys-badge.mjs.map +1 -1
  337. package/fesm2022/ngx-tethys-breadcrumb.mjs +19 -21
  338. package/fesm2022/ngx-tethys-breadcrumb.mjs.map +1 -1
  339. package/fesm2022/ngx-tethys-button.mjs +16 -16
  340. package/fesm2022/ngx-tethys-button.mjs.map +1 -1
  341. package/fesm2022/ngx-tethys-calendar.mjs +26 -26
  342. package/fesm2022/ngx-tethys-calendar.mjs.map +1 -1
  343. package/fesm2022/ngx-tethys-card.mjs +3 -3
  344. package/fesm2022/ngx-tethys-card.mjs.map +1 -1
  345. package/fesm2022/ngx-tethys-carousel.mjs +23 -24
  346. package/fesm2022/ngx-tethys-carousel.mjs.map +1 -1
  347. package/fesm2022/ngx-tethys-cascader.mjs +19 -25
  348. package/fesm2022/ngx-tethys-cascader.mjs.map +1 -1
  349. package/fesm2022/ngx-tethys-checkbox.mjs +10 -11
  350. package/fesm2022/ngx-tethys-checkbox.mjs.map +1 -1
  351. package/fesm2022/ngx-tethys-collapse.mjs +20 -22
  352. package/fesm2022/ngx-tethys-collapse.mjs.map +1 -1
  353. package/fesm2022/ngx-tethys-color-picker.mjs +47 -45
  354. package/fesm2022/ngx-tethys-color-picker.mjs.map +1 -1
  355. package/fesm2022/ngx-tethys-comment.mjs +3 -3
  356. package/fesm2022/ngx-tethys-comment.mjs.map +1 -1
  357. package/fesm2022/ngx-tethys-copy.mjs +8 -12
  358. package/fesm2022/ngx-tethys-copy.mjs.map +1 -1
  359. package/fesm2022/ngx-tethys-core.mjs +14 -16
  360. package/fesm2022/ngx-tethys-core.mjs.map +1 -1
  361. package/fesm2022/ngx-tethys-date-picker.mjs +2872 -2924
  362. package/fesm2022/ngx-tethys-date-picker.mjs.map +1 -1
  363. package/fesm2022/ngx-tethys-date-range.mjs +24 -26
  364. package/fesm2022/ngx-tethys-date-range.mjs.map +1 -1
  365. package/fesm2022/ngx-tethys-dialog.mjs +61 -77
  366. package/fesm2022/ngx-tethys-dialog.mjs.map +1 -1
  367. package/fesm2022/ngx-tethys-divider.mjs +20 -12
  368. package/fesm2022/ngx-tethys-divider.mjs.map +1 -1
  369. package/fesm2022/ngx-tethys-dot.mjs +6 -6
  370. package/fesm2022/ngx-tethys-dot.mjs.map +1 -1
  371. package/fesm2022/ngx-tethys-drag-drop.mjs +33 -37
  372. package/fesm2022/ngx-tethys-drag-drop.mjs.map +1 -1
  373. package/fesm2022/ngx-tethys-dropdown.mjs +49 -43
  374. package/fesm2022/ngx-tethys-dropdown.mjs.map +1 -1
  375. package/fesm2022/ngx-tethys-empty.mjs +18 -18
  376. package/fesm2022/ngx-tethys-empty.mjs.map +1 -1
  377. package/fesm2022/ngx-tethys-flexible-text.mjs +16 -17
  378. package/fesm2022/ngx-tethys-flexible-text.mjs.map +1 -1
  379. package/fesm2022/ngx-tethys-form.mjs +74 -89
  380. package/fesm2022/ngx-tethys-form.mjs.map +1 -1
  381. package/fesm2022/ngx-tethys-fullscreen.mjs +14 -17
  382. package/fesm2022/ngx-tethys-fullscreen.mjs.map +1 -1
  383. package/fesm2022/ngx-tethys-grid.mjs +20 -29
  384. package/fesm2022/ngx-tethys-grid.mjs.map +1 -1
  385. package/fesm2022/ngx-tethys-guider.mjs +20 -26
  386. package/fesm2022/ngx-tethys-guider.mjs.map +1 -1
  387. package/fesm2022/ngx-tethys-icon.mjs +18 -22
  388. package/fesm2022/ngx-tethys-icon.mjs.map +1 -1
  389. package/fesm2022/ngx-tethys-image.mjs +60 -65
  390. package/fesm2022/ngx-tethys-image.mjs.map +1 -1
  391. package/fesm2022/ngx-tethys-input-number.mjs +5 -5
  392. package/fesm2022/ngx-tethys-input-number.mjs.map +1 -1
  393. package/fesm2022/ngx-tethys-input.mjs +53 -60
  394. package/fesm2022/ngx-tethys-input.mjs.map +1 -1
  395. package/fesm2022/ngx-tethys-layout.mjs +129 -124
  396. package/fesm2022/ngx-tethys-layout.mjs.map +1 -1
  397. package/fesm2022/ngx-tethys-list.mjs +27 -27
  398. package/fesm2022/ngx-tethys-list.mjs.map +1 -1
  399. package/fesm2022/ngx-tethys-loading.mjs +10 -10
  400. package/fesm2022/ngx-tethys-loading.mjs.map +1 -1
  401. package/fesm2022/ngx-tethys-mention.mjs +19 -24
  402. package/fesm2022/ngx-tethys-mention.mjs.map +1 -1
  403. package/fesm2022/ngx-tethys-menu.mjs +56 -57
  404. package/fesm2022/ngx-tethys-menu.mjs.map +1 -1
  405. package/fesm2022/ngx-tethys-message.mjs +47 -41
  406. package/fesm2022/ngx-tethys-message.mjs.map +1 -1
  407. package/fesm2022/ngx-tethys-nav.mjs +61 -72
  408. package/fesm2022/ngx-tethys-nav.mjs.map +1 -1
  409. package/fesm2022/ngx-tethys-notify.mjs +31 -34
  410. package/fesm2022/ngx-tethys-notify.mjs.map +1 -1
  411. package/fesm2022/ngx-tethys-pagination.mjs +46 -51
  412. package/fesm2022/ngx-tethys-pagination.mjs.map +1 -1
  413. package/fesm2022/ngx-tethys-popover.mjs +51 -57
  414. package/fesm2022/ngx-tethys-popover.mjs.map +1 -1
  415. package/fesm2022/ngx-tethys-progress.mjs +15 -24
  416. package/fesm2022/ngx-tethys-progress.mjs.map +1 -1
  417. package/fesm2022/ngx-tethys-property-operation.mjs +27 -27
  418. package/fesm2022/ngx-tethys-property-operation.mjs.map +1 -1
  419. package/fesm2022/ngx-tethys-property.mjs +14 -14
  420. package/fesm2022/ngx-tethys-property.mjs.map +1 -1
  421. package/fesm2022/ngx-tethys-radio.mjs +33 -39
  422. package/fesm2022/ngx-tethys-radio.mjs.map +1 -1
  423. package/fesm2022/ngx-tethys-rate.mjs +9 -9
  424. package/fesm2022/ngx-tethys-rate.mjs.map +1 -1
  425. package/fesm2022/ngx-tethys-resizable.mjs +43 -34
  426. package/fesm2022/ngx-tethys-resizable.mjs.map +1 -1
  427. package/fesm2022/ngx-tethys-result.mjs +3 -3
  428. package/fesm2022/ngx-tethys-result.mjs.map +1 -1
  429. package/fesm2022/ngx-tethys-segment.mjs +41 -44
  430. package/fesm2022/ngx-tethys-segment.mjs.map +1 -1
  431. package/fesm2022/ngx-tethys-select.mjs +28 -44
  432. package/fesm2022/ngx-tethys-select.mjs.map +1 -1
  433. package/fesm2022/ngx-tethys-shared.mjs +135 -150
  434. package/fesm2022/ngx-tethys-shared.mjs.map +1 -1
  435. package/fesm2022/ngx-tethys-skeleton.mjs +33 -47
  436. package/fesm2022/ngx-tethys-skeleton.mjs.map +1 -1
  437. package/fesm2022/ngx-tethys-slide.mjs +33 -37
  438. package/fesm2022/ngx-tethys-slide.mjs.map +1 -1
  439. package/fesm2022/ngx-tethys-slider.mjs +7 -7
  440. package/fesm2022/ngx-tethys-slider.mjs.map +1 -1
  441. package/fesm2022/ngx-tethys-space.mjs +16 -16
  442. package/fesm2022/ngx-tethys-space.mjs.map +1 -1
  443. package/fesm2022/ngx-tethys-statistic.mjs +22 -22
  444. package/fesm2022/ngx-tethys-statistic.mjs.map +1 -1
  445. package/fesm2022/ngx-tethys-stepper.mjs +17 -22
  446. package/fesm2022/ngx-tethys-stepper.mjs.map +1 -1
  447. package/fesm2022/ngx-tethys-strength.mjs +11 -11
  448. package/fesm2022/ngx-tethys-strength.mjs.map +1 -1
  449. package/fesm2022/ngx-tethys-switch.mjs +10 -10
  450. package/fesm2022/ngx-tethys-switch.mjs.map +1 -1
  451. package/fesm2022/ngx-tethys-table.mjs +107 -124
  452. package/fesm2022/ngx-tethys-table.mjs.map +1 -1
  453. package/fesm2022/ngx-tethys-tabs.mjs +29 -32
  454. package/fesm2022/ngx-tethys-tabs.mjs.map +1 -1
  455. package/fesm2022/ngx-tethys-tag.mjs +21 -21
  456. package/fesm2022/ngx-tethys-tag.mjs.map +1 -1
  457. package/fesm2022/ngx-tethys-time-picker.mjs +70 -80
  458. package/fesm2022/ngx-tethys-time-picker.mjs.map +1 -1
  459. package/fesm2022/ngx-tethys-timeline.mjs +26 -26
  460. package/fesm2022/ngx-tethys-timeline.mjs.map +1 -1
  461. package/fesm2022/ngx-tethys-tooltip.mjs +35 -36
  462. package/fesm2022/ngx-tethys-tooltip.mjs.map +1 -1
  463. package/fesm2022/ngx-tethys-transfer.mjs +10 -10
  464. package/fesm2022/ngx-tethys-transfer.mjs.map +1 -1
  465. package/fesm2022/ngx-tethys-tree-select.mjs +29 -37
  466. package/fesm2022/ngx-tethys-tree-select.mjs.map +1 -1
  467. package/fesm2022/ngx-tethys-tree.mjs +102 -110
  468. package/fesm2022/ngx-tethys-tree.mjs.map +1 -1
  469. package/fesm2022/ngx-tethys-typography.mjs +18 -18
  470. package/fesm2022/ngx-tethys-typography.mjs.map +1 -1
  471. package/fesm2022/ngx-tethys-upload.mjs +11 -12
  472. package/fesm2022/ngx-tethys-upload.mjs.map +1 -1
  473. package/fesm2022/ngx-tethys-vote.mjs +3 -3
  474. package/fesm2022/ngx-tethys-vote.mjs.map +1 -1
  475. package/fesm2022/ngx-tethys-watermark.mjs +12 -12
  476. package/fesm2022/ngx-tethys-watermark.mjs.map +1 -1
  477. package/fesm2022/ngx-tethys.mjs +1 -1
  478. package/fesm2022/ngx-tethys.mjs.map +1 -1
  479. package/flexible-text/flexible-text.component.d.ts +1 -3
  480. package/form/form-group-error/form-group-error.component.d.ts +1 -3
  481. package/form/form-group-label.directive.d.ts +0 -2
  482. package/form/form-group.component.d.ts +1 -4
  483. package/form/form-submit.directive.d.ts +0 -2
  484. package/form/form-validator.service.d.ts +0 -2
  485. package/form/form.directive.d.ts +4 -4
  486. package/form/from-group-footer/form-group-footer.component.d.ts +2 -4
  487. package/form/validator/unique-validator.directive.d.ts +1 -4
  488. package/fullscreen/fullscreen.component.d.ts +0 -2
  489. package/fullscreen/fullscreen.service.d.ts +0 -2
  490. package/grid/thy-col.directive.d.ts +1 -2
  491. package/grid/thy-grid-item.component.d.ts +2 -4
  492. package/grid/thy-grid.component.d.ts +1 -3
  493. package/guider/guider.directive.d.ts +1 -3
  494. package/guider/guider.service.d.ts +0 -7
  495. package/icon/icon-registry.d.ts +1 -3
  496. package/icon/icon.component.d.ts +1 -3
  497. package/image/image-group.component.d.ts +1 -2
  498. package/image/image.directive.d.ts +1 -3
  499. package/image/image.service.d.ts +2 -2
  500. package/image/preview/image-preview.component.d.ts +1 -4
  501. package/input/input-count.component.d.ts +3 -4
  502. package/input/input-group.component.d.ts +1 -3
  503. package/input/input-search.component.d.ts +2 -2
  504. package/input/input.component.d.ts +1 -2
  505. package/input/input.directive.d.ts +2 -3
  506. package/input-number/input-number.component.d.ts +2 -2
  507. package/layout/sidebar.component.d.ts +44 -13
  508. package/list/selection/selection-list.d.ts +1 -2
  509. package/loading/loading.component.d.ts +0 -2
  510. package/loading/styles/loading.scss +3 -1
  511. package/mention/mention.directive.d.ts +4 -5
  512. package/mention/suggestions/suggestions.component.d.ts +2 -3
  513. package/menu/group/menu-group.component.d.ts +30 -8
  514. package/menu/item/action/menu-item-action.component.d.ts +2 -3
  515. package/menu/item/menu-item.component.d.ts +1 -2
  516. package/message/abstract/abstract-message-container.component.d.ts +1 -2
  517. package/message/abstract/abstract-message.component.d.ts +2 -2
  518. package/message/message-container.component.d.ts +1 -3
  519. package/message/message-queue.service.d.ts +1 -2
  520. package/message/message.component.d.ts +1 -3
  521. package/message/message.service.d.ts +3 -5
  522. package/nav/icon-nav/icon-nav.component.d.ts +2 -2
  523. package/nav/nav-ink-bar.directive.d.ts +2 -4
  524. package/nav/nav-item.directive.d.ts +3 -4
  525. package/nav/nav.component.d.ts +1 -3
  526. package/nav/nav.pipe.d.ts +0 -2
  527. package/notify/notify-container.component.d.ts +1 -3
  528. package/notify/notify-queue.service.d.ts +1 -2
  529. package/notify/notify.component.d.ts +2 -3
  530. package/notify/notify.service.d.ts +1 -4
  531. package/package.json +1 -1
  532. package/pagination/pagination.component.d.ts +2 -4
  533. package/pagination/pagination.pipe.d.ts +0 -2
  534. package/popover/header/popover-header.component.d.ts +0 -3
  535. package/popover/popover-container.component.d.ts +3 -4
  536. package/popover/popover.directive.d.ts +2 -5
  537. package/popover/popover.service.d.ts +4 -6
  538. package/progress/progress-circle.component.d.ts +0 -1
  539. package/progress/progress-strip.component.d.ts +0 -1
  540. package/progress/progress.component.d.ts +0 -1
  541. package/property/property-item.component.d.ts +6 -9
  542. package/property-operation/property-operation.component.d.ts +1 -3
  543. package/radio/button/radio-button.component.d.ts +2 -5
  544. package/radio/group/radio-group.component.d.ts +1 -2
  545. package/radio/radio.component.d.ts +2 -3
  546. package/rate/rate.component.d.ts +2 -2
  547. package/resizable/resizable.directive.d.ts +2 -4
  548. package/resizable/resizable.service.d.ts +2 -2
  549. package/resizable/resize-handle.component.d.ts +2 -7
  550. package/schematics/version.d.ts +1 -1
  551. package/schematics/version.js +1 -1
  552. package/segment/segment-item.component.d.ts +4 -5
  553. package/segment/segment.component.d.ts +2 -7
  554. package/select/custom-select/custom-select.component.d.ts +5 -5
  555. package/select/native-select/native-select.component.d.ts +1 -1
  556. package/shared/base-form-check.component.d.ts +1 -1
  557. package/shared/directives/string-or-template-outlet.directive.d.ts +1 -2
  558. package/shared/directives/thy-autofocus.directive.d.ts +0 -2
  559. package/shared/directives/thy-contextmenu.directive.d.ts +1 -2
  560. package/shared/directives/thy-ctrl-enter.directive.d.ts +1 -2
  561. package/shared/directives/thy-enter.directive.d.ts +1 -2
  562. package/shared/directives/thy-scroll.directive.d.ts +1 -2
  563. package/shared/directives/thy-show.d.ts +1 -2
  564. package/shared/directives/thy-stop-propagation.directive.d.ts +2 -2
  565. package/shared/directives/view-outlet.directive.d.ts +1 -2
  566. package/shared/ng-transclude.directive.d.ts +1 -1
  567. package/shared/option/group/option-group.component.d.ts +1 -2
  568. package/shared/option/list-option/list-option.component.d.ts +6 -7
  569. package/shared/option/option.component.d.ts +5 -5
  570. package/shared/select/select-control/select-control.component.d.ts +1 -2
  571. package/skeleton/skeleton-circle.component.d.ts +1 -4
  572. package/skeleton/skeleton-rectangle.component.d.ts +5 -5
  573. package/skeleton/stylized/bullet-list.component.d.ts +9 -1
  574. package/slide/drawer/drawer-container.directive.d.ts +1 -2
  575. package/slide/slide-container.component.d.ts +3 -4
  576. package/slide/slide-header/slide-header.component.d.ts +0 -2
  577. package/slide/slide.service.d.ts +3 -3
  578. package/slider/slider.component.d.ts +2 -2
  579. package/space/space.component.d.ts +1 -2
  580. package/statistic/statistic.component.d.ts +1 -2
  581. package/stepper/step.component.d.ts +1 -2
  582. package/stepper/stepper-button.directive.d.ts +0 -3
  583. package/strength/strength.component.d.ts +0 -1
  584. package/switch/switch.component.d.ts +1 -1
  585. package/table/table-column.component.d.ts +32 -8
  586. package/table/table-skeleton.component.d.ts +1 -3
  587. package/table/table.component.d.ts +3 -5
  588. package/tabs/tabs.component.d.ts +1 -3
  589. package/tag/tag.component.d.ts +7 -3
  590. package/time-picker/inner/inner-time-picker.component.d.ts +2 -4
  591. package/time-picker/time-picker-panel.component.d.ts +1 -3
  592. package/time-picker/time-picker.component.d.ts +1 -2
  593. package/timeline/timeline-item.component.d.ts +1 -3
  594. package/timeline/timeline.component.d.ts +1 -3
  595. package/tooltip/tooltip.component.d.ts +1 -2
  596. package/tooltip/tooltip.directive.d.ts +6 -9
  597. package/tooltip/tooltip.service.d.ts +2 -4
  598. package/transfer/transfer-list.component.d.ts +1 -2
  599. package/tree/tree-node.component.d.ts +5 -21
  600. package/tree/tree.component.d.ts +1 -2
  601. package/tree-select/tree-select.component.d.ts +5 -6
  602. package/typography/bg-color.directive.d.ts +0 -2
  603. package/typography/text-color.directive.d.ts +1 -2
  604. package/upload/file-select-base.d.ts +2 -3
  605. package/upload/file-select.component.d.ts +1 -0
  606. package/upload/upload.service.d.ts +0 -2
  607. package/watermark/watermark.directive.d.ts +1 -2
@@ -1,7 +1,7 @@
1
1
  import { endOfDay, startOfDay } from 'date-fns';
2
2
  import { TinyDate, helpers, isFunction, isUndefinedOrNull, sortRangeValue } from 'ngx-tethys/util';
3
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output } from '@angular/core';
4
- import { NgFor, NgIf, NgTemplateOutlet } from '@angular/common';
3
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output, inject } from '@angular/core';
4
+ import { NgTemplateOutlet } from '@angular/common';
5
5
  import { FormsModule } from '@angular/forms';
6
6
  import { ThyButtonIcon } from 'ngx-tethys/button';
7
7
  import { ThyNav, ThyNavItemDirective } from 'ngx-tethys/nav';
@@ -11,18 +11,14 @@ import { CalendarFooter } from '../calendar/calendar-footer.component';
11
11
  import { DateCarousel } from '../date-carousel/date-carousel.component';
12
12
  import { InnerPopup } from './inner-popup.component';
13
13
  import * as i0 from "@angular/core";
14
- import * as i1 from "../../date-picker.service";
15
- import * as i2 from "@angular/forms";
14
+ import * as i1 from "@angular/forms";
16
15
  /**
17
16
  * @private
18
17
  */
19
18
  export class DatePopup {
20
- get hasTimePicker() {
21
- return !!this.showTime;
22
- }
23
- constructor(cdr, datePickerConfigService) {
24
- this.cdr = cdr;
25
- this.datePickerConfigService = datePickerConfigService;
19
+ constructor() {
20
+ this.cdr = inject(ChangeDetectorRef);
21
+ this.datePickerConfigService = inject(ThyDatePickerConfigService);
26
22
  this.panelModeChange = new EventEmitter();
27
23
  this.calendarChange = new EventEmitter();
28
24
  this.valueChange = new EventEmitter();
@@ -37,6 +33,9 @@ export class DatePopup {
37
33
  this.partTypeMap = { left: 0, right: 1 };
38
34
  this.disableTimeConfirm = false;
39
35
  }
36
+ get hasTimePicker() {
37
+ return !!this.showTime;
38
+ }
40
39
  setProperty(key, value) {
41
40
  this[key] = value;
42
41
  this.cdr.markForCheck();
@@ -485,27 +484,13 @@ export class DatePopup {
485
484
  this.updateActiveDate();
486
485
  }
487
486
  }
488
- trackByFn(index) {
489
- return index;
490
- }
491
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: DatePopup, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.ThyDatePickerConfigService }], target: i0.ɵɵFactoryTarget.Component }); }
492
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: DatePopup, isStandalone: true, selector: "date-popup", inputs: { isRange: "isRange", showWeek: "showWeek", format: "format", disabledDate: "disabledDate", minDate: "minDate", maxDate: "maxDate", showToday: "showToday", showTime: "showTime", mustShowTime: "mustShowTime", dateRender: "dateRender", className: "className", panelMode: "panelMode", value: "value", defaultPickerValue: "defaultPickerValue", showShortcut: "showShortcut", shortcutPresets: "shortcutPresets", shortcutPosition: "shortcutPosition", flexible: "flexible", flexibleDateGranularity: "flexibleDateGranularity", timestampPrecision: "timestampPrecision" }, outputs: { panelModeChange: "panelModeChange", calendarChange: "calendarChange", valueChange: "valueChange", resultOk: "resultOk", showTimePickerChange: "showTimePickerChange", dateValueChange: "dateValueChange" }, exportAs: ["datePopup"], usesOnChanges: true, ngImport: i0, template: "<div class=\"{{ prefixCls }}-picker-container {{ className }}\">\n <div\n class=\"{{ prefixCls }} {{ showWeek ? prefixCls + '-week-number' : '' }}\n {{ isRange ? prefixCls + '-range' : '' }} {{ prefixCls }}-picker-shortcut-{{ shortcutPosition === 'left' ? 'left' : 'bottom' }}\">\n <div class=\"{{ prefixCls }}-picker-shortcut\" *ngIf=\"showShortcut\">\n <div\n class=\"{{ prefixCls }}-picker-shortcut-item\"\n [class.disabled]=\"item.disabled\"\n *ngFor=\"let item of innerShortcutPresets; trackBy: trackByFn\"\n (click)=\"shortcutSetValue(item)\">\n {{ item.title }}\n </div>\n </div>\n <div class=\"{{ prefixCls }}-panel\">\n <div class=\"{{ prefixCls }}-date-panel\">\n <ng-container *ngIf=\"flexible; else defaultPanel\">\n <div class=\"{{ prefixCls }}-date-panel-flexible\">\n <div class=\"{{ prefixCls }}-date-panel-flexible-tab\">\n <thy-nav thyType=\"pulled\" thySize=\"sm\">\n <a href=\"javascript:;\" thyNavLink [thyNavLinkActive]=\"flexibleActiveTab === 'advanced'\" (click)=\"selectTab('advanced')\"\n >\u9AD8\u7EA7\u9009\u9879</a\n >\n <a href=\"javascript:;\" thyNavLink [thyNavLinkActive]=\"flexibleActiveTab === 'custom'\" (click)=\"selectTab('custom')\"\n >\u81EA\u5B9A\u4E49</a\n >\n </thy-nav>\n <button thyButtonIcon=\"sweep\" thySize=\"sm\" class=\"clear-date-button\" (click)=\"clearFlexibleValue()\"></button>\n </div>\n <ng-container>\n <div class=\"{{ prefixCls }}-date-panel-advanced\" [hidden]=\"flexibleActiveTab !== 'advanced'\">\n <date-carousel\n name=\"dateCarousel\"\n (ngModelChange)=\"changeValueFromAdvancedSelect($event)\"\n [(ngModel)]=\"advancedSelectedValue\"\n [activeDate]=\"selectedValue[0]\"></date-carousel>\n </div>\n </ng-container>\n <div [hidden]=\"flexibleActiveTab !== 'custom'\">\n <ng-container *ngTemplateOutlet=\"tplInnerPopup\"></ng-container>\n </div>\n </div>\n </ng-container>\n\n <ng-template #defaultPanel>\n <ng-container *ngIf=\"isRange; else tplSinglePart\">\n <ng-container *ngTemplateOutlet=\"tplRangePart; context: { partType: 'left' }\"></ng-container>\n <ng-container *ngTemplateOutlet=\"tplRangePart; context: { partType: 'right' }\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!isRange\">\n <ng-container *ngTemplateOutlet=\"tplFooter\"></ng-container>\n </ng-container>\n </ng-template>\n </div>\n </div>\n </div>\n</div>\n\n<ng-template #tplInnerPopup let-partType=\"partType\">\n <inner-popup\n [showWeek]=\"showWeek\"\n [isRange]=\"isRange\"\n [panelMode]=\"getPanelMode(panelMode, partType)\"\n [endPanelMode]=\"getPanelMode(endPanelMode, partType)\"\n [partType]=\"partType\"\n [showDateRangeInput]=\"flexible && flexibleActiveTab === 'custom'\"\n (panelModeChange)=\"onPanelModeChange($event, partType)\"\n [value]=\"getValueBySelector(partType)\"\n [selectedValue]=\"selectedValue\"\n [activeDate]=\"getActiveDate(partType)\"\n [rangeActiveDate]=\"activeDate\"\n [disabledDate]=\"disabledDate\"\n [dateRender]=\"dateRender\"\n [hoverValue]=\"hoverValue\"\n [enablePrev]=\"enablePrevNext('prev', partType)\"\n [enableNext]=\"enablePrevNext('next', partType)\"\n (dayHover)=\"onDayHover($event)\"\n (selectDate)=\"changeValueFromSelect($event, partType)\"\n (headerChange)=\"onHeaderChange($event, partType)\"></inner-popup>\n</ng-template>\n\n<ng-template #tplFooter>\n <calendar-footer\n [showTime]=\"showTime\"\n [mustShowTime]=\"mustShowTime\"\n [value]=\"value\"\n [disableTimeConfirm]=\"disableTimeConfirm\"\n (showTimePickerChange)=\"onShowTimePickerChange($event)\"\n (selectTime)=\"onSelectTime($event)\"\n (clickOk)=\"onClickOk()\"\n (clickRemove)=\"onClickRemove()\"></calendar-footer>\n</ng-template>\n\n<!-- Single ONLY -->\n<ng-template #tplSinglePart>\n <div>\n <ng-container *ngTemplateOutlet=\"tplInnerPopup\"></ng-container>\n </div>\n</ng-template>\n\n<!-- Range ONLY -->\n<ng-template #tplRangePart let-partType=\"partType\">\n <div class=\"{{ prefixCls }}-range-part {{ prefixCls }}-range-{{ partType }}\">\n <div style=\"outline: none\">\n <ng-container *ngTemplateOutlet=\"tplInnerPopup; context: { partType: partType }\"></ng-container>\n </div>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: ThyNav, selector: "thy-nav", inputs: ["thyType", "thySize", "thyHorizontal", "thyVertical", "thyFill", "thyResponsive", "thyInsideClosable", "thyExtra"] }, { kind: "directive", type: ThyNavItemDirective, selector: "[thyNavLink],[thyNavItem]", inputs: ["thyNavItemActive", "thyNavLinkActive", "thyNavItemDisabled"] }, { kind: "component", type: ThyButtonIcon, selector: "thy-button-icon,[thy-button-icon],[thyButtonIcon]", inputs: ["thySize", "thyIcon", "thyButtonIcon", "thyShape", "thyLight", "thyActive", "thyTheme", "thyColor"] }, { kind: "component", type: DateCarousel, selector: "date-carousel", inputs: ["activeDate"] }, { 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: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: InnerPopup, selector: "inner-popup", inputs: ["showWeek", "isRange", "activeDate", "rangeActiveDate", "enablePrev", "enableNext", "disabledDate", "dateRender", "selectedValue", "hoverValue", "panelMode", "showDateRangeInput", "partType", "endPanelMode", "value"], outputs: ["panelModeChange", "headerChange", "selectDate", "dayHover"], exportAs: ["innerPopup"] }, { kind: "component", type: CalendarFooter, selector: "calendar-footer", inputs: ["showTime", "mustShowTime", "value", "disableTimeConfirm"], outputs: ["selectTime", "clickOk", "clickRemove", "showTimePickerChange"], exportAs: ["calendarFooter"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
487
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: DatePopup, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
488
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: DatePopup, isStandalone: true, selector: "date-popup", inputs: { isRange: "isRange", showWeek: "showWeek", format: "format", disabledDate: "disabledDate", minDate: "minDate", maxDate: "maxDate", showToday: "showToday", showTime: "showTime", mustShowTime: "mustShowTime", dateRender: "dateRender", className: "className", panelMode: "panelMode", value: "value", defaultPickerValue: "defaultPickerValue", showShortcut: "showShortcut", shortcutPresets: "shortcutPresets", shortcutPosition: "shortcutPosition", flexible: "flexible", flexibleDateGranularity: "flexibleDateGranularity", timestampPrecision: "timestampPrecision" }, outputs: { panelModeChange: "panelModeChange", calendarChange: "calendarChange", valueChange: "valueChange", resultOk: "resultOk", showTimePickerChange: "showTimePickerChange", dateValueChange: "dateValueChange" }, exportAs: ["datePopup"], usesOnChanges: true, ngImport: i0, template: "<div class=\"{{ prefixCls }}-picker-container {{ className }}\">\n <div\n class=\"{{ prefixCls }} {{ showWeek ? prefixCls + '-week-number' : '' }}\n {{ isRange ? prefixCls + '-range' : '' }} {{ prefixCls }}-picker-shortcut-{{ shortcutPosition === 'left' ? 'left' : 'bottom' }}\">\n @if (showShortcut) {\n <div class=\"{{ prefixCls }}-picker-shortcut\">\n @for (item of innerShortcutPresets; track $index) {\n <div class=\"{{ prefixCls }}-picker-shortcut-item\" [class.disabled]=\"item.disabled\" (click)=\"shortcutSetValue(item)\">\n {{ item.title }}\n </div>\n }\n </div>\n }\n <div class=\"{{ prefixCls }}-panel\">\n <div class=\"{{ prefixCls }}-date-panel\">\n @if (flexible) {\n <div class=\"{{ prefixCls }}-date-panel-flexible\">\n <div class=\"{{ prefixCls }}-date-panel-flexible-tab\">\n <thy-nav thyType=\"pulled\" thySize=\"sm\">\n <a href=\"javascript:;\" thyNavLink [thyNavLinkActive]=\"flexibleActiveTab === 'advanced'\" (click)=\"selectTab('advanced')\"\n >\u9AD8\u7EA7\u9009\u9879</a\n >\n <a href=\"javascript:;\" thyNavLink [thyNavLinkActive]=\"flexibleActiveTab === 'custom'\" (click)=\"selectTab('custom')\"\n >\u81EA\u5B9A\u4E49</a\n >\n </thy-nav>\n <button thyButtonIcon=\"sweep\" thySize=\"sm\" class=\"clear-date-button\" (click)=\"clearFlexibleValue()\"></button>\n </div>\n <ng-container>\n <div class=\"{{ prefixCls }}-date-panel-advanced\" [hidden]=\"flexibleActiveTab !== 'advanced'\">\n <date-carousel\n name=\"dateCarousel\"\n (ngModelChange)=\"changeValueFromAdvancedSelect($event)\"\n [(ngModel)]=\"advancedSelectedValue\"\n [activeDate]=\"selectedValue[0]\"></date-carousel>\n </div>\n </ng-container>\n <div [hidden]=\"flexibleActiveTab !== 'custom'\">\n <ng-container *ngTemplateOutlet=\"tplInnerPopup\"></ng-container>\n </div>\n </div>\n } @else {\n @if (isRange) {\n <ng-container *ngTemplateOutlet=\"tplRangePart; context: { partType: 'left' }\"></ng-container>\n <ng-container *ngTemplateOutlet=\"tplRangePart; context: { partType: 'right' }\"></ng-container>\n } @else {\n <div>\n <ng-container *ngTemplateOutlet=\"tplInnerPopup\"></ng-container>\n </div>\n }\n @if (!isRange) {\n <ng-container *ngTemplateOutlet=\"tplFooter\"></ng-container>\n }\n }\n </div>\n </div>\n </div>\n</div>\n\n<ng-template #tplInnerPopup let-partType=\"partType\">\n <inner-popup\n [showWeek]=\"showWeek\"\n [isRange]=\"isRange\"\n [panelMode]=\"getPanelMode(panelMode, partType)\"\n [endPanelMode]=\"getPanelMode(endPanelMode, partType)\"\n [partType]=\"partType\"\n [showDateRangeInput]=\"flexible && flexibleActiveTab === 'custom'\"\n (panelModeChange)=\"onPanelModeChange($event, partType)\"\n [value]=\"getValueBySelector(partType)\"\n [selectedValue]=\"selectedValue\"\n [activeDate]=\"getActiveDate(partType)\"\n [rangeActiveDate]=\"activeDate\"\n [disabledDate]=\"disabledDate\"\n [dateRender]=\"dateRender\"\n [hoverValue]=\"hoverValue\"\n [enablePrev]=\"enablePrevNext('prev', partType)\"\n [enableNext]=\"enablePrevNext('next', partType)\"\n (dayHover)=\"onDayHover($event)\"\n (selectDate)=\"changeValueFromSelect($event, partType)\"\n (headerChange)=\"onHeaderChange($event, partType)\"></inner-popup>\n</ng-template>\n\n<ng-template #tplFooter>\n <calendar-footer\n [showTime]=\"showTime\"\n [mustShowTime]=\"mustShowTime\"\n [value]=\"value\"\n [disableTimeConfirm]=\"disableTimeConfirm\"\n (showTimePickerChange)=\"onShowTimePickerChange($event)\"\n (selectTime)=\"onSelectTime($event)\"\n (clickOk)=\"onClickOk()\"\n (clickRemove)=\"onClickRemove()\"></calendar-footer>\n</ng-template>\n\n<!-- Single ONLY -->\n\n<!-- Range ONLY -->\n<ng-template #tplRangePart let-partType=\"partType\">\n <div class=\"{{ prefixCls }}-range-part {{ prefixCls }}-range-{{ partType }}\">\n <div style=\"outline: none\">\n <ng-container *ngTemplateOutlet=\"tplInnerPopup; context: { partType: partType }\"></ng-container>\n </div>\n </div>\n</ng-template>\n", dependencies: [{ kind: "component", type: ThyNav, selector: "thy-nav", inputs: ["thyType", "thySize", "thyHorizontal", "thyVertical", "thyFill", "thyResponsive", "thyInsideClosable", "thyExtra"] }, { kind: "directive", type: ThyNavItemDirective, selector: "[thyNavLink],[thyNavItem]", inputs: ["thyNavItemActive", "thyNavLinkActive", "thyNavItemDisabled"] }, { kind: "component", type: ThyButtonIcon, selector: "thy-button-icon,[thy-button-icon],[thyButtonIcon]", inputs: ["thySize", "thyIcon", "thyButtonIcon", "thyShape", "thyLight", "thyActive", "thyTheme", "thyColor"] }, { kind: "component", type: DateCarousel, selector: "date-carousel", inputs: ["activeDate"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: InnerPopup, selector: "inner-popup", inputs: ["showWeek", "isRange", "activeDate", "rangeActiveDate", "enablePrev", "enableNext", "disabledDate", "dateRender", "selectedValue", "hoverValue", "panelMode", "showDateRangeInput", "partType", "endPanelMode", "value"], outputs: ["panelModeChange", "headerChange", "selectDate", "dayHover"], exportAs: ["innerPopup"] }, { kind: "component", type: CalendarFooter, selector: "calendar-footer", inputs: ["showTime", "mustShowTime", "value", "disableTimeConfirm"], outputs: ["selectTime", "clickOk", "clickRemove", "showTimePickerChange"], exportAs: ["calendarFooter"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
493
489
  }
494
490
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: DatePopup, decorators: [{
495
491
  type: Component,
496
- args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'date-popup', exportAs: 'datePopup', standalone: true, imports: [
497
- NgIf,
498
- NgFor,
499
- ThyNav,
500
- ThyNavItemDirective,
501
- ThyButtonIcon,
502
- DateCarousel,
503
- FormsModule,
504
- NgTemplateOutlet,
505
- InnerPopup,
506
- CalendarFooter
507
- ], template: "<div class=\"{{ prefixCls }}-picker-container {{ className }}\">\n <div\n class=\"{{ prefixCls }} {{ showWeek ? prefixCls + '-week-number' : '' }}\n {{ isRange ? prefixCls + '-range' : '' }} {{ prefixCls }}-picker-shortcut-{{ shortcutPosition === 'left' ? 'left' : 'bottom' }}\">\n <div class=\"{{ prefixCls }}-picker-shortcut\" *ngIf=\"showShortcut\">\n <div\n class=\"{{ prefixCls }}-picker-shortcut-item\"\n [class.disabled]=\"item.disabled\"\n *ngFor=\"let item of innerShortcutPresets; trackBy: trackByFn\"\n (click)=\"shortcutSetValue(item)\">\n {{ item.title }}\n </div>\n </div>\n <div class=\"{{ prefixCls }}-panel\">\n <div class=\"{{ prefixCls }}-date-panel\">\n <ng-container *ngIf=\"flexible; else defaultPanel\">\n <div class=\"{{ prefixCls }}-date-panel-flexible\">\n <div class=\"{{ prefixCls }}-date-panel-flexible-tab\">\n <thy-nav thyType=\"pulled\" thySize=\"sm\">\n <a href=\"javascript:;\" thyNavLink [thyNavLinkActive]=\"flexibleActiveTab === 'advanced'\" (click)=\"selectTab('advanced')\"\n >\u9AD8\u7EA7\u9009\u9879</a\n >\n <a href=\"javascript:;\" thyNavLink [thyNavLinkActive]=\"flexibleActiveTab === 'custom'\" (click)=\"selectTab('custom')\"\n >\u81EA\u5B9A\u4E49</a\n >\n </thy-nav>\n <button thyButtonIcon=\"sweep\" thySize=\"sm\" class=\"clear-date-button\" (click)=\"clearFlexibleValue()\"></button>\n </div>\n <ng-container>\n <div class=\"{{ prefixCls }}-date-panel-advanced\" [hidden]=\"flexibleActiveTab !== 'advanced'\">\n <date-carousel\n name=\"dateCarousel\"\n (ngModelChange)=\"changeValueFromAdvancedSelect($event)\"\n [(ngModel)]=\"advancedSelectedValue\"\n [activeDate]=\"selectedValue[0]\"></date-carousel>\n </div>\n </ng-container>\n <div [hidden]=\"flexibleActiveTab !== 'custom'\">\n <ng-container *ngTemplateOutlet=\"tplInnerPopup\"></ng-container>\n </div>\n </div>\n </ng-container>\n\n <ng-template #defaultPanel>\n <ng-container *ngIf=\"isRange; else tplSinglePart\">\n <ng-container *ngTemplateOutlet=\"tplRangePart; context: { partType: 'left' }\"></ng-container>\n <ng-container *ngTemplateOutlet=\"tplRangePart; context: { partType: 'right' }\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!isRange\">\n <ng-container *ngTemplateOutlet=\"tplFooter\"></ng-container>\n </ng-container>\n </ng-template>\n </div>\n </div>\n </div>\n</div>\n\n<ng-template #tplInnerPopup let-partType=\"partType\">\n <inner-popup\n [showWeek]=\"showWeek\"\n [isRange]=\"isRange\"\n [panelMode]=\"getPanelMode(panelMode, partType)\"\n [endPanelMode]=\"getPanelMode(endPanelMode, partType)\"\n [partType]=\"partType\"\n [showDateRangeInput]=\"flexible && flexibleActiveTab === 'custom'\"\n (panelModeChange)=\"onPanelModeChange($event, partType)\"\n [value]=\"getValueBySelector(partType)\"\n [selectedValue]=\"selectedValue\"\n [activeDate]=\"getActiveDate(partType)\"\n [rangeActiveDate]=\"activeDate\"\n [disabledDate]=\"disabledDate\"\n [dateRender]=\"dateRender\"\n [hoverValue]=\"hoverValue\"\n [enablePrev]=\"enablePrevNext('prev', partType)\"\n [enableNext]=\"enablePrevNext('next', partType)\"\n (dayHover)=\"onDayHover($event)\"\n (selectDate)=\"changeValueFromSelect($event, partType)\"\n (headerChange)=\"onHeaderChange($event, partType)\"></inner-popup>\n</ng-template>\n\n<ng-template #tplFooter>\n <calendar-footer\n [showTime]=\"showTime\"\n [mustShowTime]=\"mustShowTime\"\n [value]=\"value\"\n [disableTimeConfirm]=\"disableTimeConfirm\"\n (showTimePickerChange)=\"onShowTimePickerChange($event)\"\n (selectTime)=\"onSelectTime($event)\"\n (clickOk)=\"onClickOk()\"\n (clickRemove)=\"onClickRemove()\"></calendar-footer>\n</ng-template>\n\n<!-- Single ONLY -->\n<ng-template #tplSinglePart>\n <div>\n <ng-container *ngTemplateOutlet=\"tplInnerPopup\"></ng-container>\n </div>\n</ng-template>\n\n<!-- Range ONLY -->\n<ng-template #tplRangePart let-partType=\"partType\">\n <div class=\"{{ prefixCls }}-range-part {{ prefixCls }}-range-{{ partType }}\">\n <div style=\"outline: none\">\n <ng-container *ngTemplateOutlet=\"tplInnerPopup; context: { partType: partType }\"></ng-container>\n </div>\n </div>\n</ng-template>\n" }]
508
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.ThyDatePickerConfigService }], propDecorators: { isRange: [{
492
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'date-popup', exportAs: 'datePopup', standalone: true, imports: [ThyNav, ThyNavItemDirective, ThyButtonIcon, DateCarousel, FormsModule, NgTemplateOutlet, InnerPopup, CalendarFooter], template: "<div class=\"{{ prefixCls }}-picker-container {{ className }}\">\n <div\n class=\"{{ prefixCls }} {{ showWeek ? prefixCls + '-week-number' : '' }}\n {{ isRange ? prefixCls + '-range' : '' }} {{ prefixCls }}-picker-shortcut-{{ shortcutPosition === 'left' ? 'left' : 'bottom' }}\">\n @if (showShortcut) {\n <div class=\"{{ prefixCls }}-picker-shortcut\">\n @for (item of innerShortcutPresets; track $index) {\n <div class=\"{{ prefixCls }}-picker-shortcut-item\" [class.disabled]=\"item.disabled\" (click)=\"shortcutSetValue(item)\">\n {{ item.title }}\n </div>\n }\n </div>\n }\n <div class=\"{{ prefixCls }}-panel\">\n <div class=\"{{ prefixCls }}-date-panel\">\n @if (flexible) {\n <div class=\"{{ prefixCls }}-date-panel-flexible\">\n <div class=\"{{ prefixCls }}-date-panel-flexible-tab\">\n <thy-nav thyType=\"pulled\" thySize=\"sm\">\n <a href=\"javascript:;\" thyNavLink [thyNavLinkActive]=\"flexibleActiveTab === 'advanced'\" (click)=\"selectTab('advanced')\"\n >\u9AD8\u7EA7\u9009\u9879</a\n >\n <a href=\"javascript:;\" thyNavLink [thyNavLinkActive]=\"flexibleActiveTab === 'custom'\" (click)=\"selectTab('custom')\"\n >\u81EA\u5B9A\u4E49</a\n >\n </thy-nav>\n <button thyButtonIcon=\"sweep\" thySize=\"sm\" class=\"clear-date-button\" (click)=\"clearFlexibleValue()\"></button>\n </div>\n <ng-container>\n <div class=\"{{ prefixCls }}-date-panel-advanced\" [hidden]=\"flexibleActiveTab !== 'advanced'\">\n <date-carousel\n name=\"dateCarousel\"\n (ngModelChange)=\"changeValueFromAdvancedSelect($event)\"\n [(ngModel)]=\"advancedSelectedValue\"\n [activeDate]=\"selectedValue[0]\"></date-carousel>\n </div>\n </ng-container>\n <div [hidden]=\"flexibleActiveTab !== 'custom'\">\n <ng-container *ngTemplateOutlet=\"tplInnerPopup\"></ng-container>\n </div>\n </div>\n } @else {\n @if (isRange) {\n <ng-container *ngTemplateOutlet=\"tplRangePart; context: { partType: 'left' }\"></ng-container>\n <ng-container *ngTemplateOutlet=\"tplRangePart; context: { partType: 'right' }\"></ng-container>\n } @else {\n <div>\n <ng-container *ngTemplateOutlet=\"tplInnerPopup\"></ng-container>\n </div>\n }\n @if (!isRange) {\n <ng-container *ngTemplateOutlet=\"tplFooter\"></ng-container>\n }\n }\n </div>\n </div>\n </div>\n</div>\n\n<ng-template #tplInnerPopup let-partType=\"partType\">\n <inner-popup\n [showWeek]=\"showWeek\"\n [isRange]=\"isRange\"\n [panelMode]=\"getPanelMode(panelMode, partType)\"\n [endPanelMode]=\"getPanelMode(endPanelMode, partType)\"\n [partType]=\"partType\"\n [showDateRangeInput]=\"flexible && flexibleActiveTab === 'custom'\"\n (panelModeChange)=\"onPanelModeChange($event, partType)\"\n [value]=\"getValueBySelector(partType)\"\n [selectedValue]=\"selectedValue\"\n [activeDate]=\"getActiveDate(partType)\"\n [rangeActiveDate]=\"activeDate\"\n [disabledDate]=\"disabledDate\"\n [dateRender]=\"dateRender\"\n [hoverValue]=\"hoverValue\"\n [enablePrev]=\"enablePrevNext('prev', partType)\"\n [enableNext]=\"enablePrevNext('next', partType)\"\n (dayHover)=\"onDayHover($event)\"\n (selectDate)=\"changeValueFromSelect($event, partType)\"\n (headerChange)=\"onHeaderChange($event, partType)\"></inner-popup>\n</ng-template>\n\n<ng-template #tplFooter>\n <calendar-footer\n [showTime]=\"showTime\"\n [mustShowTime]=\"mustShowTime\"\n [value]=\"value\"\n [disableTimeConfirm]=\"disableTimeConfirm\"\n (showTimePickerChange)=\"onShowTimePickerChange($event)\"\n (selectTime)=\"onSelectTime($event)\"\n (clickOk)=\"onClickOk()\"\n (clickRemove)=\"onClickRemove()\"></calendar-footer>\n</ng-template>\n\n<!-- Single ONLY -->\n\n<!-- Range ONLY -->\n<ng-template #tplRangePart let-partType=\"partType\">\n <div class=\"{{ prefixCls }}-range-part {{ prefixCls }}-range-{{ partType }}\">\n <div style=\"outline: none\">\n <ng-container *ngTemplateOutlet=\"tplInnerPopup; context: { partType: partType }\"></ng-container>\n </div>\n </div>\n</ng-template>\n" }]
493
+ }], propDecorators: { isRange: [{
509
494
  type: Input
510
495
  }], showWeek: [{
511
496
  type: Input
@@ -558,4 +543,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
558
543
  }], dateValueChange: [{
559
544
  type: Output
560
545
  }] } });
561
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1wb3B1cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvZGF0ZS1waWNrZXIvbGliL3BvcHVwcy9kYXRlLXBvcHVwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9kYXRlLXBpY2tlci9saWIvcG9wdXBzL2RhdGUtcG9wdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDaEQsT0FBTyxFQUFnQixRQUFRLEVBQXdCLE9BQU8sRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFdkksT0FBTyxFQUNILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxFQUdULE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0QsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFdkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLDRCQUE0QixFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFhM0ksT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSww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QUFqQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZW5kT2ZEYXksIHN0YXJ0T2ZEYXkgfSBmcm9tICdkYXRlLWZucyc7XG5pbXBvcnQgeyBGdW5jdGlvblByb3AsIFRpbnlEYXRlLCBUaW55RGF0ZUNvbXBhcmVHcmFpbiwgaGVscGVycywgaXNGdW5jdGlvbiwgaXNVbmRlZmluZWRPck51bGwsIHNvcnRSYW5nZVZhbHVlIH0gZnJvbSAnbmd4LXRldGh5cy91dGlsJztcblxuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIElucHV0LFxuICAgIG51bWJlckF0dHJpYnV0ZSxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBOZ0ZvciwgTmdJZiwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRoeUJ1dHRvbkljb24gfSBmcm9tICduZ3gtdGV0aHlzL2J1dHRvbic7XG5pbXBvcnQgeyBUaHlOYXYsIFRoeU5hdkl0ZW1EaXJlY3RpdmUgfSBmcm9tICduZ3gtdGV0aHlzL25hdic7XG5pbXBvcnQgeyBUaHlEYXRlUGlja2VyQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL2RhdGUtcGlja2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tcGF0aWJsZVZhbHVlLCBEYXRlUGlja2VyRmxleGlibGVUYWIsIFJhbmdlQWR2YW5jZWRWYWx1ZSwgUmFuZ2VQYXJ0VHlwZSB9IGZyb20gJy4uLy4uL2lubmVyLXR5cGVzJztcbmltcG9ydCB7IGRhdGVBZGRBbW91bnQsIGdldFNob3J0Y3V0VmFsdWUsIGhhc1ZhbHVlLCBtYWtlVmFsdWUsIHNldFZhbHVlQnlUaW1lc3RhbXBQcmVjaXNpb24sIHRyYW5zZm9ybURhdGVWYWx1ZSB9IGZyb20gJy4uLy4uL3BpY2tlci51dGlsJztcbmltcG9ydCB7XG4gICAgQ29tcGF0aWJsZURhdGUsXG4gICAgQ29tcGF0aWJsZVByZXNldHMsXG4gICAgRGlzYWJsZWREYXRlRm4sXG4gICAgU3VwcG9ydFRpbWVPcHRpb25zLFxuICAgIFRoeURhdGVDaGFuZ2VFdmVudCxcbiAgICBUaHlEYXRlR3JhbnVsYXJpdHksXG4gICAgVGh5UGFuZWxNb2RlLFxuICAgIFRoeVNob3J0Y3V0UG9zaXRpb24sXG4gICAgVGh5U2hvcnRjdXRQcmVzZXQsXG4gICAgVGh5U2hvcnRjdXRWYWx1ZVxufSBmcm9tICcuLi8uLi9zdGFuZGFyZC10eXBlcyc7XG5pbXBvcnQgeyBDYWxlbmRhckZvb3RlciB9IGZyb20gJy4uL2NhbGVuZGFyL2NhbGVuZGFyLWZvb3Rlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF0ZUNhcm91c2VsIH0gZnJvbSAnLi4vZGF0ZS1jYXJvdXNlbC9kYXRlLWNhcm91c2VsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJbm5lclBvcHVwIH0gZnJvbSAnLi9pbm5lci1wb3B1cC5jb21wb25lbnQnO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gICAgc2VsZWN0b3I6ICdkYXRlLXBvcHVwJyxcbiAgICBleHBvcnRBczogJ2RhdGVQb3B1cCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2RhdGUtcG9wdXAuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBOZ0lmLFxuICAgICAgICBOZ0ZvcixcbiAgICAgICAgVGh5TmF2LFxuICAgICAgICBUaHlOYXZJdGVtRGlyZWN0aXZlLFxuICAgICAgICBUaHlCdXR0b25JY29uLFxuICAgICAgICBEYXRlQ2Fyb3VzZWwsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgICAgICBJbm5lclBvcHVwLFxuICAgICAgICBDYWxlbmRhckZvb3RlclxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgRGF0ZVBvcHVwIGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQge1xuICAgIEBJbnB1dCgpIGlzUmFuZ2U6IGJvb2xlYW47XG4gICAgQElucHV0KCkgc2hvd1dlZWs6IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKSBmb3JtYXQ6IHN0cmluZztcbiAgICBASW5wdXQoKSBkaXNhYmxlZERhdGU6IERpc2FibGVkRGF0ZUZuO1xuICAgIEBJbnB1dCgpIG1pbkRhdGU6IERhdGUgfCBudW1iZXI7XG4gICAgQElucHV0KCkgbWF4RGF0ZTogRGF0ZSB8IG51bWJlcjtcbiAgICBASW5wdXQoKSBzaG93VG9kYXk6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiDmmK/lkKbmlK/mjIHorr7nva7ml7bpl7Qo5pe244CB5YiGKVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHNob3dUaW1lOiBTdXBwb3J0VGltZU9wdGlvbnMgfCBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICog5piv5ZCm5bGV56S65pe26Ze0KOaXtuOAgeWIhilcbiAgICAgKi9cbiAgICBASW5wdXQoKSBtdXN0U2hvd1RpbWU6IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKSBkYXRlUmVuZGVyOiBGdW5jdGlvblByb3A8VGVtcGxhdGVSZWY8RGF0ZT4gfCBzdHJpbmc+O1xuICAgIEBJbnB1dCgpIGNsYXNzTmFtZTogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHBhbmVsTW9kZTogVGh5UGFuZWxNb2RlIHwgVGh5UGFuZWxNb2RlW107XG4gICAgQElucHV0KCkgdmFsdWU6IENvbXBhdGlibGVWYWx1ZTtcbiAgICBASW5wdXQoKSBkZWZhdWx0UGlja2VyVmFsdWU6IENvbXBhdGlibGVEYXRlIHwgbnVtYmVyO1xuXG4gICAgQElucHV0KCkgc2hvd1Nob3J0Y3V0OiBib29sZWFuO1xuXG4gICAgQElucHV0KCkgc2hvcnRjdXRQcmVzZXRzOiBDb21wYXRpYmxlUHJlc2V0cztcblxuICAgIEBJbnB1dCgpIHNob3J0Y3V0UG9zaXRpb246IFRoeVNob3J0Y3V0UG9zaXRpb247XG5cbiAgICBASW5wdXQoKSBmbGV4aWJsZTogYm9vbGVhbjtcblxuICAgIEBJbnB1dCgpIGZsZXhpYmxlRGF0ZUdyYW51bGFyaXR5OiBUaHlEYXRlR3JhbnVsYXJpdHk7XG5cbiAgICBASW5wdXQoKSB0aW1lc3RhbXBQcmVjaXNpb246ICdzZWNvbmRzJyB8ICdtaWxsaXNlY29uZHMnO1xuXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IHBhbmVsTW9kZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VGh5UGFuZWxNb2RlIHwgVGh5UGFuZWxNb2RlW10+KCk7XG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IGNhbGVuZGFyQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxDb21wYXRpYmxlVmFsdWU+KCk7XG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxDb21wYXRpYmxlVmFsdWUgfCBSYW5nZUFkdmFuY2VkVmFsdWU+KCk7XG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IHJlc3VsdE9rID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpOyAvLyBFbWl0dGVkIHdoZW4gZG9uZSB3aXRoIGRhdGUgc2VsZWN0aW5nXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IHNob3dUaW1lUGlja2VyQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICAgIEBPdXRwdXQoKSByZWFkb25seSBkYXRlVmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFRoeURhdGVDaGFuZ2VFdmVudD4oKTtcblxuICAgIHByZWZpeENscyA9ICd0aHktY2FsZW5kYXInO1xuICAgIHNob3dUaW1lUGlja2VyID0gZmFsc2U7XG4gICAgdGltZU9wdGlvbnM6IFN1cHBvcnRUaW1lT3B0aW9ucyB8IFN1cHBvcnRUaW1lT3B0aW9uc1tdIHwgbnVsbDtcbiAgICBhY3RpdmVEYXRlOiBUaW55RGF0ZSB8IFRpbnlEYXRlW107XG4gICAgc2VsZWN0ZWRWYWx1ZTogVGlueURhdGVbXSA9IFtdOyAvLyBSYW5nZSBPTkxZXG4gICAgaG92ZXJWYWx1ZTogVGlueURhdGVbXSA9IFtdOyAvLyBSYW5nZSBPTkxZXG5cbiAgICBhZHZhbmNlZFNlbGVjdGVkVmFsdWU6IFJhbmdlQWR2YW5jZWRWYWx1ZTsgLy8gYWR2YW5jZWQgT05MWVxuXG4gICAgZmxleGlibGVBY3RpdmVUYWI6IERhdGVQaWNrZXJGbGV4aWJsZVRhYiA9ICdhZHZhbmNlZCc7XG5cbiAgICBnZXQgaGFzVGltZVBpY2tlcigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5zaG93VGltZTtcbiAgICB9XG4gICAgcHJpdmF0ZSBwYXJ0VHlwZU1hcDogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfSA9IHsgbGVmdDogMCwgcmlnaHQ6IDEgfTtcblxuICAgIFtwcm9wZXJ0eTogc3RyaW5nXTogYW55O1xuXG4gICAgZW5kUGFuZWxNb2RlOiBUaHlQYW5lbE1vZGUgfCBUaHlQYW5lbE1vZGVbXTtcblxuICAgIGlubmVyU2hvcnRjdXRQcmVzZXRzOiBUaHlTaG9ydGN1dFByZXNldFtdO1xuXG4gICAgZGlzYWJsZVRpbWVDb25maXJtID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIGRhdGVQaWNrZXJDb25maWdTZXJ2aWNlOiBUaHlEYXRlUGlja2VyQ29uZmlnU2VydmljZVxuICAgICkge31cblxuICAgIHNldFByb3BlcnR5PFQgZXh0ZW5kcyBrZXlvZiBEYXRlUG9wdXA+KGtleTogVCwgdmFsdWU6IHRoaXNbVF0pOiB2b2lkIHtcbiAgICAgICAgdGhpc1trZXldID0gdmFsdWU7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmluaXRTaG9ydGN1dFByZXNldHMoKTtcbiAgICAgICAgdGhpcy5pbml0UGFuZWxNb2RlKCk7XG4gICAgICAgIGlmICh0aGlzLmZsZXhpYmxlICYmIHRoaXMuZmxleGlibGVEYXRlR3JhbnVsYXJpdHkgPT09ICdkYXknKSB7XG4gICAgICAgICAgICB0aGlzLmZsZXhpYmxlQWN0aXZlVGFiID0gJ2N1c3RvbSc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZGVmYXVsdFBpY2tlclZhbHVlICYmICFoYXNWYWx1ZSh0aGlzLnZhbHVlKSkge1xuICAgICAgICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gdHJhbnNmb3JtRGF0ZVZhbHVlKHRoaXMuZGVmYXVsdFBpY2tlclZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBtYWtlVmFsdWUodmFsdWUsIHRoaXMuaXNSYW5nZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVBY3RpdmVEYXRlKCk7XG4gICAgICAgIHRoaXMuaW5pdERpc2FibGVkRGF0ZSgpO1xuICAgICAgICBpZiAodGhpcy5pc1JhbmdlICYmIHRoaXMuZmxleGlibGUgJiYgdGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5hZHZhbmNlZFNlbGVjdGVkVmFsdWUgPSB7XG4gICAgICAgICAgICAgICAgYmVnaW46IHRoaXMudmFsdWVbMF0sXG4gICAgICAgICAgICAgICAgZW5kOiB0aGlzLnZhbHVlWzFdLFxuICAgICAgICAgICAgICAgIGRhdGVHcmFudWxhcml0eTogdGhpcy5mbGV4aWJsZURhdGVHcmFudWxhcml0eVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXMucGFuZWxNb2RlKSB7XG4gICAgICAgICAgICBpZiAoaGVscGVycy5pc0FycmF5KHRoaXMucGFuZWxNb2RlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZW5kUGFuZWxNb2RlID0gWy4uLnRoaXMucGFuZWxNb2RlXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbmRQYW5lbE1vZGUgPSB0aGlzLnBhbmVsTW9kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlcy5kZWZhdWx0UGlja2VyVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQWN0aXZlRGF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2VzLnZhbHVlICYmIGNoYW5nZXMudmFsdWUuY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUFjdGl2ZURhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXRTaG9ydGN1dFByZXNldHMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgc2hvcnRjdXRSYW5nZXNQcmVzZXRzLCBzaG9ydGN1dERhdGVQcmVzZXRzLCBzaG93U2hvcnRjdXQgfSA9IHRoaXMuZGF0ZVBpY2tlckNvbmZpZ1NlcnZpY2U7XG5cbiAgICAgICAgdGhpcy5zaG93U2hvcnRjdXQgPVxuICAgICAgICAgICAgWydkYXRlJywgJ2RhdGUsZGF0ZSddLmluY2x1ZGVzKHRoaXMucGFuZWxNb2RlLnRvU3RyaW5nKCkpICYmIGlzVW5kZWZpbmVkT3JOdWxsKHRoaXMuc2hvd1Nob3J0Y3V0KVxuICAgICAgICAgICAgICAgID8gc2hvd1Nob3J0Y3V0XG4gICAgICAgICAgICAgICAgOiB0aGlzLnNob3dTaG9ydGN1dDtcblxuICAgICAgICBpZiAodGhpcy5zaG93U2hvcnRjdXQpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5zaG9ydGN1dFByZXNldHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3J0Y3V0UHJlc2V0cyA9IHRoaXMuaXNSYW5nZSA/IHNob3J0Y3V0UmFuZ2VzUHJlc2V0cyA6IHNob3J0Y3V0RGF0ZVByZXNldHM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuaW5uZXJTaG9ydGN1dFByZXNldHMgPSBpc0Z1bmN0aW9uKHRoaXMuc2hvcnRjdXRQcmVzZXRzKSA/IHRoaXMuc2hvcnRjdXRQcmVzZXRzKCkgOiB0aGlzLnNob3J0Y3V0UHJlc2V0cztcbiAgICAgICAgICAgIGlmICh0aGlzLmlubmVyU2hvcnRjdXRQcmVzZXRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1pbkRhdGU6IFRpbnlEYXRlID0gdGhpcy5nZXRNaW5UaW55RGF0ZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1heERhdGU6IFRpbnlEYXRlID0gdGhpcy5nZXRNYXhUaW55RGF0ZSgpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgbWluVGltZSA9IG1pbkRhdGUgPyBtaW5EYXRlLmdldFRpbWUoKSA6IG51bGw7XG4gICAgICAgICAgICAgICAgY29uc3QgbWF4VGltZSA9IG1heERhdGUgPyBtYXhEYXRlLmdldFRpbWUoKSA6IG51bGw7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1JhbmdlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5uZXJTaG9ydGN1dFByZXNldHMuZm9yRWFjaCgocHJlc2V0OiBUaHlTaG9ydGN1dFByZXNldCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmVnaW46IG51bWJlciB8IERhdGUgPSBnZXRTaG9ydGN1dFZhbHVlKHByZXNldC52YWx1ZVswXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBiZWdpblRpbWU6IG51bWJlciA9IG5ldyBUaW55RGF0ZShzdGFydE9mRGF5KGJlZ2luKSkuZ2V0VGltZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQ6IG51bWJlciB8IERhdGUgPSBnZXRTaG9ydGN1dFZhbHVlKHByZXNldC52YWx1ZVsxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmRUaW1lOiBudW1iZXIgPSBuZXcgVGlueURhdGUoZW5kT2ZEYXkoZW5kKSkuZ2V0VGltZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKG1pbkRhdGUgJiYgZW5kVGltZSA8IG1pblRpbWUpIHx8IChtYXhEYXRlICYmIGJlZ2luVGltZSA+IG1heFRpbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2V0LmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2V0LmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5uZXJTaG9ydGN1dFByZXNldHMuZm9yRWFjaCgocHJlc2V0OiBUaHlTaG9ydGN1dFByZXNldCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2luZ2xlVmFsdWU6IG51bWJlciB8IERhdGUgPSBnZXRTaG9ydGN1dFZhbHVlKHByZXNldC52YWx1ZSBhcyBUaHlTaG9ydGN1dFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpbmdsZVRpbWU6IG51bWJlciA9IG5ldyBUaW55RGF0ZShzaW5nbGVWYWx1ZSkuZ2V0VGltZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKG1pbkRhdGUgJiYgc2luZ2xlVGltZSA8IG1pblRpbWUpIHx8IChtYXhEYXRlICYmIHNpbmdsZVRpbWUgPiBtYXhUaW1lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNldC5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNldC5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGVBY3RpdmVEYXRlKCkge1xuICAgICAgICB0aGlzLmNsZWFySG92ZXJWYWx1ZSgpO1xuICAgICAgICBpZiAoIXRoaXMudmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRyYW5zZm9ybURhdGVWYWx1ZSh0aGlzLmRlZmF1bHRQaWNrZXJWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gbWFrZVZhbHVlKHZhbHVlLCB0aGlzLmlzUmFuZ2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzUmFuZ2UpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5mbGV4aWJsZSB8fCB0aGlzLmZsZXhpYmxlRGF0ZUdyYW51bGFyaXR5ID09PSAnZGF5Jykge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHRoaXMudmFsdWUgYXMgVGlueURhdGVbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IHRoaXMubm9ybWFsaXplUmFuZ2VWYWx1ZSh0aGlzLnZhbHVlIGFzIFRpbnlEYXRlW10sIHRoaXMuZ2V0UGFuZWxNb2RlKHRoaXMuZW5kUGFuZWxNb2RlKSBhcyBUaHlQYW5lbE1vZGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gdGhpcy52YWx1ZSBhcyBUaW55RGF0ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzRGlzYWJsZVRpbWVDb25maXJtKCk7XG4gICAgfVxuXG4gICAgaW5pdFBhbmVsTW9kZSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmVuZFBhbmVsTW9kZSkge1xuICAgICAgICAgICAgaWYgKGhlbHBlcnMuaXNBcnJheSh0aGlzLnBhbmVsTW9kZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVuZFBhbmVsTW9kZSA9IFsuLi50aGlzLnBhbmVsTW9kZV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZW5kUGFuZWxNb2RlID0gdGhpcy5wYW5lbE1vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaGVscGVycy5pc0FycmF5KHRoaXMuZW5kUGFuZWxNb2RlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucGFuZWxNb2RlID0gWy4uLnRoaXMuZW5kUGFuZWxNb2RlXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYW5lbE1vZGUgPSB0aGlzLmVuZFBhbmVsTW9kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXREaXNhYmxlZERhdGUoKTogdm9pZCB7XG4gICAgICAgIGxldCBtaW5EYXRlOiBUaW55RGF0ZTtcbiAgICAgICAgbGV0IG1heERhdGU6IFRpbnlEYXRlO1xuICAgICAgICBsZXQgZGlzYWJsZWREYXRlRm46IERpc2FibGVkRGF0ZUZuO1xuICAgICAgICBpZiAodGhpcy5taW5EYXRlKSB7XG4gICAgICAgICAgICBjb25zdCB7IHZhbHVlIH0gPSB0cmFuc2Zvcm1EYXRlVmFsdWUodGhpcy5taW5EYXRlKTtcbiAgICAgICAgICAgIG1pbkRhdGUgPSBuZXcgVGlueURhdGUodmFsdWUgYXMgRGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubWF4RGF0ZSkge1xuICAgICAgICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gdHJhbnNmb3JtRGF0ZVZhbHVlKHRoaXMubWF4RGF0ZSk7XG4gICAgICAgICAgICBtYXhEYXRlID0gbmV3IFRpbnlEYXRlKHZhbHVlIGFzIERhdGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkRGF0ZSkge1xuICAgICAgICAgICAgZGlzYWJsZWREYXRlRm4gPSB0aGlzLmRpc2FibGVkRGF0ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRpc2FibGVkRGF0ZSA9IGQgPT4ge1xuICAgICAgICAgICAgbGV0IGV4cHJlc3Npb24gPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChtaW5EYXRlKSB7XG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbiA9IGQgPCBtaW5EYXRlLnN0YXJ0T2ZEYXkoKS5uYXRpdmVEYXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1heERhdGUgJiYgIWV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uID0gZCA+IG1heERhdGUuZW5kT2ZEYXkoKS5uYXRpdmVEYXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRpc2FibGVkRGF0ZUZuICYmIHR5cGVvZiBkaXNhYmxlZERhdGVGbiA9PT0gJ2Z1bmN0aW9uJyAmJiAhZXhwcmVzc2lvbikge1xuICAgICAgICAgICAgICAgIGV4cHJlc3Npb24gPSBkaXNhYmxlZERhdGVGbihkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBleHByZXNzaW9uO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIG9uU2hvd1RpbWVQaWNrZXJDaGFuZ2Uoc2hvdzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLnNob3dUaW1lUGlja2VyID0gc2hvdztcbiAgICAgICAgdGhpcy5zaG93VGltZVBpY2tlckNoYW5nZS5lbWl0KHNob3cpO1xuICAgIH1cblxuICAgIG9uQ2xpY2tPaygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpO1xuICAgICAgICB0aGlzLnJlc3VsdE9rLmVtaXQoKTtcbiAgICB9XG5cbiAgICBvbkNsaWNrUmVtb3ZlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5pc1JhbmdlID8gW10gOiBudWxsO1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XG4gICAgfVxuXG4gICAgb25EYXlIb3Zlcih2YWx1ZTogVGlueURhdGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNSYW5nZSAmJiB0aGlzLnNlbGVjdGVkVmFsdWVbMF0gJiYgIXRoaXMuc2VsZWN0ZWRWYWx1ZVsxXSkge1xuICAgICAgICAgICAgLy8gV2hlbiByaWdodCB2YWx1ZSBpcyBzZWxlY3RlZCwgZG9uJ3QgZG8gaG92ZXJcbiAgICAgICAgICAgIGNvbnN0IGJhc2UgPSB0aGlzLnNlbGVjdGVkVmFsdWVbMF07IC8vIFVzZSB0aGUgbGVmdCBvZiBzZWxlY3RlZCB2YWx1ZSBhcyB0aGUgYmFzZSB0byBkZWNpZGUgbGF0ZXIgaG92ZXJWYWx1ZVxuICAgICAgICAgICAgaWYgKGJhc2UuaXNCZWZvcmVEYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ob3ZlclZhbHVlID0gW2Jhc2UsIHZhbHVlXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ob3ZlclZhbHVlID0gW3ZhbHVlLCBiYXNlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uUGFuZWxNb2RlQ2hhbmdlKG1vZGU6IFRoeVBhbmVsTW9kZSwgcGFydFR5cGU/OiBSYW5nZVBhcnRUeXBlKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzUmFuZ2UpIHtcbiAgICAgICAgICAgICh0aGlzLnBhbmVsTW9kZSBhcyBUaHlQYW5lbE1vZGVbXSlbdGhpcy5nZXRQYXJ0VHlwZUluZGV4KHBhcnRUeXBlKV0gPSBtb2RlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wYW5lbE1vZGUgPSBtb2RlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGFuZWxNb2RlQ2hhbmdlLmVtaXQodGhpcy5wYW5lbE1vZGUpO1xuICAgIH1cblxuICAgIG9uSGVhZGVyQ2hhbmdlKHZhbHVlOiBUaW55RGF0ZSwgcGFydFR5cGU/OiBSYW5nZVBhcnRUeXBlKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzUmFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZVt0aGlzLmdldFBhcnRUeXBlSW5kZXgocGFydFR5cGUpXSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gdGhpcy5ub3JtYWxpemVSYW5nZVZhbHVlKFxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZSBhcyBUaW55RGF0ZVtdLFxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0UGFuZWxNb2RlKHRoaXMuZW5kUGFuZWxNb2RlLCBwYXJ0VHlwZSkgYXMgVGh5UGFuZWxNb2RlXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblNlbGVjdFRpbWUodmFsdWU6IFRpbnlEYXRlLCBwYXJ0VHlwZT86IFJhbmdlUGFydFR5cGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNSYW5nZSkge1xuICAgICAgICAgICAgLy8gVE9ETzpyYW5nZSBwaWNrZXIgc2V0IHRpbWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUobmV3IFRpbnlEYXRlKHZhbHVlLm5hdGl2ZURhdGUpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNlbGVjdFRhYihhY3RpdmU6IERhdGVQaWNrZXJGbGV4aWJsZVRhYikge1xuICAgICAgICB0aGlzLmZsZXhpYmxlQWN0aXZlVGFiID0gYWN0aXZlO1xuICAgIH1cblxuICAgIGNsZWFyRmxleGlibGVWYWx1ZSgpIHtcbiAgICAgICAgdGhpcy5mbGV4aWJsZURhdGVHcmFudWxhcml0eSA9IG51bGw7XG4gICAgICAgIGlmICh0aGlzLmZsZXhpYmxlQWN0aXZlVGFiID09PSAnYWR2YW5jZWQnKSB7XG4gICAgICAgICAgICB0aGlzLmFkdmFuY2VkU2VsZWN0ZWRWYWx1ZSA9IHt9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gW107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHtcbiAgICAgICAgICAgIGJlZ2luOiBudWxsLFxuICAgICAgICAgICAgZW5kOiBudWxsLFxuICAgICAgICAgICAgZGF0ZUdyYW51bGFyaXR5OiB0aGlzLmZsZXhpYmxlRGF0ZUdyYW51bGFyaXR5XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNoYW5nZVZhbHVlRnJvbUFkdmFuY2VkU2VsZWN0KHZhbHVlOiBSYW5nZUFkdmFuY2VkVmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgICAgICAgLy8gY2xlYXIgY3VzdG9tIGRhdGUgd2hlbiBzZWxlY3QgYSBhZHZhbmNlZCBkYXRlXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IFtdO1xuICAgICAgICB0aGlzLmRhdGVWYWx1ZUNoYW5nZS5lbWl0KHtcbiAgICAgICAgICAgIHZhbHVlOiBbdmFsdWUuYmVnaW4sIHZhbHVlLmVuZF1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2hhbmdlVmFsdWVGcm9tU2VsZWN0KHZhbHVlOiBUaW55RGF0ZSwgcGFydFR5cGU/OiBSYW5nZVBhcnRUeXBlKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzUmFuZ2UpIHtcbiAgICAgICAgICAgIC8vIGNsZWFyIGFkdmFuY2VkIGRhdGUgd2hlbiBzZWxlY3QgYSBjdXN0b20gZGF0ZVxuICAgICAgICAgICAgdGhpcy5hZHZhbmNlZFNlbGVjdGVkVmFsdWUgPSB7fTtcblxuICAgICAgICAgICAgY29uc3QgW2xlZnQsIHJpZ2h0XSA9IHRoaXMuc2VsZWN0ZWRWYWx1ZSBhcyBUaW55RGF0ZVtdO1xuXG4gICAgICAgICAgICBpZiAoKCFsZWZ0ICYmICFyaWdodCkgfHwgKGxlZnQgJiYgcmlnaHQpKSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgdG90YWxseSBmdWxsIG9yIGVtcHR5LCBjbGVhbiB1cCAmJiByZS1hc3NpZ24gbGVmdCBmaXJzdFxuICAgICAgICAgICAgICAgIHRoaXMuaG92ZXJWYWx1ZSA9IHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IFt2YWx1ZV07XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gW25ldyBUaW55RGF0ZShzdGFydE9mRGF5KHRoaXMuc2VsZWN0ZWRWYWx1ZVswXS5uYXRpdmVEYXRlKSldO1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsZW5kYXJDaGFuZ2UuZW1pdChbdGhpcy5zZWxlY3RlZFZhbHVlWzBdLmNsb25lKCldKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGVmdCAmJiAhcmlnaHQpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBvbmUgb2YgdGhlbSBpcyBlbXB0eSwgYXNzaWduIHRoZSBvdGhlciBvbmUgYW5kIHNvcnQsIHRoZW4gc2V0IHRoZSBmaW5hbCB2YWx1ZXNcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFySG92ZXJWYWx1ZSgpOyAvLyBDbGVhbiB1cFxuICAgICAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2VWYWx1ZSgncmlnaHQnLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gc29ydFJhbmdlVmFsdWUodGhpcy5zZWxlY3RlZFZhbHVlKTsgLy8gU29ydFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IFtcbiAgICAgICAgICAgICAgICAgICAgbmV3IFRpbnlEYXRlKHN0YXJ0T2ZEYXkodGhpcy5zZWxlY3RlZFZhbHVlWzBdLm5hdGl2ZURhdGUpKSxcbiAgICAgICAgICAgICAgICAgICAgbmV3IFRpbnlEYXRlKGVuZE9mRGF5KHRoaXMuc2VsZWN0ZWRWYWx1ZVsxXS5uYXRpdmVEYXRlKSlcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IHRoaXMubm9ybWFsaXplUmFuZ2VWYWx1ZShcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFBhbmVsTW9kZSh0aGlzLmVuZFBhbmVsTW9kZSwgcGFydFR5cGUpIGFzIFRoeVBhbmVsTW9kZVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZSh0aGlzLmNsb25lUmFuZ2VEYXRlKHRoaXMuc2VsZWN0ZWRWYWx1ZSkpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsZW5kYXJDaGFuZ2UuZW1pdCh0aGlzLmNsb25lUmFuZ2VEYXRlKHRoaXMuc2VsZWN0ZWRWYWx1ZSkpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVZhbHVlQ2hhbmdlLmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5jbG9uZVJhbmdlRGF0ZSh0aGlzLnNlbGVjdGVkVmFsdWUpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB1cGRhdGVkVmFsdWUgPSB0aGlzLnVwZGF0ZUhvdXJNaW51dGUodmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZSh1cGRhdGVkVmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5kYXRlVmFsdWVDaGFuZ2UuZW1pdCh7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHVwZGF0ZWRWYWx1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUhvdXJNaW51dGUodmFsdWU6IFRpbnlEYXRlKTogVGlueURhdGUge1xuICAgICAgICBpZiAoIXRoaXMudmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcmlnaW5EYXRlID0gdGhpcy52YWx1ZSBhcyBUaW55RGF0ZTtcbiAgICAgICAgY29uc3QgZGF0ZVRpbWUgPSBbdmFsdWUuZ2V0SG91cnMoKSwgdmFsdWUuZ2V0TWludXRlcygpLCB2YWx1ZS5nZXRTZWNvbmRzKCldO1xuICAgICAgICBjb25zdCBvcmlnaW5EYXRlVGltZSA9IFtvcmlnaW5EYXRlLmdldEhvdXJzKCksIG9yaWdpbkRhdGUuZ2V0TWludXRlcygpLCBvcmlnaW5EYXRlLmdldFNlY29uZHMoKV07XG5cbiAgICAgICAgY29uc3QgaXNFcXVhbFRpbWUgPSBkYXRlVGltZS50b1N0cmluZygpID09PSBvcmlnaW5EYXRlVGltZS50b1N0cmluZygpO1xuICAgICAgICBpZiAoaXNFcXVhbFRpbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS5zZXRIbXMob3JpZ2luRGF0ZVRpbWVbMF0sIG9yaWdpbkRhdGVUaW1lWzFdLCBvcmlnaW5EYXRlVGltZVsyXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBlbmFibGVQcmV2TmV4dChkaXJlY3Rpb246ICdwcmV2JyB8ICduZXh0JywgcGFydFR5cGU/OiBSYW5nZVBhcnRUeXBlKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmlzUmFuZ2UgJiYgdGhpcy5wYW5lbE1vZGUgPT09IHRoaXMuZW5kUGFuZWxNb2RlKSB7XG4gICAgICAgICAgICBjb25zdCBbc3RhcnQsIGVuZF0gPSB0aGlzLmFjdGl2ZURhdGUgYXMgVGlueURhdGVbXTtcbiAgICAgICAgICAgIGNvbnN0IHNob3dNaWRkbGUgPSAhc3RhcnQuYWRkTW9udGhzKDEpLmlzU2FtZShlbmQsICdtb250aCcpOyAvLyBPbmUgbW9udGggZGlmZiB0aGVuIGRvbid0IHNob3cgbWlkZGxlIHByZXYvbmV4dFxuICAgICAgICAgICAgaWYgKChwYXJ0VHlwZSA9PT0gJ2xlZnQnICYmIGRpcmVjdGlvbiA9PT0gJ25leHQnKSB8fCAocGFydFR5cGUgPT09ICdyaWdodCcgJiYgZGlyZWN0aW9uID09PSAncHJldicpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNob3dNaWRkbGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0UGFuZWxNb2RlKHBhbmVsTW9kZTogVGh5UGFuZWxNb2RlIHwgVGh5UGFuZWxNb2RlW10sIHBhcnRUeXBlPzogUmFuZ2VQYXJ0VHlwZSk6IFRoeVBhbmVsTW9kZSB7XG4gICAgICAgIGlmICh0aGlzLmlzUmFuZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiBwYW5lbE1vZGVbdGhpcy5nZXRQYXJ0VHlwZUluZGV4KHBhcnRUeXBlKV0gYXMgVGh5UGFuZWxNb2RlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHBhbmVsTW9kZSBhcyBUaHlQYW5lbE1vZGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRWYWx1ZUJ5U2VsZWN0b3IocGFydFR5cGU/OiBSYW5nZVBhcnRUeXBlKTogVGlueURhdGUge1xuICAgICAgICBpZiAodGhpcy5pc1JhbmdlKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZVNob3cgPSB0aGlzLnNlbGVjdGVkVmFsdWU7IC8vIFVzZSB0aGUgcmVhbCB0aW1lIHZhbHVlIHRoYXQgd2l0aG91dCBkZWNvcmF0aW9ucyB3aGVuIHRpbWVwaWNrZXIgaXMgc2hvd24gdXBcbiAgICAgICAgICAgIHJldHVybiAodmFsdWVTaG93IGFzIFRpbnlEYXRlW10pW3RoaXMuZ2V0UGFydFR5cGVJbmRleChwYXJ0VHlwZSldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUgYXMgVGlueURhdGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRBY3RpdmVEYXRlKHBhcnRUeXBlPzogUmFuZ2VQYXJ0VHlwZSk6IFRpbnlEYXRlIHtcbiAgICAgICAgaWYgKHRoaXMuaXNSYW5nZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlRGF0ZVt0aGlzLmdldFBhcnRUeXBlSW5kZXgocGFydFR5cGUpXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFjdGl2ZURhdGUgYXMgVGlueURhdGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRQYXJ0VHlwZUluZGV4KHBhcnRUeXBlOiBSYW5nZVBhcnRUeXBlID0gJ2xlZnQnKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFydFR5cGVNYXBbcGFydFR5cGVdO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TWluVGlueURhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbkRhdGUgPyBuZXcgVGlueURhdGUodHJhbnNmb3JtRGF0ZVZhbHVlKHRoaXMubWluRGF0ZSkudmFsdWUgYXMgRGF0ZSkgOiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TWF4VGlueURhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1heERhdGUgPyBuZXcgVGlueURhdGUodHJhbnNmb3JtRGF0ZVZhbHVlKHRoaXMubWF4RGF0ZSkudmFsdWUgYXMgRGF0ZSkgOiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xlYXJIb3ZlclZhbHVlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhvdmVyVmFsdWUgPSBbXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFZhbHVlKHZhbHVlOiBDb21wYXRpYmxlVmFsdWUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICBpZiAodGhpcy5pc1JhbmdlICYmIHRoaXMuZmxleGlibGUpIHtcbiAgICAgICAgICAgIHRoaXMuZmxleGlibGVEYXRlR3JhbnVsYXJpdHkgPSAnZGF5JztcbiAgICAgICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh7XG4gICAgICAgICAgICAgICAgYmVnaW46IHZhbHVlWzBdLFxuICAgICAgICAgICAgICAgIGVuZDogdmFsdWVbMV0sXG4gICAgICAgICAgICAgICAgZGF0ZUdyYW51bGFyaXR5OiB0aGlzLmZsZXhpYmxlRGF0ZUdyYW51bGFyaXR5XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5zaG93VGltZSB8fCAhdGhpcy5zaG93VGltZVBpY2tlcikge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzRGlzYWJsZVRpbWVDb25maXJtKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBub3JtYWxpemVSYW5nZVZhbHVlKHZhbHVlOiBUaW55RGF0ZVtdLCBtb2RlOiBUaHlQYW5lbE1vZGUgPSAnbW9udGgnKTogVGlueURhdGVbXSB7XG4gICAgICAgIGNvbnN0IGhlYWRlck1vZGVzOiB7IFtrZXkgaW4gVGh5UGFuZWxNb2RlXT86IFRoeVBhbmVsTW9kZSB9ID0ge1xuICAgICAgICAgICAgd2VlazogJ21vbnRoJyxcbiAgICAgICAgICAgIGRhdGU6ICdtb250aCcsXG4gICAgICAgICAgICBtb250aDogJ3llYXInLFxuICAgICAgICAgICAgcXVhcnRlcjogJ3llYXInLFxuICAgICAgICAgICAgeWVhcjogJ2RlY2FkZSdcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgaGVhZGVyTW9kZSA9IGhlYWRlck1vZGVzW21vZGVdO1xuICAgICAgICBjb25zdCBbc3RhcnQsIGVuZF0gPSB2YWx1ZTtcbiAgICAgICAgY29uc3QgbmV3U3RhcnQgPSBzdGFydCB8fCBuZXcgVGlueURhdGUoKTtcbiAgICAgICAgbGV0IG5ld0VuZCA9IGVuZDtcbiAgICAgICAgaWYgKCFuZXdFbmQgfHwgbmV3U3RhcnQuaXNTYW1lKGVuZCwgaGVhZGVyTW9kZSBhcyBUaW55RGF0ZUNvbXBhcmVHcmFpbikpIHtcbiAgICAgICAgICAgIG5ld0VuZCA9IGRhdGVBZGRBbW91bnQobmV3U3RhcnQsIDEsIGhlYWRlck1vZGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbbmV3U3RhcnQsIG5ld0VuZF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRSYW5nZVZhbHVlKHBhcnRUeXBlOiBSYW5nZVBhcnRUeXBlLCB2YWx1ZTogVGlueURhdGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmVmID0gKHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHRoaXMuY2xvbmVSYW5nZURhdGUodGhpcy5zZWxlY3RlZFZhbHVlIGFzIFRpbnlEYXRlW10pKTtcbiAgICAgICAgcmVmW3RoaXMuZ2V0UGFydFR5cGVJbmRleChwYXJ0VHlwZSldID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbG9uZVJhbmdlRGF0ZSh2YWx1ZTogVGlueURhdGVbXSk6IFRpbnlEYXRlW10ge1xuICAgICAgICByZXR1cm4gW3ZhbHVlWzBdICYmIHZhbHVlWzBdLmNsb25lKCksIHZhbHVlWzFdICYmIHZhbHVlWzFdLmNsb25lKCldIGFzIFRpbnlEYXRlW107XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0Rpc2FibGVUaW1lQ29uZmlybSgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNSYW5nZSB8fCAhdGhpcy5zaG93VGltZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF0ZTogVGlueURhdGUgPSB0aGlzLnZhbHVlID8gKHRoaXMudmFsdWUgYXMgVGlueURhdGUpIDogbmV3IFRpbnlEYXRlKCk7XG4gICAgICAgIGNvbnN0IG1pbkRhdGU6IFRpbnlEYXRlID0gdGhpcy5nZXRNaW5UaW55RGF0ZSgpO1xuICAgICAgICBjb25zdCBtYXhEYXRlOiBUaW55RGF0ZSA9IHRoaXMuZ2V0TWF4VGlueURhdGUoKTtcblxuICAgICAgICBpZiAoKG1pbkRhdGUgJiYgZGF0ZS5nZXRUaW1lKCkgPCBtaW5EYXRlLmdldFRpbWUoKSkgfHwgKG1heERhdGUgJiYgZGF0ZS5nZXRUaW1lKCkgPiBtYXhEYXRlLmdldFRpbWUoKSkpIHtcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZVRpbWVDb25maXJtID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZVRpbWVDb25maXJtID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNlbGVjdGVkU2hvcnRjdXRQcmVzZXQoZGF0ZTogQ29tcGF0aWJsZVZhbHVlKTogQ29tcGF0aWJsZVZhbHVlIHtcbiAgICAgICAgY29uc3QgbWluRGF0ZTogVGlueURhdGUgPSB0aGlzLmdldE1pblRpbnlEYXRlKCk7XG4gICAgICAgIGNvbnN0IG1heERhdGU6IFRpbnlEYXRlID0gdGhpcy5nZXRNYXhUaW55RGF0ZSgpO1xuXG4gICAgICAgIGNvbnN0IG1pblRpbWU6IG51bWJlciA9IChtaW5EYXRlICYmIG1pbkRhdGUuZ2V0VGltZSgpKSB8fCBudWxsO1xuICAgICAgICBjb25zdCBtYXhUaW1lOiBudW1iZXIgPSAobWF4RGF0ZSAmJiBtYXhEYXRlLmdldFRpbWUoKSkgfHwgbnVsbDtcblxuICAgICAgICBpZiAoaGVscGVycy5pc0FycmF5KGRhdGUpKSB7XG4gICAgICAgICAgICBjb25zdCBzdGFydERhdGU6IFRpbnlEYXRlID0gZGF0ZVswXTtcbiAgICAgICAgICAgIGNvbnN0IGVuZERhdGU6IFRpbnlEYXRlID0gZGF0ZVsxXTtcblxuICAgICAgICAgICAgY29uc3Qgc3RhcnRUaW1lOiBudW1iZXIgPSBzdGFydERhdGUuZ2V0VGltZSgpO1xuICAgICAgICAgICAgY29uc3QgZW5kVGltZTogbnVtYmVyID0gZW5kRGF0ZS5nZXRUaW1lKCk7XG5cbiAgICAgICAgICAgIGlmICgobWF4RGF0ZSAmJiBzdGFydFRpbWUgPiBtYXhUaW1lKSB8fCAobWluRGF0ZSAmJiBlbmRUaW1lIDwgbWluVGltZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChtaW5EYXRlICYmIHN0YXJ0VGltZSA8IG1pblRpbWUgJiYgbWF4RGF0ZSAmJiBlbmRUaW1lID4gbWF4VGltZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbbWluRGF0ZSwgbWF4RGF0ZV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChtaW5EYXRlICYmIHN0YXJ0VGltZSA8IG1pblRpbWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW21pbkRhdGUsIGVuZERhdGVdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobWF4RGF0ZSAmJiBlbmRUaW1lID4gbWF4VGltZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbc3RhcnREYXRlLCBtYXhEYXRlXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBzaW5nbGVUaW1lOiBudW1iZXIgPSBkYXRlLmdldFRpbWUoKTtcblxuICAgICAgICAgICAgaWYgKChtaW5EYXRlICYmIHNpbmdsZVRpbWUgPCBtaW5UaW1lKSB8fCAobWF4RGF0ZSAmJiBzaW5nbGVUaW1lID4gbWF4VGltZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzaG9ydGN1dFNldFZhbHVlKHNob3J0Y3V0UHJlc2V0czogVGh5U2hvcnRjdXRQcmVzZXQpIHtcbiAgICAgICAgaWYgKHNob3J0Y3V0UHJlc2V0cy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gc2hvcnRjdXRQcmVzZXRzO1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc2VsZWN0ZWRQcmVzZXRWYWx1ZTogQ29tcGF0aWJsZVZhbHVlO1xuICAgICAgICBpZiAoaGVscGVycy5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgY29uc3QgYmVnaW46IG51bWJlciB8IERhdGUgPSBnZXRTaG9ydGN1dFZhbHVlKHZhbHVlWzBdKTtcbiAgICAgICAgICAgIGNvbnN0IGVuZDogbnVtYmVyIHwgRGF0ZSA9IGdldFNob3J0Y3V0VmFsdWUodmFsdWVbMV0pO1xuXG4gICAgICAgICAgICBpZiAoYmVnaW4gJiYgZW5kKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdGhpcy5nZXRTZWxlY3RlZFNob3J0Y3V0UHJlc2V0KFtcbiAgICAgICAgICAgICAgICAgICAgbmV3IFRpbnlEYXRlKHN0YXJ0T2ZEYXkoYmVnaW4pKSxcbiAgICAgICAgICAgICAgICAgICAgbmV3IFRpbnlEYXRlKGVuZE9mRGF5KGVuZCkpXG4gICAgICAgICAgICAgICAgXSkgYXMgVGlueURhdGVbXTtcblxuICAgICAgICAgICAgICAgIHNlbGVjdGVkUHJlc2V0VmFsdWUgPSB0aGlzLmNsb25lUmFuZ2VEYXRlKHRoaXMuc2VsZWN0ZWRWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBzaW5nbGVEYXRlOiBudW1iZXIgfCBEYXRlID0gZ2V0U2hvcnRjdXRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgICBjb25zdCBzaW5nbGVUaW55RGF0ZTogVGlueURhdGUgPSB0aGlzLnVwZGF0ZUhvdXJNaW51dGUobmV3IFRpbnlEYXRlKHNpbmdsZURhdGUpKTtcbiAgICAgICAgICAgIHNlbGVjdGVkUHJlc2V0VmFsdWUgPSB0aGlzLmdldFNlbGVjdGVkU2hvcnRjdXRQcmVzZXQoc2luZ2xlVGlueURhdGUpIGFzIFRpbnlEYXRlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0VmFsdWUoc2VsZWN0ZWRQcmVzZXRWYWx1ZSk7XG4gICAgICAgIGNvbnN0IHNob3J0Y3V0UHJlc2V0c1ZhbHVlID0gc2V0VmFsdWVCeVRpbWVzdGFtcFByZWNpc2lvbihzaG9ydGN1dFByZXNldHM/LnZhbHVlLCB0aGlzLmlzUmFuZ2UsIHRoaXMudGltZXN0YW1wUHJlY2lzaW9uKSBhcyBudW1iZXI7XG4gICAgICAgIHRoaXMuZGF0ZVZhbHVlQ2hhbmdlLmVtaXQoe1xuICAgICAgICAgICAgdmFsdWU6IGhlbHBlcnMuaXNBcnJheSh2YWx1ZSkgPyB0aGlzLnNlbGVjdGVkVmFsdWUgOiBzZWxlY3RlZFByZXNldFZhbHVlLFxuICAgICAgICAgICAgdHJpZ2dlclByZXNldDogT2JqZWN0LmFzc2lnbih7fSwgc2hvcnRjdXRQcmVzZXRzLCB7IHZhbHVlOiBzaG9ydGN1dFByZXNldHNWYWx1ZSB9KVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFoZWxwZXJzLmlzQXJyYXkodmFsdWUpICYmIHRoaXMuc2hvd1RpbWUgJiYgdGhpcy5zaG93VGltZVBpY2tlcikge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVBY3RpdmVEYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgdHJhY2tCeUZuKGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ7eyBwcmVmaXhDbHMgfX0tcGlja2VyLWNvbnRhaW5lciB7eyBjbGFzc05hbWUgfX1cIj5cbiAgPGRpdlxuICAgIGNsYXNzPVwie3sgcHJlZml4Q2xzIH19IHt7IHNob3dXZWVrID8gcHJlZml4Q2xzICsgJy13ZWVrLW51bWJlcicgOiAnJyB9fVxuICAgICB7eyBpc1JhbmdlID8gcHJlZml4Q2xzICsgJy1yYW5nZScgOiAnJyB9fSB7eyBwcmVmaXhDbHMgfX0tcGlja2VyLXNob3J0Y3V0LXt7IHNob3J0Y3V0UG9zaXRpb24gPT09ICdsZWZ0JyA/ICdsZWZ0JyA6ICdib3R0b20nIH19XCI+XG4gICAgPGRpdiBjbGFzcz1cInt7IHByZWZpeENscyB9fS1waWNrZXItc2hvcnRjdXRcIiAqbmdJZj1cInNob3dTaG9ydGN1dFwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInt7IHByZWZpeENscyB9fS1waWNrZXItc2hvcnRjdXQtaXRlbVwiXG4gICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkXCJcbiAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaW5uZXJTaG9ydGN1dFByZXNldHM7IHRyYWNrQnk6IHRyYWNrQnlGblwiXG4gICAgICAgIChjbGljayk9XCJzaG9ydGN1dFNldFZhbHVlKGl0ZW0pXCI+XG4gICAgICAgIHt7IGl0ZW0udGl0bGUgfX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJ7eyBwcmVmaXhDbHMgfX0tcGFuZWxcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ7eyBwcmVmaXhDbHMgfX0tZGF0ZS1wYW5lbFwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmxleGlibGU7IGVsc2UgZGVmYXVsdFBhbmVsXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInt7IHByZWZpeENscyB9fS1kYXRlLXBhbmVsLWZsZXhpYmxlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwie3sgcHJlZml4Q2xzIH19LWRhdGUtcGFuZWwtZmxleGlibGUtdGFiXCI+XG4gICAgICAgICAgICAgIDx0aHktbmF2IHRoeVR5cGU9XCJwdWxsZWRcIiB0aHlTaXplPVwic21cIj5cbiAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgdGh5TmF2TGluayBbdGh5TmF2TGlua0FjdGl2ZV09XCJmbGV4aWJsZUFjdGl2ZVRhYiA9PT0gJ2FkdmFuY2VkJ1wiIChjbGljayk9XCJzZWxlY3RUYWIoJ2FkdmFuY2VkJylcIlxuICAgICAgICAgICAgICAgICAgPumrmOe6p+mAiemhuTwvYVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgdGh5TmF2TGluayBbdGh5TmF2TGlua0FjdGl2ZV09XCJmbGV4aWJsZUFjdGl2ZVRhYiA9PT0gJ2N1c3RvbSdcIiAoY2xpY2spPVwic2VsZWN0VGFiKCdjdXN0b20nKVwiXG4gICAgICAgICAgICAgICAgICA+6Ieq5a6a5LmJPC9hXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L3RoeS1uYXY+XG4gICAgICAgICAgICAgIDxidXR0b24gdGh5QnV0dG9uSWNvbj1cInN3ZWVwXCIgdGh5U2l6ZT1cInNtXCIgY2xhc3M9XCJjbGVhci1kYXRlLWJ1dHRvblwiIChjbGljayk9XCJjbGVhckZsZXhpYmxlVmFsdWUoKVwiPjwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwie3sgcHJlZml4Q2xzIH19LWRhdGUtcGFuZWwtYWR2YW5jZWRcIiBbaGlkZGVuXT1cImZsZXhpYmxlQWN0aXZlVGFiICE9PSAnYWR2YW5jZWQnXCI+XG4gICAgICAgICAgICAgICAgPGRhdGUtY2Fyb3VzZWxcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJkYXRlQ2Fyb3VzZWxcIlxuICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlVmFsdWVGcm9tQWR2YW5jZWRTZWxlY3QoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImFkdmFuY2VkU2VsZWN0ZWRWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICBbYWN0aXZlRGF0ZV09XCJzZWxlY3RlZFZhbHVlWzBdXCI+PC9kYXRlLWNhcm91c2VsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPGRpdiBbaGlkZGVuXT1cImZsZXhpYmxlQWN0aXZlVGFiICE9PSAnY3VzdG9tJ1wiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidHBsSW5uZXJQb3B1cFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFBhbmVsPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1JhbmdlOyBlbHNlIHRwbFNpbmdsZVBhcnRcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0cGxSYW5nZVBhcnQ7IGNvbnRleHQ6IHsgcGFydFR5cGU6ICdsZWZ0JyB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidHBsUmFuZ2VQYXJ0OyBjb250ZXh0OiB7IHBhcnRUeXBlOiAncmlnaHQnIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzUmFuZ2VcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0cGxGb290ZXJcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI3RwbElubmVyUG9wdXAgbGV0LXBhcnRUeXBlPVwicGFydFR5cGVcIj5cbiAgPGlubmVyLXBvcHVwXG4gICAgW3Nob3dXZWVrXT1cInNob3dXZWVrXCJcbiAgICBbaXNSYW5nZV09XCJpc1JhbmdlXCJcbiAgICBbcGFuZWxNb2RlXT1cImdldFBhbmVsTW9kZShwYW5lbE1vZGUsIHBhcnRUeXBlKVwiXG4gICAgW2VuZFBhbmVsTW9kZV09XCJnZXRQYW5lbE1vZGUoZW5kUGFuZWxNb2RlLCBwYXJ0VHlwZSlcIlxuICAgIFtwYXJ0VHlwZV09XCJwYXJ0VHlwZVwiXG4gICAgW3Nob3dEYXRlUmFuZ2VJbnB1dF09XCJmbGV4aWJsZSAmJiBmbGV4aWJsZUFjdGl2ZVRhYiA9PT0gJ2N1c3RvbSdcIlxuICAgIChwYW5lbE1vZGVDaGFuZ2UpPVwib25QYW5lbE1vZGVDaGFuZ2UoJGV2ZW50LCBwYXJ0VHlwZSlcIlxuICAgIFt2YWx1ZV09XCJnZXRWYWx1ZUJ5U2VsZWN0b3IocGFydFR5cGUpXCJcbiAgICBbc2VsZWN0ZWRWYWx1ZV09XCJzZWxlY3RlZFZhbHVlXCJcbiAgICBbYWN0aXZlRGF0ZV09XCJnZXRBY3RpdmVEYXRlKHBhcnRUeXBlKVwiXG4gICAgW3JhbmdlQWN0aXZlRGF0ZV09XCJhY3RpdmVEYXRlXCJcbiAgICBbZGlzYWJsZWREYXRlXT1cImRpc2FibGVkRGF0ZVwiXG4gICAgW2RhdGVSZW5kZXJdPVwiZGF0ZVJlbmRlclwiXG4gICAgW2hvdmVyVmFsdWVdPVwiaG92ZXJWYWx1ZVwiXG4gICAgW2VuYWJsZVByZXZdPVwiZW5hYmxlUHJldk5leHQoJ3ByZXYnLCBwYXJ0VHlwZSlcIlxuICAgIFtlbmFibGVOZXh0XT1cImVuYWJsZVByZXZOZXh0KCduZXh0JywgcGFydFR5cGUpXCJcbiAgICAoZGF5SG92ZXIpPVwib25EYXlIb3ZlcigkZXZlbnQpXCJcbiAgICAoc2VsZWN0RGF0ZSk9XCJjaGFuZ2VWYWx1ZUZyb21TZWxlY3QoJGV2ZW50LCBwYXJ0VHlwZSlcIlxuICAgIChoZWFkZXJDaGFuZ2UpPVwib25IZWFkZXJDaGFuZ2UoJGV2ZW50LCBwYXJ0VHlwZSlcIj48L2lubmVyLXBvcHVwPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN0cGxGb290ZXI+XG4gIDxjYWxlbmRhci1mb290ZXJcbiAgICBbc2hvd1RpbWVdPVwic2hvd1RpbWVcIlxuICAgIFttdXN0U2hvd1RpbWVdPVwibXVzdFNob3dUaW1lXCJcbiAgICBbdmFsdWVdPVwidmFsdWVcIlxuICAgIFtkaXNhYmxlVGltZUNvbmZpcm1dPVwiZGlzYWJsZVRpbWVDb25maXJtXCJcbiAgICAoc2hvd1RpbWVQaWNrZXJDaGFuZ2UpPVwib25TaG93VGltZVBpY2tlckNoYW5nZSgkZXZlbnQpXCJcbiAgICAoc2VsZWN0VGltZSk9XCJvblNlbGVjdFRpbWUoJGV2ZW50KVwiXG4gICAgKGNsaWNrT2spPVwib25DbGlja09rKClcIlxuICAgIChjbGlja1JlbW92ZSk9XCJvbkNsaWNrUmVtb3ZlKClcIj48L2NhbGVuZGFyLWZvb3Rlcj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gU2luZ2xlIE9OTFkgLS0+XG48bmctdGVtcGxhdGUgI3RwbFNpbmdsZVBhcnQ+XG4gIDxkaXY+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRwbElubmVyUG9wdXBcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIFJhbmdlIE9OTFkgLS0+XG48bmctdGVtcGxhdGUgI3RwbFJhbmdlUGFydCBsZXQtcGFydFR5cGU9XCJwYXJ0VHlwZVwiPlxuICA8ZGl2IGNsYXNzPVwie3sgcHJlZml4Q2xzIH19LXJhbmdlLXBhcnQge3sgcHJlZml4Q2xzIH19LXJhbmdlLXt7IHBhcnRUeXBlIH19XCI+XG4gICAgPGRpdiBzdHlsZT1cIm91dGxpbmU6IG5vbmVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0cGxJbm5lclBvcHVwOyBjb250ZXh0OiB7IHBhcnRUeXBlOiBwYXJ0VHlwZSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
546
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1wb3B1cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvZGF0ZS1waWNrZXIvbGliL3BvcHVwcy9kYXRlLXBvcHVwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9kYXRlLXBpY2tlci9saWIvcG9wdXBzL2RhdGUtcG9wdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDaEQsT0FBTyxFQUFnQixRQUFRLEVBQXdCLE9BQU8sRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFdkksT0FBTyxFQUNILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxFQUdOLE1BQU0sRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxNQUFNLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV2RSxPQUFPLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsNEJBQTRCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQWEzSSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDdkUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBDQUEwQyxDQUFD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LDZYQUFFLGNBQWM7OzJGQUVwSCxTQUFTO2tCQVRyQixTQUFTO3NDQUNXLHVCQUF1QixDQUFDLE1BQU0sWUFFckMsWUFBWSxZQUNaLFdBQVcsY0FFVCxJQUFJLFdBQ1AsQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLGNBQWMsQ0FBQzs4QkFNckgsT0FBTztzQkFBZixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUtHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBS0csWUFBWTtzQkFBcEIsS0FBSztnQkFFRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUVHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUcsZUFBZTtzQkFBdkIsS0FBSztnQkFFRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBRUcsUUFBUTtzQkFBaEIsS0FBSztnQkFFRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBRUcsa0JBQWtCO3NCQUExQixLQUFLO2dCQUVhLGVBQWU7c0JBQWpDLE1BQU07Z0JBQ1ksY0FBYztzQkFBaEMsTUFBTTtnQkFDWSxXQUFXO3NCQUE3QixNQUFNO2dCQUNZLFFBQVE7c0JBQTFCLE1BQU07Z0JBQ1ksb0JBQW9CO3NCQUF0QyxNQUFNO2dCQUNZLGVBQWU7c0JBQWpDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBlbmRPZkRheSwgc3RhcnRPZkRheSB9IGZyb20gJ2RhdGUtZm5zJztcbmltcG9ydCB7IEZ1bmN0aW9uUHJvcCwgVGlueURhdGUsIFRpbnlEYXRlQ29tcGFyZUdyYWluLCBoZWxwZXJzLCBpc0Z1bmN0aW9uLCBpc1VuZGVmaW5lZE9yTnVsbCwgc29ydFJhbmdlVmFsdWUgfSBmcm9tICduZ3gtdGV0aHlzL3V0aWwnO1xuXG5pbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5wdXQsXG4gICAgbnVtYmVyQXR0cmlidXRlLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgaW5qZWN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVGh5QnV0dG9uSWNvbiB9IGZyb20gJ25neC10ZXRoeXMvYnV0dG9uJztcbmltcG9ydCB7IFRoeU5hdiwgVGh5TmF2SXRlbURpcmVjdGl2ZSB9IGZyb20gJ25neC10ZXRoeXMvbmF2JztcbmltcG9ydCB7IFRoeURhdGVQaWNrZXJDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZGF0ZS1waWNrZXIuc2VydmljZSc7XG5pbXBvcnQgeyBDb21wYXRpYmxlVmFsdWUsIERhdGVQaWNrZXJGbGV4aWJsZVRhYiwgUmFuZ2VBZHZhbmNlZFZhbHVlLCBSYW5nZVBhcnRUeXBlIH0gZnJvbSAnLi4vLi4vaW5uZXItdHlwZXMnO1xuaW1wb3J0IHsgZGF0ZUFkZEFtb3VudCwgZ2V0U2hvcnRjdXRWYWx1ZSwgaGFzVmFsdWUsIG1ha2VWYWx1ZSwgc2V0VmFsdWVCeVRpbWVzdGFtcFByZWNpc2lvbiwgdHJhbnNmb3JtRGF0ZVZhbHVlIH0gZnJvbSAnLi4vLi4vcGlja2VyLnV0aWwnO1xuaW1wb3J0IHtcbiAgICBDb21wYXRpYmxlRGF0ZSxcbiAgICBDb21wYXRpYmxlUHJlc2V0cyxcbiAgICBEaXNhYmxlZERhdGVGbixcbiAgICBTdXBwb3J0VGltZU9wdGlvbnMsXG4gICAgVGh5RGF0ZUNoYW5nZUV2ZW50LFxuICAgIFRoeURhdGVHcmFudWxhcml0eSxcbiAgICBUaHlQYW5lbE1vZGUsXG4gICAgVGh5U2hvcnRjdXRQb3NpdGlvbixcbiAgICBUaHlTaG9ydGN1dFByZXNldCxcbiAgICBUaHlTaG9ydGN1dFZhbHVlXG59IGZyb20gJy4uLy4uL3N0YW5kYXJkLXR5cGVzJztcbmltcG9ydCB7IENhbGVuZGFyRm9vdGVyIH0gZnJvbSAnLi4vY2FsZW5kYXIvY2FsZW5kYXItZm9vdGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRlQ2Fyb3VzZWwgfSBmcm9tICcuLi9kYXRlLWNhcm91c2VsL2RhdGUtY2Fyb3VzZWwuY29tcG9uZW50JztcbmltcG9ydCB7IElubmVyUG9wdXAgfSBmcm9tICcuL2lubmVyLXBvcHVwLmNvbXBvbmVudCc7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgICBzZWxlY3RvcjogJ2RhdGUtcG9wdXAnLFxuICAgIGV4cG9ydEFzOiAnZGF0ZVBvcHVwJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZGF0ZS1wb3B1cC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbVGh5TmF2LCBUaHlOYXZJdGVtRGlyZWN0aXZlLCBUaHlCdXR0b25JY29uLCBEYXRlQ2Fyb3VzZWwsIEZvcm1zTW9kdWxlLCBOZ1RlbXBsYXRlT3V0bGV0LCBJbm5lclBvcHVwLCBDYWxlbmRhckZvb3Rlcl1cbn0pXG5leHBvcnQgY2xhc3MgRGF0ZVBvcHVwIGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQge1xuICAgIHByaXZhdGUgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgICBwcml2YXRlIGRhdGVQaWNrZXJDb25maWdTZXJ2aWNlID0gaW5qZWN0KFRoeURhdGVQaWNrZXJDb25maWdTZXJ2aWNlKTtcblxuICAgIEBJbnB1dCgpIGlzUmFuZ2U6IGJvb2xlYW47XG4gICAgQElucHV0KCkgc2hvd1dlZWs6IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKSBmb3JtYXQ6IHN0cmluZztcbiAgICBASW5wdXQoKSBkaXNhYmxlZERhdGU6IERpc2FibGVkRGF0ZUZuO1xuICAgIEBJbnB1dCgpIG1pbkRhdGU6IERhdGUgfCBudW1iZXI7XG4gICAgQElucHV0KCkgbWF4RGF0ZTogRGF0ZSB8IG51bWJlcjtcbiAgICBASW5wdXQoKSBzaG93VG9kYXk6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiDmmK/lkKbmlK/mjIHorr7nva7ml7bpl7Qo5pe244CB5YiGKVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHNob3dUaW1lOiBTdXBwb3J0VGltZU9wdGlvbnMgfCBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICog5piv5ZCm5bGV56S65pe26Ze0KOaXtuOAgeWIhilcbiAgICAgKi9cbiAgICBASW5wdXQoKSBtdXN0U2hvd1RpbWU6IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKSBkYXRlUmVuZGVyOiBGdW5jdGlvblByb3A8VGVtcGxhdGVSZWY8RGF0ZT4gfCBzdHJpbmc+O1xuICAgIEBJbnB1dCgpIGNsYXNzTmFtZTogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHBhbmVsTW9kZTogVGh5UGFuZWxNb2RlIHwgVGh5UGFuZWxNb2RlW107XG4gICAgQElucHV0KCkgdmFsdWU6IENvbXBhdGlibGVWYWx1ZTtcbiAgICBASW5wdXQoKSBkZWZhdWx0UGlja2VyVmFsdWU6IENvbXBhdGlibGVEYXRlIHwgbnVtYmVyO1xuXG4gICAgQElucHV0KCkgc2hvd1Nob3J0Y3V0OiBib29sZWFuO1xuXG4gICAgQElucHV0KCkgc2hvcnRjdXRQcmVzZXRzOiBDb21wYXRpYmxlUHJlc2V0cztcblxuICAgIEBJbnB1dCgpIHNob3J0Y3V0UG9zaXRpb246IFRoeVNob3J0Y3V0UG9zaXRpb247XG5cbiAgICBASW5wdXQoKSBmbGV4aWJsZTogYm9vbGVhbjtcblxuICAgIEBJbnB1dCgpIGZsZXhpYmxlRGF0ZUdyYW51bGFyaXR5OiBUaHlEYXRlR3JhbnVsYXJpdHk7XG5cbiAgICBASW5wdXQoKSB0aW1lc3RhbXBQcmVjaXNpb246ICdzZWNvbmRzJyB8ICdtaWxsaXNlY29uZHMnO1xuXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IHBhbmVsTW9kZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VGh5UGFuZWxNb2RlIHwgVGh5UGFuZWxNb2RlW10+KCk7XG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IGNhbGVuZGFyQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxDb21wYXRpYmxlVmFsdWU+KCk7XG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxDb21wYXRpYmxlVmFsdWUgfCBSYW5nZUFkdmFuY2VkVmFsdWU+KCk7XG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IHJlc3VsdE9rID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpOyAvLyBFbWl0dGVkIHdoZW4gZG9uZSB3aXRoIGRhdGUgc2VsZWN0aW5nXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IHNob3dUaW1lUGlja2VyQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICAgIEBPdXRwdXQoKSByZWFkb25seSBkYXRlVmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFRoeURhdGVDaGFuZ2VFdmVudD4oKTtcblxuICAgIHByZWZpeENscyA9ICd0aHktY2FsZW5kYXInO1xuICAgIHNob3dUaW1lUGlja2VyID0gZmFsc2U7XG4gICAgdGltZU9wdGlvbnM6IFN1cHBvcnRUaW1lT3B0aW9ucyB8IFN1cHBvcnRUaW1lT3B0aW9uc1tdIHwgbnVsbDtcbiAgICBhY3RpdmVEYXRlOiBUaW55RGF0ZSB8IFRpbnlEYXRlW107XG4gICAgc2VsZWN0ZWRWYWx1ZTogVGlueURhdGVbXSA9IFtdOyAvLyBSYW5nZSBPTkxZXG4gICAgaG92ZXJWYWx1ZTogVGlueURhdGVbXSA9IFtdOyAvLyBSYW5nZSBPTkxZXG5cbiAgICBhZHZhbmNlZFNlbGVjdGVkVmFsdWU6IFJhbmdlQWR2YW5jZWRWYWx1ZTsgLy8gYWR2YW5jZWQgT05MWVxuXG4gICAgZmxleGlibGVBY3RpdmVUYWI6IERhdGVQaWNrZXJGbGV4aWJsZVRhYiA9ICdhZHZhbmNlZCc7XG5cbiAgICBnZXQgaGFzVGltZVBpY2tlcigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5zaG93VGltZTtcbiAgICB9XG4gICAgcHJpdmF0ZSBwYXJ0VHlwZU1hcDogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfSA9IHsgbGVmdDogMCwgcmlnaHQ6IDEgfTtcblxuICAgIFtwcm9wZXJ0eTogc3RyaW5nXTogYW55O1xuXG4gICAgZW5kUGFuZWxNb2RlOiBUaHlQYW5lbE1vZGUgfCBUaHlQYW5lbE1vZGVbXTtcblxuICAgIGlubmVyU2hvcnRjdXRQcmVzZXRzOiBUaHlTaG9ydGN1dFByZXNldFtdO1xuXG4gICAgZGlzYWJsZVRpbWVDb25maXJtID0gZmFsc2U7XG5cbiAgICBzZXRQcm9wZXJ0eTxUIGV4dGVuZHMga2V5b2YgRGF0ZVBvcHVwPihrZXk6IFQsIHZhbHVlOiB0aGlzW1RdKTogdm9pZCB7XG4gICAgICAgIHRoaXNba2V5XSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbml0U2hvcnRjdXRQcmVzZXRzKCk7XG4gICAgICAgIHRoaXMuaW5pdFBhbmVsTW9kZSgpO1xuICAgICAgICBpZiAodGhpcy5mbGV4aWJsZSAmJiB0aGlzLmZsZXhpYmxlRGF0ZUdyYW51bGFyaXR5ID09PSAnZGF5Jykge1xuICAgICAgICAgICAgdGhpcy5mbGV4aWJsZUFjdGl2ZVRhYiA9ICdjdXN0b20nO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRlZmF1bHRQaWNrZXJWYWx1ZSAmJiAhaGFzVmFsdWUodGhpcy52YWx1ZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRyYW5zZm9ybURhdGVWYWx1ZSh0aGlzLmRlZmF1bHRQaWNrZXJWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gbWFrZVZhbHVlKHZhbHVlLCB0aGlzLmlzUmFuZ2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlQWN0aXZlRGF0ZSgpO1xuICAgICAgICB0aGlzLmluaXREaXNhYmxlZERhdGUoKTtcbiAgICAgICAgaWYgKHRoaXMuaXNSYW5nZSAmJiB0aGlzLmZsZXhpYmxlICYmIHRoaXMudmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuYWR2YW5jZWRTZWxlY3RlZFZhbHVlID0ge1xuICAgICAgICAgICAgICAgIGJlZ2luOiB0aGlzLnZhbHVlWzBdLFxuICAgICAgICAgICAgICAgIGVuZDogdGhpcy52YWx1ZVsxXSxcbiAgICAgICAgICAgICAgICBkYXRlR3JhbnVsYXJpdHk6IHRoaXMuZmxleGlibGVEYXRlR3JhbnVsYXJpdHlcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChjaGFuZ2VzLnBhbmVsTW9kZSkge1xuICAgICAgICAgICAgaWYgKGhlbHBlcnMuaXNBcnJheSh0aGlzLnBhbmVsTW9kZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVuZFBhbmVsTW9kZSA9IFsuLi50aGlzLnBhbmVsTW9kZV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZW5kUGFuZWxNb2RlID0gdGhpcy5wYW5lbE1vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZXMuZGVmYXVsdFBpY2tlclZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUFjdGl2ZURhdGUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlcy52YWx1ZSAmJiBjaGFuZ2VzLnZhbHVlLmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVBY3RpdmVEYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0U2hvcnRjdXRQcmVzZXRzKCk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IHNob3J0Y3V0UmFuZ2VzUHJlc2V0cywgc2hvcnRjdXREYXRlUHJlc2V0cywgc2hvd1Nob3J0Y3V0IH0gPSB0aGlzLmRhdGVQaWNrZXJDb25maWdTZXJ2aWNlO1xuXG4gICAgICAgIHRoaXMuc2hvd1Nob3J0Y3V0ID1cbiAgICAgICAgICAgIFsnZGF0ZScsICdkYXRlLGRhdGUnXS5pbmNsdWRlcyh0aGlzLnBhbmVsTW9kZS50b1N0cmluZygpKSAmJiBpc1VuZGVmaW5lZE9yTnVsbCh0aGlzLnNob3dTaG9ydGN1dClcbiAgICAgICAgICAgICAgICA/IHNob3dTaG9ydGN1dFxuICAgICAgICAgICAgICAgIDogdGhpcy5zaG93U2hvcnRjdXQ7XG5cbiAgICAgICAgaWYgKHRoaXMuc2hvd1Nob3J0Y3V0KSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuc2hvcnRjdXRQcmVzZXRzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG9ydGN1dFByZXNldHMgPSB0aGlzLmlzUmFuZ2UgPyBzaG9ydGN1dFJhbmdlc1ByZXNldHMgOiBzaG9ydGN1dERhdGVQcmVzZXRzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmlubmVyU2hvcnRjdXRQcmVzZXRzID0gaXNGdW5jdGlvbih0aGlzLnNob3J0Y3V0UHJlc2V0cykgPyB0aGlzLnNob3J0Y3V0UHJlc2V0cygpIDogdGhpcy5zaG9ydGN1dFByZXNldHM7XG4gICAgICAgICAgICBpZiAodGhpcy5pbm5lclNob3J0Y3V0UHJlc2V0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtaW5EYXRlOiBUaW55RGF0ZSA9IHRoaXMuZ2V0TWluVGlueURhdGUoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXhEYXRlOiBUaW55RGF0ZSA9IHRoaXMuZ2V0TWF4VGlueURhdGUoKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IG1pblRpbWUgPSBtaW5EYXRlID8gbWluRGF0ZS5nZXRUaW1lKCkgOiBudWxsO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1heFRpbWUgPSBtYXhEYXRlID8gbWF4RGF0ZS5nZXRUaW1lKCkgOiBudWxsO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNSYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlubmVyU2hvcnRjdXRQcmVzZXRzLmZvckVhY2goKHByZXNldDogVGh5U2hvcnRjdXRQcmVzZXQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJlZ2luOiBudW1iZXIgfCBEYXRlID0gZ2V0U2hvcnRjdXRWYWx1ZShwcmVzZXQudmFsdWVbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmVnaW5UaW1lOiBudW1iZXIgPSBuZXcgVGlueURhdGUoc3RhcnRPZkRheShiZWdpbikpLmdldFRpbWUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kOiBudW1iZXIgfCBEYXRlID0gZ2V0U2hvcnRjdXRWYWx1ZShwcmVzZXQudmFsdWVbMV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kVGltZTogbnVtYmVyID0gbmV3IFRpbnlEYXRlKGVuZE9mRGF5KGVuZCkpLmdldFRpbWUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChtaW5EYXRlICYmIGVuZFRpbWUgPCBtaW5UaW1lKSB8fCAobWF4RGF0ZSAmJiBiZWdpblRpbWUgPiBtYXhUaW1lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNldC5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNldC5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlubmVyU2hvcnRjdXRQcmVzZXRzLmZvckVhY2goKHByZXNldDogVGh5U2hvcnRjdXRQcmVzZXQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpbmdsZVZhbHVlOiBudW1iZXIgfCBEYXRlID0gZ2V0U2hvcnRjdXRWYWx1ZShwcmVzZXQudmFsdWUgYXMgVGh5U2hvcnRjdXRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaW5nbGVUaW1lOiBudW1iZXIgPSBuZXcgVGlueURhdGUoc2luZ2xlVmFsdWUpLmdldFRpbWUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChtaW5EYXRlICYmIHNpbmdsZVRpbWUgPCBtaW5UaW1lKSB8fCAobWF4RGF0ZSAmJiBzaW5nbGVUaW1lID4gbWF4VGltZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzZXQuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzZXQuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlQWN0aXZlRGF0ZSgpIHtcbiAgICAgICAgdGhpcy5jbGVhckhvdmVyVmFsdWUoKTtcbiAgICAgICAgaWYgKCF0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCB7IHZhbHVlIH0gPSB0cmFuc2Zvcm1EYXRlVmFsdWUodGhpcy5kZWZhdWx0UGlja2VyVmFsdWUpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG1ha2VWYWx1ZSh2YWx1ZSwgdGhpcy5pc1JhbmdlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc1JhbmdlKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZmxleGlibGUgfHwgdGhpcy5mbGV4aWJsZURhdGVHcmFudWxhcml0eSA9PT0gJ2RheScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB0aGlzLnZhbHVlIGFzIFRpbnlEYXRlW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLm5vcm1hbGl6ZVJhbmdlVmFsdWUodGhpcy52YWx1ZSBhcyBUaW55RGF0ZVtdLCB0aGlzLmdldFBhbmVsTW9kZSh0aGlzLmVuZFBhbmVsTW9kZSkgYXMgVGh5UGFuZWxNb2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IHRoaXMudmFsdWUgYXMgVGlueURhdGU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc0Rpc2FibGVUaW1lQ29uZmlybSgpO1xuICAgIH1cblxuICAgIGluaXRQYW5lbE1vZGUoKSB7XG4gICAgICAgIGlmICghdGhpcy5lbmRQYW5lbE1vZGUpIHtcbiAgICAgICAgICAgIGlmIChoZWxwZXJzLmlzQXJyYXkodGhpcy5wYW5lbE1vZGUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbmRQYW5lbE1vZGUgPSBbLi4udGhpcy5wYW5lbE1vZGVdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVuZFBhbmVsTW9kZSA9IHRoaXMucGFuZWxNb2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGhlbHBlcnMuaXNBcnJheSh0aGlzLmVuZFBhbmVsTW9kZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhbmVsTW9kZSA9IFsuLi50aGlzLmVuZFBhbmVsTW9kZV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucGFuZWxNb2RlID0gdGhpcy5lbmRQYW5lbE1vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0RGlzYWJsZWREYXRlKCk6IHZvaWQge1xuICAgICAgICBsZXQgbWluRGF0ZTogVGlueURhdGU7XG4gICAgICAgIGxldCBtYXhEYXRlOiBUaW55RGF0ZTtcbiAgICAgICAgbGV0IGRpc2FibGVkRGF0ZUZuOiBEaXNhYmxlZERhdGVGbjtcbiAgICAgICAgaWYgKHRoaXMubWluRGF0ZSkge1xuICAgICAgICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gdHJhbnNmb3JtRGF0ZVZhbHVlKHRoaXMubWluRGF0ZSk7XG4gICAgICAgICAgICBtaW5EYXRlID0gbmV3IFRpbnlEYXRlKHZhbHVlIGFzIERhdGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1heERhdGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRyYW5zZm9ybURhdGVWYWx1ZSh0aGlzLm1heERhdGUpO1xuICAgICAgICAgICAgbWF4RGF0ZSA9IG5ldyBUaW55RGF0ZSh2YWx1ZSBhcyBEYXRlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZERhdGUpIHtcbiAgICAgICAgICAgIGRpc2FibGVkRGF0ZUZuID0gdGhpcy5kaXNhYmxlZERhdGU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kaXNhYmxlZERhdGUgPSBkID0+IHtcbiAgICAgICAgICAgIGxldCBleHByZXNzaW9uID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAobWluRGF0ZSkge1xuICAgICAgICAgICAgICAgIGV4cHJlc3Npb24gPSBkIDwgbWluRGF0ZS5zdGFydE9mRGF5KCkubmF0aXZlRGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXhEYXRlICYmICFleHByZXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbiA9IGQgPiBtYXhEYXRlLmVuZE9mRGF5KCkubmF0aXZlRGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkaXNhYmxlZERhdGVGbiAmJiB0eXBlb2YgZGlzYWJsZWREYXRlRm4gPT09ICdmdW5jdGlvbicgJiYgIWV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uID0gZGlzYWJsZWREYXRlRm4oZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZXhwcmVzc2lvbjtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBvblNob3dUaW1lUGlja2VyQ2hhbmdlKHNob3c6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zaG93VGltZVBpY2tlciA9IHNob3c7XG4gICAgICAgIHRoaXMuc2hvd1RpbWVQaWNrZXJDaGFuZ2UuZW1pdChzaG93KTtcbiAgICB9XG5cbiAgICBvbkNsaWNrT2soKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0VmFsdWUodGhpcy52YWx1ZSk7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcbiAgICAgICAgdGhpcy5yZXN1bHRPay5lbWl0KCk7XG4gICAgfVxuXG4gICAgb25DbGlja1JlbW92ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuaXNSYW5nZSA/IFtdIDogbnVsbDtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpO1xuICAgIH1cblxuICAgIG9uRGF5SG92ZXIodmFsdWU6IFRpbnlEYXRlKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzUmFuZ2UgJiYgdGhpcy5zZWxlY3RlZFZhbHVlWzBdICYmICF0aGlzLnNlbGVjdGVkVmFsdWVbMV0pIHtcbiAgICAgICAgICAgIC8vIFdoZW4gcmlnaHQgdmFsdWUgaXMgc2VsZWN0ZWQsIGRvbid0IGRvIGhvdmVyXG4gICAgICAgICAgICBjb25zdCBiYXNlID0gdGhpcy5zZWxlY3RlZFZhbHVlWzBdOyAvLyBVc2UgdGhlIGxlZnQgb2Ygc2VsZWN0ZWQgdmFsdWUgYXMgdGhlIGJhc2UgdG8gZGVjaWRlIGxhdGVyIGhvdmVyVmFsdWVcbiAgICAgICAgICAgIGlmIChiYXNlLmlzQmVmb3JlRGF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaG92ZXJWYWx1ZSA9IFtiYXNlLCB2YWx1ZV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaG92ZXJWYWx1ZSA9IFt2YWx1ZSwgYmFzZV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblBhbmVsTW9kZUNoYW5nZShtb2RlOiBUaHlQYW5lbE1vZGUsIHBhcnRUeXBlPzogUmFuZ2VQYXJ0VHlwZSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc1JhbmdlKSB7XG4gICAgICAgICAgICAodGhpcy5wYW5lbE1vZGUgYXMgVGh5UGFuZWxNb2RlW10pW3RoaXMuZ2V0UGFydFR5cGVJbmRleChwYXJ0VHlwZSldID0gbW9kZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucGFuZWxNb2RlID0gbW9kZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBhbmVsTW9kZUNoYW5nZS5lbWl0KHRoaXMucGFuZWxNb2RlKTtcbiAgICB9XG5cbiAgICBvbkhlYWRlckNoYW5nZSh2YWx1ZTogVGlueURhdGUsIHBhcnRUeXBlPzogUmFuZ2VQYXJ0VHlwZSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc1JhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZURhdGVbdGhpcy5nZXRQYXJ0VHlwZUluZGV4KHBhcnRUeXBlKV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IHRoaXMubm9ybWFsaXplUmFuZ2VWYWx1ZShcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZURhdGUgYXMgVGlueURhdGVbXSxcbiAgICAgICAgICAgICAgICB0aGlzLmdldFBhbmVsTW9kZSh0aGlzLmVuZFBhbmVsTW9kZSwgcGFydFR5cGUpIGFzIFRoeVBhbmVsTW9kZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25TZWxlY3RUaW1lKHZhbHVlOiBUaW55RGF0ZSwgcGFydFR5cGU/OiBSYW5nZVBhcnRUeXBlKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzUmFuZ2UpIHtcbiAgICAgICAgICAgIC8vIFRPRE86cmFuZ2UgcGlja2VyIHNldCB0aW1lXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKG5ldyBUaW55RGF0ZSh2YWx1ZS5uYXRpdmVEYXRlKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZWxlY3RUYWIoYWN0aXZlOiBEYXRlUGlja2VyRmxleGlibGVUYWIpIHtcbiAgICAgICAgdGhpcy5mbGV4aWJsZUFjdGl2ZVRhYiA9IGFjdGl2ZTtcbiAgICB9XG5cbiAgICBjbGVhckZsZXhpYmxlVmFsdWUoKSB7XG4gICAgICAgIHRoaXMuZmxleGlibGVEYXRlR3JhbnVsYXJpdHkgPSBudWxsO1xuICAgICAgICBpZiAodGhpcy5mbGV4aWJsZUFjdGl2ZVRhYiA9PT0gJ2FkdmFuY2VkJykge1xuICAgICAgICAgICAgdGhpcy5hZHZhbmNlZFNlbGVjdGVkVmFsdWUgPSB7fTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh7XG4gICAgICAgICAgICBiZWdpbjogbnVsbCxcbiAgICAgICAgICAgIGVuZDogbnVsbCxcbiAgICAgICAgICAgIGRhdGVHcmFudWxhcml0eTogdGhpcy5mbGV4aWJsZURhdGVHcmFudWxhcml0eVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjaGFuZ2VWYWx1ZUZyb21BZHZhbmNlZFNlbGVjdCh2YWx1ZTogUmFuZ2VBZHZhbmNlZFZhbHVlKSB7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgICAgIC8vIGNsZWFyIGN1c3RvbSBkYXRlIHdoZW4gc2VsZWN0IGEgYWR2YW5jZWQgZGF0ZVxuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSBbXTtcbiAgICAgICAgdGhpcy5kYXRlVmFsdWVDaGFuZ2UuZW1pdCh7XG4gICAgICAgICAgICB2YWx1ZTogW3ZhbHVlLmJlZ2luLCB2YWx1ZS5lbmRdXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNoYW5nZVZhbHVlRnJvbVNlbGVjdCh2YWx1ZTogVGlueURhdGUsIHBhcnRUeXBlPzogUmFuZ2VQYXJ0VHlwZSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc1JhbmdlKSB7XG4gICAgICAgICAgICAvLyBjbGVhciBhZHZhbmNlZCBkYXRlIHdoZW4gc2VsZWN0IGEgY3VzdG9tIGRhdGVcbiAgICAgICAgICAgIHRoaXMuYWR2YW5jZWRTZWxlY3RlZFZhbHVlID0ge307XG5cbiAgICAgICAgICAgIGNvbnN0IFtsZWZ0LCByaWdodF0gPSB0aGlzLnNlbGVjdGVkVmFsdWUgYXMgVGlueURhdGVbXTtcblxuICAgICAgICAgICAgaWYgKCghbGVmdCAmJiAhcmlnaHQpIHx8IChsZWZ0ICYmIHJpZ2h0KSkge1xuICAgICAgICAgICAgICAgIC8vIElmIHRvdGFsbHkgZnVsbCBvciBlbXB0eSwgY2xlYW4gdXAgJiYgcmUtYXNzaWduIGxlZnQgZmlyc3RcbiAgICAgICAgICAgICAgICB0aGlzLmhvdmVyVmFsdWUgPSB0aGlzLnNlbGVjdGVkVmFsdWUgPSBbdmFsdWVdO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IFtuZXcgVGlueURhdGUoc3RhcnRPZkRheSh0aGlzLnNlbGVjdGVkVmFsdWVbMF0ubmF0aXZlRGF0ZSkpXTtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGVuZGFyQ2hhbmdlLmVtaXQoW3RoaXMuc2VsZWN0ZWRWYWx1ZVswXS5jbG9uZSgpXSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQgJiYgIXJpZ2h0KSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgb25lIG9mIHRoZW0gaXMgZW1wdHksIGFzc2lnbiB0aGUgb3RoZXIgb25lIGFuZCBzb3J0LCB0aGVuIHNldCB0aGUgZmluYWwgdmFsdWVzXG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhckhvdmVyVmFsdWUoKTsgLy8gQ2xlYW4gdXBcbiAgICAgICAgICAgICAgICB0aGlzLnNldFJhbmdlVmFsdWUoJ3JpZ2h0JywgdmFsdWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHNvcnRSYW5nZVZhbHVlKHRoaXMuc2VsZWN0ZWRWYWx1ZSk7IC8vIFNvcnRcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSBbXG4gICAgICAgICAgICAgICAgICAgIG5ldyBUaW55RGF0ZShzdGFydE9mRGF5KHRoaXMuc2VsZWN0ZWRWYWx1ZVswXS5uYXRpdmVEYXRlKSksXG4gICAgICAgICAgICAgICAgICAgIG5ldyBUaW55RGF0ZShlbmRPZkRheSh0aGlzLnNlbGVjdGVkVmFsdWVbMV0ubmF0aXZlRGF0ZSkpXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLm5vcm1hbGl6ZVJhbmdlVmFsdWUoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRQYW5lbE1vZGUodGhpcy5lbmRQYW5lbE1vZGUsIHBhcnRUeXBlKSBhcyBUaHlQYW5lbE1vZGVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUodGhpcy5jbG9uZVJhbmdlRGF0ZSh0aGlzLnNlbGVjdGVkVmFsdWUpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGVuZGFyQ2hhbmdlLmVtaXQodGhpcy5jbG9uZVJhbmdlRGF0ZSh0aGlzLnNlbGVjdGVkVmFsdWUpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVWYWx1ZUNoYW5nZS5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuY2xvbmVSYW5nZURhdGUodGhpcy5zZWxlY3RlZFZhbHVlKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdXBkYXRlZFZhbHVlID0gdGhpcy51cGRhdGVIb3VyTWludXRlKHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUodXBkYXRlZFZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuZGF0ZVZhbHVlQ2hhbmdlLmVtaXQoe1xuICAgICAgICAgICAgICAgIHZhbHVlOiB1cGRhdGVkVmFsdWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVIb3VyTWludXRlKHZhbHVlOiBUaW55RGF0ZSk6IFRpbnlEYXRlIHtcbiAgICAgICAgaWYgKCF0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3JpZ2luRGF0ZSA9IHRoaXMudmFsdWUgYXMgVGlueURhdGU7XG4gICAgICAgIGNvbnN0IGRhdGVUaW1lID0gW3ZhbHVlLmdldEhvdXJzKCksIHZhbHVlLmdldE1pbnV0ZXMoKSwgdmFsdWUuZ2V0U2Vjb25kcygpXTtcbiAgICAgICAgY29uc3Qgb3JpZ2luRGF0ZVRpbWUgPSBbb3JpZ2luRGF0ZS5nZXRIb3VycygpLCBvcmlnaW5EYXRlLmdldE1pbnV0ZXMoKSwgb3JpZ2luRGF0ZS5nZXRTZWNvbmRzKCldO1xuXG4gICAgICAgIGNvbnN0IGlzRXF1YWxUaW1lID0gZGF0ZVRpbWUudG9TdHJpbmcoKSA9PT0gb3JpZ2luRGF0ZVRpbWUudG9TdHJpbmcoKTtcbiAgICAgICAgaWYgKGlzRXF1YWxUaW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUuc2V0SG1zKG9yaWdpbkRhdGVUaW1lWzBdLCBvcmlnaW5EYXRlVGltZVsxXSwgb3JpZ2luRGF0ZVRpbWVbMl0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZW5hYmxlUHJldk5leHQoZGlyZWN0aW9uOiAncHJldicgfCAnbmV4dCcsIHBhcnRUeXBlPzogUmFuZ2VQYXJ0VHlwZSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5pc1JhbmdlICYmIHRoaXMucGFuZWxNb2RlID09PSB0aGlzLmVuZFBhbmVsTW9kZSkge1xuICAgICAgICAgICAgY29uc3QgW3N0YXJ0LCBlbmRdID0gdGhpcy5hY3RpdmVEYXRlIGFzIFRpbnlEYXRlW107XG4gICAgICAgICAgICBjb25zdCBzaG93TWlkZGxlID0gIXN0YXJ0LmFkZE1vbnRocygxKS5pc1NhbWUoZW5kLCAnbW9udGgnKTsgLy8gT25lIG1vbnRoIGRpZmYgdGhlbiBkb24ndCBzaG93IG1pZGRsZSBwcmV2L25leHRcbiAgICAgICAgICAgIGlmICgocGFydFR5cGUgPT09ICdsZWZ0JyAmJiBkaXJlY3Rpb24gPT09ICduZXh0JykgfHwgKHBhcnRUeXBlID09PSAncmlnaHQnICYmIGRpcmVjdGlvbiA9PT0gJ3ByZXYnKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzaG93TWlkZGxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFBhbmVsTW9kZShwYW5lbE1vZGU6IFRoeVBhbmVsTW9kZSB8IFRoeVBhbmVsTW9kZVtdLCBwYXJ0VHlwZT86IFJhbmdlUGFydFR5cGUpOiBUaHlQYW5lbE1vZGUge1xuICAgICAgICBpZiAodGhpcy5pc1JhbmdlKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFuZWxNb2RlW3RoaXMuZ2V0UGFydFR5cGVJbmRleChwYXJ0VHlwZSldIGFzIFRoeVBhbmVsTW9kZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBwYW5lbE1vZGUgYXMgVGh5UGFuZWxNb2RlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0VmFsdWVCeVNlbGVjdG9yKHBhcnRUeXBlPzogUmFuZ2VQYXJ0VHlwZSk6IFRpbnlEYXRlIHtcbiAgICAgICAgaWYgKHRoaXMuaXNSYW5nZSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWVTaG93ID0gdGhpcy5zZWxlY3RlZFZhbHVlOyAvLyBVc2UgdGhlIHJlYWwgdGltZSB2YWx1ZSB0aGF0IHdpdGhvdXQgZGVjb3JhdGlvbnMgd2hlbiB0aW1lcGlja2VyIGlzIHNob3duIHVwXG4gICAgICAgICAgICByZXR1cm4gKHZhbHVlU2hvdyBhcyBUaW55RGF0ZVtdKVt0aGlzLmdldFBhcnRUeXBlSW5kZXgocGFydFR5cGUpXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlIGFzIFRpbnlEYXRlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0QWN0aXZlRGF0ZShwYXJ0VHlwZT86IFJhbmdlUGFydFR5cGUpOiBUaW55RGF0ZSB7XG4gICAgICAgIGlmICh0aGlzLmlzUmFuZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFjdGl2ZURhdGVbdGhpcy5nZXRQYXJ0VHlwZUluZGV4KHBhcnRUeXBlKV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmVEYXRlIGFzIFRpbnlEYXRlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0UGFydFR5cGVJbmRleChwYXJ0VHlwZTogUmFuZ2VQYXJ0VHlwZSA9ICdsZWZ0Jyk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnRUeXBlTWFwW3BhcnRUeXBlXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE1pblRpbnlEYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taW5EYXRlID8gbmV3IFRpbnlEYXRlKHRyYW5zZm9ybURhdGVWYWx1ZSh0aGlzLm1pbkRhdGUpLnZhbHVlIGFzIERhdGUpIDogbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE1heFRpbnlEYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXhEYXRlID8gbmV3IFRpbnlEYXRlKHRyYW5zZm9ybURhdGVWYWx1ZSh0aGlzLm1heERhdGUpLnZhbHVlIGFzIERhdGUpIDogbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsZWFySG92ZXJWYWx1ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ob3ZlclZhbHVlID0gW107XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRWYWx1ZSh2YWx1ZTogQ29tcGF0aWJsZVZhbHVlKTogdm9pZCB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMuaXNSYW5nZSAmJiB0aGlzLmZsZXhpYmxlKSB7XG4gICAgICAgICAgICB0aGlzLmZsZXhpYmxlRGF0ZUdyYW51bGFyaXR5ID0gJ2RheSc7XG4gICAgICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoe1xuICAgICAgICAgICAgICAgIGJlZ2luOiB2YWx1ZVswXSxcbiAgICAgICAgICAgICAgICBlbmQ6IHZhbHVlWzFdLFxuICAgICAgICAgICAgICAgIGRhdGVHcmFudWxhcml0eTogdGhpcy5mbGV4aWJsZURhdGVHcmFudWxhcml0eVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuc2hvd1RpbWUgfHwgIXRoaXMuc2hvd1RpbWVQaWNrZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc0Rpc2FibGVUaW1lQ29uZmlybSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbm9ybWFsaXplUmFuZ2VWYWx1ZSh2YWx1ZTogVGlueURhdGVbXSwgbW9kZTogVGh5UGFuZWxNb2RlID0gJ21vbnRoJyk6IFRpbnlEYXRlW10ge1xuICAgICAgICBjb25zdCBoZWFkZXJNb2RlczogeyBba2V5IGluIFRoeVBhbmVsTW9kZV0/OiBUaHlQYW5lbE1vZGUgfSA9IHtcbiAgICAgICAgICAgIHdlZWs6ICdtb250aCcsXG4gICAgICAgICAgICBkYXRlOiAnbW9udGgnLFxuICAgICAgICAgICAgbW9udGg6ICd5ZWFyJyxcbiAgICAgICAgICAgIHF1YXJ0ZXI6ICd5ZWFyJyxcbiAgICAgICAgICAgIHllYXI6ICdkZWNhZGUnXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGhlYWRlck1vZGUgPSBoZWFkZXJNb2Rlc1ttb2RlXTtcbiAgICAgICAgY29uc3QgW3N0YXJ0LCBlbmRdID0gdmFsdWU7XG4gICAgICAgIGNvbnN0IG5ld1N0YXJ0ID0gc3RhcnQgfHwgbmV3IFRpbnlEYXRlKCk7XG4gICAgICAgIGxldCBuZXdFbmQgPSBlbmQ7XG4gICAgICAgIGlmICghbmV3RW5kIHx8IG5ld1N0YXJ0LmlzU2FtZShlbmQsIGhlYWRlck1vZGUgYXMgVGlueURhdGVDb21wYXJlR3JhaW4pKSB7XG4gICAgICAgICAgICBuZXdFbmQgPSBkYXRlQWRkQW1vdW50KG5ld1N0YXJ0LCAxLCBoZWFkZXJNb2RlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW25ld1N0YXJ0LCBuZXdFbmRdO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0UmFuZ2VWYWx1ZShwYXJ0VHlwZTogUmFuZ2VQYXJ0VHlwZSwgdmFsdWU6IFRpbnlEYXRlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlZiA9ICh0aGlzLnNlbGVjdGVkVmFsdWUgPSB0aGlzLmNsb25lUmFuZ2VEYXRlKHRoaXMuc2VsZWN0ZWRWYWx1ZSBhcyBUaW55RGF0ZVtdKSk7XG4gICAgICAgIHJlZlt0aGlzLmdldFBhcnRUeXBlSW5kZXgocGFydFR5cGUpXSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xvbmVSYW5nZURhdGUodmFsdWU6IFRpbnlEYXRlW10pOiBUaW55RGF0ZVtdIHtcbiAgICAgICAgcmV0dXJuIFt2YWx1ZVswXSAmJiB2YWx1ZVswXS5jbG9uZSgpLCB2YWx1ZVsxXSAmJiB2YWx1ZVsxXS5jbG9uZSgpXSBhcyBUaW55RGF0ZVtdO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNEaXNhYmxlVGltZUNvbmZpcm0oKSB7XG4gICAgICAgIGlmICh0aGlzLmlzUmFuZ2UgfHwgIXRoaXMuc2hvd1RpbWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRhdGU6IFRpbnlEYXRlID0gdGhpcy52YWx1ZSA/ICh0aGlzLnZhbHVlIGFzIFRpbnlEYXRlKSA6IG5ldyBUaW55RGF0ZSgpO1xuICAgICAgICBjb25zdCBtaW5EYXRlOiBUaW55RGF0ZSA9IHRoaXMuZ2V0TWluVGlueURhdGUoKTtcbiAgICAgICAgY29uc3QgbWF4RGF0ZTogVGlueURhdGUgPSB0aGlzLmdldE1heFRpbnlEYXRlKCk7XG5cbiAgICAgICAgaWYgKChtaW5EYXRlICYmIGRhdGUuZ2V0VGltZSgpIDwgbWluRGF0ZS5nZXRUaW1lKCkpIHx8IChtYXhEYXRlICYmIGRhdGUuZ2V0VGltZSgpID4gbWF4RGF0ZS5nZXRUaW1lKCkpKSB7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVUaW1lQ29uZmlybSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVUaW1lQ29uZmlybSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTZWxlY3RlZFNob3J0Y3V0UHJlc2V0KGRhdGU6IENvbXBhdGlibGVWYWx1ZSk6IENvbXBhdGlibGVWYWx1ZSB7XG4gICAgICAgIGNvbnN0IG1pbkRhdGU6IFRpbnlEYXRlID0gdGhpcy5nZXRNaW5UaW55RGF0ZSgpO1xuICAgICAgICBjb25zdCBtYXhEYXRlOiBUaW55RGF0ZSA9IHRoaXMuZ2V0TWF4VGlueURhdGUoKTtcblxuICAgICAgICBjb25zdCBtaW5UaW1lOiBudW1iZXIgPSAobWluRGF0ZSAmJiBtaW5EYXRlLmdldFRpbWUoKSkgfHwgbnVsbDtcbiAgICAgICAgY29uc3QgbWF4VGltZTogbnVtYmVyID0gKG1heERhdGUgJiYgbWF4RGF0ZS5nZXRUaW1lKCkpIHx8IG51bGw7XG5cbiAgICAgICAgaWYgKGhlbHBlcnMuaXNBcnJheShkYXRlKSkge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnREYXRlOiBUaW55RGF0ZSA9IGRhdGVbMF07XG4gICAgICAgICAgICBjb25zdCBlbmREYXRlOiBUaW55RGF0ZSA9IGRhdGVbMV07XG5cbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0VGltZTogbnVtYmVyID0gc3RhcnREYXRlLmdldFRpbWUoKTtcbiAgICAgICAgICAgIGNvbnN0IGVuZFRpbWU6IG51bWJlciA9IGVuZERhdGUuZ2V0VGltZSgpO1xuXG4gICAgICAgICAgICBpZiAoKG1heERhdGUgJiYgc3RhcnRUaW1lID4gbWF4VGltZSkgfHwgKG1pbkRhdGUgJiYgZW5kVGltZSA8IG1pblRpbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobWluRGF0ZSAmJiBzdGFydFRpbWUgPCBtaW5UaW1lICYmIG1heERhdGUgJiYgZW5kVGltZSA+IG1heFRpbWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW21pbkRhdGUsIG1heERhdGVdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobWluRGF0ZSAmJiBzdGFydFRpbWUgPCBtaW5UaW1lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFttaW5EYXRlLCBlbmREYXRlXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG1heERhdGUgJiYgZW5kVGltZSA+IG1heFRpbWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW3N0YXJ0RGF0ZSwgbWF4RGF0ZV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBkYXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgc2luZ2xlVGltZTogbnVtYmVyID0gZGF0ZS5nZXRUaW1lKCk7XG5cbiAgICAgICAgICAgIGlmICgobWluRGF0ZSAmJiBzaW5nbGVUaW1lIDwgbWluVGltZSkgfHwgKG1heERhdGUgJiYgc2luZ2xlVGltZSA+IG1heFRpbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBkYXRlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2hvcnRjdXRTZXRWYWx1ZShzaG9ydGN1dFByZXNldHM6IFRoeVNob3J0Y3V0UHJlc2V0KSB7XG4gICAgICAgIGlmIChzaG9ydGN1dFByZXNldHMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IHNob3J0Y3V0UHJlc2V0cztcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHNlbGVjdGVkUHJlc2V0VmFsdWU6IENvbXBhdGlibGVWYWx1ZTtcbiAgICAgICAgaWYgKGhlbHBlcnMuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGJlZ2luOiBudW1iZXIgfCBEYXRlID0gZ2V0U2hvcnRjdXRWYWx1ZSh2YWx1ZVswXSk7XG4gICAgICAgICAgICBjb25zdCBlbmQ6IG51bWJlciB8IERhdGUgPSBnZXRTaG9ydGN1dFZhbHVlKHZhbHVlWzFdKTtcblxuICAgICAgICAgICAgaWYgKGJlZ2luICYmIGVuZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHRoaXMuZ2V0U2VsZWN0ZWRTaG9ydGN1dFByZXNldChbXG4gICAgICAgICAgICAgICAgICAgIG5ldyBUaW55RGF0ZShzdGFydE9mRGF5KGJlZ2luKSksXG4gICAgICAgICAgICAgICAgICAgIG5ldyBUaW55RGF0ZShlbmRPZkRheShlbmQpKVxuICAgICAgICAgICAgICAgIF0pIGFzIFRpbnlEYXRlW107XG5cbiAgICAgICAgICAgICAgICBzZWxlY3RlZFByZXNldFZhbHVlID0gdGhpcy5jbG9uZVJhbmdlRGF0ZSh0aGlzLnNlbGVjdGVkVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgc2luZ2xlRGF0ZTogbnVtYmVyIHwgRGF0ZSA9IGdldFNob3J0Y3V0VmFsdWUodmFsdWUpO1xuICAgICAgICAgICAgY29uc3Qgc2luZ2xlVGlueURhdGU6IFRpbnlEYXRlID0gdGhpcy51cGRhdGVIb3VyTWludXRlKG5ldyBUaW55RGF0ZShzaW5nbGVEYXRlKSk7XG4gICAgICAgICAgICBzZWxlY3RlZFByZXNldFZhbHVlID0gdGhpcy5nZXRTZWxlY3RlZFNob3J0Y3V0UHJlc2V0KHNpbmdsZVRpbnlEYXRlKSBhcyBUaW55RGF0ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFZhbHVlKHNlbGVjdGVkUHJlc2V0VmFsdWUpO1xuICAgICAgICBjb25zdCBzaG9ydGN1dFByZXNldHNWYWx1ZSA9IHNldFZhbHVlQnlUaW1lc3RhbXBQcmVjaXNpb24oc2hvcnRjdXRQcmVzZXRzPy52YWx1ZSwgdGhpcy5pc1JhbmdlLCB0aGlzLnRpbWVzdGFtcFByZWNpc2lvbikgYXMgbnVtYmVyO1xuICAgICAgICB0aGlzLmRhdGVWYWx1ZUNoYW5nZS5lbWl0KHtcbiAgICAgICAgICAgIHZhbHVlOiBoZWxwZXJzLmlzQXJyYXkodmFsdWUpID8gdGhpcy5zZWxlY3RlZFZhbHVlIDogc2VsZWN0ZWRQcmVzZXRWYWx1ZSxcbiAgICAgICAgICAgIHRyaWdnZXJQcmVzZXQ6IE9iamVjdC5hc3NpZ24oe30sIHNob3J0Y3V0UHJlc2V0cywgeyB2YWx1ZTogc2hvcnRjdXRQcmVzZXRzVmFsdWUgfSlcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghaGVscGVycy5pc0FycmF5KHZhbHVlKSAmJiB0aGlzLnNob3dUaW1lICYmIHRoaXMuc2hvd1RpbWVQaWNrZXIpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQWN0aXZlRGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInt7IHByZWZpeENscyB9fS1waWNrZXItY29udGFpbmVyIHt7IGNsYXNzTmFtZSB9fVwiPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJ7eyBwcmVmaXhDbHMgfX0ge3sgc2hvd1dlZWsgPyBwcmVmaXhDbHMgKyAnLXdlZWstbnVtYmVyJyA6ICcnIH19XG4gICAgIHt7IGlzUmFuZ2UgPyBwcmVmaXhDbHMgKyAnLXJhbmdlJyA6ICcnIH19IHt7IHByZWZpeENscyB9fS1waWNrZXItc2hvcnRjdXQte3sgc2hvcnRjdXRQb3NpdGlvbiA9PT0gJ2xlZnQnID8gJ2xlZnQnIDogJ2JvdHRvbScgfX1cIj5cbiAgICBAaWYgKHNob3dTaG9ydGN1dCkge1xuICAgICAgPGRpdiBjbGFzcz1cInt7IHByZWZpeENscyB9fS1waWNrZXItc2hvcnRjdXRcIj5cbiAgICAgICAgQGZvciAoaXRlbSBvZiBpbm5lclNob3J0Y3V0UHJlc2V0czsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInt7IHByZWZpeENscyB9fS1waWNrZXItc2hvcnRjdXQtaXRlbVwiIFtjbGFzcy5kaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkXCIgKGNsaWNrKT1cInNob3J0Y3V0U2V0VmFsdWUoaXRlbSlcIj5cbiAgICAgICAgICAgIHt7IGl0ZW0udGl0bGUgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgfVxuICAgIDxkaXYgY2xhc3M9XCJ7eyBwcmVmaXhDbHMgfX0tcGFuZWxcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ7eyBwcmVmaXhDbHMgfX0tZGF0ZS1wYW5lbFwiPlxuICAgICAgICBAaWYgKGZsZXhpYmxlKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInt7IHByZWZpeENscyB9fS1kYXRlLXBhbmVsLWZsZXhpYmxlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwie3sgcHJlZml4Q2xzIH19LWRhdGUtcGFuZWwtZmxleGlibGUtdGFiXCI+XG4gICAgICAgICAgICAgIDx0aHktbmF2IHRoeVR5cGU9XCJwdWxsZWRcIiB0aHlTaXplPVwic21cIj5cbiAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgdGh5TmF2TGluayBbdGh5TmF2TGlua0FjdGl2ZV09XCJmbGV4aWJsZUFjdGl2ZVRhYiA9PT0gJ2FkdmFuY2VkJ1wiIChjbGljayk9XCJzZWxlY3RUYWIoJ2FkdmFuY2VkJylcIlxuICAgICAgICAgICAgICAgICAgPumrmOe6p+mAiemhuTwvYVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgdGh5TmF2TGluayBbdGh5TmF2TGlua0FjdGl2ZV09XCJmbGV4aWJsZUFjdGl2ZVRhYiA9PT0gJ2N1c3RvbSdcIiAoY2xpY2spPVwic2VsZWN0VGFiKCdjdXN0b20nKVwiXG4gICAgICAgICAgICAgICAgICA+6Ieq5a6a5LmJPC9hXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L3RoeS1uYXY+XG4gICAgICAgICAgICAgIDxidXR0b24gdGh5QnV0dG9uSWNvbj1cInN3ZWVwXCIgdGh5U2l6ZT1cInNtXCIgY2xhc3M9XCJjbGVhci1kYXRlLWJ1dHRvblwiIChjbGljayk9XCJjbGVhckZsZXhpYmxlVmFsdWUoKVwiPjwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwie3sgcHJlZml4Q2xzIH19LWRhdGUtcGFuZWwtYWR2YW5jZWRcIiBbaGlkZGVuXT1cImZsZXhpYmxlQWN0aXZlVGFiICE9PSAnYWR2YW5jZWQnXCI+XG4gICAgICAgICAgICAgICAgPGRhdGUtY2Fyb3VzZWxcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJkYXRlQ2Fyb3VzZWxcIlxuICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlVmFsdWVGcm9tQWR2YW5jZWRTZWxlY3QoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImFkdmFuY2VkU2VsZWN0ZWRWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICBbYWN0aXZlRGF0ZV09XCJzZWxlY3RlZFZhbHVlWzBdXCI+PC9kYXRlLWNhcm91c2VsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPGRpdiBbaGlkZGVuXT1cImZsZXhpYmxlQWN0aXZlVGFiICE9PSAnY3VzdG9tJ1wiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidHBsSW5uZXJQb3B1cFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIEBpZiAoaXNSYW5nZSkge1xuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRwbFJhbmdlUGFydDsgY29udGV4dDogeyBwYXJ0VHlwZTogJ2xlZnQnIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0cGxSYW5nZVBhcnQ7IGNvbnRleHQ6IHsgcGFydFR5cGU6ICdyaWdodCcgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRwbElubmVyUG9wdXBcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKCFpc1JhbmdlKSB7XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidHBsRm9vdGVyXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICN0cGxJbm5lclBvcHVwIGxldC1wYXJ0VHlwZT1cInBhcnRUeXBlXCI+XG4gIDxpbm5lci1wb3B1cFxuICAgIFtzaG93V2Vla109XCJzaG93V2Vla1wiXG4gICAgW2lzUmFuZ2VdPVwiaXNSYW5nZVwiXG4gICAgW3BhbmVsTW9kZV09XCJnZXRQYW5lbE1vZGUocGFuZWxNb2RlLCBwYXJ0VHlwZSlcIlxuICAgIFtlbmRQYW5lbE1vZGVdPVwiZ2V0UGFuZWxNb2RlKGVuZFBhbmVsTW9kZSwgcGFydFR5cGUpXCJcbiAgICBbcGFydFR5cGVdPVwicGFydFR5cGVcIlxuICAgIFtzaG93RGF0ZVJhbmdlSW5wdXRdPVwiZmxleGlibGUgJiYgZmxleGlibGVBY3RpdmVUYWIgPT09ICdjdXN0b20nXCJcbiAgICAocGFuZWxNb2RlQ2hhbmdlKT1cIm9uUGFuZWxNb2RlQ2hhbmdlKCRldmVudCwgcGFydFR5cGUpXCJcbiAgICBbdmFsdWVdPVwiZ2V0VmFsdWVCeVNlbGVjdG9yKHBhcnRUeXBlKVwiXG4gICAgW3NlbGVjdGVkVmFsdWVdPVwic2VsZWN0ZWRWYWx1ZVwiXG4gICAgW2FjdGl2ZURhdGVdPVwiZ2V0QWN0aXZlRGF0ZShwYXJ0VHlwZSlcIlxuICAgIFtyYW5nZUFjdGl2ZURhdGVdPVwiYWN0aXZlRGF0ZVwiXG4gICAgW2Rpc2FibGVkRGF0ZV09XCJkaXNhYmxlZERhdGVcIlxuICAgIFtkYXRlUmVuZGVyXT1cImRhdGVSZW5kZXJcIlxuICAgIFtob3ZlclZhbHVlXT1cImhvdmVyVmFsdWVcIlxuICAgIFtlbmFibGVQcmV2XT1cImVuYWJsZVByZXZOZXh0KCdwcmV2JywgcGFydFR5cGUpXCJcbiAgICBbZW5hYmxlTmV4dF09XCJlbmFibGVQcmV2TmV4dCgnbmV4dCcsIHBhcnRUeXBlKVwiXG4gICAgKGRheUhvdmVyKT1cIm9uRGF5SG92ZXIoJGV2ZW50KVwiXG4gICAgKHNlbGVjdERhdGUpPVwiY2hhbmdlVmFsdWVGcm9tU2VsZWN0KCRldmVudCwgcGFydFR5cGUpXCJcbiAgICAoaGVhZGVyQ2hhbmdlKT1cIm9uSGVhZGVyQ2hhbmdlKCRldmVudCwgcGFydFR5cGUpXCI+PC9pbm5lci1wb3B1cD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjdHBsRm9vdGVyPlxuICA8Y2FsZW5kYXItZm9vdGVyXG4gICAgW3Nob3dUaW1lXT1cInNob3dUaW1lXCJcbiAgICBbbXVzdFNob3dUaW1lXT1cIm11c3RTaG93VGltZVwiXG4gICAgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICBbZGlzYWJsZVRpbWVDb25maXJtXT1cImRpc2FibGVUaW1lQ29uZmlybVwiXG4gICAgKHNob3dUaW1lUGlja2VyQ2hhbmdlKT1cIm9uU2hvd1RpbWVQaWNrZXJDaGFuZ2UoJGV2ZW50KVwiXG4gICAgKHNlbGVjdFRpbWUpPVwib25TZWxlY3RUaW1lKCRldmVudClcIlxuICAgIChjbGlja09rKT1cIm9uQ2xpY2tPaygpXCJcbiAgICAoY2xpY2tSZW1vdmUpPVwib25DbGlja1JlbW92ZSgpXCI+PC9jYWxlbmRhci1mb290ZXI+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIFNpbmdsZSBPTkxZIC0tPlxuXG48IS0tIFJhbmdlIE9OTFkgLS0+XG48bmctdGVtcGxhdGUgI3RwbFJhbmdlUGFydCBsZXQtcGFydFR5cGU9XCJwYXJ0VHlwZVwiPlxuICA8ZGl2IGNsYXNzPVwie3sgcHJlZml4Q2xzIH19LXJhbmdlLXBhcnQge3sgcHJlZml4Q2xzIH19LXJhbmdlLXt7IHBhcnRUeXBlIH19XCI+XG4gICAgPGRpdiBzdHlsZT1cIm91dGxpbmU6IG5vbmVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0cGxJbm5lclBvcHVwOyBjb250ZXh0OiB7IHBhcnRUeXBlOiBwYXJ0VHlwZSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==