@igo2/geo 16.2.0 → 16.3.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/esm2022/lib/catalog/catalog-browser/catalog-browser-group.component.mjs +3 -3
- package/esm2022/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs +3 -3
- package/esm2022/lib/catalog/catalog-browser/catalog-browser.component.mjs +3 -3
- package/esm2022/lib/catalog/catalog-library/add-catalog-dialog.component.mjs +3 -3
- package/esm2022/lib/catalog/catalog-library/catalog-library-item.component.mjs +3 -3
- package/esm2022/lib/catalog/catalog-library/catalog-library.component.mjs +3 -3
- package/esm2022/lib/catalog/shared/catalog.abstract.mjs +1 -1
- package/esm2022/lib/catalog/shared/catalog.enum.mjs +1 -1
- package/esm2022/lib/catalog/shared/catalog.interface.mjs +1 -1
- package/esm2022/lib/catalog/shared/catalog.service.mjs +64 -26
- package/esm2022/lib/catalog/shared/catalogs.mjs +1 -1
- package/esm2022/lib/datasource/shared/capabilities.interface.mjs +7 -1
- package/esm2022/lib/datasource/shared/capabilities.service.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/any-datasource.interface.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/any-datasource.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/arcgisrest-datasource.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/carto-datasource.mjs +2 -2
- package/esm2022/lib/datasource/shared/datasources/cluster-datasource.interface.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/cluster-datasource.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/data.service.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/datasource.interface.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/datasource.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/feature-datasource.interface.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/feature-datasource.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/imagearcgisrest-datasource.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/index.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/mvt-datasource.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/osm-datasource.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/tilearcgisrest-datasource.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/tiledebug-datasource.interface.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/tiledebug-datasource.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/websocket-datasource.interface.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/websocket-datasource.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/wfs-datasource.interface.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/wfs-datasource.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/wfs.service.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/wms-datasource.interface.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/wms-datasource.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/wmts-datasource.interface.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/wmts-datasource.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/xyz-datasource.interface.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/xyz-datasource.mjs +1 -1
- package/esm2022/lib/datasource/shared/index.mjs +1 -1
- package/esm2022/lib/datasource/shared/options/options-api.providers.mjs +1 -1
- package/esm2022/lib/datasource/shared/options/options-api.service.mjs +1 -1
- package/esm2022/lib/datasource/shared/options/options.service.mjs +1 -1
- package/esm2022/lib/datasource/utils/tilegrid.mjs +1 -1
- package/esm2022/lib/directions/directions-buttons/directions-buttons.component.mjs +3 -3
- package/esm2022/lib/directions/directions-inputs/directions-inputs.component.mjs +3 -3
- package/esm2022/lib/directions/directions-results/directions-results.component.mjs +3 -3
- package/esm2022/lib/directions/directions-sources/directions-source.interface.mjs +1 -1
- package/esm2022/lib/directions/directions-sources/directions-source.mjs +1 -1
- package/esm2022/lib/directions/directions-sources/osrm-directions-source.mjs +1 -1
- package/esm2022/lib/directions/directions.component.mjs +3 -3
- package/esm2022/lib/directions/shared/directions.interface.mjs +1 -1
- package/esm2022/lib/directions/shared/directions.service.mjs +1 -1
- package/esm2022/lib/directions/shared/directions.utils.mjs +1 -1
- package/esm2022/lib/directions/shared/store.mjs +1 -1
- package/esm2022/lib/download/download-button/download-button.component.mjs +3 -3
- package/esm2022/lib/download/shared/download.service.mjs +1 -1
- package/esm2022/lib/draw/draw/draw-layer-popup.component.mjs +3 -3
- package/esm2022/lib/draw/draw/draw-popup.component.mjs +3 -3
- package/esm2022/lib/draw/draw/draw-shorcuts.component.mjs +3 -3
- package/esm2022/lib/draw/draw/draw.component.mjs +3 -3
- package/esm2022/lib/draw/shared/draw-icon.service.mjs +1 -1
- package/esm2022/lib/draw/shared/draw.enum.mjs +1 -1
- package/esm2022/lib/draw/shared/draw.interface.mjs +1 -1
- package/esm2022/lib/draw/shared/draw.utils.mjs +1 -1
- package/esm2022/lib/environment/environment.interface.mjs +1 -1
- package/esm2022/lib/environment/index.mjs +1 -1
- package/esm2022/lib/feature/feature-details/feature-details.component.mjs +3 -3
- package/esm2022/lib/feature/feature-form/feature-form.component.mjs +3 -3
- package/esm2022/lib/feature/shared/feature-store.utils.mjs +1 -1
- package/esm2022/lib/feature/shared/index.mjs +1 -1
- package/esm2022/lib/feature/shared/strategies/geo-properties.mjs +1 -1
- package/esm2022/lib/feature/shared/strategies/in-map-extent.mjs +1 -1
- package/esm2022/lib/feature/shared/strategies/loading-layer.mjs +1 -1
- package/esm2022/lib/feature/shared/strategies/loading.mjs +1 -1
- package/esm2022/lib/feature/shared/strategies/selection.mjs +1 -1
- package/esm2022/lib/feature/shared/strategies.utils.mjs +1 -1
- package/esm2022/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +3 -3
- package/esm2022/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +3 -3
- package/esm2022/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +3 -3
- package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.mjs +3 -3
- package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +3 -3
- package/esm2022/lib/filter/ogc-filterable-form/ogc-filterable-form.component.mjs +3 -3
- package/esm2022/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +3 -3
- package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs +3 -3
- package/esm2022/lib/filter/shared/ogc-filter-time.service.mjs +1 -1
- package/esm2022/lib/filter/shared/ogc-filter.enum.mjs +1 -1
- package/esm2022/lib/filter/shared/ogc-filter.service.mjs +1 -1
- package/esm2022/lib/filter/shared/spatial-filter.enum.mjs +1 -1
- package/esm2022/lib/filter/shared/spatial-filter.service.mjs +1 -1
- package/esm2022/lib/filter/shared/time-filter.enum.mjs +1 -1
- package/esm2022/lib/filter/shared/time-filter.interface.mjs +1 -1
- package/esm2022/lib/filter/shared/time-filter.service.mjs +1 -1
- package/esm2022/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +3 -3
- package/esm2022/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs +3 -3
- package/esm2022/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +3 -3
- package/esm2022/lib/filter/time-filter-button/time-filter-button.component.mjs +3 -3
- package/esm2022/lib/filter/time-filter-form/time-filter-form.component.mjs +3 -3
- package/esm2022/lib/filter/time-filter-item/time-filter-item.component.mjs +3 -3
- package/esm2022/lib/filter/time-filter-list/time-filter-list.component.mjs +3 -3
- package/esm2022/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs +3 -3
- package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.component.mjs +3 -3
- package/esm2022/lib/geometry/shared/controls/draw.mjs +1 -1
- package/esm2022/lib/geometry/shared/controls/modify.mjs +1 -1
- package/esm2022/lib/geometry/shared/controls/slice.mjs +1 -1
- package/esm2022/lib/geometry/shared/geometry.errors.mjs +1 -1
- package/esm2022/lib/geometry/shared/geometry.interfaces.mjs +1 -1
- package/esm2022/lib/geometry/shared/geometry.utils.mjs +1 -1
- package/esm2022/lib/import-export/export-button/export-button.component.mjs +3 -3
- package/esm2022/lib/import-export/shared/export.interface.mjs +1 -1
- package/esm2022/lib/import-export/shared/export.service.mjs +1 -1
- package/esm2022/lib/import-export/shared/export.type.mjs +1 -1
- package/esm2022/lib/import-export/shared/export.utils.mjs +1 -1
- package/esm2022/lib/import-export/shared/import.errors.mjs +1 -1
- package/esm2022/lib/import-export/shared/import.interface.mjs +1 -1
- package/esm2022/lib/import-export/shared/import.service.mjs +1 -1
- package/esm2022/lib/import-export/shared/import.utils.mjs +1 -1
- package/esm2022/lib/layer/layer-item/layer-item.component.mjs +3 -3
- package/esm2022/lib/layer/layer-legend/layer-legend.component.mjs +3 -3
- package/esm2022/lib/layer/layer-legend-item/layer-legend-item.component.mjs +3 -3
- package/esm2022/lib/layer/layer-legend-list/layer-legend-list.component.mjs +3 -3
- package/esm2022/lib/layer/layer-list/layer-list.component.mjs +3 -3
- package/esm2022/lib/layer/layer-list/layer-list.enum.mjs +1 -1
- package/esm2022/lib/layer/layer-list-tool/layer-list-tool.component.mjs +3 -3
- package/esm2022/lib/layer/layer-list-tool/layer-list-tool.service.mjs +1 -1
- package/esm2022/lib/layer/shared/clusterParam.mjs +1 -1
- package/esm2022/lib/layer/shared/layer.service.mjs +6 -6
- package/esm2022/lib/layer/shared/layers/any-layer.interface.mjs +1 -1
- package/esm2022/lib/layer/shared/layers/any-layer.mjs +1 -1
- package/esm2022/lib/layer/shared/layers/image-layer.interface.mjs +1 -1
- package/esm2022/lib/layer/shared/layers/image-layer.mjs +1 -1
- package/esm2022/lib/layer/shared/layers/legend.interface.mjs +1 -1
- package/esm2022/lib/layer/shared/layers/tile-layer.interface.mjs +1 -1
- package/esm2022/lib/layer/shared/layers/tile-layer.mjs +1 -1
- package/esm2022/lib/layer/shared/layers/vector-layer.interface.mjs +1 -1
- package/esm2022/lib/layer/shared/layers/vector-layer.mjs +1 -1
- package/esm2022/lib/layer/shared/layers/vectortile-layer.interface.mjs +1 -1
- package/esm2022/lib/layer/shared/layers/vectortile-layer.mjs +1 -1
- package/esm2022/lib/layer/track-feature-button/track-feature-button.component.mjs +3 -3
- package/esm2022/lib/layer/utils/layer.utils.mjs +1 -1
- package/esm2022/lib/layer/utils/outputLegend.mjs +1 -1
- package/esm2022/lib/map/baselayers-switcher/mini-basemap.component.mjs +3 -3
- package/esm2022/lib/map/geolocate-button/geolocate-button.component.mjs +3 -3
- package/esm2022/lib/map/home-extent-button/home-extent-button.component.mjs +3 -3
- package/esm2022/lib/map/home-extent-button/home-extent-button.interface.mjs +1 -1
- package/esm2022/lib/map/home-extent-button/index.mjs +1 -1
- package/esm2022/lib/map/info-section/info-section.component.mjs +3 -3
- package/esm2022/lib/map/map-center/map-center.component.mjs +3 -3
- package/esm2022/lib/map/menu-button/menu-button.component.mjs +3 -3
- package/esm2022/lib/map/offline-button/offline-button.component.mjs +3 -3
- package/esm2022/lib/map/rotation-button/rotation-button.component.mjs +3 -3
- package/esm2022/lib/map/shared/controllers/controller.mjs +1 -1
- package/esm2022/lib/map/shared/controllers/geolocation.interface.mjs +1 -1
- package/esm2022/lib/map/shared/controllers/index.mjs +1 -1
- package/esm2022/lib/map/shared/index.mjs +1 -1
- package/esm2022/lib/map/shared/map.abstract.mjs +1 -1
- package/esm2022/lib/map/shared/map.interface.mjs +1 -1
- package/esm2022/lib/map/shared/map.utils.mjs +1 -1
- package/esm2022/lib/map/shared/projection.interfaces.mjs +1 -1
- package/esm2022/lib/map/shared/projection.service.mjs +1 -1
- package/esm2022/lib/map/shared/projection.utils.mjs +1 -1
- package/esm2022/lib/map/swipe-control/swipe-control.component.mjs +3 -3
- package/esm2022/lib/map/utils/layer-watcher.mjs +1 -1
- package/esm2022/lib/map/wake-lock-button/wake-lock-button.component.mjs +3 -3
- package/esm2022/lib/map/zoom-button/zoom-button.component.mjs +3 -3
- package/esm2022/lib/measure/measurer/measurer-dialog.component.mjs +3 -3
- package/esm2022/lib/measure/measurer/measurer-item.component.mjs +3 -3
- package/esm2022/lib/measure/measurer/measurer.component.mjs +3 -3
- package/esm2022/lib/measure/shared/measure.enum.mjs +1 -1
- package/esm2022/lib/measure/shared/measure.interfaces.mjs +1 -1
- package/esm2022/lib/measure/shared/measure.utils.mjs +1 -1
- package/esm2022/lib/metadata/metadata-button/metadata-button.component.mjs +3 -3
- package/esm2022/lib/metadata/shared/metadata.interface.mjs +1 -1
- package/esm2022/lib/offline/geoDB/configFileToGeoDB.service.mjs +1 -1
- package/esm2022/lib/offline/geoDB/geoDB.enums.mjs +1 -1
- package/esm2022/lib/offline/geoDB/geoDB.interface.mjs +1 -1
- package/esm2022/lib/offline/geoDB/geoDB.service.mjs +1 -1
- package/esm2022/lib/offline/layerDB/index.mjs +1 -1
- package/esm2022/lib/offline/layerDB/layerDB.interface.mjs +1 -1
- package/esm2022/lib/offline/layerDB/layerDB.service.mjs +1 -1
- package/esm2022/lib/offline/shared/geo-network.service.mjs +1 -1
- package/esm2022/lib/overlay/shared/overlay.enum.mjs +1 -1
- package/esm2022/lib/overlay/shared/overlay.mjs +2 -2
- package/esm2022/lib/overlay/shared/overlay.service.mjs +1 -1
- package/esm2022/lib/overlay/shared/overlay.utils.mjs +1 -1
- package/esm2022/lib/print/print/print.component.mjs +3 -3
- package/esm2022/lib/print/print-form/print-form.component.mjs +3 -3
- package/esm2022/lib/print/shared/geopdf.mjs +1 -1
- package/esm2022/lib/print/shared/print.interface.mjs +1 -1
- package/esm2022/lib/print/shared/print.service.mjs +1 -1
- package/esm2022/lib/print/shared/print.type.mjs +1 -1
- package/esm2022/lib/query/shared/query-search-source.mjs +1 -1
- package/esm2022/lib/query/shared/query-search-source.providers.mjs +1 -1
- package/esm2022/lib/query/shared/query.interfaces.mjs +1 -1
- package/esm2022/lib/query/shared/query.utils.mjs +1 -1
- package/esm2022/lib/search/search-results/save-feature-dialog.component.mjs +3 -3
- package/esm2022/lib/search/search-results/search-results-add-button.component.mjs +3 -3
- package/esm2022/lib/search/search-results/search-results-item.component.mjs +3 -3
- package/esm2022/lib/search/search-results/search-results.component.mjs +3 -3
- package/esm2022/lib/search/search-selector/search-selector.component.mjs +3 -3
- package/esm2022/lib/search/search-settings/search-settings.component.mjs +3 -3
- package/esm2022/lib/search/shared/search-source-service.providers.mjs +1 -1
- package/esm2022/lib/search/shared/search-source.service.mjs +1 -1
- package/esm2022/lib/search/shared/search.enums.mjs +1 -1
- package/esm2022/lib/search/shared/search.interfaces.mjs +1 -1
- package/esm2022/lib/search/shared/search.service.mjs +1 -1
- package/esm2022/lib/search/shared/search.utils.mjs +1 -1
- package/esm2022/lib/search/shared/sources/cadastre.mjs +1 -1
- package/esm2022/lib/search/shared/sources/cadastre.providers.mjs +1 -1
- package/esm2022/lib/search/shared/sources/coordinates.interfaces.mjs +1 -1
- package/esm2022/lib/search/shared/sources/coordinates.mjs +1 -1
- package/esm2022/lib/search/shared/sources/coordinates.providers.mjs +1 -1
- package/esm2022/lib/search/shared/sources/icherche.interfaces.mjs +1 -1
- package/esm2022/lib/search/shared/sources/icherche.mjs +1 -1
- package/esm2022/lib/search/shared/sources/icherche.providers.mjs +1 -1
- package/esm2022/lib/search/shared/sources/ilayer.interfaces.mjs +1 -1
- package/esm2022/lib/search/shared/sources/ilayer.mjs +1 -1
- package/esm2022/lib/search/shared/sources/ilayer.providers.mjs +1 -1
- package/esm2022/lib/search/shared/sources/index.mjs +1 -1
- package/esm2022/lib/search/shared/sources/nominatim.mjs +2 -2
- package/esm2022/lib/search/shared/sources/nominatim.providers.mjs +1 -1
- package/esm2022/lib/search/shared/sources/source.interfaces.mjs +1 -1
- package/esm2022/lib/search/shared/sources/source.mjs +1 -1
- package/esm2022/lib/search/shared/sources/storedqueries.interfaces.mjs +1 -1
- package/esm2022/lib/search/shared/sources/storedqueries.providers.mjs +1 -1
- package/esm2022/lib/search/shared/sources/workspace.interfaces.mjs +1 -1
- package/esm2022/lib/search/shared/sources/workspace.providers.mjs +1 -1
- package/esm2022/lib/style/index.mjs +1 -1
- package/esm2022/lib/style/shared/datasource/esri-style-generator.mjs +1 -1
- package/esm2022/lib/style/shared/feature/feature-style.mjs +1 -1
- package/esm2022/lib/style/shared/font.enum.mjs +1 -1
- package/esm2022/lib/style/shared/index.mjs +1 -1
- package/esm2022/lib/style/shared/overlay/overlay-marker-style.utils.mjs +1 -1
- package/esm2022/lib/style/shared/overlay/overlay-style.utils.mjs +1 -1
- package/esm2022/lib/style/shared/vector/commonVectorStyle.mjs +1 -1
- package/esm2022/lib/style/shared/vector/conversion.utils.mjs +1 -1
- package/esm2022/lib/style/style-list/style-list.module.mjs +1 -1
- package/esm2022/lib/style/style-list/style-list.provider.mjs +1 -1
- package/esm2022/lib/style/style-list/style-list.service.mjs +1 -1
- package/esm2022/lib/style/style-modal/drawing/style-modal-drawing.component.mjs +3 -3
- package/esm2022/lib/style/style-modal/layer/style-modal-layer.component.mjs +3 -3
- package/esm2022/lib/style/style-modal/layer-button/style-modal-layer-button.component.mjs +3 -3
- package/esm2022/lib/style/style-modal/shared/style-modal.interface.mjs +1 -1
- package/esm2022/lib/style/style-service/draw-style.service.mjs +1 -1
- package/esm2022/lib/style/style-service/style.service.mjs +1 -1
- package/esm2022/lib/toast/toast.component.mjs +3 -3
- package/esm2022/lib/utils/googleLinks.mjs +1 -1
- package/esm2022/lib/utils/id-generator.mjs +1 -1
- package/esm2022/lib/utils/osmLinks.mjs +1 -1
- package/esm2022/lib/utils/propertyTypeDetector/propertyTypeDetector.interface.mjs +1 -1
- package/esm2022/lib/utils/propertyTypeDetector/propertyTypeDetector.service.mjs +1 -1
- package/esm2022/lib/wkt/shared/wkt.service.mjs +15 -15
- package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.component.mjs +3 -3
- package/esm2022/lib/workspace/confirmation-popup/index.mjs +1 -1
- package/esm2022/lib/workspace/shared/edition-workspace.mjs +1 -1
- package/esm2022/lib/workspace/shared/edition-workspace.service.mjs +1 -1
- package/esm2022/lib/workspace/shared/feature-workspace.mjs +1 -1
- package/esm2022/lib/workspace/shared/feature-workspace.service.mjs +1 -1
- package/esm2022/lib/workspace/shared/wfs-workspace.mjs +1 -1
- package/esm2022/lib/workspace/shared/wfs-workspace.service.mjs +1 -1
- package/esm2022/lib/workspace/shared/wms-workspace.service.mjs +1 -1
- package/esm2022/lib/workspace/shared/workspace.utils.mjs +1 -1
- package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs +3 -3
- package/fesm2022/igo2-geo.mjs +233 -190
- package/fesm2022/igo2-geo.mjs.map +1 -1
- package/lib/datasource/shared/capabilities.interface.d.ts +16 -0
- package/lib/overlay/shared/overlay.d.ts +1 -1
- package/package.json +5 -5
- package/src/geo-theme.scss +23 -23
- package/src/lib/catalog/catalog-browser/catalog-browser.theming.scss +22 -22
- package/src/lib/catalog/catalog.theming.scss +5 -5
- package/src/lib/directions/directions-results/directions-results.theming.scss +10 -10
- package/src/lib/directions/directions.theming.scss +6 -6
- package/src/lib/draw/draw.theming.scss +32 -32
- package/src/lib/feature/feature-details/feature-details.theming.scss +16 -16
- package/src/lib/feature/feature.theming.scss +4 -4
- package/src/lib/filter/filter.theming.scss +13 -13
- package/src/lib/filter/ogc-filter-selection/ogc-filter-selection.theming.scss +18 -18
- package/src/lib/filter/time-filter-form/time-filter-form.theming.scss +5 -5
- package/src/lib/layer/layer-item/layer-item.theme.scss +33 -33
- package/src/lib/layer/layer-legend/layer-legend.theming.scss +10 -10
- package/src/lib/layer/layer-list-tool/layer-list-tool.theming.scss +34 -34
- package/src/lib/layer/layer.theming.scss +10 -10
- package/src/lib/map/map-browser/map-browser.theming.scss +46 -46
- package/src/lib/map/map.theming.scss +9 -9
- package/src/lib/map/menu-button/menu-button.theming.scss +20 -20
- package/src/lib/map/zoom-button/zoom-button.theming.scss +32 -32
- package/src/lib/measure/measure.theming.scss +5 -5
- package/src/lib/measure/measurer/measurer.theming.scss +26 -26
- package/src/lib/search/search-results/search-results-item.theme.scss +20 -20
- package/src/lib/search/search.theming.scss +7 -7
- package/src/lib/workspace/confirmation-popup/confirmation-popup.theming.scss +14 -14
- package/src/lib/workspace/workspace.theming.scss +6 -6
- package/src/style/style.scss +1 -1
|
@@ -732,11 +732,11 @@ export class OgcFilterSelectionComponent {
|
|
|
732
732
|
}
|
|
733
733
|
}
|
|
734
734
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: OgcFilterSelectionComponent, deps: [{ token: i1.OGCFilterService }, { token: i2.UntypedFormBuilder }, { token: i3.DOMService }, { token: i4.ConfigService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
735
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: OgcFilterSelectionComponent, selector: "igo-ogc-filter-selection", inputs: { refreshFilters: "refreshFilters", datasource: "datasource", map: "map", checkboxesIndex: "checkboxesIndex", radioButtonsIndex: "radioButtonsIndex", baseIndex: "baseIndex", currentFilter: "currentFilter" }, providers: [DOMService], viewQueries: [{ propertyName: "sel", first: true, predicate: ["selection"], descendants: true }], ngImport: i0, template: "<form [formGroup]=\"form\">\n <div *ngFor=\"let selector of ogcFiltersSelectors\">\n <div\n class=\"pushButtonGroups\"\n *ngIf=\"selector.selectorType === 'pushButton'\"\n >\n <mat-divider></mat-divider>\n <div class=\"groupsSelector\" *ngIf=\"getPushButtonsGroups().length > 1\">\n <mat-form-field>\n <mat-select\n formControlName=\"pushButtonsGroup\"\n [matTooltip]=\"'igo.geo.layer.legend.selectStyle' | translate\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [(value)]=\"currentPushButtonsGroup\"\n >\n <mat-option\n *ngFor=\"let selectorGroup of getPushButtonsGroups()\"\n [value]=\"selectorGroup\"\n >{{ selectorGroup.title }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <ng-container\n *ngFor=\"let bundle of currentPushButtonsGroup.computedSelectors\"\n >\n <h3>{{ bundle.title }}</h3>\n <mat-button-toggle-group\n formControlName=\"pushButtons\"\n class=\"mat-typography\"\n appearance=\"legacy\"\n vertical=\"{{ bundleIsVertical(bundle) }}\"\n multiple=\"true\"\n >\n <mat-button-toggle\n *ngFor=\"let ogcPushButton of bundle.selectors\"\n [matTooltip]=\"getToolTip(ogcPushButton)\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n matTooltipClass=\"material-tooltip\"\n [ngStyle]=\"getButtonColor(ogcPushButton)\"\n [checked]=\"ogcPushButton.enabled\"\n (change)=\"onSelectionChange(ogcPushButton, selector.selectorType)\"\n [value]=\"ogcPushButton\"\n >{{ ogcPushButton.title }}\n </mat-button-toggle>\n </mat-button-toggle-group>\n </ng-container>\n </div>\n\n <div class=\"checkboxGroups\" *ngIf=\"selector.selectorType === 'checkbox'\">\n <mat-divider></mat-divider>\n <div class=\"groupsSelector\" *ngIf=\"getCheckboxesGroups().length > 1\">\n <mat-form-field>\n <mat-select\n formControlName=\"checkboxesGroup\"\n [matTooltip]=\"'igo.geo.layer.legend.selectStyle' | translate\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [(value)]=\"currentCheckboxesGroup\"\n >\n <mat-option\n *ngFor=\"let selectorGroup of getCheckboxesGroups()\"\n [value]=\"selectorGroup\"\n >{{ selectorGroup.title }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <ng-container\n *ngFor=\"let bundle of currentCheckboxesGroup.computedSelectors\"\n >\n <h3>{{ bundle.title }}</h3>\n <div class=\"checkboxes mat-typography\">\n <mat-checkbox\n *ngFor=\"let ogcCheckbox of bundle.selectors\"\n [matTooltip]=\"getToolTip(ogcCheckbox)\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n matTooltipClass=\"material-tooltip\"\n [checked]=\"ogcCheckbox.enabled\"\n (change)=\"onSelectionChange(ogcCheckbox, selector.selectorType)\"\n [value]=\"ogcCheckbox\"\n >{{ ogcCheckbox.title }}\n </mat-checkbox>\n </div>\n <p\n *ngIf=\"\n isLessResults(bundle, 'checkbox') ||\n isMoreResults(bundle, 'checkbox')\n \"\n >\n <u\n *ngIf=\"isLessResults(bundle, 'checkbox')\"\n class=\"lessResults mat-typography\"\n (click)=\"displayLessResults('checkbox')\"\n >{{ 'igo.geo.filter.displayLessResults' | translate }}\n </u>\n <u\n *ngIf=\"isMoreResults(bundle, 'checkbox')\"\n class=\"moreResults mat-typography\"\n (click)=\"displayMoreResults('checkbox')\"\n >{{ 'igo.geo.filter.displayMoreResults' | translate }}\n </u>\n </p>\n </ng-container>\n </div>\n\n <div\n class=\"radioButtonGroups\"\n *ngIf=\"selector.selectorType === 'radioButton'\"\n >\n <mat-divider></mat-divider>\n <div class=\"groupsSelector\" *ngIf=\"getRadioButtonsGroups().length > 1\">\n <mat-form-field>\n <mat-select\n formControlName=\"radioButtonsGroup\"\n [matTooltip]=\"'igo.geo.layer.legend.selectStyle' | translate\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [(value)]=\"currentRadioButtonsGroup\"\n >\n <mat-option\n *ngFor=\"let selectorGroup of getRadioButtonsGroups()\"\n [value]=\"selectorGroup\"\n >{{ selectorGroup.title }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <ng-container\n *ngFor=\"let bundle of currentRadioButtonsGroup.computedSelectors\"\n >\n <h3>{{ bundle.title }}</h3>\n <mat-radio-group formControlName=\"radioButtons\" class=\"mat-typography\">\n <mat-radio-button\n *ngIf=\"bundle.unfiltered\"\n [matTooltip]=\"'igo.geo.filter.resetFilters' | translate\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n matTooltipClass=\"material-tooltip\"\n (change)=\"emptyRadioButtons()\"\n >{{ 'igo.geo.filter.resetFilters' | translate }}\n </mat-radio-button>\n <mat-radio-button\n *ngFor=\"let ogcRadioButton of bundle.selectors\"\n [matTooltip]=\"getToolTip(ogcRadioButton)\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n matTooltipClass=\"material-tooltip\"\n [checked]=\"ogcRadioButton.enabled\"\n (change)=\"onSelectionChange(ogcRadioButton, selector.selectorType)\"\n [value]=\"ogcRadioButton\"\n >{{ ogcRadioButton.title }}\n </mat-radio-button>\n <p\n *ngIf=\"\n isLessResults(bundle, 'radio') || isMoreResults(bundle, 'radio')\n \"\n >\n <u\n *ngIf=\"isLessResults(bundle, 'radio')\"\n class=\"lessResults mat-typography\"\n (click)=\"displayLessResults('radio')\"\n >{{ 'igo.geo.filter.displayLessResults' | translate }}\n </u>\n <u\n *ngIf=\"isMoreResults(bundle, 'radio')\"\n class=\"moreResults mat-typography\"\n (click)=\"displayMoreResults('radio')\"\n >{{ 'igo.geo.filter.displayMoreResults' | translate }}\n </u>\n </p>\n </mat-radio-group>\n </ng-container>\n </div>\n\n <div class=\"selectGroups\" *ngIf=\"selector.selectorType === 'select'\">\n <mat-divider></mat-divider>\n <div class=\"groupsSelector\" *ngIf=\"getSelectGroups().length > 1\">\n <mat-form-field>\n <mat-select\n formControlName=\"selectGroup\"\n [matTooltip]=\"'igo.geo.layer.legend.selectStyle' | translate\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [(value)]=\"currentSelectGroup\"\n >\n <mat-option\n *ngFor=\"let selectorGroup of getSelectGroups()\"\n [value]=\"selectorGroup\"\n >{{ selectorGroup.title }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <ng-container *ngFor=\"let bundle of currentSelectGroup.computedSelectors\">\n <h3>{{ bundle.title }}</h3>\n <div class=\"groupsSelector\">\n <mat-button\n *ngIf=\"bundle.unfiltered && !bundle.multiple\"\n mat-icon-button\n color=\"warn\"\n [matTooltip]=\"'igo.geo.filter.resetFilters' | translate\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n matTooltipClass=\"material-tooltip\"\n (click)=\"emptySelect()\"\n >\n <mat-icon svgIcon=\"filter-remove\"></mat-icon>\n </mat-button>\n <mat-form-field\n [style.width.%]=\"bundle.width ? bundle.width : undefined\"\n >\n <div *ngIf=\"bundle.multiple; else notMulti\">\n <mat-select\n #selection\n [multiple]=\"bundle.multiple\"\n [placeholder]=\"bundle.title\"\n formControlName=\"selectMulti\"\n >\n <div class=\"checkboxes mat-typography\">\n <mat-checkbox\n *ngIf=\"bundle.multiple\"\n [(ngModel)]=\"selectAllSelected\"\n [ngModelOptions]=\"{ standalone: true }\"\n (change)=\"toggleAllSelection()\"\n >Tous\n </mat-checkbox>\n </div>\n <mat-option\n *ngFor=\"let ogcSelect of bundle.selectors\"\n [matTooltip]=\"getToolTip(ogcSelect)\"\n tooltip-position=\"below\"\n matTooltipDelay=\"500\"\n matTooltipClass=\"material-tooltip\"\n (onSelectionChange)=\"\n selectOptionClick($event.source.value, bundle, $event)\n \"\n [value]=\"ogcSelect\"\n >{{ ogcSelect.title }}\n </mat-option>\n </mat-select>\n </div>\n <ng-template #notMulti>\n <mat-select [placeholder]=\"bundle.title\" formControlName=\"select\">\n <mat-option\n *ngFor=\"let ogcSelect of bundle.selectors\"\n [matTooltip]=\"getToolTip(ogcSelect)\"\n tooltip-position=\"below\"\n matTooltipDelay=\"500\"\n matTooltipClass=\"material-tooltip\"\n [value]=\"ogcSelect\"\n (onSelectionChange)=\"\n selectOptionClick($event.source.value, bundle)\n \"\n >{{ ogcSelect.title }}\n </mat-option>\n </mat-select>\n </ng-template>\n </mat-form-field>\n </div>\n </ng-container>\n </div>\n\n <div\n class=\"autocompleteGroups\"\n *ngIf=\"selector.selectorType === 'autocomplete'\"\n >\n <mat-divider></mat-divider>\n <div class=\"groupsSelector\" *ngIf=\"getAutocompleteGroups().length > 1\">\n <mat-form-field>\n <mat-select\n formControlName=\"autocompleteGroup\"\n [matTooltip]=\"'igo.geo.layer.legend.selectStyle' | translate\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [(value)]=\"currentAutocompleteGroup\"\n >\n <mat-option\n *ngFor=\"let autocompleteGroup of getAutocompleteGroups()\"\n [value]=\"autocompleteGroup\"\n >{{ autocompleteGroup.title }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <ng-container\n *ngFor=\"let bundle of currentAutocompleteGroup.computedSelectors\"\n >\n <h3>{{ bundle.title }}</h3>\n <div class=\"groupsSelector\">\n <mat-button\n *ngIf=\"bundle.unfiltered\"\n mat-icon-button\n color=\"warn\"\n [matTooltip]=\"'igo.geo.filter.resetFilters' | translate\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n matTooltipClass=\"material-tooltip\"\n (click)=\"emptyAutocomplete()\"\n >\n <mat-icon svgIcon=\"filter-remove\"></mat-icon>\n </mat-button>\n <mat-form-field\n *ngIf=\"filteredOgcAutocomplete[bundle.id]\"\n [style.width.%]=\"bundle.width ? bundle.width : undefined\"\n >\n <input\n matInput\n type=\"text\"\n formControlName=\"autocomplete\"\n #autocomplete\n class=\"autocomplete\"\n [matAutocomplete]=\"auto\"\n [placeholder]=\"bundle.title\"\n />\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n #autocomplete\n (optionSelected)=\"autocompleteOptionClick($event.option.value)\"\n [displayWith]=\"displayFn\"\n >\n <mat-option\n *ngFor=\"\n let ogcAutocomplete of filteredOgcAutocomplete[bundle.id]\n | async\n \"\n [value]=\"ogcAutocomplete\"\n >\n {{ ogcAutocomplete.value }}\n </mat-option>\n </mat-autocomplete>\n </mat-form-field>\n </div>\n </ng-container>\n </div>\n </div>\n</form>\n\n<div *ngIf=\"isTemporalOperator()\">\n <mat-divider></mat-divider>\n <h3 *ngIf=\"!currentFilter.title\">\n {{ 'igo.geo.filter.reportingDate' | translate }}\n </h3>\n <h3 *ngIf=\"currentFilter.title\">{{ currentFilter.title }}</h3>\n <igo-ogc-filter-time\n [(datasource)]=\"datasource\"\n [(currentFilter)]=\"currentFilter\"\n (changeProperty)=\"changeProperty($event.value, $event.pos)\"\n >\n </igo-ogc-filter-time>\n</div>\n", styles: [":host .mat-button-toggle-group{margin:5px;flex-wrap:wrap;box-shadow:none!important;width:95%}:host .checkboxes{flex-wrap:wrap;box-shadow:none}:host .groupsSelector{text-align:center}:host mat-button-toggle{display:inline-flex;border:1.5px solid black;border-radius:5px;margin:5px;white-space:normal;min-height:40px;height:auto;width:142px}:host mat-button-toggle ::ng-deep .mat-button-toggle-label-content{line-height:unset;font-size:small;display:block}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){:host mat-button-toggle{width:45%}}:host ::ng-deep .material-tooltip{white-space:pre-wrap}:host mat-checkbox,:host mat-radio-button{margin:7px;width:95%;display:inline-flex;font-size:larger}:host mat-checkbox ::ng-deep label,:host mat-radio-button ::ng-deep label{white-space:normal}:host mat-checkbox{vertical-align:middle}:host mat-button{padding-right:10px;cursor:pointer}:host h3{margin:7px;text-align:left}:host u{cursor:pointer;color:#00f;margin:5px}:host p{margin:unset}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i6.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple", "hideSingleSelectionIndicator"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i7.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i6.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i9.MatRadioGroup, selector: "mat-radio-group", exportAs: ["matRadioGroup"] }, { kind: "component", type: i9.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex"], exportAs: ["matRadioButton"] }, { kind: "directive", type: i10.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i10.MatButtonToggle, selector: "mat-button-toggle", inputs: ["disableRipple", "aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "appearance", "checked", "disabled"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "component", type: i11.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i12.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i13.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i14.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "panelWidth", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "component", type: i15.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: i16.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i17.OgcFilterTimeComponent, selector: "igo-ogc-filter-time", inputs: ["datasource", "currentFilter"], outputs: ["changeProperty"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i18.TranslatePipe, name: "translate" }] });
|
|
735
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: OgcFilterSelectionComponent, selector: "igo-ogc-filter-selection", inputs: { refreshFilters: "refreshFilters", datasource: "datasource", map: "map", checkboxesIndex: "checkboxesIndex", radioButtonsIndex: "radioButtonsIndex", baseIndex: "baseIndex", currentFilter: "currentFilter" }, providers: [DOMService], viewQueries: [{ propertyName: "sel", first: true, predicate: ["selection"], descendants: true }], ngImport: i0, template: "<form [formGroup]=\"form\">\r\n <div *ngFor=\"let selector of ogcFiltersSelectors\">\r\n <div\r\n class=\"pushButtonGroups\"\r\n *ngIf=\"selector.selectorType === 'pushButton'\"\r\n >\r\n <mat-divider></mat-divider>\r\n <div class=\"groupsSelector\" *ngIf=\"getPushButtonsGroups().length > 1\">\r\n <mat-form-field>\r\n <mat-select\r\n formControlName=\"pushButtonsGroup\"\r\n [matTooltip]=\"'igo.geo.layer.legend.selectStyle' | translate\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [(value)]=\"currentPushButtonsGroup\"\r\n >\r\n <mat-option\r\n *ngFor=\"let selectorGroup of getPushButtonsGroups()\"\r\n [value]=\"selectorGroup\"\r\n >{{ selectorGroup.title }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <ng-container\r\n *ngFor=\"let bundle of currentPushButtonsGroup.computedSelectors\"\r\n >\r\n <h3>{{ bundle.title }}</h3>\r\n <mat-button-toggle-group\r\n formControlName=\"pushButtons\"\r\n class=\"mat-typography\"\r\n appearance=\"legacy\"\r\n vertical=\"{{ bundleIsVertical(bundle) }}\"\r\n multiple=\"true\"\r\n >\r\n <mat-button-toggle\r\n *ngFor=\"let ogcPushButton of bundle.selectors\"\r\n [matTooltip]=\"getToolTip(ogcPushButton)\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n matTooltipClass=\"material-tooltip\"\r\n [ngStyle]=\"getButtonColor(ogcPushButton)\"\r\n [checked]=\"ogcPushButton.enabled\"\r\n (change)=\"onSelectionChange(ogcPushButton, selector.selectorType)\"\r\n [value]=\"ogcPushButton\"\r\n >{{ ogcPushButton.title }}\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"checkboxGroups\" *ngIf=\"selector.selectorType === 'checkbox'\">\r\n <mat-divider></mat-divider>\r\n <div class=\"groupsSelector\" *ngIf=\"getCheckboxesGroups().length > 1\">\r\n <mat-form-field>\r\n <mat-select\r\n formControlName=\"checkboxesGroup\"\r\n [matTooltip]=\"'igo.geo.layer.legend.selectStyle' | translate\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [(value)]=\"currentCheckboxesGroup\"\r\n >\r\n <mat-option\r\n *ngFor=\"let selectorGroup of getCheckboxesGroups()\"\r\n [value]=\"selectorGroup\"\r\n >{{ selectorGroup.title }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <ng-container\r\n *ngFor=\"let bundle of currentCheckboxesGroup.computedSelectors\"\r\n >\r\n <h3>{{ bundle.title }}</h3>\r\n <div class=\"checkboxes mat-typography\">\r\n <mat-checkbox\r\n *ngFor=\"let ogcCheckbox of bundle.selectors\"\r\n [matTooltip]=\"getToolTip(ogcCheckbox)\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n matTooltipClass=\"material-tooltip\"\r\n [checked]=\"ogcCheckbox.enabled\"\r\n (change)=\"onSelectionChange(ogcCheckbox, selector.selectorType)\"\r\n [value]=\"ogcCheckbox\"\r\n >{{ ogcCheckbox.title }}\r\n </mat-checkbox>\r\n </div>\r\n <p\r\n *ngIf=\"\r\n isLessResults(bundle, 'checkbox') ||\r\n isMoreResults(bundle, 'checkbox')\r\n \"\r\n >\r\n <u\r\n *ngIf=\"isLessResults(bundle, 'checkbox')\"\r\n class=\"lessResults mat-typography\"\r\n (click)=\"displayLessResults('checkbox')\"\r\n >{{ 'igo.geo.filter.displayLessResults' | translate }}\r\n </u>\r\n <u\r\n *ngIf=\"isMoreResults(bundle, 'checkbox')\"\r\n class=\"moreResults mat-typography\"\r\n (click)=\"displayMoreResults('checkbox')\"\r\n >{{ 'igo.geo.filter.displayMoreResults' | translate }}\r\n </u>\r\n </p>\r\n </ng-container>\r\n </div>\r\n\r\n <div\r\n class=\"radioButtonGroups\"\r\n *ngIf=\"selector.selectorType === 'radioButton'\"\r\n >\r\n <mat-divider></mat-divider>\r\n <div class=\"groupsSelector\" *ngIf=\"getRadioButtonsGroups().length > 1\">\r\n <mat-form-field>\r\n <mat-select\r\n formControlName=\"radioButtonsGroup\"\r\n [matTooltip]=\"'igo.geo.layer.legend.selectStyle' | translate\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [(value)]=\"currentRadioButtonsGroup\"\r\n >\r\n <mat-option\r\n *ngFor=\"let selectorGroup of getRadioButtonsGroups()\"\r\n [value]=\"selectorGroup\"\r\n >{{ selectorGroup.title }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <ng-container\r\n *ngFor=\"let bundle of currentRadioButtonsGroup.computedSelectors\"\r\n >\r\n <h3>{{ bundle.title }}</h3>\r\n <mat-radio-group formControlName=\"radioButtons\" class=\"mat-typography\">\r\n <mat-radio-button\r\n *ngIf=\"bundle.unfiltered\"\r\n [matTooltip]=\"'igo.geo.filter.resetFilters' | translate\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n matTooltipClass=\"material-tooltip\"\r\n (change)=\"emptyRadioButtons()\"\r\n >{{ 'igo.geo.filter.resetFilters' | translate }}\r\n </mat-radio-button>\r\n <mat-radio-button\r\n *ngFor=\"let ogcRadioButton of bundle.selectors\"\r\n [matTooltip]=\"getToolTip(ogcRadioButton)\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n matTooltipClass=\"material-tooltip\"\r\n [checked]=\"ogcRadioButton.enabled\"\r\n (change)=\"onSelectionChange(ogcRadioButton, selector.selectorType)\"\r\n [value]=\"ogcRadioButton\"\r\n >{{ ogcRadioButton.title }}\r\n </mat-radio-button>\r\n <p\r\n *ngIf=\"\r\n isLessResults(bundle, 'radio') || isMoreResults(bundle, 'radio')\r\n \"\r\n >\r\n <u\r\n *ngIf=\"isLessResults(bundle, 'radio')\"\r\n class=\"lessResults mat-typography\"\r\n (click)=\"displayLessResults('radio')\"\r\n >{{ 'igo.geo.filter.displayLessResults' | translate }}\r\n </u>\r\n <u\r\n *ngIf=\"isMoreResults(bundle, 'radio')\"\r\n class=\"moreResults mat-typography\"\r\n (click)=\"displayMoreResults('radio')\"\r\n >{{ 'igo.geo.filter.displayMoreResults' | translate }}\r\n </u>\r\n </p>\r\n </mat-radio-group>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"selectGroups\" *ngIf=\"selector.selectorType === 'select'\">\r\n <mat-divider></mat-divider>\r\n <div class=\"groupsSelector\" *ngIf=\"getSelectGroups().length > 1\">\r\n <mat-form-field>\r\n <mat-select\r\n formControlName=\"selectGroup\"\r\n [matTooltip]=\"'igo.geo.layer.legend.selectStyle' | translate\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [(value)]=\"currentSelectGroup\"\r\n >\r\n <mat-option\r\n *ngFor=\"let selectorGroup of getSelectGroups()\"\r\n [value]=\"selectorGroup\"\r\n >{{ selectorGroup.title }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <ng-container *ngFor=\"let bundle of currentSelectGroup.computedSelectors\">\r\n <h3>{{ bundle.title }}</h3>\r\n <div class=\"groupsSelector\">\r\n <mat-button\r\n *ngIf=\"bundle.unfiltered && !bundle.multiple\"\r\n mat-icon-button\r\n color=\"warn\"\r\n [matTooltip]=\"'igo.geo.filter.resetFilters' | translate\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n matTooltipClass=\"material-tooltip\"\r\n (click)=\"emptySelect()\"\r\n >\r\n <mat-icon svgIcon=\"filter-remove\"></mat-icon>\r\n </mat-button>\r\n <mat-form-field\r\n [style.width.%]=\"bundle.width ? bundle.width : undefined\"\r\n >\r\n <div *ngIf=\"bundle.multiple; else notMulti\">\r\n <mat-select\r\n #selection\r\n [multiple]=\"bundle.multiple\"\r\n [placeholder]=\"bundle.title\"\r\n formControlName=\"selectMulti\"\r\n >\r\n <div class=\"checkboxes mat-typography\">\r\n <mat-checkbox\r\n *ngIf=\"bundle.multiple\"\r\n [(ngModel)]=\"selectAllSelected\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n (change)=\"toggleAllSelection()\"\r\n >Tous\r\n </mat-checkbox>\r\n </div>\r\n <mat-option\r\n *ngFor=\"let ogcSelect of bundle.selectors\"\r\n [matTooltip]=\"getToolTip(ogcSelect)\"\r\n tooltip-position=\"below\"\r\n matTooltipDelay=\"500\"\r\n matTooltipClass=\"material-tooltip\"\r\n (onSelectionChange)=\"\r\n selectOptionClick($event.source.value, bundle, $event)\r\n \"\r\n [value]=\"ogcSelect\"\r\n >{{ ogcSelect.title }}\r\n </mat-option>\r\n </mat-select>\r\n </div>\r\n <ng-template #notMulti>\r\n <mat-select [placeholder]=\"bundle.title\" formControlName=\"select\">\r\n <mat-option\r\n *ngFor=\"let ogcSelect of bundle.selectors\"\r\n [matTooltip]=\"getToolTip(ogcSelect)\"\r\n tooltip-position=\"below\"\r\n matTooltipDelay=\"500\"\r\n matTooltipClass=\"material-tooltip\"\r\n [value]=\"ogcSelect\"\r\n (onSelectionChange)=\"\r\n selectOptionClick($event.source.value, bundle)\r\n \"\r\n >{{ ogcSelect.title }}\r\n </mat-option>\r\n </mat-select>\r\n </ng-template>\r\n </mat-form-field>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <div\r\n class=\"autocompleteGroups\"\r\n *ngIf=\"selector.selectorType === 'autocomplete'\"\r\n >\r\n <mat-divider></mat-divider>\r\n <div class=\"groupsSelector\" *ngIf=\"getAutocompleteGroups().length > 1\">\r\n <mat-form-field>\r\n <mat-select\r\n formControlName=\"autocompleteGroup\"\r\n [matTooltip]=\"'igo.geo.layer.legend.selectStyle' | translate\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [(value)]=\"currentAutocompleteGroup\"\r\n >\r\n <mat-option\r\n *ngFor=\"let autocompleteGroup of getAutocompleteGroups()\"\r\n [value]=\"autocompleteGroup\"\r\n >{{ autocompleteGroup.title }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <ng-container\r\n *ngFor=\"let bundle of currentAutocompleteGroup.computedSelectors\"\r\n >\r\n <h3>{{ bundle.title }}</h3>\r\n <div class=\"groupsSelector\">\r\n <mat-button\r\n *ngIf=\"bundle.unfiltered\"\r\n mat-icon-button\r\n color=\"warn\"\r\n [matTooltip]=\"'igo.geo.filter.resetFilters' | translate\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n matTooltipClass=\"material-tooltip\"\r\n (click)=\"emptyAutocomplete()\"\r\n >\r\n <mat-icon svgIcon=\"filter-remove\"></mat-icon>\r\n </mat-button>\r\n <mat-form-field\r\n *ngIf=\"filteredOgcAutocomplete[bundle.id]\"\r\n [style.width.%]=\"bundle.width ? bundle.width : undefined\"\r\n >\r\n <input\r\n matInput\r\n type=\"text\"\r\n formControlName=\"autocomplete\"\r\n #autocomplete\r\n class=\"autocomplete\"\r\n [matAutocomplete]=\"auto\"\r\n [placeholder]=\"bundle.title\"\r\n />\r\n <mat-autocomplete\r\n #auto=\"matAutocomplete\"\r\n #autocomplete\r\n (optionSelected)=\"autocompleteOptionClick($event.option.value)\"\r\n [displayWith]=\"displayFn\"\r\n >\r\n <mat-option\r\n *ngFor=\"\r\n let ogcAutocomplete of filteredOgcAutocomplete[bundle.id]\r\n | async\r\n \"\r\n [value]=\"ogcAutocomplete\"\r\n >\r\n {{ ogcAutocomplete.value }}\r\n </mat-option>\r\n </mat-autocomplete>\r\n </mat-form-field>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</form>\r\n\r\n<div *ngIf=\"isTemporalOperator()\">\r\n <mat-divider></mat-divider>\r\n <h3 *ngIf=\"!currentFilter.title\">\r\n {{ 'igo.geo.filter.reportingDate' | translate }}\r\n </h3>\r\n <h3 *ngIf=\"currentFilter.title\">{{ currentFilter.title }}</h3>\r\n <igo-ogc-filter-time\r\n [(datasource)]=\"datasource\"\r\n [(currentFilter)]=\"currentFilter\"\r\n (changeProperty)=\"changeProperty($event.value, $event.pos)\"\r\n >\r\n </igo-ogc-filter-time>\r\n</div>\r\n", styles: [":host .mat-button-toggle-group{margin:5px;flex-wrap:wrap;box-shadow:none!important;width:95%}:host .checkboxes{flex-wrap:wrap;box-shadow:none}:host .groupsSelector{text-align:center}:host mat-button-toggle{display:inline-flex;border:1.5px solid black;border-radius:5px;margin:5px;white-space:normal;min-height:40px;height:auto;width:142px}:host mat-button-toggle ::ng-deep .mat-button-toggle-label-content{line-height:unset;font-size:small;display:block}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){:host mat-button-toggle{width:45%}}:host ::ng-deep .material-tooltip{white-space:pre-wrap}:host mat-checkbox,:host mat-radio-button{margin:7px;width:95%;display:inline-flex;font-size:larger}:host mat-checkbox ::ng-deep label,:host mat-radio-button ::ng-deep label{white-space:normal}:host mat-checkbox{vertical-align:middle}:host mat-button{padding-right:10px;cursor:pointer}:host h3{margin:7px;text-align:left}:host u{cursor:pointer;color:#00f;margin:5px}:host p{margin:unset}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i6.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple", "hideSingleSelectionIndicator"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i7.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i6.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i9.MatRadioGroup, selector: "mat-radio-group", exportAs: ["matRadioGroup"] }, { kind: "component", type: i9.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex"], exportAs: ["matRadioButton"] }, { kind: "directive", type: i10.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i10.MatButtonToggle, selector: "mat-button-toggle", inputs: ["disableRipple", "aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "appearance", "checked", "disabled"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "component", type: i11.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i12.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i13.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i14.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "panelWidth", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "component", type: i15.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: i16.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i17.OgcFilterTimeComponent, selector: "igo-ogc-filter-time", inputs: ["datasource", "currentFilter"], outputs: ["changeProperty"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i18.TranslatePipe, name: "translate" }] });
|
|
736
736
|
}
|
|
737
737
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: OgcFilterSelectionComponent, decorators: [{
|
|
738
738
|
type: Component,
|
|
739
|
-
args: [{ selector: 'igo-ogc-filter-selection', providers: [DOMService], template: "<form [formGroup]=\"form\">\n <div *ngFor=\"let selector of ogcFiltersSelectors\">\n <div\n class=\"pushButtonGroups\"\n *ngIf=\"selector.selectorType === 'pushButton'\"\n >\n <mat-divider></mat-divider>\n <div class=\"groupsSelector\" *ngIf=\"getPushButtonsGroups().length > 1\">\n <mat-form-field>\n <mat-select\n formControlName=\"pushButtonsGroup\"\n [matTooltip]=\"'igo.geo.layer.legend.selectStyle' | translate\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [(value)]=\"currentPushButtonsGroup\"\n >\n <mat-option\n *ngFor=\"let selectorGroup of getPushButtonsGroups()\"\n [value]=\"selectorGroup\"\n >{{ selectorGroup.title }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <ng-container\n *ngFor=\"let bundle of currentPushButtonsGroup.computedSelectors\"\n >\n <h3>{{ bundle.title }}</h3>\n <mat-button-toggle-group\n formControlName=\"pushButtons\"\n class=\"mat-typography\"\n appearance=\"legacy\"\n vertical=\"{{ bundleIsVertical(bundle) }}\"\n multiple=\"true\"\n >\n <mat-button-toggle\n *ngFor=\"let ogcPushButton of bundle.selectors\"\n [matTooltip]=\"getToolTip(ogcPushButton)\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n matTooltipClass=\"material-tooltip\"\n [ngStyle]=\"getButtonColor(ogcPushButton)\"\n [checked]=\"ogcPushButton.enabled\"\n (change)=\"onSelectionChange(ogcPushButton, selector.selectorType)\"\n [value]=\"ogcPushButton\"\n >{{ ogcPushButton.title }}\n </mat-button-toggle>\n </mat-button-toggle-group>\n </ng-container>\n </div>\n\n <div class=\"checkboxGroups\" *ngIf=\"selector.selectorType === 'checkbox'\">\n <mat-divider></mat-divider>\n <div class=\"groupsSelector\" *ngIf=\"getCheckboxesGroups().length > 1\">\n <mat-form-field>\n <mat-select\n formControlName=\"checkboxesGroup\"\n [matTooltip]=\"'igo.geo.layer.legend.selectStyle' | translate\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [(value)]=\"currentCheckboxesGroup\"\n >\n <mat-option\n *ngFor=\"let selectorGroup of getCheckboxesGroups()\"\n [value]=\"selectorGroup\"\n >{{ selectorGroup.title }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <ng-container\n *ngFor=\"let bundle of currentCheckboxesGroup.computedSelectors\"\n >\n <h3>{{ bundle.title }}</h3>\n <div class=\"checkboxes mat-typography\">\n <mat-checkbox\n *ngFor=\"let ogcCheckbox of bundle.selectors\"\n [matTooltip]=\"getToolTip(ogcCheckbox)\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n matTooltipClass=\"material-tooltip\"\n [checked]=\"ogcCheckbox.enabled\"\n (change)=\"onSelectionChange(ogcCheckbox, selector.selectorType)\"\n [value]=\"ogcCheckbox\"\n >{{ ogcCheckbox.title }}\n </mat-checkbox>\n </div>\n <p\n *ngIf=\"\n isLessResults(bundle, 'checkbox') ||\n isMoreResults(bundle, 'checkbox')\n \"\n >\n <u\n *ngIf=\"isLessResults(bundle, 'checkbox')\"\n class=\"lessResults mat-typography\"\n (click)=\"displayLessResults('checkbox')\"\n >{{ 'igo.geo.filter.displayLessResults' | translate }}\n </u>\n <u\n *ngIf=\"isMoreResults(bundle, 'checkbox')\"\n class=\"moreResults mat-typography\"\n (click)=\"displayMoreResults('checkbox')\"\n >{{ 'igo.geo.filter.displayMoreResults' | translate }}\n </u>\n </p>\n </ng-container>\n </div>\n\n <div\n class=\"radioButtonGroups\"\n *ngIf=\"selector.selectorType === 'radioButton'\"\n >\n <mat-divider></mat-divider>\n <div class=\"groupsSelector\" *ngIf=\"getRadioButtonsGroups().length > 1\">\n <mat-form-field>\n <mat-select\n formControlName=\"radioButtonsGroup\"\n [matTooltip]=\"'igo.geo.layer.legend.selectStyle' | translate\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [(value)]=\"currentRadioButtonsGroup\"\n >\n <mat-option\n *ngFor=\"let selectorGroup of getRadioButtonsGroups()\"\n [value]=\"selectorGroup\"\n >{{ selectorGroup.title }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <ng-container\n *ngFor=\"let bundle of currentRadioButtonsGroup.computedSelectors\"\n >\n <h3>{{ bundle.title }}</h3>\n <mat-radio-group formControlName=\"radioButtons\" class=\"mat-typography\">\n <mat-radio-button\n *ngIf=\"bundle.unfiltered\"\n [matTooltip]=\"'igo.geo.filter.resetFilters' | translate\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n matTooltipClass=\"material-tooltip\"\n (change)=\"emptyRadioButtons()\"\n >{{ 'igo.geo.filter.resetFilters' | translate }}\n </mat-radio-button>\n <mat-radio-button\n *ngFor=\"let ogcRadioButton of bundle.selectors\"\n [matTooltip]=\"getToolTip(ogcRadioButton)\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n matTooltipClass=\"material-tooltip\"\n [checked]=\"ogcRadioButton.enabled\"\n (change)=\"onSelectionChange(ogcRadioButton, selector.selectorType)\"\n [value]=\"ogcRadioButton\"\n >{{ ogcRadioButton.title }}\n </mat-radio-button>\n <p\n *ngIf=\"\n isLessResults(bundle, 'radio') || isMoreResults(bundle, 'radio')\n \"\n >\n <u\n *ngIf=\"isLessResults(bundle, 'radio')\"\n class=\"lessResults mat-typography\"\n (click)=\"displayLessResults('radio')\"\n >{{ 'igo.geo.filter.displayLessResults' | translate }}\n </u>\n <u\n *ngIf=\"isMoreResults(bundle, 'radio')\"\n class=\"moreResults mat-typography\"\n (click)=\"displayMoreResults('radio')\"\n >{{ 'igo.geo.filter.displayMoreResults' | translate }}\n </u>\n </p>\n </mat-radio-group>\n </ng-container>\n </div>\n\n <div class=\"selectGroups\" *ngIf=\"selector.selectorType === 'select'\">\n <mat-divider></mat-divider>\n <div class=\"groupsSelector\" *ngIf=\"getSelectGroups().length > 1\">\n <mat-form-field>\n <mat-select\n formControlName=\"selectGroup\"\n [matTooltip]=\"'igo.geo.layer.legend.selectStyle' | translate\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [(value)]=\"currentSelectGroup\"\n >\n <mat-option\n *ngFor=\"let selectorGroup of getSelectGroups()\"\n [value]=\"selectorGroup\"\n >{{ selectorGroup.title }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <ng-container *ngFor=\"let bundle of currentSelectGroup.computedSelectors\">\n <h3>{{ bundle.title }}</h3>\n <div class=\"groupsSelector\">\n <mat-button\n *ngIf=\"bundle.unfiltered && !bundle.multiple\"\n mat-icon-button\n color=\"warn\"\n [matTooltip]=\"'igo.geo.filter.resetFilters' | translate\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n matTooltipClass=\"material-tooltip\"\n (click)=\"emptySelect()\"\n >\n <mat-icon svgIcon=\"filter-remove\"></mat-icon>\n </mat-button>\n <mat-form-field\n [style.width.%]=\"bundle.width ? bundle.width : undefined\"\n >\n <div *ngIf=\"bundle.multiple; else notMulti\">\n <mat-select\n #selection\n [multiple]=\"bundle.multiple\"\n [placeholder]=\"bundle.title\"\n formControlName=\"selectMulti\"\n >\n <div class=\"checkboxes mat-typography\">\n <mat-checkbox\n *ngIf=\"bundle.multiple\"\n [(ngModel)]=\"selectAllSelected\"\n [ngModelOptions]=\"{ standalone: true }\"\n (change)=\"toggleAllSelection()\"\n >Tous\n </mat-checkbox>\n </div>\n <mat-option\n *ngFor=\"let ogcSelect of bundle.selectors\"\n [matTooltip]=\"getToolTip(ogcSelect)\"\n tooltip-position=\"below\"\n matTooltipDelay=\"500\"\n matTooltipClass=\"material-tooltip\"\n (onSelectionChange)=\"\n selectOptionClick($event.source.value, bundle, $event)\n \"\n [value]=\"ogcSelect\"\n >{{ ogcSelect.title }}\n </mat-option>\n </mat-select>\n </div>\n <ng-template #notMulti>\n <mat-select [placeholder]=\"bundle.title\" formControlName=\"select\">\n <mat-option\n *ngFor=\"let ogcSelect of bundle.selectors\"\n [matTooltip]=\"getToolTip(ogcSelect)\"\n tooltip-position=\"below\"\n matTooltipDelay=\"500\"\n matTooltipClass=\"material-tooltip\"\n [value]=\"ogcSelect\"\n (onSelectionChange)=\"\n selectOptionClick($event.source.value, bundle)\n \"\n >{{ ogcSelect.title }}\n </mat-option>\n </mat-select>\n </ng-template>\n </mat-form-field>\n </div>\n </ng-container>\n </div>\n\n <div\n class=\"autocompleteGroups\"\n *ngIf=\"selector.selectorType === 'autocomplete'\"\n >\n <mat-divider></mat-divider>\n <div class=\"groupsSelector\" *ngIf=\"getAutocompleteGroups().length > 1\">\n <mat-form-field>\n <mat-select\n formControlName=\"autocompleteGroup\"\n [matTooltip]=\"'igo.geo.layer.legend.selectStyle' | translate\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [(value)]=\"currentAutocompleteGroup\"\n >\n <mat-option\n *ngFor=\"let autocompleteGroup of getAutocompleteGroups()\"\n [value]=\"autocompleteGroup\"\n >{{ autocompleteGroup.title }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <ng-container\n *ngFor=\"let bundle of currentAutocompleteGroup.computedSelectors\"\n >\n <h3>{{ bundle.title }}</h3>\n <div class=\"groupsSelector\">\n <mat-button\n *ngIf=\"bundle.unfiltered\"\n mat-icon-button\n color=\"warn\"\n [matTooltip]=\"'igo.geo.filter.resetFilters' | translate\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n matTooltipClass=\"material-tooltip\"\n (click)=\"emptyAutocomplete()\"\n >\n <mat-icon svgIcon=\"filter-remove\"></mat-icon>\n </mat-button>\n <mat-form-field\n *ngIf=\"filteredOgcAutocomplete[bundle.id]\"\n [style.width.%]=\"bundle.width ? bundle.width : undefined\"\n >\n <input\n matInput\n type=\"text\"\n formControlName=\"autocomplete\"\n #autocomplete\n class=\"autocomplete\"\n [matAutocomplete]=\"auto\"\n [placeholder]=\"bundle.title\"\n />\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n #autocomplete\n (optionSelected)=\"autocompleteOptionClick($event.option.value)\"\n [displayWith]=\"displayFn\"\n >\n <mat-option\n *ngFor=\"\n let ogcAutocomplete of filteredOgcAutocomplete[bundle.id]\n | async\n \"\n [value]=\"ogcAutocomplete\"\n >\n {{ ogcAutocomplete.value }}\n </mat-option>\n </mat-autocomplete>\n </mat-form-field>\n </div>\n </ng-container>\n </div>\n </div>\n</form>\n\n<div *ngIf=\"isTemporalOperator()\">\n <mat-divider></mat-divider>\n <h3 *ngIf=\"!currentFilter.title\">\n {{ 'igo.geo.filter.reportingDate' | translate }}\n </h3>\n <h3 *ngIf=\"currentFilter.title\">{{ currentFilter.title }}</h3>\n <igo-ogc-filter-time\n [(datasource)]=\"datasource\"\n [(currentFilter)]=\"currentFilter\"\n (changeProperty)=\"changeProperty($event.value, $event.pos)\"\n >\n </igo-ogc-filter-time>\n</div>\n", styles: [":host .mat-button-toggle-group{margin:5px;flex-wrap:wrap;box-shadow:none!important;width:95%}:host .checkboxes{flex-wrap:wrap;box-shadow:none}:host .groupsSelector{text-align:center}:host mat-button-toggle{display:inline-flex;border:1.5px solid black;border-radius:5px;margin:5px;white-space:normal;min-height:40px;height:auto;width:142px}:host mat-button-toggle ::ng-deep .mat-button-toggle-label-content{line-height:unset;font-size:small;display:block}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){:host mat-button-toggle{width:45%}}:host ::ng-deep .material-tooltip{white-space:pre-wrap}:host mat-checkbox,:host mat-radio-button{margin:7px;width:95%;display:inline-flex;font-size:larger}:host mat-checkbox ::ng-deep label,:host mat-radio-button ::ng-deep label{white-space:normal}:host mat-checkbox{vertical-align:middle}:host mat-button{padding-right:10px;cursor:pointer}:host h3{margin:7px;text-align:left}:host u{cursor:pointer;color:#00f;margin:5px}:host p{margin:unset}\n"] }]
|
|
739
|
+
args: [{ selector: 'igo-ogc-filter-selection', providers: [DOMService], template: "<form [formGroup]=\"form\">\r\n <div *ngFor=\"let selector of ogcFiltersSelectors\">\r\n <div\r\n class=\"pushButtonGroups\"\r\n *ngIf=\"selector.selectorType === 'pushButton'\"\r\n >\r\n <mat-divider></mat-divider>\r\n <div class=\"groupsSelector\" *ngIf=\"getPushButtonsGroups().length > 1\">\r\n <mat-form-field>\r\n <mat-select\r\n formControlName=\"pushButtonsGroup\"\r\n [matTooltip]=\"'igo.geo.layer.legend.selectStyle' | translate\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [(value)]=\"currentPushButtonsGroup\"\r\n >\r\n <mat-option\r\n *ngFor=\"let selectorGroup of getPushButtonsGroups()\"\r\n [value]=\"selectorGroup\"\r\n >{{ selectorGroup.title }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <ng-container\r\n *ngFor=\"let bundle of currentPushButtonsGroup.computedSelectors\"\r\n >\r\n <h3>{{ bundle.title }}</h3>\r\n <mat-button-toggle-group\r\n formControlName=\"pushButtons\"\r\n class=\"mat-typography\"\r\n appearance=\"legacy\"\r\n vertical=\"{{ bundleIsVertical(bundle) }}\"\r\n multiple=\"true\"\r\n >\r\n <mat-button-toggle\r\n *ngFor=\"let ogcPushButton of bundle.selectors\"\r\n [matTooltip]=\"getToolTip(ogcPushButton)\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n matTooltipClass=\"material-tooltip\"\r\n [ngStyle]=\"getButtonColor(ogcPushButton)\"\r\n [checked]=\"ogcPushButton.enabled\"\r\n (change)=\"onSelectionChange(ogcPushButton, selector.selectorType)\"\r\n [value]=\"ogcPushButton\"\r\n >{{ ogcPushButton.title }}\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"checkboxGroups\" *ngIf=\"selector.selectorType === 'checkbox'\">\r\n <mat-divider></mat-divider>\r\n <div class=\"groupsSelector\" *ngIf=\"getCheckboxesGroups().length > 1\">\r\n <mat-form-field>\r\n <mat-select\r\n formControlName=\"checkboxesGroup\"\r\n [matTooltip]=\"'igo.geo.layer.legend.selectStyle' | translate\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [(value)]=\"currentCheckboxesGroup\"\r\n >\r\n <mat-option\r\n *ngFor=\"let selectorGroup of getCheckboxesGroups()\"\r\n [value]=\"selectorGroup\"\r\n >{{ selectorGroup.title }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <ng-container\r\n *ngFor=\"let bundle of currentCheckboxesGroup.computedSelectors\"\r\n >\r\n <h3>{{ bundle.title }}</h3>\r\n <div class=\"checkboxes mat-typography\">\r\n <mat-checkbox\r\n *ngFor=\"let ogcCheckbox of bundle.selectors\"\r\n [matTooltip]=\"getToolTip(ogcCheckbox)\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n matTooltipClass=\"material-tooltip\"\r\n [checked]=\"ogcCheckbox.enabled\"\r\n (change)=\"onSelectionChange(ogcCheckbox, selector.selectorType)\"\r\n [value]=\"ogcCheckbox\"\r\n >{{ ogcCheckbox.title }}\r\n </mat-checkbox>\r\n </div>\r\n <p\r\n *ngIf=\"\r\n isLessResults(bundle, 'checkbox') ||\r\n isMoreResults(bundle, 'checkbox')\r\n \"\r\n >\r\n <u\r\n *ngIf=\"isLessResults(bundle, 'checkbox')\"\r\n class=\"lessResults mat-typography\"\r\n (click)=\"displayLessResults('checkbox')\"\r\n >{{ 'igo.geo.filter.displayLessResults' | translate }}\r\n </u>\r\n <u\r\n *ngIf=\"isMoreResults(bundle, 'checkbox')\"\r\n class=\"moreResults mat-typography\"\r\n (click)=\"displayMoreResults('checkbox')\"\r\n >{{ 'igo.geo.filter.displayMoreResults' | translate }}\r\n </u>\r\n </p>\r\n </ng-container>\r\n </div>\r\n\r\n <div\r\n class=\"radioButtonGroups\"\r\n *ngIf=\"selector.selectorType === 'radioButton'\"\r\n >\r\n <mat-divider></mat-divider>\r\n <div class=\"groupsSelector\" *ngIf=\"getRadioButtonsGroups().length > 1\">\r\n <mat-form-field>\r\n <mat-select\r\n formControlName=\"radioButtonsGroup\"\r\n [matTooltip]=\"'igo.geo.layer.legend.selectStyle' | translate\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [(value)]=\"currentRadioButtonsGroup\"\r\n >\r\n <mat-option\r\n *ngFor=\"let selectorGroup of getRadioButtonsGroups()\"\r\n [value]=\"selectorGroup\"\r\n >{{ selectorGroup.title }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <ng-container\r\n *ngFor=\"let bundle of currentRadioButtonsGroup.computedSelectors\"\r\n >\r\n <h3>{{ bundle.title }}</h3>\r\n <mat-radio-group formControlName=\"radioButtons\" class=\"mat-typography\">\r\n <mat-radio-button\r\n *ngIf=\"bundle.unfiltered\"\r\n [matTooltip]=\"'igo.geo.filter.resetFilters' | translate\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n matTooltipClass=\"material-tooltip\"\r\n (change)=\"emptyRadioButtons()\"\r\n >{{ 'igo.geo.filter.resetFilters' | translate }}\r\n </mat-radio-button>\r\n <mat-radio-button\r\n *ngFor=\"let ogcRadioButton of bundle.selectors\"\r\n [matTooltip]=\"getToolTip(ogcRadioButton)\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n matTooltipClass=\"material-tooltip\"\r\n [checked]=\"ogcRadioButton.enabled\"\r\n (change)=\"onSelectionChange(ogcRadioButton, selector.selectorType)\"\r\n [value]=\"ogcRadioButton\"\r\n >{{ ogcRadioButton.title }}\r\n </mat-radio-button>\r\n <p\r\n *ngIf=\"\r\n isLessResults(bundle, 'radio') || isMoreResults(bundle, 'radio')\r\n \"\r\n >\r\n <u\r\n *ngIf=\"isLessResults(bundle, 'radio')\"\r\n class=\"lessResults mat-typography\"\r\n (click)=\"displayLessResults('radio')\"\r\n >{{ 'igo.geo.filter.displayLessResults' | translate }}\r\n </u>\r\n <u\r\n *ngIf=\"isMoreResults(bundle, 'radio')\"\r\n class=\"moreResults mat-typography\"\r\n (click)=\"displayMoreResults('radio')\"\r\n >{{ 'igo.geo.filter.displayMoreResults' | translate }}\r\n </u>\r\n </p>\r\n </mat-radio-group>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"selectGroups\" *ngIf=\"selector.selectorType === 'select'\">\r\n <mat-divider></mat-divider>\r\n <div class=\"groupsSelector\" *ngIf=\"getSelectGroups().length > 1\">\r\n <mat-form-field>\r\n <mat-select\r\n formControlName=\"selectGroup\"\r\n [matTooltip]=\"'igo.geo.layer.legend.selectStyle' | translate\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [(value)]=\"currentSelectGroup\"\r\n >\r\n <mat-option\r\n *ngFor=\"let selectorGroup of getSelectGroups()\"\r\n [value]=\"selectorGroup\"\r\n >{{ selectorGroup.title }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <ng-container *ngFor=\"let bundle of currentSelectGroup.computedSelectors\">\r\n <h3>{{ bundle.title }}</h3>\r\n <div class=\"groupsSelector\">\r\n <mat-button\r\n *ngIf=\"bundle.unfiltered && !bundle.multiple\"\r\n mat-icon-button\r\n color=\"warn\"\r\n [matTooltip]=\"'igo.geo.filter.resetFilters' | translate\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n matTooltipClass=\"material-tooltip\"\r\n (click)=\"emptySelect()\"\r\n >\r\n <mat-icon svgIcon=\"filter-remove\"></mat-icon>\r\n </mat-button>\r\n <mat-form-field\r\n [style.width.%]=\"bundle.width ? bundle.width : undefined\"\r\n >\r\n <div *ngIf=\"bundle.multiple; else notMulti\">\r\n <mat-select\r\n #selection\r\n [multiple]=\"bundle.multiple\"\r\n [placeholder]=\"bundle.title\"\r\n formControlName=\"selectMulti\"\r\n >\r\n <div class=\"checkboxes mat-typography\">\r\n <mat-checkbox\r\n *ngIf=\"bundle.multiple\"\r\n [(ngModel)]=\"selectAllSelected\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n (change)=\"toggleAllSelection()\"\r\n >Tous\r\n </mat-checkbox>\r\n </div>\r\n <mat-option\r\n *ngFor=\"let ogcSelect of bundle.selectors\"\r\n [matTooltip]=\"getToolTip(ogcSelect)\"\r\n tooltip-position=\"below\"\r\n matTooltipDelay=\"500\"\r\n matTooltipClass=\"material-tooltip\"\r\n (onSelectionChange)=\"\r\n selectOptionClick($event.source.value, bundle, $event)\r\n \"\r\n [value]=\"ogcSelect\"\r\n >{{ ogcSelect.title }}\r\n </mat-option>\r\n </mat-select>\r\n </div>\r\n <ng-template #notMulti>\r\n <mat-select [placeholder]=\"bundle.title\" formControlName=\"select\">\r\n <mat-option\r\n *ngFor=\"let ogcSelect of bundle.selectors\"\r\n [matTooltip]=\"getToolTip(ogcSelect)\"\r\n tooltip-position=\"below\"\r\n matTooltipDelay=\"500\"\r\n matTooltipClass=\"material-tooltip\"\r\n [value]=\"ogcSelect\"\r\n (onSelectionChange)=\"\r\n selectOptionClick($event.source.value, bundle)\r\n \"\r\n >{{ ogcSelect.title }}\r\n </mat-option>\r\n </mat-select>\r\n </ng-template>\r\n </mat-form-field>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <div\r\n class=\"autocompleteGroups\"\r\n *ngIf=\"selector.selectorType === 'autocomplete'\"\r\n >\r\n <mat-divider></mat-divider>\r\n <div class=\"groupsSelector\" *ngIf=\"getAutocompleteGroups().length > 1\">\r\n <mat-form-field>\r\n <mat-select\r\n formControlName=\"autocompleteGroup\"\r\n [matTooltip]=\"'igo.geo.layer.legend.selectStyle' | translate\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [(value)]=\"currentAutocompleteGroup\"\r\n >\r\n <mat-option\r\n *ngFor=\"let autocompleteGroup of getAutocompleteGroups()\"\r\n [value]=\"autocompleteGroup\"\r\n >{{ autocompleteGroup.title }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <ng-container\r\n *ngFor=\"let bundle of currentAutocompleteGroup.computedSelectors\"\r\n >\r\n <h3>{{ bundle.title }}</h3>\r\n <div class=\"groupsSelector\">\r\n <mat-button\r\n *ngIf=\"bundle.unfiltered\"\r\n mat-icon-button\r\n color=\"warn\"\r\n [matTooltip]=\"'igo.geo.filter.resetFilters' | translate\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n matTooltipClass=\"material-tooltip\"\r\n (click)=\"emptyAutocomplete()\"\r\n >\r\n <mat-icon svgIcon=\"filter-remove\"></mat-icon>\r\n </mat-button>\r\n <mat-form-field\r\n *ngIf=\"filteredOgcAutocomplete[bundle.id]\"\r\n [style.width.%]=\"bundle.width ? bundle.width : undefined\"\r\n >\r\n <input\r\n matInput\r\n type=\"text\"\r\n formControlName=\"autocomplete\"\r\n #autocomplete\r\n class=\"autocomplete\"\r\n [matAutocomplete]=\"auto\"\r\n [placeholder]=\"bundle.title\"\r\n />\r\n <mat-autocomplete\r\n #auto=\"matAutocomplete\"\r\n #autocomplete\r\n (optionSelected)=\"autocompleteOptionClick($event.option.value)\"\r\n [displayWith]=\"displayFn\"\r\n >\r\n <mat-option\r\n *ngFor=\"\r\n let ogcAutocomplete of filteredOgcAutocomplete[bundle.id]\r\n | async\r\n \"\r\n [value]=\"ogcAutocomplete\"\r\n >\r\n {{ ogcAutocomplete.value }}\r\n </mat-option>\r\n </mat-autocomplete>\r\n </mat-form-field>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</form>\r\n\r\n<div *ngIf=\"isTemporalOperator()\">\r\n <mat-divider></mat-divider>\r\n <h3 *ngIf=\"!currentFilter.title\">\r\n {{ 'igo.geo.filter.reportingDate' | translate }}\r\n </h3>\r\n <h3 *ngIf=\"currentFilter.title\">{{ currentFilter.title }}</h3>\r\n <igo-ogc-filter-time\r\n [(datasource)]=\"datasource\"\r\n [(currentFilter)]=\"currentFilter\"\r\n (changeProperty)=\"changeProperty($event.value, $event.pos)\"\r\n >\r\n </igo-ogc-filter-time>\r\n</div>\r\n", styles: [":host .mat-button-toggle-group{margin:5px;flex-wrap:wrap;box-shadow:none!important;width:95%}:host .checkboxes{flex-wrap:wrap;box-shadow:none}:host .groupsSelector{text-align:center}:host mat-button-toggle{display:inline-flex;border:1.5px solid black;border-radius:5px;margin:5px;white-space:normal;min-height:40px;height:auto;width:142px}:host mat-button-toggle ::ng-deep .mat-button-toggle-label-content{line-height:unset;font-size:small;display:block}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){:host mat-button-toggle{width:45%}}:host ::ng-deep .material-tooltip{white-space:pre-wrap}:host mat-checkbox,:host mat-radio-button{margin:7px;width:95%;display:inline-flex;font-size:larger}:host mat-checkbox ::ng-deep label,:host mat-radio-button ::ng-deep label{white-space:normal}:host mat-checkbox{vertical-align:middle}:host mat-button{padding-right:10px;cursor:pointer}:host h3{margin:7px;text-align:left}:host u{cursor:pointer;color:#00f;margin:5px}:host p{margin:unset}\n"] }]
|
|
740
740
|
}], ctorParameters: function () { return [{ type: i1.OGCFilterService }, { type: i2.UntypedFormBuilder }, { type: i3.DOMService }, { type: i4.ConfigService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { sel: [{
|
|
741
741
|
type: ViewChild,
|
|
742
742
|
args: ['selection']
|
|
@@ -755,4 +755,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
755
755
|
}], currentFilter: [{
|
|
756
756
|
type: Input
|
|
757
757
|
}] } });
|
|
758
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2djLWZpbHRlci1zZWxlY3Rpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2VvL3NyYy9saWIvZmlsdGVyL29nYy1maWx0ZXItc2VsZWN0aW9uL29nYy1maWx0ZXItc2VsZWN0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ZpbHRlci9vZ2MtZmlsdGVyLXNlbGVjdGlvbi9vZ2MtZmlsdGVyLXNlbGVjdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxLQUFLLEVBRUwsU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxrQkFBa0IsRUFFbEIsVUFBVSxFQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXJELE9BQU8sRUFBYyxVQUFVLEVBQVksTUFBTSxjQUFjLENBQUM7QUFDaEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUUzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRCxPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR25ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQVFqRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUWhFLE1BQU0sT0FBTywyQkFBMkI7SUFxSzVCO0lB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Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBR0YsYUFBYTtzQkFEaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxuICBWaWV3Q2hpbGRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBVbnR5cGVkRm9ybUJ1aWxkZXIsXHJcbiAgVW50eXBlZEZvcm1Hcm91cCxcclxuICBWYWxpZGF0b3JzXHJcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNYXRPcHRpb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcclxuaW1wb3J0IHsgTWF0U2VsZWN0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcclxuXHJcbmltcG9ydCB7IERPTU9wdGlvbnMsIERPTVNlcnZpY2UsIERPTVZhbHVlIH0gZnJvbSAnQGlnbzIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29uZmlnU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgV01TRGF0YVNvdXJjZSB9IGZyb20gJy4uLy4uL2RhdGFzb3VyY2Uvc2hhcmVkL2RhdGFzb3VyY2VzL3dtcy1kYXRhc291cmNlJztcclxuaW1wb3J0IHsgT2djRmlsdGVyV3JpdGVyIH0gZnJvbSAnLi4vLi4vZmlsdGVyL3NoYXJlZC9vZ2MtZmlsdGVyJztcclxuaW1wb3J0IHtcclxuICBJZ29PZ2NGaWx0ZXJPYmplY3QsXHJcbiAgT2djRmlsdGVyYWJsZURhdGFTb3VyY2UsXHJcbiAgT2djUHVzaEJ1dHRvbixcclxuICBPZ2NTZWxlY3RvckJ1bmRsZSxcclxuICBTZWxlY3Rvckdyb3VwXHJcbn0gZnJvbSAnLi4vLi4vZmlsdGVyL3NoYXJlZC9vZ2MtZmlsdGVyLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IElnb01hcCB9IGZyb20gJy4uLy4uL21hcC9zaGFyZWQvbWFwJztcclxuaW1wb3J0IHsgT2djRmlsdGVyT3BlcmF0b3IgfSBmcm9tICcuLi9zaGFyZWQvb2djLWZpbHRlci5lbnVtJztcclxuaW1wb3J0IHsgT0dDRmlsdGVyU2VydmljZSB9IGZyb20gJy4uL3NoYXJlZC9vZ2MtZmlsdGVyLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpZ28tb2djLWZpbHRlci1zZWxlY3Rpb24nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9vZ2MtZmlsdGVyLXNlbGVjdGlvbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vb2djLWZpbHRlci1zZWxlY3Rpb24uY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtET01TZXJ2aWNlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgT2djRmlsdGVyU2VsZWN0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBAVmlld0NoaWxkKCdzZWxlY3Rpb24nKSBzZWw6IE1hdFNlbGVjdDtcclxuXHJcbiAgQElucHV0KCkgcmVmcmVzaEZpbHRlcnM6ICgpID0+IHZvaWQ7XHJcblxyXG4gIEBJbnB1dCgpIGRhdGFzb3VyY2U6IE9nY0ZpbHRlcmFibGVEYXRhU291cmNlO1xyXG5cclxuICBASW5wdXQoKSBtYXA6IElnb01hcDtcclxuXHJcbiAgQElucHV0KCkgY2hlY2tib3hlc0luZGV4ID0gNTtcclxuICBASW5wdXQoKSByYWRpb0J1dHRvbnNJbmRleCA9IDU7XHJcbiAgQElucHV0KCkgYmFzZUluZGV4ID0gNTtcclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgY3VycmVudEZpbHRlcigpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRGaWx0ZXI7XHJcbiAgfVxyXG4gIHNldCBjdXJyZW50RmlsdGVyKHZhbHVlKSB7XHJcbiAgICB0aGlzLl9jdXJyZW50RmlsdGVyID0gdmFsdWU7XHJcbiAgICBpZiAodGhpcy5fY3VycmVudEZpbHRlcj8uc2xpZGVyT3B0aW9ucykge1xyXG4gICAgICB0aGlzLl9jdXJyZW50RmlsdGVyLnNsaWRlck9wdGlvbnMuZW5hYmxlZCA9IGZhbHNlOyAvLyByZW1vdmUgc2xpZGVyIHRvZ2dsZSAoYW5pbWF0aW9uIHRlbXBvcmVsbGUpXHJcbiAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgX2N1cnJlbnRGaWx0ZXI6IGFueTtcclxuXHJcbiAgcHVibGljIG9nY0ZpbHRlck9wZXJhdG9yID0gT2djRmlsdGVyT3BlcmF0b3I7XHJcblxyXG4gIHB1YmxpYyBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xyXG4gIHByaXZhdGUgb2djRmlsdGVyV3JpdGVyOiBPZ2NGaWx0ZXJXcml0ZXI7XHJcbiAgcHVibGljIGNvbG9yID0gJ3ByaW1hcnknO1xyXG4gIHB1YmxpYyBzZWxlY3RBbGxTZWxlY3RlZCA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzZWxlY3RFbmFibGVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3QodW5kZWZpbmVkKTtcclxuICBwdWJsaWMgc2VsZWN0RW5hYmxlZHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdChbXSk7XHJcbiAgcHVibGljIGF1dG9jb21wbGV0ZUVuYWJsZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdCh1bmRlZmluZWQpO1xyXG4gIHB1YmxpYyBmaWx0ZXJlZE9nY0F1dG9jb21wbGV0ZSA9IHt9O1xyXG5cclxuICBwdWJsaWMgYXBwbHlGaWx0ZXJzVGltZW91dDtcclxuXHJcbiAgZ2V0IG9nY0ZpbHRlcnNTZWxlY3RvcnMoKSB7XHJcbiAgICBjb25zdCBvZ2NTZWxlY3RvciA9IFtdO1xyXG4gICAgaWYgKHRoaXMuZGF0YXNvdXJjZT8ub3B0aW9ucz8ub2djRmlsdGVycz8ucHVzaEJ1dHRvbnMpIHtcclxuICAgICAgb2djU2VsZWN0b3IucHVzaCh0aGlzLmRhdGFzb3VyY2U/Lm9wdGlvbnM/Lm9nY0ZpbHRlcnM/LnB1c2hCdXR0b25zKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRhdGFzb3VyY2U/Lm9wdGlvbnM/Lm9nY0ZpbHRlcnM/LmNoZWNrYm94ZXMpIHtcclxuICAgICAgb2djU2VsZWN0b3IucHVzaCh0aGlzLmRhdGFzb3VyY2U/Lm9wdGlvbnM/Lm9nY0ZpbHRlcnM/LmNoZWNrYm94ZXMpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZGF0YXNvdXJjZT8ub3B0aW9ucz8ub2djRmlsdGVycz8ucmFkaW9CdXR0b25zKSB7XHJcbiAgICAgIG9nY1NlbGVjdG9yLnB1c2godGhpcy5kYXRhc291cmNlPy5vcHRpb25zPy5vZ2NGaWx0ZXJzPy5yYWRpb0J1dHRvbnMpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZGF0YXNvdXJjZT8ub3B0aW9ucz8ub2djRmlsdGVycz8uc2VsZWN0KSB7XHJcbiAgICAgIG9nY1NlbGVjdG9yLnB1c2godGhpcy5kYXRhc291cmNlPy5vcHRpb25zPy5vZ2NGaWx0ZXJzPy5zZWxlY3QpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZGF0YXNvdXJjZT8ub3B0aW9ucz8ub2djRmlsdGVycz8uYXV0b2NvbXBsZXRlKSB7XHJcbiAgICAgIG9nY1NlbGVjdG9yLnB1c2godGhpcy5kYXRhc291cmNlPy5vcHRpb25zPy5vZ2NGaWx0ZXJzPy5hdXRvY29tcGxldGUpO1xyXG4gICAgfVxyXG4gICAgb2djU2VsZWN0b3Iuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICBpZiAoYS5vcmRlciA8IGIub3JkZXIpIHtcclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGEub3JkZXIgPiBiLm9yZGVyKSB7XHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBvZ2NTZWxlY3RvcjtcclxuICB9XHJcblxyXG4gIGdldCBjdXJyZW50UHVzaEJ1dHRvbnNHcm91cCgpIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm0uZ2V0KCdwdXNoQnV0dG9uc0dyb3VwJykudmFsdWU7XHJcbiAgfVxyXG4gIHNldCBjdXJyZW50UHVzaEJ1dHRvbnNHcm91cCh2YWx1ZSkge1xyXG4gICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBwdXNoQnV0dG9uc0dyb3VwOiB2YWx1ZSB9KTtcclxuICB9XHJcblxyXG4gIGdldCBjdXJyZW50Q2hlY2tib3hlc0dyb3VwKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoJ2NoZWNrYm94ZXNHcm91cCcpLnZhbHVlO1xyXG4gIH1cclxuICBzZXQgY3VycmVudENoZWNrYm94ZXNHcm91cCh2YWx1ZSkge1xyXG4gICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBjaGVja2JveGVzR3JvdXA6IHZhbHVlIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGN1cnJlbnRSYWRpb0J1dHRvbnNHcm91cCgpIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm0uZ2V0KCdyYWRpb0J1dHRvbnNHcm91cCcpLnZhbHVlO1xyXG4gIH1cclxuICBzZXQgY3VycmVudFJhZGlvQnV0dG9uc0dyb3VwKHZhbHVlKSB7XHJcbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IHJhZGlvQnV0dG9uc0dyb3VwOiB2YWx1ZSB9KTtcclxuICB9XHJcblxyXG4gIGdldCBjdXJyZW50U2VsZWN0R3JvdXAoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtLmdldCgnc2VsZWN0R3JvdXAnKS52YWx1ZTtcclxuICB9XHJcbiAgc2V0IGN1cnJlbnRTZWxlY3RHcm91cCh2YWx1ZSkge1xyXG4gICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBzZWxlY3RHcm91cDogdmFsdWUgfSk7XHJcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIGdldCBjdXJyZW50QXV0b2NvbXBsZXRlR3JvdXAoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtLmdldCgnYXV0b2NvbXBsZXRlR3JvdXAnKS52YWx1ZTtcclxuICB9XHJcbiAgc2V0IGN1cnJlbnRBdXRvY29tcGxldGVHcm91cCh2YWx1ZSkge1xyXG4gICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBhdXRvY29tcGxldGVHcm91cDogdmFsdWUgfSk7XHJcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIGdldCBzZWxlY3RFbmFibGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0RW5hYmxlZCQudmFsdWU7XHJcbiAgfVxyXG5cclxuICBzZXQgc2VsZWN0RW5hYmxlZCh2YWx1ZSkge1xyXG4gICAgdGhpcy5zZWxlY3RFbmFibGVkJC5uZXh0KHZhbHVlKTtcclxuICAgIGNsZWFyVGltZW91dCh0aGlzLmFwcGx5RmlsdGVyc1RpbWVvdXQpO1xyXG4gICAgdGhpcy5jdXJyZW50U2VsZWN0R3JvdXAuY29tcHV0ZWRTZWxlY3RvcnMuZm9yRWFjaCgoY29tcFNlbGVjdCkgPT4ge1xyXG4gICAgICBjb21wU2VsZWN0LnNlbGVjdG9ycz8uZm9yRWFjaCgoc2VsZWN0b3IpID0+IHtcclxuICAgICAgICB2YWx1ZSA9PT0gc2VsZWN0b3JcclxuICAgICAgICAgID8gKHNlbGVjdG9yLmVuYWJsZWQgPSB0cnVlKVxyXG4gICAgICAgICAgOiAoc2VsZWN0b3IuZW5hYmxlZCA9IGZhbHNlKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFwcGx5RmlsdGVyc1RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcclxuICAgIH0sIDc1MCk7XHJcbiAgfVxyXG5cclxuICBnZXQgc2VsZWN0RW5hYmxlZHMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RFbmFibGVkcyQudmFsdWU7XHJcbiAgfVxyXG5cclxuICBzZXQgc2VsZWN0RW5hYmxlZHModmFsdWUpIHtcclxuICAgIHRoaXMuc2VsZWN0RW5hYmxlZHMkLm5leHQodmFsdWUpO1xyXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuYXBwbHlGaWx0ZXJzVGltZW91dCk7XHJcbiAgICB0aGlzLmN1cnJlbnRTZWxlY3RHcm91cC5jb21wdXRlZFNlbGVjdG9ycy5mb3JFYWNoKChjb21wU2VsZWN0KSA9PiB7XHJcbiAgICAgIGNvbXBTZWxlY3Quc2VsZWN0b3JzPy5mb3JFYWNoKChzZWxlY3RvcikgPT4ge1xyXG4gICAgICAgIHZhbHVlLmluY2x1ZGVzKHNlbGVjdG9yKVxyXG4gICAgICAgICAgPyAoc2VsZWN0b3IuZW5hYmxlZCA9IHRydWUpXHJcbiAgICAgICAgICA6IChzZWxlY3Rvci5lbmFibGVkID0gZmFsc2UpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuYXBwbHlGaWx0ZXJzVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xyXG4gICAgfSwgNzUwKTtcclxuICB9XHJcblxyXG4gIGdldCBhdXRvY29tcGxldGVFbmFibGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuYXV0b2NvbXBsZXRlRW5hYmxlZCQudmFsdWU7XHJcbiAgfVxyXG5cclxuICBzZXQgYXV0b2NvbXBsZXRlRW5hYmxlZCh2YWx1ZSkge1xyXG4gICAgdGhpcy5hdXRvY29tcGxldGVFbmFibGVkJC5uZXh0KHZhbHVlKTtcclxuICAgIGNsZWFyVGltZW91dCh0aGlzLmFwcGx5RmlsdGVyc1RpbWVvdXQpO1xyXG4gICAgdGhpcy5jdXJyZW50QXV0b2NvbXBsZXRlR3JvdXAuY29tcHV0ZWRTZWxlY3RvcnMuZm9yRWFjaCgoY29tcFNlbGVjdCkgPT4ge1xyXG4gICAgICBjb21wU2VsZWN0LnNlbGVjdG9ycz8uZm9yRWFjaCgoc2VsZWN0b3IpID0+IHtcclxuICAgICAgICB2YWx1ZSA9PT0gc2VsZWN0b3IudGl0bGVcclxuICAgICAgICAgID8gKHNlbGVjdG9yLmVuYWJsZWQgPSB0cnVlKVxyXG4gICAgICAgICAgOiAoc2VsZWN0b3IuZW5hYmxlZCA9IGZhbHNlKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFwcGx5RmlsdGVyc1RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcclxuICAgIH0sIDc1MCk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgb2djRmlsdGVyU2VydmljZTogT0dDRmlsdGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgZG9tU2VydmljZTogRE9NU2VydmljZSxcclxuICAgIHByaXZhdGUgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcclxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmXHJcbiAgKSB7XHJcbiAgICB0aGlzLm9nY0ZpbHRlcldyaXRlciA9IG5ldyBPZ2NGaWx0ZXJXcml0ZXIoKTtcclxuICAgIHRoaXMuYnVpbGRGb3JtKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1aWxkRm9ybSgpIHtcclxuICAgIHRoaXMuZm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICBwdXNoQnV0dG9uczogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICByYWRpb0J1dHRvbnM6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgcHVzaEJ1dHRvbnNHcm91cDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICBjaGVja2JveGVzR3JvdXA6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgcmFkaW9CdXR0b25zR3JvdXA6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgc2VsZWN0R3JvdXA6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgc2VsZWN0OiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgIHNlbGVjdE11bHRpOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgIGF1dG9jb21wbGV0ZUdyb3VwOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgIGF1dG9jb21wbGV0ZTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldFB1c2hCdXR0b25zR3JvdXBzKCk6IFNlbGVjdG9yR3JvdXBbXSB7XHJcbiAgICBpZiAodGhpcy5kYXRhc291cmNlPy5vcHRpb25zPy5vZ2NGaWx0ZXJzPy5wdXNoQnV0dG9ucykge1xyXG4gICAgICByZXR1cm4gdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5wdXNoQnV0dG9ucy5ncm91cHM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRDaGVja2JveGVzR3JvdXBzKCk6IFNlbGVjdG9yR3JvdXBbXSB7XHJcbiAgICBpZiAodGhpcy5kYXRhc291cmNlPy5vcHRpb25zPy5vZ2NGaWx0ZXJzPy5jaGVja2JveGVzKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLmNoZWNrYm94ZXMuZ3JvdXBzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UmFkaW9CdXR0b25zR3JvdXBzKCk6IFNlbGVjdG9yR3JvdXBbXSB7XHJcbiAgICBpZiAodGhpcy5kYXRhc291cmNlPy5vcHRpb25zPy5vZ2NGaWx0ZXJzPy5yYWRpb0J1dHRvbnMpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMucmFkaW9CdXR0b25zLmdyb3VwcztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFNlbGVjdEdyb3VwcygpOiBTZWxlY3Rvckdyb3VwW10ge1xyXG4gICAgaWYgKHRoaXMuZGF0YXNvdXJjZT8ub3B0aW9ucz8ub2djRmlsdGVycz8uc2VsZWN0KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLnNlbGVjdC5ncm91cHM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRBdXRvY29tcGxldGVHcm91cHMoKTogU2VsZWN0b3JHcm91cFtdIHtcclxuICAgIGlmICh0aGlzLmRhdGFzb3VyY2U/Lm9wdGlvbnM/Lm9nY0ZpbHRlcnM/LmF1dG9jb21wbGV0ZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5hdXRvY29tcGxldGUuZ3JvdXBzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgbmdPbkluaXQoKSB7XHJcbiAgICBpZiAodGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycykge1xyXG4gICAgICBpZiAodGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5wdXNoQnV0dG9ucykge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFB1c2hCdXR0b25zR3JvdXAgPVxyXG4gICAgICAgICAgdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5wdXNoQnV0dG9ucy5ncm91cHMuZmluZChcclxuICAgICAgICAgICAgKGdyb3VwKSA9PiBncm91cC5lbmFibGVkXHJcbiAgICAgICAgICApIHx8IHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMucHVzaEJ1dHRvbnMuZ3JvdXBzWzBdO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLmNoZWNrYm94ZXMpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRDaGVja2JveGVzR3JvdXAgPVxyXG4gICAgICAgICAgdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5jaGVja2JveGVzLmdyb3Vwcy5maW5kKFxyXG4gICAgICAgICAgICAoZ3JvdXApID0+IGdyb3VwLmVuYWJsZWRcclxuICAgICAgICAgICkgfHwgdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5jaGVja2JveGVzLmdyb3Vwc1swXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5yYWRpb0J1dHRvbnMpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRSYWRpb0J1dHRvbnNHcm91cCA9XHJcbiAgICAgICAgICB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLnJhZGlvQnV0dG9ucy5ncm91cHMuZmluZChcclxuICAgICAgICAgICAgKGdyb3VwKSA9PiBncm91cC5lbmFibGVkXHJcbiAgICAgICAgICApIHx8IHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMucmFkaW9CdXR0b25zLmdyb3Vwc1swXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5zZWxlY3QpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRTZWxlY3RHcm91cCA9XHJcbiAgICAgICAgICB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLnNlbGVjdC5ncm91cHMuZmluZChcclxuICAgICAgICAgICAgKGdyb3VwKSA9PiBncm91cC5lbmFibGVkXHJcbiAgICAgICAgICApIHx8IHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuc2VsZWN0Lmdyb3Vwc1swXTtcclxuICAgICAgICB0aGlzLmdldFNlbGVjdEVuYWJsZWQoKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmdldFNlbGVjdERvbVZhbHVlcygpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLmF1dG9jb21wbGV0ZSkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudEF1dG9jb21wbGV0ZUdyb3VwID1cclxuICAgICAgICAgIHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuYXV0b2NvbXBsZXRlLmdyb3Vwcy5maW5kKFxyXG4gICAgICAgICAgICAoZ3JvdXApID0+IGdyb3VwLmVuYWJsZWRcclxuICAgICAgICAgICkgfHwgdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5hdXRvY29tcGxldGUuZ3JvdXBzWzBdO1xyXG4gICAgICAgIHRoaXMuZ2V0QXV0b2NvbXBsZXRlRW5hYmxlZCgpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuZ2V0QXV0b2NvbXBsZXRlRG9tVmFsdWVzKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZvcm1cclxuICAgICAgLmdldCgncHVzaEJ1dHRvbnNHcm91cCcpXHJcbiAgICAgIC52YWx1ZUNoYW5nZXMucGlwZShkZWJvdW5jZVRpbWUoNzUwKSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5vblB1c2hCdXR0b25zQ2hhbmdlR3JvdXAoKTtcclxuICAgICAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xyXG4gICAgICB9KTtcclxuICAgIHRoaXMuZm9ybVxyXG4gICAgICAuZ2V0KCdjaGVja2JveGVzR3JvdXAnKVxyXG4gICAgICAudmFsdWVDaGFuZ2VzLnBpcGUoZGVib3VuY2VUaW1lKDc1MCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMub25DaGVja2JveGVzQ2hhbmdlR3JvdXAoKTtcclxuICAgICAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xyXG4gICAgICB9KTtcclxuICAgIHRoaXMuZm9ybVxyXG4gICAgICAuZ2V0KCdyYWRpb0J1dHRvbnNHcm91cCcpXHJcbiAgICAgIC52YWx1ZUNoYW5nZXMucGlwZShkZWJvdW5jZVRpbWUoNzUwKSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5vblJhZGlvQnV0dG9uc0NoYW5nZUdyb3VwKCk7XHJcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcclxuICAgICAgfSk7XHJcbiAgICB0aGlzLmZvcm1cclxuICAgICAgLmdldCgnc2VsZWN0R3JvdXAnKVxyXG4gICAgICAudmFsdWVDaGFuZ2VzLnBpcGUoZGVib3VuY2VUaW1lKDc1MCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMub25TZWxlY3RDaGFuZ2VHcm91cCgpO1xyXG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5mb3JtXHJcbiAgICAgIC5nZXQoJ2F1dG9jb21wbGV0ZUdyb3VwJylcclxuICAgICAgLnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZSg3NTApKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLm9uQXV0b2NvbXBsZXRlQ2hhbmdlR3JvdXAoKTtcclxuICAgICAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xyXG4gICAgICB9KTtcclxuICAgIHRoaXMuZm9ybVxyXG4gICAgICAuZ2V0KCdwdXNoQnV0dG9ucycpXHJcbiAgICAgIC52YWx1ZUNoYW5nZXMucGlwZShkZWJvdW5jZVRpbWUoNzUwKSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcclxuICAgICAgfSk7XHJcbiAgICB0aGlzLmZvcm1cclxuICAgICAgLmdldCgncmFkaW9CdXR0b25zJylcclxuICAgICAgLnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZSg3NTApKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0U2VsZWN0RW5hYmxlZCgpIHtcclxuICAgIGNvbnN0IGVuYWJsZWRzID0gW107XHJcbiAgICBsZXQgZW5hYmxlZDtcclxuICAgIHRoaXMuY3VycmVudFNlbGVjdEdyb3VwLmNvbXB1dGVkU2VsZWN0b3JzLmZvckVhY2goKGNvbXBTZWxlY3QpID0+IHtcclxuICAgICAgaWYgKGNvbXBTZWxlY3QubXVsdGlwbGUpIHtcclxuICAgICAgICBjb21wU2VsZWN0LnNlbGVjdG9ycz8uZm9yRWFjaCgoc2VsZWN0b3IpID0+IHtcclxuICAgICAgICAgIGlmIChzZWxlY3Rvci5lbmFibGVkKSB7XHJcbiAgICAgICAgICAgIGVuYWJsZWRzLnB1c2goc2VsZWN0b3IpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0RW5hYmxlZHMgPSBlbmFibGVkcztcclxuICAgICAgICB0aGlzLmZvcm0uY29udHJvbHNbJ3NlbGVjdE11bHRpJ10uc2V0VmFsdWUoZW5hYmxlZHMpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbXBTZWxlY3Quc2VsZWN0b3JzPy5mb3JFYWNoKChzZWxlY3RvcikgPT4ge1xyXG4gICAgICAgICAgaWYgKHNlbGVjdG9yLmVuYWJsZWQpIHtcclxuICAgICAgICAgICAgZW5hYmxlZCA9IHNlbGVjdG9yO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuZm9ybS5jb250cm9sc1snc2VsZWN0J10ucmVzZXQoZW5hYmxlZCk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RFbmFibGVkJC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICBpZiAodGhpcy5mb3JtLmNvbnRyb2xzWydzZWxlY3QnXS52YWx1ZSAhPT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzWydzZWxlY3QnXS5zZXRWYWx1ZSh2YWx1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RFbmFibGVkID0gZW5hYmxlZDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEF1dG9jb21wbGV0ZUVuYWJsZWQoKSB7XHJcbiAgICBsZXQgZW5hYmxlZDtcclxuICAgIHRoaXMuY3VycmVudEF1dG9jb21wbGV0ZUdyb3VwLmNvbXB1dGVkU2VsZWN0b3JzLmZvckVhY2goKGNvbXBTZWxlY3QpID0+IHtcclxuICAgICAgY29tcFNlbGVjdC5zZWxlY3RvcnM/LmZvckVhY2goKHNlbGVjdG9yKSA9PiB7XHJcbiAgICAgICAgaWYgKHNlbGVjdG9yLmVuYWJsZWQpIHtcclxuICAgICAgICAgIGNvbnN0IGRvbSA9IHtcclxuICAgICAgICAgICAgaWQ6IHNlbGVjdG9yLmZpbHRlcnMuZXhwcmVzc2lvbixcclxuICAgICAgICAgICAgdmFsdWU6IHNlbGVjdG9yLnRpdGxlXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgZW5hYmxlZCA9IHNlbGVjdG9yLnRpdGxlO1xyXG4gICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzWydhdXRvY29tcGxldGUnXS5zZXRWYWx1ZShkb20pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlRW5hYmxlZCA9IGVuYWJsZWQ7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldFRvb2xUaXAoc2VsZWN0b3IpOiBzdHJpbmcge1xyXG4gICAgbGV0IHRvb2xUaXA7XHJcbiAgICBpZiAoc2VsZWN0b3IudG9vbHRpcCkge1xyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShzZWxlY3Rvci50b29sdGlwKSkge1xyXG4gICAgICAgIHRvb2xUaXAgPSBzZWxlY3Rvci50b29sdGlwLmpvaW4oJ1xcbicpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRvb2xUaXAgPSBzZWxlY3Rvci50b29sdGlwO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdG9vbFRpcCB8fCAnJztcclxuICB9XHJcblxyXG4gIGFzeW5jIGdldFNlbGVjdERvbVZhbHVlcygpIHtcclxuICAgIGZvciAoY29uc3QgYnVuZGxlIG9mIHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuc2VsZWN0LmJ1bmRsZXMpIHtcclxuICAgICAgaWYgKGJ1bmRsZS5kb21TZWxlY3RvcnMpIHtcclxuICAgICAgICBsZXQgZG9tVmFsdWVzO1xyXG4gICAgICAgIGZvciAoY29uc3QgZG9tU2VsZWN0b3Igb2YgYnVuZGxlLmRvbVNlbGVjdG9ycykge1xyXG4gICAgICAgICAgbGV0IGZpbHRlckRPTTtcclxuICAgICAgICAgIGZvciAoY29uc3QgZG9tT3B0aW9ucyBvZiB0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnPERPTU9wdGlvbnNbXT4oXHJcbiAgICAgICAgICAgICdkb20nXHJcbiAgICAgICAgICApKSB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICBkb21TZWxlY3Rvci5pZCA9PT0gZG9tT3B0aW9ucy5pZCB8fFxyXG4gICAgICAgICAgICAgIGRvbVNlbGVjdG9yLm5hbWUgPT09IGRvbU9wdGlvbnMubmFtZVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICBmaWx0ZXJET00gPSB7XHJcbiAgICAgICAgICAgICAgICBpZDogZG9tT3B0aW9ucy5pZCxcclxuICAgICAgICAgICAgICAgIHVybDogZG9tT3B0aW9ucy51cmwsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBkb21PcHRpb25zLm5hbWUsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZXM6IGRvbU9wdGlvbnMudmFsdWVzXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZmlsdGVyRE9NLnVybFxyXG4gICAgICAgICAgICA/IChkb21WYWx1ZXMgPSAoYXdhaXQgdGhpcy5kb21TZXJ2aWNlLmdldERvbShcclxuICAgICAgICAgICAgICAgIGZpbHRlckRPTVxyXG4gICAgICAgICAgICAgICkpIGFzIERPTVZhbHVlW10pXHJcbiAgICAgICAgICAgIDogKGRvbVZhbHVlcyA9IGZpbHRlckRPTS52YWx1ZXMpO1xyXG5cclxuICAgICAgICAgIGlmIChkb21WYWx1ZXMpIHtcclxuICAgICAgICAgICAgbGV0IG5ld0J1bmRsZSA9IGJ1bmRsZTtcclxuICAgICAgICAgICAgbmV3QnVuZGxlLnNlbGVjdG9ycyA9IFtdO1xyXG4gICAgICAgICAgICBsZXQgc2VsZWN0b3I7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgZG9tVmFsdWVzKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGJ1bmRsZS5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGVuYWJsZWQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEVuYWJsZWRzPy5maW5kKChzZWwpID0+IHNlbC50aXRsZSA9PT0gdmFsdWUudmFsdWUpXHJcbiAgICAgICAgICAgICAgICAgID8gKGVuYWJsZWQgPSB0cnVlKVxyXG4gICAgICAgICAgICAgICAgICA6IChlbmFibGVkID0gZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0b3IgPSB7XHJcbiAgICAgICAgICAgICAgICAgIHRpdGxlOiB2YWx1ZS52YWx1ZSxcclxuICAgICAgICAgICAgICAgICAgZW5hYmxlZCxcclxuICAgICAgICAgICAgICAgICAgZmlsdGVyczoge1xyXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBkb21TZWxlY3Rvci5vcGVyYXRvcixcclxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWU6IGRvbVNlbGVjdG9yLnByb3BlcnR5TmFtZSxcclxuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiB2YWx1ZS5pZFxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RvciA9IHtcclxuICAgICAgICAgICAgICAgICAgdGl0bGU6IHZhbHVlLnZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICBlbmFibGVkOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0RW5hYmxlZD8udGl0bGUgPT09IHZhbHVlLnZhbHVlID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICBmaWx0ZXJzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IGRvbVNlbGVjdG9yLm9wZXJhdG9yLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZTogZG9tU2VsZWN0b3IucHJvcGVydHlOYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IHZhbHVlLmlkXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIG5ld0J1bmRsZS5zZWxlY3RvcnMucHVzaChzZWxlY3Rvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5nZXRTZWxlY3RHcm91cHMoKVxyXG4gICAgICAgICAgICAgIC5maW5kKChncm91cCkgPT4gZ3JvdXAuaWRzLmluY2x1ZGVzKG5ld0J1bmRsZS5pZCkpXHJcbiAgICAgICAgICAgICAgLmNvbXB1dGVkU2VsZWN0b3JzLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAoY29tcCkgPT4gY29tcC50aXRsZSA9PT0gbmV3QnVuZGxlLnRpdGxlXHJcbiAgICAgICAgICAgICAgKS5zZWxlY3RvcnMgPSBuZXdCdW5kbGUuc2VsZWN0b3JzO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmdldFNlbGVjdEVuYWJsZWQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0QXV0b2NvbXBsZXRlRG9tVmFsdWVzKCkge1xyXG4gICAgZm9yIChjb25zdCBidW5kbGUgb2YgdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5hdXRvY29tcGxldGVcclxuICAgICAgLmJ1bmRsZXMpIHtcclxuICAgICAgaWYgKGJ1bmRsZS5kb21TZWxlY3RvcnMpIHtcclxuICAgICAgICBsZXQgZG9tVmFsdWVzO1xyXG4gICAgICAgIGZvciAoY29uc3QgZG9tU2VsZWN0b3Igb2YgYnVuZGxlLmRvbVNlbGVjdG9ycykge1xyXG4gICAgICAgICAgbGV0IGZpbHRlckRPTTtcclxuICAgICAgICAgIGZvciAoY29uc3QgZG9tT3B0aW9ucyBvZiB0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnPERPTU9wdGlvbnNbXT4oXHJcbiAgICAgICAgICAgICdkb20nXHJcbiAgICAgICAgICApKSB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICBkb21TZWxlY3Rvci5pZCA9PT0gZG9tT3B0aW9ucy5pZCB8fFxyXG4gICAgICAgICAgICAgIGRvbVNlbGVjdG9yLm5hbWUgPT09IGRvbU9wdGlvbnMubmFtZVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICBmaWx0ZXJET00gPSB7XHJcbiAgICAgICAgICAgICAgICBpZDogZG9tT3B0aW9ucy5pZCxcclxuICAgICAgICAgICAgICAgIHVybDogZG9tT3B0aW9ucy51cmwsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBkb21PcHRpb25zLm5hbWUsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZXM6IGRvbU9wdGlvbnMudmFsdWVzXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZmlsdGVyRE9NLnVybFxyXG4gICAgICAgICAgICA/IChkb21WYWx1ZXMgPSAoYXdhaXQgdGhpcy5kb21TZXJ2aWNlLmdldERvbShcclxuICAgICAgICAgICAgICAgIGZpbHRlckRPTVxyXG4gICAgICAgICAgICAgICkpIGFzIERPTVZhbHVlW10pXHJcbiAgICAgICAgICAgIDogKGRvbVZhbHVlcyA9IGZpbHRlckRPTS52YWx1ZXMpO1xyXG5cclxuICAgICAgICAgIGlmIChkb21WYWx1ZXMpIHtcclxuICAgICAgICAgICAgbGV0IG5ld0J1bmRsZSA9IGJ1bmRsZTtcclxuICAgICAgICAgICAgbmV3QnVuZGxlLnNlbGVjdG9ycyA9IFtdO1xyXG4gICAgICAgICAgICBsZXQgc2VsZWN0b3I7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgZG9tVmFsdWVzKSB7XHJcbiAgICAgICAgICAgICAgc2VsZWN0b3IgPSB7XHJcbiAgICAgICAgICAgICAgICB0aXRsZTogdmFsdWUudmFsdWUsXHJcbiAgICAgICAgICAgICAgICBlbmFibGVkOlxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUVuYWJsZWQgJiZcclxuICAgICAgICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVFbmFibGVkID09PSB2YWx1ZS52YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgIDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJzOiB7XHJcbiAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBkb21TZWxlY3Rvci5vcGVyYXRvcixcclxuICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lOiBkb21TZWxlY3Rvci5wcm9wZXJ0eU5hbWUsXHJcbiAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IHZhbHVlLmlkXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICBuZXdCdW5kbGUuc2VsZWN0b3JzLnB1c2goc2VsZWN0b3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0QXV0b2NvbXBsZXRlR3JvdXBzKClcclxuICAgICAgICAgICAgICAuZmluZCgoZ3JvdXApID0+IGdyb3VwLmlkcy5pbmNsdWRlcyhuZXdCdW5kbGUuaWQpKVxyXG4gICAgICAgICAgICAgIC5jb21wdXRlZFNlbGVjdG9ycy5maW5kKFxyXG4gICAgICAgICAgICAgICAgKGNvbXApID0+IGNvbXAudGl0bGUgPT09IG5ld0J1bmRsZS50aXRsZVxyXG4gICAgICAgICAgICAgICkuc2VsZWN0b3JzID0gbmV3QnVuZGxlLnNlbGVjdG9ycztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZmlsdGVyZWRPZ2NBdXRvY29tcGxldGVbYnVuZGxlLmlkXSA9IG5ldyBPYnNlcnZhYmxlPGFueVtdPigpO1xyXG4gICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyZWRPZ2NBdXRvY29tcGxldGVbYnVuZGxlLmlkXSA9IHRoaXMuZm9ybS5jb250cm9sc1tcclxuICAgICAgICAgICdhdXRvY29tcGxldGUnXHJcbiAgICAgICAgXS52YWx1ZUNoYW5nZXMucGlwZShcclxuICAgICAgICAgIG1hcCgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBkb21WYWx1ZXM/LmZpbHRlcigob3B0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJOb3JtYWxpemVkID0gdmFsdWVcclxuICAgICAgICAgICAgICAgICAgPyB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgICAgICAgICAgIC5ub3JtYWxpemUoJ05GRCcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpXHJcbiAgICAgICAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmZWF0dXJlTmFtZU5vcm1hbGl6ZWQgPSBvcHRpb24udmFsdWVcclxuICAgICAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgICAgICAgLm5vcm1hbGl6ZSgnTkZEJylcclxuICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmZWF0dXJlTmFtZU5vcm1hbGl6ZWQuaW5jbHVkZXMoZmlsdGVyTm9ybWFsaXplZCk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gZ2V0QnV0dG9uU3R5bGUocGI6IE9nY1B1c2hCdXR0b24pOiB7fSB7XHJcblxyXG4gIC8vICAgbGV0IHN0eWxlcztcclxuICAvLyAgIGlmIChwYi5jb2xvcikge1xyXG4gIC8vICAgICBzdHlsZXMgPSB7XHJcbiAgLy8gICAgICAgJ2JhY2tncm91bmQtY29sb3InOiBwYi5lbmFibGVkID8gYHJnYmEoJHtwYi5jb2xvcn0pYCA6IGByZ2JhKDI1NSwyNTUsMjU1LDApYFxyXG4gIC8vICAgICB9O1xyXG4gIC8vICAgfSBlbHNlIHtcclxuICAvLyAgICAgc3R5bGVzID0ge1xyXG4gIC8vICAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogcGIuZW5hYmxlZCA/ICdhY2NlbnQnOiBgcmdiYSgyNTUsMjU1LDI1NSwwKWAsXHJcbiAgLy8gICAgICAgJ2NvbG9yJzogcGIuZW5hYmxlZCA/IGByZ2JhKDAsMCwwLDAuOSlgIDogYHJnYmEoMzMsMzMsMzMsMC4zOClgXHJcbiAgLy8gICAgIH1cclxuICAvLyAgIH1cclxuICAvLyAgIHJldHVybiBzdHlsZXM7XHJcbiAgLy8gfVxyXG5cclxuICBnZXRCdXR0b25Db2xvcihwdXNoQnV0dG9uOiBPZ2NQdXNoQnV0dG9uKToge30ge1xyXG4gICAgbGV0IHN0eWxlcztcclxuICAgIGlmIChwdXNoQnV0dG9uLmNvbG9yICYmIHB1c2hCdXR0b24uZW5hYmxlZCkge1xyXG4gICAgICBzdHlsZXMgPSB7XHJcbiAgICAgICAgJ2JhY2tncm91bmQtY29sb3InOiBgcmdiYSgke3B1c2hCdXR0b24uY29sb3J9KWBcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIHJldHVybiBzdHlsZXM7XHJcbiAgfVxyXG5cclxuICBidW5kbGVJc1ZlcnRpY2FsKGJ1bmRsZTogT2djU2VsZWN0b3JCdW5kbGUpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBidW5kbGUudmVydGljYWwgPyBidW5kbGUudmVydGljYWwgOiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25QdXNoQnV0dG9uc0NoYW5nZUdyb3VwKCkge1xyXG4gICAgdGhpcy5nZXRQdXNoQnV0dG9uc0dyb3VwcygpLm1hcCgoZ3JvdXApID0+IChncm91cC5lbmFibGVkID0gZmFsc2UpKTtcclxuICAgIHRoaXMuZ2V0UHVzaEJ1dHRvbnNHcm91cHMoKS5maW5kKFxyXG4gICAgICAoZ3JvdXApID0+IGdyb3VwID09PSB0aGlzLmN1cnJlbnRQdXNoQnV0dG9uc0dyb3VwXHJcbiAgICApLmVuYWJsZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbkNoZWNrYm94ZXNDaGFuZ2VHcm91cCgpIHtcclxuICAgIHRoaXMuZ2V0Q2hlY2tib3hlc0dyb3VwcygpLm1hcCgoZ3JvdXApID0+IChncm91cC5lbmFibGVkID0gZmFsc2UpKTtcclxuICAgIHRoaXMuZ2V0Q2hlY2tib3hlc0dyb3VwcygpLmZpbmQoXHJcbiAgICAgIChncm91cCkgPT4gZ3JvdXAgPT09IHRoaXMuY3VycmVudENoZWNrYm94ZXNHcm91cFxyXG4gICAgKS5lbmFibGVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25SYWRpb0J1dHRvbnNDaGFuZ2VHcm91cCgpIHtcclxuICAgIHRoaXMuZ2V0UmFkaW9CdXR0b25zR3JvdXBzKCkubWFwKChncm91cCkgPT4gKGdyb3VwLmVuYWJsZWQgPSBmYWxzZSkpO1xyXG4gICAgdGhpcy5nZXRSYWRpb0J1dHRvbnNHcm91cHMoKS5maW5kKFxyXG4gICAgICAoZ3JvdXApID0+IGdyb3VwID09PSB0aGlzLmN1cnJlbnRSYWRpb0J1dHRvbnNHcm91cFxyXG4gICAgKS5lbmFibGVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25TZWxlY3RDaGFuZ2VHcm91cCgpIHtcclxuICAgIHRoaXMuZ2V0U2VsZWN0R3JvdXBzKCkubWFwKChncm91cCkgPT4gKGdyb3VwLmVuYWJsZWQgPSBmYWxzZSkpO1xyXG4gICAgdGhpcy5nZXRTZWxlY3RHcm91cHMoKS5maW5kKFxyXG4gICAgICAoZ3JvdXApID0+IGdyb3VwID09PSB0aGlzLmN1cnJlbnRTZWxlY3RHcm91cFxyXG4gICAgKS5lbmFibGVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25BdXRvY29tcGxldGVDaGFuZ2VHcm91cCgpIHtcclxuICAgIHRoaXMuZ2V0QXV0b2NvbXBsZXRlR3JvdXBzKCkubWFwKChncm91cCkgPT4gKGdyb3VwLmVuYWJsZWQgPSBmYWxzZSkpO1xyXG4gICAgdGhpcy5nZXRBdXRvY29tcGxldGVHcm91cHMoKS5maW5kKFxyXG4gICAgICAoZ3JvdXApID0+IGdyb3VwID09PSB0aGlzLmN1cnJlbnRBdXRvY29tcGxldGVHcm91cFxyXG4gICAgKS5lbmFibGVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIG9uU2VsZWN0aW9uQ2hhbmdlKGN1cnJlbnRPZ2NTZWxlY3Rpb24/LCBzZWxlY3RvclR5cGU/KSB7XHJcbiAgICBjbGVhclRpbWVvdXQodGhpcy5hcHBseUZpbHRlcnNUaW1lb3V0KTtcclxuICAgIGlmIChzZWxlY3RvclR5cGUgPT09ICdyYWRpb0J1dHRvbicpIHtcclxuICAgICAgdGhpcy5lbXB0eVJhZGlvQnV0dG9ucygpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjdXJyZW50T2djU2VsZWN0aW9uKSB7XHJcbiAgICAgIGN1cnJlbnRPZ2NTZWxlY3Rpb24uZW5hYmxlZCA9ICFjdXJyZW50T2djU2VsZWN0aW9uLmVuYWJsZWQ7XHJcbiAgICB9XHJcbiAgICB0aGlzLmFwcGx5RmlsdGVyc1RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcclxuICAgIH0sIDc1MCk7XHJcbiAgfVxyXG5cclxuICBlbXB0eVJhZGlvQnV0dG9ucygpIHtcclxuICAgIHRoaXMuY3VycmVudFJhZGlvQnV0dG9uc0dyb3VwLmNvbXB1dGVkU2VsZWN0b3JzLmZvckVhY2goKGNvbXBTZWxlY3QpID0+IHtcclxuICAgICAgY29tcFNlbGVjdC5zZWxlY3RvcnMubWFwKChzZWxlY3RvcikgPT4gKHNlbGVjdG9yLmVuYWJsZWQgPSBmYWxzZSkpO1xyXG5cclxuICAgICAgdGhpcy5hcHBseUZpbHRlcnNUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcclxuICAgICAgfSwgNzUwKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZW1wdHlTZWxlY3QoKSB7XHJcbiAgICB0aGlzLnNlbGVjdEVuYWJsZWQgPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBlbXB0eUF1dG9jb21wbGV0ZSgpIHtcclxuICAgIHRoaXMuYXV0b2NvbXBsZXRlRW5hYmxlZCA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuZm9ybS5jb250cm9sc1snYXV0b2NvbXBsZXRlJ10uc2V0VmFsdWUoJycpO1xyXG4gICAgdGhpcy5mb3JtLmNvbnRyb2xzWydhdXRvY29tcGxldGUnXS5tYXJrQXNVbnRvdWNoZWQoKTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZUFsbFNlbGVjdGlvbigpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdEFsbFNlbGVjdGVkKSB7XHJcbiAgICAgIGNvbnN0IGVuYWJsZWRzID0gW107XHJcbiAgICAgIHRoaXMuY3VycmVudFNlbGVjdEdyb3VwLmNvbXB1dGVkU2VsZWN0b3JzLmZvckVhY2goKGNvbXBTZWxlY3QpID0+IHtcclxuICAgICAgICBjb21wU2VsZWN0LnNlbGVjdG9ycz8uZm9yRWFjaCgoc2VsZWN0b3IpID0+IHtcclxuICAgICAgICAgIGVuYWJsZWRzLnB1c2goc2VsZWN0b3IpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5zZWwub3B0aW9ucy5mb3JFYWNoKChpdGVtOiBNYXRPcHRpb24pID0+IGl0ZW0uc2VsZWN0KCkpO1xyXG4gICAgICB0aGlzLnNlbGVjdEVuYWJsZWRzID0gZW5hYmxlZHM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbC5vcHRpb25zLmZvckVhY2goKGl0ZW06IE1hdE9wdGlvbikgPT4gaXRlbS5kZXNlbGVjdCgpKTtcclxuICAgICAgdGhpcy5zZWxlY3RFbmFibGVkcyA9IFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VsZWN0T3B0aW9uQ2xpY2sodmFsdWUsIGJ1bmRsZSwgZXZlbnQ/KSB7XHJcbiAgICBpZiAoYnVuZGxlLm11bHRpcGxlKSB7XHJcbiAgICAgIGNvbnN0IGVuYWJsZWRzID0gdGhpcy5zZWxlY3RFbmFibGVkcztcclxuICAgICAgbGV0IG5ld1N0YXR1cyA9IHRydWU7XHJcbiAgICAgIHRoaXMuc2VsLm9wdGlvbnMuZm9yRWFjaCgoaXRlbTogTWF0T3B0aW9uKSA9PiB7XHJcbiAgICAgICAgaWYgKCFpdGVtLnNlbGVjdGVkKSB7XHJcbiAgICAgICAgICBuZXdTdGF0dXMgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnNlbGVjdEFsbFNlbGVjdGVkID0gbmV3U3RhdHVzO1xyXG4gICAgICBpZiAoZXZlbnQuaXNVc2VySW5wdXQpIHtcclxuICAgICAgICBpZiAoZW5hYmxlZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICBmb3IgKGNvbnN0IGVuYWJsZWQgb2YgZW5hYmxlZHMpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQudGl0bGUgPT09IHZhbHVlLnRpdGxlKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGVuYWJsZWQuZW5hYmxlZCAmJiB2YWx1ZS5lbmFibGVkKSB7XHJcbiAgICAgICAgICAgICAgICBlbmFibGVkcy5zcGxpY2UoZW5hYmxlZHMuaW5kZXhPZihlbmFibGVkKSwgMSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEVuYWJsZWRzID0gZW5hYmxlZHM7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZW5hYmxlZHMuaW5kZXhPZihlbmFibGVkKSA9PT0gZW5hYmxlZHMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICAgIGVuYWJsZWRzLnB1c2godmFsdWUpO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0RW5hYmxlZHMgPSBlbmFibGVkcztcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBlbmFibGVkcy5wdXNoKHZhbHVlKTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0RW5hYmxlZHMgPSBlbmFibGVkcztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0RW5hYmxlZCA9IHZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXV0b2NvbXBsZXRlT3B0aW9uQ2xpY2sodmFsdWUpIHtcclxuICAgIHRoaXMuYXV0b2NvbXBsZXRlRW5hYmxlZCA9IHZhbHVlLnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgZGlzcGxheUZuKGRvbSk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gZG9tID8gZG9tLnZhbHVlIDogdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBseUZpbHRlcnMoKSB7XHJcbiAgICBsZXQgZmlsdGVyUXVlcnlTdHJpbmcgPSAnJztcclxuICAgIGNvbnN0IGNvbmRpdGlvbnMgPSBbXTtcclxuICAgIGNvbnN0IGN1cnJlbnRHcm91cHMgPSBbXHJcbiAgICAgIHRoaXMuY3VycmVudFB1c2hCdXR0b25zR3JvdXAsXHJcbiAgICAgIHRoaXMuY3VycmVudENoZWNrYm94ZXNHcm91cCxcclxuICAgICAgdGhpcy5jdXJyZW50UmFkaW9CdXR0b25zR3JvdXAsXHJcbiAgICAgIHRoaXMuY3VycmVudFNlbGVjdEdyb3VwLFxyXG4gICAgICB0aGlzLmN1cnJlbnRBdXRvY29tcGxldGVHcm91cFxyXG4gICAgXTtcclxuICAgIGZvciAoY29uc3QgY3VycmVudEdyb3VwIG9mIGN1cnJlbnRHcm91cHMpIHtcclxuICAgICAgaWYgKGN1cnJlbnRHcm91cC5jb21wdXRlZFNlbGVjdG9ycykge1xyXG4gICAgICAgIGN1cnJlbnRHcm91cC5jb21wdXRlZFNlbGVjdG9ycy5tYXAoKHNlbGVjdG9yQnVuZGxlKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBidW5kbGVDb25kaXRpb24gPSBbXTtcclxuICAgICAgICAgIHNlbGVjdG9yQnVuZGxlLnNlbGVjdG9yc1xyXG4gICAgICAgICAgICA/LmZpbHRlcigob2djU2VsZWN0b3IpID0+IG9nY1NlbGVjdG9yLmVuYWJsZWQgPT09IHRydWUpXHJcbiAgICAgICAgICAgIC5mb3JFYWNoKChlbmFibGVkU2VsZWN0b3IpID0+XHJcbiAgICAgICAgICAgICAgYnVuZGxlQ29uZGl0aW9uLnB1c2goZW5hYmxlZFNlbGVjdG9yLmZpbHRlcnMpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICBpZiAoYnVuZGxlQ29uZGl0aW9uLmxlbmd0aCA+PSAxKSB7XHJcbiAgICAgICAgICAgIGlmIChidW5kbGVDb25kaXRpb24ubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgY29uZGl0aW9ucy5wdXNoKGJ1bmRsZUNvbmRpdGlvblswXSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgY29uZGl0aW9ucy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGxvZ2ljYWw6IHNlbGVjdG9yQnVuZGxlLmxvZ2ljYWwsXHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJzOiBidW5kbGVDb25kaXRpb25cclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5pc1RlbXBvcmFsT3BlcmF0b3IoKSAmJiB0aGlzLl9jdXJyZW50RmlsdGVyLmFjdGl2ZSkge1xyXG4gICAgICBjb25kaXRpb25zLnB1c2goXHJcbiAgICAgICAgdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5pbnRlcmZhY2VPZ2NGaWx0ZXJzWzBdXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAoY29uZGl0aW9ucy5sZW5ndGggPj0gMSkge1xyXG4gICAgICBmaWx0ZXJRdWVyeVN0cmluZyA9IHRoaXMub2djRmlsdGVyV3JpdGVyLmJ1aWxkRmlsdGVyKFxyXG4gICAgICAgIGNvbmRpdGlvbnMubGVuZ3RoID09PSAxXHJcbiAgICAgICAgICA/IGNvbmRpdGlvbnNbMF1cclxuICAgICAgICAgIDogKHsgbG9naWNhbDogJ0FuZCcsIGZpbHRlcnM6IGNvbmRpdGlvbnMgfSBhcyBJZ29PZ2NGaWx0ZXJPYmplY3QpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5kYXRhc291cmNlLm9wdGlvbnMudHlwZSA9PT0gJ3dtcycpIHtcclxuICAgICAgdGhpcy5vZ2NGaWx0ZXJTZXJ2aWNlLmZpbHRlckJ5T2djKFxyXG4gICAgICAgIHRoaXMuZGF0YXNvdXJjZSBhcyBXTVNEYXRhU291cmNlLFxyXG4gICAgICAgIGZpbHRlclF1ZXJ5U3RyaW5nXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5kYXRhc291cmNlLm9wdGlvbnMudHlwZSA9PT0gJ3dmcycpIHtcclxuICAgICAgLy8gVE9ETzogQ2hlY2sgaG93IHRvIHByZXZlbnQgd2ZzIHRvIHJlZnJlc2ggd2hlbiBmaWx0ZXIgaWNvbiBpcyBwdXNoZWQuLi5cclxuICAgICAgdGhpcy5kYXRhc291cmNlLm9sLnJlZnJlc2goKTtcclxuICAgIH1cclxuICAgIHRoaXMuZGF0YXNvdXJjZS5zZXRPZ2NGaWx0ZXJzKHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMsIHRydWUpO1xyXG4gIH1cclxuXHJcbiAgaXNNb3JlUmVzdWx0cyhidW5kbGUsIHR5cGUpIHtcclxuICAgIGxldCBzZWxlY3RvcnNMZW5ndGggPSAwO1xyXG4gICAgZm9yIChjb25zdCBzZWxlY3RvcnMgb2YgYnVuZGxlLnNlbGVjdG9ycykge1xyXG4gICAgICBzZWxlY3RvcnNMZW5ndGgrKztcclxuICAgIH1cclxuICAgIGNvbnN0IGluZGV4ID1cclxuICAgICAgdHlwZSA9PT0gJ3JhZGlvJyA/IHRoaXMucmFkaW9CdXR0b25zSW5kZXggOiB0aGlzLmNoZWNrYm94ZXNJbmRleDtcclxuICAgIHJldHVybiBzZWxlY3RvcnNMZW5ndGggPiBpbmRleDtcclxuICB9XHJcblxyXG4gIGRpc3BsYXlNb3JlUmVzdWx0cyh0eXBlKSB7XHJcbiAgICB0eXBlID09PSAncmFkaW8nXHJcbiAgICAgID8gKHRoaXMucmFkaW9CdXR0b25zSW5kZXggKz0gNSlcclxuICAgICAgOiAodGhpcy5jaGVja2JveGVzSW5kZXggKz0gNSk7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBpc0xlc3NSZXN1bHRzKGJ1bmRsZSwgdHlwZSkge1xyXG4gICAgbGV0IHNlbGVjdG9yc0xlbmd0aCA9IDA7XHJcbiAgICBmb3IgKGNvbnN0IHNlbGVjdG9ycyBvZiBidW5kbGUuc2VsZWN0b3JzKSB7XHJcbiAgICAgIHNlbGVjdG9yc0xlbmd0aCsrO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaW5kZXggPVxyXG4gICAgICB0eXBlID09PSAncmFkaW8nID8gdGhpcy5yYWRpb0J1dHRvbnNJbmRleCA6IHRoaXMuY2hlY2tib3hlc0luZGV4O1xyXG4gICAgcmV0dXJuIHRoaXMuYmFzZUluZGV4ICE9PSBpbmRleCAmJiBzZWxlY3RvcnNMZW5ndGggPiB0aGlzLmJhc2VJbmRleDtcclxuICB9XHJcblxyXG4gIGRpc3BsYXlMZXNzUmVzdWx0cyh0eXBlKSB7XHJcbiAgICB0eXBlID09PSAncmFkaW8nXHJcbiAgICAgID8gKHRoaXMucmFkaW9CdXR0b25zSW5kZXggPSB0aGlzLmJhc2VJbmRleClcclxuICAgICAgOiAodGhpcy5jaGVja2JveGVzSW5kZXggPSB0aGlzLmJhc2VJbmRleCk7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBpc1RlbXBvcmFsT3BlcmF0b3IoKSB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLmN1cnJlbnRGaWx0ZXI/Lm9wZXJhdG9yPy50b0xvd2VyQ2FzZSgpID09PVxyXG4gICAgICB0aGlzLm9nY0ZpbHRlck9wZXJhdG9yLkR1cmluZy50b0xvd2VyQ2FzZSgpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlUHJvcGVydHkodmFsdWU6IGFueSwgcG9zPzogbnVtYmVyLCByZWZyZXNoRmlsdGVyID0gdHJ1ZSkge1xyXG4gICAgY29uc3QgZGV0ZWN0ZWRQcm9wZXJ0eSA9IHRoaXMuZGV0ZWN0UHJvcGVydHkocG9zKTtcclxuICAgIGlmIChkZXRlY3RlZFByb3BlcnR5KSB7XHJcbiAgICAgIHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuaW50ZXJmYWNlT2djRmlsdGVycy5maW5kKFxyXG4gICAgICAgIChmaWx0ZXIpID0+IGZpbHRlci5maWx0ZXJpZCA9PT0gdGhpcy5jdXJyZW50RmlsdGVyLmZpbHRlcmlkXHJcbiAgICAgIClbZGV0ZWN0ZWRQcm9wZXJ0eV0gPSB2YWx1ZTtcclxuXHJcbiAgICAgIGlmIChyZWZyZXNoRmlsdGVyKSB7XHJcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZGV0ZWN0UHJvcGVydHkocG9zPzogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIHN3aXRjaCAodGhpcy5jdXJyZW50RmlsdGVyLm9wZXJhdG9yKSB7XHJcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc05vdEVxdWFsVG86XHJcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc0VxdWFsVG86XHJcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc0dyZWF0ZXJUaGFuOlxyXG4gICAgICBjYXNlIE9nY0ZpbHRlck9wZXJhdG9yLlByb3BlcnR5SXNHcmVhdGVyVGhhbk9yRXF1YWxUbzpcclxuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzTGVzc1RoYW46XHJcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc0xlc3NUaGFuT3JFcXVhbFRvOlxyXG4gICAgICAgIHJldHVybiAnZXhwcmVzc2lvbic7XHJcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc0xpa2U6XHJcbiAgICAgICAgcmV0dXJuICdwYXR0ZXJuJztcclxuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzQmV0d2VlbjpcclxuICAgICAgICByZXR1cm4gcG9zICYmIHBvcyA9PT0gMVxyXG4gICAgICAgICAgPyAnbG93ZXJCb3VuZGFyeSdcclxuICAgICAgICAgIDogcG9zICYmIHBvcyA9PT0gMlxyXG4gICAgICAgICAgPyAndXBwZXJCb3VuZGFyeSdcclxuICAgICAgICAgIDogdW5kZWZpbmVkO1xyXG4gICAgICBjYXNlIE9nY0ZpbHRlck9wZXJhdG9yLkR1cmluZzpcclxuICAgICAgICByZXR1cm4gcG9zICYmIHBvcyA9PT0gMVxyXG4gICAgICAgICAgPyAnYmVnaW4nXHJcbiAgICAgICAgICA6IHBvcyAmJiBwb3MgPT09IDJcclxuICAgICAgICAgID8gJ2VuZCdcclxuICAgICAgICAgIDogdW5kZWZpbmVkO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCI+XG4gIDxkaXYgKm5nRm9yPVwibGV0IHNlbGVjdG9yIG9mIG9nY0ZpbHRlcnNTZWxlY3RvcnNcIj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInB1c2hCdXR0b25Hcm91cHNcIlxuICAgICAgKm5nSWY9XCJzZWxlY3Rvci5zZWxlY3RvclR5cGUgPT09ICdwdXNoQnV0dG9uJ1wiXG4gICAgPlxuICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXBzU2VsZWN0b3JcIiAqbmdJZj1cImdldFB1c2hCdXR0b25zR3JvdXBzKCkubGVuZ3RoID4gMVwiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInB1c2hCdXR0b25zR3JvdXBcIlxuICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8ubGF5ZXIubGVnZW5kLnNlbGVjdFN0eWxlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxuICAgICAgICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICAgICAgICBbKHZhbHVlKV09XCJjdXJyZW50UHVzaEJ1dHRvbnNHcm91cFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHNlbGVjdG9yR3JvdXAgb2YgZ2V0UHVzaEJ1dHRvbnNHcm91cHMoKVwiXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJzZWxlY3Rvckdyb3VwXCJcbiAgICAgICAgICAgICAgPnt7IHNlbGVjdG9yR3JvdXAudGl0bGUgfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nRm9yPVwibGV0IGJ1bmRsZSBvZiBjdXJyZW50UHVzaEJ1dHRvbnNHcm91cC5jb21wdXRlZFNlbGVjdG9yc1wiXG4gICAgICA+XG4gICAgICAgIDxoMz57eyBidW5kbGUudGl0bGUgfX08L2gzPlxuICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXBcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwdXNoQnV0dG9uc1wiXG4gICAgICAgICAgY2xhc3M9XCJtYXQtdHlwb2dyYXBoeVwiXG4gICAgICAgICAgYXBwZWFyYW5jZT1cImxlZ2FjeVwiXG4gICAgICAgICAgdmVydGljYWw9XCJ7eyBidW5kbGVJc1ZlcnRpY2FsKGJ1bmRsZSkgfX1cIlxuICAgICAgICAgIG11bHRpcGxlPVwidHJ1ZVwiXG4gICAgICAgID5cbiAgICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGVcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvZ2NQdXNoQnV0dG9uIG9mIGJ1bmRsZS5zZWxlY3RvcnNcIlxuICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiZ2V0VG9vbFRpcChvZ2NQdXNoQnV0dG9uKVwiXG4gICAgICAgICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxuICAgICAgICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9XCJtYXRlcmlhbC10b29sdGlwXCJcbiAgICAgICAgICAgIFtuZ1N0eWxlXT1cImdldEJ1dHRvbkNvbG9yKG9nY1B1c2hCdXR0b24pXCJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cIm9nY1B1c2hCdXR0b24uZW5hYmxlZFwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKG9nY1B1c2hCdXR0b24sIHNlbGVjdG9yLnNlbGVjdG9yVHlwZSlcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cIm9nY1B1c2hCdXR0b25cIlxuICAgICAgICAgICAgPnt7IG9nY1B1c2hCdXR0b24udGl0bGUgfX1cbiAgICAgICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxuICAgICAgICA8L21hdC1idXR0b24tdG9nZ2xlLWdyb3VwPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hHcm91cHNcIiAqbmdJZj1cInNlbGVjdG9yLnNlbGVjdG9yVHlwZSA9PT0gJ2NoZWNrYm94J1wiPlxuICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXBzU2VsZWN0b3JcIiAqbmdJZj1cImdldENoZWNrYm94ZXNHcm91cHMoKS5sZW5ndGggPiAxXCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LXNlbGVjdFxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY2hlY2tib3hlc0dyb3VwXCJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmxheWVyLmxlZ2VuZC5zZWxlY3RTdHlsZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcbiAgICAgICAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgICAgICAgICAgWyh2YWx1ZSldPVwiY3VycmVudENoZWNrYm94ZXNHcm91cFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHNlbGVjdG9yR3JvdXAgb2YgZ2V0Q2hlY2tib3hlc0dyb3VwcygpXCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cInNlbGVjdG9yR3JvdXBcIlxuICAgICAgICAgICAgICA+e3sgc2VsZWN0b3JHcm91cC50aXRsZSB9fVxuICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdGb3I9XCJsZXQgYnVuZGxlIG9mIGN1cnJlbnRDaGVja2JveGVzR3JvdXAuY29tcHV0ZWRTZWxlY3RvcnNcIlxuICAgICAgPlxuICAgICAgICA8aDM+e3sgYnVuZGxlLnRpdGxlIH19PC9oMz5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94ZXMgbWF0LXR5cG9ncmFwaHlcIj5cbiAgICAgICAgICA8bWF0LWNoZWNrYm94XG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgb2djQ2hlY2tib3ggb2YgYnVuZGxlLnNlbGVjdG9yc1wiXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJnZXRUb29sVGlwKG9nY0NoZWNrYm94KVwiXG4gICAgICAgICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxuICAgICAgICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9XCJtYXRlcmlhbC10b29sdGlwXCJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cIm9nY0NoZWNrYm94LmVuYWJsZWRcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZShvZ2NDaGVja2JveCwgc2VsZWN0b3Iuc2VsZWN0b3JUeXBlKVwiXG4gICAgICAgICAgICBbdmFsdWVdPVwib2djQ2hlY2tib3hcIlxuICAgICAgICAgICAgPnt7IG9nY0NoZWNrYm94LnRpdGxlIH19XG4gICAgICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8cFxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICBpc0xlc3NSZXN1bHRzKGJ1bmRsZSwgJ2NoZWNrYm94JykgfHxcbiAgICAgICAgICAgIGlzTW9yZVJlc3VsdHMoYnVuZGxlLCAnY2hlY2tib3gnKVxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8dVxuICAgICAgICAgICAgKm5nSWY9XCJpc0xlc3NSZXN1bHRzKGJ1bmRsZSwgJ2NoZWNrYm94JylcIlxuICAgICAgICAgICAgY2xhc3M9XCJsZXNzUmVzdWx0cyBtYXQtdHlwb2dyYXBoeVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZGlzcGxheUxlc3NSZXN1bHRzKCdjaGVja2JveCcpXCJcbiAgICAgICAgICAgID57eyAnaWdvLmdlby5maWx0ZXIuZGlzcGxheUxlc3NSZXN1bHRzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvdT5cbiAgICAgICAgICA8dVxuICAgICAgICAgICAgKm5nSWY9XCJpc01vcmVSZXN1bHRzKGJ1bmRsZSwgJ2NoZWNrYm94JylcIlxuICAgICAgICAgICAgY2xhc3M9XCJtb3JlUmVzdWx0cyBtYXQtdHlwb2dyYXBoeVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZGlzcGxheU1vcmVSZXN1bHRzKCdjaGVja2JveCcpXCJcbiAgICAgICAgICAgID57eyAnaWdvLmdlby5maWx0ZXIuZGlzcGxheU1vcmVSZXN1bHRzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvdT5cbiAgICAgICAgPC9wPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInJhZGlvQnV0dG9uR3JvdXBzXCJcbiAgICAgICpuZ0lmPVwic2VsZWN0b3Iuc2VsZWN0b3JUeXBlID09PSAncmFkaW9CdXR0b24nXCJcbiAgICA+XG4gICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgIDxkaXYgY2xhc3M9XCJncm91cHNTZWxlY3RvclwiICpuZ0lmPVwiZ2V0UmFkaW9CdXR0b25zR3JvdXBzKCkubGVuZ3RoID4gMVwiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInJhZGlvQnV0dG9uc0dyb3VwXCJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmxheWVyLmxlZ2VuZC5zZWxlY3RTdHlsZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcbiAgICAgICAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgICAgICAgICAgWyh2YWx1ZSldPVwiY3VycmVudFJhZGlvQnV0dG9uc0dyb3VwXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bWF0LW9wdGlvblxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgc2VsZWN0b3JHcm91cCBvZiBnZXRSYWRpb0J1dHRvbnNHcm91cHMoKVwiXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJzZWxlY3Rvckdyb3VwXCJcbiAgICAgICAgICAgICAgPnt7IHNlbGVjdG9yR3JvdXAudGl0bGUgfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nRm9yPVwibGV0IGJ1bmRsZSBvZiBjdXJyZW50UmFkaW9CdXR0b25zR3JvdXAuY29tcHV0ZWRTZWxlY3RvcnNcIlxuICAgICAgPlxuICAgICAgICA8aDM+e3sgYnVuZGxlLnRpdGxlIH19PC9oMz5cbiAgICAgICAgPG1hdC1yYWRpby1ncm91cCBmb3JtQ29udHJvbE5hbWU9XCJyYWRpb0J1dHRvbnNcIiBjbGFzcz1cIm1hdC10eXBvZ3JhcGh5XCI+XG4gICAgICAgICAgPG1hdC1yYWRpby1idXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwiYnVuZGxlLnVuZmlsdGVyZWRcIlxuICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8uZmlsdGVyLnJlc2V0RmlsdGVycycgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcbiAgICAgICAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPVwibWF0ZXJpYWwtdG9vbHRpcFwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cImVtcHR5UmFkaW9CdXR0b25zKClcIlxuICAgICAgICAgICAgPnt7ICdpZ28uZ2VvLmZpbHRlci5yZXNldEZpbHRlcnMnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtcmFkaW8tYnV0dG9uPlxuICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgb2djUmFkaW9CdXR0b24gb2YgYnVuZGxlLnNlbGVjdG9yc1wiXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJnZXRUb29sVGlwKG9nY1JhZGlvQnV0dG9uKVwiXG4gICAgICAgICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxuICAgICAgICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9XCJtYXRlcmlhbC10b29sdGlwXCJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cIm9nY1JhZGlvQnV0dG9uLmVuYWJsZWRcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZShvZ2NSYWRpb0J1dHRvbiwgc2VsZWN0b3Iuc2VsZWN0b3JUeXBlKVwiXG4gICAgICAgICAgICBbdmFsdWVdPVwib2djUmFkaW9CdXR0b25cIlxuICAgICAgICAgICAgPnt7IG9nY1JhZGlvQnV0dG9uLnRpdGxlIH19XG4gICAgICAgICAgPC9tYXQtcmFkaW8tYnV0dG9uPlxuICAgICAgICAgIDxwXG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICBpc0xlc3NSZXN1bHRzKGJ1bmRsZSwgJ3JhZGlvJykgfHwgaXNNb3JlUmVzdWx0cyhidW5kbGUsICdyYWRpbycpXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDx1XG4gICAgICAgICAgICAgICpuZ0lmPVwiaXNMZXNzUmVzdWx0cyhidW5kbGUsICdyYWRpbycpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJsZXNzUmVzdWx0cyBtYXQtdHlwb2dyYXBoeVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJkaXNwbGF5TGVzc1Jlc3VsdHMoJ3JhZGlvJylcIlxuICAgICAgICAgICAgICA+e3sgJ2lnby5nZW8uZmlsdGVyLmRpc3BsYXlMZXNzUmVzdWx0cycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvdT5cbiAgICAgICAgICAgIDx1XG4gICAgICAgICAgICAgICpuZ0lmPVwiaXNNb3JlUmVzdWx0cyhidW5kbGUsICdyYWRpbycpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJtb3JlUmVzdWx0cyBtYXQtdHlwb2dyYXBoeVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJkaXNwbGF5TW9yZVJlc3VsdHMoJ3JhZGlvJylcIlxuICAgICAgICAgICAgICA+e3sgJ2lnby5nZW8uZmlsdGVyLmRpc3BsYXlNb3JlUmVzdWx0cycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvdT5cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvbWF0LXJhZGlvLWdyb3VwPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwic2VsZWN0R3JvdXBzXCIgKm5nSWY9XCJzZWxlY3Rvci5zZWxlY3RvclR5cGUgPT09ICdzZWxlY3QnXCI+XG4gICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgIDxkaXYgY2xhc3M9XCJncm91cHNTZWxlY3RvclwiICpuZ0lmPVwiZ2V0U2VsZWN0R3JvdXBzKCkubGVuZ3RoID4gMVwiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNlbGVjdEdyb3VwXCJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmxheWVyLmxlZ2VuZC5zZWxlY3RTdHlsZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcbiAgICAgICAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgICAgICAgICAgWyh2YWx1ZSldPVwiY3VycmVudFNlbGVjdEdyb3VwXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bWF0LW9wdGlvblxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgc2VsZWN0b3JHcm91cCBvZiBnZXRTZWxlY3RHcm91cHMoKVwiXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJzZWxlY3Rvckdyb3VwXCJcbiAgICAgICAgICAgICAgPnt7IHNlbGVjdG9yR3JvdXAudGl0bGUgfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGJ1bmRsZSBvZiBjdXJyZW50U2VsZWN0R3JvdXAuY29tcHV0ZWRTZWxlY3RvcnNcIj5cbiAgICAgICAgPGgzPnt7IGJ1bmRsZS50aXRsZSB9fTwvaDM+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJncm91cHNTZWxlY3RvclwiPlxuICAgICAgICAgIDxtYXQtYnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cImJ1bmRsZS51bmZpbHRlcmVkICYmICFidW5kbGUubXVsdGlwbGVcIlxuICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICBjb2xvcj1cIndhcm5cIlxuICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8uZmlsdGVyLnJlc2V0RmlsdGVycycgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcbiAgICAgICAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPVwibWF0ZXJpYWwtdG9vbHRpcFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZW1wdHlTZWxlY3QoKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJmaWx0ZXItcmVtb3ZlXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgICA8L21hdC1idXR0b24+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkXG4gICAgICAgICAgICBbc3R5bGUud2lkdGguJV09XCJidW5kbGUud2lkdGggPyBidW5kbGUud2lkdGggOiB1bmRlZmluZWRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJidW5kbGUubXVsdGlwbGU7IGVsc2Ugbm90TXVsdGlcIj5cbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICAjc2VsZWN0aW9uXG4gICAgICAgICAgICAgICAgW211bHRpcGxlXT1cImJ1bmRsZS5tdWx0aXBsZVwiXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImJ1bmRsZS50aXRsZVwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2VsZWN0TXVsdGlcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94ZXMgbWF0LXR5cG9ncmFwaHlcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJidW5kbGUubXVsdGlwbGVcIlxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdEFsbFNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVBbGxTZWxlY3Rpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgID5Ub3VzXG4gICAgICAgICAgICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvblxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9nY1NlbGVjdCBvZiBidW5kbGUuc2VsZWN0b3JzXCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImdldFRvb2xUaXAob2djU2VsZWN0KVwiXG4gICAgICAgICAgICAgICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcERlbGF5PVwiNTAwXCJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz1cIm1hdGVyaWFsLXRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgKG9uU2VsZWN0aW9uQ2hhbmdlKT1cIlxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RPcHRpb25DbGljaygkZXZlbnQuc291cmNlLnZhbHVlLCBidW5kbGUsICRldmVudClcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBbdmFsdWVdPVwib2djU2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgID57eyBvZ2NTZWxlY3QudGl0bGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub3RNdWx0aT5cbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgW3BsYWNlaG9sZGVyXT1cImJ1bmRsZS50aXRsZVwiIGZvcm1Db250cm9sTmFtZT1cInNlbGVjdFwiPlxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgb2djU2VsZWN0IG9mIGJ1bmRsZS5zZWxlY3RvcnNcIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiZ2V0VG9vbFRpcChvZ2NTZWxlY3QpXCJcbiAgICAgICAgICAgICAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwRGVsYXk9XCI1MDBcIlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPVwibWF0ZXJpYWwtdG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICBbdmFsdWVdPVwib2djU2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgIChvblNlbGVjdGlvbkNoYW5nZSk9XCJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0T3B0aW9uQ2xpY2soJGV2ZW50LnNvdXJjZS52YWx1ZSwgYnVuZGxlKVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgID57eyBvZ2NTZWxlY3QudGl0bGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiYXV0b2NvbXBsZXRlR3JvdXBzXCJcbiAgICAgICpuZ0lmPVwic2VsZWN0b3Iuc2VsZWN0b3JUeXBlID09PSAnYXV0b2NvbXBsZXRlJ1wiXG4gICAgPlxuICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXBzU2VsZWN0b3JcIiAqbmdJZj1cImdldEF1dG9jb21wbGV0ZUdyb3VwcygpLmxlbmd0aCA+IDFcIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJhdXRvY29tcGxldGVHcm91cFwiXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5sYXllci5sZWdlbmQuc2VsZWN0U3R5bGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXG4gICAgICAgICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgICAgICAgIFsodmFsdWUpXT1cImN1cnJlbnRBdXRvY29tcGxldGVHcm91cFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGF1dG9jb21wbGV0ZUdyb3VwIG9mIGdldEF1dG9jb21wbGV0ZUdyb3VwcygpXCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cImF1dG9jb21wbGV0ZUdyb3VwXCJcbiAgICAgICAgICAgICAgPnt7IGF1dG9jb21wbGV0ZUdyb3VwLnRpdGxlIH19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0Zvcj1cImxldCBidW5kbGUgb2YgY3VycmVudEF1dG9jb21wbGV0ZUdyb3VwLmNvbXB1dGVkU2VsZWN0b3JzXCJcbiAgICAgID5cbiAgICAgICAgPGgzPnt7IGJ1bmRsZS50aXRsZSB9fTwvaDM+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJncm91cHNTZWxlY3RvclwiPlxuICAgICAgICAgIDxtYXQtYnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cImJ1bmRsZS51bmZpbHRlcmVkXCJcbiAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgY29sb3I9XCJ3YXJuXCJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmZpbHRlci5yZXNldEZpbHRlcnMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXG4gICAgICAgICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz1cIm1hdGVyaWFsLXRvb2x0aXBcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImVtcHR5QXV0b2NvbXBsZXRlKClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwiZmlsdGVyLXJlbW92ZVwiPjwvbWF0LWljb24+XG4gICAgICAgICAgPC9tYXQtYnV0dG9uPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZFxuICAgICAgICAgICAgKm5nSWY9XCJmaWx0ZXJlZE9nY0F1dG9jb21wbGV0ZVtidW5kbGUuaWRdXCJcbiAgICAgICAgICAgIFtzdHlsZS53aWR0aC4lXT1cImJ1bmRsZS53aWR0aCA/IGJ1bmRsZS53aWR0aCA6IHVuZGVmaW5lZFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiYXV0b2NvbXBsZXRlXCJcbiAgICAgICAgICAgICAgI2F1dG9jb21wbGV0ZVxuICAgICAgICAgICAgICBjbGFzcz1cImF1dG9jb21wbGV0ZVwiXG4gICAgICAgICAgICAgIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b1wiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJidW5kbGUudGl0bGVcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxtYXQtYXV0b2NvbXBsZXRlXG4gICAgICAgICAgICAgICNhdXRvPVwibWF0QXV0b2NvbXBsZXRlXCJcbiAgICAgICAgICAgICAgI2F1dG9jb21wbGV0ZVxuICAgICAgICAgICAgICAob3B0aW9uU2VsZWN0ZWQpPVwiYXV0b2NvbXBsZXRlT3B0aW9uQ2xpY2soJGV2ZW50Lm9wdGlvbi52YWx1ZSlcIlxuICAgICAgICAgICAgICBbZGlzcGxheVdpdGhdPVwiZGlzcGxheUZuXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgIGxldCBvZ2NBdXRvY29tcGxldGUgb2YgZmlsdGVyZWRPZ2NBdXRvY29tcGxldGVbYnVuZGxlLmlkXVxuICAgICAgICAgICAgICAgICAgICB8IGFzeW5jXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwib2djQXV0b2NvbXBsZXRlXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IG9nY0F1dG9jb21wbGV0ZS52YWx1ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1hdXRvY29tcGxldGU+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Zvcm0+XG5cbjxkaXYgKm5nSWY9XCJpc1RlbXBvcmFsT3BlcmF0b3IoKVwiPlxuICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgPGgzICpuZ0lmPVwiIWN1cnJlbnRGaWx0ZXIudGl0bGVcIj5cbiAgICB7eyAnaWdvLmdlby5maWx0ZXIucmVwb3J0aW5nRGF0ZScgfCB0cmFuc2xhdGUgfX1cbiAgPC9oMz5cbiAgPGgzICpuZ0lmPVwiY3VycmVudEZpbHRlci50aXRsZVwiPnt7IGN1cnJlbnRGaWx0ZXIudGl0bGUgfX08L2gzPlxuICA8aWdvLW9nYy1maWx0ZXItdGltZVxuICAgIFsoZGF0YXNvdXJjZSldPVwiZGF0YXNvdXJjZVwiXG4gICAgWyhjdXJyZW50RmlsdGVyKV09XCJjdXJyZW50RmlsdGVyXCJcbiAgICAoY2hhbmdlUHJvcGVydHkpPVwiY2hhbmdlUHJvcGVydHkoJGV2ZW50LnZhbHVlLCAkZXZlbnQucG9zKVwiXG4gID5cbiAgPC9pZ28tb2djLWZpbHRlci10aW1lPlxuPC9kaXY+XG4iXX0=
|
|
758
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2djLWZpbHRlci1zZWxlY3Rpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2VvL3NyYy9saWIvZmlsdGVyL29nYy1maWx0ZXItc2VsZWN0aW9uL29nYy1maWx0ZXItc2VsZWN0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ZpbHRlci9vZ2MtZmlsdGVyLXNlbGVjdGlvbi9vZ2MtZmlsdGVyLXNlbGVjdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxLQUFLLEVBRUwsU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxrQkFBa0IsRUFFbEIsVUFBVSxFQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXJELE9BQU8sRUFBYyxVQUFVLEVBQVksTUFBTSxjQUFjLENBQUM7QUFDaEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUUzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRCxPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR25ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQVFqRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUWhFLE1BQU0sT0FBTywyQkFBMkI7SUFxSzVCO0lB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Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBR0YsYUFBYTtzQkFEaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxuICBWaWV3Q2hpbGRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBVbnR5cGVkRm9ybUJ1aWxkZXIsXHJcbiAgVW50eXBlZEZvcm1Hcm91cCxcclxuICBWYWxpZGF0b3JzXHJcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNYXRPcHRpb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcclxuaW1wb3J0IHsgTWF0U2VsZWN0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcclxuXHJcbmltcG9ydCB7IERPTU9wdGlvbnMsIERPTVNlcnZpY2UsIERPTVZhbHVlIH0gZnJvbSAnQGlnbzIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29uZmlnU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgV01TRGF0YVNvdXJjZSB9IGZyb20gJy4uLy4uL2RhdGFzb3VyY2Uvc2hhcmVkL2RhdGFzb3VyY2VzL3dtcy1kYXRhc291cmNlJztcclxuaW1wb3J0IHsgT2djRmlsdGVyV3JpdGVyIH0gZnJvbSAnLi4vLi4vZmlsdGVyL3NoYXJlZC9vZ2MtZmlsdGVyJztcclxuaW1wb3J0IHtcclxuICBJZ29PZ2NGaWx0ZXJPYmplY3QsXHJcbiAgT2djRmlsdGVyYWJsZURhdGFTb3VyY2UsXHJcbiAgT2djUHVzaEJ1dHRvbixcclxuICBPZ2NTZWxlY3RvckJ1bmRsZSxcclxuICBTZWxlY3Rvckdyb3VwXHJcbn0gZnJvbSAnLi4vLi4vZmlsdGVyL3NoYXJlZC9vZ2MtZmlsdGVyLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IElnb01hcCB9IGZyb20gJy4uLy4uL21hcC9zaGFyZWQvbWFwJztcclxuaW1wb3J0IHsgT2djRmlsdGVyT3BlcmF0b3IgfSBmcm9tICcuLi9zaGFyZWQvb2djLWZpbHRlci5lbnVtJztcclxuaW1wb3J0IHsgT0dDRmlsdGVyU2VydmljZSB9IGZyb20gJy4uL3NoYXJlZC9vZ2MtZmlsdGVyLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpZ28tb2djLWZpbHRlci1zZWxlY3Rpb24nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9vZ2MtZmlsdGVyLXNlbGVjdGlvbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vb2djLWZpbHRlci1zZWxlY3Rpb24uY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtET01TZXJ2aWNlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgT2djRmlsdGVyU2VsZWN0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBAVmlld0NoaWxkKCdzZWxlY3Rpb24nKSBzZWw6IE1hdFNlbGVjdDtcclxuXHJcbiAgQElucHV0KCkgcmVmcmVzaEZpbHRlcnM6ICgpID0+IHZvaWQ7XHJcblxyXG4gIEBJbnB1dCgpIGRhdGFzb3VyY2U6IE9nY0ZpbHRlcmFibGVEYXRhU291cmNlO1xyXG5cclxuICBASW5wdXQoKSBtYXA6IElnb01hcDtcclxuXHJcbiAgQElucHV0KCkgY2hlY2tib3hlc0luZGV4ID0gNTtcclxuICBASW5wdXQoKSByYWRpb0J1dHRvbnNJbmRleCA9IDU7XHJcbiAgQElucHV0KCkgYmFzZUluZGV4ID0gNTtcclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgY3VycmVudEZpbHRlcigpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRGaWx0ZXI7XHJcbiAgfVxyXG4gIHNldCBjdXJyZW50RmlsdGVyKHZhbHVlKSB7XHJcbiAgICB0aGlzLl9jdXJyZW50RmlsdGVyID0gdmFsdWU7XHJcbiAgICBpZiAodGhpcy5fY3VycmVudEZpbHRlcj8uc2xpZGVyT3B0aW9ucykge1xyXG4gICAgICB0aGlzLl9jdXJyZW50RmlsdGVyLnNsaWRlck9wdGlvbnMuZW5hYmxlZCA9IGZhbHNlOyAvLyByZW1vdmUgc2xpZGVyIHRvZ2dsZSAoYW5pbWF0aW9uIHRlbXBvcmVsbGUpXHJcbiAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgX2N1cnJlbnRGaWx0ZXI6IGFueTtcclxuXHJcbiAgcHVibGljIG9nY0ZpbHRlck9wZXJhdG9yID0gT2djRmlsdGVyT3BlcmF0b3I7XHJcblxyXG4gIHB1YmxpYyBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xyXG4gIHByaXZhdGUgb2djRmlsdGVyV3JpdGVyOiBPZ2NGaWx0ZXJXcml0ZXI7XHJcbiAgcHVibGljIGNvbG9yID0gJ3ByaW1hcnknO1xyXG4gIHB1YmxpYyBzZWxlY3RBbGxTZWxlY3RlZCA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzZWxlY3RFbmFibGVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3QodW5kZWZpbmVkKTtcclxuICBwdWJsaWMgc2VsZWN0RW5hYmxlZHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdChbXSk7XHJcbiAgcHVibGljIGF1dG9jb21wbGV0ZUVuYWJsZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdCh1bmRlZmluZWQpO1xyXG4gIHB1YmxpYyBmaWx0ZXJlZE9nY0F1dG9jb21wbGV0ZSA9IHt9O1xyXG5cclxuICBwdWJsaWMgYXBwbHlGaWx0ZXJzVGltZW91dDtcclxuXHJcbiAgZ2V0IG9nY0ZpbHRlcnNTZWxlY3RvcnMoKSB7XHJcbiAgICBjb25zdCBvZ2NTZWxlY3RvciA9IFtdO1xyXG4gICAgaWYgKHRoaXMuZGF0YXNvdXJjZT8ub3B0aW9ucz8ub2djRmlsdGVycz8ucHVzaEJ1dHRvbnMpIHtcclxuICAgICAgb2djU2VsZWN0b3IucHVzaCh0aGlzLmRhdGFzb3VyY2U/Lm9wdGlvbnM/Lm9nY0ZpbHRlcnM/LnB1c2hCdXR0b25zKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRhdGFzb3VyY2U/Lm9wdGlvbnM/Lm9nY0ZpbHRlcnM/LmNoZWNrYm94ZXMpIHtcclxuICAgICAgb2djU2VsZWN0b3IucHVzaCh0aGlzLmRhdGFzb3VyY2U/Lm9wdGlvbnM/Lm9nY0ZpbHRlcnM/LmNoZWNrYm94ZXMpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZGF0YXNvdXJjZT8ub3B0aW9ucz8ub2djRmlsdGVycz8ucmFkaW9CdXR0b25zKSB7XHJcbiAgICAgIG9nY1NlbGVjdG9yLnB1c2godGhpcy5kYXRhc291cmNlPy5vcHRpb25zPy5vZ2NGaWx0ZXJzPy5yYWRpb0J1dHRvbnMpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZGF0YXNvdXJjZT8ub3B0aW9ucz8ub2djRmlsdGVycz8uc2VsZWN0KSB7XHJcbiAgICAgIG9nY1NlbGVjdG9yLnB1c2godGhpcy5kYXRhc291cmNlPy5vcHRpb25zPy5vZ2NGaWx0ZXJzPy5zZWxlY3QpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZGF0YXNvdXJjZT8ub3B0aW9ucz8ub2djRmlsdGVycz8uYXV0b2NvbXBsZXRlKSB7XHJcbiAgICAgIG9nY1NlbGVjdG9yLnB1c2godGhpcy5kYXRhc291cmNlPy5vcHRpb25zPy5vZ2NGaWx0ZXJzPy5hdXRvY29tcGxldGUpO1xyXG4gICAgfVxyXG4gICAgb2djU2VsZWN0b3Iuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICBpZiAoYS5vcmRlciA8IGIub3JkZXIpIHtcclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGEub3JkZXIgPiBiLm9yZGVyKSB7XHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBvZ2NTZWxlY3RvcjtcclxuICB9XHJcblxyXG4gIGdldCBjdXJyZW50UHVzaEJ1dHRvbnNHcm91cCgpIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm0uZ2V0KCdwdXNoQnV0dG9uc0dyb3VwJykudmFsdWU7XHJcbiAgfVxyXG4gIHNldCBjdXJyZW50UHVzaEJ1dHRvbnNHcm91cCh2YWx1ZSkge1xyXG4gICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBwdXNoQnV0dG9uc0dyb3VwOiB2YWx1ZSB9KTtcclxuICB9XHJcblxyXG4gIGdldCBjdXJyZW50Q2hlY2tib3hlc0dyb3VwKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoJ2NoZWNrYm94ZXNHcm91cCcpLnZhbHVlO1xyXG4gIH1cclxuICBzZXQgY3VycmVudENoZWNrYm94ZXNHcm91cCh2YWx1ZSkge1xyXG4gICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBjaGVja2JveGVzR3JvdXA6IHZhbHVlIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGN1cnJlbnRSYWRpb0J1dHRvbnNHcm91cCgpIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm0uZ2V0KCdyYWRpb0J1dHRvbnNHcm91cCcpLnZhbHVlO1xyXG4gIH1cclxuICBzZXQgY3VycmVudFJhZGlvQnV0dG9uc0dyb3VwKHZhbHVlKSB7XHJcbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IHJhZGlvQnV0dG9uc0dyb3VwOiB2YWx1ZSB9KTtcclxuICB9XHJcblxyXG4gIGdldCBjdXJyZW50U2VsZWN0R3JvdXAoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtLmdldCgnc2VsZWN0R3JvdXAnKS52YWx1ZTtcclxuICB9XHJcbiAgc2V0IGN1cnJlbnRTZWxlY3RHcm91cCh2YWx1ZSkge1xyXG4gICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBzZWxlY3RHcm91cDogdmFsdWUgfSk7XHJcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIGdldCBjdXJyZW50QXV0b2NvbXBsZXRlR3JvdXAoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtLmdldCgnYXV0b2NvbXBsZXRlR3JvdXAnKS52YWx1ZTtcclxuICB9XHJcbiAgc2V0IGN1cnJlbnRBdXRvY29tcGxldGVHcm91cCh2YWx1ZSkge1xyXG4gICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBhdXRvY29tcGxldGVHcm91cDogdmFsdWUgfSk7XHJcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIGdldCBzZWxlY3RFbmFibGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0RW5hYmxlZCQudmFsdWU7XHJcbiAgfVxyXG5cclxuICBzZXQgc2VsZWN0RW5hYmxlZCh2YWx1ZSkge1xyXG4gICAgdGhpcy5zZWxlY3RFbmFibGVkJC5uZXh0KHZhbHVlKTtcclxuICAgIGNsZWFyVGltZW91dCh0aGlzLmFwcGx5RmlsdGVyc1RpbWVvdXQpO1xyXG4gICAgdGhpcy5jdXJyZW50U2VsZWN0R3JvdXAuY29tcHV0ZWRTZWxlY3RvcnMuZm9yRWFjaCgoY29tcFNlbGVjdCkgPT4ge1xyXG4gICAgICBjb21wU2VsZWN0LnNlbGVjdG9ycz8uZm9yRWFjaCgoc2VsZWN0b3IpID0+IHtcclxuICAgICAgICB2YWx1ZSA9PT0gc2VsZWN0b3JcclxuICAgICAgICAgID8gKHNlbGVjdG9yLmVuYWJsZWQgPSB0cnVlKVxyXG4gICAgICAgICAgOiAoc2VsZWN0b3IuZW5hYmxlZCA9IGZhbHNlKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFwcGx5RmlsdGVyc1RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcclxuICAgIH0sIDc1MCk7XHJcbiAgfVxyXG5cclxuICBnZXQgc2VsZWN0RW5hYmxlZHMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RFbmFibGVkcyQudmFsdWU7XHJcbiAgfVxyXG5cclxuICBzZXQgc2VsZWN0RW5hYmxlZHModmFsdWUpIHtcclxuICAgIHRoaXMuc2VsZWN0RW5hYmxlZHMkLm5leHQodmFsdWUpO1xyXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuYXBwbHlGaWx0ZXJzVGltZW91dCk7XHJcbiAgICB0aGlzLmN1cnJlbnRTZWxlY3RHcm91cC5jb21wdXRlZFNlbGVjdG9ycy5mb3JFYWNoKChjb21wU2VsZWN0KSA9PiB7XHJcbiAgICAgIGNvbXBTZWxlY3Quc2VsZWN0b3JzPy5mb3JFYWNoKChzZWxlY3RvcikgPT4ge1xyXG4gICAgICAgIHZhbHVlLmluY2x1ZGVzKHNlbGVjdG9yKVxyXG4gICAgICAgICAgPyAoc2VsZWN0b3IuZW5hYmxlZCA9IHRydWUpXHJcbiAgICAgICAgICA6IChzZWxlY3Rvci5lbmFibGVkID0gZmFsc2UpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuYXBwbHlGaWx0ZXJzVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xyXG4gICAgfSwgNzUwKTtcclxuICB9XHJcblxyXG4gIGdldCBhdXRvY29tcGxldGVFbmFibGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuYXV0b2NvbXBsZXRlRW5hYmxlZCQudmFsdWU7XHJcbiAgfVxyXG5cclxuICBzZXQgYXV0b2NvbXBsZXRlRW5hYmxlZCh2YWx1ZSkge1xyXG4gICAgdGhpcy5hdXRvY29tcGxldGVFbmFibGVkJC5uZXh0KHZhbHVlKTtcclxuICAgIGNsZWFyVGltZW91dCh0aGlzLmFwcGx5RmlsdGVyc1RpbWVvdXQpO1xyXG4gICAgdGhpcy5jdXJyZW50QXV0b2NvbXBsZXRlR3JvdXAuY29tcHV0ZWRTZWxlY3RvcnMuZm9yRWFjaCgoY29tcFNlbGVjdCkgPT4ge1xyXG4gICAgICBjb21wU2VsZWN0LnNlbGVjdG9ycz8uZm9yRWFjaCgoc2VsZWN0b3IpID0+IHtcclxuICAgICAgICB2YWx1ZSA9PT0gc2VsZWN0b3IudGl0bGVcclxuICAgICAgICAgID8gKHNlbGVjdG9yLmVuYWJsZWQgPSB0cnVlKVxyXG4gICAgICAgICAgOiAoc2VsZWN0b3IuZW5hYmxlZCA9IGZhbHNlKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFwcGx5RmlsdGVyc1RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcclxuICAgIH0sIDc1MCk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgb2djRmlsdGVyU2VydmljZTogT0dDRmlsdGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgZG9tU2VydmljZTogRE9NU2VydmljZSxcclxuICAgIHByaXZhdGUgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcclxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmXHJcbiAgKSB7XHJcbiAgICB0aGlzLm9nY0ZpbHRlcldyaXRlciA9IG5ldyBPZ2NGaWx0ZXJXcml0ZXIoKTtcclxuICAgIHRoaXMuYnVpbGRGb3JtKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1aWxkRm9ybSgpIHtcclxuICAgIHRoaXMuZm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICBwdXNoQnV0dG9uczogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICByYWRpb0J1dHRvbnM6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgcHVzaEJ1dHRvbnNHcm91cDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICBjaGVja2JveGVzR3JvdXA6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgcmFkaW9CdXR0b25zR3JvdXA6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgc2VsZWN0R3JvdXA6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgc2VsZWN0OiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgIHNlbGVjdE11bHRpOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgIGF1dG9jb21wbGV0ZUdyb3VwOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgIGF1dG9jb21wbGV0ZTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldFB1c2hCdXR0b25zR3JvdXBzKCk6IFNlbGVjdG9yR3JvdXBbXSB7XHJcbiAgICBpZiAodGhpcy5kYXRhc291cmNlPy5vcHRpb25zPy5vZ2NGaWx0ZXJzPy5wdXNoQnV0dG9ucykge1xyXG4gICAgICByZXR1cm4gdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5wdXNoQnV0dG9ucy5ncm91cHM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRDaGVja2JveGVzR3JvdXBzKCk6IFNlbGVjdG9yR3JvdXBbXSB7XHJcbiAgICBpZiAodGhpcy5kYXRhc291cmNlPy5vcHRpb25zPy5vZ2NGaWx0ZXJzPy5jaGVja2JveGVzKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLmNoZWNrYm94ZXMuZ3JvdXBzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UmFkaW9CdXR0b25zR3JvdXBzKCk6IFNlbGVjdG9yR3JvdXBbXSB7XHJcbiAgICBpZiAodGhpcy5kYXRhc291cmNlPy5vcHRpb25zPy5vZ2NGaWx0ZXJzPy5yYWRpb0J1dHRvbnMpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMucmFkaW9CdXR0b25zLmdyb3VwcztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFNlbGVjdEdyb3VwcygpOiBTZWxlY3Rvckdyb3VwW10ge1xyXG4gICAgaWYgKHRoaXMuZGF0YXNvdXJjZT8ub3B0aW9ucz8ub2djRmlsdGVycz8uc2VsZWN0KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLnNlbGVjdC5ncm91cHM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRBdXRvY29tcGxldGVHcm91cHMoKTogU2VsZWN0b3JHcm91cFtdIHtcclxuICAgIGlmICh0aGlzLmRhdGFzb3VyY2U/Lm9wdGlvbnM/Lm9nY0ZpbHRlcnM/LmF1dG9jb21wbGV0ZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5hdXRvY29tcGxldGUuZ3JvdXBzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgbmdPbkluaXQoKSB7XHJcbiAgICBpZiAodGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycykge1xyXG4gICAgICBpZiAodGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5wdXNoQnV0dG9ucykge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFB1c2hCdXR0b25zR3JvdXAgPVxyXG4gICAgICAgICAgdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5wdXNoQnV0dG9ucy5ncm91cHMuZmluZChcclxuICAgICAgICAgICAgKGdyb3VwKSA9PiBncm91cC5lbmFibGVkXHJcbiAgICAgICAgICApIHx8IHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMucHVzaEJ1dHRvbnMuZ3JvdXBzWzBdO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLmNoZWNrYm94ZXMpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRDaGVja2JveGVzR3JvdXAgPVxyXG4gICAgICAgICAgdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5jaGVja2JveGVzLmdyb3Vwcy5maW5kKFxyXG4gICAgICAgICAgICAoZ3JvdXApID0+IGdyb3VwLmVuYWJsZWRcclxuICAgICAgICAgICkgfHwgdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5jaGVja2JveGVzLmdyb3Vwc1swXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5yYWRpb0J1dHRvbnMpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRSYWRpb0J1dHRvbnNHcm91cCA9XHJcbiAgICAgICAgICB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLnJhZGlvQnV0dG9ucy5ncm91cHMuZmluZChcclxuICAgICAgICAgICAgKGdyb3VwKSA9PiBncm91cC5lbmFibGVkXHJcbiAgICAgICAgICApIHx8IHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMucmFkaW9CdXR0b25zLmdyb3Vwc1swXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5zZWxlY3QpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRTZWxlY3RHcm91cCA9XHJcbiAgICAgICAgICB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLnNlbGVjdC5ncm91cHMuZmluZChcclxuICAgICAgICAgICAgKGdyb3VwKSA9PiBncm91cC5lbmFibGVkXHJcbiAgICAgICAgICApIHx8IHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuc2VsZWN0Lmdyb3Vwc1swXTtcclxuICAgICAgICB0aGlzLmdldFNlbGVjdEVuYWJsZWQoKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmdldFNlbGVjdERvbVZhbHVlcygpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLmF1dG9jb21wbGV0ZSkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudEF1dG9jb21wbGV0ZUdyb3VwID1cclxuICAgICAgICAgIHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuYXV0b2NvbXBsZXRlLmdyb3Vwcy5maW5kKFxyXG4gICAgICAgICAgICAoZ3JvdXApID0+IGdyb3VwLmVuYWJsZWRcclxuICAgICAgICAgICkgfHwgdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5hdXRvY29tcGxldGUuZ3JvdXBzWzBdO1xyXG4gICAgICAgIHRoaXMuZ2V0QXV0b2NvbXBsZXRlRW5hYmxlZCgpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuZ2V0QXV0b2NvbXBsZXRlRG9tVmFsdWVzKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZvcm1cclxuICAgICAgLmdldCgncHVzaEJ1dHRvbnNHcm91cCcpXHJcbiAgICAgIC52YWx1ZUNoYW5nZXMucGlwZShkZWJvdW5jZVRpbWUoNzUwKSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5vblB1c2hCdXR0b25zQ2hhbmdlR3JvdXAoKTtcclxuICAgICAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xyXG4gICAgICB9KTtcclxuICAgIHRoaXMuZm9ybVxyXG4gICAgICAuZ2V0KCdjaGVja2JveGVzR3JvdXAnKVxyXG4gICAgICAudmFsdWVDaGFuZ2VzLnBpcGUoZGVib3VuY2VUaW1lKDc1MCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMub25DaGVja2JveGVzQ2hhbmdlR3JvdXAoKTtcclxuICAgICAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xyXG4gICAgICB9KTtcclxuICAgIHRoaXMuZm9ybVxyXG4gICAgICAuZ2V0KCdyYWRpb0J1dHRvbnNHcm91cCcpXHJcbiAgICAgIC52YWx1ZUNoYW5nZXMucGlwZShkZWJvdW5jZVRpbWUoNzUwKSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5vblJhZGlvQnV0dG9uc0NoYW5nZUdyb3VwKCk7XHJcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcclxuICAgICAgfSk7XHJcbiAgICB0aGlzLmZvcm1cclxuICAgICAgLmdldCgnc2VsZWN0R3JvdXAnKVxyXG4gICAgICAudmFsdWVDaGFuZ2VzLnBpcGUoZGVib3VuY2VUaW1lKDc1MCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMub25TZWxlY3RDaGFuZ2VHcm91cCgpO1xyXG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5mb3JtXHJcbiAgICAgIC5nZXQoJ2F1dG9jb21wbGV0ZUdyb3VwJylcclxuICAgICAgLnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZSg3NTApKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLm9uQXV0b2NvbXBsZXRlQ2hhbmdlR3JvdXAoKTtcclxuICAgICAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xyXG4gICAgICB9KTtcclxuICAgIHRoaXMuZm9ybVxyXG4gICAgICAuZ2V0KCdwdXNoQnV0dG9ucycpXHJcbiAgICAgIC52YWx1ZUNoYW5nZXMucGlwZShkZWJvdW5jZVRpbWUoNzUwKSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcclxuICAgICAgfSk7XHJcbiAgICB0aGlzLmZvcm1cclxuICAgICAgLmdldCgncmFkaW9CdXR0b25zJylcclxuICAgICAgLnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZSg3NTApKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0U2VsZWN0RW5hYmxlZCgpIHtcclxuICAgIGNvbnN0IGVuYWJsZWRzID0gW107XHJcbiAgICBsZXQgZW5hYmxlZDtcclxuICAgIHRoaXMuY3VycmVudFNlbGVjdEdyb3VwLmNvbXB1dGVkU2VsZWN0b3JzLmZvckVhY2goKGNvbXBTZWxlY3QpID0+IHtcclxuICAgICAgaWYgKGNvbXBTZWxlY3QubXVsdGlwbGUpIHtcclxuICAgICAgICBjb21wU2VsZWN0LnNlbGVjdG9ycz8uZm9yRWFjaCgoc2VsZWN0b3IpID0+IHtcclxuICAgICAgICAgIGlmIChzZWxlY3Rvci5lbmFibGVkKSB7XHJcbiAgICAgICAgICAgIGVuYWJsZWRzLnB1c2goc2VsZWN0b3IpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0RW5hYmxlZHMgPSBlbmFibGVkcztcclxuICAgICAgICB0aGlzLmZvcm0uY29udHJvbHNbJ3NlbGVjdE11bHRpJ10uc2V0VmFsdWUoZW5hYmxlZHMpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbXBTZWxlY3Quc2VsZWN0b3JzPy5mb3JFYWNoKChzZWxlY3RvcikgPT4ge1xyXG4gICAgICAgICAgaWYgKHNlbGVjdG9yLmVuYWJsZWQpIHtcclxuICAgICAgICAgICAgZW5hYmxlZCA9IHNlbGVjdG9yO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuZm9ybS5jb250cm9sc1snc2VsZWN0J10ucmVzZXQoZW5hYmxlZCk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RFbmFibGVkJC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICBpZiAodGhpcy5mb3JtLmNvbnRyb2xzWydzZWxlY3QnXS52YWx1ZSAhPT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzWydzZWxlY3QnXS5zZXRWYWx1ZSh2YWx1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RFbmFibGVkID0gZW5hYmxlZDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEF1dG9jb21wbGV0ZUVuYWJsZWQoKSB7XHJcbiAgICBsZXQgZW5hYmxlZDtcclxuICAgIHRoaXMuY3VycmVudEF1dG9jb21wbGV0ZUdyb3VwLmNvbXB1dGVkU2VsZWN0b3JzLmZvckVhY2goKGNvbXBTZWxlY3QpID0+IHtcclxuICAgICAgY29tcFNlbGVjdC5zZWxlY3RvcnM/LmZvckVhY2goKHNlbGVjdG9yKSA9PiB7XHJcbiAgICAgICAgaWYgKHNlbGVjdG9yLmVuYWJsZWQpIHtcclxuICAgICAgICAgIGNvbnN0IGRvbSA9IHtcclxuICAgICAgICAgICAgaWQ6IHNlbGVjdG9yLmZpbHRlcnMuZXhwcmVzc2lvbixcclxuICAgICAgICAgICAgdmFsdWU6IHNlbGVjdG9yLnRpdGxlXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgZW5hYmxlZCA9IHNlbGVjdG9yLnRpdGxlO1xyXG4gICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzWydhdXRvY29tcGxldGUnXS5zZXRWYWx1ZShkb20pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlRW5hYmxlZCA9IGVuYWJsZWQ7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldFRvb2xUaXAoc2VsZWN0b3IpOiBzdHJpbmcge1xyXG4gICAgbGV0IHRvb2xUaXA7XHJcbiAgICBpZiAoc2VsZWN0b3IudG9vbHRpcCkge1xyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShzZWxlY3Rvci50b29sdGlwKSkge1xyXG4gICAgICAgIHRvb2xUaXAgPSBzZWxlY3Rvci50b29sdGlwLmpvaW4oJ1xcbicpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRvb2xUaXAgPSBzZWxlY3Rvci50b29sdGlwO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdG9vbFRpcCB8fCAnJztcclxuICB9XHJcblxyXG4gIGFzeW5jIGdldFNlbGVjdERvbVZhbHVlcygpIHtcclxuICAgIGZvciAoY29uc3QgYnVuZGxlIG9mIHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuc2VsZWN0LmJ1bmRsZXMpIHtcclxuICAgICAgaWYgKGJ1bmRsZS5kb21TZWxlY3RvcnMpIHtcclxuICAgICAgICBsZXQgZG9tVmFsdWVzO1xyXG4gICAgICAgIGZvciAoY29uc3QgZG9tU2VsZWN0b3Igb2YgYnVuZGxlLmRvbVNlbGVjdG9ycykge1xyXG4gICAgICAgICAgbGV0IGZpbHRlckRPTTtcclxuICAgICAgICAgIGZvciAoY29uc3QgZG9tT3B0aW9ucyBvZiB0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnPERPTU9wdGlvbnNbXT4oXHJcbiAgICAgICAgICAgICdkb20nXHJcbiAgICAgICAgICApKSB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICBkb21TZWxlY3Rvci5pZCA9PT0gZG9tT3B0aW9ucy5pZCB8fFxyXG4gICAgICAgICAgICAgIGRvbVNlbGVjdG9yLm5hbWUgPT09IGRvbU9wdGlvbnMubmFtZVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICBmaWx0ZXJET00gPSB7XHJcbiAgICAgICAgICAgICAgICBpZDogZG9tT3B0aW9ucy5pZCxcclxuICAgICAgICAgICAgICAgIHVybDogZG9tT3B0aW9ucy51cmwsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBkb21PcHRpb25zLm5hbWUsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZXM6IGRvbU9wdGlvbnMudmFsdWVzXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZmlsdGVyRE9NLnVybFxyXG4gICAgICAgICAgICA/IChkb21WYWx1ZXMgPSAoYXdhaXQgdGhpcy5kb21TZXJ2aWNlLmdldERvbShcclxuICAgICAgICAgICAgICAgIGZpbHRlckRPTVxyXG4gICAgICAgICAgICAgICkpIGFzIERPTVZhbHVlW10pXHJcbiAgICAgICAgICAgIDogKGRvbVZhbHVlcyA9IGZpbHRlckRPTS52YWx1ZXMpO1xyXG5cclxuICAgICAgICAgIGlmIChkb21WYWx1ZXMpIHtcclxuICAgICAgICAgICAgbGV0IG5ld0J1bmRsZSA9IGJ1bmRsZTtcclxuICAgICAgICAgICAgbmV3QnVuZGxlLnNlbGVjdG9ycyA9IFtdO1xyXG4gICAgICAgICAgICBsZXQgc2VsZWN0b3I7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgZG9tVmFsdWVzKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGJ1bmRsZS5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGVuYWJsZWQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEVuYWJsZWRzPy5maW5kKChzZWwpID0+IHNlbC50aXRsZSA9PT0gdmFsdWUudmFsdWUpXHJcbiAgICAgICAgICAgICAgICAgID8gKGVuYWJsZWQgPSB0cnVlKVxyXG4gICAgICAgICAgICAgICAgICA6IChlbmFibGVkID0gZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0b3IgPSB7XHJcbiAgICAgICAgICAgICAgICAgIHRpdGxlOiB2YWx1ZS52YWx1ZSxcclxuICAgICAgICAgICAgICAgICAgZW5hYmxlZCxcclxuICAgICAgICAgICAgICAgICAgZmlsdGVyczoge1xyXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBkb21TZWxlY3Rvci5vcGVyYXRvcixcclxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWU6IGRvbVNlbGVjdG9yLnByb3BlcnR5TmFtZSxcclxuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiB2YWx1ZS5pZFxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RvciA9IHtcclxuICAgICAgICAgICAgICAgICAgdGl0bGU6IHZhbHVlLnZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICBlbmFibGVkOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0RW5hYmxlZD8udGl0bGUgPT09IHZhbHVlLnZhbHVlID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICBmaWx0ZXJzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IGRvbVNlbGVjdG9yLm9wZXJhdG9yLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZTogZG9tU2VsZWN0b3IucHJvcGVydHlOYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IHZhbHVlLmlkXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIG5ld0J1bmRsZS5zZWxlY3RvcnMucHVzaChzZWxlY3Rvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5nZXRTZWxlY3RHcm91cHMoKVxyXG4gICAgICAgICAgICAgIC5maW5kKChncm91cCkgPT4gZ3JvdXAuaWRzLmluY2x1ZGVzKG5ld0J1bmRsZS5pZCkpXHJcbiAgICAgICAgICAgICAgLmNvbXB1dGVkU2VsZWN0b3JzLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAoY29tcCkgPT4gY29tcC50aXRsZSA9PT0gbmV3QnVuZGxlLnRpdGxlXHJcbiAgICAgICAgICAgICAgKS5zZWxlY3RvcnMgPSBuZXdCdW5kbGUuc2VsZWN0b3JzO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmdldFNlbGVjdEVuYWJsZWQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0QXV0b2NvbXBsZXRlRG9tVmFsdWVzKCkge1xyXG4gICAgZm9yIChjb25zdCBidW5kbGUgb2YgdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5hdXRvY29tcGxldGVcclxuICAgICAgLmJ1bmRsZXMpIHtcclxuICAgICAgaWYgKGJ1bmRsZS5kb21TZWxlY3RvcnMpIHtcclxuICAgICAgICBsZXQgZG9tVmFsdWVzO1xyXG4gICAgICAgIGZvciAoY29uc3QgZG9tU2VsZWN0b3Igb2YgYnVuZGxlLmRvbVNlbGVjdG9ycykge1xyXG4gICAgICAgICAgbGV0IGZpbHRlckRPTTtcclxuICAgICAgICAgIGZvciAoY29uc3QgZG9tT3B0aW9ucyBvZiB0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnPERPTU9wdGlvbnNbXT4oXHJcbiAgICAgICAgICAgICdkb20nXHJcbiAgICAgICAgICApKSB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICBkb21TZWxlY3Rvci5pZCA9PT0gZG9tT3B0aW9ucy5pZCB8fFxyXG4gICAgICAgICAgICAgIGRvbVNlbGVjdG9yLm5hbWUgPT09IGRvbU9wdGlvbnMubmFtZVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICBmaWx0ZXJET00gPSB7XHJcbiAgICAgICAgICAgICAgICBpZDogZG9tT3B0aW9ucy5pZCxcclxuICAgICAgICAgICAgICAgIHVybDogZG9tT3B0aW9ucy51cmwsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBkb21PcHRpb25zLm5hbWUsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZXM6IGRvbU9wdGlvbnMudmFsdWVzXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZmlsdGVyRE9NLnVybFxyXG4gICAgICAgICAgICA/IChkb21WYWx1ZXMgPSAoYXdhaXQgdGhpcy5kb21TZXJ2aWNlLmdldERvbShcclxuICAgICAgICAgICAgICAgIGZpbHRlckRPTVxyXG4gICAgICAgICAgICAgICkpIGFzIERPTVZhbHVlW10pXHJcbiAgICAgICAgICAgIDogKGRvbVZhbHVlcyA9IGZpbHRlckRPTS52YWx1ZXMpO1xyXG5cclxuICAgICAgICAgIGlmIChkb21WYWx1ZXMpIHtcclxuICAgICAgICAgICAgbGV0IG5ld0J1bmRsZSA9IGJ1bmRsZTtcclxuICAgICAgICAgICAgbmV3QnVuZGxlLnNlbGVjdG9ycyA9IFtdO1xyXG4gICAgICAgICAgICBsZXQgc2VsZWN0b3I7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgZG9tVmFsdWVzKSB7XHJcbiAgICAgICAgICAgICAgc2VsZWN0b3IgPSB7XHJcbiAgICAgICAgICAgICAgICB0aXRsZTogdmFsdWUudmFsdWUsXHJcbiAgICAgICAgICAgICAgICBlbmFibGVkOlxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUVuYWJsZWQgJiZcclxuICAgICAgICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVFbmFibGVkID09PSB2YWx1ZS52YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgIDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJzOiB7XHJcbiAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBkb21TZWxlY3Rvci5vcGVyYXRvcixcclxuICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lOiBkb21TZWxlY3Rvci5wcm9wZXJ0eU5hbWUsXHJcbiAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IHZhbHVlLmlkXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICBuZXdCdW5kbGUuc2VsZWN0b3JzLnB1c2goc2VsZWN0b3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0QXV0b2NvbXBsZXRlR3JvdXBzKClcclxuICAgICAgICAgICAgICAuZmluZCgoZ3JvdXApID0+IGdyb3VwLmlkcy5pbmNsdWRlcyhuZXdCdW5kbGUuaWQpKVxyXG4gICAgICAgICAgICAgIC5jb21wdXRlZFNlbGVjdG9ycy5maW5kKFxyXG4gICAgICAgICAgICAgICAgKGNvbXApID0+IGNvbXAudGl0bGUgPT09IG5ld0J1bmRsZS50aXRsZVxyXG4gICAgICAgICAgICAgICkuc2VsZWN0b3JzID0gbmV3QnVuZGxlLnNlbGVjdG9ycztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZmlsdGVyZWRPZ2NBdXRvY29tcGxldGVbYnVuZGxlLmlkXSA9IG5ldyBPYnNlcnZhYmxlPGFueVtdPigpO1xyXG4gICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyZWRPZ2NBdXRvY29tcGxldGVbYnVuZGxlLmlkXSA9IHRoaXMuZm9ybS5jb250cm9sc1tcclxuICAgICAgICAgICdhdXRvY29tcGxldGUnXHJcbiAgICAgICAgXS52YWx1ZUNoYW5nZXMucGlwZShcclxuICAgICAgICAgIG1hcCgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBkb21WYWx1ZXM/LmZpbHRlcigob3B0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJOb3JtYWxpemVkID0gdmFsdWVcclxuICAgICAgICAgICAgICAgICAgPyB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgICAgICAgICAgIC5ub3JtYWxpemUoJ05GRCcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpXHJcbiAgICAgICAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmZWF0dXJlTmFtZU5vcm1hbGl6ZWQgPSBvcHRpb24udmFsdWVcclxuICAgICAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgICAgICAgLm5vcm1hbGl6ZSgnTkZEJylcclxuICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmZWF0dXJlTmFtZU5vcm1hbGl6ZWQuaW5jbHVkZXMoZmlsdGVyTm9ybWFsaXplZCk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gZ2V0QnV0dG9uU3R5bGUocGI6IE9nY1B1c2hCdXR0b24pOiB7fSB7XHJcblxyXG4gIC8vICAgbGV0IHN0eWxlcztcclxuICAvLyAgIGlmIChwYi5jb2xvcikge1xyXG4gIC8vICAgICBzdHlsZXMgPSB7XHJcbiAgLy8gICAgICAgJ2JhY2tncm91bmQtY29sb3InOiBwYi5lbmFibGVkID8gYHJnYmEoJHtwYi5jb2xvcn0pYCA6IGByZ2JhKDI1NSwyNTUsMjU1LDApYFxyXG4gIC8vICAgICB9O1xyXG4gIC8vICAgfSBlbHNlIHtcclxuICAvLyAgICAgc3R5bGVzID0ge1xyXG4gIC8vICAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogcGIuZW5hYmxlZCA/ICdhY2NlbnQnOiBgcmdiYSgyNTUsMjU1LDI1NSwwKWAsXHJcbiAgLy8gICAgICAgJ2NvbG9yJzogcGIuZW5hYmxlZCA/IGByZ2JhKDAsMCwwLDAuOSlgIDogYHJnYmEoMzMsMzMsMzMsMC4zOClgXHJcbiAgLy8gICAgIH1cclxuICAvLyAgIH1cclxuICAvLyAgIHJldHVybiBzdHlsZXM7XHJcbiAgLy8gfVxyXG5cclxuICBnZXRCdXR0b25Db2xvcihwdXNoQnV0dG9uOiBPZ2NQdXNoQnV0dG9uKToge30ge1xyXG4gICAgbGV0IHN0eWxlcztcclxuICAgIGlmIChwdXNoQnV0dG9uLmNvbG9yICYmIHB1c2hCdXR0b24uZW5hYmxlZCkge1xyXG4gICAgICBzdHlsZXMgPSB7XHJcbiAgICAgICAgJ2JhY2tncm91bmQtY29sb3InOiBgcmdiYSgke3B1c2hCdXR0b24uY29sb3J9KWBcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIHJldHVybiBzdHlsZXM7XHJcbiAgfVxyXG5cclxuICBidW5kbGVJc1ZlcnRpY2FsKGJ1bmRsZTogT2djU2VsZWN0b3JCdW5kbGUpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBidW5kbGUudmVydGljYWwgPyBidW5kbGUudmVydGljYWwgOiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25QdXNoQnV0dG9uc0NoYW5nZUdyb3VwKCkge1xyXG4gICAgdGhpcy5nZXRQdXNoQnV0dG9uc0dyb3VwcygpLm1hcCgoZ3JvdXApID0+IChncm91cC5lbmFibGVkID0gZmFsc2UpKTtcclxuICAgIHRoaXMuZ2V0UHVzaEJ1dHRvbnNHcm91cHMoKS5maW5kKFxyXG4gICAgICAoZ3JvdXApID0+IGdyb3VwID09PSB0aGlzLmN1cnJlbnRQdXNoQnV0dG9uc0dyb3VwXHJcbiAgICApLmVuYWJsZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbkNoZWNrYm94ZXNDaGFuZ2VHcm91cCgpIHtcclxuICAgIHRoaXMuZ2V0Q2hlY2tib3hlc0dyb3VwcygpLm1hcCgoZ3JvdXApID0+IChncm91cC5lbmFibGVkID0gZmFsc2UpKTtcclxuICAgIHRoaXMuZ2V0Q2hlY2tib3hlc0dyb3VwcygpLmZpbmQoXHJcbiAgICAgIChncm91cCkgPT4gZ3JvdXAgPT09IHRoaXMuY3VycmVudENoZWNrYm94ZXNHcm91cFxyXG4gICAgKS5lbmFibGVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25SYWRpb0J1dHRvbnNDaGFuZ2VHcm91cCgpIHtcclxuICAgIHRoaXMuZ2V0UmFkaW9CdXR0b25zR3JvdXBzKCkubWFwKChncm91cCkgPT4gKGdyb3VwLmVuYWJsZWQgPSBmYWxzZSkpO1xyXG4gICAgdGhpcy5nZXRSYWRpb0J1dHRvbnNHcm91cHMoKS5maW5kKFxyXG4gICAgICAoZ3JvdXApID0+IGdyb3VwID09PSB0aGlzLmN1cnJlbnRSYWRpb0J1dHRvbnNHcm91cFxyXG4gICAgKS5lbmFibGVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25TZWxlY3RDaGFuZ2VHcm91cCgpIHtcclxuICAgIHRoaXMuZ2V0U2VsZWN0R3JvdXBzKCkubWFwKChncm91cCkgPT4gKGdyb3VwLmVuYWJsZWQgPSBmYWxzZSkpO1xyXG4gICAgdGhpcy5nZXRTZWxlY3RHcm91cHMoKS5maW5kKFxyXG4gICAgICAoZ3JvdXApID0+IGdyb3VwID09PSB0aGlzLmN1cnJlbnRTZWxlY3RHcm91cFxyXG4gICAgKS5lbmFibGVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25BdXRvY29tcGxldGVDaGFuZ2VHcm91cCgpIHtcclxuICAgIHRoaXMuZ2V0QXV0b2NvbXBsZXRlR3JvdXBzKCkubWFwKChncm91cCkgPT4gKGdyb3VwLmVuYWJsZWQgPSBmYWxzZSkpO1xyXG4gICAgdGhpcy5nZXRBdXRvY29tcGxldGVHcm91cHMoKS5maW5kKFxyXG4gICAgICAoZ3JvdXApID0+IGdyb3VwID09PSB0aGlzLmN1cnJlbnRBdXRvY29tcGxldGVHcm91cFxyXG4gICAgKS5lbmFibGVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIG9uU2VsZWN0aW9uQ2hhbmdlKGN1cnJlbnRPZ2NTZWxlY3Rpb24/LCBzZWxlY3RvclR5cGU/KSB7XHJcbiAgICBjbGVhclRpbWVvdXQodGhpcy5hcHBseUZpbHRlcnNUaW1lb3V0KTtcclxuICAgIGlmIChzZWxlY3RvclR5cGUgPT09ICdyYWRpb0J1dHRvbicpIHtcclxuICAgICAgdGhpcy5lbXB0eVJhZGlvQnV0dG9ucygpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjdXJyZW50T2djU2VsZWN0aW9uKSB7XHJcbiAgICAgIGN1cnJlbnRPZ2NTZWxlY3Rpb24uZW5hYmxlZCA9ICFjdXJyZW50T2djU2VsZWN0aW9uLmVuYWJsZWQ7XHJcbiAgICB9XHJcbiAgICB0aGlzLmFwcGx5RmlsdGVyc1RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcclxuICAgIH0sIDc1MCk7XHJcbiAgfVxyXG5cclxuICBlbXB0eVJhZGlvQnV0dG9ucygpIHtcclxuICAgIHRoaXMuY3VycmVudFJhZGlvQnV0dG9uc0dyb3VwLmNvbXB1dGVkU2VsZWN0b3JzLmZvckVhY2goKGNvbXBTZWxlY3QpID0+IHtcclxuICAgICAgY29tcFNlbGVjdC5zZWxlY3RvcnMubWFwKChzZWxlY3RvcikgPT4gKHNlbGVjdG9yLmVuYWJsZWQgPSBmYWxzZSkpO1xyXG5cclxuICAgICAgdGhpcy5hcHBseUZpbHRlcnNUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcclxuICAgICAgfSwgNzUwKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZW1wdHlTZWxlY3QoKSB7XHJcbiAgICB0aGlzLnNlbGVjdEVuYWJsZWQgPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBlbXB0eUF1dG9jb21wbGV0ZSgpIHtcclxuICAgIHRoaXMuYXV0b2NvbXBsZXRlRW5hYmxlZCA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuZm9ybS5jb250cm9sc1snYXV0b2NvbXBsZXRlJ10uc2V0VmFsdWUoJycpO1xyXG4gICAgdGhpcy5mb3JtLmNvbnRyb2xzWydhdXRvY29tcGxldGUnXS5tYXJrQXNVbnRvdWNoZWQoKTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZUFsbFNlbGVjdGlvbigpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdEFsbFNlbGVjdGVkKSB7XHJcbiAgICAgIGNvbnN0IGVuYWJsZWRzID0gW107XHJcbiAgICAgIHRoaXMuY3VycmVudFNlbGVjdEdyb3VwLmNvbXB1dGVkU2VsZWN0b3JzLmZvckVhY2goKGNvbXBTZWxlY3QpID0+IHtcclxuICAgICAgICBjb21wU2VsZWN0LnNlbGVjdG9ycz8uZm9yRWFjaCgoc2VsZWN0b3IpID0+IHtcclxuICAgICAgICAgIGVuYWJsZWRzLnB1c2goc2VsZWN0b3IpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5zZWwub3B0aW9ucy5mb3JFYWNoKChpdGVtOiBNYXRPcHRpb24pID0+IGl0ZW0uc2VsZWN0KCkpO1xyXG4gICAgICB0aGlzLnNlbGVjdEVuYWJsZWRzID0gZW5hYmxlZHM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbC5vcHRpb25zLmZvckVhY2goKGl0ZW06IE1hdE9wdGlvbikgPT4gaXRlbS5kZXNlbGVjdCgpKTtcclxuICAgICAgdGhpcy5zZWxlY3RFbmFibGVkcyA9IFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VsZWN0T3B0aW9uQ2xpY2sodmFsdWUsIGJ1bmRsZSwgZXZlbnQ/KSB7XHJcbiAgICBpZiAoYnVuZGxlLm11bHRpcGxlKSB7XHJcbiAgICAgIGNvbnN0IGVuYWJsZWRzID0gdGhpcy5zZWxlY3RFbmFibGVkcztcclxuICAgICAgbGV0IG5ld1N0YXR1cyA9IHRydWU7XHJcbiAgICAgIHRoaXMuc2VsLm9wdGlvbnMuZm9yRWFjaCgoaXRlbTogTWF0T3B0aW9uKSA9PiB7XHJcbiAgICAgICAgaWYgKCFpdGVtLnNlbGVjdGVkKSB7XHJcbiAgICAgICAgICBuZXdTdGF0dXMgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnNlbGVjdEFsbFNlbGVjdGVkID0gbmV3U3RhdHVzO1xyXG4gICAgICBpZiAoZXZlbnQuaXNVc2VySW5wdXQpIHtcclxuICAgICAgICBpZiAoZW5hYmxlZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICBmb3IgKGNvbnN0IGVuYWJsZWQgb2YgZW5hYmxlZHMpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQudGl0bGUgPT09IHZhbHVlLnRpdGxlKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGVuYWJsZWQuZW5hYmxlZCAmJiB2YWx1ZS5lbmFibGVkKSB7XHJcbiAgICAgICAgICAgICAgICBlbmFibGVkcy5zcGxpY2UoZW5hYmxlZHMuaW5kZXhPZihlbmFibGVkKSwgMSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEVuYWJsZWRzID0gZW5hYmxlZHM7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZW5hYmxlZHMuaW5kZXhPZihlbmFibGVkKSA9PT0gZW5hYmxlZHMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICAgIGVuYWJsZWRzLnB1c2godmFsdWUpO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0RW5hYmxlZHMgPSBlbmFibGVkcztcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBlbmFibGVkcy5wdXNoKHZhbHVlKTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0RW5hYmxlZHMgPSBlbmFibGVkcztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0RW5hYmxlZCA9IHZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXV0b2NvbXBsZXRlT3B0aW9uQ2xpY2sodmFsdWUpIHtcclxuICAgIHRoaXMuYXV0b2NvbXBsZXRlRW5hYmxlZCA9IHZhbHVlLnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgZGlzcGxheUZuKGRvbSk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gZG9tID8gZG9tLnZhbHVlIDogdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBseUZpbHRlcnMoKSB7XHJcbiAgICBsZXQgZmlsdGVyUXVlcnlTdHJpbmcgPSAnJztcclxuICAgIGNvbnN0IGNvbmRpdGlvbnMgPSBbXTtcclxuICAgIGNvbnN0IGN1cnJlbnRHcm91cHMgPSBbXHJcbiAgICAgIHRoaXMuY3VycmVudFB1c2hCdXR0b25zR3JvdXAsXHJcbiAgICAgIHRoaXMuY3VycmVudENoZWNrYm94ZXNHcm91cCxcclxuICAgICAgdGhpcy5jdXJyZW50UmFkaW9CdXR0b25zR3JvdXAsXHJcbiAgICAgIHRoaXMuY3VycmVudFNlbGVjdEdyb3VwLFxyXG4gICAgICB0aGlzLmN1cnJlbnRBdXRvY29tcGxldGVHcm91cFxyXG4gICAgXTtcclxuICAgIGZvciAoY29uc3QgY3VycmVudEdyb3VwIG9mIGN1cnJlbnRHcm91cHMpIHtcclxuICAgICAgaWYgKGN1cnJlbnRHcm91cC5jb21wdXRlZFNlbGVjdG9ycykge1xyXG4gICAgICAgIGN1cnJlbnRHcm91cC5jb21wdXRlZFNlbGVjdG9ycy5tYXAoKHNlbGVjdG9yQnVuZGxlKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBidW5kbGVDb25kaXRpb24gPSBbXTtcclxuICAgICAgICAgIHNlbGVjdG9yQnVuZGxlLnNlbGVjdG9yc1xyXG4gICAgICAgICAgICA/LmZpbHRlcigob2djU2VsZWN0b3IpID0+IG9nY1NlbGVjdG9yLmVuYWJsZWQgPT09IHRydWUpXHJcbiAgICAgICAgICAgIC5mb3JFYWNoKChlbmFibGVkU2VsZWN0b3IpID0+XHJcbiAgICAgICAgICAgICAgYnVuZGxlQ29uZGl0aW9uLnB1c2goZW5hYmxlZFNlbGVjdG9yLmZpbHRlcnMpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICBpZiAoYnVuZGxlQ29uZGl0aW9uLmxlbmd0aCA+PSAxKSB7XHJcbiAgICAgICAgICAgIGlmIChidW5kbGVDb25kaXRpb24ubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgY29uZGl0aW9ucy5wdXNoKGJ1bmRsZUNvbmRpdGlvblswXSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgY29uZGl0aW9ucy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGxvZ2ljYWw6IHNlbGVjdG9yQnVuZGxlLmxvZ2ljYWwsXHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJzOiBidW5kbGVDb25kaXRpb25cclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5pc1RlbXBvcmFsT3BlcmF0b3IoKSAmJiB0aGlzLl9jdXJyZW50RmlsdGVyLmFjdGl2ZSkge1xyXG4gICAgICBjb25kaXRpb25zLnB1c2goXHJcbiAgICAgICAgdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5pbnRlcmZhY2VPZ2NGaWx0ZXJzWzBdXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAoY29uZGl0aW9ucy5sZW5ndGggPj0gMSkge1xyXG4gICAgICBmaWx0ZXJRdWVyeVN0cmluZyA9IHRoaXMub2djRmlsdGVyV3JpdGVyLmJ1aWxkRmlsdGVyKFxyXG4gICAgICAgIGNvbmRpdGlvbnMubGVuZ3RoID09PSAxXHJcbiAgICAgICAgICA/IGNvbmRpdGlvbnNbMF1cclxuICAgICAgICAgIDogKHsgbG9naWNhbDogJ0FuZCcsIGZpbHRlcnM6IGNvbmRpdGlvbnMgfSBhcyBJZ29PZ2NGaWx0ZXJPYmplY3QpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5kYXRhc291cmNlLm9wdGlvbnMudHlwZSA9PT0gJ3dtcycpIHtcclxuICAgICAgdGhpcy5vZ2NGaWx0ZXJTZXJ2aWNlLmZpbHRlckJ5T2djKFxyXG4gICAgICAgIHRoaXMuZGF0YXNvdXJjZSBhcyBXTVNEYXRhU291cmNlLFxyXG4gICAgICAgIGZpbHRlclF1ZXJ5U3RyaW5nXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5kYXRhc291cmNlLm9wdGlvbnMudHlwZSA9PT0gJ3dmcycpIHtcclxuICAgICAgLy8gVE9ETzogQ2hlY2sgaG93IHRvIHByZXZlbnQgd2ZzIHRvIHJlZnJlc2ggd2hlbiBmaWx0ZXIgaWNvbiBpcyBwdXNoZWQuLi5cclxuICAgICAgdGhpcy5kYXRhc291cmNlLm9sLnJlZnJlc2goKTtcclxuICAgIH1cclxuICAgIHRoaXMuZGF0YXNvdXJjZS5zZXRPZ2NGaWx0ZXJzKHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMsIHRydWUpO1xyXG4gIH1cclxuXHJcbiAgaXNNb3JlUmVzdWx0cyhidW5kbGUsIHR5cGUpIHtcclxuICAgIGxldCBzZWxlY3RvcnNMZW5ndGggPSAwO1xyXG4gICAgZm9yIChjb25zdCBzZWxlY3RvcnMgb2YgYnVuZGxlLnNlbGVjdG9ycykge1xyXG4gICAgICBzZWxlY3RvcnNMZW5ndGgrKztcclxuICAgIH1cclxuICAgIGNvbnN0IGluZGV4ID1cclxuICAgICAgdHlwZSA9PT0gJ3JhZGlvJyA/IHRoaXMucmFkaW9CdXR0b25zSW5kZXggOiB0aGlzLmNoZWNrYm94ZXNJbmRleDtcclxuICAgIHJldHVybiBzZWxlY3RvcnNMZW5ndGggPiBpbmRleDtcclxuICB9XHJcblxyXG4gIGRpc3BsYXlNb3JlUmVzdWx0cyh0eXBlKSB7XHJcbiAgICB0eXBlID09PSAncmFkaW8nXHJcbiAgICAgID8gKHRoaXMucmFkaW9CdXR0b25zSW5kZXggKz0gNSlcclxuICAgICAgOiAodGhpcy5jaGVja2JveGVzSW5kZXggKz0gNSk7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBpc0xlc3NSZXN1bHRzKGJ1bmRsZSwgdHlwZSkge1xyXG4gICAgbGV0IHNlbGVjdG9yc0xlbmd0aCA9IDA7XHJcbiAgICBmb3IgKGNvbnN0IHNlbGVjdG9ycyBvZiBidW5kbGUuc2VsZWN0b3JzKSB7XHJcbiAgICAgIHNlbGVjdG9yc0xlbmd0aCsrO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaW5kZXggPVxyXG4gICAgICB0eXBlID09PSAncmFkaW8nID8gdGhpcy5yYWRpb0J1dHRvbnNJbmRleCA6IHRoaXMuY2hlY2tib3hlc0luZGV4O1xyXG4gICAgcmV0dXJuIHRoaXMuYmFzZUluZGV4ICE9PSBpbmRleCAmJiBzZWxlY3RvcnNMZW5ndGggPiB0aGlzLmJhc2VJbmRleDtcclxuICB9XHJcblxyXG4gIGRpc3BsYXlMZXNzUmVzdWx0cyh0eXBlKSB7XHJcbiAgICB0eXBlID09PSAncmFkaW8nXHJcbiAgICAgID8gKHRoaXMucmFkaW9CdXR0b25zSW5kZXggPSB0aGlzLmJhc2VJbmRleClcclxuICAgICAgOiAodGhpcy5jaGVja2JveGVzSW5kZXggPSB0aGlzLmJhc2VJbmRleCk7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBpc1RlbXBvcmFsT3BlcmF0b3IoKSB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLmN1cnJlbnRGaWx0ZXI/Lm9wZXJhdG9yPy50b0xvd2VyQ2FzZSgpID09PVxyXG4gICAgICB0aGlzLm9nY0ZpbHRlck9wZXJhdG9yLkR1cmluZy50b0xvd2VyQ2FzZSgpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlUHJvcGVydHkodmFsdWU6IGFueSwgcG9zPzogbnVtYmVyLCByZWZyZXNoRmlsdGVyID0gdHJ1ZSkge1xyXG4gICAgY29uc3QgZGV0ZWN0ZWRQcm9wZXJ0eSA9IHRoaXMuZGV0ZWN0UHJvcGVydHkocG9zKTtcclxuICAgIGlmIChkZXRlY3RlZFByb3BlcnR5KSB7XHJcbiAgICAgIHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuaW50ZXJmYWNlT2djRmlsdGVycy5maW5kKFxyXG4gICAgICAgIChmaWx0ZXIpID0+IGZpbHRlci5maWx0ZXJpZCA9PT0gdGhpcy5jdXJyZW50RmlsdGVyLmZpbHRlcmlkXHJcbiAgICAgIClbZGV0ZWN0ZWRQcm9wZXJ0eV0gPSB2YWx1ZTtcclxuXHJcbiAgICAgIGlmIChyZWZyZXNoRmlsdGVyKSB7XHJcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZGV0ZWN0UHJvcGVydHkocG9zPzogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIHN3aXRjaCAodGhpcy5jdXJyZW50RmlsdGVyLm9wZXJhdG9yKSB7XHJcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc05vdEVxdWFsVG86XHJcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc0VxdWFsVG86XHJcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc0dyZWF0ZXJUaGFuOlxyXG4gICAgICBjYXNlIE9nY0ZpbHRlck9wZXJhdG9yLlByb3BlcnR5SXNHcmVhdGVyVGhhbk9yRXF1YWxUbzpcclxuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzTGVzc1RoYW46XHJcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc0xlc3NUaGFuT3JFcXVhbFRvOlxyXG4gICAgICAgIHJldHVybiAnZXhwcmVzc2lvbic7XHJcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc0xpa2U6XHJcbiAgICAgICAgcmV0dXJuICdwYXR0ZXJuJztcclxuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzQmV0d2VlbjpcclxuICAgICAgICByZXR1cm4gcG9zICYmIHBvcyA9PT0gMVxyXG4gICAgICAgICAgPyAnbG93ZXJCb3VuZGFyeSdcclxuICAgICAgICAgIDogcG9zICYmIHBvcyA9PT0gMlxyXG4gICAgICAgICAgPyAndXBwZXJCb3VuZGFyeSdcclxuICAgICAgICAgIDogdW5kZWZpbmVkO1xyXG4gICAgICBjYXNlIE9nY0ZpbHRlck9wZXJhdG9yLkR1cmluZzpcclxuICAgICAgICByZXR1cm4gcG9zICYmIHBvcyA9PT0gMVxyXG4gICAgICAgICAgPyAnYmVnaW4nXHJcbiAgICAgICAgICA6IHBvcyAmJiBwb3MgPT09IDJcclxuICAgICAgICAgID8gJ2VuZCdcclxuICAgICAgICAgIDogdW5kZWZpbmVkO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCI+XHJcbiAgPGRpdiAqbmdGb3I9XCJsZXQgc2VsZWN0b3Igb2Ygb2djRmlsdGVyc1NlbGVjdG9yc1wiPlxyXG4gICAgPGRpdlxyXG4gICAgICBjbGFzcz1cInB1c2hCdXR0b25Hcm91cHNcIlxyXG4gICAgICAqbmdJZj1cInNlbGVjdG9yLnNlbGVjdG9yVHlwZSA9PT0gJ3B1c2hCdXR0b24nXCJcclxuICAgID5cclxuICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJncm91cHNTZWxlY3RvclwiICpuZ0lmPVwiZ2V0UHVzaEJ1dHRvbnNHcm91cHMoKS5sZW5ndGggPiAxXCI+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgPG1hdC1zZWxlY3RcclxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicHVzaEJ1dHRvbnNHcm91cFwiXHJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmxheWVyLmxlZ2VuZC5zZWxlY3RTdHlsZScgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxyXG4gICAgICAgICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcclxuICAgICAgICAgICAgWyh2YWx1ZSldPVwiY3VycmVudFB1c2hCdXR0b25zR3JvdXBcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvblxyXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBzZWxlY3Rvckdyb3VwIG9mIGdldFB1c2hCdXR0b25zR3JvdXBzKClcIlxyXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJzZWxlY3Rvckdyb3VwXCJcclxuICAgICAgICAgICAgICA+e3sgc2VsZWN0b3JHcm91cC50aXRsZSB9fVxyXG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAqbmdGb3I9XCJsZXQgYnVuZGxlIG9mIGN1cnJlbnRQdXNoQnV0dG9uc0dyb3VwLmNvbXB1dGVkU2VsZWN0b3JzXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxoMz57eyBidW5kbGUudGl0bGUgfX08L2gzPlxyXG4gICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZS1ncm91cFxyXG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicHVzaEJ1dHRvbnNcIlxyXG4gICAgICAgICAgY2xhc3M9XCJtYXQtdHlwb2dyYXBoeVwiXHJcbiAgICAgICAgICBhcHBlYXJhbmNlPVwibGVnYWN5XCJcclxuICAgICAgICAgIHZlcnRpY2FsPVwie3sgYnVuZGxlSXNWZXJ0aWNhbChidW5kbGUpIH19XCJcclxuICAgICAgICAgIG11bHRpcGxlPVwidHJ1ZVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlXHJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvZ2NQdXNoQnV0dG9uIG9mIGJ1bmRsZS5zZWxlY3RvcnNcIlxyXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJnZXRUb29sVGlwKG9nY1B1c2hCdXR0b24pXCJcclxuICAgICAgICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcclxuICAgICAgICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXHJcbiAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz1cIm1hdGVyaWFsLXRvb2x0aXBcIlxyXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJnZXRCdXR0b25Db2xvcihvZ2NQdXNoQnV0dG9uKVwiXHJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cIm9nY1B1c2hCdXR0b24uZW5hYmxlZFwiXHJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2Uob2djUHVzaEJ1dHRvbiwgc2VsZWN0b3Iuc2VsZWN0b3JUeXBlKVwiXHJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJvZ2NQdXNoQnV0dG9uXCJcclxuICAgICAgICAgICAgPnt7IG9nY1B1c2hCdXR0b24udGl0bGUgfX1cclxuICAgICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XHJcbiAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cD5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hHcm91cHNcIiAqbmdJZj1cInNlbGVjdG9yLnNlbGVjdG9yVHlwZSA9PT0gJ2NoZWNrYm94J1wiPlxyXG4gICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgPGRpdiBjbGFzcz1cImdyb3Vwc1NlbGVjdG9yXCIgKm5nSWY9XCJnZXRDaGVja2JveGVzR3JvdXBzKCkubGVuZ3RoID4gMVwiPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIDxtYXQtc2VsZWN0XHJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNoZWNrYm94ZXNHcm91cFwiXHJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmxheWVyLmxlZ2VuZC5zZWxlY3RTdHlsZScgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxyXG4gICAgICAgICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcclxuICAgICAgICAgICAgWyh2YWx1ZSldPVwiY3VycmVudENoZWNrYm94ZXNHcm91cFwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uXHJcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHNlbGVjdG9yR3JvdXAgb2YgZ2V0Q2hlY2tib3hlc0dyb3VwcygpXCJcclxuICAgICAgICAgICAgICBbdmFsdWVdPVwic2VsZWN0b3JHcm91cFwiXHJcbiAgICAgICAgICAgICAgPnt7IHNlbGVjdG9yR3JvdXAudGl0bGUgfX1cclxuICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgKm5nRm9yPVwibGV0IGJ1bmRsZSBvZiBjdXJyZW50Q2hlY2tib3hlc0dyb3VwLmNvbXB1dGVkU2VsZWN0b3JzXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxoMz57eyBidW5kbGUudGl0bGUgfX08L2gzPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveGVzIG1hdC10eXBvZ3JhcGh5XCI+XHJcbiAgICAgICAgICA8bWF0LWNoZWNrYm94XHJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvZ2NDaGVja2JveCBvZiBidW5kbGUuc2VsZWN0b3JzXCJcclxuICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiZ2V0VG9vbFRpcChvZ2NDaGVja2JveClcIlxyXG4gICAgICAgICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxyXG4gICAgICAgICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcclxuICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPVwibWF0ZXJpYWwtdG9vbHRpcFwiXHJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cIm9nY0NoZWNrYm94LmVuYWJsZWRcIlxyXG4gICAgICAgICAgICAoY2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKG9nY0NoZWNrYm94LCBzZWxlY3Rvci5zZWxlY3RvclR5cGUpXCJcclxuICAgICAgICAgICAgW3ZhbHVlXT1cIm9nY0NoZWNrYm94XCJcclxuICAgICAgICAgICAgPnt7IG9nY0NoZWNrYm94LnRpdGxlIH19XHJcbiAgICAgICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8cFxyXG4gICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgaXNMZXNzUmVzdWx0cyhidW5kbGUsICdjaGVja2JveCcpIHx8XHJcbiAgICAgICAgICAgIGlzTW9yZVJlc3VsdHMoYnVuZGxlLCAnY2hlY2tib3gnKVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8dVxyXG4gICAgICAgICAgICAqbmdJZj1cImlzTGVzc1Jlc3VsdHMoYnVuZGxlLCAnY2hlY2tib3gnKVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwibGVzc1Jlc3VsdHMgbWF0LXR5cG9ncmFwaHlcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiZGlzcGxheUxlc3NSZXN1bHRzKCdjaGVja2JveCcpXCJcclxuICAgICAgICAgICAgPnt7ICdpZ28uZ2VvLmZpbHRlci5kaXNwbGF5TGVzc1Jlc3VsdHMnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICA8L3U+XHJcbiAgICAgICAgICA8dVxyXG4gICAgICAgICAgICAqbmdJZj1cImlzTW9yZVJlc3VsdHMoYnVuZGxlLCAnY2hlY2tib3gnKVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwibW9yZVJlc3VsdHMgbWF0LXR5cG9ncmFwaHlcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiZGlzcGxheU1vcmVSZXN1bHRzKCdjaGVja2JveCcpXCJcclxuICAgICAgICAgICAgPnt7ICdpZ28uZ2VvLmZpbHRlci5kaXNwbGF5TW9yZVJlc3VsdHMnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICA8L3U+XHJcbiAgICAgICAgPC9wPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXZcclxuICAgICAgY2xhc3M9XCJyYWRpb0J1dHRvbkdyb3Vwc1wiXHJcbiAgICAgICpuZ0lmPVwic2VsZWN0b3Iuc2VsZWN0b3JUeXBlID09PSAncmFkaW9CdXR0b24nXCJcclxuICAgID5cclxuICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJncm91cHNTZWxlY3RvclwiICpuZ0lmPVwiZ2V0UmFkaW9CdXR0b25zR3JvdXBzKCkubGVuZ3RoID4gMVwiPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIDxtYXQtc2VsZWN0XHJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInJhZGlvQnV0dG9uc0dyb3VwXCJcclxuICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8ubGF5ZXIubGVnZW5kLnNlbGVjdFN0eWxlJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXHJcbiAgICAgICAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxyXG4gICAgICAgICAgICBbKHZhbHVlKV09XCJjdXJyZW50UmFkaW9CdXR0b25zR3JvdXBcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvblxyXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBzZWxlY3Rvckdyb3VwIG9mIGdldFJhZGlvQnV0dG9uc0dyb3VwcygpXCJcclxuICAgICAgICAgICAgICBbdmFsdWVdPVwic2VsZWN0b3JHcm91cFwiXHJcbiAgICAgICAgICAgICAgPnt7IHNlbGVjdG9yR3JvdXAudGl0bGUgfX1cclxuICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgKm5nRm9yPVwibGV0IGJ1bmRsZSBvZiBjdXJyZW50UmFkaW9CdXR0b25zR3JvdXAuY29tcHV0ZWRTZWxlY3RvcnNcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGgzPnt7IGJ1bmRsZS50aXRsZSB9fTwvaDM+XHJcbiAgICAgICAgPG1hdC1yYWRpby1ncm91cCBmb3JtQ29udHJvbE5hbWU9XCJyYWRpb0J1dHRvbnNcIiBjbGFzcz1cIm1hdC10eXBvZ3JhcGh5XCI+XHJcbiAgICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvblxyXG4gICAgICAgICAgICAqbmdJZj1cImJ1bmRsZS51bmZpbHRlcmVkXCJcclxuICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8uZmlsdGVyLnJlc2V0RmlsdGVycycgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxyXG4gICAgICAgICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcclxuICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPVwibWF0ZXJpYWwtdG9vbHRpcFwiXHJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwiZW1wdHlSYWRpb0J1dHRvbnMoKVwiXHJcbiAgICAgICAgICAgID57eyAnaWdvLmdlby5maWx0ZXIucmVzZXRGaWx0ZXJzJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgPC9tYXQtcmFkaW8tYnV0dG9uPlxyXG4gICAgICAgICAgPG1hdC1yYWRpby1idXR0b25cclxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9nY1JhZGlvQnV0dG9uIG9mIGJ1bmRsZS5zZWxlY3RvcnNcIlxyXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJnZXRUb29sVGlwKG9nY1JhZGlvQnV0dG9uKVwiXHJcbiAgICAgICAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXHJcbiAgICAgICAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxyXG4gICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9XCJtYXRlcmlhbC10b29sdGlwXCJcclxuICAgICAgICAgICAgW2NoZWNrZWRdPVwib2djUmFkaW9CdXR0b24uZW5hYmxlZFwiXHJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2Uob2djUmFkaW9CdXR0b24sIHNlbGVjdG9yLnNlbGVjdG9yVHlwZSlcIlxyXG4gICAgICAgICAgICBbdmFsdWVdPVwib2djUmFkaW9CdXR0b25cIlxyXG4gICAgICAgICAgICA+e3sgb2djUmFkaW9CdXR0b24udGl0bGUgfX1cclxuICAgICAgICAgIDwvbWF0LXJhZGlvLWJ1dHRvbj5cclxuICAgICAgICAgIDxwXHJcbiAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgaXNMZXNzUmVzdWx0cyhidW5kbGUsICdyYWRpbycpIHx8IGlzTW9yZVJlc3VsdHMoYnVuZGxlLCAncmFkaW8nKVxyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8dVxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiaXNMZXNzUmVzdWx0cyhidW5kbGUsICdyYWRpbycpXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImxlc3NSZXN1bHRzIG1hdC10eXBvZ3JhcGh5XCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiZGlzcGxheUxlc3NSZXN1bHRzKCdyYWRpbycpXCJcclxuICAgICAgICAgICAgICA+e3sgJ2lnby5nZW8uZmlsdGVyLmRpc3BsYXlMZXNzUmVzdWx0cycgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgPC91PlxyXG4gICAgICAgICAgICA8dVxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiaXNNb3JlUmVzdWx0cyhidW5kbGUsICdyYWRpbycpXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cIm1vcmVSZXN1bHRzIG1hdC10eXBvZ3JhcGh5XCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiZGlzcGxheU1vcmVSZXN1bHRzKCdyYWRpbycpXCJcclxuICAgICAgICAgICAgICA+e3sgJ2lnby5nZW8uZmlsdGVyLmRpc3BsYXlNb3JlUmVzdWx0cycgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgPC91PlxyXG4gICAgICAgICAgPC9wPlxyXG4gICAgICAgIDwvbWF0LXJhZGlvLWdyb3VwPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RHcm91cHNcIiAqbmdJZj1cInNlbGVjdG9yLnNlbGVjdG9yVHlwZSA9PT0gJ3NlbGVjdCdcIj5cclxuICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJncm91cHNTZWxlY3RvclwiICpuZ0lmPVwiZ2V0U2VsZWN0R3JvdXBzKCkubGVuZ3RoID4gMVwiPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIDxtYXQtc2VsZWN0XHJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNlbGVjdEdyb3VwXCJcclxuICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8ubGF5ZXIubGVnZW5kLnNlbGVjdFN0eWxlJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXHJcbiAgICAgICAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxyXG4gICAgICAgICAgICBbKHZhbHVlKV09XCJjdXJyZW50U2VsZWN0R3JvdXBcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvblxyXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBzZWxlY3Rvckdyb3VwIG9mIGdldFNlbGVjdEdyb3VwcygpXCJcclxuICAgICAgICAgICAgICBbdmFsdWVdPVwic2VsZWN0b3JHcm91cFwiXHJcbiAgICAgICAgICAgICAgPnt7IHNlbGVjdG9yR3JvdXAudGl0bGUgfX1cclxuICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBidW5kbGUgb2YgY3VycmVudFNlbGVjdEdyb3VwLmNvbXB1dGVkU2VsZWN0b3JzXCI+XHJcbiAgICAgICAgPGgzPnt7IGJ1bmRsZS50aXRsZSB9fTwvaDM+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImdyb3Vwc1NlbGVjdG9yXCI+XHJcbiAgICAgICAgICA8bWF0LWJ1dHRvblxyXG4gICAgICAgICAgICAqbmdJZj1cImJ1bmRsZS51bmZpbHRlcmVkICYmICFidW5kbGUubXVsdGlwbGVcIlxyXG4gICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgY29sb3I9XCJ3YXJuXCJcclxuICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8uZmlsdGVyLnJlc2V0RmlsdGVycycgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxyXG4gICAgICAgICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcclxuICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPVwibWF0ZXJpYWwtdG9vbHRpcFwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJlbXB0eVNlbGVjdCgpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJmaWx0ZXItcmVtb3ZlXCI+PC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvbWF0LWJ1dHRvbj5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZFxyXG4gICAgICAgICAgICBbc3R5bGUud2lkdGguJV09XCJidW5kbGUud2lkdGggPyBidW5kbGUud2lkdGggOiB1bmRlZmluZWRcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYnVuZGxlLm11bHRpcGxlOyBlbHNlIG5vdE11bHRpXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcclxuICAgICAgICAgICAgICAgICNzZWxlY3Rpb25cclxuICAgICAgICAgICAgICAgIFttdWx0aXBsZV09XCJidW5kbGUubXVsdGlwbGVcIlxyXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImJ1bmRsZS50aXRsZVwiXHJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzZWxlY3RNdWx0aVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94ZXMgbWF0LXR5cG9ncmFwaHlcIj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveFxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYnVuZGxlLm11bHRpcGxlXCJcclxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdEFsbFNlbGVjdGVkXCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlQWxsU2VsZWN0aW9uKClcIlxyXG4gICAgICAgICAgICAgICAgICAgID5Ub3VzXHJcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvblxyXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgb2djU2VsZWN0IG9mIGJ1bmRsZS5zZWxlY3RvcnNcIlxyXG4gICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJnZXRUb29sVGlwKG9nY1NlbGVjdClcIlxyXG4gICAgICAgICAgICAgICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxyXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwRGVsYXk9XCI1MDBcIlxyXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9XCJtYXRlcmlhbC10b29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgKG9uU2VsZWN0aW9uQ2hhbmdlKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdE9wdGlvbkNsaWNrKCRldmVudC5zb3VyY2UudmFsdWUsIGJ1bmRsZSwgJGV2ZW50KVxyXG4gICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICBbdmFsdWVdPVwib2djU2VsZWN0XCJcclxuICAgICAgICAgICAgICAgICAgPnt7IG9nY1NlbGVjdC50aXRsZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm90TXVsdGk+XHJcbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgW3BsYWNlaG9sZGVyXT1cImJ1bmRsZS50aXRsZVwiIGZvcm1Db250cm9sTmFtZT1cInNlbGVjdFwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb25cclxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9nY1NlbGVjdCBvZiBidW5kbGUuc2VsZWN0b3JzXCJcclxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiZ2V0VG9vbFRpcChvZ2NTZWxlY3QpXCJcclxuICAgICAgICAgICAgICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcclxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcERlbGF5PVwiNTAwXCJcclxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPVwibWF0ZXJpYWwtdG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJvZ2NTZWxlY3RcIlxyXG4gICAgICAgICAgICAgICAgICAob25TZWxlY3Rpb25DaGFuZ2UpPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0T3B0aW9uQ2xpY2soJGV2ZW50LnNvdXJjZS52YWx1ZSwgYnVuZGxlKVxyXG4gICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICA+e3sgb2djU2VsZWN0LnRpdGxlIH19XHJcbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2XHJcbiAgICAgIGNsYXNzPVwiYXV0b2NvbXBsZXRlR3JvdXBzXCJcclxuICAgICAgKm5nSWY9XCJzZWxlY3Rvci5zZWxlY3RvclR5cGUgPT09ICdhdXRvY29tcGxldGUnXCJcclxuICAgID5cclxuICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJncm91cHNTZWxlY3RvclwiICpuZ0lmPVwiZ2V0QXV0b2NvbXBsZXRlR3JvdXBzKCkubGVuZ3RoID4gMVwiPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIDxtYXQtc2VsZWN0XHJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImF1dG9jb21wbGV0ZUdyb3VwXCJcclxuICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8ubGF5ZXIubGVnZW5kLnNlbGVjdFN0eWxlJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXHJcbiAgICAgICAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxyXG4gICAgICAgICAgICBbKHZhbHVlKV09XCJjdXJyZW50QXV0b2NvbXBsZXRlR3JvdXBcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvblxyXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBhdXRvY29tcGxldGVHcm91cCBvZiBnZXRBdXRvY29tcGxldGVHcm91cHMoKVwiXHJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cImF1dG9jb21wbGV0ZUdyb3VwXCJcclxuICAgICAgICAgICAgICA+e3sgYXV0b2NvbXBsZXRlR3JvdXAudGl0bGUgfX1cclxuICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgKm5nRm9yPVwibGV0IGJ1bmRsZSBvZiBjdXJyZW50QXV0b2NvbXBsZXRlR3JvdXAuY29tcHV0ZWRTZWxlY3RvcnNcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGgzPnt7IGJ1bmRsZS50aXRsZSB9fTwvaDM+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImdyb3Vwc1NlbGVjdG9yXCI+XHJcbiAgICAgICAgICA8bWF0LWJ1dHRvblxyXG4gICAgICAgICAgICAqbmdJZj1cImJ1bmRsZS51bmZpbHRlcmVkXCJcclxuICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgIGNvbG9yPVwid2FyblwiXHJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmZpbHRlci5yZXNldEZpbHRlcnMnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcclxuICAgICAgICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXHJcbiAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz1cIm1hdGVyaWFsLXRvb2x0aXBcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiZW1wdHlBdXRvY29tcGxldGUoKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwiZmlsdGVyLXJlbW92ZVwiPjwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L21hdC1idXR0b24+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGRcclxuICAgICAgICAgICAgKm5nSWY9XCJmaWx0ZXJlZE9nY0F1dG9jb21wbGV0ZVtidW5kbGUuaWRdXCJcclxuICAgICAgICAgICAgW3N0eWxlLndpZHRoLiVdPVwiYnVuZGxlLndpZHRoID8gYnVuZGxlLndpZHRoIDogdW5kZWZpbmVkXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiYXV0b2NvbXBsZXRlXCJcclxuICAgICAgICAgICAgICAjYXV0b2NvbXBsZXRlXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJhdXRvY29tcGxldGVcIlxyXG4gICAgICAgICAgICAgIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b1wiXHJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImJ1bmRsZS50aXRsZVwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDxtYXQtYXV0b2NvbXBsZXRlXHJcbiAgICAgICAgICAgICAgI2F1dG89XCJtYXRBdXRvY29tcGxldGVcIlxyXG4gICAgICAgICAgICAgICNhdXRvY29tcGxldGVcclxuICAgICAgICAgICAgICAob3B0aW9uU2VsZWN0ZWQpPVwiYXV0b2NvbXBsZXRlT3B0aW9uQ2xpY2soJGV2ZW50Lm9wdGlvbi52YWx1ZSlcIlxyXG4gICAgICAgICAgICAgIFtkaXNwbGF5V2l0aF09XCJkaXNwbGF5Rm5cIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPG1hdC1vcHRpb25cclxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxyXG4gICAgICAgICAgICAgICAgICBsZXQgb2djQXV0b2NvbXBsZXRlIG9mIGZpbHRlcmVkT2djQXV0b2NvbXBsZXRlW2J1bmRsZS5pZF1cclxuICAgICAgICAgICAgICAgICAgICB8IGFzeW5jXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cIm9nY0F1dG9jb21wbGV0ZVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAge3sgb2djQXV0b2NvbXBsZXRlLnZhbHVlIH19XHJcbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8L21hdC1hdXRvY29tcGxldGU+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Zvcm0+XHJcblxyXG48ZGl2ICpuZ0lmPVwiaXNUZW1wb3JhbE9wZXJhdG9yKClcIj5cclxuICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICA8aDMgKm5nSWY9XCIhY3VycmVudEZpbHRlci50aXRsZVwiPlxyXG4gICAge3sgJ2lnby5nZW8uZmlsdGVyLnJlcG9ydGluZ0RhdGUnIHwgdHJhbnNsYXRlIH19XHJcbiAgPC9oMz5cclxuICA8aDMgKm5nSWY9XCJjdXJyZW50RmlsdGVyLnRpdGxlXCI+e3sgY3VycmVudEZpbHRlci50aXRsZSB9fTwvaDM+XHJcbiAgPGlnby1vZ2MtZmlsdGVyLXRpbWVcclxuICAgIFsoZGF0YXNvdXJjZSldPVwiZGF0YXNvdXJjZVwiXHJcbiAgICBbKGN1cnJlbnRGaWx0ZXIpXT1cImN1cnJlbnRGaWx0ZXJcIlxyXG4gICAgKGNoYW5nZVByb3BlcnR5KT1cImNoYW5nZVByb3BlcnR5KCRldmVudC52YWx1ZSwgJGV2ZW50LnBvcylcIlxyXG4gID5cclxuICA8L2lnby1vZ2MtZmlsdGVyLXRpbWU+XHJcbjwvZGl2PlxyXG4iXX0=
|