@igo2/geo 16.0.0-rc.0 → 16.0.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (555) hide show
  1. package/esm2022/lib/catalog/catalog-browser/catalog-browser-group.component.mjs +7 -7
  2. package/esm2022/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs +7 -7
  3. package/esm2022/lib/catalog/catalog-browser/catalog-browser.component.mjs +4 -4
  4. package/esm2022/lib/catalog/catalog-browser/catalog-browser.module.mjs +6 -6
  5. package/esm2022/lib/catalog/catalog-library/add-catalog-dialog.component.mjs +5 -5
  6. package/esm2022/lib/catalog/catalog-library/catalog-library-item.component.mjs +2 -2
  7. package/esm2022/lib/catalog/catalog-library/catalog-library.component.mjs +3 -3
  8. package/esm2022/lib/catalog/catalog-library/catalog-library.module.mjs +13 -13
  9. package/esm2022/lib/catalog/catalog.module.mjs +3 -3
  10. package/esm2022/lib/catalog/shared/catalog.abstract.mjs +1 -1
  11. package/esm2022/lib/catalog/shared/catalog.enum.mjs +1 -1
  12. package/esm2022/lib/catalog/shared/catalog.interface.mjs +1 -1
  13. package/esm2022/lib/catalog/shared/catalog.service.mjs +7 -8
  14. package/esm2022/lib/catalog/shared/catalogs.mjs +1 -1
  15. package/esm2022/lib/datasource/datasource.module.mjs +1 -1
  16. package/esm2022/lib/datasource/shared/capabilities.service.mjs +10 -10
  17. package/esm2022/lib/datasource/shared/datasource.service.mjs +9 -9
  18. package/esm2022/lib/datasource/shared/datasources/any-datasource.interface.mjs +1 -1
  19. package/esm2022/lib/datasource/shared/datasources/any-datasource.mjs +1 -1
  20. package/esm2022/lib/datasource/shared/datasources/arcgisrest-datasource.mjs +2 -2
  21. package/esm2022/lib/datasource/shared/datasources/carto-datasource.mjs +2 -2
  22. package/esm2022/lib/datasource/shared/datasources/cluster-datasource.interface.mjs +1 -1
  23. package/esm2022/lib/datasource/shared/datasources/cluster-datasource.mjs +2 -2
  24. package/esm2022/lib/datasource/shared/datasources/data.service.mjs +1 -1
  25. package/esm2022/lib/datasource/shared/datasources/datasource.interface.mjs +1 -1
  26. package/esm2022/lib/datasource/shared/datasources/datasource.mjs +1 -1
  27. package/esm2022/lib/datasource/shared/datasources/feature-datasource.interface.mjs +1 -1
  28. package/esm2022/lib/datasource/shared/datasources/feature-datasource.mjs +2 -2
  29. package/esm2022/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.mjs +1 -1
  30. package/esm2022/lib/datasource/shared/datasources/imagearcgisrest-datasource.mjs +2 -2
  31. package/esm2022/lib/datasource/shared/datasources/mvt-datasource.mjs +4 -4
  32. package/esm2022/lib/datasource/shared/datasources/tilearcgisrest-datasource.mjs +2 -2
  33. package/esm2022/lib/datasource/shared/datasources/tiledebug-datasource.interface.mjs +1 -1
  34. package/esm2022/lib/datasource/shared/datasources/websocket-datasource.interface.mjs +1 -1
  35. package/esm2022/lib/datasource/shared/datasources/websocket-datasource.mjs +1 -1
  36. package/esm2022/lib/datasource/shared/datasources/wfs-datasource.interface.mjs +1 -1
  37. package/esm2022/lib/datasource/shared/datasources/wfs-datasource.mjs +4 -19
  38. package/esm2022/lib/datasource/shared/datasources/wfs.service.mjs +5 -5
  39. package/esm2022/lib/datasource/shared/datasources/wms-datasource.interface.mjs +1 -1
  40. package/esm2022/lib/datasource/shared/datasources/wms-datasource.mjs +5 -5
  41. package/esm2022/lib/datasource/shared/datasources/wms-wfs.utils.mjs +7 -7
  42. package/esm2022/lib/datasource/shared/datasources/wmts-datasource.interface.mjs +1 -1
  43. package/esm2022/lib/datasource/shared/datasources/wmts-datasource.mjs +1 -1
  44. package/esm2022/lib/datasource/shared/datasources/xyz-datasource.interface.mjs +1 -1
  45. package/esm2022/lib/datasource/shared/datasources/xyz-datasource.mjs +1 -1
  46. package/esm2022/lib/datasource/shared/options/options-api.providers.mjs +2 -2
  47. package/esm2022/lib/datasource/shared/options/options-api.service.mjs +2 -2
  48. package/esm2022/lib/datasource/shared/options/options.service.mjs +1 -1
  49. package/esm2022/lib/datasource/utils/tilegrid.mjs +3 -3
  50. package/esm2022/lib/directions/directions-buttons/directions-buttons.component.mjs +4 -4
  51. package/esm2022/lib/directions/directions-inputs/directions-inputs.component.mjs +6 -6
  52. package/esm2022/lib/directions/directions-results/directions-results.component.mjs +5 -5
  53. package/esm2022/lib/directions/directions-sources/directions-source.interface.mjs +1 -1
  54. package/esm2022/lib/directions/directions-sources/directions-source.mjs +1 -1
  55. package/esm2022/lib/directions/directions-sources/osrm-directions-source.mjs +4 -4
  56. package/esm2022/lib/directions/directions.component.mjs +50 -25
  57. package/esm2022/lib/directions/directions.module.mjs +10 -6
  58. package/esm2022/lib/directions/shared/directions.interface.mjs +1 -1
  59. package/esm2022/lib/directions/shared/directions.service.mjs +10 -11
  60. package/esm2022/lib/directions/shared/directions.utils.mjs +7 -7
  61. package/esm2022/lib/directions/shared/store.mjs +1 -1
  62. package/esm2022/lib/download/download-button/download-button.component.mjs +3 -3
  63. package/esm2022/lib/download/download.module.mjs +2 -2
  64. package/esm2022/lib/download/shared/download.service.mjs +3 -3
  65. package/esm2022/lib/draw/draw/draw-layer-popup.component.mjs +2 -2
  66. package/esm2022/lib/draw/draw/draw-popup.component.mjs +9 -9
  67. package/esm2022/lib/draw/draw/draw-shorcuts.component.mjs +2 -2
  68. package/esm2022/lib/draw/draw/draw.component.mjs +28 -28
  69. package/esm2022/lib/draw/draw/draw.module.mjs +15 -15
  70. package/esm2022/lib/draw/drawingTool.module.mjs +1 -1
  71. package/esm2022/lib/draw/shared/draw-icon.service.mjs +1 -1
  72. package/esm2022/lib/draw/shared/draw.enum.mjs +1 -1
  73. package/esm2022/lib/draw/shared/draw.interface.mjs +1 -1
  74. package/esm2022/lib/draw/shared/draw.utils.mjs +6 -6
  75. package/esm2022/lib/environment/environment.interface.mjs +2 -0
  76. package/esm2022/lib/environment/index.mjs +2 -0
  77. package/esm2022/lib/feature/feature-details/feature-details.component.mjs +8 -8
  78. package/esm2022/lib/feature/feature-details/feature-details.directive.mjs +3 -3
  79. package/esm2022/lib/feature/feature-details/feature-details.module.mjs +3 -3
  80. package/esm2022/lib/feature/feature-form/feature-form.component.mjs +4 -4
  81. package/esm2022/lib/feature/feature-form/feature-form.module.mjs +2 -2
  82. package/esm2022/lib/feature/feature.module.mjs +2 -2
  83. package/esm2022/lib/feature/shared/feature.interfaces.mjs +1 -1
  84. package/esm2022/lib/feature/shared/feature.utils.mjs +7 -7
  85. package/esm2022/lib/feature/shared/store.mjs +3 -3
  86. package/esm2022/lib/feature/shared/strategies/geo-properties.mjs +4 -4
  87. package/esm2022/lib/feature/shared/strategies/in-map-extent.mjs +10 -22
  88. package/esm2022/lib/feature/shared/strategies/in-map-resolution.mjs +5 -2
  89. package/esm2022/lib/feature/shared/strategies/loading-layer.mjs +1 -1
  90. package/esm2022/lib/feature/shared/strategies/loading.mjs +1 -1
  91. package/esm2022/lib/feature/shared/strategies/search.mjs +2 -2
  92. package/esm2022/lib/feature/shared/strategies/selection.mjs +5 -5
  93. package/esm2022/lib/feature/shared/strategies.utils.mjs +2 -2
  94. package/esm2022/lib/filter/filter.module.mjs +21 -21
  95. package/esm2022/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +3 -3
  96. package/esm2022/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +5 -5
  97. package/esm2022/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +8 -8
  98. package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.mjs +6 -6
  99. package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +5 -5
  100. package/esm2022/lib/filter/ogc-filterable-form/ogc-filterable-form.component.mjs +24 -4
  101. package/esm2022/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +4 -4
  102. package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.mjs +1 -1
  103. package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs +3 -3
  104. package/esm2022/lib/filter/shared/filterable-datasource.pipe.mjs +1 -1
  105. package/esm2022/lib/filter/shared/ogc-filter-time.service.mjs +1 -1
  106. package/esm2022/lib/filter/shared/ogc-filter.enum.mjs +1 -1
  107. package/esm2022/lib/filter/shared/ogc-filter.interface.mjs +1 -1
  108. package/esm2022/lib/filter/shared/ogc-filter.mjs +5 -5
  109. package/esm2022/lib/filter/shared/ogc-filter.service.mjs +1 -1
  110. package/esm2022/lib/filter/shared/spatial-filter.enum.mjs +1 -1
  111. package/esm2022/lib/filter/shared/spatial-filter.service.mjs +2 -2
  112. package/esm2022/lib/filter/shared/time-filter.enum.mjs +1 -1
  113. package/esm2022/lib/filter/shared/time-filter.interface.mjs +1 -1
  114. package/esm2022/lib/filter/shared/time-filter.service.mjs +2 -2
  115. package/esm2022/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +14 -14
  116. package/esm2022/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs +7 -7
  117. package/esm2022/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +4 -4
  118. package/esm2022/lib/filter/time-filter-button/time-filter-button.component.mjs +3 -3
  119. package/esm2022/lib/filter/time-filter-form/time-filter-form.component.mjs +4 -4
  120. package/esm2022/lib/filter/time-filter-item/time-filter-item.component.mjs +3 -3
  121. package/esm2022/lib/filter/time-filter-list/time-filter-list-binding.directive.mjs +1 -1
  122. package/esm2022/lib/filter/time-filter-list/time-filter-list.component.mjs +3 -3
  123. package/esm2022/lib/geo.module.mjs +4 -4
  124. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs +8 -8
  125. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.component.mjs +2 -2
  126. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.module.mjs +3 -3
  127. package/esm2022/lib/geometry/geometry.module.mjs +2 -2
  128. package/esm2022/lib/geometry/shared/controls/draw.mjs +6 -6
  129. package/esm2022/lib/geometry/shared/controls/modify.mjs +8 -8
  130. package/esm2022/lib/geometry/shared/controls/slice.mjs +2 -2
  131. package/esm2022/lib/geometry/shared/geometry.errors.mjs +1 -1
  132. package/esm2022/lib/geometry/shared/geometry.interfaces.mjs +1 -1
  133. package/esm2022/lib/geometry/shared/geometry.utils.mjs +5 -5
  134. package/esm2022/lib/import-export/export-button/export-button.component.mjs +4 -4
  135. package/esm2022/lib/import-export/import-export/import-export.component.mjs +38 -38
  136. package/esm2022/lib/import-export/import-export.module.mjs +3 -3
  137. package/esm2022/lib/import-export/shared/drop-geo-file.directive.mjs +10 -21
  138. package/esm2022/lib/import-export/shared/export.interface.mjs +1 -1
  139. package/esm2022/lib/import-export/shared/export.service.mjs +4 -4
  140. package/esm2022/lib/import-export/shared/export.type.mjs +1 -1
  141. package/esm2022/lib/import-export/shared/export.utils.mjs +2 -2
  142. package/esm2022/lib/import-export/shared/import.errors.mjs +1 -1
  143. package/esm2022/lib/import-export/shared/import.interface.mjs +1 -1
  144. package/esm2022/lib/import-export/shared/import.service.mjs +4 -4
  145. package/esm2022/lib/import-export/shared/import.utils.mjs +5 -5
  146. package/esm2022/lib/layer/layer-item/layer-item.component.mjs +3 -3
  147. package/esm2022/lib/layer/layer-legend/layer-legend.component.mjs +7 -7
  148. package/esm2022/lib/layer/layer-legend-item/layer-legend-item.component.mjs +4 -4
  149. package/esm2022/lib/layer/layer-legend-list/layer-legend-list-binding.directive.mjs +2 -2
  150. package/esm2022/lib/layer/layer-legend-list/layer-legend-list.component.mjs +4 -4
  151. package/esm2022/lib/layer/layer-list/layer-list-binding.directive.mjs +4 -4
  152. package/esm2022/lib/layer/layer-list/layer-list.component.mjs +9 -9
  153. package/esm2022/lib/layer/layer-list/layer-list.enum.mjs +1 -1
  154. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.component.mjs +2 -2
  155. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.service.mjs +1 -1
  156. package/esm2022/lib/layer/layer.module.mjs +9 -9
  157. package/esm2022/lib/layer/shared/clusterParam.mjs +1 -1
  158. package/esm2022/lib/layer/shared/layer.service.mjs +11 -11
  159. package/esm2022/lib/layer/shared/layers/any-layer.interface.mjs +1 -1
  160. package/esm2022/lib/layer/shared/layers/any-layer.mjs +1 -1
  161. package/esm2022/lib/layer/shared/layers/image-layer.interface.mjs +1 -1
  162. package/esm2022/lib/layer/shared/layers/image-layer.mjs +1 -1
  163. package/esm2022/lib/layer/shared/layers/layer.interface.mjs +1 -1
  164. package/esm2022/lib/layer/shared/layers/layer.mjs +1 -1
  165. package/esm2022/lib/layer/shared/layers/legend.interface.mjs +1 -1
  166. package/esm2022/lib/layer/shared/layers/tile-layer.interface.mjs +1 -1
  167. package/esm2022/lib/layer/shared/layers/tile-layer.mjs +1 -1
  168. package/esm2022/lib/layer/shared/layers/vector-layer.interface.mjs +1 -1
  169. package/esm2022/lib/layer/shared/layers/vector-layer.mjs +44 -33
  170. package/esm2022/lib/layer/shared/layers/vectortile-layer.interface.mjs +1 -1
  171. package/esm2022/lib/layer/shared/layers/vectortile-layer.mjs +2 -2
  172. package/esm2022/lib/layer/track-feature-button/track-feature-button.component.mjs +3 -3
  173. package/esm2022/lib/layer/utils/image-watcher.mjs +2 -2
  174. package/esm2022/lib/layer/utils/layer.utils.mjs +1 -1
  175. package/esm2022/lib/layer/utils/outputLegend.mjs +1 -1
  176. package/esm2022/lib/layer/utils/tile-watcher.mjs +2 -2
  177. package/esm2022/lib/layer/utils/vector-watcher.mjs +2 -2
  178. package/esm2022/lib/map/baselayers-switcher/baselayers-switcher.animation.mjs +2 -2
  179. package/esm2022/lib/map/baselayers-switcher/baselayers-switcher.component.mjs +4 -4
  180. package/esm2022/lib/map/baselayers-switcher/mini-basemap.component.mjs +3 -3
  181. package/esm2022/lib/map/geolocate-button/geolocate-button.component.mjs +3 -3
  182. package/esm2022/lib/map/home-extent-button/home-extent-button.component.mjs +8 -10
  183. package/esm2022/lib/map/home-extent-button/home-extent-button.interface.mjs +2 -0
  184. package/esm2022/lib/map/home-extent-button/index.mjs +2 -1
  185. package/esm2022/lib/map/info-section/info-section.component.mjs +2 -2
  186. package/esm2022/lib/map/map-browser/map-browser.component.mjs +2 -2
  187. package/esm2022/lib/map/map-center/map-center.component.mjs +2 -2
  188. package/esm2022/lib/map/map.module.mjs +14 -14
  189. package/esm2022/lib/map/menu-button/menu-button.component.mjs +9 -20
  190. package/esm2022/lib/map/offline-button/offline-button.component.mjs +2 -2
  191. package/esm2022/lib/map/rotation-button/rotation-button.component.mjs +3 -3
  192. package/esm2022/lib/map/shared/controllers/controller.mjs +1 -1
  193. package/esm2022/lib/map/shared/controllers/geolocation.interface.mjs +1 -1
  194. package/esm2022/lib/map/shared/controllers/geolocation.mjs +8 -8
  195. package/esm2022/lib/map/shared/controllers/view.mjs +3 -3
  196. package/esm2022/lib/map/shared/hover-feature.directive.mjs +15 -15
  197. package/esm2022/lib/map/shared/linkedLayers.utils.mjs +2 -2
  198. package/esm2022/lib/map/shared/map-pointer-position.directive.mjs +4 -4
  199. package/esm2022/lib/map/shared/map.abstract.mjs +1 -1
  200. package/esm2022/lib/map/shared/map.interface.mjs +1 -1
  201. package/esm2022/lib/map/shared/map.mjs +9 -6
  202. package/esm2022/lib/map/shared/map.utils.mjs +3 -3
  203. package/esm2022/lib/map/shared/mapOffline.directive.mjs +3 -3
  204. package/esm2022/lib/map/shared/projection.interfaces.mjs +1 -1
  205. package/esm2022/lib/map/shared/projection.service.mjs +3 -3
  206. package/esm2022/lib/map/shared/projection.utils.mjs +1 -1
  207. package/esm2022/lib/map/swipe-control/swipe-control.component.mjs +3 -3
  208. package/esm2022/lib/map/utils/layer-watcher.mjs +2 -2
  209. package/esm2022/lib/map/wake-lock-button/wake-lock-button.component.mjs +4 -4
  210. package/esm2022/lib/map/zoom-button/zoom-button.component.mjs +2 -2
  211. package/esm2022/lib/measure/measure.module.mjs +1 -1
  212. package/esm2022/lib/measure/measurer/measure-format.pipe.mjs +2 -2
  213. package/esm2022/lib/measure/measurer/measurer-dialog.component.mjs +3 -3
  214. package/esm2022/lib/measure/measurer/measurer-item.component.mjs +4 -4
  215. package/esm2022/lib/measure/measurer/measurer.component.mjs +11 -11
  216. package/esm2022/lib/measure/measurer/measurer.module.mjs +6 -6
  217. package/esm2022/lib/measure/shared/measure.enum.mjs +1 -1
  218. package/esm2022/lib/measure/shared/measure.interfaces.mjs +1 -1
  219. package/esm2022/lib/measure/shared/measure.utils.mjs +7 -7
  220. package/esm2022/lib/metadata/metadata-button/metadata-button.component.mjs +4 -4
  221. package/esm2022/lib/metadata/metadata.module.mjs +4 -4
  222. package/esm2022/lib/offline/geoDB/configFileToGeoDB.service.mjs +5 -5
  223. package/esm2022/lib/offline/geoDB/geoDB.enums.mjs +1 -1
  224. package/esm2022/lib/offline/geoDB/geoDB.interface.mjs +1 -1
  225. package/esm2022/lib/offline/geoDB/geoDB.service.mjs +3 -3
  226. package/esm2022/lib/offline/layerDB/index.mjs +1 -1
  227. package/esm2022/lib/offline/layerDB/layerDB.interface.mjs +1 -1
  228. package/esm2022/lib/offline/layerDB/layerDB.service.mjs +2 -2
  229. package/esm2022/lib/offline/shared/geo-network.service.mjs +1 -8
  230. package/esm2022/lib/overlay/overlay.module.mjs +1 -1
  231. package/esm2022/lib/overlay/shared/overlay.directive.mjs +1 -1
  232. package/esm2022/lib/overlay/shared/overlay.enum.mjs +1 -1
  233. package/esm2022/lib/overlay/shared/overlay.mjs +1 -1
  234. package/esm2022/lib/overlay/shared/overlay.service.mjs +1 -1
  235. package/esm2022/lib/overlay/shared/overlay.utils.mjs +1 -1
  236. package/esm2022/lib/print/print/print.component.mjs +3 -3
  237. package/esm2022/lib/print/print-form/print-form.component.mjs +4 -4
  238. package/esm2022/lib/print/print.module.mjs +4 -4
  239. package/esm2022/lib/print/shared/geopdf.mjs +1 -1
  240. package/esm2022/lib/print/shared/print.interface.mjs +1 -1
  241. package/esm2022/lib/print/shared/print.service.mjs +9 -9
  242. package/esm2022/lib/query/query.module.mjs +3 -3
  243. package/esm2022/lib/query/shared/query-search-source.mjs +2 -2
  244. package/esm2022/lib/query/shared/query-search-source.providers.mjs +1 -1
  245. package/esm2022/lib/query/shared/query.directive.mjs +7 -7
  246. package/esm2022/lib/query/shared/query.interfaces.mjs +1 -1
  247. package/esm2022/lib/query/shared/query.service.mjs +10 -10
  248. package/esm2022/lib/query/shared/query.utils.mjs +1 -1
  249. package/esm2022/lib/search/search-bar/search-bar.component.mjs +6 -6
  250. package/esm2022/lib/search/search-bar/search-bar.module.mjs +2 -2
  251. package/esm2022/lib/search/search-bar/search-url-param.directive.mjs +2 -2
  252. package/esm2022/lib/search/search-results/save-feature-dialog.component.mjs +5 -5
  253. package/esm2022/lib/search/search-results/search-results-add-button.component.mjs +15 -15
  254. package/esm2022/lib/search/search-results/search-results-item.component.mjs +5 -5
  255. package/esm2022/lib/search/search-results/search-results.component.mjs +7 -7
  256. package/esm2022/lib/search/search-results/search-results.module.mjs +11 -11
  257. package/esm2022/lib/search/search-selector/search-selector.component.mjs +4 -4
  258. package/esm2022/lib/search/search-selector/search-selector.module.mjs +2 -2
  259. package/esm2022/lib/search/search-settings/search-settings.component.mjs +4 -4
  260. package/esm2022/lib/search/search-settings/search-settings.module.mjs +3 -3
  261. package/esm2022/lib/search/search.module.mjs +8 -8
  262. package/esm2022/lib/search/shared/search-pointer-summary.directive.mjs +14 -14
  263. package/esm2022/lib/search/shared/search-source-service.providers.mjs +2 -2
  264. package/esm2022/lib/search/shared/search-source.service.mjs +1 -1
  265. package/esm2022/lib/search/shared/search.interfaces.mjs +1 -1
  266. package/esm2022/lib/search/shared/search.service.mjs +3 -3
  267. package/esm2022/lib/search/shared/search.utils.mjs +1 -1
  268. package/esm2022/lib/search/shared/sources/cadastre.mjs +7 -7
  269. package/esm2022/lib/search/shared/sources/cadastre.providers.mjs +2 -2
  270. package/esm2022/lib/search/shared/sources/coordinates.interfaces.mjs +1 -1
  271. package/esm2022/lib/search/shared/sources/coordinates.mjs +11 -11
  272. package/esm2022/lib/search/shared/sources/coordinates.providers.mjs +3 -3
  273. package/esm2022/lib/search/shared/sources/icherche.mjs +6 -6
  274. package/esm2022/lib/search/shared/sources/icherche.providers.mjs +3 -3
  275. package/esm2022/lib/search/shared/sources/ilayer.interfaces.mjs +1 -1
  276. package/esm2022/lib/search/shared/sources/ilayer.mjs +8 -8
  277. package/esm2022/lib/search/shared/sources/ilayer.providers.mjs +2 -2
  278. package/esm2022/lib/search/shared/sources/nominatim.mjs +6 -6
  279. package/esm2022/lib/search/shared/sources/nominatim.providers.mjs +2 -2
  280. package/esm2022/lib/search/shared/sources/source.interfaces.mjs +1 -1
  281. package/esm2022/lib/search/shared/sources/source.mjs +1 -1
  282. package/esm2022/lib/search/shared/sources/storedqueries.interfaces.mjs +1 -1
  283. package/esm2022/lib/search/shared/sources/storedqueries.mjs +7 -7
  284. package/esm2022/lib/search/shared/sources/storedqueries.providers.mjs +2 -2
  285. package/esm2022/lib/search/shared/sources/workspace.interfaces.mjs +1 -1
  286. package/esm2022/lib/search/shared/sources/workspace.mjs +6 -6
  287. package/esm2022/lib/search/shared/sources/workspace.providers.mjs +1 -1
  288. package/esm2022/lib/style/shared/datasource/esri-style-generator.mjs +2 -2
  289. package/esm2022/lib/style/shared/feature/feature-style.mjs +1 -1
  290. package/esm2022/lib/style/shared/font.enum.mjs +1 -1
  291. package/esm2022/lib/style/shared/overlay/overlay-marker-style.utils.mjs +2 -2
  292. package/esm2022/lib/style/shared/overlay/overlay-style.utils.mjs +2 -2
  293. package/esm2022/lib/style/shared/vector/commonVectorStyle.mjs +2 -2
  294. package/esm2022/lib/style/shared/vector/conversion.utils.mjs +1 -1
  295. package/esm2022/lib/style/shared/vector/vector-style.interface.mjs +1 -1
  296. package/esm2022/lib/style/style-list/style-list.module.mjs +2 -2
  297. package/esm2022/lib/style/style-list/style-list.provider.mjs +1 -1
  298. package/esm2022/lib/style/style-list/style-list.service.mjs +3 -3
  299. package/esm2022/lib/style/style-modal/drawing/style-modal-drawing.component.mjs +24 -33
  300. package/esm2022/lib/style/style-modal/layer/style-modal-layer.component.mjs +17 -25
  301. package/esm2022/lib/style/style-modal/layer-button/style-modal-layer-button.component.mjs +3 -3
  302. package/esm2022/lib/style/style-modal/shared/style-modal.interface.mjs +1 -1
  303. package/esm2022/lib/style/style-service/draw-style.service.mjs +2 -2
  304. package/esm2022/lib/style/style-service/style.service.mjs +3 -3
  305. package/esm2022/lib/style/style.module.mjs +4 -4
  306. package/esm2022/lib/toast/toast.component.mjs +3 -3
  307. package/esm2022/lib/toast/toast.module.mjs +3 -3
  308. package/esm2022/lib/utils/googleLinks.mjs +1 -1
  309. package/esm2022/lib/utils/id-generator.mjs +2 -2
  310. package/esm2022/lib/utils/osmLinks.mjs +1 -1
  311. package/esm2022/lib/utils/propertyTypeDetector/propertyTypeDetector.interface.mjs +1 -1
  312. package/esm2022/lib/utils/propertyTypeDetector/propertyTypeDetector.service.mjs +1 -1
  313. package/esm2022/lib/wkt/shared/wkt.service.mjs +2 -2
  314. package/esm2022/lib/wkt/wkt.module.mjs +1 -1
  315. package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.component.mjs +4 -4
  316. package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.module.mjs +2 -2
  317. package/esm2022/lib/workspace/confirmation-popup/index.mjs +1 -1
  318. package/esm2022/lib/workspace/shared/edition-workspace.mjs +10 -15
  319. package/esm2022/lib/workspace/shared/edition-workspace.service.mjs +7 -7
  320. package/esm2022/lib/workspace/shared/feature-workspace.mjs +1 -1
  321. package/esm2022/lib/workspace/shared/feature-workspace.service.mjs +6 -6
  322. package/esm2022/lib/workspace/shared/wfs-workspace.mjs +1 -1
  323. package/esm2022/lib/workspace/shared/wfs-workspace.service.mjs +6 -6
  324. package/esm2022/lib/workspace/shared/wms-workspace.service.mjs +5 -5
  325. package/esm2022/lib/workspace/shared/workspace.utils.mjs +2 -2
  326. package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs +3 -3
  327. package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.module.mjs +2 -2
  328. package/esm2022/lib/workspace/workspace-selector/workspace-selector.directive.mjs +7 -7
  329. package/esm2022/lib/workspace/workspace-selector/workspace-selector.module.mjs +2 -2
  330. package/esm2022/lib/workspace/workspace-updator/workspace-updator.directive.mjs +5 -5
  331. package/esm2022/lib/workspace/workspace-updator/workspace-updator.module.mjs +2 -2
  332. package/esm2022/lib/workspace/workspace.module.mjs +4 -4
  333. package/esm2022/public_api.mjs +2 -1
  334. package/fesm2022/igo2-geo.mjs +34336 -34355
  335. package/fesm2022/igo2-geo.mjs.map +1 -1
  336. package/geo-theme.scss +23 -21
  337. package/lib/catalog/catalog-browser/catalog-browser-group.component.d.ts +3 -3
  338. package/lib/catalog/catalog-browser/catalog-browser-layer.component.d.ts +2 -2
  339. package/lib/catalog/catalog-browser/catalog-browser.component.d.ts +3 -3
  340. package/lib/catalog/catalog-browser/catalog-browser.theming.scss +22 -0
  341. package/lib/catalog/catalog-library/add-catalog-dialog.component.d.ts +4 -4
  342. package/lib/catalog/catalog-library/catalog-library.component.d.ts +1 -1
  343. package/lib/catalog/catalog.theming.scss +5 -0
  344. package/lib/catalog/shared/catalog.abstract.d.ts +2 -2
  345. package/lib/catalog/shared/catalog.enum.d.ts +4 -0
  346. package/lib/catalog/shared/catalog.interface.d.ts +10 -5
  347. package/lib/catalog/shared/catalog.service.d.ts +2 -2
  348. package/lib/datasource/shared/capabilities.service.d.ts +2 -2
  349. package/lib/datasource/shared/datasource.service.d.ts +6 -6
  350. package/lib/datasource/shared/datasources/any-datasource.d.ts +11 -11
  351. package/lib/datasource/shared/datasources/any-datasource.interface.d.ts +10 -10
  352. package/lib/datasource/shared/datasources/arcgisrest-datasource.d.ts +2 -2
  353. package/lib/datasource/shared/datasources/carto-datasource.d.ts +1 -1
  354. package/lib/datasource/shared/datasources/cluster-datasource.d.ts +1 -1
  355. package/lib/datasource/shared/datasources/cluster-datasource.interface.d.ts +1 -1
  356. package/lib/datasource/shared/datasources/datasource.d.ts +4 -4
  357. package/lib/datasource/shared/datasources/datasource.interface.d.ts +2 -2
  358. package/lib/datasource/shared/datasources/feature-datasource.d.ts +1 -1
  359. package/lib/datasource/shared/datasources/feature-datasource.interface.d.ts +2 -2
  360. package/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.d.ts +1 -1
  361. package/lib/datasource/shared/datasources/tiledebug-datasource.interface.d.ts +1 -1
  362. package/lib/datasource/shared/datasources/websocket-datasource.d.ts +1 -1
  363. package/lib/datasource/shared/datasources/wfs-datasource.d.ts +3 -4
  364. package/lib/datasource/shared/datasources/wfs-datasource.interface.d.ts +2 -2
  365. package/lib/datasource/shared/datasources/wfs.service.d.ts +1 -1
  366. package/lib/datasource/shared/datasources/wms-datasource.d.ts +5 -5
  367. package/lib/datasource/shared/datasources/wms-datasource.interface.d.ts +2 -2
  368. package/lib/datasource/shared/datasources/wms-wfs.utils.d.ts +4 -3
  369. package/lib/datasource/shared/options/options-api.providers.d.ts +1 -1
  370. package/lib/datasource/shared/options/options-api.service.d.ts +1 -1
  371. package/lib/directions/directions-buttons/directions-buttons.component.d.ts +2 -2
  372. package/lib/directions/directions-inputs/directions-inputs.component.d.ts +3 -3
  373. package/lib/directions/directions-sources/directions-source.interface.d.ts +12 -8
  374. package/lib/directions/directions-sources/osrm-directions-source.d.ts +1 -1
  375. package/lib/directions/directions.component.d.ts +11 -3
  376. package/lib/directions/directions.module.d.ts +5 -4
  377. package/lib/directions/directions.theming.scss +6 -6
  378. package/lib/directions/shared/directions.interface.d.ts +1 -1
  379. package/lib/directions/shared/directions.service.d.ts +5 -5
  380. package/lib/directions/shared/directions.utils.d.ts +3 -3
  381. package/lib/draw/draw/draw-popup.component.d.ts +3 -3
  382. package/lib/draw/draw/draw.component.d.ts +12 -12
  383. package/lib/draw/draw.theming.scss +32 -32
  384. package/lib/draw/shared/draw-icon.service.d.ts +1 -1
  385. package/lib/draw/shared/draw.interface.d.ts +3 -3
  386. package/lib/draw/shared/draw.utils.d.ts +4 -4
  387. package/lib/environment/environment.interface.d.ts +48 -0
  388. package/lib/environment/index.d.ts +1 -0
  389. package/lib/feature/feature-details/feature-details.component.d.ts +6 -6
  390. package/lib/feature/feature-details/feature-details.directive.d.ts +2 -2
  391. package/lib/feature/feature-details/feature-details.theming.scss +16 -16
  392. package/lib/feature/feature-form/feature-form.component.d.ts +1 -1
  393. package/lib/feature/shared/feature.interfaces.d.ts +5 -5
  394. package/lib/feature/shared/feature.utils.d.ts +4 -4
  395. package/lib/feature/shared/store.d.ts +1 -1
  396. package/lib/feature/shared/strategies/geo-properties.d.ts +2 -2
  397. package/lib/feature/shared/strategies/in-map-extent.d.ts +1 -1
  398. package/lib/feature/shared/strategies/in-map-resolution.d.ts +1 -1
  399. package/lib/feature/shared/strategies/loading-layer.d.ts +1 -1
  400. package/lib/feature/shared/strategies/search.d.ts +1 -1
  401. package/lib/feature/shared/strategies/selection.d.ts +2 -2
  402. package/lib/feature/shared/strategies.utils.d.ts +1 -1
  403. package/lib/filter/filter.theming.scss +0 -3
  404. package/lib/filter/ogc-filter-form/ogc-filter-form.component.d.ts +3 -3
  405. package/lib/filter/ogc-filter-selection/ogc-filter-selection.component.d.ts +5 -5
  406. package/lib/filter/ogc-filter-selection/ogc-filter-selection.theming.scss +18 -18
  407. package/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.d.ts +1 -1
  408. package/lib/filter/ogc-filter-time/ogc-filter-time.component.d.ts +1 -1
  409. package/lib/filter/ogc-filterable-form/ogc-filterable-form.component.d.ts +1 -1
  410. package/lib/filter/ogc-filterable-item/ogc-filterable-item.component.d.ts +2 -2
  411. package/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.d.ts +1 -1
  412. package/lib/filter/shared/ogc-filter.d.ts +5 -4
  413. package/lib/filter/shared/ogc-filter.interface.d.ts +3 -3
  414. package/lib/filter/shared/spatial-filter.service.d.ts +1 -1
  415. package/lib/filter/shared/time-filter.interface.d.ts +1 -1
  416. package/lib/filter/shared/time-filter.service.d.ts +1 -1
  417. package/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.d.ts +13 -13
  418. package/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.d.ts +6 -6
  419. package/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.d.ts +3 -3
  420. package/lib/filter/time-filter-button/time-filter-button.component.d.ts +1 -1
  421. package/lib/filter/time-filter-form/time-filter-form.component.d.ts +2 -2
  422. package/lib/filter/time-filter-form/time-filter-form.theming.scss +5 -5
  423. package/lib/filter/time-filter-item/time-filter-item.component.d.ts +2 -2
  424. package/lib/filter/time-filter-list/time-filter-list-binding.directive.d.ts +1 -1
  425. package/lib/geometry/geometry-form-field/geometry-form-field-input.component.d.ts +4 -4
  426. package/lib/geometry/shared/controls/draw.d.ts +4 -4
  427. package/lib/geometry/shared/controls/modify.d.ts +4 -4
  428. package/lib/geometry/shared/controls/slice.d.ts +3 -3
  429. package/lib/geometry/shared/geometry.interfaces.d.ts +1 -1
  430. package/lib/geometry/shared/geometry.utils.d.ts +2 -2
  431. package/lib/import-export/export-button/export-button.component.d.ts +1 -1
  432. package/lib/import-export/import-export/import-export.component.d.ts +14 -14
  433. package/lib/import-export/shared/drop-geo-file.directive.d.ts +6 -6
  434. package/lib/import-export/shared/export.interface.d.ts +1 -1
  435. package/lib/import-export/shared/export.service.d.ts +2 -2
  436. package/lib/import-export/shared/import.interface.d.ts +1 -0
  437. package/lib/import-export/shared/import.utils.d.ts +3 -3
  438. package/lib/layer/layer-item/layer-item.component.d.ts +2 -2
  439. package/lib/layer/layer-legend/layer-legend.component.d.ts +3 -3
  440. package/lib/layer/layer-legend-item/layer-legend-item.component.d.ts +2 -2
  441. package/lib/layer/layer-legend-list/layer-legend-list-binding.directive.d.ts +1 -1
  442. package/lib/layer/layer-legend-list/layer-legend-list.component.d.ts +2 -2
  443. package/lib/layer/layer-list/layer-list-binding.directive.d.ts +2 -2
  444. package/lib/layer/layer-list/layer-list.component.d.ts +5 -5
  445. package/lib/layer/layer-list-tool/layer-list-tool.component.d.ts +1 -1
  446. package/lib/layer/layer.theming.scss +0 -7
  447. package/lib/layer/shared/layer.service.d.ts +5 -5
  448. package/lib/layer/shared/layers/any-layer.d.ts +1 -1
  449. package/lib/layer/shared/layers/any-layer.interface.d.ts +1 -1
  450. package/lib/layer/shared/layers/image-layer.d.ts +5 -5
  451. package/lib/layer/shared/layers/image-layer.interface.d.ts +3 -3
  452. package/lib/layer/shared/layers/layer.d.ts +6 -6
  453. package/lib/layer/shared/layers/layer.interface.d.ts +2 -2
  454. package/lib/layer/shared/layers/tile-layer.d.ts +6 -6
  455. package/lib/layer/shared/layers/tile-layer.interface.d.ts +8 -8
  456. package/lib/layer/shared/layers/vector-layer.d.ts +18 -11
  457. package/lib/layer/shared/layers/vector-layer.interface.d.ts +13 -13
  458. package/lib/layer/shared/layers/vectortile-layer.d.ts +3 -3
  459. package/lib/layer/shared/layers/vectortile-layer.interface.d.ts +4 -4
  460. package/lib/layer/utils/image-watcher.d.ts +1 -1
  461. package/lib/map/baselayers-switcher/mini-basemap.component.d.ts +1 -1
  462. package/lib/map/geolocate-button/geolocate-button.component.d.ts +1 -1
  463. package/lib/map/home-extent-button/home-extent-button.interface.d.ts +6 -0
  464. package/lib/map/home-extent-button/index.d.ts +1 -0
  465. package/lib/map/map-browser/map-browser.component.d.ts +1 -1
  466. package/lib/map/map-browser/map-browser.theming.scss +46 -46
  467. package/lib/map/menu-button/menu-button.component.d.ts +1 -1
  468. package/lib/map/menu-button/menu-button.theming.scss +20 -24
  469. package/lib/map/shared/controllers/controller.d.ts +1 -1
  470. package/lib/map/shared/controllers/geolocation.d.ts +5 -5
  471. package/lib/map/shared/controllers/geolocation.interface.d.ts +8 -0
  472. package/lib/map/shared/controllers/view.d.ts +2 -2
  473. package/lib/map/shared/hover-feature.directive.d.ts +8 -8
  474. package/lib/map/shared/map-pointer-position.directive.d.ts +2 -2
  475. package/lib/map/shared/map.abstract.d.ts +5 -5
  476. package/lib/map/shared/map.d.ts +14 -10
  477. package/lib/map/shared/mapOffline.directive.d.ts +2 -2
  478. package/lib/map/shared/projection.interfaces.d.ts +1 -3
  479. package/lib/map/utils/layer-watcher.d.ts +2 -2
  480. package/lib/map/zoom-button/zoom-button.theming.scss +32 -32
  481. package/lib/measure/measurer/measurer-dialog.component.d.ts +1 -1
  482. package/lib/measure/measurer/measurer-item.component.d.ts +1 -1
  483. package/lib/measure/measurer/measurer.component.d.ts +5 -5
  484. package/lib/measure/shared/measure.utils.d.ts +5 -5
  485. package/lib/metadata/metadata-button/metadata-button.component.d.ts +1 -1
  486. package/lib/offline/geoDB/configFileToGeoDB.service.d.ts +1 -1
  487. package/lib/offline/geoDB/geoDB.service.d.ts +1 -1
  488. package/lib/offline/shared/geo-network.service.d.ts +2 -1
  489. package/lib/overlay/shared/overlay.d.ts +1 -1
  490. package/lib/overlay/shared/overlay.directive.d.ts +2 -2
  491. package/lib/print/print/print.component.d.ts +1 -1
  492. package/lib/print/print-form/print-form.component.d.ts +2 -2
  493. package/lib/print/shared/print.interface.d.ts +1 -1
  494. package/lib/print/shared/print.service.d.ts +2 -2
  495. package/lib/query/shared/query.directive.d.ts +4 -4
  496. package/lib/query/shared/query.interfaces.d.ts +3 -3
  497. package/lib/query/shared/query.service.d.ts +3 -3
  498. package/lib/search/search-bar/search-bar.component.d.ts +5 -5
  499. package/lib/search/search-bar/search-bar.theming.scss +36 -36
  500. package/lib/search/search-bar/search-url-param.directive.d.ts +1 -1
  501. package/lib/search/search-results/save-feature-dialog.component.d.ts +3 -3
  502. package/lib/search/search-results/search-results-add-button.component.d.ts +7 -7
  503. package/lib/search/search-results/search-results-item.component.d.ts +1 -1
  504. package/lib/search/search-results/search-results.component.d.ts +4 -4
  505. package/lib/search/search-selector/search-selector.component.d.ts +1 -1
  506. package/lib/search/search-settings/search-settings.component.d.ts +2 -2
  507. package/lib/search/search.theming.scss +5 -5
  508. package/lib/search/shared/search-pointer-summary.directive.d.ts +5 -5
  509. package/lib/search/shared/search-source-service.providers.d.ts +1 -1
  510. package/lib/search/shared/search.interfaces.d.ts +1 -1
  511. package/lib/search/shared/search.service.d.ts +2 -2
  512. package/lib/search/shared/search.utils.d.ts +1 -1
  513. package/lib/search/shared/sources/cadastre.d.ts +1 -1
  514. package/lib/search/shared/sources/cadastre.providers.d.ts +1 -1
  515. package/lib/search/shared/sources/coordinates.d.ts +5 -5
  516. package/lib/search/shared/sources/coordinates.providers.d.ts +2 -2
  517. package/lib/search/shared/sources/icherche.d.ts +4 -4
  518. package/lib/search/shared/sources/icherche.providers.d.ts +2 -2
  519. package/lib/search/shared/sources/ilayer.d.ts +2 -2
  520. package/lib/search/shared/sources/ilayer.interfaces.d.ts +1 -1
  521. package/lib/search/shared/sources/ilayer.providers.d.ts +1 -1
  522. package/lib/search/shared/sources/nominatim.d.ts +1 -1
  523. package/lib/search/shared/sources/nominatim.providers.d.ts +1 -1
  524. package/lib/search/shared/sources/source.d.ts +2 -2
  525. package/lib/search/shared/sources/storedqueries.d.ts +4 -4
  526. package/lib/search/shared/sources/storedqueries.providers.d.ts +1 -1
  527. package/lib/search/shared/sources/workspace.d.ts +1 -1
  528. package/lib/style/shared/feature/feature-style.d.ts +2 -2
  529. package/lib/style/shared/overlay/overlay-style.utils.d.ts +1 -1
  530. package/lib/style/shared/vector/conversion.utils.d.ts +1 -1
  531. package/lib/style/shared/vector/vector-style.interface.d.ts +6 -1
  532. package/lib/style/style-list/style-list.provider.d.ts +1 -1
  533. package/lib/style/style-modal/drawing/style-modal-drawing.component.d.ts +3 -3
  534. package/lib/style/style-modal/layer/style-modal-layer.component.d.ts +3 -3
  535. package/lib/style/style-service/draw-style.service.d.ts +1 -1
  536. package/lib/style/style-service/style.service.d.ts +3 -3
  537. package/lib/utils/id-generator.d.ts +2 -2
  538. package/lib/workspace/confirmation-popup/confirmation-popup.component.d.ts +1 -1
  539. package/lib/workspace/confirmation-popup/confirmation-popup.theming.scss +14 -14
  540. package/lib/workspace/shared/edition-workspace.d.ts +7 -9
  541. package/lib/workspace/shared/edition-workspace.service.d.ts +5 -5
  542. package/lib/workspace/shared/feature-workspace.service.d.ts +3 -3
  543. package/lib/workspace/shared/wfs-workspace.service.d.ts +3 -3
  544. package/lib/workspace/shared/wms-workspace.service.d.ts +4 -4
  545. package/lib/workspace/shared/workspace.utils.d.ts +4 -4
  546. package/lib/workspace/widgets/ogc-filter/ogc-filter.component.d.ts +1 -1
  547. package/lib/workspace/workspace-selector/workspace-selector.directive.d.ts +4 -4
  548. package/lib/workspace/workspace-updator/workspace-updator.directive.d.ts +3 -3
  549. package/lib/workspace/workspace.theming.scss +6 -6
  550. package/locale/en.geo.json +11 -4
  551. package/locale/fr.geo.json +11 -4
  552. package/package.json +5 -5
  553. package/public_api.d.ts +1 -0
  554. package/style/style.css +0 -1
  555. package/lib/filter/ogc-filter-time/ogc-filter-time-slider.theming.scss +0 -15
@@ -1,8 +1,8 @@
1
- import { Component, Input, ViewChild, ElementRef, Output, EventEmitter } from '@angular/core';
1
+ import { Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core';
2
2
  import { UntypedFormControl } from '@angular/forms';
3
+ import { default as moment } from 'moment';
3
4
  import { OgcFilterOperator } from '../../filter/shared/ogc-filter.enum';
4
5
  import { OGCFilterTimeService } from '../shared/ogc-filter-time.service';
5
- import { default as moment } from 'moment';
6
6
  import * as i0 from "@angular/core";
7
7
  import * as i1 from "../shared/ogc-filter-time.service";
8
8
  const _c0 = ["endDatepickerTime"];
@@ -909,11 +909,11 @@ export class OgcFilterTimeComponent {
909
909
  i0.ɵɵproperty("ngIf", ctx.sliderMode);
910
910
  i0.ɵɵadvance(1);
911
911
  i0.ɵɵproperty("ngIf", !ctx.sliderMode);
912
- } }, styles: ["[_nghost-%COMP%] input{text-align:center!important;margin:auto 5px!important}[_nghost-%COMP%] .slider-container[_ngcontent-%COMP%]{text-align:center}[_nghost-%COMP%] .datetime-input-container[_ngcontent-%COMP%]{display:flex;align-items:center;flex-wrap:wrap}[_nghost-%COMP%] .datetime-input-container[_ngcontent-%COMP%] > [_ngcontent-%COMP%]:not(:last-child){margin-right:8px}[_nghost-%COMP%] .datetime-input[_ngcontent-%COMP%]{display:block}[_nghost-%COMP%] .date-input[_ngcontent-%COMP%]{width:154px}[_nghost-%COMP%] .actions-container[_ngcontent-%COMP%]{display:flex;align-items:center}[_nghost-%COMP%] .time-input[_ngcontent-%COMP%]{margin-top:16px}[_nghost-%COMP%] .time-input[_ngcontent-%COMP%] > [_ngcontent-%COMP%]:not(:last-child){margin-right:8px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){[_nghost-%COMP%] .time-input[_ngcontent-%COMP%]{margin-top:4px}}[_nghost-%COMP%] .hour-input[_ngcontent-%COMP%], [_nghost-%COMP%] .minute-input[_ngcontent-%COMP%]{width:100px}[_nghost-%COMP%] .year-input-container[_ngcontent-%COMP%]{display:flex;width:100%}[_nghost-%COMP%] .year-input-container[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%]:not(:last-child){margin-right:4px}[_nghost-%COMP%] .year-input-hide[_ngcontent-%COMP%]{width:120px;margin-right:25px;display:none}[_nghost-%COMP%] .year-input-only-year[_ngcontent-%COMP%]{width:120px;margin-right:25px}[_nghost-%COMP%] .datepicker-year .mat-calendar-arrow{display:none}[_nghost-%COMP%] .datepicker-year .mat-calendar-period-button{pointer-events:none}[_nghost-%COMP%] .datepicker-year .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover{background-color:#0000001f;border-radius:999px}"] });
912
+ } }, styles: ["[_nghost-%COMP%] input{text-align:center!important;margin:auto 5px!important}[_nghost-%COMP%] .slider-container[_ngcontent-%COMP%]{text-align:center}[_nghost-%COMP%] .datetime-input-container[_ngcontent-%COMP%]{display:flex;align-items:center;flex-wrap:wrap}[_nghost-%COMP%] .datetime-input-container[_ngcontent-%COMP%] > [_ngcontent-%COMP%]:not(:last-child){margin-right:8px}[_nghost-%COMP%] .datetime-input[_ngcontent-%COMP%]{display:block}[_nghost-%COMP%] .date-input[_ngcontent-%COMP%]{width:154px}[_nghost-%COMP%] .actions-container[_ngcontent-%COMP%]{display:flex;align-items:center}[_nghost-%COMP%] .time-input[_ngcontent-%COMP%]{margin-top:16px}[_nghost-%COMP%] .time-input[_ngcontent-%COMP%] > [_ngcontent-%COMP%]:not(:last-child){margin-right:8px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){[_nghost-%COMP%] .time-input[_ngcontent-%COMP%]{margin-top:4px}}[_nghost-%COMP%] .hour-input[_ngcontent-%COMP%], [_nghost-%COMP%] .minute-input[_ngcontent-%COMP%]{width:100px}[_nghost-%COMP%] .year-input-container[_ngcontent-%COMP%]{display:flex;width:100%}[_nghost-%COMP%] .year-input-container[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%]:not(:last-child){margin-right:4px}[_nghost-%COMP%] .year-input-hide[_ngcontent-%COMP%]{width:120px;margin-right:25px;display:none}[_nghost-%COMP%] .year-input-only-year[_ngcontent-%COMP%]{width:120px;margin-right:25px;text-align:left!important}[_nghost-%COMP%] .datepicker-year .mat-calendar-arrow{display:none}[_nghost-%COMP%] .datepicker-year .mat-calendar-period-button{pointer-events:none}[_nghost-%COMP%] .datepicker-year .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover{background-color:#0000001f;border-radius:999px}"] });
913
913
  }
914
914
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(OgcFilterTimeComponent, [{
915
915
  type: Component,
916
- args: [{ selector: 'igo-ogc-filter-time', template: "<div class=\"datetime-container\">\r\n <mat-slide-toggle\r\n *ngIf=\"this.currentFilter.sliderOptions?.enabled\"\r\n [(ngModel)]=\"sliderMode\"\r\n (change)=\"modeChange($event)\"\r\n >\r\n {{ 'igo.geo.filter.sliderModeTitle' | translate }}\r\n </mat-slide-toggle>\r\n\r\n <div class=\"slider-container\" *ngIf=\"sliderMode\">\r\n <igo-ogc-filter-time-slider\r\n [begin]=\"beginValue\"\r\n [max]=\"this.restrictedToStep() ? this.maxDate : this.endValue\"\r\n [currentFilter]=\"currentFilter\"\r\n [datasource]=\"datasource\"\r\n (changeProperty)=\"changePropertyByPass($event)\"\r\n >\r\n </igo-ogc-filter-time-slider>\r\n </div>\r\n\r\n <div *ngIf=\"!sliderMode\">\r\n <div class=\"year-input-container\" *ngIf=\"calendarTypeYear\">\r\n <!-- to emulate a year-picker, 2 input: first input to show user just year and second input hiden and bind \r\n with the datepicker -->\r\n <mat-form-field class=\"year-input\" subscriptSizing=\"dynamic\">\r\n <mat-label>{{ 'igo.geo.timeFilter.startYear' | translate }}</mat-label>\r\n <input\r\n matInput\r\n class=\"year-input-only-year\"\r\n value=\"{{ onlyYearBegin }}\"\r\n (change)=\"yearOnlyInputChange($event, beginDatepicker, 'begin')\"\r\n [disabled]=\"filterStateDisable\"\r\n />\r\n <mat-datepicker-toggle\r\n matSuffix\r\n [for]=\"beginDatepicker\"\r\n [disabled]=\"filterStateDisable\"\r\n ></mat-datepicker-toggle>\r\n\r\n <mat-datepicker\r\n panelClass=\"datepicker-year\"\r\n #beginDatepicker\r\n [startView]=\"calendarView()\"\r\n [startAt]=\"beginValue\"\r\n (yearSelected)=\"yearSelected($event, beginDatepicker, 'begin')\"\r\n >\r\n </mat-datepicker>\r\n\r\n <input\r\n #beginYear\r\n class=\"year-input-hide\"\r\n matInput\r\n [matDatepicker]=\"beginDatepicker\"\r\n enabled=\"false\"\r\n readonly=\"true\"\r\n [value]=\"\r\n beginValue ? beginValue : handleDate(datasource.options.minDate)\r\n \"\r\n [min]=\"handleDate(datasource.options.minDate)\"\r\n [max]=\"\r\n endValue && !restrictedToStep()\r\n ? endValue\r\n : handleDate(datasource.options.maxDate)\r\n \"\r\n />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"year-input\" subscriptSizing=\"dynamic\">\r\n <mat-label>{{ 'igo.geo.timeFilter.endYear' | translate }}</mat-label>\r\n <input\r\n matInput\r\n class=\"year-input-only-year\"\r\n value=\"{{ onlyYearEnd }}\"\r\n (change)=\"yearOnlyInputChange($event, endDatepicker, 'end')\"\r\n [disabled]=\"filterStateDisable\"\r\n />\r\n <mat-datepicker-toggle\r\n matSuffix\r\n [for]=\"endDatepicker\"\r\n [disabled]=\"filterStateDisable\"\r\n ></mat-datepicker-toggle>\r\n <mat-datepicker\r\n panelClass=\"datepicker-year\"\r\n #endDatepicker\r\n [startView]=\"calendarView()\"\r\n [startAt]=\"endValue\"\r\n (yearSelected)=\"yearSelected($event, endDatepicker, 'end')\"\r\n >\r\n </mat-datepicker>\r\n\r\n <input\r\n #endYear\r\n class=\"year-input-hide\"\r\n matInput\r\n [matDatepicker]=\"endDatepicker\"\r\n enabled=\"false\"\r\n readonly=\"true\"\r\n [value]=\"endValue ? endValue : handleDate(datasource.options.maxDate)\"\r\n [min]=\"\r\n beginValue ? beginValue : handleDate(datasource.options.minDate)\r\n \"\r\n [max]=\"handleDate(datasource.options.maxDate)\"\r\n />\r\n </mat-form-field>\r\n <div class=\"actions-container\">\r\n <button\r\n class=\"reset-button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n (click)=\"resetFilter()\"\r\n [matTooltip]=\"'igo.geo.filter.resetFilters' | translate\"\r\n [disabled]=\"filterStateDisable\"\r\n >\r\n <mat-icon svgIcon=\"{{ resetIcon }}\"></mat-icon>\r\n </button>\r\n <mat-slide-toggle\r\n class=\"toggle-filter-state\"\r\n (change)=\"toggleFilterState()\"\r\n [matTooltip]=\"'igo.geo.filter.toggleFilterState' | translate\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [checked]=\"!filterStateDisable\"\r\n >\r\n </mat-slide-toggle>\r\n </div>\r\n </div>\r\n\r\n <div class=\"datetime-input-container\" *ngIf=\"calendarType() !== 'year'\">\r\n <div class=\"datetime-input\">\r\n <mat-form-field class=\"date-input\" subscriptSizing=\"dynamic\">\r\n <mat-datepicker-toggle\r\n matSuffix\r\n [for]=\"beginDatepicker\"\r\n [disabled]=\"filterStateDisable\"\r\n ></mat-datepicker-toggle>\r\n <input\r\n #begin\r\n matInput\r\n [matDatepicker]=\"beginDatepicker\"\r\n [placeholder]=\"'igo.geo.timeFilter.startDate' | translate\"\r\n [attr.disabled]=\"!currentFilter.active\"\r\n (dateChange)=\"changeTemporalProperty(begin.value, 1)\"\r\n [matDatepickerFilter]=\"filterBeginFunction\"\r\n [value]=\"\r\n beginValue ? beginValue : handleDate(datasource.options.minDate)\r\n \"\r\n [min]=\"handleDate(datasource.options.minDate)\"\r\n [max]=\"\r\n endValue && !restrictedToStep()\r\n ? endValue\r\n : handleDate(datasource.options.maxDate)\r\n \"\r\n [disabled]=\"filterStateDisable\"\r\n />\r\n <span class=\"filler\"></span>\r\n <mat-datepicker\r\n #beginDatepicker\r\n [startView]=\"calendarView()\"\r\n [startAt]=\"beginValue\"\r\n (yearSelected)=\"yearSelected($event, beginDatepicker, 'begin')\"\r\n (monthSelected)=\"monthSelected($event, beginDatepicker, 'begin')\"\r\n >\r\n </mat-datepicker>\r\n </mat-form-field>\r\n\r\n <div *ngIf=\"calendarType() === 'datetime'\" class=\"time-input\">\r\n <mat-form-field class=\"hour-input\" subscriptSizing=\"dynamic\">\r\n <mat-label>{{ 'igo.geo.timeFilter.hour' | translate }}</mat-label>\r\n <mat-select\r\n [formControl]=\"beginHourFormControl\"\r\n [attr.disabled]=\"!currentFilter.active\"\r\n (selectionChange)=\"changeTemporalProperty(begin.value, 1)\"\r\n >\r\n <mat-option *ngFor=\"let hour of beginHours\" [value]=\"hour\">{{\r\n hour\r\n }}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field class=\"minute-input\" subscriptSizing=\"dynamic\">\r\n <mat-label>{{ 'igo.geo.timeFilter.minute' | translate }}</mat-label>\r\n <mat-select\r\n [formControl]=\"beginMinuteFormControl\"\r\n [attr.disabled]=\"!currentFilter.active\"\r\n (selectionChange)=\"changeTemporalProperty(begin.value, 1)\"\r\n >\r\n <mat-option\r\n *ngFor=\"let minute of beginMinutes\"\r\n [value]=\"minute\"\r\n >{{ minute }}</mat-option\r\n >\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"!restrictedToStep()\" class=\"datetime-input\">\r\n <mat-form-field class=\"date-input\" subscriptSizing=\"dynamic\">\r\n <mat-datepicker-toggle\r\n matSuffix\r\n [for]=\"endDatepicker\"\r\n [disabled]=\"filterStateDisable\"\r\n ></mat-datepicker-toggle>\r\n <input\r\n #end\r\n matInput\r\n [matDatepicker]=\"endDatepicker\"\r\n [placeholder]=\"'igo.geo.timeFilter.endDate' | translate\"\r\n [attr.disabled]=\"!currentFilter.active\"\r\n (dateChange)=\"changeTemporalProperty(end.value, 2)\"\r\n [matDatepickerFilter]=\"filterEndFunction\"\r\n [value]=\"\r\n endValue ? endValue : handleDate(datasource.options.maxDate)\r\n \"\r\n [min]=\"\r\n beginValue ? beginValue : handleDate(datasource.options.minDate)\r\n \"\r\n [max]=\"handleDate(datasource.options.maxDate)\"\r\n [disabled]=\"filterStateDisable\"\r\n />\r\n <span class=\"filler\"></span>\r\n <mat-datepicker\r\n #endDatepicker\r\n [startView]=\"calendarView()\"\r\n [startAt]=\"endValue\"\r\n (yearSelected)=\"yearSelected($event, endDatepicker, 'end')\"\r\n (monthSelected)=\"monthSelected($event, endDatepicker, 'end')\"\r\n >\r\n </mat-datepicker>\r\n </mat-form-field>\r\n\r\n <div *ngIf=\"calendarType() === 'datetime'\" class=\"time-input\">\r\n <mat-form-field class=\"hour-input\" subscriptSizing=\"dynamic\">\r\n <mat-label>{{ 'igo.geo.timeFilter.hour' | translate }}</mat-label>\r\n <mat-select\r\n [formControl]=\"endHourFormControl\"\r\n [attr.disabled]=\"!currentFilter.active\"\r\n (selectionChange)=\"changeTemporalProperty(end.value, 2)\"\r\n >\r\n <mat-option *ngFor=\"let hour of endHours\" [value]=\"hour\">{{\r\n hour\r\n }}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field class=\"minute-input\" subscriptSizing=\"dynamic\">\r\n <mat-label>{{ 'igo.geo.timeFilter.minute' | translate }}</mat-label>\r\n <mat-select\r\n [formControl]=\"endMinuteFormControl\"\r\n [attr.disabled]=\"!currentFilter.active\"\r\n (selectionChange)=\"changeTemporalProperty(end.value, 2)\"\r\n >\r\n <mat-option *ngFor=\"let minute of endMinutes\" [value]=\"minute\">{{\r\n minute\r\n }}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n <div class=\"actions-container\">\r\n <button\r\n class=\"reset-button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n (click)=\"resetFilter()\"\r\n [matTooltip]=\"'igo.geo.filter.resetFilters' | translate\"\r\n [disabled]=\"filterStateDisable\"\r\n >\r\n <mat-icon svgIcon=\"{{ resetIcon }}\"></mat-icon>\r\n </button>\r\n <mat-slide-toggle\r\n class=\"toggle-filter-state\"\r\n (change)=\"toggleFilterState()\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.geo.filter.toggleFilterState' | translate\"\r\n [checked]=\"!filterStateDisable\"\r\n >\r\n </mat-slide-toggle>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [":host ::ng-deep input{text-align:center!important;margin:auto 5px!important}:host .slider-container{text-align:center}:host .datetime-input-container{display:flex;align-items:center;flex-wrap:wrap}:host .datetime-input-container>:not(:last-child){margin-right:8px}:host .datetime-input{display:block}:host .date-input{width:154px}:host .actions-container{display:flex;align-items:center}:host .time-input{margin-top:16px}:host .time-input>:not(:last-child){margin-right:8px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){:host .time-input{margin-top:4px}}:host .hour-input,:host .minute-input{width:100px}:host .year-input-container{display:flex;width:100%}:host .year-input-container mat-form-field:not(:last-child){margin-right:4px}:host .year-input-hide{width:120px;margin-right:25px;display:none}:host .year-input-only-year{width:120px;margin-right:25px}:host ::ng-deep .datepicker-year ::ng-deep .mat-calendar-arrow{display:none}:host ::ng-deep .datepicker-year ::ng-deep .mat-calendar-period-button{pointer-events:none}:host ::ng-deep .datepicker-year ::ng-deep .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover{background-color:#0000001f;border-radius:999px}\n"] }]
916
+ args: [{ selector: 'igo-ogc-filter-time', template: "<div class=\"datetime-container\">\n <mat-slide-toggle\n *ngIf=\"this.currentFilter.sliderOptions?.enabled\"\n [(ngModel)]=\"sliderMode\"\n (change)=\"modeChange($event)\"\n >\n {{ 'igo.geo.filter.sliderModeTitle' | translate }}\n </mat-slide-toggle>\n\n <div class=\"slider-container\" *ngIf=\"sliderMode\">\n <igo-ogc-filter-time-slider\n [begin]=\"beginValue\"\n [max]=\"this.restrictedToStep() ? this.maxDate : this.endValue\"\n [currentFilter]=\"currentFilter\"\n [datasource]=\"datasource\"\n (changeProperty)=\"changePropertyByPass($event)\"\n >\n </igo-ogc-filter-time-slider>\n </div>\n\n <div *ngIf=\"!sliderMode\">\n <div class=\"year-input-container\" *ngIf=\"calendarTypeYear\">\n <!-- to emulate a year-picker, 2 input: first input to show user just year and second input hiden and bind \n with the datepicker -->\n <mat-form-field class=\"year-input\" subscriptSizing=\"dynamic\">\n <mat-label>{{ 'igo.geo.timeFilter.startYear' | translate }}</mat-label>\n <input\n matInput\n class=\"year-input-only-year\"\n value=\"{{ onlyYearBegin }}\"\n (change)=\"yearOnlyInputChange($event, beginDatepicker, 'begin')\"\n [disabled]=\"filterStateDisable\"\n />\n <mat-datepicker-toggle\n matSuffix\n [for]=\"beginDatepicker\"\n [disabled]=\"filterStateDisable\"\n ></mat-datepicker-toggle>\n\n <mat-datepicker\n panelClass=\"datepicker-year\"\n #beginDatepicker\n [startView]=\"calendarView()\"\n [startAt]=\"beginValue\"\n (yearSelected)=\"yearSelected($event, beginDatepicker, 'begin')\"\n >\n </mat-datepicker>\n\n <input\n #beginYear\n class=\"year-input-hide\"\n matInput\n [matDatepicker]=\"beginDatepicker\"\n enabled=\"false\"\n readonly=\"true\"\n [value]=\"\n beginValue ? beginValue : handleDate(datasource.options.minDate)\n \"\n [min]=\"handleDate(datasource.options.minDate)\"\n [max]=\"\n endValue && !restrictedToStep()\n ? endValue\n : handleDate(datasource.options.maxDate)\n \"\n />\n </mat-form-field>\n\n <mat-form-field class=\"year-input\" subscriptSizing=\"dynamic\">\n <mat-label>{{ 'igo.geo.timeFilter.endYear' | translate }}</mat-label>\n <input\n matInput\n class=\"year-input-only-year\"\n value=\"{{ onlyYearEnd }}\"\n (change)=\"yearOnlyInputChange($event, endDatepicker, 'end')\"\n [disabled]=\"filterStateDisable\"\n />\n <mat-datepicker-toggle\n matSuffix\n [for]=\"endDatepicker\"\n [disabled]=\"filterStateDisable\"\n ></mat-datepicker-toggle>\n <mat-datepicker\n panelClass=\"datepicker-year\"\n #endDatepicker\n [startView]=\"calendarView()\"\n [startAt]=\"endValue\"\n (yearSelected)=\"yearSelected($event, endDatepicker, 'end')\"\n >\n </mat-datepicker>\n\n <input\n #endYear\n class=\"year-input-hide\"\n matInput\n [matDatepicker]=\"endDatepicker\"\n enabled=\"false\"\n readonly=\"true\"\n [value]=\"endValue ? endValue : handleDate(datasource.options.maxDate)\"\n [min]=\"\n beginValue ? beginValue : handleDate(datasource.options.minDate)\n \"\n [max]=\"handleDate(datasource.options.maxDate)\"\n />\n </mat-form-field>\n <div class=\"actions-container\">\n <button\n class=\"reset-button\"\n mat-icon-button\n color=\"primary\"\n (click)=\"resetFilter()\"\n [matTooltip]=\"'igo.geo.filter.resetFilters' | translate\"\n [disabled]=\"filterStateDisable\"\n >\n <mat-icon svgIcon=\"{{ resetIcon }}\"></mat-icon>\n </button>\n <mat-slide-toggle\n class=\"toggle-filter-state\"\n (change)=\"toggleFilterState()\"\n [matTooltip]=\"'igo.geo.filter.toggleFilterState' | translate\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [checked]=\"!filterStateDisable\"\n >\n </mat-slide-toggle>\n </div>\n </div>\n\n <div class=\"datetime-input-container\" *ngIf=\"calendarType() !== 'year'\">\n <div class=\"datetime-input\">\n <mat-form-field class=\"date-input\" subscriptSizing=\"dynamic\">\n <mat-datepicker-toggle\n matSuffix\n [for]=\"beginDatepicker\"\n [disabled]=\"filterStateDisable\"\n ></mat-datepicker-toggle>\n <input\n #begin\n matInput\n [matDatepicker]=\"beginDatepicker\"\n [placeholder]=\"'igo.geo.timeFilter.startDate' | translate\"\n [attr.disabled]=\"!currentFilter.active\"\n (dateChange)=\"changeTemporalProperty(begin.value, 1)\"\n [matDatepickerFilter]=\"filterBeginFunction\"\n [value]=\"\n beginValue ? beginValue : handleDate(datasource.options.minDate)\n \"\n [min]=\"handleDate(datasource.options.minDate)\"\n [max]=\"\n endValue && !restrictedToStep()\n ? endValue\n : handleDate(datasource.options.maxDate)\n \"\n [disabled]=\"filterStateDisable\"\n />\n <span class=\"filler\"></span>\n <mat-datepicker\n #beginDatepicker\n [startView]=\"calendarView()\"\n [startAt]=\"beginValue\"\n (yearSelected)=\"yearSelected($event, beginDatepicker, 'begin')\"\n (monthSelected)=\"monthSelected($event, beginDatepicker, 'begin')\"\n >\n </mat-datepicker>\n </mat-form-field>\n\n <div *ngIf=\"calendarType() === 'datetime'\" class=\"time-input\">\n <mat-form-field class=\"hour-input\" subscriptSizing=\"dynamic\">\n <mat-label>{{ 'igo.geo.timeFilter.hour' | translate }}</mat-label>\n <mat-select\n [formControl]=\"beginHourFormControl\"\n [attr.disabled]=\"!currentFilter.active\"\n (selectionChange)=\"changeTemporalProperty(begin.value, 1)\"\n >\n <mat-option *ngFor=\"let hour of beginHours\" [value]=\"hour\">{{\n hour\n }}</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field class=\"minute-input\" subscriptSizing=\"dynamic\">\n <mat-label>{{ 'igo.geo.timeFilter.minute' | translate }}</mat-label>\n <mat-select\n [formControl]=\"beginMinuteFormControl\"\n [attr.disabled]=\"!currentFilter.active\"\n (selectionChange)=\"changeTemporalProperty(begin.value, 1)\"\n >\n <mat-option\n *ngFor=\"let minute of beginMinutes\"\n [value]=\"minute\"\n >{{ minute }}</mat-option\n >\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n\n <div *ngIf=\"!restrictedToStep()\" class=\"datetime-input\">\n <mat-form-field class=\"date-input\" subscriptSizing=\"dynamic\">\n <mat-datepicker-toggle\n matSuffix\n [for]=\"endDatepicker\"\n [disabled]=\"filterStateDisable\"\n ></mat-datepicker-toggle>\n <input\n #end\n matInput\n [matDatepicker]=\"endDatepicker\"\n [placeholder]=\"'igo.geo.timeFilter.endDate' | translate\"\n [attr.disabled]=\"!currentFilter.active\"\n (dateChange)=\"changeTemporalProperty(end.value, 2)\"\n [matDatepickerFilter]=\"filterEndFunction\"\n [value]=\"\n endValue ? endValue : handleDate(datasource.options.maxDate)\n \"\n [min]=\"\n beginValue ? beginValue : handleDate(datasource.options.minDate)\n \"\n [max]=\"handleDate(datasource.options.maxDate)\"\n [disabled]=\"filterStateDisable\"\n />\n <span class=\"filler\"></span>\n <mat-datepicker\n #endDatepicker\n [startView]=\"calendarView()\"\n [startAt]=\"endValue\"\n (yearSelected)=\"yearSelected($event, endDatepicker, 'end')\"\n (monthSelected)=\"monthSelected($event, endDatepicker, 'end')\"\n >\n </mat-datepicker>\n </mat-form-field>\n\n <div *ngIf=\"calendarType() === 'datetime'\" class=\"time-input\">\n <mat-form-field class=\"hour-input\" subscriptSizing=\"dynamic\">\n <mat-label>{{ 'igo.geo.timeFilter.hour' | translate }}</mat-label>\n <mat-select\n [formControl]=\"endHourFormControl\"\n [attr.disabled]=\"!currentFilter.active\"\n (selectionChange)=\"changeTemporalProperty(end.value, 2)\"\n >\n <mat-option *ngFor=\"let hour of endHours\" [value]=\"hour\">{{\n hour\n }}</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field class=\"minute-input\" subscriptSizing=\"dynamic\">\n <mat-label>{{ 'igo.geo.timeFilter.minute' | translate }}</mat-label>\n <mat-select\n [formControl]=\"endMinuteFormControl\"\n [attr.disabled]=\"!currentFilter.active\"\n (selectionChange)=\"changeTemporalProperty(end.value, 2)\"\n >\n <mat-option *ngFor=\"let minute of endMinutes\" [value]=\"minute\">{{\n minute\n }}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n\n <div class=\"actions-container\">\n <button\n class=\"reset-button\"\n mat-icon-button\n color=\"primary\"\n (click)=\"resetFilter()\"\n [matTooltip]=\"'igo.geo.filter.resetFilters' | translate\"\n [disabled]=\"filterStateDisable\"\n >\n <mat-icon svgIcon=\"{{ resetIcon }}\"></mat-icon>\n </button>\n <mat-slide-toggle\n class=\"toggle-filter-state\"\n (change)=\"toggleFilterState()\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.filter.toggleFilterState' | translate\"\n [checked]=\"!filterStateDisable\"\n >\n </mat-slide-toggle>\n </div>\n </div>\n </div>\n</div>\n", styles: [":host ::ng-deep input{text-align:center!important;margin:auto 5px!important}:host .slider-container{text-align:center}:host .datetime-input-container{display:flex;align-items:center;flex-wrap:wrap}:host .datetime-input-container>:not(:last-child){margin-right:8px}:host .datetime-input{display:block}:host .date-input{width:154px}:host .actions-container{display:flex;align-items:center}:host .time-input{margin-top:16px}:host .time-input>:not(:last-child){margin-right:8px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){:host .time-input{margin-top:4px}}:host .hour-input,:host .minute-input{width:100px}:host .year-input-container{display:flex;width:100%}:host .year-input-container mat-form-field:not(:last-child){margin-right:4px}:host .year-input-hide{width:120px;margin-right:25px;display:none}:host .year-input-only-year{width:120px;margin-right:25px;text-align:left!important}:host ::ng-deep .datepicker-year ::ng-deep .mat-calendar-arrow{display:none}:host ::ng-deep .datepicker-year ::ng-deep .mat-calendar-period-button{pointer-events:none}:host ::ng-deep .datepicker-year ::ng-deep .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover{background-color:#0000001f;border-radius:999px}\n"] }]
917
917
  }], function () { return [{ type: i1.OGCFilterTimeService }]; }, { datasource: [{
918
918
  type: Input
919
919
  }], currentFilter: [{
@@ -933,4 +933,4 @@ export class OgcFilterTimeComponent {
933
933
  type: ViewChild,
934
934
  args: ['endTime']
935
935
  }] }); })();
936
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2djLWZpbHRlci10aW1lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ZpbHRlci9vZ2MtZmlsdGVyLXRpbWUvb2djLWZpbHRlci10aW1lLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ZpbHRlci9vZ2MtZmlsdGVyLXRpbWUvb2djLWZpbHRlci10aW1lLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsTUFBTSxFQUNOLFlBQVksRUFFYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQU96RSxPQUFPLEVBQUUsT0FBTyxJQUFJLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQzs7Ozs7Ozs7O0lDakJ6QywyQ0FJQztJQUZDLDhQQUF3QixxTEFDZCxlQUFBLHlCQUFrQixDQUFBLElBREo7SUFHeEIsWUFDRjs7SUFBQSxpQkFBbUI7OztJQUpqQiwyQ0FBd0I7SUFHeEIsZUFDRjtJQURFLHVGQUNGOzs7O0lBRUEsOEJBQWlELG9DQUFBO0lBTTdDLCtNQUFrQixlQUFBLG1DQUE0QixDQUFBLElBQUM7SUFFakQsaUJBQTZCLEVBQUE7OztJQU4zQixlQUFvQjtJQUFwQix5Q0FBb0IscUVBQUEsdUNBQUEsaUNBQUE7Ozs7SUFVdEIsOEJBQTJELHlCQUFBLGdCQUFBO0lBSTVDLFlBQWdEOztJQUFBLGlCQUFZO0lBQ3ZFLGlDQU1FO0lBRkEsbU5BQVUsZUFBQSwwQ0FBNkMsT0FBTyxD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QUFNO1lBQ0wsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1NBQ2xDO1FBQ0QsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7Z0ZBOXNCVSxzQkFBc0I7NkRBQXRCLHNCQUFzQjs7Ozs7Ozs7Ozs7O1lDekJuQyw4QkFBZ0M7WUFDOUIsaUdBTW1CO1lBRW5CLHVFQVNNO1lBRU4sdUVBb1FNO1lBQ1IsaUJBQU07O1lBdlJELGVBQStDO1lBQS9DLCtHQUErQztZQU9uQixlQUFnQjtZQUFoQixxQ0FBZ0I7WUFXekMsZUFBaUI7WUFBakIsc0NBQWlCOzs7dUZES1osc0JBQXNCO2NBTGxDLFNBQVM7MkJBQ0UscUJBQXFCO3VFQUt0QixVQUFVO2tCQUFsQixLQUFLO1lBQ0csYUFBYTtrQkFBckIsS0FBSztZQUNJLGNBQWM7a0JBQXZCLE1BQU07WUFnQ3lCLGlCQUFpQjtrQkFBaEQsU0FBUzttQkFBQyxtQkFBbUI7WUFDSSxtQkFBbUI7a0JBQXBELFNBQVM7bUJBQUMscUJBQXFCO1lBQ1IsU0FBUztrQkFBaEMsU0FBUzttQkFBQyxXQUFXO1lBQ0EsT0FBTztrQkFBNUIsU0FBUzttQkFBQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgSW5wdXQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBPbkluaXRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVW50eXBlZEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBPZ2NGaWx0ZXJPcGVyYXRvciB9IGZyb20gJy4uLy4uL2ZpbHRlci9zaGFyZWQvb2djLWZpbHRlci5lbnVtJztcclxuaW1wb3J0IHsgT0dDRmlsdGVyVGltZVNlcnZpY2UgfSBmcm9tICcuLi9zaGFyZWQvb2djLWZpbHRlci10aW1lLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIE9nY0ZpbHRlcmFibGVEYXRhU291cmNlT3B0aW9ucyxcclxuICBPZ2NGaWx0ZXJhYmxlRGF0YVNvdXJjZSxcclxuICBPZ2NGaWx0ZXJEdXJpbmdPcHRpb25zXHJcbn0gZnJvbSAnLi4vc2hhcmVkL29nYy1maWx0ZXIuaW50ZXJmYWNlJztcclxuXHJcbmltcG9ydCB7IGRlZmF1bHQgYXMgbW9tZW50IH0gZnJvbSAnbW9tZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaWdvLW9nYy1maWx0ZXItdGltZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL29nYy1maWx0ZXItdGltZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vb2djLWZpbHRlci10aW1lLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIE9nY0ZpbHRlclRpbWVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpIGRhdGFzb3VyY2U6IE9nY0ZpbHRlcmFibGVEYXRhU291cmNlO1xyXG4gIEBJbnB1dCgpIGN1cnJlbnRGaWx0ZXI6IGFueTtcclxuICBAT3V0cHV0KCkgY2hhbmdlUHJvcGVydHk6IEV2ZW50RW1pdHRlcjx7XHJcbiAgICB2YWx1ZTogc3RyaW5nO1xyXG4gICAgcG9zOiBudW1iZXI7XHJcbiAgICByZWZyZXNoRmlsdGVyOiBib29sZWFuO1xyXG4gIH0+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIGJlZ2luSG91cnM6IG51bWJlcltdO1xyXG4gIGVuZEhvdXJzOiBudW1iZXJbXTtcclxuICBiZWdpbk1pbnV0ZXM6IG51bWJlcltdO1xyXG4gIGVuZE1pbnV0ZXM6IG51bWJlcltdO1xyXG4gIGJlZ2luSG91ckZvcm1Db250cm9sID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgpO1xyXG4gIGJlZ2luTWludXRlRm9ybUNvbnRyb2wgPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKCk7XHJcbiAgZW5kSG91ckZvcm1Db250cm9sID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgpO1xyXG4gIGVuZE1pbnV0ZUZvcm1Db250cm9sID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgpO1xyXG4gIF9iZWdpblZhbHVlOiBEYXRlO1xyXG4gIF9lbmRWYWx1ZTogRGF0ZTtcclxuICByZWFkb25seSBfZGVmYXVsdE1pbjogc3RyaW5nID0gJzE5MDAtMDEtMDEnO1xyXG4gIHJlYWRvbmx5IF9kZWZhdWx0TWF4OiBzdHJpbmcgPSAnMjA1Mi0wMS0wNic7XHJcbiAgcmVhZG9ubHkgX2RlZmF1bHREaXNwbGF5Rm9ybWF0OiBzdHJpbmcgPSAnREQvTU0vWVlZWSBISDptbSBBJztcclxuICByZWFkb25seSBfZGVmYXVsdFNsaWRlck1vZGVFbmFibGVkOiBib29sZWFuID0gdHJ1ZTtcclxuICBvZ2NGaWx0ZXJPcGVyYXRvciA9IE9nY0ZpbHRlck9wZXJhdG9yO1xyXG4gIHB1YmxpYyBzbGlkZXJNb2RlID0gZmFsc2U7XHJcblxyXG4gIHJlYWRvbmx5IGRlZmF1bHRTdGVwTWlsbGlzZWNvbmQgPSA2MDAwMDtcclxuICBwdWJsaWMgb3B0aW9uczogT2djRmlsdGVyYWJsZURhdGFTb3VyY2VPcHRpb25zO1xyXG5cclxuICBwdWJsaWMgb25seVllYXJCZWdpbjogbnVtYmVyO1xyXG4gIHB1YmxpYyBvbmx5WWVhckVuZDogbnVtYmVyO1xyXG4gIHB1YmxpYyBjYWxlbmRhclR5cGVZZWFyID0gZmFsc2U7XHJcbiAgcHVibGljIHJlc2V0SWNvbiA9ICdyZXBsYXknO1xyXG4gIHB1YmxpYyBmaWx0ZXJTdGF0ZURpc2FibGU6IGJvb2xlYW47XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2VuZERhdGVwaWNrZXJUaW1lJykgZW5kRGF0ZXBpY2tlclRpbWU6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnYmVnaW5EYXRlcGlja2VyVGltZScpIGJlZ2luRGF0ZXBpY2tlclRpbWU6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnYmVnaW5UaW1lJykgYmVnaW5UaW1lOiBIVE1MSW5wdXRFbGVtZW50O1xyXG4gIEBWaWV3Q2hpbGQoJ2VuZFRpbWUnKSBlbmRUaW1lOiBIVE1MSW5wdXRFbGVtZW50O1xyXG5cclxuICBnZXQgc3RlcCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLnN0ZXBEYXRlXHJcbiAgICAgID8gdGhpcy5kYXRhc291cmNlLm9wdGlvbnMuc3RlcERhdGVcclxuICAgICAgOiB0aGlzLmN1cnJlbnRGaWx0ZXIuc3RlcDtcclxuICB9XHJcblxyXG4gIGdldCBzdGVwTWlsbGlzZWNvbmRzKCk6IG51bWJlciB7XHJcbiAgICBjb25zdCBzdGVwID0gbW9tZW50LmR1cmF0aW9uKHRoaXMuc3RlcCkuYXNNaWxsaXNlY29uZHMoKTtcclxuICAgIHJldHVybiBzdGVwID09PSAwID8gdGhpcy5kZWZhdWx0U3RlcE1pbGxpc2Vjb25kIDogc3RlcDtcclxuICB9XHJcblxyXG4gIHNldCBiZWdpblZhbHVlKGJlZ2luOiBEYXRlKSB7XHJcbiAgICB0aGlzLl9iZWdpblZhbHVlID0gYmVnaW47XHJcbiAgfVxyXG5cclxuICBnZXQgYmVnaW5WYWx1ZSgpOiBEYXRlIHtcclxuICAgIHJldHVybiB0aGlzLl9iZWdpblZhbHVlO1xyXG4gIH1cclxuXHJcbiAgc2V0IGVuZFZhbHVlKGVuZDogRGF0ZSkge1xyXG4gICAgdGhpcy5fZW5kVmFsdWUgPSBlbmQ7XHJcbiAgfVxyXG5cclxuICBnZXQgZW5kVmFsdWUoKTogRGF0ZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZW5kVmFsdWU7XHJcbiAgfVxyXG5cclxuICBnZXQgc2xpZGVySW50ZXJ2YWwoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLmN1cnJlbnRGaWx0ZXIuc2xpZGVySW50ZXJ2YWwgPT09IHVuZGVmaW5lZFxyXG4gICAgICA/IDIwMDBcclxuICAgICAgOiB0aGlzLmN1cnJlbnRGaWx0ZXIuc2xpZGVySW50ZXJ2YWw7XHJcbiAgfVxyXG5cclxuICBnZXQgbWF4RGF0ZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm1heERhdGVcclxuICAgICAgPyB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5tYXhEYXRlXHJcbiAgICAgIDogdGhpcy5fZGVmYXVsdE1heDtcclxuICB9XHJcblxyXG4gIGdldCBkaXNwbGF5Rm9ybWF0KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50RmlsdGVyLmRpc3BsYXlGb3JtYXRcclxuICAgICAgPyB0aGlzLmN1cnJlbnRGaWx0ZXIuZGlzcGxheUZvcm1hdFxyXG4gICAgICA6IHRoaXMuX2RlZmF1bHREaXNwbGF5Rm9ybWF0O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGZpbHRlckJlZ2luRnVuY3Rpb247XHJcbiAgcHVibGljIGZpbHRlckVuZEZ1bmN0aW9uO1xyXG5cclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgb2djRmlsdGVyVGltZVNlcnZpY2U6IE9HQ0ZpbHRlclRpbWVTZXJ2aWNlKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnRGaWx0ZXIuc2xpZGVyT3B0aW9ucykge1xyXG4gICAgICB0aGlzLmN1cnJlbnRGaWx0ZXIuc2xpZGVyT3B0aW9ucy5lbmFibGVkID1cclxuICAgICAgICB0aGlzLmN1cnJlbnRGaWx0ZXIuc2xpZGVyT3B0aW9ucy5lbmFibGVkICE9PSB1bmRlZmluZWRcclxuICAgICAgICAgID8gdGhpcy5jdXJyZW50RmlsdGVyLnNsaWRlck9wdGlvbnMuZW5hYmxlZFxyXG4gICAgICAgICAgOiB0aGlzLl9kZWZhdWx0U2xpZGVyTW9kZUVuYWJsZWQ7XHJcbiAgICB9XHJcbiAgICB0aGlzLmJlZ2luVmFsdWUgPSB0aGlzLnBhcnNlRmlsdGVyKHRoaXMuaGFuZGxlTWluKCkpO1xyXG4gICAgdGhpcy5lbmRWYWx1ZSA9IHRoaXMucGFyc2VGaWx0ZXIodGhpcy5oYW5kbGVNYXgoKSk7XHJcblxyXG4gICAgdGhpcy5vbmx5WWVhckJlZ2luID0gdGhpcy5iZWdpblZhbHVlLmdldFVUQ0Z1bGxZZWFyKCk7XHJcbiAgICB0aGlzLm9ubHlZZWFyRW5kID0gdGhpcy5lbmRWYWx1ZS5nZXRVVENGdWxsWWVhcigpO1xyXG4gICAgdGhpcy5jYWxlbmRhclR5cGVZZWFyID0gdGhpcy5pc0NhbGVuZGFyWWVhck1vZGUoKTtcclxuICAgIHRoaXMuc2V0RmlsdGVyU3RhdGVEaXNhYmxlKCk7XHJcbiAgICB0aGlzLnVwZGF0ZUhvdXJzTWludXRlc0FycmF5KCk7XHJcbiAgICAvLyB1cGRhdGUgdmFsdWUgZm9yIG5vdyB2YWx1ZVxyXG4gICAgdGhpcy51cGRhdGVWYWx1ZXMoKTtcclxuICAgIHRoaXMuZGF0ZUZpbHRlcih0aGlzLmZpbHRlckJlZ2luRnVuY3Rpb24sICdiZWdpbicpO1xyXG4gICAgdGhpcy5kYXRlRmlsdGVyKHRoaXMuZmlsdGVyRW5kRnVuY3Rpb24sICdlbmQnKTtcclxuICB9XHJcblxyXG4gIHBhcnNlRmlsdGVyKGZpbHRlcik6IERhdGUge1xyXG4gICAgaWYgKCFmaWx0ZXIpIHtcclxuICAgICAgcmV0dXJuIG5ldyBEYXRlKCk7XHJcbiAgICB9IGVsc2UgaWYgKGlzTmFOKG5ldyBEYXRlKGZpbHRlcikuZ2V0VGltZSgpKSkge1xyXG4gICAgICBpZiAoZmlsdGVyLnNlYXJjaCgnbm93JykgPj0gMCkge1xyXG4gICAgICAgIGNvbnN0IGludGVydmFsID0gZmlsdGVyLm1hdGNoKC95ZWFyc3xtb250aHN8d2Vla3N8ZGF5c3xob3Vyc3xzZWNvbmRzLyk7XHJcbiAgICAgICAgaWYgKGZpbHRlci5tYXRjaCgvXFwrLykpIHtcclxuICAgICAgICAgIGNvbnN0IGludGVydmFsSW50ID0gcGFyc2VJbnQoXHJcbiAgICAgICAgICAgIGZpbHRlci5zdWJzdHJpbmcoZmlsdGVyLnNlYXJjaCgnKycpICsgMSwgaW50ZXJ2YWwuaW5kZXgpLFxyXG4gICAgICAgICAgICAxMFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHJldHVybiBtb21lbnQoKS5hZGQoaW50ZXJ2YWxJbnQsIGludGVydmFsWzBdKS50b0RhdGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZpbHRlci5tYXRjaCgvXFwtLykpIHtcclxuICAgICAgICAgIGNvbnN0IGludGVydmFsSW50ID0gcGFyc2VJbnQoXHJcbiAgICAgICAgICAgIGZpbHRlci5zdWJzdHJpbmcoZmlsdGVyLnNlYXJjaCgnLScpICsgMSwgaW50ZXJ2YWwuaW5kZXgpLFxyXG4gICAgICAgICAgICAxMFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHJldHVybiBtb21lbnQoKS5zdWJ0cmFjdChpbnRlcnZhbEludCwgaW50ZXJ2YWxbMF0pLnRvRGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3IERhdGUoKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZmlsdGVyLnNlYXJjaCgndG9kYXknKSA+PSAwKSB7XHJcbiAgICAgICAgY29uc3QgX25vdyA9IG1vbWVudCgpLmVuZE9mKCdkYXknKS50b0RhdGUoKTtcclxuICAgICAgICBjb25zdCBpbnRlcnZhbCA9IGZpbHRlci5tYXRjaCgveWVhcnN8bW9udGhzfHdlZWtzfGRheXN8aG91cnN8c2Vjb25kcy8pO1xyXG4gICAgICAgIGlmIChmaWx0ZXIubWF0Y2goL1xcKy8pKSB7XHJcbiAgICAgICAgICBjb25zdCBpbnRlcnZhbEludCA9IHBhcnNlSW50KFxyXG4gICAgICAgICAgICBmaWx0ZXIuc3Vic3RyaW5nKGZpbHRlci5zZWFyY2goJysnKSArIDEsIGludGVydmFsLmluZGV4KSxcclxuICAgICAgICAgICAgMTBcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICByZXR1cm4gbW9tZW50KF9ub3cpLmFkZChpbnRlcnZhbEludCwgaW50ZXJ2YWxbMF0pLnRvRGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZmlsdGVyLm1hdGNoKC9cXC0vKSkge1xyXG4gICAgICAgICAgY29uc3QgaW50ZXJ2YWxJbnQgPSBwYXJzZUludChcclxuICAgICAgICAgICAgZmlsdGVyLnN1YnN0cmluZyhmaWx0ZXIuc2VhcmNoKCctJykgKyAxLCBpbnRlcnZhbC5pbmRleCksXHJcbiAgICAgICAgICAgIDEwXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcmV0dXJuIG1vbWVudChfbm93KS5zdWJ0cmFjdChpbnRlcnZhbEludCwgaW50ZXJ2YWxbMF0pLnRvRGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gX25vdztcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbmV3IERhdGUoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmN1cnJlbnRGaWx0ZXIuY2FsZW5kYXJNb2RlWWVhcikge1xyXG4gICAgICBjb25zdCBkYXRlID0gdGhpcy5nZXREYXRlRnJvbVN0cmluZ1dpdGhvdXRUaW1lKGZpbHRlcik7XHJcbiAgICAgIHJldHVybiBkYXRlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZpbHRlciA/IG5ldyBEYXRlKGZpbHRlcikgOiBuZXcgRGF0ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2hhbmdlVGVtcG9yYWxQcm9wZXJ0eSh2YWx1ZSwgcG9zaXRpb24/LCByZWZyZXNoRmlsdGVyID0gdHJ1ZSkge1xyXG4gICAgbGV0IHZhbHVlVG1wID0gdGhpcy5nZXREYXRlVGltZSh2YWx1ZSwgcG9zaXRpb24pO1xyXG4gICAgaWYgKHRoaXMuaXNDYWxlbmRhclllYXJNb2RlKCkpIHtcclxuICAgICAgbGV0IGRhdGVTdHJpbmdGcm9tWWVhck5vdGltZTtcclxuICAgICAgaWYgKHBvc2l0aW9uID09PSAxKSB7XHJcbiAgICAgICAgdGhpcy5iZWdpblZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5vbmx5WWVhckJlZ2luID0gdGhpcy5iZWdpblZhbHVlLmdldEZ1bGxZZWFyKCk7XHJcbiAgICAgICAgZGF0ZVN0cmluZ0Zyb21ZZWFyTm90aW1lID0gYCR7dGhpcy5vbmx5WWVhckJlZ2lufS0wMS0wMWA7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5lbmRWYWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMub25seVllYXJFbmQgPSB0aGlzLmVuZFZhbHVlLmdldEZ1bGxZZWFyKCk7XHJcbiAgICAgICAgZGF0ZVN0cmluZ0Zyb21ZZWFyTm90aW1lID0gYCR7dGhpcy5vbmx5WWVhckVuZH0tMDEtMDFgO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIGNhbGwgc2VydmljZSB3aXRoIHN0cmluZyBkYXRlIHdpdGhvdXQgdGltZVxyXG4gICAgICB0aGlzLmNoYW5nZVByb3BlcnR5Lm5leHQoe1xyXG4gICAgICAgIHZhbHVlOiBkYXRlU3RyaW5nRnJvbVllYXJOb3RpbWUsXHJcbiAgICAgICAgcG9zOiBwb3NpdGlvbixcclxuICAgICAgICByZWZyZXNoRmlsdGVyXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAocG9zaXRpb24gPT09IDIgJiYgdGhpcy5jYWxlbmRhclR5cGUoKSA9PT0gJ2RhdGUnICYmICF0aGlzLnNsaWRlck1vZGUpIHtcclxuICAgICAgLyogQWJvdmUgbW9udGg6IHNlZSB5ZWFyU2VsZWN0ZWQgb3IgbW9udGhTZWxlY3RlZCAqL1xyXG4gICAgICB2YWx1ZVRtcCA9IG1vbWVudCh2YWx1ZVRtcCkuZW5kT2YoJ2RheScpLnRvRGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChwb3NpdGlvbiA9PT0gMSkge1xyXG4gICAgICB0aGlzLmJlZ2luVmFsdWUgPSB2YWx1ZVRtcDtcclxuICAgICAgaWYgKHRoaXMucmVzdHJpY3RlZFRvU3RlcCgpKSB7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VUZW1wb3JhbFByb3BlcnR5KFxyXG4gICAgICAgICAgdGhpcy5vZ2NGaWx0ZXJUaW1lU2VydmljZS5hZGRTdGVwKHZhbHVlVG1wLCB0aGlzLnN0ZXBNaWxsaXNlY29uZHMpLFxyXG4gICAgICAgICAgMixcclxuICAgICAgICAgIHJlZnJlc2hGaWx0ZXJcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmVuZFZhbHVlID0gdmFsdWVUbXA7XHJcbiAgICB9XHJcbiAgICB0aGlzLnVwZGF0ZUhvdXJzTWludXRlc0FycmF5KCk7XHJcbiAgICB0aGlzLmNoYW5nZVByb3BlcnR5Lm5leHQoe1xyXG4gICAgICB2YWx1ZTogdmFsdWVUbXAudG9JU09TdHJpbmcoKSxcclxuICAgICAgcG9zOiBwb3NpdGlvbixcclxuICAgICAgcmVmcmVzaEZpbHRlclxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVEYXRlKHZhbHVlKTogRGF0ZSB7XHJcbiAgICBpZiAoIXZhbHVlIHx8IHZhbHVlID09PSAnJykge1xyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdGhpcy5jdXJyZW50RmlsdGVyLmNhbGVuZGFyTW9kZVllYXIpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0RGF0ZUZyb21TdHJpbmdXaXRob3V0VGltZSh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3IERhdGUodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgY2FsZW5kYXJUeXBlKCkge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudEZpbHRlci5jYWxlbmRhck1vZGVZZWFyKSB7XHJcbiAgICAgIHJldHVybiAneWVhcic7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zdGVwTWlsbGlzZWNvbmRzIDwgODY0MDAwMDApIHtcclxuICAgICAgcmV0dXJuICdkYXRldGltZSc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJ2RhdGUnO1xyXG4gIH1cclxuXHJcbiAgaXNDYWxlbmRhclllYXJNb2RlKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuY2FsZW5kYXJUeXBlKCkgPT09ICd5ZWFyJykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHllYXJPbmx5SW5wdXRDaGFuZ2UoY2hhbmdlRXZlbnQsIGRhdGVQaWNrZXI/OiBhbnksIHByb3BlcnR5Pzogc3RyaW5nKSB7XHJcbiAgICBjb25zdCB5ZWFyID0gY2hhbmdlRXZlbnQudGFyZ2V0LnZhbHVlO1xyXG4gICAgY29uc3QgZGF0ZSA9IHRoaXMuZ2V0RGF0ZUZyb21TdHJpbmdXaXRob3V0VGltZSh5ZWFyKTtcclxuICAgIHRoaXMueWVhclNlbGVjdGVkKGRhdGUsIGRhdGVQaWNrZXIsIHByb3BlcnR5KTtcclxuICB9XHJcblxyXG4gIHllYXJTZWxlY3RlZChcclxuICAgIHllYXIsXHJcbiAgICBkYXRlUGlja2VyPzogYW55LFxyXG4gICAgcHJvcGVydHk/OiBzdHJpbmcsXHJcbiAgICByZWZyZXNoRmlsdGVyID0gdHJ1ZVxyXG4gICkge1xyXG4gICAgaWYgKHRoaXMub2djRmlsdGVyVGltZVNlcnZpY2Uuc3RlcElzWWVhckR1cmF0aW9uKHRoaXMuc3RlcCkpIHtcclxuICAgICAgaWYgKGRhdGVQaWNrZXIpIHtcclxuICAgICAgICBkYXRlUGlja2VyLmNsb3NlKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHByb3BlcnR5ID09PSAnZW5kJykge1xyXG4gICAgICAgIC8vIGNoYW5nZSB2YWx1ZSAwMSBqYW4gdG8gMzEgZGVjIHNhbWUgeWVhclxyXG4gICAgICAgIHllYXIgPSBtb21lbnQoeWVhcikuZW5kT2YoJ3llYXInKS50b0RhdGUoKTtcclxuICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICBwcm9wZXJ0eSA9PT0gJ2JlZ2luJyAmJlxyXG4gICAgICAgIHRoaXMucmVzdHJpY3RlZFRvU3RlcCgpICYmXHJcbiAgICAgICAgIXRoaXMuY2FsZW5kYXJUeXBlWWVhclxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnllYXJTZWxlY3RlZCh5ZWFyLCB1bmRlZmluZWQsICdlbmQnKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNoYW5nZVRlbXBvcmFsUHJvcGVydHkoXHJcbiAgICAgICAgeWVhcixcclxuICAgICAgICBwcm9wZXJ0eSA9PT0gJ2JlZ2luJyA/IDEgOiAyLFxyXG4gICAgICAgIHJlZnJlc2hGaWx0ZXJcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1vbnRoU2VsZWN0ZWQoXHJcbiAgICBtb250aCxcclxuICAgIGRhdGVQaWNrZXI/OiBhbnksXHJcbiAgICBwcm9wZXJ0eT86IHN0cmluZyxcclxuICAgIHJlZnJlc2hGaWx0ZXIgPSB0cnVlXHJcbiAgKSB7XHJcbiAgICBpZiAodGhpcy5vZ2NGaWx0ZXJUaW1lU2VydmljZS5zdGVwSXNNb250aER1cmF0aW9uKHRoaXMuc3RlcCkpIHtcclxuICAgICAgaWYgKGRhdGVQaWNrZXIpIHtcclxuICAgICAgICBkYXRlUGlja2VyLmNsb3NlKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHByb3BlcnR5ID09PSAnZW5kJykge1xyXG4gICAgICAgIG1vbnRoID0gbW9tZW50KG1vbnRoKS5lbmRPZignbW9udGgnKS50b0RhdGUoKTtcclxuICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eSA9PT0gJ2JlZ2luJyAmJiB0aGlzLnJlc3RyaWN0ZWRUb1N0ZXAoKSkge1xyXG4gICAgICAgIHRoaXMubW9udGhTZWxlY3RlZChtb250aCwgdW5kZWZpbmVkLCAnZW5kJyk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jaGFuZ2VUZW1wb3JhbFByb3BlcnR5KFxyXG4gICAgICAgIG1vbnRoLFxyXG4gICAgICAgIHByb3BlcnR5ID09PSAnYmVnaW4nID8gMSA6IDIsXHJcbiAgICAgICAgcmVmcmVzaEZpbHRlclxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2FsZW5kYXJWaWV3KCkge1xyXG4gICAgY29uc3QgdGVzdCA9IHRoaXMuc3RlcE1pbGxpc2Vjb25kcztcclxuICAgIGNvbnN0IGRpZmYgPSBNYXRoLmFicyhcclxuICAgICAgdGhpcy5wYXJzZUZpbHRlcih0aGlzLmN1cnJlbnRGaWx0ZXIuZW5kKS5nZXRUaW1lKCkgLVxyXG4gICAgICAgIHRoaXMucGFyc2VGaWx0ZXIodGhpcy5jdXJyZW50RmlsdGVyLmJlZ2luKS5nZXRUaW1lKClcclxuICAgICk7XHJcbiAgICBpZiAodGhpcy5vZ2NGaWx0ZXJUaW1lU2VydmljZS5zdGVwSXNZZWFyRHVyYXRpb24odGhpcy5zdGVwKSkge1xyXG4gICAgICByZXR1cm4gJ211bHRpLXllYXInO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLm9nY0ZpbHRlclRpbWVTZXJ2aWNlLnN0ZXBJc01vbnRoRHVyYXRpb24odGhpcy5zdGVwKSkge1xyXG4gICAgICByZXR1cm4gJ3llYXInO1xyXG4gICAgfSBlbHNlIGlmICh0ZXN0IDwgODY0MDAwMDAgJiYgZGlmZiA8IDg2NDAwMDAwKSB7XHJcbiAgICAgIHJldHVybiAnY2xvY2snO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICdtb250aCc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkYXRlRmlsdGVyKHR5cGU6IHN0cmluZywgZGF0ZTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBkYXRlVmFsdWUgPSBuZXcgRGF0ZShkYXRlKTtcclxuICAgIGNvbnN0IGRpZmYgPSBkYXRlVmFsdWUuZ2V0VGltZSgpIC0gbmV3IERhdGUodGhpcy5oYW5kbGVNaW4oKSkuZ2V0VGltZSgpO1xyXG5cclxuICAgIGlmICh0aGlzLm9nY0ZpbHRlclRpbWVTZXJ2aWNlLnN0ZXBJc1llYXJEdXJhdGlvbih0aGlzLnN0ZXApKSB7XHJcbiAgICAgIGNvbnN0IG1vbnRoRGlmZiA9IG1vbWVudChkYXRlVmFsdWUpLmRpZmYoXHJcbiAgICAgICAgbW9tZW50KHRoaXMuaGFuZGxlTWluKCkpLFxyXG4gICAgICAgICd5ZWFycycsXHJcbiAgICAgICAgdHJ1ZVxyXG4gICAgICApO1xyXG4gICAgICBpZiAodHlwZSA9PT0gJ2VuZCcpIHtcclxuICAgICAgICBjb25zdCBkYXRlVmFsdWVQbHVzMSA9IG1vbWVudChkYXRlVmFsdWUpLmFkZCgxLCAnZCcpO1xyXG4gICAgICAgIGNvbnN0IG1vbnRoRGlmZlBsdXMxID0gbW9tZW50KGRhdGVWYWx1ZVBsdXMxKS5kaWZmKFxyXG4gICAgICAgICAgbW9tZW50KHRoaXMuaGFuZGxlTWluKCkpLFxyXG4gICAgICAgICAgJ3llYXJzJyxcclxuICAgICAgICAgIHRydWVcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyRW5kRnVuY3Rpb24gPVxyXG4gICAgICAgICAgbW9udGhEaWZmUGx1czEgJSBtb21lbnQuZHVyYXRpb24odGhpcy5zdGVwKS5hc1llYXJzKCkgPT09IDA7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdiZWdpbicpIHtcclxuICAgICAgICB0aGlzLmZpbHRlckJlZ2luRnVuY3Rpb24gPVxyXG4gICAgICAgICAgbW9udGhEaWZmICUgbW9tZW50LmR1cmF0aW9uKHRoaXMuc3RlcCkuYXNZZWFycygpID09PSAwO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLm9nY0ZpbHRlclRpbWVTZXJ2aWNlLnN0ZXBJc01vbnRoRHVyYXRpb24odGhpcy5zdGVwKSkge1xyXG4gICAgICBjb25zdCBtb250aERpZmYgPSBtb21lbnQoZGF0ZVZhbHVlKS5kaWZmKFxyXG4gICAgICAgIG1vbWVudCh0aGlzLmhhbmRsZU1pbigpKSxcclxuICAgICAgICAnbW9udGhzJyxcclxuICAgICAgICB0cnVlXHJcbiAgICAgICk7XHJcbiAgICAgIGlmICh0eXBlID09PSAnZW5kJykge1xyXG4gICAgICAgIGNvbnN0IGRhdGVWYWx1ZVBsdXMxID0gbW9tZW50KGRhdGVWYWx1ZSkuYWRkKDEsICdkJyk7XHJcbiAgICAgICAgY29uc3QgbW9udGhEaWZmUGx1czEgPSBtb21lbnQoZGF0ZVZhbHVlUGx1czEpLmRpZmYoXHJcbiAgICAgICAgICBtb21lbnQodGhpcy5oYW5kbGVNaW4oKSksXHJcbiAgICAgICAgICAnbW9udGhzJyxcclxuICAgICAgICAgIHRydWVcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyRW5kRnVuY3Rpb24gPVxyXG4gICAgICAgICAgbW9udGhEaWZmUGx1czEgJSBtb21lbnQuZHVyYXRpb24odGhpcy5zdGVwKS5hc01vbnRocygpID09PSAwO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnYmVnaW4nKSB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJCZWdpbkZ1bmN0aW9uID1cclxuICAgICAgICAgIG1vbnRoRGlmZiAlIG1vbWVudC5kdXJhdGlvbih0aGlzLnN0ZXApLmFzTW9udGhzKCkgPT09IDA7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMub2djRmlsdGVyVGltZVNlcnZpY2Uuc3RlcElzV2Vla0R1cmF0aW9uKHRoaXMuc3RlcCkpIHtcclxuICAgICAgY29uc3Qgd2Vla0RpZmYgPSBtb21lbnQoZGF0ZVZhbHVlKS5kaWZmKFxyXG4gICAgICAgIG1vbWVudCh0aGlzLmhhbmRsZU1pbigpKSxcclxuICAgICAgICAnd2Vla3MnLFxyXG4gICAgICAgIHRydWVcclxuICAgICAgKTtcclxuICAgICAgaWYgKHR5cGUgPT09ICdlbmQnKSB7XHJcbiAgICAgICAgY29uc3QgZGF0ZVZhbHVlUGx1czEgPSBtb21lbnQoZGF0ZVZhbHVlKS5hZGQoMSwgJ2QnKTtcclxuICAgICAgICBjb25zdCB3ZWVrRGlmZlBsdXMxID0gbW9tZW50KGRhdGVWYWx1ZVBsdXMxKS5kaWZmKFxyXG4gICAgICAgICAgbW9tZW50KHRoaXMuaGFuZGxlTWluKCkpLFxyXG4gICAgICAgICAgJ3dlZWtzJyxcclxuICAgICAgICAgIHRydWVcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyRW5kRnVuY3Rpb24gPVxyXG4gICAgICAgICAgd2Vla0RpZmZQbHVzMSAlIG1vbWVudC5kdXJhdGlvbih0aGlzLnN0ZXApLmFzV2Vla3MoKSA9PT0gMDtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2JlZ2luJykge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyQmVnaW5GdW5jdGlvbiA9XHJcbiAgICAgICAgICB3ZWVrRGlmZiAlIG1vbWVudC5kdXJhdGlvbih0aGlzLnN0ZXApLmFzV2Vla3MoKSA9PT0gMDtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodGhpcy5vZ2NGaWx0ZXJUaW1lU2VydmljZS5zdGVwSXNEYXlEdXJhdGlvbih0aGlzLnN0ZXApKSB7XHJcbiAgICAgIGNvbnN0IGRheURpZmYgPSBtb21lbnQoZGF0ZVZhbHVlKS5kaWZmKFxyXG4gICAgICAgIG1vbWVudCh0aGlzLmhhbmRsZU1pbigpKSxcclxuICAgICAgICAnZGF5cycsXHJcbiAgICAgICAgdHJ1ZVxyXG4gICAgICApO1xyXG4gICAgICBpZiAodHlwZSA9PT0gJ2VuZCcpIHtcclxuICAgICAgICBjb25zdCBkYXRlVmFsdWVQbHVzMSA9IG1vbWVudChkYXRlVmFsdWUpLmFkZCgxLCAnZCcpO1xyXG4gICAgICAgIGNvbnN0IGRheURpZmZQbHVzMSA9IG1vbWVudChkYXRlVmFsdWVQbHVzMSkuZGlmZihcclxuICAgICAgICAgIG1vbWVudCh0aGlzLmhhbmRsZU1pbigpKSxcclxuICAgICAgICAgICdkYXlzJyxcclxuICAgICAgICAgIHRydWVcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IF9tb2QgPSBkYXlEaWZmUGx1czEgJSBtb21lbnQuZHVyYXRpb24odGhpcy5zdGVwKS5hc0RheXMoKTtcclxuICAgICAgICB0aGlzLmZpbHRlckVuZEZ1bmN0aW9uID1cclxuICAgICAgICAgIChfbW9kIDwgMC4wMDAwMDAxICYmIF9tb2QgPiAtMC4wMDAwMDAxKSB8fCBfbW9kID09PSAwOyAvLyAxIG1pbGxpc2Vjb25kID0gMS4xNTc0MDc0MDc0MDc0MDc2ZS04XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdiZWdpbicpIHtcclxuICAgICAgICBjb25zdCBfbW9kID0gKGRheURpZmYgJSBtb21lbnQuZHVyYXRpb24odGhpcy5zdGVwKS5hc0RheXMoKSkgKyAxO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyQmVnaW5GdW5jdGlvbiA9XHJcbiAgICAgICAgICAoX21vZCA8IDAuMDAwMDAwMSAmJiBfbW9kID4gLTAuMDAwMDAwMSAmJiBfbW9kICE9PSAwKSB8fCBfbW9kID09PSAxOyAvLyAxIG1pbGxpc2Vjb25kID0gMS4xNTc0MDc0MDc0MDc0MDc2ZS04XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMub2djRmlsdGVyVGltZVNlcnZpY2Uuc3RlcElzSG91ckR1cmF0aW9uKHRoaXMuc3RlcCkpIHtcclxuICAgICAgaWYgKHR5cGUgPT09ICdlbmQnKSB7XHJcbiAgICAgICAgY29uc3QgaG91ckRpZmYgPSBtb21lbnQoZGF0ZVZhbHVlKS5kaWZmKFxyXG4gICAgICAgICAgbW9tZW50KHRoaXMuaGFuZGxlTWluKCkpLFxyXG4gICAgICAgICAgJ2hvdXJzJyxcclxuICAgICAgICAgIHRydWVcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyRW5kRnVuY3Rpb24gPVxyXG4gICAgICAgICAgaG91ckRpZmYgJSBtb21lbnQuZHVyYXRpb24odGhpcy5zdGVwKS5hc0hvdXJzKCkgPT09IDA7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdiZWdpbicpIHtcclxuICAgICAgICBjb25zdCBob3VyRGlmZiA9IG1vbWVudChkYXRlVmFsdWUpLmRpZmYoXHJcbiAgICAgICAgICBtb21lbnQodGhpcy5oYW5kbGVNaW4oKSksXHJcbiAgICAgICAgICAnaG91cnMnLFxyXG4gICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJCZWdpbkZ1bmN0aW9uID1cclxuICAgICAgICAgIGhvdXJEaWZmICUgbW9tZW50LmR1cmF0aW9uKHRoaXMuc3RlcCkuYXNIb3VycygpID09PSAwO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLm9nY0ZpbHRlclRpbWVTZXJ2aWNlLnN0ZXBJc01pbnV0ZUR1cmF0aW9uKHRoaXMuc3RlcCkpIHtcclxuICAgICAgaWYgKHR5cGUgPT09ICdlbmQnKSB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJFbmRGdW5jdGlvbiA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdiZWdpbicpIHtcclxuICAgICAgICB0aGlzLmZpbHRlckJlZ2luRnVuY3Rpb24gPSB0cnVlO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZmlsdGVyRW5kRnVuY3Rpb24gPSBkaWZmICUgdGhpcy5zdGVwTWlsbGlzZWNvbmRzID09PSAwO1xyXG4gICAgdGhpcy5maWx0ZXJCZWdpbkZ1bmN0aW9uID0gZGlmZiAlIHRoaXMuc3RlcE1pbGxpc2Vjb25kcyA9PT0gMDtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGdldERhdGVUaW1lKGRhdGUsIHBvcykge1xyXG4gICAgY29uc3QgdmFsdWV0bXAgPSBuZXcgRGF0ZShkYXRlKTtcclxuICAgIGxldCB2YWx1ZXRtcDI7XHJcbiAgICBpZiAoIXRoaXMuc2xpZGVyTW9kZSkge1xyXG4gICAgICBzd2l0Y2ggKHBvcykge1xyXG4gICAgICAgIGNhc2UgMToge1xyXG4gICAgICAgICAgaWYgKHRoaXMuY3VycmVudEZpbHRlci5jYWxlbmRhck1vZGVZZWFyKSB7XHJcbiAgICAgICAgICAgIHZhbHVldG1wMiA9IHZhbHVldG1wLnNldEhvdXJzKDAsIDApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHZhbHVldG1wMiA9IHZhbHVldG1wLnNldEhvdXJzKFxyXG4gICAgICAgICAgICAgIHRoaXMuYmVnaW5Ib3VyRm9ybUNvbnRyb2wudmFsdWUsXHJcbiAgICAgICAgICAgICAgdGhpcy5iZWdpbk1pbnV0ZUZvcm1Db250cm9sLnZhbHVlXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYXNlIDI6IHtcclxuICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRGaWx0ZXIuY2FsZW5kYXJNb2RlWWVhcikge1xyXG4gICAgICAgICAgICB2YWx1ZXRtcDIgPSB2YWx1ZXRtcC5zZXRIb3VycygwLCAwKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YWx1ZXRtcDIgPSB2YWx1ZXRtcC5zZXRIb3VycyhcclxuICAgICAgICAgICAgICB0aGlzLmVuZEhvdXJGb3JtQ29udHJvbC52YWx1ZSxcclxuICAgICAgICAgICAgICB0aGlzLmVuZE1pbnV0ZUZvcm1Db250cm9sLnZhbHVlXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVldG1wMiA/IHZhbHVldG1wMiA6IHZhbHVldG1wKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZU1pbnV0ZUluY3JlbWVudCgpIHtcclxuICAgIGlmICh0aGlzLm9nY0ZpbHRlclRpbWVTZXJ2aWNlLnN0ZXBJc01pbnV0ZUR1cmF0aW9uKHRoaXMuc3RlcCkpIHtcclxuICAgICAgaWYgKHRoaXMuc3RlcE1pbGxpc2Vjb25kcyA8IDM2MDAwMDApIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGVwTWlsbGlzZWNvbmRzIC8gMTAwMCA9PT0gNjBcclxuICAgICAgICAgID8gMVxyXG4gICAgICAgICAgOiB0aGlzLnN0ZXBNaWxsaXNlY29uZHMgLyAxMDAwO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5zdGVwTWlsbGlzZWNvbmRzICUgMzYwMDAwMCkgLyA2MDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLm9nY0ZpbHRlclRpbWVTZXJ2aWNlLnN0ZXBJc0hvdXJEdXJhdGlvbih0aGlzLnN0ZXApKSB7XHJcbiAgICAgIHJldHVybiA2MDtcclxuICAgIH1cclxuICAgIHJldHVybiAxO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlSG91ckluY3JlbWVudCgpIHtcclxuICAgIGlmICh0aGlzLm9nY0ZpbHRlclRpbWVTZXJ2aWNlLnN0ZXBJc0hvdXJEdXJhdGlvbih0aGlzLnN0ZXApKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnN0ZXBNaWxsaXNlY29uZHMgLyAxMDAwIC8gNjAgLyA2MDtcclxuICAgIH1cclxuICAgIHJldHVybiAxO1xyXG4gIH1cclxuXHJcbiAgZnVsbEJlZ2luSG91cnNBcnJheShjaGVja0VuZFZhbHVlPykge1xyXG4gICAgaWYgKGNoZWNrRW5kVmFsdWUpIHtcclxuICAgICAgdGhpcy5iZWdpbkhvdXJzID0gQXJyYXkuZnJvbShcclxuICAgICAgICB7XHJcbiAgICAgICAgICBsZW5ndGg6XHJcbiAgICAgICAgICAgICh0aGlzLmVuZEhvdXJGb3JtQ29udHJvbC52YWx1ZSAtIDApIC8gdGhpcy5oYW5kbGVIb3VySW5jcmVtZW50KCkgKyAxXHJcbiAgICAgICAgfSxcclxuICAgICAgICAoXywgaSkgPT4gMCArIGkgKiB0aGlzLmhhbmRsZUhvdXJJbmNyZW1lbnQoKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5iZWdpbkhvdXJzID0gQXJyYXkuZnJvbShcclxuICAgICAgICB7IGxlbmd0aDogKDIzIC0gMCkgLyB0aGlzLmhhbmRsZUhvdXJJbmNyZW1lbnQoKSArIDEgfSxcclxuICAgICAgICAoXywgaSkgPT4gMCArIGkgKiB0aGlzLmhhbmRsZUhvdXJJbmNyZW1lbnQoKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5iZWdpbkhvdXJGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLmJlZ2luVmFsdWUuZ2V0SG91cnMoKSk7XHJcbiAgfVxyXG5cclxuICBmdWxsRW5kSG91cnNBcnJheShjaGVja0VuZFZhbHVlPykge1xyXG4gICAgaWYgKGNoZWNrRW5kVmFsdWUpIHtcclxuICAgICAgdGhpcy5lbmRIb3VycyA9IEFycmF5LmZyb20oXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbGVuZ3RoOlxyXG4gICAgICAgICAgICAoMjMgLSB0aGlzLmJlZ2luSG91ckZvcm1Db250cm9sLnZhbHVlKSAvXHJcbiAgICAgICAgICAgICAgdGhpcy5oYW5kbGVIb3VySW5jcmVtZW50KCkgK1xyXG4gICAgICAgICAgICAxXHJcbiAgICAgICAgfSxcclxuICAgICAgICAoXywgaSkgPT5cclxuICAgICAgICAgIHRoaXMuYmVnaW5Ib3VyRm9ybUNvbnRyb2wudmFsdWUgKyBpICogdGhpcy5oYW5kbGVIb3VySW5jcmVtZW50KClcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZW5kSG91cnMgPSBBcnJheS5mcm9tKFxyXG4gICAgICAgIHsgbGVuZ3RoOiAoMjMgLSAwKSAvIHRoaXMuaGFuZGxlSG91ckluY3JlbWVudCgpICsgMSB9LFxyXG4gICAgICAgIChfLCBpKSA9PiAwICsgaSAqIHRoaXMuaGFuZGxlSG91ckluY3JlbWVudCgpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmVuZEhvdXJGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLmVuZFZhbHVlLmdldEhvdXJzKCkpO1xyXG4gIH1cclxuXHJcbiAgZnVsbEJlZ2luTWludXRlc0FycmF5KGNoZWNrRW5kVmFsdWU/KSB7XHJcbiAgICBpZiAoY2hlY2tFbmRWYWx1ZSkge1xyXG4gICAgICB0aGlzLmJlZ2luTWludXRlcyA9IEFycmF5LmZyb20oXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbGVuZ3RoOlxyXG4gICAgICAgICAgICAodGhpcy5lbmRNaW51dGVGb3JtQ29udHJvbC52YWx1ZSAtIDApIC9cclxuICAgICAgICAgICAgICB0aGlzLmhhbmRsZU1pbnV0ZUluY3JlbWVudCgpICtcclxuICAgICAgICAgICAgMVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKF8sIGkpID0+IDAgKyBpICogdGhpcy5oYW5kbGVNaW51dGVJbmNyZW1lbnQoKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5iZWdpbk1pbnV0ZXMgPSBBcnJheS5mcm9tKFxyXG4gICAgICAgIHsgbGVuZ3RoOiAoNTkgLSAwKSAvIHRoaXMuaGFuZGxlTWludXRlSW5jcmVtZW50KCkgKyAxIH0sXHJcbiAgICAgICAgKF8sIGkpID0+IDAgKyBpICogdGhpcy5oYW5kbGVNaW51dGVJbmNyZW1lbnQoKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5iZWdpbk1pbnV0ZUZvcm1Db250cm9sLnNldFZhbHVlKHRoaXMuYmVnaW5WYWx1ZS5nZXRNaW51dGVzKCkpO1xyXG4gIH1cclxuXHJcbiAgZnVsbEVuZE1pbnV0ZXNBcnJheShjaGVja0VuZFZhbHVlPykge1xyXG4gICAgaWYgKGNoZWNrRW5kVmFsdWUpIHtcclxuICAgICAgdGhpcy5lbmRNaW51dGVzID0gQXJyYXkuZnJvbShcclxuICAgICAgICB7XHJcbiAgICAgICAgICBsZW5ndGg6XHJcbiAgICAgICAgICAgICg1OSAtIHRoaXMuYmVnaW5NaW51dGVGb3JtQ29udHJvbC52YWx1ZSkgL1xyXG4gICAgICAgICAgICAgIHRoaXMuaGFuZGxlTWludXRlSW5jcmVtZW50KCkgK1xyXG4gICAgICAgICAgICAxXHJcbiAgICAgICAgfSxcclxuICAgICAgICAoXywgaSkgPT5cclxuICAgICAgICAgIHRoaXMuYmVnaW5NaW51dGVGb3JtQ29udHJvbC52YWx1ZSArIGkgKiB0aGlzLmhhbmRsZU1pbnV0ZUluY3JlbWVudCgpXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmVuZE1pbnV0ZXMgPSBBcnJheS5mcm9tKFxyXG4gICAgICAgIHsgbGVuZ3RoOiAoNTkgLSAwKSAvIHRoaXMuaGFuZGxlTWludXRlSW5jcmVtZW50KCkgKyAxIH0sXHJcbiAgICAgICAgKF8sIGkpID0+IDAgKyBpICogdGhpcy5oYW5kbGVNaW51dGVJbmNyZW1lbnQoKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5lbmRNaW51dGVGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLmVuZFZhbHVlLmdldE1pbnV0ZXMoKSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVIb3Vyc01pbnV0ZXNBcnJheSgpIHtcclxuICAgIGNvbnN0IGJlZ2luVG1wID0gbmV3IERhdGUodGhpcy5iZWdpblZhbHVlKTtcclxuICAgIGNvbnN0IGVuZFRtcCA9IG5ldyBEYXRlKHRoaXMuZW5kVmFsdWUpO1xyXG4gICAgaWYgKGJlZ2luVG1wLnNldEhvdXJzKDAsIDApID09PSBlbmRUbXAuc2V0SG91cnMoMCwgMCkpIHtcclxuICAgICAgdGhpcy5mdWxsQmVnaW5Ib3Vyc0FycmF5KHRydWUpO1xyXG4gICAgICB0aGlzLmZ1bGxFbmRIb3Vyc0FycmF5KHRydWUpO1xyXG4gICAgICBpZiAodGhpcy5iZWdpblZhbHVlLmdldEhvdXJzKCkgPT09IHRoaXMuZW5kVmFsdWUuZ2V0SG91cnMoKSkge1xyXG4gICAgICAgIHRoaXMuZnVsbEJlZ2luTWludXRlc0FycmF5KHRydWUpO1xyXG4gICAgICAgIHRoaXMuZnVsbEVuZE1pbnV0ZXNBcnJheSh0cnVlKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5mdWxsQmVnaW5Ib3Vyc0FycmF5KCk7XHJcbiAgICAgIHRoaXMuZnVsbEVuZEhvdXJzQXJyYXkoKTtcclxuICAgICAgdGhpcy5mdWxsQmVnaW5NaW51dGVzQXJyYXkoKTtcclxuICAgICAgdGhpcy5mdWxsRW5kTWludXRlc0FycmF5KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVZhbHVlcygpIHtcclxuICAgIHRoaXMuY2hhbmdlVGVtcG9yYWxQcm9wZXJ0eSh0aGlzLmJlZ2luVmFsdWUsIDEsIGZhbHNlKTtcclxuICAgIHRoaXMuY2hhbmdlVGVtcG9yYWxQcm9wZXJ0eSh0aGlzLmVuZFZhbHVlLCAyLCB0cnVlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXN0cmljdGVkVG9TdGVwKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY3VycmVudEZpbHRlci5yZXN0cmljdFRvU3RlcFxyXG4gICAgICA/IHRoaXMuY3VycmVudEZpbHRlci5yZXN0cmljdFRvU3RlcFxyXG4gICAgICA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhbmRsZU1pbigpIHtcclxuICAgIHJldHVybiB0aGlzLmN1cnJlbnRGaWx0ZXIuYmVnaW5cclxuICAgICAgPyB0aGlzLmN1cnJlbnRGaWx0ZXIuYmVnaW5cclxuICAgICAgOiB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5taW5EYXRlXHJcbiAgICAgID8gdGhpcy5kYXRhc291cmNlLm9wdGlvbnMubWluRGF0ZVxyXG4gICAgICA6IHRoaXMuX2RlZmF1bHRNaW47XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlTWF4KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY3VycmVudEZpbHRlci5lbmRcclxuICAgICAgPyB0aGlzLmN1cnJlbnRGaWx0ZXIuZW5kXHJcbiAgICAgIDogdGhpcy5kYXRhc291cmNlLm9wdGlvbnMubWF4RGF0ZVxyXG4gICAgICA/IHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm1heERhdGVcclxuICAgICAgOiB0aGlzLl9kZWZhdWx0TWF4O1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlUHJvcGVydHlCeVBhc3MoZXZlbnQpIHtcclxuICAgIHRoaXMuY2hhbmdlUHJvcGVydHkubmV4dChldmVudCk7XHJcbiAgfVxyXG5cclxuICBtb2RlQ2hhbmdlKGV2ZW50KSB7XHJcbiAgICBpZiAoIWV2ZW50LmNoZWNrZWQpIHtcclxuICAgICAgdGhpcy51cGRhdGVWYWx1ZXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldEZpbHRlclN0YXRlRGlzYWJsZSgpIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnRGaWx0ZXIpIHtcclxuICAgICAgdGhpcy5maWx0ZXJTdGF0ZURpc2FibGUgPSAhdGhpcy5jdXJyZW50RmlsdGVyLmFjdGl2ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyU3RhdGVEaXNhYmxlID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jYWxlbmRhclR5cGUoKSA9PT0gJ2RhdGV0aW1lJykge1xyXG4gICAgICBpZiAodGhpcy5maWx0ZXJTdGF0ZURpc2FibGUgPT09IHRydWUpIHtcclxuICAgICAgICB0aGlzLmJlZ2luSG91ckZvcm1Db250cm9sLmRpc2FibGUoKTtcclxuICAgICAgICB0aGlzLmJlZ2luTWludXRlRm9ybUNvbnRyb2wuZGlzYWJsZSgpO1xyXG4gICAgICAgIHRoaXMuZW5kSG91ckZvcm1Db250cm9sLmRpc2FibGUoKTtcclxuICAgICAgICB0aGlzLmVuZE1pbnV0ZUZvcm1Db250cm9sLmRpc2FibGUoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmJlZ2luSG91ckZvcm1Db250cm9sLmVuYWJsZSgpO1xyXG4gICAgICAgIHRoaXMuYmVnaW5NaW51dGVGb3JtQ29udHJvbC5lbmFibGUoKTtcclxuICAgICAgICB0aGlzLmVuZEhvdXJGb3JtQ29udHJvbC5lbmFibGUoKTtcclxuICAgICAgICB0aGlzLmVuZE1pbnV0ZUZvcm1Db250cm9sLmVuYWJsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldERhdGVGcm9tU3RyaW5nV2l0aG91dFRpbWUoc3RyaW5nRGF0ZTogc3RyaW5nKTogRGF0ZSB7XHJcbiAgICAvLyB3YXJuaW5nIGNyZWF0ZSBkYXRlIHdpdGggbm8gdGltZSBtYWtlIGEgZGF0ZSBVVEMgd2l0aCBUWiBhbmQgdGhlIGRhdGUgY3JlYXRlIG1heWJlIG5vdCB0aGUgc2FtZSB5ZWFyLCBtb250aCBhbmQgZGF5XHJcbiAgICAvLyBleGVtcGxlOlxyXG4gICAgLy8gbmV3IERhdGUoJzIwMjItMDEtMDEnKSAtPiBGcmkgRGVjIDMxIDIwMjEgMTk6MDA6MDAgR01ULTA1MDAgKGhldXJlIG5vcm1hbGUgZGUgbOKAmUVzdCBub3JkLWFtw6lyaWNhaW4pXHJcbiAgICAvLyB0byBjcmVhdGUgc2FtZSBkYXRlIGFzIHN0cmluZywgYWRkIHRpbWUgMDAgaW4gdGhlIGNyZWF0aW9uXHJcbiAgICAvLyBuZXcgRGF0ZSgnMjAyMi0wMS0wMSAwMDowMDowMCcpIC0+IFNhdCBKYW4gMDEgMjAyMiAwMDowMDowMCBHTVQtMDUwMCAoaGV1cmUgbm9ybWFsZSBkZSBs4oCZRXN0IG5vcmQtYW3DqXJpY2FpbilcclxuICAgIGxldCB5ZWFyO1xyXG4gICAgbGV0IG1vbnRoID0gJzAxJztcclxuICAgIGxldCBkYXkgPSAnMDEnO1xyXG4gICAgaWYgKHN0cmluZ0RhdGUubGVuZ3RoID09PSAxMCkge1xyXG4gICAgICBjb25zdCBkYXRlSXRlbXMgPSBzdHJpbmdEYXRlLnNwbGl0KCctJyk7XHJcbiAgICAgIGlmIChkYXRlSXRlbXMubGVuZ3RoICE9PSAzKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgJ0Vycm9yIGluIGNvbmZpZyBkYXRlIGJlZ2luLWVuZCBmb3Igb2djRmlsdGVyOiBEYXRlIHdpdGhvdXQgdGltZSBmb3JtYXQgbmVlZCB0byBiZSBZWVlZLU1NLUREIG9yIFlZWVknXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB5ZWFyID0gZGF0ZUl0ZW1zWzBdO1xyXG4gICAgICAgIG1vbnRoID0gZGF0ZUl0ZW1zWzFdO1xyXG4gICAgICAgIGRheSA9IGRhdGVJdGVtc1syXTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChzdHJpbmdEYXRlLmxlbmd0aCA9PT0gNCkge1xyXG4gICAgICB5ZWFyID0gc3RyaW5nRGF0ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBuZXcgRGF0ZShzdHJpbmdEYXRlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZXcgRGF0ZShgJHt5ZWFyfS0ke21vbnRofS0ke2RheX0gMDA6MDA6MDBgKTtcclxuICB9XHJcblxyXG4gIHJlc2V0RmlsdGVyKCkge1xyXG4gICAgbGV0IGZpbHRlck9yaWdpbkNvbmZpZyA9IHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnNcclxuICAgICAgLmZpbHRlcnMgYXMgT2djRmlsdGVyRHVyaW5nT3B0aW9ucztcclxuXHJcbiAgICBsZXQgbWluRGVmYXVsdERhdGU7XHJcbiAgICBsZXQgbWF4RGVmYXVsdERhdGU7XHJcbiAgICBsZXQgbWluRGVmYXVsdElTT1N0cmluZztcclxuICAgIGxldCBtYXhEZWZhdWx0SVNPU3RyaW5nO1xyXG5cclxuICAgIGlmICh0aGlzLmNhbGVuZGFyVHlwZVllYXIpIHtcclxuICAgICAgaWYgKGZpbHRlck9yaWdpbkNvbmZpZy5lbmQgPT09ICd0b2RheScpIHtcclxuICAgICAgICBsZXQgdG9kYXlEYXRlU3RyaW5nTm9UaW1lID0gbmV3IERhdGUoKS50b0xvY2FsZURhdGVTdHJpbmcoJ2VuLUNBJyk7IC8vICcyMDIyLTAyLTEzJ1xyXG4gICAgICAgIG1heERlZmF1bHRJU09TdHJpbmcgPSBgJHt0b2RheURhdGVTdHJpbmdOb1RpbWUuc3Vic3RyaW5nKDAsIDQpfS0wMS0wMWA7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbWF4RGVmYXVsdElTT1N0cmluZyA9IGAke2ZpbHRlck9yaWdpbkNvbmZpZy5lbmQuc3Vic3RyaW5nKDAsIDQpfS0wMS0wMWA7XHJcbiAgICAgIH1cclxuICAgICAgbWluRGVmYXVsdElTT1N0cmluZyA9IGAke2ZpbHRlck9yaWdpbkNvbmZpZy5iZWdpbi5zdWJzdHJpbmcoMCwgNCl9LTAxLTAxYDtcclxuICAgICAgbWluRGVmYXVsdERhdGUgPSB0aGlzLmdldERhdGVGcm9tU3RyaW5nV2l0aG91dFRpbWUobWluRGVmYXVsdElTT1N0cmluZyk7XHJcbiAgICAgIG1heERlZmF1bHREYXRlID0gdGhpcy5nZXREYXRlRnJvbVN0cmluZ1dpdGhvdXRUaW1lKG1heERlZmF1bHRJU09TdHJpbmcpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbWluRGVmYXVsdERhdGUgPSB0aGlzLnBhcnNlRmlsdGVyKGZpbHRlck9yaWdpbkNvbmZpZy5iZWdpbik7XHJcbiAgICAgIG1heERlZmF1bHREYXRlID0gdGhpcy5wYXJzZUZpbHRlcihmaWx0ZXJPcmlnaW5Db25maWcuZW5kKTtcclxuICAgICAgbWluRGVmYXVsdElTT1N0cmluZyA9IG1pbkRlZmF1bHREYXRlLnRvSVNPU3RyaW5nKCk7XHJcbiAgICAgIG1heERlZmF1bHRJU09TdHJpbmcgPSBtYXhEZWZhdWx0RGF0ZS50b0lTT1N0cmluZygpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5jdXJyZW50RmlsdGVyLmJlZ2luICE9PSBtaW5EZWZhdWx0SVNPU3RyaW5nIHx8XHJcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlci5lbmQgIT09IG1heERlZmF1bHRJU09TdHJpbmdcclxuICAgICkge1xyXG4gICAgICB0aGlzLmJlZ2luVmFsdWUgPSBtaW5EZWZhdWx0RGF0ZTtcclxuICAgICAgdGhpcy5lbmRWYWx1ZSA9IG1heERlZmF1bHREYXRlO1xyXG4gICAgICB0aGlzLnVwZGF0ZVZhbHVlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdG9nZ2xlRmlsdGVyU3RhdGUoKSB7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50RmlsdGVyLmFjdGl2ZSA9PT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmN1cnJlbnRGaWx0ZXIuYWN0aXZlID0gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmN1cnJlbnRGaWx0ZXIuYWN0aXZlID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHRoaXMuc2V0RmlsdGVyU3RhdGVEaXNhYmxlKCk7XHJcbiAgICB0aGlzLnVwZGF0ZVZhbHVlcygpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZGF0ZXRpbWUtY29udGFpbmVyXCI+XHJcbiAgPG1hdC1zbGlkZS10b2dnbGVcclxuICAgICpuZ0lmPVwidGhpcy5jdXJyZW50RmlsdGVyLnNsaWRlck9wdGlvbnM/LmVuYWJsZWRcIlxyXG4gICAgWyhuZ01vZGVsKV09XCJzbGlkZXJNb2RlXCJcclxuICAgIChjaGFuZ2UpPVwibW9kZUNoYW5nZSgkZXZlbnQpXCJcclxuICA+XHJcbiAgICB7eyAnaWdvLmdlby5maWx0ZXIuc2xpZGVyTW9kZVRpdGxlJyB8IHRyYW5zbGF0ZSB9fVxyXG4gIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuXHJcbiAgPGRpdiBjbGFzcz1cInNsaWRlci1jb250YWluZXJcIiAqbmdJZj1cInNsaWRlck1vZGVcIj5cclxuICAgIDxpZ28tb2djLWZpbHRlci10aW1lLXNsaWRlclxyXG4gICAgICBbYmVnaW5dPVwiYmVnaW5WYWx1ZVwiXHJcbiAgICAgIFttYXhdPVwidGhpcy5yZXN0cmljdGVkVG9TdGVwKCkgPyB0aGlzLm1heERhdGUgOiB0aGlzLmVuZFZhbHVlXCJcclxuICAgICAgW2N1cnJlbnRGaWx0ZXJdPVwiY3VycmVudEZpbHRlclwiXHJcbiAgICAgIFtkYXRhc291cmNlXT1cImRhdGFzb3VyY2VcIlxyXG4gICAgICAoY2hhbmdlUHJvcGVydHkpPVwiY2hhbmdlUHJvcGVydHlCeVBhc3MoJGV2ZW50KVwiXHJcbiAgICA+XHJcbiAgICA8L2lnby1vZ2MtZmlsdGVyLXRpbWUtc2xpZGVyPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2ICpuZ0lmPVwiIXNsaWRlck1vZGVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJ5ZWFyLWlucHV0LWNvbnRhaW5lclwiICpuZ0lmPVwiY2FsZW5kYXJUeXBlWWVhclwiPlxyXG4gICAgICA8IS0tIHRvIGVtdWxhdGUgYSB5ZWFyLXBpY2tlciwgMiBpbnB1dDogZmlyc3QgaW5wdXQgdG8gc2hvdyB1c2VyIGp1c3QgeWVhciBhbmQgc2Vjb25kIGlucHV0IGhpZGVuIGFuZCBiaW5kIFxyXG4gICAgICAgIHdpdGggdGhlIGRhdGVwaWNrZXIgIC0tPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ5ZWFyLWlucHV0XCIgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+e3sgJ2lnby5nZW8udGltZUZpbHRlci5zdGFydFllYXInIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgY2xhc3M9XCJ5ZWFyLWlucHV0LW9ubHkteWVhclwiXHJcbiAgICAgICAgICB2YWx1ZT1cInt7IG9ubHlZZWFyQmVnaW4gfX1cIlxyXG4gICAgICAgICAgKGNoYW5nZSk9XCJ5ZWFyT25seUlucHV0Q2hhbmdlKCRldmVudCwgYmVnaW5EYXRlcGlja2VyLCAnYmVnaW4nKVwiXHJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZmlsdGVyU3RhdGVEaXNhYmxlXCJcclxuICAgICAgICAvPlxyXG4gICAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGVcclxuICAgICAgICAgIG1hdFN1ZmZpeFxyXG4gICAgICAgICAgW2Zvcl09XCJiZWdpbkRhdGVwaWNrZXJcIlxyXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImZpbHRlclN0YXRlRGlzYWJsZVwiXHJcbiAgICAgICAgPjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxyXG5cclxuICAgICAgICA8bWF0LWRhdGVwaWNrZXJcclxuICAgICAgICAgIHBhbmVsQ2xhc3M9XCJkYXRlcGlja2VyLXllYXJcIlxyXG4gICAgICAgICAgI2JlZ2luRGF0ZXBpY2tlclxyXG4gICAgICAgICAgW3N0YXJ0Vmlld109XCJjYWxlbmRhclZpZXcoKVwiXHJcbiAgICAgICAgICBbc3RhcnRBdF09XCJiZWdpblZhbHVlXCJcclxuICAgICAgICAgICh5ZWFyU2VsZWN0ZWQpPVwieWVhclNlbGVjdGVkKCRldmVudCwgYmVnaW5EYXRlcGlja2VyLCAnYmVnaW4nKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDwvbWF0LWRhdGVwaWNrZXI+XHJcblxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgI2JlZ2luWWVhclxyXG4gICAgICAgICAgY2xhc3M9XCJ5ZWFyLWlucHV0LWhpZGVcIlxyXG4gICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgIFttYXREYXRlcGlja2VyXT1cImJlZ2luRGF0ZXBpY2tlclwiXHJcbiAgICAgICAgICBlbmFibGVkPVwiZmFsc2VcIlxyXG4gICAgICAgICAgcmVhZG9ubHk9XCJ0cnVlXCJcclxuICAgICAgICAgIFt2YWx1ZV09XCJcclxuICAgICAgICAgICAgYmVnaW5WYWx1ZSA/IGJlZ2luVmFsdWUgOiBoYW5kbGVEYXRlKGRhdGFzb3VyY2Uub3B0aW9ucy5taW5EYXRlKVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICAgIFttaW5dPVwiaGFuZGxlRGF0ZShkYXRhc291cmNlLm9wdGlvbnMubWluRGF0ZSlcIlxyXG4gICAgICAgICAgW21heF09XCJcclxuICAgICAgICAgICAgZW5kVmFsdWUgJiYgIXJlc3RyaWN0ZWRUb1N0ZXAoKVxyXG4gICAgICAgICAgICAgID8gZW5kVmFsdWVcclxuICAgICAgICAgICAgICA6IGhhbmRsZURhdGUoZGF0YXNvdXJjZS5vcHRpb25zLm1heERhdGUpXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ5ZWFyLWlucHV0XCIgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+e3sgJ2lnby5nZW8udGltZUZpbHRlci5lbmRZZWFyJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgIGNsYXNzPVwieWVhci1pbnB1dC1vbmx5LXllYXJcIlxyXG4gICAgICAgICAgdmFsdWU9XCJ7eyBvbmx5WWVhckVuZCB9fVwiXHJcbiAgICAgICAgICAoY2hhbmdlKT1cInllYXJPbmx5SW5wdXRDaGFuZ2UoJGV2ZW50LCBlbmREYXRlcGlja2VyLCAnZW5kJylcIlxyXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImZpbHRlclN0YXRlRGlzYWJsZVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlXHJcbiAgICAgICAgICBtYXRTdWZmaXhcclxuICAgICAgICAgIFtmb3JdPVwiZW5kRGF0ZXBpY2tlclwiXHJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZmlsdGVyU3RhdGVEaXNhYmxlXCJcclxuICAgICAgICA+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgPG1hdC1kYXRlcGlja2VyXHJcbiAgICAgICAgICBwYW5lbENsYXNzPVwiZGF0ZXBpY2tlci15ZWFyXCJcclxuICAgICAgICAgICNlbmREYXRlcGlja2VyXHJcbiAgICAgICAgICBbc3RhcnRWaWV3XT1cImNhbGVuZGFyVmlldygpXCJcclxuICAgICAgICAgIFtzdGFydEF0XT1cImVuZFZhbHVlXCJcclxuICAgICAgICAgICh5ZWFyU2VsZWN0ZWQpPVwieWVhclNlbGVjdGVkKCRldmVudCwgZW5kRGF0ZXBpY2tlciwgJ2VuZCcpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgPC9tYXQtZGF0ZXBpY2tlcj5cclxuXHJcbiAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAjZW5kWWVhclxyXG4gICAgICAgICAgY2xhc3M9XCJ5ZWFyLWlucHV0LWhpZGVcIlxyXG4gICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgIFttYXREYXRlcGlja2VyXT1cImVuZERhdGVwaWNrZXJcIlxyXG4gICAgICAgICAgZW5hYmxlZD1cImZhbHNlXCJcclxuICAgICAgICAgIHJlYWRvbmx5PVwidHJ1ZVwiXHJcbiAgICAgICAgICBbdmFsdWVdPVwiZW5kVmFsdWUgPyBlbmRWYWx1ZSA6IGhhbmRsZURhdGUoZGF0YXNvdXJjZS5vcHRpb25zLm1heERhdGUpXCJcclxuICAgICAgICAgIFttaW5dPVwiXHJcbiAgICAgICAgICAgIGJlZ2luVmFsdWUgPyBiZWdpblZhbHVlIDogaGFuZGxlRGF0ZShkYXRhc291cmNlLm9wdGlvbnMubWluRGF0ZSlcclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgICBbbWF4XT1cImhhbmRsZURhdGUoZGF0YXNvdXJjZS5vcHRpb25zLm1heERhdGUpXCJcclxuICAgICAgICAvPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9ucy1jb250YWluZXJcIj5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICBjbGFzcz1cInJlc2V0LWJ1dHRvblwiXHJcbiAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwicmVzZXRGaWx0ZXIoKVwiXHJcbiAgICAgICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5maWx0ZXIucmVzZXRGaWx0ZXJzJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZmlsdGVyU3RhdGVEaXNhYmxlXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bWF0LWljb24gc3ZnSWNvbj1cInt7IHJlc2V0SWNvbiB9fVwiPjwvbWF0LWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGVcclxuICAgICAgICAgIGNsYXNzPVwidG9nZ2xlLWZpbHRlci1zdGF0ZVwiXHJcbiAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZUZpbHRlclN0YXRlKClcIlxyXG4gICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8uZmlsdGVyLnRvZ2dsZUZpbHRlclN0YXRlJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxyXG4gICAgICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXHJcbiAgICAgICAgICBbY2hlY2tlZF09XCIhZmlsdGVyU3RhdGVEaXNhYmxlXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJkYXRldGltZS1pbnB1dC1jb250YWluZXJcIiAqbmdJZj1cImNhbGVuZGFyVHlwZSgpICE9PSAneWVhcidcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImRhdGV0aW1lLWlucHV0XCI+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZGF0ZS1pbnB1dFwiIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIj5cclxuICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGVcclxuICAgICAgICAgICAgbWF0U3VmZml4XHJcbiAgICAgICAgICAgIFtmb3JdPVwiYmVnaW5EYXRlcGlja2VyXCJcclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpbHRlclN0YXRlRGlzYWJsZVwiXHJcbiAgICAgICAgICA+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgI2JlZ2luXHJcbiAgICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICAgIFttYXREYXRlcGlja2VyXT1cImJlZ2luRGF0ZXBpY2tlclwiXHJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInaWdvLmdlby50aW1lRmlsdGVyLnN0YXJ0RGF0ZScgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCIhY3VycmVudEZpbHRlci5hY3RpdmVcIlxyXG4gICAgICAgICAgICAoZGF0ZUNoYW5nZSk9XCJjaGFuZ2VUZW1wb3JhbFByb3BlcnR5KGJlZ2luLnZhbHVlLCAxKVwiXHJcbiAgICAgICAgICAgIFttYXREYXRlcGlja2VyRmlsdGVyXT1cImZpbHRlckJlZ2luRnVuY3Rpb25cIlxyXG4gICAgICAgICAgICBbdmFsdWVdPVwiXHJcbiAgICAgICAgICAgICAgYmVnaW5WYWx1ZSA/IGJlZ2luVmFsdWUgOiBoYW5kbGVEYXRlKGRhdGFzb3VyY2Uub3B0aW9ucy5taW5EYXRlKVxyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICBbbWluXT1cImhhbmRsZURhdGUoZGF0YXNvdXJjZS5vcHRpb25zLm1pbkRhdGUpXCJcclxuICAgICAgICAgICAgW21heF09XCJcclxuICAgICAgICAgICAgICBlbmRWYWx1ZSAmJiAhcmVzdHJpY3RlZFRvU3RlcCgpXHJcbiAgICAgICAgICAgICAgICA/IGVuZFZhbHVlXHJcbiAgICAgICAgICAgICAgICA6IGhhbmRsZURhdGUoZGF0YXNvdXJjZS5vcHRpb25zLm1heERhdGUpXHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWx0ZXJTdGF0ZURpc2FibGVcIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmlsbGVyXCI+PC9zcGFuPlxyXG4gICAgICAgICAgPG1hdC1kYXRlcGlja2VyXHJcbiAgICAgICAgICAgICNiZWdpbkRhdGVwaWNrZXJcclxuICAgICAgICAgICAgW3N0YXJ0Vmlld109XCJjYWxlbmRhclZpZXcoKVwiXHJcbiAgICAgICAgICAgIFtzdGFydEF0XT1cImJlZ2luVmFsdWVcIlxyXG4gICAgICAgICAgICAoeWVhclNlbGVjdGVkKT1cInllYXJTZWxlY3RlZCgkZXZlbnQsIGJlZ2luRGF0ZXBpY2tlciwgJ2JlZ2luJylcIlxyXG4gICAgICAgICAgICAobW9udGhTZWxlY3RlZCk9XCJtb250aFNlbGVjdGVkKCRldmVudCwgYmVnaW5EYXRlcGlja2VyLCAnYmVnaW4nKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICA8L21hdC1kYXRlcGlja2VyPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJjYWxlbmRhclR5cGUoKSA9PT0gJ2RhdGV0aW1lJ1wiIGNsYXNzPVwidGltZS1pbnB1dFwiPlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiaG91ci1pbnB1dFwiIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIj5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyAnaWdvLmdlby50aW1lRmlsdGVyLmhvdXInIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxtYXQtc2VsZWN0XHJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImJlZ2luSG91ckZvcm1Db250cm9sXCJcclxuICAgICAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCIhY3VycmVudEZpbHRlci5hY3RpdmVcIlxyXG4gICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwiY2hhbmdlVGVtcG9yYWxQcm9wZXJ0eShiZWdpbi52YWx1ZSwgMSlcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGhvdXIgb2YgYmVnaW5Ib3Vyc1wiIFt2YWx1ZV09XCJob3VyXCI+e3tcclxuICAgICAgICAgICAgICAgIGhvdXJcclxuICAgICAgICAgICAgICB9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm1pbnV0ZS1pbnB1dFwiIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIj5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyAnaWdvLmdlby50aW1lRmlsdGVyLm1pbnV0ZScgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPG1hdC1zZWxlY3RcclxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiYmVnaW5NaW51dGVGb3JtQ29udHJvbFwiXHJcbiAgICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiIWN1cnJlbnRGaWx0ZXIuYWN0aXZlXCJcclxuICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cImNoYW5nZVRlbXBvcmFsUHJvcGVydHkoYmVnaW4udmFsdWUsIDEpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uXHJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgbWludXRlIG9mIGJlZ2luTWludXRlc1wiXHJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwibWludXRlXCJcclxuICAgICAgICAgICAgICAgID57eyBtaW51dGUgfX08L21hdC1vcHRpb25cclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiAqbmdJZj1cIiFyZXN0cmljdGVkVG9TdGVwKClcIiBjbGFzcz1cImRhdGV0aW1lLWlucHV0XCI+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZGF0ZS1pbnB1dFwiIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIj5cclxuICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGVcclxuICAgICAgICAgICAgbWF0U3VmZml4XHJcbiAgICAgICAgICAgIFtmb3JdPVwiZW5kRGF0ZXBpY2tlclwiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWx0ZXJTdGF0ZURpc2FibGVcIlxyXG4gICAgICAgICAgPjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxyXG4gICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICNlbmRcclxuICAgICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgICAgW21hdERhdGVwaWNrZXJdPVwiZW5kRGF0ZXBpY2tlclwiXHJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInaWdvLmdlby50aW1lRmlsdGVyLmVuZERhdGUnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiIWN1cnJlbnRGaWx0ZXIuYWN0aXZlXCJcclxuICAgICAgICAgICAgKGRhdGVDaGFuZ2UpPVwiY2hhbmdlVGVtcG9yYWxQcm9wZXJ0eShlbmQudmFsdWUsIDIpXCJcclxuICAgICAgICAgICAgW21hdERhdGVwaWNrZXJGaWx0ZXJdPVwiZmlsdGVyRW5kRnVuY3Rpb25cIlxyXG4gICAgICAgICAgICBbdmFsdWVdPVwiXHJcbiAgICAgICAgICAgICAgZW5kVmFsdWUgPyBlbmRWYWx1ZSA6IGhhbmRsZURhdGUoZGF0YXNvdXJjZS5vcHRpb25zLm1heERhdGUpXHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgIFttaW5dPVwiXHJcbiAgICAgICAgICAgICAgYmVnaW5WYWx1ZSA/IGJlZ2luVmFsdWUgOiBoYW5kbGVEYXRlKGRhdGFzb3VyY2Uub3B0aW9ucy5taW5EYXRlKVxyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICBbbWF4XT1cImhhbmRsZURhdGUoZGF0YXNvdXJjZS5vcHRpb25zLm1heERhdGUpXCJcclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpbHRlclN0YXRlRGlzYWJsZVwiXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWxsZXJcIj48L3NwYW4+XHJcbiAgICAgICAgICA8bWF0LWRhdGVwaWNrZXJcclxuICAgICAgICAgICAgI2VuZERhdGVwaWNrZXJcclxuICAgICAgICAgICAgW3N0YXJ0Vmlld109XCJjYWxlbmRhclZpZXcoKVwiXHJcbiAgICAgICAgICAgIFtzdGFydEF0XT1cImVuZFZhbHVlXCJcclxuICAgICAgICAgICAgKHllYXJTZWxlY3RlZCk9XCJ5ZWFyU2VsZWN0ZWQoJGV2ZW50LCBlbmREYXRlcGlja2VyLCAnZW5kJylcIlxyXG4gICAgICAgICAgICAobW9udGhTZWxlY3RlZCk9XCJtb250aFNlbGVjdGVkKCRldmVudCwgZW5kRGF0ZXBpY2tlciwgJ2VuZCcpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgIDwvbWF0LWRhdGVwaWNrZXI+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgICAgICAgPGRpdiAqbmdJZj1cImNhbGVuZGFyVHlwZSgpID09PSAnZGF0ZXRpbWUnXCIgY2xhc3M9XCJ0aW1lLWlucHV0XCI+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJob3VyLWlucHV0XCIgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7ICdpZ28uZ2VvLnRpbWVGaWx0ZXIuaG91cicgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPG1hdC1zZWxlY3RcclxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZW5kSG91ckZvcm1Db250cm9sXCJcclxuICAgICAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCIhY3VycmVudEZpbHRlci5hY3RpdmVcIlxyXG4gICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwiY2hhbmdlVGVtcG9yYWxQcm9wZXJ0eShlbmQudmFsdWUsIDIpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBob3VyIG9mIGVuZEhvdXJzXCIgW3ZhbHVlXT1cImhvdXJcIj57e1xyXG4gICAgICAgICAgICAgICAgaG91clxyXG4gICAgICAgICAgICAgIH19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibWludXRlLWlucHV0XCIgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7ICdpZ28uZ2VvLnRpbWVGaWx0ZXIubWludXRlJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8bWF0LXNlbGVjdFxyXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJlbmRNaW51dGVGb3JtQ29udHJvbFwiXHJcbiAgICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiIWN1cnJlbnRGaWx0ZXIuYWN0aXZlXCJcclxuICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cImNoYW5nZVRlbXBvcmFsUHJvcGVydHkoZW5kLnZhbHVlLCAyKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgbWludXRlIG9mIGVuZE1pbnV0ZXNcIiBbdmFsdWVdPVwibWludXRlXCI+e3tcclxuICAgICAgICAgICAgICAgIG1pbnV0ZVxyXG4gICAgICAgICAgICAgIH19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25zLWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIGNsYXNzPVwicmVzZXQtYnV0dG9uXCJcclxuICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgIChjbGljayk9XCJyZXNldEZpbHRlcigpXCJcclxuICAgICAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmZpbHRlci5yZXNldEZpbHRlcnMnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWx0ZXJTdGF0ZURpc2FibGVcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwie3sgcmVzZXRJY29uIH19XCI+PC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZVxyXG4gICAgICAgICAgY2xhc3M9XCJ0b2dnbGUtZmlsdGVyLXN0YXRlXCJcclxuICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlRmlsdGVyU3RhdGUoKVwiXHJcbiAgICAgICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxyXG4gICAgICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXHJcbiAgICAgICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5maWx0ZXIudG9nZ2xlRmlsdGVyU3RhdGUnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgIFtjaGVja2VkXT1cIiFmaWx0ZXJTdGF0ZURpc2FibGVcIlxyXG4gICAgICAgID5cclxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
936
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2djLWZpbHRlci10aW1lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ZpbHRlci9vZ2MtZmlsdGVyLXRpbWUvb2djLWZpbHRlci10aW1lLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ZpbHRlci9vZ2MtZmlsdGVyLXRpbWUvb2djLWZpbHRlci10aW1lLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwRCxPQUFPLEVBQUUsT0FBTyxJQUFJLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUUzQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7Ozs7Ozs7O0lDYnZFLDJDQUlDO0lBRkMsOFBBQXdCLHFMQUNkLGVBQUEseUJBQWtCLENBQUEsSUFESjtJQUd4QixZQUNGOztJQUFBLGlCQUFtQjs7O0lBSmpCLDJDQUF3QjtJQUd4QixlQUNGO0lBREUsdUZBQ0Y7Ozs7SUFFQSw4QkFBaUQsb0NBQUE7SUFNN0MsK01BQWtCLGVBQUEsbUNBQTRCLENBQUEsSUFBQztJQUVqRCxpQkFBNkIsRUFBQTs7O0lBTjNCLGVBQW9CO0lBQXBCLHlDQUFvQixxRUFBQSx1Q0FBQSxpQ0FBQTs7OztJQVV0Qiw4QkFBMkQseUJBQUEsZ0JBQUE7SUFJNUMsWUFBZ0Q7O0lBQUEsaUJBQVk7SUFDdkUsaUNBTUU7SUFGQSxtTkFBVSxlQUFBLDBDQUE2QyxPQUFPLENB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QU07WUFDTCxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7U0FDbEM7UUFDRCxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztnRkE5c0JVLHNCQUFzQjs2REFBdEIsc0JBQXNCOzs7Ozs7Ozs7Ozs7WUMxQm5DLDhCQUFnQztZQUM5QixpR0FNbUI7WUFFbkIsdUVBU007WUFFTix1RUFvUU07WUFDUixpQkFBTTs7WUF2UkQsZUFBK0M7WUFBL0MsK0dBQStDO1lBT25CLGVBQWdCO1lBQWhCLHFDQUFnQjtZQVd6QyxlQUFpQjtZQUFqQixzQ0FBaUI7Ozt1RkRNWixzQkFBc0I7Y0FMbEMsU0FBUzsyQkFDRSxxQkFBcUI7dUVBS3RCLFVBQVU7a0JBQWxCLEtBQUs7WUFDRyxhQUFhO2tCQUFyQixLQUFLO1lBQ0ksY0FBYztrQkFBdkIsTUFBTTtZQWdDeUIsaUJBQWlCO2tCQUFoRCxTQUFTO21CQUFDLG1CQUFtQjtZQUNJLG1CQUFtQjtrQkFBcEQsU0FBUzttQkFBQyxxQkFBcUI7WUFDUixTQUFTO2tCQUFoQyxTQUFTO21CQUFDLFdBQVc7WUFDQSxPQUFPO2tCQUE1QixTQUFTO21CQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFZpZXdDaGlsZFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBVbnR5cGVkRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5pbXBvcnQgeyBkZWZhdWx0IGFzIG1vbWVudCB9IGZyb20gJ21vbWVudCc7XHJcblxyXG5pbXBvcnQgeyBPZ2NGaWx0ZXJPcGVyYXRvciB9IGZyb20gJy4uLy4uL2ZpbHRlci9zaGFyZWQvb2djLWZpbHRlci5lbnVtJztcclxuaW1wb3J0IHsgT0dDRmlsdGVyVGltZVNlcnZpY2UgfSBmcm9tICcuLi9zaGFyZWQvb2djLWZpbHRlci10aW1lLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIE9nY0ZpbHRlckR1cmluZ09wdGlvbnMsXHJcbiAgT2djRmlsdGVyYWJsZURhdGFTb3VyY2UsXHJcbiAgT2djRmlsdGVyYWJsZURhdGFTb3VyY2VPcHRpb25zXHJcbn0gZnJvbSAnLi4vc2hhcmVkL29nYy1maWx0ZXIuaW50ZXJmYWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaWdvLW9nYy1maWx0ZXItdGltZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL29nYy1maWx0ZXItdGltZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vb2djLWZpbHRlci10aW1lLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIE9nY0ZpbHRlclRpbWVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpIGRhdGFzb3VyY2U6IE9nY0ZpbHRlcmFibGVEYXRhU291cmNlO1xyXG4gIEBJbnB1dCgpIGN1cnJlbnRGaWx0ZXI6IGFueTtcclxuICBAT3V0cHV0KCkgY2hhbmdlUHJvcGVydHk6IEV2ZW50RW1pdHRlcjx7XHJcbiAgICB2YWx1ZTogc3RyaW5nO1xyXG4gICAgcG9zOiBudW1iZXI7XHJcbiAgICByZWZyZXNoRmlsdGVyOiBib29sZWFuO1xyXG4gIH0+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIGJlZ2luSG91cnM6IG51bWJlcltdO1xyXG4gIGVuZEhvdXJzOiBudW1iZXJbXTtcclxuICBiZWdpbk1pbnV0ZXM6IG51bWJlcltdO1xyXG4gIGVuZE1pbnV0ZXM6IG51bWJlcltdO1xyXG4gIGJlZ2luSG91ckZvcm1Db250cm9sID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgpO1xyXG4gIGJlZ2luTWludXRlRm9ybUNvbnRyb2wgPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKCk7XHJcbiAgZW5kSG91ckZvcm1Db250cm9sID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgpO1xyXG4gIGVuZE1pbnV0ZUZvcm1Db250cm9sID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgpO1xyXG4gIF9iZWdpblZhbHVlOiBEYXRlO1xyXG4gIF9lbmRWYWx1ZTogRGF0ZTtcclxuICByZWFkb25seSBfZGVmYXVsdE1pbjogc3RyaW5nID0gJzE5MDAtMDEtMDEnO1xyXG4gIHJlYWRvbmx5IF9kZWZhdWx0TWF4OiBzdHJpbmcgPSAnMjA1Mi0wMS0wNic7XHJcbiAgcmVhZG9ubHkgX2RlZmF1bHREaXNwbGF5Rm9ybWF0OiBzdHJpbmcgPSAnREQvTU0vWVlZWSBISDptbSBBJztcclxuICByZWFkb25seSBfZGVmYXVsdFNsaWRlck1vZGVFbmFibGVkOiBib29sZWFuID0gdHJ1ZTtcclxuICBvZ2NGaWx0ZXJPcGVyYXRvciA9IE9nY0ZpbHRlck9wZXJhdG9yO1xyXG4gIHB1YmxpYyBzbGlkZXJNb2RlID0gZmFsc2U7XHJcblxyXG4gIHJlYWRvbmx5IGRlZmF1bHRTdGVwTWlsbGlzZWNvbmQgPSA2MDAwMDtcclxuICBwdWJsaWMgb3B0aW9uczogT2djRmlsdGVyYWJsZURhdGFTb3VyY2VPcHRpb25zO1xyXG5cclxuICBwdWJsaWMgb25seVllYXJCZWdpbjogbnVtYmVyO1xyXG4gIHB1YmxpYyBvbmx5WWVhckVuZDogbnVtYmVyO1xyXG4gIHB1YmxpYyBjYWxlbmRhclR5cGVZZWFyID0gZmFsc2U7XHJcbiAgcHVibGljIHJlc2V0SWNvbiA9ICdyZXBsYXknO1xyXG4gIHB1YmxpYyBmaWx0ZXJTdGF0ZURpc2FibGU6IGJvb2xlYW47XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2VuZERhdGVwaWNrZXJUaW1lJykgZW5kRGF0ZXBpY2tlclRpbWU6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnYmVnaW5EYXRlcGlja2VyVGltZScpIGJlZ2luRGF0ZXBpY2tlclRpbWU6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnYmVnaW5UaW1lJykgYmVnaW5UaW1lOiBIVE1MSW5wdXRFbGVtZW50O1xyXG4gIEBWaWV3Q2hpbGQoJ2VuZFRpbWUnKSBlbmRUaW1lOiBIVE1MSW5wdXRFbGVtZW50O1xyXG5cclxuICBnZXQgc3RlcCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLnN0ZXBEYXRlXHJcbiAgICAgID8gdGhpcy5kYXRhc291cmNlLm9wdGlvbnMuc3RlcERhdGVcclxuICAgICAgOiB0aGlzLmN1cnJlbnRGaWx0ZXIuc3RlcDtcclxuICB9XHJcblxyXG4gIGdldCBzdGVwTWlsbGlzZWNvbmRzKCk6IG51bWJlciB7XHJcbiAgICBjb25zdCBzdGVwID0gbW9tZW50LmR1cmF0aW9uKHRoaXMuc3RlcCkuYXNNaWxsaXNlY29uZHMoKTtcclxuICAgIHJldHVybiBzdGVwID09PSAwID8gdGhpcy5kZWZhdWx0U3RlcE1pbGxpc2Vjb25kIDogc3RlcDtcclxuICB9XHJcblxyXG4gIHNldCBiZWdpblZhbHVlKGJlZ2luOiBEYXRlKSB7XHJcbiAgICB0aGlzLl9iZWdpblZhbHVlID0gYmVnaW47XHJcbiAgfVxyXG5cclxuICBnZXQgYmVnaW5WYWx1ZSgpOiBEYXRlIHtcclxuICAgIHJldHVybiB0aGlzLl9iZWdpblZhbHVlO1xyXG4gIH1cclxuXHJcbiAgc2V0IGVuZFZhbHVlKGVuZDogRGF0ZSkge1xyXG4gICAgdGhpcy5fZW5kVmFsdWUgPSBlbmQ7XHJcbiAgfVxyXG5cclxuICBnZXQgZW5kVmFsdWUoKTogRGF0ZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZW5kVmFsdWU7XHJcbiAgfVxyXG5cclxuICBnZXQgc2xpZGVySW50ZXJ2YWwoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLmN1cnJlbnRGaWx0ZXIuc2xpZGVySW50ZXJ2YWwgPT09IHVuZGVmaW5lZFxyXG4gICAgICA/IDIwMDBcclxuICAgICAgOiB0aGlzLmN1cnJlbnRGaWx0ZXIuc2xpZGVySW50ZXJ2YWw7XHJcbiAgfVxyXG5cclxuICBnZXQgbWF4RGF0ZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm1heERhdGVcclxuICAgICAgPyB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5tYXhEYXRlXHJcbiAgICAgIDogdGhpcy5fZGVmYXVsdE1heDtcclxuICB9XHJcblxyXG4gIGdldCBkaXNwbGF5Rm9ybWF0KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50RmlsdGVyLmRpc3BsYXlGb3JtYXRcclxuICAgICAgPyB0aGlzLmN1cnJlbnRGaWx0ZXIuZGlzcGxheUZvcm1hdFxyXG4gICAgICA6IHRoaXMuX2RlZmF1bHREaXNwbGF5Rm9ybWF0O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGZpbHRlckJlZ2luRnVuY3Rpb247XHJcbiAgcHVibGljIGZpbHRlckVuZEZ1bmN0aW9uO1xyXG5cclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgb2djRmlsdGVyVGltZVNlcnZpY2U6IE9HQ0ZpbHRlclRpbWVTZXJ2aWNlKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnRGaWx0ZXIuc2xpZGVyT3B0aW9ucykge1xyXG4gICAgICB0aGlzLmN1cnJlbnRGaWx0ZXIuc2xpZGVyT3B0aW9ucy5lbmFibGVkID1cclxuICAgICAgICB0aGlzLmN1cnJlbnRGaWx0ZXIuc2xpZGVyT3B0aW9ucy5lbmFibGVkICE9PSB1bmRlZmluZWRcclxuICAgICAgICAgID8gdGhpcy5jdXJyZW50RmlsdGVyLnNsaWRlck9wdGlvbnMuZW5hYmxlZFxyXG4gICAgICAgICAgOiB0aGlzLl9kZWZhdWx0U2xpZGVyTW9kZUVuYWJsZWQ7XHJcbiAgICB9XHJcbiAgICB0aGlzLmJlZ2luVmFsdWUgPSB0aGlzLnBhcnNlRmlsdGVyKHRoaXMuaGFuZGxlTWluKCkpO1xyXG4gICAgdGhpcy5lbmRWYWx1ZSA9IHRoaXMucGFyc2VGaWx0ZXIodGhpcy5oYW5kbGVNYXgoKSk7XHJcblxyXG4gICAgdGhpcy5vbmx5WWVhckJlZ2luID0gdGhpcy5iZWdpblZhbHVlLmdldFVUQ0Z1bGxZZWFyKCk7XHJcbiAgICB0aGlzLm9ubHlZZWFyRW5kID0gdGhpcy5lbmRWYWx1ZS5nZXRVVENGdWxsWWVhcigpO1xyXG4gICAgdGhpcy5jYWxlbmRhclR5cGVZZWFyID0gdGhpcy5pc0NhbGVuZGFyWWVhck1vZGUoKTtcclxuICAgIHRoaXMuc2V0RmlsdGVyU3RhdGVEaXNhYmxlKCk7XHJcbiAgICB0aGlzLnVwZGF0ZUhvdXJzTWludXRlc0FycmF5KCk7XHJcbiAgICAvLyB1cGRhdGUgdmFsdWUgZm9yIG5vdyB2YWx1ZVxyXG4gICAgdGhpcy51cGRhdGVWYWx1ZXMoKTtcclxuICAgIHRoaXMuZGF0ZUZpbHRlcih0aGlzLmZpbHRlckJlZ2luRnVuY3Rpb24sICdiZWdpbicpO1xyXG4gICAgdGhpcy5kYXRlRmlsdGVyKHRoaXMuZmlsdGVyRW5kRnVuY3Rpb24sICdlbmQnKTtcclxuICB9XHJcblxyXG4gIHBhcnNlRmlsdGVyKGZpbHRlcik6IERhdGUge1xyXG4gICAgaWYgKCFmaWx0ZXIpIHtcclxuICAgICAgcmV0dXJuIG5ldyBEYXRlKCk7XHJcbiAgICB9IGVsc2UgaWYgKGlzTmFOKG5ldyBEYXRlKGZpbHRlcikuZ2V0VGltZSgpKSkge1xyXG4gICAgICBpZiAoZmlsdGVyLnNlYXJjaCgnbm93JykgPj0gMCkge1xyXG4gICAgICAgIGNvbnN0IGludGVydmFsID0gZmlsdGVyLm1hdGNoKC95ZWFyc3xtb250aHN8d2Vla3N8ZGF5c3xob3Vyc3xzZWNvbmRzLyk7XHJcbiAgICAgICAgaWYgKGZpbHRlci5tYXRjaCgvXFwrLykpIHtcclxuICAgICAgICAgIGNvbnN0IGludGVydmFsSW50ID0gcGFyc2VJbnQoXHJcbiAgICAgICAgICAgIGZpbHRlci5zdWJzdHJpbmcoZmlsdGVyLnNlYXJjaCgnKycpICsgMSwgaW50ZXJ2YWwuaW5kZXgpLFxyXG4gICAgICAgICAgICAxMFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHJldHVybiBtb21lbnQoKS5hZGQoaW50ZXJ2YWxJbnQsIGludGVydmFsWzBdKS50b0RhdGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZpbHRlci5tYXRjaCgvXFwtLykpIHtcclxuICAgICAgICAgIGNvbnN0IGludGVydmFsSW50ID0gcGFyc2VJbnQoXHJcbiAgICAgICAgICAgIGZpbHRlci5zdWJzdHJpbmcoZmlsdGVyLnNlYXJjaCgnLScpICsgMSwgaW50ZXJ2YWwuaW5kZXgpLFxyXG4gICAgICAgICAgICAxMFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHJldHVybiBtb21lbnQoKS5zdWJ0cmFjdChpbnRlcnZhbEludCwgaW50ZXJ2YWxbMF0pLnRvRGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3IERhdGUoKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZmlsdGVyLnNlYXJjaCgndG9kYXknKSA+PSAwKSB7XHJcbiAgICAgICAgY29uc3QgX25vdyA9IG1vbWVudCgpLmVuZE9mKCdkYXknKS50b0RhdGUoKTtcclxuICAgICAgICBjb25zdCBpbnRlcnZhbCA9IGZpbHRlci5tYXRjaCgveWVhcnN8bW9udGhzfHdlZWtzfGRheXN8aG91cnN8c2Vjb25kcy8pO1xyXG4gICAgICAgIGlmIChmaWx0ZXIubWF0Y2goL1xcKy8pKSB7XHJcbiAgICAgICAgICBjb25zdCBpbnRlcnZhbEludCA9IHBhcnNlSW50KFxyXG4gICAgICAgICAgICBmaWx0ZXIuc3Vic3RyaW5nKGZpbHRlci5zZWFyY2goJysnKSArIDEsIGludGVydmFsLmluZGV4KSxcclxuICAgICAgICAgICAgMTBcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICByZXR1cm4gbW9tZW50KF9ub3cpLmFkZChpbnRlcnZhbEludCwgaW50ZXJ2YWxbMF0pLnRvRGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZmlsdGVyLm1hdGNoKC9cXC0vKSkge1xyXG4gICAgICAgICAgY29uc3QgaW50ZXJ2YWxJbnQgPSBwYXJzZUludChcclxuICAgICAgICAgICAgZmlsdGVyLnN1YnN0cmluZyhmaWx0ZXIuc2VhcmNoKCctJykgKyAxLCBpbnRlcnZhbC5pbmRleCksXHJcbiAgICAgICAgICAgIDEwXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcmV0dXJuIG1vbWVudChfbm93KS5zdWJ0cmFjdChpbnRlcnZhbEludCwgaW50ZXJ2YWxbMF0pLnRvRGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gX25vdztcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbmV3IERhdGUoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmN1cnJlbnRGaWx0ZXIuY2FsZW5kYXJNb2RlWWVhcikge1xyXG4gICAgICBjb25zdCBkYXRlID0gdGhpcy5nZXREYXRlRnJvbVN0cmluZ1dpdGhvdXRUaW1lKGZpbHRlcik7XHJcbiAgICAgIHJldHVybiBkYXRlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZpbHRlciA/IG5ldyBEYXRlKGZpbHRlcikgOiBuZXcgRGF0ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2hhbmdlVGVtcG9yYWxQcm9wZXJ0eSh2YWx1ZSwgcG9zaXRpb24/LCByZWZyZXNoRmlsdGVyID0gdHJ1ZSkge1xyXG4gICAgbGV0IHZhbHVlVG1wID0gdGhpcy5nZXREYXRlVGltZSh2YWx1ZSwgcG9zaXRpb24pO1xyXG4gICAgaWYgKHRoaXMuaXNDYWxlbmRhclllYXJNb2RlKCkpIHtcclxuICAgICAgbGV0IGRhdGVTdHJpbmdGcm9tWWVhck5vdGltZTtcclxuICAgICAgaWYgKHBvc2l0aW9uID09PSAxKSB7XHJcbiAgICAgICAgdGhpcy5iZWdpblZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5vbmx5WWVhckJlZ2luID0gdGhpcy5iZWdpblZhbHVlLmdldEZ1bGxZZWFyKCk7XHJcbiAgICAgICAgZGF0ZVN0cmluZ0Zyb21ZZWFyTm90aW1lID0gYCR7dGhpcy5vbmx5WWVhckJlZ2lufS0wMS0wMWA7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5lbmRWYWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMub25seVllYXJFbmQgPSB0aGlzLmVuZFZhbHVlLmdldEZ1bGxZZWFyKCk7XHJcbiAgICAgICAgZGF0ZVN0cmluZ0Zyb21ZZWFyTm90aW1lID0gYCR7dGhpcy5vbmx5WWVhckVuZH0tMDEtMDFgO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIGNhbGwgc2VydmljZSB3aXRoIHN0cmluZyBkYXRlIHdpdGhvdXQgdGltZVxyXG4gICAgICB0aGlzLmNoYW5nZVByb3BlcnR5Lm5leHQoe1xyXG4gICAgICAgIHZhbHVlOiBkYXRlU3RyaW5nRnJvbVllYXJOb3RpbWUsXHJcbiAgICAgICAgcG9zOiBwb3NpdGlvbixcclxuICAgICAgICByZWZyZXNoRmlsdGVyXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAocG9zaXRpb24gPT09IDIgJiYgdGhpcy5jYWxlbmRhclR5cGUoKSA9PT0gJ2RhdGUnICYmICF0aGlzLnNsaWRlck1vZGUpIHtcclxuICAgICAgLyogQWJvdmUgbW9udGg6IHNlZSB5ZWFyU2VsZWN0ZWQgb3IgbW9udGhTZWxlY3RlZCAqL1xyXG4gICAgICB2YWx1ZVRtcCA9IG1vbWVudCh2YWx1ZVRtcCkuZW5kT2YoJ2RheScpLnRvRGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChwb3NpdGlvbiA9PT0gMSkge1xyXG4gICAgICB0aGlzLmJlZ2luVmFsdWUgPSB2YWx1ZVRtcDtcclxuICAgICAgaWYgKHRoaXMucmVzdHJpY3RlZFRvU3RlcCgpKSB7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VUZW1wb3JhbFByb3BlcnR5KFxyXG4gICAgICAgICAgdGhpcy5vZ2NGaWx0ZXJUaW1lU2VydmljZS5hZGRTdGVwKHZhbHVlVG1wLCB0aGlzLnN0ZXBNaWxsaXNlY29uZHMpLFxyXG4gICAgICAgICAgMixcclxuICAgICAgICAgIHJlZnJlc2hGaWx0ZXJcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmVuZFZhbHVlID0gdmFsdWVUbXA7XHJcbiAgICB9XHJcbiAgICB0aGlzLnVwZGF0ZUhvdXJzTWludXRlc0FycmF5KCk7XHJcbiAgICB0aGlzLmNoYW5nZVByb3BlcnR5Lm5leHQoe1xyXG4gICAgICB2YWx1ZTogdmFsdWVUbXAudG9JU09TdHJpbmcoKSxcclxuICAgICAgcG9zOiBwb3NpdGlvbixcclxuICAgICAgcmVmcmVzaEZpbHRlclxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVEYXRlKHZhbHVlKTogRGF0ZSB7XHJcbiAgICBpZiAoIXZhbHVlIHx8IHZhbHVlID09PSAnJykge1xyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdGhpcy5jdXJyZW50RmlsdGVyLmNhbGVuZGFyTW9kZVllYXIpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0RGF0ZUZyb21TdHJpbmdXaXRob3V0VGltZSh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3IERhdGUodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgY2FsZW5kYXJUeXBlKCkge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudEZpbHRlci5jYWxlbmRhck1vZGVZZWFyKSB7XHJcbiAgICAgIHJldHVybiAneWVhcic7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zdGVwTWlsbGlzZWNvbmRzIDwgODY0MDAwMDApIHtcclxuICAgICAgcmV0dXJuICdkYXRldGltZSc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJ2RhdGUnO1xyXG4gIH1cclxuXHJcbiAgaXNDYWxlbmRhclllYXJNb2RlKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuY2FsZW5kYXJUeXBlKCkgPT09ICd5ZWFyJykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHllYXJPbmx5SW5wdXRDaGFuZ2UoY2hhbmdlRXZlbnQsIGRhdGVQaWNrZXI/OiBhbnksIHByb3BlcnR5Pzogc3RyaW5nKSB7XHJcbiAgICBjb25zdCB5ZWFyID0gY2hhbmdlRXZlbnQudGFyZ2V0LnZhbHVlO1xyXG4gICAgY29uc3QgZGF0ZSA9IHRoaXMuZ2V0RGF0ZUZyb21TdHJpbmdXaXRob3V0VGltZSh5ZWFyKTtcclxuICAgIHRoaXMueWVhclNlbGVjdGVkKGRhdGUsIGRhdGVQaWNrZXIsIHByb3BlcnR5KTtcclxuICB9XHJcblxyXG4gIHllYXJTZWxlY3RlZChcclxuICAgIHllYXIsXHJcbiAgICBkYXRlUGlja2VyPzogYW55LFxyXG4gICAgcHJvcGVydHk/OiBzdHJpbmcsXHJcbiAgICByZWZyZXNoRmlsdGVyID0gdHJ1ZVxyXG4gICkge1xyXG4gICAgaWYgKHRoaXMub2djRmlsdGVyVGltZVNlcnZpY2Uuc3RlcElzWWVhckR1cmF0aW9uKHRoaXMuc3RlcCkpIHtcclxuICAgICAgaWYgKGRhdGVQaWNrZXIpIHtcclxuICAgICAgICBkYXRlUGlja2VyLmNsb3NlKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHByb3BlcnR5ID09PSAnZW5kJykge1xyXG4gICAgICAgIC8vIGNoYW5nZSB2YWx1ZSAwMSBqYW4gdG8gMzEgZGVjIHNhbWUgeWVhclxyXG4gICAgICAgIHllYXIgPSBtb21lbnQoeWVhcikuZW5kT2YoJ3llYXInKS50b0RhdGUoKTtcclxuICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICBwcm9wZXJ0eSA9PT0gJ2JlZ2luJyAmJlxyXG4gICAgICAgIHRoaXMucmVzdHJpY3RlZFRvU3RlcCgpICYmXHJcbiAgICAgICAgIXRoaXMuY2FsZW5kYXJUeXBlWWVhclxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnllYXJTZWxlY3RlZCh5ZWFyLCB1bmRlZmluZWQsICdlbmQnKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNoYW5nZVRlbXBvcmFsUHJvcGVydHkoXHJcbiAgICAgICAgeWVhcixcclxuICAgICAgICBwcm9wZXJ0eSA9PT0gJ2JlZ2luJyA/IDEgOiAyLFxyXG4gICAgICAgIHJlZnJlc2hGaWx0ZXJcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1vbnRoU2VsZWN0ZWQoXHJcbiAgICBtb250aCxcclxuICAgIGRhdGVQaWNrZXI/OiBhbnksXHJcbiAgICBwcm9wZXJ0eT86IHN0cmluZyxcclxuICAgIHJlZnJlc2hGaWx0ZXIgPSB0cnVlXHJcbiAgKSB7XHJcbiAgICBpZiAodGhpcy5vZ2NGaWx0ZXJUaW1lU2VydmljZS5zdGVwSXNNb250aER1cmF0aW9uKHRoaXMuc3RlcCkpIHtcclxuICAgICAgaWYgKGRhdGVQaWNrZXIpIHtcclxuICAgICAgICBkYXRlUGlja2VyLmNsb3NlKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHByb3BlcnR5ID09PSAnZW5kJykge1xyXG4gICAgICAgIG1vbnRoID0gbW9tZW50KG1vbnRoKS5lbmRPZignbW9udGgnKS50b0RhdGUoKTtcclxuICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eSA9PT0gJ2JlZ2luJyAmJiB0aGlzLnJlc3RyaWN0ZWRUb1N0ZXAoKSkge1xyXG4gICAgICAgIHRoaXMubW9udGhTZWxlY3RlZChtb250aCwgdW5kZWZpbmVkLCAnZW5kJyk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jaGFuZ2VUZW1wb3JhbFByb3BlcnR5KFxyXG4gICAgICAgIG1vbnRoLFxyXG4gICAgICAgIHByb3BlcnR5ID09PSAnYmVnaW4nID8gMSA6IDIsXHJcbiAgICAgICAgcmVmcmVzaEZpbHRlclxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2FsZW5kYXJWaWV3KCkge1xyXG4gICAgY29uc3QgdGVzdCA9IHRoaXMuc3RlcE1pbGxpc2Vjb25kcztcclxuICAgIGNvbnN0IGRpZmYgPSBNYXRoLmFicyhcclxuICAgICAgdGhpcy5wYXJzZUZpbHRlcih0aGlzLmN1cnJlbnRGaWx0ZXIuZW5kKS5nZXRUaW1lKCkgLVxyXG4gICAgICAgIHRoaXMucGFyc2VGaWx0ZXIodGhpcy5jdXJyZW50RmlsdGVyLmJlZ2luKS5nZXRUaW1lKClcclxuICAgICk7XHJcbiAgICBpZiAodGhpcy5vZ2NGaWx0ZXJUaW1lU2VydmljZS5zdGVwSXNZZWFyRHVyYXRpb24odGhpcy5zdGVwKSkge1xyXG4gICAgICByZXR1cm4gJ211bHRpLXllYXInO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLm9nY0ZpbHRlclRpbWVTZXJ2aWNlLnN0ZXBJc01vbnRoRHVyYXRpb24odGhpcy5zdGVwKSkge1xyXG4gICAgICByZXR1cm4gJ3llYXInO1xyXG4gICAgfSBlbHNlIGlmICh0ZXN0IDwgODY0MDAwMDAgJiYgZGlmZiA8IDg2NDAwMDAwKSB7XHJcbiAgICAgIHJldHVybiAnY2xvY2snO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICdtb250aCc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkYXRlRmlsdGVyKHR5cGU6IHN0cmluZywgZGF0ZTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBkYXRlVmFsdWUgPSBuZXcgRGF0ZShkYXRlKTtcclxuICAgIGNvbnN0IGRpZmYgPSBkYXRlVmFsdWUuZ2V0VGltZSgpIC0gbmV3IERhdGUodGhpcy5oYW5kbGVNaW4oKSkuZ2V0VGltZSgpO1xyXG5cclxuICAgIGlmICh0aGlzLm9nY0ZpbHRlclRpbWVTZXJ2aWNlLnN0ZXBJc1llYXJEdXJhdGlvbih0aGlzLnN0ZXApKSB7XHJcbiAgICAgIGNvbnN0IG1vbnRoRGlmZiA9IG1vbWVudChkYXRlVmFsdWUpLmRpZmYoXHJcbiAgICAgICAgbW9tZW50KHRoaXMuaGFuZGxlTWluKCkpLFxyXG4gICAgICAgICd5ZWFycycsXHJcbiAgICAgICAgdHJ1ZVxyXG4gICAgICApO1xyXG4gICAgICBpZiAodHlwZSA9PT0gJ2VuZCcpIHtcclxuICAgICAgICBjb25zdCBkYXRlVmFsdWVQbHVzMSA9IG1vbWVudChkYXRlVmFsdWUpLmFkZCgxLCAnZCcpO1xyXG4gICAgICAgIGNvbnN0IG1vbnRoRGlmZlBsdXMxID0gbW9tZW50KGRhdGVWYWx1ZVBsdXMxKS5kaWZmKFxyXG4gICAgICAgICAgbW9tZW50KHRoaXMuaGFuZGxlTWluKCkpLFxyXG4gICAgICAgICAgJ3llYXJzJyxcclxuICAgICAgICAgIHRydWVcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyRW5kRnVuY3Rpb24gPVxyXG4gICAgICAgICAgbW9udGhEaWZmUGx1czEgJSBtb21lbnQuZHVyYXRpb24odGhpcy5zdGVwKS5hc1llYXJzKCkgPT09IDA7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdiZWdpbicpIHtcclxuICAgICAgICB0aGlzLmZpbHRlckJlZ2luRnVuY3Rpb24gPVxyXG4gICAgICAgICAgbW9udGhEaWZmICUgbW9tZW50LmR1cmF0aW9uKHRoaXMuc3RlcCkuYXNZZWFycygpID09PSAwO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLm9nY0ZpbHRlclRpbWVTZXJ2aWNlLnN0ZXBJc01vbnRoRHVyYXRpb24odGhpcy5zdGVwKSkge1xyXG4gICAgICBjb25zdCBtb250aERpZmYgPSBtb21lbnQoZGF0ZVZhbHVlKS5kaWZmKFxyXG4gICAgICAgIG1vbWVudCh0aGlzLmhhbmRsZU1pbigpKSxcclxuICAgICAgICAnbW9udGhzJyxcclxuICAgICAgICB0cnVlXHJcbiAgICAgICk7XHJcbiAgICAgIGlmICh0eXBlID09PSAnZW5kJykge1xyXG4gICAgICAgIGNvbnN0IGRhdGVWYWx1ZVBsdXMxID0gbW9tZW50KGRhdGVWYWx1ZSkuYWRkKDEsICdkJyk7XHJcbiAgICAgICAgY29uc3QgbW9udGhEaWZmUGx1czEgPSBtb21lbnQoZGF0ZVZhbHVlUGx1czEpLmRpZmYoXHJcbiAgICAgICAgICBtb21lbnQodGhpcy5oYW5kbGVNaW4oKSksXHJcbiAgICAgICAgICAnbW9udGhzJyxcclxuICAgICAgICAgIHRydWVcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyRW5kRnVuY3Rpb24gPVxyXG4gICAgICAgICAgbW9udGhEaWZmUGx1czEgJSBtb21lbnQuZHVyYXRpb24odGhpcy5zdGVwKS5hc01vbnRocygpID09PSAwO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnYmVnaW4nKSB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJCZWdpbkZ1bmN0aW9uID1cclxuICAgICAgICAgIG1vbnRoRGlmZiAlIG1vbWVudC5kdXJhdGlvbih0aGlzLnN0ZXApLmFzTW9udGhzKCkgPT09IDA7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMub2djRmlsdGVyVGltZVNlcnZpY2Uuc3RlcElzV2Vla0R1cmF0aW9uKHRoaXMuc3RlcCkpIHtcclxuICAgICAgY29uc3Qgd2Vla0RpZmYgPSBtb21lbnQoZGF0ZVZhbHVlKS5kaWZmKFxyXG4gICAgICAgIG1vbWVudCh0aGlzLmhhbmRsZU1pbigpKSxcclxuICAgICAgICAnd2Vla3MnLFxyXG4gICAgICAgIHRydWVcclxuICAgICAgKTtcclxuICAgICAgaWYgKHR5cGUgPT09ICdlbmQnKSB7XHJcbiAgICAgICAgY29uc3QgZGF0ZVZhbHVlUGx1czEgPSBtb21lbnQoZGF0ZVZhbHVlKS5hZGQoMSwgJ2QnKTtcclxuICAgICAgICBjb25zdCB3ZWVrRGlmZlBsdXMxID0gbW9tZW50KGRhdGVWYWx1ZVBsdXMxKS5kaWZmKFxyXG4gICAgICAgICAgbW9tZW50KHRoaXMuaGFuZGxlTWluKCkpLFxyXG4gICAgICAgICAgJ3dlZWtzJyxcclxuICAgICAgICAgIHRydWVcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyRW5kRnVuY3Rpb24gPVxyXG4gICAgICAgICAgd2Vla0RpZmZQbHVzMSAlIG1vbWVudC5kdXJhdGlvbih0aGlzLnN0ZXApLmFzV2Vla3MoKSA9PT0gMDtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2JlZ2luJykge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyQmVnaW5GdW5jdGlvbiA9XHJcbiAgICAgICAgICB3ZWVrRGlmZiAlIG1vbWVudC5kdXJhdGlvbih0aGlzLnN0ZXApLmFzV2Vla3MoKSA9PT0gMDtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodGhpcy5vZ2NGaWx0ZXJUaW1lU2VydmljZS5zdGVwSXNEYXlEdXJhdGlvbih0aGlzLnN0ZXApKSB7XHJcbiAgICAgIGNvbnN0IGRheURpZmYgPSBtb21lbnQoZGF0ZVZhbHVlKS5kaWZmKFxyXG4gICAgICAgIG1vbWVudCh0aGlzLmhhbmRsZU1pbigpKSxcclxuICAgICAgICAnZGF5cycsXHJcbiAgICAgICAgdHJ1ZVxyXG4gICAgICApO1xyXG4gICAgICBpZiAodHlwZSA9PT0gJ2VuZCcpIHtcclxuICAgICAgICBjb25zdCBkYXRlVmFsdWVQbHVzMSA9IG1vbWVudChkYXRlVmFsdWUpLmFkZCgxLCAnZCcpO1xyXG4gICAgICAgIGNvbnN0IGRheURpZmZQbHVzMSA9IG1vbWVudChkYXRlVmFsdWVQbHVzMSkuZGlmZihcclxuICAgICAgICAgIG1vbWVudCh0aGlzLmhhbmRsZU1pbigpKSxcclxuICAgICAgICAgICdkYXlzJyxcclxuICAgICAgICAgIHRydWVcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IF9tb2QgPSBkYXlEaWZmUGx1czEgJSBtb21lbnQuZHVyYXRpb24odGhpcy5zdGVwKS5hc0RheXMoKTtcclxuICAgICAgICB0aGlzLmZpbHRlckVuZEZ1bmN0aW9uID1cclxuICAgICAgICAgIChfbW9kIDwgMC4wMDAwMDAxICYmIF9tb2QgPiAtMC4wMDAwMDAxKSB8fCBfbW9kID09PSAwOyAvLyAxIG1pbGxpc2Vjb25kID0gMS4xNTc0MDc0MDc0MDc0MDc2ZS04XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdiZWdpbicpIHtcclxuICAgICAgICBjb25zdCBfbW9kID0gKGRheURpZmYgJSBtb21lbnQuZHVyYXRpb24odGhpcy5zdGVwKS5hc0RheXMoKSkgKyAxO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyQmVnaW5GdW5jdGlvbiA9XHJcbiAgICAgICAgICAoX21vZCA8IDAuMDAwMDAwMSAmJiBfbW9kID4gLTAuMDAwMDAwMSAmJiBfbW9kICE9PSAwKSB8fCBfbW9kID09PSAxOyAvLyAxIG1pbGxpc2Vjb25kID0gMS4xNTc0MDc0MDc0MDc0MDc2ZS04XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMub2djRmlsdGVyVGltZVNlcnZpY2Uuc3RlcElzSG91ckR1cmF0aW9uKHRoaXMuc3RlcCkpIHtcclxuICAgICAgaWYgKHR5cGUgPT09ICdlbmQnKSB7XHJcbiAgICAgICAgY29uc3QgaG91ckRpZmYgPSBtb21lbnQoZGF0ZVZhbHVlKS5kaWZmKFxyXG4gICAgICAgICAgbW9tZW50KHRoaXMuaGFuZGxlTWluKCkpLFxyXG4gICAgICAgICAgJ2hvdXJzJyxcclxuICAgICAgICAgIHRydWVcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyRW5kRnVuY3Rpb24gPVxyXG4gICAgICAgICAgaG91ckRpZmYgJSBtb21lbnQuZHVyYXRpb24odGhpcy5zdGVwKS5hc0hvdXJzKCkgPT09IDA7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdiZWdpbicpIHtcclxuICAgICAgICBjb25zdCBob3VyRGlmZiA9IG1vbWVudChkYXRlVmFsdWUpLmRpZmYoXHJcbiAgICAgICAgICBtb21lbnQodGhpcy5oYW5kbGVNaW4oKSksXHJcbiAgICAgICAgICAnaG91cnMnLFxyXG4gICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJCZWdpbkZ1bmN0aW9uID1cclxuICAgICAgICAgIGhvdXJEaWZmICUgbW9tZW50LmR1cmF0aW9uKHRoaXMuc3RlcCkuYXNIb3VycygpID09PSAwO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLm9nY0ZpbHRlclRpbWVTZXJ2aWNlLnN0ZXBJc01pbnV0ZUR1cmF0aW9uKHRoaXMuc3RlcCkpIHtcclxuICAgICAgaWYgKHR5cGUgPT09ICdlbmQnKSB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJFbmRGdW5jdGlvbiA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdiZWdpbicpIHtcclxuICAgICAgICB0aGlzLmZpbHRlckJlZ2luRnVuY3Rpb24gPSB0cnVlO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZmlsdGVyRW5kRnVuY3Rpb24gPSBkaWZmICUgdGhpcy5zdGVwTWlsbGlzZWNvbmRzID09PSAwO1xyXG4gICAgdGhpcy5maWx0ZXJCZWdpbkZ1bmN0aW9uID0gZGlmZiAlIHRoaXMuc3RlcE1pbGxpc2Vjb25kcyA9PT0gMDtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGdldERhdGVUaW1lKGRhdGUsIHBvcykge1xyXG4gICAgY29uc3QgdmFsdWV0bXAgPSBuZXcgRGF0ZShkYXRlKTtcclxuICAgIGxldCB2YWx1ZXRtcDI7XHJcbiAgICBpZiAoIXRoaXMuc2xpZGVyTW9kZSkge1xyXG4gICAgICBzd2l0Y2ggKHBvcykge1xyXG4gICAgICAgIGNhc2UgMToge1xyXG4gICAgICAgICAgaWYgKHRoaXMuY3VycmVudEZpbHRlci5jYWxlbmRhck1vZGVZZWFyKSB7XHJcbiAgICAgICAgICAgIHZhbHVldG1wMiA9IHZhbHVldG1wLnNldEhvdXJzKDAsIDApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHZhbHVldG1wMiA9IHZhbHVldG1wLnNldEhvdXJzKFxyXG4gICAgICAgICAgICAgIHRoaXMuYmVnaW5Ib3VyRm9ybUNvbnRyb2wudmFsdWUsXHJcbiAgICAgICAgICAgICAgdGhpcy5iZWdpbk1pbnV0ZUZvcm1Db250cm9sLnZhbHVlXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYXNlIDI6IHtcclxuICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRGaWx0ZXIuY2FsZW5kYXJNb2RlWWVhcikge1xyXG4gICAgICAgICAgICB2YWx1ZXRtcDIgPSB2YWx1ZXRtcC5zZXRIb3VycygwLCAwKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YWx1ZXRtcDIgPSB2YWx1ZXRtcC5zZXRIb3VycyhcclxuICAgICAgICAgICAgICB0aGlzLmVuZEhvdXJGb3JtQ29udHJvbC52YWx1ZSxcclxuICAgICAgICAgICAgICB0aGlzLmVuZE1pbnV0ZUZvcm1Db250cm9sLnZhbHVlXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVldG1wMiA/IHZhbHVldG1wMiA6IHZhbHVldG1wKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZU1pbnV0ZUluY3JlbWVudCgpIHtcclxuICAgIGlmICh0aGlzLm9nY0ZpbHRlclRpbWVTZXJ2aWNlLnN0ZXBJc01pbnV0ZUR1cmF0aW9uKHRoaXMuc3RlcCkpIHtcclxuICAgICAgaWYgKHRoaXMuc3RlcE1pbGxpc2Vjb25kcyA8IDM2MDAwMDApIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGVwTWlsbGlzZWNvbmRzIC8gMTAwMCA9PT0gNjBcclxuICAgICAgICAgID8gMVxyXG4gICAgICAgICAgOiB0aGlzLnN0ZXBNaWxsaXNlY29uZHMgLyAxMDAwO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5zdGVwTWlsbGlzZWNvbmRzICUgMzYwMDAwMCkgLyA2MDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLm9nY0ZpbHRlclRpbWVTZXJ2aWNlLnN0ZXBJc0hvdXJEdXJhdGlvbih0aGlzLnN0ZXApKSB7XHJcbiAgICAgIHJldHVybiA2MDtcclxuICAgIH1cclxuICAgIHJldHVybiAxO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlSG91ckluY3JlbWVudCgpIHtcclxuICAgIGlmICh0aGlzLm9nY0ZpbHRlclRpbWVTZXJ2aWNlLnN0ZXBJc0hvdXJEdXJhdGlvbih0aGlzLnN0ZXApKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnN0ZXBNaWxsaXNlY29uZHMgLyAxMDAwIC8gNjAgLyA2MDtcclxuICAgIH1cclxuICAgIHJldHVybiAxO1xyXG4gIH1cclxuXHJcbiAgZnVsbEJlZ2luSG91cnNBcnJheShjaGVja0VuZFZhbHVlPykge1xyXG4gICAgaWYgKGNoZWNrRW5kVmFsdWUpIHtcclxuICAgICAgdGhpcy5iZWdpbkhvdXJzID0gQXJyYXkuZnJvbShcclxuICAgICAgICB7XHJcbiAgICAgICAgICBsZW5ndGg6XHJcbiAgICAgICAgICAgICh0aGlzLmVuZEhvdXJGb3JtQ29udHJvbC52YWx1ZSAtIDApIC8gdGhpcy5oYW5kbGVIb3VySW5jcmVtZW50KCkgKyAxXHJcbiAgICAgICAgfSxcclxuICAgICAgICAoXywgaSkgPT4gMCArIGkgKiB0aGlzLmhhbmRsZUhvdXJJbmNyZW1lbnQoKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5iZWdpbkhvdXJzID0gQXJyYXkuZnJvbShcclxuICAgICAgICB7IGxlbmd0aDogKDIzIC0gMCkgLyB0aGlzLmhhbmRsZUhvdXJJbmNyZW1lbnQoKSArIDEgfSxcclxuICAgICAgICAoXywgaSkgPT4gMCArIGkgKiB0aGlzLmhhbmRsZUhvdXJJbmNyZW1lbnQoKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5iZWdpbkhvdXJGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLmJlZ2luVmFsdWUuZ2V0SG91cnMoKSk7XHJcbiAgfVxyXG5cclxuICBmdWxsRW5kSG91cnNBcnJheShjaGVja0VuZFZhbHVlPykge1xyXG4gICAgaWYgKGNoZWNrRW5kVmFsdWUpIHtcclxuICAgICAgdGhpcy5lbmRIb3VycyA9IEFycmF5LmZyb20oXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbGVuZ3RoOlxyXG4gICAgICAgICAgICAoMjMgLSB0aGlzLmJlZ2luSG91ckZvcm1Db250cm9sLnZhbHVlKSAvXHJcbiAgICAgICAgICAgICAgdGhpcy5oYW5kbGVIb3VySW5jcmVtZW50KCkgK1xyXG4gICAgICAgICAgICAxXHJcbiAgICAgICAgfSxcclxuICAgICAgICAoXywgaSkgPT5cclxuICAgICAgICAgIHRoaXMuYmVnaW5Ib3VyRm9ybUNvbnRyb2wudmFsdWUgKyBpICogdGhpcy5oYW5kbGVIb3VySW5jcmVtZW50KClcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZW5kSG91cnMgPSBBcnJheS5mcm9tKFxyXG4gICAgICAgIHsgbGVuZ3RoOiAoMjMgLSAwKSAvIHRoaXMuaGFuZGxlSG91ckluY3JlbWVudCgpICsgMSB9LFxyXG4gICAgICAgIChfLCBpKSA9PiAwICsgaSAqIHRoaXMuaGFuZGxlSG91ckluY3JlbWVudCgpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmVuZEhvdXJGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLmVuZFZhbHVlLmdldEhvdXJzKCkpO1xyXG4gIH1cclxuXHJcbiAgZnVsbEJlZ2luTWludXRlc0FycmF5KGNoZWNrRW5kVmFsdWU/KSB7XHJcbiAgICBpZiAoY2hlY2tFbmRWYWx1ZSkge1xyXG4gICAgICB0aGlzLmJlZ2luTWludXRlcyA9IEFycmF5LmZyb20oXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbGVuZ3RoOlxyXG4gICAgICAgICAgICAodGhpcy5lbmRNaW51dGVGb3JtQ29udHJvbC52YWx1ZSAtIDApIC9cclxuICAgICAgICAgICAgICB0aGlzLmhhbmRsZU1pbnV0ZUluY3JlbWVudCgpICtcclxuICAgICAgICAgICAgMVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKF8sIGkpID0+IDAgKyBpICogdGhpcy5oYW5kbGVNaW51dGVJbmNyZW1lbnQoKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5iZWdpbk1pbnV0ZXMgPSBBcnJheS5mcm9tKFxyXG4gICAgICAgIHsgbGVuZ3RoOiAoNTkgLSAwKSAvIHRoaXMuaGFuZGxlTWludXRlSW5jcmVtZW50KCkgKyAxIH0sXHJcbiAgICAgICAgKF8sIGkpID0+IDAgKyBpICogdGhpcy5oYW5kbGVNaW51dGVJbmNyZW1lbnQoKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5iZWdpbk1pbnV0ZUZvcm1Db250cm9sLnNldFZhbHVlKHRoaXMuYmVnaW5WYWx1ZS5nZXRNaW51dGVzKCkpO1xyXG4gIH1cclxuXHJcbiAgZnVsbEVuZE1pbnV0ZXNBcnJheShjaGVja0VuZFZhbHVlPykge1xyXG4gICAgaWYgKGNoZWNrRW5kVmFsdWUpIHtcclxuICAgICAgdGhpcy5lbmRNaW51dGVzID0gQXJyYXkuZnJvbShcclxuICAgICAgICB7XHJcbiAgICAgICAgICBsZW5ndGg6XHJcbiAgICAgICAgICAgICg1OSAtIHRoaXMuYmVnaW5NaW51dGVGb3JtQ29udHJvbC52YWx1ZSkgL1xyXG4gICAgICAgICAgICAgIHRoaXMuaGFuZGxlTWludXRlSW5jcmVtZW50KCkgK1xyXG4gICAgICAgICAgICAxXHJcbiAgICAgICAgfSxcclxuICAgICAgICAoXywgaSkgPT5cclxuICAgICAgICAgIHRoaXMuYmVnaW5NaW51dGVGb3JtQ29udHJvbC52YWx1ZSArIGkgKiB0aGlzLmhhbmRsZU1pbnV0ZUluY3JlbWVudCgpXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmVuZE1pbnV0ZXMgPSBBcnJheS5mcm9tKFxyXG4gICAgICAgIHsgbGVuZ3RoOiAoNTkgLSAwKSAvIHRoaXMuaGFuZGxlTWludXRlSW5jcmVtZW50KCkgKyAxIH0sXHJcbiAgICAgICAgKF8sIGkpID0+IDAgKyBpICogdGhpcy5oYW5kbGVNaW51dGVJbmNyZW1lbnQoKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5lbmRNaW51dGVGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLmVuZFZhbHVlLmdldE1pbnV0ZXMoKSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVIb3Vyc01pbnV0ZXNBcnJheSgpIHtcclxuICAgIGNvbnN0IGJlZ2luVG1wID0gbmV3IERhdGUodGhpcy5iZWdpblZhbHVlKTtcclxuICAgIGNvbnN0IGVuZFRtcCA9IG5ldyBEYXRlKHRoaXMuZW5kVmFsdWUpO1xyXG4gICAgaWYgKGJlZ2luVG1wLnNldEhvdXJzKDAsIDApID09PSBlbmRUbXAuc2V0SG91cnMoMCwgMCkpIHtcclxuICAgICAgdGhpcy5mdWxsQmVnaW5Ib3Vyc0FycmF5KHRydWUpO1xyXG4gICAgICB0aGlzLmZ1bGxFbmRIb3Vyc0FycmF5KHRydWUpO1xyXG4gICAgICBpZiAodGhpcy5iZWdpblZhbHVlLmdldEhvdXJzKCkgPT09IHRoaXMuZW5kVmFsdWUuZ2V0SG91cnMoKSkge1xyXG4gICAgICAgIHRoaXMuZnVsbEJlZ2luTWludXRlc0FycmF5KHRydWUpO1xyXG4gICAgICAgIHRoaXMuZnVsbEVuZE1pbnV0ZXNBcnJheSh0cnVlKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5mdWxsQmVnaW5Ib3Vyc0FycmF5KCk7XHJcbiAgICAgIHRoaXMuZnVsbEVuZEhvdXJzQXJyYXkoKTtcclxuICAgICAgdGhpcy5mdWxsQmVnaW5NaW51dGVzQXJyYXkoKTtcclxuICAgICAgdGhpcy5mdWxsRW5kTWludXRlc0FycmF5KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVZhbHVlcygpIHtcclxuICAgIHRoaXMuY2hhbmdlVGVtcG9yYWxQcm9wZXJ0eSh0aGlzLmJlZ2luVmFsdWUsIDEsIGZhbHNlKTtcclxuICAgIHRoaXMuY2hhbmdlVGVtcG9yYWxQcm9wZXJ0eSh0aGlzLmVuZFZhbHVlLCAyLCB0cnVlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXN0cmljdGVkVG9TdGVwKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY3VycmVudEZpbHRlci5yZXN0cmljdFRvU3RlcFxyXG4gICAgICA/IHRoaXMuY3VycmVudEZpbHRlci5yZXN0cmljdFRvU3RlcFxyXG4gICAgICA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhbmRsZU1pbigpIHtcclxuICAgIHJldHVybiB0aGlzLmN1cnJlbnRGaWx0ZXIuYmVnaW5cclxuICAgICAgPyB0aGlzLmN1cnJlbnRGaWx0ZXIuYmVnaW5cclxuICAgICAgOiB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5taW5EYXRlXHJcbiAgICAgID8gdGhpcy5kYXRhc291cmNlLm9wdGlvbnMubWluRGF0ZVxyXG4gICAgICA6IHRoaXMuX2RlZmF1bHRNaW47XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlTWF4KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY3VycmVudEZpbHRlci5lbmRcclxuICAgICAgPyB0aGlzLmN1cnJlbnRGaWx0ZXIuZW5kXHJcbiAgICAgIDogdGhpcy5kYXRhc291cmNlLm9wdGlvbnMubWF4RGF0ZVxyXG4gICAgICA/IHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm1heERhdGVcclxuICAgICAgOiB0aGlzLl9kZWZhdWx0TWF4O1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlUHJvcGVydHlCeVBhc3MoZXZlbnQpIHtcclxuICAgIHRoaXMuY2hhbmdlUHJvcGVydHkubmV4dChldmVudCk7XHJcbiAgfVxyXG5cclxuICBtb2RlQ2hhbmdlKGV2ZW50KSB7XHJcbiAgICBpZiAoIWV2ZW50LmNoZWNrZWQpIHtcclxuICAgICAgdGhpcy51cGRhdGVWYWx1ZXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldEZpbHRlclN0YXRlRGlzYWJsZSgpIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnRGaWx0ZXIpIHtcclxuICAgICAgdGhpcy5maWx0ZXJTdGF0ZURpc2FibGUgPSAhdGhpcy5jdXJyZW50RmlsdGVyLmFjdGl2ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyU3RhdGVEaXNhYmxlID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jYWxlbmRhclR5cGUoKSA9PT0gJ2RhdGV0aW1lJykge1xyXG4gICAgICBpZiAodGhpcy5maWx0ZXJTdGF0ZURpc2FibGUgPT09IHRydWUpIHtcclxuICAgICAgICB0aGlzLmJlZ2luSG91ckZvcm1Db250cm9sLmRpc2FibGUoKTtcclxuICAgICAgICB0aGlzLmJlZ2luTWludXRlRm9ybUNvbnRyb2wuZGlzYWJsZSgpO1xyXG4gICAgICAgIHRoaXMuZW5kSG91ckZvcm1Db250cm9sLmRpc2FibGUoKTtcclxuICAgICAgICB0aGlzLmVuZE1pbnV0ZUZvcm1Db250cm9sLmRpc2FibGUoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmJlZ2luSG91ckZvcm1Db250cm9sLmVuYWJsZSgpO1xyXG4gICAgICAgIHRoaXMuYmVnaW5NaW51dGVGb3JtQ29udHJvbC5lbmFibGUoKTtcclxuICAgICAgICB0aGlzLmVuZEhvdXJGb3JtQ29udHJvbC5lbmFibGUoKTtcclxuICAgICAgICB0aGlzLmVuZE1pbnV0ZUZvcm1Db250cm9sLmVuYWJsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldERhdGVGcm9tU3RyaW5nV2l0aG91dFRpbWUoc3RyaW5nRGF0ZTogc3RyaW5nKTogRGF0ZSB7XHJcbiAgICAvLyB3YXJuaW5nIGNyZWF0ZSBkYXRlIHdpdGggbm8gdGltZSBtYWtlIGEgZGF0ZSBVVEMgd2l0aCBUWiBhbmQgdGhlIGRhdGUgY3JlYXRlIG1heWJlIG5vdCB0aGUgc2FtZSB5ZWFyLCBtb250aCBhbmQgZGF5XHJcbiAgICAvLyBleGVtcGxlOlxyXG4gICAgLy8gbmV3IERhdGUoJzIwMjItMDEtMDEnKSAtPiBGcmkgRGVjIDMxIDIwMjEgMTk6MDA6MDAgR01ULTA1MDAgKGhldXJlIG5vcm1hbGUgZGUgbOKAmUVzdCBub3JkLWFtw6lyaWNhaW4pXHJcbiAgICAvLyB0byBjcmVhdGUgc2FtZSBkYXRlIGFzIHN0cmluZywgYWRkIHRpbWUgMDAgaW4gdGhlIGNyZWF0aW9uXHJcbiAgICAvLyBuZXcgRGF0ZSgnMjAyMi0wMS0wMSAwMDowMDowMCcpIC0+IFNhdCBKYW4gMDEgMjAyMiAwMDowMDowMCBHTVQtMDUwMCAoaGV1cmUgbm9ybWFsZSBkZSBs4oCZRXN0IG5vcmQtYW3DqXJpY2FpbilcclxuICAgIGxldCB5ZWFyO1xyXG4gICAgbGV0IG1vbnRoID0gJzAxJztcclxuICAgIGxldCBkYXkgPSAnMDEnO1xyXG4gICAgaWYgKHN0cmluZ0RhdGUubGVuZ3RoID09PSAxMCkge1xyXG4gICAgICBjb25zdCBkYXRlSXRlbXMgPSBzdHJpbmdEYXRlLnNwbGl0KCctJyk7XHJcbiAgICAgIGlmIChkYXRlSXRlbXMubGVuZ3RoICE9PSAzKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgJ0Vycm9yIGluIGNvbmZpZyBkYXRlIGJlZ2luLWVuZCBmb3Igb2djRmlsdGVyOiBEYXRlIHdpdGhvdXQgdGltZSBmb3JtYXQgbmVlZCB0byBiZSBZWVlZLU1NLUREIG9yIFlZWVknXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB5ZWFyID0gZGF0ZUl0ZW1zWzBdO1xyXG4gICAgICAgIG1vbnRoID0gZGF0ZUl0ZW1zWzFdO1xyXG4gICAgICAgIGRheSA9IGRhdGVJdGVtc1syXTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChzdHJpbmdEYXRlLmxlbmd0aCA9PT0gNCkge1xyXG4gICAgICB5ZWFyID0gc3RyaW5nRGF0ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBuZXcgRGF0ZShzdHJpbmdEYXRlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZXcgRGF0ZShgJHt5ZWFyfS0ke21vbnRofS0ke2RheX0gMDA6MDA6MDBgKTtcclxuICB9XHJcblxyXG4gIHJlc2V0RmlsdGVyKCkge1xyXG4gICAgbGV0IGZpbHRlck9yaWdpbkNvbmZpZyA9IHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnNcclxuICAgICAgLmZpbHRlcnMgYXMgT2djRmlsdGVyRHVyaW5nT3B0aW9ucztcclxuXHJcbiAgICBsZXQgbWluRGVmYXVsdERhdGU7XHJcbiAgICBsZXQgbWF4RGVmYXVsdERhdGU7XHJcbiAgICBsZXQgbWluRGVmYXVsdElTT1N0cmluZztcclxuICAgIGxldCBtYXhEZWZhdWx0SVNPU3RyaW5nO1xyXG5cclxuICAgIGlmICh0aGlzLmNhbGVuZGFyVHlwZVllYXIpIHtcclxuICAgICAgaWYgKGZpbHRlck9yaWdpbkNvbmZpZy5lbmQgPT09ICd0b2RheScpIHtcclxuICAgICAgICBsZXQgdG9kYXlEYXRlU3RyaW5nTm9UaW1lID0gbmV3IERhdGUoKS50b0xvY2FsZURhdGVTdHJpbmcoJ2VuLUNBJyk7IC8vICcyMDIyLTAyLTEzJ1xyXG4gICAgICAgIG1heERlZmF1bHRJU09TdHJpbmcgPSBgJHt0b2RheURhdGVTdHJpbmdOb1RpbWUuc3Vic3RyaW5nKDAsIDQpfS0wMS0wMWA7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbWF4RGVmYXVsdElTT1N0cmluZyA9IGAke2ZpbHRlck9yaWdpbkNvbmZpZy5lbmQuc3Vic3RyaW5nKDAsIDQpfS0wMS0wMWA7XHJcbiAgICAgIH1cclxuICAgICAgbWluRGVmYXVsdElTT1N0cmluZyA9IGAke2ZpbHRlck9yaWdpbkNvbmZpZy5iZWdpbi5zdWJzdHJpbmcoMCwgNCl9LTAxLTAxYDtcclxuICAgICAgbWluRGVmYXVsdERhdGUgPSB0aGlzLmdldERhdGVGcm9tU3RyaW5nV2l0aG91dFRpbWUobWluRGVmYXVsdElTT1N0cmluZyk7XHJcbiAgICAgIG1heERlZmF1bHREYXRlID0gdGhpcy5nZXREYXRlRnJvbVN0cmluZ1dpdGhvdXRUaW1lKG1heERlZmF1bHRJU09TdHJpbmcpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbWluRGVmYXVsdERhdGUgPSB0aGlzLnBhcnNlRmlsdGVyKGZpbHRlck9yaWdpbkNvbmZpZy5iZWdpbik7XHJcbiAgICAgIG1heERlZmF1bHREYXRlID0gdGhpcy5wYXJzZUZpbHRlcihmaWx0ZXJPcmlnaW5Db25maWcuZW5kKTtcclxuICAgICAgbWluRGVmYXVsdElTT1N0cmluZyA9IG1pbkRlZmF1bHREYXRlLnRvSVNPU3RyaW5nKCk7XHJcbiAgICAgIG1heERlZmF1bHRJU09TdHJpbmcgPSBtYXhEZWZhdWx0RGF0ZS50b0lTT1N0cmluZygpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5jdXJyZW50RmlsdGVyLmJlZ2luICE9PSBtaW5EZWZhdWx0SVNPU3RyaW5nIHx8XHJcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlci5lbmQgIT09IG1heERlZmF1bHRJU09TdHJpbmdcclxuICAgICkge1xyXG4gICAgICB0aGlzLmJlZ2luVmFsdWUgPSBtaW5EZWZhdWx0RGF0ZTtcclxuICAgICAgdGhpcy5lbmRWYWx1ZSA9IG1heERlZmF1bHREYXRlO1xyXG4gICAgICB0aGlzLnVwZGF0ZVZhbHVlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdG9nZ2xlRmlsdGVyU3RhdGUoKSB7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50RmlsdGVyLmFjdGl2ZSA9PT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmN1cnJlbnRGaWx0ZXIuYWN0aXZlID0gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmN1cnJlbnRGaWx0ZXIuYWN0aXZlID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHRoaXMuc2V0RmlsdGVyU3RhdGVEaXNhYmxlKCk7XHJcbiAgICB0aGlzLnVwZGF0ZVZhbHVlcygpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZGF0ZXRpbWUtY29udGFpbmVyXCI+XG4gIDxtYXQtc2xpZGUtdG9nZ2xlXG4gICAgKm5nSWY9XCJ0aGlzLmN1cnJlbnRGaWx0ZXIuc2xpZGVyT3B0aW9ucz8uZW5hYmxlZFwiXG4gICAgWyhuZ01vZGVsKV09XCJzbGlkZXJNb2RlXCJcbiAgICAoY2hhbmdlKT1cIm1vZGVDaGFuZ2UoJGV2ZW50KVwiXG4gID5cbiAgICB7eyAnaWdvLmdlby5maWx0ZXIuc2xpZGVyTW9kZVRpdGxlJyB8IHRyYW5zbGF0ZSB9fVxuICA8L21hdC1zbGlkZS10b2dnbGU+XG5cbiAgPGRpdiBjbGFzcz1cInNsaWRlci1jb250YWluZXJcIiAqbmdJZj1cInNsaWRlck1vZGVcIj5cbiAgICA8aWdvLW9nYy1maWx0ZXItdGltZS1zbGlkZXJcbiAgICAgIFtiZWdpbl09XCJiZWdpblZhbHVlXCJcbiAgICAgIFttYXhdPVwidGhpcy5yZXN0cmljdGVkVG9TdGVwKCkgPyB0aGlzLm1heERhdGUgOiB0aGlzLmVuZFZhbHVlXCJcbiAgICAgIFtjdXJyZW50RmlsdGVyXT1cImN1cnJlbnRGaWx0ZXJcIlxuICAgICAgW2RhdGFzb3VyY2VdPVwiZGF0YXNvdXJjZVwiXG4gICAgICAoY2hhbmdlUHJvcGVydHkpPVwiY2hhbmdlUHJvcGVydHlCeVBhc3MoJGV2ZW50KVwiXG4gICAgPlxuICAgIDwvaWdvLW9nYy1maWx0ZXItdGltZS1zbGlkZXI+XG4gIDwvZGl2PlxuXG4gIDxkaXYgKm5nSWY9XCIhc2xpZGVyTW9kZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJ5ZWFyLWlucHV0LWNvbnRhaW5lclwiICpuZ0lmPVwiY2FsZW5kYXJUeXBlWWVhclwiPlxuICAgICAgPCEtLSB0byBlbXVsYXRlIGEgeWVhci1waWNrZXIsIDIgaW5wdXQ6IGZpcnN0IGlucHV0IHRvIHNob3cgdXNlciBqdXN0IHllYXIgYW5kIHNlY29uZCBpbnB1dCBoaWRlbiBhbmQgYmluZCBcbiAgICAgICAgd2l0aCB0aGUgZGF0ZXBpY2tlciAgLS0+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ5ZWFyLWlucHV0XCIgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiPlxuICAgICAgICA8bWF0LWxhYmVsPnt7ICdpZ28uZ2VvLnRpbWVGaWx0ZXIuc3RhcnRZZWFyJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgIGNsYXNzPVwieWVhci1pbnB1dC1vbmx5LXllYXJcIlxuICAgICAgICAgIHZhbHVlPVwie3sgb25seVllYXJCZWdpbiB9fVwiXG4gICAgICAgICAgKGNoYW5nZSk9XCJ5ZWFyT25seUlucHV0Q2hhbmdlKCRldmVudCwgYmVnaW5EYXRlcGlja2VyLCAnYmVnaW4nKVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImZpbHRlclN0YXRlRGlzYWJsZVwiXG4gICAgICAgIC8+XG4gICAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGVcbiAgICAgICAgICBtYXRTdWZmaXhcbiAgICAgICAgICBbZm9yXT1cImJlZ2luRGF0ZXBpY2tlclwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImZpbHRlclN0YXRlRGlzYWJsZVwiXG4gICAgICAgID48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cblxuICAgICAgICA8bWF0LWRhdGVwaWNrZXJcbiAgICAgICAgICBwYW5lbENsYXNzPVwiZGF0ZXBpY2tlci15ZWFyXCJcbiAgICAgICAgICAjYmVnaW5EYXRlcGlja2VyXG4gICAgICAgICAgW3N0YXJ0Vmlld109XCJjYWxlbmRhclZpZXcoKVwiXG4gICAgICAgICAgW3N0YXJ0QXRdPVwiYmVnaW5WYWx1ZVwiXG4gICAgICAgICAgKHllYXJTZWxlY3RlZCk9XCJ5ZWFyU2VsZWN0ZWQoJGV2ZW50LCBiZWdpbkRhdGVwaWNrZXIsICdiZWdpbicpXCJcbiAgICAgICAgPlxuICAgICAgICA8L21hdC1kYXRlcGlja2VyPlxuXG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICNiZWdpblllYXJcbiAgICAgICAgICBjbGFzcz1cInllYXItaW5wdXQtaGlkZVwiXG4gICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICBbbWF0RGF0ZXBpY2tlcl09XCJiZWdpbkRhdGVwaWNrZXJcIlxuICAgICAgICAgIGVuYWJsZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgcmVhZG9ubHk9XCJ0cnVlXCJcbiAgICAgICAgICBbdmFsdWVdPVwiXG4gICAgICAgICAgICBiZWdpblZhbHVlID8gYmVnaW5WYWx1ZSA6IGhhbmRsZURhdGUoZGF0YXNvdXJjZS5vcHRpb25zLm1pbkRhdGUpXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbbWluXT1cImhhbmRsZURhdGUoZGF0YXNvdXJjZS5vcHRpb25zLm1pbkRhdGUpXCJcbiAgICAgICAgICBbbWF4XT1cIlxuICAgICAgICAgICAgZW5kVmFsdWUgJiYgIXJlc3RyaWN0ZWRUb1N0ZXAoKVxuICAgICAgICAgICAgICA/IGVuZFZhbHVlXG4gICAgICAgICAgICAgIDogaGFuZGxlRGF0ZShkYXRhc291cmNlLm9wdGlvbnMubWF4RGF0ZSlcbiAgICAgICAgICBcIlxuICAgICAgICAvPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwieWVhci1pbnB1dFwiIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIj5cbiAgICAgICAgPG1hdC1sYWJlbD57eyAnaWdvLmdlby50aW1lRmlsdGVyLmVuZFllYXInIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgY2xhc3M9XCJ5ZWFyLWlucHV0LW9ubHkteWVhclwiXG4gICAgICAgICAgdmFsdWU9XCJ7eyBvbmx5WWVhckVuZCB9fVwiXG4gICAgICAgICAgKGNoYW5nZSk9XCJ5ZWFyT25seUlucHV0Q2hhbmdlKCRldmVudCwgZW5kRGF0ZXBpY2tlciwgJ2VuZCcpXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZmlsdGVyU3RhdGVEaXNhYmxlXCJcbiAgICAgICAgLz5cbiAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZVxuICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgIFtmb3JdPVwiZW5kRGF0ZXBpY2tlclwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImZpbHRlclN0YXRlRGlzYWJsZVwiXG4gICAgICAgID48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgICAgICAgPG1hdC1kYXRlcGlja2VyXG4gICAgICAgICAgcGFuZWxDbGFzcz1cImRhdGVwaWNrZXIteWVhclwiXG4gICAgICAgICAgI2VuZERhdGVwaWNrZXJcbiAgICAgICAgICBbc3RhcnRWaWV3XT1cImNhbGVuZGFyVmlldygpXCJcbiAgICAgICAgICBbc3RhcnRBdF09XCJlbmRWYWx1ZVwiXG4gICAgICAgICAgKHllYXJTZWxlY3RlZCk9XCJ5ZWFyU2VsZWN0ZWQoJGV2ZW50LCBlbmREYXRlcGlja2VyLCAnZW5kJylcIlxuICAgICAgICA+XG4gICAgICAgIDwvbWF0LWRhdGVwaWNrZXI+XG5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgI2VuZFllYXJcbiAgICAgICAgICBjbGFzcz1cInllYXItaW5wdXQtaGlkZVwiXG4gICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICBbbWF0RGF0ZXBpY2tlcl09XCJlbmREYXRlcGlja2VyXCJcbiAgICAgICAgICBlbmFibGVkPVwiZmFsc2VcIlxuICAgICAgICAgIHJlYWRvbmx5PVwidHJ1ZVwiXG4gICAgICAgICAgW3ZhbHVlXT1cImVuZFZhbHVlID8gZW5kVmFsdWUgOiBoYW5kbGVEYXRlKGRhdGFzb3VyY2Uub3B0aW9ucy5tYXhEYXRlKVwiXG4gICAgICAgICAgW21pbl09XCJcbiAgICAgICAgICAgIGJlZ2luVmFsdWUgPyBiZWdpblZhbHVlIDogaGFuZGxlRGF0ZShkYXRhc291cmNlLm9wdGlvbnMubWluRGF0ZSlcbiAgICAgICAgICBcIlxuICAgICAgICAgIFttYXhdPVwiaGFuZGxlRGF0ZShkYXRhc291cmNlLm9wdGlvbnMubWF4RGF0ZSlcIlxuICAgICAgICAvPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25zLWNvbnRhaW5lclwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJyZXNldC1idXR0b25cIlxuICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgKGNsaWNrKT1cInJlc2V0RmlsdGVyKClcIlxuICAgICAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmZpbHRlci5yZXNldEZpbHRlcnMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZmlsdGVyU3RhdGVEaXNhYmxlXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwie3sgcmVzZXRJY29uIH19XCI+PC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlXG4gICAgICAgICAgY2xhc3M9XCJ0b2dnbGUtZmlsdGVyLXN0YXRlXCJcbiAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZUZpbHRlclN0YXRlKClcIlxuICAgICAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmZpbHRlci50b2dnbGVGaWx0ZXJTdGF0ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXG4gICAgICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICAgICAgW2NoZWNrZWRdPVwiIWZpbHRlclN0YXRlRGlzYWJsZVwiXG4gICAgICAgID5cbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZGF0ZXRpbWUtaW5wdXQtY29udGFpbmVyXCIgKm5nSWY9XCJjYWxlbmRhclR5cGUoKSAhPT0gJ3llYXInXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZGF0ZXRpbWUtaW5wdXRcIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZGF0ZS1pbnB1dFwiIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIj5cbiAgICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlXG4gICAgICAgICAgICBtYXRTdWZmaXhcbiAgICAgICAgICAgIFtmb3JdPVwiYmVnaW5EYXRlcGlja2VyXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWx0ZXJTdGF0ZURpc2FibGVcIlxuICAgICAgICAgID48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICNiZWdpblxuICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgIFttYXREYXRlcGlja2VyXT1cImJlZ2luRGF0ZXBpY2tlclwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2lnby5nZW8udGltZUZpbHRlci5zdGFydERhdGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cIiFjdXJyZW50RmlsdGVyLmFjdGl2ZVwiXG4gICAgICAgICAgICAoZGF0ZUNoYW5nZSk9XCJjaGFuZ2VUZW1wb3JhbFByb3BlcnR5KGJlZ2luLnZhbHVlLCAxKVwiXG4gICAgICAgICAgICBbbWF0RGF0ZXBpY2tlckZpbHRlcl09XCJmaWx0ZXJCZWdpbkZ1bmN0aW9uXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJcbiAgICAgICAgICAgICAgYmVnaW5WYWx1ZSA/IGJlZ2luVmFsdWUgOiBoYW5kbGVEYXRlKGRhdGFzb3VyY2Uub3B0aW9ucy5taW5EYXRlKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFttaW5dPVwiaGFuZGxlRGF0ZShkYXRhc291cmNlLm9wdGlvbnMubWluRGF0ZSlcIlxuICAgICAgICAgICAgW21heF09XCJcbiAgICAgICAgICAgICAgZW5kVmFsdWUgJiYgIXJlc3RyaWN0ZWRUb1N0ZXAoKVxuICAgICAgICAgICAgICAgID8gZW5kVmFsdWVcbiAgICAgICAgICAgICAgICA6IGhhbmRsZURhdGUoZGF0YXNvdXJjZS5vcHRpb25zLm1heERhdGUpXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpbHRlclN0YXRlRGlzYWJsZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpbGxlclwiPjwvc3Bhbj5cbiAgICAgICAgICA8bWF0LWRhdGVwaWNrZXJcbiAgICAgICAgICAgICNiZWdpbkRhdGVwaWNrZXJcbiAgICAgICAgICAgIFtzdGFydFZpZXddPVwiY2FsZW5kYXJWaWV3KClcIlxuICAgICAgICAgICAgW3N0YXJ0QXRdPVwiYmVnaW5WYWx1ZVwiXG4gICAgICAgICAgICAoeWVhclNlbGVjdGVkKT1cInllYXJTZWxlY3RlZCgkZXZlbnQsIGJlZ2luRGF0ZXBpY2tlciwgJ2JlZ2luJylcIlxuICAgICAgICAgICAgKG1vbnRoU2VsZWN0ZWQpPVwibW9udGhTZWxlY3RlZCgkZXZlbnQsIGJlZ2luRGF0ZXBpY2tlciwgJ2JlZ2luJylcIlxuICAgICAgICAgID5cbiAgICAgICAgICA8L21hdC1kYXRlcGlja2VyPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgIDxkaXYgKm5nSWY9XCJjYWxlbmRhclR5cGUoKSA9PT0gJ2RhdGV0aW1lJ1wiIGNsYXNzPVwidGltZS1pbnB1dFwiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImhvdXItaW5wdXRcIiBzdWJzY3JpcHRTaXppbmc9XCJkeW5hbWljXCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7ICdpZ28uZ2VvLnRpbWVGaWx0ZXIuaG91cicgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJiZWdpbkhvdXJGb3JtQ29udHJvbFwiXG4gICAgICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cIiFjdXJyZW50RmlsdGVyLmFjdGl2ZVwiXG4gICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwiY2hhbmdlVGVtcG9yYWxQcm9wZXJ0eShiZWdpbi52YWx1ZSwgMSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaG91ciBvZiBiZWdpbkhvdXJzXCIgW3ZhbHVlXT1cImhvdXJcIj57e1xuICAgICAgICAgICAgICAgIGhvdXJcbiAgICAgICAgICAgICAgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJtaW51dGUtaW5wdXRcIiBzdWJzY3JpcHRTaXppbmc9XCJkeW5hbWljXCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7ICdpZ28uZ2VvLnRpbWVGaWx0ZXIubWludXRlJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImJlZ2luTWludXRlRm9ybUNvbnRyb2xcIlxuICAgICAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCIhY3VycmVudEZpbHRlci5hY3RpdmVcIlxuICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cImNoYW5nZVRlbXBvcmFsUHJvcGVydHkoYmVnaW4udmFsdWUsIDEpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgbWludXRlIG9mIGJlZ2luTWludXRlc1wiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cIm1pbnV0ZVwiXG4gICAgICAgICAgICAgICAgPnt7IG1pbnV0ZSB9fTwvbWF0LW9wdGlvblxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiAqbmdJZj1cIiFyZXN0cmljdGVkVG9TdGVwKClcIiBjbGFzcz1cImRhdGV0aW1lLWlucHV0XCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImRhdGUtaW5wdXRcIiBzdWJzY3JpcHRTaXppbmc9XCJkeW5hbWljXCI+XG4gICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZVxuICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICBbZm9yXT1cImVuZERhdGVwaWNrZXJcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpbHRlclN0YXRlRGlzYWJsZVwiXG4gICAgICAgICAgPjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgI2VuZFxuICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgIFttYXREYXRlcGlja2VyXT1cImVuZERhdGVwaWNrZXJcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidpZ28uZ2VvLnRpbWVGaWx0ZXIuZW5kRGF0ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiIWN1cnJlbnRGaWx0ZXIuYWN0aXZlXCJcbiAgICAgICAgICAgIChkYXRlQ2hhbmdlKT1cImNoYW5nZVRlbXBvcmFsUHJvcGVydHkoZW5kLnZhbHVlLCAyKVwiXG4gICAgICAgICAgICBbbWF0RGF0ZXBpY2tlckZpbHRlcl09XCJmaWx0ZXJFbmRGdW5jdGlvblwiXG4gICAgICAgICAgICBbdmFsdWVdPVwiXG4gICAgICAgICAgICAgIGVuZFZhbHVlID8gZW5kVmFsdWUgOiBoYW5kbGVEYXRlKGRhdGFzb3VyY2Uub3B0aW9ucy5tYXhEYXRlKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFttaW5dPVwiXG4gICAgICAgICAgICAgIGJlZ2luVmFsdWUgPyBiZWdpblZhbHVlIDogaGFuZGxlRGF0ZShkYXRhc291cmNlLm9wdGlvbnMubWluRGF0ZSlcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbbWF4XT1cImhhbmRsZURhdGUoZGF0YXNvdXJjZS5vcHRpb25zLm1heERhdGUpXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWx0ZXJTdGF0ZURpc2FibGVcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWxsZXJcIj48L3NwYW4+XG4gICAgICAgICAgPG1hdC1kYXRlcGlja2VyXG4gICAgICAgICAgICAjZW5kRGF0ZXBpY2tlclxuICAgICAgICAgICAgW3N0YXJ0Vmlld109XCJjYWxlbmRhclZpZXcoKVwiXG4gICAgICAgICAgICBbc3RhcnRBdF09XCJlbmRWYWx1ZVwiXG4gICAgICAgICAgICAoeWVhclNlbGVjdGVkKT1cInllYXJTZWxlY3RlZCgkZXZlbnQsIGVuZERhdGVwaWNrZXIsICdlbmQnKVwiXG4gICAgICAgICAgICAobW9udGhTZWxlY3RlZCk9XCJtb250aFNlbGVjdGVkKCRldmVudCwgZW5kRGF0ZXBpY2tlciwgJ2VuZCcpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPC9tYXQtZGF0ZXBpY2tlcj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICA8ZGl2ICpuZ0lmPVwiY2FsZW5kYXJUeXBlKCkgPT09ICdkYXRldGltZSdcIiBjbGFzcz1cInRpbWUtaW5wdXRcIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJob3VyLWlucHV0XCIgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyAnaWdvLmdlby50aW1lRmlsdGVyLmhvdXInIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdFxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZW5kSG91ckZvcm1Db250cm9sXCJcbiAgICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiIWN1cnJlbnRGaWx0ZXIuYWN0aXZlXCJcbiAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJjaGFuZ2VUZW1wb3JhbFByb3BlcnR5KGVuZC52YWx1ZSwgMilcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaG91ciBvZiBlbmRIb3Vyc1wiIFt2YWx1ZV09XCJob3VyXCI+e3tcbiAgICAgICAgICAgICAgICBob3VyXG4gICAgICAgICAgICAgIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibWludXRlLWlucHV0XCIgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyAnaWdvLmdlby50aW1lRmlsdGVyLm1pbnV0ZScgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJlbmRNaW51dGVGb3JtQ29udHJvbFwiXG4gICAgICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cIiFjdXJyZW50RmlsdGVyLmFjdGl2ZVwiXG4gICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwiY2hhbmdlVGVtcG9yYWxQcm9wZXJ0eShlbmQudmFsdWUsIDIpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG1pbnV0ZSBvZiBlbmRNaW51dGVzXCIgW3ZhbHVlXT1cIm1pbnV0ZVwiPnt7XG4gICAgICAgICAgICAgICAgbWludXRlXG4gICAgICAgICAgICAgIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25zLWNvbnRhaW5lclwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJyZXNldC1idXR0b25cIlxuICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgKGNsaWNrKT1cInJlc2V0RmlsdGVyKClcIlxuICAgICAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmZpbHRlci5yZXNldEZpbHRlcnMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZmlsdGVyU3RhdGVEaXNhYmxlXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwie3sgcmVzZXRJY29uIH19XCI+PC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlXG4gICAgICAgICAgY2xhc3M9XCJ0b2dnbGUtZmlsdGVyLXN0YXRlXCJcbiAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZUZpbHRlclN0YXRlKClcIlxuICAgICAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXG4gICAgICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8uZmlsdGVyLnRvZ2dsZUZpbHRlclN0YXRlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW2NoZWNrZWRdPVwiIWZpbHRlclN0YXRlRGlzYWJsZVwiXG4gICAgICAgID5cbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -1,4 +1,6 @@
1
1
  import { Component, Input } from '@angular/core';
2
+ import { MAT_AUTOCOMPLETE_DEFAULT_OPTIONS } from '@angular/material/autocomplete';
3
+ import { MAT_SELECT_CONFIG } from '@angular/material/select';
2
4
  import { IgoMap } from '../../map/shared';
3
5
  import * as i0 from "@angular/core";
4
6
  function OgcFilterableFormComponent_igo_ogc_filter_selection_0_Template(rf, ctx) { if (rf & 1) {
@@ -41,18 +43,36 @@ export class OgcFilterableFormComponent {
41
43
  color = 'primary';
42
44
  constructor() { }
43
45
  static ɵfac = function OgcFilterableFormComponent_Factory(t) { return new (t || OgcFilterableFormComponent)(); };
44
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: OgcFilterableFormComponent, selectors: [["igo-ogc-filterable-form"]], inputs: { datasource: "datasource", map: "map", refreshFilters: "refreshFilters" }, decls: 2, vars: 2, consts: [["igoListItem", "", 3, "refreshFilters", "datasource", "map", "currentFilter", 4, "ngIf"], [4, "ngIf"], ["igoListItem", "", 3, "refreshFilters", "datasource", "map", "currentFilter"], ["ngFor", "", 3, "ngForOf"], [3, "currentFilter", "refreshFilters", "datasource", "map"]], template: function OgcFilterableFormComponent_Template(rf, ctx) { if (rf & 1) {
46
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: OgcFilterableFormComponent, selectors: [["igo-ogc-filterable-form"]], inputs: { datasource: "datasource", map: "map", refreshFilters: "refreshFilters" }, features: [i0.ɵɵProvidersFeature([
47
+ {
48
+ provide: MAT_SELECT_CONFIG,
49
+ useValue: { overlayPanelClass: 'igo-overlay-panel-width' }
50
+ },
51
+ {
52
+ provide: MAT_AUTOCOMPLETE_DEFAULT_OPTIONS,
53
+ useValue: { overlayPanelClass: 'igo-overlay-panel-width' }
54
+ }
55
+ ])], decls: 2, vars: 2, consts: [["igoListItem", "", 3, "refreshFilters", "datasource", "map", "currentFilter", 4, "ngIf"], [4, "ngIf"], ["igoListItem", "", 3, "refreshFilters", "datasource", "map", "currentFilter"], ["ngFor", "", 3, "ngForOf"], [3, "currentFilter", "refreshFilters", "datasource", "map"]], template: function OgcFilterableFormComponent_Template(rf, ctx) { if (rf & 1) {
45
56
  i0.ɵɵtemplate(0, OgcFilterableFormComponent_igo_ogc_filter_selection_0_Template, 1, 4, "igo-ogc-filter-selection", 0);
46
57
  i0.ɵɵtemplate(1, OgcFilterableFormComponent_1_Template, 1, 1, null, 1);
47
58
  } if (rf & 2) {
48
59
  i0.ɵɵproperty("ngIf", !ctx.advancedOgcFilters);
49
60
  i0.ɵɵadvance(1);
50
61
  i0.ɵɵproperty("ngIf", ctx.advancedOgcFilters && ctx.datasource.options.ogcFilters.editable);
51
- } }, encapsulation: 2 });
62
+ } }, styles: [".igo-overlay-panel-width{min-width:-moz-fit-content;min-width:fit-content}"] });
52
63
  }
53
64
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(OgcFilterableFormComponent, [{
54
65
  type: Component,
55
- args: [{ selector: 'igo-ogc-filterable-form', template: "<igo-ogc-filter-selection\r\n *ngIf=\"!advancedOgcFilters\"\r\n igoListItem\r\n [refreshFilters]=\"refreshFunc\"\r\n [datasource]=\"datasource\"\r\n [map]=\"map\"\r\n [currentFilter]=\"currentFilter\"\r\n>\r\n</igo-ogc-filter-selection>\r\n\r\n<ng-template\r\n *ngIf=\"advancedOgcFilters && datasource.options.ogcFilters.editable\"\r\n ngFor\r\n let-currentFilter\r\n [ngForOf]=\"datasource.options.ogcFilters.interfaceOgcFilters\"\r\n>\r\n <igo-ogc-filter-form\r\n [currentFilter]=\"currentFilter\"\r\n [refreshFilters]=\"refreshFunc\"\r\n [datasource]=\"datasource\"\r\n [map]=\"map\"\r\n >\r\n </igo-ogc-filter-form>\r\n</ng-template>\r\n" }]
66
+ args: [{ selector: 'igo-ogc-filterable-form', providers: [
67
+ {
68
+ provide: MAT_SELECT_CONFIG,
69
+ useValue: { overlayPanelClass: 'igo-overlay-panel-width' }
70
+ },
71
+ {
72
+ provide: MAT_AUTOCOMPLETE_DEFAULT_OPTIONS,
73
+ useValue: { overlayPanelClass: 'igo-overlay-panel-width' }
74
+ }
75
+ ], template: "<igo-ogc-filter-selection\n *ngIf=\"!advancedOgcFilters\"\n igoListItem\n [refreshFilters]=\"refreshFunc\"\n [datasource]=\"datasource\"\n [map]=\"map\"\n [currentFilter]=\"currentFilter\"\n>\n</igo-ogc-filter-selection>\n\n<ng-template\n *ngIf=\"advancedOgcFilters && datasource.options.ogcFilters.editable\"\n ngFor\n let-currentFilter\n [ngForOf]=\"datasource.options.ogcFilters.interfaceOgcFilters\"\n>\n <igo-ogc-filter-form\n [currentFilter]=\"currentFilter\"\n [refreshFilters]=\"refreshFunc\"\n [datasource]=\"datasource\"\n [map]=\"map\"\n >\n </igo-ogc-filter-form>\n</ng-template>\n", styles: ["::ng-deep .igo-overlay-panel-width{min-width:-moz-fit-content;min-width:fit-content}\n"] }]
56
76
  }], function () { return []; }, { datasource: [{
57
77
  type: Input
58
78
  }], map: [{
@@ -60,4 +80,4 @@ export class OgcFilterableFormComponent {
60
80
  }], refreshFilters: [{
61
81
  type: Input
62
82
  }] }); })();
63
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2djLWZpbHRlcmFibGUtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9maWx0ZXIvb2djLWZpbHRlcmFibGUtZm9ybS9vZ2MtZmlsdGVyYWJsZS1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ZpbHRlci9vZ2MtZmlsdGVyYWJsZS1mb3JtL29nYy1maWx0ZXJhYmxlLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFakQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7SUNGMUMsOENBUTJCOzs7SUFMekIsbURBQThCLGlDQUFBLG1CQUFBLHVDQUFBOzs7SUFhOUIseUNBTXNCOzs7O0lBTHBCLGdEQUErQixzQ0FBQSxpQ0FBQSxtQkFBQTs7O0lBUG5DLDZGQWFjOzs7SUFUWixrRkFBNkQ7O0FETi9ELE1BQU0sT0FBTywwQkFBMEI7SUFDNUIsVUFBVSxDQUEwQjtJQUVwQyxHQUFHLENBQVM7SUFFWixjQUFjLENBQWE7SUFFcEMsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFJLGtCQUFrQjtRQUNwQixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRTtZQUN0QyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQztTQUM5RDtRQUNELE9BQU87SUFDVCxDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsbUJBQW1CO1lBQzNELENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO1lBQzNELENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDaEIsQ0FBQztJQUVNLEtBQUssR0FBRyxTQUFTLENBQUM7SUFFekIsZ0JBQWUsQ0FBQztvRkExQkwsMEJBQTBCOzZEQUExQiwwQkFBMEI7WUNSdkMscUhBUTJCO1lBRTNCLHNFQWFjOztZQXRCWCw4Q0FBeUI7WUFVekIsZUFBa0U7WUFBbEUsMkZBQWtFOzs7dUZESHhELDBCQUEwQjtjQUp0QyxTQUFTOzJCQUNFLHlCQUF5QjtzQ0FJMUIsVUFBVTtrQkFBbEIsS0FBSztZQUVHLEdBQUc7a0JBQVgsS0FBSztZQUVHLGNBQWM7a0JBQXRCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE9nY0ZpbHRlcmFibGVEYXRhU291cmNlIH0gZnJvbSAnLi4vc2hhcmVkL29nYy1maWx0ZXIuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgSWdvTWFwIH0gZnJvbSAnLi4vLi4vbWFwL3NoYXJlZCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2lnby1vZ2MtZmlsdGVyYWJsZS1mb3JtJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vb2djLWZpbHRlcmFibGUtZm9ybS5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIE9nY0ZpbHRlcmFibGVGb3JtQ29tcG9uZW50IHtcclxuICBASW5wdXQoKSBkYXRhc291cmNlOiBPZ2NGaWx0ZXJhYmxlRGF0YVNvdXJjZTtcclxuXHJcbiAgQElucHV0KCkgbWFwOiBJZ29NYXA7XHJcblxyXG4gIEBJbnB1dCgpIHJlZnJlc2hGaWx0ZXJzOiAoKSA9PiB2b2lkO1xyXG5cclxuICBnZXQgcmVmcmVzaEZ1bmMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5yZWZyZXNoRmlsdGVycztcclxuICB9XHJcblxyXG4gIGdldCBhZHZhbmNlZE9nY0ZpbHRlcnMoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycykge1xyXG4gICAgICByZXR1cm4gdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5hZHZhbmNlZE9nY0ZpbHRlcnM7XHJcbiAgICB9XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBnZXQgY3VycmVudEZpbHRlcigpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuaW50ZXJmYWNlT2djRmlsdGVyc1xyXG4gICAgICA/IHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuaW50ZXJmYWNlT2djRmlsdGVyc1swXVxyXG4gICAgICA6IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb2xvciA9ICdwcmltYXJ5JztcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7fVxyXG59XHJcbiIsIjxpZ28tb2djLWZpbHRlci1zZWxlY3Rpb25cclxuICAqbmdJZj1cIiFhZHZhbmNlZE9nY0ZpbHRlcnNcIlxyXG4gIGlnb0xpc3RJdGVtXHJcbiAgW3JlZnJlc2hGaWx0ZXJzXT1cInJlZnJlc2hGdW5jXCJcclxuICBbZGF0YXNvdXJjZV09XCJkYXRhc291cmNlXCJcclxuICBbbWFwXT1cIm1hcFwiXHJcbiAgW2N1cnJlbnRGaWx0ZXJdPVwiY3VycmVudEZpbHRlclwiXHJcbj5cclxuPC9pZ28tb2djLWZpbHRlci1zZWxlY3Rpb24+XHJcblxyXG48bmctdGVtcGxhdGVcclxuICAqbmdJZj1cImFkdmFuY2VkT2djRmlsdGVycyAmJiBkYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5lZGl0YWJsZVwiXHJcbiAgbmdGb3JcclxuICBsZXQtY3VycmVudEZpbHRlclxyXG4gIFtuZ0Zvck9mXT1cImRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLmludGVyZmFjZU9nY0ZpbHRlcnNcIlxyXG4+XHJcbiAgPGlnby1vZ2MtZmlsdGVyLWZvcm1cclxuICAgIFtjdXJyZW50RmlsdGVyXT1cImN1cnJlbnRGaWx0ZXJcIlxyXG4gICAgW3JlZnJlc2hGaWx0ZXJzXT1cInJlZnJlc2hGdW5jXCJcclxuICAgIFtkYXRhc291cmNlXT1cImRhdGFzb3VyY2VcIlxyXG4gICAgW21hcF09XCJtYXBcIlxyXG4gID5cclxuICA8L2lnby1vZ2MtZmlsdGVyLWZvcm0+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2djLWZpbHRlcmFibGUtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9maWx0ZXIvb2djLWZpbHRlcmFibGUtZm9ybS9vZ2MtZmlsdGVyYWJsZS1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ZpbHRlci9vZ2MtZmlsdGVyYWJsZS1mb3JtL29nYy1maWx0ZXJhYmxlLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFN0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7SUNKMUMsOENBUTJCOzs7SUFMekIsbURBQThCLGlDQUFBLG1CQUFBLHVDQUFBOzs7SUFhOUIseUNBTXNCOzs7O0lBTHBCLGdEQUErQixzQ0FBQSxpQ0FBQSxtQkFBQTs7O0lBUG5DLDZGQWFjOzs7SUFUWixrRkFBNkQ7O0FEUS9ELE1BQU0sT0FBTywwQkFBMEI7SUFDNUIsVUFBVSxDQUEwQjtJQUVwQyxHQUFHLENBQVM7SUFFWixjQUFjLENBQWE7SUFFcEMsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFJLGtCQUFrQjtRQUNwQixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRTtZQUN0QyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQztTQUM5RDtRQUNELE9BQU87SUFDVCxDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsbUJBQW1CO1lBQzNELENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO1lBQzNELENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDaEIsQ0FBQztJQUVNLEtBQUssR0FBRyxTQUFTLENBQUM7SUFFekIsZ0JBQWUsQ0FBQztvRkExQkwsMEJBQTBCOzZEQUExQiwwQkFBMEIsaUtBWDFCO2dCQUNUO29CQUNFLE9BQU8sRUFBRSxpQkFBaUI7b0JBQzFCLFFBQVEsRUFBRSxFQUFFLGlCQUFpQixFQUFFLHlCQUF5QixFQUFFO2lCQUMzRDtnQkFDRDtvQkFDRSxPQUFPLEVBQUUsZ0NBQWdDO29CQUN6QyxRQUFRLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSx5QkFBeUIsRUFBRTtpQkFDM0Q7YUFDRjtZQ3BCSCxxSEFRMkI7WUFFM0Isc0VBYWM7O1lBdEJYLDhDQUF5QjtZQVV6QixlQUFrRTtZQUFsRSwyRkFBa0U7Ozt1RkRXeEQsMEJBQTBCO2NBZnRDLFNBQVM7MkJBQ0UseUJBQXlCLGFBR3hCO29CQUNUO3dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7d0JBQzFCLFFBQVEsRUFBRSxFQUFFLGlCQUFpQixFQUFFLHlCQUF5QixFQUFFO3FCQUMzRDtvQkFDRDt3QkFDRSxPQUFPLEVBQUUsZ0NBQWdDO3dCQUN6QyxRQUFRLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSx5QkFBeUIsRUFBRTtxQkFDM0Q7aUJBQ0Y7c0NBR1EsVUFBVTtrQkFBbEIsS0FBSztZQUVHLEdBQUc7a0JBQVgsS0FBSztZQUVHLGNBQWM7a0JBQXRCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1BVF9BVVRPQ09NUExFVEVfREVGQVVMVF9PUFRJT05TIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlJztcclxuaW1wb3J0IHsgTUFUX1NFTEVDVF9DT05GSUcgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xyXG5cclxuaW1wb3J0IHsgSWdvTWFwIH0gZnJvbSAnLi4vLi4vbWFwL3NoYXJlZCc7XHJcbmltcG9ydCB7IE9nY0ZpbHRlcmFibGVEYXRhU291cmNlIH0gZnJvbSAnLi4vc2hhcmVkL29nYy1maWx0ZXIuaW50ZXJmYWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaWdvLW9nYy1maWx0ZXJhYmxlLWZvcm0nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9vZ2MtZmlsdGVyYWJsZS1mb3JtLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZXM6IFsnOjpuZy1kZWVwLmlnby1vdmVybGF5LXBhbmVsLXdpZHRoIHsgbWluLXdpZHRoOiBmaXQtY29udGVudDt9J10sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE1BVF9TRUxFQ1RfQ09ORklHLFxyXG4gICAgICB1c2VWYWx1ZTogeyBvdmVybGF5UGFuZWxDbGFzczogJ2lnby1vdmVybGF5LXBhbmVsLXdpZHRoJyB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBNQVRfQVVUT0NPTVBMRVRFX0RFRkFVTFRfT1BUSU9OUyxcclxuICAgICAgdXNlVmFsdWU6IHsgb3ZlcmxheVBhbmVsQ2xhc3M6ICdpZ28tb3ZlcmxheS1wYW5lbC13aWR0aCcgfVxyXG4gICAgfVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIE9nY0ZpbHRlcmFibGVGb3JtQ29tcG9uZW50IHtcclxuICBASW5wdXQoKSBkYXRhc291cmNlOiBPZ2NGaWx0ZXJhYmxlRGF0YVNvdXJjZTtcclxuXHJcbiAgQElucHV0KCkgbWFwOiBJZ29NYXA7XHJcblxyXG4gIEBJbnB1dCgpIHJlZnJlc2hGaWx0ZXJzOiAoKSA9PiB2b2lkO1xyXG5cclxuICBnZXQgcmVmcmVzaEZ1bmMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5yZWZyZXNoRmlsdGVycztcclxuICB9XHJcblxyXG4gIGdldCBhZHZhbmNlZE9nY0ZpbHRlcnMoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycykge1xyXG4gICAgICByZXR1cm4gdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5hZHZhbmNlZE9nY0ZpbHRlcnM7XHJcbiAgICB9XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBnZXQgY3VycmVudEZpbHRlcigpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuaW50ZXJmYWNlT2djRmlsdGVyc1xyXG4gICAgICA/IHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuaW50ZXJmYWNlT2djRmlsdGVyc1swXVxyXG4gICAgICA6IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb2xvciA9ICdwcmltYXJ5JztcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7fVxyXG59XHJcbiIsIjxpZ28tb2djLWZpbHRlci1zZWxlY3Rpb25cbiAgKm5nSWY9XCIhYWR2YW5jZWRPZ2NGaWx0ZXJzXCJcbiAgaWdvTGlzdEl0ZW1cbiAgW3JlZnJlc2hGaWx0ZXJzXT1cInJlZnJlc2hGdW5jXCJcbiAgW2RhdGFzb3VyY2VdPVwiZGF0YXNvdXJjZVwiXG4gIFttYXBdPVwibWFwXCJcbiAgW2N1cnJlbnRGaWx0ZXJdPVwiY3VycmVudEZpbHRlclwiXG4+XG48L2lnby1vZ2MtZmlsdGVyLXNlbGVjdGlvbj5cblxuPG5nLXRlbXBsYXRlXG4gICpuZ0lmPVwiYWR2YW5jZWRPZ2NGaWx0ZXJzICYmIGRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLmVkaXRhYmxlXCJcbiAgbmdGb3JcbiAgbGV0LWN1cnJlbnRGaWx0ZXJcbiAgW25nRm9yT2ZdPVwiZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuaW50ZXJmYWNlT2djRmlsdGVyc1wiXG4+XG4gIDxpZ28tb2djLWZpbHRlci1mb3JtXG4gICAgW2N1cnJlbnRGaWx0ZXJdPVwiY3VycmVudEZpbHRlclwiXG4gICAgW3JlZnJlc2hGaWx0ZXJzXT1cInJlZnJlc2hGdW5jXCJcbiAgICBbZGF0YXNvdXJjZV09XCJkYXRhc291cmNlXCJcbiAgICBbbWFwXT1cIm1hcFwiXG4gID5cbiAgPC9pZ28tb2djLWZpbHRlci1mb3JtPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==