UNPKG

kepler.gl.geoiq

Version:

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

362 lines (356 loc) 35.8 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.LAYER_TEXT_CONFIGS = exports.LAYER_VIS_CONFIGS = exports.PROPERTY_GROUPS = void 0; var _keymirror = _interopRequireDefault(require("keymirror")); var _defaultSettings = require("../constants/default-settings"); var _colorRanges = require("../constants/color-ranges"); // Copyright (c) 2019 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. var PROPERTY_GROUPS = (0, _keymirror["default"])({ color: null, stroke: null, radius: null, height: null, // for heatmap aggregation cell: null, precision: null }); exports.PROPERTY_GROUPS = PROPERTY_GROUPS; var LAYER_VIS_CONFIGS = { thickness: { type: 'number', defaultValue: 2, label: 'Stroke Width', isRanged: false, range: [0, 100], step: 0.1, group: PROPERTY_GROUPS.stroke, property: 'thickness' }, strokeWidthRange: { type: 'number', defaultValue: [0, 10], label: 'Stroke Width Range', isRanged: true, range: [0, 200], step: 0.1, group: PROPERTY_GROUPS.stroke, property: 'sizeRange' }, // radius is actually radiusScale in deck.gl radius: { type: 'number', defaultValue: 10, label: 'Radius', isRanged: false, range: [0, 100], step: 0.1, group: PROPERTY_GROUPS.radius, property: 'radius' }, fixedRadius: { defaultValue: false, type: 'boolean', label: 'Fixed Radius to meter', description: 'Map radius to absolute radius in meters, e.g. 5 to 5 meters', group: PROPERTY_GROUPS.radius, property: 'fixedRadius' }, radiusRange: { type: 'number', defaultValue: [0, 50], isRanged: true, range: [0, 500], step: 0.1, label: 'Radius Range', group: PROPERTY_GROUPS.radius, property: 'radiusRange' }, clusterRadius: { type: 'number', label: 'Cluster Size (m)', defaultValue: 40, isRanged: false, range: [1, 500], step: 0.1, group: PROPERTY_GROUPS.radius, property: 'clusterRadius' }, clusterRadiusRange: { type: 'number', label: 'Radius Range (m)', defaultValue: [1, 40], isRanged: true, range: [1, 150], step: 0.1, group: PROPERTY_GROUPS.radius, property: 'radiusRange' }, opacity: { type: 'number', defaultValue: 0.8, label: 'Opacity', isRanged: false, range: [0, 1], step: 0.01, group: PROPERTY_GROUPS.color, property: 'opacity' }, coverage: { type: 'number', defaultValue: 1, label: 'Coverage', isRanged: false, range: [0, 1], step: 0.01, group: PROPERTY_GROUPS.cell, property: 'coverage' }, outline: { type: 'boolean', defaultValue: false, label: 'Draw outline', group: PROPERTY_GROUPS.display, property: 'outline' }, colorRange: { type: 'color-range-select', defaultValue: _colorRanges.DefaultColorRange, label: 'Color range', group: PROPERTY_GROUPS.color, property: 'colorRange' }, targetColor: { type: 'color-select', label: 'Target Color', defaultValue: null, group: PROPERTY_GROUPS.color, property: 'targetColor' }, aggregation: { type: 'select', defaultValue: _defaultSettings.AGGREGATION_TYPES.average, label: 'Color Aggregation', // aggregation options are based on color field types options: Object.keys(_defaultSettings.AGGREGATION_TYPES), group: PROPERTY_GROUPS.color, property: 'colorAggregation', condition: function condition(config) { return config.colorField; } }, sizeAggregation: { type: 'select', defaultValue: _defaultSettings.AGGREGATION_TYPES.average, label: 'Height Aggregation', // aggregation options are based on color field types options: Object.keys(_defaultSettings.AGGREGATION_TYPES), group: PROPERTY_GROUPS.height, property: 'sizeAggregation', condition: function condition(config) { return config.sizeField; } }, heightAggregation: { type: 'select', defaultValue: _defaultSettings.AGGREGATION_TYPES.average, label: 'Height Aggregation', // aggregation options are based on options: Object.keys(_defaultSettings.AGGREGATION_TYPES), group: PROPERTY_GROUPS.color, property: 'heightAggregation', condition: function condition(config) { return config.heightField; } }, percentile: { type: 'number', defaultValue: [0, 100], label: function label(config) { return "Filter by ".concat(config.colorField ? "".concat(config.visConfig.colorAggregation, " ").concat(config.colorField.name) : 'count', " percentile"); }, isRanged: true, range: [0, 100], step: 0.01, group: PROPERTY_GROUPS.color, property: 'percentile', // percentile filter only makes sense with linear aggregation condition: function condition(config) { return config.colorScale !== 'ordinal'; } }, elevationPercentile: { type: 'number', defaultValue: [0, 100], label: function label(config) { return "Filter by ".concat(config.sizeField ? "".concat(config.visConfig.sizeAggregation, " ").concat(config.sizeField.name) : 'count', " percentile"); }, isRanged: true, range: [0, 100], step: 0.01, group: PROPERTY_GROUPS.height, property: 'elevationPercentile', // percentile filter only makes sense with linear aggregation condition: function condition(config) { return config.visConfig.enable3d && (config.colorField || config.sizeField); } }, resolution: { type: 'number', defaultValue: 8, label: 'Resolution range', isRanged: false, range: [0, 13], step: 1, group: PROPERTY_GROUPS.cell, property: 'resolution' }, worldUnitSize: { type: 'number', defaultValue: 1, label: 'World Unit Size', isRanged: false, range: [0, 500], step: 0.0001, group: PROPERTY_GROUPS.cell, property: 'worldUnitSize' }, elevationScale: { type: 'number', defaultValue: 5, label: 'Elevation Scale', isRanged: false, range: [0, 100], step: 0.1, group: PROPERTY_GROUPS.height, property: 'elevationScale' }, elevationRange: { type: 'number', defaultValue: [0, 500], label: 'Height Scale', isRanged: true, range: [0, 1000], step: 0.01, group: PROPERTY_GROUPS.height, property: 'sizeRange' }, coverageRange: { type: 'number', defaultValue: [0, 1], label: 'Coverage Range', isRanged: true, range: [0, 1], step: 0.01, group: PROPERTY_GROUPS.radius, property: 'coverageRange' }, 'hi-precision': { type: 'boolean', defaultValue: false, label: 'High Precision Rendering', group: PROPERTY_GROUPS.precision, property: 'hi-precision', description: 'High precision will result in slower performance' }, enable3d: { type: 'boolean', defaultValue: false, label: 'Height', group: PROPERTY_GROUPS.height, property: 'enable3d', description: 'Click button at top right of the map to switch to 3d view' }, stroked: { type: 'boolean', label: 'Stroke', defaultValue: true, group: PROPERTY_GROUPS.display, property: 'stroked' }, filled: { type: 'boolean', label: 'Fill', defaultValue: false, group: PROPERTY_GROUPS.display, property: 'filled' }, extruded: { type: 'boolean', defaultValue: false, label: 'Enable Polygon Height', group: PROPERTY_GROUPS.display, property: 'extruded' }, wireframe: { type: 'boolean', defaultValue: false, label: 'Show Wireframe', group: PROPERTY_GROUPS.display, property: 'wireframe' }, // used for heatmap weight: { type: 'number', defaultValue: 1, label: 'Weight Intensity', isRanged: false, range: [0.01, 500], step: 0.01, group: PROPERTY_GROUPS.cell, property: 'weight', condition: function condition(config) { return config.weightField; } }, heatmapRadius: { type: 'number', defaultValue: 20, label: 'Radius', isRanged: false, range: [0, 100], step: 0.1, group: PROPERTY_GROUPS.cell, property: 'radius' } }; exports.LAYER_VIS_CONFIGS = LAYER_VIS_CONFIGS; var LAYER_TEXT_CONFIGS = { fontSize: { type: 'number', range: [1, 100], value0: 1, step: 1, isRanged: false, label: 'Font size', showInput: true }, textAnchor: { type: 'select', options: ['start', 'middle', 'end'], multiSelect: false, searchable: false } }; exports.LAYER_TEXT_CONFIGS = LAYER_TEXT_CONFIGS; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sYXllcnMvbGF5ZXItZmFjdG9yeS5qcyJdLCJuYW1lcyI6WyJQUk9QRVJUWV9HUk9VUFMiLCJjb2xvciIsInN0cm9rZSIsInJhZGl1cyIsImhlaWdodCIsImNlbGwiLCJwcmVjaXNpb24iLCJMQVlFUl9WSVNfQ09ORklHUyIsInRoaWNrbmVzcyIsInR5cGUiLCJkZWZhdWx0VmFsdWUiLCJsYWJlbCIsImlzUmFuZ2VkIiwicmFuZ2UiLCJzdGVwIiwiZ3JvdXAiLCJwcm9wZXJ0eSIsInN0cm9rZVdpZHRoUmFuZ2UiLCJmaXhlZFJhZGl1cyIsImRlc2NyaXB0aW9uIiwicmFkaXVzUmFuZ2UiLCJjbHVzdGVyUmFkaXVzIiwiY2x1c3RlclJhZGl1c1JhbmdlIiwib3BhY2l0eSIsImNvdmVyYWdlIiwib3V0bGluZSIsImRpc3BsYXkiLCJjb2xvclJhbmdlIiwiRGVmYXVsdENvbG9yUmFuZ2UiLCJ0YXJnZXRDb2xvciIsImFnZ3JlZ2F0aW9uIiwiQUdHUkVHQVRJT05fVFlQRVMiLCJhdmVyYWdlIiwib3B0aW9ucyIsIk9iamVjdCIsImtleXMiLCJjb25kaXRpb24iLCJjb25maWciLCJjb2xvckZpZWxkIiwic2l6ZUFnZ3JlZ2F0aW9uIiwic2l6ZUZpZWxkIiwiaGVpZ2h0QWdncmVnYXRpb24iLCJoZWlnaHRGaWVsZCIsInBlcmNlbnRpbGUiLCJ2aXNDb25maWciLCJjb2xvckFnZ3JlZ2F0aW9uIiwibmFtZSIsImNvbG9yU2NhbGUiLCJlbGV2YXRpb25QZXJjZW50aWxlIiwiZW5hYmxlM2QiLCJyZXNvbHV0aW9uIiwid29ybGRVbml0U2l6ZSIsImVsZXZhdGlvblNjYWxlIiwiZWxldmF0aW9uUmFuZ2UiLCJjb3ZlcmFnZVJhbmdlIiwic3Ryb2tlZCIsImZpbGxlZCIsImV4dHJ1ZGVkIiwid2lyZWZyYW1lIiwid2VpZ2h0Iiwid2VpZ2h0RmllbGQiLCJoZWF0bWFwUmFkaXVzIiwiTEFZRVJfVEVYVF9DT05GSUdTIiwiZm9udFNpemUiLCJ2YWx1ZTAi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LFFBQVEsRUFBRSxLQUxGO0FBTVJELElBQUFBLEtBQUssRUFBRSxXQU5DO0FBT1JzRCxJQUFBQSxTQUFTLEVBQUU7QUFQSCxHQURzQjtBQVVoQ0MsRUFBQUEsVUFBVSxFQUFFO0FBQ1Z6RCxJQUFBQSxJQUFJLEVBQUUsUUFESTtBQUVWd0IsSUFBQUEsT0FBTyxFQUFFLENBQUMsT0FBRCxFQUFVLFFBQVYsRUFBb0IsS0FBcEIsQ0FGQztBQUdWa0MsSUFBQUEsV0FBVyxFQUFFLEtBSEg7QUFJVkMsSUFBQUEsVUFBVSxFQUFFO0FBSkY7QUFWb0IsQ0FBM0IiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMTkgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQga2V5TWlycm9yIGZyb20gJ2tleW1pcnJvcic7XG5cbmltcG9ydCB7QUdHUkVHQVRJT05fVFlQRVN9IGZyb20gJ2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzJztcbmltcG9ydCB7RGVmYXVsdENvbG9yUmFuZ2V9IGZyb20gJ2NvbnN0YW50cy9jb2xvci1yYW5nZXMnO1xuXG5leHBvcnQgY29uc3QgUFJPUEVSVFlfR1JPVVBTID0ga2V5TWlycm9yKHtcbiAgY29sb3I6IG51bGwsXG4gIHN0cm9rZTogbnVsbCxcbiAgcmFkaXVzOiBudWxsLFxuICBoZWlnaHQ6IG51bGwsXG5cbiAgLy8gZm9yIGhlYXRtYXAgYWdncmVnYXRpb25cbiAgY2VsbDogbnVsbCxcbiAgcHJlY2lzaW9uOiBudWxsXG59KTtcblxuZXhwb3J0IGNvbnN0IExBWUVSX1ZJU19DT05GSUdTID0ge1xuICB0aGlja25lc3M6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBkZWZhdWx0VmFsdWU6IDIsXG4gICAgbGFiZWw6ICdTdHJva2UgV2lkdGgnLFxuICAgIGlzUmFuZ2VkOiBmYWxzZSxcbiAgICByYW5nZTogWzAsIDEwMF0sXG4gICAgc3RlcDogMC4xLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuc3Ryb2tlLFxuICAgIHByb3BlcnR5OiAndGhpY2tuZXNzJ1xuICB9LFxuICBzdHJva2VXaWR0aFJhbmdlOiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgZGVmYXVsdFZhbHVlOiBbMCwgMTBdLFxuICAgIGxhYmVsOiAnU3Ryb2tlIFdpZHRoIFJhbmdlJyxcbiAgICBpc1JhbmdlZDogdHJ1ZSxcbiAgICByYW5nZTogWzAsIDIwMF0sXG4gICAgc3RlcDogMC4xLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuc3Ryb2tlLFxuICAgIHByb3BlcnR5OiAnc2l6ZVJhbmdlJ1xuICB9LFxuICAvLyByYWRpdXMgaXMgYWN0dWFsbHkgcmFkaXVzU2NhbGUgaW4gZGVjay5nbFxuICByYWRpdXM6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBkZWZhdWx0VmFsdWU6IDEwLFxuICAgIGxhYmVsOiAnUmFkaXVzJyxcbiAgICBpc1JhbmdlZDogZmFsc2UsXG4gICAgcmFuZ2U6IFswLCAxMDBdLFxuICAgIHN0ZXA6IDAuMSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLnJhZGl1cyxcbiAgICBwcm9wZXJ0eTogJ3JhZGl1cydcbiAgfSxcbiAgZml4ZWRSYWRpdXM6IHtcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBsYWJlbDogJ0ZpeGVkIFJhZGl1cyB0byBtZXRlcicsXG4gICAgZGVzY3JpcHRpb246ICdNYXAgcmFkaXVzIHRvIGFic29sdXRlIHJhZGl1cyBpbiBtZXRlcnMsIGUuZy4gNSB0byA1IG1ldGVycycsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5yYWRpdXMsXG4gICAgcHJvcGVydHk6ICdmaXhlZFJhZGl1cydcbiAgfSxcbiAgcmFkaXVzUmFuZ2U6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBkZWZhdWx0VmFsdWU6IFswLCA1MF0sXG4gICAgaXNSYW5nZWQ6IHRydWUsXG4gICAgcmFuZ2U6IFswLCA1MDBdLFxuICAgIHN0ZXA6IDAuMSxcbiAgICBsYWJlbDogJ1JhZGl1cyBSYW5nZScsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5yYWRpdXMsXG4gICAgcHJvcGVydHk6ICdyYWRpdXNSYW5nZSdcbiAgfSxcbiAgY2x1c3RlclJhZGl1czoge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGxhYmVsOiAnQ2x1c3RlciBTaXplIChtKScsXG4gICAgZGVmYXVsdFZhbHVlOiA0MCxcbiAgICBpc1JhbmdlZDogZmFsc2UsXG4gICAgcmFuZ2U6IFsxLCA1MDBdLFxuICAgIHN0ZXA6IDAuMSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLnJhZGl1cyxcbiAgICBwcm9wZXJ0eTogJ2NsdXN0ZXJSYWRpdXMnXG4gIH0sXG4gIGNsdXN0ZXJSYWRpdXNSYW5nZToge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGxhYmVsOiAnUmFkaXVzIFJhbmdlIChtKScsXG4gICAgZGVmYXVsdFZhbHVlOiBbMSwgNDBdLFxuICAgIGlzUmFuZ2VkOiB0cnVlLFxuICAgIHJhbmdlOiBbMSwgMTUwXSxcbiAgICBzdGVwOiAwLjEsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5yYWRpdXMsXG4gICAgcHJvcGVydHk6ICdyYWRpdXNSYW5nZSdcbiAgfSxcbiAgb3BhY2l0eToge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogMC44LFxuICAgIGxhYmVsOiAnT3BhY2l0eScsXG4gICAgaXNSYW5nZWQ6IGZhbHNlLFxuICAgIHJhbmdlOiBbMCwgMV0sXG4gICAgc3RlcDogMC4wMSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmNvbG9yLFxuICAgIHByb3BlcnR5OiAnb3BhY2l0eSdcbiAgfSxcbiAgY292ZXJhZ2U6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBkZWZhdWx0VmFsdWU6IDEsXG4gICAgbGFiZWw6ICdDb3ZlcmFnZScsXG4gICAgaXNSYW5nZWQ6IGZhbHNlLFxuICAgIHJhbmdlOiBbMCwgMV0sXG4gICAgc3RlcDogMC4wMSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmNlbGwsXG4gICAgcHJvcGVydHk6ICdjb3ZlcmFnZSdcbiAgfSxcbiAgb3V0bGluZToge1xuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgIGxhYmVsOiAnRHJhdyBvdXRsaW5lJyxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmRpc3BsYXksXG4gICAgcHJvcGVydHk6ICdvdXRsaW5lJ1xuICB9LFxuICBjb2xvclJhbmdlOiB7XG4gICAgdHlwZTogJ2NvbG9yLXJhbmdlLXNlbGVjdCcsXG4gICAgZGVmYXVsdFZhbHVlOiBEZWZhdWx0Q29sb3JSYW5nZSxcbiAgICBsYWJlbDogJ0NvbG9yIHJhbmdlJyxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmNvbG9yLFxuICAgIHByb3BlcnR5OiAnY29sb3JSYW5nZSdcbiAgfSxcbiAgdGFyZ2V0Q29sb3I6IHtcbiAgICB0eXBlOiAnY29sb3Itc2VsZWN0JyxcbiAgICBsYWJlbDogJ1RhcmdldCBDb2xvcicsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuY29sb3IsXG4gICAgcHJvcGVydHk6ICd0YXJnZXRDb2xvcidcbiAgfSxcbiAgYWdncmVnYXRpb246IHtcbiAgICB0eXBlOiAnc2VsZWN0JyxcbiAgICBkZWZhdWx0VmFsdWU6IEFHR1JFR0FUSU9OX1RZUEVTLmF2ZXJhZ2UsXG4gICAgbGFiZWw6ICdDb2xvciBBZ2dyZWdhdGlvbicsXG4gICAgLy8gYWdncmVnYXRpb24gb3B0aW9ucyBhcmUgYmFzZWQgb24gY29sb3IgZmllbGQgdHlwZXNcbiAgICBvcHRpb25zOiBPYmplY3Qua2V5cyhBR0dSRUdBVElPTl9UWVBFUyksXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5jb2xvcixcbiAgICBwcm9wZXJ0eTogJ2NvbG9yQWdncmVnYXRpb24nLFxuICAgIGNvbmRpdGlvbjogY29uZmlnID0+IGNvbmZpZy5jb2xvckZpZWxkXG4gIH0sXG4gIHNpemVBZ2dyZWdhdGlvbjoge1xuICAgIHR5cGU6ICdzZWxlY3QnLFxuICAgIGRlZmF1bHRWYWx1ZTogQUdHUkVHQVRJT05fVFlQRVMuYXZlcmFnZSxcbiAgICBsYWJlbDogJ0hlaWdodCBBZ2dyZWdhdGlvbicsXG4gICAgLy8gYWdncmVnYXRpb24gb3B0aW9ucyBhcmUgYmFzZWQgb24gY29sb3IgZmllbGQgdHlwZXNcbiAgICBvcHRpb25zOiBPYmplY3Qua2V5cyhBR0dSRUdBVElPTl9UWVBFUyksXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5oZWlnaHQsXG4gICAgcHJvcGVydHk6ICdzaXplQWdncmVnYXRpb24nLFxuICAgIGNvbmRpdGlvbjogY29uZmlnID0+IGNvbmZpZy5zaXplRmllbGRcbiAgfSxcbiAgaGVpZ2h0QWdncmVnYXRpb246IHtcbiAgICB0eXBlOiAnc2VsZWN0JyxcbiAgICBkZWZhdWx0VmFsdWU6IEFHR1JFR0FUSU9OX1RZUEVTLmF2ZXJhZ2UsXG4gICAgbGFiZWw6ICdIZWlnaHQgQWdncmVnYXRpb24nLFxuICAgIC8vIGFnZ3JlZ2F0aW9uIG9wdGlvbnMgYXJlIGJhc2VkIG9uXG4gICAgb3B0aW9uczogT2JqZWN0LmtleXMoQUdHUkVHQVRJT05fVFlQRVMpLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuY29sb3IsXG4gICAgcHJvcGVydHk6ICdoZWlnaHRBZ2dyZWdhdGlvbicsXG4gICAgY29uZGl0aW9uOiBjb25maWcgPT4gY29uZmlnLmhlaWdodEZpZWxkXG4gIH0sXG4gIHBlcmNlbnRpbGU6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBkZWZhdWx0VmFsdWU6IFswLCAxMDBdLFxuICAgIGxhYmVsOiBjb25maWcgPT5cbiAgICAgIGBGaWx0ZXIgYnkgJHtcbiAgICAgICAgY29uZmlnLmNvbG9yRmllbGRcbiAgICAgICAgICA/IGAke2NvbmZpZy52aXNDb25maWcuY29sb3JBZ2dyZWdhdGlvbn0gJHtjb25maWcuY29sb3JGaWVsZC5uYW1lfWBcbiAgICAgICAgICA6ICdjb3VudCdcbiAgICAgIH0gcGVyY2VudGlsZWAsXG4gICAgaXNSYW5nZWQ6IHRydWUsXG4gICAgcmFuZ2U6IFswLCAxMDBdLFxuICAgIHN0ZXA6IDAuMDEsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5jb2xvcixcbiAgICBwcm9wZXJ0eTogJ3BlcmNlbnRpbGUnLFxuXG4gICAgLy8gcGVyY2VudGlsZSBmaWx0ZXIgb25seSBtYWtlcyBzZW5zZSB3aXRoIGxpbmVhciBhZ2dyZWdhdGlvblxuICAgIGNvbmRpdGlvbjogY29uZmlnID0+IGNvbmZpZy5jb2xvclNjYWxlICE9PSAnb3JkaW5hbCdcbiAgfSxcbiAgZWxldmF0aW9uUGVyY2VudGlsZToge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogWzAsIDEwMF0sXG4gICAgbGFiZWw6IGNvbmZpZyA9PlxuICAgICAgYEZpbHRlciBieSAke1xuICAgICAgICBjb25maWcuc2l6ZUZpZWxkXG4gICAgICAgICAgPyBgJHtjb25maWcudmlzQ29uZmlnLnNpemVBZ2dyZWdhdGlvbn0gJHtjb25maWcuc2l6ZUZpZWxkLm5hbWV9YFxuICAgICAgICAgIDogJ2NvdW50J1xuICAgICAgfSBwZXJjZW50aWxlYCxcbiAgICBpc1JhbmdlZDogdHJ1ZSxcbiAgICByYW5nZTogWzAsIDEwMF0sXG4gICAgc3RlcDogMC4wMSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmhlaWdodCxcbiAgICBwcm9wZXJ0eTogJ2VsZXZhdGlvblBlcmNlbnRpbGUnLFxuICAgIC8vIHBlcmNlbnRpbGUgZmlsdGVyIG9ubHkgbWFrZXMgc2Vuc2Ugd2l0aCBsaW5lYXIgYWdncmVnYXRpb25cbiAgICBjb25kaXRpb246IGNvbmZpZyA9PlxuICAgICAgY29uZmlnLnZpc0NvbmZpZy5lbmFibGUzZCAmJiAoY29uZmlnLmNvbG9yRmllbGQgfHwgY29uZmlnLnNpemVGaWVsZClcbiAgfSxcbiAgcmVzb2x1dGlvbjoge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogOCxcbiAgICBsYWJlbDogJ1Jlc29sdXRpb24gcmFuZ2UnLFxuICAgIGlzUmFuZ2VkOiBmYWxzZSxcbiAgICByYW5nZTogWzAsIDEzXSxcbiAgICBzdGVwOiAxLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuY2VsbCxcbiAgICBwcm9wZXJ0eTogJ3Jlc29sdXRpb24nXG4gIH0sXG4gIHdvcmxkVW5pdFNpemU6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBkZWZhdWx0VmFsdWU6IDEsXG4gICAgbGFiZWw6ICdXb3JsZCBVbml0IFNpemUnLFxuICAgIGlzUmFuZ2VkOiBmYWxzZSxcbiAgICByYW5nZTogWzAsIDUwMF0sXG4gICAgc3RlcDogMC4wMDAxLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuY2VsbCxcbiAgICBwcm9wZXJ0eTogJ3dvcmxkVW5pdFNpemUnXG4gIH0sXG4gIGVsZXZhdGlvblNjYWxlOiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgZGVmYXVsdFZhbHVlOiA1LFxuICAgIGxhYmVsOiAnRWxldmF0aW9uIFNjYWxlJyxcbiAgICBpc1JhbmdlZDogZmFsc2UsXG4gICAgcmFuZ2U6IFswLCAxMDBdLFxuICAgIHN0ZXA6IDAuMSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmhlaWdodCxcbiAgICBwcm9wZXJ0eTogJ2VsZXZhdGlvblNjYWxlJ1xuICB9LFxuICBlbGV2YXRpb25SYW5nZToge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogWzAsIDUwMF0sXG4gICAgbGFiZWw6ICdIZWlnaHQgU2NhbGUnLFxuICAgIGlzUmFuZ2VkOiB0cnVlLFxuICAgIHJhbmdlOiBbMCwgMTAwMF0sXG4gICAgc3RlcDogMC4wMSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmhlaWdodCxcbiAgICBwcm9wZXJ0eTogJ3NpemVSYW5nZSdcbiAgfSxcbiAgY292ZXJhZ2VSYW5nZToge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogWzAsIDFdLFxuICAgIGxhYmVsOiAnQ292ZXJhZ2UgUmFuZ2UnLFxuICAgIGlzUmFuZ2VkOiB0cnVlLFxuICAgIHJhbmdlOiBbMCwgMV0sXG4gICAgc3RlcDogMC4wMSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLnJhZGl1cyxcbiAgICBwcm9wZXJ0eTogJ2NvdmVyYWdlUmFuZ2UnXG4gIH0sXG4gICdoaS1wcmVjaXNpb24nOiB7XG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgbGFiZWw6ICdIaWdoIFByZWNpc2lvbiBSZW5kZXJpbmcnLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMucHJlY2lzaW9uLFxuICAgIHByb3BlcnR5OiAnaGktcHJlY2lzaW9uJyxcbiAgICBkZXNjcmlwdGlvbjogJ0hpZ2ggcHJlY2lzaW9uIHdpbGwgcmVzdWx0IGluIHNsb3dlciBwZXJmb3JtYW5jZSdcbiAgfSxcbiAgZW5hYmxlM2Q6IHtcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICBsYWJlbDogJ0hlaWdodCcsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5oZWlnaHQsXG4gICAgcHJvcGVydHk6ICdlbmFibGUzZCcsXG4gICAgZGVzY3JpcHRpb246ICdDbGljayBidXR0b24gYXQgdG9wIHJpZ2h0IG9mIHRoZSBtYXAgdG8gc3dpdGNoIHRvIDNkIHZpZXcnXG4gIH0sXG4gIHN0cm9rZWQ6IHtcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgbGFiZWw6ICdTdHJva2UnLFxuICAgIGRlZmF1bHRWYWx1ZTogdHJ1ZSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmRpc3BsYXksXG4gICAgcHJvcGVydHk6ICdzdHJva2VkJ1xuICB9LFxuICBmaWxsZWQ6IHtcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgbGFiZWw6ICdGaWxsJyxcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuZGlzcGxheSxcbiAgICBwcm9wZXJ0eTogJ2ZpbGxlZCdcbiAgfSxcbiAgZXh0cnVkZWQ6IHtcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICBsYWJlbDogJ0VuYWJsZSBQb2x5Z29uIEhlaWdodCcsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5kaXNwbGF5LFxuICAgIHByb3BlcnR5OiAnZXh0cnVkZWQnXG4gIH0sXG4gIHdpcmVmcmFtZToge1xuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgIGxhYmVsOiAnU2hvdyBXaXJlZnJhbWUnLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuZGlzcGxheSxcbiAgICBwcm9wZXJ0eTogJ3dpcmVmcmFtZSdcbiAgfSxcbiAgLy8gdXNlZCBmb3IgaGVhdG1hcFxuICB3ZWlnaHQ6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBkZWZhdWx0VmFsdWU6IDEsXG4gICAgbGFiZWw6ICdXZWlnaHQgSW50ZW5zaXR5JyxcbiAgICBpc1JhbmdlZDogZmFsc2UsXG4gICAgcmFuZ2U6IFswLjAxLCA1MDBdLFxuICAgIHN0ZXA6IDAuMDEsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5jZWxsLFxuICAgIHByb3BlcnR5OiAnd2VpZ2h0JyxcbiAgICBjb25kaXRpb246IGNvbmZpZyA9PiBjb25maWcud2VpZ2h0RmllbGRcbiAgfSxcbiAgaGVhdG1hcFJhZGl1czoge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogMjAsXG4gICAgbGFiZWw6ICdSYWRpdXMnLFxuICAgIGlzUmFuZ2VkOiBmYWxzZSxcbiAgICByYW5nZTogWzAsIDEwMF0sXG4gICAgc3RlcDogMC4xLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuY2VsbCxcbiAgICBwcm9wZXJ0eTogJ3JhZGl1cydcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IExBWUVSX1RFWFRfQ09ORklHUyA9IHtcbiAgZm9udFNpemU6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICByYW5nZTogWzEsIDEwMF0sXG4gICAgdmFsdWUwOiAxLFxuICAgIHN0ZXA6IDEsXG4gICAgaXNSYW5nZWQ6IGZhbHNlLFxuICAgIGxhYmVsOiAnRm9udCBzaXplJyxcbiAgICBzaG93SW5wdXQ6IHRydWVcbiAgfSxcbiAgdGV4dEFuY2hvcjoge1xuICAgIHR5cGU6ICdzZWxlY3QnLFxuICAgIG9wdGlvbnM6IFsnc3RhcnQnLCAnbWlkZGxlJywgJ2VuZCddLFxuICAgIG11bHRpU2VsZWN0OiBmYWxzZSxcbiAgICBzZWFyY2hhYmxlOiBmYWxzZVxuICB9XG59O1xuIl19