kepler.gl.geoiq
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
187 lines (150 loc) • 24.5 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
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 _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
var _react = _interopRequireWildcard(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _reactAnythingSortable = _interopRequireDefault(require("react-anything-sortable"));
var _styledComponents = _interopRequireDefault(require("styled-components"));
var _reselect = require("reselect");
var _widgetPanel = _interopRequireDefault(require("./widget-panel/widget-panel"));
var _sourceDataCatalog = _interopRequireDefault(require("./common/source-data-catalog"));
var _icons = require("../common/icons");
var _styledComponents2 = require("../common/styled-components");
var _templateObject;
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
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 StyledSortable = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n .ui-sortable {\n display: block;\n position: relative;\n overflow: visible;\n user-select: none;\n\n :before {\n content: ' ';\n display: table;\n }\n\n :after {\n content: ' ';\n display: table;\n }\n }\n\n .ui-sortable-item.ui-sortable-dragging {\n position: absolute;\n z-index: 1688;\n cursor: move;\n }\n\n .ui-sortable-item.ui-sortable-dragging:hover {\n cursor: move;\n opacity: 0.5;\n }\n\n .ui-sortable-placeholder {\n display: none;\n }\n\n .ui-sortable-placeholder.visible {\n display: block;\n opacity: 0;\n z-index: -1;\n }\n"])));
WidgetManagerFactory.deps = [_widgetPanel["default"], _sourceDataCatalog["default"]];
function WidgetManagerFactory(WidgetPanel, SourceDataCatalog) {
var _class, _temp;
return _temp = _class = /*#__PURE__*/function (_Component) {
(0, _inherits2["default"])(WidgetManager, _Component);
var _super = _createSuper(WidgetManager);
function WidgetManager() {
var _this;
(0, _classCallCheck2["default"])(this, WidgetManager);
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
_this = _super.call.apply(_super, [this].concat(args));
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "widgetClassSelector", function (props) {
return props.widgetClasses;
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "widgetTypeOptionsSelector", (0, _reselect.createSelector)(_this.widgetClassSelector, function (widgetClasses) {
return Object.keys(widgetClasses).map(function (key) {
var widget = new widgetClasses[key]();
return {
id: key,
label: widget.name,
icon: widget.widgetIcon
};
});
}));
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_addEmptyNewWidget", function () {
_this.props.addWidget();
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_handleSort", function (order) {
_this.props.updateWidgetOrder(order);
});
return _this;
}
(0, _createClass2["default"])(WidgetManager, [{
key: "render",
value: function render() {
var _this$props = this.props,
widgets = _this$props.widgets,
layers = _this$props.layers,
datasets = _this$props.datasets,
widgetOrder = _this$props.widgetOrder,
openModal = _this$props.openModal,
mapState = _this$props.mapState,
filters = _this$props.filters,
auth = _this$props.auth,
project = _this$props.project;
var hadDataset = Object.keys(datasets).length;
var hadEmptyWidget = widgets.some(function (w) {
return !w.name;
});
var widgetTypeOptions = this.widgetTypeOptionsSelector(this.props);
var widgetActions = {
widgetConfigChange: this.props.widgetConfigChange,
widgetVisualChannelConfigChange: this.props.widgetVisualChannelConfigChange,
widgetTypeChange: this.props.widgetTypeChange,
widgetVisConfigChange: this.props.widgetVisConfigChange,
removeWidget: this.props.removeWidget
};
var panelProps = {
datasets: datasets,
openModal: openModal,
widgetTypeOptions: widgetTypeOptions
};
return (/*#__PURE__*/_react["default"].createElement(StyledSortable, {
className: "widget-manager"
}, /*#__PURE__*/_react["default"].createElement(SourceDataCatalog, {
datasets: datasets,
showDatasetTable: this.props.showDatasetTable
}), /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelDivider, null), /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, null, /*#__PURE__*/_react["default"].createElement(_reactAnythingSortable["default"], {
onSort: this._handleSort,
direction: "vertical",
sortHandle: "sort--handle",
dynamic: true
}, widgetOrder.map(function (idx) {
return (/*#__PURE__*/_react["default"].createElement(WidgetPanel, (0, _extends2["default"])({}, panelProps, widgetActions, {
sortData: idx,
key: widgets[idx].id,
idx: idx,
widget: widgets[idx],
layers: layers,
filters: filters,
mapState: mapState,
auth: auth,
project: project
}))
);
}))), /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.Button, {
inactive: hadEmptyWidget || !hadDataset,
onClick: this._addEmptyNewWidget,
width: "auto"
}, /*#__PURE__*/_react["default"].createElement(_icons.Add, {
height: "12px"
}), "Add Widget")))
);
}
}]);
return WidgetManager;
}(_react.Component), (0, _defineProperty2["default"])(_class, "propTypes", {
addWidget: _propTypes["default"].func.isRequired,
datasets: _propTypes["default"].object.isRequired,
widgetClasses: _propTypes["default"].object.isRequired,
widgets: _propTypes["default"].arrayOf(_propTypes["default"].any).isRequired,
widgetConfigChange: _propTypes["default"].func.isRequired,
widgetVisualChannelConfigChange: _propTypes["default"].func.isRequired,
widgetTypeChange: _propTypes["default"].func.isRequired,
widgetVisConfigChange: _propTypes["default"].func.isRequired,
// layers: propTypes.arrayOf(propTypes.any),
openModal: _propTypes["default"].func.isRequired,
removeWidget: _propTypes["default"].func.isRequired,
showDatasetTable: _propTypes["default"].func.isRequired,
updateWidgetOrder: _propTypes["default"].func.isRequired,
mapState: _propTypes["default"].object.isRequired,
auth: _propTypes["default"].object.isRequired,
project: _propTypes["default"].object.isRequired
}), _temp;
}
var _default = exports["default"] = WidgetManagerFactory;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NpZGUtcGFuZWwvd2lkZ2V0LW1hbmFnZXIuanMiXSwibmFtZXMiOlsiU3R5bGVkU29ydGFibGUiLCJzdHlsZWQiLCJkaXYiLCJXaWRnZXRNYW5hZ2VyRmFjdG9yeSIsImRlcHMiLCJXaWRnZXRQYW5lbEZhY3RvcnkiLCJTb3VyY2VEYXRhQ2F0YWxvZ0ZhY3RvcnkiLCJXaWRnZXRQYW5lbCIsIlNvdXJjZURhdGFDYXRhbG9nIiwicHJvcHMiLCJ3aWRnZXRDbGFzc2VzIiwid2lkZ2V0Q2xhc3NTZWxlY3RvciIsIk9iamVjdCIsImtleXMiLCJtYXAiLCJrZXkiLCJ3aWRnZXQiLCJpZCIsImxhYmVsIiwibmFtZSIsImljb24iLCJ3aWRnZXRJY29uIiwiYWRkV2lkZ2V0Iiwib3JkZXIiLCJ1cGRhdGVXaWRnZXRPcmRlciIsIndpZGdldHMiLCJsYXllcnMiLCJkYXRhc2V0cyIsIndpZGdldE9yZGVyIiwib3Blbk1vZGFsIiwibWFwU3RhdGUiLCJmaWx0ZXJzIiwiYXV0aCIsInByb2plY3QiLCJoYWREYXRhc2V0IiwibGVuZ3RoIiwiaGFkRW1wdHlXaWRnZXQiLCJzb21lIiwidyIsIndpZGdldFR5cGVPcHRpb25zIiwid2lkZ2V0VHlwZU9wdGlvbnNTZWxlY3RvciIsIndpZGdldEFjdGlvbnMiLCJ3aWRnZXRDb25maWdDaGFuZ2UiLCJ3aWRnZXRWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlIiwid2lkZ2V0VHlwZUNoYW5nZSIsIndpZGdldFZpc0NvbmZpZ0NoYW5nZSIsInJlbW92ZVdpZGdldCIsInBhbmVsUHJvcHMiLCJzaG93RGF0YXNldFRhYmxlIiwiX2hhbmRsZVNvcnQiLCJpZHgiLCJfYWRkRW1wdHlOZXdXaWRnZXQiLCJDb21wb25lbnQiLCJQcm9wVHlwZXMiLCJmdW5jIiwiaXNSZXF1aXJlZCIsIm9iamVjdCIsImFycmF5T2YiLCJhbnkiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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eURBQ3FCO0FBQ2pCOUIsSUFBQUEsU0FBUyxFQUFFK0Isc0JBQVVDLElBQVYsQ0FBZUMsVUFEVDtBQUVqQjVCLElBQUFBLFFBQVEsRUFBRTBCLHNCQUFVRyxNQUFWLENBQWlCRCxVQUZWO0FBR2pCN0MsSUFBQUEsYUFBYSxFQUFFMkMsc0JBQVVHLE1BQVYsQ0FBaUJELFVBSGY7QUFJakI5QixJQUFBQSxPQUFPLEVBQUU0QixzQkFBVUksT0FBVixDQUFrQkosc0JBQVVLLEdBQTVCLEVBQWlDSCxVQUp6QjtBQUtqQmIsSUFBQUEsa0JBQWtCLEVBQUVXLHNCQUFVQyxJQUFWLENBQWVDLFVBTGxCO0FBTWpCWixJQUFBQSwrQkFBK0IsRUFBRVUsc0JBQVVDLElBQVYsQ0FBZUMsVUFOL0I7QUFPakJYLElBQUFBLGdCQUFnQixFQUFFUyxzQkFBVUMsSUFBVixDQUFlQyxVQVBoQjtBQVFqQlYsSUFBQUEscUJBQXFCLEVBQUVRLHNCQUFVQyxJQUFWLENBQWVDLFVBUnJCO0FBU2pCO0FBQ0ExQixJQUFBQSxTQUFTLEVBQUV3QixzQkFBVUMsSUFBVixDQUFlQyxVQVZUO0FBV2pCVCxJQUFBQSxZQUFZLEVBQUVPLHNCQUFVQyxJQUFWLENBQWVDLFVBWFo7QUFZakJQLElBQUFBLGdCQUFnQixFQUFFSyxzQkFBVUMsSUFBVixDQUFlQyxVQVpoQjtBQWFqQi9CLElBQUFBLGlCQUFpQixFQUFFNkIsc0JBQVVDLElBQVYsQ0FBZUMsVUFiakI7QUFjakJ6QixJQUFBQSxRQUFRLEVBQUV1QixzQkFBVUcsTUFBVixDQUFpQkQsVUFkVjtBQWVqQnZCLElBQUFBLElBQUksRUFBRXFCLHNCQUFVRyxNQUFWLENBQWlCRCxVQWZOO0FBZ0JqQnRCLElBQUFBLE9BQU8sRUFBRW9CLHNCQUFVRyxNQUFWLENBQWlCRDtBQWhCVCxHQURyQjtBQWlIRDs7b0NBRWNwRCxvQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAyMyBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCBSZWFjdCwge0NvbXBvbmVudH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBTb3J0YWJsZSBmcm9tICdyZWFjdC1hbnl0aGluZy1zb3J0YWJsZSc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7Y3JlYXRlU2VsZWN0b3J9IGZyb20gJ3Jlc2VsZWN0JztcblxuaW1wb3J0IFdpZGdldFBhbmVsRmFjdG9yeSBmcm9tICcuL3dpZGdldC1wYW5lbC93aWRnZXQtcGFuZWwnO1xuaW1wb3J0IFNvdXJjZURhdGFDYXRhbG9nRmFjdG9yeSBmcm9tICcuL2NvbW1vbi9zb3VyY2UtZGF0YS1jYXRhbG9nJztcbmltcG9ydCB7QWRkfSBmcm9tICdjb21wb25lbnRzL2NvbW1vbi9pY29ucyc7XG5pbXBvcnQge1xuICBTaWRlUGFuZWxEaXZpZGVyLFxuICBTaWRlUGFuZWxTZWN0aW9uLFxuICBCdXR0b25cbn0gZnJvbSAnY29tcG9uZW50cy9jb21tb24vc3R5bGVkLWNvbXBvbmVudHMnO1xuXG5jb25zdCBTdHlsZWRTb3J0YWJsZSA9IHN0eWxlZC5kaXZgXG4gIC51aS1zb3J0YWJsZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuICAgIHVzZXItc2VsZWN0OiBub25lO1xuXG4gICAgOmJlZm9yZSB7XG4gICAgICBjb250ZW50OiAnICc7XG4gICAgICBkaXNwbGF5OiB0YWJsZTtcbiAgICB9XG5cbiAgICA6YWZ0ZXIge1xuICAgICAgY29udGVudDogJyAnO1xuICAgICAgZGlzcGxheTogdGFibGU7XG4gICAgfVxuICB9XG5cbiAgLnVpLXNvcnRhYmxlLWl0ZW0udWktc29ydGFibGUtZHJhZ2dpbmcge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB6LWluZGV4OiAxNjg4O1xuICAgIGN1cnNvcjogbW92ZTtcbiAgfVxuXG4gIC51aS1zb3J0YWJsZS1pdGVtLnVpLXNvcnRhYmxlLWRyYWdnaW5nOmhvdmVyIHtcbiAgICBjdXJzb3I6IG1vdmU7XG4gICAgb3BhY2l0eTogMC41O1xuICB9XG5cbiAgLnVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgLnVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyLnZpc2libGUge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG9wYWNpdHk6IDA7XG4gICAgei1pbmRleDogLTE7XG4gIH1cbmA7XG5cbldpZGdldE1hbmFnZXJGYWN0b3J5LmRlcHMgPSBbV2lkZ2V0UGFuZWxGYWN0b3J5LCBTb3VyY2VEYXRhQ2F0YWxvZ0ZhY3RvcnldO1xuXG5mdW5jdGlvbiBXaWRnZXRNYW5hZ2VyRmFjdG9yeShXaWRnZXRQYW5lbCwgU291cmNlRGF0YUNhdGFsb2cpIHtcbiAgcmV0dXJuIGNsYXNzIFdpZGdldE1hbmFnZXIgZXh0ZW5kcyBDb21wb25lbnQge1xuICAgIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgICBhZGRXaWRnZXQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgICBkYXRhc2V0czogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICAgICAgd2lkZ2V0Q2xhc3NlczogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICAgICAgd2lkZ2V0czogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmFueSkuaXNSZXF1aXJlZCxcbiAgICAgIHdpZGdldENvbmZpZ0NoYW5nZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICAgIHdpZGdldFZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgICB3aWRnZXRUeXBlQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgICAgd2lkZ2V0VmlzQ29uZmlnQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgICAgLy8gbGF5ZXJzOiBwcm9wVHlwZXMuYXJyYXlPZihwcm9wVHlwZXMuYW55KSxcbiAgICAgIG9wZW5Nb2RhbDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICAgIHJlbW92ZVdpZGdldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICAgIHNob3dEYXRhc2V0VGFibGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgICB1cGRhdGVXaWRnZXRPcmRlcjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICAgIG1hcFN0YXRlOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gICAgICBhdXRoOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gICAgICBwcm9qZWN0OiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWRcbiAgICB9O1xuXG4gICAgd2lkZ2V0Q2xhc3NTZWxlY3RvciA9IHByb3BzID0+IHByb3BzLndpZGdldENsYXNzZXM7XG4gICAgd2lkZ2V0VHlwZU9wdGlvbnNTZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgdGhpcy53aWRnZXRDbGFzc1NlbGVjdG9yLFxuICAgICAgd2lkZ2V0Q2xhc3NlcyA9PlxuICAgICAgICBPYmplY3Qua2V5cyh3aWRnZXRDbGFzc2VzKS5tYXAoa2V5ID0+IHtcbiAgICAgICAgICBjb25zdCB3aWRnZXQgPSBuZXcgd2lkZ2V0Q2xhc3Nlc1trZXldKCk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlkOiBrZXksXG4gICAgICAgICAgICBsYWJlbDogd2lkZ2V0Lm5hbWUsXG4gICAgICAgICAgICBpY29uOiB3aWRnZXQud2lkZ2V0SWNvblxuICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgKTtcblxuICAgIF9hZGRFbXB0eU5ld1dpZGdldCA9ICgpID0+IHtcbiAgICAgIHRoaXMucHJvcHMuYWRkV2lkZ2V0KCk7XG4gICAgfTtcblxuICAgIF9oYW5kbGVTb3J0ID0gb3JkZXIgPT4ge1xuICAgICAgdGhpcy5wcm9wcy51cGRhdGVXaWRnZXRPcmRlcihvcmRlcik7XG4gICAgfTtcblxuICAgIHJlbmRlcigpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgd2lkZ2V0cyxcbiAgICAgICAgbGF5ZXJzLFxuICAgICAgICBkYXRhc2V0cyxcbiAgICAgICAgd2lkZ2V0T3JkZXIsXG4gICAgICAgIG9wZW5Nb2RhbCxcbiAgICAgICAgbWFwU3RhdGUsXG4gICAgICAgIGZpbHRlcnMsXG4gICAgICAgIGF1dGgsXG4gICAgICAgIHByb2plY3RcbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgaGFkRGF0YXNldCA9IE9iamVjdC5rZXlzKGRhdGFzZXRzKS5sZW5ndGg7XG4gICAgICBjb25zdCBoYWRFbXB0eVdpZGdldCA9IHdpZGdldHMuc29tZSh3ID0+ICF3Lm5hbWUpO1xuICAgICAgY29uc3Qgd2lkZ2V0VHlwZU9wdGlvbnMgPSB0aGlzLndpZGdldFR5cGVPcHRpb25zU2VsZWN0b3IodGhpcy5wcm9wcyk7XG5cbiAgICAgIGNvbnN0IHdpZGdldEFjdGlvbnMgPSB7XG4gICAgICAgIHdpZGdldENvbmZpZ0NoYW5nZTogdGhpcy5wcm9wcy53aWRnZXRDb25maWdDaGFuZ2UsXG4gICAgICAgIHdpZGdldFZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2U6IHRoaXMucHJvcHNcbiAgICAgICAgICAud2lkZ2V0VmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSxcbiAgICAgICAgd2lkZ2V0VHlwZUNoYW5nZTogdGhpcy5wcm9wcy53aWRnZXRUeXBlQ2hhbmdlLFxuICAgICAgICB3aWRnZXRWaXNDb25maWdDaGFuZ2U6IHRoaXMucHJvcHMud2lkZ2V0VmlzQ29uZmlnQ2hhbmdlLFxuICAgICAgICByZW1vdmVXaWRnZXQ6IHRoaXMucHJvcHMucmVtb3ZlV2lkZ2V0XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBwYW5lbFByb3BzID0ge2RhdGFzZXRzLCBvcGVuTW9kYWwsIHdpZGdldFR5cGVPcHRpb25zfTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTdHlsZWRTb3J0YWJsZSBjbGFzc05hbWU9XCJ3aWRnZXQtbWFuYWdlclwiPlxuICAgICAgICAgIDxTb3VyY2VEYXRhQ2F0YWxvZ1xuICAgICAgICAgICAgZGF0YXNldHM9e2RhdGFzZXRzfVxuICAgICAgICAgICAgc2hvd0RhdGFzZXRUYWJsZT17dGhpcy5wcm9wcy5zaG93RGF0YXNldFRhYmxlfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPFNpZGVQYW5lbERpdmlkZXIgLz5cbiAgICAgICAgICA8U2lkZVBhbmVsU2VjdGlvbj5cbiAgICAgICAgICAgIDxTb3J0YWJsZVxuICAgICAgICAgICAgICBvblNvcnQ9e3RoaXMuX2hhbmRsZVNvcnR9XG4gICAgICAgICAgICAgIGRpcmVjdGlvbj1cInZlcnRpY2FsXCJcbiAgICAgICAgICAgICAgc29ydEhhbmRsZT1cInNvcnQtLWhhbmRsZVwiXG4gICAgICAgICAgICAgIGR5bmFtaWNcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3dpZGdldE9yZGVyLm1hcChpZHggPT4gKFxuICAgICAgICAgICAgICAgIDxXaWRnZXRQYW5lbFxuICAgICAgICAgICAgICAgICAgey4uLnBhbmVsUHJvcHN9XG4gICAgICAgICAgICAgICAgICB7Li4ud2lkZ2V0QWN0aW9uc31cbiAgICAgICAgICAgICAgICAgIHNvcnREYXRhPXtpZHh9XG4gICAgICAgICAgICAgICAgICBrZXk9e3dpZGdldHNbaWR4XS5pZH1cbiAgICAgICAgICAgICAgICAgIGlkeD17aWR4fVxuICAgICAgICAgICAgICAgICAgd2lkZ2V0PXt3aWRnZXRzW2lkeF19XG4gICAgICAgICAgICAgICAgICBsYXllcnM9e2xheWVyc31cbiAgICAgICAgICAgICAgICAgIGZpbHRlcnM9e2ZpbHRlcnN9XG4gICAgICAgICAgICAgICAgICBtYXBTdGF0ZT17bWFwU3RhdGV9XG4gICAgICAgICAgICAgICAgICBhdXRoPXthdXRofVxuICAgICAgICAgICAgICAgICAgcHJvamVjdD17cHJvamVjdH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvU29ydGFibGU+XG4gICAgICAgICAgPC9TaWRlUGFuZWxTZWN0aW9uPlxuICAgICAgICAgIDxTaWRlUGFuZWxTZWN0aW9uPlxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICBpbmFjdGl2ZT17aGFkRW1wdHlXaWRnZXQgfHwgIWhhZERhdGFzZXR9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuX2FkZEVtcHR5TmV3V2lkZ2V0fVxuICAgICAgICAgICAgICB3aWR0aD1cImF1dG9cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8QWRkIGhlaWdodD1cIjEycHhcIiAvPlxuICAgICAgICAgICAgICBBZGQgV2lkZ2V0XG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICA8L1NpZGVQYW5lbFNlY3Rpb24+XG4gICAgICAgIDwvU3R5bGVkU29ydGFibGU+XG4gICAgICApO1xuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgV2lkZ2V0TWFuYWdlckZhY3Rvcnk7XG4iXX0=