UNPKG

kepler.gl.geoiq

Version:

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

442 lines (435 loc) 43.9 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.PROPERTY_GROUPS = exports.LAYER_VIS_CONFIGS = exports.LAYER_TEXT_CONFIGS = exports.DEFAULT_TEXT_LABEL = exports.DEFAULT_LAYER_OPACITY = exports.DEFAULT_CUSTOM_PALETTE = exports.DEFAULT_COLOR_UI = exports.DEFAULT_COLOR_RANGE = void 0; var _keymirror = _interopRequireDefault(require("keymirror")); var _defaultSettings = require("../constants/default-settings"); var _colorRanges = require("../constants/color-ranges"); // Copyright (c) 2023 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 = exports.PROPERTY_GROUPS = (0, _keymirror["default"])({ color: null, stroke: null, radius: null, height: null, // for heatmap aggregation cell: null, precision: null }); var DEFAULT_LAYER_OPACITY = exports.DEFAULT_LAYER_OPACITY = 0.8; var DEFAULT_TEXT_LABEL = exports.DEFAULT_TEXT_LABEL = { field: null, color: [255, 255, 255], size: 18, offset: [0, 0], anchor: 'start', alignment: 'center' }; var DEFAULT_COLOR_RANGE = exports.DEFAULT_COLOR_RANGE = _colorRanges.DefaultColorRange; var DEFAULT_CUSTOM_PALETTE = exports.DEFAULT_CUSTOM_PALETTE = { name: 'Custom Palette', type: 'custom', category: 'Custom', colors: [] }; var DEFAULT_COLOR_UI = exports.DEFAULT_COLOR_UI = { // customPalette in edit customPalette: DEFAULT_CUSTOM_PALETTE, // show color sketcher modal showSketcher: false, // show color range selection panel showDropdown: false, // color range selector config colorRangeConfig: { type: 'all', steps: 6, reversed: false, custom: false } }; var LAYER_VIS_CONFIGS = exports.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' }, trailLength: { type: 'number', defaultValue: 180, label: 'Stroke Width', isRanged: false, range: [1, 1000], step: 1, group: PROPERTY_GROUPS.stroke, property: 'trailLength' }, // 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: DEFAULT_LAYER_OPACITY, 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' }, // used in point layer outline: { type: 'boolean', defaultValue: false, label: 'Outline', group: PROPERTY_GROUPS.display, property: 'outline' }, colorRange: { type: 'color-range-select', defaultValue: _colorRanges.DefaultColorRange, label: 'Color range', group: PROPERTY_GROUPS.color, property: 'colorRange' }, strokeColorRange: { type: 'color-range-select', defaultValue: _colorRanges.DefaultColorRange, label: 'Stroke Color range', group: PROPERTY_GROUPS.color, property: 'strokeColorRange' }, targetColor: { type: 'color-select', label: 'Target Color', defaultValue: null, group: PROPERTY_GROUPS.color, property: 'targetColor' }, strokeColor: { type: 'color-select', label: 'Stroke Color', defaultValue: null, group: PROPERTY_GROUPS.color, property: 'strokeColor' }, aggregation: { type: 'select', defaultValue: _defaultSettings.AGGREGATION_TYPES.count, 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' }, sizeScale: { type: 'number', defaultValue: 10, label: 'Size Scale', isRanged: false, range: [1, 1000], step: 1, // group: PROPERTY_GROUPS.cell, property: 'sizeScale' }, angle: { type: 'number', defaultValue: 0, // label: 'Size Scale', isRanged: false, range: [0, 360], step: 1 // group: PROPERTY_GROUPS.cell, // property: 'sizeScale' }, 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 is deprecated by deck.gl '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: true, 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' } }; var LAYER_TEXT_CONFIGS = exports.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 }, textAlignment: { type: 'select', options: ['top', 'center', 'bottom'], multiSelect: false, searchable: false } }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sYXllcnMvbGF5ZXItZmFjdG9yeS5qcyJdLCJuYW1lcyI6WyJQUk9QRVJUWV9HUk9VUFMiLCJjb2xvciIsInN0cm9rZSIsInJhZGl1cyIsImhlaWdodCIsImNlbGwiLCJwcmVjaXNpb24iLCJERUZBVUxUX0xBWUVSX09QQUNJVFkiLCJERUZBVUxUX1RFWFRfTEFCRUwiLCJmaWVsZCIsInNpemUiLCJvZmZzZXQiLCJhbmNob3IiLCJhbGlnbm1lbnQiLCJERUZBVUxUX0NPTE9SX1JBTkdFIiwiRGVmYXVsdENvbG9yUmFuZ2UiLCJERUZBVUxUX0NVU1RPTV9QQUxFVFRFIiwibmFtZSIsInR5cGUiLCJjYXRlZ29yeSIsImNvbG9ycyIsIkRFRkFVTFRfQ09MT1JfVUkiLCJjdXN0b21QYWxldHRlIiwic2hvd1NrZXRjaGVyIiwic2hvd0Ryb3Bkb3duIiwiY29sb3JSYW5nZUNvbmZpZyIsInN0ZXBzIiwicmV2ZXJzZWQiLCJjdXN0b20iLCJMQVlFUl9WSVNfQ09ORklHUyIsInRoaWNrbmVzcyIsImRlZmF1bHRWYWx1ZSIsImxhYmVsIiwiaXNSYW5nZWQiLCJyYW5nZSIsInN0ZXAiLCJncm91cCIsInByb3BlcnR5Iiwic3Ryb2tlV2lkdGhSYW5nZSIsInRyYWlsTGVuZ3RoIiwiZml4ZWRSYWRpdXMiLCJkZXNjcmlwdGlvbiIsInJhZGl1c1JhbmdlIiwiY2x1c3RlclJhZGl1cyIsImNsdXN0ZXJSYWRpdXNSYW5nZSIsIm9wYWNpdHkiLCJjb3ZlcmFnZSIsIm91dGxpbmUiLCJkaXNwbGF5IiwiY29sb3JSYW5nZSIsInN0cm9rZUNvbG9yUmFuZ2UiLCJ0YXJnZXRDb2xvciIsInN0cm9rZUNvbG9yIiwiYWdncmVnYXRpb24iLCJBR0dSRUdBVElPTl9UWVBFUyIsImNvdW50Iiwib3B0aW9ucyIsIk9iamVjdCIsImtleXMiLCJjb25kaXRpb24iLCJjb25maWciLCJjb2xvckZpZWxkIiwic2l6ZUFnZ3JlZ2F0aW9uIiwiYXZlcmFnZSIsInNpemVGaWVsZCIsImhlaWdodEFnZ3JlZ2F0aW9uIiwiaGVpZ2h0RmllbGQiLCJwZXJjZW50aWxlIiwidmlzQ29uZmlnIiwiY29sb3JBZ2dyZWdhdGlvbiIsImNvbG9yU2NhbGUiLCJlbGV2YXRpb25QZXJjZW50aWxlIiwiZW5hYmxlM2QiLCJyZXNvbHV0aW9uIiwic2l6ZVNjYWxlIiwiYW5nbGUiLCJ3b3JsZFVuaXRTaXplIiwiZWxldmF0aW9uU2NhbGUiLCJlbGV2YXRpb25SYW5nZSIsImNvdmVyYWdlUmFuZ2UiLCJzdHJva2VkIiwiZmlsbGVkIiwiZXh0cnVkZWQiLCJ3aXJlZnJhbWUiLCJ3ZWlnaHQiLCJ3ZWlnaHRGaWVsZCIsImhlYXRtYXBSYWRpdXMiLCJMQVlFUl9URVhUX0NPTkZJR1MiLCJmb250U2l6ZSIsInZhbHVlMCIsInNob3dJbnB1dCIsInRleHRBbmNob3IiLCJtdWx0aVNlbGVjdCIsInNlYXJjaGFibGUiLCJ0ZXh0QWxpZ25tZW50Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFvQkE7O0FBRUE7O0FBQ0E7O0FBdkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBT08sSUFBTUEsZUFBZSw2QkFBRywyQkFBVTtBQUN2Q0MsRUFBQUEsS0FBSyxFQUFFLElBRGdDO0FBRXZDQyxFQUFBQSxNQUFNLEVBQUUsSUFGK0I7QUFHdkNDLEVBQUFBLE1BQU0sRUFBRSxJQUgrQjtBQUl2Q0MsRUFBQUEsTUFBTSxFQUFFLElBSitCO0FBTXZDO0FBQ0FDLEVBQUFBLElBQUksRUFBRSxJQVBpQztBQVF2Q0MsRUFBQUEsU0FBUyxFQUFFO0FBUjRCLENBQVYsQ0FBeEI7QUFXQSxJQUFNQyxxQkFBcUIsbUNBQUcsR0FBOUI7QUFFQSxJQUFNQyxrQkFBa0IsZ0NBQUc7QUFDaENDLEVBQUFBLEtBQUssRUFBRSxJQUR5QjtBQUVoQ1IsRUFBQUEsS0FBSyxFQUFFLENBQUMsR0FBRCxFQUFNLEdBQU4sRUFBVyxH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QUFVLEVBQUU7QUFKQztBQWhCaUIsQ0FBM0IiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMjMgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQga2V5TWlycm9yIGZyb20gJ2tleW1pcnJvcic7XG5cbmltcG9ydCB7QUdHUkVHQVRJT05fVFlQRVN9IGZyb20gJ2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzJztcbmltcG9ydCB7RGVmYXVsdENvbG9yUmFuZ2V9IGZyb20gJ2NvbnN0YW50cy9jb2xvci1yYW5nZXMnO1xuXG5leHBvcnQgY29uc3QgUFJPUEVSVFlfR1JPVVBTID0ga2V5TWlycm9yKHtcbiAgY29sb3I6IG51bGwsXG4gIHN0cm9rZTogbnVsbCxcbiAgcmFkaXVzOiBudWxsLFxuICBoZWlnaHQ6IG51bGwsXG5cbiAgLy8gZm9yIGhlYXRtYXAgYWdncmVnYXRpb25cbiAgY2VsbDogbnVsbCxcbiAgcHJlY2lzaW9uOiBudWxsXG59KTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTEFZRVJfT1BBQ0lUWSA9IDAuODtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfVEVYVF9MQUJFTCA9IHtcbiAgZmllbGQ6IG51bGwsXG4gIGNvbG9yOiBbMjU1LCAyNTUsIDI1NV0sXG4gIHNpemU6IDE4LFxuICBvZmZzZXQ6IFswLCAwXSxcbiAgYW5jaG9yOiAnc3RhcnQnLFxuICBhbGlnbm1lbnQ6ICdjZW50ZXInXG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9DT0xPUl9SQU5HRSA9IERlZmF1bHRDb2xvclJhbmdlO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9DVVNUT01fUEFMRVRURSA9IHtcbiAgbmFtZTogJ0N1c3RvbSBQYWxldHRlJyxcbiAgdHlwZTogJ2N1c3RvbScsXG4gIGNhdGVnb3J5OiAnQ3VzdG9tJyxcbiAgY29sb3JzOiBbXVxufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQ09MT1JfVUkgPSB7XG4gIC8vIGN1c3RvbVBhbGV0dGUgaW4gZWRpdFxuICBjdXN0b21QYWxldHRlOiBERUZBVUxUX0NVU1RPTV9QQUxFVFRFLFxuICAvLyBzaG93IGNvbG9yIHNrZXRjaGVyIG1vZGFsXG4gIHNob3dTa2V0Y2hlcjogZmFsc2UsXG4gIC8vIHNob3cgY29sb3IgcmFuZ2Ugc2VsZWN0aW9uIHBhbmVsXG4gIHNob3dEcm9wZG93bjogZmFsc2UsXG4gIC8vIGNvbG9yIHJhbmdlIHNlbGVjdG9yIGNvbmZpZ1xuICBjb2xvclJhbmdlQ29uZmlnOiB7XG4gICAgdHlwZTogJ2FsbCcsXG4gICAgc3RlcHM6IDYsXG4gICAgcmV2ZXJzZWQ6IGZhbHNlLFxuICAgIGN1c3RvbTogZmFsc2VcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IExBWUVSX1ZJU19DT05GSUdTID0ge1xuICB0aGlja25lc3M6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBkZWZhdWx0VmFsdWU6IDIsXG4gICAgbGFiZWw6ICdTdHJva2UgV2lkdGgnLFxuICAgIGlzUmFuZ2VkOiBmYWxzZSxcbiAgICByYW5nZTogWzAsIDEwMF0sXG4gICAgc3RlcDogMC4xLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuc3Ryb2tlLFxuICAgIHByb3BlcnR5OiAndGhpY2tuZXNzJ1xuICB9LFxuICBzdHJva2VXaWR0aFJhbmdlOiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgZGVmYXVsdFZhbHVlOiBbMCwgMTBdLFxuICAgIGxhYmVsOiAnU3Ryb2tlIFdpZHRoIFJhbmdlJyxcbiAgICBpc1JhbmdlZDogdHJ1ZSxcbiAgICByYW5nZTogWzAsIDIwMF0sXG4gICAgc3RlcDogMC4xLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuc3Ryb2tlLFxuICAgIHByb3BlcnR5OiAnc2l6ZVJhbmdlJ1xuICB9LFxuICB0cmFpbExlbmd0aDoge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogMTgwLFxuICAgIGxhYmVsOiAnU3Ryb2tlIFdpZHRoJyxcbiAgICBpc1JhbmdlZDogZmFsc2UsXG4gICAgcmFuZ2U6IFsxLCAxMDAwXSxcbiAgICBzdGVwOiAxLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuc3Ryb2tlLFxuICAgIHByb3BlcnR5OiAndHJhaWxMZW5ndGgnXG4gIH0sXG4gIC8vIHJhZGl1cyBpcyBhY3R1YWxseSByYWRpdXNTY2FsZSBpbiBkZWNrLmdsXG4gIHJhZGl1czoge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogMTAsXG4gICAgbGFiZWw6ICdSYWRpdXMnLFxuICAgIGlzUmFuZ2VkOiBmYWxzZSxcbiAgICByYW5nZTogWzAsIDEwMF0sXG4gICAgc3RlcDogMC4xLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMucmFkaXVzLFxuICAgIHByb3BlcnR5OiAncmFkaXVzJ1xuICB9LFxuICBmaXhlZFJhZGl1czoge1xuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGxhYmVsOiAnRml4ZWQgUmFkaXVzIHRvIG1ldGVyJyxcbiAgICBkZXNjcmlwdGlvbjogJ01hcCByYWRpdXMgdG8gYWJzb2x1dGUgcmFkaXVzIGluIG1ldGVycywgZS5nLiA1IHRvIDUgbWV0ZXJzJyxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLnJhZGl1cyxcbiAgICBwcm9wZXJ0eTogJ2ZpeGVkUmFkaXVzJ1xuICB9LFxuICByYWRpdXNSYW5nZToge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogWzAsIDUwXSxcbiAgICBpc1JhbmdlZDogdHJ1ZSxcbiAgICByYW5nZTogWzAsIDUwMF0sXG4gICAgc3RlcDogMC4xLFxuICAgIGxhYmVsOiAnUmFkaXVzIFJhbmdlJyxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLnJhZGl1cyxcbiAgICBwcm9wZXJ0eTogJ3JhZGl1c1JhbmdlJ1xuICB9LFxuICBjbHVzdGVyUmFkaXVzOiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgbGFiZWw6ICdDbHVzdGVyIFNpemUgKG0pJyxcbiAgICBkZWZhdWx0VmFsdWU6IDQwLFxuICAgIGlzUmFuZ2VkOiBmYWxzZSxcbiAgICByYW5nZTogWzEsIDUwMF0sXG4gICAgc3RlcDogMC4xLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMucmFkaXVzLFxuICAgIHByb3BlcnR5OiAnY2x1c3RlclJhZGl1cydcbiAgfSxcbiAgY2x1c3RlclJhZGl1c1JhbmdlOiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgbGFiZWw6ICdSYWRpdXMgUmFuZ2UgKG0pJyxcbiAgICBkZWZhdWx0VmFsdWU6IFsxLCA0MF0sXG4gICAgaXNSYW5nZWQ6IHRydWUsXG4gICAgcmFuZ2U6IFsxLCAxNTBdLFxuICAgIHN0ZXA6IDAuMSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLnJhZGl1cyxcbiAgICBwcm9wZXJ0eTogJ3JhZGl1c1JhbmdlJ1xuICB9LFxuICBvcGFjaXR5OiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgZGVmYXVsdFZhbHVlOiBERUZBVUxUX0xBWUVSX09QQUNJVFksXG4gICAgbGFiZWw6ICdPcGFjaXR5JyxcbiAgICBpc1JhbmdlZDogZmFsc2UsXG4gICAgcmFuZ2U6IFswLCAxXSxcbiAgICBzdGVwOiAwLjAxLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuY29sb3IsXG4gICAgcHJvcGVydHk6ICdvcGFjaXR5J1xuICB9LFxuICBjb3ZlcmFnZToge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogMSxcbiAgICBsYWJlbDogJ0NvdmVyYWdlJyxcbiAgICBpc1JhbmdlZDogZmFsc2UsXG4gICAgcmFuZ2U6IFswLCAxXSxcbiAgICBzdGVwOiAwLjAxLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuY2VsbCxcbiAgICBwcm9wZXJ0eTogJ2NvdmVyYWdlJ1xuICB9LFxuICAvLyB1c2VkIGluIHBvaW50IGxheWVyXG4gIG91dGxpbmU6IHtcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICBsYWJlbDogJ091dGxpbmUnLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuZGlzcGxheSxcbiAgICBwcm9wZXJ0eTogJ291dGxpbmUnXG4gIH0sXG4gIGNvbG9yUmFuZ2U6IHtcbiAgICB0eXBlOiAnY29sb3ItcmFuZ2Utc2VsZWN0JyxcbiAgICBkZWZhdWx0VmFsdWU6IERlZmF1bHRDb2xvclJhbmdlLFxuICAgIGxhYmVsOiAnQ29sb3IgcmFuZ2UnLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuY29sb3IsXG4gICAgcHJvcGVydHk6ICdjb2xvclJhbmdlJ1xuICB9LFxuICBzdHJva2VDb2xvclJhbmdlOiB7XG4gICAgdHlwZTogJ2NvbG9yLXJhbmdlLXNlbGVjdCcsXG4gICAgZGVmYXVsdFZhbHVlOiBEZWZhdWx0Q29sb3JSYW5nZSxcbiAgICBsYWJlbDogJ1N0cm9rZSBDb2xvciByYW5nZScsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5jb2xvcixcbiAgICBwcm9wZXJ0eTogJ3N0cm9rZUNvbG9yUmFuZ2UnXG4gIH0sXG4gIHRhcmdldENvbG9yOiB7XG4gICAgdHlwZTogJ2NvbG9yLXNlbGVjdCcsXG4gICAgbGFiZWw6ICdUYXJnZXQgQ29sb3InLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmNvbG9yLFxuICAgIHByb3BlcnR5OiAndGFyZ2V0Q29sb3InXG4gIH0sXG4gIHN0cm9rZUNvbG9yOiB7XG4gICAgdHlwZTogJ2NvbG9yLXNlbGVjdCcsXG4gICAgbGFiZWw6ICdTdHJva2UgQ29sb3InLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmNvbG9yLFxuICAgIHByb3BlcnR5OiAnc3Ryb2tlQ29sb3InXG4gIH0sXG4gIGFnZ3JlZ2F0aW9uOiB7XG4gICAgdHlwZTogJ3NlbGVjdCcsXG4gICAgZGVmYXVsdFZhbHVlOiBBR0dSRUdBVElPTl9UWVBFUy5jb3VudCxcbiAgICBsYWJlbDogJ0NvbG9yIEFnZ3JlZ2F0aW9uJyxcbiAgICAvLyBhZ2dyZWdhdGlvbiBvcHRpb25zIGFyZSBiYXNlZCBvbiBjb2xvciBmaWVsZCB0eXBlc1xuICAgIG9wdGlvbnM6IE9iamVjdC5rZXlzKEFHR1JFR0FUSU9OX1RZUEVTKSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmNvbG9yLFxuICAgIHByb3BlcnR5OiAnY29sb3JBZ2dyZWdhdGlvbicsXG4gICAgY29uZGl0aW9uOiBjb25maWcgPT4gY29uZmlnLmNvbG9yRmllbGRcbiAgfSxcbiAgc2l6ZUFnZ3JlZ2F0aW9uOiB7XG4gICAgdHlwZTogJ3NlbGVjdCcsXG4gICAgZGVmYXVsdFZhbHVlOiBBR0dSRUdBVElPTl9UWVBFUy5hdmVyYWdlLFxuICAgIGxhYmVsOiAnSGVpZ2h0IEFnZ3JlZ2F0aW9uJyxcbiAgICAvLyBhZ2dyZWdhdGlvbiBvcHRpb25zIGFyZSBiYXNlZCBvbiBjb2xvciBmaWVsZCB0eXBlc1xuICAgIG9wdGlvbnM6IE9iamVjdC5rZXlzKEFHR1JFR0FUSU9OX1RZUEVTKSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmhlaWdodCxcbiAgICBwcm9wZXJ0eTogJ3NpemVBZ2dyZWdhdGlvbicsXG4gICAgY29uZGl0aW9uOiBjb25maWcgPT4gY29uZmlnLnNpemVGaWVsZFxuICB9LFxuICBoZWlnaHRBZ2dyZWdhdGlvbjoge1xuICAgIHR5cGU6ICdzZWxlY3QnLFxuICAgIGRlZmF1bHRWYWx1ZTogQUdHUkVHQVRJT05fVFlQRVMuYXZlcmFnZSxcbiAgICBsYWJlbDogJ0hlaWdodCBBZ2dyZWdhdGlvbicsXG4gICAgLy8gYWdncmVnYXRpb24gb3B0aW9ucyBhcmUgYmFzZWQgb25cbiAgICBvcHRpb25zOiBPYmplY3Qua2V5cyhBR0dSRUdBVElPTl9UWVBFUyksXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5jb2xvcixcbiAgICBwcm9wZXJ0eTogJ2hlaWdodEFnZ3JlZ2F0aW9uJyxcbiAgICBjb25kaXRpb246IGNvbmZpZyA9PiBjb25maWcuaGVpZ2h0RmllbGRcbiAgfSxcbiAgcGVyY2VudGlsZToge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogWzAsIDEwMF0sXG4gICAgbGFiZWw6IGNvbmZpZyA9PlxuICAgICAgYEZpbHRlciBieSAke1xuICAgICAgICBjb25maWcuY29sb3JGaWVsZFxuICAgICAgICAgID8gYCR7Y29uZmlnLnZpc0NvbmZpZy5jb2xvckFnZ3JlZ2F0aW9ufSAke2NvbmZpZy5jb2xvckZpZWxkLm5hbWV9YFxuICAgICAgICAgIDogJ2NvdW50J1xuICAgICAgfSBwZXJjZW50aWxlYCxcbiAgICBpc1JhbmdlZDogdHJ1ZSxcbiAgICByYW5nZTogWzAsIDEwMF0sXG4gICAgc3RlcDogMC4wMSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmNvbG9yLFxuICAgIHByb3BlcnR5OiAncGVyY2VudGlsZScsXG5cbiAgICAvLyBwZXJjZW50aWxlIGZpbHRlciBvbmx5IG1ha2VzIHNlbnNlIHdpdGggbGluZWFyIGFnZ3JlZ2F0aW9uXG4gICAgY29uZGl0aW9uOiBjb25maWcgPT4gY29uZmlnLmNvbG9yU2NhbGUgIT09ICdvcmRpbmFsJ1xuICB9LFxuICBlbGV2YXRpb25QZXJjZW50aWxlOiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgZGVmYXVsdFZhbHVlOiBbMCwgMTAwXSxcbiAgICBsYWJlbDogY29uZmlnID0+XG4gICAgICBgRmlsdGVyIGJ5ICR7XG4gICAgICAgIGNvbmZpZy5zaXplRmllbGRcbiAgICAgICAgICA/IGAke2NvbmZpZy52aXNDb25maWcuc2l6ZUFnZ3JlZ2F0aW9ufSAke2NvbmZpZy5zaXplRmllbGQubmFtZX1gXG4gICAgICAgICAgOiAnY291bnQnXG4gICAgICB9IHBlcmNlbnRpbGVgLFxuICAgIGlzUmFuZ2VkOiB0cnVlLFxuICAgIHJhbmdlOiBbMCwgMTAwXSxcbiAgICBzdGVwOiAwLjAxLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuaGVpZ2h0LFxuICAgIHByb3BlcnR5OiAnZWxldmF0aW9uUGVyY2VudGlsZScsXG4gICAgLy8gcGVyY2VudGlsZSBmaWx0ZXIgb25seSBtYWtlcyBzZW5zZSB3aXRoIGxpbmVhciBhZ2dyZWdhdGlvblxuICAgIGNvbmRpdGlvbjogY29uZmlnID0+XG4gICAgICBjb25maWcudmlzQ29uZmlnLmVuYWJsZTNkICYmIChjb25maWcuY29sb3JGaWVsZCB8fCBjb25maWcuc2l6ZUZpZWxkKVxuICB9LFxuICByZXNvbHV0aW9uOiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgZGVmYXVsdFZhbHVlOiA4LFxuICAgIGxhYmVsOiAnUmVzb2x1dGlvbiByYW5nZScsXG4gICAgaXNSYW5nZWQ6IGZhbHNlLFxuICAgIHJhbmdlOiBbMCwgMTNdLFxuICAgIHN0ZXA6IDEsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5jZWxsLFxuICAgIHByb3BlcnR5OiAncmVzb2x1dGlvbidcbiAgfSxcbiAgc2l6ZVNjYWxlOiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgZGVmYXVsdFZhbHVlOiAxMCxcbiAgICBsYWJlbDogJ1NpemUgU2NhbGUnLFxuICAgIGlzUmFuZ2VkOiBmYWxzZSxcbiAgICByYW5nZTogWzEsIDEwMDBdLFxuICAgIHN0ZXA6IDEsXG4gICAgLy8gZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5jZWxsLFxuICAgIHByb3BlcnR5OiAnc2l6ZVNjYWxlJ1xuICB9LFxuICBhbmdsZToge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogMCxcbiAgICAvLyBsYWJlbDogJ1NpemUgU2NhbGUnLFxuICAgIGlzUmFuZ2VkOiBmYWxzZSxcbiAgICByYW5nZTogWzAsIDM2MF0sXG4gICAgc3RlcDogMVxuICAgIC8vIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuY2VsbCxcbiAgICAvLyBwcm9wZXJ0eTogJ3NpemVTY2FsZSdcbiAgfSxcbiAgd29ybGRVbml0U2l6ZToge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogMSxcbiAgICBsYWJlbDogJ1dvcmxkIFVuaXQgU2l6ZScsXG4gICAgaXNSYW5nZWQ6IGZhbHNlLFxuICAgIHJhbmdlOiBbMCwgNTAwXSxcbiAgICBzdGVwOiAwLjAwMDEsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5jZWxsLFxuICAgIHByb3BlcnR5OiAnd29ybGRVbml0U2l6ZSdcbiAgfSxcbiAgZWxldmF0aW9uU2NhbGU6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBkZWZhdWx0VmFsdWU6IDUsXG4gICAgbGFiZWw6ICdFbGV2YXRpb24gU2NhbGUnLFxuICAgIGlzUmFuZ2VkOiBmYWxzZSxcbiAgICByYW5nZTogWzAsIDEwMF0sXG4gICAgc3RlcDogMC4xLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuaGVpZ2h0LFxuICAgIHByb3BlcnR5OiAnZWxldmF0aW9uU2NhbGUnXG4gIH0sXG4gIGVsZXZhdGlvblJhbmdlOiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgZGVmYXVsdFZhbHVlOiBbMCwgNTAwXSxcbiAgICBsYWJlbDogJ0hlaWdodCBTY2FsZScsXG4gICAgaXNSYW5nZWQ6IHRydWUsXG4gICAgcmFuZ2U6IFswLCAxMDAwXSxcbiAgICBzdGVwOiAwLjAxLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuaGVpZ2h0LFxuICAgIHByb3BlcnR5OiAnc2l6ZVJhbmdlJ1xuICB9LFxuICBjb3ZlcmFnZVJhbmdlOiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgZGVmYXVsdFZhbHVlOiBbMCwgMV0sXG4gICAgbGFiZWw6ICdDb3ZlcmFnZSBSYW5nZScsXG4gICAgaXNSYW5nZWQ6IHRydWUsXG4gICAgcmFuZ2U6IFswLCAxXSxcbiAgICBzdGVwOiAwLjAxLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMucmFkaXVzLFxuICAgIHByb3BlcnR5OiAnY292ZXJhZ2VSYW5nZSdcbiAgfSxcbiAgLy8gaGkgcHJlY2lzaW9uIGlzIGRlcHJlY2F0ZWQgYnkgZGVjay5nbFxuICAnaGktcHJlY2lzaW9uJzoge1xuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgIGxhYmVsOiAnSGlnaCBQcmVjaXNpb24gUmVuZGVyaW5nJyxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLnByZWNpc2lvbixcbiAgICBwcm9wZXJ0eTogJ2hpLXByZWNpc2lvbicsXG4gICAgZGVzY3JpcHRpb246ICdIaWdoIHByZWNpc2lvbiB3aWxsIHJlc3VsdCBpbiBzbG93ZXIgcGVyZm9ybWFuY2UnXG4gIH0sXG4gIGVuYWJsZTNkOiB7XG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgbGFiZWw6ICdIZWlnaHQnLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuaGVpZ2h0LFxuICAgIHByb3BlcnR5OiAnZW5hYmxlM2QnLFxuICAgIGRlc2NyaXB0aW9uOiAnQ2xpY2sgYnV0dG9uIGF0IHRvcCByaWdodCBvZiB0aGUgbWFwIHRvIHN3aXRjaCB0byAzZCB2aWV3J1xuICB9LFxuICBzdHJva2VkOiB7XG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGxhYmVsOiAnU3Ryb2tlJyxcbiAgICBkZWZhdWx0VmFsdWU6IHRydWUsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5kaXNwbGF5LFxuICAgIHByb3BlcnR5OiAnc3Ryb2tlZCdcbiAgfSxcbiAgZmlsbGVkOiB7XG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGxhYmVsOiAnRmlsbCcsXG4gICAgZGVmYXVsdFZhbHVlOiB0cnVlLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuZGlzcGxheSxcbiAgICBwcm9wZXJ0eTogJ2ZpbGxlZCdcbiAgfSxcbiAgZXh0cnVkZWQ6IHtcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICBsYWJlbDogJ0VuYWJsZSBQb2x5Z29uIEhlaWdodCcsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5kaXNwbGF5LFxuICAgIHByb3BlcnR5OiAnZXh0cnVkZWQnXG4gIH0sXG4gIHdpcmVmcmFtZToge1xuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgIGxhYmVsOiAnU2hvdyBXaXJlZnJhbWUnLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuZGlzcGxheSxcbiAgICBwcm9wZXJ0eTogJ3dpcmVmcmFtZSdcbiAgfSxcbiAgLy8gdXNlZCBmb3IgaGVhdG1hcFxuICB3ZWlnaHQ6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBkZWZhdWx0VmFsdWU6IDEsXG4gICAgbGFiZWw6ICdXZWlnaHQgSW50ZW5zaXR5JyxcbiAgICBpc1JhbmdlZDogZmFsc2UsXG4gICAgcmFuZ2U6IFswLjAxLCA1MDBdLFxuICAgIHN0ZXA6IDAuMDEsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5jZWxsLFxuICAgIHByb3BlcnR5OiAnd2VpZ2h0JyxcbiAgICBjb25kaXRpb246IGNvbmZpZyA9PiBjb25maWcud2VpZ2h0RmllbGRcbiAgfSxcbiAgaGVhdG1hcFJhZGl1czoge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogMjAsXG4gICAgbGFiZWw6ICdSYWRpdXMnLFxuICAgIGlzUmFuZ2VkOiBmYWxzZSxcbiAgICByYW5nZTogWzAsIDEwMF0sXG4gICAgc3RlcDogMC4xLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuY2VsbCxcbiAgICBwcm9wZXJ0eTogJ3JhZGl1cydcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IExBWUVSX1RFWFRfQ09ORklHUyA9IHtcbiAgZm9udFNpemU6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICByYW5nZTogWzEsIDEwMF0sXG4gICAgdmFsdWUwOiAxLFxuICAgIHN0ZXA6IDEsXG4gICAgaXNSYW5nZWQ6IGZhbHNlLFxuICAgIGxhYmVsOiAnRm9udCBzaXplJyxcbiAgICBzaG93SW5wdXQ6IHRydWVcbiAgfSxcbiAgdGV4dEFuY2hvcjoge1xuICAgIHR5cGU6ICdzZWxlY3QnLFxuICAgIG9wdGlvbnM6IFsnc3RhcnQnLCAnbWlkZGxlJywgJ2VuZCddLFxuICAgIG11bHRpU2VsZWN0OiBmYWxzZSxcbiAgICBzZWFyY2hhYmxlOiBmYWxzZVxuICB9LFxuICB0ZXh0QWxpZ25tZW50OiB7XG4gICAgdHlwZTogJ3NlbGVjdCcsXG4gICAgb3B0aW9uczogWyd0b3AnLCAnY2VudGVyJywgJ2JvdHRvbSddLFxuICAgIG11bHRpU2VsZWN0OiBmYWxzZSxcbiAgICBzZWFyY2hhYmxlOiBmYWxzZVxuICB9XG59O1xuIl19