@igo2/geo 17.0.0-next.5 → 17.0.0-next.7

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 (347) 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/esm2022/lib/catalog/catalog-browser/catalog-browser-group.component.mjs +8 -6
  7. package/esm2022/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs +9 -8
  8. package/esm2022/lib/catalog/catalog-browser/catalog-browser.component.mjs +3 -2
  9. package/esm2022/lib/catalog/catalog-library/add-catalog-dialog.component.mjs +4 -4
  10. package/esm2022/lib/catalog/catalog-library/catalog-library-item.component.mjs +6 -6
  11. package/esm2022/lib/catalog/catalog-library/catalog-library.component.mjs +36 -14
  12. package/esm2022/lib/catalog/catalog-library/catalog-library.module.mjs +5 -1
  13. package/esm2022/lib/catalog/catalog-library/index.mjs +2 -7
  14. package/esm2022/lib/catalog/catalog.module.mjs +13 -6
  15. package/esm2022/lib/catalog/index.mjs +2 -7
  16. package/esm2022/lib/catalog/shared/catalog.interface.mjs +1 -1
  17. package/esm2022/lib/catalog/shared/index.mjs +1 -1
  18. package/esm2022/lib/datasource/index.mjs +1 -1
  19. package/esm2022/lib/datasource/shared/datasources/arcgisrest-datasource.mjs +1 -1
  20. package/esm2022/lib/datasource/shared/datasources/cluster-datasource.interface.mjs +1 -1
  21. package/esm2022/lib/datasource/shared/datasources/datasource.mjs +1 -1
  22. package/esm2022/lib/datasource/shared/datasources/feature-datasource.interface.mjs +1 -1
  23. package/esm2022/lib/datasource/shared/datasources/feature-datasource.mjs +1 -1
  24. package/esm2022/lib/datasource/shared/datasources/index.mjs +1 -1
  25. package/esm2022/lib/datasource/shared/datasources/websocket-datasource.mjs +1 -1
  26. package/esm2022/lib/datasource/shared/datasources/wfs-datasource.interface.mjs +1 -1
  27. package/esm2022/lib/datasource/shared/datasources/wfs-datasource.mjs +1 -1
  28. package/esm2022/lib/datasource/shared/datasources/wms-datasource.interface.mjs +1 -1
  29. package/esm2022/lib/directions/directions-buttons/directions-buttons.component.mjs +5 -5
  30. package/esm2022/lib/directions/directions-buttons/index.mjs +1 -1
  31. package/esm2022/lib/directions/directions-inputs/directions-inputs.component.mjs +5 -5
  32. package/esm2022/lib/directions/directions-inputs/index.mjs +1 -1
  33. package/esm2022/lib/directions/directions-results/directions-results.component.mjs +5 -5
  34. package/esm2022/lib/directions/directions-results/index.mjs +1 -1
  35. package/esm2022/lib/directions/directions-sources/directions-source.interface.mjs +5 -2
  36. package/esm2022/lib/directions/directions-sources/directions-source.mjs +1 -1
  37. package/esm2022/lib/directions/directions-sources/directions-source.provider.mjs +8 -1
  38. package/esm2022/lib/directions/directions-sources/index.mjs +1 -1
  39. package/esm2022/lib/directions/directions-sources/osrm-directions-source.mjs +67 -36
  40. package/esm2022/lib/directions/directions.component.mjs +72 -18
  41. package/esm2022/lib/directions/directions.module.mjs +4 -10
  42. package/esm2022/lib/directions/directions.provider.mjs +16 -0
  43. package/esm2022/lib/directions/index.mjs +2 -1
  44. package/esm2022/lib/directions/shared/directions-source.service.mjs +1 -1
  45. package/esm2022/lib/directions/shared/directions.enum.mjs +1 -1
  46. package/esm2022/lib/directions/shared/directions.interface.mjs +1 -1
  47. package/esm2022/lib/directions/shared/directions.service.mjs +11 -19
  48. package/esm2022/lib/directions/shared/directions.utils.mjs +22 -22
  49. package/esm2022/lib/directions/shared/index.mjs +1 -1
  50. package/esm2022/lib/directions/shared/store.mjs +2 -2
  51. package/esm2022/lib/download/download-button/download-button.component.mjs +5 -5
  52. package/esm2022/lib/download/download-button/index.mjs +1 -1
  53. package/esm2022/lib/download/index.mjs +1 -1
  54. package/esm2022/lib/download/shared/download.interface.mjs +1 -1
  55. package/esm2022/lib/download/shared/index.mjs +1 -1
  56. package/esm2022/lib/draw/draw/draw-layer-popup.component.mjs +4 -4
  57. package/esm2022/lib/draw/draw/draw-popup.component.mjs +4 -4
  58. package/esm2022/lib/draw/draw/draw-shorcuts.component.mjs +8 -5
  59. package/esm2022/lib/draw/draw/draw.component.mjs +7 -7
  60. package/esm2022/lib/draw/index.mjs +1 -1
  61. package/esm2022/lib/environment/environment.interface.mjs +1 -1
  62. package/esm2022/lib/feature/feature-details/feature-details.component.mjs +7 -6
  63. package/esm2022/lib/feature/feature-details/feature-details.module.mjs +10 -4
  64. package/esm2022/lib/feature/feature-details/index.mjs +2 -7
  65. package/esm2022/lib/feature/feature-form/feature-form.component.mjs +3 -3
  66. package/esm2022/lib/feature/feature.module.mjs +13 -6
  67. package/esm2022/lib/feature/index.mjs +2 -7
  68. package/esm2022/lib/feature/shared/feature.enums.mjs +1 -1
  69. package/esm2022/lib/feature/shared/feature.interfaces.mjs +1 -1
  70. package/esm2022/lib/feature/shared/feature.utils.mjs +2 -2
  71. package/esm2022/lib/feature/shared/store.mjs +2 -2
  72. package/esm2022/lib/feature/shared/strategies/geo-properties.mjs +2 -2
  73. package/esm2022/lib/feature/shared/strategies/in-map-extent.mjs +2 -2
  74. package/esm2022/lib/feature/shared/strategies/in-map-resolution.mjs +2 -2
  75. package/esm2022/lib/feature/shared/strategies/loading-layer.mjs +2 -2
  76. package/esm2022/lib/feature/shared/strategies/loading.mjs +2 -2
  77. package/esm2022/lib/feature/shared/strategies/search.mjs +2 -2
  78. package/esm2022/lib/feature/shared/strategies/selection.mjs +2 -2
  79. package/esm2022/lib/filter/filter.module.mjs +4 -4
  80. package/esm2022/lib/filter/index.mjs +2 -36
  81. package/esm2022/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +6 -6
  82. package/esm2022/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +5 -5
  83. package/esm2022/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +7 -7
  84. package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.mjs +7 -7
  85. package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +19 -21
  86. package/esm2022/lib/filter/ogc-filterable-form/ogc-filterable-form.component.mjs +2 -2
  87. package/esm2022/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +6 -6
  88. package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs +5 -5
  89. package/esm2022/lib/filter/shared/ogc-filter.interface.mjs +1 -1
  90. package/esm2022/lib/filter/shared/ogc-filter.mjs +46 -3
  91. package/esm2022/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +6 -6
  92. package/esm2022/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs +5 -5
  93. package/esm2022/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +6 -6
  94. package/esm2022/lib/filter/time-filter-button/time-filter-button.component.mjs +6 -6
  95. package/esm2022/lib/filter/time-filter-form/time-filter-form.component.mjs +10 -10
  96. package/esm2022/lib/filter/time-filter-item/time-filter-item.component.mjs +6 -6
  97. package/esm2022/lib/filter/time-filter-list/time-filter-list.component.mjs +2 -2
  98. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs +1 -1
  99. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.component.mjs +6 -6
  100. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.module.mjs +5 -1
  101. package/esm2022/lib/geometry/geometry-form-field/index.mjs +3 -8
  102. package/esm2022/lib/geometry/shared/controls/draw.mjs +1 -1
  103. package/esm2022/lib/geometry/shared/controls/index.mjs +1 -1
  104. package/esm2022/lib/geometry/shared/controls/slice.mjs +1 -1
  105. package/esm2022/lib/geometry/shared/geometry.interfaces.mjs +1 -1
  106. package/esm2022/lib/geometry/shared/index.mjs +1 -1
  107. package/esm2022/lib/import-export/export-button/export-button.component.mjs +5 -5
  108. package/esm2022/lib/import-export/export-button/index.mjs +1 -1
  109. package/esm2022/lib/import-export/import-export/import-export.component.mjs +8 -6
  110. package/esm2022/lib/import-export/import-export/index.mjs +1 -1
  111. package/esm2022/lib/import-export/import-export.module.mjs +6 -1
  112. package/esm2022/lib/import-export/index.mjs +2 -9
  113. package/esm2022/lib/import-export/shared/drop-geo-file.directive.mjs +4 -3
  114. package/esm2022/lib/import-export/shared/export.errors.mjs +1 -1
  115. package/esm2022/lib/import-export/shared/export.service.mjs +8 -2
  116. package/esm2022/lib/import-export/shared/export.utils.mjs +2 -2
  117. package/esm2022/lib/import-export/shared/import.utils.mjs +1 -1
  118. package/esm2022/lib/import-export/shared/index.mjs +1 -1
  119. package/esm2022/lib/layer/index.mjs +2 -19
  120. package/esm2022/lib/layer/layer-item/layer-item.component.mjs +5 -5
  121. package/esm2022/lib/layer/layer-legend/layer-legend.component.mjs +8 -6
  122. package/esm2022/lib/layer/layer-legend-list/layer-legend-list.component.mjs +5 -5
  123. package/esm2022/lib/layer/layer-list/layer-list.component.mjs +26 -19
  124. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.component.mjs +6 -6
  125. package/esm2022/lib/layer/layer.module.mjs +12 -1
  126. package/esm2022/lib/layer/shared/layers/index.mjs +1 -1
  127. package/esm2022/lib/layer/shared/layers/vector-layer.interface.mjs +1 -1
  128. package/esm2022/lib/layer/shared/layers/vector-layer.mjs +1 -1
  129. package/esm2022/lib/layer/track-feature-button/track-feature-button.component.mjs +5 -5
  130. package/esm2022/lib/map/baselayers-switcher/baselayers-switcher.component.mjs +5 -5
  131. package/esm2022/lib/map/geolocate-button/geolocate-button.component.mjs +9 -9
  132. package/esm2022/lib/map/home-extent-button/home-extent-button.component.mjs +4 -4
  133. package/esm2022/lib/map/index.mjs +1 -32
  134. package/esm2022/lib/map/map.module.mjs +34 -34
  135. package/esm2022/lib/map/menu-button/menu-button.component.mjs +5 -5
  136. package/esm2022/lib/map/offline-button/offline-button.component.mjs +5 -5
  137. package/esm2022/lib/map/rotation-button/rotation-button.component.mjs +5 -5
  138. package/esm2022/lib/map/shared/hover-feature.directive.mjs +2 -2
  139. package/esm2022/lib/map/wake-lock-button/wake-lock-button.component.mjs +8 -8
  140. package/esm2022/lib/map/zoom-button/zoom-button.component.mjs +4 -4
  141. package/esm2022/lib/measure/measurer/measurer-dialog.component.mjs +4 -4
  142. package/esm2022/lib/measure/measurer/measurer-item.component.mjs +4 -4
  143. package/esm2022/lib/measure/measurer/measurer.component.mjs +6 -6
  144. package/esm2022/lib/measure/shared/index.mjs +1 -1
  145. package/esm2022/lib/metadata/index.mjs +2 -6
  146. package/esm2022/lib/metadata/metadata-button/index.mjs +1 -1
  147. package/esm2022/lib/metadata/metadata-button/metadata-button.component.mjs +7 -7
  148. package/esm2022/lib/metadata/metadata.module.mjs +5 -1
  149. package/esm2022/lib/metadata/shared/index.mjs +1 -1
  150. package/esm2022/lib/metadata/shared/metadata.service.mjs +1 -1
  151. package/esm2022/lib/offline/geoDB/index.mjs +1 -1
  152. package/esm2022/lib/offline/shared/index.mjs +1 -1
  153. package/esm2022/lib/overlay/index.mjs +1 -1
  154. package/esm2022/lib/print/index.mjs +1 -1
  155. package/esm2022/lib/print/print-form/index.mjs +1 -1
  156. package/esm2022/lib/print/print-form/print-form.component.mjs +4 -4
  157. package/esm2022/lib/print/shared/index.mjs +1 -1
  158. package/esm2022/lib/print/shared/print.service.mjs +85 -76
  159. package/esm2022/lib/query/index.mjs +1 -1
  160. package/esm2022/lib/query/shared/index.mjs +2 -1
  161. package/esm2022/lib/query/shared/query.directive.mjs +1 -1
  162. package/esm2022/lib/query/shared/query.enums.mjs +1 -1
  163. package/esm2022/lib/query/shared/query.interfaces.mjs +1 -1
  164. package/esm2022/lib/search/index.mjs +2 -13
  165. package/esm2022/lib/search/search-bar/search-bar.component.mjs +9 -6
  166. package/esm2022/lib/search/search-results/index.mjs +2 -7
  167. package/esm2022/lib/search/search-results/save-feature-dialog.component.mjs +5 -5
  168. package/esm2022/lib/search/search-results/search-results-add-button.component.mjs +10 -8
  169. package/esm2022/lib/search/search-results/search-results-item.component.mjs +5 -4
  170. package/esm2022/lib/search/search-results/search-results.component.mjs +7 -5
  171. package/esm2022/lib/search/search-results/search-results.directive.mjs +7 -0
  172. package/esm2022/lib/search/search-selector/search-selector.component.mjs +5 -5
  173. package/esm2022/lib/search/search-settings/search-settings.component.mjs +5 -5
  174. package/esm2022/lib/search/search.module.mjs +15 -1
  175. package/esm2022/lib/search/shared/index.mjs +2 -1
  176. package/esm2022/lib/search/shared/search-pointer-summary.directive.mjs +2 -2
  177. package/esm2022/lib/search/shared/search-source.service.mjs +1 -1
  178. package/esm2022/lib/search/shared/search.interfaces.mjs +1 -1
  179. package/esm2022/lib/search/shared/search.provider.mjs +20 -0
  180. package/esm2022/lib/search/shared/search.service.mjs +29 -10
  181. package/esm2022/lib/search/shared/search.utils.mjs +2 -2
  182. package/esm2022/lib/search/shared/sources/cadastre.mjs +2 -2
  183. package/esm2022/lib/search/shared/sources/cadastre.providers.mjs +8 -1
  184. package/esm2022/lib/search/shared/sources/coordinates.mjs +2 -2
  185. package/esm2022/lib/search/shared/sources/coordinates.providers.mjs +11 -1
  186. package/esm2022/lib/search/shared/sources/icherche-icons.mjs +32 -0
  187. package/esm2022/lib/search/shared/sources/icherche.mjs +9 -4
  188. package/esm2022/lib/search/shared/sources/icherche.providers.mjs +20 -1
  189. package/esm2022/lib/search/shared/sources/ilayer.providers.mjs +11 -1
  190. package/esm2022/lib/search/shared/sources/nominatim.interfaces.mjs +1 -1
  191. package/esm2022/lib/search/shared/sources/nominatim.mjs +2 -2
  192. package/esm2022/lib/search/shared/sources/nominatim.providers.mjs +8 -1
  193. package/esm2022/lib/search/shared/sources/source.interfaces.mjs +13 -2
  194. package/esm2022/lib/search/shared/sources/source.mjs +1 -1
  195. package/esm2022/lib/search/shared/sources/storedqueries.mjs +3 -3
  196. package/esm2022/lib/search/shared/sources/storedqueries.providers.mjs +14 -1
  197. package/esm2022/lib/search/shared/sources/workspace.mjs +2 -2
  198. package/esm2022/lib/search/shared/sources/workspace.providers.mjs +8 -1
  199. package/esm2022/lib/style/shared/feature/feature-style.mjs +3 -2
  200. package/esm2022/lib/style/shared/vector/conversion.utils.mjs +1 -1
  201. package/esm2022/lib/style/style-modal/drawing/style-modal-drawing.component.mjs +6 -6
  202. package/esm2022/lib/style/style-modal/layer/style-modal-layer.component.mjs +6 -6
  203. package/esm2022/lib/style/style-modal/layer-button/style-modal-layer-button.component.mjs +4 -4
  204. package/esm2022/lib/toast/index.mjs +1 -1
  205. package/esm2022/lib/toast/toast.component.mjs +6 -4
  206. package/esm2022/lib/wkt/index.mjs +1 -1
  207. package/esm2022/lib/wkt/shared/index.mjs +1 -1
  208. package/esm2022/lib/workspace/index.mjs +1 -1
  209. package/esm2022/lib/workspace/shared/edition-workspace.mjs +2 -2
  210. package/esm2022/lib/workspace/shared/edition-workspace.service.mjs +5 -4
  211. package/esm2022/lib/workspace/shared/feature-workspace.mjs +2 -2
  212. package/esm2022/lib/workspace/shared/feature-workspace.service.mjs +3 -2
  213. package/esm2022/lib/workspace/shared/index.mjs +1 -1
  214. package/esm2022/lib/workspace/shared/wfs-workspace.mjs +2 -2
  215. package/esm2022/lib/workspace/shared/wfs-workspace.service.mjs +3 -2
  216. package/esm2022/lib/workspace/shared/wms-workspace.service.mjs +3 -2
  217. package/esm2022/lib/workspace/shared/workspace.utils.mjs +3 -3
  218. package/esm2022/lib/workspace/widgets/index.mjs +1 -1
  219. package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs +1 -1
  220. package/esm2022/lib/workspace/widgets/widgets.mjs +2 -2
  221. package/esm2022/lib/workspace/workspace-selector/workspace-selector.directive.mjs +3 -3
  222. package/esm2022/lib/workspace/workspace-updator/workspace-updator.directive.mjs +1 -1
  223. package/esm2022/lib/workspace/workspace.module.mjs +2 -2
  224. package/fesm2022/igo2-geo.mjs +30424 -30117
  225. package/fesm2022/igo2-geo.mjs.map +1 -1
  226. package/lib/catalog/catalog-browser/catalog-browser-group.component.d.ts +2 -2
  227. package/lib/catalog/catalog-browser/catalog-browser-layer.component.d.ts +1 -1
  228. package/lib/catalog/catalog-browser/catalog-browser.component.d.ts +1 -1
  229. package/lib/catalog/catalog-library/add-catalog-dialog.component.d.ts +1 -1
  230. package/lib/catalog/catalog-library/catalog-library.component.d.ts +7 -2
  231. package/lib/catalog/catalog-library/catalog-library.module.d.ts +3 -0
  232. package/lib/catalog/catalog-library/index.d.ts +1 -3
  233. package/lib/catalog/catalog.module.d.ts +6 -3
  234. package/lib/catalog/index.d.ts +1 -2
  235. package/lib/catalog/shared/catalog.interface.d.ts +1 -1
  236. package/lib/datasource/shared/datasources/arcgisrest-datasource.d.ts +2 -3
  237. package/lib/datasource/shared/datasources/cluster-datasource.interface.d.ts +2 -3
  238. package/lib/datasource/shared/datasources/datasource.d.ts +1 -2
  239. package/lib/datasource/shared/datasources/feature-datasource.d.ts +2 -3
  240. package/lib/datasource/shared/datasources/feature-datasource.interface.d.ts +2 -3
  241. package/lib/datasource/shared/datasources/websocket-datasource.d.ts +1 -2
  242. package/lib/datasource/shared/datasources/wfs-datasource.d.ts +2 -3
  243. package/lib/datasource/shared/datasources/wfs-datasource.interface.d.ts +1 -2
  244. package/lib/datasource/shared/datasources/wms-datasource.interface.d.ts +1 -2
  245. package/lib/directions/directions-sources/directions-source.d.ts +7 -3
  246. package/lib/directions/directions-sources/directions-source.interface.d.ts +19 -6
  247. package/lib/directions/directions-sources/directions-source.provider.d.ts +2 -0
  248. package/lib/directions/directions-sources/osrm-directions-source.d.ts +19 -10
  249. package/lib/directions/directions.component.d.ts +15 -3
  250. package/lib/directions/directions.module.d.ts +5 -6
  251. package/lib/directions/directions.provider.d.ts +3 -0
  252. package/lib/directions/index.d.ts +1 -0
  253. package/lib/directions/shared/directions.interface.d.ts +2 -9
  254. package/lib/directions/shared/directions.service.d.ts +3 -2
  255. package/lib/directions/shared/directions.utils.d.ts +1 -1
  256. package/lib/directions/shared/store.d.ts +1 -1
  257. package/lib/draw/draw/draw-shorcuts.component.d.ts +2 -0
  258. package/lib/draw/draw/draw.component.d.ts +1 -1
  259. package/lib/environment/environment.interface.d.ts +2 -1
  260. package/lib/feature/feature-details/feature-details.component.d.ts +1 -1
  261. package/lib/feature/feature-details/feature-details.module.d.ts +3 -0
  262. package/lib/feature/feature-details/index.d.ts +1 -3
  263. package/lib/feature/feature-form/feature-form.component.d.ts +1 -2
  264. package/lib/feature/feature.module.d.ts +6 -3
  265. package/lib/feature/index.d.ts +1 -2
  266. package/lib/feature/shared/feature.interfaces.d.ts +1 -1
  267. package/lib/feature/shared/feature.utils.d.ts +1 -1
  268. package/lib/feature/shared/store.d.ts +1 -1
  269. package/lib/feature/shared/strategies/geo-properties.d.ts +1 -1
  270. package/lib/feature/shared/strategies/in-map-extent.d.ts +1 -1
  271. package/lib/feature/shared/strategies/in-map-resolution.d.ts +1 -1
  272. package/lib/feature/shared/strategies/loading-layer.d.ts +1 -1
  273. package/lib/feature/shared/strategies/loading.d.ts +1 -1
  274. package/lib/feature/shared/strategies/search.d.ts +1 -1
  275. package/lib/feature/shared/strategies/selection.d.ts +1 -1
  276. package/lib/filter/filter.module.d.ts +19 -0
  277. package/lib/filter/index.d.ts +1 -16
  278. package/lib/filter/ogc-filter-selection/ogc-filter-selection.component.d.ts +1 -1
  279. package/lib/filter/ogc-filter-time/ogc-filter-time.component.d.ts +3 -3
  280. package/lib/filter/shared/ogc-filter.d.ts +7 -0
  281. package/lib/filter/shared/ogc-filter.interface.d.ts +2 -3
  282. package/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.d.ts +1 -1
  283. package/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.d.ts +1 -1
  284. package/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.d.ts +1 -1
  285. package/lib/geometry/geometry-form-field/geometry-form-field-input.component.d.ts +1 -2
  286. package/lib/geometry/geometry-form-field/geometry-form-field.module.d.ts +3 -0
  287. package/lib/geometry/geometry-form-field/index.d.ts +2 -4
  288. package/lib/geometry/shared/controls/draw.d.ts +4 -4
  289. package/lib/geometry/shared/controls/slice.d.ts +4 -4
  290. package/lib/geometry/shared/geometry.interfaces.d.ts +1 -1
  291. package/lib/import-export/import-export/import-export.component.d.ts +2 -2
  292. package/lib/import-export/import-export.module.d.ts +4 -0
  293. package/lib/import-export/index.d.ts +1 -4
  294. package/lib/import-export/shared/drop-geo-file.directive.d.ts +2 -1
  295. package/lib/import-export/shared/export.utils.d.ts +1 -1
  296. package/lib/import-export/shared/import.utils.d.ts +1 -1
  297. package/lib/layer/index.d.ts +1 -8
  298. package/lib/layer/layer-list/layer-list.component.d.ts +4 -1
  299. package/lib/layer/layer.module.d.ts +10 -0
  300. package/lib/layer/shared/layers/vector-layer.d.ts +3 -4
  301. package/lib/layer/shared/layers/vector-layer.interface.d.ts +1 -2
  302. package/lib/map/index.d.ts +0 -14
  303. package/lib/map/map.module.d.ts +32 -15
  304. package/lib/measure/measurer/measurer.component.d.ts +1 -1
  305. package/lib/metadata/index.d.ts +1 -2
  306. package/lib/metadata/metadata.module.d.ts +2 -0
  307. package/lib/print/shared/print.service.d.ts +11 -7
  308. package/lib/query/shared/index.d.ts +1 -0
  309. package/lib/query/shared/query.interfaces.d.ts +1 -2
  310. package/lib/search/index.d.ts +1 -5
  311. package/lib/search/search-bar/search-bar.component.d.ts +2 -1
  312. package/lib/search/search-results/index.d.ts +1 -3
  313. package/lib/search/search-results/search-results-add-button.component.d.ts +2 -2
  314. package/lib/search/search-results/search-results.component.d.ts +1 -1
  315. package/lib/search/search-results/search-results.directive.d.ts +3 -0
  316. package/lib/search/search.module.d.ts +8 -0
  317. package/lib/search/shared/index.d.ts +1 -0
  318. package/lib/search/shared/search-source.service.d.ts +1 -1
  319. package/lib/search/shared/search.interfaces.d.ts +12 -10
  320. package/lib/search/shared/search.provider.d.ts +8 -0
  321. package/lib/search/shared/search.service.d.ts +7 -2
  322. package/lib/search/shared/sources/cadastre.providers.d.ts +2 -0
  323. package/lib/search/shared/sources/coordinates.providers.d.ts +2 -0
  324. package/lib/search/shared/sources/icherche-icons.d.ts +7 -0
  325. package/lib/search/shared/sources/icherche.providers.d.ts +6 -12
  326. package/lib/search/shared/sources/ilayer.providers.d.ts +2 -0
  327. package/lib/search/shared/sources/nominatim.providers.d.ts +2 -0
  328. package/lib/search/shared/sources/source.d.ts +1 -1
  329. package/lib/search/shared/sources/source.interfaces.d.ts +16 -0
  330. package/lib/search/shared/sources/storedqueries.providers.d.ts +3 -0
  331. package/lib/search/shared/sources/workspace.providers.d.ts +2 -0
  332. package/lib/style/shared/vector/conversion.utils.d.ts +2 -3
  333. package/lib/toast/toast.component.d.ts +1 -1
  334. package/lib/workspace/shared/edition-workspace.d.ts +1 -1
  335. package/lib/workspace/shared/edition-workspace.service.d.ts +2 -1
  336. package/lib/workspace/shared/feature-workspace.d.ts +1 -1
  337. package/lib/workspace/shared/wfs-workspace.d.ts +1 -1
  338. package/lib/workspace/shared/workspace.utils.d.ts +2 -1
  339. package/lib/workspace/widgets/ogc-filter/ogc-filter.component.d.ts +2 -1
  340. package/lib/workspace/widgets/widgets.d.ts +1 -1
  341. package/lib/workspace/workspace-selector/workspace-selector.directive.d.ts +1 -1
  342. package/lib/workspace/workspace-updator/workspace-updator.directive.d.ts +1 -1
  343. package/lib/workspace/workspace.module.d.ts +1 -1
  344. package/locale/en.geo.json +6 -1
  345. package/locale/fr.geo.json +6 -1
  346. package/package.json +6 -6
  347. package/style/style.css +2 -1
@@ -9,7 +9,7 @@ import { MatIconModule } from '@angular/material/icon';
9
9
  import { MatInputModule } from '@angular/material/input';
10
10
  import { MatSelectModule } from '@angular/material/select';
11
11
  import { MatTooltipModule } from '@angular/material/tooltip';
12
- import { TranslateModule } from '@ngx-translate/core';
12
+ import { IgoLanguageModule } from '@igo2/core/language';
13
13
  import { BehaviorSubject, of } from 'rxjs';
14
14
  import { OgcFilterWriter } from '../../filter/shared/ogc-filter';
15
15
  import { OgcFilterOperator } from '../../filter/shared/ogc-filter.enum';
@@ -288,7 +288,7 @@ export class OgcFilterFormComponent {
288
288
  this.ogcFilterOperator.During.toLowerCase());
289
289
  }
290
290
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: OgcFilterFormComponent, deps: [{ token: i1.WktService }], target: i0.ɵɵFactoryTarget.Component });
291
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: OgcFilterFormComponent, isStandalone: true, selector: "igo-ogc-filter-form", inputs: { refreshFilters: "refreshFilters", datasource: "datasource", map: "map", currentFilter: "currentFilter", floatLabel: "floatLabel" }, ngImport: i0, template: "<div class=\"ogc-filter-form-container\">\n <mat-checkbox\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.filter.toggleFilterState' | translate\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleFilterState($event)\"\n [checked]=\"currentFilter.active\"\n >\n </mat-checkbox>\n\n <mat-form-field\n [ngClass]=\"{\n logical:\n activeFilters.indexOf(currentFilter) !== 0 &&\n currentFilter.active === true,\n logicalHidden:\n activeFilters.indexOf(currentFilter) === 0 ||\n currentFilter.active !== true\n }\"\n >\n <mat-select\n [disabled]=\"!currentFilter.active\"\n [value]=\"currentFilter.parentLogical\"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n currentFilter.parentLogical\n ? ('igo.geo.operators.tooltip.' + currentFilter.parentLogical\n | translate)\n : ''\n \"\n (selectionChange)=\"changeLogical($event.value)\"\n >\n <mat-option\n [value]=\"ogcFilterOperator.And\"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.operators.tooltip.And' | translate\"\n >\n {{ 'igo.geo.operators.And' | translate }}\n </mat-option>\n <mat-option\n [value]=\"ogcFilterOperator.Or\"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.operators.tooltip.Or' | translate\"\n >\n {{ 'igo.geo.operators.Or' | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field\n class=\"field\"\n *ngIf=\"\n (currentFilterIsSpatial$ | async) === false &&\n (fields$ | async) &&\n (fields$ | async).length > 0 &&\n (fields$ | async)[0].name !== ''\n \"\n (mouseenter)=\"inputClearable = 'selectField'\"\n (mouseleave)=\"inputClearable = undefined\"\n [floatLabel]=\"floatLabel\"\n >\n <input\n matInput\n [placeholder]=\"'igo.geo.sourceFields.selectField' | translate\"\n [disabled]=\"!currentFilter.active\"\n [matAutocomplete]=\"autoCompleteField\"\n [value]=\"(selectedField$ | async) ? (selectedField$ | async).alias : ''\"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n (selectedField$ | async)\n ? (selectedField$ | async).alias\n : ('igo.geo.sourceFields.selectField' | translate)\n \"\n (input)=\"updateFieldsList($any($event.target).value)\"\n />\n <mat-autocomplete\n #autoCompleteField=\"matAutocomplete\"\n (optionSelected)=\"changeField($event.option.id)\"\n >\n <mat-option\n *ngFor=\"let field of filteredFields$ | async\"\n matTooltipShowDelay=\"500\"\n [value]=\"field.alias\"\n [id]=\"field.name\"\n [matTooltip]=\"field.alias\"\n >\n {{ field.alias }}\n </mat-option>\n </mat-autocomplete>\n <button\n *ngIf=\"\n currentFilter.propertyName &&\n inputClearable === 'selectField' &&\n currentFilter.active\n \"\n matSuffix\n mat-icon-button\n aria-label=\"Clear\"\n [disabled]=\"!currentFilter.active\"\n (click)=\"clearSelectedField()\"\n >\n <mat-icon svgIcon=\"close\"></mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field\n [ngClass]=\"{\n operator: (currentFilterIsSpatial$ | async) === false,\n dualInput: (currentFilterIsSpatial$ | async)\n }\"\n [floatLabel]=\"floatLabel\"\n >\n <mat-select\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n currentFilter.operator\n ? ('igo.geo.operators.tooltip.' + currentFilter.operator | translate)\n : ('igo.geo.filter.selectOperator' | translate)\n \"\n [disabled]=\"!currentFilter.active\"\n [value]=\"currentFilter.operator\"\n (selectionChange)=\"changeOperator($event.value)\"\n >\n <mat-option\n *ngFor=\"let operator of ogcFilterOperators$ | async | keyvalue\"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [value]=\"operator.key\"\n [matTooltip]=\"'igo.geo.operators.tooltip.' + operator.key | translate\"\n >\n {{ 'igo.geo.operators.' + operator.key | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field\n class=\"spatialSelector\"\n *ngIf=\"currentFilterIsSpatial$ | async\"\n >\n <mat-select\n [disabled]=\"!currentFilter.active\"\n [value]=\"currentFilter.igoSpatialSelector\"\n (selectionChange)=\"changeSpatialSelector($event.value)\"\n >\n <mat-option\n *ngFor=\"let igoSpatialSelector of igoSpatialSelectors\"\n [value]=\"igoSpatialSelector.type\"\n >\n {{ 'igo.geo.spatialSelector.' + igoSpatialSelector.type | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field\n class=\"singleInput\"\n *ngIf=\"['expression', 'pattern'].indexOf(detectProperty()) !== -1\"\n (mouseenter)=\"inputClearable = 'selectProperty'\"\n (mouseleave)=\"inputClearable = undefined\"\n [floatLabel]=\"floatLabel\"\n >\n <input\n matInput\n [placeholder]=\"'igo.geo.filter.placeholder' | translate\"\n [disabled]=\"!currentFilter.active\"\n [matAutocomplete]=\"autoCompleteValues\"\n [value]=\"\n detectProperty() === 'expression'\n ? currentFilter.expression\n : currentFilter.pattern\n \"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n detectProperty() === 'expression'\n ? currentFilter.expression || ''\n : currentFilter.pattern || ''\n \"\n (input)=\"updateValuesList($any($event.target).value)\"\n />\n <mat-autocomplete\n #autoCompleteValues=\"matAutocomplete\"\n (optionSelected)=\"changeProperty($event.option.value)\"\n >\n <mat-option\n *ngFor=\"let value of filteredValues$ | async\"\n matTooltipShowDelay=\"500\"\n [value]=\"value\"\n [matTooltip]=\"value\"\n >\n {{ value }}\n </mat-option>\n </mat-autocomplete>\n <button\n *ngIf=\"\n isClearable() &&\n inputClearable === 'selectProperty' &&\n currentFilter.active\n \"\n matSuffix\n mat-icon-button\n aria-label=\"Clear\"\n [disabled]=\"!currentFilter.active\"\n (click)=\"clearProperty()\"\n >\n <mat-icon svgIcon=\"close\"></mat-icon>\n </button>\n </mat-form-field>\n\n <div class=\"igo-layer-button-group\">\n <button\n mat-icon-button\n collapsibleButton\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.filter.removeFilter' | translate\"\n color=\"warn\"\n (click)=\"deleteFilter()\"\n >\n <mat-icon svgIcon=\"delete\"></mat-icon>\n </button>\n </div>\n\n <mat-form-field\n class=\"snrc\"\n *ngIf=\"\n (currentFilterIsSpatial$ | async) &&\n currentFilter.igoSpatialSelector === 'snrc'\n \"\n (mouseenter)=\"inputClearable = 'selectSNRC'\"\n (mouseleave)=\"inputClearable = undefined\"\n [floatLabel]=\"floatLabel\"\n >\n <input\n matInput\n [placeholder]=\"'igo.geo.filter.placeholderSnrc' | translate\"\n [value]=\"currentFilter.igoSNRC\"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"currentFilter.igoSNRC ? currentFilter.igoSNRC : ''\"\n (input)=\"changeSNRC($any($event.target).value)\"\n />\n <button\n *ngIf=\"currentFilter.igoSNRC\"\n matSuffix\n mat-icon-button\n aria-label=\"Clear\"\n [disabled]=\"\n !currentFilter.active &&\n inputClearable === 'selectSNRC' &&\n currentFilter.active\n \"\n (click)=\"currentFilter.igoSNRC = ''\"\n >\n <mat-icon svgIcon=\"close\"></mat-icon>\n </button>\n </mat-form-field>\n\n <ng-container\n *ngIf=\"\n (currentFilterIsSpatial$ | async) &&\n currentFilter.igoSpatialSelector === 'fixedExtent'\n \"\n >\n <button\n [disabled]=\"!currentFilter.active\"\n *ngIf=\"currentFilter.igoSpatialSelector === 'fixedExtent'\"\n matSuffix\n mat-icon-button\n [disabled]=\"!currentFilter.active\"\n (click)=\"changeMapExtentGeometry()\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.spatialSelector.btnSetExtent' | translate\"\n >\n <mat-icon svgIcon=\"arrow-expand-all\"></mat-icon>\n </button>\n </ng-container>\n</div>\n\n<div class=\"ogc-filter-form-container\">\n <mat-form-field\n class=\"dualInput\"\n *ngIf=\"\n !isTemporalOperator() &&\n ['lowerBoundary', 'begin'].indexOf(detectProperty(1)) !== -1\n \"\n (mouseenter)=\"inputClearable = 'selectProperty1'\"\n (mouseleave)=\"inputClearable = undefined\"\n [floatLabel]=\"floatLabel\"\n >\n <input\n matInput\n [placeholder]=\"'igo.geo.filter.placeholder' | translate\"\n [disabled]=\"!currentFilter.active\"\n [matAutocomplete]=\"autoDualValueOperator1\"\n type=\"number\"\n [value]=\"\n detectProperty(1) === 'lowerBoundary'\n ? currentFilter.lowerBoundary\n : currentFilter.begin\n \"\n (input)=\"updateValuesList($any($event.target).value, 1)\"\n />\n <mat-autocomplete\n #autoDualValueOperator1=\"matAutocomplete\"\n (optionSelected)=\"changeNumericProperty($event.option.value, 1)\"\n >\n <mat-option\n *ngFor=\"let value of filteredValues$ | async\"\n matTooltipShowDelay=\"500\"\n [value]=\"value\"\n [matTooltip]=\"value\"\n >\n {{ value }}\n </mat-option>\n </mat-autocomplete>\n <button\n *ngIf=\"\n isClearable(1) &&\n inputClearable === 'selectProperty1' &&\n currentFilter.active\n \"\n matSuffix\n mat-icon-button\n aria-label=\"Clear\"\n [disabled]=\"!currentFilter.active\"\n (click)=\"clearProperty(1)\"\n >\n <mat-icon svgIcon=\"close\"></mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field\n class=\"dualInput\"\n *ngIf=\"\n !isTemporalOperator() &&\n ['upperBoundary', 'end'].indexOf(detectProperty(2)) !== -1\n \"\n (mouseenter)=\"inputClearable = 'selectProperty2'\"\n (mouseleave)=\"inputClearable = undefined\"\n [floatLabel]=\"floatLabel\"\n >\n <input\n matInput\n [placeholder]=\"'igo.geo.filter.placeholder' | translate\"\n [disabled]=\"!currentFilter.active\"\n [matAutocomplete]=\"autoDualValueOperator2\"\n type=\"number\"\n [value]=\"\n detectProperty(2) === 'upperBoundary'\n ? currentFilter.upperBoundary\n : currentFilter.end\n \"\n (input)=\"updateValuesList($any($event.target).value, 2)\"\n />\n <mat-autocomplete\n #autoDualValueOperator2=\"matAutocomplete\"\n (optionSelected)=\"changeNumericProperty($event.option.value, 2)\"\n >\n <mat-option\n *ngFor=\"let value of filteredValues$ | async\"\n matTooltipShowDelay=\"500\"\n [value]=\"value\"\n [matTooltip]=\"value\"\n >\n {{ value }}\n </mat-option>\n </mat-autocomplete>\n <button\n *ngIf=\"\n isClearable(2) &&\n inputClearable === 'selectProperty2' &&\n currentFilter.active\n \"\n matSuffix\n mat-icon-button\n aria-label=\"Clear\"\n [disabled]=\"!currentFilter.active\"\n (click)=\"clearProperty(2)\"\n >\n <mat-icon svgIcon=\"close\"></mat-icon>\n </button>\n </mat-form-field>\n</div>\n\n<igo-ogc-filter-time\n *ngIf=\"isTemporalOperator()\"\n [datasource]=\"datasource\"\n [currentFilter]=\"currentFilter\"\n (changeProperty)=\"changeProperty($event.value, $event.pos)\"\n>\n</igo-ogc-filter-time>\n", styles: [":host{width:100%;padding:5px 10px}:host ::ng-deep .mat-mdc-form-field .mat-icon svg{width:1em;height:1em;color:#d3d3d3}:host .ogc-filter-form-container{display:flex}:host .mat-mdc-form-field{width:100%}:host .mat-mdc-select-arrow{visibility:hidden}:host .mat-mdc-slide-toggle{margin-top:10px}:host .logical{flex-flow:column nowrap;width:100%;max-width:60px;margin-right:5px}:host .logicalHidden{width:0px;visibility:hidden;max-width:0px}:host ::ng-deep .logical .mat-mdc-select-arrow{visibility:hidden}:host ::ng-deep .logicalHidden .mat-mdc-select-arrow{visibility:hidden}:host .field{width:150px;margin-right:5px}:host ::ng-deep .field .mat-mdc-select-arrow{visibility:hidden}:host .operator{width:150px;margin-right:5px;text-align:center}:host ::ng-deep .operator .mat-mdc-select-arrow{visibility:hidden}:host .spatialSelector{width:110px;margin-right:5px}:host ::ng-deep .spatialSelector .mat-mdc-select-arrow{visibility:hidden}:host .singleInput{width:150px;margin-right:5px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){:host .singleInput{width:27%}}:host .snrc{width:110px;margin-right:5px}:host ::ng-deep .singleInput .mat-mdc-select-arrow{visibility:hidden}:host .dualInput{width:150px;margin-right:5px}:host ::ng-deep .dualInput .mat-mdc-select-arrow{visibility:hidden}:host .igo-layer-button-group{display:flex;padding-top:5px}:host .container{display:flex}\n"], dependencies: [{ kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i2.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i5.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i8.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i8.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i9.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: OgcFilterTimeComponent, selector: "igo-ogc-filter-time", inputs: ["datasource", "currentFilter"], outputs: ["changeProperty"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i11.TranslatePipe, name: "translate" }] });
291
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: OgcFilterFormComponent, isStandalone: true, selector: "igo-ogc-filter-form", inputs: { refreshFilters: "refreshFilters", datasource: "datasource", map: "map", currentFilter: "currentFilter", floatLabel: "floatLabel" }, ngImport: i0, template: "<div class=\"ogc-filter-form-container\">\n <mat-checkbox\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.filter.toggleFilterState' | translate\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleFilterState($event)\"\n [checked]=\"currentFilter.active\"\n >\n </mat-checkbox>\n\n <mat-form-field\n [ngClass]=\"{\n logical:\n activeFilters.indexOf(currentFilter) !== 0 &&\n currentFilter.active === true,\n logicalHidden:\n activeFilters.indexOf(currentFilter) === 0 ||\n currentFilter.active !== true\n }\"\n >\n <mat-select\n [disabled]=\"!currentFilter.active\"\n [value]=\"currentFilter.parentLogical\"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n currentFilter.parentLogical\n ? ('igo.geo.operators.tooltip.' + currentFilter.parentLogical\n | translate)\n : ''\n \"\n (selectionChange)=\"changeLogical($event.value)\"\n >\n <mat-option\n [value]=\"ogcFilterOperator.And\"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.operators.tooltip.And' | translate\"\n >\n {{ 'igo.geo.operators.And' | translate }}\n </mat-option>\n <mat-option\n [value]=\"ogcFilterOperator.Or\"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.operators.tooltip.Or' | translate\"\n >\n {{ 'igo.geo.operators.Or' | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field\n class=\"field\"\n *ngIf=\"\n (currentFilterIsSpatial$ | async) === false &&\n (fields$ | async) &&\n (fields$ | async).length > 0 &&\n (fields$ | async)[0].name !== ''\n \"\n (mouseenter)=\"inputClearable = 'selectField'\"\n (mouseleave)=\"inputClearable = undefined\"\n [floatLabel]=\"floatLabel\"\n >\n <input\n matInput\n [placeholder]=\"'igo.geo.sourceFields.selectField' | translate\"\n [disabled]=\"!currentFilter.active\"\n [matAutocomplete]=\"autoCompleteField\"\n [value]=\"(selectedField$ | async) ? (selectedField$ | async).alias : ''\"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n (selectedField$ | async)\n ? (selectedField$ | async).alias\n : ('igo.geo.sourceFields.selectField' | translate)\n \"\n (input)=\"updateFieldsList($any($event.target).value)\"\n />\n <mat-autocomplete\n #autoCompleteField=\"matAutocomplete\"\n (optionSelected)=\"changeField($event.option.id)\"\n >\n <mat-option\n *ngFor=\"let field of filteredFields$ | async\"\n matTooltipShowDelay=\"500\"\n [value]=\"field.alias\"\n [id]=\"field.name\"\n [matTooltip]=\"field.alias\"\n >\n {{ field.alias }}\n </mat-option>\n </mat-autocomplete>\n <button\n *ngIf=\"\n currentFilter.propertyName &&\n inputClearable === 'selectField' &&\n currentFilter.active\n \"\n matSuffix\n mat-icon-button\n aria-label=\"Clear\"\n [disabled]=\"!currentFilter.active\"\n (click)=\"clearSelectedField()\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field\n [ngClass]=\"{\n operator: (currentFilterIsSpatial$ | async) === false,\n dualInput: (currentFilterIsSpatial$ | async)\n }\"\n [floatLabel]=\"floatLabel\"\n >\n <mat-select\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n currentFilter.operator\n ? ('igo.geo.operators.tooltip.' + currentFilter.operator | translate)\n : ('igo.geo.filter.selectOperator' | translate)\n \"\n [disabled]=\"!currentFilter.active\"\n [value]=\"currentFilter.operator\"\n (selectionChange)=\"changeOperator($event.value)\"\n >\n <mat-option\n *ngFor=\"let operator of ogcFilterOperators$ | async | keyvalue\"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [value]=\"operator.key\"\n [matTooltip]=\"'igo.geo.operators.tooltip.' + operator.key | translate\"\n >\n {{ 'igo.geo.operators.' + operator.key | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field\n class=\"spatialSelector\"\n *ngIf=\"currentFilterIsSpatial$ | async\"\n >\n <mat-select\n [disabled]=\"!currentFilter.active\"\n [value]=\"currentFilter.igoSpatialSelector\"\n (selectionChange)=\"changeSpatialSelector($event.value)\"\n >\n <mat-option\n *ngFor=\"let igoSpatialSelector of igoSpatialSelectors\"\n [value]=\"igoSpatialSelector.type\"\n >\n {{ 'igo.geo.spatialSelector.' + igoSpatialSelector.type | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field\n class=\"singleInput\"\n *ngIf=\"['expression', 'pattern'].indexOf(detectProperty()) !== -1\"\n (mouseenter)=\"inputClearable = 'selectProperty'\"\n (mouseleave)=\"inputClearable = undefined\"\n [floatLabel]=\"floatLabel\"\n >\n <input\n matInput\n [placeholder]=\"'igo.geo.filter.placeholder' | translate\"\n [disabled]=\"!currentFilter.active\"\n [matAutocomplete]=\"autoCompleteValues\"\n [value]=\"\n detectProperty() === 'expression'\n ? currentFilter.expression\n : currentFilter.pattern\n \"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n detectProperty() === 'expression'\n ? currentFilter.expression || ''\n : currentFilter.pattern || ''\n \"\n (input)=\"updateValuesList($any($event.target).value)\"\n />\n <mat-autocomplete\n #autoCompleteValues=\"matAutocomplete\"\n (optionSelected)=\"changeProperty($event.option.value)\"\n >\n <mat-option\n *ngFor=\"let value of filteredValues$ | async\"\n matTooltipShowDelay=\"500\"\n [value]=\"value\"\n [matTooltip]=\"value\"\n >\n {{ value }}\n </mat-option>\n </mat-autocomplete>\n <button\n *ngIf=\"\n isClearable() &&\n inputClearable === 'selectProperty' &&\n currentFilter.active\n \"\n matSuffix\n mat-icon-button\n aria-label=\"Clear\"\n [disabled]=\"!currentFilter.active\"\n (click)=\"clearProperty()\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <div class=\"igo-layer-button-group\">\n <button\n mat-icon-button\n collapsibleButton\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.filter.removeFilter' | translate\"\n color=\"warn\"\n (click)=\"deleteFilter()\"\n >\n <mat-icon>delete</mat-icon>\n </button>\n </div>\n\n <mat-form-field\n class=\"snrc\"\n *ngIf=\"\n (currentFilterIsSpatial$ | async) &&\n currentFilter.igoSpatialSelector === 'snrc'\n \"\n (mouseenter)=\"inputClearable = 'selectSNRC'\"\n (mouseleave)=\"inputClearable = undefined\"\n [floatLabel]=\"floatLabel\"\n >\n <input\n matInput\n [placeholder]=\"'igo.geo.filter.placeholderSnrc' | translate\"\n [value]=\"currentFilter.igoSNRC\"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"currentFilter.igoSNRC ? currentFilter.igoSNRC : ''\"\n (input)=\"changeSNRC($any($event.target).value)\"\n />\n <button\n *ngIf=\"currentFilter.igoSNRC\"\n matSuffix\n mat-icon-button\n aria-label=\"Clear\"\n [disabled]=\"\n !currentFilter.active &&\n inputClearable === 'selectSNRC' &&\n currentFilter.active\n \"\n (click)=\"currentFilter.igoSNRC = ''\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <ng-container\n *ngIf=\"\n (currentFilterIsSpatial$ | async) &&\n currentFilter.igoSpatialSelector === 'fixedExtent'\n \"\n >\n <button\n [disabled]=\"!currentFilter.active\"\n *ngIf=\"currentFilter.igoSpatialSelector === 'fixedExtent'\"\n matSuffix\n mat-icon-button\n [disabled]=\"!currentFilter.active\"\n (click)=\"changeMapExtentGeometry()\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.spatialSelector.btnSetExtent' | translate\"\n >\n <mat-icon>zoom_out_map</mat-icon>\n </button>\n </ng-container>\n</div>\n\n<div class=\"ogc-filter-form-container\">\n <mat-form-field\n class=\"dualInput\"\n *ngIf=\"\n !isTemporalOperator() &&\n ['lowerBoundary', 'begin'].indexOf(detectProperty(1)) !== -1\n \"\n (mouseenter)=\"inputClearable = 'selectProperty1'\"\n (mouseleave)=\"inputClearable = undefined\"\n [floatLabel]=\"floatLabel\"\n >\n <input\n matInput\n [placeholder]=\"'igo.geo.filter.placeholder' | translate\"\n [disabled]=\"!currentFilter.active\"\n [matAutocomplete]=\"autoDualValueOperator1\"\n type=\"number\"\n [value]=\"\n detectProperty(1) === 'lowerBoundary'\n ? currentFilter.lowerBoundary\n : currentFilter.begin\n \"\n (input)=\"updateValuesList($any($event.target).value, 1)\"\n />\n <mat-autocomplete\n #autoDualValueOperator1=\"matAutocomplete\"\n (optionSelected)=\"changeNumericProperty($event.option.value, 1)\"\n >\n <mat-option\n *ngFor=\"let value of filteredValues$ | async\"\n matTooltipShowDelay=\"500\"\n [value]=\"value\"\n [matTooltip]=\"value\"\n >\n {{ value }}\n </mat-option>\n </mat-autocomplete>\n <button\n *ngIf=\"\n isClearable(1) &&\n inputClearable === 'selectProperty1' &&\n currentFilter.active\n \"\n matSuffix\n mat-icon-button\n aria-label=\"Clear\"\n [disabled]=\"!currentFilter.active\"\n (click)=\"clearProperty(1)\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field\n class=\"dualInput\"\n *ngIf=\"\n !isTemporalOperator() &&\n ['upperBoundary', 'end'].indexOf(detectProperty(2)) !== -1\n \"\n (mouseenter)=\"inputClearable = 'selectProperty2'\"\n (mouseleave)=\"inputClearable = undefined\"\n [floatLabel]=\"floatLabel\"\n >\n <input\n matInput\n [placeholder]=\"'igo.geo.filter.placeholder' | translate\"\n [disabled]=\"!currentFilter.active\"\n [matAutocomplete]=\"autoDualValueOperator2\"\n type=\"number\"\n [value]=\"\n detectProperty(2) === 'upperBoundary'\n ? currentFilter.upperBoundary\n : currentFilter.end\n \"\n (input)=\"updateValuesList($any($event.target).value, 2)\"\n />\n <mat-autocomplete\n #autoDualValueOperator2=\"matAutocomplete\"\n (optionSelected)=\"changeNumericProperty($event.option.value, 2)\"\n >\n <mat-option\n *ngFor=\"let value of filteredValues$ | async\"\n matTooltipShowDelay=\"500\"\n [value]=\"value\"\n [matTooltip]=\"value\"\n >\n {{ value }}\n </mat-option>\n </mat-autocomplete>\n <button\n *ngIf=\"\n isClearable(2) &&\n inputClearable === 'selectProperty2' &&\n currentFilter.active\n \"\n matSuffix\n mat-icon-button\n aria-label=\"Clear\"\n [disabled]=\"!currentFilter.active\"\n (click)=\"clearProperty(2)\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n</div>\n\n<igo-ogc-filter-time\n *ngIf=\"isTemporalOperator()\"\n [datasource]=\"datasource\"\n [currentFilter]=\"currentFilter\"\n (changeProperty)=\"changeProperty($event.value, $event.pos)\"\n>\n</igo-ogc-filter-time>\n", styles: [":host{width:100%;padding:5px 10px}:host ::ng-deep .mat-mdc-form-field .mat-icon svg{width:1em;height:1em;color:#d3d3d3}:host .ogc-filter-form-container{display:flex}:host .mat-mdc-form-field{width:100%}:host .mat-mdc-select-arrow{visibility:hidden}:host .mat-mdc-slide-toggle{margin-top:10px}:host .logical{flex-flow:column nowrap;width:100%;max-width:60px;margin-right:5px}:host .logicalHidden{width:0px;visibility:hidden;max-width:0px}:host ::ng-deep .logical .mat-mdc-select-arrow{visibility:hidden}:host ::ng-deep .logicalHidden .mat-mdc-select-arrow{visibility:hidden}:host .field{width:150px;margin-right:5px}:host ::ng-deep .field .mat-mdc-select-arrow{visibility:hidden}:host .operator{width:150px;margin-right:5px;text-align:center}:host ::ng-deep .operator .mat-mdc-select-arrow{visibility:hidden}:host .spatialSelector{width:110px;margin-right:5px}:host ::ng-deep .spatialSelector .mat-mdc-select-arrow{visibility:hidden}:host .singleInput{width:150px;margin-right:5px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){:host .singleInput{width:27%}}:host .snrc{width:110px;margin-right:5px}:host ::ng-deep .singleInput .mat-mdc-select-arrow{visibility:hidden}:host .dualInput{width:150px;margin-right:5px}:host ::ng-deep .dualInput .mat-mdc-select-arrow{visibility:hidden}:host .igo-layer-button-group{display:flex;padding-top:5px}:host .container{display:flex}\n"], dependencies: [{ kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i2.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i5.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i8.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i8.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i9.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: OgcFilterTimeComponent, selector: "igo-ogc-filter-time", inputs: ["datasource", "currentFilter"], outputs: ["changeProperty"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "ngmodule", type: IgoLanguageModule }, { kind: "pipe", type: i11.TranslatePipe, name: "translate" }] });
292
292
  }
293
293
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: OgcFilterFormComponent, decorators: [{
294
294
  type: Component,
@@ -308,8 +308,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
308
308
  OgcFilterTimeComponent,
309
309
  AsyncPipe,
310
310
  KeyValuePipe,
311
- TranslateModule
312
- ], template: "<div class=\"ogc-filter-form-container\">\n <mat-checkbox\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.filter.toggleFilterState' | translate\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleFilterState($event)\"\n [checked]=\"currentFilter.active\"\n >\n </mat-checkbox>\n\n <mat-form-field\n [ngClass]=\"{\n logical:\n activeFilters.indexOf(currentFilter) !== 0 &&\n currentFilter.active === true,\n logicalHidden:\n activeFilters.indexOf(currentFilter) === 0 ||\n currentFilter.active !== true\n }\"\n >\n <mat-select\n [disabled]=\"!currentFilter.active\"\n [value]=\"currentFilter.parentLogical\"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n currentFilter.parentLogical\n ? ('igo.geo.operators.tooltip.' + currentFilter.parentLogical\n | translate)\n : ''\n \"\n (selectionChange)=\"changeLogical($event.value)\"\n >\n <mat-option\n [value]=\"ogcFilterOperator.And\"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.operators.tooltip.And' | translate\"\n >\n {{ 'igo.geo.operators.And' | translate }}\n </mat-option>\n <mat-option\n [value]=\"ogcFilterOperator.Or\"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.operators.tooltip.Or' | translate\"\n >\n {{ 'igo.geo.operators.Or' | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field\n class=\"field\"\n *ngIf=\"\n (currentFilterIsSpatial$ | async) === false &&\n (fields$ | async) &&\n (fields$ | async).length > 0 &&\n (fields$ | async)[0].name !== ''\n \"\n (mouseenter)=\"inputClearable = 'selectField'\"\n (mouseleave)=\"inputClearable = undefined\"\n [floatLabel]=\"floatLabel\"\n >\n <input\n matInput\n [placeholder]=\"'igo.geo.sourceFields.selectField' | translate\"\n [disabled]=\"!currentFilter.active\"\n [matAutocomplete]=\"autoCompleteField\"\n [value]=\"(selectedField$ | async) ? (selectedField$ | async).alias : ''\"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n (selectedField$ | async)\n ? (selectedField$ | async).alias\n : ('igo.geo.sourceFields.selectField' | translate)\n \"\n (input)=\"updateFieldsList($any($event.target).value)\"\n />\n <mat-autocomplete\n #autoCompleteField=\"matAutocomplete\"\n (optionSelected)=\"changeField($event.option.id)\"\n >\n <mat-option\n *ngFor=\"let field of filteredFields$ | async\"\n matTooltipShowDelay=\"500\"\n [value]=\"field.alias\"\n [id]=\"field.name\"\n [matTooltip]=\"field.alias\"\n >\n {{ field.alias }}\n </mat-option>\n </mat-autocomplete>\n <button\n *ngIf=\"\n currentFilter.propertyName &&\n inputClearable === 'selectField' &&\n currentFilter.active\n \"\n matSuffix\n mat-icon-button\n aria-label=\"Clear\"\n [disabled]=\"!currentFilter.active\"\n (click)=\"clearSelectedField()\"\n >\n <mat-icon svgIcon=\"close\"></mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field\n [ngClass]=\"{\n operator: (currentFilterIsSpatial$ | async) === false,\n dualInput: (currentFilterIsSpatial$ | async)\n }\"\n [floatLabel]=\"floatLabel\"\n >\n <mat-select\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n currentFilter.operator\n ? ('igo.geo.operators.tooltip.' + currentFilter.operator | translate)\n : ('igo.geo.filter.selectOperator' | translate)\n \"\n [disabled]=\"!currentFilter.active\"\n [value]=\"currentFilter.operator\"\n (selectionChange)=\"changeOperator($event.value)\"\n >\n <mat-option\n *ngFor=\"let operator of ogcFilterOperators$ | async | keyvalue\"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [value]=\"operator.key\"\n [matTooltip]=\"'igo.geo.operators.tooltip.' + operator.key | translate\"\n >\n {{ 'igo.geo.operators.' + operator.key | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field\n class=\"spatialSelector\"\n *ngIf=\"currentFilterIsSpatial$ | async\"\n >\n <mat-select\n [disabled]=\"!currentFilter.active\"\n [value]=\"currentFilter.igoSpatialSelector\"\n (selectionChange)=\"changeSpatialSelector($event.value)\"\n >\n <mat-option\n *ngFor=\"let igoSpatialSelector of igoSpatialSelectors\"\n [value]=\"igoSpatialSelector.type\"\n >\n {{ 'igo.geo.spatialSelector.' + igoSpatialSelector.type | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field\n class=\"singleInput\"\n *ngIf=\"['expression', 'pattern'].indexOf(detectProperty()) !== -1\"\n (mouseenter)=\"inputClearable = 'selectProperty'\"\n (mouseleave)=\"inputClearable = undefined\"\n [floatLabel]=\"floatLabel\"\n >\n <input\n matInput\n [placeholder]=\"'igo.geo.filter.placeholder' | translate\"\n [disabled]=\"!currentFilter.active\"\n [matAutocomplete]=\"autoCompleteValues\"\n [value]=\"\n detectProperty() === 'expression'\n ? currentFilter.expression\n : currentFilter.pattern\n \"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n detectProperty() === 'expression'\n ? currentFilter.expression || ''\n : currentFilter.pattern || ''\n \"\n (input)=\"updateValuesList($any($event.target).value)\"\n />\n <mat-autocomplete\n #autoCompleteValues=\"matAutocomplete\"\n (optionSelected)=\"changeProperty($event.option.value)\"\n >\n <mat-option\n *ngFor=\"let value of filteredValues$ | async\"\n matTooltipShowDelay=\"500\"\n [value]=\"value\"\n [matTooltip]=\"value\"\n >\n {{ value }}\n </mat-option>\n </mat-autocomplete>\n <button\n *ngIf=\"\n isClearable() &&\n inputClearable === 'selectProperty' &&\n currentFilter.active\n \"\n matSuffix\n mat-icon-button\n aria-label=\"Clear\"\n [disabled]=\"!currentFilter.active\"\n (click)=\"clearProperty()\"\n >\n <mat-icon svgIcon=\"close\"></mat-icon>\n </button>\n </mat-form-field>\n\n <div class=\"igo-layer-button-group\">\n <button\n mat-icon-button\n collapsibleButton\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.filter.removeFilter' | translate\"\n color=\"warn\"\n (click)=\"deleteFilter()\"\n >\n <mat-icon svgIcon=\"delete\"></mat-icon>\n </button>\n </div>\n\n <mat-form-field\n class=\"snrc\"\n *ngIf=\"\n (currentFilterIsSpatial$ | async) &&\n currentFilter.igoSpatialSelector === 'snrc'\n \"\n (mouseenter)=\"inputClearable = 'selectSNRC'\"\n (mouseleave)=\"inputClearable = undefined\"\n [floatLabel]=\"floatLabel\"\n >\n <input\n matInput\n [placeholder]=\"'igo.geo.filter.placeholderSnrc' | translate\"\n [value]=\"currentFilter.igoSNRC\"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"currentFilter.igoSNRC ? currentFilter.igoSNRC : ''\"\n (input)=\"changeSNRC($any($event.target).value)\"\n />\n <button\n *ngIf=\"currentFilter.igoSNRC\"\n matSuffix\n mat-icon-button\n aria-label=\"Clear\"\n [disabled]=\"\n !currentFilter.active &&\n inputClearable === 'selectSNRC' &&\n currentFilter.active\n \"\n (click)=\"currentFilter.igoSNRC = ''\"\n >\n <mat-icon svgIcon=\"close\"></mat-icon>\n </button>\n </mat-form-field>\n\n <ng-container\n *ngIf=\"\n (currentFilterIsSpatial$ | async) &&\n currentFilter.igoSpatialSelector === 'fixedExtent'\n \"\n >\n <button\n [disabled]=\"!currentFilter.active\"\n *ngIf=\"currentFilter.igoSpatialSelector === 'fixedExtent'\"\n matSuffix\n mat-icon-button\n [disabled]=\"!currentFilter.active\"\n (click)=\"changeMapExtentGeometry()\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.spatialSelector.btnSetExtent' | translate\"\n >\n <mat-icon svgIcon=\"arrow-expand-all\"></mat-icon>\n </button>\n </ng-container>\n</div>\n\n<div class=\"ogc-filter-form-container\">\n <mat-form-field\n class=\"dualInput\"\n *ngIf=\"\n !isTemporalOperator() &&\n ['lowerBoundary', 'begin'].indexOf(detectProperty(1)) !== -1\n \"\n (mouseenter)=\"inputClearable = 'selectProperty1'\"\n (mouseleave)=\"inputClearable = undefined\"\n [floatLabel]=\"floatLabel\"\n >\n <input\n matInput\n [placeholder]=\"'igo.geo.filter.placeholder' | translate\"\n [disabled]=\"!currentFilter.active\"\n [matAutocomplete]=\"autoDualValueOperator1\"\n type=\"number\"\n [value]=\"\n detectProperty(1) === 'lowerBoundary'\n ? currentFilter.lowerBoundary\n : currentFilter.begin\n \"\n (input)=\"updateValuesList($any($event.target).value, 1)\"\n />\n <mat-autocomplete\n #autoDualValueOperator1=\"matAutocomplete\"\n (optionSelected)=\"changeNumericProperty($event.option.value, 1)\"\n >\n <mat-option\n *ngFor=\"let value of filteredValues$ | async\"\n matTooltipShowDelay=\"500\"\n [value]=\"value\"\n [matTooltip]=\"value\"\n >\n {{ value }}\n </mat-option>\n </mat-autocomplete>\n <button\n *ngIf=\"\n isClearable(1) &&\n inputClearable === 'selectProperty1' &&\n currentFilter.active\n \"\n matSuffix\n mat-icon-button\n aria-label=\"Clear\"\n [disabled]=\"!currentFilter.active\"\n (click)=\"clearProperty(1)\"\n >\n <mat-icon svgIcon=\"close\"></mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field\n class=\"dualInput\"\n *ngIf=\"\n !isTemporalOperator() &&\n ['upperBoundary', 'end'].indexOf(detectProperty(2)) !== -1\n \"\n (mouseenter)=\"inputClearable = 'selectProperty2'\"\n (mouseleave)=\"inputClearable = undefined\"\n [floatLabel]=\"floatLabel\"\n >\n <input\n matInput\n [placeholder]=\"'igo.geo.filter.placeholder' | translate\"\n [disabled]=\"!currentFilter.active\"\n [matAutocomplete]=\"autoDualValueOperator2\"\n type=\"number\"\n [value]=\"\n detectProperty(2) === 'upperBoundary'\n ? currentFilter.upperBoundary\n : currentFilter.end\n \"\n (input)=\"updateValuesList($any($event.target).value, 2)\"\n />\n <mat-autocomplete\n #autoDualValueOperator2=\"matAutocomplete\"\n (optionSelected)=\"changeNumericProperty($event.option.value, 2)\"\n >\n <mat-option\n *ngFor=\"let value of filteredValues$ | async\"\n matTooltipShowDelay=\"500\"\n [value]=\"value\"\n [matTooltip]=\"value\"\n >\n {{ value }}\n </mat-option>\n </mat-autocomplete>\n <button\n *ngIf=\"\n isClearable(2) &&\n inputClearable === 'selectProperty2' &&\n currentFilter.active\n \"\n matSuffix\n mat-icon-button\n aria-label=\"Clear\"\n [disabled]=\"!currentFilter.active\"\n (click)=\"clearProperty(2)\"\n >\n <mat-icon svgIcon=\"close\"></mat-icon>\n </button>\n </mat-form-field>\n</div>\n\n<igo-ogc-filter-time\n *ngIf=\"isTemporalOperator()\"\n [datasource]=\"datasource\"\n [currentFilter]=\"currentFilter\"\n (changeProperty)=\"changeProperty($event.value, $event.pos)\"\n>\n</igo-ogc-filter-time>\n", styles: [":host{width:100%;padding:5px 10px}:host ::ng-deep .mat-mdc-form-field .mat-icon svg{width:1em;height:1em;color:#d3d3d3}:host .ogc-filter-form-container{display:flex}:host .mat-mdc-form-field{width:100%}:host .mat-mdc-select-arrow{visibility:hidden}:host .mat-mdc-slide-toggle{margin-top:10px}:host .logical{flex-flow:column nowrap;width:100%;max-width:60px;margin-right:5px}:host .logicalHidden{width:0px;visibility:hidden;max-width:0px}:host ::ng-deep .logical .mat-mdc-select-arrow{visibility:hidden}:host ::ng-deep .logicalHidden .mat-mdc-select-arrow{visibility:hidden}:host .field{width:150px;margin-right:5px}:host ::ng-deep .field .mat-mdc-select-arrow{visibility:hidden}:host .operator{width:150px;margin-right:5px;text-align:center}:host ::ng-deep .operator .mat-mdc-select-arrow{visibility:hidden}:host .spatialSelector{width:110px;margin-right:5px}:host ::ng-deep .spatialSelector .mat-mdc-select-arrow{visibility:hidden}:host .singleInput{width:150px;margin-right:5px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){:host .singleInput{width:27%}}:host .snrc{width:110px;margin-right:5px}:host ::ng-deep .singleInput .mat-mdc-select-arrow{visibility:hidden}:host .dualInput{width:150px;margin-right:5px}:host ::ng-deep .dualInput .mat-mdc-select-arrow{visibility:hidden}:host .igo-layer-button-group{display:flex;padding-top:5px}:host .container{display:flex}\n"] }]
311
+ IgoLanguageModule
312
+ ], template: "<div class=\"ogc-filter-form-container\">\n <mat-checkbox\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.filter.toggleFilterState' | translate\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleFilterState($event)\"\n [checked]=\"currentFilter.active\"\n >\n </mat-checkbox>\n\n <mat-form-field\n [ngClass]=\"{\n logical:\n activeFilters.indexOf(currentFilter) !== 0 &&\n currentFilter.active === true,\n logicalHidden:\n activeFilters.indexOf(currentFilter) === 0 ||\n currentFilter.active !== true\n }\"\n >\n <mat-select\n [disabled]=\"!currentFilter.active\"\n [value]=\"currentFilter.parentLogical\"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n currentFilter.parentLogical\n ? ('igo.geo.operators.tooltip.' + currentFilter.parentLogical\n | translate)\n : ''\n \"\n (selectionChange)=\"changeLogical($event.value)\"\n >\n <mat-option\n [value]=\"ogcFilterOperator.And\"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.operators.tooltip.And' | translate\"\n >\n {{ 'igo.geo.operators.And' | translate }}\n </mat-option>\n <mat-option\n [value]=\"ogcFilterOperator.Or\"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.operators.tooltip.Or' | translate\"\n >\n {{ 'igo.geo.operators.Or' | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field\n class=\"field\"\n *ngIf=\"\n (currentFilterIsSpatial$ | async) === false &&\n (fields$ | async) &&\n (fields$ | async).length > 0 &&\n (fields$ | async)[0].name !== ''\n \"\n (mouseenter)=\"inputClearable = 'selectField'\"\n (mouseleave)=\"inputClearable = undefined\"\n [floatLabel]=\"floatLabel\"\n >\n <input\n matInput\n [placeholder]=\"'igo.geo.sourceFields.selectField' | translate\"\n [disabled]=\"!currentFilter.active\"\n [matAutocomplete]=\"autoCompleteField\"\n [value]=\"(selectedField$ | async) ? (selectedField$ | async).alias : ''\"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n (selectedField$ | async)\n ? (selectedField$ | async).alias\n : ('igo.geo.sourceFields.selectField' | translate)\n \"\n (input)=\"updateFieldsList($any($event.target).value)\"\n />\n <mat-autocomplete\n #autoCompleteField=\"matAutocomplete\"\n (optionSelected)=\"changeField($event.option.id)\"\n >\n <mat-option\n *ngFor=\"let field of filteredFields$ | async\"\n matTooltipShowDelay=\"500\"\n [value]=\"field.alias\"\n [id]=\"field.name\"\n [matTooltip]=\"field.alias\"\n >\n {{ field.alias }}\n </mat-option>\n </mat-autocomplete>\n <button\n *ngIf=\"\n currentFilter.propertyName &&\n inputClearable === 'selectField' &&\n currentFilter.active\n \"\n matSuffix\n mat-icon-button\n aria-label=\"Clear\"\n [disabled]=\"!currentFilter.active\"\n (click)=\"clearSelectedField()\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field\n [ngClass]=\"{\n operator: (currentFilterIsSpatial$ | async) === false,\n dualInput: (currentFilterIsSpatial$ | async)\n }\"\n [floatLabel]=\"floatLabel\"\n >\n <mat-select\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n currentFilter.operator\n ? ('igo.geo.operators.tooltip.' + currentFilter.operator | translate)\n : ('igo.geo.filter.selectOperator' | translate)\n \"\n [disabled]=\"!currentFilter.active\"\n [value]=\"currentFilter.operator\"\n (selectionChange)=\"changeOperator($event.value)\"\n >\n <mat-option\n *ngFor=\"let operator of ogcFilterOperators$ | async | keyvalue\"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [value]=\"operator.key\"\n [matTooltip]=\"'igo.geo.operators.tooltip.' + operator.key | translate\"\n >\n {{ 'igo.geo.operators.' + operator.key | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field\n class=\"spatialSelector\"\n *ngIf=\"currentFilterIsSpatial$ | async\"\n >\n <mat-select\n [disabled]=\"!currentFilter.active\"\n [value]=\"currentFilter.igoSpatialSelector\"\n (selectionChange)=\"changeSpatialSelector($event.value)\"\n >\n <mat-option\n *ngFor=\"let igoSpatialSelector of igoSpatialSelectors\"\n [value]=\"igoSpatialSelector.type\"\n >\n {{ 'igo.geo.spatialSelector.' + igoSpatialSelector.type | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field\n class=\"singleInput\"\n *ngIf=\"['expression', 'pattern'].indexOf(detectProperty()) !== -1\"\n (mouseenter)=\"inputClearable = 'selectProperty'\"\n (mouseleave)=\"inputClearable = undefined\"\n [floatLabel]=\"floatLabel\"\n >\n <input\n matInput\n [placeholder]=\"'igo.geo.filter.placeholder' | translate\"\n [disabled]=\"!currentFilter.active\"\n [matAutocomplete]=\"autoCompleteValues\"\n [value]=\"\n detectProperty() === 'expression'\n ? currentFilter.expression\n : currentFilter.pattern\n \"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n detectProperty() === 'expression'\n ? currentFilter.expression || ''\n : currentFilter.pattern || ''\n \"\n (input)=\"updateValuesList($any($event.target).value)\"\n />\n <mat-autocomplete\n #autoCompleteValues=\"matAutocomplete\"\n (optionSelected)=\"changeProperty($event.option.value)\"\n >\n <mat-option\n *ngFor=\"let value of filteredValues$ | async\"\n matTooltipShowDelay=\"500\"\n [value]=\"value\"\n [matTooltip]=\"value\"\n >\n {{ value }}\n </mat-option>\n </mat-autocomplete>\n <button\n *ngIf=\"\n isClearable() &&\n inputClearable === 'selectProperty' &&\n currentFilter.active\n \"\n matSuffix\n mat-icon-button\n aria-label=\"Clear\"\n [disabled]=\"!currentFilter.active\"\n (click)=\"clearProperty()\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <div class=\"igo-layer-button-group\">\n <button\n mat-icon-button\n collapsibleButton\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.filter.removeFilter' | translate\"\n color=\"warn\"\n (click)=\"deleteFilter()\"\n >\n <mat-icon>delete</mat-icon>\n </button>\n </div>\n\n <mat-form-field\n class=\"snrc\"\n *ngIf=\"\n (currentFilterIsSpatial$ | async) &&\n currentFilter.igoSpatialSelector === 'snrc'\n \"\n (mouseenter)=\"inputClearable = 'selectSNRC'\"\n (mouseleave)=\"inputClearable = undefined\"\n [floatLabel]=\"floatLabel\"\n >\n <input\n matInput\n [placeholder]=\"'igo.geo.filter.placeholderSnrc' | translate\"\n [value]=\"currentFilter.igoSNRC\"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"currentFilter.igoSNRC ? currentFilter.igoSNRC : ''\"\n (input)=\"changeSNRC($any($event.target).value)\"\n />\n <button\n *ngIf=\"currentFilter.igoSNRC\"\n matSuffix\n mat-icon-button\n aria-label=\"Clear\"\n [disabled]=\"\n !currentFilter.active &&\n inputClearable === 'selectSNRC' &&\n currentFilter.active\n \"\n (click)=\"currentFilter.igoSNRC = ''\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <ng-container\n *ngIf=\"\n (currentFilterIsSpatial$ | async) &&\n currentFilter.igoSpatialSelector === 'fixedExtent'\n \"\n >\n <button\n [disabled]=\"!currentFilter.active\"\n *ngIf=\"currentFilter.igoSpatialSelector === 'fixedExtent'\"\n matSuffix\n mat-icon-button\n [disabled]=\"!currentFilter.active\"\n (click)=\"changeMapExtentGeometry()\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.spatialSelector.btnSetExtent' | translate\"\n >\n <mat-icon>zoom_out_map</mat-icon>\n </button>\n </ng-container>\n</div>\n\n<div class=\"ogc-filter-form-container\">\n <mat-form-field\n class=\"dualInput\"\n *ngIf=\"\n !isTemporalOperator() &&\n ['lowerBoundary', 'begin'].indexOf(detectProperty(1)) !== -1\n \"\n (mouseenter)=\"inputClearable = 'selectProperty1'\"\n (mouseleave)=\"inputClearable = undefined\"\n [floatLabel]=\"floatLabel\"\n >\n <input\n matInput\n [placeholder]=\"'igo.geo.filter.placeholder' | translate\"\n [disabled]=\"!currentFilter.active\"\n [matAutocomplete]=\"autoDualValueOperator1\"\n type=\"number\"\n [value]=\"\n detectProperty(1) === 'lowerBoundary'\n ? currentFilter.lowerBoundary\n : currentFilter.begin\n \"\n (input)=\"updateValuesList($any($event.target).value, 1)\"\n />\n <mat-autocomplete\n #autoDualValueOperator1=\"matAutocomplete\"\n (optionSelected)=\"changeNumericProperty($event.option.value, 1)\"\n >\n <mat-option\n *ngFor=\"let value of filteredValues$ | async\"\n matTooltipShowDelay=\"500\"\n [value]=\"value\"\n [matTooltip]=\"value\"\n >\n {{ value }}\n </mat-option>\n </mat-autocomplete>\n <button\n *ngIf=\"\n isClearable(1) &&\n inputClearable === 'selectProperty1' &&\n currentFilter.active\n \"\n matSuffix\n mat-icon-button\n aria-label=\"Clear\"\n [disabled]=\"!currentFilter.active\"\n (click)=\"clearProperty(1)\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field\n class=\"dualInput\"\n *ngIf=\"\n !isTemporalOperator() &&\n ['upperBoundary', 'end'].indexOf(detectProperty(2)) !== -1\n \"\n (mouseenter)=\"inputClearable = 'selectProperty2'\"\n (mouseleave)=\"inputClearable = undefined\"\n [floatLabel]=\"floatLabel\"\n >\n <input\n matInput\n [placeholder]=\"'igo.geo.filter.placeholder' | translate\"\n [disabled]=\"!currentFilter.active\"\n [matAutocomplete]=\"autoDualValueOperator2\"\n type=\"number\"\n [value]=\"\n detectProperty(2) === 'upperBoundary'\n ? currentFilter.upperBoundary\n : currentFilter.end\n \"\n (input)=\"updateValuesList($any($event.target).value, 2)\"\n />\n <mat-autocomplete\n #autoDualValueOperator2=\"matAutocomplete\"\n (optionSelected)=\"changeNumericProperty($event.option.value, 2)\"\n >\n <mat-option\n *ngFor=\"let value of filteredValues$ | async\"\n matTooltipShowDelay=\"500\"\n [value]=\"value\"\n [matTooltip]=\"value\"\n >\n {{ value }}\n </mat-option>\n </mat-autocomplete>\n <button\n *ngIf=\"\n isClearable(2) &&\n inputClearable === 'selectProperty2' &&\n currentFilter.active\n \"\n matSuffix\n mat-icon-button\n aria-label=\"Clear\"\n [disabled]=\"!currentFilter.active\"\n (click)=\"clearProperty(2)\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n</div>\n\n<igo-ogc-filter-time\n *ngIf=\"isTemporalOperator()\"\n [datasource]=\"datasource\"\n [currentFilter]=\"currentFilter\"\n (changeProperty)=\"changeProperty($event.value, $event.pos)\"\n>\n</igo-ogc-filter-time>\n", styles: [":host{width:100%;padding:5px 10px}:host ::ng-deep .mat-mdc-form-field .mat-icon svg{width:1em;height:1em;color:#d3d3d3}:host .ogc-filter-form-container{display:flex}:host .mat-mdc-form-field{width:100%}:host .mat-mdc-select-arrow{visibility:hidden}:host .mat-mdc-slide-toggle{margin-top:10px}:host .logical{flex-flow:column nowrap;width:100%;max-width:60px;margin-right:5px}:host .logicalHidden{width:0px;visibility:hidden;max-width:0px}:host ::ng-deep .logical .mat-mdc-select-arrow{visibility:hidden}:host ::ng-deep .logicalHidden .mat-mdc-select-arrow{visibility:hidden}:host .field{width:150px;margin-right:5px}:host ::ng-deep .field .mat-mdc-select-arrow{visibility:hidden}:host .operator{width:150px;margin-right:5px;text-align:center}:host ::ng-deep .operator .mat-mdc-select-arrow{visibility:hidden}:host .spatialSelector{width:110px;margin-right:5px}:host ::ng-deep .spatialSelector .mat-mdc-select-arrow{visibility:hidden}:host .singleInput{width:150px;margin-right:5px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){:host .singleInput{width:27%}}:host .snrc{width:110px;margin-right:5px}:host ::ng-deep .singleInput .mat-mdc-select-arrow{visibility:hidden}:host .dualInput{width:150px;margin-right:5px}:host ::ng-deep .dualInput .mat-mdc-select-arrow{visibility:hidden}:host .igo-layer-button-group{display:flex;padding-top:5px}:host .container{display:flex}\n"] }]
313
313
  }], ctorParameters: () => [{ type: i1.WktService }], propDecorators: { refreshFilters: [{
314
314
  type: Input
315
315
  }], datasource: [{
@@ -321,4 +321,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
321
321
  }], floatLabel: [{
322
322
  type: Input
323
323
  }] } });
324
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2djLWZpbHRlci1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ZpbHRlci9vZ2MtZmlsdGVyLWZvcm0vb2djLWZpbHRlci1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ZpbHRlci9vZ2MtZmlsdGVyLWZvcm0vb2djLWZpbHRlci1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBRUwsa0JBQWtCLEVBQ25CLE1BQU0sOEJBQThCLENBQUM7QUFDdEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFN0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxlQUFlLEVBQWMsRUFBRSxFQUFFLE1B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K0JBQ0UscUJBQXFCLGNBR25CLElBQUksV0FDUDt3QkFDUCxpQkFBaUI7d0JBQ2pCLGdCQUFnQjt3QkFDaEIsa0JBQWtCO3dCQUNsQixPQUFPO3dCQUNQLGVBQWU7d0JBQ2YsZUFBZTt3QkFDZixJQUFJO3dCQUNKLGNBQWM7d0JBQ2QscUJBQXFCO3dCQUNyQixLQUFLO3dCQUNMLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixzQkFBc0I7d0JBQ3RCLFNBQVM7d0JBQ1QsWUFBWTt3QkFDWixlQUFlO3FCQUNoQjsrRUF1QlEsY0FBYztzQkFBdEIsS0FBSztnQkFFRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLEdBQUc7c0JBQVgsS0FBSztnQkFFRyxhQUFhO3NCQUFyQixLQUFLO2dCQXNCRyxVQUFVO3NCQUFsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXN5bmNQaXBlLCBLZXlWYWx1ZVBpcGUsIE5nQ2xhc3MsIE5nRm9yLCBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0QXV0b2NvbXBsZXRlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRDaGVja2JveE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcbmltcG9ydCB7IE1hdE9wdGlvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHtcbiAgRmxvYXRMYWJlbFR5cGUsXG4gIE1hdEZvcm1GaWVsZE1vZHVsZVxufSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHsgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcblxuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFNvdXJjZUZpZWxkc09wdGlvbnNQYXJhbXMgfSBmcm9tICcuLi8uLi9kYXRhc291cmNlL3NoYXJlZC9kYXRhc291cmNlcy9kYXRhc291cmNlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBPZ2NGaWx0ZXJXcml0ZXIgfSBmcm9tICcuLi8uLi9maWx0ZXIvc2hhcmVkL29nYy1maWx0ZXInO1xuaW1wb3J0IHsgT2djRmlsdGVyT3BlcmF0b3IgfSBmcm9tICcuLi8uLi9maWx0ZXIvc2hhcmVkL29nYy1maWx0ZXIuZW51bSc7XG5pbXBvcnQge1xuICBPZ2NGaWx0ZXJhYmxlRGF0YVNvdXJjZSxcbiAgT2djRmlsdGVyc09wdGlvbnNcbn0gZnJvbSAnLi4vLi4vZmlsdGVyL3NoYXJlZC9vZ2MtZmlsdGVyLmludGVyZmFjZSc7XG5pbXBvcnQgeyBNYXBCYXNlIH0gZnJvbSAnLi4vLi4vbWFwJztcbmltcG9ydCB7IFdrdFNlcnZpY2UgfSBmcm9tICcuLi8uLi93a3Qvc2hhcmVkL3drdC5zZXJ2aWNlJztcbmltcG9ydCB7IE9nY0ZpbHRlclRpbWVDb21wb25lbnQgfSBmcm9tICcuLi9vZ2MtZmlsdGVyLXRpbWUvb2djLWZpbHRlci10aW1lLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2lnby1vZ2MtZmlsdGVyLWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vb2djLWZpbHRlci1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vb2djLWZpbHRlci1mb3JtLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBNYXRDaGVja2JveE1vZHVsZSxcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxuICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcbiAgICBOZ0NsYXNzLFxuICAgIE1hdFNlbGVjdE1vZHVsZSxcbiAgICBNYXRPcHRpb25Nb2R1bGUsXG4gICAgTmdJZixcbiAgICBNYXRJbnB1dE1vZHVsZSxcbiAgICBNYXRBdXRvY29tcGxldGVNb2R1bGUsXG4gICAgTmdGb3IsXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgIE1hdEljb25Nb2R1bGUsXG4gICAgT2djRmlsdGVyVGltZUNvbXBvbmVudCxcbiAgICBBc3luY1BpcGUsXG4gICAgS2V5VmFsdWVQaXBlLFxuICAgIFRyYW5zbGF0ZU1vZHVsZVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIE9nY0ZpbHRlckZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBvZ2NGaWx0ZXJPcGVyYXRvciA9IE9nY0ZpbHRlck9wZXJhdG9yO1xuICBmaWx0ZXJlZFZhbHVlcyQ6IE9ic2VydmFibGU8c3RyaW5nW10+O1xuICBmaWx0ZXJlZEZpZWxkcyQ6IE9ic2VydmFibGU8U291cmNlRmllbGRzT3B0aW9uc1BhcmFtc1tdPjtcbiAgcHVibGljIGFsbE9nY0ZpbHRlck9wZXJhdG9ycztcbiAgcHVibGljIG9nY0ZpbHRlck9wZXJhdG9ycyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHsgW2tleTogc3RyaW5nXTogYW55IH0+KFxuICAgIHVuZGVmaW5lZFxuICApO1xuICBwdWJsaWMgaWdvU3BhdGlhbFNlbGVjdG9ycztcbiAgcHVibGljIHZhbHVlID0gJyc7XG4gIHB1YmxpYyBpbnB1dE9wZXJhdG9yO1xuICBwdWJsaWMgc2VsZWN0ZWRGaWVsZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNvdXJjZUZpZWxkc09wdGlvbnNQYXJhbXM+KFxuICAgIHVuZGVmaW5lZFxuICApO1xuICBwdWJsaWMgZmllbGRzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U291cmNlRmllbGRzT3B0aW9uc1BhcmFtc1tdPihbXSk7XG4gIHB1YmxpYyBjb2xvciA9ICdwcmltYXJ5JztcbiAgcHVibGljIGRpc2FibGVkO1xuICBwdWJsaWMgY3VycmVudEZpbHRlcklzU3BhdGlhbCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIGRlZmF1bHRTdGVwTWlsbGlzZWNvbmQgPSA2MDAwO1xuICBwdWJsaWMgaW5wdXRDbGVhcmFibGU6IHN0cmluZztcblxuICBASW5wdXQoKSByZWZyZXNoRmlsdGVyczogKCkgPT4gdm9pZDtcblxuICBASW5wdXQoKSBkYXRhc291cmNlOiBPZ2NGaWx0ZXJhYmxlRGF0YVNvdXJjZTtcblxuICBASW5wdXQoKSBtYXA6IE1hcEJhc2U7XG5cbiAgQElucHV0KCkgY3VycmVudEZpbHRlcjogYW55O1xuXG4gIHNldCBzbnJjKHZhbHVlOiBhbnkpIHtcbiAgICBjb25zdCBjaGVja1NOUkM1MGsgPSAvXlxcZHsyfVthLWxdWzAsMV1bMC05XSQvZ2k7XG4gICAgY29uc3QgY2hlY2tTTlJDMjUwayA9IC9eXFxkezJ9W2EtcF0kL2dpO1xuICAgIGNvbnN0IGNoZWNrU05SQzFtID0gL15cXGR7Mn0kL2dpO1xuICAgIGlmIChcbiAgICAgIGNoZWNrU05SQzFtLnRlc3QodmFsdWUpIHx8XG4gICAgICBjaGVja1NOUkMyNTBrLnRlc3QodmFsdWUpIHx8XG4gICAgICBjaGVja1NOUkM1MGsudGVzdCh2YWx1ZSlcbiAgICApIHtcbiAgICAgIHRoaXMuX3NucmMgPSB2YWx1ZTtcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlci5pZ29TTlJDID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHNucmMoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fc25yYztcbiAgfVxuXG4gIHByaXZhdGUgX3NucmMgPSAnJztcblxuICBASW5wdXQoKSBmbG9hdExhYmVsOiBGbG9hdExhYmVsVHlwZTtcblxuICBnZXQgYWN0aXZlRmlsdGVycygpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5pbnRlcmZhY2VPZ2NGaWx0ZXJzLmZpbHRlcihcbiAgICAgIChmKSA9PiBmLmFjdGl2ZSA9PT0gdHJ1ZVxuICAgICk7XG4gIH1cblxuICBnZXQgYWxsb3dlZE9wZXJhdG9ycygpIHtcbiAgICByZXR1cm4gbmV3IE9nY0ZpbHRlcldyaXRlcigpLmNvbXB1dGVBbGxvd2VkT3BlcmF0b3JzKFxuICAgICAgdGhpcy5maWVsZHMkLnZhbHVlLFxuICAgICAgdGhpcy5jdXJyZW50RmlsdGVyLnByb3BlcnR5TmFtZSxcbiAgICAgIHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuYWxsb3dlZE9wZXJhdG9yc1R5cGVcbiAgICApO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSB3a3RTZXJ2aWNlOiBXa3RTZXJ2aWNlKSB7XG4gICAgLy8gVE9ETzogRmlsdGVyIHBlcm1pdHRlZCBvcGVyYXRvciBiYXNlZCBvbiB3ZnNjYXBhYmlsaXRpZXNcbiAgICAvLyBOZWVkIHRvIHdvcmsgb24gcmVnZXggb24gWE1MIGNhcGFiaWxpdGllcyBiZWNhdXNlXG4gICAgLy8gY29tYXBhcmlzb24gb3BlcmF0b3IncyBuYW1lIHZhcmllcyBiZXR3ZWVuIFdGUyBzZXJ2ZXJzLi4uXG4gICAgLy8gRXg6IElzTnVsbCB2cyBQcm9wZXJ0eUlzTnVsbCB2cyBJc05pbCAuLi5cbiAgICB0aGlzLmFsbE9nY0ZpbHRlck9wZXJhdG9ycyA9IG5ldyBPZ2NGaWx0ZXJXcml0ZXIoKS5vcGVyYXRvcnM7XG4gICAgdGhpcy5vZ2NGaWx0ZXJPcGVyYXRvcnMkLm5leHQodGhpcy5hbGxPZ2NGaWx0ZXJPcGVyYXRvcnMpO1xuICAgIHRoaXMuaWdvU3BhdGlhbFNlbGVjdG9ycyA9IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2ZpeGVkRXh0ZW50J1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ3NucmMnXG4gICAgICB9XG4gICAgXTtcbiAgICAvLyBUT0RPOiBzZWxlY3RGZWF0dXJlICYgZHJhd0ZlYXR1cmVcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5zb3VyY2VGaWVsZHMpIHtcbiAgICAgIGNvbnN0IHNGaWVsZHMgPSB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5zb3VyY2VGaWVsZHMuZmlsdGVyKFxuICAgICAgICAoc2YpID0+XG4gICAgICAgICAgc2YuZXhjbHVkZUZyb21PZ2NGaWx0ZXJzID09PSB1bmRlZmluZWQgfHwgIXNmLmV4Y2x1ZGVGcm9tT2djRmlsdGVyc1xuICAgICAgKTtcbiAgICAgIHNGaWVsZHMubWFwKChzZnMpID0+IHtcbiAgICAgICAgaWYgKHNmcy52YWx1ZXMpIHtcbiAgICAgICAgICBzZnMudmFsdWVzLnNvcnQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLmZpZWxkcyQubmV4dChzRmllbGRzKTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZUZpZWxkc0xpc3QoKTtcbiAgICB0aGlzLnNlbGVjdGVkRmllbGQkLm5leHQoXG4gICAgICB0aGlzLmZpZWxkcyQudmFsdWUuZmluZCgoZikgPT4gZi5uYW1lID09PSB0aGlzLmN1cnJlbnRGaWx0ZXIucHJvcGVydHlOYW1lKVxuICAgICk7XG4gICAgdGhpcy51cGRhdGVWYWx1ZXNMaXN0KCk7XG4gICAgdGhpcy5zZWxlY3RlZEZpZWxkJC5zdWJzY3JpYmUoKGYpID0+IHtcbiAgICAgIHRoaXMub2djRmlsdGVyT3BlcmF0b3JzJC5uZXh0KHRoaXMuYWxsb3dlZE9wZXJhdG9ycyk7XG4gICAgICBpZiAoXG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuYWxsb3dlZE9wZXJhdG9ycykuaW5kZXhPZihcbiAgICAgICAgICB0aGlzLmN1cnJlbnRGaWx0ZXIub3BlcmF0b3JcbiAgICAgICAgKSA9PT0gLTFcbiAgICAgICkge1xuICAgICAgICB0aGlzLmN1cnJlbnRGaWx0ZXIub3BlcmF0b3IgPSBPYmplY3Qua2V5cyh0aGlzLmFsbG93ZWRPcGVyYXRvcnMpWzBdO1xuICAgICAgICB0aGlzLmN1cnJlbnRGaWx0ZXIub3BlcmF0b3IgPSBPYmplY3Qua2V5cyh0aGlzLmFsbG93ZWRPcGVyYXRvcnMpWzBdO1xuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVWYWx1ZXNMaXN0KCk7XG4gICAgfSk7XG4gICAgdGhpcy5jdXJyZW50RmlsdGVySXNTcGF0aWFsKCk7XG4gIH1cblxuICB1cGRhdGVGaWVsZHNMaXN0KHZhbHVlPzogc3RyaW5nKSB7XG4gICAgdGhpcy5maWx0ZXJlZEZpZWxkcyQgPVxuICAgICAgdmFsdWUgJiYgdmFsdWUubGVuZ3RoID4gMCA/IG9mKHRoaXMuX2ZpbHRlckZpZWxkcyh2YWx1ZSkpIDogdGhpcy5maWVsZHMkO1xuICAgIGlmICh0aGlzLmZpZWxkcyQudmFsdWUuZmluZCgoZikgPT4gZi5uYW1lID09PSB2YWx1ZSkpIHtcbiAgICAgIHRoaXMuY2hhbmdlRmllbGQodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVZhbHVlc0xpc3QodmFsdWU/OiBzdHJpbmcsIHBvcz86IG51bWJlcikge1xuICAgIHRoaXMuZmlsdGVyZWRWYWx1ZXMkID1cbiAgICAgIHZhbHVlICYmIHZhbHVlLmxlbmd0aCA+IDBcbiAgICAgICAgPyBvZih0aGlzLl9maWx0ZXJWYWx1ZXModmFsdWUpKVxuICAgICAgICA6IHRoaXMuc2VsZWN0ZWRGaWVsZCQudmFsdWVcbiAgICAgICAgICA/IG9mKHRoaXMuc2VsZWN0ZWRGaWVsZCQudmFsdWUudmFsdWVzKVxuICAgICAgICAgIDogb2YoW10pO1xuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggPj0gMSkge1xuICAgICAgdGhpcy5jaGFuZ2VQcm9wZXJ0eSh2YWx1ZSwgcG9zKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9maWx0ZXJGaWVsZHModmFsdWU6IHN0cmluZyk6IFNvdXJjZUZpZWxkc09wdGlvbnNQYXJhbXNbXSB7XG4gICAgY29uc3Qga2V5d29yZFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgIHZhbHVlLm5vcm1hbGl6ZSgnTkZEJykucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpLFxuICAgICAgJ2dpJ1xuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuZmllbGRzJC52YWx1ZS5maWx0ZXIoKHZhbCkgPT5cbiAgICAgIGtleXdvcmRSZWdleC50ZXN0KFxuICAgICAgICB2YWwuYWxpYXMubm9ybWFsaXplKCdORkQnKS5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJylcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfZmlsdGVyVmFsdWVzKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qga2V5d29yZFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgIHZhbHVlXG4gICAgICAgIC50b1N0cmluZygpXG4gICAgICAgIC5ub3JtYWxpemUoJ05GRCcpXG4gICAgICAgIC5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJyksXG4gICAgICAnZ2knXG4gICAgKTtcblxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRmllbGQkLnZhbHVlPy52YWx1ZXM/LmZpbHRlcihcbiAgICAgICh2YWwpID0+XG4gICAgICAgIHZhbCAmJlxuICAgICAgICBrZXl3b3JkUmVnZXgudGVzdChcbiAgICAgICAgICB2YWxcbiAgICAgICAgICAgIC50b1N0cmluZygpXG4gICAgICAgICAgICAubm9ybWFsaXplKCdORkQnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKVxuICAgICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGNsZWFyU2VsZWN0ZWRGaWVsZCgpIHtcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXIucHJvcGVydHlOYW1lID0gJyc7XG4gICAgdGhpcy5zZWxlY3RlZEZpZWxkJC5uZXh0KHVuZGVmaW5lZCk7XG4gICAgdGhpcy5jbGVhclByb3BlcnR5KCk7XG4gIH1cblxuICBpc0NsZWFyYWJsZShwb3M/OiBudW1iZXIpIHtcbiAgICBjb25zdCBkZXRlY3RlZFByb3BlcnR5ID0gdGhpcy5kZXRlY3RQcm9wZXJ0eShwb3MpO1xuICAgIGlmIChkZXRlY3RlZFByb3BlcnR5KSB7XG4gICAgICByZXR1cm4gdGhpcy5jdXJyZW50RmlsdGVyW2RldGVjdGVkUHJvcGVydHldO1xuICAgIH1cbiAgfVxuICBjbGVhclByb3BlcnR5KHBvcz86IG51bWJlcikge1xuICAgIC8vIHRoaXMuYXV0b0NvbXBsZXRlSW5wdXRWYWx1ZXMuY2xvc2VQYW5lbCgpO1xuICAgIGNvbnN0IGRldGVjdGVkUHJvcGVydHkgPSB0aGlzLmRldGVjdFByb3BlcnR5KHBvcyk7XG4gICAgaWYgKGRldGVjdGVkUHJvcGVydHkpIHtcbiAgICAgIHJldHVybiAodGhpcy5jdXJyZW50RmlsdGVyW2RldGVjdGVkUHJvcGVydHldID0gJycpO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZUZpbHRlclN0YXRlKGV2ZW50KSB7XG4gICAgdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5pbnRlcmZhY2VPZ2NGaWx0ZXJzLmZpbmQoXG4gICAgICAoZikgPT4gZi5maWx0ZXJpZCA9PT0gdGhpcy5jdXJyZW50RmlsdGVyLmZpbHRlcmlkXG4gICAgKS5hY3RpdmUgPSBldmVudC5jaGVja2VkO1xuICAgIHRoaXMucmVmcmVzaEZpbHRlcnMoKTtcbiAgfVxuXG4gIGRlbGV0ZUZpbHRlcigpIHtcbiAgICBjb25zdCBvZ2NGaWx0ZXJzOiBPZ2NGaWx0ZXJzT3B0aW9ucyA9IHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnM7XG4gICAgb2djRmlsdGVycy5pbnRlcmZhY2VPZ2NGaWx0ZXJzID0gb2djRmlsdGVycy5pbnRlcmZhY2VPZ2NGaWx0ZXJzLmZpbHRlcihcbiAgICAgIChmKSA9PiBmLmZpbHRlcmlkICE9PSB0aGlzLmN1cnJlbnRGaWx0ZXIuZmlsdGVyaWRcbiAgICApO1xuICAgIHRoaXMucmVmcmVzaEZpbHRlcnMoKTtcbiAgfVxuXG4gIGNoYW5nZUxvZ2ljYWwobG9naWNhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5jdXJyZW50RmlsdGVyLnBhcmVudExvZ2ljYWwgPSBsb2dpY2FsO1xuICAgIHRoaXMucmVmcmVzaEZpbHRlcnMoKTtcbiAgfVxuXG4gIGNoYW5nZU9wZXJhdG9yKG9wZXJhdG9yOiBzdHJpbmcpIHtcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXIub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXJJc1NwYXRpYWwoKTtcblxuICAgIGlmIChcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlcklzU3BhdGlhbCQudmFsdWUgJiZcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlci53a3RfZ2VvbWV0cnkubGVuZ3RoID09PSAwXG4gICAgKSB7XG4gICAgICB0aGlzLmNoYW5nZVNwYXRpYWxTZWxlY3Rvcih0aGlzLmN1cnJlbnRGaWx0ZXIuaWdvU3BhdGlhbFNlbGVjdG9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZWZyZXNoRmlsdGVycygpO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZUZpZWxkKGZpZWxkOiBzdHJpbmcpIHtcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXIucHJvcGVydHlOYW1lID0gZmllbGQ7XG4gICAgdGhpcy5zZWxlY3RlZEZpZWxkJC5uZXh0KFxuICAgICAgdGhpcy5maWVsZHMkLnZhbHVlLmZpbmQoKGYpID0+IGYubmFtZSA9PT0gdGhpcy5jdXJyZW50RmlsdGVyLnByb3BlcnR5TmFtZSlcbiAgICApO1xuICAgIHRoaXMucmVmcmVzaEZpbHRlcnMoKTtcbiAgfVxuXG4gIC8vIElzc3VlIHdpdGggbWFwc2VydmVyIDcuMiBhbmQgUG9zdGdpcyBsYXllcnMuIEZpeGVkIGluIDcuNFxuICAvLyBEdWUgdG8gdGhpcyBpc3N1ZSwgdGhlIGNoZWNrYm94IGlzIGhpZGUuXG4gIGNoYW5nZUNhc2VTZW5zaXRpdmUobWF0Y2hDYXNlKSB7XG4gICAgdGhpcy5jdXJyZW50RmlsdGVyLm1hdGNoQ2FzZSA9IG1hdGNoQ2FzZS5jaGVja2VkO1xuICAgIHRoaXMucmVmcmVzaEZpbHRlcnMoKTtcbiAgfVxuXG4gIGNoYW5nZVByb3BlcnR5KHZhbHVlOiBhbnksIHBvcz86IG51bWJlciwgcmVmcmVzaEZpbHRlciA9IHRydWUpIHtcbiAgICBjb25zdCBkZXRlY3RlZFByb3BlcnR5ID0gdGhpcy5kZXRlY3RQcm9wZXJ0eShwb3MpO1xuICAgIGlmIChkZXRlY3RlZFByb3BlcnR5KSB7XG4gICAgICB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLmludGVyZmFjZU9nY0ZpbHRlcnMuZmluZChcbiAgICAgICAgKGYpID0+IGYuZmlsdGVyaWQgPT09IHRoaXMuY3VycmVudEZpbHRlci5maWx0ZXJpZFxuICAgICAgKVtkZXRlY3RlZFByb3BlcnR5XSA9IHZhbHVlO1xuXG4gICAgICBpZiAocmVmcmVzaEZpbHRlcikge1xuICAgICAgICB0aGlzLnJlZnJlc2hGaWx0ZXJzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlTnVtZXJpY1Byb3BlcnR5KHZhbHVlLCBwb3M6IG51bWJlcikge1xuICAgIHRoaXMuY2hhbmdlUHJvcGVydHkocGFyc2VGbG9hdCh2YWx1ZSksIHBvcyk7XG4gIH1cblxuICBjaGFuZ2VTcGF0aWFsU2VsZWN0b3IodmFsdWU6IGFueSkge1xuICAgIHRoaXMuY3VycmVudEZpbHRlci5pZ29TcGF0aWFsU2VsZWN0b3IgPSB2YWx1ZTtcblxuICAgIGlmICh2YWx1ZSA9PT0gJ2ZpeGVkRXh0ZW50Jykge1xuICAgICAgdGhpcy5jaGFuZ2VNYXBFeHRlbnRHZW9tZXRyeShmYWxzZSk7XG4gICAgfVxuICAgIHRoaXMuY3VycmVudEZpbHRlcklzU3BhdGlhbCgpO1xuICAgIHRoaXMucmVmcmVzaEZpbHRlcnMoKTtcbiAgfVxuXG4gIGNoYW5nZVNOUkModmFsdWU6IGFueSkge1xuICAgIHRoaXMuc25yYyA9IHZhbHVlO1xuICAgIHRoaXMuY2hhbmdlU05SQ0dlb21ldHJ5KCk7XG4gIH1cblxuICBjaGFuZ2VTTlJDR2VvbWV0cnkoKSB7XG4gICAgY29uc3QgaW50ZXJmYWNlT2djRmlsdGVyID1cbiAgICAgIHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuaW50ZXJmYWNlT2djRmlsdGVycy5maW5kKFxuICAgICAgICAoZikgPT4gZi5maWx0ZXJpZCA9PT0gdGhpcy5jdXJyZW50RmlsdGVyLmZpbHRlcmlkXG4gICAgICApO1xuICAgIGlmICghaW50ZXJmYWNlT2djRmlsdGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc25yYyAmJiB0aGlzLmN1cnJlbnRGaWx0ZXIuaWdvU3BhdGlhbFNlbGVjdG9yID09PSAnc25yYycpIHtcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlci53a3RfZ2VvbWV0cnkgPSB0aGlzLndrdFNlcnZpY2Uuc25yY1RvV2t0KFxuICAgICAgICB0aGlzLnNucmMsXG4gICAgICAgIHRoaXMubWFwLnByb2plY3Rpb25cbiAgICAgICkud2t0UG9seTtcbiAgICB9XG4gICAgdGhpcy5yZWZyZXNoRmlsdGVycygpO1xuICB9XG5cbiAgY2hhbmdlTWFwRXh0ZW50R2VvbWV0cnkocmVmcmVzaDogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBjb25zdCBpbnRlcmZhY2VPZ2NGaWx0ZXIgPVxuICAgICAgdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5pbnRlcmZhY2VPZ2NGaWx0ZXJzLmZpbmQoXG4gICAgICAgIChmKSA9PiBmLmZpbHRlcmlkID09PSB0aGlzLmN1cnJlbnRGaWx0ZXIuZmlsdGVyaWRcbiAgICAgICk7XG4gICAgaWYgKCFpbnRlcmZhY2VPZ2NGaWx0ZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jdXJyZW50RmlsdGVyLmlnb1NwYXRpYWxTZWxlY3RvciA9PT0gJ2ZpeGVkRXh0ZW50Jykge1xuICAgICAgdGhpcy5jdXJyZW50RmlsdGVyLndrdF9nZW9tZXRyeSA9IHRoaXMud2t0U2VydmljZS5leHRlbnRUb1drdChcbiAgICAgICAgdGhpcy5tYXAucHJvamVjdGlvbixcbiAgICAgICAgdGhpcy5tYXAudmlld0NvbnRyb2xsZXIuZ2V0RXh0ZW50KCksXG4gICAgICAgIHRoaXMubWFwLnByb2plY3Rpb25cbiAgICAgICkud2t0UG9seTtcbiAgICB9XG4gICAgaWYgKHJlZnJlc2gpIHtcbiAgICAgIHRoaXMucmVmcmVzaEZpbHRlcnMoKTtcbiAgICB9XG4gIH1cblxuICBkZXRlY3RQcm9wZXJ0eShwb3M/OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHN3aXRjaCAodGhpcy5jdXJyZW50RmlsdGVyLm9wZXJhdG9yKSB7XG4gICAgICBjYXNlIE9nY0ZpbHRlck9wZXJhdG9yLlByb3BlcnR5SXNOb3RFcXVhbFRvOlxuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzRXF1YWxUbzpcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc0dyZWF0ZXJUaGFuOlxuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzR3JlYXRlclRoYW5PckVxdWFsVG86XG4gICAgICBjYXNlIE9nY0ZpbHRlck9wZXJhdG9yLlByb3BlcnR5SXNMZXNzVGhhbjpcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc0xlc3NUaGFuT3JFcXVhbFRvOlxuICAgICAgICByZXR1cm4gJ2V4cHJlc3Npb24nO1xuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzTGlrZTpcbiAgICAgICAgcmV0dXJuICdwYXR0ZXJuJztcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc0JldHdlZW46XG4gICAgICAgIHJldHVybiBwb3MgJiYgcG9zID09PSAxXG4gICAgICAgICAgPyAnbG93ZXJCb3VuZGFyeSdcbiAgICAgICAgICA6IHBvcyAmJiBwb3MgPT09IDJcbiAgICAgICAgICAgID8gJ3VwcGVyQm91bmRhcnknXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3IuRHVyaW5nOlxuICAgICAgICByZXR1cm4gcG9zICYmIHBvcyA9PT0gMVxuICAgICAgICAgID8gJ2JlZ2luJ1xuICAgICAgICAgIDogcG9zICYmIHBvcyA9PT0gMlxuICAgICAgICAgICAgPyAnZW5kJ1xuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjdXJyZW50RmlsdGVySXNTcGF0aWFsKCkge1xuICAgIGxldCBpc1NwYXRpYWwgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5jdXJyZW50RmlsdGVyKSB7XG4gICAgICBpc1NwYXRpYWwgPVxuICAgICAgICBbXG4gICAgICAgICAgT2djRmlsdGVyT3BlcmF0b3IuQ29udGFpbnMsXG4gICAgICAgICAgT2djRmlsdGVyT3BlcmF0b3IuSW50ZXJzZWN0cyxcbiAgICAgICAgICBPZ2NGaWx0ZXJPcGVyYXRvci5XaXRoaW5cbiAgICAgICAgXS5pbmRleE9mKHRoaXMuY3VycmVudEZpbHRlci5vcGVyYXRvcikgIT09IC0xO1xuICAgIH1cbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXJJc1NwYXRpYWwkLm5leHQoaXNTcGF0aWFsKTtcbiAgfVxuXG4gIGlzVGVtcG9yYWxPcGVyYXRvcigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jdXJyZW50RmlsdGVyLm9wZXJhdG9yLnRvTG93ZXJDYXNlKCkgPT09XG4gICAgICB0aGlzLm9nY0ZpbHRlck9wZXJhdG9yLkR1cmluZy50b0xvd2VyQ2FzZSgpXG4gICAgKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm9nYy1maWx0ZXItZm9ybS1jb250YWluZXJcIj5cbiAgPG1hdC1jaGVja2JveFxuICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXG4gICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8uZmlsdGVyLnRvZ2dsZUZpbHRlclN0YXRlJyB8IHRyYW5zbGF0ZVwiXG4gICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgKGNoYW5nZSk9XCJ0b2dnbGVGaWx0ZXJTdGF0ZSgkZXZlbnQpXCJcbiAgICBbY2hlY2tlZF09XCJjdXJyZW50RmlsdGVyLmFjdGl2ZVwiXG4gID5cbiAgPC9tYXQtY2hlY2tib3g+XG5cbiAgPG1hdC1mb3JtLWZpZWxkXG4gICAgW25nQ2xhc3NdPVwie1xuICAgICAgbG9naWNhbDpcbiAgICAgICAgYWN0aXZlRmlsdGVycy5pbmRleE9mKGN1cnJlbnRGaWx0ZXIpICE9PSAwICYmXG4gICAgICAgIGN1cnJlbnRGaWx0ZXIuYWN0aXZlID09PSB0cnVlLFxuICAgICAgbG9naWNhbEhpZGRlbjpcbiAgICAgICAgYWN0aXZlRmlsdGVycy5pbmRleE9mKGN1cnJlbnRGaWx0ZXIpID09PSAwIHx8XG4gICAgICAgIGN1cnJlbnRGaWx0ZXIuYWN0aXZlICE9PSB0cnVlXG4gICAgfVwiXG4gID5cbiAgICA8bWF0LXNlbGVjdFxuICAgICAgW2Rpc2FibGVkXT1cIiFjdXJyZW50RmlsdGVyLmFjdGl2ZVwiXG4gICAgICBbdmFsdWVdPVwiY3VycmVudEZpbHRlci5wYXJlbnRMb2dpY2FsXCJcbiAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJhYm92ZVwiXG4gICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgIFttYXRUb29sdGlwXT1cIlxuICAgICAgICBjdXJyZW50RmlsdGVyLnBhcmVudExvZ2ljYWxcbiAgICAgICAgICA/ICgnaWdvLmdlby5vcGVyYXRvcnMudG9vbHRpcC4nICsgY3VycmVudEZpbHRlci5wYXJlbnRMb2dpY2FsXG4gICAgICAgICAgICB8IHRyYW5zbGF0ZSlcbiAgICAgICAgICA6ICcnXG4gICAgICBcIlxuICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJjaGFuZ2VMb2dpY2FsKCRldmVudC52YWx1ZSlcIlxuICAgID5cbiAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgIFt2YWx1ZV09XCJvZ2NGaWx0ZXJPcGVyYXRvci5BbmRcIlxuICAgICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYWJvdmVcIlxuICAgICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8ub3BlcmF0b3JzLnRvb2x0aXAuQW5kJyB8IHRyYW5zbGF0ZVwiXG4gICAgICA+XG4gICAgICAgIHt7ICdpZ28uZ2VvLm9wZXJhdG9ycy5BbmQnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L21hdC1vcHRpb24+XG4gICAgICA8bWF0LW9wdGlvblxuICAgICAgICBbdmFsdWVdPVwib2djRmlsdGVyT3BlcmF0b3IuT3JcIlxuICAgICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYWJvdmVcIlxuICAgICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8ub3BlcmF0b3JzLnRvb2x0aXAuT3InIHwgdHJhbnNsYXRlXCJcbiAgICAgID5cbiAgICAgICAge3sgJ2lnby5nZW8ub3BlcmF0b3JzLk9yJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9tYXQtb3B0aW9uPlxuICAgIDwvbWF0LXNlbGVjdD5cbiAgPC9tYXQtZm9ybS1maWVsZD5cblxuICA8bWF0LWZvcm0tZmllbGRcbiAgICBjbGFzcz1cImZpZWxkXCJcbiAgICAqbmdJZj1cIlxuICAgICAgKGN1cnJlbnRGaWx0ZXJJc1NwYXRpYWwkIHwgYXN5bmMpID09PSBmYWxzZSAmJlxuICAgICAgKGZpZWxkcyQgfCBhc3luYykgJiZcbiAgICAgIChmaWVsZHMkIHwgYXN5bmMpLmxlbmd0aCA+IDAgJiZcbiAgICAgIChmaWVsZHMkIHwgYXN5bmMpWzBdLm5hbWUgIT09ICcnXG4gICAgXCJcbiAgICAobW91c2VlbnRlcik9XCJpbnB1dENsZWFyYWJsZSA9ICdzZWxlY3RGaWVsZCdcIlxuICAgIChtb3VzZWxlYXZlKT1cImlucHV0Q2xlYXJhYmxlID0gdW5kZWZpbmVkXCJcbiAgICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsXCJcbiAgPlxuICAgIDxpbnB1dFxuICAgICAgbWF0SW5wdXRcbiAgICAgIFtwbGFjZWhvbGRlcl09XCInaWdvLmdlby5zb3VyY2VGaWVsZHMuc2VsZWN0RmllbGQnIHwgdHJhbnNsYXRlXCJcbiAgICAgIFtkaXNhYmxlZF09XCIhY3VycmVudEZpbHRlci5hY3RpdmVcIlxuICAgICAgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvQ29tcGxldGVGaWVsZFwiXG4gICAgICBbdmFsdWVdPVwiKHNlbGVjdGVkRmllbGQkIHwgYXN5bmMpID8gKHNlbGVjdGVkRmllbGQkIHwgYXN5bmMpLmFsaWFzIDogJydcIlxuICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImFib3ZlXCJcbiAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgICAgW21hdFRvb2x0aXBdPVwiXG4gICAgICAgIChzZWxlY3RlZEZpZWxkJCB8IGFzeW5jKVxuICAgICAgICAgID8gKHNlbGVjdGVkRmllbGQkIHwgYXN5bmMpLmFsaWFzXG4gICAgICAgICAgOiAoJ2lnby5nZW8uc291cmNlRmllbGRzLnNlbGVjdEZpZWxkJyB8IHRyYW5zbGF0ZSlcbiAgICAgIFwiXG4gICAgICAoaW5wdXQpPVwidXBkYXRlRmllbGRzTGlzdCgkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiXG4gICAgLz5cbiAgICA8bWF0LWF1dG9jb21wbGV0ZVxuICAgICAgI2F1dG9Db21wbGV0ZUZpZWxkPVwibWF0QXV0b2NvbXBsZXRlXCJcbiAgICAgIChvcHRpb25TZWxlY3RlZCk9XCJjaGFuZ2VGaWVsZCgkZXZlbnQub3B0aW9uLmlkKVwiXG4gICAgPlxuICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgKm5nRm9yPVwibGV0IGZpZWxkIG9mIGZpbHRlcmVkRmllbGRzJCB8IGFzeW5jXCJcbiAgICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICAgIFt2YWx1ZV09XCJmaWVsZC5hbGlhc1wiXG4gICAgICAgIFtpZF09XCJmaWVsZC5uYW1lXCJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiZmllbGQuYWxpYXNcIlxuICAgICAgPlxuICAgICAgICB7eyBmaWVsZC5hbGlhcyB9fVxuICAgICAgPC9tYXQtb3B0aW9uPlxuICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cbiAgICA8YnV0dG9uXG4gICAgICAqbmdJZj1cIlxuICAgICAgICBjdXJyZW50RmlsdGVyLnByb3BlcnR5TmFtZSAmJlxuICAgICAgICBpbnB1dENsZWFyYWJsZSA9PT0gJ3NlbGVjdEZpZWxkJyAmJlxuICAgICAgICBjdXJyZW50RmlsdGVyLmFjdGl2ZVxuICAgICAgXCJcbiAgICAgIG1hdFN1ZmZpeFxuICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICBhcmlhLWxhYmVsPVwiQ2xlYXJcIlxuICAgICAgW2Rpc2FibGVkXT1cIiFjdXJyZW50RmlsdGVyLmFjdGl2ZVwiXG4gICAgICAoY2xpY2spPVwiY2xlYXJTZWxlY3RlZEZpZWxkKClcIlxuICAgID5cbiAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwiY2xvc2VcIj48L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gIDxtYXQtZm9ybS1maWVsZFxuICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgIG9wZXJhdG9yOiAoY3VycmVudEZpbHRlcklzU3BhdGlhbCQgfCBhc3luYykgPT09IGZhbHNlLFxuICAgICAgZHVhbElucHV0OiAoY3VycmVudEZpbHRlcklzU3BhdGlhbCQgfCBhc3luYylcbiAgICB9XCJcbiAgICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsXCJcbiAgPlxuICAgIDxtYXQtc2VsZWN0XG4gICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxuICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICBbbWF0VG9vbHRpcF09XCJcbiAgICAgICAgY3VycmVudEZpbHRlci5vcGVyYXRvclxuICAgICAgICAgID8gKCdpZ28uZ2VvLm9wZXJhdG9ycy50b29sdGlwLicgKyBjdXJyZW50RmlsdGVyLm9wZXJhdG9yIHwgdHJhbnNsYXRlKVxuICAgICAgICAgIDogKCdpZ28uZ2VvLmZpbHRlci5zZWxlY3RPcGVyYXRvcicgfCB0cmFuc2xhdGUpXG4gICAgICBcIlxuICAgICAgW2Rpc2FibGVkXT1cIiFjdXJyZW50RmlsdGVyLmFjdGl2ZVwiXG4gICAgICBbdmFsdWVdPVwiY3VycmVudEZpbHRlci5vcGVyYXRvclwiXG4gICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cImNoYW5nZU9wZXJhdG9yKCRldmVudC52YWx1ZSlcIlxuICAgID5cbiAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICpuZ0Zvcj1cImxldCBvcGVyYXRvciBvZiBvZ2NGaWx0ZXJPcGVyYXRvcnMkIHwgYXN5bmMgfCBrZXl2YWx1ZVwiXG4gICAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJhYm92ZVwiXG4gICAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgICAgICBbdmFsdWVdPVwib3BlcmF0b3Iua2V5XCJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8ub3BlcmF0b3JzLnRvb2x0aXAuJyArIG9wZXJhdG9yLmtleSB8IHRyYW5zbGF0ZVwiXG4gICAgICA+XG4gICAgICAgIHt7ICdpZ28uZ2VvLm9wZXJhdG9ycy4nICsgb3BlcmF0b3Iua2V5IHwgdHJhbnNsYXRlIH19XG4gICAgICA8L21hdC1vcHRpb24+XG4gICAgPC9tYXQtc2VsZWN0PlxuICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gIDxtYXQtZm9ybS1maWVsZFxuICAgIGNsYXNzPVwic3BhdGlhbFNlbGVjdG9yXCJcbiAgICAqbmdJZj1cImN1cnJlbnRGaWx0ZXJJc1NwYXRpYWwkIHwgYXN5bmNcIlxuICA+XG4gICAgPG1hdC1zZWxlY3RcbiAgICAgIFtkaXNhYmxlZF09XCIhY3VycmVudEZpbHRlci5hY3RpdmVcIlxuICAgICAgW3ZhbHVlXT1cImN1cnJlbnRGaWx0ZXIuaWdvU3BhdGlhbFNlbGVjdG9yXCJcbiAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwiY2hhbmdlU3BhdGlhbFNlbGVjdG9yKCRldmVudC52YWx1ZSlcIlxuICAgID5cbiAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICpuZ0Zvcj1cImxldCBpZ29TcGF0aWFsU2VsZWN0b3Igb2YgaWdvU3BhdGlhbFNlbGVjdG9yc1wiXG4gICAgICAgIFt2YWx1ZV09XCJpZ29TcGF0aWFsU2VsZWN0b3IudHlwZVwiXG4gICAgICA+XG4gICAgICAgIHt7ICdpZ28uZ2VvLnNwYXRpYWxTZWxlY3Rvci4nICsgaWdvU3BhdGlhbFNlbGVjdG9yLnR5cGUgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICA8L21hdC1zZWxlY3Q+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgPG1hdC1mb3JtLWZpZWxkXG4gICAgY2xhc3M9XCJzaW5nbGVJbnB1dFwiXG4gICAgKm5nSWY9XCJbJ2V4cHJlc3Npb24nLCAncGF0dGVybiddLmluZGV4T2YoZGV0ZWN0UHJvcGVydHkoKSkgIT09IC0xXCJcbiAgICAobW91c2VlbnRlcik9XCJpbnB1dENsZWFyYWJsZSA9ICdzZWxlY3RQcm9wZXJ0eSdcIlxuICAgIChtb3VzZWxlYXZlKT1cImlucHV0Q2xlYXJhYmxlID0gdW5kZWZpbmVkXCJcbiAgICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsXCJcbiAgPlxuICAgIDxpbnB1dFxuICAgICAgbWF0SW5wdXRcbiAgICAgIFtwbGFjZWhvbGRlcl09XCInaWdvLmdlby5maWx0ZXIucGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXCJcbiAgICAgIFtkaXNhYmxlZF09XCIhY3VycmVudEZpbHRlci5hY3RpdmVcIlxuICAgICAgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvQ29tcGxldGVWYWx1ZXNcIlxuICAgICAgW3ZhbHVlXT1cIlxuICAgICAgICBkZXRlY3RQcm9wZXJ0eSgpID09PSAnZXhwcmVzc2lvbidcbiAgICAgICAgICA/IGN1cnJlbnRGaWx0ZXIuZXhwcmVzc2lvblxuICAgICAgICAgIDogY3VycmVudEZpbHRlci5wYXR0ZXJuXG4gICAgICBcIlxuICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImFib3ZlXCJcbiAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgICAgW21hdFRvb2x0aXBdPVwiXG4gICAgICAgIGRldGVjdFByb3BlcnR5KCkgPT09ICdleHByZXNzaW9uJ1xuICAgICAgICAgID8gY3VycmVudEZpbHRlci5leHByZXNzaW9uIHx8ICcnXG4gICAgICAgICAgOiBjdXJyZW50RmlsdGVyLnBhdHRlcm4gfHwgJydcbiAgICAgIFwiXG4gICAgICAoaW5wdXQpPVwidXBkYXRlVmFsdWVzTGlzdCgkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiXG4gICAgLz5cbiAgICA8bWF0LWF1dG9jb21wbGV0ZVxuICAgICAgI2F1dG9Db21wbGV0ZVZhbHVlcz1cIm1hdEF1dG9jb21wbGV0ZVwiXG4gICAgICAob3B0aW9uU2VsZWN0ZWQpPVwiY2hhbmdlUHJvcGVydHkoJGV2ZW50Lm9wdGlvbi52YWx1ZSlcIlxuICAgID5cbiAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiBmaWx0ZXJlZFZhbHVlcyQgfCBhc3luY1wiXG4gICAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgICAgICBbdmFsdWVdPVwidmFsdWVcIlxuICAgICAgICBbbWF0VG9vbHRpcF09XCJ2YWx1ZVwiXG4gICAgICA+XG4gICAgICAgIHt7IHZhbHVlIH19XG4gICAgICA8L21hdC1vcHRpb24+XG4gICAgPC9tYXQtYXV0b2NvbXBsZXRlPlxuICAgIDxidXR0b25cbiAgICAgICpuZ0lmPVwiXG4gICAgICAgIGlzQ2xlYXJhYmxlKCkgJiZcbiAgICAgICAgaW5wdXRDbGVhcmFibGUgPT09ICdzZWxlY3RQcm9wZXJ0eScgJiZcbiAgICAgICAgY3VycmVudEZpbHRlci5hY3RpdmVcbiAgICAgIFwiXG4gICAgICBtYXRTdWZmaXhcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgYXJpYS1sYWJlbD1cIkNsZWFyXCJcbiAgICAgIFtkaXNhYmxlZF09XCIhY3VycmVudEZpbHRlci5hY3RpdmVcIlxuICAgICAgKGNsaWNrKT1cImNsZWFyUHJvcGVydHkoKVwiXG4gICAgPlxuICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJjbG9zZVwiPjwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgPGRpdiBjbGFzcz1cImlnby1sYXllci1idXR0b24tZ3JvdXBcIj5cbiAgICA8YnV0dG9uXG4gICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgIGNvbGxhcHNpYmxlQnV0dG9uXG4gICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxuICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5maWx0ZXIucmVtb3ZlRmlsdGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICBjb2xvcj1cIndhcm5cIlxuICAgICAgKGNsaWNrKT1cImRlbGV0ZUZpbHRlcigpXCJcbiAgICA+XG4gICAgICA8bWF0LWljb24gc3ZnSWNvbj1cImRlbGV0ZVwiPjwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuXG4gIDxtYXQtZm9ybS1maWVsZFxuICAgIGNsYXNzPVwic25yY1wiXG4gICAgKm5nSWY9XCJcbiAgICAgIChjdXJyZW50RmlsdGVySXNTcGF0aWFsJCB8IGFzeW5jKSAmJlxuICAgICAgY3VycmVudEZpbHRlci5pZ29TcGF0aWFsU2VsZWN0b3IgPT09ICdzbnJjJ1xuICAgIFwiXG4gICAgKG1vdXNlZW50ZXIpPVwiaW5wdXRDbGVhcmFibGUgPSAnc2VsZWN0U05SQydcIlxuICAgIChtb3VzZWxlYXZlKT1cImlucHV0Q2xlYXJhYmxlID0gdW5kZWZpbmVkXCJcbiAgICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsXCJcbiAgPlxuICAgIDxpbnB1dFxuICAgICAgbWF0SW5wdXRcbiAgICAgIFtwbGFjZWhvbGRlcl09XCInaWdvLmdlby5maWx0ZXIucGxhY2Vob2xkZXJTbnJjJyB8IHRyYW5zbGF0ZVwiXG4gICAgICBbdmFsdWVdPVwiY3VycmVudEZpbHRlci5pZ29TTlJDXCJcbiAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJhYm92ZVwiXG4gICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgIFttYXRUb29sdGlwXT1cImN1cnJlbnRGaWx0ZXIuaWdvU05SQyA/IGN1cnJlbnRGaWx0ZXIuaWdvU05SQyA6ICcnXCJcbiAgICAgIChpbnB1dCk9XCJjaGFuZ2VTTlJDKCRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUpXCJcbiAgICAvPlxuICAgIDxidXR0b25cbiAgICAgICpuZ0lmPVwiY3VycmVudEZpbHRlci5pZ29TTlJDXCJcbiAgICAgIG1hdFN1ZmZpeFxuICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICBhcmlhLWxhYmVsPVwiQ2xlYXJcIlxuICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAhY3VycmVudEZpbHRlci5hY3RpdmUgJiZcbiAgICAgICAgaW5wdXRDbGVhcmFibGUgPT09ICdzZWxlY3RTTlJDJyAmJlxuICAgICAgICBjdXJyZW50RmlsdGVyLmFjdGl2ZVxuICAgICAgXCJcbiAgICAgIChjbGljayk9XCJjdXJyZW50RmlsdGVyLmlnb1NOUkMgPSAnJ1wiXG4gICAgPlxuICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJjbG9zZVwiPjwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwiXG4gICAgICAoY3VycmVudEZpbHRlcklzU3BhdGlhbCQgfCBhc3luYykgJiZcbiAgICAgIGN1cnJlbnRGaWx0ZXIuaWdvU3BhdGlhbFNlbGVjdG9yID09PSAnZml4ZWRFeHRlbnQnXG4gICAgXCJcbiAgPlxuICAgIDxidXR0b25cbiAgICAgIFtkaXNhYmxlZF09XCIhY3VycmVudEZpbHRlci5hY3RpdmVcIlxuICAgICAgKm5nSWY9XCJjdXJyZW50RmlsdGVyLmlnb1NwYXRpYWxTZWxlY3RvciA9PT0gJ2ZpeGVkRXh0ZW50J1wiXG4gICAgICBtYXRTdWZmaXhcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgW2Rpc2FibGVkXT1cIiFjdXJyZW50RmlsdGVyLmFjdGl2ZVwiXG4gICAgICAoY2xpY2spPVwiY2hhbmdlTWFwRXh0ZW50R2VvbWV0cnkoKVwiXG4gICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxuICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5zcGF0aWFsU2VsZWN0b3IuYnRuU2V0RXh0ZW50JyB8IHRyYW5zbGF0ZVwiXG4gICAgPlxuICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJhcnJvdy1leHBhbmQtYWxsXCI+PC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cIm9nYy1maWx0ZXItZm9ybS1jb250YWluZXJcIj5cbiAgPG1hdC1mb3JtLWZpZWxkXG4gICAgY2xhc3M9XCJkdWFsSW5wdXRcIlxuICAgICpuZ0lmPVwiXG4gICAgICAhaXNUZW1wb3JhbE9wZXJhdG9yKCkgJiZcbiAgICAgIFsnbG93ZXJCb3VuZGFyeScsICdiZWdpbiddLmluZGV4T2YoZGV0ZWN0UHJvcGVydHkoMSkpICE9PSAtMVxuICAgIFwiXG4gICAgKG1vdXNlZW50ZXIpPVwiaW5wdXRDbGVhcmFibGUgPSAnc2VsZWN0UHJvcGVydHkxJ1wiXG4gICAgKG1vdXNlbGVhdmUpPVwiaW5wdXRDbGVhcmFibGUgPSB1bmRlZmluZWRcIlxuICAgIFtmbG9hdExhYmVsXT1cImZsb2F0TGFiZWxcIlxuICA+XG4gICAgPGlucHV0XG4gICAgICBtYXRJbnB1dFxuICAgICAgW3BsYWNlaG9sZGVyXT1cIidpZ28uZ2VvLmZpbHRlci5wbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgW2Rpc2FibGVkXT1cIiFjdXJyZW50RmlsdGVyLmFjdGl2ZVwiXG4gICAgICBbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9EdWFsVmFsdWVPcGVyYXRvcjFcIlxuICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICBbdmFsdWVdPVwiXG4gICAgICAgIGRldGVjdFByb3BlcnR5KDEpID09PSAnbG93ZXJCb3VuZGFyeSdcbiAgICAgICAgICA/IGN1cnJlbnRGaWx0ZXIubG93ZXJCb3VuZGFyeVxuICAgICAgICAgIDogY3VycmVudEZpbHRlci5iZWdpblxuICAgICAgXCJcbiAgICAgIChpbnB1dCk9XCJ1cGRhdGVWYWx1ZXNMaXN0KCRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUsIDEpXCJcbiAgICAvPlxuICAgIDxtYXQtYXV0b2NvbXBsZXRlXG4gICAgICAjYXV0b0R1YWxWYWx1ZU9wZXJhdG9yMT1cIm1hdEF1dG9jb21wbGV0ZVwiXG4gICAgICAob3B0aW9uU2VsZWN0ZWQpPVwiY2hhbmdlTnVtZXJpY1Byb3BlcnR5KCRldmVudC5vcHRpb24udmFsdWUsIDEpXCJcbiAgICA+XG4gICAgICA8bWF0LW9wdGlvblxuICAgICAgICAqbmdGb3I9XCJsZXQgdmFsdWUgb2YgZmlsdGVyZWRWYWx1ZXMkIHwgYXN5bmNcIlxuICAgICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgICAgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwidmFsdWVcIlxuICAgICAgPlxuICAgICAgICB7eyB2YWx1ZSB9fVxuICAgICAgPC9tYXQtb3B0aW9uPlxuICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cbiAgICA8YnV0dG9uXG4gICAgICAqbmdJZj1cIlxuICAgICAgICBpc0NsZWFyYWJsZSgxKSAmJlxuICAgICAgICBpbnB1dENsZWFyYWJsZSA9PT0gJ3NlbGVjdFByb3BlcnR5MScgJiZcbiAgICAgICAgY3VycmVudEZpbHRlci5hY3RpdmVcbiAgICAgIFwiXG4gICAgICBtYXRTdWZmaXhcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgYXJpYS1sYWJlbD1cIkNsZWFyXCJcbiAgICAgIFtkaXNhYmxlZF09XCIhY3VycmVudEZpbHRlci5hY3RpdmVcIlxuICAgICAgKGNsaWNrKT1cImNsZWFyUHJvcGVydHkoMSlcIlxuICAgID5cbiAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwiY2xvc2VcIj48L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gIDxtYXQtZm9ybS1maWVsZFxuICAgIGNsYXNzPVwiZHVhbElucHV0XCJcbiAgICAqbmdJZj1cIlxuICAgICAgIWlzVGVtcG9yYWxPcGVyYXRvcigpICYmXG4gICAgICBbJ3VwcGVyQm91bmRhcnknLCAnZW5kJ10uaW5kZXhPZihkZXRlY3RQcm9wZXJ0eSgyKSkgIT09IC0xXG4gICAgXCJcbiAgICAobW91c2VlbnRlcik9XCJpbnB1dENsZWFyYWJsZSA9ICdzZWxlY3RQcm9wZXJ0eTInXCJcbiAgICAobW91c2VsZWF2ZSk9XCJpbnB1dENsZWFyYWJsZSA9IHVuZGVmaW5lZFwiXG4gICAgW2Zsb2F0TGFiZWxdPVwiZmxvYXRMYWJlbFwiXG4gID5cbiAgICA8aW5wdXRcbiAgICAgIG1hdElucHV0XG4gICAgICBbcGxhY2Vob2xkZXJdPVwiJ2lnby5nZW8uZmlsdGVyLnBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICBbZGlzYWJsZWRdPVwiIWN1cnJlbnRGaWx0ZXIuYWN0aXZlXCJcbiAgICAgIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b0R1YWxWYWx1ZU9wZXJhdG9yMlwiXG4gICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgIFt2YWx1ZV09XCJcbiAgICAgICAgZGV0ZWN0UHJvcGVydHkoMikgPT09ICd1cHBlckJvdW5kYXJ5J1xuICAgICAgICAgID8gY3VycmVudEZpbHRlci51cHBlckJvdW5kYXJ5XG4gICAgICAgICAgOiBjdXJyZW50RmlsdGVyLmVuZFxuICAgICAgXCJcbiAgICAgIChpbnB1dCk9XCJ1cGRhdGVWYWx1ZXNMaXN0KCRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUsIDIpXCJcbiAgICAvPlxuICAgIDxtYXQtYXV0b2NvbXBsZXRlXG4gICAgICAjYXV0b0R1YWxWYWx1ZU9wZXJhdG9yMj1cIm1hdEF1dG9jb21wbGV0ZVwiXG4gICAgICAob3B0aW9uU2VsZWN0ZWQpPVwiY2hhbmdlTnVtZXJpY1Byb3BlcnR5KCRldmVudC5vcHRpb24udmFsdWUsIDIpXCJcbiAgICA+XG4gICAgICA8bWF0LW9wdGlvblxuICAgICAgICAqbmdGb3I9XCJsZXQgdmFsdWUgb2YgZmlsdGVyZWRWYWx1ZXMkIHwgYXN5bmNcIlxuICAgICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgICAgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwidmFsdWVcIlxuICAgICAgPlxuICAgICAgICB7eyB2YWx1ZSB9fVxuICAgICAgPC9tYXQtb3B0aW9uPlxuICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cbiAgICA8YnV0dG9uXG4gICAgICAqbmdJZj1cIlxuICAgICAgICBpc0NsZWFyYWJsZSgyKSAmJlxuICAgICAgICBpbnB1dENsZWFyYWJsZSA9PT0gJ3NlbGVjdFByb3BlcnR5MicgJiZcbiAgICAgICAgY3VycmVudEZpbHRlci5hY3RpdmVcbiAgICAgIFwiXG4gICAgICBtYXRTdWZmaXhcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgYXJpYS1sYWJlbD1cIkNsZWFyXCJcbiAgICAgIFtkaXNhYmxlZF09XCIhY3VycmVudEZpbHRlci5hY3RpdmVcIlxuICAgICAgKGNsaWNrKT1cImNsZWFyUHJvcGVydHkoMilcIlxuICAgID5cbiAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwiY2xvc2VcIj48L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuPC9kaXY+XG5cbjxpZ28tb2djLWZpbHRlci10aW1lXG4gICpuZ0lmPVwiaXNUZW1wb3JhbE9wZXJhdG9yKClcIlxuICBbZGF0YXNvdXJjZV09XCJkYXRhc291cmNlXCJcbiAgW2N1cnJlbnRGaWx0ZXJdPVwiY3VycmVudEZpbHRlclwiXG4gIChjaGFuZ2VQcm9wZXJ0eSk9XCJjaGFuZ2VQcm9wZXJ0eSgkZXZlbnQudmFsdWUsICRldmVudC5wb3MpXCJcbj5cbjwvaWdvLW9nYy1maWx0ZXItdGltZT5cbiJdfQ==
324
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2djLWZpbHRlci1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ZpbHRlci9vZ2MtZmlsdGVyLWZvcm0vb2djLWZpbHRlci1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ZpbHRlci9vZ2MtZmlsdGVyLWZvcm0vb2djLWZpbHRlci1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBRUwsa0JBQWtCLEVBQ25CLE1BQU0sOEJBQThCLENBQUM7QUFDdEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFeEQsT0FBTyxFQUFFLGVBQWUsRUFBYyxFQUFFLEVBQUUs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QUFTOytCQUNFLHFCQUFxQixjQUduQixJQUFJLFdBQ1A7d0JBQ1AsaUJBQWlCO3dCQUNqQixnQkFBZ0I7d0JBQ2hCLGtCQUFrQjt3QkFDbEIsT0FBTzt3QkFDUCxlQUFlO3dCQUNmLGVBQWU7d0JBQ2YsSUFBSTt3QkFDSixjQUFjO3dCQUNkLHFCQUFxQjt3QkFDckIsS0FBSzt3QkFDTCxlQUFlO3dCQUNmLGFBQWE7d0JBQ2Isc0JBQXNCO3dCQUN0QixTQUFTO3dCQUNULFlBQVk7d0JBQ1osaUJBQWlCO3FCQUNsQjsrRUF1QlEsY0FBYztzQkFBdEIsS0FBSztnQkFFRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLEdBQUc7c0JBQVgsS0FBSztnQkFFRyxhQUFhO3NCQUFyQixLQUFLO2dCQXNCRyxVQUFVO3NCQUFsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXN5bmNQaXBlLCBLZXlWYWx1ZVBpcGUsIE5nQ2xhc3MsIE5nRm9yLCBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0QXV0b2NvbXBsZXRlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRDaGVja2JveE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcbmltcG9ydCB7IE1hdE9wdGlvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHtcbiAgRmxvYXRMYWJlbFR5cGUsXG4gIE1hdEZvcm1GaWVsZE1vZHVsZVxufSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHsgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcblxuaW1wb3J0IHsgSWdvTGFuZ3VhZ2VNb2R1bGUgfSBmcm9tICdAaWdvMi9jb3JlL2xhbmd1YWdlJztcblxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBTb3VyY2VGaWVsZHNPcHRpb25zUGFyYW1zIH0gZnJvbSAnLi4vLi4vZGF0YXNvdXJjZS9zaGFyZWQvZGF0YXNvdXJjZXMvZGF0YXNvdXJjZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgT2djRmlsdGVyV3JpdGVyIH0gZnJvbSAnLi4vLi4vZmlsdGVyL3NoYXJlZC9vZ2MtZmlsdGVyJztcbmltcG9ydCB7IE9nY0ZpbHRlck9wZXJhdG9yIH0gZnJvbSAnLi4vLi4vZmlsdGVyL3NoYXJlZC9vZ2MtZmlsdGVyLmVudW0nO1xuaW1wb3J0IHtcbiAgT2djRmlsdGVyYWJsZURhdGFTb3VyY2UsXG4gIE9nY0ZpbHRlcnNPcHRpb25zXG59IGZyb20gJy4uLy4uL2ZpbHRlci9zaGFyZWQvb2djLWZpbHRlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTWFwQmFzZSB9IGZyb20gJy4uLy4uL21hcCc7XG5pbXBvcnQgeyBXa3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vd2t0L3NoYXJlZC93a3Quc2VydmljZSc7XG5pbXBvcnQgeyBPZ2NGaWx0ZXJUaW1lQ29tcG9uZW50IH0gZnJvbSAnLi4vb2djLWZpbHRlci10aW1lL29nYy1maWx0ZXItdGltZS5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdpZ28tb2djLWZpbHRlci1mb3JtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL29nYy1maWx0ZXItZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL29nYy1maWx0ZXItZm9ybS5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgTWF0Q2hlY2tib3hNb2R1bGUsXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgTmdDbGFzcyxcbiAgICBNYXRTZWxlY3RNb2R1bGUsXG4gICAgTWF0T3B0aW9uTW9kdWxlLFxuICAgIE5nSWYsXG4gICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgTWF0QXV0b2NvbXBsZXRlTW9kdWxlLFxuICAgIE5nRm9yLFxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIE9nY0ZpbHRlclRpbWVDb21wb25lbnQsXG4gICAgQXN5bmNQaXBlLFxuICAgIEtleVZhbHVlUGlwZSxcbiAgICBJZ29MYW5ndWFnZU1vZHVsZVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIE9nY0ZpbHRlckZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBvZ2NGaWx0ZXJPcGVyYXRvciA9IE9nY0ZpbHRlck9wZXJhdG9yO1xuICBmaWx0ZXJlZFZhbHVlcyQ6IE9ic2VydmFibGU8c3RyaW5nW10+O1xuICBmaWx0ZXJlZEZpZWxkcyQ6IE9ic2VydmFibGU8U291cmNlRmllbGRzT3B0aW9uc1BhcmFtc1tdPjtcbiAgcHVibGljIGFsbE9nY0ZpbHRlck9wZXJhdG9ycztcbiAgcHVibGljIG9nY0ZpbHRlck9wZXJhdG9ycyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHsgW2tleTogc3RyaW5nXTogYW55IH0+KFxuICAgIHVuZGVmaW5lZFxuICApO1xuICBwdWJsaWMgaWdvU3BhdGlhbFNlbGVjdG9ycztcbiAgcHVibGljIHZhbHVlID0gJyc7XG4gIHB1YmxpYyBpbnB1dE9wZXJhdG9yO1xuICBwdWJsaWMgc2VsZWN0ZWRGaWVsZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNvdXJjZUZpZWxkc09wdGlvbnNQYXJhbXM+KFxuICAgIHVuZGVmaW5lZFxuICApO1xuICBwdWJsaWMgZmllbGRzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U291cmNlRmllbGRzT3B0aW9uc1BhcmFtc1tdPihbXSk7XG4gIHB1YmxpYyBjb2xvciA9ICdwcmltYXJ5JztcbiAgcHVibGljIGRpc2FibGVkO1xuICBwdWJsaWMgY3VycmVudEZpbHRlcklzU3BhdGlhbCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIGRlZmF1bHRTdGVwTWlsbGlzZWNvbmQgPSA2MDAwO1xuICBwdWJsaWMgaW5wdXRDbGVhcmFibGU6IHN0cmluZztcblxuICBASW5wdXQoKSByZWZyZXNoRmlsdGVyczogKCkgPT4gdm9pZDtcblxuICBASW5wdXQoKSBkYXRhc291cmNlOiBPZ2NGaWx0ZXJhYmxlRGF0YVNvdXJjZTtcblxuICBASW5wdXQoKSBtYXA6IE1hcEJhc2U7XG5cbiAgQElucHV0KCkgY3VycmVudEZpbHRlcjogYW55O1xuXG4gIHNldCBzbnJjKHZhbHVlOiBhbnkpIHtcbiAgICBjb25zdCBjaGVja1NOUkM1MGsgPSAvXlxcZHsyfVthLWxdWzAsMV1bMC05XSQvZ2k7XG4gICAgY29uc3QgY2hlY2tTTlJDMjUwayA9IC9eXFxkezJ9W2EtcF0kL2dpO1xuICAgIGNvbnN0IGNoZWNrU05SQzFtID0gL15cXGR7Mn0kL2dpO1xuICAgIGlmIChcbiAgICAgIGNoZWNrU05SQzFtLnRlc3QodmFsdWUpIHx8XG4gICAgICBjaGVja1NOUkMyNTBrLnRlc3QodmFsdWUpIHx8XG4gICAgICBjaGVja1NOUkM1MGsudGVzdCh2YWx1ZSlcbiAgICApIHtcbiAgICAgIHRoaXMuX3NucmMgPSB2YWx1ZTtcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlci5pZ29TTlJDID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHNucmMoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fc25yYztcbiAgfVxuXG4gIHByaXZhdGUgX3NucmMgPSAnJztcblxuICBASW5wdXQoKSBmbG9hdExhYmVsOiBGbG9hdExhYmVsVHlwZTtcblxuICBnZXQgYWN0aXZlRmlsdGVycygpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5pbnRlcmZhY2VPZ2NGaWx0ZXJzLmZpbHRlcihcbiAgICAgIChmKSA9PiBmLmFjdGl2ZSA9PT0gdHJ1ZVxuICAgICk7XG4gIH1cblxuICBnZXQgYWxsb3dlZE9wZXJhdG9ycygpIHtcbiAgICByZXR1cm4gbmV3IE9nY0ZpbHRlcldyaXRlcigpLmNvbXB1dGVBbGxvd2VkT3BlcmF0b3JzKFxuICAgICAgdGhpcy5maWVsZHMkLnZhbHVlLFxuICAgICAgdGhpcy5jdXJyZW50RmlsdGVyLnByb3BlcnR5TmFtZSxcbiAgICAgIHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuYWxsb3dlZE9wZXJhdG9yc1R5cGVcbiAgICApO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSB3a3RTZXJ2aWNlOiBXa3RTZXJ2aWNlKSB7XG4gICAgLy8gVE9ETzogRmlsdGVyIHBlcm1pdHRlZCBvcGVyYXRvciBiYXNlZCBvbiB3ZnNjYXBhYmlsaXRpZXNcbiAgICAvLyBOZWVkIHRvIHdvcmsgb24gcmVnZXggb24gWE1MIGNhcGFiaWxpdGllcyBiZWNhdXNlXG4gICAgLy8gY29tYXBhcmlzb24gb3BlcmF0b3IncyBuYW1lIHZhcmllcyBiZXR3ZWVuIFdGUyBzZXJ2ZXJzLi4uXG4gICAgLy8gRXg6IElzTnVsbCB2cyBQcm9wZXJ0eUlzTnVsbCB2cyBJc05pbCAuLi5cbiAgICB0aGlzLmFsbE9nY0ZpbHRlck9wZXJhdG9ycyA9IG5ldyBPZ2NGaWx0ZXJXcml0ZXIoKS5vcGVyYXRvcnM7XG4gICAgdGhpcy5vZ2NGaWx0ZXJPcGVyYXRvcnMkLm5leHQodGhpcy5hbGxPZ2NGaWx0ZXJPcGVyYXRvcnMpO1xuICAgIHRoaXMuaWdvU3BhdGlhbFNlbGVjdG9ycyA9IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2ZpeGVkRXh0ZW50J1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ3NucmMnXG4gICAgICB9XG4gICAgXTtcbiAgICAvLyBUT0RPOiBzZWxlY3RGZWF0dXJlICYgZHJhd0ZlYXR1cmVcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5zb3VyY2VGaWVsZHMpIHtcbiAgICAgIGNvbnN0IHNGaWVsZHMgPSB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5zb3VyY2VGaWVsZHMuZmlsdGVyKFxuICAgICAgICAoc2YpID0+XG4gICAgICAgICAgc2YuZXhjbHVkZUZyb21PZ2NGaWx0ZXJzID09PSB1bmRlZmluZWQgfHwgIXNmLmV4Y2x1ZGVGcm9tT2djRmlsdGVyc1xuICAgICAgKTtcbiAgICAgIHNGaWVsZHMubWFwKChzZnMpID0+IHtcbiAgICAgICAgaWYgKHNmcy52YWx1ZXMpIHtcbiAgICAgICAgICBzZnMudmFsdWVzLnNvcnQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLmZpZWxkcyQubmV4dChzRmllbGRzKTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZUZpZWxkc0xpc3QoKTtcbiAgICB0aGlzLnNlbGVjdGVkRmllbGQkLm5leHQoXG4gICAgICB0aGlzLmZpZWxkcyQudmFsdWUuZmluZCgoZikgPT4gZi5uYW1lID09PSB0aGlzLmN1cnJlbnRGaWx0ZXIucHJvcGVydHlOYW1lKVxuICAgICk7XG4gICAgdGhpcy51cGRhdGVWYWx1ZXNMaXN0KCk7XG4gICAgdGhpcy5zZWxlY3RlZEZpZWxkJC5zdWJzY3JpYmUoKGYpID0+IHtcbiAgICAgIHRoaXMub2djRmlsdGVyT3BlcmF0b3JzJC5uZXh0KHRoaXMuYWxsb3dlZE9wZXJhdG9ycyk7XG4gICAgICBpZiAoXG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuYWxsb3dlZE9wZXJhdG9ycykuaW5kZXhPZihcbiAgICAgICAgICB0aGlzLmN1cnJlbnRGaWx0ZXIub3BlcmF0b3JcbiAgICAgICAgKSA9PT0gLTFcbiAgICAgICkge1xuICAgICAgICB0aGlzLmN1cnJlbnRGaWx0ZXIub3BlcmF0b3IgPSBPYmplY3Qua2V5cyh0aGlzLmFsbG93ZWRPcGVyYXRvcnMpWzBdO1xuICAgICAgICB0aGlzLmN1cnJlbnRGaWx0ZXIub3BlcmF0b3IgPSBPYmplY3Qua2V5cyh0aGlzLmFsbG93ZWRPcGVyYXRvcnMpWzBdO1xuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVWYWx1ZXNMaXN0KCk7XG4gICAgfSk7XG4gICAgdGhpcy5jdXJyZW50RmlsdGVySXNTcGF0aWFsKCk7XG4gIH1cblxuICB1cGRhdGVGaWVsZHNMaXN0KHZhbHVlPzogc3RyaW5nKSB7XG4gICAgdGhpcy5maWx0ZXJlZEZpZWxkcyQgPVxuICAgICAgdmFsdWUgJiYgdmFsdWUubGVuZ3RoID4gMCA/IG9mKHRoaXMuX2ZpbHRlckZpZWxkcyh2YWx1ZSkpIDogdGhpcy5maWVsZHMkO1xuICAgIGlmICh0aGlzLmZpZWxkcyQudmFsdWUuZmluZCgoZikgPT4gZi5uYW1lID09PSB2YWx1ZSkpIHtcbiAgICAgIHRoaXMuY2hhbmdlRmllbGQodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVZhbHVlc0xpc3QodmFsdWU/OiBzdHJpbmcsIHBvcz86IG51bWJlcikge1xuICAgIHRoaXMuZmlsdGVyZWRWYWx1ZXMkID1cbiAgICAgIHZhbHVlICYmIHZhbHVlLmxlbmd0aCA+IDBcbiAgICAgICAgPyBvZih0aGlzLl9maWx0ZXJWYWx1ZXModmFsdWUpKVxuICAgICAgICA6IHRoaXMuc2VsZWN0ZWRGaWVsZCQudmFsdWVcbiAgICAgICAgICA/IG9mKHRoaXMuc2VsZWN0ZWRGaWVsZCQudmFsdWUudmFsdWVzKVxuICAgICAgICAgIDogb2YoW10pO1xuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggPj0gMSkge1xuICAgICAgdGhpcy5jaGFuZ2VQcm9wZXJ0eSh2YWx1ZSwgcG9zKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9maWx0ZXJGaWVsZHModmFsdWU6IHN0cmluZyk6IFNvdXJjZUZpZWxkc09wdGlvbnNQYXJhbXNbXSB7XG4gICAgY29uc3Qga2V5d29yZFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgIHZhbHVlLm5vcm1hbGl6ZSgnTkZEJykucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpLFxuICAgICAgJ2dpJ1xuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuZmllbGRzJC52YWx1ZS5maWx0ZXIoKHZhbCkgPT5cbiAgICAgIGtleXdvcmRSZWdleC50ZXN0KFxuICAgICAgICB2YWwuYWxpYXMubm9ybWFsaXplKCdORkQnKS5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJylcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfZmlsdGVyVmFsdWVzKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qga2V5d29yZFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgIHZhbHVlXG4gICAgICAgIC50b1N0cmluZygpXG4gICAgICAgIC5ub3JtYWxpemUoJ05GRCcpXG4gICAgICAgIC5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJyksXG4gICAgICAnZ2knXG4gICAgKTtcblxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRmllbGQkLnZhbHVlPy52YWx1ZXM/LmZpbHRlcihcbiAgICAgICh2YWwpID0+XG4gICAgICAgIHZhbCAmJlxuICAgICAgICBrZXl3b3JkUmVnZXgudGVzdChcbiAgICAgICAgICB2YWxcbiAgICAgICAgICAgIC50b1N0cmluZygpXG4gICAgICAgICAgICAubm9ybWFsaXplKCdORkQnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKVxuICAgICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGNsZWFyU2VsZWN0ZWRGaWVsZCgpIHtcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXIucHJvcGVydHlOYW1lID0gJyc7XG4gICAgdGhpcy5zZWxlY3RlZEZpZWxkJC5uZXh0KHVuZGVmaW5lZCk7XG4gICAgdGhpcy5jbGVhclByb3BlcnR5KCk7XG4gIH1cblxuICBpc0NsZWFyYWJsZShwb3M/OiBudW1iZXIpIHtcbiAgICBjb25zdCBkZXRlY3RlZFByb3BlcnR5ID0gdGhpcy5kZXRlY3RQcm9wZXJ0eShwb3MpO1xuICAgIGlmIChkZXRlY3RlZFByb3BlcnR5KSB7XG4gICAgICByZXR1cm4gdGhpcy5jdXJyZW50RmlsdGVyW2RldGVjdGVkUHJvcGVydHldO1xuICAgIH1cbiAgfVxuICBjbGVhclByb3BlcnR5KHBvcz86IG51bWJlcikge1xuICAgIC8vIHRoaXMuYXV0b0NvbXBsZXRlSW5wdXRWYWx1ZXMuY2xvc2VQYW5lbCgpO1xuICAgIGNvbnN0IGRldGVjdGVkUHJvcGVydHkgPSB0aGlzLmRldGVjdFByb3BlcnR5KHBvcyk7XG4gICAgaWYgKGRldGVjdGVkUHJvcGVydHkpIHtcbiAgICAgIHJldHVybiAodGhpcy5jdXJyZW50RmlsdGVyW2RldGVjdGVkUHJvcGVydHldID0gJycpO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZUZpbHRlclN0YXRlKGV2ZW50KSB7XG4gICAgdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5pbnRlcmZhY2VPZ2NGaWx0ZXJzLmZpbmQoXG4gICAgICAoZikgPT4gZi5maWx0ZXJpZCA9PT0gdGhpcy5jdXJyZW50RmlsdGVyLmZpbHRlcmlkXG4gICAgKS5hY3RpdmUgPSBldmVudC5jaGVja2VkO1xuICAgIHRoaXMucmVmcmVzaEZpbHRlcnMoKTtcbiAgfVxuXG4gIGRlbGV0ZUZpbHRlcigpIHtcbiAgICBjb25zdCBvZ2NGaWx0ZXJzOiBPZ2NGaWx0ZXJzT3B0aW9ucyA9IHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnM7XG4gICAgb2djRmlsdGVycy5pbnRlcmZhY2VPZ2NGaWx0ZXJzID0gb2djRmlsdGVycy5pbnRlcmZhY2VPZ2NGaWx0ZXJzLmZpbHRlcihcbiAgICAgIChmKSA9PiBmLmZpbHRlcmlkICE9PSB0aGlzLmN1cnJlbnRGaWx0ZXIuZmlsdGVyaWRcbiAgICApO1xuICAgIHRoaXMucmVmcmVzaEZpbHRlcnMoKTtcbiAgfVxuXG4gIGNoYW5nZUxvZ2ljYWwobG9naWNhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5jdXJyZW50RmlsdGVyLnBhcmVudExvZ2ljYWwgPSBsb2dpY2FsO1xuICAgIHRoaXMucmVmcmVzaEZpbHRlcnMoKTtcbiAgfVxuXG4gIGNoYW5nZU9wZXJhdG9yKG9wZXJhdG9yOiBzdHJpbmcpIHtcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXIub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXJJc1NwYXRpYWwoKTtcblxuICAgIGlmIChcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlcklzU3BhdGlhbCQudmFsdWUgJiZcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlci53a3RfZ2VvbWV0cnkubGVuZ3RoID09PSAwXG4gICAgKSB7XG4gICAgICB0aGlzLmNoYW5nZVNwYXRpYWxTZWxlY3Rvcih0aGlzLmN1cnJlbnRGaWx0ZXIuaWdvU3BhdGlhbFNlbGVjdG9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZWZyZXNoRmlsdGVycygpO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZUZpZWxkKGZpZWxkOiBzdHJpbmcpIHtcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXIucHJvcGVydHlOYW1lID0gZmllbGQ7XG4gICAgdGhpcy5zZWxlY3RlZEZpZWxkJC5uZXh0KFxuICAgICAgdGhpcy5maWVsZHMkLnZhbHVlLmZpbmQoKGYpID0+IGYubmFtZSA9PT0gdGhpcy5jdXJyZW50RmlsdGVyLnByb3BlcnR5TmFtZSlcbiAgICApO1xuICAgIHRoaXMucmVmcmVzaEZpbHRlcnMoKTtcbiAgfVxuXG4gIC8vIElzc3VlIHdpdGggbWFwc2VydmVyIDcuMiBhbmQgUG9zdGdpcyBsYXllcnMuIEZpeGVkIGluIDcuNFxuICAvLyBEdWUgdG8gdGhpcyBpc3N1ZSwgdGhlIGNoZWNrYm94IGlzIGhpZGUuXG4gIGNoYW5nZUNhc2VTZW5zaXRpdmUobWF0Y2hDYXNlKSB7XG4gICAgdGhpcy5jdXJyZW50RmlsdGVyLm1hdGNoQ2FzZSA9IG1hdGNoQ2FzZS5jaGVja2VkO1xuICAgIHRoaXMucmVmcmVzaEZpbHRlcnMoKTtcbiAgfVxuXG4gIGNoYW5nZVByb3BlcnR5KHZhbHVlOiBhbnksIHBvcz86IG51bWJlciwgcmVmcmVzaEZpbHRlciA9IHRydWUpIHtcbiAgICBjb25zdCBkZXRlY3RlZFByb3BlcnR5ID0gdGhpcy5kZXRlY3RQcm9wZXJ0eShwb3MpO1xuICAgIGlmIChkZXRlY3RlZFByb3BlcnR5KSB7XG4gICAgICB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLmludGVyZmFjZU9nY0ZpbHRlcnMuZmluZChcbiAgICAgICAgKGYpID0+IGYuZmlsdGVyaWQgPT09IHRoaXMuY3VycmVudEZpbHRlci5maWx0ZXJpZFxuICAgICAgKVtkZXRlY3RlZFByb3BlcnR5XSA9IHZhbHVlO1xuXG4gICAgICBpZiAocmVmcmVzaEZpbHRlcikge1xuICAgICAgICB0aGlzLnJlZnJlc2hGaWx0ZXJzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlTnVtZXJpY1Byb3BlcnR5KHZhbHVlLCBwb3M6IG51bWJlcikge1xuICAgIHRoaXMuY2hhbmdlUHJvcGVydHkocGFyc2VGbG9hdCh2YWx1ZSksIHBvcyk7XG4gIH1cblxuICBjaGFuZ2VTcGF0aWFsU2VsZWN0b3IodmFsdWU6IGFueSkge1xuICAgIHRoaXMuY3VycmVudEZpbHRlci5pZ29TcGF0aWFsU2VsZWN0b3IgPSB2YWx1ZTtcblxuICAgIGlmICh2YWx1ZSA9PT0gJ2ZpeGVkRXh0ZW50Jykge1xuICAgICAgdGhpcy5jaGFuZ2VNYXBFeHRlbnRHZW9tZXRyeShmYWxzZSk7XG4gICAgfVxuICAgIHRoaXMuY3VycmVudEZpbHRlcklzU3BhdGlhbCgpO1xuICAgIHRoaXMucmVmcmVzaEZpbHRlcnMoKTtcbiAgfVxuXG4gIGNoYW5nZVNOUkModmFsdWU6IGFueSkge1xuICAgIHRoaXMuc25yYyA9IHZhbHVlO1xuICAgIHRoaXMuY2hhbmdlU05SQ0dlb21ldHJ5KCk7XG4gIH1cblxuICBjaGFuZ2VTTlJDR2VvbWV0cnkoKSB7XG4gICAgY29uc3QgaW50ZXJmYWNlT2djRmlsdGVyID1cbiAgICAgIHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuaW50ZXJmYWNlT2djRmlsdGVycy5maW5kKFxuICAgICAgICAoZikgPT4gZi5maWx0ZXJpZCA9PT0gdGhpcy5jdXJyZW50RmlsdGVyLmZpbHRlcmlkXG4gICAgICApO1xuICAgIGlmICghaW50ZXJmYWNlT2djRmlsdGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc25yYyAmJiB0aGlzLmN1cnJlbnRGaWx0ZXIuaWdvU3BhdGlhbFNlbGVjdG9yID09PSAnc25yYycpIHtcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlci53a3RfZ2VvbWV0cnkgPSB0aGlzLndrdFNlcnZpY2Uuc25yY1RvV2t0KFxuICAgICAgICB0aGlzLnNucmMsXG4gICAgICAgIHRoaXMubWFwLnByb2plY3Rpb25cbiAgICAgICkud2t0UG9seTtcbiAgICB9XG4gICAgdGhpcy5yZWZyZXNoRmlsdGVycygpO1xuICB9XG5cbiAgY2hhbmdlTWFwRXh0ZW50R2VvbWV0cnkocmVmcmVzaDogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBjb25zdCBpbnRlcmZhY2VPZ2NGaWx0ZXIgPVxuICAgICAgdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5pbnRlcmZhY2VPZ2NGaWx0ZXJzLmZpbmQoXG4gICAgICAgIChmKSA9PiBmLmZpbHRlcmlkID09PSB0aGlzLmN1cnJlbnRGaWx0ZXIuZmlsdGVyaWRcbiAgICAgICk7XG4gICAgaWYgKCFpbnRlcmZhY2VPZ2NGaWx0ZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jdXJyZW50RmlsdGVyLmlnb1NwYXRpYWxTZWxlY3RvciA9PT0gJ2ZpeGVkRXh0ZW50Jykge1xuICAgICAgdGhpcy5jdXJyZW50RmlsdGVyLndrdF9nZW9tZXRyeSA9IHRoaXMud2t0U2VydmljZS5leHRlbnRUb1drdChcbiAgICAgICAgdGhpcy5tYXAucHJvamVjdGlvbixcbiAgICAgICAgdGhpcy5tYXAudmlld0NvbnRyb2xsZXIuZ2V0RXh0ZW50KCksXG4gICAgICAgIHRoaXMubWFwLnByb2plY3Rpb25cbiAgICAgICkud2t0UG9seTtcbiAgICB9XG4gICAgaWYgKHJlZnJlc2gpIHtcbiAgICAgIHRoaXMucmVmcmVzaEZpbHRlcnMoKTtcbiAgICB9XG4gIH1cblxuICBkZXRlY3RQcm9wZXJ0eShwb3M/OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHN3aXRjaCAodGhpcy5jdXJyZW50RmlsdGVyLm9wZXJhdG9yKSB7XG4gICAgICBjYXNlIE9nY0ZpbHRlck9wZXJhdG9yLlByb3BlcnR5SXNOb3RFcXVhbFRvOlxuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzRXF1YWxUbzpcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc0dyZWF0ZXJUaGFuOlxuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzR3JlYXRlclRoYW5PckVxdWFsVG86XG4gICAgICBjYXNlIE9nY0ZpbHRlck9wZXJhdG9yLlByb3BlcnR5SXNMZXNzVGhhbjpcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc0xlc3NUaGFuT3JFcXVhbFRvOlxuICAgICAgICByZXR1cm4gJ2V4cHJlc3Npb24nO1xuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzTGlrZTpcbiAgICAgICAgcmV0dXJuICdwYXR0ZXJuJztcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc0JldHdlZW46XG4gICAgICAgIHJldHVybiBwb3MgJiYgcG9zID09PSAxXG4gICAgICAgICAgPyAnbG93ZXJCb3VuZGFyeSdcbiAgICAgICAgICA6IHBvcyAmJiBwb3MgPT09IDJcbiAgICAgICAgICAgID8gJ3VwcGVyQm91bmRhcnknXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3IuRHVyaW5nOlxuICAgICAgICByZXR1cm4gcG9zICYmIHBvcyA9PT0gMVxuICAgICAgICAgID8gJ2JlZ2luJ1xuICAgICAgICAgIDogcG9zICYmIHBvcyA9PT0gMlxuICAgICAgICAgICAgPyAnZW5kJ1xuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjdXJyZW50RmlsdGVySXNTcGF0aWFsKCkge1xuICAgIGxldCBpc1NwYXRpYWwgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5jdXJyZW50RmlsdGVyKSB7XG4gICAgICBpc1NwYXRpYWwgPVxuICAgICAgICBbXG4gICAgICAgICAgT2djRmlsdGVyT3BlcmF0b3IuQ29udGFpbnMsXG4gICAgICAgICAgT2djRmlsdGVyT3BlcmF0b3IuSW50ZXJzZWN0cyxcbiAgICAgICAgICBPZ2NGaWx0ZXJPcGVyYXRvci5XaXRoaW5cbiAgICAgICAgXS5pbmRleE9mKHRoaXMuY3VycmVudEZpbHRlci5vcGVyYXRvcikgIT09IC0xO1xuICAgIH1cbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXJJc1NwYXRpYWwkLm5leHQoaXNTcGF0aWFsKTtcbiAgfVxuXG4gIGlzVGVtcG9yYWxPcGVyYXRvcigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jdXJyZW50RmlsdGVyLm9wZXJhdG9yLnRvTG93ZXJDYXNlKCkgPT09XG4gICAgICB0aGlzLm9nY0ZpbHRlck9wZXJhdG9yLkR1cmluZy50b0xvd2VyQ2FzZSgpXG4gICAgKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm9nYy1maWx0ZXItZm9ybS1jb250YWluZXJcIj5cbiAgPG1hdC1jaGVja2JveFxuICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXG4gICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8uZmlsdGVyLnRvZ2dsZUZpbHRlclN0YXRlJyB8IHRyYW5zbGF0ZVwiXG4gICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgKGNoYW5nZSk9XCJ0b2dnbGVGaWx0ZXJTdGF0ZSgkZXZlbnQpXCJcbiAgICBbY2hlY2tlZF09XCJjdXJyZW50RmlsdGVyLmFjdGl2ZVwiXG4gID5cbiAgPC9tYXQtY2hlY2tib3g+XG5cbiAgPG1hdC1mb3JtLWZpZWxkXG4gICAgW25nQ2xhc3NdPVwie1xuICAgICAgbG9naWNhbDpcbiAgICAgICAgYWN0aXZlRmlsdGVycy5pbmRleE9mKGN1cnJlbnRGaWx0ZXIpICE9PSAwICYmXG4gICAgICAgIGN1cnJlbnRGaWx0ZXIuYWN0aXZlID09PSB0cnVlLFxuICAgICAgbG9naWNhbEhpZGRlbjpcbiAgICAgICAgYWN0aXZlRmlsdGVycy5pbmRleE9mKGN1cnJlbnRGaWx0ZXIpID09PSAwIHx8XG4gICAgICAgIGN1cnJlbnRGaWx0ZXIuYWN0aXZlICE9PSB0cnVlXG4gICAgfVwiXG4gID5cbiAgICA8bWF0LXNlbGVjdFxuICAgICAgW2Rpc2FibGVkXT1cIiFjdXJyZW50RmlsdGVyLmFjdGl2ZVwiXG4gICAgICBbdmFsdWVdPVwiY3VycmVudEZpbHRlci5wYXJlbnRMb2dpY2FsXCJcbiAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJhYm92ZVwiXG4gICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgIFttYXRUb29sdGlwXT1cIlxuICAgICAgICBjdXJyZW50RmlsdGVyLnBhcmVudExvZ2ljYWxcbiAgICAgICAgICA/ICgnaWdvLmdlby5vcGVyYXRvcnMudG9vbHRpcC4nICsgY3VycmVudEZpbHRlci5wYXJlbnRMb2dpY2FsXG4gICAgICAgICAgICB8IHRyYW5zbGF0ZSlcbiAgICAgICAgICA6ICcnXG4gICAgICBcIlxuICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJjaGFuZ2VMb2dpY2FsKCRldmVudC52YWx1ZSlcIlxuICAgID5cbiAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgIFt2YWx1ZV09XCJvZ2NGaWx0ZXJPcGVyYXRvci5BbmRcIlxuICAgICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYWJvdmVcIlxuICAgICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8ub3BlcmF0b3JzLnRvb2x0aXAuQW5kJyB8IHRyYW5zbGF0ZVwiXG4gICAgICA+XG4gICAgICAgIHt7ICdpZ28uZ2VvLm9wZXJhdG9ycy5BbmQnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L21hdC1vcHRpb24+XG4gICAgICA8bWF0LW9wdGlvblxuICAgICAgICBbdmFsdWVdPVwib2djRmlsdGVyT3BlcmF0b3IuT3JcIlxuICAgICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYWJvdmVcIlxuICAgICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8ub3BlcmF0b3JzLnRvb2x0aXAuT3InIHwgdHJhbnNsYXRlXCJcbiAgICAgID5cbiAgICAgICAge3sgJ2lnby5nZW8ub3BlcmF0b3JzLk9yJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9tYXQtb3B0aW9uPlxuICAgIDwvbWF0LXNlbGVjdD5cbiAgPC9tYXQtZm9ybS1maWVsZD5cblxuICA8bWF0LWZvcm0tZmllbGRcbiAgICBjbGFzcz1cImZpZWxkXCJcbiAgICAqbmdJZj1cIlxuICAgICAgKGN1cnJlbnRGaWx0ZXJJc1NwYXRpYWwkIHwgYXN5bmMpID09PSBmYWxzZSAmJlxuICAgICAgKGZpZWxkcyQgfCBhc3luYykgJiZcbiAgICAgIChmaWVsZHMkIHwgYXN5bmMpLmxlbmd0aCA+IDAgJiZcbiAgICAgIChmaWVsZHMkIHwgYXN5bmMpWzBdLm5hbWUgIT09ICcnXG4gICAgXCJcbiAgICAobW91c2VlbnRlcik9XCJpbnB1dENsZWFyYWJsZSA9ICdzZWxlY3RGaWVsZCdcIlxuICAgIChtb3VzZWxlYXZlKT1cImlucHV0Q2xlYXJhYmxlID0gdW5kZWZpbmVkXCJcbiAgICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsXCJcbiAgPlxuICAgIDxpbnB1dFxuICAgICAgbWF0SW5wdXRcbiAgICAgIFtwbGFjZWhvbGRlcl09XCInaWdvLmdlby5zb3VyY2VGaWVsZHMuc2VsZWN0RmllbGQnIHwgdHJhbnNsYXRlXCJcbiAgICAgIFtkaXNhYmxlZF09XCIhY3VycmVudEZpbHRlci5hY3RpdmVcIlxuICAgICAgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvQ29tcGxldGVGaWVsZFwiXG4gICAgICBbdmFsdWVdPVwiKHNlbGVjdGVkRmllbGQkIHwgYXN5bmMpID8gKHNlbGVjdGVkRmllbGQkIHwgYXN5bmMpLmFsaWFzIDogJydcIlxuICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImFib3ZlXCJcbiAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgICAgW21hdFRvb2x0aXBdPVwiXG4gICAgICAgIChzZWxlY3RlZEZpZWxkJCB8IGFzeW5jKVxuICAgICAgICAgID8gKHNlbGVjdGVkRmllbGQkIHwgYXN5bmMpLmFsaWFzXG4gICAgICAgICAgOiAoJ2lnby5nZW8uc291cmNlRmllbGRzLnNlbGVjdEZpZWxkJyB8IHRyYW5zbGF0ZSlcbiAgICAgIFwiXG4gICAgICAoaW5wdXQpPVwidXBkYXRlRmllbGRzTGlzdCgkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiXG4gICAgLz5cbiAgICA8bWF0LWF1dG9jb21wbGV0ZVxuICAgICAgI2F1dG9Db21wbGV0ZUZpZWxkPVwibWF0QXV0b2NvbXBsZXRlXCJcbiAgICAgIChvcHRpb25TZWxlY3RlZCk9XCJjaGFuZ2VGaWVsZCgkZXZlbnQub3B0aW9uLmlkKVwiXG4gICAgPlxuICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgKm5nRm9yPVwibGV0IGZpZWxkIG9mIGZpbHRlcmVkRmllbGRzJCB8IGFzeW5jXCJcbiAgICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICAgIFt2YWx1ZV09XCJmaWVsZC5hbGlhc1wiXG4gICAgICAgIFtpZF09XCJmaWVsZC5uYW1lXCJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiZmllbGQuYWxpYXNcIlxuICAgICAgPlxuICAgICAgICB7eyBmaWVsZC5hbGlhcyB9fVxuICAgICAgPC9tYXQtb3B0aW9uPlxuICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cbiAgICA8YnV0dG9uXG4gICAgICAqbmdJZj1cIlxuICAgICAgICBjdXJyZW50RmlsdGVyLnByb3BlcnR5TmFtZSAmJlxuICAgICAgICBpbnB1dENsZWFyYWJsZSA9PT0gJ3NlbGVjdEZpZWxkJyAmJlxuICAgICAgICBjdXJyZW50RmlsdGVyLmFjdGl2ZVxuICAgICAgXCJcbiAgICAgIG1hdFN1ZmZpeFxuICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICBhcmlhLWxhYmVsPVwiQ2xlYXJcIlxuICAgICAgW2Rpc2FibGVkXT1cIiFjdXJyZW50RmlsdGVyLmFjdGl2ZVwiXG4gICAgICAoY2xpY2spPVwiY2xlYXJTZWxlY3RlZEZpZWxkKClcIlxuICAgID5cbiAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgPG1hdC1mb3JtLWZpZWxkXG4gICAgW25nQ2xhc3NdPVwie1xuICAgICAgb3BlcmF0b3I6IChjdXJyZW50RmlsdGVySXNTcGF0aWFsJCB8IGFzeW5jKSA9PT0gZmFsc2UsXG4gICAgICBkdWFsSW5wdXQ6IChjdXJyZW50RmlsdGVySXNTcGF0aWFsJCB8IGFzeW5jKVxuICAgIH1cIlxuICAgIFtmbG9hdExhYmVsXT1cImZsb2F0TGFiZWxcIlxuICA+XG4gICAgPG1hdC1zZWxlY3RcbiAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXG4gICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgIFttYXRUb29sdGlwXT1cIlxuICAgICAgICBjdXJyZW50RmlsdGVyLm9wZXJhdG9yXG4gICAgICAgICAgPyAoJ2lnby5nZW8ub3BlcmF0b3JzLnRvb2x0aXAuJyArIGN1cnJlbnRGaWx0ZXIub3BlcmF0b3IgfCB0cmFuc2xhdGUpXG4gICAgICAgICAgOiAoJ2lnby5nZW8uZmlsdGVyLnNlbGVjdE9wZXJhdG9yJyB8IHRyYW5zbGF0ZSlcbiAgICAgIFwiXG4gICAgICBbZGlzYWJsZWRdPVwiIWN1cnJlbnRGaWx0ZXIuYWN0aXZlXCJcbiAgICAgIFt2YWx1ZV09XCJjdXJyZW50RmlsdGVyLm9wZXJhdG9yXCJcbiAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwiY2hhbmdlT3BlcmF0b3IoJGV2ZW50LnZhbHVlKVwiXG4gICAgPlxuICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgKm5nRm9yPVwibGV0IG9wZXJhdG9yIG9mIG9nY0ZpbHRlck9wZXJhdG9ycyQgfCBhc3luYyB8IGtleXZhbHVlXCJcbiAgICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImFib3ZlXCJcbiAgICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICAgIFt2YWx1ZV09XCJvcGVyYXRvci5rZXlcIlxuICAgICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5vcGVyYXRvcnMudG9vbHRpcC4nICsgb3BlcmF0b3Iua2V5IHwgdHJhbnNsYXRlXCJcbiAgICAgID5cbiAgICAgICAge3sgJ2lnby5nZW8ub3BlcmF0b3JzLicgKyBvcGVyYXRvci5rZXkgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICA8L21hdC1zZWxlY3Q+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgPG1hdC1mb3JtLWZpZWxkXG4gICAgY2xhc3M9XCJzcGF0aWFsU2VsZWN0b3JcIlxuICAgICpuZ0lmPVwiY3VycmVudEZpbHRlcklzU3BhdGlhbCQgfCBhc3luY1wiXG4gID5cbiAgICA8bWF0LXNlbGVjdFxuICAgICAgW2Rpc2FibGVkXT1cIiFjdXJyZW50RmlsdGVyLmFjdGl2ZVwiXG4gICAgICBbdmFsdWVdPVwiY3VycmVudEZpbHRlci5pZ29TcGF0aWFsU2VsZWN0b3JcIlxuICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJjaGFuZ2VTcGF0aWFsU2VsZWN0b3IoJGV2ZW50LnZhbHVlKVwiXG4gICAgPlxuICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgKm5nRm9yPVwibGV0IGlnb1NwYXRpYWxTZWxlY3RvciBvZiBpZ29TcGF0aWFsU2VsZWN0b3JzXCJcbiAgICAgICAgW3ZhbHVlXT1cImlnb1NwYXRpYWxTZWxlY3Rvci50eXBlXCJcbiAgICAgID5cbiAgICAgICAge3sgJ2lnby5nZW8uc3BhdGlhbFNlbGVjdG9yLicgKyBpZ29TcGF0aWFsU2VsZWN0b3IudHlwZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9tYXQtb3B0aW9uPlxuICAgIDwvbWF0LXNlbGVjdD5cbiAgPC9tYXQtZm9ybS1maWVsZD5cblxuICA8bWF0LWZvcm0tZmllbGRcbiAgICBjbGFzcz1cInNpbmdsZUlucHV0XCJcbiAgICAqbmdJZj1cIlsnZXhwcmVzc2lvbicsICdwYXR0ZXJuJ10uaW5kZXhPZihkZXRlY3RQcm9wZXJ0eSgpKSAhPT0gLTFcIlxuICAgIChtb3VzZWVudGVyKT1cImlucHV0Q2xlYXJhYmxlID0gJ3NlbGVjdFByb3BlcnR5J1wiXG4gICAgKG1vdXNlbGVhdmUpPVwiaW5wdXRDbGVhcmFibGUgPSB1bmRlZmluZWRcIlxuICAgIFtmbG9hdExhYmVsXT1cImZsb2F0TGFiZWxcIlxuICA+XG4gICAgPGlucHV0XG4gICAgICBtYXRJbnB1dFxuICAgICAgW3BsYWNlaG9sZGVyXT1cIidpZ28uZ2VvLmZpbHRlci5wbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgW2Rpc2FibGVkXT1cIiFjdXJyZW50RmlsdGVyLmFjdGl2ZVwiXG4gICAgICBbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9Db21wbGV0ZVZhbHVlc1wiXG4gICAgICBbdmFsdWVdPVwiXG4gICAgICAgIGRldGVjdFByb3BlcnR5KCkgPT09ICdleHByZXNzaW9uJ1xuICAgICAgICAgID8gY3VycmVudEZpbHRlci5leHByZXNzaW9uXG4gICAgICAgICAgOiBjdXJyZW50RmlsdGVyLnBhdHRlcm5cbiAgICAgIFwiXG4gICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYWJvdmVcIlxuICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICBbbWF0VG9vbHRpcF09XCJcbiAgICAgICAgZGV0ZWN0UHJvcGVydHkoKSA9PT0gJ2V4cHJlc3Npb24nXG4gICAgICAgICAgPyBjdXJyZW50RmlsdGVyLmV4cHJlc3Npb24gfHwgJydcbiAgICAgICAgICA6IGN1cnJlbnRGaWx0ZXIucGF0dGVybiB8fCAnJ1xuICAgICAgXCJcbiAgICAgIChpbnB1dCk9XCJ1cGRhdGVWYWx1ZXNMaXN0KCRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUpXCJcbiAgICAvPlxuICAgIDxtYXQtYXV0b2NvbXBsZXRlXG4gICAgICAjYXV0b0NvbXBsZXRlVmFsdWVzPVwibWF0QXV0b2NvbXBsZXRlXCJcbiAgICAgIChvcHRpb25TZWxlY3RlZCk9XCJjaGFuZ2VQcm9wZXJ0eSgkZXZlbnQub3B0aW9uLnZhbHVlKVwiXG4gICAgPlxuICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgKm5nRm9yPVwibGV0IHZhbHVlIG9mIGZpbHRlcmVkVmFsdWVzJCB8IGFzeW5jXCJcbiAgICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgICAgIFttYXRUb29sdGlwXT1cInZhbHVlXCJcbiAgICAgID5cbiAgICAgICAge3sgdmFsdWUgfX1cbiAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICA8L21hdC1hdXRvY29tcGxldGU+XG4gICAgPGJ1dHRvblxuICAgICAgKm5nSWY9XCJcbiAgICAgICAgaXNDbGVhcmFibGUoKSAmJlxuICAgICAgICBpbnB1dENsZWFyYWJsZSA9PT0gJ3NlbGVjdFByb3BlcnR5JyAmJlxuICAgICAgICBjdXJyZW50RmlsdGVyLmFjdGl2ZVxuICAgICAgXCJcbiAgICAgIG1hdFN1ZmZpeFxuICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICBhcmlhLWxhYmVsPVwiQ2xlYXJcIlxuICAgICAgW2Rpc2FibGVkXT1cIiFjdXJyZW50RmlsdGVyLmFjdGl2ZVwiXG4gICAgICAoY2xpY2spPVwiY2xlYXJQcm9wZXJ0eSgpXCJcbiAgICA+XG4gICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gIDxkaXYgY2xhc3M9XCJpZ28tbGF5ZXItYnV0dG9uLWdyb3VwXCI+XG4gICAgPGJ1dHRvblxuICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICBjb2xsYXBzaWJsZUJ1dHRvblxuICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcbiAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8uZmlsdGVyLnJlbW92ZUZpbHRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgY29sb3I9XCJ3YXJuXCJcbiAgICAgIChjbGljayk9XCJkZWxldGVGaWx0ZXIoKVwiXG4gICAgPlxuICAgICAgPG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuXG4gIDxtYXQtZm9ybS1maWVsZFxuICAgIGNsYXNzPVwic25yY1wiXG4gICAgKm5nSWY9XCJcbiAgICAgIChjdXJyZW50RmlsdGVySXNTcGF0aWFsJCB8IGFzeW5jKSAmJlxuICAgICAgY3VycmVudEZpbHRlci5pZ29TcGF0aWFsU2VsZWN0b3IgPT09ICdzbnJjJ1xuICAgIFwiXG4gICAgKG1vdXNlZW50ZXIpPVwiaW5wdXRDbGVhcmFibGUgPSAnc2VsZWN0U05SQydcIlxuICAgIChtb3VzZWxlYXZlKT1cImlucHV0Q2xlYXJhYmxlID0gdW5kZWZpbmVkXCJcbiAgICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsXCJcbiAgPlxuICAgIDxpbnB1dFxuICAgICAgbWF0SW5wdXRcbiAgICAgIFtwbGFjZWhvbGRlcl09XCInaWdvLmdlby5maWx0ZXIucGxhY2Vob2xkZXJTbnJjJyB8IHRyYW5zbGF0ZVwiXG4gICAgICBbdmFsdWVdPVwiY3VycmVudEZpbHRlci5pZ29TTlJDXCJcbiAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJhYm92ZVwiXG4gICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgIFttYXRUb29sdGlwXT1cImN1cnJlbnRGaWx0ZXIuaWdvU05SQyA/IGN1cnJlbnRGaWx0ZXIuaWdvU05SQyA6ICcnXCJcbiAgICAgIChpbnB1dCk9XCJjaGFuZ2VTTlJDKCRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUpXCJcbiAgICAvPlxuICAgIDxidXR0b25cbiAgICAgICpuZ0lmPVwiY3VycmVudEZpbHRlci5pZ29TTlJDXCJcbiAgICAgIG1hdFN1ZmZpeFxuICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICBhcmlhLWxhYmVsPVwiQ2xlYXJcIlxuICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAhY3VycmVudEZpbHRlci5hY3RpdmUgJiZcbiAgICAgICAgaW5wdXRDbGVhcmFibGUgPT09ICdzZWxlY3RTTlJDJyAmJlxuICAgICAgICBjdXJyZW50RmlsdGVyLmFjdGl2ZVxuICAgICAgXCJcbiAgICAgIChjbGljayk9XCJjdXJyZW50RmlsdGVyLmlnb1NOUkMgPSAnJ1wiXG4gICAgPlxuICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9tYXQtZm9ybS1maWVsZD5cblxuICA8bmctY29udGFpbmVyXG4gICAgKm5nSWY9XCJcbiAgICAgIChjdXJyZW50RmlsdGVySXNTcGF0aWFsJCB8IGFzeW5jKSAmJlxuICAgICAgY3VycmVudEZpbHRlci5pZ29TcGF0aWFsU2VsZWN0b3IgPT09ICdmaXhlZEV4dGVudCdcbiAgICBcIlxuICA+XG4gICAgPGJ1dHRvblxuICAgICAgW2Rpc2FibGVkXT1cIiFjdXJyZW50RmlsdGVyLmFjdGl2ZVwiXG4gICAgICAqbmdJZj1cImN1cnJlbnRGaWx0ZXIuaWdvU3BhdGlhbFNlbGVjdG9yID09PSAnZml4ZWRFeHRlbnQnXCJcbiAgICAgIG1hdFN1ZmZpeFxuICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICBbZGlzYWJsZWRdPVwiIWN1cnJlbnRGaWx0ZXIuYWN0aXZlXCJcbiAgICAgIChjbGljayk9XCJjaGFuZ2VNYXBFeHRlbnRHZW9tZXRyeSgpXCJcbiAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXG4gICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLnNwYXRpYWxTZWxlY3Rvci5idG5TZXRFeHRlbnQnIHwgdHJhbnNsYXRlXCJcbiAgICA+XG4gICAgICA8bWF0LWljb24+em9vbV9vdXRfbWFwPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cIm9nYy1maWx0ZXItZm9ybS1jb250YWluZXJcIj5cbiAgPG1hdC1mb3JtLWZpZWxkXG4gICAgY2xhc3M9XCJkdWFsSW5wdXRcIlxuICAgICpuZ0lmPVwiXG4gICAgICAhaXNUZW1wb3JhbE9wZXJhdG9yKCkgJiZcbiAgICAgIFsnbG93ZXJCb3VuZGFyeScsICdiZWdpbiddLmluZGV4T2YoZGV0ZWN0UHJvcGVydHkoMSkpICE9PSAtMVxuICAgIFwiXG4gICAgKG1vdXNlZW50ZXIpPVwiaW5wdXRDbGVhcmFibGUgPSAnc2VsZWN0UHJvcGVydHkxJ1wiXG4gICAgKG1vdXNlbGVhdmUpPVwiaW5wdXRDbGVhcmFibGUgPSB1bmRlZmluZWRcIlxuICAgIFtmbG9hdExhYmVsXT1cImZsb2F0TGFiZWxcIlxuICA+XG4gICAgPGlucHV0XG4gICAgICBtYXRJbnB1dFxuICAgICAgW3BsYWNlaG9sZGVyXT1cIidpZ28uZ2VvLmZpbHRlci5wbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgW2Rpc2FibGVkXT1cIiFjdXJyZW50RmlsdGVyLmFjdGl2ZVwiXG4gICAgICBbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9EdWFsVmFsdWVPcGVyYXRvcjFcIlxuICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICBbdmFsdWVdPVwiXG4gICAgICAgIGRldGVjdFByb3BlcnR5KDEpID09PSAnbG93ZXJCb3VuZGFyeSdcbiAgICAgICAgICA/IGN1cnJlbnRGaWx0ZXIubG93ZXJCb3VuZGFyeVxuICAgICAgICAgIDogY3VycmVudEZpbHRlci5iZWdpblxuICAgICAgXCJcbiAgICAgIChpbnB1dCk9XCJ1cGRhdGVWYWx1ZXNMaXN0KCRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUsIDEpXCJcbiAgICAvPlxuICAgIDxtYXQtYXV0b2NvbXBsZXRlXG4gICAgICAjYXV0b0R1YWxWYWx1ZU9wZXJhdG9yMT1cIm1hdEF1dG9jb21wbGV0ZVwiXG4gICAgICAob3B0aW9uU2VsZWN0ZWQpPVwiY2hhbmdlTnVtZXJpY1Byb3BlcnR5KCRldmVudC5vcHRpb24udmFsdWUsIDEpXCJcbiAgICA+XG4gICAgICA8bWF0LW9wdGlvblxuICAgICAgICAqbmdGb3I9XCJsZXQgdmFsdWUgb2YgZmlsdGVyZWRWYWx1ZXMkIHwgYXN5bmNcIlxuICAgICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgICAgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwidmFsdWVcIlxuICAgICAgPlxuICAgICAgICB7eyB2YWx1ZSB9fVxuICAgICAgPC9tYXQtb3B0aW9uPlxuICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cbiAgICA8YnV0dG9uXG4gICAgICAqbmdJZj1cIlxuICAgICAgICBpc0NsZWFyYWJsZSgxKSAmJlxuICAgICAgICBpbnB1dENsZWFyYWJsZSA9PT0gJ3NlbGVjdFByb3BlcnR5MScgJiZcbiAgICAgICAgY3VycmVudEZpbHRlci5hY3RpdmVcbiAgICAgIFwiXG4gICAgICBtYXRTdWZmaXhcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgYXJpYS1sYWJlbD1cIkNsZWFyXCJcbiAgICAgIFtkaXNhYmxlZF09XCIhY3VycmVudEZpbHRlci5hY3RpdmVcIlxuICAgICAgKGNsaWNrKT1cImNsZWFyUHJvcGVydHkoMSlcIlxuICAgID5cbiAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgPG1hdC1mb3JtLWZpZWxkXG4gICAgY2xhc3M9XCJkdWFsSW5wdXRcIlxuICAgICpuZ0lmPVwiXG4gICAgICAhaXNUZW1wb3JhbE9wZXJhdG9yKCkgJiZcbiAgICAgIFsndXBwZXJCb3VuZGFyeScsICdlbmQnXS5pbmRleE9mKGRldGVjdFByb3BlcnR5KDIpKSAhPT0gLTFcbiAgICBcIlxuICAgIChtb3VzZWVudGVyKT1cImlucHV0Q2xlYXJhYmxlID0gJ3NlbGVjdFByb3BlcnR5MidcIlxuICAgIChtb3VzZWxlYXZlKT1cImlucHV0Q2xlYXJhYmxlID0gdW5kZWZpbmVkXCJcbiAgICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsXCJcbiAgPlxuICAgIDxpbnB1dFxuICAgICAgbWF0SW5wdXRcbiAgICAgIFtwbGFjZWhvbGRlcl09XCInaWdvLmdlby5maWx0ZXIucGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXCJcbiAgICAgIFtkaXNhYmxlZF09XCIhY3VycmVudEZpbHRlci5hY3RpdmVcIlxuICAgICAgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvRHVhbFZhbHVlT3BlcmF0b3IyXCJcbiAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgW3ZhbHVlXT1cIlxuICAgICAgICBkZXRlY3RQcm9wZXJ0eSgyKSA9PT0gJ3VwcGVyQm91bmRhcnknXG4gICAgICAgICAgPyBjdXJyZW50RmlsdGVyLnVwcGVyQm91bmRhcnlcbiAgICAgICAgICA6IGN1cnJlbnRGaWx0ZXIuZW5kXG4gICAgICBcIlxuICAgICAgKGlucHV0KT1cInVwZGF0ZVZhbHVlc0xpc3QoJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSwgMilcIlxuICAgIC8+XG4gICAgPG1hdC1hdXRvY29tcGxldGVcbiAgICAgICNhdXRvRHVhbFZhbHVlT3BlcmF0b3IyPVwibWF0QXV0b2NvbXBsZXRlXCJcbiAgICAgIChvcHRpb25TZWxlY3RlZCk9XCJjaGFuZ2VOdW1lcmljUHJvcGVydHkoJGV2ZW50Lm9wdGlvbi52YWx1ZSwgMilcIlxuICAgID5cbiAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiBmaWx0ZXJlZFZhbHVlcyQgfCBhc3luY1wiXG4gICAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgICAgICBbdmFsdWVdPVwidmFsdWVcIlxuICAgICAgICBbbWF0VG9vbHRpcF09XCJ2YWx1ZVwiXG4gICAgICA+XG4gICAgICAgIHt7IHZhbHVlIH19XG4gICAgICA8L21hdC1vcHRpb24+XG4gICAgPC9tYXQtYXV0b2NvbXBsZXRlPlxuICAgIDxidXR0b25cbiAgICAgICpuZ0lmPVwiXG4gICAgICAgIGlzQ2xlYXJhYmxlKDIpICYmXG4gICAgICAgIGlucHV0Q2xlYXJhYmxlID09PSAnc2VsZWN0UHJvcGVydHkyJyAmJlxuICAgICAgICBjdXJyZW50RmlsdGVyLmFjdGl2ZVxuICAgICAgXCJcbiAgICAgIG1hdFN1ZmZpeFxuICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICBhcmlhLWxhYmVsPVwiQ2xlYXJcIlxuICAgICAgW2Rpc2FibGVkXT1cIiFjdXJyZW50RmlsdGVyLmFjdGl2ZVwiXG4gICAgICAoY2xpY2spPVwiY2xlYXJQcm9wZXJ0eSgyKVwiXG4gICAgPlxuICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbjwvZGl2PlxuXG48aWdvLW9nYy1maWx0ZXItdGltZVxuICAqbmdJZj1cImlzVGVtcG9yYWxPcGVyYXRvcigpXCJcbiAgW2RhdGFzb3VyY2VdPVwiZGF0YXNvdXJjZVwiXG4gIFtjdXJyZW50RmlsdGVyXT1cImN1cnJlbnRGaWx0ZXJcIlxuICAoY2hhbmdlUHJvcGVydHkpPVwiY2hhbmdlUHJvcGVydHkoJGV2ZW50LnZhbHVlLCAkZXZlbnQucG9zKVwiXG4+XG48L2lnby1vZ2MtZmlsdGVyLXRpbWU+XG4iXX0=