@igo2/geo 1.15.4 → 16.0.0-rc.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 (1433) hide show
  1. package/esm2022/igo2-geo.mjs +5 -0
  2. package/esm2022/lib/catalog/catalog-browser/catalog-browser-group.component.mjs +320 -0
  3. package/esm2022/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs +319 -0
  4. package/esm2022/lib/catalog/catalog-browser/catalog-browser.component.mjs +278 -0
  5. package/esm2022/lib/catalog/catalog-browser/catalog-browser.module.mjs +78 -0
  6. package/esm2022/lib/catalog/catalog-library/add-catalog-dialog.component.mjs +223 -0
  7. package/esm2022/lib/catalog/catalog-library/catalog-library-item.component.mjs +89 -0
  8. package/esm2022/lib/catalog/catalog-library/catalog-library.component.mjs +230 -0
  9. package/esm2022/lib/catalog/catalog-library/catalog-library.module.mjs +91 -0
  10. package/esm2022/lib/catalog/catalog.module.mjs +48 -0
  11. package/esm2022/lib/catalog/index.mjs +5 -0
  12. package/esm2022/lib/catalog/shared/catalog.abstract.mjs +32 -0
  13. package/esm2022/lib/catalog/shared/catalog.enum.mjs +16 -0
  14. package/esm2022/lib/catalog/shared/catalog.interface.mjs +2 -0
  15. package/esm2022/lib/catalog/shared/catalog.service.mjs +666 -0
  16. package/esm2022/lib/catalog/shared/catalogs.mjs +75 -0
  17. package/esm2022/lib/catalog/shared/index.mjs +5 -0
  18. package/esm2022/lib/datasource/datasource.module.mjs +22 -0
  19. package/esm2022/lib/datasource/index.mjs +3 -0
  20. package/esm2022/lib/datasource/shared/capabilities.service.mjs +448 -0
  21. package/esm2022/lib/datasource/shared/datasource.service.mjs +259 -0
  22. package/esm2022/lib/datasource/shared/datasources/any-datasource.interface.mjs +2 -0
  23. package/esm2022/lib/datasource/shared/datasources/any-datasource.mjs +2 -0
  24. package/esm2022/lib/datasource/shared/datasources/arcgisrest-datasource.interface.mjs +2 -0
  25. package/esm2022/lib/datasource/shared/datasources/arcgisrest-datasource.mjs +212 -0
  26. package/esm2022/lib/datasource/shared/datasources/carto-datasource.interface.mjs +2 -0
  27. package/esm2022/lib/datasource/shared/datasources/carto-datasource.mjs +109 -0
  28. package/esm2022/lib/datasource/shared/datasources/cluster-datasource.interface.mjs +2 -0
  29. package/esm2022/lib/datasource/shared/datasources/cluster-datasource.mjs +15 -0
  30. package/esm2022/lib/datasource/shared/datasources/data.service.mjs +3 -0
  31. package/esm2022/lib/datasource/shared/datasources/datasource.interface.mjs +2 -0
  32. package/esm2022/lib/datasource/shared/datasources/datasource.mjs +34 -0
  33. package/esm2022/lib/datasource/shared/datasources/feature-datasource.interface.mjs +2 -0
  34. package/esm2022/lib/datasource/shared/datasources/feature-datasource.mjs +43 -0
  35. package/esm2022/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.mjs +2 -0
  36. package/esm2022/lib/datasource/shared/datasources/imagearcgisrest-datasource.mjs +61 -0
  37. package/esm2022/lib/datasource/shared/datasources/index.mjs +36 -0
  38. package/esm2022/lib/datasource/shared/datasources/mvt-datasource.interface.mjs +2 -0
  39. package/esm2022/lib/datasource/shared/datasources/mvt-datasource.mjs +28 -0
  40. package/esm2022/lib/datasource/shared/datasources/osm-datasource.interface.mjs +2 -0
  41. package/esm2022/lib/datasource/shared/datasources/osm-datasource.mjs +12 -0
  42. package/esm2022/lib/datasource/shared/datasources/tilearcgisrest-datasource.interface.mjs +2 -0
  43. package/esm2022/lib/datasource/shared/datasources/tilearcgisrest-datasource.mjs +51 -0
  44. package/esm2022/lib/datasource/shared/datasources/tiledebug-datasource.interface.mjs +2 -0
  45. package/esm2022/lib/datasource/shared/datasources/tiledebug-datasource.mjs +15 -0
  46. package/esm2022/lib/datasource/shared/datasources/websocket-datasource.interface.mjs +2 -0
  47. package/esm2022/lib/datasource/shared/datasources/websocket-datasource.mjs +55 -0
  48. package/esm2022/lib/datasource/shared/datasources/wfs-datasource.interface.mjs +2 -0
  49. package/esm2022/lib/datasource/shared/datasources/wfs-datasource.mjs +79 -0
  50. package/esm2022/lib/datasource/shared/datasources/wfs.service.mjs +169 -0
  51. package/esm2022/lib/datasource/shared/datasources/wms-datasource.interface.mjs +2 -0
  52. package/esm2022/lib/datasource/shared/datasources/wms-datasource.mjs +218 -0
  53. package/esm2022/lib/datasource/shared/datasources/wms-wfs.utils.mjs +222 -0
  54. package/esm2022/lib/datasource/shared/datasources/wmts-datasource.interface.mjs +2 -0
  55. package/esm2022/lib/datasource/shared/datasources/wmts-datasource.mjs +16 -0
  56. package/esm2022/lib/datasource/shared/datasources/xyz-datasource.interface.mjs +2 -0
  57. package/esm2022/lib/datasource/shared/datasources/xyz-datasource.mjs +9 -0
  58. package/esm2022/lib/datasource/shared/index.mjs +5 -0
  59. package/esm2022/lib/datasource/shared/options/index.mjs +5 -0
  60. package/esm2022/lib/datasource/shared/options/options-api.interface.mjs +2 -0
  61. package/esm2022/lib/datasource/shared/options/options-api.providers.mjs +15 -0
  62. package/esm2022/lib/datasource/shared/options/options-api.service.mjs +85 -0
  63. package/esm2022/lib/datasource/shared/options/options.service.mjs +3 -0
  64. package/esm2022/lib/datasource/utils/index.mjs +2 -0
  65. package/esm2022/lib/datasource/utils/tilegrid.mjs +20 -0
  66. package/esm2022/lib/directions/directions-buttons/directions-buttons.component.mjs +265 -0
  67. package/esm2022/lib/directions/directions-buttons/index.mjs +2 -0
  68. package/esm2022/lib/directions/directions-inputs/directions-inputs.component.mjs +294 -0
  69. package/esm2022/lib/directions/directions-inputs/index.mjs +2 -0
  70. package/esm2022/lib/directions/directions-results/directions-results.component.mjs +215 -0
  71. package/esm2022/lib/directions/directions-results/index.mjs +2 -0
  72. package/esm2022/lib/directions/directions-sources/directions-source.interface.mjs +2 -0
  73. package/esm2022/lib/directions/directions-sources/directions-source.mjs +3 -0
  74. package/esm2022/lib/directions/directions-sources/directions-source.provider.mjs +16 -0
  75. package/esm2022/lib/directions/directions-sources/index.mjs +5 -0
  76. package/esm2022/lib/directions/directions-sources/osrm-directions-source.mjs +128 -0
  77. package/esm2022/lib/directions/directions.component.mjs +349 -0
  78. package/esm2022/lib/directions/directions.module.mjs +102 -0
  79. package/esm2022/lib/directions/index.mjs +7 -0
  80. package/esm2022/lib/directions/shared/directions-source.service.mjs +18 -0
  81. package/esm2022/lib/directions/shared/directions.enum.mjs +28 -0
  82. package/esm2022/lib/directions/shared/directions.interface.mjs +2 -0
  83. package/esm2022/lib/directions/shared/directions.service.mjs +202 -0
  84. package/esm2022/lib/directions/shared/directions.utils.mjs +559 -0
  85. package/esm2022/lib/directions/shared/index.mjs +6 -0
  86. package/esm2022/lib/directions/shared/store.mjs +21 -0
  87. package/esm2022/lib/download/download-button/download-button.component.mjs +65 -0
  88. package/esm2022/lib/download/download-button/index.mjs +2 -0
  89. package/esm2022/lib/download/download.module.mjs +42 -0
  90. package/esm2022/lib/download/index.mjs +3 -0
  91. package/esm2022/lib/download/shared/download.interface.mjs +2 -0
  92. package/esm2022/lib/download/shared/download.service.mjs +67 -0
  93. package/esm2022/lib/download/shared/index.mjs +3 -0
  94. package/esm2022/lib/draw/draw/draw-layer-popup.component.mjs +57 -0
  95. package/esm2022/lib/draw/draw/draw-popup.component.mjs +677 -0
  96. package/esm2022/lib/draw/draw/draw-shorcuts.component.mjs +48 -0
  97. package/esm2022/lib/draw/draw/draw.component.mjs +1369 -0
  98. package/esm2022/lib/draw/draw/draw.module.mjs +117 -0
  99. package/esm2022/lib/draw/drawingTool.module.mjs +18 -0
  100. package/esm2022/lib/draw/index.mjs +3 -0
  101. package/esm2022/lib/draw/shared/draw-icon.service.mjs +30 -0
  102. package/esm2022/lib/draw/shared/draw.enum.mjs +21 -0
  103. package/esm2022/lib/draw/shared/draw.interface.mjs +2 -0
  104. package/esm2022/lib/draw/shared/draw.utils.mjs +125 -0
  105. package/esm2022/lib/draw/shared/index.mjs +5 -0
  106. package/esm2022/lib/feature/feature-details/feature-details.component.mjs +440 -0
  107. package/esm2022/lib/feature/feature-details/feature-details.directive.mjs +57 -0
  108. package/esm2022/lib/feature/feature-details/feature-details.module.mjs +40 -0
  109. package/esm2022/lib/feature/feature-form/feature-form.component.mjs +120 -0
  110. package/esm2022/lib/feature/feature-form/feature-form.module.mjs +23 -0
  111. package/esm2022/lib/feature/feature.module.mjs +21 -0
  112. package/esm2022/lib/feature/index.mjs +4 -0
  113. package/esm2022/lib/feature/shared/feature-store.utils.mjs +27 -0
  114. package/esm2022/lib/feature/shared/feature.enums.mjs +9 -0
  115. package/esm2022/lib/feature/shared/feature.interfaces.mjs +2 -0
  116. package/esm2022/lib/feature/shared/feature.utils.mjs +333 -0
  117. package/esm2022/lib/feature/shared/index.mjs +8 -0
  118. package/esm2022/lib/feature/shared/store.mjs +143 -0
  119. package/esm2022/lib/feature/shared/strategies/geo-properties.mjs +216 -0
  120. package/esm2022/lib/feature/shared/strategies/in-map-extent.mjs +115 -0
  121. package/esm2022/lib/feature/shared/strategies/in-map-resolution.mjs +96 -0
  122. package/esm2022/lib/feature/shared/strategies/index.mjs +8 -0
  123. package/esm2022/lib/feature/shared/strategies/loading-layer.mjs +104 -0
  124. package/esm2022/lib/feature/shared/strategies/loading.mjs +136 -0
  125. package/esm2022/lib/feature/shared/strategies/search.mjs +159 -0
  126. package/esm2022/lib/feature/shared/strategies/selection.mjs +384 -0
  127. package/esm2022/lib/feature/shared/strategies.utils.mjs +37 -0
  128. package/esm2022/lib/filter/filter.module.mjs +300 -0
  129. package/esm2022/lib/filter/index.mjs +16 -0
  130. package/esm2022/lib/filter/ogc-filter-button/index.mjs +2 -0
  131. package/esm2022/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +153 -0
  132. package/esm2022/lib/filter/ogc-filter-form/index.mjs +2 -0
  133. package/esm2022/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +663 -0
  134. package/esm2022/lib/filter/ogc-filter-selection/index.mjs +2 -0
  135. package/esm2022/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +1344 -0
  136. package/esm2022/lib/filter/ogc-filter-time/index.mjs +3 -0
  137. package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.mjs +226 -0
  138. package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +936 -0
  139. package/esm2022/lib/filter/ogc-filterable-form/index.mjs +2 -0
  140. package/esm2022/lib/filter/ogc-filterable-form/ogc-filterable-form.component.mjs +63 -0
  141. package/esm2022/lib/filter/ogc-filterable-item/index.mjs +2 -0
  142. package/esm2022/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +320 -0
  143. package/esm2022/lib/filter/ogc-filterable-list/index.mjs +3 -0
  144. package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.mjs +36 -0
  145. package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs +47 -0
  146. package/esm2022/lib/filter/shared/filterable-datasource.pipe.mjs +55 -0
  147. package/esm2022/lib/filter/shared/index.mjs +12 -0
  148. package/esm2022/lib/filter/shared/ogc-filter-time.service.mjs +73 -0
  149. package/esm2022/lib/filter/shared/ogc-filter.enum.mjs +30 -0
  150. package/esm2022/lib/filter/shared/ogc-filter.interface.mjs +2 -0
  151. package/esm2022/lib/filter/shared/ogc-filter.mjs +699 -0
  152. package/esm2022/lib/filter/shared/ogc-filter.service.mjs +48 -0
  153. package/esm2022/lib/filter/shared/spatial-filter.enum.mjs +23 -0
  154. package/esm2022/lib/filter/shared/spatial-filter.interface.mjs +2 -0
  155. package/esm2022/lib/filter/shared/spatial-filter.service.mjs +280 -0
  156. package/esm2022/lib/filter/shared/time-filter.enum.mjs +13 -0
  157. package/esm2022/lib/filter/shared/time-filter.interface.mjs +2 -0
  158. package/esm2022/lib/filter/shared/time-filter.service.mjs +108 -0
  159. package/esm2022/lib/filter/spatial-filter/spatial-filter-item/index.mjs +2 -0
  160. package/esm2022/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +1150 -0
  161. package/esm2022/lib/filter/spatial-filter/spatial-filter-list/index.mjs +2 -0
  162. package/esm2022/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs +244 -0
  163. package/esm2022/lib/filter/spatial-filter/spatial-filter-type/index.mjs +2 -0
  164. package/esm2022/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +157 -0
  165. package/esm2022/lib/filter/time-filter-button/index.mjs +2 -0
  166. package/esm2022/lib/filter/time-filter-button/time-filter-button.component.mjs +82 -0
  167. package/esm2022/lib/filter/time-filter-form/index.mjs +2 -0
  168. package/esm2022/lib/filter/time-filter-form/time-filter-form.component.mjs +755 -0
  169. package/esm2022/lib/filter/time-filter-item/index.mjs +2 -0
  170. package/esm2022/lib/filter/time-filter-item/time-filter-item.component.mjs +124 -0
  171. package/esm2022/lib/filter/time-filter-list/index.mjs +3 -0
  172. package/esm2022/lib/filter/time-filter-list/time-filter-list-binding.directive.mjs +36 -0
  173. package/esm2022/lib/filter/time-filter-list/time-filter-list.component.mjs +40 -0
  174. package/esm2022/lib/geo.module.mjs +106 -0
  175. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs +563 -0
  176. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.component.mjs +218 -0
  177. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.module.mjs +56 -0
  178. package/esm2022/lib/geometry/geometry.module.mjs +20 -0
  179. package/esm2022/lib/geometry/index.mjs +4 -0
  180. package/esm2022/lib/geometry/shared/controls/draw.mjs +340 -0
  181. package/esm2022/lib/geometry/shared/controls/index.mjs +4 -0
  182. package/esm2022/lib/geometry/shared/controls/modify.mjs +541 -0
  183. package/esm2022/lib/geometry/shared/controls/slice.mjs +190 -0
  184. package/esm2022/lib/geometry/shared/geometry.errors.mjs +26 -0
  185. package/esm2022/lib/geometry/shared/geometry.interfaces.mjs +2 -0
  186. package/esm2022/lib/geometry/shared/geometry.utils.mjs +122 -0
  187. package/esm2022/lib/geometry/shared/index.mjs +5 -0
  188. package/esm2022/lib/import-export/export-button/export-button.component.mjs +66 -0
  189. package/esm2022/lib/import-export/export-button/index.mjs +2 -0
  190. package/esm2022/lib/import-export/import-export/import-export.component.mjs +1350 -0
  191. package/esm2022/lib/import-export/import-export/index.mjs +2 -0
  192. package/esm2022/lib/import-export/import-export.module.mjs +98 -0
  193. package/esm2022/lib/import-export/index.mjs +4 -0
  194. package/esm2022/lib/import-export/shared/drop-geo-file.directive.mjs +174 -0
  195. package/esm2022/lib/import-export/shared/export.errors.mjs +15 -0
  196. package/esm2022/lib/import-export/shared/export.interface.mjs +2 -0
  197. package/esm2022/lib/import-export/shared/export.service.mjs +205 -0
  198. package/esm2022/lib/import-export/shared/export.type.mjs +13 -0
  199. package/esm2022/lib/import-export/shared/export.utils.mjs +47 -0
  200. package/esm2022/lib/import-export/shared/import.errors.mjs +39 -0
  201. package/esm2022/lib/import-export/shared/import.interface.mjs +2 -0
  202. package/esm2022/lib/import-export/shared/import.service.mjs +221 -0
  203. package/esm2022/lib/import-export/shared/import.utils.mjs +203 -0
  204. package/esm2022/lib/import-export/shared/index.mjs +11 -0
  205. package/esm2022/lib/layer/index.mjs +10 -0
  206. package/esm2022/lib/layer/layer-item/index.mjs +2 -0
  207. package/esm2022/lib/layer/layer-item/layer-item.component.mjs +324 -0
  208. package/esm2022/lib/layer/layer-legend/index.mjs +2 -0
  209. package/esm2022/lib/layer/layer-legend/layer-legend.component.mjs +429 -0
  210. package/esm2022/lib/layer/layer-legend-item/index.mjs +2 -0
  211. package/esm2022/lib/layer/layer-legend-item/layer-legend-item.component.mjs +93 -0
  212. package/esm2022/lib/layer/layer-legend-list/index.mjs +3 -0
  213. package/esm2022/lib/layer/layer-legend-list/layer-legend-list-binding.directive.mjs +54 -0
  214. package/esm2022/lib/layer/layer-legend-list/layer-legend-list.component.mjs +201 -0
  215. package/esm2022/lib/layer/layer-list/index.mjs +4 -0
  216. package/esm2022/lib/layer/layer-list/layer-list-binding.directive.mjs +69 -0
  217. package/esm2022/lib/layer/layer-list/layer-list.component.mjs +1022 -0
  218. package/esm2022/lib/layer/layer-list/layer-list.enum.mjs +19 -0
  219. package/esm2022/lib/layer/layer-list-tool/index.mjs +5 -0
  220. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.component.mjs +157 -0
  221. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.enum.mjs +7 -0
  222. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.interface.mjs +2 -0
  223. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.service.mjs +22 -0
  224. package/esm2022/lib/layer/layer.module.mjs +175 -0
  225. package/esm2022/lib/layer/shared/clusterParam.mjs +2 -0
  226. package/esm2022/lib/layer/shared/index.mjs +5 -0
  227. package/esm2022/lib/layer/shared/layer.enums.mjs +2 -0
  228. package/esm2022/lib/layer/shared/layer.service.mjs +268 -0
  229. package/esm2022/lib/layer/shared/layers/any-layer.interface.mjs +2 -0
  230. package/esm2022/lib/layer/shared/layers/any-layer.mjs +2 -0
  231. package/esm2022/lib/layer/shared/layers/image-layer.interface.mjs +2 -0
  232. package/esm2022/lib/layer/shared/layers/image-layer.mjs +70 -0
  233. package/esm2022/lib/layer/shared/layers/index.mjs +13 -0
  234. package/esm2022/lib/layer/shared/layers/layer.interface.mjs +17 -0
  235. package/esm2022/lib/layer/shared/layers/layer.mjs +184 -0
  236. package/esm2022/lib/layer/shared/layers/legend.interface.mjs +2 -0
  237. package/esm2022/lib/layer/shared/layers/tile-layer.interface.mjs +2 -0
  238. package/esm2022/lib/layer/shared/layers/tile-layer.mjs +50 -0
  239. package/esm2022/lib/layer/shared/layers/vector-layer.interface.mjs +2 -0
  240. package/esm2022/lib/layer/shared/layers/vector-layer.mjs +562 -0
  241. package/esm2022/lib/layer/shared/layers/vectortile-layer.interface.mjs +2 -0
  242. package/esm2022/lib/layer/shared/layers/vectortile-layer.mjs +107 -0
  243. package/esm2022/lib/layer/track-feature-button/index.mjs +2 -0
  244. package/esm2022/lib/layer/track-feature-button/track-feature-button.component.mjs +60 -0
  245. package/esm2022/lib/layer/utils/image-watcher.mjs +62 -0
  246. package/esm2022/lib/layer/utils/index.mjs +6 -0
  247. package/esm2022/lib/layer/utils/layer.utils.mjs +11 -0
  248. package/esm2022/lib/layer/utils/outputLegend.mjs +28 -0
  249. package/esm2022/lib/layer/utils/tile-watcher.mjs +52 -0
  250. package/esm2022/lib/layer/utils/vector-watcher.mjs +50 -0
  251. package/esm2022/lib/map/baselayers-switcher/baselayers-switcher.animation.mjs +16 -0
  252. package/esm2022/lib/map/baselayers-switcher/baselayers-switcher.component.mjs +120 -0
  253. package/esm2022/lib/map/baselayers-switcher/index.mjs +3 -0
  254. package/esm2022/lib/map/baselayers-switcher/mini-basemap.component.mjs +155 -0
  255. package/esm2022/lib/map/geolocate-button/geolocate-button.component.mjs +87 -0
  256. package/esm2022/lib/map/geolocate-button/index.mjs +2 -0
  257. package/esm2022/lib/map/home-extent-button/home-extent-button.component.mjs +80 -0
  258. package/esm2022/lib/map/home-extent-button/index.mjs +2 -0
  259. package/esm2022/lib/map/index.mjs +14 -0
  260. package/esm2022/lib/map/info-section/index.mjs +2 -0
  261. package/esm2022/lib/map/info-section/info-section.component.mjs +29 -0
  262. package/esm2022/lib/map/map-browser/index.mjs +2 -0
  263. package/esm2022/lib/map/map-browser/map-browser.component.mjs +74 -0
  264. package/esm2022/lib/map/map-center/index.mjs +2 -0
  265. package/esm2022/lib/map/map-center/map-center.component.mjs +61 -0
  266. package/esm2022/lib/map/map.module.mjs +120 -0
  267. package/esm2022/lib/map/menu-button/index.mjs +2 -0
  268. package/esm2022/lib/map/menu-button/menu-button.component.mjs +66 -0
  269. package/esm2022/lib/map/offline-button/index.mjs +2 -0
  270. package/esm2022/lib/map/offline-button/offline-button.component.mjs +55 -0
  271. package/esm2022/lib/map/rotation-button/index.mjs +2 -0
  272. package/esm2022/lib/map/rotation-button/rotation-button.component.mjs +73 -0
  273. package/esm2022/lib/map/shared/controllers/controller.mjs +44 -0
  274. package/esm2022/lib/map/shared/controllers/geolocation.interface.mjs +8 -0
  275. package/esm2022/lib/map/shared/controllers/geolocation.mjs +431 -0
  276. package/esm2022/lib/map/shared/controllers/index.mjs +5 -0
  277. package/esm2022/lib/map/shared/controllers/view.mjs +360 -0
  278. package/esm2022/lib/map/shared/hover-feature.directive.mjs +493 -0
  279. package/esm2022/lib/map/shared/index.mjs +15 -0
  280. package/esm2022/lib/map/shared/linkedLayers.utils.mjs +248 -0
  281. package/esm2022/lib/map/shared/map-pointer-position.directive.mjs +121 -0
  282. package/esm2022/lib/map/shared/map.abstract.mjs +23 -0
  283. package/esm2022/lib/map/shared/map.enums.mjs +6 -0
  284. package/esm2022/lib/map/shared/map.interface.mjs +2 -0
  285. package/esm2022/lib/map/shared/map.mjs +434 -0
  286. package/esm2022/lib/map/shared/map.service.mjs +30 -0
  287. package/esm2022/lib/map/shared/map.utils.mjs +456 -0
  288. package/esm2022/lib/map/shared/mapOffline.directive.mjs +107 -0
  289. package/esm2022/lib/map/shared/projection.interfaces.mjs +2 -0
  290. package/esm2022/lib/map/shared/projection.service.mjs +67 -0
  291. package/esm2022/lib/map/shared/projection.utils.mjs +64 -0
  292. package/esm2022/lib/map/swipe-control/index.mjs +2 -0
  293. package/esm2022/lib/map/swipe-control/swipe-control.component.mjs +219 -0
  294. package/esm2022/lib/map/utils/layer-watcher.mjs +78 -0
  295. package/esm2022/lib/map/wake-lock-button/index.mjs +2 -0
  296. package/esm2022/lib/map/wake-lock-button/wake-lock-button.component.mjs +106 -0
  297. package/esm2022/lib/map/zoom-button/index.mjs +2 -0
  298. package/esm2022/lib/map/zoom-button/zoom-button.component.mjs +49 -0
  299. package/esm2022/lib/measure/index.mjs +4 -0
  300. package/esm2022/lib/measure/measure.module.mjs +18 -0
  301. package/esm2022/lib/measure/measurer/measure-format.pipe.mjs +39 -0
  302. package/esm2022/lib/measure/measurer/measurer-dialog.component.mjs +184 -0
  303. package/esm2022/lib/measure/measurer/measurer-item.component.mjs +162 -0
  304. package/esm2022/lib/measure/measurer/measurer.component.mjs +1121 -0
  305. package/esm2022/lib/measure/measurer/measurer.module.mjs +95 -0
  306. package/esm2022/lib/measure/shared/index.mjs +4 -0
  307. package/esm2022/lib/measure/shared/measure.enum.mjs +37 -0
  308. package/esm2022/lib/measure/shared/measure.interfaces.mjs +2 -0
  309. package/esm2022/lib/measure/shared/measure.utils.mjs +497 -0
  310. package/esm2022/lib/metadata/index.mjs +3 -0
  311. package/esm2022/lib/metadata/metadata-button/index.mjs +2 -0
  312. package/esm2022/lib/metadata/metadata-button/metadata-button.component.mjs +140 -0
  313. package/esm2022/lib/metadata/metadata.module.mjs +47 -0
  314. package/esm2022/lib/metadata/shared/index.mjs +3 -0
  315. package/esm2022/lib/metadata/shared/metadata.interface.mjs +2 -0
  316. package/esm2022/lib/metadata/shared/metadata.service.mjs +19 -0
  317. package/esm2022/lib/offline/geoDB/configFileToGeoDB.service.mjs +128 -0
  318. package/esm2022/lib/offline/geoDB/geoDB.enums.mjs +6 -0
  319. package/esm2022/lib/offline/geoDB/geoDB.interface.mjs +2 -0
  320. package/esm2022/lib/offline/geoDB/geoDB.service.mjs +175 -0
  321. package/esm2022/lib/offline/geoDB/index.mjs +5 -0
  322. package/esm2022/lib/offline/index.mjs +4 -0
  323. package/esm2022/lib/offline/layerDB/index.mjs +3 -0
  324. package/esm2022/lib/offline/layerDB/layerDB.interface.mjs +2 -0
  325. package/esm2022/lib/offline/layerDB/layerDB.service.mjs +84 -0
  326. package/esm2022/lib/offline/shared/geo-network.service.mjs +87 -0
  327. package/esm2022/lib/offline/shared/index.mjs +2 -0
  328. package/esm2022/lib/overlay/index.mjs +2 -0
  329. package/esm2022/lib/overlay/overlay.module.mjs +23 -0
  330. package/esm2022/lib/overlay/shared/index.mjs +6 -0
  331. package/esm2022/lib/overlay/shared/overlay.directive.mjs +38 -0
  332. package/esm2022/lib/overlay/shared/overlay.enum.mjs +8 -0
  333. package/esm2022/lib/overlay/shared/overlay.mjs +138 -0
  334. package/esm2022/lib/overlay/shared/overlay.service.mjs +26 -0
  335. package/esm2022/lib/overlay/shared/overlay.utils.mjs +17 -0
  336. package/esm2022/lib/print/index.mjs +4 -0
  337. package/esm2022/lib/print/print/print.component.mjs +122 -0
  338. package/esm2022/lib/print/print-form/index.mjs +2 -0
  339. package/esm2022/lib/print/print-form/print-form.component.mjs +580 -0
  340. package/esm2022/lib/print/print.module.mjs +65 -0
  341. package/esm2022/lib/print/shared/geopdf.mjs +68 -0
  342. package/esm2022/lib/print/shared/index.mjs +5 -0
  343. package/esm2022/lib/print/shared/print.interface.mjs +2 -0
  344. package/esm2022/lib/print/shared/print.service.mjs +1093 -0
  345. package/esm2022/lib/print/shared/print.type.mjs +30 -0
  346. package/esm2022/lib/query/index.mjs +2 -0
  347. package/esm2022/lib/query/query.module.mjs +29 -0
  348. package/esm2022/lib/query/shared/index.mjs +7 -0
  349. package/esm2022/lib/query/shared/query-search-source.mjs +35 -0
  350. package/esm2022/lib/query/shared/query-search-source.providers.mjs +22 -0
  351. package/esm2022/lib/query/shared/query.directive.mjs +285 -0
  352. package/esm2022/lib/query/shared/query.enums.mjs +30 -0
  353. package/esm2022/lib/query/shared/query.interfaces.mjs +2 -0
  354. package/esm2022/lib/query/shared/query.service.mjs +753 -0
  355. package/esm2022/lib/query/shared/query.utils.mjs +41 -0
  356. package/esm2022/lib/search/index.mjs +12 -0
  357. package/esm2022/lib/search/search-bar/search-bar.component.mjs +559 -0
  358. package/esm2022/lib/search/search-bar/search-bar.module.mjs +73 -0
  359. package/esm2022/lib/search/search-bar/search-url-param.directive.mjs +40 -0
  360. package/esm2022/lib/search/search-results/save-feature-dialog.component.mjs +132 -0
  361. package/esm2022/lib/search/search-results/search-results-add-button.component.mjs +456 -0
  362. package/esm2022/lib/search/search-results/search-results-item.component.mjs +166 -0
  363. package/esm2022/lib/search/search-results/search-results.component.mjs +480 -0
  364. package/esm2022/lib/search/search-results/search-results.module.mjs +104 -0
  365. package/esm2022/lib/search/search-selector/search-selector.component.mjs +133 -0
  366. package/esm2022/lib/search/search-selector/search-selector.module.mjs +56 -0
  367. package/esm2022/lib/search/search-settings/search-settings.component.mjs +448 -0
  368. package/esm2022/lib/search/search-settings/search-settings.module.mjs +60 -0
  369. package/esm2022/lib/search/search.module.mjs +67 -0
  370. package/esm2022/lib/search/shared/index.mjs +9 -0
  371. package/esm2022/lib/search/shared/search-pointer-summary.directive.mjs +337 -0
  372. package/esm2022/lib/search/shared/search-source-service.providers.mjs +20 -0
  373. package/esm2022/lib/search/shared/search-source.service.mjs +56 -0
  374. package/esm2022/lib/search/shared/search.enums.mjs +4 -0
  375. package/esm2022/lib/search/shared/search.interfaces.mjs +2 -0
  376. package/esm2022/lib/search/shared/search.service.mjs +130 -0
  377. package/esm2022/lib/search/shared/search.utils.mjs +92 -0
  378. package/esm2022/lib/search/shared/sources/cadastre.mjs +139 -0
  379. package/esm2022/lib/search/shared/sources/cadastre.providers.mjs +23 -0
  380. package/esm2022/lib/search/shared/sources/coordinates.interfaces.mjs +2 -0
  381. package/esm2022/lib/search/shared/sources/coordinates.mjs +166 -0
  382. package/esm2022/lib/search/shared/sources/coordinates.providers.mjs +40 -0
  383. package/esm2022/lib/search/shared/sources/icherche.interfaces.mjs +2 -0
  384. package/esm2022/lib/search/shared/sources/icherche.mjs +796 -0
  385. package/esm2022/lib/search/shared/sources/icherche.providers.mjs +66 -0
  386. package/esm2022/lib/search/shared/sources/ilayer.interfaces.mjs +2 -0
  387. package/esm2022/lib/search/shared/sources/ilayer.mjs +335 -0
  388. package/esm2022/lib/search/shared/sources/ilayer.providers.mjs +46 -0
  389. package/esm2022/lib/search/shared/sources/index.mjs +23 -0
  390. package/esm2022/lib/search/shared/sources/nominatim.interfaces.mjs +2 -0
  391. package/esm2022/lib/search/shared/sources/nominatim.mjs +263 -0
  392. package/esm2022/lib/search/shared/sources/nominatim.providers.mjs +23 -0
  393. package/esm2022/lib/search/shared/sources/source.interfaces.mjs +2 -0
  394. package/esm2022/lib/search/shared/sources/source.mjs +220 -0
  395. package/esm2022/lib/search/shared/sources/storedqueries.interfaces.mjs +2 -0
  396. package/esm2022/lib/search/shared/sources/storedqueries.mjs +455 -0
  397. package/esm2022/lib/search/shared/sources/storedqueries.providers.mjs +41 -0
  398. package/esm2022/lib/search/shared/sources/workspace.interfaces.mjs +2 -0
  399. package/esm2022/lib/search/shared/sources/workspace.mjs +191 -0
  400. package/esm2022/lib/search/shared/sources/workspace.providers.mjs +22 -0
  401. package/esm2022/lib/style/index.mjs +5 -0
  402. package/esm2022/lib/style/shared/datasource/esri-style-generator.mjs +359 -0
  403. package/esm2022/lib/style/shared/datasource/index.mjs +2 -0
  404. package/esm2022/lib/style/shared/feature/feature-style.mjs +161 -0
  405. package/esm2022/lib/style/shared/feature/index.mjs +2 -0
  406. package/esm2022/lib/style/shared/font.enum.mjs +17 -0
  407. package/esm2022/lib/style/shared/index.mjs +5 -0
  408. package/esm2022/lib/style/shared/overlay/index.mjs +3 -0
  409. package/esm2022/lib/style/shared/overlay/overlay-marker-style.utils.mjs +45 -0
  410. package/esm2022/lib/style/shared/overlay/overlay-style.utils.mjs +88 -0
  411. package/esm2022/lib/style/shared/vector/commonVectorStyle.mjs +78 -0
  412. package/esm2022/lib/style/shared/vector/conversion.utils.mjs +27 -0
  413. package/esm2022/lib/style/shared/vector/index.mjs +4 -0
  414. package/esm2022/lib/style/shared/vector/vector-style.interface.mjs +2 -0
  415. package/esm2022/lib/style/style-list/index.mjs +5 -0
  416. package/esm2022/lib/style/style-list/style-list.interface.mjs +2 -0
  417. package/esm2022/lib/style/style-list/style-list.module.mjs +23 -0
  418. package/esm2022/lib/style/style-list/style-list.provider.mjs +21 -0
  419. package/esm2022/lib/style/style-list/style-list.service.mjs +52 -0
  420. package/esm2022/lib/style/style-modal/drawing/index.mjs +2 -0
  421. package/esm2022/lib/style/style-modal/drawing/style-modal-drawing.component.mjs +288 -0
  422. package/esm2022/lib/style/style-modal/index.mjs +5 -0
  423. package/esm2022/lib/style/style-modal/layer/index.mjs +2 -0
  424. package/esm2022/lib/style/style-modal/layer/style-modal-layer.component.mjs +182 -0
  425. package/esm2022/lib/style/style-modal/layer-button/index.mjs +2 -0
  426. package/esm2022/lib/style/style-modal/layer-button/style-modal-layer-button.component.mjs +48 -0
  427. package/esm2022/lib/style/style-modal/shared/index.mjs +2 -0
  428. package/esm2022/lib/style/style-modal/shared/style-modal.interface.mjs +2 -0
  429. package/esm2022/lib/style/style-service/draw-style.service.mjs +256 -0
  430. package/esm2022/lib/style/style-service/index.mjs +3 -0
  431. package/esm2022/lib/style/style-service/style.service.mjs +393 -0
  432. package/esm2022/lib/style/style.module.mjs +92 -0
  433. package/esm2022/lib/toast/index.mjs +2 -0
  434. package/esm2022/lib/toast/toast.component.mjs +119 -0
  435. package/esm2022/lib/toast/toast.module.mjs +45 -0
  436. package/esm2022/lib/utils/googleLinks.mjs +13 -0
  437. package/esm2022/lib/utils/id-generator.mjs +110 -0
  438. package/esm2022/lib/utils/index.mjs +5 -0
  439. package/esm2022/lib/utils/osmLinks.mjs +9 -0
  440. package/esm2022/lib/utils/propertyTypeDetector/index.mjs +3 -0
  441. package/esm2022/lib/utils/propertyTypeDetector/propertyTypeDetector.interface.mjs +2 -0
  442. package/esm2022/lib/utils/propertyTypeDetector/propertyTypeDetector.service.mjs +64 -0
  443. package/esm2022/lib/wkt/index.mjs +2 -0
  444. package/esm2022/lib/wkt/shared/index.mjs +2 -0
  445. package/esm2022/lib/wkt/shared/wkt.service.mjs +236 -0
  446. package/esm2022/lib/wkt/wkt.module.mjs +22 -0
  447. package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.component.mjs +52 -0
  448. package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.module.mjs +36 -0
  449. package/esm2022/lib/workspace/confirmation-popup/index.mjs +3 -0
  450. package/esm2022/lib/workspace/index.mjs +8 -0
  451. package/esm2022/lib/workspace/shared/edition-workspace.mjs +304 -0
  452. package/esm2022/lib/workspace/shared/edition-workspace.service.mjs +711 -0
  453. package/esm2022/lib/workspace/shared/feature-workspace.mjs +41 -0
  454. package/esm2022/lib/workspace/shared/feature-workspace.service.mjs +109 -0
  455. package/esm2022/lib/workspace/shared/index.mjs +8 -0
  456. package/esm2022/lib/workspace/shared/wfs-workspace.mjs +41 -0
  457. package/esm2022/lib/workspace/shared/wfs-workspace.service.mjs +102 -0
  458. package/esm2022/lib/workspace/shared/wms-workspace.service.mjs +225 -0
  459. package/esm2022/lib/workspace/shared/workspace.utils.mjs +185 -0
  460. package/esm2022/lib/workspace/widgets/index.mjs +4 -0
  461. package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs +52 -0
  462. package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.module.mjs +25 -0
  463. package/esm2022/lib/workspace/widgets/widgets.mjs +15 -0
  464. package/esm2022/lib/workspace/workspace-selector/workspace-selector.directive.mjs +167 -0
  465. package/esm2022/lib/workspace/workspace-selector/workspace-selector.module.mjs +22 -0
  466. package/esm2022/lib/workspace/workspace-updator/workspace-updator.directive.mjs +135 -0
  467. package/esm2022/lib/workspace/workspace-updator/workspace-updator.module.mjs +22 -0
  468. package/esm2022/lib/workspace/workspace.module.mjs +58 -0
  469. package/esm2022/public_api.mjs +57 -0
  470. package/fesm2022/igo2-geo.mjs +48131 -0
  471. package/fesm2022/igo2-geo.mjs.map +1 -0
  472. package/geo-theme.scss +21 -0
  473. package/index.d.ts +5 -5
  474. package/lib/catalog/catalog-browser/catalog-browser-group.component.d.ts +117 -117
  475. package/lib/catalog/catalog-browser/catalog-browser-layer.component.d.ts +77 -77
  476. package/lib/catalog/catalog-browser/catalog-browser.component.d.ts +99 -99
  477. package/lib/catalog/catalog-browser/catalog-browser.module.d.ts +22 -22
  478. package/lib/catalog/catalog-library/add-catalog-dialog.component.d.ts +45 -45
  479. package/lib/catalog/catalog-library/catalog-library-item.component.d.ts +25 -25
  480. package/lib/catalog/catalog-library/catalog-library.component.d.ts +64 -64
  481. package/lib/catalog/catalog-library/catalog-library.module.d.ts +26 -26
  482. package/lib/catalog/catalog.module.d.ts +14 -14
  483. package/lib/catalog/index.d.ts +4 -4
  484. package/lib/catalog/shared/catalog.abstract.d.ts +41 -50
  485. package/lib/catalog/shared/catalog.enum.d.ts +14 -14
  486. package/lib/catalog/shared/catalog.interface.d.ts +76 -76
  487. package/lib/catalog/shared/catalog.service.d.ts +36 -36
  488. package/lib/catalog/shared/catalogs.d.ts +35 -0
  489. package/lib/catalog/shared/index.d.ts +4 -4
  490. package/lib/datasource/datasource.module.d.ts +8 -8
  491. package/lib/datasource/index.d.ts +2 -2
  492. package/lib/datasource/shared/capabilities.service.d.ts +37 -37
  493. package/lib/datasource/shared/datasource.service.d.ts +37 -37
  494. package/lib/datasource/shared/datasources/any-datasource.d.ts +16 -16
  495. package/lib/datasource/shared/datasources/any-datasource.interface.d.ts +15 -15
  496. package/lib/datasource/shared/datasources/arcgisrest-datasource.d.ts +14 -14
  497. package/lib/datasource/shared/datasources/arcgisrest-datasource.interface.d.ts +14 -14
  498. package/lib/datasource/shared/datasources/carto-datasource.d.ts +15 -15
  499. package/lib/datasource/shared/datasources/carto-datasource.interface.d.ts +13 -13
  500. package/lib/datasource/shared/datasources/cluster-datasource.d.ts +10 -10
  501. package/lib/datasource/shared/datasources/cluster-datasource.interface.d.ts +11 -11
  502. package/lib/datasource/shared/datasources/data.service.d.ts +3 -3
  503. package/lib/datasource/shared/datasources/datasource.d.ts +20 -20
  504. package/lib/datasource/shared/datasources/datasource.interface.d.ts +113 -113
  505. package/lib/datasource/shared/datasources/feature-datasource.d.ts +12 -12
  506. package/lib/datasource/shared/datasources/feature-datasource.interface.d.ts +23 -23
  507. package/lib/datasource/shared/datasources/imagearcgisrest-datasource.d.ts +15 -15
  508. package/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.d.ts +15 -15
  509. package/lib/datasource/shared/datasources/index.d.ts +35 -35
  510. package/lib/datasource/shared/datasources/mvt-datasource.d.ts +10 -10
  511. package/lib/datasource/shared/datasources/mvt-datasource.interface.d.ts +13 -13
  512. package/lib/datasource/shared/datasources/osm-datasource.d.ts +9 -9
  513. package/lib/datasource/shared/datasources/osm-datasource.interface.d.ts +7 -7
  514. package/lib/datasource/shared/datasources/tilearcgisrest-datasource.d.ts +15 -15
  515. package/lib/datasource/shared/datasources/tilearcgisrest-datasource.interface.d.ts +14 -14
  516. package/lib/datasource/shared/datasources/tiledebug-datasource.d.ts +9 -9
  517. package/lib/datasource/shared/datasources/tiledebug-datasource.interface.d.ts +9 -9
  518. package/lib/datasource/shared/datasources/websocket-datasource.d.ts +15 -15
  519. package/lib/datasource/shared/datasources/websocket-datasource.interface.d.ts +7 -7
  520. package/lib/datasource/shared/datasources/wfs-datasource.d.ts +20 -20
  521. package/lib/datasource/shared/datasources/wfs-datasource.interface.d.ts +20 -20
  522. package/lib/datasource/shared/datasources/wfs.service.d.ts +17 -17
  523. package/lib/datasource/shared/datasources/wms-datasource.d.ts +45 -31
  524. package/lib/datasource/shared/datasources/wms-datasource.interface.d.ts +37 -32
  525. package/lib/datasource/shared/datasources/wms-wfs.utils.d.ts +41 -41
  526. package/lib/datasource/shared/datasources/wmts-datasource.d.ts +10 -10
  527. package/lib/datasource/shared/datasources/wmts-datasource.interface.d.ts +13 -13
  528. package/lib/datasource/shared/datasources/xyz-datasource.d.ts +9 -9
  529. package/lib/datasource/shared/datasources/xyz-datasource.interface.d.ts +11 -11
  530. package/lib/datasource/shared/index.d.ts +4 -4
  531. package/lib/datasource/shared/options/index.d.ts +4 -4
  532. package/lib/datasource/shared/options/options-api.interface.d.ts +4 -4
  533. package/lib/datasource/shared/options/options-api.providers.d.ts +10 -10
  534. package/lib/datasource/shared/options/options-api.service.d.ts +16 -16
  535. package/lib/datasource/shared/options/options.service.d.ts +6 -6
  536. package/lib/datasource/utils/index.d.ts +1 -1
  537. package/lib/datasource/utils/tilegrid.d.ts +2 -2
  538. package/lib/directions/directions-buttons/directions-buttons.component.d.ts +35 -30
  539. package/lib/directions/directions-buttons/index.d.ts +1 -1
  540. package/lib/directions/directions-inputs/directions-inputs.component.d.ts +45 -45
  541. package/lib/directions/directions-inputs/index.d.ts +1 -1
  542. package/lib/directions/directions-results/directions-results.component.d.ts +30 -30
  543. package/lib/directions/directions-results/directions-results.theming.scss +10 -0
  544. package/lib/directions/directions-results/index.d.ts +1 -1
  545. package/lib/directions/directions-sources/directions-source.d.ts +7 -7
  546. package/lib/directions/directions-sources/directions-source.interface.d.ts +11 -11
  547. package/lib/directions/directions-sources/directions-source.provider.d.ts +11 -11
  548. package/lib/directions/directions-sources/index.d.ts +4 -4
  549. package/lib/directions/directions-sources/osrm-directions-source.d.ts +24 -23
  550. package/lib/directions/directions.component.d.ts +56 -56
  551. package/lib/directions/directions.module.d.ts +26 -26
  552. package/lib/directions/directions.theming.scss +6 -0
  553. package/lib/directions/index.d.ts +6 -6
  554. package/lib/directions/shared/directions-source.service.d.ts +11 -11
  555. package/lib/directions/shared/directions.enum.d.ts +22 -22
  556. package/lib/directions/shared/directions.interface.d.ts +126 -126
  557. package/lib/directions/shared/directions.service.d.ts +28 -13
  558. package/lib/directions/shared/directions.utils.d.ts +42 -42
  559. package/lib/directions/shared/index.d.ts +5 -5
  560. package/lib/directions/shared/store.d.ts +18 -18
  561. package/lib/download/download-button/download-button.component.d.ts +18 -18
  562. package/lib/download/download-button/index.d.ts +1 -1
  563. package/lib/download/download.module.d.ts +14 -14
  564. package/lib/download/index.d.ts +2 -2
  565. package/lib/download/shared/download.interface.d.ts +10 -10
  566. package/lib/download/shared/download.service.d.ts +10 -10
  567. package/lib/download/shared/index.d.ts +2 -2
  568. package/lib/draw/draw/draw-layer-popup.component.d.ts +14 -14
  569. package/lib/draw/draw/draw-popup.component.d.ts +63 -63
  570. package/lib/draw/draw/draw-shorcuts.component.d.ts +5 -5
  571. package/lib/draw/draw/draw.component.d.ts +240 -240
  572. package/lib/draw/draw/draw.module.d.ts +33 -34
  573. package/lib/draw/draw.theming.scss +32 -0
  574. package/lib/draw/drawingTool.module.d.ts +7 -7
  575. package/lib/draw/index.d.ts +2 -2
  576. package/lib/draw/shared/draw-icon.service.d.ts +12 -12
  577. package/lib/draw/shared/draw.enum.d.ts +17 -17
  578. package/lib/draw/shared/draw.interface.d.ts +40 -40
  579. package/lib/draw/shared/draw.utils.d.ts +35 -35
  580. package/lib/draw/shared/index.d.ts +4 -4
  581. package/lib/feature/feature-details/feature-details.component.d.ts +60 -60
  582. package/lib/feature/feature-details/feature-details.directive.d.ts +19 -19
  583. package/lib/feature/feature-details/feature-details.module.d.ts +15 -15
  584. package/lib/feature/feature-details/feature-details.theming.scss +16 -0
  585. package/lib/feature/feature-form/feature-form.component.d.ts +50 -50
  586. package/lib/feature/feature-form/feature-form.module.d.ts +12 -12
  587. package/lib/feature/feature.module.d.ts +9 -9
  588. package/lib/feature/feature.theming.scss +4 -0
  589. package/lib/feature/index.d.ts +3 -3
  590. package/lib/feature/shared/feature-store.utils.d.ts +10 -0
  591. package/lib/feature/shared/feature.enums.d.ts +7 -7
  592. package/lib/feature/shared/feature.interfaces.d.ts +82 -79
  593. package/lib/feature/shared/feature.utils.d.ts +97 -106
  594. package/lib/feature/shared/index.d.ts +7 -6
  595. package/lib/feature/shared/store.d.ts +78 -78
  596. package/lib/feature/shared/strategies/geo-properties.d.ts +61 -0
  597. package/lib/feature/shared/strategies/in-map-extent.d.ts +52 -52
  598. package/lib/feature/shared/strategies/in-map-resolution.d.ts +52 -52
  599. package/lib/feature/shared/strategies/index.d.ts +7 -6
  600. package/lib/feature/shared/strategies/loading-layer.d.ts +59 -59
  601. package/lib/feature/shared/strategies/loading.d.ts +75 -75
  602. package/lib/feature/shared/strategies/search.d.ts +55 -55
  603. package/lib/feature/shared/strategies/selection.d.ts +176 -176
  604. package/lib/feature/shared/strategies.utils.d.ts +17 -17
  605. package/lib/filter/filter.module.d.ts +53 -53
  606. package/lib/filter/filter.theming.scss +16 -0
  607. package/lib/filter/index.d.ts +15 -15
  608. package/lib/filter/ogc-filter-button/index.d.ts +1 -1
  609. package/lib/filter/ogc-filter-button/ogc-filter-button.component.d.ts +20 -20
  610. package/lib/filter/ogc-filter-form/index.d.ts +1 -1
  611. package/lib/filter/ogc-filter-form/ogc-filter-form.component.d.ts +65 -65
  612. package/lib/filter/ogc-filter-selection/index.d.ts +1 -1
  613. package/lib/filter/ogc-filter-selection/ogc-filter-selection.component.d.ts +93 -93
  614. package/lib/filter/ogc-filter-selection/ogc-filter-selection.theming.scss +18 -0
  615. package/lib/filter/ogc-filter-time/index.d.ts +2 -2
  616. package/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.d.ts +39 -39
  617. package/lib/filter/ogc-filter-time/ogc-filter-time-slider.theming.scss +15 -0
  618. package/lib/filter/ogc-filter-time/ogc-filter-time.component.d.ts +86 -86
  619. package/lib/filter/ogc-filterable-form/index.d.ts +1 -1
  620. package/lib/filter/ogc-filterable-form/ogc-filterable-form.component.d.ts +15 -15
  621. package/lib/filter/ogc-filterable-item/index.d.ts +1 -1
  622. package/lib/filter/ogc-filterable-item/ogc-filterable-item.component.d.ts +41 -41
  623. package/lib/filter/ogc-filterable-list/index.d.ts +2 -2
  624. package/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.d.ts +14 -14
  625. package/lib/filter/ogc-filterable-list/ogc-filterable-list.component.d.ts +10 -10
  626. package/lib/filter/shared/filterable-datasource.pipe.d.ts +10 -10
  627. package/lib/filter/shared/index.d.ts +11 -11
  628. package/lib/filter/shared/ogc-filter-time.service.d.ts +19 -19
  629. package/lib/filter/shared/ogc-filter.d.ts +29 -29
  630. package/lib/filter/shared/ogc-filter.enum.d.ts +27 -27
  631. package/lib/filter/shared/ogc-filter.interface.d.ts +200 -200
  632. package/lib/filter/shared/ogc-filter.service.d.ts +11 -11
  633. package/lib/filter/shared/spatial-filter.enum.d.ts +19 -19
  634. package/lib/filter/shared/spatial-filter.interface.d.ts +10 -10
  635. package/lib/filter/shared/spatial-filter.service.d.ts +37 -37
  636. package/lib/filter/shared/time-filter.enum.d.ts +10 -10
  637. package/lib/filter/shared/time-filter.interface.d.ts +15 -29
  638. package/lib/filter/shared/time-filter.service.d.ts +11 -11
  639. package/lib/filter/spatial-filter/spatial-filter-item/index.d.ts +1 -1
  640. package/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.d.ts +166 -166
  641. package/lib/filter/spatial-filter/spatial-filter-list/index.d.ts +1 -1
  642. package/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.d.ts +57 -57
  643. package/lib/filter/spatial-filter/spatial-filter-type/index.d.ts +1 -1
  644. package/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.d.ts +45 -45
  645. package/lib/filter/time-filter-button/index.d.ts +1 -1
  646. package/lib/filter/time-filter-button/time-filter-button.component.d.ts +20 -20
  647. package/lib/filter/time-filter-form/index.d.ts +1 -1
  648. package/lib/filter/time-filter-form/time-filter-form.component.d.ts +77 -77
  649. package/lib/filter/time-filter-form/time-filter-form.theming.scss +5 -0
  650. package/lib/filter/time-filter-item/index.d.ts +1 -1
  651. package/lib/filter/time-filter-item/time-filter-item.component.d.ts +28 -28
  652. package/lib/filter/time-filter-list/index.d.ts +2 -2
  653. package/lib/filter/time-filter-list/time-filter-list-binding.directive.d.ts +14 -14
  654. package/lib/filter/time-filter-list/time-filter-list.component.d.ts +12 -12
  655. package/lib/geo.module.d.ts +29 -29
  656. package/lib/geometry/geometry-form-field/geometry-form-field-input.component.d.ts +202 -202
  657. package/lib/geometry/geometry-form-field/geometry-form-field.component.d.ts +88 -88
  658. package/lib/geometry/geometry-form-field/geometry-form-field.module.d.ts +19 -19
  659. package/lib/geometry/geometry.module.d.ts +8 -8
  660. package/lib/geometry/index.d.ts +3 -3
  661. package/lib/geometry/shared/controls/draw.d.ts +150 -150
  662. package/lib/geometry/shared/controls/index.d.ts +3 -3
  663. package/lib/geometry/shared/controls/modify.d.ts +228 -228
  664. package/lib/geometry/shared/controls/slice.d.ts +99 -99
  665. package/lib/geometry/shared/geometry.errors.d.ts +11 -11
  666. package/lib/geometry/shared/geometry.interfaces.d.ts +13 -13
  667. package/lib/geometry/shared/geometry.utils.d.ts +45 -45
  668. package/lib/geometry/shared/index.d.ts +4 -4
  669. package/lib/import-export/export-button/export-button.component.d.ts +16 -16
  670. package/lib/import-export/export-button/index.d.ts +1 -1
  671. package/lib/import-export/import-export/import-export.component.d.ts +109 -109
  672. package/lib/import-export/import-export/index.d.ts +1 -1
  673. package/lib/import-export/import-export.module.d.ts +25 -25
  674. package/lib/import-export/index.d.ts +3 -3
  675. package/lib/import-export/shared/drop-geo-file.directive.d.ts +39 -39
  676. package/lib/import-export/shared/export.errors.d.ts +8 -8
  677. package/lib/import-export/shared/export.interface.d.ts +11 -11
  678. package/lib/import-export/shared/export.service.d.ts +30 -30
  679. package/lib/import-export/shared/export.type.d.ts +16 -16
  680. package/lib/import-export/shared/export.utils.d.ts +19 -19
  681. package/lib/import-export/shared/import.errors.d.ts +20 -20
  682. package/lib/import-export/shared/import.interface.d.ts +10 -10
  683. package/lib/import-export/shared/import.service.d.ts +31 -31
  684. package/lib/import-export/shared/import.utils.d.ts +20 -20
  685. package/lib/import-export/shared/index.d.ts +10 -10
  686. package/lib/layer/index.d.ts +9 -9
  687. package/lib/layer/layer-item/index.d.ts +1 -1
  688. package/lib/layer/layer-item/layer-item.component.d.ts +62 -62
  689. package/lib/layer/layer-legend/index.d.ts +1 -1
  690. package/lib/layer/layer-legend/layer-legend.component.d.ts +90 -90
  691. package/lib/layer/layer-legend/layer-legend.theming.scss +10 -0
  692. package/lib/layer/layer-legend-item/index.d.ts +1 -1
  693. package/lib/layer/layer-legend-item/layer-legend-item.component.d.ts +22 -22
  694. package/lib/layer/layer-legend-list/index.d.ts +2 -2
  695. package/lib/layer/layer-legend-list/layer-legend-list-binding.directive.d.ts +16 -16
  696. package/lib/layer/layer-legend-list/layer-legend-list.component.d.ts +31 -31
  697. package/lib/layer/layer-list/index.d.ts +3 -3
  698. package/lib/layer/layer-list/layer-list-binding.directive.d.ts +19 -19
  699. package/lib/layer/layer-list/layer-list.component.d.ts +127 -127
  700. package/lib/layer/layer-list/layer-list.enum.d.ts +15 -15
  701. package/lib/layer/layer-list-tool/index.d.ts +4 -4
  702. package/lib/layer/layer-list-tool/layer-list-tool.component.d.ts +32 -32
  703. package/lib/layer/layer-list-tool/layer-list-tool.enum.d.ts +5 -5
  704. package/lib/layer/layer-list-tool/layer-list-tool.interface.d.ts +8 -8
  705. package/lib/layer/layer-list-tool/layer-list-tool.service.d.ts +14 -14
  706. package/lib/layer/layer-list-tool/layer-list-tool.theming.scss +22 -0
  707. package/lib/layer/layer.module.d.ts +34 -35
  708. package/lib/layer/layer.theming.scss +24 -0
  709. package/lib/layer/shared/clusterParam.d.ts +13 -13
  710. package/lib/layer/shared/index.d.ts +4 -4
  711. package/lib/layer/shared/layer.enums.d.ts +1 -1
  712. package/lib/layer/shared/layer.service.d.ts +33 -33
  713. package/lib/layer/shared/layers/any-layer.d.ts +6 -6
  714. package/lib/layer/shared/layers/any-layer.interface.d.ts +6 -6
  715. package/lib/layer/shared/layers/image-layer.d.ts +21 -21
  716. package/lib/layer/shared/layers/image-layer.interface.d.ts +19 -19
  717. package/lib/layer/shared/layers/index.d.ts +12 -12
  718. package/lib/layer/shared/layers/layer.d.ts +66 -66
  719. package/lib/layer/shared/layers/layer.interface.d.ts +90 -109
  720. package/lib/layer/shared/layers/legend.interface.d.ts +22 -0
  721. package/lib/layer/shared/layers/tile-layer.d.ts +31 -31
  722. package/lib/layer/shared/layers/tile-layer.interface.d.ts +20 -20
  723. package/lib/layer/shared/layers/vector-layer.d.ts +94 -94
  724. package/lib/layer/shared/layers/vector-layer.interface.d.ts +42 -42
  725. package/lib/layer/shared/layers/vectortile-layer.d.ts +28 -28
  726. package/lib/layer/shared/layers/vectortile-layer.interface.d.ts +16 -16
  727. package/lib/layer/track-feature-button/index.d.ts +1 -1
  728. package/lib/layer/track-feature-button/track-feature-button.component.d.ts +15 -15
  729. package/lib/layer/utils/image-watcher.d.ts +16 -16
  730. package/lib/layer/utils/index.d.ts +5 -5
  731. package/lib/layer/utils/layer.utils.d.ts +2 -2
  732. package/lib/layer/utils/outputLegend.d.ts +7 -7
  733. package/lib/layer/utils/tile-watcher.d.ts +14 -14
  734. package/lib/layer/utils/vector-watcher.d.ts +13 -13
  735. package/lib/map/baselayers-switcher/baselayers-switcher.animation.d.ts +2 -2
  736. package/lib/map/baselayers-switcher/baselayers-switcher.component.d.ts +22 -21
  737. package/lib/map/baselayers-switcher/index.d.ts +2 -2
  738. package/lib/map/baselayers-switcher/mini-basemap.component.d.ts +29 -29
  739. package/lib/map/geolocate-button/geolocate-button.component.d.ts +22 -22
  740. package/lib/map/geolocate-button/index.d.ts +1 -1
  741. package/lib/map/home-extent-button/home-extent-button.component.d.ts +20 -20
  742. package/lib/map/home-extent-button/index.d.ts +1 -1
  743. package/lib/map/index.d.ts +13 -13
  744. package/lib/map/info-section/index.d.ts +1 -1
  745. package/lib/map/info-section/info-section.component.d.ts +7 -7
  746. package/lib/map/map-browser/index.d.ts +1 -1
  747. package/lib/map/map-browser/map-browser.component.d.ts +25 -25
  748. package/lib/map/map-browser/map-browser.theming.scss +46 -0
  749. package/lib/map/map-center/index.d.ts +1 -1
  750. package/lib/map/map-center/map-center.component.d.ts +31 -31
  751. package/lib/map/map.module.d.ts +28 -28
  752. package/lib/map/map.theming.scss +9 -0
  753. package/lib/map/menu-button/index.d.ts +1 -1
  754. package/lib/map/menu-button/menu-button.component.d.ts +17 -17
  755. package/lib/map/menu-button/menu-button.theming.scss +24 -0
  756. package/lib/map/offline-button/index.d.ts +1 -1
  757. package/lib/map/offline-button/offline-button.component.d.ts +15 -15
  758. package/lib/map/rotation-button/index.d.ts +1 -1
  759. package/lib/map/rotation-button/rotation-button.component.d.ts +17 -17
  760. package/lib/map/shared/controllers/controller.d.ts +29 -29
  761. package/lib/map/shared/controllers/geolocation.d.ts +95 -127
  762. package/lib/map/shared/controllers/geolocation.interface.d.ts +30 -0
  763. package/lib/map/shared/controllers/index.d.ts +4 -3
  764. package/lib/map/shared/controllers/view.d.ts +200 -200
  765. package/lib/map/shared/hover-feature.directive.d.ts +124 -124
  766. package/lib/map/shared/index.d.ts +14 -13
  767. package/lib/map/shared/linkedLayers.utils.d.ts +17 -17
  768. package/lib/map/shared/map-pointer-position.directive.d.ts +71 -71
  769. package/lib/map/shared/map.abstract.d.ts +59 -0
  770. package/lib/map/shared/map.d.ts +140 -135
  771. package/lib/map/shared/map.enums.d.ts +4 -4
  772. package/lib/map/shared/map.interface.d.ts +57 -57
  773. package/lib/map/shared/map.service.d.ts +19 -19
  774. package/lib/map/shared/map.utils.d.ts +90 -90
  775. package/lib/map/shared/mapOffline.directive.d.ts +18 -18
  776. package/lib/map/shared/projection.interfaces.d.ts +29 -29
  777. package/lib/map/shared/projection.service.d.ts +19 -19
  778. package/lib/map/shared/projection.utils.d.ts +19 -19
  779. package/lib/map/swipe-control/index.d.ts +1 -1
  780. package/lib/map/swipe-control/swipe-control.component.d.ts +97 -97
  781. package/lib/map/utils/layer-watcher.d.ts +20 -20
  782. package/lib/map/wake-lock-button/index.d.ts +1 -1
  783. package/lib/map/wake-lock-button/wake-lock-button.component.d.ts +27 -27
  784. package/lib/map/zoom-button/index.d.ts +1 -1
  785. package/lib/map/zoom-button/zoom-button.component.d.ts +12 -12
  786. package/lib/map/zoom-button/zoom-button.theming.scss +32 -0
  787. package/lib/measure/index.d.ts +3 -3
  788. package/lib/measure/measure.module.d.ts +7 -7
  789. package/lib/measure/measure.theming.scss +5 -0
  790. package/lib/measure/measurer/measure-format.pipe.d.ts +15 -15
  791. package/lib/measure/measurer/measurer-dialog.component.d.ts +14 -14
  792. package/lib/measure/measurer/measurer-item.component.d.ts +66 -66
  793. package/lib/measure/measurer/measurer.component.d.ts +405 -405
  794. package/lib/measure/measurer/measurer.module.d.ts +26 -25
  795. package/lib/measure/measurer/measurer.theming.scss +26 -0
  796. package/lib/measure/shared/index.d.ts +3 -3
  797. package/lib/measure/shared/measure.enum.d.ts +33 -33
  798. package/lib/measure/shared/measure.interfaces.d.ts +21 -21
  799. package/lib/measure/shared/measure.utils.d.ts +180 -180
  800. package/lib/metadata/index.d.ts +2 -2
  801. package/lib/metadata/metadata-button/index.d.ts +1 -1
  802. package/lib/metadata/metadata-button/metadata-button.component.d.ts +26 -26
  803. package/lib/metadata/metadata.module.d.ts +15 -15
  804. package/lib/metadata/shared/index.d.ts +2 -2
  805. package/lib/metadata/shared/metadata.interface.d.ts +13 -13
  806. package/lib/metadata/shared/metadata.service.d.ts +8 -8
  807. package/lib/offline/geoDB/configFileToGeoDB.service.d.ts +14 -14
  808. package/lib/offline/geoDB/geoDB.enums.d.ts +4 -4
  809. package/lib/offline/geoDB/geoDB.interface.d.ts +19 -19
  810. package/lib/offline/geoDB/geoDB.service.d.ts +37 -37
  811. package/lib/offline/geoDB/index.d.ts +4 -4
  812. package/lib/offline/index.d.ts +3 -3
  813. package/lib/offline/layerDB/index.d.ts +2 -2
  814. package/lib/offline/layerDB/layerDB.interface.d.ts +7 -7
  815. package/lib/offline/layerDB/layerDB.service.d.ts +36 -36
  816. package/lib/offline/shared/geo-network.service.d.ts +28 -28
  817. package/lib/offline/shared/index.d.ts +1 -1
  818. package/lib/overlay/index.d.ts +1 -1
  819. package/lib/overlay/overlay.module.d.ts +9 -9
  820. package/lib/overlay/shared/index.d.ts +5 -5
  821. package/lib/overlay/shared/overlay.d.ts +81 -81
  822. package/lib/overlay/shared/overlay.directive.d.ts +18 -18
  823. package/lib/overlay/shared/overlay.enum.d.ts +6 -6
  824. package/lib/overlay/shared/overlay.service.d.ts +14 -14
  825. package/lib/overlay/shared/overlay.utils.d.ts +6 -6
  826. package/lib/print/index.d.ts +3 -3
  827. package/lib/print/print/print.component.d.ts +35 -35
  828. package/lib/print/print-form/index.d.ts +1 -1
  829. package/lib/print/print-form/print-form.component.d.ts +99 -99
  830. package/lib/print/print.module.d.ts +19 -19
  831. package/lib/print/shared/geopdf.d.ts +1 -1
  832. package/lib/print/shared/index.d.ts +4 -4
  833. package/lib/print/shared/print.interface.d.ts +22 -22
  834. package/lib/print/shared/print.service.d.ts +171 -174
  835. package/lib/print/shared/print.type.d.ts +45 -45
  836. package/lib/query/index.d.ts +1 -1
  837. package/lib/query/query.module.d.ts +11 -11
  838. package/lib/query/shared/index.d.ts +6 -6
  839. package/lib/query/shared/query-search-source.d.ts +17 -17
  840. package/lib/query/shared/query-search-source.providers.d.ts +17 -17
  841. package/lib/query/shared/query.directive.d.ts +105 -105
  842. package/lib/query/shared/query.enums.d.ts +26 -26
  843. package/lib/query/shared/query.interfaces.d.ts +35 -35
  844. package/lib/query/shared/query.service.d.ts +56 -56
  845. package/lib/query/shared/query.utils.d.ts +27 -27
  846. package/lib/search/index.d.ts +11 -11
  847. package/lib/search/search-bar/search-bar.component.d.ts +231 -230
  848. package/lib/search/search-bar/search-bar.module.d.ts +24 -23
  849. package/lib/search/search-bar/search-bar.theming.scss +36 -0
  850. package/lib/search/search-bar/search-url-param.directive.d.ts +13 -13
  851. package/lib/search/search-results/save-feature-dialog.component.d.ts +32 -32
  852. package/lib/search/search-results/search-results-add-button.component.d.ts +84 -84
  853. package/lib/search/search-results/search-results-item.component.d.ts +52 -52
  854. package/lib/search/search-results/search-results.component.d.ts +165 -165
  855. package/lib/search/search-results/search-results.module.d.ts +29 -29
  856. package/lib/search/search-selector/search-selector.component.d.ts +58 -58
  857. package/lib/search/search-selector/search-selector.module.d.ts +19 -19
  858. package/lib/search/search-settings/search-settings.component.d.ts +102 -102
  859. package/lib/search/search-settings/search-settings.module.d.ts +20 -20
  860. package/lib/search/search.module.d.ts +14 -14
  861. package/lib/search/search.theming.scss +5 -0
  862. package/lib/search/shared/index.d.ts +8 -8
  863. package/lib/search/shared/search-pointer-summary.directive.d.ts +125 -124
  864. package/lib/search/shared/search-source-service.providers.d.ts +15 -15
  865. package/lib/search/shared/search-source.service.d.ts +39 -39
  866. package/lib/search/shared/search.enums.d.ts +1 -1
  867. package/lib/search/shared/search.interfaces.d.ts +54 -29
  868. package/lib/search/shared/search.service.d.ts +53 -53
  869. package/lib/search/shared/search.utils.d.ts +39 -39
  870. package/lib/search/shared/sources/cadastre.d.ts +34 -33
  871. package/lib/search/shared/sources/cadastre.providers.d.ts +18 -18
  872. package/lib/search/shared/sources/coordinates.d.ts +40 -40
  873. package/lib/search/shared/sources/coordinates.interfaces.d.ts +12 -12
  874. package/lib/search/shared/sources/coordinates.providers.d.ts +31 -31
  875. package/lib/search/shared/sources/icherche.d.ts +98 -96
  876. package/lib/search/shared/sources/icherche.interfaces.d.ts +30 -30
  877. package/lib/search/shared/sources/icherche.providers.d.ts +46 -46
  878. package/lib/search/shared/sources/ilayer.d.ts +56 -55
  879. package/lib/search/shared/sources/ilayer.interfaces.d.ts +47 -47
  880. package/lib/search/shared/sources/ilayer.providers.d.ts +31 -31
  881. package/lib/search/shared/sources/index.d.ts +22 -22
  882. package/lib/search/shared/sources/nominatim.d.ts +46 -45
  883. package/lib/search/shared/sources/nominatim.interfaces.d.ts +10 -10
  884. package/lib/search/shared/sources/nominatim.providers.d.ts +18 -18
  885. package/lib/search/shared/sources/source.d.ts +86 -114
  886. package/lib/search/shared/sources/source.interfaces.d.ts +54 -47
  887. package/lib/search/shared/sources/storedqueries.d.ts +75 -73
  888. package/lib/search/shared/sources/storedqueries.interfaces.d.ts +42 -42
  889. package/lib/search/shared/sources/storedqueries.providers.d.ts +32 -32
  890. package/lib/search/shared/sources/workspace.d.ts +33 -33
  891. package/lib/search/shared/sources/workspace.interfaces.d.ts +9 -9
  892. package/lib/search/shared/sources/workspace.providers.d.ts +17 -17
  893. package/lib/style/index.d.ts +4 -4
  894. package/lib/style/shared/datasource/esri-style-generator.d.ts +21 -21
  895. package/lib/style/shared/datasource/index.d.ts +1 -1
  896. package/lib/style/shared/feature/feature-style.d.ts +18 -18
  897. package/lib/style/shared/feature/index.d.ts +1 -1
  898. package/lib/style/shared/font.enum.d.ts +15 -15
  899. package/lib/style/shared/index.d.ts +4 -4
  900. package/lib/style/shared/overlay/index.d.ts +2 -2
  901. package/lib/style/shared/overlay/overlay-marker-style.utils.d.ts +11 -11
  902. package/lib/style/shared/overlay/overlay-style.utils.d.ts +19 -19
  903. package/lib/style/shared/vector/commonVectorStyle.d.ts +14 -14
  904. package/lib/style/shared/vector/conversion.utils.d.ts +22 -22
  905. package/lib/style/shared/vector/index.d.ts +3 -3
  906. package/lib/style/shared/vector/vector-style.interface.d.ts +69 -69
  907. package/lib/style/style-list/index.d.ts +4 -4
  908. package/lib/style/style-list/style-list.interface.d.ts +6 -6
  909. package/lib/style/style-list/style-list.module.d.ts +8 -8
  910. package/lib/style/style-list/style-list.provider.d.ts +15 -15
  911. package/lib/style/style-list/style-list.service.d.ts +18 -18
  912. package/lib/style/style-modal/drawing/index.d.ts +1 -1
  913. package/lib/style/style-modal/drawing/style-modal-drawing.component.d.ts +33 -31
  914. package/lib/style/style-modal/index.d.ts +4 -4
  915. package/lib/style/style-modal/layer/index.d.ts +1 -1
  916. package/lib/style/style-modal/layer/style-modal-layer.component.d.ts +32 -30
  917. package/lib/style/style-modal/layer-button/index.d.ts +1 -1
  918. package/lib/style/style-modal/layer-button/style-modal-layer-button.component.d.ts +14 -14
  919. package/lib/style/style-modal/shared/index.d.ts +1 -1
  920. package/lib/style/style-modal/shared/style-modal.interface.d.ts +17 -17
  921. package/lib/style/style-service/draw-style.service.d.ts +35 -35
  922. package/lib/style/style-service/index.d.ts +2 -2
  923. package/lib/style/style-service/style.service.d.ts +57 -57
  924. package/lib/style/style.module.d.ts +23 -22
  925. package/lib/toast/index.d.ts +1 -1
  926. package/lib/toast/toast.component.d.ts +33 -33
  927. package/lib/toast/toast.module.d.ts +14 -14
  928. package/lib/utils/googleLinks.d.ts +5 -5
  929. package/lib/utils/id-generator.d.ts +54 -54
  930. package/lib/utils/index.d.ts +4 -3
  931. package/lib/utils/osmLinks.d.ts +4 -4
  932. package/lib/utils/propertyTypeDetector/index.d.ts +2 -0
  933. package/lib/utils/propertyTypeDetector/propertyTypeDetector.interface.d.ts +5 -0
  934. package/lib/utils/propertyTypeDetector/propertyTypeDetector.service.d.ts +15 -0
  935. package/lib/wkt/index.d.ts +1 -1
  936. package/lib/wkt/shared/index.d.ts +1 -1
  937. package/lib/wkt/shared/wkt.service.d.ts +19 -19
  938. package/lib/wkt/wkt.module.d.ts +8 -8
  939. package/lib/workspace/confirmation-popup/confirmation-popup.component.d.ts +23 -23
  940. package/lib/workspace/confirmation-popup/confirmation-popup.module.d.ts +14 -14
  941. package/lib/workspace/confirmation-popup/confirmation-popup.theming.scss +14 -0
  942. package/lib/workspace/confirmation-popup/index.d.ts +2 -2
  943. package/lib/workspace/index.d.ts +7 -7
  944. package/lib/workspace/shared/edition-workspace.d.ts +84 -82
  945. package/lib/workspace/shared/edition-workspace.service.d.ts +50 -51
  946. package/lib/workspace/shared/feature-workspace.d.ts +18 -18
  947. package/lib/workspace/shared/feature-workspace.service.d.ts +22 -19
  948. package/lib/workspace/shared/index.d.ts +7 -7
  949. package/lib/workspace/shared/wfs-workspace.d.ts +18 -18
  950. package/lib/workspace/shared/wfs-workspace.service.d.ts +22 -19
  951. package/lib/workspace/shared/wms-workspace.service.d.ts +24 -22
  952. package/lib/workspace/shared/workspace.utils.d.ts +23 -10
  953. package/lib/workspace/widgets/index.d.ts +3 -3
  954. package/lib/workspace/widgets/ogc-filter/ogc-filter.component.d.ts +29 -29
  955. package/lib/workspace/widgets/ogc-filter/ogc-filter.module.d.ts +14 -14
  956. package/lib/workspace/widgets/widgets.d.ts +9 -9
  957. package/lib/workspace/workspace-selector/workspace-selector.directive.d.ts +32 -32
  958. package/lib/workspace/workspace-selector/workspace-selector.module.d.ts +11 -11
  959. package/lib/workspace/workspace-updator/workspace-updator.directive.d.ts +26 -26
  960. package/lib/workspace/workspace-updator/workspace-updator.module.d.ts +11 -11
  961. package/lib/workspace/workspace.module.d.ts +14 -14
  962. package/lib/workspace/workspace.theming.scss +6 -0
  963. package/locale/en.geo.json +807 -0
  964. package/locale/fr.geo.json +808 -0
  965. package/package.json +38 -38
  966. package/public_api.d.ts +53 -53
  967. package/style/style.css +350 -0
  968. package/esm2020/igo2-geo.mjs +0 -5
  969. package/esm2020/lib/catalog/catalog-browser/catalog-browser-group.component.mjs +0 -303
  970. package/esm2020/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs +0 -306
  971. package/esm2020/lib/catalog/catalog-browser/catalog-browser.component.mjs +0 -250
  972. package/esm2020/lib/catalog/catalog-browser/catalog-browser.module.mjs +0 -80
  973. package/esm2020/lib/catalog/catalog-library/add-catalog-dialog.component.mjs +0 -209
  974. package/esm2020/lib/catalog/catalog-library/catalog-library-item.component.mjs +0 -79
  975. package/esm2020/lib/catalog/catalog-library/catalog-library.component.mjs +0 -212
  976. package/esm2020/lib/catalog/catalog-library/catalog-library.module.mjs +0 -95
  977. package/esm2020/lib/catalog/catalog.module.mjs +0 -53
  978. package/esm2020/lib/catalog/index.mjs +0 -5
  979. package/esm2020/lib/catalog/shared/catalog.abstract.mjs +0 -95
  980. package/esm2020/lib/catalog/shared/catalog.enum.mjs +0 -16
  981. package/esm2020/lib/catalog/shared/catalog.interface.mjs +0 -2
  982. package/esm2020/lib/catalog/shared/catalog.service.mjs +0 -604
  983. package/esm2020/lib/catalog/shared/index.mjs +0 -5
  984. package/esm2020/lib/datasource/datasource.module.mjs +0 -22
  985. package/esm2020/lib/datasource/index.mjs +0 -3
  986. package/esm2020/lib/datasource/shared/capabilities.service.mjs +0 -431
  987. package/esm2020/lib/datasource/shared/datasource.service.mjs +0 -232
  988. package/esm2020/lib/datasource/shared/datasources/any-datasource.interface.mjs +0 -2
  989. package/esm2020/lib/datasource/shared/datasources/any-datasource.mjs +0 -2
  990. package/esm2020/lib/datasource/shared/datasources/arcgisrest-datasource.interface.mjs +0 -2
  991. package/esm2020/lib/datasource/shared/datasources/arcgisrest-datasource.mjs +0 -145
  992. package/esm2020/lib/datasource/shared/datasources/carto-datasource.interface.mjs +0 -2
  993. package/esm2020/lib/datasource/shared/datasources/carto-datasource.mjs +0 -109
  994. package/esm2020/lib/datasource/shared/datasources/cluster-datasource.interface.mjs +0 -2
  995. package/esm2020/lib/datasource/shared/datasources/cluster-datasource.mjs +0 -15
  996. package/esm2020/lib/datasource/shared/datasources/data.service.mjs +0 -3
  997. package/esm2020/lib/datasource/shared/datasources/datasource.interface.mjs +0 -2
  998. package/esm2020/lib/datasource/shared/datasources/datasource.mjs +0 -29
  999. package/esm2020/lib/datasource/shared/datasources/feature-datasource.interface.mjs +0 -2
  1000. package/esm2020/lib/datasource/shared/datasources/feature-datasource.mjs +0 -43
  1001. package/esm2020/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.mjs +0 -2
  1002. package/esm2020/lib/datasource/shared/datasources/imagearcgisrest-datasource.mjs +0 -57
  1003. package/esm2020/lib/datasource/shared/datasources/index.mjs +0 -36
  1004. package/esm2020/lib/datasource/shared/datasources/mvt-datasource.interface.mjs +0 -2
  1005. package/esm2020/lib/datasource/shared/datasources/mvt-datasource.mjs +0 -28
  1006. package/esm2020/lib/datasource/shared/datasources/osm-datasource.interface.mjs +0 -2
  1007. package/esm2020/lib/datasource/shared/datasources/osm-datasource.mjs +0 -12
  1008. package/esm2020/lib/datasource/shared/datasources/tilearcgisrest-datasource.interface.mjs +0 -2
  1009. package/esm2020/lib/datasource/shared/datasources/tilearcgisrest-datasource.mjs +0 -49
  1010. package/esm2020/lib/datasource/shared/datasources/tiledebug-datasource.interface.mjs +0 -2
  1011. package/esm2020/lib/datasource/shared/datasources/tiledebug-datasource.mjs +0 -15
  1012. package/esm2020/lib/datasource/shared/datasources/websocket-datasource.interface.mjs +0 -2
  1013. package/esm2020/lib/datasource/shared/datasources/websocket-datasource.mjs +0 -54
  1014. package/esm2020/lib/datasource/shared/datasources/wfs-datasource.interface.mjs +0 -2
  1015. package/esm2020/lib/datasource/shared/datasources/wfs-datasource.mjs +0 -72
  1016. package/esm2020/lib/datasource/shared/datasources/wfs.service.mjs +0 -152
  1017. package/esm2020/lib/datasource/shared/datasources/wms-datasource.interface.mjs +0 -2
  1018. package/esm2020/lib/datasource/shared/datasources/wms-datasource.mjs +0 -206
  1019. package/esm2020/lib/datasource/shared/datasources/wms-wfs.utils.mjs +0 -207
  1020. package/esm2020/lib/datasource/shared/datasources/wmts-datasource.interface.mjs +0 -2
  1021. package/esm2020/lib/datasource/shared/datasources/wmts-datasource.mjs +0 -16
  1022. package/esm2020/lib/datasource/shared/datasources/xyz-datasource.interface.mjs +0 -2
  1023. package/esm2020/lib/datasource/shared/datasources/xyz-datasource.mjs +0 -9
  1024. package/esm2020/lib/datasource/shared/index.mjs +0 -5
  1025. package/esm2020/lib/datasource/shared/options/index.mjs +0 -5
  1026. package/esm2020/lib/datasource/shared/options/options-api.interface.mjs +0 -2
  1027. package/esm2020/lib/datasource/shared/options/options-api.providers.mjs +0 -15
  1028. package/esm2020/lib/datasource/shared/options/options-api.service.mjs +0 -81
  1029. package/esm2020/lib/datasource/shared/options/options.service.mjs +0 -3
  1030. package/esm2020/lib/datasource/utils/index.mjs +0 -2
  1031. package/esm2020/lib/datasource/utils/tilegrid.mjs +0 -20
  1032. package/esm2020/lib/directions/directions-buttons/directions-buttons.component.mjs +0 -218
  1033. package/esm2020/lib/directions/directions-buttons/index.mjs +0 -2
  1034. package/esm2020/lib/directions/directions-inputs/directions-inputs.component.mjs +0 -290
  1035. package/esm2020/lib/directions/directions-inputs/index.mjs +0 -2
  1036. package/esm2020/lib/directions/directions-results/directions-results.component.mjs +0 -196
  1037. package/esm2020/lib/directions/directions-results/index.mjs +0 -2
  1038. package/esm2020/lib/directions/directions-sources/directions-source.interface.mjs +0 -2
  1039. package/esm2020/lib/directions/directions-sources/directions-source.mjs +0 -3
  1040. package/esm2020/lib/directions/directions-sources/directions-source.provider.mjs +0 -16
  1041. package/esm2020/lib/directions/directions-sources/index.mjs +0 -5
  1042. package/esm2020/lib/directions/directions-sources/osrm-directions-source.mjs +0 -99
  1043. package/esm2020/lib/directions/directions.component.mjs +0 -311
  1044. package/esm2020/lib/directions/directions.module.mjs +0 -102
  1045. package/esm2020/lib/directions/index.mjs +0 -7
  1046. package/esm2020/lib/directions/shared/directions-source.service.mjs +0 -17
  1047. package/esm2020/lib/directions/shared/directions.enum.mjs +0 -28
  1048. package/esm2020/lib/directions/shared/directions.interface.mjs +0 -2
  1049. package/esm2020/lib/directions/shared/directions.service.mjs +0 -29
  1050. package/esm2020/lib/directions/shared/directions.utils.mjs +0 -509
  1051. package/esm2020/lib/directions/shared/index.mjs +0 -6
  1052. package/esm2020/lib/directions/shared/store.mjs +0 -24
  1053. package/esm2020/lib/download/download-button/download-button.component.mjs +0 -61
  1054. package/esm2020/lib/download/download-button/index.mjs +0 -2
  1055. package/esm2020/lib/download/download.module.mjs +0 -42
  1056. package/esm2020/lib/download/index.mjs +0 -3
  1057. package/esm2020/lib/download/shared/download.interface.mjs +0 -2
  1058. package/esm2020/lib/download/shared/download.service.mjs +0 -62
  1059. package/esm2020/lib/download/shared/index.mjs +0 -3
  1060. package/esm2020/lib/draw/draw/draw-layer-popup.component.mjs +0 -55
  1061. package/esm2020/lib/draw/draw/draw-popup.component.mjs +0 -591
  1062. package/esm2020/lib/draw/draw/draw-shorcuts.component.mjs +0 -48
  1063. package/esm2020/lib/draw/draw/draw.component.mjs +0 -1300
  1064. package/esm2020/lib/draw/draw/draw.module.mjs +0 -113
  1065. package/esm2020/lib/draw/drawingTool.module.mjs +0 -20
  1066. package/esm2020/lib/draw/index.mjs +0 -3
  1067. package/esm2020/lib/draw/shared/draw-icon.service.mjs +0 -27
  1068. package/esm2020/lib/draw/shared/draw.enum.mjs +0 -21
  1069. package/esm2020/lib/draw/shared/draw.interface.mjs +0 -2
  1070. package/esm2020/lib/draw/shared/draw.utils.mjs +0 -122
  1071. package/esm2020/lib/draw/shared/index.mjs +0 -5
  1072. package/esm2020/lib/feature/feature-details/feature-details.component.mjs +0 -404
  1073. package/esm2020/lib/feature/feature-details/feature-details.directive.mjs +0 -54
  1074. package/esm2020/lib/feature/feature-details/feature-details.module.mjs +0 -48
  1075. package/esm2020/lib/feature/feature-form/feature-form.component.mjs +0 -112
  1076. package/esm2020/lib/feature/feature-form/feature-form.module.mjs +0 -34
  1077. package/esm2020/lib/feature/feature.module.mjs +0 -28
  1078. package/esm2020/lib/feature/index.mjs +0 -4
  1079. package/esm2020/lib/feature/shared/feature.enums.mjs +0 -9
  1080. package/esm2020/lib/feature/shared/feature.interfaces.mjs +0 -2
  1081. package/esm2020/lib/feature/shared/feature.utils.mjs +0 -349
  1082. package/esm2020/lib/feature/shared/index.mjs +0 -7
  1083. package/esm2020/lib/feature/shared/store.mjs +0 -133
  1084. package/esm2020/lib/feature/shared/strategies/in-map-extent.mjs +0 -113
  1085. package/esm2020/lib/feature/shared/strategies/in-map-resolution.mjs +0 -94
  1086. package/esm2020/lib/feature/shared/strategies/index.mjs +0 -7
  1087. package/esm2020/lib/feature/shared/strategies/loading-layer.mjs +0 -104
  1088. package/esm2020/lib/feature/shared/strategies/loading.mjs +0 -133
  1089. package/esm2020/lib/feature/shared/strategies/search.mjs +0 -150
  1090. package/esm2020/lib/feature/shared/strategies/selection.mjs +0 -370
  1091. package/esm2020/lib/feature/shared/strategies.utils.mjs +0 -37
  1092. package/esm2020/lib/filter/filter.module.mjs +0 -289
  1093. package/esm2020/lib/filter/index.mjs +0 -16
  1094. package/esm2020/lib/filter/ogc-filter-button/index.mjs +0 -2
  1095. package/esm2020/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +0 -140
  1096. package/esm2020/lib/filter/ogc-filter-form/index.mjs +0 -2
  1097. package/esm2020/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +0 -645
  1098. package/esm2020/lib/filter/ogc-filter-selection/index.mjs +0 -2
  1099. package/esm2020/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +0 -1302
  1100. package/esm2020/lib/filter/ogc-filter-time/index.mjs +0 -3
  1101. package/esm2020/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.mjs +0 -177
  1102. package/esm2020/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +0 -898
  1103. package/esm2020/lib/filter/ogc-filterable-form/index.mjs +0 -2
  1104. package/esm2020/lib/filter/ogc-filterable-form/ogc-filterable-form.component.mjs +0 -59
  1105. package/esm2020/lib/filter/ogc-filterable-item/index.mjs +0 -2
  1106. package/esm2020/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +0 -307
  1107. package/esm2020/lib/filter/ogc-filterable-list/index.mjs +0 -3
  1108. package/esm2020/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.mjs +0 -31
  1109. package/esm2020/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs +0 -44
  1110. package/esm2020/lib/filter/shared/filterable-datasource.pipe.mjs +0 -55
  1111. package/esm2020/lib/filter/shared/index.mjs +0 -12
  1112. package/esm2020/lib/filter/shared/ogc-filter-time.service.mjs +0 -72
  1113. package/esm2020/lib/filter/shared/ogc-filter.enum.mjs +0 -30
  1114. package/esm2020/lib/filter/shared/ogc-filter.interface.mjs +0 -2
  1115. package/esm2020/lib/filter/shared/ogc-filter.mjs +0 -692
  1116. package/esm2020/lib/filter/shared/ogc-filter.service.mjs +0 -46
  1117. package/esm2020/lib/filter/shared/spatial-filter.enum.mjs +0 -23
  1118. package/esm2020/lib/filter/shared/spatial-filter.interface.mjs +0 -2
  1119. package/esm2020/lib/filter/shared/spatial-filter.service.mjs +0 -269
  1120. package/esm2020/lib/filter/shared/time-filter.enum.mjs +0 -13
  1121. package/esm2020/lib/filter/shared/time-filter.interface.mjs +0 -2
  1122. package/esm2020/lib/filter/shared/time-filter.service.mjs +0 -107
  1123. package/esm2020/lib/filter/spatial-filter/spatial-filter-item/index.mjs +0 -2
  1124. package/esm2020/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +0 -1089
  1125. package/esm2020/lib/filter/spatial-filter/spatial-filter-list/index.mjs +0 -2
  1126. package/esm2020/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs +0 -207
  1127. package/esm2020/lib/filter/spatial-filter/spatial-filter-type/index.mjs +0 -2
  1128. package/esm2020/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +0 -144
  1129. package/esm2020/lib/filter/time-filter-button/index.mjs +0 -2
  1130. package/esm2020/lib/filter/time-filter-button/time-filter-button.component.mjs +0 -78
  1131. package/esm2020/lib/filter/time-filter-form/index.mjs +0 -2
  1132. package/esm2020/lib/filter/time-filter-form/time-filter-form.component.mjs +0 -734
  1133. package/esm2020/lib/filter/time-filter-item/index.mjs +0 -2
  1134. package/esm2020/lib/filter/time-filter-item/time-filter-item.component.mjs +0 -119
  1135. package/esm2020/lib/filter/time-filter-list/index.mjs +0 -3
  1136. package/esm2020/lib/filter/time-filter-list/time-filter-list-binding.directive.mjs +0 -31
  1137. package/esm2020/lib/filter/time-filter-list/time-filter-list.component.mjs +0 -39
  1138. package/esm2020/lib/geo.module.mjs +0 -106
  1139. package/esm2020/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs +0 -522
  1140. package/esm2020/lib/geometry/geometry-form-field/geometry-form-field.component.mjs +0 -189
  1141. package/esm2020/lib/geometry/geometry-form-field/geometry-form-field.module.mjs +0 -64
  1142. package/esm2020/lib/geometry/geometry.module.mjs +0 -27
  1143. package/esm2020/lib/geometry/index.mjs +0 -4
  1144. package/esm2020/lib/geometry/shared/controls/draw.mjs +0 -314
  1145. package/esm2020/lib/geometry/shared/controls/index.mjs +0 -4
  1146. package/esm2020/lib/geometry/shared/controls/modify.mjs +0 -521
  1147. package/esm2020/lib/geometry/shared/controls/slice.mjs +0 -177
  1148. package/esm2020/lib/geometry/shared/geometry.errors.mjs +0 -26
  1149. package/esm2020/lib/geometry/shared/geometry.interfaces.mjs +0 -2
  1150. package/esm2020/lib/geometry/shared/geometry.utils.mjs +0 -122
  1151. package/esm2020/lib/geometry/shared/index.mjs +0 -5
  1152. package/esm2020/lib/import-export/export-button/export-button.component.mjs +0 -64
  1153. package/esm2020/lib/import-export/export-button/index.mjs +0 -2
  1154. package/esm2020/lib/import-export/import-export/import-export.component.mjs +0 -1228
  1155. package/esm2020/lib/import-export/import-export/index.mjs +0 -2
  1156. package/esm2020/lib/import-export/import-export.module.mjs +0 -92
  1157. package/esm2020/lib/import-export/index.mjs +0 -4
  1158. package/esm2020/lib/import-export/shared/drop-geo-file.directive.mjs +0 -152
  1159. package/esm2020/lib/import-export/shared/export.errors.mjs +0 -15
  1160. package/esm2020/lib/import-export/shared/export.interface.mjs +0 -2
  1161. package/esm2020/lib/import-export/shared/export.service.mjs +0 -195
  1162. package/esm2020/lib/import-export/shared/export.type.mjs +0 -4
  1163. package/esm2020/lib/import-export/shared/export.utils.mjs +0 -46
  1164. package/esm2020/lib/import-export/shared/import.errors.mjs +0 -39
  1165. package/esm2020/lib/import-export/shared/import.interface.mjs +0 -2
  1166. package/esm2020/lib/import-export/shared/import.service.mjs +0 -215
  1167. package/esm2020/lib/import-export/shared/import.utils.mjs +0 -202
  1168. package/esm2020/lib/import-export/shared/index.mjs +0 -11
  1169. package/esm2020/lib/layer/index.mjs +0 -10
  1170. package/esm2020/lib/layer/layer-item/index.mjs +0 -2
  1171. package/esm2020/lib/layer/layer-item/layer-item.component.mjs +0 -300
  1172. package/esm2020/lib/layer/layer-legend/index.mjs +0 -2
  1173. package/esm2020/lib/layer/layer-legend/layer-legend.component.mjs +0 -388
  1174. package/esm2020/lib/layer/layer-legend-item/index.mjs +0 -2
  1175. package/esm2020/lib/layer/layer-legend-item/layer-legend-item.component.mjs +0 -84
  1176. package/esm2020/lib/layer/layer-legend-list/index.mjs +0 -3
  1177. package/esm2020/lib/layer/layer-legend-list/layer-legend-list-binding.directive.mjs +0 -48
  1178. package/esm2020/lib/layer/layer-legend-list/layer-legend-list.component.mjs +0 -195
  1179. package/esm2020/lib/layer/layer-list/index.mjs +0 -4
  1180. package/esm2020/lib/layer/layer-list/layer-list-binding.directive.mjs +0 -59
  1181. package/esm2020/lib/layer/layer-list/layer-list.component.mjs +0 -1009
  1182. package/esm2020/lib/layer/layer-list/layer-list.enum.mjs +0 -19
  1183. package/esm2020/lib/layer/layer-list-tool/index.mjs +0 -5
  1184. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.component.mjs +0 -165
  1185. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.enum.mjs +0 -7
  1186. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.interface.mjs +0 -2
  1187. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.service.mjs +0 -22
  1188. package/esm2020/lib/layer/layer.module.mjs +0 -180
  1189. package/esm2020/lib/layer/shared/clusterParam.mjs +0 -2
  1190. package/esm2020/lib/layer/shared/index.mjs +0 -5
  1191. package/esm2020/lib/layer/shared/layer.enums.mjs +0 -2
  1192. package/esm2020/lib/layer/shared/layer.service.mjs +0 -237
  1193. package/esm2020/lib/layer/shared/layers/any-layer.interface.mjs +0 -2
  1194. package/esm2020/lib/layer/shared/layers/any-layer.mjs +0 -2
  1195. package/esm2020/lib/layer/shared/layers/image-layer.interface.mjs +0 -2
  1196. package/esm2020/lib/layer/shared/layers/image-layer.mjs +0 -67
  1197. package/esm2020/lib/layer/shared/layers/index.mjs +0 -13
  1198. package/esm2020/lib/layer/shared/layers/layer.interface.mjs +0 -17
  1199. package/esm2020/lib/layer/shared/layers/layer.mjs +0 -166
  1200. package/esm2020/lib/layer/shared/layers/tile-layer.interface.mjs +0 -2
  1201. package/esm2020/lib/layer/shared/layers/tile-layer.mjs +0 -47
  1202. package/esm2020/lib/layer/shared/layers/vector-layer.interface.mjs +0 -2
  1203. package/esm2020/lib/layer/shared/layers/vector-layer.mjs +0 -527
  1204. package/esm2020/lib/layer/shared/layers/vectortile-layer.interface.mjs +0 -2
  1205. package/esm2020/lib/layer/shared/layers/vectortile-layer.mjs +0 -104
  1206. package/esm2020/lib/layer/track-feature-button/index.mjs +0 -2
  1207. package/esm2020/lib/layer/track-feature-button/track-feature-button.component.mjs +0 -59
  1208. package/esm2020/lib/layer/utils/image-watcher.mjs +0 -59
  1209. package/esm2020/lib/layer/utils/index.mjs +0 -6
  1210. package/esm2020/lib/layer/utils/layer.utils.mjs +0 -10
  1211. package/esm2020/lib/layer/utils/outputLegend.mjs +0 -28
  1212. package/esm2020/lib/layer/utils/tile-watcher.mjs +0 -50
  1213. package/esm2020/lib/layer/utils/vector-watcher.mjs +0 -48
  1214. package/esm2020/lib/map/baselayers-switcher/baselayers-switcher.animation.mjs +0 -20
  1215. package/esm2020/lib/map/baselayers-switcher/baselayers-switcher.component.mjs +0 -97
  1216. package/esm2020/lib/map/baselayers-switcher/index.mjs +0 -3
  1217. package/esm2020/lib/map/baselayers-switcher/mini-basemap.component.mjs +0 -142
  1218. package/esm2020/lib/map/geolocate-button/geolocate-button.component.mjs +0 -79
  1219. package/esm2020/lib/map/geolocate-button/index.mjs +0 -2
  1220. package/esm2020/lib/map/home-extent-button/home-extent-button.component.mjs +0 -63
  1221. package/esm2020/lib/map/home-extent-button/index.mjs +0 -2
  1222. package/esm2020/lib/map/index.mjs +0 -14
  1223. package/esm2020/lib/map/info-section/index.mjs +0 -2
  1224. package/esm2020/lib/map/info-section/info-section.component.mjs +0 -30
  1225. package/esm2020/lib/map/map-browser/index.mjs +0 -2
  1226. package/esm2020/lib/map/map-browser/map-browser.component.mjs +0 -66
  1227. package/esm2020/lib/map/map-center/index.mjs +0 -2
  1228. package/esm2020/lib/map/map-center/map-center.component.mjs +0 -50
  1229. package/esm2020/lib/map/map.module.mjs +0 -127
  1230. package/esm2020/lib/map/menu-button/index.mjs +0 -2
  1231. package/esm2020/lib/map/menu-button/menu-button.component.mjs +0 -62
  1232. package/esm2020/lib/map/offline-button/index.mjs +0 -2
  1233. package/esm2020/lib/map/offline-button/offline-button.component.mjs +0 -53
  1234. package/esm2020/lib/map/rotation-button/index.mjs +0 -2
  1235. package/esm2020/lib/map/rotation-button/rotation-button.component.mjs +0 -70
  1236. package/esm2020/lib/map/shared/controllers/controller.mjs +0 -42
  1237. package/esm2020/lib/map/shared/controllers/geolocation.mjs +0 -423
  1238. package/esm2020/lib/map/shared/controllers/index.mjs +0 -4
  1239. package/esm2020/lib/map/shared/controllers/view.mjs +0 -351
  1240. package/esm2020/lib/map/shared/hover-feature.directive.mjs +0 -454
  1241. package/esm2020/lib/map/shared/index.mjs +0 -14
  1242. package/esm2020/lib/map/shared/linkedLayers.utils.mjs +0 -240
  1243. package/esm2020/lib/map/shared/map-pointer-position.directive.mjs +0 -107
  1244. package/esm2020/lib/map/shared/map.enums.mjs +0 -6
  1245. package/esm2020/lib/map/shared/map.interface.mjs +0 -2
  1246. package/esm2020/lib/map/shared/map.mjs +0 -409
  1247. package/esm2020/lib/map/shared/map.service.mjs +0 -29
  1248. package/esm2020/lib/map/shared/map.utils.mjs +0 -463
  1249. package/esm2020/lib/map/shared/mapOffline.directive.mjs +0 -98
  1250. package/esm2020/lib/map/shared/projection.interfaces.mjs +0 -2
  1251. package/esm2020/lib/map/shared/projection.service.mjs +0 -65
  1252. package/esm2020/lib/map/shared/projection.utils.mjs +0 -64
  1253. package/esm2020/lib/map/swipe-control/index.mjs +0 -2
  1254. package/esm2020/lib/map/swipe-control/swipe-control.component.mjs +0 -193
  1255. package/esm2020/lib/map/utils/layer-watcher.mjs +0 -79
  1256. package/esm2020/lib/map/wake-lock-button/index.mjs +0 -2
  1257. package/esm2020/lib/map/wake-lock-button/wake-lock-button.component.mjs +0 -103
  1258. package/esm2020/lib/map/zoom-button/index.mjs +0 -2
  1259. package/esm2020/lib/map/zoom-button/zoom-button.component.mjs +0 -40
  1260. package/esm2020/lib/measure/index.mjs +0 -4
  1261. package/esm2020/lib/measure/measure.module.mjs +0 -20
  1262. package/esm2020/lib/measure/measurer/measure-format.pipe.mjs +0 -37
  1263. package/esm2020/lib/measure/measurer/measurer-dialog.component.mjs +0 -180
  1264. package/esm2020/lib/measure/measurer/measurer-item.component.mjs +0 -140
  1265. package/esm2020/lib/measure/measurer/measurer.component.mjs +0 -1042
  1266. package/esm2020/lib/measure/measurer/measurer.module.mjs +0 -94
  1267. package/esm2020/lib/measure/shared/index.mjs +0 -4
  1268. package/esm2020/lib/measure/shared/measure.enum.mjs +0 -37
  1269. package/esm2020/lib/measure/shared/measure.interfaces.mjs +0 -2
  1270. package/esm2020/lib/measure/shared/measure.utils.mjs +0 -489
  1271. package/esm2020/lib/metadata/index.mjs +0 -3
  1272. package/esm2020/lib/metadata/metadata-button/index.mjs +0 -2
  1273. package/esm2020/lib/metadata/metadata-button/metadata-button.component.mjs +0 -134
  1274. package/esm2020/lib/metadata/metadata.module.mjs +0 -55
  1275. package/esm2020/lib/metadata/shared/index.mjs +0 -3
  1276. package/esm2020/lib/metadata/shared/metadata.interface.mjs +0 -2
  1277. package/esm2020/lib/metadata/shared/metadata.service.mjs +0 -19
  1278. package/esm2020/lib/offline/geoDB/configFileToGeoDB.service.mjs +0 -105
  1279. package/esm2020/lib/offline/geoDB/geoDB.enums.mjs +0 -6
  1280. package/esm2020/lib/offline/geoDB/geoDB.interface.mjs +0 -2
  1281. package/esm2020/lib/offline/geoDB/geoDB.service.mjs +0 -167
  1282. package/esm2020/lib/offline/geoDB/index.mjs +0 -5
  1283. package/esm2020/lib/offline/index.mjs +0 -4
  1284. package/esm2020/lib/offline/layerDB/index.mjs +0 -3
  1285. package/esm2020/lib/offline/layerDB/layerDB.interface.mjs +0 -2
  1286. package/esm2020/lib/offline/layerDB/layerDB.service.mjs +0 -76
  1287. package/esm2020/lib/offline/shared/geo-network.service.mjs +0 -66
  1288. package/esm2020/lib/offline/shared/index.mjs +0 -2
  1289. package/esm2020/lib/overlay/index.mjs +0 -2
  1290. package/esm2020/lib/overlay/overlay.module.mjs +0 -23
  1291. package/esm2020/lib/overlay/shared/index.mjs +0 -6
  1292. package/esm2020/lib/overlay/shared/overlay.directive.mjs +0 -33
  1293. package/esm2020/lib/overlay/shared/overlay.enum.mjs +0 -8
  1294. package/esm2020/lib/overlay/shared/overlay.mjs +0 -130
  1295. package/esm2020/lib/overlay/shared/overlay.service.mjs +0 -27
  1296. package/esm2020/lib/overlay/shared/overlay.utils.mjs +0 -17
  1297. package/esm2020/lib/print/index.mjs +0 -4
  1298. package/esm2020/lib/print/print/print.component.mjs +0 -112
  1299. package/esm2020/lib/print/print-form/index.mjs +0 -2
  1300. package/esm2020/lib/print/print-form/print-form.component.mjs +0 -514
  1301. package/esm2020/lib/print/print.module.mjs +0 -65
  1302. package/esm2020/lib/print/shared/geopdf.mjs +0 -58
  1303. package/esm2020/lib/print/shared/index.mjs +0 -5
  1304. package/esm2020/lib/print/shared/print.interface.mjs +0 -2
  1305. package/esm2020/lib/print/shared/print.service.mjs +0 -984
  1306. package/esm2020/lib/print/shared/print.type.mjs +0 -30
  1307. package/esm2020/lib/query/index.mjs +0 -2
  1308. package/esm2020/lib/query/query.module.mjs +0 -29
  1309. package/esm2020/lib/query/shared/index.mjs +0 -7
  1310. package/esm2020/lib/query/shared/query-search-source.mjs +0 -35
  1311. package/esm2020/lib/query/shared/query-search-source.providers.mjs +0 -22
  1312. package/esm2020/lib/query/shared/query.directive.mjs +0 -261
  1313. package/esm2020/lib/query/shared/query.enums.mjs +0 -30
  1314. package/esm2020/lib/query/shared/query.interfaces.mjs +0 -2
  1315. package/esm2020/lib/query/shared/query.service.mjs +0 -731
  1316. package/esm2020/lib/query/shared/query.utils.mjs +0 -37
  1317. package/esm2020/lib/search/index.mjs +0 -12
  1318. package/esm2020/lib/search/search-bar/search-bar.component.mjs +0 -512
  1319. package/esm2020/lib/search/search-bar/search-bar.module.mjs +0 -75
  1320. package/esm2020/lib/search/search-bar/search-url-param.directive.mjs +0 -35
  1321. package/esm2020/lib/search/search-results/save-feature-dialog.component.mjs +0 -118
  1322. package/esm2020/lib/search/search-results/search-results-add-button.component.mjs +0 -429
  1323. package/esm2020/lib/search/search-results/search-results-item.component.mjs +0 -147
  1324. package/esm2020/lib/search/search-results/search-results.component.mjs +0 -454
  1325. package/esm2020/lib/search/search-results/search-results.module.mjs +0 -108
  1326. package/esm2020/lib/search/search-selector/search-selector.component.mjs +0 -123
  1327. package/esm2020/lib/search/search-selector/search-selector.module.mjs +0 -56
  1328. package/esm2020/lib/search/search-settings/search-settings.component.mjs +0 -440
  1329. package/esm2020/lib/search/search-settings/search-settings.module.mjs +0 -60
  1330. package/esm2020/lib/search/search.module.mjs +0 -67
  1331. package/esm2020/lib/search/shared/index.mjs +0 -9
  1332. package/esm2020/lib/search/shared/search-pointer-summary.directive.mjs +0 -295
  1333. package/esm2020/lib/search/shared/search-source-service.providers.mjs +0 -20
  1334. package/esm2020/lib/search/shared/search-source.service.mjs +0 -55
  1335. package/esm2020/lib/search/shared/search.enums.mjs +0 -4
  1336. package/esm2020/lib/search/shared/search.interfaces.mjs +0 -2
  1337. package/esm2020/lib/search/shared/search.service.mjs +0 -121
  1338. package/esm2020/lib/search/shared/search.utils.mjs +0 -91
  1339. package/esm2020/lib/search/shared/sources/cadastre.mjs +0 -126
  1340. package/esm2020/lib/search/shared/sources/cadastre.providers.mjs +0 -23
  1341. package/esm2020/lib/search/shared/sources/coordinates.interfaces.mjs +0 -2
  1342. package/esm2020/lib/search/shared/sources/coordinates.mjs +0 -153
  1343. package/esm2020/lib/search/shared/sources/coordinates.providers.mjs +0 -40
  1344. package/esm2020/lib/search/shared/sources/icherche.interfaces.mjs +0 -2
  1345. package/esm2020/lib/search/shared/sources/icherche.mjs +0 -767
  1346. package/esm2020/lib/search/shared/sources/icherche.providers.mjs +0 -66
  1347. package/esm2020/lib/search/shared/sources/ilayer.interfaces.mjs +0 -2
  1348. package/esm2020/lib/search/shared/sources/ilayer.mjs +0 -320
  1349. package/esm2020/lib/search/shared/sources/ilayer.providers.mjs +0 -40
  1350. package/esm2020/lib/search/shared/sources/index.mjs +0 -23
  1351. package/esm2020/lib/search/shared/sources/nominatim.interfaces.mjs +0 -2
  1352. package/esm2020/lib/search/shared/sources/nominatim.mjs +0 -253
  1353. package/esm2020/lib/search/shared/sources/nominatim.providers.mjs +0 -23
  1354. package/esm2020/lib/search/shared/sources/source.interfaces.mjs +0 -2
  1355. package/esm2020/lib/search/shared/sources/source.mjs +0 -209
  1356. package/esm2020/lib/search/shared/sources/storedqueries.interfaces.mjs +0 -2
  1357. package/esm2020/lib/search/shared/sources/storedqueries.mjs +0 -425
  1358. package/esm2020/lib/search/shared/sources/storedqueries.providers.mjs +0 -41
  1359. package/esm2020/lib/search/shared/sources/workspace.interfaces.mjs +0 -2
  1360. package/esm2020/lib/search/shared/sources/workspace.mjs +0 -186
  1361. package/esm2020/lib/search/shared/sources/workspace.providers.mjs +0 -26
  1362. package/esm2020/lib/style/index.mjs +0 -5
  1363. package/esm2020/lib/style/shared/datasource/esri-style-generator.mjs +0 -357
  1364. package/esm2020/lib/style/shared/datasource/index.mjs +0 -2
  1365. package/esm2020/lib/style/shared/feature/feature-style.mjs +0 -141
  1366. package/esm2020/lib/style/shared/feature/index.mjs +0 -2
  1367. package/esm2020/lib/style/shared/font.enum.mjs +0 -17
  1368. package/esm2020/lib/style/shared/index.mjs +0 -5
  1369. package/esm2020/lib/style/shared/overlay/index.mjs +0 -3
  1370. package/esm2020/lib/style/shared/overlay/overlay-marker-style.utils.mjs +0 -43
  1371. package/esm2020/lib/style/shared/overlay/overlay-style.utils.mjs +0 -88
  1372. package/esm2020/lib/style/shared/vector/commonVectorStyle.mjs +0 -75
  1373. package/esm2020/lib/style/shared/vector/conversion.utils.mjs +0 -27
  1374. package/esm2020/lib/style/shared/vector/index.mjs +0 -4
  1375. package/esm2020/lib/style/shared/vector/vector-style.interface.mjs +0 -2
  1376. package/esm2020/lib/style/style-list/index.mjs +0 -5
  1377. package/esm2020/lib/style/style-list/style-list.interface.mjs +0 -2
  1378. package/esm2020/lib/style/style-list/style-list.module.mjs +0 -23
  1379. package/esm2020/lib/style/style-list/style-list.provider.mjs +0 -21
  1380. package/esm2020/lib/style/style-list/style-list.service.mjs +0 -51
  1381. package/esm2020/lib/style/style-modal/drawing/index.mjs +0 -2
  1382. package/esm2020/lib/style/style-modal/drawing/style-modal-drawing.component.mjs +0 -288
  1383. package/esm2020/lib/style/style-modal/index.mjs +0 -5
  1384. package/esm2020/lib/style/style-modal/layer/index.mjs +0 -2
  1385. package/esm2020/lib/style/style-modal/layer/style-modal-layer.component.mjs +0 -187
  1386. package/esm2020/lib/style/style-modal/layer-button/index.mjs +0 -2
  1387. package/esm2020/lib/style/style-modal/layer-button/style-modal-layer-button.component.mjs +0 -44
  1388. package/esm2020/lib/style/style-modal/shared/index.mjs +0 -2
  1389. package/esm2020/lib/style/style-modal/shared/style-modal.interface.mjs +0 -2
  1390. package/esm2020/lib/style/style-service/draw-style.service.mjs +0 -187
  1391. package/esm2020/lib/style/style-service/index.mjs +0 -3
  1392. package/esm2020/lib/style/style-service/style.service.mjs +0 -356
  1393. package/esm2020/lib/style/style.module.mjs +0 -74
  1394. package/esm2020/lib/toast/index.mjs +0 -2
  1395. package/esm2020/lib/toast/toast.component.mjs +0 -113
  1396. package/esm2020/lib/toast/toast.module.mjs +0 -45
  1397. package/esm2020/lib/utils/googleLinks.mjs +0 -13
  1398. package/esm2020/lib/utils/id-generator.mjs +0 -110
  1399. package/esm2020/lib/utils/index.mjs +0 -4
  1400. package/esm2020/lib/utils/osmLinks.mjs +0 -10
  1401. package/esm2020/lib/wkt/index.mjs +0 -2
  1402. package/esm2020/lib/wkt/shared/index.mjs +0 -2
  1403. package/esm2020/lib/wkt/shared/wkt.service.mjs +0 -239
  1404. package/esm2020/lib/wkt/wkt.module.mjs +0 -22
  1405. package/esm2020/lib/workspace/confirmation-popup/confirmation-popup.component.mjs +0 -48
  1406. package/esm2020/lib/workspace/confirmation-popup/confirmation-popup.module.mjs +0 -36
  1407. package/esm2020/lib/workspace/confirmation-popup/index.mjs +0 -3
  1408. package/esm2020/lib/workspace/index.mjs +0 -8
  1409. package/esm2020/lib/workspace/shared/edition-workspace.mjs +0 -280
  1410. package/esm2020/lib/workspace/shared/edition-workspace.service.mjs +0 -642
  1411. package/esm2020/lib/workspace/shared/feature-workspace.mjs +0 -35
  1412. package/esm2020/lib/workspace/shared/feature-workspace.service.mjs +0 -157
  1413. package/esm2020/lib/workspace/shared/index.mjs +0 -8
  1414. package/esm2020/lib/workspace/shared/wfs-workspace.mjs +0 -35
  1415. package/esm2020/lib/workspace/shared/wfs-workspace.service.mjs +0 -150
  1416. package/esm2020/lib/workspace/shared/wms-workspace.service.mjs +0 -260
  1417. package/esm2020/lib/workspace/shared/workspace.utils.mjs +0 -24
  1418. package/esm2020/lib/workspace/widgets/index.mjs +0 -4
  1419. package/esm2020/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs +0 -47
  1420. package/esm2020/lib/workspace/widgets/ogc-filter/ogc-filter.module.mjs +0 -36
  1421. package/esm2020/lib/workspace/widgets/widgets.mjs +0 -15
  1422. package/esm2020/lib/workspace/workspace-selector/workspace-selector.directive.mjs +0 -133
  1423. package/esm2020/lib/workspace/workspace-selector/workspace-selector.module.mjs +0 -28
  1424. package/esm2020/lib/workspace/workspace-updator/workspace-updator.directive.mjs +0 -113
  1425. package/esm2020/lib/workspace/workspace-updator/workspace-updator.module.mjs +0 -28
  1426. package/esm2020/lib/workspace/workspace.module.mjs +0 -62
  1427. package/esm2020/public_api.mjs +0 -57
  1428. package/fesm2015/igo2-geo.mjs +0 -46894
  1429. package/fesm2015/igo2-geo.mjs.map +0 -1
  1430. package/fesm2020/igo2-geo.mjs +0 -44993
  1431. package/fesm2020/igo2-geo.mjs.map +0 -1
  1432. package/ngcc.config.js +0 -3
  1433. package/style/geo.theming.scss +0 -12
@@ -0,0 +1,1350 @@
1
+ import { Component, Input, Output, EventEmitter, ChangeDetectorRef } from '@angular/core';
2
+ import { UntypedFormBuilder, Validators } from '@angular/forms';
3
+ import { BehaviorSubject } from 'rxjs';
4
+ import { MessageService, LanguageService, ConfigService, StorageService } from '@igo2/core';
5
+ import { strEnum } from '@igo2/utils';
6
+ import { IgoMap } from '../../map/shared/map';
7
+ import { ClusterDataSource } from '../../datasource/shared/datasources/cluster-datasource';
8
+ import { VectorLayer } from '../../layer/shared/layers/vector-layer';
9
+ import olPoint from 'ol/geom/Point';
10
+ import { circular } from 'ol/geom/Polygon';
11
+ import { handleFileExportError, handleFileExportSuccess } from '../shared/export.utils';
12
+ import { ExportFormat, EncodingFormat } from '../shared/export.type';
13
+ import { ExportService } from '../shared/export.service';
14
+ import { ImportService } from '../shared/import.service';
15
+ import { handleFileImportSuccess, handleFileImportError } from '../shared/import.utils';
16
+ import { StyleService } from '../../style/style-service/style.service';
17
+ import { StyleListService } from '../../style/style-list/style-list.service';
18
+ import { skipWhile } from 'rxjs/operators';
19
+ import { ConfirmDialogService } from '@igo2/common';
20
+ import { DownloadService } from '../../download/shared/download.service';
21
+ import { computeProjectionsConstraints } from '../../map/shared';
22
+ import { LayerService } from '../../layer/shared/layer.service';
23
+ import * as i0 from "@angular/core";
24
+ import * as i1 from "../shared/import.service";
25
+ import * as i2 from "../shared/export.service";
26
+ import * as i3 from "@igo2/core";
27
+ import * as i4 from "../../style/style-list/style-list.service";
28
+ import * as i5 from "../../style/style-service/style.service";
29
+ import * as i6 from "@angular/forms";
30
+ import * as i7 from "../../download/shared/download.service";
31
+ import * as i8 from "../../layer/shared/layer.service";
32
+ import * as i9 from "@igo2/common";
33
+ import * as i10 from "@angular/material/tooltip";
34
+ import * as i11 from "@angular/common";
35
+ import * as i12 from "@angular/material/button";
36
+ import * as i13 from "@angular/material/button-toggle";
37
+ import * as i14 from "@angular/material/form-field";
38
+ import * as i15 from "@angular/material/select";
39
+ import * as i16 from "@angular/material/core";
40
+ import * as i17 from "@angular/material/input";
41
+ import * as i18 from "@angular/material/slide-toggle";
42
+ import * as i19 from "@ngx-translate/core";
43
+ function ImportExportComponent_form_8_mat_option_7_p_1_Template(rf, ctx) { if (rf & 1) {
44
+ i0.ɵɵelementStart(0, "p", 16);
45
+ i0.ɵɵtext(1);
46
+ i0.ɵɵpipe(2, "translate");
47
+ i0.ɵɵelementEnd();
48
+ } if (rf & 2) {
49
+ const projection_r6 = i0.ɵɵnextContext().$implicit;
50
+ i0.ɵɵadvance(1);
51
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(2, 1, "igo.geo.importExportForm.projections." + projection_r6.translateKey, projection_r6), " ");
52
+ } }
53
+ function ImportExportComponent_form_8_mat_option_7_p_2_Template(rf, ctx) { if (rf & 1) {
54
+ i0.ɵɵelementStart(0, "p", 16);
55
+ i0.ɵɵtext(1);
56
+ i0.ɵɵelementEnd();
57
+ } if (rf & 2) {
58
+ const projection_r6 = i0.ɵɵnextContext().$implicit;
59
+ i0.ɵɵadvance(1);
60
+ i0.ɵɵtextInterpolate1(" ", projection_r6.alias, " ");
61
+ } }
62
+ function ImportExportComponent_form_8_mat_option_7_Template(rf, ctx) { if (rf & 1) {
63
+ i0.ɵɵelementStart(0, "mat-option", 14);
64
+ i0.ɵɵlistener("click", function ImportExportComponent_form_8_mat_option_7_Template_mat_option_click_0_listener($event) { return $event.stopPropagation(); });
65
+ i0.ɵɵtemplate(1, ImportExportComponent_form_8_mat_option_7_p_1_Template, 3, 4, "p", 15);
66
+ i0.ɵɵtemplate(2, ImportExportComponent_form_8_mat_option_7_p_2_Template, 2, 1, "p", 15);
67
+ i0.ɵɵelementEnd();
68
+ } if (rf & 2) {
69
+ const projection_r6 = ctx.$implicit;
70
+ i0.ɵɵproperty("value", projection_r6);
71
+ i0.ɵɵadvance(1);
72
+ i0.ɵɵproperty("ngIf", projection_r6.translateKey);
73
+ i0.ɵɵadvance(1);
74
+ i0.ɵɵproperty("ngIf", !projection_r6.translateKey);
75
+ } }
76
+ function ImportExportComponent_form_8_Template(rf, ctx) { if (rf & 1) {
77
+ const _r13 = i0.ɵɵgetCurrentView();
78
+ i0.ɵɵelementStart(0, "form", 5)(1, "div", 6)(2, "mat-form-field")(3, "mat-label");
79
+ i0.ɵɵtext(4);
80
+ i0.ɵɵpipe(5, "translate");
81
+ i0.ɵɵelementEnd();
82
+ i0.ɵɵelementStart(6, "mat-select", 7);
83
+ i0.ɵɵlistener("valueChange", function ImportExportComponent_form_8_Template_mat_select_valueChange_6_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r12 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r12.inputProj = $event); });
84
+ i0.ɵɵtemplate(7, ImportExportComponent_form_8_mat_option_7_Template, 3, 3, "mat-option", 8);
85
+ i0.ɵɵpipe(8, "async");
86
+ i0.ɵɵelementEnd()()();
87
+ i0.ɵɵelementStart(9, "div", 9);
88
+ i0.ɵɵpipe(10, "translate");
89
+ i0.ɵɵpipe(11, "translate");
90
+ i0.ɵɵelementStart(12, "button", 10);
91
+ i0.ɵɵlistener("click", function ImportExportComponent_form_8_Template_button_click_12_listener() { i0.ɵɵrestoreView(_r13); const _r5 = i0.ɵɵreference(19); return i0.ɵɵresetView(_r5.click()); });
92
+ i0.ɵɵpipe(13, "async");
93
+ i0.ɵɵtext(14);
94
+ i0.ɵɵpipe(15, "translate");
95
+ i0.ɵɵelementEnd();
96
+ i0.ɵɵelement(16, "igo-spinner", 11);
97
+ i0.ɵɵpipe(17, "async");
98
+ i0.ɵɵelementStart(18, "input", 12, 13);
99
+ i0.ɵɵlistener("click", function ImportExportComponent_form_8_Template_input_click_18_listener() { i0.ɵɵrestoreView(_r13); const _r5 = i0.ɵɵreference(19); return i0.ɵɵresetView(_r5.value = null); })("change", function ImportExportComponent_form_8_Template_input_change_18_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r16 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r16.importFiles($event.target.files)); });
100
+ i0.ɵɵelementEnd()()();
101
+ } if (rf & 2) {
102
+ const ctx_r0 = i0.ɵɵnextContext();
103
+ i0.ɵɵproperty("formGroup", ctx_r0.importForm);
104
+ i0.ɵɵadvance(4);
105
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(5, 10, "igo.geo.importExportForm.importProjPlaceholder"));
106
+ i0.ɵɵadvance(2);
107
+ i0.ɵɵproperty("value", ctx_r0.inputProj);
108
+ i0.ɵɵadvance(1);
109
+ i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(8, 12, ctx_r0.projections$));
110
+ i0.ɵɵadvance(2);
111
+ i0.ɵɵproperty("matTooltip", ctx_r0.importForm.invalid ? i0.ɵɵpipeBind1(10, 14, "igo.geo.importExportForm.projections.choose") : i0.ɵɵpipeBind1(11, 16, "igo.geo.importExportForm.importButton"));
112
+ i0.ɵɵadvance(3);
113
+ i0.ɵɵproperty("disabled", ctx_r0.importForm.invalid || i0.ɵɵpipeBind1(13, 18, ctx_r0.loading$));
114
+ i0.ɵɵadvance(2);
115
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(15, 20, "igo.geo.importExportForm.importButton"), " ");
116
+ i0.ɵɵadvance(2);
117
+ i0.ɵɵproperty("shown", i0.ɵɵpipeBind1(17, 22, ctx_r0.loading$));
118
+ i0.ɵɵadvance(2);
119
+ i0.ɵɵstyleProp("display", "none");
120
+ } }
121
+ const _c0 = function (a0) { return { size: a0 }; };
122
+ function ImportExportComponent_section_9_div_1_Template(rf, ctx) { if (rf & 1) {
123
+ i0.ɵɵelementStart(0, "div")(1, "h4");
124
+ i0.ɵɵtext(2);
125
+ i0.ɵɵpipe(3, "translate");
126
+ i0.ɵɵelementEnd();
127
+ i0.ɵɵelementStart(4, "ul")(5, "li");
128
+ i0.ɵɵtext(6);
129
+ i0.ɵɵpipe(7, "translate");
130
+ i0.ɵɵelementEnd();
131
+ i0.ɵɵelementStart(8, "li");
132
+ i0.ɵɵtext(9);
133
+ i0.ɵɵpipe(10, "translate");
134
+ i0.ɵɵelementEnd();
135
+ i0.ɵɵelementStart(11, "li");
136
+ i0.ɵɵtext(12);
137
+ i0.ɵɵpipe(13, "translate");
138
+ i0.ɵɵelementEnd()()();
139
+ } if (rf & 2) {
140
+ const ctx_r17 = i0.ɵɵnextContext(2);
141
+ i0.ɵɵadvance(2);
142
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(3, 4, "igo.geo.importExportForm.importClarifications"));
143
+ i0.ɵɵadvance(4);
144
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(7, 6, "igo.geo.importExportForm.importSizeMax", i0.ɵɵpureFunction1(13, _c0, ctx_r17.fileSizeMb)), " ");
145
+ i0.ɵɵadvance(3);
146
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(10, 9, "igo.geo.importExportForm.importFormatAuthorized"), " ");
147
+ i0.ɵɵadvance(3);
148
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(13, 11, "igo.geo.importExportForm.importShpZip"));
149
+ } }
150
+ function ImportExportComponent_section_9_igo_custom_html_2_Template(rf, ctx) { if (rf & 1) {
151
+ i0.ɵɵelement(0, "igo-custom-html", 20);
152
+ } if (rf & 2) {
153
+ const ctx_r18 = i0.ɵɵnextContext(2);
154
+ i0.ɵɵproperty("html", ctx_r18.importHtmlClarifications);
155
+ } }
156
+ function ImportExportComponent_section_9_Template(rf, ctx) { if (rf & 1) {
157
+ i0.ɵɵelementStart(0, "section", 17);
158
+ i0.ɵɵtemplate(1, ImportExportComponent_section_9_div_1_Template, 14, 15, "div", 18);
159
+ i0.ɵɵtemplate(2, ImportExportComponent_section_9_igo_custom_html_2_Template, 1, 1, "igo-custom-html", 19);
160
+ i0.ɵɵelementEnd();
161
+ } if (rf & 2) {
162
+ const ctx_r1 = i0.ɵɵnextContext();
163
+ i0.ɵɵadvance(1);
164
+ i0.ɵɵproperty("ngIf", ctx_r1.importHtmlClarifications === "");
165
+ i0.ɵɵadvance(1);
166
+ i0.ɵɵproperty("ngIf", ctx_r1.importHtmlClarifications !== "");
167
+ } }
168
+ function ImportExportComponent_section_10_Template(rf, ctx) { if (rf & 1) {
169
+ i0.ɵɵelementStart(0, "section", 17)(1, "h4");
170
+ i0.ɵɵtext(2);
171
+ i0.ɵɵpipe(3, "translate");
172
+ i0.ɵɵelementEnd()();
173
+ } if (rf & 2) {
174
+ i0.ɵɵadvance(2);
175
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(3, 1, "igo.geo.importExportForm.exportNoLayersExportable"));
176
+ } }
177
+ function ImportExportComponent_form_12_span_9_Template(rf, ctx) { if (rf & 1) {
178
+ i0.ɵɵelementStart(0, "span", 31);
179
+ i0.ɵɵtext(1);
180
+ i0.ɵɵpipe(2, "translate");
181
+ i0.ɵɵelementEnd();
182
+ } if (rf & 2) {
183
+ const ctx_r19 = i0.ɵɵnextContext(2);
184
+ i0.ɵɵadvance(1);
185
+ i0.ɵɵtextInterpolate2(" (+", ctx_r19.layers.length - 1, " ", i0.ɵɵpipeBind1(2, 2, (ctx_r19.layers == null ? null : ctx_r19.layers.length) === 2 ? "igo.geo.importExportForm.other" : "igo.geo.importExportForm.others"), ") ");
186
+ } }
187
+ function ImportExportComponent_form_12_mat_option_10_mat_slide_toggle_4_Template(rf, ctx) { if (rf & 1) {
188
+ const _r33 = i0.ɵɵgetCurrentView();
189
+ i0.ɵɵelementStart(0, "mat-slide-toggle", 34);
190
+ i0.ɵɵlistener("click", function ImportExportComponent_form_12_mat_option_10_mat_slide_toggle_4_Template_mat_slide_toggle_click_0_listener($event) { i0.ɵɵrestoreView(_r33); const layer_r29 = i0.ɵɵnextContext().$implicit; const ctx_r31 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r31.onlySelectedClick($event, layer_r29.id)); })("checked", function ImportExportComponent_form_12_mat_option_10_mat_slide_toggle_4_Template_mat_slide_toggle_checked_0_listener() { i0.ɵɵrestoreView(_r33); const layer_r29 = i0.ɵɵnextContext().$implicit; const ctx_r34 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r34.inLayersIdToExportSelectionOnly(layer_r29)); })("change", function ImportExportComponent_form_12_mat_option_10_mat_slide_toggle_4_Template_mat_slide_toggle_change_0_listener($event) { i0.ɵɵrestoreView(_r33); const layer_r29 = i0.ɵɵnextContext().$implicit; const ctx_r36 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r36.onlySelected($event, layer_r29.id)); });
191
+ i0.ɵɵelementStart(1, "small");
192
+ i0.ɵɵtext(2);
193
+ i0.ɵɵpipe(3, "translate");
194
+ i0.ɵɵelementEnd()();
195
+ } if (rf & 2) {
196
+ i0.ɵɵadvance(2);
197
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(3, 1, "igo.geo.importExportForm.exportSelectedFeature"));
198
+ } }
199
+ const _c1 = function (a0) { return { "igo-export-layer-mat-option": a0 }; };
200
+ function ImportExportComponent_form_12_mat_option_10_Template(rf, ctx) { if (rf & 1) {
201
+ i0.ɵɵelementStart(0, "mat-option", 32);
202
+ i0.ɵɵlistener("click", function ImportExportComponent_form_12_mat_option_10_Template_mat_option_click_0_listener($event) { return $event.stopPropagation(); });
203
+ i0.ɵɵelementStart(1, "p", 16);
204
+ i0.ɵɵtext(2);
205
+ i0.ɵɵelementEnd();
206
+ i0.ɵɵelementStart(3, "p", 16);
207
+ i0.ɵɵtemplate(4, ImportExportComponent_form_12_mat_option_10_mat_slide_toggle_4_Template, 4, 3, "mat-slide-toggle", 33);
208
+ i0.ɵɵelementEnd()();
209
+ } if (rf & 2) {
210
+ const layer_r29 = ctx.$implicit;
211
+ const ctx_r20 = i0.ɵɵnextContext(2);
212
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(4, _c1, ctx_r20.layerHasSelectedFeatures(layer_r29)))("value", layer_r29.id);
213
+ i0.ɵɵadvance(2);
214
+ i0.ɵɵtextInterpolate(layer_r29.title);
215
+ i0.ɵɵadvance(2);
216
+ i0.ɵɵproperty("ngIf", ctx_r20.layerHasSelectedFeatures(layer_r29));
217
+ } }
218
+ function ImportExportComponent_form_12_ng_container_18_mat_option_1_Template(rf, ctx) { if (rf & 1) {
219
+ i0.ɵɵelementStart(0, "mat-option", 2);
220
+ i0.ɵɵtext(1);
221
+ i0.ɵɵpipe(2, "translate");
222
+ i0.ɵɵelementEnd();
223
+ } if (rf & 2) {
224
+ const format_r40 = ctx.$implicit;
225
+ i0.ɵɵproperty("value", format_r40.key);
226
+ i0.ɵɵadvance(1);
227
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(2, 2, "igo.geo.export.format." + format_r40.value), " ");
228
+ } }
229
+ function ImportExportComponent_form_12_ng_container_18_Template(rf, ctx) { if (rf & 1) {
230
+ i0.ɵɵelementContainerStart(0);
231
+ i0.ɵɵtemplate(1, ImportExportComponent_form_12_ng_container_18_mat_option_1_Template, 3, 4, "mat-option", 35);
232
+ i0.ɵɵpipe(2, "keyvalue");
233
+ i0.ɵɵpipe(3, "async");
234
+ i0.ɵɵelementContainerEnd();
235
+ } if (rf & 2) {
236
+ const ctx_r21 = i0.ɵɵnextContext(2);
237
+ i0.ɵɵadvance(1);
238
+ i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(2, 1, i0.ɵɵpipeBind1(3, 3, ctx_r21.formats$)));
239
+ } }
240
+ function ImportExportComponent_form_12_mat_option_20_Template(rf, ctx) { if (rf & 1) {
241
+ i0.ɵɵelementStart(0, "mat-option", 36);
242
+ i0.ɵɵtext(1);
243
+ i0.ɵɵpipe(2, "translate");
244
+ i0.ɵɵelementEnd();
245
+ } if (rf & 2) {
246
+ i0.ɵɵadvance(1);
247
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(2, 1, "igo.geo.export.noFormat.title"), " ");
248
+ } }
249
+ function ImportExportComponent_form_12_div_22_Template(rf, ctx) { if (rf & 1) {
250
+ i0.ɵɵelementStart(0, "div", 6)(1, "mat-form-field");
251
+ i0.ɵɵelement(2, "input", 37);
252
+ i0.ɵɵpipe(3, "translate");
253
+ i0.ɵɵelementEnd()();
254
+ } if (rf & 2) {
255
+ i0.ɵɵadvance(2);
256
+ i0.ɵɵpropertyInterpolate("placeholder", i0.ɵɵpipeBind1(3, 1, "igo.geo.importExportForm.exportFileNamePlaceholder"));
257
+ } }
258
+ function ImportExportComponent_form_12_div_23_ng_container_6_mat_option_1_Template(rf, ctx) { if (rf & 1) {
259
+ i0.ɵɵelementStart(0, "mat-option", 2);
260
+ i0.ɵɵtext(1);
261
+ i0.ɵɵpipe(2, "translate");
262
+ i0.ɵɵelementEnd();
263
+ } if (rf & 2) {
264
+ const encoding_r43 = ctx.$implicit;
265
+ i0.ɵɵproperty("value", encoding_r43.key);
266
+ i0.ɵɵadvance(1);
267
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(2, 2, "igo.geo.export.encoding." + encoding_r43.value), " ");
268
+ } }
269
+ function ImportExportComponent_form_12_div_23_ng_container_6_Template(rf, ctx) { if (rf & 1) {
270
+ i0.ɵɵelementContainerStart(0);
271
+ i0.ɵɵtemplate(1, ImportExportComponent_form_12_div_23_ng_container_6_mat_option_1_Template, 3, 4, "mat-option", 35);
272
+ i0.ɵɵpipe(2, "keyvalue");
273
+ i0.ɵɵpipe(3, "async");
274
+ i0.ɵɵelementContainerEnd();
275
+ } if (rf & 2) {
276
+ const ctx_r41 = i0.ɵɵnextContext(3);
277
+ i0.ɵɵadvance(1);
278
+ i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(2, 1, i0.ɵɵpipeBind1(3, 3, ctx_r41.encodings$)));
279
+ } }
280
+ function ImportExportComponent_form_12_div_23_Template(rf, ctx) { if (rf & 1) {
281
+ i0.ɵɵelementStart(0, "div", 6)(1, "mat-form-field")(2, "mat-label");
282
+ i0.ɵɵtext(3);
283
+ i0.ɵɵpipe(4, "translate");
284
+ i0.ɵɵelementEnd();
285
+ i0.ɵɵelementStart(5, "mat-select", 38);
286
+ i0.ɵɵtemplate(6, ImportExportComponent_form_12_div_23_ng_container_6_Template, 4, 5, "ng-container", 18);
287
+ i0.ɵɵpipe(7, "async");
288
+ i0.ɵɵelementEnd()()();
289
+ } if (rf & 2) {
290
+ const ctx_r24 = i0.ɵɵnextContext(2);
291
+ i0.ɵɵadvance(3);
292
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(4, 2, "igo.geo.importExportForm.encodingPlaceholder"));
293
+ i0.ɵɵadvance(3);
294
+ i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(7, 4, ctx_r24.encodings$).length !== 0);
295
+ } }
296
+ function ImportExportComponent_form_12_div_24_Template(rf, ctx) { if (rf & 1) {
297
+ i0.ɵɵelementStart(0, "div", 39)(1, "mat-slide-toggle", 40);
298
+ i0.ɵɵtext(2);
299
+ i0.ɵɵpipe(3, "translate");
300
+ i0.ɵɵelementEnd()();
301
+ } if (rf & 2) {
302
+ i0.ɵɵadvance(1);
303
+ i0.ɵɵproperty("labelPosition", "before");
304
+ i0.ɵɵadvance(1);
305
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(3, 2, "igo.geo.importExportForm.exportCombineResults"), " ");
306
+ } }
307
+ function ImportExportComponent_form_12_div_25_Template(rf, ctx) { if (rf & 1) {
308
+ i0.ɵɵelementStart(0, "div", 41)(1, "mat-slide-toggle", 42);
309
+ i0.ɵɵtext(2);
310
+ i0.ɵɵpipe(3, "translate");
311
+ i0.ɵɵelementEnd()();
312
+ } if (rf & 2) {
313
+ i0.ɵɵadvance(1);
314
+ i0.ɵɵproperty("labelPosition", "before");
315
+ i0.ɵɵadvance(1);
316
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(3, 2, "igo.geo.importExportForm.exportSeparator"), " ");
317
+ } }
318
+ function ImportExportComponent_form_12_div_26_Template(rf, ctx) { if (rf & 1) {
319
+ i0.ɵɵelementStart(0, "div", 43)(1, "mat-slide-toggle", 44);
320
+ i0.ɵɵtext(2);
321
+ i0.ɵɵpipe(3, "translate");
322
+ i0.ɵɵelementEnd()();
323
+ } if (rf & 2) {
324
+ i0.ɵɵadvance(1);
325
+ i0.ɵɵproperty("labelPosition", "before");
326
+ i0.ɵɵadvance(1);
327
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(3, 2, "igo.geo.importExportForm.exportFeatureInExtent"), " ");
328
+ } }
329
+ function ImportExportComponent_form_12_igo_custom_html_36_Template(rf, ctx) { if (rf & 1) {
330
+ i0.ɵɵelement(0, "igo-custom-html", 20);
331
+ } if (rf & 2) {
332
+ const ctx_r28 = i0.ɵɵnextContext(2);
333
+ i0.ɵɵproperty("html", ctx_r28.exportHtmlClarifications);
334
+ } }
335
+ function ImportExportComponent_form_12_Template(rf, ctx) { if (rf & 1) {
336
+ const _r45 = i0.ɵɵgetCurrentView();
337
+ i0.ɵɵelementStart(0, "form", 5)(1, "div", 6)(2, "mat-form-field")(3, "mat-label");
338
+ i0.ɵɵtext(4);
339
+ i0.ɵɵpipe(5, "translate");
340
+ i0.ɵɵelementEnd();
341
+ i0.ɵɵelementStart(6, "mat-select", 21);
342
+ i0.ɵɵlistener("valueChange", function ImportExportComponent_form_12_Template_mat_select_valueChange_6_listener($event) { i0.ɵɵrestoreView(_r45); const ctx_r44 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r44.layers = $event); });
343
+ i0.ɵɵelementStart(7, "mat-select-trigger");
344
+ i0.ɵɵtext(8);
345
+ i0.ɵɵtemplate(9, ImportExportComponent_form_12_span_9_Template, 3, 4, "span", 22);
346
+ i0.ɵɵelementEnd();
347
+ i0.ɵɵtemplate(10, ImportExportComponent_form_12_mat_option_10_Template, 5, 6, "mat-option", 23);
348
+ i0.ɵɵpipe(11, "async");
349
+ i0.ɵɵelementEnd()()();
350
+ i0.ɵɵelementStart(12, "div", 6)(13, "mat-form-field")(14, "mat-label");
351
+ i0.ɵɵtext(15);
352
+ i0.ɵɵpipe(16, "translate");
353
+ i0.ɵɵelementEnd();
354
+ i0.ɵɵelementStart(17, "mat-select", 24);
355
+ i0.ɵɵtemplate(18, ImportExportComponent_form_12_ng_container_18_Template, 4, 5, "ng-container", 18);
356
+ i0.ɵɵpipe(19, "async");
357
+ i0.ɵɵtemplate(20, ImportExportComponent_form_12_mat_option_20_Template, 3, 3, "mat-option", 25);
358
+ i0.ɵɵpipe(21, "async");
359
+ i0.ɵɵelementEnd()()();
360
+ i0.ɵɵtemplate(22, ImportExportComponent_form_12_div_22_Template, 4, 3, "div", 26);
361
+ i0.ɵɵtemplate(23, ImportExportComponent_form_12_div_23_Template, 8, 6, "div", 26);
362
+ i0.ɵɵtemplate(24, ImportExportComponent_form_12_div_24_Template, 4, 4, "div", 27);
363
+ i0.ɵɵtemplate(25, ImportExportComponent_form_12_div_25_Template, 4, 4, "div", 28);
364
+ i0.ɵɵtemplate(26, ImportExportComponent_form_12_div_26_Template, 4, 4, "div", 29);
365
+ i0.ɵɵelementStart(27, "div", 30)(28, "button", 10);
366
+ i0.ɵɵlistener("click", function ImportExportComponent_form_12_Template_button_click_28_listener() { i0.ɵɵrestoreView(_r45); const ctx_r46 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r46.handleExportFormSubmit(ctx_r46.form.value)); });
367
+ i0.ɵɵpipe(29, "async");
368
+ i0.ɵɵtext(30);
369
+ i0.ɵɵpipe(31, "translate");
370
+ i0.ɵɵpipe(32, "translate");
371
+ i0.ɵɵpipe(33, "translate");
372
+ i0.ɵɵelementEnd();
373
+ i0.ɵɵelement(34, "igo-spinner", 11);
374
+ i0.ɵɵpipe(35, "async");
375
+ i0.ɵɵelementEnd();
376
+ i0.ɵɵtemplate(36, ImportExportComponent_form_12_igo_custom_html_36_Template, 1, 1, "igo-custom-html", 19);
377
+ i0.ɵɵelementEnd();
378
+ } if (rf & 2) {
379
+ const ctx_r3 = i0.ɵɵnextContext();
380
+ i0.ɵɵproperty("formGroup", ctx_r3.form);
381
+ i0.ɵɵadvance(4);
382
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(5, 18, "igo.geo.importExportForm.exportLayerPlaceholder"));
383
+ i0.ɵɵadvance(2);
384
+ i0.ɵɵproperty("value", ctx_r3.layers);
385
+ i0.ɵɵadvance(2);
386
+ i0.ɵɵtextInterpolate1(" ", ctx_r3.layers.length ? ctx_r3.getLayerTitleById(ctx_r3.layers[0]) : "", " ");
387
+ i0.ɵɵadvance(1);
388
+ i0.ɵɵproperty("ngIf", ctx_r3.layers.length > 1);
389
+ i0.ɵɵadvance(1);
390
+ i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(11, 20, ctx_r3.exportableLayers$));
391
+ i0.ɵɵadvance(5);
392
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(16, 22, "igo.geo.importExportForm.exportFormatPlaceholder"));
393
+ i0.ɵɵadvance(3);
394
+ i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(19, 24, ctx_r3.formats$).length !== 0);
395
+ i0.ɵɵadvance(2);
396
+ i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(21, 26, ctx_r3.formats$).length === 0);
397
+ i0.ɵɵadvance(2);
398
+ i0.ɵɵproperty("ngIf", ctx_r3.forceNaming && ctx_r3.form.value.format !== "URL");
399
+ i0.ɵɵadvance(1);
400
+ i0.ɵɵproperty("ngIf", ctx_r3.form.value.format === "CSVcomma" || ctx_r3.form.value.format === "CSVsemicolon");
401
+ i0.ɵɵadvance(1);
402
+ i0.ɵɵproperty("ngIf", ctx_r3.layers.length > 1 && (ctx_r3.form.value.format === "CSVcomma" || ctx_r3.form.value.format === "CSVsemicolon"));
403
+ i0.ɵɵadvance(1);
404
+ i0.ɵɵproperty("ngIf", ctx_r3.layers.length > 1 && (ctx_r3.form.value.format === "CSVcomma" || ctx_r3.form.value.format === "CSVsemicolon") && ctx_r3.form.value.combineLayers);
405
+ i0.ɵɵadvance(1);
406
+ i0.ɵɵproperty("ngIf", ctx_r3.form.value.format !== "URL");
407
+ i0.ɵɵadvance(2);
408
+ i0.ɵɵproperty("disabled", !ctx_r3.form.valid || i0.ɵɵpipeBind1(29, 28, ctx_r3.loading$));
409
+ i0.ɵɵadvance(2);
410
+ i0.ɵɵtextInterpolate1(" ", ctx_r3.form.value.format !== "URL" ? i0.ɵɵpipeBind1(31, 30, "igo.geo.importExportForm.exportButton") : ctx_r3.form.value.layers.length > 1 ? i0.ɵɵpipeBind1(32, 32, "igo.geo.importExportForm.exportButtonLinks") : i0.ɵɵpipeBind1(33, 34, "igo.geo.importExportForm.exportButtonLink"), " ");
411
+ i0.ɵɵadvance(4);
412
+ i0.ɵɵproperty("shown", i0.ɵɵpipeBind1(35, 36, ctx_r3.loading$));
413
+ i0.ɵɵadvance(2);
414
+ i0.ɵɵproperty("ngIf", ctx_r3.exportHtmlClarifications !== "");
415
+ } }
416
+ export class ImportExportComponent {
417
+ importService;
418
+ exportService;
419
+ languageService;
420
+ messageService;
421
+ styleListService;
422
+ styleService;
423
+ formBuilder;
424
+ config;
425
+ cdRef;
426
+ storageService;
427
+ downloadService;
428
+ layerService;
429
+ confirmDialogService;
430
+ form;
431
+ importForm;
432
+ formats$ = new BehaviorSubject(undefined);
433
+ encodings$ = new BehaviorSubject(undefined);
434
+ exportableLayers$ = new BehaviorSubject([]);
435
+ loading$ = new BehaviorSubject(false);
436
+ forceNaming = false;
437
+ controlFormat = 'format';
438
+ layers$$;
439
+ exportableLayers$$;
440
+ formats$$;
441
+ encodings$$;
442
+ formLayer$$;
443
+ exportOptions$$;
444
+ importHtmlClarifications;
445
+ exportHtmlClarifications;
446
+ espgCodeRegex = new RegExp('^\\d{4,6}');
447
+ clientSideFileSizeMax;
448
+ fileSizeMb;
449
+ projections$ = new BehaviorSubject([]);
450
+ projectionsConstraints;
451
+ popupChecked = false;
452
+ previousLayerSpecs$ = new BehaviorSubject(undefined);
453
+ selectFirstProj = false;
454
+ map;
455
+ contextUri;
456
+ _projectionsLimitations = {};
457
+ set projectionsLimitations(value) {
458
+ this._projectionsLimitations = value;
459
+ this.computeProjections();
460
+ }
461
+ get projectionsLimitations() {
462
+ return this._projectionsLimitations || {};
463
+ }
464
+ /**
465
+ * Store that holds the available workspaces.
466
+ */
467
+ store;
468
+ selectedMode = 'import';
469
+ selectMode = new EventEmitter();
470
+ exportOptions$ = new BehaviorSubject(undefined);
471
+ exportOptionsChange = new EventEmitter();
472
+ get layers() {
473
+ return this.form.get('layers').value;
474
+ }
475
+ set layers(value) {
476
+ this.form.patchValue({ layers: value });
477
+ }
478
+ get inputProj() {
479
+ return this.importForm.get('inputProj').value;
480
+ }
481
+ set inputProj(value) {
482
+ this.importForm.patchValue({ inputProj: value });
483
+ }
484
+ get popupAllowed() {
485
+ return (this.storageService.get('importExportPopupAllowed') || false);
486
+ }
487
+ set popupAllowed(value) {
488
+ this.storageService.set('importExportPopupAllowed', value);
489
+ }
490
+ constructor(importService, exportService, languageService, messageService, styleListService, styleService, formBuilder, config, cdRef, storageService, downloadService, layerService, confirmDialogService) {
491
+ this.importService = importService;
492
+ this.exportService = exportService;
493
+ this.languageService = languageService;
494
+ this.messageService = messageService;
495
+ this.styleListService = styleListService;
496
+ this.styleService = styleService;
497
+ this.formBuilder = formBuilder;
498
+ this.config = config;
499
+ this.cdRef = cdRef;
500
+ this.storageService = storageService;
501
+ this.downloadService = downloadService;
502
+ this.layerService = layerService;
503
+ this.confirmDialogService = confirmDialogService;
504
+ this.loadConfig();
505
+ this.buildForm();
506
+ this.computeProjections();
507
+ this.importHtmlClarifications = this.languageService.translate.instant('igo.geo.importExportForm.importHtmlClarifications');
508
+ this.exportHtmlClarifications = this.languageService.translate.instant('igo.geo.importExportForm.exportHtmlClarifications');
509
+ }
510
+ ngOnInit() {
511
+ this.layers$$ = this.map.layers$.subscribe((layers) => {
512
+ this.exportableLayers$.next(layers.filter((layer) => {
513
+ return ((layer instanceof VectorLayer && layer.exportable === true) ||
514
+ (layer.dataSource.options.download &&
515
+ layer.dataSource.options.download.url));
516
+ }));
517
+ });
518
+ const configFileSizeMb = this.config.getConfig('importExport.clientSideFileSizeMaxMb');
519
+ this.clientSideFileSizeMax =
520
+ (configFileSizeMb ? configFileSizeMb : 30) * Math.pow(1024, 2);
521
+ this.fileSizeMb = this.clientSideFileSizeMax / Math.pow(1024, 2);
522
+ this.exportOptions$$ = this.exportOptions$
523
+ .pipe(skipWhile((exportOptions) => !exportOptions))
524
+ .subscribe((exportOptions) => {
525
+ this.form.patchValue(exportOptions, { emitEvent: true });
526
+ if (exportOptions.layers) {
527
+ this.computeFormats(exportOptions.layers.map((l) => this.map.getLayerById(l)));
528
+ }
529
+ });
530
+ this.formLayer$$ = this.form
531
+ .get('format')
532
+ .valueChanges.subscribe((format) => {
533
+ const ogreFormats = Object.keys(ExportService.ogreFormats);
534
+ if (!this.popupChecked &&
535
+ this.form.get('layers').value?.length > 1 &&
536
+ (ogreFormats.indexOf(format) >= 0 || format === ExportFormat.URL)) {
537
+ if (!this.handlePopup(true)) {
538
+ this.form.patchValue({ format: undefined }, { emitEvent: false });
539
+ }
540
+ }
541
+ });
542
+ this.formLayer$$ = this.form
543
+ .get('layers')
544
+ .valueChanges.subscribe((layersId) => {
545
+ this.handlePreviousLayerSpecs();
546
+ const selectedLayers = layersId instanceof Array ? layersId : [layersId];
547
+ this.form.patchValue({ layers: selectedLayers }, { emitEvent: false });
548
+ const layers = selectedLayers.map((l) => this.map.getLayerById(l));
549
+ this.computeFormats(layers);
550
+ if (Object.keys(this.formats$.value).indexOf(this.form.value.format) ===
551
+ -1) {
552
+ this.form.patchValue({ format: undefined });
553
+ }
554
+ this.loading$.next(true);
555
+ const previousSpecs = [];
556
+ layers.forEach((layer) => {
557
+ if (layer instanceof VectorLayer &&
558
+ layer.dataSource.ol.getFeatures().length === 0) {
559
+ previousSpecs.push({
560
+ id: layer.id,
561
+ visible: layer.visible,
562
+ opacity: layer.opacity,
563
+ queryable: layer.queryable
564
+ });
565
+ layer.opacity = 0;
566
+ layer.visible = true;
567
+ }
568
+ });
569
+ this.previousLayerSpecs$.next(previousSpecs);
570
+ setTimeout(() => {
571
+ this.loading$.next(false);
572
+ }, 500);
573
+ });
574
+ this.formats$$ = this.formats$
575
+ .pipe(skipWhile((formats) => !formats))
576
+ .subscribe((formats) => {
577
+ if (Object.keys(formats).length === 1) {
578
+ this.form.patchValue({ format: formats[Object.keys(formats)[0]] });
579
+ }
580
+ });
581
+ this.encodings$$ = this.encodings$
582
+ .pipe(skipWhile((encodings) => !encodings))
583
+ .subscribe((encodings) => {
584
+ if (Object.keys(encodings).length === 1) {
585
+ this.form.patchValue({
586
+ encoding: encodings[Object.keys(encodings)[0]]
587
+ });
588
+ }
589
+ });
590
+ this.exportableLayers$$ = this.exportableLayers$
591
+ .pipe(skipWhile((layers) => !layers))
592
+ .subscribe((layers) => {
593
+ if (layers.length === 1) {
594
+ this.form.patchValue({ layers: layers[0].id });
595
+ }
596
+ });
597
+ this.form.controls[this.controlFormat].valueChanges.subscribe((format) => {
598
+ if (format === ExportFormat.CSVcomma ||
599
+ format === ExportFormat.CSVsemicolon) {
600
+ this.form.patchValue({ encoding: EncodingFormat.LATIN1 });
601
+ }
602
+ else {
603
+ this.form.patchValue({ encoding: EncodingFormat.UTF8 });
604
+ }
605
+ this.cdRef.detectChanges();
606
+ });
607
+ if (this.selectFirstProj) {
608
+ if (this.projections$.value.length === 0) {
609
+ this.importForm.patchValue({
610
+ inputProj: {
611
+ translateKey: 'nad83',
612
+ alias: 'NAD83',
613
+ code: 'EPSG:4326',
614
+ zone: ''
615
+ }
616
+ });
617
+ }
618
+ else {
619
+ this.importForm.patchValue({ inputProj: this.projections$.value[0] });
620
+ }
621
+ }
622
+ else {
623
+ this.importForm.patchValue({ inputProj: undefined });
624
+ }
625
+ }
626
+ computeProjections() {
627
+ this.projectionsConstraints = computeProjectionsConstraints(this.projectionsLimitations);
628
+ const projections = [];
629
+ if (this.projectionsConstraints.nad83) {
630
+ projections.push({
631
+ translateKey: 'nad83',
632
+ alias: 'NAD83',
633
+ code: 'EPSG:4269',
634
+ zone: ''
635
+ });
636
+ }
637
+ if (this.projectionsConstraints.wgs84) {
638
+ projections.push({
639
+ translateKey: 'wgs84',
640
+ alias: 'WGS84',
641
+ code: 'EPSG:4326',
642
+ zone: ''
643
+ });
644
+ }
645
+ if (this.projectionsConstraints.webMercator) {
646
+ projections.push({
647
+ translateKey: 'webMercator',
648
+ alias: 'Web Mercator',
649
+ code: 'EPSG:3857',
650
+ zone: ''
651
+ });
652
+ }
653
+ if (this.projectionsConstraints.mtm) {
654
+ // all mtm zones
655
+ const minZone = this.projectionsConstraints.mtmZone.minZone;
656
+ const maxZone = this.projectionsConstraints.mtmZone.maxZone;
657
+ for (let mtmZone = minZone; mtmZone <= maxZone; mtmZone++) {
658
+ const code = mtmZone < 10 ? `EPSG:3218${mtmZone}` : `EPSG:321${80 + mtmZone}`;
659
+ projections.push({
660
+ translateKey: 'mtm',
661
+ alias: `MTM ${mtmZone}`,
662
+ code,
663
+ zone: `${mtmZone}`
664
+ });
665
+ }
666
+ }
667
+ if (this.projectionsConstraints.utm) {
668
+ // all utm zones
669
+ const minZone = this.projectionsConstraints.utmZone.minZone;
670
+ const maxZone = this.projectionsConstraints.utmZone.maxZone;
671
+ for (let utmZone = minZone; utmZone <= maxZone; utmZone++) {
672
+ const code = utmZone < 10 ? `EPSG:3260${utmZone}` : `EPSG:326${utmZone}`;
673
+ projections.push({
674
+ translateKey: 'utm',
675
+ alias: `UTM ${utmZone}`,
676
+ code,
677
+ zone: `${utmZone}`
678
+ });
679
+ }
680
+ }
681
+ let configProjection = [];
682
+ if (this.projectionsConstraints.projFromConfig) {
683
+ configProjection = this.config.getConfig('projections') || [];
684
+ }
685
+ this.projections$.next(configProjection.concat(projections));
686
+ }
687
+ getWorkspaceByLayerId(id) {
688
+ const wksFromLayerId = this.store
689
+ .all()
690
+ .find((workspace) => workspace
691
+ .layer.id === id);
692
+ if (wksFromLayerId) {
693
+ return wksFromLayerId;
694
+ }
695
+ return;
696
+ }
697
+ getLayerTitleById(id) {
698
+ return this.map.getLayerById(id)?.title;
699
+ }
700
+ layerHasSelectedFeatures(layer) {
701
+ const wksFromLayer = this.getWorkspaceByLayerId(layer.id);
702
+ if (wksFromLayer) {
703
+ const recs = wksFromLayer.entityStore.stateView.firstBy((record) => {
704
+ return record.state.selected === true;
705
+ });
706
+ return recs ? true : false;
707
+ }
708
+ }
709
+ onlySelected(event, id) {
710
+ let layersWithSelection = this.form.value.layersWithSelection;
711
+ if (event.checked) {
712
+ layersWithSelection.push(id);
713
+ }
714
+ else {
715
+ layersWithSelection = layersWithSelection.filter((layerId) => layerId !== id);
716
+ }
717
+ this.form.patchValue({ layersWithSelection });
718
+ }
719
+ onlySelectedClick(event, id) {
720
+ if (this.form.value.layers.find((layerId) => layerId === id)) {
721
+ event.stopPropagation();
722
+ }
723
+ }
724
+ inLayersIdToExportSelectionOnly(layer) {
725
+ return this.form.value.layersWithSelection.find((layerId) => layerId === layer.id)
726
+ ? true
727
+ : false;
728
+ }
729
+ ngOnDestroy() {
730
+ this.layers$$.unsubscribe();
731
+ this.exportableLayers$$.unsubscribe();
732
+ this.formats$$.unsubscribe();
733
+ this.encodings$$.unsubscribe();
734
+ this.formLayer$$.unsubscribe();
735
+ if (this.exportOptions$$) {
736
+ this.exportOptions$$.unsubscribe();
737
+ }
738
+ this.exportOptionsChange.emit(this.form.value);
739
+ this.handlePreviousLayerSpecs();
740
+ }
741
+ handlePreviousLayerSpecs() {
742
+ const previousSpecs = this.previousLayerSpecs$.value;
743
+ if (previousSpecs && previousSpecs.length) {
744
+ previousSpecs.forEach((specs) => {
745
+ const previousLayer = this.map.getLayerById(specs.id);
746
+ previousLayer.visible = specs.visible;
747
+ previousLayer.opacity = specs.opacity;
748
+ previousLayer.queryable = specs.queryable;
749
+ });
750
+ }
751
+ this.previousLayerSpecs$.next(undefined);
752
+ }
753
+ importFiles(files) {
754
+ let inputProj = this.inputProj.code;
755
+ if (this.espgCodeRegex.test(inputProj)) {
756
+ inputProj = `EPSG:${inputProj}`;
757
+ }
758
+ this.loading$.next(true);
759
+ for (const file of files) {
760
+ this.importService.import(file, inputProj).subscribe((features) => this.onFileImportSuccess(file, features), (error) => this.onFileImportError(file, error), () => {
761
+ this.loading$.next(false);
762
+ });
763
+ }
764
+ }
765
+ handlePopup(preCheck = true) {
766
+ const p1 = window.open('', 'popup', 'width=1, height=1');
767
+ p1.close();
768
+ const p2 = window.open('', 'popup', 'width=1, height=1');
769
+ if (!p2 || p2.closed || typeof p2.closed === 'undefined' || p2 === null) {
770
+ this.onPopupBlockedError(preCheck);
771
+ this.popupAllowed = false;
772
+ }
773
+ else {
774
+ p2.close();
775
+ this.popupAllowed = true;
776
+ this.popupChecked = true;
777
+ }
778
+ return this.popupAllowed;
779
+ }
780
+ handleExportFormSubmit(data) {
781
+ this.loading$.next(true);
782
+ const ogreFormats = Object.keys(ExportService.ogreFormats);
783
+ if (!this.popupChecked &&
784
+ data.layers.length > 1 &&
785
+ (ogreFormats.indexOf(data.format) >= 0 ||
786
+ data.format === ExportFormat.URL) &&
787
+ !this.popupAllowed) {
788
+ this.handlePopup();
789
+ }
790
+ let geomTypesCSV = [];
791
+ let featuresCSV = [];
792
+ let filename = '';
793
+ for (const [layerIndex, layer] of data.layers.entries()) {
794
+ const lay = this.map.getLayerById(layer);
795
+ if (!(data.format === ExportFormat.CSVsemicolon ||
796
+ data.format === ExportFormat.CSVcomma) ||
797
+ !data.combineLayers ||
798
+ data.layers.length === 1) {
799
+ filename = lay.title;
800
+ if (data.name) {
801
+ filename = data.name;
802
+ }
803
+ }
804
+ else {
805
+ filename = this.languageService.translate.instant('igo.geo.export.combinedLayers');
806
+ }
807
+ const dSOptions = lay.dataSource.options;
808
+ if (data.format === ExportFormat.URL &&
809
+ dSOptions.download &&
810
+ (dSOptions.download.url || dSOptions.download.dynamicUrl)) {
811
+ setTimeout(() => {
812
+ // better look an feel
813
+ const url = dSOptions.download.url || dSOptions.download.dynamicUrl;
814
+ url.match(/service=wfs/gi)
815
+ ? this.downloadService.open(lay)
816
+ : window.open(url, '_blank');
817
+ this.loading$.next(false);
818
+ }, 500);
819
+ return;
820
+ }
821
+ const wks = this.getWorkspaceByLayerId(layer);
822
+ let olFeatures;
823
+ if (wks && wks.entityStore && wks.entityStore.stateView.all().length) {
824
+ if (data.layersWithSelection.indexOf(layer) !== -1 &&
825
+ data.featureInMapExtent) {
826
+ // Only export selected feature && into map extent
827
+ olFeatures = wks.entityStore.stateView
828
+ .all()
829
+ .filter((e) => e.state.inMapExtent && e.state.selected)
830
+ .map((e) => e.entity.ol);
831
+ }
832
+ else if (data.layersWithSelection.indexOf(layer) !== -1 &&
833
+ !data.featureInMapExtent) {
834
+ // Only export selected feature && (into map extent OR not)
835
+ olFeatures = wks.entityStore.stateView
836
+ .all()
837
+ .filter((e) => e.state.selected)
838
+ .map((e) => e.entity.ol);
839
+ }
840
+ else if (data.featureInMapExtent) {
841
+ // Only into map extent
842
+ olFeatures = wks.entityStore.stateView
843
+ .all()
844
+ .filter((e) => e.state.inMapExtent)
845
+ .map((e) => e.entity.ol);
846
+ }
847
+ else {
848
+ // All features
849
+ olFeatures = wks.entityStore.stateView
850
+ .all()
851
+ .map((e) => e.entity.ol);
852
+ }
853
+ }
854
+ else {
855
+ const ol = lay.dataSource.ol;
856
+ if (data.featureInMapExtent) {
857
+ olFeatures = ol.getFeaturesInExtent(lay.map.viewController.getExtent());
858
+ }
859
+ else {
860
+ olFeatures = ol.getFeatures();
861
+ }
862
+ if (lay.dataSource instanceof ClusterDataSource) {
863
+ olFeatures = olFeatures.flatMap((cluster) => cluster.get('features'));
864
+ }
865
+ }
866
+ let geomTypes = [];
867
+ if (data.format === ExportFormat.Shapefile ||
868
+ data.format === ExportFormat.GPX) {
869
+ olFeatures.forEach((olFeature) => {
870
+ const featureGeomType = olFeature.getGeometry().getType();
871
+ const currentGeomType = geomTypes.find((geomType) => geomType.geometryType === featureGeomType);
872
+ if (currentGeomType) {
873
+ currentGeomType.features.push(olFeature);
874
+ }
875
+ else {
876
+ geomTypes.push({
877
+ geometryType: featureGeomType,
878
+ features: [olFeature]
879
+ });
880
+ }
881
+ });
882
+ }
883
+ else {
884
+ geomTypes = [{ geometryType: '', features: olFeatures }];
885
+ }
886
+ geomTypes.forEach((geomType) => {
887
+ geomType.features.forEach((feature) => {
888
+ const radius = feature.get('rad');
889
+ if (radius) {
890
+ const center4326 = [
891
+ feature.get('longitude'),
892
+ feature.get('latitude')
893
+ ];
894
+ const circle = circular(center4326, radius, 500);
895
+ circle.transform('EPSG:4326', feature.get('_projection'));
896
+ feature.setGeometry(circle);
897
+ }
898
+ });
899
+ });
900
+ if (data.format === ExportFormat.GPX) {
901
+ const gpxFeatureCnt = geomTypes.length;
902
+ geomTypes = geomTypes.filter((geomType) => ['LineString', 'Point'].includes(geomType.geometryType));
903
+ const gpxFeatureCntPointOrPoly = geomTypes.length;
904
+ if (gpxFeatureCnt > gpxFeatureCntPointOrPoly) {
905
+ this.messageService.error('igo.geo.export.gpx.error.poly.text', 'igo.geo.export.gpx.error.poly.title', { timeOut: 20000 });
906
+ }
907
+ }
908
+ else if ((data.format === ExportFormat.CSVsemicolon ||
909
+ data.format === ExportFormat.CSVcomma) &&
910
+ data.combineLayers) {
911
+ geomTypes.forEach((geomType) => geomTypesCSV.push(geomType));
912
+ if (layerIndex !== data.layers.length - 1) {
913
+ continue;
914
+ }
915
+ else {
916
+ let previousFeature = undefined;
917
+ geomTypesCSV.forEach((geomType) => {
918
+ geomType.features.forEach((currentFeature) => {
919
+ if (data.separator) {
920
+ if (previousFeature) {
921
+ if (currentFeature.get('_featureStore').layer.options.title !==
922
+ previousFeature.get('_featureStore').layer.options.title) {
923
+ const titleEmptyRows = this.createTitleEmptyRows(previousFeature, currentFeature);
924
+ featuresCSV.push(titleEmptyRows[2]);
925
+ featuresCSV.push(titleEmptyRows[0]);
926
+ featuresCSV.push(titleEmptyRows[1]);
927
+ }
928
+ }
929
+ else {
930
+ const titleEmptyRows = this.createTitleEmptyRows(currentFeature, currentFeature);
931
+ featuresCSV.push(titleEmptyRows[0]);
932
+ }
933
+ }
934
+ featuresCSV.push(currentFeature);
935
+ previousFeature = currentFeature;
936
+ });
937
+ });
938
+ }
939
+ }
940
+ if (geomTypes.length === 0) {
941
+ this.loading$.next(false);
942
+ this.messageService.error('igo.geo.export.nothing.text', 'igo.geo.export.nothing.title', { timeOut: 20000 });
943
+ }
944
+ else {
945
+ if (!(data.format === ExportFormat.CSVsemicolon ||
946
+ data.format === ExportFormat.CSVcomma) ||
947
+ !data.combineLayers) {
948
+ geomTypes.map((geomType) => this.exportService
949
+ .export(geomType.features, data.format, filename + geomType.geometryType, data.encoding, this.map.projection)
950
+ .subscribe(() => { }, (error) => this.onFileExportError(error), () => {
951
+ this.onFileExportSuccess();
952
+ geomType.features.forEach((feature) => {
953
+ this.circleToPoint(feature);
954
+ });
955
+ this.loading$.next(false);
956
+ }));
957
+ }
958
+ }
959
+ }
960
+ if ((data.format === ExportFormat.CSVsemicolon ||
961
+ data.format === ExportFormat.CSVcomma) &&
962
+ data.combineLayers) {
963
+ this.exportService
964
+ .export(featuresCSV, data.format, filename, data.encoding, this.map.projection)
965
+ .subscribe(() => { }, (error) => this.onFileExportError(error), () => {
966
+ this.onFileExportSuccess();
967
+ featuresCSV.forEach((feature) => {
968
+ this.circleToPoint(feature);
969
+ });
970
+ this.loading$.next(false);
971
+ });
972
+ }
973
+ }
974
+ createTitleEmptyRows(previousFeature, currentFeature) {
975
+ const titleRow = currentFeature.clone();
976
+ const headerRow = currentFeature.clone();
977
+ const emptyRow = currentFeature.clone();
978
+ const previousFeatureKeys = previousFeature.getKeys();
979
+ let firstKeyPrevious = '';
980
+ for (const key in previousFeatureKeys) {
981
+ if (previousFeatureKeys[key] !== 'geometry') {
982
+ firstKeyPrevious = previousFeatureKeys[key];
983
+ break;
984
+ }
985
+ }
986
+ const currentFeatureKeys = currentFeature.getKeys();
987
+ let firstKeyCurrent = '';
988
+ for (const key in currentFeatureKeys) {
989
+ if (currentFeatureKeys[key] !== 'geometry') {
990
+ firstKeyCurrent = currentFeatureKeys[key];
991
+ break;
992
+ }
993
+ }
994
+ const allKeys = currentFeature.getKeys();
995
+ previousFeatureKeys.forEach((previousKey) => {
996
+ if (allKeys.includes(previousKey) && previousKey !== firstKeyPrevious) {
997
+ allKeys.push(previousKey);
998
+ }
999
+ });
1000
+ allKeys.unshift(firstKeyPrevious);
1001
+ let firstKeyAll = '';
1002
+ for (const key in allKeys) {
1003
+ if (allKeys[key] !== 'geometry') {
1004
+ firstKeyAll = allKeys[key];
1005
+ break;
1006
+ }
1007
+ }
1008
+ allKeys.forEach((key) => {
1009
+ const sameKeys = previousFeatureKeys.length === currentFeatureKeys.length &&
1010
+ previousFeatureKeys.every((value, index) => value === currentFeatureKeys[index]);
1011
+ if (key === firstKeyAll && !sameKeys) {
1012
+ titleRow.set(key, currentFeature.get('_featureStore').layer.options.title +
1013
+ ' ===============>', true);
1014
+ headerRow.set(key, key, true);
1015
+ emptyRow.unset(key, true);
1016
+ }
1017
+ else if (key === firstKeyAll && sameKeys) {
1018
+ titleRow.set(key, currentFeature.get('_featureStore').layer.options.title, true);
1019
+ headerRow.set(key, key, true);
1020
+ emptyRow.unset(key, true);
1021
+ }
1022
+ else if (key === firstKeyCurrent) {
1023
+ titleRow.set(key, currentFeature.get('_featureStore').layer.options.title, true);
1024
+ headerRow.set(key, key, true);
1025
+ emptyRow.unset(key, true);
1026
+ }
1027
+ else if (key !== 'geometry') {
1028
+ titleRow.unset(key, true);
1029
+ headerRow.set(key, key, true);
1030
+ emptyRow.unset(key, true);
1031
+ }
1032
+ else {
1033
+ titleRow.unset(key, true);
1034
+ emptyRow.unset(key, true);
1035
+ }
1036
+ if (!currentFeatureKeys.includes(key)) {
1037
+ headerRow.unset(key, true);
1038
+ }
1039
+ });
1040
+ const titleEmptyRows = [titleRow, headerRow, emptyRow];
1041
+ return titleEmptyRows;
1042
+ }
1043
+ circleToPoint(feature) {
1044
+ const radius = feature.get('rad');
1045
+ if (radius) {
1046
+ const point = new olPoint([
1047
+ feature.get('longitude'),
1048
+ feature.get('latitude')
1049
+ ]);
1050
+ point.transform('EPSG:4326', feature.get('_projection'));
1051
+ feature.setGeometry(point);
1052
+ }
1053
+ }
1054
+ buildForm() {
1055
+ this.importForm = this.formBuilder.group({
1056
+ inputProj: ['', [Validators.required]]
1057
+ });
1058
+ if (this.forceNaming) {
1059
+ this.form = this.formBuilder.group({
1060
+ format: ['', [Validators.required]],
1061
+ layers: [[], [Validators.required]],
1062
+ layersWithSelection: [[]],
1063
+ encoding: [EncodingFormat.UTF8, [Validators.required]],
1064
+ combineLayers: [true, [Validators.required]],
1065
+ separator: [false, [Validators.required]],
1066
+ featureInMapExtent: [false, [Validators.required]],
1067
+ name: ['', [Validators.required]]
1068
+ });
1069
+ }
1070
+ else {
1071
+ this.form = this.formBuilder.group({
1072
+ format: ['', [Validators.required]],
1073
+ layers: [[], [Validators.required]],
1074
+ layersWithSelection: [[]],
1075
+ encoding: [EncodingFormat.UTF8, [Validators.required]],
1076
+ combineLayers: [true, [Validators.required]],
1077
+ separator: [false, [Validators.required]],
1078
+ featureInMapExtent: [false, [Validators.required]]
1079
+ });
1080
+ }
1081
+ }
1082
+ onFileImportSuccess(file, features) {
1083
+ const importExportOptions = this.config.getConfig('importExport');
1084
+ const confirmDialogService = importExportOptions?.allowToStoreLayer
1085
+ ? this.confirmDialogService
1086
+ : undefined;
1087
+ const importWithStyle = importExportOptions?.importWithStyle ||
1088
+ this.config.getConfig('importWithStyle');
1089
+ if (this.config.getConfig('importWithStyle')) {
1090
+ console.warn(`
1091
+ The location of this config importWithStyle is deprecated.
1092
+ Please move this property within importExport configuration.
1093
+ Ex: importWithStyle: true/false must be transfered to importExport: { importWithStyle: true/false }
1094
+ Refer to environnement.ts OR config/config.json
1095
+ This legacy conversion will be deleted in 2024.
1096
+ `);
1097
+ }
1098
+ if (!importWithStyle) {
1099
+ handleFileImportSuccess(file, features, this.map, this.contextUri, this.messageService, this.layerService, confirmDialogService);
1100
+ }
1101
+ else {
1102
+ handleFileImportSuccess(file, features, this.map, this.contextUri, this.messageService, this.layerService, confirmDialogService, this.styleListService, this.styleService);
1103
+ }
1104
+ }
1105
+ onFileImportError(file, error) {
1106
+ this.loading$.next(false);
1107
+ handleFileImportError(file, error, this.messageService, this.fileSizeMb);
1108
+ }
1109
+ onPopupBlockedError(preCheck = true) {
1110
+ this.loading$.next(false);
1111
+ const extraMessage = preCheck
1112
+ ? 'igo.geo.export.popupBlocked.selectAgain'
1113
+ : 'igo.geo.export.popupBlocked.retry';
1114
+ this.messageService.error('igo.geo.export.popupBlocked.text', 'igo.geo.export.popupBlocked.title', { timeOut: 20000 }, { extraMessage });
1115
+ }
1116
+ onFileExportError(error) {
1117
+ this.loading$.next(false);
1118
+ handleFileExportError(error, this.messageService);
1119
+ }
1120
+ loadConfig() {
1121
+ if (this.config.getConfig('importExport.forceNaming') !== undefined) {
1122
+ this.forceNaming = this.config.getConfig('importExport.forceNaming');
1123
+ }
1124
+ this.computeFormats();
1125
+ this.loadEncodings();
1126
+ }
1127
+ encodingDefaultValue(format) {
1128
+ if (format === ExportFormat.CSVcomma ||
1129
+ format === ExportFormat.CSVsemicolon) {
1130
+ this.form.patchValue({ encoding: EncodingFormat.LATIN1 });
1131
+ return EncodingFormat.LATIN1;
1132
+ }
1133
+ else {
1134
+ this.form.patchValue({ encoding: EncodingFormat.UTF8 });
1135
+ return EncodingFormat.UTF8;
1136
+ }
1137
+ }
1138
+ loadEncodings() {
1139
+ this.encodings$.next(EncodingFormat);
1140
+ }
1141
+ computeFormats(layers) {
1142
+ let appliedformats = Object.keys(ExportFormat);
1143
+ const formatsType = {
1144
+ onlyUrl: false,
1145
+ onlyVector: false,
1146
+ vectorAndUrl: false,
1147
+ customList: false
1148
+ };
1149
+ const customList = [];
1150
+ if (layers && layers.length) {
1151
+ layers.forEach((layer) => {
1152
+ if (!layer) {
1153
+ return;
1154
+ }
1155
+ if (layer.dataSource.options.download?.allowedFormats) {
1156
+ formatsType.customList = true;
1157
+ customList.push({
1158
+ layer: layer.title,
1159
+ formats: this.validateListFormat(layer.dataSource.options.download.allowedFormats)
1160
+ });
1161
+ }
1162
+ else if (!(layer instanceof VectorLayer) &&
1163
+ layer.dataSource.options.download &&
1164
+ layer.dataSource.options.download.url) {
1165
+ formatsType.onlyUrl = true;
1166
+ }
1167
+ else if (layer.dataSource.options.download &&
1168
+ (layer.dataSource.options.download.url ||
1169
+ layer.dataSource.options.download.dynamicUrl)) {
1170
+ formatsType.vectorAndUrl = true;
1171
+ }
1172
+ else if (layer instanceof VectorLayer) {
1173
+ formatsType.onlyVector = true;
1174
+ }
1175
+ });
1176
+ if (formatsType.onlyUrl === true && formatsType.onlyVector === false) {
1177
+ appliedformats = ['URL'];
1178
+ }
1179
+ else if (formatsType.onlyVector === true &&
1180
+ formatsType.onlyUrl === false) {
1181
+ this.computeFormats(); // reset
1182
+ if (ExportFormat.URL in this.formats$.value) {
1183
+ const keys = Object.keys(this.formats$.value).filter((key) => key !== 'URL');
1184
+ appliedformats = keys;
1185
+ }
1186
+ }
1187
+ else if (formatsType.vectorAndUrl === true &&
1188
+ formatsType.onlyUrl === false &&
1189
+ formatsType.onlyVector === false) {
1190
+ this.computeFormats(); // reset
1191
+ if (!(ExportFormat.URL in this.formats$.value)) {
1192
+ const keys = Object.keys(this.formats$.value);
1193
+ keys.push('URL');
1194
+ appliedformats = keys;
1195
+ }
1196
+ }
1197
+ }
1198
+ const configImportExportFormats = this.config.getConfig('importExport.formats');
1199
+ if (configImportExportFormats) {
1200
+ const validatedListFormat = this.validateListFormat(configImportExportFormats);
1201
+ appliedformats = appliedformats.filter((af) => validatedListFormat.includes(af));
1202
+ }
1203
+ if (formatsType.customList) {
1204
+ let commonFormats;
1205
+ const layersWithCustomFormats = [];
1206
+ let previousCustomListFormats = customList[0].formats;
1207
+ customList.map((list) => {
1208
+ layersWithCustomFormats.push(list.layer);
1209
+ commonFormats = list.formats.filter((value) => previousCustomListFormats.includes(value));
1210
+ previousCustomListFormats = list.formats;
1211
+ });
1212
+ const finalFormats = commonFormats.filter((value) => appliedformats.includes(value));
1213
+ if (finalFormats.length > 0) {
1214
+ this.formats$.next(strEnum(finalFormats));
1215
+ if (layers && layers.length) {
1216
+ if (layers.length > 1) {
1217
+ this.messageService.alert('igo.geo.export.customList.text', 'igo.geo.export.customList.title', undefined, { value: layersWithCustomFormats.join() });
1218
+ }
1219
+ }
1220
+ }
1221
+ else {
1222
+ this.formats$.next([]);
1223
+ this.messageService.alert('igo.geo.export.noFormat.text', 'igo.geo.export.noFormat.title');
1224
+ }
1225
+ return;
1226
+ }
1227
+ else {
1228
+ this.formats$.next(strEnum(appliedformats));
1229
+ }
1230
+ }
1231
+ validateListFormat(formats) {
1232
+ return formats
1233
+ .filter((format) => {
1234
+ if (format.toUpperCase() === ExportFormat.CSVcomma.toUpperCase() ||
1235
+ format.toUpperCase() === ExportFormat.CSVsemicolon.toUpperCase() ||
1236
+ format.toUpperCase() === ExportFormat.GML.toUpperCase() ||
1237
+ format.toUpperCase() === ExportFormat.GPX.toUpperCase() ||
1238
+ format.toUpperCase() === ExportFormat.GeoJSON.toUpperCase() ||
1239
+ format.toUpperCase() === ExportFormat.KML.toUpperCase() ||
1240
+ format.toUpperCase() === ExportFormat.Shapefile.toUpperCase() ||
1241
+ format.toUpperCase() === ExportFormat.URL.toUpperCase()) {
1242
+ return format;
1243
+ }
1244
+ })
1245
+ .map((format) => {
1246
+ if (format.toUpperCase() === ExportFormat.CSVcomma.toUpperCase()) {
1247
+ format = ExportFormat.CSVcomma;
1248
+ return format;
1249
+ }
1250
+ if (format.toUpperCase() === ExportFormat.CSVsemicolon.toUpperCase()) {
1251
+ format = ExportFormat.CSVsemicolon;
1252
+ return format;
1253
+ }
1254
+ if (format.toUpperCase() === ExportFormat.GML.toUpperCase()) {
1255
+ format = ExportFormat.GML;
1256
+ return format;
1257
+ }
1258
+ if (format.toUpperCase() === ExportFormat.GPX.toUpperCase()) {
1259
+ format = ExportFormat.GPX;
1260
+ return format;
1261
+ }
1262
+ if (format.toUpperCase() === ExportFormat.GeoJSON.toUpperCase()) {
1263
+ format = ExportFormat.GeoJSON;
1264
+ return format;
1265
+ }
1266
+ if (format.toUpperCase() === ExportFormat.KML.toUpperCase()) {
1267
+ format = ExportFormat.KML;
1268
+ return format;
1269
+ }
1270
+ if (format.toUpperCase() === ExportFormat.Shapefile.toUpperCase()) {
1271
+ format = ExportFormat.Shapefile;
1272
+ return format;
1273
+ }
1274
+ if (format.toUpperCase() === ExportFormat.URL.toUpperCase()) {
1275
+ format = ExportFormat.URL;
1276
+ return format;
1277
+ }
1278
+ });
1279
+ }
1280
+ modeChanged(mode) {
1281
+ this.selectMode.emit(mode);
1282
+ }
1283
+ onFileExportSuccess() {
1284
+ handleFileExportSuccess(this.messageService);
1285
+ }
1286
+ onImportExportChange(event) {
1287
+ this.selectedMode = event.value;
1288
+ }
1289
+ static ɵfac = function ImportExportComponent_Factory(t) { return new (t || ImportExportComponent)(i0.ɵɵdirectiveInject(i1.ImportService), i0.ɵɵdirectiveInject(i2.ExportService), i0.ɵɵdirectiveInject(i3.LanguageService), i0.ɵɵdirectiveInject(i3.MessageService), i0.ɵɵdirectiveInject(i4.StyleListService), i0.ɵɵdirectiveInject(i5.StyleService), i0.ɵɵdirectiveInject(i6.UntypedFormBuilder), i0.ɵɵdirectiveInject(i3.ConfigService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i3.StorageService), i0.ɵɵdirectiveInject(i7.DownloadService), i0.ɵɵdirectiveInject(i8.LayerService), i0.ɵɵdirectiveInject(i9.ConfirmDialogService)); };
1290
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ImportExportComponent, selectors: [["igo-import-export"]], inputs: { selectFirstProj: "selectFirstProj", map: "map", contextUri: "contextUri", projectionsLimitations: "projectionsLimitations", store: "store", selectedMode: "selectedMode", exportOptions$: "exportOptions$" }, outputs: { selectMode: "selectMode", exportOptionsChange: "exportOptionsChange" }, decls: 14, vars: 17, consts: [[1, "import-export-toggle", "mat-typography"], [3, "value", "change"], [3, "value"], ["class", "igo-form", 3, "formGroup", 4, "ngIf"], ["class", "mat-typography", 4, "ngIf"], [1, "igo-form", 3, "formGroup"], [1, "igo-input-container"], [3, "value", "valueChange"], [3, "value", "click", 4, "ngFor", "ngForOf"], ["tooltip-position", "below", "matTooltipShowDelay", "500", 1, "igo-form-button-group", 3, "matTooltip"], ["mat-raised-button", "", "type", "button", 3, "disabled", "click"], [3, "shown"], ["hidden", "", "type", "file", 3, "click", "change"], ["fileInput", ""], [3, "value", "click"], ["matListItemTitle", "", 4, "ngIf"], ["matListItemTitle", ""], [1, "mat-typography"], [4, "ngIf"], ["class", "mat-typography", 3, "html", 4, "ngIf"], [1, "mat-typography", 3, "html"], ["multiple", "", 3, "value", "valueChange"], ["class", "export-select-trigger", 4, "ngIf"], [3, "ngClass", "value", "click", 4, "ngFor", "ngForOf"], ["formControlName", "format"], ["disabled", "true", 4, "ngIf"], ["class", "igo-input-container", 4, "ngIf"], ["class", "export-combine-layers mat-typography", 4, "ngIf"], ["class", "export-separator mat-typography", 4, "ngIf"], ["class", "export-options mat-typography", 4, "ngIf"], [1, "igo-form-button-group"], [1, "export-select-trigger"], [3, "ngClass", "value", "click"], [3, "click", "checked", "change", 4, "ngIf"], [3, "click", "checked", "change"], [3, "value", 4, "ngFor", "ngForOf"], ["disabled", "true"], ["matInput", "", "formControlName", "name", 3, "placeholder"], ["formControlName", "encoding"], [1, "export-combine-layers", "mat-typography"], ["formControlName", "combineLayers", 3, "labelPosition"], [1, "export-separator", "mat-typography"], ["formControlName", "separator", 3, "labelPosition"], [1, "export-options", "mat-typography"], ["formControlName", "featureInMapExtent", 3, "labelPosition"]], template: function ImportExportComponent_Template(rf, ctx) { if (rf & 1) {
1291
+ i0.ɵɵelementStart(0, "div", 0)(1, "mat-button-toggle-group", 1);
1292
+ i0.ɵɵlistener("change", function ImportExportComponent_Template_mat_button_toggle_group_change_1_listener($event) { return ctx.onImportExportChange($event); });
1293
+ i0.ɵɵelementStart(2, "mat-button-toggle", 2);
1294
+ i0.ɵɵtext(3);
1295
+ i0.ɵɵpipe(4, "translate");
1296
+ i0.ɵɵelementEnd();
1297
+ i0.ɵɵelementStart(5, "mat-button-toggle", 2);
1298
+ i0.ɵɵtext(6);
1299
+ i0.ɵɵpipe(7, "translate");
1300
+ i0.ɵɵelementEnd()()();
1301
+ i0.ɵɵtemplate(8, ImportExportComponent_form_8_Template, 20, 24, "form", 3);
1302
+ i0.ɵɵtemplate(9, ImportExportComponent_section_9_Template, 3, 2, "section", 4);
1303
+ i0.ɵɵtemplate(10, ImportExportComponent_section_10_Template, 4, 3, "section", 4);
1304
+ i0.ɵɵpipe(11, "async");
1305
+ i0.ɵɵtemplate(12, ImportExportComponent_form_12_Template, 37, 38, "form", 3);
1306
+ i0.ɵɵpipe(13, "async");
1307
+ } if (rf & 2) {
1308
+ i0.ɵɵadvance(1);
1309
+ i0.ɵɵproperty("value", ctx.selectedMode);
1310
+ i0.ɵɵadvance(1);
1311
+ i0.ɵɵproperty("value", "import");
1312
+ i0.ɵɵadvance(1);
1313
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(4, 9, "igo.geo.importExportForm.importTabTitle"), " ");
1314
+ i0.ɵɵadvance(2);
1315
+ i0.ɵɵproperty("value", "export");
1316
+ i0.ɵɵadvance(1);
1317
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(7, 11, "igo.geo.importExportForm.exportTabTitle"), " ");
1318
+ i0.ɵɵadvance(2);
1319
+ i0.ɵɵproperty("ngIf", ctx.selectedMode === "import");
1320
+ i0.ɵɵadvance(1);
1321
+ i0.ɵɵproperty("ngIf", ctx.selectedMode === "import");
1322
+ i0.ɵɵadvance(1);
1323
+ i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(11, 13, ctx.exportableLayers$).length === 0 && ctx.selectedMode === "export");
1324
+ i0.ɵɵadvance(2);
1325
+ i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(13, 15, ctx.exportableLayers$).length > 0 && ctx.selectedMode === "export");
1326
+ } }, dependencies: [i10.MatTooltip, i6.ɵNgNoValidate, i6.DefaultValueAccessor, i6.NgControlStatus, i6.NgControlStatusGroup, i6.FormGroupDirective, i6.FormControlName, i11.NgClass, i11.NgForOf, i11.NgIf, i12.MatButton, i13.MatButtonToggleGroup, i13.MatButtonToggle, i14.MatFormField, i14.MatLabel, i15.MatSelect, i15.MatSelectTrigger, i16.MatOption, i17.MatInput, i18.MatSlideToggle, i9.SpinnerComponent, i9.CustomHtmlComponent, i11.AsyncPipe, i19.TranslatePipe, i9.KeyValuePipe], styles: ["[_nghost-%COMP%] mat-option.igo-export-layer-mat-option[_ngcontent-%COMP%]{height:5em;line-height:1em}[_nghost-%COMP%] .import-export-toggle[_ngcontent-%COMP%]{padding:10px;text-align:center}[_nghost-%COMP%] .import-export-toggle[_ngcontent-%COMP%] mat-button-toggle-group[_ngcontent-%COMP%]{width:100%}[_nghost-%COMP%] .import-export-toggle[_ngcontent-%COMP%] mat-button-toggle-group[_ngcontent-%COMP%] mat-button-toggle[_ngcontent-%COMP%]{width:50%}[_nghost-%COMP%] h4[_ngcontent-%COMP%]{padding:0 5px}[_nghost-%COMP%] .igo-form[_ngcontent-%COMP%]{padding:15px 5px}[_nghost-%COMP%] .igo-input-container[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%]{width:100%}[_nghost-%COMP%] .igo-form-button-group[_ngcontent-%COMP%]{text-align:center;padding-top:10px}[_nghost-%COMP%] igo-spinner[_ngcontent-%COMP%]{position:absolute;padding-left:10px}[_nghost-%COMP%] .export-options[_ngcontent-%COMP%] mat-slide-toggle[_ngcontent-%COMP%], [_nghost-%COMP%] .export-combine-layers[_ngcontent-%COMP%] mat-slide-toggle[_ngcontent-%COMP%], [_nghost-%COMP%] .export-separator[_ngcontent-%COMP%] mat-slide-toggle[_ngcontent-%COMP%]{width:100%;padding:10px}[_nghost-%COMP%] .export-options[_ngcontent-%COMP%] mat-slide-toggle[_ngcontent-%COMP%] .mdc-form-field, [_nghost-%COMP%] .export-combine-layers[_ngcontent-%COMP%] mat-slide-toggle[_ngcontent-%COMP%] .mdc-form-field, [_nghost-%COMP%] .export-separator[_ngcontent-%COMP%] mat-slide-toggle[_ngcontent-%COMP%] .mdc-form-field{width:100%}[_nghost-%COMP%] .export-options[_ngcontent-%COMP%] mat-slide-toggle[_ngcontent-%COMP%] .mdc-label, [_nghost-%COMP%] .export-combine-layers[_ngcontent-%COMP%] mat-slide-toggle[_ngcontent-%COMP%] .mdc-label, [_nghost-%COMP%] .export-separator[_ngcontent-%COMP%] mat-slide-toggle[_ngcontent-%COMP%] .mdc-label{margin-left:0;width:calc(100% - 60px)}[_nghost-%COMP%] .export-select-trigger[_ngcontent-%COMP%]{opacity:.75;font-size:.75em}"] });
1327
+ }
1328
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ImportExportComponent, [{
1329
+ type: Component,
1330
+ args: [{ selector: 'igo-import-export', template: "<div class=\"import-export-toggle mat-typography\">\r\n <mat-button-toggle-group\r\n [value]=\"selectedMode\"\r\n (change)=\"onImportExportChange($event)\"\r\n >\r\n <mat-button-toggle [value]=\"'import'\">\r\n {{ 'igo.geo.importExportForm.importTabTitle' | translate }}\r\n </mat-button-toggle>\r\n <mat-button-toggle [value]=\"'export'\">\r\n {{ 'igo.geo.importExportForm.exportTabTitle' | translate }}\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n</div>\r\n\r\n<form\r\n class=\"igo-form\"\r\n [formGroup]=\"importForm\"\r\n *ngIf=\"selectedMode === 'import'\"\r\n>\r\n <div class=\"igo-input-container\">\r\n <mat-form-field>\r\n <mat-label>{{\r\n 'igo.geo.importExportForm.importProjPlaceholder' | translate\r\n }}</mat-label>\r\n <mat-select [(value)]=\"inputProj\">\r\n <mat-option\r\n *ngFor=\"let projection of projections$ | async\"\r\n [value]=\"projection\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <p matListItemTitle *ngIf=\"projection.translateKey\">\r\n {{\r\n 'igo.geo.importExportForm.projections.' + projection.translateKey\r\n | translate: projection\r\n }}\r\n </p>\r\n <p matListItemTitle *ngIf=\"!projection.translateKey\">\r\n {{ projection.alias }}\r\n </p>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"\r\n importForm.invalid\r\n ? ('igo.geo.importExportForm.projections.choose' | translate)\r\n : ('igo.geo.importExportForm.importButton' | translate)\r\n \"\r\n class=\"igo-form-button-group\"\r\n >\r\n <button\r\n [disabled]=\"importForm.invalid || (loading$ | async)\"\r\n mat-raised-button\r\n type=\"button\"\r\n (click)=\"fileInput.click()\"\r\n >\r\n {{ 'igo.geo.importExportForm.importButton' | translate }}\r\n </button>\r\n <igo-spinner [shown]=\"loading$ | async\"></igo-spinner>\r\n <input\r\n hidden\r\n #fileInput\r\n type=\"file\"\r\n [style.display]=\"'none'\"\r\n (click)=\"fileInput.value = null\"\r\n (change)=\"importFiles($event.target.files)\"\r\n />\r\n </div>\r\n</form>\r\n<section class=\"mat-typography\" *ngIf=\"selectedMode === 'import'\">\r\n <div *ngIf=\"importHtmlClarifications === ''\">\r\n <h4>{{ 'igo.geo.importExportForm.importClarifications' | translate }}</h4>\r\n <ul>\r\n <li>\r\n {{\r\n 'igo.geo.importExportForm.importSizeMax'\r\n | translate: { size: fileSizeMb }\r\n }}\r\n </li>\r\n <li>\r\n {{ 'igo.geo.importExportForm.importFormatAuthorized' | translate }}\r\n </li>\r\n <li>{{ 'igo.geo.importExportForm.importShpZip' | translate }}</li>\r\n </ul>\r\n </div>\r\n <igo-custom-html\r\n *ngIf=\"importHtmlClarifications !== ''\"\r\n class=\"mat-typography\"\r\n [html]=\"importHtmlClarifications\"\r\n >\r\n </igo-custom-html>\r\n</section>\r\n\r\n<section\r\n class=\"mat-typography\"\r\n *ngIf=\"(exportableLayers$ | async).length === 0 && selectedMode === 'export'\"\r\n>\r\n <h4>{{ 'igo.geo.importExportForm.exportNoLayersExportable' | translate }}</h4>\r\n</section>\r\n\r\n<form\r\n class=\"igo-form\"\r\n [formGroup]=\"form\"\r\n *ngIf=\"(exportableLayers$ | async).length > 0 && selectedMode === 'export'\"\r\n>\r\n <div class=\"igo-input-container\">\r\n <mat-form-field>\r\n <mat-label>{{\r\n 'igo.geo.importExportForm.exportLayerPlaceholder' | translate\r\n }}</mat-label>\r\n <mat-select [(value)]=\"layers\" multiple>\r\n <mat-select-trigger>\r\n {{ layers.length ? getLayerTitleById(layers[0]) : '' }}\r\n <span *ngIf=\"layers.length > 1\" class=\"export-select-trigger\">\r\n (+{{ layers.length - 1 }}\r\n {{\r\n (layers?.length === 2\r\n ? 'igo.geo.importExportForm.other'\r\n : 'igo.geo.importExportForm.others'\r\n ) | translate\r\n }})\r\n </span>\r\n </mat-select-trigger>\r\n <mat-option\r\n *ngFor=\"let layer of exportableLayers$ | async\"\r\n [ngClass]=\"{\r\n 'igo-export-layer-mat-option': layerHasSelectedFeatures(layer)\r\n }\"\r\n [value]=\"layer.id\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <p matListItemTitle>{{ layer.title }}</p>\r\n <p matListItemTitle>\r\n <mat-slide-toggle\r\n *ngIf=\"layerHasSelectedFeatures(layer)\"\r\n (click)=\"onlySelectedClick($event, layer.id)\"\r\n (checked)=\"inLayersIdToExportSelectionOnly(layer)\"\r\n (change)=\"onlySelected($event, layer.id)\"\r\n >\r\n <small>{{\r\n 'igo.geo.importExportForm.exportSelectedFeature' | translate\r\n }}</small>\r\n </mat-slide-toggle>\r\n </p>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"igo-input-container\">\r\n <mat-form-field>\r\n <mat-label>{{\r\n 'igo.geo.importExportForm.exportFormatPlaceholder' | translate\r\n }}</mat-label>\r\n <mat-select formControlName=\"format\">\r\n <ng-container *ngIf=\"(formats$ | async).length !== 0\">\r\n <mat-option\r\n *ngFor=\"let format of formats$ | async | keyvalue\"\r\n [value]=\"format.key\"\r\n >\r\n {{ 'igo.geo.export.format.' + format.value | translate }}\r\n </mat-option>\r\n </ng-container>\r\n <mat-option *ngIf=\"(formats$ | async).length === 0\" disabled=\"true\">\r\n {{ 'igo.geo.export.noFormat.title' | translate }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div\r\n class=\"igo-input-container\"\r\n *ngIf=\"forceNaming && form.value.format !== 'URL'\"\r\n >\r\n <mat-form-field>\r\n <input\r\n matInput\r\n formControlName=\"name\"\r\n placeholder=\"{{\r\n 'igo.geo.importExportForm.exportFileNamePlaceholder' | translate\r\n }}\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n\r\n <div\r\n class=\"igo-input-container\"\r\n *ngIf=\"\r\n form.value.format === 'CSVcomma' || form.value.format === 'CSVsemicolon'\r\n \"\r\n >\r\n <mat-form-field>\r\n <mat-label>{{\r\n 'igo.geo.importExportForm.encodingPlaceholder' | translate\r\n }}</mat-label>\r\n <mat-select formControlName=\"encoding\">\r\n <ng-container *ngIf=\"(encodings$ | async).length !== 0\">\r\n <mat-option\r\n *ngFor=\"let encoding of encodings$ | async | keyvalue\"\r\n [value]=\"encoding.key\"\r\n >\r\n {{ 'igo.geo.export.encoding.' + encoding.value | translate }}\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div\r\n class=\"export-combine-layers mat-typography\"\r\n *ngIf=\"\r\n layers.length > 1 &&\r\n (form.value.format === 'CSVcomma' || form.value.format === 'CSVsemicolon')\r\n \"\r\n >\r\n <mat-slide-toggle\r\n formControlName=\"combineLayers\"\r\n [labelPosition]=\"'before'\"\r\n >\r\n {{ 'igo.geo.importExportForm.exportCombineResults' | translate }}\r\n </mat-slide-toggle>\r\n </div>\r\n\r\n <div\r\n class=\"export-separator mat-typography\"\r\n *ngIf=\"\r\n layers.length > 1 &&\r\n (form.value.format === 'CSVcomma' ||\r\n form.value.format === 'CSVsemicolon') &&\r\n form.value.combineLayers\r\n \"\r\n >\r\n <mat-slide-toggle formControlName=\"separator\" [labelPosition]=\"'before'\">\r\n {{ 'igo.geo.importExportForm.exportSeparator' | translate }}\r\n </mat-slide-toggle>\r\n </div>\r\n\r\n <div\r\n class=\"export-options mat-typography\"\r\n *ngIf=\"form.value.format !== 'URL'\"\r\n >\r\n <mat-slide-toggle\r\n formControlName=\"featureInMapExtent\"\r\n [labelPosition]=\"'before'\"\r\n >\r\n {{ 'igo.geo.importExportForm.exportFeatureInExtent' | translate }}\r\n </mat-slide-toggle>\r\n </div>\r\n\r\n <div class=\"igo-form-button-group\">\r\n <button\r\n mat-raised-button\r\n type=\"button\"\r\n [disabled]=\"!form.valid || (loading$ | async)\"\r\n (click)=\"handleExportFormSubmit(form.value)\"\r\n >\r\n {{\r\n form.value.format !== 'URL'\r\n ? ('igo.geo.importExportForm.exportButton' | translate)\r\n : form.value.layers.length > 1\r\n ? ('igo.geo.importExportForm.exportButtonLinks' | translate)\r\n : ('igo.geo.importExportForm.exportButtonLink' | translate)\r\n }}\r\n </button>\r\n <igo-spinner [shown]=\"loading$ | async\"></igo-spinner>\r\n </div>\r\n\r\n <igo-custom-html\r\n *ngIf=\"exportHtmlClarifications !== ''\"\r\n class=\"mat-typography\"\r\n [html]=\"exportHtmlClarifications\"\r\n >\r\n </igo-custom-html>\r\n</form>\r\n", styles: [":host mat-option.igo-export-layer-mat-option{height:5em;line-height:1em}:host .import-export-toggle{padding:10px;text-align:center}:host .import-export-toggle mat-button-toggle-group{width:100%}:host .import-export-toggle mat-button-toggle-group mat-button-toggle{width:50%}:host h4{padding:0 5px}:host .igo-form{padding:15px 5px}:host .igo-input-container mat-form-field{width:100%}:host .igo-form-button-group{text-align:center;padding-top:10px}:host igo-spinner{position:absolute;padding-left:10px}:host .export-options mat-slide-toggle,:host .export-combine-layers mat-slide-toggle,:host .export-separator mat-slide-toggle{width:100%;padding:10px}:host .export-options mat-slide-toggle ::ng-deep .mdc-form-field,:host .export-combine-layers mat-slide-toggle ::ng-deep .mdc-form-field,:host .export-separator mat-slide-toggle ::ng-deep .mdc-form-field{width:100%}:host .export-options mat-slide-toggle ::ng-deep .mdc-label,:host .export-combine-layers mat-slide-toggle ::ng-deep .mdc-label,:host .export-separator mat-slide-toggle ::ng-deep .mdc-label{margin-left:0;width:calc(100% - 60px)}:host .export-select-trigger{opacity:.75;font-size:.75em}\n"] }]
1331
+ }], function () { return [{ type: i1.ImportService }, { type: i2.ExportService }, { type: i3.LanguageService }, { type: i3.MessageService }, { type: i4.StyleListService }, { type: i5.StyleService }, { type: i6.UntypedFormBuilder }, { type: i3.ConfigService }, { type: i0.ChangeDetectorRef }, { type: i3.StorageService }, { type: i7.DownloadService }, { type: i8.LayerService }, { type: i9.ConfirmDialogService }]; }, { selectFirstProj: [{
1332
+ type: Input
1333
+ }], map: [{
1334
+ type: Input
1335
+ }], contextUri: [{
1336
+ type: Input
1337
+ }], projectionsLimitations: [{
1338
+ type: Input
1339
+ }], store: [{
1340
+ type: Input
1341
+ }], selectedMode: [{
1342
+ type: Input
1343
+ }], selectMode: [{
1344
+ type: Output
1345
+ }], exportOptions$: [{
1346
+ type: Input
1347
+ }], exportOptionsChange: [{
1348
+ type: Output
1349
+ }] }); })();
1350
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LWV4cG9ydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9pbXBvcnQtZXhwb3J0L2ltcG9ydC1leHBvcnQvaW1wb3J0LWV4cG9ydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9pbXBvcnQtZXhwb3J0L2ltcG9ydC1leHBvcnQvaW1wb3J0LWV4cG9ydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFHTCxNQUFNLEVBQ04sWUFBWSxFQUNaLGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBRUwsa0JBQWtCLEVBQ2xCLFVBQVUsRUFDWCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBZ0IsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXJELE9BQU8sRUFDTCxjQUFjLEVBQ2QsZUFBZSxFQUNmLGFBQWEsRUFDYixjQUFjLEVBQ2YsTUFBTSxZQUFZLENBQUM7QUFDcEIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUd0QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFFM0YsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBR3JFLE9BQU8sT0FBTyxNQUFNLGVBQWUsQ0FBQztBQUNwQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFM0MsT0FBTyxFQUNMLHFCQUFxQixFQUNyQix1QkFBdUIsRUFDeEIsTUFBTSx3QkFBd0IsQ0FBQztBQUVoQyxPQUFPLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixD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RUFzQlU7WUFFVixnRkFLVTs7WUFFViw0RUE2S087OztZQW5SSCxlQUFzQjtZQUF0Qix3Q0FBc0I7WUFHSCxlQUFrQjtZQUFsQixnQ0FBa0I7WUFDbkMsZUFDRjtZQURFLGdHQUNGO1lBQ21CLGVBQWtCO1lBQWxCLGdDQUFrQjtZQUNuQyxlQUNGO1lBREUsaUdBQ0Y7WUFPRCxlQUErQjtZQUEvQixvREFBK0I7WUF3REQsZUFBK0I7WUFBL0Isb0RBQStCO1lBMEI3RCxlQUEyRTtZQUEzRSxrSEFBMkU7WUFRM0UsZUFBeUU7WUFBekUsZ0hBQXlFOzs7dUZEckMvRCxxQkFBcUI7Y0FMakMsU0FBUzsyQkFDRSxtQkFBbUI7dWFBNkNwQixlQUFlO2tCQUF2QixLQUFLO1lBRUcsR0FBRztrQkFBWCxLQUFLO1lBRUcsVUFBVTtrQkFBbEIsS0FBSztZQUlGLHNCQUFzQjtrQkFEekIsS0FBSztZQVlHLEtBQUs7a0JBQWIsS0FBSztZQUVHLFlBQVk7a0JBQXBCLEtBQUs7WUFFSSxVQUFVO2tCQUFuQixNQUFNO1lBRUUsY0FBYztrQkFBdEIsS0FBSztZQUlJLG1CQUFtQjtrQkFBNUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIElucHV0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBDaGFuZ2VEZXRlY3RvclJlZlxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIFVudHlwZWRGb3JtR3JvdXAsXHJcbiAgVW50eXBlZEZvcm1CdWlsZGVyLFxyXG4gIFZhbGlkYXRvcnNcclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQge1xyXG4gIE1lc3NhZ2VTZXJ2aWNlLFxyXG4gIExhbmd1YWdlU2VydmljZSxcclxuICBDb25maWdTZXJ2aWNlLFxyXG4gIFN0b3JhZ2VTZXJ2aWNlXHJcbn0gZnJvbSAnQGlnbzIvY29yZSc7XHJcbmltcG9ydCB7IHN0ckVudW0gfSBmcm9tICdAaWdvMi91dGlscyc7XHJcblxyXG5pbXBvcnQgeyBGZWF0dXJlIH0gZnJvbSAnLi4vLi4vZmVhdHVyZS9zaGFyZWQvZmVhdHVyZS5pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgSWdvTWFwIH0gZnJvbSAnLi4vLi4vbWFwL3NoYXJlZC9tYXAnO1xyXG5pbXBvcnQgeyBDbHVzdGVyRGF0YVNvdXJjZSB9IGZyb20gJy4uLy4uL2RhdGFzb3VyY2Uvc2hhcmVkL2RhdGFzb3VyY2VzL2NsdXN0ZXItZGF0YXNvdXJjZSc7XHJcbmltcG9ydCB7IExheWVyIH0gZnJvbSAnLi4vLi4vbGF5ZXIvc2hhcmVkL2xheWVycy9sYXllcic7XHJcbmltcG9ydCB7IFZlY3RvckxheWVyIH0gZnJvbSAnLi4vLi4vbGF5ZXIvc2hhcmVkL2xheWVycy92ZWN0b3ItbGF5ZXInO1xyXG5pbXBvcnQgeyBBbnlMYXllciB9IGZyb20gJy4uLy4uL2xheWVyL3NoYXJlZC9sYXllcnMvYW55LWxheWVyJztcclxuaW1wb3J0IHsgRGF0YVNvdXJjZU9wdGlvbnMgfSBmcm9tICcuLi8uLi9kYXRhc291cmNlL3NoYXJlZC9kYXRhc291cmNlcy9kYXRhc291cmNlLmludGVyZmFjZSc7XHJcbmltcG9ydCBvbFBvaW50IGZyb20gJ29sL2dlb20vUG9pbnQnO1xyXG5pbXBvcnQgeyBjaXJjdWxhciB9IGZyb20gJ29sL2dlb20vUG9seWdvbic7XHJcblxyXG5pbXBvcnQge1xyXG4gIGhhbmRsZUZpbGVFeHBvcnRFcnJvcixcclxuICBoYW5kbGVGaWxlRXhwb3J0U3VjY2Vzc1xyXG59IGZyb20gJy4uL3NoYXJlZC9leHBvcnQudXRpbHMnO1xyXG5pbXBvcnQgeyBFeHBvcnRPcHRpb25zIH0gZnJvbSAnLi4vc2hhcmVkL2V4cG9ydC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBFeHBvcnRGb3JtYXQsIEVuY29kaW5nRm9ybWF0IH0gZnJvbSAnLi4vc2hhcmVkL2V4cG9ydC50eXBlJztcclxuaW1wb3J0IHsgRXhwb3J0U2VydmljZSB9IGZyb20gJy4uL3NoYXJlZC9leHBvcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IEltcG9ydFNlcnZpY2UgfSBmcm9tICcuLi9zaGFyZWQvaW1wb3J0LnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIGhhbmRsZUZpbGVJbXBvcnRTdWNjZXNzLFxyXG4gIGhhbmRsZUZpbGVJbXBvcnRFcnJvclxyXG59IGZyb20gJy4uL3NoYXJlZC9pbXBvcnQudXRpbHMnO1xyXG5pbXBvcnQgeyBTdHlsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zdHlsZS9zdHlsZS1zZXJ2aWNlL3N0eWxlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdHlsZUxpc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc3R5bGUvc3R5bGUtbGlzdC9zdHlsZS1saXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBza2lwV2hpbGUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IENvbmZpcm1EaWFsb2dTZXJ2aWNlLCBFbnRpdHlSZWNvcmQsIFdvcmtzcGFjZSB9IGZyb20gJ0BpZ28yL2NvbW1vbic7XHJcbmltcG9ydCB0eXBlIHsgV29ya3NwYWNlU3RvcmUgfSBmcm9tICdAaWdvMi9jb21tb24nO1xyXG5pbXBvcnQgeyBXZnNXb3Jrc3BhY2UgfSBmcm9tICcuLi8uLi93b3Jrc3BhY2Uvc2hhcmVkL3dmcy13b3Jrc3BhY2UnO1xyXG5pbXBvcnQgeyBFZGl0aW9uV29ya3NwYWNlIH0gZnJvbSAnLi4vLi4vd29ya3NwYWNlL3NoYXJlZC9lZGl0aW9uLXdvcmtzcGFjZSc7XHJcbmltcG9ydCB7IEZlYXR1cmVXb3Jrc3BhY2UgfSBmcm9tICcuLi8uLi93b3Jrc3BhY2Uvc2hhcmVkL2ZlYXR1cmUtd29ya3NwYWNlJztcclxuaW1wb3J0IHsgTWF0U2xpZGVUb2dnbGVDaGFuZ2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbGlkZS10b2dnbGUnO1xyXG5pbXBvcnQgeyBJbnB1dFByb2plY3Rpb25zLCBQcm9qZWN0aW9uc0xpbWl0YXRpb25zT3B0aW9ucyB9IGZyb20gJy4uLy4uL21hcC8nO1xyXG5pbXBvcnQgeyBEb3dubG9hZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9kb3dubG9hZC9zaGFyZWQvZG93bmxvYWQuc2VydmljZSc7XHJcbmltcG9ydCB7IGNvbXB1dGVQcm9qZWN0aW9uc0NvbnN0cmFpbnRzIH0gZnJvbSAnLi4vLi4vbWFwL3NoYXJlZCc7XHJcblxyXG5pbXBvcnQgb2xWZWN0b3JTb3VyY2UgZnJvbSAnb2wvc291cmNlL1ZlY3Rvcic7XHJcbmltcG9ydCBvbENsdXN0ZXJTb3VyY2UgZnJvbSAnb2wvc291cmNlL0NsdXN0ZXInO1xyXG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgT2xHZW9tZXRyeSB9IGZyb20gJ29sL2dlb20vR2VvbWV0cnknO1xyXG5pbXBvcnQgeyBMYXllclNlcnZpY2UgfSBmcm9tICcuLi8uLi9sYXllci9zaGFyZWQvbGF5ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEltcG9ydEV4cG9ydFNlcnZpY2VPcHRpb25zIH0gZnJvbSAnLi4vc2hhcmVkL2ltcG9ydC5pbnRlcmZhY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpZ28taW1wb3J0LWV4cG9ydCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2ltcG9ydC1leHBvcnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2ltcG9ydC1leHBvcnQuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgSW1wb3J0RXhwb3J0Q29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBPbkluaXQge1xyXG4gIHB1YmxpYyBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xyXG4gIHB1YmxpYyBpbXBvcnRGb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xyXG4gIHB1YmxpYyBmb3JtYXRzJCA9IG5ldyBCZWhhdmlvclN1YmplY3QodW5kZWZpbmVkKTtcclxuICBwdWJsaWMgZW5jb2RpbmdzJCA9IG5ldyBCZWhhdmlvclN1YmplY3QodW5kZWZpbmVkKTtcclxuICBwdWJsaWMgZXhwb3J0YWJsZUxheWVycyQ6IEJlaGF2aW9yU3ViamVjdDxBbnlMYXllcltdPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoXHJcbiAgICBbXVxyXG4gICk7XHJcbiAgcHVibGljIGxvYWRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XHJcbiAgcHVibGljIGZvcmNlTmFtaW5nID0gZmFsc2U7XHJcbiAgcHVibGljIGNvbnRyb2xGb3JtYXQgPSAnZm9ybWF0JztcclxuXHJcbiAgcHJpdmF0ZSBsYXllcnMkJDogU3Vic2NyaXB0aW9uO1xyXG4gIHByaXZhdGUgZXhwb3J0YWJsZUxheWVycyQkOiBTdWJzY3JpcHRpb247XHJcbiAgcHJpdmF0ZSBmb3JtYXRzJCQ6IFN1YnNjcmlwdGlvbjtcclxuICBwcml2YXRlIGVuY29kaW5ncyQkOiBTdWJzY3JpcHRpb247XHJcbiAgcHJpdmF0ZSBmb3JtTGF5ZXIkJDogU3Vic2NyaXB0aW9uO1xyXG4gIHByaXZhdGUgZXhwb3J0T3B0aW9ucyQkOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIHB1YmxpYyBpbXBvcnRIdG1sQ2xhcmlmaWNhdGlvbnM6IHN0cmluZztcclxuICBwdWJsaWMgZXhwb3J0SHRtbENsYXJpZmljYXRpb25zOiBzdHJpbmc7XHJcblxyXG4gIHByaXZhdGUgZXNwZ0NvZGVSZWdleCA9IG5ldyBSZWdFeHAoJ15cXFxcZHs0LDZ9Jyk7XHJcbiAgcHJpdmF0ZSBjbGllbnRTaWRlRmlsZVNpemVNYXg6IG51bWJlcjtcclxuICBwdWJsaWMgZmlsZVNpemVNYjogbnVtYmVyO1xyXG5cclxuICBwdWJsaWMgcHJvamVjdGlvbnMkOiBCZWhhdmlvclN1YmplY3Q8SW5wdXRQcm9qZWN0aW9uc1tdPiA9XHJcbiAgICBuZXcgQmVoYXZpb3JTdWJqZWN0KFtdKTtcclxuICBwcml2YXRlIHByb2plY3Rpb25zQ29uc3RyYWludHM6IFByb2plY3Rpb25zTGltaXRhdGlvbnNPcHRpb25zO1xyXG5cclxuICBwdWJsaWMgcG9wdXBDaGVja2VkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgcHJldmlvdXNMYXllclNwZWNzJDogQmVoYXZpb3JTdWJqZWN0PFxyXG4gICAge1xyXG4gICAgICBpZDogc3RyaW5nO1xyXG4gICAgICB2aXNpYmxlOiBib29sZWFuO1xyXG4gICAgICBvcGFjaXR5OiBudW1iZXI7XHJcbiAgICAgIHF1ZXJ5YWJsZTogYm9vbGVhbjtcclxuICAgIH1bXVxyXG4gID4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHVuZGVmaW5lZCk7XHJcblxyXG4gIEBJbnB1dCgpIHNlbGVjdEZpcnN0UHJvajogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKSBtYXA6IElnb01hcDtcclxuXHJcbiAgQElucHV0KCkgY29udGV4dFVyaTogc3RyaW5nO1xyXG5cclxuICBwcml2YXRlIF9wcm9qZWN0aW9uc0xpbWl0YXRpb25zOiBQcm9qZWN0aW9uc0xpbWl0YXRpb25zT3B0aW9ucyA9IHt9O1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHByb2plY3Rpb25zTGltaXRhdGlvbnModmFsdWU6IFByb2plY3Rpb25zTGltaXRhdGlvbnNPcHRpb25zKSB7XHJcbiAgICB0aGlzLl9wcm9qZWN0aW9uc0xpbWl0YXRpb25zID0gdmFsdWU7XHJcbiAgICB0aGlzLmNvbXB1dGVQcm9qZWN0aW9ucygpO1xyXG4gIH1cclxuICBnZXQgcHJvamVjdGlvbnNMaW1pdGF0aW9ucygpOiBQcm9qZWN0aW9uc0xpbWl0YXRpb25zT3B0aW9ucyB7XHJcbiAgICByZXR1cm4gdGhpcy5fcHJvamVjdGlvbnNMaW1pdGF0aW9ucyB8fCB7fTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3JlIHRoYXQgaG9sZHMgdGhlIGF2YWlsYWJsZSB3b3Jrc3BhY2VzLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHN0b3JlOiBXb3Jrc3BhY2VTdG9yZTtcclxuXHJcbiAgQElucHV0KCkgc2VsZWN0ZWRNb2RlID0gJ2ltcG9ydCc7XHJcblxyXG4gIEBPdXRwdXQoKSBzZWxlY3RNb2RlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcblxyXG4gIEBJbnB1dCgpIGV4cG9ydE9wdGlvbnMkOiBCZWhhdmlvclN1YmplY3Q8RXhwb3J0T3B0aW9ucz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFxyXG4gICAgdW5kZWZpbmVkXHJcbiAgKTtcclxuXHJcbiAgQE91dHB1dCgpIGV4cG9ydE9wdGlvbnNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEV4cG9ydE9wdGlvbnM+KCk7XHJcblxyXG4gIGdldCBsYXllcnMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtLmdldCgnbGF5ZXJzJykudmFsdWU7XHJcbiAgfVxyXG4gIHNldCBsYXllcnModmFsdWUpIHtcclxuICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgbGF5ZXJzOiB2YWx1ZSB9KTtcclxuICB9XHJcblxyXG4gIGdldCBpbnB1dFByb2ooKSB7XHJcbiAgICByZXR1cm4gdGhpcy5pbXBvcnRGb3JtLmdldCgnaW5wdXRQcm9qJykudmFsdWU7XHJcbiAgfVxyXG4gIHNldCBpbnB1dFByb2oodmFsdWUpIHtcclxuICAgIHRoaXMuaW1wb3J0Rm9ybS5wYXRjaFZhbHVlKHsgaW5wdXRQcm9qOiB2YWx1ZSB9KTtcclxuICB9XHJcblxyXG4gIGdldCBwb3B1cEFsbG93ZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAodGhpcy5zdG9yYWdlU2VydmljZS5nZXQoJ2ltcG9ydEV4cG9ydFBvcHVwQWxsb3dlZCcpIGFzIGJvb2xlYW4pIHx8IGZhbHNlXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc2V0IHBvcHVwQWxsb3dlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXQoJ2ltcG9ydEV4cG9ydFBvcHVwQWxsb3dlZCcsIHZhbHVlKTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBpbXBvcnRTZXJ2aWNlOiBJbXBvcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBleHBvcnRTZXJ2aWNlOiBFeHBvcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBsYW5ndWFnZVNlcnZpY2U6IExhbmd1YWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzdHlsZUxpc3RTZXJ2aWNlOiBTdHlsZUxpc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzdHlsZVNlcnZpY2U6IFN0eWxlU2VydmljZSxcclxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgY29uZmlnOiBDb25maWdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIHN0b3JhZ2VTZXJ2aWNlOiBTdG9yYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgZG93bmxvYWRTZXJ2aWNlOiBEb3dubG9hZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGxheWVyU2VydmljZTogTGF5ZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb25maXJtRGlhbG9nU2VydmljZTogQ29uZmlybURpYWxvZ1NlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMubG9hZENvbmZpZygpO1xyXG4gICAgdGhpcy5idWlsZEZvcm0oKTtcclxuICAgIHRoaXMuY29tcHV0ZVByb2plY3Rpb25zKCk7XHJcbiAgICB0aGlzLmltcG9ydEh0bWxDbGFyaWZpY2F0aW9ucyA9IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KFxyXG4gICAgICAnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmltcG9ydEh0bWxDbGFyaWZpY2F0aW9ucydcclxuICAgICk7XHJcbiAgICB0aGlzLmV4cG9ydEh0bWxDbGFyaWZpY2F0aW9ucyA9IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KFxyXG4gICAgICAnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmV4cG9ydEh0bWxDbGFyaWZpY2F0aW9ucydcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMubGF5ZXJzJCQgPSB0aGlzLm1hcC5sYXllcnMkLnN1YnNjcmliZSgobGF5ZXJzKSA9PiB7XHJcbiAgICAgIHRoaXMuZXhwb3J0YWJsZUxheWVycyQubmV4dChcclxuICAgICAgICBsYXllcnMuZmlsdGVyKChsYXllcjogTGF5ZXIpID0+IHtcclxuICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIChsYXllciBpbnN0YW5jZW9mIFZlY3RvckxheWVyICYmIGxheWVyLmV4cG9ydGFibGUgPT09IHRydWUpIHx8XHJcbiAgICAgICAgICAgIChsYXllci5kYXRhU291cmNlLm9wdGlvbnMuZG93bmxvYWQgJiZcclxuICAgICAgICAgICAgICBsYXllci5kYXRhU291cmNlLm9wdGlvbnMuZG93bmxvYWQudXJsKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9KSBhcyBBbnlMYXllcltdXHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICAgIGNvbnN0IGNvbmZpZ0ZpbGVTaXplTWIgPSB0aGlzLmNvbmZpZy5nZXRDb25maWcoXHJcbiAgICAgICdpbXBvcnRFeHBvcnQuY2xpZW50U2lkZUZpbGVTaXplTWF4TWInXHJcbiAgICApO1xyXG4gICAgdGhpcy5jbGllbnRTaWRlRmlsZVNpemVNYXggPVxyXG4gICAgICAoY29uZmlnRmlsZVNpemVNYiA/IGNvbmZpZ0ZpbGVTaXplTWIgOiAzMCkgKiBNYXRoLnBvdygxMDI0LCAyKTtcclxuICAgIHRoaXMuZmlsZVNpemVNYiA9IHRoaXMuY2xpZW50U2lkZUZpbGVTaXplTWF4IC8gTWF0aC5wb3coMTAyNCwgMik7XHJcblxyXG4gICAgdGhpcy5leHBvcnRPcHRpb25zJCQgPSB0aGlzLmV4cG9ydE9wdGlvbnMkXHJcbiAgICAgIC5waXBlKHNraXBXaGlsZSgoZXhwb3J0T3B0aW9ucykgPT4gIWV4cG9ydE9wdGlvbnMpKVxyXG4gICAgICAuc3Vic2NyaWJlKChleHBvcnRPcHRpb25zKSA9PiB7XHJcbiAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoZXhwb3J0T3B0aW9ucywgeyBlbWl0RXZlbnQ6IHRydWUgfSk7XHJcbiAgICAgICAgaWYgKGV4cG9ydE9wdGlvbnMubGF5ZXJzKSB7XHJcbiAgICAgICAgICB0aGlzLmNvbXB1dGVGb3JtYXRzKFxyXG4gICAgICAgICAgICBleHBvcnRPcHRpb25zLmxheWVycy5tYXAoKGwpID0+IHRoaXMubWFwLmdldExheWVyQnlJZChsKSlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIHRoaXMuZm9ybUxheWVyJCQgPSB0aGlzLmZvcm1cclxuICAgICAgLmdldCgnZm9ybWF0JylcclxuICAgICAgLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKGZvcm1hdCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IG9ncmVGb3JtYXRzID0gT2JqZWN0LmtleXMoRXhwb3J0U2VydmljZS5vZ3JlRm9ybWF0cyk7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgIXRoaXMucG9wdXBDaGVja2VkICYmXHJcbiAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdsYXllcnMnKS52YWx1ZT8ubGVuZ3RoID4gMSAmJlxyXG4gICAgICAgICAgKG9ncmVGb3JtYXRzLmluZGV4T2YoZm9ybWF0KSA+PSAwIHx8IGZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LlVSTClcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGlmICghdGhpcy5oYW5kbGVQb3B1cCh0cnVlKSkge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IGZvcm1hdDogdW5kZWZpbmVkIH0sIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZm9ybUxheWVyJCQgPSB0aGlzLmZvcm1cclxuICAgICAgLmdldCgnbGF5ZXJzJylcclxuICAgICAgLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKGxheWVyc0lkKSA9PiB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVQcmV2aW91c0xheWVyU3BlY3MoKTtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZExheWVycyA9XHJcbiAgICAgICAgICBsYXllcnNJZCBpbnN0YW5jZW9mIEFycmF5ID8gbGF5ZXJzSWQgOiBbbGF5ZXJzSWRdO1xyXG4gICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgbGF5ZXJzOiBzZWxlY3RlZExheWVycyB9LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgY29uc3QgbGF5ZXJzID0gc2VsZWN0ZWRMYXllcnMubWFwKChsKSA9PiB0aGlzLm1hcC5nZXRMYXllckJ5SWQobCkpO1xyXG4gICAgICAgIHRoaXMuY29tcHV0ZUZvcm1hdHMobGF5ZXJzKTtcclxuXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgT2JqZWN0LmtleXModGhpcy5mb3JtYXRzJC52YWx1ZSkuaW5kZXhPZih0aGlzLmZvcm0udmFsdWUuZm9ybWF0KSA9PT1cclxuICAgICAgICAgIC0xXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IGZvcm1hdDogdW5kZWZpbmVkIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sb2FkaW5nJC5uZXh0KHRydWUpO1xyXG4gICAgICAgIGNvbnN0IHByZXZpb3VzU3BlY3M6IHtcclxuICAgICAgICAgIGlkOiBzdHJpbmc7XHJcbiAgICAgICAgICB2aXNpYmxlOiBib29sZWFuO1xyXG4gICAgICAgICAgb3BhY2l0eTogbnVtYmVyO1xyXG4gICAgICAgICAgcXVlcnlhYmxlOiBib29sZWFuO1xyXG4gICAgICAgIH1bXSA9IFtdO1xyXG4gICAgICAgIGxheWVycy5mb3JFYWNoKChsYXllcikgPT4ge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBsYXllciBpbnN0YW5jZW9mIFZlY3RvckxheWVyICYmXHJcbiAgICAgICAgICAgIGxheWVyLmRhdGFTb3VyY2Uub2wuZ2V0RmVhdHVyZXMoKS5sZW5ndGggPT09IDBcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBwcmV2aW91c1NwZWNzLnB1c2goe1xyXG4gICAgICAgICAgICAgIGlkOiBsYXllci5pZCxcclxuICAgICAgICAgICAgICB2aXNpYmxlOiBsYXllci52aXNpYmxlLFxyXG4gICAgICAgICAgICAgIG9wYWNpdHk6IGxheWVyLm9wYWNpdHksXHJcbiAgICAgICAgICAgICAgcXVlcnlhYmxlOiAobGF5ZXIgYXMgYW55KS5xdWVyeWFibGVcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGxheWVyLm9wYWNpdHkgPSAwO1xyXG4gICAgICAgICAgICBsYXllci52aXNpYmxlID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5wcmV2aW91c0xheWVyU3BlY3MkLm5leHQocHJldmlvdXNTcGVjcyk7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmckLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIH0sIDUwMCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZm9ybWF0cyQkID0gdGhpcy5mb3JtYXRzJFxyXG4gICAgICAucGlwZShza2lwV2hpbGUoKGZvcm1hdHMpID0+ICFmb3JtYXRzKSlcclxuICAgICAgLnN1YnNjcmliZSgoZm9ybWF0cykgPT4ge1xyXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhmb3JtYXRzKS5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgZm9ybWF0OiBmb3JtYXRzW09iamVjdC5rZXlzKGZvcm1hdHMpWzBdXSB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZW5jb2RpbmdzJCQgPSB0aGlzLmVuY29kaW5ncyRcclxuICAgICAgLnBpcGUoc2tpcFdoaWxlKChlbmNvZGluZ3MpID0+ICFlbmNvZGluZ3MpKVxyXG4gICAgICAuc3Vic2NyaWJlKChlbmNvZGluZ3MpID0+IHtcclxuICAgICAgICBpZiAoT2JqZWN0LmtleXMoZW5jb2RpbmdzKS5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHtcclxuICAgICAgICAgICAgZW5jb2Rpbmc6IGVuY29kaW5nc1tPYmplY3Qua2V5cyhlbmNvZGluZ3MpWzBdXVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLmV4cG9ydGFibGVMYXllcnMkJCA9IHRoaXMuZXhwb3J0YWJsZUxheWVycyRcclxuICAgICAgLnBpcGUoc2tpcFdoaWxlKChsYXllcnMpID0+ICFsYXllcnMpKVxyXG4gICAgICAuc3Vic2NyaWJlKChsYXllcnMpID0+IHtcclxuICAgICAgICBpZiAobGF5ZXJzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBsYXllcnM6IGxheWVyc1swXS5pZCB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZm9ybS5jb250cm9sc1t0aGlzLmNvbnRyb2xGb3JtYXRdLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKGZvcm1hdCkgPT4ge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuQ1NWY29tbWEgfHxcclxuICAgICAgICBmb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5DU1ZzZW1pY29sb25cclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBlbmNvZGluZzogRW5jb2RpbmdGb3JtYXQuTEFUSU4xIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgZW5jb2Rpbmc6IEVuY29kaW5nRm9ybWF0LlVURjggfSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5zZWxlY3RGaXJzdFByb2opIHtcclxuICAgICAgaWYgKHRoaXMucHJvamVjdGlvbnMkLnZhbHVlLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHRoaXMuaW1wb3J0Rm9ybS5wYXRjaFZhbHVlKHtcclxuICAgICAgICAgIGlucHV0UHJvajoge1xyXG4gICAgICAgICAgICB0cmFuc2xhdGVLZXk6ICduYWQ4MycsXHJcbiAgICAgICAgICAgIGFsaWFzOiAnTkFEODMnLFxyXG4gICAgICAgICAgICBjb2RlOiAnRVBTRzo0MzI2JyxcclxuICAgICAgICAgICAgem9uZTogJydcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmltcG9ydEZvcm0ucGF0Y2hWYWx1ZSh7IGlucHV0UHJvajogdGhpcy5wcm9qZWN0aW9ucyQudmFsdWVbMF0gfSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaW1wb3J0Rm9ybS5wYXRjaFZhbHVlKHsgaW5wdXRQcm9qOiB1bmRlZmluZWQgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbXB1dGVQcm9qZWN0aW9ucygpIHtcclxuICAgIHRoaXMucHJvamVjdGlvbnNDb25zdHJhaW50cyA9IGNvbXB1dGVQcm9qZWN0aW9uc0NvbnN0cmFpbnRzKFxyXG4gICAgICB0aGlzLnByb2plY3Rpb25zTGltaXRhdGlvbnNcclxuICAgICk7XHJcbiAgICBjb25zdCBwcm9qZWN0aW9uczogSW5wdXRQcm9qZWN0aW9uc1tdID0gW107XHJcblxyXG4gICAgaWYgKHRoaXMucHJvamVjdGlvbnNDb25zdHJhaW50cy5uYWQ4Mykge1xyXG4gICAgICBwcm9qZWN0aW9ucy5wdXNoKHtcclxuICAgICAgICB0cmFuc2xhdGVLZXk6ICduYWQ4MycsXHJcbiAgICAgICAgYWxpYXM6ICdOQUQ4MycsXHJcbiAgICAgICAgY29kZTogJ0VQU0c6NDI2OScsXHJcbiAgICAgICAgem9uZTogJydcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5wcm9qZWN0aW9uc0NvbnN0cmFpbnRzLndnczg0KSB7XHJcbiAgICAgIHByb2plY3Rpb25zLnB1c2goe1xyXG4gICAgICAgIHRyYW5zbGF0ZUtleTogJ3dnczg0JyxcclxuICAgICAgICBhbGlhczogJ1dHUzg0JyxcclxuICAgICAgICBjb2RlOiAnRVBTRzo0MzI2JyxcclxuICAgICAgICB6b25lOiAnJ1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMud2ViTWVyY2F0b3IpIHtcclxuICAgICAgcHJvamVjdGlvbnMucHVzaCh7XHJcbiAgICAgICAgdHJhbnNsYXRlS2V5OiAnd2ViTWVyY2F0b3InLFxyXG4gICAgICAgIGFsaWFzOiAnV2ViIE1lcmNhdG9yJyxcclxuICAgICAgICBjb2RlOiAnRVBTRzozODU3JyxcclxuICAgICAgICB6b25lOiAnJ1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5wcm9qZWN0aW9uc0NvbnN0cmFpbnRzLm10bSkge1xyXG4gICAgICAvLyBhbGwgbXRtIHpvbmVzXHJcbiAgICAgIGNvbnN0IG1pblpvbmUgPSB0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMubXRtWm9uZS5taW5ab25lO1xyXG4gICAgICBjb25zdCBtYXhab25lID0gdGhpcy5wcm9qZWN0aW9uc0NvbnN0cmFpbnRzLm10bVpvbmUubWF4Wm9uZTtcclxuXHJcbiAgICAgIGZvciAobGV0IG10bVpvbmUgPSBtaW5ab25lOyBtdG1ab25lIDw9IG1heFpvbmU7IG10bVpvbmUrKykge1xyXG4gICAgICAgIGNvbnN0IGNvZGUgPVxyXG4gICAgICAgICAgbXRtWm9uZSA8IDEwID8gYEVQU0c6MzIxOCR7bXRtWm9uZX1gIDogYEVQU0c6MzIxJHs4MCArIG10bVpvbmV9YDtcclxuICAgICAgICBwcm9qZWN0aW9ucy5wdXNoKHtcclxuICAgICAgICAgIHRyYW5zbGF0ZUtleTogJ210bScsXHJcbiAgICAgICAgICBhbGlhczogYE1UTSAke210bVpvbmV9YCxcclxuICAgICAgICAgIGNvZGUsXHJcbiAgICAgICAgICB6b25lOiBgJHttdG1ab25lfWBcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMudXRtKSB7XHJcbiAgICAgIC8vIGFsbCB1dG0gem9uZXNcclxuICAgICAgY29uc3QgbWluWm9uZSA9IHRoaXMucHJvamVjdGlvbnNDb25zdHJhaW50cy51dG1ab25lLm1pblpvbmU7XHJcbiAgICAgIGNvbnN0IG1heFpvbmUgPSB0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMudXRtWm9uZS5tYXhab25lO1xyXG5cclxuICAgICAgZm9yIChsZXQgdXRtWm9uZSA9IG1pblpvbmU7IHV0bVpvbmUgPD0gbWF4Wm9uZTsgdXRtWm9uZSsrKSB7XHJcbiAgICAgICAgY29uc3QgY29kZSA9XHJcbiAgICAgICAgICB1dG1ab25lIDwgMTAgPyBgRVBTRzozMjYwJHt1dG1ab25lfWAgOiBgRVBTRzozMjYke3V0bVpvbmV9YDtcclxuICAgICAgICBwcm9qZWN0aW9ucy5wdXNoKHtcclxuICAgICAgICAgIHRyYW5zbGF0ZUtleTogJ3V0bScsXHJcbiAgICAgICAgICBhbGlhczogYFVUTSAke3V0bVpvbmV9YCxcclxuICAgICAgICAgIGNvZGUsXHJcbiAgICAgICAgICB6b25lOiBgJHt1dG1ab25lfWBcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBjb25maWdQcm9qZWN0aW9uID0gW107XHJcbiAgICBpZiAodGhpcy5wcm9qZWN0aW9uc0NvbnN0cmFpbnRzLnByb2pGcm9tQ29uZmlnKSB7XHJcbiAgICAgIGNvbmZpZ1Byb2plY3Rpb24gPSB0aGlzLmNvbmZpZy5nZXRDb25maWcoJ3Byb2plY3Rpb25zJykgfHwgW107XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wcm9qZWN0aW9ucyQubmV4dChjb25maWdQcm9qZWN0aW9uLmNvbmNhdChwcm9qZWN0aW9ucykpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRXb3Jrc3BhY2VCeUxheWVySWQoaWQ6IHN0cmluZyk6IFdvcmtzcGFjZSB7XHJcbiAgICBjb25zdCB3a3NGcm9tTGF5ZXJJZCA9IHRoaXMuc3RvcmVcclxuICAgICAgLmFsbCgpXHJcbiAgICAgIC5maW5kKFxyXG4gICAgICAgICh3b3Jrc3BhY2UpID0+XHJcbiAgICAgICAgICAod29ya3NwYWNlIGFzIFdmc1dvcmtzcGFjZSB8IEZlYXR1cmVXb3Jrc3BhY2UgfCBFZGl0aW9uV29ya3NwYWNlKVxyXG4gICAgICAgICAgICAubGF5ZXIuaWQgPT09IGlkXHJcbiAgICAgICk7XHJcbiAgICBpZiAod2tzRnJvbUxheWVySWQpIHtcclxuICAgICAgcmV0dXJuIHdrc0Zyb21MYXllcklkO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldExheWVyVGl0bGVCeUlkKGlkKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLm1hcC5nZXRMYXllckJ5SWQoaWQpPy50aXRsZTtcclxuICB9XHJcblxyXG4gIGxheWVySGFzU2VsZWN0ZWRGZWF0dXJlcyhsYXllcjogTGF5ZXIpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHdrc0Zyb21MYXllciA9IHRoaXMuZ2V0V29ya3NwYWNlQnlMYXllcklkKGxheWVyLmlkKTtcclxuICAgIGlmICh3a3NGcm9tTGF5ZXIpIHtcclxuICAgICAgY29uc3QgcmVjcyA9IHdrc0Zyb21MYXllci5lbnRpdHlTdG9yZS5zdGF0ZVZpZXcuZmlyc3RCeShcclxuICAgICAgICAocmVjb3JkOiBFbnRpdHlSZWNvcmQ8RmVhdHVyZT4pID0+IHtcclxuICAgICAgICAgIHJldHVybiByZWNvcmQuc3RhdGUuc2VsZWN0ZWQgPT09IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gcmVjcyA/IHRydWUgOiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbmx5U2VsZWN0ZWQoZXZlbnQ6IE1hdFNsaWRlVG9nZ2xlQ2hhbmdlLCBpZDogc3RyaW5nKSB7XHJcbiAgICBsZXQgbGF5ZXJzV2l0aFNlbGVjdGlvbiA9IHRoaXMuZm9ybS52YWx1ZS5sYXllcnNXaXRoU2VsZWN0aW9uO1xyXG4gICAgaWYgKGV2ZW50LmNoZWNrZWQpIHtcclxuICAgICAgbGF5ZXJzV2l0aFNlbGVjdGlvbi5wdXNoKGlkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxheWVyc1dpdGhTZWxlY3Rpb24gPSBsYXllcnNXaXRoU2VsZWN0aW9uLmZpbHRlcihcclxuICAgICAgICAobGF5ZXJJZCkgPT4gbGF5ZXJJZCAhPT0gaWRcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgbGF5ZXJzV2l0aFNlbGVjdGlvbiB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbmx5U2VsZWN0ZWRDbGljayhldmVudCwgaWQ6IHN0cmluZykge1xyXG4gICAgaWYgKHRoaXMuZm9ybS52YWx1ZS5sYXllcnMuZmluZCgobGF5ZXJJZCkgPT4gbGF5ZXJJZCA9PT0gaWQpKSB7XHJcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGluTGF5ZXJzSWRUb0V4cG9ydFNlbGVjdGlvbk9ubHkobGF5ZXI6IExheWVyKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtLnZhbHVlLmxheWVyc1dpdGhTZWxlY3Rpb24uZmluZChcclxuICAgICAgKGxheWVySWQpID0+IGxheWVySWQgPT09IGxheWVyLmlkXHJcbiAgICApXHJcbiAgICAgID8gdHJ1ZVxyXG4gICAgICA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLmxheWVycyQkLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB0aGlzLmV4cG9ydGFibGVMYXllcnMkJC51bnN1YnNjcmliZSgpO1xyXG4gICAgdGhpcy5mb3JtYXRzJCQudW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuZW5jb2RpbmdzJCQudW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuZm9ybUxheWVyJCQudW5zdWJzY3JpYmUoKTtcclxuICAgIGlmICh0aGlzLmV4cG9ydE9wdGlvbnMkJCkge1xyXG4gICAgICB0aGlzLmV4cG9ydE9wdGlvbnMkJC51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5leHBvcnRPcHRpb25zQ2hhbmdlLmVtaXQodGhpcy5mb3JtLnZhbHVlKTtcclxuICAgIHRoaXMuaGFuZGxlUHJldmlvdXNMYXllclNwZWNzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZVByZXZpb3VzTGF5ZXJTcGVjcygpIHtcclxuICAgIGNvbnN0IHByZXZpb3VzU3BlY3MgPSB0aGlzLnByZXZpb3VzTGF5ZXJTcGVjcyQudmFsdWU7XHJcbiAgICBpZiAocHJldmlvdXNTcGVjcyAmJiBwcmV2aW91c1NwZWNzLmxlbmd0aCkge1xyXG4gICAgICBwcmV2aW91c1NwZWNzLmZvckVhY2goKHNwZWNzKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcHJldmlvdXNMYXllciA9IHRoaXMubWFwLmdldExheWVyQnlJZChzcGVjcy5pZCk7XHJcbiAgICAgICAgcHJldmlvdXNMYXllci52aXNpYmxlID0gc3BlY3MudmlzaWJsZTtcclxuICAgICAgICBwcmV2aW91c0xheWVyLm9wYWNpdHkgPSBzcGVjcy5vcGFjaXR5O1xyXG4gICAgICAgIChwcmV2aW91c0xheWVyIGFzIGFueSkucXVlcnlhYmxlID0gc3BlY3MucXVlcnlhYmxlO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMucHJldmlvdXNMYXllclNwZWNzJC5uZXh0KHVuZGVmaW5lZCk7XHJcbiAgfVxyXG5cclxuICBpbXBvcnRGaWxlcyhmaWxlczogRmlsZVtdKSB7XHJcbiAgICBsZXQgaW5wdXRQcm9qID0gdGhpcy5pbnB1dFByb2ouY29kZTtcclxuICAgIGlmICh0aGlzLmVzcGdDb2RlUmVnZXgudGVzdChpbnB1dFByb2opKSB7XHJcbiAgICAgIGlucHV0UHJvaiA9IGBFUFNHOiR7aW5wdXRQcm9qfWA7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5sb2FkaW5nJC5uZXh0KHRydWUpO1xyXG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcbiAgICAgIHRoaXMuaW1wb3J0U2VydmljZS5pbXBvcnQoZmlsZSwgaW5wdXRQcm9qKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgKGZlYXR1cmVzOiBGZWF0dXJlW10pID0+IHRoaXMub25GaWxlSW1wb3J0U3VjY2VzcyhmaWxlLCBmZWF0dXJlcyksXHJcbiAgICAgICAgKGVycm9yOiBFcnJvcikgPT4gdGhpcy5vbkZpbGVJbXBvcnRFcnJvcihmaWxlLCBlcnJvciksXHJcbiAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nJC5uZXh0KGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVQb3B1cChwcmVDaGVjazogYm9vbGVhbiA9IHRydWUpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHAxID0gd2luZG93Lm9wZW4oJycsICdwb3B1cCcsICd3aWR0aD0xLCBoZWlnaHQ9MScpO1xyXG4gICAgcDEuY2xvc2UoKTtcclxuICAgIGNvbnN0IHAyID0gd2luZG93Lm9wZW4oJycsICdwb3B1cCcsICd3aWR0aD0xLCBoZWlnaHQ9MScpO1xyXG4gICAgaWYgKCFwMiB8fCBwMi5jbG9zZWQgfHwgdHlwZW9mIHAyLmNsb3NlZCA9PT0gJ3VuZGVmaW5lZCcgfHwgcDIgPT09IG51bGwpIHtcclxuICAgICAgdGhpcy5vblBvcHVwQmxvY2tlZEVycm9yKHByZUNoZWNrKTtcclxuICAgICAgdGhpcy5wb3B1cEFsbG93ZWQgPSBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHAyLmNsb3NlKCk7XHJcbiAgICAgIHRoaXMucG9wdXBBbGxvd2VkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5wb3B1cENoZWNrZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMucG9wdXBBbGxvd2VkO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlRXhwb3J0Rm9ybVN1Ym1pdChkYXRhOiBFeHBvcnRPcHRpb25zKSB7XHJcbiAgICB0aGlzLmxvYWRpbmckLm5leHQodHJ1ZSk7XHJcblxyXG4gICAgY29uc3Qgb2dyZUZvcm1hdHMgPSBPYmplY3Qua2V5cyhFeHBvcnRTZXJ2aWNlLm9ncmVGb3JtYXRzKTtcclxuICAgIGlmIChcclxuICAgICAgIXRoaXMucG9wdXBDaGVja2VkICYmXHJcbiAgICAgIGRhdGEubGF5ZXJzLmxlbmd0aCA+IDEgJiZcclxuICAgICAgKG9ncmVGb3JtYXRzLmluZGV4T2YoZGF0YS5mb3JtYXQpID49IDAgfHxcclxuICAgICAgICBkYXRhLmZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LlVSTCkgJiZcclxuICAgICAgIXRoaXMucG9wdXBBbGxvd2VkXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5oYW5kbGVQb3B1cCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBnZW9tVHlwZXNDU1Y6IHsgZ2VvbWV0cnlUeXBlOiBzdHJpbmc7IGZlYXR1cmVzOiBhbnlbXSB9W10gPSBbXTtcclxuICAgIGxldCBmZWF0dXJlc0NTVjogYW55W10gPSBbXTtcclxuICAgIGxldCBmaWxlbmFtZTogc3RyaW5nID0gJyc7XHJcblxyXG4gICAgZm9yIChjb25zdCBbbGF5ZXJJbmRleCwgbGF5ZXJdIG9mIGRhdGEubGF5ZXJzLmVudHJpZXMoKSkge1xyXG4gICAgICBjb25zdCBsYXkgPSB0aGlzLm1hcC5nZXRMYXllckJ5SWQobGF5ZXIpO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgIShcclxuICAgICAgICAgIGRhdGEuZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuQ1NWc2VtaWNvbG9uIHx8XHJcbiAgICAgICAgICBkYXRhLmZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LkNTVmNvbW1hXHJcbiAgICAgICAgKSB8fFxyXG4gICAgICAgICFkYXRhLmNvbWJpbmVMYXllcnMgfHxcclxuICAgICAgICBkYXRhLmxheWVycy5sZW5ndGggPT09IDFcclxuICAgICAgKSB7XHJcbiAgICAgICAgZmlsZW5hbWUgPSBsYXkudGl0bGU7XHJcbiAgICAgICAgaWYgKGRhdGEubmFtZSkge1xyXG4gICAgICAgICAgZmlsZW5hbWUgPSBkYXRhLm5hbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZpbGVuYW1lID0gdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoXHJcbiAgICAgICAgICAnaWdvLmdlby5leHBvcnQuY29tYmluZWRMYXllcnMnXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBkU09wdGlvbnM6IERhdGFTb3VyY2VPcHRpb25zID0gbGF5LmRhdGFTb3VyY2Uub3B0aW9ucztcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGRhdGEuZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuVVJMICYmXHJcbiAgICAgICAgZFNPcHRpb25zLmRvd25sb2FkICYmXHJcbiAgICAgICAgKGRTT3B0aW9ucy5kb3dubG9hZC51cmwgfHwgZFNPcHRpb25zLmRvd25sb2FkLmR5bmFtaWNVcmwpXHJcbiAgICAgICkge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgLy8gYmV0dGVyIGxvb2sgYW4gZmVlbFxyXG4gICAgICAgICAgY29uc3QgdXJsID0gZFNPcHRpb25zLmRvd25sb2FkLnVybCB8fCBkU09wdGlvbnMuZG93bmxvYWQuZHluYW1pY1VybDtcclxuICAgICAgICAgIHVybC5tYXRjaCgvc2VydmljZT13ZnMvZ2kpXHJcbiAgICAgICAgICAgID8gdGhpcy5kb3dubG9hZFNlcnZpY2Uub3BlbihsYXkpXHJcbiAgICAgICAgICAgIDogd2luZG93Lm9wZW4odXJsLCAnX2JsYW5rJyk7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmckLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIH0sIDUwMCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHdrcyA9IHRoaXMuZ2V0V29ya3NwYWNlQnlMYXllcklkKGxheWVyKTtcclxuICAgICAgbGV0IG9sRmVhdHVyZXM7XHJcbiAgICAgIGlmICh3a3MgJiYgd2tzLmVudGl0eVN0b3JlICYmIHdrcy5lbnRpdHlTdG9yZS5zdGF0ZVZpZXcuYWxsKCkubGVuZ3RoKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgZGF0YS5sYXllcnNXaXRoU2VsZWN0aW9uLmluZGV4T2YobGF5ZXIpICE9PSAtMSAmJlxyXG4gICAgICAgICAgZGF0YS5mZWF0dXJlSW5NYXBFeHRlbnRcclxuICAgICAgICApIHtcclxuICAgICAgICAgIC8vIE9ubHkgZXhwb3J0IHNlbGVjdGVkIGZlYXR1cmUgJiYgaW50byBtYXAgZXh0ZW50XHJcbiAgICAgICAgICBvbEZlYXR1cmVzID0gd2tzLmVudGl0eVN0b3JlLnN0YXRlVmlld1xyXG4gICAgICAgICAgICAuYWxsKClcclxuICAgICAgICAgICAgLmZpbHRlcihcclxuICAgICAgICAgICAgICAoZTogRW50aXR5UmVjb3JkPG9iamVjdD4pID0+XHJcbiAgICAgICAgICAgICAgICBlLnN0YXRlLmluTWFwRXh0ZW50ICYmIGUuc3RhdGUuc2VsZWN0ZWRcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAubWFwKChlKSA9PiAoZS5lbnRpdHkgYXMgRmVhdHVyZSkub2wpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICBkYXRhLmxheWVyc1dpdGhTZWxlY3Rpb24uaW5kZXhPZihsYXllcikgIT09IC0xICYmXHJcbiAgICAgICAgICAhZGF0YS5mZWF0dXJlSW5NYXBFeHRlbnRcclxuICAgICAgICApIHtcclxuICAgICAgICAgIC8vIE9ubHkgZXhwb3J0IHNlbGVjdGVkIGZlYXR1cmUgJiYgIChpbnRvIG1hcCBleHRlbnQgT1Igbm90KVxyXG4gICAgICAgICAgb2xGZWF0dXJlcyA9IHdrcy5lbnRpdHlTdG9yZS5zdGF0ZVZpZXdcclxuICAgICAgICAgICAgLmFsbCgpXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKGU6IEVudGl0eVJlY29yZDxvYmplY3Q+KSA9PiBlLnN0YXRlLnNlbGVjdGVkKVxyXG4gICAgICAgICAgICAubWFwKChlKSA9PiAoZS5lbnRpdHkgYXMgRmVhdHVyZSkub2wpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YS5mZWF0dXJlSW5NYXBFeHRlbnQpIHtcclxuICAgICAgICAgIC8vIE9ubHkgaW50byBtYXAgZXh0ZW50XHJcbiAgICAgICAgICBvbEZlYXR1cmVzID0gd2tzLmVudGl0eVN0b3JlLnN0YXRlVmlld1xyXG4gICAgICAgICAgICAuYWxsKClcclxuICAgICAgICAgICAgLmZpbHRlcigoZTogRW50aXR5UmVjb3JkPG9iamVjdD4pID0+IGUuc3RhdGUuaW5NYXBFeHRlbnQpXHJcbiAgICAgICAgICAgIC5tYXAoKGUpID0+IChlLmVudGl0eSBhcyBGZWF0dXJlKS5vbCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIEFsbCBmZWF0dXJlc1xyXG4gICAgICAgICAgb2xGZWF0dXJlcyA9IHdrcy5lbnRpdHlTdG9yZS5zdGF0ZVZpZXdcclxuICAgICAgICAgICAgLmFsbCgpXHJcbiAgICAgICAgICAgIC5tYXAoKGUpID0+IChlLmVudGl0eSBhcyBGZWF0dXJlKS5vbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IG9sID0gbGF5LmRhdGFTb3VyY2Uub2wgYXNcclxuICAgICAgICAgIHwgb2xWZWN0b3JTb3VyY2U8T2xHZW9tZXRyeT5cclxuICAgICAgICAgIHwgb2xDbHVzdGVyU291cmNlO1xyXG4gICAgICAgIGlmIChkYXRhLmZlYXR1cmVJbk1hcEV4dGVudCkge1xyXG4gICAgICAgICAgb2xGZWF0dXJlcyA9IG9sLmdldEZlYXR1cmVzSW5FeHRlbnQoXHJcbiAgICAgICAgICAgIGxheS5tYXAudmlld0NvbnRyb2xsZXIuZ2V0RXh0ZW50KClcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG9sRmVhdHVyZXMgPSBvbC5nZXRGZWF0dXJlcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobGF5LmRhdGFTb3VyY2UgaW5zdGFuY2VvZiBDbHVzdGVyRGF0YVNvdXJjZSkge1xyXG4gICAgICAgICAgb2xGZWF0dXJlcyA9IG9sRmVhdHVyZXMuZmxhdE1hcCgoY2x1c3RlcjogYW55KSA9PlxyXG4gICAgICAgICAgICBjbHVzdGVyLmdldCgnZmVhdHVyZXMnKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBnZW9tVHlwZXM6IHsgZ2VvbWV0cnlUeXBlOiBzdHJpbmc7IGZlYXR1cmVzOiBhbnlbXSB9W10gPSBbXTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGRhdGEuZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuU2hhcGVmaWxlIHx8XHJcbiAgICAgICAgZGF0YS5mb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5HUFhcclxuICAgICAgKSB7XHJcbiAgICAgICAgb2xGZWF0dXJlcy5mb3JFYWNoKChvbEZlYXR1cmUpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGZlYXR1cmVHZW9tVHlwZSA9IG9sRmVhdHVyZS5nZXRHZW9tZXRyeSgpLmdldFR5cGUoKTtcclxuICAgICAgICAgIGNvbnN0IGN1cnJlbnRHZW9tVHlwZSA9IGdlb21UeXBlcy5maW5kKFxyXG4gICAgICAgICAgICAoZ2VvbVR5cGUpID0+IGdlb21UeXBlLmdlb21ldHJ5VHlwZSA9PT0gZmVhdHVyZUdlb21UeXBlXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgaWYgKGN1cnJlbnRHZW9tVHlwZSkge1xyXG4gICAgICAgICAgICBjdXJyZW50R2VvbVR5cGUuZmVhdHVyZXMucHVzaChvbEZlYXR1cmUpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZ2VvbVR5cGVzLnB1c2goe1xyXG4gICAgICAgICAgICAgIGdlb21ldHJ5VHlwZTogZmVhdHVyZUdlb21UeXBlLFxyXG4gICAgICAgICAgICAgIGZlYXR1cmVzOiBbb2xGZWF0dXJlXVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBnZW9tVHlwZXMgPSBbeyBnZW9tZXRyeVR5cGU6ICcnLCBmZWF0dXJlczogb2xGZWF0dXJlcyB9XTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZ2VvbVR5cGVzLmZvckVhY2goKGdlb21UeXBlKSA9PiB7XHJcbiAgICAgICAgZ2VvbVR5cGUuZmVhdHVyZXMuZm9yRWFjaCgoZmVhdHVyZSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgcmFkaXVzOiBudW1iZXIgPSBmZWF0dXJlLmdldCgncmFkJyk7XHJcbiAgICAgICAgICBpZiAocmFkaXVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNlbnRlcjQzMjY6IEFycmF5PG51bWJlcj4gPSBbXHJcbiAgICAgICAgICAgICAgZmVhdHVyZS5nZXQoJ2xvbmdpdHVkZScpLFxyXG4gICAgICAgICAgICAgIGZlYXR1cmUuZ2V0KCdsYXRpdHVkZScpXHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgIGNvbnN0IGNpcmNsZSA9IGNpcmN1bGFyKGNlbnRlcjQzMjYsIHJhZGl1cywgNTAwKTtcclxuICAgICAgICAgICAgY2lyY2xlLnRyYW5zZm9ybSgnRVBTRzo0MzI2JywgZmVhdHVyZS5nZXQoJ19wcm9qZWN0aW9uJykpO1xyXG4gICAgICAgICAgICBmZWF0dXJlLnNldEdlb21ldHJ5KGNpcmNsZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKGRhdGEuZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuR1BYKSB7XHJcbiAgICAgICAgY29uc3QgZ3B4RmVhdHVyZUNudCA9IGdlb21UeXBlcy5sZW5ndGg7XHJcbiAgICAgICAgZ2VvbVR5cGVzID0gZ2VvbVR5cGVzLmZpbHRlcigoZ2VvbVR5cGUpID0+XHJcbiAgICAgICAgICBbJ0xpbmVTdHJpbmcnLCAnUG9pbnQnXS5pbmNsdWRlcyhnZW9tVHlwZS5nZW9tZXRyeVR5cGUpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBncHhGZWF0dXJlQ250UG9pbnRPclBvbHkgPSBnZW9tVHlwZXMubGVuZ3RoO1xyXG4gICAgICAgIGlmIChncHhGZWF0dXJlQ250ID4gZ3B4RmVhdHVyZUNudFBvaW50T3JQb2x5KSB7XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgICAgICAnaWdvLmdlby5leHBvcnQuZ3B4LmVycm9yLnBvbHkudGV4dCcsXHJcbiAgICAgICAgICAgICdpZ28uZ2VvLmV4cG9ydC5ncHguZXJyb3IucG9seS50aXRsZScsXHJcbiAgICAgICAgICAgIHsgdGltZU91dDogMjAwMDAgfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgKGRhdGEuZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuQ1NWc2VtaWNvbG9uIHx8XHJcbiAgICAgICAgICBkYXRhLmZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LkNTVmNvbW1hKSAmJlxyXG4gICAgICAgIGRhdGEuY29tYmluZUxheWVyc1xyXG4gICAgICApIHtcclxuICAgICAgICBnZW9tVHlwZXMuZm9yRWFjaCgoZ2VvbVR5cGUpID0+IGdlb21UeXBlc0NTVi5wdXNoKGdlb21UeXBlKSk7XHJcblxyXG4gICAgICAgIGlmIChsYXllckluZGV4ICE9PSBkYXRhLmxheWVycy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbGV0IHByZXZpb3VzRmVhdHVyZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgIGdlb21UeXBlc0NTVi5mb3JFYWNoKChnZW9tVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICBnZW9tVHlwZS5mZWF0dXJlcy5mb3JFYWNoKChjdXJyZW50RmVhdHVyZSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChkYXRhLnNlcGFyYXRvcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzRmVhdHVyZSkge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEZlYXR1cmUuZ2V0KCdfZmVhdHVyZVN0b3JlJykubGF5ZXIub3B0aW9ucy50aXRsZSAhPT1cclxuICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0ZlYXR1cmUuZ2V0KCdfZmVhdHVyZVN0b3JlJykubGF5ZXIub3B0aW9ucy50aXRsZVxyXG4gICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0aXRsZUVtcHR5Um93cyA9IHRoaXMuY3JlYXRlVGl0bGVFbXB0eVJvd3MoXHJcbiAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0ZlYXR1cmUsXHJcbiAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50RmVhdHVyZVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXNDU1YucHVzaCh0aXRsZUVtcHR5Um93c1syXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXNDU1YucHVzaCh0aXRsZUVtcHR5Um93c1swXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXNDU1YucHVzaCh0aXRsZUVtcHR5Um93c1sxXSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHRpdGxlRW1wdHlSb3dzID0gdGhpcy5jcmVhdGVUaXRsZUVtcHR5Um93cyhcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50RmVhdHVyZSxcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50RmVhdHVyZVxyXG4gICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICBmZWF0dXJlc0NTVi5wdXNoKHRpdGxlRW1wdHlSb3dzWzBdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZmVhdHVyZXNDU1YucHVzaChjdXJyZW50RmVhdHVyZSk7XHJcbiAgICAgICAgICAgICAgcHJldmlvdXNGZWF0dXJlID0gY3VycmVudEZlYXR1cmU7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZ2VvbVR5cGVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHRoaXMubG9hZGluZyQubmV4dChmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5lcnJvcihcclxuICAgICAgICAgICdpZ28uZ2VvLmV4cG9ydC5ub3RoaW5nLnRleHQnLFxyXG4gICAgICAgICAgJ2lnby5nZW8uZXhwb3J0Lm5vdGhpbmcudGl0bGUnLFxyXG4gICAgICAgICAgeyB0aW1lT3V0OiAyMDAwMCB9XHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAhKFxyXG4gICAgICAgICAgICBkYXRhLmZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LkNTVnNlbWljb2xvbiB8fFxyXG4gICAgICAgICAgICBkYXRhLmZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LkNTVmNvbW1hXHJcbiAgICAgICAgICApIHx8XHJcbiAgICAgICAgICAhZGF0YS5jb21iaW5lTGF5ZXJzXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBnZW9tVHlwZXMubWFwKChnZW9tVHlwZSkgPT5cclxuICAgICAgICAgICAgdGhpcy5leHBvcnRTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgLmV4cG9ydChcclxuICAgICAgICAgICAgICAgIGdlb21UeXBlLmZlYXR1cmVzLFxyXG4gICAgICAgICAgICAgICAgZGF0YS5mb3JtYXQsXHJcbiAgICAgICAgICAgICAgICBmaWxlbmFtZSArIGdlb21UeXBlLmdlb21ldHJ5VHlwZSxcclxuICAgICAgICAgICAgICAgIGRhdGEuZW5jb2RpbmcsXHJcbiAgICAgICAgICAgICAgICB0aGlzLm1hcC5wcm9qZWN0aW9uXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICAoKSA9PiB7fSxcclxuICAgICAgICAgICAgICAgIChlcnJvcjogRXJyb3IpID0+IHRoaXMub25GaWxlRXhwb3J0RXJyb3IoZXJyb3IpLFxyXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLm9uRmlsZUV4cG9ydFN1Y2Nlc3MoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgIGdlb21UeXBlLmZlYXR1cmVzLmZvckVhY2goKGZlYXR1cmUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNpcmNsZVRvUG9pbnQoZmVhdHVyZSk7XHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nJC5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICAoZGF0YS5mb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5DU1ZzZW1pY29sb24gfHxcclxuICAgICAgICBkYXRhLmZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LkNTVmNvbW1hKSAmJlxyXG4gICAgICBkYXRhLmNvbWJpbmVMYXllcnNcclxuICAgICkge1xyXG4gICAgICB0aGlzLmV4cG9ydFNlcnZpY2VcclxuICAgICAgICAuZXhwb3J0KFxyXG4gICAgICAgICAgZmVhdHVyZXNDU1YsXHJcbiAgICAgICAgICBkYXRhLmZvcm1hdCxcclxuICAgICAgICAgIGZpbGVuYW1lLFxyXG4gICAgICAgICAgZGF0YS5lbmNvZGluZyxcclxuICAgICAgICAgIHRoaXMubWFwLnByb2plY3Rpb25cclxuICAgICAgICApXHJcbiAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICgpID0+IHt9LFxyXG4gICAgICAgICAgKGVycm9yOiBFcnJvcikgPT4gdGhpcy5vbkZpbGVFeHBvcnRFcnJvcihlcnJvciksXHJcbiAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMub25GaWxlRXhwb3J0U3VjY2VzcygpO1xyXG5cclxuICAgICAgICAgICAgZmVhdHVyZXNDU1YuZm9yRWFjaCgoZmVhdHVyZSkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuY2lyY2xlVG9Qb2ludChmZWF0dXJlKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmckLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZVRpdGxlRW1wdHlSb3dzKHByZXZpb3VzRmVhdHVyZSwgY3VycmVudEZlYXR1cmUpIHtcclxuICAgIGNvbnN0IHRpdGxlUm93ID0gY3VycmVudEZlYXR1cmUuY2xvbmUoKTtcclxuICAgIGNvbnN0IGhlYWRlclJvdyA9IGN1cnJlbnRGZWF0dXJlLmNsb25lKCk7XHJcbiAgICBjb25zdCBlbXB0eVJvdyA9IGN1cnJlbnRGZWF0dXJlLmNsb25lKCk7XHJcbiAgICBjb25zdCBwcmV2aW91c0ZlYXR1cmVLZXlzOiBBcnJheTxzdHJpbmc+ID0gcHJldmlvdXNGZWF0dXJlLmdldEtleXMoKTtcclxuICAgIGxldCBmaXJzdEtleVByZXZpb3VzOiBzdHJpbmcgPSAnJztcclxuICAgIGZvciAoY29uc3Qga2V5IGluIHByZXZpb3VzRmVhdHVyZUtleXMpIHtcclxuICAgICAgaWYgKHByZXZpb3VzRmVhdHVyZUtleXNba2V5XSAhPT0gJ2dlb21ldHJ5Jykge1xyXG4gICAgICAgIGZpcnN0S2V5UHJldmlvdXMgPSBwcmV2aW91c0ZlYXR1cmVLZXlzW2tleV07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjdXJyZW50RmVhdHVyZUtleXM6IEFycmF5PHN0cmluZz4gPSBjdXJyZW50RmVhdHVyZS5nZXRLZXlzKCk7XHJcbiAgICBsZXQgZmlyc3RLZXlDdXJyZW50OiBzdHJpbmcgPSAnJztcclxuICAgIGZvciAoY29uc3Qga2V5IGluIGN1cnJlbnRGZWF0dXJlS2V5cykge1xyXG4gICAgICBpZiAoY3VycmVudEZlYXR1cmVLZXlzW2tleV0gIT09ICdnZW9tZXRyeScpIHtcclxuICAgICAgICBmaXJzdEtleUN1cnJlbnQgPSBjdXJyZW50RmVhdHVyZUtleXNba2V5XTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgYWxsS2V5czogQXJyYXk8c3RyaW5nPiA9IGN1cnJlbnRGZWF0dXJlLmdldEtleXMoKTtcclxuICAgIHByZXZpb3VzRmVhdHVyZUtleXMuZm9yRWFjaCgocHJldmlvdXNLZXkpID0+IHtcclxuICAgICAgaWYgKGFsbEtleXMuaW5jbHVkZXMocHJldmlvdXNLZXkpICYmIHByZXZpb3VzS2V5ICE9PSBmaXJzdEtleVByZXZpb3VzKSB7XHJcbiAgICAgICAgYWxsS2V5cy5wdXNoKHByZXZpb3VzS2V5KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBhbGxLZXlzLnVuc2hpZnQoZmlyc3RLZXlQcmV2aW91cyk7XHJcblxyXG4gICAgbGV0IGZpcnN0S2V5QWxsOiBzdHJpbmcgPSAnJztcclxuICAgIGZvciAoY29uc3Qga2V5IGluIGFsbEtleXMpIHtcclxuICAgICAgaWYgKGFsbEtleXNba2V5XSAhPT0gJ2dlb21ldHJ5Jykge1xyXG4gICAgICAgIGZpcnN0S2V5QWxsID0gYWxsS2V5c1trZXldO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBhbGxLZXlzLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICBjb25zdCBzYW1lS2V5czogYm9vbGVhbiA9XHJcbiAgICAgICAgcHJldmlvdXNGZWF0dXJlS2V5cy5sZW5ndGggPT09IGN1cnJlbnRGZWF0dXJlS2V5cy5sZW5ndGggJiZcclxuICAgICAgICBwcmV2aW91c0ZlYXR1cmVLZXlzLmV2ZXJ5KFxyXG4gICAgICAgICAgKHZhbHVlLCBpbmRleCkgPT4gdmFsdWUgPT09IGN1cnJlbnRGZWF0dXJlS2V5c1tpbmRleF1cclxuICAgICAgICApO1xyXG4gICAgICBpZiAoa2V5ID09PSBmaXJzdEtleUFsbCAmJiAhc2FtZUtleXMpIHtcclxuICAgICAgICB0aXRsZVJvdy5zZXQoXHJcbiAgICAgICAgICBrZXksXHJcbiAgICAgICAgICBjdXJyZW50RmVhdHVyZS5nZXQoJ19mZWF0dXJlU3RvcmUnKS5sYXllci5vcHRpb25zLnRpdGxlICtcclxuICAgICAgICAgICAgJyA9PT09PT09PT09PT09PT0+JyxcclxuICAgICAgICAgIHRydWVcclxuICAgICAgICApO1xyXG4gICAgICAgIGhlYWRlclJvdy5zZXQoa2V5LCBrZXksIHRydWUpO1xyXG4gICAgICAgIGVtcHR5Um93LnVuc2V0KGtleSwgdHJ1ZSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSBmaXJzdEtleUFsbCAmJiBzYW1lS2V5cykge1xyXG4gICAgICAgIHRpdGxlUm93LnNldChcclxuICAgICAgICAgIGtleSxcclxuICAgICAgICAgIGN1cnJlbnRGZWF0dXJlLmdldCgnX2ZlYXR1cmVTdG9yZScpLmxheWVyLm9wdGlvbnMudGl0bGUsXHJcbiAgICAgICAgICB0cnVlXHJcbiAgICAgICAgKTtcclxuICAgICAgICBoZWFkZXJSb3cuc2V0KGtleSwga2V5LCB0cnVlKTtcclxuICAgICAgICBlbXB0eVJvdy51bnNldChrZXksIHRydWUpO1xyXG4gICAgICB9IGVsc2UgaWYgKGtleSA9PT0gZmlyc3RLZXlDdXJyZW50KSB7XHJcbiAgICAgICAgdGl0bGVSb3cuc2V0KFxyXG4gICAgICAgICAga2V5LFxyXG4gICAgICAgICAgY3VycmVudEZlYXR1cmUuZ2V0KCdfZmVhdHVyZVN0b3JlJykubGF5ZXIub3B0aW9ucy50aXRsZSxcclxuICAgICAgICAgIHRydWVcclxuICAgICAgICApO1xyXG4gICAgICAgIGhlYWRlclJvdy5zZXQoa2V5LCBrZXksIHRydWUpO1xyXG4gICAgICAgIGVtcHR5Um93LnVuc2V0KGtleSwgdHJ1ZSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoa2V5ICE9PSAnZ2VvbWV0cnknKSB7XHJcbiAgICAgICAgdGl0bGVSb3cudW5zZXQoa2V5LCB0cnVlKTtcclxuICAgICAgICBoZWFkZXJSb3cuc2V0KGtleSwga2V5LCB0cnVlKTtcclxuICAgICAgICBlbXB0eVJvdy51bnNldChrZXksIHRydWUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRpdGxlUm93LnVuc2V0KGtleSwgdHJ1ZSk7XHJcbiAgICAgICAgZW1wdHlSb3cudW5zZXQoa2V5LCB0cnVlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCFjdXJyZW50RmVhdHVyZUtleXMuaW5jbHVkZXMoa2V5KSkge1xyXG4gICAgICAgIGhlYWRlclJvdy51bnNldChrZXksIHRydWUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGNvbnN0IHRpdGxlRW1wdHlSb3dzID0gW3RpdGxlUm93LCBoZWFkZXJSb3csIGVtcHR5Um93XTtcclxuICAgIHJldHVybiB0aXRsZUVtcHR5Um93cztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2lyY2xlVG9Qb2ludChmZWF0dXJlKSB7XHJcbiAgICBjb25zdCByYWRpdXM6IG51bWJlciA9IGZlYXR1cmUuZ2V0KCdyYWQnKTtcclxuXHJcbiAgICBpZiAocmFkaXVzKSB7XHJcbiAgICAgIGNvbnN0IHBvaW50ID0gbmV3IG9sUG9pbnQoW1xyXG4gICAgICAgIGZlYXR1cmUuZ2V0KCdsb25naXR1ZGUnKSxcclxuICAgICAgICBmZWF0dXJlLmdldCgnbGF0aXR1ZGUnKVxyXG4gICAgICBdKTtcclxuICAgICAgcG9pbnQudHJhbnNmb3JtKCdFUFNHOjQzMjYnLCBmZWF0dXJlLmdldCgnX3Byb2plY3Rpb24nKSk7XHJcbiAgICAgIGZlYXR1cmUuc2V0R2VvbWV0cnkocG9pbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBidWlsZEZvcm0oKSB7XHJcbiAgICB0aGlzLmltcG9ydEZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgaW5wdXRQcm9qOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV1cclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLmZvcmNlTmFtaW5nKSB7XHJcbiAgICAgIHRoaXMuZm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICAgIGZvcm1hdDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICAgIGxheWVyczogW1tdLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICAgIGxheWVyc1dpdGhTZWxlY3Rpb246IFtbXV0sXHJcbiAgICAgICAgZW5jb2Rpbmc6IFtFbmNvZGluZ0Zvcm1hdC5VVEY4LCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICAgIGNvbWJpbmVMYXllcnM6IFt0cnVlLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICAgIHNlcGFyYXRvcjogW2ZhbHNlLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICAgIGZlYXR1cmVJbk1hcEV4dGVudDogW2ZhbHNlLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICAgIG5hbWU6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICAgIGZvcm1hdDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICAgIGxheWVyczogW1tdLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICAgIGxheWVyc1dpdGhTZWxlY3Rpb246IFtbXV0sXHJcbiAgICAgICAgZW5jb2Rpbmc6IFtFbmNvZGluZ0Zvcm1hdC5VVEY4LCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICAgIGNvbWJpbmVMYXllcnM6IFt0cnVlLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICAgIHNlcGFyYXRvcjogW2ZhbHNlLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICAgIGZlYXR1cmVJbk1hcEV4dGVudDogW2ZhbHNlLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbkZpbGVJbXBvcnRTdWNjZXNzKGZpbGU6IEZpbGUsIGZlYXR1cmVzOiBGZWF0dXJlW10pIHtcclxuICAgIGNvbnN0IGltcG9ydEV4cG9ydE9wdGlvbnMgPSB0aGlzLmNvbmZpZy5nZXRDb25maWcoXHJcbiAgICAgICdpbXBvcnRFeHBvcnQnXHJcbiAgICApIGFzIEltcG9ydEV4cG9ydFNlcnZpY2VPcHRpb25zO1xyXG4gICAgY29uc3QgY29uZmlybURpYWxvZ1NlcnZpY2UgPSBpbXBvcnRFeHBvcnRPcHRpb25zPy5hbGxvd1RvU3RvcmVMYXllclxyXG4gICAgICA/IHRoaXMuY29uZmlybURpYWxvZ1NlcnZpY2VcclxuICAgICAgOiB1bmRlZmluZWQ7XHJcbiAgICBjb25zdCBpbXBvcnRXaXRoU3R5bGUgPVxyXG4gICAgICBpbXBvcnRFeHBvcnRPcHRpb25zPy5pbXBvcnRXaXRoU3R5bGUgfHxcclxuICAgICAgdGhpcy5jb25maWcuZ2V0Q29uZmlnKCdpbXBvcnRXaXRoU3R5bGUnKTtcclxuICAgIGlmICh0aGlzLmNvbmZpZy5nZXRDb25maWcoJ2ltcG9ydFdpdGhTdHlsZScpKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihgXHJcbiAgICAgIFRoZSBsb2NhdGlvbiBvZiB0aGlzIGNvbmZpZyBpbXBvcnRXaXRoU3R5bGUgaXMgZGVwcmVjYXRlZC5cclxuICAgICAgUGxlYXNlIG1vdmUgdGhpcyBwcm9wZXJ0eSB3aXRoaW4gaW1wb3J0RXhwb3J0IGNvbmZpZ3VyYXRpb24uXHJcbiAgICAgIEV4OiBpbXBvcnRXaXRoU3R5bGU6IHRydWUvZmFsc2UgbXVzdCBiZSB0cmFuc2ZlcmVkIHRvIGltcG9ydEV4cG9ydDogeyBpbXBvcnRXaXRoU3R5bGU6IHRydWUvZmFsc2UgfVxyXG4gICAgICBSZWZlciB0byBlbnZpcm9ubmVtZW50LnRzIE9SIGNvbmZpZy9jb25maWcuanNvblxyXG4gICAgICBUaGlzIGxlZ2FjeSBjb252ZXJzaW9uIHdpbGwgYmUgZGVsZXRlZCBpbiAyMDI0LlxyXG4gICAgICBgKTtcclxuICAgIH1cclxuICAgIGlmICghaW1wb3J0V2l0aFN0eWxlKSB7XHJcbiAgICAgIGhhbmRsZUZpbGVJbXBvcnRTdWNjZXNzKFxyXG4gICAgICAgIGZpbGUsXHJcbiAgICAgICAgZmVhdHVyZXMsXHJcbiAgICAgICAgdGhpcy5tYXAsXHJcbiAgICAgICAgdGhpcy5jb250ZXh0VXJpLFxyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UsXHJcbiAgICAgICAgdGhpcy5sYXllclNlcnZpY2UsXHJcbiAgICAgICAgY29uZmlybURpYWxvZ1NlcnZpY2VcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGhhbmRsZUZpbGVJbXBvcnRTdWNjZXNzKFxyXG4gICAgICAgIGZpbGUsXHJcbiAgICAgICAgZmVhdHVyZXMsXHJcbiAgICAgICAgdGhpcy5tYXAsXHJcbiAgICAgICAgdGhpcy5jb250ZXh0VXJpLFxyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UsXHJcbiAgICAgICAgdGhpcy5sYXllclNlcnZpY2UsXHJcbiAgICAgICAgY29uZmlybURpYWxvZ1NlcnZpY2UsXHJcbiAgICAgICAgdGhpcy5zdHlsZUxpc3RTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXMuc3R5bGVTZXJ2aWNlXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uRmlsZUltcG9ydEVycm9yKGZpbGU6IEZpbGUsIGVycm9yOiBFcnJvcikge1xyXG4gICAgdGhpcy5sb2FkaW5nJC5uZXh0KGZhbHNlKTtcclxuICAgIGhhbmRsZUZpbGVJbXBvcnRFcnJvcihmaWxlLCBlcnJvciwgdGhpcy5tZXNzYWdlU2VydmljZSwgdGhpcy5maWxlU2l6ZU1iKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25Qb3B1cEJsb2NrZWRFcnJvcihwcmVDaGVjazogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgIHRoaXMubG9hZGluZyQubmV4dChmYWxzZSk7XHJcbiAgICBjb25zdCBleHRyYU1lc3NhZ2UgPSBwcmVDaGVja1xyXG4gICAgICA/ICdpZ28uZ2VvLmV4cG9ydC5wb3B1cEJsb2NrZWQuc2VsZWN0QWdhaW4nXHJcbiAgICAgIDogJ2lnby5nZW8uZXhwb3J0LnBvcHVwQmxvY2tlZC5yZXRyeSc7XHJcbiAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAnaWdvLmdlby5leHBvcnQucG9wdXBCbG9ja2VkLnRleHQnLFxyXG4gICAgICAnaWdvLmdlby5leHBvcnQucG9wdXBCbG9ja2VkLnRpdGxlJyxcclxuICAgICAgeyB0aW1lT3V0OiAyMDAwMCB9LFxyXG4gICAgICB7IGV4dHJhTWVzc2FnZSB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbkZpbGVFeHBvcnRFcnJvcihlcnJvcjogRXJyb3IpIHtcclxuICAgIHRoaXMubG9hZGluZyQubmV4dChmYWxzZSk7XHJcbiAgICBoYW5kbGVGaWxlRXhwb3J0RXJyb3IoZXJyb3IsIHRoaXMubWVzc2FnZVNlcnZpY2UpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkQ29uZmlnKCkge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnLmdldENvbmZpZygnaW1wb3J0RXhwb3J0LmZvcmNlTmFtaW5nJykgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmZvcmNlTmFtaW5nID0gdGhpcy5jb25maWcuZ2V0Q29uZmlnKCdpbXBvcnRFeHBvcnQuZm9yY2VOYW1pbmcnKTtcclxuICAgIH1cclxuICAgIHRoaXMuY29tcHV0ZUZvcm1hdHMoKTtcclxuICAgIHRoaXMubG9hZEVuY29kaW5ncygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGVuY29kaW5nRGVmYXVsdFZhbHVlKGZvcm1hdDogRXhwb3J0Rm9ybWF0KSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIGZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LkNTVmNvbW1hIHx8XHJcbiAgICAgIGZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LkNTVnNlbWljb2xvblxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgZW5jb2Rpbmc6IEVuY29kaW5nRm9ybWF0LkxBVElOMSB9KTtcclxuICAgICAgcmV0dXJuIEVuY29kaW5nRm9ybWF0LkxBVElOMTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgZW5jb2Rpbmc6IEVuY29kaW5nRm9ybWF0LlVURjggfSk7XHJcbiAgICAgIHJldHVybiBFbmNvZGluZ0Zvcm1hdC5VVEY4O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkRW5jb2RpbmdzKCkge1xyXG4gICAgdGhpcy5lbmNvZGluZ3MkLm5leHQoRW5jb2RpbmdGb3JtYXQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb21wdXRlRm9ybWF0cyhsYXllcnM/OiBBbnlMYXllcltdKSB7XHJcbiAgICBsZXQgYXBwbGllZGZvcm1hdHM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXMoRXhwb3J0Rm9ybWF0KTtcclxuICAgIGNvbnN0IGZvcm1hdHNUeXBlID0ge1xyXG4gICAgICBvbmx5VXJsOiBmYWxzZSxcclxuICAgICAgb25seVZlY3RvcjogZmFsc2UsXHJcbiAgICAgIHZlY3RvckFuZFVybDogZmFsc2UsXHJcbiAgICAgIGN1c3RvbUxpc3Q6IGZhbHNlXHJcbiAgICB9O1xyXG4gICAgY29uc3QgY3VzdG9tTGlzdCA9IFtdO1xyXG4gICAgaWYgKGxheWVycyAmJiBsYXllcnMubGVuZ3RoKSB7XHJcbiAgICAgIGxheWVycy5mb3JFYWNoKChsYXllcikgPT4ge1xyXG4gICAgICAgIGlmICghbGF5ZXIpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5kb3dubG9hZD8uYWxsb3dlZEZvcm1hdHMpIHtcclxuICAgICAgICAgIGZvcm1hdHNUeXBlLmN1c3RvbUxpc3QgPSB0cnVlO1xyXG4gICAgICAgICAgY3VzdG9tTGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgbGF5ZXI6IGxheWVyLnRpdGxlLFxyXG4gICAgICAgICAgICBmb3JtYXRzOiB0aGlzLnZhbGlkYXRlTGlzdEZvcm1hdChcclxuICAgICAgICAgICAgICBsYXllci5kYXRhU291cmNlLm9wdGlvbnMuZG93bmxvYWQuYWxsb3dlZEZvcm1hdHNcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICEobGF5ZXIgaW5zdGFuY2VvZiBWZWN0b3JMYXllcikgJiZcclxuICAgICAgICAgIGxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5kb3dubG9hZCAmJlxyXG4gICAgICAgICAgbGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLmRvd25sb2FkLnVybFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgZm9ybWF0c1R5cGUub25seVVybCA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgIGxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5kb3dubG9hZCAmJlxyXG4gICAgICAgICAgKGxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5kb3dubG9hZC51cmwgfHxcclxuICAgICAgICAgICAgbGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLmRvd25sb2FkLmR5bmFtaWNVcmwpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBmb3JtYXRzVHlwZS52ZWN0b3JBbmRVcmwgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobGF5ZXIgaW5zdGFuY2VvZiBWZWN0b3JMYXllcikge1xyXG4gICAgICAgICAgZm9ybWF0c1R5cGUub25seVZlY3RvciA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmIChmb3JtYXRzVHlwZS5vbmx5VXJsID09PSB0cnVlICYmIGZvcm1hdHNUeXBlLm9ubHlWZWN0b3IgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgYXBwbGllZGZvcm1hdHMgPSBbJ1VSTCddO1xyXG4gICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgIGZvcm1hdHNUeXBlLm9ubHlWZWN0b3IgPT09IHRydWUgJiZcclxuICAgICAgICBmb3JtYXRzVHlwZS5vbmx5VXJsID09PSBmYWxzZVxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLmNvbXB1dGVGb3JtYXRzKCk7IC8vIHJlc2V0XHJcbiAgICAgICAgaWYgKEV4cG9ydEZvcm1hdC5VUkwgaW4gdGhpcy5mb3JtYXRzJC52YWx1ZSkge1xyXG4gICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZm9ybWF0cyQudmFsdWUpLmZpbHRlcihcclxuICAgICAgICAgICAgKGtleSkgPT4ga2V5ICE9PSAnVVJMJ1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGFwcGxpZWRmb3JtYXRzID0ga2V5cztcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgZm9ybWF0c1R5cGUudmVjdG9yQW5kVXJsID09PSB0cnVlICYmXHJcbiAgICAgICAgZm9ybWF0c1R5cGUub25seVVybCA9PT0gZmFsc2UgJiZcclxuICAgICAgICBmb3JtYXRzVHlwZS5vbmx5VmVjdG9yID09PSBmYWxzZVxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLmNvbXB1dGVGb3JtYXRzKCk7IC8vIHJlc2V0XHJcbiAgICAgICAgaWYgKCEoRXhwb3J0Rm9ybWF0LlVSTCBpbiB0aGlzLmZvcm1hdHMkLnZhbHVlKSkge1xyXG4gICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZm9ybWF0cyQudmFsdWUpO1xyXG4gICAgICAgICAga2V5cy5wdXNoKCdVUkwnKTtcclxuICAgICAgICAgIGFwcGxpZWRmb3JtYXRzID0ga2V5cztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IGNvbmZpZ0ltcG9ydEV4cG9ydEZvcm1hdHMgPSB0aGlzLmNvbmZpZy5nZXRDb25maWcoXHJcbiAgICAgICdpbXBvcnRFeHBvcnQuZm9ybWF0cydcclxuICAgICk7XHJcbiAgICBpZiAoY29uZmlnSW1wb3J0RXhwb3J0Rm9ybWF0cykge1xyXG4gICAgICBjb25zdCB2YWxpZGF0ZWRMaXN0Rm9ybWF0ID0gdGhpcy52YWxpZGF0ZUxpc3RGb3JtYXQoXHJcbiAgICAgICAgY29uZmlnSW1wb3J0RXhwb3J0Rm9ybWF0c1xyXG4gICAgICApO1xyXG4gICAgICBhcHBsaWVkZm9ybWF0cyA9IGFwcGxpZWRmb3JtYXRzLmZpbHRlcigoYWYpID0+XHJcbiAgICAgICAgdmFsaWRhdGVkTGlzdEZvcm1hdC5pbmNsdWRlcyhhZilcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmIChmb3JtYXRzVHlwZS5jdXN0b21MaXN0KSB7XHJcbiAgICAgIGxldCBjb21tb25Gb3JtYXRzO1xyXG4gICAgICBjb25zdCBsYXllcnNXaXRoQ3VzdG9tRm9ybWF0cyA9IFtdO1xyXG4gICAgICBsZXQgcHJldmlvdXNDdXN0b21MaXN0Rm9ybWF0cyA9IGN1c3RvbUxpc3RbMF0uZm9ybWF0cztcclxuICAgICAgY3VzdG9tTGlzdC5tYXAoKGxpc3QpID0+IHtcclxuICAgICAgICBsYXllcnNXaXRoQ3VzdG9tRm9ybWF0cy5wdXNoKGxpc3QubGF5ZXIpO1xyXG4gICAgICAgIGNvbW1vbkZvcm1hdHMgPSBsaXN0LmZvcm1hdHMuZmlsdGVyKCh2YWx1ZSkgPT5cclxuICAgICAgICAgIHByZXZpb3VzQ3VzdG9tTGlzdEZvcm1hdHMuaW5jbHVkZXModmFsdWUpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBwcmV2aW91c0N1c3RvbUxpc3RGb3JtYXRzID0gbGlzdC5mb3JtYXRzO1xyXG4gICAgICB9KTtcclxuICAgICAgY29uc3QgZmluYWxGb3JtYXRzID0gY29tbW9uRm9ybWF0cy5maWx0ZXIoKHZhbHVlKSA9PlxyXG4gICAgICAgIGFwcGxpZWRmb3JtYXRzLmluY2x1ZGVzKHZhbHVlKVxyXG4gICAgICApO1xyXG4gICAgICBpZiAoZmluYWxGb3JtYXRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLmZvcm1hdHMkLm5leHQoc3RyRW51bShmaW5hbEZvcm1hdHMpKTtcclxuXHJcbiAgICAgICAgaWYgKGxheWVycyAmJiBsYXllcnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICBpZiAobGF5ZXJzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hbGVydChcclxuICAgICAgICAgICAgICAnaWdvLmdlby5leHBvcnQuY3VzdG9tTGlzdC50ZXh0JyxcclxuICAgICAgICAgICAgICAnaWdvLmdlby5leHBvcnQuY3VzdG9tTGlzdC50aXRsZScsXHJcbiAgICAgICAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgIHsgdmFsdWU6IGxheWVyc1dpdGhDdXN0b21Gb3JtYXRzLmpvaW4oKSB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZm9ybWF0cyQubmV4dChbXSk7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hbGVydChcclxuICAgICAgICAgICdpZ28uZ2VvLmV4cG9ydC5ub0Zvcm1hdC50ZXh0JyxcclxuICAgICAgICAgICdpZ28uZ2VvLmV4cG9ydC5ub0Zvcm1hdC50aXRsZSdcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZm9ybWF0cyQubmV4dChzdHJFbnVtKGFwcGxpZWRmb3JtYXRzKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHZhbGlkYXRlTGlzdEZvcm1hdChmb3JtYXRzOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiBmb3JtYXRzXHJcbiAgICAgIC5maWx0ZXIoKGZvcm1hdCkgPT4ge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGZvcm1hdC50b1VwcGVyQ2FzZSgpID09PSBFeHBvcnRGb3JtYXQuQ1NWY29tbWEudG9VcHBlckNhc2UoKSB8fFxyXG4gICAgICAgICAgZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5DU1ZzZW1pY29sb24udG9VcHBlckNhc2UoKSB8fFxyXG4gICAgICAgICAgZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5HTUwudG9VcHBlckNhc2UoKSB8fFxyXG4gICAgICAgICAgZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5HUFgudG9VcHBlckNhc2UoKSB8fFxyXG4gICAgICAgICAgZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5HZW9KU09OLnRvVXBwZXJDYXNlKCkgfHxcclxuICAgICAgICAgIGZvcm1hdC50b1VwcGVyQ2FzZSgpID09PSBFeHBvcnRGb3JtYXQuS01MLnRvVXBwZXJDYXNlKCkgfHxcclxuICAgICAgICAgIGZvcm1hdC50b1VwcGVyQ2FzZSgpID09PSBFeHBvcnRGb3JtYXQuU2hhcGVmaWxlLnRvVXBwZXJDYXNlKCkgfHxcclxuICAgICAgICAgIGZvcm1hdC50b1VwcGVyQ2FzZSgpID09PSBFeHBvcnRGb3JtYXQuVVJMLnRvVXBwZXJDYXNlKClcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHJldHVybiBmb3JtYXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICAubWFwKChmb3JtYXQpID0+IHtcclxuICAgICAgICBpZiAoZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5DU1Zjb21tYS50b1VwcGVyQ2FzZSgpKSB7XHJcbiAgICAgICAgICBmb3JtYXQgPSBFeHBvcnRGb3JtYXQuQ1NWY29tbWE7XHJcbiAgICAgICAgICByZXR1cm4gZm9ybWF0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5DU1ZzZW1pY29sb24udG9VcHBlckNhc2UoKSkge1xyXG4gICAgICAgICAgZm9ybWF0ID0gRXhwb3J0Rm9ybWF0LkNTVnNlbWljb2xvbjtcclxuICAgICAgICAgIHJldHVybiBmb3JtYXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChmb3JtYXQudG9VcHBlckNhc2UoKSA9PT0gRXhwb3J0Rm9ybWF0LkdNTC50b1VwcGVyQ2FzZSgpKSB7XHJcbiAgICAgICAgICBmb3JtYXQgPSBFeHBvcnRGb3JtYXQuR01MO1xyXG4gICAgICAgICAgcmV0dXJuIGZvcm1hdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZvcm1hdC50b1VwcGVyQ2FzZSgpID09PSBFeHBvcnRGb3JtYXQuR1BYLnRvVXBwZXJDYXNlKCkpIHtcclxuICAgICAgICAgIGZvcm1hdCA9IEV4cG9ydEZvcm1hdC5HUFg7XHJcbiAgICAgICAgICByZXR1cm4gZm9ybWF0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5HZW9KU09OLnRvVXBwZXJDYXNlKCkpIHtcclxuICAgICAgICAgIGZvcm1hdCA9IEV4cG9ydEZvcm1hdC5HZW9KU09OO1xyXG4gICAgICAgICAgcmV0dXJuIGZvcm1hdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZvcm1hdC50b1VwcGVyQ2FzZSgpID09PSBFeHBvcnRGb3JtYXQuS01MLnRvVXBwZXJDYXNlKCkpIHtcclxuICAgICAgICAgIGZvcm1hdCA9IEV4cG9ydEZvcm1hdC5LTUw7XHJcbiAgICAgICAgICByZXR1cm4gZm9ybWF0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5TaGFwZWZpbGUudG9VcHBlckNhc2UoKSkge1xyXG4gICAgICAgICAgZm9ybWF0ID0gRXhwb3J0Rm9ybWF0LlNoYXBlZmlsZTtcclxuICAgICAgICAgIHJldHVybiBmb3JtYXQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5VUkwudG9VcHBlckNhc2UoKSkge1xyXG4gICAgICAgICAgZm9ybWF0ID0gRXhwb3J0Rm9ybWF0LlVSTDtcclxuICAgICAgICAgIHJldHVybiBmb3JtYXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBtb2RlQ2hhbmdlZChtb2RlKSB7XHJcbiAgICB0aGlzLnNlbGVjdE1vZGUuZW1pdChtb2RlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25GaWxlRXhwb3J0U3VjY2VzcygpIHtcclxuICAgIGhhbmRsZUZpbGVFeHBvcnRTdWNjZXNzKHRoaXMubWVzc2FnZVNlcnZpY2UpO1xyXG4gIH1cclxuXHJcbiAgb25JbXBvcnRFeHBvcnRDaGFuZ2UoZXZlbnQpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRNb2RlID0gZXZlbnQudmFsdWU7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJpbXBvcnQtZXhwb3J0LXRvZ2dsZSBtYXQtdHlwb2dyYXBoeVwiPlxyXG4gIDxtYXQtYnV0dG9uLXRvZ2dsZS1ncm91cFxyXG4gICAgW3ZhbHVlXT1cInNlbGVjdGVkTW9kZVwiXHJcbiAgICAoY2hhbmdlKT1cIm9uSW1wb3J0RXhwb3J0Q2hhbmdlKCRldmVudClcIlxyXG4gID5cclxuICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSBbdmFsdWVdPVwiJ2ltcG9ydCdcIj5cclxuICAgICAge3sgJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5pbXBvcnRUYWJUaXRsZScgfCB0cmFuc2xhdGUgfX1cclxuICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XHJcbiAgICA8bWF0LWJ1dHRvbi10b2dnbGUgW3ZhbHVlXT1cIidleHBvcnQnXCI+XHJcbiAgICAgIHt7ICdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uZXhwb3J0VGFiVGl0bGUnIHwgdHJhbnNsYXRlIH19XHJcbiAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxyXG4gIDwvbWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXA+XHJcbjwvZGl2PlxyXG5cclxuPGZvcm1cclxuICBjbGFzcz1cImlnby1mb3JtXCJcclxuICBbZm9ybUdyb3VwXT1cImltcG9ydEZvcm1cIlxyXG4gICpuZ0lmPVwic2VsZWN0ZWRNb2RlID09PSAnaW1wb3J0J1wiXHJcbj5cclxuICA8ZGl2IGNsYXNzPVwiaWdvLWlucHV0LWNvbnRhaW5lclwiPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8bWF0LWxhYmVsPnt7XHJcbiAgICAgICAgJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5pbXBvcnRQcm9qUGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXHJcbiAgICAgIH19PC9tYXQtbGFiZWw+XHJcbiAgICAgIDxtYXQtc2VsZWN0IFsodmFsdWUpXT1cImlucHV0UHJvalwiPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uXHJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgcHJvamVjdGlvbiBvZiBwcm9qZWN0aW9ucyQgfCBhc3luY1wiXHJcbiAgICAgICAgICBbdmFsdWVdPVwicHJvamVjdGlvblwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8cCBtYXRMaXN0SXRlbVRpdGxlICpuZ0lmPVwicHJvamVjdGlvbi50cmFuc2xhdGVLZXlcIj5cclxuICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICAnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLnByb2plY3Rpb25zLicgKyBwcm9qZWN0aW9uLnRyYW5zbGF0ZUtleVxyXG4gICAgICAgICAgICAgICAgfCB0cmFuc2xhdGU6IHByb2plY3Rpb25cclxuICAgICAgICAgICAgfX1cclxuICAgICAgICAgIDwvcD5cclxuICAgICAgICAgIDxwIG1hdExpc3RJdGVtVGl0bGUgKm5nSWY9XCIhcHJvamVjdGlvbi50cmFuc2xhdGVLZXlcIj5cclxuICAgICAgICAgICAge3sgcHJvamVjdGlvbi5hbGlhcyB9fVxyXG4gICAgICAgICAgPC9wPlxyXG4gICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdlxyXG4gICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcclxuICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxyXG4gICAgW21hdFRvb2x0aXBdPVwiXHJcbiAgICAgIGltcG9ydEZvcm0uaW52YWxpZFxyXG4gICAgICAgID8gKCdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0ucHJvamVjdGlvbnMuY2hvb3NlJyB8IHRyYW5zbGF0ZSlcclxuICAgICAgICA6ICgnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmltcG9ydEJ1dHRvbicgfCB0cmFuc2xhdGUpXHJcbiAgICBcIlxyXG4gICAgY2xhc3M9XCJpZ28tZm9ybS1idXR0b24tZ3JvdXBcIlxyXG4gID5cclxuICAgIDxidXR0b25cclxuICAgICAgW2Rpc2FibGVkXT1cImltcG9ydEZvcm0uaW52YWxpZCB8fCAobG9hZGluZyQgfCBhc3luYylcIlxyXG4gICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgKGNsaWNrKT1cImZpbGVJbnB1dC5jbGljaygpXCJcclxuICAgID5cclxuICAgICAge3sgJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5pbXBvcnRCdXR0b24nIHwgdHJhbnNsYXRlIH19XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxpZ28tc3Bpbm5lciBbc2hvd25dPVwibG9hZGluZyQgfCBhc3luY1wiPjwvaWdvLXNwaW5uZXI+XHJcbiAgICA8aW5wdXRcclxuICAgICAgaGlkZGVuXHJcbiAgICAgICNmaWxlSW5wdXRcclxuICAgICAgdHlwZT1cImZpbGVcIlxyXG4gICAgICBbc3R5bGUuZGlzcGxheV09XCInbm9uZSdcIlxyXG4gICAgICAoY2xpY2spPVwiZmlsZUlucHV0LnZhbHVlID0gbnVsbFwiXHJcbiAgICAgIChjaGFuZ2UpPVwiaW1wb3J0RmlsZXMoJGV2ZW50LnRhcmdldC5maWxlcylcIlxyXG4gICAgLz5cclxuICA8L2Rpdj5cclxuPC9mb3JtPlxyXG48c2VjdGlvbiBjbGFzcz1cIm1hdC10eXBvZ3JhcGh5XCIgKm5nSWY9XCJzZWxlY3RlZE1vZGUgPT09ICdpbXBvcnQnXCI+XHJcbiAgPGRpdiAqbmdJZj1cImltcG9ydEh0bWxDbGFyaWZpY2F0aW9ucyA9PT0gJydcIj5cclxuICAgIDxoND57eyAnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmltcG9ydENsYXJpZmljYXRpb25zJyB8IHRyYW5zbGF0ZSB9fTwvaDQ+XHJcbiAgICA8dWw+XHJcbiAgICAgIDxsaT5cclxuICAgICAgICB7e1xyXG4gICAgICAgICAgJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5pbXBvcnRTaXplTWF4J1xyXG4gICAgICAgICAgICB8IHRyYW5zbGF0ZTogeyBzaXplOiBmaWxlU2l6ZU1iIH1cclxuICAgICAgICB9fVxyXG4gICAgICA8L2xpPlxyXG4gICAgICA8bGk+XHJcbiAgICAgICAge3sgJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5pbXBvcnRGb3JtYXRBdXRob3JpemVkJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICA8L2xpPlxyXG4gICAgICA8bGk+e3sgJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5pbXBvcnRTaHBaaXAnIHwgdHJhbnNsYXRlIH19PC9saT5cclxuICAgIDwvdWw+XHJcbiAgPC9kaXY+XHJcbiAgPGlnby1jdXN0b20taHRtbFxyXG4gICAgKm5nSWY9XCJpbXBvcnRIdG1sQ2xhcmlmaWNhdGlvbnMgIT09ICcnXCJcclxuICAgIGNsYXNzPVwibWF0LXR5cG9ncmFwaHlcIlxyXG4gICAgW2h0bWxdPVwiaW1wb3J0SHRtbENsYXJpZmljYXRpb25zXCJcclxuICA+XHJcbiAgPC9pZ28tY3VzdG9tLWh0bWw+XHJcbjwvc2VjdGlvbj5cclxuXHJcbjxzZWN0aW9uXHJcbiAgY2xhc3M9XCJtYXQtdHlwb2dyYXBoeVwiXHJcbiAgKm5nSWY9XCIoZXhwb3J0YWJsZUxheWVycyQgfCBhc3luYykubGVuZ3RoID09PSAwICYmIHNlbGVjdGVkTW9kZSA9PT0gJ2V4cG9ydCdcIlxyXG4+XHJcbiAgPGg0Pnt7ICdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uZXhwb3J0Tm9MYXllcnNFeHBvcnRhYmxlJyB8IHRyYW5zbGF0ZSB9fTwvaDQ+XHJcbjwvc2VjdGlvbj5cclxuXHJcbjxmb3JtXHJcbiAgY2xhc3M9XCJpZ28tZm9ybVwiXHJcbiAgW2Zvcm1Hcm91cF09XCJmb3JtXCJcclxuICAqbmdJZj1cIihleHBvcnRhYmxlTGF5ZXJzJCB8IGFzeW5jKS5sZW5ndGggPiAwICYmIHNlbGVjdGVkTW9kZSA9PT0gJ2V4cG9ydCdcIlxyXG4+XHJcbiAgPGRpdiBjbGFzcz1cImlnby1pbnB1dC1jb250YWluZXJcIj5cclxuICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgPG1hdC1sYWJlbD57e1xyXG4gICAgICAgICdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uZXhwb3J0TGF5ZXJQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcclxuICAgICAgfX08L21hdC1sYWJlbD5cclxuICAgICAgPG1hdC1zZWxlY3QgWyh2YWx1ZSldPVwibGF5ZXJzXCIgbXVsdGlwbGU+XHJcbiAgICAgICAgPG1hdC1zZWxlY3QtdHJpZ2dlcj5cclxuICAgICAgICAgIHt7IGxheWVycy5sZW5ndGggPyBnZXRMYXllclRpdGxlQnlJZChsYXllcnNbMF0pIDogJycgfX1cclxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwibGF5ZXJzLmxlbmd0aCA+IDFcIiBjbGFzcz1cImV4cG9ydC1zZWxlY3QtdHJpZ2dlclwiPlxyXG4gICAgICAgICAgICAoK3t7IGxheWVycy5sZW5ndGggLSAxIH19XHJcbiAgICAgICAgICAgIHt7XHJcbiAgICAgICAgICAgICAgKGxheWVycz8ubGVuZ3RoID09PSAyXHJcbiAgICAgICAgICAgICAgICA/ICdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0ub3RoZXInXHJcbiAgICAgICAgICAgICAgICA6ICdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0ub3RoZXJzJ1xyXG4gICAgICAgICAgICAgICkgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgfX0pXHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9tYXQtc2VsZWN0LXRyaWdnZXI+XHJcbiAgICAgICAgPG1hdC1vcHRpb25cclxuICAgICAgICAgICpuZ0Zvcj1cImxldCBsYXllciBvZiBleHBvcnRhYmxlTGF5ZXJzJCB8IGFzeW5jXCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgJ2lnby1leHBvcnQtbGF5ZXItbWF0LW9wdGlvbic6IGxheWVySGFzU2VsZWN0ZWRGZWF0dXJlcyhsYXllcilcclxuICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgW3ZhbHVlXT1cImxheWVyLmlkXCJcclxuICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxwIG1hdExpc3RJdGVtVGl0bGU+e3sgbGF5ZXIudGl0bGUgfX08L3A+XHJcbiAgICAgICAgICA8cCBtYXRMaXN0SXRlbVRpdGxlPlxyXG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZVxyXG4gICAgICAgICAgICAgICpuZ0lmPVwibGF5ZXJIYXNTZWxlY3RlZEZlYXR1cmVzKGxheWVyKVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9ubHlTZWxlY3RlZENsaWNrKCRldmVudCwgbGF5ZXIuaWQpXCJcclxuICAgICAgICAgICAgICAoY2hlY2tlZCk9XCJpbkxheWVyc0lkVG9FeHBvcnRTZWxlY3Rpb25Pbmx5KGxheWVyKVwiXHJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbmx5U2VsZWN0ZWQoJGV2ZW50LCBsYXllci5pZClcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPHNtYWxsPnt7XHJcbiAgICAgICAgICAgICAgICAnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmV4cG9ydFNlbGVjdGVkRmVhdHVyZScgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgICB9fTwvc21hbGw+XHJcbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgICAgICAgIDwvcD5cclxuICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJpZ28taW5wdXQtY29udGFpbmVyXCI+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxtYXQtbGFiZWw+e3tcclxuICAgICAgICAnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmV4cG9ydEZvcm1hdFBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVxyXG4gICAgICB9fTwvbWF0LWxhYmVsPlxyXG4gICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJmb3JtYXRcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKGZvcm1hdHMkIHwgYXN5bmMpLmxlbmd0aCAhPT0gMFwiPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb25cclxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGZvcm1hdCBvZiBmb3JtYXRzJCB8IGFzeW5jIHwga2V5dmFsdWVcIlxyXG4gICAgICAgICAgICBbdmFsdWVdPVwiZm9ybWF0LmtleVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHt7ICdpZ28uZ2VvLmV4cG9ydC5mb3JtYXQuJyArIGZvcm1hdC52YWx1ZSB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0lmPVwiKGZvcm1hdHMkIHwgYXN5bmMpLmxlbmd0aCA9PT0gMFwiIGRpc2FibGVkPVwidHJ1ZVwiPlxyXG4gICAgICAgICAge3sgJ2lnby5nZW8uZXhwb3J0Lm5vRm9ybWF0LnRpdGxlJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdlxyXG4gICAgY2xhc3M9XCJpZ28taW5wdXQtY29udGFpbmVyXCJcclxuICAgICpuZ0lmPVwiZm9yY2VOYW1pbmcgJiYgZm9ybS52YWx1ZS5mb3JtYXQgIT09ICdVUkwnXCJcclxuICA+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxpbnB1dFxyXG4gICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiXHJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJ7e1xyXG4gICAgICAgICAgJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5leHBvcnRGaWxlTmFtZVBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVxyXG4gICAgICAgIH19XCJcclxuICAgICAgLz5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXZcclxuICAgIGNsYXNzPVwiaWdvLWlucHV0LWNvbnRhaW5lclwiXHJcbiAgICAqbmdJZj1cIlxyXG4gICAgICBmb3JtLnZhbHVlLmZvcm1hdCA9PT0gJ0NTVmNvbW1hJyB8fCBmb3JtLnZhbHVlLmZvcm1hdCA9PT0gJ0NTVnNlbWljb2xvbidcclxuICAgIFwiXHJcbiAgPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8bWF0LWxhYmVsPnt7XHJcbiAgICAgICAgJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5lbmNvZGluZ1BsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVxyXG4gICAgICB9fTwvbWF0LWxhYmVsPlxyXG4gICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJlbmNvZGluZ1wiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoZW5jb2RpbmdzJCB8IGFzeW5jKS5sZW5ndGggIT09IDBcIj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uXHJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBlbmNvZGluZyBvZiBlbmNvZGluZ3MkIHwgYXN5bmMgfCBrZXl2YWx1ZVwiXHJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJlbmNvZGluZy5rZXlcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICB7eyAnaWdvLmdlby5leHBvcnQuZW5jb2RpbmcuJyArIGVuY29kaW5nLnZhbHVlIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXZcclxuICAgIGNsYXNzPVwiZXhwb3J0LWNvbWJpbmUtbGF5ZXJzIG1hdC10eXBvZ3JhcGh5XCJcclxuICAgICpuZ0lmPVwiXHJcbiAgICAgIGxheWVycy5sZW5ndGggPiAxICYmXHJcbiAgICAgIChmb3JtLnZhbHVlLmZvcm1hdCA9PT0gJ0NTVmNvbW1hJyB8fCBmb3JtLnZhbHVlLmZvcm1hdCA9PT0gJ0NTVnNlbWljb2xvbicpXHJcbiAgICBcIlxyXG4gID5cclxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlXHJcbiAgICAgIGZvcm1Db250cm9sTmFtZT1cImNvbWJpbmVMYXllcnNcIlxyXG4gICAgICBbbGFiZWxQb3NpdGlvbl09XCInYmVmb3JlJ1wiXHJcbiAgICA+XHJcbiAgICAgIHt7ICdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uZXhwb3J0Q29tYmluZVJlc3VsdHMnIHwgdHJhbnNsYXRlIH19XHJcbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXZcclxuICAgIGNsYXNzPVwiZXhwb3J0LXNlcGFyYXRvciBtYXQtdHlwb2dyYXBoeVwiXHJcbiAgICAqbmdJZj1cIlxyXG4gICAgICBsYXllcnMubGVuZ3RoID4gMSAmJlxyXG4gICAgICAoZm9ybS52YWx1ZS5mb3JtYXQgPT09ICdDU1Zjb21tYScgfHxcclxuICAgICAgICBmb3JtLnZhbHVlLmZvcm1hdCA9PT0gJ0NTVnNlbWljb2xvbicpICYmXHJcbiAgICAgIGZvcm0udmFsdWUuY29tYmluZUxheWVyc1xyXG4gICAgXCJcclxuICA+XHJcbiAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9XCJzZXBhcmF0b3JcIiBbbGFiZWxQb3NpdGlvbl09XCInYmVmb3JlJ1wiPlxyXG4gICAgICB7eyAnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmV4cG9ydFNlcGFyYXRvcicgfCB0cmFuc2xhdGUgfX1cclxuICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdlxyXG4gICAgY2xhc3M9XCJleHBvcnQtb3B0aW9ucyBtYXQtdHlwb2dyYXBoeVwiXHJcbiAgICAqbmdJZj1cImZvcm0udmFsdWUuZm9ybWF0ICE9PSAnVVJMJ1wiXHJcbiAgPlxyXG4gICAgPG1hdC1zbGlkZS10b2dnbGVcclxuICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZmVhdHVyZUluTWFwRXh0ZW50XCJcclxuICAgICAgW2xhYmVsUG9zaXRpb25dPVwiJ2JlZm9yZSdcIlxyXG4gICAgPlxyXG4gICAgICB7eyAnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmV4cG9ydEZlYXR1cmVJbkV4dGVudCcgfCB0cmFuc2xhdGUgfX1cclxuICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImlnby1mb3JtLWJ1dHRvbi1ncm91cFwiPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgW2Rpc2FibGVkXT1cIiFmb3JtLnZhbGlkIHx8IChsb2FkaW5nJCB8IGFzeW5jKVwiXHJcbiAgICAgIChjbGljayk9XCJoYW5kbGVFeHBvcnRGb3JtU3VibWl0KGZvcm0udmFsdWUpXCJcclxuICAgID5cclxuICAgICAge3tcclxuICAgICAgICBmb3JtLnZhbHVlLmZvcm1hdCAhPT0gJ1VSTCdcclxuICAgICAgICAgID8gKCdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uZXhwb3J0QnV0dG9uJyB8IHRyYW5zbGF0ZSlcclxuICAgICAgICAgIDogZm9ybS52YWx1ZS5sYXllcnMubGVuZ3RoID4gMVxyXG4gICAgICAgICAgPyAoJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5leHBvcnRCdXR0b25MaW5rcycgfCB0cmFuc2xhdGUpXHJcbiAgICAgICAgICA6ICgnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmV4cG9ydEJ1dHRvbkxpbmsnIHwgdHJhbnNsYXRlKVxyXG4gICAgICB9fVxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8aWdvLXNwaW5uZXIgW3Nob3duXT1cImxvYWRpbmckIHwgYXN5bmNcIj48L2lnby1zcGlubmVyPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8aWdvLWN1c3RvbS1odG1sXHJcbiAgICAqbmdJZj1cImV4cG9ydEh0bWxDbGFyaWZpY2F0aW9ucyAhPT0gJydcIlxyXG4gICAgY2xhc3M9XCJtYXQtdHlwb2dyYXBoeVwiXHJcbiAgICBbaHRtbF09XCJleHBvcnRIdG1sQ2xhcmlmaWNhdGlvbnNcIlxyXG4gID5cclxuICA8L2lnby1jdXN0b20taHRtbD5cclxuPC9mb3JtPlxyXG4iXX0=