"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __generator = (this && this.__generator) || function (thisArg, body) { var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function (v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (_) try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; Object.defineProperty(exports, "__esModule", { value: true }); var app = getApp(); Page({ data: { promotionsData: {}, doccode: '', formId: '', orderKeyword: '', ranksKeyword: '', orderListBackup: [], sellerRankingListBackup: [], showShare: false, searchKey: '', shareOptions: [ { name: '微信', icon: 'wechat', openType: 'share' }, ], }, onLoad: function (options) { var _this = this; console.log(app); this.setData({ doccode: options.doccode, formId: options.formId, themeColor: wx.globalData.themeColor }); wx.globalData.detailSocketCallback = function (onMessage) { console.log('活动管理页收到消息 ', onMessage); var msgData = JSON.parse(onMessage.data); var doccode = _this.data.doccode; var msg = msgData.info.msg || ''; if (doccode === msg) { console.log('websocket有新消息,需要更新当前活动状态'); _this.getPromotionsData(); } }; }, onShow: function () { this.getPromotionsData(); }, onUnload: function () { wx.globalData.detailSocketCallback = function () { }; }, addGoodsToLive: function () { return __awaiter(this, void 0, void 0, function () { var _a, doccode; return __generator(this, function (_b) { switch (_b.label) { case 0: doccode = this.data.promotionsData.doccode || ''; return [4, wx.$commonRequest.addGoodsToLive({ url: "/shopping/panicBuyingLiveGoods.do?m=add", data: { doccode: doccode } })]; case 1: if (_b.sent()) { this.setData((_a = {}, _a["promotionsData.isGoodsInLive"] = true, _a)); } return [2]; } }); }); }, orderExport: function () { return __awaiter(this, void 0, void 0, function () { var _a, error, result; return __generator(this, function (_b) { switch (_b.label) { case 0: return [4, wx.$utils.to(wx.$http.request({ url: "/shopping/export/generateExcelFromOrderList.do", data: { doccode: this.data.promotionsData.doccode, searchKey: this.data.searchKey, } }))]; case 1: _a = _b.sent(), error = _a[0], result = _a[1]; if (error) { console.log(error); return [2]; } console.log(result); wx.setClipboardData({ data: result.downloadUrl, success: function () { wx.hideToast(); wx.showModal({ title: '提示', content: "\u4E0B\u8F7D\u94FE\u63A5\u5DF2\u590D\u5236,\u8BF7\u5728\u7535\u8111\u6D4F\u89C8\u5668\u4E2D\u6253\u5F00\u4E0B\u8F7D\uFF08\u6709\u6548\u671F" + (result.validDays || 0) + "\u5929\uFF09\u3002", showCancel: false }); } }); return [2]; } }); }); }, getPromotionsData: function () { return __awaiter(this, void 0, void 0, function () { var _a, error, result; return __generator(this, function (_b) { switch (_b.label) { case 0: return [4, wx.$utils.to(wx.$http.request({ url: "/shopping/panicBuying.do?m=getPanicBuyingSummary", data: { doccode: this.data.doccode } }))]; case 1: _a = _b.sent(), error = _a[0], result = _a[1]; if (error) { console.log(error); return [2]; } console.log(result); this.setData({ promotionsData: result.list[0], sellerRankingList: result.sellerRankingList, sellerRankingListBackup: result.sellerRankingList, orderList: result.orderList, orderListBackup: result.orderList }); return [2]; } }); }); }, changePanicBuyingStatus: function (status) { return __awaiter(this, void 0, void 0, function () { var promotionsData, _a, error, result; return __generator(this, function (_b) { switch (_b.label) { case 0: promotionsData = this.data.promotionsData; return [4, wx.$utils.to(wx.$http.request({ url: "/shopping/panicBuying.do?m=changePanicBuyingStatus", data: { doccode: promotionsData.doccode, status: status } }))]; case 1: _a = _b.sent(), error = _a[0], result = _a[1]; if (error) { console.log(error); return [2]; } console.log(result); if (result.state == "success") { this.getPromotionsData(); } return [2]; } }); }); }, continuePromotion: function () { var promotionsData = this.data.promotionsData; if (promotionsData.isShowContinueButton) { this.changePanicBuyingStatus(2); console.log('继续活动'); } }, stopPromotion: function () { var promotionsData = this.data.promotionsData; if (promotionsData.isShowStopButton) { this.changePanicBuyingStatus(3); console.log('停止活动'); } }, completeGroupBuying: function () { var _this = this; wx.pro.showModal({ title: '提示', content: '确定要完成拼团吗?选择确定,拼团将直接成功', }).then(function (res) { console.log(res); if (res.confirm) { console.log('确认'); _this.completeGroupBuyingRequest(); } }); }, cancelGroupBuying: function () { var _this = this; wx.pro.showModal({ title: '提示', content: '确定要取消拼团吗?选择确定,拼团将直接失败,所有已支付订单将原路退还!', }).then(function (res) { console.log(res); if (res.confirm) { console.log('确认'); _this.cancelGroupBuyingRequest(); } }); }, completeGroupBuyingRequest: function () { return __awaiter(this, void 0, void 0, function () { var promotionsData, formid, _a, error, result; return __generator(this, function (_b) { switch (_b.label) { case 0: promotionsData = this.data.promotionsData; formid = this.data.formId; return [4, wx.$utils.to(wx.$http.request({ url: "/shopping/panicBuying.do?m=groupBuyingSuccess", data: { doccode: promotionsData.doccode, formid: formid } }))]; case 1: _a = _b.sent(), error = _a[0], result = _a[1]; if (error) { console.log(error); return [2]; } console.log(result); this.getPromotionsData(); return [2]; } }); }); }, cancelGroupBuyingRequest: function () { return __awaiter(this, void 0, void 0, function () { var promotionsData, formid, _a, error, result; return __generator(this, function (_b) { switch (_b.label) { case 0: promotionsData = this.data.promotionsData; formid = this.data.formId; return [4, wx.$utils.to(wx.$http.request({ url: "/shopping/panicBuyingOrder.do?m=doReturnOrderAllByCreator", data: { doccode: promotionsData.doccode, formid: formid } }))]; case 1: _a = _b.sent(), error = _a[0], result = _a[1]; if (error) { console.log(error); return [2]; } console.log(result); this.getPromotionsData(); return [2]; } }); }); }, setSearchKey: function (event) { this.setData({ searchKey: event.detail }); console.log('关键词', event.detail); }, onSearchOrder: function (event) { return __awaiter(this, void 0, void 0, function () { var promotionsData, _a, error, result; return __generator(this, function (_b) { switch (_b.label) { case 0: console.log('准备搜索订单', event.detail); promotionsData = this.data.promotionsData; return [4, wx.$utils.to(wx.$http.request({ url: "/shopping/panicBuying.do?m=getOrderListForSellerRanking", data: { doccode: promotionsData.doccode, searchKey: event.detail, } }))]; case 1: _a = _b.sent(), error = _a[0], result = _a[1]; if (error) { console.log(error); return [2]; } console.log(result); this.setData({ orderList: result.orderList }); return [2]; } }); }); }, onClearSearchOrder: function () { console.log(888); this.setData({ orderList: this.data.orderListBackup }); }, onSearchRanks: function (event) { return __awaiter(this, void 0, void 0, function () { var promotionsData, _a, error, result; return __generator(this, function (_b) { switch (_b.label) { case 0: console.log('准备搜索排行', event.detail); promotionsData = this.data.promotionsData; return [4, wx.$utils.to(wx.$http.request({ url: "/shopping/panicBuying.do?m=getSellerRankingList", data: { doccode: promotionsData.doccode, searchKey: event.detail, } }))]; case 1: _a = _b.sent(), error = _a[0], result = _a[1]; if (error) { console.log(error); return [2]; } console.log(result); this.setData({ sellerRankingList: result.sellerRankingList }); return [2]; } }); }); }, onClearSearchRanks: function () { console.log(999); this.setData({ sellerRankingList: this.data.sellerRankingListBackup }); }, goOrderDetail: function (event) { var _this = this; var doccode = event.currentTarget.dataset.doccode; var url = "/pages/orderDetail/orderDetail?from=&doccode=" + doccode; wx.navigateTo({ url: url, events: { detailCheckCode: function (data) { console.log('选择的商品', data); _this.triggerEvent('comeback', data); } } }); }, doHeXiao: function (event) { return __awaiter(this, void 0, void 0, function () { var doccode; var _this = this; return __generator(this, function (_a) { console.log(event); doccode = event.currentTarget.dataset.doccode; wx.pro.showModal({ title: '提示', content: '确定要核销此订单吗?', }).then(function (res) { console.log(res); if (res.confirm) { console.log('确认'); _this.checkHXData(doccode); } }); return [2]; }); }); }, checkHXData: function (doccode) { return __awaiter(this, void 0, void 0, function () { var _a, error, result; return __generator(this, function (_b) { switch (_b.label) { case 0: return [4, wx.$utils.to(wx.$http.request({ url: "/shopping/panicBuyingOrder.do?m=doHeXiao", data: { doccode: doccode } }))]; case 1: _a = _b.sent(), error = _a[0], result = _a[1]; if (error) { console.log(error); return [2]; } console.log(result); this.onSearchOrder({ detail: '' }); return [2]; } }); }); }, doRefund: function (event) { return __awaiter(this, void 0, void 0, function () { var formid, refundDialog, result; var _this = this; return __generator(this, function (_a) { switch (_a.label) { case 0: console.log(event); formid = this.data.promotionsData.formId; refundDialog = this.selectComponent('#refund-dialog'); return [4, refundDialog.doRefund(event.currentTarget.dataset, formid)]; case 1: result = _a.sent(); console.log('退款result', result); if (result) { setTimeout(function () { _this.onSearchOrder({ detail: '' }); }, 1500); } return [2]; } }); }); }, }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvbW90aW9uc01hbmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInByb21vdGlvbnNNYW5hZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQU0sR0FBRyxHQUFHLE1BQU0sRUFBYyxDQUFDO0FBQ2pDLElBQUksQ0FBQztJQUNILElBQUksRUFBRTtRQUNKLGNBQWMsRUFBQyxFQUFTO1FBQ3hCLE9BQU8sRUFBQyxFQUFFO1FBQ1YsTUFBTSxFQUFDLEVBQUU7UUFDVCxZQUFZLEVBQUUsRUFBRTtRQUNoQixZQUFZLEVBQUUsRUFBRTtRQUNoQixlQUFlLEVBQUMsRUFBRTtRQUNsQix1QkFBdUIsRUFBQyxFQUFFO1FBQzFCLFNBQVMsRUFBRSxLQUFLO1FBQ2hCLFNBQVMsRUFBQyxFQUFFO1FBQ1osWUFBWSxFQUFFO1lBQ1osRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRTtTQUdsRDtLQUNGO0lBQ0QsTUFBTSxZQUFDLE9BQU87UUFBZCxpQkFpQkM7UUFoQkMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsT0FBTyxDQUFDO1lBQ1gsT0FBTyxFQUFDLE9BQU8sQ0FBQyxPQUFPO1lBQ3ZCLE1BQU0sRUFBQyxPQUFPLENBQUMsTUFBTTtZQUNyQixVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxVQUFVO1NBQ3JDLENBQUMsQ0FBQTtRQUNGLEVBQUUsQ0FBQyxVQUFVLENBQUMsb0JBQW9CLEdBQUcsVUFBQyxTQUFhO1lBQ2pELE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3BDLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3pDLElBQUksT0FBTyxH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UUFBQTt3QkFRbEIsSUFBSSxLQUFLLEVBQUM7NEJBQ1IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQzs0QkFDbkIsV0FBTzt5QkFDUjt3QkFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUNwQixJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUMsTUFBTSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUM7Ozs7O0tBQ2pDO0lBbURLLFFBQVEsWUFBQyxLQUFTOzs7Ozs7O3dCQUN0QixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUNmLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUM7d0JBQ3pDLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDLENBQUM7d0JBQzdDLFdBQU0sWUFBWSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBQyxNQUFNLENBQUMsRUFBQTs7d0JBQXhFLE1BQU0sR0FBRyxTQUErRDt3QkFDNUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUMsTUFBTSxDQUFDLENBQUM7d0JBQy9CLElBQUksTUFBTSxFQUFDOzRCQUNULFVBQVUsQ0FBQztnQ0FDVCxLQUFJLENBQUMsYUFBYSxDQUFDLEVBQUMsTUFBTSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUM7NEJBQ2xDLENBQUMsRUFBQyxJQUFJLENBQUMsQ0FBQTt5QkFDUjs7Ozs7S0FlRjtDQTZCRixDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBhcHAgPSBnZXRBcHA8SUFwcE9wdGlvbj4oKTtcclxuUGFnZSh7XHJcbiAgZGF0YToge1xyXG4gICAgcHJvbW90aW9uc0RhdGE6e30gYXMgYW55LFxyXG4gICAgZG9jY29kZTonJyxcclxuICAgIGZvcm1JZDonJyxcclxuICAgIG9yZGVyS2V5d29yZDogJycsXHJcbiAgICByYW5rc0tleXdvcmQ6ICcnLFxyXG4gICAgb3JkZXJMaXN0QmFja3VwOltdLFxyXG4gICAgc2VsbGVyUmFua2luZ0xpc3RCYWNrdXA6W10sXHJcbiAgICBzaG93U2hhcmU6IGZhbHNlLFxyXG4gICAgc2VhcmNoS2V5OicnLFxyXG4gICAgc2hhcmVPcHRpb25zOiBbXHJcbiAgICAgIHsgbmFtZTogJ+W+ruS/oScsIGljb246ICd3ZWNoYXQnLCBvcGVuVHlwZTogJ3NoYXJlJyB9LFxyXG4gICAgICAvLyB7IG5hbWU6ICfliIbkuqvmtbfmiqUnLCBpY29uOiAncG9zdGVyJyB9LFxyXG4gICAgICAvLyB7IG5hbWU6ICfkuoznu7TnoIEnLCBpY29uOiAncXJjb2RlJyB9LFxyXG4gICAgXSxcclxuICB9LFxyXG4gIG9uTG9hZChvcHRpb25zKSB7XHJcbiAgICBjb25zb2xlLmxvZyhhcHApO1xyXG4gICAgdGhpcy5zZXREYXRhKHtcclxuICAgICAgZG9jY29kZTpvcHRpb25zLmRvY2NvZGUsXHJcbiAgICAgIGZvcm1JZDpvcHRpb25zLmZvcm1JZCxcclxuICAgICAgdGhlbWVDb2xvcjogd3guZ2xvYmFsRGF0YS50aGVtZUNvbG9yXHJcbiAgICB9KVxyXG4gICAgd3guZ2xvYmFsRGF0YS5kZXRhaWxTb2NrZXRDYWxsYmFjayA9IChvbk1lc3NhZ2U6YW55KT0+e1xyXG4gICAgICBjb25zb2xlLmxvZygn5rS75Yqo566h55CG6aG15pS25Yiw5raI5oGvICcsb25NZXNzYWdlKTtcclxuICAgICAgbGV0IG1zZ0RhdGEgPSBKU09OLnBhcnNlKG9uTWVzc2FnZS5kYXRhKTtcclxuICAgICAgbGV0IGRvY2NvZGUgPSB0aGlzLmRhdGEuZG9jY29kZTtcclxuICAgICAgbGV0IG1zZyA9IG1zZ0RhdGEuaW5mby5tc2cgfHwgJyc7XHJcbiAgICAgIGlmIChkb2Njb2RlID09PSBtc2cpe1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCd3ZWJzb2NrZXTmnInmlrDmtojmga/vvIzpnIDopoHmm7TmlrDlvZPliY3mtLvliqjnirbmgIEnKTtcclxuICAgICAgICB0aGlzLmdldFByb21vdGlvbnNEYXRhKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9LFxyXG4gIG9uU2hvdygpIHtcclxuICAgIHRoaXMuZ2V0UHJvbW90aW9uc0RhdGEoKTtcclxuICB9LFxyXG4gIG9uVW5sb2FkKCl7XHJcbiAgICB3eC5nbG9iYWxEYXRhLmRldGFpbFNvY2tldENhbGxiYWNrID0gKCk9Pnt9O1xyXG4gIH0sXHJcbiAgYXN5bmMgYWRkR29vZHNUb0xpdmUoKXtcclxuICAgIGxldCBkb2Njb2RlID0gdGhpcy5kYXRhLnByb21vdGlvbnNEYXRhLmRvY2NvZGV8fCcnO1xyXG4gICAgaWYgKGF3YWl0IHd4LiRjb21tb25SZXF1ZXN0LmFkZEdvb2RzVG9MaXZlKHtcclxuICAgICAgdXJsOmAvc2hvcHBpbmcvcGFuaWNCdXlpbmdMaXZlR29vZHMuZG8/bT1hZGRgLFxyXG4gICAgICBkYXRhOntcclxuICAgICAgICBkb2Njb2RlXHJcbiAgICAgIH1cclxuICAgIH0pKXtcclxuICAgICAgdGhpcy5zZXREYXRhKHtcclxuICAgICAgICBbYHByb21vdGlvbnNEYXRhLmlzR29vZHNJbkxpdmVgXTp0cnVlXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfSxcclxuICBhc3luYyBvcmRlckV4cG9ydCgpe1xyXG4gICAgbGV0IFtlcnJvciwgcmVzdWx0XSA9IGF3YWl0IHd4LiR1dGlscy50byhcclxuICAgICAgd3guJGh0dHAucmVxdWVzdCh7XHJcbiAgICAgICAgdXJsOmAvc2hvcHBpbmcvZXhwb3J0L2dlbmVyYXRlRXhjZWxGcm9tT3JkZXJMaXN0LmRvYCxcclxuICAgICAgICBkYXRhOntcclxuICAgICAgICAgIGRvY2NvZGU6dGhpcy5kYXRhLnByb21vdGlvbnNEYXRhLmRvY2NvZGUsXHJcbiAgICAgICAgICBzZWFyY2hLZXk6dGhpcy5kYXRhLnNlYXJjaEtleSxcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApXHJcbiAgICBpZiAoZXJyb3Ipe1xyXG4gICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XHJcbiAgICB3eC5zZXRDbGlwYm9hcmREYXRhKHtcclxuICAgICAgZGF0YTogcmVzdWx0LmRvd25sb2FkVXJsLFxyXG4gICAgICBzdWNjZXNzICgpIHtcclxuICAgICAgICB3eC5oaWRlVG9hc3QoKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZygn5aSN5Yi25oiQ5YqfJyk7XHJcbiAgICAgICAgd3guc2hvd01vZGFsKHtcclxuICAgICAgICAgIHRpdGxlOifmj5DnpLonLFxyXG4gICAgICAgICAgY29udGVudDogYOS4i+i9vemTvuaOpeW3suWkjeWItizor7flnKjnlLXohJHmtY/op4jlmajkuK3miZPlvIDkuIvovb3vvIjmnInmlYjmnJ8ke3Jlc3VsdC52YWxpZERheXN8fDB95aSp77yJ44CCYCxcclxuICAgICAgICAgIHNob3dDYW5jZWw6ZmFsc2VcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgLy8gd3guZG93bmxvYWRGaWxlKHtcclxuICAgIC8vICAgdXJsOiAnaHR0cHM6Ly9tcC5vbmJ1cy5jbi9zaG9wcGluZy9pbnF1aXJlLnBkZicsXHJcbiAgICAvLyAgIHN1Y2Nlc3MgKHJlcykge1xyXG4gICAgLy8gICAgIC8vIOWPquimgeacjeWKoeWZqOacieWTjeW6lOaVsOaNru+8jOWwseS8muaKiuWTjeW6lOWGheWuueWGmeWFpeaWh+S7tuW5tui/m+WFpSBzdWNjZXNzIOWbnuiwg++8jOS4muWKoemcgOimgeiHquihjOWIpOaWreaYr+WQpuS4i+i9veWIsOS6huaDs+imgeeahOWGheWuuVxyXG4gICAgLy8gICAgIGlmIChyZXMuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XHJcbiAgICAvLyAgICAgICBsZXQgdGVtcEZpbGVQYXRoID0gcmVzLnRlbXBGaWxlUGF0aDtcclxuICAgIC8vICAgICAgIHd4LnNhdmVGaWxlKHtcclxuICAgIC8vICAgICAgICAgdGVtcEZpbGVQYXRoLFxyXG4gICAgLy8gICAgICAgICBzdWNjZXNzKHJlcykge1xyXG4gICAgLy8gICAgICAgICAgIGNvbnN0IHNhdmVkRmlsZVBhdGggPSByZXMuc2F2ZWRGaWxlUGF0aDtcclxuICAgIC8vICAgICAgICAgICBjb25zb2xlLmxvZygn5L+d5a2Y5Zyw5Z2A5Li6JyxzYXZlZEZpbGVQYXRoKTtcclxuICAgIC8vICAgICAgICAgICAvLyDmiZPlvIDmlofku7ZcclxuICAgIC8vICAgICAgICAgICB3eC5vcGVuRG9jdW1lbnQoe1xyXG4gICAgLy8gICAgICAgICAgICAgZmlsZVBhdGg6IHNhdmVkRmlsZVBhdGggYXMgYW55ICxcclxuICAgIC8vICAgICAgICAgICAgIHN1Y2Nlc3MoKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCfmiZPlvIDmlofmoaPmiJDlip8nKVxyXG4gICAgLy8gICAgICAgICAgICAgfSxcclxuICAgIC8vICAgICAgICAgICB9KTtcclxuICAgIC8vICAgICAgICAgfSxcclxuICAgIC8vICAgICAgICAgZmFpbChlcnIpIHtcclxuICAgIC8vICAgICAgICAgICBjb25zb2xlLmxvZygn5L+d5a2Y5aSx6LSl77yaJywgZXJyKVxyXG4gICAgLy8gICAgICAgICB9XHJcbiAgICAvLyAgICAgICB9KTtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH0pXHJcbiAgfSxcclxuICBhc3luYyBnZXRQcm9tb3Rpb25zRGF0YSgpe1xyXG4gICAgbGV0IFtlcnJvciwgcmVzdWx0XSA9IGF3YWl0IHd4LiR1dGlscy50byhcclxuICAgICAgd3guJGh0dHAucmVxdWVzdCh7XHJcbiAgICAgICAgdXJsOmAvc2hvcHBpbmcvcGFuaWNCdXlpbmcuZG8/bT1nZXRQYW5pY0J1eWluZ1N1bW1hcnlgLFxyXG4gICAgICAgIGRhdGE6e1xyXG4gICAgICAgICAgZG9jY29kZTp0aGlzLmRhdGEuZG9jY29kZVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIClcclxuICAgIGlmIChlcnJvcil7XHJcbiAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc29sZS5sb2cocmVzdWx0KTtcclxuICAgIHRoaXMuc2V0RGF0YSh7XHJcbiAgICAgIHByb21vdGlvbnNEYXRhOiByZXN1bHQubGlzdFswXSxcclxuICAgICAgc2VsbGVyUmFua2luZ0xpc3Q6IHJlc3VsdC5zZWxsZXJSYW5raW5nTGlzdCxcclxuICAgICAgc2VsbGVyUmFua2luZ0xpc3RCYWNrdXA6IHJlc3VsdC5zZWxsZXJSYW5raW5nTGlzdCxcclxuICAgICAgb3JkZXJMaXN0OnJlc3VsdC5vcmRlckxpc3QsXHJcbiAgICAgIG9yZGVyTGlzdEJhY2t1cDpyZXN1bHQub3JkZXJMaXN0XHJcbiAgICB9KVxyXG4gIH0sXHJcblxyXG4gIGFzeW5jIGNoYW5nZVBhbmljQnV5aW5nU3RhdHVzKHN0YXR1czphbnkpe1xyXG4gICAgbGV0IHByb21vdGlvbnNEYXRhID0gdGhpcy5kYXRhLnByb21vdGlvbnNEYXRhO1xyXG4gICAgbGV0IFtlcnJvciwgcmVzdWx0XSA9IGF3YWl0IHd4LiR1dGlscy50byhcclxuICAgICAgd3guJGh0dHAucmVxdWVzdCh7XHJcbiAgICAgICAgdXJsOmAvc2hvcHBpbmcvcGFuaWNCdXlpbmcuZG8/bT1jaGFuZ2VQYW5pY0J1eWluZ1N0YXR1c2AsXHJcbiAgICAgICAgZGF0YTp7XHJcbiAgICAgICAgICBkb2Njb2RlOnByb21vdGlvbnNEYXRhLmRvY2NvZGUsXHJcbiAgICAgICAgICBzdGF0dXNcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApXHJcbiAgICBpZiAoZXJyb3Ipe1xyXG4gICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XHJcbiAgICBpZiAocmVzdWx0LnN0YXRlPT1cInN1Y2Nlc3NcIil7XHJcbiAgICAgIHRoaXMuZ2V0UHJvbW90aW9uc0RhdGEoKTtcclxuICAgIH1cclxuXHJcbiAgfSxcclxuXHJcbiAgY29udGludWVQcm9tb3Rpb24oKXtcclxuICAgIGxldCBwcm9tb3Rpb25zRGF0YSA9IHRoaXMuZGF0YS5wcm9tb3Rpb25zRGF0YTtcclxuICAgIGlmIChwcm9tb3Rpb25zRGF0YS5pc1Nob3dDb250aW51ZUJ1dHRvbikge1xyXG4gICAgICB0aGlzLmNoYW5nZVBhbmljQnV5aW5nU3RhdHVzKDIpO1xyXG4gICAgICBjb25zb2xlLmxvZygn57un57ut5rS75YqoJyk7XHJcbiAgICB9XHJcbiAgfSxcclxuICBzdG9wUHJvbW90aW9uKCl7XHJcbiAgICBsZXQgcHJvbW90aW9uc0RhdGEgPSB0aGlzLmRhdGEucHJvbW90aW9uc0RhdGE7XHJcbiAgICBpZiAocHJvbW90aW9uc0RhdGEuaXNTaG93U3RvcEJ1dHRvbikge1xyXG4gICAgICB0aGlzLmNoYW5nZVBhbmljQnV5aW5nU3RhdHVzKDMpO1xyXG4gICAgICBjb25zb2xlLmxvZygn5YGc5q2i5rS75YqoJyk7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgY29tcGxldGVHcm91cEJ1eWluZygpe1xyXG4gICAgd3gucHJvLnNob3dNb2RhbCh7XHJcbiAgICAgIHRpdGxlOiAn5o+Q56S6JyxcclxuICAgICAgY29udGVudDogJ+ehruWumuimgeWujOaIkOaLvOWbouWQl++8n+mAieaLqeehruWumu+8jOaLvOWbouWwhuebtOaOpeaIkOWKnycsXHJcbiAgICB9KS50aGVuKChyZXM6YW55KSA9PiB7XHJcbiAgICAgIC8vIG9uIGNsb3NlXHJcbiAgICAgIGNvbnNvbGUubG9nKHJlcyk7XHJcbiAgICAgIGlmIChyZXMuY29uZmlybSl7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ+ehruiupCcpO1xyXG4gICAgICAgIHRoaXMuY29tcGxldGVHcm91cEJ1eWluZ1JlcXVlc3QoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfSxcclxuICBjYW5jZWxHcm91cEJ1eWluZygpe1xyXG4gICAgd3gucHJvLnNob3dNb2RhbCh7XHJcbiAgICAgIHRpdGxlOiAn5o+Q56S6JyxcclxuICAgICAgY29udGVudDogJ+ehruWumuimgeWPlua2iOaLvOWbouWQl++8n+mAieaLqeehruWumu+8jOaLvOWbouWwhuebtOaOpeWksei0pe+8jOaJgOacieW3suaUr+S7mOiuouWNleWwhuWOn+i3r+mAgOi/mO+8gScsXHJcbiAgICB9KS50aGVuKChyZXM6YW55KSA9PiB7XHJcbiAgICAgIC8vIG9uIGNsb3NlXHJcbiAgICAgIGNvbnNvbGUubG9nKHJlcyk7XHJcbiAgICAgIGlmIChyZXMuY29uZmlybSl7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ+ehruiupCcpO1xyXG4gICAgICAgIHRoaXMuY2FuY2VsR3JvdXBCdXlpbmdSZXF1ZXN0KCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH0sXHJcblxyXG4gIGFzeW5jIGNvbXBsZXRlR3JvdXBCdXlpbmdSZXF1ZXN0KCl7XHJcbiAgICBsZXQgcHJvbW90aW9uc0RhdGEgPSB0aGlzLmRhdGEucHJvbW90aW9uc0RhdGE7XHJcbiAgICBsZXQgZm9ybWlkID0gdGhpcy5kYXRhLmZvcm1JZDtcclxuICAgIGxldCBbZXJyb3IsIHJlc3VsdF0gPSBhd2FpdCB3eC4kdXRpbHMudG8oXHJcbiAgICAgIHd4LiRodHRwLnJlcXVlc3Qoe1xyXG4gICAgICAgIHVybDpgL3Nob3BwaW5nL3BhbmljQnV5aW5nLmRvP209Z3JvdXBCdXlpbmdTdWNjZXNzYCxcclxuICAgICAgICBkYXRhOntcclxuICAgICAgICAgIGRvY2NvZGU6IHByb21vdGlvbnNEYXRhLmRvY2NvZGUsXHJcbiAgICAgICAgICBmb3JtaWRcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApXHJcbiAgICBpZiAoZXJyb3Ipe1xyXG4gICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XHJcbiAgICB0aGlzLmdldFByb21vdGlvbnNEYXRhKCk7XHJcbiAgfSxcclxuXHJcbiAgYXN5bmMgY2FuY2VsR3JvdXBCdXlpbmdSZXF1ZXN0KCl7XHJcbiAgICBsZXQgcHJvbW90aW9uc0RhdGEgPSB0aGlzLmRhdGEucHJvbW90aW9uc0RhdGE7XHJcbiAgICBsZXQgZm9ybWlkID0gdGhpcy5kYXRhLmZvcm1JZDtcclxuICAgIGxldCBbZXJyb3IsIHJlc3VsdF0gPSBhd2FpdCB3eC4kdXRpbHMudG8oXHJcbiAgICAgIHd4LiRodHRwLnJlcXVlc3Qoe1xyXG4gICAgICAgIHVybDpgL3Nob3BwaW5nL3BhbmljQnV5aW5nT3JkZXIuZG8/bT1kb1JldHVybk9yZGVyQWxsQnlDcmVhdG9yYCxcclxuICAgICAgICBkYXRhOntcclxuICAgICAgICAgIGRvY2NvZGU6IHByb21vdGlvbnNEYXRhLmRvY2NvZGUsXHJcbiAgICAgICAgICBmb3JtaWRcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApXHJcbiAgICBpZiAoZXJyb3Ipe1xyXG4gICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XHJcbiAgICB0aGlzLmdldFByb21vdGlvbnNEYXRhKCk7XHJcbiAgfSxcclxuXHJcbiAgc2V0U2VhcmNoS2V5KGV2ZW50OmFueSl7XHJcbiAgICB0aGlzLnNldERhdGEoe1xyXG4gICAgICBzZWFyY2hLZXk6ZXZlbnQuZGV0YWlsXHJcbiAgICB9KVxyXG4gICAgY29uc29sZS5sb2coJ+WFs+mUruivjScsZXZlbnQuZGV0YWlsKTtcclxuICB9LFxyXG5cclxuICBhc3luYyBvblNlYXJjaE9yZGVyKGV2ZW50OmFueSl7XHJcbiAgICBjb25zb2xlLmxvZygn5YeG5aSH5pCc57Si6K6i5Y2VJywgZXZlbnQuZGV0YWlsKTtcclxuICAgIGxldCBwcm9tb3Rpb25zRGF0YSA9IHRoaXMuZGF0YS5wcm9tb3Rpb25zRGF0YTtcclxuICAgIGxldCBbZXJyb3IsIHJlc3VsdF0gPSBhd2FpdCB3eC4kdXRpbHMudG8oXHJcbiAgICAgIHd4LiRodHRwLnJlcXVlc3Qoe1xyXG4gICAgICAgIHVybDpgL3Nob3BwaW5nL3BhbmljQnV5aW5nLmRvP209Z2V0T3JkZXJMaXN0Rm9yU2VsbGVyUmFua2luZ2AsXHJcbiAgICAgICAgZGF0YTp7XHJcbiAgICAgICAgICBkb2Njb2RlOiBwcm9tb3Rpb25zRGF0YS5kb2Njb2RlLFxyXG4gICAgICAgICAgc2VhcmNoS2V5OiBldmVudC5kZXRhaWwsXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKVxyXG4gICAgaWYgKGVycm9yKXtcclxuICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xyXG4gICAgdGhpcy5zZXREYXRhKHtcclxuICAgICAgb3JkZXJMaXN0OnJlc3VsdC5vcmRlckxpc3RcclxuICAgIH0pXHJcbiAgfSxcclxuXHJcbiAgb25DbGVhclNlYXJjaE9yZGVyKCl7XHJcbiAgICBjb25zb2xlLmxvZyg4ODgpO1xyXG4gICAgdGhpcy5zZXREYXRhKHtcclxuICAgICAgb3JkZXJMaXN0OnRoaXMuZGF0YS5vcmRlckxpc3RCYWNrdXBcclxuICAgIH0pXHJcbiAgfSxcclxuXHJcbiAgYXN5bmMgb25TZWFyY2hSYW5rcyhldmVudDphbnkpe1xyXG4gICAgY29uc29sZS5sb2coJ+WHhuWkh+aQnOe0ouaOkuihjCcsZXZlbnQuZGV0YWlsKTtcclxuICAgIC8vIHRoaXMuc2V0RGF0YSh7XHJcbiAgICAvLyAgIHNlYXJjaEtleTpldmVudC5kZXRhaWxcclxuICAgIC8vIH0pXHJcbiAgICBsZXQgcHJvbW90aW9uc0RhdGEgPSB0aGlzLmRhdGEucHJvbW90aW9uc0RhdGE7XHJcbiAgICBsZXQgW2Vycm9yLCByZXN1bHRdID0gYXdhaXQgd3guJHV0aWxzLnRvKFxyXG4gICAgICB3eC4kaHR0cC5yZXF1ZXN0KHtcclxuICAgICAgICB1cmw6YC9zaG9wcGluZy9wYW5pY0J1eWluZy5kbz9tPWdldFNlbGxlclJhbmtpbmdMaXN0YCxcclxuICAgICAgICBkYXRhOntcclxuICAgICAgICAgIGRvY2NvZGU6IHByb21vdGlvbnNEYXRhLmRvY2NvZGUsXHJcbiAgICAgICAgICBzZWFyY2hLZXk6IGV2ZW50LmRldGFpbCxcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApXHJcbiAgICBpZiAoZXJyb3Ipe1xyXG4gICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XHJcbiAgICB0aGlzLnNldERhdGEoe1xyXG4gICAgICBzZWxsZXJSYW5raW5nTGlzdDpyZXN1bHQuc2VsbGVyUmFua2luZ0xpc3RcclxuICAgIH0pXHJcbiAgfSxcclxuICBvbkNsZWFyU2VhcmNoUmFua3MoKXtcclxuICAgIGNvbnNvbGUubG9nKDk5OSk7XHJcbiAgICB0aGlzLnNldERhdGEoe1xyXG4gICAgICBzZWxsZXJSYW5raW5nTGlzdDp0aGlzLmRhdGEuc2VsbGVyUmFua2luZ0xpc3RCYWNrdXBcclxuICAgIH0pXHJcbiAgfSxcclxuXHJcbiAgZ29PcmRlckRldGFpbChldmVudDphbnkpe1xyXG4gICAgbGV0IGRvY2NvZGUgPSBldmVudC5jdXJyZW50VGFyZ2V0LmRhdGFzZXQuZG9jY29kZTtcclxuICAgIGxldCB1cmwgPSBgL3BhZ2VzL29yZGVyRGV0YWlsL29yZGVyRGV0YWlsP2Zyb209JmRvY2NvZGU9JHtkb2Njb2RlfWBcclxuICAgIHd4Lm5hdmlnYXRlVG8oe1xyXG4gICAgICB1cmwsXHJcbiAgICAgIGV2ZW50czoge1xyXG4gICAgICAgIC8vIOS4uuaMh+WumuS6i+S7tua3u+WKoOS4gOS4quebkeWQrOWZqO+8jOiOt+WPluiiq+aJk+W8gOmhtemdouS8oOmAgeWIsOW9k+WJjemhtemdoueahOaVsOaNrlxyXG4gICAgICAgIGRldGFpbENoZWNrQ29kZTogKGRhdGE6IGFueSk9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygn6YCJ5oup55qE5ZWG5ZOBJyxkYXRhKVxyXG4gICAgICAgICAgdGhpcy50cmlnZ2VyRXZlbnQoJ2NvbWViYWNrJyxkYXRhKTtcclxuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKF90aGlzLHRoaXMpO1xyXG4gICAgICAgICAgLy8gbGV0IFtlcnJNc2cscXJSZXNdID0gYXdhaXQgdGhpcy5nZXRQb3N0ZXJRckNvZGUoe1xyXG4gICAgICAgICAgLy8gICBRckNvZGVUeXBlOjMwLFxyXG4gICAgICAgICAgLy8gICBtYXRjb2RlOiBkYXRhLmdvb2RzXHJcbiAgICAgICAgICAvLyB9KTtcclxuICAgICAgICAgIC8vIGlmIChlcnJNc2cpIHtcclxuICAgICAgICAgIC8vICAgcmV0dXJuO1xyXG4gICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgLy8gdGhpcy5zZXREYXRhKHtcclxuICAgICAgICAgIC8vICAgcXJSZXMsXHJcbiAgICAgICAgICAvLyAgIHNlbGVjdGVkUXI6aW5kZXhcclxuICAgICAgICAgIC8vIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH0sXHJcblxyXG4gIGFzeW5jIGRvSGVYaWFvKGV2ZW50OmFueSl7XHJcbiAgICBjb25zb2xlLmxvZyhldmVudCk7XHJcbiAgICAvLyByZXR1cm4gZmFsc2U7XHJcbiAgICAvLyBsZXQgZm9ybWlkID0gdGhpcy5kYXRhLnByb21vdGlvbnNEYXRhLmZvcm1JZDtcclxuICAgIGxldCBkb2Njb2RlID0gZXZlbnQuY3VycmVudFRhcmdldC5kYXRhc2V0LmRvY2NvZGU7XHJcbiAgICB3eC5wcm8uc2hvd01vZGFsKHtcclxuICAgICAgdGl0bGU6ICfmj5DnpLonLFxyXG4gICAgICBjb250ZW50OiAn56Gu5a6a6KaB5qC46ZSA5q2k6K6i5Y2V5ZCX77yfJyxcclxuICAgIH0pLnRoZW4oKHJlczphbnkpID0+IHtcclxuICAgICAgLy8gb24gY2xvc2VcclxuICAgICAgY29uc29sZS5sb2cocmVzKTtcclxuICAgICAgaWYgKHJlcy5jb25maXJtKXtcclxuICAgICAgICBjb25zb2xlLmxvZygn56Gu6K6kJyk7XHJcbiAgICAgICAgdGhpcy5jaGVja0hYRGF0YShkb2Njb2RlKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfSxcclxuICBhc3luYyBjaGVja0hYRGF0YShkb2Njb2RlOnN0cmluZyl7XHJcbiAgICBsZXQgW2Vycm9yLCByZXN1bHRdID0gYXdhaXQgd3guJHV0aWxzLnRvKFxyXG4gICAgICB3eC4kaHR0cC5yZXF1ZXN0KHtcclxuICAgICAgICB1cmw6YC9zaG9wcGluZy9wYW5pY0J1eWluZ09yZGVyLmRvP209ZG9IZVhpYW9gLFxyXG4gICAgICAgIGRhdGE6e1xyXG4gICAgICAgICAgZG9jY29kZVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIClcclxuICAgIGlmIChlcnJvcil7XHJcbiAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc29sZS5sb2cocmVzdWx0KTtcclxuICAgIHRoaXMub25TZWFyY2hPcmRlcih7ZGV0YWlsOicnfSk7XHJcbiAgfSxcclxuXHJcbiAgLy8gYXN5bmMgcmVmdW5kUmVxdWVzdChkb2Njb2RlOnN0cmluZyxmb3JtaWQ6bnVtYmVyKXtcclxuICAvL1xyXG4gIC8vICAgbGV0IFtlcnJvciwgcmVzdWx0XSA9IGF3YWl0IHd4LiR1dGlscy50byhcclxuICAvLyAgICAgd3guJGh0dHAucmVxdWVzdCh7XHJcbiAgLy8gICAgICAgdXJsOmAvc2hvcHBpbmcvcGFuaWNCdXlpbmdPcmRlci5kbz9tPWRvUmV0dXJuT3JkZXJCeUNyZWF0b3JgLFxyXG4gIC8vICAgICAgIGRhdGE6e1xyXG4gIC8vICAgICAgICAgZG9jY29kZSxcclxuICAvLyAgICAgICAgIGZvcm1pZCxcclxuICAvLyAgICAgICB9XHJcbiAgLy8gICAgIH0pXHJcbiAgLy8gICApXHJcbiAgLy8gICBpZiAoZXJyb3Ipe1xyXG4gIC8vICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgLy8gICAgIHJldHVybjtcclxuICAvLyAgIH1cclxuICAvLyAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XHJcbiAgLy8gICBpZiAocmVzdWx0LnN0YXRlPT0nc3VjY2VzcycpIHtcclxuICAvLyAgICAgd3guc2hvd1RvYXN0KHt0aXRsZTpgJHtyZXN1bHQubWVzc2FnZX1gfSlcclxuICAvLyAgIH1cclxuICAvLyAgIC8vIGxldCByZXN1bHQgPSB7XHJcbiAgLy8gICAvLyAgIFwic3RhdGVcIjpcImZhaWxlZFwiLCAgICAvL+aIkOWKn+aXtu+8jOi/lOWbniBzdWNjZXNzICzlpLHotKXml7bov5Tlm54gZmFpbGVkXHJcbiAgLy8gICAvLyAgIFwibWVzc2FnZVwiOlwi5ZWG5a62W+W8oOS4iV3otKbmiLfkvZnpop1bOTgw5YWDXeS4jei2s+S7peaJo+mZpOacrOWNlemAgOasvuaJgOmcgOimgeeahOmHkeminVsxMDAw5YWDXe+8jOmAgOasvuWksei0pe+8gVwiLFxyXG4gIC8vICAgLy8gICBcImlzQWxsb3dSZWZ1bmRcIjpmYWxzZSAsICAvL+aYr+WQpuWFgeiuuOmAgOasvlxyXG4gIC8vICAgLy8gICBcInNlcnZpY2VDbHRDb2RlXCI6XCIyMDA4NzNcIiAsICAvL+WVhuWutue8luWPt1xyXG4gIC8vICAgLy8gICBcInNlcnZpY2VDbHROYW1lXCI6XCLlvKDkuIlcIiAsICAvL+WVhuWutuWQjeensFxyXG4gIC8vICAgLy8gICBcInNlcnZpY2VUZWxlcGhvbmVcIjpcIjEzODg4ODg4ODg4XCIgLCAgLy/llYblrrbnlLXor51cclxuICAvLyAgIC8vICAgXCJzZWxsZXJJZFwiOjEgLCAgLy/okKXplIDkurrlkZhJRFxyXG4gIC8vICAgLy8gICBcInNlbGxlck5hbWVcIjpcIuadjuWbm1wiICwgLy/okKXplIDkurrlkZjlp5PlkI1cclxuICAvLyAgIC8vICAgXCJzZWxsZXJUZWxlcGhvbmVcIjpcIjEzODg4ODg4ODg4OFwiICwgLy/okKXplIDkurrlkZjnlLXor51cclxuICAvLyAgIC8vICAgXCJwYXlhYmxlQW1vdW50XCI6MTAwMCAsICAvL+W6lOmAgOmHkeminVxyXG4gIC8vICAgLy8gICBcInNlcnZpY2VCYWxhbmNlXCI6OTgwICAsICAvL+WVhuWutuWPr+mAgOasvuS9meminSDvvJsg5aaC5p6cIOW6lOmAgOmHkeminSAg5aSn5LqOIOWVhuWutuWPr+mAgOasvuS9meminSDmiYvnu63otLnvvIzliJnkuI3og73pgIDmrL5cclxuICAvLyAgIC8vICAgXCJwYWlkRmVlQW1vdW50XCI6MjAgICwgLy/lupTpgIDmiYvnu63otLlcclxuICAvLyAgIC8vICAgXCJjdXN0b21lckNsdENvZGVcIjpcIjIwMDgyM1wiICwgIC8v5a6i5oi357yW5Y+3XHJcbiAgLy8gICAvLyAgIFwiY3VzdG9tZXJDbHROYW1lXCI6XCLnjovkupRcIiwgICAvL+WuouaIt+WQjeensFxyXG4gIC8vICAgLy8gICBcImN1c3RvbWVyVGVsZXBob25lXCI6XCIxMzg4ODg4ODg4ODg4XCIgICAvL+WuouaIt+eUteivnVxyXG4gIC8vICAgLy8gfVxyXG4gIC8vICAgaWYgKHJlc3VsdC5zdGF0ZT09J2ZhaWxlZCcmJnJlc3VsdC5pc0FsbG93UmVmdW5kPT09ZmFsc2Upe1xyXG4gIC8vICAgICB0aGlzLnNldERhdGEoe1xyXG4gIC8vICAgICAgIHJlZnVuZFJlc3VsdDogcmVzdWx0LFxyXG4gIC8vICAgICAgIGlzU2hvd0RpYWxvZzp0cnVlXHJcbiAgLy8gICAgIH0pXHJcbiAgLy8gICB9XHJcbiAgLy8gICB0aGlzLm9uU2VhcmNoT3JkZXIoe2RldGFpbDonJ30pO1xyXG4gIC8vIH0sXHJcbiAgLy8gb25EaWFsb2dDbG9zZSgpe1xyXG4gIC8vICAgdGhpcy5zZXREYXRhKHtcclxuICAvLyAgICAgaXNTaG93RGlhbG9nOmZhbHNlXHJcbiAgLy8gICB9KVxyXG4gIC8vIH0sXHJcbiAgYXN5bmMgZG9SZWZ1bmQoZXZlbnQ6YW55KXtcclxuICAgIGNvbnNvbGUubG9nKGV2ZW50KTtcclxuICAgIGxldCBmb3JtaWQgPSB0aGlzLmRhdGEucHJvbW90aW9uc0RhdGEuZm9ybUlkO1xyXG4gICAgbGV0IHJlZnVuZERpYWxvZyA9IHRoaXMuc2VsZWN0Q29tcG9uZW50KCcjcmVmdW5kLWRpYWxvZycpO1xyXG4gICAgbGV0IHJlc3VsdCA9IGF3YWl0IHJlZnVuZERpYWxvZy5kb1JlZnVuZChldmVudC5jdXJyZW50VGFyZ2V0LmRhdGFzZXQsZm9ybWlkKTtcclxuICAgIGNvbnNvbGUubG9nKCfpgIDmrL5yZXN1bHQnLHJlc3VsdCk7XHJcbiAgICBpZiAocmVzdWx0KXtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5vblNlYXJjaE9yZGVyKHtkZXRhaWw6Jyd9KTtcclxuICAgICAgfSwxNTAwKVxyXG4gICAgfVxyXG4gICAgLy8gcmV0dXJuIGZhbHNlO1xyXG4gICAgLy8gbGV0IGZvcm1pZCA9IHRoaXMuZGF0YS5wcm9tb3Rpb25zRGF0YS5mb3JtSWQ7XHJcbiAgICAvLyBsZXQge2RvY2NvZGUsY2x0bmFtZX0gPSBldmVudC5jdXJyZW50VGFyZ2V0LmRhdGFzZXQ7XHJcbiAgICAvLyB3eC5wcm8uc2hvd01vZGFsKHtcclxuICAgIC8vICAgdGl0bGU6ICfmj5DnpLonLFxyXG4gICAgLy8gICBjb250ZW50OiBg56Gu5a6a6KaB6YCA5qy+57uZWyR7Y2x0bmFtZX1d5ZCX77yfYCxcclxuICAgIC8vIH0pLnRoZW4oKHJlczphbnkpID0+IHtcclxuICAgIC8vICAgLy8gb24gY2xvc2VcclxuICAgIC8vICAgY29uc29sZS5sb2cocmVzKTtcclxuICAgIC8vICAgaWYgKHJlcy5jb25maXJtKXtcclxuICAgIC8vICAgICBjb25zb2xlLmxvZygn56Gu6K6kJyk7XHJcbiAgICAvLyAgICAgdGhpcy5yZWZ1bmRSZXF1ZXN0KGRvY2NvZGUsZm9ybWlkKTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfSk7XHJcbiAgfSxcclxuXHJcbiAgLy8gc2VsbGVyVmVyaWZ5KCl7XHJcbiAgLy8gICB0aGlzLnNldERhdGEoe1xyXG4gIC8vICAgICBzaG93U2hhcmU6dHJ1ZVxyXG4gIC8vICAgfSlcclxuICAvLyAgIC8vIGNvbnNvbGUubG9nKGdldEN1cnJlbnRQYWdlcygpKTtcclxuICAvLyB9LFxyXG4gIC8vIG9uU2hhcmVDbG9zZSgpe1xyXG4gIC8vICAgdGhpcy5zZXREYXRhKHtcclxuICAvLyAgICAgc2hvd1NoYXJlOmZhbHNlXHJcbiAgLy8gICB9KVxyXG4gIC8vIH0sXHJcbiAgLy8gb25TaGFyZVNlbGVjdChldmVudDphbnkpIHtcclxuICAvLyAgIGNvbnNvbGUubG9nKGV2ZW50LmRldGFpbCk7XHJcbiAgLy8gICB0aGlzLm9uU2hhcmVDbG9zZSgpO1xyXG4gIC8vIH0sXHJcbiAgLy8gb25TaGFyZUFwcE1lc3NhZ2UoKSB7XHJcbiAgLy8gICBsZXQgZG9jY29kZTpzdHJpbmcgPSB0aGlzLmRhdGEucHJvbW90aW9uc0RhdGEuZG9jY29kZSB8fCAnJztcclxuICAvLyAgIC8vIGxldCB0aXRsZTpzdHJpbmcgPSB0aGlzLmRhdGEucHJvbW90aW9uc0RhdGEudGl0bGUgfHwgJyc7XHJcbiAgLy8gICBsZXQgaW1hZ2VVcmw6c3RyaW5nID0gdGhpcy5kYXRhLnByb21vdGlvbnNEYXRhLmNvdmVySW1hZ2VVcmwgfHwgJyc7XHJcbiAgLy8gICBsZXQgc2VsbGVyVW5DaGVja2VkTmFtZXM6c3RyaW5nID0gdGhpcy5kYXRhLnByb21vdGlvbnNEYXRhLnNlbGxlclVuQ2hlY2tlZE5hbWVzIHx8ICcnO1xyXG4gIC8vICAgcmV0dXJuIHtcclxuICAvLyAgICAgLy8gdGl0bGU6IHV0aWxzLmdldFNoYXJlVGl0bGUoKSxcclxuICAvLyAgICAgdGl0bGU6IGDor7fokKXplIDkurrlkZhbJHtzZWxsZXJVbkNoZWNrZWROYW1lc31d6aqM6K+B6Lqr5Lu9YCxcclxuICAvLyAgICAgaW1hZ2VVcmwsXHJcbiAgLy8gICAgIHBhdGg6IGBwYWdlcy9zZWxsZXJWZXJpZnkvc2VsbGVyVmVyaWZ5P2RvY2NvZGU9JHtkb2Njb2RlfWAsXHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG59KVxyXG5leHBvcnQge31cclxuIl19