UNPKG

@future-grid/fgp-graph

Version:

fgp-graph is a chart lib based on Dygraphs

164 lines (123 loc) 19.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _configurations = require("../../../metadata/configurations"); var _momentTimezone = _interopRequireDefault(require("moment-timezone")); var _dataService = require("../../../services/dataService"); var _GraphRenderer = require("../../../widgets/GraphRenderer"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var Exports = function Exports(parentElement, graph, config, graphDiv, reactSelectionListener) { var _this = this; _classCallCheck(this, Exports); this.parentElement = parentElement; this.config = config; this.graphDiv = graphDiv; this.reactSelectionListener = reactSelectionListener; _defineProperty(this, "currentGraphData", void 0); _defineProperty(this, "currentCollection", void 0); _defineProperty(this, "labels", void 0); _defineProperty(this, "rectSelectStatus", false); _defineProperty(this, "graph", void 0); _defineProperty(this, "setData", function (data, labels, collection) { _this.currentGraphData = data; _this.labels = labels; _this.currentCollection = collection; }); _defineProperty(this, "initDom", function () { var _this$config; // var buttonsContainer = document.createElement('div'); buttonsContainer.setAttribute("class", "fgp-buttons"); (_this$config = _this.config) === null || _this$config === void 0 ? void 0 : _this$config.map(function (_config) { if (_config === _configurations.GraphExports.Data) { // create button and add it into header var btnAttrs = [{ key: "class", value: "fgp-export-button fgp-btn-export-data" }]; var btnData = _GraphRenderer.DomElementOperator.createElement('button', btnAttrs); btnData.addEventListener("click", function (event) { // export data // check data (1 or more) if (_this.currentGraphData && _this.currentGraphData.length > 0 && _this.currentCollection) { var dateWindow = _this.graph.getOption("dateWindow"); var csvStr = ""; // single device var currentData = _this.currentGraphData.filter(function (_data) { return _data[0].getTime() >= dateWindow[0] && _data[0].getTime() <= dateWindow[1]; }); var currentCollection = _this.currentCollection; // prepare the file name var _fileName = currentCollection.label + "_" + (0, _momentTimezone["default"])().toISOString() + ".csv"; var _columns = ["timestamp"]; var _series = _this.labels; _series === null || _series === void 0 ? void 0 : _series.forEach(function (_s, _index) { // if (_index > 0) { _columns.push(_s); // } }); // add titles first _columns.forEach(function (title, _index) { if (_index < _columns.length - 1) { csvStr += title + ','; } else { csvStr += title + '\n'; } }); // prepare data if (currentData) { currentData.forEach(function (_d) { _columns.forEach(function (title, _index) { if (_index < _columns.length - 1) { csvStr += _d[_index] + ','; } else { csvStr += _d[_index] + '\n'; } }); }); } _dataService.ExportUtils.exportCsv(csvStr, _fileName); } }); buttonsContainer.appendChild(btnData); } else if (_config === _configurations.GraphExports.Image) { var _btnAttrs = [{ key: "class", value: "fgp-export-button fgp-btn-export-image" }]; var btnImage = _GraphRenderer.DomElementOperator.createElement('button', _btnAttrs); btnImage.addEventListener("click", function (event) { var graphContainer = _this.graphDiv; if (graphContainer && _this.currentCollection) { // first one _dataService.ExportUtils.saveAsImage(graphContainer, _this.currentCollection.label + "_" + (0, _momentTimezone["default"])().toISOString() + '.png'); } }); buttonsContainer.appendChild(btnImage); } else if (_config === _configurations.GraphExports.Draw) { // add rect selection if (_this.reactSelectionListener) { var _btnAttrs2 = [{ key: "class", value: "fgp-export-button fgp-btn-export-draw" }]; var btnDraw = _GraphRenderer.DomElementOperator.createElement('button', _btnAttrs2); btnDraw.addEventListener("click", function (event) { _this.rectSelectStatus = !_this.rectSelectStatus; if (_this.rectSelectStatus) { btnDraw.style.backgroundColor = "yellow"; } else { btnDraw.style.backgroundColor = ""; } _this.reactSelectionListener ? _this.reactSelectionListener(_this.rectSelectStatus) : null; }); buttonsContainer.appendChild(btnDraw); } } }); _this.parentElement.appendChild(buttonsContainer); }); this.graph = graph; this.initDom(); }; exports["default"] = Exports; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9leHRyYXMvdG9vbGJhci93aWRnZXRzL0V4cG9ydHMudHMiXSwibmFtZXMiOlsiRXhwb3J0cyIsInBhcmVudEVsZW1lbnQiLCJncmFwaCIsImNvbmZpZyIsImdyYXBoRGl2IiwicmVhY3RTZWxlY3Rpb25MaXN0ZW5lciIsImRhdGEiLCJsYWJlbHMiLCJjb2xsZWN0aW9uIiwiY3VycmVudEdyYXBoRGF0YSIsImN1cnJlbnRDb2xsZWN0aW9uIiwiYnV0dG9uc0NvbnRhaW5lciIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsInNldEF0dHJpYnV0ZSIsIm1hcCIsIl9jb25maWciLCJHcmFwaEV4cG9ydHMiLCJEYXRhIiwiYnRuQXR0cnMiLCJrZXkiLCJ2YWx1ZSIsImJ0bkRhdGEiLCJEb21FbGVtZW50T3BlcmF0b3IiLCJhZGRFdmVudExpc3RlbmVyIiwiZXZlbnQiLCJsZW5ndGgiLCJkYXRlV2luZG93IiwiZ2V0T3B0aW9uIiwiY3N2U3RyIiwiY3VycmVudERhdGEiLCJmaWx0ZXIiLCJfZGF0YSIsImdldFRpbWUiLCJfZmlsZU5hbWUiLCJsYWJlbCIsInRvSVNPU3RyaW5nIiwiX2NvbHVtbnMiLCJfc2VyaWVzIiwiZm9yRWFjaCIsIl9zIiwiX2luZGV4IiwicHVzaCIsInRpdGxlIiwiX2QiLCJFeHBvcnRVdGlscyIsImV4cG9ydENzdiIsImFwcGVuZENoaWxkIiwiSW1hZ2UiLCJidG5JbWFnZSIsImdyYXBoQ29udGFpbmVyIiwic2F2ZUFzSW1hZ2UiLCJEcmF3IiwiYnRuRHJhdyIsInJlY3RTZWxlY3RTdGF0dXMiLCJzdHlsZSIsImJhY2tncm91bmRDb2xvciIsImluaXREb20iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7SUFFcUJBLE8sR0FhakIsaUJBQW1CQyxhQUFuQixFQUEyQ0MsS0FBM0MsRUFBa0VDLE1BQWxFLEVBQWtHQyxRQUFsRyxFQUE2SEMsc0JBQTdILEVBQWlMO0FB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SUFBbkY7QUFDSCxXQVZEO0FBV0EzQyxVQUFBQSxnQkFBZ0IsQ0FBQ29DLFdBQWpCLENBQTZCTSxPQUE3QjtBQUNIO0FBQ0o7QUFDSixLQS9FRDs7QUFrRkEsSUFBQSxLQUFJLENBQUNwRCxhQUFMLENBQW1COEMsV0FBbkIsQ0FBK0JwQyxnQkFBL0I7QUFDSCxHQXBHZ0w7O0FBQzdLLE9BQUtULEtBQUwsR0FBYUEsS0FBYjtBQUNBLE9BQUt1RCxPQUFMO0FBQ0gsQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RG9tQXR0cnMsIEdyYXBoQ29sbGVjdGlvbiwgR3JhcGhFeHBvcnRzfSBmcm9tIFwiLi4vLi4vLi4vbWV0YWRhdGEvY29uZmlndXJhdGlvbnNcIjtcbmltcG9ydCBtb21lbnQgZnJvbSBcIm1vbWVudC10aW1lem9uZVwiO1xuaW1wb3J0IHtFeHBvcnRVdGlsc30gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL2RhdGFTZXJ2aWNlXCI7XG5pbXBvcnQge0RvbUVsZW1lbnRPcGVyYXRvcn0gZnJvbSBcIi4uLy4uLy4uL3dpZGdldHMvR3JhcGhSZW5kZXJlclwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFeHBvcnRzIHtcblxuXG4gICAgcHJpdmF0ZSBjdXJyZW50R3JhcGhEYXRhPzogYW55O1xuXG4gICAgcHJpdmF0ZSBjdXJyZW50Q29sbGVjdGlvbj86IGFueTtcblxuICAgIHByaXZhdGUgbGFiZWxzPzogc3RyaW5nW107XG5cbiAgICBwcml2YXRlIHJlY3RTZWxlY3RTdGF0dXMgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgZ3JhcGg6IER5Z3JhcGg7XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgcGFyZW50RWxlbWVudDogRWxlbWVudCwgZ3JhcGg6IER5Z3JhcGgsIHB1YmxpYyBjb25maWc/OiBHcmFwaEV4cG9ydHNbXSwgcHVibGljIGdyYXBoRGl2PzogRWxlbWVudCwgcHVibGljIHJlYWN0U2VsZWN0aW9uTGlzdGVuZXI/OiAoYWN0aXZlOiBib29sZWFuKSA9PiB2b2lkKSB7XG4gICAgICAgIHRoaXMuZ3JhcGggPSBncmFwaDtcbiAgICAgICAgdGhpcy5pbml0RG9tKCk7XG4gICAgfVxuXG5cbiAgICBwdWJsaWMgc2V0RGF0YSA9IChkYXRhOiBhbnksIGxhYmVsczogc3RyaW5nW10sIGNvbGxlY3Rpb246IEdyYXBoQ29sbGVjdGlvbikgPT4ge1xuICAgICAgICB0aGlzLmN1cnJlbnRHcmFwaERhdGEgPSBkYXRhO1xuICAgICAgICB0aGlzLmxhYmVscyA9IGxhYmVscztcbiAgICAgICAgdGhpcy5jdXJyZW50Q29sbGVjdGlvbiA9IGNvbGxlY3Rpb247XG4gICAgfTtcblxuICAgIHByaXZhdGUgaW5pdERvbSA9ICgpID0+IHtcbiAgICAgICAgLy9cbiAgICAgICAgbGV0IGJ1dHRvbnNDb250YWluZXI6IEhUTUxEaXZFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGJ1dHRvbnNDb250YWluZXIuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJmZ3AtYnV0dG9uc1wiKTtcblxuICAgICAgICB0aGlzLmNvbmZpZz8ubWFwKF9jb25maWcgPT4ge1xuICAgICAgICAgICAgaWYgKF9jb25maWcgPT09IEdyYXBoRXhwb3J0cy5EYXRhKSB7XG4gICAgICAgICAgICAgICAgLy8gY3JlYXRlIGJ1dHRvbiBhbmQgYWRkIGl0IGludG8gaGVhZGVyXG4gICAgICAgICAgICAgICAgbGV0IGJ0bkF0dHJzOiBBcnJheTxEb21BdHRycz4gPSBbe2tleTogXCJjbGFzc1wiLCB2YWx1ZTogXCJmZ3AtZXhwb3J0LWJ1dHRvbiBmZ3AtYnRuLWV4cG9ydC1kYXRhXCJ9XTtcbiAgICAgICAgICAgICAgICBsZXQgYnRuRGF0YSA9IERvbUVsZW1lbnRPcGVyYXRvci5jcmVhdGVFbGVtZW50KCdidXR0b24nLCBidG5BdHRycyk7XG4gICAgICAgICAgICAgICAgYnRuRGF0YS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGV4cG9ydCBkYXRhXG4gICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIGRhdGEgKDEgb3IgbW9yZSlcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudEdyYXBoRGF0YSAmJiB0aGlzLmN1cnJlbnRHcmFwaERhdGEubGVuZ3RoID4gMCAmJiB0aGlzLmN1cnJlbnRDb2xsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRlV2luZG93ID0gdGhpcy5ncmFwaC5nZXRPcHRpb24oXCJkYXRlV2luZG93XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNzdlN0cjogc3RyaW5nID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNpbmdsZSBkZXZpY2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnREYXRhID0gdGhpcy5jdXJyZW50R3JhcGhEYXRhLmZpbHRlcigoX2RhdGE6YW55KSA9PiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZGF0YVswXS5nZXRUaW1lKCkgPj0gZGF0ZVdpbmRvd1swXSAmJiBfZGF0YVswXS5nZXRUaW1lKCkgPD0gZGF0ZVdpbmRvd1sxXVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDb2xsZWN0aW9uID0gdGhpcy5jdXJyZW50Q29sbGVjdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByZXBhcmUgdGhlIGZpbGUgbmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX2ZpbGVOYW1lID0gY3VycmVudENvbGxlY3Rpb24ubGFiZWwgKyBcIl9cIiArIG1vbWVudCgpLnRvSVNPU3RyaW5nKCkgKyBcIi5jc3ZcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBfY29sdW1uczogc3RyaW5nW10gPSBbXCJ0aW1lc3RhbXBcIl07XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfc2VyaWVzID0gdGhpcy5sYWJlbHM7XG4gICAgICAgICAgICAgICAgICAgICAgICBfc2VyaWVzPy5mb3JFYWNoKChfcywgX2luZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgKF9pbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbHVtbnMucHVzaChfcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBhZGQgdGl0bGVzIGZpcnN0IFxuICAgICAgICAgICAgICAgICAgICAgICAgX2NvbHVtbnMuZm9yRWFjaCgodGl0bGUsIF9pbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfaW5kZXggPCBfY29sdW1ucy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzdlN0ciArPSB0aXRsZSArICcsJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3ZTdHIgKz0gdGl0bGUgKyAnXFxuJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByZXBhcmUgZGF0YVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnREYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudERhdGEuZm9yRWFjaCgoX2Q6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY29sdW1ucy5mb3JFYWNoKCh0aXRsZSwgX2luZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2luZGV4IDwgX2NvbHVtbnMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzdlN0ciArPSBfZFtfaW5kZXhdICsgJywnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3ZTdHIgKz0gX2RbX2luZGV4XSArICdcXG4nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydFV0aWxzLmV4cG9ydENzdihjc3ZTdHIsIF9maWxlTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBidXR0b25zQ29udGFpbmVyLmFwcGVuZENoaWxkKGJ0bkRhdGEpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChfY29uZmlnID09PSBHcmFwaEV4cG9ydHMuSW1hZ2UpIHtcbiAgICAgICAgICAgICAgICBsZXQgYnRuQXR0cnM6IEFycmF5PERvbUF0dHJzPiA9IFt7a2V5OiBcImNsYXNzXCIsIHZhbHVlOiBcImZncC1leHBvcnQtYnV0dG9uIGZncC1idG4tZXhwb3J0LWltYWdlXCJ9XTtcbiAgICAgICAgICAgICAgICBsZXQgYnRuSW1hZ2UgPSBEb21FbGVtZW50T3BlcmF0b3IuY3JlYXRlRWxlbWVudCgnYnV0dG9uJywgYnRuQXR0cnMpO1xuICAgICAgICAgICAgICAgIGJ0bkltYWdlLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JhcGhDb250YWluZXIgPSB0aGlzLmdyYXBoRGl2O1xuICAgICAgICAgICAgICAgICAgICBpZiAoZ3JhcGhDb250YWluZXIgJiYgdGhpcy5jdXJyZW50Q29sbGVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmlyc3Qgb25lXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRVdGlscy5zYXZlQXNJbWFnZShncmFwaENvbnRhaW5lciBhcyBIVE1MRWxlbWVudCwgdGhpcy5jdXJyZW50Q29sbGVjdGlvbi5sYWJlbCArIFwiX1wiICsgbW9tZW50KCkudG9JU09TdHJpbmcoKSArICcucG5nJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBidXR0b25zQ29udGFpbmVyLmFwcGVuZENoaWxkKGJ0bkltYWdlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoX2NvbmZpZyA9PT0gR3JhcGhFeHBvcnRzLkRyYXcpIHtcbiAgICAgICAgICAgICAgICAvLyBhZGQgcmVjdCBzZWxlY3Rpb25cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWFjdFNlbGVjdGlvbkxpc3RlbmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBidG5BdHRyczogQXJyYXk8RG9tQXR0cnM+ID0gW3trZXk6IFwiY2xhc3NcIiwgdmFsdWU6IFwiZmdwLWV4cG9ydC1idXR0b24gZmdwLWJ0bi1leHBvcnQtZHJhd1wifV07XG4gICAgICAgICAgICAgICAgICAgIGxldCBidG5EcmF3ID0gRG9tRWxlbWVudE9wZXJhdG9yLmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicsIGJ0bkF0dHJzKTtcbiAgICAgICAgICAgICAgICAgICAgYnRuRHJhdy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlY3RTZWxlY3RTdGF0dXMgPSAhdGhpcy5yZWN0U2VsZWN0U3RhdHVzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWN0U2VsZWN0U3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnRuRHJhdy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBcInllbGxvd1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidG5EcmF3LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVhY3RTZWxlY3Rpb25MaXN0ZW5lciA/IHRoaXMucmVhY3RTZWxlY3Rpb25MaXN0ZW5lcih0aGlzLnJlY3RTZWxlY3RTdGF0dXMpIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvbnNDb250YWluZXIuYXBwZW5kQ2hpbGQoYnRuRHJhdyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuXG4gICAgICAgIHRoaXMucGFyZW50RWxlbWVudC5hcHBlbmRDaGlsZChidXR0b25zQ29udGFpbmVyKTtcbiAgICB9O1xuXG5cbn0iXX0=