@kepler.gl/components 3.2.6 → 3.3.0-alpha.1

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 (370) hide show
  1. package/dist/annotations/annotation-node.d.ts +11 -0
  2. package/dist/annotations/annotation-node.js +145 -0
  3. package/dist/annotations/annotation-overlay.d.ts +16 -0
  4. package/dist/annotations/annotation-overlay.js +166 -0
  5. package/dist/annotations/annotation-panel.d.ts +24 -0
  6. package/dist/annotations/annotation-panel.js +362 -0
  7. package/dist/annotations/annotation-text.d.ts +16 -0
  8. package/dist/annotations/annotation-text.js +150 -0
  9. package/dist/annotations/annotation-utils.d.ts +39 -0
  10. package/dist/annotations/annotation-utils.js +156 -0
  11. package/dist/annotations/index.d.ts +7 -0
  12. package/dist/annotations/index.js +53 -0
  13. package/dist/annotations/lexical-editor/clickable-link-plugin.d.ts +3 -0
  14. package/dist/annotations/lexical-editor/clickable-link-plugin.js +71 -0
  15. package/dist/annotations/lexical-editor/floating-link-editor.d.ts +1 -0
  16. package/dist/annotations/lexical-editor/floating-link-editor.js +194 -0
  17. package/dist/annotations/lexical-editor/index.d.ts +7 -0
  18. package/dist/annotations/lexical-editor/index.js +78 -0
  19. package/dist/annotations/lexical-editor/lexical-constants.d.ts +12 -0
  20. package/dist/annotations/lexical-editor/lexical-constants.js +22 -0
  21. package/dist/annotations/lexical-editor/lexical-nodes.d.ts +3 -0
  22. package/dist/annotations/lexical-editor/lexical-nodes.js +13 -0
  23. package/dist/annotations/lexical-editor/lexical-rich-text-editor.d.ts +15 -0
  24. package/dist/annotations/lexical-editor/lexical-rich-text-editor.js +122 -0
  25. package/dist/annotations/lexical-editor/lexical-theme.d.ts +15 -0
  26. package/dist/annotations/lexical-editor/lexical-theme.js +25 -0
  27. package/dist/annotations/lexical-editor/lexical-toolbar.d.ts +7 -0
  28. package/dist/annotations/lexical-editor/lexical-toolbar.js +293 -0
  29. package/dist/annotations/lexical-editor/lexical-utils.d.ts +4 -0
  30. package/dist/annotations/lexical-editor/lexical-utils.js +45 -0
  31. package/dist/annotations/lexical-editor/use-lexical-toolbar.d.ts +36 -0
  32. package/dist/annotations/lexical-editor/use-lexical-toolbar.js +253 -0
  33. package/dist/bottom-widget.d.ts +5 -5
  34. package/dist/bottom-widget.js +12 -6
  35. package/dist/common/action-panel.d.ts +3 -3
  36. package/dist/common/animation-control/animation-control.d.ts +2 -1
  37. package/dist/common/animation-control/animation-control.js +3 -1
  38. package/dist/common/animation-control/animation-controller.js +8 -6
  39. package/dist/common/animation-control/export-video-control.d.ts +9 -0
  40. package/dist/common/animation-control/export-video-control.js +43 -0
  41. package/dist/common/animation-control/playback-controls.d.ts +5 -3
  42. package/dist/common/animation-control/playback-controls.js +7 -4
  43. package/dist/common/checkbox.d.ts +5 -21
  44. package/dist/common/checkbox.js +58 -70
  45. package/dist/common/color-legend.d.ts +4 -4
  46. package/dist/common/color-legend.js +3 -3
  47. package/dist/common/column-stats-chart.d.ts +3 -3
  48. package/dist/common/data-table/button.d.ts +1 -1
  49. package/dist/common/data-table/canvas.d.ts +0 -1
  50. package/dist/common/data-table/cell-size.d.ts +2 -2
  51. package/dist/common/data-table/display-format.d.ts +1 -1
  52. package/dist/common/data-table/header-cell.d.ts +2 -2
  53. package/dist/common/data-table/index.d.ts +8 -10
  54. package/dist/common/data-table/index.js +3 -3
  55. package/dist/common/data-table/option-dropdown.d.ts +1 -1
  56. package/dist/common/field-selector.d.ts +5 -5
  57. package/dist/common/field-token.d.ts +1 -1
  58. package/dist/common/file-uploader/file-drop.d.ts +1 -1
  59. package/dist/common/file-uploader/file-upload-progress.d.ts +1 -1
  60. package/dist/common/file-uploader/file-upload.d.ts +1 -1
  61. package/dist/common/file-uploader/file-upload.js +4 -4
  62. package/dist/common/flex-container.d.ts +2 -3
  63. package/dist/common/histogram-plot.d.ts +1 -1
  64. package/dist/common/histogram-plot.js +102 -53
  65. package/dist/common/icon-button.d.ts +16 -16
  66. package/dist/common/icons/3d-models/airplane.d.ts +14 -0
  67. package/dist/common/icons/3d-models/airplane.js +104 -0
  68. package/dist/common/icons/3d-models/bicycle.d.ts +14 -0
  69. package/dist/common/icons/3d-models/bicycle.js +426 -0
  70. package/dist/common/icons/3d-models/boeing.d.ts +14 -0
  71. package/dist/common/icons/3d-models/boeing.js +119 -0
  72. package/dist/common/icons/3d-models/car.d.ts +14 -0
  73. package/dist/common/icons/3d-models/car.js +110 -0
  74. package/dist/common/icons/3d-models/cargoship.d.ts +14 -0
  75. package/dist/common/icons/3d-models/cargoship.js +246 -0
  76. package/dist/common/icons/3d-models/evtol.d.ts +14 -0
  77. package/dist/common/icons/3d-models/evtol.js +134 -0
  78. package/dist/common/icons/3d-models/glider.d.ts +14 -0
  79. package/dist/common/icons/3d-models/glider.js +62 -0
  80. package/dist/common/icons/3d-models/helicopter.d.ts +14 -0
  81. package/dist/common/icons/3d-models/helicopter.js +110 -0
  82. package/dist/common/icons/3d-models/scooter.d.ts +14 -0
  83. package/dist/common/icons/3d-models/scooter.js +159 -0
  84. package/dist/common/icons/3d-models/semitruck.d.ts +14 -0
  85. package/dist/common/icons/3d-models/semitruck.js +177 -0
  86. package/dist/common/icons/3d-models/truck.d.ts +14 -0
  87. package/dist/common/icons/3d-models/truck.js +122 -0
  88. package/dist/common/icons/anchor_window.d.ts +1 -8
  89. package/dist/common/icons/anchor_window.js +17 -10
  90. package/dist/common/icons/annotation-text.d.ts +9 -0
  91. package/dist/common/icons/annotation-text.js +56 -0
  92. package/dist/common/icons/base.d.ts +1 -1
  93. package/dist/common/icons/close.js +1 -1
  94. package/dist/common/icons/effects/distance-fog.d.ts +14 -0
  95. package/dist/common/icons/effects/distance-fog.js +79 -0
  96. package/dist/common/icons/effects/surface-fog.d.ts +14 -0
  97. package/dist/common/icons/effects/surface-fog.js +86 -0
  98. package/dist/common/icons/index.d.ts +3 -0
  99. package/dist/common/icons/index.js +22 -1
  100. package/dist/common/item-selector/chickleted-input.d.ts +5 -5
  101. package/dist/common/item-selector/chickleted-input.js +5 -5
  102. package/dist/common/item-selector/dropdown-list.d.ts +3 -3
  103. package/dist/common/item-selector/dropdown-select.d.ts +7 -7
  104. package/dist/common/item-selector/item-selector.d.ts +2 -2
  105. package/dist/common/item-selector/typeahead.d.ts +3 -3
  106. package/dist/common/line-chart.d.ts +4 -1
  107. package/dist/common/line-chart.js +59 -12
  108. package/dist/common/loading-spinner.d.ts +2 -2
  109. package/dist/common/modal.d.ts +5 -5
  110. package/dist/common/portaled.d.ts +8 -25
  111. package/dist/common/progress-bar.d.ts +1 -1
  112. package/dist/common/radius-legend.d.ts +1 -1
  113. package/dist/common/range-brush.d.ts +1 -1
  114. package/dist/common/range-plot.d.ts +1 -1
  115. package/dist/common/range-plot.js +4 -2
  116. package/dist/common/range-slider.d.ts +2 -0
  117. package/dist/common/range-slider.js +108 -43
  118. package/dist/common/slider/mouse-event.d.ts +1 -1
  119. package/dist/common/slider/slider-bar-handle.d.ts +2 -2
  120. package/dist/common/slider/slider-handle.d.ts +3 -3
  121. package/dist/common/slider/slider.d.ts +6 -2
  122. package/dist/common/slider/slider.js +78 -35
  123. package/dist/common/styled-components.d.ts +158 -159
  124. package/dist/common/styled-components.js +2 -2
  125. package/dist/common/sync-timeline-control.d.ts +3 -3
  126. package/dist/common/time-range-slider-time-title.d.ts +2 -2
  127. package/dist/common/time-range-slider-time-title.js +5 -5
  128. package/dist/common/time-range-slider.d.ts +4 -3
  129. package/dist/common/time-range-slider.js +19 -7
  130. package/dist/common/timeline-helpers.d.ts +3 -0
  131. package/dist/common/timeline-helpers.js +57 -0
  132. package/dist/common/timeline-slider.d.ts +1 -1
  133. package/dist/common/timeline-slider.js +21 -12
  134. package/dist/common/tippy-tooltip.d.ts +1 -1
  135. package/dist/common/toolbar-item.d.ts +1 -1
  136. package/dist/common/toolbar-item.js +5 -5
  137. package/dist/common/toolbar.d.ts +2 -2
  138. package/dist/common/toolbar.js +4 -4
  139. package/dist/common/vertical-toolbar.d.ts +2 -3
  140. package/dist/container.d.ts +6 -6
  141. package/dist/context.d.ts +3 -3
  142. package/dist/dnd-context.d.ts +2 -2
  143. package/dist/editor/editor.d.ts +1 -1
  144. package/dist/editor/editor.js +1 -1
  145. package/dist/editor/feature-action-panel.d.ts +1 -1
  146. package/dist/editor/feature-action-panel.js +1 -1
  147. package/dist/effects/compact-color-picker.d.ts +1 -1
  148. package/dist/effects/effect-configurator.d.ts +5 -4
  149. package/dist/effects/effect-configurator.js +243 -44
  150. package/dist/effects/effect-list.d.ts +1 -1
  151. package/dist/effects/effect-manager.d.ts +3 -3
  152. package/dist/effects/effect-manager.js +11 -4
  153. package/dist/effects/effect-panel-header.d.ts +2 -2
  154. package/dist/effects/effect-panel-header.js +35 -18
  155. package/dist/effects/effect-panel.d.ts +6 -6
  156. package/dist/effects/effect-panel.js +61 -86
  157. package/dist/effects/effect-time-configurator.d.ts +1 -1
  158. package/dist/effects/effect-time-configurator.js +10 -10
  159. package/dist/effects/effect-time-selector.d.ts +1 -1
  160. package/dist/effects/effect-time-slider.d.ts +3 -3
  161. package/dist/effects/effect-type-dropdown-list.d.ts +3 -2
  162. package/dist/effects/effect-type-dropdown-list.js +1 -1
  163. package/dist/effects/effect-type-list-item.d.ts +2 -1
  164. package/dist/effects/effect-type-list-item.js +23 -7
  165. package/dist/effects/effect-type-selector.d.ts +3 -2
  166. package/dist/effects/effect-type-selector.js +2 -2
  167. package/dist/effects/side-panel-title.d.ts +1 -1
  168. package/dist/effects/surface-fog-section.d.ts +14 -0
  169. package/dist/effects/surface-fog-section.js +263 -0
  170. package/dist/effects/timezone-selector.d.ts +1 -1
  171. package/dist/filters/components.d.ts +2 -3
  172. package/dist/filters/filter-panels/types.d.ts +4 -4
  173. package/dist/filters/index.d.ts +1 -0
  174. package/dist/filters/index.js +8 -1
  175. package/dist/filters/polygon-filter.js +2 -2
  176. package/dist/filters/time-range-filter.js +3 -1
  177. package/dist/filters/time-widget-settings.d.ts +14 -0
  178. package/dist/filters/time-widget-settings.js +312 -0
  179. package/dist/filters/time-widget-top.d.ts +2 -3
  180. package/dist/filters/time-widget-top.js +32 -39
  181. package/dist/filters/time-widget.d.ts +3 -2
  182. package/dist/filters/time-widget.js +285 -9
  183. package/dist/filters/types.d.ts +11 -11
  184. package/dist/filters/types.js +1 -1
  185. package/dist/geocoder/geocoder.d.ts +7 -4
  186. package/dist/geocoder/geocoder.js +65 -14
  187. package/dist/geocoder-panel.d.ts +11 -2
  188. package/dist/geocoder-panel.js +8 -4
  189. package/dist/hooks/use-cloud-list-provider.d.ts +1 -1
  190. package/dist/hooks/use-dnd-effects.d.ts +1 -1
  191. package/dist/hooks/use-dnd-layers.d.ts +1 -1
  192. package/dist/hooks/use-feature-flags.d.ts +1 -1
  193. package/dist/hooks/use-fetch-raster-tile-metadata.d.ts +3 -3
  194. package/dist/hooks/use-fetch-vector-tile-metadata.d.ts +2 -2
  195. package/dist/hooks/use-legend-position.d.ts +4 -5
  196. package/dist/index.d.ts +14 -0
  197. package/dist/index.js +124 -1
  198. package/dist/injector.d.ts +5 -5
  199. package/dist/kepler-gl.d.ts +70 -67
  200. package/dist/kepler-gl.js +89 -11
  201. package/dist/loading-indicator.d.ts +6 -4
  202. package/dist/loading-indicator.js +6 -3
  203. package/dist/map/annotations/annotation-control.d.ts +16 -0
  204. package/dist/map/annotations/annotation-control.js +56 -0
  205. package/dist/map/effects/effect-control.d.ts +1 -1
  206. package/dist/map/layer-hover-info.d.ts +3 -3
  207. package/dist/map/layer-hover-info.js +69 -36
  208. package/dist/map/layer-selector-panel.d.ts +2 -2
  209. package/dist/map/lazy-tippy.js +3 -3
  210. package/dist/map/locale-panel.d.ts +2 -2
  211. package/dist/map/locale-panel.js +2 -2
  212. package/dist/map/map-control-panel.d.ts +1 -1
  213. package/dist/map/map-control-toolbar.d.ts +7 -8
  214. package/dist/map/map-control-tooltip.d.ts +1 -1
  215. package/dist/map/map-control.d.ts +8 -4
  216. package/dist/map/map-control.js +16 -7
  217. package/dist/map/map-draw-panel.d.ts +2 -2
  218. package/dist/map/map-draw-panel.js +7 -4
  219. package/dist/map/map-legend-panel.d.ts +5 -4
  220. package/dist/map/map-legend-panel.js +10 -8
  221. package/dist/map/map-legend.d.ts +11 -9
  222. package/dist/map/map-legend.js +39 -9
  223. package/dist/map/map-navigation-control.d.ts +13 -0
  224. package/dist/map/map-navigation-control.js +143 -0
  225. package/dist/map/map-popover-content.d.ts +2 -2
  226. package/dist/map/map-popover.d.ts +2 -2
  227. package/dist/map/map-popover.js +2 -2
  228. package/dist/map/split-map-button.d.ts +1 -1
  229. package/dist/map/toggle-3d-button.d.ts +1 -1
  230. package/dist/map-container.d.ts +15 -5
  231. package/dist/map-container.js +286 -73
  232. package/dist/map-view-state-context.d.ts +10 -2
  233. package/dist/map-view-state-context.js +1 -1
  234. package/dist/modal-container.d.ts +6 -8
  235. package/dist/modal-container.js +28 -6
  236. package/dist/modals/add-map-style-modal.js +173 -200
  237. package/dist/modals/cloud-components/cloud-header.d.ts +1 -1
  238. package/dist/modals/cloud-components/provider-select.d.ts +1 -1
  239. package/dist/modals/cloud-tile.d.ts +1 -1
  240. package/dist/modals/data-table-modal.d.ts +2 -2
  241. package/dist/modals/data-table-modal.js +146 -194
  242. package/dist/modals/export-data-modal.js +117 -139
  243. package/dist/modals/export-image-modal.js +1 -1
  244. package/dist/modals/export-map-modal/components.d.ts +1 -1
  245. package/dist/modals/export-map-modal/export-html-map.d.ts +1 -1
  246. package/dist/modals/export-map-modal/export-json-map.d.ts +1 -1
  247. package/dist/modals/export-video-modal.d.ts +25 -0
  248. package/dist/modals/export-video-modal.js +338 -0
  249. package/dist/modals/export-video-modal.spec.d.ts +1 -0
  250. package/dist/modals/export-video-modal.spec.js +686 -0
  251. package/dist/modals/fog-height-animation.d.ts +8 -0
  252. package/dist/modals/fog-height-animation.js +97 -0
  253. package/dist/modals/hubble-utils.d.ts +25 -0
  254. package/dist/modals/hubble-utils.js +197 -0
  255. package/dist/modals/hubble-utils.spec.d.ts +1 -0
  256. package/dist/modals/hubble-utils.spec.js +397 -0
  257. package/dist/modals/image-modal-container.d.ts +1 -1
  258. package/dist/modals/load-data-modal.d.ts +2 -2
  259. package/dist/modals/modal-dialog.d.ts +0 -2
  260. package/dist/modals/overwrite-map-modal.d.ts +1 -1
  261. package/dist/modals/save-map-modal.d.ts +3 -3
  262. package/dist/modals/share-map-modal.d.ts +1 -1
  263. package/dist/modals/tilesets-modals/common.d.ts +3 -3
  264. package/dist/modals/tilesets-modals/common.js +1 -1
  265. package/dist/modals/tilesets-modals/load-data-footer.d.ts +1 -1
  266. package/dist/modals/tilesets-modals/load-data-footer.js +2 -2
  267. package/dist/modals/tilesets-modals/load-tileset.d.ts +1 -1
  268. package/dist/modals/tilesets-modals/load-tileset.js +27 -10
  269. package/dist/modals/tilesets-modals/tileset-bitmap-form.d.ts +14 -0
  270. package/dist/modals/tilesets-modals/tileset-bitmap-form.js +284 -0
  271. package/dist/modals/tilesets-modals/tileset-icon.d.ts +1 -1
  272. package/dist/modals/tilesets-modals/tileset-raster-form.d.ts +2 -2
  273. package/dist/modals/tilesets-modals/tileset-raster-form.js +94 -11
  274. package/dist/modals/tilesets-modals/tileset-tile3d-form.d.ts +12 -0
  275. package/dist/modals/tilesets-modals/tileset-tile3d-form.js +389 -0
  276. package/dist/modals/tilesets-modals/tileset-vector-form.d.ts +3 -3
  277. package/dist/modals/tilesets-modals/tileset-vector-form.js +58 -4
  278. package/dist/modals/tilesets-modals/tileset-wms-form.d.ts +1 -1
  279. package/dist/modals/tilesets-modals/tileset-wms-form.js +55 -11
  280. package/dist/notification-panel/notification-item.d.ts +1 -53
  281. package/dist/notification-panel/notification-item.js +47 -75
  282. package/dist/notification-panel.d.ts +1 -1
  283. package/dist/notification-panel.js +20 -42
  284. package/dist/plot-container.js +55 -14
  285. package/dist/side-panel/add-by-dataset-button.d.ts +1 -1
  286. package/dist/side-panel/add-by-dataset-button.js +3 -3
  287. package/dist/side-panel/common/dataset-info.d.ts +2 -2
  288. package/dist/side-panel/common/dataset-info.js +2 -2
  289. package/dist/side-panel/common/dataset-tag.d.ts +2 -2
  290. package/dist/side-panel/common/dataset-title.d.ts +2 -2
  291. package/dist/side-panel/common/source-data-catalog.d.ts +3 -3
  292. package/dist/side-panel/common/types.d.ts +8 -8
  293. package/dist/side-panel/custom-panel.d.ts +2 -2
  294. package/dist/side-panel/filter-manager.d.ts +3 -3
  295. package/dist/side-panel/filter-panel/add-filter-button.d.ts +1 -1
  296. package/dist/side-panel/filter-panel/filter-panel-header.d.ts +2 -2
  297. package/dist/side-panel/interaction-manager.d.ts +1 -1
  298. package/dist/side-panel/interaction-panel/brush-config.d.ts +1 -1
  299. package/dist/side-panel/interaction-panel/geocoder-config.d.ts +11 -0
  300. package/dist/side-panel/interaction-panel/geocoder-config.js +45 -0
  301. package/dist/side-panel/interaction-panel/interaction-panel.d.ts +3 -2
  302. package/dist/side-panel/interaction-panel/interaction-panel.js +10 -3
  303. package/dist/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.d.ts +3 -3
  304. package/dist/side-panel/interaction-panel/tooltip-config.d.ts +1 -1
  305. package/dist/side-panel/layer-manager.d.ts +2 -2
  306. package/dist/side-panel/layer-manager.js +11 -3
  307. package/dist/side-panel/layer-panel/add-layer-button.d.ts +1 -1
  308. package/dist/side-panel/layer-panel/channel-by-value-selector.d.ts +1 -1
  309. package/dist/side-panel/layer-panel/color-breaks-panel.d.ts +4 -4
  310. package/dist/side-panel/layer-panel/color-palette-preset.d.ts +1 -1
  311. package/dist/side-panel/layer-panel/color-palette.d.ts +2 -2
  312. package/dist/side-panel/layer-panel/color-range-selector.d.ts +3 -3
  313. package/dist/side-panel/layer-panel/color-scale-selector.d.ts +5 -5
  314. package/dist/side-panel/layer-panel/color-scale-selector.js +1 -1
  315. package/dist/side-panel/layer-panel/color-selector.d.ts +3 -3
  316. package/dist/side-panel/layer-panel/column-selector.d.ts +1 -1
  317. package/dist/side-panel/layer-panel/custom-palette.d.ts +10 -10
  318. package/dist/side-panel/layer-panel/custom-palette.js +5 -5
  319. package/dist/side-panel/layer-panel/custom-picker.d.ts +1 -1
  320. package/dist/side-panel/layer-panel/dataset-layer-group.d.ts +1 -1
  321. package/dist/side-panel/layer-panel/dataset-layer-section.d.ts +1 -1
  322. package/dist/side-panel/layer-panel/dataset-layer-section.js +19 -3
  323. package/dist/side-panel/layer-panel/dataset-section.d.ts +2 -2
  324. package/dist/side-panel/layer-panel/dimension-scale-selector.d.ts +1 -1
  325. package/dist/side-panel/layer-panel/how-to-button.d.ts +1 -1
  326. package/dist/side-panel/layer-panel/layer-color-selector.d.ts +3 -3
  327. package/dist/side-panel/layer-panel/layer-column-config.d.ts +1 -1
  328. package/dist/side-panel/layer-panel/layer-column-mode-config.d.ts +3 -3
  329. package/dist/side-panel/layer-panel/layer-config-group.d.ts +5 -5
  330. package/dist/side-panel/layer-panel/layer-configurator.d.ts +6 -4
  331. package/dist/side-panel/layer-panel/layer-configurator.js +408 -72
  332. package/dist/side-panel/layer-panel/layer-error-message.d.ts +1 -1
  333. package/dist/side-panel/layer-panel/layer-list.d.ts +2 -2
  334. package/dist/side-panel/layer-panel/layer-panel-header.d.ts +5 -5
  335. package/dist/side-panel/layer-panel/layer-panel-header.js +2 -2
  336. package/dist/side-panel/layer-panel/layer-panel.d.ts +1 -1
  337. package/dist/side-panel/layer-panel/layer-type-dropdown-list.d.ts +2 -2
  338. package/dist/side-panel/layer-panel/layer-type-list-item.d.ts +2 -2
  339. package/dist/side-panel/layer-panel/layer-type-selector.d.ts +1 -1
  340. package/dist/side-panel/layer-panel/radius-by-zoom-input.d.ts +1 -1
  341. package/dist/side-panel/layer-panel/raster-tile-layer-configurator.d.ts +2 -2
  342. package/dist/side-panel/layer-panel/raster-tile-layer-configurator.js +127 -27
  343. package/dist/side-panel/layer-panel/scenegraph-model-selector.d.ts +24 -0
  344. package/dist/side-panel/layer-panel/scenegraph-model-selector.js +123 -0
  345. package/dist/side-panel/layer-panel/single-color-palette.d.ts +1 -1
  346. package/dist/side-panel/layer-panel/text-label-panel.d.ts +2 -2
  347. package/dist/side-panel/layer-panel/text-label-panel.js +11 -2
  348. package/dist/side-panel/layer-panel/vector-tile-layer-configurator.d.ts +3 -3
  349. package/dist/side-panel/layer-panel/vis-config-by-field-selector.d.ts +1 -1
  350. package/dist/side-panel/layer-panel/vis-config-slider.d.ts +3 -1
  351. package/dist/side-panel/layer-panel/vis-config-slider.js +7 -3
  352. package/dist/side-panel/layer-panel/vis-config-switch.d.ts +1 -1
  353. package/dist/side-panel/map-manager.d.ts +1 -1
  354. package/dist/side-panel/map-style-panel/map-layer-group-color-picker.d.ts +1 -1
  355. package/dist/side-panel/map-style-panel/map-layer-group-item.d.ts +2 -2
  356. package/dist/side-panel/map-style-panel/map-layer-selector.d.ts +1 -1
  357. package/dist/side-panel/map-style-panel/map-style-selector.d.ts +1 -1
  358. package/dist/side-panel/panel-header-action.d.ts +1 -1
  359. package/dist/side-panel/panel-header.d.ts +13 -12
  360. package/dist/side-panel/panel-header.js +9 -2
  361. package/dist/side-panel/panel-tab.d.ts +5 -5
  362. package/dist/side-panel/panel-tab.js +4 -4
  363. package/dist/side-panel/panel-title.d.ts +1 -1
  364. package/dist/side-panel/panel-toggle.d.ts +1 -1
  365. package/dist/side-panel/panel-view-list-toggle.d.ts +3 -3
  366. package/dist/side-panel/side-bar.d.ts +2 -2
  367. package/dist/side-panel.d.ts +1 -1
  368. package/dist/side-panel.js +5 -1
  369. package/dist/types.d.ts +3 -3
  370. package/package.json +41 -29
@@ -1,12 +1,13 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- var _typeof = require("@babel/runtime/helpers/typeof");
4
+ var _typeof3 = require("@babel/runtime/helpers/typeof");
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
8
  exports.StyledColorSelectorWrapper = exports.PanelLabelWrapper = void 0;
9
9
  exports["default"] = EffectConfiguratorFactory;
10
+ var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
10
11
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
12
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
12
13
  var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
@@ -17,12 +18,14 @@ var _constants = require("@kepler.gl/constants");
17
18
  var _utils = require("@kepler.gl/utils");
18
19
  var _rangeSlider = _interopRequireDefault(require("../common/range-slider"));
19
20
  var _icons = require("../common/icons");
21
+ var _styledComponents2 = require("../common/styled-components");
20
22
  var _effectTimeConfigurator = _interopRequireDefault(require("./effect-time-configurator"));
21
23
  var _compactColorPicker = _interopRequireDefault(require("./compact-color-picker"));
22
- var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11, _templateObject12; // SPDX-License-Identifier: MIT
24
+ var _surfaceFogSection = _interopRequireWildcard(require("./surface-fog-section"));
25
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11, _templateObject12, _templateObject13, _templateObject14, _templateObject15, _templateObject16, _templateObject17, _templateObject18; // SPDX-License-Identifier: MIT
23
26
  // Copyright contributors to the kepler.gl project
24
27
  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); }
25
- 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; }
28
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof3(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; }
26
29
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
27
30
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
28
31
  var StyledEffectConfigurator = _styledComponents["default"].div.attrs({
@@ -40,8 +43,8 @@ var StyledVerticalSeparator = _styledComponents["default"].div(_templateObject4
40
43
  return props.theme.inputBgd;
41
44
  });
42
45
  var StyledWrapper = _styledComponents["default"].div(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: ", "px;\n"])), function (props) {
43
- var _props$marginBottom;
44
- return (_props$marginBottom = props.marginBottom) !== null && _props$marginBottom !== void 0 ? _props$marginBottom : 9;
46
+ var _props$$marginBottom;
47
+ return (_props$$marginBottom = props.$marginBottom) !== null && _props$$marginBottom !== void 0 ? _props$$marginBottom : 9;
45
48
  });
46
49
  var StyledConfigSection = _styledComponents["default"].div(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: column;\n"])));
47
50
  var SectionTitle = _styledComponents["default"].div(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2["default"])(["\n font-size: ", ";\n color: ", ";\n margin-bottom: 5px;\n text-transform: capitalize;\n"])), function (props) {
@@ -68,14 +71,36 @@ var RegularSectionTitleWrapper = _styledComponents["default"].div.attrs({
68
71
  var RegularSliderWrapper = _styledComponents["default"].div.attrs({
69
72
  className: 'effect-configurator__pp-section-control'
70
73
  })(_templateObject12 || (_templateObject12 = (0, _taggedTemplateLiteral2["default"])(["\n height: 32px;\n .kg-range-slider__input {\n height: 32px;\n text-align: center;\n padding: 3px 6px;\n }\n .kg-slider {\n padding-left: 6px;\n }\n .kg-range-slider {\n padding: 0px !important;\n }\n"])));
74
+ var StyledCheckboxWrapper = _styledComponents["default"].div.attrs({
75
+ className: 'effect-configurator__pp-section-checkbox'
76
+ })(_templateObject13 || (_templateObject13 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n align-items: center;\n cursor: pointer;\n"])));
77
+ var StyledCheckbox = _styledComponents["default"].input(_templateObject14 || (_templateObject14 = (0, _taggedTemplateLiteral2["default"])(["\n margin-right: 6px;\n cursor: pointer;\n accent-color: ", ";\n"])), function (props) {
78
+ return props.theme.activeColor;
79
+ });
80
+ var StyledCheckboxLabel = _styledComponents["default"].label(_templateObject15 || (_templateObject15 = (0, _taggedTemplateLiteral2["default"])(["\n font-size: ", ";\n color: ", ";\n cursor: pointer;\n white-space: nowrap;\n"])), function (props) {
81
+ return props.theme.inputFontSize;
82
+ }, function (props) {
83
+ return props.theme.effectPanelTextSecondary1;
84
+ });
85
+ var StyledHintTooltip = (0, _styledComponents["default"])(_styledComponents2.Tooltip)(_templateObject16 || (_templateObject16 = (0, _taggedTemplateLiteral2["default"])(["\n &.__react_component_tooltip {\n max-width: 220px;\n white-space: normal;\n line-height: 1.4;\n text-align: left;\n }\n"])));
86
+ var StyledHintIcon = _styledComponents["default"].span(_templateObject17 || (_templateObject17 = (0, _taggedTemplateLiteral2["default"])(["\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 14px;\n height: 14px;\n margin-left: 6px;\n border-radius: 50%;\n font-size: 9px;\n font-weight: 600;\n line-height: 1;\n color: ", ";\n border: 1px solid ", ";\n cursor: help;\n &:hover {\n color: ", ";\n border-color: ", ";\n }\n"])), function (props) {
87
+ return props.theme.labelColor;
88
+ }, function (props) {
89
+ return props.theme.labelColor;
90
+ }, function (props) {
91
+ return props.theme.textColorHl;
92
+ }, function (props) {
93
+ return props.theme.textColorHl;
94
+ });
95
+ var StyledColorCheckboxRow = _styledComponents["default"].div(_templateObject18 || (_templateObject18 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 8px;\n"])));
71
96
  var COMMON_SLIDER_PROPS = {
72
97
  showInput: true,
73
98
  isRanged: false,
74
99
  step: 0.001,
75
100
  label: 'value'
76
101
  };
77
- EffectConfiguratorFactory.deps = [_rangeSlider["default"], _effectTimeConfigurator["default"]];
78
- function EffectConfiguratorFactory(RangeSlider, EffectTimeConfigurator) {
102
+ EffectConfiguratorFactory.deps = [_rangeSlider["default"], _effectTimeConfigurator["default"], _surfaceFogSection["default"]];
103
+ function EffectConfiguratorFactory(RangeSlider, EffectTimeConfigurator, SurfaceFogElevationSection) {
79
104
  var ShadowEffectConfigurator = function ShadowEffectConfigurator(_ref) {
80
105
  var effect = _ref.effect,
81
106
  updateEffectConfig = _ref.updateEffectConfig;
@@ -83,11 +108,18 @@ function EffectConfiguratorFactory(RangeSlider, EffectTimeConfigurator) {
83
108
  id = effect.id;
84
109
  var sliderProps = (0, _react.useMemo)(function () {
85
110
  var propNames = ['shadowIntensity', 'ambientLightIntensity', 'sunLightIntensity'];
111
+ var descriptions = effect.getParameterDescriptions();
86
112
  return propNames.map(function (propName) {
113
+ var _desc$min, _desc$max;
114
+ var desc = descriptions.find(function (d) {
115
+ return d.name === propName;
116
+ });
117
+ var min = (_desc$min = desc === null || desc === void 0 ? void 0 : desc.min) !== null && _desc$min !== void 0 ? _desc$min : 0;
118
+ var max = (_desc$max = desc === null || desc === void 0 ? void 0 : desc.max) !== null && _desc$max !== void 0 ? _desc$max : 1;
87
119
  return {
88
120
  value1: parameters[propName],
89
- range: [0, 1],
90
- value0: 0,
121
+ range: [min, max],
122
+ value0: min,
91
123
  onChange: function onChange(value, event) {
92
124
  updateEffectConfig(event, id, {
93
125
  parameters: (0, _defineProperty2["default"])({}, propName, value[1])
@@ -95,7 +127,7 @@ function EffectConfiguratorFactory(RangeSlider, EffectTimeConfigurator) {
95
127
  }
96
128
  };
97
129
  });
98
- }, [id, parameters, updateEffectConfig]);
130
+ }, [id, effect, parameters, updateEffectConfig]);
99
131
  var onTimeParametersChanged = (0, _react.useCallback)(function (parameters) {
100
132
  updateEffectConfig(null, id, {
101
133
  parameters: _objectSpread(_objectSpread(_objectSpread({}, parameters.timestamp ? {
@@ -130,27 +162,27 @@ function EffectConfiguratorFactory(RangeSlider, EffectTimeConfigurator) {
130
162
  timeMode: parameters.timeMode,
131
163
  onChange: onTimeParametersChanged
132
164
  }), /*#__PURE__*/_react["default"].createElement(StyledVerticalSeparator, null), /*#__PURE__*/_react["default"].createElement(StyledWrapper, {
133
- marginBottom: 0
165
+ $marginBottom: 0
134
166
  }, /*#__PURE__*/_react["default"].createElement(SectionTitle, null, 'Shadow')), /*#__PURE__*/_react["default"].createElement(StyledWrapper, {
135
- marginBottom: 16
167
+ $marginBottom: 16
136
168
  }, /*#__PURE__*/_react["default"].createElement(_compactColorPicker["default"], {
137
169
  label: 'Color',
138
170
  color: colorPickerProps[2].colorSets[0].selectedColor,
139
171
  onSetColor: colorPickerProps[2].colorSets[0].setColor,
140
172
  Icon: _icons.ArrowDownSmall
141
173
  }), /*#__PURE__*/_react["default"].createElement(StyledConfigSection, null, /*#__PURE__*/_react["default"].createElement(SectionSubTitle, null, "Intensity"), /*#__PURE__*/_react["default"].createElement(StyleSliderWrapper, null, /*#__PURE__*/_react["default"].createElement(RangeSlider, (0, _extends2["default"])({}, COMMON_SLIDER_PROPS, sliderProps[0]))))), /*#__PURE__*/_react["default"].createElement(StyledWrapper, {
142
- marginBottom: 0
174
+ $marginBottom: 0
143
175
  }, /*#__PURE__*/_react["default"].createElement(SectionTitle, null, 'Ambient light')), /*#__PURE__*/_react["default"].createElement(StyledWrapper, {
144
- marginBottom: 16
176
+ $marginBottom: 16
145
177
  }, /*#__PURE__*/_react["default"].createElement(_compactColorPicker["default"], {
146
178
  label: 'Color',
147
179
  color: colorPickerProps[0].colorSets[0].selectedColor,
148
180
  onSetColor: colorPickerProps[0].colorSets[0].setColor,
149
181
  Icon: _icons.ArrowDownSmall
150
182
  }), /*#__PURE__*/_react["default"].createElement(StyledConfigSection, null, /*#__PURE__*/_react["default"].createElement(SectionSubTitle, null, "Intensity"), /*#__PURE__*/_react["default"].createElement(StyleSliderWrapper, null, /*#__PURE__*/_react["default"].createElement(RangeSlider, (0, _extends2["default"])({}, COMMON_SLIDER_PROPS, sliderProps[1]))))), /*#__PURE__*/_react["default"].createElement(StyledWrapper, {
151
- marginBottom: 0
183
+ $marginBottom: 0
152
184
  }, /*#__PURE__*/_react["default"].createElement(SectionTitle, null, 'Sun light')), /*#__PURE__*/_react["default"].createElement(StyledWrapper, {
153
- marginBottom: 0
185
+ $marginBottom: 0
154
186
  }, /*#__PURE__*/_react["default"].createElement(_compactColorPicker["default"], {
155
187
  label: 'Color',
156
188
  color: colorPickerProps[1].colorSets[0].selectedColor,
@@ -159,18 +191,30 @@ function EffectConfiguratorFactory(RangeSlider, EffectTimeConfigurator) {
159
191
  }), /*#__PURE__*/_react["default"].createElement(StyledConfigSection, null, /*#__PURE__*/_react["default"].createElement(SectionSubTitle, null, "Intensity"), /*#__PURE__*/_react["default"].createElement(StyleSliderWrapper, null, /*#__PURE__*/_react["default"].createElement(RangeSlider, (0, _extends2["default"])({}, COMMON_SLIDER_PROPS, sliderProps[2]))))));
160
192
  };
161
193
  var defaultUniforms = {};
194
+ var ELEVATION_EXTRA_PARAMS = new Set(['heightEnd', 'animateHeight', 'linearEasing']);
162
195
  var PostProcessingEffectConfigurator = function PostProcessingEffectConfigurator(_ref2) {
163
196
  var _effect$deckEffect;
164
197
  var effect = _ref2.effect,
165
198
  updateEffectConfig = _ref2.updateEffectConfig;
166
- var uniforms = ((_effect$deckEffect = effect.deckEffect) === null || _effect$deckEffect === void 0 ? void 0 : _effect$deckEffect.module.uniforms) || defaultUniforms;
199
+ var uniforms = ((_effect$deckEffect = effect.deckEffect) === null || _effect$deckEffect === void 0 ? void 0 : _effect$deckEffect.module.propTypes) || defaultUniforms;
167
200
  var parameterDescriptions = effect.getParameterDescriptions();
168
201
  var parameters = effect.parameters,
169
202
  id = effect.id;
203
+ var hasElevationSection = parameterDescriptions.some(function (d) {
204
+ return d.name === 'animateHeight';
205
+ });
170
206
  var flatParameterDescriptions = (0, _react.useMemo)(function () {
171
207
  return parameterDescriptions.reduce(function (acc, description) {
172
- if (description.type === 'array') {
173
- // split arrays of controls into a separate controls for each component
208
+ if (hasElevationSection && ELEVATION_EXTRA_PARAMS.has(description.name)) return acc;
209
+ if (hasElevationSection && description.name === 'height') {
210
+ acc.push(_objectSpread(_objectSpread({}, description), {}, {
211
+ type: _surfaceFogSection.ELEVATION_SECTION_TYPE
212
+ }));
213
+ return acc;
214
+ }
215
+ if (description.type === 'color') {
216
+ acc.push(description);
217
+ } else if (description.type === 'array') {
174
218
  if (Array.isArray(description.defaultValue)) {
175
219
  description.defaultValue.forEach(function (_, index) {
176
220
  var _description$label;
@@ -185,19 +229,55 @@ function EffectConfiguratorFactory(RangeSlider, EffectTimeConfigurator) {
185
229
  }
186
230
  return acc;
187
231
  }, []);
188
- }, [parameterDescriptions]);
232
+ }, [parameterDescriptions, hasElevationSection]);
189
233
  var controls = (0, _react.useMemo)(function () {
190
234
  return flatParameterDescriptions.map(function (desc) {
235
+ if (desc.type === _surfaceFogSection.ELEVATION_SECTION_TYPE) {
236
+ return {
237
+ isElevationSection: true
238
+ };
239
+ }
240
+ if (desc.type === 'color') {
241
+ return {
242
+ isColor: true,
243
+ label: desc.label || desc.name,
244
+ paramName: desc.name,
245
+ color: parameters[desc.name] || desc.defaultValue || [255, 255, 255],
246
+ onSetColor: function onSetColor(v) {
247
+ return updateEffectConfig(null, id, {
248
+ parameters: (0, _defineProperty2["default"])({}, desc.name, v)
249
+ });
250
+ }
251
+ };
252
+ }
253
+ if (desc.type === 'checkbox') {
254
+ var _label = typeof desc.label === 'string' ? desc.label : desc.name;
255
+ return {
256
+ isCheckbox: true,
257
+ label: _label,
258
+ paramName: desc.name,
259
+ checked: Boolean(parameters[desc.name]),
260
+ tooltip: desc.tooltip,
261
+ onChange: function onChange() {
262
+ return updateEffectConfig(null, id, {
263
+ parameters: (0, _defineProperty2["default"])({}, desc.name, !parameters[desc.name])
264
+ });
265
+ }
266
+ };
267
+ }
191
268
  var paramName = desc.name;
192
- var uniform = uniforms[desc.name];
193
- if (!uniform && uniform !== 0 || uniform["private"]) {
269
+ var rawUniform = uniforms[desc.name];
270
+ if (rawUniform && rawUniform["private"]) {
194
271
  return null;
195
272
  }
273
+
274
+ // luma.gl 9 wraps array propTypes as {value: [...]}
275
+ var uniform = rawUniform && (0, _typeof2["default"])(rawUniform) === 'object' && Array.isArray(rawUniform.value) ? rawUniform.value : rawUniform;
196
276
  var prevValue = parameters[paramName];
197
277
  var label = desc.label === false ? false : desc.label || desc.name;
198
278
 
199
279
  // the uniform is [number, number] array
200
- if (uniform.length === 2) {
280
+ if (Array.isArray(uniform) && uniform.length === 2) {
201
281
  return {
202
282
  label: label,
203
283
  value1: prevValue[desc.index || 0] || 0,
@@ -212,12 +292,12 @@ function EffectConfiguratorFactory(RangeSlider, EffectTimeConfigurator) {
212
292
  }
213
293
  // the uniform is a plain number without any description
214
294
  else if ((0, _utils.isNumber)(uniform)) {
215
- var _desc$min, _desc$max, _desc$min2;
295
+ var _desc$min2, _desc$max2, _desc$min3;
216
296
  return {
217
297
  label: label,
218
298
  value1: prevValue !== null && prevValue !== void 0 ? prevValue : 0,
219
- range: [(_desc$min = desc.min) !== null && _desc$min !== void 0 ? _desc$min : 0, (_desc$max = desc.max) !== null && _desc$max !== void 0 ? _desc$max : 500],
220
- value0: (_desc$min2 = desc.min) !== null && _desc$min2 !== void 0 ? _desc$min2 : 0,
299
+ range: [(_desc$min2 = desc.min) !== null && _desc$min2 !== void 0 ? _desc$min2 : 0, (_desc$max2 = desc.max) !== null && _desc$max2 !== void 0 ? _desc$max2 : 500],
300
+ value0: (_desc$min3 = desc.min) !== null && _desc$min3 !== void 0 ? _desc$min3 : 0,
221
301
  onChange: function onChange(newValue, event) {
222
302
  updateEffectConfig(event, id, {
223
303
  parameters: (0, _defineProperty2["default"])({}, paramName, newValue[1])
@@ -226,13 +306,36 @@ function EffectConfiguratorFactory(RangeSlider, EffectTimeConfigurator) {
226
306
  };
227
307
  }
228
308
  // the uniform description is {value: 0, min: 0, max: 1, ...}
229
- else if ((0, _utils.isNumber)(uniform.value)) {
230
- var _ref3, _ref4, _desc$min3, _ref5, _ref6, _desc$max2, _ref7, _ref8, _desc$min4;
309
+ else if (uniform && (0, _utils.isNumber)(uniform.value)) {
310
+ var _ref3, _ref4, _desc$min4, _ref5, _ref6, _desc$max3;
311
+ var rangeMin = (_ref3 = (_ref4 = (_desc$min4 = desc.min) !== null && _desc$min4 !== void 0 ? _desc$min4 : uniform.min) !== null && _ref4 !== void 0 ? _ref4 : uniform.softMin) !== null && _ref3 !== void 0 ? _ref3 : 0;
312
+ var rangeMax = (_ref5 = (_ref6 = (_desc$max3 = desc.max) !== null && _desc$max3 !== void 0 ? _desc$max3 : uniform.max) !== null && _ref6 !== void 0 ? _ref6 : uniform.softMax) !== null && _ref5 !== void 0 ? _ref5 : 1;
313
+ var rangeSpan = rangeMax - rangeMin;
314
+ var step = rangeSpan > 10 ? 1 : 0.001;
231
315
  return {
232
316
  label: label,
233
317
  value1: prevValue || 0,
234
- range: [(_ref3 = (_ref4 = (_desc$min3 = desc.min) !== null && _desc$min3 !== void 0 ? _desc$min3 : uniform.min) !== null && _ref4 !== void 0 ? _ref4 : uniform.softMin) !== null && _ref3 !== void 0 ? _ref3 : 0, (_ref5 = (_ref6 = (_desc$max2 = desc.max) !== null && _desc$max2 !== void 0 ? _desc$max2 : uniform.max) !== null && _ref6 !== void 0 ? _ref6 : uniform.softMax) !== null && _ref5 !== void 0 ? _ref5 : 1],
235
- value0: (_ref7 = (_ref8 = (_desc$min4 = desc.min) !== null && _desc$min4 !== void 0 ? _desc$min4 : uniform.min) !== null && _ref8 !== void 0 ? _ref8 : uniform.softMin) !== null && _ref7 !== void 0 ? _ref7 : 0,
318
+ range: [rangeMin, rangeMax],
319
+ value0: rangeMin,
320
+ step: step,
321
+ onChange: function onChange(newValue, event) {
322
+ updateEffectConfig(event, id, {
323
+ parameters: (0, _defineProperty2["default"])({}, paramName, newValue[1])
324
+ });
325
+ }
326
+ };
327
+ }
328
+ // Parameter defined in effect description but not in shader propTypes
329
+ else if (desc.min !== undefined && desc.max !== undefined) {
330
+ var _ref7;
331
+ var _rangeSpan = desc.max - desc.min;
332
+ var _step = _rangeSpan > 10 ? 1 : 0.001;
333
+ return {
334
+ label: label,
335
+ value1: (_ref7 = prevValue !== null && prevValue !== void 0 ? prevValue : desc.defaultValue) !== null && _ref7 !== void 0 ? _ref7 : 0,
336
+ range: [desc.min, desc.max],
337
+ value0: desc.min,
338
+ step: _step,
236
339
  onChange: function onChange(newValue, event) {
237
340
  updateEffectConfig(event, id, {
238
341
  parameters: (0, _defineProperty2["default"])({}, paramName, newValue[1])
@@ -247,21 +350,117 @@ function EffectConfiguratorFactory(RangeSlider, EffectTimeConfigurator) {
247
350
  }, [flatParameterDescriptions, id, parameters, updateEffectConfig, uniforms]);
248
351
  return /*#__PURE__*/_react["default"].createElement(StyledEffectConfigurator, {
249
352
  key: effect.id
250
- }, flatParameterDescriptions.map(function (desc, parameterIndex) {
251
- var control = controls[parameterIndex];
252
- if (!control) {
253
- return null;
353
+ }, function () {
354
+ var elements = [];
355
+ var i = 0;
356
+ var _loop = function _loop() {
357
+ var control = controls[i];
358
+ if (!control) {
359
+ i++;
360
+ return 0; // continue
361
+ }
362
+ if ('isColor' in control) {
363
+ var _control$onSetColor2;
364
+ var nextControl = i + 1 < controls.length ? controls[i + 1] : null;
365
+ if (nextControl && 'isCheckbox' in nextControl) {
366
+ var _control$onSetColor;
367
+ var cbTooltipId = nextControl.tooltip ? "effect-cb-hint-".concat(effect.id, "-").concat(i) : undefined;
368
+ elements.push( /*#__PURE__*/_react["default"].createElement(StyledColorCheckboxRow, {
369
+ key: "".concat(effect.id, "-").concat(i)
370
+ }, /*#__PURE__*/_react["default"].createElement(_compactColorPicker["default"], {
371
+ label: typeof control.label === 'string' ? control.label : 'Color',
372
+ color: control.color,
373
+ onSetColor: (_control$onSetColor = control.onSetColor) !== null && _control$onSetColor !== void 0 ? _control$onSetColor : function () {
374
+ /* noop */
375
+ },
376
+ Icon: _icons.ArrowDownSmall
377
+ }), /*#__PURE__*/_react["default"].createElement(StyledCheckboxWrapper, {
378
+ onClick: function onClick() {
379
+ return nextControl.onChange();
380
+ }
381
+ }, /*#__PURE__*/_react["default"].createElement(StyledCheckbox, {
382
+ type: "checkbox",
383
+ checked: nextControl.checked,
384
+ onChange: function onChange() {
385
+ return nextControl.onChange();
386
+ },
387
+ onClick: function onClick(e) {
388
+ return e.stopPropagation();
389
+ }
390
+ }), /*#__PURE__*/_react["default"].createElement(StyledCheckboxLabel, null, nextControl.label), nextControl.tooltip ? /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(StyledHintIcon, {
391
+ "data-tip": true,
392
+ "data-for": cbTooltipId,
393
+ onClick: function onClick(e) {
394
+ return e.stopPropagation();
395
+ }
396
+ }, "?"), /*#__PURE__*/_react["default"].createElement(StyledHintTooltip, {
397
+ id: cbTooltipId,
398
+ effect: "solid",
399
+ delayShow: 200
400
+ }, nextControl.tooltip)) : null)));
401
+ i += 2;
402
+ return 0; // continue
403
+ }
404
+ elements.push( /*#__PURE__*/_react["default"].createElement(RegularOuterWrapper, {
405
+ key: "".concat(effect.id, "-").concat(i)
406
+ }, /*#__PURE__*/_react["default"].createElement(_compactColorPicker["default"], {
407
+ label: typeof control.label === 'string' ? control.label : 'Color',
408
+ color: control.color,
409
+ onSetColor: (_control$onSetColor2 = control.onSetColor) !== null && _control$onSetColor2 !== void 0 ? _control$onSetColor2 : function () {
410
+ /* noop */
411
+ },
412
+ Icon: _icons.ArrowDownSmall
413
+ })));
414
+ i++;
415
+ return 0; // continue
416
+ }
417
+ if ('isCheckbox' in control) {
418
+ elements.push( /*#__PURE__*/_react["default"].createElement(RegularOuterWrapper, {
419
+ key: "".concat(effect.id, "-").concat(i)
420
+ }, /*#__PURE__*/_react["default"].createElement(StyledCheckboxWrapper, {
421
+ onClick: function onClick() {
422
+ return control.onChange();
423
+ }
424
+ }, /*#__PURE__*/_react["default"].createElement(StyledCheckbox, {
425
+ type: "checkbox",
426
+ checked: control.checked,
427
+ onChange: function onChange() {
428
+ return control.onChange();
429
+ },
430
+ onClick: function onClick(e) {
431
+ return e.stopPropagation();
432
+ }
433
+ }), /*#__PURE__*/_react["default"].createElement(StyledCheckboxLabel, null, control.label))));
434
+ i++;
435
+ return 0; // continue
436
+ }
437
+ if ('isElevationSection' in control) {
438
+ elements.push( /*#__PURE__*/_react["default"].createElement(SurfaceFogElevationSection, {
439
+ key: "".concat(effect.id, "-elevation"),
440
+ effect: effect,
441
+ updateEffectConfig: updateEffectConfig
442
+ }));
443
+ i++;
444
+ return 0; // continue
445
+ }
446
+ elements.push( /*#__PURE__*/_react["default"].createElement(RegularOuterWrapper, {
447
+ key: "".concat(effect.id, "-").concat(i)
448
+ }, control.label ? /*#__PURE__*/_react["default"].createElement(RegularSectionTitleWrapper, null, control.label) : null, /*#__PURE__*/_react["default"].createElement(RegularSliderWrapper, null, /*#__PURE__*/_react["default"].createElement(RangeSlider, (0, _extends2["default"])({
449
+ key: i
450
+ }, COMMON_SLIDER_PROPS, control)))));
451
+ i++;
452
+ },
453
+ _ret;
454
+ while (i < flatParameterDescriptions.length) {
455
+ _ret = _loop();
456
+ if (_ret === 0) continue;
254
457
  }
255
- return /*#__PURE__*/_react["default"].createElement(RegularOuterWrapper, {
256
- key: "".concat(effect.id, "-").concat(parameterIndex)
257
- }, control.label ? /*#__PURE__*/_react["default"].createElement(RegularSectionTitleWrapper, null, control.label) : null, /*#__PURE__*/_react["default"].createElement(RegularSliderWrapper, null, /*#__PURE__*/_react["default"].createElement(RangeSlider, (0, _extends2["default"])({
258
- key: parameterIndex
259
- }, COMMON_SLIDER_PROPS, control))));
260
- }));
458
+ return elements;
459
+ }());
261
460
  };
262
- var EffectConfigurator = function EffectConfigurator(_ref9) {
263
- var effect = _ref9.effect,
264
- updateEffectConfig = _ref9.updateEffectConfig;
461
+ var EffectConfigurator = function EffectConfigurator(_ref8) {
462
+ var effect = _ref8.effect,
463
+ updateEffectConfig = _ref8.updateEffectConfig;
265
464
  return effect.type === _constants.LIGHT_AND_SHADOW_EFFECT.type ? /*#__PURE__*/_react["default"].createElement(ShadowEffectConfigurator, {
266
465
  effect: effect,
267
466
  updateEffectConfig: updateEffectConfig
@@ -272,4 +471,4 @@ function EffectConfiguratorFactory(RangeSlider, EffectTimeConfigurator) {
272
471
  };
273
472
  return (0, _reactIntl.injectIntl)(EffectConfigurator);
274
473
  }
275
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfcmVhY3RJbnRsIiwiX2NvbnN0YW50cyIsIl91dGlscyIsIl9yYW5nZVNsaWRlciIsIl9pY29ucyIsIl9lZmZlY3RUaW1lQ29uZmlndXJhdG9yIiwiX2NvbXBhY3RDb2xvclBpY2tlciIsIl90ZW1wbGF0ZU9iamVjdCIsIl90ZW1wbGF0ZU9iamVjdDIiLCJfdGVtcGxhdGVPYmplY3QzIiwiX3RlbXBsYXRlT2JqZWN0NCIsIl90ZW1wbGF0ZU9iamVjdDUiLCJfdGVtcGxhdGVPYmplY3Q2IiwiX3RlbXBsYXRlT2JqZWN0NyIsIl90ZW1wbGF0ZU9iamVjdDgiLCJfdGVtcGxhdGVPYmplY3Q5IiwiX3RlbXBsYXRlT2JqZWN0MTAiLCJfdGVtcGxhdGVPYmplY3QxMSIsIl90ZW1wbGF0ZU9iamVjdDEyIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0Iiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiU3R5bGVkRWZmZWN0Q29uZmlndXJhdG9yIiwic3R5bGVkIiwiZGl2IiwiYXR0cnMiLCJjbGFzc05hbWUiLCJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsMiIsInByb3BzIiwidGhlbWUiLCJlZmZlY3RDb25maWd1cmF0b3JNYXJnaW4iLCJlZmZlY3RDb25maWd1cmF0b3JQYWRkaW5nIiwiUGFuZWxMYWJlbFdyYXBwZXIiLCJleHBvcnRzIiwiU3R5bGVkQ29sb3JTZWxlY3RvcldyYXBwZXIiLCJTdHlsZWRWZXJ0aWNhbFNlcGFyYXRvciIsImlucHV0QmdkIiwiU3R5bGVkV3JhcHBlciIsIl9wcm9wcyRtYXJnaW5Cb3R0b20iLCJtYXJnaW5Cb3R0b20iLCJTdHlsZWRDb25maWdTZWN0aW9uIiwiU2VjdGlvblRpdGxlIiwiaW5wdXRGb250U2l6ZSIsImVmZmVjdFBhbmVsVGV4dFNlY29uZGFyeTEiLCJTZWN0aW9uU3ViVGl0bGUiLCJlZmZlY3RQYW5lbFRleHRTZWNvbmRhcnkyIiwiU3R5bGVTbGlkZXJXcmFwcGVyIiwiUmVndWxhck91dGVyV3JhcHBlciIsIlJlZ3VsYXJTZWN0aW9uVGl0bGVXcmFwcGVyIiwiUmVndWxhclNsaWRlcldyYXBwZXIiLCJDT01NT05fU0xJREVSX1BST1BTIiwic2hvd0lucHV0IiwiaXNSYW5nZWQiLCJzdGVwIiwibGFiZWwiLCJFZmZlY3RDb25maWd1cmF0b3JGYWN0b3J5IiwiZGVwcyIsIlJhbmdlU2xpZGVyRmFjdG9yeSIsIkVmZmVjdFRpbWVDb25maWd1cmF0b3JGYWN0b3J5IiwiUmFuZ2VTbGlkZXIiLCJFZmZlY3RUaW1lQ29uZmlndXJhdG9yIiwiU2hhZG93RWZmZWN0Q29uZmlndXJhdG9yIiwiX3JlZiIsImVmZmVjdCIsInVwZGF0ZUVmZmVjdENvbmZpZyIsInBhcmFtZXRlcnMiLCJpZCIsInNsaWRlclByb3BzIiwidXNlTWVtbyIsInByb3BOYW1lcyIsIm1hcCIsInByb3BOYW1lIiwidmFsdWUxIiwicmFuZ2UiLCJ2YWx1ZTAiLCJvbkNoYW5nZSIsInZhbHVlIiwiZXZlbnQiLCJvblRpbWVQYXJhbWV0ZXJzQ2hhbmdlZCIsInVzZUNhbGxiYWNrIiwidGltZXN0YW1wIiwidGltZXpvbmUiLCJ0aW1lTW9kZSIsImNvbG9yUGlja2VyUHJvcHMiLCJjb2xvclNldHMiLCJzZWxlY3RlZENvbG9yIiwic2V0Q29sb3IiLCJ2IiwiY3JlYXRlRWxlbWVudCIsImtleSIsImNvbG9yIiwib25TZXRDb2xvciIsIkljb24iLCJBcnJvd0Rvd25TbWFsbCIsIl9leHRlbmRzMiIsImRlZmF1bHRVbmlmb3JtcyIsIlBvc3RQcm9jZXNzaW5nRWZmZWN0Q29uZmlndXJhdG9yIiwiX3JlZjIiLCJfZWZmZWN0JGRlY2tFZmZlY3QiLCJ1bmlmb3JtcyIsImRlY2tFZmZlY3QiLCJtb2R1bGUiLCJwYXJhbWV0ZXJEZXNjcmlwdGlvbnMiLCJnZXRQYXJhbWV0ZXJEZXNjcmlwdGlvbnMiLCJmbGF0UGFyYW1ldGVyRGVzY3JpcHRpb25zIiwicmVkdWNlIiwiYWNjIiwiZGVzY3JpcHRpb24iLCJ0eXBlIiwiQXJyYXkiLCJpc0FycmF5IiwiZGVmYXVsdFZhbHVlIiwiXyIsImluZGV4IiwiX2Rlc2NyaXB0aW9uJGxhYmVsIiwiY29udHJvbHMiLCJkZXNjIiwicGFyYW1OYW1lIiwibmFtZSIsInVuaWZvcm0iLCJwcmV2VmFsdWUiLCJuZXdWYWx1ZSIsImlzTnVtYmVyIiwiX2Rlc2MkbWluIiwiX2Rlc2MkbWF4IiwiX2Rlc2MkbWluMiIsIm1pbiIsIm1heCIsIl9yZWYzIiwiX3JlZjQiLCJfZGVzYyRtaW4zIiwiX3JlZjUiLCJfcmVmNiIsIl9kZXNjJG1heDIiLCJfcmVmNyIsIl9yZWY4IiwiX2Rlc2MkbWluNCIsInNvZnRNaW4iLCJzb2Z0TWF4IiwicGFyYW1ldGVySW5kZXgiLCJjb250cm9sIiwiY29uY2F0IiwiRWZmZWN0Q29uZmlndXJhdG9yIiwiX3JlZjkiLCJMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVCIsImluamVjdEludGwiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvZWZmZWN0cy9lZmZlY3QtY29uZmlndXJhdG9yLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgUmVhY3QsIHt1c2VDYWxsYmFjaywgdXNlTWVtb30gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQge2luamVjdEludGwsIEludGxTaGFwZX0gZnJvbSAncmVhY3QtaW50bCc7XG5cbmltcG9ydCB7TElHSFRfQU5EX1NIQURPV19FRkZFQ1R9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7aXNOdW1iZXJ9IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtFZmZlY3QsIEVmZmVjdFVwZGF0ZVByb3BzfSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcblxuaW1wb3J0IFJhbmdlU2xpZGVyRmFjdG9yeSBmcm9tICcuLi9jb21tb24vcmFuZ2Utc2xpZGVyJztcbmltcG9ydCB7QXJyb3dEb3duU21hbGx9IGZyb20gJy4uL2NvbW1vbi9pY29ucyc7XG5pbXBvcnQgRWZmZWN0VGltZUNvbmZpZ3VyYXRvckZhY3RvcnkgZnJvbSAnLi9lZmZlY3QtdGltZS1jb25maWd1cmF0b3InO1xuaW1wb3J0IENvbXBhY3RDb2xvclBpY2tlciBmcm9tICcuL2NvbXBhY3QtY29sb3ItcGlja2VyJztcblxuZXhwb3J0IHR5cGUgRWZmZWN0Q29uZmlndXJhdG9yUHJvcHMgPSB7XG4gIGVmZmVjdDogRWZmZWN0O1xuICB1cGRhdGVFZmZlY3RDb25maWc6IChcbiAgICBlOiBFdmVudCB8IG51bGwgfCB1bmRlZmluZWQsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBjb25maWc6IFBhcnRpYWw8RWZmZWN0VXBkYXRlUHJvcHM+XG4gICkgPT4gdm9pZDtcbn07XG5cbmNvbnN0IFN0eWxlZEVmZmVjdENvbmZpZ3VyYXRvciA9IHN0eWxlZC5kaXYuYXR0cnMoe1xuICBjbGFzc05hbWU6ICdlZmZlY3QtcGFuZWxfX2NvbmZpZydcbn0pYFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5lZmZlY3RDb25maWd1cmF0b3JNYXJnaW59O1xuICBwYWRkaW5nOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmVmZmVjdENvbmZpZ3VyYXRvclBhZGRpbmd9O1xuYDtcblxuZXhwb3J0IGNvbnN0IFBhbmVsTGFiZWxXcmFwcGVyID0gc3R5bGVkLmRpdi5hdHRycyh7XG4gIGNsYXNzTmFtZTogJ3NpZGUtcGFuZWwtcGFuZWxfX2xhYmVsLXdyYXBwZXInXG59KWBcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IHNlbGYtc3RhcnQ7XG4gIG1hcmdpbi1ib3R0b206IDExcHg7XG5cbiAgLnNpZGUtcGFuZWwtcGFuZWxfX2xhYmVsIHtcbiAgICBtYXJnaW4tdG9wOiAycHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMHB4O1xuICB9XG5gO1xuXG5leHBvcnQgY29uc3QgU3R5bGVkQ29sb3JTZWxlY3RvcldyYXBwZXIgPSBzdHlsZWQuZGl2YFxuICBtYXJnaW4tcmlnaHQ6IDVweDtcbiAgbWFyZ2luLWxlZnQ6IDVweDtcbiAgbWFyZ2luLWJvdHRvbTogNnB4O1xuICBtYXJnaW4tdG9wOiAycHg7XG5gO1xuXG5jb25zdCBTdHlsZWRWZXJ0aWNhbFNlcGFyYXRvciA9IHN0eWxlZC5kaXZgXG4gIGhlaWdodDogMXB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmlucHV0QmdkfTtcbiAgbWFyZ2luLXRvcDogMjBweDtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgbWFyZ2luLWxlZnQ6IC0yMHB4O1xuYDtcblxudHlwZSBTdHlsZWRXcmFwcGVyUHJvcHMgPSB7XG4gIG1hcmdpbkJvdHRvbT86IG51bWJlcjtcbn07XG5jb25zdCBTdHlsZWRXcmFwcGVyID0gc3R5bGVkLmRpdjxTdHlsZWRXcmFwcGVyUHJvcHM+YFxuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIG1hcmdpbi1ib3R0b206ICR7cHJvcHMgPT4gcHJvcHMubWFyZ2luQm90dG9tID8/IDl9cHg7XG5gO1xuXG5jb25zdCBTdHlsZWRDb25maWdTZWN0aW9uID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbmA7XG5cbmNvbnN0IFNlY3Rpb25UaXRsZSA9IHN0eWxlZC5kaXZgXG4gIGZvbnQtc2l6ZTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5pbnB1dEZvbnRTaXplfTtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuZWZmZWN0UGFuZWxUZXh0U2Vjb25kYXJ5MX07XG4gIG1hcmdpbi1ib3R0b206IDVweDtcbiAgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7XG5gO1xuXG5jb25zdCBTZWN0aW9uU3ViVGl0bGUgPSBzdHlsZWQuZGl2YFxuICBmb250LXNpemU6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuaW5wdXRGb250U2l6ZX07XG4gIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmVmZmVjdFBhbmVsVGV4dFNlY29uZGFyeTJ9O1xuICBtYXJnaW4tYm90dG9tOiA4cHg7XG4gIG1hcmdpbi1sZWZ0OiA2cHg7XG5gO1xuXG5jb25zdCBTdHlsZVNsaWRlcldyYXBwZXIgPSBzdHlsZWQuZGl2YFxuICBhbGlnbi1zZWxmOiBmbGV4LXN0YXJ0O1xuICB3aWR0aDogMTk5cHg7XG4gIGhlaWdodDogMzJweDtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgLmtnLXJhbmdlLXNsaWRlcl9faW5wdXQge1xuICAgIGhlaWdodDogMzJweDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgcGFkZGluZzogM3B4IDZweDtcbiAgfVxuICAua2ctc2xpZGVyIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDZweDtcbiAgfVxuICAua2ctcmFuZ2Utc2xpZGVyIHtcbiAgICBwYWRkaW5nOiAwcHggIWltcG9ydGFudDtcbiAgfVxuYDtcblxuY29uc3QgUmVndWxhck91dGVyV3JhcHBlciA9IHN0eWxlZC5kaXYuYXR0cnMoe1xuICBjbGFzc05hbWU6ICdlZmZlY3QtY29uZmlndXJhdG9yX19wcC1zZWN0aW9uJ1xufSlgXG4gIG1hcmdpbi1ib3R0b206IDhweDtcbmA7XG5cbmNvbnN0IFJlZ3VsYXJTZWN0aW9uVGl0bGVXcmFwcGVyID0gc3R5bGVkLmRpdi5hdHRycyh7XG4gIGNsYXNzTmFtZTogJ2VmZmVjdC1jb25maWd1cmF0b3JfX3BwLXNlY3Rpb24tdGl0bGUnXG59KWBcbiAgZm9udC1zaXplOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmlucHV0Rm9udFNpemV9O1xuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5lZmZlY3RQYW5lbFRleHRTZWNvbmRhcnkxfTtcbiAgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7XG4gIG1hcmdpbi1ib3R0b206IC0zcHg7XG5gO1xuXG5jb25zdCBSZWd1bGFyU2xpZGVyV3JhcHBlciA9IHN0eWxlZC5kaXYuYXR0cnMoe1xuICBjbGFzc05hbWU6ICdlZmZlY3QtY29uZmlndXJhdG9yX19wcC1zZWN0aW9uLWNvbnRyb2wnXG59KWBcbiAgaGVpZ2h0OiAzMnB4O1xuICAua2ctcmFuZ2Utc2xpZGVyX19pbnB1dCB7XG4gICAgaGVpZ2h0OiAzMnB4O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBwYWRkaW5nOiAzcHggNnB4O1xuICB9XG4gIC5rZy1zbGlkZXIge1xuICAgIHBhZGRpbmctbGVmdDogNnB4O1xuICB9XG4gIC5rZy1yYW5nZS1zbGlkZXIge1xuICAgIHBhZGRpbmc6IDBweCAhaW1wb3J0YW50O1xuICB9XG5gO1xuXG5jb25zdCBDT01NT05fU0xJREVSX1BST1BTID0ge1xuICBzaG93SW5wdXQ6IHRydWUsXG4gIGlzUmFuZ2VkOiBmYWxzZSxcbiAgc3RlcDogMC4wMDEsXG4gIGxhYmVsOiAndmFsdWUnXG59O1xuXG50eXBlIEVmZmVjdFBhcmFtZXRlckRlc2NyaXB0aW9uRmxhdHRlbmVkID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGxhYmVsPzogc3RyaW5nIHwgZmFsc2UgfCAoc3RyaW5nIHwgZmFsc2UpW107XG4gIG1pbjogbnVtYmVyO1xuICBtYXg6IG51bWJlcjtcbiAgaW5kZXg/OiBudW1iZXI7XG59O1xuXG5FZmZlY3RDb25maWd1cmF0b3JGYWN0b3J5LmRlcHMgPSBbUmFuZ2VTbGlkZXJGYWN0b3J5LCBFZmZlY3RUaW1lQ29uZmlndXJhdG9yRmFjdG9yeV07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEVmZmVjdENvbmZpZ3VyYXRvckZhY3RvcnkoXG4gIFJhbmdlU2xpZGVyOiBSZXR1cm5UeXBlPHR5cGVvZiBSYW5nZVNsaWRlckZhY3Rvcnk+LFxuICBFZmZlY3RUaW1lQ29uZmlndXJhdG9yOiBSZXR1cm5UeXBlPHR5cGVvZiBFZmZlY3RUaW1lQ29uZmlndXJhdG9yRmFjdG9yeT5cbik6IFJlYWN0LkZDPEVmZmVjdENvbmZpZ3VyYXRvclByb3BzPiB7XG4gIGNvbnN0IFNoYWRvd0VmZmVjdENvbmZpZ3VyYXRvcjogUmVhY3QuRkM8RWZmZWN0Q29uZmlndXJhdG9yUHJvcHM+ID0gKHtcbiAgICBlZmZlY3QsXG4gICAgdXBkYXRlRWZmZWN0Q29uZmlnXG4gIH0pID0+IHtcbiAgICBjb25zdCB7cGFyYW1ldGVycywgaWR9ID0gZWZmZWN0O1xuXG4gICAgY29uc3Qgc2xpZGVyUHJvcHMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgIGNvbnN0IHByb3BOYW1lcyA9IFsnc2hhZG93SW50ZW5zaXR5JywgJ2FtYmllbnRMaWdodEludGVuc2l0eScsICdzdW5MaWdodEludGVuc2l0eSddO1xuICAgICAgcmV0dXJuIHByb3BOYW1lcy5tYXAocHJvcE5hbWUgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHZhbHVlMTogcGFyYW1ldGVyc1twcm9wTmFtZV0sXG4gICAgICAgICAgcmFuZ2U6IFswLCAxXSxcbiAgICAgICAgICB2YWx1ZTA6IDAsXG4gICAgICAgICAgb25DaGFuZ2U6ICh2YWx1ZTogbnVtYmVyW10sIGV2ZW50PzogRXZlbnQgfCBudWxsKSA9PiB7XG4gICAgICAgICAgICB1cGRhdGVFZmZlY3RDb25maWcoZXZlbnQsIGlkLCB7cGFyYW1ldGVyczoge1twcm9wTmFtZV06IHZhbHVlWzFdfX0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH0sIFtpZCwgcGFyYW1ldGVycywgdXBkYXRlRWZmZWN0Q29uZmlnXSk7XG5cbiAgICBjb25zdCBvblRpbWVQYXJhbWV0ZXJzQ2hhbmdlZCA9IHVzZUNhbGxiYWNrKFxuICAgICAgcGFyYW1ldGVycyA9PiB7XG4gICAgICAgIHVwZGF0ZUVmZmVjdENvbmZpZyhudWxsLCBpZCwge1xuICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIC4uLihwYXJhbWV0ZXJzLnRpbWVzdGFtcCA/IHt0aW1lc3RhbXA6IHBhcmFtZXRlcnMudGltZXN0YW1wfSA6IG51bGwpLFxuICAgICAgICAgICAgLi4uKHBhcmFtZXRlcnMudGltZXpvbmUgPyB7dGltZXpvbmU6IHBhcmFtZXRlcnMudGltZXpvbmV9IDogbnVsbCksXG4gICAgICAgICAgICAuLi4ocGFyYW1ldGVycy50aW1lTW9kZSA/IHt0aW1lTW9kZTogcGFyYW1ldGVycy50aW1lTW9kZX0gOiBudWxsKVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgW2lkLCB1cGRhdGVFZmZlY3RDb25maWddXG4gICAgKTtcblxuICAgIGNvbnN0IGNvbG9yUGlja2VyUHJvcHMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgIGNvbnN0IHByb3BOYW1lcyA9IFsnYW1iaWVudExpZ2h0Q29sb3InLCAnc3VuTGlnaHRDb2xvcicsICdzaGFkb3dDb2xvciddO1xuICAgICAgcmV0dXJuIHByb3BOYW1lcy5tYXAocHJvcE5hbWUgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbG9yU2V0czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzZWxlY3RlZENvbG9yOiBwYXJhbWV0ZXJzW3Byb3BOYW1lXSxcbiAgICAgICAgICAgICAgc2V0Q29sb3I6IHYgPT4gdXBkYXRlRWZmZWN0Q29uZmlnKG51bGwsIGlkLCB7cGFyYW1ldGVyczoge1twcm9wTmFtZV06IHZ9fSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9LCBbaWQsIHBhcmFtZXRlcnMsIHVwZGF0ZUVmZmVjdENvbmZpZ10pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTdHlsZWRFZmZlY3RDb25maWd1cmF0b3Iga2V5PXtlZmZlY3QuaWR9PlxuICAgICAgICA8UGFuZWxMYWJlbFdyYXBwZXI+XG4gICAgICAgICAgPFNlY3Rpb25UaXRsZT57J0RhdGUgJiBUaW1lJ308L1NlY3Rpb25UaXRsZT5cbiAgICAgICAgPC9QYW5lbExhYmVsV3JhcHBlcj5cbiAgICAgICAgPEVmZmVjdFRpbWVDb25maWd1cmF0b3JcbiAgICAgICAgICB0aW1lc3RhbXA9e3BhcmFtZXRlcnMudGltZXN0YW1wfVxuICAgICAgICAgIHRpbWV6b25lPXtwYXJhbWV0ZXJzLnRpbWV6b25lfVxuICAgICAgICAgIHRpbWVNb2RlPXtwYXJhbWV0ZXJzLnRpbWVNb2RlfVxuICAgICAgICAgIG9uQ2hhbmdlPXtvblRpbWVQYXJhbWV0ZXJzQ2hhbmdlZH1cbiAgICAgICAgLz5cblxuICAgICAgICA8U3R5bGVkVmVydGljYWxTZXBhcmF0b3IgLz5cblxuICAgICAgICA8U3R5bGVkV3JhcHBlciBtYXJnaW5Cb3R0b209ezB9PlxuICAgICAgICAgIDxTZWN0aW9uVGl0bGU+eydTaGFkb3cnfTwvU2VjdGlvblRpdGxlPlxuICAgICAgICA8L1N0eWxlZFdyYXBwZXI+XG4gICAgICAgIDxTdHlsZWRXcmFwcGVyIG1hcmdpbkJvdHRvbT17MTZ9PlxuICAgICAgICAgIDxDb21wYWN0Q29sb3JQaWNrZXJcbiAgICAgICAgICAgIGxhYmVsPXsnQ29sb3InfVxuICAgICAgICAgICAgY29sb3I9e2NvbG9yUGlja2VyUHJvcHNbMl0uY29sb3JTZXRzWzBdLnNlbGVjdGVkQ29sb3J9XG4gICAgICAgICAgICBvblNldENvbG9yPXtjb2xvclBpY2tlclByb3BzWzJdLmNvbG9yU2V0c1swXS5zZXRDb2xvcn1cbiAgICAgICAgICAgIEljb249e0Fycm93RG93blNtYWxsfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPFN0eWxlZENvbmZpZ1NlY3Rpb24+XG4gICAgICAgICAgICA8U2VjdGlvblN1YlRpdGxlPkludGVuc2l0eTwvU2VjdGlvblN1YlRpdGxlPlxuICAgICAgICAgICAgPFN0eWxlU2xpZGVyV3JhcHBlcj5cbiAgICAgICAgICAgICAgPFJhbmdlU2xpZGVyIHsuLi5DT01NT05fU0xJREVSX1BST1BTfSB7Li4uc2xpZGVyUHJvcHNbMF19IC8+XG4gICAgICAgICAgICA8L1N0eWxlU2xpZGVyV3JhcHBlcj5cbiAgICAgICAgICA8L1N0eWxlZENvbmZpZ1NlY3Rpb24+XG4gICAgICAgIDwvU3R5bGVkV3JhcHBlcj5cblxuICAgICAgICA8U3R5bGVkV3JhcHBlciBtYXJnaW5Cb3R0b209ezB9PlxuICAgICAgICAgIDxTZWN0aW9uVGl0bGU+eydBbWJpZW50IGxpZ2h0J308L1NlY3Rpb25UaXRsZT5cbiAgICAgICAgPC9TdHlsZWRXcmFwcGVyPlxuICAgICAgICA8U3R5bGVkV3JhcHBlciBtYXJnaW5Cb3R0b209ezE2fT5cbiAgICAgICAgICA8Q29tcGFjdENvbG9yUGlja2VyXG4gICAgICAgICAgICBsYWJlbD17J0NvbG9yJ31cbiAgICAgICAgICAgIGNvbG9yPXtjb2xvclBpY2tlclByb3BzWzBdLmNvbG9yU2V0c1swXS5zZWxlY3RlZENvbG9yfVxuICAgICAgICAgICAgb25TZXRDb2xvcj17Y29sb3JQaWNrZXJQcm9wc1swXS5jb2xvclNldHNbMF0uc2V0Q29sb3J9XG4gICAgICAgICAgICBJY29uPXtBcnJvd0Rvd25TbWFsbH1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxTdHlsZWRDb25maWdTZWN0aW9uPlxuICAgICAgICAgICAgPFNlY3Rpb25TdWJUaXRsZT5JbnRlbnNpdHk8L1NlY3Rpb25TdWJUaXRsZT5cbiAgICAgICAgICAgIDxTdHlsZVNsaWRlcldyYXBwZXI+XG4gICAgICAgICAgICAgIDxSYW5nZVNsaWRlciB7Li4uQ09NTU9OX1NMSURFUl9QUk9QU30gey4uLnNsaWRlclByb3BzWzFdfSAvPlxuICAgICAgICAgICAgPC9TdHlsZVNsaWRlcldyYXBwZXI+XG4gICAgICAgICAgPC9TdHlsZWRDb25maWdTZWN0aW9uPlxuICAgICAgICA8L1N0eWxlZFdyYXBwZXI+XG5cbiAgICAgICAgPFN0eWxlZFdyYXBwZXIgbWFyZ2luQm90dG9tPXswfT5cbiAgICAgICAgICA8U2VjdGlvblRpdGxlPnsnU3VuIGxpZ2h0J308L1NlY3Rpb25UaXRsZT5cbiAgICAgICAgPC9TdHlsZWRXcmFwcGVyPlxuICAgICAgICA8U3R5bGVkV3JhcHBlciBtYXJnaW5Cb3R0b209ezB9PlxuICAgICAgICAgIDxDb21wYWN0Q29sb3JQaWNrZXJcbiAgICAgICAgICAgIGxhYmVsPXsnQ29sb3InfVxuICAgICAgICAgICAgY29sb3I9e2NvbG9yUGlja2VyUHJvcHNbMV0uY29sb3JTZXRzWzBdLnNlbGVjdGVkQ29sb3J9XG4gICAgICAgICAgICBvblNldENvbG9yPXtjb2xvclBpY2tlclByb3BzWzFdLmNvbG9yU2V0c1swXS5zZXRDb2xvcn1cbiAgICAgICAgICAgIEljb249e0Fycm93RG93blNtYWxsfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPFN0eWxlZENvbmZpZ1NlY3Rpb24+XG4gICAgICAgICAgICA8U2VjdGlvblN1YlRpdGxlPkludGVuc2l0eTwvU2VjdGlvblN1YlRpdGxlPlxuICAgICAgICAgICAgPFN0eWxlU2xpZGVyV3JhcHBlcj5cbiAgICAgICAgICAgICAgPFJhbmdlU2xpZGVyIHsuLi5DT01NT05fU0xJREVSX1BST1BTfSB7Li4uc2xpZGVyUHJvcHNbMl19IC8+XG4gICAgICAgICAgICA8L1N0eWxlU2xpZGVyV3JhcHBlcj5cbiAgICAgICAgICA8L1N0eWxlZENvbmZpZ1NlY3Rpb24+XG4gICAgICAgIDwvU3R5bGVkV3JhcHBlcj5cbiAgICAgIDwvU3R5bGVkRWZmZWN0Q29uZmlndXJhdG9yPlxuICAgICk7XG4gIH07XG4gIGNvbnN0IGRlZmF1bHRVbmlmb3JtcyA9IHt9O1xuXG4gIGNvbnN0IFBvc3RQcm9jZXNzaW5nRWZmZWN0Q29uZmlndXJhdG9yOiBSZWFjdC5GQzxFZmZlY3RDb25maWd1cmF0b3JQcm9wcz4gPSAoe1xuICAgIGVmZmVjdCxcbiAgICB1cGRhdGVFZmZlY3RDb25maWdcbiAgfSkgPT4ge1xuICAgIGNvbnN0IHVuaWZvcm1zID0gZWZmZWN0LmRlY2tFZmZlY3Q/Lm1vZHVsZS51bmlmb3JtcyB8fCBkZWZhdWx0VW5pZm9ybXM7XG4gICAgY29uc3QgcGFyYW1ldGVyRGVzY3JpcHRpb25zID0gZWZmZWN0LmdldFBhcmFtZXRlckRlc2NyaXB0aW9ucygpO1xuICAgIGNvbnN0IHtwYXJhbWV0ZXJzLCBpZH0gPSBlZmZlY3Q7XG4gICAgY29uc3QgZmxhdFBhcmFtZXRlckRlc2NyaXB0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgcmV0dXJuIHBhcmFtZXRlckRlc2NyaXB0aW9ucy5yZWR1Y2UoKGFjYywgZGVzY3JpcHRpb24pID0+IHtcbiAgICAgICAgaWYgKGRlc2NyaXB0aW9uLnR5cGUgPT09ICdhcnJheScpIHtcbiAgICAgICAgICAvLyBzcGxpdCBhcnJheXMgb2YgY29udHJvbHMgaW50byBhIHNlcGFyYXRlIGNvbnRyb2xzIGZvciBlYWNoIGNvbXBvbmVudFxuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRlc2NyaXB0aW9uLmRlZmF1bHRWYWx1ZSkpIHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uLmRlZmF1bHRWYWx1ZS5mb3JFYWNoKChfLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICBhY2MucHVzaCh7XG4gICAgICAgICAgICAgICAgLi4uZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgICAgbGFiZWw6IGRlc2NyaXB0aW9uLmxhYmVsPy5baW5kZXhdXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFjYy5wdXNoKGRlc2NyaXB0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCBbXSBhcyBFZmZlY3RQYXJhbWV0ZXJEZXNjcmlwdGlvbkZsYXR0ZW5lZFtdKTtcbiAgICB9LCBbcGFyYW1ldGVyRGVzY3JpcHRpb25zXSk7XG5cbiAgICBjb25zdCBjb250cm9scyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgcmV0dXJuIGZsYXRQYXJhbWV0ZXJEZXNjcmlwdGlvbnMubWFwKGRlc2MgPT4ge1xuICAgICAgICBjb25zdCBwYXJhbU5hbWUgPSBkZXNjLm5hbWU7XG5cbiAgICAgICAgY29uc3QgdW5pZm9ybSA9IHVuaWZvcm1zW2Rlc2MubmFtZV07XG4gICAgICAgIGlmICgoIXVuaWZvcm0gJiYgdW5pZm9ybSAhPT0gMCkgfHwgdW5pZm9ybS5wcml2YXRlKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcmV2VmFsdWUgPSBwYXJhbWV0ZXJzW3BhcmFtTmFtZV07XG5cbiAgICAgICAgY29uc3QgbGFiZWwgPSBkZXNjLmxhYmVsID09PSBmYWxzZSA/IGZhbHNlIDogZGVzYy5sYWJlbCB8fCBkZXNjLm5hbWU7XG5cbiAgICAgICAgLy8gdGhlIHVuaWZvcm0gaXMgW251bWJlciwgbnVtYmVyXSBhcnJheVxuICAgICAgICBpZiAodW5pZm9ybS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgICB2YWx1ZTE6IHByZXZWYWx1ZVtkZXNjLmluZGV4IHx8IDBdIHx8IDAsXG4gICAgICAgICAgICByYW5nZTogWzAsIDFdLFxuICAgICAgICAgICAgdmFsdWUwOiAwLFxuICAgICAgICAgICAgb25DaGFuZ2U6IChuZXdWYWx1ZTogbnVtYmVyW10sIGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgIHVwZGF0ZUVmZmVjdENvbmZpZyhldmVudCwgaWQsIHtcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICAgICAgICBbcGFyYW1OYW1lXTpcbiAgICAgICAgICAgICAgICAgICAgZGVzYy5pbmRleCA9PT0gMCA/IFtuZXdWYWx1ZVsxXSwgcHJldlZhbHVlWzFdXSA6IFtwcmV2VmFsdWVbMF0sIG5ld1ZhbHVlWzFdXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyB0aGUgdW5pZm9ybSBpcyBhIHBsYWluIG51bWJlciB3aXRob3V0IGFueSBkZXNjcmlwdGlvblxuICAgICAgICBlbHNlIGlmIChpc051bWJlcih1bmlmb3JtKSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsYWJlbCxcbiAgICAgICAgICAgIHZhbHVlMTogcHJldlZhbHVlID8/IDAsXG4gICAgICAgICAgICByYW5nZTogW2Rlc2MubWluID8/IDAsIGRlc2MubWF4ID8/IDUwMF0sXG4gICAgICAgICAgICB2YWx1ZTA6IGRlc2MubWluID8/IDAsXG4gICAgICAgICAgICBvbkNoYW5nZTogKG5ld1ZhbHVlOiBudW1iZXJbXSwgZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgdXBkYXRlRWZmZWN0Q29uZmlnKGV2ZW50LCBpZCwge3BhcmFtZXRlcnM6IHtbcGFyYW1OYW1lXTogbmV3VmFsdWVbMV19fSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyB0aGUgdW5pZm9ybSBkZXNjcmlwdGlvbiBpcyB7dmFsdWU6IDAsIG1pbjogMCwgbWF4OiAxLCAuLi59XG4gICAgICAgIGVsc2UgaWYgKGlzTnVtYmVyKHVuaWZvcm0udmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxhYmVsLFxuICAgICAgICAgICAgdmFsdWUxOiBwcmV2VmFsdWUgfHwgMCxcbiAgICAgICAgICAgIHJhbmdlOiBbXG4gICAgICAgICAgICAgIGRlc2MubWluID8/IHVuaWZvcm0ubWluID8/IHVuaWZvcm0uc29mdE1pbiA/PyAwLFxuICAgICAgICAgICAgICBkZXNjLm1heCA/PyB1bmlmb3JtLm1heCA/PyB1bmlmb3JtLnNvZnRNYXggPz8gMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHZhbHVlMDogZGVzYy5taW4gPz8gdW5pZm9ybS5taW4gPz8gdW5pZm9ybS5zb2Z0TWluID8/IDAsXG4gICAgICAgICAgICBvbkNoYW5nZTogKG5ld1ZhbHVlOiBudW1iZXJbXSwgZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgdXBkYXRlRWZmZWN0Q29uZmlnKGV2ZW50LCBpZCwge3BhcmFtZXRlcnM6IHtbcGFyYW1OYW1lXTogbmV3VmFsdWVbMV19fSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlnbm9yZSBldmVyeXRoaW5nIGVsc2UgZm9yIG5vd1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0pO1xuICAgIH0sIFtmbGF0UGFyYW1ldGVyRGVzY3JpcHRpb25zLCBpZCwgcGFyYW1ldGVycywgdXBkYXRlRWZmZWN0Q29uZmlnLCB1bmlmb3Jtc10pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTdHlsZWRFZmZlY3RDb25maWd1cmF0b3Iga2V5PXtlZmZlY3QuaWR9PlxuICAgICAgICB7ZmxhdFBhcmFtZXRlckRlc2NyaXB0aW9ucy5tYXAoKGRlc2MsIHBhcmFtZXRlckluZGV4KSA9PiB7XG4gICAgICAgICAgY29uc3QgY29udHJvbCA9IGNvbnRyb2xzW3BhcmFtZXRlckluZGV4XTtcbiAgICAgICAgICBpZiAoIWNvbnRyb2wpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8UmVndWxhck91dGVyV3JhcHBlciBrZXk9e2Ake2VmZmVjdC5pZH0tJHtwYXJhbWV0ZXJJbmRleH1gfT5cbiAgICAgICAgICAgICAge2NvbnRyb2wubGFiZWwgPyAoXG4gICAgICAgICAgICAgICAgPFJlZ3VsYXJTZWN0aW9uVGl0bGVXcmFwcGVyPntjb250cm9sLmxhYmVsfTwvUmVndWxhclNlY3Rpb25UaXRsZVdyYXBwZXI+XG4gICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICA8UmVndWxhclNsaWRlcldyYXBwZXI+XG4gICAgICAgICAgICAgICAgPFJhbmdlU2xpZGVyIGtleT17cGFyYW1ldGVySW5kZXh9IHsuLi5DT01NT05fU0xJREVSX1BST1BTfSB7Li4uY29udHJvbH0gLz5cbiAgICAgICAgICAgICAgPC9SZWd1bGFyU2xpZGVyV3JhcHBlcj5cbiAgICAgICAgICAgIDwvUmVndWxhck91dGVyV3JhcHBlcj5cbiAgICAgICAgICApO1xuICAgICAgICB9KX1cbiAgICAgIDwvU3R5bGVkRWZmZWN0Q29uZmlndXJhdG9yPlxuICAgICk7XG4gIH07XG5cbiAgY29uc3QgRWZmZWN0Q29uZmlndXJhdG9yID0gKHtcbiAgICBlZmZlY3QsXG4gICAgdXBkYXRlRWZmZWN0Q29uZmlnXG4gIH06IEVmZmVjdENvbmZpZ3VyYXRvclByb3BzICYge2ludGw6IEludGxTaGFwZX0pID0+IHtcbiAgICByZXR1cm4gZWZmZWN0LnR5cGUgPT09IExJR0hUX0FORF9TSEFET1dfRUZGRUNULnR5cGUgPyAoXG4gICAgICA8U2hhZG93RWZmZWN0Q29uZmlndXJhdG9yIGVmZmVjdD17ZWZmZWN0fSB1cGRhdGVFZmZlY3RDb25maWc9e3VwZGF0ZUVmZmVjdENvbmZpZ30gLz5cbiAgICApIDogKFxuICAgICAgPFBvc3RQcm9jZXNzaW5nRWZmZWN0Q29uZmlndXJhdG9yIGVmZmVjdD17ZWZmZWN0fSB1cGRhdGVFZmZlY3RDb25maWc9e3VwZGF0ZUVmZmVjdENvbmZpZ30gLz5cbiAgICApO1xuICB9O1xuXG4gIHJldHVybiBpbmplY3RJbnRsKEVmZmVjdENvbmZpZ3VyYXRvcik7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLGlCQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxVQUFBLEdBQUFILE9BQUE7QUFFQSxJQUFBSSxVQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxNQUFBLEdBQUFMLE9BQUE7QUFHQSxJQUFBTSxZQUFBLEdBQUFKLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBTyxNQUFBLEdBQUFQLE9BQUE7QUFDQSxJQUFBUSx1QkFBQSxHQUFBTixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVMsbUJBQUEsR0FBQVAsc0JBQUEsQ0FBQUYsT0FBQTtBQUF3RCxJQUFBVSxlQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGlCQUFBLEVBQUFDLGlCQUFBLEVBQUFDLGlCQUFBLEVBZHhEO0FBQ0E7QUFBQSxTQUFBQyx5QkFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxtQkFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBRix3QkFBQSxZQUFBQSx5QkFBQUMsQ0FBQSxXQUFBQSxDQUFBLEdBQUFHLENBQUEsR0FBQUQsQ0FBQSxLQUFBRixDQUFB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a0JBQWtCLEVBQUVtQyxRQUFRLENBQUMsQ0FBQztJQUU3RSxvQkFDRXhJLE1BQUEsWUFBQTZILGFBQUEsQ0FBQ2xFLHdCQUF3QjtNQUFDbUUsR0FBRyxFQUFFMUIsTUFBTSxDQUFDRztJQUFHLEdBQ3RDc0MseUJBQXlCLENBQUNsQyxHQUFHLENBQUMsVUFBQzhDLElBQUksRUFBRXVCLGNBQWMsRUFBSztNQUN2RCxJQUFNQyxPQUFPLEdBQUd6QixRQUFRLENBQUN3QixjQUFjLENBQUM7TUFDeEMsSUFBSSxDQUFDQyxPQUFPLEVBQUU7UUFDWixPQUFPLElBQUk7TUFDYjtNQUVBLG9CQUNFakwsTUFBQSxZQUFBNkgsYUFBQSxDQUFDekMsbUJBQW1CO1FBQUMwQyxHQUFHLEtBQUFvRCxNQUFBLENBQUs5RSxNQUFNLENBQUNHLEVBQUUsT0FBQTJFLE1BQUEsQ0FBSUYsY0FBYztNQUFHLEdBQ3hEQyxPQUFPLENBQUN0RixLQUFLLGdCQUNaM0YsTUFBQSxZQUFBNkgsYUFBQSxDQUFDeEMsMEJBQTBCLFFBQUU0RixPQUFPLENBQUN0RixLQUFrQyxDQUFDLEdBQ3RFLElBQUksZUFDUjNGLE1BQUEsWUFBQTZILGFBQUEsQ0FBQ3ZDLG9CQUFvQixxQkFDbkJ0RixNQUFBLFlBQUE2SCxhQUFBLENBQUM3QixXQUFXLE1BQUFtQyxTQUFBO1FBQUNMLEdBQUcsRUFBRWtEO01BQWUsR0FBS3pGLG1CQUFtQixFQUFNMEYsT0FBTyxDQUFHLENBQ3JELENBQ0gsQ0FBQztJQUUxQixDQUFDLENBQ3VCLENBQUM7RUFFL0IsQ0FBQztFQUVELElBQU1FLGtCQUFrQixHQUFHLFNBQXJCQSxrQkFBa0JBLENBQUFDLEtBQUEsRUFHMkI7SUFBQSxJQUZqRGhGLE1BQU0sR0FBQWdGLEtBQUEsQ0FBTmhGLE1BQU07TUFDTkMsa0JBQWtCLEdBQUErRSxLQUFBLENBQWxCL0Usa0JBQWtCO0lBRWxCLE9BQU9ELE1BQU0sQ0FBQzZDLElBQUksS0FBS29DLGtDQUF1QixDQUFDcEMsSUFBSSxnQkFDakRqSixNQUFBLFlBQUE2SCxhQUFBLENBQUMzQix3QkFBd0I7TUFBQ0UsTUFBTSxFQUFFQSxNQUFPO01BQUNDLGtCQUFrQixFQUFFQTtJQUFtQixDQUFFLENBQUMsZ0JBRXBGckcsTUFBQSxZQUFBNkgsYUFBQSxDQUFDUSxnQ0FBZ0M7TUFBQ2pDLE1BQU0sRUFBRUEsTUFBTztNQUFDQyxrQkFBa0IsRUFBRUE7SUFBbUIsQ0FBRSxDQUM1RjtFQUNILENBQUM7RUFFRCxPQUFPLElBQUFpRixxQkFBVSxFQUFDSCxrQkFBa0IsQ0FBQztBQUN2QyIsImlnbm9yZUxpc3QiOltdfQ==
474
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfcmVhY3RJbnRsIiwiX2NvbnN0YW50cyIsIl91dGlscyIsIl9yYW5nZVNsaWRlciIsIl9pY29ucyIsIl9zdHlsZWRDb21wb25lbnRzMiIsIl9lZmZlY3RUaW1lQ29uZmlndXJhdG9yIiwiX2NvbXBhY3RDb2xvclBpY2tlciIsIl9zdXJmYWNlRm9nU2VjdGlvbiIsIl90ZW1wbGF0ZU9iamVjdCIsIl90ZW1wbGF0ZU9iamVjdDIiLCJfdGVtcGxhdGVPYmplY3QzIiwiX3RlbXBsYXRlT2JqZWN0NCIsIl90ZW1wbGF0ZU9iamVjdDUiLCJfdGVtcGxhdGVPYmplY3Q2IiwiX3RlbXBsYXRlT2JqZWN0NyIsIl90ZW1wbGF0ZU9iamVjdDgiLCJfdGVtcGxhdGVPYmplY3Q5IiwiX3RlbXBsYXRlT2JqZWN0MTAiLCJfdGVtcGxhdGVPYmplY3QxMSIsIl90ZW1wbGF0ZU9iamVjdDEyIiwiX3RlbXBsYXRlT2JqZWN0MTMiLCJfdGVtcGxhdGVPYmplY3QxNCIsIl90ZW1wbGF0ZU9iamVjdDE1IiwiX3RlbXBsYXRlT2JqZWN0MTYiLCJfdGVtcGxhdGVPYmplY3QxNyIsIl90ZW1wbGF0ZU9iamVjdDE4IiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mMyIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsIlN0eWxlZEVmZmVjdENvbmZpZ3VyYXRvciIsInN0eWxlZCIsImRpdiIsImF0dHJzIiwiY2xhc3NOYW1lIiwiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbDIiLCJwcm9wcyIsInRoZW1lIiwiZWZmZWN0Q29uZmlndXJhdG9yTWFyZ2luIiwiZWZmZWN0Q29uZmlndXJhdG9yUGFkZGluZyIsIlBhbmVsTGFiZWxXcmFwcGVyIiwiZXhwb3J0cyIsIlN0eWxlZENvbG9yU2VsZWN0b3JXcmFwcGVyIiwiU3R5bGVkVmVydGljYWxTZXBhcmF0b3IiLCJpbnB1dEJnZCIsIlN0eWxlZFdyYXBwZXIiLCJfcHJvcHMkJG1hcmdpbkJvdHRvbSIsIiRtYXJnaW5Cb3R0b20iLCJTdHlsZWRDb25maWdTZWN0aW9uIiwiU2VjdGlvblRpdGxlIiwiaW5wdXRGb250U2l6ZSIsImVmZmVjdFBhbmVsVGV4dFNlY29uZGFyeTEiLCJTZWN0aW9uU3ViVGl0bGUiLCJlZmZlY3RQYW5lbFRleHRTZWNvbmRhcnkyIiwiU3R5bGVTbGlkZXJXcmFwcGVyIiwiUmVndWxhck91dGVyV3JhcHBlciIsIlJlZ3VsYXJTZWN0aW9uVGl0bGVXcmFwcGVyIiwiUmVndWxhclNsaWRlcldyYXBwZXIiLCJTdHlsZWRDaGVja2JveFdyYXBwZXIiLCJTdHlsZWRDaGVja2JveCIsImlucHV0IiwiYWN0aXZlQ29sb3IiLCJTdHlsZWRDaGVja2JveExhYmVsIiwibGFiZWwiLCJTdHlsZWRIaW50VG9vbHRpcCIsIlRvb2x0aXAiLCJTdHlsZWRIaW50SWNvbiIsInNwYW4iLCJsYWJlbENvbG9yIiwidGV4dENvbG9ySGwiLCJTdHlsZWRDb2xvckNoZWNrYm94Um93IiwiQ09NTU9OX1NMSURFUl9QUk9QUyIsInNob3dJbnB1dCIsImlzUmFuZ2VkIiwic3RlcCIsIkVmZmVjdENvbmZpZ3VyYXRvckZhY3RvcnkiLCJkZXBzIiwiUmFuZ2VTbGlkZXJGYWN0b3J5IiwiRWZmZWN0VGltZUNvbmZpZ3VyYXRvckZhY3RvcnkiLCJTdXJmYWNlRm9nRWxldmF0aW9uU2VjdGlvbkZhY3RvcnkiLCJSYW5nZVNsaWRlciIsIkVmZmVjdFRpbWVDb25maWd1cmF0b3IiLCJTdXJmYWNlRm9nRWxldmF0aW9uU2VjdGlvbiIsIlNoYWRvd0VmZmVjdENvbmZpZ3VyYXRvciIsIl9yZWYiLCJlZmZlY3QiLCJ1cGRhdGVFZmZlY3RDb25maWciLCJwYXJhbWV0ZXJzIiwiaWQiLCJzbGlkZXJQcm9wcyIsInVzZU1lbW8iLCJwcm9wTmFtZXMiLCJkZXNjcmlwdGlvbnMiLCJnZXRQYXJhbWV0ZXJEZXNjcmlwdGlvbnMiLCJtYXAiLCJwcm9wTmFtZSIsIl9kZXNjJG1pbiIsIl9kZXNjJG1heCIsImRlc2MiLCJmaW5kIiwiZCIsIm5hbWUiLCJtaW4iLCJtYXgiLCJ2YWx1ZTEiLCJyYW5nZSIsInZhbHVlMCIsIm9uQ2hhbmdlIiwidmFsdWUiLCJldmVudCIsIm9uVGltZVBhcmFtZXRlcnNDaGFuZ2VkIiwidXNlQ2FsbGJhY2siLCJ0aW1lc3RhbXAiLCJ0aW1lem9uZSIsInRpbWVNb2RlIiwiY29sb3JQaWNrZXJQcm9wcyIsImNvbG9yU2V0cyIsInNlbGVjdGVkQ29sb3IiLCJzZXRDb2xvciIsInYiLCJjcmVhdGVFbGVtZW50Iiwia2V5IiwiY29sb3IiLCJvblNldENvbG9yIiwiSWNvbiIsIkFycm93RG93blNtYWxsIiwiX2V4dGVuZHMyIiwiZGVmYXVsdFVuaWZvcm1zIiwiRUxFVkFUSU9OX0VYVFJBX1BBUkFNUyIsIlNldCIsIlBvc3RQcm9jZXNzaW5nRWZmZWN0Q29uZmlndXJhdG9yIiwiX3JlZjIiLCJfZWZmZWN0JGRlY2tFZmZlY3QiLCJ1bmlmb3JtcyIsImRlY2tFZmZlY3QiLCJtb2R1bGUiLCJwcm9wVHlwZXMiLCJwYXJhbWV0ZXJEZXNjcmlwdGlvbnMiLCJoYXNFbGV2YXRpb25TZWN0aW9uIiwic29tZSIsImZsYXRQYXJhbWV0ZXJEZXNjcmlwdGlvbnMiLCJyZWR1Y2UiLCJhY2MiLCJkZXNjcmlwdGlvbiIsInR5cGUiLCJFTEVWQVRJT05fU0VDVElPTl9UWVBFIiwiQXJyYXkiLCJpc0FycmF5IiwiZGVmYXVsdFZhbHVlIiwiXyIsImluZGV4IiwiX2Rlc2NyaXB0aW9uJGxhYmVsIiwiY29udHJvbHMiLCJpc0VsZXZhdGlvblNlY3Rpb24iLCJpc0NvbG9yIiwicGFyYW1OYW1lIiwiaXNDaGVja2JveCIsImNoZWNrZWQiLCJCb29sZWFuIiwidG9vbHRpcCIsInJhd1VuaWZvcm0iLCJ1bmlmb3JtIiwiX3R5cGVvZjIiLCJwcmV2VmFsdWUiLCJuZXdWYWx1ZSIsImlzTnVtYmVyIiwiX2Rlc2MkbWluMiIsIl9kZXNjJG1heDIiLCJfZGVzYyRtaW4zIiwiX3JlZjMiLCJfcmVmNCIsIl9kZXNjJG1pbjQiLCJfcmVmNSIsIl9yZWY2IiwiX2Rlc2MkbWF4MyIsInJhbmdlTWluIiwic29mdE1pbiIsInJhbmdlTWF4Iiwic29mdE1heCIsInJhbmdlU3BhbiIsInVuZGVmaW5lZCIsIl9yZWY3IiwiZWxlbWVudHMiLCJfbG9vcCIsImNvbnRyb2wiLCJfY29udHJvbCRvblNldENvbG9yMiIsIm5leHRDb250cm9sIiwiX2NvbnRyb2wkb25TZXRDb2xvciIsImNiVG9vbHRpcElkIiwiY29uY2F0Iiwib25DbGljayIsInN0b3BQcm9wYWdhdGlvbiIsIkZyYWdtZW50IiwiZGVsYXlTaG93IiwiX3JldCIsIkVmZmVjdENvbmZpZ3VyYXRvciIsIl9yZWY4IiwiTElHSFRfQU5EX1NIQURPV19FRkZFQ1QiLCJpbmplY3RJbnRsIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2VmZmVjdHMvZWZmZWN0LWNvbmZpZ3VyYXRvci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IFJlYWN0LCB7dXNlQ2FsbGJhY2ssIHVzZU1lbW99IGZyb20gJ3JlYWN0JztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHtpbmplY3RJbnRsLCBJbnRsU2hhcGV9IGZyb20gJ3JlYWN0LWludGwnO1xuXG5pbXBvcnQge0xJR0hUX0FORF9TSEFET1dfRUZGRUNUfSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge2lzTnVtYmVyfSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7RWZmZWN0LCBFZmZlY3RVcGRhdGVQcm9wc30gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5cbmltcG9ydCBSYW5nZVNsaWRlckZhY3RvcnkgZnJvbSAnLi4vY29tbW9uL3JhbmdlLXNsaWRlcic7XG5pbXBvcnQge0Fycm93RG93blNtYWxsfSBmcm9tICcuLi9jb21tb24vaWNvbnMnO1xuaW1wb3J0IHtUb29sdGlwfSBmcm9tICcuLi9jb21tb24vc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IEVmZmVjdFRpbWVDb25maWd1cmF0b3JGYWN0b3J5IGZyb20gJy4vZWZmZWN0LXRpbWUtY29uZmlndXJhdG9yJztcbmltcG9ydCBDb21wYWN0Q29sb3JQaWNrZXIgZnJvbSAnLi9jb21wYWN0LWNvbG9yLXBpY2tlcic7XG5pbXBvcnQgU3VyZmFjZUZvZ0VsZXZhdGlvblNlY3Rpb25GYWN0b3J5LCB7RUxFVkFUSU9OX1NFQ1RJT05fVFlQRX0gZnJvbSAnLi9zdXJmYWNlLWZvZy1zZWN0aW9uJztcblxuZXhwb3J0IHR5cGUgRWZmZWN0Q29uZmlndXJhdG9yUHJvcHMgPSB7XG4gIGVmZmVjdDogRWZmZWN0O1xuICB1cGRhdGVFZmZlY3RDb25maWc6IChcbiAgICBlOiBFdmVudCB8IG51bGwgfCB1bmRlZmluZWQsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBjb25maWc6IFBhcnRpYWw8RWZmZWN0VXBkYXRlUHJvcHM+XG4gICkgPT4gdm9pZDtcbn07XG5cbmNvbnN0IFN0eWxlZEVmZmVjdENvbmZpZ3VyYXRvciA9IHN0eWxlZC5kaXYuYXR0cnMoe1xuICBjbGFzc05hbWU6ICdlZmZlY3QtcGFuZWxfX2NvbmZpZydcbn0pYFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5lZmZlY3RDb25maWd1cmF0b3JNYXJnaW59O1xuICBwYWRkaW5nOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmVmZmVjdENvbmZpZ3VyYXRvclBhZGRpbmd9O1xuYDtcblxuZXhwb3J0IGNvbnN0IFBhbmVsTGFiZWxXcmFwcGVyID0gc3R5bGVkLmRpdi5hdHRycyh7XG4gIGNsYXNzTmFtZTogJ3NpZGUtcGFuZWwtcGFuZWxfX2xhYmVsLXdyYXBwZXInXG59KWBcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IHNlbGYtc3RhcnQ7XG4gIG1hcmdpbi1ib3R0b206IDExcHg7XG5cbiAgLnNpZGUtcGFuZWwtcGFuZWxfX2xhYmVsIHtcbiAgICBtYXJnaW4tdG9wOiAycHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMHB4O1xuICB9XG5gO1xuXG5leHBvcnQgY29uc3QgU3R5bGVkQ29sb3JTZWxlY3RvcldyYXBwZXIgPSBzdHlsZWQuZGl2YFxuICBtYXJnaW4tcmlnaHQ6IDVweDtcbiAgbWFyZ2luLWxlZnQ6IDVweDtcbiAgbWFyZ2luLWJvdHRvbTogNnB4O1xuICBtYXJnaW4tdG9wOiAycHg7XG5gO1xuXG5jb25zdCBTdHlsZWRWZXJ0aWNhbFNlcGFyYXRvciA9IHN0eWxlZC5kaXZgXG4gIGhlaWdodDogMXB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmlucHV0QmdkfTtcbiAgbWFyZ2luLXRvcDogMjBweDtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgbWFyZ2luLWxlZnQ6IC0yMHB4O1xuYDtcblxudHlwZSBTdHlsZWRXcmFwcGVyUHJvcHMgPSB7XG4gICRtYXJnaW5Cb3R0b20/OiBudW1iZXI7XG59O1xuY29uc3QgU3R5bGVkV3JhcHBlciA9IHN0eWxlZC5kaXY8U3R5bGVkV3JhcHBlclByb3BzPmBcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBtYXJnaW4tYm90dG9tOiAke3Byb3BzID0+IHByb3BzLiRtYXJnaW5Cb3R0b20gPz8gOX1weDtcbmA7XG5cbmNvbnN0IFN0eWxlZENvbmZpZ1NlY3Rpb24gPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuYDtcblxuY29uc3QgU2VjdGlvblRpdGxlID0gc3R5bGVkLmRpdmBcbiAgZm9udC1zaXplOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmlucHV0Rm9udFNpemV9O1xuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5lZmZlY3RQYW5lbFRleHRTZWNvbmRhcnkxfTtcbiAgbWFyZ2luLWJvdHRvbTogNXB4O1xuICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTtcbmA7XG5cbmNvbnN0IFNlY3Rpb25TdWJUaXRsZSA9IHN0eWxlZC5kaXZgXG4gIGZvbnQtc2l6ZTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5pbnB1dEZvbnRTaXplfTtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuZWZmZWN0UGFuZWxUZXh0U2Vjb25kYXJ5Mn07XG4gIG1hcmdpbi1ib3R0b206IDhweDtcbiAgbWFyZ2luLWxlZnQ6IDZweDtcbmA7XG5cbmNvbnN0IFN0eWxlU2xpZGVyV3JhcHBlciA9IHN0eWxlZC5kaXZgXG4gIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7XG4gIHdpZHRoOiAxOTlweDtcbiAgaGVpZ2h0OiAzMnB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAua2ctcmFuZ2Utc2xpZGVyX19pbnB1dCB7XG4gICAgaGVpZ2h0OiAzMnB4O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBwYWRkaW5nOiAzcHggNnB4O1xuICB9XG4gIC5rZy1zbGlkZXIge1xuICAgIHBhZGRpbmctbGVmdDogNnB4O1xuICB9XG4gIC5rZy1yYW5nZS1zbGlkZXIge1xuICAgIHBhZGRpbmc6IDBweCAhaW1wb3J0YW50O1xuICB9XG5gO1xuXG5jb25zdCBSZWd1bGFyT3V0ZXJXcmFwcGVyID0gc3R5bGVkLmRpdi5hdHRycyh7XG4gIGNsYXNzTmFtZTogJ2VmZmVjdC1jb25maWd1cmF0b3JfX3BwLXNlY3Rpb24nXG59KWBcbiAgbWFyZ2luLWJvdHRvbTogOHB4O1xuYDtcblxuY29uc3QgUmVndWxhclNlY3Rpb25UaXRsZVdyYXBwZXIgPSBzdHlsZWQuZGl2LmF0dHJzKHtcbiAgY2xhc3NOYW1lOiAnZWZmZWN0LWNvbmZpZ3VyYXRvcl9fcHAtc2VjdGlvbi10aXRsZSdcbn0pYFxuICBmb250LXNpemU6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuaW5wdXRGb250U2l6ZX07XG4gIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmVmZmVjdFBhbmVsVGV4dFNlY29uZGFyeTF9O1xuICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTtcbiAgbWFyZ2luLWJvdHRvbTogLTNweDtcbmA7XG5cbmNvbnN0IFJlZ3VsYXJTbGlkZXJXcmFwcGVyID0gc3R5bGVkLmRpdi5hdHRycyh7XG4gIGNsYXNzTmFtZTogJ2VmZmVjdC1jb25maWd1cmF0b3JfX3BwLXNlY3Rpb24tY29udHJvbCdcbn0pYFxuICBoZWlnaHQ6IDMycHg7XG4gIC5rZy1yYW5nZS1zbGlkZXJfX2lucHV0IHtcbiAgICBoZWlnaHQ6IDMycHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIHBhZGRpbmc6IDNweCA2cHg7XG4gIH1cbiAgLmtnLXNsaWRlciB7XG4gICAgcGFkZGluZy1sZWZ0OiA2cHg7XG4gIH1cbiAgLmtnLXJhbmdlLXNsaWRlciB7XG4gICAgcGFkZGluZzogMHB4ICFpbXBvcnRhbnQ7XG4gIH1cbmA7XG5cbmNvbnN0IFN0eWxlZENoZWNrYm94V3JhcHBlciA9IHN0eWxlZC5kaXYuYXR0cnMoe1xuICBjbGFzc05hbWU6ICdlZmZlY3QtY29uZmlndXJhdG9yX19wcC1zZWN0aW9uLWNoZWNrYm94J1xufSlgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGN1cnNvcjogcG9pbnRlcjtcbmA7XG5cbmNvbnN0IFN0eWxlZENoZWNrYm94ID0gc3R5bGVkLmlucHV0YFxuICBtYXJnaW4tcmlnaHQ6IDZweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBhY2NlbnQtY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuYWN0aXZlQ29sb3J9O1xuYDtcblxuY29uc3QgU3R5bGVkQ2hlY2tib3hMYWJlbCA9IHN0eWxlZC5sYWJlbGBcbiAgZm9udC1zaXplOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmlucHV0Rm9udFNpemV9O1xuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5lZmZlY3RQYW5lbFRleHRTZWNvbmRhcnkxfTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuYDtcblxuY29uc3QgU3R5bGVkSGludFRvb2x0aXAgPSBzdHlsZWQoVG9vbHRpcClgXG4gICYuX19yZWFjdF9jb21wb25lbnRfdG9vbHRpcCB7XG4gICAgbWF4LXdpZHRoOiAyMjBweDtcbiAgICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgfVxuYDtcblxuY29uc3QgU3R5bGVkSGludEljb24gPSBzdHlsZWQuc3BhbmBcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICB3aWR0aDogMTRweDtcbiAgaGVpZ2h0OiAxNHB4O1xuICBtYXJnaW4tbGVmdDogNnB4O1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIGZvbnQtc2l6ZTogOXB4O1xuICBmb250LXdlaWdodDogNjAwO1xuICBsaW5lLWhlaWdodDogMTtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUubGFiZWxDb2xvcn07XG4gIGJvcmRlcjogMXB4IHNvbGlkICR7cHJvcHMgPT4gcHJvcHMudGhlbWUubGFiZWxDb2xvcn07XG4gIGN1cnNvcjogaGVscDtcbiAgJjpob3ZlciB7XG4gICAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUudGV4dENvbG9ySGx9O1xuICAgIGJvcmRlci1jb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS50ZXh0Q29sb3JIbH07XG4gIH1cbmA7XG5cbmNvbnN0IFN0eWxlZENvbG9yQ2hlY2tib3hSb3cgPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIG1hcmdpbi1ib3R0b206IDhweDtcbmA7XG5cbmNvbnN0IENPTU1PTl9TTElERVJfUFJPUFMgPSB7XG4gIHNob3dJbnB1dDogdHJ1ZSxcbiAgaXNSYW5nZWQ6IGZhbHNlLFxuICBzdGVwOiAwLjAwMSxcbiAgbGFiZWw6ICd2YWx1ZSdcbn07XG5cbnR5cGUgRWZmZWN0UGFyYW1ldGVyRGVzY3JpcHRpb25GbGF0dGVuZWQgPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgdHlwZT86ICdudW1iZXInIHwgJ2FycmF5JyB8ICdjb2xvcicgfCAnY2hlY2tib3gnO1xuICBsYWJlbD86IHN0cmluZyB8IGZhbHNlIHwgKHN0cmluZyB8IGZhbHNlKVtdO1xuICB0b29sdGlwPzogc3RyaW5nO1xuICBtaW46IG51bWJlcjtcbiAgbWF4OiBudW1iZXI7XG4gIGRlZmF1bHRWYWx1ZT86IG51bWJlciB8IG51bWJlcltdIHwgYm9vbGVhbjtcbiAgaW5kZXg/OiBudW1iZXI7XG59O1xuXG5FZmZlY3RDb25maWd1cmF0b3JGYWN0b3J5LmRlcHMgPSBbXG4gIFJhbmdlU2xpZGVyRmFjdG9yeSxcbiAgRWZmZWN0VGltZUNvbmZpZ3VyYXRvckZhY3RvcnksXG4gIFN1cmZhY2VGb2dFbGV2YXRpb25TZWN0aW9uRmFjdG9yeVxuXTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRWZmZWN0Q29uZmlndXJhdG9yRmFjdG9yeShcbiAgUmFuZ2VTbGlkZXI6IFJldHVyblR5cGU8dHlwZW9mIFJhbmdlU2xpZGVyRmFjdG9yeT4sXG4gIEVmZmVjdFRpbWVDb25maWd1cmF0b3I6IFJldHVyblR5cGU8dHlwZW9mIEVmZmVjdFRpbWVDb25maWd1cmF0b3JGYWN0b3J5PixcbiAgU3VyZmFjZUZvZ0VsZXZhdGlvblNlY3Rpb246IFJldHVyblR5cGU8dHlwZW9mIFN1cmZhY2VGb2dFbGV2YXRpb25TZWN0aW9uRmFjdG9yeT5cbik6IFJlYWN0LkZDPEVmZmVjdENvbmZpZ3VyYXRvclByb3BzPiB7XG4gIGNvbnN0IFNoYWRvd0VmZmVjdENvbmZpZ3VyYXRvcjogUmVhY3QuRkM8RWZmZWN0Q29uZmlndXJhdG9yUHJvcHM+ID0gKHtcbiAgICBlZmZlY3QsXG4gICAgdXBkYXRlRWZmZWN0Q29uZmlnXG4gIH0pID0+IHtcbiAgICBjb25zdCB7cGFyYW1ldGVycywgaWR9ID0gZWZmZWN0O1xuXG4gICAgY29uc3Qgc2xpZGVyUHJvcHMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgIGNvbnN0IHByb3BOYW1lcyA9IFsnc2hhZG93SW50ZW5zaXR5JywgJ2FtYmllbnRMaWdodEludGVuc2l0eScsICdzdW5MaWdodEludGVuc2l0eSddO1xuICAgICAgY29uc3QgZGVzY3JpcHRpb25zID0gZWZmZWN0LmdldFBhcmFtZXRlckRlc2NyaXB0aW9ucygpO1xuICAgICAgcmV0dXJuIHByb3BOYW1lcy5tYXAocHJvcE5hbWUgPT4ge1xuICAgICAgICBjb25zdCBkZXNjID0gZGVzY3JpcHRpb25zLmZpbmQoZCA9PiBkLm5hbWUgPT09IHByb3BOYW1lKTtcbiAgICAgICAgY29uc3QgbWluID0gZGVzYz8ubWluID8/IDA7XG4gICAgICAgIGNvbnN0IG1heCA9IGRlc2M/Lm1heCA/PyAxO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHZhbHVlMTogcGFyYW1ldGVyc1twcm9wTmFtZV0sXG4gICAgICAgICAgcmFuZ2U6IFttaW4sIG1heF0sXG4gICAgICAgICAgdmFsdWUwOiBtaW4sXG4gICAgICAgICAgb25DaGFuZ2U6ICh2YWx1ZTogbnVtYmVyW10sIGV2ZW50PzogRXZlbnQgfCBudWxsKSA9PiB7XG4gICAgICAgICAgICB1cGRhdGVFZmZlY3RDb25maWcoZXZlbnQsIGlkLCB7cGFyYW1ldGVyczoge1twcm9wTmFtZV06IHZhbHVlWzFdfX0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH0sIFtpZCwgZWZmZWN0LCBwYXJhbWV0ZXJzLCB1cGRhdGVFZmZlY3RDb25maWddKTtcblxuICAgIGNvbnN0IG9uVGltZVBhcmFtZXRlcnNDaGFuZ2VkID0gdXNlQ2FsbGJhY2soXG4gICAgICBwYXJhbWV0ZXJzID0+IHtcbiAgICAgICAgdXBkYXRlRWZmZWN0Q29uZmlnKG51bGwsIGlkLCB7XG4gICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgLi4uKHBhcmFtZXRlcnMudGltZXN0YW1wID8ge3RpbWVzdGFtcDogcGFyYW1ldGVycy50aW1lc3RhbXB9IDogbnVsbCksXG4gICAgICAgICAgICAuLi4ocGFyYW1ldGVycy50aW1lem9uZSA/IHt0aW1lem9uZTogcGFyYW1ldGVycy50aW1lem9uZX0gOiBudWxsKSxcbiAgICAgICAgICAgIC4uLihwYXJhbWV0ZXJzLnRpbWVNb2RlID8ge3RpbWVNb2RlOiBwYXJhbWV0ZXJzLnRpbWVNb2RlfSA6IG51bGwpXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBbaWQsIHVwZGF0ZUVmZmVjdENvbmZpZ11cbiAgICApO1xuXG4gICAgY29uc3QgY29sb3JQaWNrZXJQcm9wcyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgY29uc3QgcHJvcE5hbWVzID0gWydhbWJpZW50TGlnaHRDb2xvcicsICdzdW5MaWdodENvbG9yJywgJ3NoYWRvd0NvbG9yJ107XG4gICAgICByZXR1cm4gcHJvcE5hbWVzLm1hcChwcm9wTmFtZSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29sb3JTZXRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHNlbGVjdGVkQ29sb3I6IHBhcmFtZXRlcnNbcHJvcE5hbWVdLFxuICAgICAgICAgICAgICBzZXRDb2xvcjogdiA9PiB1cGRhdGVFZmZlY3RDb25maWcobnVsbCwgaWQsIHtwYXJhbWV0ZXJzOiB7W3Byb3BOYW1lXTogdn19KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH0sIFtpZCwgcGFyYW1ldGVycywgdXBkYXRlRWZmZWN0Q29uZmlnXSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFN0eWxlZEVmZmVjdENvbmZpZ3VyYXRvciBrZXk9e2VmZmVjdC5pZH0+XG4gICAgICAgIDxQYW5lbExhYmVsV3JhcHBlcj5cbiAgICAgICAgICA8U2VjdGlvblRpdGxlPnsnRGF0ZSAmIFRpbWUnfTwvU2VjdGlvblRpdGxlPlxuICAgICAgICA8L1BhbmVsTGFiZWxXcmFwcGVyPlxuICAgICAgICA8RWZmZWN0VGltZUNvbmZpZ3VyYXRvclxuICAgICAgICAgIHRpbWVzdGFtcD17cGFyYW1ldGVycy50aW1lc3RhbXB9XG4gICAgICAgICAgdGltZXpvbmU9e3BhcmFtZXRlcnMudGltZXpvbmV9XG4gICAgICAgICAgdGltZU1vZGU9e3BhcmFtZXRlcnMudGltZU1vZGV9XG4gICAgICAgICAgb25DaGFuZ2U9e29uVGltZVBhcmFtZXRlcnNDaGFuZ2VkfVxuICAgICAgICAvPlxuXG4gICAgICAgIDxTdHlsZWRWZXJ0aWNhbFNlcGFyYXRvciAvPlxuXG4gICAgICAgIDxTdHlsZWRXcmFwcGVyICRtYXJnaW5Cb3R0b209ezB9PlxuICAgICAgICAgIDxTZWN0aW9uVGl0bGU+eydTaGFkb3cnfTwvU2VjdGlvblRpdGxlPlxuICAgICAgICA8L1N0eWxlZFdyYXBwZXI+XG4gICAgICAgIDxTdHlsZWRXcmFwcGVyICRtYXJnaW5Cb3R0b209ezE2fT5cbiAgICAgICAgICA8Q29tcGFjdENvbG9yUGlja2VyXG4gICAgICAgICAgICBsYWJlbD17J0NvbG9yJ31cbiAgICAgICAgICAgIGNvbG9yPXtjb2xvclBpY2tlclByb3BzWzJdLmNvbG9yU2V0c1swXS5zZWxlY3RlZENvbG9yfVxuICAgICAgICAgICAgb25TZXRDb2xvcj17Y29sb3JQaWNrZXJQcm9wc1syXS5jb2xvclNldHNbMF0uc2V0Q29sb3J9XG4gICAgICAgICAgICBJY29uPXtBcnJvd0Rvd25TbWFsbH1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxTdHlsZWRDb25maWdTZWN0aW9uPlxuICAgICAgICAgICAgPFNlY3Rpb25TdWJUaXRsZT5JbnRlbnNpdHk8L1NlY3Rpb25TdWJUaXRsZT5cbiAgICAgICAgICAgIDxTdHlsZVNsaWRlcldyYXBwZXI+XG4gICAgICAgICAgICAgIDxSYW5nZVNsaWRlciB7Li4uQ09NTU9OX1NMSURFUl9QUk9QU30gey4uLnNsaWRlclByb3BzWzBdfSAvPlxuICAgICAgICAgICAgPC9TdHlsZVNsaWRlcldyYXBwZXI+XG4gICAgICAgICAgPC9TdHlsZWRDb25maWdTZWN0aW9uPlxuICAgICAgICA8L1N0eWxlZFdyYXBwZXI+XG5cbiAgICAgICAgPFN0eWxlZFdyYXBwZXIgJG1hcmdpbkJvdHRvbT17MH0+XG4gICAgICAgICAgPFNlY3Rpb25UaXRsZT57J0FtYmllbnQgbGlnaHQnfTwvU2VjdGlvblRpdGxlPlxuICAgICAgICA8L1N0eWxlZFdyYXBwZXI+XG4gICAgICAgIDxTdHlsZWRXcmFwcGVyICRtYXJnaW5Cb3R0b209ezE2fT5cbiAgICAgICAgICA8Q29tcGFjdENvbG9yUGlja2VyXG4gICAgICAgICAgICBsYWJlbD17J0NvbG9yJ31cbiAgICAgICAgICAgIGNvbG9yPXtjb2xvclBpY2tlclByb3BzWzBdLmNvbG9yU2V0c1swXS5zZWxlY3RlZENvbG9yfVxuICAgICAgICAgICAgb25TZXRDb2xvcj17Y29sb3JQaWNrZXJQcm9wc1swXS5jb2xvclNldHNbMF0uc2V0Q29sb3J9XG4gICAgICAgICAgICBJY29uPXtBcnJvd0Rvd25TbWFsbH1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxTdHlsZWRDb25maWdTZWN0aW9uPlxuICAgICAgICAgICAgPFNlY3Rpb25TdWJUaXRsZT5JbnRlbnNpdHk8L1NlY3Rpb25TdWJUaXRsZT5cbiAgICAgICAgICAgIDxTdHlsZVNsaWRlcldyYXBwZXI+XG4gICAgICAgICAgICAgIDxSYW5nZVNsaWRlciB7Li4uQ09NTU9OX1NMSURFUl9QUk9QU30gey4uLnNsaWRlclByb3BzWzFdfSAvPlxuICAgICAgICAgICAgPC9TdHlsZVNsaWRlcldyYXBwZXI+XG4gICAgICAgICAgPC9TdHlsZWRDb25maWdTZWN0aW9uPlxuICAgICAgICA8L1N0eWxlZFdyYXBwZXI+XG5cbiAgICAgICAgPFN0eWxlZFdyYXBwZXIgJG1hcmdpbkJvdHRvbT17MH0+XG4gICAgICAgICAgPFNlY3Rpb25UaXRsZT57J1N1biBsaWdodCd9PC9TZWN0aW9uVGl0bGU+XG4gICAgICAgIDwvU3R5bGVkV3JhcHBlcj5cbiAgICAgICAgPFN0eWxlZFdyYXBwZXIgJG1hcmdpbkJvdHRvbT17MH0+XG4gICAgICAgICAgPENvbXBhY3RDb2xvclBpY2tlclxuICAgICAgICAgICAgbGFiZWw9eydDb2xvcid9XG4gICAgICAgICAgICBjb2xvcj17Y29sb3JQaWNrZXJQcm9wc1sxXS5jb2xvclNldHNbMF0uc2VsZWN0ZWRDb2xvcn1cbiAgICAgICAgICAgIG9uU2V0Q29sb3I9e2NvbG9yUGlja2VyUHJvcHNbMV0uY29sb3JTZXRzWzBdLnNldENvbG9yfVxuICAgICAgICAgICAgSWNvbj17QXJyb3dEb3duU21hbGx9XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8U3R5bGVkQ29uZmlnU2VjdGlvbj5cbiAgICAgICAgICAgIDxTZWN0aW9uU3ViVGl0bGU+SW50ZW5zaXR5PC9TZWN0aW9uU3ViVGl0bGU+XG4gICAgICAgICAgICA8U3R5bGVTbGlkZXJXcmFwcGVyPlxuICAgICAgICAgICAgICA8UmFuZ2VTbGlkZXIgey4uLkNPTU1PTl9TTElERVJfUFJPUFN9IHsuLi5zbGlkZXJQcm9wc1syXX0gLz5cbiAgICAgICAgICAgIDwvU3R5bGVTbGlkZXJXcmFwcGVyPlxuICAgICAgICAgIDwvU3R5bGVkQ29uZmlnU2VjdGlvbj5cbiAgICAgICAgPC9TdHlsZWRXcmFwcGVyPlxuICAgICAgPC9TdHlsZWRFZmZlY3RDb25maWd1cmF0b3I+XG4gICAgKTtcbiAgfTtcbiAgY29uc3QgZGVmYXVsdFVuaWZvcm1zID0ge307XG5cbiAgY29uc3QgRUxFVkFUSU9OX0VYVFJBX1BBUkFNUyA9IG5ldyBTZXQoWydoZWlnaHRFbmQnLCAnYW5pbWF0ZUhlaWdodCcsICdsaW5lYXJFYXNpbmcnXSk7XG5cbiAgY29uc3QgUG9zdFByb2Nlc3NpbmdFZmZlY3RDb25maWd1cmF0b3I6IFJlYWN0LkZDPEVmZmVjdENvbmZpZ3VyYXRvclByb3BzPiA9ICh7XG4gICAgZWZmZWN0LFxuICAgIHVwZGF0ZUVmZmVjdENvbmZpZ1xuICB9KSA9PiB7XG4gICAgY29uc3QgdW5pZm9ybXMgPSBlZmZlY3QuZGVja0VmZmVjdD8ubW9kdWxlLnByb3BUeXBlcyB8fCBkZWZhdWx0VW5pZm9ybXM7XG4gICAgY29uc3QgcGFyYW1ldGVyRGVzY3JpcHRpb25zID0gZWZmZWN0LmdldFBhcmFtZXRlckRlc2NyaXB0aW9ucygpO1xuICAgIGNvbnN0IHtwYXJhbWV0ZXJzLCBpZH0gPSBlZmZlY3Q7XG5cbiAgICBjb25zdCBoYXNFbGV2YXRpb25TZWN0aW9uID0gcGFyYW1ldGVyRGVzY3JpcHRpb25zLnNvbWUoZCA9PiBkLm5hbWUgPT09ICdhbmltYXRlSGVpZ2h0Jyk7XG5cbiAgICBjb25zdCBmbGF0UGFyYW1ldGVyRGVzY3JpcHRpb25zID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICByZXR1cm4gcGFyYW1ldGVyRGVzY3JpcHRpb25zLnJlZHVjZSgoYWNjLCBkZXNjcmlwdGlvbikgPT4ge1xuICAgICAgICBpZiAoaGFzRWxldmF0aW9uU2VjdGlvbiAmJiBFTEVWQVRJT05fRVhUUkFfUEFSQU1TLmhhcyhkZXNjcmlwdGlvbi5uYW1lKSkgcmV0dXJuIGFjYztcblxuICAgICAgICBpZiAoaGFzRWxldmF0aW9uU2VjdGlvbiAmJiBkZXNjcmlwdGlvbi5uYW1lID09PSAnaGVpZ2h0Jykge1xuICAgICAgICAgIGFjYy5wdXNoKHsuLi5kZXNjcmlwdGlvbiwgdHlwZTogRUxFVkFUSU9OX1NFQ1RJT05fVFlQRSBhcyBhbnl9KTtcbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlc2NyaXB0aW9uLnR5cGUgPT09ICdjb2xvcicpIHtcbiAgICAgICAgICBhY2MucHVzaChkZXNjcmlwdGlvbik7XG4gICAgICAgIH0gZWxzZSBpZiAoZGVzY3JpcHRpb24udHlwZSA9PT0gJ2FycmF5Jykge1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRlc2NyaXB0aW9uLmRlZmF1bHRWYWx1ZSkpIHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uLmRlZmF1bHRWYWx1ZS5mb3JFYWNoKChfLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICBhY2MucHVzaCh7XG4gICAgICAgICAgICAgICAgLi4uZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgICAgbGFiZWw6IGRlc2NyaXB0aW9uLmxhYmVsPy5baW5kZXhdXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFjYy5wdXNoKGRlc2NyaXB0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCBbXSBhcyBFZmZlY3RQYXJhbWV0ZXJEZXNjcmlwdGlvbkZsYXR0ZW5lZFtdKTtcbiAgICB9LCBbcGFyYW1ldGVyRGVzY3JpcHRpb25zLCBoYXNFbGV2YXRpb25TZWN0aW9uXSk7XG5cbiAgICBjb25zdCBjb250cm9scyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgcmV0dXJuIGZsYXRQYXJhbWV0ZXJEZXNjcmlwdGlvbnMubWFwKGRlc2MgPT4ge1xuICAgICAgICBpZiAoKGRlc2MudHlwZSBhcyBzdHJpbmcpID09PSBFTEVWQVRJT05fU0VDVElPTl9UWVBFKSB7XG4gICAgICAgICAgcmV0dXJuIHtpc0VsZXZhdGlvblNlY3Rpb246IHRydWUgYXMgY29uc3R9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlc2MudHlwZSA9PT0gJ2NvbG9yJykge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpc0NvbG9yOiB0cnVlIGFzIGNvbnN0LFxuICAgICAgICAgICAgbGFiZWw6IGRlc2MubGFiZWwgfHwgZGVzYy5uYW1lLFxuICAgICAgICAgICAgcGFyYW1OYW1lOiBkZXNjLm5hbWUsXG4gICAgICAgICAgICBjb2xvcjogcGFyYW1ldGVyc1tkZXNjLm5hbWVdIHx8IGRlc2MuZGVmYXVsdFZhbHVlIHx8IFsyNTUsIDI1NSwgMjU1XSxcbiAgICAgICAgICAgIG9uU2V0Q29sb3I6ICh2OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pID0+XG4gICAgICAgICAgICAgIHVwZGF0ZUVmZmVjdENvbmZpZyhudWxsLCBpZCwge3BhcmFtZXRlcnM6IHtbZGVzYy5uYW1lXTogdn19KVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVzYy50eXBlID09PSAnY2hlY2tib3gnKSB7XG4gICAgICAgICAgY29uc3QgbGFiZWwgPSB0eXBlb2YgZGVzYy5sYWJlbCA9PT0gJ3N0cmluZycgPyBkZXNjLmxhYmVsIDogZGVzYy5uYW1lO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpc0NoZWNrYm94OiB0cnVlIGFzIGNvbnN0LFxuICAgICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgICBwYXJhbU5hbWU6IGRlc2MubmFtZSxcbiAgICAgICAgICAgIGNoZWNrZWQ6IEJvb2xlYW4ocGFyYW1ldGVyc1tkZXNjLm5hbWVdKSxcbiAgICAgICAgICAgIHRvb2x0aXA6IGRlc2MudG9vbHRpcCxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiAoKSA9PlxuICAgICAgICAgICAgICB1cGRhdGVFZmZlY3RDb25maWcobnVsbCwgaWQsIHtwYXJhbWV0ZXJzOiB7W2Rlc2MubmFtZV06ICFwYXJhbWV0ZXJzW2Rlc2MubmFtZV19fSlcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyYW1OYW1lID0gZGVzYy5uYW1lO1xuXG4gICAgICAgIGNvbnN0IHJhd1VuaWZvcm0gPSB1bmlmb3Jtc1tkZXNjLm5hbWVdO1xuICAgICAgICBpZiAocmF3VW5pZm9ybSAmJiByYXdVbmlmb3JtLnByaXZhdGUpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGx1bWEuZ2wgOSB3cmFwcyBhcnJheSBwcm9wVHlwZXMgYXMge3ZhbHVlOiBbLi4uXX1cbiAgICAgICAgY29uc3QgdW5pZm9ybSA9XG4gICAgICAgICAgcmF3VW5pZm9ybSAmJiB0eXBlb2YgcmF3VW5pZm9ybSA9PT0gJ29iamVjdCcgJiYgQXJyYXkuaXNBcnJheShyYXdVbmlmb3JtLnZhbHVlKVxuICAgICAgICAgICAgPyByYXdVbmlmb3JtLnZhbHVlXG4gICAgICAgICAgICA6IHJhd1VuaWZvcm07XG5cbiAgICAgICAgY29uc3QgcHJldlZhbHVlID0gcGFyYW1ldGVyc1twYXJhbU5hbWVdO1xuXG4gICAgICAgIGNvbnN0IGxhYmVsID0gZGVzYy5sYWJlbCA9PT0gZmFsc2UgPyBmYWxzZSA6IGRlc2MubGFiZWwgfHwgZGVzYy5uYW1lO1xuXG4gICAgICAgIC8vIHRoZSB1bmlmb3JtIGlzIFtudW1iZXIsIG51bWJlcl0gYXJyYXlcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodW5pZm9ybSkgJiYgdW5pZm9ybS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgICB2YWx1ZTE6IHByZXZWYWx1ZVtkZXNjLmluZGV4IHx8IDBdIHx8IDAsXG4gICAgICAgICAgICByYW5nZTogWzAsIDFdLFxuICAgICAgICAgICAgdmFsdWUwOiAwLFxuICAgICAgICAgICAgb25DaGFuZ2U6IChuZXdWYWx1ZTogbnVtYmVyW10sIGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgIHVwZGF0ZUVmZmVjdENvbmZpZyhldmVudCwgaWQsIHtcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICAgICAgICBbcGFyYW1OYW1lXTpcbiAgICAgICAgICAgICAgICAgICAgZGVzYy5pbmRleCA9PT0gMCA/IFtuZXdWYWx1ZVsxXSwgcHJldlZhbHVlWzFdXSA6IFtwcmV2VmFsdWVbMF0sIG5ld1ZhbHVlWzFdXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyB0aGUgdW5pZm9ybSBpcyBhIHBsYWluIG51bWJlciB3aXRob3V0IGFueSBkZXNjcmlwdGlvblxuICAgICAgICBlbHNlIGlmIChpc051bWJlcih1bmlmb3JtKSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsYWJlbCxcbiAgICAgICAgICAgIHZhbHVlMTogcHJldlZhbHVlID8/IDAsXG4gICAgICAgICAgICByYW5nZTogW2Rlc2MubWluID8/IDAsIGRlc2MubWF4ID8/IDUwMF0sXG4gICAgICAgICAgICB2YWx1ZTA6IGRlc2MubWluID8/IDAsXG4gICAgICAgICAgICBvbkNoYW5nZTogKG5ld1ZhbHVlOiBudW1iZXJbXSwgZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgdXBkYXRlRWZmZWN0Q29uZmlnKGV2ZW50LCBpZCwge3BhcmFtZXRlcnM6IHtbcGFyYW1OYW1lXTogbmV3VmFsdWVbMV19fSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyB0aGUgdW5pZm9ybSBkZXNjcmlwdGlvbiBpcyB7dmFsdWU6IDAsIG1pbjogMCwgbWF4OiAxLCAuLi59XG4gICAgICAgIGVsc2UgaWYgKHVuaWZvcm0gJiYgaXNOdW1iZXIodW5pZm9ybS52YWx1ZSkpIHtcbiAgICAgICAgICBjb25zdCByYW5nZU1pbiA9IGRlc2MubWluID8/IHVuaWZvcm0ubWluID8/IHVuaWZvcm0uc29mdE1pbiA/PyAwO1xuICAgICAgICAgIGNvbnN0IHJhbmdlTWF4ID0gZGVzYy5tYXggPz8gdW5pZm9ybS5tYXggPz8gdW5pZm9ybS5zb2Z0TWF4ID8/IDE7XG4gICAgICAgICAgY29uc3QgcmFuZ2VTcGFuID0gcmFuZ2VNYXggLSByYW5nZU1pbjtcbiAgICAgICAgICBjb25zdCBzdGVwID0gcmFuZ2VTcGFuID4gMTAgPyAxIDogMC4wMDE7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxhYmVsLFxuICAgICAgICAgICAgdmFsdWUxOiBwcmV2VmFsdWUgfHwgMCxcbiAgICAgICAgICAgIHJhbmdlOiBbcmFuZ2VNaW4sIHJhbmdlTWF4XSxcbiAgICAgICAgICAgIHZhbHVlMDogcmFuZ2VNaW4sXG4gICAgICAgICAgICBzdGVwLFxuICAgICAgICAgICAgb25DaGFuZ2U6IChuZXdWYWx1ZTogbnVtYmVyW10sIGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgIHVwZGF0ZUVmZmVjdENvbmZpZyhldmVudCwgaWQsIHtwYXJhbWV0ZXJzOiB7W3BhcmFtTmFtZV06IG5ld1ZhbHVlWzFdfX0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgLy8gUGFyYW1ldGVyIGRlZmluZWQgaW4gZWZmZWN0IGRlc2NyaXB0aW9uIGJ1dCBub3QgaW4gc2hhZGVyIHByb3BUeXBlc1xuICAgICAgICBlbHNlIGlmIChkZXNjLm1pbiAhPT0gdW5kZWZpbmVkICYmIGRlc2MubWF4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb25zdCByYW5nZVNwYW4gPSBkZXNjLm1heCAtIGRlc2MubWluO1xuICAgICAgICAgIGNvbnN0IHN0ZXAgPSByYW5nZVNwYW4gPiAxMCA/IDEgOiAwLjAwMTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgICB2YWx1ZTE6IHByZXZWYWx1ZSA/PyBkZXNjLmRlZmF1bHRWYWx1ZSA/PyAwLFxuICAgICAgICAgICAgcmFuZ2U6IFtkZXNjLm1pbiwgZGVzYy5tYXhdLFxuICAgICAgICAgICAgdmFsdWUwOiBkZXNjLm1pbixcbiAgICAgICAgICAgIHN0ZXAsXG4gICAgICAgICAgICBvbkNoYW5nZTogKG5ld1ZhbHVlOiBudW1iZXJbXSwgZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgdXBkYXRlRWZmZWN0Q29uZmlnKGV2ZW50LCBpZCwge3BhcmFtZXRlcnM6IHtbcGFyYW1OYW1lXTogbmV3VmFsdWVbMV19fSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlnbm9yZSBldmVyeXRoaW5nIGVsc2UgZm9yIG5vd1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0pO1xuICAgIH0sIFtmbGF0UGFyYW1ldGVyRGVzY3JpcHRpb25zLCBpZCwgcGFyYW1ldGVycywgdXBkYXRlRWZmZWN0Q29uZmlnLCB1bmlmb3Jtc10pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTdHlsZWRFZmZlY3RDb25maWd1cmF0b3Iga2V5PXtlZmZlY3QuaWR9PlxuICAgICAgICB7KCgpID0+IHtcbiAgICAgICAgICBjb25zdCBlbGVtZW50czogUmVhY3QuUmVhY3ROb2RlW10gPSBbXTtcbiAgICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgICAgd2hpbGUgKGkgPCBmbGF0UGFyYW1ldGVyRGVzY3JpcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IGNvbnRyb2xzW2ldO1xuICAgICAgICAgICAgaWYgKCFjb250cm9sKSB7XG4gICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICgnaXNDb2xvcicgaW4gY29udHJvbCkge1xuICAgICAgICAgICAgICBjb25zdCBuZXh0Q29udHJvbCA9IGkgKyAxIDwgY29udHJvbHMubGVuZ3RoID8gY29udHJvbHNbaSArIDFdIDogbnVsbDtcbiAgICAgICAgICAgICAgaWYgKG5leHRDb250cm9sICYmICdpc0NoZWNrYm94JyBpbiBuZXh0Q29udHJvbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNiVG9vbHRpcElkID0gbmV4dENvbnRyb2wudG9vbHRpcFxuICAgICAgICAgICAgICAgICAgPyBgZWZmZWN0LWNiLWhpbnQtJHtlZmZlY3QuaWR9LSR7aX1gXG4gICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKFxuICAgICAgICAgICAgICAgICAgPFN0eWxlZENvbG9yQ2hlY2tib3hSb3cga2V5PXtgJHtlZmZlY3QuaWR9LSR7aX1gfT5cbiAgICAgICAgICAgICAgICAgICAgPENvbXBhY3RDb2xvclBpY2tlclxuICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPXt0eXBlb2YgY29udHJvbC5sYWJlbCA9PT0gJ3N0cmluZycgPyBjb250cm9sLmxhYmVsIDogJ0NvbG9yJ31cbiAgICAgICAgICAgICAgICAgICAgICBjb2xvcj17Y29udHJvbC5jb2xvcn1cbiAgICAgICAgICAgICAgICAgICAgICBvblNldENvbG9yPXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wub25TZXRDb2xvciA/P1xuICAgICAgICAgICAgICAgICAgICAgICAgKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbm9vcCAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgSWNvbj17QXJyb3dEb3duU21hbGx9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxTdHlsZWRDaGVja2JveFdyYXBwZXJcbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiAobmV4dENvbnRyb2wgYXMge29uQ2hhbmdlOiAoKSA9PiB2b2lkfSkub25DaGFuZ2UoKX1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxTdHlsZWRDaGVja2JveFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e25leHRDb250cm9sLmNoZWNrZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KCkgPT4gKG5leHRDb250cm9sIGFzIHtvbkNoYW5nZTogKCkgPT4gdm9pZH0pLm9uQ2hhbmdlKCl9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtlID0+IGUuc3RvcFByb3BhZ2F0aW9uKCl9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8U3R5bGVkQ2hlY2tib3hMYWJlbD57bmV4dENvbnRyb2wubGFiZWx9PC9TdHlsZWRDaGVja2JveExhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIHtuZXh0Q29udHJvbC50b29sdGlwID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFN0eWxlZEhpbnRJY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS10aXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZvcj17Y2JUb29sdGlwSWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17ZSA9PiBlLnN0b3BQcm9wYWdhdGlvbigpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8L1N0eWxlZEhpbnRJY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8U3R5bGVkSGludFRvb2x0aXAgaWQ9e2NiVG9vbHRpcElkfSBlZmZlY3Q9XCJzb2xpZFwiIGRlbGF5U2hvdz17MjAwfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bmV4dENvbnRyb2wudG9vbHRpcH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TdHlsZWRIaW50VG9vbHRpcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICA8L1N0eWxlZENoZWNrYm94V3JhcHBlcj5cbiAgICAgICAgICAgICAgICAgIDwvU3R5bGVkQ29sb3JDaGVja2JveFJvdz5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGkgKz0gMjtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goXG4gICAgICAgICAgICAgICAgPFJlZ3VsYXJPdXRlcldyYXBwZXIga2V5PXtgJHtlZmZlY3QuaWR9LSR7aX1gfT5cbiAgICAgICAgICAgICAgICAgIDxDb21wYWN0Q29sb3JQaWNrZXJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw9e3R5cGVvZiBjb250cm9sLmxhYmVsID09PSAnc3RyaW5nJyA/IGNvbnRyb2wubGFiZWwgOiAnQ29sb3InfVxuICAgICAgICAgICAgICAgICAgICBjb2xvcj17Y29udHJvbC5jb2xvcn1cbiAgICAgICAgICAgICAgICAgICAgb25TZXRDb2xvcj17XG4gICAgICAgICAgICAgICAgICAgICAgY29udHJvbC5vblNldENvbG9yID8/XG4gICAgICAgICAgICAgICAgICAgICAgKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vb3AgKi9cbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEljb249e0Fycm93RG93blNtYWxsfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L1JlZ3VsYXJPdXRlcldyYXBwZXI+XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICgnaXNDaGVja2JveCcgaW4gY29udHJvbCkge1xuICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKFxuICAgICAgICAgICAgICAgIDxSZWd1bGFyT3V0ZXJXcmFwcGVyIGtleT17YCR7ZWZmZWN0LmlkfS0ke2l9YH0+XG4gICAgICAgICAgICAgICAgICA8U3R5bGVkQ2hlY2tib3hXcmFwcGVyXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IChjb250cm9sIGFzIHtvbkNoYW5nZTogKCkgPT4gdm9pZH0pLm9uQ2hhbmdlKCl9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxTdHlsZWRDaGVja2JveFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17Y29udHJvbC5jaGVja2VkfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoKSA9PiAoY29udHJvbCBhcyB7b25DaGFuZ2U6ICgpID0+IHZvaWR9KS5vbkNoYW5nZSgpfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2UgPT4gZS5zdG9wUHJvcGFnYXRpb24oKX1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPFN0eWxlZENoZWNrYm94TGFiZWw+e2NvbnRyb2wubGFiZWx9PC9TdHlsZWRDaGVja2JveExhYmVsPlxuICAgICAgICAgICAgICAgICAgPC9TdHlsZWRDaGVja2JveFdyYXBwZXI+XG4gICAgICAgICAgICAgICAgPC9SZWd1bGFyT3V0ZXJXcmFwcGVyPlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoJ2lzRWxldmF0aW9uU2VjdGlvbicgaW4gY29udHJvbCkge1xuICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKFxuICAgICAgICAgICAgICAgIDxTdXJmYWNlRm9nRWxldmF0aW9uU2VjdGlvblxuICAgICAgICAgICAgICAgICAga2V5PXtgJHtlZmZlY3QuaWR9LWVsZXZhdGlvbmB9XG4gICAgICAgICAgICAgICAgICBlZmZlY3Q9e2VmZmVjdH1cbiAgICAgICAgICAgICAgICAgIHVwZGF0ZUVmZmVjdENvbmZpZz17dXBkYXRlRWZmZWN0Q29uZmlnfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goXG4gICAgICAgICAgICAgIDxSZWd1bGFyT3V0ZXJXcmFwcGVyIGtleT17YCR7ZWZmZWN0LmlkfS0ke2l9YH0+XG4gICAgICAgICAgICAgICAge2NvbnRyb2wubGFiZWwgPyAoXG4gICAgICAgICAgICAgICAgICA8UmVndWxhclNlY3Rpb25UaXRsZVdyYXBwZXI+e2NvbnRyb2wubGFiZWx9PC9SZWd1bGFyU2VjdGlvblRpdGxlV3JhcHBlcj5cbiAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICA8UmVndWxhclNsaWRlcldyYXBwZXI+XG4gICAgICAgICAgICAgICAgICA8UmFuZ2VTbGlkZXIga2V5PXtpfSB7Li4uQ09NTU9OX1NMSURFUl9QUk9QU30gey4uLmNvbnRyb2x9IC8+XG4gICAgICAgICAgICAgICAgPC9SZWd1bGFyU2xpZGVyV3JhcHBlcj5cbiAgICAgICAgICAgICAgPC9SZWd1bGFyT3V0ZXJXcmFwcGVyPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZWxlbWVudHM7XG4gICAgICAgIH0pKCl9XG4gICAgICA8L1N0eWxlZEVmZmVjdENvbmZpZ3VyYXRvcj5cbiAgICApO1xuICB9O1xuXG4gIGNvbnN0IEVmZmVjdENvbmZpZ3VyYXRvciA9ICh7XG4gICAgZWZmZWN0LFxuICAgIHVwZGF0ZUVmZmVjdENvbmZpZ1xuICB9OiBFZmZlY3RDb25maWd1cmF0b3JQcm9wcyAmIHtpbnRsOiBJbnRsU2hhcGV9KSA9PiB7XG4gICAgcmV0dXJuIGVmZmVjdC50eXBlID09PSBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVC50eXBlID8gKFxuICAgICAgPFNoYWRvd0VmZmVjdENvbmZpZ3VyYXRvciBlZmZlY3Q9e2VmZmVjdH0gdXBkYXRlRWZmZWN0Q29uZmlnPXt1cGRhdGVFZmZlY3RDb25maWd9IC8+XG4gICAgKSA6IChcbiAgICAgIDxQb3N0UHJvY2Vzc2luZ0VmZmVjdENvbmZpZ3VyYXRvciBlZmZlY3Q9e2VmZmVjdH0gdXBkYXRlRWZmZWN0Q29uZmlnPXt1cGRhdGVFZmZlY3RDb25maWd9IC8+XG4gICAgKTtcbiAgfTtcblxuICByZXR1cm4gaW5qZWN0SW50bChFZmZlY3RDb25maWd1cmF0b3IpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsaUJBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLFVBQUEsR0FBQUgsT0FBQTtBQUVBLElBQUFJLFVBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLE1BQUEsR0FBQUwsT0FBQTtBQUdBLElBQUFNLFlBQUEsR0FBQUosc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFPLE1BQUEsR0FBQVAsT0FBQTtBQUNBLElBQUFRLGtCQUFBLEdBQUFSLE9BQUE7QUFDQSxJQUFBUyx1QkFBQSxHQUFBUCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVUsbUJBQUEsR0FBQVIsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFXLGtCQUFBLEdBQUFaLHVCQUFBLENBQUFDLE9BQUE7QUFBZ0csSUFBQVksZUFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxpQkFBQSxFQUFBQyxpQkFBQSxFQUFBQyxpQkFBQSxFQUFBQyxpQkFBQSxFQUFBQyxpQkFBQSxFQUFBQyxpQkFBQSxFQUFBQyxpQkFBQSxFQUFBQyxpQkFBQSxFQUFBQyxpQkFBQSxFQWhCaEc7QUFDQTtBQUFBLFNBQUFDLHlCQUFBQyxDQUFBLDZCQUFBQyxPQUFBLG1CQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFGLHdCQUFBLFlBQUFBLHlCQUFBQyxDQUFBLFdBQUFBLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLEtBQUFGLENBQUE7QUFBQSxTQUFBaEMsd0JBQUFnQyxDQUFBLEVBQUFFLENBQUEsU0FBQUEsQ0FBQSxJQUFBRixDQUFBLElBQUFBLENBQUEsQ0FBQUksVUFBQSxTQUFBSixDQUFBLGVBQUFBLENBQUEsZ0JBQUFLLFFBQUEsQ0FBQUwsQ0FBQSwwQkFBQUEsQ0FBQSxzQkFBQUEsQ0FBQSxRQUFBRyxDQUFBLEdBQUFKLHdCQUFBLENBQUFHLENBQUEsT0FBQUMsQ0FBQSxJQUFBQSxDQUFBLENBQUFHLEdBQUEsQ0FBQU4sQ0FBQSxVQUFBRyxDQUFBLENBQUFJLEdBQUEsQ0FBQVAsQ0FBQSxPQUFBUSxDQUFBLEtBQUFDLFNBQUEsVUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLGNBQUEsSUFBQUQsTUFBQSxDQUFBRSx3QkFBQSxXQUFBQyxDQUFBLElBQUFkLENBQUEsb0JBQUFjLENBQUEsT0FBQUMsY0FBQSxDQUFBQyxJQUFBLENBQUFoQixDQUFBLEVBQUFjLENBQUEsU0FBQUcsQ0FBQSxHQUFBUCxDQUFBLEdBQUFDLE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQWIsQ0FBQSxFQUFBYyxDQUFBLFVBQUFHLENBQUEsS0FBQUEsQ0FBQSxDQUFBVixHQUFBLElBQUFVLENBQUEsQ0FBQUMsR0FBQSxJQUFBUCxNQUFBLENBQUFDLGNBQUEsQ0FBQUosQ0FBQSxFQUFBTSxDQUFBLEVBQUFHLENBQUEsSUFBQVQsQ0FBQSxDQUFBTSxDQUFBLElBQUFkLENBQUEsQ0FBQWMsQ0FBQSxZQUFBTixDQUFBLGNBQUFSLENBQUEsRUFBQUcsQ0FBQSxJQUFBQSxDQUFBLENBQUFlLEdBQUEsQ0FBQWxCLENBQUEsRUFBQVEsQ0FBQSxHQUFBQSxDQUFBO0FBQUEsU0FBQVcsUUFBQW5CLENBQUEsRUFBQUUsQ0FBQSxRQUFBQyxDQUFBLEdBQUFRLE1BQUEsQ0FBQVMsSUFBQSxDQUFBcEIsQ0FBQSxPQUFBVyxNQUFBLENBQUFVLHFCQUFBLFFBQUFDLENBQUEsR0FBQVgsTUFBQSxDQUFBVSxxQkFBQSxDQUFBckIsQ0FBQSxHQUFBRSxDQUFBLEtBQUFvQixDQUFBLEdBQUFBLENBQUEsQ0FBQUMsTUFBQSxXQUFBckIsQ0FBQSxXQUFBUyxNQUFBLENBQUFFLHdCQUFBLENBQUFiLENBQUEsRUFBQUUsQ0FBQSxFQUFBc0IsVUFBQSxPQUFBckIsQ0FBQSxDQUFBc0IsSUFBQSxDQUFBQyxLQUFBLENBQUF2QixDQUFBLEVBQUFtQixDQUFBLFlBQUFuQixDQUFBO0FBQUEsU0FBQXdCLGNBQUEzQixDQUFBLGFBQUFFLENBQUEsTUFBQUEsQ0FBQSxHQUFBMEIsU0FBQSxDQUFBQyxNQUFBLEVBQUEzQixDQUFBLFVBQUFDLENBQUEsV0FBQXlCLFNBQUEsQ0FBQTFCLENBQUEsSUFBQTBCLFNBQUEsQ0FBQTFCLENBQUEsUUFBQUEsQ0FBQSxPQUFBaUIsT0FBQSxDQUFBUixNQUFBLENBQUFSLENBQUEsT0FBQTJCLE9BQUEsV0FBQTVCLENBQUEsUUFBQTZCLGdCQUFBLGFBQUEvQixDQUFBLEVBQUFFLENBQUEsRUFBQUMsQ0FBQSxDQUFBRCxDQUFBLFNBQUFTLE1BQUEsQ0FBQXFCLHlCQUFBLEdBQUFyQixNQUFBLENBQUFzQixnQkFBQSxDQUFBakMsQ0FBQSxFQUFBVyxNQUFBLENBQUFxQix5QkFBQSxDQUFBN0IsQ0FBQSxLQUFBZ0IsT0FBQSxDQUFBUixNQUFBLENBQUFSLENBQUEsR0FBQTJCLE9BQUEsV0FBQTVCLENBQUEsSUFBQVMsTUFBQSxDQUFBQyxjQUFBLENBQUFaLENBQUEsRUFBQUUsQ0FBQSxFQUFBUyxNQUFBLENBQUFFLHdCQUFBLENBQUFWLENBQUEsRUFBQUQsQ0FBQSxpQkFBQUYsQ0FBQTtBQTBCQSxJQUFNa0Msd0JBQXdCLEdBQUdDLDRCQUFNLENBQUNDLEdBQUcsQ0FBQ0MsS0FBSyxDQUFDO0VBQ2hEQyxTQUFTLEVBQUU7QUFDYixDQUFDLENBQUMsQ0FBQXpELGVBQUEsS0FBQUEsZUFBQSxPQUFBMEQsdUJBQUEsaUZBRVUsVUFBQUMsS0FBSztFQUFBLE9BQUlBLEtBQUssQ0FBQ0MsS0FBSyxDQUFDQyx3QkFBd0I7QUFBQSxHQUM1QyxVQUFBRixLQUFLO0VBQUEsT0FBSUEsS0FBSyxDQUFDQyxLQUFLLENBQUNFLHlCQUF5QjtBQUFBLEVBQzFEO0FBRU0sSUFBTUMsaUJBQWlCLEdBQUFDLE9BQUEsQ0FBQUQsaUJBQUEsR0FBR1QsNEJBQU0sQ0FBQ0MsR0FBRyxDQUFDQyxLQUFLLENBQUM7RUFDaERDLFNBQVMsRUFBRTtBQUNiLENBQUMsQ0FBQyxDQUFBeEQsZ0JBQUEsS0FBQUEsZ0JBQUEsT0FBQXlELHVCQUFBLGdMQVNEO0FBRU0sSUFBTU8sMEJBQTBCLEdBQUFELE9BQUEsQ0FBQUMsMEJBQUEsR0FBR1gsNEJBQU0sQ0FBQ0MsR0FBRyxDQUFBckQsZ0JBQUEsS0FBQUEsZ0JBQUEsT0FBQXdELHVCQUFBLDRHQUtuRDtBQUVELElBQU1RLHVCQUF1QixHQUFHWiw0QkFBTSxDQUFDQyxHQUFHLENBQUFwRCxnQkFBQSxLQUFBQSxnQkFBQSxPQUFBdUQsdUJBQUEsc0lBRXBCLFVBQUFDLEtBQUs7RUFBQSxPQUFJQSxLQUFLLENBQUNDLEtBQUssQ0FBQ08sUUFBUTtBQUFBLEVBSWxEO0FBS0QsSUFBTUMsYUFBYSxHQUFHZCw0QkFBTSxDQUFDQyxHQUFHLENBQUFuRCxnQkFBQSxLQUFBQSxnQkFBQSxPQUFBc0QsdUJBQUEsOEhBSWIsVUFBQUMsS0FBSztFQUFBLElBQUFVLG9CQUFBO0VBQUEsUUFBQUEsb0JBQUEsR0FBSVYsS0FBSyxDQUFDVyxhQUFhLGNBQUFELG9CQUFBLGNBQUFBLG9CQUFBLEdBQUksQ0FBQztBQUFBLEVBQ25EO0FBRUQsSUFBTUUsbUJBQW1CLEdBQUdqQiw0QkFBTSxDQUFDQyxHQUFHLENBQUFsRCxnQkFBQSxLQUFBQSxnQkFBQSxPQUFBcUQsdUJBQUEsbUVBR3JDO0FBRUQsSUFBTWMsWUFBWSxHQUFHbEIsNEJBQU0sQ0FBQ0MsR0FBRyxDQUFBakQsZ0JBQUEsS0FBQUEsZ0JBQUEsT0FBQW9ELHVCQUFBLGlIQUNoQixVQUFBQyxLQUFLO0VBQUEsT0FBSUEsS0FBSyxDQUFDQyxLQUFLLENBQUNhLGFBQWE7QUFBQSxHQUN0QyxVQUFBZCxLQUFLO0VBQUEsT0FBSUEsS0FBSyxDQUFDQyxLQUFLLENBQUNjLHlCQUF5QjtBQUFBLEVBR3hEO0FBRUQsSUFBTUMsZUFBZSxHQUFHckIsNEJBQU0sQ0FBQ0MsR0FBRyxDQUFBaEQsZ0JBQUEsS0FBQUEsZ0JBQUEsT0FBQW1ELHVCQUFBLHVHQUNuQixVQUFBQyxLQUFLO0VBQUEsT0FBSUEsS0FBSyxDQUFDQyxLQUFLLENBQUNhLGFBQWE7QUFBQSxHQUN0QyxVQUFBZCxLQUFLO0VBQUEsT0FBSUEsS0FBSyxDQUFDQyxLQUFLLENBQUNnQix5QkFBeUI7QUFBQSxFQUd4RDtBQUVELElBQU1DLGtCQUFrQixHQUFHdkIsNEJBQU0sQ0FBQ0MsR0FBRyxDQUFBL0MsZ0JBQUEsS0FBQUEsZ0JBQUEsT0FBQWtELHVCQUFBLHdVQWlCcEM7QUFFRCxJQUFNb0IsbUJBQW1CLEdBQUd4Qiw0QkFBTSxDQUFDQyxHQUFHLENBQUNDLEtBQUssQ0FBQztFQUMzQ0MsU0FBUyxFQUFFO0FBQ2IsQ0FBQyxDQUFDLENBQUFoRCxpQkFBQSxLQUFBQSxpQkFBQSxPQUFBaUQsdUJBQUEsNkNBRUQ7QUFFRCxJQUFNcUIsMEJBQTBCLEdBQUd6Qiw0QkFBTSxDQUFDQyxHQUFHLENBQUNDLEtBQUssQ0FBQztFQUNsREMsU0FBUyxFQUFFO0FBQ2IsQ0FBQyxDQUFDLENBQUEvQyxpQkFBQSxLQUFBQSxpQkFBQSxPQUFBZ0QsdUJBQUEsa0hBQ2EsVUFBQUMsS0FBSztFQUFBLE9BQUlBLEtBQUssQ0FBQ0MsS0FBSyxDQUFDYSxhQUFhO0FBQUEsR0FDdEMsVUFBQWQsS0FBSztFQUFBLE9BQUlBLEtBQUssQ0FBQ0MsS0FBSyxDQUFDYyx5QkFBeUI7QUFBQSxFQUd4RDtBQUVELElBQU1NLG9CQUFvQixHQUFHMUIsNEJBQU0sQ0FBQ0MsR0FBRyxDQUFDQyxLQUFLLENBQUM7RUFDNUNDLFNBQVMsRUFBRTtBQUNiLENBQUMsQ0FBQyxDQUFBOUMsaUJBQUEsS0FBQUEsaUJBQUEsT0FBQStDLHVCQUFBLGtQQWFEO0FBRUQsSUFBTXVCLHFCQUFxQixHQUFHM0IsNEJBQU0sQ0FBQ0MsR0FBRyxDQUFDQyxLQUFLLENBQUM7RUFDN0NDLFNBQVMsRUFBRTtBQUNiLENBQUMsQ0FBQyxDQUFBN0MsaUJBQUEsS0FBQUEsaUJBQUEsT0FBQThDLHVCQUFBLG9GQUlEO0FBRUQsSUFBTXdCLGNBQWMsR0FBRzVCLDRCQUFNLENBQUM2QixLQUFLLENBQUF0RSxpQkFBQSxLQUFBQSxpQkFBQSxPQUFBNkMsdUJBQUEsd0ZBR2pCLFVBQUFDLEtBQUs7RUFBQSxPQUFJQSxLQUFLLENBQUNDLEtBQUssQ0FBQ3dCLFdBQVc7QUFBQSxFQUNqRDtBQUVELElBQU1DLG1CQUFtQixHQUFHL0IsNEJBQU0sQ0FBQ2dDLEtBQUssQ0FBQXhFLGlCQUFBLEtBQUFBLGlCQUFBLE9BQUE0Qyx1QkFBQSx1R0FDekIsVUFBQUMsS0FBSztFQUFBLE9BQUlBLEtBQUssQ0FBQ0MsS0FBSyxDQUFDYSxhQUFhO0FBQUEsR0FDdEMsVUFBQWQsS0FBSztFQUFBLE9BQUlBLEtBQUssQ0FBQ0MsS0FBSyxDQUFDYyx5QkFBeUI7QUFBQSxFQUd4RDtBQUVELElBQU1hLGlCQUFpQixHQUFHLElBQUFqQyw0QkFBTSxFQUFDa0MsMEJBQU8sQ0FBQyxDQUFBekUsaUJBQUEsS0FBQUEsaUJBQUEsT0FBQTJDLHVCQUFBLDJKQU94QztBQUVELElBQU0rQixjQUFjLEdBQUduQyw0QkFBTSxDQUFDb0MsSUFBSSxDQUFBMUUsaUJBQUEsS0FBQUEsaUJBQUEsT0FBQTBDLHVCQUFBLHFXQVd2QixVQUFBQyxLQUFLO0VBQUEsT0FBSUEsS0FBSyxDQUFDQyxLQUFLLENBQUMrQixVQUFVO0FBQUEsR0FDcEIsVUFBQWhDLEtBQUs7RUFBQSxPQUFJQSxLQUFLLENBQUNDLEtBQUssQ0FBQytCLFVBQVU7QUFBQSxHQUd4QyxVQUFBaEMsS0FBSztFQUFBLE9BQUlBLEtBQUssQ0FBQ0MsS0FBSyxDQUFDZ0MsV0FBVztBQUFBLEdBQ3pCLFVBQUFqQyxLQUFLO0VBQUEsT0FBSUEsS0FBSyxDQUFDQyxLQUFLLENBQUNnQyxXQUFXO0FBQUEsRUFFbkQ7QUFFRCxJQUFNQyxzQkFBc0IsR0FBR3ZDLDRCQUFNLENBQUNDLEdBQUcsQ0FBQXRDLGlCQUFBLEtBQUFBLGlCQUFBLE9BQUF5Qyx1QkFBQSwwSEFLeEM7QUFFRCxJQUFNb0MsbUJBQW1CLEdBQUc7RUFDMUJDLFNBQVMsRUFBRSxJQUFJO0VBQ2ZDLFFBQVEsRUFBRSxLQUFLO0VBQ2ZDLElBQUksRUFBRSxLQUFLO0VBQ1hYLEtBQUssRUFBRTtBQUNULENBQUM7QUFhRFkseUJBQXlCLENBQUNDLElBQUksR0FBRyxDQUMvQkMsdUJBQWtCLEVBQ2xCQyxrQ0FBNkIsRUFDN0JDLDZCQUFpQyxDQUNsQztBQUVjLFNBQVNKLHlCQUF5QkEsQ0FDL0NLLFdBQWtELEVBQ2xEQyxzQkFBd0UsRUFDeEVDLDBCQUFnRixFQUM3QztFQUNuQyxJQUFNQyx3QkFBMkQsR0FBRyxTQUE5REEsd0JBQTJEQSxDQUFBQyxJQUFBLEVBRzNEO0lBQUEsSUFGSkMsTUFBTSxHQUFBRCxJQUFBLENBQU5DLE1BQU07TUFDTkMsa0JBQWtCLEdBQUFGLElBQUEsQ0FBbEJFLGtCQUFrQjtJQUVsQixJQUFPQyxVQUFVLEdBQVFGLE1BQU0sQ0FBeEJFLFVBQVU7TUFBRUMsRUFBRSxHQUFJSCxNQUFNLENBQVpHLEVBQUU7SUFFckIsSUFBTUMsV0FBVyxHQUFHLElBQUFDLGNBQU8sRUFBQyxZQUFNO01BQ2hDLElBQU1DLFNBQVMsR0FBRyxDQUFDLGlCQUFpQixFQUFFLHVCQUF1QixFQUFFLG1CQUFtQixDQUFDO01BQ25GLElBQU1DLFlBQVksR0FBR1AsTUFBTSxDQUFDUSx3QkFBd0IsQ0FBQyxDQUFDO01BQ3RELE9BQU9GLFNBQVMsQ0FBQ0csR0FBRyxDQUFDLFVBQUFDLFFBQVEsRUFBSTtRQUFBLElBQUFDLFNBQUEsRUFBQUMsU0FBQTtRQUMvQixJQUFNQyxJQUFJLEdBQUdOLFlBQVksQ0FBQ08sSUFBSSxDQUFDLFVBQUFDLENBQUM7VUFBQSxPQUFJQSxDQUFDLENBQUNDLElBQUksS0FBS04sUUFBUTtRQUFBLEVBQUM7UUFDeEQsSUFBTU8sR0FBRyxJQUFBTixTQUFBLEdBQUdFLElBQUksYUFBSkEsSUFBSSx1QkFBSkEsSUFBSSxDQUFFSSxHQUFHLGNBQUFOLFNBQUEsY0FBQUEsU0FBQSxHQUFJLENBQUM7UUFDMUIsSUFBTU8sR0FBRyxJQUFBTixTQUFBLEdBQUdDLElBQUksYUFBSkEsSUFBSSx1QkFBSkEsSUFBSSxDQUFFSyxHQUFHLGNBQUFOLFNBQUEsY0FBQUEsU0FBQSxHQUFJLENBQUM7UUFDMUIsT0FBTztVQUNMTyxNQUFNLEVBQUVqQixVQUFVLENBQUNRLFFBQVEsQ0FBQztVQUM1QlUsS0FBSyxFQUFFLENBQUNILEdBQUcsRUFBRUMsR0FBRyxDQUFDO1VBQ2pCRyxNQUFNLEVBQUVKLEdBQUc7VUFDWEssUUFBUSxFQUFFLFNBQVZBLFFBQVFBLENBQUdDLEtBQWUsRUFBRUMsS0FBb0IsRUFBSztZQUNuRHZCLGtCQUFrQixDQUFDdUIsS0FBSyxFQUFFckIsRUFBRSxFQUFFO2NBQUNELFVBQVUsTUFBQTVELGdCQUFBLGlCQUFJb0UsUUFBUSxFQUFHYSxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQUMsQ0FBQyxDQUFDO1VBQ3JFO1FBQ0YsQ0FBQztNQUNILENBQUMsQ0FBQztJQUNKLENBQUMsRUFBRSxDQUFDcEIsRUFBRSxFQUFFSCxNQUFNLEVBQUVFLFVBQVUsRUFBRUQsa0JBQWtCLENBQUMsQ0FBQztJQUVoRCxJQUFNd0IsdUJBQXVCLEdBQUcsSUFBQUMsa0JBQVcsRUFDekMsVUFBQXhCLFVBQVUsRUFBSTtNQUNaRCxrQkFBa0IsQ0FBQyxJQUFJLEVBQUVFLEVBQUUsRUFBRTtRQUMzQkQsVUFBVSxFQUFBaEUsYUFBQSxDQUFBQSxhQUFBLENBQUFBLGFBQUEsS0FDSmdFLFVBQVUsQ0FBQ3lCLFNBQVMsR0FBRztVQUFDQSxTQUFTLEVBQUV6QixVQUFVLENBQUN5QjtRQUFTLENBQUMsR0FBRyxJQUFJLEdBQy9EekIsVUFBVSxDQUFDMEIsUUFBUSxHQUFHO1VBQUNBLFFBQVEsRUFBRTFCLFVBQVUsQ0FBQzBCO1FBQVEsQ0FBQyxHQUFHLElBQUksR0FDNUQxQixVQUFVLENBQUMyQixRQUFRLEdBQUc7VUFBQ0EsUUFBUSxFQUFFM0IsVUFBVSxDQUFDMkI7UUFBUSxDQUFDLEdBQUcsSUFBSTtNQUVwRSxDQUFDLENBQUM7SUFDSixDQUFDLEVBQ0QsQ0FBQzFCLEVBQUUsRUFBRUYsa0JBQWtCLENBQ3pCLENBQUM7SUFFRCxJQUFNNkIsZ0JBQWdCLEdBQUcsSUFBQXpCLGNBQU8sRUFBQyxZQUFNO01BQ3JDLElBQU1DLFNBQVMsR0FBRyxDQUFDLG1CQUFtQixFQUFFLGVBQWUsRUFBRSxhQUFhLENBQUM7TUFDdkUsT0FBT0EsU0FBUyxDQUFDRyxHQUFHLENBQUMsVUFBQUMsUUFBUSxFQUFJO1FBQy9CLE9BQU87VUFDTHFCLFNBQVMsRUFBRSxDQUNUO1lBQ0VDLGFBQWEsRUFBRTlCLFVBQVUsQ0FBQ1EsUUFBUSxDQUFDO1lBQ25DdUIsUUFBUSxFQUFFLFNBQVZBLFFBQVFBLENBQUVDLENBQUM7Y0FBQSxPQUFJakMsa0JBQWtCLENBQUMsSUFBSSxFQUFFRSxFQUFFLEVBQUU7Z0JBQUNELFVBQVUsTUFBQTVELGdCQUFBLGlCQUFJb0UsUUFBUSxFQUFHd0IsQ0FBQztjQUFDLENBQUMsQ0FBQztZQUFBO1VBQzVFLENBQUM7UUFFTCxDQUFDO01BQ0gsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxFQUFFLENBQUMvQixFQUFFLEVBQUVELFVBQVUsRUFBRUQsa0JBQWtCLENBQUMsQ0FBQztJQUV4QyxvQkFDRTNILE1BQUEsWUFBQTZKLGFBQUEsQ0FBQzFGLHdCQUF3QjtNQUFDMkYsR0FBRyxFQUFFcEMsTUFBTSxDQUFDRztJQUFHLGdCQUN2QzdILE1BQUEsWUFBQTZKLGFBQUEsQ0FBQ2hGLGlCQUFpQixxQkFDaEI3RSxNQUFBLFlBQUE2SixhQUFBLENBQUN2RSxZQUFZLFFBQUUsYUFBNEIsQ0FDMUIsQ0FBQyxlQUNwQnRGLE1BQUEsWUFBQTZKLGFBQUEsQ0FBQ3ZDLHNCQUFzQjtNQUNyQitCLFNBQVMsRUFBRXpCLFVBQVUsQ0FBQ3lCLFNBQVU7TUFDaENDLFFBQVEsRUFBRTFCLFVBQVUsQ0FBQzBCLFFBQVM7TUFDOUJDLFFBQVEsRUFBRTNCLFVBQVUsQ0FBQzJCLFFBQVM7TUFDOUJQLFFBQVEsRUFBRUc7SUFBd0IsQ0FDbkMsQ0FBQyxlQUVGbkosTUFBQSxZQUFBNkosYUFBQSxDQUFDN0UsdUJBQXVCLE1BQUUsQ0FBQyxlQUUzQmhGLE1BQUEsWUFBQTZKLGFBQUEsQ0FBQzNFLGFBQWE7TUFBQ0UsYUFBYSxFQUFFO0lBQUUsZ0JBQzlCcEYsTUFBQSxZQUFBNkosYUFBQSxDQUFDdkUsWUFBWSxRQUFFLFFBQXVCLENBQ3pCLENBQUMsZUFDaEJ0RixNQUFBLFlBQUE2SixhQUFBLENBQUMzRSxhQUFhO01BQUNFLGFBQWEsRUFBRTtJQUFHLGdCQUMvQnBGLE1BQUEsWUFBQTZKLGFBQUEsQ0FBQ2pKLG1CQUFBLFdBQWtCO01BQ2pCd0YsS0FBSyxFQUFFLE9BQVE7TUFDZjJELEtBQUssRUFBRVAsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUNDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsYUFBYztNQUN0RE0sVUFBVSxFQUFFUixnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDRSxRQUFTO01BQ3RETSxJQUFJLEVBQUVDO0lBQWUsQ0FDdEIsQ0FBQyxlQUNGbEssTUFBQSxZQUFBNkosYUFBQSxDQUFDeEUsbUJBQW1CLHFCQUNsQnJGLE1BQUEsWUFBQTZKLGFBQUEsQ0FBQ3BFLGVBQWUsUUFBQyxXQUEwQixDQUFDLGVBQzVDekYsTUFBQSxZQUFBNkosYUFBQSxDQUFDbEUsa0JBQWtCLHFCQUNqQjNGLE1BQUEsWUFBQTZKLGFBQUEsQ0FBQ3hDLFdBQVcsTUFBQThDLFNBQUEsaUJBQUt2RCxtQkFBbUIsRUFBTWtCLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBRyxDQUN6QyxDQUNELENBQ1IsQ0FBQyxlQUVoQjlILE1BQUEsWUFBQTZKLGFBQUEsQ0FBQzNFLGFBQWE7TUFBQ0UsYUFBYSxFQUFFO0lBQUUsZ0JBQzlCcEYsTUFBQSxZQUFBNkosYUFBQSxDQUFDdkUsWUFBWSxRQUFFLGVBQThCLENBQ2hDLENBQUMsZUFDaEJ0RixNQUFBLFlBQUE2SixhQUFBLENBQUMzRSxhQUFhO01BQUNFLGFBQWEsRUFBRTtJQUFHLGdCQUMvQnBGLE1BQUEsWUFBQTZKLGFBQUEsQ0FBQ2pKLG1CQUFBLFdBQWtCO01BQ2pCd0YsS0FBSyxFQUFFLE9BQVE7TUFDZjJELEtBQUssRUFBRVAsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUNDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsYUFBYztNQUN0RE0sVUFBVSxFQUFFUixnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDRSxRQUFTO01BQ3RETSxJQUFJLEVBQUVDO0lBQWUsQ0FDdEIsQ0FBQyxlQUNGbEssTUFBQSxZQUFBNkosYUFBQSxDQUFDeEUsbUJBQW1CLHFCQUNsQnJGLE1BQUEsWUFBQTZKLGFBQUEsQ0FBQ3BFLGVBQWUsUUFBQyxXQUEwQixDQUFDLGVBQzVDekYsTUFBQSxZQUFBNkosYUFBQSxDQUFDbEUsa0JBQWtCLHFCQUNqQjNGLE1BQUEsWUFBQTZKLGFBQUEsQ0FBQ3hDLFdBQVcsTUFBQThDLFNBQUEsaUJBQUt2RCxtQkFBbUIsRUFBTWtCLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBRyxDQUN6QyxDQUNELENBQ1IsQ0FBQyxlQUVoQjlILE1BQUEsWUFBQTZKLGFBQUEsQ0FBQzNFLGFBQWE7TUFBQ0UsYUFBYSxFQUFFO0lBQUUsZ0JBQzlCcEYsTUFBQSxZQUFBNkosYUFBQSxDQUFDdkUsWUFBWSxRQUFFLFdBQTBCLENBQzVCLENBQUMsZUFDaEJ0RixNQUFBLFlBQUE2SixhQUFBLENBQUMzRSxhQUFhO01BQUNFLGFBQWEsRUFBRTtJQUFFLGdCQUM5QnBGLE1BQUEsWUFBQTZKLGFBQUEsQ0FBQ2pKLG1CQUFBLFdBQWtCO01BQ2pCd0YsS0FBSyxFQUFFLE9BQVE7TUFDZjJELEtBQUssRUFBRVAsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUNDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsYUFBYztNQUN0RE0sVUFBVSxFQUFFUixnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDRSxRQUFTO01BQ3RETSxJQUFJLEVBQUVDO0lBQWUsQ0FDdEIsQ0FBQyxlQUNGbEssTUFBQSxZQUFBNkosYUFBQSxDQUFDeEUsbUJBQW1CLHFCQUNsQnJGLE1BQUEsWUFBQTZKLGFBQUEsQ0FBQ3BFLGVBQWUsUUFBQyxXQUEwQixDQUFDLGVBQzVDekYsTUFBQSxZQUFBNkosYUFBQSxDQUFDbEUsa0JBQWtCLHFCQUNqQjNGLE1BQUEsWUFBQTZKLGFBQUEsQ0FBQ3hDLFdBQVcsTUFBQThDLFNBQUEsaUJBQUt2RCxtQkFBbUIsRUFBTWtCLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBRyxDQUN6QyxDQUNELENBQ1IsQ0FDUyxDQUFDO0VBRS9CLENBQUM7RUFDRCxJQUFNc0MsZUFBZSxHQUFHLENBQUMsQ0FBQztFQUUxQixJQUFNQyxzQkFBc0IsR0FBRyxJQUFJQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsZUFBZSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0VBRXRGLElBQU1DLGdDQUFtRSxHQUFHLFNBQXRFQSxnQ0FBbUVBLENBQUFDLEtBQUEsRUFHbkU7SUFBQSxJQUFBQyxrQkFBQTtJQUFBLElBRkovQyxNQUFNLEdBQUE4QyxLQUFBLENBQU45QyxNQUFNO01BQ05DLGtCQUFrQixHQUFBNkMsS0FBQSxDQUFsQjdDLGtCQUFrQjtJQUVsQixJQUFNK0MsUUFBUSxHQUFHLEVBQUFELGtCQUFBLEdBQUEvQyxNQUFNLENBQUNpRCxVQUFVLGNBQUFGLGtCQUFBLHVCQUFqQkEsa0JBQUEsQ0FBbUJHLE1BQU0sQ0FBQ0MsU0FBUyxLQUFJVCxlQUFlO0lBQ3ZFLElBQU1VLHFCQUFxQixHQUFHcEQsTUFBTSxDQUFDUSx3QkFBd0IsQ0FBQyxDQUFDO0lBQy9ELElBQU9OLFVBQVUsR0FBUUYsTUFBTSxDQUF4QkUsVUFBVTtNQUFFQyxFQUFFLEdBQUlILE1BQU0sQ0FBWkcsRUFBRTtJQUVyQixJQUFNa0QsbUJBQW1CLEdBQUdELHFCQUFxQixDQUFDRSxJQUFJLENBQUMsVUFBQXZDLENBQUM7TUFBQSxPQUFJQSxDQUFDLENBQUNDLElBQUksS0FBSyxlQUFlO0lBQUEsRUFBQztJQUV2RixJQUFNdUMseUJBQXlCLEdBQUcsSUFBQWxELGNBQU8sRUFBQyxZQUFNO01BQzlDLE9BQU8rQyxxQkFBcUIsQ0FBQ0ksTUFBTSxDQUFDLFVBQUNDLEdBQUcsRUFBRUMsV0FBVyxFQUFLO1FBQ3hELElBQUlMLG1CQUFtQixJQUFJVixzQkFBc0IsQ0FBQzlILEdBQUcsQ0FBQzZJLFdBQVcsQ0FBQzFDLElBQUksQ0FBQyxFQUFFLE9BQU95QyxHQUFHO1FBRW5GLElBQUlKLG1CQUFtQixJQUFJSyxXQUFXLENBQUMxQyxJQUFJLEtBQUssUUFBUSxFQUFFO1VBQ3hEeUMsR0FBRyxDQUFDekgsSUFBSSxDQUFBRSxhQUFBLENBQUFBLGFBQUEsS0FBS3dILFdBQVc7WUFBRUMsSUFBSSxFQUFFQztVQUE2QixFQUFDLENBQUM7VUFDL0QsT0FBT0gsR0FBRztRQUNaO1FBRUEsSUFBSUMsV0FBVyxDQUFDQyxJQUFJLEtBQUssT0FBTyxFQUFFO1VBQ2hDRixHQUFHLENBQUN6SCxJQUFJLENBQUMwSCxXQUFXLENBQUM7UUFDdkIsQ0FBQyxNQUFNLElBQUlBLFdBQVcsQ0FBQ0MsSUFBSSxLQUFLLE9BQU8sRUFBRTtVQUN2QyxJQUFJRSxLQUFLLENBQUNDLE9BQU8sQ0FBQ0osV0FBVyxDQUFDSyxZQUFZLENBQUMsRUFBRTtZQUMzQ0wsV0FBVyxDQUFDSyxZQUFZLENBQUMxSCxPQUFPLENBQUMsVUFBQzJILENBQUMsRUFBRUMsS0FBSyxFQUFLO2NBQUEsSUFBQUMsa0JBQUE7Y0FDN0NULEdBQUcsQ0FBQ3pILElBQUksQ0FBQUUsYUFBQSxDQUFBQSxhQUFBLEtBQ0h3SCxXQUFXO2dCQUNkTyxLQUFLLEVBQUxBLEtBQUs7Z0JBQ0x2RixLQUFLLEdBQUF3RixrQkFBQSxHQUFFUixXQUFXLENBQUNoRixLQUFLLGNBQUF3RixrQkFBQSx1QkFBakJBLGtCQUFBLENBQW9CRCxLQUFLO2NBQUMsRUFDbEMsQ0FBQztZQUNKLENBQUMsQ0FBQztVQUNKO1FBQ0YsQ0FBQyxNQUFNO1VBQ0xSLEdBQUcsQ0FBQ3pILElBQUksQ0FBQzBILFdBQVcsQ0FBQztRQUN2QjtRQUVBLE9BQU9ELEdBQUc7TUFDWixDQUFDLEVBQUUsRUFBMkMsQ0FBQztJQUNqRCxDQUFDLEVBQUUsQ0FBQ0wscUJBQXFCLEVBQUVDLG1CQUFtQixDQUFDLENBQUM7SUFFaEQsSUFBTWMsUUFBUSxHQUFHLElBQUE5RCxjQUFPLEVBQUMsWUFBTTtNQUM3QixPQUFPa0QseUJBQXlCLENBQUM5QyxHQUFHLENBQUMsVUFBQUksSUFBSSxFQUFJO1FBQzNDLElBQUtBLElBQUksQ0FBQzhDLElBQUksS0FBZ0JDLHlDQUFzQixFQUFFO1VBQ3BELE9BQU87WUFBQ1Esa0JBQWtCLEVBQUU7VUFBYSxDQUFDO1FBQzVDO1FBRUEsSUFBSXZELElBQUksQ0FBQzhDLElBQUksS0FBSyxPQUFPLEVBQUU7VUFDekIsT0FBTztZQUNMVSxPQUFPLEVBQUUsSUFBYTtZQUN0QjNGLEtBQUssRUFBRW1DLElBQUksQ0FBQ25DLEtBQUssSUFBSW1DLElBQUksQ0FBQ0csSUFBSTtZQUM5QnNELFNBQVMsRUFBRXpELElBQUksQ0FBQ0csSUFBSTtZQUNwQnFCLEtBQUssRUFBRW5DLFVBQVUsQ0FBQ1csSUFBSSxDQUFDRyxJQUFJLENBQUMsSUFBSUgsSUFBSSxDQUFDa0QsWUFBWSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7WUFDcEV6QixVQUFVLEVBQUUsU0FBWkEsVUFBVUEsQ0FBR0osQ0FBMkI7Y0FBQSxPQUN0Q2pDLGtCQUFrQixDQUFDLElBQUksRUFBRUUsRUFBRSxFQUFFO2dCQUFDRCxVQUFVLE1BQUE1RCxnQkFBQSxpQkFBSXVFLElBQUksQ0FBQ0csSUFBSSxFQUFHa0IsQ0FBQztjQUFDLENBQUMsQ0FBQztZQUFBO1VBQ2hFLENBQUM7UUFDSDtRQUVBLElBQUlyQixJQUFJLENBQUM4QyxJQUFJLEtBQUssVUFBVSxFQUFFO1VBQzVCLElBQU1qRixNQUFLLEdBQUcsT0FBT21DLElBQUksQ0FBQ25DLEtBQUssS0FBSyxRQUFRLEdBQUdtQyxJQUFJLENBQUNuQyxLQUFLLEdBQUdtQyxJQUFJLENBQUNHLElBQUk7VUFDckUsT0FBTztZQUNMdUQsVUFBVSxFQUFFLElBQWE7WUFDekI3RixLQUFLLEVBQUxBLE1BQUs7WUFDTDRGLFNBQVMsRUFBRXpELElBQUksQ0FBQ0csSUFBSTtZQUNwQndELE9BQU8sRUFBRUMsT0FBTyxDQUFDdkUsVUFBVSxDQUFDVyxJQUFJLENBQUNHLElBQUksQ0FBQyxDQUFDO1lBQ3ZDMEQsT0FBTyxFQUFFN0QsSUFBSSxDQUFDNkQsT0FBTztZQUNyQnBELFFBQVEsRUFBRSxTQUFWQSxRQUFRQSxDQUFBO2NBQUEsT0FDTnJCLGtCQUFrQixDQUFDLElBQUksRUFBRUUsRUFBRSxFQUFFO2dCQUFDRCxVQUFVLE1BQUE1RCxnQkFBQSxpQkFBSXVFLElBQUksQ0FBQ0csSUFBSSxFQUFHLENBQUNkLFVBQVUsQ0FBQ1csSUFBSSxDQUFDRyxJQUFJLENBQUM7Y0FBQyxDQUFDLENBQUM7WUFBQTtVQUNyRixDQUFDO1FBQ0g7UUFFQSxJQUFNc0QsU0FBUyxHQUFHekQsSUFBSSxDQUFDRyxJQUFJO1FBRTNCLElBQU0yRCxVQUFVLEdBQUczQixRQUFRLENBQUNuQyxJQUFJLENBQUNHLElBQUksQ0FBQztRQUN0QyxJQUFJMkQsVUFBVSxJQUFJQSxVQUFVLFdBQVEsRUFBRTtVQUNwQyxPQUFPLElBQUk7UUFDYjs7UUFFQTtRQUNBLElBQU1DLE9BQU8sR0FDWEQsVUFBVSxJQUFJLElBQUFFLFFBQUEsYUFBT0YsVUFBVSxNQUFLLFFBQVEsSUFBSWQsS0FBSyxDQUFDQyxPQUFPLENBQUNhLFVBQVUsQ0FBQ3BELEtBQUssQ0FBQyxHQUMzRW9ELFVBQVUsQ0FBQ3BELEtBQUssR0FDaEJvRCxVQUFVO1FBRWhCLElBQU1HLFNBQVMsR0FBRzVFLFVBQVUsQ0FBQ29FLFNBQVMsQ0FBQztRQUV2QyxJQUFNNUYsS0FBSyxHQUFHbUMsSUFBSSxDQUFDbkMsS0FBSyxLQUFLLEtBQUssR0FBRyxLQUFLLEdBQUdtQyxJQUFJLENBQUNuQyxLQUFLLElBQUltQyxJQUFJLENBQUNHLElBQUk7O1FBRXBFO1FBQ0EsSUFBSTZDLEtBQUssQ0FBQ0MsT0FBTyxDQUFDYyxPQUFPLENBQUMsSUFBSUEsT0FBTyxDQUFDeEksTUFBTSxLQUFLLENBQUMsRUFBRTtVQUNsRCxPQUFPO1lBQ0xzQyxLQUFLLEVBQUxBLEtBQUs7WUFDTHlDLE1BQU0sRUFBRTJELFNBQVMsQ0FBQ2pFLElBQUksQ0FBQ29ELEtBQUssSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3ZDN0MsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNiQyxNQUFNLEVBQUUsQ0FBQztZQUNUQyxRQUFRLEVBQUUsU0FBVkEsUUFBUUEsQ0FBR3lELFFBQWtCLEVBQUV2RCxLQUFLLEVBQUs7Y0FDdkN2QixrQkFBa0IsQ0FBQ3VCLEtBQUssRUFBRXJCLEVBQUUsRUFBRTtnQkFDNUJELFVBQVUsTUFBQTVELGdCQUFBLGlCQUNQZ0ksU0FBUyxFQUNSekQsSUFBSSxDQUFDb0QsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDYyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUVELFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUNBLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBRWxGLENBQUMsQ0FBQztZQUNKO1VBQ0YsQ0FBQztRQUNIO1FBQ0E7UUFBQSxLQUNLLElBQUksSUFBQUMsZUFBUSxFQUFDSixPQUFPLENBQUMsRUFBRTtVQUFBLElBQUFLLFVBQUEsRUFBQUMsVUFBQSxFQUFBQyxVQUFBO1VBQzFCLE9BQU87WUFDTHpHLEtBQUssRUFBTEEsS0FBSztZQUNMeUMsTUFBTSxFQUFFMkQsU0FBUyxhQUFUQSxTQUFTLGNBQVRBLFNBQVMsR0FBSSxDQUFDO1lBQ3RCMUQsS0FBSyxFQUFFLEVBQUE2RCxVQUFBLEdBQUNwRSxJQUFJLENBQUNJLEdBQUcsY0FBQWdFLFVBQUEsY0FBQUEsVUFBQSxHQUFJLENBQUMsR0FBQUMsVUFBQSxHQUFFckUsSUFBSSxDQUFDSyxHQUFHLGNBQUFnRSxVQUFBLGNBQUFBLFVBQUEsR0FBSSxHQUFHLENBQUM7WUFDdkM3RCxNQUFNLEdBQUE4RCxVQUFBLEdBQUV0RSxJQUFJLENBQUNJLEdBQUcsY0FBQWtFLFVBQUEsY0FBQUEsVUFBQSxHQUFJLENBQUM7WUFDckI3RCxRQUFRLEVBQUUsU0FBVkEsUUFBUUEsQ0FBR3lELFFBQWtCLEVBQUV2RCxLQUFLLEVBQUs7Y0FDdkN2QixrQkFBa0IsQ0FBQ3VCLEtBQUssRUFBRXJCLEVBQUUsRUFBRTtnQkFBQ0QsVUFBVSxNQUFBNUQsZ0JBQUEsaUJBQUlnSSxTQUFTLEVBQUdTLFFBQVEsQ0FBQyxDQUFDLENBQUM7Y0FBQyxDQUFDLENBQUM7WUFDekU7VUFDRixDQUFDO1FBQ0g7UUFDQTtRQUFBLEtBQ0ssSUFBSUgsT0FBTyxJQUFJLElBQUFJLGVBQVEsRUFBQ0osT0FBTyxDQUFDckQsS0FBSyxDQUFDLEVBQUU7VUFBQSxJQUFBNkQsS0FBQSxFQUFBQyxLQUFBLEVBQUFDLFVBQUEsRUFBQUMsS0FBQSxFQUFBQyxLQUFBLEVBQUFDLFVBQUE7VUFDM0MsSUFBTUMsUUFBUSxJQUFBTixLQUFBLElBQUFDLEtBQUEsSUFBQUMsVUFBQSxHQUFHekUsSUFBSSxDQUFDSSxHQUFHLGNBQUFxRSxVQUFBLGNBQUFBLFVBQUEsR0FBSVYsT0FBTyxDQUFDM0QsR0FBRyxjQUFBb0UsS0FBQSxjQUFBQSxLQUFBLEdBQUlULE9BQU8sQ0FBQ2UsT0FBTyxjQUFBUCxLQUFBLGNBQUFBLEtBQUEsR0FBSSxDQUFDO1VBQ2hFLElBQU1RLFFBQVEsSUFBQUwsS0FBQSxJQUFBQyxLQUFBLElBQUFDLFVBQUEsR0FBRzVFLElBQUksQ0FBQ0ssR0FBRyxjQUFBdUUsVUFBQSxjQUFBQSxVQUFBLEdBQUliLE9BQU8sQ0FBQzFELEdBQUcsY0FBQXNFLEtBQUEsY0FBQUEsS0FBQSxHQUFJWixPQUFPLENBQUNpQixPQUFPLGNBQUFOLEtBQUEsY0FBQUEsS0FBQSxHQUFJLENBQUM7VUFDaEUsSUFBTU8sU0FBUyxHQUFHRixRQUFRLEdBQUdGLFFBQVE7VUFDckMsSUFBTXJHLElBQUksR0FBR3lHLFNBQVMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEtBQUs7VUFDdkMsT0FBTztZQUNMcEgsS0FBSyxFQUFMQSxLQUFLO1lBQ0x5QyxNQUFNLEVBQUUyRCxTQUFTLElBQUksQ0FBQztZQUN0QjFELEtBQUssRUFBRSxDQUFDc0UsUUFBUSxFQUFFRSxRQUFRLENBQUM7WUFDM0J2RSxNQUFNLEVBQUVxRSxRQUFRO1lBQ2hCckcsSUFBSSxFQUFKQSxJQUFJO1lBQ0ppQyxRQUFRLEVBQUUsU0FBVkEsUUFBUUEsQ0FBR3lELFFBQWtCLEVBQUV2RCxLQUFLLEVBQUs7Y0FDdkN2QixrQkFBa0IsQ0FBQ3VCLEtBQUssRUFBRXJCLEVBQUUsRUFBRTtnQkFBQ0QsVUFBVSxNQUFBNUQsZ0JBQUEsaUJBQUlnSSxTQUFTLEVBQUdTLFFBQVEsQ0FBQyxDQUFDLENBQUM7Y0FBQyxDQUFDLENBQUM7WUFDekU7VUFDRixDQUFDO1FBQ0g7UUFDQTtRQUFBLEtBQ0ssSUFBSWxFLElBQUksQ0FBQ0ksR0FBRyxLQUFLOEUsU0FBUyxJQUFJbEYsSUFBSSxDQUFDSyxHQUFHLEtBQUs2RSxTQUFTLEVBQUU7VUFBQSxJQUFBQyxLQUFBO1VBQ3pELElBQU1GLFVBQVMsR0FBR2pGLElBQUksQ0FBQ0ssR0FBRyxHQUFHTCxJQUFJLENBQUNJLEdBQUc7VUFDckMsSUFBTTVCLEtBQUksR0FBR3lHLFVBQVMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEtBQUs7VUFDdkMsT0FBTztZQUNMcEgsS0FBSyxFQUFMQSxLQUFLO1lBQ0x5QyxNQUFNLEdBQUE2RSxLQUFBLEdBQUVsQixTQUFTLGFBQVRBLFNBQVMsY0FBVEEsU0FBUyxHQUFJakUsSUFBSSxDQUFDa0QsWUFBWSxjQUFBaUMsS0FBQSxjQUFBQSxLQUFBLEdBQUksQ0FBQztZQUMzQzVFLEtBQUssRUFBRSxDQUFDUCxJQUFJLENBQUNJLEdBQUcsRUFBRUosSUFBSSxDQUFDSyxHQUFHLENBQUM7WUFDM0JHLE1BQU0sRUFBRVIsSUFBSSxDQUFDSSxHQUFHO1lBQ2hCNUIsSUFBSSxFQUFKQSxLQUFJO1lBQ0ppQyxRQUFRLEVBQUUsU0FBVkEsUUFBUUEsQ0FBR3lELFFBQWtCLEVBQUV2RCxLQUFLLEVBQUs7Y0FDdkN2QixrQkFBa0IsQ0FBQ3VCLEtBQUssRUFBRXJCLEVBQUUsRUFBRTtnQkFBQ0QsVUFBVSxNQUFBNUQsZ0JBQUEsaUJBQUlnSSxTQUFTLEVBQUdTLFFBQVEsQ0FBQyxDQUFDLENBQUM7Y0FBQyxDQUFDLENBQUM7WUFDekU7VUFDRixDQUFDO1FBQ0g7O1FBRUE7UUFDQSxPQUFPLElBQUk7TUFDYixDQUFDLENBQUM7SUFDSixDQUFDLEVBQUUsQ0FBQ3hCLHlCQUF5QixFQUFFcEQsRUFBRSxFQUFFRCxVQUFVLEVBQUVELGtCQUFrQixFQUFFK0MsUUFBUSxDQUFDLENBQUM7SUFFN0Usb0JBQ0UxSyxNQUFBLFlBQUE2SixhQUFBLENBQUMxRix3QkFBd0I7TUFBQzJGLEdBQUcsRUFBRXBDLE1BQU0sQ0FBQ0c7SUFBRyxHQUNyQyxZQUFNO01BQ04sSUFBTThGLFFBQTJCLEdBQUcsRUFBRTtNQUN0QyxJQUFJekssQ0FBQyxHQUFHLENBQUM7TUFBQyxJQUFBMEssS0FBQSxZQUFBQSxNQUFBLEVBQ21DO1VBQzNDLElBQU1DLE9BQU8sR0FBR2hDLFFBQVEsQ0FBQzNJLENBQUMsQ0FBQztVQUMzQixJQUFJLENBQUMySyxPQUFPLEVBQUU7WUFDWjNLLENBQUMsRUFBRTtZQUFDO1VBRU47VUFFQSxJQUFJLFNBQVMsSUFBSTJLLE9BQU8sRUFBRTtZQUFBLElBQUFDLG9CQUFBO1lBQ3hCLElBQU1DLFdBQVcsR0FBRzdLLENBQUMsR0FBRyxDQUFDLEdBQUcySSxRQUFRLENBQUMvSCxNQUFNLEdBQUcrSCxRQUFRLENBQUMzSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSTtZQUNwRSxJQUFJNkssV0FBVyxJQUFJLFlBQVksSUFBSUEsV0FBVyxFQUFFO2NBQUEsSUFBQUMsbUJBQUE7Y0FDOUMsSUFBTUMsV0FBVyxHQUFHRixXQUFXLENBQUMzQixPQUFPLHFCQUFBOEIsTUFBQSxDQUNqQnhHLE1BQU0sQ0FBQ0csRUFBRSxPQUFBcUcsTUFBQSxDQUFJaEwsQ0FBQyxJQUNoQ3VLLFNBQVM7Y0FDYkUsUUFBUSxDQUFDakssSUFBSSxlQUNYMUQsTUFBQSxZQUFBNkosYUFBQSxDQUFDbEQsc0JBQXNCO2dCQUFDbUQsR0FBRyxLQUFBb0UsTUFBQSxDQUFLeEcsTUFBTSxDQUFDRyxFQUFFLE9BQUFxRyxNQUFBLENBQUloTCxDQUFDO2NBQUcsZ0JBQy9DbEQsTUFBQSxZQUFBNkosYUFBQSxDQUFDakosbUJBQUEsV0FBa0I7Z0JBQ2pCd0YsS0FBSyxFQUFFLE9BQU95SCxPQUFPLENBQUN6SCxLQUFLLEtBQUssUUFBUSxHQUFHeUgsT0FBTyxDQUFDekgsS0FBSyxHQUFHLE9BQVE7Z0JBQ25FMkQsS0FBSyxFQUFFOEQsT0FBTyxDQUFDOUQsS0FBTTtnQkFDckJDLFVBQVUsR0FBQWdFLG1CQUFBLEdBQ1JILE9BQU8sQ0FBQzdELFVBQVUsY0FBQWdFLG1CQUFBLGNBQUFBLG1CQUFBLEdBQ2pCLFlBQU07a0JBQ0w7Z0JBQUEsQ0FFSDtnQkFDRC9ELElBQUksRUFBRUM7Y0FBZSxDQUN0QixDQUFDLGVBQ0ZsSyxNQUFBLFlBQUE2SixhQUFBLENBQUM5RCxxQkFBcUI7Z0JBQ3BCb0ksT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUE7a0JBQUEsT0FBU0osV0FBVyxDQUE0Qi9FLFFBQVEsQ0FBQyxDQUFDO2dCQUFBO2NBQUMsZ0JBRWxFaEosTUFBQSxZQUFBNkosYUFBQSxDQUFDN0QsY0FBYztnQkFDYnFGLElBQUksRUFBQyxVQUFVO2dCQUNmYSxPQUFPLEVBQUU2QixXQUFXLENBQUM3QixPQUFRO2dCQUM3QmxELFFBQVEsRUFBRSxTQUFWQSxRQUFRQSxDQUFBO2tCQUFBLE9BQVMrRSxXQUFXLENBQTRCL0UsUUFBUSxDQUFDLENBQUM7Z0JBQUEsQ0FBQztnQkFDbkVtRixPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBRWxNLENBQUM7a0JBQUEsT0FBSUEsQ0FBQyxDQUFDbU0sZUFBZSxDQUFDLENBQUM7Z0JBQUE7Y0FBQyxDQUNuQyxDQUFDLGVBQ0ZwTyxNQUFBLFlBQUE2SixhQUFBLENBQUMxRCxtQkFBbUIsUUFBRTRILFdBQVcsQ0FBQzNILEtBQTJCLENBQUMsRUFDN0QySCxXQUFXLENBQUMzQixPQUFPLGdCQUNsQnBNLE1BQUEsWUFBQTZKLGFBQUEsQ0FBQTdKLE1BQUEsWUFBQXFPLFFBQUEscUJBQ0VyTyxNQUFBLFlBQUE2SixhQUFBLENBQUN0RCxjQUFjO2dCQUNiLGdCQUFRO2dCQUNSLFlBQVUwSCxXQUFZO2dCQUN0QkUsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUVsTSxDQUFDO2tCQUFBLE9BQUlBLENBQUMsQ0FBQ21NLGVBQWUsQ0FBQyxDQUFDO2dCQUFBO2NBQUMsR0FDbkMsR0FFZSxDQUFDLGVBQ2pCcE8sTUFBQSxZQUFBNkosYUFBQSxDQUFDeEQsaUJBQWlCO2dCQUFDd0IsRUFBRSxFQUFFb0csV0FBWTtnQkFBQ3ZHLE1BQU0sRUFBQyxPQUFPO2dCQUFDNEcsU0FBUyxFQUFFO2NBQUksR0FDL0RQLFdBQVcsQ0FBQzNCLE9BQ0ksQ0FDbkIsQ0FBQyxHQUNELElBQ2lCLENBQ0QsQ0FDMUIsQ0FBQztjQUNEbEosQ0FBQyxJQUFJLENBQUM7Y0FBQztZQUVUO1lBRUF5SyxRQUFRLENBQUNqSyxJQUFJLGVBQ1gxRCxNQUFBLFlBQUE2SixhQUFBLENBQUNqRSxtQkFBbUI7Y0FBQ2tFLEdBQUcsS0FBQW9FLE1BQUEsQ0FBS3hHLE1BQU0sQ0FBQ0csRUFBRSxPQUFBcUcsTUFBQSxDQUFJaEwsQ0FBQztZQUFHLGdCQUM1Q2xELE1BQUEsWUFBQTZKLGFBQUEsQ0FBQ2pKLG1CQUFBLFdBQWtCO2NBQ2pCd0YsS0FBSyxFQUFFLE9BQU95SCxPQUFPLENBQUN6SCxLQUFLLEtBQUssUUFBUSxHQUFHeUgsT0FBTyxDQUFDekgsS0FBSyxHQUFHLE9BQVE7Y0FDbkUyRCxLQUFLLEVBQUU4RCxPQUFPLENBQUM5RCxLQUFNO2NBQ3JCQyxVQUFVLEdBQUE4RCxvQkFBQSxHQUNSRCxPQUFPLENBQUM3RCxVQUFVLGNBQUE4RCxvQkFBQSxjQUFBQSxvQkFBQSxHQUNqQixZQUFNO2dCQUNMO2NBQUEsQ0FFSDtjQUNEN0QsSUFBSSxFQUFFQztZQUFlLENBQ3RCLENBQ2tCLENBQ3ZCLENBQUM7WUFDRGhILENBQUMsRUFBRTtZQUFDO1VBRU47VUFFQSxJQUFJLFlBQVksSUFBSTJLLE9BQU8sRUFBRTtZQUMzQkYsUUFBUSxDQUFDakssSUFBSSxlQUNYMUQsTUFBQSxZQUFBNkosYUFBQSxDQUFDakUsbUJBQW1CO2NBQUNrRSxHQUFHLEtBQUFvRSxNQUFBLENBQUt4RyxNQUFNLENBQUNHLEVBQUUsT0FBQXFHLE1BQUEsQ0FBSWhMLENBQUM7WUFBRyxnQkFDNUNsRCxNQUFBLFlBQUE2SixhQUFBLENBQUM5RCxxQkFBcUI7Y0FDcEJvSSxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQTtnQkFBQSxPQUFTTixPQUFPLENBQTRCN0UsUUFBUSxDQUFDLENBQUM7Y0FBQTtZQUFDLGdCQUU5RGhKLE1BQUEsWUFBQTZKLGFBQUEsQ0FBQzdELGNBQWM7Y0FDYnFGLElBQUksRUFBQyxVQUFVO2NBQ2ZhLE9BQU8sRUFBRTJCLE9BQU8sQ0FBQzNCLE9BQVE7Y0FDekJsRCxRQUFRLEVBQUUsU0FBVkEsUUFBUUEsQ0FBQTtnQkFBQSxPQUFTNkUsT0FBTyxDQUE0QjdFLFFBQVEsQ0FBQyxDQUFDO2NBQUEsQ0FBQztjQUMvRG1GLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFFbE0sQ0FBQztnQkFBQSxPQUFJQSxDQUFDLENBQUNtTSxlQUFlLENBQUMsQ0FBQztjQUFBO1lBQUMsQ0FDbkMsQ0FBQyxlQUNGcE8sTUFBQSxZQUFBNkosYUFBQSxDQUFDMUQsbUJBQW1CLFFBQUUwSCxPQUFPLENBQUN6SCxLQUEyQixDQUNwQyxDQUNKLENBQ3ZCLENBQUM7WUFDRGxELENBQUMsRUFBRTtZQUFDO1VBRU47VUFFQSxJQUFJLG9CQUFvQixJQUFJMkssT0FBTyxFQUFFO1lBQ25DRixRQUFRLENBQUNqSyxJQUFJLGVBQ1gxRCxNQUFBLFlBQUE2SixhQUFBLENBQUN0QywwQkFBMEI7Y0FDekJ1QyxHQUFHLEtBQUFvRSxNQUFBLENBQUt4RyxNQUFNLENBQUNHLEVBQUUsZUFBYTtjQUM5QkgsTUFBTSxFQUFFQSxNQUFPO2NBQ2ZDLGtCQUFrQixFQUFFQTtZQUFtQixDQUN4QyxDQUNILENBQUM7WUFDRHpFLENBQUMsRUFBRTtZQUFDO1VBRU47VUFFQXlLLFFBQVEsQ0FBQ2pLLElBQUksZUFDWDFELE1BQUEsWUFBQTZKLGFBQUEsQ0FBQ2pFLG1CQUFtQjtZQUFDa0UsR0FBRyxLQUFBb0UsTUFBQSxDQUFLeEcsTUFBTSxDQUFDRyxFQUFFLE9BQUFxRyxNQUFBLENBQUloTCxDQUFDO1VBQUcsR0FDM0MySyxPQUFPLENBQUN6SCxLQUFLLGdCQUNacEcsTUFBQSxZQUFBNkosYUFBQSxDQUFDaEUsMEJBQTBCLFFBQUVnSSxPQUFPLENBQUN6SCxLQUFrQyxDQUFDLEdBQ3RFLElBQUksZUFDUnBHLE1BQUEsWUFBQTZKLGFBQUEsQ0FBQy9ELG9CQUFvQixxQkFDbkI5RixNQUFBLFlBQUE2SixhQUFBLENBQUN4QyxXQUFXLE1BQUE4QyxTQUFBO1lBQUNMLEdBQUcsRUFBRTVHO1VBQUUsR0FBSzBELG1CQUFtQixFQUFNaUgsT0FBTyxDQUFHLENBQ3hDLENBQ0gsQ0FDdkIsQ0FBQztVQUNEM0ssQ0FBQyxFQUFFO1FBQ0wsQ0FBQztRQUFBcUwsSUFBQTtNQXZIRCxPQUFPckwsQ0FBQyxHQUFHK0gseUJBQXlCLENBQUNuSCxNQUFNO1FBQUF5SyxJQUFBLEdBQUFYLEtBQUE7UUFBQSxJQUFBVyxJQUFBLFFBSXZDO01BQVM7TUFxSGIsT0FBT1osUUFBUTtJQUNqQixDQUFDLENBQUUsQ0FDcUIsQ0FBQztFQUUvQixDQUFDO0VBRUQsSUFBTWEsa0JBQWtCLEdBQUcsU0FBckJBLGtCQUFrQkEsQ0FBQUMsS0FBQSxFQUcyQjtJQUFBLElBRmpEL0csTUFBTSxHQUFBK0csS0FBQSxDQUFOL0csTUFBTTtNQUNOQyxrQkFBa0IsR0FBQThHLEtBQUEsQ0FBbEI5RyxrQkFBa0I7SUFFbEIsT0FBT0QsTUFBTSxDQUFDMkQsSUFBSSxLQUFLcUQsa0NBQXVCLENBQUNyRCxJQUFJLGdCQUNqRHJMLE1BQUEsWUFBQTZKLGFBQUEsQ0FBQ3JDLHdCQUF3QjtNQUFDRSxNQUFNLEVBQUVBLE1BQU87TUFBQ0Msa0JBQWtCLEVBQUVBO0lBQW1CLENBQUUsQ0FBQyxnQkFFcEYzSCxNQUFBLFlBQUE2SixhQUFBLENBQUNVLGdDQUFnQztNQUFDN0MsTUFBTSxFQUFFQSxNQUFPO01BQUNDLGtCQUFrQixFQUFFQTtJQUFtQixDQUFFLENBQzVGO0VBQ0gsQ0FBQztFQUVELE9BQU8sSUFBQWdILHFCQUFVLEVBQUNILGtCQUFrQixDQUFDO0FBQ3ZDIiwiaWdub3JlTGlzdCI6W119