@igo2/geo 18.0.0-next.8 → 18.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (308) hide show
  1. package/esm2022/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs +4 -6
  2. package/esm2022/lib/catalog/catalog-browser/catalog-browser.component.mjs +13 -10
  3. package/esm2022/lib/datasource/shared/capabilities.service.mjs +1 -1
  4. package/esm2022/lib/datasource/shared/datasources/any-datasource.interface.mjs +1 -1
  5. package/esm2022/lib/datasource/shared/datasources/arcgisrest-datasource.mjs +9 -1
  6. package/esm2022/lib/datasource/shared/datasources/carto-datasource.interface.mjs +1 -1
  7. package/esm2022/lib/datasource/shared/datasources/carto-datasource.mjs +8 -1
  8. package/esm2022/lib/datasource/shared/datasources/cluster-datasource.interface.mjs +1 -1
  9. package/esm2022/lib/datasource/shared/datasources/cluster-datasource.mjs +8 -1
  10. package/esm2022/lib/datasource/shared/datasources/datasource.interface.mjs +1 -1
  11. package/esm2022/lib/datasource/shared/datasources/datasource.mjs +8 -1
  12. package/esm2022/lib/datasource/shared/datasources/feature-datasource.interface.mjs +1 -1
  13. package/esm2022/lib/datasource/shared/datasources/feature-datasource.mjs +8 -1
  14. package/esm2022/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.mjs +1 -1
  15. package/esm2022/lib/datasource/shared/datasources/imagearcgisrest-datasource.mjs +8 -1
  16. package/esm2022/lib/datasource/shared/datasources/mvt-datasource.interface.mjs +1 -1
  17. package/esm2022/lib/datasource/shared/datasources/mvt-datasource.mjs +4 -1
  18. package/esm2022/lib/datasource/shared/datasources/osm-datasource.interface.mjs +1 -1
  19. package/esm2022/lib/datasource/shared/datasources/tilearcgisrest-datasource.interface.mjs +1 -1
  20. package/esm2022/lib/datasource/shared/datasources/tilearcgisrest-datasource.mjs +8 -1
  21. package/esm2022/lib/datasource/shared/datasources/tiledebug-datasource.interface.mjs +1 -1
  22. package/esm2022/lib/datasource/shared/datasources/wfs-datasource.interface.mjs +1 -1
  23. package/esm2022/lib/datasource/shared/datasources/wfs-datasource.mjs +8 -1
  24. package/esm2022/lib/datasource/shared/datasources/wms-datasource.interface.mjs +1 -1
  25. package/esm2022/lib/datasource/shared/datasources/wms-datasource.mjs +8 -1
  26. package/esm2022/lib/datasource/shared/datasources/wmts-datasource.interface.mjs +1 -1
  27. package/esm2022/lib/datasource/shared/datasources/xyz-datasource.interface.mjs +1 -1
  28. package/esm2022/lib/directions/directions-buttons/directions-buttons.component.mjs +151 -102
  29. package/esm2022/lib/directions/directions-inputs/directions-inputs.component.mjs +177 -83
  30. package/esm2022/lib/directions/directions-results/directions-results.component.mjs +93 -44
  31. package/esm2022/lib/directions/directions-sources/directions-source.mjs +1 -1
  32. package/esm2022/lib/directions/directions-sources/osrm-directions-source.mjs +1 -1
  33. package/esm2022/lib/directions/directions.component.mjs +55 -31
  34. package/esm2022/lib/directions/shared/directions.enum.mjs +51 -7
  35. package/esm2022/lib/directions/shared/directions.interface.mjs +1 -1
  36. package/esm2022/lib/directions/shared/directions.service.mjs +122 -96
  37. package/esm2022/lib/directions/shared/directions.utils.mjs +281 -318
  38. package/esm2022/lib/directions/shared/store.mjs +2 -2
  39. package/esm2022/lib/download/download-button/download-button.component.mjs +8 -20
  40. package/esm2022/lib/download/shared/download.service.mjs +1 -1
  41. package/esm2022/lib/draw/draw/draw-popup.component.mjs +1 -1
  42. package/esm2022/lib/draw/draw/draw.component.mjs +5 -12
  43. package/esm2022/lib/draw/shared/draw.utils.mjs +1 -1
  44. package/esm2022/lib/environment/environment.interface.mjs +1 -1
  45. package/esm2022/lib/feature/feature-details/feature-details.component.mjs +2 -2
  46. package/esm2022/lib/feature/shared/feature-store.utils.mjs +7 -6
  47. package/esm2022/lib/feature/shared/feature.interfaces.mjs +1 -1
  48. package/esm2022/lib/feature/shared/store.mjs +1 -1
  49. package/esm2022/lib/feature/shared/strategies/geo-properties.mjs +3 -3
  50. package/esm2022/lib/feature/shared/strategies/in-map-extent.mjs +7 -4
  51. package/esm2022/lib/feature/shared/strategies/selection.mjs +5 -4
  52. package/esm2022/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +3 -3
  53. package/esm2022/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +2 -2
  54. package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.mjs +5 -3
  55. package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs +1 -1
  56. package/esm2022/lib/filter/shared/filterable-datasource.pipe.mjs +8 -1
  57. package/esm2022/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +1 -1
  58. package/esm2022/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs +2 -8
  59. package/esm2022/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +2 -8
  60. package/esm2022/lib/filter/time-filter-button/time-filter-button.component.mjs +2 -2
  61. package/esm2022/lib/filter/time-filter-form/time-filter-form.component.mjs +13 -10
  62. package/esm2022/lib/filter/time-filter-item/time-filter-item.component.mjs +2 -2
  63. package/esm2022/lib/filter/time-filter-list/time-filter-list-binding.directive.mjs +4 -2
  64. package/esm2022/lib/filter/time-filter-list/time-filter-list.component.mjs +5 -16
  65. package/esm2022/lib/import-export/export-button/export-button.component.mjs +4 -17
  66. package/esm2022/lib/import-export/import-export/import-export.component.mjs +23 -12
  67. package/esm2022/lib/import-export/shared/export.service.mjs +7 -4
  68. package/esm2022/lib/import-export/shared/import.utils.mjs +3 -3
  69. package/esm2022/lib/layer/index.mjs +10 -5
  70. package/esm2022/lib/layer/layer-group/index.mjs +2 -0
  71. package/esm2022/lib/layer/layer-group/layer-group.component.mjs +103 -0
  72. package/esm2022/lib/layer/layer-item/layer-item.component.mjs +61 -128
  73. package/esm2022/lib/layer/layer-legend/layer-legend.component.mjs +5 -8
  74. package/esm2022/lib/layer/layer-legend-list/layer-legend-list-binding.directive.mjs +5 -6
  75. package/esm2022/lib/layer/layer-legend-list/layer-legend-list.component.mjs +14 -21
  76. package/esm2022/lib/layer/layer-list/index.mjs +1 -3
  77. package/esm2022/lib/layer/layer-list/layer-list.component.mjs +176 -775
  78. package/esm2022/lib/layer/layer-list-tool/index.mjs +1 -2
  79. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.component.mjs +51 -84
  80. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.interface.mjs +7 -2
  81. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.service.mjs +56 -16
  82. package/esm2022/lib/layer/layer-search/index.mjs +2 -0
  83. package/esm2022/lib/layer/layer-search/layer-search.component.mjs +65 -0
  84. package/esm2022/lib/layer/layer-unavailable/index.mjs +3 -0
  85. package/esm2022/lib/layer/layer-unavailable/layer-unavailable-list/layer-unavailable-list.component.mjs +25 -0
  86. package/esm2022/lib/layer/layer-unavailable/layer-unavailable.component.mjs +35 -0
  87. package/esm2022/lib/layer/layer-viewer/index.mjs +3 -0
  88. package/esm2022/lib/layer/layer-viewer/layer-viewer.component.mjs +226 -0
  89. package/esm2022/lib/layer/layer-viewer/layer-viewer.interface.mjs +2 -0
  90. package/esm2022/lib/layer/layer-viewer-bottom-actions/index.mjs +2 -0
  91. package/esm2022/lib/layer/layer-viewer-bottom-actions/layer-viewer-bottom-actions.component.mjs +207 -0
  92. package/esm2022/lib/layer/layer-visibility-button/index.mjs +2 -0
  93. package/esm2022/lib/layer/layer-visibility-button/layer-visibility-button.component.mjs +83 -0
  94. package/esm2022/lib/layer/layer.module.mjs +51 -33
  95. package/esm2022/lib/layer/shared/index.mjs +2 -1
  96. package/esm2022/lib/layer/shared/layer-controller.mjs +316 -0
  97. package/esm2022/lib/layer/shared/layer-selection.mjs +38 -0
  98. package/esm2022/lib/layer/shared/layer.service.mjs +56 -14
  99. package/esm2022/lib/layer/shared/layers/any-layer.interface.mjs +1 -1
  100. package/esm2022/lib/layer/shared/layers/any-layer.mjs +1 -1
  101. package/esm2022/lib/layer/shared/layers/image-layer.interface.mjs +1 -1
  102. package/esm2022/lib/layer/shared/layers/image-layer.mjs +8 -3
  103. package/esm2022/lib/layer/shared/layers/index.mjs +6 -1
  104. package/esm2022/lib/layer/shared/layers/layer-base.mjs +199 -0
  105. package/esm2022/lib/layer/shared/layers/layer-group.interface.mjs +2 -0
  106. package/esm2022/lib/layer/shared/layers/layer-group.mjs +120 -0
  107. package/esm2022/lib/layer/shared/layers/layer.interface.mjs +1 -11
  108. package/esm2022/lib/layer/shared/layers/layer.mjs +113 -113
  109. package/esm2022/lib/layer/shared/layers/linked/index.mjs +4 -0
  110. package/esm2022/lib/layer/shared/layers/linked/linked-layer.interface.mjs +12 -0
  111. package/esm2022/lib/layer/shared/layers/linked/linked-layer.mjs +242 -0
  112. package/esm2022/lib/layer/shared/layers/linked/linked-layer.utils.mjs +70 -0
  113. package/esm2022/lib/layer/shared/layers/tile-layer.mjs +8 -3
  114. package/esm2022/lib/layer/shared/layers/vector-layer.mjs +9 -3
  115. package/esm2022/lib/layer/shared/layers/vectortile-layer.mjs +8 -3
  116. package/esm2022/lib/layer/utils/layer.utils.mjs +47 -1
  117. package/esm2022/lib/layer/utils/outputLegend.mjs +5 -1
  118. package/esm2022/lib/map/baselayers-switcher/baselayers-switcher.component.mjs +3 -3
  119. package/esm2022/lib/map/baselayers-switcher/mini-basemap.component.mjs +8 -6
  120. package/esm2022/lib/map/map-center/map-center.component.mjs +1 -2
  121. package/esm2022/lib/map/shared/controllers/geolocation.interface.mjs +1 -1
  122. package/esm2022/lib/map/shared/controllers/view.mjs +1 -1
  123. package/esm2022/lib/map/shared/hover-feature.directive.mjs +1 -9
  124. package/esm2022/lib/map/shared/linkedLayers.utils.mjs +113 -123
  125. package/esm2022/lib/map/shared/map.abstract.mjs +4 -3
  126. package/esm2022/lib/map/shared/map.mjs +7 -243
  127. package/esm2022/lib/map/shared/map.service.mjs +1 -1
  128. package/esm2022/lib/map/shared/map.utils.mjs +3 -3
  129. package/esm2022/lib/map/shared/mapOffline.directive.mjs +9 -5
  130. package/esm2022/lib/map/swipe-control/swipe-control.component.mjs +1 -3
  131. package/esm2022/lib/map/utils/index.mjs +2 -0
  132. package/esm2022/lib/map/utils/layer-watcher.mjs +45 -13
  133. package/esm2022/lib/measure/measurer/measurer.component.mjs +7 -25
  134. package/esm2022/lib/metadata/metadata-button/metadata-button.component.mjs +6 -18
  135. package/esm2022/lib/offline/offline.provider.mjs +10 -11
  136. package/esm2022/lib/print/shared/print.service.mjs +3 -3
  137. package/esm2022/lib/query/shared/query.directive.mjs +9 -5
  138. package/esm2022/lib/query/shared/query.service.mjs +7 -7
  139. package/esm2022/lib/query/shared/query.utils.mjs +5 -1
  140. package/esm2022/lib/search/search-results/search-results-add-button.component.mjs +15 -9
  141. package/esm2022/lib/search/shared/search-pointer-summary.directive.mjs +1 -10
  142. package/esm2022/lib/search/shared/sources/ilayer.interfaces.mjs +1 -1
  143. package/esm2022/lib/search/shared/sources/workspace.interfaces.mjs +1 -1
  144. package/esm2022/lib/search/shared/sources/workspace.mjs +1 -1
  145. package/esm2022/lib/workspace/shared/edition-workspace.mjs +6 -4
  146. package/esm2022/lib/workspace/shared/edition-workspace.service.mjs +19 -17
  147. package/esm2022/lib/workspace/shared/wfs-workspace.service.mjs +17 -2
  148. package/esm2022/lib/workspace/shared/wms-workspace.service.mjs +22 -4
  149. package/esm2022/lib/workspace/shared/workspace.utils.mjs +6 -3
  150. package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs +2 -2
  151. package/esm2022/lib/workspace/workspace-selector/workspace-selector.directive.mjs +6 -2
  152. package/esm2022/lib/workspace/workspace-updator/workspace-updator.directive.mjs +4 -3
  153. package/fesm2022/igo2-geo.mjs +22502 -21440
  154. package/fesm2022/igo2-geo.mjs.map +1 -1
  155. package/lib/datasource/shared/capabilities.service.d.ts +7 -2
  156. package/lib/datasource/shared/datasources/any-datasource.interface.d.ts +1 -0
  157. package/lib/datasource/shared/datasources/arcgisrest-datasource.d.ts +1 -0
  158. package/lib/datasource/shared/datasources/carto-datasource.d.ts +1 -0
  159. package/lib/datasource/shared/datasources/carto-datasource.interface.d.ts +0 -2
  160. package/lib/datasource/shared/datasources/cluster-datasource.d.ts +1 -0
  161. package/lib/datasource/shared/datasources/cluster-datasource.interface.d.ts +0 -1
  162. package/lib/datasource/shared/datasources/datasource.d.ts +1 -0
  163. package/lib/datasource/shared/datasources/datasource.interface.d.ts +1 -2
  164. package/lib/datasource/shared/datasources/feature-datasource.d.ts +1 -0
  165. package/lib/datasource/shared/datasources/feature-datasource.interface.d.ts +0 -3
  166. package/lib/datasource/shared/datasources/imagearcgisrest-datasource.d.ts +1 -0
  167. package/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.d.ts +0 -2
  168. package/lib/datasource/shared/datasources/mvt-datasource.d.ts +1 -0
  169. package/lib/datasource/shared/datasources/mvt-datasource.interface.d.ts +0 -2
  170. package/lib/datasource/shared/datasources/osm-datasource.interface.d.ts +0 -2
  171. package/lib/datasource/shared/datasources/tilearcgisrest-datasource.d.ts +1 -0
  172. package/lib/datasource/shared/datasources/tilearcgisrest-datasource.interface.d.ts +0 -2
  173. package/lib/datasource/shared/datasources/tiledebug-datasource.interface.d.ts +0 -2
  174. package/lib/datasource/shared/datasources/wfs-datasource.d.ts +1 -0
  175. package/lib/datasource/shared/datasources/wfs-datasource.interface.d.ts +3 -4
  176. package/lib/datasource/shared/datasources/wms-datasource.d.ts +1 -0
  177. package/lib/datasource/shared/datasources/wms-datasource.interface.d.ts +6 -6
  178. package/lib/datasource/shared/datasources/wmts-datasource.interface.d.ts +0 -2
  179. package/lib/datasource/shared/datasources/xyz-datasource.interface.d.ts +0 -2
  180. package/lib/directions/directions-buttons/directions-buttons.component.d.ts +57 -20
  181. package/lib/directions/directions-inputs/directions-inputs.component.d.ts +115 -13
  182. package/lib/directions/directions-results/directions-results.component.d.ts +50 -16
  183. package/lib/directions/directions-sources/directions-source.d.ts +2 -2
  184. package/lib/directions/directions-sources/osrm-directions-source.d.ts +2 -2
  185. package/lib/directions/directions.component.d.ts +5 -5
  186. package/lib/directions/shared/directions.enum.d.ts +42 -1
  187. package/lib/directions/shared/directions.interface.d.ts +50 -25
  188. package/lib/directions/shared/directions.service.d.ts +46 -8
  189. package/lib/directions/shared/directions.utils.d.ts +102 -23
  190. package/lib/directions/shared/store.d.ts +3 -3
  191. package/lib/download/download-button/download-button.component.d.ts +4 -8
  192. package/lib/download/shared/download.service.d.ts +1 -1
  193. package/lib/draw/draw/draw.component.d.ts +2 -2
  194. package/lib/draw/shared/draw.utils.d.ts +2 -1
  195. package/lib/environment/environment.interface.d.ts +2 -0
  196. package/lib/feature/shared/feature-store.utils.d.ts +1 -1
  197. package/lib/feature/shared/feature.interfaces.d.ts +1 -1
  198. package/lib/feature/shared/store.d.ts +1 -1
  199. package/lib/filter/ogc-filter-button/ogc-filter-button.component.d.ts +1 -1
  200. package/lib/filter/ogc-filter-time/ogc-filter-time.component.d.ts +1 -1
  201. package/lib/filter/ogc-filterable-item/ogc-filterable-item.component.d.ts +1 -1
  202. package/lib/filter/ogc-filterable-list/ogc-filterable-list.component.d.ts +2 -2
  203. package/lib/filter/shared/filterable-datasource.pipe.d.ts +2 -2
  204. package/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.d.ts +3 -3
  205. package/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.d.ts +3 -5
  206. package/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.d.ts +3 -5
  207. package/lib/filter/time-filter-button/time-filter-button.component.d.ts +1 -1
  208. package/lib/filter/time-filter-form/time-filter-form.component.d.ts +5 -5
  209. package/lib/filter/time-filter-item/time-filter-item.component.d.ts +1 -1
  210. package/lib/filter/time-filter-list/time-filter-list.component.d.ts +2 -7
  211. package/lib/import-export/export-button/export-button.component.d.ts +3 -7
  212. package/lib/import-export/import-export/import-export.component.d.ts +1 -2
  213. package/lib/import-export/shared/export.service.d.ts +2 -2
  214. package/lib/layer/index.d.ts +9 -4
  215. package/lib/layer/layer-group/index.d.ts +1 -0
  216. package/lib/layer/layer-group/layer-group.component.d.ts +30 -0
  217. package/lib/layer/layer-item/layer-item.component.d.ts +19 -38
  218. package/lib/layer/layer-legend/layer-legend.component.d.ts +2 -5
  219. package/lib/layer/layer-legend-list/layer-legend-list.component.d.ts +6 -7
  220. package/lib/layer/layer-list/index.d.ts +0 -2
  221. package/lib/layer/layer-list/layer-list.component.d.ts +51 -123
  222. package/lib/layer/layer-list-tool/index.d.ts +0 -1
  223. package/lib/layer/layer-list-tool/layer-list-tool.component.d.ts +19 -26
  224. package/lib/layer/layer-list-tool/layer-list-tool.interface.d.ts +5 -1
  225. package/lib/layer/layer-list-tool/layer-list-tool.service.d.ts +9 -8
  226. package/lib/layer/layer-search/index.d.ts +1 -0
  227. package/lib/layer/layer-search/layer-search.component.d.ts +16 -0
  228. package/lib/layer/layer-unavailable/index.d.ts +2 -0
  229. package/lib/layer/layer-unavailable/layer-unavailable-list/layer-unavailable-list.component.d.ts +10 -0
  230. package/lib/layer/layer-unavailable/layer-unavailable.component.d.ts +11 -0
  231. package/lib/layer/layer-viewer/index.d.ts +2 -0
  232. package/lib/layer/layer-viewer/layer-viewer.component.d.ts +52 -0
  233. package/lib/layer/layer-viewer/layer-viewer.interface.d.ts +22 -0
  234. package/lib/layer/layer-viewer-bottom-actions/index.d.ts +1 -0
  235. package/lib/layer/layer-viewer-bottom-actions/layer-viewer-bottom-actions.component.d.ts +44 -0
  236. package/lib/layer/layer-visibility-button/index.d.ts +1 -0
  237. package/lib/layer/layer-visibility-button/layer-visibility-button.component.d.ts +22 -0
  238. package/lib/layer/layer.module.d.ts +18 -6
  239. package/lib/layer/shared/index.d.ts +1 -0
  240. package/lib/layer/shared/layer-controller.d.ts +81 -0
  241. package/lib/layer/shared/layer-selection.d.ts +14 -0
  242. package/lib/layer/shared/layer.service.d.ts +12 -3
  243. package/lib/layer/shared/layers/any-layer.d.ts +3 -6
  244. package/lib/layer/shared/layers/any-layer.interface.d.ts +8 -6
  245. package/lib/layer/shared/layers/image-layer.d.ts +5 -2
  246. package/lib/layer/shared/layers/image-layer.interface.d.ts +1 -4
  247. package/lib/layer/shared/layers/index.d.ts +5 -0
  248. package/lib/layer/shared/layers/layer-base.d.ts +75 -0
  249. package/lib/layer/shared/layers/layer-group.d.ts +32 -0
  250. package/lib/layer/shared/layers/layer-group.interface.d.ts +8 -0
  251. package/lib/layer/shared/layers/layer.d.ts +27 -44
  252. package/lib/layer/shared/layers/layer.interface.d.ts +23 -41
  253. package/lib/layer/shared/layers/linked/index.d.ts +3 -0
  254. package/lib/layer/shared/layers/linked/linked-layer.d.ts +35 -0
  255. package/lib/layer/shared/layers/linked/linked-layer.interface.d.ts +32 -0
  256. package/lib/layer/shared/layers/linked/linked-layer.utils.d.ts +9 -0
  257. package/lib/layer/shared/layers/tile-layer.d.ts +5 -2
  258. package/lib/layer/shared/layers/vector-layer.d.ts +7 -3
  259. package/lib/layer/shared/layers/vectortile-layer.d.ts +5 -2
  260. package/lib/layer/utils/layer.utils.d.ts +12 -2
  261. package/lib/layer/utils/outputLegend.d.ts +2 -2
  262. package/lib/map/shared/controllers/geolocation.interface.d.ts +2 -1
  263. package/lib/map/shared/hover-feature.directive.d.ts +0 -1
  264. package/lib/map/shared/linkedLayers.utils.d.ts +13 -17
  265. package/lib/map/shared/map.abstract.d.ts +12 -29
  266. package/lib/map/shared/map.d.ts +10 -85
  267. package/lib/map/shared/map.service.d.ts +1 -1
  268. package/lib/map/shared/map.utils.d.ts +5 -3
  269. package/lib/map/utils/index.d.ts +1 -0
  270. package/lib/map/utils/layer-watcher.d.ts +18 -8
  271. package/lib/measure/measurer/measurer.component.d.ts +0 -8
  272. package/lib/metadata/metadata-button/metadata-button.component.d.ts +3 -7
  273. package/lib/offline/offline.provider.d.ts +1 -1
  274. package/lib/query/shared/query.service.d.ts +1 -1
  275. package/lib/query/shared/query.utils.d.ts +2 -1
  276. package/lib/search/search-results/search-results-add-button.component.d.ts +1 -1
  277. package/lib/search/shared/search-pointer-summary.directive.d.ts +0 -1
  278. package/lib/search/shared/sources/cadastre.providers.d.ts +1 -1
  279. package/lib/search/shared/sources/coordinates.providers.d.ts +1 -1
  280. package/lib/search/shared/sources/icherche.providers.d.ts +1 -1
  281. package/lib/search/shared/sources/ilayer.interfaces.d.ts +1 -1
  282. package/lib/search/shared/sources/ilayer.providers.d.ts +1 -1
  283. package/lib/search/shared/sources/nominatim.providers.d.ts +1 -1
  284. package/lib/search/shared/sources/storedqueries.providers.d.ts +2 -2
  285. package/lib/search/shared/sources/workspace.interfaces.d.ts +1 -1
  286. package/lib/search/shared/sources/workspace.providers.d.ts +1 -1
  287. package/lib/workspace/widgets/ogc-filter/ogc-filter.component.d.ts +1 -1
  288. package/locale/en.geo.json +106 -89
  289. package/locale/fr.geo.json +105 -89
  290. package/package.json +5 -5
  291. package/src/geo-theme.scss +1 -1
  292. package/src/lib/directions/directions-inputs/directions-inputs.theming.scss +21 -0
  293. package/src/lib/directions/directions.theming.scss +2 -0
  294. package/src/lib/layer/layer-group/layer-group.theme.scss +28 -0
  295. package/src/lib/layer/layer-item/layer-item.theme.scss +12 -9
  296. package/src/lib/layer/layer-legend/layer-legend.theme.scss +30 -0
  297. package/src/lib/layer/layer-list/layer-list.theme.scss +50 -0
  298. package/src/lib/layer/layer-unavailable/layer-unavailable.theme.scss +19 -0
  299. package/src/lib/layer/layer-viewer/_layer-viewer.theme.scss +16 -0
  300. package/src/lib/layer/layer-visibility-button/layer-visibility-button.theme.scss +27 -0
  301. package/src/lib/layer/layer.theming.scss +14 -3
  302. package/esm2022/lib/layer/layer-list/layer-list-binding.directive.mjs +0 -70
  303. package/esm2022/lib/layer/layer-list/layer-list.enum.mjs +0 -19
  304. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.enum.mjs +0 -7
  305. package/lib/layer/layer-list/layer-list-binding.directive.d.ts +0 -19
  306. package/lib/layer/layer-list/layer-list.enum.d.ts +0 -15
  307. package/lib/layer/layer-list-tool/layer-list-tool.enum.d.ts +0 -5
  308. package/src/lib/layer/layer-legend/layer-legend.theming.scss +0 -10
@@ -37,6 +37,13 @@ export class WMSDataSource extends DataSource {
37
37
  return this.options.timeFilter;
38
38
  }
39
39
  timeFilter$ = new BehaviorSubject(undefined);
40
+ get saveableOptions() {
41
+ const baseOptions = super.saveableOptions;
42
+ return {
43
+ ...baseOptions,
44
+ params: this.params
45
+ };
46
+ }
40
47
  constructor(options, wfsService) {
41
48
  super(options);
42
49
  this.options = options;
@@ -217,4 +224,4 @@ export class WMSDataSource extends DataSource {
217
224
  // empty
218
225
  }
219
226
  }
220
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid21zLWRhdGFzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9kYXRhc291cmNlL3NoYXJlZC9kYXRhc291cmNlcy93bXMtZGF0YXNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTFDLE9BQU8sZ0JBQWdCLE1BQU0sb0JBQW9CLENBQUM7QUFFbEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV2QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFRcEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFPMUMsT0FBTyxFQUNMLGNBQWMsRUFDZCx3QkFBd0IsRUFDeEIsb0JBQW9CLEVBQ3JCLE1BQU0saUJBQWlCLENBQUM7QUFVekIsTUFBTSxPQUFPLGFBQWMsU0FBUSxVQUFVO0lBdUNsQztJQUNHO0lBckNaLElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFhLENBQUM7SUFDcEMsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLE9BQVEsSUFBSSxDQUFDLE9BQWUsQ0FBQyxVQUFVO1lBQ3JDLENBQUMsQ0FBRSxJQUFJLENBQUMsT0FBZSxDQUFDLFVBQVU7WUFDbEMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztJQUNkLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDVixPQUFRLElBQUksQ0FBQyxPQUFlLENBQUMsUUFBUSxDQUFDO0lBQ3hDLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDakIsT0FBUSxJQUFJLENBQUMsT0FBZSxDQUFDLGVBQWU7WUFDMUMsQ0FBQyxDQUFFLElBQUksQ0FBQyxPQUFlLENBQUMsZUFBZTtZQUN2QyxDQUFD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QUMsR0FBRyxDQUFDO1lBQ2xELE9BQU87Z0JBQ0wsR0FBRyxFQUFFLEdBQUcsT0FBTyxHQUFHLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEtBQUssRUFBRTtnQkFDL0QsS0FBSyxFQUFFLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVM7Z0JBQzVDLFlBQVksRUFBRSxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFFLEtBQWdCO2FBQ2xFLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxTQUFTO1FBQ2QsUUFBUTtJQUNWLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9iamVjdFV0aWxzIH0gZnJvbSAnQGlnbzIvdXRpbHMnO1xuXG5pbXBvcnQgb2xTb3VyY2VJbWFnZVdNUyBmcm9tICdvbC9zb3VyY2UvSW1hZ2VXTVMnO1xuXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgT2djRmlsdGVyV3JpdGVyIH0gZnJvbSAnLi4vLi4vLi4vZmlsdGVyL3NoYXJlZC9vZ2MtZmlsdGVyJztcbmltcG9ydCB7XG4gIE9nY0ZpbHRlckR1cmluZ09wdGlvbnMsXG4gIE9nY0ZpbHRlcmFibGVEYXRhU291cmNlT3B0aW9ucyxcbiAgT2djRmlsdGVyc09wdGlvbnNcbn0gZnJvbSAnLi4vLi4vLi4vZmlsdGVyL3NoYXJlZC9vZ2MtZmlsdGVyLmludGVyZmFjZSc7XG5pbXBvcnQgeyBUaW1lRmlsdGVyT3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uL2ZpbHRlci9zaGFyZWQvdGltZS1maWx0ZXIuaW50ZXJmYWNlJztcbmltcG9ydCB7IExlZ2VuZE1hcFZpZXdPcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vbGF5ZXIvc2hhcmVkL2xheWVycy9sZWdlbmQuaW50ZXJmYWNlJztcbmltcG9ydCB7IFF1ZXJ5SHRtbFRhcmdldCB9IGZyb20gJy4uLy4uLy4uL3F1ZXJ5L3NoYXJlZC9xdWVyeS5lbnVtcyc7XG5pbXBvcnQgeyBEYXRhU291cmNlIH0gZnJvbSAnLi9kYXRhc291cmNlJztcbmltcG9ydCB7IExlZ2VuZCB9IGZyb20gJy4vZGF0YXNvdXJjZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgV0ZTU2VydmljZSB9IGZyb20gJy4vd2ZzLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgVGltZUZpbHRlcmFibGVEYXRhU291cmNlT3B0aW9ucyxcbiAgV01TRGF0YVNvdXJjZU9wdGlvbnNcbn0gZnJvbSAnLi93bXMtZGF0YXNvdXJjZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgY2hlY2tXZnNQYXJhbXMsXG4gIGRlZmF1bHRGaWVsZE5hbWVHZW9tZXRyeSxcbiAgZm9ybWF0V0ZTUXVlcnlTdHJpbmdcbn0gZnJvbSAnLi93bXMtd2ZzLnV0aWxzJztcblxuZXhwb3J0IGludGVyZmFjZSBUaW1lRmlsdGVyYWJsZURhdGFTb3VyY2UgZXh0ZW5kcyBXTVNEYXRhU291cmNlIHtcbiAgb3B0aW9uczogVGltZUZpbHRlcmFibGVEYXRhU291cmNlT3B0aW9ucztcbiAgdGltZUZpbHRlciQ6IEJlaGF2aW9yU3ViamVjdDxUaW1lRmlsdGVyT3B0aW9ucz47XG4gIHNldFRpbWVGaWx0ZXIob2djRmlsdGVyczogVGltZUZpbHRlck9wdGlvbnMsIHRyaWdnZXJFdmVudD86IGJvb2xlYW4pO1xuICBmaWx0ZXJCeURhdGUoZGF0ZTogRGF0ZSB8IFtEYXRlLCBEYXRlXSk7XG4gIGZpbHRlckJ5WWVhcih5ZWFyOiBzdHJpbmcgfCBbc3RyaW5nLCBzdHJpbmddKTtcbn1cblxuZXhwb3J0IGNsYXNzIFdNU0RhdGFTb3VyY2UgZXh0ZW5kcyBEYXRhU291cmNlIHtcbiAgZGVjbGFyZSBwdWJsaWMgb2w6IG9sU291cmNlSW1hZ2VXTVM7XG5cbiAgZ2V0IHBhcmFtcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMucGFyYW1zIGFzIGFueTtcbiAgfVxuXG4gIGdldCBxdWVyeVRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICh0aGlzLm9wdGlvbnMgYXMgYW55KS5xdWVyeVRpdGxlXG4gICAgICA/ICh0aGlzLm9wdGlvbnMgYXMgYW55KS5xdWVyeVRpdGxlXG4gICAgICA6ICd0aXRsZSc7XG4gIH1cblxuICBnZXQgbWFwTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKHRoaXMub3B0aW9ucyBhcyBhbnkpLm1hcExhYmVsO1xuICB9XG5cbiAgZ2V0IHF1ZXJ5SHRtbFRhcmdldCgpOiBzdHJpbmcge1xuICAgIHJldHVybiAodGhpcy5vcHRpb25zIGFzIGFueSkucXVlcnlIdG1sVGFyZ2V0XG4gICAgICA/ICh0aGlzLm9wdGlvbnMgYXMgYW55KS5xdWVyeUh0bWxUYXJnZXRcbiAgICAgIDogUXVlcnlIdG1sVGFyZ2V0LkJMQU5LO1xuICB9XG5cbiAgc2V0IG9nY0ZpbHRlcnModmFsdWU6IE9nY0ZpbHRlcnNPcHRpb25zKSB7XG4gICAgKHRoaXMub3B0aW9ucyBhcyBPZ2NGaWx0ZXJhYmxlRGF0YVNvdXJjZU9wdGlvbnMpLm9nY0ZpbHRlcnMgPSB2YWx1ZTtcbiAgfVxuICBnZXQgb2djRmlsdGVycygpOiBPZ2NGaWx0ZXJzT3B0aW9ucyB7XG4gICAgcmV0dXJuICh0aGlzLm9wdGlvbnMgYXMgT2djRmlsdGVyYWJsZURhdGFTb3VyY2VPcHRpb25zKS5vZ2NGaWx0ZXJzO1xuICB9XG5cbiAgc2V0IHRpbWVGaWx0ZXIodmFsdWU6IFRpbWVGaWx0ZXJPcHRpb25zKSB7XG4gICAgKHRoaXMub3B0aW9ucyBhcyBUaW1lRmlsdGVyYWJsZURhdGFTb3VyY2VPcHRpb25zKS50aW1lRmlsdGVyID0gdmFsdWU7XG4gIH1cbiAgZ2V0IHRpbWVGaWx0ZXIoKTogVGltZUZpbHRlck9wdGlvbnMge1xuICAgIHJldHVybiAodGhpcy5vcHRpb25zIGFzIFRpbWVGaWx0ZXJhYmxlRGF0YVNvdXJjZU9wdGlvbnMpLnRpbWVGaWx0ZXI7XG4gIH1cbiAgcmVhZG9ubHkgdGltZUZpbHRlciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRpbWVGaWx0ZXJPcHRpb25zPih1bmRlZmluZWQpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBvcHRpb25zOiBXTVNEYXRhU291cmNlT3B0aW9ucyxcbiAgICBwcm90ZWN0ZWQgd2ZzU2VydmljZTogV0ZTU2VydmljZVxuICApIHtcbiAgICBzdXBlcihvcHRpb25zKTtcbiAgICBjb25zdCBzb3VyY2VQYXJhbXM6IGFueSA9IG9wdGlvbnMucGFyYW1zO1xuXG4gICAgY29uc3QgZHBpID0gc291cmNlUGFyYW1zLkRQSSB8fCA5NjtcbiAgICBzb3VyY2VQYXJhbXMuRFBJID0gZHBpO1xuICAgIHNvdXJjZVBhcmFtcy5NQVBfUkVTT0xVVElPTiA9IGRwaTtcbiAgICBzb3VyY2VQYXJhbXMuRk9STUFUX09QVElPTlMgPSAnZHBpOicgKyBkcGk7XG5cbiAgICBpZiAob3B0aW9ucy5yZWZyZXNoSW50ZXJ2YWxTZWMgJiYgb3B0aW9ucy5yZWZyZXNoSW50ZXJ2YWxTZWMgPiAwKSB7XG4gICAgICBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgfSwgb3B0aW9ucy5yZWZyZXNoSW50ZXJ2YWxTZWMgKiAxMDAwKTsgLy8gQ29udmVydCBzZWNvbmRzIHRvIE1TXG4gICAgfVxuXG4gICAgbGV0IGZpZWxkTmFtZUdlb21ldHJ5ID0gZGVmYXVsdEZpZWxkTmFtZUdlb21ldHJ5O1xuXG4gICAgLy8gIyMjIyAgIFNUQVJUIGlmIHBhcmFtc1dGU1xuICAgIGlmIChvcHRpb25zLnBhcmFtc1dGUykge1xuICAgICAgY29uc3Qgd2ZzQ2hlY2t1cCA9IGNoZWNrV2ZzUGFyYW1zKG9wdGlvbnMsICd3bXMnKTtcbiAgICAgIE9iamVjdFV0aWxzLm1lcmdlRGVlcChvcHRpb25zLnBhcmFtc1dGUywgd2ZzQ2hlY2t1cC5wYXJhbXNXRlMpO1xuXG4gICAgICBmaWVsZE5hbWVHZW9tZXRyeSA9XG4gICAgICAgIG9wdGlvbnMucGFyYW1zV0ZTLmZpZWxkTmFtZUdlb21ldHJ5IHx8IGZpZWxkTmFtZUdlb21ldHJ5O1xuXG4gICAgICBvcHRpb25zLmRvd25sb2FkID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5kb3dubG9hZCwge1xuICAgICAgICBkeW5hbWljVXJsOiB0aGlzLmJ1aWxkRHluYW1pY0Rvd25sb2FkVXJsRnJvbVBhcmFtc1dGUyhvcHRpb25zKVxuICAgICAgfSk7XG4gICAgfSAvLyAgIyMjIyAgIEVORCAgaWYgcGFyYW1zV0ZTXG5cbiAgICBpZiAoIW9wdGlvbnMuc291cmNlRmllbGRzIHx8IG9wdGlvbnMuc291cmNlRmllbGRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgb3B0aW9ucy5zb3VyY2VGaWVsZHMgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9ucy5zb3VyY2VGaWVsZHMuZm9yRWFjaCgoc291cmNlRmllbGQpID0+IHtcbiAgICAgICAgc291cmNlRmllbGQuYWxpYXMgPSBzb3VyY2VGaWVsZC5hbGlhc1xuICAgICAgICAgID8gc291cmNlRmllbGQuYWxpYXNcbiAgICAgICAgICA6IHNvdXJjZUZpZWxkLm5hbWU7XG4gICAgICAgIC8vIHRvIGFsbG93IG9ubHkgYSBsaXN0IG9mIHNvdXJjZWZpZWxkIHdpdGggbmFtZXNcbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBpbml0T2djRmlsdGVycyA9IChvcHRpb25zIGFzIE9nY0ZpbHRlcmFibGVEYXRhU291cmNlT3B0aW9ucylcbiAgICAgIC5vZ2NGaWx0ZXJzO1xuICAgIGNvbnN0IG9nY0ZpbHRlcldyaXRlciA9IG5ldyBPZ2NGaWx0ZXJXcml0ZXIoKTtcblxuICAgIGlmICghaW5pdE9nY0ZpbHRlcnMpIHtcbiAgICAgIChvcHRpb25zIGFzIE9nY0ZpbHRlcmFibGVEYXRhU291cmNlT3B0aW9ucykub2djRmlsdGVycyA9XG4gICAgICAgIG9nY0ZpbHRlcldyaXRlci5kZWZpbmVPZ2NGaWx0ZXJzRGVmYXVsdE9wdGlvbnMoXG4gICAgICAgICAgaW5pdE9nY0ZpbHRlcnMsXG4gICAgICAgICAgZmllbGROYW1lR2VvbWV0cnksXG4gICAgICAgICAgJ3dtcydcbiAgICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5pdE9nY0ZpbHRlcnMuYWR2YW5jZWRPZ2NGaWx0ZXJzID1cbiAgICAgICAgaW5pdE9nY0ZpbHRlcnMucHVzaEJ1dHRvbnMgfHxcbiAgICAgICAgaW5pdE9nY0ZpbHRlcnMuY2hlY2tib3hlcyB8fFxuICAgICAgICBpbml0T2djRmlsdGVycy5yYWRpb0J1dHRvbnMgfHxcbiAgICAgICAgaW5pdE9nY0ZpbHRlcnMuc2VsZWN0IHx8XG4gICAgICAgIGluaXRPZ2NGaWx0ZXJzLmF1dG9jb21wbGV0ZVxuICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICA6IHRydWU7XG4gICAgICBpZiAoaW5pdE9nY0ZpbHRlcnMuYWR2YW5jZWRPZ2NGaWx0ZXJzICYmIGluaXRPZ2NGaWx0ZXJzLmZpbHRlcnMpIHtcbiAgICAgICAgY29uc3QgZmlsdGVyRHVyaW5nID0gaW5pdE9nY0ZpbHRlcnMuZmlsdGVycyBhcyBPZ2NGaWx0ZXJEdXJpbmdPcHRpb25zO1xuICAgICAgICBpZiAoZmlsdGVyRHVyaW5nLmNhbGVuZGFyTW9kZVllYXIpIHtcbiAgICAgICAgICBpbml0T2djRmlsdGVycy5hZHZhbmNlZE9nY0ZpbHRlcnMgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGluaXRPZ2NGaWx0ZXJzLnB1c2hCdXR0b25zKSB7XG4gICAgICAgIGluaXRPZ2NGaWx0ZXJzLnB1c2hCdXR0b25zLnNlbGVjdG9yVHlwZSA9ICdwdXNoQnV0dG9uJztcbiAgICAgIH1cbiAgICAgIGlmIChpbml0T2djRmlsdGVycy5jaGVja2JveGVzKSB7XG4gICAgICAgIGluaXRPZ2NGaWx0ZXJzLmNoZWNrYm94ZXMuc2VsZWN0b3JUeXBlID0gJ2NoZWNrYm94JztcbiAgICAgIH1cbiAgICAgIGlmIChpbml0T2djRmlsdGVycy5yYWRpb0J1dHRvbnMpIHtcbiAgICAgICAgaW5pdE9nY0ZpbHRlcnMucmFkaW9CdXR0b25zLnNlbGVjdG9yVHlwZSA9ICdyYWRpb0J1dHRvbic7XG4gICAgICB9XG4gICAgICBpZiAoaW5pdE9nY0ZpbHRlcnMuc2VsZWN0KSB7XG4gICAgICAgIGluaXRPZ2NGaWx0ZXJzLnNlbGVjdC5zZWxlY3RvclR5cGUgPSAnc2VsZWN0JztcbiAgICAgIH1cbiAgICAgIGlmIChpbml0T2djRmlsdGVycy5hdXRvY29tcGxldGUpIHtcbiAgICAgICAgaW5pdE9nY0ZpbHRlcnMuYXV0b2NvbXBsZXRlLnNlbGVjdG9yVHlwZSA9ICdhdXRvY29tcGxldGUnO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHNvdXJjZVBhcmFtcy5MQVlFUlMuc3BsaXQoJywnKS5sZW5ndGggPiAxICYmXG4gICAgICBpbml0T2djRmlsdGVycyAmJlxuICAgICAgaW5pdE9nY0ZpbHRlcnMuZW5hYmxlZFxuICAgICkge1xuICAgICAgY29uc29sZS5sb2coJyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKionKTtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAnQkUgQ0FSRUZVTEwsIFlPVVIgV01TIExBWUVSUyAoJyArXG4gICAgICAgICAgc291cmNlUGFyYW1zLkxBWUVSUyArXG4gICAgICAgICAgJykgTVVTVCBTSEFSRSBUSEUgU0FNRSBGSUVMRFMgVE8gQUxMT1cgb2djRmlsdGVycyBUTyBXT1JLICEhICdcbiAgICAgICk7XG4gICAgICBjb25zb2xlLmxvZygnKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKicpO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIG9wdGlvbnMucGFyYW1zV0ZTICYmXG4gICAgICBpbml0T2djRmlsdGVycyAmJlxuICAgICAgaW5pdE9nY0ZpbHRlcnMuZW5hYmxlZCAmJlxuICAgICAgaW5pdE9nY0ZpbHRlcnMuZWRpdGFibGUgJiZcbiAgICAgIChvcHRpb25zLnNvdXJjZUZpZWxkcyB8fCBbXSkuZmlsdGVyKChzZikgPT4gIXNmLnZhbHVlcykubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgdGhpcy53ZnNTZXJ2aWNlLmdldFNvdXJjZUZpZWxkc0Zyb21XRlMob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsdGVyUXVlcnlTdHJpbmcgPSBvZ2NGaWx0ZXJXcml0ZXIuaGFuZGxlT2djRmlsdGVyc0FwcGxpZWRWYWx1ZShcbiAgICAgIG9wdGlvbnMsXG4gICAgICBmaWVsZE5hbWVHZW9tZXRyeVxuICAgICk7XG4gICAgc291cmNlUGFyYW1zLkZJTFRFUiA9IGZpbHRlclF1ZXJ5U3RyaW5nO1xuICAgIHRoaXMub2wudXBkYXRlUGFyYW1zKHsgRklMVEVSOiBzb3VyY2VQYXJhbXMuRklMVEVSIH0pO1xuICAgIHRoaXMuc2V0T2djRmlsdGVycyhpbml0T2djRmlsdGVycywgdHJ1ZSk7XG5cbiAgICBjb25zdCB0aW1lRmlsdGVyYWJsZURhdGFTb3VyY2VPcHRpb25zID1cbiAgICAgIG9wdGlvbnMgYXMgVGltZUZpbHRlcmFibGVEYXRhU291cmNlT3B0aW9ucztcbiAgICBpZiAoXG4gICAgICB0aW1lRmlsdGVyYWJsZURhdGFTb3VyY2VPcHRpb25zPy50aW1lRmlsdGVyYWJsZSAmJlxuICAgICAgdGltZUZpbHRlcmFibGVEYXRhU291cmNlT3B0aW9ucz8udGltZUZpbHRlclxuICAgICkge1xuICAgICAgdGhpcy5zZXRUaW1lRmlsdGVyKHRpbWVGaWx0ZXJhYmxlRGF0YVNvdXJjZU9wdGlvbnMudGltZUZpbHRlciwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgcmVmcmVzaCgpIHtcbiAgICB0aGlzLm9sLnVwZGF0ZVBhcmFtcyh7IGlnb1JlZnJlc2g6IE1hdGgucmFuZG9tKCkgfSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRHluYW1pY0Rvd25sb2FkVXJsRnJvbVBhcmFtc1dGUyhhc1dGU0RhdGFTb3VyY2VPcHRpb25zKSB7XG4gICAgY29uc3QgcXVlcnlTdHJpbmdWYWx1ZXMgPSBmb3JtYXRXRlNRdWVyeVN0cmluZyhhc1dGU0RhdGFTb3VyY2VPcHRpb25zKTtcbiAgICBjb25zdCBkb3dubG9hZFVybCA9IHF1ZXJ5U3RyaW5nVmFsdWVzLmZpbmQoXG4gICAgICAoZikgPT4gZi5uYW1lID09PSAnZ2V0ZmVhdHVyZSdcbiAgICApLnZhbHVlO1xuICAgIHJldHVybiBkb3dubG9hZFVybDtcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVPbFNvdXJjZSgpOiBvbFNvdXJjZUltYWdlV01TIHtcbiAgICByZXR1cm4gbmV3IG9sU291cmNlSW1hZ2VXTVMoT2JqZWN0LmFzc2lnbih7IHJhdGlvOiAxIH0sIHRoaXMub3B0aW9ucykpO1xuICB9XG5cbiAgc2V0T2djRmlsdGVycyhvZ2NGaWx0ZXJzOiBPZ2NGaWx0ZXJzT3B0aW9ucywgdHJpZ2dlckV2ZW50ID0gZmFsc2UpIHtcbiAgICB0aGlzLm9nY0ZpbHRlcnMgPSBvZ2NGaWx0ZXJzO1xuICAgIGlmICh0cmlnZ2VyRXZlbnQpIHtcbiAgICAgIHRoaXMub2wubm90aWZ5KCdvZ2NGaWx0ZXJzJywgdGhpcy5vZ2NGaWx0ZXJzKTtcbiAgICB9XG4gIH1cblxuICBzZXRUaW1lRmlsdGVyKHRpbWVGaWx0ZXI6IFRpbWVGaWx0ZXJPcHRpb25zLCB0cmlnZ2VyRXZlbnQgPSBmYWxzZSkge1xuICAgIHRoaXMudGltZUZpbHRlciA9IHRpbWVGaWx0ZXI7XG4gICAgaWYgKHRyaWdnZXJFdmVudCkge1xuICAgICAgdGhpcy50aW1lRmlsdGVyJC5uZXh0KHRoaXMudGltZUZpbHRlcik7XG4gICAgICB0aGlzLm9sLm5vdGlmeSgndGltZUZpbHRlcicsIHRoaXMub2djRmlsdGVycyk7XG4gICAgfVxuICB9XG5cbiAgZ2V0TGVnZW5kKHN0eWxlPzogc3RyaW5nLCB2aWV3PzogTGVnZW5kTWFwVmlld09wdGlvbnMpOiBMZWdlbmRbXSB7XG4gICAgbGV0IGxlZ2VuZCA9IHN1cGVyLmdldExlZ2VuZCgpO1xuICAgIGlmIChsZWdlbmQubGVuZ3RoID4gMCAmJiBzdHlsZSA9PT0gdW5kZWZpbmVkICYmICF2aWV3Py5zY2FsZSkge1xuICAgICAgcmV0dXJuIGxlZ2VuZDtcbiAgICB9XG5cbiAgICBsZXQgY29udGVudERlcGVuZGVudCA9IGZhbHNlO1xuICAgIGxldCBwcm9qUGFyYW07XG5cbiAgICBpZiAoXG4gICAgICB2aWV3Py5zaXplICYmXG4gICAgICB2aWV3Py5leHRlbnQgJiZcbiAgICAgIHZpZXc/LnByb2plY3Rpb24gJiZcbiAgICAgIHRoaXMub3B0aW9ucy5jb250ZW50RGVwZW5kZW50TGVnZW5kXG4gICAgKSB7XG4gICAgICBwcm9qUGFyYW0gPVxuICAgICAgICB0aGlzLnBhcmFtcy5WRVJTSU9OID09PSAnMS4zLjAnIHx8IHRoaXMucGFyYW1zLlZFUlNJT04gPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gJ0NSUydcbiAgICAgICAgICA6ICdTUlMnO1xuICAgICAgY29udGVudERlcGVuZGVudCA9IHRydWU7XG4gICAgfVxuXG4gICAgY29uc3Qgc291cmNlUGFyYW1zID0gdGhpcy5wYXJhbXM7XG5cbiAgICBsZXQgbGF5ZXJzID0gW107XG4gICAgaWYgKHNvdXJjZVBhcmFtcy5MQVlFUlMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbGF5ZXJzID0gc291cmNlUGFyYW1zLkxBWUVSUy5zcGxpdCgnLCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGJhc2VVcmwgPSB0aGlzLm9wdGlvbnMudXJsLnJlcGxhY2UoL1xcPyQvLCAnJyk7XG4gICAgY29uc3QgcGFyYW1zID0gW1xuICAgICAgJ1JFUVVFU1Q9R2V0TGVnZW5kR3JhcGhpYycsXG4gICAgICAnU0VSVklDRT1XTVMnLFxuICAgICAgJ0ZPUk1BVD1pbWFnZS9wbmcnLFxuICAgICAgJ1NMRF9WRVJTSU9OPTEuMS4wJyxcbiAgICAgIGBWRVJTSU9OPSR7c291cmNlUGFyYW1zLlZFUlNJT04gfHwgJzEuMy4wJ31gXG4gICAgXTtcbiAgICBpZiAoc3R5bGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFyYW1zLnB1c2goYFNUWUxFPSR7c3R5bGV9YCk7XG4gICAgfVxuICAgIGlmICh2aWV3Py5zY2FsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYXJhbXMucHVzaChgU0NBTEU9JHt2aWV3LnNjYWxlfWApO1xuICAgIH1cbiAgICBpZiAoY29udGVudERlcGVuZGVudCkge1xuICAgICAgcGFyYW1zLnB1c2goYFdJRFRIPSR7dmlldy5zaXplWzBdfWApO1xuICAgICAgcGFyYW1zLnB1c2goYEhFSUdIVD0ke3ZpZXcuc2l6ZVsxXX1gKTtcbiAgICAgIHBhcmFtcy5wdXNoKGBCQk9YPSR7dmlldy5leHRlbnQuam9pbignLCcpfWApO1xuICAgICAgcGFyYW1zLnB1c2goYCR7cHJvalBhcmFtfT0ke3ZpZXcucHJvamVjdGlvbn1gKTtcbiAgICB9XG5cbiAgICBsZWdlbmQgPSBsYXllcnMubWFwKChsYXllcjogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBzZXBhcmF0b3IgPSBiYXNlVXJsLm1hdGNoKC9cXD8vKSA/ICcmJyA6ICc/JztcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVybDogYCR7YmFzZVVybH0ke3NlcGFyYXRvcn0ke3BhcmFtcy5qb2luKCcmJyl9JkxBWUVSPSR7bGF5ZXJ9YCxcbiAgICAgICAgdGl0bGU6IGxheWVycy5sZW5ndGggPiAxID8gbGF5ZXIgOiB1bmRlZmluZWQsXG4gICAgICAgIGN1cnJlbnRTdHlsZTogc3R5bGUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IChzdHlsZSBhcyBzdHJpbmcpXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGxlZ2VuZDtcbiAgfVxuXG4gIHB1YmxpYyBvblVud2F0Y2goKSB7XG4gICAgLy8gZW1wdHlcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVGaWx0ZXJhYmxlRGF0YVNvdXJjZSBleHRlbmRzIFdNU0RhdGFTb3VyY2Uge1xuICBvcHRpb25zOiBUaW1lRmlsdGVyYWJsZURhdGFTb3VyY2VPcHRpb25zO1xuICB0aW1lRmlsdGVyJDogQmVoYXZpb3JTdWJqZWN0PFRpbWVGaWx0ZXJPcHRpb25zPjtcbiAgc2V0VGltZUZpbHRlcihvZ2NGaWx0ZXJzOiBUaW1lRmlsdGVyT3B0aW9ucywgdHJpZ2dlckV2ZW50PzogYm9vbGVhbik7XG4gIGZpbHRlckJ5RGF0ZShkYXRlOiBEYXRlIHwgW0RhdGUsIERhdGVdKTtcbiAgZmlsdGVyQnlZZWFyKHllYXI6IHN0cmluZyB8IFtzdHJpbmcsIHN0cmluZ10pO1xufVxuIl19
227
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid21zLWRhdGFzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9kYXRhc291cmNlL3NoYXJlZC9kYXRhc291cmNlcy93bXMtZGF0YXNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTFDLE9BQU8sZ0JBQWdCLE1BQU0sb0JBQW9CLENBQUM7QUFFbEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV2QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFRcEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFPMUMsT0FBTyxFQUNMLGNBQWMsRUFDZCx3QkFBd0IsRUFDeEIsb0JBQW9CLEVBQ3JCLE1BQU0saUJBQWlCLENBQUM7QUFVekIsTUFBTSxPQUFPLGFBQWMsU0FBUSxVQUFVO0lBK0NsQztJQUNHO0lBN0NaLElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFhLENBQUM7SUFDcEMsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLE9BQVEsSUFBSSxDQUFDLE9BQWUsQ0FBQyxVQUFVO1lBQ3JDLENBQUMsQ0FBRSxJQUFJLENBQUMsT0FBZSxDQUFDLFVBQVU7WUFDbEMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztJQUNkLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDVixPQUFRLElBQUksQ0FBQyxPQUFlLENBQUMsUUFBUSxDQUFDO0lBQ3hDLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDakIsT0FBUSxJQUFJLENBQUMsT0FBZSxDQUFDLGVBQWU7WUFDMUMsQ0FBQyxDQUFFLElBQUksQ0FBQyxPQUFlLENBQUMsZUFBZTtZQUN2QyxDQUFDLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBSSxVQUFVLENBQUMsS0FBd0I7UUFDcEMsSUFBSSxDQUFDLE9BQTBDLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUN0RSxDQUFDO0lBQ0QsSUFBSSxVQUFVO1FBQ1osT0FBUSxJQUFJLENBQUMsT0FBMEMsQ0FBQyxVQUFVLENBQUM7SUFDckUsQ0FBQztJQUVELElBQUksVUFBVSxDQUFDLEtBQXdCO1FBQ3BDLElBQUksQ0FBQyxPQUEyQyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDdkUsQ0FBQztJQUNELElBQUksVUFBVTtRQUNaLE9BQVEsSUFBSSxDQUFDLE9BQTJDLENBQUMsVUFBVSxDQUFDO0lBQ3RFLENBQUM7SUFDUSxXQUFXLEdBQUcsSUFBSSxlQUFlLENBQW9CLFNBQVMsQ0FBQyxDQUFDO0lBRXpFLElBQUksZUFBZTtRQUNqQixNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsZUFBZSxDQUFDO1FBQzFDLE9BQU87WUFDTCxHQUFHLFdBQVc7WUFDZCxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07U0FDcEIsQ0FBQztJQUNKLENBQUM7SUFFRCxZQUNTLE9BQTZCLEVBQzFCLFVBQXNCO1FBRWhDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUhSLFlBQU8sR0FBUCxPQUFPLENBQXNCO1FBQzFCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFHaEMsTUFBTSxZQUFZLEdBQVEsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUV6QyxNQUFNLEdBQUcsR0FBRyxZQUFZLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQztRQUNuQyxZQUFZLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUN2QixZQUFZLENBQUMsY0FBYyxHQUFHLEdBQUcsQ0FBQztRQUNsQyxZQUFZLENBQUMsY0FBYyxHQUFHLE1BQU0sR0FBRyxHQUFHLENBQUM7UUFFM0MsSUFBSSxPQUFPLENBQUMsa0JBQWtCLElBQUksT0FBTyxDQUFDLGtCQUFrQixHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2pFLFdBQVcsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2YsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLENBQUMsRUFBRSxPQUFPLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyx3QkFBd0I7UUFDakUsQ0FBQztRQUVELElBQUksaUJBQWlCLEdBQUcsd0JBQXdCLENBQUM7UUFFakQsNEJBQTRCO1FBQzVCLElBQUksT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3RCLE1BQU0sVUFBVSxHQUFHLGNBQWMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDbEQsV0FBVyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUUvRCxpQkFBaUI7Z0JBQ2YsT0FBTyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsSUFBSSxpQkFBaUIsQ0FBQztZQUUzRCxPQUFPLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUU7Z0JBQ3JELFVBQVUsRUFBRSxJQUFJLENBQUMsb0NBQW9DLENBQUMsT0FBTyxDQUFDO2FBQy9ELENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyw0QkFBNEI7UUFFOUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDL0QsT0FBTyxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDNUIsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFO2dCQUMzQyxXQUFXLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxLQUFLO29CQUNuQyxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUs7b0JBQ25CLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO2dCQUNyQixpREFBaUQ7WUFDbkQsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsTUFBTSxjQUFjLEdBQUksT0FBMEM7YUFDL0QsVUFBVSxDQUFDO1FBQ2QsTUFBTSxlQUFlLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUU5QyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDbkIsT0FBMEMsQ0FBQyxVQUFVO2dCQUNwRCxlQUFlLENBQUMsOEJBQThCLENBQzVDLGNBQWMsRUFDZCxpQkFBaUIsRUFDakIsS0FBSyxDQUNOLENBQUM7UUFDTixDQUFDO2FBQU0sQ0FBQztZQUNOLGNBQWMsQ0FBQyxrQkFBa0I7Z0JBQy9CLGNBQWMsQ0FBQyxXQUFXO29CQUMxQixjQUFjLENBQUMsVUFBVTtvQkFDekIsY0FBYyxDQUFDLFlBQVk7b0JBQzNCLGNBQWMsQ0FBQyxNQUFNO29CQUNyQixjQUFjLENBQUMsWUFBWTtvQkFDekIsQ0FBQyxDQUFDLEtBQUs7b0JBQ1AsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNYLElBQUksY0FBYyxDQUFDLGtCQUFrQixJQUFJLGNBQWMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDaEUsTUFBTSxZQUFZLEdBQUcsY0FBYyxDQUFDLE9BQWlDLENBQUM7Z0JBQ3RFLElBQUksWUFBWSxDQUFDLGdCQUFnQixFQUFFLENBQUM7b0JBQ2xDLGNBQWMsQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7Z0JBQzVDLENBQUM7WUFDSCxDQUFDO1lBQ0QsSUFBSSxjQUFjLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQy9CLGNBQWMsQ0FBQyxXQUFXLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztZQUN6RCxDQUFDO1lBQ0QsSUFBSSxjQUFjLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQzlCLGNBQWMsQ0FBQyxVQUFVLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQztZQUN0RCxDQUFDO1lBQ0QsSUFBSSxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ2hDLGNBQWMsQ0FBQyxZQUFZLENBQUMsWUFBWSxHQUFHLGFBQWEsQ0FBQztZQUMzRCxDQUFDO1lBQ0QsSUFBSSxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQzFCLGNBQWMsQ0FBQyxNQUFNLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQztZQUNoRCxDQUFDO1lBQ0QsSUFBSSxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ2hDLGNBQWMsQ0FBQyxZQUFZLENBQUMsWUFBWSxHQUFHLGNBQWMsQ0FBQztZQUM1RCxDQUFDO1FBQ0gsQ0FBQztRQUVELElBQ0UsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUM7WUFDekMsY0FBYztZQUNkLGNBQWMsQ0FBQyxPQUFPLEVBQ3RCLENBQUM7WUFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7WUFDL0MsT0FBTyxDQUFDLEdBQUcsQ0FDVCxnQ0FBZ0M7Z0JBQzlCLFlBQVksQ0FBQyxNQUFNO2dCQUNuQiw4REFBOEQsQ0FDakUsQ0FBQztZQUNGLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUNBQWlDLENBQUMsQ0FBQztRQUNqRCxDQUFDO1FBRUQsSUFDRSxPQUFPLENBQUMsU0FBUztZQUNqQixjQUFjO1lBQ2QsY0FBYyxDQUFDLE9BQU87WUFDdEIsY0FBYyxDQUFDLFFBQVE7WUFDdkIsQ0FBQyxPQUFPLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFDbEUsQ0FBQztZQUNELElBQUksQ0FBQyxVQUFVLENBQUMsc0JBQXNCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUVELE1BQU0saUJBQWlCLEdBQUcsZUFBZSxDQUFDLDRCQUE0QixDQUNwRSxPQUFPLEVBQ1AsaUJBQWlCLENBQ2xCLENBQUM7UUFDRixZQUFZLENBQUMsTUFBTSxHQUFHLGlCQUFpQixDQUFDO1FBQ3hDLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRXpDLE1BQU0sK0JBQStCLEdBQ25DLE9BQTBDLENBQUM7UUFDN0MsSUFDRSwrQkFBK0IsRUFBRSxjQUFjO1lBQy9DLCtCQUErQixFQUFFLFVBQVUsRUFDM0MsQ0FBQztZQUNELElBQUksQ0FBQyxhQUFhLENBQUMsK0JBQStCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3ZFLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVPLG9DQUFvQyxDQUFDLHNCQUFzQjtRQUNqRSxNQUFNLGlCQUFpQixHQUFHLG9CQUFvQixDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDdkUsTUFBTSxXQUFXLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUN4QyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxZQUFZLENBQy9CLENBQUMsS0FBSyxDQUFDO1FBQ1IsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVTLGNBQWM7UUFDdEIsT0FBTyxJQUFJLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVELGFBQWEsQ0FBQyxVQUE2QixFQUFFLFlBQVksR0FBRyxLQUFLO1FBQy9ELElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNoRCxDQUFDO0lBQ0gsQ0FBQztJQUVELGFBQWEsQ0FBQyxVQUE2QixFQUFFLFlBQVksR0FBRyxLQUFLO1FBQy9ELElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDaEQsQ0FBQztJQUNILENBQUM7SUFFRCxTQUFTLENBQUMsS0FBYyxFQUFFLElBQTJCO1FBQ25ELElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUMvQixJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDN0QsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztRQUVELElBQUksZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQzdCLElBQUksU0FBUyxDQUFDO1FBRWQsSUFDRSxJQUFJLEVBQUUsSUFBSTtZQUNWLElBQUksRUFBRSxNQUFNO1lBQ1osSUFBSSxFQUFFLFVBQVU7WUFDaEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsRUFDbkMsQ0FBQztZQUNELFNBQVM7Z0JBQ1AsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEtBQUssT0FBTyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxLQUFLLFNBQVM7b0JBQ2xFLENBQUMsQ0FBQyxLQUFLO29CQUNQLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFDWixnQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFDMUIsQ0FBQztRQUVELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFFakMsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN0QyxNQUFNLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUMsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDcEQsTUFBTSxNQUFNLEdBQUc7WUFDYiwwQkFBMEI7WUFDMUIsYUFBYTtZQUNiLGtCQUFrQjtZQUNsQixtQkFBbUI7WUFDbkIsV0FBVyxZQUFZLENBQUMsT0FBTyxJQUFJLE9BQU8sRUFBRTtTQUM3QyxDQUFDO1FBQ0YsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDeEIsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDaEMsQ0FBQztRQUNELElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM5QixNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDckMsQ0FBQztRQUNELElBQUksZ0JBQWdCLEVBQUUsQ0FBQztZQUNyQixNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDckMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3RDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDN0MsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUNqRCxDQUFDO1FBRUQsTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFhLEVBQUUsRUFBRTtZQUNwQyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUNsRCxPQUFPO2dCQUNMLEdBQUcsRUFBRSxHQUFHLE9BQU8sR0FBRyxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxLQUFLLEVBQUU7Z0JBQy9ELEtBQUssRUFBRSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTO2dCQUM1QyxZQUFZLEVBQUUsS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBRSxLQUFnQjthQUNsRSxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRU0sU0FBUztRQUNkLFFBQVE7SUFDVixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYmplY3RVdGlscyB9IGZyb20gJ0BpZ28yL3V0aWxzJztcblxuaW1wb3J0IG9sU291cmNlSW1hZ2VXTVMgZnJvbSAnb2wvc291cmNlL0ltYWdlV01TJztcblxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IE9nY0ZpbHRlcldyaXRlciB9IGZyb20gJy4uLy4uLy4uL2ZpbHRlci9zaGFyZWQvb2djLWZpbHRlcic7XG5pbXBvcnQge1xuICBPZ2NGaWx0ZXJEdXJpbmdPcHRpb25zLFxuICBPZ2NGaWx0ZXJhYmxlRGF0YVNvdXJjZU9wdGlvbnMsXG4gIE9nY0ZpbHRlcnNPcHRpb25zXG59IGZyb20gJy4uLy4uLy4uL2ZpbHRlci9zaGFyZWQvb2djLWZpbHRlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVGltZUZpbHRlck9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi9maWx0ZXIvc2hhcmVkL3RpbWUtZmlsdGVyLmludGVyZmFjZSc7XG5pbXBvcnQgeyBMZWdlbmRNYXBWaWV3T3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uL2xheWVyL3NoYXJlZC9sYXllcnMvbGVnZW5kLmludGVyZmFjZSc7XG5pbXBvcnQgeyBRdWVyeUh0bWxUYXJnZXQgfSBmcm9tICcuLi8uLi8uLi9xdWVyeS9zaGFyZWQvcXVlcnkuZW51bXMnO1xuaW1wb3J0IHsgRGF0YVNvdXJjZSB9IGZyb20gJy4vZGF0YXNvdXJjZSc7XG5pbXBvcnQgeyBMZWdlbmQgfSBmcm9tICcuL2RhdGFzb3VyY2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IFdGU1NlcnZpY2UgfSBmcm9tICcuL3dmcy5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIFRpbWVGaWx0ZXJhYmxlRGF0YVNvdXJjZU9wdGlvbnMsXG4gIFdNU0RhdGFTb3VyY2VPcHRpb25zXG59IGZyb20gJy4vd21zLWRhdGFzb3VyY2UuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIGNoZWNrV2ZzUGFyYW1zLFxuICBkZWZhdWx0RmllbGROYW1lR2VvbWV0cnksXG4gIGZvcm1hdFdGU1F1ZXJ5U3RyaW5nXG59IGZyb20gJy4vd21zLXdmcy51dGlscyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGltZUZpbHRlcmFibGVEYXRhU291cmNlIGV4dGVuZHMgV01TRGF0YVNvdXJjZSB7XG4gIG9wdGlvbnM6IFRpbWVGaWx0ZXJhYmxlRGF0YVNvdXJjZU9wdGlvbnM7XG4gIHRpbWVGaWx0ZXIkOiBCZWhhdmlvclN1YmplY3Q8VGltZUZpbHRlck9wdGlvbnM+O1xuICBzZXRUaW1lRmlsdGVyKG9nY0ZpbHRlcnM6IFRpbWVGaWx0ZXJPcHRpb25zLCB0cmlnZ2VyRXZlbnQ/OiBib29sZWFuKTtcbiAgZmlsdGVyQnlEYXRlKGRhdGU6IERhdGUgfCBbRGF0ZSwgRGF0ZV0pO1xuICBmaWx0ZXJCeVllYXIoeWVhcjogc3RyaW5nIHwgW3N0cmluZywgc3RyaW5nXSk7XG59XG5cbmV4cG9ydCBjbGFzcyBXTVNEYXRhU291cmNlIGV4dGVuZHMgRGF0YVNvdXJjZSB7XG4gIGRlY2xhcmUgcHVibGljIG9sOiBvbFNvdXJjZUltYWdlV01TO1xuXG4gIGdldCBwYXJhbXMoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnBhcmFtcyBhcyBhbnk7XG4gIH1cblxuICBnZXQgcXVlcnlUaXRsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAodGhpcy5vcHRpb25zIGFzIGFueSkucXVlcnlUaXRsZVxuICAgICAgPyAodGhpcy5vcHRpb25zIGFzIGFueSkucXVlcnlUaXRsZVxuICAgICAgOiAndGl0bGUnO1xuICB9XG5cbiAgZ2V0IG1hcExhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICh0aGlzLm9wdGlvbnMgYXMgYW55KS5tYXBMYWJlbDtcbiAgfVxuXG4gIGdldCBxdWVyeUh0bWxUYXJnZXQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKHRoaXMub3B0aW9ucyBhcyBhbnkpLnF1ZXJ5SHRtbFRhcmdldFxuICAgICAgPyAodGhpcy5vcHRpb25zIGFzIGFueSkucXVlcnlIdG1sVGFyZ2V0XG4gICAgICA6IFF1ZXJ5SHRtbFRhcmdldC5CTEFOSztcbiAgfVxuXG4gIHNldCBvZ2NGaWx0ZXJzKHZhbHVlOiBPZ2NGaWx0ZXJzT3B0aW9ucykge1xuICAgICh0aGlzLm9wdGlvbnMgYXMgT2djRmlsdGVyYWJsZURhdGFTb3VyY2VPcHRpb25zKS5vZ2NGaWx0ZXJzID0gdmFsdWU7XG4gIH1cbiAgZ2V0IG9nY0ZpbHRlcnMoKTogT2djRmlsdGVyc09wdGlvbnMge1xuICAgIHJldHVybiAodGhpcy5vcHRpb25zIGFzIE9nY0ZpbHRlcmFibGVEYXRhU291cmNlT3B0aW9ucykub2djRmlsdGVycztcbiAgfVxuXG4gIHNldCB0aW1lRmlsdGVyKHZhbHVlOiBUaW1lRmlsdGVyT3B0aW9ucykge1xuICAgICh0aGlzLm9wdGlvbnMgYXMgVGltZUZpbHRlcmFibGVEYXRhU291cmNlT3B0aW9ucykudGltZUZpbHRlciA9IHZhbHVlO1xuICB9XG4gIGdldCB0aW1lRmlsdGVyKCk6IFRpbWVGaWx0ZXJPcHRpb25zIHtcbiAgICByZXR1cm4gKHRoaXMub3B0aW9ucyBhcyBUaW1lRmlsdGVyYWJsZURhdGFTb3VyY2VPcHRpb25zKS50aW1lRmlsdGVyO1xuICB9XG4gIHJlYWRvbmx5IHRpbWVGaWx0ZXIkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUaW1lRmlsdGVyT3B0aW9ucz4odW5kZWZpbmVkKTtcblxuICBnZXQgc2F2ZWFibGVPcHRpb25zKCk6IFBhcnRpYWw8V01TRGF0YVNvdXJjZU9wdGlvbnM+IHtcbiAgICBjb25zdCBiYXNlT3B0aW9ucyA9IHN1cGVyLnNhdmVhYmxlT3B0aW9ucztcbiAgICByZXR1cm4ge1xuICAgICAgLi4uYmFzZU9wdGlvbnMsXG4gICAgICBwYXJhbXM6IHRoaXMucGFyYW1zXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBvcHRpb25zOiBXTVNEYXRhU291cmNlT3B0aW9ucyxcbiAgICBwcm90ZWN0ZWQgd2ZzU2VydmljZTogV0ZTU2VydmljZVxuICApIHtcbiAgICBzdXBlcihvcHRpb25zKTtcbiAgICBjb25zdCBzb3VyY2VQYXJhbXM6IGFueSA9IG9wdGlvbnMucGFyYW1zO1xuXG4gICAgY29uc3QgZHBpID0gc291cmNlUGFyYW1zLkRQSSB8fCA5NjtcbiAgICBzb3VyY2VQYXJhbXMuRFBJID0gZHBpO1xuICAgIHNvdXJjZVBhcmFtcy5NQVBfUkVTT0xVVElPTiA9IGRwaTtcbiAgICBzb3VyY2VQYXJhbXMuRk9STUFUX09QVElPTlMgPSAnZHBpOicgKyBkcGk7XG5cbiAgICBpZiAob3B0aW9ucy5yZWZyZXNoSW50ZXJ2YWxTZWMgJiYgb3B0aW9ucy5yZWZyZXNoSW50ZXJ2YWxTZWMgPiAwKSB7XG4gICAgICBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgfSwgb3B0aW9ucy5yZWZyZXNoSW50ZXJ2YWxTZWMgKiAxMDAwKTsgLy8gQ29udmVydCBzZWNvbmRzIHRvIE1TXG4gICAgfVxuXG4gICAgbGV0IGZpZWxkTmFtZUdlb21ldHJ5ID0gZGVmYXVsdEZpZWxkTmFtZUdlb21ldHJ5O1xuXG4gICAgLy8gIyMjIyAgIFNUQVJUIGlmIHBhcmFtc1dGU1xuICAgIGlmIChvcHRpb25zLnBhcmFtc1dGUykge1xuICAgICAgY29uc3Qgd2ZzQ2hlY2t1cCA9IGNoZWNrV2ZzUGFyYW1zKG9wdGlvbnMsICd3bXMnKTtcbiAgICAgIE9iamVjdFV0aWxzLm1lcmdlRGVlcChvcHRpb25zLnBhcmFtc1dGUywgd2ZzQ2hlY2t1cC5wYXJhbXNXRlMpO1xuXG4gICAgICBmaWVsZE5hbWVHZW9tZXRyeSA9XG4gICAgICAgIG9wdGlvbnMucGFyYW1zV0ZTLmZpZWxkTmFtZUdlb21ldHJ5IHx8IGZpZWxkTmFtZUdlb21ldHJ5O1xuXG4gICAgICBvcHRpb25zLmRvd25sb2FkID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5kb3dubG9hZCwge1xuICAgICAgICBkeW5hbWljVXJsOiB0aGlzLmJ1aWxkRHluYW1pY0Rvd25sb2FkVXJsRnJvbVBhcmFtc1dGUyhvcHRpb25zKVxuICAgICAgfSk7XG4gICAgfSAvLyAgIyMjIyAgIEVORCAgaWYgcGFyYW1zV0ZTXG5cbiAgICBpZiAoIW9wdGlvbnMuc291cmNlRmllbGRzIHx8IG9wdGlvbnMuc291cmNlRmllbGRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgb3B0aW9ucy5zb3VyY2VGaWVsZHMgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9ucy5zb3VyY2VGaWVsZHMuZm9yRWFjaCgoc291cmNlRmllbGQpID0+IHtcbiAgICAgICAgc291cmNlRmllbGQuYWxpYXMgPSBzb3VyY2VGaWVsZC5hbGlhc1xuICAgICAgICAgID8gc291cmNlRmllbGQuYWxpYXNcbiAgICAgICAgICA6IHNvdXJjZUZpZWxkLm5hbWU7XG4gICAgICAgIC8vIHRvIGFsbG93IG9ubHkgYSBsaXN0IG9mIHNvdXJjZWZpZWxkIHdpdGggbmFtZXNcbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBpbml0T2djRmlsdGVycyA9IChvcHRpb25zIGFzIE9nY0ZpbHRlcmFibGVEYXRhU291cmNlT3B0aW9ucylcbiAgICAgIC5vZ2NGaWx0ZXJzO1xuICAgIGNvbnN0IG9nY0ZpbHRlcldyaXRlciA9IG5ldyBPZ2NGaWx0ZXJXcml0ZXIoKTtcblxuICAgIGlmICghaW5pdE9nY0ZpbHRlcnMpIHtcbiAgICAgIChvcHRpb25zIGFzIE9nY0ZpbHRlcmFibGVEYXRhU291cmNlT3B0aW9ucykub2djRmlsdGVycyA9XG4gICAgICAgIG9nY0ZpbHRlcldyaXRlci5kZWZpbmVPZ2NGaWx0ZXJzRGVmYXVsdE9wdGlvbnMoXG4gICAgICAgICAgaW5pdE9nY0ZpbHRlcnMsXG4gICAgICAgICAgZmllbGROYW1lR2VvbWV0cnksXG4gICAgICAgICAgJ3dtcydcbiAgICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5pdE9nY0ZpbHRlcnMuYWR2YW5jZWRPZ2NGaWx0ZXJzID1cbiAgICAgICAgaW5pdE9nY0ZpbHRlcnMucHVzaEJ1dHRvbnMgfHxcbiAgICAgICAgaW5pdE9nY0ZpbHRlcnMuY2hlY2tib3hlcyB8fFxuICAgICAgICBpbml0T2djRmlsdGVycy5yYWRpb0J1dHRvbnMgfHxcbiAgICAgICAgaW5pdE9nY0ZpbHRlcnMuc2VsZWN0IHx8XG4gICAgICAgIGluaXRPZ2NGaWx0ZXJzLmF1dG9jb21wbGV0ZVxuICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICA6IHRydWU7XG4gICAgICBpZiAoaW5pdE9nY0ZpbHRlcnMuYWR2YW5jZWRPZ2NGaWx0ZXJzICYmIGluaXRPZ2NGaWx0ZXJzLmZpbHRlcnMpIHtcbiAgICAgICAgY29uc3QgZmlsdGVyRHVyaW5nID0gaW5pdE9nY0ZpbHRlcnMuZmlsdGVycyBhcyBPZ2NGaWx0ZXJEdXJpbmdPcHRpb25zO1xuICAgICAgICBpZiAoZmlsdGVyRHVyaW5nLmNhbGVuZGFyTW9kZVllYXIpIHtcbiAgICAgICAgICBpbml0T2djRmlsdGVycy5hZHZhbmNlZE9nY0ZpbHRlcnMgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGluaXRPZ2NGaWx0ZXJzLnB1c2hCdXR0b25zKSB7XG4gICAgICAgIGluaXRPZ2NGaWx0ZXJzLnB1c2hCdXR0b25zLnNlbGVjdG9yVHlwZSA9ICdwdXNoQnV0dG9uJztcbiAgICAgIH1cbiAgICAgIGlmIChpbml0T2djRmlsdGVycy5jaGVja2JveGVzKSB7XG4gICAgICAgIGluaXRPZ2NGaWx0ZXJzLmNoZWNrYm94ZXMuc2VsZWN0b3JUeXBlID0gJ2NoZWNrYm94JztcbiAgICAgIH1cbiAgICAgIGlmIChpbml0T2djRmlsdGVycy5yYWRpb0J1dHRvbnMpIHtcbiAgICAgICAgaW5pdE9nY0ZpbHRlcnMucmFkaW9CdXR0b25zLnNlbGVjdG9yVHlwZSA9ICdyYWRpb0J1dHRvbic7XG4gICAgICB9XG4gICAgICBpZiAoaW5pdE9nY0ZpbHRlcnMuc2VsZWN0KSB7XG4gICAgICAgIGluaXRPZ2NGaWx0ZXJzLnNlbGVjdC5zZWxlY3RvclR5cGUgPSAnc2VsZWN0JztcbiAgICAgIH1cbiAgICAgIGlmIChpbml0T2djRmlsdGVycy5hdXRvY29tcGxldGUpIHtcbiAgICAgICAgaW5pdE9nY0ZpbHRlcnMuYXV0b2NvbXBsZXRlLnNlbGVjdG9yVHlwZSA9ICdhdXRvY29tcGxldGUnO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHNvdXJjZVBhcmFtcy5MQVlFUlMuc3BsaXQoJywnKS5sZW5ndGggPiAxICYmXG4gICAgICBpbml0T2djRmlsdGVycyAmJlxuICAgICAgaW5pdE9nY0ZpbHRlcnMuZW5hYmxlZFxuICAgICkge1xuICAgICAgY29uc29sZS5sb2coJyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKionKTtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAnQkUgQ0FSRUZVTEwsIFlPVVIgV01TIExBWUVSUyAoJyArXG4gICAgICAgICAgc291cmNlUGFyYW1zLkxBWUVSUyArXG4gICAgICAgICAgJykgTVVTVCBTSEFSRSBUSEUgU0FNRSBGSUVMRFMgVE8gQUxMT1cgb2djRmlsdGVycyBUTyBXT1JLICEhICdcbiAgICAgICk7XG4gICAgICBjb25zb2xlLmxvZygnKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKicpO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIG9wdGlvbnMucGFyYW1zV0ZTICYmXG4gICAgICBpbml0T2djRmlsdGVycyAmJlxuICAgICAgaW5pdE9nY0ZpbHRlcnMuZW5hYmxlZCAmJlxuICAgICAgaW5pdE9nY0ZpbHRlcnMuZWRpdGFibGUgJiZcbiAgICAgIChvcHRpb25zLnNvdXJjZUZpZWxkcyB8fCBbXSkuZmlsdGVyKChzZikgPT4gIXNmLnZhbHVlcykubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgdGhpcy53ZnNTZXJ2aWNlLmdldFNvdXJjZUZpZWxkc0Zyb21XRlMob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsdGVyUXVlcnlTdHJpbmcgPSBvZ2NGaWx0ZXJXcml0ZXIuaGFuZGxlT2djRmlsdGVyc0FwcGxpZWRWYWx1ZShcbiAgICAgIG9wdGlvbnMsXG4gICAgICBmaWVsZE5hbWVHZW9tZXRyeVxuICAgICk7XG4gICAgc291cmNlUGFyYW1zLkZJTFRFUiA9IGZpbHRlclF1ZXJ5U3RyaW5nO1xuICAgIHRoaXMub2wudXBkYXRlUGFyYW1zKHsgRklMVEVSOiBzb3VyY2VQYXJhbXMuRklMVEVSIH0pO1xuICAgIHRoaXMuc2V0T2djRmlsdGVycyhpbml0T2djRmlsdGVycywgdHJ1ZSk7XG5cbiAgICBjb25zdCB0aW1lRmlsdGVyYWJsZURhdGFTb3VyY2VPcHRpb25zID1cbiAgICAgIG9wdGlvbnMgYXMgVGltZUZpbHRlcmFibGVEYXRhU291cmNlT3B0aW9ucztcbiAgICBpZiAoXG4gICAgICB0aW1lRmlsdGVyYWJsZURhdGFTb3VyY2VPcHRpb25zPy50aW1lRmlsdGVyYWJsZSAmJlxuICAgICAgdGltZUZpbHRlcmFibGVEYXRhU291cmNlT3B0aW9ucz8udGltZUZpbHRlclxuICAgICkge1xuICAgICAgdGhpcy5zZXRUaW1lRmlsdGVyKHRpbWVGaWx0ZXJhYmxlRGF0YVNvdXJjZU9wdGlvbnMudGltZUZpbHRlciwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgcmVmcmVzaCgpIHtcbiAgICB0aGlzLm9sLnVwZGF0ZVBhcmFtcyh7IGlnb1JlZnJlc2g6IE1hdGgucmFuZG9tKCkgfSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRHluYW1pY0Rvd25sb2FkVXJsRnJvbVBhcmFtc1dGUyhhc1dGU0RhdGFTb3VyY2VPcHRpb25zKSB7XG4gICAgY29uc3QgcXVlcnlTdHJpbmdWYWx1ZXMgPSBmb3JtYXRXRlNRdWVyeVN0cmluZyhhc1dGU0RhdGFTb3VyY2VPcHRpb25zKTtcbiAgICBjb25zdCBkb3dubG9hZFVybCA9IHF1ZXJ5U3RyaW5nVmFsdWVzLmZpbmQoXG4gICAgICAoZikgPT4gZi5uYW1lID09PSAnZ2V0ZmVhdHVyZSdcbiAgICApLnZhbHVlO1xuICAgIHJldHVybiBkb3dubG9hZFVybDtcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVPbFNvdXJjZSgpOiBvbFNvdXJjZUltYWdlV01TIHtcbiAgICByZXR1cm4gbmV3IG9sU291cmNlSW1hZ2VXTVMoT2JqZWN0LmFzc2lnbih7IHJhdGlvOiAxIH0sIHRoaXMub3B0aW9ucykpO1xuICB9XG5cbiAgc2V0T2djRmlsdGVycyhvZ2NGaWx0ZXJzOiBPZ2NGaWx0ZXJzT3B0aW9ucywgdHJpZ2dlckV2ZW50ID0gZmFsc2UpIHtcbiAgICB0aGlzLm9nY0ZpbHRlcnMgPSBvZ2NGaWx0ZXJzO1xuICAgIGlmICh0cmlnZ2VyRXZlbnQpIHtcbiAgICAgIHRoaXMub2wubm90aWZ5KCdvZ2NGaWx0ZXJzJywgdGhpcy5vZ2NGaWx0ZXJzKTtcbiAgICB9XG4gIH1cblxuICBzZXRUaW1lRmlsdGVyKHRpbWVGaWx0ZXI6IFRpbWVGaWx0ZXJPcHRpb25zLCB0cmlnZ2VyRXZlbnQgPSBmYWxzZSkge1xuICAgIHRoaXMudGltZUZpbHRlciA9IHRpbWVGaWx0ZXI7XG4gICAgaWYgKHRyaWdnZXJFdmVudCkge1xuICAgICAgdGhpcy50aW1lRmlsdGVyJC5uZXh0KHRoaXMudGltZUZpbHRlcik7XG4gICAgICB0aGlzLm9sLm5vdGlmeSgndGltZUZpbHRlcicsIHRoaXMub2djRmlsdGVycyk7XG4gICAgfVxuICB9XG5cbiAgZ2V0TGVnZW5kKHN0eWxlPzogc3RyaW5nLCB2aWV3PzogTGVnZW5kTWFwVmlld09wdGlvbnMpOiBMZWdlbmRbXSB7XG4gICAgbGV0IGxlZ2VuZCA9IHN1cGVyLmdldExlZ2VuZCgpO1xuICAgIGlmIChsZWdlbmQubGVuZ3RoID4gMCAmJiBzdHlsZSA9PT0gdW5kZWZpbmVkICYmICF2aWV3Py5zY2FsZSkge1xuICAgICAgcmV0dXJuIGxlZ2VuZDtcbiAgICB9XG5cbiAgICBsZXQgY29udGVudERlcGVuZGVudCA9IGZhbHNlO1xuICAgIGxldCBwcm9qUGFyYW07XG5cbiAgICBpZiAoXG4gICAgICB2aWV3Py5zaXplICYmXG4gICAgICB2aWV3Py5leHRlbnQgJiZcbiAgICAgIHZpZXc/LnByb2plY3Rpb24gJiZcbiAgICAgIHRoaXMub3B0aW9ucy5jb250ZW50RGVwZW5kZW50TGVnZW5kXG4gICAgKSB7XG4gICAgICBwcm9qUGFyYW0gPVxuICAgICAgICB0aGlzLnBhcmFtcy5WRVJTSU9OID09PSAnMS4zLjAnIHx8IHRoaXMucGFyYW1zLlZFUlNJT04gPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gJ0NSUydcbiAgICAgICAgICA6ICdTUlMnO1xuICAgICAgY29udGVudERlcGVuZGVudCA9IHRydWU7XG4gICAgfVxuXG4gICAgY29uc3Qgc291cmNlUGFyYW1zID0gdGhpcy5wYXJhbXM7XG5cbiAgICBsZXQgbGF5ZXJzID0gW107XG4gICAgaWYgKHNvdXJjZVBhcmFtcy5MQVlFUlMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbGF5ZXJzID0gc291cmNlUGFyYW1zLkxBWUVSUy5zcGxpdCgnLCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGJhc2VVcmwgPSB0aGlzLm9wdGlvbnMudXJsLnJlcGxhY2UoL1xcPyQvLCAnJyk7XG4gICAgY29uc3QgcGFyYW1zID0gW1xuICAgICAgJ1JFUVVFU1Q9R2V0TGVnZW5kR3JhcGhpYycsXG4gICAgICAnU0VSVklDRT1XTVMnLFxuICAgICAgJ0ZPUk1BVD1pbWFnZS9wbmcnLFxuICAgICAgJ1NMRF9WRVJTSU9OPTEuMS4wJyxcbiAgICAgIGBWRVJTSU9OPSR7c291cmNlUGFyYW1zLlZFUlNJT04gfHwgJzEuMy4wJ31gXG4gICAgXTtcbiAgICBpZiAoc3R5bGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFyYW1zLnB1c2goYFNUWUxFPSR7c3R5bGV9YCk7XG4gICAgfVxuICAgIGlmICh2aWV3Py5zY2FsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYXJhbXMucHVzaChgU0NBTEU9JHt2aWV3LnNjYWxlfWApO1xuICAgIH1cbiAgICBpZiAoY29udGVudERlcGVuZGVudCkge1xuICAgICAgcGFyYW1zLnB1c2goYFdJRFRIPSR7dmlldy5zaXplWzBdfWApO1xuICAgICAgcGFyYW1zLnB1c2goYEhFSUdIVD0ke3ZpZXcuc2l6ZVsxXX1gKTtcbiAgICAgIHBhcmFtcy5wdXNoKGBCQk9YPSR7dmlldy5leHRlbnQuam9pbignLCcpfWApO1xuICAgICAgcGFyYW1zLnB1c2goYCR7cHJvalBhcmFtfT0ke3ZpZXcucHJvamVjdGlvbn1gKTtcbiAgICB9XG5cbiAgICBsZWdlbmQgPSBsYXllcnMubWFwKChsYXllcjogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBzZXBhcmF0b3IgPSBiYXNlVXJsLm1hdGNoKC9cXD8vKSA/ICcmJyA6ICc/JztcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVybDogYCR7YmFzZVVybH0ke3NlcGFyYXRvcn0ke3BhcmFtcy5qb2luKCcmJyl9JkxBWUVSPSR7bGF5ZXJ9YCxcbiAgICAgICAgdGl0bGU6IGxheWVycy5sZW5ndGggPiAxID8gbGF5ZXIgOiB1bmRlZmluZWQsXG4gICAgICAgIGN1cnJlbnRTdHlsZTogc3R5bGUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IChzdHlsZSBhcyBzdHJpbmcpXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGxlZ2VuZDtcbiAgfVxuXG4gIHB1YmxpYyBvblVud2F0Y2goKSB7XG4gICAgLy8gZW1wdHlcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVGaWx0ZXJhYmxlRGF0YVNvdXJjZSBleHRlbmRzIFdNU0RhdGFTb3VyY2Uge1xuICBvcHRpb25zOiBUaW1lRmlsdGVyYWJsZURhdGFTb3VyY2VPcHRpb25zO1xuICB0aW1lRmlsdGVyJDogQmVoYXZpb3JTdWJqZWN0PFRpbWVGaWx0ZXJPcHRpb25zPjtcbiAgc2V0VGltZUZpbHRlcihvZ2NGaWx0ZXJzOiBUaW1lRmlsdGVyT3B0aW9ucywgdHJpZ2dlckV2ZW50PzogYm9vbGVhbik7XG4gIGZpbHRlckJ5RGF0ZShkYXRlOiBEYXRlIHwgW0RhdGUsIERhdGVdKTtcbiAgZmlsdGVyQnlZZWFyKHllYXI6IHN0cmluZyB8IFtzdHJpbmcsIHN0cmluZ10pO1xufVxuIl19
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid210cy1kYXRhc291cmNlLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2RhdGFzb3VyY2Uvc2hhcmVkL2RhdGFzb3VyY2VzL3dtdHMtZGF0YXNvdXJjZS5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBvbFNvdXJjZVdNVFMgZnJvbSAnb2wvc291cmNlL1dNVFMnO1xuXG5pbXBvcnQgeyBEYXRhU291cmNlT3B0aW9ucyB9IGZyb20gJy4vZGF0YXNvdXJjZS5pbnRlcmZhY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFdNVFNEYXRhU291cmNlT3B0aW9ucyBleHRlbmRzIERhdGFTb3VyY2VPcHRpb25zIHtcbiAgLy8gdHlwZT86ICd3bXRzJztcbiAgcHJvamVjdGlvbj86IHN0cmluZztcbiAgbGF5ZXI6IHN0cmluZztcbiAgc3R5bGU/OiBzdHJpbmc7XG4gIHZlcnNpb24/OiBzdHJpbmc7XG4gIGZvcm1hdD86IHN0cmluZztcbiAgbWF0cml4U2V0Pzogc3RyaW5nO1xuICB1cmw/OiBzdHJpbmc7XG4gIHVybHM/OiBzdHJpbmdbXTtcbiAgb2w/OiBvbFNvdXJjZVdNVFM7XG59XG4iXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid210cy1kYXRhc291cmNlLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2RhdGFzb3VyY2Uvc2hhcmVkL2RhdGFzb3VyY2VzL3dtdHMtZGF0YXNvdXJjZS5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGFTb3VyY2VPcHRpb25zIH0gZnJvbSAnLi9kYXRhc291cmNlLmludGVyZmFjZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgV01UU0RhdGFTb3VyY2VPcHRpb25zIGV4dGVuZHMgRGF0YVNvdXJjZU9wdGlvbnMge1xuICAvLyB0eXBlPzogJ3dtdHMnO1xuICBwcm9qZWN0aW9uPzogc3RyaW5nO1xuICBsYXllcjogc3RyaW5nO1xuICBzdHlsZT86IHN0cmluZztcbiAgdmVyc2lvbj86IHN0cmluZztcbiAgZm9ybWF0Pzogc3RyaW5nO1xuICBtYXRyaXhTZXQ/OiBzdHJpbmc7XG4gIHVybD86IHN0cmluZztcbiAgdXJscz86IHN0cmluZ1tdO1xufVxuIl19
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieHl6LWRhdGFzb3VyY2UuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2VvL3NyYy9saWIvZGF0YXNvdXJjZS9zaGFyZWQvZGF0YXNvdXJjZXMveHl6LWRhdGFzb3VyY2UuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgb2xTb3VyY2VYWVogZnJvbSAnb2wvc291cmNlL1hZWic7XG5cbmltcG9ydCB7IERhdGFTb3VyY2VPcHRpb25zIH0gZnJvbSAnLi9kYXRhc291cmNlLmludGVyZmFjZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgWFlaRGF0YVNvdXJjZU9wdGlvbnMgZXh0ZW5kcyBEYXRhU291cmNlT3B0aW9ucyB7XG4gIC8vIHR5cGU/OiAneHl6JztcbiAgcHJvamVjdGlvbj86IHN0cmluZztcbiAgb2w/OiBvbFNvdXJjZVhZWjtcbiAgdXJsPzogc3RyaW5nO1xuICB1cmxzPzogc3RyaW5nW107XG4gIHBhdGhPZmZsaW5lPzogc3RyaW5nO1xuICBleGNsdWRlQXR0cmlidXRlPzogc3RyaW5nW107XG4gIGV4Y2x1ZGVBdHRyaWJ1dGVPZmZsaW5lPzogc3RyaW5nW107XG59XG4iXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieHl6LWRhdGFzb3VyY2UuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2VvL3NyYy9saWIvZGF0YXNvdXJjZS9zaGFyZWQvZGF0YXNvdXJjZXMveHl6LWRhdGFzb3VyY2UuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRhU291cmNlT3B0aW9ucyB9IGZyb20gJy4vZGF0YXNvdXJjZS5pbnRlcmZhY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFhZWkRhdGFTb3VyY2VPcHRpb25zIGV4dGVuZHMgRGF0YVNvdXJjZU9wdGlvbnMge1xuICAvLyB0eXBlPzogJ3h5eic7XG4gIHByb2plY3Rpb24/OiBzdHJpbmc7XG4gIHVybD86IHN0cmluZztcbiAgdXJscz86IHN0cmluZ1tdO1xuICBwYXRoT2ZmbGluZT86IHN0cmluZztcbiAgZXhjbHVkZUF0dHJpYnV0ZT86IHN0cmluZ1tdO1xuICBleGNsdWRlQXR0cmlidXRlT2ZmbGluZT86IHN0cmluZ1tdO1xufVxuIl19
@@ -8,11 +8,11 @@ import { IgoLanguageModule } from '@igo2/core/language';
8
8
  import { MessageService } from '@igo2/core/message';
9
9
  import { RouteService } from '@igo2/core/route';
10
10
  import { Clipboard } from '@igo2/utils';
11
- import { BehaviorSubject, Subject } from 'rxjs';
12
- import { roundCoordTo } from '../../map/shared/map.utils';
11
+ import { Subject } from 'rxjs';
12
+ import { roundCoordTo, roundCoordToString } from '../../map/shared/map.utils';
13
13
  import { DirectionsService } from '../shared';
14
- import { addStopToStore, formatDistance, formatDuration, formatInstruction } from '../shared/directions.utils';
15
- import { RoutesFeatureStore, StepFeatureStore, StopsStore } from '../shared/store';
14
+ import { formatDistance, formatDuration, formatStep } from '../shared/directions.utils';
15
+ import { RoutesFeatureStore, StepsFeatureStore, StopsStore } from '../shared/store';
16
16
  import * as i0 from "@angular/core";
17
17
  import * as i1 from "@igo2/core/language";
18
18
  import * as i2 from "@igo2/core/message";
@@ -25,130 +25,183 @@ import * as i8 from "@ngx-translate/core";
25
25
  export class DirectionsButtonsComponent {
26
26
  languageService;
27
27
  messageService;
28
- route;
28
+ routeService;
29
29
  directionsService;
30
- get activeRoute() {
31
- return this.routesFeatureStore
32
- .all()
33
- .find((route) => route.properties.active);
34
- }
35
30
  contextUri;
36
- zoomToActiveRoute$ = new Subject();
31
+ zoomOnActiveRoute$ = new Subject();
37
32
  stopsStore;
38
33
  routesFeatureStore;
39
- stepFeatureStore;
40
- disabled$ = new BehaviorSubject(false);
41
- constructor(languageService, messageService, route, directionsService) {
34
+ stepsFeatureStore;
35
+ downloadDirectionsBtnDisabled = false;
36
+ constructor(languageService, messageService, routeService, directionsService) {
42
37
  this.languageService = languageService;
43
38
  this.messageService = messageService;
44
- this.route = route;
39
+ this.routeService = routeService;
45
40
  this.directionsService = directionsService;
46
41
  }
42
+ /**
43
+ * Returns the active route from the routesFeatureStore.
44
+ *
45
+ * @return {FeatureWithDirections | undefined} The active route, or undefined if no active route is found.
46
+ */
47
+ get activeRoute() {
48
+ return this.routesFeatureStore
49
+ .all()
50
+ .find((route) => route.properties.active);
51
+ }
52
+ /**
53
+ * Resets the stops in the stopsStore by clearing all the stops.
54
+ *
55
+ */
47
56
  resetStops() {
48
57
  this.stopsStore.clearStops();
49
58
  }
50
- // stop are always added before the last stop.
51
- addStop() {
52
- addStopToStore(this.stopsStore);
59
+ /**
60
+ * Triggers the zoom on the active route.
61
+ *
62
+ */
63
+ zoomOnActiveRoute() {
64
+ this.zoomOnActiveRoute$.next();
53
65
  }
54
- copyLinkToClipboard() {
55
- const successful = Clipboard.copy(this.getUrl());
66
+ /**
67
+ * Copies the directions to the clipboard and displays a success message if the copy is successful.
68
+ *
69
+ */
70
+ copyDirectionsToClipboard() {
71
+ const directions = this.directionsToText();
72
+ const successful = Clipboard.copy(directions);
56
73
  if (successful) {
57
- this.messageService.success('igo.geo.directionsForm.dialog.copyMsgLink', 'igo.geo.directionsForm.dialog.copyTitle');
74
+ this.messageService.success('igo.geo.directions.buttons.message.copyDirections');
58
75
  }
59
76
  }
60
- zoomRoute() {
61
- this.zoomToActiveRoute$.next();
62
- }
63
- copyDirectionsToClipboard() {
64
- const directionsBody = this.directionsToText();
65
- const successful = Clipboard.copy(directionsBody);
66
- if (successful) {
67
- this.messageService.success('igo.geo.directionsForm.dialog.copyMsg', 'igo.geo.directionsForm.dialog.copyTitle');
77
+ /**
78
+ * Copies the link to the clipboard and displays a success message if the copy is successful.
79
+ *
80
+ */
81
+ copyLinkToClipboard() {
82
+ const copySuccessful = Clipboard.copy(this.getLink());
83
+ if (copySuccessful) {
84
+ this.messageService.success('igo.geo.directions.buttons.message.copyLink');
68
85
  }
69
86
  }
87
+ /**
88
+ * Downloads the directions.
89
+ *
90
+ */
91
+ downloadDirections() {
92
+ this.stepsFeatureStore.clear();
93
+ this.downloadDirectionsBtnDisabled = true;
94
+ this.directionsService
95
+ .downloadDirections(this.routesFeatureStore.map, this.activeRoute.properties.directions)
96
+ .subscribe(() => {
97
+ this.downloadDirectionsBtnDisabled = false;
98
+ });
99
+ }
100
+ /**
101
+ * Generates a text representation of the directions, including summary, stops, URL, and directions.
102
+ *
103
+ * @return {string} The directions in text format.
104
+ */
70
105
  directionsToText() {
71
106
  const indent = '\t';
72
- let activeRouteDirective = this.languageService.translate.instant('igo.geo.directionsForm.instructions') + ':\n';
73
- let wayPointList = '';
74
- const summary = this.languageService.translate.instant('igo.geo.directionsForm.summary') +
75
- ': \n' +
107
+ const newLine = '\n';
108
+ let summary = this.languageService.translate.instant('igo.geo.directions.directionsText.summary') +
109
+ ':' +
110
+ newLine +
76
111
  indent +
77
- this.activeRoute.properties.direction.title +
78
- '\n' +
79
- indent +
80
- formatDistance(this.activeRoute.properties.direction.distance) +
81
- '\n' +
82
- indent +
83
- formatDuration(this.activeRoute.properties.direction.duration) +
84
- '\n\n' +
85
- this.languageService.translate.instant('igo.geo.directionsForm.stopsList') +
86
- ':\n';
87
- const url = this.languageService.translate.instant('igo.geo.directionsForm.link') +
88
- ':\n' +
89
- indent +
90
- this.getUrl();
91
- let wayPointsCnt = 1;
112
+ this.activeRoute.properties.directions.title;
113
+ const distance = formatDistance(this.activeRoute.properties.directions.distance);
114
+ const duration = formatDuration(this.activeRoute.properties.directions.duration);
115
+ if (distance && duration) {
116
+ summary += ' (' + distance + ' - ' + duration + ')';
117
+ }
118
+ summary += newLine + newLine;
119
+ let stops = this.languageService.translate.instant('igo.geo.directions.directionsText.stopList') +
120
+ ':' +
121
+ newLine;
122
+ let stopNumber = 1;
92
123
  this.stopsStore.view.all().forEach((stop) => {
93
- let coord = '';
124
+ let coords = '';
94
125
  let stopText = '';
95
- if (stop.text !== roundCoordTo(stop.coordinates).join(',')) {
126
+ if (stop.text !== roundCoordToString(stop.coordinates, 6).join(', ')) {
96
127
  stopText = stop.text;
97
- coord = ` ( ${roundCoordTo(stop.coordinates).join(',')} )`;
128
+ coords = ` (${roundCoordToString(stop.coordinates, 6).join(', ')})`;
98
129
  }
99
130
  else {
100
- stopText = roundCoordTo(stop.coordinates).join(',');
131
+ stopText = roundCoordToString(stop.coordinates, 6).join(', ');
101
132
  }
102
- wayPointList =
103
- wayPointList +
133
+ stops =
134
+ stops +
104
135
  indent +
105
- wayPointsCnt.toLocaleString() +
136
+ stopNumber.toLocaleString() +
106
137
  '. ' +
107
138
  stopText +
108
- coord +
109
- '\n';
110
- wayPointsCnt++;
139
+ coords +
140
+ newLine;
141
+ stopNumber++;
111
142
  });
112
- let localCnt = 0;
113
- this.activeRoute.properties.direction.steps.forEach((step) => {
114
- const instruction = this.formatStep(step, localCnt).instruction;
115
- const distance = formatDistance(step.distance) === undefined
116
- ? ''
117
- : ' (' + formatDistance(step.distance) + ')';
118
- activeRouteDirective =
119
- activeRouteDirective +
120
- indent +
121
- (localCnt + 1).toLocaleString() +
122
- '. ' +
123
- instruction +
124
- distance +
125
- '\n';
126
- localCnt++;
143
+ stops += newLine;
144
+ const url = this.languageService.translate.instant('igo.geo.directions.directionsText.link') +
145
+ ':' +
146
+ newLine +
147
+ indent +
148
+ this.getLink() +
149
+ newLine +
150
+ newLine;
151
+ let directions = this.languageService.translate.instant('igo.geo.directions.directions') +
152
+ ':' +
153
+ newLine;
154
+ this.activeRoute.properties.directions.steps.forEach((step, stepIndex, steps) => {
155
+ const distance = formatDistance(step.distance);
156
+ const duration = formatDuration(step.duration);
157
+ if ((distance && duration) || stepIndex === steps.length - 1) {
158
+ const instruction = this.getFormattedStepInstruction(step, stepIndex);
159
+ const formattedDistanceDuration = distance && duration ? ` (${distance} - ${duration}) ` : '';
160
+ directions =
161
+ directions +
162
+ indent +
163
+ '- ' +
164
+ instruction +
165
+ formattedDistanceDuration +
166
+ newLine;
167
+ }
127
168
  });
128
- const directionsBody = summary + wayPointList + '\n' + url + '\n\n' + activeRouteDirective;
169
+ const directionsBody = summary + stops + url + directions;
129
170
  return directionsBody;
130
171
  }
131
- formatStep(step, cnt) {
132
- return formatInstruction(step.maneuver.type, step.maneuver.modifier, step.name, step.maneuver.bearing_after, cnt, step.maneuver.exit, this.languageService, cnt === this.activeRoute.properties.direction.steps.length - 1);
172
+ /**
173
+ * Formats a step.
174
+ *
175
+ * @param {IgoStep} step - The step to format.
176
+ * @param {number} stepIndex - The index of the step in the directions.
177
+ * @return {string} The formatted instruction for the step.
178
+ */
179
+ getFormattedStepInstruction(step, stepIndex) {
180
+ return formatStep(step, this.languageService, stepIndex === this.activeRoute.properties.directions.steps.length - 1).instruction;
133
181
  }
134
- getUrl() {
135
- if (!this.route) {
182
+ /**
183
+ * Generates a link based on the current route and stops.
184
+ *
185
+ * @return {string | undefined} The generated link, or undefined if the route service is not available.
186
+ */
187
+ getLink() {
188
+ if (!this.routeService) {
136
189
  return;
137
190
  }
138
191
  let context = '';
139
192
  if (this.contextUri) {
140
193
  context = `context=${this.contextUri}&`;
141
194
  }
142
- const pos = this.routesFeatureStore
195
+ const routeIndex = this.routesFeatureStore
143
196
  .all()
144
197
  .map((direction) => direction.properties.id)
145
198
  .indexOf(this.activeRoute.properties.id);
146
199
  let routingOptions = '';
147
- if (pos !== 0) {
148
- const routingOptionsKey = this.route.options.directionsOptionsKey;
149
- routingOptions = `&${routingOptionsKey}=result:${pos}`;
200
+ if (routeIndex !== 0) {
201
+ const routingOptionsKey = this.routeService.options.directionsOptionsKey;
202
+ routingOptions = `&${routingOptionsKey}=result:${routeIndex}`;
150
203
  }
151
- const directionsKey = this.route.options.directionsCoordKey;
204
+ const directionsKey = this.routeService.options.directionsCoordKey;
152
205
  const stopsCoordinates = this.stopsStore.view
153
206
  .all()
154
207
  .map((stop) => roundCoordTo(stop.coordinates, 6));
@@ -159,17 +212,8 @@ export class DirectionsButtonsComponent {
159
212
  }
160
213
  return;
161
214
  }
162
- printDirections() {
163
- this.stepFeatureStore.clear();
164
- this.disabled$.next(true);
165
- this.directionsService
166
- .downloadDirection(this.routesFeatureStore.map, this.activeRoute.properties.direction)
167
- .subscribe(() => {
168
- this.disabled$.next(false);
169
- });
170
- }
171
215
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DirectionsButtonsComponent, deps: [{ token: i1.LanguageService }, { token: i2.MessageService }, { token: i3.RouteService, optional: true }, { token: i4.DirectionsService }], target: i0.ɵɵFactoryTarget.Component });
172
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DirectionsButtonsComponent, isStandalone: true, selector: "igo-directions-buttons", inputs: { contextUri: "contextUri", zoomToActiveRoute$: "zoomToActiveRoute$", stopsStore: "stopsStore", routesFeatureStore: "routesFeatureStore", stepFeatureStore: "stepFeatureStore" }, ngImport: i0, template: "<div class=\"igo-form-button-group\">\n <button\n mat-icon-button\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.directionsForm.addStop' | translate\"\n color=\"primary\"\n (click)=\"addStop()\"\n >\n <mat-icon>add_location_alt</mat-icon>\n </button>\n <button\n mat-icon-button\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n *ngIf=\"\n (routesFeatureStore.count$ | async) >= 1 ||\n (stopsStore.count$ | async) >= 1\n \"\n [matTooltip]=\"'igo.geo.directionsForm.resetDirectionsBtn' | translate\"\n color=\"warn\"\n (click)=\"resetStops()\"\n >\n <mat-icon>restore_page</mat-icon>\n </button>\n <button\n mat-icon-button\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n *ngIf=\"(routesFeatureStore.count$ | async) >= 1\"\n (click)=\"zoomRoute()\"\n [matTooltip]=\"'igo.geo.directionsForm.zoomRoute' | translate\"\n color=\"primary\"\n >\n <mat-icon>zoom_in</mat-icon>\n </button>\n <button\n mat-icon-button\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n *ngIf=\"(routesFeatureStore.count$ | async) >= 1\"\n (click)=\"copyDirectionsToClipboard()\"\n [matTooltip]=\"'igo.geo.directionsForm.copy' | translate\"\n color=\"primary\"\n >\n <mat-icon>content_copy</mat-icon>\n </button>\n <button\n mat-icon-button\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n *ngIf=\"(routesFeatureStore.count$ | async) >= 1\"\n (click)=\"copyLinkToClipboard()\"\n [matTooltip]=\"'igo.geo.directionsForm.link' | translate\"\n color=\"primary\"\n >\n <mat-icon>link</mat-icon>\n </button>\n\n <button\n mat-icon-button\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n *ngIf=\"(routesFeatureStore.count$ | async) >= 1\"\n (click)=\"printDirections()\"\n [disabled]=\"disabled$ | async\"\n [matTooltip]=\"'igo.geo.directionsForm.print' | translate\"\n color=\"primary\"\n >\n <mat-icon>print</mat-icon>\n </button>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: IgoLanguageModule }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }] });
216
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DirectionsButtonsComponent, isStandalone: true, selector: "igo-directions-buttons", inputs: { contextUri: "contextUri", zoomOnActiveRoute$: "zoomOnActiveRoute$", stopsStore: "stopsStore", routesFeatureStore: "routesFeatureStore", stepsFeatureStore: "stepsFeatureStore" }, ngImport: i0, template: "<button\n mat-icon-button\n [matTooltip]=\"'igo.geo.directions.buttons.resetStops' | translate\"\n color=\"warn\"\n (click)=\"resetStops()\"\n>\n <mat-icon>restart_alt</mat-icon>\n</button>\n<button\n mat-icon-button\n [matTooltip]=\"'igo.geo.directions.buttons.zoomOnRoute' | translate\"\n color=\"primary\"\n (click)=\"zoomOnActiveRoute()\"\n>\n <mat-icon>frame_inspect</mat-icon>\n</button>\n<button\n mat-icon-button\n [matTooltip]=\"'igo.geo.directions.buttons.copyDirections' | translate\"\n color=\"primary\"\n (click)=\"copyDirectionsToClipboard()\"\n>\n <mat-icon>content_copy</mat-icon>\n</button>\n<button\n mat-icon-button\n [matTooltip]=\"'igo.geo.directions.buttons.copyLink' | translate\"\n color=\"primary\"\n (click)=\"copyLinkToClipboard()\"\n>\n <mat-icon>link</mat-icon>\n</button>\n\n<button\n mat-icon-button\n [disabled]=\"downloadDirectionsBtnDisabled\"\n [matTooltip]=\"'igo.geo.directions.buttons.downloadDirections' | translate\"\n color=\"primary\"\n (click)=\"downloadDirections()\"\n>\n <mat-icon>download</mat-icon>\n</button>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: IgoLanguageModule }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }] });
173
217
  }
174
218
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DirectionsButtonsComponent, decorators: [{
175
219
  type: Component,
@@ -180,18 +224,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
180
224
  NgIf,
181
225
  AsyncPipe,
182
226
  IgoLanguageModule
183
- ], template: "<div class=\"igo-form-button-group\">\n <button\n mat-icon-button\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.directionsForm.addStop' | translate\"\n color=\"primary\"\n (click)=\"addStop()\"\n >\n <mat-icon>add_location_alt</mat-icon>\n </button>\n <button\n mat-icon-button\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n *ngIf=\"\n (routesFeatureStore.count$ | async) >= 1 ||\n (stopsStore.count$ | async) >= 1\n \"\n [matTooltip]=\"'igo.geo.directionsForm.resetDirectionsBtn' | translate\"\n color=\"warn\"\n (click)=\"resetStops()\"\n >\n <mat-icon>restore_page</mat-icon>\n </button>\n <button\n mat-icon-button\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n *ngIf=\"(routesFeatureStore.count$ | async) >= 1\"\n (click)=\"zoomRoute()\"\n [matTooltip]=\"'igo.geo.directionsForm.zoomRoute' | translate\"\n color=\"primary\"\n >\n <mat-icon>zoom_in</mat-icon>\n </button>\n <button\n mat-icon-button\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n *ngIf=\"(routesFeatureStore.count$ | async) >= 1\"\n (click)=\"copyDirectionsToClipboard()\"\n [matTooltip]=\"'igo.geo.directionsForm.copy' | translate\"\n color=\"primary\"\n >\n <mat-icon>content_copy</mat-icon>\n </button>\n <button\n mat-icon-button\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n *ngIf=\"(routesFeatureStore.count$ | async) >= 1\"\n (click)=\"copyLinkToClipboard()\"\n [matTooltip]=\"'igo.geo.directionsForm.link' | translate\"\n color=\"primary\"\n >\n <mat-icon>link</mat-icon>\n </button>\n\n <button\n mat-icon-button\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n *ngIf=\"(routesFeatureStore.count$ | async) >= 1\"\n (click)=\"printDirections()\"\n [disabled]=\"disabled$ | async\"\n [matTooltip]=\"'igo.geo.directionsForm.print' | translate\"\n color=\"primary\"\n >\n <mat-icon>print</mat-icon>\n </button>\n</div>\n" }]
227
+ ], template: "<button\n mat-icon-button\n [matTooltip]=\"'igo.geo.directions.buttons.resetStops' | translate\"\n color=\"warn\"\n (click)=\"resetStops()\"\n>\n <mat-icon>restart_alt</mat-icon>\n</button>\n<button\n mat-icon-button\n [matTooltip]=\"'igo.geo.directions.buttons.zoomOnRoute' | translate\"\n color=\"primary\"\n (click)=\"zoomOnActiveRoute()\"\n>\n <mat-icon>frame_inspect</mat-icon>\n</button>\n<button\n mat-icon-button\n [matTooltip]=\"'igo.geo.directions.buttons.copyDirections' | translate\"\n color=\"primary\"\n (click)=\"copyDirectionsToClipboard()\"\n>\n <mat-icon>content_copy</mat-icon>\n</button>\n<button\n mat-icon-button\n [matTooltip]=\"'igo.geo.directions.buttons.copyLink' | translate\"\n color=\"primary\"\n (click)=\"copyLinkToClipboard()\"\n>\n <mat-icon>link</mat-icon>\n</button>\n\n<button\n mat-icon-button\n [disabled]=\"downloadDirectionsBtnDisabled\"\n [matTooltip]=\"'igo.geo.directions.buttons.downloadDirections' | translate\"\n color=\"primary\"\n (click)=\"downloadDirections()\"\n>\n <mat-icon>download</mat-icon>\n</button>\n" }]
184
228
  }], ctorParameters: () => [{ type: i1.LanguageService }, { type: i2.MessageService }, { type: i3.RouteService, decorators: [{
185
229
  type: Optional
186
230
  }] }, { type: i4.DirectionsService }], propDecorators: { contextUri: [{
187
- type: Input
188
- }], zoomToActiveRoute$: [{
189
- type: Input
231
+ type: Input,
232
+ args: [{ required: true }]
233
+ }], zoomOnActiveRoute$: [{
234
+ type: Input,
235
+ args: [{ required: true }]
190
236
  }], stopsStore: [{
191
- type: Input
237
+ type: Input,
238
+ args: [{ required: true }]
192
239
  }], routesFeatureStore: [{
193
- type: Input
194
- }], stepFeatureStore: [{
195
- type: Input
240
+ type: Input,
241
+ args: [{ required: true }]
242
+ }], stepsFeatureStore: [{
243
+ type: Input,
244
+ args: [{ required: true }]
196
245
  }] } });
197
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyZWN0aW9ucy1idXR0b25zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2RpcmVjdGlvbnMvZGlyZWN0aW9ucy1idXR0b25zL2RpcmVjdGlvbnMtYnV0dG9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9kaXJlY3Rpb25zL2RpcmVjdGlvbnMtYnV0dG9ucy9kaXJlY3Rpb25zLWJ1dHRvbnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXhDLE9BQU8sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWhELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFOUMsT0FBTyxFQUNMLGNBQWMsRUFDZCxjQUFjLEVBQ2QsY0FBYyxFQUNkLGlCQUFpQixFQUNsQixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBQ2hCLFVBQVUsRUFDWCxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7Ozs7O0FBZ0J6QixNQUFNLE9BQU8sMEJBQTBCO0lBZTNCO0lBQ0E7SUFDWTtJQUNaO0lBakJWLElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLGtCQUFrQjthQUMzQixHQUFHLEVBQUU7YUFDTCxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUNRLFVBQVUsQ0FBUztJQUNuQixrQkFBa0IsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBQ3pDLFVBQVUsQ0FBYTtJQUN2QixrQkFBa0IsQ0FBcUI7SUFDdkMsZ0JBQWdCLENBQW1CO0lBRXJDLFNBQVMsR0FBRyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUU5QyxZQUNVLGVBQWdDLEVBQ2hDLGNBQThCLEVBQ2xCLEtBQW1CLEVBQy9CLGlCQUFvQztRQUhwQyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQ2xCLFVBQUssR0FBTCxLQUFLLENBQWM7UUFDL0Isc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtJQUMzQyxDQUFDO0lBRUosVUFBVTtRQUNSLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELDhDQUE4QztJQUM5QyxPQUFPO1FBQ0wsY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsbUJBQW1CO1FBQ2pCLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDakQsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUN6QiwyQ0FBMkMsRUFDM0MseUNBQXlDLENBQzFDLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELHlCQUF5QjtRQUN2QixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUMvQyxNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2xELElBQUksVUFBVSxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FDekIsdUNBQXVDLEVBQ3ZDLHlDQUF5QyxDQUMxQyxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFTyxnQkFBZ0I7UUFDdEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLElBQUksb0JBQW9CLEdBQ3RCLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FDcEMscUNBQXFDLENBQ3RDLEdBQUcsS0FBSyxDQUFDO1FBQ1osSUFBSSxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLE1BQU0sT0FBTyxHQUNYLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxnQ0FBZ0MsQ0FBQztZQUN4RSxNQUFNO1lBQ04sTUFBTTtZQUNOLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLO1lBQzNDLElBQUk7WUFDSixNQUFNO1lBQ04sY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7WUFDOUQsSUFBSTtZQUNKLE1BQU07WUFDTixjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztZQUM5RCxNQUFNO1lBQ04sSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUNwQyxrQ0FBa0MsQ0FDbkM7WUFDRCxLQUFLLENBQUM7UUFFUixNQUFNLEdBQUcsR0FDUCxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsNkJBQTZCLENBQUM7WUFDckUsS0FBSztZQUNMLE1BQU07WUFDTixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFaEIsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQzFDLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUNmLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztZQUNsQixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDM0QsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7Z0JBQ3JCLEtBQUssR0FBRyxNQUFNLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFDN0QsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLFFBQVEsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN0RCxDQUFDO1lBRUQsWUFBWTtnQkFDVixZQUFZO29CQUNaLE1BQU07b0JBQ04sWUFBWSxDQUFDLGNBQWMsRUFBRTtvQkFDN0IsSUFBSTtvQkFDSixRQUFRO29CQUNSLEtBQUs7b0JBQ0wsSUFBSSxDQUFDO1lBQ1AsWUFBWSxFQUFFLENBQUM7UUFDakIsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFDakIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUMzRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQyxXQUFXLENBQUM7WUFDaEUsTUFBTSxRQUFRLEdBQ1osY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxTQUFTO2dCQUN6QyxDQUFDLENBQUMsRUFBRTtnQkFDSixDQUFDLENBQUMsSUFBSSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO1lBQ2pELG9CQUFvQjtnQkFDbEIsb0JBQW9CO29CQUNwQixNQUFNO29CQUNOLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLGNBQWMsRUFBRTtvQkFDL0IsSUFBSTtvQkFDSixXQUFXO29CQUNYLFFBQVE7b0JBQ1IsSUFBSSxDQUFDO1lBQ1AsUUFBUSxFQUFFLENBQUM7UUFDYixDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sY0FBYyxHQUNsQixPQUFPLEdBQUcsWUFBWSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsTUFBTSxHQUFHLG9CQUFvQixDQUFDO1FBRXRFLE9BQU8sY0FBYyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxVQUFVLENBQUMsSUFBSSxFQUFFLEdBQUc7UUFDbEIsT0FBTyxpQkFBaUIsQ0FDdEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQ2xCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUN0QixJQUFJLENBQUMsSUFBSSxFQUNULElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUMzQixHQUFHLEVBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQ2xCLElBQUksQ0FBQyxlQUFlLEVBQ3BCLEdBQUcsS0FBSyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQy9ELENBQUM7SUFDSixDQUFDO0lBRU8sTUFBTTtRQUNaLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDaEIsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDakIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEIsT0FBTyxHQUFHLFdBQVcsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDO1FBQzFDLENBQUM7UUFFRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsa0JBQWtCO2FBQ2hDLEdBQUcsRUFBRTthQUNMLEdBQUcsQ0FBQyxDQUFDLFNBQStCLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO2FBQ2pFLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMzQyxJQUFJLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDZCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDO1lBQ2xFLGNBQWMsR0FBRyxJQUFJLGlCQUFpQixXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3pELENBQUM7UUFDRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztRQUM1RCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSTthQUMxQyxHQUFHLEVBQUU7YUFDTCxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEQsSUFBSSxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksZ0JBQWdCLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ2pDLGFBQWEsR0FBRyxHQUFHLGFBQWEsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNqRSxPQUFPLEdBQUcsUUFBUSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsUUFBUSxJQUFJLE9BQU8sNkJBQTZCLGFBQWEsR0FBRyxjQUFjLEVBQUUsQ0FBQztRQUN4SCxDQUFDO1FBQ0QsT0FBTztJQUNULENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxpQkFBaUI7YUFDbkIsaUJBQWlCLENBQ2hCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEVBQzNCLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FDdEM7YUFDQSxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO3dHQXpMVSwwQkFBMEI7NEZBQTFCLDBCQUEwQiw0UUMzQ3ZDLGlpRUF3RUEseUREckNJLGVBQWUsMklBQ2YsZ0JBQWdCLDRUQUNoQixhQUFhLG9MQUNiLElBQUksd0ZBQ0osU0FBUyw2Q0FDVCxpQkFBaUI7OzRGQUdSLDBCQUEwQjtrQkFkdEMsU0FBUzsrQkFDRSx3QkFBd0IsY0FHdEIsSUFBSSxXQUNQO3dCQUNQLGVBQWU7d0JBQ2YsZ0JBQWdCO3dCQUNoQixhQUFhO3dCQUNiLElBQUk7d0JBQ0osU0FBUzt3QkFDVCxpQkFBaUI7cUJBQ2xCOzswQkFtQkUsUUFBUTt5RUFYRixVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc3luY1BpcGUsIE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XG5cbmltcG9ydCB7IExhbmd1YWdlU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUvbGFuZ3VhZ2UnO1xuaW1wb3J0IHsgSWdvTGFuZ3VhZ2VNb2R1bGUgfSBmcm9tICdAaWdvMi9jb3JlL2xhbmd1YWdlJztcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZS9tZXNzYWdlJztcbmltcG9ydCB7IFJvdXRlU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUvcm91dGUnO1xuaW1wb3J0IHsgQ2xpcGJvYXJkIH0gZnJvbSAnQGlnbzIvdXRpbHMnO1xuXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgcm91bmRDb29yZFRvIH0gZnJvbSAnLi4vLi4vbWFwL3NoYXJlZC9tYXAudXRpbHMnO1xuaW1wb3J0IHsgRGlyZWN0aW9uc1NlcnZpY2UgfSBmcm9tICcuLi9zaGFyZWQnO1xuaW1wb3J0IHsgRmVhdHVyZVdpdGhEaXJlY3Rpb24gfSBmcm9tICcuLi9zaGFyZWQvZGlyZWN0aW9ucy5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgYWRkU3RvcFRvU3RvcmUsXG4gIGZvcm1hdERpc3RhbmNlLFxuICBmb3JtYXREdXJhdGlvbixcbiAgZm9ybWF0SW5zdHJ1Y3Rpb25cbn0gZnJvbSAnLi4vc2hhcmVkL2RpcmVjdGlvbnMudXRpbHMnO1xuaW1wb3J0IHtcbiAgUm91dGVzRmVhdHVyZVN0b3JlLFxuICBTdGVwRmVhdHVyZVN0b3JlLFxuICBTdG9wc1N0b3JlXG59IGZyb20gJy4uL3NoYXJlZC9zdG9yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2lnby1kaXJlY3Rpb25zLWJ1dHRvbnMnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGlyZWN0aW9ucy1idXR0b25zLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZGlyZWN0aW9ucy1idXR0b25zLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIE5nSWYsXG4gICAgQXN5bmNQaXBlLFxuICAgIElnb0xhbmd1YWdlTW9kdWxlXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgRGlyZWN0aW9uc0J1dHRvbnNDb21wb25lbnQge1xuICBnZXQgYWN0aXZlUm91dGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucm91dGVzRmVhdHVyZVN0b3JlXG4gICAgICAuYWxsKClcbiAgICAgIC5maW5kKChyb3V0ZSkgPT4gcm91dGUucHJvcGVydGllcy5hY3RpdmUpO1xuICB9XG4gIEBJbnB1dCgpIGNvbnRleHRVcmk6IHN0cmluZztcbiAgQElucHV0KCkgem9vbVRvQWN0aXZlUm91dGUkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgQElucHV0KCkgc3RvcHNTdG9yZTogU3RvcHNTdG9yZTtcbiAgQElucHV0KCkgcm91dGVzRmVhdHVyZVN0b3JlOiBSb3V0ZXNGZWF0dXJlU3RvcmU7XG4gIEBJbnB1dCgpIHN0ZXBGZWF0dXJlU3RvcmU6IFN0ZXBGZWF0dXJlU3RvcmU7XG5cbiAgcHVibGljIGRpc2FibGVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbGFuZ3VhZ2VTZXJ2aWNlOiBMYW5ndWFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSByb3V0ZTogUm91dGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGlyZWN0aW9uc1NlcnZpY2U6IERpcmVjdGlvbnNTZXJ2aWNlXG4gICkge31cblxuICByZXNldFN0b3BzKCkge1xuICAgIHRoaXMuc3RvcHNTdG9yZS5jbGVhclN0b3BzKCk7XG4gIH1cblxuICAvLyBzdG9wIGFyZSBhbHdheXMgYWRkZWQgYmVmb3JlIHRoZSBsYXN0IHN0b3AuXG4gIGFkZFN0b3AoKTogdm9pZCB7XG4gICAgYWRkU3RvcFRvU3RvcmUodGhpcy5zdG9wc1N0b3JlKTtcbiAgfVxuXG4gIGNvcHlMaW5rVG9DbGlwYm9hcmQoKSB7XG4gICAgY29uc3Qgc3VjY2Vzc2Z1bCA9IENsaXBib2FyZC5jb3B5KHRoaXMuZ2V0VXJsKCkpO1xuICAgIGlmIChzdWNjZXNzZnVsKSB7XG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnN1Y2Nlc3MoXG4gICAgICAgICdpZ28uZ2VvLmRpcmVjdGlvbnNGb3JtLmRpYWxvZy5jb3B5TXNnTGluaycsXG4gICAgICAgICdpZ28uZ2VvLmRpcmVjdGlvbnNGb3JtLmRpYWxvZy5jb3B5VGl0bGUnXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHpvb21Sb3V0ZSgpIHtcbiAgICB0aGlzLnpvb21Ub0FjdGl2ZVJvdXRlJC5uZXh0KCk7XG4gIH1cblxuICBjb3B5RGlyZWN0aW9uc1RvQ2xpcGJvYXJkKCkge1xuICAgIGNvbnN0IGRpcmVjdGlvbnNCb2R5ID0gdGhpcy5kaXJlY3Rpb25zVG9UZXh0KCk7XG4gICAgY29uc3Qgc3VjY2Vzc2Z1bCA9IENsaXBib2FyZC5jb3B5KGRpcmVjdGlvbnNCb2R5KTtcbiAgICBpZiAoc3VjY2Vzc2Z1bCkge1xuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5zdWNjZXNzKFxuICAgICAgICAnaWdvLmdlby5kaXJlY3Rpb25zRm9ybS5kaWFsb2cuY29weU1zZycsXG4gICAgICAgICdpZ28uZ2VvLmRpcmVjdGlvbnNGb3JtLmRpYWxvZy5jb3B5VGl0bGUnXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZGlyZWN0aW9uc1RvVGV4dCgpIHtcbiAgICBjb25zdCBpbmRlbnQgPSAnXFx0JztcbiAgICBsZXQgYWN0aXZlUm91dGVEaXJlY3RpdmUgPVxuICAgICAgdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICdpZ28uZ2VvLmRpcmVjdGlvbnNGb3JtLmluc3RydWN0aW9ucydcbiAgICAgICkgKyAnOlxcbic7XG4gICAgbGV0IHdheVBvaW50TGlzdCA9ICcnO1xuICAgIGNvbnN0IHN1bW1hcnkgPVxuICAgICAgdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uZGlyZWN0aW9uc0Zvcm0uc3VtbWFyeScpICtcbiAgICAgICc6IFxcbicgK1xuICAgICAgaW5kZW50ICtcbiAgICAgIHRoaXMuYWN0aXZlUm91dGUucHJvcGVydGllcy5kaXJlY3Rpb24udGl0bGUgK1xuICAgICAgJ1xcbicgK1xuICAgICAgaW5kZW50ICtcbiAgICAgIGZvcm1hdERpc3RhbmNlKHRoaXMuYWN0aXZlUm91dGUucHJvcGVydGllcy5kaXJlY3Rpb24uZGlzdGFuY2UpICtcbiAgICAgICdcXG4nICtcbiAgICAgIGluZGVudCArXG4gICAgICBmb3JtYXREdXJhdGlvbih0aGlzLmFjdGl2ZVJvdXRlLnByb3BlcnRpZXMuZGlyZWN0aW9uLmR1cmF0aW9uKSArXG4gICAgICAnXFxuXFxuJyArXG4gICAgICB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgJ2lnby5nZW8uZGlyZWN0aW9uc0Zvcm0uc3RvcHNMaXN0J1xuICAgICAgKSArXG4gICAgICAnOlxcbic7XG5cbiAgICBjb25zdCB1cmwgPVxuICAgICAgdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uZGlyZWN0aW9uc0Zvcm0ubGluaycpICtcbiAgICAgICc6XFxuJyArXG4gICAgICBpbmRlbnQgK1xuICAgICAgdGhpcy5nZXRVcmwoKTtcblxuICAgIGxldCB3YXlQb2ludHNDbnQgPSAxO1xuICAgIHRoaXMuc3RvcHNTdG9yZS52aWV3LmFsbCgpLmZvckVhY2goKHN0b3ApID0+IHtcbiAgICAgIGxldCBjb29yZCA9ICcnO1xuICAgICAgbGV0IHN0b3BUZXh0ID0gJyc7XG4gICAgICBpZiAoc3RvcC50ZXh0ICE9PSByb3VuZENvb3JkVG8oc3RvcC5jb29yZGluYXRlcykuam9pbignLCcpKSB7XG4gICAgICAgIHN0b3BUZXh0ID0gc3RvcC50ZXh0O1xuICAgICAgICBjb29yZCA9IGAgKCAke3JvdW5kQ29vcmRUbyhzdG9wLmNvb3JkaW5hdGVzKS5qb2luKCcsJyl9IClgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RvcFRleHQgPSByb3VuZENvb3JkVG8oc3RvcC5jb29yZGluYXRlcykuam9pbignLCcpO1xuICAgICAgfVxuXG4gICAgICB3YXlQb2ludExpc3QgPVxuICAgICAgICB3YXlQb2ludExpc3QgK1xuICAgICAgICBpbmRlbnQgK1xuICAgICAgICB3YXlQb2ludHNDbnQudG9Mb2NhbGVTdHJpbmcoKSArXG4gICAgICAgICcuICcgK1xuICAgICAgICBzdG9wVGV4dCArXG4gICAgICAgIGNvb3JkICtcbiAgICAgICAgJ1xcbic7XG4gICAgICB3YXlQb2ludHNDbnQrKztcbiAgICB9KTtcblxuICAgIGxldCBsb2NhbENudCA9IDA7XG4gICAgdGhpcy5hY3RpdmVSb3V0ZS5wcm9wZXJ0aWVzLmRpcmVjdGlvbi5zdGVwcy5mb3JFYWNoKChzdGVwKSA9PiB7XG4gICAgICBjb25zdCBpbnN0cnVjdGlvbiA9IHRoaXMuZm9ybWF0U3RlcChzdGVwLCBsb2NhbENudCkuaW5zdHJ1Y3Rpb247XG4gICAgICBjb25zdCBkaXN0YW5jZSA9XG4gICAgICAgIGZvcm1hdERpc3RhbmNlKHN0ZXAuZGlzdGFuY2UpID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/ICcnXG4gICAgICAgICAgOiAnICgnICsgZm9ybWF0RGlzdGFuY2Uoc3RlcC5kaXN0YW5jZSkgKyAnKSc7XG4gICAgICBhY3RpdmVSb3V0ZURpcmVjdGl2ZSA9XG4gICAgICAgIGFjdGl2ZVJvdXRlRGlyZWN0aXZlICtcbiAgICAgICAgaW5kZW50ICtcbiAgICAgICAgKGxvY2FsQ250ICsgMSkudG9Mb2NhbGVTdHJpbmcoKSArXG4gICAgICAgICcuICcgK1xuICAgICAgICBpbnN0cnVjdGlvbiArXG4gICAgICAgIGRpc3RhbmNlICtcbiAgICAgICAgJ1xcbic7XG4gICAgICBsb2NhbENudCsrO1xuICAgIH0pO1xuXG4gICAgY29uc3QgZGlyZWN0aW9uc0JvZHkgPVxuICAgICAgc3VtbWFyeSArIHdheVBvaW50TGlzdCArICdcXG4nICsgdXJsICsgJ1xcblxcbicgKyBhY3RpdmVSb3V0ZURpcmVjdGl2ZTtcblxuICAgIHJldHVybiBkaXJlY3Rpb25zQm9keTtcbiAgfVxuXG4gIGZvcm1hdFN0ZXAoc3RlcCwgY250KSB7XG4gICAgcmV0dXJuIGZvcm1hdEluc3RydWN0aW9uKFxuICAgICAgc3RlcC5tYW5ldXZlci50eXBlLFxuICAgICAgc3RlcC5tYW5ldXZlci5tb2RpZmllcixcbiAgICAgIHN0ZXAubmFtZSxcbiAgICAgIHN0ZXAubWFuZXV2ZXIuYmVhcmluZ19hZnRlcixcbiAgICAgIGNudCxcbiAgICAgIHN0ZXAubWFuZXV2ZXIuZXhpdCxcbiAgICAgIHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLFxuICAgICAgY250ID09PSB0aGlzLmFjdGl2ZVJvdXRlLnByb3BlcnRpZXMuZGlyZWN0aW9uLnN0ZXBzLmxlbmd0aCAtIDFcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRVcmwoKSB7XG4gICAgaWYgKCF0aGlzLnJvdXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBjb250ZXh0ID0gJyc7XG4gICAgaWYgKHRoaXMuY29udGV4dFVyaSkge1xuICAgICAgY29udGV4dCA9IGBjb250ZXh0PSR7dGhpcy5jb250ZXh0VXJpfSZgO1xuICAgIH1cblxuICAgIGNvbnN0IHBvcyA9IHRoaXMucm91dGVzRmVhdHVyZVN0b3JlXG4gICAgICAuYWxsKClcbiAgICAgIC5tYXAoKGRpcmVjdGlvbjogRmVhdHVyZVdpdGhEaXJlY3Rpb24pID0+IGRpcmVjdGlvbi5wcm9wZXJ0aWVzLmlkKVxuICAgICAgLmluZGV4T2YodGhpcy5hY3RpdmVSb3V0ZS5wcm9wZXJ0aWVzLmlkKTtcbiAgICBsZXQgcm91dGluZ09wdGlvbnMgPSAnJztcbiAgICBpZiAocG9zICE9PSAwKSB7XG4gICAgICBjb25zdCByb3V0aW5nT3B0aW9uc0tleSA9IHRoaXMucm91dGUub3B0aW9ucy5kaXJlY3Rpb25zT3B0aW9uc0tleTtcbiAgICAgIHJvdXRpbmdPcHRpb25zID0gYCYke3JvdXRpbmdPcHRpb25zS2V5fT1yZXN1bHQ6JHtwb3N9YDtcbiAgICB9XG4gICAgY29uc3QgZGlyZWN0aW9uc0tleSA9IHRoaXMucm91dGUub3B0aW9ucy5kaXJlY3Rpb25zQ29vcmRLZXk7XG4gICAgY29uc3Qgc3RvcHNDb29yZGluYXRlcyA9IHRoaXMuc3RvcHNTdG9yZS52aWV3XG4gICAgICAuYWxsKClcbiAgICAgIC5tYXAoKHN0b3ApID0+IHJvdW5kQ29vcmRUbyhzdG9wLmNvb3JkaW5hdGVzLCA2KSk7XG4gICAgbGV0IGRpcmVjdGlvbnNVcmwgPSAnJztcbiAgICBpZiAoc3RvcHNDb29yZGluYXRlcy5sZW5ndGggPj0gMikge1xuICAgICAgZGlyZWN0aW9uc1VybCA9IGAke2RpcmVjdGlvbnNLZXl9PSR7c3RvcHNDb29yZGluYXRlcy5qb2luKCc7Jyl9YDtcbiAgICAgIHJldHVybiBgJHtsb2NhdGlvbi5vcmlnaW59JHtsb2NhdGlvbi5wYXRobmFtZX0/JHtjb250ZXh0fXRvb2w9ZGlyZWN0aW9ucyZzaWRlbmF2PTEmJHtkaXJlY3Rpb25zVXJsfSR7cm91dGluZ09wdGlvbnN9YDtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcHJpbnREaXJlY3Rpb25zKCkge1xuICAgIHRoaXMuc3RlcEZlYXR1cmVTdG9yZS5jbGVhcigpO1xuICAgIHRoaXMuZGlzYWJsZWQkLm5leHQodHJ1ZSk7XG4gICAgdGhpcy5kaXJlY3Rpb25zU2VydmljZVxuICAgICAgLmRvd25sb2FkRGlyZWN0aW9uKFxuICAgICAgICB0aGlzLnJvdXRlc0ZlYXR1cmVTdG9yZS5tYXAsXG4gICAgICAgIHRoaXMuYWN0aXZlUm91dGUucHJvcGVydGllcy5kaXJlY3Rpb25cbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmRpc2FibGVkJC5uZXh0KGZhbHNlKTtcbiAgICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiaWdvLWZvcm0tYnV0dG9uLWdyb3VwXCI+XG4gIDxidXR0b25cbiAgICBtYXQtaWNvbi1idXR0b25cbiAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxuICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmRpcmVjdGlvbnNGb3JtLmFkZFN0b3AnIHwgdHJhbnNsYXRlXCJcbiAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgIChjbGljayk9XCJhZGRTdG9wKClcIlxuICA+XG4gICAgPG1hdC1pY29uPmFkZF9sb2NhdGlvbl9hbHQ8L21hdC1pY29uPlxuICA8L2J1dHRvbj5cbiAgPGJ1dHRvblxuICAgIG1hdC1pY29uLWJ1dHRvblxuICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXG4gICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgKm5nSWY9XCJcbiAgICAgIChyb3V0ZXNGZWF0dXJlU3RvcmUuY291bnQkIHwgYXN5bmMpID49IDEgfHxcbiAgICAgIChzdG9wc1N0b3JlLmNvdW50JCB8IGFzeW5jKSA+PSAxXG4gICAgXCJcbiAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5kaXJlY3Rpb25zRm9ybS5yZXNldERpcmVjdGlvbnNCdG4nIHwgdHJhbnNsYXRlXCJcbiAgICBjb2xvcj1cIndhcm5cIlxuICAgIChjbGljayk9XCJyZXNldFN0b3BzKClcIlxuICA+XG4gICAgPG1hdC1pY29uPnJlc3RvcmVfcGFnZTwvbWF0LWljb24+XG4gIDwvYnV0dG9uPlxuICA8YnV0dG9uXG4gICAgbWF0LWljb24tYnV0dG9uXG4gICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcbiAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAqbmdJZj1cIihyb3V0ZXNGZWF0dXJlU3RvcmUuY291bnQkIHwgYXN5bmMpID49IDFcIlxuICAgIChjbGljayk9XCJ6b29tUm91dGUoKVwiXG4gICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8uZGlyZWN0aW9uc0Zvcm0uem9vbVJvdXRlJyB8IHRyYW5zbGF0ZVwiXG4gICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgPlxuICAgIDxtYXQtaWNvbj56b29tX2luPC9tYXQtaWNvbj5cbiAgPC9idXR0b24+XG4gIDxidXR0b25cbiAgICBtYXQtaWNvbi1idXR0b25cbiAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxuICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgICpuZ0lmPVwiKHJvdXRlc0ZlYXR1cmVTdG9yZS5jb3VudCQgfCBhc3luYykgPj0gMVwiXG4gICAgKGNsaWNrKT1cImNvcHlEaXJlY3Rpb25zVG9DbGlwYm9hcmQoKVwiXG4gICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8uZGlyZWN0aW9uc0Zvcm0uY29weScgfCB0cmFuc2xhdGVcIlxuICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gID5cbiAgICA8bWF0LWljb24+Y29udGVudF9jb3B5PC9tYXQtaWNvbj5cbiAgPC9idXR0b24+XG4gIDxidXR0b25cbiAgICBtYXQtaWNvbi1idXR0b25cbiAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxuICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgICpuZ0lmPVwiKHJvdXRlc0ZlYXR1cmVTdG9yZS5jb3VudCQgfCBhc3luYykgPj0gMVwiXG4gICAgKGNsaWNrKT1cImNvcHlMaW5rVG9DbGlwYm9hcmQoKVwiXG4gICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8uZGlyZWN0aW9uc0Zvcm0ubGluaycgfCB0cmFuc2xhdGVcIlxuICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gID5cbiAgICA8bWF0LWljb24+bGluazwvbWF0LWljb24+XG4gIDwvYnV0dG9uPlxuXG4gIDxidXR0b25cbiAgICBtYXQtaWNvbi1idXR0b25cbiAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxuICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgICpuZ0lmPVwiKHJvdXRlc0ZlYXR1cmVTdG9yZS5jb3VudCQgfCBhc3luYykgPj0gMVwiXG4gICAgKGNsaWNrKT1cInByaW50RGlyZWN0aW9ucygpXCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQkIHwgYXN5bmNcIlxuICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmRpcmVjdGlvbnNGb3JtLnByaW50JyB8IHRyYW5zbGF0ZVwiXG4gICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgPlxuICAgIDxtYXQtaWNvbj5wcmludDwvbWF0LWljb24+XG4gIDwvYnV0dG9uPlxuPC9kaXY+XG4iXX0=
246
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyZWN0aW9ucy1idXR0b25zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2RpcmVjdGlvbnMvZGlyZWN0aW9ucy1idXR0b25zL2RpcmVjdGlvbnMtYnV0dG9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9kaXJlY3Rpb25zL2RpcmVjdGlvbnMtYnV0dG9ucy9kaXJlY3Rpb25zLWJ1dHRvbnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBSXhDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsT0FBTyxFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzlFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFN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eUVBWGdCLFVBQVU7c0JBQXBDLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUNFLGtCQUFrQjtzQkFBNUMsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBQ0UsVUFBVTtzQkFBcEMsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBQ0Usa0JBQWtCO3NCQUE1QyxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFDRSxpQkFBaUI7c0JBQTNDLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXN5bmNQaXBlLCBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xuXG5pbXBvcnQgeyBMYW5ndWFnZVNlcnZpY2UgfSBmcm9tICdAaWdvMi9jb3JlL2xhbmd1YWdlJztcbmltcG9ydCB7IElnb0xhbmd1YWdlTW9kdWxlIH0gZnJvbSAnQGlnbzIvY29yZS9sYW5ndWFnZSc7XG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUvbWVzc2FnZSc7XG5pbXBvcnQgeyBSb3V0ZVNlcnZpY2UgfSBmcm9tICdAaWdvMi9jb3JlL3JvdXRlJztcbmltcG9ydCB7IENsaXBib2FyZCB9IGZyb20gJ0BpZ28yL3V0aWxzJztcblxuaW1wb3J0IHsgQ29vcmRpbmF0ZSB9IGZyb20gJ29sL2Nvb3JkaW5hdGUnO1xuXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IHJvdW5kQ29vcmRUbywgcm91bmRDb29yZFRvU3RyaW5nIH0gZnJvbSAnLi4vLi4vbWFwL3NoYXJlZC9tYXAudXRpbHMnO1xuaW1wb3J0IHsgRGlyZWN0aW9uc1NlcnZpY2UgfSBmcm9tICcuLi9zaGFyZWQnO1xuaW1wb3J0IHsgRmVhdHVyZVdpdGhEaXJlY3Rpb25zLCBJZ29TdGVwIH0gZnJvbSAnLi4vc2hhcmVkL2RpcmVjdGlvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIGZvcm1hdERpc3RhbmNlLFxuICBmb3JtYXREdXJhdGlvbixcbiAgZm9ybWF0U3RlcFxufSBmcm9tICcuLi9zaGFyZWQvZGlyZWN0aW9ucy51dGlscyc7XG5pbXBvcnQge1xuICBSb3V0ZXNGZWF0dXJlU3RvcmUsXG4gIFN0ZXBzRmVhdHVyZVN0b3JlLFxuICBTdG9wc1N0b3JlXG59IGZyb20gJy4uL3NoYXJlZC9zdG9yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2lnby1kaXJlY3Rpb25zLWJ1dHRvbnMnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGlyZWN0aW9ucy1idXR0b25zLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZGlyZWN0aW9ucy1idXR0b25zLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIE5nSWYsXG4gICAgQXN5bmNQaXBlLFxuICAgIElnb0xhbmd1YWdlTW9kdWxlXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgRGlyZWN0aW9uc0J1dHRvbnNDb21wb25lbnQge1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBjb250ZXh0VXJpOiBzdHJpbmc7XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHpvb21PbkFjdGl2ZVJvdXRlJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHN0b3BzU3RvcmU6IFN0b3BzU3RvcmU7XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHJvdXRlc0ZlYXR1cmVTdG9yZTogUm91dGVzRmVhdHVyZVN0b3JlO1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBzdGVwc0ZlYXR1cmVTdG9yZTogU3RlcHNGZWF0dXJlU3RvcmU7XG5cbiAgcHVibGljIGRvd25sb2FkRGlyZWN0aW9uc0J0bkRpc2FibGVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBsYW5ndWFnZVNlcnZpY2U6IExhbmd1YWdlU2VydmljZSxcbiAgICBwcml2YXRlIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHJvdXRlU2VydmljZTogUm91dGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGlyZWN0aW9uc1NlcnZpY2U6IERpcmVjdGlvbnNTZXJ2aWNlXG4gICkge31cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgYWN0aXZlIHJvdXRlIGZyb20gdGhlIHJvdXRlc0ZlYXR1cmVTdG9yZS5cbiAgICpcbiAgICogQHJldHVybiB7RmVhdHVyZVdpdGhEaXJlY3Rpb25zIHwgdW5kZWZpbmVkfSBUaGUgYWN0aXZlIHJvdXRlLCBvciB1bmRlZmluZWQgaWYgbm8gYWN0aXZlIHJvdXRlIGlzIGZvdW5kLlxuICAgKi9cbiAgZ2V0IGFjdGl2ZVJvdXRlKCk6IEZlYXR1cmVXaXRoRGlyZWN0aW9ucyB7XG4gICAgcmV0dXJuIHRoaXMucm91dGVzRmVhdHVyZVN0b3JlXG4gICAgICAuYWxsKClcbiAgICAgIC5maW5kKChyb3V0ZSkgPT4gcm91dGUucHJvcGVydGllcy5hY3RpdmUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyB0aGUgc3RvcHMgaW4gdGhlIHN0b3BzU3RvcmUgYnkgY2xlYXJpbmcgYWxsIHRoZSBzdG9wcy5cbiAgICpcbiAgICovXG4gIHJlc2V0U3RvcHMoKTogdm9pZCB7XG4gICAgdGhpcy5zdG9wc1N0b3JlLmNsZWFyU3RvcHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VycyB0aGUgem9vbSBvbiB0aGUgYWN0aXZlIHJvdXRlLlxuICAgKlxuICAgKi9cbiAgem9vbU9uQWN0aXZlUm91dGUoKTogdm9pZCB7XG4gICAgdGhpcy56b29tT25BY3RpdmVSb3V0ZSQubmV4dCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvcGllcyB0aGUgZGlyZWN0aW9ucyB0byB0aGUgY2xpcGJvYXJkIGFuZCBkaXNwbGF5cyBhIHN1Y2Nlc3MgbWVzc2FnZSBpZiB0aGUgY29weSBpcyBzdWNjZXNzZnVsLlxuICAgKlxuICAgKi9cbiAgY29weURpcmVjdGlvbnNUb0NsaXBib2FyZCgpOiB2b2lkIHtcbiAgICBjb25zdCBkaXJlY3Rpb25zOiBzdHJpbmcgPSB0aGlzLmRpcmVjdGlvbnNUb1RleHQoKTtcbiAgICBjb25zdCBzdWNjZXNzZnVsOiBib29sZWFuID0gQ2xpcGJvYXJkLmNvcHkoZGlyZWN0aW9ucyk7XG4gICAgaWYgKHN1Y2Nlc3NmdWwpIHtcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2Uuc3VjY2VzcyhcbiAgICAgICAgJ2lnby5nZW8uZGlyZWN0aW9ucy5idXR0b25zLm1lc3NhZ2UuY29weURpcmVjdGlvbnMnXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb3BpZXMgdGhlIGxpbmsgdG8gdGhlIGNsaXBib2FyZCBhbmQgZGlzcGxheXMgYSBzdWNjZXNzIG1lc3NhZ2UgaWYgdGhlIGNvcHkgaXMgc3VjY2Vzc2Z1bC5cbiAgICpcbiAgICovXG4gIGNvcHlMaW5rVG9DbGlwYm9hcmQoKTogdm9pZCB7XG4gICAgY29uc3QgY29weVN1Y2Nlc3NmdWw6IGJvb2xlYW4gPSBDbGlwYm9hcmQuY29weSh0aGlzLmdldExpbmsoKSk7XG4gICAgaWYgKGNvcHlTdWNjZXNzZnVsKSB7XG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnN1Y2Nlc3MoXG4gICAgICAgICdpZ28uZ2VvLmRpcmVjdGlvbnMuYnV0dG9ucy5tZXNzYWdlLmNvcHlMaW5rJ1xuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRG93bmxvYWRzIHRoZSBkaXJlY3Rpb25zLlxuICAgKlxuICAgKi9cbiAgZG93bmxvYWREaXJlY3Rpb25zKCk6IHZvaWQge1xuICAgIHRoaXMuc3RlcHNGZWF0dXJlU3RvcmUuY2xlYXIoKTtcbiAgICB0aGlzLmRvd25sb2FkRGlyZWN0aW9uc0J0bkRpc2FibGVkID0gdHJ1ZTtcbiAgICB0aGlzLmRpcmVjdGlvbnNTZXJ2aWNlXG4gICAgICAuZG93bmxvYWREaXJlY3Rpb25zKFxuICAgICAgICB0aGlzLnJvdXRlc0ZlYXR1cmVTdG9yZS5tYXAsXG4gICAgICAgIHRoaXMuYWN0aXZlUm91dGUucHJvcGVydGllcy5kaXJlY3Rpb25zXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5kb3dubG9hZERpcmVjdGlvbnNCdG5EaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIGEgdGV4dCByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGlyZWN0aW9ucywgaW5jbHVkaW5nIHN1bW1hcnksIHN0b3BzLCBVUkwsIGFuZCBkaXJlY3Rpb25zLlxuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBkaXJlY3Rpb25zIGluIHRleHQgZm9ybWF0LlxuICAgKi9cbiAgcHJpdmF0ZSBkaXJlY3Rpb25zVG9UZXh0KCk6IHN0cmluZyB7XG4gICAgY29uc3QgaW5kZW50ID0gJ1xcdCc7XG4gICAgY29uc3QgbmV3TGluZSA9ICdcXG4nO1xuXG4gICAgbGV0IHN1bW1hcnk6IHN0cmluZyA9XG4gICAgICB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgJ2lnby5nZW8uZGlyZWN0aW9ucy5kaXJlY3Rpb25zVGV4dC5zdW1tYXJ5J1xuICAgICAgKSArXG4gICAgICAnOicgK1xuICAgICAgbmV3TGluZSArXG4gICAgICBpbmRlbnQgK1xuICAgICAgdGhpcy5hY3RpdmVSb3V0ZS5wcm9wZXJ0aWVzLmRpcmVjdGlvbnMudGl0bGU7XG5cbiAgICBjb25zdCBkaXN0YW5jZTogc3RyaW5nID0gZm9ybWF0RGlzdGFuY2UoXG4gICAgICB0aGlzLmFjdGl2ZVJvdXRlLnByb3BlcnRpZXMuZGlyZWN0aW9ucy5kaXN0YW5jZVxuICAgICk7XG4gICAgY29uc3QgZHVyYXRpb246IHN0cmluZyA9IGZvcm1hdER1cmF0aW9uKFxuICAgICAgdGhpcy5hY3RpdmVSb3V0ZS5wcm9wZXJ0aWVzLmRpcmVjdGlvbnMuZHVyYXRpb25cbiAgICApO1xuXG4gICAgaWYgKGRpc3RhbmNlICYmIGR1cmF0aW9uKSB7XG4gICAgICBzdW1tYXJ5ICs9ICcgKCcgKyBkaXN0YW5jZSArICcgLSAnICsgZHVyYXRpb24gKyAnKSc7XG4gICAgfVxuXG4gICAgc3VtbWFyeSArPSBuZXdMaW5lICsgbmV3TGluZTtcblxuICAgIGxldCBzdG9wczogc3RyaW5nID1cbiAgICAgIHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAnaWdvLmdlby5kaXJlY3Rpb25zLmRpcmVjdGlvbnNUZXh0LnN0b3BMaXN0J1xuICAgICAgKSArXG4gICAgICAnOicgK1xuICAgICAgbmV3TGluZTtcblxuICAgIGxldCBzdG9wTnVtYmVyID0gMTtcbiAgICB0aGlzLnN0b3BzU3RvcmUudmlldy5hbGwoKS5mb3JFYWNoKChzdG9wKSA9PiB7XG4gICAgICBsZXQgY29vcmRzID0gJyc7XG4gICAgICBsZXQgc3RvcFRleHQgPSAnJztcbiAgICAgIGlmIChzdG9wLnRleHQgIT09IHJvdW5kQ29vcmRUb1N0cmluZyhzdG9wLmNvb3JkaW5hdGVzLCA2KS5qb2luKCcsICcpKSB7XG4gICAgICAgIHN0b3BUZXh0ID0gc3RvcC50ZXh0O1xuICAgICAgICBjb29yZHMgPSBgICgke3JvdW5kQ29vcmRUb1N0cmluZyhzdG9wLmNvb3JkaW5hdGVzLCA2KS5qb2luKCcsICcpfSlgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RvcFRleHQgPSByb3VuZENvb3JkVG9TdHJpbmcoc3RvcC5jb29yZGluYXRlcywgNikuam9pbignLCAnKTtcbiAgICAgIH1cblxuICAgICAgc3RvcHMgPVxuICAgICAgICBzdG9wcyArXG4gICAgICAgIGluZGVudCArXG4gICAgICAgIHN0b3BOdW1iZXIudG9Mb2NhbGVTdHJpbmcoKSArXG4gICAgICAgICcuICcgK1xuICAgICAgICBzdG9wVGV4dCArXG4gICAgICAgIGNvb3JkcyArXG4gICAgICAgIG5ld0xpbmU7XG4gICAgICBzdG9wTnVtYmVyKys7XG4gICAgfSk7XG4gICAgc3RvcHMgKz0gbmV3TGluZTtcblxuICAgIGNvbnN0IHVybDogc3RyaW5nID1cbiAgICAgIHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAnaWdvLmdlby5kaXJlY3Rpb25zLmRpcmVjdGlvbnNUZXh0LmxpbmsnXG4gICAgICApICtcbiAgICAgICc6JyArXG4gICAgICBuZXdMaW5lICtcbiAgICAgIGluZGVudCArXG4gICAgICB0aGlzLmdldExpbmsoKSArXG4gICAgICBuZXdMaW5lICtcbiAgICAgIG5ld0xpbmU7XG5cbiAgICBsZXQgZGlyZWN0aW9uczogc3RyaW5nID1cbiAgICAgIHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmRpcmVjdGlvbnMuZGlyZWN0aW9ucycpICtcbiAgICAgICc6JyArXG4gICAgICBuZXdMaW5lO1xuXG4gICAgdGhpcy5hY3RpdmVSb3V0ZS5wcm9wZXJ0aWVzLmRpcmVjdGlvbnMuc3RlcHMuZm9yRWFjaChcbiAgICAgIChzdGVwLCBzdGVwSW5kZXgsIHN0ZXBzKSA9PiB7XG4gICAgICAgIGNvbnN0IGRpc3RhbmNlOiBzdHJpbmcgPSBmb3JtYXREaXN0YW5jZShzdGVwLmRpc3RhbmNlKTtcbiAgICAgICAgY29uc3QgZHVyYXRpb246IHN0cmluZyA9IGZvcm1hdER1cmF0aW9uKHN0ZXAuZHVyYXRpb24pO1xuICAgICAgICBpZiAoKGRpc3RhbmNlICYmIGR1cmF0aW9uKSB8fCBzdGVwSW5kZXggPT09IHN0ZXBzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICBjb25zdCBpbnN0cnVjdGlvbjogc3RyaW5nID0gdGhpcy5nZXRGb3JtYXR0ZWRTdGVwSW5zdHJ1Y3Rpb24oXG4gICAgICAgICAgICBzdGVwLFxuICAgICAgICAgICAgc3RlcEluZGV4XG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBmb3JtYXR0ZWREaXN0YW5jZUR1cmF0aW9uOiBzdHJpbmcgPVxuICAgICAgICAgICAgZGlzdGFuY2UgJiYgZHVyYXRpb24gPyBgICgke2Rpc3RhbmNlfSAtICR7ZHVyYXRpb259KSBgIDogJyc7XG4gICAgICAgICAgZGlyZWN0aW9ucyA9XG4gICAgICAgICAgICBkaXJlY3Rpb25zICtcbiAgICAgICAgICAgIGluZGVudCArXG4gICAgICAgICAgICAnLSAnICtcbiAgICAgICAgICAgIGluc3RydWN0aW9uICtcbiAgICAgICAgICAgIGZvcm1hdHRlZERpc3RhbmNlRHVyYXRpb24gK1xuICAgICAgICAgICAgbmV3TGluZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG5cbiAgICBjb25zdCBkaXJlY3Rpb25zQm9keTogc3RyaW5nID0gc3VtbWFyeSArIHN0b3BzICsgdXJsICsgZGlyZWN0aW9ucztcblxuICAgIHJldHVybiBkaXJlY3Rpb25zQm9keTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtYXRzIGEgc3RlcC5cbiAgICpcbiAgICogQHBhcmFtIHtJZ29TdGVwfSBzdGVwIC0gVGhlIHN0ZXAgdG8gZm9ybWF0LlxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RlcEluZGV4IC0gVGhlIGluZGV4IG9mIHRoZSBzdGVwIGluIHRoZSBkaXJlY3Rpb25zLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgaW5zdHJ1Y3Rpb24gZm9yIHRoZSBzdGVwLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRGb3JtYXR0ZWRTdGVwSW5zdHJ1Y3Rpb24oXG4gICAgc3RlcDogSWdvU3RlcCxcbiAgICBzdGVwSW5kZXg6IG51bWJlclxuICApOiBzdHJpbmcge1xuICAgIHJldHVybiBmb3JtYXRTdGVwKFxuICAgICAgc3RlcCxcbiAgICAgIHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLFxuICAgICAgc3RlcEluZGV4ID09PSB0aGlzLmFjdGl2ZVJvdXRlLnByb3BlcnRpZXMuZGlyZWN0aW9ucy5zdGVwcy5sZW5ndGggLSAxXG4gICAgKS5pbnN0cnVjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgYSBsaW5rIGJhc2VkIG9uIHRoZSBjdXJyZW50IHJvdXRlIGFuZCBzdG9wcy5cbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nIHwgdW5kZWZpbmVkfSBUaGUgZ2VuZXJhdGVkIGxpbmssIG9yIHVuZGVmaW5lZCBpZiB0aGUgcm91dGUgc2VydmljZSBpcyBub3QgYXZhaWxhYmxlLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRMaW5rKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLnJvdXRlU2VydmljZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBjb250ZXh0ID0gJyc7XG4gICAgaWYgKHRoaXMuY29udGV4dFVyaSkge1xuICAgICAgY29udGV4dCA9IGBjb250ZXh0PSR7dGhpcy5jb250ZXh0VXJpfSZgO1xuICAgIH1cblxuICAgIGNvbnN0IHJvdXRlSW5kZXg6IG51bWJlciA9IHRoaXMucm91dGVzRmVhdHVyZVN0b3JlXG4gICAgICAuYWxsKClcbiAgICAgIC5tYXAoKGRpcmVjdGlvbikgPT4gZGlyZWN0aW9uLnByb3BlcnRpZXMuaWQpXG4gICAgICAuaW5kZXhPZih0aGlzLmFjdGl2ZVJvdXRlLnByb3BlcnRpZXMuaWQpO1xuICAgIGxldCByb3V0aW5nT3B0aW9ucyA9ICcnO1xuICAgIGlmIChyb3V0ZUluZGV4ICE9PSAwKSB7XG4gICAgICBjb25zdCByb3V0aW5nT3B0aW9uc0tleTogc3RyaW5nIHwgYm9vbGVhbiA9XG4gICAgICAgIHRoaXMucm91dGVTZXJ2aWNlLm9wdGlvbnMuZGlyZWN0aW9uc09wdGlvbnNLZXk7XG4gICAgICByb3V0aW5nT3B0aW9ucyA9IGAmJHtyb3V0aW5nT3B0aW9uc0tleX09cmVzdWx0OiR7cm91dGVJbmRleH1gO1xuICAgIH1cbiAgICBjb25zdCBkaXJlY3Rpb25zS2V5OiBzdHJpbmcgfCBib29sZWFuID1cbiAgICAgIHRoaXMucm91dGVTZXJ2aWNlLm9wdGlvbnMuZGlyZWN0aW9uc0Nvb3JkS2V5O1xuICAgIGNvbnN0IHN0b3BzQ29vcmRpbmF0ZXM6IENvb3JkaW5hdGVbXSA9IHRoaXMuc3RvcHNTdG9yZS52aWV3XG4gICAgICAuYWxsKClcbiAgICAgIC5tYXAoKHN0b3ApID0+IHJvdW5kQ29vcmRUbyhzdG9wLmNvb3JkaW5hdGVzLCA2KSk7XG4gICAgbGV0IGRpcmVjdGlvbnNVcmwgPSAnJztcbiAgICBpZiAoc3RvcHNDb29yZGluYXRlcy5sZW5ndGggPj0gMikge1xuICAgICAgZGlyZWN0aW9uc1VybCA9IGAke2RpcmVjdGlvbnNLZXl9PSR7c3RvcHNDb29yZGluYXRlcy5qb2luKCc7Jyl9YDtcbiAgICAgIHJldHVybiBgJHtsb2NhdGlvbi5vcmlnaW59JHtsb2NhdGlvbi5wYXRobmFtZX0/JHtjb250ZXh0fXRvb2w9ZGlyZWN0aW9ucyZzaWRlbmF2PTEmJHtkaXJlY3Rpb25zVXJsfSR7cm91dGluZ09wdGlvbnN9YDtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG59XG4iLCI8YnV0dG9uXG4gIG1hdC1pY29uLWJ1dHRvblxuICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5kaXJlY3Rpb25zLmJ1dHRvbnMucmVzZXRTdG9wcycgfCB0cmFuc2xhdGVcIlxuICBjb2xvcj1cIndhcm5cIlxuICAoY2xpY2spPVwicmVzZXRTdG9wcygpXCJcbj5cbiAgPG1hdC1pY29uPnJlc3RhcnRfYWx0PC9tYXQtaWNvbj5cbjwvYnV0dG9uPlxuPGJ1dHRvblxuICBtYXQtaWNvbi1idXR0b25cbiAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8uZGlyZWN0aW9ucy5idXR0b25zLnpvb21PblJvdXRlJyB8IHRyYW5zbGF0ZVwiXG4gIGNvbG9yPVwicHJpbWFyeVwiXG4gIChjbGljayk9XCJ6b29tT25BY3RpdmVSb3V0ZSgpXCJcbj5cbiAgPG1hdC1pY29uPmZyYW1lX2luc3BlY3Q8L21hdC1pY29uPlxuPC9idXR0b24+XG48YnV0dG9uXG4gIG1hdC1pY29uLWJ1dHRvblxuICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5kaXJlY3Rpb25zLmJ1dHRvbnMuY29weURpcmVjdGlvbnMnIHwgdHJhbnNsYXRlXCJcbiAgY29sb3I9XCJwcmltYXJ5XCJcbiAgKGNsaWNrKT1cImNvcHlEaXJlY3Rpb25zVG9DbGlwYm9hcmQoKVwiXG4+XG4gIDxtYXQtaWNvbj5jb250ZW50X2NvcHk8L21hdC1pY29uPlxuPC9idXR0b24+XG48YnV0dG9uXG4gIG1hdC1pY29uLWJ1dHRvblxuICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5kaXJlY3Rpb25zLmJ1dHRvbnMuY29weUxpbmsnIHwgdHJhbnNsYXRlXCJcbiAgY29sb3I9XCJwcmltYXJ5XCJcbiAgKGNsaWNrKT1cImNvcHlMaW5rVG9DbGlwYm9hcmQoKVwiXG4+XG4gIDxtYXQtaWNvbj5saW5rPC9tYXQtaWNvbj5cbjwvYnV0dG9uPlxuXG48YnV0dG9uXG4gIG1hdC1pY29uLWJ1dHRvblxuICBbZGlzYWJsZWRdPVwiZG93bmxvYWREaXJlY3Rpb25zQnRuRGlzYWJsZWRcIlxuICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5kaXJlY3Rpb25zLmJ1dHRvbnMuZG93bmxvYWREaXJlY3Rpb25zJyB8IHRyYW5zbGF0ZVwiXG4gIGNvbG9yPVwicHJpbWFyeVwiXG4gIChjbGljayk9XCJkb3dubG9hZERpcmVjdGlvbnMoKVwiXG4+XG4gIDxtYXQtaWNvbj5kb3dubG9hZDwvbWF0LWljb24+XG48L2J1dHRvbj5cbiJdfQ==