@igo2/geo 18.0.0 → 18.0.1-next.2

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 (510) hide show
  1. package/fesm2022/igo2-geo.mjs +684 -709
  2. package/fesm2022/igo2-geo.mjs.map +1 -1
  3. package/lib/offline/geoDB/geoDB.service.d.ts +1 -1
  4. package/lib/offline/layerDB/layerDB.service.d.ts +1 -1
  5. package/lib/style/style-list/style-list.provider.d.ts +1 -8
  6. package/lib/style/style-list/style-list.service.d.ts +1 -1
  7. package/package.json +15 -17
  8. package/src/lib/layer/layer-list/layer-list.theme.scss +2 -1
  9. package/src/lib/map/menu-button/menu-button.theming.scss +3 -3
  10. package/src/style/style.scss +1 -1
  11. package/esm2022/igo2-geo.mjs +0 -5
  12. package/esm2022/lib/catalog/catalog-browser/catalog-browser-group.component.mjs +0 -234
  13. package/esm2022/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs +0 -272
  14. package/esm2022/lib/catalog/catalog-browser/catalog-browser.component.mjs +0 -246
  15. package/esm2022/lib/catalog/catalog-browser/catalog-browser.module.mjs +0 -19
  16. package/esm2022/lib/catalog/catalog-library/add-catalog-dialog.component.mjs +0 -136
  17. package/esm2022/lib/catalog/catalog-library/catalog-library-item.component.mjs +0 -60
  18. package/esm2022/lib/catalog/catalog-library/catalog-library.component.mjs +0 -232
  19. package/esm2022/lib/catalog/catalog-library/catalog-library.module.mjs +0 -24
  20. package/esm2022/lib/catalog/catalog-library/index.mjs +0 -4
  21. package/esm2022/lib/catalog/catalog.module.mjs +0 -26
  22. package/esm2022/lib/catalog/index.mjs +0 -6
  23. package/esm2022/lib/catalog/shared/catalog.abstract.mjs +0 -32
  24. package/esm2022/lib/catalog/shared/catalog.enum.mjs +0 -16
  25. package/esm2022/lib/catalog/shared/catalog.interface.mjs +0 -2
  26. package/esm2022/lib/catalog/shared/catalog.service.mjs +0 -706
  27. package/esm2022/lib/catalog/shared/catalogs.mjs +0 -75
  28. package/esm2022/lib/catalog/shared/index.mjs +0 -5
  29. package/esm2022/lib/datasource/index.mjs +0 -3
  30. package/esm2022/lib/datasource/shared/capabilities.interface.mjs +0 -17
  31. package/esm2022/lib/datasource/shared/capabilities.service.mjs +0 -441
  32. package/esm2022/lib/datasource/shared/datasource.service.mjs +0 -258
  33. package/esm2022/lib/datasource/shared/datasources/any-datasource.interface.mjs +0 -2
  34. package/esm2022/lib/datasource/shared/datasources/any-datasource.mjs +0 -2
  35. package/esm2022/lib/datasource/shared/datasources/arcgisrest-datasource.interface.mjs +0 -2
  36. package/esm2022/lib/datasource/shared/datasources/arcgisrest-datasource.mjs +0 -222
  37. package/esm2022/lib/datasource/shared/datasources/carto-datasource.interface.mjs +0 -2
  38. package/esm2022/lib/datasource/shared/datasources/carto-datasource.mjs +0 -118
  39. package/esm2022/lib/datasource/shared/datasources/cluster-datasource.interface.mjs +0 -2
  40. package/esm2022/lib/datasource/shared/datasources/cluster-datasource.mjs +0 -24
  41. package/esm2022/lib/datasource/shared/datasources/data.service.mjs +0 -3
  42. package/esm2022/lib/datasource/shared/datasources/datasource.interface.mjs +0 -2
  43. package/esm2022/lib/datasource/shared/datasources/datasource.mjs +0 -41
  44. package/esm2022/lib/datasource/shared/datasources/feature-datasource.interface.mjs +0 -2
  45. package/esm2022/lib/datasource/shared/datasources/feature-datasource.mjs +0 -52
  46. package/esm2022/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.mjs +0 -2
  47. package/esm2022/lib/datasource/shared/datasources/imagearcgisrest-datasource.mjs +0 -70
  48. package/esm2022/lib/datasource/shared/datasources/index.mjs +0 -36
  49. package/esm2022/lib/datasource/shared/datasources/mvt-datasource.interface.mjs +0 -2
  50. package/esm2022/lib/datasource/shared/datasources/mvt-datasource.mjs +0 -33
  51. package/esm2022/lib/datasource/shared/datasources/osm-datasource.interface.mjs +0 -2
  52. package/esm2022/lib/datasource/shared/datasources/osm-datasource.mjs +0 -14
  53. package/esm2022/lib/datasource/shared/datasources/tilearcgisrest-datasource.interface.mjs +0 -2
  54. package/esm2022/lib/datasource/shared/datasources/tilearcgisrest-datasource.mjs +0 -60
  55. package/esm2022/lib/datasource/shared/datasources/tiledebug-datasource.interface.mjs +0 -2
  56. package/esm2022/lib/datasource/shared/datasources/tiledebug-datasource.mjs +0 -17
  57. package/esm2022/lib/datasource/shared/datasources/websocket-datasource.interface.mjs +0 -2
  58. package/esm2022/lib/datasource/shared/datasources/websocket-datasource.mjs +0 -56
  59. package/esm2022/lib/datasource/shared/datasources/wfs-datasource.interface.mjs +0 -2
  60. package/esm2022/lib/datasource/shared/datasources/wfs-datasource.mjs +0 -137
  61. package/esm2022/lib/datasource/shared/datasources/wfs.service.mjs +0 -170
  62. package/esm2022/lib/datasource/shared/datasources/wms-datasource.interface.mjs +0 -2
  63. package/esm2022/lib/datasource/shared/datasources/wms-datasource.mjs +0 -227
  64. package/esm2022/lib/datasource/shared/datasources/wms-wfs.utils.mjs +0 -224
  65. package/esm2022/lib/datasource/shared/datasources/wmts-datasource.interface.mjs +0 -2
  66. package/esm2022/lib/datasource/shared/datasources/wmts-datasource.mjs +0 -18
  67. package/esm2022/lib/datasource/shared/datasources/xyz-datasource.interface.mjs +0 -2
  68. package/esm2022/lib/datasource/shared/datasources/xyz-datasource.mjs +0 -11
  69. package/esm2022/lib/datasource/shared/index.mjs +0 -6
  70. package/esm2022/lib/datasource/shared/options/index.mjs +0 -5
  71. package/esm2022/lib/datasource/shared/options/options-api.interface.mjs +0 -2
  72. package/esm2022/lib/datasource/shared/options/options-api.providers.mjs +0 -15
  73. package/esm2022/lib/datasource/shared/options/options-api.service.mjs +0 -85
  74. package/esm2022/lib/datasource/shared/options/options.service.mjs +0 -3
  75. package/esm2022/lib/datasource/utils/index.mjs +0 -2
  76. package/esm2022/lib/datasource/utils/tilegrid.mjs +0 -20
  77. package/esm2022/lib/directions/directions-buttons/directions-buttons.component.mjs +0 -246
  78. package/esm2022/lib/directions/directions-buttons/index.mjs +0 -2
  79. package/esm2022/lib/directions/directions-inputs/directions-inputs.component.mjs +0 -312
  80. package/esm2022/lib/directions/directions-inputs/index.mjs +0 -2
  81. package/esm2022/lib/directions/directions-results/directions-results.component.mjs +0 -192
  82. package/esm2022/lib/directions/directions-results/index.mjs +0 -2
  83. package/esm2022/lib/directions/directions-sources/directions-source.interface.mjs +0 -5
  84. package/esm2022/lib/directions/directions-sources/directions-source.mjs +0 -3
  85. package/esm2022/lib/directions/directions-sources/directions-source.provider.mjs +0 -23
  86. package/esm2022/lib/directions/directions-sources/index.mjs +0 -5
  87. package/esm2022/lib/directions/directions-sources/osrm-directions-source.mjs +0 -159
  88. package/esm2022/lib/directions/directions.component.mjs +0 -437
  89. package/esm2022/lib/directions/directions.module.mjs +0 -46
  90. package/esm2022/lib/directions/directions.provider.mjs +0 -16
  91. package/esm2022/lib/directions/index.mjs +0 -8
  92. package/esm2022/lib/directions/shared/directions-source.service.mjs +0 -18
  93. package/esm2022/lib/directions/shared/directions.enum.mjs +0 -72
  94. package/esm2022/lib/directions/shared/directions.interface.mjs +0 -2
  95. package/esm2022/lib/directions/shared/directions.service.mjs +0 -239
  96. package/esm2022/lib/directions/shared/directions.utils.mjs +0 -522
  97. package/esm2022/lib/directions/shared/index.mjs +0 -6
  98. package/esm2022/lib/directions/shared/store.mjs +0 -21
  99. package/esm2022/lib/download/download-button/download-button.component.mjs +0 -48
  100. package/esm2022/lib/download/download-button/index.mjs +0 -2
  101. package/esm2022/lib/download/download.module.mjs +0 -24
  102. package/esm2022/lib/download/index.mjs +0 -3
  103. package/esm2022/lib/download/shared/download.interface.mjs +0 -2
  104. package/esm2022/lib/download/shared/download.service.mjs +0 -67
  105. package/esm2022/lib/download/shared/index.mjs +0 -3
  106. package/esm2022/lib/draw/draw/draw-layer-popup.component.mjs +0 -42
  107. package/esm2022/lib/draw/draw/draw-popup.component.mjs +0 -421
  108. package/esm2022/lib/draw/draw/draw-shorcuts.component.mjs +0 -28
  109. package/esm2022/lib/draw/draw/draw.component.mjs +0 -1136
  110. package/esm2022/lib/draw/draw/draw.module.mjs +0 -19
  111. package/esm2022/lib/draw/drawingTool.module.mjs +0 -18
  112. package/esm2022/lib/draw/index.mjs +0 -3
  113. package/esm2022/lib/draw/shared/draw-icon.service.mjs +0 -30
  114. package/esm2022/lib/draw/shared/draw.enum.mjs +0 -21
  115. package/esm2022/lib/draw/shared/draw.interface.mjs +0 -2
  116. package/esm2022/lib/draw/shared/draw.utils.mjs +0 -125
  117. package/esm2022/lib/draw/shared/index.mjs +0 -5
  118. package/esm2022/lib/environment/environment.interface.mjs +0 -2
  119. package/esm2022/lib/environment/index.mjs +0 -2
  120. package/esm2022/lib/feature/feature-details/feature-details.component.mjs +0 -306
  121. package/esm2022/lib/feature/feature-details/feature-details.directive.mjs +0 -56
  122. package/esm2022/lib/feature/feature-details/feature-details.module.mjs +0 -26
  123. package/esm2022/lib/feature/feature-details/index.mjs +0 -4
  124. package/esm2022/lib/feature/feature-form/feature-form.component.mjs +0 -101
  125. package/esm2022/lib/feature/feature-form/feature-form.module.mjs +0 -19
  126. package/esm2022/lib/feature/feature.module.mjs +0 -26
  127. package/esm2022/lib/feature/index.mjs +0 -5
  128. package/esm2022/lib/feature/shared/feature-store.utils.mjs +0 -28
  129. package/esm2022/lib/feature/shared/feature.enums.mjs +0 -9
  130. package/esm2022/lib/feature/shared/feature.interfaces.mjs +0 -2
  131. package/esm2022/lib/feature/shared/feature.utils.mjs +0 -332
  132. package/esm2022/lib/feature/shared/index.mjs +0 -8
  133. package/esm2022/lib/feature/shared/store.mjs +0 -143
  134. package/esm2022/lib/feature/shared/strategies/geo-properties.mjs +0 -216
  135. package/esm2022/lib/feature/shared/strategies/in-map-extent.mjs +0 -119
  136. package/esm2022/lib/feature/shared/strategies/in-map-resolution.mjs +0 -99
  137. package/esm2022/lib/feature/shared/strategies/index.mjs +0 -8
  138. package/esm2022/lib/feature/shared/strategies/loading-layer.mjs +0 -103
  139. package/esm2022/lib/feature/shared/strategies/loading.mjs +0 -136
  140. package/esm2022/lib/feature/shared/strategies/search.mjs +0 -158
  141. package/esm2022/lib/feature/shared/strategies/selection.mjs +0 -385
  142. package/esm2022/lib/feature/shared/strategies.utils.mjs +0 -37
  143. package/esm2022/lib/filter/filter.module.mjs +0 -131
  144. package/esm2022/lib/filter/index.mjs +0 -17
  145. package/esm2022/lib/filter/ogc-filter-button/index.mjs +0 -2
  146. package/esm2022/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +0 -141
  147. package/esm2022/lib/filter/ogc-filter-form/index.mjs +0 -2
  148. package/esm2022/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +0 -325
  149. package/esm2022/lib/filter/ogc-filter-selection/index.mjs +0 -2
  150. package/esm2022/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +0 -787
  151. package/esm2022/lib/filter/ogc-filter-time/index.mjs +0 -3
  152. package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.mjs +0 -201
  153. package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +0 -665
  154. package/esm2022/lib/filter/ogc-filterable-form/index.mjs +0 -2
  155. package/esm2022/lib/filter/ogc-filterable-form/ogc-filterable-form.component.mjs +0 -66
  156. package/esm2022/lib/filter/ogc-filterable-item/index.mjs +0 -2
  157. package/esm2022/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +0 -244
  158. package/esm2022/lib/filter/ogc-filterable-list/index.mjs +0 -3
  159. package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.mjs +0 -39
  160. package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs +0 -32
  161. package/esm2022/lib/filter/shared/filterable-datasource.pipe.mjs +0 -63
  162. package/esm2022/lib/filter/shared/index.mjs +0 -12
  163. package/esm2022/lib/filter/shared/ogc-filter-time.service.mjs +0 -72
  164. package/esm2022/lib/filter/shared/ogc-filter.enum.mjs +0 -30
  165. package/esm2022/lib/filter/shared/ogc-filter.interface.mjs +0 -2
  166. package/esm2022/lib/filter/shared/ogc-filter.mjs +0 -756
  167. package/esm2022/lib/filter/shared/ogc-filter.service.mjs +0 -47
  168. package/esm2022/lib/filter/shared/spatial-filter.enum.mjs +0 -23
  169. package/esm2022/lib/filter/shared/spatial-filter.interface.mjs +0 -2
  170. package/esm2022/lib/filter/shared/spatial-filter.service.mjs +0 -282
  171. package/esm2022/lib/filter/shared/time-filter.enum.mjs +0 -13
  172. package/esm2022/lib/filter/shared/time-filter.interface.mjs +0 -2
  173. package/esm2022/lib/filter/shared/time-filter.service.mjs +0 -107
  174. package/esm2022/lib/filter/spatial-filter/spatial-filter-item/index.mjs +0 -2
  175. package/esm2022/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +0 -875
  176. package/esm2022/lib/filter/spatial-filter/spatial-filter-list/index.mjs +0 -2
  177. package/esm2022/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs +0 -191
  178. package/esm2022/lib/filter/spatial-filter/spatial-filter-type/index.mjs +0 -2
  179. package/esm2022/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +0 -120
  180. package/esm2022/lib/filter/time-filter-button/index.mjs +0 -2
  181. package/esm2022/lib/filter/time-filter-button/time-filter-button.component.mjs +0 -70
  182. package/esm2022/lib/filter/time-filter-form/index.mjs +0 -2
  183. package/esm2022/lib/filter/time-filter-form/time-filter-form.component.mjs +0 -537
  184. package/esm2022/lib/filter/time-filter-item/index.mjs +0 -2
  185. package/esm2022/lib/filter/time-filter-item/time-filter-item.component.mjs +0 -90
  186. package/esm2022/lib/filter/time-filter-list/index.mjs +0 -3
  187. package/esm2022/lib/filter/time-filter-list/time-filter-list-binding.directive.mjs +0 -39
  188. package/esm2022/lib/filter/time-filter-list/time-filter-list.component.mjs +0 -24
  189. package/esm2022/lib/geo.module.mjs +0 -63
  190. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs +0 -559
  191. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.component.mjs +0 -170
  192. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.module.mjs +0 -24
  193. package/esm2022/lib/geometry/geometry-form-field/index.mjs +0 -4
  194. package/esm2022/lib/geometry/geometry.module.mjs +0 -18
  195. package/esm2022/lib/geometry/index.mjs +0 -3
  196. package/esm2022/lib/geometry/shared/controls/draw.mjs +0 -340
  197. package/esm2022/lib/geometry/shared/controls/index.mjs +0 -4
  198. package/esm2022/lib/geometry/shared/controls/modify.mjs +0 -538
  199. package/esm2022/lib/geometry/shared/controls/slice.mjs +0 -190
  200. package/esm2022/lib/geometry/shared/geometry.errors.mjs +0 -24
  201. package/esm2022/lib/geometry/shared/geometry.interfaces.mjs +0 -2
  202. package/esm2022/lib/geometry/shared/geometry.utils.mjs +0 -113
  203. package/esm2022/lib/geometry/shared/index.mjs +0 -5
  204. package/esm2022/lib/import-export/export-button/export-button.component.mjs +0 -49
  205. package/esm2022/lib/import-export/export-button/index.mjs +0 -2
  206. package/esm2022/lib/import-export/import-export/import-export.component.mjs +0 -876
  207. package/esm2022/lib/import-export/import-export/index.mjs +0 -2
  208. package/esm2022/lib/import-export/import-export.module.mjs +0 -31
  209. package/esm2022/lib/import-export/index.mjs +0 -5
  210. package/esm2022/lib/import-export/shared/drop-geo-file.directive.mjs +0 -114
  211. package/esm2022/lib/import-export/shared/export.errors.mjs +0 -15
  212. package/esm2022/lib/import-export/shared/export.interface.mjs +0 -2
  213. package/esm2022/lib/import-export/shared/export.service.mjs +0 -378
  214. package/esm2022/lib/import-export/shared/export.type.mjs +0 -13
  215. package/esm2022/lib/import-export/shared/export.utils.mjs +0 -51
  216. package/esm2022/lib/import-export/shared/import.errors.mjs +0 -39
  217. package/esm2022/lib/import-export/shared/import.interface.mjs +0 -2
  218. package/esm2022/lib/import-export/shared/import.service.mjs +0 -221
  219. package/esm2022/lib/import-export/shared/import.utils.mjs +0 -203
  220. package/esm2022/lib/import-export/shared/index.mjs +0 -11
  221. package/esm2022/lib/layer/index.mjs +0 -16
  222. package/esm2022/lib/layer/layer-group/index.mjs +0 -2
  223. package/esm2022/lib/layer/layer-group/layer-group.component.mjs +0 -103
  224. package/esm2022/lib/layer/layer-item/index.mjs +0 -2
  225. package/esm2022/lib/layer/layer-item/layer-item.component.mjs +0 -196
  226. package/esm2022/lib/layer/layer-legend/index.mjs +0 -2
  227. package/esm2022/lib/layer/layer-legend/layer-legend.component.mjs +0 -287
  228. package/esm2022/lib/layer/layer-legend-item/index.mjs +0 -2
  229. package/esm2022/lib/layer/layer-legend-item/layer-legend-item.component.mjs +0 -85
  230. package/esm2022/lib/layer/layer-legend-list/index.mjs +0 -3
  231. package/esm2022/lib/layer/layer-legend-list/layer-legend-list-binding.directive.mjs +0 -54
  232. package/esm2022/lib/layer/layer-legend-list/layer-legend-list.component.mjs +0 -104
  233. package/esm2022/lib/layer/layer-list/index.mjs +0 -2
  234. package/esm2022/lib/layer/layer-list/layer-list.component.mjs +0 -232
  235. package/esm2022/lib/layer/layer-list-tool/index.mjs +0 -4
  236. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.component.mjs +0 -92
  237. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.interface.mjs +0 -7
  238. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.service.mjs +0 -61
  239. package/esm2022/lib/layer/layer-search/index.mjs +0 -2
  240. package/esm2022/lib/layer/layer-search/layer-search.component.mjs +0 -65
  241. package/esm2022/lib/layer/layer-unavailable/index.mjs +0 -3
  242. package/esm2022/lib/layer/layer-unavailable/layer-unavailable-list/layer-unavailable-list.component.mjs +0 -25
  243. package/esm2022/lib/layer/layer-unavailable/layer-unavailable.component.mjs +0 -35
  244. package/esm2022/lib/layer/layer-viewer/index.mjs +0 -3
  245. package/esm2022/lib/layer/layer-viewer/layer-viewer.component.mjs +0 -226
  246. package/esm2022/lib/layer/layer-viewer/layer-viewer.interface.mjs +0 -2
  247. package/esm2022/lib/layer/layer-viewer-bottom-actions/index.mjs +0 -2
  248. package/esm2022/lib/layer/layer-viewer-bottom-actions/layer-viewer-bottom-actions.component.mjs +0 -207
  249. package/esm2022/lib/layer/layer-visibility-button/index.mjs +0 -2
  250. package/esm2022/lib/layer/layer-visibility-button/layer-visibility-button.component.mjs +0 -83
  251. package/esm2022/lib/layer/layer.module.mjs +0 -107
  252. package/esm2022/lib/layer/shared/clusterParam.mjs +0 -2
  253. package/esm2022/lib/layer/shared/index.mjs +0 -6
  254. package/esm2022/lib/layer/shared/layer-controller.mjs +0 -316
  255. package/esm2022/lib/layer/shared/layer-selection.mjs +0 -38
  256. package/esm2022/lib/layer/shared/layer.enums.mjs +0 -2
  257. package/esm2022/lib/layer/shared/layer.service.mjs +0 -315
  258. package/esm2022/lib/layer/shared/layers/any-layer.interface.mjs +0 -2
  259. package/esm2022/lib/layer/shared/layers/any-layer.mjs +0 -2
  260. package/esm2022/lib/layer/shared/layers/image-layer.interface.mjs +0 -2
  261. package/esm2022/lib/layer/shared/layers/image-layer.mjs +0 -75
  262. package/esm2022/lib/layer/shared/layers/index.mjs +0 -18
  263. package/esm2022/lib/layer/shared/layers/layer-base.mjs +0 -199
  264. package/esm2022/lib/layer/shared/layers/layer-group.interface.mjs +0 -2
  265. package/esm2022/lib/layer/shared/layers/layer-group.mjs +0 -120
  266. package/esm2022/lib/layer/shared/layers/layer.interface.mjs +0 -7
  267. package/esm2022/lib/layer/shared/layers/layer.mjs +0 -178
  268. package/esm2022/lib/layer/shared/layers/legend.interface.mjs +0 -2
  269. package/esm2022/lib/layer/shared/layers/linked/index.mjs +0 -4
  270. package/esm2022/lib/layer/shared/layers/linked/linked-layer.interface.mjs +0 -12
  271. package/esm2022/lib/layer/shared/layers/linked/linked-layer.mjs +0 -242
  272. package/esm2022/lib/layer/shared/layers/linked/linked-layer.utils.mjs +0 -70
  273. package/esm2022/lib/layer/shared/layers/tile-layer.interface.mjs +0 -2
  274. package/esm2022/lib/layer/shared/layers/tile-layer.mjs +0 -55
  275. package/esm2022/lib/layer/shared/layers/vector-layer.interface.mjs +0 -2
  276. package/esm2022/lib/layer/shared/layers/vector-layer.mjs +0 -576
  277. package/esm2022/lib/layer/shared/layers/vectortile-layer.interface.mjs +0 -2
  278. package/esm2022/lib/layer/shared/layers/vectortile-layer.mjs +0 -112
  279. package/esm2022/lib/layer/track-feature-button/index.mjs +0 -2
  280. package/esm2022/lib/layer/track-feature-button/track-feature-button.component.mjs +0 -54
  281. package/esm2022/lib/layer/utils/image-watcher.mjs +0 -62
  282. package/esm2022/lib/layer/utils/index.mjs +0 -6
  283. package/esm2022/lib/layer/utils/layer.utils.mjs +0 -57
  284. package/esm2022/lib/layer/utils/outputLegend.mjs +0 -32
  285. package/esm2022/lib/layer/utils/tile-watcher.mjs +0 -52
  286. package/esm2022/lib/layer/utils/vector-watcher.mjs +0 -50
  287. package/esm2022/lib/map/baselayers-switcher/baselayers-switcher.animation.mjs +0 -20
  288. package/esm2022/lib/map/baselayers-switcher/baselayers-switcher.component.mjs +0 -87
  289. package/esm2022/lib/map/baselayers-switcher/index.mjs +0 -3
  290. package/esm2022/lib/map/baselayers-switcher/mini-basemap.component.mjs +0 -122
  291. package/esm2022/lib/map/geolocate-button/geolocate-button.component.mjs +0 -78
  292. package/esm2022/lib/map/geolocate-button/index.mjs +0 -2
  293. package/esm2022/lib/map/home-extent-button/home-extent-button.component.mjs +0 -73
  294. package/esm2022/lib/map/home-extent-button/home-extent-button.interface.mjs +0 -2
  295. package/esm2022/lib/map/home-extent-button/index.mjs +0 -3
  296. package/esm2022/lib/map/index.mjs +0 -14
  297. package/esm2022/lib/map/info-section/index.mjs +0 -2
  298. package/esm2022/lib/map/info-section/info-section.component.mjs +0 -15
  299. package/esm2022/lib/map/map-browser/index.mjs +0 -2
  300. package/esm2022/lib/map/map-browser/map-browser.component.mjs +0 -67
  301. package/esm2022/lib/map/map-center/index.mjs +0 -2
  302. package/esm2022/lib/map/map-center/map-center.component.mjs +0 -56
  303. package/esm2022/lib/map/map.module.mjs +0 -89
  304. package/esm2022/lib/map/menu-button/index.mjs +0 -2
  305. package/esm2022/lib/map/menu-button/menu-button.component.mjs +0 -57
  306. package/esm2022/lib/map/offline-button/index.mjs +0 -2
  307. package/esm2022/lib/map/offline-button/offline-button.component.mjs +0 -53
  308. package/esm2022/lib/map/rotation-button/index.mjs +0 -2
  309. package/esm2022/lib/map/rotation-button/rotation-button.component.mjs +0 -58
  310. package/esm2022/lib/map/shared/controllers/controller.mjs +0 -44
  311. package/esm2022/lib/map/shared/controllers/geolocation.interface.mjs +0 -8
  312. package/esm2022/lib/map/shared/controllers/geolocation.mjs +0 -431
  313. package/esm2022/lib/map/shared/controllers/index.mjs +0 -5
  314. package/esm2022/lib/map/shared/controllers/view.mjs +0 -361
  315. package/esm2022/lib/map/shared/hover-feature.directive.mjs +0 -481
  316. package/esm2022/lib/map/shared/index.mjs +0 -15
  317. package/esm2022/lib/map/shared/linkedLayers.utils.mjs +0 -238
  318. package/esm2022/lib/map/shared/map-pointer-position.directive.mjs +0 -122
  319. package/esm2022/lib/map/shared/map.abstract.mjs +0 -24
  320. package/esm2022/lib/map/shared/map.enums.mjs +0 -6
  321. package/esm2022/lib/map/shared/map.interface.mjs +0 -2
  322. package/esm2022/lib/map/shared/map.mjs +0 -201
  323. package/esm2022/lib/map/shared/map.service.mjs +0 -29
  324. package/esm2022/lib/map/shared/map.utils.mjs +0 -455
  325. package/esm2022/lib/map/shared/mapOffline.directive.mjs +0 -114
  326. package/esm2022/lib/map/shared/projection.interfaces.mjs +0 -2
  327. package/esm2022/lib/map/shared/projection.service.mjs +0 -67
  328. package/esm2022/lib/map/shared/projection.utils.mjs +0 -122
  329. package/esm2022/lib/map/swipe-control/index.mjs +0 -2
  330. package/esm2022/lib/map/swipe-control/swipe-control.component.mjs +0 -211
  331. package/esm2022/lib/map/utils/index.mjs +0 -2
  332. package/esm2022/lib/map/utils/layer-watcher.mjs +0 -112
  333. package/esm2022/lib/map/wake-lock-button/index.mjs +0 -2
  334. package/esm2022/lib/map/wake-lock-button/wake-lock-button.component.mjs +0 -103
  335. package/esm2022/lib/map/zoom-button/index.mjs +0 -2
  336. package/esm2022/lib/map/zoom-button/zoom-button.component.mjs +0 -35
  337. package/esm2022/lib/measure/index.mjs +0 -3
  338. package/esm2022/lib/measure/measure.module.mjs +0 -20
  339. package/esm2022/lib/measure/measurer/index.mjs +0 -6
  340. package/esm2022/lib/measure/measurer/measure-format.pipe.mjs +0 -40
  341. package/esm2022/lib/measure/measurer/measurer-dialog.component.mjs +0 -38
  342. package/esm2022/lib/measure/measurer/measurer-item.component.mjs +0 -143
  343. package/esm2022/lib/measure/measurer/measurer.component.mjs +0 -948
  344. package/esm2022/lib/measure/measurer/measurer.module.mjs +0 -20
  345. package/esm2022/lib/measure/shared/index.mjs +0 -4
  346. package/esm2022/lib/measure/shared/measure.enum.mjs +0 -37
  347. package/esm2022/lib/measure/shared/measure.interfaces.mjs +0 -2
  348. package/esm2022/lib/measure/shared/measure.utils.mjs +0 -497
  349. package/esm2022/lib/metadata/index.mjs +0 -4
  350. package/esm2022/lib/metadata/metadata-button/index.mjs +0 -2
  351. package/esm2022/lib/metadata/metadata-button/metadata-button.component.mjs +0 -96
  352. package/esm2022/lib/metadata/metadata.module.mjs +0 -29
  353. package/esm2022/lib/metadata/shared/index.mjs +0 -3
  354. package/esm2022/lib/metadata/shared/metadata.interface.mjs +0 -2
  355. package/esm2022/lib/metadata/shared/metadata.service.mjs +0 -18
  356. package/esm2022/lib/offline/geoDB/configFileToGeoDB.service.mjs +0 -130
  357. package/esm2022/lib/offline/geoDB/geoDB.enums.mjs +0 -6
  358. package/esm2022/lib/offline/geoDB/geoDB.interface.mjs +0 -2
  359. package/esm2022/lib/offline/geoDB/geoDB.service.mjs +0 -172
  360. package/esm2022/lib/offline/geoDB/index.mjs +0 -5
  361. package/esm2022/lib/offline/index.mjs +0 -6
  362. package/esm2022/lib/offline/layerDB/index.mjs +0 -3
  363. package/esm2022/lib/offline/layerDB/layerDB.interface.mjs +0 -2
  364. package/esm2022/lib/offline/layerDB/layerDB.service.mjs +0 -83
  365. package/esm2022/lib/offline/offline.interface.mjs +0 -2
  366. package/esm2022/lib/offline/offline.provider.mjs +0 -50
  367. package/esm2022/lib/offline/shared/geo-network.service.mjs +0 -79
  368. package/esm2022/lib/offline/shared/index.mjs +0 -2
  369. package/esm2022/lib/overlay/index.mjs +0 -2
  370. package/esm2022/lib/overlay/shared/index.mjs +0 -4
  371. package/esm2022/lib/overlay/shared/overlay.enum.mjs +0 -8
  372. package/esm2022/lib/overlay/shared/overlay.mjs +0 -139
  373. package/esm2022/lib/overlay/shared/overlay.utils.mjs +0 -17
  374. package/esm2022/lib/print/index.mjs +0 -4
  375. package/esm2022/lib/print/print/print.component.mjs +0 -116
  376. package/esm2022/lib/print/print-form/index.mjs +0 -2
  377. package/esm2022/lib/print/print-form/print-form.component.mjs +0 -320
  378. package/esm2022/lib/print/print.module.mjs +0 -20
  379. package/esm2022/lib/print/shared/geopdf.mjs +0 -68
  380. package/esm2022/lib/print/shared/index.mjs +0 -5
  381. package/esm2022/lib/print/shared/print.interface.mjs +0 -2
  382. package/esm2022/lib/print/shared/print.service.mjs +0 -1136
  383. package/esm2022/lib/print/shared/print.type.mjs +0 -30
  384. package/esm2022/lib/query/index.mjs +0 -2
  385. package/esm2022/lib/query/query.module.mjs +0 -27
  386. package/esm2022/lib/query/shared/index.mjs +0 -8
  387. package/esm2022/lib/query/shared/query-search-source.mjs +0 -35
  388. package/esm2022/lib/query/shared/query-search-source.providers.mjs +0 -22
  389. package/esm2022/lib/query/shared/query.directive.mjs +0 -290
  390. package/esm2022/lib/query/shared/query.enums.mjs +0 -32
  391. package/esm2022/lib/query/shared/query.interfaces.mjs +0 -2
  392. package/esm2022/lib/query/shared/query.service.mjs +0 -753
  393. package/esm2022/lib/query/shared/query.utils.mjs +0 -45
  394. package/esm2022/lib/search/index.mjs +0 -10
  395. package/esm2022/lib/search/search-bar/search-bar.component.mjs +0 -483
  396. package/esm2022/lib/search/search-bar/search-bar.module.mjs +0 -19
  397. package/esm2022/lib/search/search-results/index.mjs +0 -5
  398. package/esm2022/lib/search/search-results/save-feature-dialog.component.mjs +0 -101
  399. package/esm2022/lib/search/search-results/search-results-add-button.component.mjs +0 -433
  400. package/esm2022/lib/search/search-results/search-results-item.component.mjs +0 -119
  401. package/esm2022/lib/search/search-results/search-results.component.mjs +0 -297
  402. package/esm2022/lib/search/search-results/search-results.directive.mjs +0 -7
  403. package/esm2022/lib/search/search-results/search-results.module.mjs +0 -20
  404. package/esm2022/lib/search/search-selector/search-selector.component.mjs +0 -118
  405. package/esm2022/lib/search/search-selector/search-selector.module.mjs +0 -19
  406. package/esm2022/lib/search/search-settings/search-settings.component.mjs +0 -264
  407. package/esm2022/lib/search/search-settings/search-settings.module.mjs +0 -19
  408. package/esm2022/lib/search/search.module.mjs +0 -77
  409. package/esm2022/lib/search/shared/index.mjs +0 -10
  410. package/esm2022/lib/search/shared/search-pointer-summary.directive.mjs +0 -328
  411. package/esm2022/lib/search/shared/search-source-service.providers.mjs +0 -20
  412. package/esm2022/lib/search/shared/search-source.service.mjs +0 -56
  413. package/esm2022/lib/search/shared/search.enums.mjs +0 -4
  414. package/esm2022/lib/search/shared/search.interfaces.mjs +0 -2
  415. package/esm2022/lib/search/shared/search.provider.mjs +0 -20
  416. package/esm2022/lib/search/shared/search.service.mjs +0 -149
  417. package/esm2022/lib/search/shared/search.utils.mjs +0 -92
  418. package/esm2022/lib/search/shared/sources/cadastre.mjs +0 -142
  419. package/esm2022/lib/search/shared/sources/cadastre.providers.mjs +0 -32
  420. package/esm2022/lib/search/shared/sources/coordinates.interfaces.mjs +0 -2
  421. package/esm2022/lib/search/shared/sources/coordinates.mjs +0 -168
  422. package/esm2022/lib/search/shared/sources/coordinates.providers.mjs +0 -52
  423. package/esm2022/lib/search/shared/sources/icherche-icons.mjs +0 -32
  424. package/esm2022/lib/search/shared/sources/icherche.interfaces.mjs +0 -2
  425. package/esm2022/lib/search/shared/sources/icherche.mjs +0 -816
  426. package/esm2022/lib/search/shared/sources/icherche.providers.mjs +0 -87
  427. package/esm2022/lib/search/shared/sources/ilayer.interfaces.mjs +0 -2
  428. package/esm2022/lib/search/shared/sources/ilayer.mjs +0 -339
  429. package/esm2022/lib/search/shared/sources/ilayer.providers.mjs +0 -58
  430. package/esm2022/lib/search/shared/sources/index.mjs +0 -23
  431. package/esm2022/lib/search/shared/sources/nominatim.interfaces.mjs +0 -2
  432. package/esm2022/lib/search/shared/sources/nominatim.mjs +0 -263
  433. package/esm2022/lib/search/shared/sources/nominatim.providers.mjs +0 -31
  434. package/esm2022/lib/search/shared/sources/source.interfaces.mjs +0 -13
  435. package/esm2022/lib/search/shared/sources/source.mjs +0 -221
  436. package/esm2022/lib/search/shared/sources/storedqueries.interfaces.mjs +0 -2
  437. package/esm2022/lib/search/shared/sources/storedqueries.mjs +0 -454
  438. package/esm2022/lib/search/shared/sources/storedqueries.providers.mjs +0 -56
  439. package/esm2022/lib/search/shared/sources/workspace.interfaces.mjs +0 -2
  440. package/esm2022/lib/search/shared/sources/workspace.mjs +0 -192
  441. package/esm2022/lib/search/shared/sources/workspace.providers.mjs +0 -31
  442. package/esm2022/lib/style/index.mjs +0 -5
  443. package/esm2022/lib/style/shared/datasource/esri-style-generator.mjs +0 -360
  444. package/esm2022/lib/style/shared/datasource/index.mjs +0 -2
  445. package/esm2022/lib/style/shared/feature/feature-style.mjs +0 -162
  446. package/esm2022/lib/style/shared/feature/index.mjs +0 -2
  447. package/esm2022/lib/style/shared/font.enum.mjs +0 -17
  448. package/esm2022/lib/style/shared/index.mjs +0 -5
  449. package/esm2022/lib/style/shared/overlay/index.mjs +0 -3
  450. package/esm2022/lib/style/shared/overlay/overlay-marker-style.utils.mjs +0 -39
  451. package/esm2022/lib/style/shared/overlay/overlay-style.utils.mjs +0 -88
  452. package/esm2022/lib/style/shared/vector/commonVectorStyle.mjs +0 -78
  453. package/esm2022/lib/style/shared/vector/conversion.utils.mjs +0 -27
  454. package/esm2022/lib/style/shared/vector/index.mjs +0 -4
  455. package/esm2022/lib/style/shared/vector/vector-style.interface.mjs +0 -2
  456. package/esm2022/lib/style/style-list/index.mjs +0 -5
  457. package/esm2022/lib/style/style-list/style-list.interface.mjs +0 -2
  458. package/esm2022/lib/style/style-list/style-list.module.mjs +0 -23
  459. package/esm2022/lib/style/style-list/style-list.provider.mjs +0 -21
  460. package/esm2022/lib/style/style-list/style-list.service.mjs +0 -52
  461. package/esm2022/lib/style/style-modal/drawing/index.mjs +0 -2
  462. package/esm2022/lib/style/style-modal/drawing/style-modal-drawing.component.mjs +0 -193
  463. package/esm2022/lib/style/style-modal/index.mjs +0 -5
  464. package/esm2022/lib/style/style-modal/layer/index.mjs +0 -2
  465. package/esm2022/lib/style/style-modal/layer/style-modal-layer.component.mjs +0 -142
  466. package/esm2022/lib/style/style-modal/layer-button/index.mjs +0 -2
  467. package/esm2022/lib/style/style-modal/layer-button/style-modal-layer-button.component.mjs +0 -44
  468. package/esm2022/lib/style/style-modal/shared/index.mjs +0 -2
  469. package/esm2022/lib/style/style-modal/shared/style-modal.interface.mjs +0 -2
  470. package/esm2022/lib/style/style-service/draw-style.service.mjs +0 -255
  471. package/esm2022/lib/style/style-service/index.mjs +0 -3
  472. package/esm2022/lib/style/style-service/style.service.mjs +0 -393
  473. package/esm2022/lib/style/style.module.mjs +0 -46
  474. package/esm2022/lib/toast/index.mjs +0 -2
  475. package/esm2022/lib/toast/toast.component.mjs +0 -99
  476. package/esm2022/lib/toast/toast.module.mjs +0 -24
  477. package/esm2022/lib/utils/googleLinks.mjs +0 -13
  478. package/esm2022/lib/utils/id-generator.mjs +0 -112
  479. package/esm2022/lib/utils/index.mjs +0 -5
  480. package/esm2022/lib/utils/osmLinks.mjs +0 -9
  481. package/esm2022/lib/utils/propertyTypeDetector/index.mjs +0 -3
  482. package/esm2022/lib/utils/propertyTypeDetector/propertyTypeDetector.interface.mjs +0 -2
  483. package/esm2022/lib/utils/propertyTypeDetector/propertyTypeDetector.service.mjs +0 -64
  484. package/esm2022/lib/wkt/index.mjs +0 -2
  485. package/esm2022/lib/wkt/shared/index.mjs +0 -2
  486. package/esm2022/lib/wkt/shared/wkt.service.mjs +0 -235
  487. package/esm2022/lib/wkt/wkt.module.mjs +0 -25
  488. package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.component.mjs +0 -36
  489. package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.module.mjs +0 -19
  490. package/esm2022/lib/workspace/confirmation-popup/index.mjs +0 -3
  491. package/esm2022/lib/workspace/index.mjs +0 -8
  492. package/esm2022/lib/workspace/shared/edition-workspace.mjs +0 -301
  493. package/esm2022/lib/workspace/shared/edition-workspace.service.mjs +0 -720
  494. package/esm2022/lib/workspace/shared/feature-workspace.mjs +0 -41
  495. package/esm2022/lib/workspace/shared/feature-workspace.service.mjs +0 -113
  496. package/esm2022/lib/workspace/shared/index.mjs +0 -8
  497. package/esm2022/lib/workspace/shared/wfs-workspace.mjs +0 -41
  498. package/esm2022/lib/workspace/shared/wfs-workspace.service.mjs +0 -121
  499. package/esm2022/lib/workspace/shared/wms-workspace.service.mjs +0 -248
  500. package/esm2022/lib/workspace/shared/workspace.utils.mjs +0 -188
  501. package/esm2022/lib/workspace/widgets/index.mjs +0 -4
  502. package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs +0 -48
  503. package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.module.mjs +0 -19
  504. package/esm2022/lib/workspace/widgets/widgets.mjs +0 -15
  505. package/esm2022/lib/workspace/workspace-selector/workspace-selector.directive.mjs +0 -172
  506. package/esm2022/lib/workspace/workspace-selector/workspace-selector.module.mjs +0 -19
  507. package/esm2022/lib/workspace/workspace-updator/workspace-updator.directive.mjs +0 -137
  508. package/esm2022/lib/workspace/workspace-updator/workspace-updator.module.mjs +0 -19
  509. package/esm2022/lib/workspace/workspace.module.mjs +0 -32
  510. package/esm2022/public_api.mjs +0 -56
@@ -1,559 +0,0 @@
1
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, Optional, Self } from '@angular/core';
2
- import { NgControl } from '@angular/forms';
3
- import OlFeature from 'ol/Feature';
4
- import OlOverlay from 'ol/Overlay';
5
- import OlGeoJSON from 'ol/format/GeoJSON';
6
- import Point from 'ol/geom/Point';
7
- import OlVectorLayer from 'ol/layer/Vector';
8
- import * as olproj from 'ol/proj';
9
- import OlVectorSource from 'ol/source/Vector';
10
- import { IgoMap } from '../../map/shared/map';
11
- import { MeasureLengthUnit, formatMeasure, measureOlGeometry, updateOlGeometryMidpoints } from '../../measure';
12
- import { DrawControl, ModifyControl } from '../shared/controls';
13
- import { createDrawInteractionStyle } from '../shared/geometry.utils';
14
- import * as i0 from "@angular/core";
15
- import * as i1 from "@angular/forms";
16
- /**
17
- * This input allows a user to draw a new geometry or to edit
18
- * an existing one on a map. A text input is also displayed in the
19
- * form with some instructions.
20
- * This is still WIP.
21
- */
22
- export class GeometryFormFieldInputComponent {
23
- cdRef;
24
- ngControl;
25
- olOverlayLayer;
26
- olGeoJSON = new OlGeoJSON();
27
- ready = false;
28
- drawControl;
29
- modifyControl;
30
- defaultDrawStyleRadius;
31
- olGeometryEnds$$;
32
- olGeometryChanges$$;
33
- olTooltip = this.createMeasureTooltip();
34
- /**
35
- * Active control
36
- * @internal
37
- */
38
- activeControl;
39
- /**
40
- * The map to draw the geometry on
41
- */
42
- map;
43
- /**
44
- * The geometry type
45
- */
46
- set geometryType(value) {
47
- this._geometryType = value;
48
- if (this.ready === false) {
49
- return;
50
- }
51
- this.deactivateControl();
52
- this.createDrawControl();
53
- this.drawControl.freehand$.next(this.freehandDrawIsActive);
54
- this.toggleControl();
55
- }
56
- get geometryType() {
57
- return this._geometryType;
58
- }
59
- _geometryType;
60
- /**
61
- * The drawGuide around the mouse pointer to help drawing
62
- */
63
- drawGuide = null;
64
- /**
65
- * Whether a measure tooltip should be displayed
66
- */
67
- measure = false;
68
- /**
69
- * Whether draw control should be active or not
70
- */
71
- get drawControlIsActive() {
72
- return this._drawControlIsActive;
73
- }
74
- set drawControlIsActive(value) {
75
- this._drawControlIsActive = value;
76
- if (this.ready === false) {
77
- return;
78
- }
79
- this.deactivateControl();
80
- if (!this._drawControlIsActive) {
81
- return;
82
- }
83
- else {
84
- this.toggleControl();
85
- }
86
- }
87
- _drawControlIsActive = true;
88
- /**
89
- * Whether freehand draw control should be active or not
90
- */
91
- get freehandDrawIsActive() {
92
- return this._freehandDrawIsActive;
93
- }
94
- set freehandDrawIsActive(value) {
95
- this._freehandDrawIsActive = value;
96
- this.deactivateControl();
97
- this.createDrawControl();
98
- this.createModifyControl();
99
- this.drawControl.freehand$.next(this.freehandDrawIsActive);
100
- if (this.ready === false) {
101
- return;
102
- }
103
- if (!this.drawControlIsActive) {
104
- return;
105
- }
106
- this.toggleControl();
107
- }
108
- _freehandDrawIsActive;
109
- /**
110
- * Whether freehand draw control should be active or not
111
- */
112
- get predefinedRadius() {
113
- return this._predefinedRadius;
114
- }
115
- set predefinedRadius(value) {
116
- this._predefinedRadius = value;
117
- this.drawControl.ispredefinedRadius$.next(value);
118
- }
119
- _predefinedRadius;
120
- /**
121
- * Control options
122
- */
123
- controlOptions = {};
124
- /**
125
- * Style for the draw control (applies while the geometry is being drawn)
126
- */
127
- set drawStyle(value) {
128
- if (value === undefined) {
129
- value = createDrawInteractionStyle();
130
- }
131
- this._drawStyle = value;
132
- const olGuideStyle = this.getGuideStyleFromDrawStyle(value);
133
- if (olGuideStyle !== undefined) {
134
- this.defaultDrawStyleRadius = olGuideStyle.getRadius();
135
- }
136
- else {
137
- this.defaultDrawStyleRadius = null;
138
- }
139
- if (this.ready === false) {
140
- return;
141
- }
142
- this.deactivateControl();
143
- this.createDrawControl();
144
- this.createModifyControl();
145
- this.drawControl.freehand$.next(this.freehandDrawIsActive);
146
- this.toggleControl();
147
- }
148
- get drawStyle() {
149
- return this._drawStyle;
150
- }
151
- _drawStyle;
152
- /**
153
- * Style for the overlay layer (applies once the geometry is added to the map)
154
- * If not specified, drawStyle applies
155
- */
156
- set overlayStyle(value) {
157
- this._overlayStyle = value;
158
- }
159
- get overlayStyle() {
160
- return this._overlayStyle;
161
- }
162
- _overlayStyle;
163
- /**
164
- * The geometry value (GeoJSON)
165
- * Implemented as part of ControlValueAccessor.
166
- */
167
- set value(value) {
168
- this._value = value;
169
- if (this.ready === false) {
170
- return;
171
- }
172
- if (value) {
173
- this.addGeoJSONToOverlay(value);
174
- }
175
- else {
176
- this.olOverlaySource.clear(true);
177
- }
178
- this.onChange(value);
179
- this.toggleControl();
180
- this.cdRef.detectChanges();
181
- }
182
- get value() {
183
- return this._value;
184
- }
185
- _value;
186
- /**
187
- * The vector source to add the geometry to
188
- * @internal
189
- */
190
- get olOverlaySource() {
191
- return this.olOverlayLayer.getSource();
192
- }
193
- set radius(value) {
194
- if (this.ready === false) {
195
- return;
196
- }
197
- if (this.modifyControl.getSource()) {
198
- this.modifyControl.getSource().refresh();
199
- }
200
- if (this.freehandDrawIsActive) {
201
- let olModify;
202
- setTimeout(() => {
203
- olModify = this.modifyControl.olModifyInteraction;
204
- if (olModify) {
205
- if (olModify.features_) {
206
- olModify.features_.clear();
207
- this.addGeoJSONToOverlay(this.value);
208
- }
209
- }
210
- }, 0);
211
- }
212
- }
213
- constructor(cdRef, ngControl) {
214
- this.cdRef = cdRef;
215
- this.ngControl = ngControl;
216
- if (this.ngControl !== undefined) {
217
- // Setting the value accessor directly (instead of using
218
- // the providers) to avoid running into a circular import.
219
- this.ngControl.valueAccessor = this;
220
- }
221
- }
222
- /**
223
- * Create an overlay layer, add the initial geometry to it (if any)
224
- * and toggle the right interaction.
225
- * @internal
226
- */
227
- ngOnInit() {
228
- if (this.drawStyle === undefined) {
229
- this.drawStyle = createDrawInteractionStyle();
230
- }
231
- if (this.overlayStyle === undefined) {
232
- this.overlayStyle = this.drawStyle;
233
- }
234
- this.addOlOverlayLayer();
235
- this.createDrawControl();
236
- this.createModifyControl();
237
- if (this.value) {
238
- this.addGeoJSONToOverlay(this.value);
239
- }
240
- this.toggleControl();
241
- this.ready = true;
242
- }
243
- /**
244
- * Clear the overlay layer and any interaction added by this component.
245
- * @internal
246
- */
247
- ngOnDestroy() {
248
- // This is mandatory when the form control is reused after
249
- // this component has been destroyed. It seems like the control
250
- // keeps a reference to this component even after it's destroyed
251
- // and it attempts to set it's value
252
- this.ready = false;
253
- this.deactivateControl();
254
- this.olOverlaySource.clear();
255
- this.map.ol.removeLayer(this.olOverlayLayer);
256
- }
257
- /**
258
- * Implemented as part of ControlValueAccessor.
259
- */
260
- registerOnChange(fn) {
261
- this.onChange = fn;
262
- }
263
- onChange = () => void 1;
264
- /**
265
- * Implemented as part of ControlValueAccessor.
266
- */
267
- registerOnTouched(fn) {
268
- this.onTouched = fn;
269
- }
270
- onTouched = () => void 1;
271
- /**
272
- * Implemented as part of ControlValueAccessor.
273
- */
274
- writeValue(value) {
275
- this.value = value;
276
- }
277
- /**
278
- * Add an overlay layer to the map
279
- */
280
- addOlOverlayLayer() {
281
- this.olOverlayLayer = new OlVectorLayer({
282
- source: new OlVectorSource(),
283
- zIndex: 500,
284
- style: null
285
- });
286
- this.map.ol.addLayer(this.olOverlayLayer);
287
- }
288
- /**
289
- * Create a draw control and subscribe to it's geometry
290
- */
291
- createDrawControl() {
292
- const controlOptions = Object.assign({}, this.controlOptions, {
293
- geometryType: this.geometryType || 'Point',
294
- drawingLayer: this.olOverlayLayer,
295
- interactionStyle: typeof this.drawStyle === 'function'
296
- ? this.drawStyle
297
- : (olFeature, resolution) => {
298
- const style = this.drawStyle;
299
- this.updateDrawStyleWithDrawGuide(style, resolution);
300
- return style;
301
- }
302
- });
303
- this.drawControl = new DrawControl(controlOptions);
304
- }
305
- /**
306
- * Create a modify control and subscribe to it's geometry
307
- */
308
- createModifyControl() {
309
- const controlOptions = Object.assign({}, this.controlOptions, {
310
- layer: this.olOverlayLayer,
311
- drawStyle: typeof this.drawStyle === 'function'
312
- ? this.drawStyle
313
- : (olFeature, resolution) => {
314
- const style = this.drawStyle;
315
- this.updateDrawStyleWithDrawGuide(style, resolution);
316
- return style;
317
- }
318
- });
319
- this.modifyControl = new ModifyControl(controlOptions);
320
- }
321
- /**
322
- * Toggle the proper control (draw or modify)
323
- */
324
- toggleControl() {
325
- let activate;
326
- if (!this.value && this.geometryType) {
327
- activate = this.drawControl;
328
- }
329
- else {
330
- activate = this.modifyControl;
331
- }
332
- // If the control that should be activated
333
- // is not the same as the current active control,
334
- // deactivate the current control and activate the new one
335
- // Otherwise, do nothing and keep the current control active
336
- if (activate !== this.activeControl) {
337
- this.deactivateControl();
338
- this.activateControl(activate);
339
- }
340
- }
341
- /**
342
- * Activate a given control
343
- * @param control Control
344
- */
345
- activateControl(control) {
346
- this.activeControl = control;
347
- this.olGeometryEnds$$ = control.end$.subscribe((olGeometry) => this.onOlGeometryEnds(olGeometry));
348
- if (this.measure === true && control === this.drawControl) {
349
- this.olGeometryChanges$$ = control.changes$.subscribe((olGeometry) => this.onOlGeometryChanges(olGeometry));
350
- }
351
- control.setOlMap(this.map.ol, false);
352
- }
353
- /**
354
- * Deactivate the active control
355
- */
356
- deactivateControl() {
357
- this.removeMeasureTooltip();
358
- if (this.activeControl !== undefined) {
359
- this.activeControl.setOlMap(undefined);
360
- }
361
- if (this.olGeometryEnds$$ !== undefined) {
362
- this.olGeometryEnds$$.unsubscribe();
363
- }
364
- if (this.olGeometryChanges$$ !== undefined) {
365
- this.olGeometryChanges$$.unsubscribe();
366
- }
367
- this.activeControl = undefined;
368
- }
369
- /**
370
- * Update measures observables and map tooltips
371
- * @param olGeometry Ol linestring or polygon
372
- */
373
- onOlGeometryEnds(olGeometry) {
374
- this.removeMeasureTooltip();
375
- this.setOlGeometry(olGeometry);
376
- }
377
- /**
378
- * Update measures observables and map tooltips
379
- * @param olGeometry Ol linestring or polygon
380
- */
381
- onOlGeometryChanges(olGeometry) {
382
- if (olGeometry.getType() !== 'Point') {
383
- this.updateMeasureTooltip(olGeometry);
384
- }
385
- }
386
- /**
387
- * When drawing ends, convert the output value to GeoJSON and keep it.
388
- * Restore the double click interaction.
389
- * @param olGeometry OL geometry
390
- */
391
- setOlGeometry(olGeometry) {
392
- if (olGeometry === undefined) {
393
- return;
394
- }
395
- if (olGeometry.getType() === 'Circle') {
396
- // Because Circle doesn't exist as a GeoJSON object
397
- olGeometry = this.circleToPoint(olGeometry);
398
- }
399
- const value = this.olGeoJSON.writeGeometryObject(olGeometry, {
400
- featureProjection: this.map.projection,
401
- dataProjection: 'EPSG:4326'
402
- });
403
- if (olGeometry.get('radius')) {
404
- value.radius = olGeometry.get('radius');
405
- olGeometry.set('radius', value.radius);
406
- }
407
- this.writeValue(value);
408
- }
409
- circleToPoint(olGeometry) {
410
- const center = olGeometry.getCenter();
411
- const coordinates = olproj.transform(center, this.map.projection, 'EPSG:4326');
412
- const radius = Math.round(olGeometry.getRadius() * Math.cos((Math.PI / 180) * coordinates[1]));
413
- // Convert it to a point object
414
- olGeometry = new Point(center);
415
- olGeometry.set('radius', radius, true);
416
- return olGeometry;
417
- }
418
- /**
419
- * Add a GeoJSON geometry to the overlay
420
- * @param geometry GeoJSON geometry
421
- */
422
- addGeoJSONToOverlay(geometry) {
423
- const olGeometry = this.olGeoJSON.readGeometry(geometry, {
424
- dataProjection: 'EPSG:4326',
425
- featureProjection: this.map.projection
426
- });
427
- const olFeature = new OlFeature({
428
- geometry: olGeometry
429
- });
430
- olFeature.setStyle(this.overlayStyle);
431
- this.olOverlaySource.clear();
432
- this.olOverlaySource.addFeature(olFeature);
433
- }
434
- /**
435
- * Create the measure tooltip
436
- */
437
- createMeasureTooltip() {
438
- return new OlOverlay({
439
- element: document.createElement('div'),
440
- offset: [-30, -10],
441
- className: ['igo-map-tooltip', 'igo-map-tooltip-measure'].join(' '),
442
- stopEvent: false
443
- });
444
- }
445
- /**
446
- * Update the measure tooltip of an OL geometry
447
- * @param olGeometry OL Geometry
448
- */
449
- updateMeasureTooltip(olGeometry) {
450
- const measure = measureOlGeometry(olGeometry, this.map.projection);
451
- const lengths = measure.lengths;
452
- const lastIndex = olGeometry.getType() === 'Polygon'
453
- ? lengths.length - 2
454
- : lengths.length - 1;
455
- const lastLength = lengths[lastIndex];
456
- const olMidpoints = updateOlGeometryMidpoints(olGeometry);
457
- const olLastMidpoint = olMidpoints[lastIndex];
458
- if (olMidpoints.length === 0 || olLastMidpoint === undefined) {
459
- this.removeMeasureTooltip();
460
- return;
461
- }
462
- this.olTooltip.setPosition(olLastMidpoint.getFlatCoordinates());
463
- const innerHtml = formatMeasure(lastLength, {
464
- decimal: 1,
465
- unit: MeasureLengthUnit.Meters,
466
- unitAbbr: true,
467
- locale: 'fr'
468
- });
469
- this.olTooltip.getElement().innerHTML = innerHtml;
470
- if (this.olTooltip.getMap() === undefined) {
471
- this.map.ol.addOverlay(this.olTooltip);
472
- }
473
- }
474
- /**
475
- * Remove the measure tooltip from the map
476
- */
477
- removeMeasureTooltip() {
478
- if (this.olTooltip.getMap && this.olTooltip.getMap() !== undefined) {
479
- this.map.ol.removeOverlay(this.olTooltip);
480
- this.olTooltip.setMap(undefined);
481
- }
482
- }
483
- /**
484
- * Adjust the draw style with the specified draw guide distance, if possible
485
- * @param olStyle Draw style to update
486
- * @param resolution Resolution (to make the screen size of symbol fit the drawGuide value)
487
- */
488
- updateDrawStyleWithDrawGuide(olStyle, resolution) {
489
- const olGuideStyle = this.getGuideStyleFromDrawStyle(olStyle);
490
- if (olGuideStyle === undefined) {
491
- return;
492
- }
493
- const drawGuide = this.drawGuide;
494
- let radius;
495
- if (!drawGuide || drawGuide < 0) {
496
- radius = this.defaultDrawStyleRadius;
497
- }
498
- else {
499
- radius = drawGuide > 0 ? drawGuide / resolution : drawGuide;
500
- }
501
- olGuideStyle.setRadius(radius);
502
- }
503
- /**
504
- * Returns wether a given Open Layers style has a radius property that can be set (used to set draw guide)
505
- * @param olStyle The style on which to perform the check
506
- */
507
- getGuideStyleFromDrawStyle(olStyle) {
508
- let baseStyle;
509
- if (Array.isArray(olStyle)) {
510
- baseStyle = olStyle[0];
511
- }
512
- else {
513
- baseStyle = olStyle;
514
- }
515
- if (typeof baseStyle.getImage === 'function') {
516
- baseStyle = baseStyle.getImage();
517
- }
518
- let guideStyle;
519
- if (typeof baseStyle.setRadius === 'function') {
520
- guideStyle = baseStyle;
521
- }
522
- return guideStyle;
523
- }
524
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GeometryFormFieldInputComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });
525
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: GeometryFormFieldInputComponent, isStandalone: true, selector: "igo-geometry-form-field-input", inputs: { map: "map", geometryType: "geometryType", drawGuide: "drawGuide", measure: "measure", drawControlIsActive: "drawControlIsActive", freehandDrawIsActive: "freehandDrawIsActive", predefinedRadius: "predefinedRadius", controlOptions: "controlOptions", drawStyle: "drawStyle", overlayStyle: "overlayStyle", value: "value", radius: "radius" }, ngImport: i0, template: "<ng-template></ng-template>\n", changeDetection: i0.ChangeDetectionStrategy.OnPush });
526
- }
527
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GeometryFormFieldInputComponent, decorators: [{
528
- type: Component,
529
- args: [{ selector: 'igo-geometry-form-field-input', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<ng-template></ng-template>\n" }]
530
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.NgControl, decorators: [{
531
- type: Optional
532
- }, {
533
- type: Self
534
- }] }], propDecorators: { map: [{
535
- type: Input
536
- }], geometryType: [{
537
- type: Input
538
- }], drawGuide: [{
539
- type: Input
540
- }], measure: [{
541
- type: Input
542
- }], drawControlIsActive: [{
543
- type: Input
544
- }], freehandDrawIsActive: [{
545
- type: Input
546
- }], predefinedRadius: [{
547
- type: Input
548
- }], controlOptions: [{
549
- type: Input
550
- }], drawStyle: [{
551
- type: Input
552
- }], overlayStyle: [{
553
- type: Input
554
- }], value: [{
555
- type: Input
556
- }], radius: [{
557
- type: Input
558
- }] } });
559
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvbWV0cnktZm9ybS1maWVsZC1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9nZW9tZXRyeS9nZW9tZXRyeS1mb3JtLWZpZWxkL2dlb21ldHJ5LWZvcm0tZmllbGQtaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2VvL3NyYy9saWIvZ2VvbWV0cnkvZ2VvbWV0cnktZm9ybS1maWVsZC9nZW9tZXRyeS1mb3JtLWZpZWxkLWlucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxLQUFLLEVBR0wsUUFBUSxFQUNSLElBQUksRUFDTCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpFLE9BQU8sU0FBUyxNQUFNLFlBQVksQ0FBQztBQUNuQyxPQUFPLFNBQVMsTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxTQUFTLE1BQU0sbUJBQW1CLENBQUM7QUFLMUMsT0FBTyxLQUFLLE1BQU0sZUFBZSxDQUFDO0FBR2xDLE9BQU8sYUFBYSxNQUFNLGlCQUFpQixDQUFDO0FBQzVDLE9BQU8sS0FBSyxNQUFNLE1BQU0sU0FBUyxDQUFDO0FBQ2xDLE9BQU8sY0FBYyxNQUFNLGtCQUFrQixDQUFDO0FBTTlDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QyxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLGFBQWEsRUFDYixpQkFBaUIsRUFDakIseUJBQXlCLEVBQzFCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxXQUFXLEVBQ1gsYUFBYSxFQUVkLE1BQU0sb0JBQW9CLENBQUM7QUFFNUIsT0FBTyxFQUFFLDBCQUEwQixF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LEdBQUcsT0FBTyxDQUFDO1FBQ3RCLENBQUM7UUFFRCxJQUFJLE9BQVEsU0FBaUIsQ0FBQyxRQUFRLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDdEQsU0FBUyxHQUFJLFNBQWlCLENBQUMsUUFBUSxFQUFtQixDQUFDO1FBQzdELENBQUM7UUFFRCxJQUFJLFVBQXFCLENBQUM7UUFDMUIsSUFBSSxPQUFRLFNBQWlCLENBQUMsU0FBUyxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ3ZELFVBQVUsR0FBRyxTQUFzQixDQUFDO1FBQ3RDLENBQUM7UUFFRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO3dHQTdrQlUsK0JBQStCOzRGQUEvQiwrQkFBK0IscWJDL0Q1QywrQkFDQTs7NEZEOERhLCtCQUErQjtrQkFOM0MsU0FBUzsrQkFDRSwrQkFBK0IsbUJBRXhCLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSTs7MEJBa09iLFFBQVE7OzBCQUFJLElBQUk7eUNBek1WLEdBQUc7c0JBQVgsS0FBSztnQkFNRixZQUFZO3NCQURmLEtBQUs7Z0JBb0JHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBS0csT0FBTztzQkFBZixLQUFLO2dCQU1GLG1CQUFtQjtzQkFEdEIsS0FBSztnQkFzQkYsb0JBQW9CO3NCQUR2QixLQUFLO2dCQTRCRixnQkFBZ0I7c0JBRG5CLEtBQUs7Z0JBYUcsY0FBYztzQkFBdEIsS0FBSztnQkFNRixTQUFTO3NCQURaLEtBQUs7Z0JBbUNGLFlBQVk7c0JBRGYsS0FBSztnQkFjRixLQUFLO3NCQURSLEtBQUs7Z0JBOEJGLE1BQU07c0JBRFQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBTZWxmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IE9sRmVhdHVyZSBmcm9tICdvbC9GZWF0dXJlJztcbmltcG9ydCBPbE92ZXJsYXkgZnJvbSAnb2wvT3ZlcmxheSc7XG5pbXBvcnQgT2xHZW9KU09OIGZyb20gJ29sL2Zvcm1hdC9HZW9KU09OJztcbmltcG9ydCBPbENpcmNsZSBmcm9tICdvbC9nZW9tL0NpcmNsZSc7XG5pbXBvcnQgT2xHZW9tZXRyeSBmcm9tICdvbC9nZW9tL0dlb21ldHJ5JztcbmltcG9ydCB0eXBlIHsgVHlwZSB9IGZyb20gJ29sL2dlb20vR2VvbWV0cnknO1xuaW1wb3J0IE9sTGluZVN0cmluZyBmcm9tICdvbC9nZW9tL0xpbmVTdHJpbmcnO1xuaW1wb3J0IFBvaW50IGZyb20gJ29sL2dlb20vUG9pbnQnO1xuaW1wb3J0IE9sUG9pbnQgZnJvbSAnb2wvZ2VvbS9Qb2ludCc7XG5pbXBvcnQgT2xQb2x5Z29uIGZyb20gJ29sL2dlb20vUG9seWdvbic7XG5pbXBvcnQgT2xWZWN0b3JMYXllciBmcm9tICdvbC9sYXllci9WZWN0b3InO1xuaW1wb3J0ICogYXMgb2xwcm9qIGZyb20gJ29sL3Byb2onO1xuaW1wb3J0IE9sVmVjdG9yU291cmNlIGZyb20gJ29sL3NvdXJjZS9WZWN0b3InO1xuaW1wb3J0ICogYXMgT2xTdHlsZSBmcm9tICdvbC9zdHlsZSc7XG5pbXBvcnQgeyBTdHlsZUxpa2UgYXMgT2xTdHlsZUxpa2UgfSBmcm9tICdvbC9zdHlsZS9TdHlsZSc7XG5cbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBJZ29NYXAgfSBmcm9tICcuLi8uLi9tYXAvc2hhcmVkL21hcCc7XG5pbXBvcnQge1xuICBNZWFzdXJlTGVuZ3RoVW5pdCxcbiAgZm9ybWF0TWVhc3VyZSxcbiAgbWVhc3VyZU9sR2VvbWV0cnksXG4gIHVwZGF0ZU9sR2VvbWV0cnlNaWRwb2ludHNcbn0gZnJvbSAnLi4vLi4vbWVhc3VyZSc7XG5pbXBvcnQge1xuICBEcmF3Q29udHJvbCxcbiAgTW9kaWZ5Q29udHJvbCxcbiAgTW9kaWZ5Q29udHJvbE9wdGlvbnNcbn0gZnJvbSAnLi4vc2hhcmVkL2NvbnRyb2xzJztcbmltcG9ydCB7IEdlb0pTT05HZW9tZXRyeSB9IGZyb20gJy4uL3NoYXJlZC9nZW9tZXRyeS5pbnRlcmZhY2VzJztcbmltcG9ydCB7IGNyZWF0ZURyYXdJbnRlcmFjdGlvblN0eWxlIH0gZnJvbSAnLi4vc2hhcmVkL2dlb21ldHJ5LnV0aWxzJztcbmltcG9ydCB7IERyYXdDb250cm9sT3B0aW9ucyB9IGZyb20gJy4vLi4vc2hhcmVkL2NvbnRyb2xzL2RyYXcnO1xuXG5pbnRlcmZhY2UgSGFzUmFkaXVzIHtcbiAgZ2V0UmFkaXVzOiAoKSA9PiBudW1iZXI7XG4gIHNldFJhZGl1czogKHJhZGl1czogbnVtYmVyKSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIFRoaXMgaW5wdXQgYWxsb3dzIGEgdXNlciB0byBkcmF3IGEgbmV3IGdlb21ldHJ5IG9yIHRvIGVkaXRcbiAqIGFuIGV4aXN0aW5nIG9uZSBvbiBhIG1hcC4gQSB0ZXh0IGlucHV0IGlzIGFsc28gZGlzcGxheWVkIGluIHRoZVxuICogZm9ybSB3aXRoIHNvbWUgaW5zdHJ1Y3Rpb25zLlxuICogVGhpcyBpcyBzdGlsbCBXSVAuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2lnby1nZW9tZXRyeS1mb3JtLWZpZWxkLWlucHV0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2dlb21ldHJ5LWZvcm0tZmllbGQtaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBHZW9tZXRyeUZvcm1GaWVsZElucHV0Q29tcG9uZW50XG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yXG57XG4gIHByaXZhdGUgb2xPdmVybGF5TGF5ZXI6IE9sVmVjdG9yTGF5ZXI8T2xWZWN0b3JTb3VyY2U+O1xuICBwcml2YXRlIG9sR2VvSlNPTiA9IG5ldyBPbEdlb0pTT04oKTtcbiAgcHJpdmF0ZSByZWFkeSA9IGZhbHNlO1xuXG4gIHByaXZhdGUgZHJhd0NvbnRyb2w6IERyYXdDb250cm9sO1xuICBwcml2YXRlIG1vZGlmeUNvbnRyb2w6IE1vZGlmeUNvbnRyb2w7XG4gIHByaXZhdGUgZGVmYXVsdERyYXdTdHlsZVJhZGl1czogbnVtYmVyO1xuICBwcml2YXRlIG9sR2VvbWV0cnlFbmRzJCQ6IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBvbEdlb21ldHJ5Q2hhbmdlcyQkOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgb2xUb29sdGlwID0gdGhpcy5jcmVhdGVNZWFzdXJlVG9vbHRpcCgpO1xuXG4gIC8qKlxuICAgKiBBY3RpdmUgY29udHJvbFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBhY3RpdmVDb250cm9sOiBEcmF3Q29udHJvbCB8IE1vZGlmeUNvbnRyb2w7XG5cbiAgLyoqXG4gICAqIFRoZSBtYXAgdG8gZHJhdyB0aGUgZ2VvbWV0cnkgb25cbiAgICovXG4gIEBJbnB1dCgpIG1hcDogSWdvTWFwO1xuXG4gIC8qKlxuICAgKiBUaGUgZ2VvbWV0cnkgdHlwZVxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IGdlb21ldHJ5VHlwZSh2YWx1ZTogVHlwZSkge1xuICAgIHRoaXMuX2dlb21ldHJ5VHlwZSA9IHZhbHVlO1xuICAgIGlmICh0aGlzLnJlYWR5ID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZGVhY3RpdmF0ZUNvbnRyb2woKTtcbiAgICB0aGlzLmNyZWF0ZURyYXdDb250cm9sKCk7XG4gICAgdGhpcy5kcmF3Q29udHJvbC5mcmVlaGFuZCQubmV4dCh0aGlzLmZyZWVoYW5kRHJhd0lzQWN0aXZlKTtcbiAgICB0aGlzLnRvZ2dsZUNvbnRyb2woKTtcbiAgfVxuICBnZXQgZ2VvbWV0cnlUeXBlKCk6IFR5cGUge1xuICAgIHJldHVybiB0aGlzLl9nZW9tZXRyeVR5cGU7XG4gIH1cbiAgcHJpdmF0ZSBfZ2VvbWV0cnlUeXBlOiBUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgZHJhd0d1aWRlIGFyb3VuZCB0aGUgbW91c2UgcG9pbnRlciB0byBoZWxwIGRyYXdpbmdcbiAgICovXG4gIEBJbnB1dCgpIGRyYXdHdWlkZTogbnVtYmVyID0gbnVsbDtcblxuICAvKipcbiAgICogV2hldGhlciBhIG1lYXN1cmUgdG9vbHRpcCBzaG91bGQgYmUgZGlzcGxheWVkXG4gICAqL1xuICBASW5wdXQoKSBtZWFzdXJlID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgZHJhdyBjb250cm9sIHNob3VsZCBiZSBhY3RpdmUgb3Igbm90XG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgZHJhd0NvbnRyb2xJc0FjdGl2ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZHJhd0NvbnRyb2xJc0FjdGl2ZTtcbiAgfVxuICBzZXQgZHJhd0NvbnRyb2xJc0FjdGl2ZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2RyYXdDb250cm9sSXNBY3RpdmUgPSB2YWx1ZTtcbiAgICBpZiAodGhpcy5yZWFkeSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5kZWFjdGl2YXRlQ29udHJvbCgpO1xuICAgIGlmICghdGhpcy5fZHJhd0NvbnRyb2xJc0FjdGl2ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRvZ2dsZUNvbnRyb2woKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBfZHJhd0NvbnRyb2xJc0FjdGl2ZSA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgZnJlZWhhbmQgZHJhdyBjb250cm9sIHNob3VsZCBiZSBhY3RpdmUgb3Igbm90XG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgZnJlZWhhbmREcmF3SXNBY3RpdmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2ZyZWVoYW5kRHJhd0lzQWN0aXZlO1xuICB9XG4gIHNldCBmcmVlaGFuZERyYXdJc0FjdGl2ZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2ZyZWVoYW5kRHJhd0lzQWN0aXZlID0gdmFsdWU7XG4gICAgdGhpcy5kZWFjdGl2YXRlQ29udHJvbCgpO1xuXG4gICAgdGhpcy5jcmVhdGVEcmF3Q29udHJvbCgpO1xuICAgIHRoaXMuY3JlYXRlTW9kaWZ5Q29udHJvbCgpO1xuXG4gICAgdGhpcy5kcmF3Q29udHJvbC5mcmVlaGFuZCQubmV4dCh0aGlzLmZyZWVoYW5kRHJhd0lzQWN0aXZlKTtcblxuICAgIGlmICh0aGlzLnJlYWR5ID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5kcmF3Q29udHJvbElzQWN0aXZlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudG9nZ2xlQ29udHJvbCgpO1xuICB9XG4gIHByaXZhdGUgX2ZyZWVoYW5kRHJhd0lzQWN0aXZlOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGZyZWVoYW5kIGRyYXcgY29udHJvbCBzaG91bGQgYmUgYWN0aXZlIG9yIG5vdFxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IHByZWRlZmluZWRSYWRpdXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3ByZWRlZmluZWRSYWRpdXM7XG4gIH1cbiAgc2V0IHByZWRlZmluZWRSYWRpdXModmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9wcmVkZWZpbmVkUmFkaXVzID0gdmFsdWU7XG4gICAgdGhpcy5kcmF3Q29udHJvbC5pc3ByZWRlZmluZWRSYWRpdXMkLm5leHQodmFsdWUpO1xuICB9XG4gIHByaXZhdGUgX3ByZWRlZmluZWRSYWRpdXM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENvbnRyb2wgb3B0aW9uc1xuICAgKi9cbiAgQElucHV0KCkgY29udHJvbE9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblxuICAvKipcbiAgICogU3R5bGUgZm9yIHRoZSBkcmF3IGNvbnRyb2wgKGFwcGxpZXMgd2hpbGUgdGhlIGdlb21ldHJ5IGlzIGJlaW5nIGRyYXduKVxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IGRyYXdTdHlsZSh2YWx1ZTogT2xTdHlsZUxpa2UgfCBPbFN0eWxlLlJlZ3VsYXJTaGFwZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YWx1ZSA9IGNyZWF0ZURyYXdJbnRlcmFjdGlvblN0eWxlKCk7XG4gICAgfVxuICAgIHRoaXMuX2RyYXdTdHlsZSA9IHZhbHVlO1xuXG4gICAgY29uc3Qgb2xHdWlkZVN0eWxlID0gdGhpcy5nZXRHdWlkZVN0eWxlRnJvbURyYXdTdHlsZSh2YWx1ZSk7XG4gICAgaWYgKG9sR3VpZGVTdHlsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmRlZmF1bHREcmF3U3R5bGVSYWRpdXMgPSBvbEd1aWRlU3R5bGUuZ2V0UmFkaXVzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGVmYXVsdERyYXdTdHlsZVJhZGl1cyA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVhZHkgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5kZWFjdGl2YXRlQ29udHJvbCgpO1xuICAgIHRoaXMuY3JlYXRlRHJhd0NvbnRyb2woKTtcbiAgICB0aGlzLmNyZWF0ZU1vZGlmeUNvbnRyb2woKTtcblxuICAgIHRoaXMuZHJhd0NvbnRyb2wuZnJlZWhhbmQkLm5leHQodGhpcy5mcmVlaGFuZERyYXdJc0FjdGl2ZSk7XG4gICAgdGhpcy50b2dnbGVDb250cm9sKCk7XG4gIH1cbiAgZ2V0IGRyYXdTdHlsZSgpOiBPbFN0eWxlTGlrZSB8IE9sU3R5bGUuUmVndWxhclNoYXBlIHtcbiAgICByZXR1cm4gdGhpcy5fZHJhd1N0eWxlO1xuICB9XG4gIHByaXZhdGUgX2RyYXdTdHlsZTogT2xTdHlsZUxpa2UgfCBPbFN0eWxlLlJlZ3VsYXJTaGFwZTtcblxuICAvKipcbiAgICogU3R5bGUgZm9yIHRoZSBvdmVybGF5IGxheWVyIChhcHBsaWVzIG9uY2UgdGhlIGdlb21ldHJ5IGlzIGFkZGVkIHRvIHRoZSBtYXApXG4gICAqIElmIG5vdCBzcGVjaWZpZWQsIGRyYXdTdHlsZSBhcHBsaWVzXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgb3ZlcmxheVN0eWxlKHZhbHVlOiBPbFN0eWxlTGlrZSB8IE9sU3R5bGUuUmVndWxhclNoYXBlKSB7XG4gICAgdGhpcy5fb3ZlcmxheVN0eWxlID0gdmFsdWU7XG4gIH1cbiAgZ2V0IG92ZXJsYXlTdHlsZSgpOiBPbFN0eWxlTGlrZSB8IE9sU3R5bGUuUmVndWxhclNoYXBlIHtcbiAgICByZXR1cm4gdGhpcy5fb3ZlcmxheVN0eWxlO1xuICB9XG4gIHByaXZhdGUgX292ZXJsYXlTdHlsZTogT2xTdHlsZUxpa2UgfCBPbFN0eWxlLlJlZ3VsYXJTaGFwZTtcblxuICAvKipcbiAgICogVGhlIGdlb21ldHJ5IHZhbHVlIChHZW9KU09OKVxuICAgKiBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yLlxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IHZhbHVlKHZhbHVlOiBHZW9KU09OR2VvbWV0cnkpIHtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgIGlmICh0aGlzLnJlYWR5ID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5hZGRHZW9KU09OVG9PdmVybGF5KHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vbE92ZXJsYXlTb3VyY2UuY2xlYXIodHJ1ZSk7XG4gICAgfVxuICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xuICAgIHRoaXMudG9nZ2xlQ29udHJvbCgpO1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG4gIGdldCB2YWx1ZSgpOiBHZW9KU09OR2VvbWV0cnkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuICBwcml2YXRlIF92YWx1ZTogR2VvSlNPTkdlb21ldHJ5O1xuXG4gIC8qKlxuICAgKiBUaGUgdmVjdG9yIHNvdXJjZSB0byBhZGQgdGhlIGdlb21ldHJ5IHRvXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZ2V0IG9sT3ZlcmxheVNvdXJjZSgpOiBPbFZlY3RvclNvdXJjZSB7XG4gICAgcmV0dXJuIHRoaXMub2xPdmVybGF5TGF5ZXIuZ2V0U291cmNlKCk7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgcmFkaXVzKHZhbHVlOiBhbnkpIHtcbiAgICBpZiAodGhpcy5yZWFkeSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMubW9kaWZ5Q29udHJvbC5nZXRTb3VyY2UoKSkge1xuICAgICAgdGhpcy5tb2RpZnlDb250cm9sLmdldFNvdXJjZSgpLnJlZnJlc2goKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZnJlZWhhbmREcmF3SXNBY3RpdmUpIHtcbiAgICAgIGxldCBvbE1vZGlmeTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBvbE1vZGlmeSA9IHRoaXMubW9kaWZ5Q29udHJvbC5vbE1vZGlmeUludGVyYWN0aW9uO1xuICAgICAgICBpZiAob2xNb2RpZnkpIHtcbiAgICAgICAgICBpZiAob2xNb2RpZnkuZmVhdHVyZXNfKSB7XG4gICAgICAgICAgICBvbE1vZGlmeS5mZWF0dXJlc18uY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMuYWRkR2VvSlNPTlRvT3ZlcmxheSh0aGlzLnZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sIDApO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgcHVibGljIG5nQ29udHJvbDogTmdDb250cm9sXG4gICkge1xuICAgIGlmICh0aGlzLm5nQ29udHJvbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBTZXR0aW5nIHRoZSB2YWx1ZSBhY2Nlc3NvciBkaXJlY3RseSAoaW5zdGVhZCBvZiB1c2luZ1xuICAgICAgLy8gdGhlIHByb3ZpZGVycykgdG8gYXZvaWQgcnVubmluZyBpbnRvIGEgY2lyY3VsYXIgaW1wb3J0LlxuICAgICAgdGhpcy5uZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBvdmVybGF5IGxheWVyLCBhZGQgdGhlIGluaXRpYWwgZ2VvbWV0cnkgdG8gaXQgKGlmIGFueSlcbiAgICogYW5kIHRvZ2dsZSB0aGUgcmlnaHQgaW50ZXJhY3Rpb24uXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMuZHJhd1N0eWxlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZHJhd1N0eWxlID0gY3JlYXRlRHJhd0ludGVyYWN0aW9uU3R5bGUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vdmVybGF5U3R5bGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5vdmVybGF5U3R5bGUgPSB0aGlzLmRyYXdTdHlsZTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZE9sT3ZlcmxheUxheWVyKCk7XG4gICAgdGhpcy5jcmVhdGVEcmF3Q29udHJvbCgpO1xuICAgIHRoaXMuY3JlYXRlTW9kaWZ5Q29udHJvbCgpO1xuXG4gICAgaWYgKHRoaXMudmFsdWUpIHtcbiAgICAgIHRoaXMuYWRkR2VvSlNPTlRvT3ZlcmxheSh0aGlzLnZhbHVlKTtcbiAgICB9XG4gICAgdGhpcy50b2dnbGVDb250cm9sKCk7XG5cbiAgICB0aGlzLnJlYWR5ID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciB0aGUgb3ZlcmxheSBsYXllciBhbmQgYW55IGludGVyYWN0aW9uIGFkZGVkIGJ5IHRoaXMgY29tcG9uZW50LlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIG5nT25EZXN0cm95KCkge1xuICAgIC8vIFRoaXMgaXMgbWFuZGF0b3J5IHdoZW4gdGhlIGZvcm0gY29udHJvbCBpcyByZXVzZWQgYWZ0ZXJcbiAgICAvLyB0aGlzIGNvbXBvbmVudCBoYXMgYmVlbiBkZXN0cm95ZWQuIEl0IHNlZW1zIGxpa2UgdGhlIGNvbnRyb2xcbiAgICAvLyBrZWVwcyBhIHJlZmVyZW5jZSB0byB0aGlzIGNvbXBvbmVudCBldmVuIGFmdGVyIGl0J3MgZGVzdHJveWVkXG4gICAgLy8gYW5kIGl0IGF0dGVtcHRzIHRvIHNldCBpdCdzIHZhbHVlXG4gICAgdGhpcy5yZWFkeSA9IGZhbHNlO1xuXG4gICAgdGhpcy5kZWFjdGl2YXRlQ29udHJvbCgpO1xuICAgIHRoaXMub2xPdmVybGF5U291cmNlLmNsZWFyKCk7XG4gICAgdGhpcy5tYXAub2wucmVtb3ZlTGF5ZXIodGhpcy5vbE92ZXJsYXlMYXllcik7XG4gIH1cblxuICAvKipcbiAgICogSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBDb250cm9sVmFsdWVBY2Nlc3Nvci5cbiAgICovXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cbiAgcHJpdmF0ZSBvbkNoYW5nZTogYW55ID0gKCkgPT4gdm9pZCAxO1xuXG4gIC8qKlxuICAgKiBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yLlxuICAgKi9cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG4gIHByaXZhdGUgb25Ub3VjaGVkOiBhbnkgPSAoKSA9PiB2b2lkIDE7XG5cbiAgLyoqXG4gICAqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gICAqL1xuICB3cml0ZVZhbHVlKHZhbHVlOiBHZW9KU09OR2VvbWV0cnkpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGFuIG92ZXJsYXkgbGF5ZXIgdG8gdGhlIG1hcFxuICAgKi9cbiAgcHJpdmF0ZSBhZGRPbE92ZXJsYXlMYXllcigpIHtcbiAgICB0aGlzLm9sT3ZlcmxheUxheWVyID0gbmV3IE9sVmVjdG9yTGF5ZXIoe1xuICAgICAgc291cmNlOiBuZXcgT2xWZWN0b3JTb3VyY2UoKSxcbiAgICAgIHpJbmRleDogNTAwLFxuICAgICAgc3R5bGU6IG51bGxcbiAgICB9KTtcbiAgICB0aGlzLm1hcC5vbC5hZGRMYXllcih0aGlzLm9sT3ZlcmxheUxheWVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBkcmF3IGNvbnRyb2wgYW5kIHN1YnNjcmliZSB0byBpdCdzIGdlb21ldHJ5XG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZURyYXdDb250cm9sKCkge1xuICAgIGNvbnN0IGNvbnRyb2xPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5jb250cm9sT3B0aW9ucywge1xuICAgICAgZ2VvbWV0cnlUeXBlOiB0aGlzLmdlb21ldHJ5VHlwZSB8fCAnUG9pbnQnLFxuICAgICAgZHJhd2luZ0xheWVyOiB0aGlzLm9sT3ZlcmxheUxheWVyLFxuICAgICAgaW50ZXJhY3Rpb25TdHlsZTpcbiAgICAgICAgdHlwZW9mIHRoaXMuZHJhd1N0eWxlID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgPyB0aGlzLmRyYXdTdHlsZVxuICAgICAgICAgIDogKG9sRmVhdHVyZTogT2xGZWF0dXJlPE9sR2VvbWV0cnk+LCByZXNvbHV0aW9uOiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgY29uc3Qgc3R5bGUgPSB0aGlzLmRyYXdTdHlsZTtcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVEcmF3U3R5bGVXaXRoRHJhd0d1aWRlKHN0eWxlLCByZXNvbHV0aW9uKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgICAgICAgfVxuICAgIH0pIGFzIERyYXdDb250cm9sT3B0aW9ucztcbiAgICB0aGlzLmRyYXdDb250cm9sID0gbmV3IERyYXdDb250cm9sKGNvbnRyb2xPcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBtb2RpZnkgY29udHJvbCBhbmQgc3Vic2NyaWJlIHRvIGl0J3MgZ2VvbWV0cnlcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlTW9kaWZ5Q29udHJvbCgpIHtcbiAgICBjb25zdCBjb250cm9sT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuY29udHJvbE9wdGlvbnMsIHtcbiAgICAgIGxheWVyOiB0aGlzLm9sT3ZlcmxheUxheWVyLFxuICAgICAgZHJhd1N0eWxlOlxuICAgICAgICB0eXBlb2YgdGhpcy5kcmF3U3R5bGUgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICA/IHRoaXMuZHJhd1N0eWxlXG4gICAgICAgICAgOiAob2xGZWF0dXJlOiBPbEZlYXR1cmU8T2xHZW9tZXRyeT4sIHJlc29sdXRpb246IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBzdHlsZSA9IHRoaXMuZHJhd1N0eWxlO1xuICAgICAgICAgICAgICB0aGlzLnVwZGF0ZURyYXdTdHlsZVdpdGhEcmF3R3VpZGUoc3R5bGUsIHJlc29sdXRpb24pO1xuICAgICAgICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgICAgICAgICB9XG4gICAgfSkgYXMgTW9kaWZ5Q29udHJvbE9wdGlvbnM7XG4gICAgdGhpcy5tb2RpZnlDb250cm9sID0gbmV3IE1vZGlmeUNvbnRyb2woY29udHJvbE9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSB0aGUgcHJvcGVyIGNvbnRyb2wgKGRyYXcgb3IgbW9kaWZ5KVxuICAgKi9cbiAgcHJpdmF0ZSB0b2dnbGVDb250cm9sKCkge1xuICAgIGxldCBhY3RpdmF0ZTtcbiAgICBpZiAoIXRoaXMudmFsdWUgJiYgdGhpcy5nZW9tZXRyeVR5cGUpIHtcbiAgICAgIGFjdGl2YXRlID0gdGhpcy5kcmF3Q29udHJvbDtcbiAgICB9IGVsc2Uge1xuICAgICAgYWN0aXZhdGUgPSB0aGlzLm1vZGlmeUNvbnRyb2w7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGNvbnRyb2wgdGhhdCBzaG91bGQgYmUgYWN0aXZhdGVkXG4gICAgLy8gaXMgbm90IHRoZSBzYW1lIGFzIHRoZSBjdXJyZW50IGFjdGl2ZSBjb250cm9sLFxuICAgIC8vIGRlYWN0aXZhdGUgdGhlIGN1cnJlbnQgY29udHJvbCBhbmQgYWN0aXZhdGUgdGhlIG5ldyBvbmVcbiAgICAvLyBPdGhlcndpc2UsIGRvIG5vdGhpbmcgYW5kIGtlZXAgdGhlIGN1cnJlbnQgY29udHJvbCBhY3RpdmVcbiAgICBpZiAoYWN0aXZhdGUgIT09IHRoaXMuYWN0aXZlQ29udHJvbCkge1xuICAgICAgdGhpcy5kZWFjdGl2YXRlQ29udHJvbCgpO1xuICAgICAgdGhpcy5hY3RpdmF0ZUNvbnRyb2woYWN0aXZhdGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBY3RpdmF0ZSBhIGdpdmVuIGNvbnRyb2xcbiAgICogQHBhcmFtIGNvbnRyb2wgQ29udHJvbFxuICAgKi9cbiAgcHJpdmF0ZSBhY3RpdmF0ZUNvbnRyb2woY29udHJvbDogRHJhd0NvbnRyb2wgfCBNb2RpZnlDb250cm9sKSB7XG4gICAgdGhpcy5hY3RpdmVDb250cm9sID0gY29udHJvbDtcbiAgICB0aGlzLm9sR2VvbWV0cnlFbmRzJCQgPSBjb250cm9sLmVuZCQuc3Vic2NyaWJlKChvbEdlb21ldHJ5OiBPbEdlb21ldHJ5KSA9PlxuICAgICAgdGhpcy5vbk9sR2VvbWV0cnlFbmRzKG9sR2VvbWV0cnkpXG4gICAgKTtcbiAgICBpZiAodGhpcy5tZWFzdXJlID09PSB0cnVlICYmIGNvbnRyb2wgPT09IHRoaXMuZHJhd0NvbnRyb2wpIHtcbiAgICAgIHRoaXMub2xHZW9tZXRyeUNoYW5nZXMkJCA9IGNvbnRyb2wuY2hhbmdlcyQuc3Vic2NyaWJlKFxuICAgICAgICAob2xHZW9tZXRyeTogT2xQb2x5Z29uIHwgT2xQb2ludCB8IE9sTGluZVN0cmluZyB8IE9sQ2lyY2xlKSA9PlxuICAgICAgICAgIHRoaXMub25PbEdlb21ldHJ5Q2hhbmdlcyhvbEdlb21ldHJ5KVxuICAgICAgKTtcbiAgICB9XG4gICAgY29udHJvbC5zZXRPbE1hcCh0aGlzLm1hcC5vbCwgZmFsc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlYWN0aXZhdGUgdGhlIGFjdGl2ZSBjb250cm9sXG4gICAqL1xuICBwcml2YXRlIGRlYWN0aXZhdGVDb250cm9sKCkge1xuICAgIHRoaXMucmVtb3ZlTWVhc3VyZVRvb2x0aXAoKTtcbiAgICBpZiAodGhpcy5hY3RpdmVDb250cm9sICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuYWN0aXZlQ29udHJvbC5zZXRPbE1hcCh1bmRlZmluZWQpO1xuICAgIH1cbiAgICBpZiAodGhpcy5vbEdlb21ldHJ5RW5kcyQkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMub2xHZW9tZXRyeUVuZHMkJC51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5vbEdlb21ldHJ5Q2hhbmdlcyQkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMub2xHZW9tZXRyeUNoYW5nZXMkJC51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICB0aGlzLmFjdGl2ZUNvbnRyb2wgPSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIG1lYXN1cmVzIG9ic2VydmFibGVzIGFuZCBtYXAgdG9vbHRpcHNcbiAgICogQHBhcmFtIG9sR2VvbWV0cnkgT2wgbGluZXN0cmluZyBvciBwb2x5Z29uXG4gICAqL1xuICBwcml2YXRlIG9uT2xHZW9tZXRyeUVuZHMob2xHZW9tZXRyeTogT2xHZW9tZXRyeSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMucmVtb3ZlTWVhc3VyZVRvb2x0aXAoKTtcbiAgICB0aGlzLnNldE9sR2VvbWV0cnkob2xHZW9tZXRyeSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIG1lYXN1cmVzIG9ic2VydmFibGVzIGFuZCBtYXAgdG9vbHRpcHNcbiAgICogQHBhcmFtIG9sR2VvbWV0cnkgT2wgbGluZXN0cmluZyBvciBwb2x5Z29uXG4gICAqL1xuICBwcml2YXRlIG9uT2xHZW9tZXRyeUNoYW5nZXMoXG4gICAgb2xHZW9tZXRyeTogT2xQb2x5Z29uIHwgT2xQb2ludCB8IE9sTGluZVN0cmluZyB8IE9sQ2lyY2xlXG4gICkge1xuICAgIGlmIChvbEdlb21ldHJ5LmdldFR5cGUoKSAhPT0gJ1BvaW50Jykge1xuICAgICAgdGhpcy51cGRhdGVNZWFzdXJlVG9vbHRpcChvbEdlb21ldHJ5KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2hlbiBkcmF3aW5nIGVuZHMsIGNvbnZlcnQgdGhlIG91dHB1dCB2YWx1ZSB0byBHZW9KU09OIGFuZCBrZWVwIGl0LlxuICAgKiBSZXN0b3JlIHRoZSBkb3VibGUgY2xpY2sgaW50ZXJhY3Rpb24uXG4gICAqIEBwYXJhbSBvbEdlb21ldHJ5IE9MIGdlb21ldHJ5XG4gICAqL1xuICBwcml2YXRlIHNldE9sR2VvbWV0cnkob2xHZW9tZXRyeTogT2xHZW9tZXRyeSB8IHVuZGVmaW5lZCkge1xuICAgIGlmIChvbEdlb21ldHJ5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAob2xHZW9tZXRyeS5nZXRUeXBlKCkgPT09ICdDaXJjbGUnKSB7XG4gICAgICAvLyBCZWNhdXNlIENpcmNsZSBkb2Vzbid0IGV4aXN0IGFzIGEgR2VvSlNPTiBvYmplY3RcbiAgICAgIG9sR2VvbWV0cnkgPSB0aGlzLmNpcmNsZVRvUG9pbnQob2xHZW9tZXRyeSk7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLm9sR2VvSlNPTi53cml0ZUdlb21ldHJ5T2JqZWN0KG9sR2VvbWV0cnksIHtcbiAgICAgIGZlYXR1cmVQcm9qZWN0aW9uOiB0aGlzLm1hcC5wcm9qZWN0aW9uLFxuICAgICAgZGF0YVByb2plY3Rpb246ICdFUFNHOjQzMjYnXG4gICAgfSkgYXMgYW55O1xuICAgIGlmIChvbEdlb21ldHJ5LmdldCgncmFkaXVzJykpIHtcbiAgICAgIHZhbHVlLnJhZGl1cyA9IG9sR2VvbWV0cnkuZ2V0KCdyYWRpdXMnKTtcbiAgICAgIG9sR2VvbWV0cnkuc2V0KCdyYWRpdXMnLCB2YWx1ZS5yYWRpdXMpO1xuICAgIH1cbiAgICB0aGlzLndyaXRlVmFsdWUodmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBjaXJjbGVUb1BvaW50KG9sR2VvbWV0cnkpIHtcbiAgICBjb25zdCBjZW50ZXIgPSBvbEdlb21ldHJ5LmdldENlbnRlcigpO1xuICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gb2xwcm9qLnRyYW5zZm9ybShcbiAgICAgIGNlbnRlcixcbiAgICAgIHRoaXMubWFwLnByb2plY3Rpb24sXG4gICAgICAnRVBTRzo0MzI2J1xuICAgICk7XG4gICAgY29uc3QgcmFkaXVzID0gTWF0aC5yb3VuZChcbiAgICAgIG9sR2VvbWV0cnkuZ2V0UmFkaXVzKCkgKiBNYXRoLmNvcygoTWF0aC5QSSAvIDE4MCkgKiBjb29yZGluYXRlc1sxXSlcbiAgICApO1xuXG4gICAgLy8gQ29udmVydCBpdCB0byBhIHBvaW50IG9iamVjdFxuICAgIG9sR2VvbWV0cnkgPSBuZXcgUG9pbnQoY2VudGVyKTtcbiAgICBvbEdlb21ldHJ5LnNldCgncmFkaXVzJywgcmFkaXVzLCB0cnVlKTtcbiAgICByZXR1cm4gb2xHZW9tZXRyeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBHZW9KU09OIGdlb21ldHJ5IHRvIHRoZSBvdmVybGF5XG4gICAqIEBwYXJhbSBnZW9tZXRyeSBHZW9KU09OIGdlb21ldHJ5XG4gICAqL1xuICBwcml2YXRlIGFkZEdlb0pTT05Ub092ZXJsYXkoZ2VvbWV0cnk6IEdlb0pTT05HZW9tZXRyeSkge1xuICAgIGNvbnN0IG9sR2VvbWV0cnkgPSB0aGlzLm9sR2VvSlNPTi5yZWFkR2VvbWV0cnkoZ2VvbWV0cnksIHtcbiAgICAgIGRhdGFQcm9qZWN0aW9uOiAnRVBTRzo0MzI2JyxcbiAgICAgIGZlYXR1cmVQcm9qZWN0aW9uOiB0aGlzLm1hcC5wcm9qZWN0aW9uXG4gICAgfSk7XG4gICAgY29uc3Qgb2xGZWF0dXJlID0gbmV3IE9sRmVhdHVyZSh7XG4gICAgICBnZW9tZXRyeTogb2xHZW9tZXRyeVxuICAgIH0pO1xuICAgIG9sRmVhdHVyZS5zZXRTdHlsZSh0aGlzLm92ZXJsYXlTdHlsZSBhcyBPbFN0eWxlLlN0eWxlKTtcbiAgICB0aGlzLm9sT3ZlcmxheVNvdXJjZS5jbGVhcigpO1xuICAgIHRoaXMub2xPdmVybGF5U291cmNlLmFkZEZlYXR1cmUob2xGZWF0dXJlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgdGhlIG1lYXN1cmUgdG9vbHRpcFxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVNZWFzdXJlVG9vbHRpcCgpIHtcbiAgICByZXR1cm4gbmV3IE9sT3ZlcmxheSh7XG4gICAgICBlbGVtZW50OiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSxcbiAgICAgIG9mZnNldDogWy0zMCwgLTEwXSxcbiAgICAgIGNsYXNzTmFtZTogWydpZ28tbWFwLXRvb2x0aXAnLCAnaWdvLW1hcC10b29sdGlwLW1lYXN1cmUnXS5qb2luKCcgJyksXG4gICAgICBzdG9wRXZlbnQ6IGZhbHNlXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBtZWFzdXJlIHRvb2x0aXAgb2YgYW4gT0wgZ2VvbWV0cnlcbiAgICogQHBhcmFtIG9sR2VvbWV0cnkgT0wgR2VvbWV0cnlcbiAgICovXG4gIHByaXZhdGUgdXBkYXRlTWVhc3VyZVRvb2x0aXAoXG4gICAgb2xHZW9tZXRyeTogT2xQb2x5Z29uIHwgT2xQb2ludCB8IE9sTGluZVN0cmluZyB8IE9sQ2lyY2xlXG4gICkge1xuICAgIGNvbnN0IG1lYXN1cmUgPSBtZWFzdXJlT2xHZW9tZXRyeShvbEdlb21ldHJ5LCB0aGlzLm1hcC5wcm9qZWN0aW9uKTtcbiAgICBjb25zdCBsZW5ndGhzID0gbWVhc3VyZS5sZW5ndGhzO1xuICAgIGNvbnN0IGxhc3RJbmRleCA9XG4gICAgICBvbEdlb21ldHJ5LmdldFR5cGUoKSA9PT0gJ1BvbHlnb24nXG4gICAgICAgID8gbGVuZ3Rocy5sZW5ndGggLSAyXG4gICAgICAgIDogbGVuZ3Rocy5sZW5ndGggLSAxO1xuICAgIGNvbnN0IGxhc3RMZW5ndGggPSBsZW5ndGhzW2xhc3RJbmRleF07XG5cbiAgICBjb25zdCBvbE1pZHBvaW50cyA9IHVwZGF0ZU9sR2VvbWV0cnlNaWRwb2ludHMob2xHZW9tZXRyeSk7XG4gICAgY29uc3Qgb2xMYXN0TWlkcG9pbnQgPSBvbE1pZHBvaW50c1tsYXN0SW5kZXhdO1xuICAgIGlmIChvbE1pZHBvaW50cy5sZW5ndGggPT09IDAgfHwgb2xMYXN0TWlkcG9pbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5yZW1vdmVNZWFzdXJlVG9vbHRpcCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMub2xUb29sdGlwLnNldFBvc2l0aW9uKG9sTGFzdE1pZHBvaW50LmdldEZsYXRDb29yZGluYXRlcygpKTtcblxuICAgIGNvbnN0IGlubmVySHRtbCA9IGZvcm1hdE1lYXN1cmUobGFzdExlbmd0aCwge1xuICAgICAgZGVjaW1hbDogMSxcbiAgICAgIHVuaXQ6IE1lYXN1cmVMZW5ndGhVbml0Lk1ldGVycyxcbiAgICAgIHVuaXRBYmJyOiB0cnVlLFxuICAgICAgbG9jYWxlOiAnZnInXG4gICAgfSk7XG4gICAgdGhpcy5vbFRvb2x0aXAuZ2V0RWxlbWVudCgpLmlubmVySFRNTCA9IGlubmVySHRtbDtcbiAgICBpZiAodGhpcy5vbFRvb2x0aXAuZ2V0TWFwKCkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5tYXAub2wuYWRkT3ZlcmxheSh0aGlzLm9sVG9vbHRpcCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSB0aGUgbWVhc3VyZSB0b29sdGlwIGZyb20gdGhlIG1hcFxuICAgKi9cbiAgcHJpdmF0ZSByZW1vdmVNZWFzdXJlVG9vbHRpcCgpIHtcbiAgICBpZiAodGhpcy5vbFRvb2x0aXAuZ2V0TWFwICYmIHRoaXMub2xUb29sdGlwLmdldE1hcCgpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMubWFwLm9sLnJlbW92ZU92ZXJsYXkodGhpcy5vbFRvb2x0aXApO1xuICAgICAgdGhpcy5vbFRvb2x0aXAuc2V0TWFwKHVuZGVmaW5lZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkanVzdCB0aGUgZHJhdyBzdHlsZSB3aXRoIHRoZSBzcGVjaWZpZWQgZHJhdyBndWlkZSBkaXN0YW5jZSwgaWYgcG9zc2libGVcbiAgICogQHBhcmFtIG9sU3R5bGUgRHJhdyBzdHlsZSB0byB1cGRhdGVcbiAgICogQHBhcmFtIHJlc29sdXRpb24gUmVzb2x1dGlvbiAodG8gbWFrZSB0aGUgc2NyZWVuIHNpemUgb2Ygc3ltYm9sIGZpdCB0aGUgZHJhd0d1aWRlIHZhbHVlKVxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVEcmF3U3R5bGVXaXRoRHJhd0d1aWRlKFxuICAgIG9sU3R5bGU6IE9sU3R5bGVMaWtlIHwgT2xTdHlsZS5SZWd1bGFyU2hhcGUsXG4gICAgcmVzb2x1dGlvbjogbnVtYmVyXG4gICkge1xuICAgIGNvbnN0IG9sR3VpZGVTdHlsZSA9IHRoaXMuZ2V0R3VpZGVTdHlsZUZyb21EcmF3U3R5bGUob2xTdHlsZSk7XG4gICAgaWYgKG9sR3VpZGVTdHlsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGRyYXdHdWlkZSA9IHRoaXMuZHJhd0d1aWRlO1xuICAgIGxldCByYWRpdXM7XG4gICAgaWYgKCFkcmF3R3VpZGUgfHwgZHJhd0d1aWRlIDwgMCkge1xuICAgICAgcmFkaXVzID0gdGhpcy5kZWZhdWx0RHJhd1N0eWxlUmFkaXVzO1xuICAgIH0gZWxzZSB7XG4gICAgICByYWRpdXMgPSBkcmF3R3VpZGUgPiAwID8gZHJhd0d1aWRlIC8gcmVzb2x1dGlvbiA6IGRyYXdHdWlkZTtcbiAgICB9XG4gICAgb2xHdWlkZVN0eWxlLnNldFJhZGl1cyhyYWRpdXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgd2V0aGVyIGEgZ2l2ZW4gT3BlbiBMYXllcnMgc3R5bGUgaGFzIGEgcmFkaXVzIHByb3BlcnR5IHRoYXQgY2FuIGJlIHNldCAodXNlZCB0byBzZXQgZHJhdyBndWlkZSlcbiAgICogQHBhcmFtIG9sU3R5bGUgVGhlIHN0eWxlIG9uIHdoaWNoIHRvIHBlcmZvcm0gdGhlIGNoZWNrXG4gICAqL1xuICBwcml2YXRlIGdldEd1aWRlU3R5bGVGcm9tRHJhd1N0eWxlKFxuICAgIG9sU3R5bGU6IE9sU3R5bGVMaWtlIHwgT2xTdHlsZS5SZWd1bGFyU2hhcGVcbiAgKTogSGFzUmFkaXVzIHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgYmFzZVN0eWxlOiB1bmtub3duO1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9sU3R5bGUpKSB7XG4gICAgICBiYXNlU3R5bGUgPSBvbFN0eWxlWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBiYXNlU3R5bGUgPSBvbFN0eWxlO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgKGJhc2VTdHlsZSBhcyBhbnkpLmdldEltYWdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBiYXNlU3R5bGUgPSAoYmFzZVN0eWxlIGFzIGFueSkuZ2V0SW1hZ2UoKSBhcyBPbFN0eWxlLkltYWdlO1xuICAgIH1cblxuICAgIGxldCBndWlkZVN0eWxlOiBIYXNSYWRpdXM7XG4gICAgaWYgKHR5cGVvZiAoYmFzZVN0eWxlIGFzIGFueSkuc2V0UmFkaXVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBndWlkZVN0eWxlID0gYmFzZVN0eWxlIGFzIEhhc1JhZGl1cztcbiAgICB9XG5cbiAgICByZXR1cm4gZ3VpZGVTdHlsZTtcbiAgfVxufVxuIiwiPG5nLXRlbXBsYXRlPjwvbmctdGVtcGxhdGU+XG4iXX0=