@igo2/geo 1.11.0 → 1.12.1

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 (485) hide show
  1. package/assets/icons/cross_black_18px.svg +88 -88
  2. package/assets/icons/place_blue_36px.svg +55 -55
  3. package/assets/icons/place_green_36px.svg +55 -55
  4. package/assets/icons/place_red_36px.svg +55 -55
  5. package/assets/icons/place_yellow_36px.svg +55 -55
  6. package/bundles/igo2-geo.umd.js +3075 -1245
  7. package/bundles/igo2-geo.umd.js.map +1 -1
  8. package/esm2015/lib/catalog/catalog-browser/catalog-browser-group.component.js +1 -1
  9. package/esm2015/lib/catalog/catalog-browser/catalog-browser-layer.component.js +1 -1
  10. package/esm2015/lib/catalog/catalog-browser/catalog-browser.component.js +1 -1
  11. package/esm2015/lib/catalog/catalog-browser/catalog-browser.module.js +1 -1
  12. package/esm2015/lib/catalog/catalog-library/add-catalog-dialog.component.js +1 -1
  13. package/esm2015/lib/catalog/catalog-library/catalog-library-item.component.js +1 -1
  14. package/esm2015/lib/catalog/catalog-library/catalog-library.component.js +1 -1
  15. package/esm2015/lib/catalog/catalog-library/catalog-library.module.js +1 -1
  16. package/esm2015/lib/catalog/catalog.module.js +1 -1
  17. package/esm2015/lib/catalog/index.js +1 -1
  18. package/esm2015/lib/catalog/shared/catalog.abstract.js +1 -1
  19. package/esm2015/lib/catalog/shared/catalog.enum.js +1 -1
  20. package/esm2015/lib/catalog/shared/catalog.interface.js +1 -1
  21. package/esm2015/lib/catalog/shared/catalog.service.js +113 -42
  22. package/esm2015/lib/catalog/shared/index.js +1 -1
  23. package/esm2015/lib/datasource/datasource.module.js +1 -1
  24. package/esm2015/lib/datasource/index.js +1 -1
  25. package/esm2015/lib/datasource/shared/capabilities.service.js +1 -1
  26. package/esm2015/lib/datasource/shared/datasource.service.js +1 -1
  27. package/esm2015/lib/datasource/shared/datasources/any-datasource.interface.js +1 -1
  28. package/esm2015/lib/datasource/shared/datasources/any-datasource.js +1 -1
  29. package/esm2015/lib/datasource/shared/datasources/arcgisrest-datasource.interface.js +1 -1
  30. package/esm2015/lib/datasource/shared/datasources/arcgisrest-datasource.js +1 -1
  31. package/esm2015/lib/datasource/shared/datasources/carto-datasource.interface.js +1 -1
  32. package/esm2015/lib/datasource/shared/datasources/carto-datasource.js +1 -1
  33. package/esm2015/lib/datasource/shared/datasources/cluster-datasource.interface.js +1 -1
  34. package/esm2015/lib/datasource/shared/datasources/cluster-datasource.js +1 -1
  35. package/esm2015/lib/datasource/shared/datasources/data.service.js +1 -1
  36. package/esm2015/lib/datasource/shared/datasources/datasource.interface.js +1 -1
  37. package/esm2015/lib/datasource/shared/datasources/datasource.js +1 -1
  38. package/esm2015/lib/datasource/shared/datasources/feature-datasource.interface.js +1 -1
  39. package/esm2015/lib/datasource/shared/datasources/feature-datasource.js +1 -1
  40. package/esm2015/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.js +1 -1
  41. package/esm2015/lib/datasource/shared/datasources/imagearcgisrest-datasource.js +1 -1
  42. package/esm2015/lib/datasource/shared/datasources/index.js +1 -1
  43. package/esm2015/lib/datasource/shared/datasources/mvt-datasource.interface.js +1 -1
  44. package/esm2015/lib/datasource/shared/datasources/mvt-datasource.js +1 -1
  45. package/esm2015/lib/datasource/shared/datasources/osm-datasource.interface.js +1 -1
  46. package/esm2015/lib/datasource/shared/datasources/osm-datasource.js +1 -1
  47. package/esm2015/lib/datasource/shared/datasources/tilearcgisrest-datasource.interface.js +1 -1
  48. package/esm2015/lib/datasource/shared/datasources/tilearcgisrest-datasource.js +1 -1
  49. package/esm2015/lib/datasource/shared/datasources/tiledebug-datasource.interface.js +1 -1
  50. package/esm2015/lib/datasource/shared/datasources/tiledebug-datasource.js +1 -1
  51. package/esm2015/lib/datasource/shared/datasources/websocket-datasource.interface.js +1 -1
  52. package/esm2015/lib/datasource/shared/datasources/websocket-datasource.js +1 -1
  53. package/esm2015/lib/datasource/shared/datasources/wfs-datasource.interface.js +1 -1
  54. package/esm2015/lib/datasource/shared/datasources/wfs-datasource.js +4 -1
  55. package/esm2015/lib/datasource/shared/datasources/wfs.service.js +1 -1
  56. package/esm2015/lib/datasource/shared/datasources/wms-datasource.interface.js +1 -1
  57. package/esm2015/lib/datasource/shared/datasources/wms-datasource.js +5 -2
  58. package/esm2015/lib/datasource/shared/datasources/wms-wfs.utils.js +1 -1
  59. package/esm2015/lib/datasource/shared/datasources/wmts-datasource.interface.js +1 -1
  60. package/esm2015/lib/datasource/shared/datasources/wmts-datasource.js +1 -1
  61. package/esm2015/lib/datasource/shared/datasources/xyz-datasource.interface.js +1 -1
  62. package/esm2015/lib/datasource/shared/datasources/xyz-datasource.js +1 -1
  63. package/esm2015/lib/datasource/shared/index.js +1 -1
  64. package/esm2015/lib/datasource/shared/options/index.js +1 -1
  65. package/esm2015/lib/datasource/shared/options/options-api.interface.js +1 -1
  66. package/esm2015/lib/datasource/shared/options/options-api.providers.js +1 -1
  67. package/esm2015/lib/datasource/shared/options/options-api.service.js +1 -1
  68. package/esm2015/lib/datasource/shared/options/options.service.js +1 -1
  69. package/esm2015/lib/datasource/utils/esri-style-generator.js +1 -1
  70. package/esm2015/lib/datasource/utils/index.js +1 -1
  71. package/esm2015/lib/datasource/utils/tilegrid.js +1 -1
  72. package/esm2015/lib/directions/directions-buttons/directions-buttons.component.js +1 -1
  73. package/esm2015/lib/directions/directions-buttons/index.js +1 -1
  74. package/esm2015/lib/directions/directions-inputs/directions-inputs.component.js +1 -1
  75. package/esm2015/lib/directions/directions-inputs/index.js +1 -1
  76. package/esm2015/lib/directions/directions-results/directions-results.component.js +1 -1
  77. package/esm2015/lib/directions/directions-results/index.js +1 -1
  78. package/esm2015/lib/directions/directions-sources/directions-source.interface.js +1 -1
  79. package/esm2015/lib/directions/directions-sources/directions-source.js +1 -1
  80. package/esm2015/lib/directions/directions-sources/directions-source.provider.js +1 -1
  81. package/esm2015/lib/directions/directions-sources/index.js +1 -1
  82. package/esm2015/lib/directions/directions-sources/osrm-directions-source.js +1 -1
  83. package/esm2015/lib/directions/directions.component.js +1 -1
  84. package/esm2015/lib/directions/directions.module.js +1 -1
  85. package/esm2015/lib/directions/index.js +1 -1
  86. package/esm2015/lib/directions/shared/directions-source.service.js +1 -1
  87. package/esm2015/lib/directions/shared/directions.enum.js +1 -1
  88. package/esm2015/lib/directions/shared/directions.interface.js +1 -1
  89. package/esm2015/lib/directions/shared/directions.service.js +1 -1
  90. package/esm2015/lib/directions/shared/directions.utils.js +1 -1
  91. package/esm2015/lib/directions/shared/index.js +1 -1
  92. package/esm2015/lib/directions/shared/store.js +1 -1
  93. package/esm2015/lib/download/download-button/download-button.component.js +1 -1
  94. package/esm2015/lib/download/download-button/index.js +1 -1
  95. package/esm2015/lib/download/download.module.js +1 -1
  96. package/esm2015/lib/download/index.js +1 -1
  97. package/esm2015/lib/download/shared/download.interface.js +1 -1
  98. package/esm2015/lib/download/shared/download.service.js +1 -1
  99. package/esm2015/lib/download/shared/index.js +1 -1
  100. package/esm2015/lib/draw/draw/draw-popup.component.js +21 -15
  101. package/esm2015/lib/draw/draw/draw-shorcuts.component.js +1 -1
  102. package/esm2015/lib/draw/draw/draw.component.js +185 -77
  103. package/esm2015/lib/draw/draw/draw.module.js +1 -1
  104. package/esm2015/lib/draw/drawingTool.module.js +1 -1
  105. package/esm2015/lib/draw/index.js +1 -1
  106. package/esm2015/lib/draw/shared/draw-icon.service.js +1 -1
  107. package/esm2015/lib/draw/shared/draw-style.service.js +24 -5
  108. package/esm2015/lib/draw/shared/draw.enum.js +17 -1
  109. package/esm2015/lib/draw/shared/draw.interface.js +1 -1
  110. package/esm2015/lib/draw/shared/draw.utils.js +1 -1
  111. package/esm2015/lib/draw/shared/index.js +1 -1
  112. package/esm2015/lib/feature/feature-details/feature-details.component.js +119 -43
  113. package/esm2015/lib/feature/feature-details/feature-details.directive.js +2 -57
  114. package/esm2015/lib/feature/feature-details/feature-details.module.js +1 -1
  115. package/esm2015/lib/feature/feature-form/feature-form.component.js +1 -1
  116. package/esm2015/lib/feature/feature-form/feature-form.module.js +1 -1
  117. package/esm2015/lib/feature/feature.module.js +1 -1
  118. package/esm2015/lib/feature/index.js +1 -1
  119. package/esm2015/lib/feature/shared/feature.enums.js +1 -1
  120. package/esm2015/lib/feature/shared/feature.interfaces.js +1 -1
  121. package/esm2015/lib/feature/shared/feature.utils.js +1 -1
  122. package/esm2015/lib/feature/shared/index.js +1 -1
  123. package/esm2015/lib/feature/shared/store.js +1 -1
  124. package/esm2015/lib/feature/shared/strategies/in-map-extent.js +1 -1
  125. package/esm2015/lib/feature/shared/strategies/in-map-resolution.js +1 -1
  126. package/esm2015/lib/feature/shared/strategies/index.js +1 -1
  127. package/esm2015/lib/feature/shared/strategies/loading-layer.js +1 -1
  128. package/esm2015/lib/feature/shared/strategies/loading.js +1 -1
  129. package/esm2015/lib/feature/shared/strategies/selection.js +1 -1
  130. package/esm2015/lib/feature/shared/strategies.utils.js +1 -1
  131. package/esm2015/lib/filter/filter.module.js +6 -3
  132. package/esm2015/lib/filter/index.js +1 -1
  133. package/esm2015/lib/filter/ogc-filter-button/index.js +1 -1
  134. package/esm2015/lib/filter/ogc-filter-button/ogc-filter-button.component.js +32 -7
  135. package/esm2015/lib/filter/ogc-filter-form/index.js +1 -1
  136. package/esm2015/lib/filter/ogc-filter-form/ogc-filter-form.component.js +1 -1
  137. package/esm2015/lib/filter/ogc-filter-selection/index.js +1 -1
  138. package/esm2015/lib/filter/ogc-filter-selection/ogc-filter-selection.component.js +652 -290
  139. package/esm2015/lib/filter/ogc-filter-time/index.js +1 -1
  140. package/esm2015/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.js +1 -1
  141. package/esm2015/lib/filter/ogc-filter-time/ogc-filter-time.component.js +1 -1
  142. package/esm2015/lib/filter/ogc-filterable-form/index.js +1 -1
  143. package/esm2015/lib/filter/ogc-filterable-form/ogc-filterable-form.component.js +1 -1
  144. package/esm2015/lib/filter/ogc-filterable-item/index.js +1 -1
  145. package/esm2015/lib/filter/ogc-filterable-item/ogc-filterable-item.component.js +3 -2
  146. package/esm2015/lib/filter/ogc-filterable-list/index.js +1 -1
  147. package/esm2015/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.js +1 -1
  148. package/esm2015/lib/filter/ogc-filterable-list/ogc-filterable-list.component.js +1 -1
  149. package/esm2015/lib/filter/shared/filterable-datasource.pipe.js +3 -2
  150. package/esm2015/lib/filter/shared/index.js +1 -1
  151. package/esm2015/lib/filter/shared/ogc-filter-time.service.js +1 -1
  152. package/esm2015/lib/filter/shared/ogc-filter.enum.js +1 -1
  153. package/esm2015/lib/filter/shared/ogc-filter.interface.js +1 -1
  154. package/esm2015/lib/filter/shared/ogc-filter.js +17 -6
  155. package/esm2015/lib/filter/shared/ogc-filter.service.js +1 -1
  156. package/esm2015/lib/filter/shared/spatial-filter.enum.js +1 -1
  157. package/esm2015/lib/filter/shared/spatial-filter.interface.js +1 -1
  158. package/esm2015/lib/filter/shared/spatial-filter.service.js +1 -1
  159. package/esm2015/lib/filter/shared/time-filter.enum.js +1 -1
  160. package/esm2015/lib/filter/shared/time-filter.interface.js +1 -1
  161. package/esm2015/lib/filter/shared/time-filter.service.js +1 -1
  162. package/esm2015/lib/filter/spatial-filter/spatial-filter-item/index.js +1 -1
  163. package/esm2015/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.js +1 -1
  164. package/esm2015/lib/filter/spatial-filter/spatial-filter-list/index.js +1 -1
  165. package/esm2015/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.js +1 -1
  166. package/esm2015/lib/filter/spatial-filter/spatial-filter-type/index.js +1 -1
  167. package/esm2015/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.js +1 -1
  168. package/esm2015/lib/filter/time-filter-button/index.js +1 -1
  169. package/esm2015/lib/filter/time-filter-button/time-filter-button.component.js +1 -1
  170. package/esm2015/lib/filter/time-filter-form/index.js +1 -1
  171. package/esm2015/lib/filter/time-filter-form/time-filter-form.component.js +1 -1
  172. package/esm2015/lib/filter/time-filter-item/index.js +1 -1
  173. package/esm2015/lib/filter/time-filter-item/time-filter-item.component.js +1 -1
  174. package/esm2015/lib/filter/time-filter-list/index.js +1 -1
  175. package/esm2015/lib/filter/time-filter-list/time-filter-list-binding.directive.js +1 -1
  176. package/esm2015/lib/filter/time-filter-list/time-filter-list.component.js +1 -1
  177. package/esm2015/lib/geo.module.js +1 -1
  178. package/esm2015/lib/geometry/geometry-form-field/geometry-form-field-input.component.js +1 -1
  179. package/esm2015/lib/geometry/geometry-form-field/geometry-form-field.component.js +1 -1
  180. package/esm2015/lib/geometry/geometry-form-field/geometry-form-field.module.js +1 -1
  181. package/esm2015/lib/geometry/geometry.module.js +1 -1
  182. package/esm2015/lib/geometry/index.js +1 -1
  183. package/esm2015/lib/geometry/shared/controls/draw.js +1 -1
  184. package/esm2015/lib/geometry/shared/controls/index.js +1 -1
  185. package/esm2015/lib/geometry/shared/controls/modify.js +1 -1
  186. package/esm2015/lib/geometry/shared/controls/slice.js +1 -1
  187. package/esm2015/lib/geometry/shared/geometry.errors.js +1 -1
  188. package/esm2015/lib/geometry/shared/geometry.interfaces.js +1 -1
  189. package/esm2015/lib/geometry/shared/geometry.utils.js +1 -1
  190. package/esm2015/lib/geometry/shared/index.js +1 -1
  191. package/esm2015/lib/import-export/export-button/export-button.component.js +1 -1
  192. package/esm2015/lib/import-export/export-button/index.js +1 -1
  193. package/esm2015/lib/import-export/import-export/import-export.component.js +1 -1
  194. package/esm2015/lib/import-export/import-export/index.js +1 -1
  195. package/esm2015/lib/import-export/import-export.module.js +1 -1
  196. package/esm2015/lib/import-export/index.js +1 -1
  197. package/esm2015/lib/import-export/shared/drop-geo-file.directive.js +1 -1
  198. package/esm2015/lib/import-export/shared/export.errors.js +1 -1
  199. package/esm2015/lib/import-export/shared/export.interface.js +1 -1
  200. package/esm2015/lib/import-export/shared/export.service.js +10 -2
  201. package/esm2015/lib/import-export/shared/export.type.js +1 -1
  202. package/esm2015/lib/import-export/shared/export.utils.js +1 -1
  203. package/esm2015/lib/import-export/shared/import.errors.js +1 -1
  204. package/esm2015/lib/import-export/shared/import.interface.js +1 -1
  205. package/esm2015/lib/import-export/shared/import.service.js +1 -1
  206. package/esm2015/lib/import-export/shared/import.utils.js +65 -38
  207. package/esm2015/lib/import-export/shared/index.js +1 -1
  208. package/esm2015/lib/import-export/style-list/index.js +1 -1
  209. package/esm2015/lib/import-export/style-list/style-list.interface.js +1 -1
  210. package/esm2015/lib/import-export/style-list/style-list.module.js +1 -1
  211. package/esm2015/lib/import-export/style-list/style-list.provider.js +1 -1
  212. package/esm2015/lib/import-export/style-list/style-list.service.js +1 -1
  213. package/esm2015/lib/layer/index.js +1 -1
  214. package/esm2015/lib/layer/layer-item/index.js +1 -1
  215. package/esm2015/lib/layer/layer-item/layer-item.component.js +15 -8
  216. package/esm2015/lib/layer/layer-legend/index.js +1 -1
  217. package/esm2015/lib/layer/layer-legend/layer-legend.component.js +6 -5
  218. package/esm2015/lib/layer/layer-legend-item/index.js +1 -1
  219. package/esm2015/lib/layer/layer-legend-item/layer-legend-item.component.js +1 -1
  220. package/esm2015/lib/layer/layer-legend-list/index.js +1 -1
  221. package/esm2015/lib/layer/layer-legend-list/layer-legend-list-binding.directive.js +1 -1
  222. package/esm2015/lib/layer/layer-legend-list/layer-legend-list.component.js +1 -1
  223. package/esm2015/lib/layer/layer-list/index.js +1 -1
  224. package/esm2015/lib/layer/layer-list/layer-list-binding.directive.js +1 -1
  225. package/esm2015/lib/layer/layer-list/layer-list.component.js +2 -2
  226. package/esm2015/lib/layer/layer-list/layer-list.enum.js +1 -1
  227. package/esm2015/lib/layer/layer-list-tool/index.js +1 -1
  228. package/esm2015/lib/layer/layer-list-tool/layer-list-tool.component.js +1 -1
  229. package/esm2015/lib/layer/layer-list-tool/layer-list-tool.enum.js +1 -1
  230. package/esm2015/lib/layer/layer-list-tool/layer-list-tool.interface.js +1 -1
  231. package/esm2015/lib/layer/layer-list-tool/layer-list-tool.service.js +1 -1
  232. package/esm2015/lib/layer/layer.module.js +1 -1
  233. package/esm2015/lib/layer/shared/clusterParam.js +1 -1
  234. package/esm2015/lib/layer/shared/index.js +1 -1
  235. package/esm2015/lib/layer/shared/layer.enums.js +1 -1
  236. package/esm2015/lib/layer/shared/layer.service.js +44 -20
  237. package/esm2015/lib/layer/shared/layers/any-layer.interface.js +1 -1
  238. package/esm2015/lib/layer/shared/layers/any-layer.js +1 -1
  239. package/esm2015/lib/layer/shared/layers/image-layer.interface.js +1 -1
  240. package/esm2015/lib/layer/shared/layers/image-layer.js +1 -1
  241. package/esm2015/lib/layer/shared/layers/index.js +1 -1
  242. package/esm2015/lib/layer/shared/layers/layer.interface.js +1 -1
  243. package/esm2015/lib/layer/shared/layers/layer.js +1 -1
  244. package/esm2015/lib/layer/shared/layers/tile-layer.interface.js +1 -1
  245. package/esm2015/lib/layer/shared/layers/tile-layer.js +1 -1
  246. package/esm2015/lib/layer/shared/layers/vector-layer.interface.js +1 -1
  247. package/esm2015/lib/layer/shared/layers/vector-layer.js +94 -43
  248. package/esm2015/lib/layer/shared/layers/vectortile-layer.interface.js +1 -1
  249. package/esm2015/lib/layer/shared/layers/vectortile-layer.js +1 -1
  250. package/esm2015/lib/layer/shared/style.service.js +80 -11
  251. package/esm2015/lib/layer/shared/vector-style.interface.js +1 -1
  252. package/esm2015/lib/layer/track-feature-button/index.js +1 -1
  253. package/esm2015/lib/layer/track-feature-button/track-feature-button.component.js +1 -1
  254. package/esm2015/lib/layer/utils/image-watcher.js +1 -1
  255. package/esm2015/lib/layer/utils/index.js +1 -1
  256. package/esm2015/lib/layer/utils/layer.utils.js +1 -1
  257. package/esm2015/lib/layer/utils/layerSync-watcher.js +4 -8
  258. package/esm2015/lib/layer/utils/outputLegend.js +5 -3
  259. package/esm2015/lib/layer/utils/tile-watcher.js +1 -1
  260. package/esm2015/lib/layer/utils/vector-watcher.js +1 -1
  261. package/esm2015/lib/map/baselayers-switcher/baselayers-switcher.animation.js +1 -1
  262. package/esm2015/lib/map/baselayers-switcher/baselayers-switcher.component.js +1 -1
  263. package/esm2015/lib/map/baselayers-switcher/index.js +1 -1
  264. package/esm2015/lib/map/baselayers-switcher/mini-basemap.component.js +1 -1
  265. package/esm2015/lib/map/geolocate-button/geolocate-button.component.js +52 -17
  266. package/esm2015/lib/map/geolocate-button/index.js +1 -1
  267. package/esm2015/lib/map/index.js +2 -1
  268. package/esm2015/lib/map/info-section/index.js +1 -1
  269. package/esm2015/lib/map/info-section/info-section.component.js +1 -1
  270. package/esm2015/lib/map/map-browser/index.js +1 -1
  271. package/esm2015/lib/map/map-browser/map-browser.component.js +2 -2
  272. package/esm2015/lib/map/map-center/index.js +1 -1
  273. package/esm2015/lib/map/map-center/map-center.component.js +1 -1
  274. package/esm2015/lib/map/map.module.js +6 -1
  275. package/esm2015/lib/map/menu-button/index.js +1 -1
  276. package/esm2015/lib/map/menu-button/menu-button.component.js +1 -1
  277. package/esm2015/lib/map/offline-button/index.js +1 -1
  278. package/esm2015/lib/map/offline-button/offline-button.component.js +1 -1
  279. package/esm2015/lib/map/rotation-button/index.js +1 -1
  280. package/esm2015/lib/map/rotation-button/rotation-button.component.js +1 -1
  281. package/esm2015/lib/map/shared/controllers/controller.js +1 -1
  282. package/esm2015/lib/map/shared/controllers/geolocation.js +310 -0
  283. package/esm2015/lib/map/shared/controllers/index.js +2 -1
  284. package/esm2015/lib/map/shared/controllers/view.js +17 -1
  285. package/esm2015/lib/map/shared/hover-feature.directive.js +8 -7
  286. package/esm2015/lib/map/shared/index.js +1 -1
  287. package/esm2015/lib/map/shared/map-pointer-position.directive.js +1 -1
  288. package/esm2015/lib/map/shared/map.enums.js +1 -1
  289. package/esm2015/lib/map/shared/map.interface.js +1 -1
  290. package/esm2015/lib/map/shared/map.js +15 -135
  291. package/esm2015/lib/map/shared/map.service.js +1 -1
  292. package/esm2015/lib/map/shared/map.utils.js +1 -1
  293. package/esm2015/lib/map/shared/mapOffline.directive.js +1 -1
  294. package/esm2015/lib/map/shared/projection.interfaces.js +1 -1
  295. package/esm2015/lib/map/shared/projection.service.js +1 -1
  296. package/esm2015/lib/map/shared/projection.utils.js +1 -1
  297. package/esm2015/lib/map/swipe-control/index.js +1 -1
  298. package/esm2015/lib/map/swipe-control/swipe-control.component.js +1 -1
  299. package/esm2015/lib/map/utils/layer-watcher.js +1 -1
  300. package/esm2015/lib/map/wake-lock-button/index.js +2 -0
  301. package/esm2015/lib/map/wake-lock-button/wake-lock-button.component.js +122 -0
  302. package/esm2015/lib/map/zoom-button/index.js +1 -1
  303. package/esm2015/lib/map/zoom-button/zoom-button.component.js +1 -1
  304. package/esm2015/lib/measure/index.js +1 -1
  305. package/esm2015/lib/measure/measure.module.js +1 -1
  306. package/esm2015/lib/measure/measurer/measure-format.pipe.js +1 -1
  307. package/esm2015/lib/measure/measurer/measurer-dialog.component.js +1 -1
  308. package/esm2015/lib/measure/measurer/measurer-item.component.js +1 -1
  309. package/esm2015/lib/measure/measurer/measurer.component.js +1 -1
  310. package/esm2015/lib/measure/measurer/measurer.module.js +1 -1
  311. package/esm2015/lib/measure/shared/index.js +1 -1
  312. package/esm2015/lib/measure/shared/measure.enum.js +1 -1
  313. package/esm2015/lib/measure/shared/measure.interfaces.js +1 -1
  314. package/esm2015/lib/measure/shared/measure.utils.js +1 -1
  315. package/esm2015/lib/metadata/index.js +1 -1
  316. package/esm2015/lib/metadata/metadata-button/index.js +1 -1
  317. package/esm2015/lib/metadata/metadata-button/metadata-button.component.js +13 -2
  318. package/esm2015/lib/metadata/metadata.module.js +1 -1
  319. package/esm2015/lib/metadata/shared/index.js +1 -1
  320. package/esm2015/lib/metadata/shared/metadata.interface.js +1 -1
  321. package/esm2015/lib/metadata/shared/metadata.service.js +1 -1
  322. package/esm2015/lib/offline/geoDB/geoDB.enums.js +6 -0
  323. package/esm2015/lib/offline/geoDB/geoDB.interface.js +2 -0
  324. package/esm2015/lib/offline/geoDB/geoDB.service.js +161 -0
  325. package/esm2015/lib/offline/geoDB/index.js +4 -0
  326. package/esm2015/lib/offline/index.js +3 -0
  327. package/esm2015/lib/offline/shared/geo-network.service.js +66 -0
  328. package/esm2015/lib/offline/shared/index.js +2 -0
  329. package/esm2015/lib/overlay/index.js +1 -1
  330. package/esm2015/lib/overlay/overlay.module.js +1 -1
  331. package/esm2015/lib/overlay/shared/index.js +1 -1
  332. package/esm2015/lib/overlay/shared/overlay-marker-style.utils.js +1 -1
  333. package/esm2015/lib/overlay/shared/overlay.directive.js +1 -1
  334. package/esm2015/lib/overlay/shared/overlay.enum.js +1 -1
  335. package/esm2015/lib/overlay/shared/overlay.js +1 -1
  336. package/esm2015/lib/overlay/shared/overlay.service.js +1 -1
  337. package/esm2015/lib/overlay/shared/overlay.utils.js +3 -3
  338. package/esm2015/lib/print/index.js +1 -1
  339. package/esm2015/lib/print/print/print.component.js +1 -1
  340. package/esm2015/lib/print/print-form/index.js +1 -1
  341. package/esm2015/lib/print/print-form/print-form.component.js +1 -1
  342. package/esm2015/lib/print/print.module.js +1 -1
  343. package/esm2015/lib/print/shared/index.js +1 -1
  344. package/esm2015/lib/print/shared/print.interface.js +1 -1
  345. package/esm2015/lib/print/shared/print.service.js +22 -16
  346. package/esm2015/lib/print/shared/print.type.js +1 -1
  347. package/esm2015/lib/query/index.js +1 -1
  348. package/esm2015/lib/query/query.module.js +5 -4
  349. package/esm2015/lib/query/shared/index.js +1 -1
  350. package/esm2015/lib/query/shared/query-search-source.js +1 -1
  351. package/esm2015/lib/query/shared/query-search-source.providers.js +1 -1
  352. package/esm2015/lib/query/shared/query.directive.js +1 -1
  353. package/esm2015/lib/query/shared/query.enums.js +1 -1
  354. package/esm2015/lib/query/shared/query.interfaces.js +1 -1
  355. package/esm2015/lib/query/shared/query.service.js +33 -6
  356. package/esm2015/lib/query/shared/query.utils.js +1 -1
  357. package/esm2015/lib/search/index.js +1 -1
  358. package/esm2015/lib/search/search-bar/search-bar.component.js +1 -1
  359. package/esm2015/lib/search/search-bar/search-bar.module.js +1 -1
  360. package/esm2015/lib/search/search-bar/search-url-param.directive.js +1 -1
  361. package/esm2015/lib/search/search-results/search-results-add-button.component.js +1 -1
  362. package/esm2015/lib/search/search-results/search-results-item.component.js +1 -1
  363. package/esm2015/lib/search/search-results/search-results.component.js +1 -1
  364. package/esm2015/lib/search/search-results/search-results.module.js +1 -1
  365. package/esm2015/lib/search/search-selector/search-selector.component.js +1 -1
  366. package/esm2015/lib/search/search-selector/search-selector.module.js +1 -1
  367. package/esm2015/lib/search/search-settings/search-settings.component.js +1 -1
  368. package/esm2015/lib/search/search-settings/search-settings.module.js +1 -1
  369. package/esm2015/lib/search/search.module.js +1 -1
  370. package/esm2015/lib/search/shared/index.js +1 -1
  371. package/esm2015/lib/search/shared/search-pointer-summary.directive.js +1 -1
  372. package/esm2015/lib/search/shared/search-source-service.providers.js +1 -1
  373. package/esm2015/lib/search/shared/search-source.service.js +1 -1
  374. package/esm2015/lib/search/shared/search.enums.js +1 -1
  375. package/esm2015/lib/search/shared/search.interfaces.js +1 -1
  376. package/esm2015/lib/search/shared/search.service.js +1 -1
  377. package/esm2015/lib/search/shared/search.utils.js +1 -1
  378. package/esm2015/lib/search/shared/sources/cadastre.js +1 -1
  379. package/esm2015/lib/search/shared/sources/cadastre.providers.js +1 -1
  380. package/esm2015/lib/search/shared/sources/coordinates.interfaces.js +1 -1
  381. package/esm2015/lib/search/shared/sources/coordinates.js +1 -1
  382. package/esm2015/lib/search/shared/sources/coordinates.providers.js +1 -1
  383. package/esm2015/lib/search/shared/sources/icherche.interfaces.js +1 -1
  384. package/esm2015/lib/search/shared/sources/icherche.js +1 -1
  385. package/esm2015/lib/search/shared/sources/icherche.providers.js +1 -1
  386. package/esm2015/lib/search/shared/sources/ilayer.interfaces.js +1 -1
  387. package/esm2015/lib/search/shared/sources/ilayer.js +1 -1
  388. package/esm2015/lib/search/shared/sources/ilayer.providers.js +1 -1
  389. package/esm2015/lib/search/shared/sources/index.js +1 -1
  390. package/esm2015/lib/search/shared/sources/nominatim.interfaces.js +1 -1
  391. package/esm2015/lib/search/shared/sources/nominatim.js +2 -2
  392. package/esm2015/lib/search/shared/sources/nominatim.providers.js +1 -1
  393. package/esm2015/lib/search/shared/sources/source.interfaces.js +1 -1
  394. package/esm2015/lib/search/shared/sources/source.js +2 -2
  395. package/esm2015/lib/search/shared/sources/storedqueries.interfaces.js +1 -1
  396. package/esm2015/lib/search/shared/sources/storedqueries.js +1 -1
  397. package/esm2015/lib/search/shared/sources/storedqueries.providers.js +1 -1
  398. package/esm2015/lib/toast/index.js +1 -1
  399. package/esm2015/lib/toast/toast.component.js +1 -1
  400. package/esm2015/lib/toast/toast.module.js +1 -1
  401. package/esm2015/lib/utils/commonVectorStyle.interface.js +1 -1
  402. package/esm2015/lib/utils/commonVectorStyle.js +1 -1
  403. package/esm2015/lib/utils/googleLinks.js +1 -1
  404. package/esm2015/lib/utils/id-generator.js +1 -1
  405. package/esm2015/lib/utils/index.js +1 -1
  406. package/esm2015/lib/utils/osmLinks.js +1 -1
  407. package/esm2015/lib/wkt/index.js +1 -1
  408. package/esm2015/lib/wkt/shared/index.js +1 -1
  409. package/esm2015/lib/wkt/shared/wkt.service.js +15 -15
  410. package/esm2015/lib/wkt/wkt.module.js +1 -1
  411. package/esm2015/lib/workspace/confirmation-popup/confirmation-popup.component.js +1 -1
  412. package/esm2015/lib/workspace/confirmation-popup/confirmation-popup.module.js +1 -1
  413. package/esm2015/lib/workspace/confirmation-popup/index.js +1 -1
  414. package/esm2015/lib/workspace/index.js +1 -1
  415. package/esm2015/lib/workspace/shared/edition-workspace.js +12 -4
  416. package/esm2015/lib/workspace/shared/edition-workspace.service.js +40 -13
  417. package/esm2015/lib/workspace/shared/feature-workspace.js +1 -1
  418. package/esm2015/lib/workspace/shared/feature-workspace.service.js +10 -5
  419. package/esm2015/lib/workspace/shared/index.js +1 -1
  420. package/esm2015/lib/workspace/shared/wfs-workspace.js +1 -1
  421. package/esm2015/lib/workspace/shared/wfs-workspace.service.js +10 -5
  422. package/esm2015/lib/workspace/shared/wms-workspace.service.js +31 -7
  423. package/esm2015/lib/workspace/shared/workspace.utils.js +1 -1
  424. package/esm2015/lib/workspace/widgets/index.js +1 -1
  425. package/esm2015/lib/workspace/widgets/ogc-filter/ogc-filter.component.js +1 -1
  426. package/esm2015/lib/workspace/widgets/ogc-filter/ogc-filter.module.js +1 -1
  427. package/esm2015/lib/workspace/widgets/widgets.js +1 -1
  428. package/esm2015/lib/workspace/workspace-selector/workspace-selector.directive.js +1 -1
  429. package/esm2015/lib/workspace/workspace-selector/workspace-selector.module.js +1 -1
  430. package/esm2015/lib/workspace/workspace-updator/workspace-updator.directive.js +1 -1
  431. package/esm2015/lib/workspace/workspace-updator/workspace-updator.module.js +1 -1
  432. package/esm2015/lib/workspace/workspace.module.js +1 -1
  433. package/esm2015/public_api.js +2 -1
  434. package/fesm2015/igo2-geo.js +2453 -946
  435. package/fesm2015/igo2-geo.js.map +1 -1
  436. package/lib/catalog/shared/catalog.interface.d.ts +9 -1
  437. package/lib/catalog/shared/catalog.service.d.ts +1 -0
  438. package/lib/datasource/shared/datasources/datasource.interface.d.ts +7 -1
  439. package/lib/draw/draw/draw-popup.component.d.ts +4 -2
  440. package/lib/draw/draw/draw.component.d.ts +19 -2
  441. package/lib/draw/shared/draw-style.service.d.ts +6 -0
  442. package/lib/draw/shared/draw.enum.d.ts +15 -0
  443. package/lib/feature/feature-details/feature-details.component.d.ts +12 -2
  444. package/lib/feature/feature-details/feature-details.directive.d.ts +2 -13
  445. package/lib/filter/filter.module.d.ts +1 -1
  446. package/lib/filter/ogc-filter-selection/ogc-filter-selection.component.d.ts +31 -13
  447. package/lib/filter/shared/ogc-filter.interface.d.ts +19 -2
  448. package/lib/import-export/shared/import.utils.d.ts +1 -1
  449. package/lib/layer/layer-item/layer-item.component.d.ts +1 -0
  450. package/lib/layer/layer-legend/layer-legend.component.d.ts +3 -2
  451. package/lib/layer/shared/layer.service.d.ts +6 -3
  452. package/lib/layer/shared/layers/layer.interface.d.ts +1 -0
  453. package/lib/layer/shared/layers/vector-layer.d.ts +5 -1
  454. package/lib/layer/shared/style.service.d.ts +38 -3
  455. package/lib/layer/shared/vector-style.interface.d.ts +11 -0
  456. package/lib/map/geolocate-button/geolocate-button.component.d.ts +8 -1
  457. package/lib/map/index.d.ts +1 -0
  458. package/lib/map/map.module.d.ts +13 -12
  459. package/lib/map/shared/controllers/geolocation.d.ts +112 -0
  460. package/lib/map/shared/controllers/index.d.ts +1 -0
  461. package/lib/map/shared/controllers/view.d.ts +7 -0
  462. package/lib/map/shared/hover-feature.directive.d.ts +1 -1
  463. package/lib/map/shared/map.d.ts +7 -19
  464. package/lib/map/shared/map.interface.d.ts +0 -1
  465. package/lib/map/wake-lock-button/index.d.ts +1 -0
  466. package/lib/map/wake-lock-button/wake-lock-button.component.d.ts +30 -0
  467. package/lib/offline/geoDB/geoDB.enums.d.ts +4 -0
  468. package/lib/offline/geoDB/geoDB.interface.d.ts +9 -0
  469. package/lib/offline/geoDB/geoDB.service.d.ts +35 -0
  470. package/lib/offline/geoDB/index.d.ts +3 -0
  471. package/lib/offline/index.d.ts +2 -0
  472. package/lib/offline/shared/geo-network.service.d.ts +28 -0
  473. package/lib/offline/shared/index.d.ts +1 -0
  474. package/lib/print/shared/print.service.d.ts +3 -2
  475. package/lib/query/query.module.d.ts +2 -1
  476. package/lib/query/shared/query.service.d.ts +7 -1
  477. package/lib/workspace/shared/edition-workspace.d.ts +2 -1
  478. package/lib/workspace/shared/edition-workspace.service.d.ts +5 -2
  479. package/lib/workspace/shared/feature-workspace.service.d.ts +3 -2
  480. package/lib/workspace/shared/wfs-workspace.service.d.ts +3 -2
  481. package/lib/workspace/shared/wms-workspace.service.d.ts +5 -2
  482. package/ngcc.config.js +3 -3
  483. package/package.json +7 -5
  484. package/public_api.d.ts +1 -0
  485. package/style/geo.theming.scss +12 -12
@@ -9,11 +9,15 @@ import * as olproj from 'ol/proj';
9
9
  import { VectorWatcher } from '../../utils';
10
10
  import { Layer } from './layer';
11
11
  import { buildUrl, defaultMaxFeatures } from '../../../datasource/shared/datasources/wms-wfs.utils';
12
+ import { catchError, concatMap, first } from 'rxjs/operators';
13
+ import { of } from 'rxjs';
12
14
  export class VectorLayer extends Layer {
13
- constructor(options, messageService, authInterceptor) {
15
+ constructor(options, messageService, authInterceptor, geoNetworkService, geoDBService) {
14
16
  super(options, messageService, authInterceptor);
15
17
  this.messageService = messageService;
16
18
  this.authInterceptor = authInterceptor;
19
+ this.geoNetworkService = geoNetworkService;
20
+ this.geoDBService = geoDBService;
17
21
  this.watcher = new VectorWatcher(this);
18
22
  this.status$ = this.watcher.status$;
19
23
  }
@@ -81,9 +85,12 @@ export class VectorLayer extends Layer {
81
85
  const styleClone = style.clone();
82
86
  switch (feature.getGeometry().getType()) {
83
87
  case 'Point':
84
- const radius = easeOut(elapsedRatio) * (styleClone.getImage().getRadius() * 3);
85
- styleClone.getImage().setRadius(radius);
86
- styleClone.getImage().setOpacity(opacity);
88
+ if (styleClone.getImage() !== null &&
89
+ typeof styleClone.getImage().getRadius === 'function') {
90
+ const radius = easeOut(elapsedRatio) * (styleClone.getImage().getRadius() * 3);
91
+ styleClone.getImage().setRadius(radius);
92
+ styleClone.getImage().setOpacity(opacity);
93
+ }
87
94
  break;
88
95
  case 'LineString':
89
96
  // TODO
@@ -276,50 +283,94 @@ export class VectorLayer extends Layer {
276
283
  else {
277
284
  modifiedUrl = url(extent, resolution, projection);
278
285
  }
279
- xhr.open('GET', modifiedUrl);
280
- const format = vectorSource.getFormat();
281
- if (format.getType() === FormatType.ARRAY_BUFFER) {
282
- xhr.responseType = 'arraybuffer';
283
- }
284
- if (interceptor) {
285
- interceptor.interceptXhr(xhr, modifiedUrl);
286
- }
287
- const onError = () => {
288
- vectorSource.removeLoadedExtent(extent);
289
- failure();
290
- };
291
- xhr.onerror = onError;
292
- xhr.onload = () => {
293
- // status will be 0 for file:// urls
294
- if (!xhr.status || (xhr.status >= 200 && xhr.status < 300)) {
295
- const type = format.getType();
296
- let source;
297
- if (type === FormatType.JSON || type === FormatType.TEXT) {
298
- source = xhr.responseText;
299
- }
300
- else if (type === FormatType.XML) {
301
- source = xhr.responseXML;
302
- if (!source) {
303
- source = new DOMParser().parseFromString(xhr.responseText, 'application/xml');
286
+ if (this.geoNetworkService && typeof url !== 'function') {
287
+ const format = vectorSource.getFormat();
288
+ const type = format.getType();
289
+ let responseType = type;
290
+ const onError = () => {
291
+ vectorSource.removeLoadedExtent(extent);
292
+ failure();
293
+ };
294
+ const options = { responseType };
295
+ this.geoNetworkService.geoDBService.get(url).pipe(concatMap(r => r ? of(r) : this.geoNetworkService.get(modifiedUrl, options)
296
+ .pipe(first(), catchError((res) => {
297
+ onError();
298
+ throw res;
299
+ }))))
300
+ .subscribe((content) => {
301
+ if (content) {
302
+ const format = vectorSource.getFormat();
303
+ const type = format.getType();
304
+ let source;
305
+ if (type === FormatType.JSON || type === FormatType.TEXT) {
306
+ source = content;
307
+ }
308
+ else if (type === FormatType.XML) {
309
+ source = content;
310
+ if (!source) {
311
+ source = new DOMParser().parseFromString(content, 'application/xml');
312
+ }
313
+ }
314
+ else if (type === FormatType.ARRAY_BUFFER) {
315
+ source = content;
316
+ }
317
+ if (source) {
318
+ const features = format.readFeatures(source, { extent, featureProjection: projection });
319
+ vectorSource.addFeatures(features, format.readProjection(source));
320
+ success(features);
321
+ }
322
+ else {
323
+ onError();
304
324
  }
305
325
  }
306
- else if (type === FormatType.ARRAY_BUFFER) {
307
- source = xhr.response;
308
- }
309
- if (source) {
310
- const features = format.readFeatures(source, { extent, featureProjection: projection });
311
- vectorSource.addFeatures(features, format.readProjection(source));
312
- success(features);
326
+ });
327
+ }
328
+ else {
329
+ xhr.open('GET', modifiedUrl);
330
+ const format = vectorSource.getFormat();
331
+ if (format.getType() === FormatType.ARRAY_BUFFER) {
332
+ xhr.responseType = 'arraybuffer';
333
+ }
334
+ if (interceptor) {
335
+ interceptor.interceptXhr(xhr, modifiedUrl);
336
+ }
337
+ const onError = () => {
338
+ vectorSource.removeLoadedExtent(extent);
339
+ failure();
340
+ };
341
+ xhr.onerror = onError;
342
+ xhr.onload = () => {
343
+ // status will be 0 for file:// urls
344
+ if (!xhr.status || (xhr.status >= 200 && xhr.status < 300)) {
345
+ const type = format.getType();
346
+ let source;
347
+ if (type === FormatType.JSON || type === FormatType.TEXT) {
348
+ source = xhr.responseText;
349
+ }
350
+ else if (type === FormatType.XML) {
351
+ source = xhr.responseXML;
352
+ if (!source) {
353
+ source = new DOMParser().parseFromString(xhr.responseText, 'application/xml');
354
+ }
355
+ }
356
+ else if (type === FormatType.ARRAY_BUFFER) {
357
+ source = xhr.response;
358
+ }
359
+ if (source) {
360
+ const features = format.readFeatures(source, { extent, featureProjection: projection });
361
+ vectorSource.addFeatures(features, format.readProjection(source));
362
+ success(features);
363
+ }
364
+ else {
365
+ onError();
366
+ }
313
367
  }
314
368
  else {
315
369
  onError();
316
370
  }
317
- }
318
- else {
319
- onError();
320
- }
321
- };
322
- xhr.send();
371
+ };
372
+ xhr.send();
373
+ }
323
374
  }
324
375
  }
325
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVjdG9yLWxheWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2VvL3NyYy9saWIvbGF5ZXIvc2hhcmVkL2xheWVycy92ZWN0b3ItbGF5ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxhQUFhLE1BQU0saUJBQWlCLENBQUM7QUFHNUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxPQUFPLElBQUksWUFBWSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUM3QyxPQUFPLFVBQVUsTUFBTSxzQkFBc0IsQ0FBQztBQUU5QyxPQUFPLFlBQVksTUFBTSxvQkFBb0IsQ0FBQztBQUM5QyxPQUFPLEtBQUssTUFBTSxNQUFNLFNBQVMsQ0FBQztBQVFsQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTVDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFLaEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBRXBHLE1BQU0sT0FBTyxXQUFZLFNBQVEsS0FBSztJQW9CcEMsWUFDRSxPQUEyQixFQUNwQixjQUErQixFQUMvQixlQUFpQztRQUV4QyxLQUFLLENBQUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUh6QyxtQkFBYyxHQUFkLGNBQWMsQ0FBaUI7UUFDL0Isb0JBQWUsR0FBZixlQUFlLENBQWtCO1FBR3hDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9B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QU0sRUFBRTt3QkFDWCxNQUFNLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQyxlQUFlLENBQ3RDLEdBQUcsQ0FBQyxZQUFZLEVBQ2hCLGlCQUFpQixDQUNsQixDQUFDO3FCQUNIO2lCQUNGO3FCQUFNLElBQUksSUFBSSxLQUFLLFVBQVUsQ0FBQyxZQUFZLEVBQUU7b0JBQzNDLE1BQU0sR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDO2lCQUN2QjtnQkFDRCxJQUFJLE1BQU0sRUFBRTtvQkFDVixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO29CQUN4RixZQUFZLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7b0JBQ2xFLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDbkI7cUJBQU07b0JBQ0wsT0FBTyxFQUFFLENBQUM7aUJBQ1g7YUFDRjtpQkFBTTtnQkFDTCxPQUFPLEVBQUUsQ0FBQzthQUNYO1FBQ0gsQ0FBQyxDQUFDO1FBQ0YsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2IsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG9sTGF5ZXJWZWN0b3IgZnJvbSAnb2wvbGF5ZXIvVmVjdG9yJztcclxuaW1wb3J0IG9sU291cmNlVmVjdG9yIGZyb20gJ29sL3NvdXJjZS9WZWN0b3InO1xyXG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgT2xHZW9tZXRyeSB9IGZyb20gJ29sL2dlb20vR2VvbWV0cnknO1xyXG5pbXBvcnQgeyB1bkJ5S2V5IH0gZnJvbSAnb2wvT2JzZXJ2YWJsZSc7XHJcbmltcG9ydCB7IGVhc2VPdXQgfSBmcm9tICdvbC9lYXNpbmcnO1xyXG5pbXBvcnQgeyBhc0FycmF5IGFzIENvbG9yQXNBcnJheSB9IGZyb20gJ29sL2NvbG9yJztcclxuaW1wb3J0IHsgZ2V0VmVjdG9yQ29udGV4dCB9IGZyb20gJ29sL3JlbmRlcic7XHJcbmltcG9ydCBGb3JtYXRUeXBlIGZyb20gJ29sL2Zvcm1hdC9Gb3JtYXRUeXBlJztcclxuaW1wb3J0IG9sRmVhdHVyZSBmcm9tICdvbC9GZWF0dXJlJztcclxuaW1wb3J0IG9sUHJvamVjdGlvbiBmcm9tICdvbC9wcm9qL1Byb2plY3Rpb24nO1xyXG5pbXBvcnQgKiBhcyBvbHByb2ogZnJvbSAnb2wvcHJvaic7XHJcblxyXG5pbXBvcnQgeyBGZWF0dXJlRGF0YVNvdXJjZSB9IGZyb20gJy4uLy4uLy4uL2RhdGFzb3VyY2Uvc2hhcmVkL2RhdGFzb3VyY2VzL2ZlYXR1cmUtZGF0YXNvdXJjZSc7XHJcbmltcG9ydCB7IFdGU0RhdGFTb3VyY2UgfSBmcm9tICcuLi8uLi8uLi9kYXRhc291cmNlL3NoYXJlZC9kYXRhc291cmNlcy93ZnMtZGF0YXNvdXJjZSc7XHJcbmltcG9ydCB7IEFyY0dJU1Jlc3REYXRhU291cmNlIH0gZnJvbSAnLi4vLi4vLi4vZGF0YXNvdXJjZS9zaGFyZWQvZGF0YXNvdXJjZXMvYXJjZ2lzcmVzdC1kYXRhc291cmNlJztcclxuaW1wb3J0IHsgV2ViU29ja2V0RGF0YVNvdXJjZSB9IGZyb20gJy4uLy4uLy4uL2RhdGFzb3VyY2Uvc2hhcmVkL2RhdGFzb3VyY2VzL3dlYnNvY2tldC1kYXRhc291cmNlJztcclxuaW1wb3J0IHsgQ2x1c3RlckRhdGFTb3VyY2UgfSBmcm9tICcuLi8uLi8uLi9kYXRhc291cmNlL3NoYXJlZC9kYXRhc291cmNlcy9jbHVzdGVyLWRhdGFzb3VyY2UnO1xyXG5cclxuaW1wb3J0IHsgVmVjdG9yV2F0Y2hlciB9IGZyb20gJy4uLy4uL3V0aWxzJztcclxuaW1wb3J0IHsgSWdvTWFwIH0gZnJvbSAnLi4vLi4vLi4vbWFwJztcclxuaW1wb3J0IHsgTGF5ZXIgfSBmcm9tICcuL2xheWVyJztcclxuaW1wb3J0IHsgVmVjdG9yTGF5ZXJPcHRpb25zIH0gZnJvbSAnLi92ZWN0b3ItbGF5ZXIuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgQXV0aEludGVyY2VwdG9yIH0gZnJvbSAnQGlnbzIvYXV0aCc7XHJcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZSc7XHJcbmltcG9ydCB7IFdGU0RhdGFTb3VyY2VPcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vZGF0YXNvdXJjZS9zaGFyZWQvZGF0YXNvdXJjZXMvd2ZzLWRhdGFzb3VyY2UuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgYnVpbGRVcmwsIGRlZmF1bHRNYXhGZWF0dXJlcyB9IGZyb20gJy4uLy4uLy4uL2RhdGFzb3VyY2Uvc2hhcmVkL2RhdGFzb3VyY2VzL3dtcy13ZnMudXRpbHMnO1xyXG5pbXBvcnQgeyBPZ2NGaWx0ZXJhYmxlRGF0YVNvdXJjZU9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi9maWx0ZXIvc2hhcmVkL29nYy1maWx0ZXIuaW50ZXJmYWNlJztcclxuZXhwb3J0IGNsYXNzIFZlY3RvckxheWVyIGV4dGVuZHMgTGF5ZXIge1xyXG4gIHB1YmxpYyBkYXRhU291cmNlOlxyXG4gICAgfCBGZWF0dXJlRGF0YVNvdXJjZVxyXG4gICAgfCBXRlNEYXRhU291cmNlXHJcbiAgICB8IEFyY0dJU1Jlc3REYXRhU291cmNlXHJcbiAgICB8IFdlYlNvY2tldERhdGFTb3VyY2VcclxuICAgIHwgQ2x1c3RlckRhdGFTb3VyY2U7XHJcbiAgcHVibGljIG9wdGlvbnM6IFZlY3RvckxheWVyT3B0aW9ucztcclxuICBwdWJsaWMgb2w6IG9sTGF5ZXJWZWN0b3I8b2xTb3VyY2VWZWN0b3I8T2xHZW9tZXRyeT4+O1xyXG4gIHByaXZhdGUgd2F0Y2hlcjogVmVjdG9yV2F0Y2hlcjtcclxuICBwcml2YXRlIHRyYWNrRmVhdHVyZUxpc3RlbmVySWQ7XHJcblxyXG4gIGdldCBicm93c2FibGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmJyb3dzYWJsZSAhPT0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBnZXQgZXhwb3J0YWJsZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZXhwb3J0YWJsZSAhPT0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIG9wdGlvbnM6IFZlY3RvckxheWVyT3B0aW9ucyxcclxuICAgIHB1YmxpYyBtZXNzYWdlU2VydmljZT86IE1lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgcHVibGljIGF1dGhJbnRlcmNlcHRvcj86IEF1dGhJbnRlcmNlcHRvclxyXG4gICkge1xyXG4gICAgc3VwZXIob3B0aW9ucywgbWVzc2FnZVNlcnZpY2UsIGF1dGhJbnRlcmNlcHRvcik7XHJcbiAgICB0aGlzLndhdGNoZXIgPSBuZXcgVmVjdG9yV2F0Y2hlcih0aGlzKTtcclxuICAgIHRoaXMuc3RhdHVzJCA9IHRoaXMud2F0Y2hlci5zdGF0dXMkO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGNyZWF0ZU9sTGF5ZXIoKTogb2xMYXllclZlY3RvcjxvbFNvdXJjZVZlY3RvcjxPbEdlb21ldHJ5Pj4ge1xyXG4gICAgY29uc3Qgb2xPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5vcHRpb25zLCB7XHJcbiAgICAgIHNvdXJjZTogdGhpcy5vcHRpb25zLnNvdXJjZS5vbCBhcyBvbFNvdXJjZVZlY3RvcjxPbEdlb21ldHJ5PlxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5hbmltYXRpb24pIHtcclxuICAgICAgdGhpcy5kYXRhU291cmNlLm9sLm9uKFxyXG4gICAgICAgICdhZGRmZWF0dXJlJyxcclxuICAgICAgICBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICB0aGlzLmZsYXNoKGUuZmVhdHVyZSk7XHJcbiAgICAgICAgfS5iaW5kKHRoaXMpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy50cmFja0ZlYXR1cmUpIHtcclxuICAgICAgdGhpcy5lbmFibGVUcmFja0ZlYXR1cmUodGhpcy5vcHRpb25zLnRyYWNrRmVhdHVyZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdmVjdG9yID0gbmV3IG9sTGF5ZXJWZWN0b3Iob2xPcHRpb25zKTtcclxuICAgIGNvbnN0IHZlY3RvclNvdXJjZSA9IHZlY3Rvci5nZXRTb3VyY2UoKSBhcyBvbFNvdXJjZVZlY3RvcjxPbEdlb21ldHJ5PjtcclxuICAgIGNvbnN0IHVybCA9IHZlY3RvclNvdXJjZS5nZXRVcmwoKTtcclxuICAgIGlmICh1cmwpIHtcclxuICAgICAgbGV0IGxvYWRlcjtcclxuICAgICAgY29uc3Qgd2ZzT3B0aW9ucyA9IG9sT3B0aW9ucy5zb3VyY2VPcHRpb25zIGFzIFdGU0RhdGFTb3VyY2VPcHRpb25zO1xyXG4gICAgICBpZiAod2ZzT3B0aW9ucz8udHlwZSA9PT0gJ3dmcycgJiYgKHdmc09wdGlvbnMucGFyYW1zIHx8IHdmc09wdGlvbnMucGFyYW1zV0ZTKSkge1xyXG4gICAgICAgIGxvYWRlciA9IChleHRlbnQsIHJlc29sdXRpb24sIHByb2osIHN1Y2Nlc3MsIGZhaWx1cmUpID0+IHtcclxuICAgICAgICAgIHRoaXMuY3VzdG9tV0ZTTG9hZGVyKFxyXG4gICAgICAgICAgICB2ZWN0b3JTb3VyY2UsXHJcbiAgICAgICAgICAgIHdmc09wdGlvbnMsXHJcbiAgICAgICAgICAgIHRoaXMuYXV0aEludGVyY2VwdG9yLFxyXG4gICAgICAgICAgICBleHRlbnQsXHJcbiAgICAgICAgICAgIHJlc29sdXRpb24sXHJcbiAgICAgICAgICAgIHByb2osXHJcbiAgICAgICAgICAgIHN1Y2Nlc3MsXHJcbiAgICAgICAgICAgIGZhaWx1cmVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsb2FkZXIgPSAoZXh0ZW50LCByZXNvbHV0aW9uLCBwcm9qLCBzdWNjZXNzLCBmYWlsdXJlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmN1c3RvbUxvYWRlcihcclxuICAgICAgICAgICAgdmVjdG9yU291cmNlLFxyXG4gICAgICAgICAgICB1cmwsXHJcbiAgICAgICAgICAgIHRoaXMuYXV0aEludGVyY2VwdG9yLFxyXG4gICAgICAgICAgICBleHRlbnQsXHJcbiAgICAgICAgICAgIHJlc29sdXRpb24sXHJcbiAgICAgICAgICAgIHByb2osXHJcbiAgICAgICAgICAgIHN1Y2Nlc3MsXHJcbiAgICAgICAgICAgIGZhaWx1cmVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgICBpZiAobG9hZGVyKSB7XHJcbiAgICAgICAgdmVjdG9yU291cmNlLnNldExvYWRlcihsb2FkZXIpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmVjdG9yO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGZsYXNoKGZlYXR1cmUpIHtcclxuICAgIGNvbnN0IHN0YXJ0ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICBjb25zdCBsaXN0ZW5lcktleSA9IHRoaXMub2wub24oJ3Bvc3RyZW5kZXInLCBhbmltYXRlLmJpbmQodGhpcykpO1xyXG5cclxuICAgIGZ1bmN0aW9uIGFuaW1hdGUoZXZlbnQpIHtcclxuICAgICAgY29uc3QgdmVjdG9yQ29udGV4dCA9IGdldFZlY3RvckNvbnRleHQoZXZlbnQpO1xyXG4gICAgICBjb25zdCBmcmFtZVN0YXRlID0gZXZlbnQuZnJhbWVTdGF0ZTtcclxuICAgICAgY29uc3QgZmxhc2hHZW9tID0gZmVhdHVyZS5nZXRHZW9tZXRyeSgpLmNsb25lKCk7XHJcbiAgICAgIGNvbnN0IGVsYXBzZWQgPSBmcmFtZVN0YXRlLnRpbWUgLSBzdGFydDtcclxuICAgICAgY29uc3QgZWxhcHNlZFJhdGlvID0gZWxhcHNlZCAvIHRoaXMub3B0aW9ucy5hbmltYXRpb24uZHVyYXRpb247XHJcbiAgICAgIGNvbnN0IG9wYWNpdHkgPSBlYXNlT3V0KDEgLSBlbGFwc2VkUmF0aW8pO1xyXG4gICAgICBjb25zdCBuZXdDb2xvciA9IENvbG9yQXNBcnJheSh0aGlzLm9wdGlvbnMuYW5pbWF0aW9uLmNvbG9yIHx8ICdyZWQnKTtcclxuICAgICAgbmV3Q29sb3JbM10gPSBvcGFjaXR5O1xyXG4gICAgICBsZXQgc3R5bGUgPSB0aGlzLm9sXHJcbiAgICAgICAgLmdldFN0eWxlRnVuY3Rpb24oKVxyXG4gICAgICAgIC5jYWxsKHRoaXMsIGZlYXR1cmUpXHJcbiAgICAgICAgLmZpbmQoKHN0eWxlMikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHN0eWxlMi5nZXRJbWFnZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICBpZiAoIXN0eWxlKSB7XHJcbiAgICAgICAgc3R5bGUgPSB0aGlzLm9sLmdldFN0eWxlRnVuY3Rpb24oKS5jYWxsKHRoaXMsIGZlYXR1cmUpWzBdO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHN0eWxlQ2xvbmUgPSBzdHlsZS5jbG9uZSgpO1xyXG5cclxuICAgICAgc3dpdGNoIChmZWF0dXJlLmdldEdlb21ldHJ5KCkuZ2V0VHlwZSgpKSB7XHJcbiAgICAgICAgY2FzZSAnUG9pbnQnOlxyXG4gICAgICAgICAgY29uc3QgcmFkaXVzID1cclxuICAgICAgICAgICAgZWFzZU91dChlbGFwc2VkUmF0aW8pICogKHN0eWxlQ2xvbmUuZ2V0SW1hZ2UoKS5nZXRSYWRpdXMoKSAqIDMpO1xyXG4gICAgICAgICAgc3R5bGVDbG9uZS5nZXRJbWFnZSgpLnNldFJhZGl1cyhyYWRpdXMpO1xyXG4gICAgICAgICAgc3R5bGVDbG9uZS5nZXRJbWFnZSgpLnNldE9wYWNpdHkob3BhY2l0eSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdMaW5lU3RyaW5nJzpcclxuICAgICAgICAgIC8vIFRPRE9cclxuICAgICAgICAgIGlmIChzdHlsZUNsb25lLmdldEltYWdlKCkpIHtcclxuICAgICAgICAgICAgc3R5bGVDbG9uZS5nZXRJbWFnZSgpLmdldFN0cm9rZSgpLnNldENvbG9yKG5ld0NvbG9yKTtcclxuICAgICAgICAgICAgc3R5bGVDbG9uZVxyXG4gICAgICAgICAgICAgIC5nZXRJbWFnZSgpXHJcbiAgICAgICAgICAgICAgLmdldFN0cm9rZSgpXHJcbiAgICAgICAgICAgICAgLnNldFdpZHRoKFxyXG4gICAgICAgICAgICAgICAgZWFzZU91dChlbGFwc2VkUmF0aW8pICpcclxuICAgICAgICAgICAgICAgICAgKHN0eWxlQ2xvbmUuZ2V0SW1hZ2UoKS5nZXRTdHJva2UoKS5nZXRXaWR0aCgpICogMylcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHN0eWxlQ2xvbmUuZ2V0U3Ryb2tlKCkpIHtcclxuICAgICAgICAgICAgc3R5bGVDbG9uZS5nZXRTdHJva2UoKS5zZXRDb2xvcihuZXdDb2xvcik7XHJcbiAgICAgICAgICAgIHN0eWxlQ2xvbmVcclxuICAgICAgICAgICAgICAuZ2V0U3Ryb2tlKClcclxuICAgICAgICAgICAgICAuc2V0V2lkdGgoXHJcbiAgICAgICAgICAgICAgICBlYXNlT3V0KGVsYXBzZWRSYXRpbykgKiAoc3R5bGVDbG9uZS5nZXRTdHJva2UoKS5nZXRXaWR0aCgpICogMylcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnUG9seWdvbic6XHJcbiAgICAgICAgICAvLyBUT0RPXHJcbiAgICAgICAgICBpZiAoc3R5bGVDbG9uZS5nZXRJbWFnZSgpKSB7XHJcbiAgICAgICAgICAgIHN0eWxlQ2xvbmUuZ2V0SW1hZ2UoKS5nZXRGaWxsKCkuc2V0Q29sb3IobmV3Q29sb3IpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHN0eWxlQ2xvbmUuZ2V0RmlsbCgpKSB7XHJcbiAgICAgICAgICAgIHN0eWxlQ2xvbmUuZ2V0RmlsbCgpLnNldENvbG9yKG5ld0NvbG9yKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzdHlsZUNsb25lLnNldFRleHQoJycpO1xyXG4gICAgICB2ZWN0b3JDb250ZXh0LnNldFN0eWxlKHN0eWxlQ2xvbmUpO1xyXG4gICAgICB2ZWN0b3JDb250ZXh0LmRyYXdHZW9tZXRyeShmbGFzaEdlb20pO1xyXG5cclxuICAgICAgaWYgKGVsYXBzZWQgPiB0aGlzLm9wdGlvbnMuYW5pbWF0aW9uLmR1cmF0aW9uKSB7XHJcbiAgICAgICAgdW5CeUtleShsaXN0ZW5lcktleSk7XHJcbiAgICAgICAgLy8gcmVtb3ZlIGxhc3QgZ2VvbWV0cnlcclxuICAgICAgICAvLyB0aGVyZSBpcyBhIGxpdHRsZSBmbGFzaCBiZWZvcmUgZmVhdHVyZSBkaXNhcHBlYXIsIGJldHRlciBzb2x1dGlvbiA/XHJcbiAgICAgICAgdGhpcy5tYXAub2wucmVuZGVyKCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIHRlbGwgT3BlbkxheWVycyB0byBjb250aW51ZSBwb3N0Y29tcG9zZSBhbmltYXRpb25cclxuICAgICAgdGhpcy5tYXAub2wucmVuZGVyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0TWFwKG1hcDogSWdvTWFwIHwgdW5kZWZpbmVkKSB7XHJcbiAgICBpZiAobWFwID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy53YXRjaGVyLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLndhdGNoZXIuc3Vic2NyaWJlKCgpID0+IHt9KTtcclxuICAgIH1cclxuICAgIHN1cGVyLnNldE1hcChtYXApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uVW53YXRjaCgpIHtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5vblVud2F0Y2goKTtcclxuICAgIHRoaXMuc3RvcEFuaW1hdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0b3BBbmltYXRpb24oKSB7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2Uub2wudW4oXHJcbiAgICAgICdhZGRmZWF0dXJlJyxcclxuICAgICAgZnVuY3Rpb24oZSkge1xyXG4gICAgICAgIGlmICh0aGlzLnZpc2libGUpIHtcclxuICAgICAgICAgIHRoaXMuZmxhc2goZS5mZWF0dXJlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0uYmluZCh0aGlzKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBlbmFibGVUcmFja0ZlYXR1cmUoaWQ6IHN0cmluZyB8IG51bWJlcikge1xyXG4gICAgdGhpcy50cmFja0ZlYXR1cmVMaXN0ZW5lcklkID0gdGhpcy5kYXRhU291cmNlLm9sLm9uKFxyXG4gICAgICAnYWRkZmVhdHVyZScsXHJcbiAgICAgIHRoaXMudHJhY2tGZWF0dXJlLmJpbmQodGhpcywgaWQpXHJcbiAgICApO1xyXG4gIH1cclxuICBwdWJsaWMgY2VudGVyTWFwT25GZWF0dXJlKGlkOiBzdHJpbmcgfCBudW1iZXIpIHtcclxuICAgIGNvbnN0IGZlYXQgPSB0aGlzLmRhdGFTb3VyY2Uub2wuZ2V0RmVhdHVyZUJ5SWQoaWQpO1xyXG4gICAgaWYgKGZlYXQpIHtcclxuICAgICAgdGhpcy5tYXAub2wuZ2V0VmlldygpLnNldENlbnRlcihmZWF0LmdldEdlb21ldHJ5KCkuZ2V0Q29vcmRpbmF0ZXMoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdHJhY2tGZWF0dXJlKGlkLCBmZWF0KSB7XHJcbiAgICBpZiAoZmVhdC5mZWF0dXJlLmdldElkKCkgPT09IGlkICYmIHRoaXMudmlzaWJsZSkge1xyXG4gICAgICB0aGlzLmNlbnRlck1hcE9uRmVhdHVyZShpZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZGlzYWJsZVRyYWNrRmVhdHVyZShpZD86IHN0cmluZyB8IG51bWJlcikge1xyXG4gICAgdW5CeUtleSh0aGlzLnRyYWNrRmVhdHVyZUxpc3RlbmVySWQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3VzdG9tIGxvYWRlciBmb3IgYSBXRlMgZGF0YXNvdXJjZVxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqIEBwYXJhbSB2ZWN0b3JTb3VyY2UgdGhlIHZlY3RvciBzb3VyY2UgdG8gYmUgY3JlYXRlZFxyXG4gICAqIEBwYXJhbSBvcHRpb25zIG9sT3B0aW9ucyBmcm9tIHNvdXJjZVxyXG4gICAqIEBwYXJhbSBpbnRlcmNlcHRvciB0aGUgaW50ZXJjZXB0b3Igb2YgdGhlIGRhdGFcclxuICAgKiBAcGFyYW0gZXh0ZW50IHRoZSBleHRlbnQgb2YgdGhlIHJlcXVlc3RlZCBkYXRhXHJcbiAgICogQHBhcmFtIHJlc29sdXRpb24gdGhlIGN1cnJlbnQgcmVzb2x1dGlvblxyXG4gICAqIEBwYXJhbSBwcm9qIHRoZSBwcm9qZWN0aW9uIHRvIHJldHJpZXZlIHRoZSBkYXRhXHJcbiAgICogQHBhcmFtIHN1Y2Nlc3Mgc3VjY2VzcyBjYWxsYmFja1xyXG4gICAqIEBwYXJhbSBmYWlsdXJlIGZhaWx1cmUgY2FsbGJhY2tcclxuICAgKiBAcGFyYW0gcmFuZG9tUGFyYW0gcmFuZG9tIHBhcmFtZXRlciB0byBlbnN1cmUgY2FjaGUgaXMgbm90IGNhdXNpbmcgcHJvYmxlbXMgaW4gcmV0cmlldmluZyBuZXcgZGF0YVxyXG4gICAqL1xyXG4gIHB1YmxpYyBjdXN0b21XRlNMb2FkZXIoXHJcbiAgICB2ZWN0b3JTb3VyY2UsXHJcbiAgICBvcHRpb25zLFxyXG4gICAgaW50ZXJjZXB0b3IsXHJcbiAgICBleHRlbnQsXHJcbiAgICByZXNvbHV0aW9uLFxyXG4gICAgcHJvaixcclxuICAgIHN1Y2Nlc3MsXHJcbiAgICBmYWlsdXJlLFxyXG4gICAgcmFuZG9tUGFyYW0/OiBib29sZWFuXHJcbiAgKSB7XHJcbiAgICB7XHJcbiAgICAgIGNvbnN0IHBhcmFtc1dGUyA9IG9wdGlvbnMucGFyYW1zV0ZTO1xyXG4gICAgICBjb25zdCB3ZnNQcm9qID0gcGFyYW1zV0ZTLnNyc05hbWUgPyBuZXcgb2xQcm9qZWN0aW9uKHsgY29kZTogcGFyYW1zV0ZTLnNyc05hbWUgfSkgOiBwcm9qO1xyXG4gICAgICBjb25zdCBjdXJyZW50RXh0ZW50ID0gb2xwcm9qLnRyYW5zZm9ybUV4dGVudChleHRlbnQsIHByb2osIHdmc1Byb2opO1xyXG4gICAgICBwYXJhbXNXRlMuc3JzTmFtZSA9IHBhcmFtc1dGUy5zcnNOYW1lIHx8IHByb2ouZ2V0Q29kZSgpO1xyXG4gICAgICBjb25zdCB1cmwgPSBidWlsZFVybChcclxuICAgICAgICBvcHRpb25zLFxyXG4gICAgICAgIGN1cnJlbnRFeHRlbnQsXHJcbiAgICAgICAgd2ZzUHJvaixcclxuICAgICAgICAob3B0aW9ucyBhcyBPZ2NGaWx0ZXJhYmxlRGF0YVNvdXJjZU9wdGlvbnMpLm9nY0ZpbHRlcnMsXHJcbiAgICAgICAgcmFuZG9tUGFyYW0pO1xyXG4gICAgICBsZXQgc3RhcnRJbmRleCA9IDA7XHJcbiAgICAgIGlmIChwYXJhbXNXRlMudmVyc2lvbiA9PT0gJzIuMC4wJyAmJiBwYXJhbXNXRlMubWF4RmVhdHVyZXMgPiBkZWZhdWx0TWF4RmVhdHVyZXMpIHtcclxuICAgICAgICBjb25zdCBuYk9mRmVhdHVyZSA9IDEwMDA7XHJcbiAgICAgICAgd2hpbGUgKHN0YXJ0SW5kZXggPCBwYXJhbXNXRlMubWF4RmVhdHVyZXMpIHtcclxuICAgICAgICAgIGxldCBhbHRlcmVkVXJsID0gdXJsLnJlcGxhY2UoJ2NvdW50PScgKyBwYXJhbXNXRlMubWF4RmVhdHVyZXMsICdjb3VudD0nICsgbmJPZkZlYXR1cmUpO1xyXG4gICAgICAgICAgYWx0ZXJlZFVybCA9IGFsdGVyZWRVcmwucmVwbGFjZSgnc3RhcnRJbmRleD0wJywgJzAnKTtcclxuICAgICAgICAgIGFsdGVyZWRVcmwgKz0gJyZzdGFydEluZGV4PScgKyBzdGFydEluZGV4O1xyXG4gICAgICAgICAgYWx0ZXJlZFVybC5yZXBsYWNlKC8mJi9nLCAnJicpO1xyXG4gICAgICAgICAgdGhpcy5nZXRGZWF0dXJlcyh2ZWN0b3JTb3VyY2UsIGludGVyY2VwdG9yLCBjdXJyZW50RXh0ZW50LCB3ZnNQcm9qLCBwcm9qLCBhbHRlcmVkVXJsLCBuYk9mRmVhdHVyZSwgc3VjY2VzcywgZmFpbHVyZSk7XHJcbiAgICAgICAgICBzdGFydEluZGV4ICs9IG5iT2ZGZWF0dXJlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmdldEZlYXR1cmVzKHZlY3RvclNvdXJjZSwgaW50ZXJjZXB0b3IsIGN1cnJlbnRFeHRlbnQsIHdmc1Byb2osIHByb2osIHVybCwgcGFyYW1zV0ZTLm1heEZlYXR1cmVzLCBzdWNjZXNzLCBmYWlsdXJlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEN1c3RvbSBsb2FkZXIgdG8gZ2V0IGZlYXR1cmUgZnJvbSBhIFdGUyBkYXRhc291cmNlXHJcbiAgICogQGludGVybmFsXHJcbiAgICogQHBhcmFtIHZlY3RvclNvdXJjZSB0aGUgdmVjdG9yIHNvdXJjZSB0byBiZSBjcmVhdGVkXHJcbiAgICogQHBhcmFtIGludGVyY2VwdG9yIHRoZSBpbnRlcmNlcHRvciBvZiB0aGUgZGF0YVxyXG4gICAqIEBwYXJhbSBleHRlbnQgdGhlIGV4dGVudCBvZiB0aGUgcmVxdWVzdGVkIGRhdGFcclxuICAgKiBAcGFyYW0gZGF0YVByb2plY3Rpb24gdGhlIHByb2plY3Rpb24gb2YgdGhlIHJldHJpZXZlZCBkYXRhXHJcbiAgICogQHBhcmFtIGZlYXR1cmVQcm9qZWN0aW9uIHRoZSBwcm9qZWN0aW9uIG9mIHRoZSBjcmVhdGVkIGZlYXR1cmVzXHJcbiAgICogQHBhcmFtIHVybCB0aGUgdXJsIHN0cmluZyB0byByZXRyaWV2ZSB0aGUgZGF0YVxyXG4gICAqIEBwYXJhbSB0aHJlc2hvbGQgdGhlIHRocmVzaG9sZCB0byBtYW5hZ2UgXCJtb3JlIGZlYXR1cmVzXCIgKFRPRE8pXHJcbiAgICogQHBhcmFtIHN1Y2Nlc3Mgc3VjY2VzcyBjYWxsYmFja1xyXG4gICAqIEBwYXJhbSBmYWlsdXJlIGZhaWx1cmUgY2FsbGJhY2tcclxuICAgKi9cclxuICBwcml2YXRlIGdldEZlYXR1cmVzKFxyXG4gICAgdmVjdG9yU291cmNlOiBvbFNvdXJjZVZlY3RvcjxPbEdlb21ldHJ5PixcclxuICAgIGludGVyY2VwdG9yLFxyXG4gICAgZXh0ZW50LFxyXG4gICAgZGF0YVByb2plY3Rpb24sXHJcbiAgICBmZWF0dXJlUHJvamVjdGlvbixcclxuICAgIHVybDogc3RyaW5nLFxyXG4gICAgdGhyZXNob2xkOiBudW1iZXIsXHJcbiAgICBzdWNjZXNzLCBmYWlsdXJlKSB7XHJcblxyXG4gICAgY29uc3QgaWRBc3NvY2lhdGVkQ2FsbCA9ICh0aGlzLmRhdGFTb3VyY2UgYXMgV0ZTRGF0YVNvdXJjZSkubW9zdFJlY2VudElkQ2FsbE9HQ0ZpbHRlcjtcclxuICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgY29uc3QgYWx0ZXJlZFVybFdpdGhLZXlBdXRoID0gaW50ZXJjZXB0b3IuYWx0ZXJVcmxXaXRoS2V5QXV0aCh1cmwpO1xyXG4gICAgbGV0IG1vZGlmaWVkVXJsID0gdXJsO1xyXG4gICAgaWYgKGFsdGVyZWRVcmxXaXRoS2V5QXV0aCkge1xyXG4gICAgICBtb2RpZmllZFVybCA9IGFsdGVyZWRVcmxXaXRoS2V5QXV0aDtcclxuICAgIH1cclxuICAgIHhoci5vcGVuKCdHRVQnLCBtb2RpZmllZFVybCk7XHJcbiAgICBpZiAoaW50ZXJjZXB0b3IpIHtcclxuICAgICAgaW50ZXJjZXB0b3IuaW50ZXJjZXB0WGhyKHhociwgbW9kaWZpZWRVcmwpO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgb25FcnJvciA9ICgpID0+IHtcclxuICAgICAgdmVjdG9yU291cmNlLnJlbW92ZUxvYWRlZEV4dGVudChleHRlbnQpO1xyXG4gICAgICBmYWlsdXJlKCk7XHJcbiAgICB9O1xyXG4gICAgeGhyLm9uZXJyb3IgPSBvbkVycm9yO1xyXG4gICAgeGhyLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCAmJiB4aHIucmVzcG9uc2VUZXh0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zdCBmZWF0dXJlcyA9XHJcbiAgICAgICAgICB2ZWN0b3JTb3VyY2VcclxuICAgICAgICAgICAgLmdldEZvcm1hdCgpXHJcbiAgICAgICAgICAgIC5yZWFkRmVhdHVyZXMoeGhyLnJlc3BvbnNlVGV4dCwgeyBkYXRhUHJvamVjdGlvbiwgZmVhdHVyZVByb2plY3Rpb24gfSkgYXMgb2xGZWF0dXJlPE9sR2VvbWV0cnk+W107XHJcbiAgICAgICAgLy8gVE9ETyBNYW5hZ2UgXCJNb3JlIGZlYXR1cmVcIlxyXG4gICAgICAgIC8qaWYgKGZlYXR1cmVzLmxlbmd0aCA9PT0gMCB8fCBmZWF0dXJlcy5sZW5ndGggPCB0aHJlc2hvbGQgKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnTm8gbW9yZSBkYXRhIHRvIGRvd25sb2FkIGF0IHRoaXMgcmVzb2x1dGlvbicpO1xyXG4gICAgICAgIH0qL1xyXG4gICAgICAgIC8vIEF2b2lkcyByZXRyaWV2aW5nIGFuIG9sZGVyIGNhbGwgdGhhdCB0b29rIGxvbmdlciB0byBiZSBwcm9jZXNzXHJcbiAgICAgICAgaWYgKGlkQXNzb2NpYXRlZENhbGwgPT09ICh0aGlzLmRhdGFTb3VyY2UgYXMgV0ZTRGF0YVNvdXJjZSkubW9zdFJlY2VudElkQ2FsbE9HQ0ZpbHRlcilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZlY3RvclNvdXJjZS5hZGRGZWF0dXJlcyhmZWF0dXJlcyk7XHJcbiAgICAgICAgICAgIHN1Y2Nlc3MoZmVhdHVyZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgc3VjY2VzcyhbXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG9uRXJyb3IoKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIHhoci5zZW5kKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDdXN0b20gbG9hZGVyIGZvciB2ZWN0b3IgbGF5ZXIuXHJcbiAgICogQGludGVybmFsXHJcbiAgICogQHBhcmFtIHZlY3RvclNvdXJjZSB0aGUgdmVjdG9yIHNvdXJjZSB0byBiZSBjcmVhdGVkXHJcbiAgICogQHBhcmFtIHVybCB0aGUgdXJsIHN0cmluZyBvciBmdW5jdGlvbiB0byByZXRyaWV2ZSB0aGUgZGF0YVxyXG4gICAqIEBwYXJhbSBpbnRlcmNlcHRvciB0aGUgaW50ZXJjZXB0b3Igb2YgdGhlIGRhdGFcclxuICAgKiBAcGFyYW0gZXh0ZW50IHRoZSBleHRlbnQgb2YgdGhlIHJlcXVlc3RlZCBkYXRhXHJcbiAgICogQHBhcmFtIHJlc29sdXRpb24gdGhlIGN1cnJlbnQgcmVzb2x1dGlvblxyXG4gICAqIEBwYXJhbSBwcm9qZWN0aW9uIHRoZSBwcm9qZWN0aW9uIHRvIHJldHJpZXZlIHRoZSBkYXRhXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjdXN0b21Mb2FkZXIoXHJcbiAgICB2ZWN0b3JTb3VyY2UsXHJcbiAgICB1cmwsXHJcbiAgICBpbnRlcmNlcHRvcixcclxuICAgIGV4dGVudCxcclxuICAgIHJlc29sdXRpb24sXHJcbiAgICBwcm9qZWN0aW9uLFxyXG4gICAgc3VjY2VzcyxcclxuICAgIGZhaWx1cmVcclxuICApIHtcclxuICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgbGV0IG1vZGlmaWVkVXJsID0gdXJsO1xyXG4gICAgaWYgKHR5cGVvZiB1cmwgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgY29uc3QgYWx0ZXJlZFVybFdpdGhLZXlBdXRoID0gaW50ZXJjZXB0b3IuYWx0ZXJVcmxXaXRoS2V5QXV0aCh1cmwpO1xyXG4gICAgICBpZiAoYWx0ZXJlZFVybFdpdGhLZXlBdXRoKSB7XHJcbiAgICAgICAgbW9kaWZpZWRVcmwgPSBhbHRlcmVkVXJsV2l0aEtleUF1dGg7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG1vZGlmaWVkVXJsID0gdXJsKGV4dGVudCwgcmVzb2x1dGlvbiwgcHJvamVjdGlvbik7XHJcbiAgICB9XHJcbiAgICB4aHIub3BlbiggJ0dFVCcsIG1vZGlmaWVkVXJsKTtcclxuICAgIGNvbnN0IGZvcm1hdCA9IHZlY3RvclNvdXJjZS5nZXRGb3JtYXQoKTtcclxuICAgIGlmIChmb3JtYXQuZ2V0VHlwZSgpID09PSBGb3JtYXRUeXBlLkFSUkFZX0JVRkZFUikge1xyXG4gICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2FycmF5YnVmZmVyJztcclxuICAgIH1cclxuICAgIGlmIChpbnRlcmNlcHRvcikge1xyXG4gICAgICBpbnRlcmNlcHRvci5pbnRlcmNlcHRYaHIoeGhyLCBtb2RpZmllZFVybCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgb25FcnJvciA9ICgpID0+IHtcclxuICAgICAgdmVjdG9yU291cmNlLnJlbW92ZUxvYWRlZEV4dGVudChleHRlbnQpO1xyXG4gICAgICBmYWlsdXJlKCk7XHJcbiAgICB9O1xyXG4gICAgeGhyLm9uZXJyb3IgPSBvbkVycm9yO1xyXG4gICAgeGhyLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgLy8gc3RhdHVzIHdpbGwgYmUgMCBmb3IgZmlsZTovLyB1cmxzXHJcbiAgICAgIGlmICgheGhyLnN0YXR1cyB8fCAoeGhyLnN0YXR1cyA+PSAyMDAgJiYgeGhyLnN0YXR1cyA8IDMwMCkpIHtcclxuICAgICAgICBjb25zdCB0eXBlID0gZm9ybWF0LmdldFR5cGUoKTtcclxuICAgICAgICBsZXQgc291cmNlO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBGb3JtYXRUeXBlLkpTT04gfHwgdHlwZSA9PT0gRm9ybWF0VHlwZS5URVhUKSB7XHJcbiAgICAgICAgICBzb3VyY2UgPSB4aHIucmVzcG9uc2VUZXh0O1xyXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gRm9ybWF0VHlwZS5YTUwpIHtcclxuICAgICAgICAgIHNvdXJjZSA9IHhoci5yZXNwb25zZVhNTDtcclxuICAgICAgICAgIGlmICghc291cmNlKSB7XHJcbiAgICAgICAgICAgIHNvdXJjZSA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoXHJcbiAgICAgICAgICAgICAgeGhyLnJlc3BvbnNlVGV4dCxcclxuICAgICAgICAgICAgICAnYXBwbGljYXRpb24veG1sJ1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gRm9ybWF0VHlwZS5BUlJBWV9CVUZGRVIpIHtcclxuICAgICAgICAgIHNvdXJjZSA9IHhoci5yZXNwb25zZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNvdXJjZSkge1xyXG4gICAgICAgICAgY29uc3QgZmVhdHVyZXMgPSBmb3JtYXQucmVhZEZlYXR1cmVzKHNvdXJjZSwgeyBleHRlbnQsIGZlYXR1cmVQcm9qZWN0aW9uOiBwcm9qZWN0aW9uIH0pO1xyXG4gICAgICAgICAgdmVjdG9yU291cmNlLmFkZEZlYXR1cmVzKGZlYXR1cmVzLCBmb3JtYXQucmVhZFByb2plY3Rpb24oc291cmNlKSk7XHJcbiAgICAgICAgICBzdWNjZXNzKGZlYXR1cmVzKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgb25FcnJvcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBvbkVycm9yKCk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICB4aHIuc2VuZCgpO1xyXG4gIH1cclxufVxyXG4iXX0=
376
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVjdG9yLWxheWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2VvL3NyYy9saWIvbGF5ZXIvc2hhcmVkL2xheWVycy92ZWN0b3ItbGF5ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxhQUFhLE1BQU0saUJBQWlCLENBQUM7QUFHNUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxPQUFPLElBQUksWUFBWSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUM3QyxPQUFPLFVBQVUsTUFBTSxzQkFBc0IsQ0FBQztBQUU5QyxPQUFPLFlBQVksTUFBTSxvQkFBb0IsQ0FBQztBQUM5QyxPQUFPLEtBQUssTUFBTSxNQUFNLFNBQVMsQ0FBQztBQVFsQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTVDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFLaEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBR3BHLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTlELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUIsTUFBTSxPQUFPLFdBQVksU0FBUSxLQUFLO0lBb0JwQyxZQUNFLE9BQTJCLEVBQ3BCLGNBQStCLEVBQy9CLGVBQWlDLEVBQ2hDLGlCQUFxQyxFQUNyQyxZQUEyQjtRQUVuQyxLQUFLLENBQUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUx6QyxtQkFBYyxHQUFkLGNBQWMsQ0FBaUI7UUFDL0Isb0JBQWUsR0FBZixlQUFlLENBQWtCO1FBQ2hDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBb0I7UUFDckMsaUJBQVksR0FBWixZQUFZLENBQWU7UUFHbkMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO0lBQ3RDLENBQUM7SUFsQkQsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsS0FBSyxLQUFLLENBQUM7SUFDMUMsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEtBQUssS0FBSyxDQUFDO0lBQzNDLENBQUM7SUFjUyxhQUFhO1FBQ3JCLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDaEQsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQWdDO1NBQzdELENBQUMsQ0FBQztRQUVILElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUU7WUFDMUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUNuQixZQUFZLEVBQ1osVUFBUyxDQUFDO2dCQUNSLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3hCLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQ2IsQ0FBQztTQUNIO1FBRUQsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRTtZQUM3QixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUNwRDtRQUVELE1BQU0sTUFBTSxHQUFHLElBQUksYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzVDLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQWdDLENBQUM7UUFDdEUsTUFBTSxHQUFHLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2xDLElBQUksR0FBRyxFQUFFO1lBQ1AsSUFBSSxNQUFNLENBQUM7WUFDWCxNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsYUFBcUMsQ0FBQztZQUNuRSxJQUFJLENBQUEsVUFBVSxhQUFWLFVBQVUsdUJBQVYsVUFBVSxDQUFFLElBQUksTUFBSyxLQUFLLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRTtnQkFDN0UsTUFBTSxHQUFHLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFO29CQUN0RCxJQUFJLENBQUMsZUFBZSxDQUNsQixZQUFZLEVBQ1osVUFBVSxFQUNWLElBQUksQ0FBQyxlQUFlLEVBQ3BCLE1BQU0sRUFDTixVQUFVLEVBQ1YsSUFBSSxFQUNKLE9BQU8sRUFDUCxPQUFPLENBQ1IsQ0FBQztnQkFDSixDQUFDLENBQUM7YUFDSDtpQkFBTTtnQkFDTCxNQUFNLEdBQUcsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUU7b0JBQ3RELElBQUksQ0FBQyxZQUFZLENBQ2YsWUFBWSxFQUNaLEdBQUcsRUFDSCxJQUFJLENBQUMsZUFBZSxFQUNwQixNQUFNLEVBQ04sVUFBVSxFQUNWLElBQUksRUFDSixPQUFPLEVBQ1AsT0FBTyxDQUNSLENBQUM7Z0JBQ0osQ0FBQyxDQUFDO2FBQ0g7WUFDRCxJQUFJLE1BQU0sRUFBRTtnQkFDVixZQUFZLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ2hDO1NBQ0Y7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRVMsS0FBSyxDQUFDLE9BQU87UUFDckIsTUFBTSxLQUFLLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNuQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRWpFLFNBQVMsT0FBTyxDQUFDLEtBQUs7WUFDcEIsTUFBTSxhQUFhLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUMsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztZQUNwQyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDaEQsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7WUFDeEMsTUFBTSxZQUFZLEdBQUcsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztZQUMvRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDO1lBQzFDLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLENBQUM7WUFDckUsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQztZQUN0QixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRTtpQkFDaEIsZ0JBQWdCLEVBQUU7aUJBQ2xCLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDO2lCQUNuQixJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDZixPQUFPLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMzQixDQUFDLENBQUMsQ0FBQztZQUNMLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ1YsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzNEO1lBQ0QsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBRWpDLFFBQVEsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUN2QyxLQUFLLE9BQU87b0JBQ1YsSUFBRyxVQUFVLENBQUMsUUFBUSxFQUFFLEtBQUssSUFBSTt3QkFDL0IsT0FBTyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsU0FBUyxLQUFLLFVBQVUsRUFBQzt3QkFDdEQsTUFBTSxNQUFNLEdBQ1osT0FBTyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO3dCQUNoRSxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUN4QyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO3FCQUMzQztvQkFFRCxNQUFNO2dCQUNSLEtBQUssWUFBWTtvQkFDZixPQUFPO29CQUNQLElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRSxFQUFFO3dCQUN6QixVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO3dCQUNyRCxVQUFVOzZCQUNQLFFBQVEsRUFBRTs2QkFDVixTQUFTLEVBQUU7NkJBQ1gsUUFBUSxDQUNQLE9BQU8sQ0FBQyxZQUFZLENBQUM7NEJBQ25CLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUNyRCxDQUFDO3FCQUNMO29CQUNELElBQUksVUFBVSxDQUFDLFNBQVMsRUFBRSxFQUFFO3dCQUMxQixVQUFVLENBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO3dCQUMxQyxVQUFVOzZCQUNQLFNBQVMsRUFBRTs2QkFDWCxRQUFRLENBQ1AsT0FBTyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUNoRSxDQUFDO3FCQUNMO29CQUNELE1BQU07Z0JBQ1IsS0FBSyxTQUFTO29CQUNaLE9BQU87b0JBQ1AsSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFLEVBQUU7d0JBQ3pCLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7cUJBQ3BEO29CQUNELElBQUksVUFBVSxDQUFDLE9BQU8sRUFBRSxFQUFFO3dCQUN4QixVQUFVLENBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO3FCQUN6QztvQkFDRCxNQUFNO2FBQ1Q7WUFFRCxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZCLGFBQWEsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDbkMsYUFBYSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUV0QyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUU7Z0JBQzdDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDckIsdUJBQXVCO2dCQUN2QixzRUFBc0U7Z0JBQ3RFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNyQixPQUFPO2FBQ1I7WUFDRCxvREFBb0Q7WUFDcEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdkIsQ0FBQztJQUNILENBQUM7SUFFTSxNQUFNLENBQUMsR0FBdUI7UUFDbkMsSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFO1lBQ3JCLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDNUI7YUFBTTtZQUNMLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ2xDO1FBQ0QsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwQixDQUFDO0lBRU0sU0FBUztRQUNkLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFTSxhQUFhO1FBQ2xCLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FDbkIsWUFBWSxFQUNaLFVBQVMsQ0FBQztZQUNSLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDaEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDdkI7UUFDSCxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUNiLENBQUM7SUFDSixDQUFDO0lBRU0sa0JBQWtCLENBQUMsRUFBbUI7UUFDM0MsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FDakQsWUFBWSxFQUNaLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FDakMsQ0FBQztJQUNKLENBQUM7SUFDTSxrQkFBa0IsQ0FBQyxFQUFtQjtRQUMzQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbkQsSUFBSSxJQUFJLEVBQUU7WUFDUixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7U0FDdEU7SUFDSCxDQUFDO0lBRU0sWUFBWSxDQUFDLEVBQUUsRUFBRSxJQUFJO1FBQzFCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUMvQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDN0I7SUFDSCxDQUFDO0lBRU0sbUJBQW1CLENBQUMsRUFBb0I7UUFDN0MsT0FBTyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7O09BWUc7SUFDSSxlQUFlLENBQ3BCLFlBQVksRUFDWixPQUFPLEVBQ1AsV0FBVyxFQUNYLE1BQU0sRUFDTixVQUFVLEVBQ1YsSUFBSSxFQUNKLE9BQU8sRUFDUCxPQUFPLEVBQ1AsV0FBcUI7UUFFckI7WUFDRSxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDO1lBQ3BDLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksWUFBWSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDekYsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3BFLFNBQVMsQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDeEQsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUNsQixPQUFPLEVBQ1AsYUFBYSxFQUNiLE9BQU8sRUFDTixPQUEwQyxDQUFDLFVBQVUsRUFDdEQsV0FBVyxDQUFDLENBQUM7WUFDZixJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7WUFDbkIsSUFBSSxTQUFTLENBQUMsT0FBTyxLQUFLLE9BQU8sSUFBSSxTQUFTLENBQUMsV0FBVyxHQUFHLGtCQUFrQixFQUFFO2dCQUMvRSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUM7Z0JBQ3pCLE9BQU8sVUFBVSxHQUFHLFNBQVMsQ0FBQyxXQUFXLEVBQUU7b0JBQ3pDLElBQUksVUFBVSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxXQUFXLEVBQUUsUUFBUSxHQUFHLFdBQVcsQ0FBQyxDQUFDO29CQUN2RixVQUFVLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsR0FBRyxDQUFDLENBQUM7b0JBQ3JELFVBQVUsSUFBSSxjQUFjLEdBQUcsVUFBVSxDQUFDO29CQUMxQyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztvQkFDL0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO29CQUNySCxVQUFVLElBQUksV0FBVyxDQUFDO2lCQUMzQjthQUNGO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsU0FBUyxDQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7YUFDekg7U0FDRjtJQUNILENBQUM7SUFHRDs7Ozs7Ozs7Ozs7O09BWUc7SUFDSyxXQUFXLENBQ2pCLFlBQXdDLEVBQ3hDLFdBQVcsRUFDWCxNQUFNLEVBQ04sY0FBYyxFQUNkLGlCQUFpQixFQUNqQixHQUFXLEVBQ1gsU0FBaUIsRUFDakIsT0FBTyxFQUFFLE9BQU87UUFFaEIsTUFBTSxnQkFBZ0IsR0FBSSxJQUFJLENBQUMsVUFBNEIsQ0FBQyx5QkFBeUIsQ0FBQztRQUN0RixNQUFNLEdBQUcsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO1FBQ2pDLE1BQU0scUJBQXFCLEdBQUcsV0FBVyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25FLElBQUksV0FBVyxHQUFHLEdBQUcsQ0FBQztRQUN0QixJQUFJLHFCQUFxQixFQUFFO1lBQ3pCLFdBQVcsR0FBRyxxQkFBcUIsQ0FBQztTQUNyQztRQUNELEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQzdCLElBQUksV0FBVyxFQUFFO1lBQ2YsV0FBVyxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUM7U0FDNUM7UUFDRCxNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUU7WUFDbkIsWUFBWSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3hDLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQyxDQUFDO1FBQ0YsR0FBRyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdEIsR0FBRyxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUU7WUFDaEIsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ3JELE1BQU0sUUFBUSxHQUNaLFlBQVk7cUJBQ1QsU0FBUyxFQUFFO3FCQUNYLFlBQVksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLENBQTRCLENBQUM7Z0JBQ3RHLDZCQUE2QjtnQkFDN0I7O21CQUVHO2dCQUNILGlFQUFpRTtnQkFDakUsSUFBSSxnQkFBZ0IsS0FBTSxJQUFJLENBQUMsVUFBNEIsQ0FBQyx5QkFBeUIsRUFDckY7b0JBQ0ksWUFBWSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDbkMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2lCQUNyQjtxQkFDSTtvQkFDRCxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQ2Y7YUFDRjtpQkFBTTtnQkFDTCxPQUFPLEVBQUUsQ0FBQzthQUNYO1FBQ0gsQ0FBQyxDQUFDO1FBQ0YsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2IsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNLLFlBQVksQ0FDbEIsWUFBWSxFQUNaLEdBQUcsRUFDSCxXQUFXLEVBQ1gsTUFBTSxFQUNOLFVBQVUsRUFDVixVQUFVLEVBQ1YsT0FBTyxFQUNQLE9BQU87UUFFUCxNQUFNLEdBQUcsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO1FBQ2pDLElBQUksV0FBVyxHQUFHLEdBQUcsQ0FBQztRQUN0QixJQUFJLE9BQU8sR0FBRyxLQUFLLFVBQVUsRUFBRTtZQUM3QixNQUFNLHFCQUFxQixHQUFHLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNuRSxJQUFJLHFCQUFxQixFQUFFO2dCQUN6QixXQUFXLEdBQUcscUJBQXFCLENBQUM7YUFDckM7U0FDRjthQUFNO1lBQ0wsV0FBVyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1NBQ25EO1FBRUQsSUFBSSxJQUFJLENBQUMsaUJBQWlCLElBQUksT0FBTyxHQUFHLEtBQUssVUFBVSxFQUFFO1lBQ3ZELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN4QyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7WUFFOUIsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDO1lBQ3hCLE1BQU0sT0FBTyxHQUFHLEdBQUcsRUFBRTtnQkFDbkIsWUFBWSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN4QyxPQUFPLEVBQUUsQ0FBQztZQUNaLENBQUMsQ0FBQztZQUVGLE1BQU0sT0FBTyxHQUFxQixFQUFFLFlBQVksRUFBRSxDQUFDO1lBQ25ELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDOUQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQztpQkFDekQsSUFBSSxDQUNILEtBQUssRUFBRSxFQUNQLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNqQixPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEdBQUcsQ0FBQztZQUNaLENBQUMsQ0FBQyxDQUNILENBQ0osQ0FBQztpQkFDRCxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDbkIsSUFBSSxPQUFPLEVBQUU7b0JBQ1gsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLFNBQVMsRUFBRSxDQUFDO29CQUN4QyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQzlCLElBQUksTUFBTSxDQUFDO29CQUNYLElBQUksSUFBSSxLQUFLLFVBQVUsQ0FBQyxJQUFJLElBQUksSUFBSSxLQUFLLFVBQVUsQ0FBQyxJQUFJLEVBQUU7d0JBQ3hELE1BQU0sR0FBRyxPQUFPLENBQUM7cUJBQ2xCO3lCQUFNLElBQUksSUFBSSxLQUFLLFVBQVUsQ0FBQyxHQUFHLEVBQUU7d0JBQ2xDLE1BQU0sR0FBRyxPQUFPLENBQUM7d0JBQ2pCLElBQUksQ0FBQyxNQUFNLEVBQUU7NEJBQ1gsTUFBTSxHQUFHLElBQUksU0FBUyxFQUFFLENBQUMsZUFBZSxDQUN0QyxPQUFPLEVBQ1AsaUJBQWlCLENBQ2xCLENBQUM7eUJBQ0g7cUJBQ0Y7eUJBQU0sSUFBSSxJQUFJLEtBQUssVUFBVSxDQUFDLFlBQVksRUFBRTt3QkFDM0MsTUFBTSxHQUFHLE9BQU8sQ0FBQztxQkFDbEI7b0JBQ0QsSUFBSSxNQUFNLEVBQUU7d0JBQ1YsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQzt3QkFDeEYsWUFBWSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUNsRSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7cUJBQ25CO3lCQUFNO3dCQUNMLE9BQU8sRUFBRSxDQUFDO3FCQUNYO2lCQUNGO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FFTjthQUFNO1lBQ1AsR0FBRyxDQUFDLElBQUksQ0FBRSxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDOUIsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3hDLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxLQUFLLFVBQVUsQ0FBQyxZQUFZLEVBQUU7Z0JBQ2hELEdBQUcsQ0FBQyxZQUFZLEdBQUcsYUFBYSxDQUFDO2FBQ2xDO1lBQ0QsSUFBSSxXQUFXLEVBQUU7Z0JBQ2YsV0FBVyxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUM7YUFDNUM7WUFFRCxNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUU7Z0JBQ25CLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDeEMsT0FBTyxFQUFFLENBQUM7WUFDWixDQUFDLENBQUM7WUFDRixHQUFHLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztZQUN0QixHQUFHLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRTtnQkFDaEIsb0NBQW9DO2dCQUNwQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLEVBQUU7b0JBQzFELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxNQUFNLENBQUM7b0JBQ1gsSUFBSSxJQUFJLEtBQUssVUFBVSxDQUFDLElBQUksSUFBSSxJQUFJLEtBQUssVUFBVSxDQUFDLElBQUksRUFBRTt3QkFDeEQsTUFBTSxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUM7cUJBQzNCO3lCQUFNLElBQUksSUFBSSxLQUFLLFVBQVUsQ0FBQyxHQUFHLEVBQUU7d0JBQ2xDLE1BQU0sR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDO3dCQUN6QixJQUFJLENBQUMsTUFBTSxFQUFFOzRCQUNYLE1BQU0sR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDLGVBQWUsQ0FDdEMsR0FBRyxDQUFDLFlBQVksRUFDaEIsaUJBQWlCLENBQ2xCLENBQUM7eUJBQ0g7cUJBQ0Y7eUJBQU0sSUFBSSxJQUFJLEtBQUssVUFBVSxDQUFDLFlBQVksRUFBRTt3QkFDM0MsTUFBTSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUM7cUJBQ3ZCO29CQUNELElBQUksTUFBTSxFQUFFO3dCQUNWLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7d0JBQ3hGLFlBQVksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDbEUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO3FCQUNuQjt5QkFBTTt3QkFDTCxPQUFPLEVBQUUsQ0FBQztxQkFDWDtpQkFDRjtxQkFBTTtvQkFDTCxPQUFPLEVBQUUsQ0FBQztpQkFDWDtZQUNILENBQUMsQ0FBQztZQUNGLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNaO0lBQ0QsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG9sTGF5ZXJWZWN0b3IgZnJvbSAnb2wvbGF5ZXIvVmVjdG9yJztcbmltcG9ydCBvbFNvdXJjZVZlY3RvciBmcm9tICdvbC9zb3VyY2UvVmVjdG9yJztcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBPbEdlb21ldHJ5IH0gZnJvbSAnb2wvZ2VvbS9HZW9tZXRyeSc7XG5pbXBvcnQgeyB1bkJ5S2V5IH0gZnJvbSAnb2wvT2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBlYXNlT3V0IH0gZnJvbSAnb2wvZWFzaW5nJztcbmltcG9ydCB7IGFzQXJyYXkgYXMgQ29sb3JBc0FycmF5IH0gZnJvbSAnb2wvY29sb3InO1xuaW1wb3J0IHsgZ2V0VmVjdG9yQ29udGV4dCB9IGZyb20gJ29sL3JlbmRlcic7XG5pbXBvcnQgRm9ybWF0VHlwZSBmcm9tICdvbC9mb3JtYXQvRm9ybWF0VHlwZSc7XG5pbXBvcnQgb2xGZWF0dXJlIGZyb20gJ29sL0ZlYXR1cmUnO1xuaW1wb3J0IG9sUHJvamVjdGlvbiBmcm9tICdvbC9wcm9qL1Byb2plY3Rpb24nO1xuaW1wb3J0ICogYXMgb2xwcm9qIGZyb20gJ29sL3Byb2onO1xuXG5pbXBvcnQgeyBGZWF0dXJlRGF0YVNvdXJjZSB9IGZyb20gJy4uLy4uLy4uL2RhdGFzb3VyY2Uvc2hhcmVkL2RhdGFzb3VyY2VzL2ZlYXR1cmUtZGF0YXNvdXJjZSc7XG5pbXBvcnQgeyBXRlNEYXRhU291cmNlIH0gZnJvbSAnLi4vLi4vLi4vZGF0YXNvdXJjZS9zaGFyZWQvZGF0YXNvdXJjZXMvd2ZzLWRhdGFzb3VyY2UnO1xuaW1wb3J0IHsgQXJjR0lTUmVzdERhdGFTb3VyY2UgfSBmcm9tICcuLi8uLi8uLi9kYXRhc291cmNlL3NoYXJlZC9kYXRhc291cmNlcy9hcmNnaXNyZXN0LWRhdGFzb3VyY2UnO1xuaW1wb3J0IHsgV2ViU29ja2V0RGF0YVNvdXJjZSB9IGZyb20gJy4uLy4uLy4uL2RhdGFzb3VyY2Uvc2hhcmVkL2RhdGFzb3VyY2VzL3dlYnNvY2tldC1kYXRhc291cmNlJztcbmltcG9ydCB7IENsdXN0ZXJEYXRhU291cmNlIH0gZnJvbSAnLi4vLi4vLi4vZGF0YXNvdXJjZS9zaGFyZWQvZGF0YXNvdXJjZXMvY2x1c3Rlci1kYXRhc291cmNlJztcblxuaW1wb3J0IHsgVmVjdG9yV2F0Y2hlciB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IElnb01hcCB9IGZyb20gJy4uLy4uLy4uL21hcCc7XG5pbXBvcnQgeyBMYXllciB9IGZyb20gJy4vbGF5ZXInO1xuaW1wb3J0IHsgVmVjdG9yTGF5ZXJPcHRpb25zIH0gZnJvbSAnLi92ZWN0b3ItbGF5ZXIuaW50ZXJmYWNlJztcbmltcG9ydCB7IEF1dGhJbnRlcmNlcHRvciB9IGZyb20gJ0BpZ28yL2F1dGgnO1xuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdAaWdvMi9jb3JlJztcbmltcG9ydCB7IFdGU0RhdGFTb3VyY2VPcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vZGF0YXNvdXJjZS9zaGFyZWQvZGF0YXNvdXJjZXMvd2ZzLWRhdGFzb3VyY2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IGJ1aWxkVXJsLCBkZWZhdWx0TWF4RmVhdHVyZXMgfSBmcm9tICcuLi8uLi8uLi9kYXRhc291cmNlL3NoYXJlZC9kYXRhc291cmNlcy93bXMtd2ZzLnV0aWxzJztcbmltcG9ydCB7IE9nY0ZpbHRlcmFibGVEYXRhU291cmNlT3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uL2ZpbHRlci9zaGFyZWQvb2djLWZpbHRlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgR2VvTmV0d29ya1NlcnZpY2UsIFNpbXBsZUdldE9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi9vZmZsaW5lL3NoYXJlZC9nZW8tbmV0d29yay5zZXJ2aWNlJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGNvbmNhdE1hcCwgZmlyc3QgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBHZW9EQlNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9vZmZsaW5lL2dlb0RCL2dlb0RCLnNlcnZpY2UnO1xuaW1wb3J0IHsgb2YgfSBmcm9tICdyeGpzJztcbmV4cG9ydCBjbGFzcyBWZWN0b3JMYXllciBleHRlbmRzIExheWVyIHtcbiAgcHVibGljIGRhdGFTb3VyY2U6XG4gICAgfCBGZWF0dXJlRGF0YVNvdXJjZVxuICAgIHwgV0ZTRGF0YVNvdXJjZVxuICAgIHwgQXJjR0lTUmVzdERhdGFTb3VyY2VcbiAgICB8IFdlYlNvY2tldERhdGFTb3VyY2VcbiAgICB8IENsdXN0ZXJEYXRhU291cmNlO1xuICBwdWJsaWMgb3B0aW9uczogVmVjdG9yTGF5ZXJPcHRpb25zO1xuICBwdWJsaWMgb2w6IG9sTGF5ZXJWZWN0b3I8b2xTb3VyY2VWZWN0b3I8T2xHZW9tZXRyeT4+O1xuICBwcml2YXRlIHdhdGNoZXI6IFZlY3RvcldhdGNoZXI7XG4gIHByaXZhdGUgdHJhY2tGZWF0dXJlTGlzdGVuZXJJZDtcblxuICBnZXQgYnJvd3NhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYnJvd3NhYmxlICE9PSBmYWxzZTtcbiAgfVxuXG4gIGdldCBleHBvcnRhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZXhwb3J0YWJsZSAhPT0gZmFsc2U7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBvcHRpb25zOiBWZWN0b3JMYXllck9wdGlvbnMsXG4gICAgcHVibGljIG1lc3NhZ2VTZXJ2aWNlPzogTWVzc2FnZVNlcnZpY2UsXG4gICAgcHVibGljIGF1dGhJbnRlcmNlcHRvcj86IEF1dGhJbnRlcmNlcHRvcixcbiAgICBwcml2YXRlIGdlb05ldHdvcmtTZXJ2aWNlPzogR2VvTmV0d29ya1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBnZW9EQlNlcnZpY2U/OiBHZW9EQlNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIob3B0aW9ucywgbWVzc2FnZVNlcnZpY2UsIGF1dGhJbnRlcmNlcHRvcik7XG4gICAgdGhpcy53YXRjaGVyID0gbmV3IFZlY3RvcldhdGNoZXIodGhpcyk7XG4gICAgdGhpcy5zdGF0dXMkID0gdGhpcy53YXRjaGVyLnN0YXR1cyQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlT2xMYXllcigpOiBvbExheWVyVmVjdG9yPG9sU291cmNlVmVjdG9yPE9sR2VvbWV0cnk+PiB7XG4gICAgY29uc3Qgb2xPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5vcHRpb25zLCB7XG4gICAgICBzb3VyY2U6IHRoaXMub3B0aW9ucy5zb3VyY2Uub2wgYXMgb2xTb3VyY2VWZWN0b3I8T2xHZW9tZXRyeT5cbiAgICB9KTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuYW5pbWF0aW9uKSB7XG4gICAgICB0aGlzLmRhdGFTb3VyY2Uub2wub24oXG4gICAgICAgICdhZGRmZWF0dXJlJyxcbiAgICAgICAgZnVuY3Rpb24oZSkge1xuICAgICAgICAgIHRoaXMuZmxhc2goZS5mZWF0dXJlKTtcbiAgICAgICAgfS5iaW5kKHRoaXMpXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMudHJhY2tGZWF0dXJlKSB7XG4gICAgICB0aGlzLmVuYWJsZVRyYWNrRmVhdHVyZSh0aGlzLm9wdGlvbnMudHJhY2tGZWF0dXJlKTtcbiAgICB9XG5cbiAgICBjb25zdCB2ZWN0b3IgPSBuZXcgb2xMYXllclZlY3RvcihvbE9wdGlvbnMpO1xuICAgIGNvbnN0IHZlY3RvclNvdXJjZSA9IHZlY3Rvci5nZXRTb3VyY2UoKSBhcyBvbFNvdXJjZVZlY3RvcjxPbEdlb21ldHJ5PjtcbiAgICBjb25zdCB1cmwgPSB2ZWN0b3JTb3VyY2UuZ2V0VXJsKCk7XG4gICAgaWYgKHVybCkge1xuICAgICAgbGV0IGxvYWRlcjtcbiAgICAgIGNvbnN0IHdmc09wdGlvbnMgPSBvbE9wdGlvbnMuc291cmNlT3B0aW9ucyBhcyBXRlNEYXRhU291cmNlT3B0aW9ucztcbiAgICAgIGlmICh3ZnNPcHRpb25zPy50eXBlID09PSAnd2ZzJyAmJiAod2ZzT3B0aW9ucy5wYXJhbXMgfHwgd2ZzT3B0aW9ucy5wYXJhbXNXRlMpKSB7XG4gICAgICAgIGxvYWRlciA9IChleHRlbnQsIHJlc29sdXRpb24sIHByb2osIHN1Y2Nlc3MsIGZhaWx1cmUpID0+IHtcbiAgICAgICAgICB0aGlzLmN1c3RvbVdGU0xvYWRlcihcbiAgICAgICAgICAgIHZlY3RvclNvdXJjZSxcbiAgICAgICAgICAgIHdmc09wdGlvbnMsXG4gICAgICAgICAgICB0aGlzLmF1dGhJbnRlcmNlcHRvcixcbiAgICAgICAgICAgIGV4dGVudCxcbiAgICAgICAgICAgIHJlc29sdXRpb24sXG4gICAgICAgICAgICBwcm9qLFxuICAgICAgICAgICAgc3VjY2VzcyxcbiAgICAgICAgICAgIGZhaWx1cmVcbiAgICAgICAgICApO1xuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9hZGVyID0gKGV4dGVudCwgcmVzb2x1dGlvbiwgcHJvaiwgc3VjY2VzcywgZmFpbHVyZSkgPT4ge1xuICAgICAgICAgIHRoaXMuY3VzdG9tTG9hZGVyKFxuICAgICAgICAgICAgdmVjdG9yU291cmNlLFxuICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgdGhpcy5hdXRoSW50ZXJjZXB0b3IsXG4gICAgICAgICAgICBleHRlbnQsXG4gICAgICAgICAgICByZXNvbHV0aW9uLFxuICAgICAgICAgICAgcHJvaixcbiAgICAgICAgICAgIHN1Y2Nlc3MsXG4gICAgICAgICAgICBmYWlsdXJlXG4gICAgICAgICAgKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmIChsb2FkZXIpIHtcbiAgICAgICAgdmVjdG9yU291cmNlLnNldExvYWRlcihsb2FkZXIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmVjdG9yO1xuICB9XG5cbiAgcHJvdGVjdGVkIGZsYXNoKGZlYXR1cmUpIHtcbiAgICBjb25zdCBzdGFydCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIGNvbnN0IGxpc3RlbmVyS2V5ID0gdGhpcy5vbC5vbigncG9zdHJlbmRlcicsIGFuaW1hdGUuYmluZCh0aGlzKSk7XG5cbiAgICBmdW5jdGlvbiBhbmltYXRlKGV2ZW50KSB7XG4gICAgICBjb25zdCB2ZWN0b3JDb250ZXh0ID0gZ2V0VmVjdG9yQ29udGV4dChldmVudCk7XG4gICAgICBjb25zdCBmcmFtZVN0YXRlID0gZXZlbnQuZnJhbWVTdGF0ZTtcbiAgICAgIGNvbnN0IGZsYXNoR2VvbSA9IGZlYXR1cmUuZ2V0R2VvbWV0cnkoKS5jbG9uZSgpO1xuICAgICAgY29uc3QgZWxhcHNlZCA9IGZyYW1lU3RhdGUudGltZSAtIHN0YXJ0O1xuICAgICAgY29uc3QgZWxhcHNlZFJhdGlvID0gZWxhcHNlZCAvIHRoaXMub3B0aW9ucy5hbmltYXRpb24uZHVyYXRpb247XG4gICAgICBjb25zdCBvcGFjaXR5ID0gZWFzZU91dCgxIC0gZWxhcHNlZFJhdGlvKTtcbiAgICAgIGNvbnN0IG5ld0NvbG9yID0gQ29sb3JBc0FycmF5KHRoaXMub3B0aW9ucy5hbmltYXRpb24uY29sb3IgfHwgJ3JlZCcpO1xuICAgICAgbmV3Q29sb3JbM10gPSBvcGFjaXR5O1xuICAgICAgbGV0IHN0eWxlID0gdGhpcy5vbFxuICAgICAgICAuZ2V0U3R5bGVGdW5jdGlvbigpXG4gICAgICAgIC5jYWxsKHRoaXMsIGZlYXR1cmUpXG4gICAgICAgIC5maW5kKChzdHlsZTIpID0+IHtcbiAgICAgICAgICByZXR1cm4gc3R5bGUyLmdldEltYWdlKCk7XG4gICAgICAgIH0pO1xuICAgICAgaWYgKCFzdHlsZSkge1xuICAgICAgICBzdHlsZSA9IHRoaXMub2wuZ2V0U3R5bGVGdW5jdGlvbigpLmNhbGwodGhpcywgZmVhdHVyZSlbMF07XG4gICAgICB9XG4gICAgICBjb25zdCBzdHlsZUNsb25lID0gc3R5bGUuY2xvbmUoKTtcblxuICAgICAgc3dpdGNoIChmZWF0dXJlLmdldEdlb21ldHJ5KCkuZ2V0VHlwZSgpKSB7XG4gICAgICAgIGNhc2UgJ1BvaW50JzpcbiAgICAgICAgICBpZihzdHlsZUNsb25lLmdldEltYWdlKCkgIT09IG51bGwgJiZcbiAgICAgICAgICAgIHR5cGVvZiBzdHlsZUNsb25lLmdldEltYWdlKCkuZ2V0UmFkaXVzID09PSAnZnVuY3Rpb24nKXtcbiAgICAgICAgICAgIGNvbnN0IHJhZGl1cyA9XG4gICAgICAgICAgICBlYXNlT3V0KGVsYXBzZWRSYXRpbykgKiAoc3R5bGVDbG9uZS5nZXRJbWFnZSgpLmdldFJhZGl1cygpICogMyk7XG4gICAgICAgICAgICBzdHlsZUNsb25lLmdldEltYWdlKCkuc2V0UmFkaXVzKHJhZGl1cyk7XG4gICAgICAgICAgICBzdHlsZUNsb25lLmdldEltYWdlKCkuc2V0T3BhY2l0eShvcGFjaXR5KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnTGluZVN0cmluZyc6XG4gICAgICAgICAgLy8gVE9ET1xuICAgICAgICAgIGlmIChzdHlsZUNsb25lLmdldEltYWdlKCkpIHtcbiAgICAgICAgICAgIHN0eWxlQ2xvbmUuZ2V0SW1hZ2UoKS5nZXRTdHJva2UoKS5zZXRDb2xvcihuZXdDb2xvcik7XG4gICAgICAgICAgICBzdHlsZUNsb25lXG4gICAgICAgICAgICAgIC5nZXRJbWFnZSgpXG4gICAgICAgICAgICAgIC5nZXRTdHJva2UoKVxuICAgICAgICAgICAgICAuc2V0V2lkdGgoXG4gICAgICAgICAgICAgICAgZWFzZU91dChlbGFwc2VkUmF0aW8pICpcbiAgICAgICAgICAgICAgICAgIChzdHlsZUNsb25lLmdldEltYWdlKCkuZ2V0U3Ryb2tlKCkuZ2V0V2lkdGgoKSAqIDMpXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzdHlsZUNsb25lLmdldFN0cm9rZSgpKSB7XG4gICAgICAgICAgICBzdHlsZUNsb25lLmdldFN0cm9rZSgpLnNldENvbG9yKG5ld0NvbG9yKTtcbiAgICAgICAgICAgIHN0eWxlQ2xvbmVcbiAgICAgICAgICAgICAgLmdldFN0cm9rZSgpXG4gICAgICAgICAgICAgIC5zZXRXaWR0aChcbiAgICAgICAgICAgICAgICBlYXNlT3V0KGVsYXBzZWRSYXRpbykgKiAoc3R5bGVDbG9uZS5nZXRTdHJva2UoKS5nZXRXaWR0aCgpICogMylcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1BvbHlnb24nOlxuICAgICAgICAgIC8vIFRPRE9cbiAgICAgICAgICBpZiAoc3R5bGVDbG9uZS5nZXRJbWFnZSgpKSB7XG4gICAgICAgICAgICBzdHlsZUNsb25lLmdldEltYWdlKCkuZ2V0RmlsbCgpLnNldENvbG9yKG5ld0NvbG9yKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHN0eWxlQ2xvbmUuZ2V0RmlsbCgpKSB7XG4gICAgICAgICAgICBzdHlsZUNsb25lLmdldEZpbGwoKS5zZXRDb2xvcihuZXdDb2xvcik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBzdHlsZUNsb25lLnNldFRleHQoJycpO1xuICAgICAgdmVjdG9yQ29udGV4dC5zZXRTdHlsZShzdHlsZUNsb25lKTtcbiAgICAgIHZlY3RvckNvbnRleHQuZHJhd0dlb21ldHJ5KGZsYXNoR2VvbSk7XG5cbiAgICAgIGlmIChlbGFwc2VkID4gdGhpcy5vcHRpb25zLmFuaW1hdGlvbi5kdXJhdGlvbikge1xuICAgICAgICB1bkJ5S2V5KGxpc3RlbmVyS2V5KTtcbiAgICAgICAgLy8gcmVtb3ZlIGxhc3QgZ2VvbWV0cnlcbiAgICAgICAgLy8gdGhlcmUgaXMgYSBsaXR0bGUgZmxhc2ggYmVmb3JlIGZlYXR1cmUgZGlzYXBwZWFyLCBiZXR0ZXIgc29sdXRpb24gP1xuICAgICAgICB0aGlzLm1hcC5vbC5yZW5kZXIoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gdGVsbCBPcGVuTGF5ZXJzIHRvIGNvbnRpbnVlIHBvc3Rjb21wb3NlIGFuaW1hdGlvblxuICAgICAgdGhpcy5tYXAub2wucmVuZGVyKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldE1hcChtYXA6IElnb01hcCB8IHVuZGVmaW5lZCkge1xuICAgIGlmIChtYXAgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy53YXRjaGVyLnVuc3Vic2NyaWJlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMud2F0Y2hlci5zdWJzY3JpYmUoKCkgPT4ge30pO1xuICAgIH1cbiAgICBzdXBlci5zZXRNYXAobWFwKTtcbiAgfVxuXG4gIHB1YmxpYyBvblVud2F0Y2goKSB7XG4gICAgdGhpcy5kYXRhU291cmNlLm9uVW53YXRjaCgpO1xuICAgIHRoaXMuc3RvcEFuaW1hdGlvbigpO1xuICB9XG5cbiAgcHVibGljIHN0b3BBbmltYXRpb24oKSB7XG4gICAgdGhpcy5kYXRhU291cmNlLm9sLnVuKFxuICAgICAgJ2FkZGZlYXR1cmUnLFxuICAgICAgZnVuY3Rpb24oZSkge1xuICAgICAgICBpZiAodGhpcy52aXNpYmxlKSB7XG4gICAgICAgICAgdGhpcy5mbGFzaChlLmZlYXR1cmUpO1xuICAgICAgICB9XG4gICAgICB9LmJpbmQodGhpcylcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGVuYWJsZVRyYWNrRmVhdHVyZShpZDogc3RyaW5nIHwgbnVtYmVyKSB7XG4gICAgdGhpcy50cmFja0ZlYXR1cmVMaXN0ZW5lcklkID0gdGhpcy5kYXRhU291cmNlLm9sLm9uKFxuICAgICAgJ2FkZGZlYXR1cmUnLFxuICAgICAgdGhpcy50cmFja0ZlYXR1cmUuYmluZCh0aGlzLCBpZClcbiAgICApO1xuICB9XG4gIHB1YmxpYyBjZW50ZXJNYXBPbkZlYXR1cmUoaWQ6IHN0cmluZyB8IG51bWJlcikge1xuICAgIGNvbnN0IGZlYXQgPSB0aGlzLmRhdGFTb3VyY2Uub2wuZ2V0RmVhdHVyZUJ5SWQoaWQpO1xuICAgIGlmIChmZWF0KSB7XG4gICAgICB0aGlzLm1hcC5vbC5nZXRWaWV3KCkuc2V0Q2VudGVyKGZlYXQuZ2V0R2VvbWV0cnkoKS5nZXRDb29yZGluYXRlcygpKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdHJhY2tGZWF0dXJlKGlkLCBmZWF0KSB7XG4gICAgaWYgKGZlYXQuZmVhdHVyZS5nZXRJZCgpID09PSBpZCAmJiB0aGlzLnZpc2libGUpIHtcbiAgICAgIHRoaXMuY2VudGVyTWFwT25GZWF0dXJlKGlkKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZGlzYWJsZVRyYWNrRmVhdHVyZShpZD86IHN0cmluZyB8IG51bWJlcikge1xuICAgIHVuQnlLZXkodGhpcy50cmFja0ZlYXR1cmVMaXN0ZW5lcklkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDdXN0b20gbG9hZGVyIGZvciBhIFdGUyBkYXRhc291cmNlXG4gICAqIEBpbnRlcm5hbFxuICAgKiBAcGFyYW0gdmVjdG9yU291cmNlIHRoZSB2ZWN0b3Igc291cmNlIHRvIGJlIGNyZWF0ZWRcbiAgICogQHBhcmFtIG9wdGlvbnMgb2xPcHRpb25zIGZyb20gc291cmNlXG4gICAqIEBwYXJhbSBpbnRlcmNlcHRvciB0aGUgaW50ZXJjZXB0b3Igb2YgdGhlIGRhdGFcbiAgICogQHBhcmFtIGV4dGVudCB0aGUgZXh0ZW50IG9mIHRoZSByZXF1ZXN0ZWQgZGF0YVxuICAgKiBAcGFyYW0gcmVzb2x1dGlvbiB0aGUgY3VycmVudCByZXNvbHV0aW9uXG4gICAqIEBwYXJhbSBwcm9qIHRoZSBwcm9qZWN0aW9uIHRvIHJldHJpZXZlIHRoZSBkYXRhXG4gICAqIEBwYXJhbSBzdWNjZXNzIHN1Y2Nlc3MgY2FsbGJhY2tcbiAgICogQHBhcmFtIGZhaWx1cmUgZmFpbHVyZSBjYWxsYmFja1xuICAgKiBAcGFyYW0gcmFuZG9tUGFyYW0gcmFuZG9tIHBhcmFtZXRlciB0byBlbnN1cmUgY2FjaGUgaXMgbm90IGNhdXNpbmcgcHJvYmxlbXMgaW4gcmV0cmlldmluZyBuZXcgZGF0YVxuICAgKi9cbiAgcHVibGljIGN1c3RvbVdGU0xvYWRlcihcbiAgICB2ZWN0b3JTb3VyY2UsXG4gICAgb3B0aW9ucyxcbiAgICBpbnRlcmNlcHRvcixcbiAgICBleHRlbnQsXG4gICAgcmVzb2x1dGlvbixcbiAgICBwcm9qLFxuICAgIHN1Y2Nlc3MsXG4gICAgZmFpbHVyZSxcbiAgICByYW5kb21QYXJhbT86IGJvb2xlYW5cbiAgKSB7XG4gICAge1xuICAgICAgY29uc3QgcGFyYW1zV0ZTID0gb3B0aW9ucy5wYXJhbXNXRlM7XG4gICAgICBjb25zdCB3ZnNQcm9qID0gcGFyYW1zV0ZTLnNyc05hbWUgPyBuZXcgb2xQcm9qZWN0aW9uKHsgY29kZTogcGFyYW1zV0ZTLnNyc05hbWUgfSkgOiBwcm9qO1xuICAgICAgY29uc3QgY3VycmVudEV4dGVudCA9IG9scHJvai50cmFuc2Zvcm1FeHRlbnQoZXh0ZW50LCBwcm9qLCB3ZnNQcm9qKTtcbiAgICAgIHBhcmFtc1dGUy5zcnNOYW1lID0gcGFyYW1zV0ZTLnNyc05hbWUgfHwgcHJvai5nZXRDb2RlKCk7XG4gICAgICBjb25zdCB1cmwgPSBidWlsZFVybChcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgY3VycmVudEV4dGVudCxcbiAgICAgICAgd2ZzUHJvaixcbiAgICAgICAgKG9wdGlvbnMgYXMgT2djRmlsdGVyYWJsZURhdGFTb3VyY2VPcHRpb25zKS5vZ2NGaWx0ZXJzLFxuICAgICAgICByYW5kb21QYXJhbSk7XG4gICAgICBsZXQgc3RhcnRJbmRleCA9IDA7XG4gICAgICBpZiAocGFyYW1zV0ZTLnZlcnNpb24gPT09ICcyLjAuMCcgJiYgcGFyYW1zV0ZTLm1heEZlYXR1cmVzID4gZGVmYXVsdE1heEZlYXR1cmVzKSB7XG4gICAgICAgIGNvbnN0IG5iT2ZGZWF0dXJlID0gMTAwMDtcbiAgICAgICAgd2hpbGUgKHN0YXJ0SW5kZXggPCBwYXJhbXNXRlMubWF4RmVhdHVyZXMpIHtcbiAgICAgICAgICBsZXQgYWx0ZXJlZFVybCA9IHVybC5yZXBsYWNlKCdjb3VudD0nICsgcGFyYW1zV0ZTLm1heEZlYXR1cmVzLCAnY291bnQ9JyArIG5iT2ZGZWF0dXJlKTtcbiAgICAgICAgICBhbHRlcmVkVXJsID0gYWx0ZXJlZFVybC5yZXBsYWNlKCdzdGFydEluZGV4PTAnLCAnMCcpO1xuICAgICAgICAgIGFsdGVyZWRVcmwgKz0gJyZzdGFydEluZGV4PScgKyBzdGFydEluZGV4O1xuICAgICAgICAgIGFsdGVyZWRVcmwucmVwbGFjZSgvJiYvZywgJyYnKTtcbiAgICAgICAgICB0aGlzLmdldEZlYXR1cmVzKHZlY3RvclNvdXJjZSwgaW50ZXJjZXB0b3IsIGN1cnJlbnRFeHRlbnQsIHdmc1Byb2osIHByb2osIGFsdGVyZWRVcmwsIG5iT2ZGZWF0dXJlLCBzdWNjZXNzLCBmYWlsdXJlKTtcbiAgICAgICAgICBzdGFydEluZGV4ICs9IG5iT2ZGZWF0dXJlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmdldEZlYXR1cmVzKHZlY3RvclNvdXJjZSwgaW50ZXJjZXB0b3IsIGN1cnJlbnRFeHRlbnQsIHdmc1Byb2osIHByb2osIHVybCwgcGFyYW1zV0ZTLm1heEZlYXR1cmVzLCBzdWNjZXNzLCBmYWlsdXJlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuXG4gIC8qKlxuICAgKiBDdXN0b20gbG9hZGVyIHRvIGdldCBmZWF0dXJlIGZyb20gYSBXRlMgZGF0YXNvdXJjZVxuICAgKiBAaW50ZXJuYWxcbiAgICogQHBhcmFtIHZlY3RvclNvdXJjZSB0aGUgdmVjdG9yIHNvdXJjZSB0byBiZSBjcmVhdGVkXG4gICAqIEBwYXJhbSBpbnRlcmNlcHRvciB0aGUgaW50ZXJjZXB0b3Igb2YgdGhlIGRhdGFcbiAgICogQHBhcmFtIGV4dGVudCB0aGUgZXh0ZW50IG9mIHRoZSByZXF1ZXN0ZWQgZGF0YVxuICAgKiBAcGFyYW0gZGF0YVByb2plY3Rpb24gdGhlIHByb2plY3Rpb24gb2YgdGhlIHJldHJpZXZlZCBkYXRhXG4gICAqIEBwYXJhbSBmZWF0dXJlUHJvamVjdGlvbiB0aGUgcHJvamVjdGlvbiBvZiB0aGUgY3JlYXRlZCBmZWF0dXJlc1xuICAgKiBAcGFyYW0gdXJsIHRoZSB1cmwgc3RyaW5nIHRvIHJldHJpZXZlIHRoZSBkYXRhXG4gICAqIEBwYXJhbSB0aHJlc2hvbGQgdGhlIHRocmVzaG9sZCB0byBtYW5hZ2UgXCJtb3JlIGZlYXR1cmVzXCIgKFRPRE8pXG4gICAqIEBwYXJhbSBzdWNjZXNzIHN1Y2Nlc3MgY2FsbGJhY2tcbiAgICogQHBhcmFtIGZhaWx1cmUgZmFpbHVyZSBjYWxsYmFja1xuICAgKi9cbiAgcHJpdmF0ZSBnZXRGZWF0dXJlcyhcbiAgICB2ZWN0b3JTb3VyY2U6IG9sU291cmNlVmVjdG9yPE9sR2VvbWV0cnk+LFxuICAgIGludGVyY2VwdG9yLFxuICAgIGV4dGVudCxcbiAgICBkYXRhUHJvamVjdGlvbixcbiAgICBmZWF0dXJlUHJvamVjdGlvbixcbiAgICB1cmw6IHN0cmluZyxcbiAgICB0aHJlc2hvbGQ6IG51bWJlcixcbiAgICBzdWNjZXNzLCBmYWlsdXJlKSB7XG5cbiAgICBjb25zdCBpZEFzc29jaWF0ZWRDYWxsID0gKHRoaXMuZGF0YVNvdXJjZSBhcyBXRlNEYXRhU291cmNlKS5tb3N0UmVjZW50SWRDYWxsT0dDRmlsdGVyO1xuICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgIGNvbnN0IGFsdGVyZWRVcmxXaXRoS2V5QXV0aCA9IGludGVyY2VwdG9yLmFsdGVyVXJsV2l0aEtleUF1dGgodXJsKTtcbiAgICBsZXQgbW9kaWZpZWRVcmwgPSB1cmw7XG4gICAgaWYgKGFsdGVyZWRVcmxXaXRoS2V5QXV0aCkge1xuICAgICAgbW9kaWZpZWRVcmwgPSBhbHRlcmVkVXJsV2l0aEtleUF1dGg7XG4gICAgfVxuICAgIHhoci5vcGVuKCdHRVQnLCBtb2RpZmllZFVybCk7XG4gICAgaWYgKGludGVyY2VwdG9yKSB7XG4gICAgICBpbnRlcmNlcHRvci5pbnRlcmNlcHRYaHIoeGhyLCBtb2RpZmllZFVybCk7XG4gICAgfVxuICAgIGNvbnN0IG9uRXJyb3IgPSAoKSA9PiB7XG4gICAgICB2ZWN0b3JTb3VyY2UucmVtb3ZlTG9hZGVkRXh0ZW50KGV4dGVudCk7XG4gICAgICBmYWlsdXJlKCk7XG4gICAgfTtcbiAgICB4aHIub25lcnJvciA9IG9uRXJyb3I7XG4gICAgeGhyLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIGlmICh4aHIuc3RhdHVzID09PSAyMDAgJiYgeGhyLnJlc3BvbnNlVGV4dC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGZlYXR1cmVzID1cbiAgICAgICAgICB2ZWN0b3JTb3VyY2VcbiAgICAgICAgICAgIC5nZXRGb3JtYXQoKVxuICAgICAgICAgICAgLnJlYWRGZWF0dXJlcyh4aHIucmVzcG9uc2VUZXh0LCB7IGRhdGFQcm9qZWN0aW9uLCBmZWF0dXJlUHJvamVjdGlvbiB9KSBhcyBvbEZlYXR1cmU8T2xHZW9tZXRyeT5bXTtcbiAgICAgICAgLy8gVE9ETyBNYW5hZ2UgXCJNb3JlIGZlYXR1cmVcIlxuICAgICAgICAvKmlmIChmZWF0dXJlcy5sZW5ndGggPT09IDAgfHwgZmVhdHVyZXMubGVuZ3RoIDwgdGhyZXNob2xkICkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdObyBtb3JlIGRhdGEgdG8gZG93bmxvYWQgYXQgdGhpcyByZXNvbHV0aW9uJyk7XG4gICAgICAgIH0qL1xuICAgICAgICAvLyBBdm9pZHMgcmV0cmlldmluZyBhbiBvbGRlciBjYWxsIHRoYXQgdG9vayBsb25nZXIgdG8gYmUgcHJvY2Vzc1xuICAgICAgICBpZiAoaWRBc3NvY2lhdGVkQ2FsbCA9PT0gKHRoaXMuZGF0YVNvdXJjZSBhcyBXRlNEYXRhU291cmNlKS5tb3N0UmVjZW50SWRDYWxsT0dDRmlsdGVyKVxuICAgICAgICB7XG4gICAgICAgICAgICB2ZWN0b3JTb3VyY2UuYWRkRmVhdHVyZXMoZmVhdHVyZXMpO1xuICAgICAgICAgICAgc3VjY2VzcyhmZWF0dXJlcyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzdWNjZXNzKFtdKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb25FcnJvcigpO1xuICAgICAgfVxuICAgIH07XG4gICAgeGhyLnNlbmQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDdXN0b20gbG9hZGVyIGZvciB2ZWN0b3IgbGF5ZXIuXG4gICAqIEBpbnRlcm5hbFxuICAgKiBAcGFyYW0gdmVjdG9yU291cmNlIHRoZSB2ZWN0b3Igc291cmNlIHRvIGJlIGNyZWF0ZWRcbiAgICogQHBhcmFtIHVybCB0aGUgdXJsIHN0cmluZyBvciBmdW5jdGlvbiB0byByZXRyaWV2ZSB0aGUgZGF0YVxuICAgKiBAcGFyYW0gaW50ZXJjZXB0b3IgdGhlIGludGVyY2VwdG9yIG9mIHRoZSBkYXRhXG4gICAqIEBwYXJhbSBleHRlbnQgdGhlIGV4dGVudCBvZiB0aGUgcmVxdWVzdGVkIGRhdGFcbiAgICogQHBhcmFtIHJlc29sdXRpb24gdGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICAgKiBAcGFyYW0gcHJvamVjdGlvbiB0aGUgcHJvamVjdGlvbiB0byByZXRyaWV2ZSB0aGUgZGF0YVxuICAgKi9cbiAgcHJpdmF0ZSBjdXN0b21Mb2FkZXIoXG4gICAgdmVjdG9yU291cmNlLFxuICAgIHVybCxcbiAgICBpbnRlcmNlcHRvcixcbiAgICBleHRlbnQsXG4gICAgcmVzb2x1dGlvbixcbiAgICBwcm9qZWN0aW9uLFxuICAgIHN1Y2Nlc3MsXG4gICAgZmFpbHVyZVxuICApIHtcbiAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICBsZXQgbW9kaWZpZWRVcmwgPSB1cmw7XG4gICAgaWYgKHR5cGVvZiB1cmwgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnN0IGFsdGVyZWRVcmxXaXRoS2V5QXV0aCA9IGludGVyY2VwdG9yLmFsdGVyVXJsV2l0aEtleUF1dGgodXJsKTtcbiAgICAgIGlmIChhbHRlcmVkVXJsV2l0aEtleUF1dGgpIHtcbiAgICAgICAgbW9kaWZpZWRVcmwgPSBhbHRlcmVkVXJsV2l0aEtleUF1dGg7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG1vZGlmaWVkVXJsID0gdXJsKGV4dGVudCwgcmVzb2x1dGlvbiwgcHJvamVjdGlvbik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZ2VvTmV0d29ya1NlcnZpY2UgJiYgdHlwZW9mIHVybCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc3QgZm9ybWF0ID0gdmVjdG9yU291cmNlLmdldEZvcm1hdCgpO1xuICAgICAgY29uc3QgdHlwZSA9IGZvcm1hdC5nZXRUeXBlKCk7XG5cbiAgICAgIGxldCByZXNwb25zZVR5cGUgPSB0eXBlO1xuICAgICAgY29uc3Qgb25FcnJvciA9ICgpID0+IHtcbiAgICAgICAgdmVjdG9yU291cmNlLnJlbW92ZUxvYWRlZEV4dGVudChleHRlbnQpO1xuICAgICAgICBmYWlsdXJlKCk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBvcHRpb25zOiBTaW1wbGVHZXRPcHRpb25zID0geyByZXNwb25zZVR5cGUgfTtcbiAgICAgIHRoaXMuZ2VvTmV0d29ya1NlcnZpY2UuZ2VvREJTZXJ2aWNlLmdldCh1cmwpLnBpcGUoY29uY2F0TWFwKHIgPT5cbiAgICAgICAgciA/IG9mKHIpIDogdGhpcy5nZW9OZXR3b3JrU2VydmljZS5nZXQobW9kaWZpZWRVcmwsIG9wdGlvbnMpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBmaXJzdCgpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigocmVzKSA9PiB7XG4gICAgICAgICAgICAgIG9uRXJyb3IoKTtcbiAgICAgICAgICAgICAgdGhyb3cgcmVzO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICApKVxuICAgICAgLnN1YnNjcmliZSgoY29udGVudCkgPT4ge1xuICAgICAgICAgIGlmIChjb250ZW50KSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXQgPSB2ZWN0b3JTb3VyY2UuZ2V0Rm9ybWF0KCk7XG4gICAgICAgICAgICBjb25zdCB0eXBlID0gZm9ybWF0LmdldFR5cGUoKTtcbiAgICAgICAgICAgIGxldCBzb3VyY2U7XG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gRm9ybWF0VHlwZS5KU09OIHx8IHR5cGUgPT09IEZvcm1hdFR5cGUuVEVYVCkge1xuICAgICAgICAgICAgICBzb3VyY2UgPSBjb250ZW50O1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBGb3JtYXRUeXBlLlhNTCkge1xuICAgICAgICAgICAgICBzb3VyY2UgPSBjb250ZW50O1xuICAgICAgICAgICAgICBpZiAoIXNvdXJjZSkge1xuICAgICAgICAgICAgICAgIHNvdXJjZSA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoXG4gICAgICAgICAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3htbCdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IEZvcm1hdFR5cGUuQVJSQVlfQlVGRkVSKSB7XG4gICAgICAgICAgICAgIHNvdXJjZSA9IGNvbnRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc291cmNlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGZlYXR1cmVzID0gZm9ybWF0LnJlYWRGZWF0dXJlcyhzb3VyY2UsIHsgZXh0ZW50LCBmZWF0dXJlUHJvamVjdGlvbjogcHJvamVjdGlvbiB9KTtcbiAgICAgICAgICAgICAgdmVjdG9yU291cmNlLmFkZEZlYXR1cmVzKGZlYXR1cmVzLCBmb3JtYXQucmVhZFByb2plY3Rpb24oc291cmNlKSk7XG4gICAgICAgICAgICAgIHN1Y2Nlc3MoZmVhdHVyZXMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgb25FcnJvcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICB9IGVsc2Uge1xuICAgIHhoci5vcGVuKCAnR0VUJywgbW9kaWZpZWRVcmwpO1xuICAgIGNvbnN0IGZvcm1hdCA9IHZlY3RvclNvdXJjZS5nZXRGb3JtYXQoKTtcbiAgICBpZiAoZm9ybWF0LmdldFR5cGUoKSA9PT0gRm9ybWF0VHlwZS5BUlJBWV9CVUZGRVIpIHtcbiAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnYXJyYXlidWZmZXInO1xuICAgIH1cbiAgICBpZiAoaW50ZXJjZXB0b3IpIHtcbiAgICAgIGludGVyY2VwdG9yLmludGVyY2VwdFhocih4aHIsIG1vZGlmaWVkVXJsKTtcbiAgICB9XG5cbiAgICBjb25zdCBvbkVycm9yID0gKCkgPT4ge1xuICAgICAgdmVjdG9yU291cmNlLnJlbW92ZUxvYWRlZEV4dGVudChleHRlbnQpO1xuICAgICAgZmFpbHVyZSgpO1xuICAgIH07XG4gICAgeGhyLm9uZXJyb3IgPSBvbkVycm9yO1xuICAgIHhoci5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAvLyBzdGF0dXMgd2lsbCBiZSAwIGZvciBmaWxlOi8vIHVybHNcbiAgICAgIGlmICgheGhyLnN0YXR1cyB8fCAoeGhyLnN0YXR1cyA+PSAyMDAgJiYgeGhyLnN0YXR1cyA8IDMwMCkpIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IGZvcm1hdC5nZXRUeXBlKCk7XG4gICAgICAgIGxldCBzb3VyY2U7XG4gICAgICAgIGlmICh0eXBlID09PSBGb3JtYXRUeXBlLkpTT04gfHwgdHlwZSA9PT0gRm9ybWF0VHlwZS5URVhUKSB7XG4gICAgICAgICAgc291cmNlID0geGhyLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBGb3JtYXRUeXBlLlhNTCkge1xuICAgICAgICAgIHNvdXJjZSA9IHhoci5yZXNwb25zZVhNTDtcbiAgICAgICAgICBpZiAoIXNvdXJjZSkge1xuICAgICAgICAgICAgc291cmNlID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhcbiAgICAgICAgICAgICAgeGhyLnJlc3BvbnNlVGV4dCxcbiAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3htbCdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IEZvcm1hdFR5cGUuQVJSQVlfQlVGRkVSKSB7XG4gICAgICAgICAgc291cmNlID0geGhyLnJlc3BvbnNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzb3VyY2UpIHtcbiAgICAgICAgICBjb25zdCBmZWF0dXJlcyA9IGZvcm1hdC5yZWFkRmVhdHVyZXMoc291cmNlLCB7IGV4dGVudCwgZmVhdHVyZVByb2plY3Rpb246IHByb2plY3Rpb24gfSk7XG4gICAgICAgICAgdmVjdG9yU291cmNlLmFkZEZlYXR1cmVzKGZlYXR1cmVzLCBmb3JtYXQucmVhZFByb2plY3Rpb24oc291cmNlKSk7XG4gICAgICAgICAgc3VjY2VzcyhmZWF0dXJlcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb25FcnJvcigpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvbkVycm9yKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICB4aHIuc2VuZCgpO1xuICB9XG4gIH1cbn1cbiJdfQ==
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVjdG9ydGlsZS1sYXllci5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9sYXllci9zaGFyZWQvbGF5ZXJzL3ZlY3RvcnRpbGUtbGF5ZXIuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgb2xTdHlsZSBmcm9tICdvbC9zdHlsZS9TdHlsZSc7XHJcbmltcG9ydCBvbExheWVyVmVjdG9yVGlsZSBmcm9tICdvbC9sYXllci9WZWN0b3JUaWxlJztcclxuXHJcbmltcG9ydCB7IExheWVyT3B0aW9ucyB9IGZyb20gJy4vbGF5ZXIuaW50ZXJmYWNlJztcclxuXHJcbmltcG9ydCB7IE1WVERhdGFTb3VyY2UgfSBmcm9tICcuLi8uLi8uLi9kYXRhc291cmNlL3NoYXJlZC9kYXRhc291cmNlcy9tdnQtZGF0YXNvdXJjZSc7XHJcblxyXG5pbXBvcnQgeyBNVlREYXRhU291cmNlT3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uL2RhdGFzb3VyY2Uvc2hhcmVkL2RhdGFzb3VyY2VzL212dC1kYXRhc291cmNlLmludGVyZmFjZSc7XHJcblxyXG5pbXBvcnQgeyBTdHlsZUJ5QXR0cmlidXRlLCBNYXBib3hTdHlsZSB9IGZyb20gJy4uL3ZlY3Rvci1zdHlsZS5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgUmVuZGVyRmVhdHVyZSBmcm9tICdvbC9yZW5kZXIvRmVhdHVyZSc7XHJcbmltcG9ydCBGZWF0dXJlIGZyb20gJ29sL0ZlYXR1cmUnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBWZWN0b3JUaWxlTGF5ZXJPcHRpb25zIGV4dGVuZHMgTGF5ZXJPcHRpb25zIHtcclxuICBzdHlsZT86IG9sU3R5bGUgfCBvbFN0eWxlW10gfCAoKGFyZzA6IFJlbmRlckZlYXR1cmUgfCBGZWF0dXJlPGFueT4sIGFyZzE6IG51bWJlcikgPT4gdm9pZCB8IG9sU3R5bGUgfCBvbFN0eWxlW10pO1xyXG4gIHNvdXJjZT86XHJcbiAgICB8IE1WVERhdGFTb3VyY2U7XHJcbiAgc291cmNlT3B0aW9ucz86XHJcbiAgICB8IE1WVERhdGFTb3VyY2VPcHRpb25zO1xyXG4gIG9sPzogb2xMYXllclZlY3RvclRpbGU7XHJcbiAgZGVjbHV0dGVyPzogYm9vbGVhbjtcclxuICBzdHlsZUJ5QXR0cmlidXRlPzogU3R5bGVCeUF0dHJpYnV0ZTtcclxuICBob3ZlclN0eWxlPzogU3R5bGVCeUF0dHJpYnV0ZTtcclxuICBtYXBib3hTdHlsZSA/OiBNYXBib3hTdHlsZTtcclxufVxyXG4iXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVjdG9ydGlsZS1sYXllci5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9sYXllci9zaGFyZWQvbGF5ZXJzL3ZlY3RvcnRpbGUtbGF5ZXIuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgb2xTdHlsZSBmcm9tICdvbC9zdHlsZS9TdHlsZSc7XG5pbXBvcnQgb2xMYXllclZlY3RvclRpbGUgZnJvbSAnb2wvbGF5ZXIvVmVjdG9yVGlsZSc7XG5cbmltcG9ydCB7IExheWVyT3B0aW9ucyB9IGZyb20gJy4vbGF5ZXIuaW50ZXJmYWNlJztcblxuaW1wb3J0IHsgTVZURGF0YVNvdXJjZSB9IGZyb20gJy4uLy4uLy4uL2RhdGFzb3VyY2Uvc2hhcmVkL2RhdGFzb3VyY2VzL212dC1kYXRhc291cmNlJztcblxuaW1wb3J0IHsgTVZURGF0YVNvdXJjZU9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi9kYXRhc291cmNlL3NoYXJlZC9kYXRhc291cmNlcy9tdnQtZGF0YXNvdXJjZS5pbnRlcmZhY2UnO1xuXG5pbXBvcnQgeyBTdHlsZUJ5QXR0cmlidXRlLCBNYXBib3hTdHlsZSB9IGZyb20gJy4uL3ZlY3Rvci1zdHlsZS5pbnRlcmZhY2UnO1xuaW1wb3J0IFJlbmRlckZlYXR1cmUgZnJvbSAnb2wvcmVuZGVyL0ZlYXR1cmUnO1xuaW1wb3J0IEZlYXR1cmUgZnJvbSAnb2wvRmVhdHVyZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmVjdG9yVGlsZUxheWVyT3B0aW9ucyBleHRlbmRzIExheWVyT3B0aW9ucyB7XG4gIHN0eWxlPzogb2xTdHlsZSB8IG9sU3R5bGVbXSB8ICgoYXJnMDogUmVuZGVyRmVhdHVyZSB8IEZlYXR1cmU8YW55PiwgYXJnMTogbnVtYmVyKSA9PiB2b2lkIHwgb2xTdHlsZSB8IG9sU3R5bGVbXSk7XG4gIHNvdXJjZT86XG4gICAgfCBNVlREYXRhU291cmNlO1xuICBzb3VyY2VPcHRpb25zPzpcbiAgICB8IE1WVERhdGFTb3VyY2VPcHRpb25zO1xuICBvbD86IG9sTGF5ZXJWZWN0b3JUaWxlO1xuICBkZWNsdXR0ZXI/OiBib29sZWFuO1xuICBzdHlsZUJ5QXR0cmlidXRlPzogU3R5bGVCeUF0dHJpYnV0ZTtcbiAgaG92ZXJTdHlsZT86IFN0eWxlQnlBdHRyaWJ1dGU7XG4gIG1hcGJveFN0eWxlID86IE1hcGJveFN0eWxlO1xufVxuIl19
@@ -101,4 +101,4 @@ export class VectorTileLayer extends Layer {
101
101
  super.setMap(map);
102
102
  }
103
103
  }
104
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVjdG9ydGlsZS1sYXllci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2xheWVyL3NoYXJlZC9sYXllcnMvdmVjdG9ydGlsZS1sYXllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLGlCQUFpQixNQUFNLHFCQUFxQixDQUFDO0FBS3BELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFaEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQU0xQyxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxLQUFLO0lBT3hDLFlBQ0UsT0FBK0IsRUFDeEIsY0FBK0IsRUFDL0IsZUFBaUM7UUFDeEMsS0FBSyxDQUFDLE9BQU8sRUFBRSxjQUFjLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFGekMsbUJBQWMsR0FBZCxjQUFjLENBQWlCO1FBQy9CLG9CQUFlLEdBQWYsZUFBZSxDQUFrQjtRQUV4QyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7SUFDdEMsQ0FBQztJQUVTLGFBQWE7UUFDckIsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoRCxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBd0I7U0FDckQsQ0FBQyxDQUFDO1FBRUgsTUFBTSxVQUFVLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNwRCxNQUFNLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxTQUFTLEVBQXdCLENBQUM7UUFFdEUsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxJQUFnQixFQUFFLEdBQVcsRUFB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SUFBSSxDQUFDLENBQUM7aUJBQ3BCO1lBQ0gsQ0FBQyxDQUFDO1lBQ0YsR0FBRyxDQUFDLE9BQU8sR0FBRyxHQUFHLEVBQUU7Z0JBQ2pCLE9BQU87Z0JBQ1AsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyQixDQUFDLENBQUM7WUFDRixHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDYixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxNQUFNLENBQUMsR0FBdUI7UUFDbkMsSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFO1lBQ3JCLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDNUI7YUFBTTtZQUNMLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ2xDO1FBQ0QsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgb2xMYXllclZlY3RvclRpbGUgZnJvbSAnb2wvbGF5ZXIvVmVjdG9yVGlsZSc7XHJcbmltcG9ydCBvbFNvdXJjZVZlY3RvclRpbGUgZnJvbSAnb2wvc291cmNlL1ZlY3RvclRpbGUnO1xyXG5cclxuaW1wb3J0IHsgTVZURGF0YVNvdXJjZSB9IGZyb20gJy4uLy4uLy4uL2RhdGFzb3VyY2Uvc2hhcmVkL2RhdGFzb3VyY2VzL212dC1kYXRhc291cmNlJztcclxuXHJcbmltcG9ydCB7IExheWVyIH0gZnJvbSAnLi9sYXllcic7XHJcbmltcG9ydCB7IFZlY3RvclRpbGVMYXllck9wdGlvbnMgfSBmcm9tICcuL3ZlY3RvcnRpbGUtbGF5ZXIuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgVGlsZVdhdGNoZXIgfSBmcm9tICcuLi8uLi91dGlscyc7XHJcbmltcG9ydCB7IEF1dGhJbnRlcmNlcHRvciB9IGZyb20gJ0BpZ28yL2F1dGgnO1xyXG5pbXBvcnQgeyBJZ29NYXAgfSBmcm9tICcuLi8uLi8uLi9tYXAnO1xyXG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUnO1xyXG5pbXBvcnQgVmVjdG9yVGlsZSBmcm9tICdvbC9WZWN0b3JUaWxlJztcclxuXHJcbmV4cG9ydCBjbGFzcyBWZWN0b3JUaWxlTGF5ZXIgZXh0ZW5kcyBMYXllciB7XHJcbiAgcHVibGljIGRhdGFTb3VyY2U6IE1WVERhdGFTb3VyY2U7XHJcbiAgcHVibGljIG9wdGlvbnM6IFZlY3RvclRpbGVMYXllck9wdGlvbnM7XHJcbiAgcHVibGljIG9sOiBvbExheWVyVmVjdG9yVGlsZTtcclxuXHJcbiAgcHJpdmF0ZSB3YXRjaGVyOiBUaWxlV2F0Y2hlcjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBvcHRpb25zOiBWZWN0b3JUaWxlTGF5ZXJPcHRpb25zLFxyXG4gICAgcHVibGljIG1lc3NhZ2VTZXJ2aWNlPzogTWVzc2FnZVNlcnZpY2UsXHJcbiAgICBwdWJsaWMgYXV0aEludGVyY2VwdG9yPzogQXV0aEludGVyY2VwdG9yKSB7XHJcbiAgICBzdXBlcihvcHRpb25zLCBtZXNzYWdlU2VydmljZSwgYXV0aEludGVyY2VwdG9yKTtcclxuICAgIHRoaXMud2F0Y2hlciA9IG5ldyBUaWxlV2F0Y2hlcih0aGlzKTtcclxuICAgIHRoaXMuc3RhdHVzJCA9IHRoaXMud2F0Y2hlci5zdGF0dXMkO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGNyZWF0ZU9sTGF5ZXIoKTogb2xMYXllclZlY3RvclRpbGUge1xyXG4gICAgY29uc3Qgb2xPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5vcHRpb25zLCB7XHJcbiAgICAgIHNvdXJjZTogdGhpcy5vcHRpb25zLnNvdXJjZS5vbCBhcyBvbFNvdXJjZVZlY3RvclRpbGVcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHZlY3RvclRpbGUgPSBuZXcgb2xMYXllclZlY3RvclRpbGUob2xPcHRpb25zKTtcclxuICAgIGNvbnN0IHZlY3RvclRpbGVTb3VyY2UgPSB2ZWN0b3JUaWxlLmdldFNvdXJjZSgpIGFzIG9sU291cmNlVmVjdG9yVGlsZTtcclxuXHJcbiAgICB2ZWN0b3JUaWxlU291cmNlLnNldFRpbGVMb2FkRnVuY3Rpb24oKHRpbGU6IFZlY3RvclRpbGUsIHVybDogc3RyaW5nKSA9PiB7XHJcbiAgICAgIGNvbnN0IGxvYWRlciA9IHRoaXMuY3VzdG9tTG9hZGVyKHVybCwgdGlsZS5nZXRGb3JtYXQoKSwgdGhpcy5hdXRoSW50ZXJjZXB0b3IsIHRpbGUub25Mb2FkLmJpbmQodGlsZSkpO1xyXG4gICAgICBpZiAobG9hZGVyKSB7XHJcbiAgICAgICAgdGlsZS5zZXRMb2FkZXIobG9hZGVyKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICByZXR1cm4gdmVjdG9yVGlsZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEN1c3RvbSBsb2FkZXIgZm9yIHZlY3RvciB0aWxlIGxheWVyLiBNb2RpZmllZCBmcm9tIHRoZSBsb2FkRmVhdHVyZXNYaHIgZnVuY3Rpb24gaW4gb2xcXGZlYXR1cmVsb2FkZXIuanNcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKiBAcGFyYW0gdXJsIHRoZSB1cmwgc3RyaW5nIG9yIGZ1bmN0aW9uIHRvIHJldHJpZXZlIHRoZSBkYXRhXHJcbiAgICogQHBhcmFtIGZvcm1hdCB0aGUgZm9ybWF0IG9mIHRoZSB0aWxlXHJcbiAgICogQHBhcmFtIGludGVyY2VwdG9yIHRoZSBpbnRlcmNlcHRvciBvZiB0aGUgZGF0YVxyXG4gICAqIEBwYXJhbSBzdWNjZXNzIE9uIHN1Y2Nlc3MgZXZlbnQgYWN0aW9uIHRvIHRyaWdnZXJcclxuICAgKiBAcGFyYW0gZmFpbHVyZSBPbiBmYWlsdXJlIGV2ZW50IGFjdGlvbiB0byB0cmlnZ2VyIFRPRE9cclxuICAgKi9cclxuICBjdXN0b21Mb2FkZXIodXJsLCBmb3JtYXQsIGludGVyY2VwdG9yLCBzdWNjZXNzLCBmYWlsdXJlPykge1xyXG4gICAgcmV0dXJuICgoZXh0ZW50LCByZXNvbHV0aW9uLCBwcm9qZWN0aW9uKSA9PiB7XHJcbiAgICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgICBsZXQgbW9kaWZpZWRVcmwgPSB1cmw7XHJcbiAgICAgIGlmICh0eXBlb2YgdXJsICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgY29uc3QgYWx0ZXJlZFVybFdpdGhLZXlBdXRoID0gaW50ZXJjZXB0b3IuYWx0ZXJVcmxXaXRoS2V5QXV0aCh1cmwpO1xyXG4gICAgICAgIGlmIChhbHRlcmVkVXJsV2l0aEtleUF1dGgpIHtcclxuICAgICAgICAgIG1vZGlmaWVkVXJsID0gYWx0ZXJlZFVybFdpdGhLZXlBdXRoO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBtb2RpZmllZFVybCA9IHVybChleHRlbnQsIHJlc29sdXRpb24sIHByb2plY3Rpb24pO1xyXG4gICAgICB9XHJcbiAgICAgIHhoci5vcGVuKCAnR0VUJywgbW9kaWZpZWRVcmwpO1xyXG4gICAgICBpZiAoaW50ZXJjZXB0b3IpIHtcclxuICAgICAgICBpbnRlcmNlcHRvci5pbnRlcmNlcHRYaHIoeGhyLCBtb2RpZmllZFVybCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChmb3JtYXQuZ2V0VHlwZSgpID09PSAnYXJyYXlidWZmZXInKSB7XHJcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdhcnJheWJ1ZmZlcic7XHJcbiAgICAgIH1cclxuICAgICAgeGhyLm9ubG9hZCA9IChldmVudCkgPT4ge1xyXG4gICAgICAgIGlmICgheGhyLnN0YXR1cyB8fCB4aHIuc3RhdHVzID49IDIwMCAmJiB4aHIuc3RhdHVzIDwgMzAwKSB7XHJcbiAgICAgICAgICBjb25zdCB0eXBlID0gZm9ybWF0LmdldFR5cGUoKTtcclxuICAgICAgICAgIGxldCBzb3VyY2U7XHJcbiAgICAgICAgICBpZiAodHlwZSA9PT0gJ2pzb24nIHx8IHR5cGUgPT09ICd0ZXh0Jykge1xyXG4gICAgICAgICAgICBzb3VyY2UgPSB4aHIucmVzcG9uc2VUZXh0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gJ3htbCcpIHtcclxuICAgICAgICAgICAgc291cmNlID0geGhyLnJlc3BvbnNlWE1MO1xyXG4gICAgICAgICAgICBpZiAoIXNvdXJjZSkge1xyXG4gICAgICAgICAgICAgIHNvdXJjZSA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoeGhyLnJlc3BvbnNlVGV4dCwgJ2FwcGxpY2F0aW9uL3htbCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmICh0eXBlID09PSAnYXJyYXlidWZmZXInKSB7XHJcbiAgICAgICAgICAgIHNvdXJjZSA9IHhoci5yZXNwb25zZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChzb3VyY2UpIHtcclxuICAgICAgICAgICAgc3VjY2Vzcy5jYWxsKHRoaXMsIGZvcm1hdC5yZWFkRmVhdHVyZXMoc291cmNlLCB7XHJcbiAgICAgICAgICAgICAgZXh0ZW50LFxyXG4gICAgICAgICAgICAgIGZlYXR1cmVQcm9qZWN0aW9uOiBwcm9qZWN0aW9uXHJcbiAgICAgICAgICAgIH0pLCBmb3JtYXQucmVhZFByb2plY3Rpb24oc291cmNlKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gVE9ET1xyXG4gICAgICAgICAgICBmYWlsdXJlLmNhbGwodGhpcyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIFRPRE9cclxuICAgICAgICAgIGZhaWx1cmUuY2FsbCh0aGlzKTtcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICAgIHhoci5vbmVycm9yID0gKCkgPT4ge1xyXG4gICAgICAgIC8vIFRPRE9cclxuICAgICAgICBmYWlsdXJlLmNhbGwodGhpcyk7XHJcbiAgICAgIH07XHJcbiAgICAgIHhoci5zZW5kKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRNYXAobWFwOiBJZ29NYXAgfCB1bmRlZmluZWQpIHtcclxuICAgIGlmIChtYXAgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLndhdGNoZXIudW5zdWJzY3JpYmUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMud2F0Y2hlci5zdWJzY3JpYmUoKCkgPT4ge30pO1xyXG4gICAgfVxyXG4gICAgc3VwZXIuc2V0TWFwKG1hcCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
104
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVjdG9ydGlsZS1sYXllci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2xheWVyL3NoYXJlZC9sYXllcnMvdmVjdG9ydGlsZS1sYXllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLGlCQUFpQixNQUFNLHFCQUFxQixDQUFDO0FBS3BELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFaEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQU0xQyxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxLQUFLO0lBT3hDLFlBQ0UsT0FBK0IsRUFDeEIsY0FBK0IsRUFDL0IsZUFBaUM7UUFDeEMsS0FBSyxDQUFDLE9BQU8sRUFBRSxjQUFjLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFGekMsbUJBQWMsR0FBZCxjQUFjLENBQWlCO1FBQy9CLG9CQUFlLEdBQWYsZUFBZSxDQUFrQjtRQUV4QyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7SUFDdEMsQ0FBQztJQUVTLGFBQWE7UUFDckIsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoRCxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBd0I7U0FDckQsQ0FBQyxDQUFDO1FBRUgsTUFBTSxVQUFVLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNwRCxNQUFNLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxTQUFTLEVBQXdCLENBQUM7UUFFdEUsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxJQUFnQixFQUFFLEdBQVcsRUFB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SUFBSSxDQUFDLENBQUM7aUJBQ3BCO1lBQ0gsQ0FBQyxDQUFDO1lBQ0YsR0FBRyxDQUFDLE9BQU8sR0FBRyxHQUFHLEVBQUU7Z0JBQ2pCLE9BQU87Z0JBQ1AsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyQixDQUFDLENBQUM7WUFDRixHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDYixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxNQUFNLENBQUMsR0FBdUI7UUFDbkMsSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFO1lBQ3JCLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDNUI7YUFBTTtZQUNMLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ2xDO1FBQ0QsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgb2xMYXllclZlY3RvclRpbGUgZnJvbSAnb2wvbGF5ZXIvVmVjdG9yVGlsZSc7XG5pbXBvcnQgb2xTb3VyY2VWZWN0b3JUaWxlIGZyb20gJ29sL3NvdXJjZS9WZWN0b3JUaWxlJztcblxuaW1wb3J0IHsgTVZURGF0YVNvdXJjZSB9IGZyb20gJy4uLy4uLy4uL2RhdGFzb3VyY2Uvc2hhcmVkL2RhdGFzb3VyY2VzL212dC1kYXRhc291cmNlJztcblxuaW1wb3J0IHsgTGF5ZXIgfSBmcm9tICcuL2xheWVyJztcbmltcG9ydCB7IFZlY3RvclRpbGVMYXllck9wdGlvbnMgfSBmcm9tICcuL3ZlY3RvcnRpbGUtbGF5ZXIuaW50ZXJmYWNlJztcbmltcG9ydCB7IFRpbGVXYXRjaGVyIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgQXV0aEludGVyY2VwdG9yIH0gZnJvbSAnQGlnbzIvYXV0aCc7XG5pbXBvcnQgeyBJZ29NYXAgfSBmcm9tICcuLi8uLi8uLi9tYXAnO1xuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdAaWdvMi9jb3JlJztcbmltcG9ydCBWZWN0b3JUaWxlIGZyb20gJ29sL1ZlY3RvclRpbGUnO1xuXG5leHBvcnQgY2xhc3MgVmVjdG9yVGlsZUxheWVyIGV4dGVuZHMgTGF5ZXIge1xuICBwdWJsaWMgZGF0YVNvdXJjZTogTVZURGF0YVNvdXJjZTtcbiAgcHVibGljIG9wdGlvbnM6IFZlY3RvclRpbGVMYXllck9wdGlvbnM7XG4gIHB1YmxpYyBvbDogb2xMYXllclZlY3RvclRpbGU7XG5cbiAgcHJpdmF0ZSB3YXRjaGVyOiBUaWxlV2F0Y2hlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBvcHRpb25zOiBWZWN0b3JUaWxlTGF5ZXJPcHRpb25zLFxuICAgIHB1YmxpYyBtZXNzYWdlU2VydmljZT86IE1lc3NhZ2VTZXJ2aWNlLFxuICAgIHB1YmxpYyBhdXRoSW50ZXJjZXB0b3I/OiBBdXRoSW50ZXJjZXB0b3IpIHtcbiAgICBzdXBlcihvcHRpb25zLCBtZXNzYWdlU2VydmljZSwgYXV0aEludGVyY2VwdG9yKTtcbiAgICB0aGlzLndhdGNoZXIgPSBuZXcgVGlsZVdhdGNoZXIodGhpcyk7XG4gICAgdGhpcy5zdGF0dXMkID0gdGhpcy53YXRjaGVyLnN0YXR1cyQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlT2xMYXllcigpOiBvbExheWVyVmVjdG9yVGlsZSB7XG4gICAgY29uc3Qgb2xPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5vcHRpb25zLCB7XG4gICAgICBzb3VyY2U6IHRoaXMub3B0aW9ucy5zb3VyY2Uub2wgYXMgb2xTb3VyY2VWZWN0b3JUaWxlXG4gICAgfSk7XG5cbiAgICBjb25zdCB2ZWN0b3JUaWxlID0gbmV3IG9sTGF5ZXJWZWN0b3JUaWxlKG9sT3B0aW9ucyk7XG4gICAgY29uc3QgdmVjdG9yVGlsZVNvdXJjZSA9IHZlY3RvclRpbGUuZ2V0U291cmNlKCkgYXMgb2xTb3VyY2VWZWN0b3JUaWxlO1xuXG4gICAgdmVjdG9yVGlsZVNvdXJjZS5zZXRUaWxlTG9hZEZ1bmN0aW9uKCh0aWxlOiBWZWN0b3JUaWxlLCB1cmw6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgbG9hZGVyID0gdGhpcy5jdXN0b21Mb2FkZXIodXJsLCB0aWxlLmdldEZvcm1hdCgpLCB0aGlzLmF1dGhJbnRlcmNlcHRvciwgdGlsZS5vbkxvYWQuYmluZCh0aWxlKSk7XG4gICAgICBpZiAobG9hZGVyKSB7XG4gICAgICAgIHRpbGUuc2V0TG9hZGVyKGxvYWRlcik7XG4gICAgICB9XG4gICAgfVxuICAgICk7XG5cbiAgICByZXR1cm4gdmVjdG9yVGlsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDdXN0b20gbG9hZGVyIGZvciB2ZWN0b3IgdGlsZSBsYXllci4gTW9kaWZpZWQgZnJvbSB0aGUgbG9hZEZlYXR1cmVzWGhyIGZ1bmN0aW9uIGluIG9sXFxmZWF0dXJlbG9hZGVyLmpzXG4gICAqIEBpbnRlcm5hbFxuICAgKiBAcGFyYW0gdXJsIHRoZSB1cmwgc3RyaW5nIG9yIGZ1bmN0aW9uIHRvIHJldHJpZXZlIHRoZSBkYXRhXG4gICAqIEBwYXJhbSBmb3JtYXQgdGhlIGZvcm1hdCBvZiB0aGUgdGlsZVxuICAgKiBAcGFyYW0gaW50ZXJjZXB0b3IgdGhlIGludGVyY2VwdG9yIG9mIHRoZSBkYXRhXG4gICAqIEBwYXJhbSBzdWNjZXNzIE9uIHN1Y2Nlc3MgZXZlbnQgYWN0aW9uIHRvIHRyaWdnZXJcbiAgICogQHBhcmFtIGZhaWx1cmUgT24gZmFpbHVyZSBldmVudCBhY3Rpb24gdG8gdHJpZ2dlciBUT0RPXG4gICAqL1xuICBjdXN0b21Mb2FkZXIodXJsLCBmb3JtYXQsIGludGVyY2VwdG9yLCBzdWNjZXNzLCBmYWlsdXJlPykge1xuICAgIHJldHVybiAoKGV4dGVudCwgcmVzb2x1dGlvbiwgcHJvamVjdGlvbikgPT4ge1xuICAgICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICBsZXQgbW9kaWZpZWRVcmwgPSB1cmw7XG4gICAgICBpZiAodHlwZW9mIHVybCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb25zdCBhbHRlcmVkVXJsV2l0aEtleUF1dGggPSBpbnRlcmNlcHRvci5hbHRlclVybFdpdGhLZXlBdXRoKHVybCk7XG4gICAgICAgIGlmIChhbHRlcmVkVXJsV2l0aEtleUF1dGgpIHtcbiAgICAgICAgICBtb2RpZmllZFVybCA9IGFsdGVyZWRVcmxXaXRoS2V5QXV0aDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbW9kaWZpZWRVcmwgPSB1cmwoZXh0ZW50LCByZXNvbHV0aW9uLCBwcm9qZWN0aW9uKTtcbiAgICAgIH1cbiAgICAgIHhoci5vcGVuKCAnR0VUJywgbW9kaWZpZWRVcmwpO1xuICAgICAgaWYgKGludGVyY2VwdG9yKSB7XG4gICAgICAgIGludGVyY2VwdG9yLmludGVyY2VwdFhocih4aHIsIG1vZGlmaWVkVXJsKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZvcm1hdC5nZXRUeXBlKCkgPT09ICdhcnJheWJ1ZmZlcicpIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdhcnJheWJ1ZmZlcic7XG4gICAgICB9XG4gICAgICB4aHIub25sb2FkID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIGlmICgheGhyLnN0YXR1cyB8fCB4aHIuc3RhdHVzID49IDIwMCAmJiB4aHIuc3RhdHVzIDwgMzAwKSB7XG4gICAgICAgICAgY29uc3QgdHlwZSA9IGZvcm1hdC5nZXRUeXBlKCk7XG4gICAgICAgICAgbGV0IHNvdXJjZTtcbiAgICAgICAgICBpZiAodHlwZSA9PT0gJ2pzb24nIHx8IHR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgICAgICAgc291cmNlID0geGhyLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gJ3htbCcpIHtcbiAgICAgICAgICAgIHNvdXJjZSA9IHhoci5yZXNwb25zZVhNTDtcbiAgICAgICAgICAgIGlmICghc291cmNlKSB7XG4gICAgICAgICAgICAgIHNvdXJjZSA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoeGhyLnJlc3BvbnNlVGV4dCwgJ2FwcGxpY2F0aW9uL3htbCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmICh0eXBlID09PSAnYXJyYXlidWZmZXInKSB7XG4gICAgICAgICAgICBzb3VyY2UgPSB4aHIucmVzcG9uc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzb3VyY2UpIHtcbiAgICAgICAgICAgIHN1Y2Nlc3MuY2FsbCh0aGlzLCBmb3JtYXQucmVhZEZlYXR1cmVzKHNvdXJjZSwge1xuICAgICAgICAgICAgICBleHRlbnQsXG4gICAgICAgICAgICAgIGZlYXR1cmVQcm9qZWN0aW9uOiBwcm9qZWN0aW9uXG4gICAgICAgICAgICB9KSwgZm9ybWF0LnJlYWRQcm9qZWN0aW9uKHNvdXJjZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIFRPRE9cbiAgICAgICAgICAgIGZhaWx1cmUuY2FsbCh0aGlzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gVE9ET1xuICAgICAgICAgIGZhaWx1cmUuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHhoci5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgICAvLyBUT0RPXG4gICAgICAgIGZhaWx1cmUuY2FsbCh0aGlzKTtcbiAgICAgIH07XG4gICAgICB4aHIuc2VuZCgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNldE1hcChtYXA6IElnb01hcCB8IHVuZGVmaW5lZCkge1xuICAgIGlmIChtYXAgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy53YXRjaGVyLnVuc3Vic2NyaWJlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMud2F0Y2hlci5zdWJzY3JpYmUoKCkgPT4ge30pO1xuICAgIH1cbiAgICBzdXBlci5zZXRNYXAobWFwKTtcbiAgfVxufVxuIl19