UNPKG

kepler.gl

Version:

kepler.gl is a webgl based application to visualize large scale location data in the browser

629 lines (620 loc) 73.6 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.rasterVisConfigs = exports.ZOOM_RANGES = exports.RASTER_COLOR_RESET_PARAMS = exports.PRESET_OPTIONS = exports.MAX_PIXEL_VALUES = exports.DEFAULT_BAND_MAPPINGS = exports.DATA_SOURCE_IDS = exports.DATA_SOURCE_COLOR_DEFAULTS = exports.COLORMAP_OPTIONS = exports.CATEGORICAL_COLORMAP_ID = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _rasterTileLayerSchema = require("./raster-tile-layer-schema"); var _types = require("./types"); // SPDX-License-Identifier: MIT // Copyright contributors to the kepler.gl project /** * Known Data Source IDs that work with current STAC Layer limitations */ var DATA_SOURCE_IDS = exports.DATA_SOURCE_IDS = /*#__PURE__*/function (DATA_SOURCE_IDS) { DATA_SOURCE_IDS["SENTINEL_2_L1C"] = "sentinel-2-l1c"; DATA_SOURCE_IDS["SENTINEL_2_L1A"] = "sentinel-2-l2a"; DATA_SOURCE_IDS["SENTINEL_2_C1_L2A"] = "sentinel-2-c1-l2a"; DATA_SOURCE_IDS["SENTINEL_2_PRE_C1_L2A"] = "sentinel-2-pre-c1-l2a"; DATA_SOURCE_IDS["LANDSAT_C2_L1"] = "landsat-c2-l1"; DATA_SOURCE_IDS["LANDSAT_C2_L2"] = "landsat-c2-l2"; DATA_SOURCE_IDS["MODIS_09A1_061"] = "modis-09A1-061"; DATA_SOURCE_IDS["MODIS_43A4_061"] = "modis-43A4-061"; DATA_SOURCE_IDS["MOIDS_09Q1_061"] = "modis-09Q1-061"; return DATA_SOURCE_IDS; }({}); var RASTER_COLOR_RESET_PARAMS = exports.RASTER_COLOR_RESET_PARAMS = { gammaContrastFactor: 1, sigmoidalContrastFactor: 0, sigmoidalBiasFactor: 0.5, saturationValue: 1.0, dynamicColor: false }; var DEFAULT_SENTINEL_COLOR_DEFAULTS = { gammaContrastFactor: 2.2, sigmoidalContrastFactor: 23, sigmoidalBiasFactor: 0.12, saturationValue: 2.0 }; var DEFAULT_MODIS_COLOR_DEFAULTS = { gammaContrastFactor: 2.0, sigmoidalContrastFactor: 8, sigmoidalBiasFactor: 0.13, saturationValue: 1.1 }; var DEFAULT_SENTINEL_BAND_MAPPING = { coastal: 'B01', blue: 'B02', green: 'B03', red: 'B04', rededge1: 'B05', rededge2: 'B06', rededge3: 'B07', nir: 'B08', nir08: 'B8A', nir09: 'B09', cirrus: 'B10', swir11: 'B11', swir16: 'B11', swir12: 'B12', swir22: 'B12' }; var DEFAULT_MODIS_BAND_MAPPING = { sur_refl_b01: 'B01', sur_refl_b02: 'B02', sur_refl_b03: 'B03', sur_refl_b04: 'B04', sur_refl_b05: 'B05', sur_refl_b06: 'B06', sur_refl_b07: 'B07', Nadir_Reflectance_Band1: 'B01', Nadir_Reflectance_Band2: 'B02', Nadir_Reflectance_Band3: 'B03', Nadir_Reflectance_Band4: 'B04', Nadir_Reflectance_Band5: 'B05', Nadir_Reflectance_Band6: 'B06', Nadir_Reflectance_Band7: 'B07' }; var DEFAULT_LANDSAT_C2_L1_BAND_MAPPING = { green: 'B01', red: 'B02', nir08: 'B03', nir09: 'B04' }; var DEFAULT_LANDSAT_C2_L2_BAND_MAPPING = { blue: 'B01', green: 'B02', red: 'B03', nir08: 'B04', swir16: 'B05', lwir: 'B06', swir22: 'B07', coastal: 'B01', lwir11: 'B06' }; var DEFAULT_BAND_MAPPINGS = exports.DEFAULT_BAND_MAPPINGS = (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, DATA_SOURCE_IDS.SENTINEL_2_L1C, DEFAULT_SENTINEL_BAND_MAPPING), DATA_SOURCE_IDS.SENTINEL_2_L1A, DEFAULT_SENTINEL_BAND_MAPPING), DATA_SOURCE_IDS.SENTINEL_2_C1_L2A, DEFAULT_SENTINEL_BAND_MAPPING), DATA_SOURCE_IDS.SENTINEL_2_PRE_C1_L2A, DEFAULT_SENTINEL_BAND_MAPPING), DATA_SOURCE_IDS.LANDSAT_C2_L1, DEFAULT_LANDSAT_C2_L1_BAND_MAPPING), DATA_SOURCE_IDS.LANDSAT_C2_L2, DEFAULT_LANDSAT_C2_L2_BAND_MAPPING), DATA_SOURCE_IDS.MODIS_09A1_061, DEFAULT_MODIS_BAND_MAPPING), DATA_SOURCE_IDS.MODIS_43A4_061, DEFAULT_MODIS_BAND_MAPPING), DATA_SOURCE_IDS.MOIDS_09Q1_061, DEFAULT_MODIS_BAND_MAPPING); /** * Per-data source color rescaling defaults for known collections */ var DATA_SOURCE_COLOR_DEFAULTS = exports.DATA_SOURCE_COLOR_DEFAULTS = (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, DATA_SOURCE_IDS.SENTINEL_2_L1C, DEFAULT_SENTINEL_COLOR_DEFAULTS), DATA_SOURCE_IDS.SENTINEL_2_L1A, DEFAULT_SENTINEL_COLOR_DEFAULTS), DATA_SOURCE_IDS.SENTINEL_2_C1_L2A, DEFAULT_SENTINEL_COLOR_DEFAULTS), DATA_SOURCE_IDS.SENTINEL_2_PRE_C1_L2A, DEFAULT_SENTINEL_COLOR_DEFAULTS), DATA_SOURCE_IDS.LANDSAT_C2_L1, DEFAULT_SENTINEL_COLOR_DEFAULTS), DATA_SOURCE_IDS.LANDSAT_C2_L2, DEFAULT_SENTINEL_COLOR_DEFAULTS), DATA_SOURCE_IDS.MODIS_09A1_061, DEFAULT_MODIS_COLOR_DEFAULTS), DATA_SOURCE_IDS.MODIS_43A4_061, DEFAULT_MODIS_COLOR_DEFAULTS), DATA_SOURCE_IDS.MOIDS_09Q1_061, DEFAULT_MODIS_COLOR_DEFAULTS); /** * Available "presets" * * I define a "preset" as one specific manner of loading bands and combining them on the frontend. * In the future I expect we'll want a UI that gives the user full flexibility. */ var PRESET_OPTIONS = exports.PRESET_OPTIONS = { trueColor: { label: 'True Color', id: _rasterTileLayerSchema.RasterTileLayerPresets.trueColor, bandCombination: _types.BandCombination.Rgb, commonNames: ['red', 'green', 'blue'] }, infrared: { label: 'Infrared', id: _rasterTileLayerSchema.RasterTileLayerPresets.infrared, bandCombination: _types.BandCombination.Rgb, commonNames: ['nir', 'red', 'green'], description: 'False-color infrared composite. Near-infrared, red, green mapped to RGB' }, agriculture: { label: 'Agriculture', id: _rasterTileLayerSchema.RasterTileLayerPresets.agriculture, bandCombination: _types.BandCombination.Rgb, commonNames: ['swir16', 'nir', 'blue'], description: 'False-color agriculture composite. Short-wave infrared 1, near-infrared, blue mapped to RGB.' }, forestBurn: { label: 'Forest Burn', id: _rasterTileLayerSchema.RasterTileLayerPresets.forestBurn, bandCombination: _types.BandCombination.Rgb, commonNames: ['swir22', 'nir', 'blue'], description: 'False-color forest burn composite. Short-wave infrared 2, near-infrared, blue mapped to RGB' }, ndvi: { label: 'NDVI', id: _rasterTileLayerSchema.RasterTileLayerPresets.ndvi, bandCombination: _types.BandCombination.NormalizedDifference, commonNames: ['nir', 'red'], description: 'Normalized Difference Vegetation Index', infoUrl: 'https://www.usgs.gov/core-science-systems/nli/landsat/landsat-normalized-difference-vegetation-index' }, // Comment this out for now, because in testing it looks like there's an overflow of some sort; // index values should be between -1 and 1, but values look way out of bounds // evi: { // label: 'EVI', // id: RasterTileLayerPresets.evi, // bandCombination: 'enhancedVegetationIndex', // commonNames: ['nir', 'red', 'blue'] // }, savi: { label: 'SAVI', id: _rasterTileLayerSchema.RasterTileLayerPresets.savi, bandCombination: _types.BandCombination.SoilAdjustedVegetationIndex, commonNames: ['nir', 'red'], description: 'Soil Adjusted Vegetation Index', infoUrl: 'https://www.usgs.gov/core-science-systems/nli/landsat/landsat-soil-adjusted-vegetation-index' }, msavi: { label: 'MSAVI', id: _rasterTileLayerSchema.RasterTileLayerPresets.msavi, bandCombination: _types.BandCombination.ModifiedSoilAdjustedVegetationIndex, commonNames: ['nir', 'red'], description: 'Modified Soil Adjusted Vegetation Index', infoUrl: 'https://www.usgs.gov/core-science-systems/nli/landsat/landsat-modified-soil-adjusted-vegetation-index' }, ndmi: { label: 'NDMI', id: _rasterTileLayerSchema.RasterTileLayerPresets.ndmi, bandCombination: _types.BandCombination.NormalizedDifference, commonNames: ['nir', 'swir16'], description: 'Normalized Difference Moisture Index', infoUrl: 'https://www.usgs.gov/core-science-systems/nli/landsat/normalized-difference-moisture-index' }, nbr: { label: 'NBR', id: _rasterTileLayerSchema.RasterTileLayerPresets.nbr, bandCombination: _types.BandCombination.NormalizedDifference, commonNames: ['nir', 'swir22'], description: 'Normalized Burn Ratio', infoUrl: 'https://www.usgs.gov/core-science-systems/nli/landsat/landsat-normalized-burn-ratio' }, nbr2: { label: 'NBR 2', id: _rasterTileLayerSchema.RasterTileLayerPresets.nbr2, bandCombination: _types.BandCombination.NormalizedDifference, commonNames: ['swir16', 'swir22'], description: 'Normalized Burn Ratio 2', infoUrl: 'https://www.usgs.gov/core-science-systems/nli/landsat/landsat-normalized-burn-ratio-2' }, singleBand: { label: 'Single Band', id: _rasterTileLayerSchema.RasterTileLayerPresets.singleBand, bandCombination: _types.BandCombination.Single, description: 'Render a single band data' } }; /** * Valid zoom ranges for each data source * * The maximum zoom is derived from the resolution of each data source. * The minimum zoom relates to the number of overviews in the COGs at the source. The more * overviews, the easier it is to create downsampled tiles. The minimum zooms can be reduced but it * takes longer to serve low-zoom tiles since the server must read from many image sources. */ // TODO: use render:max_overview_gsd from STAC var ZOOM_RANGES = exports.ZOOM_RANGES = (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, DATA_SOURCE_IDS.SENTINEL_2_C1_L2A, [8, 13]), DATA_SOURCE_IDS.SENTINEL_2_L1A, [8, 13]), DATA_SOURCE_IDS.SENTINEL_2_L1C, [8, 13]), DATA_SOURCE_IDS.SENTINEL_2_PRE_C1_L2A, [8, 13]), DATA_SOURCE_IDS.LANDSAT_C2_L1, [7, 12]), DATA_SOURCE_IDS.LANDSAT_C2_L2, [7, 12]), DATA_SOURCE_IDS.MODIS_09A1_061, [7, 13]), DATA_SOURCE_IDS.MODIS_43A4_061, [7, 13]), DATA_SOURCE_IDS.MOIDS_09Q1_061, [7, 13]); /** * Bit depth for each data source * Sentinel-2 is 12-bit; Landsat-8 is 16-bit; Planet is 12-bit; NAIP is 8-bit */ // TODO: use range value and dtype in STAC collection instead of this var MAX_PIXEL_VALUES = exports.MAX_PIXEL_VALUES = (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, DATA_SOURCE_IDS.SENTINEL_2_C1_L2A, Math.pow(2, 12) - 1), DATA_SOURCE_IDS.SENTINEL_2_L1A, Math.pow(2, 12) - 1), DATA_SOURCE_IDS.SENTINEL_2_L1C, Math.pow(2, 12) - 1), DATA_SOURCE_IDS.SENTINEL_2_PRE_C1_L2A, Math.pow(2, 12) - 1), DATA_SOURCE_IDS.LANDSAT_C2_L1, Math.pow(2, 16) - 1), DATA_SOURCE_IDS.LANDSAT_C2_L2, Math.pow(2, 16) - 1), DATA_SOURCE_IDS.MODIS_09A1_061, Math.pow(2, 12) - 1), DATA_SOURCE_IDS.MODIS_43A4_061, Math.pow(2, 12) - 1), DATA_SOURCE_IDS.MOIDS_09Q1_061, Math.pow(2, 12) - 1); /** * Id for categorical colormap. Unlike most colormaps. Categorical colormap image is created * from colormap set in visConfig */ var CATEGORICAL_COLORMAP_ID = exports.CATEGORICAL_COLORMAP_ID = '_categorical'; /** * A list of available colormaps. Colormaps are originally derived from * matplotlib, then via rio-tiler. Colormaps are 10x256 PNG images that are * loaded as textures */ var COLORMAP_OPTIONS = exports.COLORMAP_OPTIONS = [{ label: 'Cfastie', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.cfastie }, { label: 'Rplumbo', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.rplumbo }, { label: 'Schwarzwald', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.schwarzwald }, { label: 'Viridis', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.viridis }, { label: 'Plasma', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.plasma }, { label: 'Inferno', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.inferno }, { label: 'Magma', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.magma }, { label: 'Cividis', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.cividis }, { label: 'Greys', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.greys }, { label: 'Purples', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.purples }, { label: 'Blues', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.blues }, { label: 'Greens', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.greens }, { label: 'Oranges', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.oranges }, { label: 'Reds', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.reds }, { label: 'Yl-Or-Br', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.ylorbr }, { label: 'Yl-Or-Rd', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.ylorrd }, { label: 'Or-Rd', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.orrd }, { label: 'Pu-Rd', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.purd }, { label: 'Rd-Pu', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.rdpu }, { label: 'Bu-Pu', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.bupu }, { label: 'Gn-Bu', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.gnbu }, { label: 'Pu-Bu', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.pubu }, { label: 'Yl-Gn-Bu', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.ylgnbu }, { label: 'Pu-Bu-Gn', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.pubugn }, { label: 'Blue-Gn', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.bugn }, { label: 'Yl-Gn', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.ylgn }, { label: 'W-n-B', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.binary }, { label: 'B-n-W', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.gray }, { label: 'Bone', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.bone }, { label: 'Pink', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.pink }, { label: 'Spring', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.spring }, { label: 'Summer', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.summer }, { label: 'Autumn', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.autumn }, { label: 'Winter', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.winter }, { label: 'Cool', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.cool }, { label: 'Wistia', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.wistia }, { label: 'Hot', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.hot }, { label: 'Afmhot', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.afmhot }, { label: 'Heat', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.gist_heat }, { label: 'Copper', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.copper }, { label: 'Pi-Green', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.piyg }, { label: 'Pr-Gn', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.prgn }, { label: 'Br-Bg', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.brbg }, { label: 'Pu-Or', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.puor }, { label: 'Rd-Gy', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.rdgy }, { label: 'Rd-Bu', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.rdbu }, { label: 'Rd-Yl-Bu', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.rdylbu }, { label: 'Rd-Yl-Gn', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.rdylgn }, { label: 'Spectral', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.spectral }, { label: 'Cool-Warm', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.coolwarm }, { label: 'B-W-R', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.bwr }, { label: 'Seismic', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.seismic }, { label: 'Twilight', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.twilight }, { label: 'Twilight Shifted', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.twilight_shifted }, { label: 'HSV', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.hsv }, { label: 'Flag', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.flag }, { label: 'Prism', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.prism }, { label: 'Ocean', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.ocean }, { label: 'Gist Earth', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.gist_earth }, { label: 'Terrain', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.terrain }, { label: 'Gist Stern', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.gist_stern }, { label: 'Gnuplot', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.gnuplot }, { label: 'Gnuplot2', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.gnuplot2 }, { label: 'Cmrmap', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.cmrmap }, { label: 'Cubehelix', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.cubehelix }, { label: 'Brg', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.brg }, { label: 'Gist Rainbow', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.gist_rainbow }, { label: 'Rainbow', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.rainbow }, { label: 'Jet', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.jet }, { label: 'Nipy Spectral', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.nipy_spectral }, { label: 'Gist NCAR', id: _rasterTileLayerSchema.RasterTileLayerColorMaps.gist_ncar }]; var STAC_SEARCH_PROVIDERS = [ // { // label: 'Microsoft Planetary Computer', // id: 'microsoft' // }, { label: 'Element 84 Earth Search (AWS)', id: 'earth-search' }]; /** * Configuration settings to be exposed through the UI */ var rasterVisConfigs = exports.rasterVisConfigs = { preset: { type: 'object-select', defaultValue: 'trueColor', label: 'Preset', options: Object.values(PRESET_OPTIONS), property: 'preset', group: '' }, useSTACSearching: { type: 'boolean', property: 'useSTACSearching', defaultValue: false, label: 'Use STAC Searching' }, stacSearchProvider: { type: 'object-select', defaultValue: 'earth-search', label: 'STAC Search Provider', options: STAC_SEARCH_PROVIDERS, property: 'stacSearchProvider' }, startDate: { type: 'input', defaultValue: '2020-02-02', label: 'Start Date', property: 'startDate' }, endDate: { type: 'input', defaultValue: '2020-03-02', label: 'End Date', property: 'endDate' }, dynamicColor: { type: 'boolean', defaultValue: false, label: 'Dynamic Color', group: '', property: 'dynamicColor', description: 'Use a dynamic color scale based on data visible in the viewport' }, colormapId: { type: 'object-select', defaultValue: 'cfastie', label: 'Colormap', options: COLORMAP_OPTIONS, property: 'colormapId', group: '' }, // kepler's visConfig from kepler.gl https://github.com/foursquare/kepler.gl/blob/490a8938ffa1fac025e8d1997481acc1bffe4abd/src/layers/layer-factory.js#L228 // key `colorRange` is required becuase it is hardcoded in kepler.gl // to make shallow copy of the visConfig item // https://github.com/foursquare/kepler.gl/blob/490a8938ffa1fac025e8d1997481acc1bffe4abd/src/reducers/vis-state-merger.js#L736 colorRange: 'colorRange', linearRescalingFactor: { defaultValue: [0, 1], // group: "color" isRanged: true, label: 'Linear Rescaling Factor', property: 'linearRescalingFactor', range: [0, 1], step: 0.01, type: 'number' }, // Non-linear rescaling for true-color images // If false, implies linear rescaling nonLinearRescaling: { type: 'boolean', property: 'nonLinearRescaling', defaultValue: true, // group: undefined label: 'Non-Linear Rescaling' }, gammaContrastFactor: { defaultValue: 1, // group: "color" isRanged: false, label: 'Gamma Contrast', property: 'gammaContrastFactor', range: [0, 3], step: 0.05, type: 'number' }, sigmoidalContrastFactor: { defaultValue: 0, // group: "color" isRanged: false, label: 'Sigmoidal Contrast', property: 'sigmoidalContrastFactor', range: [0, 50], step: 1, type: 'number' }, sigmoidalBiasFactor: { defaultValue: 0.5, // group: "color" isRanged: false, label: 'Sigmoidal Bias', property: 'sigmoidalBiasFactor', range: [0, 1], step: 0.01, type: 'number' }, saturationValue: { defaultValue: 1, // group: "color" isRanged: false, label: 'Saturation', property: 'saturationValue', range: [0, 2], step: 0.05, type: 'number' }, filterEnabled: { type: 'boolean', property: 'filterEnabled', defaultValue: false, // group: undefined label: 'Filter' }, filterRange: { defaultValue: [-1, 1], // group: "color" isRanged: true, label: 'Filter', property: 'filterRange', range: [-1, 1], step: 0.01, type: 'number' }, opacity: { defaultValue: 1, // group: "color" isRanged: false, label: 'Opacity', property: 'opacity', range: [0, 1], step: 0.05, type: 'number' }, _stacQuery: { defaultValue: null, type: 'input' }, singleBandName: { type: 'object-select', defaultValue: null, label: 'Name of single band to render', // defined dynamically from STAC item/collection options: [], property: 'singleBandName', group: '' }, enableTerrain: { type: 'boolean', defaultValue: true, label: 'Enable 3D terrain', group: '', property: 'enableTerrain', description: 'Use terrain when terrain data is available. By default enabled for 3D Map.' }, enableTerrainTopView: { type: 'boolean', defaultValue: false, label: 'Enable in Top view', group: '', property: 'enableTerrainTopView' } }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmFzdGVyVGlsZUxheWVyU2NoZW1hIiwicmVxdWlyZSIsIl90eXBlcyIsIkRBVEFfU09VUkNFX0lEUyIsImV4cG9ydHMiLCJSQVNURVJfQ09MT1JfUkVTRVRfUEFSQU1TIiwiZ2FtbWFDb250cmFzdEZhY3RvciIsInNpZ21vaWRhbENvbnRyYXN0RmFjdG9yIiwic2lnbW9pZGFsQmlhc0ZhY3RvciIsInNhdHVyYXRpb25WYWx1ZSIsImR5bmFtaWNDb2xvciIsIkRFRkFVTFRfU0VOVElORUxfQ09MT1JfREVGQVVMVFMiLCJERUZBVUxUX01PRElTX0NPTE9SX0RFRkFVTFRTIiwiREVGQVVMVF9TRU5USU5FTF9CQU5EX01BUFBJTkciLCJjb2FzdGFsIiwiYmx1ZSIsImdyZWVuIiwicmVkIiwicmVkZWRnZTEiLCJyZWRlZGdlMiIsInJlZGVkZ2UzIiwibmlyIiwibmlyMDgiLCJuaXIwOSIsImNpcnJ1cyIsInN3aXIxMSIsInN3aXIxNiIsInN3aXIxMiIsInN3aXIyMiIsIkRFRkFVTFRfTU9ESVNfQkFORF9NQVBQSU5HIiwic3VyX3JlZmxfYjAxIiwic3VyX3JlZmxfYjAyIiwic3VyX3JlZmxfYjAzIiwic3VyX3JlZmxfYjA0Iiwic3VyX3JlZmxfYjA1Iiwic3VyX3JlZmxfYjA2Iiwic3VyX3JlZmxfYjA3IiwiTmFkaXJfUmVmbGVjdGFuY2VfQmFuZDEiLCJOYWRpcl9SZWZsZWN0YW5jZV9CYW5kMiIsIk5hZGlyX1JlZmxlY3RhbmNlX0JhbmQzIiwiTmFkaXJfUmVmbGVjdGFuY2VfQmFuZDQiLCJOYWRpcl9SZWZsZWN0YW5jZV9CYW5kNSIsIk5hZGlyX1JlZmxlY3RhbmNlX0JhbmQ2IiwiTmFkaXJfUmVmbGVjdGFuY2VfQmFuZDciLCJERUZBVUxUX0xBTkRTQVRfQzJfTDFfQkFORF9NQVBQSU5HIiwiREVGQVVMVF9MQU5EU0FUX0MyX0wyX0JBTkRfTUFQUElORyIsImx3aXIiLCJsd2lyMTEiLCJERUZBVUxUX0JBTkRfTUFQUElOR1MiLCJfZGVmaW5lUHJvcGVydHkyIiwiU0VOVElORUxfMl9MMUMiLCJTRU5USU5FTF8yX0wxQSIsIlNFTlRJTkVMXzJfQzFfTDJBIiwiU0VOVElORUxfMl9QUkVfQzFfTDJBIiwiTEFORFNBVF9DMl9MMSIsIkxBTkRTQVRfQzJfTDIiLCJNT0RJU18wOUExXzA2MSIsIk1PRElTXzQzQTRfMDYxIiwiTU9JRFNfMDlRMV8wNjEiLCJEQVRBX1NPVVJDRV9DT0xPUl9ERUZBVUxUUyIsIlBSRVNFVF9PUFRJT05TIiwidHJ1ZUNvbG9yIiwibGFiZWwiLCJpZCIsIlJhc3RlclRpbGVMYXllclByZXNldHMiLCJiYW5kQ29tYmluYXRpb24iLCJCYW5kQ29tYmluYXRpb24iLCJSZ2IiLCJjb21tb25OYW1lcyIsImluZnJhcmVkIiwiZGVzY3JpcHRpb24iLCJhZ3JpY3VsdHVyZSIsImZvcmVzdEJ1cm4iLCJuZHZpIiwiTm9ybWFsaXplZERpZmZlcmVuY2UiLCJpbmZvVXJsIiwic2F2aSIsIlNvaWxBZGp1c3RlZFZlZ2V0YXRpb25JbmRleCIsIm1zYXZpIiwiTW9kaWZpZWRTb2lsQWRqdXN0ZWRWZWdldGF0aW9uSW5kZXgiLCJuZG1pIiwibmJyIiwibmJyMiIsInNpbmdsZUJhbmQiLCJTaW5nbGUiLCJaT09NX1JBTkdFUyIsIk1BWF9QSVhFTF9WQUxVRVMiLCJNYXRoIiwicG93IiwiQ0FURUdPUklDQUxfQ09MT1JNQVBfSUQiLCJDT0xPUk1BUF9PUFRJT05TIiwiUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzIiwiY2Zhc3RpZSIsInJwbHVtYm8iLCJzY2h3YXJ6d2FsZCIsInZpcmlkaXMiLCJwbGFzbWEiLCJpbmZlcm5vIiwibWFnbWEiLCJjaXZpZGlzIiwiZ3JleXMiLCJwdXJwbGVzIiwiYmx1ZXMiLCJncmVlbnMiLCJvcmFuZ2VzIiwicmVkcyIsInlsb3JiciIsInlsb3JyZCIsIm9ycmQiLCJwdXJkIiwicmRwdSIsImJ1cHUiLCJnbmJ1IiwicHVidSIsInlsZ25idSIsInB1YnVnbiIsImJ1Z24iLCJ5bGduIiwiYmluYXJ5IiwiZ3JheSIsImJvbmUiLCJwaW5rIiwic3ByaW5nIiwic3VtbWVyIiwiYXV0dW1uIiwid2ludGVyIiwiY29vbCIsIndpc3RpYSIsImhvdCIsImFmbWhvdCIsImdpc3RfaGVhdCIsImNvcHBlciIsInBpeWciLCJwcmduIiwiYnJiZyIsInB1b3IiLCJyZGd5IiwicmRidSIsInJkeWxidSIsInJkeWxnbiIsInNwZWN0cmFsIiwiY29vbHdhcm0iLCJid3IiLCJzZWlzbWljIiwidHdpbGlnaHQiLCJ0d2lsaWdodF9zaGlmdGVkIiwiaHN2IiwiZmxhZyIsInByaXNtIiwib2NlYW4iLCJnaXN0X2VhcnRoIiwidGVycmFpbiIsImdpc3Rfc3Rlcm4iLCJnbnVwbG90IiwiZ251cGxvdDIiLCJjbXJtYXAiLCJjdWJlaGVsaXgiLCJicmciLCJnaXN0X3JhaW5ib3ciLCJyYWluYm93IiwiamV0IiwibmlweV9zcGVjdHJhbCIsImdpc3RfbmNhciIsIlNUQUNfU0VBUkNIX1BST1ZJREVSUyIsInJhc3RlclZpc0NvbmZpZ3MiLCJwcmVzZXQiLCJ0eXBlIiwiZGVmYXVsdFZhbHVlIiwib3B0aW9ucyIsIk9iamVjdCIsInZhbHVlcyIsInByb3BlcnR5IiwiZ3JvdXAiLCJ1c2VTVEFDU2VhcmNoaW5nIiwic3RhY1NlYXJjaFByb3ZpZGVyIiwic3RhcnREYXRlIiwiZW5kRGF0ZSIsImNvbG9ybWFwSWQiLCJjb2xvclJhbmdlIiwibGluZWFyUmVzY2FsaW5nRmFjdG9yIiwiaXNSYW5nZWQiLCJyYW5nZSIsInN0ZXAiLCJub25MaW5lYXJSZXNjYWxpbmciLCJmaWx0ZXJFbmFibGVkIiwiZmlsdGVyUmFuZ2UiLCJvcGFjaXR5IiwiX3N0YWNRdWVyeSIsInNpbmdsZUJhbmROYW1lIiwiZW5hYmxlVGVycmFpbiIsImVuYWJsZVRlcnJhaW5Ub3BWaWV3Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Jhc3Rlci10aWxlL2NvbmZpZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge1Jhc3RlclRpbGVMYXllckNvbG9yTWFwcywgUmFzdGVyVGlsZUxheWVyUHJlc2V0c30gZnJvbSAnLi9yYXN0ZXItdGlsZS1sYXllci1zY2hlbWEnO1xuaW1wb3J0IHtcbiAgVmlzQ29uZmlnQm9vbGVhbixcbiAgVmlzQ29uZmlnTnVtYmVyLFxuICBWaXNDb25maWdSYW5nZSxcbiAgVmlzQ29uZmlnT2JqZWN0U2VsZWN0aW9uLFxuICBWaXNDb25maWdJbnB1dFxufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcblxuaW1wb3J0IHtDb2xvclJlc2NhbGluZywgQ29uZmlnT3B0aW9uLCBQcmVzZXREYXRhLCBCYW5kQ29tYmluYXRpb259IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIEtub3duIERhdGEgU291cmNlIElEcyB0aGF0IHdvcmsgd2l0aCBjdXJyZW50IFNUQUMgTGF5ZXIgbGltaXRhdGlvbnNcbiAqL1xuZXhwb3J0IGVudW0gREFUQV9TT1VSQ0VfSURTIHtcbiAgU0VOVElORUxfMl9MMUMgPSAnc2VudGluZWwtMi1sMWMnLFxuICBTRU5USU5FTF8yX0wxQSA9ICdzZW50aW5lbC0yLWwyYScsXG4gIFNFTlRJTkVMXzJfQzFfTDJBID0gJ3NlbnRpbmVsLTItYzEtbDJhJyxcbiAgU0VOVElORUxfMl9QUkVfQzFfTDJBID0gJ3NlbnRpbmVsLTItcHJlLWMxLWwyYScsXG4gIExBTkRTQVRfQzJfTDEgPSAnbGFuZHNhdC1jMi1sMScsXG4gIExBTkRTQVRfQzJfTDIgPSAnbGFuZHNhdC1jMi1sMicsXG4gIE1PRElTXzA5QTFfMDYxID0gJ21vZGlzLTA5QTEtMDYxJyxcbiAgTU9ESVNfNDNBNF8wNjEgPSAnbW9kaXMtNDNBNC0wNjEnLFxuICBNT0lEU18wOVExXzA2MSA9ICdtb2Rpcy0wOVExLTA2MSdcbn1cblxuZXhwb3J0IGNvbnN0IFJBU1RFUl9DT0xPUl9SRVNFVF9QQVJBTVMgPSB7XG4gIGdhbW1hQ29udHJhc3RGYWN0b3I6IDEsXG4gIHNpZ21vaWRhbENvbnRyYXN0RmFjdG9yOiAwLFxuICBzaWdtb2lkYWxCaWFzRmFjdG9yOiAwLjUsXG4gIHNhdHVyYXRpb25WYWx1ZTogMS4wLFxuICBkeW5hbWljQ29sb3I6IGZhbHNlXG59O1xuXG5jb25zdCBERUZBVUxUX1NFTlRJTkVMX0NPTE9SX0RFRkFVTFRTID0ge1xuICBnYW1tYUNvbnRyYXN0RmFjdG9yOiAyLjIsXG4gIHNpZ21vaWRhbENvbnRyYXN0RmFjdG9yOiAyMyxcbiAgc2lnbW9pZGFsQmlhc0ZhY3RvcjogMC4xMixcbiAgc2F0dXJhdGlvblZhbHVlOiAyLjBcbn07XG5cbmNvbnN0IERFRkFVTFRfTU9ESVNfQ09MT1JfREVGQVVMVFMgPSB7XG4gIGdhbW1hQ29udHJhc3RGYWN0b3I6IDIuMCxcbiAgc2lnbW9pZGFsQ29udHJhc3RGYWN0b3I6IDgsXG4gIHNpZ21vaWRhbEJpYXNGYWN0b3I6IDAuMTMsXG4gIHNhdHVyYXRpb25WYWx1ZTogMS4xXG59O1xuXG5jb25zdCBERUZBVUxUX1NFTlRJTkVMX0JBTkRfTUFQUElORyA9IHtcbiAgY29hc3RhbDogJ0IwMScsXG4gIGJsdWU6ICdCMDInLFxuICBncmVlbjogJ0IwMycsXG4gIHJlZDogJ0IwNCcsXG4gIHJlZGVkZ2UxOiAnQjA1JyxcbiAgcmVkZWRnZTI6ICdCMDYnLFxuICByZWRlZGdlMzogJ0IwNycsXG4gIG5pcjogJ0IwOCcsXG4gIG5pcjA4OiAnQjhBJyxcbiAgbmlyMDk6ICdCMDknLFxuICBjaXJydXM6ICdCMTAnLFxuICBzd2lyMTE6ICdCMTEnLFxuICBzd2lyMTY6ICdCMTEnLFxuICBzd2lyMTI6ICdCMTInLFxuICBzd2lyMjI6ICdCMTInXG59O1xuXG5jb25zdCBERUZBVUxUX01PRElTX0JBTkRfTUFQUElORyA9IHtcbiAgc3VyX3JlZmxfYjAxOiAnQjAxJyxcbiAgc3VyX3JlZmxfYjAyOiAnQjAyJyxcbiAgc3VyX3JlZmxfYjAzOiAnQjAzJyxcbiAgc3VyX3JlZmxfYjA0OiAnQjA0JyxcbiAgc3VyX3JlZmxfYjA1OiAnQjA1JyxcbiAgc3VyX3JlZmxfYjA2OiAnQjA2JyxcbiAgc3VyX3JlZmxfYjA3OiAnQjA3JyxcbiAgTmFkaXJfUmVmbGVjdGFuY2VfQmFuZDE6ICdCMDEnLFxuICBOYWRpcl9SZWZsZWN0YW5jZV9CYW5kMjogJ0IwMicsXG4gIE5hZGlyX1JlZmxlY3RhbmNlX0JhbmQzOiAnQjAzJyxcbiAgTmFkaXJfUmVmbGVjdGFuY2VfQmFuZDQ6ICdCMDQnLFxuICBOYWRpcl9SZWZsZWN0YW5jZV9CYW5kNTogJ0IwNScsXG4gIE5hZGlyX1JlZmxlY3RhbmNlX0JhbmQ2OiAnQjA2JyxcbiAgTmFkaXJfUmVmbGVjdGFuY2VfQmFuZDc6ICdCMDcnXG59O1xuXG5jb25zdCBERUZBVUxUX0xBTkRTQVRfQzJfTDFfQkFORF9NQVBQSU5HID0ge1xuICBncmVlbjogJ0IwMScsXG4gIHJlZDogJ0IwMicsXG4gIG5pcjA4OiAnQjAzJyxcbiAgbmlyMDk6ICdCMDQnXG59O1xuXG5jb25zdCBERUZBVUxUX0xBTkRTQVRfQzJfTDJfQkFORF9NQVBQSU5HID0ge1xuICBibHVlOiAnQjAxJyxcbiAgZ3JlZW46ICdCMDInLFxuICByZWQ6ICdCMDMnLFxuICBuaXIwODogJ0IwNCcsXG4gIHN3aXIxNjogJ0IwNScsXG4gIGx3aXI6ICdCMDYnLFxuICBzd2lyMjI6ICdCMDcnLFxuICBjb2FzdGFsOiAnQjAxJyxcbiAgbHdpcjExOiAnQjA2J1xufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQkFORF9NQVBQSU5HUyA9IHtcbiAgW0RBVEFfU09VUkNFX0lEUy5TRU5USU5FTF8yX0wxQ106IERFRkFVTFRfU0VOVElORUxfQkFORF9NQVBQSU5HLFxuICBbREFUQV9TT1VSQ0VfSURTLlNFTlRJTkVMXzJfTDFBXTogREVGQVVMVF9TRU5USU5FTF9CQU5EX01BUFBJTkcsXG4gIFtEQVRBX1NPVVJDRV9JRFMuU0VOVElORUxfMl9DMV9MMkFdOiBERUZBVUxUX1NFTlRJTkVMX0JBTkRfTUFQUElORyxcbiAgW0RBVEFfU09VUkNFX0lEUy5TRU5USU5FTF8yX1BSRV9DMV9MMkFdOiBERUZBVUxUX1NFTlRJTkVMX0JBTkRfTUFQUElORyxcbiAgW0RBVEFfU09VUkNFX0lEUy5MQU5EU0FUX0MyX0wxXTogREVGQVVMVF9MQU5EU0FUX0MyX0wxX0JBTkRfTUFQUElORyxcbiAgW0RBVEFfU09VUkNFX0lEUy5MQU5EU0FUX0MyX0wyXTogREVGQVVMVF9MQU5EU0FUX0MyX0wyX0JBTkRfTUFQUElORyxcbiAgW0RBVEFfU09VUkNFX0lEUy5NT0RJU18wOUExXzA2MV06IERFRkFVTFRfTU9ESVNfQkFORF9NQVBQSU5HLFxuICBbREFUQV9TT1VSQ0VfSURTLk1PRElTXzQzQTRfMDYxXTogREVGQVVMVF9NT0RJU19CQU5EX01BUFBJTkcsXG4gIFtEQVRBX1NPVVJDRV9JRFMuTU9JRFNfMDlRMV8wNjFdOiBERUZBVUxUX01PRElTX0JBTkRfTUFQUElOR1xufTtcblxuLyoqXG4gKiBQZXItZGF0YSBzb3VyY2UgY29sb3IgcmVzY2FsaW5nIGRlZmF1bHRzIGZvciBrbm93biBjb2xsZWN0aW9uc1xuICovXG5leHBvcnQgY29uc3QgREFUQV9TT1VSQ0VfQ09MT1JfREVGQVVMVFM6IFJlY29yZDxEQVRBX1NPVVJDRV9JRFMsIENvbG9yUmVzY2FsaW5nPiA9IHtcbiAgLy8gTm90ZTogZ29vZCBmb3IgVHJ1ZSBDb2xvciwgdG9vIHNhdHVyYXRlZCBmb3Igb3RoZXIgY2hhbm5lbHNcbiAgW0RBVEFfU09VUkNFX0lEUy5TRU5USU5FTF8yX0wxQ106IERFRkFVTFRfU0VOVElORUxfQ09MT1JfREVGQVVMVFMsXG4gIFtEQVRBX1NPVVJDRV9JRFMuU0VOVElORUxfMl9MMUFdOiBERUZBVUxUX1NFTlRJTkVMX0NPTE9SX0RFRkFVTFRTLFxuICBbREFUQV9TT1VSQ0VfSURTLlNFTlRJTkVMXzJfQzFfTDJBXTogREVGQVVMVF9TRU5USU5FTF9DT0xPUl9ERUZBVUxUUyxcbiAgW0RBVEFfU09VUkNFX0lEUy5TRU5USU5FTF8yX1BSRV9DMV9MMkFdOiBERUZBVUxUX1NFTlRJTkVMX0NPTE9SX0RFRkFVTFRTLFxuICBbREFUQV9TT1VSQ0VfSURTLkxBTkRTQVRfQzJfTDFdOiBERUZBVUxUX1NFTlRJTkVMX0NPTE9SX0RFRkFVTFRTLFxuICBbREFUQV9TT1VSQ0VfSURTLkxBTkRTQVRfQzJfTDJdOiBERUZBVUxUX1NFTlRJTkVMX0NPTE9SX0RFRkFVTFRTLFxuICBbREFUQV9TT1VSQ0VfSURTLk1PRElTXzA5QTFfMDYxXTogREVGQVVMVF9NT0RJU19DT0xPUl9ERUZBVUxUUyxcbiAgW0RBVEFfU09VUkNFX0lEUy5NT0RJU180M0E0XzA2MV06IERFRkFVTFRfTU9ESVNfQ09MT1JfREVGQVVMVFMsXG4gIFtEQVRBX1NPVVJDRV9JRFMuTU9JRFNfMDlRMV8wNjFdOiBERUZBVUxUX01PRElTX0NPTE9SX0RFRkFVTFRTXG59O1xuXG4vKipcbiAqIEF2YWlsYWJsZSBcInByZXNldHNcIlxuICpcbiAqIEkgZGVmaW5lIGEgXCJwcmVzZXRcIiBhcyBvbmUgc3BlY2lmaWMgbWFubmVyIG9mIGxvYWRpbmcgYmFuZHMgYW5kIGNvbWJpbmluZyB0aGVtIG9uIHRoZSBmcm9udGVuZC5cbiAqIEluIHRoZSBmdXR1cmUgSSBleHBlY3Qgd2UnbGwgd2FudCBhIFVJIHRoYXQgZ2l2ZXMgdGhlIHVzZXIgZnVsbCBmbGV4aWJpbGl0eS5cbiAqL1xuZXhwb3J0IGNvbnN0IFBSRVNFVF9PUFRJT05TOiBSZWNvcmQ8c3RyaW5nLCBQcmVzZXREYXRhPiA9IHtcbiAgdHJ1ZUNvbG9yOiB7XG4gICAgbGFiZWw6ICdUcnVlIENvbG9yJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyUHJlc2V0cy50cnVlQ29sb3IsXG4gICAgYmFuZENvbWJpbmF0aW9uOiBCYW5kQ29tYmluYXRpb24uUmdiLFxuICAgIGNvbW1vbk5hbWVzOiBbJ3JlZCcsICdncmVlbicsICdibHVlJ11cbiAgfSxcbiAgaW5mcmFyZWQ6IHtcbiAgICBsYWJlbDogJ0luZnJhcmVkJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyUHJlc2V0cy5pbmZyYXJlZCxcbiAgICBiYW5kQ29tYmluYXRpb246IEJhbmRDb21iaW5hdGlvbi5SZ2IsXG4gICAgY29tbW9uTmFtZXM6IFsnbmlyJywgJ3JlZCcsICdncmVlbiddLFxuICAgIGRlc2NyaXB0aW9uOiAnRmFsc2UtY29sb3IgaW5mcmFyZWQgY29tcG9zaXRlLiBOZWFyLWluZnJhcmVkLCByZWQsIGdyZWVuIG1hcHBlZCB0byBSR0InXG4gIH0sXG4gIGFncmljdWx0dXJlOiB7XG4gICAgbGFiZWw6ICdBZ3JpY3VsdHVyZScsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllclByZXNldHMuYWdyaWN1bHR1cmUsXG4gICAgYmFuZENvbWJpbmF0aW9uOiBCYW5kQ29tYmluYXRpb24uUmdiLFxuICAgIGNvbW1vbk5hbWVzOiBbJ3N3aXIxNicsICduaXInLCAnYmx1ZSddLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ0ZhbHNlLWNvbG9yIGFncmljdWx0dXJlIGNvbXBvc2l0ZS4gU2hvcnQtd2F2ZSBpbmZyYXJlZCAxLCBuZWFyLWluZnJhcmVkLCBibHVlIG1hcHBlZCB0byBSR0IuJ1xuICB9LFxuICBmb3Jlc3RCdXJuOiB7XG4gICAgbGFiZWw6ICdGb3Jlc3QgQnVybicsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllclByZXNldHMuZm9yZXN0QnVybixcbiAgICBiYW5kQ29tYmluYXRpb246IEJhbmRDb21iaW5hdGlvbi5SZ2IsXG4gICAgY29tbW9uTmFtZXM6IFsnc3dpcjIyJywgJ25pcicsICdibHVlJ10sXG4gICAgZGVzY3JpcHRpb246XG4gICAgICAnRmFsc2UtY29sb3IgZm9yZXN0IGJ1cm4gY29tcG9zaXRlLiBTaG9ydC13YXZlIGluZnJhcmVkIDIsIG5lYXItaW5mcmFyZWQsIGJsdWUgbWFwcGVkIHRvIFJHQidcbiAgfSxcbiAgbmR2aToge1xuICAgIGxhYmVsOiAnTkRWSScsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllclByZXNldHMubmR2aSxcbiAgICBiYW5kQ29tYmluYXRpb246IEJhbmRDb21iaW5hdGlvbi5Ob3JtYWxpemVkRGlmZmVyZW5jZSxcbiAgICBjb21tb25OYW1lczogWyduaXInLCAncmVkJ10sXG4gICAgZGVzY3JpcHRpb246ICdOb3JtYWxpemVkIERpZmZlcmVuY2UgVmVnZXRhdGlvbiBJbmRleCcsXG4gICAgaW5mb1VybDpcbiAgICAgICdodHRwczovL3d3dy51c2dzLmdvdi9jb3JlLXNjaWVuY2Utc3lzdGVtcy9ubGkvbGFuZHNhdC9sYW5kc2F0LW5vcm1hbGl6ZWQtZGlmZmVyZW5jZS12ZWdldGF0aW9uLWluZGV4J1xuICB9LFxuICAvLyBDb21tZW50IHRoaXMgb3V0IGZvciBub3csIGJlY2F1c2UgaW4gdGVzdGluZyBpdCBsb29rcyBsaWtlIHRoZXJlJ3MgYW4gb3ZlcmZsb3cgb2Ygc29tZSBzb3J0O1xuICAvLyBpbmRleCB2YWx1ZXMgc2hvdWxkIGJlIGJldHdlZW4gLTEgYW5kIDEsIGJ1dCB2YWx1ZXMgbG9vayB3YXkgb3V0IG9mIGJvdW5kc1xuICAvLyBldmk6IHtcbiAgLy8gICBsYWJlbDogJ0VWSScsXG4gIC8vICAgaWQ6IFJhc3RlclRpbGVMYXllclByZXNldHMuZXZpLFxuICAvLyAgIGJhbmRDb21iaW5hdGlvbjogJ2VuaGFuY2VkVmVnZXRhdGlvbkluZGV4JyxcbiAgLy8gICBjb21tb25OYW1lczogWyduaXInLCAncmVkJywgJ2JsdWUnXVxuICAvLyB9LFxuICBzYXZpOiB7XG4gICAgbGFiZWw6ICdTQVZJJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyUHJlc2V0cy5zYXZpLFxuICAgIGJhbmRDb21iaW5hdGlvbjogQmFuZENvbWJpbmF0aW9uLlNvaWxBZGp1c3RlZFZlZ2V0YXRpb25JbmRleCxcbiAgICBjb21tb25OYW1lczogWyduaXInLCAncmVkJ10sXG4gICAgZGVzY3JpcHRpb246ICdTb2lsIEFkanVzdGVkIFZlZ2V0YXRpb24gSW5kZXgnLFxuICAgIGluZm9Vcmw6XG4gICAgICAnaHR0cHM6Ly93d3cudXNncy5nb3YvY29yZS1zY2llbmNlLXN5c3RlbXMvbmxpL2xhbmRzYXQvbGFuZHNhdC1zb2lsLWFkanVzdGVkLXZlZ2V0YXRpb24taW5kZXgnXG4gIH0sXG4gIG1zYXZpOiB7XG4gICAgbGFiZWw6ICdNU0FWSScsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllclByZXNldHMubXNhdmksXG4gICAgYmFuZENvbWJpbmF0aW9uOiBCYW5kQ29tYmluYXRpb24uTW9kaWZpZWRTb2lsQWRqdXN0ZWRWZWdldGF0aW9uSW5kZXgsXG4gICAgY29tbW9uTmFtZXM6IFsnbmlyJywgJ3JlZCddLFxuICAgIGRlc2NyaXB0aW9uOiAnTW9kaWZpZWQgU29pbCBBZGp1c3RlZCBWZWdldGF0aW9uIEluZGV4JyxcbiAgICBpbmZvVXJsOlxuICAgICAgJ2h0dHBzOi8vd3d3LnVzZ3MuZ292L2NvcmUtc2NpZW5jZS1zeXN0ZW1zL25saS9sYW5kc2F0L2xhbmRzYXQtbW9kaWZpZWQtc29pbC1hZGp1c3RlZC12ZWdldGF0aW9uLWluZGV4J1xuICB9LFxuICBuZG1pOiB7XG4gICAgbGFiZWw6ICdORE1JJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyUHJlc2V0cy5uZG1pLFxuICAgIGJhbmRDb21iaW5hdGlvbjogQmFuZENvbWJpbmF0aW9uLk5vcm1hbGl6ZWREaWZmZXJlbmNlLFxuICAgIGNvbW1vbk5hbWVzOiBbJ25pcicsICdzd2lyMTYnXSxcbiAgICBkZXNjcmlwdGlvbjogJ05vcm1hbGl6ZWQgRGlmZmVyZW5jZSBNb2lzdHVyZSBJbmRleCcsXG4gICAgaW5mb1VybDpcbiAgICAgICdodHRwczovL3d3dy51c2dzLmdvdi9jb3JlLXNjaWVuY2Utc3lzdGVtcy9ubGkvbGFuZHNhdC9ub3JtYWxpemVkLWRpZmZlcmVuY2UtbW9pc3R1cmUtaW5kZXgnXG4gIH0sXG4gIG5icjoge1xuICAgIGxhYmVsOiAnTkJSJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyUHJlc2V0cy5uYnIsXG4gICAgYmFuZENvbWJpbmF0aW9uOiBCYW5kQ29tYmluYXRpb24uTm9ybWFsaXplZERpZmZlcmVuY2UsXG4gICAgY29tbW9uTmFtZXM6IFsnbmlyJywgJ3N3aXIyMiddLFxuICAgIGRlc2NyaXB0aW9uOiAnTm9ybWFsaXplZCBCdXJuIFJhdGlvJyxcbiAgICBpbmZvVXJsOiAnaHR0cHM6Ly93d3cudXNncy5nb3YvY29yZS1zY2llbmNlLXN5c3RlbXMvbmxpL2xhbmRzYXQvbGFuZHNhdC1ub3JtYWxpemVkLWJ1cm4tcmF0aW8nXG4gIH0sXG4gIG5icjI6IHtcbiAgICBsYWJlbDogJ05CUiAyJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyUHJlc2V0cy5uYnIyLFxuICAgIGJhbmRDb21iaW5hdGlvbjogQmFuZENvbWJpbmF0aW9uLk5vcm1hbGl6ZWREaWZmZXJlbmNlLFxuICAgIGNvbW1vbk5hbWVzOiBbJ3N3aXIxNicsICdzd2lyMjInXSxcbiAgICBkZXNjcmlwdGlvbjogJ05vcm1hbGl6ZWQgQnVybiBSYXRpbyAyJyxcbiAgICBpbmZvVXJsOiAnaHR0cHM6Ly93d3cudXNncy5nb3YvY29yZS1zY2llbmNlLXN5c3RlbXMvbmxpL2xhbmRzYXQvbGFuZHNhdC1ub3JtYWxpemVkLWJ1cm4tcmF0aW8tMidcbiAgfSxcbiAgc2luZ2xlQmFuZDoge1xuICAgIGxhYmVsOiAnU2luZ2xlIEJhbmQnLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJQcmVzZXRzLnNpbmdsZUJhbmQsXG4gICAgYmFuZENvbWJpbmF0aW9uOiBCYW5kQ29tYmluYXRpb24uU2luZ2xlLFxuICAgIGRlc2NyaXB0aW9uOiAnUmVuZGVyIGEgc2luZ2xlIGJhbmQgZGF0YSdcbiAgfVxufTtcblxuLyoqXG4gKiBWYWxpZCB6b29tIHJhbmdlcyBmb3IgZWFjaCBkYXRhIHNvdXJjZVxuICpcbiAqIFRoZSBtYXhpbXVtIHpvb20gaXMgZGVyaXZlZCBmcm9tIHRoZSByZXNvbHV0aW9uIG9mIGVhY2ggZGF0YSBzb3VyY2UuXG4gKiBUaGUgbWluaW11bSB6b29tIHJlbGF0ZXMgdG8gdGhlIG51bWJlciBvZiBvdmVydmlld3MgaW4gdGhlIENPR3MgYXQgdGhlIHNvdXJjZS4gVGhlIG1vcmVcbiAqIG92ZXJ2aWV3cywgdGhlIGVhc2llciBpdCBpcyB0byBjcmVhdGUgZG93bnNhbXBsZWQgdGlsZXMuIFRoZSBtaW5pbXVtIHpvb21zIGNhbiBiZSByZWR1Y2VkIGJ1dCBpdFxuICogdGFrZXMgbG9uZ2VyIHRvIHNlcnZlIGxvdy16b29tIHRpbGVzIHNpbmNlIHRoZSBzZXJ2ZXIgbXVzdCByZWFkIGZyb20gbWFueSBpbWFnZSBzb3VyY2VzLlxuICovXG4vLyBUT0RPOiB1c2UgcmVuZGVyOm1heF9vdmVydmlld19nc2QgZnJvbSBTVEFDXG5leHBvcnQgY29uc3QgWk9PTV9SQU5HRVM6IFJlY29yZDxEQVRBX1NPVVJDRV9JRFMsIFtudW1iZXIsIG51bWJlcl0+ID0ge1xuICBbREFUQV9TT1VSQ0VfSURTLlNFTlRJTkVMXzJfQzFfTDJBXTogWzgsIDEzXSxcbiAgW0RBVEFfU09VUkNFX0lEUy5TRU5USU5FTF8yX0wxQV06IFs4LCAxM10sXG4gIFtEQVRBX1NPVVJDRV9JRFMuU0VOVElORUxfMl9MMUNdOiBbOCwgMTNdLFxuICBbREFUQV9TT1VSQ0VfSURTLlNFTlRJTkVMXzJfUFJFX0MxX0wyQV06IFs4LCAxM10sXG4gIFtEQVRBX1NPVVJDRV9JRFMuTEFORFNBVF9DMl9MMV06IFs3LCAxMl0sXG4gIFtEQVRBX1NPVVJDRV9JRFMuTEFORFNBVF9DMl9MMl06IFs3LCAxMl0sXG4gIFtEQVRBX1NPVVJDRV9JRFMuTU9ESVNfMDlBMV8wNjFdOiBbNywgMTNdLFxuICBbREFUQV9TT1VSQ0VfSURTLk1PRElTXzQzQTRfMDYxXTogWzcsIDEzXSxcbiAgW0RBVEFfU09VUkNFX0lEUy5NT0lEU18wOVExXzA2MV06IFs3LCAxM11cbn07XG5cbi8qKlxuICogQml0IGRlcHRoIGZvciBlYWNoIGRhdGEgc291cmNlXG4gKiBTZW50aW5lbC0yIGlzIDEyLWJpdDsgTGFuZHNhdC04IGlzIDE2LWJpdDsgUGxhbmV0IGlzIDEyLWJpdDsgTkFJUCBpcyA4LWJpdFxuICovXG4vLyBUT0RPOiB1c2UgcmFuZ2UgdmFsdWUgYW5kIGR0eXBlIGluIFNUQUMgY29sbGVjdGlvbiBpbnN0ZWFkIG9mIHRoaXNcbmV4cG9ydCBjb25zdCBNQVhfUElYRUxfVkFMVUVTOiBSZWNvcmQ8REFUQV9TT1VSQ0VfSURTLCBudW1iZXI+ID0ge1xuICBbREFUQV9TT1VSQ0VfSURTLlNFTlRJTkVMXzJfQzFfTDJBXTogTWF0aC5wb3coMiwgMTIpIC0gMSxcbiAgW0RBVEFfU09VUkNFX0lEUy5TRU5USU5FTF8yX0wxQV06IE1hdGgucG93KDIsIDEyKSAtIDEsXG4gIFtEQVRBX1NPVVJDRV9JRFMuU0VOVElORUxfMl9MMUNdOiBNYXRoLnBvdygyLCAxMikgLSAxLFxuICBbREFUQV9TT1VSQ0VfSURTLlNFTlRJTkVMXzJfUFJFX0MxX0wyQV06IE1hdGgucG93KDIsIDEyKSAtIDEsXG4gIFtEQVRBX1NPVVJDRV9JRFMuTEFORFNBVF9DMl9MMV06IE1hdGgucG93KDIsIDE2KSAtIDEsXG4gIFtEQVRBX1NPVVJDRV9JRFMuTEFORFNBVF9DMl9MMl06IE1hdGgucG93KDIsIDE2KSAtIDEsXG4gIFtEQVRBX1NPVVJDRV9JRFMuTU9ESVNfMDlBMV8wNjFdOiBNYXRoLnBvdygyLCAxMikgLSAxLFxuICBbREFUQV9TT1VSQ0VfSURTLk1PRElTXzQzQTRfMDYxXTogTWF0aC5wb3coMiwgMTIpIC0gMSxcbiAgW0RBVEFfU09VUkNFX0lEUy5NT0lEU18wOVExXzA2MV06IE1hdGgucG93KDIsIDEyKSAtIDFcbn07XG5cbi8qKlxuICogSWQgZm9yIGNhdGVnb3JpY2FsIGNvbG9ybWFwLiBVbmxpa2UgbW9zdCBjb2xvcm1hcHMuIENhdGVnb3JpY2FsIGNvbG9ybWFwIGltYWdlIGlzIGNyZWF0ZWRcbiAqIGZyb20gY29sb3JtYXAgc2V0IGluIHZpc0NvbmZpZ1xuICovXG5leHBvcnQgY29uc3QgQ0FURUdPUklDQUxfQ09MT1JNQVBfSUQgPSAnX2NhdGVnb3JpY2FsJztcblxuLyoqXG4gKiBBIGxpc3Qgb2YgYXZhaWxhYmxlIGNvbG9ybWFwcy4gQ29sb3JtYXBzIGFyZSBvcmlnaW5hbGx5IGRlcml2ZWQgZnJvbVxuICogbWF0cGxvdGxpYiwgdGhlbiB2aWEgcmlvLXRpbGVyLiBDb2xvcm1hcHMgYXJlIDEweDI1NiBQTkcgaW1hZ2VzIHRoYXQgYXJlXG4gKiBsb2FkZWQgYXMgdGV4dHVyZXNcbiAqL1xuXG5leHBvcnQgY29uc3QgQ09MT1JNQVBfT1BUSU9OUzogcmVhZG9ubHkgQ29uZmlnT3B0aW9uW10gPSBbXG4gIHtcbiAgICBsYWJlbDogJ0NmYXN0aWUnLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMuY2Zhc3RpZVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdScGx1bWJvJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLnJwbHVtYm9cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnU2Nod2FyendhbGQnLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMuc2Nod2FyendhbGRcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnVmlyaWRpcycsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy52aXJpZGlzXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1BsYXNtYScsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5wbGFzbWFcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnSW5mZXJubycsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5pbmZlcm5vXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ01hZ21hJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLm1hZ21hXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0NpdmlkaXMnLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMuY2l2aWRpc1xuICB9LFxuICB7XG4gICAgbGFiZWw6ICdHcmV5cycsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5ncmV5c1xuICB9LFxuICB7XG4gICAgbGFiZWw6ICdQdXJwbGVzJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLnB1cnBsZXNcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnQmx1ZXMnLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMuYmx1ZXNcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnR3JlZW5zJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLmdyZWVuc1xuICB9LFxuICB7XG4gICAgbGFiZWw6ICdPcmFuZ2VzJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLm9yYW5nZXNcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnUmVkcycsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5yZWRzXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1lsLU9yLUJyJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLnlsb3JiclxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdZbC1Pci1SZCcsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy55bG9ycmRcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnT3ItUmQnLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMub3JyZFxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdQdS1SZCcsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5wdXJkXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1JkLVB1JyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLnJkcHVcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnQnUtUHUnLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMuYnVwdVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdHbi1CdScsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5nbmJ1XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1B1LUJ1JyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLnB1YnVcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnWWwtR24tQnUnLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMueWxnbmJ1XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1B1LUJ1LUduJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLnB1YnVnblxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdCbHVlLUduJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLmJ1Z25cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnWWwtR24nLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMueWxnblxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdXLW4tQicsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5iaW5hcnlcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnQi1uLVcnLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMuZ3JheVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdCb25lJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLmJvbmVcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnUGluaycsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5waW5rXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1NwcmluZycsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5zcHJpbmdcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnU3VtbWVyJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLnN1bW1lclxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdBdXR1bW4nLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMuYXV0dW1uXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1dpbnRlcicsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy53aW50ZXJcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnQ29vbCcsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5jb29sXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1dpc3RpYScsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy53aXN0aWFcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnSG90JyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLmhvdFxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdBZm1ob3QnLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMuYWZtaG90XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0hlYXQnLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMuZ2lzdF9oZWF0XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0NvcHBlcicsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5jb3BwZXJcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnUGktR3JlZW4nLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMucGl5Z1xuICB9LFxuICB7XG4gICAgbGFiZWw6ICdQci1HbicsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5wcmduXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0JyLUJnJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLmJyYmdcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnUHUtT3InLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMucHVvclxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdSZC1HeScsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5yZGd5XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1JkLUJ1JyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLnJkYnVcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnUmQtWWwtQnUnLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMucmR5bGJ1XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1JkLVlsLUduJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLnJkeWxnblxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdTcGVjdHJhbCcsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5zcGVjdHJhbFxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdDb29sLVdhcm0nLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMuY29vbHdhcm1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnQi1XLVInLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMuYndyXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1NlaXNtaWMnLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMuc2Vpc21pY1xuICB9LFxuICB7XG4gICAgbGFiZWw6ICdUd2lsaWdodCcsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy50d2lsaWdodFxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdUd2lsaWdodCBTaGlmdGVkJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLnR3aWxpZ2h0X3NoaWZ0ZWRcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnSFNWJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLmhzdlxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdGbGFnJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLmZsYWdcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnUHJpc20nLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMucHJpc21cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnT2NlYW4nLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMub2NlYW5cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnR2lzdCBFYXJ0aCcsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5naXN0X2VhcnRoXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1RlcnJhaW4nLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMudGVycmFpblxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdHaXN0IFN0ZXJuJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLmdpc3Rfc3Rlcm5cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnR251cGxvdCcsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5nbnVwbG90XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0dudXBsb3QyJyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLmdudXBsb3QyXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0Ntcm1hcCcsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5jbXJtYXBcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnQ3ViZWhlbGl4JyxcbiAgICBpZDogUmFzdGVyVGlsZUxheWVyQ29sb3JNYXBzLmN1YmVoZWxpeFxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdCcmcnLFxuICAgIGlkOiBSYXN0ZXJUaWxlTGF5ZXJDb2xvck1hcHMuYnJnXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0dpc3QgUmFpbmJvdycsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5naXN0X3JhaW5ib3dcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnUmFpbmJvdycsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5yYWluYm93XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0pldCcsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5qZXRcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnTmlweSBTcGVjdHJhbCcsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5uaXB5X3NwZWN0cmFsXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0dpc3QgTkNBUicsXG4gICAgaWQ6IFJhc3RlclRpbGVMYXllckNvbG9yTWFwcy5naXN0X25jYXJcbiAgfVxuXTtcblxuY29uc3QgU1RBQ19TRUFSQ0hfUFJPVklERVJTOiBDb25maWdPcHRpb25bXSA9IFtcbiAgLy8ge1xuICAvLyAgIGxhYmVsOiAnTWljcm9zb2Z0IFBsYW5ldGFyeSBDb21wdXRlcicsXG4gIC8vICAgaWQ6ICdtaWNyb3NvZnQnXG4gIC8vIH0sXG4gIHtcbiAgICBsYWJlbDogJ0VsZW1lbnQgODQgRWFydGggU2VhcmNoIChBV1MpJyxcbiAgICBpZDogJ2VhcnRoLXNlYXJjaCdcbiAgfVxuXTtcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIHNldHRpbmdzIHRvIGJlIGV4cG9zZWQgdGhyb3VnaCB0aGUgVUlcbiAqL1xuZXhwb3J0IGNvbnN0IHJhc3RlclZpc0NvbmZpZ3MgPSB7XG4gIHByZXNldDoge1xuICAgIHR5cGU6ICdvYmplY3Qtc2VsZWN0JyxcbiAgICBkZWZhdWx0VmFsdWU6ICd0cnVlQ29sb3InLFxuICAgIGxhYmVsOiAnUHJlc2V0JyxcbiAgICBvcHRpb25zOiBPYmplY3QudmFsdWVzKFBSRVNFVF9PUFRJT05TKSxcbiAgICBwcm9wZXJ0eTogJ3ByZXNldCcsXG4gICAgZ3JvdXA6ICcnXG4gIH0gYXMgVmlzQ29uZmlnT2JqZWN0U2VsZWN0aW9uLFxuICB1c2VTVEFDU2VhcmNoaW5nOiB7XG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIHByb3BlcnR5OiAndXNlU1RBQ1NlYXJjaGluZycsXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICBsYWJlbDogJ1VzZSBTVEFDIFNlYXJjaGluZydcbiAgfSBhcyBWaXNDb25maWdCb29sZWFuLFxuICBzdGFjU2VhcmNoUHJvdmlkZXI6IHtcbiAgICB0eXBlOiAnb2JqZWN0LXNlbGVjdCcsXG4gICAgZGVmYXVsdFZhbHVlOiAnZWFydGgtc2VhcmNoJyxcbiAgICBsYWJlbDogJ1NUQUMgU2VhcmNoIFByb3ZpZGVyJyxcbiAgICBvcHRpb25zOiBTVEFDX1NFQVJDSF9QUk9WSURFUlMsXG4gICAgcHJvcGVydHk6ICdzdGFjU2VhcmNoUHJvdmlkZXInXG4gIH0gYXMgVmlzQ29uZmlnT2JqZWN0U2VsZWN0aW9uLFxuICBzdGFydERhdGU6IHtcbiAgICB0eXBlOiAnaW5wdXQnLFxuICAgIGRlZmF1bHRWYWx1ZTogJzIwMjAtMDItMDInLFxuICAgIGxhYmVsOiAnU3RhcnQgRGF0ZScsXG4gICAgcHJvcGVydHk6ICdzdGFydERhdGUnXG4gIH0gYXMgVmlzQ29uZmlnSW5wdXQsXG4gIGVuZERhdGU6IHtcbiAgICB0eXBlOiAnaW5wdXQnLFxuICAgIGRlZmF1bHRWYWx1ZTogJzIwMjAtMDMtMDInLFxuICAgIGxhYmVsOiAnRW5kIERhdGUnLFxuICAgIHByb3BlcnR5OiAnZW5kRGF0ZSdcbiAgfSBhcyBWaXNDb25maWdJbnB1dCxcbiAgZHluYW1pY0NvbG9yOiB7XG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgbGFiZWw6ICdEeW5hbWljIENvbG9yJyxcbiAgICBncm91cDogJycsXG4gICAgcHJvcGVydHk6ICdkeW5hbWljQ29sb3InLFxuICAgIGRlc2NyaXB0aW9uOiAnVXNlIGEgZHluYW1pYyBjb2xvciBzY2FsZSBiYXNlZCBvbiBkYXRhIHZpc2libGUgaW4gdGhlIHZpZXdwb3J0J1xuICB9IGFzIFZpc0NvbmZpZ0Jvb2xlYW4sXG4gIGNvbG9ybWFwSWQ6IHtcbiAgICB0eXBlOiAnb2JqZWN0LXNlbGVjdCcsXG4gICAgZGVmYXVsdFZhbHVlOiAnY2Zhc3RpZScsXG4gICAgbGFiZWw6ICdDb2xvcm1hcCcsXG4gICAgb3B0aW9uczogQ09MT1JNQVBfT1BUSU9OUyxcbiAgICBwcm9wZXJ0eTogJ2NvbG9ybWFwSWQnLFxuICAgIGdyb3VwOiAnJ1xuICB9IGFzIFZpc0NvbmZpZ09iamVjdFNlbGVjdGlvbixcbiAgLy8ga2VwbGVyJ3MgdmlzQ29uZmlnIGZyb20ga2VwbGVyLmdsIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3Vyc3F1YXJlL2tlcGxlci5nbC9ibG9iLzQ5MGE4OTM4ZmZhMWZhYzAyNWU4ZDE5OTc0ODFhY2MxYmZmZTRhYmQvc3JjL2xheWVycy9sYXllci1mYWN0b3J5LmpzI0wyMjhcbiAgLy8ga2V5IGBjb2xvclJhbmdlYCBpcyByZXF1aXJlZCBiZWN1YXNlIGl0IGlzIGhhcmRjb2RlZCBpbiBrZXBsZXIuZ2xcbiAgLy8gdG8gbWFrZSBzaGFsbG93IGNvcHkgb2YgdGhlIHZpc0NvbmZpZyBpdGVtXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3Vyc3F1YXJlL2tlcGxlci5nbC9ibG9iLzQ5MGE4OTM4ZmZhMWZhYzAyNWU4ZDE5OTc0ODFhY2MxYmZmZTRhYmQvc3JjL3JlZHVjZXJzL3Zpcy1zdGF0ZS1tZXJnZXIuanMjTDczNlxuICBjb2xvclJhbmdlOiAnY29sb3JSYW5nZScgYXMgY29uc3QsXG4gIGxpbmVhclJlc2NhbGluZ0ZhY3Rvcjoge1xuICAgIGRlZmF1bHRWYWx1ZTogWzAsIDFdLFxuICAgIC8vIGdyb3VwOiBcImNvbG9yXCJcbiAgICBpc1JhbmdlZDogdHJ1ZSxcbiAgICBsYWJlbDogJ0xpbmVhciBSZXNjYWxpbmcgRmFjdG9yJyxcbiAgICBwcm9wZXJ0eTogJ2xpbmVhclJlc2NhbGluZ0ZhY3RvcicsXG4gICAgcmFuZ2U6IFswLCAxXSxcbiAgICBzdGVwOiAwLjAxLFxuICAgIHR5cGU6ICdudW1iZXInXG4gIH0gYXMgVmlzQ29uZmlnUmFuZ2UsXG4gIC8vIE5vbi1saW5lYXIgcmVzY2FsaW5nIGZvciB0cnVlLWNvbG9yIGltYWdlc1xuICAvLyBJZiBmYWxzZSwgaW1wbGllcyBsaW5lYXIgcmVzY2FsaW5nXG4gIG5vbkxpbmVhclJlc2NhbGluZzoge1xuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBwcm9wZXJ0eTogJ25vbkxpbmVhclJlc2NhbGluZycsXG4gICAgZGVmYXVsdFZhbHVlOiB0cnVlLFxuICAgIC8vIGdyb3VwOiB1bmRlZmluZWRcbiAgICBsYWJlbDogJ05vbi1MaW5lYXIgUmVzY2FsaW5nJ1xuI