@tetacom/ng-components 1.4.3 → 1.4.5

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 (320) hide show
  1. package/assets/icons.svg +54 -0
  2. package/component/avatar/avatar/avatar.component.d.ts +1 -1
  3. package/component/button/button/button.component.d.ts +1 -1
  4. package/component/date-picker/base-calendar.d.ts +1 -1
  5. package/component/date-picker/base-picker.d.ts +1 -1
  6. package/component/date-picker/date-picker/date-calendar/date-calendar.component.d.ts +1 -1
  7. package/component/date-picker/date-picker/date-picker.component.d.ts +1 -1
  8. package/component/date-picker/date-range/date-range.component.d.ts +1 -1
  9. package/component/date-picker/date-range/range-calendar/range-calendar.component.d.ts +1 -1
  10. package/component/date-picker/day-picker/day-item/day-item.component.d.ts +1 -1
  11. package/component/date-picker/day-picker/day-picker.component.d.ts +4 -4
  12. package/component/date-picker/month-picker/month-picker.component.d.ts +2 -2
  13. package/component/date-picker/public-api.d.ts +2 -2
  14. package/component/date-picker/year-picker/year-picker.component.d.ts +3 -3
  15. package/component/filter/boolean-filter/boolean-filter.component.d.ts +3 -3
  16. package/component/message/model/message.d.ts +1 -1
  17. package/component/switch/switch/switch.component.d.ts +1 -1
  18. package/component/table/table-row/table-row.component.d.ts +2 -2
  19. package/component/tree/tree/tree.component.d.ts +1 -1
  20. package/docs/avatarDocs.mdx +78 -72
  21. package/docs/datePickerDocs.mdx +3 -3
  22. package/docs/dateRangeDocs.mdx +3 -3
  23. package/docs/delimiterDocs.mdx +78 -78
  24. package/docs/dropdownDocs.mdx +143 -123
  25. package/docs/expandCardlDocs.mdx +49 -45
  26. package/docs/expandPanelDocs.mdx +104 -92
  27. package/docs/fileAreaDocs.mdx +64 -59
  28. package/docs/inputDocs.mdx +70 -67
  29. package/docs/listDocs.mdx +14 -8
  30. package/docs/messageDocs.mdx +47 -34
  31. package/docs/progressBarDocs.mdx +65 -51
  32. package/docs/propertyGridDocs.mdx +173 -115
  33. package/docs/radioDocs.mdx +92 -80
  34. package/docs/resizePanelDocs.mdx +79 -67
  35. package/docs/selectDocs.mdx +262 -220
  36. package/docs/switchDocs.mdx +86 -73
  37. package/docs/tagDocs.mdx +17 -11
  38. package/docs/toggleDocs.mdx +42 -36
  39. package/docs/toolbarDocs.mdx +14 -8
  40. package/docs/treeDocs.mdx +108 -89
  41. package/esm2022/common/contract/teta-content-ref.mjs +1 -1
  42. package/esm2022/common/enum/align.enum.mjs +1 -1
  43. package/esm2022/common/enum/vertical-align.enum.mjs +1 -1
  44. package/esm2022/common/service/dynamic-component.service.mjs +1 -1
  45. package/esm2022/common/util/array-util.mjs +5 -7
  46. package/esm2022/common/util/dom-util.mjs +2 -3
  47. package/esm2022/common/util/position-util.mjs +6 -14
  48. package/esm2022/component/accordion/accordion-content.directive.mjs +2 -2
  49. package/esm2022/component/accordion/public-api.mjs +1 -1
  50. package/esm2022/component/autocomplete/autocomplete/autocomplete.component.mjs +2 -3
  51. package/esm2022/component/autocomplete/public-api.mjs +1 -1
  52. package/esm2022/component/avatar/avatar/avatar.component.mjs +4 -5
  53. package/esm2022/component/avatar/model/avatar-color.enum.mjs +1 -1
  54. package/esm2022/component/avatar/public-api.mjs +1 -1
  55. package/esm2022/component/button/button/button.component.mjs +2 -2
  56. package/esm2022/component/button/public-api.mjs +1 -1
  57. package/esm2022/component/chart-3d/chart3d/chart3d.component.mjs +11 -24
  58. package/esm2022/component/chart-3d/model/chart-3d-options.mjs +1 -1
  59. package/esm2022/component/chart-3d/public-api.mjs +1 -1
  60. package/esm2022/component/checkbox/checkbox/checkbox.component.mjs +3 -3
  61. package/esm2022/component/checkbox/public-api.mjs +1 -1
  62. package/esm2022/component/date-picker/base-calendar.mjs +7 -14
  63. package/esm2022/component/date-picker/base-picker.mjs +3 -2
  64. package/esm2022/component/date-picker/date-picker/date-calendar/date-calendar.component.mjs +4 -11
  65. package/esm2022/component/date-picker/date-picker/date-picker.component.mjs +5 -6
  66. package/esm2022/component/date-picker/date-range/date-range.component.mjs +6 -14
  67. package/esm2022/component/date-picker/date-range/range-calendar/range-calendar.component.mjs +4 -4
  68. package/esm2022/component/date-picker/day-picker/day-item/day-item.component.mjs +5 -6
  69. package/esm2022/component/date-picker/day-picker/day-picker.component.mjs +9 -9
  70. package/esm2022/component/date-picker/model/date-picker-mode.enum.mjs +1 -1
  71. package/esm2022/component/date-picker/model/from-to.model.mjs +1 -1
  72. package/esm2022/component/date-picker/model/min-max-date.model.mjs +1 -1
  73. package/esm2022/component/date-picker/month-picker/month-picker.component.mjs +4 -4
  74. package/esm2022/component/date-picker/public-api.mjs +3 -3
  75. package/esm2022/component/date-picker/year-picker/scroll-to-selected-year.directive.mjs +3 -3
  76. package/esm2022/component/date-picker/year-picker/year-picker.component.mjs +9 -7
  77. package/esm2022/component/delimiter/delimiter/delimiter.component.mjs +2 -2
  78. package/esm2022/component/delimiter/public-api.mjs +1 -1
  79. package/esm2022/component/divider/divider/divider.component.mjs +4 -4
  80. package/esm2022/component/divider/public-api.mjs +1 -1
  81. package/esm2022/component/dropdown/dropdown/dropdown.component.mjs +2 -3
  82. package/esm2022/component/dropdown/dropdown-base.mjs +11 -22
  83. package/esm2022/component/dropdown/dropdown-content.directive.mjs +2 -2
  84. package/esm2022/component/dropdown/dropdown-head.directive.mjs +2 -2
  85. package/esm2022/component/dropdown/dropdown.directive.mjs +4 -5
  86. package/esm2022/component/dropdown/public-api.mjs +1 -1
  87. package/esm2022/component/dynamic-component/popup-content/popup-content.component.mjs +4 -10
  88. package/esm2022/component/dynamic-component/public-api.mjs +1 -1
  89. package/esm2022/component/expand-card/expand-card/expand-card.component.mjs +4 -5
  90. package/esm2022/component/expand-card/expand-item/expand-item.component.mjs +4 -4
  91. package/esm2022/component/expand-card/public-api.mjs +1 -1
  92. package/esm2022/component/expand-panel/expand-panel/expand-panel.component.mjs +4 -9
  93. package/esm2022/component/expand-panel/expand-panel-content.directive.mjs +1 -1
  94. package/esm2022/component/expand-panel/expand-panel-head.directive.mjs +1 -1
  95. package/esm2022/component/expand-panel/public-api.mjs +1 -1
  96. package/esm2022/component/file-upload/file-item/file-item.component.mjs +1 -1
  97. package/esm2022/component/file-upload/file-upload-area/file-upload-area.component.mjs +3 -8
  98. package/esm2022/component/file-upload/public-api.mjs +1 -1
  99. package/esm2022/component/filter/base/filter-base.mjs +1 -1
  100. package/esm2022/component/filter/base/filter-component-base.mjs +1 -1
  101. package/esm2022/component/filter/boolean-filter/boolean-filter.component.mjs +5 -11
  102. package/esm2022/component/filter/contarct/boolean-filter.mjs +1 -1
  103. package/esm2022/component/filter/contarct/date-filter-value.mjs +3 -3
  104. package/esm2022/component/filter/contarct/date-filter.mjs +1 -1
  105. package/esm2022/component/filter/contarct/filter-component-map.mjs +2 -4
  106. package/esm2022/component/filter/contarct/filter-item.mjs +2 -2
  107. package/esm2022/component/filter/contarct/filter-state.mjs +1 -1
  108. package/esm2022/component/filter/contarct/list-filter.mjs +1 -1
  109. package/esm2022/component/filter/contarct/numeric-filter.mjs +1 -1
  110. package/esm2022/component/filter/contarct/sort-param.mjs +1 -1
  111. package/esm2022/component/filter/contarct/string-filter.mjs +1 -1
  112. package/esm2022/component/filter/date-filter/date-filter.component.mjs +3 -8
  113. package/esm2022/component/filter/enum/list-filter-type.enum.mjs +1 -1
  114. package/esm2022/component/filter/filter-host/filter-host.component.mjs +2 -3
  115. package/esm2022/component/filter/list-filter/list-filter.component.mjs +5 -14
  116. package/esm2022/component/filter/numeric-filter/numeric-filter.component.mjs +3 -8
  117. package/esm2022/component/filter/public-api.mjs +1 -1
  118. package/esm2022/component/filter/string-filter/string-filter.component.mjs +4 -9
  119. package/esm2022/component/icon/icon/icon.component.mjs +3 -3
  120. package/esm2022/component/icon/icon-file/icon-file.component.mjs +2 -3
  121. package/esm2022/component/icon/icon-sprite.directive.mjs +2 -2
  122. package/esm2022/component/icon/icon.service.mjs +5 -6
  123. package/esm2022/component/icon/public-api.mjs +1 -1
  124. package/esm2022/component/input/color-input/color-input.component.mjs +3 -3
  125. package/esm2022/component/input/form-group-title/form-group-title.component.mjs +2 -2
  126. package/esm2022/component/input/input/input.component.mjs +4 -4
  127. package/esm2022/component/input/public-api.mjs +1 -1
  128. package/esm2022/component/input/text-field/text-field.component.mjs +3 -9
  129. package/esm2022/component/message/message/message.component.mjs +3 -7
  130. package/esm2022/component/message/message-host/message-host.component.mjs +5 -9
  131. package/esm2022/component/message/message.service.mjs +2 -2
  132. package/esm2022/component/message/model/message.mjs +2 -2
  133. package/esm2022/component/message/public-api.mjs +1 -1
  134. package/esm2022/component/modal/dialog/dialog.component.mjs +3 -8
  135. package/esm2022/component/modal/dialog.service.mjs +1 -1
  136. package/esm2022/component/modal/modal-container/modal-container.component.mjs +4 -11
  137. package/esm2022/component/modal/modal.module.mjs +4 -12
  138. package/esm2022/component/modal/modal.service.mjs +1 -1
  139. package/esm2022/component/modal/model/current-modal.mjs +1 -1
  140. package/esm2022/component/modal/model/i-modal-result.mjs +1 -1
  141. package/esm2022/component/modal/model/modal-instance.mjs +1 -1
  142. package/esm2022/component/pager/model/pager-state.mjs +3 -2
  143. package/esm2022/component/pager/pager/pager.component.mjs +1 -1
  144. package/esm2022/component/pager/public-api.mjs +1 -1
  145. package/esm2022/component/pager/util/pager-util.mjs +1 -1
  146. package/esm2022/component/panel/panel/panel.component.mjs +4 -10
  147. package/esm2022/component/panel/public-api.mjs +1 -1
  148. package/esm2022/component/progress-bar/progress-bar/progress-bar.component.mjs +5 -6
  149. package/esm2022/component/progress-bar/public-api.mjs +1 -1
  150. package/esm2022/component/property-grid/property-grid/property-grid-group/property-grid-group.component.mjs +4 -4
  151. package/esm2022/component/property-grid/property-grid/property-grid-item/property-grid-item.component.mjs +7 -8
  152. package/esm2022/component/property-grid/property-grid/property-grid-item-description.directive.mjs +2 -2
  153. package/esm2022/component/property-grid/property-grid/property-grid.component.mjs +6 -11
  154. package/esm2022/component/property-grid/property-grid.module.mjs +1 -1
  155. package/esm2022/component/radio/public-api.mjs +1 -1
  156. package/esm2022/component/radio/radio/radio.component.mjs +7 -11
  157. package/esm2022/component/radio/radio-button/radio-button.component.mjs +3 -3
  158. package/esm2022/component/resize-panel/public-api.mjs +1 -1
  159. package/esm2022/component/resize-panel/resize-panel/resize-panel.component.mjs +5 -10
  160. package/esm2022/component/select/public-api.mjs +1 -1
  161. package/esm2022/component/select/select/select.component.mjs +10 -18
  162. package/esm2022/component/select/select-option.directive.mjs +2 -2
  163. package/esm2022/component/select/select-value.directive.mjs +2 -2
  164. package/esm2022/component/sidebar/public-api.mjs +1 -1
  165. package/esm2022/component/sidebar/sidebar/sidebar.component.mjs +6 -12
  166. package/esm2022/component/sidebar/sidebar-position.enum.mjs +1 -1
  167. package/esm2022/component/switch/public-api.mjs +1 -1
  168. package/esm2022/component/switch/switch/switch.component.mjs +4 -7
  169. package/esm2022/component/switch/switch-button/switch-button.component.mjs +2 -3
  170. package/esm2022/component/switch/switch.service.mjs +2 -2
  171. package/esm2022/component/table/base/cell-component-base.mjs +10 -22
  172. package/esm2022/component/table/base/detail-component-base.mjs +1 -1
  173. package/esm2022/component/table/base/head-cell-component-base.mjs +2 -2
  174. package/esm2022/component/table/cell/cell.component.mjs +4 -4
  175. package/esm2022/component/table/cell-host/cell-host.component.mjs +1 -1
  176. package/esm2022/component/table/contract/cell-components-map.mjs +2 -4
  177. package/esm2022/component/table/contract/column-reorder-event.mjs +1 -1
  178. package/esm2022/component/table/contract/sort-event.mjs +1 -1
  179. package/esm2022/component/table/contract/table-column.mjs +3 -3
  180. package/esm2022/component/table/default/boolean-cell/boolean-cell.component.mjs +4 -8
  181. package/esm2022/component/table/default/date-cell/date-cell.component.mjs +4 -9
  182. package/esm2022/component/table/default/date-time-cell/date-time-cell.component.mjs +4 -9
  183. package/esm2022/component/table/default/default-head-cell/default-head-cell.component.mjs +5 -6
  184. package/esm2022/component/table/default/list-cell/list-cell.component.mjs +7 -13
  185. package/esm2022/component/table/default/numeric-cell/numeric-cell.component.mjs +4 -9
  186. package/esm2022/component/table/default/string-cell/string-cell.component.mjs +4 -8
  187. package/esm2022/component/table/enum/edit-event.enum.mjs +1 -1
  188. package/esm2022/component/table/enum/edit-type.enum.mjs +1 -1
  189. package/esm2022/component/table/enum/select-type.enum.mjs +1 -1
  190. package/esm2022/component/table/head-cell-dropdown/head-cell-dropdown.component.mjs +4 -11
  191. package/esm2022/component/table/head-cell-host/head-cell-host.component.mjs +3 -4
  192. package/esm2022/component/table/public-api.mjs +1 -1
  193. package/esm2022/component/table/selection-cell/selection-cell.component.mjs +4 -6
  194. package/esm2022/component/table/selection-head-cell/selection-head-cell.component.mjs +5 -7
  195. package/esm2022/component/table/service/table.service.mjs +35 -52
  196. package/esm2022/component/table/table/table.component.mjs +12 -24
  197. package/esm2022/component/table/table-body/table-body.component.mjs +15 -21
  198. package/esm2022/component/table/table-head/filter-dropdown-tab/filter-dropdown-tab.component.mjs +5 -6
  199. package/esm2022/component/table/table-head/main-dropdown-tab/main-dropdown-tab.component.mjs +4 -5
  200. package/esm2022/component/table/table-head/table-head.component.mjs +10 -10
  201. package/esm2022/component/table/table-head/visibility-dropdown-tab/visibility-dropdown-tab.component.mjs +12 -12
  202. package/esm2022/component/table/table-head-group/table-head-group.component.mjs +7 -12
  203. package/esm2022/component/table/table-row/table-row.component.mjs +3 -3
  204. package/esm2022/component/table/util/state-util.mjs +13 -25
  205. package/esm2022/component/table/util/table-util.mjs +15 -9
  206. package/esm2022/component/tabs/public-api.mjs +1 -1
  207. package/esm2022/component/tabs/tab-content.directive.mjs +2 -2
  208. package/esm2022/component/tabs/tab-title.directive.mjs +2 -2
  209. package/esm2022/component/theme-switch/public-api.mjs +1 -1
  210. package/esm2022/component/toggle/public-api.mjs +1 -1
  211. package/esm2022/component/toggle/toggle/toggle.component.mjs +3 -3
  212. package/esm2022/component/toolbar/public-api.mjs +1 -1
  213. package/esm2022/component/toolbar/toolbar/toolbar.component.mjs +2 -2
  214. package/esm2022/component/tree/public-api.mjs +1 -1
  215. package/esm2022/component/tree/tree/tree.component.mjs +6 -6
  216. package/esm2022/component/tree/tree-item/tree-item.component.mjs +9 -20
  217. package/esm2022/component/tree/tree-item-toggle/tree-item-toggle.component.mjs +5 -6
  218. package/esm2022/component/tree/tree.service.mjs +1 -1
  219. package/esm2022/directive/auto-position/auto-position.directive.mjs +3 -3
  220. package/esm2022/directive/auto-position/public-api.mjs +1 -1
  221. package/esm2022/directive/click-outside/click-outside.directive.mjs +2 -2
  222. package/esm2022/directive/click-outside/public-api.mjs +1 -1
  223. package/esm2022/directive/context-menu/context-menu.directive.mjs +4 -8
  224. package/esm2022/directive/context-menu/public-api.mjs +1 -1
  225. package/esm2022/directive/disable-control/disable-control.directive.mjs +1 -1
  226. package/esm2022/directive/disable-control/public-api.mjs +1 -1
  227. package/esm2022/directive/drag-drop/drag-container.directive.mjs +8 -10
  228. package/esm2022/directive/drag-drop/drag-drop.service.mjs +14 -11
  229. package/esm2022/directive/drag-drop/drag-placeholder.directive.mjs +2 -2
  230. package/esm2022/directive/drag-drop/drag-preview.directive.mjs +2 -2
  231. package/esm2022/directive/drag-drop/drag.directive.mjs +4 -7
  232. package/esm2022/directive/drag-drop/model/drag-container-instance.mjs +1 -1
  233. package/esm2022/directive/drag-drop/model/drag-instance.mjs +1 -1
  234. package/esm2022/directive/drag-drop/model/drag-process.mjs +1 -1
  235. package/esm2022/directive/drag-drop/model/drag-selection.mjs +1 -1
  236. package/esm2022/directive/drag-drop/model/drop-event.mjs +1 -1
  237. package/esm2022/directive/drag-drop/model/drop-target.mjs +1 -1
  238. package/esm2022/directive/drag-sort/drag-sort-container.directive.mjs +2 -3
  239. package/esm2022/directive/drag-sort/drag-sort-item.directive.mjs +4 -10
  240. package/esm2022/directive/drag-sort/public-api.mjs +1 -1
  241. package/esm2022/directive/dynamic-content-base.directive.mjs +3 -3
  242. package/esm2022/directive/highlight/highlight.directive.mjs +4 -5
  243. package/esm2022/directive/highlight/public-api.mjs +1 -1
  244. package/esm2022/directive/hint/hint.directive.mjs +5 -14
  245. package/esm2022/directive/hint/public-api.mjs +1 -1
  246. package/esm2022/directive/let/let.directive.mjs +2 -2
  247. package/esm2022/directive/let/public-api.mjs +1 -1
  248. package/esm2022/directive/loader/loader.directive.mjs +3 -3
  249. package/esm2022/directive/loader/public-api.mjs +1 -1
  250. package/esm2022/directive/no-autofill/no-autofill.directive.mjs +1 -1
  251. package/esm2022/directive/no-autofill/public-api.mjs +1 -1
  252. package/esm2022/directive/only-number/public-api.mjs +1 -1
  253. package/esm2022/directive/resize-drag/public-api.mjs +1 -1
  254. package/esm2022/directive/resize-drag/resize-drag.directive.mjs +2 -2
  255. package/esm2022/directive/scroll-into-view/public-api.mjs +1 -1
  256. package/esm2022/directive/scroll-into-view/scroll-into-view.directive.mjs +3 -3
  257. package/esm2022/directive/scrollable/public-api.mjs +1 -1
  258. package/esm2022/directive/scrollable/scrollable/scrollable.component.mjs +6 -13
  259. package/esm2022/directive/scrollable/scrollable.directive.mjs +2 -2
  260. package/esm2022/directive/teta-template/public-api.mjs +1 -1
  261. package/esm2022/directive/teta-template/teta-template.directive.mjs +2 -2
  262. package/esm2022/directive/tooltip/public-api.mjs +1 -1
  263. package/esm2022/directive/tooltip/tooltip.directive.mjs +3 -4
  264. package/esm2022/index.mjs +1 -1
  265. package/esm2022/locale/en.mjs +2 -10
  266. package/esm2022/locale/ru.mjs +2 -10
  267. package/esm2022/locale/teta-config.service.mjs +2 -2
  268. package/esm2022/locale/teta-localisation.mjs +1 -1
  269. package/esm2022/observable/public-api.mjs +1 -1
  270. package/esm2022/observable/zone-observable.mjs +4 -4
  271. package/esm2022/pipe/date-pipe/teta-date.pipe.mjs +2 -2
  272. package/esm2022/pipe/number-pipe/number.pipe.mjs +2 -2
  273. package/esm2022/pipe/number-pipe/public-api.mjs +1 -1
  274. package/esm2022/pipe/util/number-helper.mjs +1 -1
  275. package/esm2022/util/bool-or-func.mjs +1 -1
  276. package/esm2022/util/date-util.mjs +2 -4
  277. package/esm2022/util/export-dom-image.mjs +1 -1
  278. package/esm2022/util/forms-util.mjs +6 -17
  279. package/esm2022/util/string-util.mjs +1 -3
  280. package/fesm2022/tetacom-ng-components.mjs +438 -801
  281. package/fesm2022/tetacom-ng-components.mjs.map +1 -1
  282. package/locale/teta-localisation.d.ts +1 -14
  283. package/package.json +1 -1
  284. package/style/assembly-library.scss +41 -41
  285. package/style/assembly-presets.scss +4 -4
  286. package/style/assembly.scss +3 -3
  287. package/style/border.scss +2 -2
  288. package/style/color.scss +2 -3
  289. package/style/datepicker.scss +9 -10
  290. package/style/divider.scss +2 -1
  291. package/style/drag.scss +1 -1
  292. package/style/dropdown.scss +4 -5
  293. package/style/font.scss +2 -2
  294. package/style/hint.scss +3 -3
  295. package/style/input.scss +14 -9
  296. package/style/layout.scss +8 -8
  297. package/style/list.scss +2 -2
  298. package/style/loader.scss +1 -1
  299. package/style/message.scss +3 -3
  300. package/style/navigation.scss +6 -6
  301. package/style/presets/color-presets.scss +2 -2
  302. package/style/presets/view-types.scss +1 -1
  303. package/style/progress.scss +3 -2
  304. package/style/radio.scss +2 -4
  305. package/style/reset.scss +3 -1
  306. package/style/resize-panel.scss +12 -6
  307. package/style/scroll.scss +1 -1
  308. package/style/select.scss +5 -4
  309. package/style/shadow.scss +3 -3
  310. package/style/sidebar.scss +2 -2
  311. package/style/sizing.scss +1 -1
  312. package/style/skeleton.scss +3 -4
  313. package/style/spacing.scss +1 -1
  314. package/style/switch.scss +2 -3
  315. package/style/tag.scss +8 -8
  316. package/style/toggle.scss +3 -6
  317. package/style/toolbar.scss +3 -3
  318. package/style/tooltip.scss +5 -4
  319. package/style/tree.scss +2 -2
  320. package/style/util/font-util.scss +1 -1
@@ -58,11 +58,11 @@ export class TableComponent {
58
58
  this.verticalAlign = VerticalAlign;
59
59
  this.align = Align;
60
60
  this._alive = true;
61
- this.onScroll = event => {
61
+ this.onScroll = (event) => {
62
62
  this._headElement.scrollLeft = event.target.scrollLeft;
63
63
  };
64
64
  this._svc.state
65
- .pipe(takeWhile(() => this._alive), filter(state => state !== this._state))
65
+ .pipe(takeWhile(() => this._alive), filter((state) => state !== this._state))
66
66
  .subscribe((state) => this.stateChange.next(state));
67
67
  this._svc.editCellStart
68
68
  .pipe(takeWhile(() => this._alive))
@@ -76,21 +76,15 @@ export class TableComponent {
76
76
  this._svc.editRowStop
77
77
  .pipe(takeWhile(() => this._alive))
78
78
  .subscribe((item) => this.rowEditEnd.emit(this._svc.getRowByIndex(item?.row)));
79
- this._svc.selectedRows
80
- .pipe(takeWhile(() => this._alive))
81
- .subscribe((items) => {
79
+ this._svc.selectedRows.pipe(takeWhile(() => this._alive)).subscribe((items) => {
82
80
  this.selectedRowsList = items;
83
81
  this.selectedRowsChange.emit(items);
84
82
  });
85
- this._svc.activeRow
86
- .pipe(takeWhile(() => this._alive))
87
- .subscribe((item) => {
83
+ this._svc.activeRow.pipe(takeWhile(() => this._alive)).subscribe((item) => {
88
84
  this.activeRow = item;
89
85
  this.activeRowChange.emit(item);
90
86
  });
91
- this._svc.valueChanged
92
- .pipe(takeWhile(() => this._alive))
93
- .subscribe((coordinates) => {
87
+ this._svc.valueChanged.pipe(takeWhile(() => this._alive)).subscribe((coordinates) => {
94
88
  this.valueChange.emit(this._svc.getCellInstance(coordinates));
95
89
  });
96
90
  }
@@ -207,8 +201,7 @@ export class TableComponent {
207
201
  });
208
202
  if (event.key && (event.key.length === 1 || event.key === 'Delete')) {
209
203
  const column = this._svc.getColumnByName(coordinates.column);
210
- if (column.filterType !== FilterType.number ||
211
- isFinite(event.key)) {
204
+ if (column.filterType !== FilterType.number || isFinite(event.key)) {
212
205
  this.startEditRowOrCell({
213
206
  row: coordinates.row,
214
207
  column: coordinates.column,
@@ -263,8 +256,7 @@ export class TableComponent {
263
256
  this.tableService.emit(this._svc);
264
257
  }
265
258
  ngAfterViewInit() {
266
- this._headElement =
267
- this._elementRef.nativeElement.querySelector('.table-head');
259
+ this._headElement = this._elementRef.nativeElement.querySelector('.table-head');
268
260
  }
269
261
  ngOnDestroy() {
270
262
  this._alive = false;
@@ -292,8 +284,8 @@ export class TableComponent {
292
284
  }
293
285
  if (Object.prototype.hasOwnProperty.call(changes, 'data')) {
294
286
  this._svc.setData(this.data);
295
- this._svc.selectRows(this.data?.filter(row => {
296
- return this.selectedRows?.some(selectedRow => this.trackRow(this._svc.getRowIndex(selectedRow), selectedRow) ===
287
+ this._svc.selectRows(this.data?.filter((row) => {
288
+ return this.selectedRows?.some((selectedRow) => this.trackRow(this._svc.getRowIndex(selectedRow), selectedRow) ===
297
289
  this.trackRow(this._svc.getRowIndex(row), row));
298
290
  }));
299
291
  }
@@ -371,15 +363,11 @@ export class TableComponent {
371
363
  return null;
372
364
  }
373
365
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: TableComponent, deps: [{ token: i1.TableService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
374
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.1", type: TableComponent, isStandalone: true, selector: "teta-table", inputs: { data: "data", columns: "columns", dict: "dict", filterOptions: "filterOptions", state: "state", cookieName: "cookieName", virtual: "virtual", detailComponent: "detailComponent", activeRow: "activeRow", selectedRows: "selectedRows", selectType: "selectType", aggregate: "aggregate", trackRow: "trackRow", trackColumns: "trackColumns", editType: "editType", editEvent: "editEvent", rowEditable: "rowEditable", rowClass: "rowClass", scrollToIndex: "scrollToIndex", showHeadCellMenu: "showHeadCellMenu", contextMenu: "contextMenu", contextMenuOpen: "contextMenuOpen" }, outputs: { contextMenuOpenChange: "contextMenuOpenChange", stateChange: "stateChange", bodyLeft: "bodyLeft", activeRowChange: "activeRowChange", selectedRowsChange: "selectedRowsChange", cellClick: "cellClick", cellDoubleClick: "cellDoubleClick", cellFocus: "cellFocus", cellKeyDown: "cellKeyDown", rowLeft: "rowLeft", rowEditStart: "rowEditStart", rowEditEnd: "rowEditEnd", cellEditStart: "cellEditStart", cellEditEnd: "cellEditEnd", valueChange: "valueChange", tableService: "tableService" }, host: { listeners: { "document:click": "handleClickOutsideAnyRow($event)", "focusin": "focusIn($event)", "dblclick": "dblclick($event)", "keydown": "keydown($event)", "mousedown": "mousedown($event)" }, properties: { "class.table": "this.tableClass" } }, providers: [TableService], viewQueries: [{ propertyName: "menu", first: true, predicate: ["contextMenu"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div class='column column_auto'>\n <teta-table-head\n style='z-index: 1'\n [selectType]='selectType'\n [showHeadCellMenu]='showHeadCellMenu'></teta-table-head>\n <div class='column column_auto position-relative'\n style='z-index: 0'\n [tetaContextMenu]='contextMenu'\n [verticalAlign]='verticalAlign.auto'\n [align]='align.auto'\n [appendToBody]='true'\n [data]='contextMenuRow'\n [open]='contextMenuOpen'\n (openChange)='setContextMenuOpen($event)'>\n <teta-table-body\n (contextmenu)='setContextMenuRow($event)'\n (scrollChange)='onScroll($event)'\n [aggregate]='aggregate'\n [virtual]='virtual'\n [activeRow]='activeRow'\n [trackRow]='trackRow'\n [trackColumns]='trackColumns'\n [selectedRows]='selectedRowsList'\n [additionalComponent]='detailComponent'\n [selectType]='selectType'\n [rowClass]='rowClass'>\n <ng-content></ng-content>\n </teta-table-body>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: TableHeadComponent, selector: "teta-table-head", inputs: ["selectType", "showHeadCellMenu"] }, { kind: "directive", type: ContextMenuDirective, selector: "[tetaContextMenu]", inputs: ["tetaContextMenu", "autoCloseIgnore"] }, { kind: "component", type: TableBodyComponent, selector: "teta-table-body", inputs: ["virtual", "activeRow", "selectedRows", "additionalComponent", "aggregate", "selectType", "rowClass", "trackRow", "trackColumns"], outputs: ["scrollChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
366
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.1", type: TableComponent, isStandalone: true, selector: "teta-table", inputs: { data: "data", columns: "columns", dict: "dict", filterOptions: "filterOptions", state: "state", cookieName: "cookieName", virtual: "virtual", detailComponent: "detailComponent", activeRow: "activeRow", selectedRows: "selectedRows", selectType: "selectType", aggregate: "aggregate", trackRow: "trackRow", trackColumns: "trackColumns", editType: "editType", editEvent: "editEvent", rowEditable: "rowEditable", rowClass: "rowClass", scrollToIndex: "scrollToIndex", showHeadCellMenu: "showHeadCellMenu", contextMenu: "contextMenu", contextMenuOpen: "contextMenuOpen" }, outputs: { contextMenuOpenChange: "contextMenuOpenChange", stateChange: "stateChange", bodyLeft: "bodyLeft", activeRowChange: "activeRowChange", selectedRowsChange: "selectedRowsChange", cellClick: "cellClick", cellDoubleClick: "cellDoubleClick", cellFocus: "cellFocus", cellKeyDown: "cellKeyDown", rowLeft: "rowLeft", rowEditStart: "rowEditStart", rowEditEnd: "rowEditEnd", cellEditStart: "cellEditStart", cellEditEnd: "cellEditEnd", valueChange: "valueChange", tableService: "tableService" }, host: { listeners: { "document:click": "handleClickOutsideAnyRow($event)", "focusin": "focusIn($event)", "dblclick": "dblclick($event)", "keydown": "keydown($event)", "mousedown": "mousedown($event)" }, properties: { "class.table": "this.tableClass" } }, providers: [TableService], viewQueries: [{ propertyName: "menu", first: true, predicate: ["contextMenu"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"column column_auto\">\n <teta-table-head style=\"z-index: 1\" [selectType]=\"selectType\" [showHeadCellMenu]=\"showHeadCellMenu\"></teta-table-head>\n <div\n class=\"column column_auto position-relative\"\n style=\"z-index: 0\"\n [tetaContextMenu]=\"contextMenu\"\n [verticalAlign]=\"verticalAlign.auto\"\n [align]=\"align.auto\"\n [appendToBody]=\"true\"\n [data]=\"contextMenuRow\"\n [open]=\"contextMenuOpen\"\n (openChange)=\"setContextMenuOpen($event)\"\n >\n <teta-table-body\n (contextmenu)=\"setContextMenuRow($event)\"\n (scrollChange)=\"onScroll($event)\"\n [aggregate]=\"aggregate\"\n [virtual]=\"virtual\"\n [activeRow]=\"activeRow\"\n [trackRow]=\"trackRow\"\n [trackColumns]=\"trackColumns\"\n [selectedRows]=\"selectedRowsList\"\n [additionalComponent]=\"detailComponent\"\n [selectType]=\"selectType\"\n [rowClass]=\"rowClass\"\n >\n <ng-content></ng-content>\n </teta-table-body>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: TableHeadComponent, selector: "teta-table-head", inputs: ["selectType", "showHeadCellMenu"] }, { kind: "directive", type: ContextMenuDirective, selector: "[tetaContextMenu]", inputs: ["tetaContextMenu", "autoCloseIgnore"] }, { kind: "component", type: TableBodyComponent, selector: "teta-table-body", inputs: ["virtual", "activeRow", "selectedRows", "additionalComponent", "aggregate", "selectType", "rowClass", "trackRow", "trackColumns"], outputs: ["scrollChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
375
367
  }
376
368
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: TableComponent, decorators: [{
377
369
  type: Component,
378
- args: [{ selector: 'teta-table', changeDetection: ChangeDetectionStrategy.OnPush, providers: [TableService], standalone: true, imports: [
379
- TableHeadComponent,
380
- ContextMenuDirective,
381
- TableBodyComponent,
382
- ], template: "<div class='column column_auto'>\n <teta-table-head\n style='z-index: 1'\n [selectType]='selectType'\n [showHeadCellMenu]='showHeadCellMenu'></teta-table-head>\n <div class='column column_auto position-relative'\n style='z-index: 0'\n [tetaContextMenu]='contextMenu'\n [verticalAlign]='verticalAlign.auto'\n [align]='align.auto'\n [appendToBody]='true'\n [data]='contextMenuRow'\n [open]='contextMenuOpen'\n (openChange)='setContextMenuOpen($event)'>\n <teta-table-body\n (contextmenu)='setContextMenuRow($event)'\n (scrollChange)='onScroll($event)'\n [aggregate]='aggregate'\n [virtual]='virtual'\n [activeRow]='activeRow'\n [trackRow]='trackRow'\n [trackColumns]='trackColumns'\n [selectedRows]='selectedRowsList'\n [additionalComponent]='detailComponent'\n [selectType]='selectType'\n [rowClass]='rowClass'>\n <ng-content></ng-content>\n </teta-table-body>\n </div>\n</div>\n" }]
370
+ args: [{ selector: 'teta-table', changeDetection: ChangeDetectionStrategy.OnPush, providers: [TableService], standalone: true, imports: [TableHeadComponent, ContextMenuDirective, TableBodyComponent], template: "<div class=\"column column_auto\">\n <teta-table-head style=\"z-index: 1\" [selectType]=\"selectType\" [showHeadCellMenu]=\"showHeadCellMenu\"></teta-table-head>\n <div\n class=\"column column_auto position-relative\"\n style=\"z-index: 0\"\n [tetaContextMenu]=\"contextMenu\"\n [verticalAlign]=\"verticalAlign.auto\"\n [align]=\"align.auto\"\n [appendToBody]=\"true\"\n [data]=\"contextMenuRow\"\n [open]=\"contextMenuOpen\"\n (openChange)=\"setContextMenuOpen($event)\"\n >\n <teta-table-body\n (contextmenu)=\"setContextMenuRow($event)\"\n (scrollChange)=\"onScroll($event)\"\n [aggregate]=\"aggregate\"\n [virtual]=\"virtual\"\n [activeRow]=\"activeRow\"\n [trackRow]=\"trackRow\"\n [trackColumns]=\"trackColumns\"\n [selectedRows]=\"selectedRowsList\"\n [additionalComponent]=\"detailComponent\"\n [selectType]=\"selectType\"\n [rowClass]=\"rowClass\"\n >\n <ng-content></ng-content>\n </teta-table-body>\n </div>\n</div>\n" }]
383
371
  }], ctorParameters: () => [{ type: i1.TableService }, { type: i0.ElementRef }], propDecorators: { data: [{
384
372
  type: Input
385
373
  }], columns: [{
@@ -478,4 +466,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImpor
478
466
  type: HostListener,
479
467
  args: ['mousedown', ['$event']]
480
468
  }] } });
481
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudC90YWJsZS90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L3RhYmxlL3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxFQUVOLFdBQVcsRUFDWCxJQUFJLEVBQ0osU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJbkQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDakUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBT2hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUM5RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7O0FBZXhF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LENBQUM7Z0JBMkNMLE9BQU87c0JBQTNDLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQWNuQyxRQUFRO3NCQURQLFlBQVk7dUJBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQWlCcEMsT0FBTztzQkFETixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkEyRkksU0FBUztzQkFBL0MsWUFBWTt1QkFBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBUeXBlLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZmlsdGVyLCB0YWtlV2hpbGUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IElEaWN0aW9uYXJ5IH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL2NvbnRyYWN0L2ktZGljdGlvbmFyeSc7XG5pbXBvcnQgeyBJSWROYW1lIH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL2NvbnRyYWN0L2ktaWQtbmFtZSc7XG5pbXBvcnQgeyBBbGlnbiB9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9lbnVtL2FsaWduLmVudW0nO1xuaW1wb3J0IHsgVmVydGljYWxBbGlnbiB9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9lbnVtL3ZlcnRpY2FsLWFsaWduLmVudW0nO1xuaW1wb3J0IHsgRmlsdGVyU3RhdGUgfSBmcm9tICcuLi8uLi9maWx0ZXIvY29udGFyY3QvZmlsdGVyLXN0YXRlJztcbmltcG9ydCB7IEZpbHRlclR5cGUgfSBmcm9tICcuLi8uLi9maWx0ZXIvZW51bS9maWx0ZXItdHlwZS5lbnVtJztcbmltcG9ydCB7IERldGFpbENvbXBvbmVudEJhc2UgfSBmcm9tICcuLi9iYXNlL2RldGFpbC1jb21wb25lbnQtYmFzZSc7XG5pbXBvcnQgeyBJQ2VsbENvb3JkaW5hdGVzIH0gZnJvbSAnLi4vY29udHJhY3QvaS1jZWxsLWNvb3JkaW5hdGVzJztcbmltcG9ydCB7IElDZWxsRXZlbnQgfSBmcm9tICcuLi9jb250cmFjdC9pLWNlbGwtZXZlbnQnO1xuaW1wb3J0IHsgSUNlbGxJbnN0YW5jZSwgSUNlbGxJbnN0YW5jZUV2ZW50IH0gZnJvbSAnLi4vY29udHJhY3QvaS1jZWxsLWluc3RhbmNlJztcbmltcG9ydCB7IFRhYmxlQ29sdW1uIH0gZnJvbSAnLi4vY29udHJhY3QvdGFibGUtY29sdW1uJztcbmltcG9ydCB7IFRhYmxlUm93IH0gZnJvbSAnLi4vY29udHJhY3QvdGFibGUtcm93JztcbmltcG9ydCB7IEVkaXRFdmVudCB9IGZyb20gJy4uL2VudW0vZWRpdC1ldmVudC5lbnVtJztcbmltcG9ydCB7IEVkaXRUeXBlIH0gZnJvbSAnLi4vZW51bS9lZGl0LXR5cGUuZW51bSc7XG5pbXBvcnQgeyBTZWxlY3RUeXBlIH0gZnJvbSAnLi4vZW51bS9zZWxlY3QtdHlwZS5lbnVtJztcbmltcG9ydCB7IFRhYmxlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2UvdGFibGUuc2VydmljZSc7XG5pbXBvcnQgeyBUYWJsZUJvZHlDb21wb25lbnQgfSBmcm9tICcuLi90YWJsZS1ib2R5L3RhYmxlLWJvZHkuY29tcG9uZW50JztcbmltcG9ydCB7IENvbnRleHRNZW51RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2NvbnRleHQtbWVudS9jb250ZXh0LW1lbnUuZGlyZWN0aXZlJztcbmltcG9ydCB7IFRhYmxlSGVhZENvbXBvbmVudCB9IGZyb20gJy4uL3RhYmxlLWhlYWQvdGFibGUtaGVhZC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3RldGEtdGFibGUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcm92aWRlcnM6IFtUYWJsZVNlcnZpY2VdLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBUYWJsZUhlYWRDb21wb25lbnQsXG4gICAgICAgIENvbnRleHRNZW51RGlyZWN0aXZlLFxuICAgICAgICBUYWJsZUJvZHlDb21wb25lbnQsXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVDb21wb25lbnQ8VD5cbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzXG57XG4gIEBJbnB1dCgpIGRhdGE6IFRbXSA9IFtdO1xuICBASW5wdXQoKSBjb2x1bW5zOiBUYWJsZUNvbHVtbltdID0gW107XG4gIEBJbnB1dCgpIGRpY3Q6IElEaWN0aW9uYXJ5PElJZE5hbWU8YW55PltdPjtcbiAgQElucHV0KCkgZmlsdGVyT3B0aW9uczogSURpY3Rpb25hcnk8SUlkTmFtZTxhbnk+W10+O1xuXG4gIEBJbnB1dCgpXG4gIHNldCBzdGF0ZShzdGF0ZTogRmlsdGVyU3RhdGUpIHtcbiAgICB0aGlzLl9zdGF0ZSA9IHN0YXRlO1xuICB9XG5cbiAgQElucHV0KCkgY29va2llTmFtZTogc3RyaW5nO1xuICBASW5wdXQoKSB2aXJ0dWFsOiBib29sZWFuO1xuICBASW5wdXQoKSBkZXRhaWxDb21wb25lbnQ6IFR5cGU8RGV0YWlsQ29tcG9uZW50QmFzZTxUPj47XG4gIEBJbnB1dCgpIGFjdGl2ZVJvdzogVDtcbiAgQElucHV0KCkgc2VsZWN0ZWRSb3dzOiBUW107XG4gIEBJbnB1dCgpIHNlbGVjdFR5cGU6IFNlbGVjdFR5cGUgPSBTZWxlY3RUeXBlLm1vdXNlO1xuICBASW5wdXQoKSBhZ2dyZWdhdGU6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHRyYWNrUm93OiAoaW5kZXg6IG51bWJlciwgcm93OiBUKSA9PiBhbnkgPSAoXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICByb3c6IFRcbiAgKSA9PiB7XG4gICAgaWYgKHJvd1snaWQnXSkge1xuICAgICAgcmV0dXJuIHJvd1snaWQnXTtcbiAgICB9XG4gICAgcmV0dXJuIGluZGV4O1xuICB9O1xuICBASW5wdXQoKSB0cmFja0NvbHVtbnM6IChpbmRleDogbnVtYmVyLCBjb2x1bW46IFRhYmxlQ29sdW1uKSA9PiBhbnkgPSAoXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBjb2x1bW46IFRhYmxlQ29sdW1uXG4gICkgPT4ge1xuICAgIHJldHVybiBjb2x1bW4ubmFtZTtcbiAgfTtcbiAgQElucHV0KCkgZWRpdFR5cGU6IEVkaXRUeXBlID0gRWRpdFR5cGUuY2VsbDtcbiAgQElucHV0KCkgZWRpdEV2ZW50OiBFZGl0RXZlbnQgPSBFZGl0RXZlbnQuZG91YmxlQ2xpY2s7XG4gIEBJbnB1dCgpIHJvd0VkaXRhYmxlOiBib29sZWFuIHwgKChyb3c6IFQpID0+IGJvb2xlYW4pO1xuICBASW5wdXQoKSByb3dDbGFzczogKHJvdzogVCwgaW5kZXg/OiBudW1iZXIpID0+IHN0cmluZztcblxuICBASW5wdXQoKSBzZXQgc2Nyb2xsVG9JbmRleChpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5fc3ZjLnNjcm9sbFRvSW5kZXgoaW5kZXgpO1xuICB9XG5cbiAgQElucHV0KCkgc2hvd0hlYWRDZWxsTWVudSA9IHRydWU7XG4gIEBJbnB1dCgpIGNvbnRleHRNZW51OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBASW5wdXQoKSBjb250ZXh0TWVudU9wZW46IGJvb2xlYW47XG4gIEBPdXRwdXQoKSBjb250ZXh0TWVudU9wZW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgQE91dHB1dCgpXG4gIHN0YXRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RmlsdGVyU3RhdGU+ID0gbmV3IEV2ZW50RW1pdHRlcjxGaWx0ZXJTdGF0ZT4oKTtcbiAgQE91dHB1dCgpIGJvZHlMZWZ0ID0gbmV3IEV2ZW50RW1pdHRlcjxUPigpO1xuICBAT3V0cHV0KCkgYWN0aXZlUm93Q2hhbmdlOiBFdmVudEVtaXR0ZXI8VD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBzZWxlY3RlZFJvd3NDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUW10+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgY2VsbENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2VsbEluc3RhbmNlRXZlbnQ8VD4+KCk7XG4gIEBPdXRwdXQoKSBjZWxsRG91YmxlQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPElDZWxsSW5zdGFuY2VFdmVudDxUPj4oKTtcbiAgQE91dHB1dCgpIGNlbGxGb2N1cyA9IG5ldyBFdmVudEVtaXR0ZXI8SUNlbGxJbnN0YW5jZUV2ZW50PFQ+PigpO1xuICBAT3V0cHV0KCkgY2VsbEtleURvd24gPSBuZXcgRXZlbnRFbWl0dGVyPElDZWxsSW5zdGFuY2VFdmVudDxUPj4oKTtcbiAgQE91dHB1dCgpIHJvd0xlZnQgPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XG4gIEBPdXRwdXQoKSByb3dFZGl0U3RhcnQgPSBuZXcgRXZlbnRFbWl0dGVyPElDZWxsSW5zdGFuY2U8VD4+KCk7XG4gIEBPdXRwdXQoKSByb3dFZGl0RW5kID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZVJvdzxUPj4oKTtcbiAgQE91dHB1dCgpIGNlbGxFZGl0U3RhcnQgPSBuZXcgRXZlbnRFbWl0dGVyPElDZWxsSW5zdGFuY2U8VD4+KCk7XG4gIEBPdXRwdXQoKSBjZWxsRWRpdEVuZCA9IG5ldyBFdmVudEVtaXR0ZXI8SUNlbGxJbnN0YW5jZTxUPj4oKTtcbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2VsbEluc3RhbmNlPFQ+PigpO1xuICBAT3V0cHV0KCkgdGFibGVTZXJ2aWNlID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZVNlcnZpY2U8VD4+KCk7XG4gIEBWaWV3Q2hpbGQoJ2NvbnRleHRNZW51JywgeyBzdGF0aWM6IHRydWUgfSkgbWVudTogRWxlbWVudFJlZjtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy50YWJsZScpIHByaXZhdGUgcmVhZG9ubHkgdGFibGVDbGFzcyA9IHRydWU7XG5cbiAgc2VsZWN0ZWRSb3dzTGlzdDogVFtdO1xuICBjb250ZXh0TWVudVJvdzogVDtcbiAgdmVydGljYWxBbGlnbiA9IFZlcnRpY2FsQWxpZ247XG4gIGFsaWduID0gQWxpZ247XG4gIHByaXZhdGUgX2FsaXZlID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfaGVhZEVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuICBwcml2YXRlIF9zdGF0ZTogRmlsdGVyU3RhdGU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfc3ZjOiBUYWJsZVNlcnZpY2U8VD4sXG4gICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZlxuICApIHtcbiAgICB0aGlzLl9zdmMuc3RhdGVcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlV2hpbGUoKCkgPT4gdGhpcy5fYWxpdmUpLFxuICAgICAgICBmaWx0ZXIoc3RhdGUgPT4gc3RhdGUgIT09IHRoaXMuX3N0YXRlKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoc3RhdGU6IEZpbHRlclN0YXRlKSA9PiB0aGlzLnN0YXRlQ2hhbmdlLm5leHQoc3RhdGUpKTtcblxuICAgIHRoaXMuX3N2Yy5lZGl0Q2VsbFN0YXJ0XG4gICAgICAucGlwZSh0YWtlV2hpbGUoKCkgPT4gdGhpcy5fYWxpdmUpKVxuICAgICAgLnN1YnNjcmliZSgoaXRlbTogSUNlbGxFdmVudCkgPT5cbiAgICAgICAgdGhpcy5jZWxsRWRpdFN0YXJ0LmVtaXQodGhpcy5fc3ZjLmdldENlbGxJbnN0YW5jZShpdGVtKSlcbiAgICAgICk7XG5cbiAgICB0aGlzLl9zdmMuZWRpdENlbGxTdG9wXG4gICAgICAucGlwZSh0YWtlV2hpbGUoKCkgPT4gdGhpcy5fYWxpdmUpKVxuICAgICAgLnN1YnNjcmliZSgoaXRlbTogSUNlbGxDb29yZGluYXRlcykgPT5cbiAgICAgICAgdGhpcy5jZWxsRWRpdEVuZC5lbWl0KHRoaXMuX3N2Yy5nZXRDZWxsSW5zdGFuY2UoaXRlbSkpXG4gICAgICApO1xuXG4gICAgdGhpcy5fc3ZjLmVkaXRSb3dTdGFydFxuICAgICAgLnBpcGUodGFrZVdoaWxlKCgpID0+IHRoaXMuX2FsaXZlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGl0ZW06IElDZWxsRXZlbnQpID0+XG4gICAgICAgIHRoaXMucm93RWRpdFN0YXJ0LmVtaXQodGhpcy5fc3ZjLmdldENlbGxJbnN0YW5jZShpdGVtKSlcbiAgICAgICk7XG5cbiAgICB0aGlzLl9zdmMuZWRpdFJvd1N0b3BcbiAgICAgIC5waXBlKHRha2VXaGlsZSgoKSA9PiB0aGlzLl9hbGl2ZSkpXG4gICAgICAuc3Vic2NyaWJlKChpdGVtOiBJQ2VsbENvb3JkaW5hdGVzKSA9PlxuICAgICAgICB0aGlzLnJvd0VkaXRFbmQuZW1pdCh0aGlzLl9zdmMuZ2V0Um93QnlJbmRleChpdGVtPy5yb3cpKVxuICAgICAgKTtcblxuICAgIHRoaXMuX3N2Yy5zZWxlY3RlZFJvd3NcbiAgICAgIC5waXBlKHRha2VXaGlsZSgoKSA9PiB0aGlzLl9hbGl2ZSkpXG4gICAgICAuc3Vic2NyaWJlKChpdGVtczogVFtdKSA9PiB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzTGlzdCA9IGl0ZW1zO1xuICAgICAgICB0aGlzLnNlbGVjdGVkUm93c0NoYW5nZS5lbWl0KGl0ZW1zKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5fc3ZjLmFjdGl2ZVJvd1xuICAgICAgLnBpcGUodGFrZVdoaWxlKCgpID0+IHRoaXMuX2FsaXZlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGl0ZW06IFQpID0+IHtcbiAgICAgICAgdGhpcy5hY3RpdmVSb3cgPSBpdGVtO1xuICAgICAgICB0aGlzLmFjdGl2ZVJvd0NoYW5nZS5lbWl0KGl0ZW0pO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLl9zdmMudmFsdWVDaGFuZ2VkXG4gICAgICAucGlwZSh0YWtlV2hpbGUoKCkgPT4gdGhpcy5fYWxpdmUpKVxuICAgICAgLnN1YnNjcmliZSgoY29vcmRpbmF0ZXM6IElDZWxsQ29vcmRpbmF0ZXMpID0+IHtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMuX3N2Yy5nZXRDZWxsSW5zdGFuY2UoY29vcmRpbmF0ZXMpKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKSBoYW5kbGVDbGlja091dHNpZGVBbnlSb3coXG4gICAgZXZlbnQ6IE1vdXNlRXZlbnRcbiAgKSB7XG4gICAgY29uc3QgY29vcmRpbmF0ZXMgPSB0aGlzLmdldENvb3JkaW5hdGVzKGV2ZW50KTtcbiAgICBjb25zdCByb3cgPSB0aGlzLmdldFJvdyhldmVudCk7XG4gICAgY29uc3QgZXZlbnRJc09uUm93ID0gdGhpcy5ldmVudElzT25Sb3coZXZlbnQpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKGNvb3JkaW5hdGVzKSB7XG4gICAgICAgIHRoaXMuY2VsbENsaWNrLmVtaXQoe1xuICAgICAgICAgIC4uLnRoaXMuX3N2Yy5nZXRDZWxsSW5zdGFuY2UoY29vcmRpbmF0ZXMpLFxuICAgICAgICAgIGV2ZW50LFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMuZWRpdEV2ZW50ID09PSBFZGl0RXZlbnQuY2xpY2spIHtcbiAgICAgICAgICB0aGlzLnN0YXJ0RWRpdFJvd09yQ2VsbChjb29yZGluYXRlcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5fc3ZjLmN1cnJlbnRFZGl0Q2VsbCAmJlxuICAgICAgICAgICAgKGNvb3JkaW5hdGVzLnJvdyAhPT0gdGhpcy5fc3ZjLmN1cnJlbnRFZGl0Q2VsbC5yb3cgfHxcbiAgICAgICAgICAgICAgY29vcmRpbmF0ZXMuY29sdW1uICE9PSB0aGlzLl9zdmMuY3VycmVudEVkaXRDZWxsLmNvbHVtbilcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRFZGl0Um93T3JDZWxsKG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHJvdykge1xuICAgICAgICBpZiAoZXZlbnQuY3RybEtleSkge1xuICAgICAgICAgIHRoaXMuX3N2Yy5zZWxlY3RPckRlc2VsZWN0Um93KHJvdy5kYXRhKTtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgIHRoaXMuX3N2Yy5zZWxlY3RSYW5nZShyb3cuZGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fc3ZjLnNlbGVjdFJvd3MoW3Jvdy5kYXRhXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghZXZlbnRJc09uUm93ICYmICFldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgIGlmICh0aGlzLmVkaXRUeXBlID09PSBFZGl0VHlwZS5yb3cpIHtcbiAgICAgICAgICB0aGlzLl9zdmMuc3RhcnRFZGl0Um93KG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX3N2Yy5zdGFydEVkaXRDZWxsKG51bGwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdmb2N1c2luJywgWyckZXZlbnQnXSkgZm9jdXNJbihldmVudDogRm9jdXNFdmVudCkge1xuICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gdGhpcy5nZXRDb29yZGluYXRlcyhldmVudCk7XG4gICAgaWYgKGNvb3JkaW5hdGVzKSB7XG4gICAgICB0aGlzLmNlbGxGb2N1cy5lbWl0KHtcbiAgICAgICAgLi4udGhpcy5fc3ZjLmdldENlbGxJbnN0YW5jZShjb29yZGluYXRlcyksXG4gICAgICAgIGV2ZW50LFxuICAgICAgfSk7XG4gICAgICBpZiAodGhpcy5lZGl0RXZlbnQgPT09IEVkaXRFdmVudC5mb2N1cykge1xuICAgICAgICB0aGlzLnN0YXJ0RWRpdFJvd09yQ2VsbChjb29yZGluYXRlcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZGJsY2xpY2snLCBbJyRldmVudCddKVxuICBkYmxjbGljayhldmVudDogTW91c2VFdmVudCkge1xuICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gdGhpcy5nZXRDb29yZGluYXRlcyhldmVudCk7XG4gICAgaWYgKGNvb3JkaW5hdGVzKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5jZWxsRG91YmxlQ2xpY2suZW1pdCh7XG4gICAgICAgICAgLi4udGhpcy5fc3ZjLmdldENlbGxJbnN0YW5jZShjb29yZGluYXRlcyksXG4gICAgICAgICAgZXZlbnQsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGhpcy5lZGl0RXZlbnQgPT09IEVkaXRFdmVudC5kb3VibGVDbGljaykge1xuICAgICAgICAgIHRoaXMuc3RhcnRFZGl0Um93T3JDZWxsKGNvb3JkaW5hdGVzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gIGtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQuY3RybEtleSkge1xuICAgICAgaWYgKGV2ZW50LmNvZGUgPT09ICdLZXlBJykge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLl9zdmMuc2VsZWN0QWxsKCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChldmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICB0aGlzLl9zdmMuZGVzZWxlY3RBbGwoKTtcbiAgICAgIGlmICh0aGlzLmVkaXRUeXBlID09PSBFZGl0VHlwZS5yb3cpIHtcbiAgICAgICAgdGhpcy5fc3ZjLnN0YXJ0RWRpdFJvdyhudWxsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3N2Yy5zdGFydEVkaXRDZWxsKG51bGwpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBjb29yZGluYXRlcyA9IHRoaXMuZ2V0Q29vcmRpbmF0ZXMoZXZlbnQpO1xuICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgIGlmICh0aGlzLmVkaXRUeXBlID09PSBFZGl0VHlwZS5yb3cpIHtcbiAgICAgICAgdGhpcy5fc3ZjLnN0YXJ0RWRpdFJvdyhudWxsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLl9zdmMuY3VycmVudEVkaXRDZWxsKSB7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5fc3ZjLmdldE5leHRSb3dDZWxsKGNvb3JkaW5hdGVzKTtcbiAgICAgICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0RWRpdFJvd09yQ2VsbCh7XG4gICAgICAgICAgICAgIHJvdzogdGFyZ2V0LnJvdyxcbiAgICAgICAgICAgICAgY29sdW1uOiB0YXJnZXQuY29sdW1uLFxuICAgICAgICAgICAgICBldmVudDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3N2Yy5zdGFydEVkaXRDZWxsKG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY29vcmRpbmF0ZXMpIHtcbiAgICAgIHRoaXMuY2VsbEtleURvd24uZW1pdCh7XG4gICAgICAgIC4uLnRoaXMuX3N2Yy5nZXRDZWxsSW5zdGFuY2UoY29vcmRpbmF0ZXMpLFxuICAgICAgICBldmVudCxcbiAgICAgIH0pO1xuICAgICAgaWYgKGV2ZW50LmtleSAmJiAoZXZlbnQua2V5Lmxlbmd0aCA9PT0gMSB8fCBldmVudC5rZXkgPT09ICdEZWxldGUnKSkge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLl9zdmMuZ2V0Q29sdW1uQnlOYW1lKGNvb3JkaW5hdGVzLmNvbHVtbik7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjb2x1bW4uZmlsdGVyVHlwZSAhPT0gRmlsdGVyVHlwZS5udW1iZXIgfHxcbiAgICAgICAgICBpc0Zpbml0ZShldmVudC5rZXkgYXMgYW55KVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnN0YXJ0RWRpdFJvd09yQ2VsbCh7XG4gICAgICAgICAgICByb3c6IGNvb3JkaW5hdGVzLnJvdyxcbiAgICAgICAgICAgIGNvbHVtbjogY29vcmRpbmF0ZXMuY29sdW1uLFxuICAgICAgICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnVGFiJyAmJiB0aGlzLl9zdmMuY3VycmVudEVkaXRDZWxsKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGxldCB0YXJnZXQgPSB0aGlzLl9zdmMuZ2V0TmV4dEVkaXRhYmxlQ2VsbChjb29yZGluYXRlcyk7XG4gICAgICAgIGlmIChldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgIHRhcmdldCA9IHRoaXMuX3N2Yy5nZXRQcmV2aW91c0VkaXRhYmxlQ2VsbChjb29yZGluYXRlcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgIHRoaXMuc3RhcnRFZGl0Um93T3JDZWxsKHtcbiAgICAgICAgICAgIHJvdzogdGFyZ2V0LnJvdyxcbiAgICAgICAgICAgIGNvbHVtbjogdGFyZ2V0LmNvbHVtbixcbiAgICAgICAgICAgIGV2ZW50OiB1bmRlZmluZWQsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5fc3ZjLmN1cnJlbnRFZGl0Q2VsbCkge1xuICAgICAgICBsZXQgdGFyZ2V0O1xuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcpIHtcbiAgICAgICAgICB0YXJnZXQgPSB0aGlzLl9zdmMuZ2V0TmV4dENlbGwoY29vcmRpbmF0ZXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnKSB7XG4gICAgICAgICAgdGFyZ2V0ID0gdGhpcy5fc3ZjLmdldFByZXZpb3VzQ2VsbChjb29yZGluYXRlcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICAgICAgdGFyZ2V0ID0gdGhpcy5fc3ZjLmdldFByZXZpb3VzUm93Q2VsbChjb29yZGluYXRlcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgICAgICB0YXJnZXQgPSB0aGlzLl9zdmMuZ2V0TmV4dFJvd0NlbGwoY29vcmRpbmF0ZXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmdldENlbGxFbGVtZW50KHRhcmdldCk7XG4gICAgICAgICAgZWxlbWVudD8uZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlZG93bicsIFsnJGV2ZW50J10pIG1vdXNlZG93bihldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmIChldmVudC5idXR0b24gPT09IDIpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fc3ZjLnJlc3RvcmVTdGF0ZSgpO1xuICAgIHRoaXMuX3N2Yy5yZXN0b3JlSGlkZGVuQ29sdW1ucygpO1xuICAgIHRoaXMudGFibGVTZXJ2aWNlLmVtaXQodGhpcy5fc3ZjKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9oZWFkRWxlbWVudCA9XG4gICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLnRhYmxlLWhlYWQnKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2FsaXZlID0gZmFsc2U7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGFuZ2VzLCAnZWRpdFR5cGUnKSkge1xuICAgICAgdGhpcy5fc3ZjLmVkaXRUeXBlID0gdGhpcy5lZGl0VHlwZTtcbiAgICB9XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGFuZ2VzLCAnc2VsZWN0VHlwZScpKSB7XG4gICAgICB0aGlzLl9zdmMuc2VsZWN0VHlwZSA9IHRoaXMuc2VsZWN0VHlwZTtcbiAgICB9XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGFuZ2VzLCAnc2VsZWN0ZWRSb3dzJykpIHtcbiAgICAgIHRoaXMuX3N2Yy5zZWxlY3RSb3dzKHRoaXMuc2VsZWN0ZWRSb3dzKTtcbiAgICB9XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGFuZ2VzLCAncm93RWRpdGFibGUnKSkge1xuICAgICAgdGhpcy5fc3ZjLnJvd0VkaXRhYmxlID0gdGhpcy5yb3dFZGl0YWJsZTtcbiAgICB9XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGFuZ2VzLCAnY29va2llTmFtZScpKSB7XG4gICAgICB0aGlzLl9zdmMuc2V0Q29va2llTmFtZSh0aGlzLmNvb2tpZU5hbWUpO1xuICAgIH1cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZXMsICdjb2x1bW5zJykpIHtcbiAgICAgIGlmICh0aGlzLmNvbHVtbnMgIT09IG51bGwgJiYgdGhpcy5jb2x1bW5zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fc3ZjLnNldENvbHVtbnModGhpcy5jb2x1bW5zKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGFuZ2VzLCAnZGF0YScpKSB7XG4gICAgICB0aGlzLl9zdmMuc2V0RGF0YSh0aGlzLmRhdGEpO1xuICAgICAgdGhpcy5fc3ZjLnNlbGVjdFJvd3MoXG4gICAgICAgIHRoaXMuZGF0YT8uZmlsdGVyKHJvdyA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRSb3dzPy5zb21lKFxuICAgICAgICAgICAgc2VsZWN0ZWRSb3cgPT5cbiAgICAgICAgICAgICAgdGhpcy50cmFja1Jvdyh0aGlzLl9zdmMuZ2V0Um93SW5kZXgoc2VsZWN0ZWRSb3cpLCBzZWxlY3RlZFJvdykgPT09XG4gICAgICAgICAgICAgIHRoaXMudHJhY2tSb3codGhpcy5fc3ZjLmdldFJvd0luZGV4KHJvdyksIHJvdylcbiAgICAgICAgICApO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGFuZ2VzLCAnZGljdCcpKSB7XG4gICAgICB0aGlzLl9zdmMuc2V0RGljdCh0aGlzLmRpY3QpO1xuICAgICAgdGhpcy5fc3ZjLnNldEZpbHRlck9wdGlvbnModGhpcy5kaWN0KTtcbiAgICB9XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGFuZ2VzLCAnZmlsdGVyT3B0aW9ucycpKSB7XG4gICAgICB0aGlzLl9zdmMuc2V0RmlsdGVyT3B0aW9ucyh0aGlzLmZpbHRlck9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZXMsICd0cmFja1JvdycpKSB7XG4gICAgICB0aGlzLl9zdmMudHJhY2tSb3cgPSB0aGlzLnRyYWNrUm93O1xuICAgIH1cbiAgfVxuXG4gIHNldENvbnRleHRNZW51T3Blbih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuY29udGV4dE1lbnVPcGVuID0gdmFsdWU7XG4gICAgdGhpcy5jb250ZXh0TWVudU9wZW5DaGFuZ2UuZW1pdCh0aGlzLmNvbnRleHRNZW51T3Blbik7XG4gIH1cblxuICBzZXRDb250ZXh0TWVudVJvdyhldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMuY29udGV4dE1lbnVSb3cgPSBudWxsO1xuICAgIGNvbnN0IHJvd0VsZW1lbnQgPSB0aGlzLl9zdmMuZ2V0RXZlbnRSb3coZXZlbnQpO1xuICAgIGlmIChyb3dFbGVtZW50KSB7XG4gICAgICBjb25zdCByb3dJbmRleCA9IHBhcnNlSW50KHJvd0VsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXJvdycpLCAxMCk7XG4gICAgICBpZiAocm93SW5kZXggPj0gMCkge1xuICAgICAgICB0aGlzLmNvbnRleHRNZW51Um93ID0gdGhpcy5fc3ZjLmdldFJvd0J5SW5kZXgocm93SW5kZXgpLmRhdGE7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGFydEVkaXRSb3dPckNlbGwoY29vcmRpbmF0ZXM6IElDZWxsRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5lZGl0VHlwZSA9PT0gRWRpdFR5cGUucm93KSB7XG4gICAgICB0aGlzLl9zdmMuc3RhcnRFZGl0Um93KGNvb3JkaW5hdGVzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZWRpdFR5cGUgPT09IEVkaXRUeXBlLmNlbGwpIHtcbiAgICAgIHRoaXMuX3N2Yy5zdGFydEVkaXRDZWxsKGNvb3JkaW5hdGVzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldENlbGxFbGVtZW50KGNvb3JkaW5hdGVzOiBJQ2VsbENvb3JkaW5hdGVzKTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICBgdGV0YS1jZWxsW2RhdGEtcm93PVwiJHtjb29yZGluYXRlcy5yb3d9XCJdW2RhdGEtY29sdW1uPVwiJHtjb29yZGluYXRlcy5jb2x1bW59XCJdYFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGV2ZW50SXNPblJvdyhldmVudDogRXZlbnQpOiBib29sZWFuIHtcbiAgICBjb25zdCByb3cgPSBldmVudC5jb21wb3NlZFBhdGgoKS5maW5kKCh0YXJnZXQpID0+IHtcbiAgICAgIHJldHVybiAodGFyZ2V0IGFzIEhUTUxFbGVtZW50KT8uZ2V0QXR0cmlidXRlICYmICh0YXJnZXQgYXMgSFRNTEVsZW1lbnQpPy5nZXRBdHRyaWJ1dGUoJ2RhdGEtcm93Jyk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJvdyAmJiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMocm93KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29vcmRpbmF0ZXMoZXZlbnQ6IEV2ZW50KTogSUNlbGxFdmVudCB8IG51bGwge1xuICAgIGlmIChldmVudC5jb21wb3NlZFBhdGgoKS5pbmRleE9mKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkgPCAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgY2VsbCA9IHRoaXMuX3N2Yy5nZXRFdmVudENlbGwoZXZlbnQpO1xuICAgIGlmIChjZWxsKSB7XG4gICAgICBjb25zdCByb3dJbmRleCA9IHBhcnNlSW50KGNlbGwuZ2V0QXR0cmlidXRlKCdkYXRhLXJvdycpLCAxMCk7XG4gICAgICBjb25zdCBjb2x1bW5OYW1lID0gY2VsbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29sdW1uJyk7XG4gICAgICBpZiAocm93SW5kZXggPj0gMCAmJiBjb2x1bW5OYW1lKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcm93OiByb3dJbmRleCxcbiAgICAgICAgICBjb2x1bW46IGNvbHVtbk5hbWUsXG4gICAgICAgICAgZXZlbnQsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSb3coZXZlbnQ6IEV2ZW50KTogVGFibGVSb3c8VD4gfCBudWxsIHtcbiAgICBpZiAoZXZlbnQuY29tcG9zZWRQYXRoKCkuaW5kZXhPZih0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpIDwgMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHJvd0VsZW1lbnQgPSB0aGlzLl9zdmMuZ2V0RXZlbnRSb3coZXZlbnQpO1xuICAgIGlmIChyb3dFbGVtZW50KSB7XG4gICAgICBjb25zdCByb3dJbmRleCA9IHBhcnNlSW50KHJvd0VsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXJvdycpLCAxMCk7XG4gICAgICBpZiAocm93SW5kZXggPj0gMCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3ZjLmdldFJvd0J5SW5kZXgocm93SW5kZXgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIG9uU2Nyb2xsID0gZXZlbnQgPT4ge1xuICAgIHRoaXMuX2hlYWRFbGVtZW50LnNjcm9sbExlZnQgPSBldmVudC50YXJnZXQuc2Nyb2xsTGVmdDtcbiAgfTtcblxuICAvLyBwcml2YXRlIGdldFNlbGVjdGVkVGV4dCgpIHtcbiAgLy8gICBsZXQgdGV4dCA9ICcnO1xuICAvLyAgIGlmICh0eXBlb2Ygd2luZG93LmdldFNlbGVjdGlvbiAhPSAndW5kZWZpbmVkJykge1xuICAvLyAgICAgdGV4dCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpO1xuICAvLyAgIH1cbiAgLy8gICByZXR1cm4gdGV4dDtcbiAgLy8gfVxufVxuIiwiPGRpdiBjbGFzcz0nY29sdW1uIGNvbHVtbl9hdXRvJz5cbiAgPHRldGEtdGFibGUtaGVhZFxuICAgIHN0eWxlPSd6LWluZGV4OiAxJ1xuICAgIFtzZWxlY3RUeXBlXT0nc2VsZWN0VHlwZSdcbiAgICBbc2hvd0hlYWRDZWxsTWVudV09J3Nob3dIZWFkQ2VsbE1lbnUnPjwvdGV0YS10YWJsZS1oZWFkPlxuICA8ZGl2IGNsYXNzPSdjb2x1bW4gY29sdW1uX2F1dG8gcG9zaXRpb24tcmVsYXRpdmUnXG4gICAgICAgc3R5bGU9J3otaW5kZXg6IDAnXG4gICAgICAgW3RldGFDb250ZXh0TWVudV09J2NvbnRleHRNZW51J1xuICAgICAgIFt2ZXJ0aWNhbEFsaWduXT0ndmVydGljYWxBbGlnbi5hdXRvJ1xuICAgICAgIFthbGlnbl09J2FsaWduLmF1dG8nXG4gICAgICAgW2FwcGVuZFRvQm9keV09J3RydWUnXG4gICAgICAgW2RhdGFdPSdjb250ZXh0TWVudVJvdydcbiAgICAgICBbb3Blbl09J2NvbnRleHRNZW51T3BlbidcbiAgICAgICAob3BlbkNoYW5nZSk9J3NldENvbnRleHRNZW51T3BlbigkZXZlbnQpJz5cbiAgICA8dGV0YS10YWJsZS1ib2R5XG4gICAgICAoY29udGV4dG1lbnUpPSdzZXRDb250ZXh0TWVudVJvdygkZXZlbnQpJ1xuICAgICAgKHNjcm9sbENoYW5nZSk9J29uU2Nyb2xsKCRldmVudCknXG4gICAgICBbYWdncmVnYXRlXT0nYWdncmVnYXRlJ1xuICAgICAgW3ZpcnR1YWxdPSd2aXJ0dWFsJ1xuICAgICAgW2FjdGl2ZVJvd109J2FjdGl2ZVJvdydcbiAgICAgIFt0cmFja1Jvd109J3RyYWNrUm93J1xuICAgICAgW3RyYWNrQ29sdW1uc109J3RyYWNrQ29sdW1ucydcbiAgICAgIFtzZWxlY3RlZFJvd3NdPSdzZWxlY3RlZFJvd3NMaXN0J1xuICAgICAgW2FkZGl0aW9uYWxDb21wb25lbnRdPSdkZXRhaWxDb21wb25lbnQnXG4gICAgICBbc2VsZWN0VHlwZV09J3NlbGVjdFR5cGUnXG4gICAgICBbcm93Q2xhc3NdPSdyb3dDbGFzcyc+XG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPC90ZXRhLXRhYmxlLWJvZHk+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
469
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudC90YWJsZS90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L3RhYmxlL3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxFQUVOLFdBQVcsRUFDWCxJQUFJLEVBQ0osU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJbkQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDakUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBT2hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUM5RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7O0FBV3hF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QUFDO2dCQXlDTCxPQUFPO3NCQUEzQyxZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFjbkMsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLFVBQVUsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFpQnBDLE9BQU87c0JBRE4sWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBd0ZJLFNBQVM7c0JBQS9DLFlBQVk7dUJBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVHlwZSxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZpbHRlciwgdGFrZVdoaWxlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBJRGljdGlvbmFyeSB9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9jb250cmFjdC9pLWRpY3Rpb25hcnknO1xuaW1wb3J0IHsgSUlkTmFtZSB9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9jb250cmFjdC9pLWlkLW5hbWUnO1xuaW1wb3J0IHsgQWxpZ24gfSBmcm9tICcuLi8uLi8uLi9jb21tb24vZW51bS9hbGlnbi5lbnVtJztcbmltcG9ydCB7IFZlcnRpY2FsQWxpZ24gfSBmcm9tICcuLi8uLi8uLi9jb21tb24vZW51bS92ZXJ0aWNhbC1hbGlnbi5lbnVtJztcbmltcG9ydCB7IEZpbHRlclN0YXRlIH0gZnJvbSAnLi4vLi4vZmlsdGVyL2NvbnRhcmN0L2ZpbHRlci1zdGF0ZSc7XG5pbXBvcnQgeyBGaWx0ZXJUeXBlIH0gZnJvbSAnLi4vLi4vZmlsdGVyL2VudW0vZmlsdGVyLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBEZXRhaWxDb21wb25lbnRCYXNlIH0gZnJvbSAnLi4vYmFzZS9kZXRhaWwtY29tcG9uZW50LWJhc2UnO1xuaW1wb3J0IHsgSUNlbGxDb29yZGluYXRlcyB9IGZyb20gJy4uL2NvbnRyYWN0L2ktY2VsbC1jb29yZGluYXRlcyc7XG5pbXBvcnQgeyBJQ2VsbEV2ZW50IH0gZnJvbSAnLi4vY29udHJhY3QvaS1jZWxsLWV2ZW50JztcbmltcG9ydCB7IElDZWxsSW5zdGFuY2UsIElDZWxsSW5zdGFuY2VFdmVudCB9IGZyb20gJy4uL2NvbnRyYWN0L2ktY2VsbC1pbnN0YW5jZSc7XG5pbXBvcnQgeyBUYWJsZUNvbHVtbiB9IGZyb20gJy4uL2NvbnRyYWN0L3RhYmxlLWNvbHVtbic7XG5pbXBvcnQgeyBUYWJsZVJvdyB9IGZyb20gJy4uL2NvbnRyYWN0L3RhYmxlLXJvdyc7XG5pbXBvcnQgeyBFZGl0RXZlbnQgfSBmcm9tICcuLi9lbnVtL2VkaXQtZXZlbnQuZW51bSc7XG5pbXBvcnQgeyBFZGl0VHlwZSB9IGZyb20gJy4uL2VudW0vZWRpdC10eXBlLmVudW0nO1xuaW1wb3J0IHsgU2VsZWN0VHlwZSB9IGZyb20gJy4uL2VudW0vc2VsZWN0LXR5cGUuZW51bSc7XG5pbXBvcnQgeyBUYWJsZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlL3RhYmxlLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGFibGVCb2R5Q29tcG9uZW50IH0gZnJvbSAnLi4vdGFibGUtYm9keS90YWJsZS1ib2R5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb250ZXh0TWVudURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9jb250ZXh0LW1lbnUvY29udGV4dC1tZW51LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBUYWJsZUhlYWRDb21wb25lbnQgfSBmcm9tICcuLi90YWJsZS1oZWFkL3RhYmxlLWhlYWQuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGV0YS10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtUYWJsZVNlcnZpY2VdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbVGFibGVIZWFkQ29tcG9uZW50LCBDb250ZXh0TWVudURpcmVjdGl2ZSwgVGFibGVCb2R5Q29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVDb21wb25lbnQ8VD4gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgZGF0YTogVFtdID0gW107XG4gIEBJbnB1dCgpIGNvbHVtbnM6IFRhYmxlQ29sdW1uW10gPSBbXTtcbiAgQElucHV0KCkgZGljdDogSURpY3Rpb25hcnk8SUlkTmFtZTxhbnk+W10+O1xuICBASW5wdXQoKSBmaWx0ZXJPcHRpb25zOiBJRGljdGlvbmFyeTxJSWROYW1lPGFueT5bXT47XG5cbiAgQElucHV0KClcbiAgc2V0IHN0YXRlKHN0YXRlOiBGaWx0ZXJTdGF0ZSkge1xuICAgIHRoaXMuX3N0YXRlID0gc3RhdGU7XG4gIH1cblxuICBASW5wdXQoKSBjb29raWVOYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHZpcnR1YWw6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGRldGFpbENvbXBvbmVudDogVHlwZTxEZXRhaWxDb21wb25lbnRCYXNlPFQ+PjtcbiAgQElucHV0KCkgYWN0aXZlUm93OiBUO1xuICBASW5wdXQoKSBzZWxlY3RlZFJvd3M6IFRbXTtcbiAgQElucHV0KCkgc2VsZWN0VHlwZTogU2VsZWN0VHlwZSA9IFNlbGVjdFR5cGUubW91c2U7XG4gIEBJbnB1dCgpIGFnZ3JlZ2F0ZTogYm9vbGVhbjtcbiAgQElucHV0KCkgdHJhY2tSb3c6IChpbmRleDogbnVtYmVyLCByb3c6IFQpID0+IGFueSA9IChpbmRleDogbnVtYmVyLCByb3c6IFQpID0+IHtcbiAgICBpZiAocm93WydpZCddKSB7XG4gICAgICByZXR1cm4gcm93WydpZCddO1xuICAgIH1cbiAgICByZXR1cm4gaW5kZXg7XG4gIH07XG4gIEBJbnB1dCgpIHRyYWNrQ29sdW1uczogKGluZGV4OiBudW1iZXIsIGNvbHVtbjogVGFibGVDb2x1bW4pID0+IGFueSA9IChpbmRleDogbnVtYmVyLCBjb2x1bW46IFRhYmxlQ29sdW1uKSA9PiB7XG4gICAgcmV0dXJuIGNvbHVtbi5uYW1lO1xuICB9O1xuICBASW5wdXQoKSBlZGl0VHlwZTogRWRpdFR5cGUgPSBFZGl0VHlwZS5jZWxsO1xuICBASW5wdXQoKSBlZGl0RXZlbnQ6IEVkaXRFdmVudCA9IEVkaXRFdmVudC5kb3VibGVDbGljaztcbiAgQElucHV0KCkgcm93RWRpdGFibGU6IGJvb2xlYW4gfCAoKHJvdzogVCkgPT4gYm9vbGVhbik7XG4gIEBJbnB1dCgpIHJvd0NsYXNzOiAocm93OiBULCBpbmRleD86IG51bWJlcikgPT4gc3RyaW5nO1xuXG4gIEBJbnB1dCgpIHNldCBzY3JvbGxUb0luZGV4KGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLl9zdmMuc2Nyb2xsVG9JbmRleChpbmRleCk7XG4gIH1cblxuICBASW5wdXQoKSBzaG93SGVhZENlbGxNZW51ID0gdHJ1ZTtcbiAgQElucHV0KCkgY29udGV4dE1lbnU6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBJbnB1dCgpIGNvbnRleHRNZW51T3BlbjogYm9vbGVhbjtcbiAgQE91dHB1dCgpIGNvbnRleHRNZW51T3BlbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICBAT3V0cHV0KClcbiAgc3RhdGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxGaWx0ZXJTdGF0ZT4gPSBuZXcgRXZlbnRFbWl0dGVyPEZpbHRlclN0YXRlPigpO1xuICBAT3V0cHV0KCkgYm9keUxlZnQgPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XG4gIEBPdXRwdXQoKSBhY3RpdmVSb3dDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHNlbGVjdGVkUm93c0NoYW5nZTogRXZlbnRFbWl0dGVyPFRbXT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBjZWxsQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPElDZWxsSW5zdGFuY2VFdmVudDxUPj4oKTtcbiAgQE91dHB1dCgpIGNlbGxEb3VibGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8SUNlbGxJbnN0YW5jZUV2ZW50PFQ+PigpO1xuICBAT3V0cHV0KCkgY2VsbEZvY3VzID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2VsbEluc3RhbmNlRXZlbnQ8VD4+KCk7XG4gIEBPdXRwdXQoKSBjZWxsS2V5RG93biA9IG5ldyBFdmVudEVtaXR0ZXI8SUNlbGxJbnN0YW5jZUV2ZW50PFQ+PigpO1xuICBAT3V0cHV0KCkgcm93TGVmdCA9IG5ldyBFdmVudEVtaXR0ZXI8VD4oKTtcbiAgQE91dHB1dCgpIHJvd0VkaXRTdGFydCA9IG5ldyBFdmVudEVtaXR0ZXI8SUNlbGxJbnN0YW5jZTxUPj4oKTtcbiAgQE91dHB1dCgpIHJvd0VkaXRFbmQgPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlUm93PFQ+PigpO1xuICBAT3V0cHV0KCkgY2VsbEVkaXRTdGFydCA9IG5ldyBFdmVudEVtaXR0ZXI8SUNlbGxJbnN0YW5jZTxUPj4oKTtcbiAgQE91dHB1dCgpIGNlbGxFZGl0RW5kID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2VsbEluc3RhbmNlPFQ+PigpO1xuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPElDZWxsSW5zdGFuY2U8VD4+KCk7XG4gIEBPdXRwdXQoKSB0YWJsZVNlcnZpY2UgPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlU2VydmljZTxUPj4oKTtcbiAgQFZpZXdDaGlsZCgnY29udGV4dE1lbnUnLCB7IHN0YXRpYzogdHJ1ZSB9KSBtZW51OiBFbGVtZW50UmVmO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRhYmxlJykgcHJpdmF0ZSByZWFkb25seSB0YWJsZUNsYXNzID0gdHJ1ZTtcblxuICBzZWxlY3RlZFJvd3NMaXN0OiBUW107XG4gIGNvbnRleHRNZW51Um93OiBUO1xuICB2ZXJ0aWNhbEFsaWduID0gVmVydGljYWxBbGlnbjtcbiAgYWxpZ24gPSBBbGlnbjtcbiAgcHJpdmF0ZSBfYWxpdmUgPSB0cnVlO1xuICBwcml2YXRlIF9oZWFkRWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgX3N0YXRlOiBGaWx0ZXJTdGF0ZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9zdmM6IFRhYmxlU2VydmljZTxUPiwgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZikge1xuICAgIHRoaXMuX3N2Yy5zdGF0ZVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VXaGlsZSgoKSA9PiB0aGlzLl9hbGl2ZSksXG4gICAgICAgIGZpbHRlcigoc3RhdGUpID0+IHN0YXRlICE9PSB0aGlzLl9zdGF0ZSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHN0YXRlOiBGaWx0ZXJTdGF0ZSkgPT4gdGhpcy5zdGF0ZUNoYW5nZS5uZXh0KHN0YXRlKSk7XG5cbiAgICB0aGlzLl9zdmMuZWRpdENlbGxTdGFydFxuICAgICAgLnBpcGUodGFrZVdoaWxlKCgpID0+IHRoaXMuX2FsaXZlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGl0ZW06IElDZWxsRXZlbnQpID0+IHRoaXMuY2VsbEVkaXRTdGFydC5lbWl0KHRoaXMuX3N2Yy5nZXRDZWxsSW5zdGFuY2UoaXRlbSkpKTtcblxuICAgIHRoaXMuX3N2Yy5lZGl0Q2VsbFN0b3BcbiAgICAgIC5waXBlKHRha2VXaGlsZSgoKSA9PiB0aGlzLl9hbGl2ZSkpXG4gICAgICAuc3Vic2NyaWJlKChpdGVtOiBJQ2VsbENvb3JkaW5hdGVzKSA9PiB0aGlzLmNlbGxFZGl0RW5kLmVtaXQodGhpcy5fc3ZjLmdldENlbGxJbnN0YW5jZShpdGVtKSkpO1xuXG4gICAgdGhpcy5fc3ZjLmVkaXRSb3dTdGFydFxuICAgICAgLnBpcGUodGFrZVdoaWxlKCgpID0+IHRoaXMuX2FsaXZlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGl0ZW06IElDZWxsRXZlbnQpID0+IHRoaXMucm93RWRpdFN0YXJ0LmVtaXQodGhpcy5fc3ZjLmdldENlbGxJbnN0YW5jZShpdGVtKSkpO1xuXG4gICAgdGhpcy5fc3ZjLmVkaXRSb3dTdG9wXG4gICAgICAucGlwZSh0YWtlV2hpbGUoKCkgPT4gdGhpcy5fYWxpdmUpKVxuICAgICAgLnN1YnNjcmliZSgoaXRlbTogSUNlbGxDb29yZGluYXRlcykgPT4gdGhpcy5yb3dFZGl0RW5kLmVtaXQodGhpcy5fc3ZjLmdldFJvd0J5SW5kZXgoaXRlbT8ucm93KSkpO1xuXG4gICAgdGhpcy5fc3ZjLnNlbGVjdGVkUm93cy5waXBlKHRha2VXaGlsZSgoKSA9PiB0aGlzLl9hbGl2ZSkpLnN1YnNjcmliZSgoaXRlbXM6IFRbXSkgPT4ge1xuICAgICAgdGhpcy5zZWxlY3RlZFJvd3NMaXN0ID0gaXRlbXM7XG4gICAgICB0aGlzLnNlbGVjdGVkUm93c0NoYW5nZS5lbWl0KGl0ZW1zKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX3N2Yy5hY3RpdmVSb3cucGlwZSh0YWtlV2hpbGUoKCkgPT4gdGhpcy5fYWxpdmUpKS5zdWJzY3JpYmUoKGl0ZW06IFQpID0+IHtcbiAgICAgIHRoaXMuYWN0aXZlUm93ID0gaXRlbTtcbiAgICAgIHRoaXMuYWN0aXZlUm93Q2hhbmdlLmVtaXQoaXRlbSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9zdmMudmFsdWVDaGFuZ2VkLnBpcGUodGFrZVdoaWxlKCgpID0+IHRoaXMuX2FsaXZlKSkuc3Vic2NyaWJlKChjb29yZGluYXRlczogSUNlbGxDb29yZGluYXRlcykgPT4ge1xuICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMuX3N2Yy5nZXRDZWxsSW5zdGFuY2UoY29vcmRpbmF0ZXMpKTtcbiAgICB9KTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSkgaGFuZGxlQ2xpY2tPdXRzaWRlQW55Um93KGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgY29uc3QgY29vcmRpbmF0ZXMgPSB0aGlzLmdldENvb3JkaW5hdGVzKGV2ZW50KTtcbiAgICBjb25zdCByb3cgPSB0aGlzLmdldFJvdyhldmVudCk7XG4gICAgY29uc3QgZXZlbnRJc09uUm93ID0gdGhpcy5ldmVudElzT25Sb3coZXZlbnQpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKGNvb3JkaW5hdGVzKSB7XG4gICAgICAgIHRoaXMuY2VsbENsaWNrLmVtaXQoe1xuICAgICAgICAgIC4uLnRoaXMuX3N2Yy5nZXRDZWxsSW5zdGFuY2UoY29vcmRpbmF0ZXMpLFxuICAgICAgICAgIGV2ZW50LFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMuZWRpdEV2ZW50ID09PSBFZGl0RXZlbnQuY2xpY2spIHtcbiAgICAgICAgICB0aGlzLnN0YXJ0RWRpdFJvd09yQ2VsbChjb29yZGluYXRlcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5fc3ZjLmN1cnJlbnRFZGl0Q2VsbCAmJlxuICAgICAgICAgICAgKGNvb3JkaW5hdGVzLnJvdyAhPT0gdGhpcy5fc3ZjLmN1cnJlbnRFZGl0Q2VsbC5yb3cgfHxcbiAgICAgICAgICAgICAgY29vcmRpbmF0ZXMuY29sdW1uICE9PSB0aGlzLl9zdmMuY3VycmVudEVkaXRDZWxsLmNvbHVtbilcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRFZGl0Um93T3JDZWxsKG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHJvdykge1xuICAgICAgICBpZiAoZXZlbnQuY3RybEtleSkge1xuICAgICAgICAgIHRoaXMuX3N2Yy5zZWxlY3RPckRlc2VsZWN0Um93KHJvdy5kYXRhKTtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgIHRoaXMuX3N2Yy5zZWxlY3RSYW5nZShyb3cuZGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fc3ZjLnNlbGVjdFJvd3MoW3Jvdy5kYXRhXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghZXZlbnRJc09uUm93ICYmICFldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgIGlmICh0aGlzLmVkaXRUeXBlID09PSBFZGl0VHlwZS5yb3cpIHtcbiAgICAgICAgICB0aGlzLl9zdmMuc3RhcnRFZGl0Um93KG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX3N2Yy5zdGFydEVkaXRDZWxsKG51bGwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdmb2N1c2luJywgWyckZXZlbnQnXSkgZm9jdXNJbihldmVudDogRm9jdXNFdmVudCkge1xuICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gdGhpcy5nZXRDb29yZGluYXRlcyhldmVudCk7XG4gICAgaWYgKGNvb3JkaW5hdGVzKSB7XG4gICAgICB0aGlzLmNlbGxGb2N1cy5lbWl0KHtcbiAgICAgICAgLi4udGhpcy5fc3ZjLmdldENlbGxJbnN0YW5jZShjb29yZGluYXRlcyksXG4gICAgICAgIGV2ZW50LFxuICAgICAgfSk7XG4gICAgICBpZiAodGhpcy5lZGl0RXZlbnQgPT09IEVkaXRFdmVudC5mb2N1cykge1xuICAgICAgICB0aGlzLnN0YXJ0RWRpdFJvd09yQ2VsbChjb29yZGluYXRlcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZGJsY2xpY2snLCBbJyRldmVudCddKVxuICBkYmxjbGljayhldmVudDogTW91c2VFdmVudCkge1xuICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gdGhpcy5nZXRDb29yZGluYXRlcyhldmVudCk7XG4gICAgaWYgKGNvb3JkaW5hdGVzKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5jZWxsRG91YmxlQ2xpY2suZW1pdCh7XG4gICAgICAgICAgLi4udGhpcy5fc3ZjLmdldENlbGxJbnN0YW5jZShjb29yZGluYXRlcyksXG4gICAgICAgICAgZXZlbnQsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGhpcy5lZGl0RXZlbnQgPT09IEVkaXRFdmVudC5kb3VibGVDbGljaykge1xuICAgICAgICAgIHRoaXMuc3RhcnRFZGl0Um93T3JDZWxsKGNvb3JkaW5hdGVzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gIGtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQuY3RybEtleSkge1xuICAgICAgaWYgKGV2ZW50LmNvZGUgPT09ICdLZXlBJykge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLl9zdmMuc2VsZWN0QWxsKCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChldmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICB0aGlzLl9zdmMuZGVzZWxlY3RBbGwoKTtcbiAgICAgIGlmICh0aGlzLmVkaXRUeXBlID09PSBFZGl0VHlwZS5yb3cpIHtcbiAgICAgICAgdGhpcy5fc3ZjLnN0YXJ0RWRpdFJvdyhudWxsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3N2Yy5zdGFydEVkaXRDZWxsKG51bGwpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBjb29yZGluYXRlcyA9IHRoaXMuZ2V0Q29vcmRpbmF0ZXMoZXZlbnQpO1xuICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgIGlmICh0aGlzLmVkaXRUeXBlID09PSBFZGl0VHlwZS5yb3cpIHtcbiAgICAgICAgdGhpcy5fc3ZjLnN0YXJ0RWRpdFJvdyhudWxsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLl9zdmMuY3VycmVudEVkaXRDZWxsKSB7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5fc3ZjLmdldE5leHRSb3dDZWxsKGNvb3JkaW5hdGVzKTtcbiAgICAgICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0RWRpdFJvd09yQ2VsbCh7XG4gICAgICAgICAgICAgIHJvdzogdGFyZ2V0LnJvdyxcbiAgICAgICAgICAgICAgY29sdW1uOiB0YXJnZXQuY29sdW1uLFxuICAgICAgICAgICAgICBldmVudDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3N2Yy5zdGFydEVkaXRDZWxsKG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY29vcmRpbmF0ZXMpIHtcbiAgICAgIHRoaXMuY2VsbEtleURvd24uZW1pdCh7XG4gICAgICAgIC4uLnRoaXMuX3N2Yy5nZXRDZWxsSW5zdGFuY2UoY29vcmRpbmF0ZXMpLFxuICAgICAgICBldmVudCxcbiAgICAgIH0pO1xuICAgICAgaWYgKGV2ZW50LmtleSAmJiAoZXZlbnQua2V5Lmxlbmd0aCA9PT0gMSB8fCBldmVudC5rZXkgPT09ICdEZWxldGUnKSkge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLl9zdmMuZ2V0Q29sdW1uQnlOYW1lKGNvb3JkaW5hdGVzLmNvbHVtbik7XG4gICAgICAgIGlmIChjb2x1bW4uZmlsdGVyVHlwZSAhPT0gRmlsdGVyVHlwZS5udW1iZXIgfHwgaXNGaW5pdGUoZXZlbnQua2V5IGFzIGFueSkpIHtcbiAgICAgICAgICB0aGlzLnN0YXJ0RWRpdFJvd09yQ2VsbCh7XG4gICAgICAgICAgICByb3c6IGNvb3JkaW5hdGVzLnJvdyxcbiAgICAgICAgICAgIGNvbHVtbjogY29vcmRpbmF0ZXMuY29sdW1uLFxuICAgICAgICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnVGFiJyAmJiB0aGlzLl9zdmMuY3VycmVudEVkaXRDZWxsKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGxldCB0YXJnZXQgPSB0aGlzLl9zdmMuZ2V0TmV4dEVkaXRhYmxlQ2VsbChjb29yZGluYXRlcyk7XG4gICAgICAgIGlmIChldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgIHRhcmdldCA9IHRoaXMuX3N2Yy5nZXRQcmV2aW91c0VkaXRhYmxlQ2VsbChjb29yZGluYXRlcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgIHRoaXMuc3RhcnRFZGl0Um93T3JDZWxsKHtcbiAgICAgICAgICAgIHJvdzogdGFyZ2V0LnJvdyxcbiAgICAgICAgICAgIGNvbHVtbjogdGFyZ2V0LmNvbHVtbixcbiAgICAgICAgICAgIGV2ZW50OiB1bmRlZmluZWQsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5fc3ZjLmN1cnJlbnRFZGl0Q2VsbCkge1xuICAgICAgICBsZXQgdGFyZ2V0O1xuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcpIHtcbiAgICAgICAgICB0YXJnZXQgPSB0aGlzLl9zdmMuZ2V0TmV4dENlbGwoY29vcmRpbmF0ZXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnKSB7XG4gICAgICAgICAgdGFyZ2V0ID0gdGhpcy5fc3ZjLmdldFByZXZpb3VzQ2VsbChjb29yZGluYXRlcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICAgICAgdGFyZ2V0ID0gdGhpcy5fc3ZjLmdldFByZXZpb3VzUm93Q2VsbChjb29yZGluYXRlcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgICAgICB0YXJnZXQgPSB0aGlzLl9zdmMuZ2V0TmV4dFJvd0NlbGwoY29vcmRpbmF0ZXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmdldENlbGxFbGVtZW50KHRhcmdldCk7XG4gICAgICAgICAgZWxlbWVudD8uZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlZG93bicsIFsnJGV2ZW50J10pIG1vdXNlZG93bihldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmIChldmVudC5idXR0b24gPT09IDIpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fc3ZjLnJlc3RvcmVTdGF0ZSgpO1xuICAgIHRoaXMuX3N2Yy5yZXN0b3JlSGlkZGVuQ29sdW1ucygpO1xuICAgIHRoaXMudGFibGVTZXJ2aWNlLmVtaXQodGhpcy5fc3ZjKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9oZWFkRWxlbWVudCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcudGFibGUtaGVhZCcpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fYWxpdmUgPSBmYWxzZTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZXMsICdlZGl0VHlwZScpKSB7XG4gICAgICB0aGlzLl9zdmMuZWRpdFR5cGUgPSB0aGlzLmVkaXRUeXBlO1xuICAgIH1cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZXMsICdzZWxlY3RUeXBlJykpIHtcbiAgICAgIHRoaXMuX3N2Yy5zZWxlY3RUeXBlID0gdGhpcy5zZWxlY3RUeXBlO1xuICAgIH1cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZXMsICdzZWxlY3RlZFJvd3MnKSkge1xuICAgICAgdGhpcy5fc3ZjLnNlbGVjdFJvd3ModGhpcy5zZWxlY3RlZFJvd3MpO1xuICAgIH1cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZXMsICdyb3dFZGl0YWJsZScpKSB7XG4gICAgICB0aGlzLl9zdmMucm93RWRpdGFibGUgPSB0aGlzLnJvd0VkaXRhYmxlO1xuICAgIH1cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZXMsICdjb29raWVOYW1lJykpIHtcbiAgICAgIHRoaXMuX3N2Yy5zZXRDb29raWVOYW1lKHRoaXMuY29va2llTmFtZSk7XG4gICAgfVxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2hhbmdlcywgJ2NvbHVtbnMnKSkge1xuICAgICAgaWYgKHRoaXMuY29sdW1ucyAhPT0gbnVsbCAmJiB0aGlzLmNvbHVtbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl9zdmMuc2V0Q29sdW1ucyh0aGlzLmNvbHVtbnMpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZXMsICdkYXRhJykpIHtcbiAgICAgIHRoaXMuX3N2Yy5zZXREYXRhKHRoaXMuZGF0YSk7XG4gICAgICB0aGlzLl9zdmMuc2VsZWN0Um93cyhcbiAgICAgICAgdGhpcy5kYXRhPy5maWx0ZXIoKHJvdykgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkUm93cz8uc29tZShcbiAgICAgICAgICAgIChzZWxlY3RlZFJvdykgPT5cbiAgICAgICAgICAgICAgdGhpcy50cmFja1Jvdyh0aGlzLl9zdmMuZ2V0Um93SW5kZXgoc2VsZWN0ZWRSb3cpLCBzZWxlY3RlZFJvdykgPT09XG4gICAgICAgICAgICAgIHRoaXMudHJhY2tSb3codGhpcy5fc3ZjLmdldFJvd0luZGV4KHJvdyksIHJvdylcbiAgICAgICAgICApO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGFuZ2VzLCAnZGljdCcpKSB7XG4gICAgICB0aGlzLl9zdmMuc2V0RGljdCh0aGlzLmRpY3QpO1xuICAgICAgdGhpcy5fc3ZjLnNldEZpbHRlck9wdGlvbnModGhpcy5kaWN0KTtcbiAgICB9XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGFuZ2VzLCAnZmlsdGVyT3B0aW9ucycpKSB7XG4gICAgICB0aGlzLl9zdmMuc2V0RmlsdGVyT3B0aW9ucyh0aGlzLmZpbHRlck9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZXMsICd0cmFja1JvdycpKSB7XG4gICAgICB0aGlzLl9zdmMudHJhY2tSb3cgPSB0aGlzLnRyYWNrUm93O1xuICAgIH1cbiAgfVxuXG4gIHNldENvbnRleHRNZW51T3Blbih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuY29udGV4dE1lbnVPcGVuID0gdmFsdWU7XG4gICAgdGhpcy5jb250ZXh0TWVudU9wZW5DaGFuZ2UuZW1pdCh0aGlzLmNvbnRleHRNZW51T3Blbik7XG4gIH1cblxuICBzZXRDb250ZXh0TWVudVJvdyhldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMuY29udGV4dE1lbnVSb3cgPSBudWxsO1xuICAgIGNvbnN0IHJvd0VsZW1lbnQgPSB0aGlzLl9zdmMuZ2V0RXZlbnRSb3coZXZlbnQpO1xuICAgIGlmIChyb3dFbGVtZW50KSB7XG4gICAgICBjb25zdCByb3dJbmRleCA9IHBhcnNlSW50KHJvd0VsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXJvdycpLCAxMCk7XG4gICAgICBpZiAocm93SW5kZXggPj0gMCkge1xuICAgICAgICB0aGlzLmNvbnRleHRNZW51Um93ID0gdGhpcy5fc3ZjLmdldFJvd0J5SW5kZXgocm93SW5kZXgpLmRhdGE7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGFydEVkaXRSb3dPckNlbGwoY29vcmRpbmF0ZXM6IElDZWxsRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5lZGl0VHlwZSA9PT0gRWRpdFR5cGUucm93KSB7XG4gICAgICB0aGlzLl9zdmMuc3RhcnRFZGl0Um93KGNvb3JkaW5hdGVzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZWRpdFR5cGUgPT09IEVkaXRUeXBlLmNlbGwpIHtcbiAgICAgIHRoaXMuX3N2Yy5zdGFydEVkaXRDZWxsKGNvb3JkaW5hdGVzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldENlbGxFbGVtZW50KGNvb3JkaW5hdGVzOiBJQ2VsbENvb3JkaW5hdGVzKTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICBgdGV0YS1jZWxsW2RhdGEtcm93PVwiJHtjb29yZGluYXRlcy5yb3d9XCJdW2RhdGEtY29sdW1uPVwiJHtjb29yZGluYXRlcy5jb2x1bW59XCJdYFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGV2ZW50SXNPblJvdyhldmVudDogRXZlbnQpOiBib29sZWFuIHtcbiAgICBjb25zdCByb3cgPSBldmVudC5jb21wb3NlZFBhdGgoKS5maW5kKCh0YXJnZXQpID0+IHtcbiAgICAgIHJldHVybiAodGFyZ2V0IGFzIEhUTUxFbGVtZW50KT8uZ2V0QXR0cmlidXRlICYmICh0YXJnZXQgYXMgSFRNTEVsZW1lbnQpPy5nZXRBdHRyaWJ1dGUoJ2RhdGEtcm93Jyk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJvdyAmJiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMocm93KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29vcmRpbmF0ZXMoZXZlbnQ6IEV2ZW50KTogSUNlbGxFdmVudCB8IG51bGwge1xuICAgIGlmIChldmVudC5jb21wb3NlZFBhdGgoKS5pbmRleE9mKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkgPCAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgY2VsbCA9IHRoaXMuX3N2Yy5nZXRFdmVudENlbGwoZXZlbnQpO1xuICAgIGlmIChjZWxsKSB7XG4gICAgICBjb25zdCByb3dJbmRleCA9IHBhcnNlSW50KGNlbGwuZ2V0QXR0cmlidXRlKCdkYXRhLXJvdycpLCAxMCk7XG4gICAgICBjb25zdCBjb2x1bW5OYW1lID0gY2VsbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29sdW1uJyk7XG4gICAgICBpZiAocm93SW5kZXggPj0gMCAmJiBjb2x1bW5OYW1lKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcm93OiByb3dJbmRleCxcbiAgICAgICAgICBjb2x1bW46IGNvbHVtbk5hbWUsXG4gICAgICAgICAgZXZlbnQsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSb3coZXZlbnQ6IEV2ZW50KTogVGFibGVSb3c8VD4gfCBudWxsIHtcbiAgICBpZiAoZXZlbnQuY29tcG9zZWRQYXRoKCkuaW5kZXhPZih0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpIDwgMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHJvd0VsZW1lbnQgPSB0aGlzLl9zdmMuZ2V0RXZlbnRSb3coZXZlbnQpO1xuICAgIGlmIChyb3dFbGVtZW50KSB7XG4gICAgICBjb25zdCByb3dJbmRleCA9IHBhcnNlSW50KHJvd0VsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXJvdycpLCAxMCk7XG4gICAgICBpZiAocm93SW5kZXggPj0gMCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3ZjLmdldFJvd0J5SW5kZXgocm93SW5kZXgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIG9uU2Nyb2xsID0gKGV2ZW50KSA9PiB7XG4gICAgdGhpcy5faGVhZEVsZW1lbnQuc2Nyb2xsTGVmdCA9IGV2ZW50LnRhcmdldC5zY3JvbGxMZWZ0O1xuICB9O1xuXG4gIC8vIHByaXZhdGUgZ2V0U2VsZWN0ZWRUZXh0KCkge1xuICAvLyAgIGxldCB0ZXh0ID0gJyc7XG4gIC8vICAgaWYgKHR5cGVvZiB3aW5kb3cuZ2V0U2VsZWN0aW9uICE9ICd1bmRlZmluZWQnKSB7XG4gIC8vICAgICB0ZXh0ID0gd2luZG93LmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCk7XG4gIC8vICAgfVxuICAvLyAgIHJldHVybiB0ZXh0O1xuICAvLyB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY29sdW1uIGNvbHVtbl9hdXRvXCI+XG4gIDx0ZXRhLXRhYmxlLWhlYWQgc3R5bGU9XCJ6LWluZGV4OiAxXCIgW3NlbGVjdFR5cGVdPVwic2VsZWN0VHlwZVwiIFtzaG93SGVhZENlbGxNZW51XT1cInNob3dIZWFkQ2VsbE1lbnVcIj48L3RldGEtdGFibGUtaGVhZD5cbiAgPGRpdlxuICAgIGNsYXNzPVwiY29sdW1uIGNvbHVtbl9hdXRvIHBvc2l0aW9uLXJlbGF0aXZlXCJcbiAgICBzdHlsZT1cInotaW5kZXg6IDBcIlxuICAgIFt0ZXRhQ29udGV4dE1lbnVdPVwiY29udGV4dE1lbnVcIlxuICAgIFt2ZXJ0aWNhbEFsaWduXT1cInZlcnRpY2FsQWxpZ24uYXV0b1wiXG4gICAgW2FsaWduXT1cImFsaWduLmF1dG9cIlxuICAgIFthcHBlbmRUb0JvZHldPVwidHJ1ZVwiXG4gICAgW2RhdGFdPVwiY29udGV4dE1lbnVSb3dcIlxuICAgIFtvcGVuXT1cImNvbnRleHRNZW51T3BlblwiXG4gICAgKG9wZW5DaGFuZ2UpPVwic2V0Q29udGV4dE1lbnVPcGVuKCRldmVudClcIlxuICA+XG4gICAgPHRldGEtdGFibGUtYm9keVxuICAgICAgKGNvbnRleHRtZW51KT1cInNldENvbnRleHRNZW51Um93KCRldmVudClcIlxuICAgICAgKHNjcm9sbENoYW5nZSk9XCJvblNjcm9sbCgkZXZlbnQpXCJcbiAgICAgIFthZ2dyZWdhdGVdPVwiYWdncmVnYXRlXCJcbiAgICAgIFt2aXJ0dWFsXT1cInZpcnR1YWxcIlxuICAgICAgW2FjdGl2ZVJvd109XCJhY3RpdmVSb3dcIlxuICAgICAgW3RyYWNrUm93XT1cInRyYWNrUm93XCJcbiAgICAgIFt0cmFja0NvbHVtbnNdPVwidHJhY2tDb2x1bW5zXCJcbiAgICAgIFtzZWxlY3RlZFJvd3NdPVwic2VsZWN0ZWRSb3dzTGlzdFwiXG4gICAgICBbYWRkaXRpb25hbENvbXBvbmVudF09XCJkZXRhaWxDb21wb25lbnRcIlxuICAgICAgW3NlbGVjdFR5cGVdPVwic2VsZWN0VHlwZVwiXG4gICAgICBbcm93Q2xhc3NdPVwicm93Q2xhc3NcIlxuICAgID5cbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICA8L3RldGEtdGFibGUtYm9keT5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==