@carto/kepler.gl 0.0.86-alpha.deck9.1 → 0.0.86

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 (423) hide show
  1. package/dist/actions/action-wrapper.js +41 -36
  2. package/dist/actions/actions.js +21 -15
  3. package/dist/actions/identity-actions.js +20 -14
  4. package/dist/actions/index.js +16 -16
  5. package/dist/actions/map-state-actions.js +18 -12
  6. package/dist/actions/map-style-actions.js +46 -30
  7. package/dist/actions/provider-actions.js +73 -49
  8. package/dist/actions/ui-state-actions.js +113 -73
  9. package/dist/actions/vis-state-actions.js +148 -152
  10. package/dist/cloud-providers/index.js +7 -6
  11. package/dist/cloud-providers/provider.js +279 -189
  12. package/dist/components/bottom-widget.js +117 -105
  13. package/dist/components/common/action-panel.js +74 -122
  14. package/dist/components/common/animation-control/animation-control.js +54 -69
  15. package/dist/components/common/animation-control/animation-controller.js +160 -134
  16. package/dist/components/common/animation-control/animation-speed-slider.js +54 -47
  17. package/dist/components/common/animation-control/floating-time-display.js +100 -120
  18. package/dist/components/common/animation-control/playback-controls.js +144 -147
  19. package/dist/components/common/animation-control/speed-control.js +23 -31
  20. package/dist/components/common/checkbox.js +70 -56
  21. package/dist/components/common/color-legend.js +110 -83
  22. package/dist/components/common/data-table/button.js +23 -31
  23. package/dist/components/common/data-table/canvas.js +5 -11
  24. package/dist/components/common/data-table/cell-size.js +61 -51
  25. package/dist/components/common/data-table/grid.js +59 -40
  26. package/dist/components/common/data-table/index.js +348 -464
  27. package/dist/components/common/data-table/option-dropdown.js +33 -50
  28. package/dist/components/common/dataset-label.js +13 -17
  29. package/dist/components/common/error-boundary.js +45 -27
  30. package/dist/components/common/field-selector.js +139 -99
  31. package/dist/components/common/field-token.js +9 -24
  32. package/dist/components/common/file-uploader/file-drop.js +115 -96
  33. package/dist/components/common/file-uploader/file-upload-progress.js +45 -68
  34. package/dist/components/common/file-uploader/file-upload.js +187 -215
  35. package/dist/components/common/file-uploader/upload-button.js +22 -35
  36. package/dist/components/common/histogram-plot.js +58 -47
  37. package/dist/components/common/icons/add.js +27 -14
  38. package/dist/components/common/icons/anchor_window.js +18 -16
  39. package/dist/components/common/icons/arrow-down-alt.js +27 -14
  40. package/dist/components/common/icons/arrow-down-solid.js +27 -14
  41. package/dist/components/common/icons/arrow-down.js +27 -14
  42. package/dist/components/common/icons/arrow-left.js +30 -17
  43. package/dist/components/common/icons/arrow-right.js +27 -14
  44. package/dist/components/common/icons/arrow-up-alt.js +28 -15
  45. package/dist/components/common/icons/arrow-up-solid.js +27 -14
  46. package/dist/components/common/icons/arrow-up.js +27 -14
  47. package/dist/components/common/icons/base.js +57 -39
  48. package/dist/components/common/icons/bug.js +29 -16
  49. package/dist/components/common/icons/cancel.js +27 -14
  50. package/dist/components/common/icons/checkmark.js +31 -18
  51. package/dist/components/common/icons/chevron-right.js +33 -20
  52. package/dist/components/common/icons/clipboard.js +28 -15
  53. package/dist/components/common/icons/clock.js +29 -16
  54. package/dist/components/common/icons/close.js +32 -19
  55. package/dist/components/common/icons/code-alt.js +29 -16
  56. package/dist/components/common/icons/copy.js +31 -18
  57. package/dist/components/common/icons/crosshairs.js +29 -16
  58. package/dist/components/common/icons/cube-3d.js +31 -18
  59. package/dist/components/common/icons/cursor-click.js +31 -18
  60. package/dist/components/common/icons/data-table.js +28 -15
  61. package/dist/components/common/icons/db.js +28 -15
  62. package/dist/components/common/icons/delete.js +29 -16
  63. package/dist/components/common/icons/docs.js +43 -30
  64. package/dist/components/common/icons/drag-n-drop.js +29 -16
  65. package/dist/components/common/icons/draw-polygon.js +46 -33
  66. package/dist/components/common/icons/email.js +31 -18
  67. package/dist/components/common/icons/expand.js +29 -16
  68. package/dist/components/common/icons/eye-seen.js +29 -16
  69. package/dist/components/common/icons/eye-unseen.js +29 -16
  70. package/dist/components/common/icons/file-type.js +19 -35
  71. package/dist/components/common/icons/file.js +27 -14
  72. package/dist/components/common/icons/files.js +26 -14
  73. package/dist/components/common/icons/filter-funnel.js +27 -14
  74. package/dist/components/common/icons/free-window.js +18 -16
  75. package/dist/components/common/icons/gear.js +29 -16
  76. package/dist/components/common/icons/hash.js +27 -14
  77. package/dist/components/common/icons/histogram.js +27 -15
  78. package/dist/components/common/icons/index.js +156 -156
  79. package/dist/components/common/icons/info.js +38 -25
  80. package/dist/components/common/icons/layers.js +27 -14
  81. package/dist/components/common/icons/left-arrow.js +29 -16
  82. package/dist/components/common/icons/legend.js +27 -14
  83. package/dist/components/common/icons/line-chart.js +27 -14
  84. package/dist/components/common/icons/login.js +30 -17
  85. package/dist/components/common/icons/logout.js +29 -16
  86. package/dist/components/common/icons/map-icon.js +32 -18
  87. package/dist/components/common/icons/map.js +32 -18
  88. package/dist/components/common/icons/messages.js +27 -14
  89. package/dist/components/common/icons/minus.js +27 -14
  90. package/dist/components/common/icons/order-by-dataset.js +17 -15
  91. package/dist/components/common/icons/order-by-list.js +9 -7
  92. package/dist/components/common/icons/pause.js +27 -14
  93. package/dist/components/common/icons/picture.js +26 -14
  94. package/dist/components/common/icons/pin.js +30 -17
  95. package/dist/components/common/icons/play.js +27 -14
  96. package/dist/components/common/icons/polygon.js +48 -35
  97. package/dist/components/common/icons/rectangle.js +49 -36
  98. package/dist/components/common/icons/reduce.js +30 -17
  99. package/dist/components/common/icons/reset.js +27 -14
  100. package/dist/components/common/icons/rocket.js +27 -14
  101. package/dist/components/common/icons/save.js +29 -16
  102. package/dist/components/common/icons/save2.js +33 -20
  103. package/dist/components/common/icons/search.js +29 -16
  104. package/dist/components/common/icons/settings.js +29 -16
  105. package/dist/components/common/icons/share.js +27 -14
  106. package/dist/components/common/icons/split.js +55 -42
  107. package/dist/components/common/icons/square-select.js +29 -16
  108. package/dist/components/common/icons/swap-horizontal.js +31 -18
  109. package/dist/components/common/icons/table.js +27 -14
  110. package/dist/components/common/icons/trash.js +29 -16
  111. package/dist/components/common/icons/upload.js +27 -14
  112. package/dist/components/common/icons/vert-dots.js +65 -52
  113. package/dist/components/common/icons/vert-three-dots.js +40 -27
  114. package/dist/components/common/icons/warning.js +39 -26
  115. package/dist/components/common/image-preview.js +33 -71
  116. package/dist/components/common/info-helper.js +29 -36
  117. package/dist/components/common/item-selector/accessor.js +13 -7
  118. package/dist/components/common/item-selector/chickleted-input.js +56 -72
  119. package/dist/components/common/item-selector/dropdown-list.js +214 -182
  120. package/dist/components/common/item-selector/item-selector-submenu.js +55 -34
  121. package/dist/components/common/item-selector/item-selector.js +194 -183
  122. package/dist/components/common/item-selector/typeahead.js +248 -236
  123. package/dist/components/common/line-chart.js +58 -80
  124. package/dist/components/common/loading-spinner.js +31 -46
  125. package/dist/components/common/logo.js +48 -61
  126. package/dist/components/common/map-layer-selector.js +25 -31
  127. package/dist/components/common/modal.js +106 -167
  128. package/dist/components/common/portaled.js +189 -169
  129. package/dist/components/common/progress-bar.js +24 -27
  130. package/dist/components/common/range-brush.js +215 -176
  131. package/dist/components/common/range-plot.js +63 -52
  132. package/dist/components/common/range-slider.js +231 -206
  133. package/dist/components/common/slider/mouse-event.js +66 -59
  134. package/dist/components/common/slider/slider-bar-handle.js +61 -51
  135. package/dist/components/common/slider/slider-handle.js +102 -127
  136. package/dist/components/common/slider/slider.js +162 -143
  137. package/dist/components/common/styled-components.js +256 -518
  138. package/dist/components/common/switch.js +11 -11
  139. package/dist/components/common/time-range-slider-time-title.js +32 -49
  140. package/dist/components/common/time-range-slider.js +45 -56
  141. package/dist/components/common/time-slider-marker.js +52 -71
  142. package/dist/components/common/tippy-tooltip.js +59 -89
  143. package/dist/components/common/toolbar-item.js +45 -53
  144. package/dist/components/common/toolbar.js +18 -24
  145. package/dist/components/common/vertical-toolbar.js +6 -13
  146. package/dist/components/container.js +119 -87
  147. package/dist/components/context.js +8 -6
  148. package/dist/components/editor/constants.js +4 -4
  149. package/dist/components/editor/editor.js +157 -122
  150. package/dist/components/editor/feature-action-panel.js +59 -52
  151. package/dist/components/editor/feature-styles.js +29 -46
  152. package/dist/components/editor/handle-style.js +29 -38
  153. package/dist/components/filters/components.js +4 -8
  154. package/dist/components/filters/filter-panels/filter-panel-with-field-select.js +43 -33
  155. package/dist/components/filters/filter-panels/multi-select-filter-panel.js +21 -20
  156. package/dist/components/filters/filter-panels/new-filter-panel.js +31 -24
  157. package/dist/components/filters/filter-panels/polygon-filter-panel.js +31 -26
  158. package/dist/components/filters/filter-panels/range-filter-panel.js +21 -20
  159. package/dist/components/filters/filter-panels/single-select-filter-panel.js +21 -20
  160. package/dist/components/filters/filter-panels/time-range-filter-panel.js +31 -28
  161. package/dist/components/filters/index.js +10 -10
  162. package/dist/components/filters/multi-select-filter.js +9 -11
  163. package/dist/components/filters/polygon-filter.js +41 -26
  164. package/dist/components/filters/range-filter.js +7 -9
  165. package/dist/components/filters/single-select-filter.js +13 -11
  166. package/dist/components/filters/time-range-filter.js +14 -16
  167. package/dist/components/filters/time-widget.js +84 -125
  168. package/dist/components/geocoder/geocoder.js +177 -158
  169. package/dist/components/geocoder-panel.js +87 -66
  170. package/dist/components/index.js +329 -328
  171. package/dist/components/injector.js +63 -44
  172. package/dist/components/kepler-gl.js +361 -325
  173. package/dist/components/map/coordinate-info.js +16 -18
  174. package/dist/components/map/layer-hover-info.js +86 -108
  175. package/dist/components/map/layer-selector-panel.js +48 -50
  176. package/dist/components/map/locale-panel.js +44 -38
  177. package/dist/components/map/map-control-panel.js +47 -70
  178. package/dist/components/map/map-control-toolbar.js +6 -9
  179. package/dist/components/map/map-control-tooltip.js +8 -10
  180. package/dist/components/map/map-control.js +27 -35
  181. package/dist/components/map/map-draw-panel.js +48 -38
  182. package/dist/components/map/map-legend-panel.js +50 -47
  183. package/dist/components/map/map-legend.js +116 -133
  184. package/dist/components/map/map-popover.js +100 -155
  185. package/dist/components/map/split-map-button.js +34 -30
  186. package/dist/components/map/toggle-3d-button.js +27 -25
  187. package/dist/components/map-container.js +359 -313
  188. package/dist/components/maps-layout.js +26 -16
  189. package/dist/components/modal-container.js +355 -359
  190. package/dist/components/modals/add-map-style-modal.js +194 -233
  191. package/dist/components/modals/cloud-tile.js +67 -96
  192. package/dist/components/modals/data-table-modal.js +152 -155
  193. package/dist/components/modals/delete-data-modal.js +20 -20
  194. package/dist/components/modals/error-display.js +7 -9
  195. package/dist/components/modals/export-data-modal.js +140 -118
  196. package/dist/components/modals/export-image-modal.js +69 -82
  197. package/dist/components/modals/export-map-modal/components.js +18 -20
  198. package/dist/components/modals/export-map-modal/export-html-map.js +74 -82
  199. package/dist/components/modals/export-map-modal/export-json-map.js +45 -65
  200. package/dist/components/modals/export-map-modal/export-map-modal.js +47 -42
  201. package/dist/components/modals/image-modal-container.js +21 -20
  202. package/dist/components/modals/load-data-modal.js +30 -28
  203. package/dist/components/modals/load-storage-map.js +178 -277
  204. package/dist/components/modals/loading-dialog.js +19 -41
  205. package/dist/components/modals/modal-dialog.js +6 -4
  206. package/dist/components/modals/modal-tabs.js +48 -83
  207. package/dist/components/modals/overwrite-map-modal.js +30 -41
  208. package/dist/components/modals/provider-modal-container.js +42 -23
  209. package/dist/components/modals/save-map-modal.js +83 -107
  210. package/dist/components/modals/share-map-modal.js +95 -101
  211. package/dist/components/modals/status-panel.js +43 -63
  212. package/dist/components/modals/storage-map-viewer.js +70 -133
  213. package/dist/components/notification-panel/notification-item.js +97 -94
  214. package/dist/components/notification-panel.js +43 -35
  215. package/dist/components/performance.js +53 -49
  216. package/dist/components/plot-container.js +169 -151
  217. package/dist/components/side-panel/cloud-storage-dropdown.js +15 -13
  218. package/dist/components/side-panel/common/dataset-info.js +12 -16
  219. package/dist/components/side-panel/common/dataset-tag.js +27 -48
  220. package/dist/components/side-panel/common/dataset-title.js +116 -119
  221. package/dist/components/side-panel/common/source-data-catalog.js +32 -31
  222. package/dist/components/side-panel/common/source-data-selector.js +77 -52
  223. package/dist/components/side-panel/custom-panel.js +8 -6
  224. package/dist/components/side-panel/filter-manager.js +62 -48
  225. package/dist/components/side-panel/filter-panel/filter-panel-header.js +25 -35
  226. package/dist/components/side-panel/filter-panel/filter-panel.js +64 -46
  227. package/dist/components/side-panel/interaction-manager.js +18 -20
  228. package/dist/components/side-panel/interaction-panel/brush-config.js +17 -17
  229. package/dist/components/side-panel/interaction-panel/interaction-panel.js +95 -76
  230. package/dist/components/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.js +143 -118
  231. package/dist/components/side-panel/interaction-panel/tooltip-config.js +76 -95
  232. package/dist/components/side-panel/layer-manager.js +115 -105
  233. package/dist/components/side-panel/layer-panel/add-layer-button.js +54 -92
  234. package/dist/components/side-panel/layer-panel/color-dimension-scale-selector.js +5 -5
  235. package/dist/components/side-panel/layer-panel/color-palette.js +37 -50
  236. package/dist/components/side-panel/layer-panel/color-range-selector.js +207 -196
  237. package/dist/components/side-panel/layer-panel/color-selector.js +110 -104
  238. package/dist/components/side-panel/layer-panel/column-selector.js +22 -34
  239. package/dist/components/side-panel/layer-panel/custom-markers-config-group.js +4 -4
  240. package/dist/components/side-panel/layer-panel/custom-palette.js +205 -248
  241. package/dist/components/side-panel/layer-panel/custom-picker.js +69 -51
  242. package/dist/components/side-panel/layer-panel/dataset-layer-group.js +42 -37
  243. package/dist/components/side-panel/layer-panel/dataset-layer-section.js +27 -31
  244. package/dist/components/side-panel/layer-panel/dataset-section.js +35 -45
  245. package/dist/components/side-panel/layer-panel/dimension-scale-selector.js +13 -14
  246. package/dist/components/side-panel/layer-panel/hex-column-config.js +55 -32
  247. package/dist/components/side-panel/layer-panel/layer-aggregation-resolution.js +5 -5
  248. package/dist/components/side-panel/layer-panel/layer-column-config.js +46 -42
  249. package/dist/components/side-panel/layer-panel/layer-config-group.js +144 -178
  250. package/dist/components/side-panel/layer-panel/layer-configurator.js +830 -826
  251. package/dist/components/side-panel/layer-panel/layer-list.js +94 -101
  252. package/dist/components/side-panel/layer-panel/layer-panel-header.js +82 -124
  253. package/dist/components/side-panel/layer-panel/layer-panel.js +105 -111
  254. package/dist/components/side-panel/layer-panel/layer-type-dropdown-list.js +58 -67
  255. package/dist/components/side-panel/layer-panel/layer-type-list-item.js +32 -47
  256. package/dist/components/side-panel/layer-panel/layer-type-selector.js +41 -30
  257. package/dist/components/side-panel/layer-panel/layer-visibility-by-zoom.js +43 -42
  258. package/dist/components/side-panel/layer-panel/panel-view-list-toggle.js +57 -55
  259. package/dist/components/side-panel/layer-panel/single-color-palette.js +33 -48
  260. package/dist/components/side-panel/layer-panel/text-label-panel.js +116 -81
  261. package/dist/components/side-panel/layer-panel/vis-config-by-field-selector.js +102 -88
  262. package/dist/components/side-panel/layer-panel/vis-config-slider.js +85 -99
  263. package/dist/components/side-panel/layer-panel/vis-config-switch.js +29 -38
  264. package/dist/components/side-panel/map-manager.js +89 -70
  265. package/dist/components/side-panel/map-style-panel/map-layer-selector.js +60 -72
  266. package/dist/components/side-panel/map-style-panel/map-style-selector.js +42 -64
  267. package/dist/components/side-panel/panel-dropdown.js +37 -21
  268. package/dist/components/side-panel/panel-header-action.js +65 -60
  269. package/dist/components/side-panel/panel-header.js +184 -165
  270. package/dist/components/side-panel/panel-tab.js +29 -35
  271. package/dist/components/side-panel/panel-title.js +18 -15
  272. package/dist/components/side-panel/panel-toggle.js +31 -30
  273. package/dist/components/side-panel/side-bar.js +91 -100
  274. package/dist/components/side-panel.js +123 -108
  275. package/dist/connect/keplergl-connect.js +26 -17
  276. package/dist/connect/with-local-selector.js +63 -31
  277. package/dist/constants/action-types.js +115 -113
  278. package/dist/constants/color-palette.js +16 -14
  279. package/dist/constants/color-ranges.js +28 -23
  280. package/dist/constants/custom-color-ranges.js +12 -12
  281. package/dist/constants/default-settings.js +254 -323
  282. package/dist/constants/index.js +63 -63
  283. package/dist/constants/keyevent.js +4 -4
  284. package/dist/constants/tooltip.js +5 -5
  285. package/dist/constants/user-feedbacks.js +5 -9
  286. package/dist/constants/user-guides.js +10 -10
  287. package/dist/deckgl-layers/3d-building-layer/3d-building-layer.js +63 -37
  288. package/dist/deckgl-layers/3d-building-layer/3d-building-utils.js +56 -52
  289. package/dist/deckgl-layers/cluster-layer/cluster-layer.js +168 -165
  290. package/dist/deckgl-layers/column-layer/enhanced-column-layer.js +43 -24
  291. package/dist/deckgl-layers/grid-layer/enhanced-cpu-grid-layer.js +40 -27
  292. package/dist/deckgl-layers/hexagon-layer/enhanced-hexagon-layer.js +40 -27
  293. package/dist/deckgl-layers/layer-utils/cluster-utils.js +68 -60
  294. package/dist/deckgl-layers/layer-utils/cpu-aggregator.js +282 -276
  295. package/dist/deckgl-layers/layer-utils/shader-utils.js +2 -2
  296. package/dist/deckgl-layers/line-layer/line-layer.js +70 -62
  297. package/dist/deckgl-layers/svg-icon-layer/scatterplot-icon-layer.js +51 -37
  298. package/dist/deckgl-layers/svg-icon-layer/svg-icon-layer.js +85 -65
  299. package/dist/index.js +16 -15
  300. package/dist/layers/aggregation-layer.js +331 -299
  301. package/dist/layers/arc-layer/arc-layer-icon.js +41 -27
  302. package/dist/layers/arc-layer/arc-layer.js +201 -174
  303. package/dist/layers/base-layer.js +1544 -1371
  304. package/dist/layers/cluster-layer/cluster-layer-icon.js +44 -30
  305. package/dist/layers/cluster-layer/cluster-layer.js +103 -89
  306. package/dist/layers/default-layer-icon.js +53 -39
  307. package/dist/layers/geojson-layer/geojson-layer-icon.js +55 -42
  308. package/dist/layers/geojson-layer/geojson-layer.js +353 -292
  309. package/dist/layers/geojson-layer/geojson-utils.js +36 -31
  310. package/dist/layers/grid-layer/grid-layer-icon.js +100 -87
  311. package/dist/layers/grid-layer/grid-layer.js +61 -51
  312. package/dist/layers/grid-layer/grid-utils.js +9 -13
  313. package/dist/layers/h3-hexagon-layer/h3-hexagon-layer-icon.js +35 -21
  314. package/dist/layers/h3-hexagon-layer/h3-hexagon-layer.js +260 -225
  315. package/dist/layers/h3-hexagon-layer/h3-utils.js +16 -16
  316. package/dist/layers/heatmap-layer/heatmap-layer-icon.js +52 -39
  317. package/dist/layers/heatmap-layer/heatmap-layer.js +171 -140
  318. package/dist/layers/hexagon-layer/hexagon-layer-icon.js +64 -51
  319. package/dist/layers/hexagon-layer/hexagon-layer.js +63 -49
  320. package/dist/layers/hexagon-layer/hexagon-utils.js +14 -15
  321. package/dist/layers/icon-layer/icon-info-modal.js +75 -82
  322. package/dist/layers/icon-layer/icon-layer-icon.js +37 -24
  323. package/dist/layers/icon-layer/icon-layer.js +303 -274
  324. package/dist/layers/index.js +29 -43
  325. package/dist/layers/layer-factory.js +41 -25
  326. package/dist/layers/layer-text-label.js +23 -21
  327. package/dist/layers/layer-update.js +18 -16
  328. package/dist/layers/line-layer/line-layer-icon.js +43 -30
  329. package/dist/layers/line-layer/line-layer.js +142 -123
  330. package/dist/layers/mapbox-utils.js +62 -61
  331. package/dist/layers/mapboxgl-layer.js +169 -124
  332. package/dist/layers/point-layer/point-layer-icon.js +59 -45
  333. package/dist/layers/point-layer/point-layer.js +386 -355
  334. package/dist/layers/s2-geometry-layer/s2-geometry-layer.js +238 -208
  335. package/dist/layers/s2-geometry-layer/s2-layer-icon.js +35 -21
  336. package/dist/layers/s2-geometry-layer/s2-utils.js +8 -9
  337. package/dist/layers/scenegraph-layer/scenegraph-info-modal.js +25 -24
  338. package/dist/layers/scenegraph-layer/scenegraph-layer-icon.js +115 -102
  339. package/dist/layers/scenegraph-layer/scenegraph-layer.js +172 -148
  340. package/dist/layers/trip-layer/trip-info-modal.js +30 -50
  341. package/dist/layers/trip-layer/trip-layer-icon.js +53 -40
  342. package/dist/layers/trip-layer/trip-layer.js +307 -239
  343. package/dist/layers/trip-layer/trip-utils.js +50 -34
  344. package/dist/layers/types.js +2 -2
  345. package/dist/localization/formatted-message.js +10 -8
  346. package/dist/localization/index.js +7 -7
  347. package/dist/localization/locales.js +9 -6
  348. package/dist/localization/messages.js +10 -13
  349. package/dist/localization/translations/ca.js +13 -11
  350. package/dist/localization/translations/cn.js +13 -11
  351. package/dist/localization/translations/en.js +13 -11
  352. package/dist/localization/translations/es.js +13 -11
  353. package/dist/localization/translations/fi.js +13 -11
  354. package/dist/localization/translations/ja.js +13 -11
  355. package/dist/localization/translations/pt.js +13 -11
  356. package/dist/localization/translations/ru.js +13 -11
  357. package/dist/middleware/index.js +5 -3
  358. package/dist/processors/data-processor.js +201 -164
  359. package/dist/processors/file-handler.js +233 -111
  360. package/dist/processors/index.js +4 -4
  361. package/dist/reducers/combined-updaters.js +41 -41
  362. package/dist/reducers/composer-helpers.js +45 -20
  363. package/dist/reducers/composers.js +8 -9
  364. package/dist/reducers/core.js +35 -31
  365. package/dist/reducers/index.js +22 -21
  366. package/dist/reducers/map-state-updaters.js +47 -65
  367. package/dist/reducers/map-state.js +15 -23
  368. package/dist/reducers/map-style-updaters.js +159 -233
  369. package/dist/reducers/map-style.js +16 -30
  370. package/dist/reducers/provider-state-updaters.js +229 -217
  371. package/dist/reducers/provider-state.js +17 -29
  372. package/dist/reducers/root.js +58 -86
  373. package/dist/reducers/ui-state-updaters.js +218 -337
  374. package/dist/reducers/ui-state.js +16 -45
  375. package/dist/reducers/vis-state-merger.js +209 -205
  376. package/dist/reducers/vis-state-selectors.js +19 -5
  377. package/dist/reducers/vis-state-updaters.js +876 -1003
  378. package/dist/reducers/vis-state.js +16 -75
  379. package/dist/schemas/dataset-schema.js +108 -84
  380. package/dist/schemas/index.js +29 -28
  381. package/dist/schemas/map-state-schema.js +18 -21
  382. package/dist/schemas/map-style-schema.js +55 -47
  383. package/dist/schemas/schema-manager.js +161 -147
  384. package/dist/schemas/schema-utils.js +9 -8
  385. package/dist/schemas/schema.js +87 -72
  386. package/dist/schemas/versions.js +3 -3
  387. package/dist/schemas/vis-state-schema.js +583 -441
  388. package/dist/styles/base.js +1021 -1217
  389. package/dist/styles/index.js +3 -3
  390. package/dist/styles/media-breakpoints.js +18 -23
  391. package/dist/tasks/tasks.js +39 -36
  392. package/dist/templates/export-map-html.js +4 -233
  393. package/dist/utils/aggregate-utils.js +16 -13
  394. package/dist/utils/color-utils.js +37 -29
  395. package/dist/utils/custom-scales.js +3 -3
  396. package/dist/utils/data-scale-utils.js +13 -6
  397. package/dist/utils/data-utils.js +83 -60
  398. package/dist/utils/dataset-utils.js +77 -48
  399. package/dist/utils/dom-to-image.js +163 -108
  400. package/dist/utils/dom-utils.js +105 -88
  401. package/dist/utils/export-utils.js +103 -116
  402. package/dist/utils/filter-utils.js +374 -379
  403. package/dist/utils/gl-utils.js +15 -16
  404. package/dist/utils/gpu-filter-utils.js +73 -54
  405. package/dist/utils/index.js +48 -47
  406. package/dist/utils/interaction-utils.js +46 -53
  407. package/dist/utils/layer-utils.js +78 -89
  408. package/dist/utils/locale-utils.js +16 -24
  409. package/dist/utils/map-style-utils/mapbox-gl-style-editor.js +76 -67
  410. package/dist/utils/map-style-utils/mapbox-utils.js +3 -4
  411. package/dist/utils/mapbox-utils.js +4 -3
  412. package/dist/utils/notifications-utils.js +38 -33
  413. package/dist/utils/observe-dimensions.js +54 -42
  414. package/dist/utils/projection-utils.js +11 -14
  415. package/dist/utils/split-map-utils.js +33 -30
  416. package/dist/utils/table-utils/data-container-utils.js +14 -15
  417. package/dist/utils/table-utils/data-row.js +65 -58
  418. package/dist/utils/table-utils/index.js +2 -2
  419. package/dist/utils/table-utils/indexed-data-container.js +173 -105
  420. package/dist/utils/table-utils/kepler-table.js +386 -362
  421. package/dist/utils/table-utils/row-data-container.js +164 -99
  422. package/dist/utils/utils.js +30 -29
  423. package/package.json +1 -1
@@ -1,10 +1,18 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
4
5
  Object.defineProperty(exports, "__esModule", {
5
6
  value: true
6
7
  });
7
- exports.geojsonVisConfigs = exports.geoJsonRequiredColumns = exports.featureAccessor = exports.defaultRadius = exports.defaultLineWidth = exports.defaultElevation = exports.default = void 0;
8
+ exports.geojsonVisConfigs = exports.geoJsonRequiredColumns = exports.featureAccessor = exports.defaultRadius = exports.defaultLineWidth = exports.defaultElevation = exports["default"] = void 0;
9
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
10
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
12
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
13
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
14
+ var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
15
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
8
16
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
17
  var _uniq = _interopRequireDefault(require("lodash/uniq"));
10
18
  var _typeAnalyzer = require("type-analyzer");
@@ -14,9 +22,13 @@ var _geojsonUtils = require("./geojson-utils");
14
22
  var _geojsonLayerIcon = _interopRequireDefault(require("./geojson-layer-icon"));
15
23
  var _defaultSettings = require("../../constants/default-settings");
16
24
  var _layerFactory = require("../layer-factory");
17
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
18
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
19
- // Copyright (c) 2022 Uber Technologies, Inc.
25
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
26
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
27
+ function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
28
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
29
+ function _superPropGet(t, e, o, r) { var p = (0, _get2["default"])((0, _getPrototypeOf2["default"])(1 & r ? t.prototype : t), e, o); return 2 & r && "function" == typeof p ? function (t) { return p.apply(o, t); } : p; }
30
+ 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; }
31
+ 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.
20
32
  //
21
33
  // Permission is hereby granted, free of charge, to any person obtaining a copy
22
34
  // of this software and associated documentation files (the "Software"), to deal
@@ -35,21 +47,15 @@ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e;
35
47
  // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
36
48
  // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
37
49
  // THE SOFTWARE.
38
-
39
- const SUPPORTED_ANALYZER_TYPES = {
40
- [_typeAnalyzer.DATA_TYPES.GEOMETRY]: true,
41
- [_typeAnalyzer.DATA_TYPES.GEOMETRY_FROM_STRING]: true
42
- };
43
- const geojsonVisConfigs = exports.geojsonVisConfigs = {
50
+ var SUPPORTED_ANALYZER_TYPES = (0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, _typeAnalyzer.DATA_TYPES.GEOMETRY, true), _typeAnalyzer.DATA_TYPES.GEOMETRY_FROM_STRING, true);
51
+ var geojsonVisConfigs = exports.geojsonVisConfigs = {
44
52
  opacity: 'opacity',
45
- strokeOpacity: {
46
- ..._layerFactory.LAYER_VIS_CONFIGS.opacity,
53
+ strokeOpacity: _objectSpread(_objectSpread({}, _layerFactory.LAYER_VIS_CONFIGS.opacity), {}, {
47
54
  property: 'strokeOpacity'
48
- },
49
- thickness: {
50
- ..._layerFactory.LAYER_VIS_CONFIGS.thickness,
55
+ }),
56
+ thickness: _objectSpread(_objectSpread({}, _layerFactory.LAYER_VIS_CONFIGS.thickness), {}, {
51
57
  defaultValue: 1
52
- },
58
+ }),
53
59
  strokeColor: 'strokeColor',
54
60
  colorRange: 'colorRange',
55
61
  strokeColorRange: 'strokeColorRange',
@@ -64,299 +70,354 @@ const geojsonVisConfigs = exports.geojsonVisConfigs = {
64
70
  enable3d: 'enable3d',
65
71
  wireframe: 'wireframe'
66
72
  };
67
- const geoJsonRequiredColumns = exports.geoJsonRequiredColumns = ['geojson'];
68
- const featureAccessor = _ref => {
69
- let {
70
- geojson
71
- } = _ref;
72
- return dc => d => dc.valueAt(d.index, geojson.fieldIdx);
73
+ var geoJsonRequiredColumns = exports.geoJsonRequiredColumns = ['geojson'];
74
+ var featureAccessor = exports.featureAccessor = function featureAccessor(_ref) {
75
+ var geojson = _ref.geojson;
76
+ return function (dc) {
77
+ return function (d) {
78
+ return dc.valueAt(d.index, geojson.fieldIdx);
79
+ };
80
+ };
73
81
  };
74
82
 
75
83
  // access feature properties from geojson sub layer
76
- exports.featureAccessor = featureAccessor;
77
- const defaultElevation = exports.defaultElevation = 500;
78
- const defaultLineWidth = exports.defaultLineWidth = 1;
79
- const defaultRadius = exports.defaultRadius = 1;
80
- class GeoJsonLayer extends _baseLayer.default {
81
- constructor(props) {
82
- super(props);
83
- (0, _defineProperty2.default)(this, "dataToFeature", void 0);
84
- this.dataToFeature = [];
85
- this.registerVisConfig(geojsonVisConfigs);
86
- this.getPositionAccessor = dataContainer => featureAccessor(this.config.columns)(dataContainer);
87
- }
88
- get type() {
89
- return GeoJsonLayer.type;
90
- }
91
- static get type() {
92
- return 'geojson';
93
- }
94
- get name() {
95
- return 'Polygon';
96
- }
97
- get layerIcon() {
98
- return _geojsonLayerIcon.default;
99
- }
100
- get requiredLayerColumns() {
101
- return geoJsonRequiredColumns;
102
- }
103
- get visualChannels() {
104
- const visualChannels = super.visualChannels;
105
- return {
106
- color: {
107
- ...visualChannels.color,
108
- accessor: 'getFillColor',
109
- condition: config => config.visConfig.filled,
110
- nullValue: visualChannels.color.nullValue,
111
- getAttributeValue: config => d => d.properties.fillColor || config.color,
112
- // used this to get updateTriggers
113
- defaultValue: config => config.color
114
- },
115
- strokeColor: {
116
- property: 'strokeColor',
117
- field: 'strokeColorField',
118
- scale: 'strokeColorScale',
119
- domain: 'strokeColorDomain',
120
- range: 'strokeColorRange',
121
- key: 'strokeColor',
122
- channelScaleType: _defaultSettings.CHANNEL_SCALES.color,
123
- accessor: 'getLineColor',
124
- condition: config => config.visConfig.stroked,
125
- nullValue: visualChannels.color.nullValue,
126
- getAttributeValue: config => d => d.properties.lineColor || config.visConfig.strokeColor || config.color,
127
- // used this to get updateTriggers
128
- defaultValue: config => config.visConfig.strokeColor || config.color
129
- },
130
- size: {
131
- ...visualChannels.size,
132
- property: 'stroke',
133
- accessor: 'getLineWidth',
134
- condition: config => config.visConfig.stroked,
135
- nullValue: 0,
136
- getAttributeValue: () => d => d.properties.lineWidth || defaultLineWidth
137
- },
138
- height: {
139
- property: 'height',
140
- field: 'heightField',
141
- scale: 'heightScale',
142
- domain: 'heightDomain',
143
- range: 'heightRange',
144
- key: 'height',
145
- channelScaleType: _defaultSettings.CHANNEL_SCALES.size,
146
- accessor: 'getElevation',
147
- condition: config => config.visConfig.enable3d,
148
- nullValue: 0,
149
- getAttributeValue: () => d => d.properties.elevation || defaultElevation
150
- },
151
- radius: {
152
- property: 'radius',
153
- field: 'radiusField',
154
- scale: 'radiusScale',
155
- domain: 'radiusDomain',
156
- range: 'radiusRange',
157
- key: 'radius',
158
- channelScaleType: _defaultSettings.CHANNEL_SCALES.radius,
159
- accessor: 'getRadius',
160
- nullValue: 0,
161
- getAttributeValue: () => d => d.properties.radius || defaultRadius
162
- }
84
+ var defaultElevation = exports.defaultElevation = 500;
85
+ var defaultLineWidth = exports.defaultLineWidth = 1;
86
+ var defaultRadius = exports.defaultRadius = 1;
87
+ var GeoJsonLayer = exports["default"] = /*#__PURE__*/function (_Layer) {
88
+ function GeoJsonLayer(props) {
89
+ var _this;
90
+ (0, _classCallCheck2["default"])(this, GeoJsonLayer);
91
+ _this = _callSuper(this, GeoJsonLayer, [props]);
92
+ _this.dataToFeature = [];
93
+ _this.registerVisConfig(geojsonVisConfigs);
94
+ _this.getPositionAccessor = function (dataContainer) {
95
+ return featureAccessor(_this.config.columns)(dataContainer);
163
96
  };
97
+ return _this;
164
98
  }
165
- static findDefaultLayerProps(_ref2) {
166
- let {
167
- label,
168
- fields = []
169
- } = _ref2;
170
- const geojsonColumns = fields.filter(f => f.type === 'geojson' && SUPPORTED_ANALYZER_TYPES[f.analyzerType]).map(f => f.name);
171
- const defaultColumns = {
172
- geojson: (0, _uniq.default)([..._defaultSettings.GEOJSON_FIELDS.geojson, ...geojsonColumns])
173
- };
174
- const foundColumns = this.findDefaultColumnField(defaultColumns, fields);
175
- if (!foundColumns || !foundColumns.length) {
99
+ (0, _inherits2["default"])(GeoJsonLayer, _Layer);
100
+ return (0, _createClass2["default"])(GeoJsonLayer, [{
101
+ key: "type",
102
+ get: function get() {
103
+ return GeoJsonLayer.type;
104
+ }
105
+ }, {
106
+ key: "name",
107
+ get: function get() {
108
+ return 'Polygon';
109
+ }
110
+ }, {
111
+ key: "layerIcon",
112
+ get: function get() {
113
+ return _geojsonLayerIcon["default"];
114
+ }
115
+ }, {
116
+ key: "requiredLayerColumns",
117
+ get: function get() {
118
+ return geoJsonRequiredColumns;
119
+ }
120
+ }, {
121
+ key: "visualChannels",
122
+ get: function get() {
123
+ var visualChannels = _superPropGet(GeoJsonLayer, "visualChannels", this, 1);
176
124
  return {
177
- props: []
125
+ color: _objectSpread(_objectSpread({}, visualChannels.color), {}, {
126
+ accessor: 'getFillColor',
127
+ condition: function condition(config) {
128
+ return config.visConfig.filled;
129
+ },
130
+ nullValue: visualChannels.color.nullValue,
131
+ getAttributeValue: function getAttributeValue(config) {
132
+ return function (d) {
133
+ return d.properties.fillColor || config.color;
134
+ };
135
+ },
136
+ // used this to get updateTriggers
137
+ defaultValue: function defaultValue(config) {
138
+ return config.color;
139
+ }
140
+ }),
141
+ strokeColor: {
142
+ property: 'strokeColor',
143
+ field: 'strokeColorField',
144
+ scale: 'strokeColorScale',
145
+ domain: 'strokeColorDomain',
146
+ range: 'strokeColorRange',
147
+ key: 'strokeColor',
148
+ channelScaleType: _defaultSettings.CHANNEL_SCALES.color,
149
+ accessor: 'getLineColor',
150
+ condition: function condition(config) {
151
+ return config.visConfig.stroked;
152
+ },
153
+ nullValue: visualChannels.color.nullValue,
154
+ getAttributeValue: function getAttributeValue(config) {
155
+ return function (d) {
156
+ return d.properties.lineColor || config.visConfig.strokeColor || config.color;
157
+ };
158
+ },
159
+ // used this to get updateTriggers
160
+ defaultValue: function defaultValue(config) {
161
+ return config.visConfig.strokeColor || config.color;
162
+ }
163
+ },
164
+ size: _objectSpread(_objectSpread({}, visualChannels.size), {}, {
165
+ property: 'stroke',
166
+ accessor: 'getLineWidth',
167
+ condition: function condition(config) {
168
+ return config.visConfig.stroked;
169
+ },
170
+ nullValue: 0,
171
+ getAttributeValue: function getAttributeValue() {
172
+ return function (d) {
173
+ return d.properties.lineWidth || defaultLineWidth;
174
+ };
175
+ }
176
+ }),
177
+ height: {
178
+ property: 'height',
179
+ field: 'heightField',
180
+ scale: 'heightScale',
181
+ domain: 'heightDomain',
182
+ range: 'heightRange',
183
+ key: 'height',
184
+ channelScaleType: _defaultSettings.CHANNEL_SCALES.size,
185
+ accessor: 'getElevation',
186
+ condition: function condition(config) {
187
+ return config.visConfig.enable3d;
188
+ },
189
+ nullValue: 0,
190
+ getAttributeValue: function getAttributeValue() {
191
+ return function (d) {
192
+ return d.properties.elevation || defaultElevation;
193
+ };
194
+ }
195
+ },
196
+ radius: {
197
+ property: 'radius',
198
+ field: 'radiusField',
199
+ scale: 'radiusScale',
200
+ domain: 'radiusDomain',
201
+ range: 'radiusRange',
202
+ key: 'radius',
203
+ channelScaleType: _defaultSettings.CHANNEL_SCALES.radius,
204
+ accessor: 'getRadius',
205
+ nullValue: 0,
206
+ getAttributeValue: function getAttributeValue() {
207
+ return function (d) {
208
+ return d.properties.radius || defaultRadius;
209
+ };
210
+ }
211
+ }
178
212
  };
179
213
  }
180
- return {
181
- props: foundColumns.map(columns => ({
182
- label: typeof label === 'string' && label.replace(/\.[^/.]+$/, '') || this.type,
183
- columns,
184
- isVisible: true
185
- }))
186
- };
187
- }
188
- getDefaultLayerConfig() {
189
- let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
190
- return {
191
- ...super.getDefaultLayerConfig(props),
192
- // add height visual channel
193
- heightField: null,
194
- heightDomain: [0, 1],
195
- heightScale: 'linear',
196
- // add radius visual channel
197
- radiusField: null,
198
- radiusDomain: [0, 1],
199
- radiusScale: 'linear',
200
- // add stroke color visual channel
201
- strokeColorField: null,
202
- strokeColorDomain: [0, 1],
203
- strokeColorScale: 'quantile'
204
- };
205
- }
206
- getHoverData(object, dataContainer) {
207
- // index of dataContainer is saved to feature.properties
208
- return dataContainer.row(object.properties.index);
209
- }
210
- calculateDataAttribute(_ref3, getPosition) {
211
- let {
212
- dataContainer,
213
- filteredIndex
214
- } = _ref3;
215
- return filteredIndex.map(i => this.dataToFeature[i]).filter(d => d);
216
- }
217
- formatLayerData(datasets, oldLayerData) {
218
- if (this.config.dataId === null) {
219
- return {};
214
+ }, {
215
+ key: "getDefaultLayerConfig",
216
+ value: function getDefaultLayerConfig() {
217
+ var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
218
+ return _objectSpread(_objectSpread({}, _superPropGet(GeoJsonLayer, "getDefaultLayerConfig", this, 3)([props])), {}, {
219
+ // add height visual channel
220
+ heightField: null,
221
+ heightDomain: [0, 1],
222
+ heightScale: 'linear',
223
+ // add radius visual channel
224
+ radiusField: null,
225
+ radiusDomain: [0, 1],
226
+ radiusScale: 'linear',
227
+ // add stroke color visual channel
228
+ strokeColorField: null,
229
+ strokeColorDomain: [0, 1],
230
+ strokeColorScale: 'quantile'
231
+ });
220
232
  }
221
- const {
222
- gpuFilter,
223
- dataContainer
224
- } = datasets[this.config.dataId];
225
- const {
226
- data
227
- } = this.updateData(datasets, oldLayerData);
228
- const customFilterValueAccessor = (dc, d, fieldIndex) => {
229
- return dc.valueAt(d.properties.index, fieldIndex);
230
- };
231
- const indexAccessor = f => f.properties.index;
232
- const dataAccessor = dc => d => ({
233
- index: d.properties.index
234
- });
235
- const accessors = this.getAttributeAccessors({
236
- dataAccessor,
237
- dataContainer
238
- });
239
- return {
240
- data,
241
- getFilterValue: gpuFilter.filterValueAccessor(dataContainer)(indexAccessor, customFilterValueAccessor),
242
- ...accessors
243
- };
244
- }
245
- updateLayerMeta(dataContainer) {
246
- const getFeature = this.getPositionAccessor(dataContainer);
247
- this.dataToFeature = (0, _geojsonUtils.getGeojsonDataMaps)(dataContainer, getFeature);
233
+ }, {
234
+ key: "getHoverData",
235
+ value: function getHoverData(object, dataContainer) {
236
+ // index of dataContainer is saved to feature.properties
237
+ return dataContainer.row(object.properties.index);
238
+ }
239
+ }, {
240
+ key: "calculateDataAttribute",
241
+ value: function calculateDataAttribute(_ref2, getPosition) {
242
+ var _this2 = this;
243
+ var dataContainer = _ref2.dataContainer,
244
+ filteredIndex = _ref2.filteredIndex;
245
+ return filteredIndex.map(function (i) {
246
+ return _this2.dataToFeature[i];
247
+ }).filter(function (d) {
248
+ return d;
249
+ });
250
+ }
251
+ }, {
252
+ key: "formatLayerData",
253
+ value: function formatLayerData(datasets, oldLayerData) {
254
+ if (this.config.dataId === null) {
255
+ return {};
256
+ }
257
+ var _datasets$this$config = datasets[this.config.dataId],
258
+ gpuFilter = _datasets$this$config.gpuFilter,
259
+ dataContainer = _datasets$this$config.dataContainer;
260
+ var _this$updateData = this.updateData(datasets, oldLayerData),
261
+ data = _this$updateData.data;
262
+ var customFilterValueAccessor = function customFilterValueAccessor(dc, d, fieldIndex) {
263
+ return dc.valueAt(d.properties.index, fieldIndex);
264
+ };
265
+ var indexAccessor = function indexAccessor(f) {
266
+ return f.properties.index;
267
+ };
268
+ var dataAccessor = function dataAccessor(dc) {
269
+ return function (d) {
270
+ return {
271
+ index: d.properties.index
272
+ };
273
+ };
274
+ };
275
+ var accessors = this.getAttributeAccessors({
276
+ dataAccessor: dataAccessor,
277
+ dataContainer: dataContainer
278
+ });
279
+ return _objectSpread({
280
+ data: data,
281
+ getFilterValue: gpuFilter.filterValueAccessor(dataContainer)(indexAccessor, customFilterValueAccessor)
282
+ }, accessors);
283
+ }
284
+ }, {
285
+ key: "updateLayerMeta",
286
+ value: function updateLayerMeta(dataContainer) {
287
+ var getFeature = this.getPositionAccessor(dataContainer);
288
+ this.dataToFeature = (0, _geojsonUtils.getGeojsonDataMaps)(dataContainer, getFeature);
248
289
 
249
- // get bounds from features
250
- const bounds = (0, _geojsonUtils.getGeojsonBounds)(this.dataToFeature);
290
+ // get bounds from features
291
+ var bounds = (0, _geojsonUtils.getGeojsonBounds)(this.dataToFeature);
251
292
 
252
- // keep a record of what type of geometry the collection has
253
- const featureTypes = (0, _geojsonUtils.getGeojsonFeatureTypes)(this.dataToFeature);
254
- this.updateMeta({
255
- bounds,
256
- featureTypes
257
- });
258
- }
259
- setInitialLayerConfig(_ref4) {
260
- let {
261
- dataContainer
262
- } = _ref4;
263
- this.updateLayerMeta(dataContainer);
264
- const {
265
- featureTypes
266
- } = this.meta;
267
- // default settings is stroke: true, filled: false
268
- if (featureTypes && featureTypes.polygon) {
269
- // set both fill and stroke to true
270
- return this.updateLayerVisConfig({
271
- filled: true,
272
- stroked: true,
273
- strokeColor: _baseLayer.colorMaker.next().value
274
- });
275
- } else if (featureTypes && featureTypes.point) {
276
- // set fill to true if detect point
277
- return this.updateLayerVisConfig({
278
- filled: true,
279
- stroked: false
293
+ // keep a record of what type of geometry the collection has
294
+ var featureTypes = (0, _geojsonUtils.getGeojsonFeatureTypes)(this.dataToFeature);
295
+ this.updateMeta({
296
+ bounds: bounds,
297
+ featureTypes: featureTypes
280
298
  });
281
299
  }
282
- return this;
283
- }
284
- renderLayer(opts) {
285
- const {
286
- data,
287
- gpuFilter,
288
- objectHovered
289
- } = opts;
290
- const {
291
- featureTypes
292
- } = this.meta;
293
- const radiusScale = this.getRadiusScale();
294
- const {
295
- visConfig
296
- } = this.config;
297
- const layerProps = {
298
- lineWidthScale: visConfig.thickness,
299
- elevationScale: visConfig.elevationScale,
300
- pointRadiusScale: radiusScale,
301
- lineMiterLimit: 4
302
- };
303
- const updateTriggers = {
304
- ...this.getVisualChannelUpdateTriggers(),
305
- getFilterValue: gpuFilter.filterValueUpdateTriggers
306
- };
307
- const defaultLayerProps = this.getDefaultDeckLayerProps(opts);
308
- const opaOverwrite = {
309
- opacity: visConfig.strokeOpacity
310
- };
311
- const pickable = this.hasInteractivity;
312
- const hoveredObject = this.hasHoveredObject(objectHovered);
313
- return [new _layers.GeoJsonLayer({
314
- ...defaultLayerProps,
315
- ...layerProps,
316
- ...data,
317
- pickable,
318
- highlightColor: _defaultSettings.HIGHLIGH_COLOR_3D,
319
- autoHighlight: visConfig.enable3d && pickable,
320
- stroked: visConfig.stroked,
321
- filled: visConfig.filled,
322
- extruded: visConfig.enable3d,
323
- wireframe: visConfig.wireframe,
324
- wrapLongitude: false,
325
- lineMiterLimit: 2,
326
- rounded: true,
327
- radiusUnits: 'pixels',
328
- lineWidthUnits: 'pixels',
329
- updateTriggers,
330
- _subLayerProps: {
331
- ...(featureTypes !== null && featureTypes !== void 0 && featureTypes.polygon ? {
300
+ }, {
301
+ key: "setInitialLayerConfig",
302
+ value: function setInitialLayerConfig(_ref3) {
303
+ var dataContainer = _ref3.dataContainer;
304
+ this.updateLayerMeta(dataContainer);
305
+ var featureTypes = this.meta.featureTypes;
306
+ // default settings is stroke: true, filled: false
307
+ if (featureTypes && featureTypes.polygon) {
308
+ // set both fill and stroke to true
309
+ return this.updateLayerVisConfig({
310
+ filled: true,
311
+ stroked: true,
312
+ strokeColor: _baseLayer.colorMaker.next().value
313
+ });
314
+ } else if (featureTypes && featureTypes.point) {
315
+ // set fill to true if detect point
316
+ return this.updateLayerVisConfig({
317
+ filled: true,
318
+ stroked: false
319
+ });
320
+ }
321
+ return this;
322
+ }
323
+ }, {
324
+ key: "renderLayer",
325
+ value: function renderLayer(opts) {
326
+ var data = opts.data,
327
+ gpuFilter = opts.gpuFilter,
328
+ objectHovered = opts.objectHovered;
329
+ var featureTypes = this.meta.featureTypes;
330
+ var radiusScale = this.getRadiusScale();
331
+ var visConfig = this.config.visConfig;
332
+ var layerProps = {
333
+ lineWidthScale: visConfig.thickness,
334
+ elevationScale: visConfig.elevationScale,
335
+ pointRadiusScale: radiusScale,
336
+ lineMiterLimit: 4
337
+ };
338
+ var updateTriggers = _objectSpread(_objectSpread({}, this.getVisualChannelUpdateTriggers()), {}, {
339
+ getFilterValue: gpuFilter.filterValueUpdateTriggers
340
+ });
341
+ var defaultLayerProps = this.getDefaultDeckLayerProps(opts);
342
+ var opaOverwrite = {
343
+ opacity: visConfig.strokeOpacity
344
+ };
345
+ var pickable = this.hasInteractivity;
346
+ var hoveredObject = this.hasHoveredObject(objectHovered);
347
+ return [new _layers.GeoJsonLayer(_objectSpread(_objectSpread(_objectSpread(_objectSpread({}, defaultLayerProps), layerProps), data), {}, {
348
+ pickable: pickable,
349
+ highlightColor: _defaultSettings.HIGHLIGH_COLOR_3D,
350
+ autoHighlight: visConfig.enable3d && pickable,
351
+ stroked: visConfig.stroked,
352
+ filled: visConfig.filled,
353
+ extruded: visConfig.enable3d,
354
+ wireframe: visConfig.wireframe,
355
+ wrapLongitude: false,
356
+ lineMiterLimit: 2,
357
+ rounded: true,
358
+ radiusUnits: 'pixels',
359
+ lineWidthUnits: 'pixels',
360
+ updateTriggers: updateTriggers,
361
+ _subLayerProps: _objectSpread(_objectSpread(_objectSpread({}, featureTypes !== null && featureTypes !== void 0 && featureTypes.polygon ? {
332
362
  'polygons-stroke': opaOverwrite
333
- } : {}),
334
- ...(featureTypes !== null && featureTypes !== void 0 && featureTypes.line ? {
363
+ } : {}), featureTypes !== null && featureTypes !== void 0 && featureTypes.line ? {
335
364
  linestrings: opaOverwrite
336
- } : {}),
337
- ...(featureTypes !== null && featureTypes !== void 0 && featureTypes.point ? {
365
+ } : {}), featureTypes !== null && featureTypes !== void 0 && featureTypes.point ? {
338
366
  points: {
339
367
  lineOpacity: visConfig.strokeOpacity
340
368
  }
341
369
  } : {})
370
+ }))].concat((0, _toConsumableArray2["default"])(hoveredObject && !visConfig.enable3d ? [
371
+ // @ts-expect-error
372
+ new _layers.GeoJsonLayer(_objectSpread(_objectSpread(_objectSpread({}, this.getDefaultHoverLayerProps()), layerProps), {}, {
373
+ wrapLongitude: false,
374
+ data: [hoveredObject],
375
+ getLineWidth: data.getLineWidth,
376
+ getRadius: data.getRadius,
377
+ getElevation: data.getElevation,
378
+ getLineColor: this.config.highlightColor,
379
+ getFillColor: this.config.highlightColor,
380
+ // always draw outline
381
+ stroked: true,
382
+ filled: false
383
+ }))] : []));
384
+ }
385
+ }], [{
386
+ key: "type",
387
+ get: function get() {
388
+ return 'geojson';
389
+ }
390
+ }, {
391
+ key: "findDefaultLayerProps",
392
+ value: function findDefaultLayerProps(_ref4) {
393
+ var _this3 = this;
394
+ var label = _ref4.label,
395
+ _ref4$fields = _ref4.fields,
396
+ fields = _ref4$fields === void 0 ? [] : _ref4$fields;
397
+ var geojsonColumns = fields.filter(function (f) {
398
+ return f.type === 'geojson' && SUPPORTED_ANALYZER_TYPES[f.analyzerType];
399
+ }).map(function (f) {
400
+ return f.name;
401
+ });
402
+ var defaultColumns = {
403
+ geojson: (0, _uniq["default"])([].concat((0, _toConsumableArray2["default"])(_defaultSettings.GEOJSON_FIELDS.geojson), (0, _toConsumableArray2["default"])(geojsonColumns)))
404
+ };
405
+ var foundColumns = this.findDefaultColumnField(defaultColumns, fields);
406
+ if (!foundColumns || !foundColumns.length) {
407
+ return {
408
+ props: []
409
+ };
342
410
  }
343
- }), ...(hoveredObject && !visConfig.enable3d ? [
344
- // @ts-expect-error
345
- new _layers.GeoJsonLayer({
346
- ...this.getDefaultHoverLayerProps(),
347
- ...layerProps,
348
- wrapLongitude: false,
349
- data: [hoveredObject],
350
- getLineWidth: data.getLineWidth,
351
- getRadius: data.getRadius,
352
- getElevation: data.getElevation,
353
- getLineColor: this.config.highlightColor,
354
- getFillColor: this.config.highlightColor,
355
- // always draw outline
356
- stroked: true,
357
- filled: false
358
- })] : [])];
359
- }
360
- }
361
- exports.default = GeoJsonLayer;
362
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdW5pcSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3R5cGVBbmFseXplciIsIl9iYXNlTGF5ZXIiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9sYXllcnMiLCJfZ2VvanNvblV0aWxzIiwiX2dlb2pzb25MYXllckljb24iLCJfZGVmYXVsdFNldHRpbmdzIiwiX2xheWVyRmFjdG9yeSIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIlNVUFBPUlRFRF9BTkFMWVpFUl9UWVBFUyIsIkRBVEFfVFlQRVMiLCJHRU9NRVRSWSIsIkdFT01FVFJZX0ZST01fU1RSSU5HIiwiZ2VvanNvblZpc0NvbmZpZ3MiLCJleHBvcnRzIiwib3BhY2l0eSIsInN0cm9rZU9wYWNpdHkiLCJMQVlFUl9WSVNfQ09ORklHUyIsInByb3BlcnR5IiwidGhpY2tuZXNzIiwiZGVmYXVsdFZhbHVlIiwic3Ryb2tlQ29sb3IiLCJjb2xvclJhbmdlIiwic3Ryb2tlQ29sb3JSYW5nZSIsInJhZGl1cyIsInNpemVSYW5nZSIsInJhZGl1c1JhbmdlIiwiaGVpZ2h0UmFuZ2UiLCJlbGV2YXRpb25TY2FsZSIsImVuYWJsZUVsZXZhdGlvblpvb21GYWN0b3IiLCJzdHJva2VkIiwiZmlsbGVkIiwiZW5hYmxlM2QiLCJ3aXJlZnJhbWUiLCJnZW9Kc29uUmVxdWlyZWRDb2x1bW5zIiwiZmVhdHVyZUFjY2Vzc29yIiwiX3JlZiIsImdlb2pzb24iLCJkYyIsImQiLCJ2YWx1ZUF0IiwiaW5kZXgiLCJmaWVsZElkeCIsImRlZmF1bHRFbGV2YXRpb24iLCJkZWZhdWx0TGluZVdpZHRoIiwiZGVmYXVsdFJhZGl1cyIsIkdlb0pzb25MYXllciIsIkxheWVyIiwiY29uc3RydWN0b3IiLCJwcm9wcyIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJkYXRhVG9GZWF0dXJlIiwicmVnaXN0ZXJWaXNDb25maWciLCJnZXRQb3NpdGlvbkFjY2Vzc29yIiwiZGF0YUNvbnRhaW5lciIsImNvbmZpZyIsImNvbHVtbnMiLCJ0eXBlIiwibmFtZSIsImxheWVySWNvbiIsIkdlb2pzb25MYXllckljb24iLCJyZXF1aXJlZExheWVyQ29sdW1ucyIsInZpc3VhbENoYW5uZWxzIiwiY29sb3IiLCJhY2Nlc3NvciIsImNvbmRpdGlvbiIsInZpc0NvbmZpZyIsIm51bGxWYWx1ZSIsImdldEF0dHJpYnV0ZVZhbHVlIiwicHJvcGVydGllcyIsImZpbGxDb2xvciIsImZpZWxkIiwic2NhbGUiLCJkb21haW4iLCJyYW5nZSIsImtleSIsImNoYW5uZWxTY2FsZVR5cGUiLCJDSEFOTkVMX1NDQUxFUyIsImxpbmVDb2xvciIsInNpemUiLCJsaW5lV2lkdGgiLCJoZWlnaHQiLCJlbGV2YXRpb24iLCJmaW5kRGVmYXVsdExheWVyUHJvcHMiLCJfcmVmMiIsImxhYmVsIiwiZmllbGRzIiwiZ2VvanNvbkNvbHVtbnMiLCJmaWx0ZXIiLCJmIiwiYW5hbHl6ZXJUeXBlIiwibWFwIiwiZGVmYXVsdENvbHVtbnMiLCJ1bmlxIiwiR0VPSlNPTl9GSUVMRFMiLCJmb3VuZENvbHVtbnMiLCJmaW5kRGVmYXVsdENvbHVtbkZpZWxkIiwibGVuZ3RoIiwicmVwbGFjZSIsImlzVmlzaWJsZSIsImdldERlZmF1bHRMYXllckNvbmZpZyIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsImhlaWdodEZpZWxkIiwiaGVpZ2h0RG9tYWluIiwiaGVpZ2h0U2NhbGUiLCJyYWRpdXNGaWVsZCIsInJhZGl1c0RvbWFpbiIsInJhZGl1c1NjYWxlIiwic3Ryb2tlQ29sb3JGaWVsZCIsInN0cm9rZUNvbG9yRG9tYWluIiwic3Ryb2tlQ29sb3JTY2FsZSIsImdldEhvdmVyRGF0YSIsIm9iamVjdCIsInJvdyIsImNhbGN1bGF0ZURhdGFBdHRyaWJ1dGUiLCJfcmVmMyIsImdldFBvc2l0aW9uIiwiZmlsdGVyZWRJbmRleCIsImZvcm1hdExheWVyRGF0YSIsImRhdGFzZXRzIiwib2xkTGF5ZXJEYXRhIiwiZGF0YUlkIiwiZ3B1RmlsdGVyIiwiZGF0YSIsInVwZGF0ZURhdGEiLCJjdXN0b21GaWx0ZXJWYWx1ZUFjY2Vzc29yIiwiZmllbGRJbmRleCIsImluZGV4QWNjZXNzb3IiLCJkYXRhQWNjZXNzb3IiLCJhY2Nlc3NvcnMiLCJnZXRBdHRyaWJ1dGVBY2Nlc3NvcnMiLCJnZXRGaWx0ZXJWYWx1ZSIsImZpbHRlclZhbHVlQWNjZXNzb3IiLCJ1cGRhdGVMYXllck1ldGEiLCJnZXRGZWF0dXJlIiwiZ2V0R2VvanNvbkRhdGFNYXBzIiwiYm91bmRzIiwiZ2V0R2VvanNvbkJvdW5kcyIsImZlYXR1cmVUeXBlcyIsImdldEdlb2pzb25GZWF0dXJlVHlwZXMiLCJ1cGRhdGVNZXRhIiwic2V0SW5pdGlhbExheWVyQ29uZmlnIiwiX3JlZjQiLCJtZXRhIiwicG9seWdvbiIsInVwZGF0ZUxheWVyVmlzQ29uZmlnIiwiY29sb3JNYWtlciIsIm5leHQiLCJ2YWx1ZSIsInBvaW50IiwicmVuZGVyTGF5ZXIiLCJvcHRzIiwib2JqZWN0SG92ZXJlZCIsImdldFJhZGl1c1NjYWxlIiwibGF5ZXJQcm9wcyIsImxpbmVXaWR0aFNjYWxlIiwicG9pbnRSYWRpdXNTY2FsZSIsImxpbmVNaXRlckxpbWl0IiwidXBkYXRlVHJpZ2dlcnMiLCJnZXRWaXN1YWxDaGFubmVsVXBkYXRlVHJpZ2dlcnMiLCJmaWx0ZXJWYWx1ZVVwZGF0ZVRyaWdnZXJzIiwiZGVmYXVsdExheWVyUHJvcHMiLCJnZXREZWZhdWx0RGVja0xheWVyUHJvcHMiLCJvcGFPdmVyd3JpdGUiLCJwaWNrYWJsZSIsImhhc0ludGVyYWN0aXZpdHkiLCJob3ZlcmVkT2JqZWN0IiwiaGFzSG92ZXJlZE9iamVjdCIsIkRlY2tHTEdlb0pzb25MYXllciIsImhpZ2hsaWdodENvbG9yIiwiSElHSExJR0hfQ09MT1JfM0QiLCJhdXRvSGlnaGxpZ2h0IiwiZXh0cnVkZWQiLCJ3cmFwTG9uZ2l0dWRlIiwicm91bmRlZCIsInJhZGl1c1VuaXRzIiwibGluZVdpZHRoVW5pdHMiLCJfc3ViTGF5ZXJQcm9wcyIsImxpbmUiLCJsaW5lc3RyaW5ncyIsInBvaW50cyIsImxpbmVPcGFjaXR5IiwiZ2V0RGVmYXVsdEhvdmVyTGF5ZXJQcm9wcyIsImdldExpbmVXaWR0aCIsImdldFJhZGl1cyIsImdldEVsZXZhdGlvbiIsImdldExpbmVDb2xvciIsImdldEZpbGxDb2xvciJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9sYXllcnMvZ2VvanNvbi1sYXllci9nZW9qc29uLWxheWVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAyMiBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCB1bmlxIGZyb20gJ2xvZGFzaC91bmlxJztcbmltcG9ydCB7REFUQV9UWVBFU30gZnJvbSAndHlwZS1hbmFseXplcic7XG5cbmltcG9ydCBMYXllciwge1xuICBjb2xvck1ha2VyLFxuICBMYXllckJhc2VDb25maWcsXG4gIExheWVyQ29sb3JDb25maWcsXG4gIExheWVyQ29sdW1uLFxuICBMYXllckhlaWdodENvbmZpZyxcbiAgTGF5ZXJSYWRpdXNDb25maWcsXG4gIExheWVyU2l6ZUNvbmZpZyxcbiAgTGF5ZXJTdHJva2VDb2xvckNvbmZpZ1xufSBmcm9tICcuLi9iYXNlLWxheWVyJztcbmltcG9ydCB7R2VvSnNvbkxheWVyIGFzIERlY2tHTEdlb0pzb25MYXllcn0gZnJvbSAnQGRlY2suZ2wvbGF5ZXJzJztcbmltcG9ydCB7XG4gIGdldEdlb2pzb25EYXRhTWFwcyxcbiAgZ2V0R2VvanNvbkJvdW5kcyxcbiAgZ2V0R2VvanNvbkZlYXR1cmVUeXBlcyxcbiAgR2VvanNvbkRhdGFNYXBzXG59IGZyb20gJy4vZ2VvanNvbi11dGlscyc7XG5pbXBvcnQgR2VvanNvbkxheWVySWNvbiBmcm9tICcuL2dlb2pzb24tbGF5ZXItaWNvbic7XG5pbXBvcnQge0dFT0pTT05fRklFTERTLCBISUdITElHSF9DT0xPUl8zRCwgQ0hBTk5FTF9TQ0FMRVN9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzJztcbmltcG9ydCB7XG4gIExBWUVSX1ZJU19DT05GSUdTLFxuICBWaXNDb25maWdOdW1iZXIsXG4gIFZpc0NvbmZpZ0NvbG9yU2VsZWN0LFxuICBWaXNDb25maWdDb2xvclJhbmdlLFxuICBWaXNDb25maWdSYW5nZSxcbiAgVmlzQ29uZmlnQm9vbGVhblxufSBmcm9tICcuLi9sYXllci1mYWN0b3J5JztcbmltcG9ydCB7RGF0YUNvbnRhaW5lckludGVyZmFjZX0gZnJvbSAnLi4vLi4vdXRpbHMvdGFibGUtdXRpbHMvZGF0YS1jb250YWluZXItaW50ZXJmYWNlJztcbmltcG9ydCB7TWVyZ2UsIFJHQkNvbG9yfSBmcm9tICcuLi8uLi9yZWR1Y2Vycyc7XG5pbXBvcnQge0NvbG9yUmFuZ2V9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9jb2xvci1yYW5nZXMnO1xuaW1wb3J0IHtLZXBsZXJUYWJsZX0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuXG5jb25zdCBTVVBQT1JURURfQU5BTFlaRVJfVFlQRVMgPSB7XG4gIFtEQVRBX1RZUEVTLkdFT01FVFJZXTogdHJ1ZSxcbiAgW0RBVEFfVFlQRVMuR0VPTUVUUllfRlJPTV9TVFJJTkddOiB0cnVlXG59O1xuXG5leHBvcnQgY29uc3QgZ2VvanNvblZpc0NvbmZpZ3M6IHtcbiAgb3BhY2l0eTogJ29wYWNpdHknO1xuICBzdHJva2VPcGFjaXR5OiBWaXNDb25maWdOdW1iZXI7XG4gIHRoaWNrbmVzczogVmlzQ29uZmlnTnVtYmVyO1xuICBzdHJva2VDb2xvcjogJ3N0cm9rZUNvbG9yJztcbiAgY29sb3JSYW5nZTogJ2NvbG9yUmFuZ2UnO1xuICBzdHJva2VDb2xvclJhbmdlOiAnc3Ryb2tlQ29sb3JSYW5nZSc7XG4gIHJhZGl1czogJ3JhZGl1cyc7XG5cbiAgc2l6ZVJhbmdlOiAnc3Ryb2tlV2lkdGhSYW5nZSc7XG4gIHJhZGl1c1JhbmdlOiAncmFkaXVzUmFuZ2UnO1xuICBoZWlnaHRSYW5nZTogJ2VsZXZhdGlvblJhbmdlJztcbiAgZWxldmF0aW9uU2NhbGU6ICdlbGV2YXRpb25TY2FsZSc7XG4gIGVuYWJsZUVsZXZhdGlvblpvb21GYWN0b3I6ICdlbmFibGVFbGV2YXRpb25ab29tRmFjdG9yJztcbiAgc3Ryb2tlZDogJ3N0cm9rZWQnO1xuICBmaWxsZWQ6ICdmaWxsZWQnO1xuICBlbmFibGUzZDogJ2VuYWJsZTNkJztcbiAgd2lyZWZyYW1lOiAnd2lyZWZyYW1lJztcbn0gPSB7XG4gIG9wYWNpdHk6ICdvcGFjaXR5JyxcbiAgc3Ryb2tlT3BhY2l0eToge1xuICAgIC4uLkxBWUVSX1ZJU19DT05GSUdTLm9wYWNpdHksXG4gICAgcHJvcGVydHk6ICdzdHJva2VPcGFjaXR5J1xuICB9LFxuICB0aGlja25lc3M6IHtcbiAgICAuLi5MQVlFUl9WSVNfQ09ORklHUy50aGlja25lc3MsXG4gICAgZGVmYXVsdFZhbHVlOiAxXG4gIH0sXG4gIHN0cm9rZUNvbG9yOiAnc3Ryb2tlQ29sb3InLFxuICBjb2xvclJhbmdlOiAnY29sb3JSYW5nZScsXG4gIHN0cm9rZUNvbG9yUmFuZ2U6ICdzdHJva2VDb2xvclJhbmdlJyxcbiAgcmFkaXVzOiAncmFkaXVzJyxcblxuICBzaXplUmFuZ2U6ICdzdHJva2VXaWR0aFJhbmdlJyxcbiAgcmFkaXVzUmFuZ2U6ICdyYWRpdXNSYW5nZScsXG4gIGhlaWdodFJhbmdlOiAnZWxldmF0aW9uUmFuZ2UnLFxuICBlbGV2YXRpb25TY2FsZTogJ2VsZXZhdGlvblNjYWxlJyxcbiAgZW5hYmxlRWxldmF0aW9uWm9vbUZhY3RvcjogJ2VuYWJsZUVsZXZhdGlvblpvb21GYWN0b3InLFxuICBzdHJva2VkOiAnc3Ryb2tlZCcsXG4gIGZpbGxlZDogJ2ZpbGxlZCcsXG4gIGVuYWJsZTNkOiAnZW5hYmxlM2QnLFxuICB3aXJlZnJhbWU6ICd3aXJlZnJhbWUnXG59O1xuXG5leHBvcnQgdHlwZSBHZW9Kc29uVmlzQ29uZmlnU2V0dGluZ3MgPSB7XG4gIG9wYWNpdHk6IFZpc0NvbmZpZ051bWJlcjtcbiAgc3Ryb2tlT3BhY2l0eTogVmlzQ29uZmlnTnVtYmVyO1xuICB0aGlja25lc3M6IFZpc0NvbmZpZ051bWJlcjtcbiAgc3Ryb2tlQ29sb3I6IFZpc0NvbmZpZ0NvbG9yU2VsZWN0O1xuICBjb2xvclJhbmdlOiBWaXNDb25maWdDb2xvclJhbmdlO1xuICBzdHJva2VDb2xvclJhbmdlOiBWaXNDb25maWdDb2xvclJhbmdlO1xuICByYWRpdXM6IFZpc0NvbmZpZ051bWJlcjtcblxuICBzaXplUmFuZ2U6IFZpc0NvbmZpZ1JhbmdlO1xuICByYWRpdXNSYW5nZTogVmlzQ29uZmlnUmFuZ2U7XG4gIGhlaWdodFJhbmdlOiBWaXNDb25maWdSYW5nZTtcbiAgZWxldmF0aW9uU2NhbGU6IFZpc0NvbmZpZ051bWJlcjtcbiAgZW5hYmxlRWxldmF0aW9uWm9vbUZhY3RvcjogVmlzQ29uZmlnQm9vbGVhbjtcbiAgc3Ryb2tlZDogVmlzQ29uZmlnQm9vbGVhbjtcbiAgZmlsbGVkOiBWaXNDb25maWdCb29sZWFuO1xuICBlbmFibGUzZDogVmlzQ29uZmlnQm9vbGVhbjtcbiAgd2lyZWZyYW1lOiBWaXNDb25maWdCb29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgR2VvSnNvbkxheWVyQ29sdW1uc0NvbmZpZyA9IHtcbiAgZ2VvanNvbjogTGF5ZXJDb2x1bW47XG59O1xuXG5leHBvcnQgdHlwZSBHZW9Kc29uTGF5ZXJWaXNDb25maWcgPSB7XG4gIG9wYWNpdHk6IG51bWJlcjtcbiAgc3Ryb2tlT3BhY2l0eTogbnVtYmVyO1xuICB0aGlja25lc3M6IG51bWJlcjtcbiAgc3Ryb2tlQ29sb3I6IFJHQkNvbG9yO1xuICBjb2xvclJhbmdlOiBDb2xvclJhbmdlO1xuICBzdHJva2VDb2xvclJhbmdlOiBDb2xvclJhbmdlO1xuICByYWRpdXM6IG51bWJlcjtcblxuICBzaXplUmFuZ2U6IFtudW1iZXIsIG51bWJlcl07XG4gIHJhZGl1c1JhbmdlOiBbbnVtYmVyLCBudW1iZXJdO1xuICBoZWlnaHRSYW5nZTogW251bWJlciwgbnVtYmVyXTtcbiAgZWxldmF0aW9uU2NhbGU6IG51bWJlcjtcbiAgZW5hYmxlRWxldmF0aW9uWm9vbUZhY3RvcjogYm9vbGVhbjtcbiAgc3Ryb2tlZDogYm9vbGVhbjtcbiAgZmlsbGVkOiBib29sZWFuO1xuICBlbmFibGUzZDogYm9vbGVhbjtcbiAgd2lyZWZyYW1lOiBib29sZWFuO1xufTtcblxudHlwZSBHZW9Kc29uTGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnID0gTGF5ZXJDb2xvckNvbmZpZyAmXG4gIExheWVyU3Ryb2tlQ29sb3JDb25maWcgJlxuICBMYXllclNpemVDb25maWcgJlxuICBMYXllckhlaWdodENvbmZpZyAmXG4gIExheWVyUmFkaXVzQ29uZmlnO1xuZXhwb3J0IHR5cGUgR2VvSnNvbkxheWVyQ29uZmlnID0gTWVyZ2U8XG4gIExheWVyQmFzZUNvbmZpZyxcbiAge2NvbHVtbnM6IEdlb0pzb25MYXllckNvbHVtbnNDb25maWc7IHZpc0NvbmZpZzogR2VvSnNvbkxheWVyVmlzQ29uZmlnfVxuPiAmXG4gIEdlb0pzb25MYXllclZpc3VhbENoYW5uZWxDb25maWc7XG5cbmV4cG9ydCB0eXBlIEdlb0pzb25MYXllck1ldGEgPSB7XG4gIGZlYXR1cmVUeXBlcz86IHtwb2x5Z29uOiBib29sZWFuOyBwb2ludDogYm9vbGVhbjsgbGluZTogYm9vbGVhbn07XG4gIGZpeGVkUmFkaXVzPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZW9Kc29uUmVxdWlyZWRDb2x1bW5zOiBbJ2dlb2pzb24nXSA9IFsnZ2VvanNvbiddO1xuZXhwb3J0IGNvbnN0IGZlYXR1cmVBY2Nlc3NvciA9ICh7Z2VvanNvbn06IEdlb0pzb25MYXllckNvbHVtbnNDb25maWcpID0+IChcbiAgZGM6IERhdGFDb250YWluZXJJbnRlcmZhY2VcbikgPT4gZCA9PiBkYy52YWx1ZUF0KGQuaW5kZXgsIGdlb2pzb24uZmllbGRJZHgpO1xuXG4vLyBhY2Nlc3MgZmVhdHVyZSBwcm9wZXJ0aWVzIGZyb20gZ2VvanNvbiBzdWIgbGF5ZXJcbmV4cG9ydCBjb25zdCBkZWZhdWx0RWxldmF0aW9uID0gNTAwO1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRMaW5lV2lkdGggPSAxO1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRSYWRpdXMgPSAxO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHZW9Kc29uTGF5ZXIgZXh0ZW5kcyBMYXllciB7XG4gIGRlY2xhcmUgY29uZmlnOiBHZW9Kc29uTGF5ZXJDb25maWc7XG4gIGRlY2xhcmUgdmlzQ29uZmlnU2V0dGluZ3M6IEdlb0pzb25WaXNDb25maWdTZXR0aW5ncztcbiAgZGVjbGFyZSBtZXRhOiBHZW9Kc29uTGF5ZXJNZXRhO1xuICBkYXRhVG9GZWF0dXJlOiBHZW9qc29uRGF0YU1hcHM7XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB0aGlzLmRhdGFUb0ZlYXR1cmUgPSBbXTtcbiAgICB0aGlzLnJlZ2lzdGVyVmlzQ29uZmlnKGdlb2pzb25WaXNDb25maWdzKTtcbiAgICB0aGlzLmdldFBvc2l0aW9uQWNjZXNzb3IgPSAoZGF0YUNvbnRhaW5lcjogRGF0YUNvbnRhaW5lckludGVyZmFjZSkgPT5cbiAgICAgIGZlYXR1cmVBY2Nlc3Nvcih0aGlzLmNvbmZpZy5jb2x1bW5zKShkYXRhQ29udGFpbmVyKTtcbiAgfVxuXG4gIGdldCB0eXBlKCkge1xuICAgIHJldHVybiBHZW9Kc29uTGF5ZXIudHlwZTtcbiAgfVxuICBzdGF0aWMgZ2V0IHR5cGUoKTogJ2dlb2pzb24nIHtcbiAgICByZXR1cm4gJ2dlb2pzb24nO1xuICB9XG5cbiAgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ1BvbHlnb24nO1xuICB9XG5cbiAgZ2V0IGxheWVySWNvbigpIHtcbiAgICByZXR1cm4gR2VvanNvbkxheWVySWNvbjtcbiAgfVxuXG4gIGdldCByZXF1aXJlZExheWVyQ29sdW1ucygpIHtcbiAgICByZXR1cm4gZ2VvSnNvblJlcXVpcmVkQ29sdW1ucztcbiAgfVxuXG4gIGdldCB2aXN1YWxDaGFubmVscygpIHtcbiAgICBjb25zdCB2aXN1YWxDaGFubmVscyA9IHN1cGVyLnZpc3VhbENoYW5uZWxzO1xuICAgIHJldHVybiB7XG4gICAgICBjb2xvcjoge1xuICAgICAgICAuLi52aXN1YWxDaGFubmVscy5jb2xvcixcbiAgICAgICAgYWNjZXNzb3I6ICdnZXRGaWxsQ29sb3InLFxuICAgICAgICBjb25kaXRpb246IGNvbmZpZyA9PiBjb25maWcudmlzQ29uZmlnLmZpbGxlZCxcbiAgICAgICAgbnVsbFZhbHVlOiB2aXN1YWxDaGFubmVscy5jb2xvci5udWxsVmFsdWUsXG4gICAgICAgIGdldEF0dHJpYnV0ZVZhbHVlOiBjb25maWcgPT4gZCA9PiBkLnByb3BlcnRpZXMuZmlsbENvbG9yIHx8IGNvbmZpZy5jb2xvcixcbiAgICAgICAgLy8gdXNlZCB0aGlzIHRvIGdldCB1cGRhdGVUcmlnZ2Vyc1xuICAgICAgICBkZWZhdWx0VmFsdWU6IGNvbmZpZyA9PiBjb25maWcuY29sb3JcbiAgICAgIH0sXG4gICAgICBzdHJva2VDb2xvcjoge1xuICAgICAgICBwcm9wZXJ0eTogJ3N0cm9rZUNvbG9yJyxcbiAgICAgICAgZmllbGQ6ICdzdHJva2VDb2xvckZpZWxkJyxcbiAgICAgICAgc2NhbGU6ICdzdHJva2VDb2xvclNjYWxlJyxcbiAgICAgICAgZG9tYWluOiAnc3Ryb2tlQ29sb3JEb21haW4nLFxuICAgICAgICByYW5nZTogJ3N0cm9rZUNvbG9yUmFuZ2UnLFxuICAgICAgICBrZXk6ICdzdHJva2VDb2xvcicsXG4gICAgICAgIGNoYW5uZWxTY2FsZVR5cGU6IENIQU5ORUxfU0NBTEVTLmNvbG9yLFxuICAgICAgICBhY2Nlc3NvcjogJ2dldExpbmVDb2xvcicsXG4gICAgICAgIGNvbmRpdGlvbjogY29uZmlnID0+IGNvbmZpZy52aXNDb25maWcuc3Ryb2tlZCxcbiAgICAgICAgbnVsbFZhbHVlOiB2aXN1YWxDaGFubmVscy5jb2xvci5udWxsVmFsdWUsXG4gICAgICAgIGdldEF0dHJpYnV0ZVZhbHVlOiBjb25maWcgPT4gZCA9PlxuICAgICAgICAgIGQucHJvcGVydGllcy5saW5lQ29sb3IgfHwgY29uZmlnLnZpc0NvbmZpZy5zdHJva2VDb2xvciB8fCBjb25maWcuY29sb3IsXG4gICAgICAgIC8vIHVzZWQgdGhpcyB0byBnZXQgdXBkYXRlVHJpZ2dlcnNcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBjb25maWcgPT4gY29uZmlnLnZpc0NvbmZpZy5zdHJva2VDb2xvciB8fCBjb25maWcuY29sb3JcbiAgICAgIH0sXG4gICAgICBzaXplOiB7XG4gICAgICAgIC4uLnZpc3VhbENoYW5uZWxzLnNpemUsXG4gICAgICAgIHByb3BlcnR5OiAnc3Ryb2tlJyxcbiAgICAgICAgYWNjZXNzb3I6ICdnZXRMaW5lV2lkdGgnLFxuICAgICAgICBjb25kaXRpb246IGNvbmZpZyA9PiBjb25maWcudmlzQ29uZmlnLnN0cm9rZWQsXG4gICAgICAgIG51bGxWYWx1ZTogMCxcbiAgICAgICAgZ2V0QXR0cmlidXRlVmFsdWU6ICgpID0+IGQgPT4gZC5wcm9wZXJ0aWVzLmxpbmVXaWR0aCB8fCBkZWZhdWx0TGluZVdpZHRoXG4gICAgICB9LFxuICAgICAgaGVpZ2h0OiB7XG4gICAgICAgIHByb3BlcnR5OiAnaGVpZ2h0JyxcbiAgICAgICAgZmllbGQ6ICdoZWlnaHRGaWVsZCcsXG4gICAgICAgIHNjYWxlOiAnaGVpZ2h0U2NhbGUnLFxuICAgICAgICBkb21haW46ICdoZWlnaHREb21haW4nLFxuICAgICAgICByYW5nZTogJ2hlaWdodFJhbmdlJyxcbiAgICAgICAga2V5OiAnaGVpZ2h0JyxcbiAgICAgICAgY2hhbm5lbFNjYWxlVHlwZTogQ0hBTk5FTF9TQ0FMRVMuc2l6ZSxcbiAgICAgICAgYWNjZXNzb3I6ICdnZXRFbGV2YXRpb24nLFxuICAgICAgICBjb25kaXRpb246IGNvbmZpZyA9PiBjb25maWcudmlzQ29uZmlnLmVuYWJsZTNkLFxuICAgICAgICBudWxsVmFsdWU6IDAsXG4gICAgICAgIGdldEF0dHJpYnV0ZVZhbHVlOiAoKSA9PiBkID0+IGQucHJvcGVydGllcy5lbGV2YXRpb24gfHwgZGVmYXVsdEVsZXZhdGlvblxuICAgICAgfSxcbiAgICAgIHJhZGl1czoge1xuICAgICAgICBwcm9wZXJ0eTogJ3JhZGl1cycsXG4gICAgICAgIGZpZWxkOiAncmFkaXVzRmllbGQnLFxuICAgICAgICBzY2FsZTogJ3JhZGl1c1NjYWxlJyxcbiAgICAgICAgZG9tYWluOiAncmFkaXVzRG9tYWluJyxcbiAgICAgICAgcmFuZ2U6ICdyYWRpdXNSYW5nZScsXG4gICAgICAgIGtleTogJ3JhZGl1cycsXG4gICAgICAgIGNoYW5uZWxTY2FsZVR5cGU6IENIQU5ORUxfU0NBTEVTLnJhZGl1cyxcbiAgICAgICAgYWNjZXNzb3I6ICdnZXRSYWRpdXMnLFxuICAgICAgICBudWxsVmFsdWU6IDAsXG4gICAgICAgIGdldEF0dHJpYnV0ZVZhbHVlOiAoKSA9PiBkID0+IGQucHJvcGVydGllcy5yYWRpdXMgfHwgZGVmYXVsdFJhZGl1c1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgZmluZERlZmF1bHRMYXllclByb3BzKHtsYWJlbCwgZmllbGRzID0gW119OiBLZXBsZXJUYWJsZSkge1xuICAgIGNvbnN0IGdlb2pzb25Db2x1bW5zID0gZmllbGRzXG4gICAgICAuZmlsdGVyKGYgPT4gZi50eXBlID09PSAnZ2VvanNvbicgJiYgU1VQUE9SVEVEX0FOQUxZWkVSX1RZUEVTW2YuYW5hbHl6ZXJUeXBlXSlcbiAgICAgIC5tYXAoZiA9PiBmLm5hbWUpO1xuXG4gICAgY29uc3QgZGVmYXVsdENvbHVtbnMgPSB7XG4gICAgICBnZW9qc29uOiB1bmlxKFsuLi5HRU9KU09OX0ZJRUxEUy5nZW9qc29uLCAuLi5nZW9qc29uQ29sdW1uc10pXG4gICAgfTtcblxuICAgIGNvbnN0IGZvdW5kQ29sdW1ucyA9IHRoaXMuZmluZERlZmF1bHRDb2x1bW5GaWVsZChkZWZhdWx0Q29sdW1ucywgZmllbGRzKTtcbiAgICBpZiAoIWZvdW5kQ29sdW1ucyB8fCAhZm91bmRDb2x1bW5zLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHtwcm9wczogW119O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBwcm9wczogZm91bmRDb2x1bW5zLm1hcChjb2x1bW5zID0+ICh7XG4gICAgICAgIGxhYmVsOiAodHlwZW9mIGxhYmVsID09PSAnc3RyaW5nJyAmJiBsYWJlbC5yZXBsYWNlKC9cXC5bXi8uXSskLywgJycpKSB8fCB0aGlzLnR5cGUsXG4gICAgICAgIGNvbHVtbnMsXG4gICAgICAgIGlzVmlzaWJsZTogdHJ1ZVxuICAgICAgfSkpXG4gICAgfTtcbiAgfVxuXG4gIGdldERlZmF1bHRMYXllckNvbmZpZyhwcm9wcyA9IHt9KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN1cGVyLmdldERlZmF1bHRMYXllckNvbmZpZyhwcm9wcyksXG5cbiAgICAgIC8vIGFkZCBoZWlnaHQgdmlzdWFsIGNoYW5uZWxcbiAgICAgIGhlaWdodEZpZWxkOiBudWxsLFxuICAgICAgaGVpZ2h0RG9tYWluOiBbMCwgMV0sXG4gICAgICBoZWlnaHRTY2FsZTogJ2xpbmVhcicsXG5cbiAgICAgIC8vIGFkZCByYWRpdXMgdmlzdWFsIGNoYW5uZWxcbiAgICAgIHJhZGl1c0ZpZWxkOiBudWxsLFxuICAgICAgcmFkaXVzRG9tYWluOiBbMCwgMV0sXG4gICAgICByYWRpdXNTY2FsZTogJ2xpbmVhcicsXG5cbiAgICAgIC8vIGFkZCBzdHJva2UgY29sb3IgdmlzdWFsIGNoYW5uZWxcbiAgICAgIHN0cm9rZUNvbG9yRmllbGQ6IG51bGwsXG4gICAgICBzdHJva2VDb2xvckRvbWFpbjogWzAsIDFdLFxuICAgICAgc3Ryb2tlQ29sb3JTY2FsZTogJ3F1YW50aWxlJ1xuICAgIH07XG4gIH1cblxuICBnZXRIb3ZlckRhdGEob2JqZWN0LCBkYXRhQ29udGFpbmVyKSB7XG4gICAgLy8gaW5kZXggb2YgZGF0YUNvbnRhaW5lciBpcyBzYXZlZCB0byBmZWF0dXJlLnByb3BlcnRpZXNcbiAgICByZXR1cm4gZGF0YUNvbnRhaW5lci5yb3cob2JqZWN0LnByb3BlcnRpZXMuaW5kZXgpO1xuICB9XG5cbiAgY2FsY3VsYXRlRGF0YUF0dHJpYnV0ZSh7ZGF0YUNvbnRhaW5lciwgZmlsdGVyZWRJbmRleH0sIGdldFBvc2l0aW9uKSB7XG4gICAgcmV0dXJuIGZpbHRlcmVkSW5kZXgubWFwKGkgPT4gdGhpcy5kYXRhVG9GZWF0dXJlW2ldKS5maWx0ZXIoZCA9PiBkKTtcbiAgfVxuXG4gIGZvcm1hdExheWVyRGF0YShkYXRhc2V0cywgb2xkTGF5ZXJEYXRhKSB7XG4gICAgaWYgKHRoaXMuY29uZmlnLmRhdGFJZCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBjb25zdCB7Z3B1RmlsdGVyLCBkYXRhQ29udGFpbmVyfSA9IGRhdGFzZXRzW3RoaXMuY29uZmlnLmRhdGFJZF07XG4gICAgY29uc3Qge2RhdGF9ID0gdGhpcy51cGRhdGVEYXRhKGRhdGFzZXRzLCBvbGRMYXllckRhdGEpO1xuXG4gICAgY29uc3QgY3VzdG9tRmlsdGVyVmFsdWVBY2Nlc3NvciA9IChkYywgZCwgZmllbGRJbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIGRjLnZhbHVlQXQoZC5wcm9wZXJ0aWVzLmluZGV4LCBmaWVsZEluZGV4KTtcbiAgICB9O1xuICAgIGNvbnN0IGluZGV4QWNjZXNzb3IgPSBmID0+IGYucHJvcGVydGllcy5pbmRleDtcblxuICAgIGNvbnN0IGRhdGFBY2Nlc3NvciA9IGRjID0+IGQgPT4gKHtpbmRleDogZC5wcm9wZXJ0aWVzLmluZGV4fSk7XG4gICAgY29uc3QgYWNjZXNzb3JzID0gdGhpcy5nZXRBdHRyaWJ1dGVBY2Nlc3NvcnMoe2RhdGFBY2Nlc3NvciwgZGF0YUNvbnRhaW5lcn0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGEsXG4gICAgICBnZXRGaWx0ZXJWYWx1ZTogZ3B1RmlsdGVyLmZpbHRlclZhbHVlQWNjZXNzb3IoZGF0YUNvbnRhaW5lcikoXG4gICAgICAgIGluZGV4QWNjZXNzb3IsXG4gICAgICAgIGN1c3RvbUZpbHRlclZhbHVlQWNjZXNzb3JcbiAgICAgICksXG4gICAgICAuLi5hY2Nlc3NvcnNcbiAgICB9O1xuICB9XG5cbiAgdXBkYXRlTGF5ZXJNZXRhKGRhdGFDb250YWluZXIpIHtcbiAgICBjb25zdCBnZXRGZWF0dXJlID0gdGhpcy5nZXRQb3NpdGlvbkFjY2Vzc29yKGRhdGFDb250YWluZXIpO1xuICAgIHRoaXMuZGF0YVRvRmVhdHVyZSA9IGdldEdlb2pzb25EYXRhTWFwcyhkYXRhQ29udGFpbmVyLCBnZXRGZWF0dXJlKTtcblxuICAgIC8vIGdldCBib3VuZHMgZnJvbSBmZWF0dXJlc1xuICAgIGNvbnN0IGJvdW5kcyA9IGdldEdlb2pzb25Cb3VuZHModGhpcy5kYXRhVG9GZWF0dXJlKTtcblxuICAgIC8vIGtlZXAgYSByZWNvcmQgb2Ygd2hhdCB0eXBlIG9mIGdlb21ldHJ5IHRoZSBjb2xsZWN0aW9uIGhhc1xuICAgIGNvbnN0IGZlYXR1cmVUeXBlcyA9IGdldEdlb2pzb25GZWF0dXJlVHlwZXModGhpcy5kYXRhVG9GZWF0dXJlKTtcblxuICAgIHRoaXMudXBkYXRlTWV0YSh7Ym91bmRzLCBmZWF0dXJlVHlwZXN9KTtcbiAgfVxuXG4gIHNldEluaXRpYWxMYXllckNvbmZpZyh7ZGF0YUNvbnRhaW5lcn0pIHtcbiAgICB0aGlzLnVwZGF0ZUxheWVyTWV0YShkYXRhQ29udGFpbmVyKTtcblxuICAgIGNvbnN0IHtmZWF0dXJlVHlwZXN9ID0gdGhpcy5tZXRhO1xuICAgIC8vIGRlZmF1bHQgc2V0dGluZ3MgaXMgc3Ryb2tlOiB0cnVlLCBmaWxsZWQ6IGZhbHNlXG4gICAgaWYgKGZlYXR1cmVUeXBlcyAmJiBmZWF0dXJlVHlwZXMucG9seWdvbikge1xuICAgICAgLy8gc2V0IGJvdGggZmlsbCBhbmQgc3Ryb2tlIHRvIHRydWVcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUxheWVyVmlzQ29uZmlnKHtcbiAgICAgICAgZmlsbGVkOiB0cnVlLFxuICAgICAgICBzdHJva2VkOiB0cnVlLFxuICAgICAgICBzdHJva2VDb2xvcjogY29sb3JNYWtlci5uZXh0KCkudmFsdWVcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoZmVhdHVyZVR5cGVzICYmIGZlYXR1cmVUeXBlcy5wb2ludCkge1xuICAgICAgLy8gc2V0IGZpbGwgdG8gdHJ1ZSBpZiBkZXRlY3QgcG9pbnRcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUxheWVyVmlzQ29uZmlnKHtmaWxsZWQ6IHRydWUsIHN0cm9rZWQ6IGZhbHNlfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICByZW5kZXJMYXllcihvcHRzKSB7XG4gICAgY29uc3Qge2RhdGEsIGdwdUZpbHRlciwgb2JqZWN0SG92ZXJlZH0gPSBvcHRzO1xuXG4gICAgY29uc3Qge2ZlYXR1cmVUeXBlc30gPSB0aGlzLm1ldGE7XG4gICAgY29uc3QgcmFkaXVzU2NhbGUgPSB0aGlzLmdldFJhZGl1c1NjYWxlKCk7XG4gICAgY29uc3Qge3Zpc0NvbmZpZ30gPSB0aGlzLmNvbmZpZztcblxuICAgIGNvbnN0IGxheWVyUHJvcHMgPSB7XG4gICAgICBsaW5lV2lkdGhTY2FsZTogdmlzQ29uZmlnLnRoaWNrbmVzcyxcbiAgICAgIGVsZXZhdGlvblNjYWxlOiB2aXNDb25maWcuZWxldmF0aW9uU2NhbGUsXG4gICAgICBwb2ludFJhZGl1c1NjYWxlOiByYWRpdXNTY2FsZSxcbiAgICAgIGxpbmVNaXRlckxpbWl0OiA0XG4gICAgfTtcblxuICAgIGNvbnN0IHVwZGF0ZVRyaWdnZXJzID0ge1xuICAgICAgLi4udGhpcy5nZXRWaXN1YWxDaGFubmVsVXBkYXRlVHJpZ2dlcnMoKSxcbiAgICAgIGdldEZpbHRlclZhbHVlOiBncHVGaWx0ZXIuZmlsdGVyVmFsdWVVcGRhdGVUcmlnZ2Vyc1xuICAgIH07XG5cbiAgICBjb25zdCBkZWZhdWx0TGF5ZXJQcm9wcyA9IHRoaXMuZ2V0RGVmYXVsdERlY2tMYXllclByb3BzKG9wdHMpO1xuICAgIGNvbnN0IG9wYU92ZXJ3cml0ZSA9IHtcbiAgICAgIG9wYWNpdHk6IHZpc0NvbmZpZy5zdHJva2VPcGFjaXR5XG4gICAgfTtcblxuICAgIGNvbnN0IHBpY2thYmxlID0gdGhpcy5oYXNJbnRlcmFjdGl2aXR5O1xuICAgIGNvbnN0IGhvdmVyZWRPYmplY3QgPSB0aGlzLmhhc0hvdmVyZWRPYmplY3Qob2JqZWN0SG92ZXJlZCk7XG5cbiAgICByZXR1cm4gW1xuICAgICAgbmV3IERlY2tHTEdlb0pzb25MYXllcih7XG4gICAgICAgIC4uLmRlZmF1bHRMYXllclByb3BzLFxuICAgICAgICAuLi5sYXllclByb3BzLFxuICAgICAgICAuLi5kYXRhLFxuICAgICAgICBwaWNrYWJsZSxcbiAgICAgICAgaGlnaGxpZ2h0Q29sb3I6IEhJR0hMSUdIX0NPTE9SXzNELFxuICAgICAgICBhdXRvSGlnaGxpZ2h0OiB2aXNDb25maWcuZW5hYmxlM2QgJiYgcGlja2FibGUsXG4gICAgICAgIHN0cm9rZWQ6IHZpc0NvbmZpZy5zdHJva2VkLFxuICAgICAgICBmaWxsZWQ6IHZpc0NvbmZpZy5maWxsZWQsXG4gICAgICAgIGV4dHJ1ZGVkOiB2aXNDb25maWcuZW5hYmxlM2QsXG4gICAgICAgIHdpcmVmcmFtZTogdmlzQ29uZmlnLndpcmVmcmFtZSxcbiAgICAgICAgd3JhcExvbmdpdHVkZTogZmFsc2UsXG4gICAgICAgIGxpbmVNaXRlckxpbWl0OiAyLFxuICAgICAgICByb3VuZGVkOiB0cnVlLFxuICAgICAgICByYWRpdXNVbml0czogJ3BpeGVscycsXG4gICAgICAgIGxpbmVXaWR0aFVuaXRzOiAncGl4ZWxzJyxcbiAgICAgICAgdXBkYXRlVHJpZ2dlcnMsXG4gICAgICAgIF9zdWJMYXllclByb3BzOiB7XG4gICAgICAgICAgLi4uKGZlYXR1cmVUeXBlcz8ucG9seWdvbiA/IHsncG9seWdvbnMtc3Ryb2tlJzogb3BhT3ZlcndyaXRlfSA6IHt9KSxcbiAgICAgICAgICAuLi4oZmVhdHVyZVR5cGVzPy5saW5lID8ge2xpbmVzdHJpbmdzOiBvcGFPdmVyd3JpdGV9IDoge30pLFxuICAgICAgICAgIC4uLihmZWF0dXJlVHlwZXM/LnBvaW50XG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBwb2ludHM6IHtcbiAgICAgICAgICAgICAgICAgIGxpbmVPcGFjaXR5OiB2aXNDb25maWcuc3Ryb2tlT3BhY2l0eVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7fSlcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICAuLi4oaG92ZXJlZE9iamVjdCAmJiAhdmlzQ29uZmlnLmVuYWJsZTNkXG4gICAgICAgID8gW1xuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgICAgbmV3IERlY2tHTEdlb0pzb25MYXllcih7XG4gICAgICAgICAgICAgIC4uLnRoaXMuZ2V0RGVmYXVsdEhvdmVyTGF5ZXJQcm9wcygpLFxuICAgICAgICAgICAgICAuLi5sYXllclByb3BzLFxuICAgICAgICAgICAgICB3cmFwTG9uZ2l0dWRlOiBmYWxzZSxcbiAgICAgICAgICAgICAgZGF0YTogW2hvdmVyZWRPYmplY3RdLFxuICAgICAgICAgICAgICBnZXRMaW5lV2lkdGg6IGRhdGEuZ2V0TGluZVdpZHRoLFxuICAgICAgICAgICAgICBnZXRSYWRpdXM6IGRhdGEuZ2V0UmFkaXVzLFxuICAgICAgICAgICAgICBnZXRFbGV2YXRpb246IGRhdGEuZ2V0RWxldmF0aW9uLFxuICAgICAgICAgICAgICBnZXRMaW5lQ29sb3I6IHRoaXMuY29uZmlnLmhpZ2hsaWdodENvbG9yLFxuICAgICAgICAgICAgICBnZXRGaWxsQ29sb3I6IHRoaXMuY29uZmlnLmhpZ2hsaWdodENvbG9yLFxuICAgICAgICAgICAgICAvLyBhbHdheXMgZHJhdyBvdXRsaW5lXG4gICAgICAgICAgICAgIHN0cm9rZWQ6IHRydWUsXG4gICAgICAgICAgICAgIGZpbGxlZDogZmFsc2VcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXVxuICAgICAgICA6IFtdKVxuICAgIF07XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFvQkEsSUFBQUEsS0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsYUFBQSxHQUFBRCxPQUFBO0FBRUEsSUFBQUUsVUFBQSxHQUFBQyx1QkFBQSxDQUFBSCxPQUFBO0FBVUEsSUFBQUksT0FBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssYUFBQSxHQUFBTCxPQUFBO0FBTUEsSUFBQU0saUJBQUEsR0FBQVAsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFPLGdCQUFBLEdBQUFQLE9BQUE7QUFDQSxJQUFBUSxhQUFBLEdBQUFSLE9BQUE7QUFPMEIsU0FBQVMseUJBQUFDLENBQUEsNkJBQUFDLE9BQUEsbUJBQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEsQ0FBQUMsQ0FBQSxXQUFBQSxDQUFBLEdBQUFHLENBQUEsR0FBQUQsQ0FBQSxLQUFBRixDQUFBO0FBQUEsU0FBQVAsd0JBQUFPLENBQUEsRUFBQUUsQ0FBQSxTQUFBQSxDQUFBLElBQUFGLENBQUEsSUFBQUEsQ0FBQSxDQUFBSSxVQUFBLFNBQUFKLENBQUEsZUFBQUEsQ0FBQSx1QkFBQUEsQ0FBQSx5QkFBQUEsQ0FB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
411
+ return {
412
+ props: foundColumns.map(function (columns) {
413
+ return {
414
+ label: typeof label === 'string' && label.replace(/\.[^/.]+$/, '') || _this3.type,
415
+ columns: columns,
416
+ isVisible: true
417
+ };
418
+ })
419
+ };
420
+ }
421
+ }]);
422
+ }(_baseLayer["default"]);
423
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdW5pcSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3R5cGVBbmFseXplciIsIl9iYXNlTGF5ZXIiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9sYXllcnMiLCJfZ2VvanNvblV0aWxzIiwiX2dlb2pzb25MYXllckljb24iLCJfZGVmYXVsdFNldHRpbmdzIiwiX2xheWVyRmFjdG9yeSIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIl9jYWxsU3VwZXIiLCJvIiwiX2dldFByb3RvdHlwZU9mMiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiY29uc3RydWN0b3IiLCJhcHBseSIsIkJvb2xlYW4iLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIiwiX3N1cGVyUHJvcEdldCIsInAiLCJfZ2V0MiIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZW51bWVyYWJsZSIsInB1c2giLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsIlNVUFBPUlRFRF9BTkFMWVpFUl9UWVBFUyIsIkRBVEFfVFlQRVMiLCJHRU9NRVRSWSIsIkdFT01FVFJZX0ZST01fU1RSSU5HIiwiZ2VvanNvblZpc0NvbmZpZ3MiLCJleHBvcnRzIiwib3BhY2l0eSIsInN0cm9rZU9wYWNpdHkiLCJMQVlFUl9WSVNfQ09ORklHUyIsInByb3BlcnR5IiwidGhpY2tuZXNzIiwiZGVmYXVsdFZhbHVlIiwic3Ryb2tlQ29sb3IiLCJjb2xvclJhbmdlIiwic3Ryb2tlQ29sb3JSYW5nZSIsInJhZGl1cyIsInNpemVSYW5nZSIsInJhZGl1c1JhbmdlIiwiaGVpZ2h0UmFuZ2UiLCJlbGV2YXRpb25TY2FsZSIsImVuYWJsZUVsZXZhdGlvblpvb21GYWN0b3IiLCJzdHJva2VkIiwiZmlsbGVkIiwiZW5hYmxlM2QiLCJ3aXJlZnJhbWUiLCJnZW9Kc29uUmVxdWlyZWRDb2x1bW5zIiwiZmVhdHVyZUFjY2Vzc29yIiwiX3JlZiIsImdlb2pzb24iLCJkYyIsImQiLCJ2YWx1ZUF0IiwiaW5kZXgiLCJmaWVsZElkeCIsImRlZmF1bHRFbGV2YXRpb24iLCJkZWZhdWx0TGluZVdpZHRoIiwiZGVmYXVsdFJhZGl1cyIsIkdlb0pzb25MYXllciIsIl9MYXllciIsInByb3BzIiwiX3RoaXMiLCJfY2xhc3NDYWxsQ2hlY2syIiwiZGF0YVRvRmVhdHVyZSIsInJlZ2lzdGVyVmlzQ29uZmlnIiwiZ2V0UG9zaXRpb25BY2Nlc3NvciIsImRhdGFDb250YWluZXIiLCJjb25maWciLCJjb2x1bW5zIiwiX2luaGVyaXRzMiIsIl9jcmVhdGVDbGFzczIiLCJrZXkiLCJ0eXBlIiwiR2VvanNvbkxheWVySWNvbiIsInZpc3VhbENoYW5uZWxzIiwiY29sb3IiLCJhY2Nlc3NvciIsImNvbmRpdGlvbiIsInZpc0NvbmZpZyIsIm51bGxWYWx1ZSIsImdldEF0dHJpYnV0ZVZhbHVlIiwicHJvcGVydGllcyIsImZpbGxDb2xvciIsImZpZWxkIiwic2NhbGUiLCJkb21haW4iLCJyYW5nZSIsImNoYW5uZWxTY2FsZVR5cGUiLCJDSEFOTkVMX1NDQUxFUyIsImxpbmVDb2xvciIsInNpemUiLCJsaW5lV2lkdGgiLCJoZWlnaHQiLCJlbGV2YXRpb24iLCJ2YWx1ZSIsImdldERlZmF1bHRMYXllckNvbmZpZyIsInVuZGVmaW5lZCIsImhlaWdodEZpZWxkIiwiaGVpZ2h0RG9tYWluIiwiaGVpZ2h0U2NhbGUiLCJyYWRpdXNGaWVsZCIsInJhZGl1c0RvbWFpbiIsInJhZGl1c1NjYWxlIiwic3Ryb2tlQ29sb3JGaWVsZCIsInN0cm9rZUNvbG9yRG9tYWluIiwic3Ryb2tlQ29sb3JTY2FsZSIsImdldEhvdmVyRGF0YSIsIm9iamVjdCIsInJvdyIsImNhbGN1bGF0ZURhdGFBdHRyaWJ1dGUiLCJfcmVmMiIsImdldFBvc2l0aW9uIiwiX3RoaXMyIiwiZmlsdGVyZWRJbmRleCIsIm1hcCIsImZvcm1hdExheWVyRGF0YSIsImRhdGFzZXRzIiwib2xkTGF5ZXJEYXRhIiwiZGF0YUlkIiwiX2RhdGFzZXRzJHRoaXMkY29uZmlnIiwiZ3B1RmlsdGVyIiwiX3RoaXMkdXBkYXRlRGF0YSIsInVwZGF0ZURhdGEiLCJkYXRhIiwiY3VzdG9tRmlsdGVyVmFsdWVBY2Nlc3NvciIsImZpZWxkSW5kZXgiLCJpbmRleEFjY2Vzc29yIiwiZiIsImRhdGFBY2Nlc3NvciIsImFjY2Vzc29ycyIsImdldEF0dHJpYnV0ZUFjY2Vzc29ycyIsImdldEZpbHRlclZhbHVlIiwiZmlsdGVyVmFsdWVBY2Nlc3NvciIsInVwZGF0ZUxheWVyTWV0YSIsImdldEZlYXR1cmUiLCJnZXRHZW9qc29uRGF0YU1hcHMiLCJib3VuZHMiLCJnZXRHZW9qc29uQm91bmRzIiwiZmVhdHVyZVR5cGVzIiwiZ2V0R2VvanNvbkZlYXR1cmVUeXBlcyIsInVwZGF0ZU1ldGEiLCJzZXRJbml0aWFsTGF5ZXJDb25maWciLCJfcmVmMyIsIm1ldGEiLCJwb2x5Z29uIiwidXBkYXRlTGF5ZXJWaXNDb25maWciLCJjb2xvck1ha2VyIiwibmV4dCIsInBvaW50IiwicmVuZGVyTGF5ZXIiLCJvcHRzIiwib2JqZWN0SG92ZXJlZCIsImdldFJhZGl1c1NjYWxlIiwibGF5ZXJQcm9wcyIsImxpbmVXaWR0aFNjYWxlIiwicG9pbnRSYWRpdXNTY2FsZSIsImxpbmVNaXRlckxpbWl0IiwidXBkYXRlVHJpZ2dlcnMiLCJnZXRWaXN1YWxDaGFubmVsVXBkYXRlVHJpZ2dlcnMiLCJmaWx0ZXJWYWx1ZVVwZGF0ZVRyaWdnZXJzIiwiZGVmYXVsdExheWVyUHJvcHMiLCJnZXREZWZhdWx0RGVja0xheWVyUHJvcHMiLCJvcGFPdmVyd3JpdGUiLCJwaWNrYWJsZSIsImhhc0ludGVyYWN0aXZpdHkiLCJob3ZlcmVkT2JqZWN0IiwiaGFzSG92ZXJlZE9iamVjdCIsIkRlY2tHTEdlb0pzb25MYXllciIsImhpZ2hsaWdodENvbG9yIiwiSElHSExJR0hfQ09MT1JfM0QiLCJhdXRvSGlnaGxpZ2h0IiwiZXh0cnVkZWQiLCJ3cmFwTG9uZ2l0dWRlIiwicm91bmRlZCIsInJhZGl1c1VuaXRzIiwibGluZVdpZHRoVW5pdHMiLCJfc3ViTGF5ZXJQcm9wcyIsImxpbmUiLCJsaW5lc3RyaW5ncyIsInBvaW50cyIsImxpbmVPcGFjaXR5IiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsImdldERlZmF1bHRIb3ZlckxheWVyUHJvcHMiLCJnZXRMaW5lV2lkdGgiLCJnZXRSYWRpdXMiLCJnZXRFbGV2YXRpb24iLCJnZXRMaW5lQ29sb3IiLCJnZXRGaWxsQ29sb3IiLCJmaW5kRGVmYXVsdExheWVyUHJvcHMiLCJfcmVmNCIsIl90aGlzMyIsImxhYmVsIiwiX3JlZjQkZmllbGRzIiwiZmllbGRzIiwiZ2VvanNvbkNvbHVtbnMiLCJhbmFseXplclR5cGUiLCJuYW1lIiwiZGVmYXVsdENvbHVtbnMiLCJ1bmlxIiwiR0VPSlNPTl9GSUVMRFMiLCJmb3VuZENvbHVtbnMiLCJmaW5kRGVmYXVsdENvbHVtbkZpZWxkIiwicmVwbGFjZSIsImlzVmlzaWJsZSIsIkxheWVyIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xheWVycy9nZW9qc29uLWxheWVyL2dlb2pzb24tbGF5ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDIyIFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IHVuaXEgZnJvbSAnbG9kYXNoL3VuaXEnO1xuaW1wb3J0IHtEQVRBX1RZUEVTfSBmcm9tICd0eXBlLWFuYWx5emVyJztcblxuaW1wb3J0IExheWVyLCB7XG4gIGNvbG9yTWFrZXIsXG4gIExheWVyQmFzZUNvbmZpZyxcbiAgTGF5ZXJDb2xvckNvbmZpZyxcbiAgTGF5ZXJDb2x1bW4sXG4gIExheWVySGVpZ2h0Q29uZmlnLFxuICBMYXllclJhZGl1c0NvbmZpZyxcbiAgTGF5ZXJTaXplQ29uZmlnLFxuICBMYXllclN0cm9rZUNvbG9yQ29uZmlnXG59IGZyb20gJy4uL2Jhc2UtbGF5ZXInO1xuaW1wb3J0IHtHZW9Kc29uTGF5ZXIgYXMgRGVja0dMR2VvSnNvbkxheWVyfSBmcm9tICdAZGVjay5nbC9sYXllcnMnO1xuaW1wb3J0IHtcbiAgZ2V0R2VvanNvbkRhdGFNYXBzLFxuICBnZXRHZW9qc29uQm91bmRzLFxuICBnZXRHZW9qc29uRmVhdHVyZVR5cGVzLFxuICBHZW9qc29uRGF0YU1hcHNcbn0gZnJvbSAnLi9nZW9qc29uLXV0aWxzJztcbmltcG9ydCBHZW9qc29uTGF5ZXJJY29uIGZyb20gJy4vZ2VvanNvbi1sYXllci1pY29uJztcbmltcG9ydCB7R0VPSlNPTl9GSUVMRFMsIEhJR0hMSUdIX0NPTE9SXzNELCBDSEFOTkVMX1NDQUxFU30gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2RlZmF1bHQtc2V0dGluZ3MnO1xuaW1wb3J0IHtcbiAgTEFZRVJfVklTX0NPTkZJR1MsXG4gIFZpc0NvbmZpZ051bWJlcixcbiAgVmlzQ29uZmlnQ29sb3JTZWxlY3QsXG4gIFZpc0NvbmZpZ0NvbG9yUmFuZ2UsXG4gIFZpc0NvbmZpZ1JhbmdlLFxuICBWaXNDb25maWdCb29sZWFuXG59IGZyb20gJy4uL2xheWVyLWZhY3RvcnknO1xuaW1wb3J0IHtEYXRhQ29udGFpbmVySW50ZXJmYWNlfSBmcm9tICcuLi8uLi91dGlscy90YWJsZS11dGlscy9kYXRhLWNvbnRhaW5lci1pbnRlcmZhY2UnO1xuaW1wb3J0IHtNZXJnZSwgUkdCQ29sb3J9IGZyb20gJy4uLy4uL3JlZHVjZXJzJztcbmltcG9ydCB7Q29sb3JSYW5nZX0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2NvbG9yLXJhbmdlcyc7XG5pbXBvcnQge0tlcGxlclRhYmxlfSBmcm9tICcuLi8uLi91dGlscyc7XG5cbmNvbnN0IFNVUFBPUlRFRF9BTkFMWVpFUl9UWVBFUyA9IHtcbiAgW0RBVEFfVFlQRVMuR0VPTUVUUlldOiB0cnVlLFxuICBbREFUQV9UWVBFUy5HRU9NRVRSWV9GUk9NX1NUUklOR106IHRydWVcbn07XG5cbmV4cG9ydCBjb25zdCBnZW9qc29uVmlzQ29uZmlnczoge1xuICBvcGFjaXR5OiAnb3BhY2l0eSc7XG4gIHN0cm9rZU9wYWNpdHk6IFZpc0NvbmZpZ051bWJlcjtcbiAgdGhpY2tuZXNzOiBWaXNDb25maWdOdW1iZXI7XG4gIHN0cm9rZUNvbG9yOiAnc3Ryb2tlQ29sb3InO1xuICBjb2xvclJhbmdlOiAnY29sb3JSYW5nZSc7XG4gIHN0cm9rZUNvbG9yUmFuZ2U6ICdzdHJva2VDb2xvclJhbmdlJztcbiAgcmFkaXVzOiAncmFkaXVzJztcblxuICBzaXplUmFuZ2U6ICdzdHJva2VXaWR0aFJhbmdlJztcbiAgcmFkaXVzUmFuZ2U6ICdyYWRpdXNSYW5nZSc7XG4gIGhlaWdodFJhbmdlOiAnZWxldmF0aW9uUmFuZ2UnO1xuICBlbGV2YXRpb25TY2FsZTogJ2VsZXZhdGlvblNjYWxlJztcbiAgZW5hYmxlRWxldmF0aW9uWm9vbUZhY3RvcjogJ2VuYWJsZUVsZXZhdGlvblpvb21GYWN0b3InO1xuICBzdHJva2VkOiAnc3Ryb2tlZCc7XG4gIGZpbGxlZDogJ2ZpbGxlZCc7XG4gIGVuYWJsZTNkOiAnZW5hYmxlM2QnO1xuICB3aXJlZnJhbWU6ICd3aXJlZnJhbWUnO1xufSA9IHtcbiAgb3BhY2l0eTogJ29wYWNpdHknLFxuICBzdHJva2VPcGFjaXR5OiB7XG4gICAgLi4uTEFZRVJfVklTX0NPTkZJR1Mub3BhY2l0eSxcbiAgICBwcm9wZXJ0eTogJ3N0cm9rZU9wYWNpdHknXG4gIH0sXG4gIHRoaWNrbmVzczoge1xuICAgIC4uLkxBWUVSX1ZJU19DT05GSUdTLnRoaWNrbmVzcyxcbiAgICBkZWZhdWx0VmFsdWU6IDFcbiAgfSxcbiAgc3Ryb2tlQ29sb3I6ICdzdHJva2VDb2xvcicsXG4gIGNvbG9yUmFuZ2U6ICdjb2xvclJhbmdlJyxcbiAgc3Ryb2tlQ29sb3JSYW5nZTogJ3N0cm9rZUNvbG9yUmFuZ2UnLFxuICByYWRpdXM6ICdyYWRpdXMnLFxuXG4gIHNpemVSYW5nZTogJ3N0cm9rZVdpZHRoUmFuZ2UnLFxuICByYWRpdXNSYW5nZTogJ3JhZGl1c1JhbmdlJyxcbiAgaGVpZ2h0UmFuZ2U6ICdlbGV2YXRpb25SYW5nZScsXG4gIGVsZXZhdGlvblNjYWxlOiAnZWxldmF0aW9uU2NhbGUnLFxuICBlbmFibGVFbGV2YXRpb25ab29tRmFjdG9yOiAnZW5hYmxlRWxldmF0aW9uWm9vbUZhY3RvcicsXG4gIHN0cm9rZWQ6ICdzdHJva2VkJyxcbiAgZmlsbGVkOiAnZmlsbGVkJyxcbiAgZW5hYmxlM2Q6ICdlbmFibGUzZCcsXG4gIHdpcmVmcmFtZTogJ3dpcmVmcmFtZSdcbn07XG5cbmV4cG9ydCB0eXBlIEdlb0pzb25WaXNDb25maWdTZXR0aW5ncyA9IHtcbiAgb3BhY2l0eTogVmlzQ29uZmlnTnVtYmVyO1xuICBzdHJva2VPcGFjaXR5OiBWaXNDb25maWdOdW1iZXI7XG4gIHRoaWNrbmVzczogVmlzQ29uZmlnTnVtYmVyO1xuICBzdHJva2VDb2xvcjogVmlzQ29uZmlnQ29sb3JTZWxlY3Q7XG4gIGNvbG9yUmFuZ2U6IFZpc0NvbmZpZ0NvbG9yUmFuZ2U7XG4gIHN0cm9rZUNvbG9yUmFuZ2U6IFZpc0NvbmZpZ0NvbG9yUmFuZ2U7XG4gIHJhZGl1czogVmlzQ29uZmlnTnVtYmVyO1xuXG4gIHNpemVSYW5nZTogVmlzQ29uZmlnUmFuZ2U7XG4gIHJhZGl1c1JhbmdlOiBWaXNDb25maWdSYW5nZTtcbiAgaGVpZ2h0UmFuZ2U6IFZpc0NvbmZpZ1JhbmdlO1xuICBlbGV2YXRpb25TY2FsZTogVmlzQ29uZmlnTnVtYmVyO1xuICBlbmFibGVFbGV2YXRpb25ab29tRmFjdG9yOiBWaXNDb25maWdCb29sZWFuO1xuICBzdHJva2VkOiBWaXNDb25maWdCb29sZWFuO1xuICBmaWxsZWQ6IFZpc0NvbmZpZ0Jvb2xlYW47XG4gIGVuYWJsZTNkOiBWaXNDb25maWdCb29sZWFuO1xuICB3aXJlZnJhbWU6IFZpc0NvbmZpZ0Jvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBHZW9Kc29uTGF5ZXJDb2x1bW5zQ29uZmlnID0ge1xuICBnZW9qc29uOiBMYXllckNvbHVtbjtcbn07XG5cbmV4cG9ydCB0eXBlIEdlb0pzb25MYXllclZpc0NvbmZpZyA9IHtcbiAgb3BhY2l0eTogbnVtYmVyO1xuICBzdHJva2VPcGFjaXR5OiBudW1iZXI7XG4gIHRoaWNrbmVzczogbnVtYmVyO1xuICBzdHJva2VDb2xvcjogUkdCQ29sb3I7XG4gIGNvbG9yUmFuZ2U6IENvbG9yUmFuZ2U7XG4gIHN0cm9rZUNvbG9yUmFuZ2U6IENvbG9yUmFuZ2U7XG4gIHJhZGl1czogbnVtYmVyO1xuXG4gIHNpemVSYW5nZTogW251bWJlciwgbnVtYmVyXTtcbiAgcmFkaXVzUmFuZ2U6IFtudW1iZXIsIG51bWJlcl07XG4gIGhlaWdodFJhbmdlOiBbbnVtYmVyLCBudW1iZXJdO1xuICBlbGV2YXRpb25TY2FsZTogbnVtYmVyO1xuICBlbmFibGVFbGV2YXRpb25ab29tRmFjdG9yOiBib29sZWFuO1xuICBzdHJva2VkOiBib29sZWFuO1xuICBmaWxsZWQ6IGJvb2xlYW47XG4gIGVuYWJsZTNkOiBib29sZWFuO1xuICB3aXJlZnJhbWU6IGJvb2xlYW47XG59O1xuXG50eXBlIEdlb0pzb25MYXllclZpc3VhbENoYW5uZWxDb25maWcgPSBMYXllckNvbG9yQ29uZmlnICZcbiAgTGF5ZXJTdHJva2VDb2xvckNvbmZpZyAmXG4gIExheWVyU2l6ZUNvbmZpZyAmXG4gIExheWVySGVpZ2h0Q29uZmlnICZcbiAgTGF5ZXJSYWRpdXNDb25maWc7XG5leHBvcnQgdHlwZSBHZW9Kc29uTGF5ZXJDb25maWcgPSBNZXJnZTxcbiAgTGF5ZXJCYXNlQ29uZmlnLFxuICB7Y29sdW1uczogR2VvSnNvbkxheWVyQ29sdW1uc0NvbmZpZzsgdmlzQ29uZmlnOiBHZW9Kc29uTGF5ZXJWaXNDb25maWd9XG4+ICZcbiAgR2VvSnNvbkxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZztcblxuZXhwb3J0IHR5cGUgR2VvSnNvbkxheWVyTWV0YSA9IHtcbiAgZmVhdHVyZVR5cGVzPzoge3BvbHlnb246IGJvb2xlYW47IHBvaW50OiBib29sZWFuOyBsaW5lOiBib29sZWFufTtcbiAgZml4ZWRSYWRpdXM/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IGNvbnN0IGdlb0pzb25SZXF1aXJlZENvbHVtbnM6IFsnZ2VvanNvbiddID0gWydnZW9qc29uJ107XG5leHBvcnQgY29uc3QgZmVhdHVyZUFjY2Vzc29yID0gKHtnZW9qc29ufTogR2VvSnNvbkxheWVyQ29sdW1uc0NvbmZpZykgPT4gKFxuICBkYzogRGF0YUNvbnRhaW5lckludGVyZmFjZVxuKSA9PiBkID0+IGRjLnZhbHVlQXQoZC5pbmRleCwgZ2VvanNvbi5maWVsZElkeCk7XG5cbi8vIGFjY2VzcyBmZWF0dXJlIHByb3BlcnRpZXMgZnJvbSBnZW9qc29uIHN1YiBsYXllclxuZXhwb3J0IGNvbnN0IGRlZmF1bHRFbGV2YXRpb24gPSA1MDA7XG5leHBvcnQgY29uc3QgZGVmYXVsdExpbmVXaWR0aCA9IDE7XG5leHBvcnQgY29uc3QgZGVmYXVsdFJhZGl1cyA9IDE7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdlb0pzb25MYXllciBleHRlbmRzIExheWVyIHtcbiAgZGVjbGFyZSBjb25maWc6IEdlb0pzb25MYXllckNvbmZpZztcbiAgZGVjbGFyZSB2aXNDb25maWdTZXR0aW5nczogR2VvSnNvblZpc0NvbmZpZ1NldHRpbmdzO1xuICBkZWNsYXJlIG1ldGE6IEdlb0pzb25MYXllck1ldGE7XG4gIGRhdGFUb0ZlYXR1cmU6IEdlb2pzb25EYXRhTWFwcztcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcblxuICAgIHRoaXMuZGF0YVRvRmVhdHVyZSA9IFtdO1xuICAgIHRoaXMucmVnaXN0ZXJWaXNDb25maWcoZ2VvanNvblZpc0NvbmZpZ3MpO1xuICAgIHRoaXMuZ2V0UG9zaXRpb25BY2Nlc3NvciA9IChkYXRhQ29udGFpbmVyOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlKSA9PlxuICAgICAgZmVhdHVyZUFjY2Vzc29yKHRoaXMuY29uZmlnLmNvbHVtbnMpKGRhdGFDb250YWluZXIpO1xuICB9XG5cbiAgZ2V0IHR5cGUoKSB7XG4gICAgcmV0dXJuIEdlb0pzb25MYXllci50eXBlO1xuICB9XG4gIHN0YXRpYyBnZXQgdHlwZSgpOiAnZ2VvanNvbicge1xuICAgIHJldHVybiAnZ2VvanNvbic7XG4gIH1cblxuICBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnUG9seWdvbic7XG4gIH1cblxuICBnZXQgbGF5ZXJJY29uKCkge1xuICAgIHJldHVybiBHZW9qc29uTGF5ZXJJY29uO1xuICB9XG5cbiAgZ2V0IHJlcXVpcmVkTGF5ZXJDb2x1bW5zKCkge1xuICAgIHJldHVybiBnZW9Kc29uUmVxdWlyZWRDb2x1bW5zO1xuICB9XG5cbiAgZ2V0IHZpc3VhbENoYW5uZWxzKCkge1xuICAgIGNvbnN0IHZpc3VhbENoYW5uZWxzID0gc3VwZXIudmlzdWFsQ2hhbm5lbHM7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbG9yOiB7XG4gICAgICAgIC4uLnZpc3VhbENoYW5uZWxzLmNvbG9yLFxuICAgICAgICBhY2Nlc3NvcjogJ2dldEZpbGxDb2xvcicsXG4gICAgICAgIGNvbmRpdGlvbjogY29uZmlnID0+IGNvbmZpZy52aXNDb25maWcuZmlsbGVkLFxuICAgICAgICBudWxsVmFsdWU6IHZpc3VhbENoYW5uZWxzLmNvbG9yLm51bGxWYWx1ZSxcbiAgICAgICAgZ2V0QXR0cmlidXRlVmFsdWU6IGNvbmZpZyA9PiBkID0+IGQucHJvcGVydGllcy5maWxsQ29sb3IgfHwgY29uZmlnLmNvbG9yLFxuICAgICAgICAvLyB1c2VkIHRoaXMgdG8gZ2V0IHVwZGF0ZVRyaWdnZXJzXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogY29uZmlnID0+IGNvbmZpZy5jb2xvclxuICAgICAgfSxcbiAgICAgIHN0cm9rZUNvbG9yOiB7XG4gICAgICAgIHByb3BlcnR5OiAnc3Ryb2tlQ29sb3InLFxuICAgICAgICBmaWVsZDogJ3N0cm9rZUNvbG9yRmllbGQnLFxuICAgICAgICBzY2FsZTogJ3N0cm9rZUNvbG9yU2NhbGUnLFxuICAgICAgICBkb21haW46ICdzdHJva2VDb2xvckRvbWFpbicsXG4gICAgICAgIHJhbmdlOiAnc3Ryb2tlQ29sb3JSYW5nZScsXG4gICAgICAgIGtleTogJ3N0cm9rZUNvbG9yJyxcbiAgICAgICAgY2hhbm5lbFNjYWxlVHlwZTogQ0hBTk5FTF9TQ0FMRVMuY29sb3IsXG4gICAgICAgIGFjY2Vzc29yOiAnZ2V0TGluZUNvbG9yJyxcbiAgICAgICAgY29uZGl0aW9uOiBjb25maWcgPT4gY29uZmlnLnZpc0NvbmZpZy5zdHJva2VkLFxuICAgICAgICBudWxsVmFsdWU6IHZpc3VhbENoYW5uZWxzLmNvbG9yLm51bGxWYWx1ZSxcbiAgICAgICAgZ2V0QXR0cmlidXRlVmFsdWU6IGNvbmZpZyA9PiBkID0+XG4gICAgICAgICAgZC5wcm9wZXJ0aWVzLmxpbmVDb2xvciB8fCBjb25maWcudmlzQ29uZmlnLnN0cm9rZUNvbG9yIHx8IGNvbmZpZy5jb2xvcixcbiAgICAgICAgLy8gdXNlZCB0aGlzIHRvIGdldCB1cGRhdGVUcmlnZ2Vyc1xuICAgICAgICBkZWZhdWx0VmFsdWU6IGNvbmZpZyA9PiBjb25maWcudmlzQ29uZmlnLnN0cm9rZUNvbG9yIHx8IGNvbmZpZy5jb2xvclxuICAgICAgfSxcbiAgICAgIHNpemU6IHtcbiAgICAgICAgLi4udmlzdWFsQ2hhbm5lbHMuc2l6ZSxcbiAgICAgICAgcHJvcGVydHk6ICdzdHJva2UnLFxuICAgICAgICBhY2Nlc3NvcjogJ2dldExpbmVXaWR0aCcsXG4gICAgICAgIGNvbmRpdGlvbjogY29uZmlnID0+IGNvbmZpZy52aXNDb25maWcuc3Ryb2tlZCxcbiAgICAgICAgbnVsbFZhbHVlOiAwLFxuICAgICAgICBnZXRBdHRyaWJ1dGVWYWx1ZTogKCkgPT4gZCA9PiBkLnByb3BlcnRpZXMubGluZVdpZHRoIHx8IGRlZmF1bHRMaW5lV2lkdGhcbiAgICAgIH0sXG4gICAgICBoZWlnaHQ6IHtcbiAgICAgICAgcHJvcGVydHk6ICdoZWlnaHQnLFxuICAgICAgICBmaWVsZDogJ2hlaWdodEZpZWxkJyxcbiAgICAgICAgc2NhbGU6ICdoZWlnaHRTY2FsZScsXG4gICAgICAgIGRvbWFpbjogJ2hlaWdodERvbWFpbicsXG4gICAgICAgIHJhbmdlOiAnaGVpZ2h0UmFuZ2UnLFxuICAgICAgICBrZXk6ICdoZWlnaHQnLFxuICAgICAgICBjaGFubmVsU2NhbGVUeXBlOiBDSEFOTkVMX1NDQUxFUy5zaXplLFxuICAgICAgICBhY2Nlc3NvcjogJ2dldEVsZXZhdGlvbicsXG4gICAgICAgIGNvbmRpdGlvbjogY29uZmlnID0+IGNvbmZpZy52aXNDb25maWcuZW5hYmxlM2QsXG4gICAgICAgIG51bGxWYWx1ZTogMCxcbiAgICAgICAgZ2V0QXR0cmlidXRlVmFsdWU6ICgpID0+IGQgPT4gZC5wcm9wZXJ0aWVzLmVsZXZhdGlvbiB8fCBkZWZhdWx0RWxldmF0aW9uXG4gICAgICB9LFxuICAgICAgcmFkaXVzOiB7XG4gICAgICAgIHByb3BlcnR5OiAncmFkaXVzJyxcbiAgICAgICAgZmllbGQ6ICdyYWRpdXNGaWVsZCcsXG4gICAgICAgIHNjYWxlOiAncmFkaXVzU2NhbGUnLFxuICAgICAgICBkb21haW46ICdyYWRpdXNEb21haW4nLFxuICAgICAgICByYW5nZTogJ3JhZGl1c1JhbmdlJyxcbiAgICAgICAga2V5OiAncmFkaXVzJyxcbiAgICAgICAgY2hhbm5lbFNjYWxlVHlwZTogQ0hBTk5FTF9TQ0FMRVMucmFkaXVzLFxuICAgICAgICBhY2Nlc3NvcjogJ2dldFJhZGl1cycsXG4gICAgICAgIG51bGxWYWx1ZTogMCxcbiAgICAgICAgZ2V0QXR0cmlidXRlVmFsdWU6ICgpID0+IGQgPT4gZC5wcm9wZXJ0aWVzLnJhZGl1cyB8fCBkZWZhdWx0UmFkaXVzXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBmaW5kRGVmYXVsdExheWVyUHJvcHMoe2xhYmVsLCBmaWVsZHMgPSBbXX06IEtlcGxlclRhYmxlKSB7XG4gICAgY29uc3QgZ2VvanNvbkNvbHVtbnMgPSBmaWVsZHNcbiAgICAgIC5maWx0ZXIoZiA9PiBmLnR5cGUgPT09ICdnZW9qc29uJyAmJiBTVVBQT1JURURfQU5BTFlaRVJfVFlQRVNbZi5hbmFseXplclR5cGVdKVxuICAgICAgLm1hcChmID0+IGYubmFtZSk7XG5cbiAgICBjb25zdCBkZWZhdWx0Q29sdW1ucyA9IHtcbiAgICAgIGdlb2pzb246IHVuaXEoWy4uLkdFT0pTT05fRklFTERTLmdlb2pzb24sIC4uLmdlb2pzb25Db2x1bW5zXSlcbiAgICB9O1xuXG4gICAgY29uc3QgZm91bmRDb2x1bW5zID0gdGhpcy5maW5kRGVmYXVsdENvbHVtbkZpZWxkKGRlZmF1bHRDb2x1bW5zLCBmaWVsZHMpO1xuICAgIGlmICghZm91bmRDb2x1bW5zIHx8ICFmb3VuZENvbHVtbnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4ge3Byb3BzOiBbXX07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHByb3BzOiBmb3VuZENvbHVtbnMubWFwKGNvbHVtbnMgPT4gKHtcbiAgICAgICAgbGFiZWw6ICh0eXBlb2YgbGFiZWwgPT09ICdzdHJpbmcnICYmIGxhYmVsLnJlcGxhY2UoL1xcLlteLy5dKyQvLCAnJykpIHx8IHRoaXMudHlwZSxcbiAgICAgICAgY29sdW1ucyxcbiAgICAgICAgaXNWaXNpYmxlOiB0cnVlXG4gICAgICB9KSlcbiAgICB9O1xuICB9XG5cbiAgZ2V0RGVmYXVsdExheWVyQ29uZmlnKHByb3BzID0ge30pIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3VwZXIuZ2V0RGVmYXVsdExheWVyQ29uZmlnKHByb3BzKSxcblxuICAgICAgLy8gYWRkIGhlaWdodCB2aXN1YWwgY2hhbm5lbFxuICAgICAgaGVpZ2h0RmllbGQ6IG51bGwsXG4gICAgICBoZWlnaHREb21haW46IFswLCAxXSxcbiAgICAgIGhlaWdodFNjYWxlOiAnbGluZWFyJyxcblxuICAgICAgLy8gYWRkIHJhZGl1cyB2aXN1YWwgY2hhbm5lbFxuICAgICAgcmFkaXVzRmllbGQ6IG51bGwsXG4gICAgICByYWRpdXNEb21haW46IFswLCAxXSxcbiAgICAgIHJhZGl1c1NjYWxlOiAnbGluZWFyJyxcblxuICAgICAgLy8gYWRkIHN0cm9rZSBjb2xvciB2aXN1YWwgY2hhbm5lbFxuICAgICAgc3Ryb2tlQ29sb3JGaWVsZDogbnVsbCxcbiAgICAgIHN0cm9rZUNvbG9yRG9tYWluOiBbMCwgMV0sXG4gICAgICBzdHJva2VDb2xvclNjYWxlOiAncXVhbnRpbGUnXG4gICAgfTtcbiAgfVxuXG4gIGdldEhvdmVyRGF0YShvYmplY3QsIGRhdGFDb250YWluZXIpIHtcbiAgICAvLyBpbmRleCBvZiBkYXRhQ29udGFpbmVyIGlzIHNhdmVkIHRvIGZlYXR1cmUucHJvcGVydGllc1xuICAgIHJldHVybiBkYXRhQ29udGFpbmVyLnJvdyhvYmplY3QucHJvcGVydGllcy5pbmRleCk7XG4gIH1cblxuICBjYWxjdWxhdGVEYXRhQXR0cmlidXRlKHtkYXRhQ29udGFpbmVyLCBmaWx0ZXJlZEluZGV4fSwgZ2V0UG9zaXRpb24pIHtcbiAgICByZXR1cm4gZmlsdGVyZWRJbmRleC5tYXAoaSA9PiB0aGlzLmRhdGFUb0ZlYXR1cmVbaV0pLmZpbHRlcihkID0+IGQpO1xuICB9XG5cbiAgZm9ybWF0TGF5ZXJEYXRhKGRhdGFzZXRzLCBvbGRMYXllckRhdGEpIHtcbiAgICBpZiAodGhpcy5jb25maWcuZGF0YUlkID09PSBudWxsKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGNvbnN0IHtncHVGaWx0ZXIsIGRhdGFDb250YWluZXJ9ID0gZGF0YXNldHNbdGhpcy5jb25maWcuZGF0YUlkXTtcbiAgICBjb25zdCB7ZGF0YX0gPSB0aGlzLnVwZGF0ZURhdGEoZGF0YXNldHMsIG9sZExheWVyRGF0YSk7XG5cbiAgICBjb25zdCBjdXN0b21GaWx0ZXJWYWx1ZUFjY2Vzc29yID0gKGRjLCBkLCBmaWVsZEluZGV4KSA9PiB7XG4gICAgICByZXR1cm4gZGMudmFsdWVBdChkLnByb3BlcnRpZXMuaW5kZXgsIGZpZWxkSW5kZXgpO1xuICAgIH07XG4gICAgY29uc3QgaW5kZXhBY2Nlc3NvciA9IGYgPT4gZi5wcm9wZXJ0aWVzLmluZGV4O1xuXG4gICAgY29uc3QgZGF0YUFjY2Vzc29yID0gZGMgPT4gZCA9PiAoe2luZGV4OiBkLnByb3BlcnRpZXMuaW5kZXh9KTtcbiAgICBjb25zdCBhY2Nlc3NvcnMgPSB0aGlzLmdldEF0dHJpYnV0ZUFjY2Vzc29ycyh7ZGF0YUFjY2Vzc29yLCBkYXRhQ29udGFpbmVyfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGF0YSxcbiAgICAgIGdldEZpbHRlclZhbHVlOiBncHVGaWx0ZXIuZmlsdGVyVmFsdWVBY2Nlc3NvcihkYXRhQ29udGFpbmVyKShcbiAgICAgICAgaW5kZXhBY2Nlc3NvcixcbiAgICAgICAgY3VzdG9tRmlsdGVyVmFsdWVBY2Nlc3NvclxuICAgICAgKSxcbiAgICAgIC4uLmFjY2Vzc29yc1xuICAgIH07XG4gIH1cblxuICB1cGRhdGVMYXllck1ldGEoZGF0YUNvbnRhaW5lcikge1xuICAgIGNvbnN0IGdldEZlYXR1cmUgPSB0aGlzLmdldFBvc2l0aW9uQWNjZXNzb3IoZGF0YUNvbnRhaW5lcik7XG4gICAgdGhpcy5kYXRhVG9GZWF0dXJlID0gZ2V0R2VvanNvbkRhdGFNYXBzKGRhdGFDb250YWluZXIsIGdldEZlYXR1cmUpO1xuXG4gICAgLy8gZ2V0IGJvdW5kcyBmcm9tIGZlYXR1cmVzXG4gICAgY29uc3QgYm91bmRzID0gZ2V0R2VvanNvbkJvdW5kcyh0aGlzLmRhdGFUb0ZlYXR1cmUpO1xuXG4gICAgLy8ga2VlcCBhIHJlY29yZCBvZiB3aGF0IHR5cGUgb2YgZ2VvbWV0cnkgdGhlIGNvbGxlY3Rpb24gaGFzXG4gICAgY29uc3QgZmVhdHVyZVR5cGVzID0gZ2V0R2VvanNvbkZlYXR1cmVUeXBlcyh0aGlzLmRhdGFUb0ZlYXR1cmUpO1xuXG4gICAgdGhpcy51cGRhdGVNZXRhKHtib3VuZHMsIGZlYXR1cmVUeXBlc30pO1xuICB9XG5cbiAgc2V0SW5pdGlhbExheWVyQ29uZmlnKHtkYXRhQ29udGFpbmVyfSkge1xuICAgIHRoaXMudXBkYXRlTGF5ZXJNZXRhKGRhdGFDb250YWluZXIpO1xuXG4gICAgY29uc3Qge2ZlYXR1cmVUeXBlc30gPSB0aGlzLm1ldGE7XG4gICAgLy8gZGVmYXVsdCBzZXR0aW5ncyBpcyBzdHJva2U6IHRydWUsIGZpbGxlZDogZmFsc2VcbiAgICBpZiAoZmVhdHVyZVR5cGVzICYmIGZlYXR1cmVUeXBlcy5wb2x5Z29uKSB7XG4gICAgICAvLyBzZXQgYm90aCBmaWxsIGFuZCBzdHJva2UgdG8gdHJ1ZVxuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlTGF5ZXJWaXNDb25maWcoe1xuICAgICAgICBmaWxsZWQ6IHRydWUsXG4gICAgICAgIHN0cm9rZWQ6IHRydWUsXG4gICAgICAgIHN0cm9rZUNvbG9yOiBjb2xvck1ha2VyLm5leHQoKS52YWx1ZVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChmZWF0dXJlVHlwZXMgJiYgZmVhdHVyZVR5cGVzLnBvaW50KSB7XG4gICAgICAvLyBzZXQgZmlsbCB0byB0cnVlIGlmIGRldGVjdCBwb2ludFxuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlTGF5ZXJWaXNDb25maWcoe2ZpbGxlZDogdHJ1ZSwgc3Ryb2tlZDogZmFsc2V9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHJlbmRlckxheWVyKG9wdHMpIHtcbiAgICBjb25zdCB7ZGF0YSwgZ3B1RmlsdGVyLCBvYmplY3RIb3ZlcmVkfSA9IG9wdHM7XG5cbiAgICBjb25zdCB7ZmVhdHVyZVR5cGVzfSA9IHRoaXMubWV0YTtcbiAgICBjb25zdCByYWRpdXNTY2FsZSA9IHRoaXMuZ2V0UmFkaXVzU2NhbGUoKTtcbiAgICBjb25zdCB7dmlzQ29uZmlnfSA9IHRoaXMuY29uZmlnO1xuXG4gICAgY29uc3QgbGF5ZXJQcm9wcyA9IHtcbiAgICAgIGxpbmVXaWR0aFNjYWxlOiB2aXNDb25maWcudGhpY2tuZXNzLFxuICAgICAgZWxldmF0aW9uU2NhbGU6IHZpc0NvbmZpZy5lbGV2YXRpb25TY2FsZSxcbiAgICAgIHBvaW50UmFkaXVzU2NhbGU6IHJhZGl1c1NjYWxlLFxuICAgICAgbGluZU1pdGVyTGltaXQ6IDRcbiAgICB9O1xuXG4gICAgY29uc3QgdXBkYXRlVHJpZ2dlcnMgPSB7XG4gICAgICAuLi50aGlzLmdldFZpc3VhbENoYW5uZWxVcGRhdGVUcmlnZ2VycygpLFxuICAgICAgZ2V0RmlsdGVyVmFsdWU6IGdwdUZpbHRlci5maWx0ZXJWYWx1ZVVwZGF0ZVRyaWdnZXJzXG4gICAgfTtcblxuICAgIGNvbnN0IGRlZmF1bHRMYXllclByb3BzID0gdGhpcy5nZXREZWZhdWx0RGVja0xheWVyUHJvcHMob3B0cyk7XG4gICAgY29uc3Qgb3BhT3ZlcndyaXRlID0ge1xuICAgICAgb3BhY2l0eTogdmlzQ29uZmlnLnN0cm9rZU9wYWNpdHlcbiAgICB9O1xuXG4gICAgY29uc3QgcGlja2FibGUgPSB0aGlzLmhhc0ludGVyYWN0aXZpdHk7XG4gICAgY29uc3QgaG92ZXJlZE9iamVjdCA9IHRoaXMuaGFzSG92ZXJlZE9iamVjdChvYmplY3RIb3ZlcmVkKTtcblxuICAgIHJldHVybiBbXG4gICAgICBuZXcgRGVja0dMR2VvSnNvbkxheWVyKHtcbiAgICAgICAgLi4uZGVmYXVsdExheWVyUHJvcHMsXG4gICAgICAgIC4uLmxheWVyUHJvcHMsXG4gICAgICAgIC4uLmRhdGEsXG4gICAgICAgIHBpY2thYmxlLFxuICAgICAgICBoaWdobGlnaHRDb2xvcjogSElHSExJR0hfQ09MT1JfM0QsXG4gICAgICAgIGF1dG9IaWdobGlnaHQ6IHZpc0NvbmZpZy5lbmFibGUzZCAmJiBwaWNrYWJsZSxcbiAgICAgICAgc3Ryb2tlZDogdmlzQ29uZmlnLnN0cm9rZWQsXG4gICAgICAgIGZpbGxlZDogdmlzQ29uZmlnLmZpbGxlZCxcbiAgICAgICAgZXh0cnVkZWQ6IHZpc0NvbmZpZy5lbmFibGUzZCxcbiAgICAgICAgd2lyZWZyYW1lOiB2aXNDb25maWcud2lyZWZyYW1lLFxuICAgICAgICB3cmFwTG9uZ2l0dWRlOiBmYWxzZSxcbiAgICAgICAgbGluZU1pdGVyTGltaXQ6IDIsXG4gICAgICAgIHJvdW5kZWQ6IHRydWUsXG4gICAgICAgIHJhZGl1c1VuaXRzOiAncGl4ZWxzJyxcbiAgICAgICAgbGluZVdpZHRoVW5pdHM6ICdwaXhlbHMnLFxuICAgICAgICB1cGRhdGVUcmlnZ2VycyxcbiAgICAgICAgX3N1YkxheWVyUHJvcHM6IHtcbiAgICAgICAgICAuLi4oZmVhdHVyZVR5cGVzPy5wb2x5Z29uID8geydwb2x5Z29ucy1zdHJva2UnOiBvcGFPdmVyd3JpdGV9IDoge30pLFxuICAgICAgICAgIC4uLihmZWF0dXJlVHlwZXM/LmxpbmUgPyB7bGluZXN0cmluZ3M6IG9wYU92ZXJ3cml0ZX0gOiB7fSksXG4gICAgICAgICAgLi4uKGZlYXR1cmVUeXBlcz8ucG9pbnRcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIHBvaW50czoge1xuICAgICAgICAgICAgICAgICAgbGluZU9wYWNpdHk6IHZpc0NvbmZpZy5zdHJva2VPcGFjaXR5XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHt9KVxuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIC4uLihob3ZlcmVkT2JqZWN0ICYmICF2aXNDb25maWcuZW5hYmxlM2RcbiAgICAgICAgPyBbXG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICBuZXcgRGVja0dMR2VvSnNvbkxheWVyKHtcbiAgICAgICAgICAgICAgLi4udGhpcy5nZXREZWZhdWx0SG92ZXJMYXllclByb3BzKCksXG4gICAgICAgICAgICAgIC4uLmxheWVyUHJvcHMsXG4gICAgICAgICAgICAgIHdyYXBMb25naXR1ZGU6IGZhbHNlLFxuICAgICAgICAgICAgICBkYXRhOiBbaG92ZXJlZE9iamVjdF0sXG4gICAgICAgICAgICAgIGdldExpbmVXaWR0aDogZGF0YS5nZXRMaW5lV2lkdGgsXG4gICAgICAgICAgICAgIGdldFJhZGl1czogZGF0YS5nZXRSYWRpdXMsXG4gICAgICAgICAgICAgIGdldEVsZXZhdGlvbjogZGF0YS5nZXRFbGV2YXRpb24sXG4gICAgICAgICAgICAgIGdldExpbmVDb2xvcjogdGhpcy5jb25maWcuaGlnaGxpZ2h0Q29sb3IsXG4gICAgICAgICAgICAgIGdldEZpbGxDb2xvcjogdGhpcy5jb25maWcuaGlnaGxpZ2h0Q29sb3IsXG4gICAgICAgICAgICAgIC8vIGFsd2F5cyBkcmF3IG91dGxpbmVcbiAgICAgICAgICAgICAgc3Ryb2tlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgZmlsbGVkOiBmYWxzZVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdXG4gICAgICAgIDogW10pXG4gICAgXTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBb0JBLElBQUFBLEtBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLGFBQUEsR0FBQUQsT0FBQTtB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