@tetacom/ng-components 1.4.22 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (324) hide show
  1. package/.eslintrc.json +3 -5
  2. package/component/dropdown/dropdown-base.d.ts +1 -1
  3. package/directive/dynamic-content-base.directive.d.ts +1 -1
  4. package/fesm2022/tetacom-ng-components.mjs +515 -489
  5. package/fesm2022/tetacom-ng-components.mjs.map +1 -1
  6. package/package.json +3 -5
  7. package/pipe/prepend-zero/prepend-zero.pipe.d.ts +7 -0
  8. package/pipe/prepend-zero/public-api.d.ts +1 -0
  9. package/pipe/public-api.d.ts +1 -0
  10. package/style/badge.scss +6 -4
  11. package/style/checkbox.scss +3 -1
  12. package/style/chips.scss +3 -1
  13. package/style/icon.scss +3 -1
  14. package/style/message.scss +3 -1
  15. package/style/navigation.scss +3 -1
  16. package/style/presets/view-types.scss +3 -1
  17. package/style/toggle.scss +3 -1
  18. package/style/toolbar.scss +3 -1
  19. package/esm2022/common/contract/auto-close-ignore-case.mjs +0 -2
  20. package/esm2022/common/contract/constructor-type.mjs +0 -2
  21. package/esm2022/common/contract/dynamic-data.mjs +0 -10
  22. package/esm2022/common/contract/i-dictionary.mjs +0 -2
  23. package/esm2022/common/contract/i-id-name.mjs +0 -2
  24. package/esm2022/common/contract/i-id.mjs +0 -2
  25. package/esm2022/common/contract/i-rect.mjs +0 -2
  26. package/esm2022/common/contract/i-tree-data.mjs +0 -2
  27. package/esm2022/common/contract/public-api.mjs +0 -10
  28. package/esm2022/common/contract/teta-content-ref.mjs +0 -8
  29. package/esm2022/common/enum/align.enum.mjs +0 -13
  30. package/esm2022/common/enum/public-api.mjs +0 -4
  31. package/esm2022/common/enum/teta-size.enum.mjs +0 -9
  32. package/esm2022/common/enum/vertical-align.enum.mjs +0 -11
  33. package/esm2022/common/model/public-api.mjs +0 -2
  34. package/esm2022/common/model/view-type.model.mjs +0 -2
  35. package/esm2022/common/public-api.mjs +0 -6
  36. package/esm2022/common/service/click.service.mjs +0 -23
  37. package/esm2022/common/service/dynamic-component.service.mjs +0 -93
  38. package/esm2022/common/service/overlay-container.service.mjs +0 -41
  39. package/esm2022/common/service/public-api.mjs +0 -4
  40. package/esm2022/common/util/array-util.mjs +0 -121
  41. package/esm2022/common/util/dom-util.mjs +0 -19
  42. package/esm2022/common/util/position-util.mjs +0 -136
  43. package/esm2022/common/util/public-api.mjs +0 -4
  44. package/esm2022/component/accordion/accordion/accordion.component.mjs +0 -17
  45. package/esm2022/component/accordion/accordion-content.directive.mjs +0 -17
  46. package/esm2022/component/accordion/accordion-head/accordion-head.component.mjs +0 -51
  47. package/esm2022/component/accordion/accordion-item/accordion-item.component.mjs +0 -62
  48. package/esm2022/component/accordion/public-api.mjs +0 -5
  49. package/esm2022/component/autocomplete/autocomplete/autocomplete.component.mjs +0 -13
  50. package/esm2022/component/autocomplete/public-api.mjs +0 -2
  51. package/esm2022/component/avatar/avatar/avatar.component.mjs +0 -55
  52. package/esm2022/component/avatar/model/avatar-color.enum.mjs +0 -22
  53. package/esm2022/component/avatar/public-api.mjs +0 -2
  54. package/esm2022/component/button/button/button.component.mjs +0 -67
  55. package/esm2022/component/button/public-api.mjs +0 -2
  56. package/esm2022/component/chart-3d/chart3d/chart3d.component.mjs +0 -241
  57. package/esm2022/component/chart-3d/model/base-3d-point.mjs +0 -2
  58. package/esm2022/component/chart-3d/model/chart-3d-options.mjs +0 -7
  59. package/esm2022/component/chart-3d/model/public-api.mjs +0 -3
  60. package/esm2022/component/chart-3d/model/series-3d.mjs +0 -7
  61. package/esm2022/component/chart-3d/public-api.mjs +0 -3
  62. package/esm2022/component/checkbox/checkbox/checkbox.component.mjs +0 -137
  63. package/esm2022/component/checkbox/public-api.mjs +0 -2
  64. package/esm2022/component/date-picker/base-calendar.mjs +0 -121
  65. package/esm2022/component/date-picker/base-picker.mjs +0 -109
  66. package/esm2022/component/date-picker/date-picker/date-calendar/date-calendar.component.mjs +0 -50
  67. package/esm2022/component/date-picker/date-picker/date-picker.component.mjs +0 -228
  68. package/esm2022/component/date-picker/date-range/date-range.component.mjs +0 -233
  69. package/esm2022/component/date-picker/date-range/range-calendar/range-calendar.component.mjs +0 -118
  70. package/esm2022/component/date-picker/day-picker/day-item/day-item.component.mjs +0 -15
  71. package/esm2022/component/date-picker/day-picker/day-picker.component.mjs +0 -118
  72. package/esm2022/component/date-picker/model/date-period.mjs +0 -7
  73. package/esm2022/component/date-picker/model/date-picker-mode.enum.mjs +0 -7
  74. package/esm2022/component/date-picker/model/day-model.mjs +0 -13
  75. package/esm2022/component/date-picker/model/from-to.model.mjs +0 -2
  76. package/esm2022/component/date-picker/model/min-max-date.model.mjs +0 -2
  77. package/esm2022/component/date-picker/model/public-api.mjs +0 -6
  78. package/esm2022/component/date-picker/month-picker/month-picker.component.mjs +0 -47
  79. package/esm2022/component/date-picker/public-api.mjs +0 -6
  80. package/esm2022/component/date-picker/year-picker/scroll-to-selected-year.directive.mjs +0 -27
  81. package/esm2022/component/date-picker/year-picker/year-picker.component.mjs +0 -48
  82. package/esm2022/component/delimiter/delimiter/delimiter.component.mjs +0 -63
  83. package/esm2022/component/delimiter/public-api.mjs +0 -2
  84. package/esm2022/component/divider/divider/divider.component.mjs +0 -18
  85. package/esm2022/component/divider/public-api.mjs +0 -2
  86. package/esm2022/component/dropdown/dropdown/dropdown.component.mjs +0 -30
  87. package/esm2022/component/dropdown/dropdown-base.mjs +0 -224
  88. package/esm2022/component/dropdown/dropdown-content.directive.mjs +0 -18
  89. package/esm2022/component/dropdown/dropdown-head.directive.mjs +0 -19
  90. package/esm2022/component/dropdown/dropdown.directive.mjs +0 -38
  91. package/esm2022/component/dropdown/public-api.mjs +0 -5
  92. package/esm2022/component/dynamic-component/popup-content/popup-content.component.mjs +0 -53
  93. package/esm2022/component/dynamic-component/public-api.mjs +0 -2
  94. package/esm2022/component/expand-card/expand-card/expand-card.component.mjs +0 -34
  95. package/esm2022/component/expand-card/expand-item/expand-item.component.mjs +0 -25
  96. package/esm2022/component/expand-card/public-api.mjs +0 -3
  97. package/esm2022/component/expand-panel/expand-panel/expand-panel.component.mjs +0 -65
  98. package/esm2022/component/expand-panel/expand-panel-content.directive.mjs +0 -17
  99. package/esm2022/component/expand-panel/expand-panel-head.directive.mjs +0 -17
  100. package/esm2022/component/expand-panel/public-api.mjs +0 -4
  101. package/esm2022/component/file-upload/file-item/file-item.component.mjs +0 -13
  102. package/esm2022/component/file-upload/file-upload-area/file-upload-area.component.mjs +0 -87
  103. package/esm2022/component/file-upload/public-api.mjs +0 -3
  104. package/esm2022/component/filter/base/filter-base.mjs +0 -10
  105. package/esm2022/component/filter/base/filter-component-base.mjs +0 -3
  106. package/esm2022/component/filter/boolean-filter/boolean-filter.component.mjs +0 -63
  107. package/esm2022/component/filter/contarct/boolean-filter.mjs +0 -8
  108. package/esm2022/component/filter/contarct/date-filter-value.mjs +0 -9
  109. package/esm2022/component/filter/contarct/date-filter.mjs +0 -11
  110. package/esm2022/component/filter/contarct/filter-component-map.mjs +0 -15
  111. package/esm2022/component/filter/contarct/filter-item.mjs +0 -34
  112. package/esm2022/component/filter/contarct/filter-state.mjs +0 -145
  113. package/esm2022/component/filter/contarct/i-filter.mjs +0 -2
  114. package/esm2022/component/filter/contarct/list-filter.mjs +0 -12
  115. package/esm2022/component/filter/contarct/numeric-filter-value.mjs +0 -10
  116. package/esm2022/component/filter/contarct/numeric-filter.mjs +0 -9
  117. package/esm2022/component/filter/contarct/sort-param.mjs +0 -14
  118. package/esm2022/component/filter/contarct/string-filter.mjs +0 -12
  119. package/esm2022/component/filter/date-filter/date-filter.component.mjs +0 -64
  120. package/esm2022/component/filter/enum/filter-type.enum.mjs +0 -10
  121. package/esm2022/component/filter/enum/list-filter-type.enum.mjs +0 -6
  122. package/esm2022/component/filter/enum/string-filter-type.enum.mjs +0 -20
  123. package/esm2022/component/filter/filter-host/filter-host.component.mjs +0 -79
  124. package/esm2022/component/filter/list-filter/list-filter.component.mjs +0 -96
  125. package/esm2022/component/filter/numeric-filter/numeric-filter.component.mjs +0 -64
  126. package/esm2022/component/filter/public-api.mjs +0 -23
  127. package/esm2022/component/filter/string-filter/string-filter.component.mjs +0 -64
  128. package/esm2022/component/icon/icon/icon.component.mjs +0 -54
  129. package/esm2022/component/icon/icon-file/icon-file.component.mjs +0 -27
  130. package/esm2022/component/icon/icon-sprite.directive.mjs +0 -34
  131. package/esm2022/component/icon/icon.service.mjs +0 -58
  132. package/esm2022/component/icon/public-api.mjs +0 -5
  133. package/esm2022/component/input/color-input/color-input.component.mjs +0 -71
  134. package/esm2022/component/input/form-group-title/form-group-title.component.mjs +0 -18
  135. package/esm2022/component/input/input/input.component.mjs +0 -38
  136. package/esm2022/component/input/public-api.mjs +0 -6
  137. package/esm2022/component/input/text-field/text-field.component.mjs +0 -94
  138. package/esm2022/component/message/message/message.component.mjs +0 -76
  139. package/esm2022/component/message/message-host/message-host.component.mjs +0 -84
  140. package/esm2022/component/message/message.service.mjs +0 -35
  141. package/esm2022/component/message/model/message.mjs +0 -23
  142. package/esm2022/component/message/public-api.mjs +0 -5
  143. package/esm2022/component/modal/dialog/dialog.component.mjs +0 -46
  144. package/esm2022/component/modal/dialog.service.mjs +0 -40
  145. package/esm2022/component/modal/modal-container/modal-container.component.mjs +0 -77
  146. package/esm2022/component/modal/modal.module.mjs +0 -32
  147. package/esm2022/component/modal/modal.service.mjs +0 -122
  148. package/esm2022/component/modal/model/current-modal.mjs +0 -3
  149. package/esm2022/component/modal/model/i-modal-config.mjs +0 -2
  150. package/esm2022/component/modal/model/i-modal-result.mjs +0 -2
  151. package/esm2022/component/modal/model/modal-close-reason.enum.mjs +0 -8
  152. package/esm2022/component/modal/model/modal-instance.mjs +0 -34
  153. package/esm2022/component/modal/public-api.mjs +0 -11
  154. package/esm2022/component/pager/model/pager-state.mjs +0 -51
  155. package/esm2022/component/pager/pager/pager.component.mjs +0 -13
  156. package/esm2022/component/pager/public-api.mjs +0 -4
  157. package/esm2022/component/pager/util/pager-util.mjs +0 -6
  158. package/esm2022/component/panel/panel/panel.component.mjs +0 -45
  159. package/esm2022/component/panel/public-api.mjs +0 -2
  160. package/esm2022/component/progress-bar/progress-bar/progress-bar.component.mjs +0 -130
  161. package/esm2022/component/progress-bar/public-api.mjs +0 -2
  162. package/esm2022/component/property-grid/property-grid/property-grid-group/property-grid-group.component.mjs +0 -24
  163. package/esm2022/component/property-grid/property-grid/property-grid-item/property-grid-item.component.mjs +0 -133
  164. package/esm2022/component/property-grid/property-grid/property-grid-item-description.directive.mjs +0 -20
  165. package/esm2022/component/property-grid/property-grid/property-grid.component.mjs +0 -97
  166. package/esm2022/component/property-grid/public-api.mjs +0 -4
  167. package/esm2022/component/public-api.mjs +0 -72
  168. package/esm2022/component/radio/public-api.mjs +0 -3
  169. package/esm2022/component/radio/radio/radio.component.mjs +0 -240
  170. package/esm2022/component/radio/radio-button/radio-button.component.mjs +0 -63
  171. package/esm2022/component/resize-panel/public-api.mjs +0 -2
  172. package/esm2022/component/resize-panel/resize-panel/resize-panel.component.mjs +0 -166
  173. package/esm2022/component/select/public-api.mjs +0 -4
  174. package/esm2022/component/select/select/select.component.mjs +0 -272
  175. package/esm2022/component/select/select-option.directive.mjs +0 -17
  176. package/esm2022/component/select/select-value.directive.mjs +0 -17
  177. package/esm2022/component/sidebar/public-api.mjs +0 -3
  178. package/esm2022/component/sidebar/sidebar/sidebar.component.mjs +0 -48
  179. package/esm2022/component/sidebar/sidebar-position.enum.mjs +0 -8
  180. package/esm2022/component/stepper/public-api.mjs +0 -2
  181. package/esm2022/component/stepper/stepper/stepper.component.mjs +0 -16
  182. package/esm2022/component/switch/public-api.mjs +0 -3
  183. package/esm2022/component/switch/switch/switch.component.mjs +0 -61
  184. package/esm2022/component/switch/switch-button/switch-button.component.mjs +0 -47
  185. package/esm2022/component/switch/switch.service.mjs +0 -21
  186. package/esm2022/component/table/base/cell-component-base.mjs +0 -158
  187. package/esm2022/component/table/base/detail-component-base.mjs +0 -3
  188. package/esm2022/component/table/base/head-cell-component-base.mjs +0 -18
  189. package/esm2022/component/table/cell/cell.component.mjs +0 -28
  190. package/esm2022/component/table/cell-host/cell-host.component.mjs +0 -56
  191. package/esm2022/component/table/contract/cell-components-map.mjs +0 -15
  192. package/esm2022/component/table/contract/column-reorder-event.mjs +0 -7
  193. package/esm2022/component/table/contract/column-resize-event.mjs +0 -7
  194. package/esm2022/component/table/contract/head-dropdown-tab.mjs +0 -2
  195. package/esm2022/component/table/contract/i-cell-coordinates.mjs +0 -2
  196. package/esm2022/component/table/contract/i-cell-event.mjs +0 -2
  197. package/esm2022/component/table/contract/i-cell-instance.mjs +0 -2
  198. package/esm2022/component/table/contract/i-cell-value.mjs +0 -2
  199. package/esm2022/component/table/contract/public-api.mjs +0 -13
  200. package/esm2022/component/table/contract/sort-event.mjs +0 -7
  201. package/esm2022/component/table/contract/table-column-store.mjs +0 -12
  202. package/esm2022/component/table/contract/table-column.mjs +0 -44
  203. package/esm2022/component/table/contract/table-row.mjs +0 -7
  204. package/esm2022/component/table/default/boolean-cell/boolean-cell.component.mjs +0 -39
  205. package/esm2022/component/table/default/date-cell/date-cell.component.mjs +0 -40
  206. package/esm2022/component/table/default/date-time-cell/date-time-cell.component.mjs +0 -40
  207. package/esm2022/component/table/default/default-head-cell/default-head-cell.component.mjs +0 -49
  208. package/esm2022/component/table/default/list-cell/list-cell.component.mjs +0 -60
  209. package/esm2022/component/table/default/numeric-cell/numeric-cell.component.mjs +0 -39
  210. package/esm2022/component/table/default/string-cell/string-cell.component.mjs +0 -40
  211. package/esm2022/component/table/enum/aggregation-type.enum.mjs +0 -9
  212. package/esm2022/component/table/enum/edit-event.enum.mjs +0 -7
  213. package/esm2022/component/table/enum/edit-type.enum.mjs +0 -7
  214. package/esm2022/component/table/enum/public-api.mjs +0 -5
  215. package/esm2022/component/table/enum/select-type.enum.mjs +0 -7
  216. package/esm2022/component/table/head-cell/head-cell.component.mjs +0 -204
  217. package/esm2022/component/table/head-cell-dropdown/head-cell-dropdown.component.mjs +0 -50
  218. package/esm2022/component/table/head-cell-host/head-cell-host.component.mjs +0 -60
  219. package/esm2022/component/table/public-api.mjs +0 -42
  220. package/esm2022/component/table/selection-cell/selection-cell.component.mjs +0 -46
  221. package/esm2022/component/table/selection-head-cell/selection-head-cell.component.mjs +0 -45
  222. package/esm2022/component/table/service/table.service.mjs +0 -650
  223. package/esm2022/component/table/table/table.component.mjs +0 -470
  224. package/esm2022/component/table/table-body/table-body.component.mjs +0 -210
  225. package/esm2022/component/table/table-head/filter-dropdown-tab/filter-dropdown-tab.component.mjs +0 -57
  226. package/esm2022/component/table/table-head/main-dropdown-tab/main-dropdown-tab.component.mjs +0 -89
  227. package/esm2022/component/table/table-head/table-head.component.mjs +0 -76
  228. package/esm2022/component/table/table-head/visibility-dropdown-tab/visibility-dropdown-tab.component.mjs +0 -154
  229. package/esm2022/component/table/table-head-group/table-head-group.component.mjs +0 -72
  230. package/esm2022/component/table/table-row/table-row.component.mjs +0 -42
  231. package/esm2022/component/table/util/public-api.mjs +0 -3
  232. package/esm2022/component/table/util/state-util.mjs +0 -146
  233. package/esm2022/component/table/util/table-util.mjs +0 -133
  234. package/esm2022/component/tabs/public-api.mjs +0 -11
  235. package/esm2022/component/tabs/tab/tab.component.mjs +0 -42
  236. package/esm2022/component/tabs/tab-content.directive.mjs +0 -17
  237. package/esm2022/component/tabs/tab-title.directive.mjs +0 -17
  238. package/esm2022/component/tabs/tabs/tabs.component.mjs +0 -82
  239. package/esm2022/component/theme-switch/public-api.mjs +0 -3
  240. package/esm2022/component/theme-switch/theme-switch/theme-switch.component.mjs +0 -30
  241. package/esm2022/component/theme-switch/theme-switch.service.mjs +0 -34
  242. package/esm2022/component/toggle/public-api.mjs +0 -2
  243. package/esm2022/component/toggle/toggle/toggle.component.mjs +0 -79
  244. package/esm2022/component/toolbar/public-api.mjs +0 -5
  245. package/esm2022/component/toolbar/toolbar/toolbar.component.mjs +0 -26
  246. package/esm2022/component/tree/public-api.mjs +0 -4
  247. package/esm2022/component/tree/tree/tree.component.mjs +0 -143
  248. package/esm2022/component/tree/tree-item/tree-item.component.mjs +0 -75
  249. package/esm2022/component/tree/tree-item-toggle/tree-item-toggle.component.mjs +0 -28
  250. package/esm2022/component/tree/tree.service.mjs +0 -40
  251. package/esm2022/directive/auto-position/auto-position.directive.mjs +0 -71
  252. package/esm2022/directive/auto-position/public-api.mjs +0 -2
  253. package/esm2022/directive/click-outside/click-outside.directive.mjs +0 -66
  254. package/esm2022/directive/click-outside/public-api.mjs +0 -2
  255. package/esm2022/directive/context-menu/context-menu.directive.mjs +0 -119
  256. package/esm2022/directive/context-menu/public-api.mjs +0 -2
  257. package/esm2022/directive/disable-control/disable-control.directive.mjs +0 -35
  258. package/esm2022/directive/disable-control/public-api.mjs +0 -2
  259. package/esm2022/directive/drag-drop/drag-container.directive.mjs +0 -92
  260. package/esm2022/directive/drag-drop/drag-drop.service.mjs +0 -145
  261. package/esm2022/directive/drag-drop/drag-placeholder.directive.mjs +0 -15
  262. package/esm2022/directive/drag-drop/drag-preview.directive.mjs +0 -17
  263. package/esm2022/directive/drag-drop/drag.directive.mjs +0 -138
  264. package/esm2022/directive/drag-drop/model/drag-container-instance.mjs +0 -8
  265. package/esm2022/directive/drag-drop/model/drag-instance.mjs +0 -7
  266. package/esm2022/directive/drag-drop/model/drag-process.mjs +0 -2
  267. package/esm2022/directive/drag-drop/model/drag-selection.mjs +0 -2
  268. package/esm2022/directive/drag-drop/model/drop-event.mjs +0 -2
  269. package/esm2022/directive/drag-drop/model/drop-target.mjs +0 -2
  270. package/esm2022/directive/drag-drop/model/point.mjs +0 -2
  271. package/esm2022/directive/drag-drop/model/public-api.mjs +0 -8
  272. package/esm2022/directive/drag-drop/public-api.mjs +0 -7
  273. package/esm2022/directive/drag-sort/drag-sort-container.directive.mjs +0 -65
  274. package/esm2022/directive/drag-sort/drag-sort-event.mjs +0 -2
  275. package/esm2022/directive/drag-sort/drag-sort-item.directive.mjs +0 -111
  276. package/esm2022/directive/drag-sort/public-api.mjs +0 -4
  277. package/esm2022/directive/dynamic-content-base.directive.mjs +0 -80
  278. package/esm2022/directive/highlight/highlight.directive.mjs +0 -72
  279. package/esm2022/directive/highlight/public-api.mjs +0 -2
  280. package/esm2022/directive/hint/hint.directive.mjs +0 -102
  281. package/esm2022/directive/hint/public-api.mjs +0 -2
  282. package/esm2022/directive/let/let.directive.mjs +0 -39
  283. package/esm2022/directive/let/public-api.mjs +0 -2
  284. package/esm2022/directive/loader/loader.directive.mjs +0 -85
  285. package/esm2022/directive/loader/public-api.mjs +0 -2
  286. package/esm2022/directive/no-autofill/no-autofill.directive.mjs +0 -31
  287. package/esm2022/directive/no-autofill/public-api.mjs +0 -2
  288. package/esm2022/directive/only-number/only-number.directive.mjs +0 -184
  289. package/esm2022/directive/only-number/public-api.mjs +0 -2
  290. package/esm2022/directive/public-api.mjs +0 -19
  291. package/esm2022/directive/resize-drag/public-api.mjs +0 -2
  292. package/esm2022/directive/resize-drag/resize-drag.directive.mjs +0 -72
  293. package/esm2022/directive/scroll-into-view/public-api.mjs +0 -2
  294. package/esm2022/directive/scroll-into-view/scroll-into-view.directive.mjs +0 -41
  295. package/esm2022/directive/scrollable/public-api.mjs +0 -3
  296. package/esm2022/directive/scrollable/scrollable/scrollable.component.mjs +0 -98
  297. package/esm2022/directive/scrollable/scrollable.directive.mjs +0 -20
  298. package/esm2022/directive/teta-template/public-api.mjs +0 -2
  299. package/esm2022/directive/teta-template/teta-template.directive.mjs +0 -23
  300. package/esm2022/directive/tooltip/public-api.mjs +0 -2
  301. package/esm2022/directive/tooltip/tooltip.directive.mjs +0 -81
  302. package/esm2022/index.mjs +0 -22
  303. package/esm2022/locale/en.mjs +0 -50
  304. package/esm2022/locale/public-api.mjs +0 -5
  305. package/esm2022/locale/ru.mjs +0 -50
  306. package/esm2022/locale/teta-config.service.mjs +0 -28
  307. package/esm2022/locale/teta-localisation.mjs +0 -2
  308. package/esm2022/observable/animation-frame.mjs +0 -30
  309. package/esm2022/observable/public-api.mjs +0 -3
  310. package/esm2022/observable/zone-observable.mjs +0 -15
  311. package/esm2022/pipe/date-pipe/public-api.mjs +0 -2
  312. package/esm2022/pipe/date-pipe/teta-date.pipe.mjs +0 -43
  313. package/esm2022/pipe/number-pipe/number.pipe.mjs +0 -28
  314. package/esm2022/pipe/number-pipe/public-api.mjs +0 -2
  315. package/esm2022/pipe/public-api.mjs +0 -4
  316. package/esm2022/pipe/util/number-helper.mjs +0 -25
  317. package/esm2022/tetacom-ng-components.mjs +0 -5
  318. package/esm2022/util/bool-or-func.mjs +0 -13
  319. package/esm2022/util/date-util.mjs +0 -231
  320. package/esm2022/util/export-dom-image.mjs +0 -22
  321. package/esm2022/util/forms-util.mjs +0 -85
  322. package/esm2022/util/is-function.mjs +0 -4
  323. package/esm2022/util/public-api.mjs +0 -7
  324. package/esm2022/util/string-util.mjs +0 -9
@@ -1,228 +0,0 @@
1
- import { DatePipe, NgClass, AsyncPipe } from '@angular/common';
2
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, forwardRef, HostBinding, Input, Output, ViewChild, } from '@angular/core';
3
- import { NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';
4
- import { maskitoDateOptionsGenerator, maskitoDateTimeOptionsGenerator } from '@maskito/kit';
5
- import dayjs from 'dayjs';
6
- import { lastValueFrom, ReplaySubject, take } from 'rxjs';
7
- import { Align } from '../../../common/enum/align.enum';
8
- import { VerticalAlign } from '../../../common/enum/vertical-align.enum';
9
- import { BasePicker } from '../base-picker';
10
- import { TetaConfigService } from '../../../locale/teta-config.service';
11
- import { DateCalendarComponent } from './date-calendar/date-calendar.component';
12
- import { DropdownContentDirective } from '../../dropdown/dropdown-content.directive';
13
- import { IconComponent } from '../../icon/icon/icon.component';
14
- import { MaskitoModule } from '@maskito/angular';
15
- import { InputComponent } from '../../input/input/input.component';
16
- import { DropdownHeadDirective } from '../../dropdown/dropdown-head.directive';
17
- import { DropdownComponent } from '../../dropdown/dropdown/dropdown.component';
18
- import * as i0 from "@angular/core";
19
- import * as i1 from "@angular/common";
20
- import * as i2 from "../../../locale/teta-config.service";
21
- import * as i3 from "@angular/forms";
22
- import * as i4 from "@maskito/angular";
23
- export const DATE_PICKER_CONTROL_VALUE_ACCESSOR = {
24
- provide: NG_VALUE_ACCESSOR,
25
- useExisting: forwardRef(() => DatePickerComponent),
26
- multi: true,
27
- };
28
- export class DatePickerComponent extends BasePicker {
29
- get dateTimeClass() {
30
- return this.showTime;
31
- }
32
- constructor(_elementRef, _cdr, datePipe, localeService) {
33
- super(_elementRef, _cdr, datePipe);
34
- this._elementRef = _elementRef;
35
- this._cdr = _cdr;
36
- this.datePipe = datePipe;
37
- this.localeService = localeService;
38
- this.date = null;
39
- this.showTime = false;
40
- this.minDate = null;
41
- this.maxDate = null;
42
- this.invalid = false;
43
- this.disabled = false;
44
- this.align = Align.left;
45
- this.verticalAlign = VerticalAlign.auto;
46
- this.viewType = 'rounded';
47
- this.backdrop = false;
48
- this.allowNull = true;
49
- this.firstDayOfWeek = 1;
50
- this.selectDate = new EventEmitter();
51
- this.selectedDate = new ReplaySubject(1);
52
- this.mask = '';
53
- this.classDatepicker = true;
54
- this.tabindex = 0;
55
- this.locale = this.localeService.locale;
56
- }
57
- ngOnInit() {
58
- if (!this.date) {
59
- this.setDate(this.allowNull ? null : new Date());
60
- this.date = this.allowNull ? null : new Date();
61
- }
62
- else {
63
- this.setDate(new Date(this.date));
64
- }
65
- this.prepareInput(true);
66
- }
67
- async prepareInput(isFirstRender) {
68
- const config = await lastValueFrom(this.localeService.locale.pipe(take(1)));
69
- const str = this.date ? this.getLocaleString(this.date) : '';
70
- let option;
71
- const setMinMax = () => {
72
- if (this.minDate && !isFirstRender) {
73
- option.min = dayjs(new Date(this.minDate)).startOf('day');
74
- }
75
- if (this.maxDate && !isFirstRender) {
76
- option.max = dayjs(new Date(this.maxDate)).endOf('day');
77
- }
78
- };
79
- if (this.showTime) {
80
- this.mask = config.dateTimeMask;
81
- option = {
82
- dateMode: 'dd/mm/yyyy',
83
- timeMode: 'HH:MM',
84
- dateSeparator: '.',
85
- };
86
- setMinMax();
87
- this.maskitoOptions = maskitoDateTimeOptionsGenerator(option);
88
- }
89
- else {
90
- this.mask = config.dateMask;
91
- option = {
92
- mode: 'dd/mm/yyyy',
93
- separator: '.',
94
- };
95
- setMinMax();
96
- this.maskitoOptions = maskitoDateOptionsGenerator(option);
97
- }
98
- this.changePlaceholder(str);
99
- }
100
- onBlur() {
101
- if (this.allowNull && this.inputText.trim() === '') {
102
- this.setDate(null);
103
- this.emitValue(null);
104
- }
105
- else {
106
- const val = this.inputText.split(',');
107
- const { day, year, month } = this.getDateFromStr(val[0]);
108
- const { mins, hours } = this.getTimeFromStr(val[1]);
109
- if (day && year && month) {
110
- let date = new Date(year, month - 1, day);
111
- if (this.showTime) {
112
- date = new Date(date.setHours(hours || 0, mins || 0));
113
- }
114
- this.changeSelectedDate(this.getAvailableDate(this.minDate, this.maxDate, date));
115
- }
116
- else {
117
- this.setDate(this.date);
118
- }
119
- }
120
- }
121
- setDate(date) {
122
- if (!date && this.allowNull) {
123
- this.inputText = '';
124
- this.changePlaceholder('');
125
- this.selectedDate.next(new Date(this.minDate || new Date()));
126
- }
127
- else {
128
- this.inputText = this.getLocaleString(date);
129
- this.changePlaceholder(this.getLocaleString(date));
130
- this.selectedDate.next(date);
131
- }
132
- }
133
- onChange(date) { }
134
- registerOnChange(fn) {
135
- this.onChange = fn;
136
- }
137
- registerOnTouched(fn) { }
138
- writeValue(obj) {
139
- if (obj) {
140
- this.date = new Date(obj);
141
- this.setDate(new Date(this.date));
142
- }
143
- else {
144
- if (this.allowNull) {
145
- this.date = null;
146
- this.selectedDate.next(null);
147
- }
148
- else {
149
- this.date = this.minDate || new Date();
150
- this.selectedDate.next(this.minDate || new Date());
151
- }
152
- }
153
- }
154
- setDisabledState(isDisabled) {
155
- this.disabled = isDisabled;
156
- }
157
- ngOnChanges(changes) {
158
- this.prepareInput(false);
159
- }
160
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: DatePickerComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.DatePipe }, { token: i2.TetaConfigService }], target: i0.ɵɵFactoryTarget.Component }); }
161
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.1", type: DatePickerComponent, isStandalone: true, selector: "teta-date-picker", inputs: { date: "date", showTime: "showTime", minDate: "minDate", maxDate: "maxDate", invalid: "invalid", disabled: "disabled", align: "align", verticalAlign: "verticalAlign", viewType: "viewType", appendToBody: "appendToBody", backdrop: "backdrop", allowNull: "allowNull", firstDayOfWeek: "firstDayOfWeek", disabledDates: "disabledDates", disabledPeriods: "disabledPeriods", disabledDays: "disabledDays", minYearDate: "minYearDate", maxYearDate: "maxYearDate" }, outputs: { selectDate: "selectDate" }, host: { properties: { "class.datepicker": "this.classDatepicker", "class.datepicker-time": "this.dateTimeClass", "tabindex": "this.tabindex" } }, providers: [DATE_PICKER_CONTROL_VALUE_ACCESSOR, DatePipe], viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "@if ({ selectedDate: selectedDate | async }; as data) {\n <teta-dropdown\n class=\"row row_auto\"\n [appendToBody]=\"appendToBody\"\n [backdrop]=\"backdrop\"\n [open]=\"open\"\n (openChange)=\"openChange($event)\"\n [viewType]=\"viewType\"\n [disabled]=\"disabled\"\n [verticalAlign]=\"verticalAlign\"\n [align]=\"align\"\n [autoCloseIgnore]=\"['esc', 'inside', 'enter']\"\n >\n <div\n tetaDropdownHead\n [class]=\"'datepicker-head font-body-3 gap-8 datepicker_' + viewType\"\n [ngClass]=\"{ 'datepicker-head_invalid': invalid, 'datepicker-head_disabled': disabled }\"\n >\n <teta-input class=\"row row_auto flex\">\n <div [class]=\"'row_auto row datepicker_' + viewType\">\n <div class=\"row row_auto position-relative font-body-3 align-center\">\n <input\n [ngClass]=\"{ 'color-text-90': !disabled }\"\n [disabled]=\"disabled\"\n #input\n style=\"z-index: 1\"\n class=\"row_auto border-0\"\n (keydown)=\"checkEnter($event)\"\n [(ngModel)]=\"inputText\"\n (ngModelChange)=\"changeInput($event)\"\n [maskito]=\"maskitoOptions\"\n />\n @if (data.selectedDate || allowNull) {\n <div\n (click)=\"input.focus()\"\n class=\"position-absolute color-text-10\"\n style=\"cursor: text; user-select: none\"\n >\n {{ placeholder }}\n </div>\n }\n </div>\n <teta-icon [name]=\"'calendar'\" [palette]=\"'text'\"></teta-icon>\n </div>\n </teta-input>\n </div>\n <div tetaDropdownContent (click)=\"$event.preventDefault()\">\n <teta-date-calendar\n [isDateNull]=\"date === null\"\n [open]=\"open\"\n [max]=\"maxDate\"\n [min]=\"minDate\"\n (setDate)=\"changeSelectedDate($event)\"\n [selectedDate]=\"data.selectedDate\"\n [viewType]=\"viewType\"\n [locale]=\"locale | async\"\n ></teta-date-calendar>\n </div>\n </teta-dropdown>\n}\n", styles: [""], dependencies: [{ kind: "component", type: DropdownComponent, selector: "teta-dropdown", exportAs: ["dropdown"] }, { kind: "directive", type: DropdownHeadDirective, selector: "[tetaDropdownHead]" }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: InputComponent, selector: "teta-input", inputs: ["label", "hint", "viewType", "horizontal", "required"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MaskitoModule }, { kind: "directive", type: i4.MaskitoDirective, selector: "[maskito]", inputs: ["maskito", "maskitoElement"] }, { kind: "directive", type: i4.MaskitoCVA, selector: "input[maskito], textarea[maskito]", inputs: ["maskito"] }, { kind: "component", type: IconComponent, selector: "teta-icon", inputs: ["name", "size", "palette", "class"] }, { kind: "directive", type: DropdownContentDirective, selector: "[tetaDropdownContent]" }, { kind: "component", type: DateCalendarComponent, selector: "teta-date-calendar", inputs: ["selectedDate", "open", "locale", "viewType", "min", "isDateNull", "max"], outputs: ["setDate"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
162
- }
163
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: DatePickerComponent, decorators: [{
164
- type: Component,
165
- args: [{ selector: 'teta-date-picker', changeDetection: ChangeDetectionStrategy.OnPush, providers: [DATE_PICKER_CONTROL_VALUE_ACCESSOR, DatePipe], standalone: true, imports: [
166
- DropdownComponent,
167
- DropdownHeadDirective,
168
- NgClass,
169
- InputComponent,
170
- FormsModule,
171
- MaskitoModule,
172
- IconComponent,
173
- DropdownContentDirective,
174
- DateCalendarComponent,
175
- AsyncPipe,
176
- ], template: "@if ({ selectedDate: selectedDate | async }; as data) {\n <teta-dropdown\n class=\"row row_auto\"\n [appendToBody]=\"appendToBody\"\n [backdrop]=\"backdrop\"\n [open]=\"open\"\n (openChange)=\"openChange($event)\"\n [viewType]=\"viewType\"\n [disabled]=\"disabled\"\n [verticalAlign]=\"verticalAlign\"\n [align]=\"align\"\n [autoCloseIgnore]=\"['esc', 'inside', 'enter']\"\n >\n <div\n tetaDropdownHead\n [class]=\"'datepicker-head font-body-3 gap-8 datepicker_' + viewType\"\n [ngClass]=\"{ 'datepicker-head_invalid': invalid, 'datepicker-head_disabled': disabled }\"\n >\n <teta-input class=\"row row_auto flex\">\n <div [class]=\"'row_auto row datepicker_' + viewType\">\n <div class=\"row row_auto position-relative font-body-3 align-center\">\n <input\n [ngClass]=\"{ 'color-text-90': !disabled }\"\n [disabled]=\"disabled\"\n #input\n style=\"z-index: 1\"\n class=\"row_auto border-0\"\n (keydown)=\"checkEnter($event)\"\n [(ngModel)]=\"inputText\"\n (ngModelChange)=\"changeInput($event)\"\n [maskito]=\"maskitoOptions\"\n />\n @if (data.selectedDate || allowNull) {\n <div\n (click)=\"input.focus()\"\n class=\"position-absolute color-text-10\"\n style=\"cursor: text; user-select: none\"\n >\n {{ placeholder }}\n </div>\n }\n </div>\n <teta-icon [name]=\"'calendar'\" [palette]=\"'text'\"></teta-icon>\n </div>\n </teta-input>\n </div>\n <div tetaDropdownContent (click)=\"$event.preventDefault()\">\n <teta-date-calendar\n [isDateNull]=\"date === null\"\n [open]=\"open\"\n [max]=\"maxDate\"\n [min]=\"minDate\"\n (setDate)=\"changeSelectedDate($event)\"\n [selectedDate]=\"data.selectedDate\"\n [viewType]=\"viewType\"\n [locale]=\"locale | async\"\n ></teta-date-calendar>\n </div>\n </teta-dropdown>\n}\n" }]
177
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.DatePipe }, { type: i2.TetaConfigService }], propDecorators: { date: [{
178
- type: Input
179
- }], showTime: [{
180
- type: Input
181
- }], minDate: [{
182
- type: Input
183
- }], maxDate: [{
184
- type: Input
185
- }], invalid: [{
186
- type: Input
187
- }], disabled: [{
188
- type: Input
189
- }], align: [{
190
- type: Input
191
- }], verticalAlign: [{
192
- type: Input
193
- }], viewType: [{
194
- type: Input
195
- }], appendToBody: [{
196
- type: Input
197
- }], backdrop: [{
198
- type: Input
199
- }], allowNull: [{
200
- type: Input
201
- }], firstDayOfWeek: [{
202
- type: Input
203
- }], disabledDates: [{
204
- type: Input
205
- }], disabledPeriods: [{
206
- type: Input
207
- }], disabledDays: [{
208
- type: Input
209
- }], minYearDate: [{
210
- type: Input
211
- }], maxYearDate: [{
212
- type: Input
213
- }], input: [{
214
- type: ViewChild,
215
- args: ['input']
216
- }], selectDate: [{
217
- type: Output
218
- }], classDatepicker: [{
219
- type: HostBinding,
220
- args: ['class.datepicker']
221
- }], dateTimeClass: [{
222
- type: HostBinding,
223
- args: ['class.datepicker-time']
224
- }], tabindex: [{
225
- type: HostBinding,
226
- args: ['tabindex']
227
- }] } });
228
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudC9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L2RhdGUtcGlja2VyL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9ELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixXQUFXLEVBQ1gsS0FBSyxFQUdMLE1BQU0sRUFFTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDNUYsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxhQUFhLEVBQWMsYUFBYSxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV0RSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRXpFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU1QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUV4RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNoRixPQUFPLEVBQUUsd0JB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QUFPO3dCQUNQLGNBQWM7d0JBQ2QsV0FBVzt3QkFDWCxhQUFhO3dCQUNiLGFBQWE7d0JBQ2Isd0JBQXdCO3dCQUN4QixxQkFBcUI7d0JBQ3JCLFNBQVM7cUJBQ1Y7c0tBR1EsSUFBSTtzQkFBWixLQUFLO2dCQUVHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUVHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVjLEtBQUs7c0JBQXhCLFNBQVM7dUJBQUMsT0FBTztnQkFDUixVQUFVO3NCQUFuQixNQUFNO2dCQUcyQyxlQUFlO3NCQUFoRSxXQUFXO3VCQUFDLGtCQUFrQjtnQkFDVyxhQUFhO3NCQUF0RCxXQUFXO3VCQUFDLHVCQUF1QjtnQkFHTSxRQUFRO3NCQUFqRCxXQUFXO3VCQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSwgTmdDbGFzcywgQXN5bmNQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiwgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBtYXNraXRvRGF0ZU9wdGlvbnNHZW5lcmF0b3IsIG1hc2tpdG9EYXRlVGltZU9wdGlvbnNHZW5lcmF0b3IgfSBmcm9tICdAbWFza2l0by9raXQnO1xuaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJztcbmltcG9ydCB7IGxhc3RWYWx1ZUZyb20sIE9ic2VydmFibGUsIFJlcGxheVN1YmplY3QsIHRha2UgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQWxpZ24gfSBmcm9tICcuLi8uLi8uLi9jb21tb24vZW51bS9hbGlnbi5lbnVtJztcbmltcG9ydCB7IFZlcnRpY2FsQWxpZ24gfSBmcm9tICcuLi8uLi8uLi9jb21tb24vZW51bS92ZXJ0aWNhbC1hbGlnbi5lbnVtJztcbmltcG9ydCB7IHZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL21vZGVsL3ZpZXctdHlwZS5tb2RlbCc7XG5pbXBvcnQgeyBCYXNlUGlja2VyIH0gZnJvbSAnLi4vYmFzZS1waWNrZXInO1xuaW1wb3J0IHsgRGF0ZVBlcmlvZCB9IGZyb20gJy4uL21vZGVsL2RhdGUtcGVyaW9kJztcbmltcG9ydCB7IFRldGFDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vbG9jYWxlL3RldGEtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGV0YUxvY2FsaXNhdGlvbiB9IGZyb20gJy4uLy4uLy4uL2xvY2FsZS90ZXRhLWxvY2FsaXNhdGlvbic7XG5pbXBvcnQgeyBEYXRlQ2FsZW5kYXJDb21wb25lbnQgfSBmcm9tICcuL2RhdGUtY2FsZW5kYXIvZGF0ZS1jYWxlbmRhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRHJvcGRvd25Db250ZW50RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZHJvcGRvd24vZHJvcGRvd24tY29udGVudC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2ljb24vaWNvbi9pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXNraXRvTW9kdWxlIH0gZnJvbSAnQG1hc2tpdG8vYW5ndWxhcic7XG5pbXBvcnQgeyBJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2lucHV0L2lucHV0L2lucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEcm9wZG93bkhlYWREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kcm9wZG93bi9kcm9wZG93bi1oZWFkLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBEcm9wZG93bkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2Ryb3Bkb3duL2Ryb3Bkb3duL2Ryb3Bkb3duLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBjb25zdCBEQVRFX1BJQ0tFUl9DT05UUk9MX1ZBTFVFX0FDQ0VTU09SOiBhbnkgPSB7XG4gIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRlUGlja2VyQ29tcG9uZW50KSxcbiAgbXVsdGk6IHRydWUsXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0ZXRhLWRhdGUtcGlja2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZGF0ZS1waWNrZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW0RBVEVfUElDS0VSX0NPTlRST0xfVkFMVUVfQUNDRVNTT1IsIERhdGVQaXBlXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIERyb3Bkb3duQ29tcG9uZW50LFxuICAgIERyb3Bkb3duSGVhZERpcmVjdGl2ZSxcbiAgICBOZ0NsYXNzLFxuICAgIElucHV0Q29tcG9uZW50LFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIE1hc2tpdG9Nb2R1bGUsXG4gICAgSWNvbkNvbXBvbmVudCxcbiAgICBEcm9wZG93bkNvbnRlbnREaXJlY3RpdmUsXG4gICAgRGF0ZUNhbGVuZGFyQ29tcG9uZW50LFxuICAgIEFzeW5jUGlwZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRGF0ZVBpY2tlckNvbXBvbmVudCBleHRlbmRzIEJhc2VQaWNrZXIgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBkYXRlOiBEYXRlIHwgc3RyaW5nIHwgbnVtYmVyID0gbnVsbDtcbiAgcHVibGljIGxvY2FsZTogT2JzZXJ2YWJsZTxUZXRhTG9jYWxpc2F0aW9uPjtcbiAgQElucHV0KCkgc2hvd1RpbWUgPSBmYWxzZTtcbiAgQElucHV0KCkgbWluRGF0ZTogRGF0ZSB8IHN0cmluZyB8IG51bWJlciA9IG51bGw7XG4gIEBJbnB1dCgpIG1heERhdGU6IERhdGUgfCBzdHJpbmcgfCBudW1iZXIgPSBudWxsO1xuICBASW5wdXQoKSBpbnZhbGlkID0gZmFsc2U7XG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIGFsaWduOiBBbGlnbiA9IEFsaWduLmxlZnQ7XG4gIEBJbnB1dCgpIHZlcnRpY2FsQWxpZ246IFZlcnRpY2FsQWxpZ24gPSBWZXJ0aWNhbEFsaWduLmF1dG87XG4gIEBJbnB1dCgpIHZpZXdUeXBlOiB2aWV3VHlwZSA9ICdyb3VuZGVkJztcbiAgQElucHV0KCkgYXBwZW5kVG9Cb2R5OiBib29sZWFuO1xuICBASW5wdXQoKSBiYWNrZHJvcCA9IGZhbHNlO1xuICBASW5wdXQoKSBhbGxvd051bGwgPSB0cnVlO1xuXG4gIEBJbnB1dCgpIGZpcnN0RGF5T2ZXZWVrID0gMTtcbiAgQElucHV0KCkgZGlzYWJsZWREYXRlczogRGF0ZVtdO1xuICBASW5wdXQoKSBkaXNhYmxlZFBlcmlvZHM6IERhdGVQZXJpb2RbXTtcbiAgQElucHV0KCkgZGlzYWJsZWREYXlzOiBudW1iZXJbXTtcbiAgQElucHV0KCkgbWluWWVhckRhdGU6IERhdGU7XG4gIEBJbnB1dCgpIG1heFllYXJEYXRlOiBEYXRlO1xuXG4gIEBWaWV3Q2hpbGQoJ2lucHV0JykgaW5wdXQ6IEVsZW1lbnRSZWY7XG4gIEBPdXRwdXQoKSBzZWxlY3REYXRlOiBFdmVudEVtaXR0ZXI8RGF0ZT4gPSBuZXcgRXZlbnRFbWl0dGVyPERhdGU+KCk7XG4gIHB1YmxpYyBzZWxlY3RlZERhdGU6IFJlcGxheVN1YmplY3Q8RGF0ZSB8IHN0cmluZyB8IG51bWJlcj4gPSBuZXcgUmVwbGF5U3ViamVjdDxEYXRlIHwgc3RyaW5nIHwgbnVtYmVyPigxKTtcbiAgcHVibGljIG1hc2sgPSAnJztcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5kYXRlcGlja2VyJykgcHJpdmF0ZSByZWFkb25seSBjbGFzc0RhdGVwaWNrZXIgPSB0cnVlO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmRhdGVwaWNrZXItdGltZScpIGdldCBkYXRlVGltZUNsYXNzKCkge1xuICAgIHJldHVybiB0aGlzLnNob3dUaW1lO1xuICB9XG4gIEBIb3N0QmluZGluZygndGFiaW5kZXgnKSBwcml2YXRlIHJlYWRvbmx5IHRhYmluZGV4ID0gMDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBvdmVycmlkZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBvdmVycmlkZSBfY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBvdmVycmlkZSBkYXRlUGlwZTogRGF0ZVBpcGUsXG4gICAgcHJpdmF0ZSBsb2NhbGVTZXJ2aWNlOiBUZXRhQ29uZmlnU2VydmljZSxcbiAgKSB7XG4gICAgc3VwZXIoX2VsZW1lbnRSZWYsIF9jZHIsIGRhdGVQaXBlKTtcbiAgICB0aGlzLmxvY2FsZSA9IHRoaXMubG9jYWxlU2VydmljZS5sb2NhbGU7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGF0ZSkge1xuICAgICAgdGhpcy5zZXREYXRlKHRoaXMuYWxsb3dOdWxsID8gbnVsbCA6IG5ldyBEYXRlKCkpO1xuICAgICAgdGhpcy5kYXRlID0gdGhpcy5hbGxvd051bGwgPyBudWxsIDogbmV3IERhdGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXREYXRlKG5ldyBEYXRlKHRoaXMuZGF0ZSkpO1xuICAgIH1cbiAgICB0aGlzLnByZXBhcmVJbnB1dCh0cnVlKTtcbiAgfVxuXG4gIGFzeW5jIHByZXBhcmVJbnB1dChpc0ZpcnN0UmVuZGVyPzogYm9vbGVhbikge1xuICAgIGNvbnN0IGNvbmZpZyA9IGF3YWl0IGxhc3RWYWx1ZUZyb20odGhpcy5sb2NhbGVTZXJ2aWNlLmxvY2FsZS5waXBlKHRha2UoMSkpKTtcbiAgICBjb25zdCBzdHIgPSB0aGlzLmRhdGUgPyB0aGlzLmdldExvY2FsZVN0cmluZyh0aGlzLmRhdGUpIDogJyc7XG4gICAgbGV0IG9wdGlvbjtcbiAgICBjb25zdCBzZXRNaW5NYXggPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5taW5EYXRlICYmICFpc0ZpcnN0UmVuZGVyKSB7XG4gICAgICAgIG9wdGlvbi5taW4gPSBkYXlqcyhuZXcgRGF0ZSh0aGlzLm1pbkRhdGUpKS5zdGFydE9mKCdkYXknKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm1heERhdGUgJiYgIWlzRmlyc3RSZW5kZXIpIHtcbiAgICAgICAgb3B0aW9uLm1heCA9IGRheWpzKG5ldyBEYXRlKHRoaXMubWF4RGF0ZSkpLmVuZE9mKCdkYXknKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGlmICh0aGlzLnNob3dUaW1lKSB7XG4gICAgICB0aGlzLm1hc2sgPSBjb25maWcuZGF0ZVRpbWVNYXNrO1xuICAgICAgb3B0aW9uID0ge1xuICAgICAgICBkYXRlTW9kZTogJ2RkL21tL3l5eXknLFxuICAgICAgICB0aW1lTW9kZTogJ0hIOk1NJyxcbiAgICAgICAgZGF0ZVNlcGFyYXRvcjogJy4nLFxuICAgICAgfTtcbiAgICAgIHNldE1pbk1heCgpO1xuICAgICAgdGhpcy5tYXNraXRvT3B0aW9ucyA9IG1hc2tpdG9EYXRlVGltZU9wdGlvbnNHZW5lcmF0b3Iob3B0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tYXNrID0gY29uZmlnLmRhdGVNYXNrO1xuICAgICAgb3B0aW9uID0ge1xuICAgICAgICBtb2RlOiAnZGQvbW0veXl5eScsXG4gICAgICAgIHNlcGFyYXRvcjogJy4nLFxuICAgICAgfTtcbiAgICAgIHNldE1pbk1heCgpO1xuICAgICAgdGhpcy5tYXNraXRvT3B0aW9ucyA9IG1hc2tpdG9EYXRlT3B0aW9uc0dlbmVyYXRvcihvcHRpb24pO1xuICAgIH1cbiAgICB0aGlzLmNoYW5nZVBsYWNlaG9sZGVyKHN0cik7XG4gIH1cblxuICBvbkJsdXIoKSB7XG4gICAgaWYgKHRoaXMuYWxsb3dOdWxsICYmIHRoaXMuaW5wdXRUZXh0LnRyaW0oKSA9PT0gJycpIHtcbiAgICAgIHRoaXMuc2V0RGF0ZShudWxsKTtcbiAgICAgIHRoaXMuZW1pdFZhbHVlKG51bGwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB2YWwgPSB0aGlzLmlucHV0VGV4dC5zcGxpdCgnLCcpO1xuICAgICAgY29uc3QgeyBkYXksIHllYXIsIG1vbnRoIH0gPSB0aGlzLmdldERhdGVGcm9tU3RyKHZhbFswXSk7XG4gICAgICBjb25zdCB7IG1pbnMsIGhvdXJzIH0gPSB0aGlzLmdldFRpbWVGcm9tU3RyKHZhbFsxXSk7XG4gICAgICBpZiAoZGF5ICYmIHllYXIgJiYgbW9udGgpIHtcbiAgICAgICAgbGV0IGRhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCAtIDEsIGRheSk7XG4gICAgICAgIGlmICh0aGlzLnNob3dUaW1lKSB7XG4gICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKGRhdGUuc2V0SG91cnMoaG91cnMgfHwgMCwgbWlucyB8fCAwKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGFuZ2VTZWxlY3RlZERhdGUodGhpcy5nZXRBdmFpbGFibGVEYXRlKHRoaXMubWluRGF0ZSwgdGhpcy5tYXhEYXRlLCBkYXRlKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNldERhdGUodGhpcy5kYXRlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZXREYXRlKGRhdGUpIHtcbiAgICBpZiAoIWRhdGUgJiYgdGhpcy5hbGxvd051bGwpIHtcbiAgICAgIHRoaXMuaW5wdXRUZXh0ID0gJyc7XG4gICAgICB0aGlzLmNoYW5nZVBsYWNlaG9sZGVyKCcnKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlLm5leHQobmV3IERhdGUodGhpcy5taW5EYXRlIHx8IG5ldyBEYXRlKCkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbnB1dFRleHQgPSB0aGlzLmdldExvY2FsZVN0cmluZyhkYXRlKTtcbiAgICAgIHRoaXMuY2hhbmdlUGxhY2Vob2xkZXIodGhpcy5nZXRMb2NhbGVTdHJpbmcoZGF0ZSkpO1xuICAgICAgdGhpcy5zZWxlY3RlZERhdGUubmV4dChkYXRlKTtcbiAgICB9XG4gIH1cblxuICBvbkNoYW5nZShkYXRlOiBEYXRlKSB7fVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IChkYXRlOiBEYXRlKSA9PiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7fVxuXG4gIHdyaXRlVmFsdWUob2JqOiBEYXRlIHwgc3RyaW5nIHwgbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKG9iaikge1xuICAgICAgdGhpcy5kYXRlID0gbmV3IERhdGUob2JqKTtcbiAgICAgIHRoaXMuc2V0RGF0ZShuZXcgRGF0ZSh0aGlzLmRhdGUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuYWxsb3dOdWxsKSB7XG4gICAgICAgIHRoaXMuZGF0ZSA9IG51bGw7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlLm5leHQobnVsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRhdGUgPSB0aGlzLm1pbkRhdGUgfHwgbmV3IERhdGUoKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGUubmV4dCh0aGlzLm1pbkRhdGUgfHwgbmV3IERhdGUoKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIHRoaXMucHJlcGFyZUlucHV0KGZhbHNlKTtcbiAgfVxufVxuIiwiQGlmICh7IHNlbGVjdGVkRGF0ZTogc2VsZWN0ZWREYXRlIHwgYXN5bmMgfTsgYXMgZGF0YSkge1xuICA8dGV0YS1kcm9wZG93blxuICAgIGNsYXNzPVwicm93IHJvd19hdXRvXCJcbiAgICBbYXBwZW5kVG9Cb2R5XT1cImFwcGVuZFRvQm9keVwiXG4gICAgW2JhY2tkcm9wXT1cImJhY2tkcm9wXCJcbiAgICBbb3Blbl09XCJvcGVuXCJcbiAgICAob3BlbkNoYW5nZSk9XCJvcGVuQ2hhbmdlKCRldmVudClcIlxuICAgIFt2aWV3VHlwZV09XCJ2aWV3VHlwZVwiXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICBbdmVydGljYWxBbGlnbl09XCJ2ZXJ0aWNhbEFsaWduXCJcbiAgICBbYWxpZ25dPVwiYWxpZ25cIlxuICAgIFthdXRvQ2xvc2VJZ25vcmVdPVwiWydlc2MnLCAnaW5zaWRlJywgJ2VudGVyJ11cIlxuICA+XG4gICAgPGRpdlxuICAgICAgdGV0YURyb3Bkb3duSGVhZFxuICAgICAgW2NsYXNzXT1cIidkYXRlcGlja2VyLWhlYWQgZm9udC1ib2R5LTMgZ2FwLTggIGRhdGVwaWNrZXJfJyArIHZpZXdUeXBlXCJcbiAgICAgIFtuZ0NsYXNzXT1cInsgJ2RhdGVwaWNrZXItaGVhZF9pbnZhbGlkJzogaW52YWxpZCwgJ2RhdGVwaWNrZXItaGVhZF9kaXNhYmxlZCc6IGRpc2FibGVkIH1cIlxuICAgID5cbiAgICAgIDx0ZXRhLWlucHV0IGNsYXNzPVwicm93IHJvd19hdXRvIGZsZXhcIj5cbiAgICAgICAgPGRpdiBbY2xhc3NdPVwiJ3Jvd19hdXRvIHJvdyBkYXRlcGlja2VyXycgKyB2aWV3VHlwZVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgcm93X2F1dG8gcG9zaXRpb24tcmVsYXRpdmUgZm9udC1ib2R5LTMgYWxpZ24tY2VudGVyXCI+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnY29sb3ItdGV4dC05MCc6ICFkaXNhYmxlZCB9XCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgI2lucHV0XG4gICAgICAgICAgICAgIHN0eWxlPVwiei1pbmRleDogMVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwicm93X2F1dG8gYm9yZGVyLTBcIlxuICAgICAgICAgICAgICAoa2V5ZG93bik9XCJjaGVja0VudGVyKCRldmVudClcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImlucHV0VGV4dFwiXG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUlucHV0KCRldmVudClcIlxuICAgICAgICAgICAgICBbbWFza2l0b109XCJtYXNraXRvT3B0aW9uc1wiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgQGlmIChkYXRhLnNlbGVjdGVkRGF0ZSB8fCBhbGxvd051bGwpIHtcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJpbnB1dC5mb2N1cygpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIGNvbG9yLXRleHQtMTBcIlxuICAgICAgICAgICAgICAgIHN0eWxlPVwiY3Vyc29yOiB0ZXh0OyB1c2VyLXNlbGVjdDogbm9uZVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBwbGFjZWhvbGRlciB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8dGV0YS1pY29uIFtuYW1lXT1cIidjYWxlbmRhcidcIiBbcGFsZXR0ZV09XCIndGV4dCdcIj48L3RldGEtaWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3RldGEtaW5wdXQ+XG4gICAgPC9kaXY+XG4gICAgPGRpdiB0ZXRhRHJvcGRvd25Db250ZW50IChjbGljayk9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiPlxuICAgICAgPHRldGEtZGF0ZS1jYWxlbmRhclxuICAgICAgICBbaXNEYXRlTnVsbF09XCJkYXRlID09PSBudWxsXCJcbiAgICAgICAgW29wZW5dPVwib3BlblwiXG4gICAgICAgIFttYXhdPVwibWF4RGF0ZVwiXG4gICAgICAgIFttaW5dPVwibWluRGF0ZVwiXG4gICAgICAgIChzZXREYXRlKT1cImNoYW5nZVNlbGVjdGVkRGF0ZSgkZXZlbnQpXCJcbiAgICAgICAgW3NlbGVjdGVkRGF0ZV09XCJkYXRhLnNlbGVjdGVkRGF0ZVwiXG4gICAgICAgIFt2aWV3VHlwZV09XCJ2aWV3VHlwZVwiXG4gICAgICAgIFtsb2NhbGVdPVwibG9jYWxlIHwgYXN5bmNcIlxuICAgICAgPjwvdGV0YS1kYXRlLWNhbGVuZGFyPlxuICAgIDwvZGl2PlxuICA8L3RldGEtZHJvcGRvd24+XG59XG4iXX0=
@@ -1,233 +0,0 @@
1
- import { DatePipe, NgClass, AsyncPipe } from '@angular/common';
2
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, forwardRef, HostBinding, Input, Output, ViewChild, } from '@angular/core';
3
- import { NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';
4
- import { maskitoDateRangeOptionsGenerator } from '@maskito/kit';
5
- import dayjs from 'dayjs';
6
- import { lastValueFrom, ReplaySubject, take } from 'rxjs';
7
- import { Align } from '../../../common/enum/align.enum';
8
- import { VerticalAlign } from '../../../common/enum/vertical-align.enum';
9
- import { BasePicker } from '../base-picker';
10
- import { TetaConfigService } from '../../../locale/teta-config.service';
11
- import { RangeCalendarComponent } from './range-calendar/range-calendar.component';
12
- import { DropdownContentDirective } from '../../dropdown/dropdown-content.directive';
13
- import { IconComponent } from '../../icon/icon/icon.component';
14
- import { MaskitoModule } from '@maskito/angular';
15
- import { InputComponent } from '../../input/input/input.component';
16
- import { DropdownHeadDirective } from '../../dropdown/dropdown-head.directive';
17
- import { DropdownComponent } from '../../dropdown/dropdown/dropdown.component';
18
- import * as i0 from "@angular/core";
19
- import * as i1 from "@angular/common";
20
- import * as i2 from "../../../locale/teta-config.service";
21
- import * as i3 from "@angular/forms";
22
- import * as i4 from "@maskito/angular";
23
- export const DATE_Range_CONTROL_VALUE_ACCESSOR = {
24
- provide: NG_VALUE_ACCESSOR,
25
- useExisting: forwardRef(() => DateRangeComponent),
26
- multi: true,
27
- };
28
- export class DateRangeComponent extends BasePicker {
29
- constructor(_cdr, _elementRef, datePipe, localeService) {
30
- super(_elementRef, _cdr, datePipe);
31
- this._cdr = _cdr;
32
- this._elementRef = _elementRef;
33
- this.datePipe = datePipe;
34
- this.localeService = localeService;
35
- this.date = { from: null, to: null };
36
- this.showTime = false;
37
- this.minDate = null;
38
- this.maxDate = null;
39
- this.invalid = false;
40
- this.disabled = false;
41
- this.align = Align.left;
42
- this.verticalAlign = VerticalAlign.auto;
43
- this.viewType = 'rounded';
44
- this.allowNull = true;
45
- this.selectDate = new EventEmitter();
46
- this.mask = '';
47
- this.selectedDate = new ReplaySubject(1);
48
- this.classDaterange = true;
49
- this.locale = this.localeService.locale;
50
- }
51
- changeSelectedDate(date, selectedDate) {
52
- if (selectedDate.from) {
53
- const from = new Date(Math.min(new Date(selectedDate.from).getTime(), date.getTime()));
54
- const to = new Date(Math.max(new Date(selectedDate.from).getTime(), date.getTime()));
55
- this.setDate({ from, to });
56
- this.selectedDate.next({ from: null, to: null });
57
- this.open = false;
58
- this._cdr.detectChanges();
59
- }
60
- else {
61
- this.setDate({ from: date, to: null });
62
- this.selectedDate.next({ from: date, to: null });
63
- }
64
- }
65
- checkNull() {
66
- if (this.allowNull) {
67
- return null;
68
- }
69
- return (this.datePipe.transform(new Date(), 'dd.MM.yyyy') + ' - ' + this.datePipe.transform(new Date(), 'dd.MM.yyyy'));
70
- }
71
- async prepareInput() {
72
- const config = await lastValueFrom(this.localeService.locale.pipe(take(1)));
73
- let str = this.getLocaleString(this.date.from) + ' - ' + this.getLocaleString(this.date.to);
74
- if (!this.date?.from) {
75
- str = this.allowNull ? '' : this.getLocaleString(new Date()) + ' - ' + this.getLocaleString(new Date());
76
- }
77
- const option = {
78
- mode: 'dd/mm/yyyy',
79
- separator: '.',
80
- };
81
- this.mask = config.dateRangeMask;
82
- if (this.minDate) {
83
- option.min = dayjs(new Date(this.minDate)).startOf('day');
84
- }
85
- if (this.maxDate) {
86
- option.max = dayjs(new Date(this.maxDate)).endOf('day');
87
- }
88
- this.maskitoOptions = maskitoDateRangeOptionsGenerator(option);
89
- this.changePlaceholder(str);
90
- }
91
- onBlur() {
92
- if (this.allowNull && this.inputText.trim() === '') {
93
- this.setDate({ from: null, to: null });
94
- this.selectedDate.next({ from: null, to: null });
95
- this.emitValue({ from: null, to: null });
96
- }
97
- else {
98
- const val = this.inputText.replace('–', '-').split('-');
99
- const from = this.getDateFromStr(val[0].trim());
100
- const to = this.getDateFromStr(val[1]?.trim());
101
- if (to.day && to.year && to.month) {
102
- let fromDate = this.getAvailableDate(this.minDate, this.maxDate, new Date(from.year, from.month - 1, from.day));
103
- let toDate = this.getAvailableDate(this.minDate, this.maxDate, new Date(to.year, to.month - 1, to.day));
104
- if (fromDate.getTime() > toDate.getTime()) {
105
- [fromDate, toDate] = [toDate, fromDate];
106
- }
107
- this.setDate({ from: fromDate, to: toDate });
108
- this.emitValue({ from: fromDate, to: toDate });
109
- this.selectedDate.next({ from: null, to: null });
110
- if (toDate && fromDate) {
111
- this.open = false;
112
- }
113
- }
114
- else {
115
- this.setDate(this.date);
116
- this.selectedDate.next({ from: null, to: null });
117
- }
118
- }
119
- }
120
- setDate(range) {
121
- if (!range?.from && !range?.to && this.allowNull) {
122
- this.inputText = '';
123
- this.changePlaceholder('');
124
- this.selectedDate.next({
125
- from: range?.from || null,
126
- to: range?.to || null,
127
- });
128
- }
129
- else {
130
- const from = this.getLocaleString(range.from);
131
- const to = range.from && !range.to ? '' : this.getLocaleString(range.to);
132
- this.inputText = from + ' - ' + to;
133
- this.changePlaceholder(from + ' - ' + to);
134
- }
135
- }
136
- writeValue(obj) {
137
- if (obj?.from) {
138
- this.date = {
139
- from: new Date(obj.from),
140
- to: new Date(obj.to),
141
- };
142
- this.setDate({
143
- from: new Date(obj.from),
144
- to: new Date(obj.to),
145
- });
146
- }
147
- else {
148
- this.date = { from: null, to: null };
149
- }
150
- this.selectedDate.next({
151
- from: null,
152
- to: null,
153
- });
154
- }
155
- isValueChange(value) {
156
- return !(new Date(value.from).getTime() === new Date(this.date.from).getTime() &&
157
- new Date(value.to).getTime() === new Date(this.date.to).getTime());
158
- }
159
- registerOnChange(fn) {
160
- this.onChange = fn;
161
- }
162
- registerOnTouched(fn) { }
163
- ngOnInit() {
164
- if (this.date?.from) {
165
- this.setDate({
166
- from: this.allowNull ? null : new Date(this.date?.from),
167
- to: this.allowNull ? null : new Date(this.date?.to),
168
- });
169
- }
170
- else {
171
- this.setDate({
172
- from: this.allowNull ? null : new Date(),
173
- to: this.allowNull ? null : new Date(),
174
- });
175
- }
176
- this.selectedDate.next({
177
- from: null,
178
- to: null,
179
- });
180
- this.prepareInput();
181
- }
182
- onChange(date) { }
183
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: DateRangeComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1.DatePipe }, { token: i2.TetaConfigService }], target: i0.ɵɵFactoryTarget.Component }); }
184
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.1", type: DateRangeComponent, isStandalone: true, selector: "teta-date-range", inputs: { date: "date", showTime: "showTime", minDate: "minDate", maxDate: "maxDate", invalid: "invalid", disabled: "disabled", align: "align", verticalAlign: "verticalAlign", viewType: "viewType", appendToBody: "appendToBody", backdrop: "backdrop", allowNull: "allowNull" }, outputs: { selectDate: "selectDate" }, host: { properties: { "class.daterange": "this.classDaterange" } }, providers: [DATE_Range_CONTROL_VALUE_ACCESSOR, DatePipe], viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }], usesInheritance: true, ngImport: i0, template: "@if ({ selectedDate: selectedDate | async }; as data) {\n <teta-dropdown\n [appendToBody]=\"appendToBody\"\n [backdrop]=\"backdrop\"\n class=\"row row_auto\"\n [(open)]=\"open\"\n (openChange)=\"openChange($event)\"\n [viewType]=\"viewType\"\n [disabled]=\"disabled\"\n [verticalAlign]=\"verticalAlign\"\n [align]=\"align\"\n [autoCloseIgnore]=\"['esc', 'inside', 'enter']\"\n >\n <div\n tetaDropdownHead\n [class]=\"'datepicker-head font-body-3 gap-8 datepicker_' + viewType\"\n [ngClass]=\"{ 'datepicker-head_invalid': invalid, 'datepicker-head_disabled': disabled }\"\n >\n <teta-input class=\"row row_auto flex\">\n <div [class]=\"'row_auto row datepicker_' + viewType\">\n <div class=\"row row_auto position-relative font-body-3 align-center\">\n <input\n [ngClass]=\"{ 'color-text-90': !disabled }\"\n [disabled]=\"disabled\"\n #input\n style=\"z-index: 1\"\n class=\"border-0 color-text-90\"\n (keydown)=\"checkEnter($event)\"\n [(ngModel)]=\"inputText\"\n (ngModelChange)=\"changeInput($event)\"\n [maskito]=\"maskitoOptions\"\n />\n @if (data.selectedDate || allowNull) {\n <div\n (click)=\"input.focus()\"\n class=\"position-absolute color-text-10\"\n style=\"cursor: text; user-select: none\"\n >\n {{ placeholder }}\n </div>\n }\n </div>\n <teta-icon [name]=\"'calendar'\" [palette]=\"'text'\"></teta-icon>\n </div>\n </teta-input>\n </div>\n <div tetaDropdownContent class=\"scrollable\" (click)=\"$event.preventDefault()\">\n @if (open) {\n <div class=\"row\">\n <teta-range-calendar\n [isDateNull]=\"date === null || (date?.from === null && date?.to === null)\"\n [open]=\"open\"\n [max]=\"maxDate\"\n [allowNull]=\"allowNull\"\n [min]=\"minDate\"\n (setDate)=\"changeSelectedDate($event, data.selectedDate)\"\n [selectedDate]=\"data.selectedDate\"\n [date]=\"date\"\n [viewType]=\"viewType\"\n [locale]=\"locale | async\"\n ></teta-range-calendar>\n </div>\n }\n </div>\n </teta-dropdown>\n}\n", styles: [""], dependencies: [{ kind: "component", type: DropdownComponent, selector: "teta-dropdown", exportAs: ["dropdown"] }, { kind: "directive", type: DropdownHeadDirective, selector: "[tetaDropdownHead]" }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: InputComponent, selector: "teta-input", inputs: ["label", "hint", "viewType", "horizontal", "required"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MaskitoModule }, { kind: "directive", type: i4.MaskitoDirective, selector: "[maskito]", inputs: ["maskito", "maskitoElement"] }, { kind: "directive", type: i4.MaskitoCVA, selector: "input[maskito], textarea[maskito]", inputs: ["maskito"] }, { kind: "component", type: IconComponent, selector: "teta-icon", inputs: ["name", "size", "palette", "class"] }, { kind: "directive", type: DropdownContentDirective, selector: "[tetaDropdownContent]" }, { kind: "component", type: RangeCalendarComponent, selector: "teta-range-calendar", inputs: ["locale", "open", "date", "viewType", "allowNull", "selectedDate", "min", "isDateNull", "max"], outputs: ["hoveredDateChange", "setDate"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
185
- }
186
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: DateRangeComponent, decorators: [{
187
- type: Component,
188
- args: [{ selector: 'teta-date-range', providers: [DATE_Range_CONTROL_VALUE_ACCESSOR, DatePipe], changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
189
- DropdownComponent,
190
- DropdownHeadDirective,
191
- NgClass,
192
- InputComponent,
193
- FormsModule,
194
- MaskitoModule,
195
- IconComponent,
196
- DropdownContentDirective,
197
- RangeCalendarComponent,
198
- AsyncPipe,
199
- ], template: "@if ({ selectedDate: selectedDate | async }; as data) {\n <teta-dropdown\n [appendToBody]=\"appendToBody\"\n [backdrop]=\"backdrop\"\n class=\"row row_auto\"\n [(open)]=\"open\"\n (openChange)=\"openChange($event)\"\n [viewType]=\"viewType\"\n [disabled]=\"disabled\"\n [verticalAlign]=\"verticalAlign\"\n [align]=\"align\"\n [autoCloseIgnore]=\"['esc', 'inside', 'enter']\"\n >\n <div\n tetaDropdownHead\n [class]=\"'datepicker-head font-body-3 gap-8 datepicker_' + viewType\"\n [ngClass]=\"{ 'datepicker-head_invalid': invalid, 'datepicker-head_disabled': disabled }\"\n >\n <teta-input class=\"row row_auto flex\">\n <div [class]=\"'row_auto row datepicker_' + viewType\">\n <div class=\"row row_auto position-relative font-body-3 align-center\">\n <input\n [ngClass]=\"{ 'color-text-90': !disabled }\"\n [disabled]=\"disabled\"\n #input\n style=\"z-index: 1\"\n class=\"border-0 color-text-90\"\n (keydown)=\"checkEnter($event)\"\n [(ngModel)]=\"inputText\"\n (ngModelChange)=\"changeInput($event)\"\n [maskito]=\"maskitoOptions\"\n />\n @if (data.selectedDate || allowNull) {\n <div\n (click)=\"input.focus()\"\n class=\"position-absolute color-text-10\"\n style=\"cursor: text; user-select: none\"\n >\n {{ placeholder }}\n </div>\n }\n </div>\n <teta-icon [name]=\"'calendar'\" [palette]=\"'text'\"></teta-icon>\n </div>\n </teta-input>\n </div>\n <div tetaDropdownContent class=\"scrollable\" (click)=\"$event.preventDefault()\">\n @if (open) {\n <div class=\"row\">\n <teta-range-calendar\n [isDateNull]=\"date === null || (date?.from === null && date?.to === null)\"\n [open]=\"open\"\n [max]=\"maxDate\"\n [allowNull]=\"allowNull\"\n [min]=\"minDate\"\n (setDate)=\"changeSelectedDate($event, data.selectedDate)\"\n [selectedDate]=\"data.selectedDate\"\n [date]=\"date\"\n [viewType]=\"viewType\"\n [locale]=\"locale | async\"\n ></teta-range-calendar>\n </div>\n }\n </div>\n </teta-dropdown>\n}\n" }]
200
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i1.DatePipe }, { type: i2.TetaConfigService }], propDecorators: { date: [{
201
- type: Input
202
- }], showTime: [{
203
- type: Input
204
- }], minDate: [{
205
- type: Input
206
- }], maxDate: [{
207
- type: Input
208
- }], invalid: [{
209
- type: Input
210
- }], disabled: [{
211
- type: Input
212
- }], align: [{
213
- type: Input
214
- }], verticalAlign: [{
215
- type: Input
216
- }], viewType: [{
217
- type: Input
218
- }], appendToBody: [{
219
- type: Input
220
- }], backdrop: [{
221
- type: Input
222
- }], allowNull: [{
223
- type: Input
224
- }], input: [{
225
- type: ViewChild,
226
- args: ['input']
227
- }], selectDate: [{
228
- type: Output
229
- }], classDaterange: [{
230
- type: HostBinding,
231
- args: ['class.daterange']
232
- }] } });
233
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L2RhdGUtcGlja2VyL2RhdGUtcmFuZ2UvZGF0ZS1yYW5nZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L2RhdGUtcGlja2VyL2RhdGUtcmFuZ2UvZGF0ZS1yYW5nZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvRCxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEYsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2hFLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsYUFBYSxFQUFjLGFBQWEsRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdEUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUV6RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFHeEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbkYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDckYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbkUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDL0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNENBQTRDLENBQUM7Ozs7OztBQUUvRSxNQUFNLENBQUMsTUFBTSxpQ0FBaUMsR0FBUTtJQUNwRCxPQUFPLEVBQUUsaUJBQWlCO0lBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsa0JBQWtCLENBQUM7SUFDakQsS0FBSyxFQUFFLElBQUk7Q0FDWixDQUFDO0FBc0JGLE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxVQUFVO0lBbUJoRCxZQUNXLElBQXVCLEVBQ3ZCLFdBQXVCLEVBQ3ZCLFFBQWtCLEVBQ25CLGFBQWdDO1FBRXhDLEtBQUssQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBTDFCLFNBQUksR0FBSixJQUFJLENBQW1CO1FBQ3ZCLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBQ3ZCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbkIsa0JBQWEsR0FBYixhQUFhLENBQW1CO1FBdEJqQyxTQUFJLEdBQW9CLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFFakQsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixZQUFPLEdBQTJCLElBQUksQ0FBQztRQUN2QyxZQUFPLEdBQTJCLElBQUksQ0FBQztRQUN2QyxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsVUFBSyxHQUFVLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDMUIsa0JBQWEsR0FBa0IsYUFBYSxDQUFDLElBQUksQ0FBQztRQUNsRCxhQUFRLEdBQWEsU0FBUyxDQUFDO1FBRy9CLGNBQVMsR0FBRyxJQUFJLENBQUM7UUFFaEIsZUFBVSxHQUFrQyxJQUFJLFlBQVksRUFBbUIsQ0FBQztRQUNuRixTQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ1YsaUJBQVksR0FBbUMsSUFBSSxhQUFhLENBQWtCLENBQUMsQ0FBQyxDQUFDO1FBQzNDLG1CQUFjLEdBQUcsSUFBSSxDQUFDO1FBUXJFLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUM7SUFDMUMsQ0FBQztJQUVRLGtCQUFrQixDQUFDLElBQVUsRUFBRSxZQUE2QjtRQUNuRSxJQUFJLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN0QixNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3ZGLE1BQU0sRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDckYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzNCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztZQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzVCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELENBQUM7SUFDSCxDQUFDO0lBRVEsU0FBUztRQUNoQixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxPQUFPLENBQ0wsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxZQUFZLENBQUMsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxZQUFZLENBQUMsQ0FDOUcsQ0FBQztJQUNKLENBQUM7SUFFRCxLQUFLLENBQUMsWUFBWTtRQUNoQixNQUFNLE1BQU0sR0FBRyxNQUFNLGFBQWEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1RSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM1RixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUNyQixHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUM7UUFDMUcsQ0FBQztRQUNELE1BQU0sTUFBTSxHQUE0RDtZQUN0RSxJQUFJLEVBQUUsWUFBWTtZQUNsQixTQUFTLEVBQUUsR0FBRztTQUNmLENBQUM7UUFDRixJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUM7UUFDakMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsTUFBTSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVELENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQixNQUFNLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUQsQ0FBQztRQUNELElBQUksQ0FBQyxjQUFjLEdBQUcsZ0NBQWdDLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxNQUFNO1FBQ0osSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDbkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzNDLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN4RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ2hELE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDL0MsSUFBSSxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNsQyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hILElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDeEcsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7b0JBQzFDLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUMxQyxDQUFDO2dCQUVELElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO2dCQUM3QyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztnQkFDL0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUNqRCxJQUFJLE1BQU0sSUFBSSxRQUFRLEVBQUUsQ0FBQztvQkFDdkIsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7Z0JBQ3BCLENBQUM7WUFDSCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNuRCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLENBQUMsS0FBc0I7UUFDNUIsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNqRCxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztZQUVwQixJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDM0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7Z0JBQ3JCLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxJQUFJLElBQUk7Z0JBQ3pCLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLElBQUk7YUFDdEIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM5QyxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6RSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEdBQUcsS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzVDLENBQUM7SUFDSCxDQUFDO0lBRUQsVUFBVSxDQUFDLEdBQW9CO1FBQzdCLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDO1lBQ2QsSUFBSSxDQUFDLElBQUksR0FBRztnQkFDVixJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztnQkFDeEIsRUFBRSxFQUFFLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7YUFDckIsQ0FBQztZQUNGLElBQUksQ0FBQyxPQUFPLENBQUM7Z0JBQ1gsSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7Z0JBQ3hCLEVBQUUsRUFBRSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2FBQ3JCLENBQUMsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ3ZDLENBQUM7UUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztZQUNyQixJQUFJLEVBQUUsSUFBSTtZQUNWLEVBQUUsRUFBRSxJQUFJO1NBQ1QsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVRLGFBQWEsQ0FBQyxLQUFLO1FBQzFCLE9BQU8sQ0FBQyxDQUNOLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRTtZQUNyRSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FDbEUsQ0FBQztJQUNKLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxFQUFPO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxFQUFPLElBQVMsQ0FBQztJQUVuQyxRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxPQUFPLENBQUM7Z0JBQ1gsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7Z0JBQ3ZELEVBQUUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO2FBQ3BELENBQUMsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLE9BQU8sQ0FBQztnQkFDWCxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRTtnQkFDeEMsRUFBRSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUU7YUFDdkMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO1lBQ3JCLElBQUksRUFBRSxJQUFJO1lBQ1YsRUFBRSxFQUFFLElBQUk7U0FDVCxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUFJLElBQUcsQ0FBQzs4R0E1S04sa0JBQWtCO2tHQUFsQixrQkFBa0IsNmJBaEJsQixDQUFDLGlDQUFpQyxFQUFFLFFBQVEsQ0FBQyxpSkM3QzFELHE0RUFrRUEsMEREakJJLGlCQUFpQixrRkFDakIscUJBQXFCLCtEQUNyQixPQUFPLG9GQUNQLGNBQWMsdUhBQ2QsV0FBVyw4bUJBQ1gsYUFBYSwrUEFDYixhQUFhLG9HQUNiLHdCQUF3QixrRUFDeEIsc0JBQXNCLCtNQUN0QixTQUFTOzsyRkFHQSxrQkFBa0I7a0JBcEI5QixTQUFTOytCQUNFLGlCQUFpQixhQUdoQixDQUFDLGlDQUFpQyxFQUFFLFFBQVEsQ0FBQyxtQkFDdkMsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1A7d0JBQ1AsaUJBQWlCO3dCQUNqQixxQkFBcUI7d0JBQ3JCLE9BQU87d0JBQ1AsY0FBYzt3QkFDZCxXQUFXO3dCQUNYLGFBQWE7d0JBQ2IsYUFBYTt3QkFDYix3QkFBd0I7d0JBQ3hCLHNCQUFzQjt3QkFDdEIsU0FBUztxQkFDVjtzS0FHUSxJQUFJO3NCQUFaLEtBQUs7Z0JBRUcsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ2MsS0FBSztzQkFBeEIsU0FBUzt1QkFBQyxPQUFPO2dCQUNSLFVBQVU7c0JBQW5CLE1BQU07Z0JBRzBDLGNBQWM7c0JBQTlELFdBQVc7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0ZVBpcGUsIE5nQ2xhc3MsIEFzeW5jUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SLCBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IG1hc2tpdG9EYXRlUmFuZ2VPcHRpb25zR2VuZXJhdG9yIH0gZnJvbSAnQG1hc2tpdG8va2l0JztcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcyc7XG5pbXBvcnQgeyBsYXN0VmFsdWVGcm9tLCBPYnNlcnZhYmxlLCBSZXBsYXlTdWJqZWN0LCB0YWtlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEFsaWduIH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL2VudW0vYWxpZ24uZW51bSc7XG5pbXBvcnQgeyBWZXJ0aWNhbEFsaWduIH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL2VudW0vdmVydGljYWwtYWxpZ24uZW51bSc7XG5pbXBvcnQgeyB2aWV3VHlwZSB9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9tb2RlbC92aWV3LXR5cGUubW9kZWwnO1xuaW1wb3J0IHsgQmFzZVBpY2tlciB9IGZyb20gJy4uL2Jhc2UtcGlja2VyJztcbmltcG9ydCB7IERhdGVGcm9tVG9Nb2RlbCB9IGZyb20gJy4uL21vZGVsL2Zyb20tdG8ubW9kZWwnO1xuaW1wb3J0IHsgVGV0YUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9sb2NhbGUvdGV0YS1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBUZXRhTG9jYWxpc2F0aW9uIH0gZnJvbSAnLi4vLi4vLi4vbG9jYWxlL3RldGEtbG9jYWxpc2F0aW9uJztcbmltcG9ydCB7IHJ1TG9jYWxlIH0gZnJvbSAnLi4vLi4vLi4vbG9jYWxlL3J1JztcbmltcG9ydCB7IFJhbmdlQ2FsZW5kYXJDb21wb25lbnQgfSBmcm9tICcuL3JhbmdlLWNhbGVuZGFyL3JhbmdlLWNhbGVuZGFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEcm9wZG93bkNvbnRlbnREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kcm9wZG93bi9kcm9wZG93bi1jb250ZW50LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vaWNvbi9pY29uL2ljb24uY29tcG9uZW50JztcbmltcG9ydCB7IE1hc2tpdG9Nb2R1bGUgfSBmcm9tICdAbWFza2l0by9hbmd1bGFyJztcbmltcG9ydCB7IElucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vaW5wdXQvaW5wdXQvaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IERyb3Bkb3duSGVhZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2Ryb3Bkb3duL2Ryb3Bkb3duLWhlYWQuZGlyZWN0aXZlJztcbmltcG9ydCB7IERyb3Bkb3duQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZHJvcGRvd24vZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50JztcblxuZXhwb3J0IGNvbnN0IERBVEVfUmFuZ2VfQ09OVFJPTF9WQUxVRV9BQ0NFU1NPUjogYW55ID0ge1xuICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRGF0ZVJhbmdlQ29tcG9uZW50KSxcbiAgbXVsdGk6IHRydWUsXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0ZXRhLWRhdGUtcmFuZ2UnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZS1yYW5nZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RhdGUtcmFuZ2UuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbREFURV9SYW5nZV9DT05UUk9MX1ZBTFVFX0FDQ0VTU09SLCBEYXRlUGlwZV0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgRHJvcGRvd25Db21wb25lbnQsXG4gICAgRHJvcGRvd25IZWFkRGlyZWN0aXZlLFxuICAgIE5nQ2xhc3MsXG4gICAgSW5wdXRDb21wb25lbnQsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgTWFza2l0b01vZHVsZSxcbiAgICBJY29uQ29tcG9uZW50LFxuICAgIERyb3Bkb3duQ29udGVudERpcmVjdGl2ZSxcbiAgICBSYW5nZUNhbGVuZGFyQ29tcG9uZW50LFxuICAgIEFzeW5jUGlwZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRGF0ZVJhbmdlQ29tcG9uZW50IGV4dGVuZHMgQmFzZVBpY2tlciBpbXBsZW1lbnRzIE9uSW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBASW5wdXQoKSBkYXRlOiBEYXRlRnJvbVRvTW9kZWwgPSB7IGZyb206IG51bGwsIHRvOiBudWxsIH07XG4gIHB1YmxpYyBsb2NhbGU6IE9ic2VydmFibGU8VGV0YUxvY2FsaXNhdGlvbj47XG4gIEBJbnB1dCgpIHNob3dUaW1lID0gZmFsc2U7XG4gIEBJbnB1dCgpIG1pbkRhdGU6IERhdGUgfCBzdHJpbmcgfCBudW1iZXIgPSBudWxsO1xuICBASW5wdXQoKSBtYXhEYXRlOiBEYXRlIHwgc3RyaW5nIHwgbnVtYmVyID0gbnVsbDtcbiAgQElucHV0KCkgaW52YWxpZCA9IGZhbHNlO1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBhbGlnbjogQWxpZ24gPSBBbGlnbi5sZWZ0O1xuICBASW5wdXQoKSB2ZXJ0aWNhbEFsaWduOiBWZXJ0aWNhbEFsaWduID0gVmVydGljYWxBbGlnbi5hdXRvO1xuICBASW5wdXQoKSB2aWV3VHlwZTogdmlld1R5cGUgPSAncm91bmRlZCc7XG4gIEBJbnB1dCgpIGFwcGVuZFRvQm9keTogYm9vbGVhbjtcbiAgQElucHV0KCkgYmFja2Ryb3A6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGFsbG93TnVsbCA9IHRydWU7XG4gIEBWaWV3Q2hpbGQoJ2lucHV0JykgaW5wdXQ6IEVsZW1lbnRSZWY7XG4gIEBPdXRwdXQoKSBzZWxlY3REYXRlOiBFdmVudEVtaXR0ZXI8RGF0ZUZyb21Ub01vZGVsPiA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZUZyb21Ub01vZGVsPigpO1xuICBwdWJsaWMgbWFzayA9ICcnO1xuICBwdWJsaWMgc2VsZWN0ZWREYXRlOiBSZXBsYXlTdWJqZWN0PERhdGVGcm9tVG9Nb2RlbD4gPSBuZXcgUmVwbGF5U3ViamVjdDxEYXRlRnJvbVRvTW9kZWw+KDEpO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmRhdGVyYW5nZScpIHByaXZhdGUgcmVhZG9ubHkgY2xhc3NEYXRlcmFuZ2UgPSB0cnVlO1xuICBjb25zdHJ1Y3RvcihcbiAgICBvdmVycmlkZSBfY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBvdmVycmlkZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBvdmVycmlkZSBkYXRlUGlwZTogRGF0ZVBpcGUsXG4gICAgcHJpdmF0ZSBsb2NhbGVTZXJ2aWNlOiBUZXRhQ29uZmlnU2VydmljZSxcbiAgKSB7XG4gICAgc3VwZXIoX2VsZW1lbnRSZWYsIF9jZHIsIGRhdGVQaXBlKTtcbiAgICB0aGlzLmxvY2FsZSA9IHRoaXMubG9jYWxlU2VydmljZS5sb2NhbGU7XG4gIH1cblxuICBvdmVycmlkZSBjaGFuZ2VTZWxlY3RlZERhdGUoZGF0ZTogRGF0ZSwgc2VsZWN0ZWREYXRlOiBEYXRlRnJvbVRvTW9kZWwpIHtcbiAgICBpZiAoc2VsZWN0ZWREYXRlLmZyb20pIHtcbiAgICAgIGNvbnN0IGZyb20gPSBuZXcgRGF0ZShNYXRoLm1pbihuZXcgRGF0ZShzZWxlY3RlZERhdGUuZnJvbSkuZ2V0VGltZSgpLCBkYXRlLmdldFRpbWUoKSkpO1xuICAgICAgY29uc3QgdG8gPSBuZXcgRGF0ZShNYXRoLm1heChuZXcgRGF0ZShzZWxlY3RlZERhdGUuZnJvbSkuZ2V0VGltZSgpLCBkYXRlLmdldFRpbWUoKSkpO1xuICAgICAgdGhpcy5zZXREYXRlKHsgZnJvbSwgdG8gfSk7XG4gICAgICB0aGlzLnNlbGVjdGVkRGF0ZS5uZXh0KHsgZnJvbTogbnVsbCwgdG86IG51bGwgfSk7XG4gICAgICB0aGlzLm9wZW4gPSBmYWxzZTtcbiAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0RGF0ZSh7IGZyb206IGRhdGUsIHRvOiBudWxsIH0pO1xuICAgICAgdGhpcy5zZWxlY3RlZERhdGUubmV4dCh7IGZyb206IGRhdGUsIHRvOiBudWxsIH0pO1xuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIGNoZWNrTnVsbCgpIHtcbiAgICBpZiAodGhpcy5hbGxvd051bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0obmV3IERhdGUoKSwgJ2RkLk1NLnl5eXknKSArICcgLSAnICsgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0obmV3IERhdGUoKSwgJ2RkLk1NLnl5eXknKVxuICAgICk7XG4gIH1cblxuICBhc3luYyBwcmVwYXJlSW5wdXQoKSB7XG4gICAgY29uc3QgY29uZmlnID0gYXdhaXQgbGFzdFZhbHVlRnJvbSh0aGlzLmxvY2FsZVNlcnZpY2UubG9jYWxlLnBpcGUodGFrZSgxKSkpO1xuICAgIGxldCBzdHIgPSB0aGlzLmdldExvY2FsZVN0cmluZyh0aGlzLmRhdGUuZnJvbSkgKyAnIC0gJyArIHRoaXMuZ2V0TG9jYWxlU3RyaW5nKHRoaXMuZGF0ZS50byk7XG4gICAgaWYgKCF0aGlzLmRhdGU/LmZyb20pIHtcbiAgICAgIHN0ciA9IHRoaXMuYWxsb3dOdWxsID8gJycgOiB0aGlzLmdldExvY2FsZVN0cmluZyhuZXcgRGF0ZSgpKSArICcgLSAnICsgdGhpcy5nZXRMb2NhbGVTdHJpbmcobmV3IERhdGUoKSk7XG4gICAgfVxuICAgIGNvbnN0IG9wdGlvbjogeyBtb2RlOyBzZXBhcmF0b3I7IG1pbj87IG1heD87IG1pbkxlbmd0aD87IG1heExlbmd0aD8gfSA9IHtcbiAgICAgIG1vZGU6ICdkZC9tbS95eXl5JyxcbiAgICAgIHNlcGFyYXRvcjogJy4nLFxuICAgIH07XG4gICAgdGhpcy5tYXNrID0gY29uZmlnLmRhdGVSYW5nZU1hc2s7XG4gICAgaWYgKHRoaXMubWluRGF0ZSkge1xuICAgICAgb3B0aW9uLm1pbiA9IGRheWpzKG5ldyBEYXRlKHRoaXMubWluRGF0ZSkpLnN0YXJ0T2YoJ2RheScpO1xuICAgIH1cbiAgICBpZiAodGhpcy5tYXhEYXRlKSB7XG4gICAgICBvcHRpb24ubWF4ID0gZGF5anMobmV3IERhdGUodGhpcy5tYXhEYXRlKSkuZW5kT2YoJ2RheScpO1xuICAgIH1cbiAgICB0aGlzLm1hc2tpdG9PcHRpb25zID0gbWFza2l0b0RhdGVSYW5nZU9wdGlvbnNHZW5lcmF0b3Iob3B0aW9uKTtcbiAgICB0aGlzLmNoYW5nZVBsYWNlaG9sZGVyKHN0cik7XG4gIH1cblxuICBvbkJsdXIoKSB7XG4gICAgaWYgKHRoaXMuYWxsb3dOdWxsICYmIHRoaXMuaW5wdXRUZXh0LnRyaW0oKSA9PT0gJycpIHtcbiAgICAgIHRoaXMuc2V0RGF0ZSh7IGZyb206IG51bGwsIHRvOiBudWxsIH0pO1xuICAgICAgdGhpcy5zZWxlY3RlZERhdGUubmV4dCh7IGZyb206IG51bGwsIHRvOiBudWxsIH0pO1xuICAgICAgdGhpcy5lbWl0VmFsdWUoeyBmcm9tOiBudWxsLCB0bzogbnVsbCB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdmFsID0gdGhpcy5pbnB1dFRleHQucmVwbGFjZSgn4oCTJywgJy0nKS5zcGxpdCgnLScpO1xuICAgICAgY29uc3QgZnJvbSA9IHRoaXMuZ2V0RGF0ZUZyb21TdHIodmFsWzBdLnRyaW0oKSk7XG4gICAgICBjb25zdCB0byA9IHRoaXMuZ2V0RGF0ZUZyb21TdHIodmFsWzFdPy50cmltKCkpO1xuICAgICAgaWYgKHRvLmRheSAmJiB0by55ZWFyICYmIHRvLm1vbnRoKSB7XG4gICAgICAgIGxldCBmcm9tRGF0ZSA9IHRoaXMuZ2V0QXZhaWxhYmxlRGF0ZSh0aGlzLm1pbkRhdGUsIHRoaXMubWF4RGF0ZSwgbmV3IERhdGUoZnJvbS55ZWFyLCBmcm9tLm1vbnRoIC0gMSwgZnJvbS5kYXkpKTtcbiAgICAgICAgbGV0IHRvRGF0ZSA9IHRoaXMuZ2V0QXZhaWxhYmxlRGF0ZSh0aGlzLm1pbkRhdGUsIHRoaXMubWF4RGF0ZSwgbmV3IERhdGUodG8ueWVhciwgdG8ubW9udGggLSAxLCB0by5kYXkpKTtcbiAgICAgICAgaWYgKGZyb21EYXRlLmdldFRpbWUoKSA+IHRvRGF0ZS5nZXRUaW1lKCkpIHtcbiAgICAgICAgICBbZnJvbURhdGUsIHRvRGF0ZV0gPSBbdG9EYXRlLCBmcm9tRGF0ZV07XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldERhdGUoeyBmcm9tOiBmcm9tRGF0ZSwgdG86IHRvRGF0ZSB9KTtcbiAgICAgICAgdGhpcy5lbWl0VmFsdWUoeyBmcm9tOiBmcm9tRGF0ZSwgdG86IHRvRGF0ZSB9KTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGUubmV4dCh7IGZyb206IG51bGwsIHRvOiBudWxsIH0pO1xuICAgICAgICBpZiAodG9EYXRlICYmIGZyb21EYXRlKSB7XG4gICAgICAgICAgdGhpcy5vcGVuID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2V0RGF0ZSh0aGlzLmRhdGUpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZS5uZXh0KHsgZnJvbTogbnVsbCwgdG86IG51bGwgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2V0RGF0ZShyYW5nZTogRGF0ZUZyb21Ub01vZGVsKSB7XG4gICAgaWYgKCFyYW5nZT8uZnJvbSAmJiAhcmFuZ2U/LnRvICYmIHRoaXMuYWxsb3dOdWxsKSB7XG4gICAgICB0aGlzLmlucHV0VGV4dCA9ICcnO1xuXG4gICAgICB0aGlzLmNoYW5nZVBsYWNlaG9sZGVyKCcnKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlLm5leHQoe1xuICAgICAgICBmcm9tOiByYW5nZT8uZnJvbSB8fCBudWxsLFxuICAgICAgICB0bzogcmFuZ2U/LnRvIHx8IG51bGwsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZnJvbSA9IHRoaXMuZ2V0TG9jYWxlU3RyaW5nKHJhbmdlLmZyb20pO1xuICAgICAgY29uc3QgdG8gPSByYW5nZS5mcm9tICYmICFyYW5nZS50byA/ICcnIDogdGhpcy5nZXRMb2NhbGVTdHJpbmcocmFuZ2UudG8pO1xuICAgICAgdGhpcy5pbnB1dFRleHQgPSBmcm9tICsgJyAtICcgKyB0bztcbiAgICAgIHRoaXMuY2hhbmdlUGxhY2Vob2xkZXIoZnJvbSArICcgLSAnICsgdG8pO1xuICAgIH1cbiAgfVxuXG4gIHdyaXRlVmFsdWUob2JqOiBEYXRlRnJvbVRvTW9kZWwpOiB2b2lkIHtcbiAgICBpZiAob2JqPy5mcm9tKSB7XG4gICAgICB0aGlzLmRhdGUgPSB7XG4gICAgICAgIGZyb206IG5ldyBEYXRlKG9iai5mcm9tKSxcbiAgICAgICAgdG86IG5ldyBEYXRlKG9iai50byksXG4gICAgICB9O1xuICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgZnJvbTogbmV3IERhdGUob2JqLmZyb20pLFxuICAgICAgICB0bzogbmV3IERhdGUob2JqLnRvKSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRhdGUgPSB7IGZyb206IG51bGwsIHRvOiBudWxsIH07XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWREYXRlLm5leHQoe1xuICAgICAgZnJvbTogbnVsbCxcbiAgICAgIHRvOiBudWxsLFxuICAgIH0pO1xuICB9XG5cbiAgb3ZlcnJpZGUgaXNWYWx1ZUNoYW5nZSh2YWx1ZSkge1xuICAgIHJldHVybiAhKFxuICAgICAgbmV3IERhdGUodmFsdWUuZnJvbSkuZ2V0VGltZSgpID09PSBuZXcgRGF0ZSh0aGlzLmRhdGUuZnJvbSkuZ2V0VGltZSgpICYmXG4gICAgICBuZXcgRGF0ZSh2YWx1ZS50bykuZ2V0VGltZSgpID09PSBuZXcgRGF0ZSh0aGlzLmRhdGUudG8pLmdldFRpbWUoKVxuICAgICk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRhdGU/LmZyb20pIHtcbiAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgIGZyb206IHRoaXMuYWxsb3dOdWxsID8gbnVsbCA6IG5ldyBEYXRlKHRoaXMuZGF0ZT8uZnJvbSksXG4gICAgICAgIHRvOiB0aGlzLmFsbG93TnVsbCA/IG51bGwgOiBuZXcgRGF0ZSh0aGlzLmRhdGU/LnRvKSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICBmcm9tOiB0aGlzLmFsbG93TnVsbCA/IG51bGwgOiBuZXcgRGF0ZSgpLFxuICAgICAgICB0bzogdGhpcy5hbGxvd051bGwgPyBudWxsIDogbmV3IERhdGUoKSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuc2VsZWN0ZWREYXRlLm5leHQoe1xuICAgICAgZnJvbTogbnVsbCxcbiAgICAgIHRvOiBudWxsLFxuICAgIH0pO1xuXG4gICAgdGhpcy5wcmVwYXJlSW5wdXQoKTtcbiAgfVxuXG4gIG9uQ2hhbmdlKGRhdGUpIHt9XG59XG4iLCJAaWYgKHsgc2VsZWN0ZWREYXRlOiBzZWxlY3RlZERhdGUgfCBhc3luYyB9OyBhcyBkYXRhKSB7XG4gIDx0ZXRhLWRyb3Bkb3duXG4gICAgW2FwcGVuZFRvQm9keV09XCJhcHBlbmRUb0JvZHlcIlxuICAgIFtiYWNrZHJvcF09XCJiYWNrZHJvcFwiXG4gICAgY2xhc3M9XCJyb3cgcm93X2F1dG9cIlxuICAgIFsob3BlbildPVwib3BlblwiXG4gICAgKG9wZW5DaGFuZ2UpPVwib3BlbkNoYW5nZSgkZXZlbnQpXCJcbiAgICBbdmlld1R5cGVdPVwidmlld1R5cGVcIlxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgW3ZlcnRpY2FsQWxpZ25dPVwidmVydGljYWxBbGlnblwiXG4gICAgW2FsaWduXT1cImFsaWduXCJcbiAgICBbYXV0b0Nsb3NlSWdub3JlXT1cIlsnZXNjJywgJ2luc2lkZScsICdlbnRlciddXCJcbiAgPlxuICAgIDxkaXZcbiAgICAgIHRldGFEcm9wZG93bkhlYWRcbiAgICAgIFtjbGFzc109XCInZGF0ZXBpY2tlci1oZWFkIGZvbnQtYm9keS0zIGdhcC04IGRhdGVwaWNrZXJfJyArIHZpZXdUeXBlXCJcbiAgICAgIFtuZ0NsYXNzXT1cInsgJ2RhdGVwaWNrZXItaGVhZF9pbnZhbGlkJzogaW52YWxpZCwgJ2RhdGVwaWNrZXItaGVhZF9kaXNhYmxlZCc6IGRpc2FibGVkIH1cIlxuICAgID5cbiAgICAgIDx0ZXRhLWlucHV0IGNsYXNzPVwicm93IHJvd19hdXRvIGZsZXhcIj5cbiAgICAgICAgPGRpdiBbY2xhc3NdPVwiJ3Jvd19hdXRvIHJvdyBkYXRlcGlja2VyXycgKyB2aWV3VHlwZVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgcm93X2F1dG8gcG9zaXRpb24tcmVsYXRpdmUgZm9udC1ib2R5LTMgYWxpZ24tY2VudGVyXCI+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnY29sb3ItdGV4dC05MCc6ICFkaXNhYmxlZCB9XCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgI2lucHV0XG4gICAgICAgICAgICAgIHN0eWxlPVwiei1pbmRleDogMVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYm9yZGVyLTAgY29sb3ItdGV4dC05MFwiXG4gICAgICAgICAgICAgIChrZXlkb3duKT1cImNoZWNrRW50ZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaW5wdXRUZXh0XCJcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlSW5wdXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFttYXNraXRvXT1cIm1hc2tpdG9PcHRpb25zXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICBAaWYgKGRhdGEuc2VsZWN0ZWREYXRlIHx8IGFsbG93TnVsbCkge1xuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImlucHV0LmZvY3VzKClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGUgY29sb3ItdGV4dC0xMFwiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJjdXJzb3I6IHRleHQ7IHVzZXItc2VsZWN0OiBub25lXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IHBsYWNlaG9sZGVyIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDx0ZXRhLWljb24gW25hbWVdPVwiJ2NhbGVuZGFyJ1wiIFtwYWxldHRlXT1cIid0ZXh0J1wiPjwvdGV0YS1pY29uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvdGV0YS1pbnB1dD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IHRldGFEcm9wZG93bkNvbnRlbnQgY2xhc3M9XCJzY3JvbGxhYmxlXCIgKGNsaWNrKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCI+XG4gICAgICBAaWYgKG9wZW4pIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgIDx0ZXRhLXJhbmdlLWNhbGVuZGFyXG4gICAgICAgICAgICBbaXNEYXRlTnVsbF09XCJkYXRlID09PSBudWxsIHx8IChkYXRlPy5mcm9tID09PSBudWxsICYmIGRhdGU/LnRvID09PSBudWxsKVwiXG4gICAgICAgICAgICBbb3Blbl09XCJvcGVuXCJcbiAgICAgICAgICAgIFttYXhdPVwibWF4RGF0ZVwiXG4gICAgICAgICAgICBbYWxsb3dOdWxsXT1cImFsbG93TnVsbFwiXG4gICAgICAgICAgICBbbWluXT1cIm1pbkRhdGVcIlxuICAgICAgICAgICAgKHNldERhdGUpPVwiY2hhbmdlU2VsZWN0ZWREYXRlKCRldmVudCwgZGF0YS5zZWxlY3RlZERhdGUpXCJcbiAgICAgICAgICAgIFtzZWxlY3RlZERhdGVdPVwiZGF0YS5zZWxlY3RlZERhdGVcIlxuICAgICAgICAgICAgW2RhdGVdPVwiZGF0ZVwiXG4gICAgICAgICAgICBbdmlld1R5cGVdPVwidmlld1R5cGVcIlxuICAgICAgICAgICAgW2xvY2FsZV09XCJsb2NhbGUgfCBhc3luY1wiXG4gICAgICAgICAgPjwvdGV0YS1yYW5nZS1jYWxlbmRhcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvdGV0YS1kcm9wZG93bj5cbn1cbiJdfQ==