UNPKG

kepler.gl

Version:

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

167 lines (150 loc) 15.9 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.set3dBuildingColor = exports.loadCustomMapStyle = exports.mapStyleChange = exports.loadMapStyleErr = exports.loadMapStyles = exports.requestMapStyles = exports.mapConfigChange = exports.inputMapStyle = exports.addCustomMapStyle = void 0; var _reduxActions = require("redux-actions"); var _actionTypes = _interopRequireDefault(require("../constants/action-types")); // Copyright (c) 2021 Uber Technologies, Inc. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. /** * Add map style from user input to reducer and set it to current style * This action is called when user click confirm after putting in a valid style url in the custom map style dialog. * It should not be called from outside kepler.gl without a valid `inputStyle` in the `mapStyle` reducer. * param {void} * @memberof mapStyleActions * @type {typeof import('./map-style-actions').addCustomMapStyle} * @public */ var addCustomMapStyle = (0, _reduxActions.createAction)(_actionTypes["default"].ADD_CUSTOM_MAP_STYLE); /** * Input a custom map style object * @memberof mapStyleActions * @param inputStyle * @param inputStyle.url - style url e.g. `'mapbox://styles/heshan/xxxxxyyyyzzz'` * @param inputStyle.id - style id e.g. `'custom_style_1'` * @param inputStyle.style - actual mapbox style json * @param inputStyle.label - style name * @param inputStyle.accessToken - mapbox access token * @param inputStyle.icon - icon image data url * @param [mapState] - mapState is optional * @type {typeof import('./map-style-actions').inputMapStyle} * @public */ exports.addCustomMapStyle = addCustomMapStyle; var inputMapStyle = (0, _reduxActions.createAction)(_actionTypes["default"].INPUT_MAP_STYLE, function (inputStyle, mapState) { return { inputStyle: inputStyle, mapState: mapState }; }); /** * Update `visibleLayerGroups`to change layer group visibility * @memberof mapStyleActions * @param mapStyle new config `{visibleLayerGroups: {label: false, road: true, background: true}}` * @type {typeof import('./map-style-actions').mapConfigChange} * @public */ exports.inputMapStyle = inputMapStyle; var mapConfigChange = (0, _reduxActions.createAction)(_actionTypes["default"].MAP_CONFIG_CHANGE, function (mapStyle) { return mapStyle; }); /** * Request map style style object based on style.url. * @memberof mapStyleActions * @type {typeof import('./map-style-actions').requestMapStyles} * @public */ exports.mapConfigChange = mapConfigChange; var requestMapStyles = (0, _reduxActions.createAction)(_actionTypes["default"].REQUEST_MAP_STYLES, function (mapStyles) { return mapStyles; }); /** * Callback when load map style success * @memberof mapStyleActions * @param newStyles a `{[id]: style}` mapping * @type {typeof import('./map-style-actions').loadMapStyles} * @public */ exports.requestMapStyles = requestMapStyles; var loadMapStyles = (0, _reduxActions.createAction)(_actionTypes["default"].LOAD_MAP_STYLES, function (newStyles) { return newStyles; }); /** * Callback when load map style error * @memberof mapStyleActions * @param error * @type {typeof import('./map-style-actions').loadMapStyleErr} * @public */ exports.loadMapStyles = loadMapStyles; var loadMapStyleErr = (0, _reduxActions.createAction)(_actionTypes["default"].LOAD_MAP_STYLE_ERR, function (error) { return error; }); /** * Change to another map style. The selected style should already been loaded into `mapStyle.mapStyles` * @memberof mapStyleActions * @param styleType the style to change to * @type {typeof import('./map-style-actions').mapStyleChange} * @public */ exports.loadMapStyleErr = loadMapStyleErr; var mapStyleChange = (0, _reduxActions.createAction)(_actionTypes["default"].MAP_STYLE_CHANGE, function (styleType) { return styleType; }); /** * Callback when a custom map style object is received * @memberof mapStyleActions * @param customMapStyle * @param customMapStyle.icon * @param customMapStyle.style * @param customMapStyle.error * @type {typeof import('./map-style-actions').loadCustomMapStyle} * @public */ exports.mapStyleChange = mapStyleChange; var loadCustomMapStyle = (0, _reduxActions.createAction)(_actionTypes["default"].LOAD_CUSTOM_MAP_STYLE, function (customMapStyle) { return customMapStyle; }); // SET_3D_BUILDING_COLOR /** * Set 3d building layer group color * @memberof mapStyleActions * @param color - [r, g, b] * @type {typeof import('./map-style-actions').set3dBuildingColor} * @public */ exports.loadCustomMapStyle = loadCustomMapStyle; var set3dBuildingColor = (0, _reduxActions.createAction)(_actionTypes["default"].SET_3D_BUILDING_COLOR, function (color) { return color; }); /** * Actions handled mostly by `mapStyle` reducer. * They manage the display of base map, such as loading and receiving base map styles, * hiding and showing map layers, user input of custom map style url. * * @public */ /* eslint-disable no-unused-vars */ // @ts-ignore exports.set3dBuildingColor = set3dBuildingColor; var mapStyleActions = null; /* eslint-enable no-unused-vars */ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hY3Rpb25zL21hcC1zdHlsZS1hY3Rpb25zLmpzIl0sIm5hbWVzIjpbImFkZEN1c3RvbU1hcFN0eWxlIiwiQWN0aW9uVHlwZXMiLCJBRERfQ1VTVE9NX01BUF9TVFlMRSIsImlucHV0TWFwU3R5bGUiLCJJTlBVVF9NQVBfU1RZTEUiLCJpbnB1dFN0eWxlIiwibWFwU3RhdGUiLCJtYXBDb25maWdDaGFuZ2UiLCJNQVBfQ09ORklHX0NIQU5HRSIsIm1hcFN0eWxlIiwicmVxdWVzdE1hcFN0eWxlcyIsIlJFUVVFU1RfTUFQX1NUWUxFUyIsIm1hcFN0eWxlcyIsImxvYWRNYXBTdHlsZXMiLCJMT0FEX01BUF9TVFlMRVMiLCJuZXdTdHlsZXMiLCJsb2FkTWFwU3R5bGVFcnIiLCJMT0FEX01BUF9TVFlMRV9FUlIiLCJlcnJvciIsIm1hcFN0eWxlQ2hhbmdlIiwiTUFQX1NUWUxFX0NIQU5HRSIsInN0eWxlVHlwZSIsImxvYWRDdXN0b21NYXBTdHlsZSIsIkxPQURfQ1VTVE9NX01BUF9TVFlMRSIsImN1c3RvbU1hcFN0eWxlIiwic2V0M2RCdWlsZGluZ0NvbG9yIiwiU0VUXzNEX0JVSUxESU5HX0NPTE9SIiwiY29sb3IiLCJtYXBTdHlsZUFjdGlvbnMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQW9CQTs7QUFDQTs7QUFyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTUEsaUJBQWlCLEdBQUcsZ0NBQWFDLHdCQUFZQyxvQkFBekIsQ0FBMUI7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDTyxJQUFNQyxhQUFhLEdBQUcsZ0NBQWFGLHdCQUFZRyxlQUF6QixFQUEwQyxVQUFDQyxVQUFELEVBQWFDLFFBQWI7QUFBQSxTQUEyQjtBQUNoR0QsSUFBQUEsVUFBVSxFQUFWQSxVQURnRztBQUVoR0MsSUFBQUEsUUFBUSxFQUFSQTtBQUZnRyxHQUEzQjtBQUFBLENBQTFDLENBQXRCO0FBS1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNPLElBQU1DLGVBQWUsR0FBRyxnQ0FBYU4sd0JBQVlPLGlCQUF6QixFQUE0QyxVQUFBQyxRQUFRO0FBQUEsU0FBSUEsUUFBSjtBQUFBLENBQXBELENBQXhCO0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDTyxJQUFNQyxnQkFBZ0IsR0FBRyxnQ0FDOUJULHdCQUFZVSxrQkFEa0IsRUFFOUIsVUFBQUMsU0FBUztBQUFBLFNBQUlBLFNBQUo7QUFBQSxDQUZxQixDQUF6QjtBQUlQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDTyxJQUFNQyxhQUFhLEdBQUcsZ0NBQWFaLHdCQUFZYSxlQUF6QixFQUEwQyxVQUFBQyxTQUFTO0FBQUEsU0FBSUEsU0FBSjtBQUFBLENBQW5ELENBQXRCO0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNPLElBQU1DLGVBQWUsR0FBRyxnQ0FBYWYsd0JBQVlnQixrQkFBekIsRUFBNkMsVUFBQUMsS0FBSztBQUFBLFNBQUlBLEtBQUo7QUFBQSxDQUFsRCxDQUF4QjtBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDTyxJQUFNQyxjQUFjLEdBQUcsZ0NBQWFsQix3QkFBWW1CLGdCQUF6QixFQUEyQyxVQUFBQyxTQUFTO0FBQUEsU0FBSUEsU0FBSjtBQUFBLENBQXBELENBQXZCO0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNPLElBQU1DLGtCQUFrQixHQUFHLGdDQUNoQ3JCLHdCQUFZc0IscUJBRG9CLEVBRWhDLFVBQUFDLGNBQWM7QUFBQSxTQUFJQSxjQUFKO0FBQUEsQ0FGa0IsQ0FBM0IsQyxDQUtQOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDTyxJQUFNQyxrQkFBa0IsR0FBRyxnQ0FBYXhCLHdCQUFZeUIscUJBQXpCLEVBQWdELFVBQUFDLEtBQUs7QUFBQSxTQUFJQSxLQUFKO0FBQUEsQ0FBckQsQ0FBM0I7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQTtBQUNBOzs7QUFDQSxJQUFNQyxlQUFlLEdBQUcsSUFBeEI7QUFDQSIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAyMSBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCB7Y3JlYXRlQWN0aW9ufSBmcm9tICdyZWR1eC1hY3Rpb25zJztcbmltcG9ydCBBY3Rpb25UeXBlcyBmcm9tICdjb25zdGFudHMvYWN0aW9uLXR5cGVzJztcblxuLyoqXG4gKiBBZGQgbWFwIHN0eWxlIGZyb20gdXNlciBpbnB1dCB0byByZWR1Y2VyIGFuZCBzZXQgaXQgdG8gY3VycmVudCBzdHlsZVxuICogVGhpcyBhY3Rpb24gaXMgY2FsbGVkIHdoZW4gdXNlciBjbGljayBjb25maXJtIGFmdGVyIHB1dHRpbmcgaW4gYSB2YWxpZCBzdHlsZSB1cmwgaW4gdGhlIGN1c3RvbSBtYXAgc3R5bGUgZGlhbG9nLlxuICogSXQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZnJvbSBvdXRzaWRlIGtlcGxlci5nbCB3aXRob3V0IGEgdmFsaWQgYGlucHV0U3R5bGVgIGluIHRoZSBgbWFwU3R5bGVgIHJlZHVjZXIuXG4gKiBwYXJhbSB7dm9pZH1cbiAqIEBtZW1iZXJvZiBtYXBTdHlsZUFjdGlvbnNcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL21hcC1zdHlsZS1hY3Rpb25zJykuYWRkQ3VzdG9tTWFwU3R5bGV9XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRDdXN0b21NYXBTdHlsZSA9IGNyZWF0ZUFjdGlvbihBY3Rpb25UeXBlcy5BRERfQ1VTVE9NX01BUF9TVFlMRSk7XG5cbi8qKlxuICogSW5wdXQgYSBjdXN0b20gbWFwIHN0eWxlIG9iamVjdFxuICogQG1lbWJlcm9mIG1hcFN0eWxlQWN0aW9uc1xuICogQHBhcmFtIGlucHV0U3R5bGVcbiAqIEBwYXJhbSBpbnB1dFN0eWxlLnVybCAtIHN0eWxlIHVybCBlLmcuIGAnbWFwYm94Oi8vc3R5bGVzL2hlc2hhbi94eHh4eHl5eXl6enonYFxuICogQHBhcmFtIGlucHV0U3R5bGUuaWQgLSBzdHlsZSBpZCBlLmcuIGAnY3VzdG9tX3N0eWxlXzEnYFxuICogQHBhcmFtIGlucHV0U3R5bGUuc3R5bGUgLSBhY3R1YWwgbWFwYm94IHN0eWxlIGpzb25cbiAqIEBwYXJhbSBpbnB1dFN0eWxlLmxhYmVsIC0gc3R5bGUgbmFtZVxuICogQHBhcmFtIGlucHV0U3R5bGUuYWNjZXNzVG9rZW4gLSBtYXBib3ggYWNjZXNzIHRva2VuXG4gKiBAcGFyYW0gaW5wdXRTdHlsZS5pY29uIC0gaWNvbiBpbWFnZSBkYXRhIHVybFxuICogQHBhcmFtIFttYXBTdGF0ZV0gLSBtYXBTdGF0ZSBpcyBvcHRpb25hbFxuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vbWFwLXN0eWxlLWFjdGlvbnMnKS5pbnB1dE1hcFN0eWxlfVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgaW5wdXRNYXBTdHlsZSA9IGNyZWF0ZUFjdGlvbihBY3Rpb25UeXBlcy5JTlBVVF9NQVBfU1RZTEUsIChpbnB1dFN0eWxlLCBtYXBTdGF0ZSkgPT4gKHtcbiAgaW5wdXRTdHlsZSxcbiAgbWFwU3RhdGVcbn0pKTtcblxuLyoqXG4gKiBVcGRhdGUgYHZpc2libGVMYXllckdyb3Vwc2B0byBjaGFuZ2UgbGF5ZXIgZ3JvdXAgdmlzaWJpbGl0eVxuICogQG1lbWJlcm9mIG1hcFN0eWxlQWN0aW9uc1xuICogQHBhcmFtIG1hcFN0eWxlIG5ldyBjb25maWcgYHt2aXNpYmxlTGF5ZXJHcm91cHM6IHtsYWJlbDogZmFsc2UsIHJvYWQ6IHRydWUsIGJhY2tncm91bmQ6IHRydWV9fWBcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL21hcC1zdHlsZS1hY3Rpb25zJykubWFwQ29uZmlnQ2hhbmdlfVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbWFwQ29uZmlnQ2hhbmdlID0gY3JlYXRlQWN0aW9uKEFjdGlvblR5cGVzLk1BUF9DT05GSUdfQ0hBTkdFLCBtYXBTdHlsZSA9PiBtYXBTdHlsZSk7XG5cbi8qKlxuICogUmVxdWVzdCBtYXAgc3R5bGUgc3R5bGUgb2JqZWN0IGJhc2VkIG9uIHN0eWxlLnVybC5cbiAqIEBtZW1iZXJvZiBtYXBTdHlsZUFjdGlvbnNcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL21hcC1zdHlsZS1hY3Rpb25zJykucmVxdWVzdE1hcFN0eWxlc31cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlcXVlc3RNYXBTdHlsZXMgPSBjcmVhdGVBY3Rpb24oXG4gIEFjdGlvblR5cGVzLlJFUVVFU1RfTUFQX1NUWUxFUyxcbiAgbWFwU3R5bGVzID0+IG1hcFN0eWxlc1xuKTtcbi8qKlxuICogQ2FsbGJhY2sgd2hlbiBsb2FkIG1hcCBzdHlsZSBzdWNjZXNzXG4gKiBAbWVtYmVyb2YgbWFwU3R5bGVBY3Rpb25zXG4gKiBAcGFyYW0gbmV3U3R5bGVzIGEgYHtbaWRdOiBzdHlsZX1gIG1hcHBpbmdcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL21hcC1zdHlsZS1hY3Rpb25zJykubG9hZE1hcFN0eWxlc31cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxvYWRNYXBTdHlsZXMgPSBjcmVhdGVBY3Rpb24oQWN0aW9uVHlwZXMuTE9BRF9NQVBfU1RZTEVTLCBuZXdTdHlsZXMgPT4gbmV3U3R5bGVzKTtcblxuLyoqXG4gKiBDYWxsYmFjayB3aGVuIGxvYWQgbWFwIHN0eWxlIGVycm9yXG4gKiBAbWVtYmVyb2YgbWFwU3R5bGVBY3Rpb25zXG4gKiBAcGFyYW0gZXJyb3JcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL21hcC1zdHlsZS1hY3Rpb25zJykubG9hZE1hcFN0eWxlRXJyfVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbG9hZE1hcFN0eWxlRXJyID0gY3JlYXRlQWN0aW9uKEFjdGlvblR5cGVzLkxPQURfTUFQX1NUWUxFX0VSUiwgZXJyb3IgPT4gZXJyb3IpO1xuXG4vKipcbiAqIENoYW5nZSB0byBhbm90aGVyIG1hcCBzdHlsZS4gVGhlIHNlbGVjdGVkIHN0eWxlIHNob3VsZCBhbHJlYWR5IGJlZW4gbG9hZGVkIGludG8gYG1hcFN0eWxlLm1hcFN0eWxlc2BcbiAqIEBtZW1iZXJvZiBtYXBTdHlsZUFjdGlvbnNcbiAqIEBwYXJhbSBzdHlsZVR5cGUgdGhlIHN0eWxlIHRvIGNoYW5nZSB0b1xuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vbWFwLXN0eWxlLWFjdGlvbnMnKS5tYXBTdHlsZUNoYW5nZX1cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IG1hcFN0eWxlQ2hhbmdlID0gY3JlYXRlQWN0aW9uKEFjdGlvblR5cGVzLk1BUF9TVFlMRV9DSEFOR0UsIHN0eWxlVHlwZSA9PiBzdHlsZVR5cGUpO1xuXG4vKipcbiAqIENhbGxiYWNrIHdoZW4gYSBjdXN0b20gbWFwIHN0eWxlIG9iamVjdCBpcyByZWNlaXZlZFxuICogQG1lbWJlcm9mIG1hcFN0eWxlQWN0aW9uc1xuICogQHBhcmFtIGN1c3RvbU1hcFN0eWxlXG4gKiBAcGFyYW0gY3VzdG9tTWFwU3R5bGUuaWNvblxuICogQHBhcmFtIGN1c3RvbU1hcFN0eWxlLnN0eWxlXG4gKiBAcGFyYW0gY3VzdG9tTWFwU3R5bGUuZXJyb3JcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL21hcC1zdHlsZS1hY3Rpb25zJykubG9hZEN1c3RvbU1hcFN0eWxlfVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbG9hZEN1c3RvbU1hcFN0eWxlID0gY3JlYXRlQWN0aW9uKFxuICBBY3Rpb25UeXBlcy5MT0FEX0NVU1RPTV9NQVBfU1RZTEUsXG4gIGN1c3RvbU1hcFN0eWxlID0+IGN1c3RvbU1hcFN0eWxlXG4pO1xuXG4vLyBTRVRfM0RfQlVJTERJTkdfQ09MT1Jcbi8qKlxuICogU2V0IDNkIGJ1aWxkaW5nIGxheWVyIGdyb3VwIGNvbG9yXG4gKiBAbWVtYmVyb2YgbWFwU3R5bGVBY3Rpb25zXG4gKiBAcGFyYW0gY29sb3IgLSBbciwgZywgYl1cbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL21hcC1zdHlsZS1hY3Rpb25zJykuc2V0M2RCdWlsZGluZ0NvbG9yfVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0M2RCdWlsZGluZ0NvbG9yID0gY3JlYXRlQWN0aW9uKEFjdGlvblR5cGVzLlNFVF8zRF9CVUlMRElOR19DT0xPUiwgY29sb3IgPT4gY29sb3IpO1xuXG4vKipcbiAqIEFjdGlvbnMgaGFuZGxlZCBtb3N0bHkgYnkgIGBtYXBTdHlsZWAgcmVkdWNlci5cbiAqIFRoZXkgbWFuYWdlIHRoZSBkaXNwbGF5IG9mIGJhc2UgbWFwLCBzdWNoIGFzIGxvYWRpbmcgYW5kIHJlY2VpdmluZyBiYXNlIG1hcCBzdHlsZXMsXG4gKiBoaWRpbmcgYW5kIHNob3dpbmcgbWFwIGxheWVycywgdXNlciBpbnB1dCBvZiBjdXN0b20gbWFwIHN0eWxlIHVybC5cbiAqXG4gKiBAcHVibGljXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4vLyBAdHMtaWdub3JlXG5jb25zdCBtYXBTdHlsZUFjdGlvbnMgPSBudWxsO1xuLyogZXNsaW50LWVuYWJsZSBuby11bnVzZWQtdmFycyAqL1xuIl19