@igo2/geo 1.13.0-alpha.1 → 1.13.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +4 -4
- 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 +2 -4
- 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 +3 -3
- 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 -2
- 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 +386 -275
- 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 +54 -26
- 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 +2 -2
- 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 +5 -5
- 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 +8 -8
- 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 +6 -6
- 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 +5 -5
- 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 +4 -4
- 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 +4 -4
- 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 +100 -70
- 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 +55 -70
- 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 -7
- 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 +11 -9
- 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 -2
- 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 +2 -2
- 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 +1 -1
- package/esm2020/lib/map/shared/hover-feature.directive.mjs +1 -1
- package/esm2020/lib/map/shared/index.mjs +2 -1
- package/esm2020/lib/map/shared/linkedLayers.utils.mjs +240 -0
- 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 +26 -37
- 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 +22 -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/geoDB.enums.mjs +1 -1
- package/esm2020/lib/offline/geoDB/geoDB.interface.mjs +1 -1
- package/esm2020/lib/offline/geoDB/geoDB.service.mjs +1 -1
- package/esm2020/lib/offline/geoDB/index.mjs +1 -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 +4 -4
- 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 +10 -6
- 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 +2 -3
- 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 +6471 -5929
- package/fesm2015/igo2-geo.mjs.map +1 -1
- package/fesm2020/igo2-geo.mjs +6042 -5523
- package/fesm2020/igo2-geo.mjs.map +1 -1
- package/lib/catalog/catalog-library/add-catalog-dialog.component.d.ts +3 -3
- package/lib/datasource/shared/datasources/datasource.interface.d.ts +2 -2
- package/lib/datasource/shared/datasources/wfs-datasource.d.ts +0 -2
- package/lib/datasource/shared/datasources/wms-datasource.d.ts +0 -1
- package/lib/datasource/shared/datasources/wms-datasource.interface.d.ts +2 -1
- package/lib/draw/draw/draw-popup.component.d.ts +0 -3
- package/lib/draw/draw/draw.component.d.ts +75 -54
- 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 +5 -1
- package/lib/feature/shared/feature.interfaces.d.ts +2 -2
- package/lib/feature/shared/store.d.ts +1 -0
- package/lib/filter/ogc-filter-selection/ogc-filter-selection.component.d.ts +3 -3
- package/lib/filter/ogc-filter-time/ogc-filter-time.component.d.ts +5 -5
- package/lib/filter/shared/ogc-filter.interface.d.ts +0 -2
- package/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.d.ts +6 -6
- package/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.d.ts +3 -3
- package/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.d.ts +2 -2
- package/lib/geometry/geometry-form-field/geometry-form-field-input.component.d.ts +3 -3
- package/lib/geometry/geometry-form-field/geometry-form-field.component.d.ts +6 -6
- package/lib/geometry/shared/controls/draw.d.ts +3 -3
- package/lib/geometry/shared/geometry.interfaces.d.ts +2 -2
- package/lib/import-export/import-export/import-export.component.d.ts +6 -4
- 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 -5
- package/lib/layer/layer.module.d.ts +20 -18
- package/lib/layer/shared/layers/layer.d.ts +0 -1
- package/lib/layer/shared/layers/layer.interface.d.ts +1 -1
- 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/layer/utils/index.d.ts +0 -1
- package/lib/map/geolocate-button/geolocate-button.component.d.ts +3 -1
- package/lib/map/shared/index.d.ts +1 -0
- package/lib/map/shared/linkedLayers.utils.d.ts +17 -0
- package/lib/map/shared/map.d.ts +8 -0
- package/lib/map/shared/map.interface.d.ts +2 -1
- package/lib/map/utils/layer-watcher.d.ts +7 -0
- package/lib/print/print-form/print-form.component.d.ts +16 -16
- package/lib/workspace/shared/edition-workspace.d.ts +2 -2
- package/ngcc.config.js +3 -3
- package/package.json +19 -19
- package/style/geo.theming.scss +12 -12
- package/esm2020/lib/layer/utils/layerSync-watcher.mjs +0 -242
- package/lib/layer/utils/layerSync-watcher.d.ts +0 -19
|
@@ -11,12 +11,15 @@ import OlCircle from 'ol/geom/Circle';
|
|
|
11
11
|
import OlPoint from 'ol/geom/Point';
|
|
12
12
|
import OlGeoJSON from 'ol/format/GeoJSON';
|
|
13
13
|
import { getDistance } from 'ol/sphere';
|
|
14
|
-
import { skip } from 'rxjs/operators';
|
|
14
|
+
import { skip, first } from 'rxjs/operators';
|
|
15
15
|
import { DrawPopupComponent } from './draw-popup.component';
|
|
16
16
|
import { DrawShorcutsComponent } from './draw-shorcuts.component';
|
|
17
17
|
import { getTooltipsOfOlGeometry } from '../../measure/shared/measure.utils';
|
|
18
18
|
import { createInteractionStyle } from '../shared/draw.utils';
|
|
19
19
|
import { transform } from 'ol/proj';
|
|
20
|
+
import { StyleModalComponent } from '../../layer/style-modal/style-modal.component';
|
|
21
|
+
import { trigger, state, style, animate, transition } from '@angular/animations';
|
|
22
|
+
import Point from 'ol/geom/Point';
|
|
20
23
|
import * as i0 from "@angular/core";
|
|
21
24
|
import * as i1 from "@igo2/core";
|
|
22
25
|
import * as i2 from "@angular/forms";
|
|
@@ -26,32 +29,42 @@ import * as i5 from "../shared/draw-icon.service";
|
|
|
26
29
|
import * as i6 from "@angular/common";
|
|
27
30
|
import * as i7 from "@angular/material/button";
|
|
28
31
|
import * as i8 from "@angular/material/button-toggle";
|
|
29
|
-
import * as i9 from "@angular/material/
|
|
30
|
-
import * as i10 from "@angular/material/
|
|
31
|
-
import * as i11 from "@angular/material/
|
|
32
|
+
import * as i9 from "@angular/material/form-field";
|
|
33
|
+
import * as i10 from "@angular/material/icon";
|
|
34
|
+
import * as i11 from "@angular/material/badge";
|
|
32
35
|
import * as i12 from "@angular/material/tooltip";
|
|
33
|
-
import * as i13 from "@angular/material/
|
|
34
|
-
import * as i14 from "@angular/material/
|
|
35
|
-
import * as i15 from "@angular/material/
|
|
36
|
-
import * as i16 from "@
|
|
37
|
-
import * as i17 from "@
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
i0.ɵɵ
|
|
42
|
-
i0.ɵɵ
|
|
36
|
+
import * as i13 from "@angular/material/select";
|
|
37
|
+
import * as i14 from "@angular/material/core";
|
|
38
|
+
import * as i15 from "@angular/material/slide-toggle";
|
|
39
|
+
import * as i16 from "@igo2/common";
|
|
40
|
+
import * as i17 from "@ngx-translate/core";
|
|
41
|
+
function DrawComponent_button_23_Template(rf, ctx) { if (rf & 1) {
|
|
42
|
+
const _r5 = i0.ɵɵgetCurrentView();
|
|
43
|
+
i0.ɵɵelementStart(0, "button", 14);
|
|
44
|
+
i0.ɵɵlistener("click", function DrawComponent_button_23_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r4 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r4.deleteDrawings()); });
|
|
45
|
+
i0.ɵɵpipe(1, "translate");
|
|
46
|
+
i0.ɵɵpipe(2, "async");
|
|
47
|
+
i0.ɵɵelement(3, "mat-icon", 15);
|
|
48
|
+
i0.ɵɵelementEnd();
|
|
49
|
+
} if (rf & 2) {
|
|
50
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
51
|
+
i0.ɵɵproperty("matTooltip", i0.ɵɵpipeBind1(1, 2, "igo.geo.draw.delete"))("disabled", i0.ɵɵpipeBind1(2, 4, ctx_r0.selectedFeatures$).length === 0);
|
|
52
|
+
} }
|
|
53
|
+
function DrawComponent_mat_form_field_28_div_6_Template(rf, ctx) { if (rf & 1) {
|
|
54
|
+
i0.ɵɵelementStart(0, "div", 19);
|
|
55
|
+
i0.ɵɵelement(1, "img", 20);
|
|
43
56
|
i0.ɵɵelementEnd();
|
|
44
57
|
} if (rf & 2) {
|
|
45
58
|
const ctx_r6 = i0.ɵɵnextContext(2);
|
|
46
59
|
i0.ɵɵadvance(1);
|
|
47
60
|
i0.ɵɵpropertyInterpolate("src", ctx_r6.icon, i0.ɵɵsanitizeUrl);
|
|
48
61
|
} }
|
|
49
|
-
function
|
|
62
|
+
function DrawComponent_mat_form_field_28_mat_option_10_Template(rf, ctx) { if (rf & 1) {
|
|
50
63
|
const _r10 = i0.ɵɵgetCurrentView();
|
|
51
|
-
i0.ɵɵelementStart(0, "mat-option",
|
|
52
|
-
i0.ɵɵlistener("click", function
|
|
53
|
-
i0.ɵɵelementStart(1, "div",
|
|
54
|
-
i0.ɵɵelement(2, "img",
|
|
64
|
+
i0.ɵɵelementStart(0, "mat-option", 21);
|
|
65
|
+
i0.ɵɵlistener("click", function DrawComponent_mat_form_field_28_mat_option_10_Template_mat_option_click_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r10); const icon_html_r8 = restoredCtx.$implicit; const ctx_r9 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r9.onIconChange(icon_html_r8)); });
|
|
66
|
+
i0.ɵɵelementStart(1, "div", 19);
|
|
67
|
+
i0.ɵɵelement(2, "img", 20);
|
|
55
68
|
i0.ɵɵelementEnd()();
|
|
56
69
|
} if (rf & 2) {
|
|
57
70
|
const icon_html_r8 = ctx.$implicit;
|
|
@@ -59,54 +72,49 @@ function DrawComponent_mat_form_field_46_mat_option_10_Template(rf, ctx) { if (r
|
|
|
59
72
|
i0.ɵɵadvance(2);
|
|
60
73
|
i0.ɵɵpropertyInterpolate("src", icon_html_r8, i0.ɵɵsanitizeUrl);
|
|
61
74
|
} }
|
|
62
|
-
function
|
|
75
|
+
function DrawComponent_mat_form_field_28_Template(rf, ctx) { if (rf & 1) {
|
|
63
76
|
const _r12 = i0.ɵɵgetCurrentView();
|
|
64
77
|
i0.ɵɵelementStart(0, "mat-form-field")(1, "mat-label");
|
|
65
78
|
i0.ɵɵtext(2);
|
|
66
79
|
i0.ɵɵpipe(3, "translate");
|
|
67
80
|
i0.ɵɵelementEnd();
|
|
68
81
|
i0.ɵɵelementStart(4, "mat-select")(5, "mat-select-trigger");
|
|
69
|
-
i0.ɵɵtemplate(6,
|
|
82
|
+
i0.ɵɵtemplate(6, DrawComponent_mat_form_field_28_div_6_Template, 2, 1, "div", 16);
|
|
70
83
|
i0.ɵɵelementEnd();
|
|
71
|
-
i0.ɵɵelementStart(7, "mat-option",
|
|
72
|
-
i0.ɵɵlistener("click", function
|
|
84
|
+
i0.ɵɵelementStart(7, "mat-option", 17);
|
|
85
|
+
i0.ɵɵlistener("click", function DrawComponent_mat_form_field_28_Template_mat_option_click_7_listener() { i0.ɵɵrestoreView(_r12); const ctx_r11 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r11.onIconChange()); });
|
|
73
86
|
i0.ɵɵtext(8);
|
|
74
87
|
i0.ɵɵpipe(9, "translate");
|
|
75
88
|
i0.ɵɵelementEnd();
|
|
76
|
-
i0.ɵɵtemplate(10,
|
|
89
|
+
i0.ɵɵtemplate(10, DrawComponent_mat_form_field_28_mat_option_10_Template, 3, 2, "mat-option", 18);
|
|
77
90
|
i0.ɵɵelementEnd()();
|
|
78
91
|
} if (rf & 2) {
|
|
79
|
-
const
|
|
92
|
+
const ctx_r2 = i0.ɵɵnextContext();
|
|
80
93
|
i0.ɵɵadvance(2);
|
|
81
94
|
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(3, 4, "igo.geo.draw.icon"));
|
|
82
95
|
i0.ɵɵadvance(4);
|
|
83
|
-
i0.ɵɵproperty("ngIf",
|
|
96
|
+
i0.ɵɵproperty("ngIf", ctx_r2.icon);
|
|
84
97
|
i0.ɵɵadvance(2);
|
|
85
98
|
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(9, 6, "igo.geo.draw.noIcon"));
|
|
86
99
|
i0.ɵɵadvance(2);
|
|
87
|
-
i0.ɵɵproperty("ngForOf",
|
|
88
|
-
} }
|
|
89
|
-
function DrawComponent_mat_option_62_Template(rf, ctx) { if (rf & 1) {
|
|
90
|
-
i0.ɵɵelementStart(0, "mat-option", 2);
|
|
91
|
-
i0.ɵɵtext(1);
|
|
92
|
-
i0.ɵɵelementEnd();
|
|
93
|
-
} if (rf & 2) {
|
|
94
|
-
const fontSelect_r13 = ctx.$implicit;
|
|
95
|
-
i0.ɵɵproperty("value", fontSelect_r13);
|
|
96
|
-
i0.ɵɵadvance(1);
|
|
97
|
-
i0.ɵɵtextInterpolate1(" ", fontSelect_r13, " ");
|
|
100
|
+
i0.ɵɵproperty("ngForOf", ctx_r2.icons);
|
|
98
101
|
} }
|
|
99
|
-
function
|
|
100
|
-
const
|
|
101
|
-
i0.ɵɵelementStart(0, "button",
|
|
102
|
-
i0.ɵɵlistener("click", function
|
|
102
|
+
function DrawComponent_button_32_Template(rf, ctx) { if (rf & 1) {
|
|
103
|
+
const _r14 = i0.ɵɵgetCurrentView();
|
|
104
|
+
i0.ɵɵelementStart(0, "button", 22);
|
|
105
|
+
i0.ɵɵlistener("click", function DrawComponent_button_32_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r14); const ctx_r13 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r13.openStyleModalDialog()); });
|
|
103
106
|
i0.ɵɵpipe(1, "translate");
|
|
104
|
-
i0.ɵɵ
|
|
105
|
-
i0.ɵɵ
|
|
107
|
+
i0.ɵɵtext(2);
|
|
108
|
+
i0.ɵɵpipe(3, "translate");
|
|
109
|
+
i0.ɵɵelement(4, "mat-icon", 23);
|
|
106
110
|
i0.ɵɵelementEnd();
|
|
107
111
|
} if (rf & 2) {
|
|
108
|
-
const
|
|
109
|
-
i0.ɵɵproperty("matTooltip", i0.ɵɵpipeBind1(1,
|
|
112
|
+
const ctx_r3 = i0.ɵɵnextContext();
|
|
113
|
+
i0.ɵɵproperty("matTooltip", i0.ɵɵpipeBind1(1, 3, "igo.geo.layer.style.styleModalTooltip"));
|
|
114
|
+
i0.ɵɵadvance(2);
|
|
115
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(3, 5, "igo.geo.layer.style.styleModal"), " ");
|
|
116
|
+
i0.ɵɵadvance(2);
|
|
117
|
+
i0.ɵɵproperty("matBadge", ctx_r3.selectedFeatures$.value.length);
|
|
110
118
|
} }
|
|
111
119
|
export class DrawComponent {
|
|
112
120
|
constructor(languageService, formBuilder, drawStyleService, dialog, drawIconService) {
|
|
@@ -124,13 +132,18 @@ export class DrawComponent {
|
|
|
124
132
|
selectMany: true,
|
|
125
133
|
selectionCheckbox: true,
|
|
126
134
|
sort: true,
|
|
127
|
-
|
|
135
|
+
fixedHeader: true,
|
|
136
|
+
tableHeight: 'auto',
|
|
137
|
+
columns: [
|
|
138
|
+
{
|
|
128
139
|
name: 'Drawing',
|
|
129
140
|
title: this.languageService.translate.instant('igo.geo.draw.labels'),
|
|
141
|
+
tooltip: this.languageService.translate.instant('igo.geo.draw.changeLabel'),
|
|
130
142
|
valueAccessor: (feature) => {
|
|
131
143
|
return feature.properties.draw;
|
|
132
144
|
}
|
|
133
|
-
}
|
|
145
|
+
}
|
|
146
|
+
]
|
|
134
147
|
};
|
|
135
148
|
this.geometryType = GeometryType; // Reference to the GeometryType enum
|
|
136
149
|
this.draw$ = new BehaviorSubject({}); // Observable of draw
|
|
@@ -181,19 +194,12 @@ export class DrawComponent {
|
|
|
181
194
|
});
|
|
182
195
|
return drawControl;
|
|
183
196
|
}
|
|
184
|
-
/**
|
|
185
|
-
* Called when the user selects a new geometry type
|
|
186
|
-
* @param geometryType the geometry type selected by the user
|
|
187
|
-
*/
|
|
188
|
-
onGeometryTypeChange(geometryType) {
|
|
189
|
-
this.drawControl.setGeometryType(geometryType);
|
|
190
|
-
this.toggleDrawControl();
|
|
191
|
-
}
|
|
192
197
|
/**
|
|
193
198
|
* Store initialization, including drawing layer creation
|
|
194
199
|
*/
|
|
195
200
|
initStore() {
|
|
196
201
|
this.map.removeLayer(this.olDrawingLayer);
|
|
202
|
+
// this.map.addLayer()
|
|
197
203
|
this.olDrawingLayer = new VectorLayer({
|
|
198
204
|
isIgoInternalLayer: true,
|
|
199
205
|
id: 'igo-draw-layer',
|
|
@@ -201,7 +207,7 @@ export class DrawComponent {
|
|
|
201
207
|
zIndex: 200,
|
|
202
208
|
source: new FeatureDataSource(),
|
|
203
209
|
style: (feature, resolution) => {
|
|
204
|
-
return this.drawStyleService.
|
|
210
|
+
return this.drawStyleService.createIndividualElementStyle(feature, resolution, this.labelsAreShown, feature.get('fontStyle'), feature.get('drawingStyle').fill, feature.get('drawingStyle').stroke, feature.get('offsetX'), feature.get('offsetY'), this.icon);
|
|
205
211
|
},
|
|
206
212
|
showInLayerList: true,
|
|
207
213
|
exportable: true,
|
|
@@ -224,6 +230,16 @@ export class DrawComponent {
|
|
|
224
230
|
const olGeometry = event.feature.getGeometry();
|
|
225
231
|
this.clearLabelsOfOlGeometry(olGeometry);
|
|
226
232
|
});
|
|
233
|
+
this.subscriptions$$.push(this.store.stateView
|
|
234
|
+
.manyBy$((record) => {
|
|
235
|
+
return record.state.selected === true;
|
|
236
|
+
})
|
|
237
|
+
.pipe(first())
|
|
238
|
+
.subscribe((records) => {
|
|
239
|
+
records.forEach((record) => {
|
|
240
|
+
record.state.selected = false;
|
|
241
|
+
});
|
|
242
|
+
}));
|
|
227
243
|
this.subscriptions$$.push(this.store.stateView
|
|
228
244
|
.manyBy$((record) => {
|
|
229
245
|
return record.state.selected === true;
|
|
@@ -234,73 +250,75 @@ export class DrawComponent {
|
|
|
234
250
|
this.selectedFeatures$.next(records.map((record) => record.entity));
|
|
235
251
|
}));
|
|
236
252
|
this.subscriptions$$.push(this.store.count$.subscribe((cnt) => {
|
|
253
|
+
if (cnt > 0) {
|
|
254
|
+
this.store.setLayerExtent();
|
|
255
|
+
}
|
|
237
256
|
cnt >= 1
|
|
238
257
|
? (this.store.layer.options.showInLayerList = true)
|
|
239
258
|
: (this.store.layer.options.showInLayerList = false);
|
|
240
259
|
}));
|
|
241
260
|
}
|
|
242
261
|
/**
|
|
243
|
-
*
|
|
244
|
-
* @param labelsAreShown wheter the labels are shown or not
|
|
245
|
-
* @param isAnIcon wheter the feature is an icon or not
|
|
262
|
+
* Open the style modal dialog box
|
|
246
263
|
*/
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
264
|
+
openStyleModalDialog() {
|
|
265
|
+
setTimeout(() => {
|
|
266
|
+
// open the dialog box used to style features
|
|
267
|
+
const dialogRef = this.dialog.open(StyleModalComponent, {
|
|
268
|
+
disableClose: false,
|
|
269
|
+
data: {
|
|
270
|
+
features: this.selectedFeatures$.getValue(),
|
|
271
|
+
icons: this.icons,
|
|
272
|
+
icon: this.icon
|
|
273
|
+
},
|
|
274
|
+
autoFocus: false
|
|
255
275
|
});
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
276
|
+
// when dialog box is closed, get label and set it to geometry
|
|
277
|
+
dialogRef.afterClosed().subscribe((data) => {
|
|
278
|
+
// checks if the user clicked ok
|
|
279
|
+
if (dialogRef.componentInstance.confirmFlag) {
|
|
280
|
+
this.onFontChange(this.labelsAreShown, data.fontSize, data.fontStyle);
|
|
281
|
+
this.onColorChange(this.labelsAreShown, this.icon ? true : false, data.fillColor, data.strokeColor);
|
|
282
|
+
this.onOffsetLabelChange(this.labelsAreShown, data.offsetX, data.offsetY);
|
|
283
|
+
}
|
|
261
284
|
});
|
|
262
|
-
}
|
|
263
|
-
this.createDrawControl();
|
|
264
|
-
}
|
|
265
|
-
/**
|
|
266
|
-
* Called when the user toggles the Draw control is toggled
|
|
267
|
-
* @internal
|
|
268
|
-
*/
|
|
269
|
-
onToggleDrawControl(toggleIsChecked) {
|
|
270
|
-
toggleIsChecked ? this.toggleDrawControl() : this.deactivateDrawControl();
|
|
271
|
-
}
|
|
272
|
-
/**
|
|
273
|
-
* Activate the correct control
|
|
274
|
-
*/
|
|
275
|
-
toggleDrawControl() {
|
|
276
|
-
this.deactivateDrawControl();
|
|
277
|
-
this.activateDrawControl();
|
|
285
|
+
}, 250);
|
|
278
286
|
}
|
|
279
287
|
/**
|
|
280
288
|
* Open a dialog box to enter label and do something
|
|
281
289
|
* @param olGeometry geometry at draw end or selected geometry
|
|
282
290
|
* @param drawEnd event fired at drawEnd?
|
|
283
291
|
*/
|
|
284
|
-
|
|
292
|
+
openDrawDialog(olGeometry, isDrawEnd) {
|
|
285
293
|
setTimeout(() => {
|
|
286
294
|
// open the dialog box used to enter label
|
|
287
295
|
const dialogRef = this.dialog.open(DrawPopupComponent, {
|
|
288
296
|
disableClose: false,
|
|
289
|
-
data: { currentLabel:
|
|
297
|
+
data: { currentLabel: olGeometry.get('draw') }
|
|
290
298
|
});
|
|
291
299
|
// when dialog box is closed, get label and set it to geometry
|
|
292
300
|
dialogRef.afterClosed().subscribe((label) => {
|
|
293
301
|
// checks if the user clicked ok
|
|
294
302
|
if (dialogRef.componentInstance.confirmFlag) {
|
|
295
|
-
this.updateLabelOfOlGeometry(
|
|
303
|
+
this.updateLabelOfOlGeometry(olGeometry, label);
|
|
304
|
+
if (!olGeometry.values_.fontStyle) {
|
|
305
|
+
this.updateFontSizeAndStyle(olGeometry, '20', FontType.Arial);
|
|
306
|
+
}
|
|
307
|
+
if (!olGeometry.values_.drawingStyle) {
|
|
308
|
+
this.updateFillAndStrokeColor(olGeometry, 'rgba(255,255,255,0.4)', 'rgba(143,7,7,1)');
|
|
309
|
+
}
|
|
310
|
+
if (!(olGeometry.values_.offsetX || olGeometry.values_.offsetY)) {
|
|
311
|
+
this.updateOffset(olGeometry, 0, olGeometry instanceof Point ? -15 : 0);
|
|
312
|
+
}
|
|
296
313
|
// if event was fired at draw end
|
|
297
314
|
if (isDrawEnd) {
|
|
298
|
-
this.onDrawEnd(
|
|
315
|
+
this.onDrawEnd(olGeometry);
|
|
299
316
|
// if event was fired at select
|
|
300
317
|
}
|
|
301
318
|
else {
|
|
302
|
-
this.onSelectDraw(
|
|
319
|
+
this.onSelectDraw(olGeometry, label);
|
|
303
320
|
}
|
|
321
|
+
this.updateHeightTable();
|
|
304
322
|
}
|
|
305
323
|
// deletes the feature
|
|
306
324
|
else {
|
|
@@ -308,7 +326,7 @@ export class DrawComponent {
|
|
|
308
326
|
.getFeatures()
|
|
309
327
|
.forEach((drawingLayerFeature) => {
|
|
310
328
|
const geometry = drawingLayerFeature.getGeometry();
|
|
311
|
-
if (
|
|
329
|
+
if (olGeometry === geometry) {
|
|
312
330
|
this.olDrawingLayerSource.removeFeature(drawingLayerFeature);
|
|
313
331
|
}
|
|
314
332
|
});
|
|
@@ -316,38 +334,6 @@ export class DrawComponent {
|
|
|
316
334
|
});
|
|
317
335
|
}, 250);
|
|
318
336
|
}
|
|
319
|
-
/**
|
|
320
|
-
* Activate a given control
|
|
321
|
-
*/
|
|
322
|
-
activateDrawControl() {
|
|
323
|
-
this.drawControlIsDisabled = false;
|
|
324
|
-
this.drawControlIsActive = true;
|
|
325
|
-
this.drawEnd$$ = this.drawControl.end$.subscribe((olGeometry) => {
|
|
326
|
-
this.openDialog(olGeometry, true);
|
|
327
|
-
});
|
|
328
|
-
this.drawControl.modify$.subscribe((olGeometry) => {
|
|
329
|
-
this.onModifyDraw(olGeometry);
|
|
330
|
-
});
|
|
331
|
-
if (!this.drawSelect$$) {
|
|
332
|
-
this.drawSelect$$ = this.drawControl.select$.subscribe((olFeature) => {
|
|
333
|
-
this.openDialog(olFeature, false);
|
|
334
|
-
});
|
|
335
|
-
}
|
|
336
|
-
this.drawControl.setOlMap(this.map.ol, true);
|
|
337
|
-
}
|
|
338
|
-
/**
|
|
339
|
-
* Deactivate the active draw control
|
|
340
|
-
*/
|
|
341
|
-
deactivateDrawControl() {
|
|
342
|
-
if (!this.drawControl) {
|
|
343
|
-
return;
|
|
344
|
-
}
|
|
345
|
-
if (this.drawEnd$$) {
|
|
346
|
-
this.drawEnd$$.unsubscribe();
|
|
347
|
-
}
|
|
348
|
-
this.drawControl.setOlMap(undefined);
|
|
349
|
-
this.drawControlIsActive = false;
|
|
350
|
-
}
|
|
351
337
|
/**
|
|
352
338
|
* Clear the draw source and track the geometry being draw
|
|
353
339
|
* @param olGeometry Ol linestring or polygon
|
|
@@ -364,6 +350,9 @@ export class DrawComponent {
|
|
|
364
350
|
const olGeometryId = olGeometry.ol_uid;
|
|
365
351
|
if (entityId === olGeometryId) {
|
|
366
352
|
this.updateLabelOfOlGeometry(olGeometry, entity.properties.draw);
|
|
353
|
+
this.updateFontSizeAndStyle(olGeometry, entity.properties.fontStyle.split(' ')[0].replace('px', ''), entity.properties.fontStyle.substring(entity.properties.fontStyle.indexOf(' ') + 1));
|
|
354
|
+
this.updateFillAndStrokeColor(olGeometry, entity.properties.drawingStyle.fill, entity.properties.drawingStyle.stroke);
|
|
355
|
+
this.updateOffset(olGeometry, entity.properties.offsetX, entity.properties.offsetY);
|
|
367
356
|
this.replaceFeatureInStore(entity, olGeometry);
|
|
368
357
|
}
|
|
369
358
|
});
|
|
@@ -376,10 +365,24 @@ export class DrawComponent {
|
|
|
376
365
|
entities.forEach((entity) => {
|
|
377
366
|
const entityCoordinates = JSON.stringify(entity.geometry.coordinates[0]);
|
|
378
367
|
if (olGeometryCoordinates === entityCoordinates) {
|
|
368
|
+
const fontSize = olFeature
|
|
369
|
+
.get('fontStyle')
|
|
370
|
+
.split(' ')[0]
|
|
371
|
+
.replace('px', '');
|
|
372
|
+
const fontStyle = olFeature
|
|
373
|
+
.get('fontStyle')
|
|
374
|
+
.substring(olFeature.get('fontStyle').indexOf(' ') + 1);
|
|
375
|
+
const fillColor = olFeature.get('drawingStyle').fill;
|
|
376
|
+
const strokeColor = olFeature.get('drawingStyle').stroke;
|
|
377
|
+
const offsetX = olFeature.get('offsetX');
|
|
378
|
+
const offsetY = olFeature.get('offsetY');
|
|
379
379
|
const rad = entity.properties.rad
|
|
380
380
|
? entity.properties.rad
|
|
381
381
|
: undefined;
|
|
382
382
|
this.updateLabelOfOlGeometry(olGeometry, label);
|
|
383
|
+
this.updateFontSizeAndStyle(olGeometry, fontSize, fontStyle);
|
|
384
|
+
this.updateFillAndStrokeColor(olGeometry, fillColor, strokeColor);
|
|
385
|
+
this.updateOffset(olGeometry, offsetX, offsetY);
|
|
383
386
|
this.replaceFeatureInStore(entity, olGeometry, rad);
|
|
384
387
|
}
|
|
385
388
|
});
|
|
@@ -435,28 +438,38 @@ export class DrawComponent {
|
|
|
435
438
|
draw: olGeometry.get('_label'),
|
|
436
439
|
longitude: lon4326 ? lon4326 : null,
|
|
437
440
|
latitude: lat4326 ? lat4326 : null,
|
|
438
|
-
rad: rad ? rad : null
|
|
441
|
+
rad: rad ? rad : null,
|
|
442
|
+
fontStyle: olGeometry.get('fontStyle_'),
|
|
443
|
+
drawingStyle: {
|
|
444
|
+
fill: olGeometry.get('fillColor_'),
|
|
445
|
+
stroke: olGeometry.get('strokeColor_')
|
|
446
|
+
},
|
|
447
|
+
offsetX: olGeometry.get('offsetX_'),
|
|
448
|
+
offsetY: olGeometry.get('offsetY_')
|
|
439
449
|
},
|
|
440
450
|
meta: {
|
|
441
451
|
id: featureId
|
|
442
452
|
}
|
|
443
453
|
});
|
|
444
454
|
}
|
|
445
|
-
/**
|
|
446
|
-
* Replace the feature in the store
|
|
447
|
-
* @param entity the entity to replace
|
|
448
|
-
* @param olGeometry the new geometry to insert in the store
|
|
449
|
-
*/
|
|
450
|
-
replaceFeatureInStore(entity, olGeometry, radius) {
|
|
451
|
-
this.store.delete(entity);
|
|
452
|
-
this.onDrawEnd(olGeometry, radius);
|
|
453
|
-
}
|
|
454
455
|
buildForm() {
|
|
455
456
|
this.form = this.formBuilder.group({
|
|
456
457
|
fill: [''],
|
|
457
458
|
stroke: ['']
|
|
458
459
|
});
|
|
459
460
|
}
|
|
461
|
+
/**
|
|
462
|
+
* Called when the user double-clicks the selected drawing
|
|
463
|
+
*/
|
|
464
|
+
editLabelDrawing() {
|
|
465
|
+
if (this.selectedFeatures$.value.length) {
|
|
466
|
+
const olGeometry = featureToOl(this.selectedFeatures$.value[0], this.map.ol.getView().getProjection().getCode());
|
|
467
|
+
this.openDrawDialog(olGeometry, false);
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
openShorcutsDialog() {
|
|
471
|
+
this.dialog.open(DrawShorcutsComponent);
|
|
472
|
+
}
|
|
460
473
|
deleteDrawings() {
|
|
461
474
|
this.store.deleteMany(this.selectedFeatures$.value);
|
|
462
475
|
this.selectedFeatures$.value.forEach((selectedFeature) => {
|
|
@@ -467,17 +480,7 @@ export class DrawComponent {
|
|
|
467
480
|
}
|
|
468
481
|
});
|
|
469
482
|
});
|
|
470
|
-
|
|
471
|
-
/**
|
|
472
|
-
* Clear the tooltips of an OL geometry
|
|
473
|
-
* @param olGeometry OL geometry with tooltips
|
|
474
|
-
*/
|
|
475
|
-
clearLabelsOfOlGeometry(olGeometry) {
|
|
476
|
-
getTooltipsOfOlGeometry(olGeometry).forEach((olTooltip) => {
|
|
477
|
-
if (olTooltip && olTooltip.getMap()) {
|
|
478
|
-
this.map.ol.removeOverlay(olTooltip);
|
|
479
|
-
}
|
|
480
|
-
});
|
|
483
|
+
this.updateHeightTable();
|
|
481
484
|
}
|
|
482
485
|
/**
|
|
483
486
|
* Called when the user toggles the labels toggle
|
|
@@ -486,9 +489,107 @@ export class DrawComponent {
|
|
|
486
489
|
this.drawStyleService.toggleLabelsAreShown();
|
|
487
490
|
this.labelsAreShown = !this.labelsAreShown;
|
|
488
491
|
this.icon
|
|
489
|
-
? this.onColorChange(this.labelsAreShown, true)
|
|
490
|
-
: this.onColorChange(this.labelsAreShown, false);
|
|
492
|
+
? this.onColorChange(this.labelsAreShown, true, this.fillColor, this.strokeColor)
|
|
493
|
+
: this.onColorChange(this.labelsAreShown, false, this.fillColor, this.strokeColor);
|
|
491
494
|
}
|
|
495
|
+
/**
|
|
496
|
+
* Called when the user toggles the Draw control is toggled
|
|
497
|
+
* @internal
|
|
498
|
+
*/
|
|
499
|
+
onToggleDrawControl(toggleIsChecked) {
|
|
500
|
+
toggleIsChecked ? this.toggleDrawControl() : this.deactivateDrawControl();
|
|
501
|
+
}
|
|
502
|
+
// User changes properties of a drawing element
|
|
503
|
+
/**
|
|
504
|
+
* Called when the user changes the color in a color picker
|
|
505
|
+
* @param labelsAreShown wheter the labels are shown or not
|
|
506
|
+
* @param isAnIcon wheter the feature is an icon or not
|
|
507
|
+
* @param fillColor which is the filling color
|
|
508
|
+
* @param strokeColor which is the stroke color
|
|
509
|
+
*/
|
|
510
|
+
onColorChange(labelsAreShown, isAnIcon, fillColor, strokeColor) {
|
|
511
|
+
if (this.selectedFeatures$.value.length > 0 && !isAnIcon) {
|
|
512
|
+
this.selectedFeatures$.value.forEach((feature) => {
|
|
513
|
+
let olFeature = featureToOl(feature, this.map.ol.getView().getProjection().getCode());
|
|
514
|
+
this.updateFillAndStrokeColor(olFeature, fillColor, strokeColor);
|
|
515
|
+
const entity = this.store
|
|
516
|
+
.all()
|
|
517
|
+
.find((e) => e.meta.id === olFeature.getId());
|
|
518
|
+
entity.properties.drawingStyle.fill = olFeature.get('fillColor_');
|
|
519
|
+
entity.properties.drawingStyle.stroke = olFeature.get('strokeColor_');
|
|
520
|
+
this.store.update(entity);
|
|
521
|
+
});
|
|
522
|
+
}
|
|
523
|
+
this.fillColor = fillColor;
|
|
524
|
+
this.strokeColor = strokeColor;
|
|
525
|
+
this.elementStyle(labelsAreShown, isAnIcon);
|
|
526
|
+
this.createDrawControl();
|
|
527
|
+
}
|
|
528
|
+
/**
|
|
529
|
+
* Called when the user changes the font size or/and style
|
|
530
|
+
* @param labelsAreShown wheter the labels are shown or not
|
|
531
|
+
* @param size the size of the font
|
|
532
|
+
* @param style the style of the font
|
|
533
|
+
*/
|
|
534
|
+
onFontChange(labelsAreShown, size, style) {
|
|
535
|
+
if (this.selectedFeatures$.value.length > 0) {
|
|
536
|
+
this.selectedFeatures$.value.forEach((feature) => {
|
|
537
|
+
let olFeature = featureToOl(feature, this.map.ol.getView().getProjection().getCode());
|
|
538
|
+
this.updateFontSizeAndStyle(olFeature, size, style);
|
|
539
|
+
const entity = this.store
|
|
540
|
+
.all()
|
|
541
|
+
.find((e) => e.meta.id === olFeature.getId());
|
|
542
|
+
entity.properties.fontStyle = olFeature.get('fontStyle_');
|
|
543
|
+
this.store.update(entity);
|
|
544
|
+
olFeature = this.store.layer.ol.getSource().getFeatures().find(f => f.getId() === entity.meta.id);
|
|
545
|
+
olFeature.setProperties({ fontStyle: entity.properties.fontStyle });
|
|
546
|
+
olFeature.changed();
|
|
547
|
+
});
|
|
548
|
+
this.fontSize = size;
|
|
549
|
+
this.fontStyle = style;
|
|
550
|
+
this.drawStyleService.setFontSize(size);
|
|
551
|
+
this.drawStyleService.setFontStyle(style);
|
|
552
|
+
this.elementStyle(labelsAreShown);
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
/**
|
|
556
|
+
* Called when the user changes the value of the horizontal/vertical offset
|
|
557
|
+
* @param labelsAreShown wheter the labels are shown or not
|
|
558
|
+
* @param offsetX horizontal offset of the label
|
|
559
|
+
* @param offsetY vertical offset of the label
|
|
560
|
+
*/
|
|
561
|
+
onOffsetLabelChange(labelsAreShown, offsetX, offsetY) {
|
|
562
|
+
if (this.selectedFeatures$.value.length > 0) {
|
|
563
|
+
this.selectedFeatures$.value.forEach((feature) => {
|
|
564
|
+
let olFeature = featureToOl(feature, this.map.ol.getView().getProjection().getCode());
|
|
565
|
+
this.updateOffset(olFeature, offsetX, offsetY);
|
|
566
|
+
const entity = this.store
|
|
567
|
+
.all()
|
|
568
|
+
.find((e) => e.meta.id === olFeature.getId());
|
|
569
|
+
entity.properties.offsetX = olFeature.get('offsetX_');
|
|
570
|
+
entity.properties.offsetY = olFeature.get('offsetY_');
|
|
571
|
+
this.store.update(entity);
|
|
572
|
+
olFeature = this.store.layer.ol.getSource().getFeatures().find(f => f.getId() === entity.meta.id);
|
|
573
|
+
olFeature.setProperties({ offsetX: entity.properties.offsetX, offsetY: entity.properties.offsetY });
|
|
574
|
+
olFeature.changed();
|
|
575
|
+
});
|
|
576
|
+
this.elementStyle(labelsAreShown);
|
|
577
|
+
}
|
|
578
|
+
}
|
|
579
|
+
onIconChange(event) {
|
|
580
|
+
this.icon = event;
|
|
581
|
+
this.drawStyleService.setIcon(this.icon);
|
|
582
|
+
this.elementStyle(true, this.icon);
|
|
583
|
+
}
|
|
584
|
+
/**
|
|
585
|
+
* Called when the user selects a new geometry type
|
|
586
|
+
* @param geometryType the geometry type selected by the user
|
|
587
|
+
*/
|
|
588
|
+
onGeometryTypeChange(geometryType) {
|
|
589
|
+
this.drawControl.setGeometryType(geometryType);
|
|
590
|
+
this.toggleDrawControl();
|
|
591
|
+
}
|
|
592
|
+
// Updates the properties of olFeature inputted
|
|
492
593
|
/**
|
|
493
594
|
* Update the label of a geometry when a label is entered in a dialog box
|
|
494
595
|
* @param olGeometry the geometry
|
|
@@ -499,44 +600,107 @@ export class DrawComponent {
|
|
|
499
600
|
_label: label
|
|
500
601
|
}, true);
|
|
501
602
|
}
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
603
|
+
updateFontSizeAndStyle(olFeature, fontSize, fontStyle) {
|
|
604
|
+
olFeature.setProperties({
|
|
605
|
+
fontStyle_: `${fontSize}px ${fontStyle}`
|
|
606
|
+
}, true);
|
|
607
|
+
}
|
|
608
|
+
updateFillAndStrokeColor(olFeature, fillColor, strokeColor) {
|
|
609
|
+
olFeature.setProperties({
|
|
610
|
+
fillColor_: fillColor,
|
|
611
|
+
strokeColor_: strokeColor
|
|
612
|
+
}, true);
|
|
613
|
+
}
|
|
614
|
+
updateOffset(olFeature, offsetX, offsetY) {
|
|
615
|
+
olFeature.setProperties({
|
|
616
|
+
offsetX_: offsetX,
|
|
617
|
+
offsetY_: offsetY
|
|
618
|
+
}, true);
|
|
619
|
+
}
|
|
620
|
+
/**
|
|
621
|
+
* Check the amount of rows as a possible alternative
|
|
622
|
+
*/
|
|
623
|
+
updateHeightTable() {
|
|
624
|
+
this.numberOfDrawings = this.store.count$.getValue();
|
|
625
|
+
this.numberOfDrawings > 10 ? this.tableTemplate.tableHeight = '35vh' : this.tableTemplate.tableHeight = 'auto';
|
|
626
|
+
}
|
|
627
|
+
/**
|
|
628
|
+
* Activate the correct control
|
|
629
|
+
*/
|
|
630
|
+
toggleDrawControl() {
|
|
631
|
+
this.deactivateDrawControl();
|
|
632
|
+
this.activateDrawControl();
|
|
633
|
+
}
|
|
634
|
+
/**
|
|
635
|
+
* Clear the tooltips of an OL geometry
|
|
636
|
+
* @param olGeometry OL geometry with tooltips
|
|
637
|
+
*/
|
|
638
|
+
clearLabelsOfOlGeometry(olGeometry) {
|
|
639
|
+
getTooltipsOfOlGeometry(olGeometry).forEach((olTooltip) => {
|
|
640
|
+
if (olTooltip && olTooltip.getMap()) {
|
|
641
|
+
this.map.ol.removeOverlay(olTooltip);
|
|
642
|
+
}
|
|
507
643
|
});
|
|
508
644
|
}
|
|
509
|
-
|
|
510
|
-
|
|
645
|
+
/**
|
|
646
|
+
* Replace the feature in the store
|
|
647
|
+
* @param entity the entity to replace
|
|
648
|
+
* @param olGeometry the new geometry to insert in the store
|
|
649
|
+
*/
|
|
650
|
+
replaceFeatureInStore(entity, olGeometry, radius) {
|
|
651
|
+
this.store.delete(entity);
|
|
652
|
+
this.onDrawEnd(olGeometry, radius);
|
|
511
653
|
}
|
|
512
654
|
/**
|
|
513
|
-
*
|
|
655
|
+
* Deactivate the active draw control
|
|
514
656
|
*/
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
657
|
+
deactivateDrawControl() {
|
|
658
|
+
if (!this.drawControl) {
|
|
659
|
+
return;
|
|
660
|
+
}
|
|
661
|
+
if (this.drawEnd$$) {
|
|
662
|
+
this.drawEnd$$.unsubscribe();
|
|
663
|
+
}
|
|
664
|
+
this.drawControl.setOlMap(undefined);
|
|
665
|
+
this.drawControlIsActive = false;
|
|
518
666
|
}
|
|
519
667
|
/**
|
|
520
|
-
*
|
|
521
|
-
* @param labelsAreShown wheter the labels are shown or not
|
|
522
|
-
* @param size the size of the font
|
|
523
|
-
* @param style the style of the font
|
|
668
|
+
* Activate a given control
|
|
524
669
|
*/
|
|
525
|
-
|
|
526
|
-
this.
|
|
527
|
-
this.
|
|
528
|
-
this.
|
|
529
|
-
|
|
670
|
+
activateDrawControl() {
|
|
671
|
+
this.drawControlIsDisabled = false;
|
|
672
|
+
this.drawControlIsActive = true;
|
|
673
|
+
this.drawEnd$$ = this.drawControl.end$.subscribe((olGeometry) => {
|
|
674
|
+
this.openDrawDialog(olGeometry, true);
|
|
530
675
|
});
|
|
531
|
-
this.
|
|
676
|
+
this.drawControl.modify$.subscribe((olGeometry) => {
|
|
677
|
+
this.onModifyDraw(olGeometry);
|
|
678
|
+
});
|
|
679
|
+
if (!this.drawSelect$$) {
|
|
680
|
+
this.drawSelect$$ = this.drawControl.select$.subscribe((olFeature) => {
|
|
681
|
+
this.openDrawDialog(olFeature, false);
|
|
682
|
+
});
|
|
683
|
+
}
|
|
684
|
+
this.drawControl.setOlMap(this.map.ol, true);
|
|
532
685
|
}
|
|
533
|
-
|
|
534
|
-
|
|
686
|
+
/**
|
|
687
|
+
* Recreates the style of the feature stored
|
|
688
|
+
*/
|
|
689
|
+
elementStyle(labelsAreShown, isAnIcon) {
|
|
690
|
+
if (isAnIcon) {
|
|
691
|
+
this.store.layer.ol.setStyle((feature, resolution) => {
|
|
692
|
+
return this.drawStyleService.createIndividualElementStyle(feature, resolution, labelsAreShown, feature.get('fontStyle'), feature.get('drawingStyle').fill, feature.get('drawingStyle').stroke, feature.get('offsetX'), feature.get('offsetY'), this.icon);
|
|
693
|
+
});
|
|
694
|
+
}
|
|
695
|
+
else {
|
|
696
|
+
this.store.layer.ol.setStyle((feature, resolution) => {
|
|
697
|
+
return this.drawStyleService.createIndividualElementStyle(feature, resolution, labelsAreShown, feature.get('fontStyle'), feature.get('drawingStyle').fill, feature.get('drawingStyle').stroke, feature.get('offsetX'), feature.get('offsetY'));
|
|
698
|
+
});
|
|
699
|
+
}
|
|
535
700
|
}
|
|
536
701
|
}
|
|
537
|
-
DrawComponent.ɵfac = function DrawComponent_Factory(t) { return new (t || DrawComponent)(i0.ɵɵdirectiveInject(i1.LanguageService), i0.ɵɵdirectiveInject(i2.
|
|
538
|
-
DrawComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: DrawComponent, selectors: [["igo-draw"]], inputs: {
|
|
539
|
-
const _r16 = i0.ɵɵgetCurrentView();
|
|
702
|
+
DrawComponent.ɵfac = function DrawComponent_Factory(t) { return new (t || DrawComponent)(i0.ɵɵdirectiveInject(i1.LanguageService), i0.ɵɵdirectiveInject(i2.UntypedFormBuilder), i0.ɵɵdirectiveInject(i3.DrawStyleService), i0.ɵɵdirectiveInject(i4.MatDialog), i0.ɵɵdirectiveInject(i5.DrawIconService)); };
|
|
703
|
+
DrawComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: DrawComponent, selectors: [["igo-draw"]], inputs: { map: "map", store: "store" }, outputs: { fillColor: "fillColor", strokeColor: "strokeColor", strokeWidth: "strokeWidth", fontSize: "fontSize", fontStyle: "fontStyle" }, decls: 33, vars: 36, consts: [[1, "geometry-type-toggle", "mat-typography"], [3, "value", "change"], [3, "value"], [1, "draw-options", "mat-typography"], [3, "disabled", "checked", "labelPosition", "change"], [3, "checked", "labelPosition", "change"], ["class", "deleteBtn", "mat-icon-button", "", "color", "warn", "tooltip-position", "below", "matTooltipShowDelay", "500", 3, "matTooltip", "disabled", "click", 4, "ngIf"], ["id", "storeElements", 1, "table-compact", 3, "store", "template", "dblclick"], ["table", ""], [1, "icon-options"], [4, "ngIf"], ["mat-icon-button", "", "color", "accent", "disableRipple", "true", 3, "click"], ["svgIcon", "keyboard-outline", "tooltip-position", "below", "matTooltipShowDelay", "500", 1, "shortcuts-icon", 3, "matTooltip"], ["mat-raised-button", "", "color", "primary", 3, "matTooltip", "click", 4, "ngIf"], ["mat-icon-button", "", "color", "warn", "tooltip-position", "below", "matTooltipShowDelay", "500", 1, "deleteBtn", 3, "matTooltip", "disabled", "click"], ["svgIcon", "delete"], ["class", "box", 4, "ngIf"], ["value", "", 3, "click"], [3, "value", "click", 4, "ngFor", "ngForOf"], [1, "box"], [3, "src"], [3, "value", "click"], ["mat-raised-button", "", "color", "primary", 3, "matTooltip", "click"], ["svgIcon", "palette", "matBadgeColor", "warn", "matBadgeSize", "medium", 1, "style-icon", 3, "matBadge"]], template: function DrawComponent_Template(rf, ctx) { if (rf & 1) {
|
|
540
704
|
i0.ɵɵelementStart(0, "div")(1, "div", 0)(2, "mat-button-toggle-group", 1);
|
|
541
705
|
i0.ɵɵlistener("change", function DrawComponent_Template_mat_button_toggle_group_change_2_listener($event) { return ctx.onGeometryTypeChange($event.value); });
|
|
542
706
|
i0.ɵɵelementStart(3, "mat-button-toggle", 2);
|
|
@@ -565,136 +729,85 @@ DrawComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: DrawComponent
|
|
|
565
729
|
i0.ɵɵtext(20);
|
|
566
730
|
i0.ɵɵpipe(21, "translate");
|
|
567
731
|
i0.ɵɵelementEnd()();
|
|
568
|
-
i0.ɵɵelementStart(22, "
|
|
569
|
-
i0.ɵɵ
|
|
570
|
-
i0.ɵɵ
|
|
571
|
-
i0.ɵɵ
|
|
572
|
-
i0.ɵɵelementEnd();
|
|
573
|
-
i0.ɵɵelementStart(28, "mat-form-field", 9);
|
|
574
|
-
i0.ɵɵpipe(29, "translate");
|
|
575
|
-
i0.ɵɵelementStart(30, "mat-label");
|
|
576
|
-
i0.ɵɵtext(31);
|
|
577
|
-
i0.ɵɵelementEnd();
|
|
578
|
-
i0.ɵɵelementStart(32, "input", 10);
|
|
579
|
-
i0.ɵɵlistener("colorPickerChange", function DrawComponent_Template_input_colorPickerChange_32_listener($event) { return ctx.fillColor = $event; })("colorPickerChange", function DrawComponent_Template_input_colorPickerChange_32_listener() { return ctx.onColorChange(ctx.labelsAreShown, false); });
|
|
580
|
-
i0.ɵɵpipe(33, "translate");
|
|
581
|
-
i0.ɵɵelementEnd()()();
|
|
582
|
-
i0.ɵɵelementStart(34, "div", 11)(35, "span");
|
|
583
|
-
i0.ɵɵelement(36, "mat-icon", 12);
|
|
584
|
-
i0.ɵɵtext(37);
|
|
585
|
-
i0.ɵɵpipe(38, "translate");
|
|
586
|
-
i0.ɵɵelementEnd();
|
|
587
|
-
i0.ɵɵelementStart(39, "mat-form-field", 13);
|
|
588
|
-
i0.ɵɵpipe(40, "translate");
|
|
589
|
-
i0.ɵɵelementStart(41, "mat-label");
|
|
590
|
-
i0.ɵɵtext(42);
|
|
591
|
-
i0.ɵɵelementEnd();
|
|
592
|
-
i0.ɵɵelementStart(43, "input", 14);
|
|
593
|
-
i0.ɵɵlistener("colorPickerChange", function DrawComponent_Template_input_colorPickerChange_43_listener($event) { return ctx.strokeColor = $event; })("colorPickerChange", function DrawComponent_Template_input_colorPickerChange_43_listener() { return ctx.onColorChange(ctx.labelsAreShown, false); });
|
|
594
|
-
i0.ɵɵpipe(44, "translate");
|
|
732
|
+
i0.ɵɵelementStart(22, "div");
|
|
733
|
+
i0.ɵɵtemplate(23, DrawComponent_button_23_Template, 4, 6, "button", 6);
|
|
734
|
+
i0.ɵɵelementStart(24, "div")(25, "igo-entity-table", 7, 8);
|
|
735
|
+
i0.ɵɵlistener("dblclick", function DrawComponent_Template_igo_entity_table_dblclick_25_listener() { return ctx.editLabelDrawing(); });
|
|
595
736
|
i0.ɵɵelementEnd()()();
|
|
596
|
-
i0.ɵɵelementStart(
|
|
597
|
-
i0.ɵɵtemplate(
|
|
598
|
-
i0.ɵɵelementEnd()();
|
|
599
|
-
i0.ɵɵelementStart(47, "div", 16)(48, "mat-form-field", 17)(49, "mat-label");
|
|
600
|
-
i0.ɵɵtext(50);
|
|
601
|
-
i0.ɵɵpipe(51, "translate");
|
|
737
|
+
i0.ɵɵelementStart(27, "div", 9);
|
|
738
|
+
i0.ɵɵtemplate(28, DrawComponent_mat_form_field_28_Template, 11, 8, "mat-form-field", 10);
|
|
602
739
|
i0.ɵɵelementEnd();
|
|
603
|
-
i0.ɵɵelementStart(
|
|
604
|
-
i0.ɵɵlistener("
|
|
740
|
+
i0.ɵɵelementStart(29, "button", 11);
|
|
741
|
+
i0.ɵɵlistener("click", function DrawComponent_Template_button_click_29_listener() { return ctx.openShorcutsDialog(); });
|
|
742
|
+
i0.ɵɵelement(30, "mat-icon", 12);
|
|
743
|
+
i0.ɵɵpipe(31, "translate");
|
|
605
744
|
i0.ɵɵelementEnd();
|
|
606
|
-
i0.ɵɵ
|
|
607
|
-
i0.ɵɵtext(55, "px");
|
|
608
|
-
i0.ɵɵelementEnd()();
|
|
609
|
-
i0.ɵɵelementStart(56, "mat-form-field", 21)(57, "mat-label");
|
|
610
|
-
i0.ɵɵtext(58);
|
|
611
|
-
i0.ɵɵpipe(59, "translate");
|
|
745
|
+
i0.ɵɵtemplate(32, DrawComponent_button_32_Template, 5, 7, "button", 13);
|
|
612
746
|
i0.ɵɵelementEnd();
|
|
613
|
-
i0.ɵɵelementStart(60, "mat-select", 22, 23);
|
|
614
|
-
i0.ɵɵlistener("selectionChange", function DrawComponent_Template_mat_select_selectionChange_60_listener($event) { i0.ɵɵrestoreView(_r16); const _r1 = i0.ɵɵreference(53); return i0.ɵɵresetView(ctx.onFontChange(ctx.labelsAreShown, _r1.value, $event.value)); });
|
|
615
|
-
i0.ɵɵtemplate(62, DrawComponent_mat_option_62_Template, 2, 2, "mat-option", 24);
|
|
616
|
-
i0.ɵɵelementEnd()()();
|
|
617
|
-
i0.ɵɵelement(63, "mat-divider");
|
|
618
|
-
i0.ɵɵelementStart(64, "div");
|
|
619
|
-
i0.ɵɵtemplate(65, DrawComponent_button_65_Template, 4, 6, "button", 25);
|
|
620
|
-
i0.ɵɵelementStart(66, "igo-entity-table", 26, 27);
|
|
621
|
-
i0.ɵɵlistener("dblclick", function DrawComponent_Template_igo_entity_table_dblclick_66_listener() { return ctx.editLabelDrawing(); });
|
|
622
|
-
i0.ɵɵelementEnd()();
|
|
623
|
-
i0.ɵɵelementStart(68, "button", 28);
|
|
624
|
-
i0.ɵɵlistener("click", function DrawComponent_Template_button_click_68_listener() { return ctx.openShorcutsDialog(); });
|
|
625
|
-
i0.ɵɵelement(69, "mat-icon", 29);
|
|
626
|
-
i0.ɵɵpipe(70, "translate");
|
|
627
|
-
i0.ɵɵelementEnd()();
|
|
628
747
|
} if (rf & 2) {
|
|
629
748
|
i0.ɵɵadvance(2);
|
|
630
749
|
i0.ɵɵproperty("value", ctx.geometryType.Point);
|
|
631
750
|
i0.ɵɵadvance(1);
|
|
632
751
|
i0.ɵɵproperty("value", ctx.geometryType.Point);
|
|
633
752
|
i0.ɵɵadvance(1);
|
|
634
|
-
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(5,
|
|
753
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(5, 22, "igo.geo.draw." + ctx.geometryType.Point), " ");
|
|
635
754
|
i0.ɵɵadvance(2);
|
|
636
755
|
i0.ɵɵproperty("value", ctx.geometryType.LineString);
|
|
637
756
|
i0.ɵɵadvance(1);
|
|
638
|
-
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(8,
|
|
757
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(8, 24, "igo.geo.draw." + ctx.geometryType.LineString), " ");
|
|
639
758
|
i0.ɵɵadvance(2);
|
|
640
759
|
i0.ɵɵproperty("value", ctx.geometryType.Polygon);
|
|
641
760
|
i0.ɵɵadvance(1);
|
|
642
|
-
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(11,
|
|
761
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(11, 26, "igo.geo.draw." + ctx.geometryType.Polygon), " ");
|
|
643
762
|
i0.ɵɵadvance(2);
|
|
644
763
|
i0.ɵɵproperty("value", ctx.geometryType.Circle);
|
|
645
764
|
i0.ɵɵadvance(1);
|
|
646
|
-
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(14,
|
|
765
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(14, 28, "igo.geo.draw." + ctx.geometryType.Circle), " ");
|
|
647
766
|
i0.ɵɵadvance(3);
|
|
648
767
|
i0.ɵɵproperty("disabled", ctx.drawControlIsDisabled)("checked", ctx.drawControlIsActive)("labelPosition", "before");
|
|
649
768
|
i0.ɵɵadvance(1);
|
|
650
|
-
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(18,
|
|
769
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(18, 30, "igo.geo.spatialFilter.drawControl"), " ");
|
|
651
770
|
i0.ɵɵadvance(2);
|
|
652
771
|
i0.ɵɵproperty("checked", ctx.labelsAreShown)("labelPosition", "before");
|
|
653
772
|
i0.ɵɵadvance(1);
|
|
654
|
-
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(21,
|
|
655
|
-
i0.ɵɵadvance(2);
|
|
656
|
-
i0.ɵɵproperty("formGroup", ctx.form);
|
|
657
|
-
i0.ɵɵadvance(4);
|
|
658
|
-
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(27, 69, "igo.geo.draw.fill"), " ");
|
|
659
|
-
i0.ɵɵadvance(2);
|
|
660
|
-
i0.ɵɵproperty("matTooltip", i0.ɵɵpipeBind1(29, 71, "igo.geo.draw.colorPicker"));
|
|
773
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(21, 32, "igo.geo.draw.toggleMapTooltips"), " ");
|
|
661
774
|
i0.ɵɵadvance(3);
|
|
662
|
-
i0.ɵɵ
|
|
663
|
-
i0.ɵɵadvance(1);
|
|
664
|
-
i0.ɵɵstyleProp("background", ctx.fillColor);
|
|
665
|
-
i0.ɵɵproperty("colorPicker", ctx.fillColor)("readonly", true)("colorPicker", ctx.fillColor)("cpWidth", "200px")("cpOutputFormat", "rgba")("cpPosition", "bottom")("cpPositionOffset", "-75%")("cpCancelButton", true)("cpCancelButtonText", i0.ɵɵpipeBind1(33, 73, "igo.geo.draw.cancel"))("cpOKButton", true);
|
|
666
|
-
i0.ɵɵadvance(5);
|
|
667
|
-
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(38, 75, "igo.geo.draw.stroke"), " ");
|
|
775
|
+
i0.ɵɵproperty("ngIf", ctx.store.count$.getValue() > 0);
|
|
668
776
|
i0.ɵɵadvance(2);
|
|
669
|
-
i0.ɵɵproperty("
|
|
670
|
-
i0.ɵɵadvance(3);
|
|
671
|
-
i0.ɵɵtextInterpolate(ctx.strokeColor);
|
|
672
|
-
i0.ɵɵadvance(1);
|
|
673
|
-
i0.ɵɵstyleProp("background", ctx.strokeColor);
|
|
674
|
-
i0.ɵɵproperty("colorPicker", ctx.strokeColor)("readonly", true)("colorPicker", ctx.strokeColor)("cpWidth", "200px")("cpPosition", "bottom")("cpPositionOffset", "-75%")("cpOutputFormat", "rgba")("cpCancelButton", true)("cpCancelButtonText", i0.ɵɵpipeBind1(44, 79, "igo.geo.draw.cancel"))("cpOKButton", true);
|
|
777
|
+
i0.ɵɵproperty("store", ctx.store)("template", ctx.tableTemplate);
|
|
675
778
|
i0.ɵɵadvance(3);
|
|
676
779
|
i0.ɵɵproperty("ngIf", ctx.icons.length >= 1);
|
|
677
|
-
i0.ɵɵadvance(4);
|
|
678
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(51, 81, "igo.geo.draw.fontSize"));
|
|
679
|
-
i0.ɵɵadvance(2);
|
|
680
|
-
i0.ɵɵproperty("value", ctx.fontSize);
|
|
681
|
-
i0.ɵɵadvance(6);
|
|
682
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(59, 83, "igo.geo.draw.fontStyle"));
|
|
683
780
|
i0.ɵɵadvance(2);
|
|
684
|
-
i0.ɵɵproperty("
|
|
781
|
+
i0.ɵɵproperty("matTooltip", i0.ɵɵpipeBind1(31, 34, "igo.geo.draw.shortcuts"));
|
|
685
782
|
i0.ɵɵadvance(2);
|
|
686
|
-
i0.ɵɵproperty("
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
783
|
+
i0.ɵɵproperty("ngIf", ctx.selectedFeatures$.value.length);
|
|
784
|
+
} }, dependencies: [i6.NgForOf, i6.NgIf, i7.MatButton, i8.MatButtonToggleGroup, i8.MatButtonToggle, i9.MatFormField, i9.MatLabel, i10.MatIcon, i11.MatBadge, i12.MatTooltip, i13.MatSelect, i13.MatSelectTrigger, i14.MatOption, i15.MatSlideToggle, i16.EntityTableComponent, i6.AsyncPipe, i17.TranslatePipe], styles: [".geometry-type-toggle[_ngcontent-%COMP%]{padding:10px;text-align:center}.geometry-type-toggle[_ngcontent-%COMP%] mat-button-toggle-group[_ngcontent-%COMP%]{width:100%}.geometry-type-toggle[_ngcontent-%COMP%] mat-button-toggle-group[_ngcontent-%COMP%] mat-button-toggle[_ngcontent-%COMP%]{width:25%}.draw-options[_ngcontent-%COMP%]{overflow-x:hidden}.draw-options[_ngcontent-%COMP%] mat-slide-toggle[_ngcontent-%COMP%]{width:100%;margin:10px}.draw-options[_ngcontent-%COMP%] mat-slide-toggle[_ngcontent-%COMP%] .mat-slide-toggle-content{width:calc(100% - 60px)}.icon-options[_ngcontent-%COMP%]{margin:5px 5px 0}.deleteBtn[_ngcontent-%COMP%]{margin-left:12px}img[_ngcontent-%COMP%]{width:100%;height:100%}.box[_ngcontent-%COMP%]{width:25px;height:25px}"], data: { animation: [
|
|
785
|
+
trigger('openClose', [
|
|
786
|
+
state('open', style({
|
|
787
|
+
opacity: 1
|
|
788
|
+
})),
|
|
789
|
+
state('closed', style({
|
|
790
|
+
opacity: 0
|
|
791
|
+
})),
|
|
792
|
+
transition('open => closed', [animate('600ms ease')]),
|
|
793
|
+
transition('closed => open', [animate('800ms ease')])
|
|
794
|
+
])
|
|
795
|
+
] }, changeDetection: 0 });
|
|
694
796
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DrawComponent, [{
|
|
695
797
|
type: Component,
|
|
696
|
-
args: [{ selector: 'igo-draw',
|
|
697
|
-
|
|
798
|
+
args: [{ selector: 'igo-draw', animations: [
|
|
799
|
+
trigger('openClose', [
|
|
800
|
+
state('open', style({
|
|
801
|
+
opacity: 1
|
|
802
|
+
})),
|
|
803
|
+
state('closed', style({
|
|
804
|
+
opacity: 0
|
|
805
|
+
})),
|
|
806
|
+
transition('open => closed', [animate('600ms ease')]),
|
|
807
|
+
transition('closed => open', [animate('800ms ease')])
|
|
808
|
+
])
|
|
809
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div>\n <div class=\"geometry-type-toggle mat-typography\">\n <mat-button-toggle-group\n (change)=\"onGeometryTypeChange($event.value)\" [value]=\"geometryType.Point\">\n <mat-button-toggle [value]=\"geometryType.Point\">\n {{'igo.geo.draw.' + geometryType.Point | translate}}\n </mat-button-toggle>\n\n <mat-button-toggle [value]=\"geometryType.LineString\">\n {{'igo.geo.draw.' + geometryType.LineString | translate}}\n </mat-button-toggle>\n\n <mat-button-toggle [value]=\"geometryType.Polygon\">\n {{'igo.geo.draw.' + geometryType.Polygon | translate}}\n </mat-button-toggle>\n\n <mat-button-toggle [value]=\"geometryType.Circle\">\n {{'igo.geo.draw.' + geometryType.Circle | translate}}\n </mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n\n <div class=\"draw-options mat-typography\">\n <mat-slide-toggle\n [disabled]=\"drawControlIsDisabled\"\n [checked]=\"drawControlIsActive\"\n [labelPosition]=\"'before'\"\n (change)=\"onToggleDrawControl($event.checked)\">\n {{'igo.geo.spatialFilter.drawControl' | translate}}\n </mat-slide-toggle>\n\n <mat-slide-toggle\n [checked]=\"labelsAreShown\"\n [labelPosition]=\"'before'\"\n (change)=\"onToggleLabels()\">\n {{'igo.geo.draw.toggleMapTooltips' | translate}}\n </mat-slide-toggle>\n </div>\n\n <div>\n <button *ngIf=\"store.count$.getValue() > 0\"\n class=\"deleteBtn\"\n mat-icon-button\n color=\"warn\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.draw.delete' | translate\"\n [disabled]=\"(selectedFeatures$ | async).length === 0\"\n (click)=\"deleteDrawings()\">\n <mat-icon svgIcon=\"delete\"></mat-icon>\n </button>\n\n <div>\n <igo-entity-table\n #table\n class=\"table-compact\"\n id=\"storeElements\"\n [store]=\"store\"\n [template]=\"tableTemplate\"\n (dblclick)=\"editLabelDrawing()\">\n </igo-entity-table>\n </div>\n </div>\n\n <div class=\"icon-options\">\n <mat-form-field *ngIf=\"icons.length >= 1\">\n <mat-label>{{ 'igo.geo.draw.icon' | translate }}</mat-label>\n <mat-select>\n <mat-select-trigger>\n <div *ngIf=\"icon\" class=\"box\">\n <img src=\"{{ icon }}\">\n </div>\n </mat-select-trigger>\n <mat-option value=\"\" (click)=\"onIconChange()\">{{ 'igo.geo.draw.noIcon' | translate }}</mat-option>\n <mat-option\n *ngFor=\"let icon_html of icons\"\n [value]=\"icon_html\"\n (click)=\"onIconChange(icon_html)\">\n <div class=\"box\">\n <img src=\"{{ icon_html }}\">\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <button\n mat-icon-button\n color=\"accent\"\n disableRipple=\"true\"\n (click)=\"openShorcutsDialog()\">\n <mat-icon\n class=\"shortcuts-icon\"\n svgIcon=\"keyboard-outline\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.draw.shortcuts' | translate\">\n </mat-icon>\n </button>\n\n <button\n *ngIf=\"selectedFeatures$.value.length\"\n mat-raised-button\n color=\"primary\"\n (click)=\"openStyleModalDialog()\"\n [matTooltip]=\"'igo.geo.layer.style.styleModalTooltip' | translate\">\n {{'igo.geo.layer.style.styleModal' | translate}}\n <mat-icon\n class=\"style-icon\"\n svgIcon=\"palette\"\n [matBadge]=\"selectedFeatures$.value.length\"\n matBadgeColor=\"warn\"\n matBadgeSize=\"medium\">\n </mat-icon>\n </button>\n</div>\n", styles: [".geometry-type-toggle{padding:10px;text-align:center}.geometry-type-toggle mat-button-toggle-group{width:100%}.geometry-type-toggle mat-button-toggle-group mat-button-toggle{width:25%}.draw-options{overflow-x:hidden}.draw-options mat-slide-toggle{width:100%;margin:10px}.draw-options mat-slide-toggle ::ng-deep .mat-slide-toggle-content{width:calc(100% - 60px)}.icon-options{margin:5px 5px 0}.deleteBtn{margin-left:12px}img{width:100%;height:100%}.box{width:25px;height:25px}\n"] }]
|
|
810
|
+
}], function () { return [{ type: i1.LanguageService }, { type: i2.UntypedFormBuilder }, { type: i3.DrawStyleService }, { type: i4.MatDialog }, { type: i5.DrawIconService }]; }, { fillColor: [{
|
|
698
811
|
type: Output
|
|
699
812
|
}], strokeColor: [{
|
|
700
813
|
type: Output
|
|
@@ -704,11 +817,9 @@ DrawComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: DrawComponent
|
|
|
704
817
|
type: Output
|
|
705
818
|
}], fontStyle: [{
|
|
706
819
|
type: Output
|
|
707
|
-
}], fontType: [{
|
|
708
|
-
type: Input
|
|
709
820
|
}], map: [{
|
|
710
821
|
type: Input
|
|
711
822
|
}], store: [{
|
|
712
823
|
type: Input
|
|
713
824
|
}] }); })();
|
|
714
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhdy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9kcmF3L2RyYXcvZHJhdy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9kcmF3L2RyYXcvZHJhdy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFHTCx1QkFBdUIsRUFDdkIsTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFDTCxPQUFPLEVBRVAsNkJBQTZCLEVBQzdCLGlCQUFpQixFQUNqQixxQkFBcUIsRUFDckIsdUJBQXVCLEVBQ3ZCLGFBQWEsRUFDYiwyQkFBMkIsRUFDM0IsV0FBVyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBSXZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFN0QsT0FBTyxFQUFFLGVBQWUsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFJckQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQzNGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUdsRSxPQUFPLEtBQUssT0FBTyxNQUFNLFVBQVUsQ0FBQztBQUNwQyxPQUFPLGNBQWMsTUFBTSxrQkFBa0IsQ0FBQztBQUM5QyxPQUFPLFFBQVEsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0QyxPQUFPLE9BQU8sTUFBTSxlQUFlLENBQUM7QUFFcEMsT0FBTyxTQUFTLE1BQU0sbUJBQW1CLENBQUM7QUFJMUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUV4QyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdC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QUEsd0JBQUEscUVBQUEsb0JBQUE7UUFrQjdCLGVBQ0Y7UUFERSw4RUFDRjtRQVFFLGVBQXFEO1FBQXJELCtFQUFxRDtRQUMxQyxlQUFpQjtRQUFqQixxQ0FBaUI7UUFNMUIsZUFBZ0M7UUFBaEMsNkNBQWdDO1FBRGhDLDZDQUE2QixrQkFBQSxnQ0FBQSxvQkFBQSx3QkFBQSw0QkFBQSwwQkFBQSx3QkFBQSxxRUFBQSxvQkFBQTtRQWdCaEIsZUFBdUI7UUFBdkIsNENBQXVCO1FBeUI3QixlQUF5QztRQUF6QyxxRUFBeUM7UUFRbEQsZUFBa0I7UUFBbEIsb0NBQWtCO1FBV1QsZUFBMEM7UUFBMUMsc0VBQTBDO1FBR25ELGVBQW1CO1FBQW5CLHFDQUFtQjtRQUdNLGVBQWdCO1FBQWhCLDJDQUFnQjtRQVcxQyxlQUFpQztRQUFqQyxzREFBaUM7UUFlbEMsZUFBZTtRQUFmLGlDQUFlLCtCQUFBO1FBZ0JmLGVBQW1EO1FBQW5ELDZFQUFtRDs7dUZEN0k1QyxhQUFhO2NBTnpCLFNBQVM7MkJBQ0UsVUFBVSxtQkFHSCx1QkFBdUIsQ0FBQyxNQUFNO2lMQXVCckMsU0FBUztrQkFBbEIsTUFBTTtZQUNHLFdBQVc7a0JBQXBCLE1BQU07WUFDRyxXQUFXO2tCQUFwQixNQUFNO1lBRUcsUUFBUTtrQkFBakIsTUFBTTtZQUNHLFNBQVM7a0JBQWxCLE1BQU07WUFDRSxRQUFRO2tCQUFoQixLQUFLO1lBRUcsR0FBRztrQkFBWCxLQUFLO1lBRUcsS0FBSztrQkFBYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE9uRGVzdHJveSxcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBPdXRwdXRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7XHJcbiAgRkVBVFVSRSxcclxuICBGZWF0dXJlU3RvcmUsXHJcbiAgRmVhdHVyZVN0b3JlU2VsZWN0aW9uU3RyYXRlZ3ksXHJcbiAgdHJ5QmluZFN0b3JlTGF5ZXIsXHJcbiAgdHJ5QWRkTG9hZGluZ1N0cmF0ZWd5LFxyXG4gIHRyeUFkZFNlbGVjdGlvblN0cmF0ZWd5LFxyXG4gIEZlYXR1cmVNb3Rpb24sXHJcbiAgRmVhdHVyZVN0b3JlTG9hZGluZ1N0cmF0ZWd5LFxyXG4gIGZlYXR1cmVUb09sXHJcbn0gZnJvbSAnLi4vLi4vZmVhdHVyZSc7XHJcblxyXG5pbXBvcnQgeyBMYW5ndWFnZVNlcnZpY2UgfSBmcm9tICdAaWdvMi9jb3JlJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgRm9udFR5cGUsIEdlb21ldHJ5VHlwZSB9IGZyb20gJy4uL3NoYXJlZC9kcmF3LmVudW0nO1xyXG5pbXBvcnQgeyBJZ29NYXAgfSBmcm9tICcuLi8uLi9tYXAvc2hhcmVkL21hcCc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IERyYXcsIEZlYXR1cmVXaXRoRHJhdyB9IGZyb20gJy4uL3NoYXJlZC9kcmF3LmludGVyZmFjZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUJ1aWxkZXIgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFZlY3RvclNvdXJjZUV2ZW50IGFzIE9sVmVjdG9yU291cmNlRXZlbnQgfSBmcm9tICdvbC9zb3VyY2UvVmVjdG9yJztcclxuaW1wb3J0IHsgVmVjdG9yTGF5ZXIgfSBmcm9tICcuLi8uLi9sYXllci9zaGFyZWQvbGF5ZXJzL3ZlY3Rvci1sYXllcic7XHJcbmltcG9ydCB7IEZlYXR1cmVEYXRhU291cmNlIH0gZnJvbSAnLi4vLi4vZGF0YXNvdXJjZS9zaGFyZWQvZGF0YXNvdXJjZXMvZmVhdHVyZS1kYXRhc291cmNlJztcclxuaW1wb3J0IHsgRHJhd0NvbnRyb2wgfSBmcm9tICcuLi8uLi9nZW9tZXRyeS9zaGFyZWQvY29udHJvbHMvZHJhdyc7XHJcbmltcG9ydCB7IEVudGl0eVJlY29yZCwgRW50aXR5VGFibGVUZW1wbGF0ZSB9IGZyb20gJ0BpZ28yL2NvbW1vbic7XHJcblxyXG5pbXBvcnQgKiBhcyBPbFN0eWxlIGZyb20gJ29sL3N0eWxlJztcclxuaW1wb3J0IE9sVmVjdG9yU291cmNlIGZyb20gJ29sL3NvdXJjZS9WZWN0b3InO1xyXG5pbXBvcnQgT2xDaXJjbGUgZnJvbSAnb2wvZ2VvbS9DaXJjbGUnO1xyXG5pbXBvcnQgT2xQb2ludCBmcm9tICdvbC9nZW9tL1BvaW50JztcclxuaW1wb3J0IE9sRmVhdHVyZSBmcm9tICdvbC9GZWF0dXJlJztcclxuaW1wb3J0IE9sR2VvSlNPTiBmcm9tICdvbC9mb3JtYXQvR2VvSlNPTic7XHJcbmltcG9ydCBPbE92ZXJsYXkgZnJvbSAnb2wvT3ZlcmxheSc7XHJcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBPbEdlb21ldHJ5VHlwZSB9IGZyb20gJ29sL2dlb20vR2VvbWV0cnlUeXBlJztcclxuaW1wb3J0IHsgZGVmYXVsdCBhcyBPbEdlb21ldHJ5IH0gZnJvbSAnb2wvZ2VvbS9HZW9tZXRyeSc7XHJcbmltcG9ydCB7IGdldERpc3RhbmNlIH0gZnJvbSAnb2wvc3BoZXJlJztcclxuaW1wb3J0IHsgRHJhd1N0eWxlU2VydmljZSB9IGZyb20gJy4uL3NoYXJlZC9kcmF3LXN0eWxlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBza2lwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBEcmF3UG9wdXBDb21wb25lbnQgfSBmcm9tICcuL2RyYXctcG9wdXAuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRHJhd1Nob3JjdXRzQ29tcG9uZW50IH0gZnJvbSAnLi9kcmF3LXNob3JjdXRzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IGdldFRvb2x0aXBzT2ZPbEdlb21ldHJ5IH0gZnJvbSAnLi4vLi4vbWVhc3VyZS9zaGFyZWQvbWVhc3VyZS51dGlscyc7XHJcbmltcG9ydCB7IGNyZWF0ZUludGVyYWN0aW9uU3R5bGUgfSBmcm9tICcuLi9zaGFyZWQvZHJhdy51dGlscyc7XHJcbmltcG9ydCB7IHRyYW5zZm9ybSB9IGZyb20gJ29sL3Byb2onO1xyXG5pbXBvcnQgeyBEcmF3SWNvblNlcnZpY2UgfSBmcm9tICcuLi9zaGFyZWQvZHJhdy1pY29uLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpZ28tZHJhdycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2RyYXcuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2RyYXcuY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRHJhd0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAvKipcclxuICAgKiBUYWJsZSB0ZW1wbGF0ZVxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIHB1YmxpYyB0YWJsZVRlbXBsYXRlOiBFbnRpdHlUYWJsZVRlbXBsYXRlID0ge1xyXG4gICAgc2VsZWN0aW9uOiB0cnVlLFxyXG4gICAgc2VsZWN0TWFueTogdHJ1ZSxcclxuICAgIHNlbGVjdGlvbkNoZWNrYm94OiB0cnVlLFxyXG4gICAgc29ydDogdHJ1ZSxcclxuICAgIGNvbHVtbnM6IFt7XHJcbiAgICAgICAgbmFtZTogJ0RyYXdpbmcnLFxyXG4gICAgICAgIHRpdGxlOiB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5kcmF3LmxhYmVscycpLFxyXG4gICAgICAgIHZhbHVlQWNjZXNzb3I6IChmZWF0dXJlOiBGZWF0dXJlV2l0aERyYXcpID0+IHtcclxuICAgICAgICAgIHJldHVybiBmZWF0dXJlLnByb3BlcnRpZXMuZHJhdztcclxuICAgICAgICB9XHJcbiAgICAgIH1dXHJcbiAgfTtcclxuXHJcbiAgcHVibGljIGdlb21ldHJ5VHlwZSA9IEdlb21ldHJ5VHlwZTsgLy8gUmVmZXJlbmNlIHRvIHRoZSBHZW9tZXRyeVR5cGUgZW51bVxyXG5cclxuICBAT3V0cHV0KCkgZmlsbENvbG9yOiBzdHJpbmc7XHJcbiAgQE91dHB1dCgpIHN0cm9rZUNvbG9yOiBzdHJpbmc7XHJcbiAgQE91dHB1dCgpIHN0cm9rZVdpZHRoOiBudW1iZXI7XHJcblxyXG4gIEBPdXRwdXQoKSBmb250U2l6ZTogc3RyaW5nO1xyXG4gIEBPdXRwdXQoKSBmb250U3R5bGU6IHN0cmluZztcclxuICBASW5wdXQoKSBmb250VHlwZTogRm9udFR5cGU7XHJcblxyXG4gIEBJbnB1dCgpIG1hcDogSWdvTWFwOyAvLyBNYXAgdG8gZHJhdyBvblxyXG5cclxuICBASW5wdXQoKSBzdG9yZTogRmVhdHVyZVN0b3JlPEZlYXR1cmVXaXRoRHJhdz47IC8vIERyYXdpbmcgc3RvcmVcclxuXHJcbiAgcHVibGljIGRyYXckOiBCZWhhdmlvclN1YmplY3Q8RHJhdz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHt9KTsgLy8gT2JzZXJ2YWJsZSBvZiBkcmF3XHJcblxyXG4gIHByaXZhdGUgb2xEcmF3aW5nTGF5ZXJTb3VyY2UgPSBuZXcgT2xWZWN0b3JTb3VyY2UoKTtcclxuICBwcml2YXRlIGRyYXdDb250cm9sOiBEcmF3Q29udHJvbDtcclxuICBwcml2YXRlIGRyYXdFbmQkJDogU3Vic2NyaXB0aW9uO1xyXG4gIHByaXZhdGUgZHJhd1NlbGVjdCQkOiBTdWJzY3JpcHRpb247XHJcbiAgcHJpdmF0ZSBvbERyYXdpbmdMYXllcjogVmVjdG9yTGF5ZXI7XHJcbiAgcHVibGljIHNlbGVjdGVkRmVhdHVyZXMkOiBCZWhhdmlvclN1YmplY3Q8RmVhdHVyZVdpdGhEcmF3W10+ID1cclxuICAgIG5ldyBCZWhhdmlvclN1YmplY3QoW10pO1xyXG4gIHB1YmxpYyBmaWxsRm9ybTogc3RyaW5nO1xyXG4gIHB1YmxpYyBzdHJva2VGb3JtOiBzdHJpbmc7XHJcbiAgcHVibGljIGRyYXdDb250cm9sSXNEaXNhYmxlZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHVibGljIGRyYXdDb250cm9sSXNBY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgbGFiZWxzQXJlU2hvd246IGJvb2xlYW47XHJcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zJCQ6IFN1YnNjcmlwdGlvbltdID0gW107XHJcblxyXG4gIHB1YmxpYyBmb250U2l6ZUZvcm06IHN0cmluZztcclxuICBwdWJsaWMgZm9udFN0eWxlRm9ybTogc3RyaW5nO1xyXG4gIHB1YmxpYyBwb3NpdGlvbjogc3RyaW5nID0gJ2JvdHRvbSc7XHJcbiAgcHVibGljIGZvcm06IEZvcm1Hcm91cDtcclxuICBwdWJsaWMgaWNvbnM6IEFycmF5PHN0cmluZz47XHJcbiAgcHVibGljIGljb246IHN0cmluZztcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGxhbmd1YWdlU2VydmljZTogTGFuZ3VhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIGRyYXdTdHlsZVNlcnZpY2U6IERyYXdTdHlsZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgcHJpdmF0ZSBkcmF3SWNvblNlcnZpY2U6IERyYXdJY29uU2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy5idWlsZEZvcm0oKTtcclxuICAgIHRoaXMuZmlsbENvbG9yID0gdGhpcy5kcmF3U3R5bGVTZXJ2aWNlLmdldEZpbGxDb2xvcigpO1xyXG4gICAgdGhpcy5zdHJva2VDb2xvciA9IHRoaXMuZHJhd1N0eWxlU2VydmljZS5nZXRTdHJva2VDb2xvcigpO1xyXG4gICAgdGhpcy5zdHJva2VXaWR0aCA9IHRoaXMuZHJhd1N0eWxlU2VydmljZS5nZXRTdHJva2VXaWR0aCgpO1xyXG4gICAgdGhpcy5sYWJlbHNBcmVTaG93biA9IHRoaXMuZHJhd1N0eWxlU2VydmljZS5nZXRMYWJlbHNBcmVTaG93bigpO1xyXG4gICAgdGhpcy5pY29ucyA9IHRoaXMuZHJhd0ljb25TZXJ2aWNlLmdldEljb25zKCk7XHJcbiAgICB0aGlzLmljb24gPSB0aGlzLmRyYXdTdHlsZVNlcnZpY2UuZ2V0SWNvbigpO1xyXG5cclxuICAgIHRoaXMuZm9udFNpemUgPSB0aGlzLmRyYXdTdHlsZVNlcnZpY2UuZ2V0Rm9udFNpemUoKTtcclxuICAgIHRoaXMuZm9udFN0eWxlID0gdGhpcy5kcmF3U3R5bGVTZXJ2aWNlLmdldEZvbnRTdHlsZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8gSW5pdGlhbGl6ZSB0aGUgc3RvcmUgdGhhdCB3aWxsIGNvbnRhaW4gdGhlIGVudGl0aWVzIGFuZCBjcmVhdGUgdGhlIERyYXcgY29udHJvbFxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5pbml0U3RvcmUoKTtcclxuICAgIHRoaXMuZHJhd0NvbnRyb2wgPSB0aGlzLmNyZWF0ZURyYXdDb250cm9sKFxyXG4gICAgICB0aGlzLmZpbGxDb2xvcixcclxuICAgICAgdGhpcy5zdHJva2VDb2xvcixcclxuICAgICAgdGhpcy5zdHJva2VXaWR0aFxyXG4gICAgKTtcclxuICAgIHRoaXMuZHJhd0NvbnRyb2wuc2V0R2VvbWV0cnlUeXBlKHRoaXMuZ2VvbWV0cnlUeXBlLlBvaW50IGFzIGFueSk7XHJcbiAgICB0aGlzLnRvZ2dsZURyYXdDb250cm9sKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZW1vdmUgdGhlIGRyYXdpbmcgbGF5ZXIgYW5kIHRoZSBpbnRlcmFjdGlvbnNcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuZHJhd0NvbnRyb2wuc2V0T2xNYXAodW5kZWZpbmVkKTtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucyQkLm1hcCgocykgPT4gcy51bnN1YnNjcmliZSgpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBhIERyYXcgQ29udHJvbFxyXG4gICAqIEBwYXJhbSBmaWxsQ29sb3IgdGhlIGZpbGwgY29sb3JcclxuICAgKiBAcGFyYW0gc3Ryb2tlQ29sb3IgdGhlIHN0cm9rZSBjb2xvclxyXG4gICAqIEBwYXJhbSBzdHJva2VXaWR0aCB0aGUgc3Ryb2tlIHdpZHRoXHJcbiAgICogQHJldHVybnMgYSBEcmF3IENvbnRyb2xcclxuICAgKi9cclxuICBjcmVhdGVEcmF3Q29udHJvbChcclxuICAgIGZpbGxDb2xvcj86IHN0cmluZyxcclxuICAgIHN0cm9rZUNvbG9yPzogc3RyaW5nLFxyXG4gICAgc3Ryb2tlV2lkdGg/OiBudW1iZXJcclxuICApIHtcclxuICAgIGNvbnN0IGRyYXdDb250cm9sID0gbmV3IERyYXdDb250cm9sKHtcclxuICAgICAgZ2VvbWV0cnlUeXBlOiB1bmRlZmluZWQsXHJcbiAgICAgIGRyYXdpbmdMYXllclNvdXJjZTogdGhpcy5vbERyYXdpbmdMYXllclNvdXJjZSxcclxuICAgICAgZHJhd2luZ0xheWVyU3R5bGU6IG5ldyBPbFN0eWxlLlN0eWxlKHt9KSxcclxuICAgICAgaW50ZXJhY3Rpb25TdHlsZTogY3JlYXRlSW50ZXJhY3Rpb25TdHlsZShcclxuICAgICAgICBmaWxsQ29sb3IsXHJcbiAgICAgICAgc3Ryb2tlQ29sb3IsXHJcbiAgICAgICAgc3Ryb2tlV2lkdGhcclxuICAgICAgKVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZHJhd0NvbnRyb2w7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDYWxsZWQgd2hlbiB0aGUgdXNlciBzZWxlY3RzIGEgbmV3IGdlb21ldHJ5IHR5cGVcclxuICAgKiBAcGFyYW0gZ2VvbWV0cnlUeXBlIHRoZSBnZW9tZXRyeSB0eXBlIHNlbGVjdGVkIGJ5IHRoZSB1c2VyXHJcbiAgICovXHJcbiAgb25HZW9tZXRyeVR5cGVDaGFuZ2UoZ2VvbWV0cnlUeXBlOiB0eXBlb2YgT2xHZW9tZXRyeVR5cGUpIHtcclxuICAgIHRoaXMuZHJhd0NvbnRyb2wuc2V0R2VvbWV0cnlUeXBlKGdlb21ldHJ5VHlwZSk7XHJcbiAgICB0aGlzLnRvZ2dsZURyYXdDb250cm9sKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdG9yZSBpbml0aWFsaXphdGlvbiwgaW5jbHVkaW5nIGRyYXdpbmcgbGF5ZXIgY3JlYXRpb25cclxuICAgKi9cclxuICBwcml2YXRlIGluaXRTdG9yZSgpIHtcclxuICAgIHRoaXMubWFwLnJlbW92ZUxheWVyKHRoaXMub2xEcmF3aW5nTGF5ZXIpO1xyXG4gICAgdGhpcy5vbERyYXdpbmdMYXllciA9IG5ldyBWZWN0b3JMYXllcih7XHJcbiAgICAgIGlzSWdvSW50ZXJuYWxMYXllcjogdHJ1ZSxcclxuICAgICAgaWQ6ICdpZ28tZHJhdy1sYXllcicsXHJcbiAgICAgIHRpdGxlOiB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5kcmF3LmRyYXdpbmcnKSxcclxuICAgICAgekluZGV4OiAyMDAsXHJcbiAgICAgIHNvdXJjZTogbmV3IEZlYXR1cmVEYXRhU291cmNlKCksXHJcbiAgICAgIHN0eWxlOiAoZmVhdHVyZSwgcmVzb2x1dGlvbikgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRyYXdTdHlsZVNlcnZpY2UuY3JlYXRlRHJhd2luZ0xheWVyU3R5bGUoXHJcbiAgICAgICAgICBmZWF0dXJlLFxyXG4gICAgICAgICAgcmVzb2x1dGlvbixcclxuICAgICAgICAgIHRoaXMubGFiZWxzQXJlU2hvd24sXHJcbiAgICAgICAgICB0aGlzLmljb25cclxuICAgICAgICApO1xyXG4gICAgICB9LFxyXG4gICAgICBzaG93SW5MYXllckxpc3Q6IHRydWUsXHJcbiAgICAgIGV4cG9ydGFibGU6IHRydWUsXHJcbiAgICAgIGJyb3dzYWJsZTogZmFsc2UsXHJcbiAgICAgIHdvcmtzcGFjZToge1xyXG4gICAgICAgIGVuYWJsZWQ6IGZhbHNlXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdHJ5QmluZFN0b3JlTGF5ZXIodGhpcy5zdG9yZSwgdGhpcy5vbERyYXdpbmdMYXllcik7XHJcbiAgICB0cnlBZGRMb2FkaW5nU3RyYXRlZ3koXHJcbiAgICAgIHRoaXMuc3RvcmUsXHJcbiAgICAgIG5ldyBGZWF0dXJlU3RvcmVMb2FkaW5nU3RyYXRlZ3koe1xyXG4gICAgICAgIG1vdGlvbjogRmVhdHVyZU1vdGlvbi5Ob25lXHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgdHJ5QWRkU2VsZWN0aW9uU3RyYXRlZ3koXHJcbiAgICAgIHRoaXMuc3RvcmUsXHJcbiAgICAgIG5ldyBGZWF0dXJlU3RvcmVTZWxlY3Rpb25TdHJhdGVneSh7XHJcbiAgICAgICAgbWFwOiB0aGlzLm1hcCxcclxuICAgICAgICBtb3Rpb246IEZlYXR1cmVNb3Rpb24uTm9uZSxcclxuICAgICAgICBtYW55OiB0cnVlXHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgdGhpcy5zdG9yZS5sYXllci52aXNpYmxlID0gdHJ1ZTtcclxuICAgIHRoaXMuc3RvcmUuc291cmNlLm9sLm9uKFxyXG4gICAgICAncmVtb3ZlZmVhdHVyZScsXHJcbiAgICAgIChldmVudDogT2xWZWN0b3JTb3VyY2VFdmVudDxPbEdlb21ldHJ5PikgPT4ge1xyXG4gICAgICAgIGNvbnN0IG9sR2VvbWV0cnkgPSBldmVudC5mZWF0dXJlLmdldEdlb21ldHJ5KCk7XHJcbiAgICAgICAgdGhpcy5jbGVhckxhYmVsc09mT2xHZW9tZXRyeShvbEdlb21ldHJ5KTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucyQkLnB1c2goXHJcbiAgICAgIHRoaXMuc3RvcmUuc3RhdGVWaWV3XHJcbiAgICAgICAgLm1hbnlCeSQoKHJlY29yZDogRW50aXR5UmVjb3JkPEZlYXR1cmVXaXRoRHJhdz4pID0+IHtcclxuICAgICAgICAgIHJldHVybiByZWNvcmQuc3RhdGUuc2VsZWN0ZWQgPT09IHRydWU7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAucGlwZShcclxuICAgICAgICAgIHNraXAoMSkgLy8gU2tpcCBpbml0aWFsIGVtaXNzaW9uXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlY29yZHM6IEVudGl0eVJlY29yZDxGZWF0dXJlV2l0aERyYXc+W10pID0+IHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQubmV4dChyZWNvcmRzLm1hcCgocmVjb3JkKSA9PiByZWNvcmQuZW50aXR5KSk7XHJcbiAgICAgICAgfSlcclxuICAgICk7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMkJC5wdXNoKFxyXG4gICAgICB0aGlzLnN0b3JlLmNvdW50JC5zdWJzY3JpYmUoKGNudCkgPT4ge1xyXG4gICAgICAgIGNudCA+PSAxXHJcbiAgICAgICAgICA/ICh0aGlzLnN0b3JlLmxheWVyLm9wdGlvbnMuc2hvd0luTGF5ZXJMaXN0ID0gdHJ1ZSlcclxuICAgICAgICAgIDogKHRoaXMuc3RvcmUubGF5ZXIub3B0aW9ucy5zaG93SW5MYXllckxpc3QgPSBmYWxzZSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FsbGVkIHdoZW4gdGhlIHVzZXIgY2hhbmdlcyB0aGUgY29sb3IgaW4gYSBjb2xvciBwaWNrZXJcclxuICAgKiBAcGFyYW0gbGFiZWxzQXJlU2hvd24gd2hldGVyIHRoZSBsYWJlbHMgYXJlIHNob3duIG9yIG5vdFxyXG4gICAqIEBwYXJhbSBpc0FuSWNvbiB3aGV0ZXIgdGhlIGZlYXR1cmUgaXMgYW4gaWNvbiBvciBub3RcclxuICAgKi9cclxuICBvbkNvbG9yQ2hhbmdlKGxhYmVsc0FyZVNob3duOiBib29sZWFuLCBpc0FuSWNvbjogYm9vbGVhbikge1xyXG4gICAgdGhpcy5maWxsRm9ybSA9IHRoaXMuZmlsbENvbG9yO1xyXG4gICAgdGhpcy5zdHJva2VGb3JtID0gdGhpcy5zdHJva2VDb2xvcjtcclxuICAgIHRoaXMuZHJhd1N0eWxlU2VydmljZS5zZXRGaWxsQ29sb3IodGhpcy5maWxsQ29sb3IpO1xyXG4gICAgdGhpcy5kcmF3U3R5bGVTZXJ2aWNlLnNldFN0cm9rZUNvbG9yKHRoaXMuc3Ryb2tlQ29sb3IpO1xyXG5cclxuICAgIGlmIChpc0FuSWNvbikge1xyXG4gICAgICB0aGlzLnN0b3JlLmxheWVyLm9sLnNldFN0eWxlKChmZWF0dXJlLCByZXNvbHV0aW9uKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZHJhd1N0eWxlU2VydmljZS5jcmVhdGVEcmF3aW5nTGF5ZXJTdHlsZShcclxuICAgICAgICAgIGZlYXR1cmUsXHJcbiAgICAgICAgICByZXNvbHV0aW9uLFxyXG4gICAgICAgICAgbGFiZWxzQXJlU2hvd24sXHJcbiAgICAgICAgICB0aGlzLmljb25cclxuICAgICAgICApO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5pY29uID0gdW5kZWZpbmVkO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zdG9yZS5sYXllci5vbC5zZXRTdHlsZSgoZmVhdHVyZSwgcmVzb2x1dGlvbikgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRyYXdTdHlsZVNlcnZpY2UuY3JlYXRlRHJhd2luZ0xheWVyU3R5bGUoXHJcbiAgICAgICAgICBmZWF0dXJlLFxyXG4gICAgICAgICAgcmVzb2x1dGlvbixcclxuICAgICAgICAgIGxhYmVsc0FyZVNob3duXHJcbiAgICAgICAgKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNyZWF0ZURyYXdDb250cm9sKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDYWxsZWQgd2hlbiB0aGUgdXNlciB0b2dnbGVzIHRoZSBEcmF3IGNvbnRyb2wgaXMgdG9nZ2xlZFxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIG9uVG9nZ2xlRHJhd0NvbnRyb2wodG9nZ2xlSXNDaGVja2VkOiBib29sZWFuKSB7XHJcbiAgICB0b2dnbGVJc0NoZWNrZWQgPyB0aGlzLnRvZ2dsZURyYXdDb250cm9sKCkgOiB0aGlzLmRlYWN0aXZhdGVEcmF3Q29udHJvbCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWN0aXZhdGUgdGhlIGNvcnJlY3QgY29udHJvbFxyXG4gICAqL1xyXG4gIHByaXZhdGUgdG9nZ2xlRHJhd0NvbnRyb2woKSB7XHJcbiAgICB0aGlzLmRlYWN0aXZhdGVEcmF3Q29udHJvbCgpO1xyXG4gICAgdGhpcy5hY3RpdmF0ZURyYXdDb250cm9sKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPcGVuIGEgZGlhbG9nIGJveCB0byBlbnRlciBsYWJlbCBhbmQgZG8gc29tZXRoaW5nXHJcbiAgICogQHBhcmFtIG9sR2VvbWV0cnkgZ2VvbWV0cnkgYXQgZHJhdyBlbmQgb3Igc2VsZWN0ZWQgZ2VvbWV0cnlcclxuICAgKiBAcGFyYW0gZHJhd0VuZCBldmVudCBmaXJlZCBhdCBkcmF3RW5kP1xyXG4gICAqL1xyXG4gIHByaXZhdGUgb3BlbkRpYWxvZyhvbEdlb21ldHJ5RmVhdHVyZSwgaXNEcmF3RW5kOiBib29sZWFuKSB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgLy8gb3BlbiB0aGUgZGlhbG9nIGJveCB1c2VkIHRvIGVudGVyIGxhYmVsXHJcbiAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oRHJhd1BvcHVwQ29tcG9uZW50LCB7XHJcbiAgICAgICAgZGlzYWJsZUNsb3NlOiBmYWxzZSxcclxuICAgICAgICBkYXRhOiB7IGN1cnJlbnRMYWJlbDogb2xHZW9tZXRyeUZlYXR1cmUuZ2V0KCdkcmF3JykgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIC8vIHdoZW4gZGlhbG9nIGJveCBpcyBjbG9zZWQsIGdldCBsYWJlbCBhbmQgc2V0IGl0IHRvIGdlb21ldHJ5XHJcbiAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgobGFiZWw6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIC8vIGNoZWNrcyBpZiB0aGUgdXNlciBjbGlja2VkIG9rXHJcbiAgICAgICAgaWYgKGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5jb25maXJtRmxhZykge1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVMYWJlbE9mT2xHZW9tZXRyeShvbEdlb21ldHJ5RmVhdHVyZSwgbGFiZWwpO1xyXG4gICAgICAgICAgLy8gaWYgZXZlbnQgd2FzIGZpcmVkIGF0IGRyYXcgZW5kXHJcbiAgICAgICAgICBpZiAoaXNEcmF3RW5kKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25EcmF3RW5kKG9sR2VvbWV0cnlGZWF0dXJlKTtcclxuICAgICAgICAgICAgLy8gaWYgZXZlbnQgd2FzIGZpcmVkIGF0IHNlbGVjdFxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5vblNlbGVjdERyYXcob2xHZW9tZXRyeUZlYXR1cmUsIGxhYmVsKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZGVsZXRlcyB0aGUgZmVhdHVyZVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5vbERyYXdpbmdMYXllclNvdXJjZVxyXG4gICAgICAgICAgICAuZ2V0RmVhdHVyZXMoKVxyXG4gICAgICAgICAgICAuZm9yRWFjaCgoZHJhd2luZ0xheWVyRmVhdHVyZSkgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGdlb21ldHJ5ID0gZHJhd2luZ0xheWVyRmVhdHVyZS5nZXRHZW9tZXRyeSgpIGFzIGFueTtcclxuICAgICAgICAgICAgICBpZiAob2xHZW9tZXRyeUZlYXR1cmUgPT09IGdlb21ldHJ5KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9sRHJhd2luZ0xheWVyU291cmNlLnJlbW92ZUZlYXR1cmUoZHJhd2luZ0xheWVyRmVhdHVyZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSwgMjUwKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFjdGl2YXRlIGEgZ2l2ZW4gY29udHJvbFxyXG4gICAqL1xyXG4gIHByaXZhdGUgYWN0aXZhdGVEcmF3Q29udHJvbCgpIHtcclxuICAgIHRoaXMuZHJhd0NvbnRyb2xJc0Rpc2FibGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLmRyYXdDb250cm9sSXNBY3RpdmUgPSB0cnVlO1xyXG4gICAgdGhpcy5kcmF3RW5kJCQgPSB0aGlzLmRyYXdDb250cm9sLmVuZCQuc3Vic2NyaWJlKFxyXG4gICAgICAob2xHZW9tZXRyeTogT2xHZW9tZXRyeSkgPT4ge1xyXG4gICAgICAgIHRoaXMub3BlbkRpYWxvZyhvbEdlb21ldHJ5LCB0cnVlKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmRyYXdDb250cm9sLm1vZGlmeSQuc3Vic2NyaWJlKChvbEdlb21ldHJ5OiBPbEdlb21ldHJ5KSA9PiB7XHJcbiAgICAgIHRoaXMub25Nb2RpZnlEcmF3KG9sR2VvbWV0cnkpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKCF0aGlzLmRyYXdTZWxlY3QkJCkge1xyXG4gICAgICB0aGlzLmRyYXdTZWxlY3QkJCA9IHRoaXMuZHJhd0NvbnRyb2wuc2VsZWN0JC5zdWJzY3JpYmUoXHJcbiAgICAgICAgKG9sRmVhdHVyZTogT2xGZWF0dXJlPE9sR2VvbWV0cnk+KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm9wZW5EaWFsb2cob2xGZWF0dXJlLCBmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZHJhd0NvbnRyb2wuc2V0T2xNYXAodGhpcy5tYXAub2wsIHRydWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVhY3RpdmF0ZSB0aGUgYWN0aXZlIGRyYXcgY29udHJvbFxyXG4gICAqL1xyXG4gIHByaXZhdGUgZGVhY3RpdmF0ZURyYXdDb250cm9sKCkge1xyXG4gICAgaWYgKCF0aGlzLmRyYXdDb250cm9sKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5kcmF3RW5kJCQpIHtcclxuICAgICAgdGhpcy5kcmF3RW5kJCQudW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRyYXdDb250cm9sLnNldE9sTWFwKHVuZGVmaW5lZCk7XHJcbiAgICB0aGlzLmRyYXdDb250cm9sSXNBY3RpdmUgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsZWFyIHRoZSBkcmF3IHNvdXJjZSBhbmQgdHJhY2sgdGhlIGdlb21ldHJ5IGJlaW5nIGRyYXdcclxuICAgKiBAcGFyYW0gb2xHZW9tZXRyeSBPbCBsaW5lc3RyaW5nIG9yIHBvbHlnb25cclxuICAgKi9cclxuICBwcml2YXRlIG9uRHJhd0VuZChvbEdlb21ldHJ5OiBPbEdlb21ldHJ5LCByYWRpdXM/OiBudW1iZXIpIHtcclxuICAgIHRoaXMuYWRkRmVhdHVyZVRvU3RvcmUob2xHZW9tZXRyeSwgcmFkaXVzKTtcclxuICAgIHRoaXMuY2xlYXJMYWJlbHNPZk9sR2VvbWV0cnkob2xHZW9tZXRyeSk7XHJcbiAgICB0aGlzLnN0b3JlLmxheWVyLm9sLmdldFNvdXJjZSgpLnJlZnJlc2goKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25Nb2RpZnlEcmF3KG9sR2VvbWV0cnkpIHtcclxuICAgIGNvbnN0IGVudGl0aWVzID0gdGhpcy5zdG9yZS5hbGwoKTtcclxuXHJcbiAgICBlbnRpdGllcy5mb3JFYWNoKChlbnRpdHkpID0+IHtcclxuICAgICAgY29uc3QgZW50aXR5SWQgPSBlbnRpdHkucHJvcGVydGllcy5pZDtcclxuXHJcbiAgICAgIGNvbnN0IG9sR2VvbWV0cnlJZCA9IG9sR2VvbWV0cnkub2xfdWlkO1xyXG5cclxuICAgICAgaWYgKGVudGl0eUlkID09PSBvbEdlb21ldHJ5SWQpIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZUxhYmVsT2ZPbEdlb21ldHJ5KG9sR2VvbWV0cnksIGVudGl0eS5wcm9wZXJ0aWVzLmRyYXcpO1xyXG4gICAgICAgIHRoaXMucmVwbGFjZUZlYXR1cmVJblN0b3JlKGVudGl0eSwgb2xHZW9tZXRyeSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvblNlbGVjdERyYXcob2xGZWF0dXJlOiBPbEZlYXR1cmU8T2xHZW9tZXRyeT4sIGxhYmVsOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGVudGl0aWVzID0gdGhpcy5zdG9yZS5hbGwoKTtcclxuXHJcbiAgICBjb25zdCBvbEdlb21ldHJ5ID0gb2xGZWF0dXJlLmdldEdlb21ldHJ5KCkgYXMgYW55O1xyXG4gICAgb2xHZW9tZXRyeS5vbF91aWQgPSBvbEZlYXR1cmUuZ2V0KCdpZCcpO1xyXG5cclxuICAgIGNvbnN0IG9sR2VvbWV0cnlDb29yZGluYXRlcyA9IEpTT04uc3RyaW5naWZ5KFxyXG4gICAgICBvbEdlb21ldHJ5LmdldENvb3JkaW5hdGVzKClbMF1cclxuICAgICk7XHJcblxyXG4gICAgZW50aXRpZXMuZm9yRWFjaCgoZW50aXR5KSA9PiB7XHJcbiAgICAgIGNvbnN0IGVudGl0eUNvb3JkaW5hdGVzID0gSlNPTi5zdHJpbmdpZnkoZW50aXR5Lmdlb21ldHJ5LmNvb3JkaW5hdGVzWzBdKTtcclxuXHJcbiAgICAgIGlmIChvbEdlb21ldHJ5Q29vcmRpbmF0ZXMgPT09IGVudGl0eUNvb3JkaW5hdGVzKSB7XHJcbiAgICAgICAgY29uc3QgcmFkOiBudW1iZXIgPSBlbnRpdHkucHJvcGVydGllcy5yYWRcclxuICAgICAgICAgID8gZW50aXR5LnByb3BlcnRpZXMucmFkXHJcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLnVwZGF0ZUxhYmVsT2ZPbEdlb21ldHJ5KG9sR2VvbWV0cnksIGxhYmVsKTtcclxuICAgICAgICB0aGlzLnJlcGxhY2VGZWF0dXJlSW5TdG9yZShlbnRpdHksIG9sR2VvbWV0cnksIHJhZCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkIGEgZmVhdHVyZSB3aXRoIGRyYXcgbGFiZWwgdG8gdGhlIHN0b3JlLiBUaGUgbG9hZGluZyBzdHJhZ2VneSBvZiB0aGUgc3RvcmVcclxuICAgKiB3aWxsIHRyaWdnZXIgYW5kIGFkZCB0aGUgZmVhdHVyZSB0byB0aGUgbWFwLlxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIHByaXZhdGUgYWRkRmVhdHVyZVRvU3RvcmUoXHJcbiAgICBvbEdlb21ldHJ5LFxyXG4gICAgcmFkaXVzPzogbnVtYmVyLFxyXG4gICAgZmVhdHVyZT86IEZlYXR1cmVXaXRoRHJhd1xyXG4gICkge1xyXG4gICAgbGV0IHJhZDogbnVtYmVyO1xyXG4gICAgbGV0IGNlbnRlcjQzMjY6IEFycmF5PG51bWJlcj47XHJcbiAgICBsZXQgcG9pbnQ0MzI2OiBBcnJheTxudW1iZXI+O1xyXG4gICAgbGV0IGxvbjQzMjY6IG51bWJlcjtcclxuICAgIGxldCBsYXQ0MzI2OiBudW1iZXI7XHJcbiAgICBjb25zdCBmZWF0dXJlSWQgPSBmZWF0dXJlID8gZmVhdHVyZS5wcm9wZXJ0aWVzLmlkIDogb2xHZW9tZXRyeS5vbF91aWQ7XHJcbiAgICBjb25zdCBwcm9qZWN0aW9uID0gdGhpcy5tYXAub2wuZ2V0VmlldygpLmdldFByb2plY3Rpb24oKTtcclxuXHJcbiAgICBjb25zdCBnZW9tZXRyeSA9IG5ldyBPbEdlb0pTT04oKS53cml0ZUdlb21ldHJ5T2JqZWN0KG9sR2VvbWV0cnksIHtcclxuICAgICAgZmVhdHVyZVByb2plY3Rpb246IHByb2plY3Rpb24sXHJcbiAgICAgIGRhdGFQcm9qZWN0aW9uOiBwcm9qZWN0aW9uXHJcbiAgICB9KSBhcyBhbnk7XHJcblxyXG4gICAgaWYgKG9sR2VvbWV0cnkgaW5zdGFuY2VvZiBPbENpcmNsZSB8fCByYWRpdXMpIHtcclxuICAgICAgaWYgKHJhZGl1cykge1xyXG4gICAgICAgIHJhZCA9IHJhZGl1cztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBnZW9tZXRyeS50eXBlID0gJ1BvaW50JztcclxuICAgICAgICBnZW9tZXRyeS5jb29yZGluYXRlcyA9IG9sR2VvbWV0cnkuZ2V0Q2VudGVyKCk7XHJcbiAgICAgICAgY29uc3QgZXh0ZW50NDMyNiA9IHRyYW5zZm9ybShcclxuICAgICAgICAgIFtcclxuICAgICAgICAgICAgb2xHZW9tZXRyeS5nZXRGbGF0Q29vcmRpbmF0ZXMoKVsyXSxcclxuICAgICAgICAgICAgb2xHZW9tZXRyeS5nZXRGbGF0Q29vcmRpbmF0ZXMoKVszXVxyXG4gICAgICAgICAgXSxcclxuICAgICAgICAgIHByb2plY3Rpb24sXHJcbiAgICAgICAgICAnRVBTRzo0MzI2J1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgY2VudGVyNDMyNiA9IHRyYW5zZm9ybShcclxuICAgICAgICAgIFtcclxuICAgICAgICAgICAgb2xHZW9tZXRyeS5nZXRGbGF0Q29vcmRpbmF0ZXMoKVswXSxcclxuICAgICAgICAgICAgb2xHZW9tZXRyeS5nZXRGbGF0Q29vcmRpbmF0ZXMoKVsxXVxyXG4gICAgICAgICAgXSxcclxuICAgICAgICAgIHByb2plY3Rpb24sXHJcbiAgICAgICAgICAnRVBTRzo0MzI2J1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgbG9uNDMyNiA9IGNlbnRlcjQzMjZbMF07XHJcbiAgICAgICAgbGF0NDMyNiA9IGNlbnRlcjQzMjZbMV07XHJcbiAgICAgICAgcmFkID0gZ2V0RGlzdGFuY2UoY2VudGVyNDMyNiwgZXh0ZW50NDMyNik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAob2xHZW9tZXRyeSBpbnN0YW5jZW9mIE9sUG9pbnQpIHtcclxuICAgICAgcG9pbnQ0MzI2ID0gdHJhbnNmb3JtKFxyXG4gICAgICAgIG9sR2VvbWV0cnkuZ2V0RmxhdENvb3JkaW5hdGVzKCksXHJcbiAgICAgICAgcHJvamVjdGlvbixcclxuICAgICAgICAnRVBTRzo0MzI2J1xyXG4gICAgICApO1xyXG4gICAgICBsb240MzI2ID0gcG9pbnQ0MzI2WzBdO1xyXG4gICAgICBsYXQ0MzI2ID0gcG9pbnQ0MzI2WzFdO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3RvcmUudXBkYXRlKHtcclxuICAgICAgdHlwZTogRkVBVFVSRSxcclxuICAgICAgZ2VvbWV0cnksXHJcbiAgICAgIHByb2plY3Rpb246IHByb2plY3Rpb24uZ2V0Q29kZSgpLFxyXG4gICAgICBwcm9wZXJ0aWVzOiB7XHJcbiAgICAgICAgaWQ6IGZlYXR1cmVJZCxcclxuICAgICAgICBkcmF3OiBvbEdlb21ldHJ5LmdldCgnX2xhYmVsJyksXHJcbiAgICAgICAgbG9uZ2l0dWRlOiBsb240MzI2ID8gbG9uNDMyNiA6IG51bGwsXHJcbiAgICAgICAgbGF0aXR1ZGU6IGxhdDQzMjYgPyBsYXQ0MzI2IDogbnVsbCxcclxuICAgICAgICByYWQ6IHJhZCA/IHJhZCA6IG51bGxcclxuICAgICAgfSxcclxuICAgICAgbWV0YToge1xyXG4gICAgICAgIGlkOiBmZWF0dXJlSWRcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXBsYWNlIHRoZSBmZWF0dXJlIGluIHRoZSBzdG9yZVxyXG4gICAqIEBwYXJhbSBlbnRpdHkgdGhlIGVudGl0eSB0byByZXBsYWNlXHJcbiAgICogQHBhcmFtIG9sR2VvbWV0cnkgdGhlIG5ldyBnZW9tZXRyeSB0byBpbnNlcnQgaW4gdGhlIHN0b3JlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZXBsYWNlRmVhdHVyZUluU3RvcmUoXHJcbiAgICBlbnRpdHksXHJcbiAgICBvbEdlb21ldHJ5OiBPbEdlb21ldHJ5LFxyXG4gICAgcmFkaXVzPzogbnVtYmVyXHJcbiAgKSB7XHJcbiAgICB0aGlzLnN0b3JlLmRlbGV0ZShlbnRpdHkpO1xyXG4gICAgdGhpcy5vbkRyYXdFbmQob2xHZW9tZXRyeSwgcmFkaXVzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnVpbGRGb3JtKCkge1xyXG4gICAgdGhpcy5mb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgIGZpbGw6IFsnJ10sXHJcbiAgICAgIHN0cm9rZTogWycnXVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVEcmF3aW5ncygpIHtcclxuICAgIHRoaXMuc3RvcmUuZGVsZXRlTWFueSh0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLnZhbHVlKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQudmFsdWUuZm9yRWFjaCgoc2VsZWN0ZWRGZWF0dXJlKSA9PiB7XHJcbiAgICAgIHRoaXMub2xEcmF3aW5nTGF5ZXJTb3VyY2UuZ2V0RmVhdHVyZXMoKS5mb3JFYWNoKChkcmF3aW5nTGF5ZXJGZWF0dXJlKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZ2VvbWV0cnkgPSBkcmF3aW5nTGF5ZXJGZWF0dXJlLmdldEdlb21ldHJ5KCkgYXMgYW55O1xyXG4gICAgICAgIGlmIChzZWxlY3RlZEZlYXR1cmUucHJvcGVydGllcy5pZCA9PT0gZ2VvbWV0cnkub2xfdWlkKSB7XHJcbiAgICAgICAgICB0aGlzLm9sRHJhd2luZ0xheWVyU291cmNlLnJlbW92ZUZlYXR1cmUoZHJhd2luZ0xheWVyRmVhdHVyZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xlYXIgdGhlIHRvb2x0aXBzIG9mIGFuIE9MIGdlb21ldHJ5XHJcbiAgICogQHBhcmFtIG9sR2VvbWV0cnkgT0wgZ2VvbWV0cnkgd2l0aCB0b29sdGlwc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgY2xlYXJMYWJlbHNPZk9sR2VvbWV0cnkob2xHZW9tZXRyeSkge1xyXG4gICAgZ2V0VG9vbHRpcHNPZk9sR2VvbWV0cnkob2xHZW9tZXRyeSkuZm9yRWFjaChcclxuICAgICAgKG9sVG9vbHRpcDogT2xPdmVybGF5IHwgdW5kZWZpbmVkKSA9PiB7XHJcbiAgICAgICAgaWYgKG9sVG9vbHRpcCAmJiBvbFRvb2x0aXAuZ2V0TWFwKCkpIHtcclxuICAgICAgICAgIHRoaXMubWFwLm9sLnJlbW92ZU92ZXJsYXkob2xUb29sdGlwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDYWxsZWQgd2hlbiB0aGUgdXNlciB0b2dnbGVzIHRoZSBsYWJlbHMgdG9nZ2xlXHJcbiAgICovXHJcbiAgb25Ub2dnbGVMYWJlbHMoKSB7XHJcbiAgICB0aGlzLmRyYXdTdHlsZVNlcnZpY2UudG9nZ2xlTGFiZWxzQXJlU2hvd24oKTtcclxuICAgIHRoaXMubGFiZWxzQXJlU2hvd24gPSAhdGhpcy5sYWJlbHNBcmVTaG93bjtcclxuICAgIHRoaXMuaWNvblxyXG4gICAgICA/IHRoaXMub25Db2xvckNoYW5nZSh0aGlzLmxhYmVsc0FyZVNob3duLCB0cnVlKVxyXG4gICAgICA6IHRoaXMub25Db2xvckNoYW5nZSh0aGlzLmxhYmVsc0FyZVNob3duLCBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgdGhlIGxhYmVsIG9mIGEgZ2VvbWV0cnkgd2hlbiBhIGxhYmVsIGlzIGVudGVyZWQgaW4gYSBkaWFsb2cgYm94XHJcbiAgICogQHBhcmFtIG9sR2VvbWV0cnkgdGhlIGdlb21ldHJ5XHJcbiAgICogQHBhcmFtIGxhYmVsIHRoZSBsYWJlbFxyXG4gICAqL1xyXG4gIHByaXZhdGUgdXBkYXRlTGFiZWxPZk9sR2VvbWV0cnkob2xHZW9tZXRyeTogT2xHZW9tZXRyeSwgbGFiZWw6IHN0cmluZykge1xyXG4gICAgb2xHZW9tZXRyeS5zZXRQcm9wZXJ0aWVzKFxyXG4gICAgICB7XHJcbiAgICAgICAgX2xhYmVsOiBsYWJlbFxyXG4gICAgICB9LFxyXG4gICAgICB0cnVlXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgb25JY29uQ2hhbmdlKGV2ZW50Pykge1xyXG4gICAgdGhpcy5pY29uID0gZXZlbnQ7XHJcbiAgICB0aGlzLmRyYXdTdHlsZVNlcnZpY2Uuc2V0SWNvbih0aGlzLmljb24pO1xyXG4gICAgdGhpcy5zdG9yZS5sYXllci5vbC5zZXRTdHlsZSgoZmVhdHVyZSwgcmVzb2x1dGlvbikgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5kcmF3U3R5bGVTZXJ2aWNlLmNyZWF0ZURyYXdpbmdMYXllclN0eWxlKFxyXG4gICAgICAgIGZlYXR1cmUsXHJcbiAgICAgICAgcmVzb2x1dGlvbixcclxuICAgICAgICB0cnVlLFxyXG4gICAgICAgIHRoaXMuaWNvblxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvcGVuU2hvcmN1dHNEaWFsb2coKSB7XHJcbiAgICB0aGlzLmRpYWxvZy5vcGVuKERyYXdTaG9yY3V0c0NvbXBvbmVudCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDYWxsZWQgd2hlbiB0aGUgdXNlciBkb3VibGUtY2xpY2tzIHRoZSBzZWxlY3RlZCBkcmF3aW5nXHJcbiAgICovXHJcbiAgZWRpdExhYmVsRHJhd2luZygpIHtcclxuICAgIGNvbnN0IG9sR2VvbWV0cnkgPSBmZWF0dXJlVG9PbChcclxuICAgICAgdGhpcy5zZWxlY3RlZEZlYXR1cmVzJC52YWx1ZVswXSxcclxuICAgICAgdGhpcy5tYXAub2wuZ2V0VmlldygpLmdldFByb2plY3Rpb24oKS5nZXRDb2RlKClcclxuICAgICk7XHJcbiAgICB0aGlzLm9wZW5EaWFsb2cob2xHZW9tZXRyeSwgZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FsbGVkIHdoZW4gdGhlIHVzZXIgY2hhbmdlcyB0aGUgZm9udCBzaXplIG9yL2FuZCBzdHlsZVxyXG4gICAqIEBwYXJhbSBsYWJlbHNBcmVTaG93biB3aGV0ZXIgdGhlIGxhYmVscyBhcmUgc2hvd24gb3Igbm90XHJcbiAgICogQHBhcmFtIHNpemUgdGhlIHNpemUgb2YgdGhlIGZvbnRcclxuICAgKiBAcGFyYW0gc3R5bGUgdGhlIHN0eWxlIG9mIHRoZSBmb250XHJcbiAgICovXHJcblxyXG4gIG9uRm9udENoYW5nZShsYWJlbHNBcmVTaG93bjogYm9vbGVhbiwgc2l6ZTogc3RyaW5nLCBzdHlsZTogRm9udFR5cGUpIHtcclxuICAgIHRoaXMuZHJhd1N0eWxlU2VydmljZS5zZXRGb250U2l6ZShzaXplKTtcclxuICAgIHRoaXMuZHJhd1N0eWxlU2VydmljZS5zZXRGb250U3R5bGUoc3R5bGUpO1xyXG5cclxuICAgIHRoaXMuc3RvcmUubGF5ZXIub2wuc2V0U3R5bGUoKGZlYXR1cmUsIHJlc29sdXRpb24pID0+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuZHJhd1N0eWxlU2VydmljZS5jcmVhdGVEcmF3aW5nTGF5ZXJTdHlsZShcclxuICAgICAgICBmZWF0dXJlLFxyXG4gICAgICAgIHJlc29sdXRpb24sXHJcbiAgICAgICAgbGFiZWxzQXJlU2hvd25cclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5jcmVhdGVEcmF3Q29udHJvbCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGFsbEZvbnRTdHlsZXMoKTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoRm9udFR5cGUpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJnZW9tZXRyeS10eXBlLXRvZ2dsZSBtYXQtdHlwb2dyYXBoeVwiPlxyXG4gICAgPG1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIChjaGFuZ2UpPVwib25HZW9tZXRyeVR5cGVDaGFuZ2UoJGV2ZW50LnZhbHVlKVwiIFt2YWx1ZV09XCJnZW9tZXRyeVR5cGUuUG9pbnRcIj5cclxuXHJcbiAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSBbdmFsdWVdPVwiZ2VvbWV0cnlUeXBlLlBvaW50XCI+XHJcbiAgICAgICAge3sgJ2lnby5nZW8uZHJhdy4nICsgZ2VvbWV0cnlUeXBlLlBvaW50IHwgdHJhbnNsYXRlIH19XHJcbiAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XHJcblxyXG4gICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgW3ZhbHVlXT1cImdlb21ldHJ5VHlwZS5MaW5lU3RyaW5nXCI+XHJcbiAgICAgICAge3sgJ2lnby5nZW8uZHJhdy4nICsgZ2VvbWV0cnlUeXBlLkxpbmVTdHJpbmcgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cclxuXHJcbiAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSBbdmFsdWVdPVwiZ2VvbWV0cnlUeXBlLlBvbHlnb25cIj5cclxuICAgICAgICB7eyAnaWdvLmdlby5kcmF3LicgKyBnZW9tZXRyeVR5cGUuUG9seWdvbiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxyXG5cclxuICAgICAgPG1hdC1idXR0b24tdG9nZ2xlIFt2YWx1ZV09XCJnZW9tZXRyeVR5cGUuQ2lyY2xlXCI+XHJcbiAgICAgICAge3sgJ2lnby5nZW8uZHJhdy4nICsgZ2VvbWV0cnlUeXBlLkNpcmNsZSB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxyXG4gICAgPC9tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImRyYXctb3B0aW9ucyBtYXQtdHlwb2dyYXBoeVwiPlxyXG4gICAgPG1hdC1zbGlkZS10b2dnbGVcclxuICAgICAgW2Rpc2FibGVkXT1cImRyYXdDb250cm9sSXNEaXNhYmxlZFwiXHJcbiAgICAgIFtjaGVja2VkXT1cImRyYXdDb250cm9sSXNBY3RpdmVcIlxyXG4gICAgICBbbGFiZWxQb3NpdGlvbl09XCInYmVmb3JlJ1wiXHJcbiAgICAgIChjaGFuZ2UpPVwib25Ub2dnbGVEcmF3Q29udHJvbCgkZXZlbnQuY2hlY2tlZClcIj5cclxuICAgICAge3sgJ2lnby5nZW8uc3BhdGlhbEZpbHRlci5kcmF3Q29udHJvbCcgfCB0cmFuc2xhdGUgfX1cclxuICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuXHJcbiAgICA8bWF0LXNsaWRlLXRvZ2dsZVxyXG4gICAgICBbY2hlY2tlZF09XCJsYWJlbHNBcmVTaG93blwiXHJcbiAgICAgIFtsYWJlbFBvc2l0aW9uXT1cIidiZWZvcmUnXCJcclxuICAgICAgKGNoYW5nZSk9XCJvblRvZ2dsZUxhYmVscygpXCI+XHJcbiAgICAgIHt7ICdpZ28uZ2VvLmRyYXcudG9nZ2xlTWFwVG9vbHRpcHMnIHwgdHJhbnNsYXRlIH19XHJcbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxmb3JtIGNsYXNzPVwiaWdvLWZvcm1cIiBbZm9ybUdyb3VwXT1cImZvcm1cIj5cclxuICAgIDxkaXYgY2xhc3M9XCJmaWxsLWNvbG9yLXBpY2tlciBtYXQtdHlwb2dyYXBoeVwiPlxyXG4gICAgICA8c3Bhbj5cclxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJzdHJva2UtcGFsZXR0ZS1pY29uXCIgc3ZnSWNvbj1cInNxdWFyZVwiPjwvbWF0LWljb24+XHJcbiAgICAgICAge3sgJ2lnby5nZW8uZHJhdy5maWxsJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICA8L3NwYW4+XHJcblxyXG4gICAgICA8bWF0LWZvcm0tZmllbGRcclxuICAgICAgICBjbGFzcz1cImZpbGwtZmllbGRcIlxyXG4gICAgICAgIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCJcclxuICAgICAgICBmbG9hdExhYmVsPVwiYWx3YXlzXCJcclxuICAgICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxyXG4gICAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxyXG4gICAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmRyYXcuY29sb3JQaWNrZXInIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD57eyBmaWxsQ29sb3IgfX08L21hdC1sYWJlbD5cclxuXHJcbiAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJmaWxsXCJcclxuICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICBbKGNvbG9yUGlja2VyKV09XCJmaWxsQ29sb3JcIlxyXG4gICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwiZmlsbENvbG9yXCJcclxuICAgICAgICAgIFtyZWFkb25seV09XCJ0cnVlXCJcclxuICAgICAgICAgIFtjb2xvclBpY2tlcl09XCJmaWxsQ29sb3JcIlxyXG4gICAgICAgICAgW2NwV2lkdGhdPVwiJzIwMHB4J1wiXHJcbiAgICAgICAgICBbY3BPdXRwdXRGb3JtYXRdPVwiJ3JnYmEnXCJcclxuICAgICAgICAgIFtjcFBvc2l0aW9uXT1cIidib3R0b20nXCJcclxuICAgICAgICAgIFtjcFBvc2l0aW9uT2Zmc2V0XT1cIictNzUlJ1wiXHJcbiAgICAgICAgICBbY3BDYW5jZWxCdXR0b25dPVwidHJ1ZVwiXHJcbiAgICAgICAgICBbY3BDYW5jZWxCdXR0b25UZXh0XT1cIidpZ28uZ2VvLmRyYXcuY2FuY2VsJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICBbY3BPS0J1dHRvbl09XCJ0cnVlXCJcclxuICAgICAgICAgIChjb2xvclBpY2tlckNoYW5nZSk9XCJvbkNvbG9yQ2hhbmdlKGxhYmVsc0FyZVNob3duLCBmYWxzZSlcIi8+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlLWNvbG9yLXBpY2tlciBtYXQtdHlwb2dyYXBoeVwiPlxyXG4gICAgICA8c3Bhbj5cclxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJzdHJva2UtcGFsZXR0ZS1pY29uXCIgc3ZnSWNvbj1cInNxdWFyZS1vdXRsaW5lXCI+PC9tYXQtaWNvbj5cclxuICAgICAgICB7eyAnaWdvLmdlby5kcmF3LnN0cm9rZScgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgPG1hdC1mb3JtLWZpZWxkXHJcbiAgICAgICAgY2xhc3M9XCJzdHJva2UtZmllbGRcIlxyXG4gICAgICAgIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCJcclxuICAgICAgICBmbG9hdExhYmVsPVwiYWx3YXlzXCJcclxuICAgICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxyXG4gICAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxyXG4gICAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmRyYXcuY29sb3JQaWNrZXInIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD57eyBzdHJva2VDb2xvciB9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic3Ryb2tlXCJcclxuICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICBbKGNvbG9yUGlja2VyKV09XCJzdHJva2VDb2xvclwiXHJcbiAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZF09XCJzdHJva2VDb2xvclwiXHJcbiAgICAgICAgICBbcmVhZG9ubHldPVwidHJ1ZVwiXHJcbiAgICAgICAgICBbY29sb3JQaWNrZXJdPVwic3Ryb2tlQ29sb3JcIlxyXG4gICAgICAgICAgW2NwV2lkdGhdPVwiJzIwMHB4J1wiXHJcbiAgICAgICAgICBbY3BQb3NpdGlvbl09XCInYm90dG9tJ1wiXHJcbiAgICAgICAgICBbY3BQb3NpdGlvbk9mZnNldF09XCInLTc1JSdcIlxyXG4gICAgICAgICAgW2NwT3V0cHV0Rm9ybWF0XT1cIidyZ2JhJ1wiXHJcbiAgICAgICAgICBbY3BDYW5jZWxCdXR0b25dPVwidHJ1ZVwiXHJcbiAgICAgICAgICBbY3BDYW5jZWxCdXR0b25UZXh0XT1cIidpZ28uZ2VvLmRyYXcuY2FuY2VsJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICBbY3BPS0J1dHRvbl09XCJ0cnVlXCJcclxuICAgICAgICAgIChjb2xvclBpY2tlckNoYW5nZSk9XCJvbkNvbG9yQ2hhbmdlKGxhYmVsc0FyZVNob3duLCBmYWxzZSlcIj5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXY+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZCAqbmdJZj1cImljb25zLmxlbmd0aCA+PSAxXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD57eyAnaWdvLmdlby5kcmF3Lmljb24nIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1zZWxlY3Q+XHJcbiAgICAgICAgICA8bWF0LXNlbGVjdC10cmlnZ2VyPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaWNvblwiIGNsYXNzPVwiYm94XCI+XHJcbiAgICAgICAgICAgICAgPGltZyBzcmM9XCJ7eyBpY29uIH19XCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9tYXQtc2VsZWN0LXRyaWdnZXI+XHJcbiAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlwiIChjbGljayk9XCJvbkljb25DaGFuZ2UoKVwiPnt7ICdpZ28uZ2VvLmRyYXcubm9JY29uJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uXHJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpY29uX2h0bWwgb2YgaWNvbnNcIlxyXG4gICAgICAgICAgICBbdmFsdWVdPVwiaWNvbl9odG1sXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uSWNvbkNoYW5nZShpY29uX2h0bWwpXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3hcIj5cclxuICAgICAgICAgICAgICA8aW1nIHNyYz1cInt7IGljb25faHRtbCB9fVwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Zvcm0+XHJcblxyXG5cclxuICA8ZGl2IGNsYXNzPVwiaWdvLWZvcm0tZm9udFwiPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJpZ28tZm9ybS1mb250U2l6ZVwiPlxyXG4gICAgICA8bWF0LWxhYmVsPnt7ICdpZ28uZ2VvLmRyYXcuZm9udFNpemUnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XHJcbiAgICAgIDxpbnB1dFxyXG4gICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgI3Rlc3RGb250U2l6ZVxyXG4gICAgICAgIHR5cGU9XCJudW1iZXJcIlxyXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiMTBcIlxyXG4gICAgICAgIG1pbj1cIjEwXCJcclxuICAgICAgICBvbmtleWRvd249XCJyZXR1cm4gZXZlbnQua2V5Q29kZSAhPT0gNjlcIlxyXG4gICAgICAgIFt2YWx1ZV09XCJmb250U2l6ZVwiXHJcbiAgICAgICAgKGlucHV0KT1cIlxyXG4gICAgICAgICAgb25Gb250Q2hhbmdlKFxyXG4gICAgICAgICAgICBsYWJlbHNBcmVTaG93bixcclxuICAgICAgICAgICAgJGV2ZW50LnRhcmdldC52YWx1ZSxcclxuICAgICAgICAgICAgdGVzdEZvbnRTdHlsZS52YWx1ZVxyXG4gICAgICAgICAgKVwiXHJcbiAgICAgIC8+XHJcbiAgICAgIDxzcGFuIG1hdFN1ZmZpeD5weDwvc3Bhbj5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cImlnby1mb3JtLWZvbnRTdHlsZVwiPlxyXG4gICAgICA8bWF0LWxhYmVsPnt7ICdpZ28uZ2VvLmRyYXcuZm9udFN0eWxlJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxyXG4gICAgICA8bWF0LXNlbGVjdFxyXG4gICAgICAgICN0ZXN0Rm9udFN0eWxlXHJcbiAgICAgICAgW3ZhbHVlXT1cImZvbnRTdHlsZVwiXHJcbiAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbkZvbnRDaGFuZ2UobGFiZWxzQXJlU2hvd24sIHRlc3RGb250U2l6ZS52YWx1ZSwgJGV2ZW50LnZhbHVlKVwiPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uXHJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgZm9udFNlbGVjdCBvZiBhbGxGb250U3R5bGVzXCJcclxuICAgICAgICAgIFt2YWx1ZV09XCJmb250U2VsZWN0XCI+XHJcbiAgICAgICAgICB7eyBmb250U2VsZWN0IH19XHJcbiAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICA8ZGl2PlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICAqbmdJZj1cInN0b3JlLmNvdW50JC5nZXRWYWx1ZSgpID4gMFwiXHJcbiAgICAgIGNsYXNzPVwiZGVsZXRlQnRuXCJcclxuICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgIGNvbG9yPVwid2FyblwiXHJcbiAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXHJcbiAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxyXG4gICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5kcmF3LmRlbGV0ZScgfCB0cmFuc2xhdGVcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiKHNlbGVjdGVkRmVhdHVyZXMkIHwgYXN5bmMpLmxlbmd0aCA9PT0gMFwiXHJcbiAgICAgIChjbGljayk9XCJkZWxldGVEcmF3aW5ncygpXCI+XHJcbiAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwiZGVsZXRlXCI+PC9tYXQtaWNvbj5cclxuICAgIDwvYnV0dG9uPlxyXG5cclxuICAgIDxpZ28tZW50aXR5LXRhYmxlXHJcbiAgICAgICN0YWJsZVxyXG4gICAgICBjbGFzcz1cInRhYmxlLWNvbXBhY3RcIlxyXG4gICAgICBbc3RvcmVdPVwic3RvcmVcIlxyXG4gICAgICBbdGVtcGxhdGVdPVwidGFibGVUZW1wbGF0ZVwiXHJcbiAgICAgIChkYmxjbGljayk9XCJlZGl0TGFiZWxEcmF3aW5nKClcIj5cclxuICAgIDwvaWdvLWVudGl0eS10YWJsZT5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGJ1dHRvblxyXG4gICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICBjb2xvcj1cImFjY2VudFwiXHJcbiAgICBkaXNhYmxlUmlwcGxlPVwidHJ1ZVwiXHJcbiAgICAoY2xpY2spPVwib3BlblNob3JjdXRzRGlhbG9nKClcIj5cclxuICAgIDxtYXQtaWNvblxyXG4gICAgICBjbGFzcz1cInNob3J0Y3V0cy1pY29uXCJcclxuICAgICAgc3ZnSWNvbj1cImtleWJvYXJkLW91dGxpbmVcIlxyXG4gICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxyXG4gICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcclxuICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8uZHJhdy5zaG9ydGN1dHMnIHwgdHJhbnNsYXRlXCI+XHJcbiAgICA8L21hdC1pY29uPlxyXG4gIDwvYnV0dG9uPlxyXG48L2Rpdj5cclxuIl19
|
|
825
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhdy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9kcmF3L2RyYXcvZHJhdy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9kcmF3L2RyYXcvZHJhdy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFHTCx1QkFBdUIsRUFDdkIsTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFDTCxPQUFPLEVBRVAsNkJBQTZCLEVBQzdCLGlCQUFpQixFQUNqQixxQkFBcUIsRUFDckIsdUJBQXVCLEVBQ3ZCLGFBQWEsRUFDYiwyQkFBMkIsRUFDM0IsV0FBVyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBSXZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFN0QsT0FBTyxFQUFFLGVBQWUsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFJckQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQzNGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQU1sRSxPQUFPLEtBQUssT0FBTyxNQUFNLFVBQVUsQ0FBQztBQUNwQyxPQUFPLGNBQWMsTUFBTSxrQkFBa0IsQ0FBQztBQUM5QyxPQUFPLFFBQVEsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0QyxPQUFPLE9BQU8sTUFBTSxlQUFlLENBQUM7QUFFcEMsT0FBTyxTQUFTLE1BQU0sbUJBQW1CLENBQUM7QUFJMUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUV4QyxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxN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LFNBQVM7MkJBQ0UsVUFBVSxjQUNSO29CQUNWLE9BQU8sQ0FBQyxXQUFXLEVBQUU7d0JBQ25CLEtBQUssQ0FDSCxNQUFNLEVBQ04sS0FBSyxDQUFDOzRCQUNKLE9BQU8sRUFBRSxDQUFDO3lCQUNYLENBQUMsQ0FDSDt3QkFDRCxLQUFLLENBQ0gsUUFBUSxFQUNSLEtBQUssQ0FBQzs0QkFDSixPQUFPLEVBQUUsQ0FBQzt5QkFDWCxDQUFDLENBQ0g7d0JBQ0QsVUFBVSxDQUFDLGdCQUFnQixFQUFFLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7d0JBQ3JELFVBQVUsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO3FCQUN0RCxDQUFDO2lCQUNILG1CQUdnQix1QkFBdUIsQ0FBQyxNQUFNO3dMQTRCckMsU0FBUztrQkFBbEIsTUFBTTtZQUNHLFdBQVc7a0JBQXBCLE1BQU07WUFDRyxXQUFXO2tCQUFwQixNQUFNO1lBRUcsUUFBUTtrQkFBakIsTUFBTTtZQUNHLFNBQVM7a0JBQWxCLE1BQU07WUFDRSxHQUFHO2tCQUFYLEtBQUs7WUFDRyxLQUFLO2tCQUFiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE9uRGVzdHJveSxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIE91dHB1dFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtcbiAgRkVBVFVSRSxcbiAgRmVhdHVyZVN0b3JlLFxuICBGZWF0dXJlU3RvcmVTZWxlY3Rpb25TdHJhdGVneSxcbiAgdHJ5QmluZFN0b3JlTGF5ZXIsXG4gIHRyeUFkZExvYWRpbmdTdHJhdGVneSxcbiAgdHJ5QWRkU2VsZWN0aW9uU3RyYXRlZ3ksXG4gIEZlYXR1cmVNb3Rpb24sXG4gIEZlYXR1cmVTdG9yZUxvYWRpbmdTdHJhdGVneSxcbiAgZmVhdHVyZVRvT2xcbn0gZnJvbSAnLi4vLi4vZmVhdHVyZSc7XG5cbmltcG9ydCB7IExhbmd1YWdlU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IEZvbnRUeXBlLCBHZW9tZXRyeVR5cGUgfSBmcm9tICcuLi9zaGFyZWQvZHJhdy5lbnVtJztcbmltcG9ydCB7IElnb01hcCB9IGZyb20gJy4uLy4uL21hcC9zaGFyZWQvbWFwJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBEcmF3LCBGZWF0dXJlV2l0aERyYXcgfSBmcm9tICcuLi9zaGFyZWQvZHJhdy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVW50eXBlZEZvcm1Hcm91cCwgVW50eXBlZEZvcm1CdWlsZGVyIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVmVjdG9yU291cmNlRXZlbnQgYXMgT2xWZWN0b3JTb3VyY2VFdmVudCB9IGZyb20gJ29sL3NvdXJjZS9WZWN0b3InO1xuaW1wb3J0IHsgVmVjdG9yTGF5ZXIgfSBmcm9tICcuLi8uLi9sYXllci9zaGFyZWQvbGF5ZXJzL3ZlY3Rvci1sYXllcic7XG5pbXBvcnQgeyBGZWF0dXJlRGF0YVNvdXJjZSB9IGZyb20gJy4uLy4uL2RhdGFzb3VyY2Uvc2hhcmVkL2RhdGFzb3VyY2VzL2ZlYXR1cmUtZGF0YXNvdXJjZSc7XG5pbXBvcnQgeyBEcmF3Q29udHJvbCB9IGZyb20gJy4uLy4uL2dlb21ldHJ5L3NoYXJlZC9jb250cm9scy9kcmF3JztcbmltcG9ydCB7XG4gIEVudGl0eVJlY29yZCxcbiAgRW50aXR5VGFibGVUZW1wbGF0ZVxufSBmcm9tICdAaWdvMi9jb21tb24nO1xuXG5pbXBvcnQgKiBhcyBPbFN0eWxlIGZyb20gJ29sL3N0eWxlJztcbmltcG9ydCBPbFZlY3RvclNvdXJjZSBmcm9tICdvbC9zb3VyY2UvVmVjdG9yJztcbmltcG9ydCBPbENpcmNsZSBmcm9tICdvbC9nZW9tL0NpcmNsZSc7XG5pbXBvcnQgT2xQb2ludCBmcm9tICdvbC9nZW9tL1BvaW50JztcbmltcG9ydCBPbEZlYXR1cmUgZnJvbSAnb2wvRmVhdHVyZSc7XG5pbXBvcnQgT2xHZW9KU09OIGZyb20gJ29sL2Zvcm1hdC9HZW9KU09OJztcbmltcG9ydCBPbE92ZXJsYXkgZnJvbSAnb2wvT3ZlcmxheSc7XG5pbXBvcnQgdHlwZSB7IFR5cGUgfSBmcm9tICdvbC9nZW9tL0dlb21ldHJ5JztcbmltcG9ydCB7IGRlZmF1bHQgYXMgT2xHZW9tZXRyeSB9IGZyb20gJ29sL2dlb20vR2VvbWV0cnknO1xuaW1wb3J0IHsgZ2V0RGlzdGFuY2UgfSBmcm9tICdvbC9zcGhlcmUnO1xuaW1wb3J0IHsgRHJhd1N0eWxlU2VydmljZSB9IGZyb20gJy4uL3NoYXJlZC9kcmF3LXN0eWxlLnNlcnZpY2UnO1xuaW1wb3J0IHsgc2tpcCwgZmlyc3QgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBEcmF3UG9wdXBDb21wb25lbnQgfSBmcm9tICcuL2RyYXctcG9wdXAuY29tcG9uZW50JztcbmltcG9ydCB7IERyYXdTaG9yY3V0c0NvbXBvbmVudCB9IGZyb20gJy4vZHJhdy1zaG9yY3V0cy5jb21wb25lbnQnO1xuaW1wb3J0IHsgZ2V0VG9vbHRpcHNPZk9sR2VvbWV0cnkgfSBmcm9tICcuLi8uLi9tZWFzdXJlL3NoYXJlZC9tZWFzdXJlLnV0aWxzJztcbmltcG9ydCB7IGNyZWF0ZUludGVyYWN0aW9uU3R5bGUgfSBmcm9tICcuLi9zaGFyZWQvZHJhdy51dGlscyc7XG5pbXBvcnQgeyB0cmFuc2Zvcm0gfSBmcm9tICdvbC9wcm9qJztcbmltcG9ydCB7IERyYXdJY29uU2VydmljZSB9IGZyb20gJy4uL3NoYXJlZC9kcmF3LWljb24uc2VydmljZSc7XG5pbXBvcnQgeyBTdHlsZU1vZGFsQ29tcG9uZW50LCBTdHlsZU1vZGFsRGF0YSB9IGZyb20gJy4uLy4uL2xheWVyL3N0eWxlLW1vZGFsL3N0eWxlLW1vZGFsLmNvbXBvbmVudCc7XG5cbmltcG9ydCB7XG4gIHRyaWdnZXIsXG4gIHN0YXRlLFxuICBzdHlsZSxcbiAgYW5pbWF0ZSxcbiAgdHJhbnNpdGlvblxufSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCBQb2ludCBmcm9tICdvbC9nZW9tL1BvaW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaWdvLWRyYXcnLFxuICBhbmltYXRpb25zOiBbXG4gICAgdHJpZ2dlcignb3BlbkNsb3NlJywgW1xuICAgICAgc3RhdGUoXG4gICAgICAgICdvcGVuJyxcbiAgICAgICAgc3R5bGUoe1xuICAgICAgICAgIG9wYWNpdHk6IDFcbiAgICAgICAgfSlcbiAgICAgICksXG4gICAgICBzdGF0ZShcbiAgICAgICAgJ2Nsb3NlZCcsXG4gICAgICAgIHN0eWxlKHtcbiAgICAgICAgICBvcGFjaXR5OiAwXG4gICAgICAgIH0pXG4gICAgICApLFxuICAgICAgdHJhbnNpdGlvbignb3BlbiA9PiBjbG9zZWQnLCBbYW5pbWF0ZSgnNjAwbXMgZWFzZScpXSksXG4gICAgICB0cmFuc2l0aW9uKCdjbG9zZWQgPT4gb3BlbicsIFthbmltYXRlKCc4MDBtcyBlYXNlJyldKVxuICAgIF0pXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9kcmF3LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZHJhdy5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBEcmF3Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvKipcbiAgICogVGFibGUgdGVtcGxhdGVcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgdGFibGVUZW1wbGF0ZTogRW50aXR5VGFibGVUZW1wbGF0ZSA9IHtcbiAgICBzZWxlY3Rpb246IHRydWUsXG4gICAgc2VsZWN0TWFueTogdHJ1ZSxcbiAgICBzZWxlY3Rpb25DaGVja2JveDogdHJ1ZSxcbiAgICBzb3J0OiB0cnVlLFxuICAgIGZpeGVkSGVhZGVyOiB0cnVlLFxuICAgIHRhYmxlSGVpZ2h0OiAnYXV0bycsXG4gICAgY29sdW1uczogW1xuICAgICAge1xuICAgICAgICBuYW1lOiAnRHJhd2luZycsXG4gICAgICAgIHRpdGxlOiB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5kcmF3LmxhYmVscycpLFxuICAgICAgICB0b29sdGlwOiB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5kcmF3LmNoYW5nZUxhYmVsJyksXG4gICAgICAgIHZhbHVlQWNjZXNzb3I6IChmZWF0dXJlOiBGZWF0dXJlV2l0aERyYXcpID0+IHtcbiAgICAgICAgICByZXR1cm4gZmVhdHVyZS5wcm9wZXJ0aWVzLmRyYXc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdXG4gIH07XG5cbiAgcHVibGljIGdlb21ldHJ5VHlwZSA9IEdlb21ldHJ5VHlwZTsgLy8gUmVmZXJlbmNlIHRvIHRoZSBHZW9tZXRyeVR5cGUgZW51bVxuXG4gIEBPdXRwdXQoKSBmaWxsQ29sb3I6IHN0cmluZztcbiAgQE91dHB1dCgpIHN0cm9rZUNvbG9yOiBzdHJpbmc7XG4gIEBPdXRwdXQoKSBzdHJva2VXaWR0aDogbnVtYmVyO1xuXG4gIEBPdXRwdXQoKSBmb250U2l6ZTogc3RyaW5nO1xuICBAT3V0cHV0KCkgZm9udFN0eWxlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIG1hcDogSWdvTWFwOyAvLyBNYXAgdG8gZHJhdyBvblxuICBASW5wdXQoKSBzdG9yZTogRmVhdHVyZVN0b3JlPEZlYXR1cmVXaXRoRHJhdz47IC8vIERyYXdpbmcgc3RvcmVcblxuICBwdWJsaWMgZHJhdyQ6IEJlaGF2aW9yU3ViamVjdDxEcmF3PiA9IG5ldyBCZWhhdmlvclN1YmplY3Qoe30pOyAvLyBPYnNlcnZhYmxlIG9mIGRyYXdcblxuICBwcml2YXRlIG9sRHJhd2luZ0xheWVyU291cmNlID0gbmV3IE9sVmVjdG9yU291cmNlKCk7XG4gIHByaXZhdGUgZHJhd0NvbnRyb2w6IERyYXdDb250cm9sO1xuICBwcml2YXRlIGRyYXdFbmQkJDogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIGRyYXdTZWxlY3QkJDogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIG9sRHJhd2luZ0xheWVyOiBWZWN0b3JMYXllcjtcbiAgcHVibGljIHNlbGVjdGVkRmVhdHVyZXMkOiBCZWhhdmlvclN1YmplY3Q8RmVhdHVyZVdpdGhEcmF3W10+ID1cbiAgICBuZXcgQmVoYXZpb3JTdWJqZWN0KFtdKTtcbiAgcHVibGljIGZpbGxGb3JtOiBzdHJpbmc7XG4gIHB1YmxpYyBzdHJva2VGb3JtOiBzdHJpbmc7XG4gIHB1YmxpYyBkcmF3Q29udHJvbElzRGlzYWJsZWQ6IGJvb2xlYW4gPSB0cnVlO1xuICBwdWJsaWMgZHJhd0NvbnRyb2xJc0FjdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgbGFiZWxzQXJlU2hvd246IGJvb2xlYW47XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9ucyQkOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG4gIHB1YmxpYyBwb3NpdGlvbjogc3RyaW5nID0gJ2JvdHRvbSc7XG4gIHB1YmxpYyBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xuICBwdWJsaWMgaWNvbnM6IEFycmF5PHN0cmluZz47XG4gIHB1YmxpYyBpY29uOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBudW1iZXJPZkRyYXdpbmdzOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBsYW5ndWFnZVNlcnZpY2U6IExhbmd1YWdlU2VydmljZSxcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBkcmF3U3R5bGVTZXJ2aWNlOiBEcmF3U3R5bGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgcHJpdmF0ZSBkcmF3SWNvblNlcnZpY2U6IERyYXdJY29uU2VydmljZVxuICApIHtcbiAgICB0aGlzLmJ1aWxkRm9ybSgpO1xuICAgIHRoaXMuZmlsbENvbG9yID0gdGhpcy5kcmF3U3R5bGVTZXJ2aWNlLmdldEZpbGxDb2xvcigpO1xuICAgIHRoaXMuc3Ryb2tlQ29sb3IgPSB0aGlzLmRyYXdTdHlsZVNlcnZpY2UuZ2V0U3Ryb2tlQ29sb3IoKTtcbiAgICB0aGlzLnN0cm9rZVdpZHRoID0gdGhpcy5kcmF3U3R5bGVTZXJ2aWNlLmdldFN0cm9rZVdpZHRoKCk7XG4gICAgdGhpcy5sYWJlbHNBcmVTaG93biA9IHRoaXMuZHJhd1N0eWxlU2VydmljZS5nZXRMYWJlbHNBcmVTaG93bigpO1xuICAgIHRoaXMuaWNvbnMgPSB0aGlzLmRyYXdJY29uU2VydmljZS5nZXRJY29ucygpO1xuICAgIHRoaXMuaWNvbiA9IHRoaXMuZHJhd1N0eWxlU2VydmljZS5nZXRJY29uKCk7XG5cbiAgICB0aGlzLmZvbnRTaXplID0gdGhpcy5kcmF3U3R5bGVTZXJ2aWNlLmdldEZvbnRTaXplKCk7XG4gICAgdGhpcy5mb250U3R5bGUgPSB0aGlzLmRyYXdTdHlsZVNlcnZpY2UuZ2V0Rm9udFN0eWxlKCk7XG4gIH1cblxuICAvLyBJbml0aWFsaXplIHRoZSBzdG9yZSB0aGF0IHdpbGwgY29udGFpbiB0aGUgZW50aXRpZXMgYW5kIGNyZWF0ZSB0aGUgRHJhdyBjb250cm9sXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaW5pdFN0b3JlKCk7XG4gICAgdGhpcy5kcmF3Q29udHJvbCA9IHRoaXMuY3JlYXRlRHJhd0NvbnRyb2woXG4gICAgICB0aGlzLmZpbGxDb2xvcixcbiAgICAgIHRoaXMuc3Ryb2tlQ29sb3IsXG4gICAgICB0aGlzLnN0cm9rZVdpZHRoXG4gICAgKTtcbiAgICB0aGlzLmRyYXdDb250cm9sLnNldEdlb21ldHJ5VHlwZSh0aGlzLmdlb21ldHJ5VHlwZS5Qb2ludCBhcyBhbnkpO1xuICAgIHRoaXMudG9nZ2xlRHJhd0NvbnRyb2woKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgdGhlIGRyYXdpbmcgbGF5ZXIgYW5kIHRoZSBpbnRlcmFjdGlvbnNcbiAgICogQGludGVybmFsXG4gICAqL1xuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmRyYXdDb250cm9sLnNldE9sTWFwKHVuZGVmaW5lZCk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zJCQubWFwKChzKSA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIERyYXcgQ29udHJvbFxuICAgKiBAcGFyYW0gZmlsbENvbG9yIHRoZSBmaWxsIGNvbG9yXG4gICAqIEBwYXJhbSBzdHJva2VDb2xvciB0aGUgc3Ryb2tlIGNvbG9yXG4gICAqIEBwYXJhbSBzdHJva2VXaWR0aCB0aGUgc3Ryb2tlIHdpZHRoXG4gICAqIEByZXR1cm5zIGEgRHJhdyBDb250cm9sXG4gICAqL1xuICBjcmVhdGVEcmF3Q29udHJvbChcbiAgICBmaWxsQ29sb3I/OiBzdHJpbmcsXG4gICAgc3Ryb2tlQ29sb3I/OiBzdHJpbmcsXG4gICAgc3Ryb2tlV2lkdGg/OiBudW1iZXJcbiAgKSB7XG4gICAgY29uc3QgZHJhd0NvbnRyb2wgPSBuZXcgRHJhd0NvbnRyb2woe1xuICAgICAgZ2VvbWV0cnlUeXBlOiB1bmRlZmluZWQsXG4gICAgICBkcmF3aW5nTGF5ZXJTb3VyY2U6IHRoaXMub2xEcmF3aW5nTGF5ZXJTb3VyY2UsXG4gICAgICBkcmF3aW5nTGF5ZXJTdHlsZTogbmV3IE9sU3R5bGUuU3R5bGUoe30pLFxuICAgICAgaW50ZXJhY3Rpb25TdHlsZTogY3JlYXRlSW50ZXJhY3Rpb25TdHlsZShcbiAgICAgICAgZmlsbENvbG9yLFxuICAgICAgICBzdHJva2VDb2xvcixcbiAgICAgICAgc3Ryb2tlV2lkdGhcbiAgICAgIClcbiAgICB9KTtcblxuICAgIHJldHVybiBkcmF3Q29udHJvbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9yZSBpbml0aWFsaXphdGlvbiwgaW5jbHVkaW5nIGRyYXdpbmcgbGF5ZXIgY3JlYXRpb25cbiAgICovXG4gIHByaXZhdGUgaW5pdFN0b3JlKCkge1xuICAgIHRoaXMubWFwLnJlbW92ZUxheWVyKHRoaXMub2xEcmF3aW5nTGF5ZXIpO1xuXG4gICAgLy8gdGhpcy5tYXAuYWRkTGF5ZXIoKVxuICAgIHRoaXMub2xEcmF3aW5nTGF5ZXIgPSBuZXcgVmVjdG9yTGF5ZXIoe1xuICAgICAgaXNJZ29JbnRlcm5hbExheWVyOiB0cnVlLFxuICAgICAgaWQ6ICdpZ28tZHJhdy1sYXllcicsXG4gICAgICB0aXRsZTogdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uZHJhdy5kcmF3aW5nJyksXG4gICAgICB6SW5kZXg6IDIwMCxcbiAgICAgIHNvdXJjZTogbmV3IEZlYXR1cmVEYXRhU291cmNlKCksXG4gICAgICBzdHlsZTogKGZlYXR1cmUsIHJlc29sdXRpb24pID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZHJhd1N0eWxlU2VydmljZS5jcmVhdGVJbmRpdmlkdWFsRWxlbWVudFN0eWxlKFxuICAgICAgICAgIGZlYXR1cmUsXG4gICAgICAgICAgcmVzb2x1dGlvbixcbiAgICAgICAgICB0aGlzLmxhYmVsc0FyZVNob3duLFxuICAgICAgICAgIGZlYXR1cmUuZ2V0KCdmb250U3R5bGUnKSxcbiAgICAgICAgICBmZWF0dXJlLmdldCgnZHJhd2luZ1N0eWxlJykuZmlsbCxcbiAgICAgICAgICBmZWF0dXJlLmdldCgnZHJhd2luZ1N0eWxlJykuc3Ryb2tlLFxuICAgICAgICAgIGZlYXR1cmUuZ2V0KCdvZmZzZXRYJyksXG4gICAgICAgICAgZmVhdHVyZS5nZXQoJ29mZnNldFknKSxcbiAgICAgICAgICB0aGlzLmljb25cbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBzaG93SW5MYXllckxpc3Q6IHRydWUsXG4gICAgICBleHBvcnRhYmxlOiB0cnVlLFxuICAgICAgYnJvd3NhYmxlOiBmYWxzZSxcbiAgICAgIHdvcmtzcGFjZToge1xuICAgICAgICBlbmFibGVkOiBmYWxzZVxuICAgICAgfVxuICAgIH0pO1xuICAgIHRyeUJpbmRTdG9yZUxheWVyKHRoaXMuc3RvcmUsIHRoaXMub2xEcmF3aW5nTGF5ZXIpO1xuXG4gICAgdHJ5QWRkTG9hZGluZ1N0cmF0ZWd5KFxuICAgICAgdGhpcy5zdG9yZSxcbiAgICAgIG5ldyBGZWF0dXJlU3RvcmVMb2FkaW5nU3RyYXRlZ3koe1xuICAgICAgICBtb3Rpb246IEZlYXR1cmVNb3Rpb24uTm9uZVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgdHJ5QWRkU2VsZWN0aW9uU3RyYXRlZ3koXG4gICAgICB0aGlzLnN0b3JlLFxuICAgICAgbmV3IEZlYXR1cmVTdG9yZVNlbGVjdGlvblN0cmF0ZWd5KHtcbiAgICAgICAgbWFwOiB0aGlzLm1hcCxcbiAgICAgICAgbW90aW9uOiBGZWF0dXJlTW90aW9uLk5vbmUsXG4gICAgICAgIG1hbnk6IHRydWVcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLnN0b3JlLmxheWVyLnZpc2libGUgPSB0cnVlO1xuICAgIHRoaXMuc3RvcmUuc291cmNlLm9sLm9uKFxuICAgICAgJ3JlbW92ZWZlYXR1cmUnLFxuICAgICAgKGV2ZW50OiBPbFZlY3RvclNvdXJjZUV2ZW50PE9sR2VvbWV0cnk+KSA9PiB7XG4gICAgICAgIGNvbnN0IG9sR2VvbWV0cnkgPSBldmVudC5mZWF0dXJlLmdldEdlb21ldHJ5KCk7XG4gICAgICAgIHRoaXMuY2xlYXJMYWJlbHNPZk9sR2VvbWV0cnkob2xHZW9tZXRyeSk7XG4gICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucyQkLnB1c2goXG4gICAgICB0aGlzLnN0b3JlLnN0YXRlVmlld1xuICAgICAgICAubWFueUJ5JCgocmVjb3JkOiBFbnRpdHlSZWNvcmQ8RmVhdHVyZVdpdGhEcmF3PikgPT4ge1xuICAgICAgICAgIHJldHVybiByZWNvcmQuc3RhdGUuc2VsZWN0ZWQgPT09IHRydWU7XG4gICAgICAgIH0pXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGZpcnN0KClcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChyZWNvcmRzOiBFbnRpdHlSZWNvcmQ8RmVhdHVyZVdpdGhEcmF3PltdKSA9PiB7XG4gICAgICAgICAgcmVjb3Jkcy5mb3JFYWNoKChyZWNvcmQpID0+IHtcbiAgICAgICAgICAgIHJlY29yZC5zdGF0ZS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMkJC5wdXNoKFxuICAgICAgdGhpcy5zdG9yZS5zdGF0ZVZpZXdcbiAgICAgICAgLm1hbnlCeSQoKHJlY29yZDogRW50aXR5UmVjb3JkPEZlYXR1cmVXaXRoRHJhdz4pID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVjb3JkLnN0YXRlLnNlbGVjdGVkID09PSB0cnVlO1xuICAgICAgICB9KVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBza2lwKDEpIC8vIFNraXAgaW5pdGlhbCBlbWlzc2lvblxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlY29yZHM6IEVudGl0eVJlY29yZDxGZWF0dXJlV2l0aERyYXc+W10pID0+IHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLm5leHQocmVjb3Jkcy5tYXAoKHJlY29yZCkgPT4gcmVjb3JkLmVudGl0eSkpO1xuICAgICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMkJC5wdXNoKFxuICAgICAgdGhpcy5zdG9yZS5jb3VudCQuc3Vic2NyaWJlKChjbnQpID0+IHtcbiAgICAgICAgaWYgKGNudCA+IDApIHtcbiAgICAgICAgICB0aGlzLnN0b3JlLnNldExheWVyRXh0ZW50KCk7XG4gICAgICAgIH1cbiAgICAgICAgY250ID49IDFcbiAgICAgICAgICA/ICh0aGlzLnN0b3JlLmxheWVyLm9wdGlvbnMuc2hvd0luTGF5ZXJMaXN0ID0gdHJ1ZSlcbiAgICAgICAgICA6ICh0aGlzLnN0b3JlLmxheWVyLm9wdGlvbnMuc2hvd0luTGF5ZXJMaXN0ID0gZmFsc2UpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbi8qKlxuICogT3BlbiB0aGUgc3R5bGUgbW9kYWwgZGlhbG9nIGJveFxuICovXG4gIG9wZW5TdHlsZU1vZGFsRGlhbG9nKCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gb3BlbiB0aGUgZGlhbG9nIGJveCB1c2VkIHRvIHN0eWxlIGZlYXR1cmVzXG4gICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFN0eWxlTW9kYWxDb21wb25lbnQsIHtcbiAgICAgICAgZGlzYWJsZUNsb3NlOiBmYWxzZSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGZlYXR1cmVzOiB0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLmdldFZhbHVlKCksXG4gICAgICAgICAgaWNvbnM6IHRoaXMuaWNvbnMsXG4gICAgICAgICAgaWNvbjogdGhpcy5pY29uXG4gICAgICAgIH0sXG4gICAgICAgIGF1dG9Gb2N1czogZmFsc2VcbiAgICAgIH0pO1xuXG4gICAgICAvLyB3aGVuIGRpYWxvZyBib3ggaXMgY2xvc2VkLCBnZXQgbGFiZWwgYW5kIHNldCBpdCB0byBnZW9tZXRyeVxuICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChkYXRhOiBTdHlsZU1vZGFsRGF0YSkgPT4ge1xuICAgICAgICAvLyBjaGVja3MgaWYgdGhlIHVzZXIgY2xpY2tlZCBva1xuICAgICAgICBpZiAoZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlLmNvbmZpcm1GbGFnKSB7XG4gICAgICAgICAgdGhpcy5vbkZvbnRDaGFuZ2UodGhpcy5sYWJlbHNBcmVTaG93biwgZGF0YS5mb250U2l6ZSwgZGF0YS5mb250U3R5bGUpO1xuICAgICAgICAgIHRoaXMub25Db2xvckNoYW5nZSh0aGlzLmxhYmVsc0FyZVNob3duLCB0aGlzLmljb24gPyB0cnVlIDogZmFsc2UsIGRhdGEuZmlsbENvbG9yLCBkYXRhLnN0cm9rZUNvbG9yKTtcbiAgICAgICAgICB0aGlzLm9uT2Zmc2V0TGFiZWxDaGFuZ2UodGhpcy5sYWJlbHNBcmVTaG93biwgZGF0YS5vZmZzZXRYLCBkYXRhLm9mZnNldFkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCAyNTApO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW4gYSBkaWFsb2cgYm94IHRvIGVudGVyIGxhYmVsIGFuZCBkbyBzb21ldGhpbmdcbiAgICogQHBhcmFtIG9sR2VvbWV0cnkgZ2VvbWV0cnkgYXQgZHJhdyBlbmQgb3Igc2VsZWN0ZWQgZ2VvbWV0cnlcbiAgICogQHBhcmFtIGRyYXdFbmQgZXZlbnQgZmlyZWQgYXQgZHJhd0VuZD9cbiAgICovXG4gIHByaXZhdGUgb3BlbkRyYXdEaWFsb2cob2xHZW9tZXRyeSwgaXNEcmF3RW5kOiBib29sZWFuKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyBvcGVuIHRoZSBkaWFsb2cgYm94IHVzZWQgdG8gZW50ZXIgbGFiZWxcbiAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oRHJhd1BvcHVwQ29tcG9uZW50LCB7XG4gICAgICAgIGRpc2FibGVDbG9zZTogZmFsc2UsXG4gICAgICAgIGRhdGE6IHsgY3VycmVudExhYmVsOiBvbEdlb21ldHJ5LmdldCgnZHJhdycpIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyB3aGVuIGRpYWxvZyBib3ggaXMgY2xvc2VkLCBnZXQgbGFiZWwgYW5kIHNldCBpdCB0byBnZW9tZXRyeVxuICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChsYWJlbDogc3RyaW5nKSA9PiB7XG4gICAgICAgIC8vIGNoZWNrcyBpZiB0aGUgdXNlciBjbGlja2VkIG9rXG4gICAgICAgIGlmIChkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2UuY29uZmlybUZsYWcpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUxhYmVsT2ZPbEdlb21ldHJ5KG9sR2VvbWV0cnksIGxhYmVsKTtcbiAgICAgICAgICBpZiAoIW9sR2VvbWV0cnkudmFsdWVzXy5mb250U3R5bGUpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRm9udFNpemVBbmRTdHlsZShvbEdlb21ldHJ5LCAnMjAnLCBGb250VHlwZS5BcmlhbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghb2xHZW9tZXRyeS52YWx1ZXNfLmRyYXdpbmdTdHlsZSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVGaWxsQW5kU3Ryb2tlQ29sb3IoXG4gICAgICAgICAgICAgIG9sR2VvbWV0cnksXG4gICAgICAgICAgICAgICdyZ2JhKDI1NSwyNTUsMjU1LDAuNCknLFxuICAgICAgICAgICAgICAncmdiYSgxNDMsNyw3LDEpJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCEob2xHZW9tZXRyeS52YWx1ZXNfLm9mZnNldFggfHwgb2xHZW9tZXRyeS52YWx1ZXNfLm9mZnNldFkpKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU9mZnNldChcbiAgICAgICAgICAgICAgb2xHZW9tZXRyeSxcbiAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgb2xHZW9tZXRyeSBpbnN0YW5jZW9mIFBvaW50ID8gLTE1IDogMFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBpZiBldmVudCB3YXMgZmlyZWQgYXQgZHJhdyBlbmRcbiAgICAgICAgICBpZiAoaXNEcmF3RW5kKSB7XG4gICAgICAgICAgICB0aGlzLm9uRHJhd0VuZChvbEdlb21ldHJ5KTtcbiAgICAgICAgICAgIC8vIGlmIGV2ZW50IHdhcyBmaXJlZCBhdCBzZWxlY3RcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vblNlbGVjdERyYXcob2xHZW9tZXRyeSwgbGFiZWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnVwZGF0ZUhlaWdodFRhYmxlKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZGVsZXRlcyB0aGUgZmVhdHVyZVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB0aGlzLm9sRHJhd2luZ0xheWVyU291cmNlXG4gICAgICAgICAgICAuZ2V0RmVhdHVyZXMoKVxuICAgICAgICAgICAgLmZvckVhY2goKGRyYXdpbmdMYXllckZlYXR1cmUpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZ2VvbWV0cnkgPSBkcmF3aW5nTGF5ZXJGZWF0dXJlLmdldEdlb21ldHJ5KCkgYXMgYW55O1xuICAgICAgICAgICAgICBpZiAob2xHZW9tZXRyeSA9PT0gZ2VvbWV0cnkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9sRHJhd2luZ0xheWVyU291cmNlLnJlbW92ZUZlYXR1cmUoZHJhd2luZ0xheWVyRmVhdHVyZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCAyNTApO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIHRoZSBkcmF3IHNvdXJjZSBhbmQgdHJhY2sgdGhlIGdlb21ldHJ5IGJlaW5nIGRyYXdcbiAgICogQHBhcmFtIG9sR2VvbWV0cnkgT2wgbGluZXN0cmluZyBvciBwb2x5Z29uXG4gICAqL1xuICBwcml2YXRlIG9uRHJhd0VuZChvbEdlb21ldHJ5OiBPbEdlb21ldHJ5LCByYWRpdXM/OiBudW1iZXIpIHtcbiAgICB0aGlzLmFkZEZlYXR1cmVUb1N0b3JlKG9sR2VvbWV0cnksIHJhZGl1cyk7XG4gICAgdGhpcy5jbGVhckxhYmVsc09mT2xHZW9tZXRyeShvbEdlb21ldHJ5KTtcbiAgICB0aGlzLnN0b3JlLmxheWVyLm9sLmdldFNvdXJjZSgpLnJlZnJlc2goKTtcbiAgfVxuXG4gIHByaXZhdGUgb25Nb2RpZnlEcmF3KG9sR2VvbWV0cnkpIHtcbiAgICBjb25zdCBlbnRpdGllcyA9IHRoaXMuc3RvcmUuYWxsKCk7XG5cbiAgICBlbnRpdGllcy5mb3JFYWNoKChlbnRpdHkpID0+IHtcbiAgICAgIGNvbnN0IGVudGl0eUlkID0gZW50aXR5LnByb3BlcnRpZXMuaWQ7XG5cbiAgICAgIGNvbnN0IG9sR2VvbWV0cnlJZCA9IG9sR2VvbWV0cnkub2xfdWlkO1xuXG4gICAgICBpZiAoZW50aXR5SWQgPT09IG9sR2VvbWV0cnlJZCkge1xuICAgICAgICB0aGlzLnVwZGF0ZUxhYmVsT2ZPbEdlb21ldHJ5KG9sR2VvbWV0cnksIGVudGl0eS5wcm9wZXJ0aWVzLmRyYXcpO1xuICAgICAgICB0aGlzLnVwZGF0ZUZvbnRTaXplQW5kU3R5bGUoXG4gICAgICAgICAgb2xHZW9tZXRyeSxcbiAgICAgICAgICBlbnRpdHkucHJvcGVydGllcy5mb250U3R5bGUuc3BsaXQoJyAnKVswXS5yZXBsYWNlKCdweCcsICcnKSxcbiAgICAgICAgICBlbnRpdHkucHJvcGVydGllcy5mb250U3R5bGUuc3Vic3RyaW5nKFxuICAgICAgICAgICAgZW50aXR5LnByb3BlcnRpZXMuZm9udFN0eWxlLmluZGV4T2YoJyAnKSArIDFcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMudXBkYXRlRmlsbEFuZFN0cm9rZUNvbG9yKFxuICAgICAgICAgIG9sR2VvbWV0cnksXG4gICAgICAgICAgZW50aXR5LnByb3BlcnRpZXMuZHJhd2luZ1N0eWxlLmZpbGwsXG4gICAgICAgICAgZW50aXR5LnByb3BlcnRpZXMuZHJhd2luZ1N0eWxlLnN0cm9rZVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnVwZGF0ZU9mZnNldChcbiAgICAgICAgICBvbEdlb21ldHJ5LFxuICAgICAgICAgIGVudGl0eS5wcm9wZXJ0aWVzLm9mZnNldFgsXG4gICAgICAgICAgZW50aXR5LnByb3BlcnRpZXMub2Zmc2V0WVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnJlcGxhY2VGZWF0dXJlSW5TdG9yZShlbnRpdHksIG9sR2VvbWV0cnkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBvblNlbGVjdERyYXcob2xGZWF0dXJlOiBPbEZlYXR1cmU8T2xHZW9tZXRyeT4sIGxhYmVsOiBzdHJpbmcpIHtcbiAgICBjb25zdCBlbnRpdGllcyA9IHRoaXMuc3RvcmUuYWxsKCk7XG5cbiAgICBjb25zdCBvbEdlb21ldHJ5ID0gb2xGZWF0dXJlLmdldEdlb21ldHJ5KCkgYXMgYW55O1xuICAgIG9sR2VvbWV0cnkub2xfdWlkID0gb2xGZWF0dXJlLmdldCgnaWQnKTtcblxuICAgIGNvbnN0IG9sR2VvbWV0cnlDb29yZGluYXRlcyA9IEpTT04uc3RyaW5naWZ5KFxuICAgICAgb2xHZW9tZXRyeS5nZXRDb29yZGluYXRlcygpWzBdXG4gICAgKTtcblxuICAgIGVudGl0aWVzLmZvckVhY2goKGVudGl0eSkgPT4ge1xuICAgICAgY29uc3QgZW50aXR5Q29vcmRpbmF0ZXMgPSBKU09OLnN0cmluZ2lmeShlbnRpdHkuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMF0pO1xuXG4gICAgICBpZiAob2xHZW9tZXRyeUNvb3JkaW5hdGVzID09PSBlbnRpdHlDb29yZGluYXRlcykge1xuICAgICAgICBjb25zdCBmb250U2l6ZSA9IG9sRmVhdHVyZVxuICAgICAgICAgIC5nZXQoJ2ZvbnRTdHlsZScpXG4gICAgICAgICAgLnNwbGl0KCcgJylbMF1cbiAgICAgICAgICAucmVwbGFjZSgncHgnLCAnJyk7XG4gICAgICAgIGNvbnN0IGZvbnRTdHlsZSA9IG9sRmVhdHVyZVxuICAgICAgICAgIC5nZXQoJ2ZvbnRTdHlsZScpXG4gICAgICAgICAgLnN1YnN0cmluZyhvbEZlYXR1cmUuZ2V0KCdmb250U3R5bGUnKS5pbmRleE9mKCcgJykgKyAxKTtcblxuICAgICAgICBjb25zdCBmaWxsQ29sb3IgPSBvbEZlYXR1cmUuZ2V0KCdkcmF3aW5nU3R5bGUnKS5maWxsO1xuICAgICAgICBjb25zdCBzdHJva2VDb2xvciA9IG9sRmVhdHVyZS5nZXQoJ2RyYXdpbmdTdHlsZScpLnN0cm9rZTtcblxuICAgICAgICBjb25zdCBvZmZzZXRYID0gb2xGZWF0dXJlLmdldCgnb2Zmc2V0WCcpO1xuICAgICAgICBjb25zdCBvZmZzZXRZID0gb2xGZWF0dXJlLmdldCgnb2Zmc2V0WScpO1xuXG4gICAgICAgIGNvbnN0IHJhZDogbnVtYmVyID0gZW50aXR5LnByb3BlcnRpZXMucmFkXG4gICAgICAgICAgPyBlbnRpdHkucHJvcGVydGllcy5yYWRcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy51cGRhdGVMYWJlbE9mT2xHZW9tZXRyeShvbEdlb21ldHJ5LCBsYWJlbCk7XG4gICAgICAgIHRoaXMudXBkYXRlRm9udFNpemVBbmRTdHlsZShvbEdlb21ldHJ5LCBmb250U2l6ZSwgZm9udFN0eWxlKTtcbiAgICAgICAgdGhpcy51cGRhdGVGaWxsQW5kU3Ryb2tlQ29sb3Iob2xHZW9tZXRyeSwgZmlsbENvbG9yLCBzdHJva2VDb2xvcik7XG4gICAgICAgIHRoaXMudXBkYXRlT2Zmc2V0KG9sR2VvbWV0cnksIG9mZnNldFgsIG9mZnNldFkpO1xuICAgICAgICB0aGlzLnJlcGxhY2VGZWF0dXJlSW5TdG9yZShlbnRpdHksIG9sR2VvbWV0cnksIHJhZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgZmVhdHVyZSB3aXRoIGRyYXcgbGFiZWwgdG8gdGhlIHN0b3JlLiBUaGUgbG9hZGluZyBzdHJhZ2VneSBvZiB0aGUgc3RvcmVcbiAgICogd2lsbCB0cmlnZ2VyIGFuZCBhZGQgdGhlIGZlYXR1cmUgdG8gdGhlIG1hcC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcml2YXRlIGFkZEZlYXR1cmVUb1N0b3JlKFxuICAgIG9sR2VvbWV0cnksXG4gICAgcmFkaXVzPzogbnVtYmVyLFxuICAgIGZlYXR1cmU/OiBGZWF0dXJlV2l0aERyYXdcbiAgKSB7XG4gICAgbGV0IHJhZDogbnVtYmVyO1xuICAgIGxldCBjZW50ZXI0MzI2OiBBcnJheTxudW1iZXI+O1xuICAgIGxldCBwb2ludDQzMjY6IEFycmF5PG51bWJlcj47XG4gICAgbGV0IGxvbjQzMjY6IG51bWJlcjtcbiAgICBsZXQgbGF0NDMyNjogbnVtYmVyO1xuICAgIGNvbnN0IGZlYXR1cmVJZCA9IGZlYXR1cmUgPyBmZWF0dXJlLnByb3BlcnRpZXMuaWQgOiBvbEdlb21ldHJ5Lm9sX3VpZDtcbiAgICBjb25zdCBwcm9qZWN0aW9uID0gdGhpcy5tYXAub2wuZ2V0VmlldygpLmdldFByb2plY3Rpb24oKTtcblxuICAgIGNvbnN0IGdlb21ldHJ5ID0gbmV3IE9sR2VvSlNPTigpLndyaXRlR2VvbWV0cnlPYmplY3Qob2xHZW9tZXRyeSwge1xuICAgICAgZmVhdHVyZVByb2plY3Rpb246IHByb2plY3Rpb24sXG4gICAgICBkYXRhUHJvamVjdGlvbjogcHJvamVjdGlvblxuICAgIH0pIGFzIGFueTtcblxuICAgIGlmIChvbEdlb21ldHJ5IGluc3RhbmNlb2YgT2xDaXJjbGUgfHwgcmFkaXVzKSB7XG4gICAgICBpZiAocmFkaXVzKSB7XG4gICAgICAgIHJhZCA9IHJhZGl1cztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGdlb21ldHJ5LnR5cGUgPSAnUG9pbnQnO1xuICAgICAgICBnZW9tZXRyeS5jb29yZGluYXRlcyA9IG9sR2VvbWV0cnkuZ2V0Q2VudGVyKCk7XG4gICAgICAgIGNvbnN0IGV4dGVudDQzMjYgPSB0cmFuc2Zvcm0oXG4gICAgICAgICAgW1xuICAgICAgICAgICAgb2xHZW9tZXRyeS5nZXRGbGF0Q29vcmRpbmF0ZXMoKVsyXSxcbiAgICAgICAgICAgIG9sR2VvbWV0cnkuZ2V0RmxhdENvb3JkaW5hdGVzKClbM11cbiAgICAgICAgICBdLFxuICAgICAgICAgIHByb2plY3Rpb24sXG4gICAgICAgICAgJ0VQU0c6NDMyNidcbiAgICAgICAgKTtcbiAgICAgICAgY2VudGVyNDMyNiA9IHRyYW5zZm9ybShcbiAgICAgICAgICBbXG4gICAgICAgICAgICBvbEdlb21ldHJ5LmdldEZsYXRDb29yZGluYXRlcygpWzBdLFxuICAgICAgICAgICAgb2xHZW9tZXRyeS5nZXRGbGF0Q29vcmRpbmF0ZXMoKVsxXVxuICAgICAgICAgIF0sXG4gICAgICAgICAgcHJvamVjdGlvbixcbiAgICAgICAgICAnRVBTRzo0MzI2J1xuICAgICAgICApO1xuICAgICAgICBsb240MzI2ID0gY2VudGVyNDMyNlswXTtcbiAgICAgICAgbGF0NDMyNiA9IGNlbnRlcjQzMjZbMV07XG4gICAgICAgIHJhZCA9IGdldERpc3RhbmNlKGNlbnRlcjQzMjYsIGV4dGVudDQzMjYpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChvbEdlb21ldHJ5IGluc3RhbmNlb2YgT2xQb2ludCkge1xuICAgICAgcG9pbnQ0MzI2ID0gdHJhbnNmb3JtKFxuICAgICAgICBvbEdlb21ldHJ5LmdldEZsYXRDb29yZGluYXRlcygpLFxuICAgICAgICBwcm9qZWN0aW9uLFxuICAgICAgICAnRVBTRzo0MzI2J1xuICAgICAgKTtcbiAgICAgIGxvbjQzMjYgPSBwb2ludDQzMjZbMF07XG4gICAgICBsYXQ0MzI2ID0gcG9pbnQ0MzI2WzFdO1xuICAgIH1cblxuICAgIHRoaXMuc3RvcmUudXBkYXRlKHtcbiAgICAgIHR5cGU6IEZFQVRVUkUsXG4gICAgICBnZW9tZXRyeSxcbiAgICAgIHByb2plY3Rpb246IHByb2plY3Rpb24uZ2V0Q29kZSgpLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBpZDogZmVhdHVyZUlkLFxuICAgICAgICBkcmF3OiBvbEdlb21ldHJ5LmdldCgnX2xhYmVsJyksXG4gICAgICAgIGxvbmdpdHVkZTogbG9uNDMyNiA/IGxvbjQzMjYgOiBudWxsLFxuICAgICAgICBsYXRpdHVkZTogbGF0NDMyNiA/IGxhdDQzMjYgOiBudWxsLFxuICAgICAgICByYWQ6IHJhZCA/IHJhZCA6IG51bGwsXG4gICAgICAgIGZvbnRTdHlsZTogb2xHZW9tZXRyeS5nZXQoJ2ZvbnRTdHlsZV8nKSxcbiAgICAgICAgZHJhd2luZ1N0eWxlOiB7XG4gICAgICAgICAgZmlsbDogb2xHZW9tZXRyeS5nZXQoJ2ZpbGxDb2xvcl8nKSxcbiAgICAgICAgICBzdHJva2U6IG9sR2VvbWV0cnkuZ2V0KCdzdHJva2VDb2xvcl8nKVxuICAgICAgICB9LFxuICAgICAgICBvZmZzZXRYOiBvbEdlb21ldHJ5LmdldCgnb2Zmc2V0WF8nKSxcbiAgICAgICAgb2Zmc2V0WTogb2xHZW9tZXRyeS5nZXQoJ29mZnNldFlfJylcbiAgICAgIH0sXG4gICAgICBtZXRhOiB7XG4gICAgICAgIGlkOiBmZWF0dXJlSWRcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRGb3JtKCkge1xuICAgIHRoaXMuZm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgZmlsbDogWycnXSxcbiAgICAgIHN0cm9rZTogWycnXVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSB1c2VyIGRvdWJsZS1jbGlja3MgdGhlIHNlbGVjdGVkIGRyYXdpbmdcbiAgICovXG4gIGVkaXRMYWJlbERyYXdpbmcoKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQudmFsdWUubGVuZ3RoKSB7XG4gICAgICBjb25zdCBvbEdlb21ldHJ5ID0gZmVhdHVyZVRvT2woXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQudmFsdWVbMF0sXG4gICAgICAgIHRoaXMubWFwLm9sLmdldFZpZXcoKS5nZXRQcm9qZWN0aW9uKCkuZ2V0Q29kZSgpXG4gICAgICApO1xuICAgICAgdGhpcy5vcGVuRHJhd0RpYWxvZyhvbEdlb21ldHJ5LCBmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgb3BlblNob3JjdXRzRGlhbG9nKCkge1xuICAgIHRoaXMuZGlhbG9nLm9wZW4oRHJhd1Nob3JjdXRzQ29tcG9uZW50KTtcbiAgfVxuXG4gIGRlbGV0ZURyYXdpbmdzKCkge1xuICAgIHRoaXMuc3RvcmUuZGVsZXRlTWFueSh0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLnZhbHVlKTtcbiAgICB0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLnZhbHVlLmZvckVhY2goKHNlbGVjdGVkRmVhdHVyZSkgPT4ge1xuICAgICAgdGhpcy5vbERyYXdpbmdMYXllclNvdXJjZS5nZXRGZWF0dXJlcygpLmZvckVhY2goKGRyYXdpbmdMYXllckZlYXR1cmUpID0+IHtcbiAgICAgICAgY29uc3QgZ2VvbWV0cnkgPSBkcmF3aW5nTGF5ZXJGZWF0dXJlLmdldEdlb21ldHJ5KCkgYXMgYW55O1xuICAgICAgICBpZiAoc2VsZWN0ZWRGZWF0dXJlLnByb3BlcnRpZXMuaWQgPT09IGdlb21ldHJ5Lm9sX3VpZCkge1xuICAgICAgICAgIHRoaXMub2xEcmF3aW5nTGF5ZXJTb3VyY2UucmVtb3ZlRmVhdHVyZShkcmF3aW5nTGF5ZXJGZWF0dXJlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy51cGRhdGVIZWlnaHRUYWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSB1c2VyIHRvZ2dsZXMgdGhlIGxhYmVscyB0b2dnbGVcbiAgICovXG4gIG9uVG9nZ2xlTGFiZWxzKCkge1xuICAgIHRoaXMuZHJhd1N0eWxlU2VydmljZS50b2dnbGVMYWJlbHNBcmVTaG93bigpO1xuICAgIHRoaXMubGFiZWxzQXJlU2hvd24gPSAhdGhpcy5sYWJlbHNBcmVTaG93bjtcbiAgICB0aGlzLmljb25cbiAgICAgID8gdGhpcy5vbkNvbG9yQ2hhbmdlKFxuICAgICAgICAgIHRoaXMubGFiZWxzQXJlU2hvd24sXG4gICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICB0aGlzLmZpbGxDb2xvcixcbiAgICAgICAgICB0aGlzLnN0cm9rZUNvbG9yXG4gICAgICAgIClcbiAgICAgIDogdGhpcy5vbkNvbG9yQ2hhbmdlKFxuICAgICAgICAgIHRoaXMubGFiZWxzQXJlU2hvd24sXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgdGhpcy5maWxsQ29sb3IsXG4gICAgICAgICAgdGhpcy5zdHJva2VDb2xvclxuICAgICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSB1c2VyIHRvZ2dsZXMgdGhlIERyYXcgY29udHJvbCBpcyB0b2dnbGVkXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgb25Ub2dnbGVEcmF3Q29udHJvbCh0b2dnbGVJc0NoZWNrZWQ6IGJvb2xlYW4pIHtcbiAgICB0b2dnbGVJc0NoZWNrZWQgPyB0aGlzLnRvZ2dsZURyYXdDb250cm9sKCkgOiB0aGlzLmRlYWN0aXZhdGVEcmF3Q29udHJvbCgpO1xuICB9XG5cbiAgLy8gVXNlciBjaGFuZ2VzIHByb3BlcnRpZXMgb2YgYSBkcmF3aW5nIGVsZW1lbnRcblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIHVzZXIgY2hhbmdlcyB0aGUgY29sb3IgaW4gYSBjb2xvciBwaWNrZXJcbiAgICogQHBhcmFtIGxhYmVsc0FyZVNob3duIHdoZXRlciB0aGUgbGFiZWxzIGFyZSBzaG93biBvciBub3RcbiAgICogQHBhcmFtIGlzQW5JY29uIHdoZXRlciB0aGUgZmVhdHVyZSBpcyBhbiBpY29uIG9yIG5vdFxuICAgKiBAcGFyYW0gZmlsbENvbG9yIHdoaWNoIGlzIHRoZSBmaWxsaW5nIGNvbG9yXG4gICAqIEBwYXJhbSBzdHJva2VDb2xvciB3aGljaCBpcyB0aGUgc3Ryb2tlIGNvbG9yXG4gICAqL1xuICBvbkNvbG9yQ2hhbmdlKFxuICAgIGxhYmVsc0FyZVNob3duOiBib29sZWFuLFxuICAgIGlzQW5JY29uOiBib29sZWFuLFxuICAgIGZpbGxDb2xvcjogc3RyaW5nLFxuICAgIHN0cm9rZUNvbG9yOiBzdHJpbmdcbiAgKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQudmFsdWUubGVuZ3RoID4gMCAmJiAhaXNBbkljb24pIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQudmFsdWUuZm9yRWFjaCgoZmVhdHVyZSkgPT4ge1xuICAgICAgICBsZXQgb2xGZWF0dXJlID0gZmVhdHVyZVRvT2woXG4gICAgICAgICAgZmVhdHVyZSxcbiAgICAgICAgICB0aGlzLm1hcC5vbC5nZXRWaWV3KCkuZ2V0UHJvamVjdGlvbigpLmdldENvZGUoKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnVwZGF0ZUZpbGxBbmRTdHJva2VDb2xvcihvbEZlYXR1cmUsIGZpbGxDb2xvciwgc3Ryb2tlQ29sb3IpO1xuXG4gICAgICAgIGNvbnN0IGVudGl0eSA9IHRoaXMuc3RvcmVcbiAgICAgICAgICAuYWxsKClcbiAgICAgICAgICAuZmluZCgoZSkgPT4gZS5tZXRhLmlkID09PSBvbEZlYXR1cmUuZ2V0SWQoKSk7XG4gICAgICAgIGVudGl0eS5wcm9wZXJ0aWVzLmRyYXdpbmdTdHlsZS5maWxsID0gb2xGZWF0dXJlLmdldCgnZmlsbENvbG9yXycpO1xuICAgICAgICBlbnRpdHkucHJvcGVydGllcy5kcmF3aW5nU3R5bGUuc3Ryb2tlID0gb2xGZWF0dXJlLmdldCgnc3Ryb2tlQ29sb3JfJyk7XG4gICAgICAgIHRoaXMuc3RvcmUudXBkYXRlKGVudGl0eSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5maWxsQ29sb3IgPSBmaWxsQ29sb3I7XG4gICAgdGhpcy5zdHJva2VDb2xvciA9IHN0cm9rZUNvbG9yO1xuXG4gICAgdGhpcy5lbGVtZW50U3R5bGUobGFiZWxzQXJlU2hvd24sIGlzQW5JY29uKTtcbiAgICB0aGlzLmNyZWF0ZURyYXdDb250cm9sKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIHVzZXIgY2hhbmdlcyB0aGUgZm9udCBzaXplIG9yL2FuZCBzdHlsZVxuICAgKiBAcGFyYW0gbGFiZWxzQXJlU2hvd24gd2hldGVyIHRoZSBsYWJlbHMgYXJlIHNob3duIG9yIG5vdFxuICAgKiBAcGFyYW0gc2l6ZSB0aGUgc2l6ZSBvZiB0aGUgZm9udFxuICAgKiBAcGFyYW0gc3R5bGUgdGhlIHN0eWxlIG9mIHRoZSBmb250XG4gICAqL1xuXG4gIG9uRm9udENoYW5nZShsYWJlbHNBcmVTaG93bjogYm9vbGVhbiwgc2l6ZTogc3RyaW5nLCBzdHlsZTogRm9udFR5cGUpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZEZlYXR1cmVzJC52YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLnZhbHVlLmZvckVhY2goKGZlYXR1cmUpID0+IHtcbiAgICAgICAgbGV0IG9sRmVhdHVyZSA9IGZlYXR1cmVUb09sKFxuICAgICAgICAgIGZlYXR1cmUsXG4gICAgICAgICAgdGhpcy5tYXAub2wuZ2V0VmlldygpLmdldFByb2plY3Rpb24oKS5nZXRDb2RlKClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy51cGRhdGVGb250U2l6ZUFuZFN0eWxlKG9sRmVhdHVyZSwgc2l6ZSwgc3R5bGUpO1xuICAgICAgICBjb25zdCBlbnRpdHkgPSB0aGlzLnN0b3JlXG4gICAgICAgICAgLmFsbCgpXG4gICAgICAgICAgLmZpbmQoKGUpID0+IGUubWV0YS5pZCA9PT0gb2xGZWF0dXJlLmdldElkKCkpO1xuICAgICAgICBlbnRpdHkucHJvcGVydGllcy5mb250U3R5bGUgPSBvbEZlYXR1cmUuZ2V0KCdmb250U3R5bGVfJyk7XG4gICAgICAgIHRoaXMuc3RvcmUudXBkYXRlKGVudGl0eSk7XG4gICAgICAgIG9sRmVhdHVyZSA9IHRoaXMuc3RvcmUubGF5ZXIub2wuZ2V0U291cmNlKCkuZ2V0RmVhdHVyZXMoKS5maW5kKGYgPT4gZi5nZXRJZCgpID09PSBlbnRpdHkubWV0YS5pZCk7XG4gICAgICAgIG9sRmVhdHVyZS5zZXRQcm9wZXJ0aWVzKHsgZm9udFN0eWxlOiBlbnRpdHkucHJvcGVydGllcy5mb250U3R5bGUgfSk7XG4gICAgICAgIG9sRmVhdHVyZS5jaGFuZ2VkKCk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5mb250U2l6ZSA9IHNpemU7XG4gICAgICB0aGlzLmZvbnRTdHlsZSA9IHN0eWxlO1xuXG4gICAgICB0aGlzLmRyYXdTdHlsZVNlcnZpY2Uuc2V0Rm9udFNpemUoc2l6ZSk7XG4gICAgICB0aGlzLmRyYXdTdHlsZVNlcnZpY2Uuc2V0Rm9udFN0eWxlKHN0eWxlKTtcblxuICAgICAgdGhpcy5lbGVtZW50U3R5bGUobGFiZWxzQXJlU2hvd24pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgdXNlciBjaGFuZ2VzIHRoZSB2YWx1ZSBvZiB0aGUgaG9yaXpvbnRhbC92ZXJ0aWNhbCBvZmZzZXRcbiAgICogQHBhcmFtIGxhYmVsc0FyZVNob3duIHdoZXRlciB0aGUgbGFiZWxzIGFyZSBzaG93biBvciBub3RcbiAgICogQHBhcmFtIG9mZnNldFggaG9yaXpvbnRhbCBvZmZzZXQgb2YgdGhlIGxhYmVsXG4gICAqIEBwYXJhbSBvZmZzZXRZIHZlcnRpY2FsIG9mZnNldCBvZiB0aGUgbGFiZWxcbiAgICovXG5cbiAgb25PZmZzZXRMYWJlbENoYW5nZShcbiAgICBsYWJlbHNBcmVTaG93bjogYm9vbGVhbixcbiAgICBvZmZzZXRYOiBudW1iZXIsXG4gICAgb2Zmc2V0WTogbnVtYmVyXG4gICkge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLnZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQudmFsdWUuZm9yRWFjaCgoZmVhdHVyZSkgPT4ge1xuICAgICAgICBsZXQgb2xGZWF0dXJlID0gZmVhdHVyZVRvT2woXG4gICAgICAgICAgZmVhdHVyZSxcbiAgICAgICAgICB0aGlzLm1hcC5vbC5nZXRWaWV3KCkuZ2V0UHJvamVjdGlvbigpLmdldENvZGUoKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnVwZGF0ZU9mZnNldChvbEZlYXR1cmUsIG9mZnNldFgsIG9mZnNldFkpO1xuICAgICAgICBjb25zdCBlbnRpdHkgPSB0aGlzLnN0b3JlXG4gICAgICAgICAgLmFsbCgpXG4gICAgICAgICAgLmZpbmQoKGUpID0+IGUubWV0YS5pZCA9PT0gb2xGZWF0dXJlLmdldElkKCkpO1xuICAgICAgICBlbnRpdHkucHJvcGVydGllcy5vZmZzZXRYID0gb2xGZWF0dXJlLmdldCgnb2Zmc2V0WF8nKTtcbiAgICAgICAgZW50aXR5LnByb3BlcnRpZXMub2Zmc2V0WSA9IG9sRmVhdHVyZS5nZXQoJ29mZnNldFlfJyk7XG4gICAgICAgIHRoaXMuc3RvcmUudXBkYXRlKGVudGl0eSk7XG4gICAgICAgIG9sRmVhdHVyZSA9IHRoaXMuc3RvcmUubGF5ZXIub2wuZ2V0U291cmNlKCkuZ2V0RmVhdHVyZXMoKS5maW5kKGYgPT4gZi5nZXRJZCgpID09PSBlbnRpdHkubWV0YS5pZCk7XG4gICAgICAgIG9sRmVhdHVyZS5zZXRQcm9wZXJ0aWVzKHsgb2Zmc2V0WDogZW50aXR5LnByb3BlcnRpZXMub2Zmc2V0WCwgb2Zmc2V0WTogZW50aXR5LnByb3BlcnRpZXMub2Zmc2V0WSB9KTtcbiAgICAgICAgb2xGZWF0dXJlLmNoYW5nZWQoKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5lbGVtZW50U3R5bGUobGFiZWxzQXJlU2hvd24pO1xuICAgIH1cbiAgfVxuXG4gIG9uSWNvbkNoYW5nZShldmVudD8pIHtcbiAgICB0aGlzLmljb24gPSBldmVudDtcbiAgICB0aGlzLmRyYXdTdHlsZVNlcnZpY2Uuc2V0SWNvbih0aGlzLmljb24pO1xuICAgIHRoaXMuZWxlbWVudFN0eWxlKHRydWUsIHRoaXMuaWNvbik7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIHVzZXIgc2VsZWN0cyBhIG5ldyBnZW9tZXRyeSB0eXBlXG4gICAqIEBwYXJhbSBnZW9tZXRyeVR5cGUgdGhlIGdlb21ldHJ5IHR5cGUgc2VsZWN0ZWQgYnkgdGhlIHVzZXJcbiAgICovXG4gIG9uR2VvbWV0cnlUeXBlQ2hhbmdlKGdlb21ldHJ5VHlwZTogVHlwZSkge1xuICAgIHRoaXMuZHJhd0NvbnRyb2wuc2V0R2VvbWV0cnlUeXBlKGdlb21ldHJ5VHlwZSk7XG4gICAgdGhpcy50b2dnbGVEcmF3Q29udHJvbCgpO1xuICB9XG5cbiAgLy8gVXBkYXRlcyB0aGUgcHJvcGVydGllcyBvZiBvbEZlYXR1cmUgaW5wdXR0ZWRcblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBsYWJlbCBvZiBhIGdlb21ldHJ5IHdoZW4gYSBsYWJlbCBpcyBlbnRlcmVkIGluIGEgZGlhbG9nIGJveFxuICAgKiBAcGFyYW0gb2xHZW9tZXRyeSB0aGUgZ2VvbWV0cnlcbiAgICogQHBhcmFtIGxhYmVsIHRoZSBsYWJlbFxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVMYWJlbE9mT2xHZW9tZXRyeShvbEdlb21ldHJ5OiBPbEdlb21ldHJ5LCBsYWJlbDogc3RyaW5nKSB7XG4gICAgb2xHZW9tZXRyeS5zZXRQcm9wZXJ0aWVzKFxuICAgICAge1xuICAgICAgICBfbGFiZWw6IGxhYmVsXG4gICAgICB9LFxuICAgICAgdHJ1ZVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUZvbnRTaXplQW5kU3R5bGUoXG4gICAgb2xGZWF0dXJlOiBPbEZlYXR1cmU8T2xHZW9tZXRyeT4sXG4gICAgZm9udFNpemU6IHN0cmluZyxcbiAgICBmb250U3R5bGU6IHN0cmluZ1xuICApIHtcbiAgICBvbEZlYXR1cmUuc2V0UHJvcGVydGllcyhcbiAgICAgIHtcbiAgICAgICAgZm9udFN0eWxlXzogYCR7Zm9udFNpemV9cHggJHtmb250U3R5bGV9YFxuICAgICAgfSxcbiAgICAgIHRydWVcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVGaWxsQW5kU3Ryb2tlQ29sb3IoXG4gICAgb2xGZWF0dXJlOiBPbEZlYXR1cmU8T2xHZW9tZXRyeT4sXG4gICAgZmlsbENvbG9yOiBzdHJpbmcsXG4gICAgc3Ryb2tlQ29sb3I6IHN0cmluZ1xuICApIHtcbiAgICBvbEZlYXR1cmUuc2V0UHJvcGVydGllcyhcbiAgICAgIHtcbiAgICAgICAgZmlsbENvbG9yXzogZmlsbENvbG9yLFxuICAgICAgICBzdHJva2VDb2xvcl86IHN0cm9rZUNvbG9yXG4gICAgICB9LFxuICAgICAgdHJ1ZVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU9mZnNldChcbiAgICBvbEZlYXR1cmU6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PixcbiAgICBvZmZzZXRYOiBudW1iZXIsXG4gICAgb2Zmc2V0WTogbnVtYmVyXG4gICkge1xuICAgIG9sRmVhdHVyZS5zZXRQcm9wZXJ0aWVzKFxuICAgICAge1xuICAgICAgICBvZmZzZXRYXzogb2Zmc2V0WCxcbiAgICAgICAgb2Zmc2V0WV86IG9mZnNldFlcbiAgICAgIH0sXG4gICAgICB0cnVlXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB0aGUgYW1vdW50IG9mIHJvd3MgYXMgYSBwb3NzaWJsZSBhbHRlcm5hdGl2ZVxuICAgKi9cbiAgdXBkYXRlSGVpZ2h0VGFibGUoKSB7XG4gICAgdGhpcy5udW1iZXJPZkRyYXdpbmdzID0gdGhpcy5zdG9yZS5jb3VudCQuZ2V0VmFsdWUoKTtcbiAgICB0aGlzLm51bWJlck9mRHJhd2luZ3MgPiAxMCA/IHRoaXMudGFibGVUZW1wbGF0ZS50YWJsZUhlaWdodCA9ICczNXZoJzogdGhpcy50YWJsZVRlbXBsYXRlLnRhYmxlSGVpZ2h0ID0gJ2F1dG8nO1xuICB9XG5cbiAgLyoqXG4gICAqIEFjdGl2YXRlIHRoZSBjb3JyZWN0IGNvbnRyb2xcbiAgICovXG4gIHByaXZhdGUgdG9nZ2xlRHJhd0NvbnRyb2woKSB7XG4gICAgdGhpcy5kZWFjdGl2YXRlRHJhd0NvbnRyb2woKTtcbiAgICB0aGlzLmFjdGl2YXRlRHJhd0NvbnRyb2woKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciB0aGUgdG9vbHRpcHMgb2YgYW4gT0wgZ2VvbWV0cnlcbiAgICogQHBhcmFtIG9sR2VvbWV0cnkgT0wgZ2VvbWV0cnkgd2l0aCB0b29sdGlwc1xuICAgKi9cbiAgcHJpdmF0ZSBjbGVhckxhYmVsc09mT2xHZW9tZXRyeShvbEdlb21ldHJ5KSB7XG4gICAgZ2V0VG9vbHRpcHNPZk9sR2VvbWV0cnkob2xHZW9tZXRyeSkuZm9yRWFjaChcbiAgICAgIChvbFRvb2x0aXA6IE9sT3ZlcmxheSB8IHVuZGVmaW5lZCkgPT4ge1xuICAgICAgICBpZiAob2xUb29sdGlwICYmIG9sVG9vbHRpcC5nZXRNYXAoKSkge1xuICAgICAgICAgIHRoaXMubWFwLm9sLnJlbW92ZU92ZXJsYXkob2xUb29sdGlwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIFJlcGxhY2UgdGhlIGZlYXR1cmUgaW4gdGhlIHN0b3JlXG4gICAqIEBwYXJhbSBlbnRpdHkgdGhlIGVudGl0eSB0byByZXBsYWNlXG4gICAqIEBwYXJhbSBvbEdlb21ldHJ5IHRoZSBuZXcgZ2VvbWV0cnkgdG8gaW5zZXJ0IGluIHRoZSBzdG9yZVxuICAgKi9cbiAgcHJpdmF0ZSByZXBsYWNlRmVhdHVyZUluU3RvcmUoXG4gICAgZW50aXR5LFxuICAgIG9sR2VvbWV0cnk6IE9sR2VvbWV0cnksXG4gICAgcmFkaXVzPzogbnVtYmVyXG4gICkge1xuICAgIHRoaXMuc3RvcmUuZGVsZXRlKGVudGl0eSk7XG4gICAgdGhpcy5vbkRyYXdFbmQob2xHZW9tZXRyeSwgcmFkaXVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWFjdGl2YXRlIHRoZSBhY3RpdmUgZHJhdyBjb250cm9sXG4gICAqL1xuICBwcml2YXRlIGRlYWN0aXZhdGVEcmF3Q29udHJvbCgpIHtcbiAgICBpZiAoIXRoaXMuZHJhd0NvbnRyb2wpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kcmF3RW5kJCQpIHtcbiAgICAgIHRoaXMuZHJhd0VuZCQkLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgdGhpcy5kcmF3Q29udHJvbC5zZXRPbE1hcCh1bmRlZmluZWQpO1xuICAgIHRoaXMuZHJhd0NvbnRyb2xJc0FjdGl2ZSA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFjdGl2YXRlIGEgZ2l2ZW4gY29udHJvbFxuICAgKi9cbiAgcHJpdmF0ZSBhY3RpdmF0ZURyYXdDb250cm9sKCkge1xuICAgIHRoaXMuZHJhd0NvbnRyb2xJc0Rpc2FibGVkID0gZmFsc2U7XG4gICAgdGhpcy5kcmF3Q29udHJvbElzQWN0aXZlID0gdHJ1ZTtcbiAgICB0aGlzLmRyYXdFbmQkJCA9IHRoaXMuZHJhd0NvbnRyb2wuZW5kJC5zdWJzY3JpYmUoXG4gICAgICAob2xHZW9tZXRyeTogT2xHZW9tZXRyeSkgPT4ge1xuICAgICAgICB0aGlzLm9wZW5EcmF3RGlhbG9nKG9sR2VvbWV0cnksIHRydWUpO1xuICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLmRyYXdDb250cm9sLm1vZGlmeSQuc3Vic2NyaWJlKChvbEdlb21ldHJ5OiBPbEdlb21ldHJ5KSA9PiB7XG4gICAgICB0aGlzLm9uTW9kaWZ5RHJhdyhvbEdlb21ldHJ5KTtcbiAgICB9KTtcblxuICAgIGlmICghdGhpcy5kcmF3U2VsZWN0JCQpIHtcbiAgICAgIHRoaXMuZHJhd1NlbGVjdCQkID0gdGhpcy5kcmF3Q29udHJvbC5zZWxlY3QkLnN1YnNjcmliZShcbiAgICAgICAgKG9sRmVhdHVyZTogT2xGZWF0dXJlPE9sR2VvbWV0cnk+KSA9PiB7XG4gICAgICAgICAgdGhpcy5vcGVuRHJhd0RpYWxvZyhvbEZlYXR1cmUsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmRyYXdDb250cm9sLnNldE9sTWFwKHRoaXMubWFwLm9sLCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNyZWF0ZXMgdGhlIHN0eWxlIG9mIHRoZSBmZWF0dXJlIHN0b3JlZFxuICAgKi9cbiAgcHJpdmF0ZSBlbGVtZW50U3R5bGUobGFiZWxzQXJlU2hvd246IGJvb2xlYW4sIGlzQW5JY29uPykge1xuICAgIGlmIChpc0FuSWNvbikge1xuICAgICAgdGhpcy5zdG9yZS5sYXllci5vbC5zZXRTdHlsZSgoZmVhdHVyZSwgcmVzb2x1dGlvbikgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kcmF3U3R5bGVTZXJ2aWNlLmNyZWF0ZUluZGl2aWR1YWxFbGVtZW50U3R5bGUoXG4gICAgICAgICAgZmVhdHVyZSxcbiAgICAgICAgICByZXNvbHV0aW9uLFxuICAgICAgICAgIGxhYmVsc0FyZVNob3duLFxuICAgICAgICAgIGZlYXR1cmUuZ2V0KCdmb250U3R5bGUnKSxcbiAgICAgICAgICBmZWF0dXJlLmdldCgnZHJhd2luZ1N0eWxlJykuZmlsbCxcbiAgICAgICAgICBmZWF0dXJlLmdldCgnZHJhd2luZ1N0eWxlJykuc3Ryb2tlLFxuICAgICAgICAgIGZlYXR1cmUuZ2V0KCdvZmZzZXRYJyksXG4gICAgICAgICAgZmVhdHVyZS5nZXQoJ29mZnNldFknKSxcbiAgICAgICAgICB0aGlzLmljb25cbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0b3JlLmxheWVyLm9sLnNldFN0eWxlKChmZWF0dXJlLCByZXNvbHV0aW9uKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRyYXdTdHlsZVNlcnZpY2UuY3JlYXRlSW5kaXZpZHVhbEVsZW1lbnRTdHlsZShcbiAgICAgICAgICBmZWF0dXJlLFxuICAgICAgICAgIHJlc29sdXRpb24sXG4gICAgICAgICAgbGFiZWxzQXJlU2hvd24sXG4gICAgICAgICAgZmVhdHVyZS5nZXQoJ2ZvbnRTdHlsZScpLFxuICAgICAgICAgIGZlYXR1cmUuZ2V0KCdkcmF3aW5nU3R5bGUnKS5maWxsLFxuICAgICAgICAgIGZlYXR1cmUuZ2V0KCdkcmF3aW5nU3R5bGUnKS5zdHJva2UsXG4gICAgICAgICAgZmVhdHVyZS5nZXQoJ29mZnNldFgnKSxcbiAgICAgICAgICBmZWF0dXJlLmdldCgnb2Zmc2V0WScpXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXY+XG4gIDxkaXYgY2xhc3M9XCJnZW9tZXRyeS10eXBlLXRvZ2dsZSBtYXQtdHlwb2dyYXBoeVwiPlxuICAgIDxtYXQtYnV0dG9uLXRvZ2dsZS1ncm91cFxuICAgICAgKGNoYW5nZSk9XCJvbkdlb21ldHJ5VHlwZUNoYW5nZSgkZXZlbnQudmFsdWUpXCIgW3ZhbHVlXT1cImdlb21ldHJ5VHlwZS5Qb2ludFwiPlxuICAgICAgPG1hdC1idXR0b24tdG9nZ2xlIFt2YWx1ZV09XCJnZW9tZXRyeVR5cGUuUG9pbnRcIj5cbiAgICAgICAge3snaWdvLmdlby5kcmF3LicgKyBnZW9tZXRyeVR5cGUuUG9pbnQgfCB0cmFuc2xhdGV9fVxuICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cblxuICAgICAgPG1hdC1idXR0b24tdG9nZ2xlIFt2YWx1ZV09XCJnZW9tZXRyeVR5cGUuTGluZVN0cmluZ1wiPlxuICAgICAgICB7eydpZ28uZ2VvLmRyYXcuJyArIGdlb21ldHJ5VHlwZS5MaW5lU3RyaW5nIHwgdHJhbnNsYXRlfX1cbiAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XG5cbiAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSBbdmFsdWVdPVwiZ2VvbWV0cnlUeXBlLlBvbHlnb25cIj5cbiAgICAgICAge3snaWdvLmdlby5kcmF3LicgKyBnZW9tZXRyeVR5cGUuUG9seWdvbiB8IHRyYW5zbGF0ZX19XG4gICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxuXG4gICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgW3ZhbHVlXT1cImdlb21ldHJ5VHlwZS5DaXJjbGVcIj5cbiAgICAgICAge3snaWdvLmdlby5kcmF3LicgKyBnZW9tZXRyeVR5cGUuQ2lyY2xlIHwgdHJhbnNsYXRlfX1cbiAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XG4gICAgPC9tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cD5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImRyYXctb3B0aW9ucyBtYXQtdHlwb2dyYXBoeVwiPlxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlXG4gICAgICBbZGlzYWJsZWRdPVwiZHJhd0NvbnRyb2xJc0Rpc2FibGVkXCJcbiAgICAgIFtjaGVja2VkXT1cImRyYXdDb250cm9sSXNBY3RpdmVcIlxuICAgICAgW2xhYmVsUG9zaXRpb25dPVwiJ2JlZm9yZSdcIlxuICAgICAgKGNoYW5nZSk9XCJvblRvZ2dsZURyYXdDb250cm9sKCRldmVudC5jaGVja2VkKVwiPlxuICAgICAge3snaWdvLmdlby5zcGF0aWFsRmlsdGVyLmRyYXdDb250cm9sJyB8IHRyYW5zbGF0ZX19XG4gICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuXG4gICAgPG1hdC1zbGlkZS10b2dnbGVcbiAgICAgIFtjaGVja2VkXT1cImxhYmVsc0FyZVNob3duXCJcbiAgICAgIFtsYWJlbFBvc2l0aW9uXT1cIidiZWZvcmUnXCJcbiAgICAgIChjaGFuZ2UpPVwib25Ub2dnbGVMYWJlbHMoKVwiPlxuICAgICAge3snaWdvLmdlby5kcmF3LnRvZ2dsZU1hcFRvb2x0aXBzJyB8IHRyYW5zbGF0ZX19XG4gICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICA8L2Rpdj5cblxuICA8ZGl2PlxuICAgIDxidXR0b24gKm5nSWY9XCJzdG9yZS5jb3VudCQuZ2V0VmFsdWUoKSA+IDBcIlxuICAgICAgY2xhc3M9XCJkZWxldGVCdG5cIlxuICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICBjb2xvcj1cIndhcm5cIlxuICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcbiAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8uZHJhdy5kZWxldGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgIFtkaXNhYmxlZF09XCIoc2VsZWN0ZWRGZWF0dXJlcyQgfCBhc3luYykubGVuZ3RoID09PSAwXCJcbiAgICAgIChjbGljayk9XCJkZWxldGVEcmF3aW5ncygpXCI+XG4gICAgICA8bWF0LWljb24gc3ZnSWNvbj1cImRlbGV0ZVwiPjwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG5cbiAgICA8ZGl2PlxuICAgICAgPGlnby1lbnRpdHktdGFibGVcbiAgICAgICAgI3RhYmxlXG4gICAgICAgIGNsYXNzPVwidGFibGUtY29tcGFjdFwiXG4gICAgICAgIGlkPVwic3RvcmVFbGVtZW50c1wiXG4gICAgICAgIFtzdG9yZV09XCJzdG9yZVwiXG4gICAgICAgIFt0ZW1wbGF0ZV09XCJ0YWJsZVRlbXBsYXRlXCJcbiAgICAgICAgKGRibGNsaWNrKT1cImVkaXRMYWJlbERyYXdpbmcoKVwiPlxuICAgICAgPC9pZ28tZW50aXR5LXRhYmxlPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiaWNvbi1vcHRpb25zXCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwiaWNvbnMubGVuZ3RoID49IDFcIj5cbiAgICAgIDxtYXQtbGFiZWw+e3sgJ2lnby5nZW8uZHJhdy5pY29uJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgPG1hdC1zZWxlY3Q+XG4gICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImljb25cIiBjbGFzcz1cImJveFwiPlxuICAgICAgICAgICAgPGltZyBzcmM9XCJ7eyBpY29uIH19XCI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlwiIChjbGljayk9XCJvbkljb25DaGFuZ2UoKVwiPnt7ICdpZ28uZ2VvLmRyYXcubm9JY29uJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAqbmdGb3I9XCJsZXQgaWNvbl9odG1sIG9mIGljb25zXCJcbiAgICAgICAgICBbdmFsdWVdPVwiaWNvbl9odG1sXCJcbiAgICAgICAgICAoY2xpY2spPVwib25JY29uQ2hhbmdlKGljb25faHRtbClcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm94XCI+XG4gICAgICAgICAgICA8aW1nIHNyYz1cInt7IGljb25faHRtbCB9fVwiPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICA8L21hdC1zZWxlY3Q+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPC9kaXY+XG5cbiAgPGJ1dHRvblxuICAgIG1hdC1pY29uLWJ1dHRvblxuICAgIGNvbG9yPVwiYWNjZW50XCJcbiAgICBkaXNhYmxlUmlwcGxlPVwidHJ1ZVwiXG4gICAgKGNsaWNrKT1cIm9wZW5TaG9yY3V0c0RpYWxvZygpXCI+XG4gICAgPG1hdC1pY29uXG4gICAgICBjbGFzcz1cInNob3J0Y3V0cy1pY29uXCJcbiAgICAgIHN2Z0ljb249XCJrZXlib2FyZC1vdXRsaW5lXCJcbiAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXG4gICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmRyYXcuc2hvcnRjdXRzJyB8IHRyYW5zbGF0ZVwiPlxuICAgIDwvbWF0LWljb24+XG4gIDwvYnV0dG9uPlxuXG4gIDxidXR0b25cbiAgICAqbmdJZj1cInNlbGVjdGVkRmVhdHVyZXMkLnZhbHVlLmxlbmd0aFwiXG4gICAgbWF0LXJhaXNlZC1idXR0b25cbiAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgIChjbGljayk9XCJvcGVuU3R5bGVNb2RhbERpYWxvZygpXCJcbiAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5sYXllci5zdHlsZS5zdHlsZU1vZGFsVG9vbHRpcCcgfCB0cmFuc2xhdGVcIj5cbiAgICB7eydpZ28uZ2VvLmxheWVyLnN0eWxlLnN0eWxlTW9kYWwnIHwgdHJhbnNsYXRlfX1cbiAgICA8bWF0LWljb25cbiAgICAgIGNsYXNzPVwic3R5bGUtaWNvblwiXG4gICAgICBzdmdJY29uPVwicGFsZXR0ZVwiXG4gICAgICBbbWF0QmFkZ2VdPVwic2VsZWN0ZWRGZWF0dXJlcyQudmFsdWUubGVuZ3RoXCJcbiAgICAgIG1hdEJhZGdlQ29sb3I9XCJ3YXJuXCJcbiAgICAgIG1hdEJhZGdlU2l6ZT1cIm1lZGl1bVwiPlxuICAgIDwvbWF0LWljb24+XG4gIDwvYnV0dG9uPlxuPC9kaXY+XG4iXX0=
|