UNPKG

kepler.gl.geoiq

Version:

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

563 lines (545 loc) 64.1 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.DEFAULT_NOTIFICATION_TOPICS = exports.DEFAULT_NOTIFICATION_TYPES = exports.DEFAULT_NOTIFICATION_MESSAGE = exports.DEFAULT_UUID_COUNT = exports.EXPORT_DATA_TYPE_OPTIONS = exports.EXPORT_DATA_TYPE = exports.DEFAULT_EXPORT_IMAGE_NAME = exports.RESOLUTION_OPTIONS = exports.RATIO_OPTIONS = exports.RATIOS = exports.RESOLUTIONS = exports.MAX_DEFAULT_TOOLTIPS = exports.LAYER_BLENDINGS = exports.NO_VALUE_COLOR = exports.DEFAULT_LIGHT_SETTINGS = exports.DEFAULT_TOOLTIP_FIELDS = exports.DEFAULT_LAYER_COLOR = exports.LAYER_TYPES = exports.CHANNEL_SCALE_SUPPORTED_FIELDS = exports.FIELD_OPTS = exports.DEFAULT_AGGREGATION = exports.notSupportAggrOpts = exports.notSupportedScaleOpts = exports.ordinalFieldAggrScaleFunctions = exports.ordinalFieldScaleFunctions = exports.linearFieldAggrScaleFunctions = exports.linearFieldScaleFunctions = exports.AGGREGATION_TYPES = exports.CHANNEL_SCALES = exports.FIELD_DISPLAY_FORMAT = exports.defaultFormat = exports.FILED_TYPE_DISPLAY = exports.FIELD_COLORS = exports.ALL_FIELD_TYPES = exports.SCALE_FUNC = exports.SCALE_TYPES = exports.TRIP_ARC_FIELDS = exports.TRIP_POINT_FIELDS = exports.ICON_FIELDS = exports.GEOJSON_FIELDS = exports.DEFAULT_MAP_STYLES = exports.DEFAULT_LAYER_GROUPS = exports.PANELS_FOOTER = exports.PANELS = exports.DIMENSIONS = exports.KEPLER_GL_WEBSITE = exports.KEPLER_GL_VERSION = exports.KEPLER_GL_NAME = exports.ADD_EXTERNAL_DATA_ID = exports.ADD_MAP_STYLE_ID = exports.EXPORT_CONFIG_ID = exports.EXPORT_DATA_ID = exports.EXPORT_IMAGE_ID = exports.ADD_DATA_ID = exports.DELETE_DATA_ID = exports.DATA_TABLE_ID = exports.LAYER_CONFIG_ID = exports.ICON_PREFIX = exports.CLOUDFRONT = exports.ACTION_PREFIX = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _keymirror = _interopRequireDefault(require("keymirror")); var _icons = require("../components/common/icons"); var _FILED_TYPE_DISPLAY, _FIELD_DISPLAY_FORMAT, _linearFieldScaleFunc, _CHANNEL_SCALES$color, _CHANNEL_SCALES$sizeA, _linearFieldAggrScale, _ordinalFieldScaleFun, _CHANNEL_SCALES$color2, _ordinalFieldAggrScal, _notSupportedScaleOpt, _notSupportAggrOpts, _DEFAULT_AGGREGATION; function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } var ACTION_PREFIX = '@@kepler.gl/'; exports.ACTION_PREFIX = ACTION_PREFIX; var CLOUDFRONT = 'https://d1a3f4spazzrp4.cloudfront.net/kepler.gl'; exports.CLOUDFRONT = CLOUDFRONT; var ICON_PREFIX = "".concat(CLOUDFRONT, "/geodude"); // Modal Ids exports.ICON_PREFIX = ICON_PREFIX; var LAYER_CONFIG_ID = 'copyConfig'; exports.LAYER_CONFIG_ID = LAYER_CONFIG_ID; var DATA_TABLE_ID = 'dataTable'; exports.DATA_TABLE_ID = DATA_TABLE_ID; var DELETE_DATA_ID = 'deleteData'; exports.DELETE_DATA_ID = DELETE_DATA_ID; var ADD_DATA_ID = 'addData'; exports.ADD_DATA_ID = ADD_DATA_ID; var EXPORT_IMAGE_ID = 'exportImage'; exports.EXPORT_IMAGE_ID = EXPORT_IMAGE_ID; var EXPORT_DATA_ID = 'exportData'; exports.EXPORT_DATA_ID = EXPORT_DATA_ID; var EXPORT_CONFIG_ID = 'exportConfig'; exports.EXPORT_CONFIG_ID = EXPORT_CONFIG_ID; var ADD_MAP_STYLE_ID = 'addMapStyle'; exports.ADD_MAP_STYLE_ID = ADD_MAP_STYLE_ID; var ADD_EXTERNAL_DATA_ID = 'addExternalData'; exports.ADD_EXTERNAL_DATA_ID = ADD_EXTERNAL_DATA_ID; var KEPLER_GL_NAME = '|0|.gl'; exports.KEPLER_GL_NAME = KEPLER_GL_NAME; var KEPLER_GL_VERSION = 'v1.0'; exports.KEPLER_GL_VERSION = KEPLER_GL_VERSION; var KEPLER_GL_WEBSITE = 'https://viz.geoiq.io/'; exports.KEPLER_GL_WEBSITE = KEPLER_GL_WEBSITE; var DIMENSIONS = { sidePanel: { width: 300, margin: { top: 20, left: 20, bottom: 30, right: 20 }, headerHeight: 96 }, mapControl: { width: 204, padding: 12 } }; exports.DIMENSIONS = DIMENSIONS; var PANELS = [{ id: 'layer', label: 'Layers', iconComponent: _icons.Layers }, { id: 'widget', label: 'Widgets', iconComponent: _icons.Widgets }, { id: 'filter', label: 'Filters', iconComponent: _icons.FilterFunnel }, { id: 'interaction', label: 'Interactions', iconComponent: _icons.CursorClick }, { id: 'map', label: 'Base map', iconComponent: _icons.Settings }]; exports.PANELS = PANELS; var PANELS_FOOTER = [{ id: LAYER_CONFIG_ID, label: 'Copy Config', icon: 'clipboard' }]; // MAP STYLES exports.PANELS_FOOTER = PANELS_FOOTER; var DEFAULT_LAYER_GROUPS = [{ slug: 'label', filter: function filter(_ref) { var id = _ref.id; return id.match(/(?=(label|place-|poi-))/); }, defaultVisibility: true }, { slug: 'road', filter: function filter(_ref2) { var id = _ref2.id; return id.match(/(?=(road|railway|tunnel|street|bridge))(?!.*label)/); }, defaultVisibility: true }, { slug: 'border', filter: function filter(_ref3) { var id = _ref3.id; return id.match(/border|boundaries/); }, defaultVisibility: false }, { slug: 'building', filter: function filter(_ref4) { var id = _ref4.id; return id.match(/building/); }, defaultVisibility: true }, { slug: 'water', filter: function filter(_ref5) { var id = _ref5.id; return id.match(/(?=(water|stream|ferry))/); }, defaultVisibility: true }, { slug: 'land', filter: function filter(_ref6) { var id = _ref6.id; return id.match(/(?=(parks|landcover|industrial|sand|hillshade))/); }, defaultVisibility: true }, { slug: '3d building', filter: function filter() { return false; }, defaultVisibility: false }]; exports.DEFAULT_LAYER_GROUPS = DEFAULT_LAYER_GROUPS; var DEFAULT_MAP_STYLES = [{ id: 'dark', label: 'Dark', url: 'mapbox://styles/uberdata/cjoqbbf6l9k302sl96tyvka09', icon: "".concat(ICON_PREFIX, "/UBER_DARK_V2.png"), layerGroups: DEFAULT_LAYER_GROUPS }, { id: 'light', label: 'Light', url: 'mapbox://styles/uberdata/cjoqb9j339k1f2sl9t5ic5bn4', icon: "".concat(ICON_PREFIX, "/UBER_LIGHT_V2.png"), layerGroups: DEFAULT_LAYER_GROUPS }, { id: 'dark', label: 'Dark', url: 'mapbox://styles/uberdata/cjoqbbf6l9k302sl96tyvka09', icon: "".concat(ICON_PREFIX, "/UBER_DARK_V2.png"), layerGroups: DEFAULT_LAYER_GROUPS }, { id: 'muted', label: 'Muted Light', url: 'mapbox://styles/uberdata/cjfyl03kp1tul2smf5v2tbdd4', icon: "".concat(ICON_PREFIX, "/UBER_MUTED_LIGHT.png"), layerGroups: DEFAULT_LAYER_GROUPS }, { id: 'muted_night', label: 'Muted Night', url: 'mapbox://styles/uberdata/cjfxhlikmaj1b2soyzevnywgs', icon: "".concat(ICON_PREFIX, "/UBER_MUTED_NIGHT.png"), layerGroups: DEFAULT_LAYER_GROUPS }]; exports.DEFAULT_MAP_STYLES = DEFAULT_MAP_STYLES; var GEOJSON_FIELDS = { geojson: ['_geojson', 'all_points', 'geojson'] }; exports.GEOJSON_FIELDS = GEOJSON_FIELDS; var ICON_FIELDS = { icon: ['icon'] }; exports.ICON_FIELDS = ICON_FIELDS; var TRIP_POINT_FIELDS = [['lat', 'lng'], ['lat', 'lon'], ['latitude', 'longitude']]; exports.TRIP_POINT_FIELDS = TRIP_POINT_FIELDS; var TRIP_ARC_FIELDS = { lat0: 'begintrip', lng0: 'begintrip', lat1: 'dropoff', lng1: 'dropoff' }; exports.TRIP_ARC_FIELDS = TRIP_ARC_FIELDS; var SCALE_TYPES = (0, _keymirror["default"])({ ordinal: null, quantile: null, quantize: null, linear: null, // for radius sqrt: null, // ordinal domain to linear range point: null }); exports.SCALE_TYPES = SCALE_TYPES; var SCALE_FUNC = { linear: require('d3-scale').scaleLinear, quantize: require('d3-scale').scaleQuantize, quantile: require('d3-scale').scaleQuantile, ordinal: require('d3-scale').scaleOrdinal, sqrt: require('d3-scale').scaleSqrt, point: require('d3-scale').scalePoint }; exports.SCALE_FUNC = SCALE_FUNC; var ALL_FIELD_TYPES = (0, _keymirror["default"])({ "boolean": null, date: null, geojson: null, integer: null, real: null, string: null, timestamp: null, point: null }); exports.ALL_FIELD_TYPES = ALL_FIELD_TYPES; var ORANGE = '248, 194, 28'; var PINK = '231, 189, 194'; var PURPLE = '160, 106, 206'; var BLUE = '140, 210, 205'; var BLUE2 = '106, 160, 206'; var BLUE3 = '0, 172, 237'; var GREEN = '106, 160, 56'; var RED = '237, 88, 106'; var FIELD_COLORS = { "default": RED }; exports.FIELD_COLORS = FIELD_COLORS; var FILED_TYPE_DISPLAY = (_FILED_TYPE_DISPLAY = {}, (0, _defineProperty2["default"])(_FILED_TYPE_DISPLAY, ALL_FIELD_TYPES["boolean"], { label: 'bool', color: PINK }), (0, _defineProperty2["default"])(_FILED_TYPE_DISPLAY, ALL_FIELD_TYPES.date, { label: 'date', color: PURPLE }), (0, _defineProperty2["default"])(_FILED_TYPE_DISPLAY, ALL_FIELD_TYPES.geojson, { label: 'geo', color: BLUE2 }), (0, _defineProperty2["default"])(_FILED_TYPE_DISPLAY, ALL_FIELD_TYPES.integer, { label: 'int', color: ORANGE }), (0, _defineProperty2["default"])(_FILED_TYPE_DISPLAY, ALL_FIELD_TYPES.real, { label: 'float', color: ORANGE }), (0, _defineProperty2["default"])(_FILED_TYPE_DISPLAY, ALL_FIELD_TYPES.string, { label: 'string', color: BLUE }), (0, _defineProperty2["default"])(_FILED_TYPE_DISPLAY, ALL_FIELD_TYPES.timestamp, { label: 'time', color: GREEN }), (0, _defineProperty2["default"])(_FILED_TYPE_DISPLAY, ALL_FIELD_TYPES.point, { label: 'point', color: BLUE3 }), _FILED_TYPE_DISPLAY); exports.FILED_TYPE_DISPLAY = FILED_TYPE_DISPLAY; var defaultFormat = function defaultFormat(d) { return d; }; exports.defaultFormat = defaultFormat; var FIELD_DISPLAY_FORMAT = (_FIELD_DISPLAY_FORMAT = {}, (0, _defineProperty2["default"])(_FIELD_DISPLAY_FORMAT, ALL_FIELD_TYPES.string, defaultFormat), (0, _defineProperty2["default"])(_FIELD_DISPLAY_FORMAT, ALL_FIELD_TYPES.timestamp, defaultFormat), (0, _defineProperty2["default"])(_FIELD_DISPLAY_FORMAT, ALL_FIELD_TYPES.integer, defaultFormat), (0, _defineProperty2["default"])(_FIELD_DISPLAY_FORMAT, ALL_FIELD_TYPES["boolean"], function (d) { return String(d); }), (0, _defineProperty2["default"])(_FIELD_DISPLAY_FORMAT, ALL_FIELD_TYPES.date, defaultFormat), (0, _defineProperty2["default"])(_FIELD_DISPLAY_FORMAT, ALL_FIELD_TYPES.geojson, defaultFormat), _FIELD_DISPLAY_FORMAT); exports.FIELD_DISPLAY_FORMAT = FIELD_DISPLAY_FORMAT; var CHANNEL_SCALES = (0, _keymirror["default"])({ color: null, radius: null, size: null, colorAggr: null, sizeAggr: null }); exports.CHANNEL_SCALES = CHANNEL_SCALES; var AGGREGATION_TYPES = { // default count: 'count', // linear average: 'average', maximum: 'maximum', minimum: 'minimum', median: 'median', sum: 'sum', // ordinal mode: 'mode', countUnique: 'count unique' }; exports.AGGREGATION_TYPES = AGGREGATION_TYPES; var linearFieldScaleFunctions = (_linearFieldScaleFunc = {}, (0, _defineProperty2["default"])(_linearFieldScaleFunc, CHANNEL_SCALES.color, [SCALE_TYPES.quantile, SCALE_TYPES.quantize]), (0, _defineProperty2["default"])(_linearFieldScaleFunc, CHANNEL_SCALES.radius, [SCALE_TYPES.sqrt]), (0, _defineProperty2["default"])(_linearFieldScaleFunc, CHANNEL_SCALES.size, [SCALE_TYPES.linear]), _linearFieldScaleFunc); exports.linearFieldScaleFunctions = linearFieldScaleFunctions; var linearFieldAggrScaleFunctions = (_linearFieldAggrScale = {}, (0, _defineProperty2["default"])(_linearFieldAggrScale, CHANNEL_SCALES.colorAggr, (_CHANNEL_SCALES$color = {}, (0, _defineProperty2["default"])(_CHANNEL_SCALES$color, AGGREGATION_TYPES.average, [SCALE_TYPES.quantile, SCALE_TYPES.quantize]), (0, _defineProperty2["default"])(_CHANNEL_SCALES$color, AGGREGATION_TYPES.maximum, [SCALE_TYPES.quantile, SCALE_TYPES.quantize]), (0, _defineProperty2["default"])(_CHANNEL_SCALES$color, AGGREGATION_TYPES.minimum, [SCALE_TYPES.quantile, SCALE_TYPES.quantize]), (0, _defineProperty2["default"])(_CHANNEL_SCALES$color, AGGREGATION_TYPES.median, [SCALE_TYPES.quantile, SCALE_TYPES.quantize]), (0, _defineProperty2["default"])(_CHANNEL_SCALES$color, AGGREGATION_TYPES.sum, [SCALE_TYPES.quantile, SCALE_TYPES.quantize]), _CHANNEL_SCALES$color)), (0, _defineProperty2["default"])(_linearFieldAggrScale, CHANNEL_SCALES.sizeAggr, (_CHANNEL_SCALES$sizeA = {}, (0, _defineProperty2["default"])(_CHANNEL_SCALES$sizeA, AGGREGATION_TYPES.average, [SCALE_TYPES.linear]), (0, _defineProperty2["default"])(_CHANNEL_SCALES$sizeA, AGGREGATION_TYPES.maximum, [SCALE_TYPES.linear]), (0, _defineProperty2["default"])(_CHANNEL_SCALES$sizeA, AGGREGATION_TYPES.minimum, [SCALE_TYPES.linear]), (0, _defineProperty2["default"])(_CHANNEL_SCALES$sizeA, AGGREGATION_TYPES.median, [SCALE_TYPES.linear]), (0, _defineProperty2["default"])(_CHANNEL_SCALES$sizeA, AGGREGATION_TYPES.sum, [SCALE_TYPES.linear]), _CHANNEL_SCALES$sizeA)), _linearFieldAggrScale); exports.linearFieldAggrScaleFunctions = linearFieldAggrScaleFunctions; var ordinalFieldScaleFunctions = (_ordinalFieldScaleFun = {}, (0, _defineProperty2["default"])(_ordinalFieldScaleFun, CHANNEL_SCALES.color, [SCALE_TYPES.ordinal]), (0, _defineProperty2["default"])(_ordinalFieldScaleFun, CHANNEL_SCALES.radius, [SCALE_TYPES.point]), (0, _defineProperty2["default"])(_ordinalFieldScaleFun, CHANNEL_SCALES.size, [SCALE_TYPES.point]), _ordinalFieldScaleFun); exports.ordinalFieldScaleFunctions = ordinalFieldScaleFunctions; var ordinalFieldAggrScaleFunctions = (_ordinalFieldAggrScal = {}, (0, _defineProperty2["default"])(_ordinalFieldAggrScal, CHANNEL_SCALES.colorAggr, (_CHANNEL_SCALES$color2 = {}, (0, _defineProperty2["default"])(_CHANNEL_SCALES$color2, AGGREGATION_TYPES.mode, [SCALE_TYPES.ordinal]), (0, _defineProperty2["default"])(_CHANNEL_SCALES$color2, AGGREGATION_TYPES.countUnique, [SCALE_TYPES.quantile, SCALE_TYPES.quantize]), _CHANNEL_SCALES$color2)), (0, _defineProperty2["default"])(_ordinalFieldAggrScal, CHANNEL_SCALES.sizeAggr, {}), _ordinalFieldAggrScal); exports.ordinalFieldAggrScaleFunctions = ordinalFieldAggrScaleFunctions; var notSupportedScaleOpts = (_notSupportedScaleOpt = {}, (0, _defineProperty2["default"])(_notSupportedScaleOpt, CHANNEL_SCALES.color, []), (0, _defineProperty2["default"])(_notSupportedScaleOpt, CHANNEL_SCALES.radius, []), (0, _defineProperty2["default"])(_notSupportedScaleOpt, CHANNEL_SCALES.size, []), _notSupportedScaleOpt); exports.notSupportedScaleOpts = notSupportedScaleOpts; var notSupportAggrOpts = (_notSupportAggrOpts = {}, (0, _defineProperty2["default"])(_notSupportAggrOpts, CHANNEL_SCALES.colorAggr, {}), (0, _defineProperty2["default"])(_notSupportAggrOpts, CHANNEL_SCALES.sizeAggr, {}), _notSupportAggrOpts); /** * Default aggregation are based on ocunt */ exports.notSupportAggrOpts = notSupportAggrOpts; var DEFAULT_AGGREGATION = (_DEFAULT_AGGREGATION = {}, (0, _defineProperty2["default"])(_DEFAULT_AGGREGATION, CHANNEL_SCALES.colorAggr, (0, _defineProperty2["default"])({}, AGGREGATION_TYPES.count, [SCALE_TYPES.quantize, SCALE_TYPES.quantile])), (0, _defineProperty2["default"])(_DEFAULT_AGGREGATION, CHANNEL_SCALES.sizeAggr, (0, _defineProperty2["default"])({}, AGGREGATION_TYPES.count, [SCALE_TYPES.linear])), _DEFAULT_AGGREGATION); /** * Define what type of scale operation is allowed on each type of fields */ exports.DEFAULT_AGGREGATION = DEFAULT_AGGREGATION; var FIELD_OPTS = { string: { type: 'categorical', scale: _objectSpread({}, ordinalFieldScaleFunctions, {}, ordinalFieldAggrScaleFunctions), format: { legend: function legend(d) { return d; } } }, real: { type: 'numerical', scale: _objectSpread({}, linearFieldScaleFunctions, {}, linearFieldAggrScaleFunctions), format: { legend: function legend(d) { return d; } } }, timestamp: { type: 'time', scale: _objectSpread({}, linearFieldScaleFunctions, {}, notSupportAggrOpts), format: { legend: function legend(d) { return d; } } }, integer: { type: 'numerical', scale: _objectSpread({}, linearFieldScaleFunctions, {}, linearFieldAggrScaleFunctions), format: { legend: function legend(d) { return d; } } }, "boolean": { type: 'boolean', scale: _objectSpread({}, ordinalFieldScaleFunctions, {}, ordinalFieldAggrScaleFunctions), format: { legend: function legend(d) { return d; } } }, date: { scale: _objectSpread({}, ordinalFieldScaleFunctions, {}, ordinalFieldAggrScaleFunctions), format: { legend: function legend(d) { return d; } } }, geojson: { type: 'geometry', scale: _objectSpread({}, notSupportedScaleOpts, {}, notSupportAggrOpts), format: { legend: function legend(d) { return '...'; } } } }; exports.FIELD_OPTS = FIELD_OPTS; var CHANNEL_SCALE_SUPPORTED_FIELDS = Object.keys(CHANNEL_SCALES).reduce(function (accu, key) { return _objectSpread({}, accu, (0, _defineProperty2["default"])({}, key, Object.keys(FIELD_OPTS).filter(function (ft) { return Object.keys(FIELD_OPTS[ft].scale[key]).length; }))); }, {}); // TODO: shan delete use of LAYER_TYPES exports.CHANNEL_SCALE_SUPPORTED_FIELDS = CHANNEL_SCALE_SUPPORTED_FIELDS; var LAYER_TYPES = (0, _keymirror["default"])({ point: null, arc: null, cluster: null, line: null, grid: null, geojson: null, icon: null, heatmap: null, hexagon: null }); exports.LAYER_TYPES = LAYER_TYPES; var DEFAULT_LAYER_COLOR = { tripArc: '#9226C6', begintrip_lat: '#1E96BE', dropoff_lat: '#FF991F', request_lat: '#52A353' }; // let user pass in default tooltip fields exports.DEFAULT_LAYER_COLOR = DEFAULT_LAYER_COLOR; var DEFAULT_TOOLTIP_FIELDS = []; exports.DEFAULT_TOOLTIP_FIELDS = DEFAULT_TOOLTIP_FIELDS; var DEFAULT_LIGHT_SETTINGS = { lightsPosition: [-122.45, 37.66, 8000, -122.0, 38.0, 8000], ambientRatio: 0.4, diffuseRatio: 0.6, specularRatio: 0.3, lightsStrength: [0.9, 0.0, 0.8, 0.0], numberOfLights: 2 }; exports.DEFAULT_LIGHT_SETTINGS = DEFAULT_LIGHT_SETTINGS; var NO_VALUE_COLOR = [147, 147, 147]; exports.NO_VALUE_COLOR = NO_VALUE_COLOR; var LAYER_BLENDINGS = { additive: { blendFunc: ['SRC_ALPHA', 'DST_ALPHA'], blendEquation: 'FUNC_ADD' }, normal: { // reference to // https://limnu.com/webgl-blending-youre-probably-wrong/ blendFunc: ['SRC_ALPHA', 'ONE_MINUS_SRC_ALPHA', 'ONE', 'ONE_MINUS_SRC_ALPHA'], blendEquation: ['FUNC_ADD', 'FUNC_ADD'] }, subtractive: { blendFunc: ['ONE', 'ONE_MINUS_DST_COLOR', 'SRC_ALPHA', 'DST_ALPHA'], blendEquation: ['FUNC_SUBTRACT', 'FUNC_ADD'] } }; exports.LAYER_BLENDINGS = LAYER_BLENDINGS; var MAX_DEFAULT_TOOLTIPS = 5; exports.MAX_DEFAULT_TOOLTIPS = MAX_DEFAULT_TOOLTIPS; var RESOLUTIONS = (0, _keymirror["default"])({ ONE_X: null, TWO_X: null }); exports.RESOLUTIONS = RESOLUTIONS; var RATIOS = (0, _keymirror["default"])({ SCREEN: null, FOUR_BY_THREE: null, SIXTEEN_BY_NINE: null }); exports.RATIOS = RATIOS; var RATIO_OPTIONS = [{ id: RATIOS.SCREEN, label: 'Original Screen', getSize: function getSize(screenW, screenH) { return { width: screenW, height: screenH }; } }, { id: RATIOS.FOUR_BY_THREE, label: '4:3', getSize: function getSize(screenW, screenH) { return { width: screenW, height: Math.round(screenW * 0.75) }; } }, { id: RATIOS.SIXTEEN_BY_NINE, label: '16:9', getSize: function getSize(screenW, screenH) { return { width: screenW, height: Math.round(screenW * 0.5625) }; } }]; exports.RATIO_OPTIONS = RATIO_OPTIONS; var RESOLUTION_OPTIONS = [{ id: RESOLUTIONS.ONE_X, label: '1x', available: true, scale: 1, zoomOffset: Math.log2(1), getSize: function getSize(screenW, screenH) { return { width: screenW, height: screenH }; } }, { id: RESOLUTIONS.TWO_X, label: '2x', available: true, scale: 2, zoomOffset: Math.log2(2), getSize: function getSize(screenW, screenH) { return { width: screenW * 2, height: screenH * 2 }; } }]; exports.RESOLUTION_OPTIONS = RESOLUTION_OPTIONS; var DEFAULT_EXPORT_IMAGE_NAME = 'kepler-gl.png'; exports.DEFAULT_EXPORT_IMAGE_NAME = DEFAULT_EXPORT_IMAGE_NAME; var EXPORT_DATA_TYPE = (0, _keymirror["default"])({ CSV: null // SHAPEFILE: null, // JSON: null, // GEOJSON: null, // TOPOJSON: null }); exports.EXPORT_DATA_TYPE = EXPORT_DATA_TYPE; var EXPORT_DATA_TYPE_OPTIONS = [{ id: EXPORT_DATA_TYPE.CSV, label: 'csv', available: true } // { // id: EXPORT_DATA_TYPE.SHAPEFILE, // label: 'shapefile', // available: false // }, // { // id: EXPORT_DATA_TYPE.JSON, // label: 'json', // available: false // }, // { // id: EXPORT_DATA_TYPE.GEOJSON, // label: 'geojson', // available: false // }, // { // id: EXPORT_DATA_TYPE.TOPOJSON, // label: 'topojson', // available: false // } ]; exports.EXPORT_DATA_TYPE_OPTIONS = EXPORT_DATA_TYPE_OPTIONS; var DEFAULT_UUID_COUNT = 6; exports.DEFAULT_UUID_COUNT = DEFAULT_UUID_COUNT; var DEFAULT_NOTIFICATION_MESSAGE = 'MESSAGE_NOT_PROVIDED'; exports.DEFAULT_NOTIFICATION_MESSAGE = DEFAULT_NOTIFICATION_MESSAGE; var DEFAULT_NOTIFICATION_TYPES = (0, _keymirror["default"])({ info: null, error: null, warning: null, success: null }); exports.DEFAULT_NOTIFICATION_TYPES = DEFAULT_NOTIFICATION_TYPES; var DEFAULT_NOTIFICATION_TOPICS = (0, _keymirror["default"])({ global: null, file: null }); exports.DEFAULT_NOTIFICATION_TOPICS = DEFAULT_NOTIFICATION_TOPICS; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25zdGFudHMvZGVmYXVsdC1zZXR0aW5ncy5qcyJdLCJuYW1lcyI6WyJBQ1RJT05fUFJFRklYIiwiQ0xPVURGUk9OVCIsIklDT05fUFJFRklYIiwiTEFZRVJfQ09ORklHX0lEIiwiREFUQV9UQUJMRV9JRCIsIkRFTEVURV9EQVRBX0lEIiwiQUREX0RBVEFfSUQiLCJFWFBPUlRfSU1BR0VfSUQiLCJFWFBPUlRfREFUQV9JRCIsIkVYUE9SVF9DT05GSUdfSUQiLCJBRERfTUFQX1NUWUxFX0lEIiwiQUREX0VYVEVSTkFMX0RBVEFfSUQiLCJLRVBMRVJfR0xfTkFNRSIsIktFUExFUl9HTF9WRVJTSU9OIiwiS0VQTEVSX0dMX1dFQlNJVEUiLCJESU1FTlNJT05TIiwic2lkZVBhbmVsIiwid2lkdGgiLCJtYXJnaW4iLCJ0b3AiLCJsZWZ0IiwiYm90dG9tIiwicmlnaHQiLCJoZWFkZXJIZWlnaHQiLCJtYXBDb250cm9sIiwicGFkZGluZyIsIlBBTkVMUyIsImlkIiwibGFiZWwiLCJpY29uQ29tcG9uZW50IiwiTGF5ZXJzIiwiV2lkZ2V0cyIsIkZpbHRlckZ1bm5lbCIsIkN1cnNvckNsaWNrIiwiU2V0dGluZ3MiLCJQQU5FTFNfRk9PVEVSIiwiaWNvbiIsIkRFRkFVTFRfTEFZRVJfR1JPVVBTIiwic2x1ZyIsImZpbHRlciIsIm1hdGNoIiwiZGVmYXVsdFZpc2liaWxpdHkiLCJERUZBVUxUX01BUF9TVFlMRVMiLCJ1cmwiLCJsYXllckdyb3VwcyIsIkdFT0pTT05fRklFTERTIiwiZ2VvanNvbiIsIklDT05fRklFTERTIiwiVFJJUF9QT0lOVF9GSUVMRFMiLCJUUklQX0FSQ19GSUVMRFMiLCJsYXQwIiwibG5nMCIsImxhdDEiLCJsbmcxIiwiU0NBTEVfVFlQRVMiLCJvcmRpbmFsIiwicXVhbnRpbGUiLCJxdWFudGl6ZSIsImxpbmVhciIsInNxcnQiLCJwb2ludCIsIlNDQUxFX0ZVTkMiLCJyZXF1aXJlIiwic2NhbGVMaW5lYXIiLCJzY2FsZVF1YW50aXplIiwic2NhbGVRdWFudGlsZSIsInNjYWxlT3JkaW5hbCIsInNjYWxlU3FydCIsInNjYWxlUG9pbnQiLCJBTExfRklFTERfVFlQRVMiLCJkYXRlIiwiaW50ZWdlciIsInJlYWwiLCJzdHJpbmciLCJ0aW1lc3RhbXAiLCJPUkFOR0UiLCJQSU5LIiwiUFVSUExFIiwiQkxVRSIsIkJMVUUyIiwiQkxVRTMiLCJHUkVFTiIsIlJFRCIsIkZJRUxEX0NPTE9SUyIsIkZJTEVEX1RZUEVfRElTUExBWSIsImNvbG9yIiwiZGVmYXVsdEZvcm1hdCIsImQiLCJGSUVMRF9ESVNQTEFZX0ZPUk1BVCIsIlN0cmluZyIsIkNIQU5ORUxfU0NBTEVTIiwicmFkaXVzIiwic2l6ZSIsImNvbG9yQWdnciIsInNpemVBZ2dyIiwiQUdHUkVHQVRJT05fVFlQRVMiLCJjb3VudCIsImF2ZXJhZ2UiLCJtYXhpbXVtIiwibWluaW11bSIsIm1lZGlhbiIsInN1bSIsIm1vZGUiLCJjb3VudFVuaXF1ZSIsImxpbmVhckZpZWxkU2NhbGVGdW5jdGlvbnMiLCJsaW5lYXJGaWVsZEFnZ3JTY2FsZUZ1bmN0aW9ucyIsIm9yZGluYWxGaWVsZFNjYWxlRnVuY3Rpb25zIiwib3JkaW5hbEZpZWxkQWdnclNjYWxlRnVuY3Rpb25zIiwibm90U3VwcG9ydGVkU2NhbGVPcHRzIiwibm90U3VwcG9ydEFnZ3JPcHRzIiwiREVGQVVMVF9BR0dSRUdBVElPTiIsIkZJRUxEX09QVFMiLCJ0eXBlIiwic2NhbGUiLCJmb3JtYXQiLCJsZWdlbmQiLCJDSEFOTkVMX1NDQUxFX1NVUFBPUlRFRF9GSUVMRFMiLCJPYmplY3QiLCJrZXlzIiwicmVkdWNlIiwiYWNjdSIsImtleSIsImZ0IiwibGVuZ3RoIiwiTEFZRVJfVFlQRVMiLCJhcmMiLCJjbHVzdGVyIiwibGluZSIsImdyaWQiLCJoZWF0bWFwIiwiaGV4YWdvbiIsIkRFRkFVTFRfTEFZRVJfQ09MT1IiLCJ0cmlwQXJjIiwiYmVnaW50cmlwX2xhdCIsImRyb3BvZmZfbGF0IiwicmVxdWVzdF9sYXQiLCJERUZBVUxUX1RPT0xUSVBfRklFTERTIiwiREVGQVVMVF9MSUdIVF9TRVRUSU5HUyIsImxpZ2h0c1Bvc2l0aW9uIiwiYW1iaWVudFJhdGlvIiwiZGlmZnVzZVJhdGlvIiwic3BlY3VsYXJSYXRpbyIsImxpZ2h0c1N0cmVuZ3RoIiwibnVtYmVyT2ZMaWdodHMiLCJOT19WQUxVRV9DT0xPUiIsIkxBWUVSX0JMRU5ESU5HUyIsImFkZGl0aXZlIiwiYmxlbmRGdW5jIiwiYmxlbmRFcXVhdGlvbiIsIm5vcm1hbCIsInN1YnRyYWN0aXZlIiwiTUFYX0RFRkFVTFRfVE9PTFRJUFMiLCJSRVNPTFVUSU9OUyIsIk9ORV9YIiwiVFdPX1giLCJSQVRJT1MiLCJTQ1JFRU4iLCJGT1VSX0JZX1RIUkVFIiwiU0lYVEVFTl9CWV9OSU5FIiwiUkFUSU9fT1BUSU9OUyIsImdldFNpemUiLCJzY3JlZW5XIiwic2NyZWVuSCIsImhlaWdodCIsIk1hdGgiLCJyb3VuZCIsIlJFU09MVVRJT05fT1BUSU9OUyIsImF2YWlsYWJsZSIsInpvb21PZmZzZXQiLCJsb2cyIiwiREVGQVVMVF9FWFBPUlRfSU1BR0VfTkFNRSIsIkVYUE9SVF9EQVRBX1RZUEUiLCJDU1YiLCJFWFBPUlRfREFUQV9UWVBFX09QVElPTlMiLCJERUZBVUxUX1VVSURfQ09VTlQiLCJERUZBVUxUX05PVElGSUNBVElPTl9NRVNTQUdFIiwiREVGQVVMVF9OT1RJRklDQVRJT05fVFlQRVMiLCJpbmZvIiwiZXJyb3IiLCJ3YXJuaW5nIiwic3VjY2VzcyIsIkRFRkFVTFRfTk9USUZJQ0FUSU9OX1RPUElDUyIsImdsb2JhbCIsImZpbGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBb0JBOztBQWlCQTs7Ozs7Ozs7QUFmTyxJQUFNQSxhQUFhLEdBQUcsY0FBdEI7O0FBQ0EsSUFBTUMsVUFBVSxHQUFHLGlEQUFuQjs7QUFDQSxJQUFNQyxXQUFXLGFBQU1ELFVBQU4sYUFBakIsQyxDQUVQOzs7QUFDTyxJQUFNRSxlQUFlLEdBQUcsWUFBeEI7O0FBQ0EsSUFBTUMsYUFBYSxHQUFHLFdB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QywwQkFBMEIsR0FBRywyQkFBVTtBQUNsREMsRUFBQUEsSUFBSSxFQUFFLElBRDRDO0FBRWxEQyxFQUFBQSxLQUFLLEVBQUUsSUFGMkM7QUFHbERDLEVBQUFBLE9BQU8sRUFBRSxJQUh5QztBQUlsREMsRUFBQUEsT0FBTyxFQUFFO0FBSnlDLENBQVYsQ0FBbkM7O0FBT0EsSUFBTUMsMkJBQTJCLEdBQUcsMkJBQVU7QUFDbkRDLEVBQUFBLE1BQU0sRUFBRSxJQUQyQztBQUVuREMsRUFBQUEsSUFBSSxFQUFFO0FBRjZDLENBQVYsQ0FBcEMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMTkgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQga2V5TWlycm9yIGZyb20gJ2tleW1pcnJvcic7XG5cbmV4cG9ydCBjb25zdCBBQ1RJT05fUFJFRklYID0gJ0BAa2VwbGVyLmdsLyc7XG5leHBvcnQgY29uc3QgQ0xPVURGUk9OVCA9ICdodHRwczovL2QxYTNmNHNwYXp6cnA0LmNsb3VkZnJvbnQubmV0L2tlcGxlci5nbCc7XG5leHBvcnQgY29uc3QgSUNPTl9QUkVGSVggPSBgJHtDTE9VREZST05UfS9nZW9kdWRlYDtcblxuLy8gTW9kYWwgSWRzXG5leHBvcnQgY29uc3QgTEFZRVJfQ09ORklHX0lEID0gJ2NvcHlDb25maWcnO1xuZXhwb3J0IGNvbnN0IERBVEFfVEFCTEVfSUQgPSAnZGF0YVRhYmxlJztcbmV4cG9ydCBjb25zdCBERUxFVEVfREFUQV9JRCA9ICdkZWxldGVEYXRhJztcbmV4cG9ydCBjb25zdCBBRERfREFUQV9JRCA9ICdhZGREYXRhJztcbmV4cG9ydCBjb25zdCBFWFBPUlRfSU1BR0VfSUQgPSAnZXhwb3J0SW1hZ2UnO1xuZXhwb3J0IGNvbnN0IEVYUE9SVF9EQVRBX0lEID0gJ2V4cG9ydERhdGEnO1xuZXhwb3J0IGNvbnN0IEVYUE9SVF9DT05GSUdfSUQgPSAnZXhwb3J0Q29uZmlnJztcbmV4cG9ydCBjb25zdCBBRERfTUFQX1NUWUxFX0lEID0gJ2FkZE1hcFN0eWxlJztcbmV4cG9ydCBjb25zdCBBRERfRVhURVJOQUxfREFUQV9JRCA9ICdhZGRFeHRlcm5hbERhdGEnO1xuXG5pbXBvcnQge1xuICBMYXllcnMsXG4gIEZpbHRlckZ1bm5lbCxcbiAgU2V0dGluZ3MsXG4gIFdpZGdldHMsXG4gIEN1cnNvckNsaWNrXG59IGZyb20gJ2NvbXBvbmVudHMvY29tbW9uL2ljb25zJztcblxuZXhwb3J0IGNvbnN0IEtFUExFUl9HTF9OQU1FID0gJ3wwfC5nbCc7XG5leHBvcnQgY29uc3QgS0VQTEVSX0dMX1ZFUlNJT04gPSAndjEuMCc7XG5leHBvcnQgY29uc3QgS0VQTEVSX0dMX1dFQlNJVEUgPSAnaHR0cHM6Ly92aXouZ2VvaXEuaW8vJztcblxuZXhwb3J0IGNvbnN0IERJTUVOU0lPTlMgPSB7XG4gIHNpZGVQYW5lbDoge1xuICAgIHdpZHRoOiAzMDAsXG4gICAgbWFyZ2luOiB7dG9wOiAyMCwgbGVmdDogMjAsIGJvdHRvbTogMzAsIHJpZ2h0OiAyMH0sXG4gICAgaGVhZGVySGVpZ2h0OiA5NlxuICB9LFxuICBtYXBDb250cm9sOiB7XG4gICAgd2lkdGg6IDIwNCxcbiAgICBwYWRkaW5nOiAxMlxuICB9XG59O1xuXG5leHBvcnQgY29uc3QgUEFORUxTID0gW1xuICB7XG4gICAgaWQ6ICdsYXllcicsXG4gICAgbGFiZWw6ICdMYXllcnMnLFxuICAgIGljb25Db21wb25lbnQ6IExheWVyc1xuICB9LFxuICB7XG4gICAgaWQ6ICd3aWRnZXQnLFxuICAgIGxhYmVsOiAnV2lkZ2V0cycsXG4gICAgaWNvbkNvbXBvbmVudDogV2lkZ2V0c1xuICB9LFxuICB7XG4gICAgaWQ6ICdmaWx0ZXInLFxuICAgIGxhYmVsOiAnRmlsdGVycycsXG4gICAgaWNvbkNvbXBvbmVudDogRmlsdGVyRnVubmVsXG4gIH0sXG4gIHtcbiAgICBpZDogJ2ludGVyYWN0aW9uJyxcbiAgICBsYWJlbDogJ0ludGVyYWN0aW9ucycsXG4gICAgaWNvbkNvbXBvbmVudDogQ3Vyc29yQ2xpY2tcbiAgfSxcbiAge1xuICAgIGlkOiAnbWFwJyxcbiAgICBsYWJlbDogJ0Jhc2UgbWFwJyxcbiAgICBpY29uQ29tcG9uZW50OiBTZXR0aW5nc1xuICB9XG5dO1xuXG5leHBvcnQgY29uc3QgUEFORUxTX0ZPT1RFUiA9IFtcbiAge1xuICAgIGlkOiBMQVlFUl9DT05GSUdfSUQsXG4gICAgbGFiZWw6ICdDb3B5IENvbmZpZycsXG4gICAgaWNvbjogJ2NsaXBib2FyZCdcbiAgfVxuXTtcblxuLy8gTUFQIFNUWUxFU1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9MQVlFUl9HUk9VUFMgPSBbXG4gIHtcbiAgICBzbHVnOiAnbGFiZWwnLFxuICAgIGZpbHRlcjogKHtpZH0pID0+IGlkLm1hdGNoKC8oPz0obGFiZWx8cGxhY2UtfHBvaS0pKS8pLFxuICAgIGRlZmF1bHRWaXNpYmlsaXR5OiB0cnVlXG4gIH0sXG4gIHtcbiAgICBzbHVnOiAncm9hZCcsXG4gICAgZmlsdGVyOiAoe2lkfSkgPT5cbiAgICAgIGlkLm1hdGNoKC8oPz0ocm9hZHxyYWlsd2F5fHR1bm5lbHxzdHJlZXR8YnJpZGdlKSkoPyEuKmxhYmVsKS8pLFxuICAgIGRlZmF1bHRWaXNpYmlsaXR5OiB0cnVlXG4gIH0sXG4gIHtcbiAgICBzbHVnOiAnYm9yZGVyJyxcbiAgICBmaWx0ZXI6ICh7aWR9KSA9PiBpZC5tYXRjaCgvYm9yZGVyfGJvdW5kYXJpZXMvKSxcbiAgICBkZWZhdWx0VmlzaWJpbGl0eTogZmFsc2VcbiAgfSxcbiAge1xuICAgIHNsdWc6ICdidWlsZGluZycsXG4gICAgZmlsdGVyOiAoe2lkfSkgPT4gaWQubWF0Y2goL2J1aWxkaW5nLyksXG4gICAgZGVmYXVsdFZpc2liaWxpdHk6IHRydWVcbiAgfSxcbiAge1xuICAgIHNsdWc6ICd3YXRlcicsXG4gICAgZmlsdGVyOiAoe2lkfSkgPT4gaWQubWF0Y2goLyg/PSh3YXRlcnxzdHJlYW18ZmVycnkpKS8pLFxuICAgIGRlZmF1bHRWaXNpYmlsaXR5OiB0cnVlXG4gIH0sXG4gIHtcbiAgICBzbHVnOiAnbGFuZCcsXG4gICAgZmlsdGVyOiAoe2lkfSkgPT5cbiAgICAgIGlkLm1hdGNoKC8oPz0ocGFya3N8bGFuZGNvdmVyfGluZHVzdHJpYWx8c2FuZHxoaWxsc2hhZGUpKS8pLFxuICAgIGRlZmF1bHRWaXNpYmlsaXR5OiB0cnVlXG4gIH0sXG4gIHtcbiAgICBzbHVnOiAnM2QgYnVpbGRpbmcnLFxuICAgIGZpbHRlcjogKCkgPT4gZmFsc2UsXG4gICAgZGVmYXVsdFZpc2liaWxpdHk6IGZhbHNlXG4gIH1cbl07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX01BUF9TVFlMRVMgPSBbXG4gIHtcbiAgICBpZDogJ2RhcmsnLFxuICAgIGxhYmVsOiAnRGFyaycsXG4gICAgdXJsOiAnbWFwYm94Oi8vc3R5bGVzL3ViZXJkYXRhL2Nqb3FiYmY2bDlrMzAyc2w5NnR5dmthMDknLFxuICAgIGljb246IGAke0lDT05fUFJFRklYfS9VQkVSX0RBUktfVjIucG5nYCxcbiAgICBsYXllckdyb3VwczogREVGQVVMVF9MQVlFUl9HUk9VUFNcbiAgfSxcbiAge1xuICAgIGlkOiAnbGlnaHQnLFxuICAgIGxhYmVsOiAnTGlnaHQnLFxuICAgIHVybDogJ21hcGJveDovL3N0eWxlcy91YmVyZGF0YS9jam9xYjlqMzM5azFmMnNsOXQ1aWM1Ym40JyxcbiAgICBpY29uOiBgJHtJQ09OX1BSRUZJWH0vVUJFUl9MSUdIVF9WMi5wbmdgLFxuICAgIGxheWVyR3JvdXBzOiBERUZBVUxUX0xBWUVSX0dST1VQU1xuICB9LFxuICB7XG4gICAgaWQ6ICdkYXJrJyxcbiAgICBsYWJlbDogJ0RhcmsnLFxuICAgIHVybDogJ21hcGJveDovL3N0eWxlcy91YmVyZGF0YS9jam9xYmJmNmw5azMwMnNsOTZ0eXZrYTA5JyxcbiAgICBpY29uOiBgJHtJQ09OX1BSRUZJWH0vVUJFUl9EQVJLX1YyLnBuZ2AsXG4gICAgbGF5ZXJHcm91cHM6IERFRkFVTFRfTEFZRVJfR1JPVVBTXG4gIH0sXG4gIHtcbiAgICBpZDogJ211dGVkJyxcbiAgICBsYWJlbDogJ011dGVkIExpZ2h0JyxcbiAgICB1c