@igo2/geo 1.14.1 → 1.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (502) hide show
  1. package/assets/icons/cross_black_18px.svg +88 -88
  2. package/assets/icons/place_blue_36px.svg +55 -55
  3. package/assets/icons/place_green_36px.svg +55 -55
  4. package/assets/icons/place_red_36px.svg +55 -55
  5. package/assets/icons/place_yellow_36px.svg +55 -55
  6. package/esm2020/lib/catalog/catalog-browser/catalog-browser-group.component.mjs +18 -14
  7. package/esm2020/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs +67 -29
  8. package/esm2020/lib/catalog/catalog-browser/catalog-browser.component.mjs +25 -22
  9. package/esm2020/lib/catalog/catalog-browser/catalog-browser.module.mjs +1 -1
  10. package/esm2020/lib/catalog/catalog-library/add-catalog-dialog.component.mjs +2 -2
  11. package/esm2020/lib/catalog/catalog-library/catalog-library-item.component.mjs +2 -2
  12. package/esm2020/lib/catalog/catalog-library/catalog-library.component.mjs +7 -12
  13. package/esm2020/lib/catalog/catalog-library/catalog-library.module.mjs +1 -1
  14. package/esm2020/lib/catalog/catalog.module.mjs +1 -1
  15. package/esm2020/lib/catalog/shared/catalog.abstract.mjs +1 -1
  16. package/esm2020/lib/catalog/shared/catalog.enum.mjs +1 -1
  17. package/esm2020/lib/catalog/shared/catalog.interface.mjs +1 -1
  18. package/esm2020/lib/catalog/shared/catalog.service.mjs +3 -5
  19. package/esm2020/lib/datasource/datasource.module.mjs +1 -1
  20. package/esm2020/lib/datasource/shared/capabilities.service.mjs +2 -2
  21. package/esm2020/lib/datasource/shared/datasource.service.mjs +27 -31
  22. package/esm2020/lib/datasource/shared/datasources/any-datasource.interface.mjs +1 -1
  23. package/esm2020/lib/datasource/shared/datasources/any-datasource.mjs +1 -1
  24. package/esm2020/lib/datasource/shared/datasources/arcgisrest-datasource.interface.mjs +1 -1
  25. package/esm2020/lib/datasource/shared/datasources/arcgisrest-datasource.mjs +1 -1
  26. package/esm2020/lib/datasource/shared/datasources/carto-datasource.interface.mjs +1 -1
  27. package/esm2020/lib/datasource/shared/datasources/carto-datasource.mjs +1 -1
  28. package/esm2020/lib/datasource/shared/datasources/cluster-datasource.interface.mjs +1 -1
  29. package/esm2020/lib/datasource/shared/datasources/cluster-datasource.mjs +1 -1
  30. package/esm2020/lib/datasource/shared/datasources/data.service.mjs +1 -1
  31. package/esm2020/lib/datasource/shared/datasources/datasource.interface.mjs +1 -1
  32. package/esm2020/lib/datasource/shared/datasources/datasource.mjs +1 -1
  33. package/esm2020/lib/datasource/shared/datasources/feature-datasource.interface.mjs +1 -1
  34. package/esm2020/lib/datasource/shared/datasources/feature-datasource.mjs +1 -1
  35. package/esm2020/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.mjs +1 -1
  36. package/esm2020/lib/datasource/shared/datasources/imagearcgisrest-datasource.mjs +1 -1
  37. package/esm2020/lib/datasource/shared/datasources/mvt-datasource.interface.mjs +1 -1
  38. package/esm2020/lib/datasource/shared/datasources/mvt-datasource.mjs +1 -1
  39. package/esm2020/lib/datasource/shared/datasources/osm-datasource.interface.mjs +1 -1
  40. package/esm2020/lib/datasource/shared/datasources/osm-datasource.mjs +1 -1
  41. package/esm2020/lib/datasource/shared/datasources/tilearcgisrest-datasource.interface.mjs +1 -1
  42. package/esm2020/lib/datasource/shared/datasources/tilearcgisrest-datasource.mjs +1 -1
  43. package/esm2020/lib/datasource/shared/datasources/tiledebug-datasource.interface.mjs +1 -1
  44. package/esm2020/lib/datasource/shared/datasources/tiledebug-datasource.mjs +1 -1
  45. package/esm2020/lib/datasource/shared/datasources/websocket-datasource.interface.mjs +1 -1
  46. package/esm2020/lib/datasource/shared/datasources/websocket-datasource.mjs +1 -1
  47. package/esm2020/lib/datasource/shared/datasources/wfs-datasource.interface.mjs +1 -1
  48. package/esm2020/lib/datasource/shared/datasources/wfs-datasource.mjs +1 -1
  49. package/esm2020/lib/datasource/shared/datasources/wfs.service.mjs +1 -1
  50. package/esm2020/lib/datasource/shared/datasources/wms-datasource.interface.mjs +1 -1
  51. package/esm2020/lib/datasource/shared/datasources/wms-datasource.mjs +1 -1
  52. package/esm2020/lib/datasource/shared/datasources/wms-wfs.utils.mjs +1 -1
  53. package/esm2020/lib/datasource/shared/datasources/wmts-datasource.interface.mjs +1 -1
  54. package/esm2020/lib/datasource/shared/datasources/wmts-datasource.mjs +1 -1
  55. package/esm2020/lib/datasource/shared/datasources/xyz-datasource.interface.mjs +1 -1
  56. package/esm2020/lib/datasource/shared/datasources/xyz-datasource.mjs +1 -1
  57. package/esm2020/lib/datasource/shared/options/options-api.providers.mjs +1 -1
  58. package/esm2020/lib/datasource/shared/options/options-api.service.mjs +1 -1
  59. package/esm2020/lib/datasource/shared/options/options.service.mjs +1 -1
  60. package/esm2020/lib/datasource/utils/index.mjs +1 -2
  61. package/esm2020/lib/datasource/utils/tilegrid.mjs +1 -1
  62. package/esm2020/lib/directions/directions-buttons/directions-buttons.component.mjs +4 -10
  63. package/esm2020/lib/directions/directions-inputs/directions-inputs.component.mjs +2 -2
  64. package/esm2020/lib/directions/directions-results/directions-results.component.mjs +2 -2
  65. package/esm2020/lib/directions/directions-sources/directions-source.mjs +1 -1
  66. package/esm2020/lib/directions/directions-sources/directions-source.provider.mjs +1 -1
  67. package/esm2020/lib/directions/directions-sources/osrm-directions-source.mjs +1 -1
  68. package/esm2020/lib/directions/directions.component.mjs +2 -2
  69. package/esm2020/lib/directions/directions.module.mjs +1 -1
  70. package/esm2020/lib/directions/shared/directions-source.service.mjs +1 -1
  71. package/esm2020/lib/directions/shared/directions.interface.mjs +1 -1
  72. package/esm2020/lib/directions/shared/directions.service.mjs +1 -1
  73. package/esm2020/lib/directions/shared/directions.utils.mjs +2 -2
  74. package/esm2020/lib/directions/shared/store.mjs +1 -1
  75. package/esm2020/lib/download/download-button/download-button.component.mjs +2 -2
  76. package/esm2020/lib/download/download.module.mjs +1 -1
  77. package/esm2020/lib/download/shared/download.interface.mjs +1 -1
  78. package/esm2020/lib/download/shared/download.service.mjs +5 -8
  79. package/esm2020/lib/draw/draw/draw-layer-popup.component.mjs +2 -2
  80. package/esm2020/lib/draw/draw/draw-popup.component.mjs +3 -3
  81. package/esm2020/lib/draw/draw/draw-shorcuts.component.mjs +2 -2
  82. package/esm2020/lib/draw/draw/draw.component.mjs +11 -10
  83. package/esm2020/lib/draw/draw/draw.module.mjs +1 -1
  84. package/esm2020/lib/draw/drawingTool.module.mjs +1 -1
  85. package/esm2020/lib/draw/shared/draw-icon.service.mjs +1 -1
  86. package/esm2020/lib/draw/shared/draw.enum.mjs +1 -17
  87. package/esm2020/lib/draw/shared/draw.interface.mjs +1 -1
  88. package/esm2020/lib/draw/shared/draw.utils.mjs +1 -1
  89. package/esm2020/lib/draw/shared/index.mjs +1 -2
  90. package/esm2020/lib/feature/feature-details/feature-details.component.mjs +4 -5
  91. package/esm2020/lib/feature/feature-details/feature-details.directive.mjs +1 -1
  92. package/esm2020/lib/feature/feature-details/feature-details.module.mjs +1 -1
  93. package/esm2020/lib/feature/feature-form/feature-form.component.mjs +2 -2
  94. package/esm2020/lib/feature/feature-form/feature-form.module.mjs +1 -1
  95. package/esm2020/lib/feature/feature.module.mjs +1 -1
  96. package/esm2020/lib/feature/shared/feature.interfaces.mjs +1 -1
  97. package/esm2020/lib/feature/shared/feature.utils.mjs +7 -5
  98. package/esm2020/lib/feature/shared/store.mjs +10 -1
  99. package/esm2020/lib/feature/shared/strategies/in-map-extent.mjs +1 -1
  100. package/esm2020/lib/feature/shared/strategies/in-map-resolution.mjs +1 -1
  101. package/esm2020/lib/feature/shared/strategies/index.mjs +2 -1
  102. package/esm2020/lib/feature/shared/strategies/loading-layer.mjs +1 -1
  103. package/esm2020/lib/feature/shared/strategies/loading.mjs +1 -1
  104. package/esm2020/lib/feature/shared/strategies/search.mjs +150 -0
  105. package/esm2020/lib/feature/shared/strategies/selection.mjs +1 -1
  106. package/esm2020/lib/feature/shared/strategies.utils.mjs +1 -1
  107. package/esm2020/lib/filter/filter.module.mjs +1 -1
  108. package/esm2020/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +2 -2
  109. package/esm2020/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +2 -2
  110. package/esm2020/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +2 -2
  111. package/esm2020/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.mjs +2 -2
  112. package/esm2020/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +2 -2
  113. package/esm2020/lib/filter/ogc-filterable-form/ogc-filterable-form.component.mjs +2 -2
  114. package/esm2020/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +2 -2
  115. package/esm2020/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.mjs +1 -1
  116. package/esm2020/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs +2 -2
  117. package/esm2020/lib/filter/shared/filterable-datasource.pipe.mjs +1 -1
  118. package/esm2020/lib/filter/shared/ogc-filter-time.service.mjs +1 -1
  119. package/esm2020/lib/filter/shared/ogc-filter.enum.mjs +1 -1
  120. package/esm2020/lib/filter/shared/ogc-filter.interface.mjs +1 -1
  121. package/esm2020/lib/filter/shared/ogc-filter.mjs +1 -1
  122. package/esm2020/lib/filter/shared/ogc-filter.service.mjs +1 -1
  123. package/esm2020/lib/filter/shared/spatial-filter.enum.mjs +1 -1
  124. package/esm2020/lib/filter/shared/spatial-filter.service.mjs +1 -1
  125. package/esm2020/lib/filter/shared/time-filter.enum.mjs +1 -1
  126. package/esm2020/lib/filter/shared/time-filter.interface.mjs +1 -1
  127. package/esm2020/lib/filter/shared/time-filter.service.mjs +1 -1
  128. package/esm2020/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +5 -5
  129. package/esm2020/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs +6 -7
  130. package/esm2020/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +2 -2
  131. package/esm2020/lib/filter/time-filter-button/time-filter-button.component.mjs +2 -2
  132. package/esm2020/lib/filter/time-filter-form/time-filter-form.component.mjs +2 -2
  133. package/esm2020/lib/filter/time-filter-item/time-filter-item.component.mjs +2 -2
  134. package/esm2020/lib/filter/time-filter-list/time-filter-list-binding.directive.mjs +1 -1
  135. package/esm2020/lib/filter/time-filter-list/time-filter-list.component.mjs +2 -2
  136. package/esm2020/lib/geo.module.mjs +5 -1
  137. package/esm2020/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs +13 -12
  138. package/esm2020/lib/geometry/geometry-form-field/geometry-form-field.component.mjs +2 -2
  139. package/esm2020/lib/geometry/geometry-form-field/geometry-form-field.module.mjs +1 -1
  140. package/esm2020/lib/geometry/geometry.module.mjs +1 -1
  141. package/esm2020/lib/geometry/shared/controls/draw.mjs +1 -1
  142. package/esm2020/lib/geometry/shared/controls/modify.mjs +1 -1
  143. package/esm2020/lib/geometry/shared/controls/slice.mjs +1 -1
  144. package/esm2020/lib/geometry/shared/geometry.errors.mjs +1 -1
  145. package/esm2020/lib/geometry/shared/geometry.interfaces.mjs +1 -1
  146. package/esm2020/lib/geometry/shared/geometry.utils.mjs +1 -1
  147. package/esm2020/lib/import-export/export-button/export-button.component.mjs +2 -2
  148. package/esm2020/lib/import-export/import-export/import-export.component.mjs +53 -45
  149. package/esm2020/lib/import-export/import-export.module.mjs +5 -9
  150. package/esm2020/lib/import-export/index.mjs +1 -2
  151. package/esm2020/lib/import-export/shared/drop-geo-file.directive.mjs +31 -14
  152. package/esm2020/lib/import-export/shared/export.interface.mjs +1 -1
  153. package/esm2020/lib/import-export/shared/export.service.mjs +3 -3
  154. package/esm2020/lib/import-export/shared/export.type.mjs +1 -1
  155. package/esm2020/lib/import-export/shared/export.utils.mjs +8 -17
  156. package/esm2020/lib/import-export/shared/import.errors.mjs +1 -1
  157. package/esm2020/lib/import-export/shared/import.interface.mjs +1 -1
  158. package/esm2020/lib/import-export/shared/import.service.mjs +1 -1
  159. package/esm2020/lib/import-export/shared/import.utils.mjs +58 -91
  160. package/esm2020/lib/layer/index.mjs +1 -2
  161. package/esm2020/lib/layer/layer-item/layer-item.component.mjs +2 -2
  162. package/esm2020/lib/layer/layer-legend/layer-legend.component.mjs +3 -3
  163. package/esm2020/lib/layer/layer-legend-item/layer-legend-item.component.mjs +2 -2
  164. package/esm2020/lib/layer/layer-legend-list/layer-legend-list-binding.directive.mjs +1 -1
  165. package/esm2020/lib/layer/layer-legend-list/layer-legend-list.component.mjs +2 -2
  166. package/esm2020/lib/layer/layer-list/layer-list-binding.directive.mjs +1 -1
  167. package/esm2020/lib/layer/layer-list/layer-list.component.mjs +2 -2
  168. package/esm2020/lib/layer/layer-list/layer-list.enum.mjs +1 -1
  169. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.component.mjs +2 -2
  170. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.interface.mjs +1 -1
  171. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.service.mjs +1 -1
  172. package/esm2020/lib/layer/layer.module.mjs +6 -11
  173. package/esm2020/lib/layer/shared/clusterParam.mjs +1 -1
  174. package/esm2020/lib/layer/shared/index.mjs +1 -3
  175. package/esm2020/lib/layer/shared/layer.service.mjs +80 -29
  176. package/esm2020/lib/layer/shared/layers/any-layer.interface.mjs +1 -1
  177. package/esm2020/lib/layer/shared/layers/any-layer.mjs +1 -1
  178. package/esm2020/lib/layer/shared/layers/image-layer.interface.mjs +1 -1
  179. package/esm2020/lib/layer/shared/layers/image-layer.mjs +6 -7
  180. package/esm2020/lib/layer/shared/layers/layer.interface.mjs +1 -1
  181. package/esm2020/lib/layer/shared/layers/layer.mjs +5 -3
  182. package/esm2020/lib/layer/shared/layers/tile-layer.interface.mjs +1 -1
  183. package/esm2020/lib/layer/shared/layers/tile-layer.mjs +1 -1
  184. package/esm2020/lib/layer/shared/layers/vector-layer.interface.mjs +1 -1
  185. package/esm2020/lib/layer/shared/layers/vector-layer.mjs +153 -6
  186. package/esm2020/lib/layer/shared/layers/vectortile-layer.interface.mjs +1 -1
  187. package/esm2020/lib/layer/shared/layers/vectortile-layer.mjs +1 -1
  188. package/esm2020/lib/layer/track-feature-button/track-feature-button.component.mjs +2 -2
  189. package/esm2020/lib/layer/utils/image-watcher.mjs +3 -6
  190. package/esm2020/lib/layer/utils/layer.utils.mjs +2 -2
  191. package/esm2020/lib/layer/utils/outputLegend.mjs +3 -2
  192. package/esm2020/lib/layer/utils/tile-watcher.mjs +1 -1
  193. package/esm2020/lib/layer/utils/vector-watcher.mjs +1 -1
  194. package/esm2020/lib/map/baselayers-switcher/baselayers-switcher.animation.mjs +1 -1
  195. package/esm2020/lib/map/baselayers-switcher/baselayers-switcher.component.mjs +2 -2
  196. package/esm2020/lib/map/baselayers-switcher/mini-basemap.component.mjs +17 -8
  197. package/esm2020/lib/map/geolocate-button/geolocate-button.component.mjs +2 -2
  198. package/esm2020/lib/map/info-section/info-section.component.mjs +2 -2
  199. package/esm2020/lib/map/map-browser/map-browser.component.mjs +3 -3
  200. package/esm2020/lib/map/map-center/map-center.component.mjs +2 -2
  201. package/esm2020/lib/map/map.module.mjs +1 -1
  202. package/esm2020/lib/map/menu-button/menu-button.component.mjs +3 -3
  203. package/esm2020/lib/map/offline-button/offline-button.component.mjs +34 -57
  204. package/esm2020/lib/map/rotation-button/rotation-button.component.mjs +2 -2
  205. package/esm2020/lib/map/shared/controllers/controller.mjs +1 -1
  206. package/esm2020/lib/map/shared/controllers/geolocation.mjs +151 -36
  207. package/esm2020/lib/map/shared/controllers/view.mjs +1 -1
  208. package/esm2020/lib/map/shared/hover-feature.directive.mjs +24 -73
  209. package/esm2020/lib/map/shared/linkedLayers.utils.mjs +3 -3
  210. package/esm2020/lib/map/shared/map-pointer-position.directive.mjs +1 -1
  211. package/esm2020/lib/map/shared/map.interface.mjs +1 -1
  212. package/esm2020/lib/map/shared/map.mjs +7 -5
  213. package/esm2020/lib/map/shared/map.service.mjs +1 -1
  214. package/esm2020/lib/map/shared/map.utils.mjs +2 -1
  215. package/esm2020/lib/map/shared/mapOffline.directive.mjs +50 -115
  216. package/esm2020/lib/map/shared/projection.interfaces.mjs +1 -1
  217. package/esm2020/lib/map/shared/projection.service.mjs +1 -1
  218. package/esm2020/lib/map/shared/projection.utils.mjs +1 -1
  219. package/esm2020/lib/map/swipe-control/swipe-control.component.mjs +3 -3
  220. package/esm2020/lib/map/utils/layer-watcher.mjs +1 -1
  221. package/esm2020/lib/map/wake-lock-button/wake-lock-button.component.mjs +24 -35
  222. package/esm2020/lib/map/zoom-button/zoom-button.component.mjs +2 -2
  223. package/esm2020/lib/measure/measure.module.mjs +1 -1
  224. package/esm2020/lib/measure/measurer/measure-format.pipe.mjs +1 -1
  225. package/esm2020/lib/measure/measurer/measurer-dialog.component.mjs +2 -2
  226. package/esm2020/lib/measure/measurer/measurer-item.component.mjs +2 -2
  227. package/esm2020/lib/measure/measurer/measurer.component.mjs +2 -2
  228. package/esm2020/lib/measure/measurer/measurer.module.mjs +1 -1
  229. package/esm2020/lib/measure/shared/measure.enum.mjs +1 -1
  230. package/esm2020/lib/measure/shared/measure.interfaces.mjs +1 -1
  231. package/esm2020/lib/measure/shared/measure.utils.mjs +1 -1
  232. package/esm2020/lib/metadata/metadata-button/metadata-button.component.mjs +3 -3
  233. package/esm2020/lib/metadata/metadata.module.mjs +1 -1
  234. package/esm2020/lib/metadata/shared/metadata.interface.mjs +1 -1
  235. package/esm2020/lib/metadata/shared/metadata.service.mjs +1 -1
  236. package/esm2020/lib/offline/geoDB/configFileToGeoDB.service.mjs +4 -4
  237. package/esm2020/lib/offline/geoDB/geoDB.enums.mjs +1 -1
  238. package/esm2020/lib/offline/geoDB/geoDB.interface.mjs +1 -1
  239. package/esm2020/lib/offline/geoDB/geoDB.service.mjs +2 -2
  240. package/esm2020/lib/offline/index.mjs +2 -1
  241. package/esm2020/lib/offline/layerDB/index.mjs +3 -0
  242. package/esm2020/lib/offline/layerDB/layerDB.interface.mjs +2 -0
  243. package/esm2020/lib/offline/layerDB/layerDB.service.mjs +76 -0
  244. package/esm2020/lib/offline/shared/geo-network.service.mjs +1 -1
  245. package/esm2020/lib/overlay/overlay.module.mjs +1 -1
  246. package/esm2020/lib/overlay/shared/index.mjs +1 -2
  247. package/esm2020/lib/overlay/shared/overlay.directive.mjs +1 -1
  248. package/esm2020/lib/overlay/shared/overlay.enum.mjs +1 -1
  249. package/esm2020/lib/overlay/shared/overlay.mjs +1 -1
  250. package/esm2020/lib/overlay/shared/overlay.service.mjs +1 -1
  251. package/esm2020/lib/overlay/shared/overlay.utils.mjs +2 -88
  252. package/esm2020/lib/print/print/print.component.mjs +7 -18
  253. package/esm2020/lib/print/print-form/print-form.component.mjs +210 -101
  254. package/esm2020/lib/print/print.module.mjs +1 -1
  255. package/esm2020/lib/print/shared/geopdf.mjs +1 -1
  256. package/esm2020/lib/print/shared/index.mjs +1 -1
  257. package/esm2020/lib/print/shared/print.interface.mjs +1 -1
  258. package/esm2020/lib/print/shared/print.service.mjs +179 -56
  259. package/esm2020/lib/print/shared/print.type.mjs +1 -1
  260. package/esm2020/lib/query/query.module.mjs +1 -1
  261. package/esm2020/lib/query/shared/query-search-source.mjs +1 -1
  262. package/esm2020/lib/query/shared/query-search-source.providers.mjs +1 -1
  263. package/esm2020/lib/query/shared/query.directive.mjs +1 -1
  264. package/esm2020/lib/query/shared/query.interfaces.mjs +1 -1
  265. package/esm2020/lib/query/shared/query.service.mjs +144 -32
  266. package/esm2020/lib/query/shared/query.utils.mjs +1 -1
  267. package/esm2020/lib/search/search-bar/search-bar.component.mjs +28 -9
  268. package/esm2020/lib/search/search-bar/search-bar.module.mjs +1 -1
  269. package/esm2020/lib/search/search-bar/search-url-param.directive.mjs +1 -1
  270. package/esm2020/lib/search/search-results/save-feature-dialog.component.mjs +118 -0
  271. package/esm2020/lib/search/search-results/search-results-add-button.component.mjs +269 -34
  272. package/esm2020/lib/search/search-results/search-results-item.component.mjs +37 -14
  273. package/esm2020/lib/search/search-results/search-results.component.mjs +172 -58
  274. package/esm2020/lib/search/search-results/search-results.module.mjs +36 -5
  275. package/esm2020/lib/search/search-selector/search-selector.component.mjs +2 -2
  276. package/esm2020/lib/search/search-selector/search-selector.module.mjs +1 -1
  277. package/esm2020/lib/search/search-settings/search-settings.component.mjs +33 -9
  278. package/esm2020/lib/search/search-settings/search-settings.module.mjs +1 -1
  279. package/esm2020/lib/search/search.module.mjs +1 -1
  280. package/esm2020/lib/search/shared/search-pointer-summary.directive.mjs +3 -30
  281. package/esm2020/lib/search/shared/search-source-service.providers.mjs +1 -1
  282. package/esm2020/lib/search/shared/search-source.service.mjs +9 -1
  283. package/esm2020/lib/search/shared/search.enums.mjs +1 -1
  284. package/esm2020/lib/search/shared/search.interfaces.mjs +1 -1
  285. package/esm2020/lib/search/shared/search.service.mjs +10 -7
  286. package/esm2020/lib/search/shared/search.utils.mjs +3 -3
  287. package/esm2020/lib/search/shared/sources/coordinates.interfaces.mjs +1 -1
  288. package/esm2020/lib/search/shared/sources/coordinates.mjs +17 -11
  289. package/esm2020/lib/search/shared/sources/coordinates.providers.mjs +4 -4
  290. package/esm2020/lib/search/shared/sources/icherche.interfaces.mjs +1 -1
  291. package/esm2020/lib/search/shared/sources/icherche.mjs +7 -7
  292. package/esm2020/lib/search/shared/sources/icherche.providers.mjs +1 -1
  293. package/esm2020/lib/search/shared/sources/ilayer.interfaces.mjs +1 -1
  294. package/esm2020/lib/search/shared/sources/ilayer.mjs +4 -4
  295. package/esm2020/lib/search/shared/sources/ilayer.providers.mjs +1 -1
  296. package/esm2020/lib/search/shared/sources/index.mjs +4 -1
  297. package/esm2020/lib/search/shared/sources/nominatim.mjs +2 -2
  298. package/esm2020/lib/search/shared/sources/nominatim.providers.mjs +1 -1
  299. package/esm2020/lib/search/shared/sources/source.interfaces.mjs +1 -1
  300. package/esm2020/lib/search/shared/sources/source.mjs +31 -1
  301. package/esm2020/lib/search/shared/sources/storedqueries.interfaces.mjs +1 -1
  302. package/esm2020/lib/search/shared/sources/storedqueries.mjs +1 -1
  303. package/esm2020/lib/search/shared/sources/storedqueries.providers.mjs +1 -1
  304. package/esm2020/lib/search/shared/sources/workspace.interfaces.mjs +2 -0
  305. package/esm2020/lib/search/shared/sources/workspace.mjs +186 -0
  306. package/esm2020/lib/search/shared/sources/workspace.providers.mjs +26 -0
  307. package/esm2020/lib/style/index.mjs +5 -0
  308. package/esm2020/lib/style/shared/datasource/esri-style-generator.mjs +357 -0
  309. package/esm2020/lib/style/shared/datasource/index.mjs +2 -0
  310. package/esm2020/lib/style/shared/feature/feature-style.mjs +141 -0
  311. package/esm2020/lib/style/shared/feature/index.mjs +2 -0
  312. package/esm2020/lib/style/shared/font.enum.mjs +17 -0
  313. package/esm2020/lib/style/shared/index.mjs +5 -0
  314. package/esm2020/lib/style/shared/overlay/index.mjs +3 -0
  315. package/esm2020/lib/style/shared/overlay/overlay-marker-style.utils.mjs +43 -0
  316. package/esm2020/lib/style/shared/overlay/overlay-style.utils.mjs +88 -0
  317. package/esm2020/lib/style/shared/vector/commonVectorStyle.mjs +75 -0
  318. package/esm2020/lib/style/shared/vector/conversion.utils.mjs +27 -0
  319. package/esm2020/lib/style/shared/vector/index.mjs +4 -0
  320. package/esm2020/lib/style/shared/vector/vector-style.interface.mjs +2 -0
  321. package/esm2020/lib/style/style-list/index.mjs +5 -0
  322. package/esm2020/lib/style/style-list/style-list.interface.mjs +2 -0
  323. package/esm2020/lib/style/style-list/style-list.module.mjs +23 -0
  324. package/esm2020/lib/style/style-list/style-list.provider.mjs +21 -0
  325. package/esm2020/lib/style/style-list/style-list.service.mjs +51 -0
  326. package/esm2020/lib/style/style-modal/drawing/index.mjs +2 -0
  327. package/esm2020/lib/style/style-modal/drawing/style-modal-drawing.component.mjs +288 -0
  328. package/esm2020/lib/style/style-modal/index.mjs +5 -0
  329. package/esm2020/lib/style/style-modal/layer/index.mjs +2 -0
  330. package/esm2020/lib/style/style-modal/layer/style-modal-layer.component.mjs +187 -0
  331. package/esm2020/lib/style/style-modal/layer-button/index.mjs +2 -0
  332. package/esm2020/lib/style/style-modal/layer-button/style-modal-layer-button.component.mjs +44 -0
  333. package/esm2020/lib/style/style-modal/shared/index.mjs +2 -0
  334. package/esm2020/lib/style/style-modal/shared/style-modal.interface.mjs +2 -0
  335. package/esm2020/lib/style/style-service/draw-style.service.mjs +187 -0
  336. package/esm2020/lib/style/style-service/index.mjs +3 -0
  337. package/esm2020/lib/style/style-service/style.service.mjs +356 -0
  338. package/esm2020/lib/style/style.module.mjs +74 -0
  339. package/esm2020/lib/toast/toast.component.mjs +3 -3
  340. package/esm2020/lib/toast/toast.module.mjs +1 -1
  341. package/esm2020/lib/utils/id-generator.mjs +1 -1
  342. package/esm2020/lib/utils/index.mjs +1 -3
  343. package/esm2020/lib/wkt/shared/wkt.service.mjs +15 -15
  344. package/esm2020/lib/wkt/wkt.module.mjs +1 -1
  345. package/esm2020/lib/workspace/confirmation-popup/confirmation-popup.component.mjs +2 -2
  346. package/esm2020/lib/workspace/confirmation-popup/confirmation-popup.module.mjs +1 -1
  347. package/esm2020/lib/workspace/confirmation-popup/index.mjs +1 -1
  348. package/esm2020/lib/workspace/shared/edition-workspace.mjs +1 -1
  349. package/esm2020/lib/workspace/shared/edition-workspace.service.mjs +19 -34
  350. package/esm2020/lib/workspace/shared/feature-workspace.mjs +1 -1
  351. package/esm2020/lib/workspace/shared/feature-workspace.service.mjs +10 -3
  352. package/esm2020/lib/workspace/shared/wfs-workspace.mjs +1 -1
  353. package/esm2020/lib/workspace/shared/wfs-workspace.service.mjs +2 -2
  354. package/esm2020/lib/workspace/shared/wms-workspace.service.mjs +3 -3
  355. package/esm2020/lib/workspace/shared/workspace.utils.mjs +1 -1
  356. package/esm2020/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs +2 -2
  357. package/esm2020/lib/workspace/widgets/ogc-filter/ogc-filter.module.mjs +1 -1
  358. package/esm2020/lib/workspace/widgets/widgets.mjs +1 -1
  359. package/esm2020/lib/workspace/workspace-selector/workspace-selector.directive.mjs +1 -1
  360. package/esm2020/lib/workspace/workspace-selector/workspace-selector.module.mjs +1 -1
  361. package/esm2020/lib/workspace/workspace-updator/workspace-updator.directive.mjs +1 -1
  362. package/esm2020/lib/workspace/workspace-updator/workspace-updator.module.mjs +1 -1
  363. package/esm2020/lib/workspace/workspace.module.mjs +1 -1
  364. package/esm2020/public_api.mjs +3 -1
  365. package/fesm2015/igo2-geo.mjs +7502 -5529
  366. package/fesm2015/igo2-geo.mjs.map +1 -1
  367. package/fesm2020/igo2-geo.mjs +8086 -6208
  368. package/fesm2020/igo2-geo.mjs.map +1 -1
  369. package/lib/catalog/catalog-browser/catalog-browser-group.component.d.ts +8 -15
  370. package/lib/catalog/catalog-browser/catalog-browser-layer.component.d.ts +11 -7
  371. package/lib/catalog/catalog-browser/catalog-browser.component.d.ts +3 -9
  372. package/lib/catalog/catalog-library/catalog-library.component.d.ts +2 -3
  373. package/lib/catalog/shared/catalog.interface.d.ts +10 -0
  374. package/lib/datasource/shared/datasources/datasource.interface.d.ts +13 -0
  375. package/lib/datasource/shared/datasources/feature-datasource.interface.d.ts +5 -0
  376. package/lib/datasource/utils/index.d.ts +0 -1
  377. package/lib/download/shared/download.service.d.ts +2 -3
  378. package/lib/draw/draw/draw.component.d.ts +3 -2
  379. package/lib/draw/shared/draw.enum.d.ts +0 -15
  380. package/lib/draw/shared/index.d.ts +0 -1
  381. package/lib/feature/shared/feature.interfaces.d.ts +5 -0
  382. package/lib/feature/shared/feature.utils.d.ts +4 -2
  383. package/lib/feature/shared/store.d.ts +7 -0
  384. package/lib/feature/shared/strategies/index.d.ts +1 -0
  385. package/lib/feature/shared/strategies/search.d.ts +55 -0
  386. package/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.d.ts +2 -3
  387. package/lib/geo.module.d.ts +3 -2
  388. package/lib/geometry/geometry-form-field/geometry-form-field-input.component.d.ts +5 -9
  389. package/lib/geometry/geometry-form-field/geometry-form-field.component.d.ts +3 -3
  390. package/lib/import-export/import-export/import-export.component.d.ts +9 -4
  391. package/lib/import-export/import-export.module.d.ts +1 -2
  392. package/lib/import-export/index.d.ts +0 -1
  393. package/lib/import-export/shared/drop-geo-file.directive.d.ts +10 -7
  394. package/lib/import-export/shared/export.service.d.ts +1 -1
  395. package/lib/import-export/shared/export.utils.d.ts +4 -4
  396. package/lib/import-export/shared/import.interface.d.ts +2 -0
  397. package/lib/import-export/shared/import.utils.d.ts +14 -12
  398. package/lib/layer/index.d.ts +0 -1
  399. package/lib/layer/layer.module.d.ts +19 -20
  400. package/lib/layer/shared/index.d.ts +0 -2
  401. package/lib/layer/shared/layer.service.d.ts +8 -5
  402. package/lib/layer/shared/layers/image-layer.d.ts +2 -3
  403. package/lib/layer/shared/layers/layer.d.ts +5 -1
  404. package/lib/layer/shared/layers/layer.interface.d.ts +2 -0
  405. package/lib/layer/shared/layers/vector-layer.d.ts +18 -2
  406. package/lib/layer/shared/layers/vector-layer.interface.d.ts +8 -7
  407. package/lib/layer/shared/layers/vectortile-layer.interface.d.ts +2 -4
  408. package/lib/layer/utils/image-watcher.d.ts +2 -3
  409. package/lib/map/baselayers-switcher/mini-basemap.component.d.ts +7 -4
  410. package/lib/map/offline-button/offline-button.component.d.ts +10 -18
  411. package/lib/map/shared/controllers/geolocation.d.ts +17 -2
  412. package/lib/map/shared/hover-feature.directive.d.ts +2 -10
  413. package/lib/map/shared/map.d.ts +2 -2
  414. package/lib/map/shared/map.utils.d.ts +1 -0
  415. package/lib/map/shared/mapOffline.directive.d.ts +4 -7
  416. package/lib/map/wake-lock-button/wake-lock-button.component.d.ts +3 -6
  417. package/lib/offline/geoDB/geoDB.service.d.ts +1 -1
  418. package/lib/offline/index.d.ts +1 -0
  419. package/lib/offline/layerDB/index.d.ts +2 -0
  420. package/lib/offline/layerDB/layerDB.interface.d.ts +7 -0
  421. package/lib/offline/layerDB/layerDB.service.d.ts +36 -0
  422. package/lib/overlay/shared/index.d.ts +0 -1
  423. package/lib/overlay/shared/overlay.utils.d.ts +0 -11
  424. package/lib/print/print-form/print-form.component.d.ts +2 -0
  425. package/lib/print/shared/print.service.d.ts +16 -1
  426. package/lib/query/shared/query.interfaces.d.ts +8 -1
  427. package/lib/query/shared/query.service.d.ts +5 -3
  428. package/lib/search/search-bar/search-bar.component.d.ts +12 -2
  429. package/lib/search/search-results/save-feature-dialog.component.d.ts +32 -0
  430. package/lib/search/search-results/search-results-add-button.component.d.ts +28 -2
  431. package/lib/search/search-results/search-results-item.component.d.ts +5 -1
  432. package/lib/search/search-results/search-results.component.d.ts +5 -1
  433. package/lib/search/search-results/search-results.module.d.ts +18 -10
  434. package/lib/search/search-settings/search-settings.component.d.ts +7 -1
  435. package/lib/search/shared/search-pointer-summary.directive.d.ts +0 -9
  436. package/lib/search/shared/search-source.service.d.ts +7 -0
  437. package/lib/search/shared/search.interfaces.d.ts +1 -1
  438. package/lib/search/shared/search.service.d.ts +3 -1
  439. package/lib/search/shared/sources/coordinates.d.ts +1 -1
  440. package/lib/search/shared/sources/coordinates.providers.d.ts +3 -3
  441. package/lib/search/shared/sources/index.d.ts +3 -0
  442. package/lib/search/shared/sources/source.d.ts +7 -1
  443. package/lib/search/shared/sources/workspace.d.ts +33 -0
  444. package/lib/search/shared/sources/workspace.interfaces.d.ts +9 -0
  445. package/lib/search/shared/sources/workspace.providers.d.ts +17 -0
  446. package/lib/style/index.d.ts +4 -0
  447. package/lib/style/shared/datasource/index.d.ts +1 -0
  448. package/lib/style/shared/feature/feature-style.d.ts +18 -0
  449. package/lib/style/shared/feature/index.d.ts +1 -0
  450. package/lib/style/shared/font.enum.d.ts +15 -0
  451. package/lib/style/shared/index.d.ts +4 -0
  452. package/lib/style/shared/overlay/index.d.ts +2 -0
  453. package/lib/style/shared/overlay/overlay-style.utils.d.ts +19 -0
  454. package/lib/{utils → style/shared/vector}/commonVectorStyle.d.ts +4 -4
  455. package/lib/style/shared/vector/conversion.utils.d.ts +22 -0
  456. package/lib/style/shared/vector/index.d.ts +3 -0
  457. package/lib/style/shared/vector/vector-style.interface.d.ts +69 -0
  458. package/lib/style/style-modal/drawing/index.d.ts +1 -0
  459. package/lib/style/style-modal/drawing/style-modal-drawing.component.d.ts +31 -0
  460. package/lib/style/style-modal/index.d.ts +4 -0
  461. package/lib/style/style-modal/layer/index.d.ts +1 -0
  462. package/lib/style/style-modal/layer/style-modal-layer.component.d.ts +30 -0
  463. package/lib/style/style-modal/layer-button/index.d.ts +1 -0
  464. package/lib/style/style-modal/layer-button/style-modal-layer-button.component.d.ts +14 -0
  465. package/lib/style/style-modal/shared/index.d.ts +1 -0
  466. package/lib/style/style-modal/shared/style-modal.interface.d.ts +17 -0
  467. package/lib/{draw/shared → style/style-service}/draw-style.service.d.ts +3 -4
  468. package/lib/style/style-service/index.d.ts +2 -0
  469. package/lib/{layer/shared → style/style-service}/style.service.d.ts +5 -5
  470. package/lib/style/style.module.d.ts +22 -0
  471. package/lib/utils/index.d.ts +0 -2
  472. package/lib/workspace/shared/edition-workspace.service.d.ts +3 -4
  473. package/lib/workspace/shared/wms-workspace.service.d.ts +1 -1
  474. package/ngcc.config.js +3 -3
  475. package/package.json +17 -11
  476. package/public_api.d.ts +2 -0
  477. package/style/geo.theming.scss +12 -12
  478. package/esm2020/lib/datasource/utils/esri-style-generator.mjs +0 -357
  479. package/esm2020/lib/draw/shared/draw-style.service.mjs +0 -190
  480. package/esm2020/lib/import-export/style-list/index.mjs +0 -5
  481. package/esm2020/lib/import-export/style-list/style-list.interface.mjs +0 -2
  482. package/esm2020/lib/import-export/style-list/style-list.module.mjs +0 -23
  483. package/esm2020/lib/import-export/style-list/style-list.provider.mjs +0 -21
  484. package/esm2020/lib/import-export/style-list/style-list.service.mjs +0 -51
  485. package/esm2020/lib/layer/shared/style.service.mjs +0 -356
  486. package/esm2020/lib/layer/shared/vector-style.interface.mjs +0 -2
  487. package/esm2020/lib/layer/style-modal/index.mjs +0 -2
  488. package/esm2020/lib/layer/style-modal/style-modal.component.mjs +0 -288
  489. package/esm2020/lib/overlay/shared/overlay-marker-style.utils.mjs +0 -69
  490. package/esm2020/lib/utils/commonVectorStyle.interface.mjs +0 -2
  491. package/esm2020/lib/utils/commonVectorStyle.mjs +0 -75
  492. package/lib/layer/shared/vector-style.interface.d.ts +0 -38
  493. package/lib/layer/style-modal/index.d.ts +0 -1
  494. package/lib/layer/style-modal/style-modal.component.d.ts +0 -42
  495. package/lib/utils/commonVectorStyle.interface.d.ts +0 -16
  496. /package/lib/{datasource/utils → style/shared/datasource}/esri-style-generator.d.ts +0 -0
  497. /package/lib/{overlay/shared → style/shared/overlay}/overlay-marker-style.utils.d.ts +0 -0
  498. /package/lib/{import-export → style}/style-list/index.d.ts +0 -0
  499. /package/lib/{import-export → style}/style-list/style-list.interface.d.ts +0 -0
  500. /package/lib/{import-export → style}/style-list/style-list.module.d.ts +0 -0
  501. /package/lib/{import-export → style}/style-list/style-list.provider.d.ts +0 -0
  502. /package/lib/{import-export → style}/style-list/style-list.service.d.ts +0 -0
@@ -12,68 +12,125 @@ import * as i7 from "@angular/material/input";
12
12
  import * as i8 from "@angular/material/slide-toggle";
13
13
  import * as i9 from "@ngx-translate/core";
14
14
  import * as i10 from "@igo2/common";
15
- function PrintFormComponent_mat_option_28_Template(rf, ctx) { if (rf & 1) {
16
- i0.ɵɵelementStart(0, "mat-option", 19);
15
+ const _c0 = function (a0) { return { column: a0, value: 130 }; };
16
+ function PrintFormComponent_mat_error_5_Template(rf, ctx) { if (rf & 1) {
17
+ i0.ɵɵelementStart(0, "mat-error");
17
18
  i0.ɵɵtext(1);
18
19
  i0.ɵɵpipe(2, "translate");
20
+ i0.ɵɵpipe(3, "translate");
19
21
  i0.ɵɵelementEnd();
20
22
  } if (rf & 2) {
21
- const legendPosition_r6 = ctx.$implicit;
22
- i0.ɵɵproperty("value", legendPosition_r6.key);
23
23
  i0.ɵɵadvance(1);
24
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(2, 2, "igo.geo.printForm.legendPositions." + legendPosition_r6.value), " ");
24
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(2, 1, "igo.geo.formValidation.maxLength", i0.ɵɵpureFunction1(6, _c0, i0.ɵɵpipeBind1(3, 4, "igo.geo.printForm.title"))));
25
25
  } }
26
- function PrintFormComponent_mat_option_34_Template(rf, ctx) { if (rf & 1) {
27
- i0.ɵɵelementStart(0, "mat-option", 19);
26
+ const _c1 = function (a0) { return { column: a0, value: 120 }; };
27
+ function PrintFormComponent_mat_error_10_Template(rf, ctx) { if (rf & 1) {
28
+ i0.ɵɵelementStart(0, "mat-error");
29
+ i0.ɵɵtext(1);
30
+ i0.ɵɵpipe(2, "translate");
31
+ i0.ɵɵpipe(3, "translate");
32
+ i0.ɵɵelementEnd();
33
+ } if (rf & 2) {
34
+ i0.ɵɵadvance(1);
35
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(2, 1, "igo.geo.formValidation.maxLength", i0.ɵɵpureFunction1(6, _c1, i0.ɵɵpipeBind1(3, 4, "igo.geo.printForm.subtitle"))));
36
+ } }
37
+ const _c2 = function (a0, a1) { return { column: a0, value: a1 }; };
38
+ function PrintFormComponent_mat_error_15_Template(rf, ctx) { if (rf & 1) {
39
+ i0.ɵɵelementStart(0, "mat-error");
40
+ i0.ɵɵtext(1);
41
+ i0.ɵɵpipe(2, "translate");
42
+ i0.ɵɵpipe(3, "translate");
43
+ i0.ɵɵelementEnd();
44
+ } if (rf & 2) {
45
+ const ctx_r2 = i0.ɵɵnextContext();
46
+ i0.ɵɵadvance(1);
47
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(2, 1, "igo.geo.formValidation.maxLength", i0.ɵɵpureFunction2(6, _c2, i0.ɵɵpipeBind1(3, 4, "igo.geo.printForm.comment"), ctx_r2.maxLength)));
48
+ } }
49
+ function PrintFormComponent_mat_option_31_ng_container_1_Template(rf, ctx) { if (rf & 1) {
50
+ i0.ɵɵelementContainerStart(0);
51
+ i0.ɵɵtext(1);
52
+ i0.ɵɵpipe(2, "translate");
53
+ i0.ɵɵelementContainerEnd();
54
+ } if (rf & 2) {
55
+ const legendPosition_r9 = i0.ɵɵnextContext().$implicit;
56
+ i0.ɵɵadvance(1);
57
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(2, 1, "igo.geo.printForm.legendPositions." + legendPosition_r9.value), " ");
58
+ } }
59
+ function PrintFormComponent_mat_option_31_ng_container_2_Template(rf, ctx) { if (rf & 1) {
60
+ i0.ɵɵelementContainerStart(0);
61
+ i0.ɵɵtext(1);
62
+ i0.ɵɵpipe(2, "translate");
63
+ i0.ɵɵelementContainerEnd();
64
+ } if (rf & 2) {
65
+ const ctx_r11 = i0.ɵɵnextContext(2);
66
+ i0.ɵɵadvance(1);
67
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(2, 1, ctx_r11.outputFormat === "Pdf" ? "igo.geo.printForm.legendPositions.newpage" : "igo.geo.printForm.legendPositions.newimage"), " ");
68
+ } }
69
+ const _c3 = function () { return ["newpage", "newimage"]; };
70
+ function PrintFormComponent_mat_option_31_Template(rf, ctx) { if (rf & 1) {
71
+ i0.ɵɵelementStart(0, "mat-option", 20);
72
+ i0.ɵɵtemplate(1, PrintFormComponent_mat_option_31_ng_container_1_Template, 3, 3, "ng-container", 3);
73
+ i0.ɵɵtemplate(2, PrintFormComponent_mat_option_31_ng_container_2_Template, 3, 3, "ng-container", 3);
74
+ i0.ɵɵelementEnd();
75
+ } if (rf & 2) {
76
+ const legendPosition_r9 = ctx.$implicit;
77
+ i0.ɵɵproperty("value", legendPosition_r9.key);
78
+ i0.ɵɵadvance(1);
79
+ i0.ɵɵproperty("ngIf", !i0.ɵɵpureFunction0(3, _c3).includes(legendPosition_r9.value));
80
+ i0.ɵɵadvance(1);
81
+ i0.ɵɵproperty("ngIf", i0.ɵɵpureFunction0(4, _c3).includes(legendPosition_r9.value));
82
+ } }
83
+ function PrintFormComponent_mat_option_37_Template(rf, ctx) { if (rf & 1) {
84
+ i0.ɵɵelementStart(0, "mat-option", 20);
28
85
  i0.ɵɵtext(1);
29
86
  i0.ɵɵelementEnd();
30
87
  } if (rf & 2) {
31
- const outputFormat_r7 = ctx.$implicit;
32
- i0.ɵɵproperty("value", outputFormat_r7.key);
88
+ const outputFormat_r13 = ctx.$implicit;
89
+ i0.ɵɵproperty("value", outputFormat_r13.key);
33
90
  i0.ɵɵadvance(1);
34
- i0.ɵɵtextInterpolate1(" ", outputFormat_r7.value, " ");
91
+ i0.ɵɵtextInterpolate1(" ", outputFormat_r13.value, " ");
35
92
  } }
36
- function PrintFormComponent_mat_option_40_Template(rf, ctx) { if (rf & 1) {
37
- i0.ɵɵelementStart(0, "mat-option", 19);
93
+ function PrintFormComponent_mat_option_43_Template(rf, ctx) { if (rf & 1) {
94
+ i0.ɵɵelementStart(0, "mat-option", 20);
38
95
  i0.ɵɵtext(1);
39
96
  i0.ɵɵpipe(2, "translate");
40
97
  i0.ɵɵelementEnd();
41
98
  } if (rf & 2) {
42
- const paperFormat_r8 = ctx.$implicit;
43
- i0.ɵɵproperty("value", paperFormat_r8.key);
99
+ const paperFormat_r14 = ctx.$implicit;
100
+ i0.ɵɵproperty("value", paperFormat_r14.key);
44
101
  i0.ɵɵadvance(1);
45
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(2, 2, "igo.geo.printForm.paperFormats." + paperFormat_r8.value), " ");
102
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(2, 2, "igo.geo.printForm.paperFormats." + paperFormat_r14.value), " ");
46
103
  } }
47
- function PrintFormComponent_mat_option_46_Template(rf, ctx) { if (rf & 1) {
48
- i0.ɵɵelementStart(0, "mat-option", 19);
104
+ function PrintFormComponent_mat_option_49_Template(rf, ctx) { if (rf & 1) {
105
+ i0.ɵɵelementStart(0, "mat-option", 20);
49
106
  i0.ɵɵtext(1);
50
107
  i0.ɵɵelementEnd();
51
108
  } if (rf & 2) {
52
- const imageFormat_r9 = ctx.$implicit;
53
- i0.ɵɵproperty("value", imageFormat_r9.key);
109
+ const imageFormat_r15 = ctx.$implicit;
110
+ i0.ɵɵproperty("value", imageFormat_r15.key);
54
111
  i0.ɵɵadvance(1);
55
- i0.ɵɵtextInterpolate1(" ", imageFormat_r9.value, " ");
112
+ i0.ɵɵtextInterpolate1(" ", imageFormat_r15.value, " ");
56
113
  } }
57
- function PrintFormComponent_mat_option_52_Template(rf, ctx) { if (rf & 1) {
58
- i0.ɵɵelementStart(0, "mat-option", 19);
114
+ function PrintFormComponent_mat_option_55_Template(rf, ctx) { if (rf & 1) {
115
+ i0.ɵɵelementStart(0, "mat-option", 20);
59
116
  i0.ɵɵtext(1);
60
117
  i0.ɵɵelementEnd();
61
118
  } if (rf & 2) {
62
- const resolution_r10 = ctx.$implicit;
63
- i0.ɵɵproperty("value", resolution_r10.key);
119
+ const resolution_r16 = ctx.$implicit;
120
+ i0.ɵɵproperty("value", resolution_r16.key);
64
121
  i0.ɵɵadvance(1);
65
- i0.ɵɵtextInterpolate1(" ", resolution_r10.value + " PPI", " ");
122
+ i0.ɵɵtextInterpolate1(" ", resolution_r16.value + " PPI", " ");
66
123
  } }
67
- function PrintFormComponent_mat_option_58_Template(rf, ctx) { if (rf & 1) {
68
- i0.ɵɵelementStart(0, "mat-option", 19);
124
+ function PrintFormComponent_mat_option_61_Template(rf, ctx) { if (rf & 1) {
125
+ i0.ɵɵelementStart(0, "mat-option", 20);
69
126
  i0.ɵɵtext(1);
70
127
  i0.ɵɵpipe(2, "translate");
71
128
  i0.ɵɵelementEnd();
72
129
  } if (rf & 2) {
73
- const orientation_r11 = ctx.$implicit;
74
- i0.ɵɵproperty("value", orientation_r11.key);
130
+ const orientation_r17 = ctx.$implicit;
131
+ i0.ɵɵproperty("value", orientation_r17.key);
75
132
  i0.ɵɵadvance(1);
76
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(2, 2, "igo.geo.printForm." + orientation_r11.value), " ");
133
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(2, 2, "igo.geo.printForm." + orientation_r17.value), " ");
77
134
  } }
78
135
  export class PrintFormComponent {
79
136
  constructor(formBuilder) {
@@ -86,10 +143,11 @@ export class PrintFormComponent {
86
143
  this.legendPositions = PrintLegendPosition;
87
144
  this.isPrintService = true;
88
145
  this.submit = new EventEmitter();
146
+ this.maxLength = 180;
89
147
  this.form = this.formBuilder.group({
90
- title: ['', []],
91
- subtitle: ['', []],
92
- comment: ['', []],
148
+ title: ['', [Validators.minLength(0), Validators.maxLength(130)]],
149
+ subtitle: ['', [Validators.minLength(0), Validators.maxLength(120)]],
150
+ comment: ['', [Validators.minLength(0), Validators.maxLength(this.maxLength)]],
93
151
  outputFormat: ['', [Validators.required]],
94
152
  paperFormat: ['', [Validators.required]],
95
153
  imageFormat: ['', [Validators.required]],
@@ -243,134 +301,185 @@ export class PrintFormComponent {
243
301
  toggleImageSaveProp() {
244
302
  if (this.outputFormatField.value === 'Image') {
245
303
  this.isPrintService = false;
304
+ this.commentField.clearValidators();
305
+ this.commentField.updateValueAndValidity();
246
306
  }
247
307
  else {
248
308
  this.isPrintService = true;
249
309
  }
250
310
  }
311
+ changeCommentLength() {
312
+ switch (this.paperFormat) {
313
+ case PrintPaperFormat.A0:
314
+ // A0, landscape, length 900 | A0, portrait, comment length: 600
315
+ this.maxLength = (this.orientation === PrintOrientation.landscape) ? 900 : 600;
316
+ break;
317
+ case PrintPaperFormat.A1:
318
+ // A1, landscape, length 600 | A1, portrait, length 400;
319
+ this.maxLength = (this.orientation === PrintOrientation.landscape) ? 600 : 400;
320
+ break;
321
+ case PrintPaperFormat.A2:
322
+ // A2, landscape, length 400 | A2, portrait, length 300;
323
+ this.maxLength = (this.orientation === PrintOrientation.landscape) ? 400 : 300;
324
+ break;
325
+ case PrintPaperFormat.A3:
326
+ // A3, landscape, length 300 | A3, portrait, length 200;
327
+ this.maxLength = (this.orientation === PrintOrientation.landscape) ? 300 : 200;
328
+ break;
329
+ case PrintPaperFormat.A4:
330
+ // A4, landscape length 200 | A4, portrait length 120;
331
+ this.maxLength = (this.orientation === PrintOrientation.landscape) ? 200 : 100;
332
+ break;
333
+ case PrintPaperFormat.A5:
334
+ // A5, landscape length 120 | A5, portrait length 80;
335
+ this.maxLength = (this.orientation === PrintOrientation.landscape) ? 120 : 80;
336
+ break;
337
+ case PrintPaperFormat.Letter:
338
+ // lettre, landscape, 180 | lettre, portrait, 140
339
+ this.maxLength = (this.orientation === PrintOrientation.landscape) ? 180 : 140;
340
+ break;
341
+ default:
342
+ // legal, landscape, 200 | legal, portrait, 140
343
+ this.maxLength = (this.orientation === PrintOrientation.landscape) ? 200 : 140;
344
+ break;
345
+ }
346
+ this.commentField.setValidators([Validators.maxLength(this.maxLength)]);
347
+ this.commentField.updateValueAndValidity();
348
+ }
251
349
  }
252
350
  PrintFormComponent.ɵfac = function PrintFormComponent_Factory(t) { return new (t || PrintFormComponent)(i0.ɵɵdirectiveInject(i1.UntypedFormBuilder)); };
253
- PrintFormComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PrintFormComponent, selectors: [["igo-print-form"]], inputs: { disabled$: "disabled$", imageFormat: "imageFormat", outputFormat: "outputFormat", paperFormat: "paperFormat", orientation: "orientation", resolution: "resolution", legendPosition: "legendPosition", title: "title", subtitle: "subtitle", comment: "comment", showProjection: "showProjection", showScale: "showScale", showLegend: "showLegend", doZipFile: "doZipFile" }, outputs: { submit: "submit" }, decls: 65, vars: 72, consts: [[1, "igo-form", 3, "formGroup"], [1, "igo-input-container"], ["matInput", "", "formControlName", "title", 3, "placeholder"], ["matInput", "", "formControlName", "subtitle", 3, "placeholder"], ["matInput", "", "formControlName", "comment", 3, "placeholder"], [1, "print-slide-toggle-container", "mat-typography"], ["formControlName", "showProjection", 1, "print-option", 3, "labelPosition"], ["formControlName", "showScale", 1, "print-option", 3, "labelPosition"], ["formControlName", "doZipFile", 1, "print-option", 3, "labelPosition"], ["formControlName", "legendPosition", 3, "placeholder"], [3, "value", 4, "ngFor", "ngForOf"], ["formControlName", "outputFormat", 3, "placeholder", "selectionChange"], ["formControlName", "paperFormat", 3, "placeholder"], ["formControlName", "imageFormat", 3, "placeholder"], [1, "igo-input-container", 2, "display", "none"], ["formControlName", "resolution", 3, "placeholder"], ["formControlName", "orientation", 3, "placeholder"], [1, "igo-form-button-group", "print-button-top-padding"], ["mat-raised-button", "", "type", "button", 3, "disabled", "click"], [3, "value"]], template: function PrintFormComponent_Template(rf, ctx) { if (rf & 1) {
351
+ PrintFormComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PrintFormComponent, selectors: [["igo-print-form"]], inputs: { disabled$: "disabled$", imageFormat: "imageFormat", outputFormat: "outputFormat", paperFormat: "paperFormat", orientation: "orientation", resolution: "resolution", legendPosition: "legendPosition", title: "title", subtitle: "subtitle", comment: "comment", showProjection: "showProjection", showScale: "showScale", showLegend: "showLegend", doZipFile: "doZipFile" }, outputs: { submit: "submit" }, decls: 68, vars: 75, consts: [[1, "igo-form", 3, "formGroup"], [1, "igo-input-container"], ["matInput", "", "formControlName", "title", 3, "placeholder"], [4, "ngIf"], ["matInput", "", "formControlName", "subtitle", 3, "placeholder"], ["matInput", "", "formControlName", "comment", 3, "placeholder"], [1, "print-slide-toggle-container", "mat-typography"], ["formControlName", "showProjection", 1, "print-option", 3, "labelPosition"], ["formControlName", "showScale", 1, "print-option", 3, "labelPosition"], ["formControlName", "doZipFile", 1, "print-option", 3, "labelPosition"], ["formControlName", "legendPosition", 3, "placeholder"], [3, "value", 4, "ngFor", "ngForOf"], ["formControlName", "outputFormat", 3, "placeholder", "selectionChange"], ["formControlName", "paperFormat", 3, "placeholder", "selectionChange"], ["formControlName", "imageFormat", 3, "placeholder"], [1, "igo-input-container", 2, "display", "none"], ["formControlName", "resolution", 3, "placeholder"], ["formControlName", "orientation", 3, "placeholder", "selectionChange"], [1, "igo-form-button-group", "print-button-top-padding"], ["mat-raised-button", "", "type", "button", 3, "disabled", "click"], [3, "value"]], template: function PrintFormComponent_Template(rf, ctx) { if (rf & 1) {
254
352
  i0.ɵɵelementStart(0, "form", 0)(1, "div", 1)(2, "mat-form-field");
255
353
  i0.ɵɵelement(3, "input", 2);
256
354
  i0.ɵɵpipe(4, "translate");
355
+ i0.ɵɵtemplate(5, PrintFormComponent_mat_error_5_Template, 4, 8, "mat-error", 3);
257
356
  i0.ɵɵelementEnd()();
258
- i0.ɵɵelementStart(5, "div", 1)(6, "mat-form-field");
259
- i0.ɵɵelement(7, "input", 3);
260
- i0.ɵɵpipe(8, "translate");
357
+ i0.ɵɵelementStart(6, "div", 1)(7, "mat-form-field");
358
+ i0.ɵɵelement(8, "input", 4);
359
+ i0.ɵɵpipe(9, "translate");
360
+ i0.ɵɵtemplate(10, PrintFormComponent_mat_error_10_Template, 4, 8, "mat-error", 3);
261
361
  i0.ɵɵelementEnd()();
262
- i0.ɵɵelementStart(9, "div", 1)(10, "mat-form-field");
263
- i0.ɵɵelement(11, "input", 4);
264
- i0.ɵɵpipe(12, "translate");
362
+ i0.ɵɵelementStart(11, "div", 1)(12, "mat-form-field");
363
+ i0.ɵɵelement(13, "input", 5);
364
+ i0.ɵɵpipe(14, "translate");
365
+ i0.ɵɵtemplate(15, PrintFormComponent_mat_error_15_Template, 4, 9, "mat-error", 3);
265
366
  i0.ɵɵelementEnd()();
266
- i0.ɵɵelementStart(13, "div", 1)(14, "div", 5)(15, "mat-slide-toggle", 6);
267
- i0.ɵɵtext(16);
268
- i0.ɵɵpipe(17, "translate");
269
- i0.ɵɵelementEnd();
270
- i0.ɵɵelementStart(18, "mat-slide-toggle", 7);
367
+ i0.ɵɵelementStart(16, "div", 1)(17, "div", 6)(18, "mat-slide-toggle", 7);
271
368
  i0.ɵɵtext(19);
272
369
  i0.ɵɵpipe(20, "translate");
273
370
  i0.ɵɵelementEnd();
274
371
  i0.ɵɵelementStart(21, "mat-slide-toggle", 8);
275
372
  i0.ɵɵtext(22);
276
373
  i0.ɵɵpipe(23, "translate");
374
+ i0.ɵɵelementEnd();
375
+ i0.ɵɵelementStart(24, "mat-slide-toggle", 9);
376
+ i0.ɵɵtext(25);
377
+ i0.ɵɵpipe(26, "translate");
277
378
  i0.ɵɵelementEnd()()();
278
- i0.ɵɵelementStart(24, "div", 1)(25, "mat-form-field")(26, "mat-select", 9);
279
- i0.ɵɵpipe(27, "translate");
280
- i0.ɵɵtemplate(28, PrintFormComponent_mat_option_28_Template, 3, 4, "mat-option", 10);
281
- i0.ɵɵpipe(29, "keyvalue");
379
+ i0.ɵɵelementStart(27, "div", 1)(28, "mat-form-field")(29, "mat-select", 10);
380
+ i0.ɵɵpipe(30, "translate");
381
+ i0.ɵɵtemplate(31, PrintFormComponent_mat_option_31_Template, 3, 5, "mat-option", 11);
382
+ i0.ɵɵpipe(32, "keyvalue");
282
383
  i0.ɵɵelementEnd()()();
283
- i0.ɵɵelementStart(30, "div", 1)(31, "mat-form-field")(32, "mat-select", 11);
284
- i0.ɵɵlistener("selectionChange", function PrintFormComponent_Template_mat_select_selectionChange_32_listener() { return ctx.toggleImageSaveProp(); });
285
- i0.ɵɵpipe(33, "translate");
286
- i0.ɵɵtemplate(34, PrintFormComponent_mat_option_34_Template, 2, 2, "mat-option", 10);
287
- i0.ɵɵpipe(35, "keyvalue");
384
+ i0.ɵɵelementStart(33, "div", 1)(34, "mat-form-field")(35, "mat-select", 12);
385
+ i0.ɵɵlistener("selectionChange", function PrintFormComponent_Template_mat_select_selectionChange_35_listener() { return ctx.toggleImageSaveProp(); });
386
+ i0.ɵɵpipe(36, "translate");
387
+ i0.ɵɵtemplate(37, PrintFormComponent_mat_option_37_Template, 2, 2, "mat-option", 11);
388
+ i0.ɵɵpipe(38, "keyvalue");
288
389
  i0.ɵɵelementEnd()()();
289
- i0.ɵɵelementStart(36, "div", 1)(37, "mat-form-field")(38, "mat-select", 12);
290
- i0.ɵɵpipe(39, "translate");
291
- i0.ɵɵtemplate(40, PrintFormComponent_mat_option_40_Template, 3, 4, "mat-option", 10);
292
- i0.ɵɵpipe(41, "keyvalue");
390
+ i0.ɵɵelementStart(39, "div", 1)(40, "mat-form-field")(41, "mat-select", 13);
391
+ i0.ɵɵlistener("selectionChange", function PrintFormComponent_Template_mat_select_selectionChange_41_listener() { return ctx.changeCommentLength(); });
392
+ i0.ɵɵpipe(42, "translate");
393
+ i0.ɵɵtemplate(43, PrintFormComponent_mat_option_43_Template, 3, 4, "mat-option", 11);
394
+ i0.ɵɵpipe(44, "keyvalue");
293
395
  i0.ɵɵelementEnd()()();
294
- i0.ɵɵelementStart(42, "div", 1)(43, "mat-form-field")(44, "mat-select", 13);
295
- i0.ɵɵpipe(45, "translate");
296
- i0.ɵɵtemplate(46, PrintFormComponent_mat_option_46_Template, 2, 2, "mat-option", 10);
297
- i0.ɵɵpipe(47, "keyvalue");
396
+ i0.ɵɵelementStart(45, "div", 1)(46, "mat-form-field")(47, "mat-select", 14);
397
+ i0.ɵɵpipe(48, "translate");
398
+ i0.ɵɵtemplate(49, PrintFormComponent_mat_option_49_Template, 2, 2, "mat-option", 11);
399
+ i0.ɵɵpipe(50, "keyvalue");
298
400
  i0.ɵɵelementEnd()()();
299
- i0.ɵɵelementStart(48, "div", 14)(49, "mat-form-field")(50, "mat-select", 15);
300
- i0.ɵɵpipe(51, "translate");
301
- i0.ɵɵtemplate(52, PrintFormComponent_mat_option_52_Template, 2, 2, "mat-option", 10);
302
- i0.ɵɵpipe(53, "keyvalue");
401
+ i0.ɵɵelementStart(51, "div", 15)(52, "mat-form-field")(53, "mat-select", 16);
402
+ i0.ɵɵpipe(54, "translate");
403
+ i0.ɵɵtemplate(55, PrintFormComponent_mat_option_55_Template, 2, 2, "mat-option", 11);
404
+ i0.ɵɵpipe(56, "keyvalue");
303
405
  i0.ɵɵelementEnd()()();
304
- i0.ɵɵelementStart(54, "div", 1)(55, "mat-form-field")(56, "mat-select", 16);
305
- i0.ɵɵpipe(57, "translate");
306
- i0.ɵɵtemplate(58, PrintFormComponent_mat_option_58_Template, 3, 4, "mat-option", 10);
307
- i0.ɵɵpipe(59, "keyvalue");
406
+ i0.ɵɵelementStart(57, "div", 1)(58, "mat-form-field")(59, "mat-select", 17);
407
+ i0.ɵɵlistener("selectionChange", function PrintFormComponent_Template_mat_select_selectionChange_59_listener() { return ctx.changeCommentLength(); });
408
+ i0.ɵɵpipe(60, "translate");
409
+ i0.ɵɵtemplate(61, PrintFormComponent_mat_option_61_Template, 3, 4, "mat-option", 11);
410
+ i0.ɵɵpipe(62, "keyvalue");
308
411
  i0.ɵɵelementEnd()()();
309
- i0.ɵɵelementStart(60, "div", 17)(61, "button", 18);
310
- i0.ɵɵlistener("click", function PrintFormComponent_Template_button_click_61_listener() { return ctx.handleFormSubmit(ctx.form.value, ctx.form.valid); });
311
- i0.ɵɵpipe(62, "async");
312
- i0.ɵɵtext(63);
313
- i0.ɵɵpipe(64, "translate");
412
+ i0.ɵɵelementStart(63, "div", 18)(64, "button", 19);
413
+ i0.ɵɵlistener("click", function PrintFormComponent_Template_button_click_64_listener() { return ctx.handleFormSubmit(ctx.form.value, ctx.form.valid); });
414
+ i0.ɵɵpipe(65, "async");
415
+ i0.ɵɵtext(66);
416
+ i0.ɵɵpipe(67, "translate");
314
417
  i0.ɵɵelementEnd()()();
315
418
  } if (rf & 2) {
316
419
  i0.ɵɵproperty("formGroup", ctx.form);
317
420
  i0.ɵɵadvance(3);
318
- i0.ɵɵpropertyInterpolate("placeholder", i0.ɵɵpipeBind1(4, 32, "igo.geo.printForm.title"));
319
- i0.ɵɵadvance(4);
320
- i0.ɵɵpropertyInterpolate("placeholder", i0.ɵɵpipeBind1(8, 34, "igo.geo.printForm.subtitle"));
321
- i0.ɵɵadvance(4);
322
- i0.ɵɵpropertyInterpolate("placeholder", i0.ɵɵpipeBind1(12, 36, "igo.geo.printForm.comment"));
323
- i0.ɵɵadvance(4);
421
+ i0.ɵɵpropertyInterpolate("placeholder", i0.ɵɵpipeBind1(4, 35, "igo.geo.printForm.title"));
422
+ i0.ɵɵadvance(2);
423
+ i0.ɵɵproperty("ngIf", ctx.titleField.errors == null ? null : ctx.titleField.errors.maxlength);
424
+ i0.ɵɵadvance(3);
425
+ i0.ɵɵpropertyInterpolate("placeholder", i0.ɵɵpipeBind1(9, 37, "igo.geo.printForm.subtitle"));
426
+ i0.ɵɵadvance(2);
427
+ i0.ɵɵproperty("ngIf", ctx.subtitleField.errors == null ? null : ctx.subtitleField.errors.maxlength);
428
+ i0.ɵɵadvance(3);
429
+ i0.ɵɵpropertyInterpolate("placeholder", i0.ɵɵpipeBind1(14, 39, "igo.geo.printForm.comment"));
430
+ i0.ɵɵadvance(2);
431
+ i0.ɵɵproperty("ngIf", ctx.commentField.errors == null ? null : ctx.commentField.errors.maxlength);
432
+ i0.ɵɵadvance(3);
324
433
  i0.ɵɵproperty("labelPosition", "before");
325
434
  i0.ɵɵadvance(1);
326
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(17, 38, "igo.geo.printForm.showProjection"), " ");
435
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(20, 41, "igo.geo.printForm.showProjection"), " ");
327
436
  i0.ɵɵadvance(2);
328
437
  i0.ɵɵproperty("labelPosition", "before");
329
438
  i0.ɵɵadvance(1);
330
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(20, 40, "igo.geo.printForm.showScale"), " ");
439
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(23, 43, "igo.geo.printForm.showScale"), " ");
331
440
  i0.ɵɵadvance(2);
332
441
  i0.ɵɵstyleProp("display", ctx.isPrintService ? "none" : "");
333
442
  i0.ɵɵproperty("labelPosition", "before");
334
443
  i0.ɵɵadvance(1);
335
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(23, 42, "igo.geo.printForm.doZipFile"), " ");
444
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(26, 45, "igo.geo.printForm.doZipFile"), " ");
336
445
  i0.ɵɵadvance(4);
337
- i0.ɵɵpropertyInterpolate("placeholder", i0.ɵɵpipeBind1(27, 44, "igo.geo.printForm.legendPosition"));
446
+ i0.ɵɵpropertyInterpolate("placeholder", i0.ɵɵpipeBind1(30, 47, "igo.geo.printForm.legendPosition"));
338
447
  i0.ɵɵadvance(2);
339
- i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(29, 46, ctx.legendPositions));
448
+ i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(32, 49, ctx.legendPositions));
340
449
  i0.ɵɵadvance(4);
341
- i0.ɵɵpropertyInterpolate("placeholder", i0.ɵɵpipeBind1(33, 48, "igo.geo.printForm.outputFormat"));
450
+ i0.ɵɵpropertyInterpolate("placeholder", i0.ɵɵpipeBind1(36, 51, "igo.geo.printForm.outputFormat"));
342
451
  i0.ɵɵadvance(2);
343
- i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(35, 50, ctx.outputFormats));
452
+ i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(38, 53, ctx.outputFormats));
344
453
  i0.ɵɵadvance(2);
345
454
  i0.ɵɵstyleProp("display", ctx.isPrintService ? "block" : "none");
346
455
  i0.ɵɵadvance(2);
347
- i0.ɵɵpropertyInterpolate("placeholder", i0.ɵɵpipeBind1(39, 52, "igo.geo.printForm.paperFormat"));
456
+ i0.ɵɵpropertyInterpolate("placeholder", i0.ɵɵpipeBind1(42, 55, "igo.geo.printForm.paperFormat"));
348
457
  i0.ɵɵadvance(2);
349
- i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(41, 54, ctx.paperFormats));
458
+ i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(44, 57, ctx.paperFormats));
350
459
  i0.ɵɵadvance(2);
351
460
  i0.ɵɵstyleProp("display", ctx.isPrintService ? "none" : "block");
352
461
  i0.ɵɵadvance(2);
353
- i0.ɵɵpropertyInterpolate("placeholder", i0.ɵɵpipeBind1(45, 56, "igo.geo.printForm.imageFormat"));
462
+ i0.ɵɵpropertyInterpolate("placeholder", i0.ɵɵpipeBind1(48, 59, "igo.geo.printForm.imageFormat"));
354
463
  i0.ɵɵadvance(2);
355
- i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(47, 58, ctx.imageFormats));
464
+ i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(50, 61, ctx.imageFormats));
356
465
  i0.ɵɵadvance(4);
357
- i0.ɵɵpropertyInterpolate("placeholder", i0.ɵɵpipeBind1(51, 60, "igo.geo.printForm.resolution"));
466
+ i0.ɵɵpropertyInterpolate("placeholder", i0.ɵɵpipeBind1(54, 63, "igo.geo.printForm.resolution"));
358
467
  i0.ɵɵadvance(2);
359
- i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(53, 62, ctx.resolutions));
468
+ i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(56, 65, ctx.resolutions));
360
469
  i0.ɵɵadvance(2);
361
470
  i0.ɵɵstyleProp("display", ctx.isPrintService ? "block" : "none");
362
471
  i0.ɵɵadvance(2);
363
- i0.ɵɵpropertyInterpolate("placeholder", i0.ɵɵpipeBind1(57, 64, "igo.geo.printForm.orientation"));
472
+ i0.ɵɵpropertyInterpolate("placeholder", i0.ɵɵpipeBind1(60, 67, "igo.geo.printForm.orientation"));
364
473
  i0.ɵɵadvance(2);
365
- i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(59, 66, ctx.orientations));
474
+ i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(62, 69, ctx.orientations));
366
475
  i0.ɵɵadvance(3);
367
- i0.ɵɵproperty("disabled", !ctx.form.valid || i0.ɵɵpipeBind1(62, 68, ctx.disabled$));
476
+ i0.ɵɵproperty("disabled", !ctx.form.valid || i0.ɵɵpipeBind1(65, 71, ctx.disabled$));
368
477
  i0.ɵɵadvance(2);
369
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(64, 70, "igo.geo.printForm.saveBtn"), " ");
370
- } }, dependencies: [i2.NgForOf, i1.ɵNgNoValidate, i1.DefaultValueAccessor, i1.NgControlStatus, i1.NgControlStatusGroup, i1.FormGroupDirective, i1.FormControlName, i3.MatButton, i4.MatFormField, i5.MatSelect, i6.MatOption, i7.MatInput, i8.MatSlideToggle, i2.AsyncPipe, i9.TranslatePipe, i10.KeyValuePipe], styles: ["mat-form-field[_ngcontent-%COMP%]{width:100%}.print-slide-toggle-container[_ngcontent-%COMP%]{overflow-x:hidden}.print-slide-toggle-container[_ngcontent-%COMP%] mat-slide-toggle[_ngcontent-%COMP%]{width:100%;margin:10px}.print-slide-toggle-container[_ngcontent-%COMP%] mat-slide-toggle[_ngcontent-%COMP%] .mat-slide-toggle-content{width:calc(100% - 60px)}.print-option[_ngcontent-%COMP%]{display:block;margin-right:10px;margin-bottom:15px}.print-button-top-padding[_ngcontent-%COMP%]{padding-top:25px}.igo-form[_ngcontent-%COMP%]{padding:10px 5px 5px}.igo-form-button-group[_ngcontent-%COMP%]{text-align:center}"] });
478
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(67, 73, "igo.geo.printForm.saveBtn"), " ");
479
+ } }, dependencies: [i2.NgForOf, i2.NgIf, i1.ɵNgNoValidate, i1.DefaultValueAccessor, i1.NgControlStatus, i1.NgControlStatusGroup, i1.FormGroupDirective, i1.FormControlName, i3.MatButton, i4.MatError, i4.MatFormField, i5.MatSelect, i6.MatOption, i7.MatInput, i8.MatSlideToggle, i2.AsyncPipe, i9.TranslatePipe, i10.KeyValuePipe], styles: ["mat-form-field[_ngcontent-%COMP%]{width:100%}.print-slide-toggle-container[_ngcontent-%COMP%]{overflow-x:hidden}.print-slide-toggle-container[_ngcontent-%COMP%] mat-slide-toggle[_ngcontent-%COMP%]{width:100%;margin:10px}.print-slide-toggle-container[_ngcontent-%COMP%] mat-slide-toggle[_ngcontent-%COMP%] .mat-slide-toggle-content{width:calc(100% - 60px)}.print-option[_ngcontent-%COMP%]{display:block;margin-right:10px;margin-bottom:15px}.print-button-top-padding[_ngcontent-%COMP%]{padding-top:25px}.igo-form[_ngcontent-%COMP%]{padding:10px 5px 5px}.igo-form-button-group[_ngcontent-%COMP%]{text-align:center}"] });
371
480
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PrintFormComponent, [{
372
481
  type: Component,
373
- args: [{ selector: 'igo-print-form', template: "<form class=\"igo-form\" [formGroup]=\"form\">\n <div class=\"igo-input-container\">\n <mat-form-field>\n <input\n matInput\n formControlName=\"title\"\n placeholder=\"{{'igo.geo.printForm.title' | translate}}\">\n </mat-form-field>\n </div>\n <div class=\"igo-input-container\">\n <mat-form-field>\n <input\n matInput\n formControlName=\"subtitle\"\n placeholder=\"{{'igo.geo.printForm.subtitle' | translate}}\">\n </mat-form-field>\n </div>\n <div class=\"igo-input-container\">\n <mat-form-field>\n <input\n matInput\n formControlName=\"comment\"\n placeholder=\"{{'igo.geo.printForm.comment' | translate}}\">\n </mat-form-field>\n </div>\n\n <div class=\"igo-input-container\">\n <div class=\"print-slide-toggle-container mat-typography\">\n <mat-slide-toggle\n class=\"print-option\"\n formControlName=\"showProjection\"\n [labelPosition]=\"'before'\">\n {{'igo.geo.printForm.showProjection' | translate}}\n </mat-slide-toggle>\n <mat-slide-toggle\n class=\"print-option\"\n formControlName=\"showScale\"\n [labelPosition]=\"'before'\">\n {{'igo.geo.printForm.showScale' | translate}}\n </mat-slide-toggle>\n <mat-slide-toggle\n class=\"print-option\"\n formControlName=\"doZipFile\"\n [labelPosition]=\"'before'\"\n [style.display]=\"isPrintService ? 'none' : ''\">\n {{'igo.geo.printForm.doZipFile' | translate}}\n </mat-slide-toggle>\n </div>\n </div>\n\n <div class=\"igo-input-container\">\n <mat-form-field>\n <mat-select\n formControlName=\"legendPosition\"\n placeholder=\"{{'igo.geo.printForm.legendPosition' | translate}}\">\n <mat-option *ngFor=\"let legendPosition of legendPositions | keyvalue \" [value]=\"legendPosition.key\">\n {{'igo.geo.printForm.legendPositions.' + legendPosition.value | translate}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div class=\"igo-input-container\">\n <mat-form-field>\n <mat-select (selectionChange)=\"toggleImageSaveProp()\"\n formControlName=\"outputFormat\"\n placeholder=\"{{'igo.geo.printForm.outputFormat' | translate}}\">\n <mat-option *ngFor=\"let outputFormat of outputFormats | keyvalue \" [value]=\"outputFormat.key\">\n {{outputFormat.value}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div class=\"igo-input-container\" [style.display]=\"isPrintService ? 'block' : 'none'\">\n <mat-form-field>\n <mat-select\n formControlName=\"paperFormat\"\n placeholder=\"{{'igo.geo.printForm.paperFormat' | translate}}\">\n <mat-option *ngFor=\"let paperFormat of paperFormats | keyvalue \" [value]=\"paperFormat.key\">\n {{('igo.geo.printForm.paperFormats.' + paperFormat.value) | translate}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div class=\"igo-input-container\" [style.display]=\"isPrintService ? 'none' : 'block'\">\n <mat-form-field>\n <mat-select\n formControlName=\"imageFormat\"\n placeholder=\"{{'igo.geo.printForm.imageFormat' | translate}}\">\n <mat-option *ngFor=\"let imageFormat of imageFormats | keyvalue \" [value]=\"imageFormat.key\">\n {{imageFormat.value}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div class=\"igo-input-container\" style=\"display: none;\">\n <mat-form-field>\n <mat-select\n formControlName=\"resolution\"\n placeholder=\"{{'igo.geo.printForm.resolution' | translate}}\">\n <mat-option *ngFor=\"let resolution of resolutions | keyvalue \" [value]=\"resolution.key\">\n {{resolution.value + ' PPI'}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div class=\"igo-input-container\" [style.display]=\"isPrintService ? 'block' : 'none'\">\n <mat-form-field>\n <mat-select\n formControlName=\"orientation\"\n placeholder=\"{{'igo.geo.printForm.orientation' | translate}}\">\n <mat-option *ngFor=\"let orientation of orientations | keyvalue \" [value]=\"orientation.key\">\n {{('igo.geo.printForm.' + orientation.value) | translate}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div class=\"igo-form-button-group print-button-top-padding\">\n <button\n mat-raised-button\n type=\"button\"\n [disabled]=\"!form.valid || (disabled$ | async)\"\n (click)=\"handleFormSubmit(form.value, form.valid)\">\n {{'igo.geo.printForm.saveBtn' | translate}}\n </button>\n </div>\n\n</form>\n", styles: ["mat-form-field{width:100%}.print-slide-toggle-container{overflow-x:hidden}.print-slide-toggle-container mat-slide-toggle{width:100%;margin:10px}.print-slide-toggle-container mat-slide-toggle ::ng-deep .mat-slide-toggle-content{width:calc(100% - 60px)}.print-option{display:block;margin-right:10px;margin-bottom:15px}.print-button-top-padding{padding-top:25px}.igo-form{padding:10px 5px 5px}.igo-form-button-group{text-align:center}\n"] }]
482
+ args: [{ selector: 'igo-print-form', template: "<form class=\"igo-form\" [formGroup]=\"form\">\r\n <div class=\"igo-input-container\">\r\n <mat-form-field>\r\n <input\r\n matInput\r\n formControlName=\"title\"\r\n placeholder=\"{{'igo.geo.printForm.title' | translate}}\">\r\n <mat-error *ngIf=\"titleField.errors?.maxlength\">{{'igo.geo.formValidation.maxLength' | translate: { \r\n column: 'igo.geo.printForm.title' | translate, \r\n value: 130 } }}</mat-error>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"igo-input-container\">\r\n <mat-form-field>\r\n <input\r\n matInput\r\n formControlName=\"subtitle\"\r\n placeholder=\"{{'igo.geo.printForm.subtitle' | translate}}\">\r\n <mat-error *ngIf=\"subtitleField.errors?.maxlength\">{{'igo.geo.formValidation.maxLength' | translate: { \r\n column: 'igo.geo.printForm.subtitle' | translate, \r\n value: 120 } }}</mat-error>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"igo-input-container\">\r\n <mat-form-field>\r\n <input\r\n matInput\r\n formControlName=\"comment\"\r\n placeholder=\"{{'igo.geo.printForm.comment' | translate}}\">\r\n <mat-error *ngIf=\"commentField.errors?.maxlength\">{{'igo.geo.formValidation.maxLength' | translate: { \r\n column: 'igo.geo.printForm.comment' | translate, \r\n value: maxLength } }}</mat-error>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"igo-input-container\">\r\n <div class=\"print-slide-toggle-container mat-typography\">\r\n <mat-slide-toggle\r\n class=\"print-option\"\r\n formControlName=\"showProjection\"\r\n [labelPosition]=\"'before'\">\r\n {{'igo.geo.printForm.showProjection' | translate}}\r\n </mat-slide-toggle>\r\n <mat-slide-toggle\r\n class=\"print-option\"\r\n formControlName=\"showScale\"\r\n [labelPosition]=\"'before'\">\r\n {{'igo.geo.printForm.showScale' | translate}}\r\n </mat-slide-toggle>\r\n <mat-slide-toggle\r\n class=\"print-option\"\r\n formControlName=\"doZipFile\"\r\n [labelPosition]=\"'before'\"\r\n [style.display]=\"isPrintService ? 'none' : ''\">\r\n {{'igo.geo.printForm.doZipFile' | translate}}\r\n </mat-slide-toggle>\r\n </div>\r\n </div>\r\n\r\n <div class=\"igo-input-container\">\r\n <mat-form-field>\r\n <mat-select\r\n formControlName=\"legendPosition\"\r\n placeholder=\"{{'igo.geo.printForm.legendPosition' | translate}}\">\r\n <mat-option *ngFor=\"let legendPosition of legendPositions | keyvalue \" [value]=\"legendPosition.key\">\r\n <ng-container *ngIf=\"!['newpage', 'newimage'].includes(legendPosition.value)\">\r\n {{'igo.geo.printForm.legendPositions.' + legendPosition.value | translate}}\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"['newpage', 'newimage'].includes(legendPosition.value)\">\r\n {{ ((outputFormat === 'Pdf') ? 'igo.geo.printForm.legendPositions.newpage' : \r\n 'igo.geo.printForm.legendPositions.newimage') | translate}}\r\n </ng-container>\r\n </mat-option>\r\n\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-select (selectionChange)=\"toggleImageSaveProp()\"\r\n formControlName=\"outputFormat\"\r\n placeholder=\"{{'igo.geo.printForm.outputFormat' | translate}}\">\r\n <mat-option *ngFor=\"let outputFormat of outputFormats | keyvalue \" [value]=\"outputFormat.key\">\r\n {{outputFormat.value}}\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\" [style.display]=\"isPrintService ? 'block' : 'none'\">\r\n <mat-form-field>\r\n <mat-select (selectionChange)=\"changeCommentLength()\"\r\n formControlName=\"paperFormat\"\r\n placeholder=\"{{'igo.geo.printForm.paperFormat' | translate}}\">\r\n <mat-option *ngFor=\"let paperFormat of paperFormats | keyvalue \" [value]=\"paperFormat.key\">\r\n {{('igo.geo.printForm.paperFormats.' + paperFormat.value) | translate}}\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\" [style.display]=\"isPrintService ? 'none' : 'block'\">\r\n <mat-form-field>\r\n <mat-select\r\n formControlName=\"imageFormat\"\r\n placeholder=\"{{'igo.geo.printForm.imageFormat' | translate}}\">\r\n <mat-option *ngFor=\"let imageFormat of imageFormats | keyvalue \" [value]=\"imageFormat.key\">\r\n {{imageFormat.value}}\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\" style=\"display: none;\">\r\n <mat-form-field>\r\n <mat-select\r\n formControlName=\"resolution\"\r\n placeholder=\"{{'igo.geo.printForm.resolution' | translate}}\">\r\n <mat-option *ngFor=\"let resolution of resolutions | keyvalue \" [value]=\"resolution.key\">\r\n {{resolution.value + ' PPI'}}\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\" [style.display]=\"isPrintService ? 'block' : 'none'\">\r\n <mat-form-field>\r\n <mat-select (selectionChange)=\"changeCommentLength()\"\r\n formControlName=\"orientation\"\r\n placeholder=\"{{'igo.geo.printForm.orientation' | translate}}\">\r\n <mat-option *ngFor=\"let orientation of orientations | keyvalue \" [value]=\"orientation.key\">\r\n {{('igo.geo.printForm.' + orientation.value) | translate}}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"igo-form-button-group print-button-top-padding\">\r\n <button\r\n mat-raised-button\r\n type=\"button\"\r\n [disabled]=\"!form.valid || (disabled$ | async)\"\r\n (click)=\"handleFormSubmit(form.value, form.valid)\">\r\n {{'igo.geo.printForm.saveBtn' | translate}}\r\n </button>\r\n </div>\r\n\r\n</form>\r\n", styles: ["mat-form-field{width:100%}.print-slide-toggle-container{overflow-x:hidden}.print-slide-toggle-container mat-slide-toggle{width:100%;margin:10px}.print-slide-toggle-container mat-slide-toggle ::ng-deep .mat-slide-toggle-content{width:calc(100% - 60px)}.print-option{display:block;margin-right:10px;margin-bottom:15px}.print-button-top-padding{padding-top:25px}.igo-form{padding:10px 5px 5px}.igo-form-button-group{text-align:center}\n"] }]
374
483
  }], function () { return [{ type: i1.UntypedFormBuilder }]; }, { disabled$: [{
375
484
  type: Input
376
485
  }], imageFormat: [{
@@ -402,4 +511,4 @@ PrintFormComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PrintFor
402
511
  }], submit: [{
403
512
  type: Output
404
513
  }] }); })();
405
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpbnQtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9wcmludC9wcmludC1mb3JtL3ByaW50LWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2VvL3NyYy9saWIvcHJpbnQvcHJpbnQtZm9ybS9wcmludC1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUlMLFVBQVUsRUFDWCxNQUFNLGdCQUFnQixDQUFDO0FBS3hCLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLGdCQUFnQixFQUNoQixlQUFlLEVBQ2Ysb0JBQW9CLEVBQ3BCLG1CQUFtQixFQUNwQixNQUFNLHNCQUFzQixDQUFDOzs7Ozs7Ozs7Ozs7O0lDcUN0QixzQ0FBb0c7SUFDaEcsWUFDSjs7SUFBQSxpQkFBYTs7O0lBRjBELDZDQUE0QjtJQUMvRixlQUNKO0lBREkscUhBQ0o7OztJQVVBLHNDQUE4RjtJQUMxRixZQUNKO0lBQUEsaUJBQWE7OztJQUZzRCwyQ0FBMEI7SUFDekYsZUFDSjtJQURJLHNEQUNKOzs7SUFVQSxzQ0FBMkY7SUFDekYsWUFDRjs7SUFBQSxpQkFBYTs7O0lBRm9ELDBDQUF5QjtJQUN4RixlQUNGO0lBREUsK0dBQ0Y7OztJQVVBLHNDQUEyRjtJQUN6RixZQUNGO0lBQUEsaUJBQWE7OztJQUZvRCwwQ0FBeUI7SUFDeEYsZUFDRjtJQURFLHFEQUNGOzs7SUFVQSxzQ0FBd0Y7SUFDdEYsWUFDRjtJQUFBLGlCQUFhOzs7SUFGa0QsMENBQXdCO0lBQ3JGLGVBQ0Y7SUFERSw4REFDRjs7O0lBVUEsc0NBQTJGO0lBQ3pGLFlBQ0Y7O0lBQUEsaUJBQWE7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OUQsZUFBNEQ7UUFBNUQsK0ZBQTREO1FBQ3pCLGVBQXlCO1FBQXpCLGlFQUF5QjtRQU9qQyxlQUFtRDtRQUFuRCxnRUFBbUQ7UUFJOUUsZUFBNkQ7UUFBN0QsZ0dBQTZEO1FBQ3pCLGVBQTBCO1FBQTFCLGtFQUEwQjtRQVdoRSxlQUErQztRQUEvQyxtRkFBK0M7UUFFL0MsZUFDRjtRQURFLG9GQUNGOzt1RkR4R1Msa0JBQWtCO2NBTDlCLFNBQVM7MkJBQ0UsZ0JBQWdCO3FFQWNqQixTQUFTO2tCQUFqQixLQUFLO1lBR0YsV0FBVztrQkFEZCxLQUFLO1lBV0YsWUFBWTtrQkFEZixLQUFLO1lBV0YsV0FBVztrQkFEZCxLQUFLO1lBV0YsV0FBVztrQkFEZCxLQUFLO1lBV0YsVUFBVTtrQkFEYixLQUFLO1lBV0YsY0FBYztrQkFEakIsS0FBSztZQVdGLEtBQUs7a0JBRFIsS0FBSztZQVFGLFFBQVE7a0JBRFgsS0FBSztZQVFGLE9BQU87a0JBRFYsS0FBSztZQVFGLGNBQWM7a0JBRGpCLEtBQUs7WUFRRixTQUFTO2tCQURaLEtBQUs7WUFRRixVQUFVO2tCQURiLEtBQUs7WUFTRixTQUFTO2tCQURaLEtBQUs7WUE0REksTUFBTTtrQkFBZixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgVW50eXBlZEZvcm1Hcm91cCxcbiAgVW50eXBlZEZvcm1CdWlsZGVyLFxuICBVbnR5cGVkRm9ybUNvbnRyb2wsXG4gIFZhbGlkYXRvcnNcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFByaW50T3B0aW9ucyB9IGZyb20gJy4uL3NoYXJlZC9wcmludC5pbnRlcmZhY2UnO1xuXG5pbXBvcnQge1xuICBQcmludE91dHB1dEZvcm1hdCxcbiAgUHJpbnRQYXBlckZvcm1hdCxcbiAgUHJpbnRPcmllbnRhdGlvbixcbiAgUHJpbnRSZXNvbHV0aW9uLFxuICBQcmludFNhdmVJbWFnZUZvcm1hdCxcbiAgUHJpbnRMZWdlbmRQb3NpdGlvblxufSBmcm9tICcuLi9zaGFyZWQvcHJpbnQudHlwZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2lnby1wcmludC1mb3JtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3ByaW50LWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wcmludC1mb3JtLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgUHJpbnRGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHVibGljIGZvcm06IFVudHlwZWRGb3JtR3JvdXA7XG4gIHB1YmxpYyBvdXRwdXRGb3JtYXRzID0gUHJpbnRPdXRwdXRGb3JtYXQ7XG4gIHB1YmxpYyBwYXBlckZvcm1hdHMgPSBQcmludFBhcGVyRm9ybWF0O1xuICBwdWJsaWMgb3JpZW50YXRpb25zID0gUHJpbnRPcmllbnRhdGlvbjtcbiAgcHVibGljIHJlc29sdXRpb25zID0gUHJpbnRSZXNvbHV0aW9uO1xuICBwdWJsaWMgaW1hZ2VGb3JtYXRzID0gUHJpbnRTYXZlSW1hZ2VGb3JtYXQ7XG4gIHB1YmxpYyBsZWdlbmRQb3NpdGlvbnMgPSBQcmludExlZ2VuZFBvc2l0aW9uO1xuICBwdWJsaWMgaXNQcmludFNlcnZpY2UgPSB0cnVlO1xuXG4gIEBJbnB1dCgpIGRpc2FibGVkJDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+O1xuXG4gIEBJbnB1dCgpXG4gIGdldCBpbWFnZUZvcm1hdCgpOiBQcmludFNhdmVJbWFnZUZvcm1hdCB7XG4gICAgcmV0dXJuIHRoaXMuaW1hZ2VGb3JtYXRGaWVsZC52YWx1ZTtcbiAgfVxuICBzZXQgaW1hZ2VGb3JtYXQodmFsdWU6IFByaW50U2F2ZUltYWdlRm9ybWF0KSB7XG4gICAgdGhpcy5pbWFnZUZvcm1hdEZpZWxkLnNldFZhbHVlKHZhbHVlIHx8IFByaW50U2F2ZUltYWdlRm9ybWF0LkpwZWcsIHtcbiAgICAgIG9ubHlTZWxmOiB0cnVlXG4gICAgfSk7XG4gIH1cblxuICBASW5wdXQoKVxuICBnZXQgb3V0cHV0Rm9ybWF0KCk6IFByaW50T3V0cHV0Rm9ybWF0IHtcbiAgICByZXR1cm4gdGhpcy5vdXRwdXRGb3JtYXRGaWVsZC52YWx1ZTtcbiAgfVxuICBzZXQgb3V0cHV0Rm9ybWF0KHZhbHVlOiBQcmludE91dHB1dEZvcm1hdCkge1xuICAgIHRoaXMub3V0cHV0Rm9ybWF0RmllbGQuc2V0VmFsdWUodmFsdWUgfHwgUHJpbnRPdXRwdXRGb3JtYXQuUGRmLCB7XG4gICAgICBvbmx5U2VsZjogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgQElucHV0KClcbiAgZ2V0IHBhcGVyRm9ybWF0KCk6IFByaW50UGFwZXJGb3JtYXQge1xuICAgIHJldHVybiB0aGlzLnBhcGVyRm9ybWF0RmllbGQudmFsdWU7XG4gIH1cbiAgc2V0IHBhcGVyRm9ybWF0KHZhbHVlOiBQcmludFBhcGVyRm9ybWF0KSB7XG4gICAgdGhpcy5wYXBlckZvcm1hdEZpZWxkLnNldFZhbHVlKHZhbHVlIHx8IFByaW50UGFwZXJGb3JtYXQuTGV0dGVyLCB7XG4gICAgICBvbmx5U2VsZjogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgQElucHV0KClcbiAgZ2V0IG9yaWVudGF0aW9uKCk6IFByaW50T3JpZW50YXRpb24ge1xuICAgIHJldHVybiB0aGlzLm9yaWVudGF0aW9uRmllbGQudmFsdWU7XG4gIH1cbiAgc2V0IG9yaWVudGF0aW9uKHZhbHVlOiBQcmludE9yaWVudGF0aW9uKSB7XG4gICAgdGhpcy5vcmllbnRhdGlvbkZpZWxkLnNldFZhbHVlKHZhbHVlIHx8IFByaW50T3JpZW50YXRpb24ubGFuZHNjYXBlLCB7XG4gICAgICBvbmx5U2VsZjogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgQElucHV0KClcbiAgZ2V0IHJlc29sdXRpb24oKTogUHJpbnRSZXNvbHV0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHV0aW9uRmllbGQudmFsdWU7XG4gIH1cbiAgc2V0IHJlc29sdXRpb24odmFsdWU6IFByaW50UmVzb2x1dGlvbikge1xuICAgIHRoaXMucmVzb2x1dGlvbkZpZWxkLnNldFZhbHVlKHZhbHVlIHx8IFByaW50UmVzb2x1dGlvblsnOTYnXSwge1xuICAgICAgb25seVNlbGY6IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIGdldCBsZWdlbmRQb3NpdGlvbigpOiBQcmludExlZ2VuZFBvc2l0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5sZWdlbmRQb3NpdGlvbkZpZWxkLnZhbHVlO1xuICB9XG4gIHNldCBsZWdlbmRQb3NpdGlvbih2YWx1ZTogUHJpbnRMZWdlbmRQb3NpdGlvbikge1xuICAgIHRoaXMubGVnZW5kUG9zaXRpb25GaWVsZC5zZXRWYWx1ZSh2YWx1ZSB8fCBQcmludExlZ2VuZFBvc2l0aW9uLm5vbmUsIHtcbiAgICAgIG9ubHlTZWxmOiB0cnVlXG4gICAgfSk7XG4gIH1cblxuICBASW5wdXQoKVxuICBnZXQgdGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50aXRsZUZpZWxkLnZhbHVlO1xuICB9XG4gIHNldCB0aXRsZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy50aXRsZUZpZWxkLnNldFZhbHVlKHZhbHVlLCB7IG9ubHlTZWxmOiB0cnVlIH0pO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBzdWJ0aXRsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN1YnRpdGxlRmllbGQudmFsdWU7XG4gIH1cbiAgc2V0IHN1YnRpdGxlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnN1YnRpdGxlRmllbGQuc2V0VmFsdWUodmFsdWUsIHsgb25seVNlbGY6IHRydWUgfSk7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IGNvbW1lbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb21tZW50RmllbGQudmFsdWU7XG4gIH1cbiAgc2V0IGNvbW1lbnQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuY29tbWVudEZpZWxkLnNldFZhbHVlKHZhbHVlLCB7IG9ubHlTZWxmOiB0cnVlIH0pO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBzaG93UHJvamVjdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zaG93UHJvamVjdGlvbkZpZWxkLnZhbHVlO1xuICB9XG4gIHNldCBzaG93UHJvamVjdGlvbih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuc2hvd1Byb2plY3Rpb25GaWVsZC5zZXRWYWx1ZSh2YWx1ZSwgeyBvbmx5U2VsZjogdHJ1ZSB9KTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgc2hvd1NjYWxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNob3dTY2FsZUZpZWxkLnZhbHVlO1xuICB9XG4gIHNldCBzaG93U2NhbGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNob3dTY2FsZUZpZWxkLnNldFZhbHVlKHZhbHVlLCB7IG9ubHlTZWxmOiB0cnVlIH0pO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBzaG93TGVnZW5kKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNob3dMZWdlbmRGaWVsZC52YWx1ZTtcbiAgfVxuICBzZXQgc2hvd0xlZ2VuZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuc2hvd0xlZ2VuZEZpZWxkLnNldFZhbHVlKHZhbHVlLCB7IG9ubHlTZWxmOiB0cnVlIH0pO1xuICB9XG5cbiAgQElucHV0KClcbiAgZ2V0IGRvWmlwRmlsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kb1ppcEZpbGVGaWVsZC52YWx1ZTtcbiAgfVxuICBzZXQgZG9aaXBGaWxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5kb1ppcEZpbGVGaWVsZC5zZXRWYWx1ZSh2YWx1ZSwgeyBvbmx5U2VsZjogdHJ1ZSB9KTtcbiAgfVxuXG4gIGdldCBvdXRwdXRGb3JtYXRGaWVsZCgpIHtcbiAgICByZXR1cm4gKHRoaXMuZm9ybS5jb250cm9scyBhcyBhbnkpLm91dHB1dEZvcm1hdCBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gIH1cblxuICBnZXQgcGFwZXJGb3JtYXRGaWVsZCgpIHtcbiAgICByZXR1cm4gKHRoaXMuZm9ybS5jb250cm9scyBhcyBhbnkpLnBhcGVyRm9ybWF0IGFzIFVudHlwZWRGb3JtQ29udHJvbDtcbiAgfVxuXG4gIGdldCBpbWFnZUZvcm1hdEZpZWxkKCkge1xuICAgIHJldHVybiAodGhpcy5mb3JtLmNvbnRyb2xzIGFzIGFueSkuaW1hZ2VGb3JtYXQgYXMgVW50eXBlZEZvcm1Db250cm9sO1xuICB9XG5cbiAgZ2V0IG9yaWVudGF0aW9uRmllbGQoKSB7XG4gICAgcmV0dXJuICh0aGlzLmZvcm0uY29udHJvbHMgYXMgYW55KS5vcmllbnRhdGlvbiBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gIH1cblxuICBnZXQgcmVzb2x1dGlvbkZpZWxkKCkge1xuICAgIHJldHVybiAodGhpcy5mb3JtLmNvbnRyb2xzIGFzIGFueSkucmVzb2x1dGlvbiBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gIH1cblxuICBnZXQgY29tbWVudEZpZWxkKCkge1xuICAgIHJldHVybiAodGhpcy5mb3JtLmNvbnRyb2xzIGFzIGFueSkuY29tbWVudCBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gIH1cblxuICBnZXQgc2hvd1Byb2plY3Rpb25GaWVsZCgpIHtcbiAgICByZXR1cm4gKHRoaXMuZm9ybS5jb250cm9scyBhcyBhbnkpLnNob3dQcm9qZWN0aW9uIGFzIFVudHlwZWRGb3JtQ29udHJvbDtcbiAgfVxuXG4gIGdldCBzaG93U2NhbGVGaWVsZCgpIHtcbiAgICByZXR1cm4gKHRoaXMuZm9ybS5jb250cm9scyBhcyBhbnkpLnNob3dTY2FsZSBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gIH1cblxuICBnZXQgc2hvd0xlZ2VuZEZpZWxkKCkge1xuICAgIHJldHVybiAodGhpcy5mb3JtLmNvbnRyb2xzIGFzIGFueSkuc2hvd0xlZ2VuZCBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gIH1cblxuICBnZXQgZG9aaXBGaWxlRmllbGQoKSB7XG4gICAgcmV0dXJuICh0aGlzLmZvcm0uY29udHJvbHMgYXMgYW55KS5kb1ppcEZpbGUgYXMgVW50eXBlZEZvcm1Db250cm9sO1xuICB9XG5cbiAgZ2V0IHRpdGxlRmllbGQoKSB7XG4gICAgcmV0dXJuICh0aGlzLmZvcm0uY29udHJvbHMgYXMgYW55KS50aXRsZSBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gIH1cblxuICBnZXQgc3VidGl0bGVGaWVsZCgpIHtcbiAgICByZXR1cm4gKHRoaXMuZm9ybS5jb250cm9scyBhcyBhbnkpLnN1YnRpdGxlIGFzIFVudHlwZWRGb3JtQ29udHJvbDtcbiAgfVxuXG4gIGdldCBsZWdlbmRQb3NpdGlvbkZpZWxkKCkge1xuICAgIHJldHVybiAodGhpcy5mb3JtLmNvbnRyb2xzIGFzIGFueSkubGVnZW5kUG9zaXRpb24gYXMgVW50eXBlZEZvcm1Db250cm9sO1xuICB9XG5cbiAgQE91dHB1dCgpIHN1Ym1pdDogRXZlbnRFbWl0dGVyPFByaW50T3B0aW9ucz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyKSB7XG4gICAgdGhpcy5mb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICB0aXRsZTogWycnLCBbXV0sXG4gICAgICBzdWJ0aXRsZTogWycnLCBbXV0sXG4gICAgICBjb21tZW50OiBbJycsIFtdXSxcbiAgICAgIG91dHB1dEZvcm1hdDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgcGFwZXJGb3JtYXQ6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgIGltYWdlRm9ybWF0OiBbICcnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgcmVzb2x1dGlvbjogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgb3JpZW50YXRpb246IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgIGxlZ2VuZFBvc2l0aW9uOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICBzaG93UHJvamVjdGlvbjogZmFsc2UsXG4gICAgICBzaG93U2NhbGU6IGZhbHNlLFxuICAgICAgc2hvd0xlZ2VuZDogZmFsc2UsXG4gICAgICBkb1ppcEZpbGU6IFt7aGlkZGVuOiB0aGlzLmlzUHJpbnRTZXJ2aWNlIH1dXG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmRvWmlwRmlsZUZpZWxkLnNldFZhbHVlKGZhbHNlKTtcbiAgfVxuXG4gIGhhbmRsZUZvcm1TdWJtaXQoZGF0YTogUHJpbnRPcHRpb25zLCBpc1ZhbGlkOiBib29sZWFuKSB7XG4gICAgZGF0YS5pc1ByaW50U2VydmljZSA9IHRoaXMuaXNQcmludFNlcnZpY2U7XG4gICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgIHRoaXMuc3VibWl0LmVtaXQoZGF0YSk7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlSW1hZ2VTYXZlUHJvcCgpIHtcbiAgICBpZiAodGhpcy5vdXRwdXRGb3JtYXRGaWVsZC52YWx1ZSA9PT0gJ0ltYWdlJykge1xuICAgICAgdGhpcy5pc1ByaW50U2VydmljZSA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzUHJpbnRTZXJ2aWNlID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cbiIsIjxmb3JtIGNsYXNzPVwiaWdvLWZvcm1cIiBbZm9ybUdyb3VwXT1cImZvcm1cIj5cbiAgPGRpdiBjbGFzcz1cImlnby1pbnB1dC1jb250YWluZXJcIj5cbiAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICA8aW5wdXRcbiAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidGl0bGVcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cInt7J2lnby5nZW8ucHJpbnRGb3JtLnRpdGxlJyB8IHRyYW5zbGF0ZX19XCI+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJpZ28taW5wdXQtY29udGFpbmVyXCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgPGlucHV0XG4gICAgICAgIG1hdElucHV0XG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cInN1YnRpdGxlXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eydpZ28uZ2VvLnByaW50Rm9ybS5zdWJ0aXRsZScgfCB0cmFuc2xhdGV9fVwiPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiaWdvLWlucHV0LWNvbnRhaW5lclwiPlxuICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgIDxpbnB1dFxuICAgICAgICBtYXRJbnB1dFxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjb21tZW50XCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eydpZ28uZ2VvLnByaW50Rm9ybS5jb21tZW50JyB8IHRyYW5zbGF0ZX19XCI+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImlnby1pbnB1dC1jb250YWluZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwicHJpbnQtc2xpZGUtdG9nZ2xlLWNvbnRhaW5lciBtYXQtdHlwb2dyYXBoeVwiPlxuICAgICAgPG1hdC1zbGlkZS10b2dnbGVcbiAgICAgICAgY2xhc3M9XCJwcmludC1vcHRpb25cIlxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzaG93UHJvamVjdGlvblwiXG4gICAgICAgIFtsYWJlbFBvc2l0aW9uXT1cIidiZWZvcmUnXCI+XG4gICAgICAgIHt7J2lnby5nZW8ucHJpbnRGb3JtLnNob3dQcm9qZWN0aW9uJyB8IHRyYW5zbGF0ZX19XG4gICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8bWF0LXNsaWRlLXRvZ2dsZVxuICAgICAgICBjbGFzcz1cInByaW50LW9wdGlvblwiXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNob3dTY2FsZVwiXG4gICAgICAgIFtsYWJlbFBvc2l0aW9uXT1cIidiZWZvcmUnXCI+XG4gICAgICAgIHt7J2lnby5nZW8ucHJpbnRGb3JtLnNob3dTY2FsZScgfCB0cmFuc2xhdGV9fVxuICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgPG1hdC1zbGlkZS10b2dnbGVcbiAgICAgICAgY2xhc3M9XCJwcmludC1vcHRpb25cIlxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJkb1ppcEZpbGVcIlxuICAgICAgICBbbGFiZWxQb3NpdGlvbl09XCInYmVmb3JlJ1wiXG4gICAgICAgIFtzdHlsZS5kaXNwbGF5XT1cImlzUHJpbnRTZXJ2aWNlID8gJ25vbmUnIDogJydcIj5cbiAgICAgICAge3snaWdvLmdlby5wcmludEZvcm0uZG9aaXBGaWxlJyB8IHRyYW5zbGF0ZX19XG4gICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJpZ28taW5wdXQtY29udGFpbmVyXCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibGVnZW5kUG9zaXRpb25cIlxuICAgICAgICBwbGFjZWhvbGRlcj1cInt7J2lnby5nZW8ucHJpbnRGb3JtLmxlZ2VuZFBvc2l0aW9uJyB8IHRyYW5zbGF0ZX19XCI+XG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBsZWdlbmRQb3NpdGlvbiBvZiBsZWdlbmRQb3NpdGlvbnMgfCBrZXl2YWx1ZSBcIiBbdmFsdWVdPVwibGVnZW5kUG9zaXRpb24ua2V5XCI+XG4gICAgICAgICAgICB7eydpZ28uZ2VvLnByaW50Rm9ybS5sZWdlbmRQb3NpdGlvbnMuJyArIGxlZ2VuZFBvc2l0aW9uLnZhbHVlIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgPC9tYXQtc2VsZWN0PlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJpZ28taW5wdXQtY29udGFpbmVyXCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgPG1hdC1zZWxlY3QgKHNlbGVjdGlvbkNoYW5nZSk9XCJ0b2dnbGVJbWFnZVNhdmVQcm9wKClcIlxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJvdXRwdXRGb3JtYXRcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cInt7J2lnby5nZW8ucHJpbnRGb3JtLm91dHB1dEZvcm1hdCcgfCB0cmFuc2xhdGV9fVwiPlxuICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3V0cHV0Rm9ybWF0IG9mIG91dHB1dEZvcm1hdHMgfCBrZXl2YWx1ZSBcIiBbdmFsdWVdPVwib3V0cHV0Rm9ybWF0LmtleVwiPlxuICAgICAgICAgICAge3tvdXRwdXRGb3JtYXQudmFsdWV9fVxuICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICA8L21hdC1zZWxlY3Q+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImlnby1pbnB1dC1jb250YWluZXJcIiBbc3R5bGUuZGlzcGxheV09XCJpc1ByaW50U2VydmljZSA/ICdibG9jaycgOiAnbm9uZSdcIj5cbiAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICA8bWF0LXNlbGVjdFxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwYXBlckZvcm1hdFwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwie3snaWdvLmdlby5wcmludEZvcm0ucGFwZXJGb3JtYXQnIHwgdHJhbnNsYXRlfX1cIj5cbiAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHBhcGVyRm9ybWF0IG9mIHBhcGVyRm9ybWF0cyB8IGtleXZhbHVlIFwiIFt2YWx1ZV09XCJwYXBlckZvcm1hdC5rZXlcIj5cbiAgICAgICAgICB7eygnaWdvLmdlby5wcmludEZvcm0ucGFwZXJGb3JtYXRzLicgKyBwYXBlckZvcm1hdC52YWx1ZSkgfCB0cmFuc2xhdGV9fVxuICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICA8L21hdC1zZWxlY3Q+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImlnby1pbnB1dC1jb250YWluZXJcIiBbc3R5bGUuZGlzcGxheV09XCJpc1ByaW50U2VydmljZSA/ICdub25lJyA6ICdibG9jaydcIj5cbiAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICA8bWF0LXNlbGVjdFxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJpbWFnZUZvcm1hdFwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwie3snaWdvLmdlby5wcmludEZvcm0uaW1hZ2VGb3JtYXQnIHwgdHJhbnNsYXRlfX1cIj5cbiAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGltYWdlRm9ybWF0IG9mIGltYWdlRm9ybWF0cyB8IGtleXZhbHVlIFwiIFt2YWx1ZV09XCJpbWFnZUZvcm1hdC5rZXlcIj5cbiAgICAgICAgICB7e2ltYWdlRm9ybWF0LnZhbHVlfX1cbiAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgPC9tYXQtc2VsZWN0PlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJpZ28taW5wdXQtY29udGFpbmVyXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPlxuICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cInJlc29sdXRpb25cIlxuICAgICAgICBwbGFjZWhvbGRlcj1cInt7J2lnby5nZW8ucHJpbnRGb3JtLnJlc29sdXRpb24nIHwgdHJhbnNsYXRlfX1cIj5cbiAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHJlc29sdXRpb24gb2YgcmVzb2x1dGlvbnMgfCBrZXl2YWx1ZSBcIiBbdmFsdWVdPVwicmVzb2x1dGlvbi5rZXlcIj5cbiAgICAgICAgICB7e3Jlc29sdXRpb24udmFsdWUgKyAnIFBQSSd9fVxuICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICA8L21hdC1zZWxlY3Q+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImlnby1pbnB1dC1jb250YWluZXJcIiBbc3R5bGUuZGlzcGxheV09XCJpc1ByaW50U2VydmljZSA/ICdibG9jaycgOiAnbm9uZSdcIj5cbiAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICA8bWF0LXNlbGVjdFxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJvcmllbnRhdGlvblwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwie3snaWdvLmdlby5wcmludEZvcm0ub3JpZW50YXRpb24nIHwgdHJhbnNsYXRlfX1cIj5cbiAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG9yaWVudGF0aW9uIG9mIG9yaWVudGF0aW9ucyB8IGtleXZhbHVlIFwiIFt2YWx1ZV09XCJvcmllbnRhdGlvbi5rZXlcIj5cbiAgICAgICAgICB7eygnaWdvLmdlby5wcmludEZvcm0uJyArIG9yaWVudGF0aW9uLnZhbHVlKSB8IHRyYW5zbGF0ZX19XG4gICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiaWdvLWZvcm0tYnV0dG9uLWdyb3VwIHByaW50LWJ1dHRvbi10b3AtcGFkZGluZ1wiPlxuICAgIDxidXR0b25cbiAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIFtkaXNhYmxlZF09XCIhZm9ybS52YWxpZCB8fCAoZGlzYWJsZWQkIHwgYXN5bmMpXCJcbiAgICAgIChjbGljayk9XCJoYW5kbGVGb3JtU3VibWl0KGZvcm0udmFsdWUsIGZvcm0udmFsaWQpXCI+XG4gICAgICB7eydpZ28uZ2VvLnByaW50Rm9ybS5zYXZlQnRuJyB8IHRyYW5zbGF0ZX19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuXG48L2Zvcm0+XG4iXX0=
514
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpbnQtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9wcmludC9wcmludC1mb3JtL3ByaW50LWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2VvL3NyYy9saWIvcHJpbnQvcHJpbnQtZm9ybS9wcmludC1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUlMLFVBQVUsRUFDWCxNQUFNLGdCQUFnQixDQUFDO0FBS3hCLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLGdCQUFnQixFQUNoQixlQUFlLEVBQ2Ysb0JBQW9CLEVBQ3BCLG1CQUFtQixFQUNwQixNQUFNLHNCQUFzQixDQUFDOzs7Ozs7Ozs7Ozs7OztJQ1h0QixpQ0FBZ0Q7SUFBQSxZQUUvQjs7O0lBQUEsaUJBQVk7O0lBRm1CLGVBRS9CO0lBRitCLDJKQUUvQjs7OztJQVNqQixpQ0FBbUQ7SUFBQSxZQUVsQzs7O0lBQUEsaUJBQVk7O0lBRnNCLGVBRWxDO0lBRmtDLDhKQUVsQzs7OztJQVNqQixpQ0FBa0Q7SUFBQSxZQUUzQjs7O0lBQUEsaUJBQVk7OztJQUZlLGVBRTNCO0lBRjJCLCtLQUUzQjs7O0lBa0NyQiw2QkFBOEU7SUFDNUUsWUFDRjs7SUFBQSwwQkFBZTs7O0lBRGIsZUFDRjtJQURFLHFIQUNGOzs7SUFFQSw2QkFBNkU7SUFDM0UsWUFFRjs7SUFBQSwwQkFBZTs7O0lBRmIsZUFFRjtJQUZFLGtMQUVGOzs7O0lBUkYsc0NBQW9HO0lBQ2xHLG1HQUVlO0lBRWYsbUdBR2U7SUFDakIsaUJBQWE7OztJQVQwRCw2Q0FBNEI7SUFDbEYsZUFBNkQ7SUFBN0Qsb0ZB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SztZQVdGLFdBQVc7a0JBRGQsS0FBSztZQVdGLFVBQVU7a0JBRGIsS0FBSztZQVdGLGNBQWM7a0JBRGpCLEtBQUs7WUFXRixLQUFLO2tCQURSLEtBQUs7WUFRRixRQUFRO2tCQURYLEtBQUs7WUFRRixPQUFPO2tCQURWLEtBQUs7WUFRRixjQUFjO2tCQURqQixLQUFLO1lBUUYsU0FBUztrQkFEWixLQUFLO1lBUUYsVUFBVTtrQkFEYixLQUFLO1lBU0YsU0FBUztrQkFEWixLQUFLO1lBNERJLE1BQU07a0JBQWYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBVbnR5cGVkRm9ybUdyb3VwLFxyXG4gIFVudHlwZWRGb3JtQnVpbGRlcixcclxuICBVbnR5cGVkRm9ybUNvbnRyb2wsXHJcbiAgVmFsaWRhdG9yc1xyXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQgeyBQcmludE9wdGlvbnMgfSBmcm9tICcuLi9zaGFyZWQvcHJpbnQuaW50ZXJmYWNlJztcclxuXHJcbmltcG9ydCB7XHJcbiAgUHJpbnRPdXRwdXRGb3JtYXQsXHJcbiAgUHJpbnRQYXBlckZvcm1hdCxcclxuICBQcmludE9yaWVudGF0aW9uLFxyXG4gIFByaW50UmVzb2x1dGlvbixcclxuICBQcmludFNhdmVJbWFnZUZvcm1hdCxcclxuICBQcmludExlZ2VuZFBvc2l0aW9uXHJcbn0gZnJvbSAnLi4vc2hhcmVkL3ByaW50LnR5cGUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpZ28tcHJpbnQtZm9ybScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3ByaW50LWZvcm0uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3ByaW50LWZvcm0uY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUHJpbnRGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBwdWJsaWMgZm9ybTogVW50eXBlZEZvcm1Hcm91cDtcclxuICBwdWJsaWMgb3V0cHV0Rm9ybWF0cyA9IFByaW50T3V0cHV0Rm9ybWF0O1xyXG4gIHB1YmxpYyBwYXBlckZvcm1hdHMgPSBQcmludFBhcGVyRm9ybWF0O1xyXG4gIHB1YmxpYyBvcmllbnRhdGlvbnMgPSBQcmludE9yaWVudGF0aW9uO1xyXG4gIHB1YmxpYyByZXNvbHV0aW9ucyA9IFByaW50UmVzb2x1dGlvbjtcclxuICBwdWJsaWMgaW1hZ2VGb3JtYXRzID0gUHJpbnRTYXZlSW1hZ2VGb3JtYXQ7XHJcbiAgcHVibGljIGxlZ2VuZFBvc2l0aW9ucyA9IFByaW50TGVnZW5kUG9zaXRpb247XHJcbiAgcHVibGljIGlzUHJpbnRTZXJ2aWNlID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KCkgZGlzYWJsZWQkOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj47XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IGltYWdlRm9ybWF0KCk6IFByaW50U2F2ZUltYWdlRm9ybWF0IHtcclxuICAgIHJldHVybiB0aGlzLmltYWdlRm9ybWF0RmllbGQudmFsdWU7XHJcbiAgfVxyXG4gIHNldCBpbWFnZUZvcm1hdCh2YWx1ZTogUHJpbnRTYXZlSW1hZ2VGb3JtYXQpIHtcclxuICAgIHRoaXMuaW1hZ2VGb3JtYXRGaWVsZC5zZXRWYWx1ZSh2YWx1ZSB8fCBQcmludFNhdmVJbWFnZUZvcm1hdC5KcGVnLCB7XHJcbiAgICAgIG9ubHlTZWxmOiB0cnVlXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IG91dHB1dEZvcm1hdCgpOiBQcmludE91dHB1dEZvcm1hdCB7XHJcbiAgICByZXR1cm4gdGhpcy5vdXRwdXRGb3JtYXRGaWVsZC52YWx1ZTtcclxuICB9XHJcbiAgc2V0IG91dHB1dEZvcm1hdCh2YWx1ZTogUHJpbnRPdXRwdXRGb3JtYXQpIHtcclxuICAgIHRoaXMub3V0cHV0Rm9ybWF0RmllbGQuc2V0VmFsdWUodmFsdWUgfHwgUHJpbnRPdXRwdXRGb3JtYXQuUGRmLCB7XHJcbiAgICAgIG9ubHlTZWxmOiB0cnVlXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IHBhcGVyRm9ybWF0KCk6IFByaW50UGFwZXJGb3JtYXQge1xyXG4gICAgcmV0dXJuIHRoaXMucGFwZXJGb3JtYXRGaWVsZC52YWx1ZTtcclxuICB9XHJcbiAgc2V0IHBhcGVyRm9ybWF0KHZhbHVlOiBQcmludFBhcGVyRm9ybWF0KSB7XHJcbiAgICB0aGlzLnBhcGVyRm9ybWF0RmllbGQuc2V0VmFsdWUodmFsdWUgfHwgUHJpbnRQYXBlckZvcm1hdC5MZXR0ZXIsIHtcclxuICAgICAgb25seVNlbGY6IHRydWVcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgb3JpZW50YXRpb24oKTogUHJpbnRPcmllbnRhdGlvbiB7XHJcbiAgICByZXR1cm4gdGhpcy5vcmllbnRhdGlvbkZpZWxkLnZhbHVlO1xyXG4gIH1cclxuICBzZXQgb3JpZW50YXRpb24odmFsdWU6IFByaW50T3JpZW50YXRpb24pIHtcclxuICAgIHRoaXMub3JpZW50YXRpb25GaWVsZC5zZXRWYWx1ZSh2YWx1ZSB8fCBQcmludE9yaWVudGF0aW9uLmxhbmRzY2FwZSwge1xyXG4gICAgICBvbmx5U2VsZjogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCByZXNvbHV0aW9uKCk6IFByaW50UmVzb2x1dGlvbiB7XHJcbiAgICByZXR1cm4gdGhpcy5yZXNvbHV0aW9uRmllbGQudmFsdWU7XHJcbiAgfVxyXG4gIHNldCByZXNvbHV0aW9uKHZhbHVlOiBQcmludFJlc29sdXRpb24pIHtcclxuICAgIHRoaXMucmVzb2x1dGlvbkZpZWxkLnNldFZhbHVlKHZhbHVlIHx8IFByaW50UmVzb2x1dGlvblsnOTYnXSwge1xyXG4gICAgICBvbmx5U2VsZjogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCBsZWdlbmRQb3NpdGlvbigpOiBQcmludExlZ2VuZFBvc2l0aW9uIHtcclxuICAgIHJldHVybiB0aGlzLmxlZ2VuZFBvc2l0aW9uRmllbGQudmFsdWU7XHJcbiAgfVxyXG4gIHNldCBsZWdlbmRQb3NpdGlvbih2YWx1ZTogUHJpbnRMZWdlbmRQb3NpdGlvbikge1xyXG4gICAgdGhpcy5sZWdlbmRQb3NpdGlvbkZpZWxkLnNldFZhbHVlKHZhbHVlIHx8IFByaW50TGVnZW5kUG9zaXRpb24ubm9uZSwge1xyXG4gICAgICBvbmx5U2VsZjogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCB0aXRsZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMudGl0bGVGaWVsZC52YWx1ZTtcclxuICB9XHJcbiAgc2V0IHRpdGxlKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMudGl0bGVGaWVsZC5zZXRWYWx1ZSh2YWx1ZSwgeyBvbmx5U2VsZjogdHJ1ZSB9KTtcclxuICB9XHJcbiAgQElucHV0KClcclxuICBnZXQgc3VidGl0bGUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnN1YnRpdGxlRmllbGQudmFsdWU7XHJcbiAgfVxyXG4gIHNldCBzdWJ0aXRsZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnN1YnRpdGxlRmllbGQuc2V0VmFsdWUodmFsdWUsIHsgb25seVNlbGY6IHRydWUgfSk7XHJcbiAgfVxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IGNvbW1lbnQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmNvbW1lbnRGaWVsZC52YWx1ZTtcclxuICB9XHJcbiAgc2V0IGNvbW1lbnQodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5jb21tZW50RmllbGQuc2V0VmFsdWUodmFsdWUsIHsgb25seVNlbGY6IHRydWUgfSk7XHJcbiAgfVxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IHNob3dQcm9qZWN0aW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2hvd1Byb2plY3Rpb25GaWVsZC52YWx1ZTtcclxuICB9XHJcbiAgc2V0IHNob3dQcm9qZWN0aW9uKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnNob3dQcm9qZWN0aW9uRmllbGQuc2V0VmFsdWUodmFsdWUsIHsgb25seVNlbGY6IHRydWUgfSk7XHJcbiAgfVxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IHNob3dTY2FsZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnNob3dTY2FsZUZpZWxkLnZhbHVlO1xyXG4gIH1cclxuICBzZXQgc2hvd1NjYWxlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnNob3dTY2FsZUZpZWxkLnNldFZhbHVlKHZhbHVlLCB7IG9ubHlTZWxmOiB0cnVlIH0pO1xyXG4gIH1cclxuICBASW5wdXQoKVxyXG4gIGdldCBzaG93TGVnZW5kKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2hvd0xlZ2VuZEZpZWxkLnZhbHVlO1xyXG4gIH1cclxuICBzZXQgc2hvd0xlZ2VuZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5zaG93TGVnZW5kRmllbGQuc2V0VmFsdWUodmFsdWUsIHsgb25seVNlbGY6IHRydWUgfSk7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCBkb1ppcEZpbGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5kb1ppcEZpbGVGaWVsZC52YWx1ZTtcclxuICB9XHJcbiAgc2V0IGRvWmlwRmlsZSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5kb1ppcEZpbGVGaWVsZC5zZXRWYWx1ZSh2YWx1ZSwgeyBvbmx5U2VsZjogdHJ1ZSB9KTtcclxuICB9XHJcblxyXG4gIGdldCBvdXRwdXRGb3JtYXRGaWVsZCgpIHtcclxuICAgIHJldHVybiAodGhpcy5mb3JtLmNvbnRyb2xzIGFzIGFueSkub3V0cHV0Rm9ybWF0IGFzIFVudHlwZWRGb3JtQ29udHJvbDtcclxuICB9XHJcblxyXG4gIGdldCBwYXBlckZvcm1hdEZpZWxkKCkge1xyXG4gICAgcmV0dXJuICh0aGlzLmZvcm0uY29udHJvbHMgYXMgYW55KS5wYXBlckZvcm1hdCBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XHJcbiAgfVxyXG5cclxuICBnZXQgaW1hZ2VGb3JtYXRGaWVsZCgpIHtcclxuICAgIHJldHVybiAodGhpcy5mb3JtLmNvbnRyb2xzIGFzIGFueSkuaW1hZ2VGb3JtYXQgYXMgVW50eXBlZEZvcm1Db250cm9sO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG9yaWVudGF0aW9uRmllbGQoKSB7XHJcbiAgICByZXR1cm4gKHRoaXMuZm9ybS5jb250cm9scyBhcyBhbnkpLm9yaWVudGF0aW9uIGFzIFVudHlwZWRGb3JtQ29udHJvbDtcclxuICB9XHJcblxyXG4gIGdldCByZXNvbHV0aW9uRmllbGQoKSB7XHJcbiAgICByZXR1cm4gKHRoaXMuZm9ybS5jb250cm9scyBhcyBhbnkpLnJlc29sdXRpb24gYXMgVW50eXBlZEZvcm1Db250cm9sO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNvbW1lbnRGaWVsZCgpIHtcclxuICAgIHJldHVybiAodGhpcy5mb3JtLmNvbnRyb2xzIGFzIGFueSkuY29tbWVudCBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XHJcbiAgfVxyXG5cclxuICBnZXQgc2hvd1Byb2plY3Rpb25GaWVsZCgpIHtcclxuICAgIHJldHVybiAodGhpcy5mb3JtLmNvbnRyb2xzIGFzIGFueSkuc2hvd1Byb2plY3Rpb24gYXMgVW50eXBlZEZvcm1Db250cm9sO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNob3dTY2FsZUZpZWxkKCkge1xyXG4gICAgcmV0dXJuICh0aGlzLmZvcm0uY29udHJvbHMgYXMgYW55KS5zaG93U2NhbGUgYXMgVW50eXBlZEZvcm1Db250cm9sO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNob3dMZWdlbmRGaWVsZCgpIHtcclxuICAgIHJldHVybiAodGhpcy5mb3JtLmNvbnRyb2xzIGFzIGFueSkuc2hvd0xlZ2VuZCBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XHJcbiAgfVxyXG5cclxuICBnZXQgZG9aaXBGaWxlRmllbGQoKSB7XHJcbiAgICByZXR1cm4gKHRoaXMuZm9ybS5jb250cm9scyBhcyBhbnkpLmRvWmlwRmlsZSBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XHJcbiAgfVxyXG5cclxuICBnZXQgdGl0bGVGaWVsZCgpIHtcclxuICAgIHJldHVybiAodGhpcy5mb3JtLmNvbnRyb2xzIGFzIGFueSkudGl0bGUgYXMgVW50eXBlZEZvcm1Db250cm9sO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHN1YnRpdGxlRmllbGQoKSB7XHJcbiAgICByZXR1cm4gKHRoaXMuZm9ybS5jb250cm9scyBhcyBhbnkpLnN1YnRpdGxlIGFzIFVudHlwZWRGb3JtQ29udHJvbDtcclxuICB9XHJcblxyXG4gIGdldCBsZWdlbmRQb3NpdGlvbkZpZWxkKCkge1xyXG4gICAgcmV0dXJuICh0aGlzLmZvcm0uY29udHJvbHMgYXMgYW55KS5sZWdlbmRQb3NpdGlvbiBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XHJcbiAgfVxyXG5cclxuICBAT3V0cHV0KCkgc3VibWl0OiBFdmVudEVtaXR0ZXI8UHJpbnRPcHRpb25zPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgbWF4TGVuZ3RoOiBudW1iZXIgPSAxODA7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcikge1xyXG4gICAgdGhpcy5mb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgIHRpdGxlOiBbJycsIFtWYWxpZGF0b3JzLm1pbkxlbmd0aCgwKSwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMTMwKV1dLFxyXG4gICAgICBzdWJ0aXRsZTogWycnLCBbVmFsaWRhdG9ycy5taW5MZW5ndGgoMCksIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDEyMCldXSxcclxuICAgICAgY29tbWVudDogWycnLCBbVmFsaWRhdG9ycy5taW5MZW5ndGgoMCksIFZhbGlkYXRvcnMubWF4TGVuZ3RoKHRoaXMubWF4TGVuZ3RoKV1dLFxyXG4gICAgICBvdXRwdXRGb3JtYXQ6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgcGFwZXJGb3JtYXQ6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgaW1hZ2VGb3JtYXQ6IFsgJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgIHJlc29sdXRpb246IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgb3JpZW50YXRpb246IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgbGVnZW5kUG9zaXRpb246IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgc2hvd1Byb2plY3Rpb246IGZhbHNlLFxyXG4gICAgICBzaG93U2NhbGU6IGZhbHNlLFxyXG4gICAgICBzaG93TGVnZW5kOiBmYWxzZSxcclxuICAgICAgZG9aaXBGaWxlOiBbe2hpZGRlbjogdGhpcy5pc1ByaW50U2VydmljZSB9XVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuZG9aaXBGaWxlRmllbGQuc2V0VmFsdWUoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlRm9ybVN1Ym1pdChkYXRhOiBQcmludE9wdGlvbnMsIGlzVmFsaWQ6IGJvb2xlYW4pIHtcclxuICAgIGRhdGEuaXNQcmludFNlcnZpY2UgPSB0aGlzLmlzUHJpbnRTZXJ2aWNlO1xyXG4gICAgaWYgKGlzVmFsaWQpIHtcclxuICAgICAgdGhpcy5zdWJtaXQuZW1pdChkYXRhKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRvZ2dsZUltYWdlU2F2ZVByb3AoKSB7XHJcbiAgICBpZiAodGhpcy5vdXRwdXRGb3JtYXRGaWVsZC52YWx1ZSA9PT0gJ0ltYWdlJykge1xyXG4gICAgICB0aGlzLmlzUHJpbnRTZXJ2aWNlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY29tbWVudEZpZWxkLmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgICB0aGlzLmNvbW1lbnRGaWVsZC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmlzUHJpbnRTZXJ2aWNlID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoYW5nZUNvbW1lbnRMZW5ndGgoKSB7XHJcbiAgICBzd2l0Y2ggKHRoaXMucGFwZXJGb3JtYXQpIHtcclxuICAgICAgY2FzZSBQcmludFBhcGVyRm9ybWF0LkEwOlxyXG4gICAgICAgIC8vIEEwLCBsYW5kc2NhcGUsIGxlbmd0aCA5MDAgfCBBMCwgcG9ydHJhaXQsIGNvbW1lbnQgbGVuZ3RoOiAgNjAwXHJcbiAgICAgICAgdGhpcy5tYXhMZW5ndGggPSAodGhpcy5vcmllbnRhdGlvbiA9PT0gUHJpbnRPcmllbnRhdGlvbi5sYW5kc2NhcGUpID8gOTAwIDogNjAwO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFByaW50UGFwZXJGb3JtYXQuQTE6XHJcbiAgICAgICAgLy8gQTEsIGxhbmRzY2FwZSwgbGVuZ3RoIDYwMCB8IEExLCBwb3J0cmFpdCwgbGVuZ3RoIDQwMDtcclxuICAgICAgICB0aGlzLm1heExlbmd0aCA9ICh0aGlzLm9yaWVudGF0aW9uID09PSBQcmludE9yaWVudGF0aW9uLmxhbmRzY2FwZSkgPyA2MDAgOiA0MDA7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgUHJpbnRQYXBlckZvcm1hdC5BMjpcclxuICAgICAgICAvLyBBMiwgbGFuZHNjYXBlLCBsZW5ndGggNDAwIHwgQTIsIHBvcnRyYWl0LCBsZW5ndGggMzAwO1xyXG4gICAgICAgIHRoaXMubWF4TGVuZ3RoID0gKHRoaXMub3JpZW50YXRpb24gPT09IFByaW50T3JpZW50YXRpb24ubGFuZHNjYXBlKSA/IDQwMCA6IDMwMDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBQcmludFBhcGVyRm9ybWF0LkEzOlxyXG4gICAgICAgIC8vIEEzLCBsYW5kc2NhcGUsIGxlbmd0aCAzMDAgfCBBMywgcG9ydHJhaXQsIGxlbmd0aCAyMDA7XHJcbiAgICAgICAgdGhpcy5tYXhMZW5ndGggPSAodGhpcy5vcmllbnRhdGlvbiA9PT0gUHJpbnRPcmllbnRhdGlvbi5sYW5kc2NhcGUpID8gMzAwIDogMjAwO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFByaW50UGFwZXJGb3JtYXQuQTQ6XHJcbiAgICAgICAgLy8gQTQsIGxhbmRzY2FwZSBsZW5ndGggMjAwIHwgQTQsIHBvcnRyYWl0IGxlbmd0aCAxMjA7XHJcbiAgICAgICAgdGhpcy5tYXhMZW5ndGggPSAodGhpcy5vcmllbnRhdGlvbiA9PT0gUHJpbnRPcmllbnRhdGlvbi5sYW5kc2NhcGUpID8gMjAwIDogMTAwO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFByaW50UGFwZXJGb3JtYXQuQTU6XHJcbiAgICAgICAgLy8gQTUsIGxhbmRzY2FwZSBsZW5ndGggMTIwIHwgQTUsIHBvcnRyYWl0IGxlbmd0aCA4MDtcclxuICAgICAgICB0aGlzLm1heExlbmd0aCA9ICh0aGlzLm9yaWVudGF0aW9uID09PSBQcmludE9yaWVudGF0aW9uLmxhbmRzY2FwZSkgPyAxMjAgOiA4MDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBQcmludFBhcGVyRm9ybWF0LkxldHRlcjpcclxuICAgICAgICAvLyBsZXR0cmUsIGxhbmRzY2FwZSwgMTgwIHwgbGV0dHJlLCBwb3J0cmFpdCwgMTQwXHJcbiAgICAgICAgdGhpcy5tYXhMZW5ndGggPSAodGhpcy5vcmllbnRhdGlvbiA9PT0gUHJpbnRPcmllbnRhdGlvbi5sYW5kc2NhcGUpID8gMTgwIDogMTQwO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIC8vIGxlZ2FsLCBsYW5kc2NhcGUsIDIwMCB8IGxlZ2FsLCBwb3J0cmFpdCwgMTQwXHJcbiAgICAgICAgdGhpcy5tYXhMZW5ndGggPSAodGhpcy5vcmllbnRhdGlvbiA9PT0gUHJpbnRPcmllbnRhdGlvbi5sYW5kc2NhcGUpID8gMjAwIDogMTQwO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY29tbWVudEZpZWxkLnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMubWF4TGVuZ3RoKHRoaXMubWF4TGVuZ3RoKV3igIspO1xyXG4gICAgdGhpcy5jb21tZW50RmllbGQudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gIH1cclxufVxyXG4iLCI8Zm9ybSBjbGFzcz1cImlnby1mb3JtXCIgW2Zvcm1Hcm91cF09XCJmb3JtXCI+XHJcbiAgPGRpdiBjbGFzcz1cImlnby1pbnB1dC1jb250YWluZXJcIj5cclxuICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgPGlucHV0XHJcbiAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ0aXRsZVwiXHJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eydpZ28uZ2VvLnByaW50Rm9ybS50aXRsZScgfCB0cmFuc2xhdGV9fVwiPlxyXG4gICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJ0aXRsZUZpZWxkLmVycm9ycz8ubWF4bGVuZ3RoXCI+e3snaWdvLmdlby5mb3JtVmFsaWRhdGlvbi5tYXhMZW5ndGgnIHwgdHJhbnNsYXRlOiB7IFxyXG4gICAgICAgICAgY29sdW1uOiAnaWdvLmdlby5wcmludEZvcm0udGl0bGUnIHwgdHJhbnNsYXRlLCBcclxuICAgICAgICAgIHZhbHVlOiAxMzAgfSB9fTwvbWF0LWVycm9yPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwiaWdvLWlucHV0LWNvbnRhaW5lclwiPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8aW5wdXRcclxuICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cInN1YnRpdGxlXCJcclxuICAgICAgICBwbGFjZWhvbGRlcj1cInt7J2lnby5nZW8ucHJpbnRGb3JtLnN1YnRpdGxlJyB8IHRyYW5zbGF0ZX19XCI+XHJcbiAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cInN1YnRpdGxlRmllbGQuZXJyb3JzPy5tYXhsZW5ndGhcIj57eydpZ28uZ2VvLmZvcm1WYWxpZGF0aW9uLm1heExlbmd0aCcgfCB0cmFuc2xhdGU6IHsgXHJcbiAgICAgICAgICBjb2x1bW46ICdpZ28uZ2VvLnByaW50Rm9ybS5zdWJ0aXRsZScgfCB0cmFuc2xhdGUsIFxyXG4gICAgICAgICAgdmFsdWU6IDEyMCB9IH19PC9tYXQtZXJyb3I+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJpZ28taW5wdXQtY29udGFpbmVyXCI+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxpbnB1dFxyXG4gICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY29tbWVudFwiXHJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eydpZ28uZ2VvLnByaW50Rm9ybS5jb21tZW50JyB8IHRyYW5zbGF0ZX19XCI+XHJcbiAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImNvbW1lbnRGaWVsZC5lcnJvcnM/Lm1heGxlbmd0aFwiPnt7J2lnby5nZW8uZm9ybVZhbGlkYXRpb24ubWF4TGVuZ3RoJyB8IHRyYW5zbGF0ZTogeyBcclxuICAgICAgICAgIGNvbHVtbjogJ2lnby5nZW8ucHJpbnRGb3JtLmNvbW1lbnQnIHwgdHJhbnNsYXRlLCBcclxuICAgICAgICAgIHZhbHVlOiBtYXhMZW5ndGggfSB9fTwvbWF0LWVycm9yPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImlnby1pbnB1dC1jb250YWluZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJwcmludC1zbGlkZS10b2dnbGUtY29udGFpbmVyIG1hdC10eXBvZ3JhcGh5XCI+XHJcbiAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlXHJcbiAgICAgICAgY2xhc3M9XCJwcmludC1vcHRpb25cIlxyXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNob3dQcm9qZWN0aW9uXCJcclxuICAgICAgICBbbGFiZWxQb3NpdGlvbl09XCInYmVmb3JlJ1wiPlxyXG4gICAgICAgIHt7J2lnby5nZW8ucHJpbnRGb3JtLnNob3dQcm9qZWN0aW9uJyB8IHRyYW5zbGF0ZX19XHJcbiAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgICAgPG1hdC1zbGlkZS10b2dnbGVcclxuICAgICAgICBjbGFzcz1cInByaW50LW9wdGlvblwiXHJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2hvd1NjYWxlXCJcclxuICAgICAgICBbbGFiZWxQb3NpdGlvbl09XCInYmVmb3JlJ1wiPlxyXG4gICAgICAgIHt7J2lnby5nZW8ucHJpbnRGb3JtLnNob3dTY2FsZScgfCB0cmFuc2xhdGV9fVxyXG4gICAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlXHJcbiAgICAgICAgY2xhc3M9XCJwcmludC1vcHRpb25cIlxyXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cImRvWmlwRmlsZVwiXHJcbiAgICAgICAgW2xhYmVsUG9zaXRpb25dPVwiJ2JlZm9yZSdcIlxyXG4gICAgICAgIFtzdHlsZS5kaXNwbGF5XT1cImlzUHJpbnRTZXJ2aWNlID8gJ25vbmUnIDogJydcIj5cclxuICAgICAgICB7eydpZ28uZ2VvLnByaW50Rm9ybS5kb1ppcEZpbGUnIHwgdHJhbnNsYXRlfX1cclxuICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJpZ28taW5wdXQtY29udGFpbmVyXCI+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxtYXQtc2VsZWN0XHJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibGVnZW5kUG9zaXRpb25cIlxyXG4gICAgICAgIHBsYWNlaG9sZGVyPVwie3snaWdvLmdlby5wcmludEZvcm0ubGVnZW5kUG9zaXRpb24nIHwgdHJhbnNsYXRlfX1cIj5cclxuICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgbGVnZW5kUG9zaXRpb24gb2YgbGVnZW5kUG9zaXRpb25zIHwga2V5dmFsdWUgXCIgW3ZhbHVlXT1cImxlZ2VuZFBvc2l0aW9uLmtleVwiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFbJ25ld3BhZ2UnLCAnbmV3aW1hZ2UnXS5pbmNsdWRlcyhsZWdlbmRQb3NpdGlvbi52YWx1ZSlcIj5cclxuICAgICAgICAgICAge3snaWdvLmdlby5wcmludEZvcm0ubGVnZW5kUG9zaXRpb25zLicgKyBsZWdlbmRQb3NpdGlvbi52YWx1ZSB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiWyduZXdwYWdlJywgJ25ld2ltYWdlJ10uaW5jbHVkZXMobGVnZW5kUG9zaXRpb24udmFsdWUpXCI+XHJcbiAgICAgICAgICAgIHt7ICgob3V0cHV0Rm9ybWF0ID09PSAnUGRmJykgPyAnaWdvLmdlby5wcmludEZvcm0ubGVnZW5kUG9zaXRpb25zLm5ld3BhZ2UnIDogXHJcbiAgICAgICAgICAgICdpZ28uZ2VvLnByaW50Rm9ybS5sZWdlbmRQb3NpdGlvbnMubmV3aW1hZ2UnKSB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L21hdC1vcHRpb24+XHJcblxyXG4gICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiaWdvLWlucHV0LWNvbnRhaW5lclwiPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8bWF0LXNlbGVjdCAoc2VsZWN0aW9uQ2hhbmdlKT1cInRvZ2dsZUltYWdlU2F2ZVByb3AoKVwiXHJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwib3V0cHV0Rm9ybWF0XCJcclxuICAgICAgICBwbGFjZWhvbGRlcj1cInt7J2lnby5nZW8ucHJpbnRGb3JtLm91dHB1dEZvcm1hdCcgfCB0cmFuc2xhdGV9fVwiPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBvdXRwdXRGb3JtYXQgb2Ygb3V0cHV0Rm9ybWF0cyB8IGtleXZhbHVlIFwiIFt2YWx1ZV09XCJvdXRwdXRGb3JtYXQua2V5XCI+XHJcbiAgICAgICAgICAgIHt7b3V0cHV0Rm9ybWF0LnZhbHVlfX1cclxuICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJpZ28taW5wdXQtY29udGFpbmVyXCIgW3N0eWxlLmRpc3BsYXldPVwiaXNQcmludFNlcnZpY2UgPyAnYmxvY2snIDogJ25vbmUnXCI+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxtYXQtc2VsZWN0IChzZWxlY3Rpb25DaGFuZ2UpPVwiY2hhbmdlQ29tbWVudExlbmd0aCgpXCJcclxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwYXBlckZvcm1hdFwiXHJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eydpZ28uZ2VvLnByaW50Rm9ybS5wYXBlckZvcm1hdCcgfCB0cmFuc2xhdGV9fVwiPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBwYXBlckZvcm1hdCBvZiBwYXBlckZvcm1hdHMgfCBrZXl2YWx1ZSBcIiBbdmFsdWVdPVwicGFwZXJGb3JtYXQua2V5XCI+XHJcbiAgICAgICAgICB7eygnaWdvLmdlby5wcmludEZvcm0ucGFwZXJGb3JtYXRzLicgKyBwYXBlckZvcm1hdC52YWx1ZSkgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImlnby1pbnB1dC1jb250YWluZXJcIiBbc3R5bGUuZGlzcGxheV09XCJpc1ByaW50U2VydmljZSA/ICdub25lJyA6ICdibG9jaydcIj5cclxuICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgPG1hdC1zZWxlY3RcclxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJpbWFnZUZvcm1hdFwiXHJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eydpZ28uZ2VvLnByaW50Rm9ybS5pbWFnZUZvcm1hdCcgfCB0cmFuc2xhdGV9fVwiPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBpbWFnZUZvcm1hdCBvZiBpbWFnZUZvcm1hdHMgfCBrZXl2YWx1ZSBcIiBbdmFsdWVdPVwiaW1hZ2VGb3JtYXQua2V5XCI+XHJcbiAgICAgICAgICB7e2ltYWdlRm9ybWF0LnZhbHVlfX1cclxuICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJpZ28taW5wdXQtY29udGFpbmVyXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8bWF0LXNlbGVjdFxyXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cInJlc29sdXRpb25cIlxyXG4gICAgICAgIHBsYWNlaG9sZGVyPVwie3snaWdvLmdlby5wcmludEZvcm0ucmVzb2x1dGlvbicgfCB0cmFuc2xhdGV9fVwiPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCByZXNvbHV0aW9uIG9mIHJlc29sdXRpb25zIHwga2V5dmFsdWUgXCIgW3ZhbHVlXT1cInJlc29sdXRpb24ua2V5XCI+XHJcbiAgICAgICAgICB7e3Jlc29sdXRpb24udmFsdWUgKyAnIFBQSSd9fVxyXG4gICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImlnby1pbnB1dC1jb250YWluZXJcIiBbc3R5bGUuZGlzcGxheV09XCJpc1ByaW50U2VydmljZSA/ICdibG9jaycgOiAnbm9uZSdcIj5cclxuICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgPG1hdC1zZWxlY3QgKHNlbGVjdGlvbkNoYW5nZSk9XCJjaGFuZ2VDb21tZW50TGVuZ3RoKClcIlxyXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm9yaWVudGF0aW9uXCJcclxuICAgICAgICBwbGFjZWhvbGRlcj1cInt7J2lnby5nZW8ucHJpbnRGb3JtLm9yaWVudGF0aW9uJyB8IHRyYW5zbGF0ZX19XCI+XHJcbiAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG9yaWVudGF0aW9uIG9mIG9yaWVudGF0aW9ucyB8IGtleXZhbHVlIFwiIFt2YWx1ZV09XCJvcmllbnRhdGlvbi5rZXlcIj5cclxuICAgICAgICAgIHt7KCdpZ28uZ2VvLnByaW50Rm9ybS4nICsgb3JpZW50YXRpb24udmFsdWUpIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJpZ28tZm9ybS1idXR0b24tZ3JvdXAgcHJpbnQtYnV0dG9uLXRvcC1wYWRkaW5nXCI+XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiIWZvcm0udmFsaWQgfHwgKGRpc2FibGVkJCB8IGFzeW5jKVwiXHJcbiAgICAgIChjbGljayk9XCJoYW5kbGVGb3JtU3VibWl0KGZvcm0udmFsdWUsIGZvcm0udmFsaWQpXCI+XHJcbiAgICAgIHt7J2lnby5nZW8ucHJpbnRGb3JtLnNhdmVCdG4nIHwgdHJhbnNsYXRlfX1cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG5cclxuPC9mb3JtPlxyXG4iXX0=