@fundamental-ngx/core 0.49.1 → 0.49.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (310) hide show
  1. package/avatar-group-legacy/avatar-group-legacy.component.d.ts +6 -6
  2. package/avatar-group-legacy/directives/avatar-group-legacy-overflow-body.directive.d.ts +2 -2
  3. package/avatar-group-legacy/directives/avatar-group-legacy-overflow-button.directive.d.ts +2 -2
  4. package/bar/bar.component.d.ts +6 -6
  5. package/bar/button-bar/button-bar.component.d.ts +4 -4
  6. package/calendar/calendar-header/calendar-header.component.d.ts +2 -2
  7. package/card/card-content.component.d.ts +2 -2
  8. package/card/card-counter.directive.d.ts +2 -2
  9. package/card/card-header.component.d.ts +6 -6
  10. package/card/card-loader.component.d.ts +2 -2
  11. package/card/card-second-subtitle.directive.d.ts +2 -2
  12. package/card/card-subtitle.directive.d.ts +2 -2
  13. package/card/card-title.directive.d.ts +2 -2
  14. package/card/card.component.d.ts +3 -3
  15. package/card/kpi/card-kpi-analytics-content.directive.d.ts +2 -2
  16. package/card/kpi/card-kpi-analytics-label.directive.d.ts +2 -2
  17. package/card/kpi/card-kpi-analytics.directive.d.ts +2 -2
  18. package/card/kpi/card-kpi-header.component.d.ts +2 -2
  19. package/card/kpi/card-kpi-scale-icon.directive.d.ts +2 -2
  20. package/card/kpi/card-kpi-scale-text.directive.d.ts +2 -2
  21. package/card/kpi/card-kpi-value.directive.d.ts +4 -4
  22. package/checkbox/checkbox/checkbox.component.d.ts +3 -5
  23. package/content-density/providers/url-content-density-storage.d.ts +4 -4
  24. package/content-density/services/content-density-observer.service.d.ts +15 -15
  25. package/datetime/datetime-adapter.d.ts +9 -2
  26. package/datetime/fd-date.d.ts +10 -14
  27. package/datetime/fd-datetime-adapter.d.ts +2 -2
  28. package/dialog/base/dialog-base.class.d.ts +2 -2
  29. package/dialog/base/dialog-header-base.class.d.ts +4 -4
  30. package/dialog/base/dialog-ref-base.class.d.ts +6 -4
  31. package/dynamic-side-content/dynamic-side-content.component.d.ts +4 -4
  32. package/esm2022/avatar-group-legacy/avatar-group-legacy.component.mjs +15 -15
  33. package/esm2022/avatar-group-legacy/directives/avatar-group-legacy-overflow-body.directive.mjs +12 -12
  34. package/esm2022/avatar-group-legacy/directives/avatar-group-legacy-overflow-button.directive.mjs +9 -9
  35. package/esm2022/bar/bar.component.mjs +13 -13
  36. package/esm2022/bar/button-bar/button-bar.component.mjs +3 -3
  37. package/esm2022/calendar/calendar-header/calendar-header.component.mjs +1 -1
  38. package/esm2022/card/card-content.component.mjs +5 -5
  39. package/esm2022/card/card-counter.directive.mjs +6 -6
  40. package/esm2022/card/card-header.component.mjs +5 -5
  41. package/esm2022/card/card-loader.component.mjs +5 -5
  42. package/esm2022/card/card-second-subtitle.directive.mjs +5 -5
  43. package/esm2022/card/card-subtitle.directive.mjs +5 -5
  44. package/esm2022/card/card-title.directive.mjs +5 -5
  45. package/esm2022/card/card.component.mjs +5 -5
  46. package/esm2022/card/kpi/card-kpi-analytics-content.directive.mjs +5 -5
  47. package/esm2022/card/kpi/card-kpi-analytics-label.directive.mjs +5 -5
  48. package/esm2022/card/kpi/card-kpi-analytics.directive.mjs +5 -5
  49. package/esm2022/card/kpi/card-kpi-header.component.mjs +5 -5
  50. package/esm2022/card/kpi/card-kpi-scale-icon.directive.mjs +5 -5
  51. package/esm2022/card/kpi/card-kpi-scale-text.directive.mjs +5 -5
  52. package/esm2022/card/kpi/card-kpi-value.directive.mjs +5 -5
  53. package/esm2022/checkbox/checkbox/checkbox.component.mjs +1 -1
  54. package/esm2022/combobox/combobox.component.mjs +2 -2
  55. package/esm2022/content-density/providers/url-content-density-storage.mjs +11 -11
  56. package/esm2022/content-density/services/content-density-observer.service.mjs +7 -16
  57. package/esm2022/datetime/datetime-adapter.mjs +4 -2
  58. package/esm2022/datetime/fd-date.mjs +34 -27
  59. package/esm2022/datetime/fd-datetime-adapter.mjs +1 -1
  60. package/esm2022/dialog/base/dialog-base.class.mjs +1 -1
  61. package/esm2022/dialog/base/dialog-header-base.class.mjs +1 -1
  62. package/esm2022/dialog/base/dialog-ref-base.class.mjs +4 -8
  63. package/esm2022/dynamic-side-content/dynamic-side-content.component.mjs +9 -9
  64. package/esm2022/feed-input/directives/feed-input-avatar.directive.mjs +5 -5
  65. package/esm2022/feed-list-item/components/list/feed-list.component.mjs +15 -15
  66. package/esm2022/file-uploader/directives/file-uploader-select.directive.mjs +1 -1
  67. package/esm2022/file-uploader/file-uploader.component.mjs +5 -5
  68. package/esm2022/fixed-card-layout/fixed-card-layout-item/fixed-card-layout-item.component.mjs +3 -3
  69. package/esm2022/form/form-group/form-group.component.mjs +8 -8
  70. package/esm2022/form/form-message/form-message.component.mjs +9 -9
  71. package/esm2022/grid-list/components/grid-list/grid-list.component.mjs +2 -3
  72. package/esm2022/grid-list/components/grid-list-item/grid-list-item.component.mjs +3 -3
  73. package/esm2022/illustrated-message/illustrated-message.component.mjs +10 -10
  74. package/esm2022/input-group/input-group-directives.mjs +22 -22
  75. package/esm2022/layout-grid/directives/layout-grid-col.directive.mjs +9 -9
  76. package/esm2022/layout-grid/layout-grid.component.mjs +9 -9
  77. package/esm2022/layout-panel/layout-panel-footer/layout-panel-footer.component.mjs +9 -9
  78. package/esm2022/list/list-item/list-item.component.mjs +20 -17
  79. package/esm2022/list/list-message.directive.mjs +9 -9
  80. package/esm2022/menu/directives/segmented-button/segmented-button-header.directive.mjs +1 -2
  81. package/esm2022/menu/directives/toggle-button.directive.mjs +1 -2
  82. package/esm2022/message-box/message-box.component.mjs +17 -17
  83. package/esm2022/message-page/message-page.component.mjs +5 -5
  84. package/esm2022/message-strip/alert/message-strip-alert/message-strip-alert.component.mjs +5 -5
  85. package/esm2022/message-strip/alert/message-strip-alert-container/message-strip-alert-container.component.mjs +1 -1
  86. package/esm2022/message-strip/alert/message-strip-alert.service.mjs +2 -3
  87. package/esm2022/message-strip/message-strip.component.mjs +16 -16
  88. package/esm2022/micro-process-flow/components/micro-process-flow/micro-process-flow.component.mjs +43 -45
  89. package/esm2022/micro-process-flow/components/micro-process-flow-item/micro-process-flow-item.component.mjs +1 -1
  90. package/esm2022/micro-process-flow/micro-process-flow-focusable-item.directive.mjs +13 -13
  91. package/esm2022/multi-combobox/multi-combobox.component.mjs +2 -5
  92. package/esm2022/multi-input/multi-input-mobile/multi-input-mobile.component.mjs +1 -1
  93. package/esm2022/multi-input/multi-input.component.mjs +2 -2
  94. package/esm2022/nested-list/nested-content/nested-list-content.directive.mjs +6 -6
  95. package/esm2022/nested-list/nested-item/nested-item.directive.mjs +3 -3
  96. package/esm2022/nested-list/nested-list/nested-list.directive.mjs +3 -3
  97. package/esm2022/notification/directives/notification-indicator.directive.mjs +9 -9
  98. package/esm2022/notification/notification/notification.component.mjs +9 -9
  99. package/esm2022/notification/notification-group/notification-group.component.mjs +5 -5
  100. package/esm2022/notification/notification-service/notification.service.mjs +5 -2
  101. package/esm2022/notification/notification-utils/notification-ref.mjs +2 -5
  102. package/esm2022/object-number/object-number.component.mjs +9 -9
  103. package/esm2022/object-status/object-status.component.mjs +13 -12
  104. package/esm2022/overflow-layout/directives/overflow-expand.directive.mjs +5 -5
  105. package/esm2022/overflow-layout/directives/overflow-item-ref.directive.mjs +1 -1
  106. package/esm2022/overflow-layout/directives/overflow-layout-focusable-item.directive.mjs +5 -5
  107. package/esm2022/overflow-layout/directives/overflow-layout-item-container.directive.mjs +8 -8
  108. package/esm2022/overflow-layout/interfaces/overflow-focusable-item.interface.mjs +1 -1
  109. package/esm2022/overflow-layout/overflow-layout.component.mjs +18 -18
  110. package/esm2022/radio/radio-button/radio-button.component.mjs +8 -9
  111. package/esm2022/rating-indicator/components/rating-indicator.component.mjs +28 -28
  112. package/esm2022/resizable-card-layout/resizable-card-layout/resizable-card-item/resizable-card-item.component.mjs +23 -23
  113. package/esm2022/resizable-card-layout/resizable-card-layout/resizable-card-layout.component.mjs +7 -8
  114. package/esm2022/select/select.component.mjs +18 -18
  115. package/esm2022/shared/interfaces/search-component.interface.mjs +1 -1
  116. package/esm2022/shellbar/shellbar.component.mjs +7 -7
  117. package/esm2022/side-navigation/side-navigation.component.mjs +7 -7
  118. package/esm2022/skeleton/components/skeleton.component.mjs +3 -3
  119. package/esm2022/status-indicator/status-indicator.component.mjs +15 -15
  120. package/esm2022/table/directives/table-responsive-wrapper.directive.mjs +3 -3
  121. package/esm2022/tabs/tab-item/tab-item.directive.mjs +9 -9
  122. package/esm2022/tabs/tab-link/tab-link.directive.mjs +8 -8
  123. package/esm2022/tabs/tab-nav/tab-nav.component.mjs +15 -15
  124. package/esm2022/tabs/tab-panel/tab-panel.component.mjs +3 -3
  125. package/esm2022/tabs/tab-utils/tab-directives.mjs +8 -8
  126. package/esm2022/tile/directives/tile.directives.mjs +25 -25
  127. package/esm2022/tile/tile.component.mjs +9 -11
  128. package/esm2022/time/time-column/time-column.component.mjs +23 -23
  129. package/esm2022/timeline/services/position-strategies/base-strategy.mjs +1 -1
  130. package/esm2022/timeline/timeline.component.mjs +5 -5
  131. package/esm2022/title/title.component.mjs +4 -4
  132. package/esm2022/token/tokenizer.component.mjs +71 -71
  133. package/esm2022/toolbar/toolbar.component.mjs +3 -3
  134. package/esm2022/tree/components/tree-item/tree-item.component.mjs +4 -6
  135. package/esm2022/tree/tree.component.mjs +1 -4
  136. package/esm2022/upload-collection/upload-collection-item.directive.mjs +3 -3
  137. package/esm2022/vertical-navigation/vertical-navigation.component.mjs +6 -6
  138. package/esm2022/wizard/wizard-step/wizard-step.component.mjs +3 -3
  139. package/feed-input/directives/feed-input-avatar.directive.d.ts +2 -2
  140. package/feed-list-item/components/list/feed-list.component.d.ts +6 -6
  141. package/fesm2022/fundamental-ngx-core-avatar-group-legacy.mjs +33 -33
  142. package/fesm2022/fundamental-ngx-core-avatar-group-legacy.mjs.map +1 -1
  143. package/fesm2022/fundamental-ngx-core-bar.mjs +14 -14
  144. package/fesm2022/fundamental-ngx-core-bar.mjs.map +1 -1
  145. package/fesm2022/fundamental-ngx-core-calendar.mjs.map +1 -1
  146. package/fesm2022/fundamental-ngx-core-card.mjs +61 -61
  147. package/fesm2022/fundamental-ngx-core-card.mjs.map +1 -1
  148. package/fesm2022/fundamental-ngx-core-checkbox.mjs.map +1 -1
  149. package/fesm2022/fundamental-ngx-core-combobox.mjs +1 -1
  150. package/fesm2022/fundamental-ngx-core-combobox.mjs.map +1 -1
  151. package/fesm2022/fundamental-ngx-core-content-density.mjs +17 -26
  152. package/fesm2022/fundamental-ngx-core-content-density.mjs.map +1 -1
  153. package/fesm2022/fundamental-ngx-core-datetime.mjs +36 -27
  154. package/fesm2022/fundamental-ngx-core-datetime.mjs.map +1 -1
  155. package/fesm2022/fundamental-ngx-core-dialog.mjs +3 -7
  156. package/fesm2022/fundamental-ngx-core-dialog.mjs.map +1 -1
  157. package/fesm2022/fundamental-ngx-core-dynamic-side-content.mjs +8 -8
  158. package/fesm2022/fundamental-ngx-core-dynamic-side-content.mjs.map +1 -1
  159. package/fesm2022/fundamental-ngx-core-feed-input.mjs +4 -4
  160. package/fesm2022/fundamental-ngx-core-feed-input.mjs.map +1 -1
  161. package/fesm2022/fundamental-ngx-core-feed-list-item.mjs +14 -14
  162. package/fesm2022/fundamental-ngx-core-feed-list-item.mjs.map +1 -1
  163. package/fesm2022/fundamental-ngx-core-file-uploader.mjs +4 -4
  164. package/fesm2022/fundamental-ngx-core-file-uploader.mjs.map +1 -1
  165. package/fesm2022/fundamental-ngx-core-fixed-card-layout.mjs +2 -2
  166. package/fesm2022/fundamental-ngx-core-fixed-card-layout.mjs.map +1 -1
  167. package/fesm2022/fundamental-ngx-core-form.mjs +15 -15
  168. package/fesm2022/fundamental-ngx-core-form.mjs.map +1 -1
  169. package/fesm2022/fundamental-ngx-core-grid-list.mjs +3 -4
  170. package/fesm2022/fundamental-ngx-core-grid-list.mjs.map +1 -1
  171. package/fesm2022/fundamental-ngx-core-illustrated-message.mjs +9 -9
  172. package/fesm2022/fundamental-ngx-core-illustrated-message.mjs.map +1 -1
  173. package/fesm2022/fundamental-ngx-core-input-group.mjs +21 -21
  174. package/fesm2022/fundamental-ngx-core-input-group.mjs.map +1 -1
  175. package/fesm2022/fundamental-ngx-core-layout-grid.mjs +16 -16
  176. package/fesm2022/fundamental-ngx-core-layout-grid.mjs.map +1 -1
  177. package/fesm2022/fundamental-ngx-core-layout-panel.mjs +8 -8
  178. package/fesm2022/fundamental-ngx-core-layout-panel.mjs.map +1 -1
  179. package/fesm2022/fundamental-ngx-core-list.mjs +27 -24
  180. package/fesm2022/fundamental-ngx-core-list.mjs.map +1 -1
  181. package/fesm2022/fundamental-ngx-core-menu.mjs +0 -2
  182. package/fesm2022/fundamental-ngx-core-menu.mjs.map +1 -1
  183. package/fesm2022/fundamental-ngx-core-message-box.mjs +16 -16
  184. package/fesm2022/fundamental-ngx-core-message-box.mjs.map +1 -1
  185. package/fesm2022/fundamental-ngx-core-message-page.mjs +4 -4
  186. package/fesm2022/fundamental-ngx-core-message-page.mjs.map +1 -1
  187. package/fesm2022/fundamental-ngx-core-message-strip.mjs +20 -21
  188. package/fesm2022/fundamental-ngx-core-message-strip.mjs.map +1 -1
  189. package/fesm2022/fundamental-ngx-core-micro-process-flow.mjs +55 -57
  190. package/fesm2022/fundamental-ngx-core-micro-process-flow.mjs.map +1 -1
  191. package/fesm2022/fundamental-ngx-core-multi-combobox.mjs +1 -4
  192. package/fesm2022/fundamental-ngx-core-multi-combobox.mjs.map +1 -1
  193. package/fesm2022/fundamental-ngx-core-multi-input.mjs +1 -1
  194. package/fesm2022/fundamental-ngx-core-multi-input.mjs.map +1 -1
  195. package/fesm2022/fundamental-ngx-core-nested-list.mjs +9 -9
  196. package/fesm2022/fundamental-ngx-core-nested-list.mjs.map +1 -1
  197. package/fesm2022/fundamental-ngx-core-notification.mjs +25 -25
  198. package/fesm2022/fundamental-ngx-core-notification.mjs.map +1 -1
  199. package/fesm2022/fundamental-ngx-core-object-number.mjs +8 -8
  200. package/fesm2022/fundamental-ngx-core-object-number.mjs.map +1 -1
  201. package/fesm2022/fundamental-ngx-core-object-status.mjs +12 -11
  202. package/fesm2022/fundamental-ngx-core-object-status.mjs.map +1 -1
  203. package/fesm2022/fundamental-ngx-core-overflow-layout.mjs +32 -32
  204. package/fesm2022/fundamental-ngx-core-overflow-layout.mjs.map +1 -1
  205. package/fesm2022/fundamental-ngx-core-radio.mjs +7 -8
  206. package/fesm2022/fundamental-ngx-core-radio.mjs.map +1 -1
  207. package/fesm2022/fundamental-ngx-core-rating-indicator.mjs +27 -27
  208. package/fesm2022/fundamental-ngx-core-rating-indicator.mjs.map +1 -1
  209. package/fesm2022/fundamental-ngx-core-resizable-card-layout.mjs +28 -29
  210. package/fesm2022/fundamental-ngx-core-resizable-card-layout.mjs.map +1 -1
  211. package/fesm2022/fundamental-ngx-core-select.mjs +17 -17
  212. package/fesm2022/fundamental-ngx-core-select.mjs.map +1 -1
  213. package/fesm2022/fundamental-ngx-core-shellbar.mjs +6 -6
  214. package/fesm2022/fundamental-ngx-core-shellbar.mjs.map +1 -1
  215. package/fesm2022/fundamental-ngx-core-side-navigation.mjs +6 -6
  216. package/fesm2022/fundamental-ngx-core-side-navigation.mjs.map +1 -1
  217. package/fesm2022/fundamental-ngx-core-skeleton.mjs +2 -2
  218. package/fesm2022/fundamental-ngx-core-skeleton.mjs.map +1 -1
  219. package/fesm2022/fundamental-ngx-core-status-indicator.mjs +14 -14
  220. package/fesm2022/fundamental-ngx-core-status-indicator.mjs.map +1 -1
  221. package/fesm2022/fundamental-ngx-core-table.mjs +2 -2
  222. package/fesm2022/fundamental-ngx-core-table.mjs.map +1 -1
  223. package/fesm2022/fundamental-ngx-core-tabs.mjs +38 -38
  224. package/fesm2022/fundamental-ngx-core-tabs.mjs.map +1 -1
  225. package/fesm2022/fundamental-ngx-core-tile.mjs +32 -34
  226. package/fesm2022/fundamental-ngx-core-tile.mjs.map +1 -1
  227. package/fesm2022/fundamental-ngx-core-time.mjs +23 -23
  228. package/fesm2022/fundamental-ngx-core-time.mjs.map +1 -1
  229. package/fesm2022/fundamental-ngx-core-timeline.mjs +4 -4
  230. package/fesm2022/fundamental-ngx-core-timeline.mjs.map +1 -1
  231. package/fesm2022/fundamental-ngx-core-title.mjs +3 -3
  232. package/fesm2022/fundamental-ngx-core-title.mjs.map +1 -1
  233. package/fesm2022/fundamental-ngx-core-token.mjs +70 -70
  234. package/fesm2022/fundamental-ngx-core-token.mjs.map +1 -1
  235. package/fesm2022/fundamental-ngx-core-toolbar.mjs +2 -2
  236. package/fesm2022/fundamental-ngx-core-toolbar.mjs.map +1 -1
  237. package/fesm2022/fundamental-ngx-core-tree.mjs +3 -8
  238. package/fesm2022/fundamental-ngx-core-tree.mjs.map +1 -1
  239. package/fesm2022/fundamental-ngx-core-upload-collection.mjs +2 -2
  240. package/fesm2022/fundamental-ngx-core-upload-collection.mjs.map +1 -1
  241. package/fesm2022/fundamental-ngx-core-vertical-navigation.mjs +5 -5
  242. package/fesm2022/fundamental-ngx-core-vertical-navigation.mjs.map +1 -1
  243. package/fesm2022/fundamental-ngx-core-wizard.mjs +2 -2
  244. package/fesm2022/fundamental-ngx-core-wizard.mjs.map +1 -1
  245. package/file-uploader/directives/file-uploader-select.directive.d.ts +1 -1
  246. package/file-uploader/file-uploader.component.d.ts +4 -4
  247. package/form/form-group/form-group.component.d.ts +4 -4
  248. package/form/form-message/form-message.component.d.ts +2 -2
  249. package/grid-list/components/grid-list/grid-list.component.d.ts +3 -2
  250. package/grid-list/components/grid-list-item/grid-list-item.component.d.ts +8 -8
  251. package/illustrated-message/illustrated-message.component.d.ts +7 -7
  252. package/input-group/input-group-directives.d.ts +12 -12
  253. package/layout-grid/directives/layout-grid-col.directive.d.ts +2 -2
  254. package/layout-grid/layout-grid.component.d.ts +2 -2
  255. package/layout-panel/layout-panel-footer/layout-panel-footer.component.d.ts +2 -2
  256. package/list/list-item/list-item.component.d.ts +13 -13
  257. package/list/list-message.directive.d.ts +4 -4
  258. package/message-box/message-box.component.d.ts +5 -5
  259. package/message-page/message-page.component.d.ts +2 -2
  260. package/message-strip/alert/message-strip-alert/message-strip-alert.component.d.ts +4 -4
  261. package/message-strip/alert/message-strip-alert-container/message-strip-alert-container.component.d.ts +4 -4
  262. package/message-strip/alert/message-strip-alert.service.d.ts +3 -2
  263. package/message-strip/message-strip.component.d.ts +6 -6
  264. package/micro-process-flow/components/micro-process-flow/micro-process-flow.component.d.ts +15 -17
  265. package/micro-process-flow/components/micro-process-flow-item/micro-process-flow-item.component.d.ts +2 -2
  266. package/micro-process-flow/micro-process-flow-focusable-item.directive.d.ts +6 -6
  267. package/multi-input/multi-input-mobile/multi-input-mobile.component.d.ts +2 -2
  268. package/nested-list/nested-content/nested-list-content.directive.d.ts +2 -2
  269. package/nested-list/nested-item/nested-item.directive.d.ts +2 -2
  270. package/nested-list/nested-list/nested-list.directive.d.ts +2 -2
  271. package/notification/directives/notification-indicator.directive.d.ts +4 -4
  272. package/notification/notification/notification.component.d.ts +2 -2
  273. package/notification/notification-group/notification-group.component.d.ts +2 -2
  274. package/notification/notification-utils/notification-ref.d.ts +5 -3
  275. package/object-number/object-number.component.d.ts +4 -4
  276. package/object-status/object-status.component.d.ts +5 -4
  277. package/overflow-layout/directives/overflow-expand.directive.d.ts +2 -2
  278. package/overflow-layout/directives/overflow-item-ref.directive.d.ts +2 -2
  279. package/overflow-layout/directives/overflow-layout-focusable-item.directive.d.ts +2 -2
  280. package/overflow-layout/directives/overflow-layout-item-container.directive.d.ts +2 -2
  281. package/overflow-layout/interfaces/overflow-focusable-item.interface.d.ts +1 -1
  282. package/overflow-layout/overflow-layout.component.d.ts +4 -4
  283. package/package.json +3 -3
  284. package/radio/radio-button/radio-button.component.d.ts +7 -7
  285. package/rating-indicator/components/rating-indicator.component.d.ts +12 -12
  286. package/resizable-card-layout/resizable-card-layout/resizable-card-item/resizable-card-item.component.d.ts +8 -8
  287. package/resizable-card-layout/resizable-card-layout/resizable-card-layout.component.d.ts +2 -2
  288. package/select/select.component.d.ts +19 -19
  289. package/shared/interfaces/search-component.interface.d.ts +1 -1
  290. package/shellbar/shellbar.component.d.ts +12 -12
  291. package/side-navigation/side-navigation.component.d.ts +2 -2
  292. package/skeleton/components/skeleton.component.d.ts +2 -2
  293. package/status-indicator/status-indicator.component.d.ts +7 -7
  294. package/tabs/tab-item/tab-item.directive.d.ts +2 -2
  295. package/tabs/tab-link/tab-link.directive.d.ts +2 -2
  296. package/tabs/tab-nav/tab-nav.component.d.ts +8 -8
  297. package/tabs/tab-panel/tab-panel.component.d.ts +2 -2
  298. package/tabs/tab-utils/tab-directives.d.ts +5 -5
  299. package/tile/directives/tile.directives.d.ts +12 -12
  300. package/tile/tile.component.d.ts +4 -6
  301. package/time/time-column/time-column.component.d.ts +6 -6
  302. package/timeline/services/position-strategies/base-strategy.d.ts +2 -2
  303. package/timeline/timeline.component.d.ts +2 -2
  304. package/title/title.component.d.ts +2 -2
  305. package/token/tokenizer.component.d.ts +16 -16
  306. package/toolbar/toolbar.component.d.ts +2 -2
  307. package/tree/components/tree-item/tree-item.component.d.ts +10 -9
  308. package/upload-collection/upload-collection-item.directive.d.ts +2 -2
  309. package/vertical-navigation/vertical-navigation.component.d.ts +2 -2
  310. package/wizard/wizard-step/wizard-step.component.d.ts +4 -4
@@ -41,6 +41,10 @@ export class ResizableCardLayoutComponent {
41
41
  }
42
42
  }
43
43
  /** @hidden */
44
+ onResize() {
45
+ this._createLayout();
46
+ }
47
+ /** @hidden */
44
48
  ngOnInit() {
45
49
  this._columnsHeight = new Array(this._columns);
46
50
  this._columnsHeight.fill(0);
@@ -69,10 +73,6 @@ export class ResizableCardLayoutComponent {
69
73
  ngOnDestroy() {
70
74
  this._keyboardEventsManager?.destroy();
71
75
  }
72
- /** @hidden */
73
- onResize() {
74
- this._createLayout();
75
- }
76
76
  /** Layout size. Available options are 'sm', 'md', 'lg' and 'xl' */
77
77
  set layoutSize(layoutSize) {
78
78
  this._layout = layoutSize;
@@ -373,7 +373,7 @@ export class ResizableCardLayoutComponent {
373
373
  _setCardPositionValues(card, index) {
374
374
  const directionPosition = this._directionPosition$();
375
375
  if (index === 0) {
376
- card[directionPosition] = 0 + this._paddingLeft;
376
+ card[directionPosition] = Number(this._paddingLeft);
377
377
  card.top = 0;
378
378
  card.startingColumnPosition = 0;
379
379
  return;
@@ -402,9 +402,8 @@ export class ResizableCardLayoutComponent {
402
402
  }
403
403
  // check for each card position, starting from leftmost
404
404
  let isFitting = false;
405
- let startingColumnPosition = -1;
406
405
  // try to fit as left (or right if Rtl) as possible from the column position
407
- startingColumnPosition = this._fitCardColumnPosition(card, columnPositions, height);
406
+ const startingColumnPosition = this._fitCardColumnPosition(card, columnPositions, height);
408
407
  if (startingColumnPosition !== -1) {
409
408
  isFitting = true;
410
409
  card[directionPosition] =
@@ -514,4 +513,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImpor
514
513
  type: HostListener,
515
514
  args: ['window:resize']
516
515
  }] } });
517
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXphYmxlLWNhcmQtbGF5b3V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9yZXNpemFibGUtY2FyZC1sYXlvdXQvcmVzaXphYmxlLWNhcmQtbGF5b3V0L3Jlc2l6YWJsZS1jYXJkLWxheW91dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvcmVzaXphYmxlLWNhcmQtbGF5b3V0L3Jlc2l6YWJsZS1jYXJkLWxheW91dC9yZXNpemFibGUtY2FyZC1sYXlvdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFHSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFVBQVUsRUFDVixZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsUUFBUSxFQUNSLE1BQU0sRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDeEQsT0FBTyxFQUNILDBCQUEwQixFQUcxQixHQUFHLEVBQ0gsc0JBQXNCLEVBQ3RCLG9CQUFvQixFQUNwQixrQkFBa0IsRUFDckIsTUFBTSxxREFBcUQsQ0FBQzs7O0FBYTdELE1BQU0sT0FBTyw0QkFBNEI7SUFrRXJDLGNBQWM7SUFDZCxZQUNxQixHQUFzQixFQUN2QixVQUFzQixFQUNULFdBQXVCO1FBRm5DLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3ZCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDVCxnQkFBVyxHQUFYLFdBQVcsQ0FBWTtR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eUNBbkViLFlBQVk7c0JBRFgsS0FBSztnQkFLTixVQUFVO3NCQURULE1BQU07Z0JBS1AsUUFBUTtzQkFEUCxNQUFNO2dCQUtQLE9BQU87c0JBRE4sTUFBTTtnQkFLUCxpQkFBaUI7c0JBRGhCLE1BQU07Z0JBS1Asa0JBQWtCO3NCQURqQixNQUFNO2dCQUtQLFlBQVk7c0JBRFgsTUFBTTtnQkFLUCxlQUFlO3NCQURkLGVBQWU7dUJBQUMsMEJBQTBCO2dCQTZDM0MsY0FBYztzQkFEYixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFnRG5DLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9jdXNLZXlNYW5hZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBEZXN0cm95UmVmLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgY29tcHV0ZWQsXG4gICAgaW5qZWN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBSdGxTZXJ2aWNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHtcbiAgICBSZXNpemFibGVDYXJkSXRlbUNvbXBvbmVudCxcbiAgICBSZXNpemFibGVDYXJkSXRlbUNvbmZpZyxcbiAgICBSZXNpemVkRXZlbnQsXG4gICAgZ2FwLFxuICAgIGhvcml6b250YWxSZXNpemVPZmZzZXQsXG4gICAgaG9yaXpvbnRhbFJlc2l6ZVN0ZXAsXG4gICAgdmVydGljYWxSZXNpemVTdGVwXG59IGZyb20gJy4vcmVzaXphYmxlLWNhcmQtaXRlbS9yZXNpemFibGUtY2FyZC1pdGVtLmNvbXBvbmVudCc7XG5cbmV4cG9ydCB0eXBlIExheW91dFNpemUgPSAnc20nIHwgJ21kJyB8ICdsZycgfCAneGwnO1xuZXhwb3J0IHR5cGUgUmVzaXphYmxlQ2FyZExheW91dENvbmZpZyA9IEFycmF5PFJlc2l6YWJsZUNhcmRJdGVtQ29uZmlnPjtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC1yZXNpemFibGUtY2FyZC1sYXlvdXQnLFxuICAgIHRlbXBsYXRlVXJsOiAncmVzaXphYmxlLWNhcmQtbGF5b3V0LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4vcmVzaXphYmxlLWNhcmQtbGF5b3V0LmNvbXBvbmVudC5zY3NzJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgUmVzaXphYmxlQ2FyZExheW91dENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95IHtcbiAgICAvKiogT2JqZWN0IGZvciBzZXR0aW5nIGVhY2ggY2FyZCBwcm9wZXJ0eSAqL1xuICAgIEBJbnB1dCgpXG4gICAgbGF5b3V0Q29uZmlnOiBSZXNpemFibGVDYXJkTGF5b3V0Q29uZmlnO1xuXG4gICAgLyoqIEVtaXRzIHdoZW4gY2FyZCByZXNpemUgaXMgcmVhY2hlZCB0byBvbmUgbmV3IHN0ZXAgaW4gaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCBkaXJlY3Rpb24gKi9cbiAgICBAT3V0cHV0KClcbiAgICBzdGVwQ2hhbmdlOiBFdmVudEVtaXR0ZXI8UmVzaXplZEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVzaXplZEV2ZW50PigpO1xuXG4gICAgLyoqIEVtaXRzIHdoZW4gY2FyZCBpcyBzdGlsbCByZXNpemluZyAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlc2l6aW5nOiBFdmVudEVtaXR0ZXI8UmVzaXplZEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVzaXplZEV2ZW50PigpO1xuXG4gICAgLyoqIEVtaXRzIHdoZW4gY2FyZCByZXNpemUgaXMgY29tcGxldGVkICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVzaXplZDogRXZlbnRFbWl0dGVyPFJlc2l6ZWRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlc2l6ZWRFdmVudD4oKTtcblxuICAgIC8qKiBFbWl0cyB3aGVuIGNhcmQgaGVpZ2h0IGlzIHJlZHVjZWQgdG8gc2hvdyBvbmx5IGhlYWRlciAqL1xuICAgIEBPdXRwdXQoKVxuICAgIG1pbmlIZWFkZXJSZWFjaGVkOiBFdmVudEVtaXR0ZXI8UmVzaXplZEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVzaXplZEV2ZW50PigpO1xuXG4gICAgLyoqIEVtaXRzIHdoZW4gbWluaW11bSBoZWlnaHQgb2YgY2FyZCBjb250ZW50IGFyZWEgaXMgcmVhY2hlZCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIG1pbmlDb250ZW50UmVhY2hlZDogRXZlbnRFbWl0dGVyPFJlc2l6ZWRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlc2l6ZWRFdmVudD4oKTtcblxuICAgIC8qKiBFbWl0cyB3aGVuIGxheW91dCBjaGFuZ2VzICovXG4gICAgQE91dHB1dCgpXG4gICAgbGF5b3V0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8UmVzaXphYmxlQ2FyZExheW91dENvbmZpZz4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlc2l6YWJsZUNhcmRMYXlvdXRDb25maWc+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oUmVzaXphYmxlQ2FyZEl0ZW1Db21wb25lbnQpXG4gICAgcmVzaXplQ2FyZEl0ZW1zOiBRdWVyeUxpc3Q8UmVzaXphYmxlQ2FyZEl0ZW1Db21wb25lbnQ+O1xuXG4gICAgLyoqIHdpZHRoIGZvciBsYXlvdXQgKi9cbiAgICBsYXlvdXRXaWR0aDogbnVtYmVyO1xuXG4gICAgLyoqIGhlaWdodCBmb3IgbGF5b3V0ICovXG4gICAgbGF5b3V0SGVpZ2h0OiBudW1iZXI7XG5cbiAgICAvKiogQGhpZGRlbiBOdW1iZXIgb2YgY29sdW1ucyBpbiBsYXlvdXQuIGNvbnNpZGVyaW5nIDEgY29sdW1uIHdpZHRoIDIwcmVtICovXG4gICAgcHJpdmF0ZSBfY29sdW1uczogbnVtYmVyO1xuXG4gICAgLyoqIEBoaWRkZW4gTGF5b3V0IHBhZGRpbmcuIHdpbGwgYmUgYWRkZWQgdG8gZmlyc3QgY2FyZCBwYWRkaW5nIGluIGV2ZXJ5IHJvdyAqL1xuICAgIHByaXZhdGUgX3BhZGRpbmdMZWZ0OiBudW1iZXI7XG5cbiAgICAvKiogQGhpZGRlbiBTdG9yZXMgaGVpZ2h0IG9mIGVhY2ggY29sdW1uIG9uIGNhcmQgYXJyYW5nZW1lbnQgKi9cbiAgICBwcml2YXRlIF9jb2x1bW5zSGVpZ2h0OiBBcnJheTxudW1iZXI+O1xuXG4gICAgLyoqIEBoaWRkZW4gQXZhaWxhYmxlIHNjcmVlbiBsYXlvdXQgKi9cbiAgICBwcml2YXRlIF9sYXlvdXQ6IExheW91dFNpemU7XG5cbiAgICAvKiogQGhpZGRlbiBTdG9yZXMgc29ydGVkIGNhcmQgYmVmb3JlIHBsYWNpbmcgaW4gbGF5b3V0ICovXG4gICAgcHJpdmF0ZSBfc29ydGVkQ2FyZHM6IEFycmF5PFJlc2l6YWJsZUNhcmRJdGVtQ29tcG9uZW50PjtcblxuICAgIC8qKiBAaGlkZGVuIEZvY3VzS2V5TWFuYWdlciBpbnN0YW5jZSAqL1xuICAgIHByaXZhdGUgX2tleWJvYXJkRXZlbnRzTWFuYWdlcjogRm9jdXNLZXlNYW5hZ2VyPFJlc2l6YWJsZUNhcmRJdGVtQ29tcG9uZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGF5b3V0U2hpZnRlZCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kaXJlY3Rpb25Qb3NpdGlvbiQgPSBjb21wdXRlZDwnbGVmdCcgfCAncmlnaHQnPigoKSA9PiAodGhpcy5fcnRsU2VydmljZT8ucnRsU2lnbmFsKCkgPyAncmlnaHQnIDogJ2xlZnQnKSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9jZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHJlYWRvbmx5IF9ydGxTZXJ2aWNlOiBSdGxTZXJ2aWNlXG4gICAgKSB7fVxuXG4gICAgLyoqIEBoaWRkZW4gaGFuZGxlcyBrZXlib2FyZCBhY2Nlc3NpYmlsaXR5ICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gICAgX2hhbmRsZUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGlmICghdGhpcy5fa2V5Ym9hcmRFdmVudHNNYW5hZ2VyLmFjdGl2ZUl0ZW1JbmRleCkge1xuICAgICAgICAgICAgdGhpcy5fa2V5Ym9hcmRFdmVudHNNYW5hZ2VyLnNldEZpcnN0SXRlbUFjdGl2ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2tleWJvYXJkRXZlbnRzTWFuYWdlcikge1xuICAgICAgICAgICAgdGhpcy5fa2V5Ym9hcmRFdmVudHNNYW5hZ2VyLm9uS2V5ZG93bihldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jb2x1bW5zSGVpZ2h0ID0gbmV3IEFycmF5KHRoaXMuX2NvbHVtbnMpO1xuICAgICAgICB0aGlzLl9jb2x1bW5zSGVpZ2h0LmZpbGwoMCk7XG4gICAgICAgIC8vIGluaXRpYWxpc2UgdmFsdWUgMFxuICAgICAgICAvLyBkZXRlY3QgaW5pdGlhbCB3aW5kb3cgc2l6ZSBhbmQgc2V0IGxheW91dFxuICAgICAgICB0aGlzLl9jcmVhdGVMYXlvdXQoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faW5pdGlhbFNldHVwKCk7XG4gICAgICAgIC8vIGxpc3RlbiBmb3IgcXVlcnktbGlzdCBjaGFuZ2VcbiAgICAgICAgdGhpcy5yZXNpemVDYXJkSXRlbXM/LmZvckVhY2goKGNhcmQpID0+IHtcbiAgICAgICAgICAgIGNhcmQ/LnZlcmlmeVVwZGF0ZUNhcmRXaWR0aCh0aGlzLmxheW91dFNpemUpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnJlc2l6ZUNhcmRJdGVtcy5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFycmFuZ2VDYXJkcyh0aGlzLnJlc2l6ZUNhcmRJdGVtcz8udG9BcnJheSgpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYXJyYW5nZUNhcmRzKHRoaXMucmVzaXplQ2FyZEl0ZW1zPy50b0FycmF5KCkpO1xuICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fYWNjZXNzaWJpbGl0eVNldHVwKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fa2V5Ym9hcmRFdmVudHNNYW5hZ2VyPy5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJylcbiAgICBvblJlc2l6ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY3JlYXRlTGF5b3V0KCk7XG4gICAgfVxuXG4gICAgLyoqIExheW91dCBzaXplLiBBdmFpbGFibGUgb3B0aW9ucyBhcmUgJ3NtJywgJ21kJywgJ2xnJyBhbmQgJ3hsJyAqL1xuICAgIHNldCBsYXlvdXRTaXplKGxheW91dFNpemU6IExheW91dFNpemUpIHtcbiAgICAgICAgdGhpcy5fbGF5b3V0ID0gbGF5b3V0U2l6ZTtcbiAgICB9XG4gICAgZ2V0IGxheW91dFNpemUoKTogTGF5b3V0U2l6ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sYXlvdXQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQXJyYW5nZXMgY2FyZHMgaW4gbGF5b3V0IGJhc2VkIG9uIHJhbmssIHdpZHRoIGFuZCBoZWlnaHQgb2YgY2FyZFxuICAgICAqIEBwYXJhbSBjYXJkcyBBcnJheSBvZiBSZXNpemFibGVDYXJkSXRlbUNvbXBvbmVudFxuICAgICAqL1xuICAgIGFycmFuZ2VDYXJkcyhjYXJkczogQXJyYXk8UmVzaXphYmxlQ2FyZEl0ZW1Db21wb25lbnQ+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NvbHVtbnNIZWlnaHQgPSBuZXcgQXJyYXkodGhpcy5fY29sdW1ucyk7XG4gICAgICAgIHRoaXMuX2NvbHVtbnNIZWlnaHQuZmlsbCgwKTtcbiAgICAgICAgLy8gc29ydCBiYXNlZCBvbiB0aGUgY2FyZCByYW5rXG4gICAgICAgIHRoaXMuX3NvcnRlZENhcmRzID0gY2FyZHM/LnNvcnQodGhpcy5fc29ydENhcmRzKTtcblxuICAgICAgICB0aGlzLl9zb3J0ZWRDYXJkcz8uZm9yRWFjaCgoY2FyZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3NldENhcmRQb3NpdGlvblZhbHVlcyhjYXJkLCBpbmRleCk7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVDb2x1bW5zSGVpZ2h0KGNhcmQpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5sYXlvdXRIZWlnaHQgPSBNYXRoLm1heC5hcHBseShudWxsLCB0aGlzLl9jb2x1bW5zSGVpZ2h0KSArIHZlcnRpY2FsUmVzaXplU3RlcDtcblxuICAgICAgICB0aGlzLl9lbWl0TGF5b3V0Q2hhbmdlKCk7XG4gICAgICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZXMgc2hpZnRpbmcgb2YgY2FyZHMgd2l0aCBhbmltYXRpb24sIHdoaWxlIGNhcmQgaXMgc3RpbGwgcmVzaXppbmcuXG4gICAgICogQHBhcmFtIGV2ZW50IHtSZXNpemVkRXZlbnR9XG4gICAgICovXG4gICAgY2FyZFJlc2l6aW5nKGV2ZW50OiBSZXNpemVkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZXNpemluZy5lbWl0KGV2ZW50KTtcbiAgICAgICAgdGhpcy5faGFuZGxlSG9yaXpvbnRhbFJlc2l6ZShldmVudCk7XG4gICAgICAgIHRoaXMuX2hhbmRsZVZlcnRpY2FsUmVzaXplKGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGVzIGFycmFuZ2VtZW50IG9mIGNhcmRzIGluIGxheW91dFxuICAgICAqIEBwYXJhbSBldmVudCB7UmVzaXplZEV2ZW50fVxuICAgICAqL1xuICAgIGNhcmRSZXNpemVDb21wbGV0ZShldmVudDogUmVzaXplZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2xheW91dFNoaWZ0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5hcnJhbmdlQ2FyZHModGhpcy5yZXNpemVDYXJkSXRlbXMudG9BcnJheSgpKTtcbiAgICAgICAgdGhpcy5yZXNpemVkLmVtaXQoZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgdXBkYXRlTGF5b3V0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlc2l6ZUNhcmRJdGVtcz8uZm9yRWFjaCgoY2FyZCkgPT4ge1xuICAgICAgICAgICAgY2FyZD8udmVyaWZ5VXBkYXRlQ2FyZFdpZHRoKHRoaXMubGF5b3V0U2l6ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFycmFuZ2VDYXJkcyh0aGlzLnJlc2l6ZUNhcmRJdGVtcz8udG9BcnJheSgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBtZXRob2QgdG8gZ2V0IHNjcmVlbiB3aWR0aFxuICAgICAqIEByZXR1cm5zIFdpbmRvdyB3aWR0aCBpbiBweFxuICAgICAqL1xuICAgIGdldFdpZHRoQXZhaWxhYmxlKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBTdWJzY3JpYmUgdG8gZXZlbnRzIGZyb20gaXRlbXMgKi9cbiAgICBwcml2YXRlIF9pbml0aWFsU2V0dXAoKTogdm9pZCB7XG4gICAgICAgIC8vIGxpc3RlbiBmb3IgcmVzaXppbmcgZXZlbnQgb2YgY2FyZCBpdGVtXG4gICAgICAgIHRoaXMucmVzaXplQ2FyZEl0ZW1zPy5mb3JFYWNoKChyZXNpemVDYXJkSXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmxheW91dENvbmZpZyAmJiB0aGlzLmxheW91dENvbmZpZy5sZW5ndGggPj0gaW5kZXggKyAxKSB7XG4gICAgICAgICAgICAgICAgcmVzaXplQ2FyZEl0ZW0uY29uZmlnID0gdGhpcy5sYXlvdXRDb25maWdbaW5kZXhdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXNpemVDYXJkSXRlbS5yZXNpemluZ1xuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogUmVzaXplZEV2ZW50KSA9PiB0aGlzLmNhcmRSZXNpemluZyhldmVudCkpO1xuXG4gICAgICAgICAgICAvLyBsaXN0ZW4gZm9yIHJlc2l6ZSBjb21wbGV0ZSBldmVudCBvZiBjYXJkIGl0ZW1cbiAgICAgICAgICAgIHJlc2l6ZUNhcmRJdGVtLnJlc2l6ZWRcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IFJlc2l6ZWRFdmVudCkgPT4gdGhpcy5jYXJkUmVzaXplQ29tcGxldGUoZXZlbnQpKTtcblxuICAgICAgICAgICAgLy8gbGlzdGVuIGZvciBtaW5pLWhlYWRlciBoZWlnaHQgZXZlbnQgb2YgY2FyZCBpdGVtXG4gICAgICAgICAgICByZXNpemVDYXJkSXRlbS5taW5pSGVhZGVyUmVhY2hlZFxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogUmVzaXplZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWluaUhlYWRlclJlYWNoZWQuZW1pdChldmVudCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RlcENoYW5nZS5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gbGlzdGVuIGZvciBtaW5pLWNvbnRlbnQgaGVpZ2h0IGV2ZW50IG9mIGNhcmQgaXRlbVxuICAgICAgICAgICAgcmVzaXplQ2FyZEl0ZW0ubWluaUNvbnRlbnRSZWFjaGVkXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBSZXNpemVkRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5taW5pQ29udGVudFJlYWNoZWQuZW1pdChldmVudCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RlcENoYW5nZS5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9hY2Nlc3NpYmlsaXR5U2V0dXAoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2tleWJvYXJkRXZlbnRzTWFuYWdlcj8uZGVzdHJveSgpO1xuICAgICAgICB0aGlzLl9rZXlib2FyZEV2ZW50c01hbmFnZXIgPSBuZXcgRm9jdXNLZXlNYW5hZ2VyKHRoaXMucmVzaXplQ2FyZEl0ZW1zKS53aXRoV3JhcCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIGNyZWF0ZSBsYXlvdXQgYmFzZWQgb24gbGF5b3V0IHNpemUgKi9cbiAgICBwcml2YXRlIF9jcmVhdGVMYXlvdXQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNjcmVlbldpZHRoID0gdGhpcy5nZXRXaWR0aEF2YWlsYWJsZSgpO1xuICAgICAgICBjb25zdCBwcmV2TGF5b3V0U2l6ZSA9IHRoaXMubGF5b3V0U2l6ZTtcblxuICAgICAgICBpZiAoc2NyZWVuV2lkdGggPiAwICYmIHNjcmVlbldpZHRoIDw9IDY1NiAmJiBwcmV2TGF5b3V0U2l6ZSAhPT0gJ3NtJykge1xuICAgICAgICAgICAgdGhpcy5sYXlvdXRTaXplID0gJ3NtJztcbiAgICAgICAgICAgIHRoaXMuX3NldExheW91dENvbHVtbnModGhpcy5sYXlvdXRTaXplKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTGF5b3V0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2NyZWVuV2lkdGggPiA2NTYgJiYgc2NyZWVuV2lkdGggPD0gOTc1ICYmIHByZXZMYXlvdXRTaXplICE9PSAnbWQnKSB7XG4gICAgICAgICAgICB0aGlzLmxheW91dFNpemUgPSAnbWQnO1xuICAgICAgICAgICAgdGhpcy5fc2V0TGF5b3V0Q29sdW1ucyh0aGlzLmxheW91dFNpemUpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVMYXlvdXQoKTtcbiAgICAgICAgfSBlbHNlIGlmIChzY3JlZW5XaWR0aCA+IDk3NSAmJiBzY3JlZW5XaWR0aCA8PSAxMzU5ICYmIHByZXZMYXlvdXRTaXplICE9PSAnbGcnKSB7XG4gICAgICAgICAgICB0aGlzLmxheW91dFNpemUgPSAnbGcnO1xuICAgICAgICAgICAgdGhpcy5fc2V0TGF5b3V0Q29sdW1ucyh0aGlzLmxheW91dFNpemUpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVMYXlvdXQoKTtcbiAgICAgICAgfSBlbHNlIGlmIChzY3JlZW5XaWR0aCA+IDEzNTkgJiYgcHJldkxheW91dFNpemUgIT09ICd4bCcpIHtcbiAgICAgICAgICAgIHRoaXMubGF5b3V0U2l6ZSA9ICd4bCc7XG4gICAgICAgICAgICB0aGlzLl9zZXRMYXlvdXRDb2x1bW5zKHRoaXMubGF5b3V0U2l6ZSk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUxheW91dCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gRW1pdCBsYXlvdXRDaGFuZ2UgZXZlbnQgd2l0aCB1cGRhdGVkIGNhcmQgZGltZW5zaW9ucyAqL1xuICAgIHByaXZhdGUgX2VtaXRMYXlvdXRDaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGxhdGVzdENhcmRDb25maWc6IFJlc2l6YWJsZUNhcmRMYXlvdXRDb25maWcgPSBbXTtcbiAgICAgICAgdGhpcy5yZXNpemVDYXJkSXRlbXM/LmZvckVhY2goKGNhcmQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNhcmRDb25maWc6IFJlc2l6YWJsZUNhcmRJdGVtQ29uZmlnID0ge307XG4gICAgICAgICAgICBjYXJkQ29uZmlnLmNhcmRXaWR0aENvbFNwYW4gPSBjYXJkLmNhcmRXaWR0aENvbFNwYW47XG4gICAgICAgICAgICBjYXJkQ29uZmlnLmNhcmRIZWlnaHRSb3dTcGFuID0gY2FyZC5jYXJkSGVpZ2h0Um93U3BhbjtcbiAgICAgICAgICAgIGNhcmRDb25maWcucmFuayA9IGNhcmQucmFuaztcbiAgICAgICAgICAgIGNhcmRDb25maWcudGl0bGUgPSBjYXJkLnRpdGxlO1xuICAgICAgICAgICAgY2FyZENvbmZpZy5jYXJkTWluaUNvbnRlbnRSb3dTcGFuID0gY2FyZC5jYXJkTWluaUNvbnRlbnRSb3dTcGFuO1xuICAgICAgICAgICAgY2FyZENvbmZpZy5jYXJkTWluaUhlYWRlclJvd1NwYW4gPSBjYXJkLmNhcmRNaW5pSGVhZGVyUm93U3BhbjtcbiAgICAgICAgICAgIGNhcmRDb25maWcucmVzaXphYmxlID0gY2FyZC5yZXNpemFibGU7XG4gICAgICAgICAgICBsYXRlc3RDYXJkQ29uZmlnLnB1c2goY2FyZENvbmZpZyk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmxheW91dENoYW5nZS5lbWl0KGxhdGVzdENhcmRDb25maWcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gU2V0cyBudW1iZXIgb2YgY29sdW1uIGluIGxheW91dCwgYmFzZWQgb24gTGF5b3V0U2l6ZSBwYXNzZWRcbiAgICAgKiBAcGFyYW0gbGF5b3V0U2l6ZSB7J3NtJyB8ICdtZCcgfCAnbGcnIHwgJ3hsJ31cbiAgICAgKi9cbiAgICBwcml2YXRlIF9zZXRMYXlvdXRDb2x1bW5zKGxheW91dFNpemU6IExheW91dFNpemUpOiB2b2lkIHtcbiAgICAgICAgbGV0IGxheW91dFdpZHRoRGVmYXVsdDogbnVtYmVyO1xuXG4gICAgICAgIHN3aXRjaCAobGF5b3V0U2l6ZSkge1xuICAgICAgICAgICAgY2FzZSAnc20nOlxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbHVtbnMgPSAxO1xuICAgICAgICAgICAgICAgIHRoaXMuX3BhZGRpbmdMZWZ0ID0gODtcbiAgICAgICAgICAgICAgICBsYXlvdXRXaWR0aERlZmF1bHQgPSB0aGlzLl9jb2x1bW5zICogaG9yaXpvbnRhbFJlc2l6ZVN0ZXAgKyAyICogdGhpcy5fcGFkZGluZ0xlZnQ7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXlvdXRXaWR0aCA9IGxheW91dFdpZHRoRGVmYXVsdDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21kJzpcbiAgICAgICAgICAgICAgICB0aGlzLl9jb2x1bW5zID0gMjtcbiAgICAgICAgICAgICAgICB0aGlzLl9wYWRkaW5nTGVmdCA9IDE2O1xuICAgICAgICAgICAgICAgIGxheW91dFdpZHRoRGVmYXVsdCA9IHRoaXMuX2NvbHVtbnMgKiBob3Jpem9udGFsUmVzaXplU3RlcCArIDIgKiB0aGlzLl9wYWRkaW5nTGVmdDtcbiAgICAgICAgICAgICAgICB0aGlzLmxheW91dFdpZHRoID0gbGF5b3V0V2lkdGhEZWZhdWx0ICsgZ2FwO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbGcnOlxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbHVtbnMgPSAzO1xuICAgICAgICAgICAgICAgIHRoaXMuX3BhZGRpbmdMZWZ0ID0gMTY7XG4gICAgICAgICAgICAgICAgbGF5b3V0V2lkdGhEZWZhdWx0ID0gdGhpcy5fY29sdW1ucyAqIGhvcml6b250YWxSZXNpemVTdGVwICsgMiAqIHRoaXMuX3BhZGRpbmdMZWZ0O1xuICAgICAgICAgICAgICAgIHRoaXMubGF5b3V0V2lkdGggPSBsYXlvdXRXaWR0aERlZmF1bHQgKyAyICogZ2FwO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAneGwnOlxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbHVtbnMgPSA0O1xuICAgICAgICAgICAgICAgIHRoaXMuX3BhZGRpbmdMZWZ0ID0gNDg7XG4gICAgICAgICAgICAgICAgbGF5b3V0V2lkdGhEZWZhdWx0ID0gdGhpcy5fY29sdW1ucyAqIGhvcml6b250YWxSZXNpemVTdGVwICsgMiAqIHRoaXMuX3BhZGRpbmdMZWZ0O1xuICAgICAgICAgICAgICAgIHRoaXMubGF5b3V0V2lkdGggPSBsYXlvdXRXaWR0aERlZmF1bHQgKyAzICogZ2FwO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aGlzLl9jb2x1bW5zID0gNDtcbiAgICAgICAgICAgICAgICB0aGlzLl9wYWRkaW5nTGVmdCA9IDQ4O1xuICAgICAgICAgICAgICAgIGxheW91dFdpZHRoRGVmYXVsdCA9IHRoaXMuX2NvbHVtbnMgKiBob3Jpem9udGFsUmVzaXplU3RlcCArIDIgKiB0aGlzLl9wYWRkaW5nTGVmdDtcbiAgICAgICAgICAgICAgICB0aGlzLmxheW91dFdpZHRoID0gbGF5b3V0V2lkdGhEZWZhdWx0ICsgMyAqIGdhcDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gTWV0aG9kIHRvIGhhbmRsZSBjYXJkIHZlcnRpY2FsIHJlc2l6ZSBhbmQgdHJpZ2dlciB0aGUgbGF5b3V0IGNoYW5nZVxuICAgICAqIEBwYXJhbSBldmVudCB7UmVzaXplZEV2ZW50fVxuICAgICAqL1xuICAgIHByaXZhdGUgX2hhbmRsZVZlcnRpY2FsUmVzaXplKGV2ZW50OiBSZXNpemVkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKGV2ZW50LmNhcmQuY2FyZEhlaWdodFJvd1NwYW4gIT09IGV2ZW50LmNhcmQucHJldmlvdXNDYXJkSGVpZ2h0Um93U3Bhbikge1xuICAgICAgICAgICAgdGhpcy5hcnJhbmdlQ2FyZHModGhpcy5fc29ydGVkQ2FyZHMpO1xuICAgICAgICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB0aGlzLnN0ZXBDaGFuZ2UuZW1pdChldmVudC5jYXJkLmdldFJlc2l6ZWRFdmVudE9iamVjdCgpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gTWV0aG9kIHRvIGhhbmRsZSBjYXJkIGhvcml6b250YWwgcmVzaXplIGFuZCB0cmlnZ2VyIHRoZSBsYXlvdXQgY2hhbmdlXG4gICAgICogQHBhcmFtIGV2ZW50IHtSZXNpemVkRXZlbnR9XG4gICAgICovXG4gICAgcHJpdmF0ZSBfaGFuZGxlSG9yaXpvbnRhbFJlc2l6ZShldmVudDogUmVzaXplZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIC8vIHdoZW4gaW5jcmVhc2luZyB3aWR0aCBoaXQgdGhlIG9mZnNldCwgc2hvdyBleHRlbmRlZCBib3JkZXIgYW5kIHN0YXJ0IHB1c2hpbmcgZG93biBib3JkZXIgY2FyZHNcbiAgICAgICAgLy8gd2hlbiB3aWR0aCBpcyBkZWNyZWFzaW5nICwgc2hvdyBleHRlbmRlZCBib3JkZXIgdGlsbCBpdCByZWFjaGVzIHRvIG9mZnNldC5cbiAgICAgICAgY29uc3QgY2FyZFdpZHRoQ2hhbmdlID0gZXZlbnQuY2FyZFdpZHRoIC0gZXZlbnQucHJldkNhcmRXaWR0aDtcbiAgICAgICAgY29uc3QgY3VycmVudFJlc2l6aW5nSXRlbUluZGV4ID0gdGhpcy5fc29ydGVkQ2FyZHM/LmZpbmRJbmRleCgoeCkgPT4geC5yYW5rID09PSBldmVudC5jYXJkLnJhbmspO1xuXG4gICAgICAgIGlmIChldmVudC5jYXJkV2lkdGggPiBldmVudC5wcmV2Q2FyZFdpZHRoKSB7XG4gICAgICAgICAgICAvLyB3aGVuIGluY3JlYXNpbmcgc2l6ZVxuICAgICAgICAgICAgLy8gY2FyZCB3aWR0aCBpbmNyZWFzaW5nIGN1cnJlbnRseVxuICAgICAgICAgICAgaWYgKGV2ZW50LmNhcmQuY2FyZFN0YXRlID09PSAxICYmIGNhcmRXaWR0aENoYW5nZSA+IGhvcml6b250YWxSZXNpemVPZmZzZXQgKyBnYXAgJiYgIXRoaXMuX2xheW91dFNoaWZ0ZWQpIHtcbiAgICAgICAgICAgICAgICAvLyBpbmRleCBvZiB0aGlzIGNhcmQsIHRoZW4gZ2V0IG5leHQgY2FyZC4gZXhjaGFuZ2UgcmFua3NcbiAgICAgICAgICAgICAgICB0aGlzLl9zb3J0ZWRDYXJkcy5mb3JFYWNoKChjYXJkOiBSZXNpemFibGVDYXJkSXRlbUNvbXBvbmVudCwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiBjdXJyZW50UmVzaXppbmdJdGVtSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZXJlIGFyZSBzb21lIGNhcmRzIG9uIHNhbWUgaGVpZ2h0LiBtYWtlIHRoZSBjdXJyZW50IGNhcmQgcmFuayBoaWdoZXIgdGhhbiB0aGVzZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZSBuZXh0IGluZGV4IHdoZXJlIGl0IHdpbGwgZml0LiB1bnRpbCBhbnkgY2FyZCBoYXMgbGVzcyBjb2x1bW4gc3BhbiB0aGFuIHRvdGFsIGNvbHVtbnNcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIG9ubHkgaW4gbmV4dCB0b3AsIG9uZSBjYXJkIGlzIHRha2luZyBmdWxsIGNvbHVtbnNcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJkLnN0YXJ0aW5nQ29sdW1uUG9zaXRpb24gKyBjYXJkLmNhcmRXaWR0aENvbFNwYW4gPT09IHRoaXMuX2NvbHVtbnMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJkLmNhcmRXaWR0aENvbFNwYW4gIT09IHRoaXMuX2NvbHVtbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdldCBjYXJkcyB3aXRoIHRvcCA+IGN1cnJlbnQgdG9wICwgYnV0IG1pbmltdW0gb2YgaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBleGNoYW5nZSByYW5rIHdpdGggdGhlc2UgY2FyZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21vdmVDYXJkRG93bihpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLl9sYXlvdXRTaGlmdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmFycmFuZ2VDYXJkcyh0aGlzLl9zb3J0ZWRDYXJkcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGVwQ2hhbmdlLmVtaXQoZXZlbnQuY2FyZC5nZXRSZXNpemVkRXZlbnRPYmplY3QoKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIGV2ZW50LmNhcmQuY2FyZFN0YXRlID09PSAtMSAmJlxuICAgICAgICAgICAgICAgIGNhcmRXaWR0aENoYW5nZSA8IGhvcml6b250YWxSZXNpemVPZmZzZXQgKyBnYXAgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9sYXlvdXRTaGlmdGVkXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAvLyBjYXJkIHdpZHRoIGRlY3JlYXNpbmcgY3VycmVudGx5XG4gICAgICAgICAgICAgICAgLy8gbW92ZSB1cCB0aGUgY2FyZHMsIGlmIGl0IHdhcyBzaGlmdGVkIHdoaWxlIGluY3JlYXNpbmcgdGhlIHdpZHRoXG4gICAgICAgICAgICAgICAgdGhpcy5fc29ydGVkQ2FyZHMuZm9yRWFjaCgoY2FyZDogUmVzaXphYmxlQ2FyZEl0ZW1Db21wb25lbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY2FyZC5yYW5rID0gY2FyZC5wcmV2UmFuayA/IGNhcmQucHJldlJhbmsgOiBjYXJkLnJhbms7XG4gICAgICAgICAgICAgICAgICAgIGNhcmQucHJldlJhbmsgPSAwO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuX2xheW91dFNoaWZ0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmFycmFuZ2VDYXJkcyh0aGlzLl9zb3J0ZWRDYXJkcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGVwQ2hhbmdlLmVtaXQoZXZlbnQuY2FyZC5nZXRSZXNpemVkRXZlbnRPYmplY3QoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuY2FyZFdpZHRoIDwgZXZlbnQucHJldkNhcmRXaWR0aCkge1xuICAgICAgICAgICAgLy8gd2hlbiBkZWNyZWFzaW5nIHNpemVcbiAgICAgICAgICAgIGlmIChldmVudC5jYXJkLmNhcmRTdGF0ZSA9PT0gLTEgJiYgLWNhcmRXaWR0aENoYW5nZSA+IGhvcml6b250YWxSZXNpemVPZmZzZXQgJiYgIXRoaXMuX2xheW91dFNoaWZ0ZWQpIHtcbiAgICAgICAgICAgICAgICAvLyBjYXJkIHdpZHRoIGRlY3JlYXNpbmcgY3VycmVudGx5XG4gICAgICAgICAgICAgICAgdGhpcy5fbGF5b3V0U2hpZnRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5hcnJhbmdlQ2FyZHModGhpcy5fc29ydGVkQ2FyZHMpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RlcENoYW5nZS5lbWl0KGV2ZW50LmNhcmQuZ2V0UmVzaXplZEV2ZW50T2JqZWN0KCkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5jYXJkLmNhcmRTdGF0ZSA9PT0gMSAmJiAtY2FyZFdpZHRoQ2hhbmdlIDwgaG9yaXpvbnRhbFJlc2l6ZU9mZnNldCAmJiB0aGlzLl9sYXlvdXRTaGlmdGVkKSB7XG4gICAgICAgICAgICAgICAgLy8gY2FyZCB3aWR0aCBpbmNyZWFzaW5nIGN1cnJlbnRseVxuICAgICAgICAgICAgICAgIHRoaXMuX2xheW91dFNoaWZ0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmFycmFuZ2VDYXJkcyh0aGlzLl9zb3J0ZWRDYXJkcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGVwQ2hhbmdlLmVtaXQoZXZlbnQuY2FyZC5nZXRSZXNpemVkRXZlbnRPYmplY3QoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIE1ldGhvZCB0byBtb3ZlIGNhcmQgZG93biwgd2hlbiBhbm90aGVyIGNhcmQgd2lkdGggaXMgaW5jcmVhc2luZ1xuICAgICAqIE1ldGhvZCB0byBsb29wIHRpbGwgdGhpcy5fY29sdW1ucyAtMSBwb3NpdGlvbnMgYW5kIGV4Y2hhbmdlIHRoZSByYW5rXG4gICAgICogQHBhcmFtIGN1cnJlbnRDYXJkSW5kZXggSW5kZXggb2YgY3VycmVudCBjYXJkXG4gICAgICovXG4gICAgcHJpdmF0ZSBfbW92ZUNhcmREb3duKGN1cnJlbnRDYXJkSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICAvLyB0YWtpbmcgd2lkdGggb2YgYWRqYWNlbnQgY2FyZCBjb2wtc3BhbiBpbnRvIGFjY291bnRcblxuICAgICAgICAvLyBlZzogNCBjb2x1bW5zIC0gMiBjb2woYWRqYWNlbnQgY2FyZCkgPSAyIHBvc2l0aW9ucyBjYW4gZXhjaGFuZ2UgcmFua3NcbiAgICAgICAgY29uc3QgY3VycmVudENhcmQ6IFJlc2l6YWJsZUNhcmRJdGVtQ29tcG9uZW50ID0gdGhpcy5fc29ydGVkQ2FyZHNbY3VycmVudENhcmRJbmRleF07XG4gICAgICAgIGxldCBjYXJkOiBSZXNpemFibGVDYXJkSXRlbUNvbXBvbmVudDtcblxuICAgICAgICAvLyB1bm9jY3VwaWVkUG9zaXRpb25zIHBvc2l0aW9ucyBsZWZ0IGFmdGVyIGN1cnJlbnRDYXJkIG9jY3VwaWVzIGluIG5leHQgcm93LlxuICAgICAgICBsZXQgdW5vY2N1cGllZFBvc2l0aW9ucyA9IHRoaXMuX2NvbHVtbnMgLSBjdXJyZW50Q2FyZC5jYXJkV2lkdGhDb2xTcGFuO1xuXG4gICAgICAgIGN1cnJlbnRDYXJkLnByZXZSYW5rID0gY3VycmVudENhcmQucmFuaztcblxuICAgICAgICBsZXQgaW5kZXggPSAxO1xuICAgICAgICB3aGlsZSAodW5vY2N1cGllZFBvc2l0aW9ucyA+IDApIHtcbiAgICAgICAgICAgIC8vIGNvbXBhcmUgZnJvbSBuZXh0IGNhcmRcbiAgICAgICAgICAgIGNhcmQgPSB0aGlzLl9zb3J0ZWRDYXJkc1tpbmRleCArIGN1cnJlbnRDYXJkSW5kZXhdO1xuICAgICAgICAgICAgaWYgKGNhcmQgJiYgdW5vY2N1cGllZFBvc2l0aW9ucyA+PSBjYXJkLmNhcmRXaWR0aENvbFNwYW4pIHtcbiAgICAgICAgICAgICAgICBjYXJkLnByZXZSYW5rID0gY2FyZC5yYW5rO1xuICAgICAgICAgICAgICAgIGNhcmQucmFuayAtPSAxO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRDYXJkLnJhbmsgPSBjYXJkLnByZXZSYW5rO1xuICAgICAgICAgICAgICAgIHVub2NjdXBpZWRQb3NpdGlvbnMgLT0gY2FyZC5jYXJkV2lkdGhDb2xTcGFuO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB1bm9jY3VwaWVkUG9zaXRpb25zID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGluZGV4ICs9IDE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIHVwZGF0ZXMgYXJyYXkgd2l0aCBuZXcgY29sdW1uIGhlaWdodHNcbiAgICAgKiBAcGFyYW0gY2FyZCB7UmVzaXphYmxlQ2FyZEl0ZW1Db21wb25lbnR9XG4gICAgICovXG4gICAgcHJpdmF0ZSBfdXBkYXRlQ29sdW1uc0hlaWdodChjYXJkOiBSZXNpemFibGVDYXJkSXRlbUNvbXBvbmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBkaXJlY3Rpb25Qb3NpdGlvbiA9IHRoaXMuX2RpcmVjdGlvblBvc2l0aW9uJCgpO1xuICAgICAgICBjb25zdCBjb2x1bW5zU3RhcnQgPVxuICAgICAgICAgICAgY2FyZFtkaXJlY3Rpb25Qb3NpdGlvbl0gIT0gbnVsbCA/IE1hdGguZmxvb3IoY2FyZFtkaXJlY3Rpb25Qb3NpdGlvbl0hIC8gaG9yaXpvbnRhbFJlc2l6ZVN0ZXApIDogMDtcblxuICAgICAgICAvLyBHZXQgd2lkdGggb2YgY3VycmVudCBjYXJkIHJlc2l6aW5nIGFuZCBhc3NpZ24gd2lkdGggaGVyZSBmb3IgdGhhdCBjYXJkXG4gICAgICAgIGNvbnN0IGNhcmRCYXNlQ29sU3BhbiA9IE1hdGguZmxvb3IoY2FyZC5jYXJkV2lkdGggLyBob3Jpem9udGFsUmVzaXplU3RlcCk7XG5cbiAgICAgICAgLy8gdGlsbCB3aGljaCBjb2x1bW5zIGNhcmQgc3BhbnNcbiAgICAgICAgY29uc3QgY29sdW1uc1NwYW4gPVxuICAgICAgICAgICAgY2FyZC5jYXJkV2lkdGggLSBjYXJkQmFzZUNvbFNwYW4gKiBob3Jpem9udGFsUmVzaXplU3RlcCAtIGNhcmRCYXNlQ29sU3BhbiAqIGdhcCA+IGhvcml6b250YWxSZXNpemVPZmZzZXRcbiAgICAgICAgICAgICAgICA/IGNhcmRCYXNlQ29sU3BhbiArIDFcbiAgICAgICAgICAgICAgICA6IGNhcmRCYXNlQ29sU3BhbjtcblxuICAgICAgICBjb25zdCBjb2x1bW5IZWlnaHQgPSBjYXJkLmNhcmRIZWlnaHQgKyBjYXJkLnRvcDtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbHVtbnNTcGFuOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbHVtbnNIZWlnaHRbaSArIGNvbHVtbnNTdGFydF0gPSBjb2x1bW5IZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29sdW1uc1N0YXJ0ID09PSBjb2x1bW5zU3Bhbikge1xuICAgICAgICAgICAgdGhpcy5fY29sdW1uc0hlaWdodFtjb2x1bW5zU3RhcnRdID0gY29sdW1uSGVpZ2h0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBUcnkgdG8gc2V0IGNhcmQgYXQgYXZhaWxhYmxlIGhlaWdodHNcbiAgICAgKiBAcGFyYW0gY2FyZCBSZXNpemFibGVDYXJkSXRlbUNvbXBvbmVudFxuICAgICAqIEBwYXJhbSBpbmRleCB2YWx1ZSBvZiBjYXJkIGluIGFycmF5IG9mIFJlc2l6YWJsZUNhcmRJdGVtQ29tcG9uZW50XG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2V0Q2FyZFBvc2l0aW9uVmFsdWVzKGNhcmQ6IFJlc2l6YWJsZUNhcmRJdGVtQ29tcG9uZW50LCBpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRpcmVjdGlvblBvc2l0aW9uID0gdGhpcy5fZGlyZWN0aW9uUG9zaXRpb24kKCk7XG4gICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgY2FyZFtkaXJlY3Rpb25Qb3NpdGlvbl0gPSAwICsgdGhpcy5fcGFkZGluZ0xlZnQ7XG4gICAgICAgICAgICBjYXJkLnRvcCA9IDA7XG4gICAgICAgICAgICBjYXJkLnN0YXJ0aW5nQ29sdW1uUG9zaXRpb24gPSAwO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdW5pcXVlSGVpZ2h0cyA9IHRoaXMuX2dldFNvcnRlZFVuaXF1ZUhlaWdodHMoKTtcbiAgICAgICAgbGV0IGNhcmRQb3NpdGlvbmVkID0gZmFsc2U7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB1bmlxdWVIZWlnaHRzLmxlbmd0aCAmJiAhY2FyZFBvc2l0aW9uZWQ7IGkrKykge1xuICAgICAgICAgICAgY2FyZFBvc2l0aW9uZWQgPSB0aGlzLl9pc1Bvc2l0aW9uU2V0U3VjY2Vzcyh1bmlxdWVIZWlnaHRzW2ldLCBjYXJkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gdHJ5IHRvIHNldCBjYXJkIGF0IGdpdmVuIGhlaWdodC5cbiAgICAgKiBAcGFyYW0gaGVpZ2h0IGhlaWdodCBhdCB3aGljaCBjYXJkIGlzIGdldHRpbmcgcG9zaXRpb25lZC5cbiAgICAgKiBAcGFyYW0gY2FyZCBSZXNpemFibGVDYXJkSXRlbUNvbXBvbmVudFxuICAgICAqIEByZXR1cm5zIEl0IHJldHVybnMgdHJ1ZSB3aGVuIGNhcmQgcG9zaXRpb24gaWQgZm91bmQgb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfaXNQb3NpdGlvblNldFN1Y2Nlc3MoaGVpZ2h0OiBudW1iZXIsIGNhcmQ6IFJlc2l6YWJsZUNhcmRJdGVtQ29tcG9uZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGRpcmVjdGlvblBvc2l0aW9uID0gdGhpcy5fZGlyZWN0aW9uUG9zaXRpb24kKCk7XG4gICAgICAgIGNvbnN0IGNvbHVtblBvc2l0aW9uczogbnVtYmVyW10gPSBbXTtcbiAgICAgICAgbGV0IGluZGV4ID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBjb2x1bW5IZWlnaHQgb2YgdGhpcy5fY29sdW1uc0hlaWdodCkge1xuICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgICAgIGlmIChjb2x1bW5IZWlnaHQgPT09IGhlaWdodCkge1xuICAgICAgICAgICAgICAgIGNvbHVtblBvc2l0aW9ucy5wdXNoKGluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBjaGVjayBmb3IgZWFjaCBjYXJkIHBvc2l0aW9uLCBzdGFydGluZyBmcm9tIGxlZnRtb3N0XG4gICAgICAgIGxldCBpc0ZpdHRpbmcgPSBmYWxzZTtcbiAgICAgICAgbGV0IHN0YXJ0aW5nQ29sdW1uUG9zaXRpb24gPSAtMTtcblxuICAgICAgICAvLyB0cnkgdG8gZml0IGFzIGxlZnQgKG9yIHJpZ2h0IGlmIFJ0bCkgYXMgcG9zc2libGUgZnJvbSB0aGUgY29sdW1uIHBvc2l0aW9uXG4gICAgICAgIHN0YXJ0aW5nQ29sdW1uUG9zaXRpb24gPSB0aGlzLl9maXRDYXJkQ29sdW1uUG9zaXRpb24oY2FyZCwgY29sdW1uUG9zaXRpb25zLCBoZWlnaHQpO1xuICAgICAgICBpZiAoc3RhcnRpbmdDb2x1bW5Qb3NpdGlvbiAhPT0gLTEpIHtcbiAgICAgICAgICAgIGlzRml0dGluZyA9IHRydWU7XG4gICAgICAgICAgICBjYXJkW2RpcmVjdGlvblBvc2l0aW9uXSA9XG4gICAgICAgICAgICAgICAgc3RhcnRpbmdDb2x1bW5Qb3NpdGlvbiAqIGhvcml6b250YWxSZXNpemVTdGVwICtcbiAgICAgICAgICAgICAgICB0aGlzLl9wYWRkaW5nTGVmdCArXG4gICAgICAgICAgICAgICAgKHN0YXJ0aW5nQ29sdW1uUG9zaXRpb24gPiAwID8gZ2FwICogc3RhcnRpbmdDb2x1bW5Qb3NpdGlvbiA6IDApO1xuICAgICAgICAgICAgY2FyZC50b3AgPSBoZWlnaHQgKyAoaGVpZ2h0ID4gMCA/IHZlcnRpY2FsUmVzaXplU3RlcCA6IDApO1xuICAgICAgICAgICAgY2FyZC5zdGFydGluZ0NvbHVtblBvc2l0aW9uID0gc3RhcnRpbmdDb2x1bW5Qb3NpdGlvbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNGaXR0aW5nO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gVHJ5IHRvIHN0YXJ0IGNhcmQgcG9zaXRpb24gZnJvbSBsZWZ0IG1vc3QgZml0IHBvc2l0aW9uLlxuICAgICAqIEBwYXJhbSBjYXJkIFJlc2l6YWJsZUNhcmRJdGVtQ29tcG9uZW50XG4gICAgICogQHBhcmFtIGNvbHVtblBvc2l0aW9ucyB7QXJyYXk8bnVtYmVyPn0gQXJyYXkgb2YgYXZhaWxhYmxlIHBvc2l0aW9ucyBmb3IgY2FyZHMuXG4gICAgICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBoZWlnaHQgYXQgd2hpY2ggZml4aW5nIHRoZSBjYXJkXG4gICAgICogQHJldHVybnMge251bWJlcn0gcmV0dXJucyBzdGFydGluZyBjb2x1bW4gcG9zaXRpb24gd2hlcmUgY2FyZCB3aWxsIGZpdC5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9maXRDYXJkQ29sdW1uUG9zaXRpb24oXG4gICAgICAgIGNhcmQ6IFJlc2l6YWJsZUNhcmRJdGVtQ29tcG9uZW50LFxuICAgICAgICBjb2x1bW5Qb3NpdGlvbnM6IEFycmF5PG51bWJlcj4sXG4gICAgICAgIGhlaWdodDogbnVtYmVyXG4gICAgKTogbnVtYmVyIHtcbiAgICAgICAgLy8gY2hlY2sgZm9yIGVhY2ggY2FyZCBwb3NpdGlvbiwgc3RhcnRpbmcgZnJvbSBsZWZ0bW9zdFxuICAgICAgICBsZXQgaXNGaXR0aW5nID0gZmFsc2U7XG4gICAgICAgIGxldCBzdGFydGluZ0NvbHVtblBvc2l0aW9uID0gLTE7XG5cbiAgICAgICAgLy8gc3RhcnQgZnJvbSBwcmV2aW91cyBpbmRleGVzXG4gICAgICAgIGNvbnN0IGNhcmRCYXNlQ29sU3BhbiA9IE1hdGguZmxvb3IoY2FyZC5jYXJkV2lkdGggLyBob3Jpem9udGFsUmVzaXplU3RlcCk7XG4gICAgICAgIGNvbnN0IGNhcmRDb2xTcGFuID1cbiAgICAgICAgICAgIGNhcmQuY2FyZFdpZHRoIC0gY2FyZEJhc2VDb2xTcGFuICogaG9yaXpvbnRhbFJlc2l6ZVN0ZXAgLSBjYXJkQmFzZUNvbFNwYW4gKiBnYXAgPiBob3Jpem9udGFsUmVzaXplT2Zmc2V0XG4gICAgICAgICAgICAgICAgPyBjYXJkQmFzZUNvbFNwYW4gKyAxXG4gICAgICAgICAgICAgICAgOiBjYXJkQmFzZUNvbFNwYW47XG4gICAgICAgIC8vIHRyeSB0byBzZXQgdG93YXJkcyBsZWZ0IGZyb20gYXZhaWxhYmxlIGNhcmQgcG9zaXRpb25cbiAgICAgICAgLy8gZWcuIFsxLCAyLCAzLCA0XSBjb2x1bW5zUG9zaXRpb25zXG4gICAgICAgIGZvciAoY29uc3QgY29sdW1uUG9zaXRpb24gb2YgY29sdW1uUG9zaXRpb25zKSB7XG4gICAgICAgICAgICBpZiAoaXNGaXR0aW5nKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHN0YXJ0aW5nUG9zaXRpb24gdmFsdWVzIHdpbGwgYmUgMSwgMiwgMywgNFxuICAgICAgICAgICAgLy8gdHJ5IHRvIGZpdCBhcyBsZWZ0IGFzIHBvc3NpYmxlXG4gICAgICAgICAgICBsZXQgc3RhcnRpbmdQb3NpdGlvbiA9IGNvbHVtblBvc2l0aW9uIC0gKGNhcmRDb2xTcGFuIC0gMSk7XG4gICAgICAgICAgICBzdGFydGluZ1Bvc2l0aW9uID0gc3RhcnRpbmdQb3NpdGlvbiA+IDAgPyBzdGFydGluZ1Bvc2l0aW9uIDogMTtcblxuICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSBzdGFydGluZ1Bvc2l0aW9uOyBpbmRleCA8PSBjb2x1bW5Qb3NpdGlvbiAmJiAhaXNGaXR0aW5nOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgc3BhbiA9IDA7IHNwYW4gPCBjYXJkQ29sU3Bhbjsgc3BhbisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jb2x1bW5zSGVpZ2h0W2luZGV4ICsgc3BhbiAtIDFdIDw9IGhlaWdodCAmJiBjYXJkQ29sU3BhbiArIGluZGV4IC0gMSA8PSB0aGlzLl9jb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc0ZpdHRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRpbmdDb2x1bW5Qb3NpdGlvbiA9IGluZGV4IC0gMTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRml0dGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRpbmdDb2x1bW5Qb3NpdGlvbiA9IC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0YXJ0aW5nQ29sdW1uUG9zaXRpb247XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gcmV0dXJucyBzb3J0ZWQgdW5pcXVlIGhlaWdodCBvZiBjb2x1bW5zICovXG4gICAgcHJpdmF0ZSBfZ2V0U29ydGVkVW5pcXVlSGVpZ2h0cygpOiBudW1iZXJbXSB7XG4gICAgICAgIGNvbnN0IHRlbXBBcnJheSA9IHRoaXMuX2NvbHVtbnNIZWlnaHQuc2xpY2UoKTtcbiAgICAgICAgY29uc3Qgc29ydGVkQ29sdW1uc0hlaWdodEFycmF5ID0gdGVtcEFycmF5LnNvcnQoY29tcGFyZXIpO1xuICAgICAgICBjb25zdCB1bmlxdWVIZWlnaHRzOiBudW1iZXJbXSA9IFtdO1xuXG4gICAgICAgIGZvciAoY29uc3Qgc29ydGVkSGVpZ2h0IG9mIHNvcnRlZENvbHVtbnNIZWlnaHRBcnJheSkge1xuICAgICAgICAgICAgaWYgKHVuaXF1ZUhlaWdodHMuaW5kZXhPZihzb3J0ZWRIZWlnaHQpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHVuaXF1ZUhlaWdodHMucHVzaChzb3J0ZWRIZWlnaHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGNvbXBhcmVyKGZpcnN0OiBudW1iZXIsIHNlY29uZDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgICAgIHJldHVybiBmaXJzdCAtIHNlY29uZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5pcXVlSGVpZ2h0cztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIENvbXBhcmF0b3IgdG8gc29ydCBjYXJkIGJhc2VkIG9uIHJhbmsuXG4gICAgICogQHBhcmFtIGZpcnN0Q2FyZCBSZXNpemFibGVDYXJkSXRlbUNvbXBvbmVudFxuICAgICAqIEBwYXJhbSBzZWNvbmRDYXJkIFJlc2l6YWJsZUNhcmRJdGVtQ29tcG9uZW50XG4gICAgICogQHJldHVybnMgOiByZXR1cm5zIGRpZmZlcmVuY2UgYmV0d2VlbiBmaXJzdCBjYXJkIHJhbmsgYW5kIG90aGVyIGNhcmQgcmFuay5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9zb3J0Q2FyZHMoZmlyc3RDYXJkOiBSZXNpemFibGVDYXJkSXRlbUNvbXBvbmVudCwgc2Vjb25kQ2FyZDogUmVzaXphYmxlQ2FyZEl0ZW1Db21wb25lbnQpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gZmlyc3RDYXJkLnJhbmsgLSBzZWNvbmRDYXJkLnJhbms7XG4gICAgfVxufVxuIiwiPGRpdlxuICAgICNsYXlvdXRcbiAgICBjbGFzcz1cImZkLXJlc2l6YWJsZS1jYXJkLWxheW91dFwiXG4gICAgW2NsYXNzXT1cIidmZC1yZXNpemFibGUtY2FyZC1sYXlvdXQtLScgKyBsYXlvdXRTaXplXCJcbiAgICBbc3R5bGUud2lkdGgucHhdPVwibGF5b3V0V2lkdGhcIlxuICAgIFtzdHlsZS5oZWlnaHQucHhdPVwibGF5b3V0SGVpZ2h0XCJcbj5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L2Rpdj5cbiJdfQ==
516
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXphYmxlLWNhcmQtbGF5b3V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9yZXNpemFibGUtY2FyZC1sYXlvdXQvcmVzaXphYmxlLWNhcmQtbGF5b3V0L3Jlc2l6YWJsZS1jYXJkLWxheW91dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvcmVzaXphYmxlLWNhcmQtbGF5b3V0L3Jlc2l6YWJsZS1jYXJkLWxheW91dC9yZXNpemFibGUtY2FyZC1sYXlvdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFHSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFVBQVUsRUFDVixZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsUUFBUSxFQUNSLE1BQU0sRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDeEQsT0FBTyxFQUNILDBCQUEwQixFQUcxQixHQUFHLEVBQ0gsc0JBQXNCLEVBQ3RCLG9CQUFvQixFQUNwQixrQkFBa0IsRUFDckIsTUFBTSxxREFBcUQsQ0FBQzs7O0FBYTdELE1BQU0sT0FBTyw0QkFBNEI7SUFrRXJDLGNBQWM7SUFDZCxZQUNxQixHQUFzQixFQUN2QixVQUFzQixFQUNULFdBQXVCO1FBRm5DLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3ZCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDVCxnQkFBVyxHQUFYLFdBQVcsQ0FBWTtR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LFVBQVU7c0JBRFQsTUFBTTtnQkFLUCxRQUFRO3NCQURQLE1BQU07Z0JBS1AsT0FBTztzQkFETixNQUFNO2dCQUtQLGlCQUFpQjtzQkFEaEIsTUFBTTtnQkFLUCxrQkFBa0I7c0JBRGpCLE1BQU07Z0JBS1AsWUFBWTtzQkFEWCxNQUFNO2dCQUtQLGVBQWU7c0JBRGQsZUFBZTt1QkFBQywwQkFBMEI7Z0JBNkMzQyxjQUFjO3NCQURiLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQWNuQyxRQUFRO3NCQURQLFlBQVk7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvY3VzS2V5TWFuYWdlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRGVzdHJveVJlZixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxuICAgIGNvbXB1dGVkLFxuICAgIGluamVjdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgUnRsU2VydmljZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7XG4gICAgUmVzaXphYmxlQ2FyZEl0ZW1Db21wb25lbnQsXG4gICAgUmVzaXphYmxlQ2FyZEl0ZW1Db25maWcsXG4gICAgUmVzaXplZEV2ZW50LFxuICAgIGdhcCxcbiAgICBob3Jpem9udGFsUmVzaXplT2Zmc2V0LFxuICAgIGhvcml6b250YWxSZXNpemVTdGVwLFxuICAgIHZlcnRpY2FsUmVzaXplU3RlcFxufSBmcm9tICcuL3Jlc2l6YWJsZS1jYXJkLWl0ZW0vcmVzaXphYmxlLWNhcmQtaXRlbS5jb21wb25lbnQnO1xuXG5leHBvcnQgdHlwZSBMYXlvdXRTaXplID0gJ3NtJyB8ICdtZCcgfCAnbGcnIHwgJ3hsJztcbmV4cG9ydCB0eXBlIFJlc2l6YWJsZUNhcmRMYXlvdXRDb25maWcgPSBBcnJheTxSZXNpemFibGVDYXJkSXRlbUNvbmZpZz47XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmQtcmVzaXphYmxlLWNhcmQtbGF5b3V0JyxcbiAgICB0ZW1wbGF0ZVVybDogJ3Jlc2l6YWJsZS1jYXJkLWxheW91dC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICcuL3Jlc2l6YWJsZS1jYXJkLWxheW91dC5jb21wb25lbnQuc2NzcycsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIFJlc2l6YWJsZUNhcmRMYXlvdXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XG4gICAgLyoqIE9iamVjdCBmb3Igc2V0dGluZyBlYWNoIGNhcmQgcHJvcGVydHkgKi9cbiAgICBASW5wdXQoKVxuICAgIGxheW91dENvbmZpZzogUmVzaXphYmxlQ2FyZExheW91dENvbmZpZztcblxuICAgIC8qKiBFbWl0cyB3aGVuIGNhcmQgcmVzaXplIGlzIHJlYWNoZWQgdG8gb25lIG5ldyBzdGVwIGluIGhvcml6b250YWwgb3IgdmVydGljYWwgZGlyZWN0aW9uICovXG4gICAgQE91dHB1dCgpXG4gICAgc3RlcENoYW5nZTogRXZlbnRFbWl0dGVyPFJlc2l6ZWRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlc2l6ZWRFdmVudD4oKTtcblxuICAgIC8qKiBFbWl0cyB3aGVuIGNhcmQgaXMgc3RpbGwgcmVzaXppbmcgKi9cbiAgICBAT3V0cHV0KClcbiAgICByZXNpemluZzogRXZlbnRFbWl0dGVyPFJlc2l6ZWRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlc2l6ZWRFdmVudD4oKTtcblxuICAgIC8qKiBFbWl0cyB3aGVuIGNhcmQgcmVzaXplIGlzIGNvbXBsZXRlZCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlc2l6ZWQ6IEV2ZW50RW1pdHRlcjxSZXNpemVkRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZXNpemVkRXZlbnQ+KCk7XG5cbiAgICAvKiogRW1pdHMgd2hlbiBjYXJkIGhlaWdodCBpcyByZWR1Y2VkIHRvIHNob3cgb25seSBoZWFkZXIgKi9cbiAgICBAT3V0cHV0KClcbiAgICBtaW5pSGVhZGVyUmVhY2hlZDogRXZlbnRFbWl0dGVyPFJlc2l6ZWRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlc2l6ZWRFdmVudD4oKTtcblxuICAgIC8qKiBFbWl0cyB3aGVuIG1pbmltdW0gaGVpZ2h0IG9mIGNhcmQgY29udGVudCBhcmVhIGlzIHJlYWNoZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICBtaW5pQ29udGVudFJlYWNoZWQ6IEV2ZW50RW1pdHRlcjxSZXNpemVkRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZXNpemVkRXZlbnQ+KCk7XG5cbiAgICAvKiogRW1pdHMgd2hlbiBsYXlvdXQgY2hhbmdlcyAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGxheW91dENoYW5nZTogRXZlbnRFbWl0dGVyPFJlc2l6YWJsZUNhcmRMYXlvdXRDb25maWc+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZXNpemFibGVDYXJkTGF5b3V0Q29uZmlnPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkcmVuKFJlc2l6YWJsZUNhcmRJdGVtQ29tcG9uZW50KVxuICAgIHJlc2l6ZUNhcmRJdGVtczogUXVlcnlMaXN0PFJlc2l6YWJsZUNhcmRJdGVtQ29tcG9uZW50PjtcblxuICAgIC8qKiB3aWR0aCBmb3IgbGF5b3V0ICovXG4gICAgbGF5b3V0V2lkdGg6IG51bWJlcjtcblxuICAgIC8qKiBoZWlnaHQgZm9yIGxheW91dCAqL1xuICAgIGxheW91dEhlaWdodDogbnVtYmVyO1xuXG4gICAgLyoqIEBoaWRkZW4gTnVtYmVyIG9mIGNvbHVtbnMgaW4gbGF5b3V0LiBjb25zaWRlcmluZyAxIGNvbHVtbiB3aWR0aCAyMHJlbSAqL1xuICAgIHByaXZhdGUgX2NvbHVtbnM6IG51bWJlcjtcblxuICAgIC8qKiBAaGlkZGVuIExheW91dCBwYWRkaW5nLiB3aWxsIGJlIGFkZGVkIHRvIGZpcnN0IGNhcmQgcGFkZGluZyBpbiBldmVyeSByb3cgKi9cbiAgICBwcml2YXRlIF9wYWRkaW5nTGVmdDogbnVtYmVyO1xuXG4gICAgLyoqIEBoaWRkZW4gU3RvcmVzIGhlaWdodCBvZiBlYWNoIGNvbHVtbiBvbiBjYXJkIGFycmFuZ2VtZW50ICovXG4gICAgcHJpdmF0ZSBfY29sdW1uc0hlaWdodDogQXJyYXk8bnVtYmVyPjtcblxuICAgIC8qKiBAaGlkZGVuIEF2YWlsYWJsZSBzY3JlZW4gbGF5b3V0ICovXG4gICAgcHJpdmF0ZSBfbGF5b3V0OiBMYXlvdXRTaXplO1xuXG4gICAgLyoqIEBoaWRkZW4gU3RvcmVzIHNvcnRlZCBjYXJkIGJlZm9yZSBwbGFjaW5nIGluIGxheW91dCAqL1xuICAgIHByaXZhdGUgX3NvcnRlZENhcmRzOiBBcnJheTxSZXNpemFibGVDYXJkSXRlbUNvbXBvbmVudD47XG5cbiAgICAvKiogQGhpZGRlbiBGb2N1c0tleU1hbmFnZXIgaW5zdGFuY2UgKi9cbiAgICBwcml2YXRlIF9rZXlib2FyZEV2ZW50c01hbmFnZXI6IEZvY3VzS2V5TWFuYWdlcjxSZXNpemFibGVDYXJkSXRlbUNvbXBvbmVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xheW91dFNoaWZ0ZWQgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZGlyZWN0aW9uUG9zaXRpb24kID0gY29tcHV0ZWQ8J2xlZnQnIHwgJ3JpZ2h0Jz4oKCkgPT4gKHRoaXMuX3J0bFNlcnZpY2U/LnJ0bFNpZ25hbCgpID8gJ3JpZ2h0JyA6ICdsZWZ0JykpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBfcnRsU2VydmljZTogUnRsU2VydmljZVxuICAgICkge31cblxuICAgIC8qKiBAaGlkZGVuIGhhbmRsZXMga2V5Ym9hcmQgYWNjZXNzaWJpbGl0eSAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICAgIF9oYW5kbGVLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICBpZiAoIXRoaXMuX2tleWJvYXJkRXZlbnRzTWFuYWdlci5hY3RpdmVJdGVtSW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMuX2tleWJvYXJkRXZlbnRzTWFuYWdlci5zZXRGaXJzdEl0ZW1BY3RpdmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9rZXlib2FyZEV2ZW50c01hbmFnZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX2tleWJvYXJkRXZlbnRzTWFuYWdlci5vbktleWRvd24oZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJylcbiAgICBvblJlc2l6ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY3JlYXRlTGF5b3V0KCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY29sdW1uc0hlaWdodCA9IG5ldyBBcnJheSh0aGlzLl9jb2x1bW5zKTtcbiAgICAgICAgdGhpcy5fY29sdW1uc0hlaWdodC5maWxsKDApO1xuICAgICAgICAvLyBpbml0aWFsaXNlIHZhbHVlIDBcbiAgICAgICAgLy8gZGV0ZWN0IGluaXRpYWwgd2luZG93IHNpemUgYW5kIHNldCBsYXlvdXRcbiAgICAgICAgdGhpcy5fY3JlYXRlTGF5b3V0KCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2luaXRpYWxTZXR1cCgpO1xuICAgICAgICAvLyBsaXN0ZW4gZm9yIHF1ZXJ5LWxpc3QgY2hhbmdlXG4gICAgICAgIHRoaXMucmVzaXplQ2FyZEl0ZW1zPy5mb3JFYWNoKChjYXJkKSA9PiB7XG4gICAgICAgICAgICBjYXJkPy52ZXJpZnlVcGRhdGVDYXJkV2lkdGgodGhpcy5sYXlvdXRTaXplKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5yZXNpemVDYXJkSXRlbXMuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hcnJhbmdlQ2FyZHModGhpcy5yZXNpemVDYXJkSXRlbXM/LnRvQXJyYXkoKSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFycmFuZ2VDYXJkcyh0aGlzLnJlc2l6ZUNhcmRJdGVtcz8udG9BcnJheSgpKTtcbiAgICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2FjY2Vzc2liaWxpdHlTZXR1cCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2tleWJvYXJkRXZlbnRzTWFuYWdlcj8uZGVzdHJveSgpO1xuICAgIH1cblxuICAgIC8qKiBMYXlvdXQgc2l6ZS4gQXZhaWxhYmxlIG9wdGlvbnMgYXJlICdzbScsICdtZCcsICdsZycgYW5kICd4bCcgKi9cbiAgICBzZXQgbGF5b3V0U2l6ZShsYXlvdXRTaXplOiBMYXlvdXRTaXplKSB7XG4gICAgICAgIHRoaXMuX2xheW91dCA9IGxheW91dFNpemU7XG4gICAgfVxuICAgIGdldCBsYXlvdXRTaXplKCk6IExheW91dFNpemUge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGF5b3V0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFycmFuZ2VzIGNhcmRzIGluIGxheW91dCBiYXNlZCBvbiByYW5rLCB3aWR0aCBhbmQgaGVpZ2h0IG9mIGNhcmRcbiAgICAgKiBAcGFyYW0gY2FyZHMgQXJyYXkgb2YgUmVzaXphYmxlQ2FyZEl0ZW1Db21wb25lbnRcbiAgICAgKi9cbiAgICBhcnJhbmdlQ2FyZHMoY2FyZHM6IEFycmF5PFJlc2l6YWJsZUNhcmRJdGVtQ29tcG9uZW50Pik6IHZvaWQge1xuICAgICAgICB0aGlzLl9jb2x1bW5zSGVpZ2h0ID0gbmV3IEFycmF5KHRoaXMuX2NvbHVtbnMpO1xuICAgICAgICB0aGlzLl9jb2x1bW5zSGVpZ2h0LmZpbGwoMCk7XG4gICAgICAgIC8vIHNvcnQgYmFzZWQgb24gdGhlIGNhcmQgcmFua1xuICAgICAgICB0aGlzLl9zb3J0ZWRDYXJkcyA9IGNhcmRzPy5zb3J0KHRoaXMuX3NvcnRDYXJkcyk7XG5cbiAgICAgICAgdGhpcy5fc29ydGVkQ2FyZHM/LmZvckVhY2goKGNhcmQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9zZXRDYXJkUG9zaXRpb25WYWx1ZXMoY2FyZCwgaW5kZXgpO1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlQ29sdW1uc0hlaWdodChjYXJkKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubGF5b3V0SGVpZ2h0ID0gTWF0aC5tYXguYXBwbHkobnVsbCwgdGhpcy5fY29sdW1uc0hlaWdodCkgKyB2ZXJ0aWNhbFJlc2l6ZVN0ZXA7XG5cbiAgICAgICAgdGhpcy5fZW1pdExheW91dENoYW5nZSgpO1xuICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGVzIHNoaWZ0aW5nIG9mIGNhcmRzIHdpdGggYW5pbWF0aW9uLCB3aGlsZSBjYXJkIGlzIHN0aWxsIHJlc2l6aW5nLlxuICAgICAqIEBwYXJhbSBldmVudCB7UmVzaXplZEV2ZW50fVxuICAgICAqL1xuICAgIGNhcmRSZXNpemluZyhldmVudDogUmVzaXplZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVzaXppbmcuZW1pdChldmVudCk7XG4gICAgICAgIHRoaXMuX2hhbmRsZUhvcml6b250YWxSZXNpemUoZXZlbnQpO1xuICAgICAgICB0aGlzLl9oYW5kbGVWZXJ0aWNhbFJlc2l6ZShldmVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlcyBhcnJhbmdlbWVudCBvZiBjYXJkcyBpbiBsYXlvdXRcbiAgICAgKiBAcGFyYW0gZXZlbnQge1Jlc2l6ZWRFdmVudH1cbiAgICAgKi9cbiAgICBjYXJkUmVzaXplQ29tcGxldGUoZXZlbnQ6IFJlc2l6ZWRFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9sYXlvdXRTaGlmdGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYXJyYW5nZUNhcmRzKHRoaXMucmVzaXplQ2FyZEl0ZW1zLnRvQXJyYXkoKSk7XG4gICAgICAgIHRoaXMucmVzaXplZC5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHVwZGF0ZUxheW91dCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZXNpemVDYXJkSXRlbXM/LmZvckVhY2goKGNhcmQpID0+IHtcbiAgICAgICAgICAgIGNhcmQ/LnZlcmlmeVVwZGF0ZUNhcmRXaWR0aCh0aGlzLmxheW91dFNpemUpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hcnJhbmdlQ2FyZHModGhpcy5yZXNpemVDYXJkSXRlbXM/LnRvQXJyYXkoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogbWV0aG9kIHRvIGdldCBzY3JlZW4gd2lkdGhcbiAgICAgKiBAcmV0dXJucyBXaW5kb3cgd2lkdGggaW4gcHhcbiAgICAgKi9cbiAgICBnZXRXaWR0aEF2YWlsYWJsZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gd2luZG93LmlubmVyV2lkdGg7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gU3Vic2NyaWJlIHRvIGV2ZW50cyBmcm9tIGl0ZW1zICovXG4gICAgcHJpdmF0ZSBfaW5pdGlhbFNldHVwKCk6IHZvaWQge1xuICAgICAgICAvLyBsaXN0ZW4gZm9yIHJlc2l6aW5nIGV2ZW50IG9mIGNhcmQgaXRlbVxuICAgICAgICB0aGlzLnJlc2l6ZUNhcmRJdGVtcz8uZm9yRWFjaCgocmVzaXplQ2FyZEl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5sYXlvdXRDb25maWcgJiYgdGhpcy5sYXlvdXRDb25maWcubGVuZ3RoID49IGluZGV4ICsgMSkge1xuICAgICAgICAgICAgICAgIHJlc2l6ZUNhcmRJdGVtLmNvbmZpZyA9IHRoaXMubGF5b3V0Q29uZmlnW2luZGV4XTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVzaXplQ2FyZEl0ZW0ucmVzaXppbmdcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IFJlc2l6ZWRFdmVudCkgPT4gdGhpcy5jYXJkUmVzaXppbmcoZXZlbnQpKTtcblxuICAgICAgICAgICAgLy8gbGlzdGVuIGZvciByZXNpemUgY29tcGxldGUgZXZlbnQgb2YgY2FyZCBpdGVtXG4gICAgICAgICAgICByZXNpemVDYXJkSXRlbS5yZXNpemVkXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBSZXNpemVkRXZlbnQpID0+IHRoaXMuY2FyZFJlc2l6ZUNvbXBsZXRlKGV2ZW50KSk7XG5cbiAgICAgICAgICAgIC8vIGxpc3RlbiBmb3IgbWluaS1oZWFkZXIgaGVpZ2h0IGV2ZW50IG9mIGNhcmQgaXRlbVxuICAgICAgICAgICAgcmVzaXplQ2FyZEl0ZW0ubWluaUhlYWRlclJlYWNoZWRcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IFJlc2l6ZWRFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1pbmlIZWFkZXJSZWFjaGVkLmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0ZXBDaGFuZ2UuZW1pdChldmVudCk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIGxpc3RlbiBmb3IgbWluaS1jb250ZW50IGhlaWdodCBldmVudCBvZiBjYXJkIGl0ZW1cbiAgICAgICAgICAgIHJlc2l6ZUNhcmRJdGVtLm1pbmlDb250ZW50UmVhY2hlZFxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogUmVzaXplZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWluaUNvbnRlbnRSZWFjaGVkLmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0ZXBDaGFuZ2UuZW1pdChldmVudCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYWNjZXNzaWJpbGl0eVNldHVwKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9rZXlib2FyZEV2ZW50c01hbmFnZXI/LmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5fa2V5Ym9hcmRFdmVudHNNYW5hZ2VyID0gbmV3IEZvY3VzS2V5TWFuYWdlcih0aGlzLnJlc2l6ZUNhcmRJdGVtcykud2l0aFdyYXAoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBjcmVhdGUgbGF5b3V0IGJhc2VkIG9uIGxheW91dCBzaXplICovXG4gICAgcHJpdmF0ZSBfY3JlYXRlTGF5b3V0KCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzY3JlZW5XaWR0aCA9IHRoaXMuZ2V0V2lkdGhBdmFpbGFibGUoKTtcbiAgICAgICAgY29uc3QgcHJldkxheW91dFNpemUgPSB0aGlzLmxheW91dFNpemU7XG5cbiAgICAgICAgaWYgKHNjcmVlbldpZHRoID4gMCAmJiBzY3JlZW5XaWR0aCA8PSA2NTYgJiYgcHJldkxheW91dFNpemUgIT09ICdzbScpIHtcbiAgICAgICAgICAgIHRoaXMubGF5b3V0U2l6ZSA9ICdzbSc7XG4gICAgICAgICAgICB0aGlzLl9zZXRMYXlvdXRDb2x1bW5zKHRoaXMubGF5b3V0U2l6ZSk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUxheW91dCgpO1xuICAgICAgICB9IGVsc2UgaWYgKHNjcmVlbldpZHRoID4gNjU2ICYmIHNjcmVlbldpZHRoIDw9IDk3NSAmJiBwcmV2TGF5b3V0U2l6ZSAhPT0gJ21kJykge1xuICAgICAgICAgICAgdGhpcy5sYXlvdXRTaXplID0gJ21kJztcbiAgICAgICAgICAgIHRoaXMuX3NldExheW91dENvbHVtbnModGhpcy5sYXlvdXRTaXplKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTGF5b3V0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2NyZWVuV2lkdGggPiA5NzUgJiYgc2NyZWVuV2lkdGggPD0gMTM1OSAmJiBwcmV2TGF5b3V0U2l6ZSAhPT0gJ2xnJykge1xuICAgICAgICAgICAgdGhpcy5sYXlvdXRTaXplID0gJ2xnJztcbiAgICAgICAgICAgIHRoaXMuX3NldExheW91dENvbHVtbnModGhpcy5sYXlvdXRTaXplKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTGF5b3V0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2NyZWVuV2lkdGggPiAxMzU5ICYmIHByZXZMYXlvdXRTaXplICE9PSAneGwnKSB7XG4gICAgICAgICAgICB0aGlzLmxheW91dFNpemUgPSAneGwnO1xuICAgICAgICAgICAgdGhpcy5fc2V0TGF5b3V0Q29sdW1ucyh0aGlzLmxheW91dFNpemUpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVMYXlvdXQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEVtaXQgbGF5b3V0Q2hhbmdlIGV2ZW50IHdpdGggdXBkYXRlZCBjYXJkIGRpbWVuc2lvbnMgKi9cbiAgICBwcml2YXRlIF9lbWl0TGF5b3V0Q2hhbmdlKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBsYXRlc3RDYXJkQ29uZmlnOiBSZXNpemFibGVDYXJkTGF5b3V0Q29uZmlnID0gW107XG4gICAgICAgIHRoaXMucmVzaXplQ2FyZEl0ZW1zPy5mb3JFYWNoKChjYXJkKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjYXJkQ29uZmlnOiBSZXNpemFibGVDYXJkSXRlbUNvbmZpZyA9IHt9O1xuICAgICAgICAgICAgY2FyZENvbmZpZy5jYXJkV2lkdGhDb2xTcGFuID0gY2FyZC5jYXJkV2lkdGhDb2xTcGFuO1xuICAgICAgICAgICAgY2FyZENvbmZpZy5jYXJkSGVpZ2h0Um93U3BhbiA9IGNhcmQuY2FyZEhlaWdodFJvd1NwYW47XG4gICAgICAgICAgICBjYXJkQ29uZmlnLnJhbmsgPSBjYXJkLnJhbms7XG4gICAgICAgICAgICBjYXJkQ29uZmlnLnRpdGxlID0gY2FyZC50aXRsZTtcbiAgICAgICAgICAgIGNhcmRDb25maWcuY2FyZE1pbmlDb250ZW50Um93U3BhbiA9IGNhcmQuY2FyZE1pbmlDb250ZW50Um93U3BhbjtcbiAgICAgICAgICAgIGNhcmRDb25maWcuY2FyZE1pbmlIZWFkZXJSb3dTcGFuID0gY2FyZC5jYXJkTWluaUhlYWRlclJvd1NwYW47XG4gICAgICAgICAgICBjYXJkQ29uZmlnLnJlc2l6YWJsZSA9IGNhcmQucmVzaXphYmxlO1xuICAgICAgICAgICAgbGF0ZXN0Q2FyZENvbmZpZy5wdXNoKGNhcmRDb25maWcpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5sYXlvdXRDaGFuZ2UuZW1pdChsYXRlc3RDYXJkQ29uZmlnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIFNldHMgbnVtYmVyIG9mIGNvbHVtbiBpbiBsYXlvdXQsIGJhc2VkIG9uIExheW91dFNpemUgcGFzc2VkXG4gICAgICogQHBhcmFtIGxheW91dFNpemUgeydzbScgfCAnbWQnIHwgJ2xnJyB8ICd4bCd9XG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2V0TGF5b3V0Q29sdW1ucyhsYXlvdXRTaXplOiBMYXlvdXRTaXplKTogdm9pZCB7XG4gICAgICAgIGxldCBsYXlvdXRXaWR0aERlZmF1bHQ6IG51bWJlcjtcblxuICAgICAgICBzd2l0Y2ggKGxheW91dFNpemUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3NtJzpcbiAgICAgICAgICAgICAgICB0aGlzLl9jb2x1bW5zID0gMTtcbiAgICAgICAgICAgICAgICB0aGlzLl9wYWRkaW5nTGVmdCA9IDg7XG4gICAgICAgICAgICAgICAgbGF5b3V0V2lkdGhEZWZhdWx0ID0gdGhpcy5fY29sdW1ucyAqIGhvcml6b250YWxSZXNpemVTdGVwICsgMiAqIHRoaXMuX3BhZGRpbmdMZWZ0O1xuICAgICAgICAgICAgICAgIHRoaXMubGF5b3V0V2lkdGggPSBsYXlvdXRXaWR0aERlZmF1bHQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtZCc6XG4gICAgICAgICAgICAgICAgdGhpcy5fY29sdW1ucyA9IDI7XG4gICAgICAgICAgICAgICAgdGhpcy5fcGFkZGluZ0xlZnQgPSAxNjtcbiAgICAgICAgICAgICAgICBsYXlvdXRXaWR0aERlZmF1bHQgPSB0aGlzLl9jb2x1bW5zICogaG9yaXpvbnRhbFJlc2l6ZVN0ZXAgKyAyICogdGhpcy5fcGFkZGluZ0xlZnQ7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXlvdXRXaWR0aCA9IGxheW91dFdpZHRoRGVmYXVsdCArIGdhcDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2xnJzpcbiAgICAgICAgICAgICAgICB0aGlzLl9jb2x1bW5zID0gMztcbiAgICAgICAgICAgICAgICB0aGlzLl9wYWRkaW5nTGVmdCA9IDE2O1xuICAgICAgICAgICAgICAgIGxheW91dFdpZHRoRGVmYXVsdCA9IHRoaXMuX2NvbHVtbnMgKiBob3Jpem9udGFsUmVzaXplU3RlcCArIDIgKiB0aGlzLl9wYWRkaW5nTGVmdDtcbiAgICAgICAgICAgICAgICB0aGlzLmxheW91dFdpZHRoID0gbGF5b3V0V2lkdGhEZWZhdWx0ICsgMiAqIGdhcDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3hsJzpcbiAgICAgICAgICAgICAgICB0aGlzLl9jb2x1bW5zID0gNDtcbiAgICAgICAgICAgICAgICB0aGlzLl9wYWRkaW5nTGVmdCA9IDQ4O1xuICAgICAgICAgICAgICAgIGxheW91dFdpZHRoRGVmYXVsdCA9IHRoaXMuX2NvbHVtbnMgKiBob3Jpem9udGFsUmVzaXplU3RlcCArIDIgKiB0aGlzLl9wYWRkaW5nTGVmdDtcbiAgICAgICAgICAgICAgICB0aGlzLmxheW91dFdpZHRoID0gbGF5b3V0V2lkdGhEZWZhdWx0ICsgMyAqIGdhcDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhpcy5fY29sdW1ucyA9IDQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fcGFkZGluZ0xlZnQgPSA0ODtcbiAgICAgICAgICAgICAgICBsYXlvdXRXaWR0aERlZmF1bHQgPSB0aGlzLl9jb2x1bW5zICogaG9yaXpvbnRhbFJlc2l6ZVN0ZXAgKyAyICogdGhpcy5fcGFkZGluZ0xlZnQ7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXlvdXRXaWR0aCA9IGxheW91dFdpZHRoRGVmYXVsdCArIDMgKiBnYXA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIE1ldGhvZCB0byBoYW5kbGUgY2FyZCB2ZXJ0aWNhbCByZXNpemUgYW5kIHRyaWdnZXIgdGhlIGxheW91dCBjaGFuZ2VcbiAgICAgKiBAcGFyYW0gZXZlbnQge1Jlc2l6ZWRFdmVudH1cbiAgICAgKi9cbiAgICBwcml2YXRlIF9oYW5kbGVWZXJ0aWNhbFJlc2l6ZShldmVudDogUmVzaXplZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChldmVudC5jYXJkLmNhcmRIZWlnaHRSb3dTcGFuICE9PSBldmVudC5jYXJkLnByZXZpb3VzQ2FyZEhlaWdodFJvd1NwYW4pIHtcbiAgICAgICAgICAgIHRoaXMuYXJyYW5nZUNhcmRzKHRoaXMuX3NvcnRlZENhcmRzKTtcbiAgICAgICAgICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgdGhpcy5zdGVwQ2hhbmdlLmVtaXQoZXZlbnQuY2FyZC5nZXRSZXNpemVkRXZlbnRPYmplY3QoKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIE1ldGhvZCB0byBoYW5kbGUgY2FyZCBob3Jpem9udGFsIHJlc2l6ZSBhbmQgdHJpZ2dlciB0aGUgbGF5b3V0IGNoYW5nZVxuICAgICAqIEBwYXJhbSBldmVudCB7UmVzaXplZEV2ZW50fVxuICAgICAqL1xuICAgIHByaXZhdGUgX2hhbmRsZUhvcml6b250YWxSZXNpemUoZXZlbnQ6IFJlc2l6ZWRFdmVudCk6IHZvaWQge1xuICAgICAgICAvLyB3aGVuIGluY3JlYXNpbmcgd2lkdGggaGl0IHRoZSBvZmZzZXQsIHNob3cgZXh0ZW5kZWQgYm9yZGVyIGFuZCBzdGFydCBwdXNoaW5nIGRvd24gYm9yZGVyIGNhcmRzXG4gICAgICAgIC8vIHdoZW4gd2lkdGggaXMgZGVjcmVhc2luZyAsIHNob3cgZXh0ZW5kZWQgYm9yZGVyIHRpbGwgaXQgcmVhY2hlcyB0byBvZmZzZXQuXG4gICAgICAgIGNvbnN0IGNhcmRXaWR0aENoYW5nZSA9IGV2ZW50LmNhcmRXaWR0aCAtIGV2ZW50LnByZXZDYXJkV2lkdGg7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRSZXNpemluZ0l0ZW1JbmRleCA9IHRoaXMuX3NvcnRlZENhcmRzPy5maW5kSW5kZXgoKHgpID0+IHgucmFuayA9PT0gZXZlbnQuY2FyZC5yYW5rKTtcblxuICAgICAgICBpZiAoZXZlbnQuY2FyZFdpZHRoID4gZXZlbnQucHJldkNhcmRXaWR0aCkge1xuICAgICAgICAgICAgLy8gd2hlbiBpbmNyZWFzaW5nIHNpemVcbiAgICAgICAgICAgIC8vIGNhcmQgd2lkdGggaW5jcmVhc2luZyBjdXJyZW50bHlcbiAgICAgICAgICAgIGlmIChldmVudC5jYXJkLmNhcmRTdGF0ZSA9PT0gMSAmJiBjYXJkV2lkdGhDaGFuZ2UgPiBob3Jpem9udGFsUmVzaXplT2Zmc2V0ICsgZ2FwICYmICF0aGlzLl9sYXlvdXRTaGlmdGVkKSB7XG4gICAgICAgICAgICAgICAgLy8gaW5kZXggb2YgdGhpcyBjYXJkLCB0aGVuIGdldCBuZXh0IGNhcmQuIGV4Y2hhbmdlIHJhbmtzXG4gICAgICAgICAgICAgICAgdGhpcy5fc29ydGVkQ2FyZHMuZm9yRWFjaCgoY2FyZDogUmVzaXphYmxlQ2FyZEl0ZW1Db21wb25lbnQsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gY3VycmVudFJlc2l6aW5nSXRlbUluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGVyZSBhcmUgc29tZSBjYXJkcyBvbiBzYW1lIGhlaWdodC4gbWFrZSB0aGUgY3VycmVudCBjYXJkIHJhbmsgaGlnaGVyIHRoYW4gdGhlc2UuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2UgbmV4dCBpbmRleCB3aGVyZSBpdCB3aWxsIGZpdC4gdW50aWwgYW55IGNhcmQgaGFzIGxlc3MgY29sdW1uIHNwYW4gdGhhbiB0b3RhbCBjb2x1bW5zXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBvbmx5IGluIG5leHQgdG9wLCBvbmUgY2FyZCBpcyB0YWtpbmcgZnVsbCBjb2x1bW5zXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FyZC5zdGFydGluZ0NvbHVtblBvc2l0aW9uICsgY2FyZC5jYXJkV2lkdGhDb2xTcGFuID09PSB0aGlzLl9jb2x1bW5zICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FyZC5jYXJkV2lkdGhDb2xTcGFuICE9PSB0aGlzLl9jb2x1bW5zXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBnZXQgY2FyZHMgd2l0aCB0b3AgPiBjdXJyZW50IHRvcCAsIGJ1dCBtaW5pbXVtIG9mIGl0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXhjaGFuZ2UgcmFuayB3aXRoIHRoZXNlIGNhcmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlQ2FyZERvd24oaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbGF5b3V0U2hpZnRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5hcnJhbmdlQ2FyZHModGhpcy5fc29ydGVkQ2FyZHMpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RlcENoYW5nZS5lbWl0KGV2ZW50LmNhcmQuZ2V0UmVzaXplZEV2ZW50T2JqZWN0KCkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBldmVudC5jYXJkLmNhcmRTdGF0ZSA9PT0gLTEgJiZcbiAgICAgICAgICAgICAgICBjYXJkV2lkdGhDaGFuZ2UgPCBob3Jpem9udGFsUmVzaXplT2Zmc2V0ICsgZ2FwICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fbGF5b3V0U2hpZnRlZFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gY2FyZCB3aWR0aCBkZWNyZWFzaW5nIGN1cnJlbnRseVxuICAgICAgICAgICAgICAgIC8vIG1vdmUgdXAgdGhlIGNhcmRzLCBpZiBpdCB3YXMgc2hpZnRlZCB3aGlsZSBpbmNyZWFzaW5nIHRoZSB3aWR0aFxuICAgICAgICAgICAgICAgIHRoaXMuX3NvcnRlZENhcmRzLmZvckVhY2goKGNhcmQ6IFJlc2l6YWJsZUNhcmRJdGVtQ29tcG9uZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNhcmQucmFuayA9IGNhcmQucHJldlJhbmsgPyBjYXJkLnByZXZSYW5rIDogY2FyZC5yYW5rO1xuICAgICAgICAgICAgICAgICAgICBjYXJkLnByZXZSYW5rID0gMDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLl9sYXlvdXRTaGlmdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5hcnJhbmdlQ2FyZHModGhpcy5fc29ydGVkQ2FyZHMpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RlcENoYW5nZS5lbWl0KGV2ZW50LmNhcmQuZ2V0UmVzaXplZEV2ZW50T2JqZWN0KCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmNhcmRXaWR0aCA8IGV2ZW50LnByZXZDYXJkV2lkdGgpIHtcbiAgICAgICAgICAgIC8vIHdoZW4gZGVjcmVhc2luZyBzaXplXG4gICAgICAgICAgICBpZiAoZXZlbnQuY2FyZC5jYXJkU3RhdGUgPT09IC0xICYmIC1jYXJkV2lkdGhDaGFuZ2UgPiBob3Jpem9udGFsUmVzaXplT2Zmc2V0ICYmICF0aGlzLl9sYXlvdXRTaGlmdGVkKSB7XG4gICAgICAgICAgICAgICAgLy8gY2FyZCB3aWR0aCBkZWNyZWFzaW5nIGN1cnJlbnRseVxuICAgICAgICAgICAgICAgIHRoaXMuX2xheW91dFNoaWZ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuYXJyYW5nZUNhcmRzKHRoaXMuX3NvcnRlZENhcmRzKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0ZXBDaGFuZ2UuZW1pdChldmVudC5jYXJkLmdldFJlc2l6ZWRFdmVudE9iamVjdCgpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuY2FyZC5jYXJkU3RhdGUgPT09IDEgJiYgLWNhcmRXaWR0aENoYW5nZSA8IGhvcml6b250YWxSZXNpemVPZmZzZXQgJiYgdGhpcy5fbGF5b3V0U2hpZnRlZCkge1xuICAgICAgICAgICAgICAgIC8vIGNhcmQgd2lkdGggaW5jcmVhc2luZyBjdXJyZW50bHlcbiAgICAgICAgICAgICAgICB0aGlzLl9sYXlvdXRTaGlmdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5hcnJhbmdlQ2FyZHModGhpcy5fc29ydGVkQ2FyZHMpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RlcENoYW5nZS5lbWl0KGV2ZW50LmNhcmQuZ2V0UmVzaXplZEV2ZW50T2JqZWN0KCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBNZXRob2QgdG8gbW92ZSBjYXJkIGRvd24sIHdoZW4gYW5vdGhlciBjYXJkIHdpZHRoIGlzIGluY3JlYXNpbmdcbiAgICAgKiBNZXRob2QgdG8gbG9vcCB0aWxsIHRoaXMuX2NvbHVtbnMgLTEgcG9zaXRpb25zIGFuZCBleGNoYW5nZSB0aGUgcmFua1xuICAgICAqIEBwYXJhbSBjdXJyZW50Q2FyZEluZGV4IEluZGV4IG9mIGN1cnJlbnQgY2FyZFxuICAgICAqL1xuICAgIHByaXZhdGUgX21vdmVDYXJkRG93bihjdXJyZW50Q2FyZEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgLy8gdGFraW5nIHdpZHRoIG9mIGFkamFjZW50IGNhcmQgY29sLXNwYW4gaW50byBhY2NvdW50XG5cbiAgICAgICAgLy8gZWc6IDQgY29sdW1ucyAtIDIgY29sKGFkamFjZW50IGNhcmQpID0gMiBwb3NpdGlvbnMgY2FuIGV4Y2hhbmdlIHJhbmtzXG4gICAgICAgIGNvbnN0IGN1cnJlbnRDYXJkOiBSZXNpemFibGVDYXJkSXRlbUNvbXBvbmVudCA9IHRoaXMuX3NvcnRlZENhcmRzW2N1cnJlbnRDYXJkSW5kZXhdO1xuICAgICAgICBsZXQgY2FyZDogUmVzaXphYmxlQ2FyZEl0ZW1Db21wb25lbnQ7XG5cbiAgICAgICAgLy8gdW5vY2N1cGllZFBvc2l0aW9ucyBwb3NpdGlvbnMgbGVmdCBhZnRlciBjdXJyZW50Q2FyZCBvY2N1cGllcyBpbiBuZXh0IHJvdy5cbiAgICAgICAgbGV0IHVub2NjdXBpZWRQb3NpdGlvbnMgPSB0aGlzLl9jb2x1bW5zIC0gY3VycmVudENhcmQuY2FyZFdpZHRoQ29sU3BhbjtcblxuICAgICAgICBjdXJyZW50Q2FyZC5wcmV2UmFuayA9IGN1cnJlbnRDYXJkLnJhbms7XG5cbiAgICAgICAgbGV0IGluZGV4ID0gMTtcbiAgICAgICAgd2hpbGUgKHVub2NjdXBpZWRQb3NpdGlvbnMgPiAwKSB7XG4gICAgICAgICAgICAvLyBjb21wYXJlIGZyb20gbmV4dCBjYXJkXG4gICAgICAgICAgICBjYXJkID0gdGhpcy5fc29ydGVkQ2FyZHNbaW5kZXggKyBjdXJyZW50Q2FyZEluZGV4XTtcbiAgICAgICAgICAgIGlmIChjYXJkICYmIHVub2NjdXBpZWRQb3NpdGlvbnMgPj0gY2FyZC5jYXJkV2lkdGhDb2xTcGFuKSB7XG4gICAgICAgICAgICAgICAgY2FyZC5wcmV2UmFuayA9IGNhcmQucmFuaztcbiAgICAgICAgICAgICAgICBjYXJkLnJhbmsgLT0gMTtcbiAgICAgICAgICAgICAgICBjdXJyZW50Q2FyZC5yYW5rID0gY2FyZC5wcmV2UmFuaztcbiAgICAgICAgICAgICAgICB1bm9jY3VwaWVkUG9zaXRpb25zIC09IGNhcmQuY2FyZFdpZHRoQ29sU3BhbjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdW5vY2N1cGllZFBvc2l0aW9ucyA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpbmRleCArPSAxO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiB1cGRhdGVzIGFycmF5IHdpdGggbmV3IGNvbHVtbiBoZWlnaHRzXG4gICAgICogQHBhcmFtIGNhcmQge1Jlc2l6YWJsZUNhcmRJdGVtQ29tcG9uZW50fVxuICAgICAqL1xuICAgIHByaXZhdGUgX3VwZGF0ZUNvbHVtbnNIZWlnaHQoY2FyZDogUmVzaXphYmxlQ2FyZEl0ZW1Db21wb25lbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGlyZWN0aW9uUG9zaXRpb24gPSB0aGlzLl9kaXJlY3Rpb25Qb3NpdGlvbiQoKTtcbiAgICAgICAgY29uc3QgY29sdW1uc1N0YXJ0ID1cbiAgICAgICAgICAgIGNhcmRbZGlyZWN0aW9uUG9zaXRpb25dICE9IG51bGwgPyBNYXRoLmZsb29yKGNhcmRbZGlyZWN0aW9uUG9zaXRpb25dISAvIGhvcml6b250YWxSZXNpemVTdGVwKSA6IDA7XG5cbiAgICAgICAgLy8gR2V0IHdpZHRoIG9mIGN1cnJlbnQgY2FyZCByZXNpemluZyBhbmQgYXNzaWduIHdpZHRoIGhlcmUgZm9yIHRoYXQgY2FyZFxuICAgICAgICBjb25zdCBjYXJkQmFzZUNvbFNwYW4gPSBNYXRoLmZsb29yKGNhcmQuY2FyZFdpZHRoIC8gaG9yaXpvbnRhbFJlc2l6ZVN0ZXApO1xuXG4gICAgICAgIC8vIHRpbGwgd2hpY2ggY29sdW1ucyBjYXJkIHNwYW5zXG4gICAgICAgIGNvbnN0IGNvbHVtbnNTcGFuID1cbiAgICAgICAgICAgIGNhcmQuY2FyZFdpZHRoIC0gY2FyZEJhc2VDb2xTcGFuICogaG9yaXpvbnRhbFJlc2l6ZVN0ZXAgLSBjYXJkQmFzZUNvbFNwYW4gKiBnYXAgPiBob3Jpem9udGFsUmVzaXplT2Zmc2V0XG4gICAgICAgICAgICAgICAgPyBjYXJkQmFzZUNvbFNwYW4gKyAxXG4gICAgICAgICAgICAgICAgOiBjYXJkQmFzZUNvbFNwYW47XG5cbiAgICAgICAgY29uc3QgY29sdW1uSGVpZ2h0ID0gY2FyZC5jYXJkSGVpZ2h0ICsgY2FyZC50b3A7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2x1bW5zU3BhbjsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLl9jb2x1bW5zSGVpZ2h0W2kgKyBjb2x1bW5zU3RhcnRdID0gY29sdW1uSGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbHVtbnNTdGFydCA9PT0gY29sdW1uc1NwYW4pIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbHVtbnNIZWlnaHRbY29sdW1uc1N0YXJ0XSA9IGNvbHVtbkhlaWdodDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gVHJ5IHRvIHNldCBjYXJkIGF0IGF2YWlsYWJsZSBoZWlnaHRzXG4gICAgICogQHBhcmFtIGNhcmQgUmVzaXphYmxlQ2FyZEl0ZW1Db21wb25lbnRcbiAgICAgKiBAcGFyYW0gaW5kZXggdmFsdWUgb2YgY2FyZCBpbiBhcnJheSBvZiBSZXNpemFibGVDYXJkSXRlbUNvbXBvbmVudFxuICAgICAqL1xuICAgIHByaXZhdGUgX3NldENhcmRQb3NpdGlvblZhbHVlcyhjYXJkOiBSZXNpemFibGVDYXJkSXRlbUNvbXBvbmVudCwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBkaXJlY3Rpb25Qb3NpdGlvbiA9IHRoaXMuX2RpcmVjdGlvblBvc2l0aW9uJCgpO1xuICAgICAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgICAgIGNhcmRbZGlyZWN0aW9uUG9zaXRpb25dID0gTnVtYmVyKHRoaXMuX3BhZGRpbmdMZWZ0KTtcbiAgICAgICAgICAgIGNhcmQudG9wID0gMDtcbiAgICAgICAgICAgIGNhcmQuc3RhcnRpbmdDb2x1bW5Qb3NpdGlvbiA9IDA7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1bmlxdWVIZWlnaHRzID0gdGhpcy5fZ2V0U29ydGVkVW5pcXVlSGVpZ2h0cygpO1xuICAgICAgICBsZXQgY2FyZFBvc2l0aW9uZWQgPSBmYWxzZTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHVuaXF1ZUhlaWdodHMubGVuZ3RoICYmICFjYXJkUG9zaXRpb25lZDsgaSsrKSB7XG4gICAgICAgICAgICBjYXJkUG9zaXRpb25lZCA9IHRoaXMuX2lzUG9zaXRpb25TZXRTdWNjZXNzKHVuaXF1ZUhlaWdodHNbaV0sIGNhcmQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiB0cnkgdG8gc2V0IGNhcmQgYXQgZ2l2ZW4gaGVpZ2h0LlxuICAgICAqIEBwYXJhbSBoZWlnaHQgaGVpZ2h0IGF0IHdoaWNoIGNhcmQgaXMgZ2V0dGluZyBwb3NpdGlvbmVkLlxuICAgICAqIEBwYXJhbSBjYXJkIFJlc2l6YWJsZUNhcmRJdGVtQ29tcG9uZW50XG4gICAgICogQHJldHVybnMgSXQgcmV0dXJucyB0cnVlIHdoZW4gY2FyZCBwb3NpdGlvbiBpZCBmb3VuZCBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9pc1Bvc2l0aW9uU2V0U3VjY2VzcyhoZWlnaHQ6IG51bWJlciwgY2FyZDogUmVzaXphYmxlQ2FyZEl0ZW1Db21wb25lbnQpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZGlyZWN0aW9uUG9zaXRpb24gPSB0aGlzLl9kaXJlY3Rpb25Qb3NpdGlvbiQoKTtcbiAgICAgICAgY29uc3QgY29sdW1uUG9zaXRpb25zOiBudW1iZXJbXSA9IFtdO1xuICAgICAgICBsZXQgaW5kZXggPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IGNvbHVtbkhlaWdodCBvZiB0aGlzLl9jb2x1bW5zSGVpZ2h0KSB7XG4gICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgaWYgKGNvbHVtbkhlaWdodCA9PT0gaGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgY29sdW1uUG9zaXRpb25zLnB1c2goaW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGNoZWNrIGZvciBlYWNoIGNhcmQgcG9zaXRpb24sIHN0YXJ0aW5nIGZyb20gbGVmdG1vc3RcbiAgICAgICAgbGV0IGlzRml0dGluZyA9IGZhbHNlO1xuICAgICAgICAvLyB0cnkgdG8gZml0IGFzIGxlZnQgKG9yIHJpZ2h0IGlmIFJ0bCkgYXMgcG9zc2libGUgZnJvbSB0aGUgY29sdW1uIHBvc2l0aW9uXG4gICAgICAgIGNvbnN0IHN0YXJ0aW5nQ29sdW1uUG9zaXRpb24gPSB0aGlzLl9maXRDYXJkQ29sdW1uUG9zaXRpb24oY2FyZCwgY29sdW1uUG9zaXRpb25zLCBoZWlnaHQpO1xuXG4gICAgICAgIGlmIChzdGFydGluZ0NvbHVtblBvc2l0aW9uICE9PSAtMSkge1xuICAgICAgICAgICAgaXNGaXR0aW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIGNhcmRbZGlyZWN0aW9uUG9zaXRpb25dID1cbiAgICAgICAgICAgICAgICBzdGFydGluZ0NvbHVtblBvc2l0aW9uICogaG9yaXpvbnRhbFJlc2l6ZVN0ZXAgK1xuICAgICAgICAgICAgICAgIHRoaXMuX3BhZGRpbmdMZWZ0ICtcbiAgICAgICAgICAgICAgICAoc3RhcnRpbmdDb2x1bW5Qb3NpdGlvbiA+IDAgPyBnYXAgKiBzdGFydGluZ0NvbHVtblBvc2l0aW9uIDogMCk7XG4gICAgICAgICAgICBjYXJkLnRvcCA9IGhlaWdodCArIChoZWlnaHQgPiAwID8gdmVydGljYWxSZXNpemVTdGVwIDogMCk7XG4gICAgICAgICAgICBjYXJkLnN0YXJ0aW5nQ29sdW1uUG9zaXRpb24gPSBzdGFydGluZ0NvbHVtblBvc2l0aW9uO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc0ZpdHRpbmc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBUcnkgdG8gc3RhcnQgY2FyZCBwb3NpdGlvbiBmcm9tIGxlZnQgbW9zdCBmaXQgcG9zaXRpb24uXG4gICAgICogQHBhcmFtIGNhcmQgUmVzaXphYmxlQ2FyZEl0ZW1Db21wb25lbnRcbiAgICAgKiBAcGFyYW0gY29sdW1uUG9zaXRpb25zIHtBcnJheTxudW1iZXI+fSBBcnJheSBvZiBhdmFpbGFibGUgcG9zaXRpb25zIGZvciBjYXJkcy5cbiAgICAgKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IGhlaWdodCBhdCB3aGljaCBmaXhpbmcgdGhlIGNhcmRcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSByZXR1cm5zIHN0YXJ0aW5nIGNvbHVtbiBwb3NpdGlvbiB3aGVyZSBjYXJkIHdpbGwgZml0LlxuICAgICAqL1xuICAgIHByaXZhdGUgX2ZpdENhcmRDb2x1bW5Qb3NpdGlvbihcbiAgICAgICAgY2FyZDogUmVzaXphYmxlQ2FyZEl0ZW1Db21wb25lbnQsXG4gICAgICAgIGNvbHVtblBvc2l0aW9uczogQXJyYXk8bnVtYmVyPixcbiAgICAgICAgaGVpZ2h0OiBudW1iZXJcbiAgICApOiBudW1iZXIge1xuICAgICAgICAvLyBjaGVjayBmb3IgZWFjaCBjYXJkIHBvc2l0aW9uLCBzdGFydGluZyBmcm9tIGxlZnRtb3N0XG4gICAgICAgIGxldCBpc0ZpdHRpbmcgPSBmYWxzZTtcbiAgICAgICAgbGV0IHN0YXJ0aW5nQ29sdW1uUG9zaXRpb24gPSAtMTtcblxuICAgICAgICAvLyBzdGFydCBmcm9tIHByZXZpb3VzIGluZGV4ZXNcbiAgICAgICAgY29uc3QgY2FyZEJhc2VDb2xTcGFuID0gTWF0aC5mbG9vcihjYXJkLmNhcmRXaWR0aCAvIGhvcml6b250YWxSZXNpemVTdGVwKTtcbiAgICAgICAgY29uc3QgY2FyZENvbFNwYW4gPVxuICAgICAgICAgICAgY2FyZC5jYXJkV2lkdGggLSBjYXJkQmFzZUNvbFNwYW4gKiBob3Jpem9udGFsUmVzaXplU3RlcCAtIGNhcmRCYXNlQ29sU3BhbiAqIGdhcCA+IGhvcml6b250YWxSZXNpemVPZmZzZXRcbiAgICAgICAgICAgICAgICA/IGNhcmRCYXNlQ29sU3BhbiArIDFcbiAgICAgICAgICAgICAgICA6IGNhcmRCYXNlQ29sU3BhbjtcbiAgICAgICAgLy8gdHJ5IHRvIHNldCB0b3dhcmRzIGxlZnQgZnJvbSBhdmFpbGFibGUgY2FyZCBwb3NpdGlvblxuICAgICAgICAvLyBlZy4gWzEsIDIsIDMsIDRdIGNvbHVtbnNQb3NpdGlvbnNcbiAgICAgICAgZm9yIChjb25zdCBjb2x1bW5Qb3NpdGlvbiBvZiBjb2x1bW5Qb3NpdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChpc0ZpdHRpbmcpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gc3RhcnRpbmdQb3NpdGlvbiB2YWx1ZXMgd2lsbCBiZSAxLCAyLCAzLCA0XG4gICAgICAgICAgICAvLyB0cnkgdG8gZml0IGFzIGxlZnQgYXMgcG9zc2libGVcbiAgICAgICAgICAgIGxldCBzdGFydGluZ1Bvc2l0aW9uID0gY29sdW1uUG9zaXRpb24gLSAoY2FyZENvbFNwYW4gLSAxKTtcbiAgICAgICAgICAgIHN0YXJ0aW5nUG9zaXRpb24gPSBzdGFydGluZ1Bvc2l0aW9uID4gMCA/IHN0YXJ0aW5nUG9zaXRpb24gOiAxO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IHN0YXJ0aW5nUG9zaXRpb247IGluZGV4IDw9IGNvbHVtblBvc2l0aW9uICYmICFpc0ZpdHRpbmc7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBzcGFuID0gMDsgc3BhbiA8IGNhcmRDb2xTcGFuOyBzcGFuKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NvbHVtbnNIZWlnaHRbaW5kZXggKyBzcGFuIC0gMV0gPD0gaGVpZ2h0ICYmIGNhcmRDb2xTcGFuICsgaW5kZXggLSAxIDw9IHRoaXMuX2NvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRml0dGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydGluZ0NvbHVtblBvc2l0aW9uID0gaW5kZXggLSAxO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXNGaXR0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydGluZ0NvbHVtblBvc2l0aW9uID0gLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RhcnRpbmdDb2x1bW5Qb3NpdGlvbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiByZXR1cm5zIHNvcnRlZCB1bmlxdWUgaGVpZ2h0IG9mIGNvbHVtbnMgKi9cbiAgICBwcml2YXRlIF9nZXRTb3J0ZWRVbmlxdWVIZWlnaHRzKCk6IG51bWJlcltdIHtcbiAgICAgICAgY29uc3QgdGVtcEFycmF5ID0gdGhpcy5fY29sdW1uc0hlaWdodC5zbGljZSgpO1xuICAgICAgICBjb25zdCBzb3J0ZWRDb2x1bW5zSGVpZ2h0QXJyYXkgPSB0ZW1wQXJyYXkuc29ydChjb21wYXJlcik7XG4gICAgICAgIGNvbnN0IHVuaXF1ZUhlaWdodHM6IG51bWJlcltdID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBzb3J0ZWRIZWlnaHQgb2Ygc29ydGVkQ29sdW1uc0hlaWdodEFycmF5KSB7XG4gICAgICAgICAgICBpZiAodW5pcXVlSGVpZ2h0cy5pbmRleE9mKHNvcnRlZEhlaWdodCkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgdW5pcXVlSGVpZ2h0cy5wdXNoKHNvcnRlZEhlaWdodCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY29tcGFyZXIoZmlyc3Q6IG51bWJlciwgc2Vjb25kOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICAgICAgcmV0dXJuIGZpcnN0IC0gc2Vjb25kO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmlxdWVIZWlnaHRzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQ29tcGFyYXRvciB0byBzb3J0IGNhcmQgYmFzZWQgb24gcmFuay5cbiAgICAgKiBAcGFyYW0gZmlyc3RDYXJkIFJlc2l6YWJsZUNhcmRJdGVtQ29tcG9uZW50XG4gICAgICogQHBhcmFtIHNlY29uZENhcmQgUmVzaXphYmxlQ2FyZEl0ZW1Db21wb25lbnRcbiAgICAgKiBAcmV0dXJucyA6IHJldHVybnMgZGlmZmVyZW5jZSBiZXR3ZWVuIGZpcnN0IGNhcmQgcmFuayBhbmQgb3RoZXIgY2FyZCByYW5rLlxuICAgICAqL1xuICAgIHByaXZhdGUgX3NvcnRDYXJkcyhmaXJzdENhcmQ6IFJlc2l6YWJsZUNhcmRJdGVtQ29tcG9uZW50LCBzZWNvbmRDYXJkOiBSZXNpemFibGVDYXJkSXRlbUNvbXBvbmVudCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBmaXJzdENhcmQucmFuayAtIHNlY29uZENhcmQucmFuaztcbiAgICB9XG59XG4iLCI8ZGl2XG4gICAgI2xheW91dFxuICAgIGNsYXNzPVwiZmQtcmVzaXphYmxlLWNhcmQtbGF5b3V0XCJcbiAgICBbY2xhc3NdPVwiJ2ZkLXJlc2l6YWJsZS1jYXJkLWxheW91dC0tJyArIGxheW91dFNpemVcIlxuICAgIFtzdHlsZS53aWR0aC5weF09XCJsYXlvdXRXaWR0aFwiXG4gICAgW3N0eWxlLmhlaWdodC5weF09XCJsYXlvdXRIZWlnaHRcIlxuPlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvZGl2PlxuIl19