kepler.gl.geoiq
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
144 lines (116 loc) • 17.1 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.hexagonVisConfigs = exports["default"] = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _deck = require("deck.gl");
var _aggregationLayer = _interopRequireDefault(require("../aggregation-layer"));
var _enhancedHexagonLayer = _interopRequireDefault(require("../../deckgl-layers/hexagon-layer/enhanced-hexagon-layer"));
var _hexagonUtils = require("./hexagon-utils");
var _hexagonLayerIcon = _interopRequireDefault(require("./hexagon-layer-icon"));
var _dataUtils = require("../../utils/data-utils");
var _defaultSettings = require("../../constants/default-settings");
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
var hexagonVisConfigs = exports.hexagonVisConfigs = {
opacity: 'opacity',
worldUnitSize: 'worldUnitSize',
resolution: 'resolution',
colorRange: 'colorRange',
coverage: 'coverage',
sizeRange: 'elevationRange',
percentile: 'percentile',
elevationPercentile: 'elevationPercentile',
elevationScale: 'elevationScale',
colorAggregation: 'aggregation',
sizeAggregation: 'sizeAggregation',
enable3d: 'enable3d'
};
var HexagonLayer = exports["default"] = /*#__PURE__*/function (_AggregationLayer) {
(0, _inherits2["default"])(HexagonLayer, _AggregationLayer);
var _super = _createSuper(HexagonLayer);
function HexagonLayer(props) {
var _this;
(0, _classCallCheck2["default"])(this, HexagonLayer);
_this = _super.call(this, props);
_this.registerVisConfig(hexagonVisConfigs);
_this.visConfigSettings.worldUnitSize.label = 'Hexagon Radius (km)';
return _this;
}
(0, _createClass2["default"])(HexagonLayer, [{
key: "type",
get: function get() {
return 'hexagon';
}
}, {
key: "name",
get: function get() {
return 'Hexbin';
}
}, {
key: "layerIcon",
get: function get() {
return _hexagonLayerIcon["default"];
}
}, {
key: "renderLayer",
value: function renderLayer(_ref) {
var data = _ref.data,
idx = _ref.idx,
objectHovered = _ref.objectHovered,
mapState = _ref.mapState,
interaction = _ref.interaction,
layerCallbacks = _ref.layerCallbacks,
layerInteraction = _ref.layerInteraction;
var zoomFactor = this.getZoomFactor(mapState);
var eleZoomFactor = this.getElevationZoomFactor(mapState);
var visConfig = this.config.visConfig;
var radius = visConfig.worldUnitSize * 1000;
return [new _enhancedHexagonLayer["default"](_objectSpread(_objectSpread(_objectSpread({}, data), layerInteraction), {}, {
id: this.id,
idx: idx,
// highlight
autoHighlight: visConfig.enable3d,
highlightColor: _defaultSettings.HIGHLIGH_COLOR_3D,
radius: radius,
coverage: visConfig.coverage,
// color
colorRange: this.getColorRange(visConfig.colorRange),
colorScale: this.config.colorScale,
opacity: visConfig.opacity,
upperPercentile: visConfig.percentile[1],
lowerPercentile: visConfig.percentile[0],
// parameters
parameters: {
depthTest: Boolean(visConfig.enable3d || mapState.dragRotate)
},
// elevation
extruded: visConfig.enable3d,
elevationScale: visConfig.elevationScale * eleZoomFactor,
elevationLowerPercentile: visConfig.elevationPercentile[0],
elevationUpperPercentile: visConfig.elevationPercentile[1],
// render
pickable: true,
// callbacks
onSetColorDomain: layerCallbacks.onSetLayerDomain
}))].concat((0, _toConsumableArray2["default"])(this.isLayerHovered(objectHovered) && !visConfig.enable3d ? [new _deck.GeoJsonLayer(_objectSpread(_objectSpread({}, layerInteraction), {}, {
id: "".concat(this.id, "-hovered"),
data: [(0, _hexagonUtils.hexagonToPolygonGeo)(objectHovered, {}, radius * visConfig.coverage, mapState)],
getLineColor: this.config.highlightColor,
lineWidthScale: (0, _dataUtils.clamp)([1, 100], radius * 0.1 * zoomFactor)
}))] : []));
}
}]);
return HexagonLayer;
}(_aggregationLayer["default"]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9sYXllcnMvaGV4YWdvbi1sYXllci9oZXhhZ29uLWxheWVyLmpzIl0sIm5hbWVzIjpbImhleGFnb25WaXNDb25maWdzIiwib3BhY2l0eSIsIndvcmxkVW5pdFNpemUiLCJyZXNvbHV0aW9uIiwiY29sb3JSYW5nZSIsImNvdmVyYWdlIiwic2l6ZVJhbmdlIiwicGVyY2VudGlsZSIsImVsZXZhdGlvblBlcmNlbnRpbGUiLCJlbGV2YXRpb25TY2FsZSIsImNvbG9yQWdncmVnYXRpb24iLCJzaXplQWdncmVnYXRpb24iLCJlbmFibGUzZCIsIkhleGFnb25MYXllciIsInByb3BzIiwicmVnaXN0ZXJWaXNDb25maWciLCJ2aXNDb25maWdTZXR0aW5ncyIsImxhYmVsIiwiSGV4YWdvbkxheWVySWNvbiIsImRhdGEiLCJpZHgiLCJvYmplY3RIb3ZlcmVkIiwibWFwU3RhdGUiLCJpbnRlcmFjdGlvbiIsImxheWVyQ2FsbGJhY2tzIiwibGF5ZXJJbnRlcmFjdGlvbiIsInpvb21GYWN0b3IiLCJnZXRab29tRmFjdG9yIiwiZWxlWm9vbUZhY3RvciIsImdldEVsZXZhdGlvblpvb21GYWN0b3IiLCJ2aXNDb25maWciLCJjb25maWciLCJyYWRpdXMiLCJFbmhhbmNlZEhleGFnb25MYXllciIsImlkIiwiYXV0b0hpZ2hsaWdodCIsImhpZ2hsaWdodENvbG9yIiwiSElHSExJR0hfQ09MT1JfM0QiLCJnZXRDb2xvclJhbmdlIiwiY29sb3JTY2FsZSIsInVwcGVyUGVyY2VudGlsZSIsImxvd2VyUGVyY2VudGlsZSIsInBhcmFtZXRlcnMiLCJkZXB0aFRlc3QiLCJCb29sZWFuIiwiZHJhZ1JvdGF0ZSIsImV4dHJ1ZGVkIiwiZWxldmF0aW9uTG93ZXJQZXJjZW50aWxlIiwiZWxldmF0aW9uVXBwZXJQZXJjZW50aWxlIiwicGlja2FibGUiLCJvblNldENvbG9yRG9tYWluIiwib25TZXRMYXllckRvbWFpbiIsImlzTGF5ZXJIb3ZlcmVkIiwiR2VvSnNvbkxheWVy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QUFDbEIsUUFBVixJQUFzQlUsUUFBUSxDQUFDdUIsVUFBaEM7QUFBbkIsU0FyQmQ7QUF1QkU7QUFDQUMsUUFBQUEsUUFBUSxFQUFFaEIsU0FBUyxDQUFDbEIsUUF4QnRCO0FBeUJFSCxRQUFBQSxjQUFjLEVBQUVxQixTQUFTLENBQUNyQixjQUFWLEdBQTJCbUIsYUF6QjdDO0FBMEJFbUIsUUFBQUEsd0JBQXdCLEVBQUVqQixTQUFTLENBQUN0QixtQkFBVixDQUE4QixDQUE5QixDQTFCNUI7QUEyQkV3QyxRQUFBQSx3QkFBd0IsRUFBRWxCLFNBQVMsQ0FBQ3RCLG1CQUFWLENBQThCLENBQTlCLENBM0I1QjtBQTZCRTtBQUNBeUMsUUFBQUEsUUFBUSxFQUFFLElBOUJaO0FBZ0NFO0FBQ0FDLFFBQUFBLGdCQUFnQixFQUFFMUIsY0FBYyxDQUFDMkI7QUFqQ25DLFNBREYsNkNBc0NNLEtBQUtDLGNBQUwsQ0FBb0IvQixhQUFwQixLQUFzQyxDQUFDUyxTQUFTLENBQUNsQixRQUFqRCxHQUNBLENBQ0UsSUFBSXlDLGtCQUFKLGlDQUNLNUIsZ0JBREw7QUFFRVMsUUFBQUEsRUFBRSxZQUFLLEtBQUtBLEVBQVYsYUFGSjtBQUdFZixRQUFBQSxJQUFJLEVBQUUsQ0FDSix1Q0FDRUUsYUFERixFQUVFLEVBRkYsRUFHRVcsTUFBTSxHQUFHRixTQUFTLENBQUN6QixRQUhyQixFQUlFaUIsUUFKRixDQURJLENBSFI7QUFXRWdDLFFBQUFBLFlBQVksRUFBRSxLQUFLdkIsTUFBTCxDQUFZSyxjQVg1QjtBQVlFbUIsUUFBQUEsY0FBYyxFQUFFLHNCQUFNLENBQUMsQ0FBRCxFQUFJLEdBQUosQ0FBTixFQUFnQnZCLE1BQU0sR0FBRyxHQUFULEdBQWVOLFVBQS9CO0FBWmxCLFNBREYsQ0FEQSxHQWlCQSxFQXZETjtBQXlERDs7O0VBM0Z1QzhCLDRCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDIzIFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IHtHZW9Kc29uTGF5ZXJ9IGZyb20gJ2RlY2suZ2wnO1xuaW1wb3J0IEFnZ3JlZ2F0aW9uTGF5ZXIgZnJvbSAnLi4vYWdncmVnYXRpb24tbGF5ZXInO1xuaW1wb3J0IEVuaGFuY2VkSGV4YWdvbkxheWVyIGZyb20gJ2RlY2tnbC1sYXllcnMvaGV4YWdvbi1sYXllci9lbmhhbmNlZC1oZXhhZ29uLWxheWVyJztcbmltcG9ydCB7aGV4YWdvblRvUG9seWdvbkdlb30gZnJvbSAnLi9oZXhhZ29uLXV0aWxzJztcbmltcG9ydCBIZXhhZ29uTGF5ZXJJY29uIGZyb20gJy4vaGV4YWdvbi1sYXllci1pY29uJztcbmltcG9ydCB7Y2xhbXB9IGZyb20gJ3V0aWxzL2RhdGEtdXRpbHMnO1xuaW1wb3J0IHtISUdITElHSF9DT0xPUl8zRH0gZnJvbSAnY29uc3RhbnRzL2RlZmF1bHQtc2V0dGluZ3MnO1xuXG5leHBvcnQgY29uc3QgaGV4YWdvblZpc0NvbmZpZ3MgPSB7XG4gIG9wYWNpdHk6ICdvcGFjaXR5JyxcbiAgd29ybGRVbml0U2l6ZTogJ3dvcmxkVW5pdFNpemUnLFxuICByZXNvbHV0aW9uOiAncmVzb2x1dGlvbicsXG4gIGNvbG9yUmFuZ2U6ICdjb2xvclJhbmdlJyxcbiAgY292ZXJhZ2U6ICdjb3ZlcmFnZScsXG4gIHNpemVSYW5nZTogJ2VsZXZhdGlvblJhbmdlJyxcbiAgcGVyY2VudGlsZTogJ3BlcmNlbnRpbGUnLFxuICBlbGV2YXRpb25QZXJjZW50aWxlOiAnZWxldmF0aW9uUGVyY2VudGlsZScsXG4gIGVsZXZhdGlvblNjYWxlOiAnZWxldmF0aW9uU2NhbGUnLFxuICBjb2xvckFnZ3JlZ2F0aW9uOiAnYWdncmVnYXRpb24nLFxuICBzaXplQWdncmVnYXRpb246ICdzaXplQWdncmVnYXRpb24nLFxuICBlbmFibGUzZDogJ2VuYWJsZTNkJ1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSGV4YWdvbkxheWVyIGV4dGVuZHMgQWdncmVnYXRpb25MYXllciB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgdGhpcy5yZWdpc3RlclZpc0NvbmZpZyhoZXhhZ29uVmlzQ29uZmlncyk7XG4gICAgdGhpcy52aXNDb25maWdTZXR0aW5ncy53b3JsZFVuaXRTaXplLmxhYmVsID0gJ0hleGFnb24gUmFkaXVzIChrbSknO1xuICB9XG5cbiAgZ2V0IHR5cGUoKSB7XG4gICAgcmV0dXJuICdoZXhhZ29uJztcbiAgfVxuXG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiAnSGV4YmluJztcbiAgfVxuXG4gIGdldCBsYXllckljb24oKSB7XG4gICAgcmV0dXJuIEhleGFnb25MYXllckljb247XG4gIH1cblxuICByZW5kZXJMYXllcih7XG4gICAgZGF0YSxcbiAgICBpZHgsXG4gICAgb2JqZWN0SG92ZXJlZCxcbiAgICBtYXBTdGF0ZSxcbiAgICBpbnRlcmFjdGlvbixcbiAgICBsYXllckNhbGxiYWNrcyxcbiAgICBsYXllckludGVyYWN0aW9uXG4gIH0pIHtcbiAgICBjb25zdCB6b29tRmFjdG9yID0gdGhpcy5nZXRab29tRmFjdG9yKG1hcFN0YXRlKTtcbiAgICBjb25zdCBlbGVab29tRmFjdG9yID0gdGhpcy5nZXRFbGV2YXRpb25ab29tRmFjdG9yKG1hcFN0YXRlKTtcbiAgICBjb25zdCB7dmlzQ29uZmlnfSA9IHRoaXMuY29uZmlnO1xuICAgIGNvbnN0IHJhZGl1cyA9IHZpc0NvbmZpZy53b3JsZFVuaXRTaXplICogMTAwMDtcblxuICAgIHJldHVybiBbXG4gICAgICBuZXcgRW5oYW5jZWRIZXhhZ29uTGF5ZXIoe1xuICAgICAgICAuLi5kYXRhLFxuICAgICAgICAuLi5sYXllckludGVyYWN0aW9uLFxuICAgICAgICBpZDogdGhpcy5pZCxcbiAgICAgICAgaWR4LFxuXG4gICAgICAgIC8vIGhpZ2hsaWdodFxuICAgICAgICBhdXRvSGlnaGxpZ2h0OiB2aXNDb25maWcuZW5hYmxlM2QsXG4gICAgICAgIGhpZ2hsaWdodENvbG9yOiBISUdITElHSF9DT0xPUl8zRCxcblxuICAgICAgICByYWRpdXMsXG4gICAgICAgIGNvdmVyYWdlOiB2aXNDb25maWcuY292ZXJhZ2UsXG5cbiAgICAgICAgLy8gY29sb3JcbiAgICAgICAgY29sb3JSYW5nZTogdGhpcy5nZXRDb2xvclJhbmdlKHZpc0NvbmZpZy5jb2xvclJhbmdlKSxcbiAgICAgICAgY29sb3JTY2FsZTogdGhpcy5jb25maWcuY29sb3JTY2FsZSxcbiAgICAgICAgb3BhY2l0eTogdmlzQ29uZmlnLm9wYWNpdHksXG4gICAgICAgIHVwcGVyUGVyY2VudGlsZTogdmlzQ29uZmlnLnBlcmNlbnRpbGVbMV0sXG4gICAgICAgIGxvd2VyUGVyY2VudGlsZTogdmlzQ29uZmlnLnBlcmNlbnRpbGVbMF0sXG5cbiAgICAgICAgLy8gcGFyYW1ldGVyc1xuICAgICAgICBwYXJhbWV0ZXJzOiB7ZGVwdGhUZXN0OiBCb29sZWFuKHZpc0NvbmZpZy5lbmFibGUzZCB8fCBtYXBTdGF0ZS5kcmFnUm90YXRlKX0sXG5cbiAgICAgICAgLy8gZWxldmF0aW9uXG4gICAgICAgIGV4dHJ1ZGVkOiB2aXNDb25maWcuZW5hYmxlM2QsXG4gICAgICAgIGVsZXZhdGlvblNjYWxlOiB2aXNDb25maWcuZWxldmF0aW9uU2NhbGUgKiBlbGVab29tRmFjdG9yLFxuICAgICAgICBlbGV2YXRpb25Mb3dlclBlcmNlbnRpbGU6IHZpc0NvbmZpZy5lbGV2YXRpb25QZXJjZW50aWxlWzBdLFxuICAgICAgICBlbGV2YXRpb25VcHBlclBlcmNlbnRpbGU6IHZpc0NvbmZpZy5lbGV2YXRpb25QZXJjZW50aWxlWzFdLFxuXG4gICAgICAgIC8vIHJlbmRlclxuICAgICAgICBwaWNrYWJsZTogdHJ1ZSxcblxuICAgICAgICAvLyBjYWxsYmFja3NcbiAgICAgICAgb25TZXRDb2xvckRvbWFpbjogbGF5ZXJDYWxsYmFja3Mub25TZXRMYXllckRvbWFpblxuICAgICAgfSksXG5cbiAgICAgIC8vIHJlbmRlciBhbiBvdXRsaW5lIG9mIGVhY2ggaGV4YWdvbiBpZiBub3QgZXh0cnVkZWRcbiAgICAgIC4uLih0aGlzLmlzTGF5ZXJIb3ZlcmVkKG9iamVjdEhvdmVyZWQpICYmICF2aXNDb25maWcuZW5hYmxlM2RcbiAgICAgICAgPyBbXG4gICAgICAgICAgICBuZXcgR2VvSnNvbkxheWVyKHtcbiAgICAgICAgICAgICAgLi4ubGF5ZXJJbnRlcmFjdGlvbixcbiAgICAgICAgICAgICAgaWQ6IGAke3RoaXMuaWR9LWhvdmVyZWRgLFxuICAgICAgICAgICAgICBkYXRhOiBbXG4gICAgICAgICAgICAgICAgaGV4YWdvblRvUG9seWdvbkdlbyhcbiAgICAgICAgICAgICAgICAgIG9iamVjdEhvdmVyZWQsXG4gICAgICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAgICAgIHJhZGl1cyAqIHZpc0NvbmZpZy5jb3ZlcmFnZSxcbiAgICAgICAgICAgICAgICAgIG1hcFN0YXRlXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBnZXRMaW5lQ29sb3I6IHRoaXMuY29uZmlnLmhpZ2hsaWdodENvbG9yLFxuICAgICAgICAgICAgICBsaW5lV2lkdGhTY2FsZTogY2xhbXAoWzEsIDEwMF0sIHJhZGl1cyAqIDAuMSAqIHpvb21GYWN0b3IpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF1cbiAgICAgICAgOiBbXSlcbiAgICBdO1xuICB9XG59XG4iXX0=