kepler.gl.geoiq
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
200 lines (164 loc) • 23 kB
JavaScript
"use strict";
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
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 _styledComponents = _interopRequireDefault(require("styled-components"));
var _exportImageUtils = require("../../utils/export-image-utils");
var _defaultSettings = require("../../constants/default-settings");
var _loadingSpinner = _interopRequireDefault(require("../common/loading-spinner"));
var _styledComponents2 = require("../common/styled-components");
var _switch = _interopRequireDefault(require("../common/switch"));
function _templateObject3() {
var data = (0, _taggedTemplateLiteral2["default"])(["\n border-radius: 2px;\n border: 1px solid ", ";\n color: ", ";\n cursor: pointer;\n font-weight: 500;\n margin-right: 6px;\n padding: 6px 10px;\n\n :hover {\n color: ", ";\n border: 1px solid ", ";\n }\n"]);
_templateObject3 = function _templateObject3() {
return data;
};
return data;
}
function _templateObject2() {
var data = (0, _taggedTemplateLiteral2["default"])(["\n align-items: center;\n display: flex;\n flex-direction: column;\n flex: 1;\n justify-content: center;\n padding: 30px;\n\n .dimension, .instruction {\n padding: 8px 0px;\n }\n\n .preview-image {\n background: #e2e2e2;\n border-radius: 4px;\n box-shadow: 0 8px 16px 0 rgba(0,0,0,0.18);\n width: 100%;\n padding-bottom: ", ";\n position: relative;\n }\n\n .preview-image-placeholder {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n\n .preview-image-spinner {\n position: absolute;\n left: calc(50% - 25px);\n top: calc(50% - 25px);\n }\n"]);
_templateObject2 = function _templateObject2() {
return data;
};
return data;
}
function _templateObject() {
var data = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: column;\n justify-content: space-around;\n width: 250px;\n\n .image-option-section {\n .image-option-section-title {\n font-weight: 500;\n font-size: 14px;\n }\n }\n\n .button-list {\n display: flex;\n flex-direction: row;\n padding: 8px 0px;\n }\n\n input {\n margin-right: 8px;\n }\n"]);
_templateObject = function _templateObject() {
return data;
};
return data;
}
var ImageOptionList = _styledComponents["default"].div(_templateObject());
var PreviewImageSection = _styledComponents["default"].div(_templateObject2(), function (props) {
return props.ratio === _defaultSettings.RATIOS.SCREEN ? "".concat(100 * props.height / props.width, "%") : props.ratio === _defaultSettings.RATIOS.SIXTEEN_BY_NINE ? '56.25%' : '75%';
});
var Button = _styledComponents["default"].div(_templateObject3(), function (props) {
return props.selected ? props.theme.primaryBtnBgd : props.theme.selectBorderColorLT;
}, function (props) {
return props.selected ? props.theme.primaryBtnBgd : props.theme.selectBorderColorLT;
}, function (props) {
return props.available && props.theme.primaryBtnBgd;
}, function (props) {
return props.available && props.theme.primaryBtnBgd;
});
var ExportImageModal =
/*#__PURE__*/
function (_Component) {
(0, _inherits2["default"])(ExportImageModal, _Component);
function ExportImageModal() {
(0, _classCallCheck2["default"])(this, ExportImageModal);
return (0, _possibleConstructorReturn2["default"])(this, (0, _getPrototypeOf2["default"])(ExportImageModal).apply(this, arguments));
}
(0, _createClass2["default"])(ExportImageModal, [{
key: "render",
value: function render() {
var _this$props = this.props,
height = _this$props.height,
legend = _this$props.legend,
ratio = _this$props.ratio,
resolution = _this$props.resolution,
width = _this$props.width,
exporting = _this$props.exporting,
imageDataUri = _this$props.imageDataUri,
onChangeRatio = _this$props.onChangeRatio,
onChangeResolution = _this$props.onChangeResolution,
onToggleLegend = _this$props.onToggleLegend;
var exportImageSize = (0, _exportImageUtils.calculateExportImageSize)({
width: width,
height: height,
ratio: ratio,
resolution: resolution
});
return _react["default"].createElement("div", {
className: "export-image-modal"
}, _react["default"].createElement(_styledComponents2.StyledModalContent, null, _react["default"].createElement(ImageOptionList, null, _react["default"].createElement("div", {
className: "image-option-section"
}, _react["default"].createElement("div", {
className: "image-option-section-title"
}, "Ratio"), "Choose the ratio for various usages.", _react["default"].createElement("div", {
className: "button-list"
}, _defaultSettings.RATIO_OPTIONS.map(function (op) {
return _react["default"].createElement(Button, {
key: op.id,
selected: ratio === op.id,
onClick: function onClick() {
return onChangeRatio({
ratio: op.id
});
}
}, op.label);
}))), _react["default"].createElement("div", {
className: "image-option-section"
}, _react["default"].createElement("div", {
className: "image-option-section-title"
}, "Resolution"), "High resolution is better for prints.", _react["default"].createElement("div", {
className: "button-list"
}, _defaultSettings.RESOLUTION_OPTIONS.map(function (op) {
return _react["default"].createElement(Button, {
key: op.id,
selected: resolution === op.id,
onClick: function onClick() {
return op.available && onChangeResolution({
resolution: op.id
});
}
}, op.label);
}))), _react["default"].createElement("div", {
className: "image-option-section"
}, _react["default"].createElement("div", {
className: "image-option-section-title"
}, "Map Legend"), _react["default"].createElement(_switch["default"], {
type: "checkbox",
id: "add-map-legend",
checked: legend,
label: "Add legend on map",
onChange: onToggleLegend
}))), _react["default"].createElement(PreviewImageSection, {
ratio: ratio,
width: width,
height: height
}, _react["default"].createElement("div", {
className: "dimension"
}, "".concat(exportImageSize.width, " x ").concat(exportImageSize.height)), _react["default"].createElement("div", {
className: "preview-image"
}, exporting ? _react["default"].createElement("div", {
className: "preview-image-spinner"
}, _react["default"].createElement(_loadingSpinner["default"], null)) : _react["default"].createElement("img", {
className: "preview-image-placeholder",
src: imageDataUri
})))));
}
}]);
return ExportImageModal;
}(_react.Component);
(0, _defineProperty2["default"])(ExportImageModal, "propTypes", {
height: _propTypes["default"].number.isRequired,
ratio: _propTypes["default"].string.isRequired,
resolution: _propTypes["default"].string.isRequired,
width: _propTypes["default"].number.isRequired,
exporting: _propTypes["default"].bool.isRequired,
imageDataUri: _propTypes["default"].string,
// callbacks
onChangeRatio: _propTypes["default"].func.isRequired,
onChangeResolution: _propTypes["default"].func.isRequired,
onToggleLegend: _propTypes["default"].func.isRequired
});
var ExportImageModalFactory = function ExportImageModalFactory() {
return ExportImageModal;
};
var _default = ExportImageModalFactory;
exports["default"] = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21vZGFscy9leHBvcnQtaW1hZ2UtbW9kYWwuanMiXSwibmFtZXMiOlsiSW1hZ2VPcHRpb25MaXN0Iiwic3R5bGVkIiwiZGl2IiwiUHJldmlld0ltYWdlU2VjdGlvbiIsInByb3BzIiwicmF0aW8iLCJSQVRJT1MiLCJTQ1JFRU4iLCJoZWlnaHQiLCJ3aWR0aCIsIlNJWFRFRU5fQllfTklORSIsIkJ1dHRvbiIsInNlbGVjdGVkIiwidGhlbWUiLCJwcmltYXJ5QnRuQmdkIiwic2VsZWN0Qm9yZGVyQ29sb3JMVCIsImF2YWlsYWJsZSIsIkV4cG9ydEltYWdlTW9kYWwiLCJsZWdlbmQiLCJyZXNvbHV0aW9uIiwiZXhwb3J0aW5nIiwiaW1hZ2VEYXRhVXJpIiwib25DaGFuZ2VSYXRpbyIsIm9uQ2hhbmdlUmVzb2x1dGlvbiIsIm9uVG9nZ2xlTGVnZW5kIiwiZXhwb3J0SW1hZ2VTaXplIiwiUkFUSU9fT1BUSU9OUyIsIm1hcCIsIm9wIiwiaWQiLCJsYWJlbCIsIlJFU09MVVRJT05fT1BUSU9OUyIsIkNvbXBvbmVudCIsIlByb3BUeXBlcyIsIm51bWJlciIsImlzUmVxdWlyZWQiLCJzdHJpbmciLCJib29sIiwiZnVuYyIsIkV4cG9ydEltYWdlTW9kYWxGYWN0b3J5Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBb0JBOztBQUNBOztBQUNBOztBQUVBOztBQUNBOztBQUtBOztBQUNBOztBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLElBQU1BLGVBQWUsR0FBR0MsNkJBQU9DLEdBQVYsbUJBQXJCOztBQXdCQSxJQUFNQyxtQkFBbUIsR0FBR0YsNkJBQU9DLEdBQVYscUJBaUJILFVBQUFFLEtBQUs7QUFBQSxTQUFJQSxLQUFLLENBQUNDLEtBQU4sS0FBZ0JDLHdCQUFPQyxNQUF2QixhQUN0QixNQUFNSCxLQUFLLENBQUNJLE1BQVosR0FBbUJKLEtBQUssQ0FBQ0ssS0FESCxT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LE1BQVYsQ0FBaUJELFVBSFo7QUFJakIxQixFQUFBQSxLQUFLLEVBQUV3QixzQkFBVUMsTUFBVixDQUFpQkMsVUFKUDtBQUtqQmYsRUFBQUEsU0FBUyxFQUFFYSxzQkFBVUksSUFBVixDQUFlRixVQUxUO0FBTWpCZCxFQUFBQSxZQUFZLEVBQUVZLHNCQUFVRyxNQU5QO0FBT2pCO0FBQ0FkLEVBQUFBLGFBQWEsRUFBRVcsc0JBQVVLLElBQVYsQ0FBZUgsVUFSYjtBQVNqQlosRUFBQUEsa0JBQWtCLEVBQUVVLHNCQUFVSyxJQUFWLENBQWVILFVBVGxCO0FBVWpCWCxFQUFBQSxjQUFjLEVBQUVTLHNCQUFVSyxJQUFWLENBQWVIO0FBVmQsQzs7QUEwRnJCLElBQU1JLHVCQUF1QixHQUFHLFNBQTFCQSx1QkFBMEI7QUFBQSxTQUFNdEIsZ0JBQU47QUFBQSxDQUFoQzs7ZUFDZXNCLHVCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDE5IFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50fSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5cbmltcG9ydCB7Y2FsY3VsYXRlRXhwb3J0SW1hZ2VTaXplfSBmcm9tICd1dGlscy9leHBvcnQtaW1hZ2UtdXRpbHMnO1xuaW1wb3J0IHtcbiAgUkFUSU9fT1BUSU9OUyxcbiAgUkFUSU9TLFxuICBSRVNPTFVUSU9OX09QVElPTlNcbn0gZnJvbSAnY29uc3RhbnRzL2RlZmF1bHQtc2V0dGluZ3MnO1xuaW1wb3J0IExvYWRpbmdTcGlubmVyIGZyb20gJ2NvbXBvbmVudHMvY29tbW9uL2xvYWRpbmctc3Bpbm5lcic7XG5pbXBvcnQge1N0eWxlZE1vZGFsQ29udGVudH0gZnJvbSAnY29tcG9uZW50cy9jb21tb24vc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IFN3aXRjaCBmcm9tICdjb21wb25lbnRzL2NvbW1vbi9zd2l0Y2gnO1xuXG5jb25zdCBJbWFnZU9wdGlvbkxpc3QgPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDtcbiAgd2lkdGg6IDI1MHB4O1xuXG4gIC5pbWFnZS1vcHRpb24tc2VjdGlvbiB7XG4gICAgLmltYWdlLW9wdGlvbi1zZWN0aW9uLXRpdGxlIHtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgfVxuICB9XG5cbiAgLmJ1dHRvbi1saXN0IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgcGFkZGluZzogOHB4IDBweDtcbiAgfVxuXG4gIGlucHV0IHtcbiAgICBtYXJnaW4tcmlnaHQ6IDhweDtcbiAgfVxuYDtcblxuY29uc3QgUHJldmlld0ltYWdlU2VjdGlvbiA9IHN0eWxlZC5kaXZgXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGZsZXg6IDE7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBwYWRkaW5nOiAzMHB4O1xuXG4gIC5kaW1lbnNpb24sIC5pbnN0cnVjdGlvbiB7XG4gICAgcGFkZGluZzogOHB4IDBweDtcbiAgfVxuXG4gIC5wcmV2aWV3LWltYWdlIHtcbiAgICBiYWNrZ3JvdW5kOiAjZTJlMmUyO1xuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICBib3gtc2hhZG93OiAwIDhweCAxNnB4IDAgcmdiYSgwLDAsMCwwLjE4KTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBwYWRkaW5nLWJvdHRvbTogJHtwcm9wcyA9PiBwcm9wcy5yYXRpbyA9PT0gUkFUSU9TLlNDUkVFTiA/XG4gICAgICBgJHsxMDAgKiBwcm9wcy5oZWlnaHQvcHJvcHMud2lkdGh9JWA6XG4gICAgICAocHJvcHMucmF0aW8gPT09IFJBVElPUy5TSVhURUVOX0JZX05JTkUgPyAnNTYuMjUlJyA6ICc3NSUnKVxuICAgIH07XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB9XG5cbiAgLnByZXZpZXctaW1hZ2UtcGxhY2Vob2xkZXIge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gIH1cblxuICAucHJldmlldy1pbWFnZS1zcGlubmVyIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgbGVmdDogY2FsYyg1MCUgLSAyNXB4KTtcbiAgICB0b3A6IGNhbGMoNTAlIC0gMjVweCk7XG4gIH1cbmA7XG5cbmNvbnN0IEJ1dHRvbiA9IHN0eWxlZC5kaXZgXG4gIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgYm9yZGVyOiAxcHggc29saWQgJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCA/IHByb3BzLnRoZW1lLnByaW1hcnlCdG5CZ2QgOiBwcm9wcy50aGVtZS5zZWxlY3RCb3JkZXJDb2xvckxUfTtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMuc2VsZWN0ZWQgPyBwcm9wcy50aGVtZS5wcmltYXJ5QnRuQmdkIDogcHJvcHMudGhlbWUuc2VsZWN0Qm9yZGVyQ29sb3JMVH07XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgbWFyZ2luLXJpZ2h0OiA2cHg7XG4gIHBhZGRpbmc6IDZweCAxMHB4O1xuXG4gIDpob3ZlciB7XG4gICAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMuYXZhaWxhYmxlICYmIHByb3BzLnRoZW1lLnByaW1hcnlCdG5CZ2R9O1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICR7cHJvcHMgPT4gcHJvcHMuYXZhaWxhYmxlICYmIHByb3BzLnRoZW1lLnByaW1hcnlCdG5CZ2R9O1xuICB9XG5gO1xuXG5jbGFzcyBFeHBvcnRJbWFnZU1vZGFsIGV4dGVuZHMgQ29tcG9uZW50IHtcblxuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIGhlaWdodDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICAgIHJhdGlvOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgcmVzb2x1dGlvbjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIHdpZHRoOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gICAgZXhwb3J0aW5nOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIGltYWdlRGF0YVVyaTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAvLyBjYWxsYmFja3NcbiAgICBvbkNoYW5nZVJhdGlvOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uQ2hhbmdlUmVzb2x1dGlvbjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvblRvZ2dsZUxlZ2VuZDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZFxuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBoZWlnaHQsXG4gICAgICBsZWdlbmQsXG4gICAgICByYXRpbyxcbiAgICAgIHJlc29sdXRpb24sXG4gICAgICB3aWR0aCxcbiAgICAgIGV4cG9ydGluZyxcbiAgICAgIGltYWdlRGF0YVVyaSxcbiAgICAgIC8vIGNhbGxiYWNrczpcbiAgICAgIG9uQ2hhbmdlUmF0aW8sXG4gICAgICBvbkNoYW5nZVJlc29sdXRpb24sXG4gICAgICBvblRvZ2dsZUxlZ2VuZFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3QgZXhwb3J0SW1hZ2VTaXplID0gY2FsY3VsYXRlRXhwb3J0SW1hZ2VTaXplKHtcbiAgICAgIHdpZHRoLCBoZWlnaHQsIHJhdGlvLCByZXNvbHV0aW9uXG4gICAgfSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJleHBvcnQtaW1hZ2UtbW9kYWxcIj5cbiAgICAgICAgPFN0eWxlZE1vZGFsQ29udGVudD5cbiAgICAgICAgICA8SW1hZ2VPcHRpb25MaXN0PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJpbWFnZS1vcHRpb24tc2VjdGlvblwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImltYWdlLW9wdGlvbi1zZWN0aW9uLXRpdGxlXCI+UmF0aW88L2Rpdj5cbiAgICAgICAgICAgICAgQ2hvb3NlIHRoZSByYXRpbyBmb3IgdmFyaW91cyB1c2FnZXMuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYnV0dG9uLWxpc3RcIj5cbiAgICAgICAgICAgICAgICB7UkFUSU9fT1BUSU9OUy5tYXAob3AgPT5cbiAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAga2V5PXtvcC5pZH1cbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ9e3JhdGlvID09PSBvcC5pZH1cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gb25DaGFuZ2VSYXRpbyh7cmF0aW86IG9wLmlkfSl9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHtvcC5sYWJlbH1cbiAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImltYWdlLW9wdGlvbi1zZWN0aW9uXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaW1hZ2Utb3B0aW9uLXNlY3Rpb24tdGl0bGVcIj5SZXNvbHV0aW9uPC9kaXY+XG4gICAgICAgICAgICAgIEhpZ2ggcmVzb2x1dGlvbiBpcyBiZXR0ZXIgZm9yIHByaW50cy5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJidXR0b24tbGlzdFwiPlxuICAgICAgICAgICAgICAgIHtSRVNPTFVUSU9OX09QVElPTlMubWFwKG9wID0+XG4gICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGtleT17b3AuaWR9XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkPXtyZXNvbHV0aW9uID09PSBvcC5pZH1cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gb3AuYXZhaWxhYmxlICYmIG9uQ2hhbmdlUmVzb2x1dGlvbih7cmVzb2x1dGlvbjogb3AuaWR9KX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge29wLmxhYmVsfVxuICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaW1hZ2Utb3B0aW9uLXNlY3Rpb25cIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJpbWFnZS1vcHRpb24tc2VjdGlvbi10aXRsZVwiPk1hcCBMZWdlbmQ8L2Rpdj5cbiAgICAgICAgICAgICAgPFN3aXRjaCB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgIGlkPVwiYWRkLW1hcC1sZWdlbmRcIlxuICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2xlZ2VuZH1cbiAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIkFkZCBsZWdlbmQgb24gbWFwXCJcbiAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17b25Ub2dnbGVMZWdlbmR9Lz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvSW1hZ2VPcHRpb25MaXN0PlxuICAgICAgICAgIDxQcmV2aWV3SW1hZ2VTZWN0aW9uIHJhdGlvPXtyYXRpb30gd2lkdGg9e3dpZHRofSBoZWlnaHQ9e2hlaWdodH0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImRpbWVuc2lvblwiPntgJHtleHBvcnRJbWFnZVNpemUud2lkdGh9IHggJHtleHBvcnRJbWFnZVNpemUuaGVpZ2h0fWB9PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInByZXZpZXctaW1hZ2VcIj5cbiAgICAgICAgICAgICAge2V4cG9ydGluZyA/XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwcmV2aWV3LWltYWdlLXNwaW5uZXJcIj48TG9hZGluZ1NwaW5uZXIgLz48L2Rpdj4gOlxuICAgICAgICAgICAgICAgIDxpbWcgY2xhc3NOYW1lPVwicHJldmlldy1pbWFnZS1wbGFjZWhvbGRlclwiIHNyYz17aW1hZ2VEYXRhVXJpfSAvPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L1ByZXZpZXdJbWFnZVNlY3Rpb24+XG4gICAgICAgIDwvU3R5bGVkTW9kYWxDb250ZW50PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5jb25zdCBFeHBvcnRJbWFnZU1vZGFsRmFjdG9yeSA9ICgpID0+IEV4cG9ydEltYWdlTW9kYWw7XG5leHBvcnQgZGVmYXVsdCBFeHBvcnRJbWFnZU1vZGFsRmFjdG9yeTtcbiJdfQ==