@igo2/geo 1.13.0 → 1.13.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/icons/cross_black_18px.svg +88 -88
- package/assets/icons/place_blue_36px.svg +55 -55
- package/assets/icons/place_green_36px.svg +55 -55
- package/assets/icons/place_red_36px.svg +55 -55
- package/assets/icons/place_yellow_36px.svg +55 -55
- package/esm2020/lib/catalog/catalog-browser/catalog-browser-group.component.mjs +2 -2
- package/esm2020/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs +2 -2
- package/esm2020/lib/catalog/catalog-browser/catalog-browser.component.mjs +2 -2
- package/esm2020/lib/catalog/catalog-browser/catalog-browser.module.mjs +1 -1
- package/esm2020/lib/catalog/catalog-library/add-catalog-dialog.component.mjs +2 -2
- package/esm2020/lib/catalog/catalog-library/catalog-library-item.component.mjs +2 -2
- package/esm2020/lib/catalog/catalog-library/catalog-library.component.mjs +2 -2
- package/esm2020/lib/catalog/catalog-library/catalog-library.module.mjs +1 -1
- package/esm2020/lib/catalog/catalog.module.mjs +1 -1
- package/esm2020/lib/catalog/index.mjs +1 -1
- package/esm2020/lib/catalog/shared/catalog.abstract.mjs +1 -1
- package/esm2020/lib/catalog/shared/catalog.enum.mjs +1 -1
- package/esm2020/lib/catalog/shared/catalog.interface.mjs +1 -1
- package/esm2020/lib/catalog/shared/catalog.service.mjs +1 -1
- package/esm2020/lib/catalog/shared/index.mjs +1 -1
- package/esm2020/lib/datasource/datasource.module.mjs +1 -1
- package/esm2020/lib/datasource/index.mjs +1 -1
- package/esm2020/lib/datasource/shared/capabilities.service.mjs +22 -17
- package/esm2020/lib/datasource/shared/datasource.service.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/any-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/any-datasource.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/arcgisrest-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/arcgisrest-datasource.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/carto-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/carto-datasource.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/cluster-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/cluster-datasource.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/data.service.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/datasource.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/feature-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/feature-datasource.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/imagearcgisrest-datasource.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/index.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/mvt-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/mvt-datasource.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/osm-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/osm-datasource.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/tilearcgisrest-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/tilearcgisrest-datasource.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/tiledebug-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/tiledebug-datasource.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/websocket-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/websocket-datasource.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/wfs-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/wfs-datasource.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/wfs.service.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/wms-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/wms-datasource.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/wms-wfs.utils.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/wmts-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/wmts-datasource.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/xyz-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/xyz-datasource.mjs +1 -1
- package/esm2020/lib/datasource/shared/index.mjs +1 -1
- package/esm2020/lib/datasource/shared/options/index.mjs +1 -1
- package/esm2020/lib/datasource/shared/options/options-api.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/options/options-api.providers.mjs +1 -1
- package/esm2020/lib/datasource/shared/options/options-api.service.mjs +1 -1
- package/esm2020/lib/datasource/shared/options/options.service.mjs +1 -1
- package/esm2020/lib/datasource/utils/esri-style-generator.mjs +1 -1
- package/esm2020/lib/datasource/utils/index.mjs +1 -1
- package/esm2020/lib/datasource/utils/tilegrid.mjs +1 -1
- package/esm2020/lib/directions/directions-buttons/directions-buttons.component.mjs +2 -2
- package/esm2020/lib/directions/directions-buttons/index.mjs +1 -1
- package/esm2020/lib/directions/directions-inputs/directions-inputs.component.mjs +2 -2
- package/esm2020/lib/directions/directions-inputs/index.mjs +1 -1
- package/esm2020/lib/directions/directions-results/directions-results.component.mjs +2 -2
- package/esm2020/lib/directions/directions-results/index.mjs +1 -1
- package/esm2020/lib/directions/directions-sources/directions-source.interface.mjs +1 -1
- package/esm2020/lib/directions/directions-sources/directions-source.mjs +1 -1
- package/esm2020/lib/directions/directions-sources/directions-source.provider.mjs +1 -1
- package/esm2020/lib/directions/directions-sources/index.mjs +1 -1
- package/esm2020/lib/directions/directions-sources/osrm-directions-source.mjs +1 -1
- package/esm2020/lib/directions/directions.component.mjs +2 -2
- package/esm2020/lib/directions/directions.module.mjs +1 -1
- package/esm2020/lib/directions/index.mjs +1 -1
- package/esm2020/lib/directions/shared/directions-source.service.mjs +1 -1
- package/esm2020/lib/directions/shared/directions.enum.mjs +1 -1
- package/esm2020/lib/directions/shared/directions.interface.mjs +1 -1
- package/esm2020/lib/directions/shared/directions.service.mjs +1 -1
- package/esm2020/lib/directions/shared/directions.utils.mjs +1 -1
- package/esm2020/lib/directions/shared/index.mjs +1 -1
- package/esm2020/lib/directions/shared/store.mjs +1 -1
- package/esm2020/lib/download/download-button/download-button.component.mjs +2 -2
- package/esm2020/lib/download/download-button/index.mjs +1 -1
- package/esm2020/lib/download/download.module.mjs +1 -1
- package/esm2020/lib/download/index.mjs +1 -1
- package/esm2020/lib/download/shared/download.interface.mjs +1 -1
- package/esm2020/lib/download/shared/download.service.mjs +1 -1
- package/esm2020/lib/download/shared/index.mjs +1 -1
- package/esm2020/lib/draw/draw/draw-popup.component.mjs +5 -5
- package/esm2020/lib/draw/draw/draw-shorcuts.component.mjs +2 -2
- package/esm2020/lib/draw/draw/draw.component.mjs +384 -273
- package/esm2020/lib/draw/draw/draw.module.mjs +19 -15
- package/esm2020/lib/draw/drawingTool.module.mjs +1 -1
- package/esm2020/lib/draw/index.mjs +1 -1
- package/esm2020/lib/draw/shared/draw-icon.service.mjs +1 -1
- package/esm2020/lib/draw/shared/draw-style.service.mjs +35 -18
- package/esm2020/lib/draw/shared/draw.enum.mjs +1 -1
- package/esm2020/lib/draw/shared/draw.interface.mjs +1 -1
- package/esm2020/lib/draw/shared/draw.utils.mjs +1 -1
- package/esm2020/lib/draw/shared/index.mjs +1 -1
- package/esm2020/lib/feature/feature-details/feature-details.component.mjs +52 -27
- package/esm2020/lib/feature/feature-details/feature-details.directive.mjs +1 -1
- package/esm2020/lib/feature/feature-details/feature-details.module.mjs +1 -1
- package/esm2020/lib/feature/feature-form/feature-form.component.mjs +2 -2
- package/esm2020/lib/feature/feature-form/feature-form.module.mjs +1 -1
- package/esm2020/lib/feature/feature.module.mjs +1 -1
- package/esm2020/lib/feature/index.mjs +1 -1
- package/esm2020/lib/feature/shared/feature.enums.mjs +1 -1
- package/esm2020/lib/feature/shared/feature.interfaces.mjs +1 -1
- package/esm2020/lib/feature/shared/feature.utils.mjs +4 -5
- package/esm2020/lib/feature/shared/index.mjs +1 -1
- package/esm2020/lib/feature/shared/store.mjs +14 -2
- package/esm2020/lib/feature/shared/strategies/in-map-extent.mjs +1 -1
- package/esm2020/lib/feature/shared/strategies/in-map-resolution.mjs +1 -1
- package/esm2020/lib/feature/shared/strategies/index.mjs +1 -1
- package/esm2020/lib/feature/shared/strategies/loading-layer.mjs +1 -1
- package/esm2020/lib/feature/shared/strategies/loading.mjs +1 -1
- package/esm2020/lib/feature/shared/strategies/selection.mjs +1 -1
- package/esm2020/lib/feature/shared/strategies.utils.mjs +1 -1
- package/esm2020/lib/filter/filter.module.mjs +2 -2
- package/esm2020/lib/filter/index.mjs +1 -1
- package/esm2020/lib/filter/ogc-filter-button/index.mjs +1 -1
- package/esm2020/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +2 -2
- package/esm2020/lib/filter/ogc-filter-form/index.mjs +1 -1
- package/esm2020/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +3 -3
- package/esm2020/lib/filter/ogc-filter-selection/index.mjs +1 -1
- package/esm2020/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +3 -3
- package/esm2020/lib/filter/ogc-filter-time/index.mjs +1 -1
- package/esm2020/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.mjs +2 -2
- package/esm2020/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +3 -3
- package/esm2020/lib/filter/ogc-filterable-form/index.mjs +1 -1
- package/esm2020/lib/filter/ogc-filterable-form/ogc-filterable-form.component.mjs +2 -2
- package/esm2020/lib/filter/ogc-filterable-item/index.mjs +1 -1
- package/esm2020/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +44 -39
- package/esm2020/lib/filter/ogc-filterable-list/index.mjs +1 -1
- package/esm2020/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.mjs +1 -1
- package/esm2020/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs +23 -10
- package/esm2020/lib/filter/shared/filterable-datasource.pipe.mjs +1 -1
- package/esm2020/lib/filter/shared/index.mjs +1 -1
- package/esm2020/lib/filter/shared/ogc-filter-time.service.mjs +1 -1
- package/esm2020/lib/filter/shared/ogc-filter.enum.mjs +1 -1
- package/esm2020/lib/filter/shared/ogc-filter.interface.mjs +1 -1
- package/esm2020/lib/filter/shared/ogc-filter.mjs +1 -1
- package/esm2020/lib/filter/shared/ogc-filter.service.mjs +1 -1
- package/esm2020/lib/filter/shared/spatial-filter.enum.mjs +1 -1
- package/esm2020/lib/filter/shared/spatial-filter.interface.mjs +1 -1
- package/esm2020/lib/filter/shared/spatial-filter.service.mjs +1 -1
- package/esm2020/lib/filter/shared/time-filter.enum.mjs +1 -1
- package/esm2020/lib/filter/shared/time-filter.interface.mjs +1 -1
- package/esm2020/lib/filter/shared/time-filter.service.mjs +1 -1
- package/esm2020/lib/filter/spatial-filter/spatial-filter-item/index.mjs +1 -1
- package/esm2020/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +2 -2
- package/esm2020/lib/filter/spatial-filter/spatial-filter-list/index.mjs +1 -1
- package/esm2020/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs +2 -2
- package/esm2020/lib/filter/spatial-filter/spatial-filter-type/index.mjs +1 -1
- package/esm2020/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +2 -2
- package/esm2020/lib/filter/time-filter-button/index.mjs +1 -1
- package/esm2020/lib/filter/time-filter-button/time-filter-button.component.mjs +2 -2
- package/esm2020/lib/filter/time-filter-form/index.mjs +1 -1
- package/esm2020/lib/filter/time-filter-form/time-filter-form.component.mjs +2 -2
- package/esm2020/lib/filter/time-filter-item/index.mjs +1 -1
- package/esm2020/lib/filter/time-filter-item/time-filter-item.component.mjs +2 -2
- package/esm2020/lib/filter/time-filter-list/index.mjs +1 -1
- package/esm2020/lib/filter/time-filter-list/time-filter-list-binding.directive.mjs +1 -1
- package/esm2020/lib/filter/time-filter-list/time-filter-list.component.mjs +2 -2
- package/esm2020/lib/geo.module.mjs +1 -1
- package/esm2020/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs +1 -1
- package/esm2020/lib/geometry/geometry-form-field/geometry-form-field.component.mjs +2 -2
- package/esm2020/lib/geometry/geometry-form-field/geometry-form-field.module.mjs +1 -1
- package/esm2020/lib/geometry/geometry.module.mjs +1 -1
- package/esm2020/lib/geometry/index.mjs +1 -1
- package/esm2020/lib/geometry/shared/controls/draw.mjs +1 -1
- package/esm2020/lib/geometry/shared/controls/index.mjs +1 -1
- package/esm2020/lib/geometry/shared/controls/modify.mjs +1 -1
- package/esm2020/lib/geometry/shared/controls/slice.mjs +1 -1
- package/esm2020/lib/geometry/shared/geometry.errors.mjs +1 -1
- package/esm2020/lib/geometry/shared/geometry.interfaces.mjs +1 -1
- package/esm2020/lib/geometry/shared/geometry.utils.mjs +1 -1
- package/esm2020/lib/geometry/shared/index.mjs +1 -1
- package/esm2020/lib/import-export/export-button/export-button.component.mjs +2 -2
- package/esm2020/lib/import-export/export-button/index.mjs +1 -1
- package/esm2020/lib/import-export/import-export/import-export.component.mjs +98 -68
- package/esm2020/lib/import-export/import-export/index.mjs +1 -1
- package/esm2020/lib/import-export/import-export.module.mjs +6 -3
- package/esm2020/lib/import-export/index.mjs +1 -1
- package/esm2020/lib/import-export/shared/drop-geo-file.directive.mjs +1 -1
- package/esm2020/lib/import-export/shared/export.errors.mjs +1 -1
- package/esm2020/lib/import-export/shared/export.interface.mjs +1 -1
- package/esm2020/lib/import-export/shared/export.service.mjs +1 -1
- package/esm2020/lib/import-export/shared/export.type.mjs +1 -1
- package/esm2020/lib/import-export/shared/export.utils.mjs +1 -1
- package/esm2020/lib/import-export/shared/import.errors.mjs +1 -1
- package/esm2020/lib/import-export/shared/import.interface.mjs +1 -1
- package/esm2020/lib/import-export/shared/import.service.mjs +1 -1
- package/esm2020/lib/import-export/shared/import.utils.mjs +3 -2
- package/esm2020/lib/import-export/shared/index.mjs +1 -1
- package/esm2020/lib/import-export/style-list/index.mjs +1 -1
- package/esm2020/lib/import-export/style-list/style-list.interface.mjs +1 -1
- package/esm2020/lib/import-export/style-list/style-list.module.mjs +1 -1
- package/esm2020/lib/import-export/style-list/style-list.provider.mjs +1 -1
- package/esm2020/lib/import-export/style-list/style-list.service.mjs +1 -1
- package/esm2020/lib/layer/index.mjs +2 -1
- package/esm2020/lib/layer/layer-item/index.mjs +1 -1
- package/esm2020/lib/layer/layer-item/layer-item.component.mjs +2 -2
- package/esm2020/lib/layer/layer-legend/index.mjs +1 -1
- package/esm2020/lib/layer/layer-legend/layer-legend.component.mjs +28 -22
- package/esm2020/lib/layer/layer-legend-item/index.mjs +1 -1
- package/esm2020/lib/layer/layer-legend-item/layer-legend-item.component.mjs +2 -2
- package/esm2020/lib/layer/layer-legend-list/index.mjs +1 -1
- package/esm2020/lib/layer/layer-legend-list/layer-legend-list-binding.directive.mjs +1 -1
- package/esm2020/lib/layer/layer-legend-list/layer-legend-list.component.mjs +2 -2
- package/esm2020/lib/layer/layer-list/index.mjs +1 -1
- package/esm2020/lib/layer/layer-list/layer-list-binding.directive.mjs +1 -1
- package/esm2020/lib/layer/layer-list/layer-list.component.mjs +47 -28
- package/esm2020/lib/layer/layer-list/layer-list.enum.mjs +1 -1
- package/esm2020/lib/layer/layer-list-tool/index.mjs +1 -1
- package/esm2020/lib/layer/layer-list-tool/layer-list-tool.component.mjs +5 -5
- package/esm2020/lib/layer/layer-list-tool/layer-list-tool.enum.mjs +1 -1
- package/esm2020/lib/layer/layer-list-tool/layer-list-tool.interface.mjs +1 -1
- package/esm2020/lib/layer/layer-list-tool/layer-list-tool.service.mjs +1 -1
- package/esm2020/lib/layer/layer.module.mjs +19 -7
- package/esm2020/lib/layer/shared/clusterParam.mjs +1 -1
- package/esm2020/lib/layer/shared/index.mjs +1 -1
- package/esm2020/lib/layer/shared/layer.enums.mjs +1 -1
- package/esm2020/lib/layer/shared/layer.service.mjs +1 -1
- package/esm2020/lib/layer/shared/layers/any-layer.interface.mjs +1 -1
- package/esm2020/lib/layer/shared/layers/any-layer.mjs +1 -1
- package/esm2020/lib/layer/shared/layers/image-layer.interface.mjs +1 -1
- package/esm2020/lib/layer/shared/layers/image-layer.mjs +1 -1
- package/esm2020/lib/layer/shared/layers/index.mjs +1 -1
- package/esm2020/lib/layer/shared/layers/layer.interface.mjs +1 -1
- package/esm2020/lib/layer/shared/layers/layer.mjs +1 -1
- package/esm2020/lib/layer/shared/layers/tile-layer.interface.mjs +1 -1
- package/esm2020/lib/layer/shared/layers/tile-layer.mjs +1 -1
- package/esm2020/lib/layer/shared/layers/vector-layer.interface.mjs +1 -1
- package/esm2020/lib/layer/shared/layers/vector-layer.mjs +4 -1
- package/esm2020/lib/layer/shared/layers/vectortile-layer.interface.mjs +1 -1
- package/esm2020/lib/layer/shared/layers/vectortile-layer.mjs +1 -1
- package/esm2020/lib/layer/shared/style.service.mjs +1 -1
- package/esm2020/lib/layer/shared/vector-style.interface.mjs +1 -1
- package/esm2020/lib/layer/style-modal/index.mjs +2 -0
- package/esm2020/lib/layer/style-modal/style-modal.component.mjs +288 -0
- package/esm2020/lib/layer/track-feature-button/index.mjs +1 -1
- package/esm2020/lib/layer/track-feature-button/track-feature-button.component.mjs +2 -2
- package/esm2020/lib/layer/utils/image-watcher.mjs +1 -1
- package/esm2020/lib/layer/utils/index.mjs +1 -1
- package/esm2020/lib/layer/utils/layer.utils.mjs +1 -1
- package/esm2020/lib/layer/utils/outputLegend.mjs +1 -1
- package/esm2020/lib/layer/utils/tile-watcher.mjs +1 -1
- package/esm2020/lib/layer/utils/vector-watcher.mjs +1 -1
- package/esm2020/lib/map/baselayers-switcher/baselayers-switcher.animation.mjs +1 -1
- package/esm2020/lib/map/baselayers-switcher/baselayers-switcher.component.mjs +2 -2
- package/esm2020/lib/map/baselayers-switcher/index.mjs +1 -1
- package/esm2020/lib/map/baselayers-switcher/mini-basemap.component.mjs +2 -2
- package/esm2020/lib/map/geolocate-button/geolocate-button.component.mjs +21 -18
- package/esm2020/lib/map/geolocate-button/index.mjs +1 -1
- package/esm2020/lib/map/index.mjs +1 -1
- package/esm2020/lib/map/info-section/index.mjs +1 -1
- package/esm2020/lib/map/info-section/info-section.component.mjs +2 -2
- package/esm2020/lib/map/map-browser/index.mjs +1 -1
- package/esm2020/lib/map/map-browser/map-browser.component.mjs +2 -2
- package/esm2020/lib/map/map-center/index.mjs +1 -1
- package/esm2020/lib/map/map-center/map-center.component.mjs +2 -2
- package/esm2020/lib/map/map.module.mjs +1 -1
- package/esm2020/lib/map/menu-button/index.mjs +1 -1
- package/esm2020/lib/map/menu-button/menu-button.component.mjs +2 -2
- package/esm2020/lib/map/offline-button/index.mjs +1 -1
- package/esm2020/lib/map/offline-button/offline-button.component.mjs +2 -2
- package/esm2020/lib/map/rotation-button/index.mjs +1 -1
- package/esm2020/lib/map/rotation-button/rotation-button.component.mjs +41 -62
- package/esm2020/lib/map/shared/controllers/controller.mjs +1 -1
- package/esm2020/lib/map/shared/controllers/geolocation.mjs +1 -1
- package/esm2020/lib/map/shared/controllers/index.mjs +1 -1
- package/esm2020/lib/map/shared/controllers/view.mjs +11 -2
- package/esm2020/lib/map/shared/hover-feature.directive.mjs +10 -13
- package/esm2020/lib/map/shared/index.mjs +1 -1
- package/esm2020/lib/map/shared/linkedLayers.utils.mjs +3 -3
- package/esm2020/lib/map/shared/map-pointer-position.directive.mjs +1 -1
- package/esm2020/lib/map/shared/map.enums.mjs +1 -1
- package/esm2020/lib/map/shared/map.interface.mjs +1 -1
- package/esm2020/lib/map/shared/map.mjs +2 -1
- package/esm2020/lib/map/shared/map.service.mjs +1 -1
- package/esm2020/lib/map/shared/map.utils.mjs +1 -1
- package/esm2020/lib/map/shared/mapOffline.directive.mjs +1 -1
- package/esm2020/lib/map/shared/projection.interfaces.mjs +1 -1
- package/esm2020/lib/map/shared/projection.service.mjs +1 -1
- package/esm2020/lib/map/shared/projection.utils.mjs +1 -1
- package/esm2020/lib/map/swipe-control/index.mjs +1 -1
- package/esm2020/lib/map/swipe-control/swipe-control.component.mjs +2 -2
- package/esm2020/lib/map/utils/layer-watcher.mjs +1 -1
- package/esm2020/lib/map/wake-lock-button/index.mjs +1 -1
- package/esm2020/lib/map/wake-lock-button/wake-lock-button.component.mjs +2 -2
- package/esm2020/lib/map/zoom-button/index.mjs +1 -1
- package/esm2020/lib/map/zoom-button/zoom-button.component.mjs +2 -2
- package/esm2020/lib/measure/index.mjs +1 -1
- package/esm2020/lib/measure/measure.module.mjs +1 -1
- package/esm2020/lib/measure/measurer/measure-format.pipe.mjs +1 -1
- package/esm2020/lib/measure/measurer/measurer-dialog.component.mjs +2 -2
- package/esm2020/lib/measure/measurer/measurer-item.component.mjs +2 -2
- package/esm2020/lib/measure/measurer/measurer.component.mjs +2 -2
- package/esm2020/lib/measure/measurer/measurer.module.mjs +1 -1
- package/esm2020/lib/measure/shared/index.mjs +1 -1
- package/esm2020/lib/measure/shared/measure.enum.mjs +1 -1
- package/esm2020/lib/measure/shared/measure.interfaces.mjs +1 -1
- package/esm2020/lib/measure/shared/measure.utils.mjs +1 -1
- package/esm2020/lib/metadata/index.mjs +1 -1
- package/esm2020/lib/metadata/metadata-button/index.mjs +1 -1
- package/esm2020/lib/metadata/metadata-button/metadata-button.component.mjs +3 -3
- package/esm2020/lib/metadata/metadata.module.mjs +1 -1
- package/esm2020/lib/metadata/shared/index.mjs +1 -1
- package/esm2020/lib/metadata/shared/metadata.interface.mjs +1 -1
- package/esm2020/lib/metadata/shared/metadata.service.mjs +1 -1
- package/esm2020/lib/offline/geoDB/configFileToGeoDB.service.mjs +76 -0
- package/esm2020/lib/offline/geoDB/geoDB.enums.mjs +1 -1
- package/esm2020/lib/offline/geoDB/geoDB.interface.mjs +1 -1
- package/esm2020/lib/offline/geoDB/geoDB.service.mjs +7 -1
- package/esm2020/lib/offline/geoDB/index.mjs +2 -1
- package/esm2020/lib/offline/index.mjs +1 -1
- package/esm2020/lib/offline/shared/geo-network.service.mjs +1 -1
- package/esm2020/lib/offline/shared/index.mjs +1 -1
- package/esm2020/lib/overlay/index.mjs +1 -1
- package/esm2020/lib/overlay/overlay.module.mjs +1 -1
- package/esm2020/lib/overlay/shared/index.mjs +1 -1
- package/esm2020/lib/overlay/shared/overlay-marker-style.utils.mjs +1 -1
- package/esm2020/lib/overlay/shared/overlay.directive.mjs +1 -1
- package/esm2020/lib/overlay/shared/overlay.enum.mjs +1 -1
- package/esm2020/lib/overlay/shared/overlay.mjs +1 -1
- package/esm2020/lib/overlay/shared/overlay.service.mjs +1 -1
- package/esm2020/lib/overlay/shared/overlay.utils.mjs +1 -1
- package/esm2020/lib/print/index.mjs +1 -1
- package/esm2020/lib/print/print/print.component.mjs +2 -2
- package/esm2020/lib/print/print-form/index.mjs +1 -1
- package/esm2020/lib/print/print-form/print-form.component.mjs +2 -2
- package/esm2020/lib/print/print.module.mjs +1 -1
- package/esm2020/lib/print/shared/index.mjs +1 -1
- package/esm2020/lib/print/shared/print.interface.mjs +1 -1
- package/esm2020/lib/print/shared/print.service.mjs +1 -1
- package/esm2020/lib/print/shared/print.type.mjs +1 -1
- package/esm2020/lib/query/index.mjs +1 -1
- package/esm2020/lib/query/query.module.mjs +1 -1
- package/esm2020/lib/query/shared/index.mjs +1 -1
- package/esm2020/lib/query/shared/query-search-source.mjs +1 -1
- package/esm2020/lib/query/shared/query-search-source.providers.mjs +1 -1
- package/esm2020/lib/query/shared/query.directive.mjs +1 -1
- package/esm2020/lib/query/shared/query.enums.mjs +1 -1
- package/esm2020/lib/query/shared/query.interfaces.mjs +1 -1
- package/esm2020/lib/query/shared/query.service.mjs +4 -1
- package/esm2020/lib/query/shared/query.utils.mjs +1 -1
- package/esm2020/lib/search/index.mjs +1 -1
- package/esm2020/lib/search/search-bar/search-bar.component.mjs +16 -14
- package/esm2020/lib/search/search-bar/search-bar.module.mjs +1 -1
- package/esm2020/lib/search/search-bar/search-url-param.directive.mjs +1 -1
- package/esm2020/lib/search/search-results/search-results-add-button.component.mjs +2 -2
- package/esm2020/lib/search/search-results/search-results-item.component.mjs +2 -2
- package/esm2020/lib/search/search-results/search-results.component.mjs +2 -2
- package/esm2020/lib/search/search-results/search-results.module.mjs +1 -1
- package/esm2020/lib/search/search-selector/search-selector.component.mjs +2 -2
- package/esm2020/lib/search/search-selector/search-selector.module.mjs +1 -1
- package/esm2020/lib/search/search-settings/search-settings.component.mjs +2 -2
- package/esm2020/lib/search/search-settings/search-settings.module.mjs +1 -1
- package/esm2020/lib/search/search.module.mjs +1 -1
- package/esm2020/lib/search/shared/index.mjs +1 -1
- package/esm2020/lib/search/shared/search-pointer-summary.directive.mjs +1 -1
- package/esm2020/lib/search/shared/search-source-service.providers.mjs +1 -1
- package/esm2020/lib/search/shared/search-source.service.mjs +1 -1
- package/esm2020/lib/search/shared/search.enums.mjs +1 -1
- package/esm2020/lib/search/shared/search.interfaces.mjs +1 -1
- package/esm2020/lib/search/shared/search.service.mjs +1 -1
- package/esm2020/lib/search/shared/search.utils.mjs +13 -1
- package/esm2020/lib/search/shared/sources/cadastre.mjs +1 -1
- package/esm2020/lib/search/shared/sources/cadastre.providers.mjs +1 -1
- package/esm2020/lib/search/shared/sources/coordinates.interfaces.mjs +1 -1
- package/esm2020/lib/search/shared/sources/coordinates.mjs +1 -1
- package/esm2020/lib/search/shared/sources/coordinates.providers.mjs +1 -1
- package/esm2020/lib/search/shared/sources/icherche.interfaces.mjs +1 -1
- package/esm2020/lib/search/shared/sources/icherche.mjs +1 -1
- package/esm2020/lib/search/shared/sources/icherche.providers.mjs +1 -1
- package/esm2020/lib/search/shared/sources/ilayer.interfaces.mjs +1 -1
- package/esm2020/lib/search/shared/sources/ilayer.mjs +1 -1
- package/esm2020/lib/search/shared/sources/ilayer.providers.mjs +1 -1
- package/esm2020/lib/search/shared/sources/index.mjs +1 -1
- package/esm2020/lib/search/shared/sources/nominatim.interfaces.mjs +1 -1
- package/esm2020/lib/search/shared/sources/nominatim.mjs +2 -2
- package/esm2020/lib/search/shared/sources/nominatim.providers.mjs +1 -1
- package/esm2020/lib/search/shared/sources/source.interfaces.mjs +1 -1
- package/esm2020/lib/search/shared/sources/source.mjs +1 -1
- package/esm2020/lib/search/shared/sources/storedqueries.interfaces.mjs +1 -1
- package/esm2020/lib/search/shared/sources/storedqueries.mjs +1 -1
- package/esm2020/lib/search/shared/sources/storedqueries.providers.mjs +1 -1
- package/esm2020/lib/toast/index.mjs +1 -1
- package/esm2020/lib/toast/toast.component.mjs +2 -2
- package/esm2020/lib/toast/toast.module.mjs +1 -1
- package/esm2020/lib/utils/commonVectorStyle.interface.mjs +1 -1
- package/esm2020/lib/utils/commonVectorStyle.mjs +1 -1
- package/esm2020/lib/utils/googleLinks.mjs +1 -1
- package/esm2020/lib/utils/id-generator.mjs +1 -1
- package/esm2020/lib/utils/index.mjs +1 -1
- package/esm2020/lib/utils/osmLinks.mjs +1 -1
- package/esm2020/lib/wkt/index.mjs +1 -1
- package/esm2020/lib/wkt/shared/index.mjs +1 -1
- package/esm2020/lib/wkt/shared/wkt.service.mjs +15 -15
- package/esm2020/lib/wkt/wkt.module.mjs +1 -1
- package/esm2020/lib/workspace/confirmation-popup/confirmation-popup.component.mjs +2 -2
- package/esm2020/lib/workspace/confirmation-popup/confirmation-popup.module.mjs +1 -1
- package/esm2020/lib/workspace/confirmation-popup/index.mjs +1 -1
- package/esm2020/lib/workspace/index.mjs +1 -1
- package/esm2020/lib/workspace/shared/edition-workspace.mjs +8 -6
- package/esm2020/lib/workspace/shared/edition-workspace.service.mjs +9 -4
- package/esm2020/lib/workspace/shared/feature-workspace.mjs +1 -1
- package/esm2020/lib/workspace/shared/feature-workspace.service.mjs +1 -1
- package/esm2020/lib/workspace/shared/index.mjs +1 -1
- package/esm2020/lib/workspace/shared/wfs-workspace.mjs +1 -1
- package/esm2020/lib/workspace/shared/wfs-workspace.service.mjs +1 -1
- package/esm2020/lib/workspace/shared/wms-workspace.service.mjs +1 -1
- package/esm2020/lib/workspace/shared/workspace.utils.mjs +1 -1
- package/esm2020/lib/workspace/widgets/index.mjs +1 -1
- package/esm2020/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs +2 -2
- package/esm2020/lib/workspace/widgets/ogc-filter/ogc-filter.module.mjs +1 -1
- package/esm2020/lib/workspace/widgets/widgets.mjs +1 -1
- package/esm2020/lib/workspace/workspace-selector/workspace-selector.directive.mjs +1 -1
- package/esm2020/lib/workspace/workspace-selector/workspace-selector.module.mjs +1 -1
- package/esm2020/lib/workspace/workspace-updator/workspace-updator.directive.mjs +1 -1
- package/esm2020/lib/workspace/workspace-updator/workspace-updator.module.mjs +1 -1
- package/esm2020/lib/workspace/workspace.module.mjs +1 -1
- package/esm2020/public_api.mjs +1 -1
- package/fesm2015/igo2-geo.mjs +4313 -3672
- package/fesm2015/igo2-geo.mjs.map +1 -1
- package/fesm2020/igo2-geo.mjs +4530 -3916
- package/fesm2020/igo2-geo.mjs.map +1 -1
- package/lib/draw/draw/draw-popup.component.d.ts +0 -3
- package/lib/draw/draw/draw.component.d.ts +71 -50
- package/lib/draw/draw/draw.module.d.ts +13 -10
- package/lib/draw/shared/draw-style.service.d.ts +7 -1
- package/lib/draw/shared/draw.interface.d.ts +4 -0
- package/lib/feature/feature-details/feature-details.component.d.ts +4 -0
- package/lib/feature/shared/store.d.ts +1 -0
- package/lib/import-export/import-export/import-export.component.d.ts +2 -0
- package/lib/import-export/import-export.module.d.ts +1 -1
- package/lib/layer/index.d.ts +1 -0
- package/lib/layer/layer-list/layer-list.component.d.ts +3 -4
- package/lib/layer/layer.module.d.ts +20 -18
- package/lib/layer/shared/layers/layer.interface.d.ts +1 -0
- package/lib/layer/shared/layers/vector-layer.d.ts +2 -1
- package/lib/layer/style-modal/index.d.ts +1 -0
- package/lib/layer/style-modal/style-modal.component.d.ts +42 -0
- package/lib/map/geolocate-button/geolocate-button.component.d.ts +3 -1
- package/lib/map/rotation-button/rotation-button.component.d.ts +11 -12
- package/lib/map/shared/controllers/view.d.ts +6 -1
- package/lib/map/shared/hover-feature.directive.d.ts +0 -5
- package/lib/map/shared/map.interface.d.ts +2 -1
- package/lib/offline/geoDB/configFileToGeoDB.service.d.ts +13 -0
- package/lib/offline/geoDB/geoDB.interface.d.ts +10 -1
- package/lib/offline/geoDB/geoDB.service.d.ts +3 -1
- package/lib/offline/geoDB/index.d.ts +1 -0
- package/ngcc.config.js +3 -3
- package/package.json +8 -8
- package/style/geo.theming.scss +12 -12
|
@@ -804,4 +804,4 @@ PrintService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: PrintServic
|
|
|
804
804
|
providedIn: 'root'
|
|
805
805
|
}]
|
|
806
806
|
}], function () { return [{ type: i1.HttpClient }, { type: i2.MessageService }, { type: i2.ActivityService }, { type: i2.LanguageService }, { type: i2.ConfigService }]; }, null); })();
|
|
807
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL3ByaW50L3NoYXJlZC9wcmludC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxHQUFHLElBQUksS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNwQyxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxXQUFXLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxPQUFPLElBQUksS0FBSyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBRXpDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUkvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7Ozs7QUFhbEUsTUFBTSxPQUFPLFlBQVk7SUFJdkIsWUFDVSxJQUFnQixFQUNoQixjQUE4QixFQUM5QixlQUFnQyxFQUNoQyxlQUFnQyxFQUNoQyxhQUE0QjtRQUo1QixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO0lBQ25DLENBQUM7SUFFSixLQUFLLENBQUMsR0FBVyxFQUFF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UUFDdEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzt3RUFuOUJVLFlBQVk7a0VBQVosWUFBWSxXQUFaLFlBQVksbUJBRlgsTUFBTTt1RkFFUCxZQUFZO2NBSHhCLFVBQVU7ZUFBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5cbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIGZvcmtKb2luIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgYXMgcnhNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IHNhdmVBcyB9IGZyb20gJ2ZpbGUtc2F2ZXInO1xuaW1wb3J0IGpzcGRmIGZyb20gJ2pzcGRmJztcbmltcG9ydCBodG1sMmNhbnZhcyBmcm9tICdodG1sMmNhbnZhcyc7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIEpTWmlwIH0gZnJvbSAnanN6aXAnO1xuXG5pbXBvcnQgeyBTdWJqZWN0U3RhdHVzIH0gZnJvbSAnQGlnbzIvdXRpbHMnO1xuaW1wb3J0IHsgU2VjdXJlSW1hZ2VQaXBlIH0gZnJvbSAnQGlnbzIvY29tbW9uJztcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlLCBBY3Rpdml0eVNlcnZpY2UsIExhbmd1YWdlU2VydmljZSwgQ29uZmlnU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUnO1xuXG5pbXBvcnQgeyBJZ29NYXAgfSBmcm9tICcuLi8uLi9tYXAvc2hhcmVkL21hcCc7XG5pbXBvcnQgeyBmb3JtYXRTY2FsZSB9IGZyb20gJy4uLy4uL21hcC9zaGFyZWQvbWFwLnV0aWxzJztcbmltcG9ydCB7IExlZ2VuZE1hcFZpZXdPcHRpb25zIH0gZnJvbSAnLi4vLi4vbGF5ZXIvc2hhcmVkL2xheWVycy9sYXllci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgZ2V0TGF5ZXJzTGVnZW5kcyB9IGZyb20gJy4uLy4uL2xheWVyL3V0aWxzL291dHB1dExlZ2VuZCc7XG5cbmltcG9ydCB7IFByaW50T3B0aW9ucyB9IGZyb20gJy4vcHJpbnQuaW50ZXJmYWNlJztcblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgTmF2aWdhdG9yIHtcbiAgICBtc1NhdmVCbG9iPzogKGJsb2I6IGFueSwgZGVmYXVsdE5hbWU/OiBzdHJpbmcpID0+IGJvb2xlYW5cbiAgfVxufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBQcmludFNlcnZpY2Uge1xuICB6aXBGaWxlOiBKU1ppcDtcbiAgbmJGaWxlVG9Qcm9jZXNzOiBudW1iZXI7XG4gIGFjdGl2aXR5SWQ6IHN0cmluZztcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWN0aXZpdHlTZXJ2aWNlOiBBY3Rpdml0eVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBsYW5ndWFnZVNlcnZpY2U6IExhbmd1YWdlU2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2VcbiAgKSB7fVxuXG4gIHByaW50KG1hcDogSWdvTWFwLCBvcHRpb25zOiBQcmludE9wdGlvbnMpOiBTdWJqZWN0PGFueT4ge1xuICAgIGNvbnN0IHN0YXR1cyQgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgY29uc3QgcGFwZXJGb3JtYXQ6IHN0cmluZyA9IG9wdGlvbnMucGFwZXJGb3JtYXQ7XG4gICAgY29uc3QgcmVzb2x1dGlvbiA9ICtvcHRpb25zLnJlc29sdXRpb247IC8vIERlZmF1bHQgaXMgOTZcbiAgICBjb25zdCBvcmllbnRhdGlvbiA9IG9wdGlvbnMub3JpZW50YXRpb247XG4gICAgY29uc3QgbGVnZW5kUG9zdGlvbiA9IG9wdGlvbnMubGVnZW5kUG9zaXRpb247XG5cbiAgICB0aGlzLmFjdGl2aXR5SWQgPSB0aGlzLmFjdGl2aXR5U2VydmljZS5yZWdpc3RlcigpO1xuICAgIGNvbnN0IGRvYyA9IG5ldyBqc3BkZih7XG4gICAgICBvcmllbnRhdGlvbixcbiAgICAgIGZvcm1hdDogcGFwZXJGb3JtYXQudG9Mb3dlckNhc2UoKVxuICAgIH0pO1xuXG4gICAgY29uc3QgZGltZW5zaW9ucyA9IFtcbiAgICAgIGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS53aWR0aCxcbiAgICAgIGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS5oZWlnaHRcbiAgICBdO1xuXG4gICAgY29uc3QgbWFyZ2lucyA9IFsxMCwgMTAsIDEwLCAxMF07XG4gICAgY29uc3Qgd2lkdGggPSBkaW1lbnNpb25zWzBdIC0gbWFyZ2luc1szXSAtIG1hcmdpbnNbMV07XG4gICAgY29uc3QgaGVpZ2h0ID0gZGltZW5zaW9uc1sxXSAtIG1hcmdpbnNbMF0gLSBtYXJnaW5zWzJdO1xuICAgIGNvbnN0IHNpemUgPSBbd2lkdGgsIGhlaWdodF07XG4gICAgbGV0IHRpdGxlU2l6ZVJlc3VsdHMgPSBbMCwgMF07XG5cbiAgICBpZiAob3B0aW9ucy50aXRsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aXRsZVNpemVSZXN1bHRzID0gdGhpcy5nZXRUaXRsZVNpemUob3B0aW9ucy50aXRsZSwgd2lkdGgsIGhlaWdodCwgZG9jKTsgLy8gcmV0dXJuIDogc2l6ZShwdCkgYW5kIGxlZnQgbWFyZ2luIChtbSlcbiAgICAgIHRoaXMuYWRkVGl0bGUoZG9jLCBvcHRpb25zLnRpdGxlLCB0aXRsZVNpemVSZXN1bHRzWzBdLCBtYXJnaW5zWzNdICsgdGl0bGVTaXplUmVzdWx0c1sxXSwgdGl0bGVTaXplUmVzdWx0c1swXSAqICgyNS40IC8gNzIpKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuc3VidGl0bGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbGV0IHN1YnRpdGxlU2l6ZVJlc3VsdCA9IDA7XG4gICAgICBjb25zdCB0aXRsZUggPSB0aXRsZVNpemVSZXN1bHRzWzBdO1xuICAgICAgc3VidGl0bGVTaXplUmVzdWx0ID0gdGhpcy5nZXRTdWJUaXRsZVNpemUob3B0aW9ucy5zdWJ0aXRsZSwgd2lkdGgsIGhlaWdodCwgZG9jKTsgLy8gcmV0dXJuIDogc2l6ZShwdCkgYW5kIGxlZnQgbWFyZ2luIChtbSlcbiAgICAgIHRoaXMuYWRkU3ViVGl0bGUoZG9jLCBvcHRpb25zLnN1YnRpdGxlLCB0aXRsZUggKiAwLjcsIG1hcmdpbnNbM10gKyBzdWJ0aXRsZVNpemVSZXN1bHQsIHRpdGxlSCAqIDEuNyAqICgyNS40IC8gNzIpKTtcbiAgICAgIG1hcmdpbnNbMF0gPSBtYXJnaW5zWzBdICsgdGl0bGVTaXplUmVzdWx0c1swXSAqIDAuNyAqICgyNS40IC8gNzIpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5zaG93UHJvamVjdGlvbiA9PT0gdHJ1ZSB8fCBvcHRpb25zLnNob3dTY2FsZSA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5hZGRQcm9qU2NhbGUoXG4gICAgICAgIGRvYyxcbiAgICAgICAgbWFwLFxuICAgICAgICByZXNvbHV0aW9uLFxuICAgICAgICBvcHRpb25zLnNob3dQcm9qZWN0aW9uLFxuICAgICAgICBvcHRpb25zLnNob3dTY2FsZVxuICAgICAgICApO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5jb21tZW50ICE9PSAnJykge1xuICAgICAgdGhpcy5hZGRDb21tZW50KGRvYywgb3B0aW9ucy5jb21tZW50KTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZE1hcChkb2MsIG1hcCwgcmVzb2x1dGlvbiwgc2l6ZSwgbWFyZ2lucykuc3Vic2NyaWJlKFxuICAgICAgYXN5bmMgKHN0YXR1czogU3ViamVjdFN0YXR1cykgPT4ge1xuICAgICAgICBpZiAoc3RhdHVzID09PSBTdWJqZWN0U3RhdHVzLkRvbmUpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmFkZFNjYWxlKGRvYywgbWFwLCBtYXJnaW5zKTtcbiAgICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZU1lYXN1cmVMYXllcihkb2MsIG1hcCwgbWFyZ2lucyk7XG4gICAgICAgICAgaWYgKG9wdGlvbnMubGVnZW5kUG9zaXRpb24gIT09ICdub25lJykge1xuICAgICAgICAgICAgaWYgKFsndG9wbGVmdCcsICd0b3ByaWdodCcsICdib3R0b21sZWZ0JywgJ2JvdHRvbXJpZ2h0J10uaW5kZXhPZihvcHRpb25zLmxlZ2VuZFBvc2l0aW9uKSA+IC0xICkge1xuICAgICAgICAgICAgICBhd2FpdCB0aGlzLmFkZExlZ2VuZFNhbWVQYWdlKGRvYywgbWFwLCBtYXJnaW5zLCByZXNvbHV0aW9uLCBvcHRpb25zLmxlZ2VuZFBvc2l0aW9uKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5sZWdlbmRQb3NpdGlvbiA9PT0gJ25ld3BhZ2UnKSB7XG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuYWRkTGVnZW5kKGRvYywgbWFwLCBtYXJnaW5zLCByZXNvbHV0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5zYXZlRG9jKGRvYyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gU3ViamVjdFN0YXR1cy5Eb25lIHx8IHN0YXR1cyA9PT0gU3ViamVjdFN0YXR1cy5FcnJvcikge1xuICAgICAgICAgIHRoaXMuYWN0aXZpdHlTZXJ2aWNlLnVucmVnaXN0ZXIodGhpcy5hY3Rpdml0eUlkKTtcbiAgICAgICAgICBzdGF0dXMkLm5leHQoU3ViamVjdFN0YXR1cy5Eb25lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG5cbiAgICByZXR1cm4gc3RhdHVzJDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgbWVhc3VyZSBvdmVybGF5IG9uIHRoZSBtYXAgb24gdGhlIGRvY3VtZW50IHdoZW4gdGhlIG1lYXN1cmUgbGF5ZXIgaXMgcHJlc2VudFxuICAgKiBAcGFyYW0gIGRvYyAtIFBkZiBkb2N1bWVudCB3aGVyZSBtZWFzdXJlIHRvb2x0aXAgd2lsbCBiZSBhZGRlZFxuICAgKiBAcGFyYW0gIG1hcCAtIE1hcCBvZiB0aGUgYXBwXG4gICAqIEBwYXJhbSAgbWFyZ2lucyAtIFBhZ2UgbWFyZ2luc1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVNZWFzdXJlTGF5ZXIoXG4gICAgZG9jOiBqc3BkZixcbiAgICBtYXA6IElnb01hcCxcbiAgICBtYXJnaW5zOiBBcnJheTxudW1iZXI+XG4gICkge1xuICAgIGlmIChtYXAubGF5ZXJzLmZpbmQobGF5ZXIgPT4gbGF5ZXIudmlzaWJsZSAmJiBsYXllci5pZC5zdGFydHNXaXRoKCdpZ28tbWVhc3VyZXMtJykpKSB7XG4gICAgICBsZXQgY2FudmFzT3ZlcmxheUhUTUxNZWFzdXJlcztcbiAgICAgIGNvbnN0IG1hcE92ZXJsYXlNZWFzdXJlc0hUTUwgPSBtYXAub2wuZ2V0T3ZlcmxheUNvbnRhaW5lcigpO1xuICAgICAgYXdhaXQgaHRtbDJjYW52YXMobWFwT3ZlcmxheU1lYXN1cmVzSFRNTCwge1xuICAgICAgICBzY2FsZTogMSxcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBudWxsXG4gICAgICB9KS50aGVuKGUgPT4ge1xuICAgICAgICBjYW52YXNPdmVybGF5SFRNTE1lYXN1cmVzID0gZTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5hZGRDYW52YXMoZG9jLCBjYW52YXNPdmVybGF5SFRNTE1lYXN1cmVzLCBtYXJnaW5zKTsgLy8gdGhpcyBhZGRzIG1lYXN1cmUgb3ZlcmxheXNcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGh0bWwgY29kZSBmb3IgYWxsIGxheWVycyBsZWdlbmRcbiAgICogQHBhcmFtICBtYXAgSWdvTWFwXG4gICAqIEBwYXJhbSAgd2lkdGggVGhlIHdpZHRoIHRoYXQgdGhlIGxlZ2VuZCBuZWVkIHRvIGJlXG4gICAqIEByZXR1cm4gSHRtbCBjb2RlIGZvciB0aGUgbGVnZW5kXG4gICAqL1xuICBnZXRMYXllcnNMZWdlbmRIdG1sKFxuICAgIG1hcDogSWdvTWFwLFxuICAgIHdpZHRoOiBudW1iZXIsXG4gICAgcmVzb2x1dGlvbjogbnVtYmVyXG4gICk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcikgPT4ge1xuICAgICAgbGV0IGh0bWwgPSAnJztcbiAgICAgIGNvbnN0IGxlZ2VuZHMgPSBnZXRMYXllcnNMZWdlbmRzKFxuICAgICAgICBtYXAubGF5ZXJzLFxuICAgICAgICB7XG4gICAgICAgICAgcmVzb2x1dGlvbjogbWFwLnZpZXdDb250cm9sbGVyLmdldFJlc29sdXRpb24oKSxcbiAgICAgICAgICBleHRlbnQ6IG1hcC52aWV3Q29udHJvbGxlci5nZXRFeHRlbnQoKSxcbiAgICAgICAgICBwcm9qZWN0aW9uOiBtYXAudmlld0NvbnRyb2xsZXIuZ2V0T2xQcm9qZWN0aW9uKCkuZ2V0Q29kZSgpLFxuICAgICAgICAgIC8vIHNjYWxlOiBtYXAudmlld0NvbnRyb2xsZXIuZ2V0U2NhbGUocmVzb2x1dGlvbiksXG4gICAgICAgICAgc2l6ZTogbWFwLm9sLmdldFNpemUoKVxuICAgICAgICB9IGFzIExlZ2VuZE1hcFZpZXdPcHRpb25zXG4gICAgICApO1xuICAgICAgaWYgKGxlZ2VuZHMuZmlsdGVyKGwgPT4gbC5kaXNwbGF5ID09PSB0cnVlKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgb2JzZXJ2ZXIubmV4dChodG1sKTtcbiAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gRGVmaW5lIGltcG9ydGFudCBzdHlsZSB0byBiZSBzdXJlIHRoYXQgYWxsIGNvbnRhaW5lciBpcyBjb252ZXJ0XG4gICAgICAvLyB0byBpbWFnZSBub3QganVzdCB2aXNpYmxlIHBhcnRcbiAgICAgIGh0bWwgKz0gJzxzdHlsZSBtZWRpYT1cInNjcmVlblwiIHR5cGU9XCJ0ZXh0L2Nzc1wiPic7XG4gICAgICBodG1sICs9ICcuaHRtbDJjYW52YXMtY29udGFpbmVyIHsgd2lkdGg6ICcgKyB3aWR0aCArICdtbSAhaW1wb3J0YW50OyBoZWlnaHQ6IDIwMDBweCAhaW1wb3J0YW50OyB9JztcbiAgICAgIGh0bWwgKz0gJ3RhYmxlLnRhYmxlTGVnZW5kIHt0YWJsZS1sYXlvdXQ6IGF1dG87fSc7XG4gICAgICBodG1sICs9ICdkaXYuc3R5bGVMZWdlbmQge3BhZGRpbmctdG9wOiA1cHg7IHBhZGRpbmctcmlnaHQ6NXB4O3BhZGRpbmctbGVmdDo1cHg7cGFkZGluZy1ib3R0b206NXB4O30nO1xuICAgICAgaHRtbCArPSAnPC9zdHlsZT4nO1xuICAgICAgLy8gVGhlIGZvbnQgc2l6ZSB3aWxsIGFsc28gYmUgbG93ZXJlZCBhZnRlcndhcmRzIChnbG9iYWxseSBhbG9uZyB0aGUgbGVnZW5kIHNpemUpXG4gICAgICAvLyB0aGlzIGFsbG93cyBoYXZpbmcgYSBnb29kIHJlbGF0aXZlIGZvbnQgc2l6ZSBoZXJlIGFuZCB0byBrZWVwIGFqdXN0aW5nIHRoZSBsZWdlbmQgc2l6ZVxuICAgICAgLy8gd2hpbGUga2VlcGluZyBnb29kIHJlbGF0aXZlIGZvbnQgc2l6ZVxuICAgICAgaHRtbCArPSAnPGZvbnQgc2l6ZT1cIjNcIiBmYWNlPVwiVGltZXNcIiA+JztcbiAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9XCJzdHlsZUxlZ2VuZFwiPic7XG4gICAgICBodG1sICs9ICc8dGFibGUgY2xhc3M9XCJ0YWJsZUxlZ2VuZFwiID4nO1xuXG4gICAgICAvLyBGb3IgZWFjaCBsZWdlbmQsIGRlZmluZSBhbiBodG1sIHRhYmxlIGNlbGxcbiAgICAgIGNvbnN0IGltYWdlcyQgPSBsZWdlbmRzLmZpbHRlcihsID0+IGwuZGlzcGxheSkubWFwKChsZWdlbmQpID0+XG4gICAgICAgIHRoaXMuZ2V0RGF0YUltYWdlKGxlZ2VuZC51cmwpLnBpcGUoXG4gICAgICAgICAgcnhNYXAoKGRhdGFJbWFnZSkgPT4ge1xuICAgICAgICAgICAgbGV0IGh0bWxJbWcgPSAnPHRyPjx0ZD4nICsgbGVnZW5kLnRpdGxlLnRvVXBwZXJDYXNlKCkgKyAnPC90ZD48L3RyPic7XG4gICAgICAgICAgICBodG1sSW1nICs9ICc8dHI+PHRkPjxpbWcgc3JjPVwiJyArIGRhdGFJbWFnZSArICdcIj48L3RkPjwvdHI+JztcbiAgICAgICAgICAgIHJldHVybiBodG1sSW1nO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICBmb3JrSm9pbihpbWFnZXMkKS5zdWJzY3JpYmUoKGRhdGFJbWFnZXMpID0+IHtcbiAgICAgICAgaHRtbCA9IGRhdGFJbWFnZXMucmVkdWNlKChhY2MsIGN1cnJlbnQpID0+IChhY2MgKz0gY3VycmVudCksIGh0bWwpO1xuICAgICAgICBodG1sICs9ICc8L3RhYmxlPic7XG4gICAgICAgIGh0bWwgKz0gJzwvZGl2Pic7XG4gICAgICAgIG9ic2VydmVyLm5leHQoaHRtbCk7XG4gICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldERhdGFJbWFnZSh1cmw6IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgY29uc3Qgc2VjdXJlSU1HID0gbmV3IFNlY3VyZUltYWdlUGlwZSh0aGlzLmh0dHAsIHRoaXMuY29uZmlnU2VydmljZSk7XG4gICAgcmV0dXJuIHNlY3VyZUlNRy50cmFuc2Zvcm0odXJsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWxsIHRoZSBsZWdlbmQgaW4gYSBzaW5nbGUgaW1hZ2VcbiAgICogKiBAcGFyYW0gIGZvcm1hdCAtIEltYWdlIGZvcm1hdC4gZGVmYXVsdCB2YWx1ZSB0byBcInBuZ1wiXG4gICAqIEByZXR1cm4gVGhlIGltYWdlIG9mIHRoZSBsZWdlbmRcbiAgICovXG4gIGFzeW5jIGdldExheWVyc0xlZ2VuZEltYWdlKFxuICAgIG1hcCxcbiAgICBmb3JtYXQ6IHN0cmluZyA9ICdwbmcnLFxuICAgIGRvWmlwRmlsZTogYm9vbGVhbixcbiAgICByZXNvbHV0aW9uOiBudW1iZXJcbiAgKSB7XG4gICAgY29uc3Qgc3RhdHVzJCA9IG5ldyBTdWJqZWN0KCk7XG4gICAgLy8gR2V0IGh0bWwgY29kZSBmb3IgdGhlIGxlZ2VuZFxuICAgIGNvbnN0IHdpZHRoID0gMjAwOyAvLyBtaWxpbWV0ZXJzIHVuaXQsIG9yaWdpbmFsbHkgZGVmaW5lIGZvciBkb2N1bWVudCBwZGZcbiAgICBsZXQgaHRtbCA9IGF3YWl0IHRoaXMuZ2V0TGF5ZXJzTGVnZW5kSHRtbChcbiAgICAgIG1hcCxcbiAgICAgIHdpZHRoLFxuICAgICAgcmVzb2x1dGlvblxuICAgICkudG9Qcm9taXNlKCk7XG4gICAgZm9ybWF0ID0gZm9ybWF0LnRvTG93ZXJDYXNlKCk7XG5cbiAgICAvLyBJZiBubyBsZWdlbmQgc2hvdyBObyBMRUdFTkQgaW4gYW4gaW1hZ2VcbiAgICBpZiAoaHRtbC5sZW5ndGggPT09IDApIHtcbiAgICAgIGh0bWwgPSAnPGZvbnQgc2l6ZT1cIjEyXCIgZmFjZT1cIkNvdXJpZXIgTmV3XCIgPic7XG4gICAgICBodG1sICs9ICc8ZGl2IGFsaWduPVwiY2VudGVyXCI+PGI+Tk8gTEVHRU5EPC9iPjwvZGl2Pic7XG4gICAgfVxuICAgIC8vIENyZWF0ZSBkaXYgdG8gY29udGFpbiBodG1sIGNvZGUgZm9yIGxlZ2VuZFxuICAgIGNvbnN0IGRpdiA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBkaXYuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgIGRpdi5zdHlsZS50b3AgPSAnMCc7XG5cbiAgICAvLyBBZGQgaHRtbCBjb2RlIHRvIGNvbnZlcnQgaW4gdGhlIG5ldyB3aW5kb3dcbiAgICB3aW5kb3cuZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaXYpO1xuICAgIGRpdi5pbm5lckhUTUwgPSBodG1sO1xuXG4gICAgYXdhaXQgdGhpcy50aW1lb3V0KDEpO1xuICAgIGNvbnN0IGNhbnZhcyA9IGF3YWl0IGh0bWwyY2FudmFzKGRpdiwgeyB1c2VDT1JTOiB0cnVlIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICB9KTtcblxuICAgIGlmIChjYW52YXMpIHtcbiAgICAgIGxldCBzdGF0dXMgPSBTdWJqZWN0U3RhdHVzLkRvbmU7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIWRvWmlwRmlsZSkge1xuICAgICAgICAgIC8vIFNhdmUgdGhlIGNhbnZhcyBhcyBmaWxlXG4gICAgICAgICAgdGhpcy5zYXZlQ2FudmFzSW1hZ2VBc0ZpbGUoY2FudmFzLCAnbGVnZW5kSW1hZ2UnLCBmb3JtYXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEFkZCB0aGUgY2FudmFzIHRvIHppcFxuICAgICAgICAgIHRoaXMuZ2VuZXJhdGVDYW52YUZpbGVUb1ppcChjYW52YXMsICdsZWdlbmRJbWFnZScgKyAnLicgKyBmb3JtYXQpO1xuICAgICAgICB9XG4gICAgICAgIGRpdi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGRpdik7IC8vIHJlbW92ZSB0ZW1wIGRpdiAoSUUpXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgc3RhdHVzID0gU3ViamVjdFN0YXR1cy5FcnJvcjtcbiAgICAgIH1cbiAgICAgIHN0YXR1cyQubmV4dChzdGF0dXMpO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0dXMkO1xuICB9XG5cbiAgZ2V0VGl0bGVTaXplKHRpdGxlOiBzdHJpbmcsIHBhZ2VXaWR0aDogbnVtYmVyLCBwYWdlSGVpZ2h0OiBudW1iZXIsIGRvYzoganNwZGYpIHtcbiAgICBjb25zdCBwZGZSZXNvbHV0aW9uID0gOTY7XG4gICAgY29uc3QgdGl0bGVTaXplID0gTWF0aC5yb3VuZCgyICogKHBhZ2VIZWlnaHQgKyAxNDUpICogMC4wNSkgLyAyO1xuICAgIGRvYy5zZXRGb250KCdUaW1lcycsICdib2xkJyk7XG4gICAgY29uc3Qgd2lkdGggPSBkb2MuZ2V0VGV4dFdpZHRoKHRpdGxlKTtcblxuICAgIGNvbnN0IHRpdGxlV2lkdGggPSBkb2MuZ2V0U3RyaW5nVW5pdFdpZHRoKHRpdGxlKSAqIHRpdGxlU2l6ZSAvIGRvYy5pbnRlcm5hbC5zY2FsZUZhY3RvcjtcbiAgICBjb25zdCB0aXRsZVRhaWxsZU1pbmltYWxlID0gTWF0aC5yb3VuZCggMiAqIChwYWdlSGVpZ2h0ICsgMTUwICkgKiAwLjAzNykgLyAyO1xuICAgIGxldCB0aXRsZUZvbnRTaXplID0gMDtcblxuICAgIGxldCB0aXRsZU1hcmdpbkxlZnQ7XG4gICAgaWYgKHRpdGxlV2lkdGggPj0gKHBhZ2VXaWR0aCkpIHtcbiAgICAgIHRpdGxlTWFyZ2luTGVmdCA9IDA7XG4gICAgICB0aXRsZUZvbnRTaXplID0gTWF0aC5yb3VuZCgoKHBhZ2VXaWR0aCAvIHRpdGxlLmxlbmd0aCkgKiBwZGZSZXNvbHV0aW9uKSAvIDI1LjQpO1xuICAgICAgLy8gSWYgdGhlIGZvcm11bGEgdG8gZmluZCB0aGUgZm9udCBzaXplIGdpdmVzIGJlbG93IHRoZSBkZWZpbmVkIG1pbmltdW0gc2l6ZVxuICAgICAgaWYgKHRpdGxlRm9udFNpemUgPCB0aXRsZVRhaWxsZU1pbmltYWxlKSB7XG4gICAgICAgIHRpdGxlRm9udFNpemUgPSB0aXRsZVRhaWxsZU1pbmltYWxlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aXRsZU1hcmdpbkxlZnQgPSAocGFnZVdpZHRoIC0gdGl0bGVXaWR0aCkgLyAyIDtcbiAgICAgIHRpdGxlRm9udFNpemUgPSB0aXRsZVNpemU7XG4gICAgfVxuICAgIHJldHVybiBbdGl0bGVGb250U2l6ZSwgdGl0bGVNYXJnaW5MZWZ0XTtcbiAgfVxuXG4gIGdldFN1YlRpdGxlU2l6ZShzdWJ0aXRsZTogc3RyaW5nLCBwYWdlV2lkdGg6IG51bWJlciwgcGFnZUhlaWdodDogbnVtYmVyLCBkb2M6IGpzcGRmKSB7XG4gICAgY29uc3Qgc3VidGl0bGVTaXplID0gMC43ICogTWF0aC5yb3VuZCgyICogKHBhZ2VIZWlnaHQgKyAxNDUpICogMC4wNSkgLyAyOyAvLyA3MCUgb2YgdGhlIHRpdGxlJ3MgZm9udCBzaXplXG5cbiAgICBkb2Muc2V0Rm9udCgnVGltZXMnLCAnYm9sZCcpO1xuXG4gICAgY29uc3Qgc3VidGl0bGVXaWR0aCA9IGRvYy5nZXRTdHJpbmdVbml0V2lkdGgoc3VidGl0bGUpICogc3VidGl0bGVTaXplIC8gZG9jLmludGVybmFsLnNjYWxlRmFjdG9yO1xuXG4gICAgbGV0IHN1YnRpdGxlTWFyZ2luTGVmdDtcbiAgICBpZiAoc3VidGl0bGVXaWR0aCA+PSAocGFnZVdpZHRoKSkge1xuICAgICAgc3VidGl0bGVNYXJnaW5MZWZ0ID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3VidGl0bGVNYXJnaW5MZWZ0ID0gKHBhZ2VXaWR0aCAtIHN1YnRpdGxlV2lkdGgpIC8gMiA7XG4gICAgfVxuICAgIHJldHVybiBzdWJ0aXRsZU1hcmdpbkxlZnQ7XG4gIH1cblxuICBwcml2YXRlIGFkZFRpdGxlKGRvYzoganNwZGYsIHRpdGxlOiBzdHJpbmcsIHRpdGxlRm9udFNpemU6IG51bWJlciwgdGl0bGVNYXJnaW5MZWZ0OiBudW1iZXIsIHRpdGxlTWFyZ2luVG9wOiBudW1iZXIpIHtcbiAgICBkb2Muc2V0Rm9udCgnVGltZXMnLCAnYm9sZCcpO1xuICAgIGRvYy5zZXRGb250U2l6ZSh0aXRsZUZvbnRTaXplKTtcbiAgICBkb2MudGV4dCh0aXRsZSwgdGl0bGVNYXJnaW5MZWZ0LCB0aXRsZU1hcmdpblRvcCk7XG4gIH1cblxuICBwcml2YXRlIGFkZFN1YlRpdGxlKGRvYzoganNwZGYsIHN1YnRpdGxlOiBzdHJpbmcsIHN1YnRpdGxlRm9udFNpemU6IG51bWJlciwgc3VidGl0bGVNYXJnaW5MZWZ0OiBudW1iZXIsIHN1YnRpdGxlTWFyZ2luVG9wOiBudW1iZXIpIHtcbiAgICBkb2Muc2V0Rm9udCgnVGltZXMnLCAnYm9sZCcpO1xuICAgIGRvYy5zZXRGb250U2l6ZShzdWJ0aXRsZUZvbnRTaXplKTtcbiAgICBkb2MudGV4dChzdWJ0aXRsZSwgc3VidGl0bGVNYXJnaW5MZWZ0LCBzdWJ0aXRsZU1hcmdpblRvcCk7XG4gIH1cbiAgLyoqXG4gICAqIEFkZCBjb21tZW50IHRvIHRoZSBkb2N1bWVudFxuICAgKiAqIEBwYXJhbSAgZG9jIC0gcGRmIGRvY3VtZW50XG4gICAqICogQHBhcmFtICBjb21tZW50IC0gQ29tbWVudCB0byBhZGQgaW4gdGhlIGRvY3VtZW50XG4gICAqICogQHBhcmFtICBzaXplIC0gU2l6ZSBvZiB0aGUgZG9jdW1lbnRcbiAgICovXG4gIHByaXZhdGUgYWRkQ29tbWVudChkb2M6IGpzcGRmLCBjb21tZW50OiBzdHJpbmcpIHtcbiAgICBjb25zdCBjb21tZW50U2l6ZSA9IDE2O1xuICAgIGNvbnN0IGNvbW1lbnRNYXJnaW5MZWZ0ID0gMjA7XG4gICAgY29uc3QgbWFyZ2luQm90dG9tID0gNTtcbiAgICBjb25zdCBoZWlnaHRQaXhlbHMgPSBkb2MuaW50ZXJuYWwucGFnZVNpemUuaGVpZ2h0IC0gbWFyZ2luQm90dG9tO1xuXG4gICAgZG9jLnNldEZvbnQoJ2NvdXJpZXInKTtcbiAgICBkb2Muc2V0Rm9udFNpemUoY29tbWVudFNpemUpO1xuICAgIGRvYy50ZXh0KGNvbW1lbnQsIGNvbW1lbnRNYXJnaW5MZWZ0LCBoZWlnaHRQaXhlbHMpO1xuICB9XG4gIC8qKlxuICAgKiBBZGQgcHJvamVjdGlvbiBhbmQvb3Igc2NhbGUgdG8gdGhlIGRvY3VtZW50XG4gICAqIEBwYXJhbSAgZG9jIC0gcGRmIGRvY3VtZW50XG4gICAqIEBwYXJhbSAgbWFwIC0gTWFwIG9mIHRoZSBhcHBcbiAgICogQHBhcmFtICBkcGkgLSBEUEkgcmVzb2x1dGlvbiBvZiB0aGUgZG9jdW1lbnRcbiAgICogQHBhcmFtICBwcm9qZWN0aW9uIC0gQm9vbCB0byBpbmRpY2F0ZSBpZiBwcm9qZWN0aW9uIG5lZWQgdG8gYmUgYWRkZWRcbiAgICogQHBhcmFtICBzY2FsZSAtIEJvb2wgdG8gaW5kaWNhdGUgaWYgc2NhbGUgbmVlZCB0byBiZSBhZGRlZFxuICAgKi9cbiAgcHJpdmF0ZSBhZGRQcm9qU2NhbGUoXG4gICAgZG9jOiBqc3BkZixcbiAgICBtYXA6IElnb01hcCxcbiAgICBkcGk6IG51bWJlcixcbiAgICBwcm9qZWN0aW9uOiBib29sZWFuLFxuICAgIHNjYWxlOiBib29sZWFuXG4gICkge1xuICAgIGNvbnN0IHRyYW5zbGF0ZSA9IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZTtcbiAgICBjb25zdCBwcm9qU2NhbGVTaXplID0gMTY7XG4gICAgY29uc3QgcHJvalNjYWxlTWFyZ2luTGVmdCA9IDIwO1xuICAgIGNvbnN0IG1hcmdpbkJvdHRvbSA9IDE1O1xuICAgIGNvbnN0IGhlaWdodFBpeGVscyA9IGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS5oZWlnaHQgLSBtYXJnaW5Cb3R0b207XG5cbiAgICBsZXQgdGV4dFByb2pTY2FsZTogc3RyaW5nID0gJyc7XG4gICAgaWYgKHByb2plY3Rpb24gPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IHByb2pUZXh0ID0gdHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8ucHJpbnRGb3JtLnByb2plY3Rpb24nKTtcbiAgICAgIHRleHRQcm9qU2NhbGUgKz0gcHJvalRleHQgKyAnOiAnICsgbWFwLnByb2plY3Rpb247XG4gICAgfVxuICAgIGlmIChzY2FsZSA9PT0gdHJ1ZSkge1xuICAgICAgaWYgKHByb2plY3Rpb24gPT09IHRydWUpIHtcbiAgICAgICAgdGV4dFByb2pTY2FsZSArPSAnICAgJztcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNjYWxlVGV4dCA9IHRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLnByaW50Rm9ybS5zY2FsZScpO1xuICAgICAgY29uc3QgbWFwU2NhbGUgPSBtYXAudmlld0NvbnRyb2xsZXIuZ2V0U2NhbGUoZHBpKTtcbiAgICAgIHRleHRQcm9qU2NhbGUgKz0gc2NhbGVUZXh0ICsgJzogfiAxIC8gJyArIGZvcm1hdFNjYWxlKG1hcFNjYWxlKTtcbiAgICB9XG4gICAgZG9jLnNldEZvbnQoJ2NvdXJpZXInKTtcbiAgICBkb2Muc2V0Rm9udFNpemUocHJvalNjYWxlU2l6ZSk7XG4gICAgZG9jLnRleHQodGV4dFByb2pTY2FsZSwgcHJvalNjYWxlTWFyZ2luTGVmdCwgaGVpZ2h0UGl4ZWxzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgdGhlIGxlZ2VuZCB0byB0aGUgZG9jdW1lbnRcbiAgICogQHBhcmFtICBkb2MgLSBQZGYgZG9jdW1lbnQgd2hlcmUgbGVnZW5kIHdpbGwgYmUgYWRkZWRcbiAgICogQHBhcmFtICBtYXAgLSBNYXAgb2YgdGhlIGFwcFxuICAgKiBAcGFyYW0gIG1hcmdpbnMgLSBQYWdlIG1hcmdpbnNcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgYWRkTGVnZW5kKFxuICAgIGRvYzoganNwZGYsXG4gICAgbWFwOiBJZ29NYXAsXG4gICAgbWFyZ2luczogQXJyYXk8bnVtYmVyPixcbiAgICByZXNvbHV0aW9uOiBudW1iZXJcbiAgKSB7XG4gICAgLy8gR2V0IGh0bWwgY29kZSBmb3IgdGhlIGxlZ2VuZFxuICAgIGNvbnN0IHdpZHRoID0gZG9jLmludGVybmFsLnBhZ2VTaXplLndpZHRoO1xuICAgIGNvbnN0IGh0bWwgPSBhd2FpdCB0aGlzLmdldExheWVyc0xlZ2VuZEh0bWwoXG4gICAgICBtYXAsXG4gICAgICB3aWR0aCxcbiAgICAgIHJlc29sdXRpb25cbiAgICApLnRvUHJvbWlzZSgpO1xuICAgIC8vIElmIG5vIGxlZ2VuZCwgc2F2ZSB0aGUgbWFwIGRpcmVjdGx5XG4gICAgaWYgKGh0bWwgPT09ICcnKSB7XG4gICAgICBhd2FpdCB0aGlzLnNhdmVEb2MoZG9jKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICAvLyBDcmVhdGUgZGl2IHRvIGNvbnRhaW4gaHRtbCBjb2RlIGZvciBsZWdlbmRcbiAgICBjb25zdCBkaXYgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgZGl2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICBkaXYuc3R5bGUudG9wID0gJzAnO1xuXG4gICAgLy8gQWRkIGh0bWwgY29kZSB0byBjb252ZXJ0IGluIHRoZSBuZXcgd2luZG93XG4gICAgd2luZG93LmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGl2KTtcbiAgICBkaXYuaW5uZXJIVE1MID0gaHRtbDtcblxuICAgIGF3YWl0IHRoaXMudGltZW91dCgxKTtcbiAgICBjb25zdCBjYW52YXMgPSBhd2FpdCBodG1sMmNhbnZhcyhkaXYsIHsgdXNlQ09SUzogdHJ1ZSB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgfSk7XG5cbiAgICBpZiAoY2FudmFzKSB7XG4gICAgICBjb25zdCBwb3VyY2VudGFnZVJlZHVjdGlvbiA9IDAuODU7XG4gICAgICBjb25zdCBpbWFnZVNpemUgPSBbcG91cmNlbnRhZ2VSZWR1Y3Rpb24gKiAoMjUuNCAqIGNhbnZhcy53aWR0aCkgLyByZXNvbHV0aW9uLCBwb3VyY2VudGFnZVJlZHVjdGlvblxuICAgICAgICAqICgyNS40ICogY2FudmFzLmhlaWdodCkgLyByZXNvbHV0aW9uXTtcbiAgICAgIGxldCBpbWdEYXRhO1xuICAgICAgZG9jLmFkZFBhZ2UoKTtcbiAgICAgIGltZ0RhdGEgPSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9wbmcnKTtcbiAgICAgIGRvYy5hZGRJbWFnZShpbWdEYXRhLCAnUE5HJywgMTAsIDEwLCBpbWFnZVNpemVbMF0sIGltYWdlU2l6ZVsxXSk7XG4gICAgICBkaXYucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChkaXYpOyAvLyByZW1vdmUgdGVtcCBkaXYgKElFIHN0eWxlKVxuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuc2F2ZURvYyhkb2MpO1xuXG4gIH1cblxuICAvKipcbiAgICogQWRkIHRoZSBsZWdlbmQgdG8gdGhlIGRvY3VtZW50XG4gICAqIEBwYXJhbSAgZG9jIC0gUGRmIGRvY3VtZW50IHdoZXJlIGxlZ2VuZCB3aWxsIGJlIGFkZGVkXG4gICAqIEBwYXJhbSAgbWFwIC0gTWFwIG9mIHRoZSBhcHBcbiAgICogQHBhcmFtICBtYXJnaW5zIC0gUGFnZSBtYXJnaW5zXG4gICAqL1xuICAgICBwcml2YXRlIGFzeW5jIGFkZExlZ2VuZFNhbWVQYWdlKFxuICAgICAgZG9jOiBqc3BkZixcbiAgICAgIG1hcDogSWdvTWFwLFxuICAgICAgbWFyZ2luczogQXJyYXk8bnVtYmVyPixcbiAgICAgIHJlc29sdXRpb246IG51bWJlcixcbiAgICAgIGxlZ2VuZFBvc2l0aW9uOiBzdHJpbmdcbiAgICApIHtcbiAgICAgIC8vIEdldCBodG1sIGNvZGUgZm9yIHRoZSBsZWdlbmRcbiAgICAgIGNvbnN0IHdpZHRoID0gZG9jLmludGVybmFsLnBhZ2VTaXplLndpZHRoO1xuICAgICAgY29uc3QgaHRtbCA9IGF3YWl0IHRoaXMuZ2V0TGF5ZXJzTGVnZW5kSHRtbChcbiAgICAgICAgbWFwLFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgcmVzb2x1dGlvblxuICAgICAgKS50b1Byb21pc2UoKTtcbiAgICAgIC8vIElmIG5vIGxlZ2VuZCwgc2F2ZSB0aGUgbWFwIGRpcmVjdGx5XG4gICAgICBpZiAoaHRtbCA9PT0gJycpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlRG9jKGRvYyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgLy8gQ3JlYXRlIGRpdiB0byBjb250YWluIGh0bWwgY29kZSBmb3IgbGVnZW5kXG4gICAgICBjb25zdCBkaXYgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBkaXYuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgICAgZGl2LnN0eWxlLnRvcCA9ICcwJztcbiAgICAgIC8vIEFkZCBodG1sIGNvZGUgdG8gY29udmVydCBpbiB0aGUgbmV3IHdpbmRvd1xuICAgICAgd2luZG93LmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGl2KTtcbiAgICAgIGRpdi5pbm5lckhUTUwgPSBodG1sO1xuICAgICAgYXdhaXQgdGhpcy50aW1lb3V0KDEpO1xuICAgICAgY29uc3QgY2FudmFzID0gYXdhaXQgaHRtbDJjYW52YXMoZGl2LCB7IHVzZUNPUlM6IHRydWUgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICB9KTtcbiAgICAgIGxldCBtYXJnaW5zTGVnZW5kO1xuICAgICAgaWYgKGNhbnZhcykge1xuICAgICAgICBjb25zdCBwb3VyY2VudGFnZVJlZHVjdGlvbiA9IDAuODU7XG4gICAgICAgIGNvbnN0IGltYWdlU2l6ZSA9IFtwb3VyY2VudGFnZVJlZHVjdGlvbiAqICgyNS40ICogY2FudmFzLndpZHRoKSAvIHJlc29sdXRpb24sXG4gICAgICAgICAgIHBvdXJjZW50YWdlUmVkdWN0aW9uICogKDI1LjQgKiBjYW52YXMuaGVpZ2h0KSAvIHJlc29sdXRpb25dO1xuICAgICAgICAvLyBNb3ZlIHRoZSBsZWdlbmQgdG8gdGhlIGNvcnJlY3QgcG9zaXRpb24gb24gdGhlIHBhZ2VcbiAgICAgICAgaWYgKCBsZWdlbmRQb3NpdGlvbiA9PT0gJ2JvdHRvbXJpZ2h0Jykge1xuICAgICAgICAgIG1hcmdpbnNMZWdlbmQgPSBbZG9jLmludGVybmFsLnBhZ2VTaXplLmhlaWdodCAtIG1hcmdpbnNbMl0gLSBpbWFnZVNpemVbMV0sIG1hcmdpbnNbMV0sXG4gICAgICAgICAgIG1hcmdpbnNbMl0sIGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS53aWR0aCAtIG1hcmdpbnNbMV0gLSBpbWFnZVNpemVbMF1dO1xuICAgICAgICB9IGVsc2UgaWYgKGxlZ2VuZFBvc2l0aW9uID09PSAndG9wcmlnaHQnKSB7XG4gICAgICAgICAgbWFyZ2luc0xlZ2VuZCA9IFttYXJnaW5zWzBdLCBtYXJnaW5zWzFdLCBkb2MuaW50ZXJuYWwucGFnZVNpemUuaGVpZ2h0IC0gbWFyZ2luc1swXSAtIGltYWdlU2l6ZVsxXSxcbiAgICAgICAgICBkb2MuaW50ZXJuYWwucGFnZVNpemUud2lkdGggLSBtYXJnaW5zWzFdIC0gaW1hZ2VTaXplWzBdIF07XG4gICAgICAgIH0gZWxzZSBpZiAobGVnZW5kUG9zaXRpb24gPT09ICdib3R0b21sZWZ0Jykge1xuICAgICAgICAgIC8vIFdoZW4gdGhlIGxlZ2VuZCBpcyBpbiB0aGUgYm90dG9tIGxlZnQsIHJhaXNlIHRoZSBsZWdlbmQgc2xpZ2h0bHkgdXB3YXJkIHNvIHRoYXQgYXR0cmlidXRpb25zIGFyZSB2aXNpYmxlXG4gICAgICAgICAgbWFyZ2luc0xlZ2VuZCA9IFtkb2MuaW50ZXJuYWwucGFnZVNpemUuaGVpZ2h0IC0gbWFyZ2luc1syXSAtIGltYWdlU2l6ZVsxXSAtIDE1LFxuICAgICAgICAgIGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS53aWR0aCAtIG1hcmdpbnNbM10gLSBpbWFnZVNpemVbMF0sIG1hcmdpbnNbMl0gKyAxNSwgbWFyZ2luc1szXSBdO1xuICAgICAgICB9IGVsc2UgaWYgKGxlZ2VuZFBvc2l0aW9uID09PSAndG9wbGVmdCcpIHtcbiAgICAgICAgICBtYXJnaW5zTGVnZW5kID0gW21hcmdpbnNbMF0sIGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS53aWR0aCAtIG1hcmdpbnNbM10gLSBpbWFnZVNpemVbMF0sXG4gICAgICAgICAgIGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS5oZWlnaHQgLSBtYXJnaW5zWzBdIC0gaW1hZ2VTaXplWzFdLCBtYXJnaW5zWzNdIF07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hZGRDYW52YXMoZG9jLCBjYW52YXMsIG1hcmdpbnNMZWdlbmQpOyAvLyB0aGlzIGFkZHMgdGhlIGxlZ2VuZFxuICAgICAgICBkaXYucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChkaXYpOyAvLyByZW1vdmUgdGVtcCBkaXYgKElFIHN0eWxlKVxuICAgICAgICBhd2FpdCB0aGlzLnNhdmVEb2MoZG9jKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgLyoqXG4gICAqIEFkZCBzY2FsZSBhbmQgYXR0cmlidXRpb25zIG9uIHRoZSBtYXAgb24gdGhlIGRvY3VtZW50XG4gICAqIEBwYXJhbSAgZG9jIC0gUGRmIGRvY3VtZW50IHdoZXJlIGxlZ2VuZCB3aWxsIGJlIGFkZGVkXG4gICAqIEBwYXJhbSAgbWFwIC0gTWFwIG9mIHRoZSBhcHBcbiAgICogQHBhcmFtICBtYXJnaW5zIC0gUGFnZSBtYXJnaW5zXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGFkZFNjYWxlKFxuICAgIGRvYzoganNwZGYsXG4gICAgbWFwOiBJZ29NYXAsXG4gICAgbWFyZ2luczogQXJyYXk8bnVtYmVyPlxuICAgICkge1xuICAgICAgY29uc3QgbWFwU2l6ZSA9IG1hcC5vbC5nZXRTaXplKCk7XG4gICAgICBjb25zdCBleHRlbnQgPSBtYXAub2wuZ2V0VmlldygpLmNhbGN1bGF0ZUV4dGVudChtYXBTaXplKTtcbiAgICAgIC8vIEdldCB0aGUgc2NhbGUgYW5kIGF0dHJpYnV0aW9uXG4gICAgICAvLyB3ZSB1c2UgY2xvbmVOb2RlIHRvIG1vZGlmeSB0aGUgbm9kZXMgdG8gcHJpbnQgd2l0aG91dCBtb2RpZnlpbmcgaXQgb24gdGhlIHBhZ2UsIHVzaW5nIGRlZXA6dHJ1ZSB0byBnZXQgY2hpbGRyZW5cbiAgICAgIGxldCBjYW52YXNPdmVybGF5SFRNTDtcbiAgICAgIGNvbnN0IG1hcE92ZXJsYXlIVE1MID0gbWFwLm9sLmdldE92ZXJsYXlDb250YWluZXJTdG9wRXZlbnQoKTtcbiAgICAgIC8vIFJlbW92ZSB0aGUgVUkgYnV0dG9ucyBmcm9tIHRoZSBub2Rlc1xuICAgICAgY29uc3QgT3ZlcmxheUhUTUxCdXR0b25zID0gbWFwT3ZlcmxheUhUTUwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpO1xuICAgICAgY29uc3QgT3ZlcmxheUhUTUxCdXR0b25zYXJyID0gQXJyYXkuZnJvbShPdmVybGF5SFRNTEJ1dHRvbnMpO1xuICAgICAgZm9yIChjb25zdCBPdmVybGF5SFRNTEJ1dHRvbiBvZiBPdmVybGF5SFRNTEJ1dHRvbnNhcnIpIHtcbiAgICAgICAgT3ZlcmxheUhUTUxCdXR0b24uc2V0QXR0cmlidXRlKCdkYXRhLWh0bWwyY2FudmFzLWlnbm9yZScsICd0cnVlJyk7XG4gICAgICB9XG4gICAgICAvLyBDaGFuZ2UgdGhlIHN0eWxlcyBvZiBoeXBlcmxpbmsgaW4gdGhlIHByaW50ZWQgdmVyc2lvblxuICAgICAgLy8gVHJhbnNmb3JtIHRoZSBPdmVybGF5IGludG8gYSBjYW52YXNcbiAgICAgIC8vIHNjYWxlIGlzIG5lY2Vzc2FyeSB0byBtYWtlIGl0IGluIGdvb2dsZSBjaHJvbWVcbiAgICAgIC8vIGJhY2tncm91bmQgYXMgbnVsbCBiZWNhdXNlIG90aGVyd2lzZSBpdCBpcyB3aGl0ZSBhbmQgY292ZXIgdGhlIG1hcFxuICAgICAgLy8gYWxsb3d0YWludCBpcyB0byBhbGxvdyByZW5kZXJpbmcgaW1hZ2VzIGluIHRoZSBhdHRyaWJ1dGlvbnNcbiAgICAgIC8vIHVzZUNPUlM6IHRydWUgcG91ciBwZXJtZXR0cmUgZGUgcmVuZGVyZXIgbGVzIGltYWdlcyAobmUgbWFyY2hlIHBhcyBlbiBsb2NhbClcbiAgICAgIGNvbnN0IGNhbnZhcyA9IGF3YWl0IGh0bWwyY2FudmFzKG1hcE92ZXJsYXlIVE1MLCB7XG4gICAgICAgIHNjYWxlOiAxLFxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IG51bGwsXG4gICAgICAgIGFsbG93VGFpbnQ6IHRydWUsXG4gICAgICAgIHVzZUNPUlM6IHRydWUsXG4gICAgICB9KS50aGVuKCBlID0+IHtcbiAgICAgICAgY2FudmFzT3ZlcmxheUhUTUwgPSBlO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmFkZENhbnZhcyhkb2MsIGNhbnZhc092ZXJsYXlIVE1MLCBtYXJnaW5zKTsgLy8gdGhpcyBhZGRzIHNjYWxlcyBhbmQgYXR0cmlidXRpb25zXG4gfVxuXG4gIGRlZmluZU5iRmlsZVRvUHJvY2VzcyhuYkZpbGVUb1Byb2Nlc3MpIHtcbiAgICB0aGlzLm5iRmlsZVRvUHJvY2VzcyA9IG5iRmlsZVRvUHJvY2VzcztcbiAgfVxuXG4gIHByaXZhdGUgdGltZW91dChtcykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRDYW52YXMoXG4gICAgZG9jOiBqc3BkZixcbiAgICBjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50LFxuICAgIG1hcmdpbnM6IEFycmF5PG51bWJlcj5cbiAgKSB7XG4gICAgbGV0IGltYWdlO1xuICAgIGlmIChjYW52YXMpIHtcbiAgICAgIGltYWdlID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvcG5nJyk7XG4gICAgfVxuXG4gICAgaWYgKGltYWdlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGltYWdlU2l6ZSA9IHRoaXMuZ2V0SW1hZ2VTaXplVG9GaXRQZGYoZG9jLCBjYW52YXMsIG1hcmdpbnMpO1xuICAgICAgZG9jLmFkZEltYWdlKFxuICAgICAgICBpbWFnZSxcbiAgICAgICAgJ1BORycsXG4gICAgICAgIG1hcmdpbnNbM10sXG4gICAgICAgIG1hcmdpbnNbMF0sXG4gICAgICAgIGltYWdlU2l6ZVswXSxcbiAgICAgICAgaW1hZ2VTaXplWzFdXG4gICAgICApO1xuICAgICAgZG9jLnJlY3QobWFyZ2luc1szXSwgbWFyZ2luc1swXSwgaW1hZ2VTaXplWzBdLCBpbWFnZVNpemVbMV0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRPRE8gZml4IHByaW50aW5nIHdpdGggaW1hZ2UgcmVzb2x1dGlvblxuICBwcml2YXRlIGFkZE1hcChcbiAgICBkb2M6IGpzcGRmLFxuICAgIG1hcDogSWdvTWFwLFxuICAgIHJlc29sdXRpb246IG51bWJlcixcbiAgICBzaXplOiBBcnJheTxudW1iZXI+LFxuICAgIG1hcmdpbnM6IEFycmF5PG51bWJlcj5cbiAgKSB7XG4gICAgY29uc3Qgc3RhdHVzJCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICBjb25zdCBtYXBTaXplID0gbWFwLm9sLmdldFNpemUoKTtcbiAgICBjb25zdCBleHRlbnQgPSBtYXAub2wuZ2V0VmlldygpLmNhbGN1bGF0ZUV4dGVudChtYXBTaXplKTtcblxuICAgIGNvbnN0IHdpZHRoUGl4ZWxzID0gTWF0aC5yb3VuZCgoc2l6ZVswXSAqIHJlc29sdXRpb24pIC8gMjUuNCk7XG4gICAgY29uc3QgaGVpZ2h0UGl4ZWxzID0gTWF0aC5yb3VuZCgoc2l6ZVsxXSAqIHJlc29sdXRpb24pIC8gMjUuNCk7XG5cbiAgICBsZXQgdGltZW91dDtcblxuICAgIG1hcC5vbC5vbmNlKCdyZW5kZXJjb21wbGV0ZScsIChldmVudDogYW55KSA9PiB7XG4gICAgICBjb25zdCBjYW52YXNlcyA9IGV2ZW50LnRhcmdldC5nZXRWaWV3cG9ydCgpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdjYW52YXMnKTtcbiAgICAgIGNvbnN0IG1hcFN0YXR1cyQkID0gbWFwLnN0YXR1cyQuc3Vic2NyaWJlKChtYXBTdGF0dXM6IFN1YmplY3RTdGF0dXMpID0+IHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuXG4gICAgICAgIGlmIChtYXBTdGF0dXMgIT09IFN1YmplY3RTdGF0dXMuRG9uZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIG1hcFN0YXR1cyQkLnVuc3Vic2NyaWJlKCk7XG5cbiAgICAgICAgbGV0IHN0YXR1cyA9IFN1YmplY3RTdGF0dXMuRG9uZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGNhbnZhcyBvZiBjYW52YXNlcykge1xuICAgICAgICAgICAgaWYgKGNhbnZhcy53aWR0aCAhPT0gMCkge1xuICAgICAgICAgICAgICB0aGlzLmFkZENhbnZhcyhkb2MsIGNhbnZhcywgbWFyZ2lucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBzdGF0dXMgPSBTdWJqZWN0U3RhdHVzLkVycm9yO1xuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuZXJyb3IoXG4gICAgICAgICAgICB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAgICAgJ2lnby5nZW8ucHJpbnRGb3JtLmNvcnNFcnJvck1lc3NhZ2VCb2R5J1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICAgICAnaWdvLmdlby5wcmludEZvcm0uY29yc0Vycm9yTWVzc2FnZUhlYWRlcidcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVuZGVyTWFwKG1hcCwgbWFwU2l6ZSwgZXh0ZW50KTtcbiAgICAgICAgc3RhdHVzJC5uZXh0KHN0YXR1cyk7XG4gICAgICB9KTtcblxuICAgICAgLy8gSWYgbm8gbG9hZGluZyBhcyBzdGFydGVkIGFmdGVyIDIwMG1zLCB0aGVuIHByb2JhYmx5IG5vIGxvYWRpbmdcbiAgICAgIC8vIGlzIHJlcXVpcmVkLlxuICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgbWFwU3RhdHVzJCQudW5zdWJzY3JpYmUoKTtcblxuICAgICAgICBsZXQgc3RhdHVzID0gU3ViamVjdFN0YXR1cy5Eb25lO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGZvciAoY29uc3QgY2FudmFzIG9mIGNhbnZhc2VzKSB7XG4gICAgICAgICAgICBpZiAoY2FudmFzLndpZHRoICE9PSAwKSB7XG4gICAgICAgICAgICAgIHRoaXMuYWRkQ2FudmFzKGRvYywgY2FudmFzLCBtYXJnaW5zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHN0YXR1cyA9IFN1YmplY3RTdGF0dXMuRXJyb3I7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5lcnJvcihcbiAgICAgICAgICAgIHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICAgICAnaWdvLmdlby5wcmludEZvcm0uY29yc0Vycm9yTWVzc2FnZUJvZHknXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgICAgICdpZ28uZ2VvLnByaW50Rm9ybS5jb3JzRXJyb3JNZXNzYWdlSGVhZGVyJ1xuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW5kZXJNYXAobWFwLCBtYXBTaXplLCBleHRlbnQpO1xuICAgICAgICBzdGF0dXMkLm5leHQoc3RhdHVzKTtcbiAgICAgIH0sIDIwMCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnJlbmRlck1hcChtYXAsIFt3aWR0aFBpeGVscywgaGVpZ2h0UGl4ZWxzXSwgZXh0ZW50KTtcblxuICAgIHJldHVybiBzdGF0dXMkO1xuICB9XG5cbiAgLyoqXG4gICAqIERvd25sb2FkIGFuIGltYWdlIG9mIHRoZSBtYXAgd2l0aCBhZGRpdGlvbiBvZiBpbmZvcm1hdGlvbnNcbiAgICogQHBhcmFtICBtYXAgLSBNYXAgb2YgdGhlIGFwcFxuICAgKiBAcGFyYW0gIGZvcm1hdCAtIEltYWdlIGZvcm1hdC4gZGVmYXVsdCB2YWx1ZSB0byBcInBuZ1wiXG4gICAqIEBwYXJhbSAgcHJvamVjdGlvbiAtIEluZGljYXRlIGlmIHByb2plY3Rpb24gbmVlZCB0byBiZSBhZGQuIERlZmF1bHQgdG8gZmFsc2VcbiAgICogQHBhcmFtICBzY2FsZSAtIEluZGljYXRlIGlmIHNjYWxlIG5lZWQgdG8gYmUgYWRkLiBEZWZhdWx0IHRvIGZhbHNlXG4gICAqIEBwYXJhbSAgbGVnZW5kIC0gSW5kaWNhdGUgaWYgdGhlIGxlZ2VuZCBvZiBsYXllcnMgbmVlZCB0byBiZSBkb3dubG9hZC4gRGVmYXVsdCB0byBmYWxzZVxuICAgKiBAcGFyYW0gIHRpdGxlIC0gVGl0bGUgdG8gYWRkIGZvciB0aGUgbWFwIC0gRGVmYXVsdCB0byBibGFua1xuICAgKiBAcGFyYW0gIHN1YnRpdGxlIC0gU3VidGl0bGUgdG8gYWRkIGZvciB0aGUgbWFwIC0gRGVmYXVsdCB0byBibGFua1xuICAgKiBAcGFyYW0gIGNvbW1lbnQgLSBDb21tZW50IHRvIGFkZCBmb3IgdGhlIG1hcCAtIERlZmF1bHQgdG8gYmxhbmtcbiAgICogQHBhcmFtICBkb1ppcEZpbGUgLSBJbmRpY2F0ZSBpZiB3ZSBkbyBhIHppcCB3aXRoIHRoZSBmaWxlXG4gICAqIEByZXR1cm4gSW1hZ2UgZmlsZSBvZiB0aGUgbWFwIHdpdGggZXh0ZW5zaW9uIGZvcm1hdCBnaXZlbiBhcyBwYXJhbWV0ZXJcbiAgICovXG4gIGRvd25sb2FkTWFwSW1hZ2UoXG4gICAgbWFwOiBJZ29NYXAsXG4gICAgcmVzb2x1dGlvbjogbnVtYmVyLFxuICAgIGZvcm1hdCA9ICdwbmcnLFxuICAgIHByb2plY3Rpb24gPSBmYWxzZSxcbiAgICBzY2FsZSA9IGZhbHNlLFxuICAgIGxlZ2VuZCA9IGZhbHNlLFxuICAgIHRpdGxlID0gJycsXG4gICAgc3VidGl0bGUgPSAnJyxcbiAgICBjb21tZW50ID0gJycsXG4gICAgZG9aaXBGaWxlID0gdHJ1ZVxuICApIHtcbiAgICBjb25zdCBzdGF0dXMkID0gbmV3IFN1YmplY3QoKTtcbiAgICAvLyBjb25zdCByZXNvbHV0aW9uID0gbWFwLm9sLmdldFZpZXcoKS5nZXRSZXNvbHV0aW9uKCk7XG4gICAgdGhpcy5hY3Rpdml0eUlkID0gdGhpcy5hY3Rpdml0eVNlcnZpY2UucmVnaXN0ZXIoKTtcbiAgICBjb25zdCB0cmFuc2xhdGUgPSB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGU7XG4gICAgbWFwLm9sLm9uY2UoJ3JlbmRlcmNvbXBsZXRlJywgKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgIGZvcm1hdCA9IGZvcm1hdC50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3Qgb2xkQ2FudmFzID0gZXZlbnQudGFyZ2V0XG4gICAgICAgIC5nZXRWaWV3cG9ydCgpXG4gICAgICAgIC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnY2FudmFzJylbMF07XG4gICAgICBjb25zdCBuZXdDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgIGNvbnN0IG5ld0NvbnRleHQgPSBuZXdDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICAgIC8vIFBvc3Rpb24gaW4gaGVpZ2h0IHRvIHNldCB0aGUgY2FudmFzIGluIG5ldyBjYW52YXNcbiAgICAgIGxldCBwb3NpdGlvbkhDYW52YXMgPSAwO1xuICAgICAgLy8gUG9zaXRpb24gaW4gd2lkdGggdG8gc2V0IHRoZSBQcm9qL1NjYWxlIGluIG5ldyBjYW52YXNcbiAgICAgIGxldCBwb3NpdGlvbldQcm9qU2NhbGUgPSAxMDtcbiAgICAgIC8vIEdldCBoZWlnaHQvd2lkdGggb2YgbWFwIGNhbnZhc1xuICAgICAgY29uc3Qgd2lkdGggPSBvbGRDYW52YXMud2lkdGg7XG4gICAgICBsZXQgaGVpZ2h0ID0gb2xkQ2FudmFzLmhlaWdodDtcbiAgICAgIC8vIFNldCBGb250IHRvIGNhbGN1bGF0ZSBjb21tZW50IHdpZHRoXG4gICAgICBuZXdDb250ZXh0LmZvbnQgPSAnMjBweCBDYWxpYnJpJztcbiAgICAgIGNvbnN0IGNvbW1lbnRXaWR0aCA9IG5ld0NvbnRleHQubWVhc3VyZVRleHQoY29tbWVudCkud2lkdGg7XG4gICAgICAvLyBBZGQgaGVpZ2h0IGZvciB0aXRsZSBpZiBkZWZpbmVkXG4gICAgICBoZWlnaHQgPSB0aXRsZSAhPT0gJycgPyBoZWlnaHQgKyAzMCA6IGhlaWdodDtcbiAgICAgIC8vIEFkZCBoZWlnaHQgZm9yIHRpdGxlIGlmIGRlZmluZWRcbiAgICAgIGhlaWdodCA9IHN1YnRpdGxlICE9PSAnJyA/IGhlaWdodCArIDMwIDogaGVpZ2h0O1xuICAgICAgLy8gQWRkIGhlaWdodCBmb3IgcHJvamVjdGlvbiBvciBzY2FsZSAoc2FtZSBsaW5lKSBpZiBkZWZpbmVkXG4gICAgICBoZWlnaHQgPSBwcm9qZWN0aW9uICE9PSBmYWxzZSB8fCBzY2FsZSAhPT0gZmFsc2UgPyBoZWlnaHQgKyAzMCA6IGhlaWdodDtcbiAgICAgIGNvbnN0IHBvc2l0aW9uSFByb2pTY2FsZSA9IGhlaWdodCAtIDEwO1xuICAgICAgLy8gRGVmaW5lIG51bWJlciBvZiBsaW5lIGRlcGVuZGluZyBvZiB0aGUgY29tbWVudCBsZW5ndGhcbiAgICAgIGNvbnN0IGNvbW1lbnROYkxpbmUgPSBNYXRoLmNlaWwoY29tbWVudFdpZHRoIC8gd2lkdGgpO1xuICAgICAgLy8gQWRkIGhlaWdodCBmb3IgbXVsdGlsaW5lIGNvbW1lbnQgaWYgZGVmaW5lZFxuICAgICAgaGVpZ2h0ID0gY29tbWVudCAhPT0gJycgPyBoZWlnaHQgKyBjb21tZW50TmJMaW5lICogMzAgOiBoZWlnaHQ7XG4gICAgICBsZXQgcG9zaXRpb25IQ29tbWVudCA9IGhlaWdodCAtIGNvbW1lbnROYkxpbmUgKiAyMCArIDU7XG4gICAgICAvLyBTZXQgdGhlIG5ldyBjYW52YXMgd2l0aCB0aGUgbmV3IGNhbGN1bGF0ZWQgc2l6ZVxuICAgICAgbmV3Q2FudmFzLndpZHRoID0gd2lkdGg7XG4gICAgICBuZXdDYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgLy8gUGF0Y2ggSnBlZyBkZWZhdWx0IGJsYWNrIGJhY2tncm91bmQgdG8gd2hpdGVcbiAgICAgIGlmIChmb3JtYXQgPT09ICdqcGVnJykge1xuICAgICAgICBuZXdDb250ZXh0LmZpbGxTdHlsZSA9ICcjZmZmZmZmJztcbiAgICAgICAgbmV3Q29udGV4dC5maWxsUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgbmV3Q29udGV4dC5maWxsU3R5bGUgPSAnIzAwMDAwMCc7XG4gICAgICB9XG4gICAgICAvLyBJZiBhIHRpdGxlIG5lZWQgdG8gYmUgYWRkZWQgdG8gY2FudmFzXG4gICAgICBpZiAodGl0bGUgIT09ICcnKSB7XG4gICAgICAgIC8vIFNldCBmb250IGZvciB0aXRsZVxuICAgICAgICAvLyBBZGp1c3QgYWNjb3JkaW5nIHRvIHRpdGxlIGxlbmd0aFxuICAgICAgICBuZXdDb250ZXh0LmZvbnQgPSAnMjZweCBDYWxpYnJpJztcbiAgICAgICAgcG9zaXRpb25IQ2FudmFzID0gMzA7XG4gICAgICAgIG5ld0NvbnRleHQudGV4dEFsaWduID0gJ2NlbnRlcic7XG4gICAgICAgIG5ld0NvbnRleHQuZmlsbFRleHQodGl0bGUsIHdpZHRoIC8gMiwgMjAsIHdpZHRoICogMC45KTtcbiAgICAgIH1cbiAgICAgIGlmIChzdWJ0aXRsZSAhPT0gJycpIHtcbiAgICAgICAgLy8gU2V0IGZvbnQgZm9yIHN1YnRpdGxlXG4gICAgICAgIC8vIEFkanVzdCBhY2NvcmRpbmcgdG8gdGl0bGUgbGVuZ3RoXG4gICAgICAgIG5ld0NvbnRleHQuZm9udCA9ICcyNnB4IENhbGlicmknO1xuICAgICAgICBwb3NpdGlvbkhDYW52YXMgPSA2MDtcbiAgICAgICAgbmV3Q29udGV4dC50ZXh0QWxpZ24gPSAnY2VudGVyJztcbiAgICAgICAgbmV3Q29udGV4dC5maWxsVGV4dChzdWJ0aXRsZSwgd2lkdGggLyAyLCA1MCwgd2lkdGggKiAwLjkpO1xuICAgICAgfVxuICAgICAgLy8gU2V0IGZvbnQgZm9yIG5leHQgc2VjdGlvblxuICAgICAgbmV3Q29udGV4dC5mb250ID0gJzIwcHggQ2FsaWJyaSc7XG4gICAgICAvLyBJZiBwcm9qZWN0aW9uIG5lZWQgdG8gYmUgYWRkZWQgdG8gY2FudmFzXG4gICAgICBpZiAocHJvamVjdGlvbiAhPT0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgcHJvalRleHQgPSB0cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5wcmludEZvcm0ucHJvamVjdGlvbicpO1xuICAgICAgICBuZXdDb250ZXh0LnRleHRBbGlnbiA9ICdzdGFydCc7XG4gICAgICAgIG5ld0NvbnRleHQuZmlsbFRleHQoXG4gICAgICAgICAgcHJvalRleHQgKyAnOiAnICsgbWFwLnByb2plY3Rpb24sXG4gICAgICAgICAgcG9zaXRpb25XUHJvalNjYWxlLFxuICAgICAgICAgIHBvc2l0aW9uSFByb2pTY2FsZVxuICAgICAgICApO1xuICAgICAgICBwb3NpdGlvbldQcm9qU2NhbGUgKz0gMjAwOyAvLyBXaWR0aCBwb3NpdGlvbiBjaGFuZ2UgZm9yIHNjYWxlIHBvc2l0aW9uXG4gICAgICB9XG5cbiAgICAgIC8vIElmIHNjYWxlIG5lZWQgdG8gYmUgYWRkZWQgdG8gY2FudmFzXG4gICAgICBpZiAoc2NhbGUgIT09IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IHNjYWxlVGV4dCA9IHRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLnByaW50Rm9ybS5zY2FsZScpO1xuICAgICAgICBjb25zdCBtYXBTY2FsZSA9IG1hcC52aWV3Q29udHJvbGxlci5nZXRTY2FsZShyZXNvbHV0aW9uKTtcbiAgICAgICAgbmV3Q29udGV4dC50ZXh0QWxpZ24gPSAnc3RhcnQnO1xuICAgICAgICBuZXdDb250ZXh0LmZpbGxUZXh0KFxuICAgICAgICAgIHNjYWxlVGV4dCArICc6IH4gMSAvICcgKyBmb3JtYXRTY2FsZShtYXBTY2FsZSksXG4gICAgICAgICAgcG9zaXRpb25XUHJvalNjYWxlLFxuICAgICAgICAgIHBvc2l0aW9uSFByb2pTY2FsZVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgLy8gSWYgYSBjb21tZW50IG5lZWQgdG8gYmUgYWRkZWQgdG8gY2FudmFzXG4gICAgICBpZiAoY29tbWVudCAhPT0gJycpIHtcbiAgICAgICAgbmV3Q29udGV4dC50ZXh0QWxpZ24gPSAnY2VudGVyJztcbiAgICAgICAgLy8gSWYgb25seSBvbmUgbGluZSwgbm8gbmVlZCB0byBtdWx0aWxpbmUgdGhlIGNvbW1lbnRcbiAgICAgICAgaWYgKGNvbW1lbnROYkxpbmUgPT09IDEpIHtcbiAgICAgICAgICBuZXdDb250ZXh0LmZpbGxUZXh0KGNvbW1lbnQsIHdpZHRoIC8gMiwgcG9zaXRpb25IQ29tbWVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gU2VwYXJhdGUgdGhlIHNldGVuc2VzIHRvIGJlIGFwcHJveC4gdGhlIHNhbWUgbGVuZ3RoXG4gICAgICAgICAgY29uc3QgbmJDb21tZW50Q2hhciA9IGNvbW1lbnQubGVuZ3RoO1xuICAgICAgICAgIGNvbnN0IENvbW1lbnRMZW5ndGhUb0N1dCA9IE1hdGguZmxvb3IobmJDb21tZW50Q2hhciAvIGNvbW1lbnROYkxpbmUpO1xuICAgICAgICAgIGxldCBjb21tZW50Q3VycmVudExpbmUgPSAnJztcbiAgICAgICAgICBsZXQgcG9zaXRpb25GaXJzdEN1dENoYXIgPSAwO1xuICAgICAgICAgIGxldCBwb3NpdGlvbkxhc3RCbGFuaztcbiAgICAgICAgICAvLyBMb29wIGZvciB0aGUgbnVtYmVyIG9mIGxpbmUgY2FsY3VsYXRlZFxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29tbWVudE5iTGluZTsgaSsrKSB7XG4gICAgICAgICAgICAvLyBGb3IgYWxsIGxpbmUgZXhjZXB0IGxhc3RcbiAgICAgICAgICAgIGlmIChjb21tZW50TmJMaW5lIC0gMSA+IGkpIHtcbiAgICAgICAgICAgICAgLy8gR2V0IGNvbW1lbnQgY3VycmVudCBsaW5lIHRvIGZpbmQgdGhlIHJpZ2h0IHBsYWNlIHR1IGN1dCBjb21tZW50XG4gICAgICAgICAgICAgIGNvbW1lbnRDdXJyZW50TGluZSA9IGNvbW1lbnQuc3Vic3RyKFxuICAgICAgICAgICAgICAgIHBvc2l0aW9uRmlyc3RDdXRDaGFyLFxuICAgICAgICAgICAgICAgIENvbW1lbnRMZW5ndGhUb0N1dFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAvLyBDdXQgdGhlIHNldGVuY2UgYXQgYmxhbmtcbiAgICAgICAgICAgICAgcG9zaXRpb25MYXN0QmxhbmsgPSBjb21tZW50Q3VycmVudExpbmUubGFzdEluZGV4T2YoJyAnKTtcbiAgICAgICAgICAgICAgbmV3Q29udGV4dC5maWxsVGV4dChcbiAgICAgICAgICAgICAgICBjb21tZW50Q3VycmVudExpbmUuc3Vic3RyKDAsIHBvc2l0aW9uTGFzdEJsYW5rKSxcbiAgICAgICAgICAgICAgICB3aWR0aCAvIDIsXG4gICAgICAgICAgICAgICAgcG9zaXRpb25IQ29tbWVudFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBwb3NpdGlvbkZpcnN0Q3V0Q2hhciArPSBwb3NpdGlvbkxhc3RCbGFuaztcbiAgICAgICAgICAgICAgLy8gR28gdG8gbmV4dCBsaW5lIGZvciBpbnNlcnRpb25cbiAgICAgICAgICAgICAgcG9zaXRpb25IQ29tbWVudCArPSAyMDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIERvbid0IGN1dCBsYXN0IHBhcnRcbiAgICAgICAgICAgICAgbmV3Q29udGV4dC5maWxsVGV4dChcbiAgICAgICAgICAgICAgICBjb21tZW50LnN1YnN0cihwb3NpdGlvbkZpcnN0Q3V0Q2hhciksXG4gICAgICAgICAgICAgICAgd2lkdGggLyAyLFxuICAgICAgICAgICAgICAgIHBvc2l0aW9uSENvbW1lbnRcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIEFkZCBtYXAgdG8gbmV3IGNhbnZhc1xuICAgICAgbmV3Q29udGV4dC5kcmF3SW1hZ2Uob2xkQ2FudmFzLCAwLCBwb3NpdGlvbkhDYW52YXMpO1xuXG4gICAgICBsZXQgc3RhdHVzID0gU3ViamVjdFN0YXR1cy5Eb25lO1xuICAgICAgbGV0IGZpbGVOYW1lV2l0aEV4dCA9ICdtYXAuJyArIGZvcm1hdDtcbiAgICAgIGlmIChmb3JtYXQudG9Mb3dlckNhc2UoKSA9PT0gJ3RpZmYnKSB7XG4gICAgICAgIGZpbGVOYW1lV2l0aEV4dCA9ICdtYXAnICsgbWFwLnByb2plY3Rpb24ucmVwbGFjZSgnOicsICdfJykgKyAnLicgKyBmb3JtYXQ7XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIFNhdmUgdGhlIGNhbnZhcyBhcyBmaWxlXG4gICAgICAgIGlmICghZG9aaXBGaWxlKSB7XG4gICAgICAgICAgdGhpcy5zYXZlQ2FudmFzSW1hZ2VBc0ZpbGUobmV3Q2FudmFzLCBmaWxlTmFtZVdpdGhFeHQsIGZvcm1hdCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0LnRvTG93ZXJDYXNlKCkgPT09ICd0aWZmJykge1xuICAgICAgICAgIC8vIEFkZCB0aGUgY2FudmFzIHRvIHppcFxuICAgICAgICAgIHRoaXMuZ2VuZXJhdGVDYW52YUZpbGVUb1ppcChuZXdDYW52YXMsIGZpbGVOYW1lV2l0aEV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQWRkIHRoZSBjYW52YXMgdG8gemlwXG4gICAgICAgICAgdGhpcy5nZW5lcmF0ZUNhbnZhRmlsZVRvWmlwKG5ld0NhbnZhcywgZmlsZU5hbWVXaXRoRXh0KTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHN0YXR1cyA9IFN1YmplY3RTdGF0dXMuRXJyb3I7XG4gICAgICB9XG5cbiAgICAgIHN0YXR1cyQubmV4dChzdGF0dXMpO1xuXG4gICAgICBpZiAoZm9ybWF0LnRvTG93ZXJDYXNlKCkgPT09ICd0aWZmJykge1xuICAgICAgICBjb25zdCB0ZndGaWxlTmFtZVdpdGhFeHQgPSBmaWxlTmFtZVdpdGhFeHQuc3Vic3RyaW5nKDAsIGZpbGVOYW1lV2l0aEV4dC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJy50aWZmJykpICsgJy50ZncnO1xuICAgICAgICBjb25zdCB0aXdDb250ZW50ID0gdGhpcy5nZXRXb3JsZEZpbGVJbmZvcm1hdGlvbihtYXApO1xuICAgICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW3Rpd0NvbnRlbnRdLCB7XG4gICAgICAgICAgdHlwZTogJ3RleHQvcGxhaW47Y2hhcnNldD11dGYtOCdcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghZG9aaXBGaWxlKSB7XG4gICAgICAgICAgLy8gc2F2ZUFzIGF1dG9tYXRpY2x5IHJlcGxhY2UgJzonIGZvciAnXydcbiAgICAgICAgICBzYXZlQXMoYmxvYiwgdGZ3RmlsZU5hbWVXaXRoRXh0KTtcbiAgICAgICAgICB0aGlzLnNhdmVGaWxlUHJvY2Vzc2luZygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEFkZCB0aGUgY2FudmFzIHRvIHppcFxuICAgICAgICAgIHRoaXMuYWRkRmlsZVRvWmlwKHRmd0ZpbGVOYW1lV2l0aEV4dCxibG9iKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIG1hcC5vbC5yZW5kZXJTeW5jKCk7XG5cbiAgICByZXR1cm4gc3RhdHVzJDtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyTWFwKG1hcCwgc2l6ZSwgZXh0ZW50KSB7XG4gICAgbWFwLm9sLnVwZGF0ZVNpemUoKTtcbiAgICBtYXAub2wucmVuZGVyU3luYygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmUgZG9jdW1lbnRcbiAgICogQHBhcmFtICBkb2MgLSBEb2N1bWVudCB0byBzYXZlXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgc2F2ZURvYyhkb2M6IGpzcGRmKSB7XG4gICAgYXdhaXQgZG9jLnNhdmUoJ21hcC5wZGYnLCB7IHJldHVyblByb21pc2U6IHRydWUgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBiZXN0IEltYWdlIHNpemUgdG8gZml0IGluIHBkZlxuICAgKiBAcGFyYW0gZG9jIC0gUGRmIERvY3VtZW50XG4gICAqIEBwYXJhbSBjYW52YXMgLSBDYW52YXMgb2YgaW1hZ2VcbiAgICogQHBhcmFtIG1hcmdpbnMgLSBQYWdlIG1hcmdpbnNcbiAgICovXG4gIHByaXZhdGUgZ2V0SW1hZ2VTaXplVG9GaXRQZGYoZG9jLCBjYW52YXMsIG1hcmdpbnMpIHtcbiAgICAvLyBEZWZpbmUgdmFyaWFibGUgdG8gY2FsY3VsYXRlIGJlc3Qgc2l6ZSB0byBmaXQgaW4gb25lIHBhZ2VcbiAgICBjb25zdCBwYWdlSGVpZ2h0ID1cbiAgICAgIGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS5nZXRIZWlnaHQoKSAtIChtYXJnaW5zWzBdICsgbWFyZ2luc1syXSk7XG4gICAgY29uc3QgcGFnZVdpZHRoID1cbiAgICAgIGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS5nZXRXaWR0aCgpIC0gKG1hcmdpbnNbMV0gKyBtYXJnaW5zWzNdKTtcbiAgICBjb25zdCBjYW5IZWlnaHQgPSBjYW52YXMuaGVpZ2h0O1xuICAgIGNvbnN0IGNhbldpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIGNvbnN0IGhlaWdodFJhdGlvID0gY2FuSGVpZ2h0IC8gcGFnZUhlaWdodDtcbiAgICBjb25zdCB3aWR0aFJhdGlvID0gY2FuV2lkdGggLyBwYWdlV2lkdGg7XG4gICAgY29uc3QgbWF4UmF0aW8gPSBoZWlnaHRSYXRpbyA+IHdpZHRoUmF0aW8gPyBoZWlnaHRSYXRpbyA6IHdpZHRoUmF0aW87XG4gICAgY29uc3QgaW1nSGVpZ2ggPSBtYXhSYXRpbyA+IDEgPyBjYW5IZWlnaHQgLyBtYXhSYXRpbyA6IGNhbkhlaWdodDtcbiAgICBjb25zdCBpbWdXaWR0aCA9IG1heFJhdGlvID4gMSA/IGNhbldpZHRoIC8gbWF4UmF0aW8gOiBjYW5XaWR0aDtcblxuICAgIHJldHVybiBbaW1nV2lkdGgsIGltZ0hlaWdoXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSB3b3JsZCBmaWxlIGluZm9ybWF0aW9uIGZvciB0aWZmXG4gICAqIEBwYXJhbSAgbWFwIC0gTWFwIG9mIHRoZSBhcHBcbiAgICovXG4gIHByaXZhdGUgZ2V0V29ybGRGaWxlSW5mb3JtYXRpb24obWFwKSB7XG4gICAgY29uc3QgY3VycmVudFJlc29sdXRpb24gPSBtYXAudmlld0NvbnRyb2xsZXIuZ2V0UmVzb2x1dGlvbigpO1xuICAgIGNvbnN0IGN1cnJlbnRFeHRlbnQgPSBtYXAudmlld0NvbnRyb2xsZXIuZ2V0RXh0ZW50KCk7IC8vIFJldHVybiBbbWlueCwgbWlueSwgbWF4eCwgbWF4eV1cbiAgICByZXR1cm4gW1xuICAgICAgY3VycmVudFJlc29sdXRpb24sXG4gICAgICAwLFxuICAgICAgMCxcbiAgICAgIC1jdXJyZW50UmVzb2x1dGlvbixcbiAgICAgIGN1cnJlbnRFeHRlbnRbMF0gKyBjdXJyZW50UmVzb2x1dGlvbiAvIDAuNSxcbiAgICAgIGN1cnJlbnRFeHRlbnRbM10gLSBjdXJyZW50UmVzb2x1dGlvbiAvIDAuNVxuICAgIF0uam9pbignXFxuJyk7XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSBjYW52YXMgaW1hZ2UgYXMgZmlsZVxuICAgKiBAcGFyYW0gY2FudmFzIC0gQ2FudmFzIHRvIHNhdmVcbiAgICogQHBhcmFtIG5hbWUgLSBOYW1lIG9mIHRoZSBmaWxlXG4gICAqIEBwYXJhbSBmb3JtYXQgLSBmaWxlIGZvcm1hdFxuICAgKi9cbiAgcHJpdmF0ZSBzYXZlQ2FudmFzSW1hZ2VBc0ZpbGUoY2FudmFzLCBuYW1lV2l0aEV4dCwgZm9ybWF0KSB7XG4gICAgY29uc3QgYmxvYkZvcm1hdCA9ICdpbWFnZS8nICsgZm9ybWF0O1xuICAgIGNvbnN0IHRoYXQgPSB0aGlzO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNhbnZhcy50b0RhdGFVUkwoKTsgLy8gSnVzdCB0byBtYWtlIHRoZSBjYXRjaCB0cmlnZ2VyIHdpaHRvdXQgdG9CbG9iIEVycm9yIHRocm93IG5vdCBjYXRjaGVkXG4gICAgICAvLyBJZiBuYXZpZ2F0b3IgaXMgSW50ZXJuZXQgRXhwbG9yZXJcbiAgICAgIGlmIChuYXZpZ2F0b3IubXNTYXZlQmxvYikge1xuICAgICAgICBuYXZpZ2F0b3IubXNTYXZlQmxvYihjYW52YXMubXNUb0Jsb2IoKSwgbmFtZVdpdGhFeHQpO1xuICAgICAgICB0aGlzLnNhdmVGaWxlUHJvY2Vzc2luZygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FudmFzLnRvQmxvYigoYmxvYikgPT4ge1xuICAgICAgICAgIC8vIGRvd25sb2FkIGltYWdlXG4gICAgICAgICAgc2F2ZUFzKGJsb2IsIG5hbWVXaXRoRXh0KTtcbiAgICAgICAgICB0aGF0LnNhdmVGaWxlUHJvY2Vzc2luZygpO1xuICAgICAgICB9LCBibG9iRm9ybWF0KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuZXJyb3IoXG4gICAgICAgIHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICdpZ28uZ2VvLnByaW50Rm9ybS5jb3JzRXJyb3JNZXNzYWdlQm9keSdcbiAgICAgICAgKSxcbiAgICAgICAgdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgJ2lnby5nZW8ucHJpbnRGb3JtLmNvcnNFcnJvck1lc3NhZ2VIZWFkZXInXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBmaWxlIHRvIGEgemlwXG4gICAqIEBwYXJhbSBjYW52YXMgLSBGaWxlIHRvIGFkZCB0byB0aGUgemlwXG4gICAqIEBwYXJhbSAgbmFtZSAtTmFtZSBvZiB0aGUgZmlsZW92ZXJ2aWV3XG4gICAqL1xuICBwcml2YXRlIGdlbmVyYXRlQ2FudmFGaWxlVG9aaXAoY2FudmFzLCBuYW1lKSB7XG4gICAgY29uc3QgYmxvYkZvcm1hdCA9ICdpbWFnZS8nICsgJ2pwZWcnO1xuICAgIGNvbnN0IHRoYXQgPSB0aGlzO1xuICAgIGlmIChcbiAgICAgICF0aGlzLmhhc093blByb3BlcnR5KCd6aXBGaWxlJykgfHxcbiAgICAgIHR5cGVvZiB0aGlzLnppcEZpbGUgPT09ICd1bmRlZmluZWQnXG4gICAgKSB7XG4gICAgICB0aGlzLnppcEZpbGUgPSBuZXcgSlNaaXAoKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY2FudmFzLnRvRGF0YVVSTCgpOyAvLyBKdXN0IHRvIG1ha2UgdGhlIGNhdGNoIHRyaWdnZXIgd2lodG91dCB0b0Jsb2IgRXJyb3IgdGhyb3cgbm90IGNhdGNoZWRcbiAgICAgIGlmIChuYXZpZ2F0b3IubXNTYXZlQmxvYikge1xuICAgICAgICB0aGlzLmFkZEZpbGVUb1ppcChuYW1lLCBjYW52YXMubXNUb0Jsb2IoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYW52YXMudG9CbG9iKChibG9iKSA9PiB7XG4gICAgICAgICAgdGhhdC5hZGRGaWxlVG9aaXAobmFtZSwgYmxvYik7XG4gICAgICAgIH0sIGJsb2JGb3JtYXQpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5lcnJvcihcbiAgICAgICAgdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgJ2lnby5nZW8ucHJpbnRGb3JtLmNvcnNFcnJvck1lc3NhZ2VCb2R5J1xuICAgICAgICApLFxuICAgICAgICB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAnaWdvLmdlby5wcmludEZvcm0uY29yc0Vycm9yTWVzc2FnZUhlYWRlcidcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkIGZpbGUgdG8gemlwLCBpZiBhbGwgZmlsZSBhcmUgemlwcGVkLCBkb3dubG9hZFxuICAgKiBAcGFyYW0gbmFtZSAtIE5hbWUgb2YgdGhlIGZpbGVzXG4gICAqIEBwYXJhbSBibG9iIC0gQ29udGFpbiBvZiBmaWxlXG4gICAqL1xuICBwcml2YXRlIGFkZEZpbGVUb1ppcChuYW1lLCBibG9iKSB7XG4gICAgLy8gYWRkIGZpbGUgdG8gemlwXG4gICAgdGhpcy56aXBGaWxlLmZpbGUobmFtZSwgYmxvYik7XG4gICAgdGhpcy5uYkZpbGVUb1Byb2Nlc3MtLTtcblxuICAgIC8vIElmIGFsbCBmaWxlcyBhcmUgcHJvY2Nlc3NlZFxuICAgIGlmICh0aGlzLm5iRmlsZVRvUHJvY2VzcyA9PT0gMCkge1xuICAgICAgLy8gRG93bmxvYWQgemlwIGZpbGVcbiAgICAgIHRoaXMuZ2V0WmlwRmlsZSgpO1xuICAgICAgLy8gU3RvcCBsb2FkaW5nXG4gICAgICB0aGlzLmFjdGl2aXR5U2VydmljZS51bnJlZ2lzdGVyKHRoaXMuYWN0aXZpdHlJZCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzYXZlRmlsZVByb2Nlc3NpbmcoKSB7XG4gICAgdGhpcy5uYkZpbGVUb1Byb2Nlc3MtLTtcblxuICAgIC8vIElmIGFsbCBmaWxlcyBhcmUgcHJvY2Nlc3NlZFxuICAgIGlmICh0aGlzLm5iRmlsZVRvUHJvY2VzcyA9PT0gMCkge1xuICAgICAgLy8gU3RvcCBsb2FkaW5nXG4gICAgICB0aGlzLmFjdGl2aXR5U2VydmljZS51bnJlZ2lzdGVyKHRoaXMuYWN0aXZpdHlJZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgemlwcGVkIGZpbGVcbiAgICogQHJldHVybiBSZXR1biBhIHppcCBmaWxlXG4gICAqL1xuICBwcml2YXRlIGdldFppcEZpbGUoKSB7XG4gICAgY29uc3QgdGhhdCA9IHRoaXM7XG4gICAgdGhpcy56aXBGaWxlLmdlbmVyYXRlQXN5bmMoeyB0eXBlOiAnYmxvYicgfSkudGhlbigoYmxvYikgPT4ge1xuICAgICAgLy8gMSkgZ2VuZXJhdGUgdGhlIHppcCBmaWxlXG4gICAgICBzYXZlQXMoYmxvYiwgJ21hcC56aXAnKTtcbiAgICAgIGRlbGV0ZSB0aGF0LnppcEZpbGU7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
807
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL3ByaW50L3NoYXJlZC9wcmludC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxHQUFHLElBQUksS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNwQyxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxXQUFXLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxPQUFPLElBQUksS0FBSyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBRXpDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUkvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7Ozs7QUFhbEUsTUFBTSxPQUFPLFlBQVk7SUFJdkIsWUFDVSxJQUFnQixFQUNoQixjQUE4QixFQUM5QixlQUFnQyxFQUNoQyxlQUFnQyxFQUNoQyxhQUE0QjtRQUo1QixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO0lBQ25DLENBQUM7SUFFSixLQUFLLENBQUMsR0FBVyxFQUFF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UUFDdEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzt3RUFuOUJVLFlBQVk7a0VBQVosWUFBWSxXQUFaLFlBQVksbUJBRlgsTUFBTTt1RkFFUCxZQUFZO2NBSHhCLFVBQVU7ZUFBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuXHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIGZvcmtKb2luIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCBhcyByeE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7IHNhdmVBcyB9IGZyb20gJ2ZpbGUtc2F2ZXInO1xyXG5pbXBvcnQganNwZGYgZnJvbSAnanNwZGYnO1xyXG5pbXBvcnQgaHRtbDJjYW52YXMgZnJvbSAnaHRtbDJjYW52YXMnO1xyXG5pbXBvcnQgeyBkZWZhdWx0IGFzIEpTWmlwIH0gZnJvbSAnanN6aXAnO1xyXG5cclxuaW1wb3J0IHsgU3ViamVjdFN0YXR1cyB9IGZyb20gJ0BpZ28yL3V0aWxzJztcclxuaW1wb3J0IHsgU2VjdXJlSW1hZ2VQaXBlIH0gZnJvbSAnQGlnbzIvY29tbW9uJztcclxuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UsIEFjdGl2aXR5U2VydmljZSwgTGFuZ3VhZ2VTZXJ2aWNlLCBDb25maWdTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBJZ29NYXAgfSBmcm9tICcuLi8uLi9tYXAvc2hhcmVkL21hcCc7XHJcbmltcG9ydCB7IGZvcm1hdFNjYWxlIH0gZnJvbSAnLi4vLi4vbWFwL3NoYXJlZC9tYXAudXRpbHMnO1xyXG5pbXBvcnQgeyBMZWdlbmRNYXBWaWV3T3B0aW9ucyB9IGZyb20gJy4uLy4uL2xheWVyL3NoYXJlZC9sYXllcnMvbGF5ZXIuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgZ2V0TGF5ZXJzTGVnZW5kcyB9IGZyb20gJy4uLy4uL2xheWVyL3V0aWxzL291dHB1dExlZ2VuZCc7XHJcblxyXG5pbXBvcnQgeyBQcmludE9wdGlvbnMgfSBmcm9tICcuL3ByaW50LmludGVyZmFjZSc7XHJcblxyXG5kZWNsYXJlIGdsb2JhbCB7XHJcbiAgaW50ZXJmYWNlIE5hdmlnYXRvciB7XHJcbiAgICBtc1NhdmVCbG9iPzogKGJsb2I6IGFueSwgZGVmYXVsdE5hbWU/OiBzdHJpbmcpID0+IGJvb2xlYW5cclxuICB9XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFByaW50U2VydmljZSB7XHJcbiAgemlwRmlsZTogSlNaaXA7XHJcbiAgbmJGaWxlVG9Qcm9jZXNzOiBudW1iZXI7XHJcbiAgYWN0aXZpdHlJZDogc3RyaW5nO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFjdGl2aXR5U2VydmljZTogQWN0aXZpdHlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBsYW5ndWFnZVNlcnZpY2U6IExhbmd1YWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZVxyXG4gICkge31cclxuXHJcbiAgcHJpbnQobWFwOiBJZ29NYXAsIG9wdGlvbnM6IFByaW50T3B0aW9ucyk6IFN1YmplY3Q8YW55PiB7XHJcbiAgICBjb25zdCBzdGF0dXMkID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgICBjb25zdCBwYXBlckZvcm1hdDogc3RyaW5nID0gb3B0aW9ucy5wYXBlckZvcm1hdDtcclxuICAgIGNvbnN0IHJlc29sdXRpb24gPSArb3B0aW9ucy5yZXNvbHV0aW9uOyAvLyBEZWZhdWx0IGlzIDk2XHJcbiAgICBjb25zdCBvcmllbnRhdGlvbiA9IG9wdGlvbnMub3JpZW50YXRpb247XHJcbiAgICBjb25zdCBsZWdlbmRQb3N0aW9uID0gb3B0aW9ucy5sZWdlbmRQb3NpdGlvbjtcclxuXHJcbiAgICB0aGlzLmFjdGl2aXR5SWQgPSB0aGlzLmFjdGl2aXR5U2VydmljZS5yZWdpc3RlcigpO1xyXG4gICAgY29uc3QgZG9jID0gbmV3IGpzcGRmKHtcclxuICAgICAgb3JpZW50YXRpb24sXHJcbiAgICAgIGZvcm1hdDogcGFwZXJGb3JtYXQudG9Mb3dlckNhc2UoKVxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgZGltZW5zaW9ucyA9IFtcclxuICAgICAgZG9jLmludGVybmFsLnBhZ2VTaXplLndpZHRoLFxyXG4gICAgICBkb2MuaW50ZXJuYWwucGFnZVNpemUuaGVpZ2h0XHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0IG1hcmdpbnMgPSBbMTAsIDEwLCAxMCwgMTBdO1xyXG4gICAgY29uc3Qgd2lkdGggPSBkaW1lbnNpb25zWzBdIC0gbWFyZ2luc1szXSAtIG1hcmdpbnNbMV07XHJcbiAgICBjb25zdCBoZWlnaHQgPSBkaW1lbnNpb25zWzFdIC0gbWFyZ2luc1swXSAtIG1hcmdpbnNbMl07XHJcbiAgICBjb25zdCBzaXplID0gW3dpZHRoLCBoZWlnaHRdO1xyXG4gICAgbGV0IHRpdGxlU2l6ZVJlc3VsdHMgPSBbMCwgMF07XHJcblxyXG4gICAgaWYgKG9wdGlvbnMudGl0bGUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aXRsZVNpemVSZXN1bHRzID0gdGhpcy5nZXRUaXRsZVNpemUob3B0aW9ucy50aXRsZSwgd2lkdGgsIGhlaWdodCwgZG9jKTsgLy8gcmV0dXJuIDogc2l6ZShwdCkgYW5kIGxlZnQgbWFyZ2luIChtbSlcclxuICAgICAgdGhpcy5hZGRUaXRsZShkb2MsIG9wdGlvbnMudGl0bGUsIHRpdGxlU2l6ZVJlc3VsdHNbMF0sIG1hcmdpbnNbM10gKyB0aXRsZVNpemVSZXN1bHRzWzFdLCB0aXRsZVNpemVSZXN1bHRzWzBdICogKDI1LjQgLyA3MikpO1xyXG4gICAgfVxyXG4gICAgaWYgKG9wdGlvbnMuc3VidGl0bGUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBsZXQgc3VidGl0bGVTaXplUmVzdWx0ID0gMDtcclxuICAgICAgY29uc3QgdGl0bGVIID0gdGl0bGVTaXplUmVzdWx0c1swXTtcclxuICAgICAgc3VidGl0bGVTaXplUmVzdWx0ID0gdGhpcy5nZXRTdWJUaXRsZVNpemUob3B0aW9ucy5zdWJ0aXRsZSwgd2lkdGgsIGhlaWdodCwgZG9jKTsgLy8gcmV0dXJuIDogc2l6ZShwdCkgYW5kIGxlZnQgbWFyZ2luIChtbSlcclxuICAgICAgdGhpcy5hZGRTdWJUaXRsZShkb2MsIG9wdGlvbnMuc3VidGl0bGUsIHRpdGxlSCAqIDAuNywgbWFyZ2luc1szXSArIHN1YnRpdGxlU2l6ZVJlc3VsdCwgdGl0bGVIICogMS43ICogKDI1LjQgLyA3MikpO1xyXG4gICAgICBtYXJnaW5zWzBdID0gbWFyZ2luc1swXSArIHRpdGxlU2l6ZVJlc3VsdHNbMF0gKiAwLjcgKiAoMjUuNCAvIDcyKTtcclxuICAgIH1cclxuICAgIGlmIChvcHRpb25zLnNob3dQcm9qZWN0aW9uID09PSB0cnVlIHx8IG9wdGlvbnMuc2hvd1NjYWxlID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuYWRkUHJvalNjYWxlKFxyXG4gICAgICAgIGRvYyxcclxuICAgICAgICBtYXAsXHJcbiAgICAgICAgcmVzb2x1dGlvbixcclxuICAgICAgICBvcHRpb25zLnNob3dQcm9qZWN0aW9uLFxyXG4gICAgICAgIG9wdGlvbnMuc2hvd1NjYWxlXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmIChvcHRpb25zLmNvbW1lbnQgIT09ICcnKSB7XHJcbiAgICAgIHRoaXMuYWRkQ29tbWVudChkb2MsIG9wdGlvbnMuY29tbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5hZGRNYXAoZG9jLCBtYXAsIHJlc29sdXRpb24sIHNpemUsIG1hcmdpbnMpLnN1YnNjcmliZShcclxuICAgICAgYXN5bmMgKHN0YXR1czogU3ViamVjdFN0YXR1cykgPT4ge1xyXG4gICAgICAgIGlmIChzdGF0dXMgPT09IFN1YmplY3RTdGF0dXMuRG9uZSkge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5hZGRTY2FsZShkb2MsIG1hcCwgbWFyZ2lucyk7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZU1lYXN1cmVMYXllcihkb2MsIG1hcCwgbWFyZ2lucyk7XHJcbiAgICAgICAgICBpZiAob3B0aW9ucy5sZWdlbmRQb3NpdGlvbiAhPT0gJ25vbmUnKSB7XHJcbiAgICAgICAgICAgIGlmIChbJ3RvcGxlZnQnLCAndG9wcmlnaHQnLCAnYm90dG9tbGVmdCcsICdib3R0b21yaWdodCddLmluZGV4T2Yob3B0aW9ucy5sZWdlbmRQb3NpdGlvbikgPiAtMSApIHtcclxuICAgICAgICAgICAgICBhd2FpdCB0aGlzLmFkZExlZ2VuZFNhbWVQYWdlKGRvYywgbWFwLCBtYXJnaW5zLCByZXNvbHV0aW9uLCBvcHRpb25zLmxlZ2VuZFBvc2l0aW9uKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmxlZ2VuZFBvc2l0aW9uID09PSAnbmV3cGFnZScpIHtcclxuICAgICAgICAgICAgICBhd2FpdCB0aGlzLmFkZExlZ2VuZChkb2MsIG1hcCwgbWFyZ2lucywgcmVzb2x1dGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc2F2ZURvYyhkb2MpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gU3ViamVjdFN0YXR1cy5Eb25lIHx8IHN0YXR1cyA9PT0gU3ViamVjdFN0YXR1cy5FcnJvcikge1xyXG4gICAgICAgICAgdGhpcy5hY3Rpdml0eVNlcnZpY2UudW5yZWdpc3Rlcih0aGlzLmFjdGl2aXR5SWQpO1xyXG4gICAgICAgICAgc3RhdHVzJC5uZXh0KFN1YmplY3RTdGF0dXMuRG9uZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiBzdGF0dXMkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkIG1lYXN1cmUgb3ZlcmxheSBvbiB0aGUgbWFwIG9uIHRoZSBkb2N1bWVudCB3aGVuIHRoZSBtZWFzdXJlIGxheWVyIGlzIHByZXNlbnRcclxuICAgKiBAcGFyYW0gIGRvYyAtIFBkZiBkb2N1bWVudCB3aGVyZSBtZWFzdXJlIHRvb2x0aXAgd2lsbCBiZSBhZGRlZFxyXG4gICAqIEBwYXJhbSAgbWFwIC0gTWFwIG9mIHRoZSBhcHBcclxuICAgKiBAcGFyYW0gIG1hcmdpbnMgLSBQYWdlIG1hcmdpbnNcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIGhhbmRsZU1lYXN1cmVMYXllcihcclxuICAgIGRvYzoganNwZGYsXHJcbiAgICBtYXA6IElnb01hcCxcclxuICAgIG1hcmdpbnM6IEFycmF5PG51bWJlcj5cclxuICApIHtcclxuICAgIGlmIChtYXAubGF5ZXJzLmZpbmQobGF5ZXIgPT4gbGF5ZXIudmlzaWJsZSAmJiBsYXllci5pZC5zdGFydHNXaXRoKCdpZ28tbWVhc3VyZXMtJykpKSB7XHJcbiAgICAgIGxldCBjYW52YXNPdmVybGF5SFRNTE1lYXN1cmVzO1xyXG4gICAgICBjb25zdCBtYXBPdmVybGF5TWVhc3VyZXNIVE1MID0gbWFwLm9sLmdldE92ZXJsYXlDb250YWluZXIoKTtcclxuICAgICAgYXdhaXQgaHRtbDJjYW52YXMobWFwT3ZlcmxheU1lYXN1cmVzSFRNTCwge1xyXG4gICAgICAgIHNjYWxlOiAxLFxyXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogbnVsbFxyXG4gICAgICB9KS50aGVuKGUgPT4ge1xyXG4gICAgICAgIGNhbnZhc092ZXJsYXlIVE1MTWVhc3VyZXMgPSBlO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5hZGRDYW52YXMoZG9jLCBjYW52YXNPdmVybGF5SFRNTE1lYXN1cmVzLCBtYXJnaW5zKTsgLy8gdGhpcyBhZGRzIG1lYXN1cmUgb3ZlcmxheXNcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBodG1sIGNvZGUgZm9yIGFsbCBsYXllcnMgbGVnZW5kXHJcbiAgICogQHBhcmFtICBtYXAgSWdvTWFwXHJcbiAgICogQHBhcmFtICB3aWR0aCBUaGUgd2lkdGggdGhhdCB0aGUgbGVnZW5kIG5lZWQgdG8gYmVcclxuICAgKiBAcmV0dXJuIEh0bWwgY29kZSBmb3IgdGhlIGxlZ2VuZFxyXG4gICAqL1xyXG4gIGdldExheWVyc0xlZ2VuZEh0bWwoXHJcbiAgICBtYXA6IElnb01hcCxcclxuICAgIHdpZHRoOiBudW1iZXIsXHJcbiAgICByZXNvbHV0aW9uOiBudW1iZXJcclxuICApOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcikgPT4ge1xyXG4gICAgICBsZXQgaHRtbCA9ICcnO1xyXG4gICAgICBjb25zdCBsZWdlbmRzID0gZ2V0TGF5ZXJzTGVnZW5kcyhcclxuICAgICAgICBtYXAubGF5ZXJzLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHJlc29sdXRpb246IG1hcC52aWV3Q29udHJvbGxlci5nZXRSZXNvbHV0aW9uKCksXHJcbiAgICAgICAgICBleHRlbnQ6IG1hcC52aWV3Q29udHJvbGxlci5nZXRFeHRlbnQoKSxcclxuICAgICAgICAgIHByb2plY3Rpb246IG1hcC52aWV3Q29udHJvbGxlci5nZXRPbFByb2plY3Rpb24oKS5nZXRDb2RlKCksXHJcbiAgICAgICAgICAvLyBzY2FsZTogbWFwLnZpZXdDb250cm9sbGVyLmdldFNjYWxlKHJlc29sdXRpb24pLFxyXG4gICAgICAgICAgc2l6ZTogbWFwLm9sLmdldFNpemUoKVxyXG4gICAgICAgIH0gYXMgTGVnZW5kTWFwVmlld09wdGlvbnNcclxuICAgICAgKTtcclxuICAgICAgaWYgKGxlZ2VuZHMuZmlsdGVyKGwgPT4gbC5kaXNwbGF5ID09PSB0cnVlKS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICBvYnNlcnZlci5uZXh0KGh0bWwpO1xyXG4gICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIERlZmluZSBpbXBvcnRhbnQgc3R5bGUgdG8gYmUgc3VyZSB0aGF0IGFsbCBjb250YWluZXIgaXMgY29udmVydFxyXG4gICAgICAvLyB0byBpbWFnZSBub3QganVzdCB2aXNpYmxlIHBhcnRcclxuICAgICAgaHRtbCArPSAnPHN0eWxlIG1lZGlhPVwic2NyZWVuXCIgdHlwZT1cInRleHQvY3NzXCI+JztcclxuICAgICAgaHRtbCArPSAnLmh0bWwyY2FudmFzLWNvbnRhaW5lciB7IHdpZHRoOiAnICsgd2lkdGggKyAnbW0gIWltcG9ydGFudDsgaGVpZ2h0OiAyMDAwcHggIWltcG9ydGFudDsgfSc7XHJcbiAgICAgIGh0bWwgKz0gJ3RhYmxlLnRhYmxlTGVnZW5kIHt0YWJsZS1sYXlvdXQ6IGF1dG87fSc7XHJcbiAgICAgIGh0bWwgKz0gJ2Rpdi5zdHlsZUxlZ2VuZCB7cGFkZGluZy10b3A6IDVweDsgcGFkZGluZy1yaWdodDo1cHg7cGFkZGluZy1sZWZ0OjVweDtwYWRkaW5nLWJvdHRvbTo1cHg7fSc7XHJcbiAgICAgIGh0bWwgKz0gJzwvc3R5bGU+JztcclxuICAgICAgLy8gVGhlIGZvbnQgc2l6ZSB3aWxsIGFsc28gYmUgbG93ZXJlZCBhZnRlcndhcmRzIChnbG9iYWxseSBhbG9uZyB0aGUgbGVnZW5kIHNpemUpXHJcbiAgICAgIC8vIHRoaXMgYWxsb3dzIGhhdmluZyBhIGdvb2QgcmVsYXRpdmUgZm9udCBzaXplIGhlcmUgYW5kIHRvIGtlZXAgYWp1c3RpbmcgdGhlIGxlZ2VuZCBzaXplXHJcbiAgICAgIC8vIHdoaWxlIGtlZXBpbmcgZ29vZCByZWxhdGl2ZSBmb250IHNpemVcclxuICAgICAgaHRtbCArPSAnPGZvbnQgc2l6ZT1cIjNcIiBmYWNlPVwiVGltZXNcIiA+JztcclxuICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz1cInN0eWxlTGVnZW5kXCI+JztcclxuICAgICAgaHRtbCArPSAnPHRhYmxlIGNsYXNzPVwidGFibGVMZWdlbmRcIiA+JztcclxuXHJcbiAgICAgIC8vIEZvciBlYWNoIGxlZ2VuZCwgZGVmaW5lIGFuIGh0bWwgdGFibGUgY2VsbFxyXG4gICAgICBjb25zdCBpbWFnZXMkID0gbGVnZW5kcy5maWx0ZXIobCA9PiBsLmRpc3BsYXkpLm1hcCgobGVnZW5kKSA9PlxyXG4gICAgICAgIHRoaXMuZ2V0RGF0YUltYWdlKGxlZ2VuZC51cmwpLnBpcGUoXHJcbiAgICAgICAgICByeE1hcCgoZGF0YUltYWdlKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBodG1sSW1nID0gJzx0cj48dGQ+JyArIGxlZ2VuZC50aXRsZS50b1VwcGVyQ2FzZSgpICsgJzwvdGQ+PC90cj4nO1xyXG4gICAgICAgICAgICBodG1sSW1nICs9ICc8dHI+PHRkPjxpbWcgc3JjPVwiJyArIGRhdGFJbWFnZSArICdcIj48L3RkPjwvdHI+JztcclxuICAgICAgICAgICAgcmV0dXJuIGh0bWxJbWc7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgICAgZm9ya0pvaW4oaW1hZ2VzJCkuc3Vic2NyaWJlKChkYXRhSW1hZ2VzKSA9PiB7XHJcbiAgICAgICAgaHRtbCA9IGRhdGFJbWFnZXMucmVkdWNlKChhY2MsIGN1cnJlbnQpID0+IChhY2MgKz0gY3VycmVudCksIGh0bWwpO1xyXG4gICAgICAgIGh0bWwgKz0gJzwvdGFibGU+JztcclxuICAgICAgICBodG1sICs9ICc8L2Rpdj4nO1xyXG4gICAgICAgIG9ic2VydmVyLm5leHQoaHRtbCk7XHJcbiAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldERhdGFJbWFnZSh1cmw6IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nPiB7XHJcbiAgICBjb25zdCBzZWN1cmVJTUcgPSBuZXcgU2VjdXJlSW1hZ2VQaXBlKHRoaXMuaHR0cCwgdGhpcy5jb25maWdTZXJ2aWNlKTtcclxuICAgIHJldHVybiBzZWN1cmVJTUcudHJhbnNmb3JtKHVybCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgYWxsIHRoZSBsZWdlbmQgaW4gYSBzaW5nbGUgaW1hZ2VcclxuICAgKiAqIEBwYXJhbSAgZm9ybWF0IC0gSW1hZ2UgZm9ybWF0LiBkZWZhdWx0IHZhbHVlIHRvIFwicG5nXCJcclxuICAgKiBAcmV0dXJuIFRoZSBpbWFnZSBvZiB0aGUgbGVnZW5kXHJcbiAgICovXHJcbiAgYXN5bmMgZ2V0TGF5ZXJzTGVnZW5kSW1hZ2UoXHJcbiAgICBtYXAsXHJcbiAgICBmb3JtYXQ6IHN0cmluZyA9ICdwbmcnLFxyXG4gICAgZG9aaXBGaWxlOiBib29sZWFuLFxyXG4gICAgcmVzb2x1dGlvbjogbnVtYmVyXHJcbiAgKSB7XHJcbiAgICBjb25zdCBzdGF0dXMkID0gbmV3IFN1YmplY3QoKTtcclxuICAgIC8vIEdldCBodG1sIGNvZGUgZm9yIHRoZSBsZWdlbmRcclxuICAgIGNvbnN0IHdpZHRoID0gMjAwOyAvLyBtaWxpbWV0ZXJzIHVuaXQsIG9yaWdpbmFsbHkgZGVmaW5lIGZvciBkb2N1bWVudCBwZGZcclxuICAgIGxldCBodG1sID0gYXdhaXQgdGhpcy5nZXRMYXllcnNMZWdlbmRIdG1sKFxyXG4gICAgICBtYXAsXHJcbiAgICAgIHdpZHRoLFxyXG4gICAgICByZXNvbHV0aW9uXHJcbiAgICApLnRvUHJvbWlzZSgpO1xyXG4gICAgZm9ybWF0ID0gZm9ybWF0LnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgLy8gSWYgbm8gbGVnZW5kIHNob3cgTm8gTEVHRU5EIGluIGFuIGltYWdlXHJcbiAgICBpZiAoaHRtbC5sZW5ndGggPT09IDApIHtcclxuICAgICAgaHRtbCA9ICc8Zm9udCBzaXplPVwiMTJcIiBmYWNlPVwiQ291cmllciBOZXdcIiA+JztcclxuICAgICAgaHRtbCArPSAnPGRpdiBhbGlnbj1cImNlbnRlclwiPjxiPk5PIExFR0VORDwvYj48L2Rpdj4nO1xyXG4gICAgfVxyXG4gICAgLy8gQ3JlYXRlIGRpdiB0byBjb250YWluIGh0bWwgY29kZSBmb3IgbGVnZW5kXHJcbiAgICBjb25zdCBkaXYgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICBkaXYuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xyXG4gICAgZGl2LnN0eWxlLnRvcCA9ICcwJztcclxuXHJcbiAgICAvLyBBZGQgaHRtbCBjb2RlIHRvIGNvbnZlcnQgaW4gdGhlIG5ldyB3aW5kb3dcclxuICAgIHdpbmRvdy5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRpdik7XHJcbiAgICBkaXYuaW5uZXJIVE1MID0gaHRtbDtcclxuXHJcbiAgICBhd2FpdCB0aGlzLnRpbWVvdXQoMSk7XHJcbiAgICBjb25zdCBjYW52YXMgPSBhd2FpdCBodG1sMmNhbnZhcyhkaXYsIHsgdXNlQ09SUzogdHJ1ZSB9KS5jYXRjaCgoZSkgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZyhlKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChjYW52YXMpIHtcclxuICAgICAgbGV0IHN0YXR1cyA9IFN1YmplY3RTdGF0dXMuRG9uZTtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBpZiAoIWRvWmlwRmlsZSkge1xyXG4gICAgICAgICAgLy8gU2F2ZSB0aGUgY2FudmFzIGFzIGZpbGVcclxuICAgICAgICAgIHRoaXMuc2F2ZUNhbnZhc0ltYWdlQXNGaWxlKGNhbnZhcywgJ2xlZ2VuZEltYWdlJywgZm9ybWF0KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gQWRkIHRoZSBjYW52YXMgdG8gemlwXHJcbiAgICAgICAgICB0aGlzLmdlbmVyYXRlQ2FudmFGaWxlVG9aaXAoY2FudmFzLCAnbGVnZW5kSW1hZ2UnICsgJy4nICsgZm9ybWF0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGl2LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZGl2KTsgLy8gcmVtb3ZlIHRlbXAgZGl2IChJRSlcclxuICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgc3RhdHVzID0gU3ViamVjdFN0YXR1cy5FcnJvcjtcclxuICAgICAgfVxyXG4gICAgICBzdGF0dXMkLm5leHQoc3RhdHVzKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc3RhdHVzJDtcclxuICB9XHJcblxyXG4gIGdldFRpdGxlU2l6ZSh0aXRsZTogc3RyaW5nLCBwYWdlV2lkdGg6IG51bWJlciwgcGFnZUhlaWdodDogbnVtYmVyLCBkb2M6IGpzcGRmKSB7XHJcbiAgICBjb25zdCBwZGZSZXNvbHV0aW9uID0gOTY7XHJcbiAgICBjb25zdCB0aXRsZVNpemUgPSBNYXRoLnJvdW5kKDIgKiAocGFnZUhlaWdodCArIDE0NSkgKiAwLjA1KSAvIDI7XHJcbiAgICBkb2Muc2V0Rm9udCgnVGltZXMnLCAnYm9sZCcpO1xyXG4gICAgY29uc3Qgd2lkdGggPSBkb2MuZ2V0VGV4dFdpZHRoKHRpdGxlKTtcclxuXHJcbiAgICBjb25zdCB0aXRsZVdpZHRoID0gZG9jLmdldFN0cmluZ1VuaXRXaWR0aCh0aXRsZSkgKiB0aXRsZVNpemUgLyBkb2MuaW50ZXJuYWwuc2NhbGVGYWN0b3I7XHJcbiAgICBjb25zdCB0aXRsZVRhaWxsZU1pbmltYWxlID0gTWF0aC5yb3VuZCggMiAqIChwYWdlSGVpZ2h0ICsgMTUwICkgKiAwLjAzNykgLyAyO1xyXG4gICAgbGV0IHRpdGxlRm9udFNpemUgPSAwO1xyXG5cclxuICAgIGxldCB0aXRsZU1hcmdpbkxlZnQ7XHJcbiAgICBpZiAodGl0bGVXaWR0aCA+PSAocGFnZVdpZHRoKSkge1xyXG4gICAgICB0aXRsZU1hcmdpbkxlZnQgPSAwO1xyXG4gICAgICB0aXRsZUZvbnRTaXplID0gTWF0aC5yb3VuZCgoKHBhZ2VXaWR0aCAvIHRpdGxlLmxlbmd0aCkgKiBwZGZSZXNvbHV0aW9uKSAvIDI1LjQpO1xyXG4gICAgICAvLyBJZiB0aGUgZm9ybXVsYSB0byBmaW5kIHRoZSBmb250IHNpemUgZ2l2ZXMgYmVsb3cgdGhlIGRlZmluZWQgbWluaW11bSBzaXplXHJcbiAgICAgIGlmICh0aXRsZUZvbnRTaXplIDwgdGl0bGVUYWlsbGVNaW5pbWFsZSkge1xyXG4gICAgICAgIHRpdGxlRm9udFNpemUgPSB0aXRsZVRhaWxsZU1pbmltYWxlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aXRsZU1hcmdpbkxlZnQgPSAocGFnZVdpZHRoIC0gdGl0bGVXaWR0aCkgLyAyIDtcclxuICAgICAgdGl0bGVGb250U2l6ZSA9IHRpdGxlU2l6ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBbdGl0bGVGb250U2l6ZSwgdGl0bGVNYXJnaW5MZWZ0XTtcclxuICB9XHJcblxyXG4gIGdldFN1YlRpdGxlU2l6ZShzdWJ0aXRsZTogc3RyaW5nLCBwYWdlV2lkdGg6IG51bWJlciwgcGFnZUhlaWdodDogbnVtYmVyLCBkb2M6IGpzcGRmKSB7XHJcbiAgICBjb25zdCBzdWJ0aXRsZVNpemUgPSAwLjcgKiBNYXRoLnJvdW5kKDIgKiAocGFnZUhlaWdodCArIDE0NSkgKiAwLjA1KSAvIDI7IC8vIDcwJSBvZiB0aGUgdGl0bGUncyBmb250IHNpemVcclxuXHJcbiAgICBkb2Muc2V0Rm9udCgnVGltZXMnLCAnYm9sZCcpO1xyXG5cclxuICAgIGNvbnN0IHN1YnRpdGxlV2lkdGggPSBkb2MuZ2V0U3RyaW5nVW5pdFdpZHRoKHN1YnRpdGxlKSAqIHN1YnRpdGxlU2l6ZSAvIGRvYy5pbnRlcm5hbC5zY2FsZUZhY3RvcjtcclxuXHJcbiAgICBsZXQgc3VidGl0bGVNYXJnaW5MZWZ0O1xyXG4gICAgaWYgKHN1YnRpdGxlV2lkdGggPj0gKHBhZ2VXaWR0aCkpIHtcclxuICAgICAgc3VidGl0bGVNYXJnaW5MZWZ0ID0gMDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHN1YnRpdGxlTWFyZ2luTGVmdCA9IChwYWdlV2lkdGggLSBzdWJ0aXRsZVdpZHRoKSAvIDIgO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN1YnRpdGxlTWFyZ2luTGVmdDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRkVGl0bGUoZG9jOiBqc3BkZiwgdGl0bGU6IHN0cmluZywgdGl0bGVGb250U2l6ZTogbnVtYmVyLCB0aXRsZU1hcmdpbkxlZnQ6IG51bWJlciwgdGl0bGVNYXJnaW5Ub3A6IG51bWJlcikge1xyXG4gICAgZG9jLnNldEZvbnQoJ1RpbWVzJywgJ2JvbGQnKTtcclxuICAgIGRvYy5zZXRGb250U2l6ZSh0aXRsZUZvbnRTaXplKTtcclxuICAgIGRvYy50ZXh0KHRpdGxlLCB0aXRsZU1hcmdpbkxlZnQsIHRpdGxlTWFyZ2luVG9wKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRkU3ViVGl0bGUoZG9jOiBqc3BkZiwgc3VidGl0bGU6IHN0cmluZywgc3VidGl0bGVGb250U2l6ZTogbnVtYmVyLCBzdWJ0aXRsZU1hcmdpbkxlZnQ6IG51bWJlciwgc3VidGl0bGVNYXJnaW5Ub3A6IG51bWJlcikge1xyXG4gICAgZG9jLnNldEZvbnQoJ1RpbWVzJywgJ2JvbGQnKTtcclxuICAgIGRvYy5zZXRGb250U2l6ZShzdWJ0aXRsZUZvbnRTaXplKTtcclxuICAgIGRvYy50ZXh0KHN1YnRpdGxlLCBzdWJ0aXRsZU1hcmdpbkxlZnQsIHN1YnRpdGxlTWFyZ2luVG9wKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogQWRkIGNvbW1lbnQgdG8gdGhlIGRvY3VtZW50XHJcbiAgICogKiBAcGFyYW0gIGRvYyAtIHBkZiBkb2N1bWVudFxyXG4gICAqICogQHBhcmFtICBjb21tZW50IC0gQ29tbWVudCB0byBhZGQgaW4gdGhlIGRvY3VtZW50XHJcbiAgICogKiBAcGFyYW0gIHNpemUgLSBTaXplIG9mIHRoZSBkb2N1bWVudFxyXG4gICAqL1xyXG4gIHByaXZhdGUgYWRkQ29tbWVudChkb2M6IGpzcGRmLCBjb21tZW50OiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGNvbW1lbnRTaXplID0gMTY7XHJcbiAgICBjb25zdCBjb21tZW50TWFyZ2luTGVmdCA9IDIwO1xyXG4gICAgY29uc3QgbWFyZ2luQm90dG9tID0gNTtcclxuICAgIGNvbnN0IGhlaWdodFBpeGVscyA9IGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS5oZWlnaHQgLSBtYXJnaW5Cb3R0b207XHJcblxyXG4gICAgZG9jLnNldEZvbnQoJ2NvdXJpZXInKTtcclxuICAgIGRvYy5zZXRGb250U2l6ZShjb21tZW50U2l6ZSk7XHJcbiAgICBkb2MudGV4dChjb21tZW50LCBjb21tZW50TWFyZ2luTGVmdCwgaGVpZ2h0UGl4ZWxzKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogQWRkIHByb2plY3Rpb24gYW5kL29yIHNjYWxlIHRvIHRoZSBkb2N1bWVudFxyXG4gICAqIEBwYXJhbSAgZG9jIC0gcGRmIGRvY3VtZW50XHJcbiAgICogQHBhcmFtICBtYXAgLSBNYXAgb2YgdGhlIGFwcFxyXG4gICAqIEBwYXJhbSAgZHBpIC0gRFBJIHJlc29sdXRpb24gb2YgdGhlIGRvY3VtZW50XHJcbiAgICogQHBhcmFtICBwcm9qZWN0aW9uIC0gQm9vbCB0byBpbmRpY2F0ZSBpZiBwcm9qZWN0aW9uIG5lZWQgdG8gYmUgYWRkZWRcclxuICAgKiBAcGFyYW0gIHNjYWxlIC0gQm9vbCB0byBpbmRpY2F0ZSBpZiBzY2FsZSBuZWVkIHRvIGJlIGFkZGVkXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhZGRQcm9qU2NhbGUoXHJcbiAgICBkb2M6IGpzcGRmLFxyXG4gICAgbWFwOiBJZ29NYXAsXHJcbiAgICBkcGk6IG51bWJlcixcclxuICAgIHByb2plY3Rpb246IGJvb2xlYW4sXHJcbiAgICBzY2FsZTogYm9vbGVhblxyXG4gICkge1xyXG4gICAgY29uc3QgdHJhbnNsYXRlID0gdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlO1xyXG4gICAgY29uc3QgcHJvalNjYWxlU2l6ZSA9IDE2O1xyXG4gICAgY29uc3QgcHJvalNjYWxlTWFyZ2luTGVmdCA9IDIwO1xyXG4gICAgY29uc3QgbWFyZ2luQm90dG9tID0gMTU7XHJcbiAgICBjb25zdCBoZWlnaHRQaXhlbHMgPSBkb2MuaW50ZXJuYWwucGFnZVNpemUuaGVpZ2h0IC0gbWFyZ2luQm90dG9tO1xyXG5cclxuICAgIGxldCB0ZXh0UHJvalNjYWxlOiBzdHJpbmcgPSAnJztcclxuICAgIGlmIChwcm9qZWN0aW9uID09PSB0cnVlKSB7XHJcbiAgICAgIGNvbnN0IHByb2pUZXh0ID0gdHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8ucHJpbnRGb3JtLnByb2plY3Rpb24nKTtcclxuICAgICAgdGV4dFByb2pTY2FsZSArPSBwcm9qVGV4dCArICc6ICcgKyBtYXAucHJvamVjdGlvbjtcclxuICAgIH1cclxuICAgIGlmIChzY2FsZSA9PT0gdHJ1ZSkge1xyXG4gICAgICBpZiAocHJvamVjdGlvbiA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIHRleHRQcm9qU2NhbGUgKz0gJyAgICc7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3Qgc2NhbGVUZXh0ID0gdHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8ucHJpbnRGb3JtLnNjYWxlJyk7XHJcbiAgICAgIGNvbnN0IG1hcFNjYWxlID0gbWFwLnZpZXdDb250cm9sbGVyLmdldFNjYWxlKGRwaSk7XHJcbiAgICAgIHRleHRQcm9qU2NhbGUgKz0gc2NhbGVUZXh0ICsgJzogfiAxIC8gJyArIGZvcm1hdFNjYWxlKG1hcFNjYWxlKTtcclxuICAgIH1cclxuICAgIGRvYy5zZXRGb250KCdjb3VyaWVyJyk7XHJcbiAgICBkb2Muc2V0Rm9udFNpemUocHJvalNjYWxlU2l6ZSk7XHJcbiAgICBkb2MudGV4dCh0ZXh0UHJvalNjYWxlLCBwcm9qU2NhbGVNYXJnaW5MZWZ0LCBoZWlnaHRQaXhlbHMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkIHRoZSBsZWdlbmQgdG8gdGhlIGRvY3VtZW50XHJcbiAgICogQHBhcmFtICBkb2MgLSBQZGYgZG9jdW1lbnQgd2hlcmUgbGVnZW5kIHdpbGwgYmUgYWRkZWRcclxuICAgKiBAcGFyYW0gIG1hcCAtIE1hcCBvZiB0aGUgYXBwXHJcbiAgICogQHBhcmFtICBtYXJnaW5zIC0gUGFnZSBtYXJnaW5zXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhc3luYyBhZGRMZWdlbmQoXHJcbiAgICBkb2M6IGpzcGRmLFxyXG4gICAgbWFwOiBJZ29NYXAsXHJcbiAgICBtYXJnaW5zOiBBcnJheTxudW1iZXI+LFxyXG4gICAgcmVzb2x1dGlvbjogbnVtYmVyXHJcbiAgKSB7XHJcbiAgICAvLyBHZXQgaHRtbCBjb2RlIGZvciB0aGUgbGVnZW5kXHJcbiAgICBjb25zdCB3aWR0aCA9IGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS53aWR0aDtcclxuICAgIGNvbnN0IGh0bWwgPSBhd2FpdCB0aGlzLmdldExheWVyc0xlZ2VuZEh0bWwoXHJcbiAgICAgIG1hcCxcclxuICAgICAgd2lkdGgsXHJcbiAgICAgIHJlc29sdXRpb25cclxuICAgICkudG9Qcm9taXNlKCk7XHJcbiAgICAvLyBJZiBubyBsZWdlbmQsIHNhdmUgdGhlIG1hcCBkaXJlY3RseVxyXG4gICAgaWYgKGh0bWwgPT09ICcnKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMuc2F2ZURvYyhkb2MpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIC8vIENyZWF0ZSBkaXYgdG8gY29udGFpbiBodG1sIGNvZGUgZm9yIGxlZ2VuZFxyXG4gICAgY29uc3QgZGl2ID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgZGl2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcclxuICAgIGRpdi5zdHlsZS50b3AgPSAnMCc7XHJcblxyXG4gICAgLy8gQWRkIGh0bWwgY29kZSB0byBjb252ZXJ0IGluIHRoZSBuZXcgd2luZG93XHJcbiAgICB3aW5kb3cuZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaXYpO1xyXG4gICAgZGl2LmlubmVySFRNTCA9IGh0bWw7XHJcblxyXG4gICAgYXdhaXQgdGhpcy50aW1lb3V0KDEpO1xyXG4gICAgY29uc3QgY2FudmFzID0gYXdhaXQgaHRtbDJjYW52YXMoZGl2LCB7IHVzZUNPUlM6IHRydWUgfSkuY2F0Y2goKGUpID0+IHtcclxuICAgICAgY29uc29sZS5sb2coZSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoY2FudmFzKSB7XHJcbiAgICAgIGNvbnN0IHBvdXJjZW50YWdlUmVkdWN0aW9uID0gMC44NTtcclxuICAgICAgY29uc3QgaW1hZ2VTaXplID0gW3BvdXJjZW50YWdlUmVkdWN0aW9uICogKDI1LjQgKiBjYW52YXMud2lkdGgpIC8gcmVzb2x1dGlvbiwgcG91cmNlbnRhZ2VSZWR1Y3Rpb25cclxuICAgICAgICAqICgyNS40ICogY2FudmFzLmhlaWdodCkgLyByZXNvbHV0aW9uXTtcclxuICAgICAgbGV0IGltZ0RhdGE7XHJcbiAgICAgIGRvYy5hZGRQYWdlKCk7XHJcbiAgICAgIGltZ0RhdGEgPSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9wbmcnKTtcclxuICAgICAgZG9jLmFkZEltYWdlKGltZ0RhdGEsICdQTkcnLCAxMCwgMTAsIGltYWdlU2l6ZVswXSwgaW1hZ2VTaXplWzFdKTtcclxuICAgICAgZGl2LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZGl2KTsgLy8gcmVtb3ZlIHRlbXAgZGl2IChJRSBzdHlsZSlcclxuICAgIH1cclxuXHJcbiAgICBhd2FpdCB0aGlzLnNhdmVEb2MoZG9jKTtcclxuXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGQgdGhlIGxlZ2VuZCB0byB0aGUgZG9jdW1lbnRcclxuICAgKiBAcGFyYW0gIGRvYyAtIFBkZiBkb2N1bWVudCB3aGVyZSBsZWdlbmQgd2lsbCBiZSBhZGRlZFxyXG4gICAqIEBwYXJhbSAgbWFwIC0gTWFwIG9mIHRoZSBhcHBcclxuICAgKiBAcGFyYW0gIG1hcmdpbnMgLSBQYWdlIG1hcmdpbnNcclxuICAgKi9cclxuICAgICBwcml2YXRlIGFzeW5jIGFkZExlZ2VuZFNhbWVQYWdlKFxyXG4gICAgICBkb2M6IGpzcGRmLFxyXG4gICAgICBtYXA6IElnb01hcCxcclxuICAgICAgbWFyZ2luczogQXJyYXk8bnVtYmVyPixcclxuICAgICAgcmVzb2x1dGlvbjogbnVtYmVyLFxyXG4gICAgICBsZWdlbmRQb3NpdGlvbjogc3RyaW5nXHJcbiAgICApIHtcclxuICAgICAgLy8gR2V0IGh0bWwgY29kZSBmb3IgdGhlIGxlZ2VuZFxyXG4gICAgICBjb25zdCB3aWR0aCA9IGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS53aWR0aDtcclxuICAgICAgY29uc3QgaHRtbCA9IGF3YWl0IHRoaXMuZ2V0TGF5ZXJzTGVnZW5kSHRtbChcclxuICAgICAgICBtYXAsXHJcbiAgICAgICAgd2lkdGgsXHJcbiAgICAgICAgcmVzb2x1dGlvblxyXG4gICAgICApLnRvUHJvbWlzZSgpO1xyXG4gICAgICAvLyBJZiBubyBsZWdlbmQsIHNhdmUgdGhlIG1hcCBkaXJlY3RseVxyXG4gICAgICBpZiAoaHRtbCA9PT0gJycpIHtcclxuICAgICAgICBhd2FpdCB0aGlzLnNhdmVEb2MoZG9jKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICAvLyBDcmVhdGUgZGl2IHRvIGNvbnRhaW4gaHRtbCBjb2RlIGZvciBsZWdlbmRcclxuICAgICAgY29uc3QgZGl2ID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICBkaXYuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xyXG4gICAgICBkaXYuc3R5bGUudG9wID0gJzAnO1xyXG4gICAgICAvLyBBZGQgaHRtbCBjb2RlIHRvIGNvbnZlcnQgaW4gdGhlIG5ldyB3aW5kb3dcclxuICAgICAgd2luZG93LmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGl2KTtcclxuICAgICAgZGl2LmlubmVySFRNTCA9IGh0bWw7XHJcbiAgICAgIGF3YWl0IHRoaXMudGltZW91dCgxKTtcclxuICAgICAgY29uc3QgY2FudmFzID0gYXdhaXQgaHRtbDJjYW52YXMoZGl2LCB7IHVzZUNPUlM6IHRydWUgfSkuY2F0Y2goKGUpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhlKTtcclxuICAgICAgfSk7XHJcbiAgICAgIGxldCBtYXJnaW5zTGVnZW5kO1xyXG4gICAgICBpZiAoY2FudmFzKSB7XHJcbiAgICAgICAgY29uc3QgcG91cmNlbnRhZ2VSZWR1Y3Rpb24gPSAwLjg1O1xyXG4gICAgICAgIGNvbnN0IGltYWdlU2l6ZSA9IFtwb3VyY2VudGFnZVJlZHVjdGlvbiAqICgyNS40ICogY2FudmFzLndpZHRoKSAvIHJlc29sdXRpb24sXHJcbiAgICAgICAgICAgcG91cmNlbnRhZ2VSZWR1Y3Rpb24gKiAoMjUuNCAqIGNhbnZhcy5oZWlnaHQpIC8gcmVzb2x1dGlvbl07XHJcbiAgICAgICAgLy8gTW92ZSB0aGUgbGVnZW5kIHRvIHRoZSBjb3JyZWN0IHBvc2l0aW9uIG9uIHRoZSBwYWdlXHJcbiAgICAgICAgaWYgKCBsZWdlbmRQb3NpdGlvbiA9PT0gJ2JvdHRvbXJpZ2h0Jykge1xyXG4gICAgICAgICAgbWFyZ2luc0xlZ2VuZCA9IFtkb2MuaW50ZXJuYWwucGFnZVNpemUuaGVpZ2h0IC0gbWFyZ2luc1syXSAtIGltYWdlU2l6ZVsxXSwgbWFyZ2luc1sxXSxcclxuICAgICAgICAgICBtYXJnaW5zWzJdLCBkb2MuaW50ZXJuYWwucGFnZVNpemUud2lkdGggLSBtYXJnaW5zWzFdIC0gaW1hZ2VTaXplWzBdXTtcclxuICAgICAgICB9IGVsc2UgaWYgKGxlZ2VuZFBvc2l0aW9uID09PSAndG9wcmlnaHQnKSB7XHJcbiAgICAgICAgICBtYXJnaW5zTGVnZW5kID0gW21hcmdpbnNbMF0sIG1hcmdpbnNbMV0sIGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS5oZWlnaHQgLSBtYXJnaW5zWzBdIC0gaW1hZ2VTaXplWzFdLFxyXG4gICAgICAgICAgZG9jLmludGVybmFsLnBhZ2VTaXplLndpZHRoIC0gbWFyZ2luc1sxXSAtIGltYWdlU2l6ZVswXSBdO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobGVnZW5kUG9zaXRpb24gPT09ICdib3R0b21sZWZ0Jykge1xyXG4gICAgICAgICAgLy8gV2hlbiB0aGUgbGVnZW5kIGlzIGluIHRoZSBib3R0b20gbGVmdCwgcmFpc2UgdGhlIGxlZ2VuZCBzbGlnaHRseSB1cHdhcmQgc28gdGhhdCBhdHRyaWJ1dGlvbnMgYXJlIHZpc2libGVcclxuICAgICAgICAgIG1hcmdpbnNMZWdlbmQgPSBbZG9jLmludGVybmFsLnBhZ2VTaXplLmhlaWdodCAtIG1hcmdpbnNbMl0gLSBpbWFnZVNpemVbMV0gLSAxNSxcclxuICAgICAgICAgIGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS53aWR0aCAtIG1hcmdpbnNbM10gLSBpbWFnZVNpemVbMF0sIG1hcmdpbnNbMl0gKyAxNSwgbWFyZ2luc1szXSBdO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobGVnZW5kUG9zaXRpb24gPT09ICd0b3BsZWZ0Jykge1xyXG4gICAgICAgICAgbWFyZ2luc0xlZ2VuZCA9IFttYXJnaW5zWzBdLCBkb2MuaW50ZXJuYWwucGFnZVNpemUud2lkdGggLSBtYXJnaW5zWzNdIC0gaW1hZ2VTaXplWzBdLFxyXG4gICAgICAgICAgIGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS5oZWlnaHQgLSBtYXJnaW5zWzBdIC0gaW1hZ2VTaXplWzFdLCBtYXJnaW5zWzNdIF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYWRkQ2FudmFzKGRvYywgY2FudmFzLCBtYXJnaW5zTGVnZW5kKTsgLy8gdGhpcyBhZGRzIHRoZSBsZWdlbmRcclxuICAgICAgICBkaXYucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChkaXYpOyAvLyByZW1vdmUgdGVtcCBkaXYgKElFIHN0eWxlKVxyXG4gICAgICAgIGF3YWl0IHRoaXMuc2F2ZURvYyhkb2MpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZCBzY2FsZSBhbmQgYXR0cmlidXRpb25zIG9uIHRoZSBtYXAgb24gdGhlIGRvY3VtZW50XHJcbiAgICogQHBhcmFtICBkb2MgLSBQZGYgZG9jdW1lbnQgd2hlcmUgbGVnZW5kIHdpbGwgYmUgYWRkZWRcclxuICAgKiBAcGFyYW0gIG1hcCAtIE1hcCBvZiB0aGUgYXBwXHJcbiAgICogQHBhcmFtICBtYXJnaW5zIC0gUGFnZSBtYXJnaW5zXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhc3luYyBhZGRTY2FsZShcclxuICAgIGRvYzoganNwZGYsXHJcbiAgICBtYXA6IElnb01hcCxcclxuICAgIG1hcmdpbnM6IEFycmF5PG51bWJlcj5cclxuICAgICkge1xyXG4gICAgICBjb25zdCBtYXBTaXplID0gbWFwLm9sLmdldFNpemUoKTtcclxuICAgICAgY29uc3QgZXh0ZW50ID0gbWFwLm9sLmdldFZpZXcoKS5jYWxjdWxhdGVFeHRlbnQobWFwU2l6ZSk7XHJcbiAgICAgIC8vIEdldCB0aGUgc2NhbGUgYW5kIGF0dHJpYnV0aW9uXHJcbiAgICAgIC8vIHdlIHVzZSBjbG9uZU5vZGUgdG8gbW9kaWZ5IHRoZSBub2RlcyB0byBwcmludCB3aXRob3V0IG1vZGlmeWluZyBpdCBvbiB0aGUgcGFnZSwgdXNpbmcgZGVlcDp0cnVlIHRvIGdldCBjaGlsZHJlblxyXG4gICAgICBsZXQgY2FudmFzT3ZlcmxheUhUTUw7XHJcbiAgICAgIGNvbnN0IG1hcE92ZXJsYXlIVE1MID0gbWFwLm9sLmdldE92ZXJsYXlDb250YWluZXJTdG9wRXZlbnQoKTtcclxuICAgICAgLy8gUmVtb3ZlIHRoZSBVSSBidXR0b25zIGZyb20gdGhlIG5vZGVzXHJcbiAgICAgIGNvbnN0IE92ZXJsYXlIVE1MQnV0dG9ucyA9IG1hcE92ZXJsYXlIVE1MLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKTtcclxuICAgICAgY29uc3QgT3ZlcmxheUhUTUxCdXR0b25zYXJyID0gQXJyYXkuZnJvbShPdmVybGF5SFRNTEJ1dHRvbnMpO1xyXG4gICAgICBmb3IgKGNvbnN0IE92ZXJsYXlIVE1MQnV0dG9uIG9mIE92ZXJsYXlIVE1MQnV0dG9uc2Fycikge1xyXG4gICAgICAgIE92ZXJsYXlIVE1MQnV0dG9uLnNldEF0dHJpYnV0ZSgnZGF0YS1odG1sMmNhbnZhcy1pZ25vcmUnLCAndHJ1ZScpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIENoYW5nZSB0aGUgc3R5bGVzIG9mIGh5cGVybGluayBpbiB0aGUgcHJpbnRlZCB2ZXJzaW9uXHJcbiAgICAgIC8vIFRyYW5zZm9ybSB0aGUgT3ZlcmxheSBpbnRvIGEgY2FudmFzXHJcbiAgICAgIC8vIHNjYWxlIGlzIG5lY2Vzc2FyeSB0byBtYWtlIGl0IGluIGdvb2dsZSBjaHJvbWVcclxuICAgICAgLy8gYmFja2dyb3VuZCBhcyBudWxsIGJlY2F1c2Ugb3RoZXJ3aXNlIGl0IGlzIHdoaXRlIGFuZCBjb3ZlciB0aGUgbWFwXHJcbiAgICAgIC8vIGFsbG93dGFpbnQgaXMgdG8gYWxsb3cgcmVuZGVyaW5nIGltYWdlcyBpbiB0aGUgYXR0cmlidXRpb25zXHJcbiAgICAgIC8vIHVzZUNPUlM6IHRydWUgcG91ciBwZXJtZXR0cmUgZGUgcmVuZGVyZXIgbGVzIGltYWdlcyAobmUgbWFyY2hlIHBhcyBlbiBsb2NhbClcclxuICAgICAgY29uc3QgY2FudmFzID0gYXdhaXQgaHRtbDJjYW52YXMobWFwT3ZlcmxheUhUTUwsIHtcclxuICAgICAgICBzY2FsZTogMSxcclxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IG51bGwsXHJcbiAgICAgICAgYWxsb3dUYWludDogdHJ1ZSxcclxuICAgICAgICB1c2VDT1JTOiB0cnVlLFxyXG4gICAgICB9KS50aGVuKCBlID0+IHtcclxuICAgICAgICBjYW52YXNPdmVybGF5SFRNTCA9IGU7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmFkZENhbnZhcyhkb2MsIGNhbnZhc092ZXJsYXlIVE1MLCBtYXJnaW5zKTsgLy8gdGhpcyBhZGRzIHNjYWxlcyBhbmQgYXR0cmlidXRpb25zXHJcbiB9XHJcblxyXG4gIGRlZmluZU5iRmlsZVRvUHJvY2VzcyhuYkZpbGVUb1Byb2Nlc3MpIHtcclxuICAgIHRoaXMubmJGaWxlVG9Qcm9jZXNzID0gbmJGaWxlVG9Qcm9jZXNzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0aW1lb3V0KG1zKSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRkQ2FudmFzKFxyXG4gICAgZG9jOiBqc3BkZixcclxuICAgIGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQsXHJcbiAgICBtYXJnaW5zOiBBcnJheTxudW1iZXI+XHJcbiAgKSB7XHJcbiAgICBsZXQgaW1hZ2U7XHJcbiAgICBpZiAoY2FudmFzKSB7XHJcbiAgICAgIGltYWdlID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvcG5nJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGltYWdlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgY29uc3QgaW1hZ2VTaXplID0gdGhpcy5nZXRJbWFnZVNpemVUb0ZpdFBkZihkb2MsIGNhbnZhcywgbWFyZ2lucyk7XHJcbiAgICAgIGRvYy5hZGRJbWFnZShcclxuICAgICAgICBpbWFnZSxcclxuICAgICAgICAnUE5HJyxcclxuICAgICAgICBtYXJnaW5zWzNdLFxyXG4gICAgICAgIG1hcmdpbnNbMF0sXHJcbiAgICAgICAgaW1hZ2VTaXplWzBdLFxyXG4gICAgICAgIGltYWdlU2l6ZVsxXVxyXG4gICAgICApO1xyXG4gICAgICBkb2MucmVjdChtYXJnaW5zWzNdLCBtYXJnaW5zWzBdLCBpbWFnZVNpemVbMF0sIGltYWdlU2l6ZVsxXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBUT0RPIGZpeCBwcmludGluZyB3aXRoIGltYWdlIHJlc29sdXRpb25cclxuICBwcml2YXRlIGFkZE1hcChcclxuICAgIGRvYzoganNwZGYsXHJcbiAgICBtYXA6IElnb01hcCxcclxuICAgIHJlc29sdXRpb246IG51bWJlcixcclxuICAgIHNpemU6IEFycmF5PG51bWJlcj4sXHJcbiAgICBtYXJnaW5zOiBBcnJheTxudW1iZXI+XHJcbiAgKSB7XHJcbiAgICBjb25zdCBzdGF0dXMkID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgICBjb25zdCBtYXBTaXplID0gbWFwLm9sLmdldFNpemUoKTtcclxuICAgIGNvbnN0IGV4dGVudCA9IG1hcC5vbC5nZXRWaWV3KCkuY2FsY3VsYXRlRXh0ZW50KG1hcFNpemUpO1xyXG5cclxuICAgIGNvbnN0IHdpZHRoUGl4ZWxzID0gTWF0aC5yb3VuZCgoc2l6ZVswXSAqIHJlc29sdXRpb24pIC8gMjUuNCk7XHJcbiAgICBjb25zdCBoZWlnaHRQaXhlbHMgPSBNYXRoLnJvdW5kKChzaXplWzFdICogcmVzb2x1dGlvbikgLyAyNS40KTtcclxuXHJcbiAgICBsZXQgdGltZW91dDtcclxuXHJcbiAgICBtYXAub2wub25jZSgncmVuZGVyY29tcGxldGUnLCAoZXZlbnQ6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBjYW52YXNlcyA9IGV2ZW50LnRhcmdldC5nZXRWaWV3cG9ydCgpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdjYW52YXMnKTtcclxuICAgICAgY29uc3QgbWFwU3RhdHVzJCQgPSBtYXAuc3RhdHVzJC5zdWJzY3JpYmUoKG1hcFN0YXR1czogU3ViamVjdFN0YXR1cykgPT4ge1xyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcclxuXHJcbiAgICAgICAgaWYgKG1hcFN0YXR1cyAhPT0gU3ViamVjdFN0YXR1cy5Eb25lKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBtYXBTdGF0dXMkJC51bnN1YnNjcmliZSgpO1xyXG5cclxuICAgICAgICBsZXQgc3RhdHVzID0gU3ViamVjdFN0YXR1cy5Eb25lO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBmb3IgKGNvbnN0IGNhbnZhcyBvZiBjYW52YXNlcykge1xyXG4gICAgICAgICAgICBpZiAoY2FudmFzLndpZHRoICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5hZGRDYW52YXMoZG9jLCBjYW52YXMsIG1hcmdpbnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICBzdGF0dXMgPSBTdWJqZWN0U3RhdHVzLkVycm9yO1xyXG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5lcnJvcihcclxuICAgICAgICAgICAgdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoXHJcbiAgICAgICAgICAgICAgJ2lnby5nZW8ucHJpbnRGb3JtLmNvcnNFcnJvck1lc3NhZ2VCb2R5J1xyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudChcclxuICAgICAgICAgICAgICAnaWdvLmdlby5wcmludEZvcm0uY29yc0Vycm9yTWVzc2FnZUhlYWRlcidcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5yZW5kZXJNYXAobWFwLCBtYXBTaXplLCBleHRlbnQpO1xyXG4gICAgICAgIHN0YXR1cyQubmV4dChzdGF0dXMpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIC8vIElmIG5vIGxvYWRpbmcgYXMgc3RhcnRlZCBhZnRlciAyMDBtcywgdGhlbiBwcm9iYWJseSBubyBsb2FkaW5nXHJcbiAgICAgIC8vIGlzIHJlcXVpcmVkLlxyXG4gICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIG1hcFN0YXR1cyQkLnVuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgICAgIGxldCBzdGF0dXMgPSBTdWJqZWN0U3RhdHVzLkRvbmU7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGZvciAoY29uc3QgY2FudmFzIG9mIGNhbnZhc2VzKSB7XHJcbiAgICAgICAgICAgIGlmIChjYW52YXMud2lkdGggIT09IDApIHtcclxuICAgICAgICAgICAgICB0aGlzLmFkZENhbnZhcyhkb2MsIGNhbnZhcywgbWFyZ2lucyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgIHN0YXR1cyA9IFN1YmplY3RTdGF0dXMuRXJyb3I7XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgICAgICB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudChcclxuICAgICAgICAgICAgICAnaWdvLmdlby5wcmludEZvcm0uY29yc0Vycm9yTWVzc2FnZUJvZHknXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KFxyXG4gICAgICAgICAgICAgICdpZ28uZ2VvLnByaW50Rm9ybS5jb3JzRXJyb3JNZXNzYWdlSGVhZGVyJ1xyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJlbmRlck1hcChtYXAsIG1hcFNpemUsIGV4dGVudCk7XHJcbiAgICAgICAgc3RhdHVzJC5uZXh0KHN0YXR1cyk7XHJcbiAgICAgIH0sIDIwMCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnJlbmRlck1hcChtYXAsIFt3aWR0aFBpeGVscywgaGVpZ2h0UGl4ZWxzXSwgZXh0ZW50KTtcclxuXHJcbiAgICByZXR1cm4gc3RhdHVzJDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERvd25sb2FkIGFuIGltYWdlIG9mIHRoZSBtYXAgd2l0aCBhZGRpdGlvbiBvZiBpbmZvcm1hdGlvbnNcclxuICAgKiBAcGFyYW0gIG1hcCAtIE1hcCBvZiB0aGUgYXBwXHJcbiAgICogQHBhcmFtICBmb3JtYXQgLSBJbWFnZSBmb3JtYXQuIGRlZmF1bHQgdmFsdWUgdG8gXCJwbmdcIlxyXG4gICAqIEBwYXJhbSAgcHJvamVjdGlvbiAtIEluZGljYXRlIGlmIHByb2plY3Rpb24gbmVlZCB0byBiZSBhZGQuIERlZmF1bHQgdG8gZmFsc2VcclxuICAgKiBAcGFyYW0gIHNjYWxlIC0gSW5kaWNhdGUgaWYgc2NhbGUgbmVlZCB0byBiZSBhZGQuIERlZmF1bHQgdG8gZmFsc2VcclxuICAgKiBAcGFyYW0gIGxlZ2VuZCAtIEluZGljYXRlIGlmIHRoZSBsZWdlbmQgb2YgbGF5ZXJzIG5lZWQgdG8gYmUgZG93bmxvYWQuIERlZmF1bHQgdG8gZmFsc2VcclxuICAgKiBAcGFyYW0gIHRpdGxlIC0gVGl0bGUgdG8gYWRkIGZvciB0aGUgbWFwIC0gRGVmYXVsdCB0byBibGFua1xyXG4gICAqIEBwYXJhbSAgc3VidGl0bGUgLSBTdWJ0aXRsZSB0byBhZGQgZm9yIHRoZSBtYXAgLSBEZWZhdWx0IHRvIGJsYW5rXHJcbiAgICogQHBhcmFtICBjb21tZW50IC0gQ29tbWVudCB0byBhZGQgZm9yIHRoZSBtYXAgLSBEZWZhdWx0IHRvIGJsYW5rXHJcbiAgICogQHBhcmFtICBkb1ppcEZpbGUgLSBJbmRpY2F0ZSBpZiB3ZSBkbyBhIHppcCB3aXRoIHRoZSBmaWxlXHJcbiAgICogQHJldHVybiBJbWFnZSBmaWxlIG9mIHRoZSBtYXAgd2l0aCBleHRlbnNpb24gZm9ybWF0IGdpdmVuIGFzIHBhcmFtZXRlclxyXG4gICAqL1xyXG4gIGRvd25sb2FkTWFwSW1hZ2UoXHJcbiAgICBtYXA6IElnb01hcCxcclxuICAgIHJlc29sdXRpb246IG51bWJlcixcclxuICAgIGZvcm1hdCA9ICdwbmcnLFxyXG4gICAgcHJvamVjdGlvbiA9IGZhbHNlLFxyXG4gICAgc2NhbGUgPSBmYWxzZSxcclxuICAgIGxlZ2VuZCA9IGZhbHNlLFxyXG4gICAgdGl0bGUgPSAnJyxcclxuICAgIHN1YnRpdGxlID0gJycsXHJcbiAgICBjb21tZW50ID0gJycsXHJcbiAgICBkb1ppcEZpbGUgPSB0cnVlXHJcbiAgKSB7XHJcbiAgICBjb25zdCBzdGF0dXMkID0gbmV3IFN1YmplY3QoKTtcclxuICAgIC8vIGNvbnN0IHJlc29sdXRpb24gPSBtYXAub2wuZ2V0VmlldygpLmdldFJlc29sdXRpb24oKTtcclxuICAgIHRoaXMuYWN0aXZpdHlJZCA9IHRoaXMuYWN0aXZpdHlTZXJ2aWNlLnJlZ2lzdGVyKCk7XHJcbiAgICBjb25zdCB0cmFuc2xhdGUgPSB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGU7XHJcbiAgICBtYXAub2wub25jZSgncmVuZGVyY29tcGxldGUnLCAoZXZlbnQ6IGFueSkgPT4ge1xyXG4gICAgICBmb3JtYXQgPSBmb3JtYXQudG9Mb3dlckNhc2UoKTtcclxuICAgICAgY29uc3Qgb2xkQ2FudmFzID0gZXZlbnQudGFyZ2V0XHJcbiAgICAgICAgLmdldFZpZXdwb3J0KClcclxuICAgICAgICAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2NhbnZhcycpWzBdO1xyXG4gICAgICBjb25zdCBuZXdDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgY29uc3QgbmV3Q29udGV4dCA9IG5ld0NhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICAvLyBQb3N0aW9uIGluIGhlaWdodCB0byBzZXQgdGhlIGNhbnZhcyBpbiBuZXcgY2FudmFzXHJcbiAgICAgIGxldCBwb3NpdGlvbkhDYW52YXMgPSAwO1xyXG4gICAgICAvLyBQb3NpdGlvbiBpbiB3aWR0aCB0byBzZXQgdGhlIFByb2ovU2NhbGUgaW4gbmV3IGNhbnZhc1xyXG4gICAgICBsZXQgcG9zaXRpb25XUHJvalNjYWxlID0gMTA7XHJcbiAgICAgIC8vIEdldCBoZWlnaHQvd2lkdGggb2YgbWFwIGNhbnZhc1xyXG4gICAgICBjb25zdCB3aWR0aCA9IG9sZENhbnZhcy53aWR0aDtcclxuICAgICAgbGV0IGhlaWdodCA9IG9sZENhbnZhcy5oZWlnaHQ7XHJcbiAgICAgIC8vIFNldCBGb250IHRvIGNhbGN1bGF0ZSBjb21tZW50IHdpZHRoXHJcbiAgICAgIG5ld0NvbnRleHQuZm9udCA9ICcyMHB4IENhbGlicmknO1xyXG4gICAgICBjb25zdCBjb21tZW50V2lkdGggPSBuZXdDb250ZXh0Lm1lYXN1cmVUZXh0KGNvbW1lbnQpLndpZHRoO1xyXG4gICAgICAvLyBBZGQgaGVpZ2h0IGZvciB0aXRsZSBpZiBkZWZpbmVkXHJcbiAgICAgIGhlaWdodCA9IHRpdGxlICE9PSAnJyA/IGhlaWdodCArIDMwIDogaGVpZ2h0O1xyXG4gICAgICAvLyBBZGQgaGVpZ2h0IGZvciB0aXRsZSBpZiBkZWZpbmVkXHJcbiAgICAgIGhlaWdodCA9IHN1YnRpdGxlICE9PSAnJyA/IGhlaWdodCArIDMwIDogaGVpZ2h0O1xyXG4gICAgICAvLyBBZGQgaGVpZ2h0IGZvciBwcm9qZWN0aW9uIG9yIHNjYWxlIChzYW1lIGxpbmUpIGlmIGRlZmluZWRcclxuICAgICAgaGVpZ2h0ID0gcHJvamVjdGlvbiAhPT0gZmFsc2UgfHwgc2NhbGUgIT09IGZhbHNlID8gaGVpZ2h0ICsgMzAgOiBoZWlnaHQ7XHJcbiAgICAgIGNvbnN0IHBvc2l0aW9uSFByb2pTY2FsZSA9IGhlaWdodCAtIDEwO1xyXG4gICAgICAvLyBEZWZpbmUgbnVtYmVyIG9mIGxpbmUgZGVwZW5kaW5nIG9mIHRoZSBjb21tZW50IGxlbmd0aFxyXG4gICAgICBjb25zdCBjb21tZW50TmJMaW5lID0gTWF0aC5jZWlsKGNvbW1lbnRXaWR0aCAvIHdpZHRoKTtcclxuICAgICAgLy8gQWRkIGhlaWdodCBmb3IgbXVsdGlsaW5lIGNvbW1lbnQgaWYgZGVmaW5lZFxyXG4gICAgICBoZWlnaHQgPSBjb21tZW50ICE9PSAnJyA/IGhlaWdodCArIGNvbW1lbnROYkxpbmUgKiAzMCA6IGhlaWdodDtcclxuICAgICAgbGV0IHBvc2l0aW9uSENvbW1lbnQgPSBoZWlnaHQgLSBjb21tZW50TmJMaW5lICogMjAgKyA1O1xyXG4gICAgICAvLyBTZXQgdGhlIG5ldyBjYW52YXMgd2l0aCB0aGUgbmV3IGNhbGN1bGF0ZWQgc2l6ZVxyXG4gICAgICBuZXdDYW52YXMud2lkdGggPSB3aWR0aDtcclxuICAgICAgbmV3Q2FudmFzLmhlaWdodCA9IGhlaWdodDtcclxuICAgICAgLy8gUGF0Y2ggSnBlZyBkZWZhdWx0IGJsYWNrIGJhY2tncm91bmQgdG8gd2hpdGVcclxuICAgICAgaWYgKGZvcm1hdCA9PT0gJ2pwZWcnKSB7XHJcbiAgICAgICAgbmV3Q29udGV4dC5maWxsU3R5bGUgPSAnI2ZmZmZmZic7XHJcbiAgICAgICAgbmV3Q29udGV4dC5maWxsUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcclxuICAgICAgICBuZXdDb250ZXh0LmZpbGxTdHlsZSA9ICcjMDAwMDAwJztcclxuICAgICAgfVxyXG4gICAgICAvLyBJZiBhIHRpdGxlIG5lZWQgdG8gYmUgYWRkZWQgdG8gY2FudmFzXHJcbiAgICAgIGlmICh0aXRsZSAhPT0gJycpIHtcclxuICAgICAgICAvLyBTZXQgZm9udCBmb3IgdGl0bGVcclxuICAgICAgICAvLyBBZGp1c3QgYWNjb3JkaW5nIHRvIHRpdGxlIGxlbmd0aFxyXG4gICAgICAgIG5ld0NvbnRleHQuZm9udCA9ICcyNnB4IENhbGlicmknO1xyXG4gICAgICAgIHBvc2l0aW9uSENhbnZhcyA9IDMwO1xyXG4gICAgICAgIG5ld0NvbnRleHQudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcbiAgICAgICAgbmV3Q29udGV4dC5maWxsVGV4dCh0aXRsZSwgd2lkdGggLyAyLCAyMCwgd2lkdGggKiAwLjkpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChzdWJ0aXRsZSAhPT0gJycpIHtcclxuICAgICAgICAvLyBTZXQgZm9udCBmb3Igc3VidGl0bGVcclxuICAgICAgICAvLyBBZGp1c3QgYWNjb3JkaW5nIHRvIHRpdGxlIGxlbmd0aFxyXG4gICAgICAgIG5ld0NvbnRleHQuZm9udCA9ICcyNnB4IENhbGlicmknO1xyXG4gICAgICAgIHBvc2l0aW9uSENhbnZhcyA9IDYwO1xyXG4gICAgICAgIG5ld0NvbnRleHQudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcbiAgICAgICAgbmV3Q29udGV4dC5maWxsVGV4dChzdWJ0aXRsZSwgd2lkdGggLyAyLCA1MCwgd2lkdGggKiAwLjkpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIFNldCBmb250IGZvciBuZXh0IHNlY3Rpb25cclxuICAgICAgbmV3Q29udGV4dC5mb250ID0gJzIwcHggQ2FsaWJyaSc7XHJcbiAgICAgIC8vIElmIHByb2plY3Rpb24gbmVlZCB0byBiZSBhZGRlZCB0byBjYW52YXNcclxuICAgICAgaWYgKHByb2plY3Rpb24gIT09IGZhbHNlKSB7XHJcbiAgICAgICAgY29uc3QgcHJvalRleHQgPSB0cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5wcmludEZvcm0ucHJvamVjdGlvbicpO1xyXG4gICAgICAgIG5ld0NvbnRleHQudGV4dEFsaWduID0gJ3N0YXJ0JztcclxuICAgICAgICBuZXdDb250ZXh0LmZpbGxUZXh0KFxyXG4gICAgICAgICAgcHJvalRleHQgKyAnOiAnICsgbWFwLnByb2plY3Rpb24sXHJcbiAgICAgICAgICBwb3NpdGlvbldQcm9qU2NhbGUsXHJcbiAgICAgICAgICBwb3NpdGlvbkhQcm9qU2NhbGVcclxuICAgICAgICApO1xyXG4gICAgICAgIHBvc2l0aW9uV1Byb2pTY2FsZSArPSAyMDA7IC8vIFdpZHRoIHBvc2l0aW9uIGNoYW5nZSBmb3Igc2NhbGUgcG9zaXRpb25cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gSWYgc2NhbGUgbmVlZCB0byBiZSBhZGRlZCB0byBjYW52YXNcclxuICAgICAgaWYgKHNjYWxlICE9PSBmYWxzZSkge1xyXG4gICAgICAgIGNvbnN0IHNjYWxlVGV4dCA9IHRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLnByaW50Rm9ybS5zY2FsZScpO1xyXG4gICAgICAgIGNvbnN0IG1hcFNjYWxlID0gbWFwLnZpZXdDb250cm9sbGVyLmdldFNjYWxlKHJlc29sdXRpb24pO1xyXG4gICAgICAgIG5ld0NvbnRleHQudGV4dEFsaWduID0gJ3N0YXJ0JztcclxuICAgICAgICBuZXdDb250ZXh0LmZpbGxUZXh0KFxyXG4gICAgICAgICAgc2NhbGVUZXh0ICsgJzogfiAxIC8gJyArIGZvcm1hdFNjYWxlKG1hcFNjYWxlKSxcclxuICAgICAgICAgIHBvc2l0aW9uV1Byb2pTY2FsZSxcclxuICAgICAgICAgIHBvc2l0aW9uSFByb2pTY2FsZVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gSWYgYSBjb21tZW50IG5lZWQgdG8gYmUgYWRkZWQgdG8gY2FudmFzXHJcbiAgICAgIGlmIChjb21tZW50ICE9PSAnJykge1xyXG4gICAgICAgIG5ld0NvbnRleHQudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcbiAgICAgICAgLy8gSWYgb25seSBvbmUgbGluZSwgbm8gbmVlZCB0byBtdWx0aWxpbmUgdGhlIGNvbW1lbnRcclxuICAgICAgICBpZiAoY29tbWVudE5iTGluZSA9PT0gMSkge1xyXG4gICAgICAgICAgbmV3Q29udGV4dC5maWxsVGV4dChjb21tZW50LCB3aWR0aCAvIDIsIHBvc2l0aW9uSENvbW1lbnQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBTZXBhcmF0ZSB0aGUgc2V0ZW5zZXMgdG8gYmUgYXBwcm94LiB0aGUgc2FtZSBsZW5ndGhcclxuICAgICAgICAgIGNvbnN0IG5iQ29tbWVudENoYXIgPSBjb21tZW50Lmxlbmd0aDtcclxuICAgICAgICAgIGNvbnN0IENvbW1lbnRMZW5ndGhUb0N1dCA9IE1hdGguZmxvb3IobmJDb21tZW50Q2hhciAvIGNvbW1lbnROYkxpbmUpO1xyXG4gICAgICAgICAgbGV0IGNvbW1lbnRDdXJyZW50TGluZSA9ICcnO1xyXG4gICAgICAgICAgbGV0IHBvc2l0aW9uRmlyc3RDdXRDaGFyID0gMDtcclxuICAgICAgICAgIGxldCBwb3NpdGlvbkxhc3RCbGFuaztcclxuICAgICAgICAgIC8vIExvb3AgZm9yIHRoZSBudW1iZXIgb2YgbGluZSBjYWxjdWxhdGVkXHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbW1lbnROYkxpbmU7IGkrKykge1xyXG4gICAgICAgICAgICAvLyBGb3IgYWxsIGxpbmUgZXhjZXB0IGxhc3RcclxuICAgICAgICAgICAgaWYgKGNvbW1lbnROYkxpbmUgLSAxID4gaSkge1xyXG4gICAgICAgICAgICAgIC8vIEdldCBjb21tZW50IGN1cnJlbnQgbGluZSB0byBmaW5kIHRoZSByaWdodCBwbGFjZSB0dSBjdXQgY29tbWVudFxyXG4gICAgICAgICAgICAgIGNvbW1lbnRDdXJyZW50TGluZSA9IGNvbW1lbnQuc3Vic3RyKFxyXG4gICAgICAgICAgICAgICAgcG9zaXRpb25GaXJzdEN1dENoYXIsXHJcbiAgICAgICAgICAgICAgICBDb21tZW50TGVuZ3RoVG9DdXRcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIC8vIEN1dCB0aGUgc2V0ZW5jZSBhdCBibGFua1xyXG4gICAgICAgICAgICAgIHBvc2l0aW9uTGFzdEJsYW5rID0gY29tbWVudEN1cnJlbnRMaW5lLmxhc3RJbmRleE9mKCcgJyk7XHJcbiAgICAgICAgICAgICAgbmV3Q29udGV4dC5maWxsVGV4dChcclxuICAgICAgICAgICAgICAgIGNvbW1lbnRDdXJyZW50TGluZS5zdWJzdHIoMCwgcG9zaXRpb25MYXN0QmxhbmspLFxyXG4gICAgICAgICAgICAgICAgd2lkdGggLyAyLFxyXG4gICAgICAgICAgICAgICAgcG9zaXRpb25IQ29tbWVudFxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgcG9zaXRpb25GaXJzdEN1dENoYXIgKz0gcG9zaXRpb25MYXN0Qmxhbms7XHJcbiAgICAgICAgICAgICAgLy8gR28gdG8gbmV4dCBsaW5lIGZvciBpbnNlcnRpb25cclxuICAgICAgICAgICAgICBwb3NpdGlvbkhDb21tZW50ICs9IDIwO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIC8vIERvbid0IGN1dCBsYXN0IHBhcnRcclxuICAgICAgICAgICAgICBuZXdDb250ZXh0LmZpbGxUZXh0KFxyXG4gICAgICAgICAgICAgICAgY29tbWVudC5zdWJzdHIocG9zaXRpb25GaXJzdEN1dENoYXIpLFxyXG4gICAgICAgICAgICAgICAgd2lkdGggLyAyLFxyXG4gICAgICAgICAgICAgICAgcG9zaXRpb25IQ29tbWVudFxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8gQWRkIG1hcCB0byBuZXcgY2FudmFzXHJcbiAgICAgIG5ld0NvbnRleHQuZHJhd0ltYWdlKG9sZENhbnZhcywgMCwgcG9zaXRpb25IQ2FudmFzKTtcclxuXHJcbiAgICAgIGxldCBzdGF0dXMgPSBTdWJqZWN0U3RhdHVzLkRvbmU7XHJcbiAgICAgIGxldCBmaWxlTmFtZVdpdGhFeHQgPSAnbWFwLicgKyBmb3JtYXQ7XHJcbiAgICAgIGlmIChmb3JtYXQudG9Mb3dlckNhc2UoKSA9PT0gJ3RpZmYnKSB7XHJcbiAgICAgICAgZmlsZU5hbWVXaXRoRXh0ID0gJ21hcCcgKyBtYXAucHJvamVjdGlvbi5yZXBsYWNlKCc6JywgJ18nKSArICcuJyArIGZvcm1hdDtcclxuICAgICAgfVxyXG5cclxuICAgICAgdHJ5IHtcclxuICAgICAgICAvLyBTYXZlIHRoZSBjYW52YXMgYXMgZmlsZVxyXG4gICAgICAgIGlmICghZG9aaXBGaWxlKSB7XHJcbiAgICAgICAgICB0aGlzLnNhdmVDYW52YXNJbWFnZUFzRmlsZShuZXdDYW52YXMsIGZpbGVOYW1lV2l0aEV4dCwgZm9ybWF0KTtcclxuICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdC50b0xvd2VyQ2FzZSgpID09PSAndGlmZicpIHtcclxuICAgICAgICAgIC8vIEFkZCB0aGUgY2FudmFzIHRvIHppcFxyXG4gICAgICAgICAgdGhpcy5nZW5lcmF0ZUNhbnZhRmlsZVRvWmlwKG5ld0NhbnZhcywgZmlsZU5hbWVXaXRoRXh0KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gQWRkIHRoZSBjYW52YXMgdG8gemlwXHJcbiAgICAgICAgICB0aGlzLmdlbmVyYXRlQ2FudmFGaWxlVG9aaXAobmV3Q2FudmFzLCBmaWxlTmFtZVdpdGhFeHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgc3RhdHVzID0gU3ViamVjdFN0YXR1cy5FcnJvcjtcclxuICAgICAgfVxyXG5cclxuICAgICAgc3RhdHVzJC5uZXh0KHN0YXR1cyk7XHJcblxyXG4gICAgICBpZiAoZm9ybWF0LnRvTG93ZXJDYXNlKCkgPT09ICd0aWZmJykge1xyXG4gICAgICAgIGNvbnN0IHRmd0ZpbGVOYW1lV2l0aEV4dCA9IGZpbGVOYW1lV2l0aEV4dC5zdWJzdHJpbmcoMCwgZmlsZU5hbWVXaXRoRXh0LnRvTG93ZXJDYXNlKCkuaW5kZXhPZignLnRpZmYnKSkgKyAnLnRmdyc7XHJcbiAgICAgICAgY29uc3QgdGl3Q29udGVudCA9IHRoaXMuZ2V0V29ybGRGaWxlSW5mb3JtYXRpb24obWFwKTtcclxuICAgICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW3Rpd0NvbnRlbnRdLCB7XHJcbiAgICAgICAgICB0eXBlOiAndGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04J1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmICghZG9aaXBGaWxlKSB7XHJcbiAgICAgICAgICAvLyBzYXZlQXMgYXV0b21hdGljbHkgcmVwbGFjZSAnOicgZm9yICdfJ1xyXG4gICAgICAgICAgc2F2ZUFzKGJsb2IsIHRmd0ZpbGVOYW1lV2l0aEV4dCk7XHJcbiAgICAgICAgICB0aGlzLnNhdmVGaWxlUHJvY2Vzc2luZygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBBZGQgdGhlIGNhbnZhcyB0byB6aXBcclxuICAgICAgICAgIHRoaXMuYWRkRmlsZVRvWmlwKHRmd0ZpbGVOYW1lV2l0aEV4dCxibG9iKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgbWFwLm9sLnJlbmRlclN5bmMoKTtcclxuXHJcbiAgICByZXR1cm4gc3RhdHVzJDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyTWFwKG1hcCwgc2l6ZSwgZXh0ZW50KSB7XHJcbiAgICBtYXAub2wudXBkYXRlU2l6ZSgpO1xyXG4gICAgbWFwLm9sLnJlbmRlclN5bmMoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNhdmUgZG9jdW1lbnRcclxuICAgKiBAcGFyYW0gIGRvYyAtIERvY3VtZW50IHRvIHNhdmVcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgYXN5bmMgc2F2ZURvYyhkb2M6IGpzcGRmKSB7XHJcbiAgICBhd2FpdCBkb2Muc2F2ZSgnbWFwLnBkZicsIHsgcmV0dXJuUHJvbWlzZTogdHJ1ZSB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbGN1bGF0ZSB0aGUgYmVzdCBJbWFnZSBzaXplIHRvIGZpdCBpbiBwZGZcclxuICAgKiBAcGFyYW0gZG9jIC0gUGRmIERvY3VtZW50XHJcbiAgICogQHBhcmFtIGNhbnZhcyAtIENhbnZhcyBvZiBpbWFnZVxyXG4gICAqIEBwYXJhbSBtYXJnaW5zIC0gUGFnZSBtYXJnaW5zXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRJbWFnZVNpemVUb0ZpdFBkZihkb2MsIGNhbnZhcywgbWFyZ2lucykge1xyXG4gICAgLy8gRGVmaW5lIHZhcmlhYmxlIHRvIGNhbGN1bGF0ZSBiZXN0IHNpemUgdG8gZml0IGluIG9uZSBwYWdlXHJcbiAgICBjb25zdCBwYWdlSGVpZ2h0ID1cclxuICAgICAgZG9jLmludGVybmFsLnBhZ2VTaXplLmdldEhlaWdodCgpIC0gKG1hcmdpbnNbMF0gKyBtYXJnaW5zWzJdKTtcclxuICAgIGNvbnN0IHBhZ2VXaWR0aCA9XHJcbiAgICAgIGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS5nZXRXaWR0aCgpIC0gKG1hcmdpbnNbMV0gKyBtYXJnaW5zWzNdKTtcclxuICAgIGNvbnN0IGNhbkhlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XHJcbiAgICBjb25zdCBjYW5XaWR0aCA9IGNhbnZhcy53aWR0aDtcclxuICAgIGNvbnN0IGhlaWdodFJhdGlvID0gY2FuSGVpZ2h0IC8gcGFnZUhlaWdodDtcclxuICAgIGNvbnN0IHdpZHRoUmF0aW8gPSBjYW5XaWR0aCAvIHBhZ2VXaWR0aDtcclxuICAgIGNvbnN0IG1heFJhdGlvID0gaGVpZ2h0UmF0aW8gPiB3aWR0aFJhdGlvID8gaGVpZ2h0UmF0aW8gOiB3aWR0aFJhdGlvO1xyXG4gICAgY29uc3QgaW1nSGVpZ2ggPSBtYXhSYXRpbyA+IDEgPyBjYW5IZWlnaHQgLyBtYXhSYXRpbyA6IGNhbkhlaWdodDtcclxuICAgIGNvbnN0IGltZ1dpZHRoID0gbWF4UmF0aW8gPiAxID8gY2FuV2lkdGggLyBtYXhSYXRpbyA6IGNhbldpZHRoO1xyXG5cclxuICAgIHJldHVybiBbaW1nV2lkdGgsIGltZ0hlaWdoXTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBhIHdvcmxkIGZpbGUgaW5mb3JtYXRpb24gZm9yIHRpZmZcclxuICAgKiBAcGFyYW0gIG1hcCAtIE1hcCBvZiB0aGUgYXBwXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRXb3JsZEZpbGVJbmZvcm1hdGlvbihtYXApIHtcclxuICAgIGNvbnN0IGN1cnJlbnRSZXNvbHV0aW9uID0gbWFwLnZpZXdDb250cm9sbGVyLmdldFJlc29sdXRpb24oKTtcclxuICAgIGNvbnN0IGN1cnJlbnRFeHRlbnQgPSBtYXAudmlld0NvbnRyb2xsZXIuZ2V0RXh0ZW50KCk7IC8vIFJldHVybiBbbWlueCwgbWlueSwgbWF4eCwgbWF4eV1cclxuICAgIHJldHVybiBbXHJcbiAgICAgIGN1cnJlbnRSZXNvbHV0aW9uLFxyXG4gICAgICAwLFxyXG4gICAgICAwLFxyXG4gICAgICAtY3VycmVudFJlc29sdXRpb24sXHJcbiAgICAgIGN1cnJlbnRFeHRlbnRbMF0gKyBjdXJyZW50UmVzb2x1dGlvbiAvIDAuNSxcclxuICAgICAgY3VycmVudEV4dGVudFszXSAtIGN1cnJlbnRSZXNvbHV0aW9uIC8gMC41XHJcbiAgICBdLmpvaW4oJ1xcbicpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2F2ZSBjYW52YXMgaW1hZ2UgYXMgZmlsZVxyXG4gICAqIEBwYXJhbSBjYW52YXMgLSBDYW52YXMgdG8gc2F2ZVxyXG4gICAqIEBwYXJhbSBuYW1lIC0gTmFtZSBvZiB0aGUgZmlsZVxyXG4gICAqIEBwYXJhbSBmb3JtYXQgLSBmaWxlIGZvcm1hdFxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2F2ZUNhbnZhc0ltYWdlQXNGaWxlKGNhbnZhcywgbmFtZVdpdGhFeHQsIGZvcm1hdCkge1xyXG4gICAgY29uc3QgYmxvYkZvcm1hdCA9ICdpbWFnZS8nICsgZm9ybWF0O1xyXG4gICAgY29uc3QgdGhhdCA9IHRoaXM7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgY2FudmFzLnRvRGF0YVVSTCgpOyAvLyBKdXN0IHRvIG1ha2UgdGhlIGNhdGNoIHRyaWdnZXIgd2lodG91dCB0b0Jsb2IgRXJyb3IgdGhyb3cgbm90IGNhdGNoZWRcclxuICAgICAgLy8gSWYgbmF2aWdhdG9yIGlzIEludGVybmV0IEV4cGxvcmVyXHJcbiAgICAgIGlmIChuYXZpZ2F0b3IubXNTYXZlQmxvYikge1xyXG4gICAgICAgIG5hdmlnYXRvci5tc1NhdmVCbG9iKGNhbnZhcy5tc1RvQmxvYigpLCBuYW1lV2l0aEV4dCk7XHJcbiAgICAgICAgdGhpcy5zYXZlRmlsZVByb2Nlc3NpbmcoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjYW52YXMudG9CbG9iKChibG9iKSA9PiB7XHJcbiAgICAgICAgICAvLyBkb3dubG9hZCBpbWFnZVxyXG4gICAgICAgICAgc2F2ZUFzKGJsb2IsIG5hbWVXaXRoRXh0KTtcclxuICAgICAgICAgIHRoYXQuc2F2ZUZpbGVQcm9jZXNzaW5nKCk7XHJcbiAgICAgICAgfSwgYmxvYkZvcm1hdCk7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgIHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KFxyXG4gICAgICAgICAgJ2lnby5nZW8ucHJpbnRGb3JtLmNvcnNFcnJvck1lc3NhZ2VCb2R5J1xyXG4gICAgICAgICksXHJcbiAgICAgICAgdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoXHJcbiAgICAgICAgICAnaWdvLmdlby5wcmludEZvcm0uY29yc0Vycm9yTWVzc2FnZUhlYWRlcidcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGQgZmlsZSB0byBhIHppcFxyXG4gICAqIEBwYXJhbSBjYW52YXMgLSBGaWxlIHRvIGFkZCB0byB0aGUgemlwXHJcbiAgICogQHBhcmFtICBuYW1lIC1OYW1lIG9mIHRoZSBmaWxlb3ZlcnZpZXdcclxuICAgKi9cclxuICBwcml2YXRlIGdlbmVyYXRlQ2FudmFGaWxlVG9aaXAoY2FudmFzLCBuYW1lKSB7XHJcbiAgICBjb25zdCBibG9iRm9ybWF0ID0gJ2ltYWdlLycgKyAnanBlZyc7XHJcbiAgICBjb25zdCB0aGF0ID0gdGhpcztcclxuICAgIGlmIChcclxuICAgICAgIXRoaXMuaGFzT3duUHJvcGVydHkoJ3ppcEZpbGUnKSB8fFxyXG4gICAgICB0eXBlb2YgdGhpcy56aXBGaWxlID09PSAndW5kZWZpbmVkJ1xyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuemlwRmlsZSA9IG5ldyBKU1ppcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGNhbnZhcy50b0RhdGFVUkwoKTsgLy8gSnVzdCB0byBtYWtlIHRoZSBjYXRjaCB0cmlnZ2VyIHdpaHRvdXQgdG9CbG9iIEVycm9yIHRocm93IG5vdCBjYXRjaGVkXHJcbiAgICAgIGlmIChuYXZpZ2F0b3IubXNTYXZlQmxvYikge1xyXG4gICAgICAgIHRoaXMuYWRkRmlsZVRvWmlwKG5hbWUsIGNhbnZhcy5tc1RvQmxvYigpKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjYW52YXMudG9CbG9iKChibG9iKSA9PiB7XHJcbiAgICAgICAgICB0aGF0LmFkZEZpbGVUb1ppcChuYW1lLCBibG9iKTtcclxuICAgICAgICB9LCBibG9iRm9ybWF0KTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoXHJcbiAgICAgICAgICAnaWdvLmdlby5wcmludEZvcm0uY29yc0Vycm9yTWVzc2FnZUJvZHknXHJcbiAgICAgICAgKSxcclxuICAgICAgICB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudChcclxuICAgICAgICAgICdpZ28uZ2VvLnByaW50Rm9ybS5jb3JzRXJyb3JNZXNzYWdlSGVhZGVyJ1xyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZCBmaWxlIHRvIHppcCwgaWYgYWxsIGZpbGUgYXJlIHppcHBlZCwgZG93bmxvYWRcclxuICAgKiBAcGFyYW0gbmFtZSAtIE5hbWUgb2YgdGhlIGZpbGVzXHJcbiAgICogQHBhcmFtIGJsb2IgLSBDb250YWluIG9mIGZpbGVcclxuICAgKi9cclxuICBwcml2YXRlIGFkZEZpbGVUb1ppcChuYW1lLCBibG9iKSB7XHJcbiAgICAvLyBhZGQgZmlsZSB0byB6aXBcclxuICAgIHRoaXMuemlwRmlsZS5maWxlKG5hbWUsIGJsb2IpO1xyXG4gICAgdGhpcy5uYkZpbGVUb1Byb2Nlc3MtLTtcclxuXHJcbiAgICAvLyBJZiBhbGwgZmlsZXMgYXJlIHByb2NjZXNzZWRcclxuICAgIGlmICh0aGlzLm5iRmlsZVRvUHJvY2VzcyA9PT0gMCkge1xyXG4gICAgICAvLyBEb3dubG9hZCB6aXAgZmlsZVxyXG4gICAgICB0aGlzLmdldFppcEZpbGUoKTtcclxuICAgICAgLy8gU3RvcCBsb2FkaW5nXHJcbiAgICAgIHRoaXMuYWN0aXZpdHlTZXJ2aWNlLnVucmVnaXN0ZXIodGhpcy5hY3Rpdml0eUlkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2F2ZUZpbGVQcm9jZXNzaW5nKCkge1xyXG4gICAgdGhpcy5uYkZpbGVUb1Byb2Nlc3MtLTtcclxuXHJcbiAgICAvLyBJZiBhbGwgZmlsZXMgYXJlIHByb2NjZXNzZWRcclxuICAgIGlmICh0aGlzLm5iRmlsZVRvUHJvY2VzcyA9PT0gMCkge1xyXG4gICAgICAvLyBTdG9wIGxvYWRpbmdcclxuICAgICAgdGhpcy5hY3Rpdml0eVNlcnZpY2UudW5yZWdpc3Rlcih0aGlzLmFjdGl2aXR5SWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSB6aXBwZWQgZmlsZVxyXG4gICAqIEByZXR1cm4gUmV0dW4gYSB6aXAgZmlsZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0WmlwRmlsZSgpIHtcclxuICAgIGNvbnN0IHRoYXQgPSB0aGlzO1xyXG4gICAgdGhpcy56aXBGaWxlLmdlbmVyYXRlQXN5bmMoeyB0eXBlOiAnYmxvYicgfSkudGhlbigoYmxvYikgPT4ge1xyXG4gICAgICAvLyAxKSBnZW5lcmF0ZSB0aGUgemlwIGZpbGVcclxuICAgICAgc2F2ZUFzKGJsb2IsICdtYXAuemlwJyk7XHJcbiAgICAgIGRlbGV0ZSB0aGF0LnppcEZpbGU7XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -27,4 +27,4 @@ export const PrintLegendPosition = strEnum([
|
|
|
27
27
|
'bottomright',
|
|
28
28
|
'newpage'
|
|
29
29
|
]);
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpbnQudHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL3ByaW50L3NoYXJlZC9wcmludC50eXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFdEMsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFJM0QsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDO0lBQ3RDLElBQUk7SUFDSixJQUFJO0lBQ0osSUFBSTtJQUNKLElBQUk7SUFDSixJQUFJO0lBQ0osSUFBSTtJQUNKLFFBQVE7SUFDUixPQUFPO0NBQ1IsQ0FBQyxDQUFDO0FBR0gsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFHbkUsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFHbkUsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsT0FBTyxDQUFDO0lBQzFDLEtBQUs7SUFDTCxLQUFLO0lBQ0wsTUFBTTtJQUNOLEtBQUs7SUFDTCxNQUFNO0NBQ1AsQ0FBQyxDQUFDO0FBR0gsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsT0FBTyxDQUFDO0lBQ3pDLE1BQU07SUFDTixVQUFVO0lBQ1YsU0FBUztJQUNULFlBQVk7SUFDWixhQUFhO0lBQ2IsU0FBUztDQUNWLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHN0ckVudW0gfSBmcm9tICdAaWdvMi91dGlscyc7XHJcblxyXG5leHBvcnQgY29uc3QgUHJpbnRPdXRwdXRGb3JtYXQgPSBzdHJFbnVtKFsnUGRmJywgJ0ltYWdlJ10pO1xyXG5cclxuZXhwb3J0IHR5cGUgUHJpbnRPdXRwdXRGb3JtYXQgPSBrZXlvZiB0eXBlb2YgUHJpbnRPdXRwdXRGb3JtYXQ7XHJcblxyXG5leHBvcnQgY29uc3QgUHJpbnRQYXBlckZvcm1hdCA9IHN0ckVudW0oW1xyXG4gICdBMCcsXHJcbiAgJ0ExJyxcclxuICAnQTInLFxyXG4gICdBMycsXHJcbiAgJ0E0JyxcclxuICAnQTUnLFxyXG4gICdMZXR0ZXInLFxyXG4gICdMZWdhbCdcclxuXSk7XHJcbmV4cG9ydCB0eXBlIFByaW50UGFwZXJGb3JtYXQgPSBrZXlvZiB0eXBlb2YgUHJpbnRQYXBlckZvcm1hdDtcclxuXHJcbmV4cG9ydCBjb25zdCBQcmludE9yaWVudGF0aW9uID0gc3RyRW51bShbJ2xhbmRzY2FwZScsICdwb3J0cmFpdCddKTtcclxuZXhwb3J0IHR5cGUgUHJpbnRPcmllbnRhdGlvbiA9IGtleW9mIHR5cGVvZiBQcmludE9yaWVudGF0aW9uO1xyXG5cclxuZXhwb3J0IGNvbnN0IFByaW50UmVzb2x1dGlvbiA9IHN0ckVudW0oWyc3MicsICc5NicsICcxNTAnLCAnMzAwJ10pO1xyXG5leHBvcnQgdHlwZSBQcmludFJlc29sdXRpb24gPSBrZXlvZiB0eXBlb2YgUHJpbnRSZXNvbHV0aW9uO1xyXG5cclxuZXhwb3J0IGNvbnN0IFByaW50U2F2ZUltYWdlRm9ybWF0ID0gc3RyRW51bShbXHJcbiAgJ0JtcCcsXHJcbiAgJ0dpZicsXHJcbiAgJ0pwZWcnLFxyXG4gICdQbmcnLFxyXG4gICdUaWZmJ1xyXG5dKTtcclxuZXhwb3J0IHR5cGUgUHJpbnRTYXZlSW1hZ2VGb3JtYXQgPSBrZXlvZiB0eXBlb2YgUHJpbnRTYXZlSW1hZ2VGb3JtYXQ7XHJcblxyXG5leHBvcnQgY29uc3QgUHJpbnRMZWdlbmRQb3NpdGlvbiA9IHN0ckVudW0oW1xyXG4gICdub25lJyxcclxuICAndG9wcmlnaHQnLFxyXG4gICd0b3BsZWZ0JyxcclxuICAnYm90dG9tbGVmdCcsXHJcbiAgJ2JvdHRvbXJpZ2h0JyxcclxuICAnbmV3cGFnZSdcclxuXSk7XHJcbmV4cG9ydCB0eXBlIFByaW50TGVnZW5kUG9zaXRpb24gPSBrZXlvZiB0eXBlb2YgUHJpbnRMZWdlbmRQb3NpdGlvbjtcclxuIl19
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export * from './shared';
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9xdWVyeS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFVBQVUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vc2hhcmVkJztcclxuIl19
|
|
@@ -26,4 +26,4 @@ IgoQueryModule.ɵinj = /*@__PURE__*/ i0.ɵɵdefineInjector({ providers: [QuerySe
|
|
|
26
26
|
}]
|
|
27
27
|
}], null, null); })();
|
|
28
28
|
(function () { (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(IgoQueryModule, { declarations: [QueryDirective], imports: [CommonModule, IgoLanguageModule, IgoMessageModule], exports: [QueryDirective] }); })();
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnkubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2VvL3NyYy9saWIvcXVlcnkvcXVlcnkubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQXVCLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFakUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQzs7QUFRbEYsTUFBTSxPQUFPLGNBQWM7SUFDekIsTUFBTSxDQUFDLE9BQU87UUFDWixPQUFPO1lBQ0wsUUFBUSxFQUFFLGNBQWM7WUFDeEIsU0FBUyxFQUFFLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztTQUN4QyxDQUFDO0lBQ0osQ0FBQzs7NEVBTlUsY0FBYztnRUFBZCxjQUFjO3FFQUZkLENBQUMsWUFBWSxDQUFDLFlBSGYsWUFBWSxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQjt1RkFLaEQsY0FBYztjQU4xQixRQUFRO2VBQUM7Z0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixDQUFDO2dCQUM1RCxPQUFPLEVBQUUsQ0FBQyxjQUFjLENBQUM7Z0JBQ3pCLFlBQVksRUFBRSxDQUFDLGNBQWMsQ0FBQztnQkFDOUIsU0FBUyxFQUFFLENBQUMsWUFBWSxDQUFDO2FBQzFCOzt3RkFDWSxjQUFjLG1CQUhWLGNBQWMsYUFGbkIsWUFBWSxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixhQUNqRCxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUsIE1vZHVsZVdpdGhQcm92aWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuXHJcbmltcG9ydCB7IElnb0xhbmd1YWdlTW9kdWxlLCBJZ29NZXNzYWdlTW9kdWxlIH0gZnJvbSAnQGlnbzIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBRdWVyeURpcmVjdGl2ZSB9IGZyb20gJy4vc2hhcmVkL3F1ZXJ5LmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFF1ZXJ5U2VydmljZSB9IGZyb20gJy4vc2hhcmVkL3F1ZXJ5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBwcm92aWRlUXVlcnlTZWFyY2hTb3VyY2UgfSBmcm9tICcuL3NoYXJlZC9xdWVyeS1zZWFyY2gtc291cmNlLnByb3ZpZGVycyc7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIElnb0xhbmd1YWdlTW9kdWxlLCBJZ29NZXNzYWdlTW9kdWxlXSxcclxuICBleHBvcnRzOiBbUXVlcnlEaXJlY3RpdmVdLFxyXG4gIGRlY2xhcmF0aW9uczogW1F1ZXJ5RGlyZWN0aXZlXSxcclxuICBwcm92aWRlcnM6IFtRdWVyeVNlcnZpY2VdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJZ29RdWVyeU1vZHVsZSB7XHJcbiAgc3RhdGljIGZvclJvb3QoKTogTW9kdWxlV2l0aFByb3ZpZGVyczxJZ29RdWVyeU1vZHVsZT4ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbmdNb2R1bGU6IElnb1F1ZXJ5TW9kdWxlLFxyXG4gICAgICBwcm92aWRlcnM6IFtwcm92aWRlUXVlcnlTZWFyY2hTb3VyY2UoKV1cclxuICAgIH07XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -4,4 +4,4 @@ export * from './query.enums';
|
|
|
4
4
|
export * from './query.interfaces';
|
|
5
5
|
export * from './query.utils';
|
|
6
6
|
export * from './query-search-source';
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9xdWVyeS9zaGFyZWQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyx1QkFBdUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vcXVlcnkuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vcXVlcnkuZGlyZWN0aXZlJztcclxuZXhwb3J0ICogZnJvbSAnLi9xdWVyeS5lbnVtcyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vcXVlcnkuaW50ZXJmYWNlcyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vcXVlcnkudXRpbHMnO1xyXG5leHBvcnQgKiBmcm9tICcuL3F1ZXJ5LXNlYXJjaC1zb3VyY2UnO1xyXG4iXX0=
|
|
@@ -32,4 +32,4 @@ QuerySearchSource.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: QueryS
|
|
|
32
32
|
type: Inject,
|
|
33
33
|
args: ['options']
|
|
34
34
|
}] }]; }, null); })();
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktc2VhcmNoLXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL3F1ZXJ5L3NoYXJlZC9xdWVyeS1zZWFyY2gtc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5ELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7O0FBRWxFOzs7R0FHRztBQUVILE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxZQUFZO0lBSWpELFlBQStCLE9BQTRCO1FBQ3pELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqQixDQUFDO0lBRUQsS0FBSztRQUNILE9BQU8saUJBQWlCLENBQUMsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRCxPQUFPO1FBQ0wsT0FBTyxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7SUFDaEMsQ0FBQztJQUVTLGlCQUFpQjtRQUN6QixPQUFPO1lBQ0wsS0FBSyxFQUFFLE9BQU87U0FDZixDQUFDO0lBQ0osQ0FBQzs7QUFuQk0sb0JBQUUsR0FBRyxLQUFLLENBQUM7QUFDWCxzQkFBSSxHQUFHLE9BQU8sQ0FBQztrRkFGWCxpQkFBaUIsY0FJUixTQUFTO3VFQUpsQixpQkFBaUIsV0FBakIsaUJBQWlCO3VGQUFqQixpQkFBaUI7Y0FEN0IsVUFBVTs7c0JBS0ksTUFBTTt1QkFBQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBGRUFUVVJFIH0gZnJvbSAnLi4vLi4vZmVhdHVyZS9zaGFyZWQvZmVhdHVyZS5lbnVtcyc7XHJcbmltcG9ydCB7IFNlYXJjaFNvdXJjZSB9IGZyb20gJy4uLy4uL3NlYXJjaC9zaGFyZWQvc291cmNlcy9zb3VyY2UnO1xyXG5pbXBvcnQgeyBTZWFyY2hTb3VyY2VPcHRpb25zIH0gZnJvbSAnLi4vLi4vc2VhcmNoL3NoYXJlZC9zb3VyY2VzL3NvdXJjZS5pbnRlcmZhY2VzJztcclxuLyoqXHJcbiAqIE1hcCBzZWFyY2ggc291cmNlLiBGb3Igbm93IGl0IGhhcyBubyBzZWFyY2ggY2FwYWJpbGl0eS4gQWxsIGl0IGRvZXNcclxuICogaXMgYWN0IGFzIGEgcGxhY2Vob2xkZXIgZm9yIHRoZSBtYXAgcXVlcnkgcmVzdWx0cycgXCJzZWFyY2ggc291cmNlXCIuXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBRdWVyeVNlYXJjaFNvdXJjZSBleHRlbmRzIFNlYXJjaFNvdXJjZSB7XHJcbiAgc3RhdGljIGlkID0gJ21hcCc7XHJcbiAgc3RhdGljIHR5cGUgPSBGRUFUVVJFO1xyXG5cclxuICBjb25zdHJ1Y3RvcihASW5qZWN0KCdvcHRpb25zJykgb3B0aW9uczogU2VhcmNoU291cmNlT3B0aW9ucykge1xyXG4gICAgc3VwZXIob3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBnZXRJZCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIFF1ZXJ5U2VhcmNoU291cmNlLmlkO1xyXG4gIH1cclxuXHJcbiAgZ2V0VHlwZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIFF1ZXJ5U2VhcmNoU291cmNlLnR5cGU7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ2V0RGVmYXVsdE9wdGlvbnMoKTogU2VhcmNoU291cmNlT3B0aW9ucyB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB0aXRsZTogJ0NhcnRlJ1xyXG4gICAgfTtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -19,4 +19,4 @@ export function provideQuerySearchSource() {
|
|
|
19
19
|
deps: [ConfigService]
|
|
20
20
|
};
|
|
21
21
|
}
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktc2VhcmNoLXNvdXJjZS5wcm92aWRlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9xdWVyeS9zaGFyZWQvcXVlcnktc2VhcmNoLXNvdXJjZS5wcm92aWRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUUzQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFbEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFMUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLHdCQUF3QixDQUFDLE1BQXFCO0lBQzVELE9BQU8sSUFBSSxpQkFBaUIsQ0FDMUIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsaUJBQWlCLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQ2hFLENBQUM7QUFDSixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsd0JBQXdCO0lBQ3RDLE9BQU87UUFDTCxPQUFPLEVBQUUsWUFBWTtRQUNyQixVQUFVLEVBQUUsd0JBQXdCO1FBQ3BDLEtBQUssRUFBRSxJQUFJO1FBQ1gsSUFBSSxFQUFFLENBQUMsYUFBYSxDQUFDO0tBQ3RCLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uZmlnU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgU2VhcmNoU291cmNlIH0gZnJvbSAnLi4vLi4vc2VhcmNoL3NoYXJlZC9zb3VyY2VzL3NvdXJjZSc7XHJcblxyXG5pbXBvcnQgeyBRdWVyeVNlYXJjaFNvdXJjZSB9IGZyb20gJy4vcXVlcnktc2VhcmNoLXNvdXJjZSc7XHJcblxyXG4vKipcclxuICogTWFwIHNlYXJjaCBzb3VyY2UgZmFjdG9yeVxyXG4gKiBAaWdub3JlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlTZWFyY2hTb3VyY2VGYWN0b3J5KGNvbmZpZzogQ29uZmlnU2VydmljZSkge1xyXG4gIHJldHVybiBuZXcgUXVlcnlTZWFyY2hTb3VyY2UoXHJcbiAgICBjb25maWcuZ2V0Q29uZmlnKGBzZWFyY2hTb3VyY2VzLiR7UXVlcnlTZWFyY2hTb3VyY2UuaWR9YCkgfHwge31cclxuICApO1xyXG59XHJcblxyXG4vKipcclxuICogRnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgcHJvdmlkZXIgZm9yIHRoZSBtYXAgc2VhcmNoIHNvdXJjZVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVRdWVyeVNlYXJjaFNvdXJjZSgpIHtcclxuICByZXR1cm4ge1xyXG4gICAgcHJvdmlkZTogU2VhcmNoU291cmNlLFxyXG4gICAgdXNlRmFjdG9yeTogcXVlcnlTZWFyY2hTb3VyY2VGYWN0b3J5LFxyXG4gICAgbXVsdGk6IHRydWUsXHJcbiAgICBkZXBzOiBbQ29uZmlnU2VydmljZV1cclxuICB9O1xyXG59XHJcbiJdfQ==
|