榆山数据端小程序
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

471 lines
58 KiB

"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
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) : adopt(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 };
}
};
var __spreadArrays = (this && this.__spreadArrays) || function () {
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
for (var r = Array(s), k = 0, i = 0; i < il; i++)
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
r[k] = a[j];
return r;
};
Object.defineProperty(exports, "__esModule", { value: true });
var index_1 = require("../../../../wux/index");
var config = require('../../../../utils/config');
var app = getApp();
var clerkOnline_1 = require("../../../../api/clerkOnline");
Page({
data: {
height: app.globalData.navHeight,
issueContent: '',
titleContent: '',
uploadImageList: [],
imageId: 1,
navigationBarText: '',
uploadType: '1',
isUploading: false,
isPublish: false,
placeholder: '请输入内容2000字以内',
placeholderTitle: '请输入标题40字以内',
imageListlenght: 3,
},
onLoad: function (options) {
if (options.type == 'topic') {
this.setData({
navigationBarText: '我有话说',
imageListlenght: 3,
});
}
else if (options.type == 'inform') {
this.setData({
navigationBarText: '发布通知',
imageListlenght: 20,
});
}
},
bindTextareaInput: function (e) {
this.setData({
issueContent: e.detail.value
});
},
bindcontentblur: function (e) {
this.setData({
issueContent: e.detail.value
});
},
bindTitleInput: function (e) {
this.setData({
titleContent: e.detail.value
});
},
bindTitleblur: function (e) {
this.setData({
titleContent: e.detail.value
});
},
chooseImage: function () {
var _this = this;
console.log('::::::::' + this.data.isUploading);
var number_a = 0;
if (this.data.isUploading < 20) {
number_a = this.data.imageListlenght - _this.data.uploadImageList.length;
}
if (this.data.isUploading) {
wx.showToast({
title: '图片正在上传',
icon: 'none'
});
console.log('禁止点击~~~');
return false;
}
index_1.$wuxActionSheet().showSheet({
buttons: [
{ text: '拍照' },
{ text: '从相册中获取' },
],
className: 'dialog-class',
buttonClicked: function (index) {
console.log('index', index);
_this.setData({
isUploading: true
});
if (index === 0) {
console.log('选择图片');
wx.chooseImage({
count: 1,
sizeType: ['original', 'compressed'],
sourceType: ['camera'],
success: function (res) {
var uploadImageList = __spreadArrays(_this.data.uploadImageList);
if (res.tempFiles[0].size <= 5 * 1024 * 1024) {
uploadImageList.push({
uploaded: false,
ossUrl: '',
imgUrl: res.tempFiles[0].path,
imageId: ++_this.data.imageId
});
}
else {
wx.showToast({
title: '图片上限5M,请压缩后重试~',
icon: 'none',
duration: 1500
});
return false;
}
_this.setData({
uploadImageList: uploadImageList,
});
wx.uploadFile({
url: config.config.apiUrl + "oss/file/upload",
filePath: res.tempFilePaths[0],
name: 'file',
formData: {
uploadType: _this.data.uploadType
},
header: {
'Content-type': 'application/json;',
'Authorization': wx.getStorageSync('token')
},
success: function (fileRes) {
uploadImageList[uploadImageList.length - 1].uploaded = true;
uploadImageList[uploadImageList.length - 1].ossUrl = JSON.parse(fileRes.data).data.url;
wx.hideToast();
_this.setData({
uploadImageList: uploadImageList,
isUploading: false
});
},
fail: function () {
wx.hideToast();
_this.setData({
uploadImageList: [],
isUploading: false
});
wx.showToast({
title: '图片上传失败,请重试~',
icon: 'none',
duration: 1500
});
}
});
},
fail: function (res) {
wx.hideToast();
console.log('取消的函数', res);
_this.setData({
isUploading: false,
});
}
});
}
else if (index === 1) {
console.log("本地选择");
console.log('number_a::::' + number_a);
wx.chooseImage({
count: number_a,
sizeType: ['original', 'compressed'],
sourceType: ['album'],
success: function (res) {
var imgIndex = 0;
console.log('lll', res.tempFiles);
var uploadImageList = [];
var endIndex = _this.data.uploadImageList.length;
console.log('2222' + endIndex);
res.tempFiles.forEach(function (item) {
if (item.size <= 5 * 1024 * 1024) {
uploadImageList.push({
uploaded: false,
ossUrl: '',
imgUrl: item.path,
imageId: ++_this.data.imageId
});
}
else {
wx.showToast({
title: '图片上限5M,请压缩后重试~',
icon: 'none',
duration: 1500
});
}
});
_this.setData({
uploadImageList: __spreadArrays(_this.data.uploadImageList, uploadImageList)
});
var endIndex2 = res.tempFiles.length;
console.log('endIndex2', _this.data.uploadImageList.length);
uploadImageList.forEach(function (item, index) {
return (function (index) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4, wx.uploadFile({
url: config.config.apiUrl + "oss/file/upload",
filePath: res.tempFilePaths[index],
name: 'file',
formData: {
uploadType: _this.data.uploadType
},
header: {
'Content-type': 'application/json',
'Authorization': wx.getStorageSync('token')
},
success: function (fileRes) {
imgIndex = imgIndex + 1;
uploadImageList[index].uploaded = true;
uploadImageList[index].ossUrl = JSON.parse(fileRes.data).data.url;
_this.data.uploadImageList = _this.data.uploadImageList.slice(0, endIndex);
_this.setData({
uploadImageList: __spreadArrays(_this.data.uploadImageList, uploadImageList)
});
console.log('index', index);
wx.hideToast();
if (imgIndex == uploadImageList.length) {
_this.setData({
isUploading: false,
});
}
},
fail: function () {
wx.hideToast();
_this.setData({
uploadImageList: [],
isUploading: false
});
wx.showToast({
title: '图片上传失败,请重试~',
icon: 'none',
duration: 1500
});
}
})];
case 1:
_a.sent();
return [2];
}
});
});
})(index);
});
},
fail: function (res) {
console.log('取消的函数', res);
wx.hideToast();
_this.setData({
isUploading: false,
});
}
});
}
return true;
},
cancelText: '取消',
cancel: function () {
wx.hideToast();
_this.setData({
isUploading: false
});
},
destructiveButtonClicked: function () { },
});
},
deleteImage: function (e) {
var index = this.data.uploadImageList.findIndex(function (item) { return item.imageId === e.currentTarget.dataset.imageid; });
if (index > -1) {
this.data.uploadImageList.splice(index, 1);
this.setData({
uploadImageList: this.data.uploadImageList
});
}
},
gettopicSubmit: function () {
return __awaiter(this, void 0, void 0, function () {
var images, i, imageUrl, obj, res, _a;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
images = [];
for (i = 0; i < this.data.uploadImageList.length; i++) {
imageUrl = this.data.uploadImageList[i].ossUrl;
images.push(imageUrl);
}
console.log(':::::::::' + JSON.stringify(images));
obj = {
topicContent: this.data.issueContent,
images: images
};
_b.label = 1;
case 1:
_b.trys.push([1, 3, , 4]);
return [4, clerkOnline_1.topicSubmit(obj)];
case 2:
res = _b.sent();
console.log('res', res);
wx.setStorageSync("isBackOpen", false);
wx.hideLoading();
wx.navigateBack({
delta: 1
});
return [3, 4];
case 3:
_a = _b.sent();
return [3, 4];
case 4: return [2];
}
});
});
},
getnoticeSubmit: function () {
return __awaiter(this, void 0, void 0, function () {
var images, i, imageUrl, obj, res, _a;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
console.log("~~~~~" + JSON.stringify(this.data.uploadImageList));
images = [];
for (i = 0; i < this.data.uploadImageList.length; i++) {
imageUrl = this.data.uploadImageList[i].ossUrl;
images.push(imageUrl);
}
console.log(':::::::::' + JSON.stringify(images));
obj = {
noticeTitle: this.data.titleContent,
noticeContent: this.data.issueContent,
images: images
};
_b.label = 1;
case 1:
_b.trys.push([1, 3, , 4]);
return [4, clerkOnline_1.noticeSubmit(obj)];
case 2:
res = _b.sent();
console.log('res', res);
wx.setStorageSync("isBackOpen", false);
wx.hideLoading();
wx.navigateBack({
delta: 1
});
return [3, 4];
case 3:
_a = _b.sent();
return [3, 4];
case 4: return [2];
}
});
});
},
goPublish: function () {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
if (this.data.isUploading) {
wx.showModal({
title: '',
content: '图片正在发布中,请稍等',
showCancel: false,
confirmText: '确定',
confirmColor: '#3CC51F',
success: function (res) {
if (res.confirm) {
console.log('用户点击确定');
}
else if (res.cancel) {
console.log('用户点击取消');
}
}
});
return [2];
}
wx.showLoading({
title: '发布中',
mask: true
});
if (this.data.isPublish) {
return [2];
}
if (!(this.data.navigationBarText == '我有话说')) return [3, 2];
if (!this.data.issueContent) {
wx.showToast({
title: '请输入发布内容',
icon: 'none'
});
return [2];
}
this.setData({
isPublish: true,
});
return [4, this.gettopicSubmit()];
case 1:
_a.sent();
return [3, 4];
case 2:
if (!(this.data.navigationBarText == '发布通知')) return [3, 4];
if (!this.data.titleContent && !this.data.issueContent) {
wx.showToast({
title: '请输入通知标题及内容',
icon: 'none'
});
return [2];
}
else if (!this.data.titleContent && this.data.issueContent) {
wx.showToast({
title: '请输入通知标题',
icon: 'none'
});
return [2];
}
else if (this.data.titleContent && !this.data.issueContent) {
wx.showToast({
title: '请输入通知内容',
icon: 'none'
});
return [2];
}
this.setData({
isPublish: true,
});
return [4, this.getnoticeSubmit()];
case 3:
_a.sent();
_a.label = 4;
case 4: return [2];
}
});
});
},
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXlUYWxrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibXlUYWxrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUF1RDtBQUN2RCxJQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsMEJBQTBCLENBQUMsQ0FBQTtBQUNsRCxJQUFNLEdBQUcsR0FBRyxNQUFNLEVBQUUsQ0FBQTtBQUNwQiwyREFBdUU7QUFDdkUsSUFBSSxDQUFDO0lBQ0QsSUFBSSxFQUFFO1FBRUYsTUFBTSxFQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsU0FBUztRQUNoQyxZQUFZLEVBQUUsRUFBRTtRQUNoQixZQUFZLEVBQUUsRUFBRTtRQUNoQixlQUFlLEVBQUUsRUFBRTtRQUNuQixPQUFPLEVBQUUsQ0FBQztRQUNWLGlCQUFpQixFQUFFLEVBQUU7UUFDckIsVUFBVSxFQUFFLEdBQUc7UUFDZixXQUFXLEVBQUUsS0FBSztRQUNsQixTQUFTLEVBQUUsS0FBSztRQUNoQixXQUFXLEVBQUUsY0FBYztRQUMzQixnQkFBZ0IsRUFBRSxZQUFZO1FBQzlCLGVBQWUsRUFBRSxDQUFDO0tBQ3JCO0lBQ0QsTUFBTSxFQUFFLFVBQVUsT0FBTztRQUNyQixJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxFQUFFO1lBRXpCLElBQUksQ0FBQyxPQUFPLENBQUM7Z0JBQ1QsaUJBQWlCLEVBQUUsTUFBTTtnQkFDekIsZUFBZSxFQUFFLENBQUM7YUFDckIsQ0FBQyxDQUFBO1NBQ0w7YUFBTSxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksUUFBUSxFQUFFO1lBRWpDLElBQUksQ0FBQyxPQUFPLENBQUM7Z0JBQ1QsaUJBQWlCLEVBQUUsTUFBTTtnQkFDekIsZUFBZSxFQUFFLEVBQUU7YUFDdEIsQ0FBQyxDQUFBO1NBRUw7SUFDTCxDQUFDO0lBRUQsaUJBQWlCLEVBQWpCLFVBQWtCLENBQU07UUFDcEIsSUFBSSxD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QUFZLEVBQUU7NEJBQ3BELEVBQUUsQ0FBQyxTQUFTLENBQUM7Z0NBQ1QsS0FBSyxFQUFFLFlBQVk7Z0NBQ25CLElBQUksRUFBRSxNQUFNOzZCQUNmLENBQUMsQ0FBQTs0QkFDRixXQUFNO3lCQUNUOzZCQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTs0QkFDMUQsRUFBRSxDQUFDLFNBQVMsQ0FBQztnQ0FDVCxLQUFLLEVBQUUsU0FBUztnQ0FDaEIsSUFBSSxFQUFFLE1BQU07NkJBQ2YsQ0FBQyxDQUFBOzRCQUNGLFdBQU07eUJBQ1Q7NkJBQUssSUFBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFDOzRCQUN2RCxFQUFFLENBQUMsU0FBUyxDQUFDO2dDQUNULEtBQUssRUFBRSxTQUFTO2dDQUNoQixJQUFJLEVBQUUsTUFBTTs2QkFDZixDQUFDLENBQUE7NEJBQ0YsV0FBTTt5QkFDVDt3QkFFRCxJQUFJLENBQUMsT0FBTyxDQUFDOzRCQUNULFNBQVMsRUFBRSxJQUFJO3lCQUNsQixDQUFDLENBQUE7d0JBQ0YsV0FBTSxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUE7O3dCQUE1QixTQUE0QixDQUFBOzs7Ozs7S0FHbkM7Q0FDSixDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyAkd3V4QWN0aW9uU2hlZXQgfSBmcm9tICcuLi8uLi8uLi8uLi93dXgvaW5kZXgnXHJcbmNvbnN0IGNvbmZpZyA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL3V0aWxzL2NvbmZpZycpXHJcbmNvbnN0IGFwcCA9IGdldEFwcCgpXHJcbmltcG9ydCB7IHRvcGljU3VibWl0LCBub3RpY2VTdWJtaXQgfSBmcm9tICcuLi8uLi8uLi8uLi9hcGkvY2xlcmtPbmxpbmUnXHJcblBhZ2Uoe1xyXG4gICAgZGF0YToge1xyXG4gICAgICAgIC8vIOatpOmhtemdoiDpobXpnaLlhoXlrrnot53mnIDpobbpg6jnmoTot53nprtcclxuICAgICAgICBoZWlnaHQ6IGFwcC5nbG9iYWxEYXRhLm5hdkhlaWdodCxcclxuICAgICAgICBpc3N1ZUNvbnRlbnQ6ICcnLC8v6K+d6aKYLOmAmuefpeWGheWuuVxyXG4gICAgICAgIHRpdGxlQ29udGVudDogJycsLy/pgJrnn6XnmoTmoIfpophcclxuICAgICAgICB1cGxvYWRJbWFnZUxpc3Q6IFtdLFxyXG4gICAgICAgIGltYWdlSWQ6IDEsXHJcbiAgICAgICAgbmF2aWdhdGlvbkJhclRleHQ6ICcnLFxyXG4gICAgICAgIHVwbG9hZFR5cGU6ICcxJywvL+S4iuS8oOexu+Wei++8mjHor53popjvvIwy6YCa55+lXHJcbiAgICAgICAgaXNVcGxvYWRpbmc6IGZhbHNlLCAvL3RydWXmraPlnKjkuIrkvKBcclxuICAgICAgICBpc1B1Ymxpc2g6IGZhbHNlLC8vdHJ1Zeato+WcqOWPkemAgeivt+axglxyXG4gICAgICAgIHBsYWNlaG9sZGVyOiAn6K+36L6T5YWl5YaF5a65MjAwMOWtl+S7peWGhScsXHJcbiAgICAgICAgcGxhY2Vob2xkZXJUaXRsZTogJ+ivt+i+k+WFpeagh+mimDQw5a2X5Lul5YaFJyxcclxuICAgICAgICBpbWFnZUxpc3RsZW5naHQ6IDMsXHJcbiAgICB9LFxyXG4gICAgb25Mb2FkOiBmdW5jdGlvbiAob3B0aW9ucykge1xyXG4gICAgICAgIGlmIChvcHRpb25zLnR5cGUgPT0gJ3RvcGljJykge1xyXG4gICAgICAgICAgICAvL+WPkeW4g+ivnemimFxyXG4gICAgICAgICAgICB0aGlzLnNldERhdGEoe1xyXG4gICAgICAgICAgICAgICAgbmF2aWdhdGlvbkJhclRleHQ6ICfmiJHmnInor53or7QnLFxyXG4gICAgICAgICAgICAgICAgaW1hZ2VMaXN0bGVuZ2h0OiAzLFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy50eXBlID09ICdpbmZvcm0nKSB7XHJcbiAgICAgICAgICAgIC8vIOWPkeW4g+mAmuefpVxyXG4gICAgICAgICAgICB0aGlzLnNldERhdGEoe1xyXG4gICAgICAgICAgICAgICAgbmF2aWdhdGlvbkJhclRleHQ6ICflj5HluIPpgJrnn6UnLFxyXG4gICAgICAgICAgICAgICAgaW1hZ2VMaXN0bGVuZ2h0OiAyMCxcclxuICAgICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8vIOWPjOWQkee7keWumiDlhoXlrrnovpPlhaXmoYZcclxuICAgIGJpbmRUZXh0YXJlYUlucHV0KGU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuc2V0RGF0YSh7XHJcbiAgICAgICAgICAgIGlzc3VlQ29udGVudDogZS5kZXRhaWwudmFsdWVcclxuICAgICAgICB9KVxyXG4gICAgfSxcclxuICAgIGJpbmRjb250ZW50Ymx1cihlOiBhbnkpe1xyXG4gICAgICAgIHRoaXMuc2V0RGF0YSh7XHJcbiAgICAgICAgICAgIGlzc3VlQ29udGVudDogZS5kZXRhaWwudmFsdWVcclxuICAgICAgICB9KVxyXG4gICAgfSxcclxuICAgIGJpbmRUaXRsZUlucHV0KGU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuc2V0RGF0YSh7XHJcbiAgICAgICAgICAgIHRpdGxlQ29udGVudDogZS5kZXRhaWwudmFsdWVcclxuICAgICAgICB9KVxyXG4gICAgfSxcclxuICAgIGJpbmRUaXRsZWJsdXIoZTphbnkpe1xyXG4gICAgICAgIHRoaXMuc2V0RGF0YSh7XHJcbiAgICAgICAgICAgIHRpdGxlQ29udGVudDogZS5kZXRhaWwudmFsdWVcclxuICAgICAgICB9KVxyXG4gICAgfSxcclxuICAgIC8vIOmAieaLqeWbvueJhyDkuIrkvKDlvLnnqpcgLSDkuIrkvKDlm77niYfmlrnlvI8gLSDpgInmi6nlm77niYcgLSDkuIrkvKDlm77niYcgLSDlm57osIPotYvlgLxcclxuICAgIGNob29zZUltYWdlKCkge1xyXG4gICAgICAgIGNvbnN0IF90aGlzID0gdGhpc1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCc6Ojo6Ojo6OicgKyB0aGlzLmRhdGEuaXNVcGxvYWRpbmcpXHJcbiAgICAgICAgbGV0IG51bWJlcl9hID0gMDtcclxuICAgICAgICBpZiAodGhpcy5kYXRhLmlzVXBsb2FkaW5nIDwgMjApIHtcclxuICAgICAgICAgICAgbnVtYmVyX2EgPSB0aGlzLmRhdGEuaW1hZ2VMaXN0bGVuZ2h0IC0gX3RoaXMuZGF0YS51cGxvYWRJbWFnZUxpc3QubGVuZ3RoXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmRhdGEuaXNVcGxvYWRpbmcpIHtcclxuICAgICAgICAgICAgd3guc2hvd1RvYXN0KHtcclxuICAgICAgICAgICAgICAgIHRpdGxlOiAn5Zu+54mH5q2j5Zyo5LiK5LygJyxcclxuICAgICAgICAgICAgICAgIGljb246ICdub25lJ1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygn56aB5q2i54K55Ye7fn5+JylcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJHd1eEFjdGlvblNoZWV0KCkuc2hvd1NoZWV0KHtcclxuICAgICAgICAgICAgYnV0dG9uczogW1xyXG4gICAgICAgICAgICAgICAgeyB0ZXh0OiAn5ouN54WnJyB9LFxyXG4gICAgICAgICAgICAgICAgeyB0ZXh0OiAn5LuO55u45YaM5Lit6I635Y+WJyB9LFxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICBjbGFzc05hbWU6ICdkaWFsb2ctY2xhc3MnLFxyXG4gICAgICAgICAgICBidXR0b25DbGlja2VkKGluZGV4OiBhbnkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdpbmRleCcsIGluZGV4KVxyXG4gICAgICAgICAgICAgICAgX3RoaXMuc2V0RGF0YSh7XHJcbiAgICAgICAgICAgICAgICAgICAgaXNVcGxvYWRpbmc6IHRydWVcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygn6YCJ5oup5Zu+54mHJylcclxuICAgICAgICAgICAgICAgICAgICB3eC5jaG9vc2VJbWFnZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OiAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplVHlwZTogWydvcmlnaW5hbCcsICdjb21wcmVzc2VkJ10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVR5cGU6IFsnY2FtZXJhJ10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MocmVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGxvYWRJbWFnZUxpc3QgPSBbLi4uX3RoaXMuZGF0YS51cGxvYWRJbWFnZUxpc3RdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzLnRlbXBGaWxlc1swXS5zaXplIDw9IDUgKiAxMDI0ICogMTAyNCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwbG9hZEltYWdlTGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBsb2FkZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvc3NVcmw6ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWdVcmw6IHJlcy50ZW1wRmlsZXNbMF0ucGF0aCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VJZDogKytfdGhpcy5kYXRhLmltYWdlSWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3eC5zaG93VG9hc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+WbvueJh+S4iumZkDVN77yM6K+35Y6L57yp5ZCO6YeN6K+VficsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb246ICdub25lJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246IDE1MDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuc2V0RGF0YSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBsb2FkSW1hZ2VMaXN0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHd4LnVwbG9hZEZpbGUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogYCR7Y29uZmlnLmNvbmZpZy5hcGlVcmx9b3NzL2ZpbGUvdXBsb2FkYCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlUGF0aDogcmVzLnRlbXBGaWxlUGF0aHNbMF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2ZpbGUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1EYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwbG9hZFR5cGU6IF90aGlzLmRhdGEudXBsb2FkVHlwZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24vanNvbjsnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQXV0aG9yaXphdGlvbic6IHd4LmdldFN0b3JhZ2VTeW5jKCd0b2tlbicpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzKGZpbGVSZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBsb2FkSW1hZ2VMaXN0W3VwbG9hZEltYWdlTGlzdC5sZW5ndGggLSAxXS51cGxvYWRlZCA9IHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBsb2FkSW1hZ2VMaXN0W3VwbG9hZEltYWdlTGlzdC5sZW5ndGggLSAxXS5vc3NVcmwgPSBKU09OLnBhcnNlKGZpbGVSZXMuZGF0YSkuZGF0YS51cmxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3guaGlkZVRvYXN0KCk7Ly/lhbPpl63mj5DnpLrmoYZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuc2V0RGF0YSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGxvYWRJbWFnZUxpc3QsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1VwbG9hZGluZzogZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhaWwoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHd4LmhpZGVUb2FzdCgpOy8v5YWz6Zet5o+Q56S65qGGXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnNldERhdGEoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBsb2FkSW1hZ2VMaXN0OiBbXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVXBsb2FkaW5nOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3eC5zaG93VG9hc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICflm77niYfkuIrkvKDlpLHotKXvvIzor7fph43or5V+JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb246ICdub25lJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAxNTAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmFpbChyZXM6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3guaGlkZVRvYXN0KCk7Ly/lhbPpl63mj5DnpLrmoYZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCflj5bmtojnmoTlh73mlbAnLCByZXMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5zZXREYXRhKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1VwbG9hZGluZzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5kZXggPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIuacrOWcsOmAieaLqVwiKVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdudW1iZXJfYTo6OjonICsgbnVtYmVyX2EpXHJcbiAgICAgICAgICAgICAgICAgICAgd3guY2hvb3NlSW1hZ2Uoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb3VudDogMyAtIF90aGlzLmRhdGEudXBsb2FkSW1hZ2VMaXN0Lmxlbmd0aCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6IG51bWJlcl9hLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplVHlwZTogWydvcmlnaW5hbCcsICdjb21wcmVzc2VkJ10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVR5cGU6IFsnYWxidW0nXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyhyZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbWdJbmRleCA9IDA7Ly/kuIrkvKDlrozmiJDnmoTnrKzlh6DlvKDnhafniYdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdsbGwnLCByZXMudGVtcEZpbGVzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBsb2FkSW1hZ2VMaXN0OiBhbnkgPSBbXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kSW5kZXggPSBfdGhpcy5kYXRhLnVwbG9hZEltYWdlTGlzdC5sZW5ndGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCcyMjIyJyArIGVuZEluZGV4KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzLnRlbXBGaWxlcy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLnNpemUgPD0gNSAqIDEwMjQgKiAxMDI0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwbG9hZEltYWdlTGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwbG9hZGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zc1VybDogJycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWdVcmw6IGl0ZW0ucGF0aCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlSWQ6ICsrX3RoaXMuZGF0YS5pbWFnZUlkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3guc2hvd1RvYXN0KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn5Zu+54mH5LiK6ZmQNU3vvIzor7fljovnvKnlkI7ph43or5V+JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb246ICdub25lJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAxNTAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnNldERhdGEoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwbG9hZEltYWdlTGlzdDogWy4uLl90aGlzLmRhdGEudXBsb2FkSW1hZ2VMaXN0LCAuLi51cGxvYWRJbWFnZUxpc3RdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kSW5kZXgyID0gcmVzLnRlbXBGaWxlcy5sZW5ndGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdlbmRJbmRleDInLCBfdGhpcy5kYXRhLnVwbG9hZEltYWdlTGlzdC5sZW5ndGgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGxvYWRJbWFnZUxpc3QuZm9yRWFjaCgoaXRlbTogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChhc3luYyBmdW5jdGlvbiAoaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgd3gudXBsb2FkRmlsZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IGAke2NvbmZpZy5jb25maWcuYXBpVXJsfW9zcy9maWxlL3VwbG9hZGAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlUGF0aDogcmVzLnRlbXBGaWxlUGF0aHNbaW5kZXhdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2ZpbGUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybURhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGxvYWRUeXBlOiBfdGhpcy5kYXRhLnVwbG9hZFR5cGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXI6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBdXRob3JpemF0aW9uJzogd3guZ2V0U3RvcmFnZVN5bmMoJ3Rva2VuJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzKGZpbGVSZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWdJbmRleCA9IGltZ0luZGV4ICsgMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGxvYWRJbWFnZUxpc3RbaW5kZXhdLnVwbG9hZGVkID0gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwbG9hZEltYWdlTGlzdFtpbmRleF0ub3NzVXJsID0gSlNPTi5wYXJzZShmaWxlUmVzLmRhdGEpLmRhdGEudXJsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuZGF0YS51cGxvYWRJbWFnZUxpc3QgPSBfdGhpcy5kYXRhLnVwbG9hZEltYWdlTGlzdC5zbGljZSgwLCBlbmRJbmRleClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5zZXREYXRhKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBsb2FkSW1hZ2VMaXN0OiBbLi4uX3RoaXMuZGF0YS51cGxvYWRJbWFnZUxpc3QsIC4uLnVwbG9hZEltYWdlTGlzdF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdpbmRleCcsIGluZGV4KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHd4LmhpZGVUb2FzdCgpOy8v5YWz6Zet5o+Q56S65qGGXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGltZ0luZGV4ID09IHVwbG9hZEltYWdlTGlzdC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuc2V0RGF0YSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1VwbG9hZGluZzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhaWwoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3guaGlkZVRvYXN0KCk7Ly/lhbPpl63mj5DnpLrmoYZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5zZXREYXRhKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBsb2FkSW1hZ2VMaXN0OiBbXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNVcGxvYWRpbmc6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3eC5zaG93VG9hc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+WbvueJh+S4iuS8oOWksei0pe+8jOivt+mHjeivlX4nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uOiAnbm9uZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAxNTAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KShpbmRleClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhaWwocmVzOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCflj5bmtojnmoTlh73mlbAnLCByZXMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3eC5oaWRlVG9hc3QoKTsvL+WFs+mXreaPkOekuuahhlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuc2V0RGF0YSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNVcGxvYWRpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjYW5jZWxUZXh0OiAn5Y+W5raIJyxcclxuICAgICAgICAgICAgY2FuY2VsKCkge1xyXG4gICAgICAgICAgICAgICAgd3guaGlkZVRvYXN0KCk7Ly/lhbPpl63mj5DnpLrmoYYgXHJcbiAgICAgICAgICAgICAgICBfdGhpcy5zZXREYXRhKHtcclxuICAgICAgICAgICAgICAgICAgICBpc1VwbG9hZGluZzogZmFsc2VcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGRlc3RydWN0aXZlQnV0dG9uQ2xpY2tlZCgpIHsgfSxcclxuICAgICAgICB9KVxyXG4gICAgfSxcclxuICAgIC8vIOWIoOmZpOmAieS4reeahOWbvueJh1xyXG4gICAgZGVsZXRlSW1hZ2UoZTogYW55KSB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmRhdGEudXBsb2FkSW1hZ2VMaXN0LmZpbmRJbmRleChpdGVtID0+IGl0ZW0uaW1hZ2VJZCA9PT0gZS5jdXJyZW50VGFyZ2V0LmRhdGFzZXQuaW1hZ2VpZClcclxuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICB0aGlzLmRhdGEudXBsb2FkSW1hZ2VMaXN0LnNwbGljZShpbmRleCwgMSlcclxuICAgICAgICAgICAgdGhpcy5zZXREYXRhKHtcclxuICAgICAgICAgICAgICAgIHVwbG9hZEltYWdlTGlzdDogdGhpcy5kYXRhLnVwbG9hZEltYWdlTGlzdFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvLyDlj5HluIPor53pophcclxuICAgIGFzeW5jIGdldHRvcGljU3VibWl0KCkge1xyXG4gICAgICAgIGxldCBpbWFnZXMgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGF0YS51cGxvYWRJbWFnZUxpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgaW1hZ2VVcmwgPSB0aGlzLmRhdGEudXBsb2FkSW1hZ2VMaXN0W2ldLm9zc1VybFxyXG4gICAgICAgICAgICBpbWFnZXMucHVzaChpbWFnZVVybClcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc29sZS5sb2coJzo6Ojo6Ojo6OicgKyBKU09OLnN0cmluZ2lmeShpbWFnZXMpKVxyXG4gICAgICAgIGxldCBvYmogPSB7XHJcbiAgICAgICAgICAgIHRvcGljQ29udGVudDogdGhpcy5kYXRhLmlzc3VlQ29udGVudCxcclxuICAgICAgICAgICAgaW1hZ2VzOiBpbWFnZXNcclxuICAgICAgICB9XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbGV0IHJlczogYW55ID0gYXdhaXQgdG9waWNTdWJtaXQob2JqKVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygncmVzJywgcmVzKVxyXG4gICAgICAgICAgICB3eC5zZXRTdG9yYWdlU3luYyhcImlzQmFja09wZW5cIixmYWxzZSlcclxuICAgICAgICAgICAgd3guaGlkZUxvYWRpbmcoKVxyXG4gICAgICAgICAgICB3eC5uYXZpZ2F0ZUJhY2soe1xyXG4gICAgICAgICAgICAgICAgZGVsdGE6IDFcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9IGNhdGNoe1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLy8g5Y+R5biD6YCa55+lXHJcbiAgICBhc3luYyBnZXRub3RpY2VTdWJtaXQoKSB7XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKFwifn5+fn5cIiArIEpTT04uc3RyaW5naWZ5KHRoaXMuZGF0YS51cGxvYWRJbWFnZUxpc3QpKVxyXG4gICAgICAgIGxldCBpbWFnZXMgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGF0YS51cGxvYWRJbWFnZUxpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgaW1hZ2VVcmwgPSB0aGlzLmRhdGEudXBsb2FkSW1hZ2VMaXN0W2ldLm9zc1VybFxyXG4gICAgICAgICAgICBpbWFnZXMucHVzaChpbWFnZVVybClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKCc6Ojo6Ojo6OjonICsgSlNPTi5zdHJpbmdpZnkoaW1hZ2VzKSlcclxuICAgICAgICBsZXQgb2JqID0ge1xyXG4gICAgICAgICAgICBub3RpY2VUaXRsZTogdGhpcy5kYXRhLnRpdGxlQ29udGVudCxcclxuICAgICAgICAgICAgbm90aWNlQ29udGVudDogdGhpcy5kYXRhLmlzc3VlQ29udGVudCxcclxuICAgICAgICAgICAgaW1hZ2VzOiBpbWFnZXNcclxuICAgICAgICB9XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbGV0IHJlczogYW55ID0gYXdhaXQgbm90aWNlU3VibWl0KG9iailcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ3JlcycsIHJlcylcclxuICAgICAgICAgICAgd3guc2V0U3RvcmFnZVN5bmMoXCJpc0JhY2tPcGVuXCIsZmFsc2UpXHJcbiAgICAgICAgICAgIHd4LmhpZGVMb2FkaW5nKClcclxuICAgICAgICAgICAgd3gubmF2aWdhdGVCYWNrKHtcclxuICAgICAgICAgICAgICAgIGRlbHRhOiAxXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSBjYXRjaHtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8vIOWPkeW4g1xyXG4gICAgYXN5bmMgZ29QdWJsaXNoKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmRhdGEuaXNVcGxvYWRpbmcpIHtcclxuICAgICAgICAgICAgd3guc2hvd01vZGFsKHtcclxuICAgICAgICAgICAgICAgIHRpdGxlOiAnJywgLy/mj5DnpLrnmoTmoIfpopgsXHJcbiAgICAgICAgICAgICAgICBjb250ZW50OiAn5Zu+54mH5q2j5Zyo5Y+R5biD5LitLOivt+eojeetiScsIC8v5o+Q56S655qE5YaF5a65LFxyXG4gICAgICAgICAgICAgICAgc2hvd0NhbmNlbDogZmFsc2UsIC8v5piv5ZCm5pi+56S65Y+W5raI5oyJ6ZKuLFxyXG4gICAgICAgICAgICAgICAgY29uZmlybVRleHQ6ICfnoa7lrponLCAvL+ehruWumuaMiemSrueahOaWh+Wtl++8jOm7mOiupOS4uuWPlua2iO+8jOacgOWkmiA0IOS4quWtl+espixcclxuICAgICAgICAgICAgICAgIGNvbmZpcm1Db2xvcjogJyMzQ0M1MUYnLCAvL+ehruWumuaMiemSrueahOaWh+Wtl+minOiJsixcclxuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5jb25maXJtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCfnlKjmiLfngrnlh7vnoa7lrponKVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzLmNhbmNlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygn55So5oi354K55Ye75Y+W5raIJylcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICB3eC5zaG93TG9hZGluZyh7XHJcbiAgICAgICAgICAgIHRpdGxlOiAn5Y+R5biD5LitJyxcclxuICAgICAgICAgICAgbWFzazogdHJ1ZVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgaWYgKHRoaXMuZGF0YS5pc1B1Ymxpc2gpIHsgcmV0dXJuIH1cclxuICAgICAgICBpZiAodGhpcy5kYXRhLm5hdmlnYXRpb25CYXJUZXh0ID09ICfmiJHmnInor53or7QnKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5kYXRhLmlzc3VlQ29udGVudCkge1xyXG4gICAgICAgICAgICAgICAgd3guc2hvd1RvYXN0KHtcclxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+ivt+i+k+WFpeWPkeW4g+WGheWuuScsXHJcbiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ25vbmUnXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zZXREYXRhKHtcclxuICAgICAgICAgICAgICAgIGlzUHVibGlzaDogdHJ1ZSxcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5nZXR0b3BpY1N1Ym1pdCgpXHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5kYXRhLm5hdmlnYXRpb25CYXJUZXh0ID09ICflj5HluIPpgJrnn6UnKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5kYXRhLnRpdGxlQ29udGVudCAmJiAhdGhpcy5kYXRhLmlzc3VlQ29udGVudCkge1xyXG4gICAgICAgICAgICAgICAgd3guc2hvd1RvYXN0KHtcclxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+ivt+i+k+WFpemAmuefpeagh+mimOWPiuWGheWuuScsXHJcbiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ25vbmUnXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuZGF0YS50aXRsZUNvbnRlbnQgJiYgdGhpcy5kYXRhLmlzc3VlQ29udGVudCkge1xyXG4gICAgICAgICAgICAgICAgd3guc2hvd1RvYXN0KHtcclxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+ivt+i+k+WFpemAmuefpeagh+mimCcsXHJcbiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ25vbmUnXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgIH1lbHNlIGlmKHRoaXMuZGF0YS50aXRsZUNvbnRlbnQgJiYgIXRoaXMuZGF0YS5pc3N1ZUNvbnRlbnQpe1xyXG4gICAgICAgICAgICAgICAgd3guc2hvd1RvYXN0KHtcclxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+ivt+i+k+WFpemAmuefpeWGheWuuScsXHJcbiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ25vbmUnXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0YSh7XHJcbiAgICAgICAgICAgICAgICBpc1B1Ymxpc2g6IHRydWUsXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0bm90aWNlU3VibWl0KClcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxufSkiXX0=