@igo2/geo 1.9.0 → 1.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/icons/cross_black_18px.svg +88 -88
- package/assets/icons/place_blue_36px.svg +55 -55
- package/assets/icons/place_green_36px.svg +55 -55
- package/assets/icons/place_red_36px.svg +55 -55
- package/assets/icons/place_yellow_36px.svg +55 -55
- package/bundles/igo2-geo.umd.js +3651 -2762
- package/bundles/igo2-geo.umd.js.map +1 -1
- package/esm2015/lib/catalog/catalog-browser/catalog-browser-group.component.js +2 -2
- package/esm2015/lib/catalog/catalog-browser/catalog-browser-layer.component.js +2 -2
- package/esm2015/lib/catalog/catalog-browser/catalog-browser.module.js +1 -1
- package/esm2015/lib/catalog/catalog-library/add-catalog-dialog.component.js +72 -53
- package/esm2015/lib/catalog/catalog-library/catalog-library.component.js +2 -1
- package/esm2015/lib/catalog/catalog.module.js +1 -1
- package/esm2015/lib/catalog/shared/catalog.abstract.js +1 -1
- package/esm2015/lib/catalog/shared/catalog.interface.js +1 -1
- package/esm2015/lib/catalog/shared/catalog.service.js +13 -3
- package/esm2015/lib/catalog/shared/index.js +1 -1
- package/esm2015/lib/datasource/datasource.module.js +1 -1
- package/esm2015/lib/datasource/index.js +1 -1
- package/esm2015/lib/datasource/shared/capabilities.service.js +4 -4
- package/esm2015/lib/datasource/shared/datasources/carto-datasource.interface.js +1 -1
- package/esm2015/lib/datasource/shared/datasources/carto-datasource.js +2 -2
- package/esm2015/lib/datasource/shared/datasources/cluster-datasource.js +1 -1
- package/esm2015/lib/datasource/shared/datasources/data.service.js +1 -1
- package/esm2015/lib/datasource/shared/datasources/datasource.interface.js +1 -1
- package/esm2015/lib/datasource/shared/datasources/datasource.js +1 -1
- package/esm2015/lib/datasource/shared/datasources/mvt-datasource.interface.js +1 -1
- package/esm2015/lib/datasource/shared/datasources/mvt-datasource.js +2 -2
- package/esm2015/lib/datasource/shared/datasources/osm-datasource.interface.js +1 -1
- package/esm2015/lib/datasource/shared/datasources/websocket-datasource.interface.js +1 -1
- package/esm2015/lib/datasource/shared/datasources/websocket-datasource.js +1 -1
- package/esm2015/lib/datasource/shared/datasources/wfs-datasource.interface.js +1 -1
- package/esm2015/lib/datasource/shared/datasources/wfs.service.js +1 -1
- package/esm2015/lib/datasource/shared/datasources/wms-wfs.utils.js +1 -1
- package/esm2015/lib/datasource/shared/datasources/wmts-datasource.interface.js +1 -1
- package/esm2015/lib/datasource/shared/datasources/xyz-datasource.interface.js +1 -1
- package/esm2015/lib/datasource/shared/datasources/xyz-datasource.js +1 -1
- package/esm2015/lib/datasource/shared/index.js +1 -1
- package/esm2015/lib/datasource/shared/options/index.js +1 -1
- package/esm2015/lib/datasource/shared/options/options-api.interface.js +1 -1
- package/esm2015/lib/datasource/shared/options/options-api.providers.js +1 -1
- package/esm2015/lib/datasource/shared/options/options-api.service.js +1 -1
- package/esm2015/lib/datasource/shared/options/options.service.js +1 -1
- package/esm2015/lib/datasource/utils/esri-style-generator.js +1 -1
- package/esm2015/lib/datasource/utils/index.js +1 -1
- package/esm2015/lib/datasource/utils/tilegrid.js +1 -1
- package/esm2015/lib/directions/directions-buttons/directions-buttons.component.js +223 -0
- package/esm2015/lib/directions/directions-buttons/index.js +2 -0
- package/esm2015/lib/directions/directions-inputs/directions-inputs.component.js +300 -0
- package/esm2015/lib/directions/directions-inputs/index.js +2 -0
- package/esm2015/lib/directions/directions-results/directions-results.component.js +204 -0
- package/esm2015/lib/directions/directions-results/index.js +2 -0
- package/esm2015/lib/directions/directions-sources/directions-source.interface.js +1 -1
- package/esm2015/lib/directions/directions-sources/directions-source.js +1 -1
- package/esm2015/lib/directions/directions-sources/directions-source.provider.js +1 -1
- package/esm2015/lib/directions/directions-sources/index.js +1 -1
- package/esm2015/lib/directions/directions-sources/osrm-directions-source.js +11 -2
- package/esm2015/lib/directions/directions.component.js +314 -0
- package/esm2015/lib/directions/directions.module.js +31 -10
- package/esm2015/lib/directions/index.js +5 -2
- package/esm2015/lib/directions/shared/directions-source.service.js +1 -1
- package/esm2015/lib/directions/shared/directions.enum.js +20 -3
- package/esm2015/lib/directions/shared/directions.interface.js +1 -1
- package/esm2015/lib/directions/shared/directions.service.js +1 -1
- package/esm2015/lib/directions/shared/directions.utils.js +507 -0
- package/esm2015/lib/directions/shared/index.js +3 -1
- package/esm2015/lib/directions/shared/store.js +24 -0
- package/esm2015/lib/download/download-button/download-button.component.js +1 -1
- package/esm2015/lib/download/download-button/index.js +1 -1
- package/esm2015/lib/download/download.module.js +1 -1
- package/esm2015/lib/download/index.js +1 -1
- package/esm2015/lib/download/shared/download.interface.js +1 -1
- package/esm2015/lib/download/shared/download.service.js +1 -1
- package/esm2015/lib/download/shared/index.js +1 -1
- package/esm2015/lib/draw/draw/draw-popup.component.js +6 -5
- package/esm2015/lib/draw/draw/draw.component.js +22 -17
- package/esm2015/lib/draw/shared/draw.utils.js +1 -1
- package/esm2015/lib/feature/feature-details/feature-details.directive.js +1 -1
- package/esm2015/lib/feature/feature-details/feature-details.module.js +1 -1
- package/esm2015/lib/feature/feature-form/feature-form.component.js +1 -1
- package/esm2015/lib/feature/feature-form/feature-form.module.js +1 -1
- package/esm2015/lib/feature/feature.module.js +1 -1
- package/esm2015/lib/feature/index.js +1 -1
- package/esm2015/lib/feature/shared/feature.enums.js +1 -1
- package/esm2015/lib/feature/shared/feature.interfaces.js +1 -1
- package/esm2015/lib/feature/shared/index.js +1 -1
- package/esm2015/lib/feature/shared/strategies/in-map-extent.js +1 -1
- package/esm2015/lib/feature/shared/strategies/in-map-resolution.js +1 -1
- package/esm2015/lib/feature/shared/strategies/index.js +1 -1
- package/esm2015/lib/feature/shared/strategies/loading-layer.js +1 -1
- package/esm2015/lib/feature/shared/strategies/loading.js +1 -1
- package/esm2015/lib/feature/shared/strategies/selection.js +5 -9
- package/esm2015/lib/feature/shared/strategies.utils.js +1 -1
- package/esm2015/lib/filter/filter.module.js +7 -4
- package/esm2015/lib/filter/ogc-filter-button/index.js +1 -1
- package/esm2015/lib/filter/ogc-filter-button/ogc-filter-button.component.js +1 -1
- package/esm2015/lib/filter/ogc-filter-form/index.js +1 -1
- package/esm2015/lib/filter/ogc-filter-form/ogc-filter-form.component.js +3 -3
- package/esm2015/lib/filter/ogc-filter-selection/ogc-filter-selection.component.js +1 -1
- package/esm2015/lib/filter/ogc-filter-time/ogc-filter-time.component.js +240 -121
- package/esm2015/lib/filter/ogc-filterable-form/index.js +1 -1
- package/esm2015/lib/filter/ogc-filterable-item/index.js +1 -1
- package/esm2015/lib/filter/ogc-filterable-item/ogc-filterable-item.component.js +2 -2
- package/esm2015/lib/filter/ogc-filterable-list/index.js +1 -1
- package/esm2015/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.js +1 -1
- package/esm2015/lib/filter/ogc-filterable-list/ogc-filterable-list.component.js +1 -1
- package/esm2015/lib/filter/shared/filterable-datasource.pipe.js +1 -1
- package/esm2015/lib/filter/shared/index.js +1 -1
- package/esm2015/lib/filter/shared/ogc-filter.enum.js +1 -1
- package/esm2015/lib/filter/shared/ogc-filter.interface.js +1 -1
- package/esm2015/lib/filter/shared/ogc-filter.js +1 -1
- package/esm2015/lib/filter/shared/ogc-filter.service.js +1 -1
- package/esm2015/lib/filter/shared/spatial-filter.enum.js +1 -1
- package/esm2015/lib/filter/shared/spatial-filter.interface.js +1 -1
- package/esm2015/lib/filter/shared/time-filter.enum.js +1 -1
- package/esm2015/lib/filter/shared/time-filter.interface.js +1 -1
- package/esm2015/lib/filter/shared/time-filter.service.js +1 -1
- package/esm2015/lib/filter/spatial-filter/spatial-filter-item/index.js +1 -1
- package/esm2015/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.js +185 -95
- package/esm2015/lib/filter/spatial-filter/spatial-filter-list/index.js +1 -1
- package/esm2015/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.js +1 -1
- package/esm2015/lib/filter/spatial-filter/spatial-filter-type/index.js +1 -1
- package/esm2015/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.js +1 -1
- package/esm2015/lib/filter/time-filter-button/index.js +1 -1
- package/esm2015/lib/filter/time-filter-button/time-filter-button.component.js +1 -1
- package/esm2015/lib/filter/time-filter-form/index.js +1 -1
- package/esm2015/lib/filter/time-filter-form/time-filter-form.component.js +1 -1
- package/esm2015/lib/filter/time-filter-item/index.js +1 -1
- package/esm2015/lib/filter/time-filter-item/time-filter-item.component.js +2 -2
- package/esm2015/lib/filter/time-filter-list/index.js +1 -1
- package/esm2015/lib/filter/time-filter-list/time-filter-list-binding.directive.js +1 -1
- package/esm2015/lib/filter/time-filter-list/time-filter-list.component.js +1 -1
- package/esm2015/lib/geometry/geometry-form-field/geometry-form-field-input.component.js +3 -3
- package/esm2015/lib/geometry/geometry-form-field/geometry-form-field.component.js +1 -1
- package/esm2015/lib/geometry/geometry-form-field/geometry-form-field.module.js +1 -1
- package/esm2015/lib/geometry/geometry.module.js +1 -1
- package/esm2015/lib/geometry/index.js +1 -1
- package/esm2015/lib/geometry/shared/controls/draw.js +1 -1
- package/esm2015/lib/geometry/shared/controls/index.js +1 -1
- package/esm2015/lib/geometry/shared/geometry.errors.js +3 -3
- package/esm2015/lib/geometry/shared/index.js +1 -1
- package/esm2015/lib/import-export/export-button/export-button.component.js +1 -1
- package/esm2015/lib/import-export/export-button/index.js +1 -1
- package/esm2015/lib/import-export/import-export/import-export.component.js +179 -66
- package/esm2015/lib/import-export/import-export.module.js +1 -1
- package/esm2015/lib/import-export/index.js +1 -1
- package/esm2015/lib/import-export/shared/drop-geo-file.directive.js +1 -1
- package/esm2015/lib/import-export/shared/export.errors.js +1 -1
- package/esm2015/lib/import-export/shared/export.interface.js +1 -1
- package/esm2015/lib/import-export/shared/export.type.js +1 -1
- package/esm2015/lib/import-export/shared/export.utils.js +1 -1
- package/esm2015/lib/import-export/shared/import.interface.js +1 -1
- package/esm2015/lib/import-export/shared/import.service.js +1 -1
- package/esm2015/lib/import-export/shared/import.utils.js +1 -1
- package/esm2015/lib/import-export/shared/index.js +1 -1
- package/esm2015/lib/import-export/style-list/index.js +1 -1
- package/esm2015/lib/import-export/style-list/style-list.interface.js +1 -1
- package/esm2015/lib/import-export/style-list/style-list.module.js +1 -1
- package/esm2015/lib/import-export/style-list/style-list.provider.js +1 -1
- package/esm2015/lib/import-export/style-list/style-list.service.js +1 -1
- package/esm2015/lib/layer/index.js +1 -1
- package/esm2015/lib/layer/layer-item/index.js +1 -1
- package/esm2015/lib/layer/layer-item/layer-item.component.js +3 -3
- package/esm2015/lib/layer/layer-legend/index.js +1 -1
- package/esm2015/lib/layer/layer-legend/layer-legend.component.js +23 -16
- package/esm2015/lib/layer/layer-legend-item/index.js +1 -1
- package/esm2015/lib/layer/layer-legend-item/layer-legend-item.component.js +1 -1
- package/esm2015/lib/layer/layer-legend-list/index.js +1 -1
- package/esm2015/lib/layer/layer-legend-list/layer-legend-list-binding.directive.js +1 -1
- package/esm2015/lib/layer/layer-legend-list/layer-legend-list.component.js +5 -5
- package/esm2015/lib/layer/layer-list/index.js +1 -1
- package/esm2015/lib/layer/layer-list/layer-list-binding.directive.js +1 -1
- package/esm2015/lib/layer/layer-list/layer-list.component.js +44 -44
- package/esm2015/lib/layer/layer-list/layer-list.enum.js +1 -1
- package/esm2015/lib/layer/layer-list-tool/index.js +1 -1
- package/esm2015/lib/layer/layer-list-tool/layer-list-tool.component.js +2 -2
- package/esm2015/lib/layer/layer-list-tool/layer-list-tool.enum.js +1 -1
- package/esm2015/lib/layer/layer-list-tool/layer-list-tool.interface.js +1 -1
- package/esm2015/lib/layer/layer-list-tool/layer-list-tool.service.js +1 -1
- package/esm2015/lib/layer/layer.module.js +8 -5
- package/esm2015/lib/layer/shared/clusterParam.js +1 -1
- package/esm2015/lib/layer/shared/index.js +1 -1
- package/esm2015/lib/layer/shared/layer.enums.js +1 -1
- package/esm2015/lib/layer/shared/layer.service.js +20 -17
- package/esm2015/lib/layer/shared/layers/any-layer.interface.js +1 -1
- package/esm2015/lib/layer/shared/layers/any-layer.js +1 -1
- package/esm2015/lib/layer/shared/layers/image-layer.js +9 -4
- package/esm2015/lib/layer/shared/layers/index.js +1 -1
- package/esm2015/lib/layer/shared/layers/layer.js +15 -5
- package/esm2015/lib/layer/shared/layers/tile-layer.js +23 -3
- package/esm2015/lib/layer/shared/layers/vector-layer.interface.js +1 -1
- package/esm2015/lib/layer/shared/layers/vector-layer.js +20 -10
- package/esm2015/lib/layer/shared/layers/vectortile-layer.interface.js +1 -1
- package/esm2015/lib/layer/shared/layers/vectortile-layer.js +13 -3
- package/esm2015/lib/layer/shared/style.service.js +21 -16
- package/esm2015/lib/layer/shared/vector-style.interface.js +1 -1
- package/esm2015/lib/layer/track-feature-button/index.js +1 -1
- package/esm2015/lib/layer/track-feature-button/track-feature-button.component.js +1 -1
- package/esm2015/lib/layer/utils/index.js +2 -1
- package/esm2015/lib/layer/utils/layer.utils.js +11 -0
- package/esm2015/lib/layer/utils/layerSync-watcher.js +1 -1
- package/esm2015/lib/layer/utils/tile-watcher.js +1 -1
- package/esm2015/lib/map/baselayers-switcher/baselayers-switcher.animation.js +1 -1
- package/esm2015/lib/map/baselayers-switcher/index.js +1 -1
- package/esm2015/lib/map/baselayers-switcher/mini-basemap.component.js +1 -1
- package/esm2015/lib/map/geolocate-button/geolocate-button.component.js +1 -1
- package/esm2015/lib/map/geolocate-button/index.js +1 -1
- package/esm2015/lib/map/index.js +2 -1
- package/esm2015/lib/map/map-browser/index.js +1 -1
- package/esm2015/lib/map/map-browser/map-browser.component.js +1 -1
- package/esm2015/lib/map/map.module.js +10 -5
- package/esm2015/lib/map/menu-button/index.js +2 -0
- package/esm2015/lib/map/menu-button/menu-button.component.js +66 -0
- package/esm2015/lib/map/offline-button/index.js +1 -1
- package/esm2015/lib/map/offline-button/offline-button.component.js +1 -1
- package/esm2015/lib/map/rotation-button/index.js +1 -1
- package/esm2015/lib/map/rotation-button/rotation-button.component.js +1 -1
- package/esm2015/lib/map/shared/controllers/index.js +1 -1
- package/esm2015/lib/map/shared/hover-feature.directive.js +231 -80
- package/esm2015/lib/map/shared/map-pointer-position.directive.js +3 -1
- package/esm2015/lib/map/shared/map.enums.js +1 -1
- package/esm2015/lib/map/shared/map.interface.js +1 -1
- package/esm2015/lib/map/shared/map.js +38 -16
- package/esm2015/lib/map/shared/map.service.js +1 -1
- package/esm2015/lib/map/shared/map.utils.js +7 -3
- package/esm2015/lib/map/shared/projection.service.js +1 -1
- package/esm2015/lib/map/shared/projection.utils.js +1 -1
- package/esm2015/lib/map/swipe-control/swipe-control.component.js +1 -1
- package/esm2015/lib/map/zoom-button/index.js +1 -1
- package/esm2015/lib/map/zoom-button/zoom-button.component.js +1 -1
- package/esm2015/lib/measure/index.js +1 -1
- package/esm2015/lib/measure/measure.module.js +1 -1
- package/esm2015/lib/measure/measurer/measure-format.pipe.js +1 -1
- package/esm2015/lib/measure/measurer/measurer-dialog.component.js +188 -176
- package/esm2015/lib/measure/measurer/measurer-item.component.js +17 -12
- package/esm2015/lib/measure/measurer/measurer.component.js +170 -69
- package/esm2015/lib/measure/measurer/measurer.module.js +13 -8
- package/esm2015/lib/measure/shared/index.js +1 -1
- package/esm2015/lib/measure/shared/measure.enum.js +1 -1
- package/esm2015/lib/measure/shared/measure.interfaces.js +1 -1
- package/esm2015/lib/measure/shared/measure.utils.js +1 -1
- package/esm2015/lib/metadata/index.js +1 -1
- package/esm2015/lib/metadata/metadata-button/index.js +1 -1
- package/esm2015/lib/metadata/shared/index.js +1 -1
- package/esm2015/lib/metadata/shared/metadata.service.js +1 -1
- package/esm2015/lib/overlay/index.js +1 -1
- package/esm2015/lib/overlay/overlay.module.js +1 -1
- package/esm2015/lib/overlay/shared/index.js +1 -1
- package/esm2015/lib/overlay/shared/overlay-marker-style.utils.js +2 -2
- package/esm2015/lib/overlay/shared/overlay.directive.js +1 -1
- package/esm2015/lib/overlay/shared/overlay.enum.js +1 -1
- package/esm2015/lib/overlay/shared/overlay.service.js +1 -1
- package/esm2015/lib/print/index.js +1 -1
- package/esm2015/lib/print/print-form/index.js +1 -1
- package/esm2015/lib/print/print.module.js +1 -1
- package/esm2015/lib/print/shared/index.js +1 -1
- package/esm2015/lib/print/shared/print.service.js +1 -1
- package/esm2015/lib/query/index.js +1 -1
- package/esm2015/lib/query/query.module.js +1 -1
- package/esm2015/lib/query/shared/index.js +1 -1
- package/esm2015/lib/query/shared/query-search-source.js +1 -1
- package/esm2015/lib/query/shared/query-search-source.providers.js +1 -1
- package/esm2015/lib/query/shared/query.directive.js +4 -4
- package/esm2015/lib/query/shared/query.enums.js +1 -1
- package/esm2015/lib/query/shared/query.interfaces.js +1 -1
- package/esm2015/lib/query/shared/query.service.js +24 -3
- package/esm2015/lib/query/shared/query.utils.js +19 -1
- package/esm2015/lib/search/index.js +1 -1
- package/esm2015/lib/search/search-bar/search-bar.component.js +2 -2
- package/esm2015/lib/search/search-bar/search-bar.module.js +1 -1
- package/esm2015/lib/search/search-bar/search-url-param.directive.js +1 -1
- package/esm2015/lib/search/search-results/search-results-add-button.component.js +2 -2
- package/esm2015/lib/search/search-results/search-results-item.component.js +1 -1
- package/esm2015/lib/search/search-results/search-results.component.js +1 -1
- package/esm2015/lib/search/search-results/search-results.module.js +1 -1
- package/esm2015/lib/search/search-selector/search-selector.component.js +1 -1
- package/esm2015/lib/search/search-selector/search-selector.module.js +1 -1
- package/esm2015/lib/search/search-settings/search-settings.module.js +1 -1
- package/esm2015/lib/search/shared/index.js +1 -1
- package/esm2015/lib/search/shared/search-pointer-summary.directive.js +17 -6
- package/esm2015/lib/search/shared/search-source-service.providers.js +1 -1
- package/esm2015/lib/search/shared/search-source.service.js +1 -1
- package/esm2015/lib/search/shared/search.enums.js +1 -1
- package/esm2015/lib/search/shared/search.interfaces.js +1 -1
- package/esm2015/lib/search/shared/search.utils.js +1 -1
- package/esm2015/lib/search/shared/sources/cadastre.js +9 -2
- package/esm2015/lib/search/shared/sources/coordinates.interfaces.js +1 -1
- package/esm2015/lib/search/shared/sources/coordinates.js +9 -2
- package/esm2015/lib/search/shared/sources/icherche.js +17 -4
- package/esm2015/lib/search/shared/sources/ilayer.interfaces.js +1 -1
- package/esm2015/lib/search/shared/sources/ilayer.js +9 -2
- package/esm2015/lib/search/shared/sources/index.js +1 -1
- package/esm2015/lib/search/shared/sources/nominatim.interfaces.js +1 -1
- package/esm2015/lib/search/shared/sources/nominatim.js +9 -2
- package/esm2015/lib/search/shared/sources/storedqueries.interfaces.js +1 -1
- package/esm2015/lib/search/shared/sources/storedqueries.js +20 -12
- package/esm2015/lib/toast/index.js +1 -1
- package/esm2015/lib/toast/toast.component.js +1 -1
- package/esm2015/lib/toast/toast.module.js +1 -1
- package/esm2015/lib/utils/commonVectorStyle.interface.js +1 -1
- package/esm2015/lib/utils/googleLinks.js +1 -1
- package/esm2015/lib/utils/osmLinks.js +1 -1
- package/esm2015/lib/wkt/index.js +1 -1
- package/esm2015/lib/wkt/shared/index.js +1 -1
- package/esm2015/lib/wkt/shared/wkt.service.js +15 -15
- package/esm2015/lib/wkt/wkt.module.js +1 -1
- package/esm2015/lib/workspace/index.js +1 -1
- package/esm2015/lib/workspace/shared/feature-workspace.js +1 -1
- package/esm2015/lib/workspace/shared/feature-workspace.service.js +1 -1
- package/esm2015/lib/workspace/shared/index.js +1 -1
- package/esm2015/lib/workspace/shared/wfs-workspace.js +1 -1
- package/esm2015/lib/workspace/shared/wfs-workspace.service.js +1 -1
- package/esm2015/lib/workspace/shared/wms-workspace.service.js +1 -1
- package/esm2015/lib/workspace/widgets/index.js +1 -1
- package/esm2015/lib/workspace/widgets/ogc-filter/ogc-filter.component.js +1 -1
- package/esm2015/lib/workspace/widgets/ogc-filter/ogc-filter.module.js +1 -1
- package/esm2015/lib/workspace/widgets/widgets.js +1 -1
- package/esm2015/lib/workspace/workspace-selector/workspace-selector.directive.js +1 -1
- package/esm2015/lib/workspace/workspace-selector/workspace-selector.module.js +1 -1
- package/esm2015/lib/workspace/workspace-updator/workspace-updator.directive.js +1 -1
- package/esm2015/lib/workspace/workspace-updator/workspace-updator.module.js +1 -1
- package/esm2015/lib/workspace/workspace.module.js +1 -1
- package/fesm2015/igo2-geo.js +3221 -2431
- package/fesm2015/igo2-geo.js.map +1 -1
- package/lib/catalog/catalog-library/add-catalog-dialog.component.d.ts +1 -1
- package/lib/datasource/shared/datasources/datasource.interface.d.ts +1 -0
- package/lib/directions/directions-buttons/directions-buttons.component.d.ts +29 -0
- package/lib/directions/directions-buttons/index.d.ts +1 -0
- package/lib/directions/directions-inputs/directions-inputs.component.d.ts +45 -0
- package/lib/directions/directions-inputs/index.d.ts +1 -0
- package/lib/directions/directions-results/directions-results.component.d.ts +30 -0
- package/lib/directions/directions-results/index.d.ts +1 -0
- package/lib/directions/directions-sources/directions-source.d.ts +2 -2
- package/lib/directions/directions-sources/osrm-directions-source.d.ts +2 -2
- package/lib/directions/directions.component.d.ts +55 -0
- package/lib/directions/directions.module.d.ts +19 -16
- package/lib/directions/index.d.ts +4 -1
- package/lib/directions/shared/directions.enum.d.ts +16 -2
- package/lib/directions/shared/directions.interface.d.ts +53 -3
- package/lib/directions/shared/directions.service.d.ts +3 -3
- package/lib/directions/shared/directions.utils.d.ts +42 -0
- package/lib/directions/shared/index.d.ts +2 -0
- package/lib/directions/shared/store.d.ts +18 -0
- package/lib/draw/draw/draw-popup.component.d.ts +6 -2
- package/lib/feature/shared/strategies/selection.d.ts +1 -0
- package/lib/filter/filter.module.d.ts +1 -1
- package/lib/filter/ogc-filter-time/ogc-filter-time.component.d.ts +6 -1
- package/lib/filter/shared/ogc-filter.interface.d.ts +1 -0
- package/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.d.ts +7 -2
- package/lib/import-export/import-export/import-export.component.d.ts +2 -0
- package/lib/import-export/shared/export.interface.d.ts +2 -1
- package/lib/layer/layer-legend/layer-legend.component.d.ts +0 -1
- package/lib/layer/layer.module.d.ts +1 -1
- package/lib/layer/shared/layer.service.d.ts +1 -1
- package/lib/layer/shared/layers/layer.d.ts +1 -0
- package/lib/layer/shared/layers/tile-layer.d.ts +10 -1
- package/lib/layer/shared/layers/vector-layer.interface.d.ts +1 -0
- package/lib/layer/shared/layers/vectortile-layer.interface.d.ts +1 -0
- package/lib/layer/shared/style.service.d.ts +4 -1
- package/lib/layer/shared/vector-style.interface.d.ts +9 -5
- package/lib/layer/utils/index.d.ts +1 -0
- package/lib/layer/utils/layer.utils.d.ts +2 -0
- package/lib/map/index.d.ts +1 -0
- package/lib/map/map.module.d.ts +8 -7
- package/lib/map/menu-button/index.d.ts +1 -0
- package/lib/map/menu-button/menu-button.component.d.ts +17 -0
- package/lib/map/shared/hover-feature.directive.d.ts +14 -5
- package/lib/map/shared/map.d.ts +2 -1
- package/lib/map/shared/map.interface.d.ts +1 -0
- package/lib/map/shared/map.utils.d.ts +1 -1
- package/lib/measure/measurer/measurer.component.d.ts +10 -0
- package/lib/measure/measurer/measurer.module.d.ts +4 -3
- package/lib/query/shared/query.interfaces.d.ts +2 -0
- package/lib/query/shared/query.service.d.ts +9 -1
- package/lib/query/shared/query.utils.d.ts +12 -0
- package/lib/search/shared/search-pointer-summary.directive.d.ts +6 -0
- package/lib/search/shared/search.interfaces.d.ts +1 -0
- package/ngcc.config.js +3 -3
- package/package.json +14 -13
- package/esm2015/lib/directions/directions-form/directions-form-binding.directive.js +0 -99
- package/esm2015/lib/directions/directions-form/directions-form.component.js +0 -1537
- package/esm2015/lib/directions/directions-form/directions-form.service.js +0 -26
- package/esm2015/lib/directions/directions-form/index.js +0 -4
- package/lib/directions/directions-form/directions-form-binding.directive.d.ts +0 -18
- package/lib/directions/directions-form/directions-form.component.d.ts +0 -137
- package/lib/directions/directions-form/directions-form.service.d.ts +0 -11
- package/lib/directions/directions-form/index.d.ts +0 -3
|
@@ -161,7 +161,7 @@ function ImportExportComponent_section_10_Template(rf, ctx) { if (rf & 1) {
|
|
|
161
161
|
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(3, 1, "igo.geo.importExportForm.exportNoLayersExportable"));
|
|
162
162
|
} }
|
|
163
163
|
function ImportExportComponent_form_12_span_9_Template(rf, ctx) { if (rf & 1) {
|
|
164
|
-
i0.ɵɵelementStart(0, "span",
|
|
164
|
+
i0.ɵɵelementStart(0, "span", 29);
|
|
165
165
|
i0.ɵɵtext(1);
|
|
166
166
|
i0.ɵɵpipe(2, "translate");
|
|
167
167
|
i0.ɵɵelementEnd();
|
|
@@ -171,9 +171,9 @@ function ImportExportComponent_form_12_span_9_Template(rf, ctx) { if (rf & 1) {
|
|
|
171
171
|
i0.ɵɵtextInterpolate2(" (+", ctx_r17.layers.length - 1, " ", i0.ɵɵpipeBind1(2, 2, (ctx_r17.layers == null ? null : ctx_r17.layers.length) === 2 ? "igo.geo.importExportForm.other" : "igo.geo.importExportForm.others"), ") ");
|
|
172
172
|
} }
|
|
173
173
|
function ImportExportComponent_form_12_mat_option_10_mat_slide_toggle_4_Template(rf, ctx) { if (rf & 1) {
|
|
174
|
-
const
|
|
175
|
-
i0.ɵɵelementStart(0, "mat-slide-toggle",
|
|
176
|
-
i0.ɵɵlistener("click", function ImportExportComponent_form_12_mat_option_10_mat_slide_toggle_4_Template_mat_slide_toggle_click_0_listener($event) { i0.ɵɵrestoreView(
|
|
174
|
+
const _r30 = i0.ɵɵgetCurrentView();
|
|
175
|
+
i0.ɵɵelementStart(0, "mat-slide-toggle", 32);
|
|
176
|
+
i0.ɵɵlistener("click", function ImportExportComponent_form_12_mat_option_10_mat_slide_toggle_4_Template_mat_slide_toggle_click_0_listener($event) { i0.ɵɵrestoreView(_r30); const layer_r26 = i0.ɵɵnextContext().$implicit; const ctx_r28 = i0.ɵɵnextContext(2); return ctx_r28.onlySelectedClick($event, layer_r26.id); })("checked", function ImportExportComponent_form_12_mat_option_10_mat_slide_toggle_4_Template_mat_slide_toggle_checked_0_listener() { i0.ɵɵrestoreView(_r30); const layer_r26 = i0.ɵɵnextContext().$implicit; const ctx_r31 = i0.ɵɵnextContext(2); return ctx_r31.inLayersIdToExportSelectionOnly(layer_r26); })("change", function ImportExportComponent_form_12_mat_option_10_mat_slide_toggle_4_Template_mat_slide_toggle_change_0_listener($event) { i0.ɵɵrestoreView(_r30); const layer_r26 = i0.ɵɵnextContext().$implicit; const ctx_r33 = i0.ɵɵnextContext(2); return ctx_r33.onlySelected($event, layer_r26.id); });
|
|
177
177
|
i0.ɵɵelementStart(1, "small");
|
|
178
178
|
i0.ɵɵtext(2);
|
|
179
179
|
i0.ɵɵpipe(3, "translate");
|
|
@@ -186,23 +186,23 @@ function ImportExportComponent_form_12_mat_option_10_mat_slide_toggle_4_Template
|
|
|
186
186
|
} }
|
|
187
187
|
const _c1 = function (a0) { return { "igo-export-layer-mat-option": a0 }; };
|
|
188
188
|
function ImportExportComponent_form_12_mat_option_10_Template(rf, ctx) { if (rf & 1) {
|
|
189
|
-
i0.ɵɵelementStart(0, "mat-option",
|
|
189
|
+
i0.ɵɵelementStart(0, "mat-option", 30);
|
|
190
190
|
i0.ɵɵlistener("click", function ImportExportComponent_form_12_mat_option_10_Template_mat_option_click_0_listener($event) { return $event.stopPropagation(); });
|
|
191
191
|
i0.ɵɵelementStart(1, "p", 16);
|
|
192
192
|
i0.ɵɵtext(2);
|
|
193
193
|
i0.ɵɵelementEnd();
|
|
194
194
|
i0.ɵɵelementStart(3, "p", 16);
|
|
195
|
-
i0.ɵɵtemplate(4, ImportExportComponent_form_12_mat_option_10_mat_slide_toggle_4_Template, 4, 4, "mat-slide-toggle",
|
|
195
|
+
i0.ɵɵtemplate(4, ImportExportComponent_form_12_mat_option_10_mat_slide_toggle_4_Template, 4, 4, "mat-slide-toggle", 31);
|
|
196
196
|
i0.ɵɵelementEnd();
|
|
197
197
|
i0.ɵɵelementEnd();
|
|
198
198
|
} if (rf & 2) {
|
|
199
|
-
const
|
|
199
|
+
const layer_r26 = ctx.$implicit;
|
|
200
200
|
const ctx_r18 = i0.ɵɵnextContext(2);
|
|
201
|
-
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(4, _c1, ctx_r18.layerHasSelectedFeatures(
|
|
201
|
+
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(4, _c1, ctx_r18.layerHasSelectedFeatures(layer_r26)))("value", layer_r26.id);
|
|
202
202
|
i0.ɵɵadvance(2);
|
|
203
|
-
i0.ɵɵtextInterpolate(
|
|
203
|
+
i0.ɵɵtextInterpolate(layer_r26.title);
|
|
204
204
|
i0.ɵɵadvance(2);
|
|
205
|
-
i0.ɵɵproperty("ngIf", ctx_r18.layerHasSelectedFeatures(
|
|
205
|
+
i0.ɵɵproperty("ngIf", ctx_r18.layerHasSelectedFeatures(layer_r26));
|
|
206
206
|
} }
|
|
207
207
|
function ImportExportComponent_form_12_ng_container_18_mat_option_1_Template(rf, ctx) { if (rf & 1) {
|
|
208
208
|
i0.ɵɵelementStart(0, "mat-option", 2);
|
|
@@ -210,14 +210,14 @@ function ImportExportComponent_form_12_ng_container_18_mat_option_1_Template(rf,
|
|
|
210
210
|
i0.ɵɵpipe(2, "translate");
|
|
211
211
|
i0.ɵɵelementEnd();
|
|
212
212
|
} if (rf & 2) {
|
|
213
|
-
const
|
|
214
|
-
i0.ɵɵproperty("value",
|
|
213
|
+
const format_r37 = ctx.$implicit;
|
|
214
|
+
i0.ɵɵproperty("value", format_r37.key);
|
|
215
215
|
i0.ɵɵadvance(1);
|
|
216
|
-
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(2, 2, "igo.geo.export.format." +
|
|
216
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(2, 2, "igo.geo.export.format." + format_r37.value), " ");
|
|
217
217
|
} }
|
|
218
218
|
function ImportExportComponent_form_12_ng_container_18_Template(rf, ctx) { if (rf & 1) {
|
|
219
219
|
i0.ɵɵelementContainerStart(0);
|
|
220
|
-
i0.ɵɵtemplate(1, ImportExportComponent_form_12_ng_container_18_mat_option_1_Template, 3, 4, "mat-option",
|
|
220
|
+
i0.ɵɵtemplate(1, ImportExportComponent_form_12_ng_container_18_mat_option_1_Template, 3, 4, "mat-option", 33);
|
|
221
221
|
i0.ɵɵpipe(2, "keyvalue");
|
|
222
222
|
i0.ɵɵpipe(3, "async");
|
|
223
223
|
i0.ɵɵelementContainerEnd();
|
|
@@ -227,7 +227,7 @@ function ImportExportComponent_form_12_ng_container_18_Template(rf, ctx) { if (r
|
|
|
227
227
|
i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(2, 1, i0.ɵɵpipeBind1(3, 3, ctx_r19.formats$)));
|
|
228
228
|
} }
|
|
229
229
|
function ImportExportComponent_form_12_mat_option_20_Template(rf, ctx) { if (rf & 1) {
|
|
230
|
-
i0.ɵɵelementStart(0, "mat-option",
|
|
230
|
+
i0.ɵɵelementStart(0, "mat-option", 34);
|
|
231
231
|
i0.ɵɵtext(1);
|
|
232
232
|
i0.ɵɵpipe(2, "translate");
|
|
233
233
|
i0.ɵɵelementEnd();
|
|
@@ -238,7 +238,7 @@ function ImportExportComponent_form_12_mat_option_20_Template(rf, ctx) { if (rf
|
|
|
238
238
|
function ImportExportComponent_form_12_div_22_Template(rf, ctx) { if (rf & 1) {
|
|
239
239
|
i0.ɵɵelementStart(0, "div", 6);
|
|
240
240
|
i0.ɵɵelementStart(1, "mat-form-field");
|
|
241
|
-
i0.ɵɵelement(2, "input",
|
|
241
|
+
i0.ɵɵelement(2, "input", 35);
|
|
242
242
|
i0.ɵɵpipe(3, "translate");
|
|
243
243
|
i0.ɵɵelementEnd();
|
|
244
244
|
i0.ɵɵelementEnd();
|
|
@@ -252,21 +252,21 @@ function ImportExportComponent_form_12_div_23_ng_container_6_mat_option_1_Templa
|
|
|
252
252
|
i0.ɵɵpipe(2, "translate");
|
|
253
253
|
i0.ɵɵelementEnd();
|
|
254
254
|
} if (rf & 2) {
|
|
255
|
-
const
|
|
256
|
-
i0.ɵɵproperty("value",
|
|
255
|
+
const encoding_r40 = ctx.$implicit;
|
|
256
|
+
i0.ɵɵproperty("value", encoding_r40.key);
|
|
257
257
|
i0.ɵɵadvance(1);
|
|
258
|
-
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(2, 2, "igo.geo.export.encoding." +
|
|
258
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(2, 2, "igo.geo.export.encoding." + encoding_r40.value), " ");
|
|
259
259
|
} }
|
|
260
260
|
function ImportExportComponent_form_12_div_23_ng_container_6_Template(rf, ctx) { if (rf & 1) {
|
|
261
261
|
i0.ɵɵelementContainerStart(0);
|
|
262
|
-
i0.ɵɵtemplate(1, ImportExportComponent_form_12_div_23_ng_container_6_mat_option_1_Template, 3, 4, "mat-option",
|
|
262
|
+
i0.ɵɵtemplate(1, ImportExportComponent_form_12_div_23_ng_container_6_mat_option_1_Template, 3, 4, "mat-option", 33);
|
|
263
263
|
i0.ɵɵpipe(2, "keyvalue");
|
|
264
264
|
i0.ɵɵpipe(3, "async");
|
|
265
265
|
i0.ɵɵelementContainerEnd();
|
|
266
266
|
} if (rf & 2) {
|
|
267
|
-
const
|
|
267
|
+
const ctx_r38 = i0.ɵɵnextContext(3);
|
|
268
268
|
i0.ɵɵadvance(1);
|
|
269
|
-
i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(2, 1, i0.ɵɵpipeBind1(3, 3,
|
|
269
|
+
i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(2, 1, i0.ɵɵpipeBind1(3, 3, ctx_r38.encodings$)));
|
|
270
270
|
} }
|
|
271
271
|
function ImportExportComponent_form_12_div_23_Template(rf, ctx) { if (rf & 1) {
|
|
272
272
|
i0.ɵɵelementStart(0, "div", 6);
|
|
@@ -275,7 +275,7 @@ function ImportExportComponent_form_12_div_23_Template(rf, ctx) { if (rf & 1) {
|
|
|
275
275
|
i0.ɵɵtext(3);
|
|
276
276
|
i0.ɵɵpipe(4, "translate");
|
|
277
277
|
i0.ɵɵelementEnd();
|
|
278
|
-
i0.ɵɵelementStart(5, "mat-select",
|
|
278
|
+
i0.ɵɵelementStart(5, "mat-select", 36);
|
|
279
279
|
i0.ɵɵtemplate(6, ImportExportComponent_form_12_div_23_ng_container_6_Template, 4, 5, "ng-container", 22);
|
|
280
280
|
i0.ɵɵpipe(7, "async");
|
|
281
281
|
i0.ɵɵelementEnd();
|
|
@@ -289,8 +289,34 @@ function ImportExportComponent_form_12_div_23_Template(rf, ctx) { if (rf & 1) {
|
|
|
289
289
|
i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(7, 4, ctx_r22.encodings$).length !== 0);
|
|
290
290
|
} }
|
|
291
291
|
function ImportExportComponent_form_12_div_24_Template(rf, ctx) { if (rf & 1) {
|
|
292
|
-
i0.ɵɵelementStart(0, "div",
|
|
293
|
-
i0.ɵɵelementStart(1, "mat-slide-toggle",
|
|
292
|
+
i0.ɵɵelementStart(0, "div", 37);
|
|
293
|
+
i0.ɵɵelementStart(1, "mat-slide-toggle", 38);
|
|
294
|
+
i0.ɵɵtext(2);
|
|
295
|
+
i0.ɵɵpipe(3, "translate");
|
|
296
|
+
i0.ɵɵelementEnd();
|
|
297
|
+
i0.ɵɵelementEnd();
|
|
298
|
+
} if (rf & 2) {
|
|
299
|
+
i0.ɵɵadvance(1);
|
|
300
|
+
i0.ɵɵproperty("labelPosition", "before");
|
|
301
|
+
i0.ɵɵadvance(1);
|
|
302
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(3, 2, "igo.geo.importExportForm.exportCombineResults"), " ");
|
|
303
|
+
} }
|
|
304
|
+
function ImportExportComponent_form_12_div_25_Template(rf, ctx) { if (rf & 1) {
|
|
305
|
+
i0.ɵɵelementStart(0, "div", 39);
|
|
306
|
+
i0.ɵɵelementStart(1, "mat-slide-toggle", 40);
|
|
307
|
+
i0.ɵɵtext(2);
|
|
308
|
+
i0.ɵɵpipe(3, "translate");
|
|
309
|
+
i0.ɵɵelementEnd();
|
|
310
|
+
i0.ɵɵelementEnd();
|
|
311
|
+
} if (rf & 2) {
|
|
312
|
+
i0.ɵɵadvance(1);
|
|
313
|
+
i0.ɵɵproperty("labelPosition", "before");
|
|
314
|
+
i0.ɵɵadvance(1);
|
|
315
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(3, 2, "igo.geo.importExportForm.exportSeparator"), " ");
|
|
316
|
+
} }
|
|
317
|
+
function ImportExportComponent_form_12_div_26_Template(rf, ctx) { if (rf & 1) {
|
|
318
|
+
i0.ɵɵelementStart(0, "div", 41);
|
|
319
|
+
i0.ɵɵelementStart(1, "mat-slide-toggle", 42);
|
|
294
320
|
i0.ɵɵtext(2);
|
|
295
321
|
i0.ɵɵpipe(3, "translate");
|
|
296
322
|
i0.ɵɵelementEnd();
|
|
@@ -302,7 +328,7 @@ function ImportExportComponent_form_12_div_24_Template(rf, ctx) { if (rf & 1) {
|
|
|
302
328
|
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(3, 2, "igo.geo.importExportForm.exportFeatureInExtent"), " ");
|
|
303
329
|
} }
|
|
304
330
|
function ImportExportComponent_form_12_Template(rf, ctx) { if (rf & 1) {
|
|
305
|
-
const
|
|
331
|
+
const _r42 = i0.ɵɵgetCurrentView();
|
|
306
332
|
i0.ɵɵelementStart(0, "form", 5);
|
|
307
333
|
i0.ɵɵelementStart(1, "div", 6);
|
|
308
334
|
i0.ɵɵelementStart(2, "mat-form-field");
|
|
@@ -311,7 +337,7 @@ function ImportExportComponent_form_12_Template(rf, ctx) { if (rf & 1) {
|
|
|
311
337
|
i0.ɵɵpipe(5, "translate");
|
|
312
338
|
i0.ɵɵelementEnd();
|
|
313
339
|
i0.ɵɵelementStart(6, "mat-select", 18);
|
|
314
|
-
i0.ɵɵlistener("valueChange", function ImportExportComponent_form_12_Template_mat_select_valueChange_6_listener($event) { i0.ɵɵrestoreView(
|
|
340
|
+
i0.ɵɵlistener("valueChange", function ImportExportComponent_form_12_Template_mat_select_valueChange_6_listener($event) { i0.ɵɵrestoreView(_r42); const ctx_r41 = i0.ɵɵnextContext(); return ctx_r41.layers = $event; });
|
|
315
341
|
i0.ɵɵelementStart(7, "mat-select-trigger");
|
|
316
342
|
i0.ɵɵtext(8);
|
|
317
343
|
i0.ɵɵtemplate(9, ImportExportComponent_form_12_span_9_Template, 3, 4, "span", 19);
|
|
@@ -338,24 +364,26 @@ function ImportExportComponent_form_12_Template(rf, ctx) { if (rf & 1) {
|
|
|
338
364
|
i0.ɵɵtemplate(22, ImportExportComponent_form_12_div_22_Template, 4, 3, "div", 24);
|
|
339
365
|
i0.ɵɵtemplate(23, ImportExportComponent_form_12_div_23_Template, 8, 6, "div", 24);
|
|
340
366
|
i0.ɵɵtemplate(24, ImportExportComponent_form_12_div_24_Template, 4, 4, "div", 25);
|
|
341
|
-
i0.ɵɵ
|
|
342
|
-
i0.ɵɵ
|
|
343
|
-
i0.ɵɵ
|
|
344
|
-
i0.ɵɵ
|
|
345
|
-
i0.ɵɵ
|
|
346
|
-
i0.ɵɵpipe(29, "
|
|
347
|
-
i0.ɵɵ
|
|
367
|
+
i0.ɵɵtemplate(25, ImportExportComponent_form_12_div_25_Template, 4, 4, "div", 26);
|
|
368
|
+
i0.ɵɵtemplate(26, ImportExportComponent_form_12_div_26_Template, 4, 4, "div", 27);
|
|
369
|
+
i0.ɵɵelementStart(27, "div", 28);
|
|
370
|
+
i0.ɵɵelementStart(28, "button", 10);
|
|
371
|
+
i0.ɵɵlistener("click", function ImportExportComponent_form_12_Template_button_click_28_listener() { i0.ɵɵrestoreView(_r42); const ctx_r43 = i0.ɵɵnextContext(); return ctx_r43.handleExportFormSubmit(ctx_r43.form.value); });
|
|
372
|
+
i0.ɵɵpipe(29, "async");
|
|
373
|
+
i0.ɵɵtext(30);
|
|
348
374
|
i0.ɵɵpipe(31, "translate");
|
|
375
|
+
i0.ɵɵpipe(32, "translate");
|
|
376
|
+
i0.ɵɵpipe(33, "translate");
|
|
349
377
|
i0.ɵɵelementEnd();
|
|
350
|
-
i0.ɵɵelement(
|
|
351
|
-
i0.ɵɵpipe(
|
|
378
|
+
i0.ɵɵelement(34, "igo-spinner", 11);
|
|
379
|
+
i0.ɵɵpipe(35, "async");
|
|
352
380
|
i0.ɵɵelementEnd();
|
|
353
381
|
i0.ɵɵelementEnd();
|
|
354
382
|
} if (rf & 2) {
|
|
355
383
|
const ctx_r3 = i0.ɵɵnextContext();
|
|
356
384
|
i0.ɵɵproperty("formGroup", ctx_r3.form);
|
|
357
385
|
i0.ɵɵadvance(4);
|
|
358
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(5,
|
|
386
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(5, 17, "igo.geo.importExportForm.exportLayerPlaceholder"));
|
|
359
387
|
i0.ɵɵadvance(2);
|
|
360
388
|
i0.ɵɵproperty("value", ctx_r3.layers);
|
|
361
389
|
i0.ɵɵadvance(2);
|
|
@@ -363,25 +391,29 @@ function ImportExportComponent_form_12_Template(rf, ctx) { if (rf & 1) {
|
|
|
363
391
|
i0.ɵɵadvance(1);
|
|
364
392
|
i0.ɵɵproperty("ngIf", ctx_r3.layers.length > 1);
|
|
365
393
|
i0.ɵɵadvance(1);
|
|
366
|
-
i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(11,
|
|
394
|
+
i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(11, 19, ctx_r3.exportableLayers$));
|
|
367
395
|
i0.ɵɵadvance(5);
|
|
368
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(16,
|
|
396
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(16, 21, "igo.geo.importExportForm.exportFormatPlaceholder"));
|
|
369
397
|
i0.ɵɵadvance(3);
|
|
370
|
-
i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(19,
|
|
398
|
+
i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(19, 23, ctx_r3.formats$).length !== 0);
|
|
371
399
|
i0.ɵɵadvance(2);
|
|
372
|
-
i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(21,
|
|
400
|
+
i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(21, 25, ctx_r3.formats$).length === 0);
|
|
373
401
|
i0.ɵɵadvance(2);
|
|
374
402
|
i0.ɵɵproperty("ngIf", ctx_r3.forceNaming && ctx_r3.form.value.format !== "URL");
|
|
375
403
|
i0.ɵɵadvance(1);
|
|
376
404
|
i0.ɵɵproperty("ngIf", ctx_r3.form.value.format === "CSVcomma" || ctx_r3.form.value.format === "CSVsemicolon");
|
|
377
405
|
i0.ɵɵadvance(1);
|
|
406
|
+
i0.ɵɵproperty("ngIf", ctx_r3.layers.length > 1 && (ctx_r3.form.value.format === "CSVcomma" || ctx_r3.form.value.format === "CSVsemicolon"));
|
|
407
|
+
i0.ɵɵadvance(1);
|
|
408
|
+
i0.ɵɵproperty("ngIf", ctx_r3.layers.length > 1 && (ctx_r3.form.value.format === "CSVcomma" || ctx_r3.form.value.format === "CSVsemicolon") && ctx_r3.form.value.combineLayers);
|
|
409
|
+
i0.ɵɵadvance(1);
|
|
378
410
|
i0.ɵɵproperty("ngIf", ctx_r3.form.value.format !== "URL");
|
|
379
411
|
i0.ɵɵadvance(2);
|
|
380
|
-
i0.ɵɵproperty("disabled", !ctx_r3.form.valid || i0.ɵɵpipeBind1(
|
|
412
|
+
i0.ɵɵproperty("disabled", !ctx_r3.form.valid || i0.ɵɵpipeBind1(29, 27, ctx_r3.loading$));
|
|
381
413
|
i0.ɵɵadvance(2);
|
|
382
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r3.form.value.format !== "URL" ? i0.ɵɵpipeBind1(
|
|
414
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r3.form.value.format !== "URL" ? i0.ɵɵpipeBind1(31, 29, "igo.geo.importExportForm.exportButton") : ctx_r3.form.value.layers.length > 1 ? i0.ɵɵpipeBind1(32, 31, "igo.geo.importExportForm.exportButtonLinks") : i0.ɵɵpipeBind1(33, 33, "igo.geo.importExportForm.exportButtonLink"), " ");
|
|
383
415
|
i0.ɵɵadvance(4);
|
|
384
|
-
i0.ɵɵproperty("shown", i0.ɵɵpipeBind1(
|
|
416
|
+
i0.ɵɵproperty("shown", i0.ɵɵpipeBind1(35, 35, ctx_r3.loading$));
|
|
385
417
|
} }
|
|
386
418
|
export class ImportExportComponent {
|
|
387
419
|
constructor(importService, exportService, languageService, messageService, styleListService, styleService, formBuilder, config, cdRef, storageService, downloadService) {
|
|
@@ -683,11 +715,20 @@ export class ImportExportComponent {
|
|
|
683
715
|
(ogreFormats.indexOf(data.format) >= 0 || data.format === ExportFormat.URL) && !this.popupAllowed) {
|
|
684
716
|
this.handlePopup();
|
|
685
717
|
}
|
|
686
|
-
|
|
718
|
+
let geomTypesCSV = [];
|
|
719
|
+
let featuresCSV = [];
|
|
720
|
+
let filename = "";
|
|
721
|
+
for (const [layerIndex, layer] of data.layers.entries()) {
|
|
687
722
|
const lay = this.map.getLayerById(layer);
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
filename =
|
|
723
|
+
if (!(data.format === ExportFormat.CSVsemicolon || data.format === ExportFormat.CSVcomma)
|
|
724
|
+
|| !data.combineLayers || data.layers.length === 1) {
|
|
725
|
+
filename = lay.title;
|
|
726
|
+
if (data.name) {
|
|
727
|
+
filename = data.name;
|
|
728
|
+
}
|
|
729
|
+
}
|
|
730
|
+
else {
|
|
731
|
+
filename = this.languageService.translate.instant('igo.geo.export.combinedLayers');
|
|
691
732
|
}
|
|
692
733
|
const dSOptions = lay.dataSource.options;
|
|
693
734
|
if (data.format === ExportFormat.URL && dSOptions.download && (dSOptions.download.url || dSOptions.download.dynamicUrl)) {
|
|
@@ -772,6 +813,35 @@ export class ImportExportComponent {
|
|
|
772
813
|
this.messageService.error(message, title, { timeOut: 20000 });
|
|
773
814
|
}
|
|
774
815
|
}
|
|
816
|
+
else if ((data.format === ExportFormat.CSVsemicolon || data.format === ExportFormat.CSVcomma) && data.combineLayers) {
|
|
817
|
+
geomTypes.forEach(geomType => geomTypesCSV.push(geomType));
|
|
818
|
+
if (layerIndex !== data.layers.length - 1) {
|
|
819
|
+
continue;
|
|
820
|
+
}
|
|
821
|
+
else {
|
|
822
|
+
let previousFeature = undefined;
|
|
823
|
+
geomTypesCSV.forEach(geomType => {
|
|
824
|
+
geomType.features.forEach(currentFeature => {
|
|
825
|
+
if (data.separator) {
|
|
826
|
+
if (previousFeature) {
|
|
827
|
+
if (currentFeature.get('_featureStore').layer.options.title !==
|
|
828
|
+
previousFeature.get('_featureStore').layer.options.title) {
|
|
829
|
+
const titleEmptyRows = this.createTitleEmptyRows(previousFeature, currentFeature);
|
|
830
|
+
featuresCSV.push(titleEmptyRows[2]);
|
|
831
|
+
featuresCSV.push(titleEmptyRows[1]);
|
|
832
|
+
}
|
|
833
|
+
}
|
|
834
|
+
else {
|
|
835
|
+
const titleEmptyRows = this.createTitleEmptyRows(currentFeature, currentFeature);
|
|
836
|
+
featuresCSV.push(titleEmptyRows[0]);
|
|
837
|
+
}
|
|
838
|
+
}
|
|
839
|
+
featuresCSV.push(currentFeature);
|
|
840
|
+
previousFeature = currentFeature;
|
|
841
|
+
});
|
|
842
|
+
});
|
|
843
|
+
}
|
|
844
|
+
}
|
|
775
845
|
if (geomTypes.length === 0) {
|
|
776
846
|
this.loading$.next(false);
|
|
777
847
|
const title = translate.instant('igo.geo.export.nothing.title');
|
|
@@ -779,21 +849,58 @@ export class ImportExportComponent {
|
|
|
779
849
|
this.messageService.error(message, title, { timeOut: 20000 });
|
|
780
850
|
}
|
|
781
851
|
else {
|
|
782
|
-
|
|
783
|
-
.
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
852
|
+
if (!(data.format === ExportFormat.CSVsemicolon || data.format === ExportFormat.CSVcomma) || !data.combineLayers) {
|
|
853
|
+
geomTypes.map(geomType => this.exportService.export(geomType.features, data.format, filename + geomType.geometryType, data.encoding, this.map.projection)
|
|
854
|
+
.subscribe(() => { }, (error) => this.onFileExportError(error), () => {
|
|
855
|
+
this.onFileExportSuccess();
|
|
856
|
+
geomType.features.forEach(feature => {
|
|
857
|
+
this.circleToPoint(feature);
|
|
858
|
+
});
|
|
859
|
+
this.loading$.next(false);
|
|
860
|
+
}));
|
|
861
|
+
}
|
|
862
|
+
}
|
|
863
|
+
}
|
|
864
|
+
;
|
|
865
|
+
if ((data.format === ExportFormat.CSVsemicolon || data.format === ExportFormat.CSVcomma) && data.combineLayers) {
|
|
866
|
+
this.exportService.export(featuresCSV, data.format, filename, data.encoding, this.map.projection)
|
|
867
|
+
.subscribe(() => { }, (error) => this.onFileExportError(error), () => {
|
|
868
|
+
this.onFileExportSuccess();
|
|
869
|
+
featuresCSV.forEach(feature => {
|
|
870
|
+
this.circleToPoint(feature);
|
|
871
|
+
});
|
|
872
|
+
this.loading$.next(false);
|
|
873
|
+
});
|
|
874
|
+
}
|
|
875
|
+
}
|
|
876
|
+
createTitleEmptyRows(previousFeature, currentFeature) {
|
|
877
|
+
const titleRow = previousFeature.clone();
|
|
878
|
+
const titleRowWithArrow = previousFeature.clone();
|
|
879
|
+
const emptyRow = previousFeature.clone();
|
|
880
|
+
const previousFeatureKeys = previousFeature.getKeys();
|
|
881
|
+
const firstKey = previousFeatureKeys[1];
|
|
882
|
+
previousFeatureKeys.forEach(key => {
|
|
883
|
+
if (key === firstKey) {
|
|
884
|
+
titleRow.set(key, currentFeature.get('_featureStore').layer.options.title, true);
|
|
885
|
+
titleRowWithArrow.set(key, currentFeature.get('_featureStore').layer.options.title + " ===================>", true);
|
|
886
|
+
emptyRow.unset(key, true);
|
|
887
|
+
}
|
|
888
|
+
else {
|
|
889
|
+
titleRow.unset(key, true);
|
|
890
|
+
titleRowWithArrow.unset(key, true);
|
|
891
|
+
emptyRow.unset(key, true);
|
|
795
892
|
}
|
|
796
893
|
});
|
|
894
|
+
const titleEmptyRows = [titleRow, titleRowWithArrow, emptyRow];
|
|
895
|
+
return titleEmptyRows;
|
|
896
|
+
}
|
|
897
|
+
circleToPoint(feature) {
|
|
898
|
+
const radius = feature.get('rad');
|
|
899
|
+
if (radius) {
|
|
900
|
+
const point = new olPoint([feature.get('longitude'), feature.get('latitude')]);
|
|
901
|
+
point.transform('EPSG:4326', feature.get('_projection'));
|
|
902
|
+
feature.setGeometry(point);
|
|
903
|
+
}
|
|
797
904
|
}
|
|
798
905
|
buildForm() {
|
|
799
906
|
this.importForm = this.formBuilder.group({
|
|
@@ -805,6 +912,8 @@ export class ImportExportComponent {
|
|
|
805
912
|
layers: [[], [Validators.required]],
|
|
806
913
|
layersWithSelection: [[]],
|
|
807
914
|
encoding: [EncodingFormat.UTF8, [Validators.required]],
|
|
915
|
+
combineLayers: [true, [Validators.required]],
|
|
916
|
+
separator: [false, [Validators.required]],
|
|
808
917
|
featureInMapExtent: [false, [Validators.required]],
|
|
809
918
|
name: ['', [Validators.required]]
|
|
810
919
|
});
|
|
@@ -815,6 +924,8 @@ export class ImportExportComponent {
|
|
|
815
924
|
layers: [[], [Validators.required]],
|
|
816
925
|
layersWithSelection: [[]],
|
|
817
926
|
encoding: [EncodingFormat.UTF8, [Validators.required]],
|
|
927
|
+
combineLayers: [true, [Validators.required]],
|
|
928
|
+
separator: [false, [Validators.required]],
|
|
818
929
|
featureInMapExtent: [false, [Validators.required]],
|
|
819
930
|
});
|
|
820
931
|
}
|
|
@@ -835,7 +946,9 @@ export class ImportExportComponent {
|
|
|
835
946
|
this.loading$.next(false);
|
|
836
947
|
const translate = this.languageService.translate;
|
|
837
948
|
const title = translate.instant('igo.geo.export.popupBlocked.title');
|
|
838
|
-
const extraMessage = preCheck ?
|
|
949
|
+
const extraMessage = preCheck ?
|
|
950
|
+
translate.instant('igo.geo.export.popupBlocked.selectAgain') :
|
|
951
|
+
translate.instant('igo.geo.export.popupBlocked.retry');
|
|
839
952
|
const message = translate.instant('igo.geo.export.popupBlocked.text', { extraMessage });
|
|
840
953
|
this.messageService.error(message, title, { timeOut: 20000 });
|
|
841
954
|
}
|
|
@@ -1009,7 +1122,7 @@ export class ImportExportComponent {
|
|
|
1009
1122
|
}
|
|
1010
1123
|
}
|
|
1011
1124
|
ImportExportComponent.ɵfac = function ImportExportComponent_Factory(t) { return new (t || ImportExportComponent)(i0.ɵɵdirectiveInject(i1.ImportService), i0.ɵɵdirectiveInject(i2.ExportService), i0.ɵɵdirectiveInject(i3.LanguageService), i0.ɵɵdirectiveInject(i3.MessageService), i0.ɵɵdirectiveInject(i4.StyleListService), i0.ɵɵdirectiveInject(i5.StyleService), i0.ɵɵdirectiveInject(i6.FormBuilder), i0.ɵɵdirectiveInject(i3.ConfigService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i3.StorageService), i0.ɵɵdirectiveInject(i7.DownloadService)); };
|
|
1012
|
-
ImportExportComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ImportExportComponent, selectors: [["igo-import-export"]], inputs: { selectFirstProj: "selectFirstProj", map: "map", projectionsLimitations: "projectionsLimitations", store: "store", selectedMode: "selectedMode", exportOptions$: "exportOptions$" }, outputs: { selectMode: "selectMode", exportOptionsChange: "exportOptionsChange" }, decls: 14, vars: 17, consts: [[1, "import-export-toggle", "mat-typography"], [3, "value", "change"], [3, "value"], ["class", "igo-form", 3, "formGroup", 4, "ngIf"], ["class", "mat-typography", 4, "ngIf"], [1, "igo-form", 3, "formGroup"], [1, "igo-input-container"], [3, "value", "valueChange"], [3, "value", "click", 4, "ngFor", "ngForOf"], ["tooltip-position", "below", "matTooltipShowDelay", "500", 1, "igo-form-button-group", 3, "matTooltip"], ["mat-raised-button", "", "type", "button", 3, "disabled", "click"], [3, "shown"], ["hidden", "", "type", "file", 3, "click", "change"], ["fileInput", ""], [3, "value", "click"], ["mat-line", "", 4, "ngIf"], ["mat-line", ""], [1, "mat-typography"], ["multiple", "", 3, "value", "valueChange"], ["class", "export-select-trigger", 4, "ngIf"], [3, "ngClass", "value", "click", 4, "ngFor", "ngForOf"], ["formControlName", "format"], [4, "ngIf"], ["disabled", "true", 4, "ngIf"], ["class", "igo-input-container", 4, "ngIf"], ["class", "export-options mat-typography", 4, "ngIf"], [1, "igo-form-button-group"], [1, "export-select-trigger"], [3, "ngClass", "value", "click"], [3, "labelPosition", "click", "checked", "change", 4, "ngIf"], [3, "labelPosition", "click", "checked", "change"], [3, "value", 4, "ngFor", "ngForOf"], ["disabled", "true"], ["matInput", "", "formControlName", "name", 3, "placeholder"], ["formControlName", "encoding"], [1, "export-options", "mat-typography"], ["formControlName", "featureInMapExtent", 3, "labelPosition"]], template: function ImportExportComponent_Template(rf, ctx) { if (rf & 1) {
|
|
1125
|
+
ImportExportComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ImportExportComponent, selectors: [["igo-import-export"]], inputs: { selectFirstProj: "selectFirstProj", map: "map", projectionsLimitations: "projectionsLimitations", store: "store", selectedMode: "selectedMode", exportOptions$: "exportOptions$" }, outputs: { selectMode: "selectMode", exportOptionsChange: "exportOptionsChange" }, decls: 14, vars: 17, consts: [[1, "import-export-toggle", "mat-typography"], [3, "value", "change"], [3, "value"], ["class", "igo-form", 3, "formGroup", 4, "ngIf"], ["class", "mat-typography", 4, "ngIf"], [1, "igo-form", 3, "formGroup"], [1, "igo-input-container"], [3, "value", "valueChange"], [3, "value", "click", 4, "ngFor", "ngForOf"], ["tooltip-position", "below", "matTooltipShowDelay", "500", 1, "igo-form-button-group", 3, "matTooltip"], ["mat-raised-button", "", "type", "button", 3, "disabled", "click"], [3, "shown"], ["hidden", "", "type", "file", 3, "click", "change"], ["fileInput", ""], [3, "value", "click"], ["mat-line", "", 4, "ngIf"], ["mat-line", ""], [1, "mat-typography"], ["multiple", "", 3, "value", "valueChange"], ["class", "export-select-trigger", 4, "ngIf"], [3, "ngClass", "value", "click", 4, "ngFor", "ngForOf"], ["formControlName", "format"], [4, "ngIf"], ["disabled", "true", 4, "ngIf"], ["class", "igo-input-container", 4, "ngIf"], ["class", "export-combine-layers mat-typography", 4, "ngIf"], ["class", "export-separator mat-typography", 4, "ngIf"], ["class", "export-options mat-typography", 4, "ngIf"], [1, "igo-form-button-group"], [1, "export-select-trigger"], [3, "ngClass", "value", "click"], [3, "labelPosition", "click", "checked", "change", 4, "ngIf"], [3, "labelPosition", "click", "checked", "change"], [3, "value", 4, "ngFor", "ngForOf"], ["disabled", "true"], ["matInput", "", "formControlName", "name", 3, "placeholder"], ["formControlName", "encoding"], [1, "export-combine-layers", "mat-typography"], ["formControlName", "combineLayers", 3, "labelPosition"], [1, "export-separator", "mat-typography"], ["formControlName", "separator", 3, "labelPosition"], [1, "export-options", "mat-typography"], ["formControlName", "featureInMapExtent", 3, "labelPosition"]], template: function ImportExportComponent_Template(rf, ctx) { if (rf & 1) {
|
|
1013
1126
|
i0.ɵɵelementStart(0, "div", 0);
|
|
1014
1127
|
i0.ɵɵelementStart(1, "mat-button-toggle-group", 1);
|
|
1015
1128
|
i0.ɵɵlistener("change", function ImportExportComponent_Template_mat_button_toggle_group_change_1_listener($event) { return ctx.onImportExportChange($event); });
|
|
@@ -1027,7 +1140,7 @@ ImportExportComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: Impor
|
|
|
1027
1140
|
i0.ɵɵtemplate(9, ImportExportComponent_section_9_Template, 14, 15, "section", 4);
|
|
1028
1141
|
i0.ɵɵtemplate(10, ImportExportComponent_section_10_Template, 4, 3, "section", 4);
|
|
1029
1142
|
i0.ɵɵpipe(11, "async");
|
|
1030
|
-
i0.ɵɵtemplate(12, ImportExportComponent_form_12_Template,
|
|
1143
|
+
i0.ɵɵtemplate(12, ImportExportComponent_form_12_Template, 36, 37, "form", 3);
|
|
1031
1144
|
i0.ɵɵpipe(13, "async");
|
|
1032
1145
|
} if (rf & 2) {
|
|
1033
1146
|
i0.ɵɵadvance(1);
|
|
@@ -1048,7 +1161,7 @@ ImportExportComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: Impor
|
|
|
1048
1161
|
i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(11, 13, ctx.exportableLayers$).length === 0 && ctx.selectedMode === "export");
|
|
1049
1162
|
i0.ɵɵadvance(2);
|
|
1050
1163
|
i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(13, 15, ctx.exportableLayers$).length > 0 && ctx.selectedMode === "export");
|
|
1051
|
-
} }, directives: [i8.MatButtonToggleGroup, i8.MatButtonToggle, i9.NgIf, i6.ɵNgNoValidate, i6.NgControlStatusGroup, i6.FormGroupDirective, i10.MatFormField, i10.MatLabel, i11.MatSelect, i9.NgForOf, i12.MatTooltip, i13.MatButton, i14.SpinnerComponent, i15.MatOption, i11.MatSelectTrigger, i6.NgControlStatus, i6.FormControlName, i9.NgClass, i16.MatSlideToggle, i17.MatInput, i6.DefaultValueAccessor], pipes: [i18.TranslatePipe, i9.AsyncPipe, i14.KeyValuePipe], styles: ["mat-option.igo-export-layer-mat-option[_ngcontent-%COMP%]{height:5em;line-height:1em}.import-export-toggle[_ngcontent-%COMP%]{padding:10px;text-align:center}.import-export-toggle[_ngcontent-%COMP%] mat-button-toggle-group[_ngcontent-%COMP%]{width:100%}.import-export-toggle[_ngcontent-%COMP%] mat-button-toggle-group[_ngcontent-%COMP%] mat-button-toggle[_ngcontent-%COMP%]{width:50%}h4[_ngcontent-%COMP%]{padding:0 5px}.igo-form[_ngcontent-%COMP%]{padding:15px 5px}.igo-input-container[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%]{width:100%}.igo-form-button-group[_ngcontent-%COMP%]{text-align:center;padding-top:10px}igo-spinner[_ngcontent-%COMP%]{position:absolute;padding-left:10px}.export-options[_ngcontent-%COMP%]{overflow-x:hidden}.export-options[_ngcontent-%COMP%] mat-slide-toggle[_ngcontent-%COMP%]{width:100%;margin:10px}.export-options[_ngcontent-%COMP%] mat-slide-toggle[_ngcontent-%COMP%] .mat-slide-toggle-content{width:calc(100% - 60px)}.export-select-trigger[_ngcontent-%COMP%]{opacity:.75;font-size:.75em}"] });
|
|
1164
|
+
} }, directives: [i8.MatButtonToggleGroup, i8.MatButtonToggle, i9.NgIf, i6.ɵNgNoValidate, i6.NgControlStatusGroup, i6.FormGroupDirective, i10.MatFormField, i10.MatLabel, i11.MatSelect, i9.NgForOf, i12.MatTooltip, i13.MatButton, i14.SpinnerComponent, i15.MatOption, i11.MatSelectTrigger, i6.NgControlStatus, i6.FormControlName, i9.NgClass, i16.MatSlideToggle, i17.MatInput, i6.DefaultValueAccessor], pipes: [i18.TranslatePipe, i9.AsyncPipe, i14.KeyValuePipe], styles: ["mat-option.igo-export-layer-mat-option[_ngcontent-%COMP%]{height:5em;line-height:1em}.import-export-toggle[_ngcontent-%COMP%]{padding:10px;text-align:center}.import-export-toggle[_ngcontent-%COMP%] mat-button-toggle-group[_ngcontent-%COMP%]{width:100%}.import-export-toggle[_ngcontent-%COMP%] mat-button-toggle-group[_ngcontent-%COMP%] mat-button-toggle[_ngcontent-%COMP%]{width:50%}h4[_ngcontent-%COMP%]{padding:0 5px}.igo-form[_ngcontent-%COMP%]{padding:15px 5px}.igo-input-container[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%]{width:100%}.igo-form-button-group[_ngcontent-%COMP%]{text-align:center;padding-top:10px}igo-spinner[_ngcontent-%COMP%]{position:absolute;padding-left:10px}.export-options[_ngcontent-%COMP%], .export-combine-layers[_ngcontent-%COMP%], .export-separator[_ngcontent-%COMP%]{overflow-x:hidden}.export-options[_ngcontent-%COMP%] mat-slide-toggle[_ngcontent-%COMP%], .export-combine-layers[_ngcontent-%COMP%] mat-slide-toggle[_ngcontent-%COMP%], .export-separator[_ngcontent-%COMP%] mat-slide-toggle[_ngcontent-%COMP%]{width:100%;margin:10px}.export-options[_ngcontent-%COMP%] mat-slide-toggle[_ngcontent-%COMP%] .mat-slide-toggle-content, .export-combine-layers[_ngcontent-%COMP%] mat-slide-toggle[_ngcontent-%COMP%] .mat-slide-toggle-content, .export-separator[_ngcontent-%COMP%] mat-slide-toggle[_ngcontent-%COMP%] .mat-slide-toggle-content{width:calc(100% - 60px)}.export-select-trigger[_ngcontent-%COMP%]{opacity:.75;font-size:.75em}"] });
|
|
1052
1165
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ImportExportComponent, [{
|
|
1053
1166
|
type: Component,
|
|
1054
1167
|
args: [{
|
|
@@ -1073,4 +1186,4 @@ ImportExportComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: Impor
|
|
|
1073
1186
|
}], exportOptionsChange: [{
|
|
1074
1187
|
type: Output
|
|
1075
1188
|
}] }); })();
|
|
1076
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LWV4cG9ydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9pbXBvcnQtZXhwb3J0L2ltcG9ydC1leHBvcnQvaW1wb3J0LWV4cG9ydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9pbXBvcnQtZXhwb3J0L2ltcG9ydC1leHBvcnQvaW1wb3J0LWV4cG9ydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFHTCxNQUFNLEVBQ04sWUFBWSxFQUViLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBMEIsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEUsT0FBTyxFQUFnQixlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFRckQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUl0QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUUzRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFHckUsT0FBTyxPQUFPLE1BQU0sZUFBZSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUzQyxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLHVCQUF1QixFQUN4QixNQUFNLHdCQUF3QixDQUFDO0FBRWhDLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXpELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIscUJBQXFCLEVBQ3RCLE1BQU0sd0JBQXdCLENBQUM7QUFHaEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdC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Q0FBa0I7UUFDbkMsZUFDRjtRQURFLGlHQUNGO1FBSXlDLGVBQStCO1FBQS9CLG9EQUErQjtRQXVDL0MsZUFBK0I7UUFBL0Isb0RBQStCO1FBUy9CLGVBQTJFO1FBQTNFLGtIQUEyRTtRQUlqRSxlQUF5RTtRQUF6RSxnSEFBeUU7O3VGRER2RyxxQkFBcUI7Y0FMakMsU0FBUztlQUFDO2dCQUNULFFBQVEsRUFBRSxtQkFBbUI7Z0JBQzdCLFdBQVcsRUFBRSxnQ0FBZ0M7Z0JBQzdDLFNBQVMsRUFBRSxDQUFDLGdDQUFnQyxDQUFDO2FBQzlDO2tXQXVDVSxlQUFlO2tCQUF2QixLQUFLO1lBRUcsR0FBRztrQkFBWCxLQUFLO1lBSUYsc0JBQXNCO2tCQUR6QixLQUFLO1lBWUcsS0FBSztrQkFBYixLQUFLO1lBRUcsWUFBWTtrQkFBcEIsS0FBSztZQUVJLFVBQVU7a0JBQW5CLE1BQU07WUFFRSxjQUFjO2tCQUF0QixLQUFLO1lBSUksbUJBQW1CO2tCQUE1QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBDaGFuZ2VEZXRlY3RvclJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUJ1aWxkZXIsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1xuICBNZXNzYWdlU2VydmljZSxcbiAgTGFuZ3VhZ2VTZXJ2aWNlLFxuICBDb25maWdTZXJ2aWNlLFxuICBTdG9yYWdlU2VydmljZVxufSBmcm9tICdAaWdvMi9jb3JlJztcbmltcG9ydCB7IHN0ckVudW0gfSBmcm9tICdAaWdvMi91dGlscyc7XG5cbmltcG9ydCB7IEZlYXR1cmUgfSBmcm9tICcuLi8uLi9mZWF0dXJlL3NoYXJlZC9mZWF0dXJlLmludGVyZmFjZXMnO1xuaW1wb3J0IHsgSWdvTWFwIH0gZnJvbSAnLi4vLi4vbWFwL3NoYXJlZC9tYXAnO1xuaW1wb3J0IHsgQ2x1c3RlckRhdGFTb3VyY2UgfSBmcm9tICcuLi8uLi9kYXRhc291cmNlL3NoYXJlZC9kYXRhc291cmNlcy9jbHVzdGVyLWRhdGFzb3VyY2UnO1xuaW1wb3J0IHsgTGF5ZXIgfSBmcm9tICcuLi8uLi9sYXllci9zaGFyZWQvbGF5ZXJzL2xheWVyJztcbmltcG9ydCB7IFZlY3RvckxheWVyIH0gZnJvbSAnLi4vLi4vbGF5ZXIvc2hhcmVkL2xheWVycy92ZWN0b3ItbGF5ZXInO1xuaW1wb3J0IHsgQW55TGF5ZXIgfSBmcm9tICcuLi8uLi9sYXllci9zaGFyZWQvbGF5ZXJzL2FueS1sYXllcic7XG5pbXBvcnQgeyBEYXRhU291cmNlT3B0aW9ucyB9IGZyb20gJy4uLy4uL2RhdGFzb3VyY2Uvc2hhcmVkL2RhdGFzb3VyY2VzL2RhdGFzb3VyY2UuaW50ZXJmYWNlJztcbmltcG9ydCBvbFBvaW50IGZyb20gJ29sL2dlb20vUG9pbnQnO1xuaW1wb3J0IHsgY2lyY3VsYXIgfSBmcm9tICdvbC9nZW9tL1BvbHlnb24nO1xuXG5pbXBvcnQge1xuICBoYW5kbGVGaWxlRXhwb3J0RXJyb3IsXG4gIGhhbmRsZUZpbGVFeHBvcnRTdWNjZXNzXG59IGZyb20gJy4uL3NoYXJlZC9leHBvcnQudXRpbHMnO1xuaW1wb3J0IHsgRXhwb3J0T3B0aW9ucyB9IGZyb20gJy4uL3NoYXJlZC9leHBvcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IEV4cG9ydEZvcm1hdCwgRW5jb2RpbmdGb3JtYXQgfSBmcm9tICcuLi9zaGFyZWQvZXhwb3J0LnR5cGUnO1xuaW1wb3J0IHsgRXhwb3J0U2VydmljZSB9IGZyb20gJy4uL3NoYXJlZC9leHBvcnQuc2VydmljZSc7XG5pbXBvcnQgeyBJbXBvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkL2ltcG9ydC5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIGhhbmRsZUZpbGVJbXBvcnRTdWNjZXNzLFxuICBoYW5kbGVGaWxlSW1wb3J0RXJyb3Jcbn0gZnJvbSAnLi4vc2hhcmVkL2ltcG9ydC51dGlscyc7XG5pbXBvcnQgeyBTdHlsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9sYXllci9zaGFyZWQvc3R5bGUuc2VydmljZSc7XG5pbXBvcnQgeyBTdHlsZUxpc3RTZXJ2aWNlIH0gZnJvbSAnLi4vc3R5bGUtbGlzdC9zdHlsZS1saXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgc2tpcFdoaWxlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRW50aXR5UmVjb3JkLCBXb3Jrc3BhY2UgfSBmcm9tICdAaWdvMi9jb21tb24nO1xuaW1wb3J0IHR5cGUgeyBXb3Jrc3BhY2VTdG9yZSB9IGZyb20gJ0BpZ28yL2NvbW1vbic7XG5pbXBvcnQgeyBXZnNXb3Jrc3BhY2UgfSBmcm9tICcuLi8uLi93b3Jrc3BhY2Uvc2hhcmVkL3dmcy13b3Jrc3BhY2UnO1xuaW1wb3J0IHsgRmVhdHVyZVdvcmtzcGFjZSB9IGZyb20gJy4uLy4uL3dvcmtzcGFjZS9zaGFyZWQvZmVhdHVyZS13b3Jrc3BhY2UnO1xuaW1wb3J0IHsgTWF0U2xpZGVUb2dnbGVDaGFuZ2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbGlkZS10b2dnbGUnO1xuaW1wb3J0IHsgSW5wdXRQcm9qZWN0aW9ucywgUHJvamVjdGlvbnNMaW1pdGF0aW9uc09wdGlvbnMgfSBmcm9tICcuLi8uLi9tYXAvJztcbmltcG9ydCB7IERvd25sb2FkU2VydmljZSB9IGZyb20gJy4uLy4uL2Rvd25sb2FkL3NoYXJlZC9kb3dubG9hZC5zZXJ2aWNlJztcbmltcG9ydCB7IGNvbXB1dGVQcm9qZWN0aW9uc0NvbnN0cmFpbnRzIH0gZnJvbSAnLi4vLi4vbWFwJztcblxuaW1wb3J0IG9sVmVjdG9yU291cmNlIGZyb20gJ29sL3NvdXJjZS9WZWN0b3InO1xuaW1wb3J0IG9sQ2x1c3RlclNvdXJjZSBmcm9tICdvbC9zb3VyY2UvQ2x1c3Rlcic7XG5pbXBvcnQgb2xWZWN0b3JUaWxlU291cmNlIGZyb20gJ29sL3NvdXJjZS9WZWN0b3JUaWxlJztcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBPbEdlb21ldHJ5IH0gZnJvbSAnb2wvZ2VvbS9HZW9tZXRyeSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2lnby1pbXBvcnQtZXhwb3J0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ltcG9ydC1leHBvcnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9pbXBvcnQtZXhwb3J0LmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgSW1wb3J0RXhwb3J0Q29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBPbkluaXQge1xuICBwdWJsaWMgZm9ybTogRm9ybUdyb3VwO1xuICBwdWJsaWMgaW1wb3J0Rm9ybTogRm9ybUdyb3VwO1xuICBwdWJsaWMgZm9ybWF0cyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHVuZGVmaW5lZCk7XG4gIHB1YmxpYyBlbmNvZGluZ3MkID0gbmV3IEJlaGF2aW9yU3ViamVjdCh1bmRlZmluZWQpO1xuICBwdWJsaWMgZXhwb3J0YWJsZUxheWVycyQ6IEJlaGF2aW9yU3ViamVjdDxBbnlMYXllcltdPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoXG4gICAgW11cbiAgKTtcbiAgcHVibGljIGxvYWRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG4gIHB1YmxpYyBmb3JjZU5hbWluZyA9IGZhbHNlO1xuICBwdWJsaWMgY29udHJvbEZvcm1hdCA9ICdmb3JtYXQnO1xuXG4gIHByaXZhdGUgbGF5ZXJzJCQ6IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBleHBvcnRhYmxlTGF5ZXJzJCQ6IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBmb3JtYXRzJCQ6IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBlbmNvZGluZ3MkJDogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIGZvcm1MYXllciQkOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgZXhwb3J0T3B0aW9ucyQkOiBTdWJzY3JpcHRpb247XG5cblxuICBwcml2YXRlIGVzcGdDb2RlUmVnZXggPSBuZXcgUmVnRXhwKCdeXFxcXGR7NCw2fScpO1xuICBwcml2YXRlIGNsaWVudFNpZGVGaWxlU2l6ZU1heDogbnVtYmVyO1xuICBwdWJsaWMgZmlsZVNpemVNYjogbnVtYmVyO1xuXG4gIHB1YmxpYyBwcm9qZWN0aW9ucyQ6IEJlaGF2aW9yU3ViamVjdDxJbnB1dFByb2plY3Rpb25zW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChbXSk7XG4gIHByaXZhdGUgcHJvamVjdGlvbnNDb25zdHJhaW50czogUHJvamVjdGlvbnNMaW1pdGF0aW9uc09wdGlvbnM7XG5cbiAgcHVibGljIHBvcHVwQ2hlY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByaXZhdGUgcHJldmlvdXNMYXllclNwZWNzJDogQmVoYXZpb3JTdWJqZWN0PFxuICAgIHtcbiAgICAgIGlkOiBzdHJpbmc7XG4gICAgICB2aXNpYmxlOiBib29sZWFuO1xuICAgICAgb3BhY2l0eTogbnVtYmVyO1xuICAgICAgcXVlcnlhYmxlOiBib29sZWFuO1xuICAgIH1bXVxuICA+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCh1bmRlZmluZWQpO1xuXG4gIEBJbnB1dCgpIHNlbGVjdEZpcnN0UHJvajogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIG1hcDogSWdvTWFwO1xuXG4gIHByaXZhdGUgX3Byb2plY3Rpb25zTGltaXRhdGlvbnM6IFByb2plY3Rpb25zTGltaXRhdGlvbnNPcHRpb25zID0ge307XG4gIEBJbnB1dCgpXG4gIHNldCBwcm9qZWN0aW9uc0xpbWl0YXRpb25zKHZhbHVlOiBQcm9qZWN0aW9uc0xpbWl0YXRpb25zT3B0aW9ucykge1xuICAgIHRoaXMuX3Byb2plY3Rpb25zTGltaXRhdGlvbnMgPSB2YWx1ZTtcbiAgICB0aGlzLmNvbXB1dGVQcm9qZWN0aW9ucygpO1xuICB9XG4gIGdldCBwcm9qZWN0aW9uc0xpbWl0YXRpb25zKCk6IFByb2plY3Rpb25zTGltaXRhdGlvbnNPcHRpb25zIHtcbiAgICByZXR1cm4gdGhpcy5fcHJvamVjdGlvbnNMaW1pdGF0aW9ucyB8fCB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9yZSB0aGF0IGhvbGRzIHRoZSBhdmFpbGFibGUgd29ya3NwYWNlcy5cbiAgICovXG4gIEBJbnB1dCgpIHN0b3JlOiBXb3Jrc3BhY2VTdG9yZTtcblxuICBASW5wdXQoKSBzZWxlY3RlZE1vZGUgPSAnaW1wb3J0JztcblxuICBAT3V0cHV0KCkgc2VsZWN0TW9kZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIEBJbnB1dCgpIGV4cG9ydE9wdGlvbnMkOiBCZWhhdmlvclN1YmplY3Q8RXhwb3J0T3B0aW9ucz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFxuICAgIHVuZGVmaW5lZFxuICApO1xuXG4gIEBPdXRwdXQoKSBleHBvcnRPcHRpb25zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxFeHBvcnRPcHRpb25zPigpO1xuXG4gIGdldCBsYXllcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoJ2xheWVycycpLnZhbHVlO1xuICB9XG4gIHNldCBsYXllcnModmFsdWUpIHtcbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IGxheWVyczogdmFsdWUgfSk7XG4gIH1cblxuICBnZXQgaW5wdXRQcm9qKCkge1xuICAgIHJldHVybiB0aGlzLmltcG9ydEZvcm0uZ2V0KCdpbnB1dFByb2onKS52YWx1ZTtcbiAgfVxuICBzZXQgaW5wdXRQcm9qKHZhbHVlKSB7XG4gICAgdGhpcy5pbXBvcnRGb3JtLnBhdGNoVmFsdWUoeyBpbnB1dFByb2o6IHZhbHVlIH0pO1xuICB9XG5cbiAgZ2V0IHBvcHVwQWxsb3dlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yYWdlU2VydmljZS5nZXQoJ2ltcG9ydEV4cG9ydFBvcHVwQWxsb3dlZCcpIGFzIGJvb2xlYW4gfHwgZmFsc2U7XG4gIH1cblxuICBzZXQgcG9wdXBBbGxvd2VkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXQoJ2ltcG9ydEV4cG9ydFBvcHVwQWxsb3dlZCcsIHZhbHVlKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaW1wb3J0U2VydmljZTogSW1wb3J0U2VydmljZSxcbiAgICBwcml2YXRlIGV4cG9ydFNlcnZpY2U6IEV4cG9ydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBsYW5ndWFnZVNlcnZpY2U6IExhbmd1YWdlU2VydmljZSxcbiAgICBwcml2YXRlIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcbiAgICBwcml2YXRlIHN0eWxlTGlzdFNlcnZpY2U6IFN0eWxlTGlzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzdHlsZVNlcnZpY2U6IFN0eWxlU2VydmljZSxcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIGNvbmZpZzogQ29uZmlnU2VydmljZSxcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHN0b3JhZ2VTZXJ2aWNlOiBTdG9yYWdlU2VydmljZSxcbiAgICBwcml2YXRlIGRvd25sb2FkU2VydmljZTogRG93bmxvYWRTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMubG9hZENvbmZpZygpO1xuICAgIHRoaXMuYnVpbGRGb3JtKCk7XG4gICAgdGhpcy5jb21wdXRlUHJvamVjdGlvbnMoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMubGF5ZXJzJCQgPSB0aGlzLm1hcC5sYXllcnMkLnN1YnNjcmliZSgobGF5ZXJzKSA9PiB7XG4gICAgICB0aGlzLmV4cG9ydGFibGVMYXllcnMkLm5leHQoXG4gICAgICAgIGxheWVycy5maWx0ZXIoKGxheWVyOiBMYXllcikgPT4ge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAobGF5ZXIgaW5zdGFuY2VvZiBWZWN0b3JMYXllciAmJiBsYXllci5leHBvcnRhYmxlID09PSB0cnVlKSB8fFxuICAgICAgICAgICAgKGxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5kb3dubG9hZCAmJlxuICAgICAgICAgICAgICBsYXllci5kYXRhU291cmNlLm9wdGlvbnMuZG93bmxvYWQudXJsKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pIGFzIEFueUxheWVyW11cbiAgICAgICk7XG4gICAgfSk7XG4gICAgY29uc3QgY29uZmlnRmlsZVNpemVNYiA9IHRoaXMuY29uZmlnLmdldENvbmZpZyhcbiAgICAgICdpbXBvcnRFeHBvcnQuY2xpZW50U2lkZUZpbGVTaXplTWF4TWInXG4gICAgKTtcbiAgICB0aGlzLmNsaWVudFNpZGVGaWxlU2l6ZU1heCA9XG4gICAgICAoY29uZmlnRmlsZVNpemVNYiA/IGNvbmZpZ0ZpbGVTaXplTWIgOiAzMCkgKiBNYXRoLnBvdygxMDI0LCAyKTtcbiAgICB0aGlzLmZpbGVTaXplTWIgPSB0aGlzLmNsaWVudFNpZGVGaWxlU2l6ZU1heCAvIE1hdGgucG93KDEwMjQsIDIpO1xuXG4gICAgdGhpcy5leHBvcnRPcHRpb25zJCQgPSB0aGlzLmV4cG9ydE9wdGlvbnMkXG4gICAgICAucGlwZShza2lwV2hpbGUoKGV4cG9ydE9wdGlvbnMpID0+ICFleHBvcnRPcHRpb25zKSlcbiAgICAgIC5zdWJzY3JpYmUoKGV4cG9ydE9wdGlvbnMpID0+IHtcbiAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoZXhwb3J0T3B0aW9ucywgeyBlbWl0RXZlbnQ6IHRydWUgfSk7XG4gICAgICAgIGlmIChleHBvcnRPcHRpb25zLmxheWVycykge1xuICAgICAgICAgIHRoaXMuY29tcHV0ZUZvcm1hdHMoXG4gICAgICAgICAgICBleHBvcnRPcHRpb25zLmxheWVycy5tYXAoKGwpID0+IHRoaXMubWFwLmdldExheWVyQnlJZChsKSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB0aGlzLmZvcm1MYXllciQkID0gdGhpcy5mb3JtXG4gICAgICAuZ2V0KCdmb3JtYXQnKVxuICAgICAgLnZhbHVlQ2hhbmdlc1xuICAgICAgLnN1YnNjcmliZSgoZm9ybWF0KSA9PiB7XG4gICAgICAgIGNvbnN0IG9ncmVGb3JtYXRzID0gT2JqZWN0LmtleXMoRXhwb3J0U2VydmljZS5vZ3JlRm9ybWF0cyk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhdGhpcy5wb3B1cENoZWNrZWQgJiZcbiAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdsYXllcnMnKS52YWx1ZT8ubGVuZ3RoID4gMSAmJlxuICAgICAgICAgIChvZ3JlRm9ybWF0cy5pbmRleE9mKGZvcm1hdCkgPj0gMCB8fCBmb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5VUkwpKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLmhhbmRsZVBvcHVwKHRydWUpKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IGZvcm1hdDogdW5kZWZpbmVkIH0sIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgdGhpcy5mb3JtTGF5ZXIkJCA9IHRoaXMuZm9ybVxuICAgICAgLmdldCgnbGF5ZXJzJylcbiAgICAgIC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKChsYXllcnNJZCkgPT4ge1xuICAgICAgICB0aGlzLmhhbmRsZVByZXZpb3VzTGF5ZXJTcGVjcygpO1xuICAgICAgICBjb25zdCBzZWxlY3RlZExheWVycyA9IGxheWVyc0lkIGluc3RhbmNlb2YgQXJyYXkgPyBsYXllcnNJZCA6IFtsYXllcnNJZF07XG4gICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgbGF5ZXJzOiBzZWxlY3RlZExheWVycyB9LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgIGNvbnN0IGxheWVycyA9IHNlbGVjdGVkTGF5ZXJzLm1hcCgobCkgPT4gdGhpcy5tYXAuZ2V0TGF5ZXJCeUlkKGwpKTtcbiAgICAgICAgdGhpcy5jb21wdXRlRm9ybWF0cyhsYXllcnMpO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmZvcm1hdHMkLnZhbHVlKS5pbmRleE9mKHRoaXMuZm9ybS52YWx1ZS5mb3JtYXQpID09PVxuICAgICAgICAgIC0xXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgZm9ybWF0OiB1bmRlZmluZWQgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxvYWRpbmckLm5leHQodHJ1ZSk7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzU3BlY3M6IHtcbiAgICAgICAgICBpZDogc3RyaW5nO1xuICAgICAgICAgIHZpc2libGU6IGJvb2xlYW47XG4gICAgICAgICAgb3BhY2l0eTogbnVtYmVyO1xuICAgICAgICAgIHF1ZXJ5YWJsZTogYm9vbGVhbjtcbiAgICAgICAgfVtdID0gW107XG4gICAgICAgIGxheWVycy5mb3JFYWNoKChsYXllcikgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGxheWVyIGluc3RhbmNlb2YgVmVjdG9yTGF5ZXIgJiZcbiAgICAgICAgICAgIGxheWVyLmRhdGFTb3VyY2Uub2wuZ2V0RmVhdHVyZXMoKS5sZW5ndGggPT09IDBcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHByZXZpb3VzU3BlY3MucHVzaCh7XG4gICAgICAgICAgICAgIGlkOiBsYXllci5pZCxcbiAgICAgICAgICAgICAgdmlzaWJsZTogbGF5ZXIudmlzaWJsZSxcbiAgICAgICAgICAgICAgb3BhY2l0eTogbGF5ZXIub3BhY2l0eSxcbiAgICAgICAgICAgICAgcXVlcnlhYmxlOiAobGF5ZXIgYXMgYW55KS5xdWVyeWFibGVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbGF5ZXIub3BhY2l0eSA9IDA7XG4gICAgICAgICAgICBsYXllci52aXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMucHJldmlvdXNMYXllclNwZWNzJC5uZXh0KHByZXZpb3VzU3BlY3MpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgICAgICB9LCA1MDApO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLmZvcm1hdHMkJCA9IHRoaXMuZm9ybWF0cyRcbiAgICAgIC5waXBlKHNraXBXaGlsZSgoZm9ybWF0cykgPT4gIWZvcm1hdHMpKVxuICAgICAgLnN1YnNjcmliZSgoZm9ybWF0cykgPT4ge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMoZm9ybWF0cykubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBmb3JtYXQ6IGZvcm1hdHNbT2JqZWN0LmtleXMoZm9ybWF0cylbMF1dIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIHRoaXMuZW5jb2RpbmdzJCQgPSB0aGlzLmVuY29kaW5ncyRcbiAgICAgIC5waXBlKHNraXBXaGlsZSgoZW5jb2RpbmdzKSA9PiAhZW5jb2RpbmdzKSlcbiAgICAgIC5zdWJzY3JpYmUoKGVuY29kaW5ncykgPT4ge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMoZW5jb2RpbmdzKS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IGVuY29kaW5nOiBlbmNvZGluZ3NbT2JqZWN0LmtleXMoZW5jb2RpbmdzKVswXV0gfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgdGhpcy5leHBvcnRhYmxlTGF5ZXJzJCQgPSB0aGlzLmV4cG9ydGFibGVMYXllcnMkXG4gICAgICAucGlwZShza2lwV2hpbGUoKGxheWVycykgPT4gIWxheWVycykpXG4gICAgICAuc3Vic2NyaWJlKChsYXllcnMpID0+IHtcbiAgICAgICAgaWYgKGxheWVycy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IGxheWVyczogbGF5ZXJzWzBdLmlkIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIHRoaXMuZm9ybS5jb250cm9sc1t0aGlzLmNvbnRyb2xGb3JtYXRdLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKGZvcm1hdCkgPT4ge1xuICAgICAgaWYgKGZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LkNTVmNvbW1hIHx8IGZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LkNTVnNlbWljb2xvbikge1xuICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IGVuY29kaW5nOiBFbmNvZGluZ0Zvcm1hdC5MQVRJTjEgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IGVuY29kaW5nOiBFbmNvZGluZ0Zvcm1hdC5VVEY4IH0pO1xuICAgICAgfVxuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5zZWxlY3RGaXJzdFByb2opIHtcbiAgICAgIGlmICh0aGlzLnByb2plY3Rpb25zJC52YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5pbXBvcnRGb3JtLnBhdGNoVmFsdWUoeyBpbnB1dFByb2o6IHsgdHJhbnNsYXRlS2V5OiAnbmFkODMnLCBhbGlhczogJ05BRDgzJywgY29kZTogJ0VQU0c6NDMyNicsIHpvbmU6ICcnIH0gfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmltcG9ydEZvcm0ucGF0Y2hWYWx1ZSh7IGlucHV0UHJvajogdGhpcy5wcm9qZWN0aW9ucyQudmFsdWVbMF0gfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW1wb3J0Rm9ybS5wYXRjaFZhbHVlKHsgaW5wdXRQcm9qOiB1bmRlZmluZWQgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb21wdXRlUHJvamVjdGlvbnMoKSB7XG4gICAgdGhpcy5wcm9qZWN0aW9uc0NvbnN0cmFpbnRzID0gY29tcHV0ZVByb2plY3Rpb25zQ29uc3RyYWludHModGhpcy5wcm9qZWN0aW9uc0xpbWl0YXRpb25zKTtcbiAgICBjb25zdCBwcm9qZWN0aW9uczogSW5wdXRQcm9qZWN0aW9uc1tdID0gW107XG5cbiAgICBpZiAodGhpcy5wcm9qZWN0aW9uc0NvbnN0cmFpbnRzLm5hZDgzKSB7XG4gICAgICBwcm9qZWN0aW9ucy5wdXNoKHsgdHJhbnNsYXRlS2V5OiAnbmFkODMnLCBhbGlhczogJ05BRDgzJywgY29kZTogJ0VQU0c6NDI2OScsIHpvbmU6ICcnIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5wcm9qZWN0aW9uc0NvbnN0cmFpbnRzLndnczg0KSB7XG4gICAgICBwcm9qZWN0aW9ucy5wdXNoKHsgdHJhbnNsYXRlS2V5OiAnd2dzODQnLCBhbGlhczogJ1dHUzg0JywgY29kZTogJ0VQU0c6NDMyNicsIHpvbmU6ICcnIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5wcm9qZWN0aW9uc0NvbnN0cmFpbnRzLndlYk1lcmNhdG9yKSB7XG4gICAgICBwcm9qZWN0aW9ucy5wdXNoKHsgdHJhbnNsYXRlS2V5OiAnd2ViTWVyY2F0b3InLCBhbGlhczogJ1dlYiBNZXJjYXRvcicsIGNvZGU6ICdFUFNHOjM4NTcnLCB6b25lOiAnJyB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wcm9qZWN0aW9uc0NvbnN0cmFpbnRzLm10bSkge1xuICAgICAgLy8gYWxsIG10bSB6b25lc1xuICAgICAgY29uc3QgbWluWm9uZSA9IHRoaXMucHJvamVjdGlvbnNDb25zdHJhaW50cy5tdG1ab25lLm1pblpvbmU7XG4gICAgICBjb25zdCBtYXhab25lID0gdGhpcy5wcm9qZWN0aW9uc0NvbnN0cmFpbnRzLm10bVpvbmUubWF4Wm9uZTtcblxuICAgICAgZm9yIChsZXQgbXRtWm9uZSA9IG1pblpvbmU7IG10bVpvbmUgPD0gbWF4Wm9uZTsgbXRtWm9uZSsrKSB7XG4gICAgICAgIGNvbnN0IGNvZGUgPSBtdG1ab25lIDwgMTAgPyBgRVBTRzozMjE4JHttdG1ab25lfWAgOiBgRVBTRzozMjEkezgwICsgbXRtWm9uZX1gO1xuICAgICAgICBwcm9qZWN0aW9ucy5wdXNoKHsgdHJhbnNsYXRlS2V5OiAnbXRtJywgYWxpYXM6IGBNVE0gJHttdG1ab25lfWAsIGNvZGUsIHpvbmU6IGAke210bVpvbmV9YCB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5wcm9qZWN0aW9uc0NvbnN0cmFpbnRzLnV0bSkge1xuICAgICAgLy8gYWxsIHV0bSB6b25lc1xuICAgICAgY29uc3QgbWluWm9uZSA9IHRoaXMucHJvamVjdGlvbnNDb25zdHJhaW50cy51dG1ab25lLm1pblpvbmU7XG4gICAgICBjb25zdCBtYXhab25lID0gdGhpcy5wcm9qZWN0aW9uc0NvbnN0cmFpbnRzLnV0bVpvbmUubWF4Wm9uZTtcblxuICAgICAgZm9yIChsZXQgdXRtWm9uZSA9IG1pblpvbmU7IHV0bVpvbmUgPD0gbWF4Wm9uZTsgdXRtWm9uZSsrKSB7XG4gICAgICAgIGNvbnN0IGNvZGUgPSB1dG1ab25lIDwgMTAgPyBgRVBTRzozMjYwJHt1dG1ab25lfWAgOiBgRVBTRzozMjYke3V0bVpvbmV9YDtcbiAgICAgICAgcHJvamVjdGlvbnMucHVzaCh7IHRyYW5zbGF0ZUtleTogJ3V0bScsIGFsaWFzOiBgVVRNICR7dXRtWm9uZX1gLCBjb2RlLCB6b25lOiBgJHt1dG1ab25lfWAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGNvbmZpZ1Byb2plY3Rpb24gPSBbXTtcbiAgICBpZiAodGhpcy5wcm9qZWN0aW9uc0NvbnN0cmFpbnRzLnByb2pGcm9tQ29uZmlnKSB7XG4gICAgICBjb25maWdQcm9qZWN0aW9uID0gdGhpcy5jb25maWcuZ2V0Q29uZmlnKCdwcm9qZWN0aW9ucycpIHx8IFtdO1xuICAgIH1cblxuICAgIHRoaXMucHJvamVjdGlvbnMkLm5leHQoY29uZmlnUHJvamVjdGlvbi5jb25jYXQocHJvamVjdGlvbnMpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0V29ya3NwYWNlQnlMYXllcklkKGlkOiBzdHJpbmcpOiBXb3Jrc3BhY2Uge1xuICAgIGNvbnN0IHdrc0Zyb21MYXllcklkID0gdGhpcy5zdG9yZVxuICAgICAgLmFsbCgpXG4gICAgICAuZmluZCh3b3Jrc3BhY2UgPT4gKHdvcmtzcGFjZSBhcyBXZnNXb3Jrc3BhY2UgfCBGZWF0dXJlV29ya3NwYWNlKS5sYXllci5pZCA9PT0gaWQpO1xuICAgIGlmICh3a3NGcm9tTGF5ZXJJZCkge1xuICAgICAgcmV0dXJuIHdrc0Zyb21MYXllcklkO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBwdWJsaWMgZ2V0TGF5ZXJUaXRsZUJ5SWQoaWQpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm1hcC5nZXRMYXllckJ5SWQoaWQpLnRpdGxlO1xuICB9XG5cblxuICBsYXllckhhc1NlbGVjdGVkRmVhdHVyZXMobGF5ZXI6IExheWVyKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgd2tzRnJvbUxheWVyID0gdGhpcy5nZXRXb3Jrc3BhY2VCeUxheWVySWQobGF5ZXIuaWQpO1xuICAgIGlmICh3a3NGcm9tTGF5ZXIpIHtcbiAgICAgIGNvbnN0IHJlY3MgPSB3a3NGcm9tTGF5ZXIuZW50aXR5U3RvcmUuc3RhdGVWaWV3XG4gICAgICAgIC5maXJzdEJ5KChyZWNvcmQ6IEVudGl0eVJlY29yZDxGZWF0dXJlPikgPT4ge1xuICAgICAgICAgIHJldHVybiByZWNvcmQuc3RhdGUuc2VsZWN0ZWQgPT09IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlY3MgPyB0cnVlIDogZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9ubHlTZWxlY3RlZChldmVudDogTWF0U2xpZGVUb2dnbGVDaGFuZ2UsIGlkOiBzdHJpbmcpIHtcbiAgICBsZXQgbGF5ZXJzV2l0aFNlbGVjdGlvbiA9IHRoaXMuZm9ybS52YWx1ZS5sYXllcnNXaXRoU2VsZWN0aW9uO1xuICAgIGlmIChldmVudC5jaGVja2VkKSB7XG4gICAgICBsYXllcnNXaXRoU2VsZWN0aW9uLnB1c2goaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsYXllcnNXaXRoU2VsZWN0aW9uID0gbGF5ZXJzV2l0aFNlbGVjdGlvbi5maWx0ZXIobGF5ZXJJZCA9PiBsYXllcklkICE9PSBpZCk7XG4gICAgfVxuICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgbGF5ZXJzV2l0aFNlbGVjdGlvbiB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvbmx5U2VsZWN0ZWRDbGljayhldmVudCwgaWQ6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmZvcm0udmFsdWUubGF5ZXJzLmZpbmQobGF5ZXJJZCA9PiBsYXllcklkID09PSBpZCkpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpbkxheWVyc0lkVG9FeHBvcnRTZWxlY3Rpb25Pbmx5KGxheWVyOiBMYXllcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZvcm0udmFsdWUubGF5ZXJzV2l0aFNlbGVjdGlvbi5maW5kKGxheWVySWQgPT4gbGF5ZXJJZCA9PT0gbGF5ZXIuaWQpID8gdHJ1ZSA6IGZhbHNlO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5sYXllcnMkJC51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuZXhwb3J0YWJsZUxheWVycyQkLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5mb3JtYXRzJCQudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmVuY29kaW5ncyQkLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5mb3JtTGF5ZXIkJC51bnN1YnNjcmliZSgpO1xuICAgIGlmICh0aGlzLmV4cG9ydE9wdGlvbnMkJCkge1xuICAgICAgdGhpcy5leHBvcnRPcHRpb25zJCQudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgdGhpcy5leHBvcnRPcHRpb25zQ2hhbmdlLmVtaXQodGhpcy5mb3JtLnZhbHVlKTtcbiAgICB0aGlzLmhhbmRsZVByZXZpb3VzTGF5ZXJTcGVjcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVQcmV2aW91c0xheWVyU3BlY3MoKSB7XG4gICAgY29uc3QgcHJldmlvdXNTcGVjcyA9IHRoaXMucHJldmlvdXNMYXllclNwZWNzJC52YWx1ZTtcbiAgICBpZiAocHJldmlvdXNTcGVjcyAmJiBwcmV2aW91c1NwZWNzLmxlbmd0aCkge1xuICAgICAgcHJldmlvdXNTcGVjcy5mb3JFYWNoKChzcGVjcykgPT4ge1xuICAgICAgICBjb25zdCBwcmV2aW91c0xheWVyID0gdGhpcy5tYXAuZ2V0TGF5ZXJCeUlkKHNwZWNzLmlkKTtcbiAgICAgICAgcHJldmlvdXNMYXllci52aXNpYmxlID0gc3BlY3MudmlzaWJsZTtcbiAgICAgICAgcHJldmlvdXNMYXllci5vcGFjaXR5ID0gc3BlY3Mub3BhY2l0eTtcbiAgICAgICAgKHByZXZpb3VzTGF5ZXIgYXMgYW55KS5xdWVyeWFibGUgPSBzcGVjcy5xdWVyeWFibGU7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5wcmV2aW91c0xheWVyU3BlY3MkLm5leHQodW5kZWZpbmVkKTtcbiAgfVxuXG4gIGltcG9ydEZpbGVzKGZpbGVzOiBGaWxlW10pIHtcbiAgICBsZXQgaW5wdXRQcm9qID0gdGhpcy5pbnB1dFByb2ouY29kZTtcbiAgICBpZiAodGhpcy5lc3BnQ29kZVJlZ2V4LnRlc3QoaW5wdXRQcm9qKSkge1xuICAgICAgaW5wdXRQcm9qID0gYEVQU0c6JHtpbnB1dFByb2p9YDtcbiAgICB9XG5cbiAgICB0aGlzLmxvYWRpbmckLm5leHQodHJ1ZSk7XG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICB0aGlzLmltcG9ydFNlcnZpY2UuaW1wb3J0KGZpbGUsIGlucHV0UHJvaikuc3Vic2NyaWJlKFxuICAgICAgICAoZmVhdHVyZXM6IEZlYXR1cmVbXSkgPT4gdGhpcy5vbkZpbGVJbXBvcnRTdWNjZXNzKGZpbGUsIGZlYXR1cmVzKSxcbiAgICAgICAgKGVycm9yOiBFcnJvcikgPT4gdGhpcy5vbkZpbGVJbXBvcnRFcnJvcihmaWxlLCBlcnJvciksXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVBvcHVwKHByZUNoZWNrOiBib29sZWFuID0gdHJ1ZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHAxID0gd2luZG93Lm9wZW4oJycsICdwb3B1cCcsICd3aWR0aD0xLCBoZWlnaHQ9MScpO1xuICAgIHAxLmNsb3NlKCk7XG4gICAgY29uc3QgcDIgPSB3aW5kb3cub3BlbignJywgJ3BvcHVwJywgJ3dpZHRoPTEsIGhlaWdodD0xJyk7XG4gICAgaWYgKCFwMiB8fCBwMi5jbG9zZWQgfHwgdHlwZW9mIHAyLmNsb3NlZCA9PT0gJ3VuZGVmaW5lZCcgfHwgcDIgPT09IG51bGwpIHtcbiAgICAgIHRoaXMub25Qb3B1cEJsb2NrZWRFcnJvcihwcmVDaGVjayk7XG4gICAgICB0aGlzLnBvcHVwQWxsb3dlZCA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBwMi5jbG9zZSgpO1xuICAgICAgdGhpcy5wb3B1cEFsbG93ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5wb3B1cENoZWNrZWQgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wb3B1cEFsbG93ZWQ7XG4gIH1cblxuICBoYW5kbGVFeHBvcnRGb3JtU3VibWl0KGRhdGE6IEV4cG9ydE9wdGlvbnMpIHtcbiAgICB0aGlzLmxvYWRpbmckLm5leHQodHJ1ZSk7XG5cbiAgICBjb25zdCBvZ3JlRm9ybWF0cyA9IE9iamVjdC5rZXlzKEV4cG9ydFNlcnZpY2Uub2dyZUZvcm1hdHMpO1xuICAgIGlmICghdGhpcy5wb3B1cENoZWNrZWQgJiYgZGF0YS5sYXllcnMubGVuZ3RoID4gMSAmJlxuICAgICAgKG9ncmVGb3JtYXRzLmluZGV4T2YoZGF0YS5mb3JtYXQpID49IDAgfHwgZGF0YS5mb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5VUkwpICYmICF0aGlzLnBvcHVwQWxsb3dlZCkge1xuICAgICAgdGhpcy5oYW5kbGVQb3B1cCgpO1xuICAgIH1cblxuICAgIGRhdGEubGF5ZXJzLmZvckVhY2goKGxheWVyKSA9PiB7XG4gICAgICBjb25zdCBsYXkgPSB0aGlzLm1hcC5nZXRMYXllckJ5SWQobGF5ZXIpO1xuICAgICAgbGV0IGZpbGVuYW1lID0gbGF5LnRpdGxlO1xuICAgICAgaWYgKGRhdGEubmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGZpbGVuYW1lID0gZGF0YS5uYW1lO1xuICAgICAgfVxuICAgICAgY29uc3QgZFNPcHRpb25zOiBEYXRhU291cmNlT3B0aW9ucyA9IGxheS5kYXRhU291cmNlLm9wdGlvbnM7XG4gICAgICBpZiAoZGF0YS5mb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5VUkwgJiYgZFNPcHRpb25zLmRvd25sb2FkICYmIChkU09wdGlvbnMuZG93bmxvYWQudXJsIHx8IGRTT3B0aW9ucy5kb3dubG9hZC5keW5hbWljVXJsKSkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAvLyBiZXR0ZXIgbG9vayBhbiBmZWVsXG4gICAgICAgICAgY29uc3QgdXJsID0gZFNPcHRpb25zLmRvd25sb2FkLnVybCB8fCBkU09wdGlvbnMuZG93bmxvYWQuZHluYW1pY1VybDtcbiAgICAgICAgICB1cmwubWF0Y2goL3NlcnZpY2U9d2ZzL2dpKSA/IHRoaXMuZG93bmxvYWRTZXJ2aWNlLm9wZW4obGF5KSA6IHdpbmRvdy5vcGVuKHVybCAsICdfYmxhbmsnKTtcbiAgICAgICAgICB0aGlzLmxvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgICAgICB9LCA1MDApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCB3a3MgPSB0aGlzLmdldFdvcmtzcGFjZUJ5TGF5ZXJJZChsYXllcik7XG4gICAgICBsZXQgb2xGZWF0dXJlcztcbiAgICAgIGlmICh3a3MgJiYgd2tzLmVudGl0eVN0b3JlICYmIHdrcy5lbnRpdHlTdG9yZS5zdGF0ZVZpZXcuYWxsKCkubGVuZ3RoKSB7XG5cbiAgICAgICAgaWYgKGRhdGEubGF5ZXJzV2l0aFNlbGVjdGlvbi5pbmRleE9mKGxheWVyKSAhPT0gLTEgJiYgZGF0YS5mZWF0dXJlSW5NYXBFeHRlbnQpIHtcbiAgICAgICAgICAvLyBPbmx5IGV4cG9ydCBzZWxlY3RlZCBmZWF0dXJlICYmIGludG8gbWFwIGV4dGVudFxuICAgICAgICAgIG9sRmVhdHVyZXMgPSB3a3MuZW50aXR5U3RvcmUuc3RhdGVWaWV3LmFsbCgpXG4gICAgICAgICAgICAuZmlsdGVyKChlOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PikgPT4gZS5zdGF0ZS5pbk1hcEV4dGVudCAmJiBlLnN0YXRlLnNlbGVjdGVkKS5tYXAoZSA9PiAoZS5lbnRpdHkgYXMgRmVhdHVyZSkub2wpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGEubGF5ZXJzV2l0aFNlbGVjdGlvbi5pbmRleE9mKGxheWVyKSAhPT0gLTEgJiYgIWRhdGEuZmVhdHVyZUluTWFwRXh0ZW50KSB7XG4gICAgICAgICAgLy8gT25seSBleHBvcnQgc2VsZWN0ZWQgZmVhdHVyZSAmJiAgKGludG8gbWFwIGV4dGVudCBPUiBub3QpXG4gICAgICAgICAgb2xGZWF0dXJlcyA9IHdrcy5lbnRpdHlTdG9yZS5zdGF0ZVZpZXcuYWxsKClcbiAgICAgICAgICAgIC5maWx0ZXIoKGU6IEVudGl0eVJlY29yZDxvYmplY3Q+KSA9PiBlLnN0YXRlLnNlbGVjdGVkKS5tYXAoZSA9PiAoZS5lbnRpdHkgYXMgRmVhdHVyZSkub2wpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGEuZmVhdHVyZUluTWFwRXh0ZW50KSB7XG4gICAgICAgICAgLy8gT25seSBpbnRvIG1hcCBleHRlbnRcbiAgICAgICAgICBvbEZlYXR1cmVzID0gd2tzLmVudGl0eVN0b3JlLnN0YXRlVmlldy5hbGwoKVxuICAgICAgICAgICAgLmZpbHRlcigoZTogRW50aXR5UmVjb3JkPG9iamVjdD4pID0+IGUuc3RhdGUuaW5NYXBFeHRlbnQpLm1hcChlID0+IChlLmVudGl0eSBhcyBGZWF0dXJlKS5vbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQWxsIGZlYXR1cmVzXG4gICAgICAgICAgb2xGZWF0dXJlcyA9IHdrcy5lbnRpdHlTdG9yZS5zdGF0ZVZpZXcuYWxsKCkubWFwKGUgPT4gKGUuZW50aXR5IGFzIEZlYXR1cmUpLm9sKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IG9sID0gbGF5LmRhdGFTb3VyY2Uub2wgYXMgb2xWZWN0b3JTb3VyY2U8T2xHZW9tZXRyeT4gfCBvbENsdXN0ZXJTb3VyY2UgO1xuICAgICAgICBpZiAoZGF0YS5mZWF0dXJlSW5NYXBFeHRlbnQpIHtcbiAgICAgICAgICBvbEZlYXR1cmVzID0gb2wuZ2V0RmVhdHVyZXNJbkV4dGVudChcbiAgICAgICAgICAgIGxheS5tYXAudmlld0NvbnRyb2xsZXIuZ2V0RXh0ZW50KClcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9sRmVhdHVyZXMgPSBvbC5nZXRGZWF0dXJlcygpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsYXkuZGF0YVNvdXJjZSBpbnN0YW5jZW9mIENsdXN0ZXJEYXRhU291cmNlKSB7XG4gICAgICAgICAgb2xGZWF0dXJlcyA9IG9sRmVhdHVyZXMuZmxhdE1hcCgoY2x1c3RlcjogYW55KSA9PlxuICAgICAgICAgICAgY2x1c3Rlci5nZXQoJ2ZlYXR1cmVzJylcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRyYW5zbGF0ZSA9IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZTtcbiAgICAgIGxldCBnZW9tVHlwZXM6IHsgZ2VvbWV0cnlUeXBlOiBzdHJpbmcsIGZlYXR1cmVzOiBhbnlbXSB9W10gPSBbXTtcbiAgICAgIGlmIChkYXRhLmZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LlNoYXBlZmlsZSB8fCBkYXRhLmZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LkdQWCkge1xuICAgICAgICBvbEZlYXR1cmVzLmZvckVhY2goKG9sRmVhdHVyZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGZlYXR1cmVHZW9tVHlwZSA9IG9sRmVhdHVyZS5nZXRHZW9tZXRyeSgpLmdldFR5cGUoKTtcbiAgICAgICAgICBjb25zdCBjdXJyZW50R2VvbVR5cGUgPSBnZW9tVHlwZXMuZmluZChnZW9tVHlwZSA9PiBnZW9tVHlwZS5nZW9tZXRyeVR5cGUgPT09IGZlYXR1cmVHZW9tVHlwZSk7XG4gICAgICAgICAgaWYgKGN1cnJlbnRHZW9tVHlwZSkge1xuICAgICAgICAgICAgY3VycmVudEdlb21UeXBlLmZlYXR1cmVzLnB1c2gob2xGZWF0dXJlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2VvbVR5cGVzLnB1c2goeyBnZW9tZXRyeVR5cGU6IGZlYXR1cmVHZW9tVHlwZSwgZmVhdHVyZXM6IFtvbEZlYXR1cmVdIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnZW9tVHlwZXMgPSBbeyBnZW9tZXRyeVR5cGU6ICcnLCBmZWF0dXJlczogb2xGZWF0dXJlcyB9XTtcbiAgICAgIH1cblxuICAgICAgZ2VvbVR5cGVzLmZvckVhY2goZ2VvbVR5cGUgPT4ge1xuICAgICAgICBnZW9tVHlwZS5mZWF0dXJlcy5mb3JFYWNoKGZlYXR1cmUgPT4ge1xuICAgICAgICAgIGNvbnN0IHJhZGl1czogbnVtYmVyID0gZmVhdHVyZS5nZXQoJ3JhZCcpO1xuXG4gICAgICAgICAgaWYgKHJhZGl1cykge1xuICAgICAgICAgICAgY29uc3QgY2VudGVyNDMyNjogQXJyYXk8bnVtYmVyPiA9IFtmZWF0dXJlLmdldCgnbG9uZ2l0dWRlJyksIGZlYXR1cmUuZ2V0KCdsYXRpdHVkZScpXTtcbiAgICAgICAgICAgIGNvbnN0IGNpcmNsZSA9IGNpcmN1bGFyKGNlbnRlcjQzMjYsIHJhZGl1cywgNTAwKTtcbiAgICAgICAgICAgIGNpcmNsZS50cmFuc2Zvcm0oJ0VQU0c6NDMyNicsIGZlYXR1cmUuZ2V0KCdfcHJvamVjdGlvbicpKTtcbiAgICAgICAgICAgIGZlYXR1cmUuc2V0R2VvbWV0cnkoY2lyY2xlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChkYXRhLmZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LkdQWCkge1xuICAgICAgICBjb25zdCBncHhGZWF0dXJlQ250ID0gZ2VvbVR5cGVzLmxlbmd0aDtcbiAgICAgICAgZ2VvbVR5cGVzID0gZ2VvbVR5cGVzLmZpbHRlcihnZW9tVHlwZSA9PiBbJ0xpbmVTdHJpbmcnLCAnUG9pbnQnXS5pbmNsdWRlcyhnZW9tVHlwZS5nZW9tZXRyeVR5cGUpKTtcbiAgICAgICAgY29uc3QgZ3B4RmVhdHVyZUNudFBvaW50T3JQb2x5ID0gZ2VvbVR5cGVzLmxlbmd0aDtcbiAgICAgICAgaWYgKGdweEZlYXR1cmVDbnQgPiBncHhGZWF0dXJlQ250UG9pbnRPclBvbHkpIHtcbiAgICAgICAgICBjb25zdCB0aXRsZSA9IHRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmV4cG9ydC5ncHguZXJyb3IucG9seS50aXRsZScpO1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5leHBvcnQuZ3B4LmVycm9yLnBvbHkudGV4dCcpO1xuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuZXJyb3IobWVzc2FnZSwgdGl0bGUsIHsgdGltZU91dDogMjAwMDAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGdlb21UeXBlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5sb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgY29uc3QgdGl0bGUgPSB0cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5leHBvcnQubm90aGluZy50aXRsZScpO1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gdHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uZXhwb3J0Lm5vdGhpbmcudGV4dCcpO1xuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmVycm9yKG1lc3NhZ2UsIHRpdGxlLCB7IHRpbWVPdXQ6IDIwMDAwIH0pO1xuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnZW9tVHlwZXMubWFwKGdlb21UeXBlID0+XG4gICAgICAgICAgdGhpcy5leHBvcnRTZXJ2aWNlLmV4cG9ydChnZW9tVHlwZS5mZWF0dXJlcywgZGF0YS5mb3JtYXQsIGZpbGVuYW1lICsgZ2VvbVR5cGUuZ2VvbWV0cnlUeXBlLCBkYXRhLmVuY29kaW5nLCB0aGlzLm1hcC5wcm9qZWN0aW9uKVxuICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAoKSA9PiB7fSxcbiAgICAgICAgICAgIChlcnJvcjogRXJyb3IpID0+IHRoaXMub25GaWxlRXhwb3J0RXJyb3IoZXJyb3IpLFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLm9uRmlsZUV4cG9ydFN1Y2Nlc3MoKTtcblxuICAgICAgICAgICAgICBnZW9tVHlwZS5mZWF0dXJlcy5mb3JFYWNoKGZlYXR1cmUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJhZGl1czogbnVtYmVyID0gZmVhdHVyZS5nZXQoJ3JhZCcpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHJhZGl1cykge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcG9pbnQgPSBuZXcgb2xQb2ludChbZmVhdHVyZS5nZXQoJ2xvbmdpdHVkZScpLCBmZWF0dXJlLmdldCgnbGF0aXR1ZGUnKV0pO1xuICAgICAgICAgICAgICAgICAgcG9pbnQudHJhbnNmb3JtKCdFUFNHOjQzMjYnLCBmZWF0dXJlLmdldCgnX3Byb2plY3Rpb24nKSk7XG4gICAgICAgICAgICAgICAgICBmZWF0dXJlLnNldEdlb21ldHJ5KHBvaW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIHRoaXMubG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEZvcm0oKSB7XG4gICAgdGhpcy5pbXBvcnRGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBpbnB1dFByb2o6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXVxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuZm9yY2VOYW1pbmcpIHtcbiAgICAgIHRoaXMuZm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgICBmb3JtYXQ6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgICAgbGF5ZXJzOiBbW10sIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICAgIGxheWVyc1dpdGhTZWxlY3Rpb246IFtbXV0sXG4gICAgICAgIGVuY29kaW5nOiBbRW5jb2RpbmdGb3JtYXQuVVRGOCwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgICAgZmVhdHVyZUluTWFwRXh0ZW50OiBbZmFsc2UsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICAgIG5hbWU6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgICBmb3JtYXQ6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgICAgbGF5ZXJzOiBbW10sIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICAgIGxheWVyc1dpdGhTZWxlY3Rpb246IFtbXV0sXG4gICAgICAgIGVuY29kaW5nOiBbRW5jb2RpbmdGb3JtYXQuVVRGOCwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgICAgZmVhdHVyZUluTWFwRXh0ZW50OiBbZmFsc2UsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9uRmlsZUltcG9ydFN1Y2Nlc3MoZmlsZTogRmlsZSwgZmVhdHVyZXM6IEZlYXR1cmVbXSkge1xuICAgIGlmICghdGhpcy5jb25maWcuZ2V0Q29uZmlnKCdpbXBvcnRXaXRoU3R5bGUnKSkge1xuICAgICAgaGFuZGxlRmlsZUltcG9ydFN1Y2Nlc3MoXG4gICAgICAgIGZpbGUsXG4gICAgICAgIGZlYXR1cmVzLFxuICAgICAgICB0aGlzLm1hcCxcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZSxcbiAgICAgICAgdGhpcy5sYW5ndWFnZVNlcnZpY2VcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhhbmRsZUZpbGVJbXBvcnRTdWNjZXNzKFxuICAgICAgICBmaWxlLFxuICAgICAgICBmZWF0dXJlcyxcbiAgICAgICAgdGhpcy5tYXAsXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UsXG4gICAgICAgIHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLFxuICAgICAgICB0aGlzLnN0eWxlTGlzdFNlcnZpY2UsXG4gICAgICAgIHRoaXMuc3R5bGVTZXJ2aWNlXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb25GaWxlSW1wb3J0RXJyb3IoZmlsZTogRmlsZSwgZXJyb3I6IEVycm9yKSB7XG4gICAgdGhpcy5sb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICBoYW5kbGVGaWxlSW1wb3J0RXJyb3IoXG4gICAgICBmaWxlLFxuICAgICAgZXJyb3IsXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLFxuICAgICAgdGhpcy5sYW5ndWFnZVNlcnZpY2UsXG4gICAgICB0aGlzLmZpbGVTaXplTWJcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBvblBvcHVwQmxvY2tlZEVycm9yKHByZUNoZWNrOiBib29sZWFuID0gdHJ1ZSkge1xuICAgIHRoaXMubG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgY29uc3QgdHJhbnNsYXRlID0gdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlO1xuICAgIGNvbnN0IHRpdGxlID0gdHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uZXhwb3J0LnBvcHVwQmxvY2tlZC50aXRsZScpO1xuICAgIGNvbnN0IGV4dHJhTWVzc2FnZSA9IHByZUNoZWNrID8gdHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uZXhwb3J0LnBvcHVwQmxvY2tlZC5zZWxlY3RBZ2FpbicpIDogdHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uZXhwb3J0LnBvcHVwQmxvY2tlZC5yZXRyeScpO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSB0cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5leHBvcnQucG9wdXBCbG9ja2VkLnRleHQnLCB7IGV4dHJhTWVzc2FnZSB9KTtcbiAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmVycm9yKG1lc3NhZ2UsIHRpdGxlLCB7IHRpbWVPdXQ6IDIwMDAwIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkZpbGVFeHBvcnRFcnJvcihlcnJvcjogRXJyb3IpIHtcbiAgICB0aGlzLmxvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgIGhhbmRsZUZpbGVFeHBvcnRFcnJvcihlcnJvciwgdGhpcy5tZXNzYWdlU2VydmljZSwgdGhpcy5sYW5ndWFnZVNlcnZpY2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkQ29uZmlnKCkge1xuICAgIGlmICh0aGlzLmNvbmZpZy5nZXRDb25maWcoJ2ltcG9ydEV4cG9ydC5mb3JjZU5hbWluZycpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZm9yY2VOYW1pbmcgPSB0aGlzLmNvbmZpZy5nZXRDb25maWcoJ2ltcG9ydEV4cG9ydC5mb3JjZU5hbWluZycpO1xuICAgIH1cbiAgICB0aGlzLmNvbXB1dGVGb3JtYXRzKCk7XG4gICAgdGhpcy5sb2FkRW5jb2RpbmdzKCk7XG4gIH1cblxuICBwdWJsaWMgZW5jb2RpbmdEZWZhdWx0VmFsdWUoZm9ybWF0OiBFeHBvcnRGb3JtYXQpIHtcbiAgICBpZiAoZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuQ1NWY29tbWEgfHwgZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuQ1NWc2VtaWNvbG9uKSB7XG4gICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IGVuY29kaW5nOiBFbmNvZGluZ0Zvcm1hdC5MQVRJTjEgfSk7XG4gICAgICByZXR1cm4gRW5jb2RpbmdGb3JtYXQuTEFUSU4xO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IGVuY29kaW5nOiBFbmNvZGluZ0Zvcm1hdC5VVEY4IH0pO1xuICAgICAgcmV0dXJuIEVuY29kaW5nRm9ybWF0LlVURjg7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsb2FkRW5jb2RpbmdzKCkge1xuICAgIHRoaXMuZW5jb2RpbmdzJC5uZXh0KEVuY29kaW5nRm9ybWF0KTtcbiAgfVxuXG4gIHByaXZhdGUgY29tcHV0ZUZvcm1hdHMobGF5ZXJzPzogQW55TGF5ZXJbXSkge1xuICAgIGxldCBhcHBsaWVkZm9ybWF0czogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhFeHBvcnRGb3JtYXQpO1xuICAgIGNvbnN0IGZvcm1hdHNUeXBlID0ge1xuICAgICAgb25seVVybDogZmFsc2UsXG4gICAgICBvbmx5VmVjdG9yOiBmYWxzZSxcbiAgICAgIHZlY3RvckFuZFVybDogZmFsc2UsXG4gICAgICBjdXN0b21MaXN0OiBmYWxzZVxuICAgIH07XG4gICAgY29uc3QgY3VzdG9tTGlzdCA9IFtdO1xuICAgIGlmIChsYXllcnMgJiYgbGF5ZXJzLmxlbmd0aCkge1xuICAgICAgbGF5ZXJzLmZvckVhY2goKGxheWVyKSA9PiB7XG4gICAgICAgIGlmICghbGF5ZXIpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5kb3dubG9hZD8uYWxsb3dlZEZvcm1hdHMpIHtcbiAgICAgICAgICBmb3JtYXRzVHlwZS5jdXN0b21MaXN0ID0gdHJ1ZTtcbiAgICAgICAgICBjdXN0b21MaXN0LnB1c2goe2xheWVyOiBsYXllci50aXRsZSwgZm9ybWF0czogdGhpcy52YWxpZGF0ZUxpc3RGb3JtYXQobGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLmRvd25sb2FkLmFsbG93ZWRGb3JtYXRzKX0pO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICEobGF5ZXIgaW5zdGFuY2VvZiBWZWN0b3JMYXllcikgJiZcbiAgICAgICAgICBsYXllci5kYXRhU291cmNlLm9wdGlvbnMuZG93bmxvYWQgJiZcbiAgICAgICAgICBsYXllci5kYXRhU291cmNlLm9wdGlvbnMuZG93bmxvYWQudXJsXG4gICAgICAgICkge1xuICAgICAgICAgIGZvcm1hdHNUeXBlLm9ubHlVcmwgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIGxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5kb3dubG9hZCAmJlxuICAgICAgICAgIChsYXllci5kYXRhU291cmNlLm9wdGlvbnMuZG93bmxvYWQudXJsIHx8IGxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5kb3dubG9hZC5keW5hbWljVXJsKVxuICAgICAgICApIHtcbiAgICAgICAgICBmb3JtYXRzVHlwZS52ZWN0b3JBbmRVcmwgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKGxheWVyIGluc3RhbmNlb2YgVmVjdG9yTGF5ZXIpIHtcbiAgICAgICAgICBmb3JtYXRzVHlwZS5vbmx5VmVjdG9yID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChmb3JtYXRzVHlwZS5vbmx5VXJsID09PSB0cnVlICYmIGZvcm1hdHNUeXBlLm9ubHlWZWN0b3IgPT09IGZhbHNlKSB7XG4gICAgICAgIGFwcGxpZWRmb3JtYXRzID0gWydVUkwnXTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGZvcm1hdHNUeXBlLm9ubHlWZWN0b3IgPT09IHRydWUgJiZcbiAgICAgICAgZm9ybWF0c1R5cGUub25seVVybCA9PT0gZmFsc2VcbiAgICAgICkge1xuICAgICAgICB0aGlzLmNvbXB1dGVGb3JtYXRzKCk7IC8vIHJlc2V0XG4gICAgICAgIGlmIChFeHBvcnRGb3JtYXQuVVJMIGluIHRoaXMuZm9ybWF0cyQudmFsdWUpIHtcbiAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcy5mb3JtYXRzJC52YWx1ZSkuZmlsdGVyKFxuICAgICAgICAgICAgKGtleSkgPT4ga2V5ICE9PSAnVVJMJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgYXBwbGllZGZvcm1hdHMgPSBrZXlzO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBmb3JtYXRzVHlwZS52ZWN0b3JBbmRVcmwgPT09IHRydWUgJiZcbiAgICAgICAgZm9ybWF0c1R5cGUub25seVVybCA9PT0gZmFsc2UgJiZcbiAgICAgICAgZm9ybWF0c1R5cGUub25seVZlY3RvciA9PT0gZmFsc2VcbiAgICAgICkge1xuICAgICAgICB0aGlzLmNvbXB1dGVGb3JtYXRzKCk7IC8vIHJlc2V0XG4gICAgICAgIGlmICghKEV4cG9ydEZvcm1hdC5VUkwgaW4gdGhpcy5mb3JtYXRzJC52YWx1ZSkpIHtcbiAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcy5mb3JtYXRzJC52YWx1ZSk7XG4gICAgICAgICAga2V5cy5wdXNoKCdVUkwnKTtcbiAgICAgICAgICBhcHBsaWVkZm9ybWF0cyA9IGtleXM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuY29uZmlnLmdldENvbmZpZygnaW1wb3J0RXhwb3J0LmZvcm1hdHMnKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCB2YWxpZGF0ZWRMaXN0Rm9ybWF0ID0gdGhpcy52YWxpZGF0ZUxpc3RGb3JtYXQoXG4gICAgICAgIHRoaXMuY29uZmlnLmdldENvbmZpZygnaW1wb3J0RXhwb3J0LmZvcm1hdHMnKVxuICAgICAgKTtcbiAgICAgIGFwcGxpZWRmb3JtYXRzID0gdmFsaWRhdGVkTGlzdEZvcm1hdDtcbiAgICB9XG4gICAgaWYgKGZvcm1hdHNUeXBlLmN1c3RvbUxpc3QpIHtcbiAgICAgIGxldCBjb21tb25Gb3JtYXRzO1xuICAgICAgY29uc3QgbGF5ZXJzV2l0aEN1c3RvbUZvcm1hdHMgPSBbXTtcbiAgICAgIGxldCBwcmV2aW91c0N1c3RvbUxpc3RGb3JtYXRzID0gY3VzdG9tTGlzdFswXS5mb3JtYXRzO1xuICAgICAgY3VzdG9tTGlzdC5tYXAobGlzdCA9PiB7XG4gICAgICAgIGxheWVyc1dpdGhDdXN0b21Gb3JtYXRzLnB1c2gobGlzdC5sYXllcik7XG4gICAgICAgIGNvbW1vbkZvcm1hdHMgPSBsaXN0LmZvcm1hdHMuZmlsdGVyKHZhbHVlID0+IHByZXZpb3VzQ3VzdG9tTGlzdEZvcm1hdHMuaW5jbHVkZXModmFsdWUpKTtcbiAgICAgICAgcHJldmlvdXNDdXN0b21MaXN0Rm9ybWF0cyA9IGxpc3QuZm9ybWF0cztcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZmluYWxGb3JtYXRzID0gY29tbW9uRm9ybWF0cy5maWx0ZXIodmFsdWUgPT4gYXBwbGllZGZvcm1hdHMuaW5jbHVkZXModmFsdWUpKTtcbiAgICAgIGlmIChmaW5hbEZvcm1hdHMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmZvcm1hdHMkLm5leHQoc3RyRW51bShmaW5hbEZvcm1hdHMpKTtcblxuICAgICAgICBpZiAobGF5ZXJzICYmIGxheWVycy5sZW5ndGgpIHtcbiAgICAgICAgICBpZiAobGF5ZXJzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWxlcnQoXG4gICAgICAgICAgICAgIHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmV4cG9ydC5jdXN0b21MaXN0LnRleHQnLCB7IHZhbHVlOiBsYXllcnNXaXRoQ3VzdG9tRm9ybWF0cy5qb2luKCkgfSksXG4gICAgICAgICAgICAgIHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmV4cG9ydC5jdXN0b21MaXN0LnRpdGxlJylcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZvcm1hdHMkLm5leHQoW10pO1xuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFsZXJ0KFxuICAgICAgICAgIHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmV4cG9ydC5ub0Zvcm1hdC50ZXh0JyksXG4gICAgICAgICAgdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uZXhwb3J0Lm5vRm9ybWF0LnRpdGxlJylcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb3JtYXRzJC5uZXh0KHN0ckVudW0oYXBwbGllZGZvcm1hdHMpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlTGlzdEZvcm1hdChmb3JtYXRzOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gZm9ybWF0c1xuICAgICAgLmZpbHRlcigoZm9ybWF0KSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBmb3JtYXQudG9VcHBlckNhc2UoKSA9PT0gRXhwb3J0Rm9ybWF0LkNTVmNvbW1hLnRvVXBwZXJDYXNlKCkgfHxcbiAgICAgICAgICBmb3JtYXQudG9VcHBlckNhc2UoKSA9PT0gRXhwb3J0Rm9ybWF0LkNTVnNlbWljb2xvbi50b1VwcGVyQ2FzZSgpIHx8XG4gICAgICAgICAgZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5HTUwudG9VcHBlckNhc2UoKSB8fFxuICAgICAgICAgIGZvcm1hdC50b1VwcGVyQ2FzZSgpID09PSBFeHBvcnRGb3JtYXQuR1BYLnRvVXBwZXJDYXNlKCkgfHxcbiAgICAgICAgICBmb3JtYXQudG9VcHBlckNhc2UoKSA9PT0gRXhwb3J0Rm9ybWF0Lkdlb0pTT04udG9VcHBlckNhc2UoKSB8fFxuICAgICAgICAgIGZvcm1hdC50b1VwcGVyQ2FzZSgpID09PSBFeHBvcnRGb3JtYXQuS01MLnRvVXBwZXJDYXNlKCkgfHxcbiAgICAgICAgICBmb3JtYXQudG9VcHBlckNhc2UoKSA9PT0gRXhwb3J0Rm9ybWF0LlNoYXBlZmlsZS50b1VwcGVyQ2FzZSgpIHx8XG4gICAgICAgICAgZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5VUkwudG9VcHBlckNhc2UoKVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gZm9ybWF0O1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLm1hcCgoZm9ybWF0KSA9PiB7XG4gICAgICAgIGlmIChmb3JtYXQudG9VcHBlckNhc2UoKSA9PT0gRXhwb3J0Rm9ybWF0LkNTVmNvbW1hLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICBmb3JtYXQgPSBFeHBvcnRGb3JtYXQuQ1NWY29tbWE7XG4gICAgICAgICAgcmV0dXJuIGZvcm1hdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5DU1ZzZW1pY29sb24udG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgIGZvcm1hdCA9IEV4cG9ydEZvcm1hdC5DU1ZzZW1pY29sb247XG4gICAgICAgICAgcmV0dXJuIGZvcm1hdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5HTUwudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgIGZvcm1hdCA9IEV4cG9ydEZvcm1hdC5HTUw7XG4gICAgICAgICAgcmV0dXJuIGZvcm1hdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5HUFgudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgIGZvcm1hdCA9IEV4cG9ydEZvcm1hdC5HUFg7XG4gICAgICAgICAgcmV0dXJuIGZvcm1hdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5HZW9KU09OLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICBmb3JtYXQgPSBFeHBvcnRGb3JtYXQuR2VvSlNPTjtcbiAgICAgICAgICByZXR1cm4gZm9ybWF0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtYXQudG9VcHBlckNhc2UoKSA9PT0gRXhwb3J0Rm9ybWF0LktNTC50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgZm9ybWF0ID0gRXhwb3J0Rm9ybWF0LktNTDtcbiAgICAgICAgICByZXR1cm4gZm9ybWF0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtYXQudG9VcHBlckNhc2UoKSA9PT0gRXhwb3J0Rm9ybWF0LlNoYXBlZmlsZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgZm9ybWF0ID0gRXhwb3J0Rm9ybWF0LlNoYXBlZmlsZTtcbiAgICAgICAgICByZXR1cm4gZm9ybWF0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZvcm1hdC50b1VwcGVyQ2FzZSgpID09PSBFeHBvcnRGb3JtYXQuVVJMLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICBmb3JtYXQgPSBFeHBvcnRGb3JtYXQuVVJMO1xuICAgICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG1vZGVDaGFuZ2VkKG1vZGUpIHtcbiAgICB0aGlzLnNlbGVjdE1vZGUuZW1pdChtb2RlKTtcbiAgfVxuXG4gIHByaXZhdGUgb25GaWxlRXhwb3J0U3VjY2VzcygpIHtcbiAgICBoYW5kbGVGaWxlRXhwb3J0U3VjY2Vzcyh0aGlzLm1lc3NhZ2VTZXJ2aWNlLCB0aGlzLmxhbmd1YWdlU2VydmljZSk7XG4gIH1cblxuICBvbkltcG9ydEV4cG9ydENoYW5nZShldmVudCkge1xuICAgIHRoaXMuc2VsZWN0ZWRNb2RlID0gZXZlbnQudmFsdWU7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJpbXBvcnQtZXhwb3J0LXRvZ2dsZSBtYXQtdHlwb2dyYXBoeVwiPlxuICA8bWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXBcbiAgICAgICAgW3ZhbHVlXT1cInNlbGVjdGVkTW9kZVwiXG4gICAgICAgIChjaGFuZ2UpPVwib25JbXBvcnRFeHBvcnRDaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgW3ZhbHVlXT1cIidpbXBvcnQnXCI+XG4gICAgICAgICAge3snaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmltcG9ydFRhYlRpdGxlJyB8IHRyYW5zbGF0ZX19XG4gICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XG4gICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSBbdmFsdWVdPVwiJ2V4cG9ydCdcIj5cbiAgICAgICAgICB7eydpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uZXhwb3J0VGFiVGl0bGUnIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgPC9tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cD5cbjwvZGl2PlxuXG48Zm9ybSBjbGFzcz1cImlnby1mb3JtXCIgW2Zvcm1Hcm91cF09XCJpbXBvcnRGb3JtXCIgKm5nSWY9XCJzZWxlY3RlZE1vZGUgPT09ICdpbXBvcnQnXCI+XG4gIDxkaXYgY2xhc3M9XCJpZ28taW5wdXQtY29udGFpbmVyXCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgPG1hdC1sYWJlbD57eydpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uaW1wb3J0UHJvalBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XG4gICAgICA8bWF0LXNlbGVjdFxuICAgICAgICBbKHZhbHVlKV09XCJpbnB1dFByb2pcIj5cbiAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAqbmdGb3I9XCJsZXQgcHJvamVjdGlvbiBvZiAocHJvamVjdGlvbnMkIHwgYXN5bmMpXCJcbiAgICAgICAgICBbdmFsdWVdPVwicHJvamVjdGlvblwiXG4gICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgIDxwIG1hdC1saW5lICpuZ0lmPVwicHJvamVjdGlvbi50cmFuc2xhdGVLZXlcIj57eygnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLnByb2plY3Rpb25zLicgKyBwcm9qZWN0aW9uLnRyYW5zbGF0ZUtleSkgfCB0cmFuc2xhdGU6IHByb2plY3Rpb259fTwvcD5cbiAgICAgICAgICA8cCBtYXQtbGluZSAqbmdJZj1cIiFwcm9qZWN0aW9uLnRyYW5zbGF0ZUtleVwiPnt7cHJvamVjdGlvbi5hbGlhc319PC9wPlxuICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICA8L21hdC1zZWxlY3Q+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPC9kaXY+XG5cbiAgPGRpdlxuICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXG4gICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgW21hdFRvb2x0aXBdPVwiaW1wb3J0Rm9ybS5pbnZhbGlkID8gKCdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0ucHJvamVjdGlvbnMuY2hvb3NlJyB8IHRyYW5zbGF0ZSkgOiAoJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5pbXBvcnRCdXR0b24nIHwgdHJhbnNsYXRlKVwiXG4gICAgY2xhc3M9XCJpZ28tZm9ybS1idXR0b24tZ3JvdXBcIj5cbiAgICA8YnV0dG9uXG4gICAgICBbZGlzYWJsZWRdPVwiaW1wb3J0Rm9ybS5pbnZhbGlkIHx8IChsb2FkaW5nJCB8IGFzeW5jKVwiXG4gICAgICBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAoY2xpY2spPVwiZmlsZUlucHV0LmNsaWNrKClcIj5cbiAgICAgICAge3snaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmltcG9ydEJ1dHRvbicgfCB0cmFuc2xhdGV9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxpZ28tc3Bpbm5lciBbc2hvd25dPVwibG9hZGluZyQgfCBhc3luY1wiPjwvaWdvLXNwaW5uZXI+XG4gICAgPGlucHV0XG4gICAgICBoaWRkZW5cbiAgICAgICNmaWxlSW5wdXRcbiAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgIFtzdHlsZS5kaXNwbGF5XT1cIidub25lJ1wiXG4gICAgICAoY2xpY2spPVwiZmlsZUlucHV0LnZhbHVlID0gbnVsbFwiXG4gICAgICAoY2hhbmdlKT1cImltcG9ydEZpbGVzKCRldmVudC50YXJnZXQuZmlsZXMpXCI+XG4gIDwvZGl2PlxuPC9mb3JtPlxuPHNlY3Rpb24gY2xhc3M9XCJtYXQtdHlwb2dyYXBoeVwiICpuZ0lmPVwic2VsZWN0ZWRNb2RlID09PSAnaW1wb3J0J1wiPlxuICA8aDQ+e3snaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmltcG9ydENsYXJpZmljYXRpb25zJyB8IHRyYW5zbGF0ZX19PC9oND5cbiAgPHVsPlxuICAgIDxsaT57eydpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uaW1wb3J0U2l6ZU1heCcgfCB0cmFuc2xhdGU6IHtzaXplOiBmaWxlU2l6ZU1ifSB9fTwvbGk+XG4gICAgPGxpPnt7J2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5pbXBvcnRGb3JtYXRBdXRob3JpemVkJyB8IHRyYW5zbGF0ZX19PC9saT5cbiAgICA8bGk+e3snaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmltcG9ydFNocFppcCcgfCB0cmFuc2xhdGV9fTwvbGk+XG4gIDwvdWw+XG48L3NlY3Rpb24+XG5cbjxzZWN0aW9uIGNsYXNzPVwibWF0LXR5cG9ncmFwaHlcIiAqbmdJZj1cIihleHBvcnRhYmxlTGF5ZXJzJCB8IGFzeW5jKS5sZW5ndGggPT09IDAgJiYgc2VsZWN0ZWRNb2RlID09PSAnZXhwb3J0J1wiPlxuICA8aDQ+e3snaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmV4cG9ydE5vTGF5ZXJzRXhwb3J0YWJsZScgfCB0cmFuc2xhdGV9fTwvaDQ+XG48L3NlY3Rpb24+XG5cbjxmb3JtIGNsYXNzPVwiaWdvLWZvcm1cIiBbZm9ybUdyb3VwXT1cImZvcm1cIiAqbmdJZj1cIihleHBvcnRhYmxlTGF5ZXJzJCB8IGFzeW5jKS5sZW5ndGggPiAwICYmIHNlbGVjdGVkTW9kZSA9PT0gJ2V4cG9ydCdcIj5cbiAgPGRpdiBjbGFzcz1cImlnby1pbnB1dC1jb250YWluZXJcIj5cbiAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICA8bWF0LWxhYmVsPnt7J2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5leHBvcnRMYXllclBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XG4gICAgICA8bWF0LXNlbGVjdFxuICAgICAgICBbKHZhbHVlKV09XCJsYXllcnNcIiBtdWx0aXBsZT5cbiAgICAgICAgPG1hdC1zZWxlY3QtdHJpZ2dlcj5cbiAgICAgICAgICB7e2xheWVycy5sZW5ndGggPyBnZXRMYXllclRpdGxlQnlJZChsYXllcnNbMF0pIDogJyd9fVxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwibGF5ZXJzLmxlbmd0aCA+IDFcIiBjbGFzcz1cImV4cG9ydC1zZWxlY3QtdHJpZ2dlclwiPlxuICAgICAgICAgICAgKCt7e2xheWVycy5sZW5ndGggLSAxfX0ge3sobGF5ZXJzPy5sZW5ndGggPT09IDIgPyAnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLm90aGVyJyA6ICdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0ub3RoZXJzJykgfCB0cmFuc2xhdGUgfX0pXG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L21hdC1zZWxlY3QtdHJpZ2dlcj5cbiAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAqbmdGb3I9XCJsZXQgbGF5ZXIgb2YgKGV4cG9ydGFibGVMYXllcnMkIHwgYXN5bmMpXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7J2lnby1leHBvcnQtbGF5ZXItbWF0LW9wdGlvbic6IGxheWVySGFzU2VsZWN0ZWRGZWF0dXJlcyhsYXllcil9XCJcbiAgICAgICAgICBbdmFsdWVdPVwibGF5ZXIuaWRcIlxuICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICA8cCBtYXQtbGluZT57e2xheWVyLnRpdGxlfX08L3A+XG4gICAgICAgICAgPHAgbWF0LWxpbmU+XG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSAqbmdJZj1cImxheWVySGFzU2VsZWN0ZWRGZWF0dXJlcyhsYXllcilcIlxuICAgICAgICAgICAgICBbbGFiZWxQb3NpdGlvbl09XCInYWZ0ZXInXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9ubHlTZWxlY3RlZENsaWNrKCRldmVudCxsYXllci5pZClcIlxuICAgICAgICAgICAgICAoY2hlY2tlZCk9XCJpbkxheWVyc0lkVG9FeHBvcnRTZWxlY3Rpb25Pbmx5KGxheWVyKVwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwib25seVNlbGVjdGVkKCRldmVudCxsYXllci5pZClcIj5cbiAgICAgICAgICAgICAgPHNtYWxsPnt7J2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5leHBvcnRTZWxlY3RlZEZlYXR1cmUnIHwgdHJhbnNsYXRlfX08L3NtYWxsPlxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgPC9tYXQtc2VsZWN0PlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJpZ28taW5wdXQtY29udGFpbmVyXCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgPG1hdC1sYWJlbD57eydpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uZXhwb3J0Rm9ybWF0UGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlfX08L21hdC1sYWJlbD5cbiAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cImZvcm1hdFwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKGZvcm1hdHMkIHwgYXN5bmMpLmxlbmd0aCAhPT0gMFwiPlxuICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBmb3JtYXQgb2YgKGZvcm1hdHMkIHwgYXN5bmMpIHwga2V5dmFsdWVcIiBbdmFsdWVdPVwiZm9ybWF0LmtleVwiPlxuICAgICAgICAgICAge3snaWdvLmdlby5leHBvcnQuZm9ybWF0LicgKyBmb3JtYXQudmFsdWUgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0lmPVwiKGZvcm1hdHMkIHwgYXN5bmMpLmxlbmd0aCA9PT0gMFwiIGRpc2FibGVkPVwidHJ1ZVwiPlxuICAgICAgICAgIHt7J2lnby5nZW8uZXhwb3J0Lm5vRm9ybWF0LnRpdGxlJyB8IHRyYW5zbGF0ZX19XG4gICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiaWdvLWlucHV0LWNvbnRhaW5lclwiICpuZ0lmPVwiZm9yY2VOYW1pbmcgJiYgZm9ybS52YWx1ZS5mb3JtYXQgIT09ICdVUkwnXCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiIHBsYWNlaG9sZGVyPVwie3snaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmV4cG9ydEZpbGVOYW1lUGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlfX1cIj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiaWdvLWlucHV0LWNvbnRhaW5lclwiICpuZ0lmPVwiZm9ybS52YWx1ZS5mb3JtYXQgPT09ICdDU1Zjb21tYScgfHwgZm9ybS52YWx1ZS5mb3JtYXQgPT09ICdDU1ZzZW1pY29sb24nXCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgPG1hdC1sYWJlbD57eydpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uZW5jb2RpbmdQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxuICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZW5jb2RpbmdcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihlbmNvZGluZ3MkIHwgYXN5bmMpLmxlbmd0aCAhPT0gMFwiPlxuICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBlbmNvZGluZyBvZiAoZW5jb2RpbmdzJCB8IGFzeW5jKSB8IGtleXZhbHVlXCIgW3ZhbHVlXT1cImVuY29kaW5nLmtleVwiPlxuICAgICAgICAgICAge3snaWdvLmdlby5leHBvcnQuZW5jb2RpbmcuJyArIGVuY29kaW5nLnZhbHVlIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9tYXQtc2VsZWN0PlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJleHBvcnQtb3B0aW9ucyBtYXQtdHlwb2dyYXBoeVwiICpuZ0lmPVwiZm9ybS52YWx1ZS5mb3JtYXQgIT09ICdVUkwnXCI+XG4gICAgPG1hdC1zbGlkZS10b2dnbGVcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZmVhdHVyZUluTWFwRXh0ZW50XCJcbiAgICAgICAgW2xhYmVsUG9zaXRpb25dPVwiJ2JlZm9yZSdcIj5cbiAgICAgICAgICB7eydpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uZXhwb3J0RmVhdHVyZUluRXh0ZW50JyB8IHRyYW5zbGF0ZX19XG4gICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiaWdvLWZvcm0tYnV0dG9uLWdyb3VwXCI+XG4gICAgPGJ1dHRvblxuICAgICAgbWF0LXJhaXNlZC1idXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgW2Rpc2FibGVkXT1cIiFmb3JtLnZhbGlkIHx8IChsb2FkaW5nJCB8IGFzeW5jKVwiXG4gICAgICAoY2xpY2spPVwiaGFuZGxlRXhwb3J0Rm9ybVN1Ym1pdChmb3JtLnZhbHVlKVwiPlxuICAgICAge3tmb3JtLnZhbHVlLmZvcm1hdCAhPT0gJ1VSTCcgID8gKCdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uZXhwb3J0QnV0dG9uJyB8IHRyYW5zbGF0ZSk6IChmb3JtLnZhbHVlLmxheWVycy5sZW5ndGggPiAxICA/ICgnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmV4cG9ydEJ1dHRvbkxpbmtzJyB8IHRyYW5zbGF0ZSk6ICgnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmV4cG9ydEJ1dHRvbkxpbmsnIHwgdHJhbnNsYXRlKSl9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxpZ28tc3Bpbm5lciBbc2hvd25dPVwibG9hZGluZyQgfCBhc3luY1wiPjwvaWdvLXNwaW5uZXI+XG4gIDwvZGl2PlxuXG48L2Zvcm0+XG4iXX0=
|
|
1189
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LWV4cG9ydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9pbXBvcnQtZXhwb3J0L2ltcG9ydC1leHBvcnQvaW1wb3J0LWV4cG9ydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9pbXBvcnQtZXhwb3J0L2ltcG9ydC1leHBvcnQvaW1wb3J0LWV4cG9ydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFHTCxNQUFNLEVBQ04sWUFBWSxFQUViLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBMEIsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEUsT0FBTyxFQUFnQixlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFRckQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUl0QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUUzRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFHckUsT0FBTyxPQUFPLE1BQU0sZUFBZSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUzQyxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLHVCQUF1QixFQUN4QixNQUFNLHdCQUF3QixDQUFDO0FBRWhDLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXpELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIscUJBQXFCLEVBQ3RCLE1BQU0sd0JBQXdCLENBQUM7QUFHaEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdC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NEVBd0dPOzs7UUF2S0MsZUFBc0I7UUFBdEIsd0NBQXNCO1FBRUgsZUFBa0I7UUFBbEIsZ0NBQWtCO1FBQ25DLGVBQ0Y7UUFERSxnR0FDRjtRQUNtQixlQUFrQjtRQUFsQixnQ0FBa0I7UUFDbkMsZUFDRjtRQURFLGlHQUNGO1FBSXlDLGVBQStCO1FBQS9CLG9EQUErQjtRQXVDL0MsZUFBK0I7UUFBL0Isb0RBQStCO1FBUy9CLGVBQTJFO1FBQTNFLGtIQUEyRTtRQUlqRSxlQUF5RTtRQUF6RSxnSEFBeUU7O3VGREZ2RyxxQkFBcUI7Y0FMakMsU0FBUztlQUFDO2dCQUNULFFBQVEsRUFBRSxtQkFBbUI7Z0JBQzdCLFdBQVcsRUFBRSxnQ0FBZ0M7Z0JBQzdDLFNBQVMsRUFBRSxDQUFDLGdDQUFnQyxDQUFDO2FBQzlDO2tXQXVDVSxlQUFlO2tCQUF2QixLQUFLO1lBRUcsR0FBRztrQkFBWCxLQUFLO1lBSUYsc0JBQXNCO2tCQUR6QixLQUFLO1lBWUcsS0FBSztrQkFBYixLQUFLO1lBRUcsWUFBWTtrQkFBcEIsS0FBSztZQUVJLFVBQVU7a0JBQW5CLE1BQU07WUFFRSxjQUFjO2tCQUF0QixLQUFLO1lBSUksbUJBQW1CO2tCQUE1QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBDaGFuZ2VEZXRlY3RvclJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUJ1aWxkZXIsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1xuICBNZXNzYWdlU2VydmljZSxcbiAgTGFuZ3VhZ2VTZXJ2aWNlLFxuICBDb25maWdTZXJ2aWNlLFxuICBTdG9yYWdlU2VydmljZVxufSBmcm9tICdAaWdvMi9jb3JlJztcbmltcG9ydCB7IHN0ckVudW0gfSBmcm9tICdAaWdvMi91dGlscyc7XG5cbmltcG9ydCB7IEZlYXR1cmUgfSBmcm9tICcuLi8uLi9mZWF0dXJlL3NoYXJlZC9mZWF0dXJlLmludGVyZmFjZXMnO1xuaW1wb3J0IHsgSWdvTWFwIH0gZnJvbSAnLi4vLi4vbWFwL3NoYXJlZC9tYXAnO1xuaW1wb3J0IHsgQ2x1c3RlckRhdGFTb3VyY2UgfSBmcm9tICcuLi8uLi9kYXRhc291cmNlL3NoYXJlZC9kYXRhc291cmNlcy9jbHVzdGVyLWRhdGFzb3VyY2UnO1xuaW1wb3J0IHsgTGF5ZXIgfSBmcm9tICcuLi8uLi9sYXllci9zaGFyZWQvbGF5ZXJzL2xheWVyJztcbmltcG9ydCB7IFZlY3RvckxheWVyIH0gZnJvbSAnLi4vLi4vbGF5ZXIvc2hhcmVkL2xheWVycy92ZWN0b3ItbGF5ZXInO1xuaW1wb3J0IHsgQW55TGF5ZXIgfSBmcm9tICcuLi8uLi9sYXllci9zaGFyZWQvbGF5ZXJzL2FueS1sYXllcic7XG5pbXBvcnQgeyBEYXRhU291cmNlT3B0aW9ucyB9IGZyb20gJy4uLy4uL2RhdGFzb3VyY2Uvc2hhcmVkL2RhdGFzb3VyY2VzL2RhdGFzb3VyY2UuaW50ZXJmYWNlJztcbmltcG9ydCBvbFBvaW50IGZyb20gJ29sL2dlb20vUG9pbnQnO1xuaW1wb3J0IHsgY2lyY3VsYXIgfSBmcm9tICdvbC9nZW9tL1BvbHlnb24nO1xuXG5pbXBvcnQge1xuICBoYW5kbGVGaWxlRXhwb3J0RXJyb3IsXG4gIGhhbmRsZUZpbGVFeHBvcnRTdWNjZXNzXG59IGZyb20gJy4uL3NoYXJlZC9leHBvcnQudXRpbHMnO1xuaW1wb3J0IHsgRXhwb3J0T3B0aW9ucyB9IGZyb20gJy4uL3NoYXJlZC9leHBvcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IEV4cG9ydEZvcm1hdCwgRW5jb2RpbmdGb3JtYXQgfSBmcm9tICcuLi9zaGFyZWQvZXhwb3J0LnR5cGUnO1xuaW1wb3J0IHsgRXhwb3J0U2VydmljZSB9IGZyb20gJy4uL3NoYXJlZC9leHBvcnQuc2VydmljZSc7XG5pbXBvcnQgeyBJbXBvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkL2ltcG9ydC5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIGhhbmRsZUZpbGVJbXBvcnRTdWNjZXNzLFxuICBoYW5kbGVGaWxlSW1wb3J0RXJyb3Jcbn0gZnJvbSAnLi4vc2hhcmVkL2ltcG9ydC51dGlscyc7XG5pbXBvcnQgeyBTdHlsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9sYXllci9zaGFyZWQvc3R5bGUuc2VydmljZSc7XG5pbXBvcnQgeyBTdHlsZUxpc3RTZXJ2aWNlIH0gZnJvbSAnLi4vc3R5bGUtbGlzdC9zdHlsZS1saXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgc2tpcFdoaWxlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRW50aXR5UmVjb3JkLCBXb3Jrc3BhY2UgfSBmcm9tICdAaWdvMi9jb21tb24nO1xuaW1wb3J0IHR5cGUgeyBXb3Jrc3BhY2VTdG9yZSB9IGZyb20gJ0BpZ28yL2NvbW1vbic7XG5pbXBvcnQgeyBXZnNXb3Jrc3BhY2UgfSBmcm9tICcuLi8uLi93b3Jrc3BhY2Uvc2hhcmVkL3dmcy13b3Jrc3BhY2UnO1xuaW1wb3J0IHsgRmVhdHVyZVdvcmtzcGFjZSB9IGZyb20gJy4uLy4uL3dvcmtzcGFjZS9zaGFyZWQvZmVhdHVyZS13b3Jrc3BhY2UnO1xuaW1wb3J0IHsgTWF0U2xpZGVUb2dnbGVDaGFuZ2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbGlkZS10b2dnbGUnO1xuaW1wb3J0IHsgSW5wdXRQcm9qZWN0aW9ucywgUHJvamVjdGlvbnNMaW1pdGF0aW9uc09wdGlvbnMgfSBmcm9tICcuLi8uLi9tYXAvJztcbmltcG9ydCB7IERvd25sb2FkU2VydmljZSB9IGZyb20gJy4uLy4uL2Rvd25sb2FkL3NoYXJlZC9kb3dubG9hZC5zZXJ2aWNlJztcbmltcG9ydCB7IGNvbXB1dGVQcm9qZWN0aW9uc0NvbnN0cmFpbnRzIH0gZnJvbSAnLi4vLi4vbWFwJztcblxuaW1wb3J0IG9sVmVjdG9yU291cmNlIGZyb20gJ29sL3NvdXJjZS9WZWN0b3InO1xuaW1wb3J0IG9sQ2x1c3RlclNvdXJjZSBmcm9tICdvbC9zb3VyY2UvQ2x1c3Rlcic7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgT2xHZW9tZXRyeSB9IGZyb20gJ29sL2dlb20vR2VvbWV0cnknO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdpZ28taW1wb3J0LWV4cG9ydCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9pbXBvcnQtZXhwb3J0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaW1wb3J0LWV4cG9ydC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEltcG9ydEV4cG9ydENvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSwgT25Jbml0IHtcbiAgcHVibGljIGZvcm06IEZvcm1Hcm91cDtcbiAgcHVibGljIGltcG9ydEZvcm06IEZvcm1Hcm91cDtcbiAgcHVibGljIGZvcm1hdHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdCh1bmRlZmluZWQpO1xuICBwdWJsaWMgZW5jb2RpbmdzJCA9IG5ldyBCZWhhdmlvclN1YmplY3QodW5kZWZpbmVkKTtcbiAgcHVibGljIGV4cG9ydGFibGVMYXllcnMkOiBCZWhhdmlvclN1YmplY3Q8QW55TGF5ZXJbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFxuICAgIFtdXG4gICk7XG4gIHB1YmxpYyBsb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICBwdWJsaWMgZm9yY2VOYW1pbmcgPSBmYWxzZTtcbiAgcHVibGljIGNvbnRyb2xGb3JtYXQgPSAnZm9ybWF0JztcblxuICBwcml2YXRlIGxheWVycyQkOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgZXhwb3J0YWJsZUxheWVycyQkOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgZm9ybWF0cyQkOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgZW5jb2RpbmdzJCQ6IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBmb3JtTGF5ZXIkJDogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIGV4cG9ydE9wdGlvbnMkJDogU3Vic2NyaXB0aW9uO1xuXG5cbiAgcHJpdmF0ZSBlc3BnQ29kZVJlZ2V4ID0gbmV3IFJlZ0V4cCgnXlxcXFxkezQsNn0nKTtcbiAgcHJpdmF0ZSBjbGllbnRTaWRlRmlsZVNpemVNYXg6IG51bWJlcjtcbiAgcHVibGljIGZpbGVTaXplTWI6IG51bWJlcjtcblxuICBwdWJsaWMgcHJvamVjdGlvbnMkOiBCZWhhdmlvclN1YmplY3Q8SW5wdXRQcm9qZWN0aW9uc1tdPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoW10pO1xuICBwcml2YXRlIHByb2plY3Rpb25zQ29uc3RyYWludHM6IFByb2plY3Rpb25zTGltaXRhdGlvbnNPcHRpb25zO1xuXG4gIHB1YmxpYyBwb3B1cENoZWNrZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwcml2YXRlIHByZXZpb3VzTGF5ZXJTcGVjcyQ6IEJlaGF2aW9yU3ViamVjdDxcbiAgICB7XG4gICAgICBpZDogc3RyaW5nO1xuICAgICAgdmlzaWJsZTogYm9vbGVhbjtcbiAgICAgIG9wYWNpdHk6IG51bWJlcjtcbiAgICAgIHF1ZXJ5YWJsZTogYm9vbGVhbjtcbiAgICB9W11cbiAgPiA9IG5ldyBCZWhhdmlvclN1YmplY3QodW5kZWZpbmVkKTtcblxuICBASW5wdXQoKSBzZWxlY3RGaXJzdFByb2o6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKSBtYXA6IElnb01hcDtcblxuICBwcml2YXRlIF9wcm9qZWN0aW9uc0xpbWl0YXRpb25zOiBQcm9qZWN0aW9uc0xpbWl0YXRpb25zT3B0aW9ucyA9IHt9O1xuICBASW5wdXQoKVxuICBzZXQgcHJvamVjdGlvbnNMaW1pdGF0aW9ucyh2YWx1ZTogUHJvamVjdGlvbnNMaW1pdGF0aW9uc09wdGlvbnMpIHtcbiAgICB0aGlzLl9wcm9qZWN0aW9uc0xpbWl0YXRpb25zID0gdmFsdWU7XG4gICAgdGhpcy5jb21wdXRlUHJvamVjdGlvbnMoKTtcbiAgfVxuICBnZXQgcHJvamVjdGlvbnNMaW1pdGF0aW9ucygpOiBQcm9qZWN0aW9uc0xpbWl0YXRpb25zT3B0aW9ucyB7XG4gICAgcmV0dXJuIHRoaXMuX3Byb2plY3Rpb25zTGltaXRhdGlvbnMgfHwge307XG4gIH1cblxuICAvKipcbiAgICogU3RvcmUgdGhhdCBob2xkcyB0aGUgYXZhaWxhYmxlIHdvcmtzcGFjZXMuXG4gICAqL1xuICBASW5wdXQoKSBzdG9yZTogV29ya3NwYWNlU3RvcmU7XG5cbiAgQElucHV0KCkgc2VsZWN0ZWRNb2RlID0gJ2ltcG9ydCc7XG5cbiAgQE91dHB1dCgpIHNlbGVjdE1vZGUgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICBASW5wdXQoKSBleHBvcnRPcHRpb25zJDogQmVoYXZpb3JTdWJqZWN0PEV4cG9ydE9wdGlvbnM+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChcbiAgICB1bmRlZmluZWRcbiAgKTtcblxuICBAT3V0cHV0KCkgZXhwb3J0T3B0aW9uc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RXhwb3J0T3B0aW9ucz4oKTtcblxuICBnZXQgbGF5ZXJzKCkge1xuICAgIHJldHVybiB0aGlzLmZvcm0uZ2V0KCdsYXllcnMnKS52YWx1ZTtcbiAgfVxuICBzZXQgbGF5ZXJzKHZhbHVlKSB7XG4gICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBsYXllcnM6IHZhbHVlIH0pO1xuICB9XG5cbiAgZ2V0IGlucHV0UHJvaigpIHtcbiAgICByZXR1cm4gdGhpcy5pbXBvcnRGb3JtLmdldCgnaW5wdXRQcm9qJykudmFsdWU7XG4gIH1cbiAgc2V0IGlucHV0UHJvaih2YWx1ZSkge1xuICAgIHRoaXMuaW1wb3J0Rm9ybS5wYXRjaFZhbHVlKHsgaW5wdXRQcm9qOiB2YWx1ZSB9KTtcbiAgfVxuXG4gIGdldCBwb3B1cEFsbG93ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0KCdpbXBvcnRFeHBvcnRQb3B1cEFsbG93ZWQnKSBhcyBib29sZWFuIHx8IGZhbHNlO1xuICB9XG5cbiAgc2V0IHBvcHVwQWxsb3dlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0KCdpbXBvcnRFeHBvcnRQb3B1cEFsbG93ZWQnLCB2YWx1ZSk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGltcG9ydFNlcnZpY2U6IEltcG9ydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBleHBvcnRTZXJ2aWNlOiBFeHBvcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgbGFuZ3VhZ2VTZXJ2aWNlOiBMYW5ndWFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzdHlsZUxpc3RTZXJ2aWNlOiBTdHlsZUxpc3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3R5bGVTZXJ2aWNlOiBTdHlsZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBjb25maWc6IENvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBzdG9yYWdlU2VydmljZTogU3RvcmFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkb3dubG9hZFNlcnZpY2U6IERvd25sb2FkU2VydmljZVxuICApIHtcbiAgICB0aGlzLmxvYWRDb25maWcoKTtcbiAgICB0aGlzLmJ1aWxkRm9ybSgpO1xuICAgIHRoaXMuY29tcHV0ZVByb2plY3Rpb25zKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmxheWVycyQkID0gdGhpcy5tYXAubGF5ZXJzJC5zdWJzY3JpYmUoKGxheWVycykgPT4ge1xuICAgICAgdGhpcy5leHBvcnRhYmxlTGF5ZXJzJC5uZXh0KFxuICAgICAgICBsYXllcnMuZmlsdGVyKChsYXllcjogTGF5ZXIpID0+IHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKGxheWVyIGluc3RhbmNlb2YgVmVjdG9yTGF5ZXIgJiYgbGF5ZXIuZXhwb3J0YWJsZSA9PT0gdHJ1ZSkgfHxcbiAgICAgICAgICAgIChsYXllci5kYXRhU291cmNlLm9wdGlvbnMuZG93bmxvYWQgJiZcbiAgICAgICAgICAgICAgbGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLmRvd25sb2FkLnVybClcbiAgICAgICAgICApO1xuICAgICAgICB9KSBhcyBBbnlMYXllcltdXG4gICAgICApO1xuICAgIH0pO1xuICAgIGNvbnN0IGNvbmZpZ0ZpbGVTaXplTWIgPSB0aGlzLmNvbmZpZy5nZXRDb25maWcoXG4gICAgICAnaW1wb3J0RXhwb3J0LmNsaWVudFNpZGVGaWxlU2l6ZU1heE1iJ1xuICAgICk7XG4gICAgdGhpcy5jbGllbnRTaWRlRmlsZVNpemVNYXggPVxuICAgICAgKGNvbmZpZ0ZpbGVTaXplTWIgPyBjb25maWdGaWxlU2l6ZU1iIDogMzApICogTWF0aC5wb3coMTAyNCwgMik7XG4gICAgdGhpcy5maWxlU2l6ZU1iID0gdGhpcy5jbGllbnRTaWRlRmlsZVNpemVNYXggLyBNYXRoLnBvdygxMDI0LCAyKTtcblxuICAgIHRoaXMuZXhwb3J0T3B0aW9ucyQkID0gdGhpcy5leHBvcnRPcHRpb25zJFxuICAgICAgLnBpcGUoc2tpcFdoaWxlKChleHBvcnRPcHRpb25zKSA9PiAhZXhwb3J0T3B0aW9ucykpXG4gICAgICAuc3Vic2NyaWJlKChleHBvcnRPcHRpb25zKSA9PiB7XG4gICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKGV4cG9ydE9wdGlvbnMsIHsgZW1pdEV2ZW50OiB0cnVlIH0pO1xuICAgICAgICBpZiAoZXhwb3J0T3B0aW9ucy5sYXllcnMpIHtcbiAgICAgICAgICB0aGlzLmNvbXB1dGVGb3JtYXRzKFxuICAgICAgICAgICAgZXhwb3J0T3B0aW9ucy5sYXllcnMubWFwKChsKSA9PiB0aGlzLm1hcC5nZXRMYXllckJ5SWQobCkpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgdGhpcy5mb3JtTGF5ZXIkJCA9IHRoaXMuZm9ybVxuICAgICAgLmdldCgnZm9ybWF0JylcbiAgICAgIC52YWx1ZUNoYW5nZXNcbiAgICAgIC5zdWJzY3JpYmUoKGZvcm1hdCkgPT4ge1xuICAgICAgICBjb25zdCBvZ3JlRm9ybWF0cyA9IE9iamVjdC5rZXlzKEV4cG9ydFNlcnZpY2Uub2dyZUZvcm1hdHMpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIXRoaXMucG9wdXBDaGVja2VkICYmXG4gICAgICAgICAgdGhpcy5mb3JtLmdldCgnbGF5ZXJzJykudmFsdWU/Lmxlbmd0aCA+IDEgJiZcbiAgICAgICAgICAob2dyZUZvcm1hdHMuaW5kZXhPZihmb3JtYXQpID49IDAgfHwgZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuVVJMKSkge1xuICAgICAgICAgIGlmICghdGhpcy5oYW5kbGVQb3B1cCh0cnVlKSkge1xuICAgICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBmb3JtYXQ6IHVuZGVmaW5lZCB9LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIHRoaXMuZm9ybUxheWVyJCQgPSB0aGlzLmZvcm1cbiAgICAgIC5nZXQoJ2xheWVycycpXG4gICAgICAudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgobGF5ZXJzSWQpID0+IHtcbiAgICAgICAgdGhpcy5oYW5kbGVQcmV2aW91c0xheWVyU3BlY3MoKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRMYXllcnMgPSBsYXllcnNJZCBpbnN0YW5jZW9mIEFycmF5ID8gbGF5ZXJzSWQgOiBbbGF5ZXJzSWRdO1xuICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IGxheWVyczogc2VsZWN0ZWRMYXllcnMgfSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICBjb25zdCBsYXllcnMgPSBzZWxlY3RlZExheWVycy5tYXAoKGwpID0+IHRoaXMubWFwLmdldExheWVyQnlJZChsKSk7XG4gICAgICAgIHRoaXMuY29tcHV0ZUZvcm1hdHMobGF5ZXJzKTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgT2JqZWN0LmtleXModGhpcy5mb3JtYXRzJC52YWx1ZSkuaW5kZXhPZih0aGlzLmZvcm0udmFsdWUuZm9ybWF0KSA9PT1cbiAgICAgICAgICAtMVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IGZvcm1hdDogdW5kZWZpbmVkIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sb2FkaW5nJC5uZXh0KHRydWUpO1xuICAgICAgICBjb25zdCBwcmV2aW91c1NwZWNzOiB7XG4gICAgICAgICAgaWQ6IHN0cmluZztcbiAgICAgICAgICB2aXNpYmxlOiBib29sZWFuO1xuICAgICAgICAgIG9wYWNpdHk6IG51bWJlcjtcbiAgICAgICAgICBxdWVyeWFibGU6IGJvb2xlYW47XG4gICAgICAgIH1bXSA9IFtdO1xuICAgICAgICBsYXllcnMuZm9yRWFjaCgobGF5ZXIpID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBsYXllciBpbnN0YW5jZW9mIFZlY3RvckxheWVyICYmXG4gICAgICAgICAgICBsYXllci5kYXRhU291cmNlLm9sLmdldEZlYXR1cmVzKCkubGVuZ3RoID09PSAwXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBwcmV2aW91c1NwZWNzLnB1c2goe1xuICAgICAgICAgICAgICBpZDogbGF5ZXIuaWQsXG4gICAgICAgICAgICAgIHZpc2libGU6IGxheWVyLnZpc2libGUsXG4gICAgICAgICAgICAgIG9wYWNpdHk6IGxheWVyLm9wYWNpdHksXG4gICAgICAgICAgICAgIHF1ZXJ5YWJsZTogKGxheWVyIGFzIGFueSkucXVlcnlhYmxlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxheWVyLm9wYWNpdHkgPSAwO1xuICAgICAgICAgICAgbGF5ZXIudmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnByZXZpb3VzTGF5ZXJTcGVjcyQubmV4dChwcmV2aW91c1NwZWNzKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgfSwgNTAwKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5mb3JtYXRzJCQgPSB0aGlzLmZvcm1hdHMkXG4gICAgICAucGlwZShza2lwV2hpbGUoKGZvcm1hdHMpID0+ICFmb3JtYXRzKSlcbiAgICAgIC5zdWJzY3JpYmUoKGZvcm1hdHMpID0+IHtcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKGZvcm1hdHMpLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgZm9ybWF0OiBmb3JtYXRzW09iamVjdC5rZXlzKGZvcm1hdHMpWzBdXSB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB0aGlzLmVuY29kaW5ncyQkID0gdGhpcy5lbmNvZGluZ3MkXG4gICAgICAucGlwZShza2lwV2hpbGUoKGVuY29kaW5ncykgPT4gIWVuY29kaW5ncykpXG4gICAgICAuc3Vic2NyaWJlKChlbmNvZGluZ3MpID0+IHtcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKGVuY29kaW5ncykubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBlbmNvZGluZzogZW5jb2RpbmdzW09iamVjdC5rZXlzKGVuY29kaW5ncylbMF1dIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIHRoaXMuZXhwb3J0YWJsZUxheWVycyQkID0gdGhpcy5leHBvcnRhYmxlTGF5ZXJzJFxuICAgICAgLnBpcGUoc2tpcFdoaWxlKChsYXllcnMpID0+ICFsYXllcnMpKVxuICAgICAgLnN1YnNjcmliZSgobGF5ZXJzKSA9PiB7XG4gICAgICAgIGlmIChsYXllcnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBsYXllcnM6IGxheWVyc1swXS5pZCB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5jb250cm9sRm9ybWF0XS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKChmb3JtYXQpID0+IHtcbiAgICAgIGlmIChmb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5DU1Zjb21tYSB8fCBmb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5DU1ZzZW1pY29sb24pIHtcbiAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBlbmNvZGluZzogRW5jb2RpbmdGb3JtYXQuTEFUSU4xIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBlbmNvZGluZzogRW5jb2RpbmdGb3JtYXQuVVRGOCB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuc2VsZWN0Rmlyc3RQcm9qKSB7XG4gICAgICBpZiAodGhpcy5wcm9qZWN0aW9ucyQudmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMuaW1wb3J0Rm9ybS5wYXRjaFZhbHVlKHsgaW5wdXRQcm9qOiB7IHRyYW5zbGF0ZUtleTogJ25hZDgzJywgYWxpYXM6ICdOQUQ4MycsIGNvZGU6ICdFUFNHOjQzMjYnLCB6b25lOiAnJyB9IH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pbXBvcnRGb3JtLnBhdGNoVmFsdWUoeyBpbnB1dFByb2o6IHRoaXMucHJvamVjdGlvbnMkLnZhbHVlWzBdIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmltcG9ydEZvcm0ucGF0Y2hWYWx1ZSh7IGlucHV0UHJvajogdW5kZWZpbmVkIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29tcHV0ZVByb2plY3Rpb25zKCkge1xuICAgIHRoaXMucHJvamVjdGlvbnNDb25zdHJhaW50cyA9IGNvbXB1dGVQcm9qZWN0aW9uc0NvbnN0cmFpbnRzKHRoaXMucHJvamVjdGlvbnNMaW1pdGF0aW9ucyk7XG4gICAgY29uc3QgcHJvamVjdGlvbnM6IElucHV0UHJvamVjdGlvbnNbXSA9IFtdO1xuXG4gICAgaWYgKHRoaXMucHJvamVjdGlvbnNDb25zdHJhaW50cy5uYWQ4Mykge1xuICAgICAgcHJvamVjdGlvbnMucHVzaCh7IHRyYW5zbGF0ZUtleTogJ25hZDgzJywgYWxpYXM6ICdOQUQ4MycsIGNvZGU6ICdFUFNHOjQyNjknLCB6b25lOiAnJyB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMucHJvamVjdGlvbnNDb25zdHJhaW50cy53Z3M4NCkge1xuICAgICAgcHJvamVjdGlvbnMucHVzaCh7IHRyYW5zbGF0ZUtleTogJ3dnczg0JywgYWxpYXM6ICdXR1M4NCcsIGNvZGU6ICdFUFNHOjQzMjYnLCB6b25lOiAnJyB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMucHJvamVjdGlvbnNDb25zdHJhaW50cy53ZWJNZXJjYXRvcikge1xuICAgICAgcHJvamVjdGlvbnMucHVzaCh7IHRyYW5zbGF0ZUtleTogJ3dlYk1lcmNhdG9yJywgYWxpYXM6ICdXZWIgTWVyY2F0b3InLCBjb2RlOiAnRVBTRzozODU3Jywgem9uZTogJycgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucHJvamVjdGlvbnNDb25zdHJhaW50cy5tdG0pIHtcbiAgICAgIC8vIGFsbCBtdG0gem9uZXNcbiAgICAgIGNvbnN0IG1pblpvbmUgPSB0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMubXRtWm9uZS5taW5ab25lO1xuICAgICAgY29uc3QgbWF4Wm9uZSA9IHRoaXMucHJvamVjdGlvbnNDb25zdHJhaW50cy5tdG1ab25lLm1heFpvbmU7XG5cbiAgICAgIGZvciAobGV0IG10bVpvbmUgPSBtaW5ab25lOyBtdG1ab25lIDw9IG1heFpvbmU7IG10bVpvbmUrKykge1xuICAgICAgICBjb25zdCBjb2RlID0gbXRtWm9uZSA8IDEwID8gYEVQU0c6MzIxOCR7bXRtWm9uZX1gIDogYEVQU0c6MzIxJHs4MCArIG10bVpvbmV9YDtcbiAgICAgICAgcHJvamVjdGlvbnMucHVzaCh7IHRyYW5zbGF0ZUtleTogJ210bScsIGFsaWFzOiBgTVRNICR7bXRtWm9uZX1gLCBjb2RlLCB6b25lOiBgJHttdG1ab25lfWAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucHJvamVjdGlvbnNDb25zdHJhaW50cy51dG0pIHtcbiAgICAgIC8vIGFsbCB1dG0gem9uZXNcbiAgICAgIGNvbnN0IG1pblpvbmUgPSB0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMudXRtWm9uZS5taW5ab25lO1xuICAgICAgY29uc3QgbWF4Wm9uZSA9IHRoaXMucHJvamVjdGlvbnNDb25zdHJhaW50cy51dG1ab25lLm1heFpvbmU7XG5cbiAgICAgIGZvciAobGV0IHV0bVpvbmUgPSBtaW5ab25lOyB1dG1ab25lIDw9IG1heFpvbmU7IHV0bVpvbmUrKykge1xuICAgICAgICBjb25zdCBjb2RlID0gdXRtWm9uZSA8IDEwID8gYEVQU0c6MzI2MCR7dXRtWm9uZX1gIDogYEVQU0c6MzI2JHt1dG1ab25lfWA7XG4gICAgICAgIHByb2plY3Rpb25zLnB1c2goeyB0cmFuc2xhdGVLZXk6ICd1dG0nLCBhbGlhczogYFVUTSAke3V0bVpvbmV9YCwgY29kZSwgem9uZTogYCR7dXRtWm9uZX1gIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBjb25maWdQcm9qZWN0aW9uID0gW107XG4gICAgaWYgKHRoaXMucHJvamVjdGlvbnNDb25zdHJhaW50cy5wcm9qRnJvbUNvbmZpZykge1xuICAgICAgY29uZmlnUHJvamVjdGlvbiA9IHRoaXMuY29uZmlnLmdldENvbmZpZygncHJvamVjdGlvbnMnKSB8fCBbXTtcbiAgICB9XG5cbiAgICB0aGlzLnByb2plY3Rpb25zJC5uZXh0KGNvbmZpZ1Byb2plY3Rpb24uY29uY2F0KHByb2plY3Rpb25zKSk7XG4gIH1cblxuICBwcml2YXRlIGdldFdvcmtzcGFjZUJ5TGF5ZXJJZChpZDogc3RyaW5nKTogV29ya3NwYWNlIHtcbiAgICBjb25zdCB3a3NGcm9tTGF5ZXJJZCA9IHRoaXMuc3RvcmVcbiAgICAgIC5hbGwoKVxuICAgICAgLmZpbmQod29ya3NwYWNlID0+ICh3b3Jrc3BhY2UgYXMgV2ZzV29ya3NwYWNlIHwgRmVhdHVyZVdvcmtzcGFjZSkubGF5ZXIuaWQgPT09IGlkKTtcbiAgICBpZiAod2tzRnJvbUxheWVySWQpIHtcbiAgICAgIHJldHVybiB3a3NGcm9tTGF5ZXJJZDtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcHVibGljIGdldExheWVyVGl0bGVCeUlkKGlkKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5tYXAuZ2V0TGF5ZXJCeUlkKGlkKS50aXRsZTtcbiAgfVxuXG5cbiAgbGF5ZXJIYXNTZWxlY3RlZEZlYXR1cmVzKGxheWVyOiBMYXllcik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHdrc0Zyb21MYXllciA9IHRoaXMuZ2V0V29ya3NwYWNlQnlMYXllcklkKGxheWVyLmlkKTtcbiAgICBpZiAod2tzRnJvbUxheWVyKSB7XG4gICAgICBjb25zdCByZWNzID0gd2tzRnJvbUxheWVyLmVudGl0eVN0b3JlLnN0YXRlVmlld1xuICAgICAgICAuZmlyc3RCeSgocmVjb3JkOiBFbnRpdHlSZWNvcmQ8RmVhdHVyZT4pID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVjb3JkLnN0YXRlLnNlbGVjdGVkID09PSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgIHJldHVybiByZWNzID8gdHJ1ZSA6IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbmx5U2VsZWN0ZWQoZXZlbnQ6IE1hdFNsaWRlVG9nZ2xlQ2hhbmdlLCBpZDogc3RyaW5nKSB7XG4gICAgbGV0IGxheWVyc1dpdGhTZWxlY3Rpb24gPSB0aGlzLmZvcm0udmFsdWUubGF5ZXJzV2l0aFNlbGVjdGlvbjtcbiAgICBpZiAoZXZlbnQuY2hlY2tlZCkge1xuICAgICAgbGF5ZXJzV2l0aFNlbGVjdGlvbi5wdXNoKGlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGF5ZXJzV2l0aFNlbGVjdGlvbiA9IGxheWVyc1dpdGhTZWxlY3Rpb24uZmlsdGVyKGxheWVySWQgPT4gbGF5ZXJJZCAhPT0gaWQpO1xuICAgIH1cbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IGxheWVyc1dpdGhTZWxlY3Rpb24gfSk7XG4gIH1cblxuICBwdWJsaWMgb25seVNlbGVjdGVkQ2xpY2soZXZlbnQsIGlkOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5mb3JtLnZhbHVlLmxheWVycy5maW5kKGxheWVySWQgPT4gbGF5ZXJJZCA9PT0gaWQpKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaW5MYXllcnNJZFRvRXhwb3J0U2VsZWN0aW9uT25seShsYXllcjogTGF5ZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtLnZhbHVlLmxheWVyc1dpdGhTZWxlY3Rpb24uZmluZChsYXllcklkID0+IGxheWVySWQgPT09IGxheWVyLmlkKSA/IHRydWUgOiBmYWxzZTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMubGF5ZXJzJCQudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmV4cG9ydGFibGVMYXllcnMkJC51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuZm9ybWF0cyQkLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5lbmNvZGluZ3MkJC51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuZm9ybUxheWVyJCQudW5zdWJzY3JpYmUoKTtcbiAgICBpZiAodGhpcy5leHBvcnRPcHRpb25zJCQpIHtcbiAgICAgIHRoaXMuZXhwb3J0T3B0aW9ucyQkLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIHRoaXMuZXhwb3J0T3B0aW9uc0NoYW5nZS5lbWl0KHRoaXMuZm9ybS52YWx1ZSk7XG4gICAgdGhpcy5oYW5kbGVQcmV2aW91c0xheWVyU3BlY3MoKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlUHJldmlvdXNMYXllclNwZWNzKCkge1xuICAgIGNvbnN0IHByZXZpb3VzU3BlY3MgPSB0aGlzLnByZXZpb3VzTGF5ZXJTcGVjcyQudmFsdWU7XG4gICAgaWYgKHByZXZpb3VzU3BlY3MgJiYgcHJldmlvdXNTcGVjcy5sZW5ndGgpIHtcbiAgICAgIHByZXZpb3VzU3BlY3MuZm9yRWFjaCgoc3BlY3MpID0+IHtcbiAgICAgICAgY29uc3QgcHJldmlvdXNMYXllciA9IHRoaXMubWFwLmdldExheWVyQnlJZChzcGVjcy5pZCk7XG4gICAgICAgIHByZXZpb3VzTGF5ZXIudmlzaWJsZSA9IHNwZWNzLnZpc2libGU7XG4gICAgICAgIHByZXZpb3VzTGF5ZXIub3BhY2l0eSA9IHNwZWNzLm9wYWNpdHk7XG4gICAgICAgIChwcmV2aW91c0xheWVyIGFzIGFueSkucXVlcnlhYmxlID0gc3BlY3MucXVlcnlhYmxlO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMucHJldmlvdXNMYXllclNwZWNzJC5uZXh0KHVuZGVmaW5lZCk7XG4gIH1cblxuICBpbXBvcnRGaWxlcyhmaWxlczogRmlsZVtdKSB7XG4gICAgbGV0IGlucHV0UHJvaiA9IHRoaXMuaW5wdXRQcm9qLmNvZGU7XG4gICAgaWYgKHRoaXMuZXNwZ0NvZGVSZWdleC50ZXN0KGlucHV0UHJvaikpIHtcbiAgICAgIGlucHV0UHJvaiA9IGBFUFNHOiR7aW5wdXRQcm9qfWA7XG4gICAgfVxuXG4gICAgdGhpcy5sb2FkaW5nJC5uZXh0KHRydWUpO1xuICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgdGhpcy5pbXBvcnRTZXJ2aWNlLmltcG9ydChmaWxlLCBpbnB1dFByb2opLnN1YnNjcmliZShcbiAgICAgICAgKGZlYXR1cmVzOiBGZWF0dXJlW10pID0+IHRoaXMub25GaWxlSW1wb3J0U3VjY2VzcyhmaWxlLCBmZWF0dXJlcyksXG4gICAgICAgIChlcnJvcjogRXJyb3IpID0+IHRoaXMub25GaWxlSW1wb3J0RXJyb3IoZmlsZSwgZXJyb3IpLFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVQb3B1cChwcmVDaGVjazogYm9vbGVhbiA9IHRydWUpOiBib29sZWFuIHtcbiAgICBjb25zdCBwMSA9IHdpbmRvdy5vcGVuKCcnLCAncG9wdXAnLCAnd2lkdGg9MSwgaGVpZ2h0PTEnKTtcbiAgICBwMS5jbG9zZSgpO1xuICAgIGNvbnN0IHAyID0gd2luZG93Lm9wZW4oJycsICdwb3B1cCcsICd3aWR0aD0xLCBoZWlnaHQ9MScpO1xuICAgIGlmICghcDIgfHwgcDIuY2xvc2VkIHx8IHR5cGVvZiBwMi5jbG9zZWQgPT09ICd1bmRlZmluZWQnIHx8IHAyID09PSBudWxsKSB7XG4gICAgICB0aGlzLm9uUG9wdXBCbG9ja2VkRXJyb3IocHJlQ2hlY2spO1xuICAgICAgdGhpcy5wb3B1cEFsbG93ZWQgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcDIuY2xvc2UoKTtcbiAgICAgIHRoaXMucG9wdXBBbGxvd2VkID0gdHJ1ZTtcbiAgICAgIHRoaXMucG9wdXBDaGVja2VkID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucG9wdXBBbGxvd2VkO1xuICB9XG5cbiAgaGFuZGxlRXhwb3J0Rm9ybVN1Ym1pdChkYXRhOiBFeHBvcnRPcHRpb25zKSB7XG4gICAgdGhpcy5sb2FkaW5nJC5uZXh0KHRydWUpO1xuXG4gICAgY29uc3Qgb2dyZUZvcm1hdHMgPSBPYmplY3Qua2V5cyhFeHBvcnRTZXJ2aWNlLm9ncmVGb3JtYXRzKTtcbiAgICBpZiAoIXRoaXMucG9wdXBDaGVja2VkICYmIGRhdGEubGF5ZXJzLmxlbmd0aCA+IDEgJiZcbiAgICAgIChvZ3JlRm9ybWF0cy5pbmRleE9mKGRhdGEuZm9ybWF0KSA+PSAwIHx8IGRhdGEuZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuVVJMKSAmJiAhdGhpcy5wb3B1cEFsbG93ZWQpIHtcbiAgICAgIHRoaXMuaGFuZGxlUG9wdXAoKTtcbiAgICB9XG5cbiAgICBsZXQgZ2VvbVR5cGVzQ1NWOiB7IGdlb21ldHJ5VHlwZTogc3RyaW5nLCBmZWF0dXJlczogYW55W10gfVtdID0gW107XG4gICAgbGV0IGZlYXR1cmVzQ1NWOiBhbnlbXSA9IFtdO1xuICAgIGxldCBmaWxlbmFtZTogc3RyaW5nID0gXCJcIjtcblxuICAgIGZvciAoY29uc3QgW2xheWVySW5kZXgsIGxheWVyXSBvZiBkYXRhLmxheWVycy5lbnRyaWVzKCkpIHtcbiAgICAgIGNvbnN0IGxheSA9IHRoaXMubWFwLmdldExheWVyQnlJZChsYXllcik7XG4gICAgICBpZiAoIShkYXRhLmZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LkNTVnNlbWljb2xvbiB8fCBkYXRhLmZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LkNTVmNvbW1hKVxuICAgICAgfHwgIWRhdGEuY29tYmluZUxheWVycyB8fCBkYXRhLmxheWVycy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgZmlsZW5hbWUgPSBsYXkudGl0bGU7XG4gICAgICAgIGlmIChkYXRhLm5hbWUpIHtcbiAgICAgICAgICBmaWxlbmFtZSA9IGRhdGEubmFtZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmlsZW5hbWUgPSB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5leHBvcnQuY29tYmluZWRMYXllcnMnKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRTT3B0aW9uczogRGF0YVNvdXJjZU9wdGlvbnMgPSBsYXkuZGF0YVNvdXJjZS5vcHRpb25zO1xuICAgICAgaWYgKGRhdGEuZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuVVJMICYmIGRTT3B0aW9ucy5kb3dubG9hZCAmJiAoZFNPcHRpb25zLmRvd25sb2FkLnVybCB8fCBkU09wdGlvbnMuZG93bmxvYWQuZHluYW1pY1VybCkpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgLy8gYmV0dGVyIGxvb2sgYW4gZmVlbFxuICAgICAgICAgIGNvbnN0IHVybCA9IGRTT3B0aW9ucy5kb3dubG9hZC51cmwgfHwgZFNPcHRpb25zLmRvd25sb2FkLmR5bmFtaWNVcmw7XG4gICAgICAgICAgdXJsLm1hdGNoKC9zZXJ2aWNlPXdmcy9naSkgPyB0aGlzLmRvd25sb2FkU2VydmljZS5vcGVuKGxheSkgOiB3aW5kb3cub3Blbih1cmwgLCAnX2JsYW5rJyk7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3Qgd2tzID0gdGhpcy5nZXRXb3Jrc3BhY2VCeUxheWVySWQobGF5ZXIpO1xuICAgICAgbGV0IG9sRmVhdHVyZXM7XG4gICAgICBpZiAod2tzICYmIHdrcy5lbnRpdHlTdG9yZSAmJiB3a3MuZW50aXR5U3RvcmUuc3RhdGVWaWV3LmFsbCgpLmxlbmd0aCkge1xuXG4gICAgICAgIGlmIChkYXRhLmxheWVyc1dpdGhTZWxlY3Rpb24uaW5kZXhPZihsYXllcikgIT09IC0xICYmIGRhdGEuZmVhdHVyZUluTWFwRXh0ZW50KSB7XG4gICAgICAgICAgLy8gT25seSBleHBvcnQgc2VsZWN0ZWQgZmVhdHVyZSAmJiBpbnRvIG1hcCBleHRlbnRcbiAgICAgICAgICBvbEZlYXR1cmVzID0gd2tzLmVudGl0eVN0b3JlLnN0YXRlVmlldy5hbGwoKVxuICAgICAgICAgICAgLmZpbHRlcigoZTogRW50aXR5UmVjb3JkPG9iamVjdD4pID0+IGUuc3RhdGUuaW5NYXBFeHRlbnQgJiYgZS5zdGF0ZS5zZWxlY3RlZCkubWFwKGUgPT4gKGUuZW50aXR5IGFzIEZlYXR1cmUpLm9sKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhLmxheWVyc1dpdGhTZWxlY3Rpb24uaW5kZXhPZihsYXllcikgIT09IC0xICYmICFkYXRhLmZlYXR1cmVJbk1hcEV4dGVudCkge1xuICAgICAgICAgIC8vIE9ubHkgZXhwb3J0IHNlbGVjdGVkIGZlYXR1cmUgJiYgIChpbnRvIG1hcCBleHRlbnQgT1Igbm90KVxuICAgICAgICAgIG9sRmVhdHVyZXMgPSB3a3MuZW50aXR5U3RvcmUuc3RhdGVWaWV3LmFsbCgpXG4gICAgICAgICAgICAuZmlsdGVyKChlOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PikgPT4gZS5zdGF0ZS5zZWxlY3RlZCkubWFwKGUgPT4gKGUuZW50aXR5IGFzIEZlYXR1cmUpLm9sKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhLmZlYXR1cmVJbk1hcEV4dGVudCkge1xuICAgICAgICAgIC8vIE9ubHkgaW50byBtYXAgZXh0ZW50XG4gICAgICAgICAgb2xGZWF0dXJlcyA9IHdrcy5lbnRpdHlTdG9yZS5zdGF0ZVZpZXcuYWxsKClcbiAgICAgICAgICAgIC5maWx0ZXIoKGU6IEVudGl0eVJlY29yZDxvYmplY3Q+KSA9PiBlLnN0YXRlLmluTWFwRXh0ZW50KS5tYXAoZSA9PiAoZS5lbnRpdHkgYXMgRmVhdHVyZSkub2wpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEFsbCBmZWF0dXJlc1xuICAgICAgICAgIG9sRmVhdHVyZXMgPSB3a3MuZW50aXR5U3RvcmUuc3RhdGVWaWV3LmFsbCgpLm1hcChlID0+IChlLmVudGl0eSBhcyBGZWF0dXJlKS5vbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBjb25zdCBvbCA9IGxheS5kYXRhU291cmNlLm9sIGFzIG9sVmVjdG9yU291cmNlPE9sR2VvbWV0cnk+IHwgb2xDbHVzdGVyU291cmNlIDtcbiAgICAgICAgaWYgKGRhdGEuZmVhdHVyZUluTWFwRXh0ZW50KSB7XG4gICAgICAgICAgb2xGZWF0dXJlcyA9IG9sLmdldEZlYXR1cmVzSW5FeHRlbnQoXG4gICAgICAgICAgICBsYXkubWFwLnZpZXdDb250cm9sbGVyLmdldEV4dGVudCgpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvbEZlYXR1cmVzID0gb2wuZ2V0RmVhdHVyZXMoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGF5LmRhdGFTb3VyY2UgaW5zdGFuY2VvZiBDbHVzdGVyRGF0YVNvdXJjZSkge1xuICAgICAgICAgIG9sRmVhdHVyZXMgPSBvbEZlYXR1cmVzLmZsYXRNYXAoKGNsdXN0ZXI6IGFueSkgPT5cbiAgICAgICAgICAgIGNsdXN0ZXIuZ2V0KCdmZWF0dXJlcycpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCB0cmFuc2xhdGUgPSB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGU7XG4gICAgICBsZXQgZ2VvbVR5cGVzOiB7IGdlb21ldHJ5VHlwZTogc3RyaW5nLCBmZWF0dXJlczogYW55W10gfVtdID0gW107XG4gICAgICBpZiAoZGF0YS5mb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5TaGFwZWZpbGUgfHwgZGF0YS5mb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5HUFgpIHtcbiAgICAgICAgb2xGZWF0dXJlcy5mb3JFYWNoKChvbEZlYXR1cmUpID0+IHtcbiAgICAgICAgICBjb25zdCBmZWF0dXJlR2VvbVR5cGUgPSBvbEZlYXR1cmUuZ2V0R2VvbWV0cnkoKS5nZXRUeXBlKCk7XG4gICAgICAgICAgY29uc3QgY3VycmVudEdlb21UeXBlID0gZ2VvbVR5cGVzLmZpbmQoZ2VvbVR5cGUgPT4gZ2VvbVR5cGUuZ2VvbWV0cnlUeXBlID09PSBmZWF0dXJlR2VvbVR5cGUpO1xuICAgICAgICAgIGlmIChjdXJyZW50R2VvbVR5cGUpIHtcbiAgICAgICAgICAgIGN1cnJlbnRHZW9tVHlwZS5mZWF0dXJlcy5wdXNoKG9sRmVhdHVyZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdlb21UeXBlcy5wdXNoKHsgZ2VvbWV0cnlUeXBlOiBmZWF0dXJlR2VvbVR5cGUsIGZlYXR1cmVzOiBbb2xGZWF0dXJlXSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ2VvbVR5cGVzID0gW3sgZ2VvbWV0cnlUeXBlOiAnJywgZmVhdHVyZXM6IG9sRmVhdHVyZXMgfV07XG4gICAgICB9XG5cbiAgICAgIGdlb21UeXBlcy5mb3JFYWNoKGdlb21UeXBlID0+IHtcbiAgICAgICAgZ2VvbVR5cGUuZmVhdHVyZXMuZm9yRWFjaChmZWF0dXJlID0+IHtcbiAgICAgICAgICBjb25zdCByYWRpdXM6IG51bWJlciA9IGZlYXR1cmUuZ2V0KCdyYWQnKTtcbiAgICAgICAgICBpZiAocmFkaXVzKSB7XG4gICAgICAgICAgICBjb25zdCBjZW50ZXI0MzI2OiBBcnJheTxudW1iZXI+ID0gW2ZlYXR1cmUuZ2V0KCdsb25naXR1ZGUnKSwgZmVhdHVyZS5nZXQoJ2xhdGl0dWRlJyldO1xuICAgICAgICAgICAgY29uc3QgY2lyY2xlID0gY2lyY3VsYXIoY2VudGVyNDMyNiwgcmFkaXVzLCA1MDApO1xuICAgICAgICAgICAgY2lyY2xlLnRyYW5zZm9ybSgnRVBTRzo0MzI2JywgZmVhdHVyZS5nZXQoJ19wcm9qZWN0aW9uJykpO1xuICAgICAgICAgICAgZmVhdHVyZS5zZXRHZW9tZXRyeShjaXJjbGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKGRhdGEuZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuR1BYKSB7XG4gICAgICAgIGNvbnN0IGdweEZlYXR1cmVDbnQgPSBnZW9tVHlwZXMubGVuZ3RoO1xuICAgICAgICBnZW9tVHlwZXMgPSBnZW9tVHlwZXMuZmlsdGVyKGdlb21UeXBlID0+IFsnTGluZVN0cmluZycsICdQb2ludCddLmluY2x1ZGVzKGdlb21UeXBlLmdlb21ldHJ5VHlwZSkpO1xuICAgICAgICBjb25zdCBncHhGZWF0dXJlQ250UG9pbnRPclBvbHkgPSBnZW9tVHlwZXMubGVuZ3RoO1xuICAgICAgICBpZiAoZ3B4RmVhdHVyZUNudCA+IGdweEZlYXR1cmVDbnRQb2ludE9yUG9seSkge1xuICAgICAgICAgIGNvbnN0IHRpdGxlID0gdHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uZXhwb3J0LmdweC5lcnJvci5wb2x5LnRpdGxlJyk7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmV4cG9ydC5ncHguZXJyb3IucG9seS50ZXh0Jyk7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5lcnJvcihtZXNzYWdlLCB0aXRsZSwgeyB0aW1lT3V0OiAyMDAwMCB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICgoZGF0YS5mb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5DU1ZzZW1pY29sb24gfHwgZGF0YS5mb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5DU1Zjb21tYSkgJiYgZGF0YS5jb21iaW5lTGF5ZXJzKSB7XG4gICAgICAgIGdlb21UeXBlcy5mb3JFYWNoKGdlb21UeXBlID0+IGdlb21UeXBlc0NTVi5wdXNoKGdlb21UeXBlKSk7XG5cbiAgICAgICAgaWYgKGxheWVySW5kZXggIT09IGRhdGEubGF5ZXJzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZXQgcHJldmlvdXNGZWF0dXJlID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGdlb21UeXBlc0NTVi5mb3JFYWNoKGdlb21UeXBlID0+IHtcbiAgICAgICAgICAgIGdlb21UeXBlLmZlYXR1cmVzLmZvckVhY2goY3VycmVudEZlYXR1cmUgPT4ge1xuICAgICAgICAgICAgICBpZiAoZGF0YS5zZXBhcmF0b3IpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNGZWF0dXJlKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoY3VycmVudEZlYXR1cmUuZ2V0KCdfZmVhdHVyZVN0b3JlJykubGF5ZXIub3B0aW9ucy50aXRsZSAhPT1cbiAgICAgICAgICAgICAgICAgIHByZXZpb3VzRmVhdHVyZS5nZXQoJ19mZWF0dXJlU3RvcmUnKS5sYXllci5vcHRpb25zLnRpdGxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRpdGxlRW1wdHlSb3dzID0gdGhpcy5jcmVhdGVUaXRsZUVtcHR5Um93cyhwcmV2aW91c0ZlYXR1cmUsIGN1cnJlbnRGZWF0dXJlKTtcbiAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXNDU1YucHVzaCh0aXRsZUVtcHR5Um93c1syXSk7XG4gICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzQ1NWLnB1c2godGl0bGVFbXB0eVJvd3NbMV0pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCB0aXRsZUVtcHR5Um93cyA9IHRoaXMuY3JlYXRlVGl0bGVFbXB0eVJvd3MoY3VycmVudEZlYXR1cmUsIGN1cnJlbnRGZWF0dXJlKTtcbiAgICAgICAgICAgICAgICAgIGZlYXR1cmVzQ1NWLnB1c2godGl0bGVFbXB0eVJvd3NbMF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBmZWF0dXJlc0NTVi5wdXNoKGN1cnJlbnRGZWF0dXJlKTtcbiAgICAgICAgICAgICAgcHJldmlvdXNGZWF0dXJlID0gY3VycmVudEZlYXR1cmU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZ2VvbVR5cGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLmxvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgICAgICBjb25zdCB0aXRsZSA9IHRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmV4cG9ydC5ub3RoaW5nLnRpdGxlJyk7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5leHBvcnQubm90aGluZy50ZXh0Jyk7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuZXJyb3IobWVzc2FnZSwgdGl0bGUsIHsgdGltZU91dDogMjAwMDAgfSk7XG5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghKGRhdGEuZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuQ1NWc2VtaWNvbG9uIHx8IGRhdGEuZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuQ1NWY29tbWEpIHx8ICFkYXRhLmNvbWJpbmVMYXllcnMpIHtcbiAgICAgICAgICBnZW9tVHlwZXMubWFwKGdlb21UeXBlID0+XG4gICAgICAgICAgICB0aGlzLmV4cG9ydFNlcnZpY2UuZXhwb3J0KGdlb21UeXBlLmZlYXR1cmVzLCBkYXRhLmZvcm1hdCwgZmlsZW5hbWUgKyBnZW9tVHlwZS5nZW9tZXRyeVR5cGUsIGRhdGEuZW5jb2RpbmcsIHRoaXMubWFwLnByb2plY3Rpb24pXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAoKSA9PiB7fSxcbiAgICAgICAgICAgICAgKGVycm9yOiBFcnJvcikgPT4gdGhpcy5vbkZpbGVFeHBvcnRFcnJvcihlcnJvciksXG4gICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uRmlsZUV4cG9ydFN1Y2Nlc3MoKTtcblxuICAgICAgICAgICAgICAgIGdlb21UeXBlLmZlYXR1cmVzLmZvckVhY2goZmVhdHVyZSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmNpcmNsZVRvUG9pbnQoZmVhdHVyZSk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBpZiAoKGRhdGEuZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuQ1NWc2VtaWNvbG9uIHx8IGRhdGEuZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuQ1NWY29tbWEpICYmIGRhdGEuY29tYmluZUxheWVycykge1xuICAgICAgdGhpcy5leHBvcnRTZXJ2aWNlLmV4cG9ydChmZWF0dXJlc0NTViwgZGF0YS5mb3JtYXQsIGZpbGVuYW1lLCBkYXRhLmVuY29kaW5nLCB0aGlzLm1hcC5wcm9qZWN0aW9uKVxuICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgKCkgPT4ge30sXG4gICAgICAgIChlcnJvcjogRXJyb3IpID0+IHRoaXMub25GaWxlRXhwb3J0RXJyb3IoZXJyb3IpLFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5vbkZpbGVFeHBvcnRTdWNjZXNzKCk7XG5cbiAgICAgICAgICBmZWF0dXJlc0NTVi5mb3JFYWNoKGZlYXR1cmUgPT4ge1xuICAgICAgICAgICAgdGhpcy5jaXJjbGVUb1BvaW50KGZlYXR1cmUpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdGhpcy5sb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVRpdGxlRW1wdHlSb3dzKHByZXZpb3VzRmVhdHVyZSwgY3VycmVudEZlYXR1cmUpIHtcbiAgICBjb25zdCB0aXRsZVJvdyA9IHByZXZpb3VzRmVhdHVyZS5jbG9uZSgpO1xuICAgIGNvbnN0IHRpdGxlUm93V2l0aEFycm93ID0gcHJldmlvdXNGZWF0dXJlLmNsb25lKCk7XG4gICAgY29uc3QgZW1wdHlSb3cgPSBwcmV2aW91c0ZlYXR1cmUuY2xvbmUoKTtcbiAgICBjb25zdCBwcmV2aW91c0ZlYXR1cmVLZXlzOiBBcnJheTxzdHJpbmc+ID0gcHJldmlvdXNGZWF0dXJlLmdldEtleXMoKTtcbiAgICBjb25zdCBmaXJzdEtleTogc3RyaW5nID0gcHJldmlvdXNGZWF0dXJlS2V5c1sxXTtcbiAgICBwcmV2aW91c0ZlYXR1cmVLZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmIChrZXkgPT09IGZpcnN0S2V5KSB7XG4gICAgICAgIHRpdGxlUm93LnNldChrZXksIGN1cnJlbnRGZWF0dXJlLmdldCgnX2ZlYXR1cmVTdG9yZScpLmxheWVyLm9wdGlvbnMudGl0bGUsIHRydWUpO1xuICAgICAgICB0aXRsZVJvd1dpdGhBcnJvdy5zZXQoa2V5LCBjdXJyZW50RmVhdHVyZS5nZXQoJ19mZWF0dXJlU3RvcmUnKS5sYXllci5vcHRpb25zLnRpdGxlICsgXCIgPT09PT09PT09PT09PT09PT09PT5cIiwgdHJ1ZSk7XG4gICAgICAgIGVtcHR5Um93LnVuc2V0KGtleSwgdHJ1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aXRsZVJvdy51bnNldChrZXksIHRydWUpO1xuICAgICAgICB0aXRsZVJvd1dpdGhBcnJvdy51bnNldChrZXksIHRydWUpO1xuICAgICAgICBlbXB0eVJvdy51bnNldChrZXksIHRydWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHRpdGxlRW1wdHlSb3dzID0gW3RpdGxlUm93LCB0aXRsZVJvd1dpdGhBcnJvdywgZW1wdHlSb3ddO1xuICAgIHJldHVybiB0aXRsZUVtcHR5Um93cztcbiAgfVxuXG4gIHByaXZhdGUgY2lyY2xlVG9Qb2ludChmZWF0dXJlKSB7XG4gICAgY29uc3QgcmFkaXVzOiBudW1iZXIgPSBmZWF0dXJlLmdldCgncmFkJyk7XG5cbiAgICBpZiAocmFkaXVzKSB7XG4gICAgICBjb25zdCBwb2ludCA9IG5ldyBvbFBvaW50KFtmZWF0dXJlLmdldCgnbG9uZ2l0dWRlJyksIGZlYXR1cmUuZ2V0KCdsYXRpdHVkZScpXSk7XG4gICAgICBwb2ludC50cmFuc2Zvcm0oJ0VQU0c6NDMyNicsIGZlYXR1cmUuZ2V0KCdfcHJvamVjdGlvbicpKTtcbiAgICAgIGZlYXR1cmUuc2V0R2VvbWV0cnkocG9pbnQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRGb3JtKCkge1xuICAgIHRoaXMuaW1wb3J0Rm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgaW5wdXRQcm9qOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV1cbiAgICB9KTtcblxuICAgIGlmICh0aGlzLmZvcmNlTmFtaW5nKSB7XG4gICAgICB0aGlzLmZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgICAgZm9ybWF0OiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICAgIGxheWVyczogW1tdLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgICBsYXllcnNXaXRoU2VsZWN0aW9uOiBbW11dLFxuICAgICAgICBlbmNvZGluZzogW0VuY29kaW5nRm9ybWF0LlVURjgsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICAgIGNvbWJpbmVMYXllcnM6IFt0cnVlLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgICBzZXBhcmF0b3I6IFtmYWxzZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgICAgZmVhdHVyZUluTWFwRXh0ZW50OiBbZmFsc2UsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICAgIG5hbWU6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgICBmb3JtYXQ6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgICAgbGF5ZXJzOiBbW10sIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICAgIGxheWVyc1dpdGhTZWxlY3Rpb246IFtbXV0sXG4gICAgICAgIGVuY29kaW5nOiBbRW5jb2RpbmdGb3JtYXQuVVRGOCwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgICAgY29tYmluZUxheWVyczogW3RydWUsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICAgIHNlcGFyYXRvcjogW2ZhbHNlLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgICBmZWF0dXJlSW5NYXBFeHRlbnQ6IFtmYWxzZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb25GaWxlSW1wb3J0U3VjY2VzcyhmaWxlOiBGaWxlLCBmZWF0dXJlczogRmVhdHVyZVtdKSB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZy5nZXRDb25maWcoJ2ltcG9ydFdpdGhTdHlsZScpKSB7XG4gICAgICBoYW5kbGVGaWxlSW1wb3J0U3VjY2VzcyhcbiAgICAgICAgZmlsZSxcbiAgICAgICAgZmVhdHVyZXMsXG4gICAgICAgIHRoaXMubWFwLFxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLFxuICAgICAgICB0aGlzLmxhbmd1YWdlU2VydmljZVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGFuZGxlRmlsZUltcG9ydFN1Y2Nlc3MoXG4gICAgICAgIGZpbGUsXG4gICAgICAgIGZlYXR1cmVzLFxuICAgICAgICB0aGlzLm1hcCxcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZSxcbiAgICAgICAgdGhpcy5sYW5ndWFnZVNlcnZpY2UsXG4gICAgICAgIHRoaXMuc3R5bGVMaXN0U2VydmljZSxcbiAgICAgICAgdGhpcy5zdHlsZVNlcnZpY2VcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvbkZpbGVJbXBvcnRFcnJvcihmaWxlOiBGaWxlLCBlcnJvcjogRXJyb3IpIHtcbiAgICB0aGlzLmxvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgIGhhbmRsZUZpbGVJbXBvcnRFcnJvcihcbiAgICAgIGZpbGUsXG4gICAgICBlcnJvcixcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UsXG4gICAgICB0aGlzLmxhbmd1YWdlU2VydmljZSxcbiAgICAgIHRoaXMuZmlsZVNpemVNYlxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9uUG9wdXBCbG9ja2VkRXJyb3IocHJlQ2hlY2s6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgdGhpcy5sb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICBjb25zdCB0cmFuc2xhdGUgPSB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGU7XG4gICAgY29uc3QgdGl0bGUgPSB0cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5leHBvcnQucG9wdXBCbG9ja2VkLnRpdGxlJyk7XG4gICAgY29uc3QgZXh0cmFNZXNzYWdlID0gcHJlQ2hlY2sgP1xuICAgICAgdHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uZXhwb3J0LnBvcHVwQmxvY2tlZC5zZWxlY3RBZ2FpbicpIDpcbiAgICAgIHRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmV4cG9ydC5wb3B1cEJsb2NrZWQucmV0cnknKTtcbiAgICBjb25zdCBtZXNzYWdlID0gdHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uZXhwb3J0LnBvcHVwQmxvY2tlZC50ZXh0JywgeyBleHRyYU1lc3NhZ2UgfSk7XG4gICAgdGhpcy5tZXNzYWdlU2VydmljZS5lcnJvcihtZXNzYWdlLCB0aXRsZSwgeyB0aW1lT3V0OiAyMDAwMCB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb25GaWxlRXhwb3J0RXJyb3IoZXJyb3I6IEVycm9yKSB7XG4gICAgdGhpcy5sb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICBoYW5kbGVGaWxlRXhwb3J0RXJyb3IoZXJyb3IsIHRoaXMubWVzc2FnZVNlcnZpY2UsIHRoaXMubGFuZ3VhZ2VTZXJ2aWNlKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZENvbmZpZygpIHtcbiAgICBpZiAodGhpcy5jb25maWcuZ2V0Q29uZmlnKCdpbXBvcnRFeHBvcnQuZm9yY2VOYW1pbmcnKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmZvcmNlTmFtaW5nID0gdGhpcy5jb25maWcuZ2V0Q29uZmlnKCdpbXBvcnRFeHBvcnQuZm9yY2VOYW1pbmcnKTtcbiAgICB9XG4gICAgdGhpcy5jb21wdXRlRm9ybWF0cygpO1xuICAgIHRoaXMubG9hZEVuY29kaW5ncygpO1xuICB9XG5cbiAgcHVibGljIGVuY29kaW5nRGVmYXVsdFZhbHVlKGZvcm1hdDogRXhwb3J0Rm9ybWF0KSB7XG4gICAgaWYgKGZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LkNTVmNvbW1hIHx8IGZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LkNTVnNlbWljb2xvbikge1xuICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBlbmNvZGluZzogRW5jb2RpbmdGb3JtYXQuTEFUSU4xIH0pO1xuICAgICAgcmV0dXJuIEVuY29kaW5nRm9ybWF0LkxBVElOMTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBlbmNvZGluZzogRW5jb2RpbmdGb3JtYXQuVVRGOCB9KTtcbiAgICAgIHJldHVybiBFbmNvZGluZ0Zvcm1hdC5VVEY4O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbG9hZEVuY29kaW5ncygpIHtcbiAgICB0aGlzLmVuY29kaW5ncyQubmV4dChFbmNvZGluZ0Zvcm1hdCk7XG4gIH1cblxuICBwcml2YXRlIGNvbXB1dGVGb3JtYXRzKGxheWVycz86IEFueUxheWVyW10pIHtcbiAgICBsZXQgYXBwbGllZGZvcm1hdHM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXMoRXhwb3J0Rm9ybWF0KTtcbiAgICBjb25zdCBmb3JtYXRzVHlwZSA9IHtcbiAgICAgIG9ubHlVcmw6IGZhbHNlLFxuICAgICAgb25seVZlY3RvcjogZmFsc2UsXG4gICAgICB2ZWN0b3JBbmRVcmw6IGZhbHNlLFxuICAgICAgY3VzdG9tTGlzdDogZmFsc2VcbiAgICB9O1xuICAgIGNvbnN0IGN1c3RvbUxpc3QgPSBbXTtcbiAgICBpZiAobGF5ZXJzICYmIGxheWVycy5sZW5ndGgpIHtcbiAgICAgIGxheWVycy5mb3JFYWNoKChsYXllcikgPT4ge1xuICAgICAgICBpZiAoIWxheWVyKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsYXllci5kYXRhU291cmNlLm9wdGlvbnMuZG93bmxvYWQ/LmFsbG93ZWRGb3JtYXRzKSB7XG4gICAgICAgICAgZm9ybWF0c1R5cGUuY3VzdG9tTGlzdCA9IHRydWU7XG4gICAgICAgICAgY3VzdG9tTGlzdC5wdXNoKHtsYXllcjogbGF5ZXIudGl0bGUsIGZvcm1hdHM6IHRoaXMudmFsaWRhdGVMaXN0Rm9ybWF0KGxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5kb3dubG9hZC5hbGxvd2VkRm9ybWF0cyl9KTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAhKGxheWVyIGluc3RhbmNlb2YgVmVjdG9yTGF5ZXIpICYmXG4gICAgICAgICAgbGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLmRvd25sb2FkICYmXG4gICAgICAgICAgbGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLmRvd25sb2FkLnVybFxuICAgICAgICApIHtcbiAgICAgICAgICBmb3JtYXRzVHlwZS5vbmx5VXJsID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICBsYXllci5kYXRhU291cmNlLm9wdGlvbnMuZG93bmxvYWQgJiZcbiAgICAgICAgICAobGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLmRvd25sb2FkLnVybCB8fCBsYXllci5kYXRhU291cmNlLm9wdGlvbnMuZG93bmxvYWQuZHluYW1pY1VybClcbiAgICAgICAgKSB7XG4gICAgICAgICAgZm9ybWF0c1R5cGUudmVjdG9yQW5kVXJsID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChsYXllciBpbnN0YW5jZW9mIFZlY3RvckxheWVyKSB7XG4gICAgICAgICAgZm9ybWF0c1R5cGUub25seVZlY3RvciA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAoZm9ybWF0c1R5cGUub25seVVybCA9PT0gdHJ1ZSAmJiBmb3JtYXRzVHlwZS5vbmx5VmVjdG9yID09PSBmYWxzZSkge1xuICAgICAgICBhcHBsaWVkZm9ybWF0cyA9IFsnVVJMJ107XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBmb3JtYXRzVHlwZS5vbmx5VmVjdG9yID09PSB0cnVlICYmXG4gICAgICAgIGZvcm1hdHNUeXBlLm9ubHlVcmwgPT09IGZhbHNlXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5jb21wdXRlRm9ybWF0cygpOyAvLyByZXNldFxuICAgICAgICBpZiAoRXhwb3J0Rm9ybWF0LlVSTCBpbiB0aGlzLmZvcm1hdHMkLnZhbHVlKSB7XG4gICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZm9ybWF0cyQudmFsdWUpLmZpbHRlcihcbiAgICAgICAgICAgIChrZXkpID0+IGtleSAhPT0gJ1VSTCdcbiAgICAgICAgICApO1xuICAgICAgICAgIGFwcGxpZWRmb3JtYXRzID0ga2V5cztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgZm9ybWF0c1R5cGUudmVjdG9yQW5kVXJsID09PSB0cnVlICYmXG4gICAgICAgIGZvcm1hdHNUeXBlLm9ubHlVcmwgPT09IGZhbHNlICYmXG4gICAgICAgIGZvcm1hdHNUeXBlLm9ubHlWZWN0b3IgPT09IGZhbHNlXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5jb21wdXRlRm9ybWF0cygpOyAvLyByZXNldFxuICAgICAgICBpZiAoIShFeHBvcnRGb3JtYXQuVVJMIGluIHRoaXMuZm9ybWF0cyQudmFsdWUpKSB7XG4gICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZm9ybWF0cyQudmFsdWUpO1xuICAgICAgICAgIGtleXMucHVzaCgnVVJMJyk7XG4gICAgICAgICAgYXBwbGllZGZvcm1hdHMgPSBrZXlzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLmNvbmZpZy5nZXRDb25maWcoJ2ltcG9ydEV4cG9ydC5mb3JtYXRzJykgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgdmFsaWRhdGVkTGlzdEZvcm1hdCA9IHRoaXMudmFsaWRhdGVMaXN0Rm9ybWF0KFxuICAgICAgICB0aGlzLmNvbmZpZy5nZXRDb25maWcoJ2ltcG9ydEV4cG9ydC5mb3JtYXRzJylcbiAgICAgICk7XG4gICAgICBhcHBsaWVkZm9ybWF0cyA9IHZhbGlkYXRlZExpc3RGb3JtYXQ7XG4gICAgfVxuICAgIGlmIChmb3JtYXRzVHlwZS5jdXN0b21MaXN0KSB7XG4gICAgICBsZXQgY29tbW9uRm9ybWF0cztcbiAgICAgIGNvbnN0IGxheWVyc1dpdGhDdXN0b21Gb3JtYXRzID0gW107XG4gICAgICBsZXQgcHJldmlvdXNDdXN0b21MaXN0Rm9ybWF0cyA9IGN1c3RvbUxpc3RbMF0uZm9ybWF0cztcbiAgICAgIGN1c3RvbUxpc3QubWFwKGxpc3QgPT4ge1xuICAgICAgICBsYXllcnNXaXRoQ3VzdG9tRm9ybWF0cy5wdXNoKGxpc3QubGF5ZXIpO1xuICAgICAgICBjb21tb25Gb3JtYXRzID0gbGlzdC5mb3JtYXRzLmZpbHRlcih2YWx1ZSA9PiBwcmV2aW91c0N1c3RvbUxpc3RGb3JtYXRzLmluY2x1ZGVzKHZhbHVlKSk7XG4gICAgICAgIHByZXZpb3VzQ3VzdG9tTGlzdEZvcm1hdHMgPSBsaXN0LmZvcm1hdHM7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGZpbmFsRm9ybWF0cyA9IGNvbW1vbkZvcm1hdHMuZmlsdGVyKHZhbHVlID0+IGFwcGxpZWRmb3JtYXRzLmluY2x1ZGVzKHZhbHVlKSk7XG4gICAgICBpZiAoZmluYWxGb3JtYXRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5mb3JtYXRzJC5uZXh0KHN0ckVudW0oZmluYWxGb3JtYXRzKSk7XG5cbiAgICAgICAgaWYgKGxheWVycyAmJiBsYXllcnMubGVuZ3RoKSB7XG4gICAgICAgICAgaWYgKGxheWVycy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFsZXJ0KFxuICAgICAgICAgICAgICB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5leHBvcnQuY3VzdG9tTGlzdC50ZXh0JywgeyB2YWx1ZTogbGF5ZXJzV2l0aEN1c3RvbUZvcm1hdHMuam9pbigpIH0pLFxuICAgICAgICAgICAgICB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5leHBvcnQuY3VzdG9tTGlzdC50aXRsZScpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5mb3JtYXRzJC5uZXh0KFtdKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hbGVydChcbiAgICAgICAgICB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5leHBvcnQubm9Gb3JtYXQudGV4dCcpLFxuICAgICAgICAgIHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmV4cG9ydC5ub0Zvcm1hdC50aXRsZScpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9ybWF0cyQubmV4dChzdHJFbnVtKGFwcGxpZWRmb3JtYXRzKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZUxpc3RGb3JtYXQoZm9ybWF0czogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGZvcm1hdHNcbiAgICAgIC5maWx0ZXIoKGZvcm1hdCkgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5DU1Zjb21tYS50b1VwcGVyQ2FzZSgpIHx8XG4gICAgICAgICAgZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5DU1ZzZW1pY29sb24udG9VcHBlckNhc2UoKSB8fFxuICAgICAgICAgIGZvcm1hdC50b1VwcGVyQ2FzZSgpID09PSBFeHBvcnRGb3JtYXQuR01MLnRvVXBwZXJDYXNlKCkgfHxcbiAgICAgICAgICBmb3JtYXQudG9VcHBlckNhc2UoKSA9PT0gRXhwb3J0Rm9ybWF0LkdQWC50b1VwcGVyQ2FzZSgpIHx8XG4gICAgICAgICAgZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5HZW9KU09OLnRvVXBwZXJDYXNlKCkgfHxcbiAgICAgICAgICBmb3JtYXQudG9VcHBlckNhc2UoKSA9PT0gRXhwb3J0Rm9ybWF0LktNTC50b1VwcGVyQ2FzZSgpIHx8XG4gICAgICAgICAgZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5TaGFwZWZpbGUudG9VcHBlckNhc2UoKSB8fFxuICAgICAgICAgIGZvcm1hdC50b1VwcGVyQ2FzZSgpID09PSBFeHBvcnRGb3JtYXQuVVJMLnRvVXBwZXJDYXNlKClcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIGZvcm1hdDtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5tYXAoKGZvcm1hdCkgPT4ge1xuICAgICAgICBpZiAoZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5DU1Zjb21tYS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgZm9ybWF0ID0gRXhwb3J0Rm9ybWF0LkNTVmNvbW1hO1xuICAgICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcm1hdC50b1VwcGVyQ2FzZSgpID09PSBFeHBvcnRGb3JtYXQuQ1NWc2VtaWNvbG9uLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICBmb3JtYXQgPSBFeHBvcnRGb3JtYXQuQ1NWc2VtaWNvbG9uO1xuICAgICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcm1hdC50b1VwcGVyQ2FzZSgpID09PSBFeHBvcnRGb3JtYXQuR01MLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICBmb3JtYXQgPSBFeHBvcnRGb3JtYXQuR01MO1xuICAgICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcm1hdC50b1VwcGVyQ2FzZSgpID09PSBFeHBvcnRGb3JtYXQuR1BYLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICBmb3JtYXQgPSBFeHBvcnRGb3JtYXQuR1BYO1xuICAgICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcm1hdC50b1VwcGVyQ2FzZSgpID09PSBFeHBvcnRGb3JtYXQuR2VvSlNPTi50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgZm9ybWF0ID0gRXhwb3J0Rm9ybWF0Lkdlb0pTT047XG4gICAgICAgICAgcmV0dXJuIGZvcm1hdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5LTUwudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgIGZvcm1hdCA9IEV4cG9ydEZvcm1hdC5LTUw7XG4gICAgICAgICAgcmV0dXJuIGZvcm1hdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5TaGFwZWZpbGUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgIGZvcm1hdCA9IEV4cG9ydEZvcm1hdC5TaGFwZWZpbGU7XG4gICAgICAgICAgcmV0dXJuIGZvcm1hdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmb3JtYXQudG9VcHBlckNhc2UoKSA9PT0gRXhwb3J0Rm9ybWF0LlVSTC50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgZm9ybWF0ID0gRXhwb3J0Rm9ybWF0LlVSTDtcbiAgICAgICAgICByZXR1cm4gZm9ybWF0O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBtb2RlQ2hhbmdlZChtb2RlKSB7XG4gICAgdGhpcy5zZWxlY3RNb2RlLmVtaXQobW9kZSk7XG4gIH1cblxuICBwcml2YXRlIG9uRmlsZUV4cG9ydFN1Y2Nlc3MoKSB7XG4gICAgaGFuZGxlRmlsZUV4cG9ydFN1Y2Nlc3ModGhpcy5tZXNzYWdlU2VydmljZSwgdGhpcy5sYW5ndWFnZVNlcnZpY2UpO1xuICB9XG5cbiAgb25JbXBvcnRFeHBvcnRDaGFuZ2UoZXZlbnQpIHtcbiAgICB0aGlzLnNlbGVjdGVkTW9kZSA9IGV2ZW50LnZhbHVlO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiaW1wb3J0LWV4cG9ydC10b2dnbGUgbWF0LXR5cG9ncmFwaHlcIj5cbiAgPG1hdC1idXR0b24tdG9nZ2xlLWdyb3VwXG4gICAgICAgIFt2YWx1ZV09XCJzZWxlY3RlZE1vZGVcIlxuICAgICAgICAoY2hhbmdlKT1cIm9uSW1wb3J0RXhwb3J0Q2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlIFt2YWx1ZV09XCInaW1wb3J0J1wiPlxuICAgICAgICAgIHt7J2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5pbXBvcnRUYWJUaXRsZScgfCB0cmFuc2xhdGV9fVxuICAgICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxuICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgW3ZhbHVlXT1cIidleHBvcnQnXCI+XG4gICAgICAgICAge3snaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmV4cG9ydFRhYlRpdGxlJyB8IHRyYW5zbGF0ZX19XG4gICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XG4gIDwvbWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXA+XG48L2Rpdj5cblxuPGZvcm0gY2xhc3M9XCJpZ28tZm9ybVwiIFtmb3JtR3JvdXBdPVwiaW1wb3J0Rm9ybVwiICpuZ0lmPVwic2VsZWN0ZWRNb2RlID09PSAnaW1wb3J0J1wiPlxuICA8ZGl2IGNsYXNzPVwiaWdvLWlucHV0LWNvbnRhaW5lclwiPlxuICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgIDxtYXQtbGFiZWw+e3snaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmltcG9ydFByb2pQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxuICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgWyh2YWx1ZSldPVwiaW5wdXRQcm9qXCI+XG4gICAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICAgKm5nRm9yPVwibGV0IHByb2plY3Rpb24gb2YgKHByb2plY3Rpb25zJCB8IGFzeW5jKVwiXG4gICAgICAgICAgW3ZhbHVlXT1cInByb2plY3Rpb25cIlxuICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICA8cCBtYXQtbGluZSAqbmdJZj1cInByb2plY3Rpb24udHJhbnNsYXRlS2V5XCI+e3soJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5wcm9qZWN0aW9ucy4nICsgcHJvamVjdGlvbi50cmFuc2xhdGVLZXkpIHwgdHJhbnNsYXRlOiBwcm9qZWN0aW9ufX08L3A+XG4gICAgICAgICAgPHAgbWF0LWxpbmUgKm5nSWY9XCIhcHJvamVjdGlvbi50cmFuc2xhdGVLZXlcIj57e3Byb2plY3Rpb24uYWxpYXN9fTwvcD5cbiAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgPC9tYXQtc2VsZWN0PlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDwvZGl2PlxuXG4gIDxkaXZcbiAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxuICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgIFttYXRUb29sdGlwXT1cImltcG9ydEZvcm0uaW52YWxpZCA/ICgnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLnByb2plY3Rpb25zLmNob29zZScgfCB0cmFuc2xhdGUpIDogKCdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uaW1wb3J0QnV0dG9uJyB8IHRyYW5zbGF0ZSlcIlxuICAgIGNsYXNzPVwiaWdvLWZvcm0tYnV0dG9uLWdyb3VwXCI+XG4gICAgPGJ1dHRvblxuICAgICAgW2Rpc2FibGVkXT1cImltcG9ydEZvcm0uaW52YWxpZCB8fCAobG9hZGluZyQgfCBhc3luYylcIlxuICAgICAgbWF0LXJhaXNlZC1idXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgKGNsaWNrKT1cImZpbGVJbnB1dC5jbGljaygpXCI+XG4gICAgICAgIHt7J2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5pbXBvcnRCdXR0b24nIHwgdHJhbnNsYXRlfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8aWdvLXNwaW5uZXIgW3Nob3duXT1cImxvYWRpbmckIHwgYXN5bmNcIj48L2lnby1zcGlubmVyPlxuICAgIDxpbnB1dFxuICAgICAgaGlkZGVuXG4gICAgICAjZmlsZUlucHV0XG4gICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICBbc3R5bGUuZGlzcGxheV09XCInbm9uZSdcIlxuICAgICAgKGNsaWNrKT1cImZpbGVJbnB1dC52YWx1ZSA9IG51bGxcIlxuICAgICAgKGNoYW5nZSk9XCJpbXBvcnRGaWxlcygkZXZlbnQudGFyZ2V0LmZpbGVzKVwiPlxuICA8L2Rpdj5cbjwvZm9ybT5cbjxzZWN0aW9uIGNsYXNzPVwibWF0LXR5cG9ncmFwaHlcIiAqbmdJZj1cInNlbGVjdGVkTW9kZSA9PT0gJ2ltcG9ydCdcIj5cbiAgPGg0Pnt7J2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5pbXBvcnRDbGFyaWZpY2F0aW9ucycgfCB0cmFuc2xhdGV9fTwvaDQ+XG4gIDx1bD5cbiAgICA8bGk+e3snaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmltcG9ydFNpemVNYXgnIHwgdHJhbnNsYXRlOiB7c2l6ZTogZmlsZVNpemVNYn0gfX08L2xpPlxuICAgIDxsaT57eydpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uaW1wb3J0Rm9ybWF0QXV0aG9yaXplZCcgfCB0cmFuc2xhdGV9fTwvbGk+XG4gICAgPGxpPnt7J2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5pbXBvcnRTaHBaaXAnIHwgdHJhbnNsYXRlfX08L2xpPlxuICA8L3VsPlxuPC9zZWN0aW9uPlxuXG48c2VjdGlvbiBjbGFzcz1cIm1hdC10eXBvZ3JhcGh5XCIgKm5nSWY9XCIoZXhwb3J0YWJsZUxheWVycyQgfCBhc3luYykubGVuZ3RoID09PSAwICYmIHNlbGVjdGVkTW9kZSA9PT0gJ2V4cG9ydCdcIj5cbiAgPGg0Pnt7J2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5leHBvcnROb0xheWVyc0V4cG9ydGFibGUnIHwgdHJhbnNsYXRlfX08L2g0PlxuPC9zZWN0aW9uPlxuXG48Zm9ybSBjbGFzcz1cImlnby1mb3JtXCIgW2Zvcm1Hcm91cF09XCJmb3JtXCIgKm5nSWY9XCIoZXhwb3J0YWJsZUxheWVycyQgfCBhc3luYykubGVuZ3RoID4gMCAmJiBzZWxlY3RlZE1vZGUgPT09ICdleHBvcnQnXCI+XG4gIDxkaXYgY2xhc3M9XCJpZ28taW5wdXQtY29udGFpbmVyXCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgPG1hdC1sYWJlbD57eydpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uZXhwb3J0TGF5ZXJQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxuICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgWyh2YWx1ZSldPVwibGF5ZXJzXCIgbXVsdGlwbGU+XG4gICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAge3tsYXllcnMubGVuZ3RoID8gZ2V0TGF5ZXJUaXRsZUJ5SWQobGF5ZXJzWzBdKSA6ICcnfX1cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImxheWVycy5sZW5ndGggPiAxXCIgY2xhc3M9XCJleHBvcnQtc2VsZWN0LXRyaWdnZXJcIj5cbiAgICAgICAgICAgICgre3tsYXllcnMubGVuZ3RoIC0gMX19IHt7KGxheWVycz8ubGVuZ3RoID09PSAyID8gJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5vdGhlcicgOiAnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLm90aGVycycpIHwgdHJhbnNsYXRlIH19KVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGxheWVyIG9mIChleHBvcnRhYmxlTGF5ZXJzJCB8IGFzeW5jKVwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwieydpZ28tZXhwb3J0LWxheWVyLW1hdC1vcHRpb24nOiBsYXllckhhc1NlbGVjdGVkRmVhdHVyZXMobGF5ZXIpfVwiXG4gICAgICAgICAgW3ZhbHVlXT1cImxheWVyLmlkXCJcbiAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgPHAgbWF0LWxpbmU+e3tsYXllci50aXRsZX19PC9wPlxuICAgICAgICAgIDxwIG1hdC1saW5lPlxuICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgKm5nSWY9XCJsYXllckhhc1NlbGVjdGVkRmVhdHVyZXMobGF5ZXIpXCJcbiAgICAgICAgICAgICAgW2xhYmVsUG9zaXRpb25dPVwiJ2FmdGVyJ1wiXG4gICAgICAgICAgICAgIChjbGljayk9XCJvbmx5U2VsZWN0ZWRDbGljaygkZXZlbnQsbGF5ZXIuaWQpXCJcbiAgICAgICAgICAgICAgKGNoZWNrZWQpPVwiaW5MYXllcnNJZFRvRXhwb3J0U2VsZWN0aW9uT25seShsYXllcilcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9ubHlTZWxlY3RlZCgkZXZlbnQsbGF5ZXIuaWQpXCI+XG4gICAgICAgICAgICAgIDxzbWFsbD57eydpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uZXhwb3J0U2VsZWN0ZWRGZWF0dXJlJyB8IHRyYW5zbGF0ZX19PC9zbWFsbD5cbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiaWdvLWlucHV0LWNvbnRhaW5lclwiPlxuICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgIDxtYXQtbGFiZWw+e3snaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmV4cG9ydEZvcm1hdFBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XG4gICAgICA8bWF0LXNlbGVjdFxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJmb3JtYXRcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihmb3JtYXRzJCB8IGFzeW5jKS5sZW5ndGggIT09IDBcIj5cbiAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgZm9ybWF0IG9mIChmb3JtYXRzJCB8IGFzeW5jKSB8IGtleXZhbHVlXCIgW3ZhbHVlXT1cImZvcm1hdC5rZXlcIj5cbiAgICAgICAgICAgIHt7J2lnby5nZW8uZXhwb3J0LmZvcm1hdC4nICsgZm9ybWF0LnZhbHVlIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bWF0LW9wdGlvbiAqbmdJZj1cIihmb3JtYXRzJCB8IGFzeW5jKS5sZW5ndGggPT09IDBcIiBkaXNhYmxlZD1cInRydWVcIj5cbiAgICAgICAgICB7eydpZ28uZ2VvLmV4cG9ydC5ub0Zvcm1hdC50aXRsZScgfCB0cmFuc2xhdGV9fVxuICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICA8L21hdC1zZWxlY3Q+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImlnby1pbnB1dC1jb250YWluZXJcIiAqbmdJZj1cImZvcmNlTmFtaW5nICYmIGZvcm0udmFsdWUuZm9ybWF0ICE9PSAnVVJMJ1wiPlxuICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIiBwbGFjZWhvbGRlcj1cInt7J2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5leHBvcnRGaWxlTmFtZVBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZX19XCI+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImlnby1pbnB1dC1jb250YWluZXJcIiAqbmdJZj1cImZvcm0udmFsdWUuZm9ybWF0ID09PSAnQ1NWY29tbWEnIHx8IGZvcm0udmFsdWUuZm9ybWF0ID09PSAnQ1NWc2VtaWNvbG9uJ1wiPlxuICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgIDxtYXQtbGFiZWw+e3snaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmVuY29kaW5nUGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlfX08L21hdC1sYWJlbD5cbiAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cImVuY29kaW5nXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoZW5jb2RpbmdzJCB8IGFzeW5jKS5sZW5ndGggIT09IDBcIj5cbiAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgZW5jb2Rpbmcgb2YgKGVuY29kaW5ncyQgfCBhc3luYykgfCBrZXl2YWx1ZVwiIFt2YWx1ZV09XCJlbmNvZGluZy5rZXlcIj5cbiAgICAgICAgICAgIHt7J2lnby5nZW8uZXhwb3J0LmVuY29kaW5nLicgKyBlbmNvZGluZy52YWx1ZSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiZXhwb3J0LWNvbWJpbmUtbGF5ZXJzIG1hdC10eXBvZ3JhcGh5XCIgKm5nSWY9XCJsYXllcnMubGVuZ3RoID4gMSAmJiAoZm9ybS52YWx1ZS5mb3JtYXQgPT09ICdDU1Zjb21tYScgfHwgZm9ybS52YWx1ZS5mb3JtYXQgPT09ICdDU1ZzZW1pY29sb24nKVwiPlxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNvbWJpbmVMYXllcnNcIlxuICAgICAgICBbbGFiZWxQb3NpdGlvbl09XCInYmVmb3JlJ1wiPlxuICAgICAgICAgIHt7J2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5leHBvcnRDb21iaW5lUmVzdWx0cycgfCB0cmFuc2xhdGV9fVxuICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImV4cG9ydC1zZXBhcmF0b3IgbWF0LXR5cG9ncmFwaHlcIiAqbmdJZj1cImxheWVycy5sZW5ndGggPiAxICYmIChmb3JtLnZhbHVlLmZvcm1hdCA9PT0gJ0NTVmNvbW1hJyB8fCBmb3JtLnZhbHVlLmZvcm1hdCA9PT0gJ0NTVnNlbWljb2xvbicpICYmIGZvcm0udmFsdWUuY29tYmluZUxheWVyc1wiPlxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNlcGFyYXRvclwiXG4gICAgICAgIFtsYWJlbFBvc2l0aW9uXT1cIidiZWZvcmUnXCI+XG4gICAgICAgICAge3snaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmV4cG9ydFNlcGFyYXRvcicgfCB0cmFuc2xhdGV9fVxuICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImV4cG9ydC1vcHRpb25zIG1hdC10eXBvZ3JhcGh5XCIgKm5nSWY9XCJmb3JtLnZhbHVlLmZvcm1hdCAhPT0gJ1VSTCdcIj5cbiAgICA8bWF0LXNsaWRlLXRvZ2dsZVxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJmZWF0dXJlSW5NYXBFeHRlbnRcIlxuICAgICAgICBbbGFiZWxQb3NpdGlvbl09XCInYmVmb3JlJ1wiPlxuICAgICAgICAgIHt7J2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5leHBvcnRGZWF0dXJlSW5FeHRlbnQnIHwgdHJhbnNsYXRlfX1cbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJpZ28tZm9ybS1idXR0b24tZ3JvdXBcIj5cbiAgICA8YnV0dG9uXG4gICAgICBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBbZGlzYWJsZWRdPVwiIWZvcm0udmFsaWQgfHwgKGxvYWRpbmckIHwgYXN5bmMpXCJcbiAgICAgIChjbGljayk9XCJoYW5kbGVFeHBvcnRGb3JtU3VibWl0KGZvcm0udmFsdWUpXCI+XG4gICAgICB7e2Zvcm0udmFsdWUuZm9ybWF0ICE9PSAnVVJMJyAgPyAoJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5leHBvcnRCdXR0b24nIHwgdHJhbnNsYXRlKTogKGZvcm0udmFsdWUubGF5ZXJzLmxlbmd0aCA+IDEgID8gKCdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uZXhwb3J0QnV0dG9uTGlua3MnIHwgdHJhbnNsYXRlKTogKCdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uZXhwb3J0QnV0dG9uTGluaycgfCB0cmFuc2xhdGUpKX19XG4gICAgPC9idXR0b24+XG4gICAgPGlnby1zcGlubmVyIFtzaG93bl09XCJsb2FkaW5nJCB8IGFzeW5jXCI+PC9pZ28tc3Bpbm5lcj5cbiAgPC9kaXY+XG5cbjwvZm9ybT5cbiJdfQ==
|