@igo2/geo 17.0.1-next.2 → 18.0.0-next.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/catalog/catalog-browser/catalog-browser-group.component.mjs +4 -4
- package/esm2022/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs +4 -4
- package/esm2022/lib/catalog/catalog-browser/catalog-browser.component.mjs +4 -4
- package/esm2022/lib/catalog/catalog-browser/catalog-browser.module.mjs +5 -5
- package/esm2022/lib/catalog/catalog-library/add-catalog-dialog.component.mjs +4 -4
- package/esm2022/lib/catalog/catalog-library/catalog-library-item.component.mjs +4 -4
- package/esm2022/lib/catalog/catalog-library/catalog-library.component.mjs +4 -4
- package/esm2022/lib/catalog/catalog-library/catalog-library.module.mjs +5 -5
- package/esm2022/lib/catalog/catalog.module.mjs +5 -5
- package/esm2022/lib/catalog/shared/catalog.enum.mjs +1 -1
- package/esm2022/lib/catalog/shared/catalog.service.mjs +4 -4
- package/esm2022/lib/datasource/shared/capabilities.service.mjs +4 -4
- package/esm2022/lib/datasource/shared/datasource.service.mjs +4 -4
- package/esm2022/lib/datasource/shared/datasources/wfs.service.mjs +4 -4
- package/esm2022/lib/datasource/shared/options/options-api.service.mjs +4 -4
- package/esm2022/lib/directions/directions-buttons/directions-buttons.component.mjs +4 -4
- package/esm2022/lib/directions/directions-inputs/directions-inputs.component.mjs +4 -4
- package/esm2022/lib/directions/directions-results/directions-results.component.mjs +4 -4
- package/esm2022/lib/directions/directions-sources/osrm-directions-source.mjs +4 -4
- package/esm2022/lib/directions/directions.component.mjs +4 -4
- package/esm2022/lib/directions/directions.module.mjs +5 -5
- package/esm2022/lib/directions/shared/directions.service.mjs +4 -4
- package/esm2022/lib/download/download-button/download-button.component.mjs +4 -4
- package/esm2022/lib/download/download.module.mjs +5 -5
- package/esm2022/lib/download/shared/download.service.mjs +4 -4
- package/esm2022/lib/draw/draw/draw-layer-popup.component.mjs +4 -4
- package/esm2022/lib/draw/draw/draw-popup.component.mjs +4 -4
- package/esm2022/lib/draw/draw/draw-shorcuts.component.mjs +4 -4
- package/esm2022/lib/draw/draw/draw.component.mjs +4 -4
- package/esm2022/lib/draw/draw/draw.module.mjs +5 -5
- package/esm2022/lib/draw/drawingTool.module.mjs +5 -5
- package/esm2022/lib/draw/shared/draw-icon.service.mjs +4 -4
- package/esm2022/lib/feature/feature-details/feature-details.component.mjs +4 -4
- package/esm2022/lib/feature/feature-details/feature-details.directive.mjs +4 -4
- package/esm2022/lib/feature/feature-details/feature-details.module.mjs +5 -5
- package/esm2022/lib/feature/feature-form/feature-form.component.mjs +4 -4
- package/esm2022/lib/feature/feature-form/feature-form.module.mjs +5 -5
- package/esm2022/lib/feature/feature.module.mjs +5 -5
- package/esm2022/lib/feature/shared/feature-store.utils.mjs +1 -1
- package/esm2022/lib/feature/shared/store.mjs +1 -1
- package/esm2022/lib/filter/filter.module.mjs +5 -5
- package/esm2022/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +4 -4
- package/esm2022/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +4 -4
- package/esm2022/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +4 -4
- package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.mjs +4 -4
- package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +4 -4
- package/esm2022/lib/filter/ogc-filterable-form/ogc-filterable-form.component.mjs +4 -4
- package/esm2022/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +4 -4
- package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.mjs +4 -4
- package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs +4 -4
- package/esm2022/lib/filter/shared/filterable-datasource.pipe.mjs +4 -4
- package/esm2022/lib/filter/shared/ogc-filter-time.service.mjs +4 -4
- package/esm2022/lib/filter/shared/ogc-filter.service.mjs +4 -4
- package/esm2022/lib/filter/shared/spatial-filter.service.mjs +4 -4
- package/esm2022/lib/filter/shared/time-filter.service.mjs +4 -4
- package/esm2022/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +4 -4
- package/esm2022/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs +4 -4
- package/esm2022/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +4 -4
- package/esm2022/lib/filter/time-filter-button/time-filter-button.component.mjs +4 -4
- package/esm2022/lib/filter/time-filter-form/time-filter-form.component.mjs +4 -4
- package/esm2022/lib/filter/time-filter-item/time-filter-item.component.mjs +4 -4
- package/esm2022/lib/filter/time-filter-list/time-filter-list-binding.directive.mjs +4 -4
- package/esm2022/lib/filter/time-filter-list/time-filter-list.component.mjs +4 -4
- package/esm2022/lib/geo.module.mjs +5 -5
- package/esm2022/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs +4 -4
- package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.component.mjs +4 -4
- package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.module.mjs +5 -5
- package/esm2022/lib/geometry/geometry.module.mjs +5 -5
- package/esm2022/lib/import-export/export-button/export-button.component.mjs +4 -4
- package/esm2022/lib/import-export/import-export/import-export.component.mjs +4 -4
- package/esm2022/lib/import-export/import-export.module.mjs +5 -5
- package/esm2022/lib/import-export/shared/drop-geo-file.directive.mjs +4 -4
- package/esm2022/lib/import-export/shared/export.service.mjs +4 -4
- package/esm2022/lib/import-export/shared/import.service.mjs +4 -4
- package/esm2022/lib/layer/layer-item/layer-item.component.mjs +4 -4
- package/esm2022/lib/layer/layer-legend/layer-legend.component.mjs +4 -4
- package/esm2022/lib/layer/layer-legend-item/layer-legend-item.component.mjs +4 -4
- package/esm2022/lib/layer/layer-legend-list/layer-legend-list-binding.directive.mjs +4 -4
- package/esm2022/lib/layer/layer-legend-list/layer-legend-list.component.mjs +4 -4
- package/esm2022/lib/layer/layer-list/layer-list-binding.directive.mjs +4 -4
- package/esm2022/lib/layer/layer-list/layer-list.component.mjs +4 -4
- package/esm2022/lib/layer/layer-list-tool/layer-list-tool.component.mjs +4 -4
- package/esm2022/lib/layer/layer-list-tool/layer-list-tool.service.mjs +4 -4
- package/esm2022/lib/layer/layer.module.mjs +5 -5
- package/esm2022/lib/layer/shared/layer.service.mjs +18 -14
- package/esm2022/lib/layer/shared/layers/image-layer.mjs +1 -1
- package/esm2022/lib/layer/shared/layers/layer.mjs +2 -6
- package/esm2022/lib/layer/shared/layers/tile-layer.mjs +1 -1
- package/esm2022/lib/layer/shared/layers/vector-layer.mjs +3 -3
- package/esm2022/lib/layer/shared/layers/vectortile-layer.mjs +1 -1
- package/esm2022/lib/layer/track-feature-button/track-feature-button.component.mjs +4 -4
- package/esm2022/lib/map/baselayers-switcher/baselayers-switcher.component.mjs +4 -4
- package/esm2022/lib/map/baselayers-switcher/mini-basemap.component.mjs +4 -4
- package/esm2022/lib/map/geolocate-button/geolocate-button.component.mjs +4 -4
- package/esm2022/lib/map/home-extent-button/home-extent-button.component.mjs +4 -4
- package/esm2022/lib/map/info-section/info-section.component.mjs +4 -4
- package/esm2022/lib/map/map-browser/map-browser.component.mjs +4 -4
- package/esm2022/lib/map/map-center/map-center.component.mjs +4 -4
- package/esm2022/lib/map/map.module.mjs +5 -5
- package/esm2022/lib/map/menu-button/menu-button.component.mjs +4 -4
- package/esm2022/lib/map/offline-button/offline-button.component.mjs +4 -4
- package/esm2022/lib/map/rotation-button/rotation-button.component.mjs +4 -4
- package/esm2022/lib/map/shared/hover-feature.directive.mjs +6 -6
- package/esm2022/lib/map/shared/map-pointer-position.directive.mjs +4 -4
- package/esm2022/lib/map/shared/map.mjs +2 -2
- package/esm2022/lib/map/shared/map.service.mjs +4 -4
- package/esm2022/lib/map/shared/mapOffline.directive.mjs +4 -4
- package/esm2022/lib/map/shared/projection.service.mjs +4 -4
- package/esm2022/lib/map/swipe-control/swipe-control.component.mjs +4 -4
- package/esm2022/lib/map/wake-lock-button/wake-lock-button.component.mjs +4 -4
- package/esm2022/lib/map/zoom-button/zoom-button.component.mjs +4 -4
- package/esm2022/lib/measure/measure.module.mjs +5 -5
- package/esm2022/lib/measure/measurer/measure-format.pipe.mjs +4 -4
- package/esm2022/lib/measure/measurer/measurer-dialog.component.mjs +4 -4
- package/esm2022/lib/measure/measurer/measurer-item.component.mjs +4 -4
- package/esm2022/lib/measure/measurer/measurer.component.mjs +4 -4
- package/esm2022/lib/measure/measurer/measurer.module.mjs +5 -5
- package/esm2022/lib/metadata/metadata-button/metadata-button.component.mjs +7 -7
- package/esm2022/lib/metadata/metadata.module.mjs +5 -5
- package/esm2022/lib/metadata/shared/metadata.service.mjs +4 -4
- package/esm2022/lib/offline/geoDB/configFileToGeoDB.service.mjs +5 -8
- package/esm2022/lib/offline/geoDB/geoDB.service.mjs +21 -22
- package/esm2022/lib/offline/index.mjs +3 -1
- package/esm2022/lib/offline/layerDB/layerDB.service.mjs +16 -17
- package/esm2022/lib/offline/offline.interface.mjs +2 -0
- package/esm2022/lib/offline/offline.provider.mjs +51 -0
- package/esm2022/lib/offline/shared/geo-network.service.mjs +15 -16
- package/esm2022/lib/overlay/shared/overlay.mjs +3 -2
- package/esm2022/lib/print/print/print.component.mjs +4 -4
- package/esm2022/lib/print/print-form/print-form.component.mjs +4 -4
- package/esm2022/lib/print/print.module.mjs +5 -5
- package/esm2022/lib/print/shared/print.service.mjs +4 -4
- package/esm2022/lib/query/query.module.mjs +5 -5
- package/esm2022/lib/query/shared/query-search-source.mjs +4 -4
- package/esm2022/lib/query/shared/query.directive.mjs +4 -4
- package/esm2022/lib/query/shared/query.service.mjs +4 -4
- package/esm2022/lib/search/search-bar/search-bar.component.mjs +4 -4
- package/esm2022/lib/search/search-bar/search-bar.module.mjs +5 -5
- package/esm2022/lib/search/search-results/save-feature-dialog.component.mjs +4 -4
- package/esm2022/lib/search/search-results/search-results-add-button.component.mjs +4 -4
- package/esm2022/lib/search/search-results/search-results-item.component.mjs +4 -4
- package/esm2022/lib/search/search-results/search-results.component.mjs +4 -4
- package/esm2022/lib/search/search-results/search-results.module.mjs +5 -5
- package/esm2022/lib/search/search-selector/search-selector.component.mjs +4 -4
- package/esm2022/lib/search/search-selector/search-selector.module.mjs +5 -5
- package/esm2022/lib/search/search-settings/search-settings.component.mjs +4 -4
- package/esm2022/lib/search/search-settings/search-settings.module.mjs +5 -5
- package/esm2022/lib/search/search.module.mjs +5 -5
- package/esm2022/lib/search/shared/search-pointer-summary.directive.mjs +6 -6
- package/esm2022/lib/search/shared/search.service.mjs +4 -4
- package/esm2022/lib/search/shared/sources/cadastre.mjs +4 -4
- package/esm2022/lib/search/shared/sources/coordinates.mjs +7 -7
- package/esm2022/lib/search/shared/sources/icherche.mjs +10 -10
- package/esm2022/lib/search/shared/sources/ilayer.mjs +7 -7
- package/esm2022/lib/search/shared/sources/nominatim.mjs +4 -4
- package/esm2022/lib/search/shared/sources/storedqueries.mjs +7 -7
- package/esm2022/lib/search/shared/sources/workspace.mjs +4 -4
- package/esm2022/lib/style/style-list/style-list.module.mjs +5 -5
- package/esm2022/lib/style/style-list/style-list.service.mjs +4 -4
- package/esm2022/lib/style/style-modal/drawing/style-modal-drawing.component.mjs +4 -4
- package/esm2022/lib/style/style-modal/layer/style-modal-layer.component.mjs +4 -4
- package/esm2022/lib/style/style-modal/layer-button/style-modal-layer-button.component.mjs +4 -4
- package/esm2022/lib/style/style-service/draw-style.service.mjs +4 -4
- package/esm2022/lib/style/style-service/style.service.mjs +4 -4
- package/esm2022/lib/style/style.module.mjs +5 -5
- package/esm2022/lib/toast/toast.component.mjs +4 -4
- package/esm2022/lib/toast/toast.module.mjs +5 -5
- package/esm2022/lib/utils/id-generator.mjs +1 -1
- package/esm2022/lib/utils/propertyTypeDetector/propertyTypeDetector.service.mjs +4 -4
- package/esm2022/lib/wkt/shared/wkt.service.mjs +4 -4
- package/esm2022/lib/wkt/wkt.module.mjs +5 -5
- package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.component.mjs +4 -4
- package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.module.mjs +5 -5
- package/esm2022/lib/workspace/shared/edition-workspace.service.mjs +4 -4
- package/esm2022/lib/workspace/shared/feature-workspace.service.mjs +4 -4
- package/esm2022/lib/workspace/shared/wfs-workspace.service.mjs +4 -4
- package/esm2022/lib/workspace/shared/wms-workspace.service.mjs +4 -4
- package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs +4 -4
- package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.module.mjs +5 -5
- package/esm2022/lib/workspace/workspace-selector/workspace-selector.directive.mjs +4 -4
- package/esm2022/lib/workspace/workspace-selector/workspace-selector.module.mjs +5 -5
- package/esm2022/lib/workspace/workspace-updator/workspace-updator.directive.mjs +4 -4
- package/esm2022/lib/workspace/workspace-updator/workspace-updator.module.mjs +5 -5
- package/esm2022/lib/workspace/workspace.module.mjs +5 -5
- package/fesm2022/igo2-geo.mjs +6095 -6054
- package/fesm2022/igo2-geo.mjs.map +1 -1
- package/lib/catalog/shared/catalog.enum.d.ts +1 -3
- package/lib/feature/shared/feature-store.utils.d.ts +1 -1
- package/lib/feature/shared/store.d.ts +1 -1
- package/lib/filter/ogc-filter-time/ogc-filter-time.component.d.ts +1 -1
- package/lib/layer/shared/layer.service.d.ts +5 -5
- package/lib/layer/shared/layers/image-layer.d.ts +1 -1
- package/lib/layer/shared/layers/layer.d.ts +1 -5
- package/lib/layer/shared/layers/tile-layer.d.ts +1 -1
- package/lib/layer/shared/layers/vector-layer.d.ts +2 -2
- package/lib/layer/shared/layers/vectortile-layer.d.ts +1 -1
- package/lib/map/shared/map.d.ts +1 -1
- package/lib/offline/geoDB/geoDB.service.d.ts +1 -1
- package/lib/offline/index.d.ts +2 -0
- package/lib/offline/layerDB/layerDB.service.d.ts +1 -1
- package/lib/offline/offline.interface.d.ts +3 -0
- package/lib/offline/offline.provider.d.ts +3 -0
- package/lib/offline/shared/geo-network.service.d.ts +3 -3
- package/lib/overlay/shared/overlay.d.ts +2 -1
- package/lib/utils/id-generator.d.ts +5 -5
- package/package.json +5 -5
|
@@ -666,10 +666,10 @@ export class CatalogService {
|
|
|
666
666
|
});
|
|
667
667
|
return layersQueryFormat;
|
|
668
668
|
}
|
|
669
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.
|
|
670
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.
|
|
669
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: CatalogService, deps: [{ token: i1.HttpClient }, { token: i2.ConfigService }, { token: i3.LanguageService }, { token: i4.MessageService }, { token: i5.CapabilitiesService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
670
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: CatalogService, providedIn: 'root' });
|
|
671
671
|
}
|
|
672
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.
|
|
672
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: CatalogService, decorators: [{
|
|
673
673
|
type: Injectable,
|
|
674
674
|
args: [{
|
|
675
675
|
providedIn: 'root'
|
|
@@ -703,4 +703,4 @@ class CatalogFactory {
|
|
|
703
703
|
return catalog;
|
|
704
704
|
}
|
|
705
705
|
}
|
|
706
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2VvL3NyYy9saWIvY2F0YWxvZy9zaGFyZWQvY2F0YWxvZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRWhELE9BQU8sRUFBRSxLQUFLLEVBQWMsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpELE9BQU8sRUFFTCxnQ0FBZ0MsRUFDakMsTUFBTSxnREFBZ0QsQ0FBQztBQUN4RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQVFuRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFN0QsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFdkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVE5RCxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDaEIsNEJBQTRCLEVBQzVCLFVBQVUsRUFDVixX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Q0FBQzthQUFNLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxXQUFXLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7WUFDcEUsT0FBTyxHQUFHLElBQUksNEJBQTRCLENBQ3hDLE9BQU8sRUFDUCxDQUFDLE9BQWdCLEVBQUUsRUFBRSxDQUNuQixjQUFjLENBQUMsMEJBQTBCLENBQUMsT0FBTyxDQUFDLEVBQ3BELFdBQVcsQ0FBQyxjQUFjLENBQzNCLENBQUM7UUFDSixDQUFDO2FBQU0sSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztZQUNyRSxPQUFPLEdBQUcsSUFBSSw0QkFBNEIsQ0FDeEMsT0FBTyxFQUNQLENBQUMsT0FBZ0IsRUFBRSxFQUFFLENBQ25CLGNBQWMsQ0FBQywwQkFBMEIsQ0FBQyxPQUFPLENBQUMsRUFDcEQsV0FBVyxDQUFDLGVBQWUsQ0FDNUIsQ0FBQztRQUNKLENBQUM7YUFBTSxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzFELE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFnQixFQUFFLEVBQUUsQ0FDdEQsY0FBYyxDQUFDLHlCQUF5QixDQUFDLE9BQU8sQ0FBQyxDQUNsRCxDQUFDO1FBQ0osQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLEdBQUcsSUFBSSxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBZ0IsRUFBRSxFQUFFLENBQ3JELGNBQWMsQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsQ0FDakQsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBDb25maWdTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZS9jb25maWcnO1xuaW1wb3J0IHsgTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZS9sYW5ndWFnZSc7XG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUvbWVzc2FnZSc7XG5pbXBvcnQgeyBPYmplY3RVdGlscywgdXVpZCB9IGZyb20gJ0BpZ28yL3V0aWxzJztcblxuaW1wb3J0IHsgRU1QVFksIE9ic2VydmFibGUsIG9mLCB6aXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtcbiAgQXJjR0lTUmVzdENhcGFiaWxpdGllc0xheWVyLFxuICBBcmNHSVNSZXN0Q2FwYWJpbGl0aWVzTGF5ZXJUeXBlc1xufSBmcm9tICcuLi8uLi9kYXRhc291cmNlL3NoYXJlZC9jYXBhYmlsaXRpZXMuaW50ZXJmYWNlJztcbmltcG9ydCB7IENhcGFiaWxpdGllc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9kYXRhc291cmNlL3NoYXJlZC9jYXBhYmlsaXRpZXMuc2VydmljZSc7XG5pbXBvcnQge1xuICBBcmNHSVNSZXN0RGF0YVNvdXJjZU9wdGlvbnMsXG4gIFdNU0RhdGFTb3VyY2VPcHRpb25zLFxuICBXTVNEYXRhU291cmNlT3B0aW9uc1BhcmFtcyxcbiAgV01UU0RhdGFTb3VyY2VPcHRpb25zXG59IGZyb20gJy4uLy4uL2RhdGFzb3VyY2Uvc2hhcmVkL2RhdGFzb3VyY2VzJztcbmltcG9ydCB7IEltYWdlTGF5ZXJPcHRpb25zLCBMYXllck9wdGlvbnMgfSBmcm9tICcuLi8uLi9sYXllci9zaGFyZWQnO1xuaW1wb3J0IHsgZ2V0UmVzb2x1dGlvbkZyb21TY2FsZSB9IGZyb20gJy4uLy4uL21hcC9zaGFyZWQvbWFwLnV0aWxzJztcbmltcG9ydCB7IFF1ZXJ5Rm9ybWF0IH0gZnJvbSAnLi4vLi4vcXVlcnkvc2hhcmVkL3F1ZXJ5LmVudW1zJztcbmltcG9ydCB7IFF1ZXJ5YWJsZURhdGFTb3VyY2VPcHRpb25zIH0gZnJvbSAnLi4vLi4vcXVlcnkvc2hhcmVkL3F1ZXJ5LmludGVyZmFjZXMnO1xuaW1wb3J0IHsgZ2VuZXJhdGVJZEZyb21Tb3VyY2VPcHRpb25zIH0gZnJvbSAnLi4vLi4vdXRpbHMvaWQtZ2VuZXJhdG9yJztcbmltcG9ydCB7IENhdGFsb2cgfSBmcm9tICcuL2NhdGFsb2cuYWJzdHJhY3QnO1xuaW1wb3J0IHsgQ2F0YWxvZ0l0ZW1UeXBlLCBUeXBlQ2F0YWxvZyB9IGZyb20gJy4vY2F0YWxvZy5lbnVtJztcbmltcG9ydCB7XG4gIENhdGFsb2dJdGVtLFxuICBDYXRhbG9nSXRlbUdyb3VwLFxuICBDYXRhbG9nSXRlbUxheWVyLFxuICBDYXRhbG9nU2VydmljZU9wdGlvbnMsXG4gIEZvcmNlZFByb3BlcnR5XG59IGZyb20gJy4vY2F0YWxvZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgQXJjR0lTUmVzdENhdGFsb2csXG4gIEJhc2VsYXllcnNDYXRhbG9nLFxuICBDb21wb3NpdGVDYXRhbG9nLFxuICBUaWxlT3JJbWFnZUFyY0dJU1Jlc3RDYXRhbG9nLFxuICBXTVNDYXRhbG9nLFxuICBXTVRTQ2F0YWxvZ1xufSBmcm9tICcuL2NhdGFsb2dzJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQ2F0YWxvZ1NlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBjb25maWc6IENvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBsYW5ndWFnZVNlcnZpY2U6IExhbmd1YWdlU2VydmljZSxcbiAgICBwcml2YXRlIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcbiAgICBwcml2YXRlIGNhcGFiaWxpdGllc1NlcnZpY2U6IENhcGFiaWxpdGllc1NlcnZpY2VcbiAgKSB7fVxuXG4gIGxvYWRDYXRhbG9ncygpOiBPYnNlcnZhYmxlPENhdGFsb2dbXT4ge1xuICAgIGNvbnN0IGNvbnRleHRDb25maWcgPSB0aGlzLmNvbmZpZy5nZXRDb25maWcoJ2NvbnRleHQnKSB8fCB7fTtcblxuICAgIGNvbnN0IGNhdGFsb2dDb25maWc6IENhdGFsb2dTZXJ2aWNlT3B0aW9ucyA9XG4gICAgICB0aGlzLmNvbmZpZy5nZXRDb25maWcoJ2NhdGFsb2cnKSB8fCB7fTtcbiAgICBjb25zdCBhcGlVcmwgPSBjYXRhbG9nQ29uZmlnLnVybCB8fCBjb250ZXh0Q29uZmlnLnVybDtcbiAgICBjb25zdCBjYXRhbG9nc0Zyb21Db25maWcgPSBjYXRhbG9nQ29uZmlnLnNvdXJjZXMgfHwgW107XG5cbiAgICBjb25zdCBvYnNlcnZhYmxlcyQgPSBbXTtcblxuICAgIGlmIChhcGlVcmwpIHtcbiAgICAgIGlmIChjYXRhbG9nQ29uZmlnLmJhc2VsYXllcnMpIHtcbiAgICAgICAgY29uc3QgdHJhbnNsYXRlID0gdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlO1xuICAgICAgICBjb25zdCB0aXRsZSA9IHRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmNhdGFsb2cuYmFzZUxheWVycycpO1xuICAgICAgICBjb25zdCBiYXNlTGF5ZXJzQ2F0YWxvZyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogJ2NhdGFsb2cuYmFzZWxheWVycycsXG4gICAgICAgICAgICB0aXRsZSxcbiAgICAgICAgICAgIHVybDogYCR7YXBpVXJsfS9iYXNlbGF5ZXJzYCxcbiAgICAgICAgICAgIHR5cGU6ICdiYXNlbGF5ZXJzJ1xuICAgICAgICAgIH1cbiAgICAgICAgXTtcbiAgICAgICAgb2JzZXJ2YWJsZXMkLnB1c2gob2YoYmFzZUxheWVyc0NhdGFsb2cpKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2F0YWxvZ3MgZnJvbSBBUElcbiAgICAgIGNvbnN0IGNhdGFsb2dzRnJvbUFwaSQgPSB0aGlzLmh0dHBcbiAgICAgICAgLmdldDxDYXRhbG9nW10+KGAke2FwaVVybH0vY2F0YWxvZ3NgKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtYXAoKGNhdGFsb2dzKSA9PlxuICAgICAgICAgICAgY2F0YWxvZ3MubWFwKChjOiBhbnkpID0+IE9iamVjdC5hc3NpZ24oYywgYy5vcHRpb25zKSlcbiAgICAgICAgICApLFxuICAgICAgICAgIGNhdGNoRXJyb3IoKCkgPT4gRU1QVFkpXG4gICAgICAgICk7XG4gICAgICBvYnNlcnZhYmxlcyQucHVzaChjYXRhbG9nc0Zyb21BcGkkKTtcbiAgICB9XG5cbiAgICAvLyBDYXRhbG9ncyBmcm9tIGNvbmZpZ1xuICAgIGlmIChjYXRhbG9nc0Zyb21Db25maWcubGVuZ3RoID4gMCkge1xuICAgICAgb2JzZXJ2YWJsZXMkLnB1c2goXG4gICAgICAgIG9mKGNhdGFsb2dzRnJvbUNvbmZpZykucGlwZShcbiAgICAgICAgICBtYXAoKGNhdGFsb2dzOiBDYXRhbG9nW10pID0+XG4gICAgICAgICAgICBjYXRhbG9ncy5tYXAoKGMpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFjLmlkKSB7XG4gICAgICAgICAgICAgICAgYy5pZCA9IHV1aWQoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gYztcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB6aXAoLi4ub2JzZXJ2YWJsZXMkKS5waXBlKFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1zcHJlYWRcbiAgICAgIG1hcCgoY2F0YWxvZ3M6IENhdGFsb2dbXVtdKSA9PiBbXS5jb25jYXQuYXBwbHkoW10sIGNhdGFsb2dzKSlcbiAgICApIGFzIE9ic2VydmFibGU8Q2F0YWxvZ1tdPjtcbiAgfVxuXG4gIGxvYWRDYXRhbG9nSXRlbXMoY2F0YWxvZzogQ2F0YWxvZyk6IE9ic2VydmFibGU8Q2F0YWxvZ0l0ZW1bXT4ge1xuICAgIGNvbnN0IG5ld0NhdGFsb2cgPSBDYXRhbG9nRmFjdG9yeS5jcmVhdGVJbnN0YW5jZUNhdGFsb2coY2F0YWxvZywgdGhpcyk7XG4gICAgcmV0dXJuIG5ld0NhdGFsb2cuY29sbGVjdENhdGFsb2dJdGVtcygpO1xuICB9XG5cbiAgbG9hZENhdGFsb2dCYXNlTGF5ZXJJdGVtcyhjYXRhbG9nOiBDYXRhbG9nKTogT2JzZXJ2YWJsZTxDYXRhbG9nSXRlbUdyb3VwW10+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRDYXRhbG9nQmFzZUxheWVyc09wdGlvbnMoY2F0YWxvZykucGlwZShcbiAgICAgIG1hcCgobGF5ZXJzT3B0aW9uczogTGF5ZXJPcHRpb25zW10pID0+IHtcbiAgICAgICAgY29uc3QgaXRlbXMgPSBsYXllcnNPcHRpb25zLm1hcCgobGF5ZXJPcHRpb25zOiBMYXllck9wdGlvbnMpID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6IGdlbmVyYXRlSWRGcm9tU291cmNlT3B0aW9ucyhsYXllck9wdGlvbnMuc291cmNlT3B0aW9ucyksXG4gICAgICAgICAgICB0aXRsZTogbGF5ZXJPcHRpb25zLnRpdGxlLFxuICAgICAgICAgICAgdHlwZTogQ2F0YWxvZ0l0ZW1UeXBlLkxheWVyLFxuICAgICAgICAgICAgZXh0ZXJuYWxQcm92aWRlcjogY2F0YWxvZy5leHRlcm5hbFByb3ZpZGVyLFxuICAgICAgICAgICAgb3B0aW9uczogbGF5ZXJPcHRpb25zXG4gICAgICAgICAgfSBhcyBDYXRhbG9nSXRlbUxheWVyO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogJ2NhdGFsb2cuZ3JvdXAuYmFzZWxheWVycycsXG4gICAgICAgICAgICB0eXBlOiBDYXRhbG9nSXRlbVR5cGUuR3JvdXAsXG4gICAgICAgICAgICBleHRlcm5hbFByb3ZpZGVyOiBjYXRhbG9nLmV4dGVybmFsUHJvdmlkZXIsXG4gICAgICAgICAgICB0aXRsZTogY2F0YWxvZy50aXRsZSxcbiAgICAgICAgICAgIGl0ZW1zXG4gICAgICAgICAgfVxuICAgICAgICBdO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDYXRhbG9nQmFzZUxheWVyc09wdGlvbnMoXG4gICAgY2F0YWxvZzogQ2F0YWxvZ1xuICApOiBPYnNlcnZhYmxlPExheWVyT3B0aW9uc1tdPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TGF5ZXJPcHRpb25zW10+KGNhdGFsb2cudXJsKTtcbiAgfVxuXG4gIGxvYWRDYXRhbG9nV01TTGF5ZXJJdGVtcyhjYXRhbG9nOiBDYXRhbG9nKTogT2JzZXJ2YWJsZTxDYXRhbG9nSXRlbVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q2F0YWxvZ0NhcGFiaWxpdGllcyhjYXRhbG9nKS5waXBlKFxuICAgICAgbWFwKChjYXBhYmlsaXRpZXM6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBpdGVtczogQ2F0YWxvZ0l0ZW1bXSA9IFtdO1xuICAgICAgICBpZiAoIWNhcGFiaWxpdGllcykge1xuICAgICAgICAgIHJldHVybiBpdGVtcztcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgY2FwYWJpbGl0aWVzLlNlcnZpY2UgJiZcbiAgICAgICAgICBjYXBhYmlsaXRpZXMuU2VydmljZS5BYnN0cmFjdCAmJlxuICAgICAgICAgIGNhcGFiaWxpdGllcy5TZXJ2aWNlLkFic3RyYWN0Lmxlbmd0aFxuICAgICAgICApIHtcbiAgICAgICAgICBjYXRhbG9nLmFic3RyYWN0ID0gY2FwYWJpbGl0aWVzLlNlcnZpY2UuQWJzdHJhY3Q7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmluYWxMYXllcnMgPSBbXTtcbiAgICAgICAgdGhpcy5mbGF0dGVuV21zQ2FwYWJpbGl0aWVzKFxuICAgICAgICAgIGNhcGFiaWxpdGllcy5DYXBhYmlsaXR5LkxheWVyLFxuICAgICAgICAgIDAsXG4gICAgICAgICAgZmluYWxMYXllcnMsXG4gICAgICAgICAgY2F0YWxvZy5ncm91cFNlcGFyYXRvclxuICAgICAgICApO1xuICAgICAgICBjb25zdCBjYXBhYmlsaXRpZXNDYXBhYmlsaXR5TGF5ZXIgPSBPYmplY3QuYXNzaWduKFxuICAgICAgICAgIHt9LFxuICAgICAgICAgIGNhcGFiaWxpdGllcy5DYXBhYmlsaXR5LkxheWVyXG4gICAgICAgICk7XG4gICAgICAgIGNhcGFiaWxpdGllc0NhcGFiaWxpdHlMYXllci5MYXllciA9IGZpbmFsTGF5ZXJzLmZpbHRlcihcbiAgICAgICAgICAoZikgPT4gZi5MYXllci5sZW5ndGggIT09IDBcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5pbmNsdWRlUmVjdXJzaXZlSXRlbXMoY2F0YWxvZywgY2FwYWJpbGl0aWVzQ2FwYWJpbGl0eUxheWVyLCBpdGVtcyk7XG4gICAgICAgIHJldHVybiBpdGVtcztcbiAgICAgIH0pLFxuICAgICAgY2F0Y2hFcnJvcigoKSA9PiB7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuZXJyb3IoXG4gICAgICAgICAgJ2lnby5nZW8uY2F0YWxvZy51bmF2YWlsYWJsZScsXG4gICAgICAgICAgJ2lnby5nZW8uY2F0YWxvZy51bmF2YWlsYWJsZVRpdGxlJyxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgeyB2YWx1ZTogY2F0YWxvZy50aXRsZSB9XG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGZsYXR0ZW5XbXNDYXBhYmlsaXRpZXMocGFyZW50LCBsZXZlbCA9IDAsIGZpbmFsTGF5ZXJzLCBzZXBhcmF0b3IgPSAnIC8gJykge1xuICAgIGlmICghZmluYWxMYXllcnMuaW5jbHVkZXMocGFyZW50LlRpdGxlKSkge1xuICAgICAgY29uc3QgbW9kaWZpZWRQYXJlbnQgPSBPYmplY3QuYXNzaWduKHt9LCBwYXJlbnQpO1xuICAgICAgbW9kaWZpZWRQYXJlbnQuTGF5ZXIgPSBbXTtcbiAgICAgIGZpbmFsTGF5ZXJzLnB1c2gobW9kaWZpZWRQYXJlbnQpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGxheWVyIG9mIHBhcmVudC5MYXllcikge1xuICAgICAgY29uc3QgbW9kaWZpZWRMYXllciA9IE9iamVjdC5hc3NpZ24oe30sIGxheWVyKTtcbiAgICAgIGlmIChsZXZlbCA+IDApIHtcbiAgICAgICAgbW9kaWZpZWRMYXllci5UaXRsZSA9IHBhcmVudC5UaXRsZSArIHNlcGFyYXRvciArIGxheWVyLlRpdGxlO1xuICAgICAgfVxuICAgICAgaWYgKGxheWVyLkxheWVyKSB7XG4gICAgICAgIHRoaXMuZmxhdHRlbldtc0NhcGFiaWxpdGllcyhcbiAgICAgICAgICBtb2RpZmllZExheWVyLFxuICAgICAgICAgIGxldmVsICsgMSxcbiAgICAgICAgICBmaW5hbExheWVycyxcbiAgICAgICAgICBzZXBhcmF0b3JcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpbmFsTGF5ZXJzLmZpbmQoKGZmKSA9PiBmZi5UaXRsZSA9PT0gcGFyZW50LlRpdGxlKS5MYXllci5wdXNoKGxheWVyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsb2FkQ2F0YWxvZ1dNVFNMYXllckl0ZW1zKGNhdGFsb2c6IENhdGFsb2cpOiBPYnNlcnZhYmxlPENhdGFsb2dJdGVtW10+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRDYXRhbG9nQ2FwYWJpbGl0aWVzKGNhdGFsb2cpLnBpcGUoXG4gICAgICBtYXAoKGNhcGFiaWxpdGllczogYW55KSA9PiB0aGlzLmdldFdNVFNJdGVtcyhjYXRhbG9nLCBjYXBhYmlsaXRpZXMpKVxuICAgICk7XG4gIH1cblxuICBsb2FkQ2F0YWxvZ0FyY0dJU1Jlc3RJdGVtcyhjYXRhbG9nOiBDYXRhbG9nKTogT2JzZXJ2YWJsZTxDYXRhbG9nSXRlbVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q2F0YWxvZ0NhcGFiaWxpdGllcyhjYXRhbG9nKS5waXBlKFxuICAgICAgbWFwKChjYXBhYmlsaXRpZXM6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRBcmNHSVNSRVNUSXRlbXMoY2F0YWxvZywgY2FwYWJpbGl0aWVzKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGxvYWRDYXRhbG9nQ29tcG9zaXRlTGF5ZXJJdGVtcyhjYXRhbG9nOiBDYXRhbG9nKTogT2JzZXJ2YWJsZTxDYXRhbG9nSXRlbVtdPiB7XG4gICAgY29uc3QgY29tcG9zaXRlQ2F0YWxvZyA9IChjYXRhbG9nIGFzIENvbXBvc2l0ZUNhdGFsb2cpLmNvbXBvc2l0ZTtcblxuICAgIGNvbnN0IGNhdGFsb2dzRnJvbUluc3RhbmNlID0gW10gYXMgQ2F0YWxvZ1tdO1xuICAgIGNvbXBvc2l0ZUNhdGFsb2cubWFwKChjb21wb25lbnQ6IENhdGFsb2cpID0+IHtcbiAgICAgIGNvbXBvbmVudC5zb3J0RGlyZWN0aW9uID0gY2F0YWxvZy5zb3J0RGlyZWN0aW9uOyAvLyBwcm9wYWdhdGUgc29ydERpcmVjdGlvbiB3aXRoIHBhcmVudCB2YWx1ZVxuICAgICAgY2F0YWxvZ3NGcm9tSW5zdGFuY2UucHVzaChcbiAgICAgICAgQ2F0YWxvZ0ZhY3RvcnkuY3JlYXRlSW5zdGFuY2VDYXRhbG9nKGNvbXBvbmVudCwgdGhpcylcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICAvLyBnZXQgQ2F0YWxvZ0l0ZW1zIGZvciBlYWNoIG9yaWdpbmFsIENhdGFsb2ctLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IHJlcXVlc3QxJCA9IFtdO1xuICAgIGNhdGFsb2dzRnJvbUluc3RhbmNlLm1hcCgoY29tcG9uZW50OiBDYXRhbG9nKSA9PlxuICAgICAgcmVxdWVzdDEkLnB1c2goY29tcG9uZW50LmNvbGxlY3RDYXRhbG9nSXRlbXMoKSlcbiAgICApO1xuXG4gICAgLy8gaW50ZWdyYXRlIGltcG9zZWQgZ3JvdXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBsZXQgcmVxdWVzdDIkID0gW107XG5cbiAgICBmdW5jdGlvbiBmbGF0RGVlcExheWVyKGFycikge1xuICAgICAgcmV0dXJuIGFyci5yZWR1Y2UoXG4gICAgICAgIChhY2MsIHZhbCkgPT5cbiAgICAgICAgICBhY2MuY29uY2F0KFxuICAgICAgICAgICAgdmFsLnR5cGUgPT09IENhdGFsb2dJdGVtVHlwZS5Hcm91cCA/IGZsYXREZWVwTGF5ZXIodmFsLml0ZW1zKSA6IHZhbFxuICAgICAgICAgICksXG4gICAgICAgIFtdXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIE9iamVjdC5rZXlzKGNvbXBvc2l0ZUNhdGFsb2cpLmZpbmQoKGspID0+IGNvbXBvc2l0ZUNhdGFsb2dba10uZ3JvdXBJbXBvc2UpXG4gICAgKSB7XG4gICAgICBjb25zdCBwdXNoSW1wb3NlR3JvdXAgPSAoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgYyA9IGNhdGFsb2dzRnJvbUluc3RhbmNlW2luZGV4XTtcbiAgICAgICAgY29uc3Qgb3V0R3JvdXBJbXBvc2UgPSBPYmplY3QuYXNzaWduKHt9LCBjLmdyb3VwSW1wb3NlKTtcbiAgICAgICAgb3V0R3JvdXBJbXBvc2UuYWRkcmVzcyA9IGMuaWQ7XG4gICAgICAgIG91dEdyb3VwSW1wb3NlLnR5cGUgPSBDYXRhbG9nSXRlbVR5cGUuR3JvdXA7XG4gICAgICAgIG91dEdyb3VwSW1wb3NlLmV4dGVybmFsUHJvdmlkZXIgPSBjLmV4dGVybmFsUHJvdmlkZXI7XG4gICAgICAgIGlmIChvdXRHcm91cEltcG9zZS5zb3J0RGlyZWN0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBvdXRHcm91cEltcG9zZS5zb3J0RGlyZWN0aW9uID0gYy5zb3J0RGlyZWN0aW9uO1xuICAgICAgICB9XG4gICAgICAgIG91dEdyb3VwSW1wb3NlLml0ZW1zID0gW107XG5cbiAgICAgICAgY29uc3QgZmxhdExheWVyID0gZmxhdERlZXBMYXllcihpdGVtKTtcbiAgICAgICAgZmxhdExheWVyLm1hcChcbiAgICAgICAgICAodikgPT4gKHYuYWRkcmVzcyA9IGAke291dEdyb3VwSW1wb3NlLmFkZHJlc3N9LiR7b3V0R3JvdXBJbXBvc2UuaWR9YClcbiAgICAgICAgKTtcbiAgICAgICAgb3V0R3JvdXBJbXBvc2UuaXRlbXMgPSBmbGF0TGF5ZXI7XG5cbiAgICAgICAgcmV0dXJuIG91dEdyb3VwSW1wb3NlO1xuICAgICAgfTtcblxuICAgICAgcmVxdWVzdDIkID0gcmVxdWVzdDEkLm1hcCgob2JzLCBpZHgpID0+XG4gICAgICAgIG9icy5waXBlKFxuICAgICAgICAgIG1hcCgoaXRlbXMpID0+XG4gICAgICAgICAgICBjb21wb3NpdGVDYXRhbG9nW2lkeF0uZ3JvdXBJbXBvc2VcbiAgICAgICAgICAgICAgPyBwdXNoSW1wb3NlR3JvdXAoaXRlbXMsIGlkeClcbiAgICAgICAgICAgICAgOiBpdGVtc1xuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxdWVzdDIkID0gcmVxdWVzdDEkO1xuICAgIH1cblxuICAgIC8vIGNvbmNhdCBHcm91cCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IHJlcXVlc3QzJCA9IHppcCguLi5yZXF1ZXN0MiQpLnBpcGUoXG4gICAgICBtYXAoXG4gICAgICAgIChvdXRwdXQ6IENhdGFsb2dJdGVtW10pID0+IFtdLmNvbmNhdCguLi5vdXRwdXQpIC8vIFtdLmNvbmNhdC5hcHBseShbXSwgcmVzdWx0MVxuICAgICAgKVxuICAgICk7XG5cbiAgICAvLyBtZXJnZSBHcm91cCAoZmlyc3QgbGV2ZWwgb25seSkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCBncm91cEJ5R3JvdXBJZCA9IChkYXRhLCBrZXlGbikgPT5cbiAgICAgIGRhdGEucmVkdWNlKChhY2MsIGdyb3VwKSA9PiB7XG4gICAgICAgIGNvbnN0IGdyb3VwSWQgPSBrZXlGbihncm91cCk7XG4gICAgICAgIGNvbnN0IGluZCA9IGFjYy5maW5kKCh4KSA9PiB4LmlkID09PSBncm91cElkKTtcblxuICAgICAgICBpZiAoIWluZCkge1xuICAgICAgICAgIGFjY1thY2MubGVuZ3RoXSA9IGdyb3VwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGl4ID0gYWNjLmluZGV4T2YoaW5kKTtcbiAgICAgICAgICBpZiAoYWNjW2l4XS5hZGRyZXNzLnNwbGl0KCd8JykuaW5kZXhPZihncm91cC5hZGRyZXNzKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIGFjY1tpeF0uYWRkcmVzcyA9IGAke2FjY1tpeF0uYWRkcmVzc318JHtncm91cC5hZGRyZXNzfWA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFjY1tpeF0uaXRlbXMucHVzaCguLi5ncm91cC5pdGVtcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIFtdKTtcblxuICAgIC8vIG1lcmdlIExheWVyIGZvciBlYWNoIExldmVsIChjYXRhbG9nLCBncm91cChyZWN1cnNpdmUpKVxuICAgIGNvbnN0IHJlY3Vyc2l2ZUdyb3VwQnlMYXllckFkZHJlc3MgPSAoaXRlbXMsIGtleUZuKSA9PlxuICAgICAgaXRlbXMucmVkdWNlKChhY2MsIGl0ZW0sIGlkeCwgYXJyKSA9PiB7XG4gICAgICAgIGNvbnN0IGxheWVyVGl0bGUgPSBrZXlGbihpdGVtKTtcbiAgICAgICAgY29uc3Qgb3V0SXRlbSA9IE9iamVjdC5hc3NpZ24oe30sIGl0ZW0pO1xuXG4gICAgICAgIGlmIChpdGVtLnR5cGUgPT09IENhdGFsb2dJdGVtVHlwZS5MYXllcikge1xuICAgICAgICAgIC8vIHNhbWUgdGl0bGUsIHNhbWUgYWRkcmVzcyA9PiByZXN1bHQ6IG9ubHkgb25lIGl0ZW0gaXMga2VwdFxuXG4gICAgICAgICAgLy8gc2FtZSB0aXRsZSwgYWRkcmVzcyBkaWZmXG4gICAgICAgICAgY29uc3QgaW5kaWNlc01hdGNoVGl0bGUgPSBbXTtcbiAgICAgICAgICBjb25zdCBpbmRpY2VzTWF0Y2hOZXdNZXRhZGF0YVVybCA9IFtdOyAvLyBtZXRhZGF0YVxuICAgICAgICAgIGNvbnN0IGRpZmZBZGRyZXNzID0gYXJyLmZpbHRlcigoeCwgaSkgPT4ge1xuICAgICAgICAgICAgbGV0IGJJbmQgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICh4LnRpdGxlID09PSBsYXllclRpdGxlICYmIHgudHlwZSA9PT0gQ2F0YWxvZ0l0ZW1UeXBlLkxheWVyKSB7XG4gICAgICAgICAgICAgIGlmIChpICE9PSBpZHggJiYgeC5hZGRyZXNzICE9PSBpdGVtLmFkZHJlc3MpIHtcbiAgICAgICAgICAgICAgICBiSW5kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpbmRpY2VzTWF0Y2hUaXRsZS5wdXNoKGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGJJbmQ7XG4gICAgICAgICAgfSk7IC8vICQmIGkgIT09IGlkeFxuXG4gICAgICAgICAgaWYgKGRpZmZBZGRyZXNzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGxldCBuUG9zaXRpb24gPSBpbmRpY2VzTWF0Y2hUaXRsZS5maW5kSW5kZXgoKHgpID0+IHggPT09IGlkeCkgKyAxO1xuICAgICAgICAgICAgb3V0SXRlbS50aXRsZSA9IGAke2l0ZW0udGl0bGV9ICgke25Qb3NpdGlvbn0pYDsgLy8gc291cmNlOiAke2l0ZW0uYWRkcmVzcy5zcGxpdCgnLicpWzBdfVxuICAgICAgICAgICAgblBvc2l0aW9uID1cbiAgICAgICAgICAgICAgaW5kaWNlc01hdGNoTmV3TWV0YWRhdGFVcmwuZmluZEluZGV4KCh4KSA9PiB4ID09PSBpZHgpICsgMTtcbiAgICAgICAgICAgIG91dEl0ZW0ubmV3TWV0YWRhdGFVcmwgPSBgJHtpdGVtLm5ld01ldGFkYXRhVXJsfSAoJHtuUG9zaXRpb259KWA7IC8vIHNvdXJjZTogJHtpdGVtLmFkZHJlc3Muc3BsaXQoJy4nKVswXX1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBleGlzdCA9IGFjYy5maW5kKFxuICAgICAgICAgICAgKHgpID0+IHgudGl0bGUgPT09IG91dEl0ZW0udGl0bGUgJiYgeC50eXBlID09PSBDYXRhbG9nSXRlbVR5cGUuTGF5ZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmICghZXhpc3QpIHtcbiAgICAgICAgICAgIGFjY1thY2MubGVuZ3RoXSA9IG91dEl0ZW07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0udHlwZSA9PT0gQ2F0YWxvZ0l0ZW1UeXBlLkdyb3VwKSB7XG4gICAgICAgICAgb3V0SXRlbS5pdGVtcyA9IHJlY3Vyc2l2ZUdyb3VwQnlMYXllckFkZHJlc3MoXG4gICAgICAgICAgICBpdGVtLml0ZW1zLFxuICAgICAgICAgICAgKGxheWVyKSA9PiBsYXllci50aXRsZVxuICAgICAgICAgICk7XG4gICAgICAgICAgYWNjW2FjYy5sZW5ndGhdID0gb3V0SXRlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCBbXSk7XG5cbiAgICBjb25zdCByZXF1ZXN0NCQgPSByZXF1ZXN0MyQucGlwZShcbiAgICAgIG1hcCgob3V0cHV0KSA9PiBncm91cEJ5R3JvdXBJZChvdXRwdXQsIChncm91cCkgPT4gZ3JvdXAuaWQpKSxcbiAgICAgIG1hcCgob3V0cHV0KSA9PiBbXS5jb25jYXQoLi4ub3V0cHV0KSksXG4gICAgICBtYXAoKGRhdGEpID0+IHJlY3Vyc2l2ZUdyb3VwQnlMYXllckFkZHJlc3MoZGF0YSwgKGxheWVyKSA9PiBsYXllci50aXRsZSkpXG4gICAgKTtcblxuICAgIHJldHVybiByZXF1ZXN0NCQ7XG4gIH1cblxuICBwcml2YXRlIGdldENhdGFsb2dDYXBhYmlsaXRpZXMoY2F0YWxvZzogQ2F0YWxvZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3Qgc1R5cGU6IHN0cmluZyA9IFR5cGVDYXRhbG9nW2NhdGFsb2cudHlwZSBhcyBzdHJpbmddO1xuICAgIHJldHVybiB0aGlzLmNhcGFiaWxpdGllc1NlcnZpY2VcbiAgICAgIC5nZXRDYXBhYmlsaXRpZXMoc1R5cGUgYXMgYW55LCBjYXRhbG9nLnVybCwgY2F0YWxvZy52ZXJzaW9uKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoKGUpID0+IHtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmVycm9yKFxuICAgICAgICAgICAgY2F0YWxvZy50aXRsZVxuICAgICAgICAgICAgICA/ICdpZ28uZ2VvLmNhdGFsb2cudW5hdmFpbGFibGUnXG4gICAgICAgICAgICAgIDogJ2lnby5nZW8uY2F0YWxvZy5zb21lVW5hdmFpbGFibGUnLFxuICAgICAgICAgICAgJ2lnby5nZW8uY2F0YWxvZy51bmF2YWlsYWJsZVRpdGxlJyxcbiAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGNhdGFsb2cudGl0bGUgPyB7IHZhbHVlOiBjYXRhbG9nLnRpdGxlIH0gOiB1bmRlZmluZWRcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wdXRlRm9yY2VkUHJvcGVydGllcyhcbiAgICBsYXllck5hbWVGcm9tQ2F0YWxvZzogc3RyaW5nLFxuICAgIGZvcmNlZFByb3BlcnRpZXM6IEZvcmNlZFByb3BlcnR5W11cbiAgKTogRm9yY2VkUHJvcGVydHkge1xuICAgIGlmICghZm9yY2VkUHJvcGVydGllcyB8fCBmb3JjZWRQcm9wZXJ0aWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZXR1cm5Qcm9wZXJ0eTogRm9yY2VkUHJvcGVydHkgPSB7XG4gICAgICBsYXllck5hbWU6IGxheWVyTmFtZUZyb21DYXRhbG9nLFxuICAgICAgdGl0bGU6IHVuZGVmaW5lZCxcbiAgICAgIG1ldGFkYXRhVXJsOiB1bmRlZmluZWQsXG4gICAgICBtZXRhZGF0YUFic3RyYWN0OiB1bmRlZmluZWQsXG4gICAgICBtZXRhZGF0YUFic3RyYWN0QWxsOiB1bmRlZmluZWQsXG4gICAgICBtZXRhZGF0YVVybEFsbDogdW5kZWZpbmVkXG4gICAgfTtcbiAgICAvL3Byb2Nlc3Mgd2lsZGNhcmQgYmVmb3JlXG4gICAgLy8gaWYgdGhlcmUgaXMgYSAqIHdpbGRjYXJkXG4gICAgY29uc3QgZm9yY2VkUHJvcGVydGllc0ZvckFsbExheWVycyA9IGZvcmNlZFByb3BlcnRpZXMuZmluZChcbiAgICAgIChmKSA9PiBmLmxheWVyTmFtZSA9PT0gJyonXG4gICAgKTtcbiAgICBpZiAoZm9yY2VkUHJvcGVydGllc0ZvckFsbExheWVycykge1xuICAgICAgLy8gbWV0YWRhdGFBYnN0cmFjdEFsbFxuICAgICAgaWYgKGZvcmNlZFByb3BlcnRpZXNGb3JBbGxMYXllcnMubWV0YWRhdGFBYnN0cmFjdEFsbCkge1xuICAgICAgICByZXR1cm5Qcm9wZXJ0eS5tZXRhZGF0YUFic3RyYWN0QWxsID1cbiAgICAgICAgICBmb3JjZWRQcm9wZXJ0aWVzRm9yQWxsTGF5ZXJzLm1ldGFkYXRhQWJzdHJhY3RBbGw7XG4gICAgICB9XG4gICAgICAvLyBtZXRhZGF0YVVybEFsbFxuICAgICAgaWYgKGZvcmNlZFByb3BlcnRpZXNGb3JBbGxMYXllcnMubWV0YWRhdGFVcmxBbGwpIHtcbiAgICAgICAgcmV0dXJuUHJvcGVydHkubWV0YWRhdGFVcmxBbGwgPVxuICAgICAgICAgIGZvcmNlZFByb3BlcnRpZXNGb3JBbGxMYXllcnMubWV0YWRhdGFVcmxBbGw7XG4gICAgICB9XG4gICAgfVxuICAgIGZvcmNlZFByb3BlcnRpZXMubWFwKChmb3JjZWRQcm9wZXJ0eSkgPT4ge1xuICAgICAgLy8gaWYgbWF0Y2ggZm91bmRcbiAgICAgIGlmIChsYXllck5hbWVGcm9tQ2F0YWxvZyA9PT0gZm9yY2VkUHJvcGVydHkubGF5ZXJOYW1lKSB7XG4gICAgICAgIC8vIHRpdGxlXG4gICAgICAgIGlmIChmb3JjZWRQcm9wZXJ0eS50aXRsZSkge1xuICAgICAgICAgIHJldHVyblByb3BlcnR5LnRpdGxlID0gZm9yY2VkUHJvcGVydHkudGl0bGU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbWV0YWRhdGFVcmxcbiAgICAgICAgaWYgKGZvcmNlZFByb3BlcnR5Lm1ldGFkYXRhVXJsKSB7XG4gICAgICAgICAgcmV0dXJuUHJvcGVydHkubWV0YWRhdGFVcmwgPSBmb3JjZWRQcm9wZXJ0eS5tZXRhZGF0YVVybDtcbiAgICAgICAgfVxuICAgICAgICAvLyBtZXRhZGF0YUFic3RyYWN0XG4gICAgICAgIGlmIChmb3JjZWRQcm9wZXJ0eS5tZXRhZGF0YUFic3RyYWN0KSB7XG4gICAgICAgICAgcmV0dXJuUHJvcGVydHkubWV0YWRhdGFBYnN0cmFjdCA9IGZvcmNlZFByb3BlcnR5Lm1ldGFkYXRhQWJzdHJhY3Q7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmV0dXJuUHJvcGVydHk7XG4gIH1cblxuICAvLy8gV01TXG5cbiAgcHJpdmF0ZSBwcmVwYXJlQ2F0YWxvZ0l0ZW1MYXllcihsYXllciwgaWRQYXJlbnQsIGxheWVyc1F1ZXJ5Rm9ybWF0LCBjYXRhbG9nKSB7XG4gICAgY29uc3QgY29uZmlndXJlZFF1ZXJ5Rm9ybWF0ID0gdGhpcy5yZXRyaWV2ZUxheWVySW5mb0Zvcm1hdChcbiAgICAgIGxheWVyLk5hbWUsXG4gICAgICBsYXllcnNRdWVyeUZvcm1hdFxuICAgICk7XG5cbiAgICBjb25zdCBsZWdlbmRPcHRpb25zID1cbiAgICAgIGNhdGFsb2cuc2hvd0xlZ2VuZCAmJiBsYXllci5TdHlsZVxuICAgICAgICA/IHRoaXMuY2FwYWJpbGl0aWVzU2VydmljZS5nZXRTdHlsZShsYXllci5TdHlsZSlcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBwYXJhbXMgPSBPYmplY3QuYXNzaWduKHt9LCBjYXRhbG9nLnF1ZXJ5UGFyYW1zLCB7XG4gICAgICBMQVlFUlM6IGxheWVyLk5hbWUsXG4gICAgICBWRVJTSU9OOiBjYXRhbG9nLnZlcnNpb25cbiAgICB9IGFzIFdNU0RhdGFTb3VyY2VPcHRpb25zUGFyYW1zKTtcblxuICAgIGNvbnN0IGJhc2VTb3VyY2VPcHRpb25zID0ge1xuICAgICAgdHlwZTogJ3dtcycsXG4gICAgICB1cmw6IGNhdGFsb2cudXJsLFxuICAgICAgY3Jvc3NPcmlnaW46IGNhdGFsb2cuc2V0Q3Jvc3NPcmlnaW5Bbm9ueW1vdXMgPyAnYW5vbnltb3VzJyA6IHVuZGVmaW5lZCxcbiAgICAgIHF1ZXJ5Rm9ybWF0OiBjb25maWd1cmVkUXVlcnlGb3JtYXQsXG4gICAgICBxdWVyeUh0bWxUYXJnZXQ6XG4gICAgICAgIGNvbmZpZ3VyZWRRdWVyeUZvcm1hdCA9PT0gUXVlcnlGb3JtYXQuSFRNTCB8fFxuICAgICAgICBjb25maWd1cmVkUXVlcnlGb3JtYXQgPT09IFF1ZXJ5Rm9ybWF0LkhUTUxHTUwyXG4gICAgICAgICAgPyAnaWZyYW1lJ1xuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgb3B0aW9uc0Zyb21DYXBhYmlsaXRpZXM6IHRydWVcbiAgICB9O1xuXG4gICAgY29uc3Qgc291cmNlT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIGJhc2VTb3VyY2VPcHRpb25zLFxuICAgICAgY2F0YWxvZy5zb3VyY2VPcHRpb25zLFxuICAgICAgeyBwYXJhbXMgfVxuICAgICkgYXMgV01TRGF0YVNvdXJjZU9wdGlvbnM7XG5cbiAgICBjb25zdCBwcm9wZXJ0aWVzVG9Gb3JjZSA9IHRoaXMuY29tcHV0ZUZvcmNlZFByb3BlcnRpZXMoXG4gICAgICBsYXllci5OYW1lLFxuICAgICAgY2F0YWxvZy5mb3JjZWRQcm9wZXJ0aWVzXG4gICAgKTtcbiAgICBsZXQgYmFzZUFic3RyYWN0O1xuICAgIGxldCBleHRlcm4gPSB0cnVlO1xuICAgIGlmIChsYXllci5BYnN0cmFjdCkge1xuICAgICAgYmFzZUFic3RyYWN0ID0gbGF5ZXIuQWJzdHJhY3Q7XG4gICAgfSBlbHNlIGlmICghbGF5ZXIuQWJzdHJhY3QgJiYgY2F0YWxvZy5hYnN0cmFjdCkge1xuICAgICAgYmFzZUFic3RyYWN0ID0gY2F0YWxvZy5hYnN0cmFjdDtcbiAgICB9XG4gICAgY29uc3QgbGF5ZXJPbmxpbmVSZXNvdXJjZSA9XG4gICAgICBsYXllcj8uRGF0YVVSTCAmJiBsYXllcj8uRGF0YVVSTC5sZW5ndGggPiAwXG4gICAgICAgID8gbGF5ZXI/LkRhdGFVUkxbMF0uT25saW5lUmVzb3VyY2VcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBtZXRhZGF0YVVybCA9XG4gICAgICBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFVcmwgfHxcbiAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YVVybEFsbCB8fFxuICAgICAgbGF5ZXJPbmxpbmVSZXNvdXJjZTtcbiAgICBjb25zdCBtZXRhZGF0YUFic3RyYWN0ID1cbiAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YUFic3RyYWN0IHx8XG4gICAgICBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFBYnN0cmFjdEFsbCB8fFxuICAgICAgYmFzZUFic3RyYWN0O1xuXG4gICAgaWYgKFxuICAgICAgIXByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YVVybCAmJlxuICAgICAgIXByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YVVybEFsbCAmJlxuICAgICAgKHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YUFic3RyYWN0IHx8XG4gICAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YUFic3RyYWN0QWxsKVxuICAgICkge1xuICAgICAgZXh0ZXJuID0gZmFsc2U7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YUFic3RyYWN0ICYmXG4gICAgICBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFVcmxBbGxcbiAgICApIHtcbiAgICAgIGV4dGVybiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGxheWVyUHJlcGFyZSA9IHtcbiAgICAgIGlkOiBnZW5lcmF0ZUlkRnJvbVNvdXJjZU9wdGlvbnMoc291cmNlT3B0aW9ucyksXG4gICAgICB0eXBlOiBDYXRhbG9nSXRlbVR5cGUuTGF5ZXIsXG4gICAgICB0aXRsZTogcHJvcGVydGllc1RvRm9yY2U/LnRpdGxlID8gcHJvcGVydGllc1RvRm9yY2UudGl0bGUgOiBsYXllci5UaXRsZSxcbiAgICAgIGFkZHJlc3M6IGlkUGFyZW50LFxuICAgICAgZXh0ZXJuYWxQcm92aWRlcjogY2F0YWxvZy5leHRlcm5hbFByb3ZpZGVyIHx8IGZhbHNlLFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICBtYXhSZXNvbHV0aW9uOiBnZXRSZXNvbHV0aW9uRnJvbVNjYWxlKGxheWVyLk1heFNjYWxlRGVub21pbmF0b3IpLFxuICAgICAgICBtaW5SZXNvbHV0aW9uOiBnZXRSZXNvbHV0aW9uRnJvbVNjYWxlKGxheWVyLk1pblNjYWxlRGVub21pbmF0b3IpLFxuICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgIHVybDogbWV0YWRhdGFVcmwsXG4gICAgICAgICAgZXh0ZXJuLFxuICAgICAgICAgIGFic3RyYWN0OiBtZXRhZGF0YUFic3RyYWN0LFxuICAgICAgICAgIHR5cGU6IGJhc2VTb3VyY2VPcHRpb25zLnR5cGVcbiAgICAgICAgfSxcbiAgICAgICAgbGVnZW5kT3B0aW9ucyxcbiAgICAgICAgdG9vbHRpcDogeyB0eXBlOiBjYXRhbG9nLnRvb2x0aXBUeXBlIH0sXG4gICAgICAgIHNvdXJjZU9wdGlvbnNcbiAgICAgIH1cbiAgICB9IGFzIENhdGFsb2dJdGVtO1xuXG4gICAgcmV0dXJuIE9iamVjdFV0aWxzLnJlbW92ZVVuZGVmaW5lZChsYXllclByZXBhcmUpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVwYXJlQ2F0YWxvZ0l0ZW1Hcm91cChcbiAgICBpdGVtTGlzdEluLFxuICAgIHJlZ2V4ZXMsXG4gICAgaWRHcm91cCxcbiAgICBsYXllcnNRdWVyeUZvcm1hdCxcbiAgICBjYXRhbG9nXG4gICkge1xuICAgIGNvbnN0IGdyb3VwUHJlcGFyZSA9IHtcbiAgICAgIGlkOiBpZEdyb3VwLFxuICAgICAgdHlwZTogQ2F0YWxvZ0l0ZW1UeXBlLkdyb3VwLFxuICAgICAgdGl0bGU6IGl0ZW1MaXN0SW4uVGl0bGUsXG4gICAgICBhZGRyZXNzOiBjYXRhbG9nLmlkLFxuICAgICAgZXh0ZXJuYWxQcm92aWRlcjogY2F0YWxvZy5leHRlcm5hbFByb3ZpZGVyIHx8IGZhbHNlLFxuICAgICAgc29ydERpcmVjdGlvbjogY2F0YWxvZy5zb3J0RGlyZWN0aW9uLCAvLyBwcm9wYWdhdGUgc29ydERpcmVjdGlvblxuICAgICAgaXRlbXM6IGl0ZW1MaXN0SW4uTGF5ZXIucmVkdWNlKChpdGVtczogQ2F0YWxvZ0l0ZW1bXSwgbGF5ZXI6IGFueSkgPT4ge1xuICAgICAgICBpZiAobGF5ZXIuTGF5ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIHJlY3Vyc2l2ZSwgY2hlY2sgbmV4dCBsZXZlbFxuICAgICAgICAgIGNvbnN0IGlkR3JvdXBJdGVtTmV4dExldmVsID1cbiAgICAgICAgICAgIGlkR3JvdXAgKyBgLmdyb3VwLiR7bGF5ZXIuTmFtZSB8fCBsYXllci5MYXllclswXS5OYW1lfWA7XG4gICAgICAgICAgY29uc3QgZ3JvdXBJdGVtOiBDYXRhbG9nSXRlbUdyb3VwID0gdGhpcy5wcmVwYXJlQ2F0YWxvZ0l0ZW1Hcm91cChcbiAgICAgICAgICAgIGxheWVyLFxuICAgICAgICAgICAgcmVnZXhlcyxcbiAgICAgICAgICAgIGlkR3JvdXBJdGVtTmV4dExldmVsLFxuICAgICAgICAgICAgbGF5ZXJzUXVlcnlGb3JtYXQsXG4gICAgICAgICAgICBjYXRhbG9nXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGl0ZW1zLnB1c2goZ3JvdXBJdGVtKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy50ZXN0TGF5ZXJSZWdleGVzKGxheWVyLk5hbWUsIHJlZ2V4ZXMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGxheWVySXRlbTogQ2F0YWxvZ0l0ZW1MYXllcjxJbWFnZUxheWVyT3B0aW9ucz4gPVxuICAgICAgICAgICAgdGhpcy5wcmVwYXJlQ2F0YWxvZ0l0ZW1MYXllcihcbiAgICAgICAgICAgICAgbGF5ZXIsXG4gICAgICAgICAgICAgIGlkR3JvdXAsXG4gICAgICAgICAgICAgIGxheWVyc1F1ZXJ5Rm9ybWF0LFxuICAgICAgICAgICAgICBjYXRhbG9nXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgaXRlbXMucHVzaChsYXllckl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtcztcbiAgICAgIH0sIFtdKVxuICAgIH07XG4gICAgcmV0dXJuIGdyb3VwUHJlcGFyZTtcbiAgfVxuXG4gIHByaXZhdGUgaW5jbHVkZVJlY3Vyc2l2ZUl0ZW1zKFxuICAgIGNhdGFsb2c6IENhdGFsb2csXG4gICAgaXRlbUxpc3RJbjogYW55LFxuICAgIGl0ZW1zUHJlcGFyZTogQ2F0YWxvZ0l0ZW1bXSxcbiAgICBsb29wTGV2ZWwgPSAwXG4gICkge1xuICAgIC8vIERpZyBhbGwgbGV2ZWxzIHVudGlsIGxhc3QgbGV2ZWwgKGxheWVyIG9iamVjdCBhcmUgbm90IGRlZmluZWQgb24gbGFzdCBsZXZlbClcbiAgICBjb25zdCByZWdleGVzID0gKGNhdGFsb2cucmVnRmlsdGVycyB8fCBbXSkubWFwKFxuICAgICAgKHBhdHRlcm46IHN0cmluZykgPT4gbmV3IFJlZ0V4cChwYXR0ZXJuKVxuICAgICk7XG4gICAgaWYgKCFpdGVtTGlzdEluLkxheWVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1MaXN0SW4uTGF5ZXIpIHtcbiAgICAgIGlmIChpdGVtLkxheWVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gcmVjdXJzaXZlLCBjaGVjayBuZXh0IGxldmVsXG4gICAgICAgIHRoaXMuaW5jbHVkZVJlY3Vyc2l2ZUl0ZW1zKGNhdGFsb2csIGl0ZW0sIGl0ZW1zUHJlcGFyZSwgbG9vcExldmVsICsgMSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBsYXllcnNRdWVyeUZvcm1hdCA9IHRoaXMuZmluZENhdGFsb2dJbmZvRm9ybWF0KGNhdGFsb2cpO1xuXG4gICAgICAvLyBncm91cCh3aXRoIGxheWVycykgYW5kIGxheWVyKHdpdGhvdXQgZ3JvdXApIGxldmVsIDFcbiAgICAgIGlmIChsb29wTGV2ZWwgIT09IDApIHtcbiAgICAgICAgLy8gVE9ETzogU2xpY2UgdGhhdCBpbnRvIG11bHRpcGxlIG1ldGhvZHNcbiAgICAgICAgLy8gRGVmaW5lIG9iamVjdCBvZiBncm91cCBsYXllclxuICAgICAgICBjb25zdCBpZEdyb3VwSXRlbSA9IGBjYXRhbG9nLmdyb3VwLiR7aXRlbUxpc3RJbi5OYW1lIHx8IGl0ZW0uTmFtZX1gO1xuICAgICAgICBjb25zdCBncm91cEl0ZW0gPSB0aGlzLnByZXBhcmVDYXRhbG9nSXRlbUdyb3VwKFxuICAgICAgICAgIGl0ZW1MaXN0SW4sXG4gICAgICAgICAgcmVnZXhlcyxcbiAgICAgICAgICBpZEdyb3VwSXRlbSxcbiAgICAgICAgICBsYXllcnNRdWVyeUZvcm1hdCxcbiAgICAgICAgICBjYXRhbG9nXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGdyb3VwSXRlbS5pdGVtcy5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICBpdGVtc1ByZXBhcmUucHVzaChncm91cEl0ZW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQnJlYWsgdGhlIGdyb3VwIChkb24ndCBhZGQgYSBncm91cCBvZiBsYXllciBmb3IgZWFjaCBvZiB0aGVpciBsYXllciEpXG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbGF5ZXIgd2l0aG91dCBncm91cFxuICAgICAgICBpZiAodGhpcy50ZXN0TGF5ZXJSZWdleGVzKGl0ZW0uTmFtZSwgcmVnZXhlcykgIT09IGZhbHNlKSB7XG4gICAgICAgICAgY29uc3QgbGF5ZXJJdGVtID0gdGhpcy5wcmVwYXJlQ2F0YWxvZ0l0ZW1MYXllcihcbiAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICBjYXRhbG9nLmlkLFxuICAgICAgICAgICAgbGF5ZXJzUXVlcnlGb3JtYXQsXG4gICAgICAgICAgICBjYXRhbG9nXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpdGVtc1ByZXBhcmUucHVzaChsYXllckl0ZW0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8vIFdNVFNcblxuICBwcml2YXRlIGdldFdNVFNJdGVtcyhcbiAgICBjYXRhbG9nLFxuICAgIGNhcGFiaWxpdGllczogUmVjb3JkPHN0cmluZywgYW55PlxuICApOiBDYXRhbG9nSXRlbUxheWVyW10ge1xuICAgIGlmICghY2FwYWJpbGl0aWVzKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGNvbnN0IGxheWVycyA9IGNhcGFiaWxpdGllcy5Db250ZW50cy5MYXllcjtcbiAgICBjb25zdCByZWdleGVzID0gKGNhdGFsb2cucmVnRmlsdGVycyB8fCBbXSkubWFwKFxuICAgICAgKHBhdHRlcm46IHN0cmluZykgPT4gbmV3IFJlZ0V4cChwYXR0ZXJuKVxuICAgICk7XG5cbiAgICBpZiAoXG4gICAgICBjYXBhYmlsaXRpZXMuU2VydmljZUlkZW50aWZpY2F0aW9uICYmXG4gICAgICBjYXBhYmlsaXRpZXMuU2VydmljZUlkZW50aWZpY2F0aW9uLkFic3RyYWN0ICYmXG4gICAgICBjYXBhYmlsaXRpZXMuU2VydmljZUlkZW50aWZpY2F0aW9uLkFic3RyYWN0Lmxlbmd0aFxuICAgICkge1xuICAgICAgY2F0YWxvZy5hYnN0cmFjdCA9IGNhcGFiaWxpdGllcy5TZXJ2aWNlSWRlbnRpZmljYXRpb24uQWJzdHJhY3Q7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxheWVyc1xuICAgICAgLm1hcCgobGF5ZXI6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzVG9Gb3JjZSA9IHRoaXMuY29tcHV0ZUZvcmNlZFByb3BlcnRpZXMoXG4gICAgICAgICAgbGF5ZXIuVGl0bGUsXG4gICAgICAgICAgY2F0YWxvZy5mb3JjZWRQcm9wZXJ0aWVzXG4gICAgICAgICk7XG4gICAgICAgIGxldCBleHRlcm4gPSB0cnVlO1xuXG4gICAgICAgIGNvbnN0IG1ldGFkYXRhVXJsID1cbiAgICAgICAgICBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFVcmwgfHwgcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhVXJsQWxsO1xuICAgICAgICBjb25zdCBtZXRhZGF0YUFic3RyYWN0ID1cbiAgICAgICAgICBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFBYnN0cmFjdCB8fFxuICAgICAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YUFic3RyYWN0QWxsIHx8XG4gICAgICAgICAgY2F0YWxvZy5hYnN0cmFjdDtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgIXByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YVVybCAmJlxuICAgICAgICAgICFwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFVcmxBbGwgJiZcbiAgICAgICAgICAocHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhQWJzdHJhY3QgfHxcbiAgICAgICAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YUFic3RyYWN0QWxsKVxuICAgICAgICApIHtcbiAgICAgICAgICBleHRlcm4gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhQWJzdHJhY3QgJiZcbiAgICAgICAgICBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFVcmxBbGxcbiAgICAgICAgKSB7XG4gICAgICAgICAgZXh0ZXJuID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy50ZXN0TGF5ZXJSZWdleGVzKGxheWVyLklkZW50aWZpZXIsIHJlZ2V4ZXMpID09PSBmYWxzZSkge1xuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyYW1zID0gT2JqZWN0LmFzc2lnbih7fSwgY2F0YWxvZy5xdWVyeVBhcmFtcywge1xuICAgICAgICAgIHZlcnNpb246ICcxLjAuMCdcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGJhc2VTb3VyY2VPcHRpb25zID0ge1xuICAgICAgICAgIHR5cGU6ICd3bXRzJyxcbiAgICAgICAgICB1cmw6IGNhdGFsb2cudXJsLFxuICAgICAgICAgIGNyb3NzT3JpZ2luOiBjYXRhbG9nLnNldENyb3NzT3JpZ2luQW5vbnltb3VzXG4gICAgICAgICAgICA/ICdhbm9ueW1vdXMnXG4gICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBsYXllcjogbGF5ZXIuSWRlbnRpZmllcixcbiAgICAgICAgICBtYXRyaXhTZXQ6IGNhdGFsb2cubWF0cml4U2V0LFxuICAgICAgICAgIG9wdGlvbnNGcm9tQ2FwYWJpbGl0aWVzOiB0cnVlLFxuICAgICAgICAgIHJlcXVlc3RFbmNvZGluZzogY2F0YWxvZy5yZXF1ZXN0RW5jb2RpbmcgfHwgJ0tWUCcsXG4gICAgICAgICAgc3R5bGU6ICdkZWZhdWx0J1xuICAgICAgICB9IGFzIFdNVFNEYXRhU291cmNlT3B0aW9ucztcbiAgICAgICAgY29uc3Qgc291cmNlT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAge30sXG4gICAgICAgICAgYmFzZVNvdXJjZU9wdGlvbnMsXG4gICAgICAgICAgY2F0YWxvZy5zb3VyY2VPcHRpb25zLFxuICAgICAgICAgIHsgcGFyYW1zIH1cbiAgICAgICAgKSBhcyBXTVRTRGF0YVNvdXJjZU9wdGlvbnM7XG5cbiAgICAgICAgcmV0dXJuIE9iamVjdFV0aWxzLnJlbW92ZVVuZGVmaW5lZCh7XG4gICAgICAgICAgaWQ6IGdlbmVyYXRlSWRGcm9tU291cmNlT3B0aW9ucyhzb3VyY2VPcHRpb25zKSxcbiAgICAgICAgICB0eXBlOiBDYXRhbG9nSXRlbVR5cGUuTGF5ZXIsXG4gICAgICAgICAgdGl0bGU6IHByb3BlcnRpZXNUb0ZvcmNlPy50aXRsZVxuICAgICAgICAgICAgPyBwcm9wZXJ0aWVzVG9Gb3JjZS50aXRsZVxuICAgICAgICAgICAgOiBsYXllci5UaXRsZSxcbiAgICAgICAgICBhZGRyZXNzOiBjYXRhbG9nLmlkLFxuICAgICAgICAgIGV4dGVybmFsUHJvdmlkZXI6IGNhdGFsb2cuZXh0ZXJuYWxQcm92aWRlcixcbiAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICBzb3VyY2VPcHRpb25zLFxuICAgICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgdXJsOiBtZXRhZGF0YVVybCxcbiAgICAgICAgICAgICAgZXh0ZXJuLFxuICAgICAgICAgICAgICBhYnN0cmFjdDogbWV0YWRhdGFBYnN0cmFjdCxcbiAgICAgICAgICAgICAgdHlwZTogYmFzZVNvdXJjZU9wdGlvbnMudHlwZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBhcyBDYXRhbG9nSXRlbSk7XG4gICAgICB9KVxuICAgICAgLmZpbHRlcigoaXRlbTogQ2F0YWxvZ0l0ZW1MYXllciB8IHVuZGVmaW5lZCkgPT4gaXRlbSAhPT0gdW5kZWZpbmVkKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QXJjR0lTUkVTVEl0ZW1zKFxuICAgIGNhdGFsb2c6IENhdGFsb2csXG4gICAgY2FwYWJpbGl0aWVzXG4gICk6IENhdGFsb2dJdGVtTGF5ZXJbXSB7XG4gICAgaWYgKCFjYXBhYmlsaXRpZXMgfHwgIWNhcGFiaWxpdGllcy5sYXllcnMpIHtcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuZXJyb3IoXG4gICAgICAgICdpZ28uZ2VvLmNhdGFsb2cuc29tZVVuYXZhaWxhYmxlJyxcbiAgICAgICAgJ2lnby5nZW8uY2F0YWxvZy51bmF2YWlsYWJsZVRpdGxlJ1xuICAgICAgKTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3QgZ3JvdXBzOiBBcmNHSVNSZXN0Q2FwYWJpbGl0aWVzTGF5ZXJbXSA9ICFjYXBhYmlsaXRpZXMubGF5ZXJzXG4gICAgICA/IFtdXG4gICAgICA6IGNhcGFiaWxpdGllcy5sYXllcnMuZmlsdGVyKChsYXllcikgPT4gbGF5ZXIuc3ViTGF5ZXJJZHMpO1xuICAgIGNvbnN0IGxheWVyczogQXJjR0lTUmVzdENhcGFiaWxpdGllc0xheWVyW10gPSAhY2FwYWJpbGl0aWVzLmxheWVyc1xuICAgICAgPyBbXVxuICAgICAgOiBjYXBhYmlsaXRpZXMubGF5ZXJzLmZpbHRlcihcbiAgICAgICAgICAobGF5ZXIpID0+XG4gICAgICAgICAgICAhbGF5ZXIudHlwZSB8fFxuICAgICAgICAgICAgbGF5ZXIudHlwZSA9PT0gQXJjR0lTUmVzdENhcGFiaWxpdGllc0xheWVyVHlwZXMuRmVhdHVyZUxheWVyIHx8XG4gICAgICAgICAgICBsYXllci50eXBlID09PSBBcmNHSVNSZXN0Q2FwYWJpbGl0aWVzTGF5ZXJUeXBlcy5SYXN0ZXJMYXllclxuICAgICAgICApO1xuXG4gICAgY29uc3QgcmVnZXhlcyA9IChjYXRhbG9nLnJlZ0ZpbHRlcnMgfHwgW10pLm1hcChcbiAgICAgIChwYXR0ZXJuOiBzdHJpbmcpID0+IG5ldyBSZWdFeHAocGF0dGVybilcbiAgICApO1xuXG4gICAgY29uc3QgaXRlbXM6IENhdGFsb2dJdGVtTGF5ZXJbXSA9IGxheWVyc1xuICAgICAgLm1hcCgobGF5ZXI6IEFyY0dJU1Jlc3RDYXBhYmlsaXRpZXNMYXllcikgPT4ge1xuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzVG9Gb3JjZSA9IHRoaXMuY29tcHV0ZUZvcmNlZFByb3BlcnRpZXMoXG4gICAgICAgICAgbGF5ZXIubmFtZSxcbiAgICAgICAgICBjYXRhbG9nLmZvcmNlZFByb3BlcnRpZXNcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgYmFzZUFic3RyYWN0ID0gY2F0YWxvZy5hYnN0cmFjdDtcbiAgICAgICAgbGV0IGV4dGVybiA9IHRydWU7XG5cbiAgICAgICAgY29uc3QgbWV0YWRhdGFVcmwgPVxuICAgICAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YVVybCB8fCBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFVcmxBbGw7XG4gICAgICAgIGNvbnN0IG1ldGFkYXRhQWJzdHJhY3QgPVxuICAgICAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YUFic3RyYWN0IHx8XG4gICAgICAgICAgcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhQWJzdHJhY3RBbGwgfHxcbiAgICAgICAgICBiYXNlQWJzdHJhY3Q7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICFwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFVcmwgJiZcbiAgICAgICAgICAhcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhVXJsQWxsICYmXG4gICAgICAgICAgKHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YUFic3RyYWN0IHx8XG4gICAgICAgICAgICBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFBYnN0cmFjdEFsbClcbiAgICAgICAgKSB7XG4gICAgICAgICAgZXh0ZXJuID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YUFic3RyYWN0ICYmXG4gICAgICAgICAgcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhVXJsQWxsXG4gICAgICAgICkge1xuICAgICAgICAgIGV4dGVybiA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMudGVzdExheWVyUmVnZXhlcyhsYXllci5pZC50b1N0cmluZygpLCByZWdleGVzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJhc2VTb3VyY2VPcHRpb25zOiBBcmNHSVNSZXN0RGF0YVNvdXJjZU9wdGlvbnMgJlxuICAgICAgICAgIFF1ZXJ5YWJsZURhdGFTb3VyY2VPcHRpb25zID0ge1xuICAgICAgICAgIHR5cGU6IFR5cGVDYXRhbG9nW2NhdGFsb2cudHlwZV0gYXMgYW55LFxuICAgICAgICAgIHVybDogY2F0YWxvZy51cmwsXG4gICAgICAgICAgbGF5ZXI6IGxheWVyLmlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgcXVlcnlhYmxlOiB0cnVlLFxuICAgICAgICAgIHF1ZXJ5Rm9ybWF0OiBRdWVyeUZvcm1hdC5FU1JJSlNPTixcbiAgICAgICAgICBvcHRpb25zRnJvbUNhcGFiaWxpdGllczogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBzb3VyY2VPcHRpb25zOiBBcmNHSVNSZXN0RGF0YVNvdXJjZU9wdGlvbnMgPSBPYmplY3QuYXNzaWduKFxuICAgICAgICAgIHt9LFxuICAgICAgICAgIGJhc2VTb3VyY2VPcHRpb25zLFxuICAgICAgICAgIGNhdGFsb2cuc291cmNlT3B0aW9uc1xuICAgICAgICApO1xuICAgICAgICByZXR1cm4gT2JqZWN0VXRpbHMucmVtb3ZlVW5kZWZpbmVkKHtcbiAgICAgICAgICBpZDogZ2VuZXJhdGVJZEZyb21Tb3VyY2VPcHRpb25zKHNvdXJjZU9wdGlvbnMpLFxuICAgICAgICAgIHR5cGU6IENhdGFsb2dJdGVtVHlwZS5MYXllcixcbiAgICAgICAgICB0aXRsZTogcHJvcGVydGllc1RvRm9yY2U/LnRpdGxlXG4gICAgICAgICAgICA/IHByb3BlcnRpZXNUb0ZvcmNlLnRpdGxlXG4gICAgICAgICAgICA6IGxheWVyLm5hbWUsXG4gICAgICAgICAgZXh0ZXJuYWxQcm92aWRlcjogY2F0YWxvZy5leHRlcm5hbFByb3ZpZGVyLFxuICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIHNvdXJjZU9wdGlvbnMsXG4gICAgICAgICAgICBtaW5SZXNvbHV0aW9uOiBnZXRSZXNvbHV0aW9uRnJvbVNjYWxlKGxheWVyLm1heFNjYWxlKSxcbiAgICAgICAgICAgIG1heFJlc29sdXRpb246IGdldFJlc29sdXRpb25Gcm9tU2NhbGUobGF5ZXIubWluU2NhbGUpLFxuICAgICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgdXJsOiBtZXRhZGF0YVVybCxcbiAgICAgICAgICAgICAgZXh0ZXJuLFxuICAgICAgICAgICAgICBhYnN0cmFjdDogbWV0YWRhdGFBYnN0cmFjdCxcbiAgICAgICAgICAgICAgdHlwZTogY2F0YWxvZy50eXBlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGFzIENhdGFsb2dJdGVtKTtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKChpdGVtOiBDYXRhbG9nSXRlbUxheWVyIHwgdW5kZWZpbmVkKSA9PiBpdGVtICE9PSB1bmRlZmluZWQpO1xuICAgIGNvbnN0IGdyb3VwSGFuZGxlZExheWVyc0lkczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBncm91cGVkSXRlbXM6IENhdGFsb2dJdGVtTGF5ZXJbXSA9IGdyb3Vwc1xuICAgICAgLm1hcCgoZ3JvdXApID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBvcHRpb25zOiB1bmRlZmluZWQsXG4gICAgICAgICAgYWRkcmVzczogYGNhdGFsb2cuZ3JvdXAuJHtncm91cC5uYW1lfWAsXG4gICAgICAgICAgaWQ6IGBjYXRhbG9nLmdyb3VwLiR7Z3JvdXAubmFtZX1gLFxuICAgICAgICAgIHR5cGU6IENhdGFsb2dJdGVtVHlwZS5Hcm91cCxcbiAgICAgICAgICBleHRlcm5hbFByb3ZpZGVyOiBjYXRhbG9nLmV4dGVybmFsUHJvdmlkZXIsXG4gICAgICAgICAgc29ydERpcmVjdGlvbjogY2F0YWxvZy5zb3J0RGlyZWN0aW9uLFxuICAgICAgICAgIHRpdGxlOiBncm91cC5uYW1lLFxuICAgICAgICAgIGl0ZW1zOiBpdGVtc1xuICAgICAgICAgICAgLmZpbHRlcigoaSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBzdWJMYXllcklkc1N0ciA9IGdyb3VwLnN1YkxheWVySWRzLm1hcCgocikgPT4gci50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHN1YkxheWVySWRzU3RyLmluY2x1ZGVzKFxuICAgICAgICAgICAgICAgIChpLm9wdGlvbnMuc291cmNlT3B0aW9ucyBhcyBBcmNHSVNSZXN0RGF0YVNvdXJjZU9wdGlvbnMpLmxheWVyXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLm1hcCgoaSkgPT4ge1xuICAgICAgICAgICAgICBncm91cEhhbmRsZWRMYXllcnNJZHMucHVzaChpLmlkKTtcbiAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGksIHtcbiAgICAgICAgICAgICAgICBhZGRyZXNzOiBgY2F0YWxvZy5ncm91cC4ke2dyb3VwLm5hbWV9YFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG4gICAgICB9KVxuICAgICAgLmZpbHRlcigoZykgPT4gZy5pdGVtcy5sZW5ndGgpO1xuXG4gICAgaWYgKGdyb3Vwcykge1xuICAgICAgY29uc3QgVGl0bGVPcklkID0gY2F0YWxvZy50aXRsZSB8fCBjYXRhbG9nLmlkO1xuICAgICAgY29uc3Qgbm9uSGFuZGxlZExheWVycyA9IGl0ZW1zXG4gICAgICAgIC5maWx0ZXIoKGkpID0+ICFncm91cEhhbmRsZWRMYXllcnNJZHMuaW5jbHVkZXMoaS5pZCkpXG4gICAgICAgIC5tYXAoKGkpID0+XG4gICAgICAgICAgT2JqZWN0LmFzc2lnbih7fSwgaSwge1xuICAgICAgICAgICAgYWRkcmVzczogYGNhdGFsb2cuZ3JvdXAuJHtUaXRsZU9ySWR9YFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICBpZiAobm9uSGFuZGxlZExheWVycy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3Qgbm9uSGFuZGxlZEdyb3VwID0ge1xuICAgICAgICAgIG9wdGlvbnM6IHVuZGVmaW5lZCxcbiAgICAgICAgICBhZGRyZXNzOiBgY2F0YWxvZy5ncm91cC4ke1RpdGxlT3JJZH1gLFxuICAgICAgICAgIGlkOiBgY2F0YWxvZy5ncm91cC4ke1RpdGxlT3JJZH1gLFxuICAgICAgICAgIHR5cGU6IENhdGFsb2dJdGVtVHlwZS5Hcm91cCxcbiAgICAgICAgICBleHRlcm5hbFByb3ZpZGVyOiBjYXRhbG9nLmV4dGVybmFsUHJvdmlkZXIsXG4gICAgICAgICAgc29ydERpcmVjdGlvbjogY2F0YWxvZy5zb3J0RGlyZWN0aW9uLFxuICAgICAgICAgIHRpdGxlOiBUaXRsZU9ySWQsXG4gICAgICAgICAgaXRlbXM6IG5vbkhhbmRsZWRMYXllcnNcbiAgICAgICAgfTtcbiAgICAgICAgZ3JvdXBlZEl0ZW1zLnB1c2gobm9uSGFuZGxlZEdyb3VwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZ3JvdXBzID8gZ3JvdXBlZEl0ZW1zIDogaXRlbXM7XG4gIH1cblxuICBwcml2YXRlIHRlc3RMYXllclJlZ2V4ZXMobGF5ZXJOYW1lOiBzdHJpbmcsIHJlZ2V4ZXM6IFJlZ0V4cFtdKTogYm9vbGVhbiB7XG4gICAgaWYgKHJlZ2V4ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlZ2V4ZXMuZmluZCgocmVnZXg6IFJlZ0V4cCkgPT4gcmVnZXgudGVzdChsYXllck5hbWUpKSAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSByZXRyaWV2ZUxheWVySW5mb0Zvcm1hdChcbiAgICBsYXllck5hbWVGcm9tQ2F0YWxvZzogc3RyaW5nLFxuICAgIGxheWVyc1F1ZXJ5Rm9ybWF0OiB7IGxheWVyOiBzdHJpbmc7IHF1ZXJ5Rm9ybWF0OiBRdWVyeUZvcm1hdCB9W11cbiAgKTogUXVlcnlGb3JtYXQge1xuICAgIGNvbnN0IGN1cnJlbnRMYXllckluZm9Gb3JtYXQgPSBsYXllcnNRdWVyeUZvcm1hdC5maW5kKFxuICAgICAgKGYpID0+IGYubGF5ZXIgPT09IGxheWVyTmFtZUZyb21DYXRhbG9nXG4gICAgKTtcbiAgICBjb25zdCBiYXNlSW5mb0Zvcm1hdCA9IGxheWVyc1F1ZXJ5Rm9ybWF0LmZpbmQoKGYpID0+IGYubGF5ZXIgPT09ICcqJyk7XG4gICAgbGV0IHF1ZXJ5Rm9ybWF0OiBRdWVyeUZvcm1hdDtcbiAgICBpZiAoY3VycmVudExheWVySW5mb0Zvcm1hdCkge1xuICAgICAgcXVlcnlGb3JtYXQgPSBjdXJyZW50TGF5ZXJJbmZvRm9ybWF0LnF1ZXJ5Rm9ybWF0O1xuICAgIH0gZWxzZSBpZiAoYmFzZUluZm9Gb3JtYXQpIHtcbiAgICAgIHF1ZXJ5Rm9ybWF0ID0gYmFzZUluZm9Gb3JtYXQucXVlcnlGb3JtYXQ7XG4gICAgfVxuICAgIHJldHVybiBxdWVyeUZvcm1hdDtcbiAgfVxuXG4gIHByaXZhdGUgZmluZENhdGFsb2dJbmZvRm9ybWF0KFxuICAgIGNhdGFsb2c6IENhdGFsb2dcbiAgKTogeyBsYXllcjogc3RyaW5nOyBxdWVyeUZvcm1hdDogUXVlcnlGb3JtYXQgfVtdIHtcbiAgICBjb25zdCBsYXllcnNRdWVyeUZvcm1hdDogeyBsYXllcjogc3RyaW5nOyBxdWVyeUZvcm1hdDogUXVlcnlGb3JtYXQgfVtdID0gW107XG4gICAgaWYgKCFjYXRhbG9nLnF1ZXJ5Rm9ybWF0KSB7XG4gICAgICByZXR1cm4gbGF5ZXJzUXVlcnlGb3JtYXQ7XG4gICAgfVxuICAgIE9iamVjdC5rZXlzKGNhdGFsb2cucXVlcnlGb3JtYXQpLmZvckVhY2goKGNvbmZpZ3VyZWRJbmZvRm9ybWF0KSA9PiB7XG4gICAgICBpZiAoY2F0YWxvZy5xdWVyeUZvcm1hdFtjb25maWd1cmVkSW5mb0Zvcm1hdF0gaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICBjYXRhbG9nLnF1ZXJ5Rm9ybWF0W2NvbmZpZ3VyZWRJbmZvRm9ybWF0XS5mb3JFYWNoKChsYXllck5hbWUpID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhbGF5ZXJzUXVlcnlGb3JtYXQuZmluZCgoc3BlY2lmaWMpID0+IHNwZWNpZmljLmxheWVyID09PSBsYXllck5hbWUpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBsYXllcnNRdWVyeUZvcm1hdC5wdXNoKHtcbiAgICAgICAgICAgICAgbGF5ZXI6IGxheWVyTmFtZSxcbiAgICAgICAgICAgICAgcXVlcnlGb3JtYXQ6IGNvbmZpZ3VyZWRJbmZvRm9ybWF0IGFzIFF1ZXJ5Rm9ybWF0XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFsYXllcnNRdWVyeUZvcm1hdC5maW5kKFxuICAgICAgICAgICAgKHNwZWNpZmljKSA9PlxuICAgICAgICAgICAgICBzcGVjaWZpYy5sYXllciA9PT0gY2F0YWxvZy5xdWVyeUZvcm1hdFtjb25maWd1cmVkSW5mb0Zvcm1hdF1cbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIGxheWVyc1F1ZXJ5Rm9ybWF0LnB1c2goe1xuICAgICAgICAgICAgbGF5ZXI6IGNhdGFsb2cucXVlcnlGb3JtYXRbY29uZmlndXJlZEluZm9Gb3JtYXRdLFxuICAgICAgICAgICAgcXVlcnlGb3JtYXQ6IGNvbmZpZ3VyZWRJbmZvRm9ybWF0IGFzIFF1ZXJ5Rm9ybWF0XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gbGF5ZXJzUXVlcnlGb3JtYXQ7XG4gIH1cbn1cblxuY2xhc3MgQ2F0YWxvZ0ZhY3Rvcnkge1xuICBwdWJsaWMgc3RhdGljIGNyZWF0ZUluc3RhbmNlQ2F0YWxvZyhcbiAgICBvcHRpb25zOiBDYXRhbG9nLFxuICAgIGNhdGFsb2dTZXJ2aWNlOiBDYXRhbG9nU2VydmljZVxuICApOiBDYXRhbG9nIHtcbiAgICBsZXQgY2F0YWxvZzogQ2F0YWxvZztcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgaWYgKG9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2NvbXBvc2l0ZScpKSB7XG4gICAgICBjYXRhbG9nID0gbmV3IENvbXBvc2l0ZUNhdGFsb2cob3B0aW9ucywgKGNhdGFsb2c6IENhdGFsb2cpID0+XG4gICAgICAgIGNhdGFsb2dTZXJ2aWNlLmxvYWRDYXRhbG9nQ29tcG9zaXRlTGF5ZXJJdGVtcyhjYXRhbG9nKVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMudHlwZSA9PT0gVHlwZUNhdGFsb2dbVHlwZUNhdGFsb2cuYmFzZWxheWVyc10pIHtcbiAgICAgIGNhdGFsb2cgPSBuZXcgQmFzZWxheWVyc0NhdGFsb2cob3B0aW9ucywgKGNhdGFsb2c6IENhdGFsb2cpID0+XG4gICAgICAgIGNhdGFsb2dTZXJ2aWNlLmxvYWRDYXRhbG9nQmFzZUxheWVySXRlbXMoY2F0YWxvZylcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLnR5cGUgPT09IFR5cGVDYXRhbG9nW1R5cGVDYXRhbG9nLmFyY2dpc3Jlc3RdKSB7XG4gICAgICBjYXRhbG9nID0gbmV3IEFyY0dJU1Jlc3RDYXRhbG9nKG9wdGlvbnMsIChjYXRhbG9nOiBDYXRhbG9nKSA9PlxuICAgICAgICBjYXRhbG9nU2VydmljZS5sb2FkQ2F0YWxvZ0FyY0dJU1Jlc3RJdGVtcyhjYXRhbG9nKVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMudHlwZSA9PT0gVHlwZUNhdGFsb2dbVHlwZUNhdGFsb2cudGlsZWFyY2dpc3Jlc3RdKSB7XG4gICAgICBjYXRhbG9nID0gbmV3IFRpbGVPckltYWdlQXJjR0lTUmVzdENhdGFsb2coXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIChjYXRhbG9nOiBDYXRhbG9nKSA9PlxuICAgICAgICAgIGNhdGFsb2dTZXJ2aWNlLmxvYWRDYXRhbG9nQXJjR0lTUmVzdEl0ZW1zKGNhdGFsb2cpLFxuICAgICAgICBUeXBlQ2F0YWxvZy50aWxlYXJjZ2lzcmVzdFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMudHlwZSA9PT0gVHlwZUNhdGFsb2dbVHlwZUNhdGFsb2cuaW1hZ2VhcmNnaXNyZXN0XSkge1xuICAgICAgY2F0YWxvZyA9IG5ldyBUaWxlT3JJbWFnZUFyY0dJU1Jlc3RDYXRhbG9nKFxuICAgICAgICBvcHRpb25zLFxuICAgICAgICAoY2F0YWxvZzogQ2F0YWxvZykgPT5cbiAgICAgICAgICBjYXRhbG9nU2VydmljZS5sb2FkQ2F0YWxvZ0FyY0dJU1Jlc3RJdGVtcyhjYXRhbG9nKSxcbiAgICAgICAgVHlwZUNhdGFsb2cuaW1hZ2VhcmNnaXNyZXN0XG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy50eXBlID09PSBUeXBlQ2F0YWxvZ1tUeXBlQ2F0YWxvZy53bXRzXSkge1xuICAgICAgY2F0YWxvZyA9IG5ldyBXTVRTQ2F0YWxvZyhvcHRpb25zLCAoY2F0YWxvZzogQ2F0YWxvZykgPT5cbiAgICAgICAgY2F0YWxvZ1NlcnZpY2UubG9hZENhdGFsb2dXTVRTTGF5ZXJJdGVtcyhjYXRhbG9nKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2F0YWxvZyA9IG5ldyBXTVNDYXRhbG9nKG9wdGlvbnMsIChjYXRhbG9nOiBDYXRhbG9nKSA9PlxuICAgICAgICBjYXRhbG9nU2VydmljZS5sb2FkQ2F0YWxvZ1dNU0xheWVySXRlbXMoY2F0YWxvZylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhdGFsb2c7XG4gIH1cbn1cbiJdfQ==
|
|
706
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2VvL3NyYy9saWIvY2F0YWxvZy9zaGFyZWQvY2F0YWxvZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRWhELE9BQU8sRUFBRSxLQUFLLEVBQWMsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpELE9BQU8sRUFFTCxnQ0FBZ0MsRUFDakMsTUFBTSxnREFBZ0QsQ0FBQztBQUN4RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQVFuRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFN0QsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFdkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVE5RCxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDaEIsNEJBQTRCLEVBQzVCLFVBQVUsRUFDVixX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Q0FBQzthQUFNLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxXQUFXLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7WUFDcEUsT0FBTyxHQUFHLElBQUksNEJBQTRCLENBQ3hDLE9BQU8sRUFDUCxDQUFDLE9BQWdCLEVBQUUsRUFBRSxDQUNuQixjQUFjLENBQUMsMEJBQTBCLENBQUMsT0FBTyxDQUFDLEVBQ3BELFdBQVcsQ0FBQyxjQUFjLENBQzNCLENBQUM7UUFDSixDQUFDO2FBQU0sSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztZQUNyRSxPQUFPLEdBQUcsSUFBSSw0QkFBNEIsQ0FDeEMsT0FBTyxFQUNQLENBQUMsT0FBZ0IsRUFBRSxFQUFFLENBQ25CLGNBQWMsQ0FBQywwQkFBMEIsQ0FBQyxPQUFPLENBQUMsRUFDcEQsV0FBVyxDQUFDLGVBQWUsQ0FDNUIsQ0FBQztRQUNKLENBQUM7YUFBTSxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzFELE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFnQixFQUFFLEVBQUUsQ0FDdEQsY0FBYyxDQUFDLHlCQUF5QixDQUFDLE9BQU8sQ0FBQyxDQUNsRCxDQUFDO1FBQ0osQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLEdBQUcsSUFBSSxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBZ0IsRUFBRSxFQUFFLENBQ3JELGNBQWMsQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsQ0FDakQsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBDb25maWdTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZS9jb25maWcnO1xuaW1wb3J0IHsgTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZS9sYW5ndWFnZSc7XG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUvbWVzc2FnZSc7XG5pbXBvcnQgeyBPYmplY3RVdGlscywgdXVpZCB9IGZyb20gJ0BpZ28yL3V0aWxzJztcblxuaW1wb3J0IHsgRU1QVFksIE9ic2VydmFibGUsIG9mLCB6aXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtcbiAgQXJjR0lTUmVzdENhcGFiaWxpdGllc0xheWVyLFxuICBBcmNHSVNSZXN0Q2FwYWJpbGl0aWVzTGF5ZXJUeXBlc1xufSBmcm9tICcuLi8uLi9kYXRhc291cmNlL3NoYXJlZC9jYXBhYmlsaXRpZXMuaW50ZXJmYWNlJztcbmltcG9ydCB7IENhcGFiaWxpdGllc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9kYXRhc291cmNlL3NoYXJlZC9jYXBhYmlsaXRpZXMuc2VydmljZSc7XG5pbXBvcnQge1xuICBBcmNHSVNSZXN0RGF0YVNvdXJjZU9wdGlvbnMsXG4gIFdNU0RhdGFTb3VyY2VPcHRpb25zLFxuICBXTVNEYXRhU291cmNlT3B0aW9uc1BhcmFtcyxcbiAgV01UU0RhdGFTb3VyY2VPcHRpb25zXG59IGZyb20gJy4uLy4uL2RhdGFzb3VyY2Uvc2hhcmVkL2RhdGFzb3VyY2VzJztcbmltcG9ydCB7IEltYWdlTGF5ZXJPcHRpb25zLCBMYXllck9wdGlvbnMgfSBmcm9tICcuLi8uLi9sYXllci9zaGFyZWQnO1xuaW1wb3J0IHsgZ2V0UmVzb2x1dGlvbkZyb21TY2FsZSB9IGZyb20gJy4uLy4uL21hcC9zaGFyZWQvbWFwLnV0aWxzJztcbmltcG9ydCB7IFF1ZXJ5Rm9ybWF0IH0gZnJvbSAnLi4vLi4vcXVlcnkvc2hhcmVkL3F1ZXJ5LmVudW1zJztcbmltcG9ydCB7IFF1ZXJ5YWJsZURhdGFTb3VyY2VPcHRpb25zIH0gZnJvbSAnLi4vLi4vcXVlcnkvc2hhcmVkL3F1ZXJ5LmludGVyZmFjZXMnO1xuaW1wb3J0IHsgZ2VuZXJhdGVJZEZyb21Tb3VyY2VPcHRpb25zIH0gZnJvbSAnLi4vLi4vdXRpbHMvaWQtZ2VuZXJhdG9yJztcbmltcG9ydCB7IENhdGFsb2cgfSBmcm9tICcuL2NhdGFsb2cuYWJzdHJhY3QnO1xuaW1wb3J0IHsgQ2F0YWxvZ0l0ZW1UeXBlLCBUeXBlQ2F0YWxvZyB9IGZyb20gJy4vY2F0YWxvZy5lbnVtJztcbmltcG9ydCB7XG4gIENhdGFsb2dJdGVtLFxuICBDYXRhbG9nSXRlbUdyb3VwLFxuICBDYXRhbG9nSXRlbUxheWVyLFxuICBDYXRhbG9nU2VydmljZU9wdGlvbnMsXG4gIEZvcmNlZFByb3BlcnR5XG59IGZyb20gJy4vY2F0YWxvZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgQXJjR0lTUmVzdENhdGFsb2csXG4gIEJhc2VsYXllcnNDYXRhbG9nLFxuICBDb21wb3NpdGVDYXRhbG9nLFxuICBUaWxlT3JJbWFnZUFyY0dJU1Jlc3RDYXRhbG9nLFxuICBXTVNDYXRhbG9nLFxuICBXTVRTQ2F0YWxvZ1xufSBmcm9tICcuL2NhdGFsb2dzJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQ2F0YWxvZ1NlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBjb25maWc6IENvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBsYW5ndWFnZVNlcnZpY2U6IExhbmd1YWdlU2VydmljZSxcbiAgICBwcml2YXRlIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcbiAgICBwcml2YXRlIGNhcGFiaWxpdGllc1NlcnZpY2U6IENhcGFiaWxpdGllc1NlcnZpY2VcbiAgKSB7fVxuXG4gIGxvYWRDYXRhbG9ncygpOiBPYnNlcnZhYmxlPENhdGFsb2dbXT4ge1xuICAgIGNvbnN0IGNvbnRleHRDb25maWcgPSB0aGlzLmNvbmZpZy5nZXRDb25maWcoJ2NvbnRleHQnKSB8fCB7fTtcblxuICAgIGNvbnN0IGNhdGFsb2dDb25maWc6IENhdGFsb2dTZXJ2aWNlT3B0aW9ucyA9XG4gICAgICB0aGlzLmNvbmZpZy5nZXRDb25maWcoJ2NhdGFsb2cnKSB8fCB7fTtcbiAgICBjb25zdCBhcGlVcmwgPSBjYXRhbG9nQ29uZmlnLnVybCB8fCBjb250ZXh0Q29uZmlnLnVybDtcbiAgICBjb25zdCBjYXRhbG9nc0Zyb21Db25maWcgPSBjYXRhbG9nQ29uZmlnLnNvdXJjZXMgfHwgW107XG5cbiAgICBjb25zdCBvYnNlcnZhYmxlcyQgPSBbXTtcblxuICAgIGlmIChhcGlVcmwpIHtcbiAgICAgIGlmIChjYXRhbG9nQ29uZmlnLmJhc2VsYXllcnMpIHtcbiAgICAgICAgY29uc3QgdHJhbnNsYXRlID0gdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlO1xuICAgICAgICBjb25zdCB0aXRsZSA9IHRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmNhdGFsb2cuYmFzZUxheWVycycpO1xuICAgICAgICBjb25zdCBiYXNlTGF5ZXJzQ2F0YWxvZyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogJ2NhdGFsb2cuYmFzZWxheWVycycsXG4gICAgICAgICAgICB0aXRsZSxcbiAgICAgICAgICAgIHVybDogYCR7YXBpVXJsfS9iYXNlbGF5ZXJzYCxcbiAgICAgICAgICAgIHR5cGU6ICdiYXNlbGF5ZXJzJ1xuICAgICAgICAgIH1cbiAgICAgICAgXTtcbiAgICAgICAgb2JzZXJ2YWJsZXMkLnB1c2gob2YoYmFzZUxheWVyc0NhdGFsb2cpKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2F0YWxvZ3MgZnJvbSBBUElcbiAgICAgIGNvbnN0IGNhdGFsb2dzRnJvbUFwaSQgPSB0aGlzLmh0dHBcbiAgICAgICAgLmdldDxDYXRhbG9nW10+KGAke2FwaVVybH0vY2F0YWxvZ3NgKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtYXAoKGNhdGFsb2dzKSA9PlxuICAgICAgICAgICAgY2F0YWxvZ3MubWFwKChjOiBhbnkpID0+IE9iamVjdC5hc3NpZ24oYywgYy5vcHRpb25zKSlcbiAgICAgICAgICApLFxuICAgICAgICAgIGNhdGNoRXJyb3IoKCkgPT4gRU1QVFkpXG4gICAgICAgICk7XG4gICAgICBvYnNlcnZhYmxlcyQucHVzaChjYXRhbG9nc0Zyb21BcGkkKTtcbiAgICB9XG5cbiAgICAvLyBDYXRhbG9ncyBmcm9tIGNvbmZpZ1xuICAgIGlmIChjYXRhbG9nc0Zyb21Db25maWcubGVuZ3RoID4gMCkge1xuICAgICAgb2JzZXJ2YWJsZXMkLnB1c2goXG4gICAgICAgIG9mKGNhdGFsb2dzRnJvbUNvbmZpZykucGlwZShcbiAgICAgICAgICBtYXAoKGNhdGFsb2dzOiBDYXRhbG9nW10pID0+XG4gICAgICAgICAgICBjYXRhbG9ncy5tYXAoKGMpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFjLmlkKSB7XG4gICAgICAgICAgICAgICAgYy5pZCA9IHV1aWQoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gYztcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB6aXAoLi4ub2JzZXJ2YWJsZXMkKS5waXBlKFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1zcHJlYWRcbiAgICAgIG1hcCgoY2F0YWxvZ3M6IENhdGFsb2dbXVtdKSA9PiBbXS5jb25jYXQuYXBwbHkoW10sIGNhdGFsb2dzKSlcbiAgICApIGFzIE9ic2VydmFibGU8Q2F0YWxvZ1tdPjtcbiAgfVxuXG4gIGxvYWRDYXRhbG9nSXRlbXMoY2F0YWxvZzogQ2F0YWxvZyk6IE9ic2VydmFibGU8Q2F0YWxvZ0l0ZW1bXT4ge1xuICAgIGNvbnN0IG5ld0NhdGFsb2cgPSBDYXRhbG9nRmFjdG9yeS5jcmVhdGVJbnN0YW5jZUNhdGFsb2coY2F0YWxvZywgdGhpcyk7XG4gICAgcmV0dXJuIG5ld0NhdGFsb2cuY29sbGVjdENhdGFsb2dJdGVtcygpO1xuICB9XG5cbiAgbG9hZENhdGFsb2dCYXNlTGF5ZXJJdGVtcyhjYXRhbG9nOiBDYXRhbG9nKTogT2JzZXJ2YWJsZTxDYXRhbG9nSXRlbUdyb3VwW10+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRDYXRhbG9nQmFzZUxheWVyc09wdGlvbnMoY2F0YWxvZykucGlwZShcbiAgICAgIG1hcCgobGF5ZXJzT3B0aW9uczogTGF5ZXJPcHRpb25zW10pID0+IHtcbiAgICAgICAgY29uc3QgaXRlbXMgPSBsYXllcnNPcHRpb25zLm1hcCgobGF5ZXJPcHRpb25zOiBMYXllck9wdGlvbnMpID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6IGdlbmVyYXRlSWRGcm9tU291cmNlT3B0aW9ucyhsYXllck9wdGlvbnMuc291cmNlT3B0aW9ucyksXG4gICAgICAgICAgICB0aXRsZTogbGF5ZXJPcHRpb25zLnRpdGxlLFxuICAgICAgICAgICAgdHlwZTogQ2F0YWxvZ0l0ZW1UeXBlLkxheWVyLFxuICAgICAgICAgICAgZXh0ZXJuYWxQcm92aWRlcjogY2F0YWxvZy5leHRlcm5hbFByb3ZpZGVyLFxuICAgICAgICAgICAgb3B0aW9uczogbGF5ZXJPcHRpb25zXG4gICAgICAgICAgfSBhcyBDYXRhbG9nSXRlbUxheWVyO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogJ2NhdGFsb2cuZ3JvdXAuYmFzZWxheWVycycsXG4gICAgICAgICAgICB0eXBlOiBDYXRhbG9nSXRlbVR5cGUuR3JvdXAsXG4gICAgICAgICAgICBleHRlcm5hbFByb3ZpZGVyOiBjYXRhbG9nLmV4dGVybmFsUHJvdmlkZXIsXG4gICAgICAgICAgICB0aXRsZTogY2F0YWxvZy50aXRsZSxcbiAgICAgICAgICAgIGl0ZW1zXG4gICAgICAgICAgfVxuICAgICAgICBdO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDYXRhbG9nQmFzZUxheWVyc09wdGlvbnMoXG4gICAgY2F0YWxvZzogQ2F0YWxvZ1xuICApOiBPYnNlcnZhYmxlPExheWVyT3B0aW9uc1tdPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TGF5ZXJPcHRpb25zW10+KGNhdGFsb2cudXJsKTtcbiAgfVxuXG4gIGxvYWRDYXRhbG9nV01TTGF5ZXJJdGVtcyhjYXRhbG9nOiBDYXRhbG9nKTogT2JzZXJ2YWJsZTxDYXRhbG9nSXRlbVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q2F0YWxvZ0NhcGFiaWxpdGllcyhjYXRhbG9nKS5waXBlKFxuICAgICAgbWFwKChjYXBhYmlsaXRpZXM6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBpdGVtczogQ2F0YWxvZ0l0ZW1bXSA9IFtdO1xuICAgICAgICBpZiAoIWNhcGFiaWxpdGllcykge1xuICAgICAgICAgIHJldHVybiBpdGVtcztcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgY2FwYWJpbGl0aWVzLlNlcnZpY2UgJiZcbiAgICAgICAgICBjYXBhYmlsaXRpZXMuU2VydmljZS5BYnN0cmFjdCAmJlxuICAgICAgICAgIGNhcGFiaWxpdGllcy5TZXJ2aWNlLkFic3RyYWN0Lmxlbmd0aFxuICAgICAgICApIHtcbiAgICAgICAgICBjYXRhbG9nLmFic3RyYWN0ID0gY2FwYWJpbGl0aWVzLlNlcnZpY2UuQWJzdHJhY3Q7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmluYWxMYXllcnMgPSBbXTtcbiAgICAgICAgdGhpcy5mbGF0dGVuV21zQ2FwYWJpbGl0aWVzKFxuICAgICAgICAgIGNhcGFiaWxpdGllcy5DYXBhYmlsaXR5LkxheWVyLFxuICAgICAgICAgIDAsXG4gICAgICAgICAgZmluYWxMYXllcnMsXG4gICAgICAgICAgY2F0YWxvZy5ncm91cFNlcGFyYXRvclxuICAgICAgICApO1xuICAgICAgICBjb25zdCBjYXBhYmlsaXRpZXNDYXBhYmlsaXR5TGF5ZXIgPSBPYmplY3QuYXNzaWduKFxuICAgICAgICAgIHt9LFxuICAgICAgICAgIGNhcGFiaWxpdGllcy5DYXBhYmlsaXR5LkxheWVyXG4gICAgICAgICk7XG4gICAgICAgIGNhcGFiaWxpdGllc0NhcGFiaWxpdHlMYXllci5MYXllciA9IGZpbmFsTGF5ZXJzLmZpbHRlcihcbiAgICAgICAgICAoZikgPT4gZi5MYXllci5sZW5ndGggIT09IDBcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5pbmNsdWRlUmVjdXJzaXZlSXRlbXMoY2F0YWxvZywgY2FwYWJpbGl0aWVzQ2FwYWJpbGl0eUxheWVyLCBpdGVtcyk7XG4gICAgICAgIHJldHVybiBpdGVtcztcbiAgICAgIH0pLFxuICAgICAgY2F0Y2hFcnJvcigoKSA9PiB7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuZXJyb3IoXG4gICAgICAgICAgJ2lnby5nZW8uY2F0YWxvZy51bmF2YWlsYWJsZScsXG4gICAgICAgICAgJ2lnby5nZW8uY2F0YWxvZy51bmF2YWlsYWJsZVRpdGxlJyxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgeyB2YWx1ZTogY2F0YWxvZy50aXRsZSB9XG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGZsYXR0ZW5XbXNDYXBhYmlsaXRpZXMocGFyZW50LCBsZXZlbCA9IDAsIGZpbmFsTGF5ZXJzLCBzZXBhcmF0b3IgPSAnIC8gJykge1xuICAgIGlmICghZmluYWxMYXllcnMuaW5jbHVkZXMocGFyZW50LlRpdGxlKSkge1xuICAgICAgY29uc3QgbW9kaWZpZWRQYXJlbnQgPSBPYmplY3QuYXNzaWduKHt9LCBwYXJlbnQpO1xuICAgICAgbW9kaWZpZWRQYXJlbnQuTGF5ZXIgPSBbXTtcbiAgICAgIGZpbmFsTGF5ZXJzLnB1c2gobW9kaWZpZWRQYXJlbnQpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGxheWVyIG9mIHBhcmVudC5MYXllcikge1xuICAgICAgY29uc3QgbW9kaWZpZWRMYXllciA9IE9iamVjdC5hc3NpZ24oe30sIGxheWVyKTtcbiAgICAgIGlmIChsZXZlbCA+IDApIHtcbiAgICAgICAgbW9kaWZpZWRMYXllci5UaXRsZSA9IHBhcmVudC5UaXRsZSArIHNlcGFyYXRvciArIGxheWVyLlRpdGxlO1xuICAgICAgfVxuICAgICAgaWYgKGxheWVyLkxheWVyKSB7XG4gICAgICAgIHRoaXMuZmxhdHRlbldtc0NhcGFiaWxpdGllcyhcbiAgICAgICAgICBtb2RpZmllZExheWVyLFxuICAgICAgICAgIGxldmVsICsgMSxcbiAgICAgICAgICBmaW5hbExheWVycyxcbiAgICAgICAgICBzZXBhcmF0b3JcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpbmFsTGF5ZXJzLmZpbmQoKGZmKSA9PiBmZi5UaXRsZSA9PT0gcGFyZW50LlRpdGxlKS5MYXllci5wdXNoKGxheWVyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsb2FkQ2F0YWxvZ1dNVFNMYXllckl0ZW1zKGNhdGFsb2c6IENhdGFsb2cpOiBPYnNlcnZhYmxlPENhdGFsb2dJdGVtW10+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRDYXRhbG9nQ2FwYWJpbGl0aWVzKGNhdGFsb2cpLnBpcGUoXG4gICAgICBtYXAoKGNhcGFiaWxpdGllczogYW55KSA9PiB0aGlzLmdldFdNVFNJdGVtcyhjYXRhbG9nLCBjYXBhYmlsaXRpZXMpKVxuICAgICk7XG4gIH1cblxuICBsb2FkQ2F0YWxvZ0FyY0dJU1Jlc3RJdGVtcyhjYXRhbG9nOiBDYXRhbG9nKTogT2JzZXJ2YWJsZTxDYXRhbG9nSXRlbVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q2F0YWxvZ0NhcGFiaWxpdGllcyhjYXRhbG9nKS5waXBlKFxuICAgICAgbWFwKChjYXBhYmlsaXRpZXM6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRBcmNHSVNSRVNUSXRlbXMoY2F0YWxvZywgY2FwYWJpbGl0aWVzKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGxvYWRDYXRhbG9nQ29tcG9zaXRlTGF5ZXJJdGVtcyhjYXRhbG9nOiBDYXRhbG9nKTogT2JzZXJ2YWJsZTxDYXRhbG9nSXRlbVtdPiB7XG4gICAgY29uc3QgY29tcG9zaXRlQ2F0YWxvZyA9IChjYXRhbG9nIGFzIENvbXBvc2l0ZUNhdGFsb2cpLmNvbXBvc2l0ZTtcblxuICAgIGNvbnN0IGNhdGFsb2dzRnJvbUluc3RhbmNlID0gW10gYXMgQ2F0YWxvZ1tdO1xuICAgIGNvbXBvc2l0ZUNhdGFsb2cubWFwKChjb21wb25lbnQ6IENhdGFsb2cpID0+IHtcbiAgICAgIGNvbXBvbmVudC5zb3J0RGlyZWN0aW9uID0gY2F0YWxvZy5zb3J0RGlyZWN0aW9uOyAvLyBwcm9wYWdhdGUgc29ydERpcmVjdGlvbiB3aXRoIHBhcmVudCB2YWx1ZVxuICAgICAgY2F0YWxvZ3NGcm9tSW5zdGFuY2UucHVzaChcbiAgICAgICAgQ2F0YWxvZ0ZhY3RvcnkuY3JlYXRlSW5zdGFuY2VDYXRhbG9nKGNvbXBvbmVudCwgdGhpcylcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICAvLyBnZXQgQ2F0YWxvZ0l0ZW1zIGZvciBlYWNoIG9yaWdpbmFsIENhdGFsb2ctLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IHJlcXVlc3QxJCA9IFtdO1xuICAgIGNhdGFsb2dzRnJvbUluc3RhbmNlLm1hcCgoY29tcG9uZW50OiBDYXRhbG9nKSA9PlxuICAgICAgcmVxdWVzdDEkLnB1c2goY29tcG9uZW50LmNvbGxlY3RDYXRhbG9nSXRlbXMoKSlcbiAgICApO1xuXG4gICAgLy8gaW50ZWdyYXRlIGltcG9zZWQgZ3JvdXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBsZXQgcmVxdWVzdDIkID0gW107XG5cbiAgICBmdW5jdGlvbiBmbGF0RGVlcExheWVyKGFycikge1xuICAgICAgcmV0dXJuIGFyci5yZWR1Y2UoXG4gICAgICAgIChhY2MsIHZhbCkgPT5cbiAgICAgICAgICBhY2MuY29uY2F0KFxuICAgICAgICAgICAgdmFsLnR5cGUgPT09IENhdGFsb2dJdGVtVHlwZS5Hcm91cCA/IGZsYXREZWVwTGF5ZXIodmFsLml0ZW1zKSA6IHZhbFxuICAgICAgICAgICksXG4gICAgICAgIFtdXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIE9iamVjdC5rZXlzKGNvbXBvc2l0ZUNhdGFsb2cpLmZpbmQoKGspID0+IGNvbXBvc2l0ZUNhdGFsb2dba10uZ3JvdXBJbXBvc2UpXG4gICAgKSB7XG4gICAgICBjb25zdCBwdXNoSW1wb3NlR3JvdXAgPSAoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgYyA9IGNhdGFsb2dzRnJvbUluc3RhbmNlW2luZGV4XTtcbiAgICAgICAgY29uc3Qgb3V0R3JvdXBJbXBvc2UgPSBPYmplY3QuYXNzaWduKHt9LCBjLmdyb3VwSW1wb3NlKTtcbiAgICAgICAgb3V0R3JvdXBJbXBvc2UuYWRkcmVzcyA9IGMuaWQ7XG4gICAgICAgIG91dEdyb3VwSW1wb3NlLnR5cGUgPSBDYXRhbG9nSXRlbVR5cGUuR3JvdXA7XG4gICAgICAgIG91dEdyb3VwSW1wb3NlLmV4dGVybmFsUHJvdmlkZXIgPSBjLmV4dGVybmFsUHJvdmlkZXI7XG4gICAgICAgIGlmIChvdXRHcm91cEltcG9zZS5zb3J0RGlyZWN0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBvdXRHcm91cEltcG9zZS5zb3J0RGlyZWN0aW9uID0gYy5zb3J0RGlyZWN0aW9uO1xuICAgICAgICB9XG4gICAgICAgIG91dEdyb3VwSW1wb3NlLml0ZW1zID0gW107XG5cbiAgICAgICAgY29uc3QgZmxhdExheWVyID0gZmxhdERlZXBMYXllcihpdGVtKTtcbiAgICAgICAgZmxhdExheWVyLm1hcChcbiAgICAgICAgICAodikgPT4gKHYuYWRkcmVzcyA9IGAke291dEdyb3VwSW1wb3NlLmFkZHJlc3N9LiR7b3V0R3JvdXBJbXBvc2UuaWR9YClcbiAgICAgICAgKTtcbiAgICAgICAgb3V0R3JvdXBJbXBvc2UuaXRlbXMgPSBmbGF0TGF5ZXI7XG5cbiAgICAgICAgcmV0dXJuIG91dEdyb3VwSW1wb3NlO1xuICAgICAgfTtcblxuICAgICAgcmVxdWVzdDIkID0gcmVxdWVzdDEkLm1hcCgob2JzLCBpZHgpID0+XG4gICAgICAgIG9icy5waXBlKFxuICAgICAgICAgIG1hcCgoaXRlbXMpID0+XG4gICAgICAgICAgICBjb21wb3NpdGVDYXRhbG9nW2lkeF0uZ3JvdXBJbXBvc2VcbiAgICAgICAgICAgICAgPyBwdXNoSW1wb3NlR3JvdXAoaXRlbXMsIGlkeClcbiAgICAgICAgICAgICAgOiBpdGVtc1xuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxdWVzdDIkID0gcmVxdWVzdDEkO1xuICAgIH1cblxuICAgIC8vIGNvbmNhdCBHcm91cCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IHJlcXVlc3QzJCA9IHppcCguLi5yZXF1ZXN0MiQpLnBpcGUoXG4gICAgICBtYXAoXG4gICAgICAgIChvdXRwdXQ6IENhdGFsb2dJdGVtW10pID0+IFtdLmNvbmNhdCguLi5vdXRwdXQpIC8vIFtdLmNvbmNhdC5hcHBseShbXSwgcmVzdWx0MVxuICAgICAgKVxuICAgICk7XG5cbiAgICAvLyBtZXJnZSBHcm91cCAoZmlyc3QgbGV2ZWwgb25seSkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCBncm91cEJ5R3JvdXBJZCA9IChkYXRhLCBrZXlGbikgPT5cbiAgICAgIGRhdGEucmVkdWNlKChhY2MsIGdyb3VwKSA9PiB7XG4gICAgICAgIGNvbnN0IGdyb3VwSWQgPSBrZXlGbihncm91cCk7XG4gICAgICAgIGNvbnN0IGluZCA9IGFjYy5maW5kKCh4KSA9PiB4LmlkID09PSBncm91cElkKTtcblxuICAgICAgICBpZiAoIWluZCkge1xuICAgICAgICAgIGFjY1thY2MubGVuZ3RoXSA9IGdyb3VwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGl4ID0gYWNjLmluZGV4T2YoaW5kKTtcbiAgICAgICAgICBpZiAoYWNjW2l4XS5hZGRyZXNzLnNwbGl0KCd8JykuaW5kZXhPZihncm91cC5hZGRyZXNzKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIGFjY1tpeF0uYWRkcmVzcyA9IGAke2FjY1tpeF0uYWRkcmVzc318JHtncm91cC5hZGRyZXNzfWA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFjY1tpeF0uaXRlbXMucHVzaCguLi5ncm91cC5pdGVtcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIFtdKTtcblxuICAgIC8vIG1lcmdlIExheWVyIGZvciBlYWNoIExldmVsIChjYXRhbG9nLCBncm91cChyZWN1cnNpdmUpKVxuICAgIGNvbnN0IHJlY3Vyc2l2ZUdyb3VwQnlMYXllckFkZHJlc3MgPSAoaXRlbXMsIGtleUZuKSA9PlxuICAgICAgaXRlbXMucmVkdWNlKChhY2MsIGl0ZW0sIGlkeCwgYXJyKSA9PiB7XG4gICAgICAgIGNvbnN0IGxheWVyVGl0bGUgPSBrZXlGbihpdGVtKTtcbiAgICAgICAgY29uc3Qgb3V0SXRlbSA9IE9iamVjdC5hc3NpZ24oe30sIGl0ZW0pO1xuXG4gICAgICAgIGlmIChpdGVtLnR5cGUgPT09IENhdGFsb2dJdGVtVHlwZS5MYXllcikge1xuICAgICAgICAgIC8vIHNhbWUgdGl0bGUsIHNhbWUgYWRkcmVzcyA9PiByZXN1bHQ6IG9ubHkgb25lIGl0ZW0gaXMga2VwdFxuXG4gICAgICAgICAgLy8gc2FtZSB0aXRsZSwgYWRkcmVzcyBkaWZmXG4gICAgICAgICAgY29uc3QgaW5kaWNlc01hdGNoVGl0bGUgPSBbXTtcbiAgICAgICAgICBjb25zdCBpbmRpY2VzTWF0Y2hOZXdNZXRhZGF0YVVybCA9IFtdOyAvLyBtZXRhZGF0YVxuICAgICAgICAgIGNvbnN0IGRpZmZBZGRyZXNzID0gYXJyLmZpbHRlcigoeCwgaSkgPT4ge1xuICAgICAgICAgICAgbGV0IGJJbmQgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICh4LnRpdGxlID09PSBsYXllclRpdGxlICYmIHgudHlwZSA9PT0gQ2F0YWxvZ0l0ZW1UeXBlLkxheWVyKSB7XG4gICAgICAgICAgICAgIGlmIChpICE9PSBpZHggJiYgeC5hZGRyZXNzICE9PSBpdGVtLmFkZHJlc3MpIHtcbiAgICAgICAgICAgICAgICBiSW5kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpbmRpY2VzTWF0Y2hUaXRsZS5wdXNoKGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGJJbmQ7XG4gICAgICAgICAgfSk7IC8vICQmIGkgIT09IGlkeFxuXG4gICAgICAgICAgaWYgKGRpZmZBZGRyZXNzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGxldCBuUG9zaXRpb24gPSBpbmRpY2VzTWF0Y2hUaXRsZS5maW5kSW5kZXgoKHgpID0+IHggPT09IGlkeCkgKyAxO1xuICAgICAgICAgICAgb3V0SXRlbS50aXRsZSA9IGAke2l0ZW0udGl0bGV9ICgke25Qb3NpdGlvbn0pYDsgLy8gc291cmNlOiAke2l0ZW0uYWRkcmVzcy5zcGxpdCgnLicpWzBdfVxuICAgICAgICAgICAgblBvc2l0aW9uID1cbiAgICAgICAgICAgICAgaW5kaWNlc01hdGNoTmV3TWV0YWRhdGFVcmwuZmluZEluZGV4KCh4KSA9PiB4ID09PSBpZHgpICsgMTtcbiAgICAgICAgICAgIG91dEl0ZW0ubmV3TWV0YWRhdGFVcmwgPSBgJHtpdGVtLm5ld01ldGFkYXRhVXJsfSAoJHtuUG9zaXRpb259KWA7IC8vIHNvdXJjZTogJHtpdGVtLmFkZHJlc3Muc3BsaXQoJy4nKVswXX1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBleGlzdCA9IGFjYy5maW5kKFxuICAgICAgICAgICAgKHgpID0+IHgudGl0bGUgPT09IG91dEl0ZW0udGl0bGUgJiYgeC50eXBlID09PSBDYXRhbG9nSXRlbVR5cGUuTGF5ZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmICghZXhpc3QpIHtcbiAgICAgICAgICAgIGFjY1thY2MubGVuZ3RoXSA9IG91dEl0ZW07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0udHlwZSA9PT0gQ2F0YWxvZ0l0ZW1UeXBlLkdyb3VwKSB7XG4gICAgICAgICAgb3V0SXRlbS5pdGVtcyA9IHJlY3Vyc2l2ZUdyb3VwQnlMYXllckFkZHJlc3MoXG4gICAgICAgICAgICBpdGVtLml0ZW1zLFxuICAgICAgICAgICAgKGxheWVyKSA9PiBsYXllci50aXRsZVxuICAgICAgICAgICk7XG4gICAgICAgICAgYWNjW2FjYy5sZW5ndGhdID0gb3V0SXRlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCBbXSk7XG5cbiAgICBjb25zdCByZXF1ZXN0NCQgPSByZXF1ZXN0MyQucGlwZShcbiAgICAgIG1hcCgob3V0cHV0KSA9PiBncm91cEJ5R3JvdXBJZChvdXRwdXQsIChncm91cCkgPT4gZ3JvdXAuaWQpKSxcbiAgICAgIG1hcCgob3V0cHV0KSA9PiBbXS5jb25jYXQoLi4ub3V0cHV0KSksXG4gICAgICBtYXAoKGRhdGEpID0+IHJlY3Vyc2l2ZUdyb3VwQnlMYXllckFkZHJlc3MoZGF0YSwgKGxheWVyKSA9PiBsYXllci50aXRsZSkpXG4gICAgKTtcblxuICAgIHJldHVybiByZXF1ZXN0NCQ7XG4gIH1cblxuICBwcml2YXRlIGdldENhdGFsb2dDYXBhYmlsaXRpZXMoY2F0YWxvZzogQ2F0YWxvZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3Qgc1R5cGU6IHN0cmluZyA9IFR5cGVDYXRhbG9nW2NhdGFsb2cudHlwZSBhcyBzdHJpbmddO1xuICAgIHJldHVybiB0aGlzLmNhcGFiaWxpdGllc1NlcnZpY2VcbiAgICAgIC5nZXRDYXBhYmlsaXRpZXMoc1R5cGUgYXMgYW55LCBjYXRhbG9nLnVybCwgY2F0YWxvZy52ZXJzaW9uKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoKGUpID0+IHtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmVycm9yKFxuICAgICAgICAgICAgY2F0YWxvZy50aXRsZVxuICAgICAgICAgICAgICA/ICdpZ28uZ2VvLmNhdGFsb2cudW5hdmFpbGFibGUnXG4gICAgICAgICAgICAgIDogJ2lnby5nZW8uY2F0YWxvZy5zb21lVW5hdmFpbGFibGUnLFxuICAgICAgICAgICAgJ2lnby5nZW8uY2F0YWxvZy51bmF2YWlsYWJsZVRpdGxlJyxcbiAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGNhdGFsb2cudGl0bGUgPyB7IHZhbHVlOiBjYXRhbG9nLnRpdGxlIH0gOiB1bmRlZmluZWRcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wdXRlRm9yY2VkUHJvcGVydGllcyhcbiAgICBsYXllck5hbWVGcm9tQ2F0YWxvZzogc3RyaW5nLFxuICAgIGZvcmNlZFByb3BlcnRpZXM6IEZvcmNlZFByb3BlcnR5W11cbiAgKTogRm9yY2VkUHJvcGVydHkge1xuICAgIGlmICghZm9yY2VkUHJvcGVydGllcyB8fCBmb3JjZWRQcm9wZXJ0aWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZXR1cm5Qcm9wZXJ0eTogRm9yY2VkUHJvcGVydHkgPSB7XG4gICAgICBsYXllck5hbWU6IGxheWVyTmFtZUZyb21DYXRhbG9nLFxuICAgICAgdGl0bGU6IHVuZGVmaW5lZCxcbiAgICAgIG1ldGFkYXRhVXJsOiB1bmRlZmluZWQsXG4gICAgICBtZXRhZGF0YUFic3RyYWN0OiB1bmRlZmluZWQsXG4gICAgICBtZXRhZGF0YUFic3RyYWN0QWxsOiB1bmRlZmluZWQsXG4gICAgICBtZXRhZGF0YVVybEFsbDogdW5kZWZpbmVkXG4gICAgfTtcbiAgICAvL3Byb2Nlc3Mgd2lsZGNhcmQgYmVmb3JlXG4gICAgLy8gaWYgdGhlcmUgaXMgYSAqIHdpbGRjYXJkXG4gICAgY29uc3QgZm9yY2VkUHJvcGVydGllc0ZvckFsbExheWVycyA9IGZvcmNlZFByb3BlcnRpZXMuZmluZChcbiAgICAgIChmKSA9PiBmLmxheWVyTmFtZSA9PT0gJyonXG4gICAgKTtcbiAgICBpZiAoZm9yY2VkUHJvcGVydGllc0ZvckFsbExheWVycykge1xuICAgICAgLy8gbWV0YWRhdGFBYnN0cmFjdEFsbFxuICAgICAgaWYgKGZvcmNlZFByb3BlcnRpZXNGb3JBbGxMYXllcnMubWV0YWRhdGFBYnN0cmFjdEFsbCkge1xuICAgICAgICByZXR1cm5Qcm9wZXJ0eS5tZXRhZGF0YUFic3RyYWN0QWxsID1cbiAgICAgICAgICBmb3JjZWRQcm9wZXJ0aWVzRm9yQWxsTGF5ZXJzLm1ldGFkYXRhQWJzdHJhY3RBbGw7XG4gICAgICB9XG4gICAgICAvLyBtZXRhZGF0YVVybEFsbFxuICAgICAgaWYgKGZvcmNlZFByb3BlcnRpZXNGb3JBbGxMYXllcnMubWV0YWRhdGFVcmxBbGwpIHtcbiAgICAgICAgcmV0dXJuUHJvcGVydHkubWV0YWRhdGFVcmxBbGwgPVxuICAgICAgICAgIGZvcmNlZFByb3BlcnRpZXNGb3JBbGxMYXllcnMubWV0YWRhdGFVcmxBbGw7XG4gICAgICB9XG4gICAgfVxuICAgIGZvcmNlZFByb3BlcnRpZXMubWFwKChmb3JjZWRQcm9wZXJ0eSkgPT4ge1xuICAgICAgLy8gaWYgbWF0Y2ggZm91bmRcbiAgICAgIGlmIChsYXllck5hbWVGcm9tQ2F0YWxvZyA9PT0gZm9yY2VkUHJvcGVydHkubGF5ZXJOYW1lKSB7XG4gICAgICAgIC8vIHRpdGxlXG4gICAgICAgIGlmIChmb3JjZWRQcm9wZXJ0eS50aXRsZSkge1xuICAgICAgICAgIHJldHVyblByb3BlcnR5LnRpdGxlID0gZm9yY2VkUHJvcGVydHkudGl0bGU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbWV0YWRhdGFVcmxcbiAgICAgICAgaWYgKGZvcmNlZFByb3BlcnR5Lm1ldGFkYXRhVXJsKSB7XG4gICAgICAgICAgcmV0dXJuUHJvcGVydHkubWV0YWRhdGFVcmwgPSBmb3JjZWRQcm9wZXJ0eS5tZXRhZGF0YVVybDtcbiAgICAgICAgfVxuICAgICAgICAvLyBtZXRhZGF0YUFic3RyYWN0XG4gICAgICAgIGlmIChmb3JjZWRQcm9wZXJ0eS5tZXRhZGF0YUFic3RyYWN0KSB7XG4gICAgICAgICAgcmV0dXJuUHJvcGVydHkubWV0YWRhdGFBYnN0cmFjdCA9IGZvcmNlZFByb3BlcnR5Lm1ldGFkYXRhQWJzdHJhY3Q7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmV0dXJuUHJvcGVydHk7XG4gIH1cblxuICAvLy8gV01TXG5cbiAgcHJpdmF0ZSBwcmVwYXJlQ2F0YWxvZ0l0ZW1MYXllcihsYXllciwgaWRQYXJlbnQsIGxheWVyc1F1ZXJ5Rm9ybWF0LCBjYXRhbG9nKSB7XG4gICAgY29uc3QgY29uZmlndXJlZFF1ZXJ5Rm9ybWF0ID0gdGhpcy5yZXRyaWV2ZUxheWVySW5mb0Zvcm1hdChcbiAgICAgIGxheWVyLk5hbWUsXG4gICAgICBsYXllcnNRdWVyeUZvcm1hdFxuICAgICk7XG5cbiAgICBjb25zdCBsZWdlbmRPcHRpb25zID1cbiAgICAgIGNhdGFsb2cuc2hvd0xlZ2VuZCAmJiBsYXllci5TdHlsZVxuICAgICAgICA/IHRoaXMuY2FwYWJpbGl0aWVzU2VydmljZS5nZXRTdHlsZShsYXllci5TdHlsZSlcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBwYXJhbXMgPSBPYmplY3QuYXNzaWduKHt9LCBjYXRhbG9nLnF1ZXJ5UGFyYW1zLCB7XG4gICAgICBMQVlFUlM6IGxheWVyLk5hbWUsXG4gICAgICBWRVJTSU9OOiBjYXRhbG9nLnZlcnNpb25cbiAgICB9IGFzIFdNU0RhdGFTb3VyY2VPcHRpb25zUGFyYW1zKTtcblxuICAgIGNvbnN0IGJhc2VTb3VyY2VPcHRpb25zID0ge1xuICAgICAgdHlwZTogJ3dtcycsXG4gICAgICB1cmw6IGNhdGFsb2cudXJsLFxuICAgICAgY3Jvc3NPcmlnaW46IGNhdGFsb2cuc2V0Q3Jvc3NPcmlnaW5Bbm9ueW1vdXMgPyAnYW5vbnltb3VzJyA6IHVuZGVmaW5lZCxcbiAgICAgIHF1ZXJ5Rm9ybWF0OiBjb25maWd1cmVkUXVlcnlGb3JtYXQsXG4gICAgICBxdWVyeUh0bWxUYXJnZXQ6XG4gICAgICAgIGNvbmZpZ3VyZWRRdWVyeUZvcm1hdCA9PT0gUXVlcnlGb3JtYXQuSFRNTCB8fFxuICAgICAgICBjb25maWd1cmVkUXVlcnlGb3JtYXQgPT09IFF1ZXJ5Rm9ybWF0LkhUTUxHTUwyXG4gICAgICAgICAgPyAnaWZyYW1lJ1xuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgb3B0aW9uc0Zyb21DYXBhYmlsaXRpZXM6IHRydWVcbiAgICB9O1xuXG4gICAgY29uc3Qgc291cmNlT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIGJhc2VTb3VyY2VPcHRpb25zLFxuICAgICAgY2F0YWxvZy5zb3VyY2VPcHRpb25zLFxuICAgICAgeyBwYXJhbXMgfVxuICAgICkgYXMgV01TRGF0YVNvdXJjZU9wdGlvbnM7XG5cbiAgICBjb25zdCBwcm9wZXJ0aWVzVG9Gb3JjZSA9IHRoaXMuY29tcHV0ZUZvcmNlZFByb3BlcnRpZXMoXG4gICAgICBsYXllci5OYW1lLFxuICAgICAgY2F0YWxvZy5mb3JjZWRQcm9wZXJ0aWVzXG4gICAgKTtcbiAgICBsZXQgYmFzZUFic3RyYWN0O1xuICAgIGxldCBleHRlcm4gPSB0cnVlO1xuICAgIGlmIChsYXllci5BYnN0cmFjdCkge1xuICAgICAgYmFzZUFic3RyYWN0ID0gbGF5ZXIuQWJzdHJhY3Q7XG4gICAgfSBlbHNlIGlmICghbGF5ZXIuQWJzdHJhY3QgJiYgY2F0YWxvZy5hYnN0cmFjdCkge1xuICAgICAgYmFzZUFic3RyYWN0ID0gY2F0YWxvZy5hYnN0cmFjdDtcbiAgICB9XG4gICAgY29uc3QgbGF5ZXJPbmxpbmVSZXNvdXJjZSA9XG4gICAgICBsYXllcj8uRGF0YVVSTCAmJiBsYXllcj8uRGF0YVVSTC5sZW5ndGggPiAwXG4gICAgICAgID8gbGF5ZXI/LkRhdGFVUkxbMF0uT25saW5lUmVzb3VyY2VcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBtZXRhZGF0YVVybCA9XG4gICAgICBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFVcmwgfHxcbiAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YVVybEFsbCB8fFxuICAgICAgbGF5ZXJPbmxpbmVSZXNvdXJjZTtcbiAgICBjb25zdCBtZXRhZGF0YUFic3RyYWN0ID1cbiAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YUFic3RyYWN0IHx8XG4gICAgICBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFBYnN0cmFjdEFsbCB8fFxuICAgICAgYmFzZUFic3RyYWN0O1xuXG4gICAgaWYgKFxuICAgICAgIXByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YVVybCAmJlxuICAgICAgIXByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YVVybEFsbCAmJlxuICAgICAgKHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YUFic3RyYWN0IHx8XG4gICAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YUFic3RyYWN0QWxsKVxuICAgICkge1xuICAgICAgZXh0ZXJuID0gZmFsc2U7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YUFic3RyYWN0ICYmXG4gICAgICBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFVcmxBbGxcbiAgICApIHtcbiAgICAgIGV4dGVybiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGxheWVyUHJlcGFyZSA9IHtcbiAgICAgIGlkOiBnZW5lcmF0ZUlkRnJvbVNvdXJjZU9wdGlvbnMoc291cmNlT3B0aW9ucyksXG4gICAgICB0eXBlOiBDYXRhbG9nSXRlbVR5cGUuTGF5ZXIsXG4gICAgICB0aXRsZTogcHJvcGVydGllc1RvRm9yY2U/LnRpdGxlID8gcHJvcGVydGllc1RvRm9yY2UudGl0bGUgOiBsYXllci5UaXRsZSxcbiAgICAgIGFkZHJlc3M6IGlkUGFyZW50LFxuICAgICAgZXh0ZXJuYWxQcm92aWRlcjogY2F0YWxvZy5leHRlcm5hbFByb3ZpZGVyIHx8IGZhbHNlLFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICBtYXhSZXNvbHV0aW9uOiBnZXRSZXNvbHV0aW9uRnJvbVNjYWxlKGxheWVyLk1heFNjYWxlRGVub21pbmF0b3IpLFxuICAgICAgICBtaW5SZXNvbHV0aW9uOiBnZXRSZXNvbHV0aW9uRnJvbVNjYWxlKGxheWVyLk1pblNjYWxlRGVub21pbmF0b3IpLFxuICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgIHVybDogbWV0YWRhdGFVcmwsXG4gICAgICAgICAgZXh0ZXJuLFxuICAgICAgICAgIGFic3RyYWN0OiBtZXRhZGF0YUFic3RyYWN0LFxuICAgICAgICAgIHR5cGU6IGJhc2VTb3VyY2VPcHRpb25zLnR5cGVcbiAgICAgICAgfSxcbiAgICAgICAgbGVnZW5kT3B0aW9ucyxcbiAgICAgICAgdG9vbHRpcDogeyB0eXBlOiBjYXRhbG9nLnRvb2x0aXBUeXBlIH0sXG4gICAgICAgIHNvdXJjZU9wdGlvbnNcbiAgICAgIH1cbiAgICB9IGFzIENhdGFsb2dJdGVtO1xuXG4gICAgcmV0dXJuIE9iamVjdFV0aWxzLnJlbW92ZVVuZGVmaW5lZChsYXllclByZXBhcmUpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVwYXJlQ2F0YWxvZ0l0ZW1Hcm91cChcbiAgICBpdGVtTGlzdEluLFxuICAgIHJlZ2V4ZXMsXG4gICAgaWRHcm91cCxcbiAgICBsYXllcnNRdWVyeUZvcm1hdCxcbiAgICBjYXRhbG9nXG4gICkge1xuICAgIGNvbnN0IGdyb3VwUHJlcGFyZSA9IHtcbiAgICAgIGlkOiBpZEdyb3VwLFxuICAgICAgdHlwZTogQ2F0YWxvZ0l0ZW1UeXBlLkdyb3VwLFxuICAgICAgdGl0bGU6IGl0ZW1MaXN0SW4uVGl0bGUsXG4gICAgICBhZGRyZXNzOiBjYXRhbG9nLmlkLFxuICAgICAgZXh0ZXJuYWxQcm92aWRlcjogY2F0YWxvZy5leHRlcm5hbFByb3ZpZGVyIHx8IGZhbHNlLFxuICAgICAgc29ydERpcmVjdGlvbjogY2F0YWxvZy5zb3J0RGlyZWN0aW9uLCAvLyBwcm9wYWdhdGUgc29ydERpcmVjdGlvblxuICAgICAgaXRlbXM6IGl0ZW1MaXN0SW4uTGF5ZXIucmVkdWNlKChpdGVtczogQ2F0YWxvZ0l0ZW1bXSwgbGF5ZXI6IGFueSkgPT4ge1xuICAgICAgICBpZiAobGF5ZXIuTGF5ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIHJlY3Vyc2l2ZSwgY2hlY2sgbmV4dCBsZXZlbFxuICAgICAgICAgIGNvbnN0IGlkR3JvdXBJdGVtTmV4dExldmVsID1cbiAgICAgICAgICAgIGlkR3JvdXAgKyBgLmdyb3VwLiR7bGF5ZXIuTmFtZSB8fCBsYXllci5MYXllclswXS5OYW1lfWA7XG4gICAgICAgICAgY29uc3QgZ3JvdXBJdGVtOiBDYXRhbG9nSXRlbUdyb3VwID0gdGhpcy5wcmVwYXJlQ2F0YWxvZ0l0ZW1Hcm91cChcbiAgICAgICAgICAgIGxheWVyLFxuICAgICAgICAgICAgcmVnZXhlcyxcbiAgICAgICAgICAgIGlkR3JvdXBJdGVtTmV4dExldmVsLFxuICAgICAgICAgICAgbGF5ZXJzUXVlcnlGb3JtYXQsXG4gICAgICAgICAgICBjYXRhbG9nXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGl0ZW1zLnB1c2goZ3JvdXBJdGVtKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy50ZXN0TGF5ZXJSZWdleGVzKGxheWVyLk5hbWUsIHJlZ2V4ZXMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGxheWVySXRlbTogQ2F0YWxvZ0l0ZW1MYXllcjxJbWFnZUxheWVyT3B0aW9ucz4gPVxuICAgICAgICAgICAgdGhpcy5wcmVwYXJlQ2F0YWxvZ0l0ZW1MYXllcihcbiAgICAgICAgICAgICAgbGF5ZXIsXG4gICAgICAgICAgICAgIGlkR3JvdXAsXG4gICAgICAgICAgICAgIGxheWVyc1F1ZXJ5Rm9ybWF0LFxuICAgICAgICAgICAgICBjYXRhbG9nXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgaXRlbXMucHVzaChsYXllckl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtcztcbiAgICAgIH0sIFtdKVxuICAgIH07XG4gICAgcmV0dXJuIGdyb3VwUHJlcGFyZTtcbiAgfVxuXG4gIHByaXZhdGUgaW5jbHVkZVJlY3Vyc2l2ZUl0ZW1zKFxuICAgIGNhdGFsb2c6IENhdGFsb2csXG4gICAgaXRlbUxpc3RJbjogYW55LFxuICAgIGl0ZW1zUHJlcGFyZTogQ2F0YWxvZ0l0ZW1bXSxcbiAgICBsb29wTGV2ZWwgPSAwXG4gICkge1xuICAgIC8vIERpZyBhbGwgbGV2ZWxzIHVudGlsIGxhc3QgbGV2ZWwgKGxheWVyIG9iamVjdCBhcmUgbm90IGRlZmluZWQgb24gbGFzdCBsZXZlbClcbiAgICBjb25zdCByZWdleGVzID0gKGNhdGFsb2cucmVnRmlsdGVycyB8fCBbXSkubWFwKFxuICAgICAgKHBhdHRlcm46IHN0cmluZykgPT4gbmV3IFJlZ0V4cChwYXR0ZXJuKVxuICAgICk7XG4gICAgaWYgKCFpdGVtTGlzdEluLkxheWVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1MaXN0SW4uTGF5ZXIpIHtcbiAgICAgIGlmIChpdGVtLkxheWVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gcmVjdXJzaXZlLCBjaGVjayBuZXh0IGxldmVsXG4gICAgICAgIHRoaXMuaW5jbHVkZVJlY3Vyc2l2ZUl0ZW1zKGNhdGFsb2csIGl0ZW0sIGl0ZW1zUHJlcGFyZSwgbG9vcExldmVsICsgMSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBsYXllcnNRdWVyeUZvcm1hdCA9IHRoaXMuZmluZENhdGFsb2dJbmZvRm9ybWF0KGNhdGFsb2cpO1xuXG4gICAgICAvLyBncm91cCh3aXRoIGxheWVycykgYW5kIGxheWVyKHdpdGhvdXQgZ3JvdXApIGxldmVsIDFcbiAgICAgIGlmIChsb29wTGV2ZWwgIT09IDApIHtcbiAgICAgICAgLy8gVE9ETzogU2xpY2UgdGhhdCBpbnRvIG11bHRpcGxlIG1ldGhvZHNcbiAgICAgICAgLy8gRGVmaW5lIG9iamVjdCBvZiBncm91cCBsYXllclxuICAgICAgICBjb25zdCBpZEdyb3VwSXRlbSA9IGBjYXRhbG9nLmdyb3VwLiR7aXRlbUxpc3RJbi5OYW1lIHx8IGl0ZW0uTmFtZX1gO1xuICAgICAgICBjb25zdCBncm91cEl0ZW0gPSB0aGlzLnByZXBhcmVDYXRhbG9nSXRlbUdyb3VwKFxuICAgICAgICAgIGl0ZW1MaXN0SW4sXG4gICAgICAgICAgcmVnZXhlcyxcbiAgICAgICAgICBpZEdyb3VwSXRlbSxcbiAgICAgICAgICBsYXllcnNRdWVyeUZvcm1hdCxcbiAgICAgICAgICBjYXRhbG9nXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGdyb3VwSXRlbS5pdGVtcy5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICBpdGVtc1ByZXBhcmUucHVzaChncm91cEl0ZW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQnJlYWsgdGhlIGdyb3VwIChkb24ndCBhZGQgYSBncm91cCBvZiBsYXllciBmb3IgZWFjaCBvZiB0aGVpciBsYXllciEpXG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbGF5ZXIgd2l0aG91dCBncm91cFxuICAgICAgICBpZiAodGhpcy50ZXN0TGF5ZXJSZWdleGVzKGl0ZW0uTmFtZSwgcmVnZXhlcykgIT09IGZhbHNlKSB7XG4gICAgICAgICAgY29uc3QgbGF5ZXJJdGVtID0gdGhpcy5wcmVwYXJlQ2F0YWxvZ0l0ZW1MYXllcihcbiAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICBjYXRhbG9nLmlkLFxuICAgICAgICAgICAgbGF5ZXJzUXVlcnlGb3JtYXQsXG4gICAgICAgICAgICBjYXRhbG9nXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpdGVtc1ByZXBhcmUucHVzaChsYXllckl0ZW0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8vIFdNVFNcblxuICBwcml2YXRlIGdldFdNVFNJdGVtcyhcbiAgICBjYXRhbG9nLFxuICAgIGNhcGFiaWxpdGllczogUmVjb3JkPHN0cmluZywgYW55PlxuICApOiBDYXRhbG9nSXRlbUxheWVyW10ge1xuICAgIGlmICghY2FwYWJpbGl0aWVzKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGNvbnN0IGxheWVycyA9IGNhcGFiaWxpdGllcy5Db250ZW50cy5MYXllcjtcbiAgICBjb25zdCByZWdleGVzID0gKGNhdGFsb2cucmVnRmlsdGVycyB8fCBbXSkubWFwKFxuICAgICAgKHBhdHRlcm46IHN0cmluZykgPT4gbmV3IFJlZ0V4cChwYXR0ZXJuKVxuICAgICk7XG5cbiAgICBpZiAoXG4gICAgICBjYXBhYmlsaXRpZXMuU2VydmljZUlkZW50aWZpY2F0aW9uICYmXG4gICAgICBjYXBhYmlsaXRpZXMuU2VydmljZUlkZW50aWZpY2F0aW9uLkFic3RyYWN0ICYmXG4gICAgICBjYXBhYmlsaXRpZXMuU2VydmljZUlkZW50aWZpY2F0aW9uLkFic3RyYWN0Lmxlbmd0aFxuICAgICkge1xuICAgICAgY2F0YWxvZy5hYnN0cmFjdCA9IGNhcGFiaWxpdGllcy5TZXJ2aWNlSWRlbnRpZmljYXRpb24uQWJzdHJhY3Q7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxheWVyc1xuICAgICAgLm1hcCgobGF5ZXI6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzVG9Gb3JjZSA9IHRoaXMuY29tcHV0ZUZvcmNlZFByb3BlcnRpZXMoXG4gICAgICAgICAgbGF5ZXIuVGl0bGUsXG4gICAgICAgICAgY2F0YWxvZy5mb3JjZWRQcm9wZXJ0aWVzXG4gICAgICAgICk7XG4gICAgICAgIGxldCBleHRlcm4gPSB0cnVlO1xuXG4gICAgICAgIGNvbnN0IG1ldGFkYXRhVXJsID1cbiAgICAgICAgICBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFVcmwgfHwgcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhVXJsQWxsO1xuICAgICAgICBjb25zdCBtZXRhZGF0YUFic3RyYWN0ID1cbiAgICAgICAgICBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFBYnN0cmFjdCB8fFxuICAgICAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YUFic3RyYWN0QWxsIHx8XG4gICAgICAgICAgY2F0YWxvZy5hYnN0cmFjdDtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgIXByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YVVybCAmJlxuICAgICAgICAgICFwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFVcmxBbGwgJiZcbiAgICAgICAgICAocHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhQWJzdHJhY3QgfHxcbiAgICAgICAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YUFic3RyYWN0QWxsKVxuICAgICAgICApIHtcbiAgICAgICAgICBleHRlcm4gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhQWJzdHJhY3QgJiZcbiAgICAgICAgICBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFVcmxBbGxcbiAgICAgICAgKSB7XG4gICAgICAgICAgZXh0ZXJuID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy50ZXN0TGF5ZXJSZWdleGVzKGxheWVyLklkZW50aWZpZXIsIHJlZ2V4ZXMpID09PSBmYWxzZSkge1xuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyYW1zID0gT2JqZWN0LmFzc2lnbih7fSwgY2F0YWxvZy5xdWVyeVBhcmFtcywge1xuICAgICAgICAgIHZlcnNpb246ICcxLjAuMCdcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGJhc2VTb3VyY2VPcHRpb25zID0ge1xuICAgICAgICAgIHR5cGU6ICd3bXRzJyxcbiAgICAgICAgICB1cmw6IGNhdGFsb2cudXJsLFxuICAgICAgICAgIGNyb3NzT3JpZ2luOiBjYXRhbG9nLnNldENyb3NzT3JpZ2luQW5vbnltb3VzXG4gICAgICAgICAgICA/ICdhbm9ueW1vdXMnXG4gICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBsYXllcjogbGF5ZXIuSWRlbnRpZmllcixcbiAgICAgICAgICBtYXRyaXhTZXQ6IGNhdGFsb2cubWF0cml4U2V0LFxuICAgICAgICAgIG9wdGlvbnNGcm9tQ2FwYWJpbGl0aWVzOiB0cnVlLFxuICAgICAgICAgIHJlcXVlc3RFbmNvZGluZzogY2F0YWxvZy5yZXF1ZXN0RW5jb2RpbmcgfHwgJ0tWUCcsXG4gICAgICAgICAgc3R5bGU6ICdkZWZhdWx0J1xuICAgICAgICB9IGFzIFdNVFNEYXRhU291cmNlT3B0aW9ucztcbiAgICAgICAgY29uc3Qgc291cmNlT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAge30sXG4gICAgICAgICAgYmFzZVNvdXJjZU9wdGlvbnMsXG4gICAgICAgICAgY2F0YWxvZy5zb3VyY2VPcHRpb25zLFxuICAgICAgICAgIHsgcGFyYW1zIH1cbiAgICAgICAgKSBhcyBXTVRTRGF0YVNvdXJjZU9wdGlvbnM7XG5cbiAgICAgICAgcmV0dXJuIE9iamVjdFV0aWxzLnJlbW92ZVVuZGVmaW5lZCh7XG4gICAgICAgICAgaWQ6IGdlbmVyYXRlSWRGcm9tU291cmNlT3B0aW9ucyhzb3VyY2VPcHRpb25zKSxcbiAgICAgICAgICB0eXBlOiBDYXRhbG9nSXRlbVR5cGUuTGF5ZXIsXG4gICAgICAgICAgdGl0bGU6IHByb3BlcnRpZXNUb0ZvcmNlPy50aXRsZVxuICAgICAgICAgICAgPyBwcm9wZXJ0aWVzVG9Gb3JjZS50aXRsZVxuICAgICAgICAgICAgOiBsYXllci5UaXRsZSxcbiAgICAgICAgICBhZGRyZXNzOiBjYXRhbG9nLmlkLFxuICAgICAgICAgIGV4dGVybmFsUHJvdmlkZXI6IGNhdGFsb2cuZXh0ZXJuYWxQcm92aWRlcixcbiAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICBzb3VyY2VPcHRpb25zLFxuICAgICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgdXJsOiBtZXRhZGF0YVVybCxcbiAgICAgICAgICAgICAgZXh0ZXJuLFxuICAgICAgICAgICAgICBhYnN0cmFjdDogbWV0YWRhdGFBYnN0cmFjdCxcbiAgICAgICAgICAgICAgdHlwZTogYmFzZVNvdXJjZU9wdGlvbnMudHlwZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBhcyBDYXRhbG9nSXRlbSk7XG4gICAgICB9KVxuICAgICAgLmZpbHRlcigoaXRlbTogQ2F0YWxvZ0l0ZW1MYXllciB8IHVuZGVmaW5lZCkgPT4gaXRlbSAhPT0gdW5kZWZpbmVkKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QXJjR0lTUkVTVEl0ZW1zKFxuICAgIGNhdGFsb2c6IENhdGFsb2csXG4gICAgY2FwYWJpbGl0aWVzXG4gICk6IENhdGFsb2dJdGVtTGF5ZXJbXSB7XG4gICAgaWYgKCFjYXBhYmlsaXRpZXMgfHwgIWNhcGFiaWxpdGllcy5sYXllcnMpIHtcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuZXJyb3IoXG4gICAgICAgICdpZ28uZ2VvLmNhdGFsb2cuc29tZVVuYXZhaWxhYmxlJyxcbiAgICAgICAgJ2lnby5nZW8uY2F0YWxvZy51bmF2YWlsYWJsZVRpdGxlJ1xuICAgICAgKTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3QgZ3JvdXBzOiBBcmNHSVNSZXN0Q2FwYWJpbGl0aWVzTGF5ZXJbXSA9ICFjYXBhYmlsaXRpZXMubGF5ZXJzXG4gICAgICA/IFtdXG4gICAgICA6IGNhcGFiaWxpdGllcy5sYXllcnMuZmlsdGVyKChsYXllcikgPT4gbGF5ZXIuc3ViTGF5ZXJJZHMpO1xuICAgIGNvbnN0IGxheWVyczogQXJjR0lTUmVzdENhcGFiaWxpdGllc0xheWVyW10gPSAhY2FwYWJpbGl0aWVzLmxheWVyc1xuICAgICAgPyBbXVxuICAgICAgOiBjYXBhYmlsaXRpZXMubGF5ZXJzLmZpbHRlcihcbiAgICAgICAgICAobGF5ZXIpID0+XG4gICAgICAgICAgICAhbGF5ZXIudHlwZSB8fFxuICAgICAgICAgICAgbGF5ZXIudHlwZSA9PT0gQXJjR0lTUmVzdENhcGFiaWxpdGllc0xheWVyVHlwZXMuRmVhdHVyZUxheWVyIHx8XG4gICAgICAgICAgICBsYXllci50eXBlID09PSBBcmNHSVNSZXN0Q2FwYWJpbGl0aWVzTGF5ZXJUeXBlcy5SYXN0ZXJMYXllclxuICAgICAgICApO1xuXG4gICAgY29uc3QgcmVnZXhlcyA9IChjYXRhbG9nLnJlZ0ZpbHRlcnMgfHwgW10pLm1hcChcbiAgICAgIChwYXR0ZXJuOiBzdHJpbmcpID0+IG5ldyBSZWdFeHAocGF0dGVybilcbiAgICApO1xuXG4gICAgY29uc3QgaXRlbXM6IENhdGFsb2dJdGVtTGF5ZXJbXSA9IGxheWVyc1xuICAgICAgLm1hcCgobGF5ZXI6IEFyY0dJU1Jlc3RDYXBhYmlsaXRpZXNMYXllcikgPT4ge1xuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzVG9Gb3JjZSA9IHRoaXMuY29tcHV0ZUZvcmNlZFByb3BlcnRpZXMoXG4gICAgICAgICAgbGF5ZXIubmFtZSxcbiAgICAgICAgICBjYXRhbG9nLmZvcmNlZFByb3BlcnRpZXNcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgYmFzZUFic3RyYWN0ID0gY2F0YWxvZy5hYnN0cmFjdDtcbiAgICAgICAgbGV0IGV4dGVybiA9IHRydWU7XG5cbiAgICAgICAgY29uc3QgbWV0YWRhdGFVcmwgPVxuICAgICAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YVVybCB8fCBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFVcmxBbGw7XG4gICAgICAgIGNvbnN0IG1ldGFkYXRhQWJzdHJhY3QgPVxuICAgICAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YUFic3RyYWN0IHx8XG4gICAgICAgICAgcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhQWJzdHJhY3RBbGwgfHxcbiAgICAgICAgICBiYXNlQWJzdHJhY3Q7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICFwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFVcmwgJiZcbiAgICAgICAgICAhcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhVXJsQWxsICYmXG4gICAgICAgICAgKHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YUFic3RyYWN0IHx8XG4gICAgICAgICAgICBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFBYnN0cmFjdEFsbClcbiAgICAgICAgKSB7XG4gICAgICAgICAgZXh0ZXJuID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YUFic3RyYWN0ICYmXG4gICAgICAgICAgcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhVXJsQWxsXG4gICAgICAgICkge1xuICAgICAgICAgIGV4dGVybiA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMudGVzdExheWVyUmVnZXhlcyhsYXllci5pZC50b1N0cmluZygpLCByZWdleGVzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJhc2VTb3VyY2VPcHRpb25zOiBBcmNHSVNSZXN0RGF0YVNvdXJjZU9wdGlvbnMgJlxuICAgICAgICAgIFF1ZXJ5YWJsZURhdGFTb3VyY2VPcHRpb25zID0ge1xuICAgICAgICAgIHR5cGU6IFR5cGVDYXRhbG9nW2NhdGFsb2cudHlwZV0gYXMgYW55LFxuICAgICAgICAgIHVybDogY2F0YWxvZy51cmwsXG4gICAgICAgICAgbGF5ZXI6IGxheWVyLmlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgcXVlcnlhYmxlOiB0cnVlLFxuICAgICAgICAgIHF1ZXJ5Rm9ybWF0OiBRdWVyeUZvcm1hdC5FU1JJSlNPTixcbiAgICAgICAgICBvcHRpb25zRnJvbUNhcGFiaWxpdGllczogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBzb3VyY2VPcHRpb25zOiBBcmNHSVNSZXN0RGF0YVNvdXJjZU9wdGlvbnMgPSBPYmplY3QuYXNzaWduKFxuICAgICAgICAgIHt9LFxuICAgICAgICAgIGJhc2VTb3VyY2VPcHRpb25zLFxuICAgICAgICAgIGNhdGFsb2cuc291cmNlT3B0aW9uc1xuICAgICAgICApO1xuICAgICAgICByZXR1cm4gT2JqZWN0VXRpbHMucmVtb3ZlVW5kZWZpbmVkKHtcbiAgICAgICAgICBpZDogZ2VuZXJhdGVJZEZyb21Tb3VyY2VPcHRpb25zKHNvdXJjZU9wdGlvbnMpLFxuICAgICAgICAgIHR5cGU6IENhdGFsb2dJdGVtVHlwZS5MYXllcixcbiAgICAgICAgICB0aXRsZTogcHJvcGVydGllc1RvRm9yY2U/LnRpdGxlXG4gICAgICAgICAgICA/IHByb3BlcnRpZXNUb0ZvcmNlLnRpdGxlXG4gICAgICAgICAgICA6IGxheWVyLm5hbWUsXG4gICAgICAgICAgZXh0ZXJuYWxQcm92aWRlcjogY2F0YWxvZy5leHRlcm5hbFByb3ZpZGVyLFxuICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIHNvdXJjZU9wdGlvbnMsXG4gICAgICAgICAgICBtaW5SZXNvbHV0aW9uOiBnZXRSZXNvbHV0aW9uRnJvbVNjYWxlKGxheWVyLm1heFNjYWxlKSxcbiAgICAgICAgICAgIG1heFJlc29sdXRpb246IGdldFJlc29sdXRpb25Gcm9tU2NhbGUobGF5ZXIubWluU2NhbGUpLFxuICAgICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgdXJsOiBtZXRhZGF0YVVybCxcbiAgICAgICAgICAgICAgZXh0ZXJuLFxuICAgICAgICAgICAgICBhYnN0cmFjdDogbWV0YWRhdGFBYnN0cmFjdCxcbiAgICAgICAgICAgICAgdHlwZTogY2F0YWxvZy50eXBlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGFzIENhdGFsb2dJdGVtKTtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKChpdGVtOiBDYXRhbG9nSXRlbUxheWVyIHwgdW5kZWZpbmVkKSA9PiBpdGVtICE9PSB1bmRlZmluZWQpO1xuICAgIGNvbnN0IGdyb3VwSGFuZGxlZExheWVyc0lkczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBncm91cGVkSXRlbXM6IENhdGFsb2dJdGVtTGF5ZXJbXSA9IGdyb3Vwc1xuICAgICAgLm1hcCgoZ3JvdXApID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBvcHRpb25zOiB1bmRlZmluZWQsXG4gICAgICAgICAgYWRkcmVzczogYGNhdGFsb2cuZ3JvdXAuJHtncm91cC5uYW1lfWAsXG4gICAgICAgICAgaWQ6IGBjYXRhbG9nLmdyb3VwLiR7Z3JvdXAubmFtZX1gLFxuICAgICAgICAgIHR5cGU6IENhdGFsb2dJdGVtVHlwZS5Hcm91cCxcbiAgICAgICAgICBleHRlcm5hbFByb3ZpZGVyOiBjYXRhbG9nLmV4dGVybmFsUHJvdmlkZXIsXG4gICAgICAgICAgc29ydERpcmVjdGlvbjogY2F0YWxvZy5zb3J0RGlyZWN0aW9uLFxuICAgICAgICAgIHRpdGxlOiBncm91cC5uYW1lLFxuICAgICAgICAgIGl0ZW1zOiBpdGVtc1xuICAgICAgICAgICAgLmZpbHRlcigoaSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBzdWJMYXllcklkc1N0ciA9IGdyb3VwLnN1YkxheWVySWRzLm1hcCgocikgPT4gci50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHN1YkxheWVySWRzU3RyLmluY2x1ZGVzKFxuICAgICAgICAgICAgICAgIChpLm9wdGlvbnMuc291cmNlT3B0aW9ucyBhcyBBcmNHSVNSZXN0RGF0YVNvdXJjZU9wdGlvbnMpLmxheWVyXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLm1hcCgoaSkgPT4ge1xuICAgICAgICAgICAgICBncm91cEhhbmRsZWRMYXllcnNJZHMucHVzaChpLmlkKTtcbiAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGksIHtcbiAgICAgICAgICAgICAgICBhZGRyZXNzOiBgY2F0YWxvZy5ncm91cC4ke2dyb3VwLm5hbWV9YFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG4gICAgICB9KVxuICAgICAgLmZpbHRlcigoZykgPT4gZy5pdGVtcy5sZW5ndGgpO1xuXG4gICAgaWYgKGdyb3Vwcykge1xuICAgICAgY29uc3QgVGl0bGVPcklkID0gY2F0YWxvZy50aXRsZSB8fCBjYXRhbG9nLmlkO1xuICAgICAgY29uc3Qgbm9uSGFuZGxlZExheWVycyA9IGl0ZW1zXG4gICAgICAgIC5maWx0ZXIoKGkpID0+ICFncm91cEhhbmRsZWRMYXllcnNJZHMuaW5jbHVkZXMoaS5pZCkpXG4gICAgICAgIC5tYXAoKGkpID0+XG4gICAgICAgICAgT2JqZWN0LmFzc2lnbih7fSwgaSwge1xuICAgICAgICAgICAgYWRkcmVzczogYGNhdGFsb2cuZ3JvdXAuJHtUaXRsZU9ySWR9YFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICBpZiAobm9uSGFuZGxlZExheWVycy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3Qgbm9uSGFuZGxlZEdyb3VwID0ge1xuICAgICAgICAgIG9wdGlvbnM6IHVuZGVmaW5lZCxcbiAgICAgICAgICBhZGRyZXNzOiBgY2F0YWxvZy5ncm91cC4ke1RpdGxlT3JJZH1gLFxuICAgICAgICAgIGlkOiBgY2F0YWxvZy5ncm91cC4ke1RpdGxlT3JJZH1gLFxuICAgICAgICAgIHR5cGU6IENhdGFsb2dJdGVtVHlwZS5Hcm91cCxcbiAgICAgICAgICBleHRlcm5hbFByb3ZpZGVyOiBjYXRhbG9nLmV4dGVybmFsUHJvdmlkZXIsXG4gICAgICAgICAgc29ydERpcmVjdGlvbjogY2F0YWxvZy5zb3J0RGlyZWN0aW9uLFxuICAgICAgICAgIHRpdGxlOiBUaXRsZU9ySWQsXG4gICAgICAgICAgaXRlbXM6IG5vbkhhbmRsZWRMYXllcnNcbiAgICAgICAgfTtcbiAgICAgICAgZ3JvdXBlZEl0ZW1zLnB1c2gobm9uSGFuZGxlZEdyb3VwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZ3JvdXBzID8gZ3JvdXBlZEl0ZW1zIDogaXRlbXM7XG4gIH1cblxuICBwcml2YXRlIHRlc3RMYXllclJlZ2V4ZXMobGF5ZXJOYW1lOiBzdHJpbmcsIHJlZ2V4ZXM6IFJlZ0V4cFtdKTogYm9vbGVhbiB7XG4gICAgaWYgKHJlZ2V4ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlZ2V4ZXMuZmluZCgocmVnZXg6IFJlZ0V4cCkgPT4gcmVnZXgudGVzdChsYXllck5hbWUpKSAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSByZXRyaWV2ZUxheWVySW5mb0Zvcm1hdChcbiAgICBsYXllck5hbWVGcm9tQ2F0YWxvZzogc3RyaW5nLFxuICAgIGxheWVyc1F1ZXJ5Rm9ybWF0OiB7IGxheWVyOiBzdHJpbmc7IHF1ZXJ5Rm9ybWF0OiBRdWVyeUZvcm1hdCB9W11cbiAgKTogUXVlcnlGb3JtYXQge1xuICAgIGNvbnN0IGN1cnJlbnRMYXllckluZm9Gb3JtYXQgPSBsYXllcnNRdWVyeUZvcm1hdC5maW5kKFxuICAgICAgKGYpID0+IGYubGF5ZXIgPT09IGxheWVyTmFtZUZyb21DYXRhbG9nXG4gICAgKTtcbiAgICBjb25zdCBiYXNlSW5mb0Zvcm1hdCA9IGxheWVyc1F1ZXJ5Rm9ybWF0LmZpbmQoKGYpID0+IGYubGF5ZXIgPT09ICcqJyk7XG4gICAgbGV0IHF1ZXJ5Rm9ybWF0OiBRdWVyeUZvcm1hdDtcbiAgICBpZiAoY3VycmVudExheWVySW5mb0Zvcm1hdCkge1xuICAgICAgcXVlcnlGb3JtYXQgPSBjdXJyZW50TGF5ZXJJbmZvRm9ybWF0LnF1ZXJ5Rm9ybWF0O1xuICAgIH0gZWxzZSBpZiAoYmFzZUluZm9Gb3JtYXQpIHtcbiAgICAgIHF1ZXJ5Rm9ybWF0ID0gYmFzZUluZm9Gb3JtYXQucXVlcnlGb3JtYXQ7XG4gICAgfVxuICAgIHJldHVybiBxdWVyeUZvcm1hdDtcbiAgfVxuXG4gIHByaXZhdGUgZmluZENhdGFsb2dJbmZvRm9ybWF0KFxuICAgIGNhdGFsb2c6IENhdGFsb2dcbiAgKTogeyBsYXllcjogc3RyaW5nOyBxdWVyeUZvcm1hdDogUXVlcnlGb3JtYXQgfVtdIHtcbiAgICBjb25zdCBsYXllcnNRdWVyeUZvcm1hdDogeyBsYXllcjogc3RyaW5nOyBxdWVyeUZvcm1hdDogUXVlcnlGb3JtYXQgfVtdID0gW107XG4gICAgaWYgKCFjYXRhbG9nLnF1ZXJ5Rm9ybWF0KSB7XG4gICAgICByZXR1cm4gbGF5ZXJzUXVlcnlGb3JtYXQ7XG4gICAgfVxuICAgIE9iamVjdC5rZXlzKGNhdGFsb2cucXVlcnlGb3JtYXQpLmZvckVhY2goKGNvbmZpZ3VyZWRJbmZvRm9ybWF0KSA9PiB7XG4gICAgICBpZiAoY2F0YWxvZy5xdWVyeUZvcm1hdFtjb25maWd1cmVkSW5mb0Zvcm1hdF0gaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICBjYXRhbG9nLnF1ZXJ5Rm9ybWF0W2NvbmZpZ3VyZWRJbmZvRm9ybWF0XS5mb3JFYWNoKChsYXllck5hbWUpID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhbGF5ZXJzUXVlcnlGb3JtYXQuZmluZCgoc3BlY2lmaWMpID0+IHNwZWNpZmljLmxheWVyID09PSBsYXllck5hbWUpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBsYXllcnNRdWVyeUZvcm1hdC5wdXNoKHtcbiAgICAgICAgICAgICAgbGF5ZXI6IGxheWVyTmFtZSxcbiAgICAgICAgICAgICAgcXVlcnlGb3JtYXQ6IGNvbmZpZ3VyZWRJbmZvRm9ybWF0IGFzIFF1ZXJ5Rm9ybWF0XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFsYXllcnNRdWVyeUZvcm1hdC5maW5kKFxuICAgICAgICAgICAgKHNwZWNpZmljKSA9PlxuICAgICAgICAgICAgICBzcGVjaWZpYy5sYXllciA9PT0gY2F0YWxvZy5xdWVyeUZvcm1hdFtjb25maWd1cmVkSW5mb0Zvcm1hdF1cbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIGxheWVyc1F1ZXJ5Rm9ybWF0LnB1c2goe1xuICAgICAgICAgICAgbGF5ZXI6IGNhdGFsb2cucXVlcnlGb3JtYXRbY29uZmlndXJlZEluZm9Gb3JtYXRdLFxuICAgICAgICAgICAgcXVlcnlGb3JtYXQ6IGNvbmZpZ3VyZWRJbmZvRm9ybWF0IGFzIFF1ZXJ5Rm9ybWF0XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gbGF5ZXJzUXVlcnlGb3JtYXQ7XG4gIH1cbn1cblxuY2xhc3MgQ2F0YWxvZ0ZhY3Rvcnkge1xuICBwdWJsaWMgc3RhdGljIGNyZWF0ZUluc3RhbmNlQ2F0YWxvZyhcbiAgICBvcHRpb25zOiBDYXRhbG9nLFxuICAgIGNhdGFsb2dTZXJ2aWNlOiBDYXRhbG9nU2VydmljZVxuICApOiBDYXRhbG9nIHtcbiAgICBsZXQgY2F0YWxvZzogQ2F0YWxvZztcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgaWYgKG9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2NvbXBvc2l0ZScpKSB7XG4gICAgICBjYXRhbG9nID0gbmV3IENvbXBvc2l0ZUNhdGFsb2cob3B0aW9ucywgKGNhdGFsb2c6IENhdGFsb2cpID0+XG4gICAgICAgIGNhdGFsb2dTZXJ2aWNlLmxvYWRDYXRhbG9nQ29tcG9zaXRlTGF5ZXJJdGVtcyhjYXRhbG9nKVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMudHlwZSA9PT0gVHlwZUNhdGFsb2dbVHlwZUNhdGFsb2cuYmFzZWxheWVyc10pIHtcbiAgICAgIGNhdGFsb2cgPSBuZXcgQmFzZWxheWVyc0NhdGFsb2cob3B0aW9ucywgKGNhdGFsb2c6IENhdGFsb2cpID0+XG4gICAgICAgIGNhdGFsb2dTZXJ2aWNlLmxvYWRDYXRhbG9nQmFzZUxheWVySXRlbXMoY2F0YWxvZylcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLnR5cGUgPT09IFR5cGVDYXRhbG9nW1R5cGVDYXRhbG9nLmFyY2dpc3Jlc3RdKSB7XG4gICAgICBjYXRhbG9nID0gbmV3IEFyY0dJU1Jlc3RDYXRhbG9nKG9wdGlvbnMsIChjYXRhbG9nOiBDYXRhbG9nKSA9PlxuICAgICAgICBjYXRhbG9nU2VydmljZS5sb2FkQ2F0YWxvZ0FyY0dJU1Jlc3RJdGVtcyhjYXRhbG9nKVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMudHlwZSA9PT0gVHlwZUNhdGFsb2dbVHlwZUNhdGFsb2cudGlsZWFyY2dpc3Jlc3RdKSB7XG4gICAgICBjYXRhbG9nID0gbmV3IFRpbGVPckltYWdlQXJjR0lTUmVzdENhdGFsb2coXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIChjYXRhbG9nOiBDYXRhbG9nKSA9PlxuICAgICAgICAgIGNhdGFsb2dTZXJ2aWNlLmxvYWRDYXRhbG9nQXJjR0lTUmVzdEl0ZW1zKGNhdGFsb2cpLFxuICAgICAgICBUeXBlQ2F0YWxvZy50aWxlYXJjZ2lzcmVzdFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMudHlwZSA9PT0gVHlwZUNhdGFsb2dbVHlwZUNhdGFsb2cuaW1hZ2VhcmNnaXNyZXN0XSkge1xuICAgICAgY2F0YWxvZyA9IG5ldyBUaWxlT3JJbWFnZUFyY0dJU1Jlc3RDYXRhbG9nKFxuICAgICAgICBvcHRpb25zLFxuICAgICAgICAoY2F0YWxvZzogQ2F0YWxvZykgPT5cbiAgICAgICAgICBjYXRhbG9nU2VydmljZS5sb2FkQ2F0YWxvZ0FyY0dJU1Jlc3RJdGVtcyhjYXRhbG9nKSxcbiAgICAgICAgVHlwZUNhdGFsb2cuaW1hZ2VhcmNnaXNyZXN0XG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy50eXBlID09PSBUeXBlQ2F0YWxvZ1tUeXBlQ2F0YWxvZy53bXRzXSkge1xuICAgICAgY2F0YWxvZyA9IG5ldyBXTVRTQ2F0YWxvZyhvcHRpb25zLCAoY2F0YWxvZzogQ2F0YWxvZykgPT5cbiAgICAgICAgY2F0YWxvZ1NlcnZpY2UubG9hZENhdGFsb2dXTVRTTGF5ZXJJdGVtcyhjYXRhbG9nKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2F0YWxvZyA9IG5ldyBXTVNDYXRhbG9nKG9wdGlvbnMsIChjYXRhbG9nOiBDYXRhbG9nKSA9PlxuICAgICAgICBjYXRhbG9nU2VydmljZS5sb2FkQ2F0YWxvZ1dNU0xheWVySXRlbXMoY2F0YWxvZylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhdGFsb2c7XG4gIH1cbn1cbiJdfQ==
|