@carto/kepler.gl 0.1.0-alpha.0 → 0.1.0-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (872) hide show
  1. package/dist/actions/action-wrapper.d.ts +115 -115
  2. package/dist/actions/action-wrapper.js +190 -0
  3. package/dist/actions/actions.d.ts +195 -195
  4. package/dist/actions/actions.js +194 -0
  5. package/dist/actions/identity-actions.d.ts +61 -61
  6. package/dist/actions/identity-actions.js +101 -0
  7. package/dist/actions/index.d.ts +9 -9
  8. package/dist/actions/index.js +144 -0
  9. package/dist/actions/map-state-actions.d.ts +69 -69
  10. package/dist/actions/map-state-actions.js +106 -0
  11. package/dist/actions/map-style-actions.d.ts +146 -146
  12. package/dist/actions/map-style-actions.js +176 -0
  13. package/dist/actions/provider-actions.d.ts +153 -153
  14. package/dist/actions/provider-actions.js +144 -0
  15. package/dist/actions/ui-state-actions.d.ts +300 -300
  16. package/dist/actions/ui-state-actions.js +356 -0
  17. package/dist/actions/vis-state-actions.d.ts +821 -821
  18. package/dist/actions/vis-state-actions.js +900 -0
  19. package/dist/cloud-providers/index.d.ts +2 -2
  20. package/dist/cloud-providers/index.js +22 -0
  21. package/dist/cloud-providers/provider.d.ts +176 -176
  22. package/dist/cloud-providers/provider.js +346 -0
  23. package/dist/components/bottom-widget.d.ts +47 -47
  24. package/dist/components/bottom-widget.js +217 -0
  25. package/dist/components/common/action-panel.d.ts +27 -27
  26. package/dist/components/common/action-panel.js +133 -0
  27. package/dist/components/common/animation-control/animation-control.d.ts +24 -24
  28. package/dist/components/common/animation-control/animation-control.js +129 -0
  29. package/dist/components/common/animation-control/animation-controller.d.ts +16 -16
  30. package/dist/components/common/animation-control/animation-controller.js +270 -0
  31. package/dist/components/common/animation-control/animation-speed-slider.d.ts +12 -12
  32. package/dist/components/common/animation-control/animation-speed-slider.js +88 -0
  33. package/dist/components/common/animation-control/floating-time-display.d.ts +9 -9
  34. package/dist/components/common/animation-control/floating-time-display.js +149 -0
  35. package/dist/components/common/animation-control/playback-controls.d.ts +72 -72
  36. package/dist/components/common/animation-control/playback-controls.js +261 -0
  37. package/dist/components/common/animation-control/speed-control.d.ts +13 -13
  38. package/dist/components/common/animation-control/speed-control.js +70 -0
  39. package/dist/components/common/checkbox.d.ts +35 -35
  40. package/dist/components/common/checkbox.js +117 -0
  41. package/dist/components/common/color-legend.d.ts +43 -43
  42. package/dist/components/common/color-legend.js +205 -0
  43. package/dist/components/common/data-table/button.d.ts +8 -8
  44. package/dist/components/common/data-table/button.js +53 -0
  45. package/dist/components/common/data-table/canvas.d.ts +2 -2
  46. package/dist/components/common/data-table/canvas.js +43 -0
  47. package/dist/components/common/data-table/cell-size.d.ts +36 -36
  48. package/dist/components/common/data-table/cell-size.js +170 -0
  49. package/dist/components/common/data-table/grid.d.ts +7 -7
  50. package/dist/components/common/data-table/grid.js +90 -0
  51. package/dist/components/common/data-table/index.d.ts +143 -143
  52. package/dist/components/common/data-table/index.js +469 -0
  53. package/dist/components/common/data-table/option-dropdown.d.ts +14 -14
  54. package/dist/components/common/data-table/option-dropdown.js +99 -0
  55. package/dist/components/common/dataset-label.d.ts +10 -10
  56. package/dist/components/common/dataset-label.js +44 -0
  57. package/dist/components/common/error-boundary.d.ts +16 -16
  58. package/dist/components/common/error-boundary.js +76 -0
  59. package/dist/components/common/field-selector.d.ts +47 -47
  60. package/dist/components/common/field-selector.js +214 -0
  61. package/dist/components/common/field-token.d.ts +45 -45
  62. package/dist/components/common/field-token.js +47 -0
  63. package/dist/components/common/file-uploader/file-drop.d.ts +54 -54
  64. package/dist/components/common/file-uploader/file-drop.js +213 -0
  65. package/dist/components/common/file-uploader/file-upload-progress.d.ts +8 -8
  66. package/dist/components/common/file-uploader/file-upload-progress.js +103 -0
  67. package/dist/components/common/file-uploader/file-upload.d.ts +27 -27
  68. package/dist/components/common/file-uploader/file-upload.js +263 -0
  69. package/dist/components/common/file-uploader/upload-button.d.ts +8 -8
  70. package/dist/components/common/file-uploader/upload-button.js +76 -0
  71. package/dist/components/common/histogram-plot.d.ts +3 -3
  72. package/dist/components/common/histogram-plot.js +112 -0
  73. package/dist/components/common/icons/add.d.ts +9 -9
  74. package/dist/components/common/icons/add.js +58 -0
  75. package/dist/components/common/icons/anchor_window.d.ts +11 -11
  76. package/dist/components/common/icons/anchor_window.js +51 -0
  77. package/dist/components/common/icons/arrow-down-alt.d.ts +9 -9
  78. package/dist/components/common/icons/arrow-down-alt.js +58 -0
  79. package/dist/components/common/icons/arrow-down-solid.d.ts +9 -9
  80. package/dist/components/common/icons/arrow-down-solid.js +58 -0
  81. package/dist/components/common/icons/arrow-down.d.ts +9 -9
  82. package/dist/components/common/icons/arrow-down.js +58 -0
  83. package/dist/components/common/icons/arrow-left.d.ts +9 -9
  84. package/dist/components/common/icons/arrow-left.js +61 -0
  85. package/dist/components/common/icons/arrow-right.d.ts +9 -9
  86. package/dist/components/common/icons/arrow-right.js +58 -0
  87. package/dist/components/common/icons/arrow-up-alt.d.ts +9 -9
  88. package/dist/components/common/icons/arrow-up-alt.js +59 -0
  89. package/dist/components/common/icons/arrow-up-solid.d.ts +9 -9
  90. package/dist/components/common/icons/arrow-up-solid.js +58 -0
  91. package/dist/components/common/icons/arrow-up.d.ts +9 -9
  92. package/dist/components/common/icons/arrow-up.js +58 -0
  93. package/dist/components/common/icons/base.d.ts +29 -29
  94. package/dist/components/common/icons/base.js +94 -0
  95. package/dist/components/common/icons/bug.d.ts +9 -9
  96. package/dist/components/common/icons/bug.js +60 -0
  97. package/dist/components/common/icons/cancel.d.ts +9 -9
  98. package/dist/components/common/icons/cancel.js +58 -0
  99. package/dist/components/common/icons/checkmark.d.ts +10 -10
  100. package/dist/components/common/icons/checkmark.js +64 -0
  101. package/dist/components/common/icons/chevron-right.js +68 -0
  102. package/dist/components/common/icons/clipboard.d.ts +9 -9
  103. package/dist/components/common/icons/clipboard.js +59 -0
  104. package/dist/components/common/icons/clock.d.ts +9 -9
  105. package/dist/components/common/icons/clock.js +60 -0
  106. package/dist/components/common/icons/close.d.ts +9 -9
  107. package/dist/components/common/icons/close.js +63 -0
  108. package/dist/components/common/icons/code-alt.d.ts +9 -9
  109. package/dist/components/common/icons/code-alt.js +61 -0
  110. package/dist/components/common/icons/copy.d.ts +9 -9
  111. package/dist/components/common/icons/copy.js +63 -0
  112. package/dist/components/common/icons/crosshairs.d.ts +9 -9
  113. package/dist/components/common/icons/crosshairs.js +61 -0
  114. package/dist/components/common/icons/cube-3d.d.ts +9 -9
  115. package/dist/components/common/icons/cube-3d.js +62 -0
  116. package/dist/components/common/icons/cursor-click.d.ts +9 -9
  117. package/dist/components/common/icons/cursor-click.js +62 -0
  118. package/dist/components/common/icons/data-table.d.ts +10 -10
  119. package/dist/components/common/icons/data-table.js +59 -0
  120. package/dist/components/common/icons/db.d.ts +10 -10
  121. package/dist/components/common/icons/db.js +59 -0
  122. package/dist/components/common/icons/delete.d.ts +9 -9
  123. package/dist/components/common/icons/delete.js +60 -0
  124. package/dist/components/common/icons/docs.d.ts +9 -9
  125. package/dist/components/common/icons/docs.js +74 -0
  126. package/dist/components/common/icons/drag-n-drop.d.ts +9 -9
  127. package/dist/components/common/icons/drag-n-drop.js +60 -0
  128. package/dist/components/common/icons/draw-polygon.d.ts +10 -10
  129. package/dist/components/common/icons/draw-polygon.js +78 -0
  130. package/dist/components/common/icons/email.d.ts +9 -9
  131. package/dist/components/common/icons/email.js +62 -0
  132. package/dist/components/common/icons/expand.d.ts +9 -9
  133. package/dist/components/common/icons/expand.js +60 -0
  134. package/dist/components/common/icons/eye-seen.d.ts +9 -9
  135. package/dist/components/common/icons/eye-seen.js +60 -0
  136. package/dist/components/common/icons/eye-unseen.d.ts +9 -9
  137. package/dist/components/common/icons/eye-unseen.js +60 -0
  138. package/dist/components/common/icons/file-type.d.ts +8 -8
  139. package/dist/components/common/icons/file-type.js +52 -0
  140. package/dist/components/common/icons/file.d.ts +9 -9
  141. package/dist/components/common/icons/file.js +58 -0
  142. package/dist/components/common/icons/files.d.ts +9 -9
  143. package/dist/components/common/icons/files.js +58 -0
  144. package/dist/components/common/icons/filter-funnel.d.ts +9 -9
  145. package/dist/components/common/icons/filter-funnel.js +58 -0
  146. package/dist/components/common/icons/free-window.d.ts +11 -11
  147. package/dist/components/common/icons/free-window.js +51 -0
  148. package/dist/components/common/icons/gear.d.ts +9 -9
  149. package/dist/components/common/icons/gear.js +60 -0
  150. package/dist/components/common/icons/hash.d.ts +9 -9
  151. package/dist/components/common/icons/hash.js +58 -0
  152. package/dist/components/common/icons/histogram.d.ts +9 -9
  153. package/dist/components/common/icons/histogram.js +58 -0
  154. package/dist/components/common/icons/index.d.ts +78 -78
  155. package/dist/components/common/icons/index.js +551 -0
  156. package/dist/components/common/icons/info.d.ts +12 -12
  157. package/dist/components/common/icons/info.js +71 -0
  158. package/dist/components/common/icons/layers.d.ts +9 -9
  159. package/dist/components/common/icons/layers.js +58 -0
  160. package/dist/components/common/icons/left-arrow.d.ts +9 -9
  161. package/dist/components/common/icons/left-arrow.js +61 -0
  162. package/dist/components/common/icons/legend.d.ts +9 -9
  163. package/dist/components/common/icons/legend.js +58 -0
  164. package/dist/components/common/icons/line-chart.d.ts +9 -9
  165. package/dist/components/common/icons/line-chart.js +58 -0
  166. package/dist/components/common/icons/login.d.ts +9 -9
  167. package/dist/components/common/icons/login.js +61 -0
  168. package/dist/components/common/icons/logout.d.ts +9 -9
  169. package/dist/components/common/icons/logout.js +60 -0
  170. package/dist/components/common/icons/map-icon.d.ts +11 -11
  171. package/dist/components/common/icons/map-icon.js +65 -0
  172. package/dist/components/common/icons/map.d.ts +11 -11
  173. package/dist/components/common/icons/map.js +65 -0
  174. package/dist/components/common/icons/messages.d.ts +9 -9
  175. package/dist/components/common/icons/messages.js +58 -0
  176. package/dist/components/common/icons/minus.d.ts +9 -9
  177. package/dist/components/common/icons/minus.js +58 -0
  178. package/dist/components/common/icons/order-by-dataset.d.ts +12 -12
  179. package/dist/components/common/icons/order-by-dataset.js +51 -0
  180. package/dist/components/common/icons/order-by-list.d.ts +12 -12
  181. package/dist/components/common/icons/order-by-list.js +43 -0
  182. package/dist/components/common/icons/pause.d.ts +9 -9
  183. package/dist/components/common/icons/pause.js +58 -0
  184. package/dist/components/common/icons/picture.d.ts +9 -9
  185. package/dist/components/common/icons/picture.js +58 -0
  186. package/dist/components/common/icons/pin.d.ts +9 -9
  187. package/dist/components/common/icons/pin.js +62 -0
  188. package/dist/components/common/icons/play.d.ts +9 -9
  189. package/dist/components/common/icons/play.js +58 -0
  190. package/dist/components/common/icons/polygon.d.ts +10 -10
  191. package/dist/components/common/icons/polygon.js +80 -0
  192. package/dist/components/common/icons/rectangle.d.ts +10 -10
  193. package/dist/components/common/icons/rectangle.js +81 -0
  194. package/dist/components/common/icons/reduce.d.ts +9 -9
  195. package/dist/components/common/icons/reduce.js +61 -0
  196. package/dist/components/common/icons/reset.d.ts +9 -9
  197. package/dist/components/common/icons/reset.js +58 -0
  198. package/dist/components/common/icons/rocket.d.ts +9 -9
  199. package/dist/components/common/icons/rocket.js +58 -0
  200. package/dist/components/common/icons/save.d.ts +9 -9
  201. package/dist/components/common/icons/save.js +60 -0
  202. package/dist/components/common/icons/save2.d.ts +9 -9
  203. package/dist/components/common/icons/save2.js +64 -0
  204. package/dist/components/common/icons/search.d.ts +9 -9
  205. package/dist/components/common/icons/search.js +60 -0
  206. package/dist/components/common/icons/settings.d.ts +9 -9
  207. package/dist/components/common/icons/settings.js +60 -0
  208. package/dist/components/common/icons/share.d.ts +9 -9
  209. package/dist/components/common/icons/share.js +58 -0
  210. package/dist/components/common/icons/split.d.ts +9 -9
  211. package/dist/components/common/icons/split.js +86 -0
  212. package/dist/components/common/icons/square-select.d.ts +9 -9
  213. package/dist/components/common/icons/square-select.js +60 -0
  214. package/dist/components/common/icons/swap-horizontal.js +66 -0
  215. package/dist/components/common/icons/table.d.ts +9 -9
  216. package/dist/components/common/icons/table.js +58 -0
  217. package/dist/components/common/icons/trash.d.ts +9 -9
  218. package/dist/components/common/icons/trash.js +60 -0
  219. package/dist/components/common/icons/upload.d.ts +9 -9
  220. package/dist/components/common/icons/upload.js +58 -0
  221. package/dist/components/common/icons/vert-dots.d.ts +9 -9
  222. package/dist/components/common/icons/vert-dots.js +96 -0
  223. package/dist/components/common/icons/vert-three-dots.d.ts +9 -9
  224. package/dist/components/common/icons/vert-three-dots.js +71 -0
  225. package/dist/components/common/icons/warning.d.ts +10 -10
  226. package/dist/components/common/icons/warning.js +72 -0
  227. package/dist/components/common/image-preview.d.ts +15 -15
  228. package/dist/components/common/image-preview.js +79 -0
  229. package/dist/components/common/info-helper.d.ts +11 -11
  230. package/dist/components/common/info-helper.js +79 -0
  231. package/dist/components/common/item-selector/accessor.d.ts +7 -7
  232. package/dist/components/common/item-selector/accessor.js +54 -0
  233. package/dist/components/common/item-selector/chickleted-input.d.ts +21 -21
  234. package/dist/components/common/item-selector/chickleted-input.js +96 -0
  235. package/dist/components/common/item-selector/dropdown-list.d.ts +68 -68
  236. package/dist/components/common/item-selector/dropdown-list.js +279 -0
  237. package/dist/components/common/item-selector/item-selector-submenu.js +88 -0
  238. package/dist/components/common/item-selector/item-selector.d.ts +91 -91
  239. package/dist/components/common/item-selector/item-selector.js +282 -0
  240. package/dist/components/common/item-selector/typeahead.d.ts +115 -115
  241. package/dist/components/common/item-selector/typeahead.js +425 -0
  242. package/dist/components/common/line-chart.d.ts +34 -34
  243. package/dist/components/common/line-chart.js +127 -0
  244. package/dist/components/common/loading-spinner.d.ts +9 -9
  245. package/dist/components/common/loading-spinner.js +64 -0
  246. package/dist/components/common/logo.d.ts +8 -8
  247. package/dist/components/common/logo.js +85 -0
  248. package/dist/components/common/map-layer-selector.d.ts +13 -13
  249. package/dist/components/common/map-layer-selector.js +56 -0
  250. package/dist/components/common/modal.d.ts +49 -49
  251. package/dist/components/common/modal.js +165 -0
  252. package/dist/components/common/portaled.d.ts +527 -527
  253. package/dist/components/common/portaled.js +277 -0
  254. package/dist/components/common/progress-bar.d.ts +12 -12
  255. package/dist/components/common/progress-bar.js +64 -0
  256. package/dist/components/common/range-brush.d.ts +19 -19
  257. package/dist/components/common/range-brush.js +277 -0
  258. package/dist/components/common/range-plot.d.ts +35 -35
  259. package/dist/components/common/range-plot.js +130 -0
  260. package/dist/components/common/range-slider.d.ts +32 -32
  261. package/dist/components/common/range-slider.js +305 -0
  262. package/dist/components/common/slider/mouse-event.d.ts +27 -27
  263. package/dist/components/common/slider/mouse-event.js +115 -0
  264. package/dist/components/common/slider/slider-bar-handle.d.ts +29 -29
  265. package/dist/components/common/slider/slider-bar-handle.js +105 -0
  266. package/dist/components/common/slider/slider-handle.d.ts +33 -33
  267. package/dist/components/common/slider/slider-handle.js +151 -0
  268. package/dist/components/common/slider/slider.d.ts +70 -70
  269. package/dist/components/common/slider/slider.js +221 -0
  270. package/dist/components/common/styled-components.d.ts +119 -119
  271. package/dist/components/common/styled-components.js +300 -0
  272. package/dist/components/common/switch.d.ts +16 -16
  273. package/dist/components/common/switch.js +38 -0
  274. package/dist/components/common/time-range-slider-time-title.d.ts +9 -9
  275. package/dist/components/common/time-range-slider-time-title.js +79 -0
  276. package/dist/components/common/time-range-slider.d.ts +32 -32
  277. package/dist/components/common/time-range-slider.js +116 -0
  278. package/dist/components/common/time-slider-marker.d.ts +21 -21
  279. package/dist/components/common/time-slider-marker.js +136 -0
  280. package/dist/components/common/tippy-tooltip.d.ts +4 -4
  281. package/dist/components/common/tippy-tooltip.js +115 -0
  282. package/dist/components/common/toolbar-item.d.ts +14 -14
  283. package/dist/components/common/toolbar-item.js +75 -0
  284. package/dist/components/common/toolbar.d.ts +5 -5
  285. package/dist/components/common/toolbar.js +44 -0
  286. package/dist/components/common/vertical-toolbar.d.ts +3 -3
  287. package/dist/components/common/vertical-toolbar.js +33 -0
  288. package/dist/components/container.d.ts +39 -39
  289. package/dist/components/container.js +203 -0
  290. package/dist/components/context.d.ts +7 -7
  291. package/dist/components/context.js +38 -0
  292. package/dist/components/editor/constants.d.ts +17 -17
  293. package/dist/components/editor/constants.js +45 -0
  294. package/dist/components/editor/editor.d.ts +29 -29
  295. package/dist/components/editor/editor.js +226 -0
  296. package/dist/components/editor/feature-action-panel.d.ts +27 -27
  297. package/dist/components/editor/feature-action-panel.js +141 -0
  298. package/dist/components/editor/feature-styles.d.ts +24 -24
  299. package/dist/components/editor/feature-styles.js +67 -0
  300. package/dist/components/editor/handle-style.d.ts +38 -38
  301. package/dist/components/editor/handle-style.js +78 -0
  302. package/dist/components/filters/components.d.ts +1 -3
  303. package/dist/components/filters/components.js +31 -0
  304. package/dist/components/filters/filter-panels/filter-panel-with-field-select.d.ts +10 -10
  305. package/dist/components/filters/filter-panels/filter-panel-with-field-select.js +96 -0
  306. package/dist/components/filters/filter-panels/multi-select-filter-panel.d.ts +9 -9
  307. package/dist/components/filters/filter-panels/multi-select-filter-panel.js +66 -0
  308. package/dist/components/filters/filter-panels/new-filter-panel.d.ts +12 -12
  309. package/dist/components/filters/filter-panels/new-filter-panel.js +85 -0
  310. package/dist/components/filters/filter-panels/polygon-filter-panel.d.ts +9 -9
  311. package/dist/components/filters/filter-panels/polygon-filter-panel.js +85 -0
  312. package/dist/components/filters/filter-panels/range-filter-panel.d.ts +9 -9
  313. package/dist/components/filters/filter-panels/range-filter-panel.js +66 -0
  314. package/dist/components/filters/filter-panels/single-select-filter-panel.d.ts +9 -9
  315. package/dist/components/filters/filter-panels/single-select-filter-panel.js +66 -0
  316. package/dist/components/filters/filter-panels/time-range-filter-panel.d.ts +8 -8
  317. package/dist/components/filters/filter-panels/time-range-filter-panel.js +80 -0
  318. package/dist/components/filters/filter-panels/types.d.ts +36 -36
  319. package/dist/components/filters/filter-panels/types.js +6 -0
  320. package/dist/components/filters/index.d.ts +5 -5
  321. package/dist/components/filters/index.js +42 -0
  322. package/dist/components/filters/multi-select-filter.d.ts +3 -3
  323. package/dist/components/filters/multi-select-filter.js +48 -0
  324. package/dist/components/filters/polygon-filter.d.ts +4 -4
  325. package/dist/components/filters/polygon-filter.js +85 -0
  326. package/dist/components/filters/range-filter.d.ts +8 -8
  327. package/dist/components/filters/range-filter.js +48 -0
  328. package/dist/components/filters/single-select-filter.d.ts +3 -3
  329. package/dist/components/filters/single-select-filter.js +57 -0
  330. package/dist/components/filters/time-range-filter.d.ts +28 -28
  331. package/dist/components/filters/time-range-filter.js +75 -0
  332. package/dist/components/filters/time-widget.d.ts +14 -14
  333. package/dist/components/filters/time-widget.js +162 -0
  334. package/dist/components/filters/types.d.ts +53 -53
  335. package/dist/components/filters/types.js +6 -0
  336. package/dist/components/geocoder/geocoder.d.ts +33 -33
  337. package/dist/components/geocoder/geocoder.js +282 -0
  338. package/dist/components/geocoder-panel.d.ts +28 -28
  339. package/dist/components/geocoder-panel.js +192 -0
  340. package/dist/components/index.d.ts +165 -165
  341. package/dist/components/index.js +1474 -0
  342. package/dist/components/injector.d.ts +25 -25
  343. package/dist/components/injector.js +162 -0
  344. package/dist/components/kepler-gl.d.ts +302 -302
  345. package/dist/components/kepler-gl.js +487 -0
  346. package/dist/components/map/coordinate-info.d.ts +7 -7
  347. package/dist/components/map/coordinate-info.js +59 -0
  348. package/dist/components/map/layer-hover-info.d.ts +13 -13
  349. package/dist/components/map/layer-hover-info.js +167 -0
  350. package/dist/components/map/layer-selector-panel.d.ts +22 -22
  351. package/dist/components/map/layer-selector-panel.js +103 -0
  352. package/dist/components/map/locale-panel.d.ts +16 -16
  353. package/dist/components/map/locale-panel.js +103 -0
  354. package/dist/components/map/map-control-panel.d.ts +14 -14
  355. package/dist/components/map/map-control-panel.js +97 -0
  356. package/dist/components/map/map-control-toolbar.d.ts +2 -2
  357. package/dist/components/map/map-control-toolbar.js +35 -0
  358. package/dist/components/map/map-control-tooltip.d.ts +7 -7
  359. package/dist/components/map/map-control-tooltip.js +48 -0
  360. package/dist/components/map/map-control.d.ts +44 -44
  361. package/dist/components/map/map-control.js +79 -0
  362. package/dist/components/map/map-draw-panel.d.ts +21 -21
  363. package/dist/components/map/map-draw-panel.js +131 -0
  364. package/dist/components/map/map-legend-panel.d.ts +23 -23
  365. package/dist/components/map/map-legend-panel.js +152 -0
  366. package/dist/components/map/map-legend.d.ts +55 -55
  367. package/dist/components/map/map-legend.js +234 -0
  368. package/dist/components/map/map-popover.d.ts +37 -37
  369. package/dist/components/map/map-popover.js +191 -0
  370. package/dist/components/map/split-map-button.d.ts +19 -19
  371. package/dist/components/map/split-map-button.js +89 -0
  372. package/dist/components/map/toggle-3d-button.d.ts +16 -16
  373. package/dist/components/map/toggle-3d-button.js +79 -0
  374. package/dist/components/map-container.d.ts +58 -58
  375. package/dist/components/map-container.js +502 -0
  376. package/dist/components/maps-layout.d.ts +10 -10
  377. package/dist/components/maps-layout.js +57 -0
  378. package/dist/components/modal-container.d.ts +65 -65
  379. package/dist/components/modal-container.js +459 -0
  380. package/dist/components/modals/add-map-style-modal.d.ts +17 -17
  381. package/dist/components/modals/add-map-style-modal.js +250 -0
  382. package/dist/components/modals/cloud-tile.d.ts +15 -15
  383. package/dist/components/modals/cloud-tile.js +124 -0
  384. package/dist/components/modals/data-table-modal.d.ts +29 -29
  385. package/dist/components/modals/data-table-modal.js +223 -0
  386. package/dist/components/modals/delete-data-modal.d.ts +10 -10
  387. package/dist/components/modals/delete-data-modal.js +58 -0
  388. package/dist/components/modals/error-display.d.ts +6 -6
  389. package/dist/components/modals/error-display.js +44 -0
  390. package/dist/components/modals/export-data-modal.d.ts +25 -25
  391. package/dist/components/modals/export-data-modal.js +194 -0
  392. package/dist/components/modals/export-image-modal.d.ts +18 -18
  393. package/dist/components/modals/export-image-modal.js +139 -0
  394. package/dist/components/modals/export-map-modal/components.d.ts +8 -8
  395. package/dist/components/modals/export-map-modal/components.js +51 -0
  396. package/dist/components/modals/export-map-modal/export-html-map.d.ts +12 -12
  397. package/dist/components/modals/export-map-modal/export-html-map.js +140 -0
  398. package/dist/components/modals/export-map-modal/export-json-map.d.ts +9 -9
  399. package/dist/components/modals/export-map-modal/export-json-map.js +98 -0
  400. package/dist/components/modals/export-map-modal/export-map-modal.d.ts +27 -27
  401. package/dist/components/modals/export-map-modal/export-map-modal.js +101 -0
  402. package/dist/components/modals/image-modal-container.d.ts +18 -18
  403. package/dist/components/modals/image-modal-container.js +83 -0
  404. package/dist/components/modals/load-data-modal.d.ts +33 -33
  405. package/dist/components/modals/load-data-modal.js +93 -0
  406. package/dist/components/modals/load-storage-map.d.ts +26 -26
  407. package/dist/components/modals/load-storage-map.js +251 -0
  408. package/dist/components/modals/loading-dialog.d.ts +7 -7
  409. package/dist/components/modals/loading-dialog.js +54 -0
  410. package/dist/components/modals/modal-dialog.d.ts +2 -2
  411. package/dist/components/modals/modal-dialog.js +33 -0
  412. package/dist/components/modals/modal-tabs.d.ts +27 -27
  413. package/dist/components/modals/modal-tabs.js +99 -0
  414. package/dist/components/modals/overwrite-map-modal.d.ts +16 -16
  415. package/dist/components/modals/overwrite-map-modal.js +81 -0
  416. package/dist/components/modals/provider-modal-container.d.ts +23 -23
  417. package/dist/components/modals/provider-modal-container.js +79 -0
  418. package/dist/components/modals/save-map-modal.d.ts +29 -29
  419. package/dist/components/modals/save-map-modal.js +201 -0
  420. package/dist/components/modals/share-map-modal.d.ts +30 -30
  421. package/dist/components/modals/share-map-modal.js +188 -0
  422. package/dist/components/modals/status-panel.d.ts +13 -13
  423. package/dist/components/modals/status-panel.js +82 -0
  424. package/dist/components/modals/storage-map-viewer.d.ts +21 -21
  425. package/dist/components/modals/storage-map-viewer.js +115 -0
  426. package/dist/components/notification-panel/notification-item.d.ts +66 -66
  427. package/dist/components/notification-panel/notification-item.js +139 -0
  428. package/dist/components/notification-panel.d.ts +61 -61
  429. package/dist/components/notification-panel.js +74 -0
  430. package/dist/components/performance.d.ts +4 -4
  431. package/dist/components/performance.js +110 -0
  432. package/dist/components/plot-container.d.ts +24 -24
  433. package/dist/components/plot-container.js +240 -0
  434. package/dist/components/side-panel/cloud-storage-dropdown.d.ts +6 -6
  435. package/dist/components/side-panel/cloud-storage-dropdown.js +57 -0
  436. package/dist/components/side-panel/common/dataset-info.d.ts +3 -3
  437. package/dist/components/side-panel/common/dataset-info.js +50 -0
  438. package/dist/components/side-panel/common/dataset-tag.d.ts +3 -3
  439. package/dist/components/side-panel/common/dataset-tag.js +75 -0
  440. package/dist/components/side-panel/common/dataset-title.d.ts +8 -8
  441. package/dist/components/side-panel/common/dataset-title.js +185 -0
  442. package/dist/components/side-panel/common/source-data-catalog.d.ts +9 -9
  443. package/dist/components/side-panel/common/source-data-catalog.js +66 -0
  444. package/dist/components/side-panel/common/source-data-selector.d.ts +8 -8
  445. package/dist/components/side-panel/common/source-data-selector.js +119 -0
  446. package/dist/components/side-panel/common/types.d.ts +58 -58
  447. package/dist/components/side-panel/common/types.js +6 -0
  448. package/dist/components/side-panel/custom-panel.d.ts +9 -9
  449. package/dist/components/side-panel/custom-panel.js +56 -0
  450. package/dist/components/side-panel/filter-manager.d.ts +20 -20
  451. package/dist/components/side-panel/filter-manager.js +113 -0
  452. package/dist/components/side-panel/filter-panel/filter-panel-header.d.ts +21 -21
  453. package/dist/components/side-panel/filter-panel/filter-panel-header.js +67 -0
  454. package/dist/components/side-panel/filter-panel/filter-panel.d.ts +23 -23
  455. package/dist/components/side-panel/filter-panel/filter-panel.js +110 -0
  456. package/dist/components/side-panel/interaction-manager.d.ts +14 -14
  457. package/dist/components/side-panel/interaction-manager.js +51 -0
  458. package/dist/components/side-panel/interaction-panel/brush-config.d.ts +15 -15
  459. package/dist/components/side-panel/interaction-panel/brush-config.js +58 -0
  460. package/dist/components/side-panel/interaction-panel/interaction-panel.d.ts +19 -19
  461. package/dist/components/side-panel/interaction-panel/interaction-panel.js +137 -0
  462. package/dist/components/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.d.ts +28 -28
  463. package/dist/components/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.js +204 -0
  464. package/dist/components/side-panel/interaction-panel/tooltip-config.d.ts +38 -38
  465. package/dist/components/side-panel/interaction-panel/tooltip-config.js +155 -0
  466. package/dist/components/side-panel/layer-manager.d.ts +46 -46
  467. package/dist/components/side-panel/layer-manager.js +185 -0
  468. package/dist/components/side-panel/layer-panel/add-layer-button.d.ts +10 -10
  469. package/dist/components/side-panel/layer-panel/add-layer-button.js +147 -0
  470. package/dist/components/side-panel/layer-panel/color-dimension-scale-selector.d.ts +8 -8
  471. package/dist/components/side-panel/layer-panel/color-dimension-scale-selector.js +38 -0
  472. package/dist/components/side-panel/layer-panel/color-palette.d.ts +13 -13
  473. package/dist/components/side-panel/layer-panel/color-palette.js +79 -0
  474. package/dist/components/side-panel/layer-panel/color-range-selector.d.ts +129 -129
  475. package/dist/components/side-panel/layer-panel/color-range-selector.js +329 -0
  476. package/dist/components/side-panel/layer-panel/color-selector.d.ts +101 -101
  477. package/dist/components/side-panel/layer-panel/color-selector.js +177 -0
  478. package/dist/components/side-panel/layer-panel/column-selector.d.ts +22 -22
  479. package/dist/components/side-panel/layer-panel/column-selector.js +66 -0
  480. package/dist/components/side-panel/layer-panel/custom-markers-config-group.d.ts +6 -6
  481. package/dist/components/side-panel/layer-panel/custom-markers-config-group.js +36 -0
  482. package/dist/components/side-panel/layer-panel/custom-palette.d.ts +38 -38
  483. package/dist/components/side-panel/layer-panel/custom-palette.js +278 -0
  484. package/dist/components/side-panel/layer-panel/custom-picker.d.ts +67 -67
  485. package/dist/components/side-panel/layer-panel/custom-picker.js +106 -0
  486. package/dist/components/side-panel/layer-panel/dataset-layer-group.d.ts +24 -24
  487. package/dist/components/side-panel/layer-panel/dataset-layer-group.js +81 -0
  488. package/dist/components/side-panel/layer-panel/dataset-layer-section.d.ts +25 -25
  489. package/dist/components/side-panel/layer-panel/dataset-layer-section.js +74 -0
  490. package/dist/components/side-panel/layer-panel/dataset-section.d.ts +26 -26
  491. package/dist/components/side-panel/layer-panel/dataset-section.js +91 -0
  492. package/dist/components/side-panel/layer-panel/dimension-scale-selector.d.ts +10 -10
  493. package/dist/components/side-panel/layer-panel/dimension-scale-selector.js +53 -0
  494. package/dist/components/side-panel/layer-panel/hex-column-config.d.ts +62 -62
  495. package/dist/components/side-panel/layer-panel/hex-column-config.js +74 -0
  496. package/dist/components/side-panel/layer-panel/layer-aggregation-resolution.d.ts +8 -8
  497. package/dist/components/side-panel/layer-panel/layer-aggregation-resolution.js +18 -0
  498. package/dist/components/side-panel/layer-panel/layer-column-config.d.ts +20 -20
  499. package/dist/components/side-panel/layer-panel/layer-column-config.js +86 -0
  500. package/dist/components/side-panel/layer-panel/layer-config-group.d.ts +37 -37
  501. package/dist/components/side-panel/layer-panel/layer-config-group.js +209 -0
  502. package/dist/components/side-panel/layer-panel/layer-configurator.d.ts +415 -415
  503. package/dist/components/side-panel/layer-panel/layer-configurator.js +977 -0
  504. package/dist/components/side-panel/layer-panel/layer-list.d.ts +20 -20
  505. package/dist/components/side-panel/layer-panel/layer-list.js +168 -0
  506. package/dist/components/side-panel/layer-panel/layer-panel-header.d.ts +43 -43
  507. package/dist/components/side-panel/layer-panel/layer-panel-header.js +194 -0
  508. package/dist/components/side-panel/layer-panel/layer-panel.d.ts +40 -40
  509. package/dist/components/side-panel/layer-panel/layer-panel.js +161 -0
  510. package/dist/components/side-panel/layer-panel/layer-type-dropdown-list.d.ts +17 -17
  511. package/dist/components/side-panel/layer-panel/layer-type-dropdown-list.js +95 -0
  512. package/dist/components/side-panel/layer-panel/layer-type-list-item.d.ts +11 -11
  513. package/dist/components/side-panel/layer-panel/layer-type-list-item.js +75 -0
  514. package/dist/components/side-panel/layer-panel/layer-type-selector.d.ts +23 -23
  515. package/dist/components/side-panel/layer-panel/layer-type-selector.js +87 -0
  516. package/dist/components/side-panel/layer-panel/layer-visibility-by-zoom.d.ts +23 -23
  517. package/dist/components/side-panel/layer-panel/layer-visibility-by-zoom.js +106 -0
  518. package/dist/components/side-panel/layer-panel/panel-view-list-toggle.d.ts +36 -36
  519. package/dist/components/side-panel/layer-panel/panel-view-list-toggle.js +116 -0
  520. package/dist/components/side-panel/layer-panel/single-color-palette.d.ts +12 -12
  521. package/dist/components/side-panel/layer-panel/single-color-palette.js +68 -0
  522. package/dist/components/side-panel/layer-panel/text-label-panel.d.ts +18 -18
  523. package/dist/components/side-panel/layer-panel/text-label-panel.js +157 -0
  524. package/dist/components/side-panel/layer-panel/vis-config-by-field-selector.d.ts +35 -35
  525. package/dist/components/side-panel/layer-panel/vis-config-by-field-selector.js +148 -0
  526. package/dist/components/side-panel/layer-panel/vis-config-slider.d.ts +20 -20
  527. package/dist/components/side-panel/layer-panel/vis-config-slider.js +177 -0
  528. package/dist/components/side-panel/layer-panel/vis-config-switch.d.ts +16 -16
  529. package/dist/components/side-panel/layer-panel/vis-config-switch.js +73 -0
  530. package/dist/components/side-panel/map-manager.d.ts +21 -21
  531. package/dist/components/side-panel/map-manager.js +133 -0
  532. package/dist/components/side-panel/map-style-panel/map-layer-selector.d.ts +19 -19
  533. package/dist/components/side-panel/map-style-panel/map-layer-selector.js +103 -0
  534. package/dist/components/side-panel/map-style-panel/map-style-selector.d.ts +16 -16
  535. package/dist/components/side-panel/map-style-panel/map-style-selector.js +80 -0
  536. package/dist/components/side-panel/panel-dropdown.d.ts +18 -18
  537. package/dist/components/side-panel/panel-dropdown.js +71 -0
  538. package/dist/components/side-panel/panel-header-action.d.ts +20 -20
  539. package/dist/components/side-panel/panel-header-action.js +103 -0
  540. package/dist/components/side-panel/panel-header.d.ts +78 -78
  541. package/dist/components/side-panel/panel-header.js +301 -0
  542. package/dist/components/side-panel/panel-tab.d.ts +20 -20
  543. package/dist/components/side-panel/panel-tab.js +72 -0
  544. package/dist/components/side-panel/panel-title.d.ts +4 -4
  545. package/dist/components/side-panel/panel-title.js +44 -0
  546. package/dist/components/side-panel/panel-toggle.d.ts +14 -14
  547. package/dist/components/side-panel/panel-toggle.js +65 -0
  548. package/dist/components/side-panel/side-bar.d.ts +76 -76
  549. package/dist/components/side-panel/side-bar.js +140 -0
  550. package/dist/components/side-panel.d.ts +134 -134
  551. package/dist/components/side-panel.js +235 -0
  552. package/dist/components/types.d.ts +44 -44
  553. package/dist/components/types.js +6 -0
  554. package/dist/connect/keplergl-connect.d.ts +5 -5
  555. package/dist/connect/keplergl-connect.js +59 -0
  556. package/dist/connect/with-local-selector.d.ts +6 -6
  557. package/dist/connect/with-local-selector.js +102 -0
  558. package/dist/constants/action-types.d.ts +111 -111
  559. package/dist/constants/action-types.js +184 -0
  560. package/dist/constants/color-palette.d.ts +491 -491
  561. package/dist/constants/color-palette.js +536 -0
  562. package/dist/constants/color-ranges.d.ts +24 -24
  563. package/dist/constants/color-ranges.js +83 -0
  564. package/dist/constants/custom-color-ranges.d.ts +37 -37
  565. package/dist/constants/custom-color-ranges.js +410 -0
  566. package/dist/constants/default-settings.d.ts +773 -773
  567. package/dist/constants/default-settings.js +832 -0
  568. package/dist/constants/index.d.ts +9 -9
  569. package/dist/constants/index.js +387 -0
  570. package/dist/constants/keyevent.d.ts +2 -2
  571. package/dist/constants/keyevent.js +43 -0
  572. package/dist/constants/tooltip.d.ts +165 -165
  573. package/dist/constants/tooltip.js +202 -0
  574. package/dist/constants/user-feedbacks.d.ts +5 -5
  575. package/dist/constants/user-feedbacks.js +32 -0
  576. package/dist/constants/user-guides.d.ts +9 -9
  577. package/dist/constants/user-guides.js +36 -0
  578. package/dist/deckgl-layers/3d-building-layer/3d-building-layer.d.ts +13 -13
  579. package/dist/deckgl-layers/3d-building-layer/3d-building-layer.js +92 -0
  580. package/dist/deckgl-layers/3d-building-layer/3d-building-utils.d.ts +7 -7
  581. package/dist/deckgl-layers/3d-building-layer/3d-building-utils.js +181 -0
  582. package/dist/deckgl-layers/3d-building-layer/types.d.ts +37 -0
  583. package/dist/deckgl-layers/3d-building-layer/types.js +6 -0
  584. package/dist/deckgl-layers/cluster-layer/cluster-layer.js +312 -0
  585. package/dist/deckgl-layers/column-layer/enhanced-column-layer.d.ts +6 -6
  586. package/dist/deckgl-layers/column-layer/enhanced-column-layer.js +75 -0
  587. package/dist/deckgl-layers/grid-layer/enhanced-cpu-grid-layer.d.ts +13 -13
  588. package/dist/deckgl-layers/grid-layer/enhanced-cpu-grid-layer.js +96 -0
  589. package/dist/deckgl-layers/hexagon-layer/enhanced-hexagon-layer.d.ts +13 -13
  590. package/dist/deckgl-layers/hexagon-layer/enhanced-hexagon-layer.js +96 -0
  591. package/dist/deckgl-layers/layer-utils/cluster-utils.js +107 -0
  592. package/dist/deckgl-layers/layer-utils/cpu-aggregator.d.ts +91 -91
  593. package/dist/deckgl-layers/layer-utils/cpu-aggregator.js +585 -0
  594. package/dist/deckgl-layers/layer-utils/shader-utils.d.ts +1 -1
  595. package/dist/deckgl-layers/layer-utils/shader-utils.js +46 -0
  596. package/dist/deckgl-layers/line-layer/line-layer.d.ts +12 -12
  597. package/dist/deckgl-layers/line-layer/line-layer.js +106 -0
  598. package/dist/deckgl-layers/svg-icon-layer/scatterplot-icon-layer.d.ts +8 -8
  599. package/dist/deckgl-layers/svg-icon-layer/scatterplot-icon-layer.js +80 -0
  600. package/dist/deckgl-layers/svg-icon-layer/svg-icon-layer.d.ts +18 -18
  601. package/dist/deckgl-layers/svg-icon-layer/svg-icon-layer.js +123 -0
  602. package/dist/index.d.ts +11 -11
  603. package/dist/index.js +179 -0
  604. package/dist/layers/aggregation-layer.d.ts +70 -70
  605. package/dist/layers/aggregation-layer.js +392 -0
  606. package/dist/layers/arc-layer/arc-layer-icon.d.ts +16 -16
  607. package/dist/layers/arc-layer/arc-layer-icon.js +76 -0
  608. package/dist/layers/arc-layer/arc-layer.d.ts +143 -143
  609. package/dist/layers/arc-layer/arc-layer.js +252 -0
  610. package/dist/layers/base-layer.d.ts +436 -436
  611. package/dist/layers/base-layer.js +1703 -0
  612. package/dist/layers/cluster-layer/cluster-layer-icon.d.ts +16 -16
  613. package/dist/layers/cluster-layer/cluster-layer-icon.js +79 -0
  614. package/dist/layers/cluster-layer/cluster-layer.d.ts +39 -39
  615. package/dist/layers/cluster-layer/cluster-layer.js +139 -0
  616. package/dist/layers/default-layer-icon.d.ts +14 -14
  617. package/dist/layers/default-layer-icon.js +86 -0
  618. package/dist/layers/geojson-layer/geojson-layer-icon.d.ts +15 -15
  619. package/dist/layers/geojson-layer/geojson-layer-icon.js +90 -0
  620. package/dist/layers/geojson-layer/geojson-layer.d.ts +227 -230
  621. package/dist/layers/geojson-layer/geojson-layer.js +423 -0
  622. package/dist/layers/geojson-layer/geojson-utils.d.ts +44 -44
  623. package/dist/layers/geojson-layer/geojson-utils.js +184 -0
  624. package/dist/layers/grid-layer/grid-layer-icon.d.ts +15 -15
  625. package/dist/layers/grid-layer/grid-layer-icon.js +135 -0
  626. package/dist/layers/grid-layer/grid-layer.d.ts +74 -74
  627. package/dist/layers/grid-layer/grid-layer.js +104 -0
  628. package/dist/layers/grid-layer/grid-utils.d.ts +24 -24
  629. package/dist/layers/grid-layer/grid-utils.js +59 -0
  630. package/dist/layers/h3-hexagon-layer/h3-hexagon-layer-icon.d.ts +16 -16
  631. package/dist/layers/h3-hexagon-layer/h3-hexagon-layer-icon.js +70 -0
  632. package/dist/layers/h3-hexagon-layer/h3-hexagon-layer.d.ts +170 -170
  633. package/dist/layers/h3-hexagon-layer/h3-hexagon-layer.js +321 -0
  634. package/dist/layers/h3-hexagon-layer/h3-utils.d.ts +20 -20
  635. package/dist/layers/h3-hexagon-layer/h3-utils.js +86 -0
  636. package/dist/layers/heatmap-layer/heatmap-layer-icon.d.ts +15 -15
  637. package/dist/layers/heatmap-layer/heatmap-layer-icon.js +87 -0
  638. package/dist/layers/heatmap-layer/heatmap-layer.d.ts +144 -144
  639. package/dist/layers/heatmap-layer/heatmap-layer.js +236 -0
  640. package/dist/layers/hexagon-layer/hexagon-layer-icon.d.ts +15 -15
  641. package/dist/layers/hexagon-layer/hexagon-layer-icon.js +99 -0
  642. package/dist/layers/hexagon-layer/hexagon-layer.d.ts +78 -78
  643. package/dist/layers/hexagon-layer/hexagon-layer.js +108 -0
  644. package/dist/layers/hexagon-layer/hexagon-utils.d.ts +7 -7
  645. package/dist/layers/hexagon-layer/hexagon-utils.js +62 -0
  646. package/dist/layers/icon-layer/icon-info-modal.d.ts +3 -3
  647. package/dist/layers/icon-layer/icon-info-modal.js +115 -0
  648. package/dist/layers/icon-layer/icon-layer-icon.d.ts +15 -15
  649. package/dist/layers/icon-layer/icon-layer-icon.js +72 -0
  650. package/dist/layers/icon-layer/icon-layer.d.ts +119 -119
  651. package/dist/layers/icon-layer/icon-layer.js +366 -0
  652. package/dist/layers/index.d.ts +53 -53
  653. package/dist/layers/index.js +105 -0
  654. package/dist/layers/layer-factory.d.ts +150 -150
  655. package/dist/layers/layer-factory.js +517 -0
  656. package/dist/layers/layer-text-label.d.ts +7 -7
  657. package/dist/layers/layer-text-label.js +60 -0
  658. package/dist/layers/layer-update.d.ts +9 -9
  659. package/dist/layers/layer-update.js +73 -0
  660. package/dist/layers/line-layer/line-layer-icon.d.ts +15 -15
  661. package/dist/layers/line-layer/line-layer-icon.js +78 -0
  662. package/dist/layers/line-layer/line-layer.d.ts +136 -136
  663. package/dist/layers/line-layer/line-layer.js +191 -0
  664. package/dist/layers/mapbox-utils.d.ts +57 -57
  665. package/dist/layers/mapbox-utils.js +186 -0
  666. package/dist/layers/mapboxgl-layer.d.ts +87 -87
  667. package/dist/layers/mapboxgl-layer.js +201 -0
  668. package/dist/layers/point-layer/point-layer-icon.d.ts +15 -15
  669. package/dist/layers/point-layer/point-layer-icon.js +93 -0
  670. package/dist/layers/point-layer/point-layer.d.ts +272 -272
  671. package/dist/layers/point-layer/point-layer.js +457 -0
  672. package/dist/layers/s2-geometry-layer/s2-geometry-layer.d.ts +189 -189
  673. package/dist/layers/s2-geometry-layer/s2-geometry-layer.js +306 -0
  674. package/dist/layers/s2-geometry-layer/s2-layer-icon.d.ts +15 -15
  675. package/dist/layers/s2-geometry-layer/s2-layer-icon.js +69 -0
  676. package/dist/layers/s2-geometry-layer/s2-utils.d.ts +7 -7
  677. package/dist/layers/s2-geometry-layer/s2-utils.js +51 -0
  678. package/dist/layers/scenegraph-layer/scenegraph-info-modal.d.ts +3 -3
  679. package/dist/layers/scenegraph-layer/scenegraph-info-modal.js +54 -0
  680. package/dist/layers/scenegraph-layer/scenegraph-layer-icon.d.ts +15 -15
  681. package/dist/layers/scenegraph-layer/scenegraph-layer-icon.js +150 -0
  682. package/dist/layers/scenegraph-layer/scenegraph-layer.d.ts +80 -80
  683. package/dist/layers/scenegraph-layer/scenegraph-layer.js +230 -0
  684. package/dist/layers/trip-layer/trip-info-modal.d.ts +3 -3
  685. package/dist/layers/trip-layer/trip-info-modal.js +59 -0
  686. package/dist/layers/trip-layer/trip-layer-icon.d.ts +15 -15
  687. package/dist/layers/trip-layer/trip-layer-icon.js +88 -0
  688. package/dist/layers/trip-layer/trip-layer.d.ts +157 -157
  689. package/dist/layers/trip-layer/trip-layer.js +369 -0
  690. package/dist/layers/trip-layer/trip-utils.d.ts +31 -31
  691. package/dist/layers/trip-layer/trip-utils.js +180 -0
  692. package/dist/layers/types.d.ts +15 -15
  693. package/dist/layers/types.js +44 -0
  694. package/dist/localization/formatted-message.d.ts +12 -12
  695. package/dist/localization/formatted-message.js +39 -0
  696. package/dist/localization/index.d.ts +5 -5
  697. package/dist/localization/index.js +54 -0
  698. package/dist/localization/locales.d.ts +27 -27
  699. package/dist/localization/locales.js +59 -0
  700. package/dist/localization/messages.d.ts +4 -4
  701. package/dist/localization/messages.js +37 -0
  702. package/dist/localization/translations/ca.d.ts +438 -438
  703. package/dist/localization/translations/ca.js +466 -0
  704. package/dist/localization/translations/cn.d.ts +441 -441
  705. package/dist/localization/translations/cn.js +469 -0
  706. package/dist/localization/translations/en.d.ts +466 -466
  707. package/dist/localization/translations/en.js +494 -0
  708. package/dist/localization/translations/es.d.ts +438 -438
  709. package/dist/localization/translations/es.js +466 -0
  710. package/dist/localization/translations/fi.d.ts +410 -410
  711. package/dist/localization/translations/fi.js +438 -0
  712. package/dist/localization/translations/ja.d.ts +439 -439
  713. package/dist/localization/translations/ja.js +467 -0
  714. package/dist/localization/translations/pt.d.ts +410 -410
  715. package/dist/localization/translations/pt.js +438 -0
  716. package/dist/localization/translations/ru.d.ts +447 -447
  717. package/dist/localization/translations/ru.js +475 -0
  718. package/dist/middleware/index.d.ts +8 -8
  719. package/dist/middleware/index.js +44 -0
  720. package/dist/processors/data-processor.d.ts +242 -242
  721. package/dist/processors/data-processor.js +721 -0
  722. package/dist/processors/file-handler.d.ts +28 -28
  723. package/dist/processors/file-handler.js +357 -0
  724. package/dist/processors/index.d.ts +3 -3
  725. package/dist/processors/index.js +39 -0
  726. package/dist/processors/types.d.ts +21 -21
  727. package/dist/processors/types.js +6 -0
  728. package/dist/reducers/combined-updaters.d.ts +52 -52
  729. package/dist/reducers/combined-updaters.js +180 -0
  730. package/dist/reducers/composer-helpers.d.ts +21 -21
  731. package/dist/reducers/composer-helpers.js +111 -0
  732. package/dist/reducers/composers.d.ts +12 -12
  733. package/dist/reducers/composers.js +40 -0
  734. package/dist/reducers/core.d.ts +65 -65
  735. package/dist/reducers/core.js +119 -0
  736. package/dist/reducers/index.d.ts +19 -19
  737. package/dist/reducers/index.js +137 -0
  738. package/dist/reducers/map-state-updaters.d.ts +96 -96
  739. package/dist/reducers/map-state-updaters.js +220 -0
  740. package/dist/reducers/map-state.d.ts +4 -4
  741. package/dist/reducers/map-state.js +52 -0
  742. package/dist/reducers/map-style-updaters.d.ts +204 -204
  743. package/dist/reducers/map-style-updaters.js +473 -0
  744. package/dist/reducers/map-style.d.ts +16 -16
  745. package/dist/reducers/map-style.js +51 -0
  746. package/dist/reducers/provider-state-updaters.d.ts +41 -41
  747. package/dist/reducers/provider-state-updaters.js +421 -0
  748. package/dist/reducers/provider-state.d.ts +4 -4
  749. package/dist/reducers/provider-state.js +53 -0
  750. package/dist/reducers/root.d.ts +24 -24
  751. package/dist/reducers/root.js +212 -0
  752. package/dist/reducers/types.d.ts +16 -16
  753. package/dist/reducers/types.js +6 -0
  754. package/dist/reducers/ui-state-updaters.d.ts +433 -433
  755. package/dist/reducers/ui-state-updaters.js +744 -0
  756. package/dist/reducers/ui-state.d.ts +3 -3
  757. package/dist/reducers/ui-state.js +54 -0
  758. package/dist/reducers/vis-state-merger.d.ts +110 -110
  759. package/dist/reducers/vis-state-merger.js +569 -0
  760. package/dist/reducers/vis-state-selectors.d.ts +10 -10
  761. package/dist/reducers/vis-state-selectors.js +47 -0
  762. package/dist/reducers/vis-state-updaters.d.ts +645 -645
  763. package/dist/reducers/vis-state-updaters.js +2102 -0
  764. package/dist/reducers/vis-state.d.ts +4 -4
  765. package/dist/reducers/vis-state.js +53 -0
  766. package/dist/schemas/dataset-schema.d.ts +17 -17
  767. package/dist/schemas/dataset-schema.js +166 -0
  768. package/dist/schemas/index.d.ts +8 -8
  769. package/dist/schemas/index.js +125 -0
  770. package/dist/schemas/map-state-schema.d.ts +23 -23
  771. package/dist/schemas/map-state-schema.js +53 -0
  772. package/dist/schemas/map-style-schema.d.ts +38 -38
  773. package/dist/schemas/map-style-schema.js +106 -0
  774. package/dist/schemas/schema-manager.d.ts +271 -271
  775. package/dist/schemas/schema-manager.js +246 -0
  776. package/dist/schemas/schema-utils.d.ts +11 -11
  777. package/dist/schemas/schema-utils.js +58 -0
  778. package/dist/schemas/schema.d.ts +37 -37
  779. package/dist/schemas/schema.js +119 -0
  780. package/dist/schemas/versions.d.ts +5 -5
  781. package/dist/schemas/versions.js +34 -0
  782. package/dist/schemas/vis-state-schema.d.ts +214 -214
  783. package/dist/schemas/vis-state-schema.js +886 -0
  784. package/dist/styles/base.d.ts +1530 -1530
  785. package/dist/styles/base.js +1301 -0
  786. package/dist/styles/index.d.ts +2 -2
  787. package/dist/styles/index.js +28 -0
  788. package/dist/styles/media-breakpoints.d.ts +13 -13
  789. package/dist/styles/media-breakpoints.js +70 -0
  790. package/dist/tasks/tasks.d.ts +15 -15
  791. package/dist/tasks/tasks.js +94 -0
  792. package/dist/templates/export-map-html.d.ts +9 -9
  793. package/dist/templates/export-map-html.js +42 -0
  794. package/dist/utils/aggregate-utils.d.ts +3 -3
  795. package/dist/utils/aggregate-utils.js +71 -0
  796. package/dist/utils/color-utils.d.ts +44 -44
  797. package/dist/utils/color-utils.js +144 -0
  798. package/dist/utils/custom-scales.js +22 -0
  799. package/dist/utils/data-scale-utils.d.ts +23 -23
  800. package/dist/utils/data-scale-utils.js +70 -0
  801. package/dist/utils/data-utils.d.ts +115 -115
  802. package/dist/utils/data-utils.js +441 -0
  803. package/dist/utils/dataset-utils.d.ts +38 -38
  804. package/dist/utils/dataset-utils.js +236 -0
  805. package/dist/utils/dom-to-image.d.ts +73 -73
  806. package/dist/utils/dom-to-image.js +479 -0
  807. package/dist/utils/dom-utils.d.ts +20 -20
  808. package/dist/utils/dom-utils.js +343 -0
  809. package/dist/utils/export-utils.d.ts +56 -56
  810. package/dist/utils/export-utils.js +266 -0
  811. package/dist/utils/filter-utils.d.ts +267 -267
  812. package/dist/utils/filter-utils.js +1081 -0
  813. package/dist/utils/gl-utils.d.ts +1 -1
  814. package/dist/utils/gl-utils.js +43 -0
  815. package/dist/utils/gpu-filter-utils.d.ts +28 -28
  816. package/dist/utils/gpu-filter-utils.js +241 -0
  817. package/dist/utils/index.d.ts +22 -22
  818. package/dist/utils/index.js +361 -0
  819. package/dist/utils/interaction-utils.d.ts +36 -36
  820. package/dist/utils/interaction-utils.js +170 -0
  821. package/dist/utils/layer-utils.d.ts +54 -54
  822. package/dist/utils/layer-utils.js +200 -0
  823. package/dist/utils/locale-utils.d.ts +2 -2
  824. package/dist/utils/locale-utils.js +56 -0
  825. package/dist/utils/map-info-utils.d.ts +1 -1
  826. package/dist/utils/map-info-utils.js +31 -0
  827. package/dist/utils/map-style-utils/mapbox-gl-style-editor.d.ts +64 -64
  828. package/dist/utils/map-style-utils/mapbox-gl-style-editor.js +213 -0
  829. package/dist/utils/map-style-utils/mapbox-utils.d.ts +3 -3
  830. package/dist/utils/map-style-utils/mapbox-utils.js +33 -0
  831. package/dist/utils/mapbox-utils.d.ts +7 -7
  832. package/dist/utils/mapbox-utils.js +36 -0
  833. package/dist/utils/notifications-utils.d.ts +54 -54
  834. package/dist/utils/notifications-utils.js +90 -0
  835. package/dist/utils/observe-dimensions.d.ts +15 -15
  836. package/dist/utils/observe-dimensions.js +142 -0
  837. package/dist/utils/projection-utils.d.ts +12 -12
  838. package/dist/utils/projection-utils.js +72 -0
  839. package/dist/utils/searcher-utils.d.ts +1 -1
  840. package/dist/utils/searcher-utils.js +42 -0
  841. package/dist/utils/split-map-utils.d.ts +29 -29
  842. package/dist/utils/split-map-utils.js +112 -0
  843. package/dist/utils/table-utils/data-container-interface.d.ts +115 -115
  844. package/dist/utils/table-utils/data-container-interface.js +6 -0
  845. package/dist/utils/table-utils/data-container-utils.d.ts +29 -29
  846. package/dist/utils/table-utils/data-container-utils.js +84 -0
  847. package/dist/utils/table-utils/data-row.d.ts +59 -59
  848. package/dist/utils/table-utils/data-row.js +124 -0
  849. package/dist/utils/table-utils/index.d.ts +1 -1
  850. package/dist/utils/table-utils/index.js +19 -0
  851. package/dist/utils/table-utils/indexed-data-container.d.ts +34 -34
  852. package/dist/utils/table-utils/indexed-data-container.js +228 -0
  853. package/dist/utils/table-utils/kepler-table.d.ts +168 -168
  854. package/dist/utils/table-utils/kepler-table.js +554 -0
  855. package/dist/utils/table-utils/row-data-container.d.ts +31 -31
  856. package/dist/utils/table-utils/row-data-container.js +220 -0
  857. package/dist/utils/utils.d.ts +98 -98
  858. package/dist/utils/utils.js +240 -0
  859. package/package.json +51 -33
  860. package/src/components/common/portaled.tsx +5 -9
  861. package/src/constants/action-types.ts +1 -1
  862. package/src/index.ts +1 -1
  863. package/src/middleware/index.ts +1 -1
  864. package/src/reducers/map-style-updaters.ts +1 -1
  865. package/src/reducers/provider-state-updaters.ts +1 -1
  866. package/src/reducers/root.ts +1 -1
  867. package/src/reducers/vis-state-updaters.ts +1 -1
  868. package/src/schemas/schema.ts +1 -1
  869. package/src/tasks/tasks.ts +1 -1
  870. package/dist/bundle.js +0 -54227
  871. package/dist/bundle.js.map +0 -1
  872. package/dist/deckgl-layers/layer-utils/cluster-utils.d.ts +0 -12
@@ -0,0 +1,554 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.copyTable = copyTable;
8
+ exports.copyTableAndUpdate = copyTableAndUpdate;
9
+ exports["default"] = void 0;
10
+ exports.findPointFieldPairs = findPointFieldPairs;
11
+ exports.pinTableColumns = pinTableColumns;
12
+ exports.removeSuffixAndDelimiters = removeSuffixAndDelimiters;
13
+ exports.sortDatasetByColumn = sortDatasetByColumn;
14
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
15
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
16
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
17
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
18
+ var _console = require("global/console");
19
+ var _defaultSettings = require("../../constants/default-settings");
20
+ var _d3Array = require("d3-array");
21
+ var _utils = require("../utils");
22
+ var _gpuFilterUtils = require("../gpu-filter-utils");
23
+ var _filterUtils = require("../filter-utils");
24
+ var _dataUtils = require("../data-utils");
25
+ var _dataScaleUtils = require("../data-scale-utils");
26
+ var _dataContainerUtils = require("./data-container-utils");
27
+ var _colorUtils = require("../color-utils");
28
+ function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
29
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
30
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
31
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
32
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } // Copyright (c) 2022 Uber Technologies, Inc.
33
+ //
34
+ // Permission is hereby granted, free of charge, to any person obtaining a copy
35
+ // of this software and associated documentation files (the "Software"), to deal
36
+ // in the Software without restriction, including without limitation the rights
37
+ // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
38
+ // copies of the Software, and to permit persons to whom the Software is
39
+ // furnished to do so, subject to the following conditions:
40
+ //
41
+ // The above copyright notice and this permission notice shall be included in
42
+ // all copies or substantial portions of the Software.
43
+ //
44
+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
45
+ // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
46
+ // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
47
+ // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
48
+ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
49
+ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
50
+ // THE SOFTWARE.
51
+ // import {validateInputData} from 'processors/data-processor';
52
+ // Unique identifier of each field
53
+ var FID_KEY = 'name';
54
+ var KeplerTable = /*#__PURE__*/function () {
55
+ // fields and data
56
+
57
+ // table-injected metadata
58
+
59
+ // table-injected metadata
60
+
61
+ function KeplerTable(_ref) {
62
+ var _ref$info = _ref.info,
63
+ info = _ref$info === void 0 ? {} : _ref$info,
64
+ data = _ref.data,
65
+ color = _ref.color,
66
+ metadata = _ref.metadata,
67
+ supportedFilterTypes = _ref.supportedFilterTypes;
68
+ (0, _classCallCheck2["default"])(this, KeplerTable);
69
+ // TODO - what to do if validation fails? Can kepler handle exceptions?
70
+ // const validatedData = validateInputData(data);
71
+ // if (!validatedData) {
72
+ // return this;
73
+ // }
74
+
75
+ // @ts-expect-error
76
+ var dataContainer = (0, _dataContainerUtils.createDataContainer)(data.rows, {
77
+ fields: data.fields
78
+ });
79
+ var datasetInfo = _objectSpread({
80
+ id: (0, _utils.generateHashId)(4),
81
+ label: 'new dataset'
82
+ }, info || {});
83
+ var dataId = datasetInfo.id;
84
+ // @ts-expect-error
85
+ var fields = data.fields.map(function (f, i) {
86
+ return _objectSpread(_objectSpread({}, f), {}, {
87
+ fieldIdx: i,
88
+ id: f.name,
89
+ displayName: f.displayName || f.name,
90
+ valueAccessor: _dataUtils.maybeToDate.bind(null,
91
+ // is time
92
+ f.type === _defaultSettings.ALL_FIELD_TYPES.timestamp || f.type === _defaultSettings.ALL_FIELD_TYPES.date, i, f.format, dataContainer)
93
+ });
94
+ });
95
+ var allIndexes = dataContainer.getPlainIndex();
96
+ this.id = datasetInfo.id;
97
+ this.label = datasetInfo.label;
98
+ this.color = color;
99
+ this.metadata = _objectSpread(_objectSpread({}, metadata), {}, {
100
+ id: datasetInfo.id,
101
+ label: datasetInfo.label
102
+ });
103
+ this.dataContainer = dataContainer;
104
+ this.allIndexes = allIndexes;
105
+ this.filteredIndex = allIndexes;
106
+ this.filteredIndexForDomain = allIndexes;
107
+ this.fieldPairs = findPointFieldPairs(fields);
108
+ this.fields = fields;
109
+ this.gpuFilter = (0, _gpuFilterUtils.getGpuFilterProps)([], dataId, fields);
110
+ if (supportedFilterTypes) {
111
+ this.supportedFilterTypes = supportedFilterTypes;
112
+ }
113
+ }
114
+
115
+ /**
116
+ * Get field
117
+ * @param columnName
118
+ */
119
+ return (0, _createClass2["default"])(KeplerTable, [{
120
+ key: "getColumnField",
121
+ value: function getColumnField(columnName) {
122
+ var field = this.fields.find(function (fd) {
123
+ return fd[FID_KEY] === columnName;
124
+ });
125
+ this._assetField(columnName, field);
126
+ return field;
127
+ }
128
+
129
+ /**
130
+ * Get fieldIdx
131
+ * @param columnName
132
+ */
133
+ }, {
134
+ key: "getColumnFieldIdx",
135
+ value: function getColumnFieldIdx(columnName) {
136
+ var fieldIdx = this.fields.findIndex(function (fd) {
137
+ return fd[FID_KEY] === columnName;
138
+ });
139
+ this._assetField(columnName, Boolean(fieldIdx > -1));
140
+ return fieldIdx;
141
+ }
142
+
143
+ /**
144
+ * Get the value of a cell
145
+ */
146
+ }, {
147
+ key: "getValue",
148
+ value: function getValue(columnName, rowIdx) {
149
+ var field = this.getColumnField(columnName);
150
+ return field ? field.valueAccessor({
151
+ index: rowIdx
152
+ }) : null;
153
+ }
154
+
155
+ /**
156
+ * Updates existing field with a new object
157
+ * @param fieldIdx
158
+ * @param newField
159
+ */
160
+ }, {
161
+ key: "updateColumnField",
162
+ value: function updateColumnField(fieldIdx, newField) {
163
+ this.fields = Object.assign((0, _toConsumableArray2["default"])(this.fields), (0, _defineProperty2["default"])({}, fieldIdx, newField));
164
+ }
165
+
166
+ /**
167
+ * Update dataset color by custom color
168
+ * @param newColor
169
+ */
170
+ }, {
171
+ key: "updateTableColor",
172
+ value: function updateTableColor(newColor) {
173
+ this.color = newColor;
174
+ }
175
+
176
+ /**
177
+ * Save filterProps to field and retrieve it
178
+ * @param columnName
179
+ */
180
+ }, {
181
+ key: "getColumnFilterProps",
182
+ value: function getColumnFilterProps(columnName) {
183
+ var fieldIdx = this.getColumnFieldIdx(columnName);
184
+ if (fieldIdx < 0) {
185
+ return null;
186
+ }
187
+ var field = this.fields[fieldIdx];
188
+ if (field.hasOwnProperty('filterProps')) {
189
+ return field.filterProps;
190
+ }
191
+ var fieldDomain = this.getColumnFilterDomain(field);
192
+ if (!fieldDomain) {
193
+ return null;
194
+ }
195
+ var filterProps = (0, _filterUtils.getFilterProps)(field, fieldDomain);
196
+ var newField = _objectSpread(_objectSpread({}, field), {}, {
197
+ filterProps: filterProps
198
+ });
199
+ this.updateColumnField(fieldIdx, newField);
200
+ return filterProps;
201
+ }
202
+
203
+ /**
204
+ * Apply filters to dataset, return the filtered dataset with updated `gpuFilter`, `filterRecord`, `filteredIndex`, `filteredIndexForDomain`
205
+ * @param filters
206
+ * @param layers
207
+ * @param opt
208
+ */
209
+ }, {
210
+ key: "filterTable",
211
+ value: function filterTable(filters, layers, opt) {
212
+ var _this = this;
213
+ var dataContainer = this.dataContainer,
214
+ dataId = this.id,
215
+ oldFilterRecord = this.filterRecord,
216
+ fields = this.fields;
217
+
218
+ // if there is no filters
219
+ var filterRecord = (0, _filterUtils.getFilterRecord)(dataId, filters, opt || {});
220
+ this.filterRecord = filterRecord;
221
+ this.gpuFilter = (0, _gpuFilterUtils.getGpuFilterProps)(filters, dataId, fields);
222
+
223
+ // const newDataset = set(['filterRecord'], filterRecord, dataset);
224
+
225
+ if (!filters.length) {
226
+ this.filteredIndex = this.allIndexes;
227
+ this.filteredIndexForDomain = this.allIndexes;
228
+ return this;
229
+ }
230
+ this.changedFilters = (0, _filterUtils.diffFilters)(filterRecord, oldFilterRecord);
231
+
232
+ // generate 2 sets of filter result
233
+ // filteredIndex used to calculate layer data
234
+ // filteredIndexForDomain used to calculate layer Domain
235
+ var shouldCalDomain = Boolean(this.changedFilters.dynamicDomain);
236
+ var shouldCalIndex = Boolean(this.changedFilters.cpu);
237
+ var filterResult = {};
238
+ if (shouldCalDomain || shouldCalIndex) {
239
+ var dynamicDomainFilters = shouldCalDomain ? filterRecord.dynamicDomain : null;
240
+ var cpuFilters = shouldCalIndex ? filterRecord.cpu : null;
241
+ var filterFuncs = filters.reduce(function (acc, filter) {
242
+ var fieldIndex = (0, _gpuFilterUtils.getDatasetFieldIndexForFilter)(_this.id, filter);
243
+ var field = fieldIndex !== -1 ? fields[fieldIndex] : null;
244
+ return _objectSpread(_objectSpread({}, acc), {}, (0, _defineProperty2["default"])({}, filter.id, (0, _filterUtils.getFilterFunction)(field, _this.id, filter, layers, dataContainer)));
245
+ }, {});
246
+ filterResult = (0, _filterUtils.filterDataByFilterTypes)({
247
+ dynamicDomainFilters: dynamicDomainFilters,
248
+ cpuFilters: cpuFilters,
249
+ filterFuncs: filterFuncs
250
+ }, dataContainer);
251
+ }
252
+ this.filteredIndex = filterResult.filteredIndex || this.filteredIndex;
253
+ this.filteredIndexForDomain = filterResult.filteredIndexForDomain || this.filteredIndexForDomain;
254
+ return this;
255
+ }
256
+
257
+ /**
258
+ * Apply filters to a dataset all on CPU, assign to `filteredIdxCPU`, `filterRecordCPU`
259
+ * @param filters
260
+ * @param layers
261
+ */
262
+ }, {
263
+ key: "filterTableCPU",
264
+ value: function filterTableCPU(filters, layers) {
265
+ var opt = {
266
+ cpuOnly: true,
267
+ ignoreDomain: true
268
+ };
269
+
270
+ // no filter
271
+ if (!filters.length) {
272
+ this.filteredIdxCPU = this.allIndexes;
273
+ this.filterRecordCPU = (0, _filterUtils.getFilterRecord)(this.id, filters, opt);
274
+ return this;
275
+ }
276
+
277
+ // no gpu filter
278
+ if (!filters.find(function (f) {
279
+ return f.gpu;
280
+ })) {
281
+ this.filteredIdxCPU = this.filteredIndex;
282
+ this.filterRecordCPU = (0, _filterUtils.getFilterRecord)(this.id, filters, opt);
283
+ return this;
284
+ }
285
+
286
+ // make a copy for cpu filtering
287
+ var copied = copyTable(this);
288
+ copied.filterRecord = this.filterRecordCPU;
289
+ copied.filteredIndex = this.filteredIdxCPU || [];
290
+ var filtered = copied.filterTable(filters, layers, opt);
291
+ this.filteredIdxCPU = filtered.filteredIndex;
292
+ this.filterRecordCPU = filtered.filterRecord;
293
+ return this;
294
+ }
295
+
296
+ /**
297
+ * Calculate field domain based on field type and data
298
+ * for Filter
299
+ */
300
+ }, {
301
+ key: "getColumnFilterDomain",
302
+ value: function getColumnFilterDomain(field) {
303
+ var dataContainer = this.dataContainer;
304
+ var valueAccessor = field.valueAccessor;
305
+ var domain;
306
+ switch (field.type) {
307
+ case _defaultSettings.ALL_FIELD_TYPES.real:
308
+ case _defaultSettings.ALL_FIELD_TYPES.integer:
309
+ // calculate domain and step
310
+ return (0, _filterUtils.getNumericFieldDomain)(dataContainer, valueAccessor);
311
+ case _defaultSettings.ALL_FIELD_TYPES["boolean"]:
312
+ return {
313
+ domain: [true, false]
314
+ };
315
+ case _defaultSettings.ALL_FIELD_TYPES.string:
316
+ case _defaultSettings.ALL_FIELD_TYPES.date:
317
+ domain = (0, _dataScaleUtils.getOrdinalDomain)(dataContainer, valueAccessor);
318
+ return {
319
+ domain: domain
320
+ };
321
+ case _defaultSettings.ALL_FIELD_TYPES.timestamp:
322
+ return (0, _filterUtils.getTimestampFieldDomain)(dataContainer, valueAccessor);
323
+ default:
324
+ return {
325
+ domain: (0, _dataScaleUtils.getOrdinalDomain)(dataContainer, valueAccessor)
326
+ };
327
+ }
328
+ }
329
+
330
+ /**
331
+ * Get the domain of this column based on scale type
332
+ */
333
+ }, {
334
+ key: "getColumnLayerDomain",
335
+ value: function getColumnLayerDomain(field, scaleType) {
336
+ var dataContainer = this.dataContainer,
337
+ filteredIndexForDomain = this.filteredIndexForDomain;
338
+ if (!_defaultSettings.SCALE_TYPES[scaleType]) {
339
+ _console.console.error("scale type ".concat(scaleType, " not supported"));
340
+ return null;
341
+ }
342
+ var valueAccessor = field.valueAccessor;
343
+ var indexValueAccessor = function indexValueAccessor(i) {
344
+ return valueAccessor({
345
+ index: i
346
+ });
347
+ };
348
+ var sortFunction = (0, _dataUtils.getSortingFunction)(field.type);
349
+ switch (scaleType) {
350
+ case _defaultSettings.SCALE_TYPES.ordinal:
351
+ case _defaultSettings.SCALE_TYPES.point:
352
+ // do not recalculate ordinal domain based on filtered data
353
+ // don't need to update ordinal domain every time
354
+ return (0, _dataScaleUtils.getOrdinalDomain)(dataContainer, valueAccessor);
355
+ case _defaultSettings.SCALE_TYPES.quantile:
356
+ return (0, _dataScaleUtils.getQuantileDomain)(filteredIndexForDomain, indexValueAccessor, sortFunction);
357
+ case _defaultSettings.SCALE_TYPES.log:
358
+ return (0, _dataScaleUtils.getLogDomain)(filteredIndexForDomain, indexValueAccessor);
359
+ case _defaultSettings.SCALE_TYPES.quantize:
360
+ case _defaultSettings.SCALE_TYPES.linear:
361
+ case _defaultSettings.SCALE_TYPES.sqrt:
362
+ default:
363
+ return (0, _dataScaleUtils.getLinearDomain)(filteredIndexForDomain, indexValueAccessor);
364
+ }
365
+ }
366
+ }, {
367
+ key: "calculateLegend",
368
+ value: function calculateLegend(leftField, rightField) {
369
+ var limitOfNumberOfLegendEntries = 20;
370
+ var leftValues = this.dataContainer.mapIndex(leftField.valueAccessor);
371
+ var rightValues = this.dataContainer.mapIndex(rightField.valueAccessor);
372
+ var pairing = leftValues.reduce(function (previous, current, idx) {
373
+ previous.push([current, rightValues[idx]]);
374
+ return previous;
375
+ }, []);
376
+ return (0, _dataUtils.uniqueSortedPairByFrequency)(pairing).map(function (row) {
377
+ return {
378
+ label: row.left,
379
+ color: (0, _colorUtils.checkColorOrFallback)(row.right)
380
+ };
381
+ }).slice(0, limitOfNumberOfLegendEntries + 1); // Limit to limitOfNumberOfLegendEntries + 1, then limit to limitOfNumberOfLegendEntries in LegendManagers
382
+ }
383
+
384
+ /**
385
+ * Get a sample of rows to calculate layer boundaries
386
+ */
387
+ // getSampleData(rows)
388
+
389
+ /**
390
+ * Parse cell value based on column type and return a string representation
391
+ * Value the field value, type the field type
392
+ */
393
+ // parseFieldValue(value, type)
394
+
395
+ // sortDatasetByColumn()
396
+
397
+ /**
398
+ * Assert whether field exist
399
+ * @param fieldName
400
+ * @param condition
401
+ */
402
+ }, {
403
+ key: "_assetField",
404
+ value: function _assetField(fieldName, condition) {
405
+ if (!condition) {
406
+ _console.console.error("".concat(fieldName, " doesnt exist in dataset ").concat(this.id));
407
+ }
408
+ }
409
+ }]);
410
+ }(); // HELPER FUNCTIONS (MAINLY EXPORTED FOR TEST...)
411
+ function removeSuffixAndDelimiters(layerName, suffix) {
412
+ return layerName.replace(new RegExp(suffix, 'ig'), '').replace(/[_,.]+/g, ' ').trim();
413
+ }
414
+
415
+ /**
416
+ * Find point fields pairs from fields
417
+ *
418
+ * @param fields
419
+ * @returns found point fields
420
+ */
421
+ function findPointFieldPairs(fields) {
422
+ var allNames = fields.map(function (f) {
423
+ return f.name.toLowerCase();
424
+ });
425
+
426
+ // get list of all fields with matching suffixes
427
+ var acc = [];
428
+ var result = allNames.reduce(function (carry, fieldName, idx) {
429
+ // This search for pairs will early exit if found.
430
+ var _iterator = _createForOfIteratorHelper(_defaultSettings.TRIP_POINT_FIELDS),
431
+ _step;
432
+ try {
433
+ var _loop = function _loop() {
434
+ var suffixPair = _step.value;
435
+ // match first suffix```
436
+ if (fieldName.endsWith(suffixPair[0])) {
437
+ // match second suffix
438
+ var otherPattern = new RegExp("".concat(suffixPair[0], "$"));
439
+ var partner = fieldName.replace(otherPattern, suffixPair[1]);
440
+ var partnerIdx = allNames.findIndex(function (d) {
441
+ return d === partner;
442
+ });
443
+ if (partnerIdx > -1) {
444
+ var defaultName = removeSuffixAndDelimiters(fieldName, suffixPair[0]);
445
+ carry.push({
446
+ defaultName: defaultName,
447
+ pair: {
448
+ lat: {
449
+ fieldIdx: idx,
450
+ value: fields[idx].name
451
+ },
452
+ lng: {
453
+ fieldIdx: partnerIdx,
454
+ value: fields[partnerIdx].name
455
+ }
456
+ },
457
+ suffix: suffixPair
458
+ });
459
+ return {
460
+ v: carry
461
+ };
462
+ }
463
+ }
464
+ },
465
+ _ret;
466
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
467
+ _ret = _loop();
468
+ if (_ret) return _ret.v;
469
+ }
470
+ } catch (err) {
471
+ _iterator.e(err);
472
+ } finally {
473
+ _iterator.f();
474
+ }
475
+ return carry;
476
+ }, acc);
477
+
478
+ // prioritize the 'latitude'/'longitude' pair
479
+ result.sort(function (a, b) {
480
+ if (a.defaultName === '' && a.suffix[0] === 'latitude') return -1;
481
+ if (b.defaultName === '' && b.suffix[0] === 'latitude') return 1;
482
+ return 0;
483
+ });
484
+ return result;
485
+ }
486
+
487
+ /**
488
+ *
489
+ * @param dataset
490
+ * @param column
491
+ * @param mode
492
+ * @type
493
+ */
494
+ function sortDatasetByColumn(dataset, column, mode) {
495
+ var allIndexes = dataset.allIndexes,
496
+ fields = dataset.fields,
497
+ dataContainer = dataset.dataContainer;
498
+ var fieldIndex = fields.findIndex(function (f) {
499
+ return f.name === column;
500
+ });
501
+ if (fieldIndex < 0) {
502
+ return dataset;
503
+ }
504
+ var sortBy = _defaultSettings.SORT_ORDER[mode || ''] || _defaultSettings.SORT_ORDER.ASCENDING;
505
+ if (sortBy === _defaultSettings.SORT_ORDER.UNSORT) {
506
+ dataset.sortColumn = {};
507
+ dataset.sortOrder = null;
508
+ return dataset;
509
+ }
510
+ var sortFunction = sortBy === _defaultSettings.SORT_ORDER.ASCENDING ? _d3Array.ascending : _d3Array.descending;
511
+ var sortOrder = allIndexes.slice().sort(function (a, b) {
512
+ return sortFunction(dataContainer.valueAt(a, fieldIndex), dataContainer.valueAt(b, fieldIndex));
513
+ });
514
+ dataset.sortColumn = (0, _defineProperty2["default"])({}, column, sortBy);
515
+ dataset.sortOrder = sortOrder;
516
+ return dataset;
517
+ }
518
+ function pinTableColumns(dataset, column) {
519
+ var field = dataset.getColumnField(column);
520
+ if (!field) {
521
+ return dataset;
522
+ }
523
+ var pinnedColumns;
524
+ if (Array.isArray(dataset.pinnedColumns) && dataset.pinnedColumns.includes(field.name)) {
525
+ // unpin it
526
+ pinnedColumns = dataset.pinnedColumns.filter(function (co) {
527
+ return co !== field.name;
528
+ });
529
+ } else {
530
+ pinnedColumns = (dataset.pinnedColumns || []).concat(field.name);
531
+ }
532
+
533
+ // @ts-ignore
534
+ return copyTableAndUpdate(dataset, {
535
+ pinnedColumns: pinnedColumns
536
+ });
537
+ }
538
+ function copyTable(original) {
539
+ return Object.assign(Object.create(Object.getPrototypeOf(original)), original);
540
+ }
541
+
542
+ /**
543
+ * @type
544
+ * @returns
545
+ */
546
+ function copyTableAndUpdate(original) {
547
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
548
+ return Object.entries(options).reduce(function (acc, entry) {
549
+ acc[entry[0]] = entry[1];
550
+ return acc;
551
+ }, copyTable(original));
552
+ }
553
+ var _default = exports["default"] = KeplerTable;
554
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29uc29sZSIsInJlcXVpcmUiLCJfZGVmYXVsdFNldHRpbmdzIiwiX2QzQXJyYXkiLCJfdXRpbHMiLCJfZ3B1RmlsdGVyVXRpbHMiLCJfZmlsdGVyVXRpbHMiLCJfZGF0YVV0aWxzIiwiX2RhdGFTY2FsZVV0aWxzIiwiX2RhdGFDb250YWluZXJVdGlscyIsIl9jb2xvclV0aWxzIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJyIiwiZSIsInQiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsImxlbmd0aCIsIl9uIiwiRiIsInMiLCJuIiwiZG9uZSIsInZhbHVlIiwiZiIsIlR5cGVFcnJvciIsIm8iLCJhIiwidSIsImNhbGwiLCJuZXh0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJvd25LZXlzIiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiRklEX0tFWSIsIktlcGxlclRhYmxlIiwiX3JlZiIsIl9yZWYkaW5mbyIsImluZm8iLCJkYXRhIiwiY29sb3IiLCJtZXRhZGF0YSIsInN1cHBvcnRlZEZpbHRlclR5cGVzIiwiX2NsYXNzQ2FsbENoZWNrMiIsImRhdGFDb250YWluZXIiLCJjcmVhdGVEYXRhQ29udGFpbmVyIiwicm93cyIsImZpZWxkcyIsImRhdGFzZXRJbmZvIiwiaWQiLCJnZW5lcmF0ZUhhc2hJZCIsImxhYmVsIiwiZGF0YUlkIiwibWFwIiwiaSIsImZpZWxkSWR4IiwiZGlzcGxheU5hbWUiLCJ2YWx1ZUFjY2Vzc29yIiwibWF5YmVUb0RhdGUiLCJiaW5kIiwidHlwZSIsIkFMTF9GSUVMRF9UWVBFUyIsInRpbWVzdGFtcCIsImRhdGUiLCJmb3JtYXQiLCJhbGxJbmRleGVzIiwiZ2V0UGxhaW5JbmRleCIsImZpbHRlcmVkSW5kZXgiLCJmaWx0ZXJlZEluZGV4Rm9yRG9tYWluIiwiZmllbGRQYWlycyIsImZpbmRQb2ludEZpZWxkUGFpcnMiLCJncHVGaWx0ZXIiLCJnZXRHcHVGaWx0ZXJQcm9wcyIsIl9jcmVhdGVDbGFzczIiLCJrZXkiLCJnZXRDb2x1bW5GaWVsZCIsImNvbHVtbk5hbWUiLCJmaWVsZCIsImZpbmQiLCJmZCIsIl9hc3NldEZpZWxkIiwiZ2V0Q29sdW1uRmllbGRJZHgiLCJmaW5kSW5kZXgiLCJCb29sZWFuIiwiZ2V0VmFsdWUiLCJyb3dJZHgiLCJpbmRleCIsInVwZGF0ZUNvbHVtbkZpZWxkIiwibmV3RmllbGQiLCJhc3NpZ24iLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwidXBkYXRlVGFibGVDb2xvciIsIm5ld0NvbG9yIiwiZ2V0Q29sdW1uRmlsdGVyUHJvcHMiLCJoYXNPd25Qcm9wZXJ0eSIsImZpbHRlclByb3BzIiwiZmllbGREb21haW4iLCJnZXRDb2x1bW5GaWx0ZXJEb21haW4iLCJnZXRGaWx0ZXJQcm9wcyIsImZpbHRlclRhYmxlIiwiZmlsdGVycyIsImxheWVycyIsIm9wdCIsIl90aGlzIiwib2xkRmlsdGVyUmVjb3JkIiwiZmlsdGVyUmVjb3JkIiwiZ2V0RmlsdGVyUmVjb3JkIiwiY2hhbmdlZEZpbHRlcnMiLCJkaWZmRmlsdGVycyIsInNob3VsZENhbERvbWFpbiIsImR5bmFtaWNEb21haW4iLCJzaG91bGRDYWxJbmRleCIsImNwdSIsImZpbHRlclJlc3VsdCIsImR5bmFtaWNEb21haW5GaWx0ZXJzIiwiY3B1RmlsdGVycyIsImZpbHRlckZ1bmNzIiwicmVkdWNlIiwiYWNjIiwiZmllbGRJbmRleCIsImdldERhdGFzZXRGaWVsZEluZGV4Rm9yRmlsdGVyIiwiZ2V0RmlsdGVyRnVuY3Rpb24iLCJmaWx0ZXJEYXRhQnlGaWx0ZXJUeXBlcyIsImZpbHRlclRhYmxlQ1BVIiwiY3B1T25seSIsImlnbm9yZURvbWFpbiIsImZpbHRlcmVkSWR4Q1BVIiwiZmlsdGVyUmVjb3JkQ1BVIiwiZ3B1IiwiY29waWVkIiwiY29weVRhYmxlIiwiZmlsdGVyZWQiLCJkb21haW4iLCJyZWFsIiwiaW50ZWdlciIsImdldE51bWVyaWNGaWVsZERvbWFpbiIsInN0cmluZyIsImdldE9yZGluYWxEb21haW4iLCJnZXRUaW1lc3RhbXBGaWVsZERvbWFpbiIsImdldENvbHVtbkxheWVyRG9tYWluIiwic2NhbGVUeXBlIiwiU0NBTEVfVFlQRVMiLCJDb25zb2xlIiwiZXJyb3IiLCJjb25jYXQiLCJpbmRleFZhbHVlQWNjZXNzb3IiLCJzb3J0RnVuY3Rpb24iLCJnZXRTb3J0aW5nRnVuY3Rpb24iLCJvcmRpbmFsIiwicG9pbnQiLCJxdWFudGlsZSIsImdldFF1YW50aWxlRG9tYWluIiwibG9nIiwiZ2V0TG9nRG9tYWluIiwicXVhbnRpemUiLCJsaW5lYXIiLCJzcXJ0IiwiZ2V0TGluZWFyRG9tYWluIiwiY2FsY3VsYXRlTGVnZW5kIiwibGVmdEZpZWxkIiwicmlnaHRGaWVsZCIsImxpbWl0T2ZOdW1iZXJPZkxlZ2VuZEVudHJpZXMiLCJsZWZ0VmFsdWVzIiwibWFwSW5kZXgiLCJyaWdodFZhbHVlcyIsInBhaXJpbmciLCJwcmV2aW91cyIsImN1cnJlbnQiLCJpZHgiLCJ1bmlxdWVTb3J0ZWRQYWlyQnlGcmVxdWVuY3kiLCJyb3ciLCJsZWZ0IiwiY2hlY2tDb2xvck9yRmFsbGJhY2siLCJyaWdodCIsImZpZWxkTmFtZSIsImNvbmRpdGlvbiIsInJlbW92ZVN1ZmZpeEFuZERlbGltaXRlcnMiLCJsYXllck5hbWUiLCJzdWZmaXgiLCJyZXBsYWNlIiwiUmVnRXhwIiwidHJpbSIsImFsbE5hbWVzIiwidG9Mb3dlckNhc2UiLCJyZXN1bHQiLCJjYXJyeSIsIl9pdGVyYXRvciIsIlRSSVBfUE9JTlRfRklFTERTIiwiX3N0ZXAiLCJfbG9vcCIsInN1ZmZpeFBhaXIiLCJlbmRzV2l0aCIsIm90aGVyUGF0dGVybiIsInBhcnRuZXIiLCJwYXJ0bmVySWR4IiwiZCIsImRlZmF1bHROYW1lIiwicGFpciIsImxhdCIsImxuZyIsInYiLCJfcmV0IiwiZXJyIiwic29ydCIsImIiLCJzb3J0RGF0YXNldEJ5Q29sdW1uIiwiZGF0YXNldCIsImNvbHVtbiIsIm1vZGUiLCJzb3J0QnkiLCJTT1JUX09SREVSIiwiQVNDRU5ESU5HIiwiVU5TT1JUIiwic29ydENvbHVtbiIsInNvcnRPcmRlciIsImFzY2VuZGluZyIsImRlc2NlbmRpbmciLCJ2YWx1ZUF0IiwicGluVGFibGVDb2x1bW5zIiwicGlubmVkQ29sdW1ucyIsImluY2x1ZGVzIiwiY28iLCJjb3B5VGFibGVBbmRVcGRhdGUiLCJvcmlnaW5hbCIsImNyZWF0ZSIsImdldFByb3RvdHlwZU9mIiwib3B0aW9ucyIsInVuZGVmaW5lZCIsImVudHJpZXMiLCJlbnRyeSIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy90YWJsZS11dGlscy9rZXBsZXItdGFibGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDIyIFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IHtjb25zb2xlIGFzIENvbnNvbGV9IGZyb20gJ2dsb2JhbC9jb25zb2xlJztcbmltcG9ydCB7VFJJUF9QT0lOVF9GSUVMRFMsIFNPUlRfT1JERVJ9IGZyb20gJ2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzJztcbmltcG9ydCB7YXNjZW5kaW5nLCBkZXNjZW5kaW5nfSBmcm9tICdkMy1hcnJheSc7XG5cbi8vIGltcG9ydCB7dmFsaWRhdGVJbnB1dERhdGF9IGZyb20gJ3Byb2Nlc3NvcnMvZGF0YS1wcm9jZXNzb3InO1xuaW1wb3J0IHtnZW5lcmF0ZUhhc2hJZH0gZnJvbSAndXRpbHMvdXRpbHMnO1xuaW1wb3J0IHtnZXRHcHVGaWx0ZXJQcm9wcywgZ2V0RGF0YXNldEZpZWxkSW5kZXhGb3JGaWx0ZXJ9IGZyb20gJ3V0aWxzL2dwdS1maWx0ZXItdXRpbHMnO1xuaW1wb3J0IHtcbiAgZ2V0RmlsdGVyUHJvcHMsXG4gIGdldEZpbHRlclJlY29yZCxcbiAgZGlmZkZpbHRlcnMsXG4gIGdldEZpbHRlckZ1bmN0aW9uLFxuICBmaWx0ZXJEYXRhQnlGaWx0ZXJUeXBlcyxcbiAgZ2V0TnVtZXJpY0ZpZWxkRG9tYWluLFxuICBnZXRUaW1lc3RhbXBGaWVsZERvbWFpbixcbiAgRmlsdGVyUmVzdWx0XG59IGZyb20gJ3V0aWxzL2ZpbHRlci11dGlscyc7XG5pbXBvcnQge21heWJlVG9EYXRlLCBnZXRTb3J0aW5nRnVuY3Rpb259IGZyb20gJ3V0aWxzL2RhdGEtdXRpbHMnO1xuaW1wb3J0IHtcbiAgZ2V0UXVhbnRpbGVEb21haW4sXG4gIGdldE9yZGluYWxEb21haW4sXG4gIGdldExvZ0RvbWFpbixcbiAgZ2V0TGluZWFyRG9tYWluXG59IGZyb20gJ3V0aWxzL2RhdGEtc2NhbGUtdXRpbHMnO1xuXG5pbXBvcnQge0FMTF9GSUVMRF9UWVBFUywgU0NBTEVfVFlQRVN9IGZyb20gJ2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzJztcblxuaW1wb3J0IHtjcmVhdGVEYXRhQ29udGFpbmVyfSBmcm9tICcuL2RhdGEtY29udGFpbmVyLXV0aWxzJztcbmltcG9ydCB7dW5pcXVlU29ydGVkUGFpckJ5RnJlcXVlbmN5fSBmcm9tICd1dGlscy9kYXRhLXV0aWxzJztcbmltcG9ydCB7Y2hlY2tDb2xvck9yRmFsbGJhY2t9IGZyb20gJ3V0aWxzL2NvbG9yLXV0aWxzJztcblxuaW1wb3J0IHtSR0JDb2xvcn0gZnJvbSAncmVkdWNlcnMvdHlwZXMnO1xuaW1wb3J0IHtMYXllcn0gZnJvbSAnbGF5ZXJzJztcbmltcG9ydCB7RmllbGREb21haW4sIEZpbHRlcn0gZnJvbSAncmVkdWNlcnMvdmlzLXN0YXRlLXVwZGF0ZXJzJztcbmltcG9ydCB7RGF0YUNvbnRhaW5lckludGVyZmFjZX0gZnJvbSAnLi9kYXRhLWNvbnRhaW5lci1pbnRlcmZhY2UnO1xuaW1wb3J0IHtQcm90b0RhdGFzZXR9IGZyb20gJ2FjdGlvbnMnO1xuXG5leHBvcnQgdHlwZSBGaWVsZCA9IHtcbiAgYW5hbHl6ZXJUeXBlOiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGRpc3BsYXlOYW1lOiBzdHJpbmc7XG4gIGZvcm1hdDogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIGZpZWxkSWR4OiBudW1iZXI7XG4gIHZhbHVlQWNjZXNzb3Iodjoge2luZGV4OiBudW1iZXJ9KTogYW55O1xuICBmaWx0ZXJQcm9wcz86IGFueTtcbiAgbWV0YWRhdGE/OiBhbnk7XG59O1xuXG5leHBvcnQgdHlwZSBHcHVGaWx0ZXIgPSB7XG4gIGZpbHRlclJhbmdlOiBudW1iZXJbXVtdO1xuICBmaWx0ZXJWYWx1ZVVwZGF0ZVRyaWdnZXJzOiBhbnk7XG4gIGZpbHRlclZhbHVlQWNjZXNzb3I6IChcbiAgICBkYzogRGF0YUNvbnRhaW5lckludGVyZmFjZVxuICApID0+IChcbiAgICBnZXRJbmRleD86IChhbnkpID0+IG51bWJlcixcbiAgICBnZXREYXRhPzogKGRjOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlLCBkOiBhbnksIGZpZWxkSW5kZXg6IG51bWJlcikgPT4gYW55XG4gICkgPT4gKGQ6IGFueSkgPT4gbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgRmllbGRQYWlyID0ge1xuICBkZWZhdWx0TmFtZTogc3RyaW5nO1xuICBwYWlyOiB7XG4gICAgW2tleTogc3RyaW5nXToge1xuICAgICAgZmllbGRJZHg6IG51bWJlcjtcbiAgICAgIHZhbHVlOiBzdHJpbmc7XG4gICAgfTtcbiAgfTtcbiAgc3VmZml4OiBzdHJpbmdbXTtcbn07XG5cbmV4cG9ydCB0eXBlIEZpbHRlclJlY29yZCA9IHtcbiAgZHluYW1pY0RvbWFpbjogRmlsdGVyW107XG4gIGZpeGVkRG9tYWluOiBGaWx0ZXJbXTtcbiAgY3B1OiBGaWx0ZXJbXTtcbiAgZ3B1OiBGaWx0ZXJbXTtcbn07XG5cbmV4cG9ydCB0eXBlIEZpbHRlckRhdGFzZXRPcHQgPSB7XG4gIC8vIG9ubHkgYWxsb3cgY3B1IGZpbHRlcmluZ1xuICBjcHVPbmx5PzogYm9vbGVhbjtcbiAgLy8gaWdub3JlIGZpbHRlciBmb3IgZG9tYWluIGNhbGN1bGF0aW9uXG4gIGlnbm9yZURvbWFpbj86IGJvb2xlYW47XG59O1xuXG4vLyBVbmlxdWUgaWRlbnRpZmllciBvZiBlYWNoIGZpZWxkXG5jb25zdCBGSURfS0VZID0gJ25hbWUnO1xuXG5jbGFzcyBLZXBsZXJUYWJsZSB7XG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG5cbiAgdHlwZT86IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgY29sb3I6IFJHQkNvbG9yO1xuXG4gIC8vIGZpZWxkcyBhbmQgZGF0YVxuICBmaWVsZHM6IEZpZWxkW107XG5cbiAgZGF0YUNvbnRhaW5lcjogRGF0YUNvbnRhaW5lckludGVyZmFjZTtcblxuICBhbGxJbmRleGVzOiBudW1iZXJbXTtcbiAgZmlsdGVyZWRJbmRleDogbnVtYmVyW107XG4gIGZpbHRlcmVkSWR4Q1BVPzogbnVtYmVyW107XG4gIGZpbHRlcmVkSW5kZXhGb3JEb21haW46IG51bWJlcltdO1xuICBmaWVsZFBhaXJzOiBGaWVsZFBhaXJbXTtcbiAgZ3B1RmlsdGVyOiBHcHVGaWx0ZXI7XG4gIGZpbHRlclJlY29yZD86IEZpbHRlclJlY29yZDtcbiAgZmlsdGVyUmVjb3JkQ1BVPzogRmlsdGVyUmVjb3JkO1xuICBjaGFuZ2VkRmlsdGVycz86IGFueTtcblxuICAvLyB0YWJsZS1pbmplY3RlZCBtZXRhZGF0YVxuICBzb3J0Q29sdW1uPzoge1xuICAgIC8vIGNvbHVtbiBuYW1lOiBzb3J0ZWQgaWR4XG4gICAgW2tleTogc3RyaW5nXTogc3RyaW5nOyAvLyBBU0NFTkRJTkcgfCBERVNDRU5ESU5HIHwgVU5TT1JUXG4gIH07XG4gIHNvcnRPcmRlcj86IG51bWJlcltdIHwgbnVsbDtcblxuICBwaW5uZWRDb2x1bW5zPzogc3RyaW5nW107XG4gIHN1cHBvcnRlZEZpbHRlclR5cGVzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcbiAgLy8gdGFibGUtaW5qZWN0ZWQgbWV0YWRhdGFcbiAgbWV0YWRhdGE6IG9iamVjdDtcblxuICBjb25zdHJ1Y3Rvcih7XG4gICAgaW5mbyA9IHt9LFxuICAgIGRhdGEsXG4gICAgY29sb3IsXG4gICAgbWV0YWRhdGEsXG4gICAgc3VwcG9ydGVkRmlsdGVyVHlwZXNcbiAgfToge1xuICAgIGluZm8/OiBQcm90b0RhdGFzZXRbJ2luZm8nXTtcbiAgICBkYXRhOiBQcm90b0RhdGFzZXRbJ2RhdGEnXTtcbiAgICBjb2xvcjogUkdCQ29sb3I7XG4gICAgbWV0YWRhdGE/OiBQcm90b0RhdGFzZXRbJ21ldGFkYXRhJ107XG4gICAgc3VwcG9ydGVkRmlsdGVyVHlwZXM/OiBQcm90b0RhdGFzZXRbJ3N1cHBvcnRlZEZpbHRlclR5cGVzJ107XG4gIH0pIHtcbiAgICAvLyBUT0RPIC0gd2hhdCB0byBkbyBpZiB2YWxpZGF0aW9uIGZhaWxzPyBDYW4ga2VwbGVyIGhhbmRsZSBleGNlcHRpb25zP1xuICAgIC8vIGNvbnN0IHZhbGlkYXRlZERhdGEgPSB2YWxpZGF0ZUlucHV0RGF0YShkYXRhKTtcbiAgICAvLyBpZiAoIXZhbGlkYXRlZERhdGEpIHtcbiAgICAvLyAgIHJldHVybiB0aGlzO1xuICAgIC8vIH1cblxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICBjb25zdCBkYXRhQ29udGFpbmVyID0gY3JlYXRlRGF0YUNvbnRhaW5lcihkYXRhLnJvd3MsIHtmaWVsZHM6IGRhdGEuZmllbGRzfSk7XG5cbiAgICBjb25zdCBkYXRhc2V0SW5mbyA9IHtcbiAgICAgIGlkOiBnZW5lcmF0ZUhhc2hJZCg0KSxcbiAgICAgIGxhYmVsOiAnbmV3IGRhdGFzZXQnLFxuICAgICAgLi4uKGluZm8gfHwge30pXG4gICAgfTtcbiAgICBjb25zdCBkYXRhSWQgPSBkYXRhc2V0SW5mby5pZDtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgY29uc3QgZmllbGRzOiBGaWVsZFtdID0gZGF0YS5maWVsZHMubWFwKChmLCBpKSA9PiAoe1xuICAgICAgLi4uZixcbiAgICAgIGZpZWxkSWR4OiBpLFxuICAgICAgaWQ6IGYubmFtZSxcbiAgICAgIGRpc3BsYXlOYW1lOiBmLmRpc3BsYXlOYW1lIHx8IGYubmFtZSxcbiAgICAgIHZhbHVlQWNjZXNzb3I6IG1heWJlVG9EYXRlLmJpbmQoXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGlzIHRpbWVcbiAgICAgICAgZi50eXBlID09PSBBTExfRklFTERfVFlQRVMudGltZXN0YW1wIHx8IGYudHlwZSA9PT0gQUxMX0ZJRUxEX1RZUEVTLmRhdGUsXG4gICAgICAgIGksXG4gICAgICAgIGYuZm9ybWF0LFxuICAgICAgICBkYXRhQ29udGFpbmVyXG4gICAgICApXG4gICAgfSkpO1xuXG4gICAgY29uc3QgYWxsSW5kZXhlcyA9IGRhdGFDb250YWluZXIuZ2V0UGxhaW5JbmRleCgpO1xuXG4gICAgdGhpcy5pZCA9IGRhdGFzZXRJbmZvLmlkO1xuICAgIHRoaXMubGFiZWwgPSBkYXRhc2V0SW5mby5sYWJlbDtcbiAgICB0aGlzLmNvbG9yID0gY29sb3I7XG4gICAgdGhpcy5tZXRhZGF0YSA9IHtcbiAgICAgIC4uLm1ldGFkYXRhLFxuICAgICAgaWQ6IGRhdGFzZXRJbmZvLmlkLFxuICAgICAgbGFiZWw6IGRhdGFzZXRJbmZvLmxhYmVsXG4gICAgfTtcblxuICAgIHRoaXMuZGF0YUNvbnRhaW5lciA9IGRhdGFDb250YWluZXI7XG4gICAgdGhpcy5hbGxJbmRleGVzID0gYWxsSW5kZXhlcztcbiAgICB0aGlzLmZpbHRlcmVkSW5kZXggPSBhbGxJbmRleGVzO1xuICAgIHRoaXMuZmlsdGVyZWRJbmRleEZvckRvbWFpbiA9IGFsbEluZGV4ZXM7XG4gICAgdGhpcy5maWVsZFBhaXJzID0gZmluZFBvaW50RmllbGRQYWlycyhmaWVsZHMpO1xuICAgIHRoaXMuZmllbGRzID0gZmllbGRzO1xuICAgIHRoaXMuZ3B1RmlsdGVyID0gZ2V0R3B1RmlsdGVyUHJvcHMoW10sIGRhdGFJZCwgZmllbGRzKTtcbiAgICBpZiAoc3VwcG9ydGVkRmlsdGVyVHlwZXMpIHtcbiAgICAgIHRoaXMuc3VwcG9ydGVkRmlsdGVyVHlwZXMgPSBzdXBwb3J0ZWRGaWx0ZXJUeXBlcztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGZpZWxkXG4gICAqIEBwYXJhbSBjb2x1bW5OYW1lXG4gICAqL1xuICBnZXRDb2x1bW5GaWVsZChjb2x1bW5OYW1lOiBzdHJpbmcpOiBGaWVsZCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgZmllbGQgPSB0aGlzLmZpZWxkcy5maW5kKGZkID0+IGZkW0ZJRF9LRVldID09PSBjb2x1bW5OYW1lKTtcbiAgICB0aGlzLl9hc3NldEZpZWxkKGNvbHVtbk5hbWUsIGZpZWxkKTtcbiAgICByZXR1cm4gZmllbGQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGZpZWxkSWR4XG4gICAqIEBwYXJhbSBjb2x1bW5OYW1lXG4gICAqL1xuICBnZXRDb2x1bW5GaWVsZElkeChjb2x1bW5OYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGNvbnN0IGZpZWxkSWR4ID0gdGhpcy5maWVsZHMuZmluZEluZGV4KGZkID0+IGZkW0ZJRF9LRVldID09PSBjb2x1bW5OYW1lKTtcbiAgICB0aGlzLl9hc3NldEZpZWxkKGNvbHVtbk5hbWUsIEJvb2xlYW4oZmllbGRJZHggPiAtMSkpO1xuICAgIHJldHVybiBmaWVsZElkeDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHZhbHVlIG9mIGEgY2VsbFxuICAgKi9cbiAgZ2V0VmFsdWUoY29sdW1uTmFtZTogc3RyaW5nLCByb3dJZHg6IG51bWJlcik6IGFueSB7XG4gICAgY29uc3QgZmllbGQgPSB0aGlzLmdldENvbHVtbkZpZWxkKGNvbHVtbk5hbWUpO1xuICAgIHJldHVybiBmaWVsZCA/IGZpZWxkLnZhbHVlQWNjZXNzb3Ioe2luZGV4OiByb3dJZHh9KSA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBleGlzdGluZyBmaWVsZCB3aXRoIGEgbmV3IG9iamVjdFxuICAgKiBAcGFyYW0gZmllbGRJZHhcbiAgICogQHBhcmFtIG5ld0ZpZWxkXG4gICAqL1xuICB1cGRhdGVDb2x1bW5GaWVsZChmaWVsZElkeDogbnVtYmVyLCBuZXdGaWVsZDogRmllbGQpOiB2b2lkIHtcbiAgICB0aGlzLmZpZWxkcyA9IE9iamVjdC5hc3NpZ24oWy4uLnRoaXMuZmllbGRzXSwge1tmaWVsZElkeF06IG5ld0ZpZWxkfSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGRhdGFzZXQgY29sb3IgYnkgY3VzdG9tIGNvbG9yXG4gICAqIEBwYXJhbSBuZXdDb2xvclxuICAgKi9cbiAgdXBkYXRlVGFibGVDb2xvcihuZXdDb2xvcjogUkdCQ29sb3IpOiB2b2lkIHtcbiAgICB0aGlzLmNvbG9yID0gbmV3Q29sb3I7XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSBmaWx0ZXJQcm9wcyB0byBmaWVsZCBhbmQgcmV0cmlldmUgaXRcbiAgICogQHBhcmFtIGNvbHVtbk5hbWVcbiAgICovXG4gIGdldENvbHVtbkZpbHRlclByb3BzKGNvbHVtbk5hbWU6IHN0cmluZyk6IEZpZWxkWydmaWx0ZXJQcm9wcyddIHwgbnVsbCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgZmllbGRJZHggPSB0aGlzLmdldENvbHVtbkZpZWxkSWR4KGNvbHVtbk5hbWUpO1xuICAgIGlmIChmaWVsZElkeCA8IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBmaWVsZCA9IHRoaXMuZmllbGRzW2ZpZWxkSWR4XTtcbiAgICBpZiAoZmllbGQuaGFzT3duUHJvcGVydHkoJ2ZpbHRlclByb3BzJykpIHtcbiAgICAgIHJldHVybiBmaWVsZC5maWx0ZXJQcm9wcztcbiAgICB9XG5cbiAgICBjb25zdCBmaWVsZERvbWFpbiA9IHRoaXMuZ2V0Q29sdW1uRmlsdGVyRG9tYWluKGZpZWxkKTtcbiAgICBpZiAoIWZpZWxkRG9tYWluKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBmaWx0ZXJQcm9wcyA9IGdldEZpbHRlclByb3BzKGZpZWxkLCBmaWVsZERvbWFpbik7XG4gICAgY29uc3QgbmV3RmllbGQgPSB7XG4gICAgICAuLi5maWVsZCxcbiAgICAgIGZpbHRlclByb3BzXG4gICAgfTtcblxuICAgIHRoaXMudXBkYXRlQ29sdW1uRmllbGQoZmllbGRJZHgsIG5ld0ZpZWxkKTtcblxuICAgIHJldHVybiBmaWx0ZXJQcm9wcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSBmaWx0ZXJzIHRvIGRhdGFzZXQsIHJldHVybiB0aGUgZmlsdGVyZWQgZGF0YXNldCB3aXRoIHVwZGF0ZWQgYGdwdUZpbHRlcmAsIGBmaWx0ZXJSZWNvcmRgLCBgZmlsdGVyZWRJbmRleGAsIGBmaWx0ZXJlZEluZGV4Rm9yRG9tYWluYFxuICAgKiBAcGFyYW0gZmlsdGVyc1xuICAgKiBAcGFyYW0gbGF5ZXJzXG4gICAqIEBwYXJhbSBvcHRcbiAgICovXG4gIGZpbHRlclRhYmxlKGZpbHRlcnM6IEZpbHRlcltdLCBsYXllcnM6IExheWVyW10sIG9wdD86IEZpbHRlckRhdGFzZXRPcHQpOiBLZXBsZXJUYWJsZSB7XG4gICAgY29uc3Qge2RhdGFDb250YWluZXIsIGlkOiBkYXRhSWQsIGZpbHRlclJlY29yZDogb2xkRmlsdGVyUmVjb3JkLCBmaWVsZHN9ID0gdGhpcztcblxuICAgIC8vIGlmIHRoZXJlIGlzIG5vIGZpbHRlcnNcbiAgICBjb25zdCBmaWx0ZXJSZWNvcmQgPSBnZXRGaWx0ZXJSZWNvcmQoZGF0YUlkLCBmaWx0ZXJzLCBvcHQgfHwge30pO1xuXG4gICAgdGhpcy5maWx0ZXJSZWNvcmQgPSBmaWx0ZXJSZWNvcmQ7XG4gICAgdGhpcy5ncHVGaWx0ZXIgPSBnZXRHcHVGaWx0ZXJQcm9wcyhmaWx0ZXJzLCBkYXRhSWQsIGZpZWxkcyk7XG5cbiAgICAvLyBjb25zdCBuZXdEYXRhc2V0ID0gc2V0KFsnZmlsdGVyUmVjb3JkJ10sIGZpbHRlclJlY29yZCwgZGF0YXNldCk7XG5cbiAgICBpZiAoIWZpbHRlcnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkSW5kZXggPSB0aGlzLmFsbEluZGV4ZXM7XG4gICAgICB0aGlzLmZpbHRlcmVkSW5kZXhGb3JEb21haW4gPSB0aGlzLmFsbEluZGV4ZXM7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB0aGlzLmNoYW5nZWRGaWx0ZXJzID0gZGlmZkZpbHRlcnMoZmlsdGVyUmVjb3JkLCBvbGRGaWx0ZXJSZWNvcmQpO1xuXG4gICAgLy8gZ2VuZXJhdGUgMiBzZXRzIG9mIGZpbHRlciByZXN1bHRcbiAgICAvLyBmaWx0ZXJlZEluZGV4IHVzZWQgdG8gY2FsY3VsYXRlIGxheWVyIGRhdGFcbiAgICAvLyBmaWx0ZXJlZEluZGV4Rm9yRG9tYWluIHVzZWQgdG8gY2FsY3VsYXRlIGxheWVyIERvbWFpblxuICAgIGNvbnN0IHNob3VsZENhbERvbWFpbiA9IEJvb2xlYW4odGhpcy5jaGFuZ2VkRmlsdGVycy5keW5hbWljRG9tYWluKTtcbiAgICBjb25zdCBzaG91bGRDYWxJbmRleCA9IEJvb2xlYW4odGhpcy5jaGFuZ2VkRmlsdGVycy5jcHUpO1xuXG4gICAgbGV0IGZpbHRlclJlc3VsdDogRmlsdGVyUmVzdWx0ID0ge307XG4gICAgaWYgKHNob3VsZENhbERvbWFpbiB8fCBzaG91bGRDYWxJbmRleCkge1xuICAgICAgY29uc3QgZHluYW1pY0RvbWFpbkZpbHRlcnMgPSBzaG91bGRDYWxEb21haW4gPyBmaWx0ZXJSZWNvcmQuZHluYW1pY0RvbWFpbiA6IG51bGw7XG4gICAgICBjb25zdCBjcHVGaWx0ZXJzID0gc2hvdWxkQ2FsSW5kZXggPyBmaWx0ZXJSZWNvcmQuY3B1IDogbnVsbDtcblxuICAgICAgY29uc3QgZmlsdGVyRnVuY3MgPSBmaWx0ZXJzLnJlZHVjZSgoYWNjLCBmaWx0ZXIpID0+IHtcbiAgICAgICAgY29uc3QgZmllbGRJbmRleCA9IGdldERhdGFzZXRGaWVsZEluZGV4Rm9yRmlsdGVyKHRoaXMuaWQsIGZpbHRlcik7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gZmllbGRJbmRleCAhPT0gLTEgPyBmaWVsZHNbZmllbGRJbmRleF0gOiBudWxsO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uYWNjLFxuICAgICAgICAgIFtmaWx0ZXIuaWRdOiBnZXRGaWx0ZXJGdW5jdGlvbihmaWVsZCwgdGhpcy5pZCwgZmlsdGVyLCBsYXllcnMsIGRhdGFDb250YWluZXIpXG4gICAgICAgIH07XG4gICAgICB9LCB7fSk7XG5cbiAgICAgIGZpbHRlclJlc3VsdCA9IGZpbHRlckRhdGFCeUZpbHRlclR5cGVzKFxuICAgICAgICB7ZHluYW1pY0RvbWFpbkZpbHRlcnMsIGNwdUZpbHRlcnMsIGZpbHRlckZ1bmNzfSxcbiAgICAgICAgZGF0YUNvbnRhaW5lclxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmZpbHRlcmVkSW5kZXggPSBmaWx0ZXJSZXN1bHQuZmlsdGVyZWRJbmRleCB8fCB0aGlzLmZpbHRlcmVkSW5kZXg7XG4gICAgdGhpcy5maWx0ZXJlZEluZGV4Rm9yRG9tYWluID1cbiAgICAgIGZpbHRlclJlc3VsdC5maWx0ZXJlZEluZGV4Rm9yRG9tYWluIHx8IHRoaXMuZmlsdGVyZWRJbmRleEZvckRvbWFpbjtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IGZpbHRlcnMgdG8gYSBkYXRhc2V0IGFsbCBvbiBDUFUsIGFzc2lnbiB0byBgZmlsdGVyZWRJZHhDUFVgLCBgZmlsdGVyUmVjb3JkQ1BVYFxuICAgKiBAcGFyYW0gZmlsdGVyc1xuICAgKiBAcGFyYW0gbGF5ZXJzXG4gICAqL1xuICBmaWx0ZXJUYWJsZUNQVShmaWx0ZXJzOiBGaWx0ZXJbXSwgbGF5ZXJzOiBMYXllcltdKTogS2VwbGVyVGFibGUge1xuICAgIGNvbnN0IG9wdCA9IHtcbiAgICAgIGNwdU9ubHk6IHRydWUsXG4gICAgICBpZ25vcmVEb21haW46IHRydWVcbiAgICB9O1xuXG4gICAgLy8gbm8gZmlsdGVyXG4gICAgaWYgKCFmaWx0ZXJzLmxlbmd0aCkge1xuICAgICAgdGhpcy5maWx0ZXJlZElkeENQVSA9IHRoaXMuYWxsSW5kZXhlcztcbiAgICAgIHRoaXMuZmlsdGVyUmVjb3JkQ1BVID0gZ2V0RmlsdGVyUmVjb3JkKHRoaXMuaWQsIGZpbHRlcnMsIG9wdCk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBubyBncHUgZmlsdGVyXG4gICAgaWYgKCFmaWx0ZXJzLmZpbmQoZiA9PiBmLmdwdSkpIHtcbiAgICAgIHRoaXMuZmlsdGVyZWRJZHhDUFUgPSB0aGlzLmZpbHRlcmVkSW5kZXg7XG4gICAgICB0aGlzLmZpbHRlclJlY29yZENQVSA9IGdldEZpbHRlclJlY29yZCh0aGlzLmlkLCBmaWx0ZXJzLCBvcHQpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gbWFrZSBhIGNvcHkgZm9yIGNwdSBmaWx0ZXJpbmdcbiAgICBjb25zdCBjb3BpZWQgPSBjb3B5VGFibGUodGhpcyk7XG5cbiAgICBjb3BpZWQuZmlsdGVyUmVjb3JkID0gdGhpcy5maWx0ZXJSZWNvcmRDUFU7XG4gICAgY29waWVkLmZpbHRlcmVkSW5kZXggPSB0aGlzLmZpbHRlcmVkSWR4Q1BVIHx8IFtdO1xuXG4gICAgY29uc3QgZmlsdGVyZWQgPSBjb3BpZWQuZmlsdGVyVGFibGUoZmlsdGVycywgbGF5ZXJzLCBvcHQpO1xuXG4gICAgdGhpcy5maWx0ZXJlZElkeENQVSA9IGZpbHRlcmVkLmZpbHRlcmVkSW5kZXg7XG4gICAgdGhpcy5maWx0ZXJSZWNvcmRDUFUgPSBmaWx0ZXJlZC5maWx0ZXJSZWNvcmQ7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgZmllbGQgZG9tYWluIGJhc2VkIG9uIGZpZWxkIHR5cGUgYW5kIGRhdGFcbiAgICogZm9yIEZpbHRlclxuICAgKi9cbiAgZ2V0Q29sdW1uRmlsdGVyRG9tYWluKGZpZWxkOiBGaWVsZCk6IEZpZWxkRG9tYWluIHtcbiAgICBjb25zdCB7ZGF0YUNvbnRhaW5lcn0gPSB0aGlzO1xuICAgIGNvbnN0IHt2YWx1ZUFjY2Vzc29yfSA9IGZpZWxkO1xuXG4gICAgbGV0IGRvbWFpbjtcblxuICAgIHN3aXRjaCAoZmllbGQudHlwZSkge1xuICAgICAgY2FzZSBBTExfRklFTERfVFlQRVMucmVhbDpcbiAgICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLmludGVnZXI6XG4gICAgICAgIC8vIGNhbGN1bGF0ZSBkb21haW4gYW5kIHN0ZXBcbiAgICAgICAgcmV0dXJuIGdldE51bWVyaWNGaWVsZERvbWFpbihkYXRhQ29udGFpbmVyLCB2YWx1ZUFjY2Vzc29yKTtcblxuICAgICAgY2FzZSBBTExfRklFTERfVFlQRVMuYm9vbGVhbjpcbiAgICAgICAgcmV0dXJuIHtkb21haW46IFt0cnVlLCBmYWxzZV19O1xuXG4gICAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5zdHJpbmc6XG4gICAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5kYXRlOlxuICAgICAgICBkb21haW4gPSBnZXRPcmRpbmFsRG9tYWluKGRhdGFDb250YWluZXIsIHZhbHVlQWNjZXNzb3IpO1xuICAgICAgICByZXR1cm4ge2RvbWFpbn07XG5cbiAgICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLnRpbWVzdGFtcDpcbiAgICAgICAgcmV0dXJuIGdldFRpbWVzdGFtcEZpZWxkRG9tYWluKGRhdGFDb250YWluZXIsIHZhbHVlQWNjZXNzb3IpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4ge2RvbWFpbjogZ2V0T3JkaW5hbERvbWFpbihkYXRhQ29udGFpbmVyLCB2YWx1ZUFjY2Vzc29yKX07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqICBHZXQgdGhlIGRvbWFpbiBvZiB0aGlzIGNvbHVtbiBiYXNlZCBvbiBzY2FsZSB0eXBlXG4gICAqL1xuICBnZXRDb2x1bW5MYXllckRvbWFpbihcbiAgICBmaWVsZDogRmllbGQsXG4gICAgc2NhbGVUeXBlOiBzdHJpbmdcbiAgKTogbnVtYmVyW10gfCBzdHJpbmdbXSB8IFtudW1iZXIsIG51bWJlcl0gfCBudWxsIHtcbiAgICBjb25zdCB7ZGF0YUNvbnRhaW5lciwgZmlsdGVyZWRJbmRleEZvckRvbWFpbn0gPSB0aGlzO1xuXG4gICAgaWYgKCFTQ0FMRV9UWVBFU1tzY2FsZVR5cGVdKSB7XG4gICAgICBDb25zb2xlLmVycm9yKGBzY2FsZSB0eXBlICR7c2NhbGVUeXBlfSBub3Qgc3VwcG9ydGVkYCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCB7dmFsdWVBY2Nlc3Nvcn0gPSBmaWVsZDtcbiAgICBjb25zdCBpbmRleFZhbHVlQWNjZXNzb3IgPSBpID0+IHZhbHVlQWNjZXNzb3Ioe2luZGV4OiBpfSk7XG4gICAgY29uc3Qgc29ydEZ1bmN0aW9uID0gZ2V0U29ydGluZ0Z1bmN0aW9uKGZpZWxkLnR5cGUpO1xuXG4gICAgc3dpdGNoIChzY2FsZVR5cGUpIHtcbiAgICAgIGNhc2UgU0NBTEVfVFlQRVMub3JkaW5hbDpcbiAgICAgIGNhc2UgU0NBTEVfVFlQRVMucG9pbnQ6XG4gICAgICAgIC8vIGRvIG5vdCByZWNhbGN1bGF0ZSBvcmRpbmFsIGRvbWFpbiBiYXNlZCBvbiBmaWx0ZXJlZCBkYXRhXG4gICAgICAgIC8vIGRvbid0IG5lZWQgdG8gdXBkYXRlIG9yZGluYWwgZG9tYWluIGV2ZXJ5IHRpbWVcbiAgICAgICAgcmV0dXJuIGdldE9yZGluYWxEb21haW4oZGF0YUNvbnRhaW5lciwgdmFsdWVBY2Nlc3Nvcik7XG5cbiAgICAgIGNhc2UgU0NBTEVfVFlQRVMucXVhbnRpbGU6XG4gICAgICAgIHJldHVybiBnZXRRdWFudGlsZURvbWFpbihmaWx0ZXJlZEluZGV4Rm9yRG9tYWluLCBpbmRleFZhbHVlQWNjZXNzb3IsIHNvcnRGdW5jdGlvbik7XG5cbiAgICAgIGNhc2UgU0NBTEVfVFlQRVMubG9nOlxuICAgICAgICByZXR1cm4gZ2V0TG9nRG9tYWluKGZpbHRlcmVkSW5kZXhGb3JEb21haW4sIGluZGV4VmFsdWVBY2Nlc3Nvcik7XG5cbiAgICAgIGNhc2UgU0NBTEVfVFlQRVMucXVhbnRpemU6XG4gICAgICBjYXNlIFNDQUxFX1RZUEVTLmxpbmVhcjpcbiAgICAgIGNhc2UgU0NBTEVfVFlQRVMuc3FydDpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBnZXRMaW5lYXJEb21haW4oZmlsdGVyZWRJbmRleEZvckRvbWFpbiwgaW5kZXhWYWx1ZUFjY2Vzc29yKTtcbiAgICB9XG4gIH1cblxuICBjYWxjdWxhdGVMZWdlbmQobGVmdEZpZWxkLCByaWdodEZpZWxkKSB7XG4gICAgY29uc3QgbGltaXRPZk51bWJlck9mTGVnZW5kRW50cmllcyA9IDIwO1xuICAgIGNvbnN0IGxlZnRWYWx1ZXMgPSB0aGlzLmRhdGFDb250YWluZXIubWFwSW5kZXgobGVmdEZpZWxkLnZhbHVlQWNjZXNzb3IpO1xuICAgIGNvbnN0IHJpZ2h0VmFsdWVzID0gdGhpcy5kYXRhQ29udGFpbmVyLm1hcEluZGV4KHJpZ2h0RmllbGQudmFsdWVBY2Nlc3Nvcik7XG5cbiAgICBjb25zdCBwYWlyaW5nID0gbGVmdFZhbHVlcy5yZWR1Y2UoKHByZXZpb3VzLCBjdXJyZW50LCBpZHgpID0+IHtcbiAgICAgIHByZXZpb3VzLnB1c2goW2N1cnJlbnQsIHJpZ2h0VmFsdWVzW2lkeF1dKTtcbiAgICAgIHJldHVybiBwcmV2aW91cztcbiAgICB9LCBbXSk7XG5cbiAgICByZXR1cm4gdW5pcXVlU29ydGVkUGFpckJ5RnJlcXVlbmN5KHBhaXJpbmcpXG4gICAgICAubWFwKHJvdyA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbGFiZWw6IHJvdy5sZWZ0LFxuICAgICAgICAgIGNvbG9yOiBjaGVja0NvbG9yT3JGYWxsYmFjayhyb3cucmlnaHQpXG4gICAgICAgIH07XG4gICAgICB9KVxuICAgICAgLnNsaWNlKDAsIGxpbWl0T2ZOdW1iZXJPZkxlZ2VuZEVudHJpZXMgKyAxKTsgLy8gTGltaXQgdG8gbGltaXRPZk51bWJlck9mTGVnZW5kRW50cmllcyArIDEsIHRoZW4gbGltaXQgdG8gbGltaXRPZk51bWJlck9mTGVnZW5kRW50cmllcyBpbiBMZWdlbmRNYW5hZ2Vyc1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIHNhbXBsZSBvZiByb3dzIHRvIGNhbGN1bGF0ZSBsYXllciBib3VuZGFyaWVzXG4gICAqL1xuICAvLyBnZXRTYW1wbGVEYXRhKHJvd3MpXG5cbiAgLyoqXG4gICAqIFBhcnNlIGNlbGwgdmFsdWUgYmFzZWQgb24gY29sdW1uIHR5cGUgYW5kIHJldHVybiBhIHN0cmluZyByZXByZXNlbnRhdGlvblxuICAgKiBWYWx1ZSB0aGUgZmllbGQgdmFsdWUsIHR5cGUgdGhlIGZpZWxkIHR5cGVcbiAgICovXG4gIC8vIHBhcnNlRmllbGRWYWx1ZSh2YWx1ZSwgdHlwZSlcblxuICAvLyBzb3J0RGF0YXNldEJ5Q29sdW1uKClcblxuICAvKipcbiAgICogQXNzZXJ0IHdoZXRoZXIgZmllbGQgZXhpc3RcbiAgICogQHBhcmFtIGZpZWxkTmFtZVxuICAgKiBAcGFyYW0gY29uZGl0aW9uXG4gICAqL1xuICBfYXNzZXRGaWVsZChmaWVsZE5hbWU6IHN0cmluZywgY29uZGl0aW9uOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIWNvbmRpdGlvbikge1xuICAgICAgQ29uc29sZS5lcnJvcihgJHtmaWVsZE5hbWV9IGRvZXNudCBleGlzdCBpbiBkYXRhc2V0ICR7dGhpcy5pZH1gKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gSEVMUEVSIEZVTkNUSU9OUyAoTUFJTkxZIEVYUE9SVEVEIEZPUiBURVNULi4uKVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlU3VmZml4QW5kRGVsaW1pdGVycyhsYXllck5hbWUsIHN1ZmZpeCkge1xuICByZXR1cm4gbGF5ZXJOYW1lXG4gICAgLnJlcGxhY2UobmV3IFJlZ0V4cChzdWZmaXgsICdpZycpLCAnJylcbiAgICAucmVwbGFjZSgvW18sLl0rL2csICcgJylcbiAgICAudHJpbSgpO1xufVxuXG4vKipcbiAqIEZpbmQgcG9pbnQgZmllbGRzIHBhaXJzIGZyb20gZmllbGRzXG4gKlxuICogQHBhcmFtIGZpZWxkc1xuICogQHJldHVybnMgZm91bmQgcG9pbnQgZmllbGRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kUG9pbnRGaWVsZFBhaXJzKGZpZWxkczogRmllbGRbXSk6IEZpZWxkUGFpcltdIHtcbiAgY29uc3QgYWxsTmFtZXMgPSBmaWVsZHMubWFwKGYgPT4gZi5uYW1lLnRvTG93ZXJDYXNlKCkpO1xuXG4gIC8vIGdldCBsaXN0IG9mIGFsbCBmaWVsZHMgd2l0aCBtYXRjaGluZyBzdWZmaXhlc1xuICBjb25zdCBhY2M6IEZpZWxkUGFpcltdID0gW107XG4gIGNvbnN0IHJlc3VsdCA9IGFsbE5hbWVzLnJlZHVjZSgoY2FycnksIGZpZWxkTmFtZSwgaWR4KSA9PiB7XG4gICAgLy8gVGhpcyBzZWFyY2ggZm9yIHBhaXJzIHdpbGwgZWFybHkgZXhpdCBpZiBmb3VuZC5cbiAgICBmb3IgKGNvbnN0IHN1ZmZpeFBhaXIgb2YgVFJJUF9QT0lOVF9GSUVMRFMpIHtcbiAgICAgIC8vIG1hdGNoIGZpcnN0IHN1ZmZpeGBgYFxuICAgICAgaWYgKGZpZWxkTmFtZS5lbmRzV2l0aChzdWZmaXhQYWlyWzBdKSkge1xuICAgICAgICAvLyBtYXRjaCBzZWNvbmQgc3VmZml4XG4gICAgICAgIGNvbnN0IG90aGVyUGF0dGVybiA9IG5ldyBSZWdFeHAoYCR7c3VmZml4UGFpclswXX1cXCRgKTtcbiAgICAgICAgY29uc3QgcGFydG5lciA9IGZpZWxkTmFtZS5yZXBsYWNlKG90aGVyUGF0dGVybiwgc3VmZml4UGFpclsxXSk7XG5cbiAgICAgICAgY29uc3QgcGFydG5lcklkeCA9IGFsbE5hbWVzLmZpbmRJbmRleChkID0+IGQgPT09IHBhcnRuZXIpO1xuICAgICAgICBpZiAocGFydG5lcklkeCA+IC0xKSB7XG4gICAgICAgICAgY29uc3QgZGVmYXVsdE5hbWUgPSByZW1vdmVTdWZmaXhBbmREZWxpbWl0ZXJzKGZpZWxkTmFtZSwgc3VmZml4UGFpclswXSk7XG5cbiAgICAgICAgICBjYXJyeS5wdXNoKHtcbiAgICAgICAgICAgIGRlZmF1bHROYW1lLFxuICAgICAgICAgICAgcGFpcjoge1xuICAgICAgICAgICAgICBsYXQ6IHtcbiAgICAgICAgICAgICAgICBmaWVsZElkeDogaWR4LFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmaWVsZHNbaWR4XS5uYW1lXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGxuZzoge1xuICAgICAgICAgICAgICAgIGZpZWxkSWR4OiBwYXJ0bmVySWR4LFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmaWVsZHNbcGFydG5lcklkeF0ubmFtZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3VmZml4OiBzdWZmaXhQYWlyXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIGNhcnJ5O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjYXJyeTtcbiAgfSwgYWNjKTtcblxuICAvLyBwcmlvcml0aXplIHRoZSAnbGF0aXR1ZGUnLydsb25naXR1ZGUnIHBhaXJcbiAgcmVzdWx0LnNvcnQoKGEsIGIpID0+IHtcbiAgICBpZiAoYS5kZWZhdWx0TmFtZSA9PT0gJycgJiYgYS5zdWZmaXhbMF0gPT09ICdsYXRpdHVkZScpIHJldHVybiAtMTtcbiAgICBpZiAoYi5kZWZhdWx0TmFtZSA9PT0gJycgJiYgYi5zdWZmaXhbMF0gPT09ICdsYXRpdHVkZScpIHJldHVybiAxO1xuICAgIHJldHVybiAwO1xuICB9KTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0gZGF0YXNldFxuICogQHBhcmFtIGNvbHVtblxuICogQHBhcmFtIG1vZGVcbiAqIEB0eXBlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzb3J0RGF0YXNldEJ5Q29sdW1uKFxuICBkYXRhc2V0OiBLZXBsZXJUYWJsZSxcbiAgY29sdW1uOiBzdHJpbmcsXG4gIG1vZGU/OiBzdHJpbmdcbik6IEtlcGxlclRhYmxlIHtcbiAgY29uc3Qge2FsbEluZGV4ZXMsIGZpZWxkcywgZGF0YUNvbnRhaW5lcn0gPSBkYXRhc2V0O1xuICBjb25zdCBmaWVsZEluZGV4ID0gZmllbGRzLmZpbmRJbmRleChmID0+IGYubmFtZSA9PT0gY29sdW1uKTtcbiAgaWYgKGZpZWxkSW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIGRhdGFzZXQ7XG4gIH1cblxuICBjb25zdCBzb3J0QnkgPSBTT1JUX09SREVSW21vZGUgfHwgJyddIHx8IFNPUlRfT1JERVIuQVNDRU5ESU5HO1xuXG4gIGlmIChzb3J0QnkgPT09IFNPUlRfT1JERVIuVU5TT1JUKSB7XG4gICAgZGF0YXNldC5zb3J0Q29sdW1uID0ge307XG4gICAgZGF0YXNldC5zb3J0T3JkZXIgPSBudWxsO1xuXG4gICAgcmV0dXJuIGRhdGFzZXQ7XG4gIH1cblxuICBjb25zdCBzb3J0RnVuY3Rpb24gPSBzb3J0QnkgPT09IFNPUlRfT1JERVIuQVNDRU5ESU5HID8gYXNjZW5kaW5nIDogZGVzY2VuZGluZztcbiAgY29uc3Qgc29ydE9yZGVyID0gYWxsSW5kZXhlc1xuICAgIC5zbGljZSgpXG4gICAgLnNvcnQoKGEsIGIpID0+XG4gICAgICBzb3J0RnVuY3Rpb24oZGF0YUNvbnRhaW5lci52YWx1ZUF0KGEsIGZpZWxkSW5kZXgpLCBkYXRhQ29udGFpbmVyLnZhbHVlQXQoYiwgZmllbGRJbmRleCkpXG4gICAgKTtcblxuICBkYXRhc2V0LnNvcnRDb2x1bW4gPSB7XG4gICAgW2NvbHVtbl06IHNvcnRCeVxuICB9O1xuICBkYXRhc2V0LnNvcnRPcmRlciA9IHNvcnRPcmRlcjtcblxuICByZXR1cm4gZGF0YXNldDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBpblRhYmxlQ29sdW1ucyhkYXRhc2V0OiBLZXBsZXJUYWJsZSwgY29sdW1uOiBzdHJpbmcpOiBLZXBsZXJUYWJsZSB7XG4gIGNvbnN0IGZpZWxkID0gZGF0YXNldC5nZXRDb2x1bW5GaWVsZChjb2x1bW4pO1xuICBpZiAoIWZpZWxkKSB7XG4gICAgcmV0dXJuIGRhdGFzZXQ7XG4gIH1cblxuICBsZXQgcGlubmVkQ29sdW1ucztcbiAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YXNldC5waW5uZWRDb2x1bW5zKSAmJiBkYXRhc2V0LnBpbm5lZENvbHVtbnMuaW5jbHVkZXMoZmllbGQubmFtZSkpIHtcbiAgICAvLyB1bnBpbiBpdFxuICAgIHBpbm5lZENvbHVtbnMgPSBkYXRhc2V0LnBpbm5lZENvbHVtbnMuZmlsdGVyKGNvID0+IGNvICE9PSBmaWVsZC5uYW1lKTtcbiAgfSBlbHNlIHtcbiAgICBwaW5uZWRDb2x1bW5zID0gKGRhdGFzZXQucGlubmVkQ29sdW1ucyB8fCBbXSkuY29uY2F0KGZpZWxkLm5hbWUpO1xuICB9XG5cbiAgLy8gQHRzLWlnbm9yZVxuICByZXR1cm4gY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHtwaW5uZWRDb2x1bW5zfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gY29weVRhYmxlPFQgZXh0ZW5kcyB7fT4ob3JpZ2luYWw6IFQpOiBUIHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2Yob3JpZ2luYWwpKSwgb3JpZ2luYWwpO1xufVxuXG4vKipcbiAqIEB0eXBlXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29weVRhYmxlQW5kVXBkYXRlPFQgZXh0ZW5kcyB7fT4ob3JpZ2luYWw6IFQsIG9wdGlvbnM6IFBhcnRpYWw8VD4gPSB7fSk6IFQge1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMob3B0aW9ucykucmVkdWNlKChhY2MsIGVudHJ5KSA9PiB7XG4gICAgYWNjW2VudHJ5WzBdXSA9IGVudHJ5WzFdO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIGNvcHlUYWJsZShvcmlnaW5hbCkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBLZXBsZXJUYWJsZTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQkEsSUFBQUEsUUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsZ0JBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLFFBQUEsR0FBQUYsT0FBQTtBQUdBLElBQUFHLE1BQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLGVBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLFlBQUEsR0FBQUwsT0FBQTtBQVVBLElBQUFNLFVBQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLGVBQUEsR0FBQVAsT0FBQTtBQVNBLElBQUFRLG1CQUFBLEdBQUFSLE9BQUE7QUFFQSxJQUFBUyxXQUFBLEdBQUFULE9BQUE7QUFBdUQsU0FBQVUsMkJBQUFDLENBQUEsRUFBQUMsQ0FBQSxRQUFBQyxDQUFBLHlCQUFBQyxNQUFBLElBQUFILENBQUEsQ0FBQUcsTUFBQSxDQUFBQyxRQUFBLEtBQUFKLENBQUEscUJBQUFFLENBQUEsUUFBQUcsS0FBQSxDQUFBQyxPQUFBLENBQUFOLENBQUEsTUFBQUUsQ0FBQSxHQUFBSywyQkFBQSxDQUFBUCxDQUFBLE1BQUFDLENBQUEsSUFBQUQsQ0FBQSx1QkFBQUEsQ0FBQSxDQUFBUSxNQUFBLElBQUFOLENBQUEsS0FBQUYsQ0FBQSxHQUFBRSxDQUFBLE9BQUFPLEVBQUEsTUFBQUMsQ0FBQSxZQUFBQSxFQUFBLGVBQUFDLENBQUEsRUFBQUQs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