kepler.gl.geoiq
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
221 lines (194 loc) • 22.1 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.mvtVisConfigs = exports.mvtRequiredUrl = exports["default"] = void 0;
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
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 _baseLayer = _interopRequireDefault(require("../base-layer"));
var _mvtLayerIcon = _interopRequireDefault(require("./mvt-layer-icon"));
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 mvtRequiredUrl = exports.mvtRequiredUrl = ['url'];
var mvtVisConfigs = exports.mvtVisConfigs = {
opacity: 'opacity',
thickness: {
type: 'number',
defaultValue: 0.5,
label: 'Stroke Width',
isRanged: false,
range: [0, 100],
step: 0.1,
group: 'stroke',
property: 'thickness'
},
colorRange: 'colorRange',
radius: 'radius',
sizeRange: 'strokeWidthRange',
radiusRange: 'radiusRange',
heightRange: 'elevationRange',
elevationScale: 'elevationScale',
'hi-precision': 'hi-precision',
stroked: 'stroked',
filled: 'filled',
enable3d: 'enable3d',
wireframe: 'wireframe'
};
var MVTLayer = exports["default"] = /*#__PURE__*/function (_Layer) {
(0, _inherits2["default"])(MVTLayer, _Layer);
var _super = _createSuper(MVTLayer);
function MVTLayer(props) {
var _this;
(0, _classCallCheck2["default"])(this, MVTLayer);
_this = _super.call(this, props);
_this.dataToFeature = {};
_this.registerVisConfig(mvtVisConfigs);
return _this;
}
(0, _createClass2["default"])(MVTLayer, [{
key: "type",
get: function get() {
return 'tile';
}
}, {
key: "name",
get: function get() {
return 'tile';
}
}, {
key: "layerIcon",
get: function get() {
return _mvtLayerIcon["default"];
}
}, {
key: "requiredLayerColumns",
get: function get() {
return mvtRequiredUrl;
}
}, {
key: "visualChannels",
get: function get() {
return _objectSpread(_objectSpread({}, (0, _get2["default"])((0, _getPrototypeOf2["default"])(MVTLayer.prototype), "visualChannels", this)), {}, {
size: _objectSpread(_objectSpread({}, (0, _get2["default"])((0, _getPrototypeOf2["default"])(MVTLayer.prototype), "visualChannels", this).size), {}, {
property: 'stroke',
condition: function condition(config) {
return config.visConfig.stroked;
}
}),
height: {
property: 'height',
field: 'heightField',
scale: 'heightScale',
domain: 'heightDomain',
range: 'heightRange',
key: 'height',
channelScaleType: 'size',
condition: function condition(config) {
return config.visConfig.enable3d;
}
},
radius: {
property: 'radius',
field: 'radiusField',
scale: 'radiusScale',
domain: 'radiusDomain',
range: 'radiusRange',
key: 'radius',
channelScaleType: 'radius'
}
});
}
}, {
key: "getDefaultLayerConfig",
value: function getDefaultLayerConfig() {
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
return _objectSpread(_objectSpread({}, (0, _get2["default"])((0, _getPrototypeOf2["default"])(MVTLayer.prototype), "getDefaultLayerConfig", this).call(this, props)), {}, {
// add height visual channel
heightField: null,
heightDomain: [0, 1],
heightScale: 'linear',
// add radius visual channel
radiusField: null,
radiusDomain: [0, 1],
radiusScale: 'linear'
});
}
}, {
key: "getHoverData",
value: function getHoverData(object, allData) {
// index of allData is saved to feature.properties
return allData[object.properties.index];
}
}, {
key: "formatLayerData",
value: function formatLayerData() {}
}, {
key: "renderLayer",
value: function renderLayer(_ref) {
var _this2 = this;
var idx = _ref.idx,
objectHovered = _ref.objectHovered,
datasets = _ref.datasets,
loadEDLinkData = _ref.loadEDLinkData;
var cfg = this.config; // {"field":"Population","operand":"BETWEEN","values":[90,630]}
this.updateLayerConfig({
colorField: {
format: '',
id: 'population',
name: 'Population',
tableFieldIndex: 2,
type: 'integer'
}
});
this.updateLayerDomain(datasets[this.config.dataId]);
var colorField = {
format: '',
id: 'population',
name: 'Population',
tableFieldIndex: 1,
type: 'integer'
};
var cScale = colorField && this.getVisChannelScale('quantize', this.config.colorDomain, colorRange.colors.map(hexToRgb)); // const getFillColor = d => {
// console.log('d', d);
// cScale
// ? this.getEncodedChannelValue(cScale, d.properties[0], colorField)
// : [128, 128, 128];
// };
var tempLayr = new DeckGLMVTLayer({
id: this.id,
idx: idx,
url: this.config.dataId,
filters: datasets[this.config.dataId].filters,
cScale: cScale,
colorField: colorField,
getEncodedChannelValue: function getEncodedChannelValue(cScale, props, colorField) {
return _this2.getEncodedChannelValue(cScale, props, colorField);
},
loadEDLinkData: loadEDLinkData
});
return [tempLayr].concat((0, _toConsumableArray2["default"])(this.isLayerHovered(objectHovered) ? [new DeckGLGeoJsonLayer({
id: "".concat(this.id, "-hovered"),
data: [objectHovered.object],
getLineWidth: 1,
getRadius: 23,
getElevation: 45,
getLineColor: [255, 255, 0],
getFillColor: [0, 255, 255],
stroked: true,
pickable: false,
filled: false
})] : []));
}
}]);
return MVTLayer;
}(_baseLayer["default"]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9sYXllcnMvbXZ0LWxheWVyL212dC1sYXllci5qcyJdLCJuYW1lcyI6WyJtdnRSZXF1aXJlZFVybCIsIm12dFZpc0NvbmZpZ3MiLCJvcGFjaXR5IiwidGhpY2tuZXNzIiwidHlwZSIsImRlZmF1bHRWYWx1ZSIsImxhYmVsIiwiaXNSYW5nZWQiLCJyYW5nZSIsInN0ZXAiLCJncm91cCIsInByb3BlcnR5IiwiY29sb3JSYW5nZSIsInJhZGl1cyIsInNpemVSYW5nZSIsInJhZGl1c1JhbmdlIiwiaGVpZ2h0UmFuZ2UiLCJlbGV2YXRpb25TY2FsZSIsInN0cm9rZWQiLCJmaWxsZWQiLCJlbmFibGUzZCIsIndpcmVmcmFtZSIsIk1WVExheWVyIiwicHJvcHMiLCJkYXRhVG9GZWF0dXJlIiwicmVnaXN0ZXJWaXNDb25maWciLCJNVlRMYXllckljb24iLCJzaXplIiwiY29uZGl0aW9uIiwiY29uZmlnIiwidmlzQ29uZmlnIiwiaGVpZ2h0IiwiZmllbGQiLCJzY2FsZSIsImRvbWFpbiIsImtleSIsImNoYW5uZWxTY2FsZVR5cGUiLCJoZWlnaHRGaWVsZCIsImhlaWdodERvbWFpbiIsImhlaWdodFNjYWxlIiwicmFkaXVzRmllbGQiLCJyYWRpdXNEb21haW4iLCJyYWRpdXNTY2FsZSIsIm9iamVjdCIsImFsbERhdGEiLCJwcm9wZXJ0aWVzIiwiaW5kZXgiLCJpZHgiLCJvYmplY3RIb3ZlcmVkIiwiZGF0YXNldHMiLCJsb2FkRURMaW5rRGF0YSIsImNmZyIsInVwZGF0ZUxheWVyQ29uZmlnIiwiY29sb3JGaWVsZCIsImZvcm1hdCIsImlkIiwibmFtZSIsInRhYmxlRmllbGRJbmRleCIsInVwZGF0ZUxheWVyRG9tYWluIiwiZGF0YUlkIiwiY1NjYWxlIiwiZ2V0VmlzQ2hhbm5lbFNjYWxlIiwiY29sb3JEb21haW4iLCJjb2xvcnMiLCJtYXAiLCJoZXhUb1JnYiIsInRlbXBMYXlyIiwiRGVja0dMTVZUTGF5ZXIiLCJ1cmwiLCJmaWx0ZXJzIiwiZ2V0RW5jb2RlZENoYW5uZWxWYWx1ZSIsImlzTGF5ZXJIb3ZlcmVkIiwiRGVja0dMR2VvSnNvbkxheWVyIiwiZGF0YSIsImdldExpbmVXaWR0aCIsImdldFJhZGl1cyIsImdldEVsZXZhdGlvbiIsImdldExpbmVDb2xvciIsImdldEZpbGxDb2xvciIsInBpY2thYmxlIiwiTGF5ZXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQkE7O0FBQ0E7Ozs7Ozs7Ozs7QUFFTyxJQUFNQSxjQUFjLDRCQUFHLENBQUMsS0FBRCxDQUF2QjtBQUVBLElBQU1DLGFBQWEsMkJBQUc7QUFDM0JDLEVBQUFBLE9BQU8sRUFBRSxTQURrQjtBQUUzQkMsRUFBQUEsU0FBUyxFQUFFO0FBQ1RDLElBQUFBLElBQUksRUFBRSxRQURHO0FBRVRDLElBQUFBLFlBQVksRUFBRSxHQUZMO0FBR1RDLElBQUFBLEtBQUssRUFBRSxjQUhFO0FBSVRDLElBQUFBLFFBQVEsRUFBRSxLQUpEO0FBS1RDLElBQUFBLEtBQUssRUFBRSxDQUFDLENBQUQsRUFBSSxHQUFKLENBTEU7QUFNVEMsSUFBQUEsSUFBSSxFQUFFLEdBTkc7QUFPVEMsSUFBQUEsS0FBSyxFQUFFLFFBUEU7QUFRVEMsSUFBQUEsUUFBUSxFQUFFO0FBUkQsR0FGZ0I7QUFZM0JDLEVBQUFBLFVBQVUsRUFBRSxZQVplO0FBYTNCQyxFQUFBQSxNQUFNLEVBQUUsUUFibUI7QUFlM0JDLEVBQUFBLFNBQVMsRUFBRSxrQkFmZ0I7QUFnQjNCQyxFQUFBQSxXQUFXLEVBQUUsYUFoQmM7QUFpQjNCQyxFQUFBQSxXQUFXLEVBQUUsZ0JBakJjO0FBa0IzQkMsRUFBQUEsY0FBYyxFQUFFLGdCQWxCVztBQW9CM0Isa0JBQWdCLGNBcEJXO0FBcUIzQkMsRUFBQUEsT0FBTyxFQUFFLFNBckJrQjtBQXNCM0JDLEVBQUFBLE1BQU0sRUFBRSxRQXRCbUI7QUF1QjNCQyxFQUFBQSxRQUFRLEVBQUUsVUF2QmlCO0FBd0IzQkMsRUFBQUEsU0FBUyxFQUFFO0FBeEJnQixDQUF0Qjs7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S0ssY0FBTCxDQUFvQnZCLGFBQXBCLElBQ0EsQ0FDRSxJQUFJd0Isa0JBQUosQ0FBdUI7QUFDckJqQixRQUFBQSxFQUFFLFlBQUssS0FBS0EsRUFBVixhQURtQjtBQUVyQmtCLFFBQUFBLElBQUksRUFBRSxDQUFDekIsYUFBYSxDQUFDTCxNQUFmLENBRmU7QUFHckIrQixRQUFBQSxZQUFZLEVBQUUsQ0FITztBQUlyQkMsUUFBQUEsU0FBUyxFQUFFLEVBSlU7QUFLckJDLFFBQUFBLFlBQVksRUFBRSxFQUxPO0FBTXJCQyxRQUFBQSxZQUFZLEVBQUUsQ0FBQyxHQUFELEVBQU0sR0FBTixFQUFXLENBQVgsQ0FOTztBQU9yQkMsUUFBQUEsWUFBWSxFQUFFLENBQUMsQ0FBRCxFQUFJLEdBQUosRUFBUyxHQUFULENBUE87QUFRckI1RCxRQUFBQSxPQUFPLEVBQUUsSUFSWTtBQVNyQjZELFFBQUFBLFFBQVEsRUFBRSxLQVRXO0FBVXJCNUQsUUFBQUEsTUFBTSxFQUFFO0FBVmEsT0FBdkIsQ0FERixDQURBLEdBZUEsRUFqQk47QUFtQkQ7OztFQTVJbUM2RCxxQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAyMyBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCBMYXllciBmcm9tICcuLi9iYXNlLWxheWVyJztcbmltcG9ydCBNVlRMYXllckljb24gZnJvbSAnLi9tdnQtbGF5ZXItaWNvbic7XG5cbmV4cG9ydCBjb25zdCBtdnRSZXF1aXJlZFVybCA9IFsndXJsJ107XG5cbmV4cG9ydCBjb25zdCBtdnRWaXNDb25maWdzID0ge1xuICBvcGFjaXR5OiAnb3BhY2l0eScsXG4gIHRoaWNrbmVzczoge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogMC41LFxuICAgIGxhYmVsOiAnU3Ryb2tlIFdpZHRoJyxcbiAgICBpc1JhbmdlZDogZmFsc2UsXG4gICAgcmFuZ2U6IFswLCAxMDBdLFxuICAgIHN0ZXA6IDAuMSxcbiAgICBncm91cDogJ3N0cm9rZScsXG4gICAgcHJvcGVydHk6ICd0aGlja25lc3MnXG4gIH0sXG4gIGNvbG9yUmFuZ2U6ICdjb2xvclJhbmdlJyxcbiAgcmFkaXVzOiAncmFkaXVzJyxcblxuICBzaXplUmFuZ2U6ICdzdHJva2VXaWR0aFJhbmdlJyxcbiAgcmFkaXVzUmFuZ2U6ICdyYWRpdXNSYW5nZScsXG4gIGhlaWdodFJhbmdlOiAnZWxldmF0aW9uUmFuZ2UnLFxuICBlbGV2YXRpb25TY2FsZTogJ2VsZXZhdGlvblNjYWxlJyxcblxuICAnaGktcHJlY2lzaW9uJzogJ2hpLXByZWNpc2lvbicsXG4gIHN0cm9rZWQ6ICdzdHJva2VkJyxcbiAgZmlsbGVkOiAnZmlsbGVkJyxcbiAgZW5hYmxlM2Q6ICdlbmFibGUzZCcsXG4gIHdpcmVmcmFtZTogJ3dpcmVmcmFtZSdcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1WVExheWVyIGV4dGVuZHMgTGF5ZXIge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcblxuICAgIHRoaXMuZGF0YVRvRmVhdHVyZSA9IHt9O1xuICAgIHRoaXMucmVnaXN0ZXJWaXNDb25maWcobXZ0VmlzQ29uZmlncyk7XG4gIH1cbiAgZ2V0IHR5cGUoKSB7XG4gICAgcmV0dXJuICd0aWxlJztcbiAgfVxuXG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiAndGlsZSc7XG4gIH1cblxuICBnZXQgbGF5ZXJJY29uKCkge1xuICAgIHJldHVybiBNVlRMYXllckljb247XG4gIH1cblxuICBnZXQgcmVxdWlyZWRMYXllckNvbHVtbnMoKSB7XG4gICAgcmV0dXJuIG12dFJlcXVpcmVkVXJsO1xuICB9XG5cbiAgZ2V0IHZpc3VhbENoYW5uZWxzKCkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdXBlci52aXN1YWxDaGFubmVscyxcbiAgICAgIHNpemU6IHtcbiAgICAgICAgLi4uc3VwZXIudmlzdWFsQ2hhbm5lbHMuc2l6ZSxcbiAgICAgICAgcHJvcGVydHk6ICdzdHJva2UnLFxuICAgICAgICBjb25kaXRpb246IGNvbmZpZyA9PiBjb25maWcudmlzQ29uZmlnLnN0cm9rZWRcbiAgICAgIH0sXG4gICAgICBoZWlnaHQ6IHtcbiAgICAgICAgcHJvcGVydHk6ICdoZWlnaHQnLFxuICAgICAgICBmaWVsZDogJ2hlaWdodEZpZWxkJyxcbiAgICAgICAgc2NhbGU6ICdoZWlnaHRTY2FsZScsXG4gICAgICAgIGRvbWFpbjogJ2hlaWdodERvbWFpbicsXG4gICAgICAgIHJhbmdlOiAnaGVpZ2h0UmFuZ2UnLFxuICAgICAgICBrZXk6ICdoZWlnaHQnLFxuICAgICAgICBjaGFubmVsU2NhbGVUeXBlOiAnc2l6ZScsXG4gICAgICAgIGNvbmRpdGlvbjogY29uZmlnID0+IGNvbmZpZy52aXNDb25maWcuZW5hYmxlM2RcbiAgICAgIH0sXG4gICAgICByYWRpdXM6IHtcbiAgICAgICAgcHJvcGVydHk6ICdyYWRpdXMnLFxuICAgICAgICBmaWVsZDogJ3JhZGl1c0ZpZWxkJyxcbiAgICAgICAgc2NhbGU6ICdyYWRpdXNTY2FsZScsXG4gICAgICAgIGRvbWFpbjogJ3JhZGl1c0RvbWFpbicsXG4gICAgICAgIHJhbmdlOiAncmFkaXVzUmFuZ2UnLFxuICAgICAgICBrZXk6ICdyYWRpdXMnLFxuICAgICAgICBjaGFubmVsU2NhbGVUeXBlOiAncmFkaXVzJ1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBnZXREZWZhdWx0TGF5ZXJDb25maWcocHJvcHMgPSB7fSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdXBlci5nZXREZWZhdWx0TGF5ZXJDb25maWcocHJvcHMpLFxuXG4gICAgICAvLyBhZGQgaGVpZ2h0IHZpc3VhbCBjaGFubmVsXG4gICAgICBoZWlnaHRGaWVsZDogbnVsbCxcbiAgICAgIGhlaWdodERvbWFpbjogWzAsIDFdLFxuICAgICAgaGVpZ2h0U2NhbGU6ICdsaW5lYXInLFxuXG4gICAgICAvLyBhZGQgcmFkaXVzIHZpc3VhbCBjaGFubmVsXG4gICAgICByYWRpdXNGaWVsZDogbnVsbCxcbiAgICAgIHJhZGl1c0RvbWFpbjogWzAsIDFdLFxuICAgICAgcmFkaXVzU2NhbGU6ICdsaW5lYXInXG4gICAgfTtcbiAgfVxuXG4gIGdldEhvdmVyRGF0YShvYmplY3QsIGFsbERhdGEpIHtcbiAgICAvLyBpbmRleCBvZiBhbGxEYXRhIGlzIHNhdmVkIHRvIGZlYXR1cmUucHJvcGVydGllc1xuICAgIHJldHVybiBhbGxEYXRhW29iamVjdC5wcm9wZXJ0aWVzLmluZGV4XTtcbiAgfVxuICBmb3JtYXRMYXllckRhdGEoKSB7fVxuXG4gIHJlbmRlckxheWVyKHtpZHgsIG9iamVjdEhvdmVyZWQsIGRhdGFzZXRzLCBsb2FkRURMaW5rRGF0YX0pIHtcbiAgICB2YXIgY2ZnID0gdGhpcy5jb25maWc7XG4gICAgLy8ge1wiZmllbGRcIjpcIlBvcHVsYXRpb25cIixcIm9wZXJhbmRcIjpcIkJFVFdFRU5cIixcInZhbHVlc1wiOls5MCw2MzBdfVxuXG4gICAgdGhpcy51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICBjb2xvckZpZWxkOiB7XG4gICAgICAgIGZvcm1hdDogJycsXG4gICAgICAgIGlkOiAncG9wdWxhdGlvbicsXG4gICAgICAgIG5hbWU6ICdQb3B1bGF0aW9uJyxcbiAgICAgICAgdGFibGVGaWVsZEluZGV4OiAyLFxuICAgICAgICB0eXBlOiAnaW50ZWdlcidcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZUxheWVyRG9tYWluKGRhdGFzZXRzW3RoaXMuY29uZmlnLmRhdGFJZF0pO1xuICAgIGNvbnN0IGNvbG9yRmllbGQgPSB7XG4gICAgICBmb3JtYXQ6ICcnLFxuICAgICAgaWQ6ICdwb3B1bGF0aW9uJyxcbiAgICAgIG5hbWU6ICdQb3B1bGF0aW9uJyxcbiAgICAgIHRhYmxlRmllbGRJbmRleDogMSxcbiAgICAgIHR5cGU6ICdpbnRlZ2VyJ1xuICAgIH07XG4gICAgY29uc3QgY1NjYWxlID1cbiAgICAgIGNvbG9yRmllbGQgJiZcbiAgICAgIHRoaXMuZ2V0VmlzQ2hhbm5lbFNjYWxlKFxuICAgICAgICAncXVhbnRpemUnLFxuICAgICAgICB0aGlzLmNvbmZpZy5jb2xvckRvbWFpbixcbiAgICAgICAgY29sb3JSYW5nZS5jb2xvcnMubWFwKGhleFRvUmdiKVxuICAgICAgKTtcbiAgICAvLyBjb25zdCBnZXRGaWxsQ29sb3IgPSBkID0+IHtcbiAgICAvLyAgIGNvbnNvbGUubG9nKCdkJywgZCk7XG4gICAgLy8gICBjU2NhbGVcbiAgICAvLyAgICAgPyB0aGlzLmdldEVuY29kZWRDaGFubmVsVmFsdWUoY1NjYWxlLCBkLnByb3BlcnRpZXNbMF0sIGNvbG9yRmllbGQpXG4gICAgLy8gICAgIDogWzEyOCwgMTI4LCAxMjhdO1xuICAgIC8vIH07XG4gICAgdmFyIHRlbXBMYXlyID0gbmV3IERlY2tHTE1WVExheWVyKHtcbiAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgaWR4LFxuICAgICAgdXJsOiB0aGlzLmNvbmZpZy5kYXRhSWQsXG4gICAgICBmaWx0ZXJzOiBkYXRhc2V0c1t0aGlzLmNvbmZpZy5kYXRhSWRdLmZpbHRlcnMsXG4gICAgICBjU2NhbGUsXG4gICAgICBjb2xvckZpZWxkLFxuICAgICAgZ2V0RW5jb2RlZENoYW5uZWxWYWx1ZTogKGNTY2FsZSwgcHJvcHMsIGNvbG9yRmllbGQpID0+XG4gICAgICAgIHRoaXMuZ2V0RW5jb2RlZENoYW5uZWxWYWx1ZShjU2NhbGUsIHByb3BzLCBjb2xvckZpZWxkKSxcbiAgICAgIGxvYWRFRExpbmtEYXRhXG4gICAgfSk7XG5cbiAgICByZXR1cm4gW1xuICAgICAgdGVtcExheXIsXG4gICAgICAuLi4odGhpcy5pc0xheWVySG92ZXJlZChvYmplY3RIb3ZlcmVkKVxuICAgICAgICA/IFtcbiAgICAgICAgICAgIG5ldyBEZWNrR0xHZW9Kc29uTGF5ZXIoe1xuICAgICAgICAgICAgICBpZDogYCR7dGhpcy5pZH0taG92ZXJlZGAsXG4gICAgICAgICAgICAgIGRhdGE6IFtvYmplY3RIb3ZlcmVkLm9iamVjdF0sXG4gICAgICAgICAgICAgIGdldExpbmVXaWR0aDogMSxcbiAgICAgICAgICAgICAgZ2V0UmFkaXVzOiAyMyxcbiAgICAgICAgICAgICAgZ2V0RWxldmF0aW9uOiA0NSxcbiAgICAgICAgICAgICAgZ2V0TGluZUNvbG9yOiBbMjU1LCAyNTUsIDBdLFxuICAgICAgICAgICAgICBnZXRGaWxsQ29sb3I6IFswLCAyNTUsIDI1NV0sXG4gICAgICAgICAgICAgIHN0cm9rZWQ6IHRydWUsXG4gICAgICAgICAgICAgIHBpY2thYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgZmlsbGVkOiBmYWxzZVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdXG4gICAgICAgIDogW10pXG4gICAgXTtcbiAgfVxufVxuIl19