@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,13 +1,15 @@
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
8
  exports.FilterAnimationControllerFactory = FilterAnimationControllerFactory;
8
9
  exports.LayerAnimationControllerFactory = LayerAnimationControllerFactory;
9
- exports.default = BottomWidgetFactory;
10
+ exports["default"] = BottomWidgetFactory;
10
11
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
12
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
11
13
  var _react = _interopRequireWildcard(require("react"));
12
14
  var _styledComponents = _interopRequireDefault(require("styled-components"));
13
15
  var _timeWidget = _interopRequireDefault(require("./filters/time-widget"));
@@ -16,9 +18,7 @@ var _animationController = _interopRequireDefault(require("./common/animation-co
16
18
  var _defaultSettings = require("../constants/default-settings");
17
19
  var _filterUtils = require("../utils/filter-utils");
18
20
  var _mediaBreakpoints = require("../styles/media-breakpoints");
19
- 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); }
20
- 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; }
21
- // Copyright (c) 2022 Uber Technologies, Inc.
21
+ var _templateObject, _templateObject2; // Copyright (c) 2022 Uber Technologies, Inc.
22
22
  //
23
23
  // Permission is hereby granted, free of charge, to any person obtaining a copy
24
24
  // of this software and associated documentation files (the "Software"), to deal
@@ -37,39 +37,39 @@ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e;
37
37
  // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
38
38
  // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
39
39
  // THE SOFTWARE.
40
-
41
- const maxWidth = 1080;
42
- const BottomWidgetContainer = _styledComponents.default.div`
43
- display: flex;
44
- flex-direction: column;
45
- padding-top: ${props => props.hasPadding ? props.theme.bottomWidgetPaddingTop : 0}px;
46
- padding-right: ${props => props.hasPadding ? props.theme.bottomWidgetPaddingRight : 0}px;
47
- padding-bottom: ${props => props.hasPadding ? props.theme.bottomWidgetPaddingBottom : 0}px;
48
- padding-left: ${props => props.hasPadding ? props.theme.bottomWidgetPaddingLeft : 0}px;
49
- pointer-events: none !important; /* prevent padding from blocking input */
50
- & > * {
51
- /* all children should allow input */
52
- pointer-events: all;
53
- }
54
- width: ${props => props.width}px;
55
- z-index: 1;
56
- ${_mediaBreakpoints.media.portable`padding: 0;`}
57
- `;
58
- FilterAnimationControllerFactory.deps = [_animationController.default];
40
+ 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); }
41
+ 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; }
42
+ var maxWidth = 1080;
43
+ var BottomWidgetContainer = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: column;\n padding-top: ", "px;\n padding-right: ", "px;\n padding-bottom: ", "px;\n padding-left: ", "px;\n pointer-events: none !important; /* prevent padding from blocking input */\n & > * {\n /* all children should allow input */\n pointer-events: all;\n }\n width: ", "px;\n z-index: 1;\n ", "\n"])), function (props) {
44
+ return props.hasPadding ? props.theme.bottomWidgetPaddingTop : 0;
45
+ }, function (props) {
46
+ return props.hasPadding ? props.theme.bottomWidgetPaddingRight : 0;
47
+ }, function (props) {
48
+ return props.hasPadding ? props.theme.bottomWidgetPaddingBottom : 0;
49
+ }, function (props) {
50
+ return props.hasPadding ? props.theme.bottomWidgetPaddingLeft : 0;
51
+ }, function (props) {
52
+ return props.width;
53
+ }, _mediaBreakpoints.media.portable(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["padding: 0;"]))));
54
+ FilterAnimationControllerFactory.deps = [_animationController["default"]];
59
55
  function FilterAnimationControllerFactory(AnimationController) {
60
- const FilterAnimationController = _ref => {
61
- let {
62
- filter,
63
- filterIdx,
64
- setFilterAnimationTime,
65
- children
66
- } = _ref;
67
- const intervalBins = (0, _react.useMemo)(() => (0, _filterUtils.getIntervalBins)(filter), [filter]);
68
- const steps = (0, _react.useMemo)(() => intervalBins ? intervalBins.map(x => x.x0) : null, [intervalBins]);
69
- const updateAnimation = (0, _react.useCallback)(value => {
56
+ var FilterAnimationController = function FilterAnimationController(_ref) {
57
+ var filter = _ref.filter,
58
+ filterIdx = _ref.filterIdx,
59
+ setFilterAnimationTime = _ref.setFilterAnimationTime,
60
+ children = _ref.children;
61
+ var intervalBins = (0, _react.useMemo)(function () {
62
+ return (0, _filterUtils.getIntervalBins)(filter);
63
+ }, [filter]);
64
+ var steps = (0, _react.useMemo)(function () {
65
+ return intervalBins ? intervalBins.map(function (x) {
66
+ return x.x0;
67
+ }) : null;
68
+ }, [intervalBins]);
69
+ var updateAnimation = (0, _react.useCallback)(function (value) {
70
70
  switch (filter.animationWindow) {
71
71
  case _defaultSettings.ANIMATION_WINDOW.interval:
72
- const idx = value[1];
72
+ var idx = value[1];
73
73
  setFilterAnimationTime(filterIdx, 'value', [intervalBins[idx].x0, intervalBins[idx].x1 - 1]);
74
74
  break;
75
75
  default:
@@ -77,7 +77,7 @@ function FilterAnimationControllerFactory(AnimationController) {
77
77
  break;
78
78
  }
79
79
  }, [filterIdx, intervalBins, filter.animationWindow, setFilterAnimationTime]);
80
- return /*#__PURE__*/_react.default.createElement(AnimationController, {
80
+ return /*#__PURE__*/_react["default"].createElement(AnimationController, {
81
81
  key: "filter-control",
82
82
  value: filter.value,
83
83
  domain: filter.domain,
@@ -91,15 +91,13 @@ function FilterAnimationControllerFactory(AnimationController) {
91
91
  };
92
92
  return FilterAnimationController;
93
93
  }
94
- LayerAnimationControllerFactory.deps = [_animationController.default];
94
+ LayerAnimationControllerFactory.deps = [_animationController["default"]];
95
95
  function LayerAnimationControllerFactory(AnimationController) {
96
- const LayerAnimationController = _ref2 => {
97
- let {
98
- animationConfig,
99
- setLayerAnimationTime,
100
- children
101
- } = _ref2;
102
- return /*#__PURE__*/_react.default.createElement(AnimationController, {
96
+ var LayerAnimationController = function LayerAnimationController(_ref2) {
97
+ var animationConfig = _ref2.animationConfig,
98
+ setLayerAnimationTime = _ref2.setLayerAnimationTime,
99
+ children = _ref2.children;
100
+ return /*#__PURE__*/_react["default"].createElement(AnimationController, {
103
101
  key: "layer-control",
104
102
  value: Number(animationConfig.currentTime),
105
103
  domain: animationConfig.domain,
@@ -113,93 +111,107 @@ function LayerAnimationControllerFactory(AnimationController) {
113
111
  };
114
112
  return LayerAnimationController;
115
113
  }
116
- BottomWidgetFactory.deps = [_timeWidget.default, _animationControl.default, FilterAnimationControllerFactory, LayerAnimationControllerFactory];
114
+ BottomWidgetFactory.deps = [_timeWidget["default"], _animationControl["default"], FilterAnimationControllerFactory, LayerAnimationControllerFactory];
117
115
 
118
116
  /* eslint-disable complexity */
119
117
  function BottomWidgetFactory(TimeWidget, AnimationControl, FilterAnimationController, LayerAnimationController) {
120
- const BottomWidget = props => {
118
+ var BottomWidget = function BottomWidget(props) {
121
119
  var _uiState$mapControls, _uiState$mapControls$, _uiState$mapControls2, _uiState$mapControls3;
122
- const {
123
- datasets,
124
- filters,
125
- animationConfig,
126
- visStateActions,
127
- containerW,
128
- uiState,
129
- sidePanelWidth,
130
- layers
131
- } = props;
132
- const {
133
- activeSidePanel,
134
- readOnly
135
- } = uiState;
136
- const isOpen = Boolean(activeSidePanel);
137
- const enlargedFilterIdx = (0, _react.useMemo)(() => filters.findIndex(f => f.enlarged && f.type === _defaultSettings.FILTER_TYPES.timeRange), [filters]);
138
- const animatedFilterIdx = (0, _react.useMemo)(() => filters.findIndex(f => f.isAnimating), [filters]);
139
- const animatedFilter = animatedFilterIdx > -1 ? filters[animatedFilterIdx] : null;
140
- const isLegendPinned = ((_uiState$mapControls = uiState.mapControls) === null || _uiState$mapControls === void 0 ? void 0 : (_uiState$mapControls$ = _uiState$mapControls.mapLegend) === null || _uiState$mapControls$ === void 0 ? void 0 : _uiState$mapControls$.show) && ((_uiState$mapControls2 = uiState.mapControls) === null || _uiState$mapControls2 === void 0 ? void 0 : (_uiState$mapControls3 = _uiState$mapControls2.mapLegend) === null || _uiState$mapControls3 === void 0 ? void 0 : _uiState$mapControls3.active);
141
- const spaceForLegendWidth = isLegendPinned ? _defaultSettings.DIMENSIONS.mapControl.width + _defaultSettings.DIMENSIONS.mapControl.mapLegend.pinned.right : 0;
142
- const enlargedFilterWidth = (isOpen ? containerW - sidePanelWidth : containerW) - spaceForLegendWidth;
120
+ var datasets = props.datasets,
121
+ filters = props.filters,
122
+ animationConfig = props.animationConfig,
123
+ visStateActions = props.visStateActions,
124
+ containerW = props.containerW,
125
+ uiState = props.uiState,
126
+ sidePanelWidth = props.sidePanelWidth,
127
+ layers = props.layers;
128
+ var activeSidePanel = uiState.activeSidePanel,
129
+ readOnly = uiState.readOnly;
130
+ var isOpen = Boolean(activeSidePanel);
131
+ var enlargedFilterIdx = (0, _react.useMemo)(function () {
132
+ return filters.findIndex(function (f) {
133
+ return f.enlarged && f.type === _defaultSettings.FILTER_TYPES.timeRange;
134
+ });
135
+ }, [filters]);
136
+ var animatedFilterIdx = (0, _react.useMemo)(function () {
137
+ return filters.findIndex(function (f) {
138
+ return f.isAnimating;
139
+ });
140
+ }, [filters]);
141
+ var animatedFilter = animatedFilterIdx > -1 ? filters[animatedFilterIdx] : null;
142
+ var isLegendPinned = ((_uiState$mapControls = uiState.mapControls) === null || _uiState$mapControls === void 0 ? void 0 : (_uiState$mapControls$ = _uiState$mapControls.mapLegend) === null || _uiState$mapControls$ === void 0 ? void 0 : _uiState$mapControls$.show) && ((_uiState$mapControls2 = uiState.mapControls) === null || _uiState$mapControls2 === void 0 ? void 0 : (_uiState$mapControls3 = _uiState$mapControls2.mapLegend) === null || _uiState$mapControls3 === void 0 ? void 0 : _uiState$mapControls3.active);
143
+ var spaceForLegendWidth = isLegendPinned ? _defaultSettings.DIMENSIONS.mapControl.width + _defaultSettings.DIMENSIONS.mapControl.mapLegend.pinned.right : 0;
144
+ var enlargedFilterWidth = (isOpen ? containerW - sidePanelWidth : containerW) - spaceForLegendWidth;
143
145
 
144
146
  // show playback control if layers contain trip layer & at least one trip layer is visible
145
- const animatableLayer = (0, _react.useMemo)(() => layers.filter(l => l.config.animation && l.config.animation.enabled && l.config.isVisible), [layers]);
146
- const readyToAnimation = Array.isArray(animationConfig.domain) && Number.isFinite(animationConfig.currentTime);
147
+ var animatableLayer = (0, _react.useMemo)(function () {
148
+ return layers.filter(function (l) {
149
+ return l.config.animation && l.config.animation.enabled && l.config.isVisible;
150
+ });
151
+ }, [layers]);
152
+ var readyToAnimation = Array.isArray(animationConfig.domain) && Number.isFinite(animationConfig.currentTime);
147
153
  // if animation control is showing, hide time display in time slider
148
- const showFloatingTimeDisplay = !animatableLayer.length;
149
- const showAnimationControl = animatableLayer.length && readyToAnimation && !animationConfig.hideControl;
150
- const showTimeWidget = enlargedFilterIdx > -1 && Object.keys(datasets).length > 0;
154
+ var showFloatingTimeDisplay = !animatableLayer.length;
155
+ var showAnimationControl = animatableLayer.length && readyToAnimation && !animationConfig.hideControl;
156
+ var showTimeWidget = enlargedFilterIdx > -1 && Object.keys(datasets).length > 0;
151
157
 
152
158
  // if filter is not animating, pass in enlarged filter here because
153
159
  // animation controller needs to call reset on it
154
- const filter = animatedFilter || filters[enlargedFilterIdx];
155
- return /*#__PURE__*/_react.default.createElement(BottomWidgetContainer, {
160
+ var filter = animatedFilter || filters[enlargedFilterIdx];
161
+ return /*#__PURE__*/_react["default"].createElement(BottomWidgetContainer, {
156
162
  width: Math.min(maxWidth, enlargedFilterWidth),
157
163
  style: {
158
164
  marginRight: spaceForLegendWidth
159
165
  },
160
166
  className: "bottom-widget--container",
161
167
  hasPadding: showAnimationControl || showTimeWidget
162
- }, /*#__PURE__*/_react.default.createElement(LayerAnimationController, {
168
+ }, /*#__PURE__*/_react["default"].createElement(LayerAnimationController, {
163
169
  animationConfig: animationConfig,
164
170
  setLayerAnimationTime: visStateActions.setLayerAnimationTime
165
- }, (isAnimating, start, pause, reset) => showAnimationControl ? /*#__PURE__*/_react.default.createElement(AnimationControl, {
166
- animationConfig: animationConfig,
167
- setLayerAnimationTime: visStateActions.setLayerAnimationTime,
168
- updateAnimationSpeed: visStateActions.updateLayerAnimationSpeed,
169
- toggleAnimation: visStateActions.toggleLayerAnimation,
170
- isAnimatable: !animatedFilter,
171
- isAnimating: isAnimating,
172
- resetAnimation: reset
173
- }) : null), filter && /*#__PURE__*/_react.default.createElement(FilterAnimationController, {
171
+ }, function (isAnimating, start, pause, reset) {
172
+ return showAnimationControl ? /*#__PURE__*/_react["default"].createElement(AnimationControl, {
173
+ animationConfig: animationConfig,
174
+ setLayerAnimationTime: visStateActions.setLayerAnimationTime,
175
+ updateAnimationSpeed: visStateActions.updateLayerAnimationSpeed,
176
+ toggleAnimation: visStateActions.toggleLayerAnimation,
177
+ isAnimatable: !animatedFilter,
178
+ isAnimating: isAnimating,
179
+ resetAnimation: reset
180
+ }) : null;
181
+ }), filter && /*#__PURE__*/_react["default"].createElement(FilterAnimationController, {
174
182
  filter: filter,
175
183
  filterIdx: animatedFilterIdx > -1 ? animatedFilterIdx : enlargedFilterIdx,
176
184
  setFilterAnimationTime: visStateActions.setFilterAnimationTime
177
- }, (isAnimating, start, pause, resetAnimation) => showTimeWidget ? /*#__PURE__*/_react.default.createElement(TimeWidget
178
- // TimeWidget uses React.memo, here we pass width
179
- // even though it doesnt use it, to force rerender
180
- , {
181
- filter: filters[enlargedFilterIdx],
182
- index: enlargedFilterIdx,
183
- datasets: datasets,
184
- readOnly: readOnly,
185
- showTimeDisplay: showFloatingTimeDisplay,
186
- setFilterPlot: visStateActions.setFilterPlot,
187
- setFilterAnimationTime: visStateActions.setFilterAnimationTime,
188
- setFilterAnimationWindow: visStateActions.setFilterAnimationWindow,
189
- toggleAnimation: visStateActions.toggleFilterAnimation,
190
- updateAnimationSpeed: visStateActions.updateFilterAnimationSpeed,
191
- enlargeFilter: visStateActions.enlargeFilter,
192
- resetAnimation: resetAnimation,
193
- isAnimatable: !animationConfig || !animationConfig.isAnimating
194
- }) : null));
185
+ }, function (isAnimating, start, pause, resetAnimation) {
186
+ return showTimeWidget ? /*#__PURE__*/_react["default"].createElement(TimeWidget
187
+ // TimeWidget uses React.memo, here we pass width
188
+ // even though it doesnt use it, to force rerender
189
+ , {
190
+ filter: filters[enlargedFilterIdx],
191
+ index: enlargedFilterIdx,
192
+ datasets: datasets,
193
+ readOnly: readOnly,
194
+ showTimeDisplay: showFloatingTimeDisplay,
195
+ setFilterPlot: visStateActions.setFilterPlot,
196
+ setFilterAnimationTime: visStateActions.setFilterAnimationTime,
197
+ setFilterAnimationWindow: visStateActions.setFilterAnimationWindow,
198
+ toggleAnimation: visStateActions.toggleFilterAnimation,
199
+ updateAnimationSpeed: visStateActions.updateFilterAnimationSpeed,
200
+ enlargeFilter: visStateActions.enlargeFilter,
201
+ resetAnimation: resetAnimation,
202
+ isAnimatable: !animationConfig || !animationConfig.isAnimating
203
+ }) : null;
204
+ }));
195
205
  };
196
206
 
197
207
  /* eslint-disable react/display-name */
198
208
  // @ts-ignore
199
- return /*#__PURE__*/(0, _react.forwardRef)((props, ref) => /*#__PURE__*/_react.default.createElement(BottomWidget, (0, _extends2.default)({}, props, {
200
- rootRef: ref
201
- })));
209
+ return /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
210
+ return /*#__PURE__*/_react["default"].createElement(BottomWidget, (0, _extends2["default"])({}, props, {
211
+ rootRef: ref
212
+ }));
213
+ });
202
214
  /* eslint-enable react/display-name */
203
215
  }
204
216
  /* eslint-enable complexity */
205
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfdGltZVdpZGdldCIsIl9hbmltYXRpb25Db250cm9sIiwiX2FuaW1hdGlvbkNvbnRyb2xsZXIiLCJfZGVmYXVsdFNldHRpbmdzIiwiX2ZpbHRlclV0aWxzIiwiX21lZGlhQnJlYWtwb2ludHMiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJtYXhXaWR0aCIsIkJvdHRvbVdpZGdldENvbnRhaW5lciIsInN0eWxlZCIsImRpdiIsInByb3BzIiwiaGFzUGFkZGluZyIsInRoZW1lIiwiYm90dG9tV2lkZ2V0UGFkZGluZ1RvcCIsImJvdHRvbVdpZGdldFBhZGRpbmdSaWdodCIsImJvdHRvbVdpZGdldFBhZGRpbmdCb3R0b20iLCJib3R0b21XaWRnZXRQYWRkaW5nTGVmdCIsIndpZHRoIiwibWVkaWEiLCJwb3J0YWJsZSIsIkZpbHRlckFuaW1hdGlvbkNvbnRyb2xsZXJGYWN0b3J5IiwiZGVwcyIsIkFuaW1hdGlvbkNvbnRyb2xsZXJGYWN0b3J5IiwiQW5pbWF0aW9uQ29udHJvbGxlciIsIkZpbHRlckFuaW1hdGlvbkNvbnRyb2xsZXIiLCJfcmVmIiwiZmlsdGVyIiwiZmlsdGVySWR4Iiwic2V0RmlsdGVyQW5pbWF0aW9uVGltZSIsImNoaWxkcmVuIiwiaW50ZXJ2YWxCaW5zIiwidXNlTWVtbyIsImdldEludGVydmFsQmlucyIsInN0ZXBzIiwibWFwIiwieCIsIngwIiwidXBkYXRlQW5pbWF0aW9uIiwidXNlQ2FsbGJhY2siLCJ2YWx1ZSIsImFuaW1hdGlvbldpbmRvdyIsIkFOSU1BVElPTl9XSU5ET1ciLCJpbnRlcnZhbCIsImlkeCIsIngxIiwiY3JlYXRlRWxlbWVudCIsImtleSIsImRvbWFpbiIsInNwZWVkIiwiaXNBbmltYXRpbmciLCJMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJGYWN0b3J5IiwiTGF5ZXJBbmltYXRpb25Db250cm9sbGVyIiwiX3JlZjIiLCJhbmltYXRpb25Db25maWciLCJzZXRMYXllckFuaW1hdGlvblRpbWUiLCJOdW1iZXIiLCJjdXJyZW50VGltZSIsInRpbWVTdGVwcyIsInBvaW50IiwiQm90dG9tV2lkZ2V0RmFjdG9yeSIsIlRpbWVXaWRnZXRGYWN0b3J5IiwiQW5pbWF0aW9uQ29udHJvbEZhY3RvcnkiLCJUaW1lV2lkZ2V0IiwiQW5pbWF0aW9uQ29udHJvbCIsIkJvdHRvbVdpZGdldCIsIl91aVN0YXRlJG1hcENvbnRyb2xzIiwiX3VpU3RhdGUkbWFwQ29udHJvbHMkIiwiX3VpU3RhdGUkbWFwQ29udHJvbHMyIiwiX3VpU3RhdGUkbWFwQ29udHJvbHMzIiwiZGF0YXNldHMiLCJmaWx0ZXJzIiwidmlzU3RhdGVBY3Rpb25zIiwiY29udGFpbmVyVyIsInVpU3RhdGUiLCJzaWRlUGFuZWxXaWR0aCIsImxheWVycyIsImFjdGl2ZVNpZGVQYW5lbCIsInJlYWRPbmx5IiwiaXNPcGVuIiwiQm9vbGVhbiIsImVubGFyZ2VkRmlsdGVySWR4IiwiZmluZEluZGV4IiwiZiIsImVubGFyZ2VkIiwidHlwZSIsIkZJTFRFUl9UWVBFUyIsInRpbWVSYW5nZSIsImFuaW1hdGVkRmlsdGVySWR4IiwiYW5pbWF0ZWRGaWx0ZXIiLCJpc0xlZ2VuZFBpbm5lZCIsIm1hcENvbnRyb2xzIiwibWFwTGVnZW5kIiwic2hvdyIsImFjdGl2ZSIsInNwYWNlRm9yTGVnZW5kV2lkdGgiLCJESU1FTlNJT05TIiwibWFwQ29udHJvbCIsInBpbm5lZCIsInJpZ2h0IiwiZW5sYXJnZWRGaWx0ZXJXaWR0aCIsImFuaW1hdGFibGVMYXllciIsImwiLCJjb25maWciLCJhbmltYXRpb24iLCJlbmFibGVkIiwiaXNWaXNpYmxlIiwicmVhZHlUb0FuaW1hdGlvbiIsIkFycmF5IiwiaXNBcnJheSIsImlzRmluaXRlIiwic2hvd0Zsb2F0aW5nVGltZURpc3BsYXkiLCJsZW5ndGgiLCJzaG93QW5pbWF0aW9uQ29udHJvbCIsImhpZGVDb250cm9sIiwic2hvd1RpbWVXaWRnZXQiLCJrZXlzIiwiTWF0aCIsIm1pbiIsInN0eWxlIiwibWFyZ2luUmlnaHQiLCJjbGFzc05hbWUiLCJzdGFydCIsInBhdXNlIiwicmVzZXQiLCJ1cGRhdGVBbmltYXRpb25TcGVlZCIsInVwZGF0ZUxheWVyQW5pbWF0aW9uU3BlZWQiLCJ0b2dnbGVBbmltYXRpb24iLCJ0b2dnbGVMYXllckFuaW1hdGlvbiIsImlzQW5pbWF0YWJsZSIsInJlc2V0QW5pbWF0aW9uIiwiaW5kZXgiLCJzaG93VGltZURpc3BsYXkiLCJzZXRGaWx0ZXJQbG90Iiwic2V0RmlsdGVyQW5pbWF0aW9uV2luZG93IiwidG9nZ2xlRmlsdGVyQW5pbWF0aW9uIiwidXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWQiLCJlbmxhcmdlRmlsdGVyIiwiZm9yd2FyZFJlZiIsInJlZiIsIl9leHRlbmRzMiIsInJvb3RSZWYiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9ib3R0b20td2lkZ2V0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMjIgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQgUmVhY3QsIHt1c2VDYWxsYmFjaywgZm9yd2FyZFJlZiwgdXNlTWVtb30gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQgVGltZVdpZGdldEZhY3RvcnkgZnJvbSAnLi9maWx0ZXJzL3RpbWUtd2lkZ2V0JztcbmltcG9ydCBBbmltYXRpb25Db250cm9sRmFjdG9yeSBmcm9tICcuL2NvbW1vbi9hbmltYXRpb24tY29udHJvbC9hbmltYXRpb24tY29udHJvbCc7XG5pbXBvcnQgQW5pbWF0aW9uQ29udHJvbGxlckZhY3RvcnkgZnJvbSAnLi9jb21tb24vYW5pbWF0aW9uLWNvbnRyb2wvYW5pbWF0aW9uLWNvbnRyb2xsZXInO1xuaW1wb3J0IHtBTklNQVRJT05fV0lORE9XLCBESU1FTlNJT05TLCBGSUxURVJfVFlQRVN9IGZyb20gJ2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzJztcbmltcG9ydCB7Z2V0SW50ZXJ2YWxCaW5zfSBmcm9tICd1dGlscy9maWx0ZXItdXRpbHMnO1xuaW1wb3J0IHttZWRpYX0gZnJvbSAnc3R5bGVzL21lZGlhLWJyZWFrcG9pbnRzJztcbmltcG9ydCB7QW5pbWF0aW9uQ29uZmlnLCBUaW1lUmFuZ2VGaWx0ZXJ9IGZyb20gJ3JlZHVjZXJzJztcbmltcG9ydCB7Ym90dG9tV2lkZ2V0U2VsZWN0b3J9IGZyb20gJy4va2VwbGVyLWdsJztcblxuY29uc3QgbWF4V2lkdGggPSAxMDgwO1xuXG5pbnRlcmZhY2UgQm90dG9tV2lkZ2V0Q29udGFpbmVyUHJvcHMge1xuICBoYXNQYWRkaW5nPzogYm9vbGVhbjtcbiAgd2lkdGg/OiBudW1iZXI7XG59XG5cbmNvbnN0IEJvdHRvbVdpZGdldENvbnRhaW5lciA9IHN0eWxlZC5kaXY8Qm90dG9tV2lkZ2V0Q29udGFpbmVyUHJvcHM+YFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBwYWRkaW5nLXRvcDogJHtwcm9wcyA9PiAocHJvcHMuaGFzUGFkZGluZyA/IHByb3BzLnRoZW1lLmJvdHRvbVdpZGdldFBhZGRpbmdUb3AgOiAwKX1weDtcbiAgcGFkZGluZy1yaWdodDogJHtwcm9wcyA9PiAocHJvcHMuaGFzUGFkZGluZyA/IHByb3BzLnRoZW1lLmJvdHRvbVdpZGdldFBhZGRpbmdSaWdodCA6IDApfXB4O1xuICBwYWRkaW5nLWJvdHRvbTogJHtwcm9wcyA9PiAocHJvcHMuaGFzUGFkZGluZyA/IHByb3BzLnRoZW1lLmJvdHRvbVdpZGdldFBhZGRpbmdCb3R0b20gOiAwKX1weDtcbiAgcGFkZGluZy1sZWZ0OiAke3Byb3BzID0+IChwcm9wcy5oYXNQYWRkaW5nID8gcHJvcHMudGhlbWUuYm90dG9tV2lkZ2V0UGFkZGluZ0xlZnQgOiAwKX1weDtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmUgIWltcG9ydGFudDsgLyogcHJldmVudCBwYWRkaW5nIGZyb20gYmxvY2tpbmcgaW5wdXQgKi9cbiAgJiA+ICoge1xuICAgIC8qIGFsbCBjaGlsZHJlbiBzaG91bGQgYWxsb3cgaW5wdXQgKi9cbiAgICBwb2ludGVyLWV2ZW50czogYWxsO1xuICB9XG4gIHdpZHRoOiAke3Byb3BzID0+IHByb3BzLndpZHRofXB4O1xuICB6LWluZGV4OiAxO1xuICAke21lZGlhLnBvcnRhYmxlYHBhZGRpbmc6IDA7YH1cbmA7XG5cbmludGVyZmFjZSBGaWx0ZXJBbmltYXRpb25Db250cm9sbGVyUHJvcHMge1xuICBjaGlsZHJlbj86IEZ1bmN0aW9uO1xuICBmaWx0ZXI6IFRpbWVSYW5nZUZpbHRlciAmIHthbmltYXRpb25XaW5kb3c/OiBzdHJpbmd9O1xuICBmaWx0ZXJJZHg6IG51bWJlcjtcbiAgc2V0RmlsdGVyQW5pbWF0aW9uVGltZTogKGlkeDogbnVtYmVyLCB2YWx1ZTogc3RyaW5nLCBhOiBhbnlbXSkgPT4gdm9pZDtcbn1cblxuRmlsdGVyQW5pbWF0aW9uQ29udHJvbGxlckZhY3RvcnkuZGVwcyA9IFtBbmltYXRpb25Db250cm9sbGVyRmFjdG9yeV07XG5leHBvcnQgZnVuY3Rpb24gRmlsdGVyQW5pbWF0aW9uQ29udHJvbGxlckZhY3RvcnkoXG4gIEFuaW1hdGlvbkNvbnRyb2xsZXI6IFJldHVyblR5cGU8dHlwZW9mIEFuaW1hdGlvbkNvbnRyb2xsZXJGYWN0b3J5PlxuKSB7XG4gIGNvbnN0IEZpbHRlckFuaW1hdGlvbkNvbnRyb2xsZXI6IFJlYWN0LkZDPEZpbHRlckFuaW1hdGlvbkNvbnRyb2xsZXJQcm9wcz4gPSAoe1xuICAgIGZpbHRlcixcbiAgICBmaWx0ZXJJZHgsXG4gICAgc2V0RmlsdGVyQW5pbWF0aW9uVGltZSxcbiAgICBjaGlsZHJlblxuICB9KSA9PiB7XG4gICAgY29uc3QgaW50ZXJ2YWxCaW5zID0gdXNlTWVtbygoKSA9PiBnZXRJbnRlcnZhbEJpbnMoZmlsdGVyKSwgW2ZpbHRlcl0pO1xuXG4gICAgY29uc3Qgc3RlcHMgPSB1c2VNZW1vKCgpID0+IChpbnRlcnZhbEJpbnMgPyBpbnRlcnZhbEJpbnMubWFwKHggPT4geC54MCkgOiBudWxsKSwgW1xuICAgICAgaW50ZXJ2YWxCaW5zXG4gICAgXSk7XG5cbiAgICBjb25zdCB1cGRhdGVBbmltYXRpb24gPSB1c2VDYWxsYmFjayhcbiAgICAgIHZhbHVlID0+IHtcbiAgICAgICAgc3dpdGNoIChmaWx0ZXIuYW5pbWF0aW9uV2luZG93KSB7XG4gICAgICAgICAgY2FzZSBBTklNQVRJT05fV0lORE9XLmludGVydmFsOlxuICAgICAgICAgICAgY29uc3QgaWR4ID0gdmFsdWVbMV07XG4gICAgICAgICAgICBzZXRGaWx0ZXJBbmltYXRpb25UaW1lKGZpbHRlcklkeCwgJ3ZhbHVlJywgW1xuICAgICAgICAgICAgICBpbnRlcnZhbEJpbnNbaWR4XS54MCxcbiAgICAgICAgICAgICAgaW50ZXJ2YWxCaW5zW2lkeF0ueDEgLSAxXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBzZXRGaWx0ZXJBbmltYXRpb25UaW1lKGZpbHRlcklkeCwgJ3ZhbHVlJywgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBbZmlsdGVySWR4LCBpbnRlcnZhbEJpbnMsIGZpbHRlci5hbmltYXRpb25XaW5kb3csIHNldEZpbHRlckFuaW1hdGlvblRpbWVdXG4gICAgKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8QW5pbWF0aW9uQ29udHJvbGxlclxuICAgICAgICBrZXk9XCJmaWx0ZXItY29udHJvbFwiXG4gICAgICAgIHZhbHVlPXtmaWx0ZXIudmFsdWV9XG4gICAgICAgIGRvbWFpbj17ZmlsdGVyLmRvbWFpbn1cbiAgICAgICAgc3BlZWQ9e2ZpbHRlci5zcGVlZH1cbiAgICAgICAgaXNBbmltYXRpbmc9e2ZpbHRlci5pc0FuaW1hdGluZ31cbiAgICAgICAgYW5pbWF0aW9uV2luZG93PXtmaWx0ZXIuYW5pbWF0aW9uV2luZG93fVxuICAgICAgICBzdGVwcz17c3RlcHN9XG4gICAgICAgIHVwZGF0ZUFuaW1hdGlvbj17dXBkYXRlQW5pbWF0aW9ufVxuICAgICAgICBjaGlsZHJlbj17Y2hpbGRyZW59XG4gICAgICAvPlxuICAgICk7XG4gIH07XG4gIHJldHVybiBGaWx0ZXJBbmltYXRpb25Db250cm9sbGVyO1xufVxuXG5pbnRlcmZhY2UgTGF5ZXJBbmltYXRpb25Db250cm9sbGVyUHJvcHMge1xuICBjaGlsZHJlbj86IEZ1bmN0aW9uO1xuICBhbmltYXRpb25Db25maWc6IEFuaW1hdGlvbkNvbmZpZyAmIHt0aW1lU3RlcHM/OiBudW1iZXJbXSB8IG51bGx9O1xuICBzZXRMYXllckFuaW1hdGlvblRpbWU6ICh4OiBudW1iZXIpID0+IHZvaWQ7XG59XG5cbkxheWVyQW5pbWF0aW9uQ29udHJvbGxlckZhY3RvcnkuZGVwcyA9IFtBbmltYXRpb25Db250cm9sbGVyRmFjdG9yeV07XG5leHBvcnQgZnVuY3Rpb24gTGF5ZXJBbmltYXRpb25Db250cm9sbGVyRmFjdG9yeShcbiAgQW5pbWF0aW9uQ29udHJvbGxlcjogUmV0dXJuVHlwZTx0eXBlb2YgQW5pbWF0aW9uQ29udHJvbGxlckZhY3Rvcnk+XG4pIHtcbiAgY29uc3QgTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOiBSZWFjdC5GQzxMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJQcm9wcz4gPSAoe1xuICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICBzZXRMYXllckFuaW1hdGlvblRpbWUsXG4gICAgY2hpbGRyZW5cbiAgfSkgPT4gKFxuICAgIDxBbmltYXRpb25Db250cm9sbGVyPG51bWJlcj5cbiAgICAgIGtleT1cImxheWVyLWNvbnRyb2xcIlxuICAgICAgdmFsdWU9e051bWJlcihhbmltYXRpb25Db25maWcuY3VycmVudFRpbWUpfVxuICAgICAgZG9tYWluPXthbmltYXRpb25Db25maWcuZG9tYWlufVxuICAgICAgc3BlZWQ9e2FuaW1hdGlvbkNvbmZpZy5zcGVlZH1cbiAgICAgIGlzQW5pbWF0aW5nPXthbmltYXRpb25Db25maWcuaXNBbmltYXRpbmd9XG4gICAgICB1cGRhdGVBbmltYXRpb249e3NldExheWVyQW5pbWF0aW9uVGltZX1cbiAgICAgIHN0ZXBzPXthbmltYXRpb25Db25maWcudGltZVN0ZXBzfVxuICAgICAgYW5pbWF0aW9uV2luZG93PXtcbiAgICAgICAgYW5pbWF0aW9uQ29uZmlnLnRpbWVTdGVwcyA/IEFOSU1BVElPTl9XSU5ET1cuaW50ZXJ2YWwgOiBBTklNQVRJT05fV0lORE9XLnBvaW50XG4gICAgICB9XG4gICAgICBjaGlsZHJlbj17Y2hpbGRyZW59XG4gICAgLz5cbiAgKTtcbiAgcmV0dXJuIExheWVyQW5pbWF0aW9uQ29udHJvbGxlcjtcbn1cblxudHlwZSBCb3R0b21XaWRnZXRQcm9wcyA9IHtcbiAgY29udGFpbmVyVzogbnVtYmVyO1xufSAmIFJldHVyblR5cGU8dHlwZW9mIGJvdHRvbVdpZGdldFNlbGVjdG9yPjtcblxuQm90dG9tV2lkZ2V0RmFjdG9yeS5kZXBzID0gW1xuICBUaW1lV2lkZ2V0RmFjdG9yeSxcbiAgQW5pbWF0aW9uQ29udHJvbEZhY3RvcnksXG4gIEZpbHRlckFuaW1hdGlvbkNvbnRyb2xsZXJGYWN0b3J5LFxuICBMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJGYWN0b3J5XG5dO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBjb21wbGV4aXR5ICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBCb3R0b21XaWRnZXRGYWN0b3J5KFxuICBUaW1lV2lkZ2V0OiBSZXR1cm5UeXBlPHR5cGVvZiBUaW1lV2lkZ2V0RmFjdG9yeT4sXG4gIEFuaW1hdGlvbkNvbnRyb2w6IFJldHVyblR5cGU8dHlwZW9mIEFuaW1hdGlvbkNvbnRyb2xGYWN0b3J5PixcbiAgRmlsdGVyQW5pbWF0aW9uQ29udHJvbGxlcjogUmV0dXJuVHlwZTx0eXBlb2YgRmlsdGVyQW5pbWF0aW9uQ29udHJvbGxlckZhY3Rvcnk+LFxuICBMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6IFJldHVyblR5cGU8dHlwZW9mIExheWVyQW5pbWF0aW9uQ29udHJvbGxlckZhY3Rvcnk+XG4pIHtcbiAgY29uc3QgQm90dG9tV2lkZ2V0ID0gKHByb3BzOiBCb3R0b21XaWRnZXRQcm9wcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGRhdGFzZXRzLFxuICAgICAgZmlsdGVycyxcbiAgICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICAgIHZpc1N0YXRlQWN0aW9ucyxcbiAgICAgIGNvbnRhaW5lclcsXG4gICAgICB1aVN0YXRlLFxuICAgICAgc2lkZVBhbmVsV2lkdGgsXG4gICAgICBsYXllcnNcbiAgICB9ID0gcHJvcHM7XG5cbiAgICBjb25zdCB7YWN0aXZlU2lkZVBhbmVsLCByZWFkT25seX0gPSB1aVN0YXRlO1xuICAgIGNvbnN0IGlzT3BlbiA9IEJvb2xlYW4oYWN0aXZlU2lkZVBhbmVsKTtcblxuICAgIGNvbnN0IGVubGFyZ2VkRmlsdGVySWR4ID0gdXNlTWVtbyhcbiAgICAgICgpID0+IGZpbHRlcnMuZmluZEluZGV4KGYgPT4gZi5lbmxhcmdlZCAmJiBmLnR5cGUgPT09IEZJTFRFUl9UWVBFUy50aW1lUmFuZ2UpLFxuICAgICAgW2ZpbHRlcnNdXG4gICAgKTtcbiAgICBjb25zdCBhbmltYXRlZEZpbHRlcklkeCA9IHVzZU1lbW8oKCkgPT4gZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlzQW5pbWF0aW5nKSwgW2ZpbHRlcnNdKTtcbiAgICBjb25zdCBhbmltYXRlZEZpbHRlciA9IGFuaW1hdGVkRmlsdGVySWR4ID4gLTEgPyBmaWx0ZXJzW2FuaW1hdGVkRmlsdGVySWR4XSA6IG51bGw7XG5cbiAgICBjb25zdCBpc0xlZ2VuZFBpbm5lZCA9XG4gICAgICB1aVN0YXRlLm1hcENvbnRyb2xzPy5tYXBMZWdlbmQ/LnNob3cgJiYgdWlTdGF0ZS5tYXBDb250cm9scz8ubWFwTGVnZW5kPy5hY3RpdmU7XG4gICAgY29uc3Qgc3BhY2VGb3JMZWdlbmRXaWR0aCA9IGlzTGVnZW5kUGlubmVkXG4gICAgICA/IERJTUVOU0lPTlMubWFwQ29udHJvbC53aWR0aCArIERJTUVOU0lPTlMubWFwQ29udHJvbC5tYXBMZWdlbmQucGlubmVkLnJpZ2h0XG4gICAgICA6IDA7XG5cbiAgICBjb25zdCBlbmxhcmdlZEZpbHRlcldpZHRoID1cbiAgICAgIChpc09wZW4gPyBjb250YWluZXJXIC0gc2lkZVBhbmVsV2lkdGggOiBjb250YWluZXJXKSAtIHNwYWNlRm9yTGVnZW5kV2lkdGg7XG5cbiAgICAvLyBzaG93IHBsYXliYWNrIGNvbnRyb2wgaWYgbGF5ZXJzIGNvbnRhaW4gdHJpcCBsYXllciAmIGF0IGxlYXN0IG9uZSB0cmlwIGxheWVyIGlzIHZpc2libGVcbiAgICBjb25zdCBhbmltYXRhYmxlTGF5ZXIgPSB1c2VNZW1vKFxuICAgICAgKCkgPT5cbiAgICAgICAgbGF5ZXJzLmZpbHRlcihsID0+IGwuY29uZmlnLmFuaW1hdGlvbiAmJiBsLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCAmJiBsLmNvbmZpZy5pc1Zpc2libGUpLFxuICAgICAgW2xheWVyc11cbiAgICApO1xuXG4gICAgY29uc3QgcmVhZHlUb0FuaW1hdGlvbiA9XG4gICAgICBBcnJheS5pc0FycmF5KGFuaW1hdGlvbkNvbmZpZy5kb21haW4pICYmIE51bWJlci5pc0Zpbml0ZShhbmltYXRpb25Db25maWcuY3VycmVudFRpbWUpO1xuICAgIC8vIGlmIGFuaW1hdGlvbiBjb250cm9sIGlzIHNob3dpbmcsIGhpZGUgdGltZSBkaXNwbGF5IGluIHRpbWUgc2xpZGVyXG4gICAgY29uc3Qgc2hvd0Zsb2F0aW5nVGltZURpc3BsYXkgPSAhYW5pbWF0YWJsZUxheWVyLmxlbmd0aDtcbiAgICBjb25zdCBzaG93QW5pbWF0aW9uQ29udHJvbCA9XG4gICAgICBhbmltYXRhYmxlTGF5ZXIubGVuZ3RoICYmIHJlYWR5VG9BbmltYXRpb24gJiYgIWFuaW1hdGlvbkNvbmZpZy5oaWRlQ29udHJvbDtcbiAgICBjb25zdCBzaG93VGltZVdpZGdldCA9IGVubGFyZ2VkRmlsdGVySWR4ID4gLTEgJiYgT2JqZWN0LmtleXMoZGF0YXNldHMpLmxlbmd0aCA+IDA7XG5cbiAgICAvLyBpZiBmaWx0ZXIgaXMgbm90IGFuaW1hdGluZywgcGFzcyBpbiBlbmxhcmdlZCBmaWx0ZXIgaGVyZSBiZWNhdXNlXG4gICAgLy8gYW5pbWF0aW9uIGNvbnRyb2xsZXIgbmVlZHMgdG8gY2FsbCByZXNldCBvbiBpdFxuICAgIGNvbnN0IGZpbHRlciA9IChhbmltYXRlZEZpbHRlciBhcyBUaW1lUmFuZ2VGaWx0ZXIpIHx8IGZpbHRlcnNbZW5sYXJnZWRGaWx0ZXJJZHhdO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxCb3R0b21XaWRnZXRDb250YWluZXJcbiAgICAgICAgd2lkdGg9e01hdGgubWluKG1heFdpZHRoLCBlbmxhcmdlZEZpbHRlcldpZHRoKX1cbiAgICAgICAgc3R5bGU9e3ttYXJnaW5SaWdodDogc3BhY2VGb3JMZWdlbmRXaWR0aH19XG4gICAgICAgIGNsYXNzTmFtZT1cImJvdHRvbS13aWRnZXQtLWNvbnRhaW5lclwiXG4gICAgICAgIGhhc1BhZGRpbmc9e3Nob3dBbmltYXRpb25Db250cm9sIHx8IHNob3dUaW1lV2lkZ2V0fVxuICAgICAgPlxuICAgICAgICA8TGF5ZXJBbmltYXRpb25Db250cm9sbGVyXG4gICAgICAgICAgYW5pbWF0aW9uQ29uZmlnPXthbmltYXRpb25Db25maWd9XG4gICAgICAgICAgc2V0TGF5ZXJBbmltYXRpb25UaW1lPXt2aXNTdGF0ZUFjdGlvbnMuc2V0TGF5ZXJBbmltYXRpb25UaW1lfVxuICAgICAgICA+XG4gICAgICAgICAgeyhpc0FuaW1hdGluZywgc3RhcnQsIHBhdXNlLCByZXNldCkgPT5cbiAgICAgICAgICAgIHNob3dBbmltYXRpb25Db250cm9sID8gKFxuICAgICAgICAgICAgICA8QW5pbWF0aW9uQ29udHJvbFxuICAgICAgICAgICAgICAgIGFuaW1hdGlvbkNvbmZpZz17YW5pbWF0aW9uQ29uZmlnfVxuICAgICAgICAgICAgICAgIHNldExheWVyQW5pbWF0aW9uVGltZT17dmlzU3RhdGVBY3Rpb25zLnNldExheWVyQW5pbWF0aW9uVGltZX1cbiAgICAgICAgICAgICAgICB1cGRhdGVBbmltYXRpb25TcGVlZD17dmlzU3RhdGVBY3Rpb25zLnVwZGF0ZUxheWVyQW5pbWF0aW9uU3BlZWR9XG4gICAgICAgICAgICAgICAgdG9nZ2xlQW5pbWF0aW9uPXt2aXNTdGF0ZUFjdGlvbnMudG9nZ2xlTGF5ZXJBbmltYXRpb259XG4gICAgICAgICAgICAgICAgaXNBbmltYXRhYmxlPXshYW5pbWF0ZWRGaWx0ZXJ9XG4gICAgICAgICAgICAgICAgaXNBbmltYXRpbmc9e2lzQW5pbWF0aW5nfVxuICAgICAgICAgICAgICAgIHJlc2V0QW5pbWF0aW9uPXtyZXNldH1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiBudWxsXG4gICAgICAgICAgfVxuICAgICAgICA8L0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj5cbiAgICAgICAge2ZpbHRlciAmJiAoXG4gICAgICAgICAgPEZpbHRlckFuaW1hdGlvbkNvbnRyb2xsZXJcbiAgICAgICAgICAgIGZpbHRlcj17ZmlsdGVyIGFzIGFueX1cbiAgICAgICAgICAgIGZpbHRlcklkeD17YW5pbWF0ZWRGaWx0ZXJJZHggPiAtMSA/IGFuaW1hdGVkRmlsdGVySWR4IDogZW5sYXJnZWRGaWx0ZXJJZHh9XG4gICAgICAgICAgICBzZXRGaWx0ZXJBbmltYXRpb25UaW1lPXt2aXNTdGF0ZUFjdGlvbnMuc2V0RmlsdGVyQW5pbWF0aW9uVGltZX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7KGlzQW5pbWF0aW5nLCBzdGFydCwgcGF1c2UsIHJlc2V0QW5pbWF0aW9uKSA9PlxuICAgICAgICAgICAgICBzaG93VGltZVdpZGdldCA/IChcbiAgICAgICAgICAgICAgICA8VGltZVdpZGdldFxuICAgICAgICAgICAgICAgICAgLy8gVGltZVdpZGdldCB1c2VzIFJlYWN0Lm1lbW8sIGhlcmUgd2UgcGFzcyB3aWR0aFxuICAgICAgICAgICAgICAgICAgLy8gZXZlbiB0aG91Z2ggaXQgZG9lc250IHVzZSBpdCwgdG8gZm9yY2UgcmVyZW5kZXJcbiAgICAgICAgICAgICAgICAgIGZpbHRlcj17ZmlsdGVyc1tlbmxhcmdlZEZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyfVxuICAgICAgICAgICAgICAgICAgaW5kZXg9e2VubGFyZ2VkRmlsdGVySWR4fVxuICAgICAgICAgICAgICAgICAgZGF0YXNldHM9e2RhdGFzZXRzfVxuICAgICAgICAgICAgICAgICAgcmVhZE9ubHk9e3JlYWRPbmx5fVxuICAgICAgICAgICAgICAgICAgc2hvd1RpbWVEaXNwbGF5PXtzaG93RmxvYXRpbmdUaW1lRGlzcGxheX1cbiAgICAgICAgICAgICAgICAgIHNldEZpbHRlclBsb3Q9e3Zpc1N0YXRlQWN0aW9ucy5zZXRGaWx0ZXJQbG90fVxuICAgICAgICAgICAgICAgICAgc2V0RmlsdGVyQW5pbWF0aW9uVGltZT17dmlzU3RhdGVBY3Rpb25zLnNldEZpbHRlckFuaW1hdGlvblRpbWV9XG4gICAgICAgICAgICAgICAgICBzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3c9e3Zpc1N0YXRlQWN0aW9ucy5zZXRGaWx0ZXJBbmltYXRpb25XaW5kb3d9XG4gICAgICAgICAgICAgICAgICB0b2dnbGVBbmltYXRpb249e3Zpc1N0YXRlQWN0aW9ucy50b2dnbGVGaWx0ZXJBbmltYXRpb259XG4gICAgICAgICAgICAgICAgICB1cGRhdGVBbmltYXRpb25TcGVlZD17dmlzU3RhdGVBY3Rpb25zLnVwZGF0ZUZpbHRlckFuaW1hdGlvblNwZWVkfVxuICAgICAgICAgICAgICAgICAgZW5sYXJnZUZpbHRlcj17dmlzU3RhdGVBY3Rpb25zLmVubGFyZ2VGaWx0ZXJ9XG4gICAgICAgICAgICAgICAgICByZXNldEFuaW1hdGlvbj17cmVzZXRBbmltYXRpb259XG4gICAgICAgICAgICAgICAgICBpc0FuaW1hdGFibGU9eyFhbmltYXRpb25Db25maWcgfHwgIWFuaW1hdGlvbkNvbmZpZy5pc0FuaW1hdGluZ31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApIDogbnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvRmlsdGVyQW5pbWF0aW9uQ29udHJvbGxlcj5cbiAgICAgICAgKX1cbiAgICAgIDwvQm90dG9tV2lkZ2V0Q29udGFpbmVyPlxuICAgICk7XG4gIH07XG5cbiAgLyogZXNsaW50LWRpc2FibGUgcmVhY3QvZGlzcGxheS1uYW1lICovXG4gIC8vIEB0cy1pZ25vcmVcbiAgcmV0dXJuIGZvcndhcmRSZWYoKHByb3BzOiBCb3R0b21XaWRnZXRQcm9wcywgcmVmKSA9PiA8Qm90dG9tV2lkZ2V0IHsuLi5wcm9wc30gcm9vdFJlZj17cmVmfSAvPik7XG4gIC8qIGVzbGludC1lbmFibGUgcmVhY3QvZGlzcGxheS1uYW1lICovXG59XG4vKiBlc2xpbnQtZW5hYmxlIGNvbXBsZXhpdHkgKi9cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQW9CQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxpQkFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsV0FBQSxHQUFBRCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUksaUJBQUEsR0FBQUYsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFLLG9CQUFBLEdBQUFILHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBTSxnQkFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sWUFBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEsaUJBQUEsR0FBQVIsT0FBQTtBQUErQyxTQUFBUyx5QkFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxtQkFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBRix3QkFBQSxZQUFBQSxDQUFBQyxDQUFBLFdBQUFBLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLEtBQUFGLENBQUE7QUFBQSxTQUFBWCx3QkFBQVcsQ0FBQSxFQUFBRSxDQUFBLFNBQUFBLENBQUEsSUFBQUYsQ0FBQSxJQUFBQSxDQUFBLENBQUFJLFVBQUEsU0FBQUosQ0FBQSxlQUFBQSxDQUFBLHVCQUFBQSxDQUFBLHlCQUFBQSxDQUFBLFdBQUFLLE9BQUEsRUFBQUwsQ0FBQSxRQUFBRyxDQUFBLEdBQUFKLHdCQUFBLENBQUFHLENBQUEsT0FBQUMsQ0FBQSxJQUFBQSxDQUFBLENBQUFHLEdBQUEsQ0FBQU4sQ0FBQSxVQUFBRyxDQUFBLENBQUFJLEdBQUEsQ0FBQVAsQ0FBQSxPQUFBUSxDQUFBLEtBQUFDLFNBQUEsVUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLGNBQUEsSUFBQUQsTUFBQSxDQUFBRSx3QkFBQSxXQUFBQyxDQUFBLElBQUFkLENBQUEsb0JBQUFjLENBQUEsT0FBQUMsY0FBQSxDQUFBQyxJQUFBLENBQUFoQixDQUFBLEVBQUFjLENBQUEsU0FBQUcsQ0FBQSxHQUFBUCxDQUFBLEdBQUFDLE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQWIsQ0FBQSxFQUFBYyxDQUFBLFVBQUFHLENBQUEsS0FBQUEsQ0FBQSxDQUFBVixHQUFBLElBQUFVLENBQUEsQ0FBQUMsR0FBQSxJQUFBUCxNQUFBLENBQUFDLGNBQUEsQ0FBQUosQ0FBQSxFQUFBTSxDQUFBLEVBQUFHLENBQUEsSUFBQVQsQ0FBQSxDQUFBTSxDQUFBLElBQUFkLENBQUEsQ0FBQWMsQ0FBQSxZQUFBTixDQUFBLENBQUFILE9BQUEsR0FBQUwsQ0FBQSxFQUFBRyxDQUFBLElBQUFBLENBQUEsQ0FBQWUsR0FBQSxDQUFBbEIsQ0FBQSxFQUFBUSxDQUFBLEdBQUFBLENBQUE7QUEzQi9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQWFBLE1BQU1XLFFBQVEsR0FBRyxJQUFJO0FBT3JCLE1BQU1DLHFCQUFxQixHQUFHQyx5QkFBTSxDQUFDQyxHQUErQjtBQUNwRTtBQUNBO0FBQ0EsaUJBQWlCQyxLQUFLLElBQUtBLEtBQUssQ0FBQ0MsVUFBVSxHQUFHRCxLQUFLLENBQUNFLEtBQUssQ0FBQ0Msc0JBQXNCLEdBQUcsQ0FBRTtBQUNyRixtQkFBbUJILEtBQUssSUFBS0EsS0FBSyxDQUFDQyxVQUFVLEdBQUdELEtBQUssQ0FBQ0UsS0FBSyxDQUFDRSx3QkFBd0IsR0FBRyxDQUFFO0FBQ3pGLG9CQUFvQkosS0FBSyxJQUFLQSxLQUFLLENBQUNDLFVBQVUsR0FBR0QsS0FBSyxDQUFDRSxLQUFLLENBQUNHLHlCQUF5QixHQUFHLENBQUU7QUFDM0Ysa0JBQWtCTCxLQUFLLElBQUtBLEtBQUssQ0FBQ0MsVUFBVSxHQUFHRCxLQUFLLENBQUNFLEtBQUssQ0FBQ0ksdUJBQXVCLEdBQUcsQ0FBRTtBQUN2RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBV04sS0FBSyxJQUFJQSxLQUFLLENBQUNPLEtBQUs7QUFDL0I7QUFDQSxJQUFJQyx1QkFBSyxDQUFDQyxRQUFRLGFBQWE7QUFDL0IsQ0FBQztBQVNEQyxnQ0FBZ0MsQ0FBQ0MsSUFBSSxHQUFHLENBQUNDLDRCQUEwQixDQUFDO0FBQzdELFNBQVNGLGdDQUFnQ0EsQ0FDOUNHLG1CQUFrRSxFQUNsRTtFQUNBLE1BQU1DLHlCQUFtRSxHQUFHQyxJQUFBLElBS3RFO0lBQUEsSUFMdUU7TUFDM0VDLE1BQU07TUFDTkMsU0FBUztNQUNUQyxzQkFBc0I7TUFDdEJDO0lBQ0YsQ0FBQyxHQUFBSixJQUFBO0lBQ0MsTUFBTUssWUFBWSxHQUFHLElBQUFDLGNBQU8sRUFBQyxNQUFNLElBQUFDLDRCQUFlLEVBQUNOLE1BQU0sQ0FBQyxFQUFFLENBQUNBLE1BQU0sQ0FBQyxDQUFDO0lBRXJFLE1BQU1PLEtBQUssR0FBRyxJQUFBRixjQUFPLEVBQUMsTUFBT0QsWUFBWSxHQUFHQSxZQUFZLENBQUNJLEdBQUcsQ0FBQ0MsQ0FBQyxJQUFJQSxDQUFDLENBQUNDLEVBQUUsQ0FBQyxHQUFHLElBQUssRUFBRSxDQUMvRU4sWUFBWSxDQUNiLENBQUM7SUFFRixNQUFNTyxlQUFlLEdBQUcsSUFBQUMsa0JBQVcsRUFDakNDLEtBQUssSUFBSTtNQUNQLFFBQVFiLE1BQU0sQ0FBQ2MsZUFBZTtRQUM1QixLQUFLQyxpQ0FBZ0IsQ0FBQ0MsUUFBUTtVQUM1QixNQUFNQyxHQUFHLEdBQUdKLEtBQUssQ0FBQyxDQUFDLENBQUM7VUFDcEJYLHNCQUFzQixDQUFDRCxTQUFTLEVBQUUsT0FBTyxFQUFFLENBQ3pDRyxZQUFZLENBQUNhLEdBQUcsQ0FBQyxDQUFDUCxFQUFFLEVBQ3BCTixZQUFZLENBQUNhLEdBQUcsQ0FBQyxDQUFDQyxFQUFFLEdBQUcsQ0FBQyxDQUN6QixDQUFDO1VBQ0Y7UUFDRjtVQUNFaEIsc0JBQXNCLENBQUNELFNBQVMsRUFBRSxPQUFPLEVBQUVZLEtBQUssQ0FBQztVQUNqRDtNQUNKO0lBQ0YsQ0FBQyxFQUNELENBQUNaLFNBQVMsRUFBRUcsWUFBWSxFQUFFSixNQUFNLENBQUNjLGVBQWUsRUFBRVosc0JBQXNCLENBQzFFLENBQUM7SUFFRCxvQkFDRXJELE1BQUEsQ0FBQWlCLE9BQUEsQ0FBQXFELGFBQUEsQ0FBQ3RCLG1CQUFtQjtNQUNsQnVCLEdBQUcsRUFBQyxnQkFBZ0I7TUFDcEJQLEtBQUssRUFBRWIsTUFBTSxDQUFDYSxLQUFNO01BQ3BCUSxNQUFNLEVBQUVyQixNQUFNLENBQUNxQixNQUFPO01BQ3RCQyxLQUFLLEVBQUV0QixNQUFNLENBQUNzQixLQUFNO01BQ3BCQyxXQUFXLEVBQUV2QixNQUFNLENBQUN1QixXQUFZO01BQ2hDVCxlQUFlLEVBQUVkLE1BQU0sQ0FBQ2MsZUFBZ0I7TUFDeENQLEtBQUssRUFBRUEsS0FBTTtNQUNiSSxlQUFlLEVBQUVBLGVBQWdCO01BQ2pDUixRQUFRLEVBQUVBO0lBQVMsQ0FDcEIsQ0FBQztFQUVOLENBQUM7RUFDRCxPQUFPTCx5QkFBeUI7QUFDbEM7QUFRQTBCLCtCQUErQixDQUFDN0IsSUFBSSxHQUFHLENBQUNDLDRCQUEwQixDQUFDO0FBQzVELFNBQVM0QiwrQkFBK0JBLENBQzdDM0IsbUJBQWtFLEVBQ2xFO0VBQ0EsTUFBTTRCLHdCQUFpRSxHQUFHQyxLQUFBO0lBQUEsSUFBQztNQUN6RUMsZUFBZTtNQUNmQyxxQkFBcUI7TUFDckJ6QjtJQUNGLENBQUMsR0FBQXVCLEtBQUE7SUFBQSxvQkFDQzdFLE1BQUEsQ0FBQWlCLE9BQUEsQ0FBQXFELGFBQUEsQ0FBQ3RCLG1CQUFtQjtNQUNsQnVCLEdBQUcsRUFBQyxlQUFlO01BQ25CUCxLQUFLLEVBQUVnQixNQUFNLENBQUNGLGVBQWUsQ0FBQ0csV0FBVyxDQUFFO01BQzNDVCxNQUFNLEVBQUVNLGVBQWUsQ0FBQ04sTUFBTztNQUMvQkMsS0FBSyxFQUFFSyxlQUFlLENBQUNMLEtBQU07TUFDN0JDLFdBQVcsRUFBRUksZUFBZSxDQUFDSixXQUFZO01BQ3pDWixlQUFlLEVBQUVpQixxQkFBc0I7TUFDdkNyQixLQUFLLEVBQUVvQixlQUFlLENBQUNJLFNBQVU7TUFDakNqQixlQUFlLEVBQ2JhLGVBQWUsQ0FBQ0ksU0FBUyxHQUFHaEIsaUNBQWdCLENBQUNDLFFBQVEsR0FBR0QsaUNBQWdCLENBQUNpQixLQUMxRTtNQUNEN0IsUUFBUSxFQUFFQTtJQUFTLENBQ3BCLENBQUM7RUFBQSxDQUNIO0VBQ0QsT0FBT3NCLHdCQUF3QjtBQUNqQztBQU1BUSxtQkFBbUIsQ0FBQ3RDLElBQUksR0FBRyxDQUN6QnVDLG1CQUFpQixFQUNqQkMseUJBQXVCLEVBQ3ZCekMsZ0NBQWdDLEVBQ2hDOEIsK0JBQStCLENBQ2hDOztBQUVEO0FBQ2UsU0FBU1MsbUJBQW1CQSxDQUN6Q0csVUFBZ0QsRUFDaERDLGdCQUE0RCxFQUM1RHZDLHlCQUE4RSxFQUM5RTJCLHdCQUE0RSxFQUM1RTtFQUNBLE1BQU1hLFlBQVksR0FBSXRELEtBQXdCLElBQUs7SUFBQSxJQUFBdUQsb0JBQUEsRUFBQUMscUJBQUEsRUFBQUMscUJBQUEsRUFBQUMscUJBQUE7SUFDakQsTUFBTTtNQUNKQyxRQUFRO01BQ1JDLE9BQU87TUFDUGpCLGVBQWU7TUFDZmtCLGVBQWU7TUFDZkMsVUFBVTtNQUNWQyxPQUFPO01BQ1BDLGNBQWM7TUFDZEM7SUFDRixDQUFDLEdBQUdqRSxLQUFLO0lBRVQsTUFBTTtNQUFDa0UsZUFBZTtNQUFFQztJQUFRLENBQUMsR0FBR0osT0FBTztJQUMzQyxNQUFNSyxNQUFNLEdBQUdDLE9BQU8sQ0FBQ0gsZUFBZSxDQUFDO0lBRXZDLE1BQU1JLGlCQUFpQixHQUFHLElBQUFqRCxjQUFPLEVBQy9CLE1BQU11QyxPQUFPLENBQUNXLFNBQVMsQ0FBQ0MsQ0FBQyxJQUFJQSxDQUFDLENBQUNDLFFBQVEsSUFBSUQsQ0FBQyxDQUFDRSxJQUFJLEtBQUtDLDZCQUFZLENBQUNDLFNBQVMsQ0FBQyxFQUM3RSxDQUFDaEIsT0FBTyxDQUNWLENBQUM7SUFDRCxNQUFNaUIsaUJBQWlCLEdBQUcsSUFBQXhELGNBQU8sRUFBQyxNQUFNdUMsT0FBTyxDQUFDVyxTQUFTLENBQUNDLENBQUMsSUFBSUEsQ0FBQyxDQUFDakMsV0FBVyxDQUFDLEVBQUUsQ0FBQ3FCLE9BQU8sQ0FBQyxDQUFDO0lBQ3pGLE1BQU1rQixjQUFjLEdBQUdELGlCQUFpQixHQUFHLENBQUMsQ0FBQyxHQUFHakIsT0FBTyxDQUFDaUIsaUJBQWlCLENBQUMsR0FBRyxJQUFJO0lBRWpGLE1BQU1FLGNBQWMsR0FDbEIsRUFBQXhCLG9CQUFBLEdBQUFRLE9BQU8sQ0FBQ2lCLFdBQVcsY0FBQXpCLG9CQUFBLHdCQUFBQyxxQkFBQSxHQUFuQkQsb0JBQUEsQ0FBcUIwQixTQUFTLGNBQUF6QixxQkFBQSx1QkFBOUJBLHFCQUFBLENBQWdDMEIsSUFBSSxPQUFBekIscUJBQUEsR0FBSU0sT0FBTyxDQUFDaUIsV0FBVyxjQUFBdkIscUJBQUEsd0JBQUFDLHFCQUFBLEdBQW5CRCxxQkFBQSxDQUFxQndCLFNBQVMsY0FBQXZCLHFCQUFBLHVCQUE5QkEscUJBQUEsQ0FBZ0N5QixNQUFNO0lBQ2hGLE1BQU1DLG1CQUFtQixHQUFHTCxjQUFjLEdBQ3RDTSwyQkFBVSxDQUFDQyxVQUFVLENBQUMvRSxLQUFLLEdBQUc4RSwyQkFBVSxDQUFDQyxVQUFVLENBQUNMLFNBQVMsQ0FBQ00sTUFBTSxDQUFDQyxLQUFLLEdBQzFFLENBQUM7SUFFTCxNQUFNQyxtQkFBbUIsR0FDdkIsQ0FBQ3JCLE1BQU0sR0FBR04sVUFBVSxHQUFHRSxjQUFjLEdBQUdGLFVBQVUsSUFBSXNCLG1CQUFtQjs7SUFFM0U7SUFDQSxNQUFNTSxlQUFlLEdBQUcsSUFBQXJFLGNBQU8sRUFDN0IsTUFDRTRDLE1BQU0sQ0FBQ2pELE1BQU0sQ0FBQzJFLENBQUMsSUFBSUEsQ0FBQyxDQUFDQyxNQUFNLENBQUNDLFNBQVMsSUFBSUYsQ0FBQyxDQUFDQyxNQUFNLENBQUNDLFNBQVMsQ0FBQ0MsT0FBTyxJQUFJSCxDQUFDLENBQUNDLE1BQU0sQ0FBQ0csU0FBUyxDQUFDLEVBQzVGLENBQUM5QixNQUFNLENBQ1QsQ0FBQztJQUVELE1BQU0rQixnQkFBZ0IsR0FDcEJDLEtBQUssQ0FBQ0MsT0FBTyxDQUFDdkQsZUFBZSxDQUFDTixNQUFNLENBQUMsSUFBSVEsTUFBTSxDQUFDc0QsUUFBUSxDQUFDeEQsZUFBZSxDQUFDRyxXQUFXLENBQUM7SUFDdkY7SUFDQSxNQUFNc0QsdUJBQXVCLEdBQUcsQ0FBQ1YsZUFBZSxDQUFDVyxNQUFNO0lBQ3ZELE1BQU1DLG9CQUFvQixHQUN4QlosZUFBZSxDQUFDVyxNQUFNLElBQUlMLGdCQUFnQixJQUFJLENBQUNyRCxlQUFlLENBQUM0RCxXQUFXO0lBQzVFLE1BQU1DLGNBQWMsR0FBR2xDLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxJQUFJbEYsTUFBTSxDQUFDcUgsSUFBSSxDQUFDOUMsUUFBUSxDQUFDLENBQUMwQyxNQUFNLEdBQUcsQ0FBQzs7SUFFakY7SUFDQTtJQUNBLE1BQU1yRixNQUFNLEdBQUk4RCxjQUFjLElBQXdCbEIsT0FBTyxDQUFDVSxpQkFBaUIsQ0FBQztJQUVoRixvQkFDRXpHLE1BQUEsQ0FBQWlCLE9BQUEsQ0FBQXFELGFBQUEsQ0FBQ3RDLHFCQUFxQjtNQUNwQlUsS0FBSyxFQUFFbUcsSUFBSSxDQUFDQyxHQUFHLENBQUMvRyxRQUFRLEVBQUU2RixtQkFBbUIsQ0FBRTtNQUMvQ21CLEtBQUssRUFBRTtRQUFDQyxXQUFXLEVBQUV6QjtNQUFtQixDQUFFO01BQzFDMEIsU0FBUyxFQUFDLDBCQUEwQjtNQUNwQzdHLFVBQVUsRUFBRXFHLG9CQUFvQixJQUFJRTtJQUFlLGdCQUVuRDNJLE1BQUEsQ0FBQWlCLE9BQUEsQ0FBQXFELGFBQUEsQ0FBQ00sd0JBQXdCO01BQ3ZCRSxlQUFlLEVBQUVBLGVBQWdCO01BQ2pDQyxxQkFBcUIsRUFBRWlCLGVBQWUsQ0FBQ2pCO0lBQXNCLEdBRTVELENBQUNMLFdBQVcsRUFBRXdFLEtBQUssRUFBRUMsS0FBSyxFQUFFQyxLQUFLLEtBQ2hDWCxvQkFBb0IsZ0JBQ2xCekksTUFBQSxDQUFBaUIsT0FBQSxDQUFBcUQsYUFBQSxDQUFDa0IsZ0JBQWdCO01BQ2ZWLGVBQWUsRUFBRUEsZUFBZ0I7TUFDakNDLHFCQUFxQixFQUFFaUIsZUFBZSxDQUFDakIscUJBQXNCO01BQzdEc0Usb0JBQW9CLEVBQUVyRCxlQUFlLENBQUNzRCx5QkFBMEI7TUFDaEVDLGVBQWUsRUFBRXZELGVBQWUsQ0FBQ3dELG9CQUFxQjtNQUN0REMsWUFBWSxFQUFFLENBQUN4QyxjQUFlO01BQzlCdkMsV0FBVyxFQUFFQSxXQUFZO01BQ3pCZ0YsY0FBYyxFQUFFTjtJQUFNLENBQ3ZCLENBQUMsR0FDQSxJQUVrQixDQUFDLEVBQzFCakcsTUFBTSxpQkFDTG5ELE1BQUEsQ0FBQWlCLE9BQUEsQ0FBQXFELGFBQUEsQ0FBQ3JCLHlCQUF5QjtNQUN4QkUsTUFBTSxFQUFFQSxNQUFjO01BQ3RCQyxTQUFTLEVBQUU0RCxpQkFBaUIsR0FBRyxDQUFDLENBQUMsR0FBR0EsaUJBQWlCLEdBQUdQLGlCQUFrQjtNQUMxRXBELHNCQUFzQixFQUFFMkMsZUFBZSxDQUFDM0M7SUFBdUIsR0FFOUQsQ0FBQ3FCLFdBQVcsRUFBRXdFLEtBQUssRUFBRUMsS0FBSyxFQUFFTyxjQUFjLEtBQ3pDZixjQUFjLGdCQUNaM0ksTUFBQSxDQUFBaUIsT0FBQSxDQUFBcUQsYUFBQSxDQUFDaUI7SUFDQztJQUNBO0lBQUE7TUFDQXBDLE1BQU0sRUFBRTRDLE9BQU8sQ0FBQ1UsaUJBQWlCLENBQXFCO01BQ3REa0QsS0FBSyxFQUFFbEQsaUJBQWtCO01BQ3pCWCxRQUFRLEVBQUVBLFFBQVM7TUFDbkJRLFFBQVEsRUFBRUEsUUFBUztNQUNuQnNELGVBQWUsRUFBRXJCLHVCQUF3QjtNQUN6Q3NCLGFBQWEsRUFBRTdELGVBQWUsQ0FBQzZELGFBQWM7TUFDN0N4RyxzQkFBc0IsRUFBRTJDLGVBQWUsQ0FBQzNDLHNCQUF1QjtNQUMvRHlHLHdCQUF3QixFQUFFOUQsZUFBZSxDQUFDOEQsd0JBQXlCO01BQ25FUCxlQUFlLEVBQUV2RCxlQUFlLENBQUMrRCxxQkFBc0I7TUFDdkRWLG9CQUFvQixFQUFFckQsZUFBZSxDQUFDZ0UsMEJBQTJCO01BQ2pFQyxhQUFhLEVBQUVqRSxlQUFlLENBQUNpRSxhQUFjO01BQzdDUCxjQUFjLEVBQUVBLGNBQWU7TUFDL0JELFlBQVksRUFBRSxDQUFDM0UsZUFBZSxJQUFJLENBQUNBLGVBQWUsQ0FBQ0o7SUFBWSxDQUNoRSxDQUFDLEdBQ0EsSUFFbUIsQ0FFUixDQUFDO0VBRTVCLENBQUM7O0VBRUQ7RUFDQTtFQUNBLG9CQUFPLElBQUF3RixpQkFBVSxFQUFDLENBQUMvSCxLQUF3QixFQUFFZ0ksR0FBRyxrQkFBS25LLE1BQUEsQ0FBQWlCLE9BQUEsQ0FBQXFELGFBQUEsQ0FBQ21CLFlBQVksTUFBQTJFLFNBQUEsQ0FBQW5KLE9BQUEsTUFBS2tCLEtBQUs7SUFBRWtJLE9BQU8sRUFBRUY7RUFBSSxFQUFFLENBQUMsQ0FBQztFQUMvRjtBQUNGO0FBQ0EiLCJpZ25vcmVMaXN0IjpbXX0=
217
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfdGltZVdpZGdldCIsIl9hbmltYXRpb25Db250cm9sIiwiX2FuaW1hdGlvbkNvbnRyb2xsZXIiLCJfZGVmYXVsdFNldHRpbmdzIiwiX2ZpbHRlclV0aWxzIiwiX21lZGlhQnJlYWtwb2ludHMiLCJfdGVtcGxhdGVPYmplY3QiLCJfdGVtcGxhdGVPYmplY3QyIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwibWF4V2lkdGgiLCJCb3R0b21XaWRnZXRDb250YWluZXIiLCJzdHlsZWQiLCJkaXYiLCJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsMiIsInByb3BzIiwiaGFzUGFkZGluZyIsInRoZW1lIiwiYm90dG9tV2lkZ2V0UGFkZGluZ1RvcCIsImJvdHRvbVdpZGdldFBhZGRpbmdSaWdodCIsImJvdHRvbVdpZGdldFBhZGRpbmdCb3R0b20iLCJib3R0b21XaWRnZXRQYWRkaW5nTGVmdCIsIndpZHRoIiwibWVkaWEiLCJwb3J0YWJsZSIsIkZpbHRlckFuaW1hdGlvbkNvbnRyb2xsZXJGYWN0b3J5IiwiZGVwcyIsIkFuaW1hdGlvbkNvbnRyb2xsZXJGYWN0b3J5IiwiQW5pbWF0aW9uQ29udHJvbGxlciIsIkZpbHRlckFuaW1hdGlvbkNvbnRyb2xsZXIiLCJfcmVmIiwiZmlsdGVyIiwiZmlsdGVySWR4Iiwic2V0RmlsdGVyQW5pbWF0aW9uVGltZSIsImNoaWxkcmVuIiwiaW50ZXJ2YWxCaW5zIiwidXNlTWVtbyIsImdldEludGVydmFsQmlucyIsInN0ZXBzIiwibWFwIiwieCIsIngwIiwidXBkYXRlQW5pbWF0aW9uIiwidXNlQ2FsbGJhY2siLCJ2YWx1ZSIsImFuaW1hdGlvbldpbmRvdyIsIkFOSU1BVElPTl9XSU5ET1ciLCJpbnRlcnZhbCIsImlkeCIsIngxIiwiY3JlYXRlRWxlbWVudCIsImtleSIsImRvbWFpbiIsInNwZWVkIiwiaXNBbmltYXRpbmciLCJMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJGYWN0b3J5IiwiTGF5ZXJBbmltYXRpb25Db250cm9sbGVyIiwiX3JlZjIiLCJhbmltYXRpb25Db25maWciLCJzZXRMYXllckFuaW1hdGlvblRpbWUiLCJOdW1iZXIiLCJjdXJyZW50VGltZSIsInRpbWVTdGVwcyIsInBvaW50IiwiQm90dG9tV2lkZ2V0RmFjdG9yeSIsIlRpbWVXaWRnZXRGYWN0b3J5IiwiQW5pbWF0aW9uQ29udHJvbEZhY3RvcnkiLCJUaW1lV2lkZ2V0IiwiQW5pbWF0aW9uQ29udHJvbCIsIkJvdHRvbVdpZGdldCIsIl91aVN0YXRlJG1hcENvbnRyb2xzIiwiX3VpU3RhdGUkbWFwQ29udHJvbHMkIiwiX3VpU3RhdGUkbWFwQ29udHJvbHMyIiwiX3VpU3RhdGUkbWFwQ29udHJvbHMzIiwiZGF0YXNldHMiLCJmaWx0ZXJzIiwidmlzU3RhdGVBY3Rpb25zIiwiY29udGFpbmVyVyIsInVpU3RhdGUiLCJzaWRlUGFuZWxXaWR0aCIsImxheWVycyIsImFjdGl2ZVNpZGVQYW5lbCIsInJlYWRPbmx5IiwiaXNPcGVuIiwiQm9vbGVhbiIsImVubGFyZ2VkRmlsdGVySWR4IiwiZmluZEluZGV4IiwiZiIsImVubGFyZ2VkIiwidHlwZSIsIkZJTFRFUl9UWVBFUyIsInRpbWVSYW5nZSIsImFuaW1hdGVkRmlsdGVySWR4IiwiYW5pbWF0ZWRGaWx0ZXIiLCJpc0xlZ2VuZFBpbm5lZCIsIm1hcENvbnRyb2xzIiwibWFwTGVnZW5kIiwic2hvdyIsImFjdGl2ZSIsInNwYWNlRm9yTGVnZW5kV2lkdGgiLCJESU1FTlNJT05TIiwibWFwQ29udHJvbCIsInBpbm5lZCIsInJpZ2h0IiwiZW5sYXJnZWRGaWx0ZXJXaWR0aCIsImFuaW1hdGFibGVMYXllciIsImwiLCJjb25maWciLCJhbmltYXRpb24iLCJlbmFibGVkIiwiaXNWaXNpYmxlIiwicmVhZHlUb0FuaW1hdGlvbiIsIkFycmF5IiwiaXNBcnJheSIsImlzRmluaXRlIiwic2hvd0Zsb2F0aW5nVGltZURpc3BsYXkiLCJsZW5ndGgiLCJzaG93QW5pbWF0aW9uQ29udHJvbCIsImhpZGVDb250cm9sIiwic2hvd1RpbWVXaWRnZXQiLCJrZXlzIiwiTWF0aCIsIm1pbiIsInN0eWxlIiwibWFyZ2luUmlnaHQiLCJjbGFzc05hbWUiLCJzdGFydCIsInBhdXNlIiwicmVzZXQiLCJ1cGRhdGVBbmltYXRpb25TcGVlZCIsInVwZGF0ZUxheWVyQW5pbWF0aW9uU3BlZWQiLCJ0b2dnbGVBbmltYXRpb24iLCJ0b2dnbGVMYXllckFuaW1hdGlvbiIsImlzQW5pbWF0YWJsZSIsInJlc2V0QW5pbWF0aW9uIiwiaW5kZXgiLCJzaG93VGltZURpc3BsYXkiLCJzZXRGaWx0ZXJQbG90Iiwic2V0RmlsdGVyQW5pbWF0aW9uV2luZG93IiwidG9nZ2xlRmlsdGVyQW5pbWF0aW9uIiwidXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWQiLCJlbmxhcmdlRmlsdGVyIiwiZm9yd2FyZFJlZiIsInJlZiIsIl9leHRlbmRzMiIsInJvb3RSZWYiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9ib3R0b20td2lkZ2V0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMjIgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQgUmVhY3QsIHt1c2VDYWxsYmFjaywgZm9yd2FyZFJlZiwgdXNlTWVtb30gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQgVGltZVdpZGdldEZhY3RvcnkgZnJvbSAnLi9maWx0ZXJzL3RpbWUtd2lkZ2V0JztcbmltcG9ydCBBbmltYXRpb25Db250cm9sRmFjdG9yeSBmcm9tICcuL2NvbW1vbi9hbmltYXRpb24tY29udHJvbC9hbmltYXRpb24tY29udHJvbCc7XG5pbXBvcnQgQW5pbWF0aW9uQ29udHJvbGxlckZhY3RvcnkgZnJvbSAnLi9jb21tb24vYW5pbWF0aW9uLWNvbnRyb2wvYW5pbWF0aW9uLWNvbnRyb2xsZXInO1xuaW1wb3J0IHtBTklNQVRJT05fV0lORE9XLCBESU1FTlNJT05TLCBGSUxURVJfVFlQRVN9IGZyb20gJ2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzJztcbmltcG9ydCB7Z2V0SW50ZXJ2YWxCaW5zfSBmcm9tICd1dGlscy9maWx0ZXItdXRpbHMnO1xuaW1wb3J0IHttZWRpYX0gZnJvbSAnc3R5bGVzL21lZGlhLWJyZWFrcG9pbnRzJztcbmltcG9ydCB7QW5pbWF0aW9uQ29uZmlnLCBUaW1lUmFuZ2VGaWx0ZXJ9IGZyb20gJ3JlZHVjZXJzJztcbmltcG9ydCB7Ym90dG9tV2lkZ2V0U2VsZWN0b3J9IGZyb20gJy4va2VwbGVyLWdsJztcblxuY29uc3QgbWF4V2lkdGggPSAxMDgwO1xuXG5pbnRlcmZhY2UgQm90dG9tV2lkZ2V0Q29udGFpbmVyUHJvcHMge1xuICBoYXNQYWRkaW5nPzogYm9vbGVhbjtcbiAgd2lkdGg/OiBudW1iZXI7XG59XG5cbmNvbnN0IEJvdHRvbVdpZGdldENvbnRhaW5lciA9IHN0eWxlZC5kaXY8Qm90dG9tV2lkZ2V0Q29udGFpbmVyUHJvcHM+YFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBwYWRkaW5nLXRvcDogJHtwcm9wcyA9PiAocHJvcHMuaGFzUGFkZGluZyA/IHByb3BzLnRoZW1lLmJvdHRvbVdpZGdldFBhZGRpbmdUb3AgOiAwKX1weDtcbiAgcGFkZGluZy1yaWdodDogJHtwcm9wcyA9PiAocHJvcHMuaGFzUGFkZGluZyA/IHByb3BzLnRoZW1lLmJvdHRvbVdpZGdldFBhZGRpbmdSaWdodCA6IDApfXB4O1xuICBwYWRkaW5nLWJvdHRvbTogJHtwcm9wcyA9PiAocHJvcHMuaGFzUGFkZGluZyA/IHByb3BzLnRoZW1lLmJvdHRvbVdpZGdldFBhZGRpbmdCb3R0b20gOiAwKX1weDtcbiAgcGFkZGluZy1sZWZ0OiAke3Byb3BzID0+IChwcm9wcy5oYXNQYWRkaW5nID8gcHJvcHMudGhlbWUuYm90dG9tV2lkZ2V0UGFkZGluZ0xlZnQgOiAwKX1weDtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmUgIWltcG9ydGFudDsgLyogcHJldmVudCBwYWRkaW5nIGZyb20gYmxvY2tpbmcgaW5wdXQgKi9cbiAgJiA+ICoge1xuICAgIC8qIGFsbCBjaGlsZHJlbiBzaG91bGQgYWxsb3cgaW5wdXQgKi9cbiAgICBwb2ludGVyLWV2ZW50czogYWxsO1xuICB9XG4gIHdpZHRoOiAke3Byb3BzID0+IHByb3BzLndpZHRofXB4O1xuICB6LWluZGV4OiAxO1xuICAke21lZGlhLnBvcnRhYmxlYHBhZGRpbmc6IDA7YH1cbmA7XG5cbmludGVyZmFjZSBGaWx0ZXJBbmltYXRpb25Db250cm9sbGVyUHJvcHMge1xuICBjaGlsZHJlbj86IEZ1bmN0aW9uO1xuICBmaWx0ZXI6IFRpbWVSYW5nZUZpbHRlciAmIHthbmltYXRpb25XaW5kb3c/OiBzdHJpbmd9O1xuICBmaWx0ZXJJZHg6IG51bWJlcjtcbiAgc2V0RmlsdGVyQW5pbWF0aW9uVGltZTogKGlkeDogbnVtYmVyLCB2YWx1ZTogc3RyaW5nLCBhOiBhbnlbXSkgPT4gdm9pZDtcbn1cblxuRmlsdGVyQW5pbWF0aW9uQ29udHJvbGxlckZhY3RvcnkuZGVwcyA9IFtBbmltYXRpb25Db250cm9sbGVyRmFjdG9yeV07XG5leHBvcnQgZnVuY3Rpb24gRmlsdGVyQW5pbWF0aW9uQ29udHJvbGxlckZhY3RvcnkoXG4gIEFuaW1hdGlvbkNvbnRyb2xsZXI6IFJldHVyblR5cGU8dHlwZW9mIEFuaW1hdGlvbkNvbnRyb2xsZXJGYWN0b3J5PlxuKSB7XG4gIGNvbnN0IEZpbHRlckFuaW1hdGlvbkNvbnRyb2xsZXI6IFJlYWN0LkZDPEZpbHRlckFuaW1hdGlvbkNvbnRyb2xsZXJQcm9wcz4gPSAoe1xuICAgIGZpbHRlcixcbiAgICBmaWx0ZXJJZHgsXG4gICAgc2V0RmlsdGVyQW5pbWF0aW9uVGltZSxcbiAgICBjaGlsZHJlblxuICB9KSA9PiB7XG4gICAgY29uc3QgaW50ZXJ2YWxCaW5zID0gdXNlTWVtbygoKSA9PiBnZXRJbnRlcnZhbEJpbnMoZmlsdGVyKSwgW2ZpbHRlcl0pO1xuXG4gICAgY29uc3Qgc3RlcHMgPSB1c2VNZW1vKCgpID0+IChpbnRlcnZhbEJpbnMgPyBpbnRlcnZhbEJpbnMubWFwKHggPT4geC54MCkgOiBudWxsKSwgW1xuICAgICAgaW50ZXJ2YWxCaW5zXG4gICAgXSk7XG5cbiAgICBjb25zdCB1cGRhdGVBbmltYXRpb24gPSB1c2VDYWxsYmFjayhcbiAgICAgIHZhbHVlID0+IHtcbiAgICAgICAgc3dpdGNoIChmaWx0ZXIuYW5pbWF0aW9uV2luZG93KSB7XG4gICAgICAgICAgY2FzZSBBTklNQVRJT05fV0lORE9XLmludGVydmFsOlxuICAgICAgICAgICAgY29uc3QgaWR4ID0gdmFsdWVbMV07XG4gICAgICAgICAgICBzZXRGaWx0ZXJBbmltYXRpb25UaW1lKGZpbHRlcklkeCwgJ3ZhbHVlJywgW1xuICAgICAgICAgICAgICBpbnRlcnZhbEJpbnNbaWR4XS54MCxcbiAgICAgICAgICAgICAgaW50ZXJ2YWxCaW5zW2lkeF0ueDEgLSAxXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBzZXRGaWx0ZXJBbmltYXRpb25UaW1lKGZpbHRlcklkeCwgJ3ZhbHVlJywgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBbZmlsdGVySWR4LCBpbnRlcnZhbEJpbnMsIGZpbHRlci5hbmltYXRpb25XaW5kb3csIHNldEZpbHRlckFuaW1hdGlvblRpbWVdXG4gICAgKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8QW5pbWF0aW9uQ29udHJvbGxlclxuICAgICAgICBrZXk9XCJmaWx0ZXItY29udHJvbFwiXG4gICAgICAgIHZhbHVlPXtmaWx0ZXIudmFsdWV9XG4gICAgICAgIGRvbWFpbj17ZmlsdGVyLmRvbWFpbn1cbiAgICAgICAgc3BlZWQ9e2ZpbHRlci5zcGVlZH1cbiAgICAgICAgaXNBbmltYXRpbmc9e2ZpbHRlci5pc0FuaW1hdGluZ31cbiAgICAgICAgYW5pbWF0aW9uV2luZG93PXtmaWx0ZXIuYW5pbWF0aW9uV2luZG93fVxuICAgICAgICBzdGVwcz17c3RlcHN9XG4gICAgICAgIHVwZGF0ZUFuaW1hdGlvbj17dXBkYXRlQW5pbWF0aW9ufVxuICAgICAgICBjaGlsZHJlbj17Y2hpbGRyZW59XG4gICAgICAvPlxuICAgICk7XG4gIH07XG4gIHJldHVybiBGaWx0ZXJBbmltYXRpb25Db250cm9sbGVyO1xufVxuXG5pbnRlcmZhY2UgTGF5ZXJBbmltYXRpb25Db250cm9sbGVyUHJvcHMge1xuICBjaGlsZHJlbj86IEZ1bmN0aW9uO1xuICBhbmltYXRpb25Db25maWc6IEFuaW1hdGlvbkNvbmZpZyAmIHt0aW1lU3RlcHM/OiBudW1iZXJbXSB8IG51bGx9O1xuICBzZXRMYXllckFuaW1hdGlvblRpbWU6ICh4OiBudW1iZXIpID0+IHZvaWQ7XG59XG5cbkxheWVyQW5pbWF0aW9uQ29udHJvbGxlckZhY3RvcnkuZGVwcyA9IFtBbmltYXRpb25Db250cm9sbGVyRmFjdG9yeV07XG5leHBvcnQgZnVuY3Rpb24gTGF5ZXJBbmltYXRpb25Db250cm9sbGVyRmFjdG9yeShcbiAgQW5pbWF0aW9uQ29udHJvbGxlcjogUmV0dXJuVHlwZTx0eXBlb2YgQW5pbWF0aW9uQ29udHJvbGxlckZhY3Rvcnk+XG4pIHtcbiAgY29uc3QgTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOiBSZWFjdC5GQzxMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJQcm9wcz4gPSAoe1xuICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICBzZXRMYXllckFuaW1hdGlvblRpbWUsXG4gICAgY2hpbGRyZW5cbiAgfSkgPT4gKFxuICAgIDxBbmltYXRpb25Db250cm9sbGVyPG51bWJlcj5cbiAgICAgIGtleT1cImxheWVyLWNvbnRyb2xcIlxuICAgICAgdmFsdWU9e051bWJlcihhbmltYXRpb25Db25maWcuY3VycmVudFRpbWUpfVxuICAgICAgZG9tYWluPXthbmltYXRpb25Db25maWcuZG9tYWlufVxuICAgICAgc3BlZWQ9e2FuaW1hdGlvbkNvbmZpZy5zcGVlZH1cbiAgICAgIGlzQW5pbWF0aW5nPXthbmltYXRpb25Db25maWcuaXNBbmltYXRpbmd9XG4gICAgICB1cGRhdGVBbmltYXRpb249e3NldExheWVyQW5pbWF0aW9uVGltZX1cbiAgICAgIHN0ZXBzPXthbmltYXRpb25Db25maWcudGltZVN0ZXBzfVxuICAgICAgYW5pbWF0aW9uV2luZG93PXtcbiAgICAgICAgYW5pbWF0aW9uQ29uZmlnLnRpbWVTdGVwcyA/IEFOSU1BVElPTl9XSU5ET1cuaW50ZXJ2YWwgOiBBTklNQVRJT05fV0lORE9XLnBvaW50XG4gICAgICB9XG4gICAgICBjaGlsZHJlbj17Y2hpbGRyZW59XG4gICAgLz5cbiAgKTtcbiAgcmV0dXJuIExheWVyQW5pbWF0aW9uQ29udHJvbGxlcjtcbn1cblxudHlwZSBCb3R0b21XaWRnZXRQcm9wcyA9IHtcbiAgY29udGFpbmVyVzogbnVtYmVyO1xufSAmIFJldHVyblR5cGU8dHlwZW9mIGJvdHRvbVdpZGdldFNlbGVjdG9yPjtcblxuQm90dG9tV2lkZ2V0RmFjdG9yeS5kZXBzID0gW1xuICBUaW1lV2lkZ2V0RmFjdG9yeSxcbiAgQW5pbWF0aW9uQ29udHJvbEZhY3RvcnksXG4gIEZpbHRlckFuaW1hdGlvbkNvbnRyb2xsZXJGYWN0b3J5LFxuICBMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJGYWN0b3J5XG5dO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBjb21wbGV4aXR5ICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBCb3R0b21XaWRnZXRGYWN0b3J5KFxuICBUaW1lV2lkZ2V0OiBSZXR1cm5UeXBlPHR5cGVvZiBUaW1lV2lkZ2V0RmFjdG9yeT4sXG4gIEFuaW1hdGlvbkNvbnRyb2w6IFJldHVyblR5cGU8dHlwZW9mIEFuaW1hdGlvbkNvbnRyb2xGYWN0b3J5PixcbiAgRmlsdGVyQW5pbWF0aW9uQ29udHJvbGxlcjogUmV0dXJuVHlwZTx0eXBlb2YgRmlsdGVyQW5pbWF0aW9uQ29udHJvbGxlckZhY3Rvcnk+LFxuICBMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6IFJldHVyblR5cGU8dHlwZW9mIExheWVyQW5pbWF0aW9uQ29udHJvbGxlckZhY3Rvcnk+XG4pIHtcbiAgY29uc3QgQm90dG9tV2lkZ2V0ID0gKHByb3BzOiBCb3R0b21XaWRnZXRQcm9wcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGRhdGFzZXRzLFxuICAgICAgZmlsdGVycyxcbiAgICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICAgIHZpc1N0YXRlQWN0aW9ucyxcbiAgICAgIGNvbnRhaW5lclcsXG4gICAgICB1aVN0YXRlLFxuICAgICAgc2lkZVBhbmVsV2lkdGgsXG4gICAgICBsYXllcnNcbiAgICB9ID0gcHJvcHM7XG5cbiAgICBjb25zdCB7YWN0aXZlU2lkZVBhbmVsLCByZWFkT25seX0gPSB1aVN0YXRlO1xuICAgIGNvbnN0IGlzT3BlbiA9IEJvb2xlYW4oYWN0aXZlU2lkZVBhbmVsKTtcblxuICAgIGNvbnN0IGVubGFyZ2VkRmlsdGVySWR4ID0gdXNlTWVtbyhcbiAgICAgICgpID0+IGZpbHRlcnMuZmluZEluZGV4KGYgPT4gZi5lbmxhcmdlZCAmJiBmLnR5cGUgPT09IEZJTFRFUl9UWVBFUy50aW1lUmFuZ2UpLFxuICAgICAgW2ZpbHRlcnNdXG4gICAgKTtcbiAgICBjb25zdCBhbmltYXRlZEZpbHRlcklkeCA9IHVzZU1lbW8oKCkgPT4gZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlzQW5pbWF0aW5nKSwgW2ZpbHRlcnNdKTtcbiAgICBjb25zdCBhbmltYXRlZEZpbHRlciA9IGFuaW1hdGVkRmlsdGVySWR4ID4gLTEgPyBmaWx0ZXJzW2FuaW1hdGVkRmlsdGVySWR4XSA6IG51bGw7XG5cbiAgICBjb25zdCBpc0xlZ2VuZFBpbm5lZCA9XG4gICAgICB1aVN0YXRlLm1hcENvbnRyb2xzPy5tYXBMZWdlbmQ/LnNob3cgJiYgdWlTdGF0ZS5tYXBDb250cm9scz8ubWFwTGVnZW5kPy5hY3RpdmU7XG4gICAgY29uc3Qgc3BhY2VGb3JMZWdlbmRXaWR0aCA9IGlzTGVnZW5kUGlubmVkXG4gICAgICA/IERJTUVOU0lPTlMubWFwQ29udHJvbC53aWR0aCArIERJTUVOU0lPTlMubWFwQ29udHJvbC5tYXBMZWdlbmQucGlubmVkLnJpZ2h0XG4gICAgICA6IDA7XG5cbiAgICBjb25zdCBlbmxhcmdlZEZpbHRlcldpZHRoID1cbiAgICAgIChpc09wZW4gPyBjb250YWluZXJXIC0gc2lkZVBhbmVsV2lkdGggOiBjb250YWluZXJXKSAtIHNwYWNlRm9yTGVnZW5kV2lkdGg7XG5cbiAgICAvLyBzaG93IHBsYXliYWNrIGNvbnRyb2wgaWYgbGF5ZXJzIGNvbnRhaW4gdHJpcCBsYXllciAmIGF0IGxlYXN0IG9uZSB0cmlwIGxheWVyIGlzIHZpc2libGVcbiAgICBjb25zdCBhbmltYXRhYmxlTGF5ZXIgPSB1c2VNZW1vKFxuICAgICAgKCkgPT5cbiAgICAgICAgbGF5ZXJzLmZpbHRlcihsID0+IGwuY29uZmlnLmFuaW1hdGlvbiAmJiBsLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCAmJiBsLmNvbmZpZy5pc1Zpc2libGUpLFxuICAgICAgW2xheWVyc11cbiAgICApO1xuXG4gICAgY29uc3QgcmVhZHlUb0FuaW1hdGlvbiA9XG4gICAgICBBcnJheS5pc0FycmF5KGFuaW1hdGlvbkNvbmZpZy5kb21haW4pICYmIE51bWJlci5pc0Zpbml0ZShhbmltYXRpb25Db25maWcuY3VycmVudFRpbWUpO1xuICAgIC8vIGlmIGFuaW1hdGlvbiBjb250cm9sIGlzIHNob3dpbmcsIGhpZGUgdGltZSBkaXNwbGF5IGluIHRpbWUgc2xpZGVyXG4gICAgY29uc3Qgc2hvd0Zsb2F0aW5nVGltZURpc3BsYXkgPSAhYW5pbWF0YWJsZUxheWVyLmxlbmd0aDtcbiAgICBjb25zdCBzaG93QW5pbWF0aW9uQ29udHJvbCA9XG4gICAgICBhbmltYXRhYmxlTGF5ZXIubGVuZ3RoICYmIHJlYWR5VG9BbmltYXRpb24gJiYgIWFuaW1hdGlvbkNvbmZpZy5oaWRlQ29udHJvbDtcbiAgICBjb25zdCBzaG93VGltZVdpZGdldCA9IGVubGFyZ2VkRmlsdGVySWR4ID4gLTEgJiYgT2JqZWN0LmtleXMoZGF0YXNldHMpLmxlbmd0aCA+IDA7XG5cbiAgICAvLyBpZiBmaWx0ZXIgaXMgbm90IGFuaW1hdGluZywgcGFzcyBpbiBlbmxhcmdlZCBmaWx0ZXIgaGVyZSBiZWNhdXNlXG4gICAgLy8gYW5pbWF0aW9uIGNvbnRyb2xsZXIgbmVlZHMgdG8gY2FsbCByZXNldCBvbiBpdFxuICAgIGNvbnN0IGZpbHRlciA9IChhbmltYXRlZEZpbHRlciBhcyBUaW1lUmFuZ2VGaWx0ZXIpIHx8IGZpbHRlcnNbZW5sYXJnZWRGaWx0ZXJJZHhdO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxCb3R0b21XaWRnZXRDb250YWluZXJcbiAgICAgICAgd2lkdGg9e01hdGgubWluKG1heFdpZHRoLCBlbmxhcmdlZEZpbHRlcldpZHRoKX1cbiAgICAgICAgc3R5bGU9e3ttYXJnaW5SaWdodDogc3BhY2VGb3JMZWdlbmRXaWR0aH19XG4gICAgICAgIGNsYXNzTmFtZT1cImJvdHRvbS13aWRnZXQtLWNvbnRhaW5lclwiXG4gICAgICAgIGhhc1BhZGRpbmc9e3Nob3dBbmltYXRpb25Db250cm9sIHx8IHNob3dUaW1lV2lkZ2V0fVxuICAgICAgPlxuICAgICAgICA8TGF5ZXJBbmltYXRpb25Db250cm9sbGVyXG4gICAgICAgICAgYW5pbWF0aW9uQ29uZmlnPXthbmltYXRpb25Db25maWd9XG4gICAgICAgICAgc2V0TGF5ZXJBbmltYXRpb25UaW1lPXt2aXNTdGF0ZUFjdGlvbnMuc2V0TGF5ZXJBbmltYXRpb25UaW1lfVxuICAgICAgICA+XG4gICAgICAgICAgeyhpc0FuaW1hdGluZywgc3RhcnQsIHBhdXNlLCByZXNldCkgPT5cbiAgICAgICAgICAgIHNob3dBbmltYXRpb25Db250cm9sID8gKFxuICAgICAgICAgICAgICA8QW5pbWF0aW9uQ29udHJvbFxuICAgICAgICAgICAgICAgIGFuaW1hdGlvbkNvbmZpZz17YW5pbWF0aW9uQ29uZmlnfVxuICAgICAgICAgICAgICAgIHNldExheWVyQW5pbWF0aW9uVGltZT17dmlzU3RhdGVBY3Rpb25zLnNldExheWVyQW5pbWF0aW9uVGltZX1cbiAgICAgICAgICAgICAgICB1cGRhdGVBbmltYXRpb25TcGVlZD17dmlzU3RhdGVBY3Rpb25zLnVwZGF0ZUxheWVyQW5pbWF0aW9uU3BlZWR9XG4gICAgICAgICAgICAgICAgdG9nZ2xlQW5pbWF0aW9uPXt2aXNTdGF0ZUFjdGlvbnMudG9nZ2xlTGF5ZXJBbmltYXRpb259XG4gICAgICAgICAgICAgICAgaXNBbmltYXRhYmxlPXshYW5pbWF0ZWRGaWx0ZXJ9XG4gICAgICAgICAgICAgICAgaXNBbmltYXRpbmc9e2lzQW5pbWF0aW5nfVxuICAgICAgICAgICAgICAgIHJlc2V0QW5pbWF0aW9uPXtyZXNldH1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiBudWxsXG4gICAgICAgICAgfVxuICAgICAgICA8L0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj5cbiAgICAgICAge2ZpbHRlciAmJiAoXG4gICAgICAgICAgPEZpbHRlckFuaW1hdGlvbkNvbnRyb2xsZXJcbiAgICAgICAgICAgIGZpbHRlcj17ZmlsdGVyIGFzIGFueX1cbiAgICAgICAgICAgIGZpbHRlcklkeD17YW5pbWF0ZWRGaWx0ZXJJZHggPiAtMSA/IGFuaW1hdGVkRmlsdGVySWR4IDogZW5sYXJnZWRGaWx0ZXJJZHh9XG4gICAgICAgICAgICBzZXRGaWx0ZXJBbmltYXRpb25UaW1lPXt2aXNTdGF0ZUFjdGlvbnMuc2V0RmlsdGVyQW5pbWF0aW9uVGltZX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7KGlzQW5pbWF0aW5nLCBzdGFydCwgcGF1c2UsIHJlc2V0QW5pbWF0aW9uKSA9PlxuICAgICAgICAgICAgICBzaG93VGltZVdpZGdldCA/IChcbiAgICAgICAgICAgICAgICA8VGltZVdpZGdldFxuICAgICAgICAgICAgICAgICAgLy8gVGltZVdpZGdldCB1c2VzIFJlYWN0Lm1lbW8sIGhlcmUgd2UgcGFzcyB3aWR0aFxuICAgICAgICAgICAgICAgICAgLy8gZXZlbiB0aG91Z2ggaXQgZG9lc250IHVzZSBpdCwgdG8gZm9yY2UgcmVyZW5kZXJcbiAgICAgICAgICAgICAgICAgIGZpbHRlcj17ZmlsdGVyc1tlbmxhcmdlZEZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyfVxuICAgICAgICAgICAgICAgICAgaW5kZXg9e2VubGFyZ2VkRmlsdGVySWR4fVxuICAgICAgICAgICAgICAgICAgZGF0YXNldHM9e2RhdGFzZXRzfVxuICAgICAgICAgICAgICAgICAgcmVhZE9ubHk9e3JlYWRPbmx5fVxuICAgICAgICAgICAgICAgICAgc2hvd1RpbWVEaXNwbGF5PXtzaG93RmxvYXRpbmdUaW1lRGlzcGxheX1cbiAgICAgICAgICAgICAgICAgIHNldEZpbHRlclBsb3Q9e3Zpc1N0YXRlQWN0aW9ucy5zZXRGaWx0ZXJQbG90fVxuICAgICAgICAgICAgICAgICAgc2V0RmlsdGVyQW5pbWF0aW9uVGltZT17dmlzU3RhdGVBY3Rpb25zLnNldEZpbHRlckFuaW1hdGlvblRpbWV9XG4gICAgICAgICAgICAgICAgICBzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3c9e3Zpc1N0YXRlQWN0aW9ucy5zZXRGaWx0ZXJBbmltYXRpb25XaW5kb3d9XG4gICAgICAgICAgICAgICAgICB0b2dnbGVBbmltYXRpb249e3Zpc1N0YXRlQWN0aW9ucy50b2dnbGVGaWx0ZXJBbmltYXRpb259XG4gICAgICAgICAgICAgICAgICB1cGRhdGVBbmltYXRpb25TcGVlZD17dmlzU3RhdGVBY3Rpb25zLnVwZGF0ZUZpbHRlckFuaW1hdGlvblNwZWVkfVxuICAgICAgICAgICAgICAgICAgZW5sYXJnZUZpbHRlcj17dmlzU3RhdGVBY3Rpb25zLmVubGFyZ2VGaWx0ZXJ9XG4gICAgICAgICAgICAgICAgICByZXNldEFuaW1hdGlvbj17cmVzZXRBbmltYXRpb259XG4gICAgICAgICAgICAgICAgICBpc0FuaW1hdGFibGU9eyFhbmltYXRpb25Db25maWcgfHwgIWFuaW1hdGlvbkNvbmZpZy5pc0FuaW1hdGluZ31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApIDogbnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvRmlsdGVyQW5pbWF0aW9uQ29udHJvbGxlcj5cbiAgICAgICAgKX1cbiAgICAgIDwvQm90dG9tV2lkZ2V0Q29udGFpbmVyPlxuICAgICk7XG4gIH07XG5cbiAgLyogZXNsaW50LWRpc2FibGUgcmVhY3QvZGlzcGxheS1uYW1lICovXG4gIC8vIEB0cy1pZ25vcmVcbiAgcmV0dXJuIGZvcndhcmRSZWYoKHByb3BzOiBCb3R0b21XaWRnZXRQcm9wcywgcmVmKSA9PiA8Qm90dG9tV2lkZ2V0IHsuLi5wcm9wc30gcm9vdFJlZj17cmVmfSAvPik7XG4gIC8qIGVzbGludC1lbmFibGUgcmVhY3QvZGlzcGxheS1uYW1lICovXG59XG4vKiBlc2xpbnQtZW5hYmxlIGNvbXBsZXhpdHkgKi9cbiJdLCJtYXBwaW5ncyI6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