Sanakey
2021-06-04 355a84d740a2a9dfa1d67cb2d2e11843d42809ac
提交 | 用户 | age
b6cc28 1 "use strict";
282d69 2 var __assign = (this && this.__assign) || function () {
S 3     __assign = Object.assign || function(t) {
4         for (var s, i = 1, n = arguments.length; i < n; i++) {
5             s = arguments[i];
6             for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7                 t[p] = s[p];
8         }
9         return t;
10     };
11     return __assign.apply(this, arguments);
12 };
13 var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14     return new (P || (P = Promise))(function (resolve, reject) {
15         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
16         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
17         function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
18         step((generator = generator.apply(thisArg, _arguments || [])).next());
19     });
20 };
21 var __generator = (this && this.__generator) || function (thisArg, body) {
22     var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
23     return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
24     function verb(n) { return function (v) { return step([n, v]); }; }
25     function step(op) {
26         if (f) throw new TypeError("Generator is already executing.");
27         while (_) try {
28             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;
29             if (y = 0, t) op = [op[0] & 2, t.value];
30             switch (op[0]) {
31                 case 0: case 1: t = op; break;
32                 case 4: _.label++; return { value: op[1], done: false };
33                 case 5: _.label++; y = op[1]; op = [0]; continue;
34                 case 7: op = _.ops.pop(); _.trys.pop(); continue;
35                 default:
36                     if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
37                     if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
38                     if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
39                     if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
40                     if (t[2]) _.ops.pop();
41                     _.trys.pop(); continue;
42             }
43             op = body.call(thisArg, _);
44         } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
45         if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
46     }
47 };
b6cc28 48 Object.defineProperty(exports, "__esModule", { value: true });
282d69 49 var myValidator_1 = require("../../utils/myValidator");
S 50 var validatorInstance;
b6cc28 51 Page({
S 52     data: {
282d69 53         autosize: { maxHeight: 120, minHeight: 50 },
S 54         validatorInstance: {},
55         freeId: 0,
56         formId: 710804,
57         formData: {},
58         doccode: '',
59         fromPage: '',
f46177 60         delivery: {},
355a84 61         feeRateForPay: 1,
S 62         sellerUnCheckedNames: '',
63         coverImageUrl: '',
64         isShowDialog: false
b6cc28 65     },
282d69 66     onLoad: function (options) {
S 67         var doccode = options.doccode || '';
68         var fromPage = options.fromPage || '';
f46177 69         var settings = wx.globalData.settings;
282d69 70         this.setData({
S 71             fileUploadUrl: "/shopping/panicBuying.do?m=uploadAttachment&formid=" + this.data.formId,
72             doccode: doccode,
f46177 73             fromPage: fromPage,
S 74             feeRateForPay: (settings.feeRateForWxPay + settings.platformOperatorCommissionRatio) * 100
b6cc28 75         });
282d69 76         if (doccode) {
S 77             this.getSaveData();
78         }
79     },
80     getSaveData: function () {
81         return __awaiter(this, void 0, void 0, function () {
82             var doccode, _a, error, result, data, formData;
83             return __generator(this, function (_b) {
84                 switch (_b.label) {
85                     case 0:
86                         doccode = this.data.doccode;
87                         return [4, wx.$utils.to(wx.$http.request({
88                                 url: "/shopping/panicBuying.do?m=getPanicBuyingDetail",
89                                 data: {
90                                     doccode: doccode,
91                                     isEdit: true,
92                                     RefOpenId: wx.globalData.OpenId
93                                 }
94                             }))];
95                     case 1:
96                         _a = _b.sent(), error = _a[0], result = _a[1];
97                         if (error) {
98                             console.log(error);
99                             return [2];
100                         }
101                         console.log(result);
102                         data = result.list[0];
103                         formData = {
104                             promotionsTitle: data.title,
105                             originalPrice: data.originalPrice,
106                             flashSalePrice: data.salesPrice,
107                             flashSaleTotal: data.numberOfTeam,
108                             promotionDescription: data.description,
109                             startTime: data.effectiveStartDate,
110                             endTime: data.effectiveEndDate,
111                             coverImageList: (data.coverImageUrl && this.getCoverImageList(data)) || [],
112                             imagesList: data.imagesUrl,
113                             coverImage: data.coverImage,
114                             images: data.images,
115                             freeId: data.freeId,
116                         };
355a84 117                         this.setData(__assign({}, formData, { coverImageUrl: data.coverImageUrl, sellerList: result.sellerList, status: data.panicBuyingStatus, delivery: {
282d69 118                                 freeId: data.freeId,
S 119                                 freeName: data.freeName,
120                                 isRequiredAddress: data.isRequiredAddress,
121                                 transCosts: data.transCosts,
122                             } }));
123                         console.log('配送数据。。。', this.data.delivery);
d38be7 124                         wx.setNavigationBarTitle({
S 125                             title: data.title
126                         });
282d69 127                         return [2];
S 128                 }
129             });
130         });
131     },
132     getCoverImageList: function (data) {
133         var _a = data.coverImage.split(";"), unid = _a[0], seq = _a[1];
134         return [{
135                 url: data.coverImageUrl || '',
136                 unid: unid,
137                 seq: seq
138             }];
139     },
140     onReady: function () {
141         this.initValidator();
142     },
143     selectedStartTime: function (event) {
144         console.log('开始', event);
145         this.setData({
146             startTime: event.detail.startTime,
147         });
148     },
149     selectedEndTime: function (event) {
150         console.log('结束', event);
151         this.setData({
152             endTime: event.detail.endTime,
153         });
154     },
155     getDeliveryMethod: function (event) {
156         console.log(event.detail);
157         this.setData({
158             freeId: event.detail.freeId,
159         });
160         console.log('this.data.freeId;', this.data.freeId);
161     },
162     checkPromotionsTitle: function (e) {
163         var value = e.detail.value;
164         console.log(e);
165         validatorInstance.checkField('promotionsTitle', value);
166         this.setData({
167             promotionsTitle: value.trim()
168         });
169     },
170     checkOriginalPrice: function (e) {
171         var value = e.detail.value;
172         console.log(e);
173         validatorInstance.checkField('originalPrice', value);
174         this.setData({
175             originalPrice: value.trim()
176         });
177     },
178     checkFlashSalePrice: function (e) {
179         var value = e.detail.value;
180         console.log(e);
181         validatorInstance.checkField('flashSalePrice', value);
182         this.setData({
183             flashSalePrice: value.trim()
184         });
185     },
186     checkFlashSaleTotal: function (e) {
187         var value = e.detail.value;
188         console.log(e);
189         validatorInstance.checkField('flashSaleTotal', value);
190         this.setData({
191             flashSaleTotal: value.trim()
192         });
193     },
194     checkPromotionDescription: function (e) {
195         var value = e.detail.value;
196         console.log(e);
197         validatorInstance.checkField('promotionDescription', value);
198         this.setData({
199             promotionDescription: value.trim()
200         });
201     },
202     postFormData: function (data) {
203         return __awaiter(this, void 0, void 0, function () {
204             var _a, error, res;
205             return __generator(this, function (_b) {
206                 switch (_b.label) {
207                     case 0: return [4, wx.$utils.to(wx.$http.request({
208                             url: '/shopping/panicBuying.do?m=saveDocCode',
209                             data: data,
210                             method: 'POST'
211                         }))];
212                     case 1:
213                         _a = _b.sent(), error = _a[0], res = _a[1];
214                         if (error) {
215                             console.log(error);
216                             return [2, false];
217                         }
218                         console.log(res);
355a84 219                         if (res.state === 'success') {
S 220                             wx.showToast({
221                                 title: '成功',
222                                 duration: 2000
223                             });
224                         }
225                         if (res.state === 'failed' && res.sellerCheckedBalance > 0) {
226                             this.setData({
227                                 sellerUnCheckedNames: res.sellerUnCheckedNames,
228                                 isShowDialog: true
229                             });
230                         }
231                         return [2, res.state === 'success'];
282d69 232                 }
S 233             });
234         });
235     },
236     onSubmit: function () {
237         return __awaiter(this, void 0, void 0, function () {
355a84 238             var timeQuantum, sellerEdit, fileUploader, fileUploaderMultiple, deliveryMethod, checkTransCosts, transCosts, checkStartTime, checkEndTime, checkCoverImage, checkAllData, sellerList, checkDefaultSeller, checkArr, data, coverImage, coverImageUrl, images, formData;
282d69 239             return __generator(this, function (_a) {
S 240                 switch (_a.label) {
241                     case 0:
242                         timeQuantum = this.selectComponent('#time-quantum');
243                         sellerEdit = this.selectComponent('#seller-edit');
244                         fileUploader = this.selectComponent('#file-uploader');
245                         fileUploaderMultiple = this.selectComponent('#file-uploader-multiple');
246                         deliveryMethod = this.selectComponent('#delivery-method');
247                         checkTransCosts = true;
248                         transCosts = 0;
249                         if (deliveryMethod.data.isRequiredAddress) {
250                             checkTransCosts = deliveryMethod.checkFields();
251                             transCosts = Number(deliveryMethod.data.transCosts);
252                         }
253                         console.log('sellerEdit');
254                         console.log(timeQuantum);
255                         checkStartTime = timeQuantum.checkTime("startTime", "请选择计划开始时间");
256                         checkEndTime = timeQuantum.checkTime("endTime", "请选择计划结束时间");
257                         checkCoverImage = fileUploader.checkImages("coverImage", "请上传一张封面图");
258                         checkAllData = validatorInstance.checkAllData();
259                         sellerList = sellerEdit.getSellerList();
260                         if (sellerList.length < 1) {
261                             wx.showToast({
262                                 title: '请选择营销人员',
263                                 icon: 'none',
264                                 duration: 2000
265                             });
266                             return [2];
267                         }
268                         checkDefaultSeller = sellerEdit.checkDefaultSeller();
269                         if (!checkDefaultSeller) {
270                             wx.showToast({
271                                 title: '请选择默认营销人员',
272                                 icon: 'none',
273                                 duration: 2000
274                             });
275                             return [2];
276                         }
277                         console.log('checkDefaultSeller', checkDefaultSeller);
d38be7 278                         checkArr = [checkTransCosts, checkStartTime, checkEndTime, checkCoverImage, checkAllData];
282d69 279                         data = {};
S 280                         if (!checkArr.every(function (item) {
281                             return item;
282                         })) return [3, 2];
283                         console.log('....提交成功');
284                         coverImage = fileUploader.getCoverImageUnid();
355a84 285                         coverImageUrl = fileUploader.getImgList()[0].url || '';
S 286                         this.setData({
287                             coverImageUrl: coverImageUrl
288                         });
282d69 289                         images = fileUploaderMultiple.getImagesUnid();
S 290                         console.log(coverImage, images);
291                         formData = this.data;
292                         data = {
293                             docCode: formData.doccode,
294                             formId: formData.formId,
295                             docStatus: 100,
296                             coverImage: coverImage,
297                             images: images,
298                             transCosts: transCosts,
299                             effectiveStartDate: formData.startTime,
300                             effectiveEndDate: formData.endTime,
301                             freeId: formData.freeId,
302                             title: formData.promotionsTitle,
303                             originalPrice: Number(formData.originalPrice),
304                             salesPrice: Number(formData.flashSalePrice),
305                             numberOfTeam: Number(formData.flashSaleTotal),
306                             description: formData.promotionDescription,
307                             sellerList: sellerList,
308                         };
309                         console.log('待发布数据', data);
310                         return [4, this.postFormData(data)];
311                     case 1:
312                         if (!(_a.sent()))
313                             return [2];
314                         if (this.data.fromPage == 'edit') {
315                             wx.navigateBack();
316                         }
317                         else {
318                             wx.redirectTo({
319                                 url: '../promotionsManageList/promotionsManageList?tab=3'
320                             });
321                         }
322                         return [3, 3];
323                     case 2:
324                         wx.showToast({
325                             title: '页面还有错误未处理',
326                             icon: 'none',
327                             duration: 2000
328                         });
329                         console.log('还有错误未处理');
330                         _a.label = 3;
331                     case 3: return [2];
332                 }
333             });
334         });
335     },
336     onSave: function () {
337         var sellerEdit = this.selectComponent('#seller-edit');
338         var sellerList = sellerEdit.getSellerList();
339         var fileUploader = this.selectComponent('#file-uploader');
340         var fileUploaderMultiple = this.selectComponent('#file-uploader-multiple');
341         console.log('....提交成功');
342         var coverImage = fileUploader.getCoverImageUnid();
343         var images = fileUploaderMultiple.getImagesUnid();
344         var deliveryMethod = this.selectComponent('#delivery-method');
345         var transCosts = 0;
346         if (deliveryMethod.data.isRequiredAddress) {
347             transCosts = Number(deliveryMethod.data.transCosts);
348         }
349         console.log(coverImage, images);
350         var formData = this.data;
351         var data = {
352             docCode: formData.doccode,
353             formId: formData.formId,
354             docStatus: 0,
355             coverImage: coverImage,
356             images: images,
357             transCosts: transCosts,
358             effectiveStartDate: formData.startTime,
359             effectiveEndDate: formData.endTime,
360             freeId: formData.freeId,
361             title: formData.promotionsTitle,
362             originalPrice: Number(formData.originalPrice) || 0,
363             salesPrice: Number(formData.flashSalePrice) || 0,
364             numberOfTeam: Number(formData.flashSaleTotal) || 0,
365             description: formData.promotionDescription,
366             sellerList: sellerList,
367         };
368         console.log('待保存数据', data);
369         this.postFormData(data);
370     },
371     initValidator: function () {
372         validatorInstance = new myValidator_1.default({
373             rules: {
374                 promotionsTitle: {
375                     required: true,
355a84 376                     rangelength: [3, 14]
282d69 377                 },
S 378                 originalPrice: {
379                     required: true,
380                     number: true
381                 },
382                 flashSalePrice: {
383                     required: true,
384                     number: true
385                 },
386                 flashSaleTotal: {
387                     required: true,
388                     number: true
389                 },
390             },
391             messages: {
392                 promotionsTitle: {
393                     required: '请输入活动标题',
355a84 394                     rangelength: '文字长度请控制在3到14之间'
282d69 395                 },
S 396                 originalPrice: {
8724a4 397                     required: '请输入产品标价',
282d69 398                     number: '价格必须为数字'
S 399                 },
400                 flashSalePrice: {
401                     required: '请输入拼团价',
402                     number: '价格必须为数字'
403                 },
404                 flashSaleTotal: {
405                     required: '请输入成团人数',
406                     number: '人数必须为数字'
407                 },
408             },
409             multiCheck: true
410         }, this);
411         console.log('hhhh,', validatorInstance);
412     },
355a84 413     onShareAppMessage: function () {
S 414         var doccode = this.data.doccode || '';
415         var imageUrl = this.data.coverImageUrl || '';
416         var sellerUnCheckedNames = this.data.sellerUnCheckedNames || '';
417         return {
418             title: "\u8BF7\u8425\u9500\u4EBA\u5458[" + sellerUnCheckedNames + "]\u9A8C\u8BC1\u8EAB\u4EFD",
419             imageUrl: imageUrl,
420             path: "pages/sellerVerify/sellerVerify?doccode=" + doccode,
421         };
422     }
b6cc28 423 });
355a84 424 //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXBCdXlpbmdDcmVhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJncm91cEJ1eWluZ0NyZWF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSx1REFBa0Q7QUFFbEQsSUFBSSxpQkFBNkIsQ0FBQztBQUVsQyxJQUFJLENBQUM7SUFDSCxJQUFJLEVBQUU7UUFDSixRQUFRLEVBQUMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7UUFDMUMsaUJBQWlCLEVBQUMsRUFBRTtRQUNwQixNQUFNLEVBQUMsQ0FBQztRQUNSLE1BQU0sRUFBQyxNQUFNO1FBQ2IsUUFBUSxFQUFFLEVBQUU7UUFDWixPQUFPLEVBQUMsRUFBRTtRQUNWLFFBQVEsRUFBQyxFQUFFO1FBQ1gsUUFBUSxFQUFDLEVBQUU7UUFDWCxhQUFhLEVBQUMsQ0FBQztRQUNmLG9CQUFvQixFQUFDLEVBQUU7UUFDdkIsYUFBYSxFQUFDLEVBQUU7UUFDaEIsWUFBWSxFQUFDLEtBQUs7S0FDbkI7SUFDRCxNQUFNLFlBQUMsT0FBTztRQUVaLElBQUksT0FBTyxHQUFFLE9BQU8sQ0FBQyxPQUFPLElBQUUsRUFBRSxDQUFDO1FBQ2pDLElBQUksUUFBUSxHQUFFLE9BQU8sQ0FBQyxRQUFRLElBQUUsRUFBRSxDQUFDO1FBQ25DLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDWCxhQUFhLEVBQUUsd0RBQXNELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBUTtZQUN2RixPQUFPLFNBQUE7WUFDUCxRQUFRLFVBQUE7WUFDUixhQUFhLEVBQUUsQ0FBQyxRQUFRLENBQUMsZUFBZSxHQUFDLFFBQVEsQ0FBQywrQkFBK0IsQ0FBQyxHQUFDLEdBQUc7U0FDdkYsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxP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QUFhLElBQUksRUFBRSxDQUFDO1FBQ3BELElBQUksb0JBQW9CLEdBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxFQUFFLENBQUM7UUFDdkUsT0FBTztZQUVMLEtBQUssRUFBRSxvQ0FBUyxvQkFBb0IsOEJBQU87WUFDM0MsUUFBUSxVQUFBO1lBQ1IsSUFBSSxFQUFFLDZDQUEyQyxPQUFTO1NBQzNELENBQUE7SUFDSCxDQUFDO0NBQ0YsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaW1wb3J0ICogYXMgZGF5anMgZnJvbSBcImRheWpzXCI7XHJcbmltcG9ydCBNeVZhbGlkYXRvciBmcm9tIFwiLi4vLi4vdXRpbHMvbXlWYWxpZGF0b3JcIjtcclxuXHJcbmxldCB2YWxpZGF0b3JJbnN0YW5jZTpNeVZhbGlkYXRvcjtcclxuLy8gY29uc3QgYXBwID0gZ2V0QXBwPElBcHBPcHRpb24+KCk7XHJcblBhZ2Uoe1xyXG4gIGRhdGE6IHtcclxuICAgIGF1dG9zaXplOnsgbWF4SGVpZ2h0OiAxMjAsIG1pbkhlaWdodDogNTAgfSxcclxuICAgIHZhbGlkYXRvckluc3RhbmNlOnt9LFxyXG4gICAgZnJlZUlkOjAsXHJcbiAgICBmb3JtSWQ6NzEwODA0LCAvL+WKn+iDveWPt++8muenkuadgCA3MTA4MDIg77yMIOaKpeWQjemCgOe6piA3MTA4MDMg77yM5Zui6LStIDcxMDgwNFxyXG4gICAgZm9ybURhdGE6IHt9LFxyXG4gICAgZG9jY29kZTonJyxcclxuICAgIGZyb21QYWdlOicnLFxyXG4gICAgZGVsaXZlcnk6e30sXHJcbiAgICBmZWVSYXRlRm9yUGF5OjEsXHJcbiAgICBzZWxsZXJVbkNoZWNrZWROYW1lczonJyxcclxuICAgIGNvdmVySW1hZ2VVcmw6JycsXHJcbiAgICBpc1Nob3dEaWFsb2c6ZmFsc2VcclxuICB9LFxyXG4gIG9uTG9hZChvcHRpb25zKSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhhcHApO1xyXG4gICAgbGV0IGRvY2NvZGUgPW9wdGlvbnMuZG9jY29kZXx8Jyc7XHJcbiAgICBsZXQgZnJvbVBhZ2UgPW9wdGlvbnMuZnJvbVBhZ2V8fCcnO1xyXG4gICAgbGV0IHNldHRpbmdzID0gd3guZ2xvYmFsRGF0YS5zZXR0aW5ncztcclxuICAgIHRoaXMuc2V0RGF0YSh7XHJcbiAgICAgIGZpbGVVcGxvYWRVcmw6IGAvc2hvcHBpbmcvcGFuaWNCdXlpbmcuZG8/bT11cGxvYWRBdHRhY2htZW50JmZvcm1pZD0ke3RoaXMuZGF0YS5mb3JtSWR9YCxcclxuICAgICAgZG9jY29kZSxcclxuICAgICAgZnJvbVBhZ2UsXHJcbiAgICAgIGZlZVJhdGVGb3JQYXk6IChzZXR0aW5ncy5mZWVSYXRlRm9yV3hQYXkrc2V0dGluZ3MucGxhdGZvcm1PcGVyYXRvckNvbW1pc3Npb25SYXRpbykqMTAwXHJcbiAgICB9KVxyXG4gICAgaWYgKGRvY2NvZGUpIHtcclxuICAgICAgdGhpcy5nZXRTYXZlRGF0YSgpO1xyXG4gICAgfVxyXG4gIH0sXHJcbiAgYXN5bmMgZ2V0U2F2ZURhdGEoKSB7XHJcbiAgICBsZXQgZG9jY29kZSA9IHRoaXMuZGF0YS5kb2Njb2RlO1xyXG4gICAgbGV0IFtlcnJvciwgcmVzdWx0XSA9IGF3YWl0IHd4LiR1dGlscy50byhcclxuICAgICAgd3guJGh0dHAucmVxdWVzdCh7XHJcbiAgICAgICAgdXJsOmAvc2hvcHBpbmcvcGFuaWNCdXlpbmcuZG8/bT1nZXRQYW5pY0J1eWluZ0RldGFpbGAsXHJcbiAgICAgICAgZGF0YTp7XHJcbiAgICAgICAgICBkb2Njb2RlLFxyXG4gICAgICAgICAgaXNFZGl0OnRydWUsXHJcbiAgICAgICAgICBSZWZPcGVuSWQ6d3guZ2xvYmFsRGF0YS5PcGVuSWRcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApXHJcbiAgICBpZiAoZXJyb3Ipe1xyXG4gICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XHJcbiAgICBsZXQgZGF0YSA9IHJlc3VsdC5saXN0WzBdO1xyXG4gICAgbGV0IGZvcm1EYXRhID0ge1xyXG4gICAgICBwcm9tb3Rpb25zVGl0bGU6IGRhdGEudGl0bGUsXHJcbiAgICAgIG9yaWdpbmFsUHJpY2U6IGRhdGEub3JpZ2luYWxQcmljZSxcclxuICAgICAgZmxhc2hTYWxlUHJpY2U6IGRhdGEuc2FsZXNQcmljZSxcclxuICAgICAgZmxhc2hTYWxlVG90YWw6IGRhdGEubnVtYmVyT2ZUZWFtLFxyXG4gICAgICBwcm9tb3Rpb25EZXNjcmlwdGlvbjogZGF0YS5kZXNjcmlwdGlvbixcclxuICAgICAgc3RhcnRUaW1lOiBkYXRhLmVmZmVjdGl2ZVN0YXJ0RGF0ZSxcclxuICAgICAgZW5kVGltZTogZGF0YS5lZmZlY3RpdmVFbmREYXRlLFxyXG4gICAgICBjb3ZlckltYWdlTGlzdDogKGRhdGEuY292ZXJJbWFnZVVybCYmdGhpcy5nZXRDb3ZlckltYWdlTGlzdChkYXRhKSl8fFtdLFxyXG4gICAgICAvLyBpbWFnZXNMaXN0OiAoZGF0YS5pbWFnZXNVcmwubGVuZ3RoPjAmJnRoaXMuZ2V0SW1hZ2VzTGlzdChkYXRhKSl8fFtdLFxyXG4gICAgICBpbWFnZXNMaXN0OiBkYXRhLmltYWdlc1VybCxcclxuICAgICAgY292ZXJJbWFnZTogZGF0YS5jb3ZlckltYWdlLFxyXG4gICAgICBpbWFnZXM6IGRhdGEuaW1hZ2VzLFxyXG4gICAgICBmcmVlSWQ6ZGF0YS5mcmVlSWQsXHJcbiAgICB9O1xyXG4gICAgdGhpcy5zZXREYXRhKHtcclxuICAgICAgLi4uZm9ybURhdGEsXHJcbiAgICAgIGNvdmVySW1hZ2VVcmw6ZGF0YS5jb3ZlckltYWdlVXJsLFxyXG4gICAgICAvLyBbYGVmZmVjdGl2ZVN0YXJ0RGF0ZWBdOiBkYXRhLmVmZmVjdGl2ZVN0YXJ0RGF0ZSxcclxuICAgICAgLy8gW2BlZmZlY3RpdmVFbmREYXRlYF06IGRhdGEuZWZmZWN0aXZlRW5kRGF0ZSxcclxuICAgICAgLy8gW2BmcmVlSWRgXTogZGF0YS5mcmVlSWQsXHJcbiAgICAgIC8vIFtgdGl0bGVgXTogZGF0YS50aXRsZSxcclxuICAgICAgLy8gW2BvcmlnaW5hbFByaWNlYF06IGRhdGEub3JpZ2luYWxQcmljZSxcclxuICAgICAgLy8gW2BzYWxlc1ByaWNlYF06IGRhdGEuc2FsZXNQcmljZSxcclxuICAgICAgLy8gW2BxdWFudGl0eWBdOiBkYXRhLnF1YW50aXR5LFxyXG4gICAgICAvLyBbYHJlc3RyaWN0QnV5aW5nUXVhbnRpdHlgXTogZGF0YS5yZXN0cmljdEJ1eWluZ1F1YW50aXR5LFxyXG4gICAgICAvLyBbYGRlc2NyaXB0aW9uYF06IGRhdGEuZGVzY3JpcHRpb24sXHJcbiAgICAgIHNlbGxlckxpc3Q6cmVzdWx0LnNlbGxlckxpc3QsXHJcbiAgICAgIHN0YXR1czpkYXRhLnBhbmljQnV5aW5nU3RhdHVzLFxyXG4gICAgICBkZWxpdmVyeTp7XHJcbiAgICAgICAgZnJlZUlkOmRhdGEuZnJlZUlkLFxyXG4gICAgICAgIGZyZWVOYW1lOmRhdGEuZnJlZU5hbWUsXHJcbiAgICAgICAgaXNSZXF1aXJlZEFkZHJlc3M6ZGF0YS5pc1JlcXVpcmVkQWRkcmVzcyxcclxuICAgICAgICB0cmFuc0Nvc3RzOmRhdGEudHJhbnNDb3N0cyxcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBjb25zb2xlLmxvZygn6YWN6YCB5pWw5o2u44CC44CC44CCJyx0aGlzLmRhdGEuZGVsaXZlcnkpO1xyXG4gICAgd3guc2V0TmF2aWdhdGlvbkJhclRpdGxlKHtcclxuICAgICAgdGl0bGU6IGRhdGEudGl0bGVcclxuICAgIH0pXHJcbiAgfSxcclxuXHJcbiAgZ2V0Q292ZXJJbWFnZUxpc3QoZGF0YTphbnkpe1xyXG4gICAgbGV0IFt1bmlkLHNlcV0gPSBkYXRhLmNvdmVySW1hZ2Uuc3BsaXQoXCI7XCIpO1xyXG4gICAgcmV0dXJuIFt7XHJcbiAgICAgIHVybDogZGF0YS5jb3ZlckltYWdlVXJsfHwnJyxcclxuICAgICAgdW5pZCxcclxuICAgICAgc2VxXHJcbiAgICB9XVxyXG4gIH0sXHJcbiAgLy8gZ2V0SW1hZ2VzTGlzdChkYXRhOmFueSl7XHJcbiAgLy8gICBsZXQgW3VuaWQsc2VxXSA9IGRhdGEuaW1hZ2VzLnNwbGl0KFwiO1wiKTtcclxuICAvLyAgIHJldHVybiBkYXRhLmltYWdlc1VybC5tYXAoKGl0ZW06c3RyaW5nKT0+e1xyXG4gIC8vICAgICByZXR1cm4ge1xyXG4gIC8vICAgICAgIHVybDogaXRlbSxcclxuICAvLyAgICAgICB1bmlkLFxyXG4gIC8vICAgICAgIHNlcVxyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9KVxyXG4gIC8vIH0sXHJcblxyXG4gIG9uUmVhZHkoKSB7XHJcbiAgICB0aGlzLmluaXRWYWxpZGF0b3IoKVxyXG4gIH0sXHJcbiAgc2VsZWN0ZWRTdGFydFRpbWUoZXZlbnQ6YW55KSB7XHJcbiAgICBjb25zb2xlLmxvZygn5byA5aeLJyxldmVudCk7XHJcbiAgICB0aGlzLnNldERhdGEoe1xyXG4gICAgICBzdGFydFRpbWU6IGV2ZW50LmRldGFpbC5zdGFydFRpbWUsXHJcbiAgICB9KVxyXG4gIH0sXHJcbiAgc2VsZWN0ZWRFbmRUaW1lKGV2ZW50OmFueSl7XHJcbiAgICBjb25zb2xlLmxvZygn57uT5p2fJyxldmVudCk7XHJcbiAgICB0aGlzLnNldERhdGEoe1xyXG4gICAgICBlbmRUaW1lOiBldmVudC5kZXRhaWwuZW5kVGltZSxcclxuICAgIH0pXHJcbiAgfSxcclxuICBnZXREZWxpdmVyeU1ldGhvZChldmVudDphbnkpe1xyXG4gICAgY29uc29sZS5sb2coZXZlbnQuZGV0YWlsKTtcclxuICAgIHRoaXMuc2V0RGF0YSh7XHJcbiAgICAgIC8vIGRlbGl2ZXJ5TWV0aG9kOiBldmVudC5kZXRhaWwuZGVsaXZlcnlNZXRob2QsXHJcbiAgICAgIGZyZWVJZDogZXZlbnQuZGV0YWlsLmZyZWVJZCxcclxuICAgIH0pXHJcbiAgICBjb25zb2xlLmxvZygndGhpcy5kYXRhLmZyZWVJZDsnLHRoaXMuZGF0YS5mcmVlSWQpO1xyXG4gIH0sXHJcblxyXG4gIGNoZWNrUHJvbW90aW9uc1RpdGxlKGU6YW55KXtcclxuICAgIGxldCB7IHZhbHVlIH0gPSBlLmRldGFpbFxyXG4gICAgY29uc29sZS5sb2coZSk7XHJcbiAgICB2YWxpZGF0b3JJbnN0YW5jZS5jaGVja0ZpZWxkKCdwcm9tb3Rpb25zVGl0bGUnLHZhbHVlKTtcclxuICAgIHRoaXMuc2V0RGF0YSh7XHJcbiAgICAgIHByb21vdGlvbnNUaXRsZTp2YWx1ZS50cmltKClcclxuICAgIH0pXHJcbiAgfSxcclxuICBjaGVja09yaWdpbmFsUHJpY2UoZTphbnkpe1xyXG4gICAgbGV0IHsgdmFsdWUgfSA9IGUuZGV0YWlsXHJcbiAgICBjb25zb2xlLmxvZyhlKTtcclxuICAgIHZhbGlkYXRvckluc3RhbmNlLmNoZWNrRmllbGQoJ29yaWdpbmFsUHJpY2UnLHZhbHVlKTtcclxuICAgIHRoaXMuc2V0RGF0YSh7XHJcbiAgICAgIG9yaWdpbmFsUHJpY2U6dmFsdWUudHJpbSgpXHJcbiAgICB9KVxyXG4gIH0sXHJcbiAgY2hlY2tGbGFzaFNhbGVQcmljZShlOmFueSl7XHJcbiAgICBsZXQgeyB2YWx1ZSB9ID0gZS5kZXRhaWxcclxuICAgIGNvbnNvbGUubG9nKGUpO1xyXG4gICAgdmFsaWRhdG9ySW5zdGFuY2UuY2hlY2tGaWVsZCgnZmxhc2hTYWxlUHJpY2UnLHZhbHVlKTtcclxuICAgIHRoaXMuc2V0RGF0YSh7XHJcbiAgICAgIGZsYXNoU2FsZVByaWNlOnZhbHVlLnRyaW0oKVxyXG4gICAgfSlcclxuICB9LFxyXG4gIGNoZWNrRmxhc2hTYWxlVG90YWwoZTphbnkpe1xyXG4gICAgbGV0IHsgdmFsdWUgfSA9IGUuZGV0YWlsXHJcbiAgICBjb25zb2xlLmxvZyhlKTtcclxuICAgIHZhbGlkYXRvckluc3RhbmNlLmNoZWNrRmllbGQoJ2ZsYXNoU2FsZVRvdGFsJyx2YWx1ZSk7XHJcbiAgICB0aGlzLnNldERhdGEoe1xyXG4gICAgICBmbGFzaFNhbGVUb3RhbDp2YWx1ZS50cmltKClcclxuICAgIH0pXHJcbiAgfSxcclxuICBjaGVja1Byb21vdGlvbkRlc2NyaXB0aW9uKGU6YW55KXtcclxuICAgIGxldCB7IHZhbHVlIH0gPSBlLmRldGFpbFxyXG4gICAgY29uc29sZS5sb2coZSk7XHJcbiAgICB2YWxpZGF0b3JJbnN0YW5jZS5jaGVja0ZpZWxkKCdwcm9tb3Rpb25EZXNjcmlwdGlvbicsdmFsdWUpO1xyXG4gICAgdGhpcy5zZXREYXRhKHtcclxuICAgICAgcHJvbW90aW9uRGVzY3JpcHRpb246dmFsdWUudHJpbSgpXHJcbiAgICB9KVxyXG4gIH0sXHJcblxyXG4gIGFzeW5jIHBvc3RGb3JtRGF0YShkYXRhOm9iamVjdCl7XHJcbiAgICBsZXQgW2Vycm9yLCByZXNdID0gYXdhaXQgd3guJHV0aWxzLnRvKFxyXG4gICAgICB3eC4kaHR0cC5yZXF1ZXN0KHtcclxuICAgICAgICB1cmw6Jy9zaG9wcGluZy9wYW5pY0J1eWluZy5kbz9tPXNhdmVEb2NDb2RlJyxcclxuICAgICAgICBkYXRhLFxyXG4gICAgICAgIG1ldGhvZDonUE9TVCdcclxuICAgICAgfSlcclxuICAgIClcclxuICAgIGlmIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbnNvbGUubG9nKHJlcyk7XHJcbiAgICBpZiAocmVzLnN0YXRlID09PSAnc3VjY2VzcycpIHtcclxuICAgICAgd3guc2hvd1RvYXN0KHtcclxuICAgICAgICB0aXRsZTogJ+aIkOWKnycsXHJcbiAgICAgICAgZHVyYXRpb246IDIwMDBcclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIGlmIChyZXMuc3RhdGUgPT09ICdmYWlsZWQnJiZyZXMuc2VsbGVyQ2hlY2tlZEJhbGFuY2U+MCkge1xyXG4gICAgICB0aGlzLnNldERhdGEoe1xyXG4gICAgICAgIHNlbGxlclVuQ2hlY2tlZE5hbWVzOiByZXMuc2VsbGVyVW5DaGVja2VkTmFtZXMsXHJcbiAgICAgICAgaXNTaG93RGlhbG9nOiB0cnVlXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzLnN0YXRlID09PSAnc3VjY2Vzcyc7XHJcbiAgfSxcclxuICBhc3luYyBvblN1Ym1pdCgpIHtcclxuICAgIGxldCB0aW1lUXVhbnR1bSA9IHRoaXMuc2VsZWN0Q29tcG9uZW50KCcjdGltZS1xdWFudHVtJyk7XHJcbiAgICBsZXQgc2VsbGVyRWRpdCA9IHRoaXMuc2VsZWN0Q29tcG9uZW50KCcjc2VsbGVyLWVkaXQnKTtcclxuICAgIGxldCBmaWxlVXBsb2FkZXIgPSB0aGlzLnNlbGVjdENvbXBvbmVudCgnI2ZpbGUtdXBsb2FkZXInKTtcclxuICAgIGxldCBmaWxlVXBsb2FkZXJNdWx0aXBsZSA9IHRoaXMuc2VsZWN0Q29tcG9uZW50KCcjZmlsZS11cGxvYWRlci1tdWx0aXBsZScpO1xyXG5cclxuICAgIGxldCBkZWxpdmVyeU1ldGhvZCA9IHRoaXMuc2VsZWN0Q29tcG9uZW50KCcjZGVsaXZlcnktbWV0aG9kJyk7XHJcbiAgICBsZXQgY2hlY2tUcmFuc0Nvc3RzID0gdHJ1ZTtcclxuICAgIGxldCB0cmFuc0Nvc3RzID0gMDtcclxuICAgIGlmIChkZWxpdmVyeU1ldGhvZC5kYXRhLmlzUmVxdWlyZWRBZGRyZXNzKXtcclxuICAgICAgY2hlY2tUcmFuc0Nvc3RzID0gZGVsaXZlcnlNZXRob2QuY2hlY2tGaWVsZHMoKTtcclxuICAgICAgdHJhbnNDb3N0cyA9IE51bWJlcihkZWxpdmVyeU1ldGhvZC5kYXRhLnRyYW5zQ29zdHMpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBjb25zb2xlLmxvZygnc2VsbGVyRWRpdCcsKTtcclxuICAgIGNvbnNvbGUubG9nKHRpbWVRdWFudHVtKTtcclxuXHJcbiAgICBsZXQgY2hlY2tTdGFydFRpbWUgPSB0aW1lUXVhbnR1bS5jaGVja1RpbWUoXCJzdGFydFRpbWVcIiwgXCLor7fpgInmi6norqHliJLlvIDlp4vml7bpl7RcIik7XHJcbiAgICBsZXQgY2hlY2tFbmRUaW1lID0gdGltZVF1YW50dW0uY2hlY2tUaW1lKFwiZW5kVGltZVwiLCBcIuivt+mAieaLqeiuoeWIkue7k+adn+aXtumXtFwiKTtcclxuICAgIGxldCBjaGVja0NvdmVySW1hZ2UgPSBmaWxlVXBsb2FkZXIuY2hlY2tJbWFnZXMoXCJjb3ZlckltYWdlXCIsIFwi6K+35LiK5Lyg5LiA5byg5bCB6Z2i5Zu+XCIpO1xyXG4gICAgLy8gbGV0IGNoZWNrSW1hZ2VzID0gZmlsZVVwbG9hZGVyTXVsdGlwbGUuY2hlY2tJbWFnZXMoXCJpbWFnZXNcIiwgXCLor7foh7PlsJHkuIrkvKDkuIDlvKDlm77niYdcIik7XHJcbiAgICBsZXQgY2hlY2tBbGxEYXRhID0gdmFsaWRhdG9ySW5zdGFuY2UuY2hlY2tBbGxEYXRhKCk7XHJcbiAgICAvLyBpZiAodGhpcy5kYXRhLmdvb2RzSW1nTGlzdC5sZW5ndGggPCAxKSB7XHJcbiAgICAvLyAgIGNvbnNvbGUubG9nKCfor7fkuIrkvKDkuqflk4Hlm77niYcnKTtcclxuICAgIC8vIH1cclxuICAgIGxldCBzZWxsZXJMaXN0ID0gc2VsbGVyRWRpdC5nZXRTZWxsZXJMaXN0KCk7XHJcbiAgICBpZiAoc2VsbGVyTGlzdC5sZW5ndGg8MSkge1xyXG4gICAgICB3eC5zaG93VG9hc3Qoe1xyXG4gICAgICAgIHRpdGxlOiAn6K+36YCJ5oup6JCl6ZSA5Lq65ZGYJyxcclxuICAgICAgICBpY29uOiAnbm9uZScsXHJcbiAgICAgICAgZHVyYXRpb246IDIwMDBcclxuICAgICAgfSlcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBsZXQgY2hlY2tEZWZhdWx0U2VsbGVyID0gc2VsbGVyRWRpdC5jaGVja0RlZmF1bHRTZWxsZXIoKTtcclxuICAgIGlmICghY2hlY2tEZWZhdWx0U2VsbGVyKSB7XHJcbiAgICAgIHd4LnNob3dUb2FzdCh7XHJcbiAgICAgICAgdGl0bGU6ICfor7fpgInmi6npu5jorqTokKXplIDkurrlkZgnLFxyXG4gICAgICAgIGljb246ICdub25lJyxcclxuICAgICAgICBkdXJhdGlvbjogMjAwMFxyXG4gICAgICB9KVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGNvbnNvbGUubG9nKCdjaGVja0RlZmF1bHRTZWxsZXInLGNoZWNrRGVmYXVsdFNlbGxlcik7XHJcblxyXG4gICAgbGV0IGNoZWNrQXJyID0gW2NoZWNrVHJhbnNDb3N0cyxjaGVja1N0YXJ0VGltZSxjaGVja0VuZFRpbWUsY2hlY2tDb3ZlckltYWdlLGNoZWNrQWxsRGF0YV07XHJcbiAgICBsZXQgZGF0YSA9IHt9O1xyXG4gICAgaWYgKGNoZWNrQXJyLmV2ZXJ5KChpdGVtKT0+e1xyXG4gICAgICByZXR1cm4gaXRlbVxyXG4gICAgfSkpe1xyXG4gICAgICBjb25zb2xlLmxvZygnLi4uLuaPkOS6pOaIkOWKnycpO1xyXG4gICAgICBsZXQgY292ZXJJbWFnZSA9IGZpbGVVcGxvYWRlci5nZXRDb3ZlckltYWdlVW5pZCgpO1xyXG4gICAgICBsZXQgY292ZXJJbWFnZVVybCA9IGZpbGVVcGxvYWRlci5nZXRJbWdMaXN0KClbMF0udXJsfHwnJztcclxuICAgICAgdGhpcy5zZXREYXRhKHtcclxuICAgICAgICBjb3ZlckltYWdlVXJsXHJcbiAgICAgIH0pXHJcbiAgICAgIGxldCBpbWFnZXMgPSBmaWxlVXBsb2FkZXJNdWx0aXBsZS5nZXRJbWFnZXNVbmlkKCk7XHJcbiAgICAgIGNvbnNvbGUubG9nKGNvdmVySW1hZ2UsaW1hZ2VzKTtcclxuICAgICAgbGV0IGZvcm1EYXRhOiBhbnkgPSB0aGlzLmRhdGE7XHJcbiAgICAgIGRhdGEgPSB7XHJcbiAgICAgICAgZG9jQ29kZTogZm9ybURhdGEuZG9jY29kZSwgLy/mtLvliqjljZXlj7fvvIzmlrDlu7rmtLvliqjml7bkuLrnqbrlgLzvvIznvJbovpHml7bpnIDopoFkb2Njb2Rl5YC8XHJcbiAgICAgICAgZm9ybUlkOiBmb3JtRGF0YS5mb3JtSWQsIC8v5Yqf6IO95Y+377ya56eS5p2AIDcxMDgwMiDvvIwg5oql5ZCN6YKA57qmIDcxMDgwMyDvvIzlm6LotK0gNzEwODA0XHJcbiAgICAgICAgZG9jU3RhdHVzOjEwMCwgLy/ljZXmja7nirbmgIE6IDAg5L+d5a2Y77yI6LW36I2J77yJIO+8jDEwMCDlj5HluINcclxuICAgICAgICBjb3ZlckltYWdlLFxyXG4gICAgICAgIGltYWdlcyxcclxuICAgICAgICB0cmFuc0Nvc3RzLCAvL+mAgei0p+S4iumXqOaXtiDphY3pgIHotLlcclxuICAgICAgICAvLyAuLi50aGlzLmRhdGEuZm9ybURhdGEsXHJcblxyXG4gICAgICAgIGVmZmVjdGl2ZVN0YXJ0RGF0ZTogZm9ybURhdGEuc3RhcnRUaW1lLFxyXG4gICAgICAgIGVmZmVjdGl2ZUVuZERhdGU6IGZvcm1EYXRhLmVuZFRpbWUsXHJcbiAgICAgICAgZnJlZUlkOiBmb3JtRGF0YS5mcmVlSWQsXHJcbiAgICAgICAgdGl0bGU6IGZvcm1EYXRhLnByb21vdGlvbnNUaXRsZSxcclxuICAgICAgICBvcmlnaW5hbFByaWNlOiBOdW1iZXIoZm9ybURhdGEub3JpZ2luYWxQcmljZSksXHJcbiAgICAgICAgc2FsZXNQcmljZTogTnVtYmVyKGZvcm1EYXRhLmZsYXNoU2FsZVByaWNlKSxcclxuICAgICAgICBudW1iZXJPZlRlYW06IE51bWJlcihmb3JtRGF0YS5mbGFzaFNhbGVUb3RhbCksXHJcbiAgICAgICAgZGVzY3JpcHRpb246IGZvcm1EYXRhLnByb21vdGlvbkRlc2NyaXB0aW9uLFxyXG5cclxuICAgICAgICBzZWxsZXJMaXN0LFxyXG4gICAgICB9XHJcbiAgICAgIGNvbnNvbGUubG9nKCflvoXlj5HluIPmlbDmja4nLGRhdGEpO1xyXG4gICAgICBpZiAoIWF3YWl0IHRoaXMucG9zdEZvcm1EYXRhKGRhdGEpKSByZXR1cm47XHJcbiAgICAgIGlmICh0aGlzLmRhdGEuZnJvbVBhZ2U9PSdlZGl0Jyl7XHJcbiAgICAgICAgd3gubmF2aWdhdGVCYWNrKCk7XHJcbiAgICAgIH0gZWxzZXtcclxuICAgICAgICB3eC5yZWRpcmVjdFRvKHtcclxuICAgICAgICAgIHVybDonLi4vcHJvbW90aW9uc01hbmFnZUxpc3QvcHJvbW90aW9uc01hbmFnZUxpc3Q/dGFiPTMnXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHd4LnNob3dUb2FzdCh7XHJcbiAgICAgICAgdGl0bGU6ICfpobXpnaLov5jmnInplJnor6/mnKrlpITnkIYnLFxyXG4gICAgICAgIGljb246ICdub25lJyxcclxuICAgICAgICBkdXJhdGlvbjogMjAwMFxyXG4gICAgICB9KVxyXG4gICAgICBjb25zb2xlLmxvZygn6L+Y5pyJ6ZSZ6K+v5pyq5aSE55CGJyk7XHJcbiAgICB9XHJcblxyXG5cclxuICB9LFxyXG5cclxuICBvblNhdmUoKXtcclxuICAgIGxldCBzZWxsZXJFZGl0ID0gdGhpcy5zZWxlY3RDb21wb25lbnQoJyNzZWxsZXItZWRpdCcpO1xyXG4gICAgbGV0IHNlbGxlckxpc3QgPSBzZWxsZXJFZGl0LmdldFNlbGxlckxpc3QoKTtcclxuICAgIGxldCBmaWxlVXBsb2FkZXIgPSB0aGlzLnNlbGVjdENvbXBvbmVudCgnI2ZpbGUtdXBsb2FkZXInKTtcclxuICAgIGxldCBmaWxlVXBsb2FkZXJNdWx0aXBsZSA9IHRoaXMuc2VsZWN0Q29tcG9uZW50KCcjZmlsZS11cGxvYWRlci1tdWx0aXBsZScpO1xyXG4gICAgY29uc29sZS5sb2coJy4uLi7mj5DkuqTmiJDlip8nKTtcclxuICAgIGxldCBjb3ZlckltYWdlID0gZmlsZVVwbG9hZGVyLmdldENvdmVySW1hZ2VVbmlkKCk7XHJcbiAgICBsZXQgaW1hZ2VzID0gZmlsZVVwbG9hZGVyTXVsdGlwbGUuZ2V0SW1hZ2VzVW5pZCgpO1xyXG4gICAgbGV0IGRlbGl2ZXJ5TWV0aG9kID0gdGhpcy5zZWxlY3RDb21wb25lbnQoJyNkZWxpdmVyeS1tZXRob2QnKTtcclxuICAgIGxldCB0cmFuc0Nvc3RzID0gMDtcclxuICAgIGlmIChkZWxpdmVyeU1ldGhvZC5kYXRhLmlzUmVxdWlyZWRBZGRyZXNzKXtcclxuICAgICAgdHJhbnNDb3N0cyA9IE51bWJlcihkZWxpdmVyeU1ldGhvZC5kYXRhLnRyYW5zQ29zdHMpO1xyXG4gICAgfVxyXG4gICAgY29uc29sZS5sb2coY292ZXJJbWFnZSxpbWFnZXMpO1xyXG4gICAgbGV0IGZvcm1EYXRhOiBhbnkgPSB0aGlzLmRhdGE7XHJcbiAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgZG9jQ29kZTogZm9ybURhdGEuZG9jY29kZSwgLy/mtLvliqjljZXlj7fvvIzmlrDlu7rmtLvliqjml7bkuLrnqbrlgLzvvIznvJbovpHml7bpnIDopoFkb2Njb2Rl5YC8XHJcbiAgICAgIGZvcm1JZDogZm9ybURhdGEuZm9ybUlkLCAvL+WKn+iDveWPt++8muenkuadgCA3MTA4MDIg77yMIOaKpeWQjemCgOe6piA3MTA4MDMg77yM5Zui6LStIDcxMDgwNFxyXG4gICAgICBkb2NTdGF0dXM6IDAsIC8v5Y2V5o2u54q25oCBOiAwIOS/neWtmO+8iOi1t+iNie+8iSDvvIwxMDAg5Y+R5biDXHJcbiAgICAgIGNvdmVySW1hZ2UsXHJcbiAgICAgIGltYWdlcyxcclxuICAgICAgdHJhbnNDb3N0cywgLy/pgIHotKfkuIrpl6jml7Yg6YWN6YCB6LS5XHJcbiAgICAgIC8vIC4uLnRoaXMuZGF0YS5mb3JtRGF0YSxcclxuXHJcbiAgICAgIGVmZmVjdGl2ZVN0YXJ0RGF0ZTogZm9ybURhdGEuc3RhcnRUaW1lLFxyXG4gICAgICBlZmZlY3RpdmVFbmREYXRlOiBmb3JtRGF0YS5lbmRUaW1lLFxyXG4gICAgICBmcmVlSWQ6IGZvcm1EYXRhLmZyZWVJZCxcclxuICAgICAgdGl0bGU6IGZvcm1EYXRhLnByb21vdGlvbnNUaXRsZSxcclxuICAgICAgb3JpZ2luYWxQcmljZTogTnVtYmVyKGZvcm1EYXRhLm9yaWdpbmFsUHJpY2UpfHwwLFxyXG4gICAgICBzYWxlc1ByaWNlOiBOdW1iZXIoZm9ybURhdGEuZmxhc2hTYWxlUHJpY2UpfHwwLFxyXG4gICAgICBudW1iZXJPZlRlYW06IE51bWJlcihmb3JtRGF0YS5mbGFzaFNhbGVUb3RhbCl8fDAsXHJcbiAgICAgIGRlc2NyaXB0aW9uOiBmb3JtRGF0YS5wcm9tb3Rpb25EZXNjcmlwdGlvbixcclxuXHJcbiAgICAgIHNlbGxlckxpc3QsXHJcbiAgICB9XHJcbiAgICAvLyBsZXQgZGF0YSA9IHtcclxuICAgIC8vICAgZG9jQ29kZTp0aGlzLmRhdGEuZG9jY29kZSwgLy/mtLvliqjljZXlj7fvvIzmlrDlu7rmtLvliqjml7bkuLrnqbrlgLzvvIznvJbovpHml7bpnIDopoFkb2Njb2Rl5YC8XHJcbiAgICAvLyAgIGZvcm1JZDp0aGlzLmRhdGEuZm9ybUlkLCAvL+WKn+iDveWPt++8muenkuadgCA3MTA4MDIg77yMIOaKpeWQjemCgOe6piA3MTA4MDMg77yM5Zui6LStIDcxMDgwNFxyXG4gICAgLy8gICBkb2NTdGF0dXM6MCwgLy/ljZXmja7nirbmgIE6IDAg5L+d5a2Y77yI6LW36I2J77yJIO+8jDEwMCDlj5HluINcclxuICAgIC8vICAgY292ZXJJbWFnZSxcclxuICAgIC8vICAgaW1hZ2VzLFxyXG4gICAgLy8gICB0cmFuc0Nvc3RzLCAvL+mAgei0p+S4iumXqOaXtiDphY3pgIHotLlcclxuICAgIC8vICAgLi4udGhpcy5kYXRhLmZvcm1EYXRhLFxyXG4gICAgLy8gICBzZWxsZXJMaXN0LFxyXG4gICAgLy8gfVxyXG4gICAgY29uc29sZS5sb2coJ+W+heS/neWtmOaVsOaNricsZGF0YSk7XHJcbiAgICB0aGlzLnBvc3RGb3JtRGF0YShkYXRhKTtcclxuICB9LFxyXG4gIC8vIG9uSW5wdXRTdGFydERhdGUoKSB7fSxcclxuICAvLyBvbklucHV0RW5kRGF0ZSgpIHt9LFxyXG4gIGluaXRWYWxpZGF0b3IoKXtcclxuICAgIC8vIOWunuS+i+WMllxyXG4gICAgdmFsaWRhdG9ySW5zdGFuY2UgPSBuZXcgTXlWYWxpZGF0b3Ioe1xyXG4gICAgICBydWxlczoge1xyXG4gICAgICAgIHByb21vdGlvbnNUaXRsZToge1xyXG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXHJcbiAgICAgICAgICByYW5nZWxlbmd0aDogWzMsMTRdXHJcbiAgICAgICAgfSxcclxuICAgICAgICBvcmlnaW5hbFByaWNlOiB7XHJcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcclxuICAgICAgICAgIG51bWJlcjogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZmxhc2hTYWxlUHJpY2U6IHtcclxuICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxyXG4gICAgICAgICAgbnVtYmVyOiB0cnVlXHJcbiAgICAgICAgfSxcclxuICAgICAgICBmbGFzaFNhbGVUb3RhbDoge1xyXG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXHJcbiAgICAgICAgICBudW1iZXI6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIHByb21vdGlvbkRlc2NyaXB0aW9uOiB7XHJcbiAgICAgICAgLy8gICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgICAgIC8vIH0sXHJcbiAgICAgIH0sXHJcbiAgICAgIG1lc3NhZ2VzOiB7XHJcbiAgICAgICAgcHJvbW90aW9uc1RpdGxlOiB7XHJcbiAgICAgICAgICByZXF1aXJlZDogJ+ivt+i+k+WFpea0u+WKqOagh+mimCcsXHJcbiAgICAgICAgICByYW5nZWxlbmd0aDogJ+aWh+Wtl+mVv+W6puivt+aOp+WItuWcqDPliLAxNOS5i+mXtCdcclxuICAgICAgICB9LFxyXG4gICAgICAgIG9yaWdpbmFsUHJpY2U6IHtcclxuICAgICAgICAgIHJlcXVpcmVkOiAn6K+36L6T5YWl5Lqn5ZOB5qCH5Lu3JyxcclxuICAgICAgICAgIG51bWJlcjogJ+S7t+agvOW/hemhu+S4uuaVsOWtlydcclxuICAgICAgICB9LFxyXG4gICAgICAgIGZsYXNoU2FsZVByaWNlOiB7XHJcbiAgICAgICAgICByZXF1aXJlZDogJ+ivt+i+k+WFpeaLvOWbouS7tycsXHJcbiAgICAgICAgICBudW1iZXI6ICfku7fmoLzlv4XpobvkuLrmlbDlrZcnXHJcbiAgICAgICAgfSxcclxuICAgICAgICBmbGFzaFNhbGVUb3RhbDoge1xyXG4gICAgICAgICAgcmVxdWlyZWQ6ICfor7fovpPlhaXmiJDlm6LkurrmlbAnLFxyXG4gICAgICAgICAgbnVtYmVyOiAn5Lq65pWw5b+F6aG75Li65pWw5a2XJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8gcHJvbW90aW9uRGVzY3JpcHRpb246IHtcclxuICAgICAgICAvLyAgIHJlcXVpcmVkOiAn6K+36L6T5YWl5rS75Yqo5o+P6L+wJ1xyXG4gICAgICAgIC8vIH0sXHJcbiAgICAgIH0sXHJcbiAgICAgIG11bHRpQ2hlY2s6dHJ1ZVxyXG4gICAgfSx0aGlzKVxyXG4gICAgLy8gdGhpcy5zZXREYXRhKHtcclxuICAgIC8vICAgdmFsaWRhdG9ySW5zdGFuY2VcclxuICAgIC8vIH0pXHJcbiAgICBjb25zb2xlLmxvZygnaGhoaCwnLHZhbGlkYXRvckluc3RhbmNlKTtcclxuICB9LFxyXG4gIG9uU2hhcmVBcHBNZXNzYWdlKCkge1xyXG4gICAgbGV0IGRvY2NvZGU6c3RyaW5nID0gdGhpcy5kYXRhLmRvY2NvZGUgfHwgJyc7XHJcbiAgICAvLyBsZXQgdGl0bGU6c3RyaW5nID0gdGhpcy5kYXRhLnByb21vdGlvbnNEYXRhLnRpdGxlIHx8ICcnO1xyXG4gICAgbGV0IGltYWdlVXJsOnN0cmluZyA9IHRoaXMuZGF0YS5jb3ZlckltYWdlVXJsIHx8ICcnO1xyXG4gICAgbGV0IHNlbGxlclVuQ2hlY2tlZE5hbWVzOnN0cmluZyA9IHRoaXMuZGF0YS5zZWxsZXJVbkNoZWNrZWROYW1lcyB8fCAnJztcclxuICAgIHJldHVybiB7XHJcbiAgICAgIC8vIHRpdGxlOiB1dGlscy5nZXRTaGFyZVRpdGxlKCksXHJcbiAgICAgIHRpdGxlOiBg6K+36JCl6ZSA5Lq65ZGYWyR7c2VsbGVyVW5DaGVja2VkTmFtZXN9XemqjOivgei6q+S7vWAsXHJcbiAgICAgIGltYWdlVXJsLFxyXG4gICAgICBwYXRoOiBgcGFnZXMvc2VsbGVyVmVyaWZ5L3NlbGxlclZlcmlmeT9kb2Njb2RlPSR7ZG9jY29kZX1gLFxyXG4gICAgfVxyXG4gIH1cclxufSlcclxuZXhwb3J0IHt9XHJcbiJdfQ==