@igo2/geo 1.14.1 → 1.15.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 (502) hide show
  1. package/assets/icons/cross_black_18px.svg +88 -88
  2. package/assets/icons/place_blue_36px.svg +55 -55
  3. package/assets/icons/place_green_36px.svg +55 -55
  4. package/assets/icons/place_red_36px.svg +55 -55
  5. package/assets/icons/place_yellow_36px.svg +55 -55
  6. package/esm2020/lib/catalog/catalog-browser/catalog-browser-group.component.mjs +18 -14
  7. package/esm2020/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs +67 -29
  8. package/esm2020/lib/catalog/catalog-browser/catalog-browser.component.mjs +25 -22
  9. package/esm2020/lib/catalog/catalog-browser/catalog-browser.module.mjs +1 -1
  10. package/esm2020/lib/catalog/catalog-library/add-catalog-dialog.component.mjs +2 -2
  11. package/esm2020/lib/catalog/catalog-library/catalog-library-item.component.mjs +2 -2
  12. package/esm2020/lib/catalog/catalog-library/catalog-library.component.mjs +7 -12
  13. package/esm2020/lib/catalog/catalog-library/catalog-library.module.mjs +1 -1
  14. package/esm2020/lib/catalog/catalog.module.mjs +1 -1
  15. package/esm2020/lib/catalog/shared/catalog.abstract.mjs +1 -1
  16. package/esm2020/lib/catalog/shared/catalog.enum.mjs +1 -1
  17. package/esm2020/lib/catalog/shared/catalog.interface.mjs +1 -1
  18. package/esm2020/lib/catalog/shared/catalog.service.mjs +3 -5
  19. package/esm2020/lib/datasource/datasource.module.mjs +1 -1
  20. package/esm2020/lib/datasource/shared/capabilities.service.mjs +2 -2
  21. package/esm2020/lib/datasource/shared/datasource.service.mjs +27 -31
  22. package/esm2020/lib/datasource/shared/datasources/any-datasource.interface.mjs +1 -1
  23. package/esm2020/lib/datasource/shared/datasources/any-datasource.mjs +1 -1
  24. package/esm2020/lib/datasource/shared/datasources/arcgisrest-datasource.interface.mjs +1 -1
  25. package/esm2020/lib/datasource/shared/datasources/arcgisrest-datasource.mjs +1 -1
  26. package/esm2020/lib/datasource/shared/datasources/carto-datasource.interface.mjs +1 -1
  27. package/esm2020/lib/datasource/shared/datasources/carto-datasource.mjs +1 -1
  28. package/esm2020/lib/datasource/shared/datasources/cluster-datasource.interface.mjs +1 -1
  29. package/esm2020/lib/datasource/shared/datasources/cluster-datasource.mjs +1 -1
  30. package/esm2020/lib/datasource/shared/datasources/data.service.mjs +1 -1
  31. package/esm2020/lib/datasource/shared/datasources/datasource.interface.mjs +1 -1
  32. package/esm2020/lib/datasource/shared/datasources/datasource.mjs +1 -1
  33. package/esm2020/lib/datasource/shared/datasources/feature-datasource.interface.mjs +1 -1
  34. package/esm2020/lib/datasource/shared/datasources/feature-datasource.mjs +1 -1
  35. package/esm2020/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.mjs +1 -1
  36. package/esm2020/lib/datasource/shared/datasources/imagearcgisrest-datasource.mjs +1 -1
  37. package/esm2020/lib/datasource/shared/datasources/mvt-datasource.interface.mjs +1 -1
  38. package/esm2020/lib/datasource/shared/datasources/mvt-datasource.mjs +1 -1
  39. package/esm2020/lib/datasource/shared/datasources/osm-datasource.interface.mjs +1 -1
  40. package/esm2020/lib/datasource/shared/datasources/osm-datasource.mjs +1 -1
  41. package/esm2020/lib/datasource/shared/datasources/tilearcgisrest-datasource.interface.mjs +1 -1
  42. package/esm2020/lib/datasource/shared/datasources/tilearcgisrest-datasource.mjs +1 -1
  43. package/esm2020/lib/datasource/shared/datasources/tiledebug-datasource.interface.mjs +1 -1
  44. package/esm2020/lib/datasource/shared/datasources/tiledebug-datasource.mjs +1 -1
  45. package/esm2020/lib/datasource/shared/datasources/websocket-datasource.interface.mjs +1 -1
  46. package/esm2020/lib/datasource/shared/datasources/websocket-datasource.mjs +1 -1
  47. package/esm2020/lib/datasource/shared/datasources/wfs-datasource.interface.mjs +1 -1
  48. package/esm2020/lib/datasource/shared/datasources/wfs-datasource.mjs +1 -1
  49. package/esm2020/lib/datasource/shared/datasources/wfs.service.mjs +1 -1
  50. package/esm2020/lib/datasource/shared/datasources/wms-datasource.interface.mjs +1 -1
  51. package/esm2020/lib/datasource/shared/datasources/wms-datasource.mjs +1 -1
  52. package/esm2020/lib/datasource/shared/datasources/wms-wfs.utils.mjs +1 -1
  53. package/esm2020/lib/datasource/shared/datasources/wmts-datasource.interface.mjs +1 -1
  54. package/esm2020/lib/datasource/shared/datasources/wmts-datasource.mjs +1 -1
  55. package/esm2020/lib/datasource/shared/datasources/xyz-datasource.interface.mjs +1 -1
  56. package/esm2020/lib/datasource/shared/datasources/xyz-datasource.mjs +1 -1
  57. package/esm2020/lib/datasource/shared/options/options-api.providers.mjs +1 -1
  58. package/esm2020/lib/datasource/shared/options/options-api.service.mjs +1 -1
  59. package/esm2020/lib/datasource/shared/options/options.service.mjs +1 -1
  60. package/esm2020/lib/datasource/utils/index.mjs +1 -2
  61. package/esm2020/lib/datasource/utils/tilegrid.mjs +1 -1
  62. package/esm2020/lib/directions/directions-buttons/directions-buttons.component.mjs +4 -10
  63. package/esm2020/lib/directions/directions-inputs/directions-inputs.component.mjs +2 -2
  64. package/esm2020/lib/directions/directions-results/directions-results.component.mjs +2 -2
  65. package/esm2020/lib/directions/directions-sources/directions-source.mjs +1 -1
  66. package/esm2020/lib/directions/directions-sources/directions-source.provider.mjs +1 -1
  67. package/esm2020/lib/directions/directions-sources/osrm-directions-source.mjs +1 -1
  68. package/esm2020/lib/directions/directions.component.mjs +2 -2
  69. package/esm2020/lib/directions/directions.module.mjs +1 -1
  70. package/esm2020/lib/directions/shared/directions-source.service.mjs +1 -1
  71. package/esm2020/lib/directions/shared/directions.interface.mjs +1 -1
  72. package/esm2020/lib/directions/shared/directions.service.mjs +1 -1
  73. package/esm2020/lib/directions/shared/directions.utils.mjs +2 -2
  74. package/esm2020/lib/directions/shared/store.mjs +1 -1
  75. package/esm2020/lib/download/download-button/download-button.component.mjs +2 -2
  76. package/esm2020/lib/download/download.module.mjs +1 -1
  77. package/esm2020/lib/download/shared/download.interface.mjs +1 -1
  78. package/esm2020/lib/download/shared/download.service.mjs +5 -8
  79. package/esm2020/lib/draw/draw/draw-layer-popup.component.mjs +2 -2
  80. package/esm2020/lib/draw/draw/draw-popup.component.mjs +3 -3
  81. package/esm2020/lib/draw/draw/draw-shorcuts.component.mjs +2 -2
  82. package/esm2020/lib/draw/draw/draw.component.mjs +11 -10
  83. package/esm2020/lib/draw/draw/draw.module.mjs +1 -1
  84. package/esm2020/lib/draw/drawingTool.module.mjs +1 -1
  85. package/esm2020/lib/draw/shared/draw-icon.service.mjs +1 -1
  86. package/esm2020/lib/draw/shared/draw.enum.mjs +1 -17
  87. package/esm2020/lib/draw/shared/draw.interface.mjs +1 -1
  88. package/esm2020/lib/draw/shared/draw.utils.mjs +1 -1
  89. package/esm2020/lib/draw/shared/index.mjs +1 -2
  90. package/esm2020/lib/feature/feature-details/feature-details.component.mjs +4 -5
  91. package/esm2020/lib/feature/feature-details/feature-details.directive.mjs +1 -1
  92. package/esm2020/lib/feature/feature-details/feature-details.module.mjs +1 -1
  93. package/esm2020/lib/feature/feature-form/feature-form.component.mjs +2 -2
  94. package/esm2020/lib/feature/feature-form/feature-form.module.mjs +1 -1
  95. package/esm2020/lib/feature/feature.module.mjs +1 -1
  96. package/esm2020/lib/feature/shared/feature.interfaces.mjs +1 -1
  97. package/esm2020/lib/feature/shared/feature.utils.mjs +7 -5
  98. package/esm2020/lib/feature/shared/store.mjs +10 -1
  99. package/esm2020/lib/feature/shared/strategies/in-map-extent.mjs +1 -1
  100. package/esm2020/lib/feature/shared/strategies/in-map-resolution.mjs +1 -1
  101. package/esm2020/lib/feature/shared/strategies/index.mjs +2 -1
  102. package/esm2020/lib/feature/shared/strategies/loading-layer.mjs +1 -1
  103. package/esm2020/lib/feature/shared/strategies/loading.mjs +1 -1
  104. package/esm2020/lib/feature/shared/strategies/search.mjs +150 -0
  105. package/esm2020/lib/feature/shared/strategies/selection.mjs +1 -1
  106. package/esm2020/lib/feature/shared/strategies.utils.mjs +1 -1
  107. package/esm2020/lib/filter/filter.module.mjs +1 -1
  108. package/esm2020/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +2 -2
  109. package/esm2020/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +2 -2
  110. package/esm2020/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +2 -2
  111. package/esm2020/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.mjs +2 -2
  112. package/esm2020/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +2 -2
  113. package/esm2020/lib/filter/ogc-filterable-form/ogc-filterable-form.component.mjs +2 -2
  114. package/esm2020/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +2 -2
  115. package/esm2020/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.mjs +1 -1
  116. package/esm2020/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs +2 -2
  117. package/esm2020/lib/filter/shared/filterable-datasource.pipe.mjs +1 -1
  118. package/esm2020/lib/filter/shared/ogc-filter-time.service.mjs +1 -1
  119. package/esm2020/lib/filter/shared/ogc-filter.enum.mjs +1 -1
  120. package/esm2020/lib/filter/shared/ogc-filter.interface.mjs +1 -1
  121. package/esm2020/lib/filter/shared/ogc-filter.mjs +1 -1
  122. package/esm2020/lib/filter/shared/ogc-filter.service.mjs +1 -1
  123. package/esm2020/lib/filter/shared/spatial-filter.enum.mjs +1 -1
  124. package/esm2020/lib/filter/shared/spatial-filter.service.mjs +1 -1
  125. package/esm2020/lib/filter/shared/time-filter.enum.mjs +1 -1
  126. package/esm2020/lib/filter/shared/time-filter.interface.mjs +1 -1
  127. package/esm2020/lib/filter/shared/time-filter.service.mjs +1 -1
  128. package/esm2020/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +5 -5
  129. package/esm2020/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs +6 -7
  130. package/esm2020/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +2 -2
  131. package/esm2020/lib/filter/time-filter-button/time-filter-button.component.mjs +2 -2
  132. package/esm2020/lib/filter/time-filter-form/time-filter-form.component.mjs +2 -2
  133. package/esm2020/lib/filter/time-filter-item/time-filter-item.component.mjs +2 -2
  134. package/esm2020/lib/filter/time-filter-list/time-filter-list-binding.directive.mjs +1 -1
  135. package/esm2020/lib/filter/time-filter-list/time-filter-list.component.mjs +2 -2
  136. package/esm2020/lib/geo.module.mjs +5 -1
  137. package/esm2020/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs +13 -12
  138. package/esm2020/lib/geometry/geometry-form-field/geometry-form-field.component.mjs +2 -2
  139. package/esm2020/lib/geometry/geometry-form-field/geometry-form-field.module.mjs +1 -1
  140. package/esm2020/lib/geometry/geometry.module.mjs +1 -1
  141. package/esm2020/lib/geometry/shared/controls/draw.mjs +1 -1
  142. package/esm2020/lib/geometry/shared/controls/modify.mjs +1 -1
  143. package/esm2020/lib/geometry/shared/controls/slice.mjs +1 -1
  144. package/esm2020/lib/geometry/shared/geometry.errors.mjs +1 -1
  145. package/esm2020/lib/geometry/shared/geometry.interfaces.mjs +1 -1
  146. package/esm2020/lib/geometry/shared/geometry.utils.mjs +1 -1
  147. package/esm2020/lib/import-export/export-button/export-button.component.mjs +2 -2
  148. package/esm2020/lib/import-export/import-export/import-export.component.mjs +53 -45
  149. package/esm2020/lib/import-export/import-export.module.mjs +5 -9
  150. package/esm2020/lib/import-export/index.mjs +1 -2
  151. package/esm2020/lib/import-export/shared/drop-geo-file.directive.mjs +31 -14
  152. package/esm2020/lib/import-export/shared/export.interface.mjs +1 -1
  153. package/esm2020/lib/import-export/shared/export.service.mjs +3 -3
  154. package/esm2020/lib/import-export/shared/export.type.mjs +1 -1
  155. package/esm2020/lib/import-export/shared/export.utils.mjs +8 -17
  156. package/esm2020/lib/import-export/shared/import.errors.mjs +1 -1
  157. package/esm2020/lib/import-export/shared/import.interface.mjs +1 -1
  158. package/esm2020/lib/import-export/shared/import.service.mjs +1 -1
  159. package/esm2020/lib/import-export/shared/import.utils.mjs +58 -91
  160. package/esm2020/lib/layer/index.mjs +1 -2
  161. package/esm2020/lib/layer/layer-item/layer-item.component.mjs +2 -2
  162. package/esm2020/lib/layer/layer-legend/layer-legend.component.mjs +3 -3
  163. package/esm2020/lib/layer/layer-legend-item/layer-legend-item.component.mjs +2 -2
  164. package/esm2020/lib/layer/layer-legend-list/layer-legend-list-binding.directive.mjs +1 -1
  165. package/esm2020/lib/layer/layer-legend-list/layer-legend-list.component.mjs +2 -2
  166. package/esm2020/lib/layer/layer-list/layer-list-binding.directive.mjs +1 -1
  167. package/esm2020/lib/layer/layer-list/layer-list.component.mjs +2 -2
  168. package/esm2020/lib/layer/layer-list/layer-list.enum.mjs +1 -1
  169. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.component.mjs +2 -2
  170. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.interface.mjs +1 -1
  171. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.service.mjs +1 -1
  172. package/esm2020/lib/layer/layer.module.mjs +6 -11
  173. package/esm2020/lib/layer/shared/clusterParam.mjs +1 -1
  174. package/esm2020/lib/layer/shared/index.mjs +1 -3
  175. package/esm2020/lib/layer/shared/layer.service.mjs +80 -29
  176. package/esm2020/lib/layer/shared/layers/any-layer.interface.mjs +1 -1
  177. package/esm2020/lib/layer/shared/layers/any-layer.mjs +1 -1
  178. package/esm2020/lib/layer/shared/layers/image-layer.interface.mjs +1 -1
  179. package/esm2020/lib/layer/shared/layers/image-layer.mjs +6 -7
  180. package/esm2020/lib/layer/shared/layers/layer.interface.mjs +1 -1
  181. package/esm2020/lib/layer/shared/layers/layer.mjs +5 -3
  182. package/esm2020/lib/layer/shared/layers/tile-layer.interface.mjs +1 -1
  183. package/esm2020/lib/layer/shared/layers/tile-layer.mjs +1 -1
  184. package/esm2020/lib/layer/shared/layers/vector-layer.interface.mjs +1 -1
  185. package/esm2020/lib/layer/shared/layers/vector-layer.mjs +153 -6
  186. package/esm2020/lib/layer/shared/layers/vectortile-layer.interface.mjs +1 -1
  187. package/esm2020/lib/layer/shared/layers/vectortile-layer.mjs +1 -1
  188. package/esm2020/lib/layer/track-feature-button/track-feature-button.component.mjs +2 -2
  189. package/esm2020/lib/layer/utils/image-watcher.mjs +3 -6
  190. package/esm2020/lib/layer/utils/layer.utils.mjs +2 -2
  191. package/esm2020/lib/layer/utils/outputLegend.mjs +3 -2
  192. package/esm2020/lib/layer/utils/tile-watcher.mjs +1 -1
  193. package/esm2020/lib/layer/utils/vector-watcher.mjs +1 -1
  194. package/esm2020/lib/map/baselayers-switcher/baselayers-switcher.animation.mjs +1 -1
  195. package/esm2020/lib/map/baselayers-switcher/baselayers-switcher.component.mjs +2 -2
  196. package/esm2020/lib/map/baselayers-switcher/mini-basemap.component.mjs +17 -8
  197. package/esm2020/lib/map/geolocate-button/geolocate-button.component.mjs +2 -2
  198. package/esm2020/lib/map/info-section/info-section.component.mjs +2 -2
  199. package/esm2020/lib/map/map-browser/map-browser.component.mjs +3 -3
  200. package/esm2020/lib/map/map-center/map-center.component.mjs +2 -2
  201. package/esm2020/lib/map/map.module.mjs +1 -1
  202. package/esm2020/lib/map/menu-button/menu-button.component.mjs +3 -3
  203. package/esm2020/lib/map/offline-button/offline-button.component.mjs +34 -57
  204. package/esm2020/lib/map/rotation-button/rotation-button.component.mjs +2 -2
  205. package/esm2020/lib/map/shared/controllers/controller.mjs +1 -1
  206. package/esm2020/lib/map/shared/controllers/geolocation.mjs +151 -36
  207. package/esm2020/lib/map/shared/controllers/view.mjs +1 -1
  208. package/esm2020/lib/map/shared/hover-feature.directive.mjs +24 -73
  209. package/esm2020/lib/map/shared/linkedLayers.utils.mjs +3 -3
  210. package/esm2020/lib/map/shared/map-pointer-position.directive.mjs +1 -1
  211. package/esm2020/lib/map/shared/map.interface.mjs +1 -1
  212. package/esm2020/lib/map/shared/map.mjs +7 -5
  213. package/esm2020/lib/map/shared/map.service.mjs +1 -1
  214. package/esm2020/lib/map/shared/map.utils.mjs +2 -1
  215. package/esm2020/lib/map/shared/mapOffline.directive.mjs +50 -115
  216. package/esm2020/lib/map/shared/projection.interfaces.mjs +1 -1
  217. package/esm2020/lib/map/shared/projection.service.mjs +1 -1
  218. package/esm2020/lib/map/shared/projection.utils.mjs +1 -1
  219. package/esm2020/lib/map/swipe-control/swipe-control.component.mjs +3 -3
  220. package/esm2020/lib/map/utils/layer-watcher.mjs +1 -1
  221. package/esm2020/lib/map/wake-lock-button/wake-lock-button.component.mjs +24 -35
  222. package/esm2020/lib/map/zoom-button/zoom-button.component.mjs +2 -2
  223. package/esm2020/lib/measure/measure.module.mjs +1 -1
  224. package/esm2020/lib/measure/measurer/measure-format.pipe.mjs +1 -1
  225. package/esm2020/lib/measure/measurer/measurer-dialog.component.mjs +2 -2
  226. package/esm2020/lib/measure/measurer/measurer-item.component.mjs +2 -2
  227. package/esm2020/lib/measure/measurer/measurer.component.mjs +2 -2
  228. package/esm2020/lib/measure/measurer/measurer.module.mjs +1 -1
  229. package/esm2020/lib/measure/shared/measure.enum.mjs +1 -1
  230. package/esm2020/lib/measure/shared/measure.interfaces.mjs +1 -1
  231. package/esm2020/lib/measure/shared/measure.utils.mjs +1 -1
  232. package/esm2020/lib/metadata/metadata-button/metadata-button.component.mjs +3 -3
  233. package/esm2020/lib/metadata/metadata.module.mjs +1 -1
  234. package/esm2020/lib/metadata/shared/metadata.interface.mjs +1 -1
  235. package/esm2020/lib/metadata/shared/metadata.service.mjs +1 -1
  236. package/esm2020/lib/offline/geoDB/configFileToGeoDB.service.mjs +4 -4
  237. package/esm2020/lib/offline/geoDB/geoDB.enums.mjs +1 -1
  238. package/esm2020/lib/offline/geoDB/geoDB.interface.mjs +1 -1
  239. package/esm2020/lib/offline/geoDB/geoDB.service.mjs +2 -2
  240. package/esm2020/lib/offline/index.mjs +2 -1
  241. package/esm2020/lib/offline/layerDB/index.mjs +3 -0
  242. package/esm2020/lib/offline/layerDB/layerDB.interface.mjs +2 -0
  243. package/esm2020/lib/offline/layerDB/layerDB.service.mjs +76 -0
  244. package/esm2020/lib/offline/shared/geo-network.service.mjs +1 -1
  245. package/esm2020/lib/overlay/overlay.module.mjs +1 -1
  246. package/esm2020/lib/overlay/shared/index.mjs +1 -2
  247. package/esm2020/lib/overlay/shared/overlay.directive.mjs +1 -1
  248. package/esm2020/lib/overlay/shared/overlay.enum.mjs +1 -1
  249. package/esm2020/lib/overlay/shared/overlay.mjs +1 -1
  250. package/esm2020/lib/overlay/shared/overlay.service.mjs +1 -1
  251. package/esm2020/lib/overlay/shared/overlay.utils.mjs +2 -88
  252. package/esm2020/lib/print/print/print.component.mjs +7 -18
  253. package/esm2020/lib/print/print-form/print-form.component.mjs +210 -101
  254. package/esm2020/lib/print/print.module.mjs +1 -1
  255. package/esm2020/lib/print/shared/geopdf.mjs +1 -1
  256. package/esm2020/lib/print/shared/index.mjs +1 -1
  257. package/esm2020/lib/print/shared/print.interface.mjs +1 -1
  258. package/esm2020/lib/print/shared/print.service.mjs +179 -56
  259. package/esm2020/lib/print/shared/print.type.mjs +1 -1
  260. package/esm2020/lib/query/query.module.mjs +1 -1
  261. package/esm2020/lib/query/shared/query-search-source.mjs +1 -1
  262. package/esm2020/lib/query/shared/query-search-source.providers.mjs +1 -1
  263. package/esm2020/lib/query/shared/query.directive.mjs +1 -1
  264. package/esm2020/lib/query/shared/query.interfaces.mjs +1 -1
  265. package/esm2020/lib/query/shared/query.service.mjs +144 -32
  266. package/esm2020/lib/query/shared/query.utils.mjs +1 -1
  267. package/esm2020/lib/search/search-bar/search-bar.component.mjs +28 -9
  268. package/esm2020/lib/search/search-bar/search-bar.module.mjs +1 -1
  269. package/esm2020/lib/search/search-bar/search-url-param.directive.mjs +1 -1
  270. package/esm2020/lib/search/search-results/save-feature-dialog.component.mjs +118 -0
  271. package/esm2020/lib/search/search-results/search-results-add-button.component.mjs +269 -34
  272. package/esm2020/lib/search/search-results/search-results-item.component.mjs +37 -14
  273. package/esm2020/lib/search/search-results/search-results.component.mjs +172 -58
  274. package/esm2020/lib/search/search-results/search-results.module.mjs +36 -5
  275. package/esm2020/lib/search/search-selector/search-selector.component.mjs +2 -2
  276. package/esm2020/lib/search/search-selector/search-selector.module.mjs +1 -1
  277. package/esm2020/lib/search/search-settings/search-settings.component.mjs +33 -9
  278. package/esm2020/lib/search/search-settings/search-settings.module.mjs +1 -1
  279. package/esm2020/lib/search/search.module.mjs +1 -1
  280. package/esm2020/lib/search/shared/search-pointer-summary.directive.mjs +3 -30
  281. package/esm2020/lib/search/shared/search-source-service.providers.mjs +1 -1
  282. package/esm2020/lib/search/shared/search-source.service.mjs +9 -1
  283. package/esm2020/lib/search/shared/search.enums.mjs +1 -1
  284. package/esm2020/lib/search/shared/search.interfaces.mjs +1 -1
  285. package/esm2020/lib/search/shared/search.service.mjs +10 -7
  286. package/esm2020/lib/search/shared/search.utils.mjs +3 -3
  287. package/esm2020/lib/search/shared/sources/coordinates.interfaces.mjs +1 -1
  288. package/esm2020/lib/search/shared/sources/coordinates.mjs +17 -11
  289. package/esm2020/lib/search/shared/sources/coordinates.providers.mjs +4 -4
  290. package/esm2020/lib/search/shared/sources/icherche.interfaces.mjs +1 -1
  291. package/esm2020/lib/search/shared/sources/icherche.mjs +7 -7
  292. package/esm2020/lib/search/shared/sources/icherche.providers.mjs +1 -1
  293. package/esm2020/lib/search/shared/sources/ilayer.interfaces.mjs +1 -1
  294. package/esm2020/lib/search/shared/sources/ilayer.mjs +4 -4
  295. package/esm2020/lib/search/shared/sources/ilayer.providers.mjs +1 -1
  296. package/esm2020/lib/search/shared/sources/index.mjs +4 -1
  297. package/esm2020/lib/search/shared/sources/nominatim.mjs +2 -2
  298. package/esm2020/lib/search/shared/sources/nominatim.providers.mjs +1 -1
  299. package/esm2020/lib/search/shared/sources/source.interfaces.mjs +1 -1
  300. package/esm2020/lib/search/shared/sources/source.mjs +31 -1
  301. package/esm2020/lib/search/shared/sources/storedqueries.interfaces.mjs +1 -1
  302. package/esm2020/lib/search/shared/sources/storedqueries.mjs +1 -1
  303. package/esm2020/lib/search/shared/sources/storedqueries.providers.mjs +1 -1
  304. package/esm2020/lib/search/shared/sources/workspace.interfaces.mjs +2 -0
  305. package/esm2020/lib/search/shared/sources/workspace.mjs +186 -0
  306. package/esm2020/lib/search/shared/sources/workspace.providers.mjs +26 -0
  307. package/esm2020/lib/style/index.mjs +5 -0
  308. package/esm2020/lib/style/shared/datasource/esri-style-generator.mjs +357 -0
  309. package/esm2020/lib/style/shared/datasource/index.mjs +2 -0
  310. package/esm2020/lib/style/shared/feature/feature-style.mjs +141 -0
  311. package/esm2020/lib/style/shared/feature/index.mjs +2 -0
  312. package/esm2020/lib/style/shared/font.enum.mjs +17 -0
  313. package/esm2020/lib/style/shared/index.mjs +5 -0
  314. package/esm2020/lib/style/shared/overlay/index.mjs +3 -0
  315. package/esm2020/lib/style/shared/overlay/overlay-marker-style.utils.mjs +43 -0
  316. package/esm2020/lib/style/shared/overlay/overlay-style.utils.mjs +88 -0
  317. package/esm2020/lib/style/shared/vector/commonVectorStyle.mjs +75 -0
  318. package/esm2020/lib/style/shared/vector/conversion.utils.mjs +27 -0
  319. package/esm2020/lib/style/shared/vector/index.mjs +4 -0
  320. package/esm2020/lib/style/shared/vector/vector-style.interface.mjs +2 -0
  321. package/esm2020/lib/style/style-list/index.mjs +5 -0
  322. package/esm2020/lib/style/style-list/style-list.interface.mjs +2 -0
  323. package/esm2020/lib/style/style-list/style-list.module.mjs +23 -0
  324. package/esm2020/lib/style/style-list/style-list.provider.mjs +21 -0
  325. package/esm2020/lib/style/style-list/style-list.service.mjs +51 -0
  326. package/esm2020/lib/style/style-modal/drawing/index.mjs +2 -0
  327. package/esm2020/lib/style/style-modal/drawing/style-modal-drawing.component.mjs +288 -0
  328. package/esm2020/lib/style/style-modal/index.mjs +5 -0
  329. package/esm2020/lib/style/style-modal/layer/index.mjs +2 -0
  330. package/esm2020/lib/style/style-modal/layer/style-modal-layer.component.mjs +187 -0
  331. package/esm2020/lib/style/style-modal/layer-button/index.mjs +2 -0
  332. package/esm2020/lib/style/style-modal/layer-button/style-modal-layer-button.component.mjs +44 -0
  333. package/esm2020/lib/style/style-modal/shared/index.mjs +2 -0
  334. package/esm2020/lib/style/style-modal/shared/style-modal.interface.mjs +2 -0
  335. package/esm2020/lib/style/style-service/draw-style.service.mjs +187 -0
  336. package/esm2020/lib/style/style-service/index.mjs +3 -0
  337. package/esm2020/lib/style/style-service/style.service.mjs +356 -0
  338. package/esm2020/lib/style/style.module.mjs +74 -0
  339. package/esm2020/lib/toast/toast.component.mjs +3 -3
  340. package/esm2020/lib/toast/toast.module.mjs +1 -1
  341. package/esm2020/lib/utils/id-generator.mjs +1 -1
  342. package/esm2020/lib/utils/index.mjs +1 -3
  343. package/esm2020/lib/wkt/shared/wkt.service.mjs +15 -15
  344. package/esm2020/lib/wkt/wkt.module.mjs +1 -1
  345. package/esm2020/lib/workspace/confirmation-popup/confirmation-popup.component.mjs +2 -2
  346. package/esm2020/lib/workspace/confirmation-popup/confirmation-popup.module.mjs +1 -1
  347. package/esm2020/lib/workspace/confirmation-popup/index.mjs +1 -1
  348. package/esm2020/lib/workspace/shared/edition-workspace.mjs +1 -1
  349. package/esm2020/lib/workspace/shared/edition-workspace.service.mjs +19 -34
  350. package/esm2020/lib/workspace/shared/feature-workspace.mjs +1 -1
  351. package/esm2020/lib/workspace/shared/feature-workspace.service.mjs +10 -3
  352. package/esm2020/lib/workspace/shared/wfs-workspace.mjs +1 -1
  353. package/esm2020/lib/workspace/shared/wfs-workspace.service.mjs +2 -2
  354. package/esm2020/lib/workspace/shared/wms-workspace.service.mjs +3 -3
  355. package/esm2020/lib/workspace/shared/workspace.utils.mjs +1 -1
  356. package/esm2020/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs +2 -2
  357. package/esm2020/lib/workspace/widgets/ogc-filter/ogc-filter.module.mjs +1 -1
  358. package/esm2020/lib/workspace/widgets/widgets.mjs +1 -1
  359. package/esm2020/lib/workspace/workspace-selector/workspace-selector.directive.mjs +1 -1
  360. package/esm2020/lib/workspace/workspace-selector/workspace-selector.module.mjs +1 -1
  361. package/esm2020/lib/workspace/workspace-updator/workspace-updator.directive.mjs +1 -1
  362. package/esm2020/lib/workspace/workspace-updator/workspace-updator.module.mjs +1 -1
  363. package/esm2020/lib/workspace/workspace.module.mjs +1 -1
  364. package/esm2020/public_api.mjs +3 -1
  365. package/fesm2015/igo2-geo.mjs +7502 -5529
  366. package/fesm2015/igo2-geo.mjs.map +1 -1
  367. package/fesm2020/igo2-geo.mjs +8086 -6208
  368. package/fesm2020/igo2-geo.mjs.map +1 -1
  369. package/lib/catalog/catalog-browser/catalog-browser-group.component.d.ts +8 -15
  370. package/lib/catalog/catalog-browser/catalog-browser-layer.component.d.ts +11 -7
  371. package/lib/catalog/catalog-browser/catalog-browser.component.d.ts +3 -9
  372. package/lib/catalog/catalog-library/catalog-library.component.d.ts +2 -3
  373. package/lib/catalog/shared/catalog.interface.d.ts +10 -0
  374. package/lib/datasource/shared/datasources/datasource.interface.d.ts +13 -0
  375. package/lib/datasource/shared/datasources/feature-datasource.interface.d.ts +5 -0
  376. package/lib/datasource/utils/index.d.ts +0 -1
  377. package/lib/download/shared/download.service.d.ts +2 -3
  378. package/lib/draw/draw/draw.component.d.ts +3 -2
  379. package/lib/draw/shared/draw.enum.d.ts +0 -15
  380. package/lib/draw/shared/index.d.ts +0 -1
  381. package/lib/feature/shared/feature.interfaces.d.ts +5 -0
  382. package/lib/feature/shared/feature.utils.d.ts +4 -2
  383. package/lib/feature/shared/store.d.ts +7 -0
  384. package/lib/feature/shared/strategies/index.d.ts +1 -0
  385. package/lib/feature/shared/strategies/search.d.ts +55 -0
  386. package/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.d.ts +2 -3
  387. package/lib/geo.module.d.ts +3 -2
  388. package/lib/geometry/geometry-form-field/geometry-form-field-input.component.d.ts +5 -9
  389. package/lib/geometry/geometry-form-field/geometry-form-field.component.d.ts +3 -3
  390. package/lib/import-export/import-export/import-export.component.d.ts +9 -4
  391. package/lib/import-export/import-export.module.d.ts +1 -2
  392. package/lib/import-export/index.d.ts +0 -1
  393. package/lib/import-export/shared/drop-geo-file.directive.d.ts +10 -7
  394. package/lib/import-export/shared/export.service.d.ts +1 -1
  395. package/lib/import-export/shared/export.utils.d.ts +4 -4
  396. package/lib/import-export/shared/import.interface.d.ts +2 -0
  397. package/lib/import-export/shared/import.utils.d.ts +14 -12
  398. package/lib/layer/index.d.ts +0 -1
  399. package/lib/layer/layer.module.d.ts +19 -20
  400. package/lib/layer/shared/index.d.ts +0 -2
  401. package/lib/layer/shared/layer.service.d.ts +8 -5
  402. package/lib/layer/shared/layers/image-layer.d.ts +2 -3
  403. package/lib/layer/shared/layers/layer.d.ts +5 -1
  404. package/lib/layer/shared/layers/layer.interface.d.ts +2 -0
  405. package/lib/layer/shared/layers/vector-layer.d.ts +18 -2
  406. package/lib/layer/shared/layers/vector-layer.interface.d.ts +8 -7
  407. package/lib/layer/shared/layers/vectortile-layer.interface.d.ts +2 -4
  408. package/lib/layer/utils/image-watcher.d.ts +2 -3
  409. package/lib/map/baselayers-switcher/mini-basemap.component.d.ts +7 -4
  410. package/lib/map/offline-button/offline-button.component.d.ts +10 -18
  411. package/lib/map/shared/controllers/geolocation.d.ts +17 -2
  412. package/lib/map/shared/hover-feature.directive.d.ts +2 -10
  413. package/lib/map/shared/map.d.ts +2 -2
  414. package/lib/map/shared/map.utils.d.ts +1 -0
  415. package/lib/map/shared/mapOffline.directive.d.ts +4 -7
  416. package/lib/map/wake-lock-button/wake-lock-button.component.d.ts +3 -6
  417. package/lib/offline/geoDB/geoDB.service.d.ts +1 -1
  418. package/lib/offline/index.d.ts +1 -0
  419. package/lib/offline/layerDB/index.d.ts +2 -0
  420. package/lib/offline/layerDB/layerDB.interface.d.ts +7 -0
  421. package/lib/offline/layerDB/layerDB.service.d.ts +36 -0
  422. package/lib/overlay/shared/index.d.ts +0 -1
  423. package/lib/overlay/shared/overlay.utils.d.ts +0 -11
  424. package/lib/print/print-form/print-form.component.d.ts +2 -0
  425. package/lib/print/shared/print.service.d.ts +16 -1
  426. package/lib/query/shared/query.interfaces.d.ts +8 -1
  427. package/lib/query/shared/query.service.d.ts +5 -3
  428. package/lib/search/search-bar/search-bar.component.d.ts +12 -2
  429. package/lib/search/search-results/save-feature-dialog.component.d.ts +32 -0
  430. package/lib/search/search-results/search-results-add-button.component.d.ts +28 -2
  431. package/lib/search/search-results/search-results-item.component.d.ts +5 -1
  432. package/lib/search/search-results/search-results.component.d.ts +5 -1
  433. package/lib/search/search-results/search-results.module.d.ts +18 -10
  434. package/lib/search/search-settings/search-settings.component.d.ts +7 -1
  435. package/lib/search/shared/search-pointer-summary.directive.d.ts +0 -9
  436. package/lib/search/shared/search-source.service.d.ts +7 -0
  437. package/lib/search/shared/search.interfaces.d.ts +1 -1
  438. package/lib/search/shared/search.service.d.ts +3 -1
  439. package/lib/search/shared/sources/coordinates.d.ts +1 -1
  440. package/lib/search/shared/sources/coordinates.providers.d.ts +3 -3
  441. package/lib/search/shared/sources/index.d.ts +3 -0
  442. package/lib/search/shared/sources/source.d.ts +7 -1
  443. package/lib/search/shared/sources/workspace.d.ts +33 -0
  444. package/lib/search/shared/sources/workspace.interfaces.d.ts +9 -0
  445. package/lib/search/shared/sources/workspace.providers.d.ts +17 -0
  446. package/lib/style/index.d.ts +4 -0
  447. package/lib/style/shared/datasource/index.d.ts +1 -0
  448. package/lib/style/shared/feature/feature-style.d.ts +18 -0
  449. package/lib/style/shared/feature/index.d.ts +1 -0
  450. package/lib/style/shared/font.enum.d.ts +15 -0
  451. package/lib/style/shared/index.d.ts +4 -0
  452. package/lib/style/shared/overlay/index.d.ts +2 -0
  453. package/lib/style/shared/overlay/overlay-style.utils.d.ts +19 -0
  454. package/lib/{utils → style/shared/vector}/commonVectorStyle.d.ts +4 -4
  455. package/lib/style/shared/vector/conversion.utils.d.ts +22 -0
  456. package/lib/style/shared/vector/index.d.ts +3 -0
  457. package/lib/style/shared/vector/vector-style.interface.d.ts +69 -0
  458. package/lib/style/style-modal/drawing/index.d.ts +1 -0
  459. package/lib/style/style-modal/drawing/style-modal-drawing.component.d.ts +31 -0
  460. package/lib/style/style-modal/index.d.ts +4 -0
  461. package/lib/style/style-modal/layer/index.d.ts +1 -0
  462. package/lib/style/style-modal/layer/style-modal-layer.component.d.ts +30 -0
  463. package/lib/style/style-modal/layer-button/index.d.ts +1 -0
  464. package/lib/style/style-modal/layer-button/style-modal-layer-button.component.d.ts +14 -0
  465. package/lib/style/style-modal/shared/index.d.ts +1 -0
  466. package/lib/style/style-modal/shared/style-modal.interface.d.ts +17 -0
  467. package/lib/{draw/shared → style/style-service}/draw-style.service.d.ts +3 -4
  468. package/lib/style/style-service/index.d.ts +2 -0
  469. package/lib/{layer/shared → style/style-service}/style.service.d.ts +5 -5
  470. package/lib/style/style.module.d.ts +22 -0
  471. package/lib/utils/index.d.ts +0 -2
  472. package/lib/workspace/shared/edition-workspace.service.d.ts +3 -4
  473. package/lib/workspace/shared/wms-workspace.service.d.ts +1 -1
  474. package/ngcc.config.js +3 -3
  475. package/package.json +17 -11
  476. package/public_api.d.ts +2 -0
  477. package/style/geo.theming.scss +12 -12
  478. package/esm2020/lib/datasource/utils/esri-style-generator.mjs +0 -357
  479. package/esm2020/lib/draw/shared/draw-style.service.mjs +0 -190
  480. package/esm2020/lib/import-export/style-list/index.mjs +0 -5
  481. package/esm2020/lib/import-export/style-list/style-list.interface.mjs +0 -2
  482. package/esm2020/lib/import-export/style-list/style-list.module.mjs +0 -23
  483. package/esm2020/lib/import-export/style-list/style-list.provider.mjs +0 -21
  484. package/esm2020/lib/import-export/style-list/style-list.service.mjs +0 -51
  485. package/esm2020/lib/layer/shared/style.service.mjs +0 -356
  486. package/esm2020/lib/layer/shared/vector-style.interface.mjs +0 -2
  487. package/esm2020/lib/layer/style-modal/index.mjs +0 -2
  488. package/esm2020/lib/layer/style-modal/style-modal.component.mjs +0 -288
  489. package/esm2020/lib/overlay/shared/overlay-marker-style.utils.mjs +0 -69
  490. package/esm2020/lib/utils/commonVectorStyle.interface.mjs +0 -2
  491. package/esm2020/lib/utils/commonVectorStyle.mjs +0 -75
  492. package/lib/layer/shared/vector-style.interface.d.ts +0 -38
  493. package/lib/layer/style-modal/index.d.ts +0 -1
  494. package/lib/layer/style-modal/style-modal.component.d.ts +0 -42
  495. package/lib/utils/commonVectorStyle.interface.d.ts +0 -16
  496. /package/lib/{datasource/utils → style/shared/datasource}/esri-style-generator.d.ts +0 -0
  497. /package/lib/{overlay/shared → style/shared/overlay}/overlay-marker-style.utils.d.ts +0 -0
  498. /package/lib/{import-export → style}/style-list/index.d.ts +0 -0
  499. /package/lib/{import-export → style}/style-list/style-list.interface.d.ts +0 -0
  500. /package/lib/{import-export → style}/style-list/style-list.module.d.ts +0 -0
  501. /package/lib/{import-export → style}/style-list/style-list.provider.d.ts +0 -0
  502. /package/lib/{import-export → style}/style-list/style-list.service.d.ts +0 -0
@@ -1,41 +1,83 @@
1
- import { Component, Input, ChangeDetectionStrategy } from '@angular/core';
1
+ import { Component, Input, ChangeDetectionStrategy, } from '@angular/core';
2
2
  import { LAYER } from '../../layer/shared/layer.enums';
3
- import { BehaviorSubject } from 'rxjs';
3
+ import { BehaviorSubject, take } from 'rxjs';
4
+ import { SaveFeatureDialogComponent } from './save-feature-dialog.component';
5
+ import { VectorLayer } from '../../layer/shared/layers/vector-layer';
6
+ import { FeatureMotion, FeatureStore, FeatureStoreLoadingStrategy, FeatureStoreSelectionStrategy, tryAddLoadingStrategy, tryAddSelectionStrategy, tryBindStoreLayer } from '../../feature';
7
+ import { getTooltipsOfOlGeometry } from '../../measure';
8
+ import Stroke from 'ol/style/Stroke';
9
+ import Fill from 'ol/style/Fill';
10
+ import Style from 'ol/style/Style';
11
+ import Circle from 'ol/style/Circle';
12
+ import { Media } from '@igo2/core';
4
13
  import * as i0 from "@angular/core";
5
14
  import * as i1 from "../../layer/shared/layer.service";
6
- import * as i2 from "@angular/common";
7
- import * as i3 from "@angular/material/badge";
8
- import * as i4 from "@angular/material/tooltip";
9
- import * as i5 from "@angular/material/icon";
10
- import * as i6 from "@angular/material/button";
11
- import * as i7 from "@igo2/common";
12
- import * as i8 from "@ngx-translate/core";
15
+ import * as i2 from "@angular/material/dialog";
16
+ import * as i3 from "../../datasource";
17
+ import * as i4 from "@igo2/core";
18
+ import * as i5 from "@angular/common";
19
+ import * as i6 from "@angular/material/badge";
20
+ import * as i7 from "@angular/material/tooltip";
21
+ import * as i8 from "@angular/material/icon";
22
+ import * as i9 from "@angular/material/button";
23
+ import * as i10 from "@igo2/common";
24
+ import * as i11 from "@ngx-translate/core";
13
25
  function SearchResultAddButtonComponent_button_0_Template(rf, ctx) { if (rf & 1) {
14
- const _r2 = i0.ɵɵgetCurrentView();
15
- i0.ɵɵelementStart(0, "button", 1);
16
- i0.ɵɵlistener("mouseenter", function SearchResultAddButtonComponent_button_0_Template_button_mouseenter_0_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onMouseEvent($event)); })("mouseleave", function SearchResultAddButtonComponent_button_0_Template_button_mouseleave_0_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.onMouseEvent($event)); })("click", function SearchResultAddButtonComponent_button_0_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r4 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r4.onToggleClick($event)); });
26
+ const _r3 = i0.ɵɵgetCurrentView();
27
+ i0.ɵɵelementStart(0, "button", 2);
28
+ i0.ɵɵlistener("mouseenter", function SearchResultAddButtonComponent_button_0_Template_button_mouseenter_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.onMouseEvent($event)); })("mouseleave", function SearchResultAddButtonComponent_button_0_Template_button_mouseleave_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r4 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r4.onMouseEvent($event)); })("click", function SearchResultAddButtonComponent_button_0_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r5 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r5.onToggleClick($event)); });
17
29
  i0.ɵɵpipe(1, "translate");
18
30
  i0.ɵɵpipe(2, "async");
19
- i0.ɵɵpipe(3, "async");
20
- i0.ɵɵelement(4, "mat-icon", 2);
31
+ i0.ɵɵelement(3, "mat-icon", 3);
32
+ i0.ɵɵpipe(4, "async");
21
33
  i0.ɵɵpipe(5, "async");
22
34
  i0.ɵɵpipe(6, "async");
35
+ i0.ɵɵpipe(7, "async");
36
+ i0.ɵɵpipe(8, "async");
37
+ i0.ɵɵpipe(9, "async");
38
+ i0.ɵɵpipe(10, "async");
23
39
  i0.ɵɵelementEnd();
24
40
  } if (rf & 2) {
25
41
  const ctx_r0 = i0.ɵɵnextContext();
26
- i0.ɵɵproperty("matTooltip", i0.ɵɵpipeBind1(1, 4, i0.ɵɵpipeBind1(2, 6, ctx_r0.tooltip$)))("color", i0.ɵɵpipeBind1(3, 8, ctx_r0.isPreview$) ? "" : ctx_r0.added ? "warn" : "");
27
- i0.ɵɵadvance(4);
28
- i0.ɵɵproperty("matBadgeHidden", i0.ɵɵpipeBind1(5, 10, ctx_r0.inRange$))("svgIcon", i0.ɵɵpipeBind1(6, 12, ctx_r0.isPreview$) ? "plus" : ctx_r0.added ? "delete" : "plus");
42
+ i0.ɵɵproperty("matTooltip", i0.ɵɵpipeBind1(1, 6, ctx_r0.computeTooltip()))("color", i0.ɵɵpipeBind1(2, 8, ctx_r0.isPreview$) ? "" : ctx_r0.added ? "warn" : "");
43
+ i0.ɵɵadvance(3);
44
+ i0.ɵɵproperty("igoMatBadgeIcon", ctx_r0.getBadgeIcon())("matBadgeHidden", i0.ɵɵpipeBind1(4, 10, ctx_r0.inRange$) && i0.ɵɵpipeBind1(5, 12, ctx_r0.isVisible$) === true || i0.ɵɵpipeBind1(6, 14, ctx_r0.inRange$) && !ctx_r0.added || i0.ɵɵpipeBind1(7, 16, ctx_r0.inRange$) && i0.ɵɵpipeBind1(8, 18, ctx_r0.isPreview$))("matBadgeDisabled", i0.ɵɵpipeBind1(9, 20, ctx_r0.inRange$) === false)("svgIcon", i0.ɵɵpipeBind1(10, 22, ctx_r0.isPreview$) ? "plus" : ctx_r0.added ? "delete" : "plus");
45
+ } }
46
+ function SearchResultAddButtonComponent_button_1_Template(rf, ctx) { if (rf & 1) {
47
+ const _r7 = i0.ɵɵgetCurrentView();
48
+ i0.ɵɵelementStart(0, "button", 4);
49
+ i0.ɵɵlistener("click", function SearchResultAddButtonComponent_button_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r7); const ctx_r6 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r6.addFeatureToLayer()); });
50
+ i0.ɵɵpipe(1, "translate");
51
+ i0.ɵɵpipe(2, "async");
52
+ i0.ɵɵelement(3, "mat-icon", 5);
53
+ i0.ɵɵpipe(4, "async");
54
+ i0.ɵɵelementEnd();
55
+ } if (rf & 2) {
56
+ const ctx_r1 = i0.ɵɵnextContext();
57
+ i0.ɵɵproperty("id", !ctx_r1.isMobile ? "hide-save-search-result-btn" : "")("matTooltip", i0.ɵɵpipeBind1(1, 3, i0.ɵɵpipeBind1(2, 5, ctx_r1.addFeatureToLayerTooltip$)));
58
+ i0.ɵɵadvance(3);
59
+ i0.ɵɵproperty("matBadgeHidden", i0.ɵɵpipeBind1(4, 7, ctx_r1.inRange$));
29
60
  } }
30
61
  export class SearchResultAddButtonComponent {
31
- constructor(layerService) {
62
+ constructor(layerService, dialog, dataSourceService, mediaService) {
32
63
  this.layerService = layerService;
64
+ this.dialog = dialog;
65
+ this.dataSourceService = dataSourceService;
66
+ this.mediaService = mediaService;
33
67
  this.tooltip$ = new BehaviorSubject('igo.geo.catalog.layer.addToMap');
68
+ this.addFeatureToLayerTooltip$ = new BehaviorSubject('igo.geo.search.addToLayer');
34
69
  this.inRange$ = new BehaviorSubject(true);
70
+ this.isVisible$ = new BehaviorSubject(false);
35
71
  this.isPreview$ = new BehaviorSubject(false);
36
72
  this.layersSubcriptions = [];
37
73
  this.mouseInsideAdd = false;
74
+ /**
75
+ * show hide save search result in layer button
76
+ */
77
+ this.saveSearchResultInLayer = false;
38
78
  this._color = 'primary';
79
+ this.stores = [];
80
+ this.isMobile = false;
39
81
  }
40
82
  get color() {
41
83
  return this._color;
@@ -43,21 +85,37 @@ export class SearchResultAddButtonComponent {
43
85
  set color(value) {
44
86
  this._color = value;
45
87
  }
88
+ get allLayers() {
89
+ return this.map.layers.filter((layer) => String(layer.id).includes('igo-search-layer'));
90
+ }
46
91
  /**
47
92
  * @internal
48
93
  */
49
94
  ngOnInit() {
95
+ // check the view if is mobile or not
96
+ this.mediaService$$ = this.mediaService.media$.subscribe((media) => {
97
+ if (media === Media.Mobile) {
98
+ this.isMobile = true;
99
+ }
100
+ });
50
101
  if (this.layer.meta.dataType === 'Layer') {
51
102
  this.added =
52
103
  this.map.layers.findIndex(lay => lay.id === this.layer.data.sourceOptions.id) !== -1;
53
104
  }
105
+ this.layers$$ = this.map.layers$.subscribe(() => {
106
+ this.isVisible();
107
+ });
54
108
  this.resolution$$ = this.map.viewController.resolution$.subscribe(value => {
55
109
  this.isInResolutionsRange(value);
56
- this.tooltip$.next(this.computeTooltip());
110
+ this.isVisible();
57
111
  });
58
112
  }
59
113
  ngOnDestroy() {
60
114
  this.resolution$$.unsubscribe();
115
+ this.layers$$.unsubscribe();
116
+ if (this.mediaService$$) {
117
+ this.mediaService$$.unsubscribe();
118
+ }
61
119
  }
62
120
  /**
63
121
  * On mouse event, mouseenter /mouseleave
@@ -84,7 +142,7 @@ export class SearchResultAddButtonComponent {
84
142
  this.remove();
85
143
  }
86
144
  else {
87
- this.add();
145
+ this.add(event);
88
146
  }
89
147
  }
90
148
  this.isPreview$.next(false);
@@ -109,10 +167,10 @@ export class SearchResultAddButtonComponent {
109
167
  break;
110
168
  }
111
169
  }
112
- add() {
170
+ add(event) {
113
171
  if (!this.added) {
114
172
  this.added = true;
115
- this.addLayerToMap();
173
+ this.addLayerToMap(event);
116
174
  }
117
175
  }
118
176
  remove() {
@@ -126,7 +184,7 @@ export class SearchResultAddButtonComponent {
126
184
  /**
127
185
  * Emit added change event with added = true
128
186
  */
129
- addLayerToMap() {
187
+ addLayerToMap(event) {
130
188
  if (this.map === undefined) {
131
189
  return;
132
190
  }
@@ -139,7 +197,12 @@ export class SearchResultAddButtonComponent {
139
197
  }
140
198
  this.layersSubcriptions.push(this.layerService
141
199
  .createAsyncLayer(layerOptions)
142
- .subscribe(layer => this.map.addLayer(layer)));
200
+ .subscribe(layer => {
201
+ if (event.type === 'click') {
202
+ this.map.layersAddedByClick$.next([layer]);
203
+ }
204
+ this.map.addLayer(layer);
205
+ }));
143
206
  }
144
207
  /**
145
208
  * Emit added change event with added = false
@@ -159,11 +222,33 @@ export class SearchResultAddButtonComponent {
159
222
  const maxResolution = this.layer.data.maxResolution || Infinity;
160
223
  this.inRange$.next(resolution >= minResolution && resolution <= maxResolution);
161
224
  }
225
+ isVisible() {
226
+ if (this.layer?.data?.sourceOptions?.id) {
227
+ const oLayer = this.map.getLayerById(this.layer.data.sourceOptions.id);
228
+ oLayer ? this.isVisible$.next(oLayer.visible) : this.isVisible$.next(false);
229
+ }
230
+ }
231
+ getBadgeIcon() {
232
+ if (this.inRange$.value) {
233
+ return this.isVisible$.value ? '' : 'eye-off';
234
+ }
235
+ else {
236
+ return 'eye-off';
237
+ }
238
+ }
162
239
  computeTooltip() {
163
240
  if (this.added) {
164
- return this.inRange$.value
165
- ? 'igo.geo.catalog.layer.removeFromMap'
166
- : 'igo.geo.catalog.layer.removeFromMapOutRange';
241
+ if (this.isPreview$.value) {
242
+ return 'igo.geo.catalog.layer.addToMap';
243
+ }
244
+ else if (this.inRange$.value) {
245
+ return this.isVisible$.value
246
+ ? 'igo.geo.catalog.layer.removeFromMap'
247
+ : 'igo.geo.catalog.layer.removeFromMapNotVisible';
248
+ }
249
+ else {
250
+ return 'igo.geo.catalog.layer.removeFromMapOutRange';
251
+ }
167
252
  }
168
253
  else {
169
254
  return this.inRange$.value
@@ -171,23 +256,173 @@ export class SearchResultAddButtonComponent {
171
256
  : 'igo.geo.catalog.layer.addToMapOutRange';
172
257
  }
173
258
  }
259
+ addFeatureToLayer() {
260
+ if (this.layer.meta.dataType !== 'Feature') {
261
+ return;
262
+ }
263
+ const selectedFeature = this.layer;
264
+ const dialogRef = this.dialog.open(SaveFeatureDialogComponent, {
265
+ width: '700px',
266
+ data: {
267
+ feature: selectedFeature,
268
+ layers: this.allLayers
269
+ }
270
+ });
271
+ dialogRef.afterClosed().subscribe((data) => {
272
+ if (data) {
273
+ if (this.stores.length > 0) {
274
+ this.stores.map((store) => {
275
+ store.state.updateAll({ selected: false });
276
+ (store?.layer).visible = false;
277
+ return store;
278
+ });
279
+ }
280
+ // check if is new layer
281
+ if (typeof data.layer === 'string') {
282
+ this.createLayer(data.layer, data.feature);
283
+ }
284
+ else {
285
+ const activeStore = this.stores.find(store => store.layer.id === data.layer.id);
286
+ activeStore.layer.visible = true;
287
+ activeStore.layer.opacity = 1;
288
+ this.addFeature(data.feature, activeStore);
289
+ }
290
+ }
291
+ });
292
+ }
293
+ createLayer(layerTitle, selectedFeature) {
294
+ const activeStore = new FeatureStore([], {
295
+ map: this.map
296
+ });
297
+ const styles = [
298
+ new Style({
299
+ image: new Circle({
300
+ radius: 5,
301
+ stroke: new Stroke({
302
+ width: 1,
303
+ color: 'rgba(143,7,7,1)'
304
+ }),
305
+ fill: new Fill({
306
+ color: 'rgba(143,7,7,1)'
307
+ })
308
+ })
309
+ }),
310
+ new Style({
311
+ stroke: new Stroke({
312
+ width: 1,
313
+ color: 'rgba(143,7,7,1)'
314
+ }),
315
+ fill: new Fill({
316
+ color: 'rgba(0, 0, 255, 0.1)',
317
+ }),
318
+ })
319
+ ];
320
+ // set layer id
321
+ let layerCounterID = 0;
322
+ for (const layer of this.allLayers) {
323
+ let numberId = Number(layer.id.replace('igo-search-layer', ''));
324
+ layerCounterID = Math.max(numberId, layerCounterID);
325
+ }
326
+ this.dataSourceService
327
+ .createAsyncDataSource({
328
+ type: 'vector',
329
+ queryable: true
330
+ })
331
+ .pipe(take(1))
332
+ .subscribe((dataSource) => {
333
+ let searchLayer = new VectorLayer({
334
+ isIgoInternalLayer: true,
335
+ id: 'igo-search-layer' + ++layerCounterID,
336
+ title: layerTitle,
337
+ source: dataSource,
338
+ igoStyle: {
339
+ editable: false,
340
+ igoStyleObject: {
341
+ fill: { color: 'rgba(255,255,255,0.4)' },
342
+ stroke: { color: 'rgba(143,7,7,1)', width: 1 },
343
+ circle: {
344
+ fill: { color: 'rgba(255,255,255,0.4)', },
345
+ stroke: { color: 'rgba(143,7,7,1)', width: 1 },
346
+ radius: 5,
347
+ }
348
+ }
349
+ },
350
+ style: styles,
351
+ showInLayerList: true,
352
+ exportable: true,
353
+ workspace: {
354
+ enabled: true
355
+ }
356
+ });
357
+ tryBindStoreLayer(activeStore, searchLayer);
358
+ tryAddLoadingStrategy(activeStore, new FeatureStoreLoadingStrategy({
359
+ motion: FeatureMotion.None
360
+ }));
361
+ tryAddSelectionStrategy(activeStore, new FeatureStoreSelectionStrategy({
362
+ map: this.map,
363
+ motion: FeatureMotion.None,
364
+ many: true
365
+ }));
366
+ activeStore.layer.visible = true;
367
+ activeStore.source.ol.on('removefeature', (event) => {
368
+ const olGeometry = event.feature.getGeometry();
369
+ this.clearLabelsOfOlGeometry(olGeometry);
370
+ });
371
+ this.addFeature(selectedFeature, activeStore);
372
+ this.stores.push(activeStore);
373
+ });
374
+ }
375
+ addFeature(feature, activeStore) {
376
+ const newFeature = {
377
+ type: feature.data.type,
378
+ geometry: {
379
+ coordinates: feature.data.geometry.coordinates,
380
+ type: feature.data.geometry.type
381
+ },
382
+ projection: feature.data.projection,
383
+ properties: feature.data.properties,
384
+ meta: {
385
+ id: feature.meta.id
386
+ }
387
+ };
388
+ delete newFeature.properties.Route;
389
+ activeStore.update(newFeature);
390
+ activeStore.setLayerExtent();
391
+ activeStore.layer.ol.getSource().refresh();
392
+ }
393
+ clearLabelsOfOlGeometry(olGeometry) {
394
+ getTooltipsOfOlGeometry(olGeometry).forEach((olTooltip) => {
395
+ if (olTooltip && olTooltip.getMap()) {
396
+ this.map.ol.removeOverlay(olTooltip);
397
+ }
398
+ });
399
+ }
174
400
  }
175
- SearchResultAddButtonComponent.ɵfac = function SearchResultAddButtonComponent_Factory(t) { return new (t || SearchResultAddButtonComponent)(i0.ɵɵdirectiveInject(i1.LayerService)); };
176
- SearchResultAddButtonComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SearchResultAddButtonComponent, selectors: [["igo-search-add-button"]], inputs: { layer: "layer", added: "added", map: "map", color: "color" }, decls: 1, vars: 1, consts: [["igoStopPropagation", "", "mat-icon-button", "", "tooltip-position", "below", "matTooltipShowDelay", "500", 3, "matTooltip", "color", "mouseenter", "mouseleave", "click", 4, "ngIf"], ["igoStopPropagation", "", "mat-icon-button", "", "tooltip-position", "below", "matTooltipShowDelay", "500", 3, "matTooltip", "color", "mouseenter", "mouseleave", "click"], ["matBadge", "icon", "igoMatBadgeIcon", "eye-off", "igoMatBadgeInverseColor", "true", "matBadgeDisabled", "true", "matBadgeSize", "small", "matBadgePosition", "after", 3, "matBadgeHidden", "svgIcon"]], template: function SearchResultAddButtonComponent_Template(rf, ctx) { if (rf & 1) {
177
- i0.ɵɵtemplate(0, SearchResultAddButtonComponent_button_0_Template, 7, 14, "button", 0);
401
+ SearchResultAddButtonComponent.ɵfac = function SearchResultAddButtonComponent_Factory(t) { return new (t || SearchResultAddButtonComponent)(i0.ɵɵdirectiveInject(i1.LayerService), i0.ɵɵdirectiveInject(i2.MatDialog), i0.ɵɵdirectiveInject(i3.DataSourceService), i0.ɵɵdirectiveInject(i4.MediaService)); };
402
+ SearchResultAddButtonComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SearchResultAddButtonComponent, selectors: [["igo-search-add-button"]], inputs: { layer: "layer", store: "store", added: "added", map: "map", saveSearchResultInLayer: "saveSearchResultInLayer", color: "color", stores: "stores" }, decls: 2, vars: 2, consts: [["igoStopPropagation", "", "mat-icon-button", "", "tooltip-position", "below", "matTooltipShowDelay", "500", 3, "matTooltip", "color", "mouseenter", "mouseleave", "click", 4, "ngIf"], ["igoStopPropagation", "", "mat-icon-button", "", "tooltip-position", "below", "matTooltipShowDelay", "500", 3, "id", "matTooltip", "click", 4, "ngIf"], ["igoStopPropagation", "", "mat-icon-button", "", "tooltip-position", "below", "matTooltipShowDelay", "500", 3, "matTooltip", "color", "mouseenter", "mouseleave", "click"], ["matBadge", "icon", "igoMatBadgeColor", "rgba(0,0,0,0.87)", "igoMatBadgeBackgroundColor", "none", "igoMatBadgeInverseColor", "true", "matBadgeSize", "small", "matBadgePosition", "after", 3, "igoMatBadgeIcon", "matBadgeHidden", "matBadgeDisabled", "svgIcon"], ["igoStopPropagation", "", "mat-icon-button", "", "tooltip-position", "below", "matTooltipShowDelay", "500", 3, "id", "matTooltip", "click"], ["matBadge", "icon", "igoMatBadgeIcon", "eye-off", "igoMatBadgeInverseColor", "true", "matBadgeDisabled", "true", "matBadgeSize", "small", "matBadgePosition", "after", "svgIcon", "file-plus-outline", 3, "matBadgeHidden"]], template: function SearchResultAddButtonComponent_Template(rf, ctx) { if (rf & 1) {
403
+ i0.ɵɵtemplate(0, SearchResultAddButtonComponent_button_0_Template, 11, 24, "button", 0);
404
+ i0.ɵɵtemplate(1, SearchResultAddButtonComponent_button_1_Template, 5, 9, "button", 1);
178
405
  } if (rf & 2) {
179
406
  i0.ɵɵproperty("ngIf", ctx.layer.meta.dataType === "Layer");
180
- } }, dependencies: [i2.NgIf, i3.MatBadge, i4.MatTooltip, i5.MatIcon, i6.MatButton, i7.StopPropagationDirective, i7.IgoBadgeIconDirective, i2.AsyncPipe, i8.TranslatePipe], changeDetection: 0 });
407
+ i0.ɵɵadvance(1);
408
+ i0.ɵɵproperty("ngIf", ctx.layer.meta.dataType === "Feature" && ctx.saveSearchResultInLayer);
409
+ } }, dependencies: [i5.NgIf, i6.MatBadge, i7.MatTooltip, i8.MatIcon, i9.MatButton, i10.StopPropagationDirective, i10.IgoBadgeIconDirective, i5.AsyncPipe, i11.TranslatePipe], styles: ["#hide-save-search-result-btn[_ngcontent-%COMP%]{display:none}#show-save-search-result-btn[_ngcontent-%COMP%]{display:block}"], changeDetection: 0 });
181
410
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SearchResultAddButtonComponent, [{
182
411
  type: Component,
183
- args: [{ selector: 'igo-search-add-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\nigoStopPropagation\n(mouseenter)=\"onMouseEvent($event)\" (mouseleave)=\"onMouseEvent($event)\"\n*ngIf=\"layer.meta.dataType === 'Layer'\"\nmat-icon-button\ntooltip-position=\"below\"\nmatTooltipShowDelay=\"500\"\n[matTooltip]=\"(tooltip$ | async) | translate\"\n[color]=\"(isPreview$ | async) ? '' : added ? 'warn' : ''\"\n(click)=\"onToggleClick($event)\">\n<mat-icon\n matBadge=\"icon\"\n igoMatBadgeIcon=\"eye-off\"\n igoMatBadgeInverseColor=\"true\"\n [matBadgeHidden]=\"(inRange$ | async)\"\n matBadgeDisabled=\"true\"\n matBadgeSize=\"small\"\n matBadgePosition=\"after\"\n [svgIcon]=\"(isPreview$ | async) ? 'plus' : added ? 'delete' : 'plus'\">\n</mat-icon>\n</button>\n" }]
184
- }], function () { return [{ type: i1.LayerService }]; }, { layer: [{
412
+ args: [{ selector: 'igo-search-add-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\r\nigoStopPropagation\r\n(mouseenter)=\"onMouseEvent($event)\" (mouseleave)=\"onMouseEvent($event)\"\r\n*ngIf=\"layer.meta.dataType === 'Layer'\"\r\nmat-icon-button\r\ntooltip-position=\"below\"\r\nmatTooltipShowDelay=\"500\"\r\n[matTooltip]=\"computeTooltip() | translate\"\r\n[color]=\"(isPreview$ | async) ? '' : added ? 'warn' : ''\"\r\n(click)=\"onToggleClick($event)\">\r\n<mat-icon\r\n matBadge=\"icon\"\r\n [igoMatBadgeIcon]=\"getBadgeIcon()\"\r\n igoMatBadgeColor=\"rgba(0,0,0,0.87)\"\r\n igoMatBadgeBackgroundColor=\"none\"\r\n igoMatBadgeInverseColor=\"true\"\r\n [matBadgeHidden]=\"((inRange$ | async) && (isVisible$ | async) === true) || ((inRange$ | async) && !added) || ((inRange$ | async) && (isPreview$ | async))\"\r\n [matBadgeDisabled]=\"(inRange$ | async) === false\"\r\n matBadgeSize=\"small\"\r\n matBadgePosition=\"after\"\r\n [svgIcon]=\"(isPreview$ | async) ? 'plus' : added ? 'delete' : 'plus'\">\r\n</mat-icon>\r\n</button>\r\n\r\n<button\r\n[id]=\"(!isMobile) ? 'hide-save-search-result-btn' : ''\"\r\nigoStopPropagation\r\n*ngIf=\"layer.meta.dataType === 'Feature' && saveSearchResultInLayer\"\r\nmat-icon-button\r\ntooltip-position=\"below\"\r\nmatTooltipShowDelay=\"500\"\r\n[matTooltip]=\"(addFeatureToLayerTooltip$ | async) | translate\"\r\n(click)=\"addFeatureToLayer()\">\r\n<mat-icon\r\n matBadge=\"icon\"\r\n igoMatBadgeIcon=\"eye-off\"\r\n igoMatBadgeInverseColor=\"true\"\r\n [matBadgeHidden]=\"(inRange$ | async)\"\r\n matBadgeDisabled=\"true\"\r\n matBadgeSize=\"small\"\r\n matBadgePosition=\"after\"\r\n svgIcon=\"file-plus-outline\">\r\n</mat-icon>\r\n</button>\r\n", styles: ["#hide-save-search-result-btn{display:none}#show-save-search-result-btn{display:block}\n"] }]
413
+ }], function () { return [{ type: i1.LayerService }, { type: i2.MatDialog }, { type: i3.DataSourceService }, { type: i4.MediaService }]; }, { layer: [{
414
+ type: Input
415
+ }], store: [{
185
416
  type: Input
186
417
  }], added: [{
187
418
  type: Input
188
419
  }], map: [{
189
420
  type: Input
421
+ }], saveSearchResultInLayer: [{
422
+ type: Input
190
423
  }], color: [{
191
424
  type: Input
425
+ }], stores: [{
426
+ type: Input
192
427
  }] }); })();
193
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLXJlc3VsdHMtYWRkLWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9zZWFyY2gvc2VhcmNoLXJlc3VsdHMvc2VhcmNoLXJlc3VsdHMtYWRkLWJ1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9zZWFyY2gvc2VhcmNoLXJlc3VsdHMvc2VhcmNoLXJlc3VsdHMtYWRkLWJ1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCx1QkFBdUIsRUFHeEIsTUFBTSxlQUFlLENBQUM7QUFNdkIsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3ZELE9BQU8sRUFBZ0IsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7SUNickQsaUNBU2dDO0lBUGhDLDhMQUFjLGVBQUEsMkJBQW9CLENBQUEsSUFBQyxpTEFBZSxlQUFBLDJCQUFvQixDQUFBLElBQW5DLHVLQU8xQixlQUFBLDRCQUFxQixDQUFBLElBUEs7Ozs7SUFRbkMsOEJBU1c7OztJQUNYLGlCQUFTOzs7SUFiVCx3RkFBNkMsb0ZBQUE7SUFPM0MsZUFBcUM7SUFBckMsdUVBQXFDLGlHQUFBOztBRE92QyxNQUFNLE9BQU8sOEJBQThCO0lBc0N6QyxZQUFvQixZQUEwQjtRQUExQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQXJDdkMsYUFBUSxHQUE0QixJQUFJLGVBQWUsQ0FDNUQsZ0NBQWdDLENBQ2pDLENBQUM7UUFJSyxhQUFRLEdBQTZCLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRS9ELGVBQVUsR0FBNkIsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFakUsdUJBQWtCLEdBQUcsRUFBRSxD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OztRQWpCUiwwREFBcUM7O3VGRGtCekIsOEJBQThCO2NBTjFDLFNBQVM7MkJBQ0UsdUJBQXVCLG1CQUdoQix1QkFBdUIsQ0FBQyxNQUFNOytEQW1CdEMsS0FBSztrQkFBYixLQUFLO1lBS0csS0FBSztrQkFBYixLQUFLO1lBS0csR0FBRztrQkFBWCxLQUFLO1lBR0YsS0FBSztrQkFEUixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIE9uSW5pdCxcbiAgT25EZXN0cm95XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBTZWFyY2hSZXN1bHQgfSBmcm9tICcuLi9zaGFyZWQvc2VhcmNoLmludGVyZmFjZXMnO1xuaW1wb3J0IHsgSWdvTWFwIH0gZnJvbSAnLi4vLi4vbWFwL3NoYXJlZC9tYXAnO1xuaW1wb3J0IHsgTGF5ZXJPcHRpb25zIH0gZnJvbSAnLi4vLi4vbGF5ZXIvc2hhcmVkL2xheWVycy9sYXllci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTGF5ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbGF5ZXIvc2hhcmVkL2xheWVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgTEFZRVIgfSBmcm9tICcuLi8uLi9sYXllci9zaGFyZWQvbGF5ZXIuZW51bXMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaWdvLXNlYXJjaC1hZGQtYnV0dG9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NlYXJjaC1yZXN1bHRzLWFkZC1idXR0b24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zZWFyY2gtcmVzdWx0cy1hZGQtYnV0dG9uLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFNlYXJjaFJlc3VsdEFkZEJ1dHRvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHVibGljIHRvb2x0aXAkOiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoXG4gICAgJ2lnby5nZW8uY2F0YWxvZy5sYXllci5hZGRUb01hcCdcbiAgKTtcblxuICBwcml2YXRlIHJlc29sdXRpb24kJDogU3Vic2NyaXB0aW9uO1xuXG4gIHB1YmxpYyBpblJhbmdlJDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCh0cnVlKTtcblxuICBwdWJsaWMgaXNQcmV2aWV3JDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgcHJpdmF0ZSBsYXllcnNTdWJjcmlwdGlvbnMgPSBbXTtcblxuICBwcml2YXRlIGxhc3RUaW1lb3V0UmVxdWVzdDtcblxuICBwcml2YXRlIG1vdXNlSW5zaWRlQWRkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCkgbGF5ZXI6IFNlYXJjaFJlc3VsdDtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgbGF5ZXIgaXMgYWxyZWFkeSBhZGRlZCB0byB0aGUgbWFwXG4gICAqL1xuICBASW5wdXQoKSBhZGRlZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIG1hcCB0byBhZGQgdGhlIHNlYXJjaCByZXN1bHQgbGF5ZXIgdG9cbiAgICovXG4gIEBJbnB1dCgpIG1hcDogSWdvTWFwO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBjb2xvcigpIHtcbiAgICByZXR1cm4gdGhpcy5fY29sb3I7XG4gIH1cbiAgc2V0IGNvbG9yKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9jb2xvciA9IHZhbHVlO1xuICB9XG4gIHByaXZhdGUgX2NvbG9yID0gJ3ByaW1hcnknO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbGF5ZXJTZXJ2aWNlOiBMYXllclNlcnZpY2UpIHt9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubGF5ZXIubWV0YS5kYXRhVHlwZSA9PT0gJ0xheWVyJykge1xuICAgICAgdGhpcy5hZGRlZCA9XG4gICAgICAgIHRoaXMubWFwLmxheWVycy5maW5kSW5kZXgoXG4gICAgICAgICAgbGF5ID0+IGxheS5pZCA9PT0gdGhpcy5sYXllci5kYXRhLnNvdXJjZU9wdGlvbnMuaWRcbiAgICAgICAgKSAhPT0gLTE7XG4gICAgfVxuICAgIHRoaXMucmVzb2x1dGlvbiQkID0gdGhpcy5tYXAudmlld0NvbnRyb2xsZXIucmVzb2x1dGlvbiQuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIHRoaXMuaXNJblJlc29sdXRpb25zUmFuZ2UodmFsdWUpO1xuICAgICAgdGhpcy50b29sdGlwJC5uZXh0KHRoaXMuY29tcHV0ZVRvb2x0aXAoKSk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnJlc29sdXRpb24kJC51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9uIG1vdXNlIGV2ZW50LCBtb3VzZWVudGVyIC9tb3VzZWxlYXZlXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgb25Nb3VzZUV2ZW50KGV2ZW50KSB7XG4gICAgdGhpcy5vblRvZ2dsZUNsaWNrKGV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPbiB0b2dnbGUgYnV0dG9uIGNsaWNrLCBlbWl0IHRoZSBhZGRlZCBjaGFuZ2UgZXZlbnRcbiAgICogQGludGVybmFsXG4gICAqL1xuICBvblRvZ2dsZUNsaWNrKGV2ZW50KSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLmxhc3RUaW1lb3V0UmVxdWVzdCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmxhc3RUaW1lb3V0UmVxdWVzdCk7XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdtb3VzZWVudGVyJyAmJiB0aGlzLm1vdXNlSW5zaWRlQWRkICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHtcbiAgICAgIGNhc2UgJ2NsaWNrJzpcbiAgICAgICAgaWYgKCF0aGlzLmlzUHJldmlldyQudmFsdWUpIHtcbiAgICAgICAgICBpZiAodGhpcy5hZGRlZCkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmUoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hZGQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc1ByZXZpZXckLm5leHQoZmFsc2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ21vdXNlZW50ZXInOlxuICAgICAgICBpZiAoIXRoaXMuaXNQcmV2aWV3JC52YWx1ZSAmJiAhdGhpcy5hZGRlZCkge1xuICAgICAgICAgIHRoaXMubGFzdFRpbWVvdXRSZXF1ZXN0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFkZCgpO1xuICAgICAgICAgICAgdGhpcy5pc1ByZXZpZXckLm5leHQodHJ1ZSk7XG4gICAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1vdXNlSW5zaWRlQWRkID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdtb3VzZWxlYXZlJzpcbiAgICAgICAgaWYgKHRoaXMuaXNQcmV2aWV3JC52YWx1ZSkge1xuICAgICAgICAgIHRoaXMucmVtb3ZlKCk7XG4gICAgICAgICAgdGhpcy5pc1ByZXZpZXckLm5leHQoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubW91c2VJbnNpZGVBZGQgPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZCgpIHtcbiAgICBpZiAoIXRoaXMuYWRkZWQpIHtcbiAgICAgIHRoaXMuYWRkZWQgPSB0cnVlO1xuICAgICAgdGhpcy5hZGRMYXllclRvTWFwKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmUoKSB7XG4gICAgaWYgKHRoaXMuYWRkZWQpIHtcbiAgICAgIHRoaXMuYWRkZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMucmVtb3ZlTGF5ZXJGcm9tTWFwKCk7XG4gICAgICB0aGlzLmxheWVyc1N1YmNyaXB0aW9ucy5tYXAocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICAgICAgdGhpcy5sYXllcnNTdWJjcmlwdGlvbnMgPSBbXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRW1pdCBhZGRlZCBjaGFuZ2UgZXZlbnQgd2l0aCBhZGRlZCA9IHRydWVcbiAgICovXG4gIHByaXZhdGUgYWRkTGF5ZXJUb01hcCgpIHtcbiAgICBpZiAodGhpcy5tYXAgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmxheWVyLm1ldGEuZGF0YVR5cGUgIT09IExBWUVSKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGxheWVyT3B0aW9ucyA9ICh0aGlzLmxheWVyIGFzIFNlYXJjaFJlc3VsdDxMYXllck9wdGlvbnM+KS5kYXRhO1xuICAgIGlmIChsYXllck9wdGlvbnMuc291cmNlT3B0aW9ucy5vcHRpb25zRnJvbUFwaSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBsYXllck9wdGlvbnMuc291cmNlT3B0aW9ucy5vcHRpb25zRnJvbUFwaSA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMubGF5ZXJzU3ViY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmxheWVyU2VydmljZVxuICAgICAgICAuY3JlYXRlQXN5bmNMYXllcihsYXllck9wdGlvbnMpXG4gICAgICAgIC5zdWJzY3JpYmUobGF5ZXIgPT4gdGhpcy5tYXAuYWRkTGF5ZXIobGF5ZXIpKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRW1pdCBhZGRlZCBjaGFuZ2UgZXZlbnQgd2l0aCBhZGRlZCA9IGZhbHNlXG4gICAqL1xuICBwcml2YXRlIHJlbW92ZUxheWVyRnJvbU1hcCgpIHtcbiAgICBpZiAodGhpcy5tYXAgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmxheWVyLm1ldGEuZGF0YVR5cGUgIT09IExBWUVSKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IG9MYXllciA9IHRoaXMubWFwLmdldExheWVyQnlJZCh0aGlzLmxheWVyLmRhdGEuc291cmNlT3B0aW9ucy5pZCk7XG4gICAgdGhpcy5tYXAucmVtb3ZlTGF5ZXIob0xheWVyKTtcbiAgfVxuXG4gIGlzSW5SZXNvbHV0aW9uc1JhbmdlKHJlc29sdXRpb246IG51bWJlcikge1xuICAgIGNvbnN0IG1pblJlc29sdXRpb24gPSB0aGlzLmxheWVyLmRhdGEubWluUmVzb2x1dGlvbiB8fCAwO1xuICAgIGNvbnN0IG1heFJlc29sdXRpb24gPSB0aGlzLmxheWVyLmRhdGEubWF4UmVzb2x1dGlvbiB8fCBJbmZpbml0eTtcbiAgICB0aGlzLmluUmFuZ2UkLm5leHQoXG4gICAgICByZXNvbHV0aW9uID49IG1pblJlc29sdXRpb24gJiYgcmVzb2x1dGlvbiA8PSBtYXhSZXNvbHV0aW9uXG4gICAgKTtcbiAgfVxuXG4gIGNvbXB1dGVUb29sdGlwKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuYWRkZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmluUmFuZ2UkLnZhbHVlXG4gICAgICAgID8gJ2lnby5nZW8uY2F0YWxvZy5sYXllci5yZW1vdmVGcm9tTWFwJ1xuICAgICAgICA6ICdpZ28uZ2VvLmNhdGFsb2cubGF5ZXIucmVtb3ZlRnJvbU1hcE91dFJhbmdlJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuaW5SYW5nZSQudmFsdWVcbiAgICAgICAgPyAnaWdvLmdlby5jYXRhbG9nLmxheWVyLmFkZFRvTWFwJ1xuICAgICAgICA6ICdpZ28uZ2VvLmNhdGFsb2cubGF5ZXIuYWRkVG9NYXBPdXRSYW5nZSc7XG4gICAgfVxuICB9XG59XG4iLCI8YnV0dG9uXG5pZ29TdG9wUHJvcGFnYXRpb25cbihtb3VzZWVudGVyKT1cIm9uTW91c2VFdmVudCgkZXZlbnQpXCIgKG1vdXNlbGVhdmUpPVwib25Nb3VzZUV2ZW50KCRldmVudClcIlxuKm5nSWY9XCJsYXllci5tZXRhLmRhdGFUeXBlID09PSAnTGF5ZXInXCJcbm1hdC1pY29uLWJ1dHRvblxudG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcbm1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuW21hdFRvb2x0aXBdPVwiKHRvb2x0aXAkIHwgYXN5bmMpIHwgdHJhbnNsYXRlXCJcbltjb2xvcl09XCIoaXNQcmV2aWV3JCB8IGFzeW5jKSA/ICcnIDogYWRkZWQgPyAnd2FybicgOiAnJ1wiXG4oY2xpY2spPVwib25Ub2dnbGVDbGljaygkZXZlbnQpXCI+XG48bWF0LWljb25cbiAgbWF0QmFkZ2U9XCJpY29uXCJcbiAgaWdvTWF0QmFkZ2VJY29uPVwiZXllLW9mZlwiXG4gIGlnb01hdEJhZGdlSW52ZXJzZUNvbG9yPVwidHJ1ZVwiXG4gIFttYXRCYWRnZUhpZGRlbl09XCIoaW5SYW5nZSQgfCBhc3luYylcIlxuICBtYXRCYWRnZURpc2FibGVkPVwidHJ1ZVwiXG4gIG1hdEJhZGdlU2l6ZT1cInNtYWxsXCJcbiAgbWF0QmFkZ2VQb3NpdGlvbj1cImFmdGVyXCJcbiAgW3N2Z0ljb25dPVwiKGlzUHJldmlldyQgfCBhc3luYykgPyAncGx1cycgOiBhZGRlZCA/ICdkZWxldGUnIDogJ3BsdXMnXCI+XG48L21hdC1pY29uPlxuPC9idXR0b24+XG4iXX0=
428
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLXJlc3VsdHMtYWRkLWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9zZWFyY2gvc2VhcmNoLXJlc3VsdHMvc2VhcmNoLXJlc3VsdHMtYWRkLWJ1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9zZWFyY2gvc2VhcmNoLXJlc3VsdHMvc2VhcmNoLXJlc3VsdHMtYWRkLWJ1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCx1QkFBdUIsR0FHeEIsTUFBTSxlQUFlLENBQUM7QUFNdkIsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3ZELE9BQU8sRUFBZ0IsZUFBZSxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzRCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUU3RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFFckUsT0FBTyxFQUVMLGFBQWEsRUFDYixZQUFZLEVBQ1osMkJBQTJCLEVBQzNCLDZCQUE2QixFQUM3QixxQkFBcUIsRUFDckIsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFeEQsT0FBTyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDckMsT0FBTyxJQUFJLE1BQU0sZUFBZSxDQUFDO0FBQ2pDLE9BQU8sS0FBSyxNQUFNLGdCQUFnQixDQUFDO0FBQ25DLE9BQU8sTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBSXJDLE9BQU8sRUFBRSxLQUFLLEVBQWdCLE1BQU0sWUFBWSxDQUFDOzs7Ozs7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LFNBQWdDLEVBQUUsRUFBRTtZQUNuQyxJQUFJLFNBQVMsSUFBSSxTQUFTLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQ25DLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUN0QztRQUNILENBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQzs7NEdBamFVLDhCQUE4QjtpRkFBOUIsOEJBQThCO1FDL0MzQyx1RkFzQlM7UUFFVCxxRkFtQlM7O1FBeENSLDBEQUFxQztRQXdCckMsZUFBa0U7UUFBbEUsMkZBQWtFOzt1RkRvQnRELDhCQUE4QjtjQU4xQyxTQUFTOzJCQUNFLHVCQUF1QixtQkFHaEIsdUJBQXVCLENBQUMsTUFBTTtrSkEwQnRDLEtBQUs7a0JBQWIsS0FBSztZQUVHLEtBQUs7a0JBQWIsS0FBSztZQUtHLEtBQUs7a0JBQWIsS0FBSztZQUtHLEdBQUc7a0JBQVgsS0FBSztZQUtHLHVCQUF1QjtrQkFBL0IsS0FBSztZQUdGLEtBQUs7a0JBRFIsS0FBSztZQVNHLE1BQU07a0JBQWQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIElucHV0LFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIE9uSW5pdCxcclxuICBPbkRlc3Ryb3ksXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBTZWFyY2hSZXN1bHQgfSBmcm9tICcuLi9zaGFyZWQvc2VhcmNoLmludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBJZ29NYXAgfSBmcm9tICcuLi8uLi9tYXAvc2hhcmVkL21hcCc7XHJcbmltcG9ydCB7IExheWVyT3B0aW9ucyB9IGZyb20gJy4uLy4uL2xheWVyL3NoYXJlZC9sYXllcnMvbGF5ZXIuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgTGF5ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbGF5ZXIvc2hhcmVkL2xheWVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBMQVlFUiB9IGZyb20gJy4uLy4uL2xheWVyL3NoYXJlZC9sYXllci5lbnVtcyc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgQmVoYXZpb3JTdWJqZWN0LCB0YWtlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFNhdmVGZWF0dXJlRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9zYXZlLWZlYXR1cmUtZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IFZlY3RvckxheWVyIH0gZnJvbSAnLi4vLi4vbGF5ZXIvc2hhcmVkL2xheWVycy92ZWN0b3ItbGF5ZXInO1xyXG5pbXBvcnQgeyBEYXRhU291cmNlU2VydmljZSwgRmVhdHVyZURhdGFTb3VyY2UgfSBmcm9tICcuLi8uLi9kYXRhc291cmNlJztcclxuaW1wb3J0IHtcclxuICBGZWF0dXJlLFxyXG4gIEZlYXR1cmVNb3Rpb24sXHJcbiAgRmVhdHVyZVN0b3JlLFxyXG4gIEZlYXR1cmVTdG9yZUxvYWRpbmdTdHJhdGVneSxcclxuICBGZWF0dXJlU3RvcmVTZWxlY3Rpb25TdHJhdGVneSxcclxuICB0cnlBZGRMb2FkaW5nU3RyYXRlZ3ksXHJcbiAgdHJ5QWRkU2VsZWN0aW9uU3RyYXRlZ3ksXHJcbiAgdHJ5QmluZFN0b3JlTGF5ZXJcclxufSBmcm9tICcuLi8uLi9mZWF0dXJlJztcclxuaW1wb3J0IHsgRW50aXR5U3RvcmUgfSBmcm9tICdAaWdvMi9jb21tb24nO1xyXG5pbXBvcnQgeyBnZXRUb29sdGlwc09mT2xHZW9tZXRyeSB9IGZyb20gJy4uLy4uL21lYXN1cmUnO1xyXG5pbXBvcnQgT2xPdmVybGF5IGZyb20gJ29sL092ZXJsYXknO1xyXG5pbXBvcnQgU3Ryb2tlIGZyb20gJ29sL3N0eWxlL1N0cm9rZSc7XHJcbmltcG9ydCBGaWxsIGZyb20gJ29sL3N0eWxlL0ZpbGwnO1xyXG5pbXBvcnQgU3R5bGUgZnJvbSAnb2wvc3R5bGUvU3R5bGUnO1xyXG5pbXBvcnQgQ2lyY2xlIGZyb20gJ29sL3N0eWxlL0NpcmNsZSc7XHJcbmltcG9ydCB7IFZlY3RvclNvdXJjZUV2ZW50IGFzIE9sVmVjdG9yU291cmNlRXZlbnQgfSBmcm9tICdvbC9zb3VyY2UvVmVjdG9yJztcclxuaW1wb3J0IHsgZGVmYXVsdCBhcyBPbEdlb21ldHJ5IH0gZnJvbSAnb2wvZ2VvbS9HZW9tZXRyeSc7XHJcbmltcG9ydCB7IFF1ZXJ5YWJsZURhdGFTb3VyY2VPcHRpb25zIH0gZnJvbSAnLi4vLi4vcXVlcnknO1xyXG5pbXBvcnQgeyBNZWRpYSwgTWVkaWFTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZSc7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpZ28tc2VhcmNoLWFkZC1idXR0b24nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWFyY2gtcmVzdWx0cy1hZGQtYnV0dG9uLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zZWFyY2gtcmVzdWx0cy1hZGQtYnV0dG9uLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIFNlYXJjaFJlc3VsdEFkZEJ1dHRvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95e1xyXG4gIHB1YmxpYyB0b29sdGlwJDogQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFxyXG4gICAgJ2lnby5nZW8uY2F0YWxvZy5sYXllci5hZGRUb01hcCdcclxuICApO1xyXG5cclxuICBwdWJsaWMgYWRkRmVhdHVyZVRvTGF5ZXJUb29sdGlwJDogQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFxyXG4gICAgJ2lnby5nZW8uc2VhcmNoLmFkZFRvTGF5ZXInXHJcbiAgKTtcclxuXHJcbiAgcHJpdmF0ZSByZXNvbHV0aW9uJCQ6IFN1YnNjcmlwdGlvbjtcclxuICBwcml2YXRlIGxheWVycyQkOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIHB1YmxpYyBpblJhbmdlJDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCh0cnVlKTtcclxuXHJcbiAgcHVibGljIGlzVmlzaWJsZSQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xyXG5cclxuICBwdWJsaWMgaXNQcmV2aWV3JDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XHJcblxyXG4gIHByaXZhdGUgbGF5ZXJzU3ViY3JpcHRpb25zID0gW107XHJcblxyXG4gIHByaXZhdGUgbGFzdFRpbWVvdXRSZXF1ZXN0O1xyXG5cclxuICBwcml2YXRlIG1vdXNlSW5zaWRlQWRkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIGxheWVyOiBTZWFyY2hSZXN1bHQ7XHJcblxyXG4gIEBJbnB1dCgpIHN0b3JlOiBFbnRpdHlTdG9yZTxTZWFyY2hSZXN1bHQ+O1xyXG5cclxuICAvKipcclxuICAgKiBXaGV0aGVyIHRoZSBsYXllciBpcyBhbHJlYWR5IGFkZGVkIHRvIHRoZSBtYXBcclxuICAgKi9cclxuICBASW5wdXQoKSBhZGRlZDogYm9vbGVhbjtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIG1hcCB0byBhZGQgdGhlIHNlYXJjaCByZXN1bHQgbGF5ZXIgdG9cclxuICAgKi9cclxuICBASW5wdXQoKSBtYXA6IElnb01hcDtcclxuXHJcbiAgLyoqXHJcbiAgICogc2hvdyBoaWRlIHNhdmUgc2VhcmNoIHJlc3VsdCBpbiBsYXllciBidXR0b25cclxuICAgKi9cclxuICBASW5wdXQoKSBzYXZlU2VhcmNoUmVzdWx0SW5MYXllcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCBjb2xvcigpIHtcclxuICAgIHJldHVybiB0aGlzLl9jb2xvcjtcclxuICB9XHJcbiAgc2V0IGNvbG9yKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2NvbG9yID0gdmFsdWU7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2NvbG9yID0gJ3ByaW1hcnknO1xyXG5cclxuICBASW5wdXQoKSBzdG9yZXM6IEZlYXR1cmVTdG9yZTxGZWF0dXJlPltdID0gW107XHJcblxyXG4gIGdldCBhbGxMYXllcnMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5tYXAubGF5ZXJzLmZpbHRlcigobGF5ZXIpID0+XHJcbiAgICAgIFN0cmluZyhsYXllci5pZCkuaW5jbHVkZXMoJ2lnby1zZWFyY2gtbGF5ZXInKVxyXG4gICAgKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBtZWRpYVNlcnZpY2UkJDogU3Vic2NyaXB0aW9uO1xyXG4gIHB1YmxpYyBpc01vYmlsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBsYXllclNlcnZpY2U6IExheWVyU2VydmljZSxcclxuICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwcml2YXRlIGRhdGFTb3VyY2VTZXJ2aWNlOiBEYXRhU291cmNlU2VydmljZSxcclxuICAgIHByaXZhdGUgbWVkaWFTZXJ2aWNlOiBNZWRpYVNlcnZpY2UpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgLy8gY2hlY2sgdGhlIHZpZXcgaWYgaXMgbW9iaWxlIG9yIG5vdFxyXG4gICAgdGhpcy5tZWRpYVNlcnZpY2UkJCA9IHRoaXMubWVkaWFTZXJ2aWNlLm1lZGlhJC5zdWJzY3JpYmUoXHJcbiAgICAgIChtZWRpYTogTWVkaWEpID0+IHtcclxuICAgICAgICBpZihtZWRpYSA9PT0gTWVkaWEuTW9iaWxlKSB7XHJcbiAgICAgICAgICB0aGlzLmlzTW9iaWxlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgICBpZiAodGhpcy5sYXllci5tZXRhLmRhdGFUeXBlID09PSAnTGF5ZXInKSB7XHJcbiAgICAgIHRoaXMuYWRkZWQgPVxyXG4gICAgICAgIHRoaXMubWFwLmxheWVycy5maW5kSW5kZXgoXHJcbiAgICAgICAgICBsYXkgPT4gbGF5LmlkID09PSB0aGlzLmxheWVyLmRhdGEuc291cmNlT3B0aW9ucy5pZFxyXG4gICAgICAgICkgIT09IC0xO1xyXG4gICAgfVxyXG4gICAgdGhpcy5sYXllcnMkJCA9IHRoaXMubWFwLmxheWVycyQuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5pc1Zpc2libGUoKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5yZXNvbHV0aW9uJCQgPSB0aGlzLm1hcC52aWV3Q29udHJvbGxlci5yZXNvbHV0aW9uJC5zdWJzY3JpYmUodmFsdWUgPT4ge1xyXG4gICAgICB0aGlzLmlzSW5SZXNvbHV0aW9uc1JhbmdlKHZhbHVlKTtcclxuICAgICAgdGhpcy5pc1Zpc2libGUoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLnJlc29sdXRpb24kJC51bnN1YnNjcmliZSgpO1xyXG4gICAgdGhpcy5sYXllcnMkJC51bnN1YnNjcmliZSgpO1xyXG4gICAgaWYgKHRoaXMubWVkaWFTZXJ2aWNlJCQpIHtcclxuICAgICAgdGhpcy5tZWRpYVNlcnZpY2UkJC51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT24gbW91c2UgZXZlbnQsIG1vdXNlZW50ZXIgL21vdXNlbGVhdmVcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBvbk1vdXNlRXZlbnQoZXZlbnQpIHtcclxuICAgIHRoaXMub25Ub2dnbGVDbGljayhldmVudCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPbiB0b2dnbGUgYnV0dG9uIGNsaWNrLCBlbWl0IHRoZSBhZGRlZCBjaGFuZ2UgZXZlbnRcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBvblRvZ2dsZUNsaWNrKGV2ZW50KSB7XHJcbiAgICBpZiAodHlwZW9mIHRoaXMubGFzdFRpbWVvdXRSZXF1ZXN0ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5sYXN0VGltZW91dFJlcXVlc3QpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChldmVudC50eXBlID09PSAnbW91c2VlbnRlcicgJiYgdGhpcy5tb3VzZUluc2lkZUFkZCApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgc3dpdGNoIChldmVudC50eXBlKSB7XHJcbiAgICAgIGNhc2UgJ2NsaWNrJzpcclxuICAgICAgICBpZiAoIXRoaXMuaXNQcmV2aWV3JC52YWx1ZSkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuYWRkZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmUoKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkKGV2ZW50KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc1ByZXZpZXckLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdtb3VzZWVudGVyJzpcclxuICAgICAgICBpZiAoIXRoaXMuaXNQcmV2aWV3JC52YWx1ZSAmJiAhdGhpcy5hZGRlZCkge1xyXG4gICAgICAgICAgdGhpcy5sYXN0VGltZW91dFJlcXVlc3QgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5hZGQoKTtcclxuICAgICAgICAgICAgdGhpcy5pc1ByZXZpZXckLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICB9LCA1MDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm1vdXNlSW5zaWRlQWRkID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnbW91c2VsZWF2ZSc6XHJcbiAgICAgICAgaWYgKHRoaXMuaXNQcmV2aWV3JC52YWx1ZSkge1xyXG4gICAgICAgICAgdGhpcy5yZW1vdmUoKTtcclxuICAgICAgICAgIHRoaXMuaXNQcmV2aWV3JC5uZXh0KGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5tb3VzZUluc2lkZUFkZCA9IGZhbHNlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZGQoZXZlbnQ/OiBFdmVudCkge1xyXG4gICAgaWYgKCF0aGlzLmFkZGVkKSB7XHJcbiAgICAgIHRoaXMuYWRkZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLmFkZExheWVyVG9NYXAoZXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW1vdmUoKSB7XHJcbiAgICBpZiAodGhpcy5hZGRlZCkge1xyXG4gICAgICB0aGlzLmFkZGVkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMucmVtb3ZlTGF5ZXJGcm9tTWFwKCk7XHJcbiAgICAgIHRoaXMubGF5ZXJzU3ViY3JpcHRpb25zLm1hcChzID0+IHMudW5zdWJzY3JpYmUoKSk7XHJcbiAgICAgIHRoaXMubGF5ZXJzU3ViY3JpcHRpb25zID0gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFbWl0IGFkZGVkIGNoYW5nZSBldmVudCB3aXRoIGFkZGVkID0gdHJ1ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgYWRkTGF5ZXJUb01hcChldmVudD86IEV2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5tYXAgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMubGF5ZXIubWV0YS5kYXRhVHlwZSAhPT0gTEFZRVIpIHtcclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBsYXllck9wdGlvbnMgPSAodGhpcy5sYXllciBhcyBTZWFyY2hSZXN1bHQ8TGF5ZXJPcHRpb25zPikuZGF0YTtcclxuICAgIGlmIChsYXllck9wdGlvbnMuc291cmNlT3B0aW9ucy5vcHRpb25zRnJvbUFwaSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGxheWVyT3B0aW9ucy5zb3VyY2VPcHRpb25zLm9wdGlvbnNGcm9tQXBpID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHRoaXMubGF5ZXJzU3ViY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMubGF5ZXJTZXJ2aWNlXHJcbiAgICAgICAgLmNyZWF0ZUFzeW5jTGF5ZXIobGF5ZXJPcHRpb25zKVxyXG4gICAgICAgIC5zdWJzY3JpYmUobGF5ZXIgPT4ge1xyXG4gICAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICdjbGljaycpIHtcclxuICAgICAgICAgICAgdGhpcy5tYXAubGF5ZXJzQWRkZWRCeUNsaWNrJC5uZXh0KFtsYXllcl0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5tYXAuYWRkTGF5ZXIobGF5ZXIpO1xyXG4gICAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRW1pdCBhZGRlZCBjaGFuZ2UgZXZlbnQgd2l0aCBhZGRlZCA9IGZhbHNlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZW1vdmVMYXllckZyb21NYXAoKSB7XHJcbiAgICBpZiAodGhpcy5tYXAgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMubGF5ZXIubWV0YS5kYXRhVHlwZSAhPT0gTEFZRVIpIHtcclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBvTGF5ZXIgPSB0aGlzLm1hcC5nZXRMYXllckJ5SWQodGhpcy5sYXllci5kYXRhLnNvdXJjZU9wdGlvbnMuaWQpO1xyXG4gICAgdGhpcy5tYXAucmVtb3ZlTGF5ZXIob0xheWVyKTtcclxuICB9XHJcblxyXG4gIGlzSW5SZXNvbHV0aW9uc1JhbmdlKHJlc29sdXRpb246IG51bWJlcikge1xyXG4gICAgY29uc3QgbWluUmVzb2x1dGlvbiA9IHRoaXMubGF5ZXIuZGF0YS5taW5SZXNvbHV0aW9uIHx8IDA7XHJcbiAgICBjb25zdCBtYXhSZXNvbHV0aW9uID0gdGhpcy5sYXllci5kYXRhLm1heFJlc29sdXRpb24gfHwgSW5maW5pdHk7XHJcbiAgICB0aGlzLmluUmFuZ2UkLm5leHQoXHJcbiAgICAgIHJlc29sdXRpb24gPj0gbWluUmVzb2x1dGlvbiAmJiByZXNvbHV0aW9uIDw9IG1heFJlc29sdXRpb25cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBpc1Zpc2libGUoKSB7XHJcbiAgICBpZiAodGhpcy5sYXllcj8uZGF0YT8uc291cmNlT3B0aW9ucz8uaWQpIHtcclxuICAgICAgY29uc3Qgb0xheWVyID0gdGhpcy5tYXAuZ2V0TGF5ZXJCeUlkKHRoaXMubGF5ZXIuZGF0YS5zb3VyY2VPcHRpb25zLmlkKTtcclxuICAgICAgb0xheWVyID8gdGhpcy5pc1Zpc2libGUkLm5leHQob0xheWVyLnZpc2libGUpIDogdGhpcy5pc1Zpc2libGUkLm5leHQoZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0QmFkZ2VJY29uKCkge1xyXG4gICAgaWYgKHRoaXMuaW5SYW5nZSQudmFsdWUpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaXNWaXNpYmxlJC52YWx1ZSA/ICcnIDogJ2V5ZS1vZmYnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICdleWUtb2ZmJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbXB1dGVUb29sdGlwKCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5hZGRlZCkge1xyXG4gICAgICBpZiAodGhpcy5pc1ByZXZpZXckLnZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuICdpZ28uZ2VvLmNhdGFsb2cubGF5ZXIuYWRkVG9NYXAnO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaW5SYW5nZSQudmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pc1Zpc2libGUkLnZhbHVlXHJcbiAgICAgICAgPyAnaWdvLmdlby5jYXRhbG9nLmxheWVyLnJlbW92ZUZyb21NYXAnXHJcbiAgICAgICAgOiAnaWdvLmdlby5jYXRhbG9nLmxheWVyLnJlbW92ZUZyb21NYXBOb3RWaXNpYmxlJztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gJ2lnby5nZW8uY2F0YWxvZy5sYXllci5yZW1vdmVGcm9tTWFwT3V0UmFuZ2UnO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5pblJhbmdlJC52YWx1ZVxyXG4gICAgICAgID8gJ2lnby5nZW8uY2F0YWxvZy5sYXllci5hZGRUb01hcCdcclxuICAgICAgICA6ICdpZ28uZ2VvLmNhdGFsb2cubGF5ZXIuYWRkVG9NYXBPdXRSYW5nZSc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRGZWF0dXJlVG9MYXllcigpIHtcclxuICAgIGlmICh0aGlzLmxheWVyLm1ldGEuZGF0YVR5cGUgIT09ICdGZWF0dXJlJykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0ZWRGZWF0dXJlID0gdGhpcy5sYXllcjtcclxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oU2F2ZUZlYXR1cmVEaWFsb2dDb21wb25lbnQsIHtcclxuICAgICAgd2lkdGg6ICc3MDBweCcsXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBmZWF0dXJlOiBzZWxlY3RlZEZlYXR1cmUsXHJcbiAgICAgICAgbGF5ZXJzOiB0aGlzLmFsbExheWVyc1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKGRhdGE6IHtsYXllcjogc3RyaW5nIHwgYW55LCBmZWF0dXJlOiBTZWFyY2hSZXN1bHR9KSA9PiB7XHJcbiAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgaWYodGhpcy5zdG9yZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgdGhpcy5zdG9yZXMubWFwKChzdG9yZSkgPT4ge1xyXG4gICAgICAgICAgICBzdG9yZS5zdGF0ZS51cGRhdGVBbGwoe3NlbGVjdGVkOiBmYWxzZX0pO1xyXG4gICAgICAgICAgICAoc3RvcmU/LmxheWVyKS52aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiBzdG9yZTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjaGVjayBpZiBpcyBuZXcgbGF5ZXJcclxuICAgICAgICBpZiAodHlwZW9mIGRhdGEubGF5ZXIgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICB0aGlzLmNyZWF0ZUxheWVyKGRhdGEubGF5ZXIsIGRhdGEuZmVhdHVyZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IGFjdGl2ZVN0b3JlID0gdGhpcy5zdG9yZXMuZmluZChzdG9yZSA9PiBzdG9yZS5sYXllci5pZCA9PT0gZGF0YS5sYXllci5pZCk7XHJcbiAgICAgICAgICBhY3RpdmVTdG9yZS5sYXllci52aXNpYmxlID0gdHJ1ZTtcclxuICAgICAgICAgIGFjdGl2ZVN0b3JlLmxheWVyLm9wYWNpdHkgPSAxO1xyXG4gICAgICAgICAgdGhpcy5hZGRGZWF0dXJlKGRhdGEuZmVhdHVyZSwgYWN0aXZlU3RvcmUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVMYXllcihsYXllclRpdGxlOiBzdHJpbmcsIHNlbGVjdGVkRmVhdHVyZTogU2VhcmNoUmVzdWx0KSB7XHJcbiAgICBjb25zdCBhY3RpdmVTdG9yZTogRmVhdHVyZVN0b3JlPEZlYXR1cmU+ID0gbmV3IEZlYXR1cmVTdG9yZTxGZWF0dXJlPihbXSwge1xyXG4gICAgICBtYXA6IHRoaXMubWFwXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBzdHlsZXMgPSBbXHJcbiAgICAgIG5ldyBTdHlsZSh7XHJcbiAgICAgICAgaW1hZ2U6IG5ldyBDaXJjbGUoe1xyXG4gICAgICAgICAgcmFkaXVzOiA1LFxyXG4gICAgICAgICAgc3Ryb2tlOiBuZXcgU3Ryb2tlKHtcclxuICAgICAgICAgICAgd2lkdGg6IDEsXHJcbiAgICAgICAgICAgIGNvbG9yOiAncmdiYSgxNDMsNyw3LDEpJ1xyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICBmaWxsOiBuZXcgRmlsbCh7XHJcbiAgICAgICAgICAgIGNvbG9yOiAncmdiYSgxNDMsNyw3LDEpJ1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9KVxyXG4gICAgICB9KSxcclxuICAgICAgbmV3IFN0eWxlKHtcclxuICAgICAgICBzdHJva2U6IG5ldyBTdHJva2Uoe1xyXG4gICAgICAgICAgd2lkdGg6IDEsXHJcbiAgICAgICAgICBjb2xvcjogJ3JnYmEoMTQzLDcsNywxKSdcclxuICAgICAgICB9KSxcclxuICAgICAgICBmaWxsOiBuZXcgRmlsbCh7XHJcbiAgICAgICAgICBjb2xvcjogJ3JnYmEoMCwgMCwgMjU1LCAwLjEpJyxcclxuICAgICAgICB9KSxcclxuICAgICAgfSlcclxuICAgIF07XHJcblxyXG4gICAgLy8gc2V0IGxheWVyIGlkXHJcbiAgICBsZXQgbGF5ZXJDb3VudGVySUQ6IG51bWJlciA9IDA7XHJcbiAgICBmb3IgKGNvbnN0IGxheWVyIG9mIHRoaXMuYWxsTGF5ZXJzKSB7XHJcbiAgICAgIGxldCBudW1iZXJJZCA9IE51bWJlcihsYXllci5pZC5yZXBsYWNlKCdpZ28tc2VhcmNoLWxheWVyJywnJykpO1xyXG4gICAgICBsYXllckNvdW50ZXJJRCA9IE1hdGgubWF4KG51bWJlcklkLGxheWVyQ291bnRlcklEKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRhdGFTb3VyY2VTZXJ2aWNlXHJcbiAgICAgICAgLmNyZWF0ZUFzeW5jRGF0YVNvdXJjZSh7XHJcbiAgICAgICAgICB0eXBlOiAndmVjdG9yJyxcclxuICAgICAgICAgIHF1ZXJ5YWJsZTogdHJ1ZVxyXG4gICAgICAgIH0gYXMgUXVlcnlhYmxlRGF0YVNvdXJjZU9wdGlvbnMpXHJcbiAgICAgICAgLnBpcGUodGFrZSgxKSlcclxuICAgICAgICAuc3Vic2NyaWJlKChkYXRhU291cmNlOiBGZWF0dXJlRGF0YVNvdXJjZSkgPT4ge1xyXG4gICAgICAgICAgbGV0IHNlYXJjaExheWVyOiBWZWN0b3JMYXllciA9IG5ldyBWZWN0b3JMYXllcih7XHJcbiAgICAgICAgICAgIGlzSWdvSW50ZXJuYWxMYXllcjogdHJ1ZSxcclxuICAgICAgICAgICAgaWQ6ICdpZ28tc2VhcmNoLWxheWVyJyArICsrbGF5ZXJDb3VudGVySUQsXHJcbiAgICAgICAgICAgIHRpdGxlOiBsYXllclRpdGxlLFxyXG4gICAgICAgICAgICBzb3VyY2U6IGRhdGFTb3VyY2UsXHJcbiAgICAgICAgICAgIGlnb1N0eWxlOiB7XHJcbiAgICAgICAgICAgICAgZWRpdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGlnb1N0eWxlT2JqZWN0OiB7XHJcbiAgICAgICAgICAgICAgICBmaWxsOiB7IGNvbG9yOiAncmdiYSgyNTUsMjU1LDI1NSwwLjQpJyB9LFxyXG4gICAgICAgICAgICAgICAgc3Ryb2tlOiB7IGNvbG9yOiAncmdiYSgxNDMsNyw3LDEpJywgd2lkdGg6IDEgfSxcclxuICAgICAgICAgICAgICAgIGNpcmNsZToge1xyXG4gICAgICAgICAgICAgICAgICBmaWxsOiB7IGNvbG9yOiAncmdiYSgyNTUsMjU1LDI1NSwwLjQpJywgfSxcclxuICAgICAgICAgICAgICAgICAgc3Ryb2tlOiB7IGNvbG9yOiAncmdiYSgxNDMsNyw3LDEpJywgd2lkdGg6IDEgfSxcclxuICAgICAgICAgICAgICAgICAgcmFkaXVzOiA1LFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc3R5bGU6IHN0eWxlcyxcclxuICAgICAgICAgICAgc2hvd0luTGF5ZXJMaXN0OiB0cnVlLFxyXG4gICAgICAgICAgICBleHBvcnRhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICB3b3Jrc3BhY2U6IHtcclxuICAgICAgICAgICAgICBlbmFibGVkOiB0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHRyeUJpbmRTdG9yZUxheWVyKGFjdGl2ZVN0b3JlLCBzZWFyY2hMYXllcik7XHJcbiAgICAgICAgICB0cnlBZGRMb2FkaW5nU3RyYXRlZ3koXHJcbiAgICAgICAgICAgIGFjdGl2ZVN0b3JlLFxyXG4gICAgICAgICAgICBuZXcgRmVhdHVyZVN0b3JlTG9hZGluZ1N0cmF0ZWd5KHtcclxuICAgICAgICAgICAgICBtb3Rpb246IEZlYXR1cmVNb3Rpb24uTm9uZVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICB0cnlBZGRTZWxlY3Rpb25TdHJhdGVneShcclxuICAgICAgICAgICAgYWN0aXZlU3RvcmUsXHJcbiAgICAgICAgICAgIG5ldyBGZWF0dXJlU3RvcmVTZWxlY3Rpb25TdHJhdGVneSh7XHJcbiAgICAgICAgICAgICAgbWFwOiB0aGlzLm1hcCxcclxuICAgICAgICAgICAgICBtb3Rpb246IEZlYXR1cmVNb3Rpb24uTm9uZSxcclxuICAgICAgICAgICAgICBtYW55OiB0cnVlXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIGFjdGl2ZVN0b3JlLmxheWVyLnZpc2libGUgPSB0cnVlO1xyXG4gICAgICAgICAgYWN0aXZlU3RvcmUuc291cmNlLm9sLm9uKFxyXG4gICAgICAgICAgICAncmVtb3ZlZmVhdHVyZScsXHJcbiAgICAgICAgICAgIChldmVudDogT2xWZWN0b3JTb3VyY2VFdmVudDxPbEdlb21ldHJ5PikgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IG9sR2VvbWV0cnkgPSBldmVudC5mZWF0dXJlLmdldEdlb21ldHJ5KCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jbGVhckxhYmVsc09mT2xHZW9tZXRyeShvbEdlb21ldHJ5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICB0aGlzLmFkZEZlYXR1cmUoc2VsZWN0ZWRGZWF0dXJlLCBhY3RpdmVTdG9yZSk7XHJcbiAgICAgICAgICB0aGlzLnN0b3Jlcy5wdXNoKGFjdGl2ZVN0b3JlKTtcclxuICAgICAgICB9KTtcclxuICB9XHJcblxyXG4gIGFkZEZlYXR1cmUoZmVhdHVyZTogU2VhcmNoUmVzdWx0LCBhY3RpdmVTdG9yZTogRmVhdHVyZVN0b3JlPEZlYXR1cmU+KSB7XHJcbiAgICBjb25zdCBuZXdGZWF0dXJlID0ge1xyXG4gICAgICB0eXBlOiBmZWF0dXJlLmRhdGEudHlwZSxcclxuICAgICAgZ2VvbWV0cnk6IHtcclxuICAgICAgICBjb29yZGluYXRlczogZmVhdHVyZS5kYXRhLmdlb21ldHJ5LmNvb3JkaW5hdGVzLFxyXG4gICAgICAgIHR5cGU6IGZlYXR1cmUuZGF0YS5nZW9tZXRyeS50eXBlXHJcbiAgICAgIH0sXHJcbiAgICAgIHByb2plY3Rpb246IGZlYXR1cmUuZGF0YS5wcm9qZWN0aW9uLFxyXG4gICAgICBwcm9wZXJ0aWVzOiBmZWF0dXJlLmRhdGEucHJvcGVydGllcyxcclxuICAgICAgbWV0YToge1xyXG4gICAgICAgIGlkOiBmZWF0dXJlLm1ldGEuaWRcclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIGRlbGV0ZSBuZXdGZWF0dXJlLnByb3BlcnRpZXMuUm91dGU7XHJcbiAgICBhY3RpdmVTdG9yZS51cGRhdGUobmV3RmVhdHVyZSk7XHJcbiAgICBhY3RpdmVTdG9yZS5zZXRMYXllckV4dGVudCgpO1xyXG4gICAgYWN0aXZlU3RvcmUubGF5ZXIub2wuZ2V0U291cmNlKCkucmVmcmVzaCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbGVhckxhYmVsc09mT2xHZW9tZXRyeShvbEdlb21ldHJ5KSB7XHJcbiAgICBnZXRUb29sdGlwc09mT2xHZW9tZXRyeShvbEdlb21ldHJ5KS5mb3JFYWNoKFxyXG4gICAgICAob2xUb29sdGlwOiBPbE92ZXJsYXkgfCB1bmRlZmluZWQpID0+IHtcclxuICAgICAgICBpZiAob2xUb29sdGlwICYmIG9sVG9vbHRpcC5nZXRNYXAoKSkge1xyXG4gICAgICAgICAgdGhpcy5tYXAub2wucmVtb3ZlT3ZlcmxheShvbFRvb2x0aXApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuIiwiPGJ1dHRvblxyXG5pZ29TdG9wUHJvcGFnYXRpb25cclxuKG1vdXNlZW50ZXIpPVwib25Nb3VzZUV2ZW50KCRldmVudClcIiAobW91c2VsZWF2ZSk9XCJvbk1vdXNlRXZlbnQoJGV2ZW50KVwiXHJcbipuZ0lmPVwibGF5ZXIubWV0YS5kYXRhVHlwZSA9PT0gJ0xheWVyJ1wiXHJcbm1hdC1pY29uLWJ1dHRvblxyXG50b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxyXG5tYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcclxuW21hdFRvb2x0aXBdPVwiY29tcHV0ZVRvb2x0aXAoKSB8IHRyYW5zbGF0ZVwiXHJcbltjb2xvcl09XCIoaXNQcmV2aWV3JCB8IGFzeW5jKSA/ICcnIDogYWRkZWQgPyAnd2FybicgOiAnJ1wiXHJcbihjbGljayk9XCJvblRvZ2dsZUNsaWNrKCRldmVudClcIj5cclxuPG1hdC1pY29uXHJcbiAgbWF0QmFkZ2U9XCJpY29uXCJcclxuICBbaWdvTWF0QmFkZ2VJY29uXT1cImdldEJhZGdlSWNvbigpXCJcclxuICBpZ29NYXRCYWRnZUNvbG9yPVwicmdiYSgwLDAsMCwwLjg3KVwiXHJcbiAgaWdvTWF0QmFkZ2VCYWNrZ3JvdW5kQ29sb3I9XCJub25lXCJcclxuICBpZ29NYXRCYWRnZUludmVyc2VDb2xvcj1cInRydWVcIlxyXG4gIFttYXRCYWRnZUhpZGRlbl09XCIoKGluUmFuZ2UkIHwgYXN5bmMpICYmIChpc1Zpc2libGUkIHwgYXN5bmMpID09PSB0cnVlKSB8fCAoKGluUmFuZ2UkIHwgYXN5bmMpICYmICFhZGRlZCkgfHwgKChpblJhbmdlJCB8IGFzeW5jKSAmJiAoaXNQcmV2aWV3JCB8IGFzeW5jKSlcIlxyXG4gIFttYXRCYWRnZURpc2FibGVkXT1cIihpblJhbmdlJCB8IGFzeW5jKSA9PT0gZmFsc2VcIlxyXG4gIG1hdEJhZGdlU2l6ZT1cInNtYWxsXCJcclxuICBtYXRCYWRnZVBvc2l0aW9uPVwiYWZ0ZXJcIlxyXG4gIFtzdmdJY29uXT1cIihpc1ByZXZpZXckIHwgYXN5bmMpID8gJ3BsdXMnIDogYWRkZWQgPyAnZGVsZXRlJyA6ICdwbHVzJ1wiPlxyXG48L21hdC1pY29uPlxyXG48L2J1dHRvbj5cclxuXHJcbjxidXR0b25cclxuW2lkXT1cIighaXNNb2JpbGUpID8gJ2hpZGUtc2F2ZS1zZWFyY2gtcmVzdWx0LWJ0bicgOiAnJ1wiXHJcbmlnb1N0b3BQcm9wYWdhdGlvblxyXG4qbmdJZj1cImxheWVyLm1ldGEuZGF0YVR5cGUgPT09ICdGZWF0dXJlJyAmJiBzYXZlU2VhcmNoUmVzdWx0SW5MYXllclwiXHJcbm1hdC1pY29uLWJ1dHRvblxyXG50b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxyXG5tYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcclxuW21hdFRvb2x0aXBdPVwiKGFkZEZlYXR1cmVUb0xheWVyVG9vbHRpcCQgfCBhc3luYykgfCB0cmFuc2xhdGVcIlxyXG4oY2xpY2spPVwiYWRkRmVhdHVyZVRvTGF5ZXIoKVwiPlxyXG48bWF0LWljb25cclxuICBtYXRCYWRnZT1cImljb25cIlxyXG4gIGlnb01hdEJhZGdlSWNvbj1cImV5ZS1vZmZcIlxyXG4gIGlnb01hdEJhZGdlSW52ZXJzZUNvbG9yPVwidHJ1ZVwiXHJcbiAgW21hdEJhZGdlSGlkZGVuXT1cIihpblJhbmdlJCB8IGFzeW5jKVwiXHJcbiAgbWF0QmFkZ2VEaXNhYmxlZD1cInRydWVcIlxyXG4gIG1hdEJhZGdlU2l6ZT1cInNtYWxsXCJcclxuICBtYXRCYWRnZVBvc2l0aW9uPVwiYWZ0ZXJcIlxyXG4gIHN2Z0ljb249XCJmaWxlLXBsdXMtb3V0bGluZVwiPlxyXG48L21hdC1pY29uPlxyXG48L2J1dHRvbj5cclxuIl19