| | |
| | | /***/ (function(module, exports, __webpack_require__) { |
| | | |
| | | "use strict"; |
| | | eval("/* WEBPACK VAR INJECTION */(function(__f__) {\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ 2);\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ 3));\nvar _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ 9));\nvar _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ 6));\nvar _WorkOrderStatus = _interopRequireDefault(__webpack_require__(/*! ../components/WorkOrderStatus.vue */ 53));\nvar _uniTable = _interopRequireDefault(__webpack_require__(/*! ../uni_modules/uni-table/components/uni-table/uni-table.vue */ 26));\nvar _mold = _interopRequireDefault(__webpack_require__(/*! ../components/mold.vue */ 58));\nvar _machine = _interopRequireDefault(__webpack_require__(/*! ../components/machine.vue */ 63));\nvar _WorkOrderPrint = _interopRequireDefault(__webpack_require__(/*! ../components/WorkOrderPrint.vue */ 68));\nvar _WorkOrder = _interopRequireDefault(__webpack_require__(/*! ../components/WorkOrder.vue */ 74));\nvar _Technology = _interopRequireDefault(__webpack_require__(/*! ../components/Technology.vue */ 79));\nvar _PDFShow = _interopRequireDefault(__webpack_require__(/*! ../components/PDFShow.vue */ 84));\nvar _PrintInit = _interopRequireDefault(__webpack_require__(/*! ../components/PrintInit.vue */ 89));\nvar _PrintTest = _interopRequireDefault(__webpack_require__(/*! ../components/PrintTest.vue */ 94));\nvar _EquipmentInspection = _interopRequireDefault(__webpack_require__(/*! ../components/EquipmentInspection.vue */ 99));\nvar _moldRecord = _interopRequireDefault(__webpack_require__(/*! ../pages/moldRecord.vue */ 115));\nvar _methods;\nvar _default = {\n components: {\n Technology: _Technology.default,\n WorkOrder: _WorkOrder.default,\n WorkOrderPrint: _WorkOrderPrint.default,\n Machine: _machine.default,\n Mold: _mold.default,\n UniTable: _uniTable.default,\n WorkOrderStatus: _WorkOrderStatus.default,\n PDFShow: _PDFShow.default,\n PrintInit: _PrintInit.default,\n PrintTest: _PrintTest.default,\n EquipmentInspection: _EquipmentInspection.default,\n MoldRecord: _moldRecord.default\n },\n data: function data() {\n var _ref;\n return _ref = {\n orderStatus: '',\n // 默认全部\n currentTab: 7,\n productCode: '',\n // 产品编码\n productSpec: '',\n // 产品规格\n\n machineList: [],\n machine: [],\n engineeringNoList: [],\n engineeringNoMapList: [],\n engineeringNo: '',\n machineNo: '',\n machineName: '',\n tableData: [],\n isShowTableData: []\n }, (0, _defineProperty2.default)(_ref, \"orderStatus\", '开工'), (0, _defineProperty2.default)(_ref, \"selectedOrder\", ''), (0, _defineProperty2.default)(_ref, \"orderId\", 0), (0, _defineProperty2.default)(_ref, \"selectedIndexs\", []), (0, _defineProperty2.default)(_ref, \"isShow\", false), (0, _defineProperty2.default)(_ref, \"autoRedirectTimer\", null), (0, _defineProperty2.default)(_ref, \"autoRedirectTime\", 5 * 60 * 1000), (0, _defineProperty2.default)(_ref, \"autoRefreshTimer\", null), (0, _defineProperty2.default)(_ref, \"autoRefreshInterval\", 60 * 1000), _ref;\n },\n created: function created() {\n //调试使用的代码\n // this.machineNo = uni.getStorageSync('machineNo');\n // this.machineName = uni.getStorageSync('machineName');\n //\n // if (this.machineNo) {\n // this.getWomdaaIsShow();\n // }\n\n uni.clearStorageSync();\n this.checkForUpdate();\n\n //工控机使用的代码\n this.getPrintInfo();\n },\n onLoad: function onLoad(options) {\n this.getMachineList();\n },\n onShow: function onShow() {\n this.refresh();\n this.resetAutoRedirectTimer();\n // 如果在工单选择页面,启动定时刷新\n if (this.currentTab === 7) {\n this.startAutoRefresh();\n }\n },\n onHide: function onHide() {\n // 页面隐藏时清除定时器\n this.stopAutoRefresh();\n },\n methods: (_methods = {\n onRowClick: function onRowClick(index) {\n this.selectedIndexs = [index]; // 单选\n // 手动触发 selectionChange 以同步复选框\n this.selectionChange({\n detail: {\n index: index\n }\n });\n // 重置自动跳转计时器\n this.resetAutoRedirectTimer();\n },\n // 重置自动跳转计时器\n resetAutoRedirectTimer: function resetAutoRedirectTimer() {\n var _this = this;\n // 清除现有的定时器\n if (this.autoRedirectTimer) {\n clearTimeout(this.autoRedirectTimer);\n this.autoRedirectTimer = null;\n }\n\n // 除了主页(0)、工单选择页(7)、生产报工页(4)之外的页面才设置自动跳转\n if (this.currentTab !== 0 && this.currentTab !== 7 && this.currentTab !== 4) {\n this.autoRedirectTimer = setTimeout(function () {\n // 跳转回主页\n _this.currentTab = 0;\n // 显示提示信息\n uni.showToast({\n title: '页面超时,自动返回主页',\n icon: 'none',\n duration: 2000\n });\n }, this.autoRedirectTime);\n }\n },\n checkForUpdate: function checkForUpdate() {\n var _this2 = this;\n this.$post({\n url: \"/DevMachine/getAppUpgradeInfo\",\n data: {}\n }).then(function (res) {\n var newVersion = res.data.version;\n var currentVersion = uni.getSystemInfoSync(); // 获取当前 APK 版本号\n\n if (newVersion > currentVersion.appVersion) {\n uni.showModal({\n title: \"发现新版本\",\n content: \"是否下载最新版本?\",\n success: function success(modalRes) {\n if (modalRes.confirm) {\n _this2.downloadNewApk(res.data.apkUrl);\n }\n }\n });\n //this.downloadNewApk(res.data.apkUrl);\n _this2.updateChecked = true; // 标记更新已检查过\n // // 如果有新版本,开始下载\n //download(res.data.apkUrl);\n }\n });\n },\n downloadNewApk: function downloadNewApk(apkUrl) {\n uni.showToast({\n title: \"开始下载更新...\",\n icon: \"none\",\n duration: 2000\n });\n uni.downloadFile({\n url: apkUrl,\n success: function success(res) {\n if (res.statusCode === 200) {\n plus.runtime.install(res.tempFilePath, {\n force: true\n }, function () {\n __f__(\"log\", \"安装成功,重启应用\", \" at pages/index.vue:446\");\n //plus.runtime.restart();\n //plus.runtime.quit();\n // uni.navigateBack()\n }, function (e) {\n __f__(\"error\", \"安装失败:\", e, \" at pages/index.vue:451\");\n });\n }\n },\n fail: function fail(err) {\n __f__(\"error\", \"下载失败:\", err, \" at pages/index.vue:456\");\n uni.showToast({\n title: \"下载失败,请检查网络\",\n icon: \"none\",\n duration: 2000\n });\n }\n });\n },\n refresh: function refresh() {\n this.getMachineList();\n this.getPrintInfo(); // getPrintInfo 完成后会自动调用 getWomdaaIsShow()\n // 如果当前在工单选择页面,默认加载工单列表\n if (this.currentTab === 7) {\n // 根据当前绑定工单的状态决定默认筛选条件\n var defaultStatus = '待开工、未开工、暂停';\n if (this.isShowTableData.length > 0) {\n var currentOrderStatus = this.isShowTableData[0].daa018;\n if (currentOrderStatus === '开工') {\n defaultStatus = '开工';\n } else if (currentOrderStatus === '完工') {\n defaultStatus = '完工';\n }\n }\n this.engineeringNo = defaultStatus;\n this.engineeringNoMapList = ['待开工、未开工、暂停', '开工', '完工'];\n this.getWomdaaByStatus();\n }\n },\n getPrintInfo: function getPrintInfo() {\n var _this3 = this;\n var mac = \"\";\n mac = \"74:24:ca:4f:b7:4d\";\n this.$post({\n url: \"/DevMachine/GetDevMachineByPdaMac\",\n data: {\n pdaMac: mac\n }\n }).then(function (res) {\n var devMachine = res.data.tbBillList;\n _this3.machineNo = devMachine.machineNo;\n _this3.machineName = \"调试模式:\" + _this3.machineNo + \"号齿轮机\";\n uni.setStorageSync('machineNo', _this3.machineNo);\n uni.setStorageSync('printMac', devMachine.printMac);\n __f__(\"log\", devMachine.printMac, \" at pages/index.vue:507\");\n _this3.getWomdaaIsShow();\n });\n return;\n\n // \t\t\tif (plus.os.name == \"Android\") {\n // \t\t\t\t//获取手机MAC地址\n // \t\t\t\tvar Context = plus.android.importClass(\"android.content.Context\");\n // \t\t\t\tvar WifiManager = plus.android.importClass(\"android.net.wifi.WifiManager\");\n // \t\t\t\tvar wifiManager = plus.android.runtimeMainActivity().getSystemService(Context.WIFI_SERVICE);\n // \t\t\t\tvar WifiInfo = plus.android.importClass(\"android.net.wifi.WifiInfo\");\n // \t\t\t\tvar wifiInfo = wifiManager.getConnectionInfo();\n // \t\t\t\tmac = wifiInfo.getMacAddress();\n\n // \t\t\t\t//如果mac为“02:00:00:00:00:00”,则可能是安卓6.0以上版本,则使用另一种方法获取mac地址\n // \t\t\t\tif (mac == \"02:00:00:00:00:00\") {\n // \t\t\t\t\tmac = this.getMacNew();\n // \t\t\t\t}\n // \t\t\t\t//如果mac使用新方法依然是“02:00:00:00:00:00”则不进行保存\n // \t\t\t\tif (mac == \"02:00:00:00:00:00\") {\n // \t\t\t\t\treturn;\n // \t\t\t\t}\n // \t\t\t\tuni.setStorageSync('pdaMac', mac);\n\n // \t\t\t\tthis.$post({\n // \t\t\t\t\turl: \"/DevMachine/GetDevMachineByPdaMac\",\n // \t\t\t\t\tdata: {\n // \t\t\t\t\t\tpdaMac: mac,\n // \t\t\t\t\t}\n // \t\t\t\t}).then(res => {\n // \t\t\t\t\tlet devMachine = res.data.tbBillList;\n // \t\t\t\t\tthis.machineNo = devMachine.machineNo;\n // \t\t\t\t\tthis.machineName = \"当前机台:\" + this.machineNo + \"号齿轮机\";\n\n // \t\t\t\t\tuni.setStorageSync('machineNo', this.machineNo);\n // \t\t\t\t\tuni.setStorageSync('printMac', devMachine.printMac);\n\n // \t\t\t\t\tthis.getWomdaaIsShow();\n\n // \t\t\t\t});\n // \t\t\t}\n },\n save: function save() {\n var _this4 = this;\n var data = this.selectedItems();\n if (data.length === 0) {\n this.$showMessage(\"请选择一个工单\");\n return;\n }\n if (data.length > 1) {\n this.$showMessage(\"一次只能选取一个工单\");\n return;\n }\n\n //let firstValue = data[0][\"moldId\"]; // 获取第一个对象的指定属性值\n\n //// 使用 every 方法检查所有对象的该属性值是否一致\n //let flag = data.every(item => item[\"moldId\"] === firstValue);\n //if (!flag) {\n //\tthis.$showMessage(\"选取的\" + data.length + \"个工单中的模具编号不一致\");\n //\treturn;\n //}\n\n var orderSelect = [];\n data.forEach(function (s) {\n var entity = {\n orderId: s.id,\n orderNo: s.daa001\n };\n orderSelect.push(entity);\n });\n var editDate = this.formatDate(new Date());\n this.$post({\n url: \"/MesOrderSelect/Add\",\n data: {\n machineNo: this.machineNo,\n editDate: editDate,\n item: orderSelect\n }\n }).then(function (res) {\n if (res.data.tbBillList) {\n _this4.getWomdaaIsShow();\n uni.showToast({\n title: '保存工单成功',\n //title: '将注塑机开合模数清0',\n //将值设置为 success 或者直接不用写icon这个参数\n icon: 'success',\n //显示持续时间为 5秒\n duration: 5000\n });\n }\n _this4.isShow = false;\n });\n },\n getMacNew: function getMacNew() {\n var str = \"\";\n try {\n if (plus.os.name == \"Android\") {\n var NetworkInterface = plus.android.importClass(\"java.net.NetworkInterface\");\n var networkInterface = NetworkInterface.getByName(\"wlan0\");\n var bytes = networkInterface.getHardwareAddress();\n\n //将byte[] 转换成 String\n for (var i = 0; i < bytes.length; i++) {\n var tmp = \"\";\n var num = bytes[i];\n if (num < 0) {\n tmp = (255 + num + 1).toString(16);\n } else {\n tmp = num.toString(16);\n }\n if (tmp.length == 1) {\n tmp = \"0\" + tmp;\n }\n str += i == 0 ? tmp : \":\" + tmp;\n }\n }\n } catch (err) {\n str = \"02:00:00:00:00:00\";\n }\n return str;\n },\n cancel: function cancel() {\n var _this5 = this;\n if (!this.machineNo) {\n return;\n }\n\n // 直接用 flag 判断\n if (this.hasBindedCutterFlag) {\n uni.showToast({\n title: '当前工单已绑定刀具,不能清空重选',\n icon: 'error',\n duration: 2000\n });\n return;\n }\n var editDate = this.formatDate(new Date());\n this.selectedIndexs = [];\n this.$post({\n url: \"/MesOrderSelect/Remove\",\n data: {\n machineNo: this.machineNo,\n editDate: editDate\n }\n }).then(function (res) {\n if (res.data.tbBillList > 0) {\n _this5.isShowTableData = [];\n }\n });\n },\n formatDate: function formatDate(date) {\n var year = date.getFullYear(); // 获取年份\n var month = String(date.getMonth() + 1).padStart(2, '0'); // 获取月份并补零\n var day = String(date.getDate()).padStart(2, '0'); // 获取日期并补零\n return \"\".concat(year, \"-\").concat(month, \"-\").concat(day); // 返回格式化后的字符串\n },\n selectionChange: function selectionChange(e) {\n // 单选直接赋值\n this.selectedIndexs = [e.detail.index];\n },\n selectedItems: function selectedItems() {\n var _this6 = this;\n return this.selectedIndexs.map(function (i) {\n return _this6.tableData[i];\n });\n },\n changeTab: function changeTab(index) {\n this.currentTab = index;\n // 当切换到工单选择页面(index === 7)时自动刷新\n if (index === 7) {\n this.refresh();\n // 启动定时刷新\n this.startAutoRefresh();\n } else {\n // 离开工单选择页面时停止定时刷新\n this.stopAutoRefresh();\n }\n // 重置自动跳转计时器\n this.resetAutoRedirectTimer();\n __f__(\"log\", index, \" at pages/index.vue:698\");\n },\n onMachineChange: function onMachineChange(event) {\n this.machineName = event;\n this.machineNo = this.machine[this.machineList.indexOf(event)].machineNo;\n uni.clearStorageSync();\n uni.setStorageSync('machineNo', this.machineNo);\n uni.setStorageSync('machineName', this.machineName);\n this.getWomdaaIsShow();\n },\n onEngineeringNoChange: function onEngineeringNoChange(event) {\n var orde = this.engineeringNoList[this.engineeringNoMapList.indexOf(event)];\n this.engineeringNo = orde.moldId;\n this.getWomdaa();\n },\n getMachineList: function getMachineList() {\n var _this7 = this;\n this.$post({\n url: \"/MesMachine/GetInjectionMachine\"\n }).then(function (res) {\n _this7.machine = res.data.tbBillList;\n _this7.machineList = _this7.machine.map(function (s) {\n return s.machineName;\n });\n });\n },\n //获取表格的数据源\n getWomdaaIsShow: function getWomdaaIsShow() {\n var _this8 = this;\n this.$post({\n url: \"/Womdaa/GetWomdaasByShow\",\n data: {\n machineNo: this.machineNo\n }\n }).then(function (res) {\n _this8.isShowTableData = res.data.tbBillList;\n\n // 只判断第一条(只允许一条工单)\n var order = _this8.isShowTableData[0];\n var hasBindedCutter = false;\n if (order) {\n hasBindedCutter = order.outToolId && order.outToolId.toString().trim() !== '' || order.outToolCode && order.outToolCode.trim() !== '' || order.outToolName && order.outToolName.trim() !== '';\n }\n // 存储到 data 变量\n _this8.hasBindedCutterFlag = hasBindedCutter;\n if (_this8.isShowTableData.length == 1) {\n uni.setStorageSync('daa001', _this8.isShowTableData[0].daa001);\n uni.setStorageSync('id', _this8.isShowTableData[0].id);\n }\n });\n },\n isShowTab: function isShowTab() {\n if (this.isShowTableData.length > 0) {\n uni.showToast({\n title: '已有正在操作的工单,不能再次选择',\n icon: 'error',\n duration: 2000\n });\n return;\n }\n this.isShow = true;\n // 默认选中“待开工”\n this.engineeringNo = '待开工、未开工、暂停';\n this.tableData = [];\n // 下拉框只显示合并后的状态和其它状态\n this.engineeringNoMapList = ['待开工、未开工、暂停', '开工', '完工'];\n // 默认显示“待开工”工单\n this.getWomdaaByStatus();\n }\n }, (0, _defineProperty2.default)(_methods, \"onEngineeringNoChange\", function onEngineeringNoChange(status) {\n this.engineeringNo = status;\n this.getWomdaaByStatus();\n }), (0, _defineProperty2.default)(_methods, \"getWomdaa\", function getWomdaa() {\n var _this9 = this;\n var editDate = this.formatDate(new Date());\n this.$post({\n url: \"/Womdaa/GetWomdaasByMachine\",\n data: {\n machineNo: this.machineNo,\n editDate: editDate\n }\n }).then(function (res) {\n _this9.tableData = res.data.tbBillList;\n });\n }), (0, _defineProperty2.default)(_methods, \"getWomdaaByStatus\", function getWomdaaByStatus() {\n var _this10 = this;\n var editDate = this.formatDate(new Date());\n var statusArr = [];\n if (this.engineeringNo === '待开工、未开工、暂停') {\n statusArr = ['待开工', '未开工', '暂停'];\n } else {\n statusArr = [this.engineeringNo];\n }\n this.$post({\n url: \"/Womdaa/GetWomdaasByEngineeringNo\",\n data: {\n machineNo: this.machineNo,\n orderStatus: statusArr,\n editDate: editDate\n }\n }).then(function (res) {\n _this10.tableData = res.data.tbBillList;\n });\n }), (0, _defineProperty2.default)(_methods, \"toDetail\", function toDetail(item) {\n this.orderId = item.id;\n this.selectedOrder = item.daa001;\n this.productCode = item.daa002; // 产品编码\n this.productSpec = item.daa004; // 产品规格\n this.currentTab = 0;\n }), (0, _defineProperty2.default)(_methods, \"getStartBtnClass\", function getStartBtnClass(item) {\n var isSelected = this.isShowTableData.length > 0 && this.isShowTableData[0].daa001 === item.daa001;\n if (isSelected) {\n return 'start-btn start-btn-selected'; // 当前选中的工单,绿色\n }\n\n return 'start-btn';\n }), (0, _defineProperty2.default)(_methods, \"isStartBtnDisabled\", function isStartBtnDisabled(item) {\n // 如果已经有选中的工单,且当前项不是选中的工单,则禁用\n if (this.isShowTableData.length > 0 && this.isShowTableData[0].daa001 !== item.daa001) {\n return true;\n }\n return false;\n }), (0, _defineProperty2.default)(_methods, \"isPauseBtnDisabled\", function isPauseBtnDisabled(item) {\n // 如果已经有选中的工单,且当前项不是选中的工单,则禁用\n if (this.isShowTableData.length > 0 && this.isShowTableData[0].daa001 !== item.daa001) {\n return true;\n }\n // 如果还没有选中任何工单,也禁用暂停按钮\n if (this.isShowTableData.length === 0) {\n return true;\n }\n return false;\n }), (0, _defineProperty2.default)(_methods, \"getStartBtnText\", function getStartBtnText(item) {\n var isSelected = this.isShowTableData.length > 0 && this.isShowTableData[0].daa001 === item.daa001;\n if (isSelected) {\n return '转跳报工界面';\n }\n return '开工';\n }), (0, _defineProperty2.default)(_methods, \"handleStartWork\", function handleStartWork(item) {\n var _this11 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {\n var isSelected, orderSelect, editDate;\n return _regenerator.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n // 判断当前工单是否已选中\n isSelected = _this11.isShowTableData.length > 0 && _this11.isShowTableData[0].daa001 === item.daa001;\n if (isSelected) {\n // 如果已选中,则先跳转到主界面,然后跳转到报工界面\n _this11.toDetail(item);\n // 延迟跳转到报工界面\n setTimeout(function () {\n _this11.currentTab = 4;\n }, 100);\n } else {\n // 如果未选中,则执行开工逻辑\n orderSelect = [{\n orderId: item.id,\n orderNo: item.daa001\n }];\n editDate = _this11.formatDate(new Date());\n _this11.$post({\n url: \"/MesOrderSelect/Add\",\n data: {\n machineNo: _this11.machineNo,\n editDate: editDate,\n item: orderSelect\n }\n }).then(function (res) {\n if (res.data.tbBillList) {\n _this11.getWomdaaIsShow();\n uni.showToast({\n title: '开工成功',\n icon: 'success',\n duration: 2000\n });\n }\n });\n }\n case 2:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee);\n }))();\n }), (0, _defineProperty2.default)(_methods, \"handlePauseWork\", function handlePauseWork(item) {\n var _this12 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {\n var editDate;\n return _regenerator.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n if (_this12.machineNo) {\n _context2.next = 2;\n break;\n }\n return _context2.abrupt(\"return\");\n case 2:\n if (!_this12.hasBindedCutterFlag) {\n _context2.next = 5;\n break;\n }\n uni.showToast({\n title: '当前工单已绑定刀具,不能暂停',\n icon: 'error',\n duration: 2000\n });\n return _context2.abrupt(\"return\");\n case 5:\n editDate = _this12.formatDate(new Date());\n _this12.selectedIndexs = [];\n _this12.$post({\n url: \"/MesOrderSelect/Remove\",\n data: {\n machineNo: _this12.machineNo,\n editDate: editDate\n }\n }).then(function (res) {\n if (res.data.tbBillList > 0) {\n _this12.isShowTableData = [];\n uni.showToast({\n title: '工单已暂停',\n icon: 'success',\n duration: 2000\n });\n\n // 暂停成功后,刷新当前页面\n setTimeout(function () {\n _this12.refresh();\n }, 500);\n }\n });\n case 8:\n case \"end\":\n return _context2.stop();\n }\n }\n }, _callee2);\n }))();\n }), (0, _defineProperty2.default)(_methods, \"startAutoRefresh\", function startAutoRefresh() {\n var _this13 = this;\n // 先清除现有定时器\n this.stopAutoRefresh();\n // 只在工单选择页面启动定时刷新\n if (this.currentTab === 7) {\n this.autoRefreshTimer = setInterval(function () {\n if (_this13.currentTab === 7) {\n _this13.refresh();\n }\n }, this.autoRefreshInterval);\n }\n }), (0, _defineProperty2.default)(_methods, \"stopAutoRefresh\", function stopAutoRefresh() {\n if (this.autoRefreshTimer) {\n clearInterval(this.autoRefreshTimer);\n this.autoRefreshTimer = null;\n }\n }), _methods),\n computed: {}\n};\nexports.default = _default;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 1)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vcGFnZXMvaW5kZXgudnVlIl0sIm5hbWVzIjpbImNvbXBvbmVudHMiLCJUZWNobm9sb2d5IiwiV29ya09yZGVyIiwiV29ya09yZGVyUHJpbnQiLCJNYWNoaW5lIiwiTW9sZCIsIlVuaVRhYmxlIiwiV29ya09yZGVyU3RhdHVzIiwiUERGU2hvdyIsIlByaW50SW5pdCIsIlByaW50VGVzdCIsIkVxdWlwbWVudEluc3BlY3Rpb24iLCJNb2xkUmVjb3JkIiwiZGF0YSIsIm9yZGVyU3RhdHVzIiwiY3VycmVudFRhYiIsInByb2R1Y3RDb2RlIiwicHJvZHVjdFNwZWMiLCJtYWNoaW5lTGlzdCIsIm1hY2hpbmUiLCJlbmdpbmVlcmluZ05vTGlzdCIsImVuZ2luZWVyaW5nTm9NYXBMaXN0IiwiZW5naW5lZXJpbmdObyIsIm1hY2hpbmVObyIsIm1hY2hpbmVOYW1lIiwidGFibGVEYXRhIiwiaXNTaG93VGFibGVEYXRhIiwiY3JlYXRlZCIsInVuaSIsIm9uTG9hZCIsIm9uU2hvdyIsIm9uSGlkZSIsIm1ldGhvZHMiLCJvblJvd0NsaWNrIiwiZGV0YWlsIiwiaW5kZXgiLCJyZXNldEF1dG9SZWRpcmVjdFRpbWVyIiwiY2xlYXJUaW1lb3V0IiwidGl0bGUiLCJpY29uIiwiZHVyYXRpb24iLCJjaGVja0ZvclVwZGF0ZSIsInVybCIsImNvbnRlbnQiLCJzdWNjZXNzIiwiZG93bmxvYWROZXdBcGsiLCJwbHVzIiwiZm9yY2UiLCJmYWlsIiwicmVmcmVzaCIsImRlZmF1bHRTdGF0dXMiLCJnZXRQcmludEluZm8iLCJtYWMiLCJwZGFNYWMiLCJzYXZlIiwib3JkZXJJZCIsIm9yZGVyTm8iLCJvcmRlclNlbGVjdCIsImVkaXREYXRlIiwiaXRlbSIsImdldE1hY05ldyIsInRtcCIsInN0ciIsImNhbmNlbCIsImZvcm1hdERhdGUiLCJzZWxlY3Rpb25DaGFuZ2UiLCJzZWxlY3RlZEl0ZW1zIiwiY2hhbmdlVGFiIiwib25NYWNoaW5lQ2hhbmdlIiwib25FbmdpbmVlcmluZ05vQ2hhbmdlIiwiZ2V0TWFjaGluZUxpc3QiLCJnZXRXb21kYWFJc1Nob3ciLCJoYXNCaW5kZWRDdXR0ZXIiLCJvcmRlciIsImlzU2hvd1RhYiIsInN0YXR1cyIsInN0YXR1c0FyciIsImlzU2VsZWN0ZWQiLCJzZXRUaW1lb3V0IiwiY2xlYXJJbnRlcnZhbCIsImNvbXB1dGVkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBZ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUEsZUFFQTtFQUNBQTtJQUNBQztJQUNBQztJQUNBQztJQUNBQztJQUNBQztJQUNBQztJQUNBQztJQUNBQztJQUNBQztJQUNBQztJQUNBQztJQUNBQztFQUNBO0VBQ0FDO0lBQUE7SUFDQTtNQUNBQztNQUFBO01BQ0FDO01BRUFDO01BQUE7TUFDQUM7TUFBQTs7TUFFQUM7TUFFQUM7TUFFQUM7TUFDQUM7TUFDQUM7TUFFQUM7TUFDQUM7TUFFQUM7TUFDQUM7SUFBQSxzREFFQSw0REFDQSxvREFDQSwwREFFQSxtREFFQSxpRUFHQSwrREFDQSx3RUFHQSxrRUFDQTtFQUVBO0VBQ0FDO0lBRUE7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7O0lBRUFDO0lBRUE7O0lBRUE7SUFDQTtFQUVBO0VBQ0FDO0lBQ0E7RUFDQTtFQUNBQztJQUNBO0lBQ0E7SUFDQTtJQUNBO01BQ0E7SUFDQTtFQUNBO0VBQ0FDO0lBQ0E7SUFDQTtFQUNBO0VBQ0FDO0lBQ0FDO01BQ0E7TUFDQTtNQUNBO1FBQUFDO1VBQUFDO1FBQUE7TUFBQTtNQUNBO01BQ0E7SUFDQTtJQUVBO0lBQ0FDO01BQUE7TUFDQTtNQUNBO1FBQ0FDO1FBQ0E7TUFDQTs7TUFFQTtNQUNBO1FBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQVQ7WUFDQVU7WUFDQUM7WUFDQUM7VUFDQTtRQUNBO01BQ0E7SUFDQTtJQUNBQztNQUFBO01BQ0E7UUFDQUM7UUFDQTdCO01BQ0E7UUFFQTtRQUNBOztRQUVBO1VBQ0FlO1lBQ0FVO1lBQ0FLO1lBQ0FDO2NBQ0E7Z0JBQ0E7Y0FDQTtZQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtRQUNBO01BQ0E7SUFFQTtJQUVBQztNQUNBakI7UUFDQVU7UUFDQUM7UUFDQUM7TUFDQTtNQUVBWjtRQUNBYztRQUNBRTtVQUNBO1lBQ0FFO2NBQ0FDO1lBQ0E7Y0FDQTtjQUNBO2NBQ0E7Y0FDQTtZQUNBO2NBQ0E7WUFDQTtVQUNBO1FBQ0E7UUFDQUM7VUFDQTtVQUNBcEI7WUFDQVU7WUFDQUM7WUFDQUM7VUFDQTtRQUNBO01BQ0E7SUFDQTtJQUVBUztNQUNBO01BQ0E7TUFDQTtNQUNBO1FBQ0E7UUFDQTtRQUNBO1VBQ0E7VUFDQTtZQUNBQztVQUNBO1lBQ0FBO1VBQ0E7UUFDQTtRQUNBO1FBQ0EsNkJBQ0EsY0FDQSxNQUNBLEtBQ0E7UUFDQTtNQUNBO0lBQ0E7SUFDQUM7TUFBQTtNQUNBO01BRUFDO01BQ0E7UUFDQVY7UUFDQTdCO1VBQ0F3QztRQUNBO01BQ0E7UUFDQTtRQUNBO1FBQ0E7UUFFQXpCO1FBQ0FBO1FBRUE7UUFFQTtNQUNBO01BQ0E7O01BR0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTs7TUFFQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7O01BRUE7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBOztNQUVBO01BQ0E7O01BR0E7O01BRUE7TUFDQTtJQUNBO0lBQ0EwQjtNQUFBO01BQ0E7TUFFQTtRQUNBO1FBQ0E7TUFDQTtNQUVBO1FBQ0E7UUFDQTtNQUNBOztNQUVBOztNQUVBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTs7TUFFQTtNQUVBekM7UUFDQTtVQUNBMEM7VUFDQUM7UUFDQTtRQUNBQztNQUNBO01BRUE7TUFFQTtRQUNBZjtRQUNBN0I7VUFDQVU7VUFDQW1DO1VBQ0FDO1FBQ0E7TUFDQTtRQUNBO1VBQ0E7VUFDQS9CO1lBQ0FVO1lBQ0E7WUFDQTtZQUNBQztZQUNBO1lBQ0FDO1VBQ0E7UUFDQTtRQUNBO01BQ0E7SUFFQTtJQUNBb0I7TUFDQTtNQUNBO1FBQ0E7VUFDQTtVQUNBO1VBQ0E7O1VBRUE7VUFDQTtZQUNBO1lBQ0E7WUFDQTtjQUNBQztZQUNBO2NBQ0FBO1lBQ0E7WUFDQTtjQUNBQTtZQUNBO1lBQ0FDO1VBQ0E7UUFDQTtNQUNBO1FBQ0FBO01BQ0E7TUFDQTtJQUNBO0lBRUFDO01BQUE7TUFDQTtRQUNBO01BQ0E7O01BRUE7TUFDQTtRQUNBbkM7VUFDQVU7VUFDQUM7VUFDQUM7UUFDQTtRQUNBO01BQ0E7TUFFQTtNQUNBO01BRUE7UUFDQUU7UUFDQTdCO1VBQ0FVO1VBQ0FtQztRQUNBO01BQ0E7UUFDQTtVQUNBO1FBQ0E7TUFDQTtJQUNBO0lBRUFNO01BQ0E7TUFDQTtNQUNBO01BQ0E7SUFDQTtJQUNBQztNQUNBO01BQ0E7SUFDQTtJQUVBQztNQUFBO01BQ0E7UUFBQTtNQUFBO0lBQ0E7SUFHQUM7TUFDQTtNQUNBO01BQ0E7UUFDQTtRQUNBO1FBQ0E7TUFDQTtRQUNBO1FBQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtJQUNBO0lBQ0FDO01BRUE7TUFFQTtNQUVBeEM7TUFFQUE7TUFDQUE7TUFFQTtJQUNBO0lBQ0F5QztNQUVBO01BRUE7TUFFQTtJQUVBO0lBQ0FDO01BQUE7TUFDQTtRQUNBNUI7TUFDQTtRQUNBO1FBQ0E7VUFBQTtRQUFBO01BQ0E7SUFDQTtJQUNBO0lBQ0E2QjtNQUFBO01BQ0E7UUFDQTdCO1FBQ0E3QjtVQUNBVTtRQUNBO01BQ0E7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtVQUNBaUQsa0JBQ0FDLCtEQUNBQSx3REFDQUE7UUFDQTtRQUNBO1FBQ0E7UUFFQTtVQUNBN0M7VUFDQUE7UUFDQTtNQUNBO0lBQ0E7SUFFQThDO01BQ0E7UUFDQTlDO1VBQ0FVO1VBQ0FDO1VBQ0FDO1FBQ0E7UUFDQTtNQUNBO01BRUE7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBLDZCQUNBLGNBQ0EsTUFDQSxLQUNBO01BQ0E7TUFDQTtJQUNBO0VBQUEsbUdBRUFtQztJQUNBO0lBQ0E7RUFDQSw4RUFDQTtJQUFBO0lBRUE7SUFFQTtNQUNBakM7TUFDQTdCO1FBQ0FVO1FBQ0FtQztNQUNBO0lBQ0E7TUFDQTtJQUNBO0VBQ0EsOEZBRUE7SUFBQTtJQUNBO0lBQ0E7SUFDQTtNQUNBa0I7SUFDQTtNQUNBQTtJQUNBO0lBQ0E7TUFDQWxDO01BQ0E3QjtRQUNBVTtRQUNBVDtRQUNBNEM7TUFDQTtJQUNBO01BQ0E7SUFDQTtFQUNBLDBFQUNBQztJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7RUFDQSwwRkFHQUE7SUFDQTtJQUNBO01BQ0E7SUFDQTs7SUFDQTtFQUNBLDhGQUdBQTtJQUNBO0lBQ0E7TUFDQTtJQUNBO0lBQ0E7RUFDQSw4RkFHQUE7SUFDQTtJQUNBO01BQ0E7SUFDQTtJQUNBO0lBQ0E7TUFDQTtJQUNBO0lBQ0E7RUFDQSx3RkFHQUE7SUFDQTtJQUNBO01BQ0E7SUFDQTtJQUNBO0VBQ0Esd0ZBR0FBO0lBQUE7SUFBQTtNQUFBO01BQUE7UUFBQTtVQUFBO1lBQUE7Y0FDQTtjQUNBa0I7Y0FFQTtnQkFDQTtnQkFDQTtnQkFDQTtnQkFDQUM7a0JBQ0E7Z0JBQ0E7Y0FDQTtnQkFDQTtnQkFDQXJCO2tCQUNBRjtrQkFDQUM7Z0JBQ0E7Z0JBRUFFO2dCQUVBO2tCQUNBaEI7a0JBQ0E3QjtvQkFDQVU7b0JBQ0FtQztvQkFDQUM7a0JBQ0E7Z0JBQ0E7a0JBQ0E7b0JBQ0E7b0JBQ0EvQjtzQkFDQVU7c0JBQ0FDO3NCQUNBQztvQkFDQTtrQkFDQTtnQkFDQTtjQUNBO1lBQUE7WUFBQTtjQUFBO1VBQUE7UUFBQTtNQUFBO0lBQUE7RUFDQSx3RkFHQW1CO0lBQUE7SUFBQTtNQUFBO01BQUE7UUFBQTtVQUFBO1lBQUE7Y0FBQSxJQUNBO2dCQUFBO2dCQUFBO2NBQUE7Y0FBQTtZQUFBO2NBQUEsS0FLQTtnQkFBQTtnQkFBQTtjQUFBO2NBQ0EvQjtnQkFDQVU7Z0JBQ0FDO2dCQUNBQztjQUNBO2NBQUE7WUFBQTtjQUlBa0I7Y0FDQTtjQUVBO2dCQUNBaEI7Z0JBQ0E3QjtrQkFDQVU7a0JBQ0FtQztnQkFDQTtjQUNBO2dCQUNBO2tCQUNBO2tCQUNBOUI7b0JBQ0FVO29CQUNBQztvQkFDQUM7a0JBQ0E7O2tCQUVBO2tCQUNBc0M7b0JBQ0E7a0JBQ0E7Z0JBQ0E7Y0FDQTtZQUFBO1lBQUE7Y0FBQTtVQUFBO1FBQUE7TUFBQTtJQUFBO0VBQ0EsNEZBR0E7SUFBQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO01BQ0E7UUFDQTtVQUNBO1FBQ0E7TUFDQTtJQUNBO0VBQ0EsMEZBR0E7SUFDQTtNQUNBQztNQUNBO0lBQ0E7RUFDQSxhQUNBO0VBQ0FDO0FBQ0E7QUFBQSwyQiIsImZpbGUiOiI1Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIjx0ZW1wbGF0ZT5cclxuXHJcblx0PHZpZXc+XHJcblx0XHQ8dmlldyBjbGFzcz1cInRhYi1iYXJcIj5cclxuXHRcdFx0PHZpZXcgY2xhc3M9XCJ0YWItaXRlbVwiIDpjbGFzcz1cInsgYWN0aXZlOiBjdXJyZW50VGFiID09PSA3IH1cIiBAY2xpY2s9XCJjaGFuZ2VUYWIoNylcIj5cclxuXHRcdFx0XHTlt6XljZXpgInmi6lcclxuXHRcdFx0PC92aWV3PlxyXG5cdFx0XHQ8dmlldyBjbGFzcz1cInRhYi1pdGVtXCIgOmNsYXNzPVwieyBhY3RpdmU6IGN1cnJlbnRUYWIgPT09IDAgfVwiIEBjbGljaz1cImNoYW5nZVRhYigwKVwiPlxyXG5cdFx0XHRcdOS4u+eVjOmdolxyXG5cdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdDx2aWV3IGNsYXNzPVwidGFiLWl0ZW1cIiA6Y2xhc3M9XCJ7IGFjdGl2ZTogY3VycmVudFRhYiA9PT0gMiB9XCIgQGNsaWNrPVwiY2hhbmdlVGFiKDIpXCI+XHJcblx0XHRcdFx05LiK5YiA5LiL5YiAXHJcblx0XHRcdDwvdmlldz5cclxuXHRcdFx0PHZpZXcgY2xhc3M9XCJ0YWItaXRlbVwiIDpjbGFzcz1cInsgYWN0aXZlOiBjdXJyZW50VGFiID09PSAzIH1cIiBAY2xpY2s9XCJjaGFuZ2VUYWIoMylcIj5cclxuXHRcdFx0XHTosIPmnLrpgIHmo4BcclxuXHRcdFx0PC92aWV3PlxyXG5cdFx0XHQ8dmlldyBjbGFzcz1cInRhYi1pdGVtXCIgOmNsYXNzPVwieyBhY3RpdmU6IGN1cnJlbnRUYWIgPT09IDEwIH1cIiBAY2xpY2s9XCJjaGFuZ2VUYWIoMTApXCI+XHJcblx0XHRcdFx05LiK5LiL5YiAL+mmluajgOWNleiusOW9lVxyXG5cdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdDx2aWV3IGNsYXNzPVwidGFiLWl0ZW1cIiA6Y2xhc3M9XCJ7IGFjdGl2ZTogY3VycmVudFRhYiA9PT0gNCB9XCIgQGNsaWNrPVwiY2hhbmdlVGFiKDQpXCI+XHJcblx0XHRcdFx055Sf5Lqn5oql5belXHJcblx0XHRcdDwvdmlldz5cclxuXHRcdFx0PHZpZXcgY2xhc3M9XCJ0YWItaXRlbVwiIDpjbGFzcz1cInsgYWN0aXZlOiBjdXJyZW50VGFiID09PSAxIH1cIiBAY2xpY2s9XCJjaGFuZ2VUYWIoMSlcIj5cclxuXHRcdFx0XHTlvIDlt6Xlrozlt6VcclxuXHRcdFx0PC92aWV3PlxyXG5cdFx0XHQ8dmlldyBjbGFzcz1cInRhYi1pdGVtXCIgOmNsYXNzPVwieyBhY3RpdmU6IGN1cnJlbnRUYWIgPT09IDUgfVwiIEBjbGljaz1cImNoYW5nZVRhYig1KVwiPlxyXG5cdFx0XHRcdGUtU09QXHJcblx0XHRcdDwvdmlldz5cclxuXHRcdFx0PHZpZXcgY2xhc3M9XCJ0YWItaXRlbVwiIDpjbGFzcz1cInsgYWN0aXZlOiBjdXJyZW50VGFiID09PSA2IH1cIiBAY2xpY2s9XCJjaGFuZ2VUYWIoNilcIj5cclxuXHRcdFx0XHTlt6Xoibrlj4LmlbBcclxuXHRcdFx0PC92aWV3PlxyXG5cdFx0XHQ8dmlldyBjbGFzcz1cInRhYi1pdGVtXCIgOmNsYXNzPVwieyBhY3RpdmU6IGN1cnJlbnRUYWIgPT09IDkgfVwiIEBjbGljaz1cImNoYW5nZVRhYig5KVwiPlxyXG5cdFx0XHRcdOiuvuWkh+eCueajgFxyXG5cdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdDwhLS0gPHZpZXcgY2xhc3M9XCJ0YWItaXRlbVwiIDpjbGFzcz1cInsgYWN0aXZlOiBjdXJyZW50VGFiID09PSA4IH1cIiBAY2xpY2s9XCJjaGFuZ2VUYWIoOClcIj5cclxuXHRcdFx05omT5Y2w5py66K6+572uXHJcblx0XHQ8L3ZpZXc+IC0tPlxyXG5cclxuXHRcdDwvdmlldz5cclxuXHRcdDx2aWV3IGNsYXNzPVwiZm9udFwiPjwvdmlldz5cclxuXHRcdDxzY3JvbGwtdmlldyBjbGFzcz1cImNvbnRlbnRcIj5cclxuXHRcdFx0PHZpZXcgdi1pZj1cImN1cnJlbnRUYWIgPT09IDdcIiBjbGFzcz1cInRhYi1jb250ZW50XCI+XHJcblx0XHRcdFx0PHZpZXcgY2xhc3M9XCJjb250ZW50XCI+XHJcblx0XHRcdFx0XHQ8IS0tPHZpZXc+XHJcblx0XHRcdFx0XHRcdDxoND7kuIDlj7DmnLrlj7Dlj6rog73pgInmi6nkuIDmnaHlt6XljZXvvIjlpJrpgInpu5jorqTkuLrmnIDlkI7kuIDmnaHvvIk8L2g0PlxyXG5cdFx0XHRcdFx0PC92aWV3Pi0tPlxyXG5cdFx0XHRcdFx0PHZpZXcgY2xhc3M9XCJzZWN0aW9uIHRvcC1zZWN0aW9uXCI+XHJcblx0XHRcdFx0XHRcdDx2aWV3IGNsYXNzPVwiZm9ybS1yb3cgYWxpZ24tcm93XCI+XHJcblx0XHRcdFx0XHRcdFx0PGlucHV0IHYtbW9kZWw9XCJtYWNoaW5lTmFtZVwiXHJcblx0XHRcdFx0XHRcdFx0XHQgICBkaXNhYmxlZD1cInRydWVcIlxyXG5cdFx0XHRcdFx0XHRcdFx0ICAgdHlwZT1cInRleHRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0ICAgY2xhc3M9XCJtYWNoaW5lLW5hbWUtYm94XCIgLz5cclxuXHRcdFx0XHRcdFx0XHQ8dmlldyBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBzdHlsZT1cImZsb2F0OiBsZWZ0O21hcmdpbi10b3A6IDE4cHg7Zm9udC1zaXplOiAyMnB4O1wiPueCueWHu+aMiemSruetm+mAieW3peWNleeKtuaAgTo8L2xhYmVsPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHN1cGVyd2VpLWNvbWJveCA6Y2FuZGlkYXRlcz1cImVuZ2luZWVyaW5nTm9NYXBMaXN0XCIgcGxhY2Vob2xkZXI9XCLor7fpgInmi6lcIiB2LW1vZGVsPVwiZW5naW5lZXJpbmdOb1wiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCBAc2VsZWN0PVwib25FbmdpbmVlcmluZ05vQ2hhbmdlXCIgY2xhc3M9XCJwaWNrZXJcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgc3R5bGU9XCJwYWRkaW5nOiA3cHggNDZweDt3aWR0aDogNjUwcHg7bWFyZ2luLXJpZ2h0OiAyMHB4O1wiPjwvc3VwZXJ3ZWktY29tYm94PlxyXG5cdFx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdFx0XHQ8dmlldyBjbGFzcz1cInRvcC1yaWdodFwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0PGJ1dHRvbiBjbGFzcz1cInJlZnJlc2gtYnRuXCIgQGNsaWNrPVwicmVmcmVzaFwiPuWIt+aWsDwvYnV0dG9uPlxyXG5cdFx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0PC92aWV3PlxyXG5cclxuXHRcdFx0XHRcdDwhLS0g5bel5Y2V6YCJ5oup6KGo5qC8IC0tPlxyXG5cdFx0XHRcdFx0PHZpZXcgY2xhc3M9XCJzZWN0aW9uIGNhcmRcIj5cclxuXHRcdFx0XHRcdFx0PHVuaS10YWJsZSBib3JkZXIgc3RyaXBlIGVtcHR5VGV4dD1cIuaaguaXoOabtOWkmuaVsOaNrlwiPlxyXG5cdFx0XHRcdFx0XHRcdDx1bmktdHI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dW5pLXRoIGFsaWduPVwiY2VudGVyXCIgY2xhc3M9XCJ0aFwiIHN0eWxlPVwid2lkdGg6IDIyMHB4O1wiPuaTjeS9nDwvdW5pLXRoPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHVuaS10aCBhbGlnbj1cImNlbnRlclwiIGNsYXNzPVwidGhcIiBzdHlsZT1cIndpZHRoOiAxMDBweDtcIj7lt6Xluo88L3VuaS10aD5cclxuXHRcdFx0XHRcdFx0XHRcdDx1bmktdGggYWxpZ249XCJjZW50ZXJcIiBjbGFzcz1cInRoXCIgc3R5bGU9XCJ3aWR0aDogMjAwcHg7XCI+5bel5Y2V5Y+3PC91bmktdGg+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dW5pLXRoIGFsaWduPVwiY2VudGVyXCIgY2xhc3M9XCJ0aFwiIHN0eWxlPVwid2lkdGg6IDE1MHB4O1wiPuS6p+WTgee8lueggTwvdW5pLXRoPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHVuaS10aCBhbGlnbj1cImNlbnRlclwiIGNsYXNzPVwidGhcIiBzdHlsZT1cIndpZHRoOiAyNDBweDtcIj7kuqflk4HlkI3np7A8L3VuaS10aD5cclxuXHRcdFx0XHRcdFx0XHRcdDx1bmktdGggYWxpZ249XCJjZW50ZXJcIiBjbGFzcz1cInRoXCIgc3R5bGU9XCJ3aWR0aDogMjAwcHg7XCI+6KeE5qC8PC91bmktdGg+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dW5pLXRoIGFsaWduPVwiY2VudGVyXCIgY2xhc3M9XCJ0aFwiIHN0eWxlPVwid2lkdGg6IDE1MHB4O1wiPuW3sueUn+S6p+aVsOmHjzwvdW5pLXRoPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHVuaS10aCBhbGlnbj1cImNlbnRlclwiIGNsYXNzPVwidGhcIiBzdHlsZT1cIndpZHRoOiAxNTBweDtcIj7mnKrnlJ/kuqfmlbDph488L3VuaS10aD5cclxuXHRcdFx0XHRcdFx0XHRcdDx1bmktdGggYWxpZ249XCJjZW50ZXJcIiBjbGFzcz1cInRoXCIgc3R5bGU9XCJ3aWR0aDogMTUwcHg7XCI+5rS+5bel5pWw6YePPC91bmktdGg+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dW5pLXRoIGFsaWduPVwiY2VudGVyXCIgY2xhc3M9XCJ0aFwiIHN0eWxlPVwid2lkdGg6IDE1MHB4O1wiPuW3peWNleaVsOmHjzwvdW5pLXRoPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHVuaS10aCBhbGlnbj1cImNlbnRlclwiIGNsYXNzPVwidGhcIiBzdHlsZT1cIndpZHRoOiA5MHB4O1wiPuW3peWNleeKtuaAgTwvdW5pLXRoPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHVuaS10aCBhbGlnbj1cImNlbnRlclwiIGNsYXNzPVwidGhcIiBzdHlsZT1cIndpZHRoOiA5MHB4O1wiPuaKpeW3peS6ujwvdW5pLXRoPlxyXG5cdFx0XHRcdFx0XHRcdDwvdW5pLXRyPlxyXG5cdFx0XHRcdFx0XHRcdDx1bmktdHIgdi1mb3I9XCIoaXRlbSwgaW5kZXgpIGluIHRhYmxlRGF0YVwiIDprZXk9XCJpbmRleFwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHVuaS10ZCBhbGlnbj1cImNlbnRlclwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dmlldyBjbGFzcz1cIm9wZXJhdGlvbi1idG5zXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGJ1dHRvbiBcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDpjbGFzcz1cImdldFN0YXJ0QnRuQ2xhc3MoaXRlbSlcIiBcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDpkaXNhYmxlZD1cImlzU3RhcnRCdG5EaXNhYmxlZChpdGVtKVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRAY2xpY2s9XCJoYW5kbGVTdGFydFdvcmsoaXRlbSlcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7IGdldFN0YXJ0QnRuVGV4dChpdGVtKSB9fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvYnV0dG9uPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxidXR0b24gXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cInBhdXNlLWJ0blwiIFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0OmRpc2FibGVkPVwiaXNQYXVzZUJ0bkRpc2FibGVkKGl0ZW0pXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdEBjbGljaz1cImhhbmRsZVBhdXNlV29yayhpdGVtKVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx05pqC5YGcXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9idXR0b24+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdFx0XHRcdDwvdW5pLXRkPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHVuaS10ZCBhbGlnbj1cImNlbnRlclwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgY2xhc3M9XCJmb3JtLWlucHV0XCIgZGlzYWJsZWQ9XCJ0cnVlXCIgdHlwZT1cInRleHRcIiB2LW1vZGVsPVwiaXRlbS5wcm9jTmFtZVwiIC8+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L3VuaS10ZD5cclxuXHRcdFx0XHRcdFx0XHRcdDx1bmktdGQgYWxpZ249XCJjZW50ZXJcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZvcm0taW5wdXRcIj57eyBpdGVtLmRhYTAwMSB9fTwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdFx0PC91bmktdGQ+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dW5pLXRkIGFsaWduPVwiY2VudGVyXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmb3JtLWlucHV0XCI+e3sgaXRlbS5kYWEwMDIgfX08L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHRcdDwvdW5pLXRkPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHVuaS10ZCBhbGlnbj1cImNlbnRlclwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZm9ybS1pbnB1dFwiPnt7IGl0ZW0uZGFhMDAzIH19PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L3VuaS10ZD5cclxuXHRcdFx0XHRcdFx0XHRcdDx1bmktdGQgYWxpZ249XCJjZW50ZXJcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZvcm0taW5wdXRcIj57eyBpdGVtLmRhYTAwNCB9fTwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdFx0PC91bmktdGQ+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dW5pLXRkIGFsaWduPVwiY2VudGVyXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dCBjbGFzcz1cImZvcm0taW5wdXRcIiBkaXNhYmxlZD1cInRydWVcIiB0eXBlPVwidGV4dFwiIHYtbW9kZWw9XCJpdGVtLmRhYTAxMVwiIC8+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L3VuaS10ZD5cclxuXHRcdFx0XHRcdFx0XHRcdDx1bmktdGQgYWxpZ249XCJjZW50ZXJcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0IGNsYXNzPVwiZm9ybS1pbnB1dFwiIGRpc2FibGVkPVwidHJ1ZVwiIHR5cGU9XCJ0ZXh0XCIgOnZhbHVlPVwiKGl0ZW0uZGFhMDA4IHx8IDApIC0gKGl0ZW0uZGFhMDExIHx8IDApXCIgLz5cclxuXHRcdFx0XHRcdFx0XHRcdDwvdW5pLXRkPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHVuaS10ZCBhbGlnbj1cImNlbnRlclwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgY2xhc3M9XCJmb3JtLWlucHV0XCIgZGlzYWJsZWQ9XCJ0cnVlXCIgdHlwZT1cInRleHRcIiB2LW1vZGVsPVwiaXRlbS5kYWEwMDhcIiAvPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC91bmktdGQ+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dW5pLXRkIGFsaWduPVwiY2VudGVyXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dCBjbGFzcz1cImZvcm0taW5wdXRcIiBkaXNhYmxlZD1cInRydWVcIiB0eXBlPVwidGV4dFwiIHYtbW9kZWw9XCJpdGVtLmRhYTAwOFwiIC8+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L3VuaS10ZD5cclxuXHRcdFx0XHRcdFx0XHRcdDx1bmktdGQgYWxpZ249XCJjZW50ZXJcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0IGNsYXNzPVwiZm9ybS1pbnB1dFwiIGRpc2FibGVkPVwidHJ1ZVwiIHR5cGU9XCJ0ZXh0XCIgdi1tb2RlbD1cIml0ZW0uZGFhMDE4XCIgLz5cclxuXHRcdFx0XHRcdFx0XHRcdDwvdW5pLXRkPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHVuaS10ZCBhbGlnbj1cImNlbnRlclwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgY2xhc3M9XCJmb3JtLWlucHV0XCIgZGlzYWJsZWQ9XCJ0cnVlXCIgdHlwZT1cInRleHRcIiB2LW1vZGVsPVwiaXRlbS5zdGFmZk5hbWVcIiAvPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC91bmktdGQ+XHJcblx0XHRcdFx0XHRcdFx0PC91bmktdHI+XHJcblx0XHRcdFx0XHRcdDwvdW5pLXRhYmxlPlxyXG5cdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0PC92aWV3PlxyXG5cdFx0XHQ8dmlldyB2LWlmPVwiY3VycmVudFRhYiA9PT0gMFwiIGNsYXNzPVwidGFiLWNvbnRlbnRcIj5cclxuXHRcdFx0XHQ8V29ya09yZGVyIDpvcmRlcklkPVwib3JkZXJJZFwiIDpvcmRlck5vPVwic2VsZWN0ZWRPcmRlclwiIDptYWNoaW5lTm89XCJtYWNoaW5lTm9cIlxyXG5cdFx0XHRcdFx0XHQgICA6ZGV2aWNlTnVtYmVyPVwibWFjaGluZU5hbWVcIiAvPlxyXG5cdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdDx2aWV3IHYtaWY9XCJjdXJyZW50VGFiID09PSAxXCIgY2xhc3M9XCJ0YWItY29udGVudFwiPlxyXG5cdFx0XHRcdDwhLS0gICAgICAgICZsdDshJm5kYXNoOyDosIPnlKggV29ya09yZGVyU3RhdHVzIOe7hOS7tiAmbmRhc2g7Jmd0Oy0tPlxyXG5cdFx0XHRcdDxXb3JrT3JkZXJTdGF0dXMgOm9yZGVySWQ9XCJvcmRlcklkXCIgOm9yZGVyTm89XCJzZWxlY3RlZE9yZGVyXCIgOm1hY2hpbmVObz1cIm1hY2hpbmVOb1wiIC8+XHJcblx0XHRcdDwvdmlldz5cclxuXHRcdFx0PHZpZXcgdi1pZj1cImN1cnJlbnRUYWIgPT09IDJcIiBjbGFzcz1cInRhYi1jb250ZW50XCI+XHJcblx0XHRcdFx0PCEtLSAgICAgICAgJmx0OyEmbmRhc2g7IOiwg+eUqCBtb2xkIOe7hOS7tiAmbmRhc2g7Jmd0Oy0tPlxyXG5cdFx0XHRcdDxtb2xkIDpvcmRlcklkPVwib3JkZXJJZFwiIDpvcmRlck5vPVwic2VsZWN0ZWRPcmRlclwiIDptYWNoaW5lTm89XCJtYWNoaW5lTm9cIiAvPlxyXG5cdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdDx2aWV3IHYtaWY9XCJjdXJyZW50VGFiID09PSAzXCIgY2xhc3M9XCJ0YWItY29udGVudFwiPlxyXG5cdFx0XHRcdDwhLS0gICAgICAgICZsdDshJm5kYXNoOyDosIPnlKggbW9sZCDnu4Tku7YgJm5kYXNoOyZndDstLT5cclxuXHRcdFx0XHQ8bWFjaGluZSA6b3JkZXJJZD1cIm9yZGVySWRcIiA6b3JkZXJObz1cInNlbGVjdGVkT3JkZXJcIiA6bWFjaGluZU5vPVwibWFjaGluZU5vXCIgLz5cclxuXHRcdFx0PC92aWV3PlxyXG5cdFx0XHQ8dmlldyB2LWlmPVwiY3VycmVudFRhYiA9PT0gMTBcIiBjbGFzcz1cInRhYi1jb250ZW50XCI+XHJcblx0XHRcdFx0PCEtLSDosIPnlKggbW9sZFJlY29yZCDnu4Tku7YgLS0+XHJcblx0XHRcdFx0PE1vbGRSZWNvcmQgOm9yZGVySWQ9XCJvcmRlcklkXCIgOm9yZGVyTm89XCJzZWxlY3RlZE9yZGVyXCIgOm1hY2hpbmVObz1cIm1hY2hpbmVOb1wiIC8+XHJcblx0XHRcdDwvdmlldz5cclxuXHRcdFx0PHZpZXcgdi1pZj1cImN1cnJlbnRUYWIgPT09IDRcIiBjbGFzcz1cInRhYi1jb250ZW50XCI+XHJcblx0XHRcdFx0PCEtLSAg6LCD55SoIG1vbGQg57uE5Lu2IC0tPlxyXG5cdFx0XHRcdDxXb3JrT3JkZXJQcmludCA6b3JkZXJJZD1cIm9yZGVySWRcIiA6b3JkZXJObz1cInNlbGVjdGVkT3JkZXJcIiA6bWFjaGluZU5vPVwibWFjaGluZU5vXCIgLz5cclxuXHRcdFx0PC92aWV3PlxyXG5cdFx0XHQ8dmlldyB2LWlmPVwiY3VycmVudFRhYiA9PT0gOFwiIGNsYXNzPVwidGFiLWNvbnRlbnRcIj5cclxuXHRcdFx0XHQ8IS0tIOiwg+eUqCBtb2xkIOe7hOS7tiAtLT5cclxuXHRcdFx0XHQ8UHJpbnRJbml0IDpvcmRlcklkPVwib3JkZXJJZFwiIDpvcmRlck5vPVwic2VsZWN0ZWRPcmRlclwiIDptYWNoaW5lTm89XCJtYWNoaW5lTm9cIiAvPlxyXG5cdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdDx2aWV3IHYtaWY9XCJjdXJyZW50VGFiID09PSA1XCIgY2xhc3M9XCJ0YWItY29udGVudFwiPlxyXG5cdFx0XHRcdDxQREZTaG93IDpvcmRlcklkPVwib3JkZXJJZFwiIDpvcmRlck5vPVwic2VsZWN0ZWRPcmRlclwiIDptYWNoaW5lTm89XCJtYWNoaW5lTm9cIiAvPlxyXG5cdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdDx2aWV3IHYtaWY9XCJjdXJyZW50VGFiID09PSA2XCIgY2xhc3M9XCJ0YWItY29udGVudFwiPlxyXG5cdFx0XHRcdDxUZWNobm9sb2d5IDpvcmRlcklkPVwib3JkZXJJZFwiIDpvcmRlck5vPVwic2VsZWN0ZWRPcmRlclwiIDptYWNoaW5lTm89XCJtYWNoaW5lTm9cIiAvPlxyXG5cdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdDx2aWV3IHYtaWY9XCJjdXJyZW50VGFiID09PSA5XCIgY2xhc3M9XCJ0YWItY29udGVudFwiPlxyXG5cdFx0XHRcdDwhLS0g6K6+5aSH54K55qOA6KeG5Zu+IC0tPlxyXG5cdFx0XHRcdDxFcXVpcG1lbnRJbnNwZWN0aW9uIDptYWNoaW5lTm89XCJtYWNoaW5lTm9cIiAvPlxyXG5cdFx0XHQ8L3ZpZXc+XHJcblx0XHQ8L3Njcm9sbC12aWV3PlxyXG5cclxuXHJcblx0XHQ8IS0tIOW8ueeql+S4i+aLieahhuWPquaYvuekuuW3peWNleeKtuaAgSAtLT5cclxuXHRcdDx2aWV3IHYtaWY9XCJpc1Nob3dcIiBjbGFzcz1cIm92ZXJsYXlcIj5cclxuXHRcdFx0PHZpZXcgY2xhc3M9XCJwb3B1cFwiPlxyXG5cdFx0XHRcdDx2aWV3IGNsYXNzPVwiZm9ybS1yb3dcIj5cclxuXHRcdFx0XHRcdDx2aWV3IHN0eWxlPVwiZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjtcIj5cclxuXHRcdFx0XHRcdFx0PGxhYmVsIHN0eWxlPVwiZmxvYXQ6IGxlZnQ7bWFyZ2luLXRvcDogMThweDtmb250LXNpemU6IDIycHg7XCI+54K55Ye75oyJ6ZKu562b6YCJ5bel5Y2V54q25oCBOjwvbGFiZWw+XHJcblx0XHRcdFx0XHRcdDxzdXBlcndlaS1jb21ib3ggOmNhbmRpZGF0ZXM9XCJlbmdpbmVlcmluZ05vTWFwTGlzdFwiIHBsYWNlaG9sZGVyPVwi6K+36YCJ5oupXCIgdi1tb2RlbD1cImVuZ2luZWVyaW5nTm9cIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCBAc2VsZWN0PVwib25FbmdpbmVlcmluZ05vQ2hhbmdlXCIgY2xhc3M9XCJwaWNrZXJcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCBzdHlsZT1cInBhZGRpbmc6IDdweCA0NnB4O3dpZHRoOiA2NTBweDtcIj48L3N1cGVyd2VpLWNvbWJveD5cclxuXHRcdFx0XHRcdFx0PHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMjBweDsgY29sb3I6ICNmZjY2MDA7IGZvbnQtc2l6ZTogMThweDtcIj7lpJrpgInml7blj6rkv53nlZnmnIDlkI7kuIDmnaHlt6XljZU8L3NwYW4+XHJcblx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0PC92aWV3PlxyXG5cclxuXHRcdFx0XHQ8ZGl2IHN0eWxlPVwiaGVpZ2h0OiA0NTBweDsgb3ZlcmZsb3c6IGF1dG87XCI+IDwhLS0g6LCD5pW06auY5bqm5Li6MzgwcHjvvIzkuLrlupXpg6jmjInpkq7nlZnlh7rmm7TlpJrnqbrpl7QgLS0+XHJcblx0XHRcdFx0XHQ8dGFibGU+XHJcblxyXG5cdFx0XHRcdFx0XHQ8dmlldyBjbGFzcz1cInNlY3Rpb24gY2FyZFwiPlxyXG5cdFx0XHRcdFx0XHRcdDx1bmktdGFibGUgcmVmPVwidGFibGVcIiB0eXBlPVwic2VsZWN0aW9uXCIgYm9yZGVyIHN0cmlwZSBlbXB0eVRleHQ9XCLmmoLml6Dmm7TlpJrmlbDmja5cIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQgICBjbGFzcz1cImxhcmdlLXNlbGVjdGlvbi10YWJsZVwiIEBzZWxlY3Rpb24tY2hhbmdlPVwic2VsZWN0aW9uQ2hhbmdlXCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dW5pLXRyPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dW5pLXRoIGFsaWduPVwiY2VudGVyXCIgY2xhc3M9XCJ0aFwiIHN0eWxlPVwid2lkdGg6IDEwMHB4O1wiPuW3peW6jzwvdW5pLXRoPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dW5pLXRoIGFsaWduPVwiY2VudGVyXCIgY2xhc3M9XCJ0aFwiIHN0eWxlPVwid2lkdGg6IDIwMHB4O1wiPuW3peWNleWPtzwvdW5pLXRoPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dW5pLXRoIGFsaWduPVwiY2VudGVyXCIgY2xhc3M9XCJ0aFwiIHN0eWxlPVwid2lkdGg6IDE1MHB4O1wiPuS6p+WTgee8lueggTwvdW5pLXRoPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dW5pLXRoIGFsaWduPVwiY2VudGVyXCIgY2xhc3M9XCJ0aFwiIHN0eWxlPVwid2lkdGg6IDI0MHB4O1wiPuS6p+WTgeWQjeensDwvdW5pLXRoPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dW5pLXRoIGFsaWduPVwiY2VudGVyXCIgY2xhc3M9XCJ0aFwiIHN0eWxlPVwid2lkdGg6IDIwMHB4O1wiPuinhOagvDwvdW5pLXRoPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dW5pLXRoIGFsaWduPVwiY2VudGVyXCIgY2xhc3M9XCJ0aFwiIHN0eWxlPVwid2lkdGg6IDE1MHB4O1wiPuW3sueUn+S6p+aVsOmHjzwvdW5pLXRoPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dW5pLXRoIGFsaWduPVwiY2VudGVyXCIgY2xhc3M9XCJ0aFwiIHN0eWxlPVwid2lkdGg6IDE1MHB4O1wiPuacqueUn+S6p+aVsOmHjzwvdW5pLXRoPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dW5pLXRoIGFsaWduPVwiY2VudGVyXCIgY2xhc3M9XCJ0aFwiIHN0eWxlPVwid2lkdGg6IDE1MHB4O1wiPua0vuW3peaVsOmHjzwvdW5pLXRoPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dW5pLXRoIGFsaWduPVwiY2VudGVyXCIgY2xhc3M9XCJ0aFwiIHN0eWxlPVwid2lkdGg6IDE1MHB4O1wiPuW3peWNleaVsOmHjzwvdW5pLXRoPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dW5pLXRoIGFsaWduPVwiY2VudGVyXCIgY2xhc3M9XCJ0aFwiIHN0eWxlPVwid2lkdGg6IDkwcHg7XCI+5bel5Y2V54q25oCBPC91bmktdGg+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx1bmktdGggYWxpZ249XCJjZW50ZXJcIiBjbGFzcz1cInRoXCIgc3R5bGU9XCJ3aWR0aDogOTBweDtcIj7miqXlt6Xkuro8L3VuaS10aD5cclxuPCEtLSBcdFx0XHRcdFx0XHRcdFx0XHQ8dW5pLXRoIGFsaWduPVwiY2VudGVyXCIgY2xhc3M9XCJ0aFwiIHN0eWxlPVwid2lkdGg6IDEyNnB4O1wiPumAieaLqTwvdW5pLXRoPiAtLT5cclxuXHRcdFx0XHRcdFx0XHRcdDwvdW5pLXRyPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHVuaS10ciB2LWZvcj1cIihpdGVtLCBpbmRleCkgaW4gdGFibGVEYXRhXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ6a2V5PVwiaW5kZXhcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDpjbGFzcz1cInsncm93LXNlbGVjdGVkJzogc2VsZWN0ZWRJbmRleHMuaW5jbHVkZXMoaW5kZXgpfVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0QGNsaWNrPVwib25Sb3dDbGljayhpbmRleClcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyO1wiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dW5pLXRkIGFsaWduPVwiY2VudGVyXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0IGNsYXNzPVwiZm9ybS1pbnB1dFwiIGRpc2FibGVkPVwidHJ1ZVwiIHR5cGU9XCJ0ZXh0XCIgdi1tb2RlbD1cIml0ZW0ucHJvY05hbWVcIiAvPjwhLS3lt6Xluo8tLT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PC91bmktdGQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx1bmktdGQgYWxpZ249XCJjZW50ZXJcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZm9ybS1pbnB1dFwiPnt7IGl0ZW0uZGFhMDAxIH19PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvdW5pLXRkPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dW5pLXRkIGFsaWduPVwiY2VudGVyXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZvcm0taW5wdXRcIj57eyBpdGVtLmRhYTAwMiB9fTwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3VuaS10ZD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHVuaS10ZCBhbGlnbj1cImNlbnRlclwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmb3JtLWlucHV0XCI+e3sgaXRlbS5kYWEwMDMgfX08L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PC91bmktdGQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx1bmktdGQgYWxpZ249XCJjZW50ZXJcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZm9ybS1pbnB1dFwiPnt7IGl0ZW0uZGFhMDA0IH19PC9kaXY+PCEtLeinhOagvC0tPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3VuaS10ZD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHVuaS10ZCBhbGlnbj1cImNlbnRlclwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dCBjbGFzcz1cImZvcm0taW5wdXRcIiBkaXNhYmxlZD1cInRydWVcIiB0eXBlPVwidGV4dFwiIHYtbW9kZWw9XCJpdGVtLmRhYTAxMVwiIC8+PCEtLeW3sueUn+S6p+aVsOmHjy0tPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3VuaS10ZD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHVuaS10ZCBhbGlnbj1cImNlbnRlclwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dCBjbGFzcz1cImZvcm0taW5wdXRcIiBkaXNhYmxlZD1cInRydWVcIiB0eXBlPVwidGV4dFwiIDp2YWx1ZT1cIihpdGVtLmRhYTAwOCB8fCAwKSAtIChpdGVtLmRhYTAxMSB8fCAwKVwiIC8+PCEtLeacqueUn+S6p+aVsOmHjy0tPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3VuaS10ZD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHVuaS10ZCBhbGlnbj1cImNlbnRlclwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dCBjbGFzcz1cImZvcm0taW5wdXRcIiBkaXNhYmxlZD1cInRydWVcIiB0eXBlPVwidGV4dFwiIHYtbW9kZWw9XCJpdGVtLmRhYTAwOFwiIC8+PCEtLea0vuW3peaVsOmHjy0tPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3VuaS10ZD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHVuaS10ZCBhbGlnbj1cImNlbnRlclwiPlxyXG5cdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0taW5wdXRcIiBkaXNhYmxlZD1cInRydWVcIiB0eXBlPVwidGV4dFwiIHYtbW9kZWw9XCJpdGVtLmRhYTAwOFwiIC8+PCEtLeW3peWNleaVsOmHjy0tPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3VuaS10ZD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHVuaS10ZCBhbGlnbj1cImNlbnRlclwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dCBjbGFzcz1cImZvcm0taW5wdXRcIiBkaXNhYmxlZD1cInRydWVcIiB0eXBlPVwidGV4dFwiIHYtbW9kZWw9XCJpdGVtLmRhYTAxOFwiIC8+PCEtLeW3peWNleeKtuaAgS0tPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3VuaS10ZD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHVuaS10ZCBhbGlnbj1cImNlbnRlclwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dCBjbGFzcz1cImZvcm0taW5wdXRcIiBkaXNhYmxlZD1cInRydWVcIiB0eXBlPVwidGV4dFwiIHYtbW9kZWw9XCJpdGVtLnN0YWZmTmFtZVwiIC8+PCEtLeaKpeW3peS6ui0tPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3VuaS10ZD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHVuaS10ZD5cclxuPCEtLSBcdFx0XHRcdFx0XHRcdFx0XHRcdDx2aWV3IGNsYXNzPVwidW5pLWdyb3VwXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8YnV0dG9uIGNsYXNzPVwic2VsZWN0LWJ0blwiIHR5cGU9XCJkZWZhdWx0XCIgQGNsaWNrPVwidG9EZXRhaWwoaXRlbSlcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx06L2s5Yiw5Li755WM6Z2iXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2J1dHRvbj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3ZpZXc+IC0tPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3VuaS10ZD5cclxuXHRcdFx0XHRcdFx0XHRcdDwvdW5pLXRyPlxyXG5cdFx0XHRcdFx0XHRcdDwvdW5pLXRhYmxlPlxyXG5cdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblxyXG5cdFx0XHRcdFx0PC90YWJsZT5cclxuXHRcdFx0XHQ8L2Rpdj5cclxuXHJcblx0XHRcdFx0PHZpZXcgY2xhc3M9XCJib3R0b20tc2VjdGlvblwiPlxyXG5cdFx0XHRcdFx0PGJ1dHRvbiBjbGFzcz1cInNhdmUtYnRuXCIgQGNsaWNrPVwic2F2ZVwiPuS/neWtmOmAieaLqTwvYnV0dG9uPlxyXG5cdFx0XHRcdFx0PGJ1dHRvbiBjbGFzcz1cImNhbmNlbC1idG5cIiBAY2xpY2s9XCJpc1Nob3cgPSAhaXNTaG93XCI+5Y+W5raIPC9idXR0b24+XHJcblx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHQ8L3ZpZXc+XHJcblx0XHQ8L3ZpZXc+XHJcblx0PC92aWV3PlxyXG48L3RlbXBsYXRlPlxyXG5cclxuPHNjcmlwdD5cclxuaW1wb3J0IFdvcmtPcmRlclN0YXR1cyBmcm9tICcuLi9jb21wb25lbnRzL1dvcmtPcmRlclN0YXR1cy52dWUnOyAvLyDnoa7kv53ot6/lvoTmraPnoa5cclxuaW1wb3J0IFVuaVRhYmxlIGZyb20gXCIuLi91bmlfbW9kdWxlcy91bmktdGFibGUvY29tcG9uZW50cy91bmktdGFibGUvdW5pLXRhYmxlLnZ1ZVwiO1xyXG5pbXBvcnQgTW9sZCBmcm9tIFwiLi4vY29tcG9uZW50cy9tb2xkLnZ1ZVwiO1xyXG5pbXBvcnQgTWFjaGluZSBmcm9tIFwiLi4vY29tcG9uZW50cy9tYWNoaW5lLnZ1ZVwiO1xyXG5pbXBvcnQgV29ya09yZGVyUHJpbnQgZnJvbSBcIi4uL2NvbXBvbmVudHMvV29ya09yZGVyUHJpbnQudnVlXCI7XHJcbmltcG9ydCBXb3JrT3JkZXIgZnJvbSBcIi4uL2NvbXBvbmVudHMvV29ya09yZGVyLnZ1ZVwiO1xyXG5pbXBvcnQgVGVjaG5vbG9neSBmcm9tIFwiLi4vY29tcG9uZW50cy9UZWNobm9sb2d5LnZ1ZVwiO1xyXG5pbXBvcnQgUERGU2hvdyBmcm9tIFwiLi4vY29tcG9uZW50cy9QREZTaG93LnZ1ZVwiO1xyXG5pbXBvcnQgUHJpbnRJbml0IGZyb20gXCIuLi9jb21wb25lbnRzL1ByaW50SW5pdC52dWVcIjtcclxuaW1wb3J0IFByaW50VGVzdCBmcm9tIFwiLi4vY29tcG9uZW50cy9QcmludFRlc3QudnVlXCI7XHJcbmltcG9ydCBFcXVpcG1lbnRJbnNwZWN0aW9uIGZyb20gXCIuLi9jb21wb25lbnRzL0VxdWlwbWVudEluc3BlY3Rpb24udnVlXCI7XHJcbmltcG9ydCBNb2xkUmVjb3JkIGZyb20gXCIuLi9wYWdlcy9tb2xkUmVjb3JkLnZ1ZVwiO1xyXG5cclxuXHRleHBvcnQgZGVmYXVsdCB7XHJcblx0XHRjb21wb25lbnRzOiB7XHJcblx0XHRcdFRlY2hub2xvZ3ksXHJcblx0XHRcdFdvcmtPcmRlcixcclxuXHRcdFx0V29ya09yZGVyUHJpbnQsXHJcblx0XHRcdE1hY2hpbmUsXHJcblx0XHRcdE1vbGQsXHJcblx0XHRcdFVuaVRhYmxlLFxyXG5cdFx0XHRXb3JrT3JkZXJTdGF0dXMsXHJcblx0XHRcdFBERlNob3csXHJcblx0XHRcdFByaW50SW5pdCxcclxuXHRcdFx0UHJpbnRUZXN0LFxyXG5cdFx0XHRFcXVpcG1lbnRJbnNwZWN0aW9uLFxyXG5cdFx0XHRNb2xkUmVjb3JkXHJcblx0XHR9LFxyXG5cdFx0ZGF0YSgpIHtcclxuXHRcdFx0cmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIG9yZGVyU3RhdHVzOiAnJywgLy8g6buY6K6k5YWo6YOoXHJcblx0XHRcdFx0Y3VycmVudFRhYjogNyxcclxuXHJcbiAgICAgICAgICAgICAgICBwcm9kdWN0Q29kZTogJycsIC8vIOS6p+WTgee8lueggVxyXG4gICAgICAgICAgICAgICAgcHJvZHVjdFNwZWM6ICcnLCAvLyDkuqflk4Hop4TmoLxcclxuXHJcblx0XHRcdFx0bWFjaGluZUxpc3Q6IFtdLFxyXG5cclxuXHRcdFx0XHRtYWNoaW5lOiBbXSxcclxuXHJcblx0XHRcdFx0ZW5naW5lZXJpbmdOb0xpc3Q6IFtdLFxyXG5cdFx0XHRcdGVuZ2luZWVyaW5nTm9NYXBMaXN0OiBbXSxcclxuXHRcdFx0XHRlbmdpbmVlcmluZ05vOiAnJyxcclxuXHJcblx0XHRcdFx0bWFjaGluZU5vOiAnJyxcclxuXHRcdFx0XHRtYWNoaW5lTmFtZTogJycsXHJcblxyXG5cdFx0XHRcdHRhYmxlRGF0YTogW10sXHJcblx0XHRcdFx0aXNTaG93VGFibGVEYXRhOiBbXSxcclxuXHJcblx0XHRcdFx0b3JkZXJTdGF0dXM6ICflvIDlt6UnLFxyXG5cdFx0XHRcdHNlbGVjdGVkT3JkZXI6ICcnLFxyXG5cdFx0XHRcdG9yZGVySWQ6IDAsXHJcblxyXG5cdFx0XHRcdHNlbGVjdGVkSW5kZXhzOiBbXSxcclxuXHJcblx0XHRcdFx0aXNTaG93OiBmYWxzZSxcclxuXHRcdFx0XHRcclxuXHRcdFx0XHQvLyDoh6rliqjot7Povaznm7jlhbNcclxuXHRcdFx0XHRhdXRvUmVkaXJlY3RUaW1lcjogbnVsbCxcclxuXHRcdFx0XHRhdXRvUmVkaXJlY3RUaW1lOiA1ICogNjAgKiAxMDAwLCAvLyA15YiG6ZKfXHJcblx0XHRcdFx0XHJcblx0XHRcdFx0Ly8g5bel5Y2V6YCJ5oup6aG16Z2i5a6a5pe25Yi35pawXHJcblx0XHRcdFx0YXV0b1JlZnJlc2hUaW1lcjogbnVsbCxcclxuXHRcdFx0XHRhdXRvUmVmcmVzaEludGVydmFsOiA2MCAqIDEwMDAsIC8vIDHliIbpkp9cclxuXHRcdFx0fTtcclxuXHRcdH0sXHJcblx0XHRjcmVhdGVkKCkge1xyXG5cclxuXHRcdFx0Ly/osIPor5Xkvb/nlKjnmoTku6PnoIFcclxuXHRcdFx0Ly8gdGhpcy5tYWNoaW5lTm8gPSB1bmkuZ2V0U3RvcmFnZVN5bmMoJ21hY2hpbmVObycpO1xyXG5cdFx0XHQvLyB0aGlzLm1hY2hpbmVOYW1lID0gdW5pLmdldFN0b3JhZ2VTeW5jKCdtYWNoaW5lTmFtZScpO1xyXG5cdFx0XHQvL1xyXG5cdFx0XHQvLyBpZiAodGhpcy5tYWNoaW5lTm8pIHtcclxuXHRcdFx0Ly8gICB0aGlzLmdldFdvbWRhYUlzU2hvdygpO1xyXG5cdFx0XHQvLyB9XHJcblxyXG5cdFx0XHR1bmkuY2xlYXJTdG9yYWdlU3luYygpO1xyXG5cdFx0XHRcclxuXHRcdFx0dGhpcy5jaGVja0ZvclVwZGF0ZSgpO1xyXG5cdFx0XHRcclxuXHRcdFx0Ly/lt6XmjqfmnLrkvb/nlKjnmoTku6PnoIFcclxuXHRcdFx0dGhpcy5nZXRQcmludEluZm8oKTtcclxuXHRcdFx0XHJcblx0XHR9LFxyXG5cdFx0b25Mb2FkKG9wdGlvbnMpIHtcclxuXHRcdFx0dGhpcy5nZXRNYWNoaW5lTGlzdCgpO1xyXG5cdFx0fSxcclxuXHRcdG9uU2hvdygpIHtcclxuXHRcdFx0dGhpcy5yZWZyZXNoKCk7XHJcblx0XHRcdHRoaXMucmVzZXRBdXRvUmVkaXJlY3RUaW1lcigpO1xyXG5cdFx0XHQvLyDlpoLmnpzlnKjlt6XljZXpgInmi6npobXpnaLvvIzlkK/liqjlrprml7bliLfmlrBcclxuXHRcdFx0aWYgKHRoaXMuY3VycmVudFRhYiA9PT0gNykge1xyXG5cdFx0XHRcdHRoaXMuc3RhcnRBdXRvUmVmcmVzaCgpO1xyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cdFx0b25IaWRlKCkge1xyXG5cdFx0XHQvLyDpobXpnaLpmpDol4/ml7bmuIXpmaTlrprml7blmahcclxuXHRcdFx0dGhpcy5zdG9wQXV0b1JlZnJlc2goKTtcclxuXHRcdH0sXHJcblx0XHRtZXRob2RzOiB7XHJcbiAgICAgICAgICAgIG9uUm93Q2xpY2soaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleHMgPSBbaW5kZXhdOyAvLyDljZXpgIlcclxuICAgICAgICAgICAgICAgIC8vIOaJi+WKqOinpuWPkSBzZWxlY3Rpb25DaGFuZ2Ug5Lul5ZCM5q2l5aSN6YCJ5qGGXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZSh7IGRldGFpbDogeyBpbmRleCB9IH0pO1xyXG4gICAgICAgICAgICAgICAgLy8g6YeN572u6Ieq5Yqo6Lez6L2s6K6h5pe25ZmoXHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0QXV0b1JlZGlyZWN0VGltZXIoKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIOmHjee9ruiHquWKqOi3s+i9rOiuoeaXtuWZqFxyXG4gICAgICAgICAgICByZXNldEF1dG9SZWRpcmVjdFRpbWVyKCkge1xyXG4gICAgICAgICAgICAgICAgLy8g5riF6Zmk546w5pyJ55qE5a6a5pe25ZmoXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5hdXRvUmVkaXJlY3RUaW1lcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmF1dG9SZWRpcmVjdFRpbWVyKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dG9SZWRpcmVjdFRpbWVyID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgLy8g6Zmk5LqG5Li76aG1KDAp44CB5bel5Y2V6YCJ5oup6aG1KDcp44CB55Sf5Lqn5oql5bel6aG1KDQp5LmL5aSW55qE6aG16Z2i5omN6K6+572u6Ieq5Yqo6Lez6L2sXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50VGFiICE9PSAwICYmIHRoaXMuY3VycmVudFRhYiAhPT0gNyAmJiB0aGlzLmN1cnJlbnRUYWIgIT09IDQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dG9SZWRpcmVjdFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOi3s+i9rOWbnuS4u+mhtVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRUYWIgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDmmL7npLrmj5DnpLrkv6Hmga9cclxuICAgICAgICAgICAgICAgICAgICAgICAgdW5pLnNob3dUb2FzdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+mhtemdoui2heaXtu+8jOiHquWKqOi/lOWbnuS4u+mhtScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uOiAnbm9uZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjogMjAwMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9LCB0aGlzLmF1dG9SZWRpcmVjdFRpbWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG5cdFx0XHRjaGVja0ZvclVwZGF0ZSgpIHtcclxuXHRcdFx0XHR0aGlzLiRwb3N0KHtcclxuXHRcdFx0XHRcdHVybDogXCIvRGV2TWFjaGluZS9nZXRBcHBVcGdyYWRlSW5mb1wiLFxyXG5cdFx0XHRcdFx0ZGF0YToge31cclxuXHRcdFx0XHR9KS50aGVuKHJlcyA9PiB7XHJcblx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdGxldCBuZXdWZXJzaW9uID0gcmVzLmRhdGEudmVyc2lvbjtcclxuXHRcdFx0XHRcdGxldCBjdXJyZW50VmVyc2lvbiA9IHVuaS5nZXRTeXN0ZW1JbmZvU3luYygpOyAvLyDojrflj5blvZPliY0gQVBLIOeJiOacrOWPt1xyXG5cdFx0XHRcdFx0IFxyXG5cdFx0XHRcdFx0aWYgKG5ld1ZlcnNpb24gPiBjdXJyZW50VmVyc2lvbi5hcHBWZXJzaW9uKSB7XHJcblx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHRcdHRpdGxlOiBcIuWPkeeOsOaWsOeJiOacrFwiLFxyXG5cdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IFwi5piv5ZCm5LiL6L295pyA5paw54mI5pysP1wiLFxyXG5cdFx0XHRcdFx0XHRcdHN1Y2Nlc3M6IChtb2RhbFJlcykgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKG1vZGFsUmVzLmNvbmZpcm0pIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5kb3dubG9hZE5ld0FwayhyZXMuZGF0YS5hcGtVcmwpO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdC8vdGhpcy5kb3dubG9hZE5ld0FwayhyZXMuZGF0YS5hcGtVcmwpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnVwZGF0ZUNoZWNrZWQgPSB0cnVlOyAvLyDmoIforrDmm7TmlrDlt7Lmo4Dmn6Xov4dcclxuXHRcdFx0XHRcdFx0Ly8gICAgICAvLyDlpoLmnpzmnInmlrDniYjmnKzvvIzlvIDlp4vkuIvovb1cclxuXHRcdFx0XHRcdFx0Ly9kb3dubG9hZChyZXMuZGF0YS5hcGtVcmwpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdFx0XHJcblx0XHRcdH0sXHJcblx0XHRcdFxyXG5cdFx0XHRkb3dubG9hZE5ld0FwayhhcGtVcmwpIHtcclxuXHRcdFx0XHR1bmkuc2hvd1RvYXN0KHtcclxuXHRcdFx0XHRcdHRpdGxlOiBcIuW8gOWni+S4i+i9veabtOaWsC4uLlwiLFxyXG5cdFx0XHRcdFx0aWNvbjogXCJub25lXCIsXHJcblx0XHRcdFx0XHRkdXJhdGlvbjogMjAwMFxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHRcclxuXHRcdFx0XHR1bmkuZG93bmxvYWRGaWxlKHtcclxuXHRcdFx0XHRcdHVybDogYXBrVXJsLFxyXG5cdFx0XHRcdFx0c3VjY2VzczogKHJlcykgPT4ge1xyXG5cdFx0XHRcdFx0XHRpZiAocmVzLnN0YXR1c0NvZGUgPT09IDIwMCkge1xyXG5cdFx0XHRcdFx0XHRcdHBsdXMucnVudGltZS5pbnN0YWxsKHJlcy50ZW1wRmlsZVBhdGgsIHtcclxuXHRcdFx0XHRcdFx0XHRcdGZvcmNlOiB0cnVlXHJcblx0XHRcdFx0XHRcdFx0fSwgZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhcIuWuieijheaIkOWKn++8jOmHjeWQr+W6lOeUqFwiKTtcclxuXHRcdFx0XHRcdFx0XHRcdC8vcGx1cy5ydW50aW1lLnJlc3RhcnQoKTtcclxuXHRcdFx0XHRcdFx0XHRcdC8vcGx1cy5ydW50aW1lLnF1aXQoKTtcclxuXHRcdFx0XHRcdFx0XHRcdC8vIHVuaS5uYXZpZ2F0ZUJhY2soKVxyXG5cdFx0XHRcdFx0XHRcdH0sIGZ1bmN0aW9uKGUpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoXCLlronoo4XlpLHotKU6XCIsIGUpO1xyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZmFpbDogKGVycikgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKFwi5LiL6L295aSx6LSlOlwiLCBlcnIpO1xyXG5cdFx0XHRcdFx0XHR1bmkuc2hvd1RvYXN0KHtcclxuXHRcdFx0XHRcdFx0XHR0aXRsZTogXCLkuIvovb3lpLHotKXvvIzor7fmo4Dmn6XnvZHnu5xcIixcclxuXHRcdFx0XHRcdFx0XHRpY29uOiBcIm5vbmVcIixcclxuXHRcdFx0XHRcdFx0XHRkdXJhdGlvbjogMjAwMFxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0XHJcblx0XHRcdHJlZnJlc2goKSB7XHJcblx0XHRcdFx0dGhpcy5nZXRNYWNoaW5lTGlzdCgpO1xyXG5cdFx0XHRcdHRoaXMuZ2V0UHJpbnRJbmZvKCk7IC8vIGdldFByaW50SW5mbyDlrozmiJDlkI7kvJroh6rliqjosIPnlKggZ2V0V29tZGFhSXNTaG93KClcclxuXHRcdFx0XHQvLyDlpoLmnpzlvZPliY3lnKjlt6XljZXpgInmi6npobXpnaLvvIzpu5jorqTliqDovb3lt6XljZXliJfooahcclxuXHRcdFx0XHRpZiAodGhpcy5jdXJyZW50VGFiID09PSA3KSB7XHJcblx0XHRcdFx0XHQvLyDmoLnmja7lvZPliY3nu5Hlrprlt6XljZXnmoTnirbmgIHlhrPlrprpu5jorqTnrZvpgInmnaHku7ZcclxuXHRcdFx0XHRcdGxldCBkZWZhdWx0U3RhdHVzID0gJ+W+heW8gOW3peOAgeacquW8gOW3peOAgeaaguWBnCc7XHJcblx0XHRcdFx0XHRpZiAodGhpcy5pc1Nob3dUYWJsZURhdGEubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdFx0XHRjb25zdCBjdXJyZW50T3JkZXJTdGF0dXMgPSB0aGlzLmlzU2hvd1RhYmxlRGF0YVswXS5kYWEwMTg7XHJcblx0XHRcdFx0XHRcdGlmIChjdXJyZW50T3JkZXJTdGF0dXMgPT09ICflvIDlt6UnKSB7XHJcblx0XHRcdFx0XHRcdFx0ZGVmYXVsdFN0YXR1cyA9ICflvIDlt6UnO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGN1cnJlbnRPcmRlclN0YXR1cyA9PT0gJ+WujOW3pScpIHtcclxuXHRcdFx0XHRcdFx0XHRkZWZhdWx0U3RhdHVzID0gJ+WujOW3pSc7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHRoaXMuZW5naW5lZXJpbmdObyA9IGRlZmF1bHRTdGF0dXM7XHJcblx0XHRcdFx0XHR0aGlzLmVuZ2luZWVyaW5nTm9NYXBMaXN0ID0gW1xyXG5cdFx0XHRcdFx0XHQn5b6F5byA5bel44CB5pyq5byA5bel44CB5pqC5YGcJyxcclxuXHRcdFx0XHRcdFx0J+W8gOW3pScsXHJcblx0XHRcdFx0XHRcdCflrozlt6UnXHJcblx0XHRcdFx0XHRdO1xyXG5cdFx0XHRcdFx0dGhpcy5nZXRXb21kYWFCeVN0YXR1cygpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0Z2V0UHJpbnRJbmZvKCkge1xyXG5cdFx0XHRcdHZhciBtYWMgPSBcIlwiO1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdG1hYyA9IFwiNzQ6MjQ6Y2E6NGY6Yjc6NGRcIjtcclxuXHRcdFx0XHR0aGlzLiRwb3N0KHtcclxuXHRcdFx0XHRcdHVybDogXCIvRGV2TWFjaGluZS9HZXREZXZNYWNoaW5lQnlQZGFNYWNcIixcclxuXHRcdFx0XHRcdGRhdGE6IHtcclxuXHRcdFx0XHRcdFx0cGRhTWFjOiBtYWMsXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSkudGhlbihyZXMgPT4ge1xyXG5cdFx0XHRcdFx0bGV0IGRldk1hY2hpbmUgPSByZXMuZGF0YS50YkJpbGxMaXN0O1xyXG5cdFx0XHRcdFx0dGhpcy5tYWNoaW5lTm8gPSBkZXZNYWNoaW5lLm1hY2hpbmVObztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hY2hpbmVOYW1lID0gXCLosIPor5XmqKHlvI/vvJpcIiArIHRoaXMubWFjaGluZU5vICsgXCLlj7fpvb/ova7mnLpcIlxyXG5cclxuXHRcdFx0XHRcdHVuaS5zZXRTdG9yYWdlU3luYygnbWFjaGluZU5vJywgdGhpcy5tYWNoaW5lTm8pO1xyXG5cdFx0XHRcdFx0dW5pLnNldFN0b3JhZ2VTeW5jKCdwcmludE1hYycsIGRldk1hY2hpbmUucHJpbnRNYWMpO1xyXG5cclxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKGRldk1hY2hpbmUucHJpbnRNYWMpO1xyXG5cclxuXHRcdFx0XHRcdHRoaXMuZ2V0V29tZGFhSXNTaG93KCk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdFxyXG5cdC8vICBcdFx0XHRpZiAocGx1cy5vcy5uYW1lID09IFwiQW5kcm9pZFwiKSB7XHJcblx0Ly8gIFx0XHRcdFx0Ly/ojrflj5bmiYvmnLpNQUPlnLDlnYBcclxuXHQvLyAgXHRcdFx0XHR2YXIgQ29udGV4dCA9IHBsdXMuYW5kcm9pZC5pbXBvcnRDbGFzcyhcImFuZHJvaWQuY29udGVudC5Db250ZXh0XCIpO1xyXG5cdC8vICBcdFx0XHRcdHZhciBXaWZpTWFuYWdlciA9IHBsdXMuYW5kcm9pZC5pbXBvcnRDbGFzcyhcImFuZHJvaWQubmV0LndpZmkuV2lmaU1hbmFnZXJcIik7XHJcblx0Ly8gIFx0XHRcdFx0dmFyIHdpZmlNYW5hZ2VyID0gcGx1cy5hbmRyb2lkLnJ1bnRpbWVNYWluQWN0aXZpdHkoKS5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuV0lGSV9TRVJWSUNFKTtcclxuXHQvLyAgXHRcdFx0XHR2YXIgV2lmaUluZm8gPSBwbHVzLmFuZHJvaWQuaW1wb3J0Q2xhc3MoXCJhbmRyb2lkLm5ldC53aWZpLldpZmlJbmZvXCIpO1xyXG5cdC8vICBcdFx0XHRcdHZhciB3aWZpSW5mbyA9IHdpZmlNYW5hZ2VyLmdldENvbm5lY3Rpb25JbmZvKCk7XHJcblx0Ly8gIFx0XHRcdFx0bWFjID0gd2lmaUluZm8uZ2V0TWFjQWRkcmVzcygpO1xyXG5cdFx0XHRcdFx0XHJcblx0Ly8gIFx0XHRcdFx0Ly/lpoLmnpxtYWPkuLrigJwwMjowMDowMDowMDowMDowMOKAne+8jOWImeWPr+iDveaYr+WuieWNkzYuMOS7peS4iueJiOacrO+8jOWImeS9v+eUqOWPpuS4gOenjeaWueazleiOt+WPlm1hY+WcsOWdgFxyXG5cdC8vICBcdFx0XHRcdGlmIChtYWMgPT0gXCIwMjowMDowMDowMDowMDowMFwiKSB7XHJcblx0Ly8gIFx0XHRcdFx0XHRtYWMgPSB0aGlzLmdldE1hY05ldygpO1xyXG5cdC8vICBcdFx0XHRcdH1cclxuXHQvLyAgXHRcdFx0XHQvL+WmguaenG1hY+S9v+eUqOaWsOaWueazleS+neeEtuaYr+KAnDAyOjAwOjAwOjAwOjAwOjAw4oCd5YiZ5LiN6L+b6KGM5L+d5a2YXHJcblx0Ly8gIFx0XHRcdFx0aWYgKG1hYyA9PSBcIjAyOjAwOjAwOjAwOjAwOjAwXCIpIHtcclxuXHQvLyAgXHRcdFx0XHRcdHJldHVybjtcclxuXHQvLyAgXHRcdFx0XHR9XHJcblx0Ly8gIFx0XHRcdFx0dW5pLnNldFN0b3JhZ2VTeW5jKCdwZGFNYWMnLCBtYWMpO1xyXG5cclxuXHQvLyAgXHRcdFx0XHR0aGlzLiRwb3N0KHtcclxuXHQvLyAgXHRcdFx0XHRcdHVybDogXCIvRGV2TWFjaGluZS9HZXREZXZNYWNoaW5lQnlQZGFNYWNcIixcclxuXHQvLyAgXHRcdFx0XHRcdGRhdGE6IHtcclxuXHQvLyAgXHRcdFx0XHRcdFx0cGRhTWFjOiBtYWMsXHJcblx0Ly8gIFx0XHRcdFx0XHR9XHJcblx0Ly8gIFx0XHRcdFx0fSkudGhlbihyZXMgPT4ge1xyXG5cdC8vICBcdFx0XHRcdFx0bGV0IGRldk1hY2hpbmUgPSByZXMuZGF0YS50YkJpbGxMaXN0O1xyXG5cdC8vICBcdFx0XHRcdFx0dGhpcy5tYWNoaW5lTm8gPSBkZXZNYWNoaW5lLm1hY2hpbmVObztcclxuXHQvLyAgXHRcdFx0XHRcdHRoaXMubWFjaGluZU5hbWUgPSBcIuW9k+WJjeacuuWPsO+8mlwiICsgdGhpcy5tYWNoaW5lTm8gKyBcIuWPt+m9v+i9ruaculwiO1xyXG5cclxuXHQvLyAgXHRcdFx0XHRcdHVuaS5zZXRTdG9yYWdlU3luYygnbWFjaGluZU5vJywgdGhpcy5tYWNoaW5lTm8pO1xyXG5cdC8vICBcdFx0XHRcdFx0dW5pLnNldFN0b3JhZ2VTeW5jKCdwcmludE1hYycsIGRldk1hY2hpbmUucHJpbnRNYWMpO1xyXG4gXHJcblxyXG5cdC8vICBcdFx0XHRcdFx0dGhpcy5nZXRXb21kYWFJc1Nob3coKTtcclxuXHJcblx0Ly8gIFx0XHRcdFx0fSk7XHJcblx0Ly8gIFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0c2F2ZSgpIHtcclxuXHRcdFx0XHRsZXQgZGF0YSA9IHRoaXMuc2VsZWN0ZWRJdGVtcygpO1xyXG5cclxuXHRcdFx0XHRpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiRzaG93TWVzc2FnZShcIuivt+mAieaLqeS4gOS4quW3peWNlVwiKTtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJHNob3dNZXNzYWdlKFwi5LiA5qyh5Y+q6IO96YCJ5Y+W5LiA5Liq5bel5Y2VXCIpO1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly9sZXQgZmlyc3RWYWx1ZSA9IGRhdGFbMF1bXCJtb2xkSWRcIl07IC8vIOiOt+WPluesrOS4gOS4quWvueixoeeahOaMh+WumuWxnuaAp+WAvFxyXG5cclxuXHRcdFx0XHQvLy8vIOS9v+eUqCBldmVyeSDmlrnms5Xmo4Dmn6XmiYDmnInlr7nosaHnmoTor6XlsZ7mgKflgLzmmK/lkKbkuIDoh7RcclxuXHRcdFx0XHQvL2xldCBmbGFnID0gZGF0YS5ldmVyeShpdGVtID0+IGl0ZW1bXCJtb2xkSWRcIl0gPT09IGZpcnN0VmFsdWUpO1xyXG5cdFx0XHRcdC8vaWYgKCFmbGFnKSB7XHJcblx0XHRcdFx0Ly9cdHRoaXMuJHNob3dNZXNzYWdlKFwi6YCJ5Y+W55qEXCIgKyBkYXRhLmxlbmd0aCArIFwi5Liq5bel5Y2V5Lit55qE5qih5YW357yW5Y+35LiN5LiA6Ie0XCIpO1xyXG5cdFx0XHRcdC8vXHRyZXR1cm47XHJcblx0XHRcdFx0Ly99XHJcblxyXG5cdFx0XHRcdGxldCBvcmRlclNlbGVjdCA9IFtdO1xyXG5cclxuXHRcdFx0XHRkYXRhLmZvckVhY2gocyA9PiB7XHJcblx0XHRcdFx0XHRsZXQgZW50aXR5ID0ge1xyXG5cdFx0XHRcdFx0XHRvcmRlcklkOiBzLmlkLFxyXG5cdFx0XHRcdFx0XHRvcmRlck5vOiBzLmRhYTAwMSxcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdG9yZGVyU2VsZWN0LnB1c2goZW50aXR5KTtcclxuXHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0bGV0IGVkaXREYXRlID0gdGhpcy5mb3JtYXREYXRlKG5ldyBEYXRlKCkpO1xyXG5cclxuXHRcdFx0XHR0aGlzLiRwb3N0KHtcclxuXHRcdFx0XHRcdHVybDogXCIvTWVzT3JkZXJTZWxlY3QvQWRkXCIsXHJcblx0XHRcdFx0XHRkYXRhOiB7XHJcblx0XHRcdFx0XHRcdG1hY2hpbmVObzogdGhpcy5tYWNoaW5lTm8sXHJcblx0XHRcdFx0XHRcdGVkaXREYXRlOiBlZGl0RGF0ZSxcclxuXHRcdFx0XHRcdFx0aXRlbTogb3JkZXJTZWxlY3RcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KS50aGVuKHJlcyA9PiB7XHJcblx0XHRcdFx0XHRpZiAocmVzLmRhdGEudGJCaWxsTGlzdCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLmdldFdvbWRhYUlzU2hvdygpO1xyXG5cdFx0XHRcdFx0XHR1bmkuc2hvd1RvYXN0KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn5L+d5a2Y5bel5Y2V5oiQ5YqfJyxcclxuXHRcdFx0XHRcdFx0XHQvL3RpdGxlOiAn5bCG5rOo5aGR5py65byA5ZCI5qih5pWw5riFMCcsXHJcblx0XHRcdFx0XHRcdFx0Ly/lsIblgLzorr7nva7kuLogc3VjY2VzcyDmiJbogIXnm7TmjqXkuI3nlKjlhplpY29u6L+Z5Liq5Y+C5pWwXHJcblx0XHRcdFx0XHRcdFx0aWNvbjogJ3N1Y2Nlc3MnLFxyXG5cdFx0XHRcdFx0XHRcdC8v5pi+56S65oyB57ut5pe26Ze05Li6IDXnp5JcclxuXHRcdFx0XHRcdFx0XHRkdXJhdGlvbjogNTAwMFxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHRoaXMuaXNTaG93ID0gZmFsc2U7XHJcblx0XHRcdFx0fSlcclxuXHJcblx0XHRcdH0sXHJcblx0XHRcdGdldE1hY05ldygpIHtcclxuXHRcdFx0XHR2YXIgc3RyID0gXCJcIjtcclxuXHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0aWYgKHBsdXMub3MubmFtZSA9PSBcIkFuZHJvaWRcIikge1xyXG5cdFx0XHRcdFx0XHR2YXIgTmV0d29ya0ludGVyZmFjZSA9IHBsdXMuYW5kcm9pZC5pbXBvcnRDbGFzcyhcImphdmEubmV0Lk5ldHdvcmtJbnRlcmZhY2VcIik7XHJcblx0XHRcdFx0XHRcdHZhciBuZXR3b3JrSW50ZXJmYWNlID0gTmV0d29ya0ludGVyZmFjZS5nZXRCeU5hbWUoXCJ3bGFuMFwiKTtcclxuXHRcdFx0XHRcdFx0dmFyIGJ5dGVzID0gbmV0d29ya0ludGVyZmFjZS5nZXRIYXJkd2FyZUFkZHJlc3MoKTtcclxuXHRcdFx0XHJcblx0XHRcdFx0XHRcdC8v5bCGYnl0ZVtdIOi9rOaNouaIkCBTdHJpbmdcclxuXHRcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0XHRcdHZhciB0bXAgPSBcIlwiO1xyXG5cdFx0XHRcdFx0XHRcdHZhciBudW0gPSBieXRlc1tpXTtcclxuXHRcdFx0XHRcdFx0XHRpZiAobnVtIDwgMCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0dG1wID0gKDI1NSArIG51bSArIDEpLnRvU3RyaW5nKDE2KTtcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0dG1wID0gbnVtLnRvU3RyaW5nKDE2KTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0aWYgKHRtcC5sZW5ndGggPT0gMSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0dG1wID0gXCIwXCIgKyB0bXA7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdHN0ciArPSAoaSA9PSAwKSA/ICh0bXApIDogKFwiOlwiICsgdG1wKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gY2F0Y2ggKGVycikge1xyXG5cdFx0XHRcdFx0c3RyID0gXCIwMjowMDowMDowMDowMDowMFwiO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm4gc3RyO1xyXG5cdFx0XHR9LFxyXG5cclxuICAgICAgICAgICAgY2FuY2VsKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm1hY2hpbmVObykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyDnm7TmjqXnlKggZmxhZyDliKTmlq1cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhc0JpbmRlZEN1dHRlckZsYWcpIHtcclxuICAgICAgICAgICAgICAgICAgICB1bmkuc2hvd1RvYXN0KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICflvZPliY3lt6XljZXlt7Lnu5HlrprliIDlhbfvvIzkuI3og73muIXnqbrph43pgIknLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uOiAnZXJyb3InLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjogMjAwMFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgZWRpdERhdGUgPSB0aGlzLmZvcm1hdERhdGUobmV3IERhdGUoKSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXhzID0gW107XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy4kcG9zdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBcIi9NZXNPcmRlclNlbGVjdC9SZW1vdmVcIixcclxuICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVObzogdGhpcy5tYWNoaW5lTm8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVkaXREYXRlOiBlZGl0RGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB9KS50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5kYXRhLnRiQmlsbExpc3QgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNTaG93VGFibGVEYXRhID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0sXHJcblxyXG5cdFx0XHRmb3JtYXREYXRlKGRhdGUpIHtcclxuXHRcdFx0XHRsZXQgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTsgLy8g6I635Y+W5bm05Lu9XHJcblx0XHRcdFx0bGV0IG1vbnRoID0gU3RyaW5nKGRhdGUuZ2V0TW9udGgoKSArIDEpLnBhZFN0YXJ0KDIsICcwJyk7IC8vIOiOt+WPluaciOS7veW5tuihpembtlxyXG5cdFx0XHRcdGxldCBkYXkgPSBTdHJpbmcoZGF0ZS5nZXREYXRlKCkpLnBhZFN0YXJ0KDIsICcwJyk7IC8vIOiOt+WPluaXpeacn+W5tuihpembtlxyXG5cdFx0XHRcdHJldHVybiBgJHt5ZWFyfS0ke21vbnRofS0ke2RheX1gOyAvLyDov5Tlm57moLzlvI/ljJblkI7nmoTlrZfnrKbkuLJcclxuXHRcdFx0fSxcclxuXHRcdFx0c2VsZWN0aW9uQ2hhbmdlKGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIOWNlemAieebtOaOpei1i+WAvFxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4cyA9IFtlLmRldGFpbC5pbmRleF07XHJcblx0XHRcdH0sXHJcblxyXG5cdFx0XHRzZWxlY3RlZEl0ZW1zKCkge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLnNlbGVjdGVkSW5kZXhzLm1hcChpID0+IHRoaXMudGFibGVEYXRhW2ldKVxyXG5cdFx0XHR9LFxyXG5cclxuXHJcblx0XHRcdGNoYW5nZVRhYihpbmRleCkge1xyXG5cdFx0XHRcdHRoaXMuY3VycmVudFRhYiA9IGluZGV4O1xyXG5cdFx0XHRcdC8vIOW9k+WIh+aNouWIsOW3peWNlemAieaLqemhtemdoihpbmRleCA9PT0gNynml7boh6rliqjliLfmlrBcclxuXHRcdFx0XHRpZiAoaW5kZXggPT09IDcpIHtcclxuXHRcdFx0XHRcdHRoaXMucmVmcmVzaCgpO1xyXG5cdFx0XHRcdFx0Ly8g5ZCv5Yqo5a6a5pe25Yi35pawXHJcblx0XHRcdFx0XHR0aGlzLnN0YXJ0QXV0b1JlZnJlc2goKTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0Ly8g56a75byA5bel5Y2V6YCJ5oup6aG16Z2i5pe25YGc5q2i5a6a5pe25Yi35pawXHJcblx0XHRcdFx0XHR0aGlzLnN0b3BBdXRvUmVmcmVzaCgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQvLyDph43nva7oh6rliqjot7PovazorqHml7blmahcclxuXHRcdFx0XHR0aGlzLnJlc2V0QXV0b1JlZGlyZWN0VGltZXIoKTtcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhpbmRleCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdG9uTWFjaGluZUNoYW5nZShldmVudCkge1xyXG5cclxuXHRcdFx0XHR0aGlzLm1hY2hpbmVOYW1lID0gZXZlbnQ7XHJcblxyXG5cdFx0XHRcdHRoaXMubWFjaGluZU5vID0gdGhpcy5tYWNoaW5lW3RoaXMubWFjaGluZUxpc3QuaW5kZXhPZihldmVudCldLm1hY2hpbmVObztcclxuXHJcblx0XHRcdFx0dW5pLmNsZWFyU3RvcmFnZVN5bmMoKTtcclxuXHJcblx0XHRcdFx0dW5pLnNldFN0b3JhZ2VTeW5jKCdtYWNoaW5lTm8nLCB0aGlzLm1hY2hpbmVObyk7XHJcblx0XHRcdFx0dW5pLnNldFN0b3JhZ2VTeW5jKCdtYWNoaW5lTmFtZScsIHRoaXMubWFjaGluZU5hbWUpO1xyXG5cclxuXHRcdFx0XHR0aGlzLmdldFdvbWRhYUlzU2hvdygpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRvbkVuZ2luZWVyaW5nTm9DaGFuZ2UoZXZlbnQpIHtcclxuXHJcblx0XHRcdFx0bGV0IG9yZGUgPSB0aGlzLmVuZ2luZWVyaW5nTm9MaXN0W3RoaXMuZW5naW5lZXJpbmdOb01hcExpc3QuaW5kZXhPZihldmVudCldO1xyXG5cclxuXHRcdFx0XHR0aGlzLmVuZ2luZWVyaW5nTm8gPSBvcmRlLm1vbGRJZDtcclxuXHJcblx0XHRcdFx0dGhpcy5nZXRXb21kYWEoKTtcclxuXHJcblx0XHRcdH0sXHJcblx0XHRcdGdldE1hY2hpbmVMaXN0KCkge1xyXG5cdFx0XHRcdHRoaXMuJHBvc3Qoe1xyXG5cdFx0XHRcdFx0dXJsOiBcIi9NZXNNYWNoaW5lL0dldEluamVjdGlvbk1hY2hpbmVcIixcclxuXHRcdFx0XHR9KS50aGVuKHJlcyA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLm1hY2hpbmUgPSByZXMuZGF0YS50YkJpbGxMaXN0O1xyXG5cdFx0XHRcdFx0dGhpcy5tYWNoaW5lTGlzdCA9IHRoaXMubWFjaGluZS5tYXAocyA9PiBzLm1hY2hpbmVOYW1lKTtcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9LFxyXG4gICAgICAgICAgICAvL+iOt+WPluihqOagvOeahOaVsOaNrua6kFxyXG4gICAgICAgICAgICBnZXRXb21kYWFJc1Nob3coKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRwb3N0KHtcclxuICAgICAgICAgICAgICAgICAgICB1cmw6IFwiL1dvbWRhYS9HZXRXb21kYWFzQnlTaG93XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lTm86IHRoaXMubWFjaGluZU5vLFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pLnRoZW4ocmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzU2hvd1RhYmxlRGF0YSA9IHJlcy5kYXRhLnRiQmlsbExpc3Q7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOWPquWIpOaWreesrOS4gOadoe+8iOWPquWFgeiuuOS4gOadoeW3peWNle+8iVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9yZGVyID0gdGhpcy5pc1Nob3dUYWJsZURhdGFbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGhhc0JpbmRlZEN1dHRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcmRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNCaW5kZWRDdXR0ZXIgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9yZGVyLm91dFRvb2xJZCAmJiBvcmRlci5vdXRUb29sSWQudG9TdHJpbmcoKS50cmltKCkgIT09ICcnKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9yZGVyLm91dFRvb2xDb2RlICYmIG9yZGVyLm91dFRvb2xDb2RlLnRyaW0oKSAhPT0gJycpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3JkZXIub3V0VG9vbE5hbWUgJiYgb3JkZXIub3V0VG9vbE5hbWUudHJpbSgpICE9PSAnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOWtmOWCqOWIsCBkYXRhIOWPmOmHj1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFzQmluZGVkQ3V0dGVyRmxhZyA9IGhhc0JpbmRlZEN1dHRlcjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNTaG93VGFibGVEYXRhLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuaS5zZXRTdG9yYWdlU3luYygnZGFhMDAxJywgdGhpcy5pc1Nob3dUYWJsZURhdGFbMF0uZGFhMDAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdW5pLnNldFN0b3JhZ2VTeW5jKCdpZCcsIHRoaXMuaXNTaG93VGFibGVEYXRhWzBdLmlkKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgIGlzU2hvd1RhYigpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzU2hvd1RhYmxlRGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdW5pLnNob3dUb2FzdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn5bey5pyJ5q2j5Zyo5pON5L2c55qE5bel5Y2V77yM5LiN6IO95YaN5qyh6YCJ5oupJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2Vycm9yJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246IDIwMDBcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1Nob3cgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgLy8g6buY6K6k6YCJ5Lit4oCc5b6F5byA5bel4oCdXHJcbiAgICAgICAgICAgICAgICB0aGlzLmVuZ2luZWVyaW5nTm8gPSAn5b6F5byA5bel44CB5pyq5byA5bel44CB5pqC5YGcJztcclxuICAgICAgICAgICAgICAgIHRoaXMudGFibGVEYXRhID0gW107XHJcbiAgICAgICAgICAgICAgICAvLyDkuIvmi4nmoYblj6rmmL7npLrlkIjlubblkI7nmoTnirbmgIHlkozlhbblroPnirbmgIFcclxuICAgICAgICAgICAgICAgIHRoaXMuZW5naW5lZXJpbmdOb01hcExpc3QgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgJ+W+heW8gOW3peOAgeacquW8gOW3peOAgeaaguWBnCcsXHJcbiAgICAgICAgICAgICAgICAgICAgJ+W8gOW3pScsXHJcbiAgICAgICAgICAgICAgICAgICAgJ+WujOW3pSdcclxuICAgICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgICAgICAvLyDpu5jorqTmmL7npLrigJzlvoXlvIDlt6XigJ3lt6XljZVcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0V29tZGFhQnlTdGF0dXMoKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgLy8g5LiL5ouJ5qGG6YCJ5Lit5ZCO77yM5oyJ54q25oCB562b6YCJ5bel5Y2VXHJcbiAgICAgICAgICAgIG9uRW5naW5lZXJpbmdOb0NoYW5nZShzdGF0dXMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZW5naW5lZXJpbmdObyA9IHN0YXR1cztcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0V29tZGFhQnlTdGF0dXMoKTtcclxuICAgICAgICAgICAgfSxcclxuXHRcdFx0Z2V0V29tZGFhKCkge1xyXG5cclxuXHRcdFx0XHRsZXQgZWRpdERhdGUgPSB0aGlzLmZvcm1hdERhdGUobmV3IERhdGUoKSk7XHJcblxyXG5cdFx0XHRcdHRoaXMuJHBvc3Qoe1xyXG5cdFx0XHRcdFx0dXJsOiBcIi9Xb21kYWEvR2V0V29tZGFhc0J5TWFjaGluZVwiLFxyXG5cdFx0XHRcdFx0ZGF0YToge1xyXG5cdFx0XHRcdFx0XHRtYWNoaW5lTm86IHRoaXMubWFjaGluZU5vLFxyXG5cdFx0XHRcdFx0XHRlZGl0RGF0ZTogZWRpdERhdGVcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KS50aGVuKHJlcyA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLnRhYmxlRGF0YSA9IHJlcy5kYXRhLnRiQmlsbExpc3Q7XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fSxcclxuICAgICAgICAgICAgLy8g5oyJ5bel5Y2V54q25oCB562b6YCJ5bel5Y2VXHJcbiAgICAgICAgICAgIGdldFdvbWRhYUJ5U3RhdHVzKCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGVkaXREYXRlID0gdGhpcy5mb3JtYXREYXRlKG5ldyBEYXRlKCkpO1xyXG4gICAgICAgICAgICAgICAgbGV0IHN0YXR1c0FyciA9IFtdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZW5naW5lZXJpbmdObyA9PT0gJ+W+heW8gOW3peOAgeacquW8gOW3peOAgeaaguWBnCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0dXNBcnIgPSBbJ+W+heW8gOW3pScsICfmnKrlvIDlt6UnLCAn5pqC5YGcJ107XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1c0FyciA9IFt0aGlzLmVuZ2luZWVyaW5nTm9dO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy4kcG9zdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBcIi9Xb21kYWEvR2V0V29tZGFhc0J5RW5naW5lZXJpbmdOb1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZU5vOiB0aGlzLm1hY2hpbmVObyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXJTdGF0dXM6IHN0YXR1c0FycixcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWRpdERhdGU6IGVkaXREYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSkudGhlbihyZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGFibGVEYXRhID0gcmVzLmRhdGEudGJCaWxsTGlzdDtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9LFxyXG5cdFx0XHR0b0RldGFpbChpdGVtKSB7XHJcblx0XHRcdFx0dGhpcy5vcmRlcklkID0gaXRlbS5pZDtcclxuXHRcdFx0XHR0aGlzLnNlbGVjdGVkT3JkZXIgPSBpdGVtLmRhYTAwMTtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJvZHVjdENvZGUgPSBpdGVtLmRhYTAwMjsgLy8g5Lqn5ZOB57yW56CBXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByb2R1Y3RTcGVjID0gaXRlbS5kYWEwMDQ7IC8vIOS6p+WTgeinhOagvFxyXG5cdFx0XHRcdHRoaXMuY3VycmVudFRhYiA9IDA7XHJcblx0XHRcdH0sXHJcblx0XHRcdFxyXG5cdFx0XHQvLyDojrflj5blvIDlt6XmjInpkq7nmoRjbGFzc1xyXG5cdFx0XHRnZXRTdGFydEJ0bkNsYXNzKGl0ZW0pIHtcclxuXHRcdFx0XHRjb25zdCBpc1NlbGVjdGVkID0gdGhpcy5pc1Nob3dUYWJsZURhdGEubGVuZ3RoID4gMCAmJiB0aGlzLmlzU2hvd1RhYmxlRGF0YVswXS5kYWEwMDEgPT09IGl0ZW0uZGFhMDAxO1xyXG5cdFx0XHRcdGlmIChpc1NlbGVjdGVkKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gJ3N0YXJ0LWJ0biBzdGFydC1idG4tc2VsZWN0ZWQnOyAvLyDlvZPliY3pgInkuK3nmoTlt6XljZXvvIznu7/oibJcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuICdzdGFydC1idG4nO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRcclxuXHRcdFx0Ly8g5Yik5pat5byA5bel5oyJ6ZKu5piv5ZCm56aB55SoXHJcblx0XHRcdGlzU3RhcnRCdG5EaXNhYmxlZChpdGVtKSB7XHJcblx0XHRcdFx0Ly8g5aaC5p6c5bey57uP5pyJ6YCJ5Lit55qE5bel5Y2V77yM5LiU5b2T5YmN6aG55LiN5piv6YCJ5Lit55qE5bel5Y2V77yM5YiZ56aB55SoXHJcblx0XHRcdFx0aWYgKHRoaXMuaXNTaG93VGFibGVEYXRhLmxlbmd0aCA+IDAgJiYgdGhpcy5pc1Nob3dUYWJsZURhdGFbMF0uZGFhMDAxICE9PSBpdGVtLmRhYTAwMSkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fSxcclxuXHRcdFx0XHJcblx0XHRcdC8vIOWIpOaWreaaguWBnOaMiemSruaYr+WQpuemgeeUqFxyXG5cdFx0XHRpc1BhdXNlQnRuRGlzYWJsZWQoaXRlbSkge1xyXG5cdFx0XHRcdC8vIOWmguaenOW3sue7j+aciemAieS4reeahOW3peWNle+8jOS4lOW9k+WJjemhueS4jeaYr+mAieS4reeahOW3peWNle+8jOWImeemgeeUqFxyXG5cdFx0XHRcdGlmICh0aGlzLmlzU2hvd1RhYmxlRGF0YS5sZW5ndGggPiAwICYmIHRoaXMuaXNTaG93VGFibGVEYXRhWzBdLmRhYTAwMSAhPT0gaXRlbS5kYWEwMDEpIHtcclxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQvLyDlpoLmnpzov5jmsqHmnInpgInkuK3ku7vkvZXlt6XljZXvvIzkuZ/npoHnlKjmmoLlgZzmjInpkq5cclxuXHRcdFx0XHRpZiAodGhpcy5pc1Nob3dUYWJsZURhdGEubGVuZ3RoID09PSAwKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRcclxuXHRcdFx0Ly8g6I635Y+W5byA5bel5oyJ6ZKu5paH5pysXHJcblx0XHRcdGdldFN0YXJ0QnRuVGV4dChpdGVtKSB7XHJcblx0XHRcdFx0Y29uc3QgaXNTZWxlY3RlZCA9IHRoaXMuaXNTaG93VGFibGVEYXRhLmxlbmd0aCA+IDAgJiYgdGhpcy5pc1Nob3dUYWJsZURhdGFbMF0uZGFhMDAxID09PSBpdGVtLmRhYTAwMTtcclxuXHRcdFx0XHRpZiAoaXNTZWxlY3RlZCkge1xyXG5cdFx0XHRcdFx0cmV0dXJuICfovazot7PmiqXlt6XnlYzpnaInO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm4gJ+W8gOW3pSc7XHJcblx0XHRcdH0sXHJcblx0XHRcdFxyXG5cdFx0XHQvLyDlpITnkIblvIDlt6VcclxuXHRcdFx0YXN5bmMgaGFuZGxlU3RhcnRXb3JrKGl0ZW0pIHtcclxuXHRcdFx0XHQvLyDliKTmlq3lvZPliY3lt6XljZXmmK/lkKblt7LpgInkuK1cclxuXHRcdFx0XHRjb25zdCBpc1NlbGVjdGVkID0gdGhpcy5pc1Nob3dUYWJsZURhdGEubGVuZ3RoID4gMCAmJiB0aGlzLmlzU2hvd1RhYmxlRGF0YVswXS5kYWEwMDEgPT09IGl0ZW0uZGFhMDAxO1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdGlmIChpc1NlbGVjdGVkKSB7XHJcblx0XHRcdFx0XHQvLyDlpoLmnpzlt7LpgInkuK3vvIzliJnlhYjot7PovazliLDkuLvnlYzpnaLvvIznhLblkI7ot7PovazliLDmiqXlt6XnlYzpnaJcclxuXHRcdFx0XHRcdHRoaXMudG9EZXRhaWwoaXRlbSk7XHJcblx0XHRcdFx0XHQvLyDlu7bov5/ot7PovazliLDmiqXlt6XnlYzpnaJcclxuXHRcdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cdFx0XHRcdFx0XHR0aGlzLmN1cnJlbnRUYWIgPSA0O1xyXG5cdFx0XHRcdFx0fSwgMTAwKTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0Ly8g5aaC5p6c5pyq6YCJ5Lit77yM5YiZ5omn6KGM5byA5bel6YC76L6RXHJcblx0XHRcdFx0XHRsZXQgb3JkZXJTZWxlY3QgPSBbe1xyXG5cdFx0XHRcdFx0XHRvcmRlcklkOiBpdGVtLmlkLFxyXG5cdFx0XHRcdFx0XHRvcmRlck5vOiBpdGVtLmRhYTAwMVxyXG5cdFx0XHRcdFx0fV07XHJcblx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdGxldCBlZGl0RGF0ZSA9IHRoaXMuZm9ybWF0RGF0ZShuZXcgRGF0ZSgpKTtcclxuXHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0dGhpcy4kcG9zdCh7XHJcblx0XHRcdFx0XHRcdHVybDogXCIvTWVzT3JkZXJTZWxlY3QvQWRkXCIsXHJcblx0XHRcdFx0XHRcdGRhdGE6IHtcclxuXHRcdFx0XHRcdFx0XHRtYWNoaW5lTm86IHRoaXMubWFjaGluZU5vLFxyXG5cdFx0XHRcdFx0XHRcdGVkaXREYXRlOiBlZGl0RGF0ZSxcclxuXHRcdFx0XHRcdFx0XHRpdGVtOiBvcmRlclNlbGVjdFxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9KS50aGVuKHJlcyA9PiB7XHJcblx0XHRcdFx0XHRcdGlmIChyZXMuZGF0YS50YkJpbGxMaXN0KSB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5nZXRXb21kYWFJc1Nob3coKTtcclxuXHRcdFx0XHRcdFx0XHR1bmkuc2hvd1RvYXN0KHtcclxuXHRcdFx0XHRcdFx0XHRcdHRpdGxlOiAn5byA5bel5oiQ5YqfJyxcclxuXHRcdFx0XHRcdFx0XHRcdGljb246ICdzdWNjZXNzJyxcclxuXHRcdFx0XHRcdFx0XHRcdGR1cmF0aW9uOiAyMDAwXHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0XHJcblx0XHRcdC8vIOWkhOeQhuaaguWBnO+8iOS9v+eUqOa4heepuumHjemAieeahOmAu+i+ke+8iVxyXG5cdFx0XHRhc3luYyBoYW5kbGVQYXVzZVdvcmsoaXRlbSkge1xyXG5cdFx0XHRcdGlmICghdGhpcy5tYWNoaW5lTm8pIHtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHQvLyDnm7TmjqXnlKggZmxhZyDliKTmlq1cclxuXHRcdFx0XHRpZiAodGhpcy5oYXNCaW5kZWRDdXR0ZXJGbGFnKSB7XHJcblx0XHRcdFx0XHR1bmkuc2hvd1RvYXN0KHtcclxuXHRcdFx0XHRcdFx0dGl0bGU6ICflvZPliY3lt6XljZXlt7Lnu5HlrprliIDlhbfvvIzkuI3og73mmoLlgZwnLFxyXG5cdFx0XHRcdFx0XHRpY29uOiAnZXJyb3InLFxyXG5cdFx0XHRcdFx0XHRkdXJhdGlvbjogMjAwMFxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0bGV0IGVkaXREYXRlID0gdGhpcy5mb3JtYXREYXRlKG5ldyBEYXRlKCkpO1xyXG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWRJbmRleHMgPSBbXTtcclxuXHRcdFx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdHRoaXMuJHBvc3Qoe1xyXG5cdFx0XHRcdFx0dXJsOiBcIi9NZXNPcmRlclNlbGVjdC9SZW1vdmVcIixcclxuXHRcdFx0XHRcdGRhdGE6IHtcclxuXHRcdFx0XHRcdFx0bWFjaGluZU5vOiB0aGlzLm1hY2hpbmVObyxcclxuXHRcdFx0XHRcdFx0ZWRpdERhdGU6IGVkaXREYXRlXHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdH0pLnRoZW4ocmVzID0+IHtcclxuXHRcdFx0XHRcdGlmIChyZXMuZGF0YS50YkJpbGxMaXN0ID4gMCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLmlzU2hvd1RhYmxlRGF0YSA9IFtdO1xyXG5cdFx0XHRcdFx0XHR1bmkuc2hvd1RvYXN0KHtcclxuXHRcdFx0XHRcdFx0XHR0aXRsZTogJ+W3peWNleW3suaaguWBnCcsXHJcblx0XHRcdFx0XHRcdFx0aWNvbjogJ3N1Y2Nlc3MnLFxyXG5cdFx0XHRcdFx0XHRcdGR1cmF0aW9uOiAyMDAwXHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdC8vIOaaguWBnOaIkOWKn+WQju+8jOWIt+aWsOW9k+WJjemhtemdolxyXG5cdFx0XHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnJlZnJlc2goKTtcclxuXHRcdFx0XHRcdFx0fSwgNTAwKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0XHRcclxuXHRcdFx0Ly8g5ZCv5Yqo6Ieq5Yqo5Yi35pawXHJcblx0XHRcdHN0YXJ0QXV0b1JlZnJlc2goKSB7XHJcblx0XHRcdFx0Ly8g5YWI5riF6Zmk546w5pyJ5a6a5pe25ZmoXHJcblx0XHRcdFx0dGhpcy5zdG9wQXV0b1JlZnJlc2goKTtcclxuXHRcdFx0XHQvLyDlj6rlnKjlt6XljZXpgInmi6npobXpnaLlkK/liqjlrprml7bliLfmlrBcclxuXHRcdFx0XHRpZiAodGhpcy5jdXJyZW50VGFiID09PSA3KSB7XHJcblx0XHRcdFx0XHR0aGlzLmF1dG9SZWZyZXNoVGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcblx0XHRcdFx0XHRcdGlmICh0aGlzLmN1cnJlbnRUYWIgPT09IDcpIHtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnJlZnJlc2goKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSwgdGhpcy5hdXRvUmVmcmVzaEludGVydmFsKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblx0XHRcdFx0XHJcblx0XHRcdC8vIOWBnOatouiHquWKqOWIt+aWsFxyXG5cdFx0XHRzdG9wQXV0b1JlZnJlc2goKSB7XHJcblx0XHRcdFx0aWYgKHRoaXMuYXV0b1JlZnJlc2hUaW1lcikge1xyXG5cdFx0XHRcdFx0Y2xlYXJJbnRlcnZhbCh0aGlzLmF1dG9SZWZyZXNoVGltZXIpO1xyXG5cdFx0XHRcdFx0dGhpcy5hdXRvUmVmcmVzaFRpbWVyID0gbnVsbDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblx0XHRjb21wdXRlZDoge31cclxuXHR9O1xyXG48L3NjcmlwdD5cclxuXHJcbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxyXG5cclxuICAgIDpkZWVwKC5jaGVja2JveCksXHJcbiAgICA6ZGVlcCguY2hlY2tib3hfX2lubmVyKSB7XHJcbiAgICAgICAgd2lkdGg6IDYwcHggIWltcG9ydGFudDtcclxuICAgICAgICBoZWlnaHQ6IDYwcHggIWltcG9ydGFudDtcclxuICAgICAgICBtaW4td2lkdGg6IDYwcHggIWltcG9ydGFudDtcclxuICAgICAgICBtaW4taGVpZ2h0OiA2MHB4ICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgcGFkZGluZzogMTZweCAhaW1wb3J0YW50O1xyXG4gICAgICAgIG1hcmdpbi1yaWdodDogMjBweCAhaW1wb3J0YW50O1xyXG4gICAgfVxyXG5cclxuICAgIC5wb3B1cCAubGFyZ2Utc2VsZWN0aW9uLXRhYmxlIHtcclxuICAgICAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xyXG4gICAgICAgIHRhYmxlLWxheW91dDogYXV0byAhaW1wb3J0YW50OyAvLyDorqnooajmoLzoh6rliqjliIbphY3lrr3luqZcclxuICAgIH1cclxuXHJcbiAgICAucm93LXNlbGVjdGVkIHtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTBmM2ZmICFpbXBvcnRhbnQ7XHJcbiAgICB9XHJcblxyXG5cdC5mb250IHtcclxuXHRcdGJhY2tncm91bmQtY29sb3I6ICM2NjY2NjY7XHJcblx0XHRoZWlnaHQ6IDMwcHg7XHJcblx0XHR3aWR0aDogMTAwdnc7XHJcblx0fVxyXG5cclxuXHJcblx0Lyog5LiK6YOo5Yy65Z+f5qC35byP77yM5bemNzAlIOWPszMwJSAqL1xyXG5cdC50b3Atc2VjdGlvbiB7XHJcblx0XHRkaXNwbGF5OiBmbGV4O1xyXG5cdFx0anVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7XHJcblx0XHRtYXJnaW4tYm90dG9tOiAyMHB4O1xyXG5cdFx0cGFkZGluZzogMjBweCAxMHB4O1xyXG5cdFx0ZmxleC1kaXJlY3Rpb246IHJvdztcclxuXHRcdGZsZXgtd3JhcDogd3JhcDtcclxuXHRcdGFsaWduLWNvbnRlbnQ6IGNlbnRlcjtcclxuXHRcdGFsaWduLWl0ZW1zOiBzdHJldGNoO1xyXG5cdFx0Lyog5aKe5Yqg5LiK5LiL55qEcGFkZGluZyAqL1xyXG5cdH1cclxuXHJcblx0LnJpZ2h0LXNpZGUge1xyXG5cdFx0YmFja2dyb3VuZC1jb2xvcjogI2YzZjNmMztcclxuXHRcdHBhZGRpbmc6IDE2cHg7XHJcblx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XHJcblx0XHRib3JkZXItcmFkaXVzOiA4cHg7XHJcblx0XHR3aWR0aDogMjUlO1xyXG5cdFx0Zm9udC1zaXplOiAxNHB4O1xyXG5cdH1cclxuXHJcblx0LmZvcm0tcm93IHtcclxuXHRcdGRpc3BsYXk6IGZsZXg7XHJcblx0XHRqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcblx0XHRtYXJnaW4tYm90dG9tOiAxLjJ2aDtcclxuXHR9XHJcblxyXG5cdC5mb3JtLWl0ZW0ge1xyXG5cdFx0d2lkdGg6IDMwJTtcclxuXHR9XHJcblxyXG5cdC5pbnAge1xyXG5cdFx0d2lkdGg6IDkwJTtcclxuXHRcdHBhZGRpbmc6IDRweDtcclxuXHRcdGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XHJcblx0XHRib3JkZXItcmFkaXVzOiA0cHg7XHJcblx0XHRtYXJnaW4tdG9wOiA0cHg7XHJcblx0fVxyXG5cclxuXHQuc3RhdHVzLWJsb2NrIHtcclxuXHRcdGRpc3BsYXk6IGZsZXg7XHJcblx0XHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG5cdFx0YWxpZ24taXRlbXM6IGNlbnRlcjtcclxuXHR9XHJcblxyXG5cdC5zdGF0dXMtYmxvY2sgcCB7XHJcblx0XHRtYXJnaW46IDhweCAwO1xyXG5cdFx0Zm9udC1zaXplOiAxNnB4O1xyXG5cdFx0Zm9udC13ZWlnaHQ6IGJvbGQ7XHJcblx0fVxyXG5cclxuXHQubGVmdC1zaWRlIHtcclxuXHRcdHdpZHRoOiA2NSU7XHJcblx0fVxyXG5cclxuXHQudGFibGUtcm93IHtcclxuXHRcdGRpc3BsYXk6IGZsZXg7XHJcblx0XHRqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcblx0XHRwYWRkaW5nOiA4cHg7XHJcblx0XHRib3JkZXI6IDFweCBzb2xpZCAjMDAwMDAwO1xyXG5cdFx0Zm9udC1zaXplOiAyMHB4O1xyXG5cdFx0Zm9udC13ZWlnaHQ6IGJvbGQ7XHJcblx0fVxyXG5cclxuXHQudGFibGUtY2VsbCB7XHJcblx0XHR3aWR0aDogNTAlO1xyXG5cdFx0dGV4dC1hbGlnbjogY2VudGVyO1xyXG5cdH1cclxuXHJcblx0Lyog5Y2h54mH5qC35byPICovXHJcbiAgICAuY2FyZCB7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcclxuICAgICAgICBib3JkZXItcmFkaXVzOiAxMHB4O1xyXG4gICAgICAgIGJveC1zaGFkb3c6IDAgNHB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMSk7XHJcbiAgICAgICAgcGFkZGluZzogMDsgLy8g5Y676Zmk5aSa5L2Z5YaF6L656LedXHJcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgICAgIG1hcmdpbi1ib3R0b206IDI1cHg7XHJcbiAgICAgICAgd2lkdGg6IDEwMCU7IC8vIOWhq+a7oeeItuWuueWZqFxyXG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICB9XHJcblxyXG4vKiAgICAvLy5jb250ZW50IHtcclxuICAgIC8vICAgIGZsZXg6IDE7XHJcbiAgICAvLyAgICBwYWRkaW5nOiAxdmggMXZ3OyAvLyDkv53or4HmlbTkvZPmnInlt6blj7PnlZnnmb1cclxuICAgIC8vICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xyXG4gICAgLy8gICAgZm9udC1zaXplOiAxLjV2dztcclxuICAgIC8vfSovXHJcblxyXG5cdC8qIOWNoeeJh+agh+mimOWcqOW3puS4iuinkiAqL1xyXG5cdC5jYXJkLWhlYWRlciB7XHJcblx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XHJcblx0XHR0b3A6IC0xMHB4O1xyXG5cdFx0bGVmdDogMTZweDtcclxuXHRcdGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XHJcblx0XHRwYWRkaW5nOiAycHggOHB4O1xyXG5cdFx0Ym9yZGVyLXJhZGl1czogNHB4O1xyXG5cdFx0Zm9udC13ZWlnaHQ6IGJvbGQ7XHJcblx0fVxyXG5cclxuXHQvKiDkuK3pg6jljLrln5/vvIzmr4/ooYwz5Liq5a2X5q61ICovXHJcblx0LnN0YXR1cy1yb3csXHJcblx0LmNoZWNrLXJvdyB7XHJcblx0XHRkaXNwbGF5OiBmbGV4O1xyXG5cdFx0anVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xyXG5cdFx0bWFyZ2luLWJvdHRvbTogMTBweDtcclxuXHR9XHJcblxyXG5cdC5zdGF0dXMtcm93IGxhYmVsLFxyXG5cdC5jaGVjay1yb3cgbGFiZWwge1xyXG5cdFx0d2lkdGg6IDMwJTtcclxuXHRcdHBhZGRpbmctcmlnaHQ6IDEwcHg7XHJcblx0XHR0ZXh0LWFsaWduOiByaWdodDtcclxuXHR9XHJcblxyXG5cdC5zdGF0dXMtcm93IGlucHV0LFxyXG5cdC5jaGVjay1yb3cgaW5wdXQge1xyXG5cdFx0d2lkdGg6IDY1JTtcclxuXHR9XHJcblxyXG5cdC8v5Z+656GA5qC35byPXHJcblx0LmNvbnRhaW5lciB7XHJcblx0XHRkaXNwbGF5OiBmbGV4O1xyXG5cdFx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuXHR9XHJcblxyXG5cdC50YWItYmFyIHtcclxuXHRcdGRpc3BsYXk6IGZsZXg7XHJcblx0XHRqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDtcclxuXHRcdGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7XHJcblx0XHRwYWRkaW5nOiAxdmg7XHJcblx0XHRwYWRkaW5nLXRvcDogMzBweDtcclxuXHRcdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjY2NjO1xyXG5cdH1cclxuXHJcblx0LnRvcC1yaWdodCB7XHJcblx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XHJcblx0XHR0b3A6IC0xNXB4O1xyXG5cdFx0cmlnaHQ6IDUwcHg7XHJcblx0XHR6LWluZGV4OiAxMDAwO1xyXG5cdH1cclxuXHJcblx0LnJlZnJlc2gtYnRuIHtcclxuXHRcdHBhZGRpbmc6IDEwcHg7XHJcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjMDBBMkU5O1xyXG5cdFx0Y29sb3I6IHdoaXRlO1xyXG5cdFx0Ym9yZGVyOiBub25lO1xyXG5cdFx0Zm9udC1zaXplOiAyMnB4O1xyXG5cdFx0Ym9yZGVyLXJhZGl1czogNXB4O1xyXG5cdH1cclxuXHJcblx0LnRhYi1pdGVtIHtcclxuXHRcdGZsZXg6IDE7XHJcblx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XHJcblx0XHRtYXJnaW4tcmlnaHQ6IDAuNXZ3O1xyXG5cdFx0cGFkZGluZzogMXZoO1xyXG5cdFx0Ym9yZGVyLXJhZGl1czogMC41dnc7XHJcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xyXG5cdFx0Y29sb3I6ICMwMDdhZmY7XHJcblx0XHRjdXJzb3I6IHBvaW50ZXI7XHJcblx0XHRmb250LXNpemU6IDIycHg7XHJcblx0XHRmb250LXdlaWdodDogNTAwO1xyXG5cdFx0dHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjNzLCBjb2xvciAwLjNzO1xyXG5cdFx0Ym94LXNoYWRvdzogMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcclxuXHR9XHJcblxyXG5cdC50YWItaXRlbS5hY3RpdmUge1xyXG5cdFx0YmFja2dyb3VuZC1jb2xvcjogIzAwN2FmZjtcclxuXHRcdGNvbG9yOiAjZmZmO1xyXG5cdFx0Zm9udC13ZWlnaHQ6IDYwMDtcclxuXHRcdGJveC1zaGFkb3c6IDAgNHB4IDhweCByZ2JhKDAsIDEyMiwgMjU1LCAwLjMpO1xyXG5cdH1cclxuXHJcblx0LmNvbnRlbnQge1xyXG5cdFx0ZmxleDogMTtcclxuXHRcdHBhZGRpbmc6IDF2aCAxdnc7XHJcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcclxuXHRcdGZvbnQtc2l6ZTogMTZweDtcclxuXHR9XHJcblxyXG4gICAgLnBpY2tlciB7XHJcbiAgICAgICAgZmxvYXQ6IGxlZnQ7XHJcbiAgICAgICAgbWFyZ2luLXRvcDogN3B4O1xyXG4gICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4O1xyXG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgICAgICBmb250LXNpemU6IDMycHggIWltcG9ydGFudDsgLy8g5by65Yi25aSn5a2X5L2T77yM6YCC6YWN5L2O5a+G5bqmXHJcbiAgICAgICAgbWluLWhlaWdodDogNjBweDsgLy8g6K6p6YCJ5oup5qGG6auY5bqm5Lmf5Y+Y5aSnXHJcbiAgICAgICAgbGluZS1oZWlnaHQ6IDYwcHg7XHJcbiAgICAgICAgcGFkZGluZzogNS41cHggMXB4O1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7IC8vIOi/memHjOaUueS4uuiTneiJslxyXG4gICAgICAgIGJvcmRlcjogMnB4IHNvbGlkICMwMDdhZmY7IC8vIOi+ueahhuS5n+aUueS4uuiTneiJslxyXG4gICAgICAgIGNvbG9yOiAjMDA3YWZmOyAvLyDlrZfkvZPpopzoibLmlLnkuLrnmb3oibLvvIzkv53or4Hlj6/or7vmgKdcclxuICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7XHJcbiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjJzO1xyXG4gICAgfVxyXG5cclxuICAgIC50aCB7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XHJcbiAgICAgICAgY29sb3I6IGJsYWNrO1xyXG4gICAgICAgIGhlaWdodDogNnZoO1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMjJweDtcclxuICAgICAgICBmb250LXdlaWdodDogNjAwO1xyXG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICM1NTU7XHJcbiAgICAgICAgcGFkZGluZzogNnB4IDhweDtcclxuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcclxuICAgICAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8qIOS4u+ihqOagvOi+ueahhuagt+W8jyAqL1xyXG4gICAgdW5pLXRhYmxlIHtcclxuICAgICAgICBib3JkZXI6IDJweCBzb2xpZCAjZDAwICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZSAhaW1wb3J0YW50O1xyXG4gICAgICAgIGJvcmRlci1zcGFjaW5nOiAwICFpbXBvcnRhbnQ7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC51bmktdGgsIC51bmktdGQge1xyXG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICM1NTUgIWltcG9ydGFudDtcclxuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmUgIWltcG9ydGFudDtcclxuICAgICAgICB6LWluZGV4OiAxICFpbXBvcnRhbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLmZvcm0taW5wdXQge1xyXG4gICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcclxuICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xyXG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjQ7XHJcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XHJcbiAgICAgICAgbWF4LXdpZHRoOiAxODBweDtcclxuICAgICAgICBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkO1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMjJweDtcclxuICAgICAgICBwYWRkaW5nOiA2cHggOHB4O1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyAvKiDorr7nva7og4zmma/kuLrpgI/mmI4gKi9cclxuICAgIH1cclxuXHJcblx0Lyog5bqV6YOo5L+d5a2Y5ZKM5Y+W5raI5oyJ6ZKuICovXHJcbiAgICAuYm90dG9tLXNlY3Rpb24ge1xyXG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7XHJcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMnZoO1xyXG4gICAgICAgIHBhZGRpbmc6IDJ2aCAxdnc7XHJcbiAgICAgICAgbWFyZ2luLXRvcDogMjBweDsgLy8g5YeP5bCP6aG26YOo6L656Led77yM56Gu5L+d5oyJ6ZKu5Zyo5by556qX5YaF5q2j56Gu5pi+56S6XHJcbiAgICB9XHJcblxyXG5cdC5zYXZlLWJ0bixcclxuXHQuY2FuY2VsLWJ0biB7XHJcblx0XHR3aWR0aDogNDglO1xyXG5cdFx0cGFkZGluZzogMS41dmg7XHJcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjMDBhMmU5O1xyXG5cdFx0Y29sb3I6IHdoaXRlO1xyXG5cdFx0Zm9udC1zaXplOiAyMnB4O1xyXG5cdFx0Zm9udC13ZWlnaHQ6IDUwMDtcclxuXHRcdGJvcmRlcjogbm9uZTtcclxuXHRcdHRleHQtYWxpZ246IGNlbnRlcjtcclxuXHRcdGN1cnNvcjogcG9pbnRlcjtcclxuXHRcdGJvcmRlci1yYWRpdXM6IDRweDtcclxuXHRcdGJveC1zaGFkb3c6IDAgMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMSk7XHJcblx0XHR0cmFuc2l0aW9uOiBhbGwgMC4zcztcclxuXHR9XHJcblx0XHJcblx0LmNhbmNlbC1idG4ge1xyXG5cdFx0YmFja2dyb3VuZC1jb2xvcjogIzAwQTJFOTtcclxuXHRcdGNvbG9yOiB3aGl0ZTtcclxuXHR9XHJcblx0XHJcblx0Lyog5pON5L2c5oyJ6ZKu5Yy65Z+fICovXHJcblx0Lm9wZXJhdGlvbi1idG5zIHtcclxuXHRcdGRpc3BsYXk6IGZsZXg7XHJcblx0XHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuXHRcdGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcblx0XHRnYXA6IDEwcHg7XHJcblx0fVxyXG5cdFxyXG5cdC8qIOW8gOW3peaMiemSriAqL1xyXG5cdC5zdGFydC1idG4ge1xyXG5cdFx0cGFkZGluZzogOHB4IDIwcHg7XHJcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjMDBBMkU5O1xyXG5cdFx0Y29sb3I6IHdoaXRlO1xyXG5cdFx0Zm9udC1zaXplOiAxOHB4O1xyXG5cdFx0Zm9udC13ZWlnaHQ6IDUwMDtcclxuXHRcdGJvcmRlcjogbm9uZTtcclxuXHRcdGJvcmRlci1yYWRpdXM6IDRweDtcclxuXHRcdGN1cnNvcjogcG9pbnRlcjtcclxuXHRcdHRyYW5zaXRpb246IGFsbCAwLjNzO1xyXG5cdFx0Ym94LXNoYWRvdzogMCAycHggNHB4IHJnYmEoMCwgMTYyLCAyMzMsIDAuMik7XHJcblx0fVxyXG5cdFxyXG5cdC5zdGFydC1idG46aG92ZXI6bm90KDpkaXNhYmxlZCkge1xyXG5cdFx0YmFja2dyb3VuZC1jb2xvcjogIzAwOTJkNjtcclxuXHRcdGJveC1zaGFkb3c6IDAgNHB4IDhweCByZ2JhKDAsIDE2MiwgMjMzLCAwLjMpO1xyXG5cdFx0dHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpO1xyXG5cdH1cclxuXHRcclxuXHQvKiDlvIDlt6XmjInpkq4gLSDpgInkuK3nirbmgIHvvIjnu7/oibLvvIkgKi9cclxuXHQuc3RhcnQtYnRuLXNlbGVjdGVkIHtcclxuXHRcdGJhY2tncm91bmQtY29sb3I6ICM1MmM0MWEgIWltcG9ydGFudDtcclxuXHRcdGJveC1zaGFkb3c6IDAgMnB4IDRweCByZ2JhKDgyLCAxOTYsIDI2LCAwLjMpICFpbXBvcnRhbnQ7XHJcblx0fVxyXG5cdFxyXG5cdC5zdGFydC1idG4tc2VsZWN0ZWQ6aG92ZXI6bm90KDpkaXNhYmxlZCkge1xyXG5cdFx0YmFja2dyb3VuZC1jb2xvcjogIzQ5YjAxNSAhaW1wb3J0YW50O1xyXG5cdFx0Ym94LXNoYWRvdzogMCA0cHggOHB4IHJnYmEoODIsIDE5NiwgMjYsIDAuNCkgIWltcG9ydGFudDtcclxuXHR9XHJcblx0XHJcblx0Lyog5pqC5YGc5oyJ6ZKuICovXHJcblx0LnBhdXNlLWJ0biB7XHJcblx0XHRwYWRkaW5nOiA4cHggMjBweDtcclxuXHRcdGJhY2tncm91bmQtY29sb3I6ICNmZjRkNGY7XHJcblx0XHRjb2xvcjogd2hpdGU7XHJcblx0XHRmb250LXNpemU6IDE4cHg7XHJcblx0XHRmb250LXdlaWdodDogNTAwO1xyXG5cdFx0Ym9yZGVyOiBub25lO1xyXG5cdFx0Ym9yZGVyLXJhZGl1czogNHB4O1xyXG5cdFx0Y3Vyc29yOiBwb2ludGVyO1xyXG5cdFx0dHJhbnNpdGlvbjogYWxsIDAuM3M7XHJcblx0XHRib3gtc2hhZG93OiAwIDJweCA0cHggcmdiYSgyNTUsIDc3LCA3OSwgMC4yKTtcclxuXHR9XHJcblx0XHJcblx0LnBhdXNlLWJ0bjpob3Zlcjpub3QoOmRpc2FibGVkKSB7XHJcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZmYzMzM2O1xyXG5cdFx0Ym94LXNoYWRvdzogMCA0cHggOHB4IHJnYmEoMjU1LCA3NywgNzksIDAuMyk7XHJcblx0XHR0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7XHJcblx0fVxyXG5cdFxyXG5cdC8qIOaMiemSruemgeeUqOeKtuaAgSAqL1xyXG5cdC5zdGFydC1idG46ZGlzYWJsZWQsXHJcblx0LnBhdXNlLWJ0bjpkaXNhYmxlZCB7XHJcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZDlkOWQ5ICFpbXBvcnRhbnQ7XHJcblx0XHRjb2xvcjogIzk5OSAhaW1wb3J0YW50O1xyXG5cdFx0Y3Vyc29yOiBub3QtYWxsb3dlZCAhaW1wb3J0YW50O1xyXG5cdFx0Ym94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xyXG5cdFx0b3BhY2l0eTogMC42O1xyXG5cdH1cclxuXHJcbiAgICAub3ZlcmxheSB7XHJcbiAgICAgICAgcG9zaXRpb246IGZpeGVkO1xyXG4gICAgICAgIHRvcDogMDtcclxuICAgICAgICBsZWZ0OiAwO1xyXG4gICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgIGhlaWdodDogMTAwJTtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNSk7XHJcbiAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgICAgIHotaW5kZXg6IDIwMDA7IC8vIOWinuWKoHotaW5kZXjvvIznoa7kv53lvLnnqpflnKjliLfmlrDmjInpkq7kuYvkuIpcclxuICAgIH1cclxuXHJcbiAgICAucG9wdXAge1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XHJcbiAgICAgICAgcGFkZGluZzogMnZoIDJ2aCA4dmggMnZoOyAvLyDlop7liqDlupXpg6jlhoXovrnot53vvIzkuLrmjInpkq7nlZnlh7rnqbrpl7RcclxuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjY2NjO1xyXG4gICAgICAgIGJveC1zaGFkb3c6IDAgMCAxMHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcclxuICAgICAgICB3aWR0aDogOTAuMTZ2dzsgLy8g5Y6f5p2l55qEOTh2d+e8qeWwjzglICg5OHZ3ICogMC45MilcclxuICAgICAgICBoZWlnaHQ6IDY4dmg7IC8vIOWOn+adpeeahDg1dmjnvKnlsI8yMCUgKDg1dmggKiAwLjgpXHJcbiAgICAgICAgZm9udC1zaXplOiAxLjZ2dztcclxuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OyAvLyDnoa7kv53lhoXovrnot53kuI3lvbHlk43mgLvlsLrlr7hcclxuICAgIH1cclxuXHJcblx0LnByaW50LWJ0biB7XHJcblx0XHRmbG9hdDogbGVmdDtcclxuXHRcdG1hcmdpbi10b3A6IDRweDtcclxuXHRcdG1hcmdpbi1sZWZ0OiAxMHB4O1xyXG5cdFx0dGV4dC1hbGlnbjogY2VudGVyO1xyXG5cdFx0Zm9udC1zaXplOiAyMnB4O1xyXG5cdFx0Y29sb3I6IHdoaXRlO1xyXG5cdFx0YmFja2dyb3VuZC1jb2xvcjogIzAwQTJFOTtcclxuXHRcdHBhZGRpbmc6IDBweCA5MHB4O1xyXG5cdFx0Ym9yZGVyOiAycHggc29saWQgIzAwQTJFOTtcclxuXHRcdGN1cnNvcjogcG9pbnRlcjtcclxuXHRcdGJvcmRlci1yYWRpdXM6IDAuOHZ3O1xyXG5cdH1cclxuXHJcbiAgICAubWFjaGluZS1uYW1lLWJveCB7XHJcbiAgICAgICAgYm9yZGVyOiAycHggc29saWQgIzAwN2FmZjsgLyog6JOd6Imy6L655qGGICovXHJcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xyXG4gICAgICAgIGZvbnQtZmFtaWx5OiBmYW50YXN5O1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMzNweDtcclxuICAgICAgICBtYXJnaW4tdG9wOiAyMHB4O1xyXG4gICAgICAgIHBhZGRpbmc6IDE1cHggMjhweDsgLyog5LiK5LiLMjBweO+8jOW3puWPszQ4cHjvvIzlop7liqDlhoXovrnot50gKi9cclxuICAgICAgICB3aWR0aDogMzAwcHg7IC8qIOabtOWuve+8jOS/neivgeWGheWuueWujOaVtOaYvuekuiAqL1xyXG4gICAgICAgIGhlaWdodDogNzBweDsgLyog5aKe5Yqg6auY5bqmICovXHJcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmO1xyXG4gICAgICAgIGNvbG9yOiAjMjIyO1xyXG4gICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG4gICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XHJcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICB9XHJcblxyXG4vKiAgICAvL3YtZGVlcCAuY2hlY2tib3gge1xyXG4gICAgLy8gICAgcGFkZGluZzogMTAgMTBweDtcclxuICAgIC8vICAgIHdpZHRoOiAyNnB4O1xyXG4gICAgLy8gICAgcGFkZGluZy1sZWZ0OiAxMnB4O1xyXG4gICAgLy8gICAgZGlzcGxheTogdGFibGUtY2VsbDtcclxuICAgIC8vICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XHJcbiAgICAvLyAgICBjb2xvcjogIzMzMztcclxuICAgIC8vICAgIGZvbnQtd2VpZ2h0OiA1MDA7XHJcbiAgICAvLyAgICBib3JkZXItYm90dG9tOiAxcHggI2ViZWVmNSBzb2xpZDtcclxuICAgIC8vICAgIGZvbnQtc2l6ZTogMTRweDtcclxuICAgIC8vfSovXHJcblxyXG4gICAgLnBvcHVwIC5jYXJkIHtcclxuICAgICAgICBtYXJnaW4tYm90dG9tOiA0MHB4ICFpbXBvcnRhbnQ7IC8vIOWOn+adpTI1MHB477yM5pS55Li6NDBweO+8jOepuueZveaYjuaYvuWHj+WwkVxyXG4gICAgfVxyXG5cclxuXHRAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxOTIwcHgpIHtcclxuXHRcdC50YWItaXRlbSB7XHJcblx0XHRcdGZvbnQtc2l6ZTogMjJweDtcclxuXHRcdH1cclxuXHJcblx0XHQuY29udGVudCB7XHJcblx0XHRcdHBhZGRpbmc6IDF2dztcclxuXHRcdFx0Zm9udC1zaXplOiAyMnB4O1xyXG5cdFx0fVxyXG5cclxuXHRcdC5mb3JtLWlucHV0IHtcclxuXHRcdFx0Zm9udC1zaXplOiAyMnB4O1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcbiAgICAudW5pLXRkLFxyXG4gICAgdGQge1xyXG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3JtYWwgIWltcG9ydGFudDsgLy8g5YWB6K646Ieq5Yqo5o2i6KGMXHJcbiAgICAgICAgd29yZC1icmVhazogYnJlYWstYWxsICFpbXBvcnRhbnQ7IC8vIOWNleivjS/kuK3mlofpg73og73mlq3ooYxcclxuICAgICAgICBsaW5lLWhlaWdodDogMS40OyAvLyDooYzpq5jpgILlvZPvvIzkvr/kuo7lpJrooYzmmL7npLpcclxuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IC8vIOWxheS4reaYvuekuu+8iOWmgumcgOW3puWvuem9kOWPr+aUueS4uiBsZWZ077yJXHJcbiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsgLy8g5Z6C55u05bGF5LitXHJcbiAgICAgICAgbWF4LXdpZHRoOiAxODBweDsgLy8g5L+d5oyB5Y2V5YWD5qC85pyA5aSn5a695bqmXHJcbiAgICAgICAgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsgLy8g5YW85a655oCn5pu05aW9XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IC8qIOiuvue9ruiDjOaZr+S4uumAj+aYjiAqL1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOW8ueeql+WGheihqOagvOagt+W8j+S4jueUn+S6p+aKpeW3pemhtemdouWOhuWPsuaKpeW3peiusOW9leihqOagvOS4gOiHtFxyXG4gICAgLnBvcHVwIC5sYXJnZS1zZWxlY3Rpb24tdGFibGUgLnVuaS10aCxcclxuICAgIC5wb3B1cCAubGFyZ2Utc2VsZWN0aW9uLXRhYmxlIC51bmktdGQge1xyXG4gICAgICAgIHBhZGRpbmc6IDZweCA4cHg7XHJcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7XHJcbiAgICAgICAgd29yZC1icmVhazogYnJlYWstYWxsO1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMjJweDtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgLyog6K6+572u6IOM5pmv5Li66YCP5piOICovXHJcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzU1NSAhaW1wb3J0YW50O1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAucG9wdXAgLmxhcmdlLXNlbGVjdGlvbi10YWJsZSAudW5pLXRoIHtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcclxuICAgICAgICBjb2xvcjogYmxhY2s7XHJcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcclxuICAgICAgICBmb250LXNpemU6IDIycHg7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8qIOW8ueeql+ihqOagvOWkluahhue6vyAqL1xyXG4gICAgLnBvcHVwIC5sYXJnZS1zZWxlY3Rpb24tdGFibGUge1xyXG4gICAgICAgIGJvcmRlcjogMnB4IHNvbGlkICNkMDAgIWltcG9ydGFudDtcclxuICAgICAgICBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDAgIWltcG9ydGFudDtcclxuICAgIH1cclxuXHJcbiAgICAuc2VsZWN0LWJ0biB7XHJcbiAgICAgICAgd2lkdGg6IDE1MHB4OyAvLyDljp/mnaXnmoQ3MCUgKDE4MHB4ICogMC43KVxyXG4gICAgICAgIGhlaWdodDogNzVweDsgLy8g5Y6f5p2l55qENjUlICg4MHB4ICogMC42NSlcclxuICAgICAgICBmb250LXNpemU6IDIycHg7IC8vIOWtl+S9k+S5n+eVpeWkp1xyXG4gICAgICAgIC8vZm9udC13ZWlnaHQ6IDIwMDtcclxuICAgICAgICBib3JkZXItcmFkaXVzOiAxMHB4O1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMwMEEyRTk7XHJcbiAgICAgICAgY29sb3I6IHdoaXRlO1xyXG4gICAgICAgIGJvcmRlcjogMnB4IHNvbGlkICMwMEEyRTk7XHJcbiAgICAgICAgbWFyZ2luOiAwIGF1dG87XHJcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgICAgYm94LXNoYWRvdzogMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcclxuICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcztcclxuICAgIH1cclxuXHJcbiAgICAudG9wLXNlY3Rpb24ge1xyXG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDtcclxuICAgICAgICBwYWRkaW5nOiAyMHB4IDEwcHg7XHJcbiAgICB9XHJcblxyXG4gICAgLmZvcm0tcm93LmFsaWduLXJvdyB7XHJcbiAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcclxuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICB9XHJcblxyXG4gICAgLm1hY2hpbmUtbmFtZS1ib3gge1xyXG4gICAgICAgIGZsZXg6IDEgMSA0NSU7XHJcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAyMHB4O1xyXG4gICAgfVxyXG5cclxuICAgIC5mb3JtLWdyb3VwIHtcclxuICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgICAgZmxleDogMSAxIDQ1JTtcclxuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLm9yZGVyLWxhYmVsIHtcclxuICAgICAgICBmb250LWZhbWlseTogZmFudGFzeTtcclxuICAgICAgICBmb250LXNpemU6IDIycHg7XHJcbiAgICAgICAgbWFyZ2luLXRvcDogMjBweDtcclxuICAgICAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7XHJcbiAgICAgICAgZmxvYXQ6IG5vbmU7XHJcbiAgICB9XHJcblxyXG4gICAgLnByaW50LWJ0biB7XHJcbiAgICAgICAgbWFyZ2luLXRvcDogMjBweDtcclxuICAgIH1cclxuXHJcbiAgICAudG9wLXJpZ2h0IHtcclxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgICAgdG9wOiAtMzBweDsgLy8g5b6A5LiK56e7XHJcbiAgICAgICAgcmlnaHQ6IDA7XHJcbiAgICAgICAgei1pbmRleDogMTAwMDtcclxuICAgIH1cclxuXHJcbi8qIOaUvuWkp+ihqOWktOWSjOihqOagvOWGheWuueWtl+S9kyAqL1xyXG4gICAgLnRoLFxyXG4gICAgLnVuaS10aCxcclxuICAgIHRoIHtcclxuICAgICAgICBmb250LXNpemU6IDIycHggIWltcG9ydGFudDtcclxuICAgICAgICBjb2xvcjogYmxhY2sgIWltcG9ydGFudDtcclxuICAgICAgICBmb250LXdlaWdodDogNjAwO1xyXG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAxcHg7XHJcbiAgICB9XHJcblxyXG4gICAgLnBvcHVwIC5sYXJnZS1zZWxlY3Rpb24tdGFibGUgLnRoLFxyXG4gICAgLnBvcHVwIC5sYXJnZS1zZWxlY3Rpb24tdGFibGUgLnVuaS10aCxcclxuICAgIC5wb3B1cCAubGFyZ2Utc2VsZWN0aW9uLXRhYmxlIHRoIHtcclxuICAgICAgICBmb250LXNpemU6IDIycHggIWltcG9ydGFudDtcclxuICAgICAgICBjb2xvcjogYmxhY2sgIWltcG9ydGFudDtcclxuICAgIH1cclxuXHJcblx0Lyog6ZKI5a+5MTI4MHg4MDDnmoTlubPmnb/kvb/nlKjlqpLkvZPmn6Xor6Lov5vooYzpgILphY0gKi9cclxuXHRAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMjgwcHgpIGFuZCAobWF4LXdpZHRoOiAxOTIwcHgpIHtcclxuXHRcdC5yaWdodC1zaWRlIHtcclxuXHRcdFx0d2lkdGg6IDMwJTtcclxuXHRcdH1cclxuXHJcblx0XHQuc2F2ZS1idG4sXHJcblx0XHQuY2FuY2VsLWJ0biB7XHJcblx0XHRcdGZvbnQtc2l6ZTogMTZweDtcclxuXHRcdH1cclxuXHJcblx0XHQuaW5wIHtcclxuXHRcdFx0d2lkdGg6IDg1JTtcclxuXHRcdFx0Zm9udC1zaXplOiAxNnB4O1xyXG5cdFx0fVxyXG5cclxuXHRcdC5zdGF0dXMtYmxvY2sgcCB7XHJcblx0XHRcdGZvbnQtc2l6ZTogMTZweDtcclxuXHRcdH1cclxuXHJcblx0XHQudW5pLXRyLFxyXG5cdFx0LnVuaS10ZCB7XHJcblx0XHRcdGZvbnQtc2l6ZTogMjJweDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG48L3N0eWxlPlxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///52\n"); |
| | | eval("/* WEBPACK VAR INJECTION */(function(__f__) {\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ 2);\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ 3));\nvar _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ 9));\nvar _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ 6));\nvar _WorkOrderStatus = _interopRequireDefault(__webpack_require__(/*! ../components/WorkOrderStatus.vue */ 53));\nvar _uniTable = _interopRequireDefault(__webpack_require__(/*! ../uni_modules/uni-table/components/uni-table/uni-table.vue */ 26));\nvar _mold = _interopRequireDefault(__webpack_require__(/*! ../components/mold.vue */ 58));\nvar _machine = _interopRequireDefault(__webpack_require__(/*! ../components/machine.vue */ 63));\nvar _WorkOrderPrint = _interopRequireDefault(__webpack_require__(/*! ../components/WorkOrderPrint.vue */ 68));\nvar _WorkOrder = _interopRequireDefault(__webpack_require__(/*! ../components/WorkOrder.vue */ 74));\nvar _Technology = _interopRequireDefault(__webpack_require__(/*! ../components/Technology.vue */ 79));\nvar _PDFShow = _interopRequireDefault(__webpack_require__(/*! ../components/PDFShow.vue */ 84));\nvar _PrintInit = _interopRequireDefault(__webpack_require__(/*! ../components/PrintInit.vue */ 89));\nvar _PrintTest = _interopRequireDefault(__webpack_require__(/*! ../components/PrintTest.vue */ 94));\nvar _EquipmentInspection = _interopRequireDefault(__webpack_require__(/*! ../components/EquipmentInspection.vue */ 99));\nvar _moldRecord = _interopRequireDefault(__webpack_require__(/*! ../pages/moldRecord.vue */ 115));\nvar _methods;\nvar _default = {\n components: {\n Technology: _Technology.default,\n WorkOrder: _WorkOrder.default,\n WorkOrderPrint: _WorkOrderPrint.default,\n Machine: _machine.default,\n Mold: _mold.default,\n UniTable: _uniTable.default,\n WorkOrderStatus: _WorkOrderStatus.default,\n PDFShow: _PDFShow.default,\n PrintInit: _PrintInit.default,\n PrintTest: _PrintTest.default,\n EquipmentInspection: _EquipmentInspection.default,\n MoldRecord: _moldRecord.default\n },\n data: function data() {\n var _ref;\n return _ref = {\n orderStatus: '',\n // 默认全部\n currentTab: 7,\n productCode: '',\n // 产品编码\n productSpec: '',\n // 产品规格\n\n machineList: [],\n machine: [],\n engineeringNoList: [],\n engineeringNoMapList: [],\n engineeringNo: '',\n machineNo: '',\n machineName: '',\n tableData: [],\n isShowTableData: []\n }, (0, _defineProperty2.default)(_ref, \"orderStatus\", '开工'), (0, _defineProperty2.default)(_ref, \"selectedOrder\", ''), (0, _defineProperty2.default)(_ref, \"orderId\", 0), (0, _defineProperty2.default)(_ref, \"selectedIndexs\", []), (0, _defineProperty2.default)(_ref, \"isShow\", false), (0, _defineProperty2.default)(_ref, \"autoRedirectTimer\", null), (0, _defineProperty2.default)(_ref, \"autoRedirectTime\", 5 * 60 * 1000), (0, _defineProperty2.default)(_ref, \"autoRefreshTimer\", null), (0, _defineProperty2.default)(_ref, \"autoRefreshInterval\", 60 * 1000), _ref;\n },\n created: function created() {\n //调试使用的代码\n // this.machineNo = uni.getStorageSync('machineNo');\n // this.machineName = uni.getStorageSync('machineName');\n //\n // if (this.machineNo) {\n // this.getWomdaaIsShow();\n // }\n\n uni.clearStorageSync();\n this.checkForUpdate();\n\n //工控机使用的代码\n this.getPrintInfo();\n },\n onLoad: function onLoad(options) {\n this.getMachineList();\n },\n onShow: function onShow() {\n this.refresh();\n this.resetAutoRedirectTimer();\n // 如果在工单选择页面,启动定时刷新\n if (this.currentTab === 7) {\n this.startAutoRefresh();\n }\n },\n onHide: function onHide() {\n // 页面隐藏时清除定时器\n this.stopAutoRefresh();\n },\n methods: (_methods = {\n onRowClick: function onRowClick(index) {\n this.selectedIndexs = [index]; // 单选\n // 手动触发 selectionChange 以同步复选框\n this.selectionChange({\n detail: {\n index: index\n }\n });\n // 重置自动跳转计时器\n this.resetAutoRedirectTimer();\n },\n // 重置自动跳转计时器\n resetAutoRedirectTimer: function resetAutoRedirectTimer() {\n var _this = this;\n // 清除现有的定时器\n if (this.autoRedirectTimer) {\n clearTimeout(this.autoRedirectTimer);\n this.autoRedirectTimer = null;\n }\n\n // 除了主页(0)、工单选择页(7)、生产报工页(4)之外的页面才设置自动跳转\n if (this.currentTab !== 0 && this.currentTab !== 7 && this.currentTab !== 4) {\n this.autoRedirectTimer = setTimeout(function () {\n // 跳转回主页\n _this.currentTab = 0;\n // 显示提示信息\n uni.showToast({\n title: '页面超时,自动返回主页',\n icon: 'none',\n duration: 2000\n });\n }, this.autoRedirectTime);\n }\n },\n checkForUpdate: function checkForUpdate() {\n var _this2 = this;\n this.$post({\n url: \"/DevMachine/getAppUpgradeInfo\",\n data: {}\n }).then(function (res) {\n var newVersion = res.data.version;\n var currentVersion = uni.getSystemInfoSync(); // 获取当前 APK 版本号\n\n if (newVersion > currentVersion.appVersion) {\n uni.showModal({\n title: \"发现新版本\",\n content: \"是否下载最新版本?\",\n success: function success(modalRes) {\n if (modalRes.confirm) {\n _this2.downloadNewApk(res.data.apkUrl);\n }\n }\n });\n //this.downloadNewApk(res.data.apkUrl);\n _this2.updateChecked = true; // 标记更新已检查过\n // // 如果有新版本,开始下载\n //download(res.data.apkUrl);\n }\n });\n },\n downloadNewApk: function downloadNewApk(apkUrl) {\n uni.showToast({\n title: \"开始下载更新...\",\n icon: \"none\",\n duration: 2000\n });\n uni.downloadFile({\n url: apkUrl,\n success: function success(res) {\n if (res.statusCode === 200) {\n plus.runtime.install(res.tempFilePath, {\n force: true\n }, function () {\n __f__(\"log\", \"安装成功,重启应用\", \" at pages/index.vue:446\");\n //plus.runtime.restart();\n //plus.runtime.quit();\n // uni.navigateBack()\n }, function (e) {\n __f__(\"error\", \"安装失败:\", e, \" at pages/index.vue:451\");\n });\n }\n },\n fail: function fail(err) {\n __f__(\"error\", \"下载失败:\", err, \" at pages/index.vue:456\");\n uni.showToast({\n title: \"下载失败,请检查网络\",\n icon: \"none\",\n duration: 2000\n });\n }\n });\n },\n refresh: function refresh() {\n this.getMachineList();\n this.getPrintInfo(); // getPrintInfo 完成后会自动调用 getWomdaaIsShow()\n // 如果当前在工单选择页面,默认加载工单列表\n if (this.currentTab === 7) {\n // 根据当前绑定工单的状态决定默认筛选条件\n var defaultStatus = '待开工、未开工、暂停';\n if (this.isShowTableData.length > 0) {\n var currentOrderStatus = this.isShowTableData[0].daa018;\n if (currentOrderStatus === '开工') {\n defaultStatus = '开工';\n } else if (currentOrderStatus === '完工') {\n defaultStatus = '完工';\n }\n }\n this.engineeringNo = defaultStatus;\n this.engineeringNoMapList = ['待开工、未开工、暂停', '开工', '完工'];\n this.getWomdaaByStatus();\n }\n },\n getPrintInfo: function getPrintInfo() {\n var _this3 = this;\n var mac = \"\";\n mac = \"74:24:ca:4f:b7:4d\";\n this.$post({\n url: \"/DevMachine/GetDevMachineByPdaMac\",\n data: {\n pdaMac: mac\n }\n }).then(function (res) {\n var devMachine = res.data.tbBillList;\n _this3.machineNo = devMachine.machineNo;\n _this3.machineName = \"调试模式:\" + _this3.machineNo + \"号齿轮机\";\n uni.setStorageSync('machineNo', _this3.machineNo);\n uni.setStorageSync('printMac', devMachine.printMac);\n __f__(\"log\", devMachine.printMac, \" at pages/index.vue:507\");\n _this3.getWomdaaIsShow();\n });\n return;\n\n // \t\t\tif (plus.os.name == \"Android\") {\n // \t\t\t\t//获取手机MAC地址\n // \t\t\t\tvar Context = plus.android.importClass(\"android.content.Context\");\n // \t\t\t\tvar WifiManager = plus.android.importClass(\"android.net.wifi.WifiManager\");\n // \t\t\t\tvar wifiManager = plus.android.runtimeMainActivity().getSystemService(Context.WIFI_SERVICE);\n // \t\t\t\tvar WifiInfo = plus.android.importClass(\"android.net.wifi.WifiInfo\");\n // \t\t\t\tvar wifiInfo = wifiManager.getConnectionInfo();\n // \t\t\t\tmac = wifiInfo.getMacAddress();\n\n // \t\t\t\t//如果mac为“02:00:00:00:00:00”,则可能是安卓6.0以上版本,则使用另一种方法获取mac地址\n // \t\t\t\tif (mac == \"02:00:00:00:00:00\") {\n // \t\t\t\t\tmac = this.getMacNew();\n // \t\t\t\t}\n // \t\t\t\t//如果mac使用新方法依然是“02:00:00:00:00:00”则不进行保存\n // \t\t\t\tif (mac == \"02:00:00:00:00:00\") {\n // \t\t\t\t\treturn;\n // \t\t\t\t}\n // \t\t\t\tuni.setStorageSync('pdaMac', mac);\n\n // \t\t\t\tthis.$post({\n // \t\t\t\t\turl: \"/DevMachine/GetDevMachineByPdaMac\",\n // \t\t\t\t\tdata: {\n // \t\t\t\t\t\tpdaMac: mac,\n // \t\t\t\t\t}\n // \t\t\t\t}).then(res => {\n // \t\t\t\t\tlet devMachine = res.data.tbBillList;\n // \t\t\t\t\tthis.machineNo = devMachine.machineNo;\n // \t\t\t\t\tthis.machineName = \"当前机台:\" + this.machineNo + \"号齿轮机\";\n\n // \t\t\t\t\tuni.setStorageSync('machineNo', this.machineNo);\n // \t\t\t\t\tuni.setStorageSync('printMac', devMachine.printMac);\n\n // \t\t\t\t\tthis.getWomdaaIsShow();\n\n // \t\t\t\t});\n // \t\t\t}\n },\n save: function save() {\n var _this4 = this;\n var data = this.selectedItems();\n if (data.length === 0) {\n this.$showMessage(\"请选择一个工单\");\n return;\n }\n if (data.length > 1) {\n this.$showMessage(\"一次只能选取一个工单\");\n return;\n }\n\n //let firstValue = data[0][\"moldId\"]; // 获取第一个对象的指定属性值\n\n //// 使用 every 方法检查所有对象的该属性值是否一致\n //let flag = data.every(item => item[\"moldId\"] === firstValue);\n //if (!flag) {\n //\tthis.$showMessage(\"选取的\" + data.length + \"个工单中的模具编号不一致\");\n //\treturn;\n //}\n\n var orderSelect = [];\n data.forEach(function (s) {\n var entity = {\n orderId: s.id,\n orderNo: s.daa001\n };\n orderSelect.push(entity);\n });\n var editDate = this.formatDate(new Date());\n this.$post({\n url: \"/MesOrderSelect/Add\",\n data: {\n machineNo: this.machineNo,\n editDate: editDate,\n item: orderSelect\n }\n }).then(function (res) {\n if (res.data.tbBillList) {\n _this4.getWomdaaIsShow();\n uni.showToast({\n title: '保存工单成功',\n //title: '将注塑机开合模数清0',\n //将值设置为 success 或者直接不用写icon这个参数\n icon: 'success',\n //显示持续时间为 5秒\n duration: 5000\n });\n }\n _this4.isShow = false;\n });\n },\n getMacNew: function getMacNew() {\n var str = \"\";\n try {\n if (plus.os.name == \"Android\") {\n var NetworkInterface = plus.android.importClass(\"java.net.NetworkInterface\");\n var networkInterface = NetworkInterface.getByName(\"wlan0\");\n var bytes = networkInterface.getHardwareAddress();\n\n //将byte[] 转换成 String\n for (var i = 0; i < bytes.length; i++) {\n var tmp = \"\";\n var num = bytes[i];\n if (num < 0) {\n tmp = (255 + num + 1).toString(16);\n } else {\n tmp = num.toString(16);\n }\n if (tmp.length == 1) {\n tmp = \"0\" + tmp;\n }\n str += i == 0 ? tmp : \":\" + tmp;\n }\n }\n } catch (err) {\n str = \"02:00:00:00:00:00\";\n }\n return str;\n },\n cancel: function cancel() {\n var _this5 = this;\n if (!this.machineNo) {\n return;\n }\n\n // 直接用 flag 判断\n if (this.hasBindedCutterFlag) {\n uni.showToast({\n title: '当前工单已绑定刀具,不能清空重选',\n icon: 'error',\n duration: 2000\n });\n return;\n }\n var editDate = this.formatDate(new Date());\n this.selectedIndexs = [];\n this.$post({\n url: \"/MesOrderSelect/Remove\",\n data: {\n machineNo: this.machineNo,\n editDate: editDate\n }\n }).then(function (res) {\n if (res.data.tbBillList > 0) {\n _this5.isShowTableData = [];\n }\n });\n },\n formatDate: function formatDate(date) {\n var year = date.getFullYear(); // 获取年份\n var month = String(date.getMonth() + 1).padStart(2, '0'); // 获取月份并补零\n var day = String(date.getDate()).padStart(2, '0'); // 获取日期并补零\n return \"\".concat(year, \"-\").concat(month, \"-\").concat(day); // 返回格式化后的字符串\n },\n selectionChange: function selectionChange(e) {\n // 单选直接赋值\n this.selectedIndexs = [e.detail.index];\n },\n selectedItems: function selectedItems() {\n var _this6 = this;\n return this.selectedIndexs.map(function (i) {\n return _this6.tableData[i];\n });\n },\n changeTab: function changeTab(index) {\n this.currentTab = index;\n // 当切换到工单选择页面(index === 7)时自动刷新\n if (index === 7) {\n this.refresh();\n // 启动定时刷新\n this.startAutoRefresh();\n } else {\n // 离开工单选择页面时停止定时刷新\n this.stopAutoRefresh();\n }\n // 重置自动跳转计时器\n this.resetAutoRedirectTimer();\n __f__(\"log\", index, \" at pages/index.vue:698\");\n },\n onMachineChange: function onMachineChange(event) {\n this.machineName = event;\n this.machineNo = this.machine[this.machineList.indexOf(event)].machineNo;\n uni.clearStorageSync();\n uni.setStorageSync('machineNo', this.machineNo);\n uni.setStorageSync('machineName', this.machineName);\n this.getWomdaaIsShow();\n },\n onEngineeringNoChange: function onEngineeringNoChange(event) {\n var orde = this.engineeringNoList[this.engineeringNoMapList.indexOf(event)];\n this.engineeringNo = orde.moldId;\n this.getWomdaa();\n },\n getMachineList: function getMachineList() {\n var _this7 = this;\n this.$post({\n url: \"/MesMachine/GetInjectionMachine\"\n }).then(function (res) {\n _this7.machine = res.data.tbBillList;\n _this7.machineList = _this7.machine.map(function (s) {\n return s.machineName;\n });\n });\n },\n //获取表格的数据源\n getWomdaaIsShow: function getWomdaaIsShow() {\n var _this8 = this;\n this.$post({\n url: \"/Womdaa/GetWomdaasByShow\",\n data: {\n machineNo: this.machineNo\n }\n }).then(function (res) {\n _this8.isShowTableData = res.data.tbBillList;\n\n // 只判断第一条(只允许一条工单)\n var order = _this8.isShowTableData[0];\n var hasBindedCutter = false;\n if (order) {\n hasBindedCutter = order.outToolId && order.outToolId.toString().trim() !== '' || order.outToolCode && order.outToolCode.trim() !== '' || order.outToolName && order.outToolName.trim() !== '';\n }\n // 存储到 data 变量\n _this8.hasBindedCutterFlag = hasBindedCutter;\n if (_this8.isShowTableData.length == 1) {\n uni.setStorageSync('daa001', _this8.isShowTableData[0].daa001);\n uni.setStorageSync('id', _this8.isShowTableData[0].id);\n }\n });\n },\n isShowTab: function isShowTab() {\n if (this.isShowTableData.length > 0) {\n uni.showToast({\n title: '已有正在操作的工单,不能再次选择',\n icon: 'error',\n duration: 2000\n });\n return;\n }\n this.isShow = true;\n // 默认选中“待开工”\n this.engineeringNo = '待开工、未开工、暂停';\n this.tableData = [];\n // 下拉框只显示合并后的状态和其它状态\n this.engineeringNoMapList = ['待开工、未开工、暂停', '开工', '完工'];\n // 默认显示“待开工”工单\n this.getWomdaaByStatus();\n }\n }, (0, _defineProperty2.default)(_methods, \"onEngineeringNoChange\", function onEngineeringNoChange(status) {\n this.engineeringNo = status;\n this.getWomdaaByStatus();\n }), (0, _defineProperty2.default)(_methods, \"getWomdaa\", function getWomdaa() {\n var _this9 = this;\n var editDate = this.formatDate(new Date());\n this.$post({\n url: \"/Womdaa/GetWomdaasByMachine\",\n data: {\n machineNo: this.machineNo,\n editDate: editDate\n }\n }).then(function (res) {\n _this9.tableData = res.data.tbBillList;\n });\n }), (0, _defineProperty2.default)(_methods, \"getWomdaaByStatus\", function getWomdaaByStatus() {\n var _this10 = this;\n var editDate = this.formatDate(new Date());\n var statusArr = [];\n if (this.engineeringNo === '待开工、未开工、暂停') {\n statusArr = ['待开工', '未开工', '暂停'];\n } else {\n statusArr = [this.engineeringNo];\n }\n this.$post({\n url: \"/Womdaa/GetWomdaasByEngineeringNo\",\n data: {\n machineNo: this.machineNo,\n orderStatus: statusArr,\n editDate: editDate\n }\n }).then(function (res) {\n _this10.tableData = res.data.tbBillList;\n });\n }), (0, _defineProperty2.default)(_methods, \"toDetail\", function toDetail(item) {\n this.orderId = item.id;\n this.selectedOrder = item.daa001;\n this.productCode = item.daa002; // 产品编码\n this.productSpec = item.daa004; // 产品规格\n this.currentTab = 0;\n }), (0, _defineProperty2.default)(_methods, \"getStartBtnClass\", function getStartBtnClass(item) {\n var isSelected = this.isShowTableData.length > 0 && this.isShowTableData[0].daa001 === item.daa001;\n if (isSelected) {\n return 'start-btn start-btn-selected'; // 当前选中的工单,绿色\n }\n\n return 'start-btn';\n }), (0, _defineProperty2.default)(_methods, \"isStartBtnDisabled\", function isStartBtnDisabled(item) {\n // 如果已经有选中的工单,且当前项不是选中的工单,则禁用\n if (this.isShowTableData.length > 0 && this.isShowTableData[0].daa001 !== item.daa001) {\n return true;\n }\n return false;\n }), (0, _defineProperty2.default)(_methods, \"isPauseBtnDisabled\", function isPauseBtnDisabled(item) {\n // 如果已经有选中的工单,且当前项不是选中的工单,则禁用\n if (this.isShowTableData.length > 0 && this.isShowTableData[0].daa001 !== item.daa001) {\n return true;\n }\n // 如果还没有选中任何工单,也禁用暂停按钮\n if (this.isShowTableData.length === 0) {\n return true;\n }\n return false;\n }), (0, _defineProperty2.default)(_methods, \"getStartBtnText\", function getStartBtnText(item) {\n var isSelected = this.isShowTableData.length > 0 && this.isShowTableData[0].daa001 === item.daa001;\n if (isSelected) {\n return '转跳报工界面';\n }\n return '开工';\n }), (0, _defineProperty2.default)(_methods, \"handleStartWork\", function handleStartWork(item) {\n var _this11 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {\n var isSelected, _orderSelect, _editDate;\n return _regenerator.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n // 判断当前工单是否已选中\n isSelected = _this11.isShowTableData.length > 0 && _this11.isShowTableData[0].daa001 === item.daa001;\n if (isSelected) {\n // 如果已选中,则先跳转到主界面,然后跳转到报工界面\n _this11.toDetail(item);\n // 延迟跳转到报工界面\n setTimeout(function () {\n _this11.currentTab = 4;\n }, 100);\n } else {\n // 如果未选中,则执行开工逻辑\n _orderSelect = [{\n orderId: item.id,\n orderNo: item.daa001\n }];\n _editDate = _this11.formatDate(new Date());\n _this11.$post({\n url: \"/MesOrderSelect/Add\",\n data: {\n machineNo: _this11.machineNo,\n editDate: _editDate,\n item: _orderSelect\n }\n }).then( /*#__PURE__*/function () {\n var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(res) {\n var bindSuccess;\n return _regenerator.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n if (!res.data.tbBillList) {\n _context.next = 6;\n break;\n }\n _this11.getWomdaaIsShow();\n\n // 调用后端方法绑定数采标志\n _context.next = 4;\n return _this11.bindDataCollectionFlag(item.daa001);\n case 4:\n bindSuccess = _context.sent;\n // 绑定成功后再提示开工成功\n if (bindSuccess) {\n uni.showToast({\n title: '开工成功',\n icon: 'success',\n duration: 2000\n });\n }\n case 6:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee);\n }));\n return function (_x) {\n return _ref2.apply(this, arguments);\n };\n }());\n }\n case 2:\n case \"end\":\n return _context2.stop();\n }\n }\n }, _callee2);\n }))();\n }), (0, _defineProperty2.default)(_methods, \"bindDataCollectionFlag\", function bindDataCollectionFlag(orderNo) {\n var _this12 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3() {\n var res;\n return _regenerator.default.wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n _context3.prev = 0;\n _context3.next = 3;\n return _this12.$post({\n url: '/MesOrderSelect/AddBySc',\n data: {\n machineNo: _this12.machineNo,\n editDate: editDate,\n item: orderSelect\n }\n });\n case 3:\n res = _context3.sent;\n if (!(res && res.status === 0)) {\n _context3.next = 10;\n break;\n }\n __f__(\"log\", '数采标志绑定成功', \" at pages/index.vue:930\");\n _this12.$showMessage('数采标志绑定成功');\n return _context3.abrupt(\"return\", true);\n case 10:\n __f__(\"error\", '数采标志绑定失败:', res.message || '未知错误', \" at pages/index.vue:934\");\n _this12.$showMessage('数采标志绑定失败');\n return _context3.abrupt(\"return\", false);\n case 13:\n _context3.next = 20;\n break;\n case 15:\n _context3.prev = 15;\n _context3.t0 = _context3[\"catch\"](0);\n __f__(\"error\", '绑定数采标志错误:', _context3.t0, \" at pages/index.vue:939\");\n _this12.$showMessage('绑定数采标志失败');\n return _context3.abrupt(\"return\", false);\n case 20:\n case \"end\":\n return _context3.stop();\n }\n }\n }, _callee3, null, [[0, 15]]);\n }))();\n }), (0, _defineProperty2.default)(_methods, \"handlePauseWork\", function handlePauseWork(item) {\n var _this13 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4() {\n var editDate;\n return _regenerator.default.wrap(function _callee4$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n if (_this13.machineNo) {\n _context4.next = 2;\n break;\n }\n return _context4.abrupt(\"return\");\n case 2:\n if (!_this13.hasBindedCutterFlag) {\n _context4.next = 5;\n break;\n }\n uni.showToast({\n title: '当前工单已绑定刀具,不能暂停',\n icon: 'error',\n duration: 2000\n });\n return _context4.abrupt(\"return\");\n case 5:\n editDate = _this13.formatDate(new Date());\n _this13.selectedIndexs = [];\n _this13.$post({\n url: \"/MesOrderSelect/Remove\",\n data: {\n machineNo: _this13.machineNo,\n editDate: editDate\n }\n }).then(function (res) {\n if (res.data.tbBillList > 0) {\n _this13.isShowTableData = [];\n uni.showToast({\n title: '工单已暂停',\n icon: 'success',\n duration: 2000\n });\n\n // 暂停成功后,刷新当前页面\n setTimeout(function () {\n _this13.refresh();\n }, 500);\n }\n });\n case 8:\n case \"end\":\n return _context4.stop();\n }\n }\n }, _callee4);\n }))();\n }), (0, _defineProperty2.default)(_methods, \"startAutoRefresh\", function startAutoRefresh() {\n var _this14 = this;\n // 先清除现有定时器\n this.stopAutoRefresh();\n // 只在工单选择页面启动定时刷新\n if (this.currentTab === 7) {\n this.autoRefreshTimer = setInterval(function () {\n if (_this14.currentTab === 7) {\n _this14.refresh();\n }\n }, this.autoRefreshInterval);\n }\n }), (0, _defineProperty2.default)(_methods, \"stopAutoRefresh\", function stopAutoRefresh() {\n if (this.autoRefreshTimer) {\n clearInterval(this.autoRefreshTimer);\n this.autoRefreshTimer = null;\n }\n }), _methods),\n computed: {}\n};\nexports.default = _default;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 1)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vcGFnZXMvaW5kZXgudnVlIl0sIm5hbWVzIjpbImNvbXBvbmVudHMiLCJUZWNobm9sb2d5IiwiV29ya09yZGVyIiwiV29ya09yZGVyUHJpbnQiLCJNYWNoaW5lIiwiTW9sZCIsIlVuaVRhYmxlIiwiV29ya09yZGVyU3RhdHVzIiwiUERGU2hvdyIsIlByaW50SW5pdCIsIlByaW50VGVzdCIsIkVxdWlwbWVudEluc3BlY3Rpb24iLCJNb2xkUmVjb3JkIiwiZGF0YSIsIm9yZGVyU3RhdHVzIiwiY3VycmVudFRhYiIsInByb2R1Y3RDb2RlIiwicHJvZHVjdFNwZWMiLCJtYWNoaW5lTGlzdCIsIm1hY2hpbmUiLCJlbmdpbmVlcmluZ05vTGlzdCIsImVuZ2luZWVyaW5nTm9NYXBMaXN0IiwiZW5naW5lZXJpbmdObyIsIm1hY2hpbmVObyIsIm1hY2hpbmVOYW1lIiwidGFibGVEYXRhIiwiaXNTaG93VGFibGVEYXRhIiwiY3JlYXRlZCIsInVuaSIsIm9uTG9hZCIsIm9uU2hvdyIsIm9uSGlkZSIsIm1ldGhvZHMiLCJvblJvd0NsaWNrIiwiZGV0YWlsIiwiaW5kZXgiLCJyZXNldEF1dG9SZWRpcmVjdFRpbWVyIiwiY2xlYXJUaW1lb3V0IiwidGl0bGUiLCJpY29uIiwiZHVyYXRpb24iLCJjaGVja0ZvclVwZGF0ZSIsInVybCIsImNvbnRlbnQiLCJzdWNjZXNzIiwiZG93bmxvYWROZXdBcGsiLCJwbHVzIiwiZm9yY2UiLCJmYWlsIiwicmVmcmVzaCIsImRlZmF1bHRTdGF0dXMiLCJnZXRQcmludEluZm8iLCJtYWMiLCJwZGFNYWMiLCJzYXZlIiwib3JkZXJJZCIsIm9yZGVyTm8iLCJvcmRlclNlbGVjdCIsImVkaXREYXRlIiwiaXRlbSIsImdldE1hY05ldyIsInRtcCIsInN0ciIsImNhbmNlbCIsImZvcm1hdERhdGUiLCJzZWxlY3Rpb25DaGFuZ2UiLCJzZWxlY3RlZEl0ZW1zIiwiY2hhbmdlVGFiIiwib25NYWNoaW5lQ2hhbmdlIiwib25FbmdpbmVlcmluZ05vQ2hhbmdlIiwiZ2V0TWFjaGluZUxpc3QiLCJnZXRXb21kYWFJc1Nob3ciLCJoYXNCaW5kZWRDdXR0ZXIiLCJvcmRlciIsImlzU2hvd1RhYiIsInN0YXR1cyIsInN0YXR1c0FyciIsImlzU2VsZWN0ZWQiLCJzZXRUaW1lb3V0IiwicmVzIiwiYmluZFN1Y2Nlc3MiLCJjbGVhckludGVydmFsIiwiY29tcHV0ZWQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFnUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQSxlQUVBO0VBQ0FBO0lBQ0FDO0lBQ0FDO0lBQ0FDO0lBQ0FDO0lBQ0FDO0lBQ0FDO0lBQ0FDO0lBQ0FDO0lBQ0FDO0lBQ0FDO0lBQ0FDO0lBQ0FDO0VBQ0E7RUFDQUM7SUFBQTtJQUNBO01BQ0FDO01BQUE7TUFDQUM7TUFFQUM7TUFBQTtNQUNBQztNQUFBOztNQUVBQztNQUVBQztNQUVBQztNQUNBQztNQUNBQztNQUVBQztNQUNBQztNQUVBQztNQUNBQztJQUFBLHNEQUVBLDREQUNBLG9EQUNBLDBEQUVBLG1EQUVBLGlFQUdBLCtEQUNBLHdFQUdBLGtFQUNBO0VBRUE7RUFDQUM7SUFFQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTs7SUFFQUM7SUFFQTs7SUFFQTtJQUNBO0VBRUE7RUFDQUM7SUFDQTtFQUNBO0VBQ0FDO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7TUFDQTtJQUNBO0VBQ0E7RUFDQUM7SUFDQTtJQUNBO0VBQ0E7RUFDQUM7SUFDQUM7TUFDQTtNQUNBO01BQ0E7UUFBQUM7VUFBQUM7UUFBQTtNQUFBO01BQ0E7TUFDQTtJQUNBO0lBRUE7SUFDQUM7TUFBQTtNQUNBO01BQ0E7UUFDQUM7UUFDQTtNQUNBOztNQUVBO01BQ0E7UUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBVDtZQUNBVTtZQUNBQztZQUNBQztVQUNBO1FBQ0E7TUFDQTtJQUNBO0lBQ0FDO01BQUE7TUFDQTtRQUNBQztRQUNBN0I7TUFDQTtRQUVBO1FBQ0E7O1FBRUE7VUFDQWU7WUFDQVU7WUFDQUs7WUFDQUM7Y0FDQTtnQkFDQTtjQUNBO1lBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1FBQ0E7TUFDQTtJQUVBO0lBRUFDO01BQ0FqQjtRQUNBVTtRQUNBQztRQUNBQztNQUNBO01BRUFaO1FBQ0FjO1FBQ0FFO1VBQ0E7WUFDQUU7Y0FDQUM7WUFDQTtjQUNBO2NBQ0E7Y0FDQTtjQUNBO1lBQ0E7Y0FDQTtZQUNBO1VBQ0E7UUFDQTtRQUNBQztVQUNBO1VBQ0FwQjtZQUNBVTtZQUNBQztZQUNBQztVQUNBO1FBQ0E7TUFDQTtJQUNBO0lBRUFTO01BQ0E7TUFDQTtNQUNBO01BQ0E7UUFDQTtRQUNBO1FBQ0E7VUFDQTtVQUNBO1lBQ0FDO1VBQ0E7WUFDQUE7VUFDQTtRQUNBO1FBQ0E7UUFDQSw2QkFDQSxjQUNBLE1BQ0EsS0FDQTtRQUNBO01BQ0E7SUFDQTtJQUNBQztNQUFBO01BQ0E7TUFFQUM7TUFDQTtRQUNBVjtRQUNBN0I7VUFDQXdDO1FBQ0E7TUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUVBekI7UUFDQUE7UUFFQTtRQUVBO01BQ0E7TUFDQTs7TUFHQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBOztNQUVBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTs7TUFFQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7O01BRUE7TUFDQTs7TUFHQTs7TUFFQTtNQUNBO0lBQ0E7SUFDQTBCO01BQUE7TUFDQTtNQUVBO1FBQ0E7UUFDQTtNQUNBO01BRUE7UUFDQTtRQUNBO01BQ0E7O01BRUE7O01BRUE7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBOztNQUVBO01BRUF6QztRQUNBO1VBQ0EwQztVQUNBQztRQUNBO1FBQ0FDO01BQ0E7TUFFQTtNQUVBO1FBQ0FmO1FBQ0E3QjtVQUNBVTtVQUNBbUM7VUFDQUM7UUFDQTtNQUNBO1FBQ0E7VUFDQTtVQUNBL0I7WUFDQVU7WUFDQTtZQUNBO1lBQ0FDO1lBQ0E7WUFDQUM7VUFDQTtRQUNBO1FBQ0E7TUFDQTtJQUVBO0lBQ0FvQjtNQUNBO01BQ0E7UUFDQTtVQUNBO1VBQ0E7VUFDQTs7VUFFQTtVQUNBO1lBQ0E7WUFDQTtZQUNBO2NBQ0FDO1lBQ0E7Y0FDQUE7WUFDQTtZQUNBO2NBQ0FBO1lBQ0E7WUFDQUM7VUFDQTtRQUNBO01BQ0E7UUFDQUE7TUFDQTtNQUNBO0lBQ0E7SUFFQUM7TUFBQTtNQUNBO1FBQ0E7TUFDQTs7TUFFQTtNQUNBO1FBQ0FuQztVQUNBVTtVQUNBQztVQUNBQztRQUNBO1FBQ0E7TUFDQTtNQUVBO01BQ0E7TUFFQTtRQUNBRTtRQUNBN0I7VUFDQVU7VUFDQW1DO1FBQ0E7TUFDQTtRQUNBO1VBQ0E7UUFDQTtNQUNBO0lBQ0E7SUFFQU07TUFDQTtNQUNBO01BQ0E7TUFDQTtJQUNBO0lBQ0FDO01BQ0E7TUFDQTtJQUNBO0lBRUFDO01BQUE7TUFDQTtRQUFBO01BQUE7SUFDQTtJQUdBQztNQUNBO01BQ0E7TUFDQTtRQUNBO1FBQ0E7UUFDQTtNQUNBO1FBQ0E7UUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO0lBQ0E7SUFDQUM7TUFFQTtNQUVBO01BRUF4QztNQUVBQTtNQUNBQTtNQUVBO0lBQ0E7SUFDQXlDO01BRUE7TUFFQTtNQUVBO0lBRUE7SUFDQUM7TUFBQTtNQUNBO1FBQ0E1QjtNQUNBO1FBQ0E7UUFDQTtVQUFBO1FBQUE7TUFDQTtJQUNBO0lBQ0E7SUFDQTZCO01BQUE7TUFDQTtRQUNBN0I7UUFDQTdCO1VBQ0FVO1FBQ0E7TUFDQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1VBQ0FpRCxrQkFDQUMsK0RBQ0FBLHdEQUNBQTtRQUNBO1FBQ0E7UUFDQTtRQUVBO1VBQ0E3QztVQUNBQTtRQUNBO01BQ0E7SUFDQTtJQUVBOEM7TUFDQTtRQUNBOUM7VUFDQVU7VUFDQUM7VUFDQUM7UUFDQTtRQUNBO01BQ0E7TUFFQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0EsNkJBQ0EsY0FDQSxNQUNBLEtBQ0E7TUFDQTtNQUNBO0lBQ0E7RUFBQSxtR0FFQW1DO0lBQ0E7SUFDQTtFQUNBLDhFQUNBO0lBQUE7SUFFQTtJQUVBO01BQ0FqQztNQUNBN0I7UUFDQVU7UUFDQW1DO01BQ0E7SUFDQTtNQUNBO0lBQ0E7RUFDQSw4RkFFQTtJQUFBO0lBQ0E7SUFDQTtJQUNBO01BQ0FrQjtJQUNBO01BQ0FBO0lBQ0E7SUFDQTtNQUNBbEM7TUFDQTdCO1FBQ0FVO1FBQ0FUO1FBQ0E0QztNQUNBO0lBQ0E7TUFDQTtJQUNBO0VBQ0EsMEVBQ0FDO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtFQUNBLDBGQUdBQTtJQUNBO0lBQ0E7TUFDQTtJQUNBOztJQUNBO0VBQ0EsOEZBR0FBO0lBQ0E7SUFDQTtNQUNBO0lBQ0E7SUFDQTtFQUNBLDhGQUdBQTtJQUNBO0lBQ0E7TUFDQTtJQUNBO0lBQ0E7SUFDQTtNQUNBO0lBQ0E7SUFDQTtFQUNBLHdGQUdBQTtJQUNBO0lBQ0E7TUFDQTtJQUNBO0lBQ0E7RUFDQSx3RkFHQUE7SUFBQTtJQUFBO01BQUE7TUFBQTtRQUFBO1VBQUE7WUFBQTtjQUNBO2NBQ0FrQjtjQUVBO2dCQUNBO2dCQUNBO2dCQUNBO2dCQUNBQztrQkFDQTtnQkFDQTtjQUNBO2dCQUNBO2dCQUNBckI7a0JBQ0FGO2tCQUNBQztnQkFDQTtnQkFFQUU7Z0JBRUE7a0JBQ0FoQjtrQkFDQTdCO29CQUNBVTtvQkFDQW1DO29CQUNBQztrQkFDQTtnQkFDQTtrQkFBQTtvQkFBQTtvQkFBQTtzQkFBQTt3QkFBQTswQkFBQTs0QkFBQSxLQUNBb0I7OEJBQUE7OEJBQUE7NEJBQUE7NEJBQ0E7OzRCQUVBOzRCQUFBOzRCQUFBLE9BQ0E7MEJBQUE7NEJBQUFDOzRCQUVBOzRCQUNBOzhCQUNBcEQ7Z0NBQ0FVO2dDQUNBQztnQ0FDQUM7OEJBQ0E7NEJBQ0E7MEJBQUE7MEJBQUE7NEJBQUE7d0JBQUE7c0JBQUE7b0JBQUE7a0JBQUEsQ0FFQTtrQkFBQTtvQkFBQTtrQkFBQTtnQkFBQTtjQUNBO1lBQUE7WUFBQTtjQUFBO1VBQUE7UUFBQTtNQUFBO0lBQUE7RUFDQSxzR0FHQWdCO0lBQUE7SUFBQTtNQUFBO01BQUE7UUFBQTtVQUFBO1lBQUE7Y0FBQTtjQUFBO2NBQUEsT0FFQTtnQkFDQWQ7Z0JBQ0E3QjtrQkFDQVU7a0JBQ0FtQztrQkFDQUM7Z0JBQ0E7Y0FDQTtZQUFBO2NBUEFvQjtjQUFBLE1BU0FBO2dCQUFBO2dCQUFBO2NBQUE7Y0FDQTtjQUNBO2NBQUEsa0NBQ0E7WUFBQTtjQUVBO2NBQ0E7Y0FBQSxrQ0FDQTtZQUFBO2NBQUE7Y0FBQTtZQUFBO2NBQUE7Y0FBQTtjQUdBO2NBQ0E7Y0FBQSxrQ0FDQTtZQUFBO1lBQUE7Y0FBQTtVQUFBO1FBQUE7TUFBQTtJQUFBO0VBRUEsd0ZBR0FwQjtJQUFBO0lBQUE7TUFBQTtNQUFBO1FBQUE7VUFBQTtZQUFBO2NBQUEsSUFDQTtnQkFBQTtnQkFBQTtjQUFBO2NBQUE7WUFBQTtjQUFBLEtBS0E7Z0JBQUE7Z0JBQUE7Y0FBQTtjQUNBL0I7Z0JBQ0FVO2dCQUNBQztnQkFDQUM7Y0FDQTtjQUFBO1lBQUE7Y0FJQWtCO2NBQ0E7Y0FFQTtnQkFDQWhCO2dCQUNBN0I7a0JBQ0FVO2tCQUNBbUM7Z0JBQ0E7Y0FDQTtnQkFDQTtrQkFDQTtrQkFDQTlCO29CQUNBVTtvQkFDQUM7b0JBQ0FDO2tCQUNBOztrQkFFQTtrQkFDQXNDO29CQUNBO2tCQUNBO2dCQUNBO2NBQ0E7WUFBQTtZQUFBO2NBQUE7VUFBQTtRQUFBO01BQUE7SUFBQTtFQUNBLDRGQUdBO0lBQUE7SUFDQTtJQUNBO0lBQ0E7SUFDQTtNQUNBO1FBQ0E7VUFDQTtRQUNBO01BQ0E7SUFDQTtFQUNBLDBGQUdBO0lBQ0E7TUFDQUc7TUFDQTtJQUNBO0VBQ0EsYUFDQTtFQUNBQztBQUNBO0FBQUEsMkIiLCJmaWxlIjoiNTIuanMiLCJzb3VyY2VzQ29udGVudCI6WyI8dGVtcGxhdGU+XHJcblxyXG5cdDx2aWV3PlxyXG5cdFx0PHZpZXcgY2xhc3M9XCJ0YWItYmFyXCI+XHJcblx0XHRcdDx2aWV3IGNsYXNzPVwidGFiLWl0ZW1cIiA6Y2xhc3M9XCJ7IGFjdGl2ZTogY3VycmVudFRhYiA9PT0gNyB9XCIgQGNsaWNrPVwiY2hhbmdlVGFiKDcpXCI+XHJcblx0XHRcdFx05bel5Y2V6YCJ5oupXHJcblx0XHRcdDwvdmlldz5cclxuXHRcdFx0PHZpZXcgY2xhc3M9XCJ0YWItaXRlbVwiIDpjbGFzcz1cInsgYWN0aXZlOiBjdXJyZW50VGFiID09PSAwIH1cIiBAY2xpY2s9XCJjaGFuZ2VUYWIoMClcIj5cclxuXHRcdFx0XHTkuLvnlYzpnaJcclxuXHRcdFx0PC92aWV3PlxyXG5cdFx0XHQ8dmlldyBjbGFzcz1cInRhYi1pdGVtXCIgOmNsYXNzPVwieyBhY3RpdmU6IGN1cnJlbnRUYWIgPT09IDIgfVwiIEBjbGljaz1cImNoYW5nZVRhYigyKVwiPlxyXG5cdFx0XHRcdOS4iuWIgOS4i+WIgFxyXG5cdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdDx2aWV3IGNsYXNzPVwidGFiLWl0ZW1cIiA6Y2xhc3M9XCJ7IGFjdGl2ZTogY3VycmVudFRhYiA9PT0gMyB9XCIgQGNsaWNrPVwiY2hhbmdlVGFiKDMpXCI+XHJcblx0XHRcdFx06LCD5py66YCB5qOAXHJcblx0XHRcdDwvdmlldz5cclxuXHRcdFx0PHZpZXcgY2xhc3M9XCJ0YWItaXRlbVwiIDpjbGFzcz1cInsgYWN0aXZlOiBjdXJyZW50VGFiID09PSAxMCB9XCIgQGNsaWNrPVwiY2hhbmdlVGFiKDEwKVwiPlxyXG5cdFx0XHRcdOS4iuS4i+WIgC/pppbmo4DljZXorrDlvZVcclxuXHRcdFx0PC92aWV3PlxyXG5cdFx0XHQ8dmlldyBjbGFzcz1cInRhYi1pdGVtXCIgOmNsYXNzPVwieyBhY3RpdmU6IGN1cnJlbnRUYWIgPT09IDQgfVwiIEBjbGljaz1cImNoYW5nZVRhYig0KVwiPlxyXG5cdFx0XHRcdOeUn+S6p+aKpeW3pVxyXG5cdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdDx2aWV3IGNsYXNzPVwidGFiLWl0ZW1cIiA6Y2xhc3M9XCJ7IGFjdGl2ZTogY3VycmVudFRhYiA9PT0gMSB9XCIgQGNsaWNrPVwiY2hhbmdlVGFiKDEpXCI+XHJcblx0XHRcdFx05byA5bel5a6M5belXHJcblx0XHRcdDwvdmlldz5cclxuXHRcdFx0PHZpZXcgY2xhc3M9XCJ0YWItaXRlbVwiIDpjbGFzcz1cInsgYWN0aXZlOiBjdXJyZW50VGFiID09PSA1IH1cIiBAY2xpY2s9XCJjaGFuZ2VUYWIoNSlcIj5cclxuXHRcdFx0XHRlLVNPUFxyXG5cdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdDx2aWV3IGNsYXNzPVwidGFiLWl0ZW1cIiA6Y2xhc3M9XCJ7IGFjdGl2ZTogY3VycmVudFRhYiA9PT0gNiB9XCIgQGNsaWNrPVwiY2hhbmdlVGFiKDYpXCI+XHJcblx0XHRcdFx05bel6Im65Y+C5pWwXHJcblx0XHRcdDwvdmlldz5cclxuXHRcdFx0PHZpZXcgY2xhc3M9XCJ0YWItaXRlbVwiIDpjbGFzcz1cInsgYWN0aXZlOiBjdXJyZW50VGFiID09PSA5IH1cIiBAY2xpY2s9XCJjaGFuZ2VUYWIoOSlcIj5cclxuXHRcdFx0XHTorr7lpIfngrnmo4BcclxuXHRcdFx0PC92aWV3PlxyXG5cdFx0XHQ8IS0tIDx2aWV3IGNsYXNzPVwidGFiLWl0ZW1cIiA6Y2xhc3M9XCJ7IGFjdGl2ZTogY3VycmVudFRhYiA9PT0gOCB9XCIgQGNsaWNrPVwiY2hhbmdlVGFiKDgpXCI+XHJcblx0XHRcdOaJk+WNsOacuuiuvue9rlxyXG5cdFx0PC92aWV3PiAtLT5cclxuXHJcblx0XHQ8L3ZpZXc+XHJcblx0XHQ8dmlldyBjbGFzcz1cImZvbnRcIj48L3ZpZXc+XHJcblx0XHQ8c2Nyb2xsLXZpZXcgY2xhc3M9XCJjb250ZW50XCI+XHJcblx0XHRcdDx2aWV3IHYtaWY9XCJjdXJyZW50VGFiID09PSA3XCIgY2xhc3M9XCJ0YWItY29udGVudFwiPlxyXG5cdFx0XHRcdDx2aWV3IGNsYXNzPVwiY29udGVudFwiPlxyXG5cdFx0XHRcdFx0PCEtLTx2aWV3PlxyXG5cdFx0XHRcdFx0XHQ8aDQ+5LiA5Y+w5py65Y+w5Y+q6IO96YCJ5oup5LiA5p2h5bel5Y2V77yI5aSa6YCJ6buY6K6k5Li65pyA5ZCO5LiA5p2h77yJPC9oND5cclxuXHRcdFx0XHRcdDwvdmlldz4tLT5cclxuXHRcdFx0XHRcdDx2aWV3IGNsYXNzPVwic2VjdGlvbiB0b3Atc2VjdGlvblwiPlxyXG5cdFx0XHRcdFx0XHQ8dmlldyBjbGFzcz1cImZvcm0tcm93IGFsaWduLXJvd1wiPlxyXG5cdFx0XHRcdFx0XHRcdDxpbnB1dCB2LW1vZGVsPVwibWFjaGluZU5hbWVcIlxyXG5cdFx0XHRcdFx0XHRcdFx0ICAgZGlzYWJsZWQ9XCJ0cnVlXCJcclxuXHRcdFx0XHRcdFx0XHRcdCAgIHR5cGU9XCJ0ZXh0XCJcclxuXHRcdFx0XHRcdFx0XHRcdCAgIGNsYXNzPVwibWFjaGluZS1uYW1lLWJveFwiIC8+XHJcblx0XHRcdFx0XHRcdFx0PHZpZXcgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgc3R5bGU9XCJmbG9hdDogbGVmdDttYXJnaW4tdG9wOiAxOHB4O2ZvbnQtc2l6ZTogMjJweDtcIj7ngrnlh7vmjInpkq7nrZvpgInlt6XljZXnirbmgIE6PC9sYWJlbD5cclxuXHRcdFx0XHRcdFx0XHRcdDxzdXBlcndlaS1jb21ib3ggOmNhbmRpZGF0ZXM9XCJlbmdpbmVlcmluZ05vTWFwTGlzdFwiIHBsYWNlaG9sZGVyPVwi6K+36YCJ5oupXCIgdi1tb2RlbD1cImVuZ2luZWVyaW5nTm9cIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgQHNlbGVjdD1cIm9uRW5naW5lZXJpbmdOb0NoYW5nZVwiIGNsYXNzPVwicGlja2VyXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0IHN0eWxlPVwicGFkZGluZzogN3B4IDQ2cHg7d2lkdGg6IDY1MHB4O21hcmdpbi1yaWdodDogMjBweDtcIj48L3N1cGVyd2VpLWNvbWJveD5cclxuXHRcdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHRcdFx0PHZpZXcgY2xhc3M9XCJ0b3AtcmlnaHRcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDxidXR0b24gY2xhc3M9XCJyZWZyZXNoLWJ0blwiIEBjbGljaz1cInJlZnJlc2hcIj7liLfmlrA8L2J1dHRvbj5cclxuXHRcdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdDwvdmlldz5cclxuXHJcblx0XHRcdFx0XHQ8IS0tIOW3peWNlemAieaLqeihqOagvCAtLT5cclxuXHRcdFx0XHRcdDx2aWV3IGNsYXNzPVwic2VjdGlvbiBjYXJkXCI+XHJcblx0XHRcdFx0XHRcdDx1bmktdGFibGUgYm9yZGVyIHN0cmlwZSBlbXB0eVRleHQ9XCLmmoLml6Dmm7TlpJrmlbDmja5cIj5cclxuXHRcdFx0XHRcdFx0XHQ8dW5pLXRyPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHVuaS10aCBhbGlnbj1cImNlbnRlclwiIGNsYXNzPVwidGhcIiBzdHlsZT1cIndpZHRoOiAyMjBweDtcIj7mk43kvZw8L3VuaS10aD5cclxuXHRcdFx0XHRcdFx0XHRcdDx1bmktdGggYWxpZ249XCJjZW50ZXJcIiBjbGFzcz1cInRoXCIgc3R5bGU9XCJ3aWR0aDogMTAwcHg7XCI+5bel5bqPPC91bmktdGg+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dW5pLXRoIGFsaWduPVwiY2VudGVyXCIgY2xhc3M9XCJ0aFwiIHN0eWxlPVwid2lkdGg6IDIwMHB4O1wiPuW3peWNleWPtzwvdW5pLXRoPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHVuaS10aCBhbGlnbj1cImNlbnRlclwiIGNsYXNzPVwidGhcIiBzdHlsZT1cIndpZHRoOiAxNTBweDtcIj7kuqflk4HnvJbnoIE8L3VuaS10aD5cclxuXHRcdFx0XHRcdFx0XHRcdDx1bmktdGggYWxpZ249XCJjZW50ZXJcIiBjbGFzcz1cInRoXCIgc3R5bGU9XCJ3aWR0aDogMjQwcHg7XCI+5Lqn5ZOB5ZCN56ewPC91bmktdGg+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dW5pLXRoIGFsaWduPVwiY2VudGVyXCIgY2xhc3M9XCJ0aFwiIHN0eWxlPVwid2lkdGg6IDIwMHB4O1wiPuinhOagvDwvdW5pLXRoPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHVuaS10aCBhbGlnbj1cImNlbnRlclwiIGNsYXNzPVwidGhcIiBzdHlsZT1cIndpZHRoOiAxNTBweDtcIj7lt7LnlJ/kuqfmlbDph488L3VuaS10aD5cclxuXHRcdFx0XHRcdFx0XHRcdDx1bmktdGggYWxpZ249XCJjZW50ZXJcIiBjbGFzcz1cInRoXCIgc3R5bGU9XCJ3aWR0aDogMTUwcHg7XCI+5pyq55Sf5Lqn5pWw6YePPC91bmktdGg+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dW5pLXRoIGFsaWduPVwiY2VudGVyXCIgY2xhc3M9XCJ0aFwiIHN0eWxlPVwid2lkdGg6IDE1MHB4O1wiPua0vuW3peaVsOmHjzwvdW5pLXRoPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHVuaS10aCBhbGlnbj1cImNlbnRlclwiIGNsYXNzPVwidGhcIiBzdHlsZT1cIndpZHRoOiAxNTBweDtcIj7lt6XljZXmlbDph488L3VuaS10aD5cclxuXHRcdFx0XHRcdFx0XHRcdDx1bmktdGggYWxpZ249XCJjZW50ZXJcIiBjbGFzcz1cInRoXCIgc3R5bGU9XCJ3aWR0aDogOTBweDtcIj7lt6XljZXnirbmgIE8L3VuaS10aD5cclxuXHRcdFx0XHRcdFx0XHRcdDx1bmktdGggYWxpZ249XCJjZW50ZXJcIiBjbGFzcz1cInRoXCIgc3R5bGU9XCJ3aWR0aDogOTBweDtcIj7miqXlt6Xkuro8L3VuaS10aD5cclxuXHRcdFx0XHRcdFx0XHQ8L3VuaS10cj5cclxuXHRcdFx0XHRcdFx0XHQ8dW5pLXRyIHYtZm9yPVwiKGl0ZW0sIGluZGV4KSBpbiB0YWJsZURhdGFcIiA6a2V5PVwiaW5kZXhcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDx1bmktdGQgYWxpZ249XCJjZW50ZXJcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHZpZXcgY2xhc3M9XCJvcGVyYXRpb24tYnRuc1wiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxidXR0b24gXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6Y2xhc3M9XCJnZXRTdGFydEJ0bkNsYXNzKGl0ZW0pXCIgXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6ZGlzYWJsZWQ9XCJpc1N0YXJ0QnRuRGlzYWJsZWQoaXRlbSlcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0QGNsaWNrPVwiaGFuZGxlU3RhcnRXb3JrKGl0ZW0pXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7eyBnZXRTdGFydEJ0blRleHQoaXRlbSkgfX1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2J1dHRvbj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8YnV0dG9uIFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJwYXVzZS1idG5cIiBcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDpkaXNhYmxlZD1cImlzUGF1c2VCdG5EaXNhYmxlZChpdGVtKVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRAY2xpY2s9XCJoYW5kbGVQYXVzZVdvcmsoaXRlbSlcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdOaaguWBnFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvYnV0dG9uPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L3VuaS10ZD5cclxuXHRcdFx0XHRcdFx0XHRcdDx1bmktdGQgYWxpZ249XCJjZW50ZXJcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0IGNsYXNzPVwiZm9ybS1pbnB1dFwiIGRpc2FibGVkPVwidHJ1ZVwiIHR5cGU9XCJ0ZXh0XCIgdi1tb2RlbD1cIml0ZW0ucHJvY05hbWVcIiAvPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC91bmktdGQ+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dW5pLXRkIGFsaWduPVwiY2VudGVyXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmb3JtLWlucHV0XCI+e3sgaXRlbS5kYWEwMDEgfX08L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHRcdDwvdW5pLXRkPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHVuaS10ZCBhbGlnbj1cImNlbnRlclwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZm9ybS1pbnB1dFwiPnt7IGl0ZW0uZGFhMDAyIH19PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L3VuaS10ZD5cclxuXHRcdFx0XHRcdFx0XHRcdDx1bmktdGQgYWxpZ249XCJjZW50ZXJcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZvcm0taW5wdXRcIj57eyBpdGVtLmRhYTAwMyB9fTwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdFx0PC91bmktdGQ+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dW5pLXRkIGFsaWduPVwiY2VudGVyXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmb3JtLWlucHV0XCI+e3sgaXRlbS5kYWEwMDQgfX08L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHRcdDwvdW5pLXRkPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHVuaS10ZCBhbGlnbj1cImNlbnRlclwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgY2xhc3M9XCJmb3JtLWlucHV0XCIgZGlzYWJsZWQ9XCJ0cnVlXCIgdHlwZT1cInRleHRcIiB2LW1vZGVsPVwiaXRlbS5kYWEwMTFcIiAvPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC91bmktdGQ+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dW5pLXRkIGFsaWduPVwiY2VudGVyXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dCBjbGFzcz1cImZvcm0taW5wdXRcIiBkaXNhYmxlZD1cInRydWVcIiB0eXBlPVwidGV4dFwiIDp2YWx1ZT1cIihpdGVtLmRhYTAwOCB8fCAwKSAtIChpdGVtLmRhYTAxMSB8fCAwKVwiIC8+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L3VuaS10ZD5cclxuXHRcdFx0XHRcdFx0XHRcdDx1bmktdGQgYWxpZ249XCJjZW50ZXJcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0IGNsYXNzPVwiZm9ybS1pbnB1dFwiIGRpc2FibGVkPVwidHJ1ZVwiIHR5cGU9XCJ0ZXh0XCIgdi1tb2RlbD1cIml0ZW0uZGFhMDA4XCIgLz5cclxuXHRcdFx0XHRcdFx0XHRcdDwvdW5pLXRkPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHVuaS10ZCBhbGlnbj1cImNlbnRlclwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgY2xhc3M9XCJmb3JtLWlucHV0XCIgZGlzYWJsZWQ9XCJ0cnVlXCIgdHlwZT1cInRleHRcIiB2LW1vZGVsPVwiaXRlbS5kYWEwMDhcIiAvPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC91bmktdGQ+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dW5pLXRkIGFsaWduPVwiY2VudGVyXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dCBjbGFzcz1cImZvcm0taW5wdXRcIiBkaXNhYmxlZD1cInRydWVcIiB0eXBlPVwidGV4dFwiIHYtbW9kZWw9XCJpdGVtLmRhYTAxOFwiIC8+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L3VuaS10ZD5cclxuXHRcdFx0XHRcdFx0XHRcdDx1bmktdGQgYWxpZ249XCJjZW50ZXJcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0IGNsYXNzPVwiZm9ybS1pbnB1dFwiIGRpc2FibGVkPVwidHJ1ZVwiIHR5cGU9XCJ0ZXh0XCIgdi1tb2RlbD1cIml0ZW0uc3RhZmZOYW1lXCIgLz5cclxuXHRcdFx0XHRcdFx0XHRcdDwvdW5pLXRkPlxyXG5cdFx0XHRcdFx0XHRcdDwvdW5pLXRyPlxyXG5cdFx0XHRcdFx0XHQ8L3VuaS10YWJsZT5cclxuXHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdDwvdmlldz5cclxuXHRcdFx0PHZpZXcgdi1pZj1cImN1cnJlbnRUYWIgPT09IDBcIiBjbGFzcz1cInRhYi1jb250ZW50XCI+XHJcblx0XHRcdFx0PFdvcmtPcmRlciA6b3JkZXJJZD1cIm9yZGVySWRcIiA6b3JkZXJObz1cInNlbGVjdGVkT3JkZXJcIiA6bWFjaGluZU5vPVwibWFjaGluZU5vXCJcclxuXHRcdFx0XHRcdFx0ICAgOmRldmljZU51bWJlcj1cIm1hY2hpbmVOYW1lXCIgLz5cclxuXHRcdFx0PC92aWV3PlxyXG5cdFx0XHQ8dmlldyB2LWlmPVwiY3VycmVudFRhYiA9PT0gMVwiIGNsYXNzPVwidGFiLWNvbnRlbnRcIj5cclxuXHRcdFx0XHQ8IS0tICAgICAgICAmbHQ7ISZuZGFzaDsg6LCD55SoIFdvcmtPcmRlclN0YXR1cyDnu4Tku7YgJm5kYXNoOyZndDstLT5cclxuXHRcdFx0XHQ8V29ya09yZGVyU3RhdHVzIDpvcmRlcklkPVwib3JkZXJJZFwiIDpvcmRlck5vPVwic2VsZWN0ZWRPcmRlclwiIDptYWNoaW5lTm89XCJtYWNoaW5lTm9cIiAvPlxyXG5cdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdDx2aWV3IHYtaWY9XCJjdXJyZW50VGFiID09PSAyXCIgY2xhc3M9XCJ0YWItY29udGVudFwiPlxyXG5cdFx0XHRcdDwhLS0gICAgICAgICZsdDshJm5kYXNoOyDosIPnlKggbW9sZCDnu4Tku7YgJm5kYXNoOyZndDstLT5cclxuXHRcdFx0XHQ8bW9sZCA6b3JkZXJJZD1cIm9yZGVySWRcIiA6b3JkZXJObz1cInNlbGVjdGVkT3JkZXJcIiA6bWFjaGluZU5vPVwibWFjaGluZU5vXCIgLz5cclxuXHRcdFx0PC92aWV3PlxyXG5cdFx0XHQ8dmlldyB2LWlmPVwiY3VycmVudFRhYiA9PT0gM1wiIGNsYXNzPVwidGFiLWNvbnRlbnRcIj5cclxuXHRcdFx0XHQ8IS0tICAgICAgICAmbHQ7ISZuZGFzaDsg6LCD55SoIG1vbGQg57uE5Lu2ICZuZGFzaDsmZ3Q7LS0+XHJcblx0XHRcdFx0PG1hY2hpbmUgOm9yZGVySWQ9XCJvcmRlcklkXCIgOm9yZGVyTm89XCJzZWxlY3RlZE9yZGVyXCIgOm1hY2hpbmVObz1cIm1hY2hpbmVOb1wiIC8+XHJcblx0XHRcdDwvdmlldz5cclxuXHRcdFx0PHZpZXcgdi1pZj1cImN1cnJlbnRUYWIgPT09IDEwXCIgY2xhc3M9XCJ0YWItY29udGVudFwiPlxyXG5cdFx0XHRcdDwhLS0g6LCD55SoIG1vbGRSZWNvcmQg57uE5Lu2IC0tPlxyXG5cdFx0XHRcdDxNb2xkUmVjb3JkIDpvcmRlcklkPVwib3JkZXJJZFwiIDpvcmRlck5vPVwic2VsZWN0ZWRPcmRlclwiIDptYWNoaW5lTm89XCJtYWNoaW5lTm9cIiAvPlxyXG5cdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdDx2aWV3IHYtaWY9XCJjdXJyZW50VGFiID09PSA0XCIgY2xhc3M9XCJ0YWItY29udGVudFwiPlxyXG5cdFx0XHRcdDwhLS0gIOiwg+eUqCBtb2xkIOe7hOS7tiAtLT5cclxuXHRcdFx0XHQ8V29ya09yZGVyUHJpbnQgOm9yZGVySWQ9XCJvcmRlcklkXCIgOm9yZGVyTm89XCJzZWxlY3RlZE9yZGVyXCIgOm1hY2hpbmVObz1cIm1hY2hpbmVOb1wiIC8+XHJcblx0XHRcdDwvdmlldz5cclxuXHRcdFx0PHZpZXcgdi1pZj1cImN1cnJlbnRUYWIgPT09IDhcIiBjbGFzcz1cInRhYi1jb250ZW50XCI+XHJcblx0XHRcdFx0PCEtLSDosIPnlKggbW9sZCDnu4Tku7YgLS0+XHJcblx0XHRcdFx0PFByaW50SW5pdCA6b3JkZXJJZD1cIm9yZGVySWRcIiA6b3JkZXJObz1cInNlbGVjdGVkT3JkZXJcIiA6bWFjaGluZU5vPVwibWFjaGluZU5vXCIgLz5cclxuXHRcdFx0PC92aWV3PlxyXG5cdFx0XHQ8dmlldyB2LWlmPVwiY3VycmVudFRhYiA9PT0gNVwiIGNsYXNzPVwidGFiLWNvbnRlbnRcIj5cclxuXHRcdFx0XHQ8UERGU2hvdyA6b3JkZXJJZD1cIm9yZGVySWRcIiA6b3JkZXJObz1cInNlbGVjdGVkT3JkZXJcIiA6bWFjaGluZU5vPVwibWFjaGluZU5vXCIgLz5cclxuXHRcdFx0PC92aWV3PlxyXG5cdFx0XHQ8dmlldyB2LWlmPVwiY3VycmVudFRhYiA9PT0gNlwiIGNsYXNzPVwidGFiLWNvbnRlbnRcIj5cclxuXHRcdFx0XHQ8VGVjaG5vbG9neSA6b3JkZXJJZD1cIm9yZGVySWRcIiA6b3JkZXJObz1cInNlbGVjdGVkT3JkZXJcIiA6bWFjaGluZU5vPVwibWFjaGluZU5vXCIgLz5cclxuXHRcdFx0PC92aWV3PlxyXG5cdFx0XHQ8dmlldyB2LWlmPVwiY3VycmVudFRhYiA9PT0gOVwiIGNsYXNzPVwidGFiLWNvbnRlbnRcIj5cclxuXHRcdFx0XHQ8IS0tIOiuvuWkh+eCueajgOinhuWbviAtLT5cclxuXHRcdFx0XHQ8RXF1aXBtZW50SW5zcGVjdGlvbiA6bWFjaGluZU5vPVwibWFjaGluZU5vXCIgLz5cclxuXHRcdFx0PC92aWV3PlxyXG5cdFx0PC9zY3JvbGwtdmlldz5cclxuXHJcblxyXG5cdFx0PCEtLSDlvLnnqpfkuIvmi4nmoYblj6rmmL7npLrlt6XljZXnirbmgIEgLS0+XHJcblx0XHQ8dmlldyB2LWlmPVwiaXNTaG93XCIgY2xhc3M9XCJvdmVybGF5XCI+XHJcblx0XHRcdDx2aWV3IGNsYXNzPVwicG9wdXBcIj5cclxuXHRcdFx0XHQ8dmlldyBjbGFzcz1cImZvcm0tcm93XCI+XHJcblx0XHRcdFx0XHQ8dmlldyBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7XCI+XHJcblx0XHRcdFx0XHRcdDxsYWJlbCBzdHlsZT1cImZsb2F0OiBsZWZ0O21hcmdpbi10b3A6IDE4cHg7Zm9udC1zaXplOiAyMnB4O1wiPueCueWHu+aMiemSruetm+mAieW3peWNleeKtuaAgTo8L2xhYmVsPlxyXG5cdFx0XHRcdFx0XHQ8c3VwZXJ3ZWktY29tYm94IDpjYW5kaWRhdGVzPVwiZW5naW5lZXJpbmdOb01hcExpc3RcIiBwbGFjZWhvbGRlcj1cIuivt+mAieaLqVwiIHYtbW9kZWw9XCJlbmdpbmVlcmluZ05vXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgQHNlbGVjdD1cIm9uRW5naW5lZXJpbmdOb0NoYW5nZVwiIGNsYXNzPVwicGlja2VyXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgc3R5bGU9XCJwYWRkaW5nOiA3cHggNDZweDt3aWR0aDogNjUwcHg7XCI+PC9zdXBlcndlaS1jb21ib3g+XHJcblx0XHRcdFx0XHRcdDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDIwcHg7IGNvbG9yOiAjZmY2NjAwOyBmb250LXNpemU6IDE4cHg7XCI+5aSa6YCJ5pe25Y+q5L+d55WZ5pyA5ZCO5LiA5p2h5bel5Y2VPC9zcGFuPlxyXG5cdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdDwvdmlldz5cclxuXHJcblx0XHRcdFx0PGRpdiBzdHlsZT1cImhlaWdodDogNDUwcHg7IG92ZXJmbG93OiBhdXRvO1wiPiA8IS0tIOiwg+aVtOmrmOW6puS4ujM4MHB477yM5Li65bqV6YOo5oyJ6ZKu55WZ5Ye65pu05aSa56m66Ze0IC0tPlxyXG5cdFx0XHRcdFx0PHRhYmxlPlxyXG5cclxuXHRcdFx0XHRcdFx0PHZpZXcgY2xhc3M9XCJzZWN0aW9uIGNhcmRcIj5cclxuXHRcdFx0XHRcdFx0XHQ8dW5pLXRhYmxlIHJlZj1cInRhYmxlXCIgdHlwZT1cInNlbGVjdGlvblwiIGJvcmRlciBzdHJpcGUgZW1wdHlUZXh0PVwi5pqC5peg5pu05aSa5pWw5o2uXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0ICAgY2xhc3M9XCJsYXJnZS1zZWxlY3Rpb24tdGFibGVcIiBAc2VsZWN0aW9uLWNoYW5nZT1cInNlbGVjdGlvbkNoYW5nZVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHVuaS10cj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHVuaS10aCBhbGlnbj1cImNlbnRlclwiIGNsYXNzPVwidGhcIiBzdHlsZT1cIndpZHRoOiAxMDBweDtcIj7lt6Xluo88L3VuaS10aD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHVuaS10aCBhbGlnbj1cImNlbnRlclwiIGNsYXNzPVwidGhcIiBzdHlsZT1cIndpZHRoOiAyMDBweDtcIj7lt6XljZXlj7c8L3VuaS10aD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHVuaS10aCBhbGlnbj1cImNlbnRlclwiIGNsYXNzPVwidGhcIiBzdHlsZT1cIndpZHRoOiAxNTBweDtcIj7kuqflk4HnvJbnoIE8L3VuaS10aD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHVuaS10aCBhbGlnbj1cImNlbnRlclwiIGNsYXNzPVwidGhcIiBzdHlsZT1cIndpZHRoOiAyNDBweDtcIj7kuqflk4HlkI3np7A8L3VuaS10aD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHVuaS10aCBhbGlnbj1cImNlbnRlclwiIGNsYXNzPVwidGhcIiBzdHlsZT1cIndpZHRoOiAyMDBweDtcIj7op4TmoLw8L3VuaS10aD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHVuaS10aCBhbGlnbj1cImNlbnRlclwiIGNsYXNzPVwidGhcIiBzdHlsZT1cIndpZHRoOiAxNTBweDtcIj7lt7LnlJ/kuqfmlbDph488L3VuaS10aD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHVuaS10aCBhbGlnbj1cImNlbnRlclwiIGNsYXNzPVwidGhcIiBzdHlsZT1cIndpZHRoOiAxNTBweDtcIj7mnKrnlJ/kuqfmlbDph488L3VuaS10aD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHVuaS10aCBhbGlnbj1cImNlbnRlclwiIGNsYXNzPVwidGhcIiBzdHlsZT1cIndpZHRoOiAxNTBweDtcIj7mtL7lt6XmlbDph488L3VuaS10aD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHVuaS10aCBhbGlnbj1cImNlbnRlclwiIGNsYXNzPVwidGhcIiBzdHlsZT1cIndpZHRoOiAxNTBweDtcIj7lt6XljZXmlbDph488L3VuaS10aD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHVuaS10aCBhbGlnbj1cImNlbnRlclwiIGNsYXNzPVwidGhcIiBzdHlsZT1cIndpZHRoOiA5MHB4O1wiPuW3peWNleeKtuaAgTwvdW5pLXRoPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dW5pLXRoIGFsaWduPVwiY2VudGVyXCIgY2xhc3M9XCJ0aFwiIHN0eWxlPVwid2lkdGg6IDkwcHg7XCI+5oql5bel5Lq6PC91bmktdGg+XHJcbjwhLS0gXHRcdFx0XHRcdFx0XHRcdFx0PHVuaS10aCBhbGlnbj1cImNlbnRlclwiIGNsYXNzPVwidGhcIiBzdHlsZT1cIndpZHRoOiAxMjZweDtcIj7pgInmi6k8L3VuaS10aD4gLS0+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L3VuaS10cj5cclxuXHRcdFx0XHRcdFx0XHRcdDx1bmktdHIgdi1mb3I9XCIoaXRlbSwgaW5kZXgpIGluIHRhYmxlRGF0YVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0OmtleT1cImluZGV4XCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ6Y2xhc3M9XCJ7J3Jvdy1zZWxlY3RlZCc6IHNlbGVjdGVkSW5kZXhzLmluY2x1ZGVzKGluZGV4KX1cIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdEBjbGljaz1cIm9uUm93Q2xpY2soaW5kZXgpXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdHlsZT1cImN1cnNvcjogcG9pbnRlcjtcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHVuaS10ZCBhbGlnbj1cImNlbnRlclwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dCBjbGFzcz1cImZvcm0taW5wdXRcIiBkaXNhYmxlZD1cInRydWVcIiB0eXBlPVwidGV4dFwiIHYtbW9kZWw9XCJpdGVtLnByb2NOYW1lXCIgLz48IS0t5bel5bqPLS0+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvdW5pLXRkPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dW5pLXRkIGFsaWduPVwiY2VudGVyXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZvcm0taW5wdXRcIj57eyBpdGVtLmRhYTAwMSB9fTwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3VuaS10ZD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHVuaS10ZCBhbGlnbj1cImNlbnRlclwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmb3JtLWlucHV0XCI+e3sgaXRlbS5kYWEwMDIgfX08L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PC91bmktdGQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx1bmktdGQgYWxpZ249XCJjZW50ZXJcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZm9ybS1pbnB1dFwiPnt7IGl0ZW0uZGFhMDAzIH19PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvdW5pLXRkPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dW5pLXRkIGFsaWduPVwiY2VudGVyXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZvcm0taW5wdXRcIj57eyBpdGVtLmRhYTAwNCB9fTwvZGl2PjwhLS3op4TmoLwtLT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PC91bmktdGQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx1bmktdGQgYWxpZ249XCJjZW50ZXJcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgY2xhc3M9XCJmb3JtLWlucHV0XCIgZGlzYWJsZWQ9XCJ0cnVlXCIgdHlwZT1cInRleHRcIiB2LW1vZGVsPVwiaXRlbS5kYWEwMTFcIiAvPjwhLS3lt7LnlJ/kuqfmlbDph48tLT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PC91bmktdGQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx1bmktdGQgYWxpZ249XCJjZW50ZXJcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgY2xhc3M9XCJmb3JtLWlucHV0XCIgZGlzYWJsZWQ9XCJ0cnVlXCIgdHlwZT1cInRleHRcIiA6dmFsdWU9XCIoaXRlbS5kYWEwMDggfHwgMCkgLSAoaXRlbS5kYWEwMTEgfHwgMClcIiAvPjwhLS3mnKrnlJ/kuqfmlbDph48tLT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PC91bmktdGQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx1bmktdGQgYWxpZ249XCJjZW50ZXJcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgY2xhc3M9XCJmb3JtLWlucHV0XCIgZGlzYWJsZWQ9XCJ0cnVlXCIgdHlwZT1cInRleHRcIiB2LW1vZGVsPVwiaXRlbS5kYWEwMDhcIiAvPjwhLS3mtL7lt6XmlbDph48tLT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PC91bmktdGQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx1bmktdGQgYWxpZ249XCJjZW50ZXJcIj5cclxuXHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWlucHV0XCIgZGlzYWJsZWQ9XCJ0cnVlXCIgdHlwZT1cInRleHRcIiB2LW1vZGVsPVwiaXRlbS5kYWEwMDhcIiAvPjwhLS3lt6XljZXmlbDph48tLT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PC91bmktdGQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx1bmktdGQgYWxpZ249XCJjZW50ZXJcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgY2xhc3M9XCJmb3JtLWlucHV0XCIgZGlzYWJsZWQ9XCJ0cnVlXCIgdHlwZT1cInRleHRcIiB2LW1vZGVsPVwiaXRlbS5kYWEwMThcIiAvPjwhLS3lt6XljZXnirbmgIEtLT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PC91bmktdGQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx1bmktdGQgYWxpZ249XCJjZW50ZXJcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgY2xhc3M9XCJmb3JtLWlucHV0XCIgZGlzYWJsZWQ9XCJ0cnVlXCIgdHlwZT1cInRleHRcIiB2LW1vZGVsPVwiaXRlbS5zdGFmZk5hbWVcIiAvPjwhLS3miqXlt6XkurotLT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PC91bmktdGQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx1bmktdGQ+XHJcbjwhLS0gXHRcdFx0XHRcdFx0XHRcdFx0XHQ8dmlldyBjbGFzcz1cInVuaS1ncm91cFwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGJ1dHRvbiBjbGFzcz1cInNlbGVjdC1idG5cIiB0eXBlPVwiZGVmYXVsdFwiIEBjbGljaz1cInRvRGV0YWlsKGl0ZW0pXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdOi9rOWIsOS4u+eVjOmdolxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9idXR0b24+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PC92aWV3PiAtLT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PC91bmktdGQ+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L3VuaS10cj5cclxuXHRcdFx0XHRcdFx0XHQ8L3VuaS10YWJsZT5cclxuXHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cclxuXHRcdFx0XHRcdDwvdGFibGU+XHJcblx0XHRcdFx0PC9kaXY+XHJcblxyXG5cdFx0XHRcdDx2aWV3IGNsYXNzPVwiYm90dG9tLXNlY3Rpb25cIj5cclxuXHRcdFx0XHRcdDxidXR0b24gY2xhc3M9XCJzYXZlLWJ0blwiIEBjbGljaz1cInNhdmVcIj7kv53lrZjpgInmi6k8L2J1dHRvbj5cclxuXHRcdFx0XHRcdDxidXR0b24gY2xhc3M9XCJjYW5jZWwtYnRuXCIgQGNsaWNrPVwiaXNTaG93ID0gIWlzU2hvd1wiPuWPlua2iDwvYnV0dG9uPlxyXG5cdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0PC92aWV3PlxyXG5cdFx0PC92aWV3PlxyXG5cdDwvdmlldz5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzY3JpcHQ+XHJcbmltcG9ydCBXb3JrT3JkZXJTdGF0dXMgZnJvbSAnLi4vY29tcG9uZW50cy9Xb3JrT3JkZXJTdGF0dXMudnVlJzsgLy8g56Gu5L+d6Lev5b6E5q2j56GuXHJcbmltcG9ydCBVbmlUYWJsZSBmcm9tIFwiLi4vdW5pX21vZHVsZXMvdW5pLXRhYmxlL2NvbXBvbmVudHMvdW5pLXRhYmxlL3VuaS10YWJsZS52dWVcIjtcclxuaW1wb3J0IE1vbGQgZnJvbSBcIi4uL2NvbXBvbmVudHMvbW9sZC52dWVcIjtcclxuaW1wb3J0IE1hY2hpbmUgZnJvbSBcIi4uL2NvbXBvbmVudHMvbWFjaGluZS52dWVcIjtcclxuaW1wb3J0IFdvcmtPcmRlclByaW50IGZyb20gXCIuLi9jb21wb25lbnRzL1dvcmtPcmRlclByaW50LnZ1ZVwiO1xyXG5pbXBvcnQgV29ya09yZGVyIGZyb20gXCIuLi9jb21wb25lbnRzL1dvcmtPcmRlci52dWVcIjtcclxuaW1wb3J0IFRlY2hub2xvZ3kgZnJvbSBcIi4uL2NvbXBvbmVudHMvVGVjaG5vbG9neS52dWVcIjtcclxuaW1wb3J0IFBERlNob3cgZnJvbSBcIi4uL2NvbXBvbmVudHMvUERGU2hvdy52dWVcIjtcclxuaW1wb3J0IFByaW50SW5pdCBmcm9tIFwiLi4vY29tcG9uZW50cy9QcmludEluaXQudnVlXCI7XHJcbmltcG9ydCBQcmludFRlc3QgZnJvbSBcIi4uL2NvbXBvbmVudHMvUHJpbnRUZXN0LnZ1ZVwiO1xyXG5pbXBvcnQgRXF1aXBtZW50SW5zcGVjdGlvbiBmcm9tIFwiLi4vY29tcG9uZW50cy9FcXVpcG1lbnRJbnNwZWN0aW9uLnZ1ZVwiO1xyXG5pbXBvcnQgTW9sZFJlY29yZCBmcm9tIFwiLi4vcGFnZXMvbW9sZFJlY29yZC52dWVcIjtcclxuXHJcblx0ZXhwb3J0IGRlZmF1bHQge1xyXG5cdFx0Y29tcG9uZW50czoge1xyXG5cdFx0XHRUZWNobm9sb2d5LFxyXG5cdFx0XHRXb3JrT3JkZXIsXHJcblx0XHRcdFdvcmtPcmRlclByaW50LFxyXG5cdFx0XHRNYWNoaW5lLFxyXG5cdFx0XHRNb2xkLFxyXG5cdFx0XHRVbmlUYWJsZSxcclxuXHRcdFx0V29ya09yZGVyU3RhdHVzLFxyXG5cdFx0XHRQREZTaG93LFxyXG5cdFx0XHRQcmludEluaXQsXHJcblx0XHRcdFByaW50VGVzdCxcclxuXHRcdFx0RXF1aXBtZW50SW5zcGVjdGlvbixcclxuXHRcdFx0TW9sZFJlY29yZFxyXG5cdFx0fSxcclxuXHRcdGRhdGEoKSB7XHJcblx0XHRcdHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBvcmRlclN0YXR1czogJycsIC8vIOm7mOiupOWFqOmDqFxyXG5cdFx0XHRcdGN1cnJlbnRUYWI6IDcsXHJcblxyXG4gICAgICAgICAgICAgICAgcHJvZHVjdENvZGU6ICcnLCAvLyDkuqflk4HnvJbnoIFcclxuICAgICAgICAgICAgICAgIHByb2R1Y3RTcGVjOiAnJywgLy8g5Lqn5ZOB6KeE5qC8XHJcblxyXG5cdFx0XHRcdG1hY2hpbmVMaXN0OiBbXSxcclxuXHJcblx0XHRcdFx0bWFjaGluZTogW10sXHJcblxyXG5cdFx0XHRcdGVuZ2luZWVyaW5nTm9MaXN0OiBbXSxcclxuXHRcdFx0XHRlbmdpbmVlcmluZ05vTWFwTGlzdDogW10sXHJcblx0XHRcdFx0ZW5naW5lZXJpbmdObzogJycsXHJcblxyXG5cdFx0XHRcdG1hY2hpbmVObzogJycsXHJcblx0XHRcdFx0bWFjaGluZU5hbWU6ICcnLFxyXG5cclxuXHRcdFx0XHR0YWJsZURhdGE6IFtdLFxyXG5cdFx0XHRcdGlzU2hvd1RhYmxlRGF0YTogW10sXHJcblxyXG5cdFx0XHRcdG9yZGVyU3RhdHVzOiAn5byA5belJyxcclxuXHRcdFx0XHRzZWxlY3RlZE9yZGVyOiAnJyxcclxuXHRcdFx0XHRvcmRlcklkOiAwLFxyXG5cclxuXHRcdFx0XHRzZWxlY3RlZEluZGV4czogW10sXHJcblxyXG5cdFx0XHRcdGlzU2hvdzogZmFsc2UsXHJcblx0XHRcdFx0XHJcblx0XHRcdFx0Ly8g6Ieq5Yqo6Lez6L2s55u45YWzXHJcblx0XHRcdFx0YXV0b1JlZGlyZWN0VGltZXI6IG51bGwsXHJcblx0XHRcdFx0YXV0b1JlZGlyZWN0VGltZTogNSAqIDYwICogMTAwMCwgLy8gNeWIhumSn1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdC8vIOW3peWNlemAieaLqemhtemdouWumuaXtuWIt+aWsFxyXG5cdFx0XHRcdGF1dG9SZWZyZXNoVGltZXI6IG51bGwsXHJcblx0XHRcdFx0YXV0b1JlZnJlc2hJbnRlcnZhbDogNjAgKiAxMDAwLCAvLyAx5YiG6ZKfXHJcblx0XHRcdH07XHJcblx0XHR9LFxyXG5cdFx0Y3JlYXRlZCgpIHtcclxuXHJcblx0XHRcdC8v6LCD6K+V5L2/55So55qE5Luj56CBXHJcblx0XHRcdC8vIHRoaXMubWFjaGluZU5vID0gdW5pLmdldFN0b3JhZ2VTeW5jKCdtYWNoaW5lTm8nKTtcclxuXHRcdFx0Ly8gdGhpcy5tYWNoaW5lTmFtZSA9IHVuaS5nZXRTdG9yYWdlU3luYygnbWFjaGluZU5hbWUnKTtcclxuXHRcdFx0Ly9cclxuXHRcdFx0Ly8gaWYgKHRoaXMubWFjaGluZU5vKSB7XHJcblx0XHRcdC8vICAgdGhpcy5nZXRXb21kYWFJc1Nob3coKTtcclxuXHRcdFx0Ly8gfVxyXG5cclxuXHRcdFx0dW5pLmNsZWFyU3RvcmFnZVN5bmMoKTtcclxuXHRcdFx0XHJcblx0XHRcdHRoaXMuY2hlY2tGb3JVcGRhdGUoKTtcclxuXHRcdFx0XHJcblx0XHRcdC8v5bel5o6n5py65L2/55So55qE5Luj56CBXHJcblx0XHRcdHRoaXMuZ2V0UHJpbnRJbmZvKCk7XHJcblx0XHRcdFxyXG5cdFx0fSxcclxuXHRcdG9uTG9hZChvcHRpb25zKSB7XHJcblx0XHRcdHRoaXMuZ2V0TWFjaGluZUxpc3QoKTtcclxuXHRcdH0sXHJcblx0XHRvblNob3coKSB7XHJcblx0XHRcdHRoaXMucmVmcmVzaCgpO1xyXG5cdFx0XHR0aGlzLnJlc2V0QXV0b1JlZGlyZWN0VGltZXIoKTtcclxuXHRcdFx0Ly8g5aaC5p6c5Zyo5bel5Y2V6YCJ5oup6aG16Z2i77yM5ZCv5Yqo5a6a5pe25Yi35pawXHJcblx0XHRcdGlmICh0aGlzLmN1cnJlbnRUYWIgPT09IDcpIHtcclxuXHRcdFx0XHR0aGlzLnN0YXJ0QXV0b1JlZnJlc2goKTtcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHRcdG9uSGlkZSgpIHtcclxuXHRcdFx0Ly8g6aG16Z2i6ZqQ6JeP5pe25riF6Zmk5a6a5pe25ZmoXHJcblx0XHRcdHRoaXMuc3RvcEF1dG9SZWZyZXNoKCk7XHJcblx0XHR9LFxyXG5cdFx0bWV0aG9kczoge1xyXG4gICAgICAgICAgICBvblJvd0NsaWNrKGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXhzID0gW2luZGV4XTsgLy8g5Y2V6YCJXHJcbiAgICAgICAgICAgICAgICAvLyDmiYvliqjop6blj5Egc2VsZWN0aW9uQ2hhbmdlIOS7peWQjOatpeWkjemAieahhlxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UoeyBkZXRhaWw6IHsgaW5kZXggfSB9KTtcclxuICAgICAgICAgICAgICAgIC8vIOmHjee9ruiHquWKqOi3s+i9rOiuoeaXtuWZqFxyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldEF1dG9SZWRpcmVjdFRpbWVyKCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyDph43nva7oh6rliqjot7PovazorqHml7blmahcclxuICAgICAgICAgICAgcmVzZXRBdXRvUmVkaXJlY3RUaW1lcigpIHtcclxuICAgICAgICAgICAgICAgIC8vIOa4hemZpOeOsOacieeahOWumuaXtuWZqFxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYXV0b1JlZGlyZWN0VGltZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5hdXRvUmVkaXJlY3RUaW1lcik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRvUmVkaXJlY3RUaW1lciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vIOmZpOS6huS4u+mhtSgwKeOAgeW3peWNlemAieaLqemhtSg3KeOAgeeUn+S6p+aKpeW3pemhtSg0KeS5i+WklueahOmhtemdouaJjeiuvue9ruiHquWKqOi3s+i9rFxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudFRhYiAhPT0gMCAmJiB0aGlzLmN1cnJlbnRUYWIgIT09IDcgJiYgdGhpcy5jdXJyZW50VGFiICE9PSA0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRvUmVkaXJlY3RUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDot7Povazlm57kuLvpobVcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50VGFiID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g5pi+56S65o+Q56S65L+h5oGvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuaS5zaG93VG9hc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfpobXpnaLotoXml7bvvIzoh6rliqjov5Tlm57kuLvpobUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjogJ25vbmUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246IDIwMDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSwgdGhpcy5hdXRvUmVkaXJlY3RUaW1lKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuXHRcdFx0Y2hlY2tGb3JVcGRhdGUoKSB7XHJcblx0XHRcdFx0dGhpcy4kcG9zdCh7XHJcblx0XHRcdFx0XHR1cmw6IFwiL0Rldk1hY2hpbmUvZ2V0QXBwVXBncmFkZUluZm9cIixcclxuXHRcdFx0XHRcdGRhdGE6IHt9XHJcblx0XHRcdFx0fSkudGhlbihyZXMgPT4ge1xyXG5cdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRsZXQgbmV3VmVyc2lvbiA9IHJlcy5kYXRhLnZlcnNpb247XHJcblx0XHRcdFx0XHRsZXQgY3VycmVudFZlcnNpb24gPSB1bmkuZ2V0U3lzdGVtSW5mb1N5bmMoKTsgLy8g6I635Y+W5b2T5YmNIEFQSyDniYjmnKzlj7dcclxuXHRcdFx0XHRcdCBcclxuXHRcdFx0XHRcdGlmIChuZXdWZXJzaW9uID4gY3VycmVudFZlcnNpb24uYXBwVmVyc2lvbikge1xyXG5cdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0XHR0aXRsZTogXCLlj5HnjrDmlrDniYjmnKxcIixcclxuXHRcdFx0XHRcdFx0XHRjb250ZW50OiBcIuaYr+WQpuS4i+i9veacgOaWsOeJiOacrD9cIixcclxuXHRcdFx0XHRcdFx0XHRzdWNjZXNzOiAobW9kYWxSZXMpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdGlmIChtb2RhbFJlcy5jb25maXJtKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuZG93bmxvYWROZXdBcGsocmVzLmRhdGEuYXBrVXJsKTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHQvL3RoaXMuZG93bmxvYWROZXdBcGsocmVzLmRhdGEuYXBrVXJsKTtcclxuXHRcdFx0XHRcdFx0dGhpcy51cGRhdGVDaGVja2VkID0gdHJ1ZTsgLy8g5qCH6K6w5pu05paw5bey5qOA5p+l6L+HXHJcblx0XHRcdFx0XHRcdC8vICAgICAgLy8g5aaC5p6c5pyJ5paw54mI5pys77yM5byA5aeL5LiL6L29XHJcblx0XHRcdFx0XHRcdC8vZG93bmxvYWQocmVzLmRhdGEuYXBrVXJsKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHRcdFxyXG5cdFx0XHR9LFxyXG5cdFx0XHRcclxuXHRcdFx0ZG93bmxvYWROZXdBcGsoYXBrVXJsKSB7XHJcblx0XHRcdFx0dW5pLnNob3dUb2FzdCh7XHJcblx0XHRcdFx0XHR0aXRsZTogXCLlvIDlp4vkuIvovb3mm7TmlrAuLi5cIixcclxuXHRcdFx0XHRcdGljb246IFwibm9uZVwiLFxyXG5cdFx0XHRcdFx0ZHVyYXRpb246IDIwMDBcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHJcblx0XHRcdFx0dW5pLmRvd25sb2FkRmlsZSh7XHJcblx0XHRcdFx0XHR1cmw6IGFwa1VybCxcclxuXHRcdFx0XHRcdHN1Y2Nlc3M6IChyZXMpID0+IHtcclxuXHRcdFx0XHRcdFx0aWYgKHJlcy5zdGF0dXNDb2RlID09PSAyMDApIHtcclxuXHRcdFx0XHRcdFx0XHRwbHVzLnJ1bnRpbWUuaW5zdGFsbChyZXMudGVtcEZpbGVQYXRoLCB7XHJcblx0XHRcdFx0XHRcdFx0XHRmb3JjZTogdHJ1ZVxyXG5cdFx0XHRcdFx0XHRcdH0sIGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coXCLlronoo4XmiJDlip/vvIzph43lkK/lupTnlKhcIik7XHJcblx0XHRcdFx0XHRcdFx0XHQvL3BsdXMucnVudGltZS5yZXN0YXJ0KCk7XHJcblx0XHRcdFx0XHRcdFx0XHQvL3BsdXMucnVudGltZS5xdWl0KCk7XHJcblx0XHRcdFx0XHRcdFx0XHQvLyB1bmkubmF2aWdhdGVCYWNrKClcclxuXHRcdFx0XHRcdFx0XHR9LCBmdW5jdGlvbihlKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKFwi5a6J6KOF5aSx6LSlOlwiLCBlKTtcclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGZhaWw6IChlcnIpID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5lcnJvcihcIuS4i+i9veWksei0pTpcIiwgZXJyKTtcclxuXHRcdFx0XHRcdFx0dW5pLnNob3dUb2FzdCh7XHJcblx0XHRcdFx0XHRcdFx0dGl0bGU6IFwi5LiL6L295aSx6LSl77yM6K+35qOA5p+l572R57ucXCIsXHJcblx0XHRcdFx0XHRcdFx0aWNvbjogXCJub25lXCIsXHJcblx0XHRcdFx0XHRcdFx0ZHVyYXRpb246IDIwMDBcclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdFxyXG5cdFx0XHRyZWZyZXNoKCkge1xyXG5cdFx0XHRcdHRoaXMuZ2V0TWFjaGluZUxpc3QoKTtcclxuXHRcdFx0XHR0aGlzLmdldFByaW50SW5mbygpOyAvLyBnZXRQcmludEluZm8g5a6M5oiQ5ZCO5Lya6Ieq5Yqo6LCD55SoIGdldFdvbWRhYUlzU2hvdygpXHJcblx0XHRcdFx0Ly8g5aaC5p6c5b2T5YmN5Zyo5bel5Y2V6YCJ5oup6aG16Z2i77yM6buY6K6k5Yqg6L295bel5Y2V5YiX6KGoXHJcblx0XHRcdFx0aWYgKHRoaXMuY3VycmVudFRhYiA9PT0gNykge1xyXG5cdFx0XHRcdFx0Ly8g5qC55o2u5b2T5YmN57uR5a6a5bel5Y2V55qE54q25oCB5Yaz5a6a6buY6K6k562b6YCJ5p2h5Lu2XHJcblx0XHRcdFx0XHRsZXQgZGVmYXVsdFN0YXR1cyA9ICflvoXlvIDlt6XjgIHmnKrlvIDlt6XjgIHmmoLlgZwnO1xyXG5cdFx0XHRcdFx0aWYgKHRoaXMuaXNTaG93VGFibGVEYXRhLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgY3VycmVudE9yZGVyU3RhdHVzID0gdGhpcy5pc1Nob3dUYWJsZURhdGFbMF0uZGFhMDE4O1xyXG5cdFx0XHRcdFx0XHRpZiAoY3VycmVudE9yZGVyU3RhdHVzID09PSAn5byA5belJykge1xyXG5cdFx0XHRcdFx0XHRcdGRlZmF1bHRTdGF0dXMgPSAn5byA5belJztcclxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChjdXJyZW50T3JkZXJTdGF0dXMgPT09ICflrozlt6UnKSB7XHJcblx0XHRcdFx0XHRcdFx0ZGVmYXVsdFN0YXR1cyA9ICflrozlt6UnO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR0aGlzLmVuZ2luZWVyaW5nTm8gPSBkZWZhdWx0U3RhdHVzO1xyXG5cdFx0XHRcdFx0dGhpcy5lbmdpbmVlcmluZ05vTWFwTGlzdCA9IFtcclxuXHRcdFx0XHRcdFx0J+W+heW8gOW3peOAgeacquW8gOW3peOAgeaaguWBnCcsXHJcblx0XHRcdFx0XHRcdCflvIDlt6UnLFxyXG5cdFx0XHRcdFx0XHQn5a6M5belJ1xyXG5cdFx0XHRcdFx0XTtcclxuXHRcdFx0XHRcdHRoaXMuZ2V0V29tZGFhQnlTdGF0dXMoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblx0XHRcdGdldFByaW50SW5mbygpIHtcclxuXHRcdFx0XHR2YXIgbWFjID0gXCJcIjtcclxuXHRcdFx0XHRcclxuXHRcdFx0XHRtYWMgPSBcIjc0OjI0OmNhOjRmOmI3OjRkXCI7XHJcblx0XHRcdFx0dGhpcy4kcG9zdCh7XHJcblx0XHRcdFx0XHR1cmw6IFwiL0Rldk1hY2hpbmUvR2V0RGV2TWFjaGluZUJ5UGRhTWFjXCIsXHJcblx0XHRcdFx0XHRkYXRhOiB7XHJcblx0XHRcdFx0XHRcdHBkYU1hYzogbWFjLFxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pLnRoZW4ocmVzID0+IHtcclxuXHRcdFx0XHRcdGxldCBkZXZNYWNoaW5lID0gcmVzLmRhdGEudGJCaWxsTGlzdDtcclxuXHRcdFx0XHRcdHRoaXMubWFjaGluZU5vID0gZGV2TWFjaGluZS5tYWNoaW5lTm87XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYWNoaW5lTmFtZSA9IFwi6LCD6K+V5qih5byP77yaXCIgKyB0aGlzLm1hY2hpbmVObyArIFwi5Y+36b2/6L2u5py6XCJcclxuXHJcblx0XHRcdFx0XHR1bmkuc2V0U3RvcmFnZVN5bmMoJ21hY2hpbmVObycsIHRoaXMubWFjaGluZU5vKTtcclxuXHRcdFx0XHRcdHVuaS5zZXRTdG9yYWdlU3luYygncHJpbnRNYWMnLCBkZXZNYWNoaW5lLnByaW50TWFjKTtcclxuXHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhkZXZNYWNoaW5lLnByaW50TWFjKTtcclxuXHJcblx0XHRcdFx0XHR0aGlzLmdldFdvbWRhYUlzU2hvdygpO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcclxuXHRcdFx0XHRcclxuXHQvLyAgXHRcdFx0aWYgKHBsdXMub3MubmFtZSA9PSBcIkFuZHJvaWRcIikge1xyXG5cdC8vICBcdFx0XHRcdC8v6I635Y+W5omL5py6TUFD5Zyw5Z2AXHJcblx0Ly8gIFx0XHRcdFx0dmFyIENvbnRleHQgPSBwbHVzLmFuZHJvaWQuaW1wb3J0Q2xhc3MoXCJhbmRyb2lkLmNvbnRlbnQuQ29udGV4dFwiKTtcclxuXHQvLyAgXHRcdFx0XHR2YXIgV2lmaU1hbmFnZXIgPSBwbHVzLmFuZHJvaWQuaW1wb3J0Q2xhc3MoXCJhbmRyb2lkLm5ldC53aWZpLldpZmlNYW5hZ2VyXCIpO1xyXG5cdC8vICBcdFx0XHRcdHZhciB3aWZpTWFuYWdlciA9IHBsdXMuYW5kcm9pZC5ydW50aW1lTWFpbkFjdGl2aXR5KCkuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LldJRklfU0VSVklDRSk7XHJcblx0Ly8gIFx0XHRcdFx0dmFyIFdpZmlJbmZvID0gcGx1cy5hbmRyb2lkLmltcG9ydENsYXNzKFwiYW5kcm9pZC5uZXQud2lmaS5XaWZpSW5mb1wiKTtcclxuXHQvLyAgXHRcdFx0XHR2YXIgd2lmaUluZm8gPSB3aWZpTWFuYWdlci5nZXRDb25uZWN0aW9uSW5mbygpO1xyXG5cdC8vICBcdFx0XHRcdG1hYyA9IHdpZmlJbmZvLmdldE1hY0FkZHJlc3MoKTtcclxuXHRcdFx0XHRcdFxyXG5cdC8vICBcdFx0XHRcdC8v5aaC5p6cbWFj5Li64oCcMDI6MDA6MDA6MDA6MDA6MDDigJ3vvIzliJnlj6/og73mmK/lronljZM2LjDku6XkuIrniYjmnKzvvIzliJnkvb/nlKjlj6bkuIDnp43mlrnms5Xojrflj5ZtYWPlnLDlnYBcclxuXHQvLyAgXHRcdFx0XHRpZiAobWFjID09IFwiMDI6MDA6MDA6MDA6MDA6MDBcIikge1xyXG5cdC8vICBcdFx0XHRcdFx0bWFjID0gdGhpcy5nZXRNYWNOZXcoKTtcclxuXHQvLyAgXHRcdFx0XHR9XHJcblx0Ly8gIFx0XHRcdFx0Ly/lpoLmnpxtYWPkvb/nlKjmlrDmlrnms5Xkvp3nhLbmmK/igJwwMjowMDowMDowMDowMDowMOKAneWImeS4jei/m+ihjOS/neWtmFxyXG5cdC8vICBcdFx0XHRcdGlmIChtYWMgPT0gXCIwMjowMDowMDowMDowMDowMFwiKSB7XHJcblx0Ly8gIFx0XHRcdFx0XHRyZXR1cm47XHJcblx0Ly8gIFx0XHRcdFx0fVxyXG5cdC8vICBcdFx0XHRcdHVuaS5zZXRTdG9yYWdlU3luYygncGRhTWFjJywgbWFjKTtcclxuXHJcblx0Ly8gIFx0XHRcdFx0dGhpcy4kcG9zdCh7XHJcblx0Ly8gIFx0XHRcdFx0XHR1cmw6IFwiL0Rldk1hY2hpbmUvR2V0RGV2TWFjaGluZUJ5UGRhTWFjXCIsXHJcblx0Ly8gIFx0XHRcdFx0XHRkYXRhOiB7XHJcblx0Ly8gIFx0XHRcdFx0XHRcdHBkYU1hYzogbWFjLFxyXG5cdC8vICBcdFx0XHRcdFx0fVxyXG5cdC8vICBcdFx0XHRcdH0pLnRoZW4ocmVzID0+IHtcclxuXHQvLyAgXHRcdFx0XHRcdGxldCBkZXZNYWNoaW5lID0gcmVzLmRhdGEudGJCaWxsTGlzdDtcclxuXHQvLyAgXHRcdFx0XHRcdHRoaXMubWFjaGluZU5vID0gZGV2TWFjaGluZS5tYWNoaW5lTm87XHJcblx0Ly8gIFx0XHRcdFx0XHR0aGlzLm1hY2hpbmVOYW1lID0gXCLlvZPliY3mnLrlj7DvvJpcIiArIHRoaXMubWFjaGluZU5vICsgXCLlj7fpvb/ova7mnLpcIjtcclxuXHJcblx0Ly8gIFx0XHRcdFx0XHR1bmkuc2V0U3RvcmFnZVN5bmMoJ21hY2hpbmVObycsIHRoaXMubWFjaGluZU5vKTtcclxuXHQvLyAgXHRcdFx0XHRcdHVuaS5zZXRTdG9yYWdlU3luYygncHJpbnRNYWMnLCBkZXZNYWNoaW5lLnByaW50TWFjKTtcclxuIFxyXG5cclxuXHQvLyAgXHRcdFx0XHRcdHRoaXMuZ2V0V29tZGFhSXNTaG93KCk7XHJcblxyXG5cdC8vICBcdFx0XHRcdH0pO1xyXG5cdC8vICBcdFx0XHR9XHJcblx0XHRcdH0sXHJcblx0XHRcdHNhdmUoKSB7XHJcblx0XHRcdFx0bGV0IGRhdGEgPSB0aGlzLnNlbGVjdGVkSXRlbXMoKTtcclxuXHJcblx0XHRcdFx0aWYgKGRhdGEubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kc2hvd01lc3NhZ2UoXCLor7fpgInmi6nkuIDkuKrlt6XljZVcIik7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChkYXRhLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiRzaG93TWVzc2FnZShcIuS4gOasoeWPquiDvemAieWPluS4gOS4quW3peWNlVwiKTtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vbGV0IGZpcnN0VmFsdWUgPSBkYXRhWzBdW1wibW9sZElkXCJdOyAvLyDojrflj5bnrKzkuIDkuKrlr7nosaHnmoTmjIflrprlsZ7mgKflgLxcclxuXHJcblx0XHRcdFx0Ly8vLyDkvb/nlKggZXZlcnkg5pa55rOV5qOA5p+l5omA5pyJ5a+56LGh55qE6K+l5bGe5oCn5YC85piv5ZCm5LiA6Ie0XHJcblx0XHRcdFx0Ly9sZXQgZmxhZyA9IGRhdGEuZXZlcnkoaXRlbSA9PiBpdGVtW1wibW9sZElkXCJdID09PSBmaXJzdFZhbHVlKTtcclxuXHRcdFx0XHQvL2lmICghZmxhZykge1xyXG5cdFx0XHRcdC8vXHR0aGlzLiRzaG93TWVzc2FnZShcIumAieWPlueahFwiICsgZGF0YS5sZW5ndGggKyBcIuS4quW3peWNleS4reeahOaooeWFt+e8luWPt+S4jeS4gOiHtFwiKTtcclxuXHRcdFx0XHQvL1x0cmV0dXJuO1xyXG5cdFx0XHRcdC8vfVxyXG5cclxuXHRcdFx0XHRsZXQgb3JkZXJTZWxlY3QgPSBbXTtcclxuXHJcblx0XHRcdFx0ZGF0YS5mb3JFYWNoKHMgPT4ge1xyXG5cdFx0XHRcdFx0bGV0IGVudGl0eSA9IHtcclxuXHRcdFx0XHRcdFx0b3JkZXJJZDogcy5pZCxcclxuXHRcdFx0XHRcdFx0b3JkZXJObzogcy5kYWEwMDEsXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRvcmRlclNlbGVjdC5wdXNoKGVudGl0eSk7XHJcblx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdGxldCBlZGl0RGF0ZSA9IHRoaXMuZm9ybWF0RGF0ZShuZXcgRGF0ZSgpKTtcclxuXHJcblx0XHRcdFx0dGhpcy4kcG9zdCh7XHJcblx0XHRcdFx0XHR1cmw6IFwiL01lc09yZGVyU2VsZWN0L0FkZFwiLFxyXG5cdFx0XHRcdFx0ZGF0YToge1xyXG5cdFx0XHRcdFx0XHRtYWNoaW5lTm86IHRoaXMubWFjaGluZU5vLFxyXG5cdFx0XHRcdFx0XHRlZGl0RGF0ZTogZWRpdERhdGUsXHJcblx0XHRcdFx0XHRcdGl0ZW06IG9yZGVyU2VsZWN0XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSkudGhlbihyZXMgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHJlcy5kYXRhLnRiQmlsbExpc3QpIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5nZXRXb21kYWFJc1Nob3coKTtcclxuXHRcdFx0XHRcdFx0dW5pLnNob3dUb2FzdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+S/neWtmOW3peWNleaIkOWKnycsXHJcblx0XHRcdFx0XHRcdFx0Ly90aXRsZTogJ+WwhuazqOWhkeacuuW8gOWQiOaooeaVsOa4hTAnLFxyXG5cdFx0XHRcdFx0XHRcdC8v5bCG5YC86K6+572u5Li6IHN1Y2Nlc3Mg5oiW6ICF55u05o6l5LiN55So5YaZaWNvbui/meS4quWPguaVsFxyXG5cdFx0XHRcdFx0XHRcdGljb246ICdzdWNjZXNzJyxcclxuXHRcdFx0XHRcdFx0XHQvL+aYvuekuuaMgee7reaXtumXtOS4uiA156eSXHJcblx0XHRcdFx0XHRcdFx0ZHVyYXRpb246IDUwMDBcclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG5cdFx0XHRcdH0pXHJcblxyXG5cdFx0XHR9LFxyXG5cdFx0XHRnZXRNYWNOZXcoKSB7XHJcblx0XHRcdFx0dmFyIHN0ciA9IFwiXCI7XHJcblx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdGlmIChwbHVzLm9zLm5hbWUgPT0gXCJBbmRyb2lkXCIpIHtcclxuXHRcdFx0XHRcdFx0dmFyIE5ldHdvcmtJbnRlcmZhY2UgPSBwbHVzLmFuZHJvaWQuaW1wb3J0Q2xhc3MoXCJqYXZhLm5ldC5OZXR3b3JrSW50ZXJmYWNlXCIpO1xyXG5cdFx0XHRcdFx0XHR2YXIgbmV0d29ya0ludGVyZmFjZSA9IE5ldHdvcmtJbnRlcmZhY2UuZ2V0QnlOYW1lKFwid2xhbjBcIik7XHJcblx0XHRcdFx0XHRcdHZhciBieXRlcyA9IG5ldHdvcmtJbnRlcmZhY2UuZ2V0SGFyZHdhcmVBZGRyZXNzKCk7XHJcblx0XHRcdFxyXG5cdFx0XHRcdFx0XHQvL+WwhmJ5dGVbXSDovazmjaLmiJAgU3RyaW5nXHJcblx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdFx0XHR2YXIgdG1wID0gXCJcIjtcclxuXHRcdFx0XHRcdFx0XHR2YXIgbnVtID0gYnl0ZXNbaV07XHJcblx0XHRcdFx0XHRcdFx0aWYgKG51bSA8IDApIHtcclxuXHRcdFx0XHRcdFx0XHRcdHRtcCA9ICgyNTUgKyBudW0gKyAxKS50b1N0cmluZygxNik7XHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdHRtcCA9IG51bS50b1N0cmluZygxNik7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdGlmICh0bXAubGVuZ3RoID09IDEpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHRtcCA9IFwiMFwiICsgdG1wO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRzdHIgKz0gKGkgPT0gMCkgPyAodG1wKSA6IChcIjpcIiArIHRtcCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9IGNhdGNoIChlcnIpIHtcclxuXHRcdFx0XHRcdHN0ciA9IFwiMDI6MDA6MDA6MDA6MDA6MDBcIjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuIHN0cjtcclxuXHRcdFx0fSxcclxuXHJcbiAgICAgICAgICAgIGNhbmNlbCgpIHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5tYWNoaW5lTm8pIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8g55u05o6l55SoIGZsYWcg5Yik5patXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5oYXNCaW5kZWRDdXR0ZXJGbGFnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdW5pLnNob3dUb2FzdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn5b2T5YmN5bel5Y2V5bey57uR5a6a5YiA5YW377yM5LiN6IO95riF56m66YeN6YCJJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2Vycm9yJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246IDIwMDBcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGVkaXREYXRlID0gdGhpcy5mb3JtYXREYXRlKG5ldyBEYXRlKCkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4cyA9IFtdO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuJHBvc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgIHVybDogXCIvTWVzT3JkZXJTZWxlY3QvUmVtb3ZlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lTm86IHRoaXMubWFjaGluZU5vLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlZGl0RGF0ZTogZWRpdERhdGVcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfSkudGhlbihyZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXMuZGF0YS50YkJpbGxMaXN0ID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzU2hvd1RhYmxlRGF0YSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9LFxyXG5cclxuXHRcdFx0Zm9ybWF0RGF0ZShkYXRlKSB7XHJcblx0XHRcdFx0bGV0IHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7IC8vIOiOt+WPluW5tOS7vVxyXG5cdFx0XHRcdGxldCBtb250aCA9IFN0cmluZyhkYXRlLmdldE1vbnRoKCkgKyAxKS5wYWRTdGFydCgyLCAnMCcpOyAvLyDojrflj5bmnIjku73lubbooaXpm7ZcclxuXHRcdFx0XHRsZXQgZGF5ID0gU3RyaW5nKGRhdGUuZ2V0RGF0ZSgpKS5wYWRTdGFydCgyLCAnMCcpOyAvLyDojrflj5bml6XmnJ/lubbooaXpm7ZcclxuXHRcdFx0XHRyZXR1cm4gYCR7eWVhcn0tJHttb250aH0tJHtkYXl9YDsgLy8g6L+U5Zue5qC85byP5YyW5ZCO55qE5a2X56ym5LiyXHJcblx0XHRcdH0sXHJcblx0XHRcdHNlbGVjdGlvbkNoYW5nZShlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyDljZXpgInnm7TmjqXotYvlgLxcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleHMgPSBbZS5kZXRhaWwuaW5kZXhdO1xyXG5cdFx0XHR9LFxyXG5cclxuXHRcdFx0c2VsZWN0ZWRJdGVtcygpIHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5zZWxlY3RlZEluZGV4cy5tYXAoaSA9PiB0aGlzLnRhYmxlRGF0YVtpXSlcclxuXHRcdFx0fSxcclxuXHJcblxyXG5cdFx0XHRjaGFuZ2VUYWIoaW5kZXgpIHtcclxuXHRcdFx0XHR0aGlzLmN1cnJlbnRUYWIgPSBpbmRleDtcclxuXHRcdFx0XHQvLyDlvZPliIfmjaLliLDlt6XljZXpgInmi6npobXpnaIoaW5kZXggPT09IDcp5pe26Ieq5Yqo5Yi35pawXHJcblx0XHRcdFx0aWYgKGluZGV4ID09PSA3KSB7XHJcblx0XHRcdFx0XHR0aGlzLnJlZnJlc2goKTtcclxuXHRcdFx0XHRcdC8vIOWQr+WKqOWumuaXtuWIt+aWsFxyXG5cdFx0XHRcdFx0dGhpcy5zdGFydEF1dG9SZWZyZXNoKCk7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdC8vIOemu+W8gOW3peWNlemAieaLqemhtemdouaXtuWBnOatouWumuaXtuWIt+aWsFxyXG5cdFx0XHRcdFx0dGhpcy5zdG9wQXV0b1JlZnJlc2goKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly8g6YeN572u6Ieq5Yqo6Lez6L2s6K6h5pe25ZmoXHJcblx0XHRcdFx0dGhpcy5yZXNldEF1dG9SZWRpcmVjdFRpbWVyKCk7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coaW5kZXgpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRvbk1hY2hpbmVDaGFuZ2UoZXZlbnQpIHtcclxuXHJcblx0XHRcdFx0dGhpcy5tYWNoaW5lTmFtZSA9IGV2ZW50O1xyXG5cclxuXHRcdFx0XHR0aGlzLm1hY2hpbmVObyA9IHRoaXMubWFjaGluZVt0aGlzLm1hY2hpbmVMaXN0LmluZGV4T2YoZXZlbnQpXS5tYWNoaW5lTm87XHJcblxyXG5cdFx0XHRcdHVuaS5jbGVhclN0b3JhZ2VTeW5jKCk7XHJcblxyXG5cdFx0XHRcdHVuaS5zZXRTdG9yYWdlU3luYygnbWFjaGluZU5vJywgdGhpcy5tYWNoaW5lTm8pO1xyXG5cdFx0XHRcdHVuaS5zZXRTdG9yYWdlU3luYygnbWFjaGluZU5hbWUnLCB0aGlzLm1hY2hpbmVOYW1lKTtcclxuXHJcblx0XHRcdFx0dGhpcy5nZXRXb21kYWFJc1Nob3coKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0b25FbmdpbmVlcmluZ05vQ2hhbmdlKGV2ZW50KSB7XHJcblxyXG5cdFx0XHRcdGxldCBvcmRlID0gdGhpcy5lbmdpbmVlcmluZ05vTGlzdFt0aGlzLmVuZ2luZWVyaW5nTm9NYXBMaXN0LmluZGV4T2YoZXZlbnQpXTtcclxuXHJcblx0XHRcdFx0dGhpcy5lbmdpbmVlcmluZ05vID0gb3JkZS5tb2xkSWQ7XHJcblxyXG5cdFx0XHRcdHRoaXMuZ2V0V29tZGFhKCk7XHJcblxyXG5cdFx0XHR9LFxyXG5cdFx0XHRnZXRNYWNoaW5lTGlzdCgpIHtcclxuXHRcdFx0XHR0aGlzLiRwb3N0KHtcclxuXHRcdFx0XHRcdHVybDogXCIvTWVzTWFjaGluZS9HZXRJbmplY3Rpb25NYWNoaW5lXCIsXHJcblx0XHRcdFx0fSkudGhlbihyZXMgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5tYWNoaW5lID0gcmVzLmRhdGEudGJCaWxsTGlzdDtcclxuXHRcdFx0XHRcdHRoaXMubWFjaGluZUxpc3QgPSB0aGlzLm1hY2hpbmUubWFwKHMgPT4gcy5tYWNoaW5lTmFtZSk7XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fSxcclxuICAgICAgICAgICAgLy/ojrflj5booajmoLznmoTmlbDmja7mupBcclxuICAgICAgICAgICAgZ2V0V29tZGFhSXNTaG93KCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kcG9zdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBcIi9Xb21kYWEvR2V0V29tZGFhc0J5U2hvd1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZU5vOiB0aGlzLm1hY2hpbmVObyxcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KS50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1Nob3dUYWJsZURhdGEgPSByZXMuZGF0YS50YkJpbGxMaXN0O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyDlj6rliKTmlq3nrKzkuIDmnaHvvIjlj6rlhYHorrjkuIDmnaHlt6XljZXvvIlcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcmRlciA9IHRoaXMuaXNTaG93VGFibGVEYXRhWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBoYXNCaW5kZWRDdXR0ZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAob3JkZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzQmluZGVkQ3V0dGVyID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcmRlci5vdXRUb29sSWQgJiYgb3JkZXIub3V0VG9vbElkLnRvU3RyaW5nKCkudHJpbSgpICE9PSAnJykgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcmRlci5vdXRUb29sQ29kZSAmJiBvcmRlci5vdXRUb29sQ29kZS50cmltKCkgIT09ICcnKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9yZGVyLm91dFRvb2xOYW1lICYmIG9yZGVyLm91dFRvb2xOYW1lLnRyaW0oKSAhPT0gJycpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAvLyDlrZjlgqjliLAgZGF0YSDlj5jph49cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc0JpbmRlZEN1dHRlckZsYWcgPSBoYXNCaW5kZWRDdXR0ZXI7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzU2hvd1RhYmxlRGF0YS5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmkuc2V0U3RvcmFnZVN5bmMoJ2RhYTAwMScsIHRoaXMuaXNTaG93VGFibGVEYXRhWzBdLmRhYTAwMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuaS5zZXRTdG9yYWdlU3luYygnaWQnLCB0aGlzLmlzU2hvd1RhYmxlRGF0YVswXS5pZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICBpc1Nob3dUYWIoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1Nob3dUYWJsZURhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHVuaS5zaG93VG9hc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+W3suacieato+WcqOaTjeS9nOeahOW3peWNle+8jOS4jeiDveWGjeasoemAieaLqScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb246ICdlcnJvcicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAyMDAwXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuaXNTaG93ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIC8vIOm7mOiupOmAieS4reKAnOW+heW8gOW3peKAnVxyXG4gICAgICAgICAgICAgICAgdGhpcy5lbmdpbmVlcmluZ05vID0gJ+W+heW8gOW3peOAgeacquW8gOW3peOAgeaaguWBnCc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlRGF0YSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgLy8g5LiL5ouJ5qGG5Y+q5pi+56S65ZCI5bm25ZCO55qE54q25oCB5ZKM5YW25a6D54q25oCBXHJcbiAgICAgICAgICAgICAgICB0aGlzLmVuZ2luZWVyaW5nTm9NYXBMaXN0ID0gW1xyXG4gICAgICAgICAgICAgICAgICAgICflvoXlvIDlt6XjgIHmnKrlvIDlt6XjgIHmmoLlgZwnLFxyXG4gICAgICAgICAgICAgICAgICAgICflvIDlt6UnLFxyXG4gICAgICAgICAgICAgICAgICAgICflrozlt6UnXHJcbiAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICAgICAgLy8g6buY6K6k5pi+56S64oCc5b6F5byA5bel4oCd5bel5Y2VXHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldFdvbWRhYUJ5U3RhdHVzKCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIC8vIOS4i+aLieahhumAieS4reWQju+8jOaMieeKtuaAgeetm+mAieW3peWNlVxyXG4gICAgICAgICAgICBvbkVuZ2luZWVyaW5nTm9DaGFuZ2Uoc3RhdHVzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVuZ2luZWVyaW5nTm8gPSBzdGF0dXM7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldFdvbWRhYUJ5U3RhdHVzKCk7XHJcbiAgICAgICAgICAgIH0sXHJcblx0XHRcdGdldFdvbWRhYSgpIHtcclxuXHJcblx0XHRcdFx0bGV0IGVkaXREYXRlID0gdGhpcy5mb3JtYXREYXRlKG5ldyBEYXRlKCkpO1xyXG5cclxuXHRcdFx0XHR0aGlzLiRwb3N0KHtcclxuXHRcdFx0XHRcdHVybDogXCIvV29tZGFhL0dldFdvbWRhYXNCeU1hY2hpbmVcIixcclxuXHRcdFx0XHRcdGRhdGE6IHtcclxuXHRcdFx0XHRcdFx0bWFjaGluZU5vOiB0aGlzLm1hY2hpbmVObyxcclxuXHRcdFx0XHRcdFx0ZWRpdERhdGU6IGVkaXREYXRlXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSkudGhlbihyZXMgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy50YWJsZURhdGEgPSByZXMuZGF0YS50YkJpbGxMaXN0O1xyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0sXHJcbiAgICAgICAgICAgIC8vIOaMieW3peWNleeKtuaAgeetm+mAieW3peWNlVxyXG4gICAgICAgICAgICBnZXRXb21kYWFCeVN0YXR1cygpIHtcclxuICAgICAgICAgICAgICAgIGxldCBlZGl0RGF0ZSA9IHRoaXMuZm9ybWF0RGF0ZShuZXcgRGF0ZSgpKTtcclxuICAgICAgICAgICAgICAgIGxldCBzdGF0dXNBcnIgPSBbXTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmVuZ2luZWVyaW5nTm8gPT09ICflvoXlvIDlt6XjgIHmnKrlvIDlt6XjgIHmmoLlgZwnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzQXJyID0gWyflvoXlvIDlt6UnLCAn5pyq5byA5belJywgJ+aaguWBnCddO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0dXNBcnIgPSBbdGhpcy5lbmdpbmVlcmluZ05vXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuJHBvc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgIHVybDogXCIvV29tZGFhL0dldFdvbWRhYXNCeUVuZ2luZWVyaW5nTm9cIixcclxuICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVObzogdGhpcy5tYWNoaW5lTm8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyU3RhdHVzOiBzdGF0dXNBcnIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVkaXREYXRlOiBlZGl0RGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pLnRoZW4ocmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYmxlRGF0YSA9IHJlcy5kYXRhLnRiQmlsbExpc3Q7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSxcclxuXHRcdFx0dG9EZXRhaWwoaXRlbSkge1xyXG5cdFx0XHRcdHRoaXMub3JkZXJJZCA9IGl0ZW0uaWQ7XHJcblx0XHRcdFx0dGhpcy5zZWxlY3RlZE9yZGVyID0gaXRlbS5kYWEwMDE7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByb2R1Y3RDb2RlID0gaXRlbS5kYWEwMDI7IC8vIOS6p+WTgee8lueggVxyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9kdWN0U3BlYyA9IGl0ZW0uZGFhMDA0OyAvLyDkuqflk4Hop4TmoLxcclxuXHRcdFx0XHR0aGlzLmN1cnJlbnRUYWIgPSAwO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRcclxuXHRcdFx0Ly8g6I635Y+W5byA5bel5oyJ6ZKu55qEY2xhc3NcclxuXHRcdFx0Z2V0U3RhcnRCdG5DbGFzcyhpdGVtKSB7XHJcblx0XHRcdFx0Y29uc3QgaXNTZWxlY3RlZCA9IHRoaXMuaXNTaG93VGFibGVEYXRhLmxlbmd0aCA+IDAgJiYgdGhpcy5pc1Nob3dUYWJsZURhdGFbMF0uZGFhMDAxID09PSBpdGVtLmRhYTAwMTtcclxuXHRcdFx0XHRpZiAoaXNTZWxlY3RlZCkge1xyXG5cdFx0XHRcdFx0cmV0dXJuICdzdGFydC1idG4gc3RhcnQtYnRuLXNlbGVjdGVkJzsgLy8g5b2T5YmN6YCJ5Lit55qE5bel5Y2V77yM57u/6ImyXHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybiAnc3RhcnQtYnRuJztcclxuXHRcdFx0fSxcclxuXHRcdFx0XHJcblx0XHRcdC8vIOWIpOaWreW8gOW3peaMiemSruaYr+WQpuemgeeUqFxyXG5cdFx0XHRpc1N0YXJ0QnRuRGlzYWJsZWQoaXRlbSkge1xyXG5cdFx0XHRcdC8vIOWmguaenOW3sue7j+aciemAieS4reeahOW3peWNle+8jOS4lOW9k+WJjemhueS4jeaYr+mAieS4reeahOW3peWNle+8jOWImeemgeeUqFxyXG5cdFx0XHRcdGlmICh0aGlzLmlzU2hvd1RhYmxlRGF0YS5sZW5ndGggPiAwICYmIHRoaXMuaXNTaG93VGFibGVEYXRhWzBdLmRhYTAwMSAhPT0gaXRlbS5kYWEwMDEpIHtcclxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH0sXHJcblx0XHRcdFxyXG5cdFx0XHQvLyDliKTmlq3mmoLlgZzmjInpkq7mmK/lkKbnpoHnlKhcclxuXHRcdFx0aXNQYXVzZUJ0bkRpc2FibGVkKGl0ZW0pIHtcclxuXHRcdFx0XHQvLyDlpoLmnpzlt7Lnu4/mnInpgInkuK3nmoTlt6XljZXvvIzkuJTlvZPliY3pobnkuI3mmK/pgInkuK3nmoTlt6XljZXvvIzliJnnpoHnlKhcclxuXHRcdFx0XHRpZiAodGhpcy5pc1Nob3dUYWJsZURhdGEubGVuZ3RoID4gMCAmJiB0aGlzLmlzU2hvd1RhYmxlRGF0YVswXS5kYWEwMDEgIT09IGl0ZW0uZGFhMDAxKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly8g5aaC5p6c6L+Y5rKh5pyJ6YCJ5Lit5Lu75L2V5bel5Y2V77yM5Lmf56aB55So5pqC5YGc5oyJ6ZKuXHJcblx0XHRcdFx0aWYgKHRoaXMuaXNTaG93VGFibGVEYXRhLmxlbmd0aCA9PT0gMCkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fSxcclxuXHRcdFx0XHJcblx0XHRcdC8vIOiOt+WPluW8gOW3peaMiemSruaWh+acrFxyXG5cdFx0XHRnZXRTdGFydEJ0blRleHQoaXRlbSkge1xyXG5cdFx0XHRcdGNvbnN0IGlzU2VsZWN0ZWQgPSB0aGlzLmlzU2hvd1RhYmxlRGF0YS5sZW5ndGggPiAwICYmIHRoaXMuaXNTaG93VGFibGVEYXRhWzBdLmRhYTAwMSA9PT0gaXRlbS5kYWEwMDE7XHJcblx0XHRcdFx0aWYgKGlzU2VsZWN0ZWQpIHtcclxuXHRcdFx0XHRcdHJldHVybiAn6L2s6Lez5oql5bel55WM6Z2iJztcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuICflvIDlt6UnO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRcclxuXHRcdFx0Ly8g5aSE55CG5byA5belXHJcblx0XHRcdGFzeW5jIGhhbmRsZVN0YXJ0V29yayhpdGVtKSB7XHJcblx0XHRcdFx0Ly8g5Yik5pat5b2T5YmN5bel5Y2V5piv5ZCm5bey6YCJ5LitXHJcblx0XHRcdFx0Y29uc3QgaXNTZWxlY3RlZCA9IHRoaXMuaXNTaG93VGFibGVEYXRhLmxlbmd0aCA+IDAgJiYgdGhpcy5pc1Nob3dUYWJsZURhdGFbMF0uZGFhMDAxID09PSBpdGVtLmRhYTAwMTtcclxuXHRcdFx0XHRcclxuXHRcdFx0XHRpZiAoaXNTZWxlY3RlZCkge1xyXG5cdFx0XHRcdFx0Ly8g5aaC5p6c5bey6YCJ5Lit77yM5YiZ5YWI6Lez6L2s5Yiw5Li755WM6Z2i77yM54S25ZCO6Lez6L2s5Yiw5oql5bel55WM6Z2iXHJcblx0XHRcdFx0XHR0aGlzLnRvRGV0YWlsKGl0ZW0pO1xyXG5cdFx0XHRcdFx0Ly8g5bu26L+f6Lez6L2s5Yiw5oql5bel55WM6Z2iXHJcblx0XHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcclxuXHRcdFx0XHRcdFx0dGhpcy5jdXJyZW50VGFiID0gNDtcclxuXHRcdFx0XHRcdH0sIDEwMCk7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdC8vIOWmguaenOacqumAieS4re+8jOWImeaJp+ihjOW8gOW3pemAu+i+kVxyXG5cdFx0XHRcdFx0bGV0IG9yZGVyU2VsZWN0ID0gW3tcclxuXHRcdFx0XHRcdFx0b3JkZXJJZDogaXRlbS5pZCxcclxuXHRcdFx0XHRcdFx0b3JkZXJObzogaXRlbS5kYWEwMDFcclxuXHRcdFx0XHRcdH1dO1xyXG5cdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRsZXQgZWRpdERhdGUgPSB0aGlzLmZvcm1hdERhdGUobmV3IERhdGUoKSk7XHJcblx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdHRoaXMuJHBvc3Qoe1xyXG5cdFx0XHRcdFx0XHR1cmw6IFwiL01lc09yZGVyU2VsZWN0L0FkZFwiLFxyXG5cdFx0XHRcdFx0XHRkYXRhOiB7XHJcblx0XHRcdFx0XHRcdFx0bWFjaGluZU5vOiB0aGlzLm1hY2hpbmVObyxcclxuXHRcdFx0XHRcdFx0XHRlZGl0RGF0ZTogZWRpdERhdGUsXHJcblx0XHRcdFx0XHRcdFx0aXRlbTogb3JkZXJTZWxlY3RcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSkudGhlbihhc3luYyByZXMgPT4ge1xyXG5cdFx0XHRcdFx0XHRpZiAocmVzLmRhdGEudGJCaWxsTGlzdCkge1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZ2V0V29tZGFhSXNTaG93KCk7XHJcblx0XHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdFx0Ly8g6LCD55So5ZCO56uv5pa55rOV57uR5a6a5pWw6YeH5qCH5b+XXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgYmluZFN1Y2Nlc3MgPSBhd2FpdCB0aGlzLmJpbmREYXRhQ29sbGVjdGlvbkZsYWcoaXRlbS5kYWEwMDEpO1xyXG5cdFx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdC8vIOe7keWumuaIkOWKn+WQjuWGjeaPkOekuuW8gOW3peaIkOWKn1xyXG5cdFx0XHRcdFx0XHRcdGlmIChiaW5kU3VjY2Vzcykge1xyXG5cdFx0XHRcdFx0XHRcdFx0dW5pLnNob3dUb2FzdCh7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiAn5byA5bel5oiQ5YqfJyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWNvbjogJ3N1Y2Nlc3MnLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRkdXJhdGlvbjogMjAwMFxyXG5cdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblx0XHRcdFxyXG5cdFx0XHQvLyDmlrDlop7vvJrnu5HlrprmlbDph4fmoIflv5fmlrnms5VcclxuXHRcdFx0YXN5bmMgYmluZERhdGFDb2xsZWN0aW9uRmxhZyhvcmRlck5vKSB7XHJcblx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuJHBvc3Qoe1xyXG5cdFx0XHRcdFx0XHR1cmw6ICcvTWVzT3JkZXJTZWxlY3QvQWRkQnlTYycsXHJcblx0XHRcdFx0XHRcdGRhdGE6IHtcclxuXHRcdFx0XHRcdFx0XHRtYWNoaW5lTm86IHRoaXMubWFjaGluZU5vLFxyXG5cdFx0XHRcdFx0XHRcdGVkaXREYXRlOiBlZGl0RGF0ZSxcclxuXHRcdFx0XHRcdFx0XHRpdGVtOiBvcmRlclNlbGVjdFxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0aWYgKHJlcyAmJiByZXMuc3RhdHVzID09PSAwKSB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKCfmlbDph4fmoIflv5fnu5HlrprmiJDlip8nKTtcclxuXHRcdFx0XHRcdFx0dGhpcy4kc2hvd01lc3NhZ2UoJ+aVsOmHh+agh+W/l+e7keWumuaIkOWKnycpO1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ+aVsOmHh+agh+W/l+e7keWumuWksei0pTonLCByZXMubWVzc2FnZSB8fCAn5pyq55+l6ZSZ6K+vJyk7XHJcblx0XHRcdFx0XHRcdHRoaXMuJHNob3dNZXNzYWdlKCfmlbDph4fmoIflv5fnu5HlrprlpLHotKUnKTtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gY2F0Y2ggKGVycikge1xyXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcign57uR5a6a5pWw6YeH5qCH5b+X6ZSZ6K+vOicsIGVycik7XHJcblx0XHRcdFx0XHR0aGlzLiRzaG93TWVzc2FnZSgn57uR5a6a5pWw6YeH5qCH5b+X5aSx6LSlJyk7XHJcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRcclxuXHRcdFx0Ly8g5aSE55CG5pqC5YGc77yI5L2/55So5riF56m66YeN6YCJ55qE6YC76L6R77yJXHJcblx0XHRcdGFzeW5jIGhhbmRsZVBhdXNlV29yayhpdGVtKSB7XHJcblx0XHRcdFx0aWYgKCF0aGlzLm1hY2hpbmVObykge1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdC8vIOebtOaOpeeUqCBmbGFnIOWIpOaWrVxyXG5cdFx0XHRcdGlmICh0aGlzLmhhc0JpbmRlZEN1dHRlckZsYWcpIHtcclxuXHRcdFx0XHRcdHVuaS5zaG93VG9hc3Qoe1xyXG5cdFx0XHRcdFx0XHR0aXRsZTogJ+W9k+WJjeW3peWNleW3sue7keWumuWIgOWFt++8jOS4jeiDveaaguWBnCcsXHJcblx0XHRcdFx0XHRcdGljb246ICdlcnJvcicsXHJcblx0XHRcdFx0XHRcdGR1cmF0aW9uOiAyMDAwXHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRsZXQgZWRpdERhdGUgPSB0aGlzLmZvcm1hdERhdGUobmV3IERhdGUoKSk7XHJcblx0XHRcdFx0dGhpcy5zZWxlY3RlZEluZGV4cyA9IFtdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0dGhpcy4kcG9zdCh7XHJcblx0XHRcdFx0XHR1cmw6IFwiL01lc09yZGVyU2VsZWN0L1JlbW92ZVwiLFxyXG5cdFx0XHRcdFx0ZGF0YToge1xyXG5cdFx0XHRcdFx0XHRtYWNoaW5lTm86IHRoaXMubWFjaGluZU5vLFxyXG5cdFx0XHRcdFx0XHRlZGl0RGF0ZTogZWRpdERhdGVcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0fSkudGhlbihyZXMgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHJlcy5kYXRhLnRiQmlsbExpc3QgPiAwKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuaXNTaG93VGFibGVEYXRhID0gW107XHJcblx0XHRcdFx0XHRcdHVuaS5zaG93VG9hc3Qoe1xyXG5cdFx0XHRcdFx0XHRcdHRpdGxlOiAn5bel5Y2V5bey5pqC5YGcJyxcclxuXHRcdFx0XHRcdFx0XHRpY29uOiAnc3VjY2VzcycsXHJcblx0XHRcdFx0XHRcdFx0ZHVyYXRpb246IDIwMDBcclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0Ly8g5pqC5YGc5oiQ5Yqf5ZCO77yM5Yi35paw5b2T5YmN6aG16Z2iXHJcblx0XHRcdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMucmVmcmVzaCgpO1xyXG5cdFx0XHRcdFx0XHR9LCA1MDApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRcdFxyXG5cdFx0XHQvLyDlkK/liqjoh6rliqjliLfmlrBcclxuXHRcdFx0c3RhcnRBdXRvUmVmcmVzaCgpIHtcclxuXHRcdFx0XHQvLyDlhYjmuIXpmaTnjrDmnInlrprml7blmahcclxuXHRcdFx0XHR0aGlzLnN0b3BBdXRvUmVmcmVzaCgpO1xyXG5cdFx0XHRcdC8vIOWPquWcqOW3peWNlemAieaLqemhtemdouWQr+WKqOWumuaXtuWIt+aWsFxyXG5cdFx0XHRcdGlmICh0aGlzLmN1cnJlbnRUYWIgPT09IDcpIHtcclxuXHRcdFx0XHRcdHRoaXMuYXV0b1JlZnJlc2hUaW1lciA9IHNldEludGVydmFsKCgpID0+IHtcclxuXHRcdFx0XHRcdFx0aWYgKHRoaXMuY3VycmVudFRhYiA9PT0gNykge1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMucmVmcmVzaCgpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9LCB0aGlzLmF1dG9SZWZyZXNoSW50ZXJ2YWwpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0XHRcclxuXHRcdFx0Ly8g5YGc5q2i6Ieq5Yqo5Yi35pawXHJcblx0XHRcdHN0b3BBdXRvUmVmcmVzaCgpIHtcclxuXHRcdFx0XHRpZiAodGhpcy5hdXRvUmVmcmVzaFRpbWVyKSB7XHJcblx0XHRcdFx0XHRjbGVhckludGVydmFsKHRoaXMuYXV0b1JlZnJlc2hUaW1lcik7XHJcblx0XHRcdFx0XHR0aGlzLmF1dG9SZWZyZXNoVGltZXIgPSBudWxsO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHRcdGNvbXB1dGVkOiB7fVxyXG5cdH07XHJcbjwvc2NyaXB0PlxyXG5cclxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XHJcblxyXG4gICAgOmRlZXAoLmNoZWNrYm94KSxcclxuICAgIDpkZWVwKC5jaGVja2JveF9faW5uZXIpIHtcclxuICAgICAgICB3aWR0aDogNjBweCAhaW1wb3J0YW50O1xyXG4gICAgICAgIGhlaWdodDogNjBweCAhaW1wb3J0YW50O1xyXG4gICAgICAgIG1pbi13aWR0aDogNjBweCAhaW1wb3J0YW50O1xyXG4gICAgICAgIG1pbi1oZWlnaHQ6IDYwcHggIWltcG9ydGFudDtcclxuICAgICAgICBwYWRkaW5nOiAxNnB4ICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAyMHB4ICFpbXBvcnRhbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLnBvcHVwIC5sYXJnZS1zZWxlY3Rpb24tdGFibGUge1xyXG4gICAgICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgdGFibGUtbGF5b3V0OiBhdXRvICFpbXBvcnRhbnQ7IC8vIOiuqeihqOagvOiHquWKqOWIhumFjeWuveW6plxyXG4gICAgfVxyXG5cclxuICAgIC5yb3ctc2VsZWN0ZWQge1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlMGYzZmYgIWltcG9ydGFudDtcclxuICAgIH1cclxuXHJcblx0LmZvbnQge1xyXG5cdFx0YmFja2dyb3VuZC1jb2xvcjogIzY2NjY2NjtcclxuXHRcdGhlaWdodDogMzBweDtcclxuXHRcdHdpZHRoOiAxMDB2dztcclxuXHR9XHJcblxyXG5cclxuXHQvKiDkuIrpg6jljLrln5/moLflvI/vvIzlt6Y3MCUg5Y+zMzAlICovXHJcblx0LnRvcC1zZWN0aW9uIHtcclxuXHRcdGRpc3BsYXk6IGZsZXg7XHJcblx0XHRqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDtcclxuXHRcdG1hcmdpbi1ib3R0b206IDIwcHg7XHJcblx0XHRwYWRkaW5nOiAyMHB4IDEwcHg7XHJcblx0XHRmbGV4LWRpcmVjdGlvbjogcm93O1xyXG5cdFx0ZmxleC13cmFwOiB3cmFwO1xyXG5cdFx0YWxpZ24tY29udGVudDogY2VudGVyO1xyXG5cdFx0YWxpZ24taXRlbXM6IHN0cmV0Y2g7XHJcblx0XHQvKiDlop7liqDkuIrkuIvnmoRwYWRkaW5nICovXHJcblx0fVxyXG5cclxuXHQucmlnaHQtc2lkZSB7XHJcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZjNmM2YzO1xyXG5cdFx0cGFkZGluZzogMTZweDtcclxuXHRcdHRleHQtYWxpZ246IGNlbnRlcjtcclxuXHRcdGJvcmRlci1yYWRpdXM6IDhweDtcclxuXHRcdHdpZHRoOiAyNSU7XHJcblx0XHRmb250LXNpemU6IDE0cHg7XHJcblx0fVxyXG5cclxuXHQuZm9ybS1yb3cge1xyXG5cdFx0ZGlzcGxheTogZmxleDtcclxuXHRcdGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcclxuXHRcdG1hcmdpbi1ib3R0b206IDEuMnZoO1xyXG5cdH1cclxuXHJcblx0LmZvcm0taXRlbSB7XHJcblx0XHR3aWR0aDogMzAlO1xyXG5cdH1cclxuXHJcblx0LmlucCB7XHJcblx0XHR3aWR0aDogOTAlO1xyXG5cdFx0cGFkZGluZzogNHB4O1xyXG5cdFx0Ym9yZGVyOiAxcHggc29saWQgI2NjYztcclxuXHRcdGJvcmRlci1yYWRpdXM6IDRweDtcclxuXHRcdG1hcmdpbi10b3A6IDRweDtcclxuXHR9XHJcblxyXG5cdC5zdGF0dXMtYmxvY2sge1xyXG5cdFx0ZGlzcGxheTogZmxleDtcclxuXHRcdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcblx0XHRhbGlnbi1pdGVtczogY2VudGVyO1xyXG5cdH1cclxuXHJcblx0LnN0YXR1cy1ibG9jayBwIHtcclxuXHRcdG1hcmdpbjogOHB4IDA7XHJcblx0XHRmb250LXNpemU6IDE2cHg7XHJcblx0XHRmb250LXdlaWdodDogYm9sZDtcclxuXHR9XHJcblxyXG5cdC5sZWZ0LXNpZGUge1xyXG5cdFx0d2lkdGg6IDY1JTtcclxuXHR9XHJcblxyXG5cdC50YWJsZS1yb3cge1xyXG5cdFx0ZGlzcGxheTogZmxleDtcclxuXHRcdGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcclxuXHRcdHBhZGRpbmc6IDhweDtcclxuXHRcdGJvcmRlcjogMXB4IHNvbGlkICMwMDAwMDA7XHJcblx0XHRmb250LXNpemU6IDIwcHg7XHJcblx0XHRmb250LXdlaWdodDogYm9sZDtcclxuXHR9XHJcblxyXG5cdC50YWJsZS1jZWxsIHtcclxuXHRcdHdpZHRoOiA1MCU7XHJcblx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XHJcblx0fVxyXG5cclxuXHQvKiDljaHniYfmoLflvI8gKi9cclxuICAgIC5jYXJkIHtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xyXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7XHJcbiAgICAgICAgYm94LXNoYWRvdzogMCA0cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcclxuICAgICAgICBwYWRkaW5nOiAwOyAvLyDljrvpmaTlpJrkvZnlhoXovrnot51cclxuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjVweDtcclxuICAgICAgICB3aWR0aDogMTAwJTsgLy8g5aGr5ruh54i25a655ZmoXHJcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgIH1cclxuXHJcbi8qICAgIC8vLmNvbnRlbnQge1xyXG4gICAgLy8gICAgZmxleDogMTtcclxuICAgIC8vICAgIHBhZGRpbmc6IDF2aCAxdnc7IC8vIOS/neivgeaVtOS9k+acieW3puWPs+eVmeeZvVxyXG4gICAgLy8gICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XHJcbiAgICAvLyAgICBmb250LXNpemU6IDEuNXZ3O1xyXG4gICAgLy99Ki9cclxuXHJcblx0Lyog5Y2h54mH5qCH6aKY5Zyo5bem5LiK6KeSICovXHJcblx0LmNhcmQtaGVhZGVyIHtcclxuXHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuXHRcdHRvcDogLTEwcHg7XHJcblx0XHRsZWZ0OiAxNnB4O1xyXG5cdFx0YmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcclxuXHRcdHBhZGRpbmc6IDJweCA4cHg7XHJcblx0XHRib3JkZXItcmFkaXVzOiA0cHg7XHJcblx0XHRmb250LXdlaWdodDogYm9sZDtcclxuXHR9XHJcblxyXG5cdC8qIOS4remDqOWMuuWfn++8jOavj+ihjDPkuKrlrZfmrrUgKi9cclxuXHQuc3RhdHVzLXJvdyxcclxuXHQuY2hlY2stcm93IHtcclxuXHRcdGRpc3BsYXk6IGZsZXg7XHJcblx0XHRqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcblx0XHRtYXJnaW4tYm90dG9tOiAxMHB4O1xyXG5cdH1cclxuXHJcblx0LnN0YXR1cy1yb3cgbGFiZWwsXHJcblx0LmNoZWNrLXJvdyBsYWJlbCB7XHJcblx0XHR3aWR0aDogMzAlO1xyXG5cdFx0cGFkZGluZy1yaWdodDogMTBweDtcclxuXHRcdHRleHQtYWxpZ246IHJpZ2h0O1xyXG5cdH1cclxuXHJcblx0LnN0YXR1cy1yb3cgaW5wdXQsXHJcblx0LmNoZWNrLXJvdyBpbnB1dCB7XHJcblx0XHR3aWR0aDogNjUlO1xyXG5cdH1cclxuXHJcblx0Ly/ln7rnoYDmoLflvI9cclxuXHQuY29udGFpbmVyIHtcclxuXHRcdGRpc3BsYXk6IGZsZXg7XHJcblx0XHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG5cdH1cclxuXHJcblx0LnRhYi1iYXIge1xyXG5cdFx0ZGlzcGxheTogZmxleDtcclxuXHRcdGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kO1xyXG5cdFx0YmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTtcclxuXHRcdHBhZGRpbmc6IDF2aDtcclxuXHRcdHBhZGRpbmctdG9wOiAzMHB4O1xyXG5cdFx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNjY2M7XHJcblx0fVxyXG5cclxuXHQudG9wLXJpZ2h0IHtcclxuXHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuXHRcdHRvcDogLTE1cHg7XHJcblx0XHRyaWdodDogNTBweDtcclxuXHRcdHotaW5kZXg6IDEwMDA7XHJcblx0fVxyXG5cclxuXHQucmVmcmVzaC1idG4ge1xyXG5cdFx0cGFkZGluZzogMTBweDtcclxuXHRcdGJhY2tncm91bmQtY29sb3I6ICMwMEEyRTk7XHJcblx0XHRjb2xvcjogd2hpdGU7XHJcblx0XHRib3JkZXI6IG5vbmU7XHJcblx0XHRmb250LXNpemU6IDIycHg7XHJcblx0XHRib3JkZXItcmFkaXVzOiA1cHg7XHJcblx0fVxyXG5cclxuXHQudGFiLWl0ZW0ge1xyXG5cdFx0ZmxleDogMTtcclxuXHRcdHRleHQtYWxpZ246IGNlbnRlcjtcclxuXHRcdG1hcmdpbi1yaWdodDogMC41dnc7XHJcblx0XHRwYWRkaW5nOiAxdmg7XHJcblx0XHRib3JkZXItcmFkaXVzOiAwLjV2dztcclxuXHRcdGJhY2tncm91bmQtY29sb3I6ICNmZmY7XHJcblx0XHRjb2xvcjogIzAwN2FmZjtcclxuXHRcdGN1cnNvcjogcG9pbnRlcjtcclxuXHRcdGZvbnQtc2l6ZTogMjJweDtcclxuXHRcdGZvbnQtd2VpZ2h0OiA1MDA7XHJcblx0XHR0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuM3MsIGNvbG9yIDAuM3M7XHJcblx0XHRib3gtc2hhZG93OiAwIDJweCA0cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xyXG5cdH1cclxuXHJcblx0LnRhYi1pdGVtLmFjdGl2ZSB7XHJcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjMDA3YWZmO1xyXG5cdFx0Y29sb3I6ICNmZmY7XHJcblx0XHRmb250LXdlaWdodDogNjAwO1xyXG5cdFx0Ym94LXNoYWRvdzogMCA0cHggOHB4IHJnYmEoMCwgMTIyLCAyNTUsIDAuMyk7XHJcblx0fVxyXG5cclxuXHQuY29udGVudCB7XHJcblx0XHRmbGV4OiAxO1xyXG5cdFx0cGFkZGluZzogMXZoIDF2dztcclxuXHRcdGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xyXG5cdFx0Zm9udC1zaXplOiAxNnB4O1xyXG5cdH1cclxuXHJcbiAgICAucGlja2VyIHtcclxuICAgICAgICBmbG9hdDogbGVmdDtcclxuICAgICAgICBtYXJnaW4tdG9wOiA3cHg7XHJcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7XHJcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMzJweCAhaW1wb3J0YW50OyAvLyDlvLrliLblpKflrZfkvZPvvIzpgILphY3kvY7lr4bluqZcclxuICAgICAgICBtaW4taGVpZ2h0OiA2MHB4OyAvLyDorqnpgInmi6nmoYbpq5jluqbkuZ/lj5jlpKdcclxuICAgICAgICBsaW5lLWhlaWdodDogNjBweDtcclxuICAgICAgICBwYWRkaW5nOiA1LjVweCAxcHg7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsgLy8g6L+Z6YeM5pS55Li66JOd6ImyXHJcbiAgICAgICAgYm9yZGVyOiAycHggc29saWQgIzAwN2FmZjsgLy8g6L655qGG5Lmf5pS55Li66JOd6ImyXHJcbiAgICAgICAgY29sb3I6ICMwMDdhZmY7IC8vIOWtl+S9k+minOiJsuaUueS4uueZveiJsu+8jOS/neivgeWPr+ivu+aAp1xyXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDtcclxuICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMnM7XHJcbiAgICB9XHJcblxyXG4gICAgLnRoIHtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcclxuICAgICAgICBjb2xvcjogYmxhY2s7XHJcbiAgICAgICAgaGVpZ2h0OiA2dmg7XHJcbiAgICAgICAgZm9udC1zaXplOiAyMnB4O1xyXG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XHJcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzU1NTtcclxuICAgICAgICBwYWRkaW5nOiA2cHggOHB4O1xyXG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xyXG4gICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLyog5Li76KGo5qC86L655qGG5qC35byPICovXHJcbiAgICB1bmktdGFibGUge1xyXG4gICAgICAgIGJvcmRlcjogMnB4IHNvbGlkICNkMDAgIWltcG9ydGFudDtcclxuICAgICAgICBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDAgIWltcG9ydGFudDtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLnVuaS10aCwgLnVuaS10ZCB7XHJcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzU1NSAhaW1wb3J0YW50O1xyXG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZSAhaW1wb3J0YW50O1xyXG4gICAgICAgIHotaW5kZXg6IDEgIWltcG9ydGFudDtcclxuICAgIH1cclxuXHJcbiAgICAuZm9ybS1pbnB1dCB7XHJcbiAgICAgICAgd29yZC1icmVhazogYnJlYWstYWxsO1xyXG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7XHJcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNDtcclxuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcclxuICAgICAgICBtYXgtd2lkdGg6IDE4MHB4O1xyXG4gICAgICAgIG92ZXJmbG93LXdyYXA6IGJyZWFrLXdvcmQ7XHJcbiAgICAgICAgZm9udC1zaXplOiAyMnB4O1xyXG4gICAgICAgIHBhZGRpbmc6IDZweCA4cHg7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IC8qIOiuvue9ruiDjOaZr+S4uumAj+aYjiAqL1xyXG4gICAgfVxyXG5cclxuXHQvKiDlupXpg6jkv53lrZjlkozlj5bmtojmjInpkq4gKi9cclxuICAgIC5ib3R0b20tc2VjdGlvbiB7XHJcbiAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDtcclxuICAgICAgICBtYXJnaW4tYm90dG9tOiAydmg7XHJcbiAgICAgICAgcGFkZGluZzogMnZoIDF2dztcclxuICAgICAgICBtYXJnaW4tdG9wOiAyMHB4OyAvLyDlh4/lsI/pobbpg6jovrnot53vvIznoa7kv53mjInpkq7lnKjlvLnnqpflhoXmraPnoa7mmL7npLpcclxuICAgIH1cclxuXHJcblx0LnNhdmUtYnRuLFxyXG5cdC5jYW5jZWwtYnRuIHtcclxuXHRcdHdpZHRoOiA0OCU7XHJcblx0XHRwYWRkaW5nOiAxLjV2aDtcclxuXHRcdGJhY2tncm91bmQtY29sb3I6ICMwMGEyZTk7XHJcblx0XHRjb2xvcjogd2hpdGU7XHJcblx0XHRmb250LXNpemU6IDIycHg7XHJcblx0XHRmb250LXdlaWdodDogNTAwO1xyXG5cdFx0Ym9yZGVyOiBub25lO1xyXG5cdFx0dGV4dC1hbGlnbjogY2VudGVyO1xyXG5cdFx0Y3Vyc29yOiBwb2ludGVyO1xyXG5cdFx0Ym9yZGVyLXJhZGl1czogNHB4O1xyXG5cdFx0Ym94LXNoYWRvdzogMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcclxuXHRcdHRyYW5zaXRpb246IGFsbCAwLjNzO1xyXG5cdH1cclxuXHRcclxuXHQuY2FuY2VsLWJ0biB7XHJcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjMDBBMkU5O1xyXG5cdFx0Y29sb3I6IHdoaXRlO1xyXG5cdH1cclxuXHRcclxuXHQvKiDmk43kvZzmjInpkq7ljLrln58gKi9cclxuXHQub3BlcmF0aW9uLWJ0bnMge1xyXG5cdFx0ZGlzcGxheTogZmxleDtcclxuXHRcdGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG5cdFx0YWxpZ24taXRlbXM6IGNlbnRlcjtcclxuXHRcdGdhcDogMTBweDtcclxuXHR9XHJcblx0XHJcblx0Lyog5byA5bel5oyJ6ZKuICovXHJcblx0LnN0YXJ0LWJ0biB7XHJcblx0XHRwYWRkaW5nOiA4cHggMjBweDtcclxuXHRcdGJhY2tncm91bmQtY29sb3I6ICMwMEEyRTk7XHJcblx0XHRjb2xvcjogd2hpdGU7XHJcblx0XHRmb250LXNpemU6IDE4cHg7XHJcblx0XHRmb250LXdlaWdodDogNTAwO1xyXG5cdFx0Ym9yZGVyOiBub25lO1xyXG5cdFx0Ym9yZGVyLXJhZGl1czogNHB4O1xyXG5cdFx0Y3Vyc29yOiBwb2ludGVyO1xyXG5cdFx0dHJhbnNpdGlvbjogYWxsIDAuM3M7XHJcblx0XHRib3gtc2hhZG93OiAwIDJweCA0cHggcmdiYSgwLCAxNjIsIDIzMywgMC4yKTtcclxuXHR9XHJcblx0XHJcblx0LnN0YXJ0LWJ0bjpob3Zlcjpub3QoOmRpc2FibGVkKSB7XHJcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjMDA5MmQ2O1xyXG5cdFx0Ym94LXNoYWRvdzogMCA0cHggOHB4IHJnYmEoMCwgMTYyLCAyMzMsIDAuMyk7XHJcblx0XHR0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7XHJcblx0fVxyXG5cdFxyXG5cdC8qIOW8gOW3peaMiemSriAtIOmAieS4reeKtuaAge+8iOe7v+iJsu+8iSAqL1xyXG5cdC5zdGFydC1idG4tc2VsZWN0ZWQge1xyXG5cdFx0YmFja2dyb3VuZC1jb2xvcjogIzUyYzQxYSAhaW1wb3J0YW50O1xyXG5cdFx0Ym94LXNoYWRvdzogMCAycHggNHB4IHJnYmEoODIsIDE5NiwgMjYsIDAuMykgIWltcG9ydGFudDtcclxuXHR9XHJcblx0XHJcblx0LnN0YXJ0LWJ0bi1zZWxlY3RlZDpob3Zlcjpub3QoOmRpc2FibGVkKSB7XHJcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjNDliMDE1ICFpbXBvcnRhbnQ7XHJcblx0XHRib3gtc2hhZG93OiAwIDRweCA4cHggcmdiYSg4MiwgMTk2LCAyNiwgMC40KSAhaW1wb3J0YW50O1xyXG5cdH1cclxuXHRcclxuXHQvKiDmmoLlgZzmjInpkq4gKi9cclxuXHQucGF1c2UtYnRuIHtcclxuXHRcdHBhZGRpbmc6IDhweCAyMHB4O1xyXG5cdFx0YmFja2dyb3VuZC1jb2xvcjogI2ZmNGQ0ZjtcclxuXHRcdGNvbG9yOiB3aGl0ZTtcclxuXHRcdGZvbnQtc2l6ZTogMThweDtcclxuXHRcdGZvbnQtd2VpZ2h0OiA1MDA7XHJcblx0XHRib3JkZXI6IG5vbmU7XHJcblx0XHRib3JkZXItcmFkaXVzOiA0cHg7XHJcblx0XHRjdXJzb3I6IHBvaW50ZXI7XHJcblx0XHR0cmFuc2l0aW9uOiBhbGwgMC4zcztcclxuXHRcdGJveC1zaGFkb3c6IDAgMnB4IDRweCByZ2JhKDI1NSwgNzcsIDc5LCAwLjIpO1xyXG5cdH1cclxuXHRcclxuXHQucGF1c2UtYnRuOmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHtcclxuXHRcdGJhY2tncm91bmQtY29sb3I6ICNmZjMzMzY7XHJcblx0XHRib3gtc2hhZG93OiAwIDRweCA4cHggcmdiYSgyNTUsIDc3LCA3OSwgMC4zKTtcclxuXHRcdHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTtcclxuXHR9XHJcblx0XHJcblx0Lyog5oyJ6ZKu56aB55So54q25oCBICovXHJcblx0LnN0YXJ0LWJ0bjpkaXNhYmxlZCxcclxuXHQucGF1c2UtYnRuOmRpc2FibGVkIHtcclxuXHRcdGJhY2tncm91bmQtY29sb3I6ICNkOWQ5ZDkgIWltcG9ydGFudDtcclxuXHRcdGNvbG9yOiAjOTk5ICFpbXBvcnRhbnQ7XHJcblx0XHRjdXJzb3I6IG5vdC1hbGxvd2VkICFpbXBvcnRhbnQ7XHJcblx0XHRib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XHJcblx0XHRvcGFjaXR5OiAwLjY7XHJcblx0fVxyXG5cclxuICAgIC5vdmVybGF5IHtcclxuICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XHJcbiAgICAgICAgdG9wOiAwO1xyXG4gICAgICAgIGxlZnQ6IDA7XHJcbiAgICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTtcclxuICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgICAgei1pbmRleDogMjAwMDsgLy8g5aKe5Yqgei1pbmRleO+8jOehruS/neW8ueeql+WcqOWIt+aWsOaMiemSruS5i+S4ilxyXG4gICAgfVxyXG5cclxuICAgIC5wb3B1cCB7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcclxuICAgICAgICBwYWRkaW5nOiAydmggMnZoIDh2aCAydmg7IC8vIOWinuWKoOW6lemDqOWGhei+uei3ne+8jOS4uuaMiemSrueVmeWHuuepuumXtFxyXG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XHJcbiAgICAgICAgYm94LXNoYWRvdzogMCAwIDEwcHggcmdiYSgwLCAwLCAwLCAwLjEpO1xyXG4gICAgICAgIHdpZHRoOiA5MC4xNnZ3OyAvLyDljp/mnaXnmoQ5OHZ357yp5bCPOCUgKDk4dncgKiAwLjkyKVxyXG4gICAgICAgIGhlaWdodDogNjh2aDsgLy8g5Y6f5p2l55qEODV2aOe8qeWwjzIwJSAoODV2aCAqIDAuOClcclxuICAgICAgICBmb250LXNpemU6IDEuNnZ3O1xyXG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7IC8vIOehruS/neWGhei+uei3neS4jeW9seWTjeaAu+WwuuWvuFxyXG4gICAgfVxyXG5cclxuXHQucHJpbnQtYnRuIHtcclxuXHRcdGZsb2F0OiBsZWZ0O1xyXG5cdFx0bWFyZ2luLXRvcDogNHB4O1xyXG5cdFx0bWFyZ2luLWxlZnQ6IDEwcHg7XHJcblx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XHJcblx0XHRmb250LXNpemU6IDIycHg7XHJcblx0XHRjb2xvcjogd2hpdGU7XHJcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjMDBBMkU5O1xyXG5cdFx0cGFkZGluZzogMHB4IDkwcHg7XHJcblx0XHRib3JkZXI6IDJweCBzb2xpZCAjMDBBMkU5O1xyXG5cdFx0Y3Vyc29yOiBwb2ludGVyO1xyXG5cdFx0Ym9yZGVyLXJhZGl1czogMC44dnc7XHJcblx0fVxyXG5cclxuICAgIC5tYWNoaW5lLW5hbWUtYm94IHtcclxuICAgICAgICBib3JkZXI6IDJweCBzb2xpZCAjMDA3YWZmOyAvKiDok53oibLovrnmoYYgKi9cclxuICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7XHJcbiAgICAgICAgZm9udC1mYW1pbHk6IGZhbnRhc3k7XHJcbiAgICAgICAgZm9udC1zaXplOiAzM3B4O1xyXG4gICAgICAgIG1hcmdpbi10b3A6IDIwcHg7XHJcbiAgICAgICAgcGFkZGluZzogMTVweCAyOHB4OyAvKiDkuIrkuIsyMHB477yM5bem5Y+zNDhweO+8jOWinuWKoOWGhei+uei3nSAqL1xyXG4gICAgICAgIHdpZHRoOiAzMDBweDsgLyog5pu05a6977yM5L+d6K+B5YaF5a655a6M5pW05pi+56S6ICovXHJcbiAgICAgICAgaGVpZ2h0OiA3MHB4OyAvKiDlop7liqDpq5jluqYgKi9cclxuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgICAgIGJhY2tncm91bmQ6ICNmZmY7XHJcbiAgICAgICAgY29sb3I6ICMyMjI7XHJcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcclxuICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgIH1cclxuXHJcbi8qICAgIC8vdi1kZWVwIC5jaGVja2JveCB7XHJcbiAgICAvLyAgICBwYWRkaW5nOiAxMCAxMHB4O1xyXG4gICAgLy8gICAgd2lkdGg6IDI2cHg7XHJcbiAgICAvLyAgICBwYWRkaW5nLWxlZnQ6IDEycHg7XHJcbiAgICAvLyAgICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xyXG4gICAgLy8gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcclxuICAgIC8vICAgIGNvbG9yOiAjMzMzO1xyXG4gICAgLy8gICAgZm9udC13ZWlnaHQ6IDUwMDtcclxuICAgIC8vICAgIGJvcmRlci1ib3R0b206IDFweCAjZWJlZWY1IHNvbGlkO1xyXG4gICAgLy8gICAgZm9udC1zaXplOiAxNHB4O1xyXG4gICAgLy99Ki9cclxuXHJcbiAgICAucG9wdXAgLmNhcmQge1xyXG4gICAgICAgIG1hcmdpbi1ib3R0b206IDQwcHggIWltcG9ydGFudDsgLy8g5Y6f5p2lMjUwcHjvvIzmlLnkuLo0MHB477yM56m655m95piO5pi+5YeP5bCRXHJcbiAgICB9XHJcblxyXG5cdEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDE5MjBweCkge1xyXG5cdFx0LnRhYi1pdGVtIHtcclxuXHRcdFx0Zm9udC1zaXplOiAyMnB4O1xyXG5cdFx0fVxyXG5cclxuXHRcdC5jb250ZW50IHtcclxuXHRcdFx0cGFkZGluZzogMXZ3O1xyXG5cdFx0XHRmb250LXNpemU6IDIycHg7XHJcblx0XHR9XHJcblxyXG5cdFx0LmZvcm0taW5wdXQge1xyXG5cdFx0XHRmb250LXNpemU6IDIycHg7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuICAgIC51bmktdGQsXHJcbiAgICB0ZCB7XHJcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbCAhaW1wb3J0YW50OyAvLyDlhYHorrjoh6rliqjmjaLooYxcclxuICAgICAgICB3b3JkLWJyZWFrOiBicmVhay1hbGwgIWltcG9ydGFudDsgLy8g5Y2V6K+NL+S4reaWh+mDveiDveaWreihjFxyXG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIOihjOmrmOmAguW9k++8jOS+v+S6juWkmuihjOaYvuekulxyXG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgLy8g5bGF5Lit5pi+56S677yI5aaC6ZyA5bem5a+56b2Q5Y+v5pS55Li6IGxlZnTvvIlcclxuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyAvLyDlnoLnm7TlsYXkuK1cclxuICAgICAgICBtYXgtd2lkdGg6IDE4MHB4OyAvLyDkv53mjIHljZXlhYPmoLzmnIDlpKflrr3luqZcclxuICAgICAgICBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkOyAvLyDlhbzlrrnmgKfmm7Tlpb1cclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgLyog6K6+572u6IOM5pmv5Li66YCP5piOICovXHJcbiAgICB9XHJcblxyXG4gICAgLy8g5by556qX5YaF6KGo5qC85qC35byP5LiO55Sf5Lqn5oql5bel6aG16Z2i5Y6G5Y+y5oql5bel6K6w5b2V6KGo5qC85LiA6Ie0XHJcbiAgICAucG9wdXAgLmxhcmdlLXNlbGVjdGlvbi10YWJsZSAudW5pLXRoLFxyXG4gICAgLnBvcHVwIC5sYXJnZS1zZWxlY3Rpb24tdGFibGUgLnVuaS10ZCB7XHJcbiAgICAgICAgcGFkZGluZzogNnB4IDhweDtcclxuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcclxuICAgICAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XHJcbiAgICAgICAgZm9udC1zaXplOiAyMnB4O1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyAvKiDorr7nva7og4zmma/kuLrpgI/mmI4gKi9cclxuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjNTU1ICFpbXBvcnRhbnQ7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC5wb3B1cCAubGFyZ2Utc2VsZWN0aW9uLXRhYmxlIC51bmktdGgge1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xyXG4gICAgICAgIGNvbG9yOiBibGFjaztcclxuICAgICAgICBmb250LXdlaWdodDogNjAwO1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMjJweDtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLyog5by556qX6KGo5qC85aSW5qGG57q/ICovXHJcbiAgICAucG9wdXAgLmxhcmdlLXNlbGVjdGlvbi10YWJsZSB7XHJcbiAgICAgICAgYm9yZGVyOiAycHggc29saWQgI2QwMCAhaW1wb3J0YW50O1xyXG4gICAgICAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGUgIWltcG9ydGFudDtcclxuICAgICAgICBib3JkZXItc3BhY2luZzogMCAhaW1wb3J0YW50O1xyXG4gICAgfVxyXG5cclxuICAgIC5zZWxlY3QtYnRuIHtcclxuICAgICAgICB3aWR0aDogMTUwcHg7IC8vIOWOn+adpeeahDcwJSAoMTgwcHggKiAwLjcpXHJcbiAgICAgICAgaGVpZ2h0OiA3NXB4OyAvLyDljp/mnaXnmoQ2NSUgKDgwcHggKiAwLjY1KVxyXG4gICAgICAgIGZvbnQtc2l6ZTogMjJweDsgLy8g5a2X5L2T5Lmf55Wl5aSnXHJcbiAgICAgICAgLy9mb250LXdlaWdodDogMjAwO1xyXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzAwQTJFOTtcclxuICAgICAgICBjb2xvcjogd2hpdGU7XHJcbiAgICAgICAgYm9yZGVyOiAycHggc29saWQgIzAwQTJFOTtcclxuICAgICAgICBtYXJnaW46IDAgYXV0bztcclxuICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgICBib3gtc2hhZG93OiAwIDJweCA0cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xyXG4gICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzO1xyXG4gICAgfVxyXG5cclxuICAgIC50b3Atc2VjdGlvbiB7XHJcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xyXG4gICAgICAgIHBhZGRpbmc6IDIwcHggMTBweDtcclxuICAgIH1cclxuXHJcbiAgICAuZm9ybS1yb3cuYWxpZ24tcm93IHtcclxuICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xyXG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgIH1cclxuXHJcbiAgICAubWFjaGluZS1uYW1lLWJveCB7XHJcbiAgICAgICAgZmxleDogMSAxIDQ1JTtcclxuICAgICAgICBtYXJnaW4tcmlnaHQ6IDIwcHg7XHJcbiAgICB9XHJcblxyXG4gICAgLmZvcm0tZ3JvdXAge1xyXG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAgICBmbGV4OiAxIDEgNDUlO1xyXG4gICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcclxuICAgIH1cclxuXHJcbiAgICAub3JkZXItbGFiZWwge1xyXG4gICAgICAgIGZvbnQtZmFtaWx5OiBmYW50YXN5O1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMjJweDtcclxuICAgICAgICBtYXJnaW4tdG9wOiAyMHB4O1xyXG4gICAgICAgIG1hcmdpbi1yaWdodDogMTBweDtcclxuICAgICAgICBmbG9hdDogbm9uZTtcclxuICAgIH1cclxuXHJcbiAgICAucHJpbnQtYnRuIHtcclxuICAgICAgICBtYXJnaW4tdG9wOiAyMHB4O1xyXG4gICAgfVxyXG5cclxuICAgIC50b3AtcmlnaHQge1xyXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgICB0b3A6IC0zMHB4OyAvLyDlvoDkuIrnp7tcclxuICAgICAgICByaWdodDogMDtcclxuICAgICAgICB6LWluZGV4OiAxMDAwO1xyXG4gICAgfVxyXG5cclxuLyog5pS+5aSn6KGo5aS05ZKM6KGo5qC85YaF5a655a2X5L2TICovXHJcbiAgICAudGgsXHJcbiAgICAudW5pLXRoLFxyXG4gICAgdGgge1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMjJweCAhaW1wb3J0YW50O1xyXG4gICAgICAgIGNvbG9yOiBibGFjayAhaW1wb3J0YW50O1xyXG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XHJcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDFweDtcclxuICAgIH1cclxuXHJcbiAgICAucG9wdXAgLmxhcmdlLXNlbGVjdGlvbi10YWJsZSAudGgsXHJcbiAgICAucG9wdXAgLmxhcmdlLXNlbGVjdGlvbi10YWJsZSAudW5pLXRoLFxyXG4gICAgLnBvcHVwIC5sYXJnZS1zZWxlY3Rpb24tdGFibGUgdGgge1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMjJweCAhaW1wb3J0YW50O1xyXG4gICAgICAgIGNvbG9yOiBibGFjayAhaW1wb3J0YW50O1xyXG4gICAgfVxyXG5cclxuXHQvKiDpkojlr7kxMjgweDgwMOeahOW5s+adv+S9v+eUqOWqkuS9k+afpeivoui/m+ihjOmAgumFjSAqL1xyXG5cdEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEyODBweCkgYW5kIChtYXgtd2lkdGg6IDE5MjBweCkge1xyXG5cdFx0LnJpZ2h0LXNpZGUge1xyXG5cdFx0XHR3aWR0aDogMzAlO1xyXG5cdFx0fVxyXG5cclxuXHRcdC5zYXZlLWJ0bixcclxuXHRcdC5jYW5jZWwtYnRuIHtcclxuXHRcdFx0Zm9udC1zaXplOiAxNnB4O1xyXG5cdFx0fVxyXG5cclxuXHRcdC5pbnAge1xyXG5cdFx0XHR3aWR0aDogODUlO1xyXG5cdFx0XHRmb250LXNpemU6IDE2cHg7XHJcblx0XHR9XHJcblxyXG5cdFx0LnN0YXR1cy1ibG9jayBwIHtcclxuXHRcdFx0Zm9udC1zaXplOiAxNnB4O1xyXG5cdFx0fVxyXG5cclxuXHRcdC51bmktdHIsXHJcblx0XHQudW5pLXRkIHtcclxuXHRcdFx0Zm9udC1zaXplOiAyMnB4O1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcbjwvc3R5bGU+XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///52\n"); |
| | | |
| | | /***/ }), |
| | | /* 53 */ |
| | |
| | | /***/ (function(module, exports, __webpack_require__) { |
| | | |
| | | "use strict"; |
| | | eval("/* WEBPACK VAR INJECTION */(function(__f__) {\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ 2);\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ 3));\nvar _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ 6));\nvar _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ 9));\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nvar _default = {\n data: function data() {\n return {\n machineNo: '',\n //机台编码\n workOrderNo: '',\n //工单号\n activeToolNo: '',\n // 当前选中的刀具编号\n pageIndex: 1,\n pageSize: 20,\n //单页显示的刀具数量\n total: 0,\n toolList: [],\n selectedToolNo: '',\n toolName: '',\n toolModel: '',\n showToolDialog: false,\n searchKey: '',\n filteredTools: [],\n useLimitInput: '',\n lifeWarnInput: '',\n // 新增:寿命比预警值原始输入\n toolRecords: [],\n loadingTools: false,\n loadingForm: false,\n submitting: false,\n _searchTimer: null,\n workOrderCurrentCjNum: null,\n // 工单当前数采\n\n // 自动保存相关\n autoSaveTimer: null,\n isDirty: false,\n // 表单是否有未保存变更\n autoSaveIntervalMs: 5 * 60 * 1000,\n // 默认 5 分钟\n autoSaveEnabled: true,\n autoSaveActionName: 'handleUpTool',\n // 自动触发的方法名,可改为自定义保存方法\n\n // 新增:调机相关字段\n isTiaojiUserSelectShow: false,\n // 调机师傅选择弹窗\n tiaojiStaffNo: '',\n // 当前选中的调机师傅(格式: 工号:姓名)\n tiaojiOkQty: '',\n // 调机良品数\n tiaojiBadQty: '',\n // 调机不良品数\n tiaojiUsers: [],\n // 调机师傅列表\n tiaojiUserSearch: '',\n // 搜索关键词\n\n // 新增:报试产数所需字段\n orderId: null,\n // 工单ID\n order: {} // 工单数据\n };\n },\n\n computed: {\n totalPages: function totalPages() {\n return Math.max(1, Math.ceil(this.total / this.pageSize) || 1);\n },\n // 新增:调机师傅显示名称\n tiaojiStaffDisplay: function tiaojiStaffDisplay() {\n if (!this.tiaojiStaffNo) return '';\n var segs = this.tiaojiStaffNo.split(':');\n return segs.length > 1 ? \"\".concat(segs[0], \" \").concat(segs[1]) : this.tiaojiStaffNo;\n },\n // 新增:过滤后的调机师傅列表\n filteredTiaojiUsers: function filteredTiaojiUsers() {\n if (!this.tiaojiUserSearch) return this.tiaojiUsers;\n var kw = this.tiaojiUserSearch.trim().toLowerCase();\n return this.tiaojiUsers.filter(function (u) {\n return u.toLowerCase().includes(kw);\n });\n }\n },\n watch: {\n // 标记脏数据:按需监听字段变化\n selectedToolNo: function selectedToolNo() {\n this.isDirty = true;\n },\n useLimitInput: function useLimitInput() {\n this.isDirty = true;\n },\n lifeWarnInput: function lifeWarnInput() {\n this.isDirty = true;\n },\n toolName: function toolName() {\n this.isDirty = true;\n },\n toolModel: function toolModel() {\n this.isDirty = true;\n }\n },\n methods: {\n //查询当前数采数,作为下刀计数实时显示\n fetchCurrentCjNum: function fetchCurrentCjNum(toolNo) {\n var _this = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {\n var _res$data, res, _ref, _found$CurrentCjNum, found;\n return _regenerator.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n if (_this.machineNo) {\n _context.next = 2;\n break;\n }\n return _context.abrupt(\"return\", null);\n case 2:\n _context.prev = 2;\n _context.next = 5;\n return _this.$post({\n url: '/Womdaa/GetWomdaasByShow',\n data: JSON.stringify({\n machineNo: _this.machineNo\n }),\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n case 5:\n res = _context.sent;\n if (!(res.status === 0 && Array.isArray((_res$data = res.data) === null || _res$data === void 0 ? void 0 : _res$data.tbBillList))) {\n _context.next = 9;\n break;\n }\n found = res.data.tbBillList.find(function (x) {\n return x.cutterId === toolNo || x.cutteR_ID === toolNo;\n });\n return _context.abrupt(\"return\", found ? (_ref = (_found$CurrentCjNum = found.CurrentCjNum) !== null && _found$CurrentCjNum !== void 0 ? _found$CurrentCjNum : found.currentCjNum) !== null && _ref !== void 0 ? _ref : null : null);\n case 9:\n _context.next = 14;\n break;\n case 11:\n _context.prev = 11;\n _context.t0 = _context[\"catch\"](2);\n __f__(\"warn\", '获取currentCjNum失败', _context.t0, \" at components/mold.vue:334\");\n case 14:\n return _context.abrupt(\"return\", null);\n case 15:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee, null, [[2, 11]]);\n }))();\n },\n // 新增:刷新按钮处理方法\n handleRefresh: function handleRefresh() {\n var _this2 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {\n return _regenerator.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n _this2.fetchTools('');\n if (!(_this2.machineNo && _this2.workOrderNo)) {\n _context2.next = 7;\n break;\n }\n _context2.next = 4;\n return _this2.fetchFormData();\n case 4:\n _context2.next = 6;\n return _this2.fetchDefaultToolFromWorkOrder();\n case 6:\n // 刷新后赋值第一行 currentCjNum\n if (_this2.toolRecords.length > 0) {\n _this2.$set(_this2.toolRecords[0], 'currentCjNum', _this2.workOrderCurrentCjNum);\n }\n case 7:\n _this2.$showMessage('刷新完成');\n case 8:\n case \"end\":\n return _context2.stop();\n }\n }\n }, _callee2);\n }))();\n },\n // 自动保存:启动\n startAutoSave: function startAutoSave() {\n var _this3 = this;\n if (!this.autoSaveEnabled) return;\n this.stopAutoSave();\n this.autoSaveTimer = setInterval(function () {\n _this3.autoSaveTick();\n }, this.autoSaveIntervalMs);\n },\n // 自动保存:停止\n stopAutoSave: function stopAutoSave() {\n if (this.autoSaveTimer) {\n clearInterval(this.autoSaveTimer);\n this.autoSaveTimer = null;\n }\n },\n // 自动保存:每次定时执行时的逻辑\n autoSaveTick: function autoSaveTick() {\n var _this4 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3() {\n var fn;\n return _regenerator.default.wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n if (_this4.autoSaveEnabled) {\n _context3.next = 2;\n break;\n }\n return _context3.abrupt(\"return\");\n case 2:\n if (_this4.isDirty) {\n _context3.next = 4;\n break;\n }\n return _context3.abrupt(\"return\");\n case 4:\n if (!(_this4.submitting || _this4.loadingForm)) {\n _context3.next = 6;\n break;\n }\n return _context3.abrupt(\"return\");\n case 6:\n fn = _this4.autoSaveActionName && typeof _this4[_this4.autoSaveActionName] === 'function' ? _this4[_this4.autoSaveActionName] : null;\n if (fn) {\n _context3.next = 10;\n break;\n }\n __f__(\"warn\", '自动保存:未找到方法', _this4.autoSaveActionName, \" at components/mold.vue:377\");\n return _context3.abrupt(\"return\");\n case 10:\n _context3.prev = 10;\n _this4.submitting = true;\n _context3.next = 14;\n return fn.call(_this4);\n case 14:\n // 调用保存方法(例如 handleUpTool)\n // 如果保存成功,清脏标记(保存方法内部若失败没有抛出可保持此方式)\n _this4.isDirty = false;\n _context3.next = 20;\n break;\n case 17:\n _context3.prev = 17;\n _context3.t0 = _context3[\"catch\"](10);\n __f__(\"error\", '自动保存失败:', _context3.t0, \" at components/mold.vue:387\");\n case 20:\n _context3.prev = 20;\n _this4.submitting = false;\n return _context3.finish(20);\n case 23:\n case \"end\":\n return _context3.stop();\n }\n }\n }, _callee3, null, [[10, 17, 20, 23]]);\n }))();\n },\n // 新增:寿命比预警值归一化 (返回 0~1 或 null)\n normalizeLifeWarn: function normalizeLifeWarn(v) {\n if (v == null) return null;\n var raw = String(v).trim().replace(/[%%]/g, '');\n if (raw === '') return null;\n var num = Number(raw);\n if (!isFinite(num) || num <= 0) return null;\n return num > 1 ? num / 100 : num;\n },\n openToolDialog: function openToolDialog() {\n this.showToolDialog = true;\n this.pageIndex = 1;\n this.fetchTools(this.searchKey);\n },\n closeToolDialog: function closeToolDialog() {\n this.showToolDialog = false;\n },\n fetchTools: function fetchTools(searchKey) {\n var _this5 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4() {\n var res, _ref2, _ref3, _ref4, _res$data$total, _res$data2, _res$data3, payload, getField, mapped, totalFromRes;\n return _regenerator.default.wrap(function _callee4$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n _this5.loadingTools = true;\n _context4.prev = 1;\n _context4.next = 4;\n return _this5.$post({\n url: '/MesCutterLedger/QueryTools',\n data: JSON.stringify({\n searchKey: searchKey,\n pageIndex: _this5.pageIndex,\n pageSize: _this5.pageSize\n }),\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n case 4:\n res = _context4.sent;\n if (res.status === 0) {\n payload = Array.isArray(res.data) ? res.data : res.data && res.data.tbBillList ? res.data.tbBillList : res.data && res.data.data ? res.data.data : [];\n getField = function getField(obj) {\n for (var _len = arguments.length, keys = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n keys[_key - 1] = arguments[_key];\n }\n for (var _i = 0, _keys = keys; _i < _keys.length; _i++) {\n var k = _keys[_i];\n if ((obj === null || obj === void 0 ? void 0 : obj[k]) !== undefined && (obj === null || obj === void 0 ? void 0 : obj[k]) !== null) return obj[k];\n }\n return null;\n }; // 这里需要把 lifeWarn 字段也带出来\n mapped = (payload || []).map(function (t) {\n return {\n no: getField(t, 'cutterId', 'CUTTER_ID', 'cutteR_ID', 'daA001', 'no'),\n name: getField(t, 'cutterName', 'CUTTER_NAME', 'cutteR_NAME', 'name'),\n model: getField(t, 'cutterModel', 'CUTTER_MODEL', 'cutteR_MODEL', 'model'),\n lifeWarn: getField(t, 'modlLifeWorning', 'lifeWarn', 'LIFE_WARN', 'lifE_WARN')\n };\n });\n _this5.filteredTools = mapped;\n _this5.toolList = mapped.slice();\n totalFromRes = Number((_ref2 = (_ref3 = (_ref4 = (_res$data$total = (_res$data2 = res.data) === null || _res$data2 === void 0 ? void 0 : _res$data2.total) !== null && _res$data$total !== void 0 ? _res$data$total : (_res$data3 = res.data) === null || _res$data3 === void 0 ? void 0 : _res$data3.totalCount) !== null && _ref4 !== void 0 ? _ref4 : res.total) !== null && _ref3 !== void 0 ? _ref3 : res.totalCount) !== null && _ref2 !== void 0 ? _ref2 : mapped.length);\n _this5.total = Number.isFinite(totalFromRes) ? totalFromRes : mapped.length;\n if (_this5.pageIndex > _this5.totalPages) {\n _this5.pageIndex = _this5.totalPages;\n }\n } else {\n _this5.$showMessage(res.message || '查询失败');\n }\n _context4.next = 12;\n break;\n case 8:\n _context4.prev = 8;\n _context4.t0 = _context4[\"catch\"](1);\n __f__(\"error\", 'fetchTools 错误:', _context4.t0, \" at components/mold.vue:456\");\n _this5.$showMessage('查询刀具失败,请检查网络或接口');\n case 12:\n _context4.prev = 12;\n _this5.loadingTools = false;\n return _context4.finish(12);\n case 15:\n case \"end\":\n return _context4.stop();\n }\n }\n }, _callee4, null, [[1, 8, 12, 15]]);\n }))();\n },\n prevPage: function prevPage() {\n var _this6 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5() {\n return _regenerator.default.wrap(function _callee5$(_context5) {\n while (1) {\n switch (_context5.prev = _context5.next) {\n case 0:\n if (!(_this6.pageIndex > 1)) {\n _context5.next = 4;\n break;\n }\n _this6.pageIndex--;\n _context5.next = 4;\n return _this6.fetchTools(_this6.searchKey);\n case 4:\n case \"end\":\n return _context5.stop();\n }\n }\n }, _callee5);\n }))();\n },\n nextPage: function nextPage() {\n var _this7 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6() {\n return _regenerator.default.wrap(function _callee6$(_context6) {\n while (1) {\n switch (_context6.prev = _context6.next) {\n case 0:\n if (!(_this7.pageIndex < _this7.totalPages)) {\n _context6.next = 4;\n break;\n }\n _this7.pageIndex++;\n _context6.next = 4;\n return _this7.fetchTools(_this7.searchKey);\n case 4:\n case \"end\":\n return _context6.stop();\n }\n }\n }, _callee6);\n }))();\n },\n onSearchKeyInput: function onSearchKeyInput() {\n var _this8 = this;\n clearTimeout(this._searchTimer);\n this._searchTimer = setTimeout(function () {\n _this8.searchTool();\n }, 300);\n },\n searchTool: function searchTool() {\n var _this9 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee7() {\n return _regenerator.default.wrap(function _callee7$(_context7) {\n while (1) {\n switch (_context7.prev = _context7.next) {\n case 0:\n _this9.pageIndex = 1;\n _context7.next = 3;\n return _this9.fetchTools(_this9.searchKey);\n case 3:\n case \"end\":\n return _context7.stop();\n }\n }\n }, _callee7);\n }))();\n },\n selectTool: function selectTool(tool) {\n this.selectedToolNo = tool.no;\n this.toolName = tool.name;\n this.toolModel = tool.model;\n this.activeToolNo = tool.no;\n // 新增:带出寿命比预警值\n if (tool.lifeWarn !== undefined && tool.lifeWarn !== null) {\n // 格式化为百分比字符串\n var warn = Number(tool.lifeWarn);\n this.lifeWarnInput = warn <= 1 ? (warn * 100).toFixed(0) : warn.toFixed(0);\n } else {\n this.lifeWarnInput = '';\n }\n },\n confirmTool: function confirmTool() {\n this.showToolDialog = false;\n },\n setUseLimit: function setUseLimit() {\n var _this10 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee8() {\n var v;\n return _regenerator.default.wrap(function _callee8$(_context8) {\n while (1) {\n switch (_context8.prev = _context8.next) {\n case 0:\n if (_this10.selectedToolNo) {\n _context8.next = 3;\n break;\n }\n _this10.$showMessage('请选择刀具后再设置上限');\n return _context8.abrupt(\"return\");\n case 3:\n v = Number(_this10.useLimitInput);\n if (!(isNaN(v) || v <= 0)) {\n _context8.next = 7;\n break;\n }\n _this10.$showMessage('请输入有效的使用上限');\n return _context8.abrupt(\"return\");\n case 7:\n _this10.toolRecords = _this10.toolRecords.map(function (r) {\n if (r.no === _this10.selectedToolNo) {\n return _objectSpread(_objectSpread({}, r), {}, {\n useLimit: v\n });\n }\n return r;\n });\n _this10.toolList = _this10.toolList.map(function (t) {\n return t.no === _this10.selectedToolNo ? _objectSpread(_objectSpread({}, t), {}, {\n useLimit: v\n }) : t;\n });\n _this10.$showMessage('使用上限已设置(仅前端显示)');\n case 10:\n case \"end\":\n return _context8.stop();\n }\n }\n }, _callee8);\n }))();\n },\n // 上刀时传递 sdjs = 工单 currentCjNum\n handleUpTool: function handleUpTool() {\n var _this11 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9() {\n var useLimit, sdjs, lifeWarnRatio, payload, res;\n return _regenerator.default.wrap(function _callee9$(_context9) {\n while (1) {\n switch (_context9.prev = _context9.next) {\n case 0:\n if (_this11.workOrderNo) {\n _context9.next = 3;\n break;\n }\n _this11.$showMessage('工单号不能为空');\n return _context9.abrupt(\"return\");\n case 3:\n if (_this11.machineNo) {\n _context9.next = 6;\n break;\n }\n _this11.$showMessage('机台号不能为空');\n return _context9.abrupt(\"return\");\n case 6:\n if (_this11.selectedToolNo) {\n _context9.next = 9;\n break;\n }\n _this11.$showMessage('刀具编号不能为空');\n return _context9.abrupt(\"return\");\n case 9:\n if (_this11.useLimitInput) {\n _context9.next = 12;\n break;\n }\n _this11.$showMessage('使用上限不能为空');\n return _context9.abrupt(\"return\");\n case 12:\n useLimit = Number(_this11.useLimitInput);\n if (!(isNaN(useLimit) || useLimit <= 0)) {\n _context9.next = 16;\n break;\n }\n _this11.$showMessage('请输入有效的使用上限');\n return _context9.abrupt(\"return\");\n case 16:\n // sdjs 使用工单 currentCjNum\n sdjs = _this11.workOrderCurrentCjNum != null ? Number(_this11.workOrderCurrentCjNum) : null;\n lifeWarnRatio = _this11.normalizeLifeWarn(_this11.lifeWarnInput);\n payload = {\n workOrderNo: _this11.workOrderNo,\n machineNo: _this11.machineNo,\n toolNo: _this11.selectedToolNo,\n type: '上机',\n useLimit: useLimit,\n sdjs: sdjs,\n // 上刀计数(工单当前数采)\n modlLifeWorning: lifeWarnRatio // 新增\n };\n _context9.prev = 19;\n _this11.submitting = true;\n _context9.next = 23;\n return _this11.$post({\n url: '/MesCutterLedger/SubmitToolAction',\n data: JSON.stringify(payload),\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n case 23:\n res = _context9.sent;\n if (!(res.data && res.data.outSum === \"0\")) {\n _context9.next = 29;\n break;\n }\n uni.showToast({\n title: res.data.outMsg || '',\n icon: 'error'\n });\n return _context9.abrupt(\"return\");\n case 29:\n if (res.data && res.data.outMsg) {\n uni.showToast({\n title: res.data.outMsg,\n icon: 'none'\n });\n }\n case 30:\n if (!(res.status === 0)) {\n _context9.next = 33;\n break;\n }\n _context9.next = 33;\n return _this11.fetchFormData();\n case 33:\n _context9.next = 40;\n break;\n case 35:\n _context9.prev = 35;\n _context9.t0 = _context9[\"catch\"](19);\n __f__(\"error\", _context9.t0, \" at components/mold.vue:566\");\n _this11.$showMessage('上刀提交失败,请检查网络');\n throw _context9.t0;\n case 40:\n _context9.prev = 40;\n _this11.submitting = false;\n return _context9.finish(40);\n case 43:\n case \"end\":\n return _context9.stop();\n }\n }\n }, _callee9, null, [[19, 35, 40, 43]]);\n }))();\n },\n // 下刀时传递 xdjs = 工单 currentCjNum\n handleDownTool: function handleDownTool() {\n var _this12 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee10() {\n var useLimit, xdjs, lifeWarnRatio, payload, res;\n return _regenerator.default.wrap(function _callee10$(_context10) {\n while (1) {\n switch (_context10.prev = _context10.next) {\n case 0:\n if (_this12.workOrderNo) {\n _context10.next = 3;\n break;\n }\n _this12.$showMessage('工单号不能为空');\n return _context10.abrupt(\"return\");\n case 3:\n if (_this12.machineNo) {\n _context10.next = 6;\n break;\n }\n _this12.$showMessage('机台号不能为空');\n return _context10.abrupt(\"return\");\n case 6:\n if (_this12.selectedToolNo) {\n _context10.next = 9;\n break;\n }\n _this12.$showMessage('刀具编号不能为空');\n return _context10.abrupt(\"return\");\n case 9:\n //下刀不强制录入使用上限\n //if (!this.useLimitInput) { this.$showMessage('使用上限不能为空'); return; }\n useLimit = Number(_this12.useLimitInput); //if (isNaN(useLimit) || useLimit <= 0) { this.$showMessage('请输入有效的使用上限'); return; }\n // 下刀计数同样取工单最新采集数\n xdjs = _this12.workOrderCurrentCjNum != null ? Number(_this12.workOrderCurrentCjNum) : null;\n lifeWarnRatio = _this12.normalizeLifeWarn(_this12.lifeWarnInput);\n payload = {\n workOrderNo: _this12.workOrderNo,\n machineNo: _this12.machineNo,\n toolNo: _this12.selectedToolNo,\n type: '下机',\n useLimit: useLimit,\n xdjs: xdjs,\n // 下刀计数\n modlLifeWorning: lifeWarnRatio // 新增\n };\n _context10.prev = 13;\n _this12.submitting = true;\n _context10.next = 17;\n return _this12.$post({\n url: '/MesCutterLedger/SubmitToolAction',\n data: JSON.stringify(payload),\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n case 17:\n res = _context10.sent;\n if (!(res.data && res.data.outSum === \"0\")) {\n _context10.next = 23;\n break;\n }\n uni.showToast({\n title: res.data.outMsg || '',\n icon: 'error'\n });\n return _context10.abrupt(\"return\");\n case 23:\n if (res.data && res.data.outMsg) {\n uni.showToast({\n title: res.data.outMsg,\n icon: 'none'\n });\n }\n case 24:\n if (!(res.status === 0)) {\n _context10.next = 27;\n break;\n }\n _context10.next = 27;\n return _this12.fetchFormData();\n case 27:\n _context10.next = 34;\n break;\n case 29:\n _context10.prev = 29;\n _context10.t0 = _context10[\"catch\"](13);\n __f__(\"error\", _context10.t0, \" at components/mold.vue:619\");\n _this12.$showMessage('下刀提交失败,请检查网络');\n throw _context10.t0;\n case 34:\n _context10.prev = 34;\n _this12.submitting = false;\n return _context10.finish(34);\n case 37:\n case \"end\":\n return _context10.stop();\n }\n }\n }, _callee10, null, [[13, 29, 34, 37]]);\n }))();\n },\n cancel: function cancel() {\n this.selectedToolNo = '';\n this.toolName = '';\n this.toolModel = '';\n this.useLimitInput = '';\n this.lifeWarnInput = ''; // 新增:清空\n this.isDirty = false;\n },\n fetchFormData: function fetchFormData() {\n var _this13 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee11() {\n var payload, _ref5, _ref6, _ref7, _res$data$total2, _res$data4, _res$data5, res, list, getField, mapped, totalFromRes;\n return _regenerator.default.wrap(function _callee11$(_context11) {\n while (1) {\n switch (_context11.prev = _context11.next) {\n case 0:\n if (!(!_this13.workOrderNo || !_this13.machineNo)) {\n _context11.next = 3;\n break;\n }\n __f__(\"warn\", '工单号或机台号为空,跳过获取表单数据', \" at components/mold.vue:636\");\n return _context11.abrupt(\"return\");\n case 3:\n _this13.loadingForm = true;\n payload = {\n workOrderNo: _this13.workOrderNo.trim(),\n machineNo: _this13.machineNo.trim()\n };\n _context11.prev = 5;\n _context11.next = 8;\n return _this13.$post({\n url: '/MesCutterLedger/GetFormData',\n data: JSON.stringify(payload),\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n case 8:\n res = _context11.sent;\n if (!(res.status !== 0)) {\n _context11.next = 13;\n break;\n }\n _this13.$showMessage(res.message || '获取表单数据失败');\n _this13.toolRecords = [];\n return _context11.abrupt(\"return\");\n case 13:\n list = Array.isArray(res.data) ? res.data : res.data && res.data.tbBillList ? res.data.tbBillList : res.data && res.data.data ? res.data.data : [];\n getField = function getField(obj) {\n for (var _len2 = arguments.length, keys = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n keys[_key2 - 1] = arguments[_key2];\n }\n for (var _i2 = 0, _keys2 = keys; _i2 < _keys2.length; _i2++) {\n var k = _keys2[_i2];\n if ((obj === null || obj === void 0 ? void 0 : obj[k]) !== undefined && (obj === null || obj === void 0 ? void 0 : obj[k]) !== null) return obj[k];\n }\n return null;\n };\n mapped = (list || []).map(function (t) {\n var _getField, _getField2;\n var upTimeRaw = getField(t, 'uP_TIME', 'UP_TIME', 'uPTime', 'UPTIME', 'UpTime');\n var downTimeRaw = getField(t, 'dowN_TIME', 'DOWN_TIME', 'downTime', 'DOWNTIME');\n var lifeWarnRaw = getField(t, 'lifE_WARN', 'LIFE_WARN', 'lifeWarn', 'LIFEWARN');\n var currentCjNum = getField(t, 'currentCjNum', 'CURRENTCJNUM', 'CurrentCjNum');\n var useCount = getField(t, 'usE_COUNT', 'USE_COUNT', 'useCount');\n var useLimit = getField(t, 'usE_LIMIT', 'USE_LIMIT', 'useLimit');\n var percent = '';\n if (useCount != null && useLimit != null && !isNaN(useCount) && !isNaN(useLimit) && Number(useLimit) > 0) {\n percent = (Number(useCount) / Number(useLimit) * 100).toFixed(0) + '%';\n }\n var parseNumber = function parseNumber(v) {\n if (v === null || v === undefined || v === '') return null;\n var s = String(v).replace(/[,%%]/g, '').trim();\n var n = parseFloat(s);\n return Number.isFinite(n) ? n : null;\n };\n var formatPercent = function formatPercent(n) {\n if (n === null || n === undefined || isNaN(n)) return '';\n if (n <= 1) return \"\".concat((n * 100).toFixed(0), \"%\");\n return \"\".concat(Number(n).toFixed(0), \"%\");\n };\n var lifeWarnNum = parseNumber(lifeWarnRaw);\n var warnStatus = getField(t, 'status', 'STATUS') || '';\n if (lifeWarnNum !== null && useCount != null && useLimit != null && !isNaN(useCount) && !isNaN(useLimit) && Number(useLimit) > 0) {\n var percentNum = Number(useCount) / Number(useLimit);\n warnStatus = percentNum >= lifeWarnNum ? '预警' : '正常';\n } else {\n warnStatus = warnStatus || '未知';\n }\n return {\n id: getField(t, 'id', 'ID') || \"\".concat(getField(t, 'cutteR_ID') || getField(t, 'CUTTER_ID') || '', \"-\").concat(upTimeRaw || ''),\n no: getField(t, 'cutteR_ID', 'CUTTER_ID', 'cutterId', 'no') || '',\n name: getField(t, 'cutteR_NAME', 'CUTTER_NAME', 'cutterName', 'name') || '',\n upTime: _this13.formatDateTime(upTimeRaw),\n upCount: (_getField = getField(t, 'uP_COUNT', 'UP_COUNT', 'upCount')) !== null && _getField !== void 0 ? _getField : '',\n downTime: _this13.formatDateTime(downTimeRaw),\n downCount: (_getField2 = getField(t, 'dowN_COUNT', 'DOWN_COUNT', 'downCount')) !== null && _getField2 !== void 0 ? _getField2 : '',\n useCount: useCount !== null && useCount !== void 0 ? useCount : '',\n useLimit: useLimit !== null && useLimit !== void 0 ? useLimit : '',\n lifePercent: percent,\n lifeWarn: formatPercent(lifeWarnNum),\n warnStatus: warnStatus,\n currentCjNum: currentCjNum\n };\n }); // 新增:按上刀时间降序排序(越晚的越上面)\n mapped.sort(function (a, b) {\n // 时间格式如 \"10-24 16:03\",转为 Date 对象比较\n var parse = function parse(s) {\n if (!s) return 0;\n // 补年份,假设都是今年\n var year = new Date().getFullYear();\n return new Date(\"\".concat(year, \"-\").concat(s.replace(/-/g, '-'), \":00\")).getTime();\n };\n return parse(b.upTime) - parse(a.upTime); // 注意这里顺序反过来\n });\n\n _this13.toolRecords = mapped;\n totalFromRes = Number((_ref5 = (_ref6 = (_ref7 = (_res$data$total2 = (_res$data4 = res.data) === null || _res$data4 === void 0 ? void 0 : _res$data4.total) !== null && _res$data$total2 !== void 0 ? _res$data$total2 : (_res$data5 = res.data) === null || _res$data5 === void 0 ? void 0 : _res$data5.totalCount) !== null && _ref7 !== void 0 ? _ref7 : res.total) !== null && _ref6 !== void 0 ? _ref6 : res.totalCount) !== null && _ref5 !== void 0 ? _ref5 : mapped.length);\n _this13.total = Number.isFinite(totalFromRes) ? totalFromRes : mapped.length;\n _context11.next = 27;\n break;\n case 22:\n _context11.prev = 22;\n _context11.t0 = _context11[\"catch\"](5);\n __f__(\"error\", '获取表单数据错误:', _context11.t0, \" at components/mold.vue:735\");\n _this13.$showMessage('获取数据失败,请检查网络连接');\n _this13.toolRecords = [];\n case 27:\n _context11.prev = 27;\n _this13.loadingForm = false;\n return _context11.finish(27);\n case 30:\n case \"end\":\n return _context11.stop();\n }\n }\n }, _callee11, null, [[5, 22, 27, 30]]);\n }))();\n },\n // 自动带出工单刀具信息,并获取工单最新采集数\n fetchDefaultToolFromWorkOrder: function fetchDefaultToolFromWorkOrder() {\n var _this14 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee12() {\n var _res$data6, res, _ref8, _order$CurrentCjNum, order, warn;\n return _regenerator.default.wrap(function _callee12$(_context12) {\n while (1) {\n switch (_context12.prev = _context12.next) {\n case 0:\n if (_this14.machineNo) {\n _context12.next = 2;\n break;\n }\n return _context12.abrupt(\"return\");\n case 2:\n _context12.prev = 2;\n _context12.next = 5;\n return _this14.$post({\n url: '/Womdaa/GetWomdaasByShow',\n data: JSON.stringify({\n machineNo: _this14.machineNo\n }),\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n case 5:\n res = _context12.sent;\n if (res.status === 0 && Array.isArray((_res$data6 = res.data) === null || _res$data6 === void 0 ? void 0 : _res$data6.tbBillList) && res.data.tbBillList.length > 0) {\n order = res.data.tbBillList[0]; // 新增:保存工单数据,用于报试产数\n _this14.order = order;\n _this14.orderId = order.id || order.ID || order.orderId || null;\n _this14.selectedToolNo = order.cutterId || order.cutteR_ID || '';\n _this14.toolName = order.cutterName || order.cutteR_NAME || '';\n _this14.toolModel = order.cutterModel || order.cutteR_MODEL || '';\n // 关键:获取工单最新采集数\n _this14.workOrderCurrentCjNum = (_ref8 = (_order$CurrentCjNum = order.CurrentCjNum) !== null && _order$CurrentCjNum !== void 0 ? _order$CurrentCjNum : order.currentCjNum) !== null && _ref8 !== void 0 ? _ref8 : null;\n // 新增:自动填充寿命比预警值\n if (order.modlLifeWorning !== undefined && order.modlLifeWorning !== null) {\n warn = Number(order.modlLifeWorning);\n _this14.lifeWarnInput = warn <= 1 ? (warn * 100).toFixed(0) : warn.toFixed(0);\n } else {\n _this14.lifeWarnInput = '';\n }\n } else {\n _this14.workOrderCurrentCjNum = null;\n _this14.order = {};\n _this14.orderId = null;\n }\n _context12.next = 15;\n break;\n case 9:\n _context12.prev = 9;\n _context12.t0 = _context12[\"catch\"](2);\n __f__(\"warn\", '自动带出工单刀具失败', _context12.t0, \" at components/mold.vue:776\");\n _this14.workOrderCurrentCjNum = null;\n _this14.order = {};\n _this14.orderId = null;\n case 15:\n case \"end\":\n return _context12.stop();\n }\n }\n }, _callee12, null, [[2, 9]]);\n }))();\n },\n formatDateTime: function formatDateTime(dateTimeStr) {\n if (!dateTimeStr) return '';\n try {\n var s = String(dateTimeStr).trim();\n if (/^\\d{10}$/.test(s)) {\n var d = new Date(Number(s) * 1000);\n return \"\".concat(d.getMonth() + 1, \"-\").concat(d.getDate(), \" \").concat(d.getHours(), \":\").concat(String(d.getMinutes()).padStart(2, '0'));\n }\n if (/^\\d{13}$/.test(s)) {\n var _d = new Date(Number(s));\n return \"\".concat(_d.getMonth() + 1, \"-\").concat(_d.getDate(), \" \").concat(_d.getHours(), \":\").concat(String(_d.getMinutes()).padStart(2, '0'));\n }\n var date = new Date(dateTimeStr);\n if (!isNaN(date.getTime())) {\n return \"\".concat(date.getMonth() + 1, \"-\").concat(date.getDate(), \" \").concat(date.getHours(), \":\").concat(String(date.getMinutes()).padStart(2, '0'));\n }\n var match = String(dateTimeStr).match(/(\\d{1,4}[-\\/]\\d{1,2}[-\\/]\\d{1,2}).*?(\\d{1,2}:\\d{2})/);\n if (match) return \"\".concat(match[1].replace(/-/g, '/').replace(/^\\d{4}\\//, function (m) {\n return m;\n }), \" \").concat(match[2]);\n return String(dateTimeStr);\n } catch (_unused) {\n return String(dateTimeStr);\n }\n },\n // 新增:选择调机师傅\n selectTiaojiUser: function selectTiaojiUser(u) {\n this.tiaojiStaffNo = u;\n this.isTiaojiUserSelectShow = false;\n this.tiaojiUserSearch = '';\n },\n // 新增:送检呼叫 + 报试产数\n handleInspectionCall: function handleInspectionCall() {\n var _this15 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee13() {\n var _this15$order;\n var okQty, badQty, staffNo, currentCjNum, payload, res;\n return _regenerator.default.wrap(function _callee13$(_context13) {\n while (1) {\n switch (_context13.prev = _context13.next) {\n case 0:\n if (_this15.tiaojiStaffNo) {\n _context13.next = 3;\n break;\n }\n _this15.$showMessage('请选择调机师傅');\n return _context13.abrupt(\"return\");\n case 3:\n okQty = Number(_this15.tiaojiOkQty);\n badQty = Number(_this15.tiaojiBadQty);\n if (!(isNaN(okQty) || okQty < 0)) {\n _context13.next = 8;\n break;\n }\n _this15.$showMessage('请输入有效的调机良品数');\n return _context13.abrupt(\"return\");\n case 8:\n if (!(isNaN(badQty) || badQty < 0)) {\n _context13.next = 11;\n break;\n }\n _this15.$showMessage('请输入有效的调机不良品数');\n return _context13.abrupt(\"return\");\n case 11:\n staffNo = _this15.tiaojiStaffNo.split(':')[0];\n currentCjNum = ((_this15$order = _this15.order) === null || _this15$order === void 0 ? void 0 : _this15$order.currentCjNum) || 0; // 调用报试产数接口(使用报工界面的接口)\n payload = {\n orderNo: _this15.workOrderNo,\n orderId: _this15.orderId,\n // 需要从工单数据中获取\n bf: badQty,\n // bf传递不良品数\n staffNo: staffNo,\n initCjNum: currentCjNum - badQty - okQty,\n // initCjNum = currentCjNum - bf - 良品数\n currentCjNum: currentCjNum,\n type: 'tiaoji',\n // 标识为调机报工\n tiaojiOkQty: okQty,\n // 新增:良品数\n tiaojiBadQty: badQty // 新增:不良品数\n };\n _context13.prev = 14;\n _this15.submitting = true;\n // 调用报工界面的报试产数接口\n _context13.next = 18;\n return _this15.$post({\n url: '/MesInvItemBarcodes/AddBFToBarcodes',\n data: payload\n });\n case 18:\n res = _context13.sent;\n if (!(res.status == 1)) {\n _context13.next = 22;\n break;\n }\n _this15.$showMessage(res.message);\n return _context13.abrupt(\"return\");\n case 22:\n _this15.$showMessage('调机报工成功');\n // 清空输入\n _this15.tiaojiOkQty = '';\n _this15.tiaojiBadQty = '';\n // 刷新数据\n _context13.next = 27;\n return _this15.fetchFormData();\n case 27:\n _context13.next = 29;\n return _this15.fetchDefaultToolFromWorkOrder();\n case 29:\n _context13.next = 31;\n return _this15.autoHandleMachineInspection();\n case 31:\n _context13.next = 37;\n break;\n case 33:\n _context13.prev = 33;\n _context13.t0 = _context13[\"catch\"](14);\n __f__(\"error\", '调机报工错误:', _context13.t0, \" at components/mold.vue:874\");\n _this15.$showMessage('调机报工失败,请检查网络');\n case 37:\n _context13.prev = 37;\n _this15.submitting = false;\n return _context13.finish(37);\n case 40:\n case \"end\":\n return _context13.stop();\n }\n }\n }, _callee13, null, [[14, 33, 37, 40]]);\n }))();\n },\n // 新增:自动处理调机送检界面的按钮逻辑\n autoHandleMachineInspection: function autoHandleMachineInspection() {\n var _this16 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee14() {\n var statusRes, statusForm, maStartTime, maShoutTime, maEndTime, needSave, updateData, saveRes;\n return _regenerator.default.wrap(function _callee14$(_context14) {\n while (1) {\n switch (_context14.prev = _context14.next) {\n case 0:\n _context14.prev = 0;\n _context14.next = 3;\n return _this16.$post({\n url: '/MesOrderSta/FindByOrderNo',\n data: {\n orderId: _this16.orderId,\n orderNo: _this16.workOrderNo\n }\n });\n case 3:\n statusRes = _context14.sent;\n if (!(!statusRes || !statusRes.data || !statusRes.data.tbBillList)) {\n _context14.next = 7;\n break;\n }\n __f__(\"error\", '获取工单状态失败', \" at components/mold.vue:894\");\n return _context14.abrupt(\"return\");\n case 7:\n statusForm = statusRes.data.tbBillList;\n maStartTime = statusForm.maStartTime;\n maShoutTime = statusForm.maShoutTime;\n maEndTime = statusForm.maEndTime; // 2. 准备需要更新的时间数据\n needSave = false;\n updateData = {\n id: statusForm.id,\n orderId: _this16.orderId,\n machineNo: _this16.machineNo,\n flag: -1\n }; // 3. 从上到下根据显示框里是否有时间依次设置\n // 如果调机开始时间为空,设置调机开始时间\n if (!maStartTime) {\n updateData.maStartTime = _this16.$getDate('yyyy-mm-dd hh24:mi:ss');\n updateData.flag = -1; // 调机开始的flag=-1\n needSave = true;\n } else {\n updateData.maStartTime = maStartTime;\n }\n\n // 如果送检呼叫时间为空,设置送检呼叫时间\n if (!maShoutTime) {\n updateData.maShoutTime = _this16.$getDate('yyyy-mm-dd hh24:mi:ss');\n updateData.flag = 1; // 首次送检呼叫的flag=1\n needSave = true;\n } else {\n updateData.maShoutTime = maShoutTime;\n }\n\n // 调机完成时间保持不变\n updateData.maEndTime = maEndTime || '';\n\n // 4. 如果有需要更新的时间,调用保存接口\n if (!needSave) {\n _context14.next = 21;\n break;\n }\n _context14.next = 19;\n return _this16.$post({\n url: '/MesOrderSta/ChangeMachineTime',\n data: updateData\n });\n case 19:\n saveRes = _context14.sent;\n if (saveRes && saveRes.data && saveRes.data.tbBillList) {\n __f__(\"log\", '调机送检界面时间自动更新成功', \" at components/mold.vue:942\");\n } else {\n __f__(\"error\", '调机送检界面时间自动更新失败', \" at components/mold.vue:944\");\n }\n case 21:\n _context14.next = 26;\n break;\n case 23:\n _context14.prev = 23;\n _context14.t0 = _context14[\"catch\"](0);\n __f__(\"error\", '自动处理调机送检界面失败:', _context14.t0, \" at components/mold.vue:948\");\n // 不中断主流程,只记录错误\n case 26:\n case \"end\":\n return _context14.stop();\n }\n }\n }, _callee14, null, [[0, 23]]);\n }))();\n },\n // 新增:获取调机师傅列表\n fetchTiaojiStaff: function fetchTiaojiStaff() {\n var _this17 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee15() {\n var res, staff;\n return _regenerator.default.wrap(function _callee15$(_context15) {\n while (1) {\n switch (_context15.prev = _context15.next) {\n case 0:\n _context15.prev = 0;\n _context15.next = 3;\n return _this17.$post({\n url: '/MesStaff/GetAllXS0101BYtj' // 与报工界面使用相同接口\n });\n case 3:\n res = _context15.sent;\n if (res.status === 0 && res.data && res.data.tbBillList) {\n staff = res.data.tbBillList;\n _this17.tiaojiUsers = staff.map(function (s) {\n return s.staffNo + ':' + s.staffName;\n });\n }\n _context15.next = 10;\n break;\n case 7:\n _context15.prev = 7;\n _context15.t0 = _context15[\"catch\"](0);\n __f__(\"error\", '获取调机师傅列表失败:', _context15.t0, \" at components/mold.vue:964\");\n case 10:\n case \"end\":\n return _context15.stop();\n }\n }\n }, _callee15, null, [[0, 7]]);\n }))();\n }\n },\n mounted: function mounted() {\n var _this18 = this;\n this.fetchTools('');\n this.machineNo = uni.getStorageSync('machineNo') || '';\n this.workOrderNo = uni.getStorageSync('daa001') || '';\n\n // 新增:获取调机师傅列表\n this.fetchTiaojiStaff();\n if (this.machineNo && this.workOrderNo) {\n this.fetchFormData().then( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee16() {\n return _regenerator.default.wrap(function _callee16$(_context16) {\n while (1) {\n switch (_context16.prev = _context16.next) {\n case 0:\n _context16.next = 2;\n return _this18.fetchDefaultToolFromWorkOrder();\n case 2:\n // 进入页面时赋值第一行 currentCjNum\n if (_this18.toolRecords.length > 0) {\n _this18.$set(_this18.toolRecords[0], 'currentCjNum', _this18.workOrderCurrentCjNum);\n }\n case 3:\n case \"end\":\n return _context16.stop();\n }\n }\n }, _callee16);\n })));\n } else {\n __f__(\"warn\", '机台号或工单号为空,无法获取表单数据', \" at components/mold.vue:985\");\n }\n\n // 启动自动保存定时器\n //this.startAutoSave();\n },\n beforeDestroy: function beforeDestroy() {\n // 清理定时器,防止内存泄漏\n this.stopAutoSave();\n }\n};\nexports.default = _default;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 1)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vY29tcG9uZW50cy9tb2xkLnZ1ZSJdLCJuYW1lcyI6WyJkYXRhIiwibWFjaGluZU5vIiwid29ya09yZGVyTm8iLCJhY3RpdmVUb29sTm8iLCJwYWdlSW5kZXgiLCJwYWdlU2l6ZSIsInRvdGFsIiwidG9vbExpc3QiLCJzZWxlY3RlZFRvb2xObyIsInRvb2xOYW1lIiwidG9vbE1vZGVsIiwic2hvd1Rvb2xEaWFsb2ciLCJzZWFyY2hLZXkiLCJmaWx0ZXJlZFRvb2xzIiwidXNlTGltaXRJbnB1dCIsImxpZmVXYXJuSW5wdXQiLCJ0b29sUmVjb3JkcyIsImxvYWRpbmdUb29scyIsImxvYWRpbmdGb3JtIiwic3VibWl0dGluZyIsIl9zZWFyY2hUaW1lciIsIndvcmtPcmRlckN1cnJlbnRDak51bSIsImF1dG9TYXZlVGltZXIiLCJpc0RpcnR5IiwiYXV0b1NhdmVJbnRlcnZhbE1zIiwiYXV0b1NhdmVFbmFibGVkIiwiYXV0b1NhdmVBY3Rpb25OYW1lIiwiaXNUaWFvamlVc2VyU2VsZWN0U2hvdyIsInRpYW9qaVN0YWZmTm8iLCJ0aWFvamlPa1F0eSIsInRpYW9qaUJhZFF0eSIsInRpYW9qaVVzZXJzIiwidGlhb2ppVXNlclNlYXJjaCIsIm9yZGVySWQiLCJvcmRlciIsImNvbXB1dGVkIiwidG90YWxQYWdlcyIsInRpYW9qaVN0YWZmRGlzcGxheSIsImZpbHRlcmVkVGlhb2ppVXNlcnMiLCJ3YXRjaCIsIm1ldGhvZHMiLCJmZXRjaEN1cnJlbnRDak51bSIsInVybCIsImhlYWRlcnMiLCJyZXMiLCJmb3VuZCIsIngiLCJoYW5kbGVSZWZyZXNoIiwic3RhcnRBdXRvU2F2ZSIsInN0b3BBdXRvU2F2ZSIsImNsZWFySW50ZXJ2YWwiLCJhdXRvU2F2ZVRpY2siLCJmbiIsIm5vcm1hbGl6ZUxpZmVXYXJuIiwib3BlblRvb2xEaWFsb2ciLCJjbG9zZVRvb2xEaWFsb2ciLCJmZXRjaFRvb2xzIiwicGF5bG9hZCIsImdldEZpZWxkIiwia2V5cyIsIm1hcHBlZCIsIm5vIiwibmFtZSIsIm1vZGVsIiwibGlmZVdhcm4iLCJ0b3RhbEZyb21SZXMiLCJwcmV2UGFnZSIsIm5leHRQYWdlIiwib25TZWFyY2hLZXlJbnB1dCIsImNsZWFyVGltZW91dCIsInNlYXJjaFRvb2wiLCJzZWxlY3RUb29sIiwiY29uZmlybVRvb2wiLCJzZXRVc2VMaW1pdCIsInYiLCJpc05hTiIsInVzZUxpbWl0IiwiaGFuZGxlVXBUb29sIiwic2RqcyIsImxpZmVXYXJuUmF0aW8iLCJ0b29sTm8iLCJ0eXBlIiwibW9kbExpZmVXb3JuaW5nIiwidW5pIiwidGl0bGUiLCJpY29uIiwiaGFuZGxlRG93blRvb2wiLCJ4ZGpzIiwiY2FuY2VsIiwiZmV0Y2hGb3JtRGF0YSIsImxpc3QiLCJwZXJjZW50Iiwid2FyblN0YXR1cyIsImlkIiwidXBUaW1lIiwidXBDb3VudCIsImRvd25UaW1lIiwiZG93bkNvdW50IiwidXNlQ291bnQiLCJsaWZlUGVyY2VudCIsImN1cnJlbnRDak51bSIsImZldGNoRGVmYXVsdFRvb2xGcm9tV29ya09yZGVyIiwid2FybiIsImZvcm1hdERhdGVUaW1lIiwic2VsZWN0VGlhb2ppVXNlciIsImhhbmRsZUluc3BlY3Rpb25DYWxsIiwib2tRdHkiLCJiYWRRdHkiLCJzdGFmZk5vIiwib3JkZXJObyIsImJmIiwiaW5pdENqTnVtIiwiYXV0b0hhbmRsZU1hY2hpbmVJbnNwZWN0aW9uIiwic3RhdHVzUmVzIiwic3RhdHVzRm9ybSIsIm1hU3RhcnRUaW1lIiwibWFTaG91dFRpbWUiLCJtYUVuZFRpbWUiLCJuZWVkU2F2ZSIsInVwZGF0ZURhdGEiLCJmbGFnIiwic2F2ZVJlcyIsImZldGNoVGlhb2ppU3RhZmYiLCJzdGFmZiIsIm1vdW50ZWQiLCJiZWZvcmVEZXN0cm95Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztlQXNQQTtFQUNBQTtJQUNBO01BQ0FDO01BQUE7TUFDQUM7TUFBQTtNQUNBQztNQUFBO01BQ0FDO01BQ0FDO01BQUE7TUFDQUM7TUFDQUM7TUFDQUM7TUFDQUM7TUFDQUM7TUFDQUM7TUFDQUM7TUFDQUM7TUFDQUM7TUFDQUM7TUFBQTtNQUNBQztNQUNBQztNQUNBQztNQUNBQztNQUNBQztNQUNBQztNQUFBOztNQUVBO01BQ0FDO01BQ0FDO01BQUE7TUFDQUM7TUFBQTtNQUNBQztNQUNBQztNQUFBOztNQUVBO01BQ0FDO01BQUE7TUFDQUM7TUFBQTtNQUNBQztNQUFBO01BQ0FDO01BQUE7TUFDQUM7TUFBQTtNQUNBQztNQUFBOztNQUVBO01BQ0FDO01BQUE7TUFDQUM7SUFDQTtFQUNBOztFQUNBQztJQUNBQztNQUNBO0lBQ0E7SUFDQTtJQUNBQztNQUNBO01BQ0E7TUFDQTtJQUNBO0lBQ0E7SUFDQUM7TUFDQTtNQUNBO01BQ0E7UUFBQTtNQUFBO0lBQ0E7RUFDQTtFQUNBQztJQUNBO0lBQ0EvQjtNQUFBO0lBQUE7SUFDQU07TUFBQTtJQUFBO0lBQ0FDO01BQUE7SUFBQTtJQUNBTjtNQUFBO0lBQUE7SUFDQUM7TUFBQTtJQUFBO0VBQ0E7RUFDQThCO0lBQ0E7SUFDQUM7TUFBQTtNQUFBO1FBQUE7UUFBQTtVQUFBO1lBQUE7Y0FBQTtnQkFBQSxJQUNBO2tCQUFBO2tCQUFBO2dCQUFBO2dCQUFBO2NBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUEsT0FFQTtrQkFDQUM7a0JBQ0ExQztvQkFBQUM7a0JBQUE7a0JBQ0EwQztvQkFBQTtrQkFBQTtnQkFDQTtjQUFBO2dCQUpBQztnQkFBQSxNQUtBQTtrQkFBQTtrQkFBQTtnQkFBQTtnQkFDQUM7a0JBQUEsT0FDQUM7Z0JBQUEsRUFDQTtnQkFBQSxpQ0FDQUQ7Y0FBQTtnQkFBQTtnQkFBQTtjQUFBO2dCQUFBO2dCQUFBO2dCQUdBO2NBQUE7Z0JBQUEsaUNBRUE7Y0FBQTtjQUFBO2dCQUFBO1lBQUE7VUFBQTtRQUFBO01BQUE7SUFDQTtJQUVBO0lBQ0FFO01BQUE7TUFBQTtRQUFBO1VBQUE7WUFBQTtjQUFBO2dCQUNBO2dCQUFBLE1BQ0E7a0JBQUE7a0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUEsT0FDQTtjQUFBO2dCQUFBO2dCQUFBLE9BQ0E7Y0FBQTtnQkFDQTtnQkFDQTtrQkFDQTtnQkFDQTtjQUFBO2dCQUVBO2NBQUE7Y0FBQTtnQkFBQTtZQUFBO1VBQUE7UUFBQTtNQUFBO0lBQ0E7SUFDQTtJQUNBQztNQUFBO01BQ0E7TUFDQTtNQUNBO1FBQ0E7TUFDQTtJQUNBO0lBQ0E7SUFDQUM7TUFDQTtRQUNBQztRQUNBO01BQ0E7SUFDQTtJQUNBO0lBQ0FDO01BQUE7TUFBQTtRQUFBO1FBQUE7VUFBQTtZQUFBO2NBQUE7Z0JBQUEsSUFDQTtrQkFBQTtrQkFBQTtnQkFBQTtnQkFBQTtjQUFBO2dCQUFBLElBQ0E7a0JBQUE7a0JBQUE7Z0JBQUE7Z0JBQUE7Y0FBQTtnQkFBQSxNQUNBO2tCQUFBO2tCQUFBO2dCQUFBO2dCQUFBO2NBQUE7Z0JBRUFDLDRGQUNBLG9DQUNBO2dCQUFBLElBQ0FBO2tCQUFBO2tCQUFBO2dCQUFBO2dCQUNBO2dCQUFBO2NBQUE7Z0JBQUE7Z0JBS0E7Z0JBQUE7Z0JBQUEsT0FDQUE7Y0FBQTtnQkFBQTtnQkFDQTtnQkFDQTtnQkFBQTtnQkFBQTtjQUFBO2dCQUFBO2dCQUFBO2dCQUVBO2NBQUE7Z0JBQUE7Z0JBRUE7Z0JBQUE7Y0FBQTtjQUFBO2dCQUFBO1lBQUE7VUFBQTtRQUFBO01BQUE7SUFFQTtJQUVBO0lBQ0FDO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO0lBQ0E7SUFDQUM7TUFDQTtNQUNBO01BQ0E7SUFDQTtJQUNBQztNQUNBO0lBQ0E7SUFDQUM7TUFBQTtNQUFBO1FBQUE7UUFBQTtVQUFBO1lBQUE7Y0FBQTtnQkFDQTtnQkFBQTtnQkFBQTtnQkFBQSxPQUVBO2tCQUNBZDtrQkFDQTFDO29CQUNBWTtvQkFDQVI7b0JBQ0FDO2tCQUNBO2tCQUNBc0M7b0JBQUE7a0JBQUE7Z0JBQ0E7Y0FBQTtnQkFSQUM7Z0JBVUE7a0JBQ0FhLCtDQUNBYix3REFDQUEsNENBQ0E7a0JBRUFjO29CQUFBO3NCQUFBQztvQkFBQTtvQkFDQTtzQkFBQTtzQkFBQTtvQkFBQTtvQkFDQTtrQkFDQSxHQUVBO2tCQUNBQztvQkFBQTtzQkFDQUM7c0JBQ0FDO3NCQUNBQztzQkFDQUM7b0JBQ0E7a0JBQUE7a0JBRUE7a0JBQ0E7a0JBRUFDLGtGQUNBckIsOFhBQ0E7a0JBQ0E7a0JBQ0E7b0JBQ0E7a0JBQ0E7Z0JBQ0E7a0JBQ0E7Z0JBQ0E7Z0JBQUE7Z0JBQUE7Y0FBQTtnQkFBQTtnQkFBQTtnQkFFQTtnQkFDQTtjQUFBO2dCQUFBO2dCQUVBO2dCQUFBO2NBQUE7Y0FBQTtnQkFBQTtZQUFBO1VBQUE7UUFBQTtNQUFBO0lBRUE7SUFDQXNCO01BQUE7TUFBQTtRQUFBO1VBQUE7WUFBQTtjQUFBO2dCQUFBLE1BQ0E7a0JBQUE7a0JBQUE7Z0JBQUE7Z0JBQ0E7Z0JBQUE7Z0JBQUEsT0FDQTtjQUFBO2NBQUE7Z0JBQUE7WUFBQTtVQUFBO1FBQUE7TUFBQTtJQUVBO0lBQ0FDO01BQUE7TUFBQTtRQUFBO1VBQUE7WUFBQTtjQUFBO2dCQUFBLE1BQ0E7a0JBQUE7a0JBQUE7Z0JBQUE7Z0JBQ0E7Z0JBQUE7Z0JBQUEsT0FDQTtjQUFBO2NBQUE7Z0JBQUE7WUFBQTtVQUFBO1FBQUE7TUFBQTtJQUVBO0lBQ0FDO01BQUE7TUFDQUM7TUFDQTtRQUNBO01BQ0E7SUFDQTtJQUNBQztNQUFBO01BQUE7UUFBQTtVQUFBO1lBQUE7Y0FBQTtnQkFDQTtnQkFBQTtnQkFBQSxPQUNBO2NBQUE7Y0FBQTtnQkFBQTtZQUFBO1VBQUE7UUFBQTtNQUFBO0lBQ0E7SUFDQUM7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7UUFDQTtRQUNBO1FBQ0E7TUFDQTtRQUNBO01BQ0E7SUFDQTtJQUNBQztNQUNBO0lBQ0E7SUFDQUM7TUFBQTtNQUFBO1FBQUE7UUFBQTtVQUFBO1lBQUE7Y0FBQTtnQkFBQSxJQUNBO2tCQUFBO2tCQUFBO2dCQUFBO2dCQUNBO2dCQUFBO2NBQUE7Z0JBR0FDO2dCQUFBLE1BQ0FDO2tCQUFBO2tCQUFBO2dCQUFBO2dCQUNBO2dCQUFBO2NBQUE7Z0JBR0E7a0JBQ0E7b0JBQ0E7c0JBQUFDO29CQUFBO2tCQUNBO2tCQUNBO2dCQUNBO2dCQUNBO2tCQUFBO29CQUFBQTtrQkFBQTtnQkFBQTtnQkFDQTtjQUFBO2NBQUE7Z0JBQUE7WUFBQTtVQUFBO1FBQUE7TUFBQTtJQUNBO0lBQ0E7SUFDQUM7TUFBQTtNQUFBO1FBQUE7UUFBQTtVQUFBO1lBQUE7Y0FBQTtnQkFBQSxJQUNBO2tCQUFBO2tCQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2NBQUE7Z0JBQUEsSUFDQTtrQkFBQTtrQkFBQTtnQkFBQTtnQkFBQTtnQkFBQTtjQUFBO2dCQUFBLElBQ0E7a0JBQUE7a0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Y0FBQTtnQkFBQSxJQUVBO2tCQUFBO2tCQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2NBQUE7Z0JBQ0FEO2dCQUFBLE1BQ0FEO2tCQUFBO2tCQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2NBQUE7Z0JBRUE7Z0JBQ0FHO2dCQUNBQztnQkFDQXRCO2tCQUNBdkQ7a0JBQ0FEO2tCQUNBK0U7a0JBQ0FDO2tCQUNBTDtrQkFDQUU7a0JBQUE7a0JBQ0FJO2dCQUNBO2dCQUFBO2dCQUVBO2dCQUFBO2dCQUFBLE9BQ0E7a0JBQ0F4QztrQkFDQTFDO2tCQUNBMkM7b0JBQUE7a0JBQUE7Z0JBQ0E7Y0FBQTtnQkFKQUM7Z0JBQUEsTUFLQUE7a0JBQUE7a0JBQUE7Z0JBQUE7Z0JBQ0F1QztrQkFDQUM7a0JBQ0FDO2dCQUNBO2dCQUFBO2NBQUE7Z0JBRUE7a0JBQ0FGO29CQUNBQztvQkFDQUM7a0JBQ0E7Z0JBQ0E7Y0FBQTtnQkFBQSxNQUVBekM7a0JBQUE7a0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUEsT0FDQTtjQUFBO2dCQUFBO2dCQUFBO2NBQUE7Z0JBQUE7Z0JBQUE7Z0JBR0E7Z0JBQ0E7Z0JBQUE7Y0FBQTtnQkFBQTtnQkFHQTtnQkFBQTtjQUFBO2NBQUE7Z0JBQUE7WUFBQTtVQUFBO1FBQUE7TUFBQTtJQUVBO0lBQ0E7SUFDQTBDO01BQUE7TUFBQTtRQUFBO1FBQUE7VUFBQTtZQUFBO2NBQUE7Z0JBQUEsSUFDQTtrQkFBQTtrQkFBQTtnQkFBQTtnQkFBQTtnQkFBQTtjQUFBO2dCQUFBLElBQ0E7a0JBQUE7a0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Y0FBQTtnQkFBQSxJQUNBO2tCQUFBO2tCQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2NBQUE7Z0JBQ0E7Z0JBQ0E7Z0JBQ0FWLDBDQUNBO2dCQUVBO2dCQUNBVztnQkFDQVI7Z0JBQ0F0QjtrQkFDQXZEO2tCQUNBRDtrQkFDQStFO2tCQUNBQztrQkFDQUw7a0JBQ0FXO2tCQUFBO2tCQUNBTDtnQkFDQTtnQkFBQTtnQkFFQTtnQkFBQTtnQkFBQSxPQUNBO2tCQUNBeEM7a0JBQ0ExQztrQkFDQTJDO29CQUFBO2tCQUFBO2dCQUNBO2NBQUE7Z0JBSkFDO2dCQUFBLE1BS0FBO2tCQUFBO2tCQUFBO2dCQUFBO2dCQUNBdUM7a0JBQ0FDO2tCQUNBQztnQkFDQTtnQkFBQTtjQUFBO2dCQUVBO2tCQUNBRjtvQkFDQUM7b0JBQ0FDO2tCQUNBO2dCQUNBO2NBQUE7Z0JBQUEsTUFFQXpDO2tCQUFBO2tCQUFBO2dCQUFBO2dCQUFBO2dCQUFBLE9BQ0E7Y0FBQTtnQkFBQTtnQkFBQTtjQUFBO2dCQUFBO2dCQUFBO2dCQUdBO2dCQUNBO2dCQUFBO2NBQUE7Z0JBQUE7Z0JBR0E7Z0JBQUE7Y0FBQTtjQUFBO2dCQUFBO1lBQUE7VUFBQTtRQUFBO01BQUE7SUFFQTtJQUNBNEM7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7SUFDQTtJQUNBQztNQUFBO01BQUE7UUFBQTtRQUFBO1VBQUE7WUFBQTtjQUFBO2dCQUFBLE1BQ0E7a0JBQUE7a0JBQUE7Z0JBQUE7Z0JBQ0E7Z0JBQUE7Y0FBQTtnQkFHQTtnQkFDQWhDO2tCQUNBdkQ7a0JBQ0FEO2dCQUNBO2dCQUFBO2dCQUFBO2dCQUFBLE9BRUE7a0JBQ0F5QztrQkFDQTFDO2tCQUNBMkM7b0JBQUE7a0JBQUE7Z0JBQ0E7Y0FBQTtnQkFKQUM7Z0JBQUEsTUFLQUE7a0JBQUE7a0JBQUE7Z0JBQUE7Z0JBQ0E7Z0JBQ0E7Z0JBQUE7Y0FBQTtnQkFHQThDLDRDQUNBOUMsd0RBQ0FBLDRDQUNBO2dCQUVBYztrQkFBQTtvQkFBQUM7a0JBQUE7a0JBQ0E7b0JBQUE7b0JBQUE7a0JBQUE7a0JBQ0E7Z0JBQ0E7Z0JBRUFDO2tCQUFBO2tCQUNBO2tCQUNBO2tCQUNBO2tCQUNBO2tCQUVBO2tCQUNBO2tCQUVBO2tCQUNBO29CQUNBK0I7a0JBQ0E7a0JBRUE7b0JBQ0E7b0JBQ0E7b0JBQ0E7b0JBQ0E7a0JBQ0E7a0JBQ0E7b0JBQ0E7b0JBQ0E7b0JBQ0E7a0JBQ0E7a0JBQ0E7a0JBRUE7a0JBQ0E7b0JBQ0E7b0JBQ0FDO2tCQUNBO29CQUNBQTtrQkFDQTtrQkFFQTtvQkFDQUM7b0JBQ0FoQztvQkFDQUM7b0JBQ0FnQztvQkFDQUM7b0JBQ0FDO29CQUNBQztvQkFDQUM7b0JBQ0F0QjtvQkFDQXVCO29CQUNBbkM7b0JBQ0E0QjtvQkFDQVE7a0JBQ0E7Z0JBQ0EsSUFFQTtnQkFDQXhDO2tCQUNBO2tCQUNBO29CQUNBO29CQUNBO29CQUNBO29CQUNBO2tCQUNBO2tCQUNBO2dCQUNBOztnQkFFQTtnQkFDQUssbUZBQ0FyQixnWUFDQTtnQkFDQTtnQkFBQTtnQkFBQTtjQUFBO2dCQUFBO2dCQUFBO2dCQUVBO2dCQUNBO2dCQUNBO2NBQUE7Z0JBQUE7Z0JBRUE7Z0JBQUE7Y0FBQTtjQUFBO2dCQUFBO1lBQUE7VUFBQTtRQUFBO01BQUE7SUFFQTtJQUNBO0lBQ0F5RDtNQUFBO01BQUE7UUFBQTtRQUFBO1VBQUE7WUFBQTtjQUFBO2dCQUFBLElBQ0E7a0JBQUE7a0JBQUE7Z0JBQUE7Z0JBQUE7Y0FBQTtnQkFBQTtnQkFBQTtnQkFBQSxPQUVBO2tCQUNBM0Q7a0JBQ0ExQztvQkFBQUM7a0JBQUE7a0JBQ0EwQztvQkFBQTtrQkFBQTtnQkFDQTtjQUFBO2dCQUpBQztnQkFLQTtrQkFDQVYsZ0NBRUE7a0JBQ0E7a0JBQ0E7a0JBRUE7a0JBQ0E7a0JBQ0E7a0JBQ0E7a0JBQ0E7a0JBQ0E7a0JBQ0E7b0JBQ0FvRTtvQkFDQTtrQkFDQTtvQkFDQTtrQkFDQTtnQkFDQTtrQkFDQTtrQkFDQTtrQkFDQTtnQkFDQTtnQkFBQTtnQkFBQTtjQUFBO2dCQUFBO2dCQUFBO2dCQUVBO2dCQUNBO2dCQUNBO2dCQUNBO2NBQUE7Y0FBQTtnQkFBQTtZQUFBO1VBQUE7UUFBQTtNQUFBO0lBRUE7SUFDQUM7TUFDQTtNQUNBO1FBQ0E7UUFDQTtVQUNBO1VBQ0E7UUFDQTtRQUNBO1VBQ0E7VUFDQTtRQUNBO1FBQ0E7UUFDQTtVQUNBO1FBQ0E7UUFDQTtRQUNBO1VBQUE7UUFBQTtRQUNBO01BQ0E7UUFDQTtNQUNBO0lBQ0E7SUFFQTtJQUNBQztNQUNBO01BQ0E7TUFDQTtJQUNBO0lBRUE7SUFDQUM7TUFBQTtNQUFBO1FBQUE7UUFBQTtRQUFBO1VBQUE7WUFBQTtjQUFBO2dCQUFBLElBRUE7a0JBQUE7a0JBQUE7Z0JBQUE7Z0JBQ0E7Z0JBQUE7Y0FBQTtnQkFJQUM7Z0JBQ0FDO2dCQUFBLE1BRUFoQztrQkFBQTtrQkFBQTtnQkFBQTtnQkFDQTtnQkFBQTtjQUFBO2dCQUFBLE1BSUFBO2tCQUFBO2tCQUFBO2dCQUFBO2dCQUNBO2dCQUFBO2NBQUE7Z0JBSUFpQztnQkFDQVIsa0lBRUE7Z0JBQ0EzQztrQkFDQW9EO2tCQUNBNUU7a0JBQUE7a0JBQ0E2RTtrQkFBQTtrQkFDQUY7a0JBQ0FHO2tCQUFBO2tCQUNBWDtrQkFDQW5CO2tCQUFBO2tCQUNBcEQ7a0JBQUE7a0JBQ0FDO2dCQUNBO2dCQUFBO2dCQUdBO2dCQUNBO2dCQUFBO2dCQUFBLE9BQ0E7a0JBQ0FZO2tCQUNBMUM7Z0JBQ0E7Y0FBQTtnQkFIQTRDO2dCQUFBLE1BS0FBO2tCQUFBO2tCQUFBO2dCQUFBO2dCQUNBO2dCQUFBO2NBQUE7Z0JBSUE7Z0JBQ0E7Z0JBQ0E7Z0JBQ0E7Z0JBQ0E7Z0JBQUE7Z0JBQUEsT0FDQTtjQUFBO2dCQUFBO2dCQUFBLE9BQ0E7Y0FBQTtnQkFBQTtnQkFBQSxPQUdBO2NBQUE7Z0JBQUE7Z0JBQUE7Y0FBQTtnQkFBQTtnQkFBQTtnQkFFQTtnQkFDQTtjQUFBO2dCQUFBO2dCQUVBO2dCQUFBO2NBQUE7Y0FBQTtnQkFBQTtZQUFBO1VBQUE7UUFBQTtNQUFBO0lBRUE7SUFFQTtJQUNBb0U7TUFBQTtNQUFBO1FBQUE7UUFBQTtVQUFBO1lBQUE7Y0FBQTtnQkFBQTtnQkFBQTtnQkFBQSxPQUdBO2tCQUNBdEU7a0JBQ0ExQztvQkFDQWlDO29CQUNBNEU7a0JBQ0E7Z0JBQ0E7Y0FBQTtnQkFOQUk7Z0JBQUEsTUFRQTtrQkFBQTtrQkFBQTtnQkFBQTtnQkFDQTtnQkFBQTtjQUFBO2dCQUlBQztnQkFDQUM7Z0JBQ0FDO2dCQUNBQyxrQ0FFQTtnQkFDQUM7Z0JBQ0FDO2tCQUNBMUI7a0JBQ0E1RDtrQkFDQWhDO2tCQUNBdUg7Z0JBQ0EsR0FFQTtnQkFDQTtnQkFDQTtrQkFDQUQ7a0JBQ0FBO2tCQUNBRDtnQkFDQTtrQkFDQUM7Z0JBQ0E7O2dCQUVBO2dCQUNBO2tCQUNBQTtrQkFDQUE7a0JBQ0FEO2dCQUNBO2tCQUNBQztnQkFDQTs7Z0JBRUE7Z0JBQ0FBOztnQkFFQTtnQkFBQSxLQUNBRDtrQkFBQTtrQkFBQTtnQkFBQTtnQkFBQTtnQkFBQSxPQUNBO2tCQUNBNUU7a0JBQ0ExQztnQkFDQTtjQUFBO2dCQUhBeUg7Z0JBS0E7a0JBQ0E7Z0JBQ0E7a0JBQ0E7Z0JBQ0E7Y0FBQTtnQkFBQTtnQkFBQTtjQUFBO2dCQUFBO2dCQUFBO2dCQUdBO2dCQUNBO2NBQUE7Y0FBQTtnQkFBQTtZQUFBO1VBQUE7UUFBQTtNQUFBO0lBRUE7SUFFQTtJQUNBQztNQUFBO01BQUE7UUFBQTtRQUFBO1VBQUE7WUFBQTtjQUFBO2dCQUFBO2dCQUFBO2dCQUFBLE9BRUE7a0JBQ0FoRjtnQkFDQTtjQUFBO2dCQUZBRTtnQkFHQTtrQkFDQStFO2tCQUNBO29CQUFBO2tCQUFBO2dCQUNBO2dCQUFBO2dCQUFBO2NBQUE7Z0JBQUE7Z0JBQUE7Z0JBRUE7Y0FBQTtjQUFBO2dCQUFBO1lBQUE7VUFBQTtRQUFBO01BQUE7SUFFQTtFQUNBO0VBQ0FDO0lBQUE7SUFDQTtJQUNBO0lBQ0E7O0lBRUE7SUFDQTtJQUVBO01BQ0E7UUFBQTtVQUFBO1lBQUE7Y0FBQTtnQkFBQTtnQkFBQSxPQUNBO2NBQUE7Z0JBQ0E7Z0JBQ0E7a0JBQ0E7Z0JBQ0E7Y0FBQTtjQUFBO2dCQUFBO1lBQUE7VUFBQTtRQUFBO01BQUEsQ0FDQTtJQUNBO01BQ0E7SUFDQTs7SUFFQTtJQUNBO0VBQ0E7RUFDQUM7SUFDQTtJQUNBO0VBQ0E7QUFDQTtBQUFBLDJCIiwiZmlsZSI6IjYyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiPHRlbXBsYXRlPlxyXG4gICAgPHZpZXcgY2xhc3M9XCJwYWdlXCI+XHJcbiAgICAgICAgPCEtLSDliIDlhbfpgInmi6nljLogLS0+XHJcbiAgICAgICAgPHZpZXcgY2xhc3M9XCJ0b3Atc2VjdGlvbi1ncmlkXCI+XHJcbiAgICAgICAgICAgIDwhLS0g56ys5LiA6KGM77ya56e76Zmk5YiA5YW355uu5b2V5oyJ6ZKuIC0tPlxyXG4gICAgICAgICAgICA8dmlldyBjbGFzcz1cImZvcm0tcm93XCI+XHJcbiAgICAgICAgICAgICAgICA8dmlldyBjbGFzcz1cImZvcm0tY2VsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj7liIDlhbfnvJblj7fvvJo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0IHNtYWxsLWZvbnRcIiB2LW1vZGVsPVwic2VsZWN0ZWRUb29sTm9cIiBwbGFjZWhvbGRlcj1cIuivt+mAmui/h+WIgOWFt+ebruW9lemAieaLqVwiIGRpc2FibGVkIC8+XHJcbiAgICAgICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICAgICAgICA8dmlldyBjbGFzcz1cImZvcm0tY2VsbCBmb3JtLWNlbGwtZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgaGlnaGxpZ2h0LWxhYmVsXCI+5L2/55So5LiK6ZmQ77yaPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dCBzbWFsbC1mb250IGlucHV0LXVzZS1saW1pdFwiIHR5cGU9XCJudW1iZXJcIiB2LW1vZGVsPVwidXNlTGltaXRJbnB1dFwiIHBsYWNlaG9sZGVyPVwi5q+P5qyh5LiK5YiA5pe25omL5aGr5LiK6ZmQXCIgOmRpc2FibGVkPVwiIXNlbGVjdGVkVG9vbE5vIHx8IGxvYWRpbmdGb3JtXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCIgc3R5bGU9XCJtYXJnaW4tbGVmdDoxNnB4O1wiPuWvv+WRveavlOmihOitpuWAvO+8mjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJpbnB1dC13aXRoLXVuaXRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXQgc21hbGwtZm9udCBpbnB1dC1saWZlLXdhcm5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD1cImxpZmVXYXJuSW5wdXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCLlpoI5MFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCIhc2VsZWN0ZWRUb29sTm8gfHwgbG9hZGluZ0Zvcm1cIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVuaXQtdGV4dFwiPiU8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgICA8L3ZpZXc+XHJcblxyXG4gICAgICAgICAgICA8IS0tIOesrOS6jOihjO+8muWcqOacgOWQjua3u+WKoOWIgOWFt+ebruW9leaMiemSriAtLT5cclxuICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJmb3JtLXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPCEtLSDliIDlhbflkI3np7AgLS0+XHJcbiAgICAgICAgICAgICAgICA8dmlldyBjbGFzcz1cImZvcm0tY2VsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj7liIDlhbflkI3np7DvvJo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0IHNtYWxsLWZvbnQgaW5wdXQtdG9vbC1uYW1lXCIgdi1tb2RlbD1cInRvb2xOYW1lXCIgcGxhY2Vob2xkZXI9XCLliIDlhbfluKblh7pcIiBkaXNhYmxlZCAvPlxyXG4gICAgICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgICAgICAgPCEtLSDop4TmoLzlnovlj7cgLS0+XHJcbiAgICAgICAgICAgICAgICA8dmlldyBjbGFzcz1cImZvcm0tY2VsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj7op4TmoLzlnovlj7fvvJo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0IHNtYWxsLWZvbnQgaW5wdXQtdG9vbC1tb2RlbFwiIHYtbW9kZWw9XCJ0b29sTW9kZWxcIiBwbGFjZWhvbGRlcj1cIuWIgOWFt+W4puWHulwiIGRpc2FibGVkIC8+XHJcbiAgICAgICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICAgICAgICA8IS0tIOWIgOWFt+ebruW9leaMiemSruWPs+enuyAtLT5cclxuICAgICAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwiZm9ybS1jZWxsIHRvb2wtZGlyLWNlbGxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLWJsdWUgbGFyZ2UtYnRuXCIgQGNsaWNrPVwib3BlblRvb2xEaWFsb2dcIiA6ZGlzYWJsZWQ9XCJsb2FkaW5nVG9vbHNcIj7liIDlhbfnm67lvZU8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgICAgICAgIDwhLS0g5paw5aKe77ya5Yi35paw5oyJ6ZKuIC0tPlxyXG4gICAgICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJmb3JtLWNlbGxcIiBzdHlsZT1cImZsZXg6MCAwIGF1dG87IG1hcmdpbi1sZWZ0OjE2cHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0bi1ibHVlIGxhcmdlLWJ0blwiIEBjbGljaz1cImhhbmRsZVJlZnJlc2hcIiA6ZGlzYWJsZWQ9XCJsb2FkaW5nRm9ybSB8fCBzdWJtaXR0aW5nXCI+5Yi35pawPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICA8L3ZpZXc+ICA8IS0tIOi/memHjOmXreWQiCB0b3Atc2VjdGlvbi1ncmlkIC0tPlxyXG4gICAgICAgIDwhLS0g5pON5L2c5oyJ6ZKuIC0g56e75Ye6IHRvcC1zZWN0aW9uLWdyaWQgLS0+XHJcbiAgICAgICAgPHZpZXcgY2xhc3M9XCJidXR0b24tcm93XCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJzYXZlLWJ0blwiIEBjbGljaz1cImhhbmRsZVVwVG9vbFwiIDpkaXNhYmxlZD1cInN1Ym1pdHRpbmcgfHwgbG9hZGluZ0Zvcm1cIj7kuIrliIDmj5DkuqQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInNhdmUtYnRuXCIgQGNsaWNrPVwiaGFuZGxlRG93blRvb2xcIiA6ZGlzYWJsZWQ9XCJzdWJtaXR0aW5nIHx8IGxvYWRpbmdGb3JtXCI+5LiL5YiA5o+Q5LqkPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjYW5jZWwtYnRuXCIgQGNsaWNrPVwiY2FuY2VsXCIgOmRpc2FibGVkPVwic3VibWl0dGluZyB8fCBsb2FkaW5nRm9ybVwiPua4heepuuWIgOWFt+mAieaLqTwvYnV0dG9uPlxyXG4gICAgICAgIDwvdmlldz5cclxuXHJcbiAgICAgICAgPCEtLSDmlrDlop7vvJrosIPmnLrmlbDmja7ovpPlhaXljLrln58gLS0+XHJcbiAgICAgICAgPHZpZXcgY2xhc3M9XCJ0aWFvamktc2VjdGlvblwiPlxyXG4gICAgICAgICAgICA8dmlldyBjbGFzcz1cInRpYW9qaS1yb3dcIj5cclxuICAgICAgICAgICAgICAgIDwhLS0g5b2T5YmN6LCD5py65biI5YKFIC0tPlxyXG4gICAgICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJjdXJyZW50LXVzZXItc2VjdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0PuW9k+WJjeiwg+acuuW4iOWChe+8mjwvdGV4dD5cclxuICAgICAgICAgICAgICAgICAgICA8dGV4dCBjbGFzcz1cImN1cnJlbnQtdXNlci1uYW1lXCI+e3sgdGlhb2ppU3RhZmZEaXNwbGF5IHx8ICfmnKrpgInmi6knIH19PC90ZXh0PlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJzZWxlY3QtdXNlci1idG5cIiBAY2xpY2s9XCJpc1RpYW9qaVVzZXJTZWxlY3RTaG93ID0gdHJ1ZVwiPumAieS6ujwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC92aWV3PlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0g6LCD5py66Imv5ZOB5pWwIC0tPlxyXG4gICAgICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJ0aWFvamktaW5wdXQtc2VjdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0Puiwg+acuuiJr+WTgeaVsO+8mjwvdGV4dD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdi1tb2RlbD1cInRpYW9qaU9rUXR5XCIgY2xhc3M9XCJpbnAgdGlhb2ppLWlucHV0XCIgdHlwZT1cIm51bWJlclwiIHBsYWNlaG9sZGVyPVwi6K+36L6T5YWl5pWw6YePXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvdmlldz5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIOiwg+acuuS4jeiJr+WTgeaVsCAtLT5cclxuICAgICAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwidGlhb2ppLWlucHV0LXNlY3Rpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICA8dGV4dD7osIPmnLrkuI3oia/lk4HmlbDvvJo8L3RleHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHYtbW9kZWw9XCJ0aWFvamlCYWRRdHlcIiBjbGFzcz1cImlucCB0aWFvamktaW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgcGxhY2Vob2xkZXI9XCLor7fovpPlhaXmlbDph49cIiAvPlxyXG4gICAgICAgICAgICAgICAgPC92aWV3PlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0g6YCB5qOA5ZG85Y+r5oyJ6ZKuIC0tPlxyXG4gICAgICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJ0aWFvamktc3VibWl0LXNlY3Rpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZGV0YWlscy1idG5cIiBAY2xpY2s9XCJoYW5kbGVJbnNwZWN0aW9uQ2FsbFwiPumAgeajgOWRvOWPqzwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgPC92aWV3PlxyXG5cclxuICAgICAgICA8IS0tIOmAieaLqeiwg+acuuW4iOWCheW8ueeqlyAtLT5cclxuICAgICAgICA8dmlldyB2LWlmPVwiaXNUaWFvamlVc2VyU2VsZWN0U2hvd1wiIGNsYXNzPVwib3ZlcmxheVwiPlxyXG4gICAgICAgICAgICA8dmlldyBjbGFzcz1cInBvcHVwIHVzZXItc2VsZWN0LXBvcHVwXCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIOaQnOe0ouagjyAtLT5cclxuICAgICAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwidXNlci1zZWFyY2gtYmFyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHYtbW9kZWwudHJpbT1cInRpYW9qaVVzZXJTZWFyY2hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidXNlci1zZWFyY2gtaW5wdXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIui+k+WFpeW3peWPt+aIluWnk+WQjeaQnOe0olwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIEBrZXlkb3duLmVudGVyLnByZXZlbnQgLz5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHYtaWY9XCJ0aWFvamlVc2VyU2VhcmNoXCIgY2xhc3M9XCJ1c2VyLXNlYXJjaC1jbGVhclwiIEBjbGljaz1cInRpYW9qaVVzZXJTZWFyY2g9JydcIj7muIXnqbo8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8dmlldyBjbGFzcz1cInVzZXItc2VhcmNoLWluZm9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAg5Yy56YWN77yae3sgZmlsdGVyZWRUaWFvamlVc2Vycy5sZW5ndGggfX0gLyB7eyB0aWFvamlVc2Vycy5sZW5ndGggfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICAgICAgICA8dmlldyBjbGFzcz1cInVzZXItbGlzdC1zY3JvbGxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1pZj1cImZpbHRlcmVkVGlhb2ppVXNlcnMubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwidXNlci1saXN0LWdyaWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdi1mb3I9XCIodSwgaW5kZXgpIGluIGZpbHRlcmVkVGlhb2ppVXNlcnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6a2V5PVwiaW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9XCJbJ3VzZXItbGlzdC1idG4nLCB7J3NlbGVjdGVkJzogdT09PXRpYW9qaVN0YWZmTm99XVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdFRpYW9qaVVzZXIodSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVzZXItY29kZVwiPnt7IHUuc3BsaXQoJzonKVswXSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVzZXItbmFtZVwiPnt7IHUuc3BsaXQoJzonKVsxXSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8dmlldyB2LWVsc2UgY2xhc3M9XCJuby11c2VyLXJlc3VsdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICDmnKrmib7liLDljLnphY3kurrlkZhcclxuICAgICAgICAgICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICAgICAgICA8dmlldyBjbGFzcz1cInVzZXItcG9wdXAtZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNsZWFuLWJ0biB3aWRlLWJ0blwiIEBjbGljaz1cImlzVGlhb2ppVXNlclNlbGVjdFNob3cgPSBmYWxzZVwiPuWFs+mXrTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgPC92aWV3PlxyXG5cclxuICAgICAgICA8IS0tIOWIgOWFt+ebruW9leW8ueeqlyAtLT5cclxuICAgICAgICA8dmlldyB2LWlmPVwic2hvd1Rvb2xEaWFsb2dcIiBjbGFzcz1cImRpYWxvZy1vdmVybGF5XCI+XHJcbiAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwiZGlhbG9nXCI+XHJcbiAgICAgICAgICAgICAgICA8dmlldyBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdi1tb2RlbD1cInNlYXJjaEtleVwiIHBsYWNlaG9sZGVyPVwi6L6T5YWl5YiA5YW357yW56CB44CB5ZCN56ew5qih57OK5pCc57SiXCIgY2xhc3M9XCJpbnB1dFwiIEBpbnB1dD1cIm9uU2VhcmNoS2V5SW5wdXRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4tYmx1ZVwiIEBjbGljaz1cInNlYXJjaFRvb2xcIiA6ZGlzYWJsZWQ9XCJsb2FkaW5nVG9vbHNcIj7mkJzntKI8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwidG9vbC1saXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB2LWZvcj1cInRvb2wgaW4gZmlsdGVyZWRUb29sc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6a2V5PVwidG9vbC5ub1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRvb2wtYnRuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzcz1cInsgYWN0aXZlOiBhY3RpdmVUb29sTm8gPT09IHRvb2wubm8gfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9XCJzZWxlY3RUb29sKHRvb2wpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHRvb2wubm8gfX0gfCB7eyB0b29sLm5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwiZGlhbG9nLWFjdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0bi1ibHVlXCIgQGNsaWNrPVwicHJldlBhZ2VcIiA6ZGlzYWJsZWQ9XCJwYWdlSW5kZXggPT09IDEgfHwgbG9hZGluZ1Rvb2xzXCI+5LiK5LiA6aG1PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luOiAwIDEycHg7XCI+56yse3sgcGFnZUluZGV4IH196aG1IC8g5YWxe3sgdG90YWxQYWdlcyB9femhtTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0bi1ibHVlXCIgQGNsaWNrPVwibmV4dFBhZ2VcIiA6ZGlzYWJsZWQ9XCJwYWdlSW5kZXggPT09IHRvdGFsUGFnZXMgfHwgbG9hZGluZ1Rvb2xzXCI+5LiL5LiA6aG1PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGdhcDogMThweDsgYWxpZ24taXRlbXM6IGNlbnRlcjtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0bi1ibHVlXCIgQGNsaWNrPVwiY29uZmlybVRvb2xcIj7noa7lrpo8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0bi1kaXNhYmxlZFwiIEBjbGljaz1cImNsb3NlVG9vbERpYWxvZ1wiPuWPlua2iDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgPC92aWV3PlxyXG5cclxuICAgICAgICA8IS0tIOmakOiXj+WIgOWFt+S9v+eUqOiusOW9leihqOagvCAtLT5cclxuICAgICAgICA8dmlldyB2LWlmPVwiZmFsc2VcIiBjbGFzcz1cInRhYmxlLXNlY3Rpb25cIj5cclxuICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwic3R5bGVkLXRhYmxlXCI+XHJcbiAgICAgICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDo3JVwiPuWIgOWFt+e8luWPtzwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOjEyJVwiPuWIgOWFt+WQjeensDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOjEwJVwiPuS4iuWIgOaXtumXtDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm51bVwiIHN0eWxlPVwid2lkdGg6NyVcIj7kuIrliIDorqHmlbA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDoxMCVcIj7kuIvliIDml7bpl7Q8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJudW1cIiBzdHlsZT1cIndpZHRoOjclXCI+5LiL5YiA6K6h5pWwPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibnVtXCIgc3R5bGU9XCJ3aWR0aDo3JVwiPuS9v+eUqOasoeaVsDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm51bVwiIHN0eWxlPVwid2lkdGg6NyVcIj7kvb/nlKjkuIrpmZA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJudW1cIiBzdHlsZT1cIndpZHRoOjclXCI+5a+/5ZG95q+UJTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm51bVwiIHN0eWxlPVwid2lkdGg6NyVcIj7lr7/lkb3mr5TpooTorablgLw8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDo3JVwiPumihOitpueKtuaAgTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOjclXCI+5YiA5YW35Zyo5py654q25oCBPC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICA8dHIgdi1mb3I9XCIoaXRlbSwgaWR4KSBpbiB0b29sUmVjb3Jkc1wiIDprZXk9XCJpdGVtLmlkXCIgOmNsYXNzPVwieydyb3ctb2RkJzogaWR4ICUgMiA9PT0gMH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7IGl0ZW0ubm8gfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJsZWZ0XCI+e3sgaXRlbS5uYW1lIH19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7IGl0ZW0udXBUaW1lIH19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwibnVtXCI+e3sgaXRlbS51cENvdW50ICE9IG51bGwgPyBpdGVtLnVwQ291bnQgOiAnJyB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyBpdGVtLmRvd25UaW1lIH19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSDlj6rmnInnrKzkuIDooYzmmL7npLogY3VycmVudENqTnVt77yM5YW25a6D6KGM5pi+56S6IGRvd25Db3VudCAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwibnVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1pZj1cImlkeCA9PT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0g56ys5LiA6KGM77ya5LiL5py65pe25LiN5a6e5pe25pi+56S6IGN1cnJlbnRDak51be+8jOaYvuekuiBkb3duQ291bnQgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtaWY9XCIhaXRlbS5kb3duVGltZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmN1cnJlbnRDak51bSAhPSBudWxsID8gaXRlbS5jdXJyZW50Q2pOdW0gOiAnJyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtZWxzZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5kb3duQ291bnQgIT0gbnVsbCA/IGl0ZW0uZG93bkNvdW50IDogJycgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LWVsc2U+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5kb3duQ291bnQgIT0gbnVsbCA/IGl0ZW0uZG93bkNvdW50IDogJycgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS3kvb/nlKjmrKHmlbAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwibnVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1pZj1cImlkeCA9PT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0g56ys5LiA6KGM5a6e5pe26K6h566X5L2/55So5qyh5pWw77yM6Iul5Li65LiL5py65YiZ5LiN5a6e5pe25pi+56S6IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LWlmPVwiIWl0ZW0uZG93blRpbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtLmN1cnJlbnRDak51bSAhPSBudWxsICYmIGl0ZW0udXBDb3VudCAhPSBudWxsID8gKE51bWJlcihpdGVtLmN1cnJlbnRDak51bSkgLSBOdW1iZXIoaXRlbS51cENvdW50KSkgOiAoaXRlbS51c2VDb3VudCAhPSBudWxsID8gaXRlbS51c2VDb3VudCA6ICcnKSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtZWxzZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS51c2VDb3VudCAhPSBudWxsID8gaXRlbS51c2VDb3VudCA6ICcnIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1lbHNlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0udXNlQ291bnQgIT0gbnVsbCA/IGl0ZW0udXNlQ291bnQgOiAnJyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwibnVtXCI+e3sgaXRlbS51c2VMaW1pdCAhPSBudWxsID8gaXRlbS51c2VMaW1pdCA6ICcnIH19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLeWvv+WRveavlCUtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwibnVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1pZj1cImlkeCA9PT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0g56ys5LiA6KGM5a6e5pe26K6h566X5a+/5ZG95q+UJe+8jOiLpeS4uuS4i+acuuWImeS4jeWunuaXtuaYvuekuiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1pZj1cIiFpdGVtLmRvd25UaW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbS5jdXJyZW50Q2pOdW0gIT0gbnVsbCAmJiBpdGVtLnVwQ291bnQgIT0gbnVsbCAmJiBpdGVtLnVzZUxpbWl0ICE9IG51bGwgJiYgTnVtYmVyKGl0ZW0udXNlTGltaXQpID4gMCA/IE1hdGgucm91bmQoKE51bWJlcihpdGVtLmN1cnJlbnRDak51bSkgLSBOdW1iZXIoaXRlbS51cENvdW50KSkgLyBOdW1iZXIoaXRlbS51c2VMaW1pdCkgKiAxMDApICsgJyUnIDogKGl0ZW0ubGlmZVBlcmNlbnQgIT0gbnVsbCA/IGl0ZW0ubGlmZVBlcmNlbnQgOiAnJykgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LWVsc2U+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0ubGlmZVBlcmNlbnQgIT0gbnVsbCA/IGl0ZW0ubGlmZVBlcmNlbnQgOiAnJyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtZWxzZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmxpZmVQZXJjZW50IH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJudW1cIj57eyBpdGVtLmxpZmVXYXJuIH19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIDpjbGFzcz1cIml0ZW0ud2FyblN0YXR1cyA9PT0gJ+mihOitpicgPyAnd2Fybi1jZWxsJyA6IChpdGVtLndhcm5TdGF0dXMgPT09ICfmraPluLgnID8gJ29rLWNlbGwnIDogJycpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiB2LWlmPVwiaXRlbS53YXJuU3RhdHVzID09PSAn6aKE6K2mJ1wiIGNsYXNzPVwid2Fybi1iYWRnZVwiPuitpuWRijwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHYtZWxzZT57eyBpdGVtLndhcm5TdGF0dXMgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uZG93blRpbWUgPyAn5LiL5py6JyA6ICflnKjmnLonIH19PCEtLeWcqOacuueKtuaAgS0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyIHYtaWY9XCIhdG9vbFJlY29yZHMubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiMTJcIj7mmoLml6DmlbDmja48L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgIDwvdmlldz5cclxuXHJcbiAgICAgICAgPCEtLSDor7TmmI4gLS0+XHJcbiAgICAgICAgPCEtLTx2aWV3IGNsYXNzPVwidG9vbC1kZXNjXCI+XHJcbiAgICAgICAgICAgIDxwIHN0eWxlPVwiY29sb3I6cmVkO1wiPifkvb/nlKjkuIrpmZAn5Lul5LiL5YiA5pe255qEJ+S9v+eUqOS4iumZkCfkuLrorqHnrpfmoIflh4Y8L3A+XHJcbiAgICAgICAgICAgIDxwIHN0eWxlPVwiY29sb3I6cmVkO1wiPuWvv+WRveavlOmihOitpuWAvOm7mOiupOS4ujkwJTwvcD5cclxuICAgICAgICA8L3ZpZXc+LS0+XHJcbiAgICA8L3ZpZXc+XHJcbjwvdGVtcGxhdGU+XHJcblxyXG48c2NyaXB0PlxyXG4gICAgZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgICAgIGRhdGEoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBtYWNoaW5lTm86ICcnLC8v5py65Y+w57yW56CBXHJcbiAgICAgICAgICAgICAgICB3b3JrT3JkZXJObzogJycsLy/lt6XljZXlj7dcclxuICAgICAgICAgICAgICAgIGFjdGl2ZVRvb2xObzogJycsIC8vIOW9k+WJjemAieS4reeahOWIgOWFt+e8luWPt1xyXG4gICAgICAgICAgICAgICAgcGFnZUluZGV4OiAxLFxyXG4gICAgICAgICAgICAgICAgcGFnZVNpemU6IDIwLCAvL+WNlemhteaYvuekuueahOWIgOWFt+aVsOmHj1xyXG4gICAgICAgICAgICAgICAgdG90YWw6IDAsXHJcbiAgICAgICAgICAgICAgICB0b29sTGlzdDogW10sXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvb2xObzogJycsXHJcbiAgICAgICAgICAgICAgICB0b29sTmFtZTogJycsXHJcbiAgICAgICAgICAgICAgICB0b29sTW9kZWw6ICcnLFxyXG4gICAgICAgICAgICAgICAgc2hvd1Rvb2xEaWFsb2c6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgc2VhcmNoS2V5OiAnJyxcclxuICAgICAgICAgICAgICAgIGZpbHRlcmVkVG9vbHM6IFtdLFxyXG4gICAgICAgICAgICAgICAgdXNlTGltaXRJbnB1dDogJycsXHJcbiAgICAgICAgICAgICAgICBsaWZlV2FybklucHV0OiAnJywgLy8g5paw5aKe77ya5a+/5ZG95q+U6aKE6K2m5YC85Y6f5aeL6L6T5YWlXHJcbiAgICAgICAgICAgICAgICB0b29sUmVjb3JkczogW10sXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nVG9vbHM6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgbG9hZGluZ0Zvcm06IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgc3VibWl0dGluZzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBfc2VhcmNoVGltZXI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICB3b3JrT3JkZXJDdXJyZW50Q2pOdW06IG51bGwsIC8vIOW3peWNleW9k+WJjeaVsOmHh1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIOiHquWKqOS/neWtmOebuOWFs1xyXG4gICAgICAgICAgICAgICAgYXV0b1NhdmVUaW1lcjogbnVsbCxcclxuICAgICAgICAgICAgICAgIGlzRGlydHk6IGZhbHNlLCAvLyDooajljZXmmK/lkKbmnInmnKrkv53lrZjlj5jmm7RcclxuICAgICAgICAgICAgICAgIGF1dG9TYXZlSW50ZXJ2YWxNczogNSAqIDYwICogMTAwMCwgLy8g6buY6K6kIDUg5YiG6ZKfXHJcbiAgICAgICAgICAgICAgICBhdXRvU2F2ZUVuYWJsZWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBhdXRvU2F2ZUFjdGlvbk5hbWU6ICdoYW5kbGVVcFRvb2wnLCAvLyDoh6rliqjop6blj5HnmoTmlrnms5XlkI3vvIzlj6/mlLnkuLroh6rlrprkuYnkv53lrZjmlrnms5VcclxuXHJcbiAgICAgICAgICAgICAgICAvLyDmlrDlop7vvJrosIPmnLrnm7jlhbPlrZfmrrVcclxuICAgICAgICAgICAgICAgIGlzVGlhb2ppVXNlclNlbGVjdFNob3c6IGZhbHNlLCAvLyDosIPmnLrluIjlgoXpgInmi6nlvLnnqpdcclxuICAgICAgICAgICAgICAgIHRpYW9qaVN0YWZmTm86ICcnLCAvLyDlvZPliY3pgInkuK3nmoTosIPmnLrluIjlgoUo5qC85byPOiDlt6Xlj7c65aeT5ZCNKVxyXG4gICAgICAgICAgICAgICAgdGlhb2ppT2tRdHk6ICcnLCAvLyDosIPmnLroia/lk4HmlbBcclxuICAgICAgICAgICAgICAgIHRpYW9qaUJhZFF0eTogJycsIC8vIOiwg+acuuS4jeiJr+WTgeaVsFxyXG4gICAgICAgICAgICAgICAgdGlhb2ppVXNlcnM6IFtdLCAvLyDosIPmnLrluIjlgoXliJfooahcclxuICAgICAgICAgICAgICAgIHRpYW9qaVVzZXJTZWFyY2g6ICcnLCAvLyDmkJzntKLlhbPplK7or41cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vIOaWsOWinu+8muaKpeivleS6p+aVsOaJgOmcgOWtl+autVxyXG4gICAgICAgICAgICAgICAgb3JkZXJJZDogbnVsbCwgLy8g5bel5Y2VSURcclxuICAgICAgICAgICAgICAgIG9yZGVyOiB7fSAvLyDlt6XljZXmlbDmja5cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbXB1dGVkOiB7XHJcbiAgICAgICAgICAgIHRvdGFsUGFnZXMoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgoMSwgTWF0aC5jZWlsKHRoaXMudG90YWwgLyB0aGlzLnBhZ2VTaXplKSB8fCAxKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgLy8g5paw5aKe77ya6LCD5py65biI5YKF5pi+56S65ZCN56ewXHJcbiAgICAgICAgICAgIHRpYW9qaVN0YWZmRGlzcGxheSgpIHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy50aWFvamlTdGFmZk5vKSByZXR1cm4gJyc7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzZWdzID0gdGhpcy50aWFvamlTdGFmZk5vLnNwbGl0KCc6Jyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc2Vncy5sZW5ndGggPiAxID8gYCR7c2Vnc1swXX0gJHtzZWdzWzFdfWAgOiB0aGlzLnRpYW9qaVN0YWZmTm87XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIC8vIOaWsOWinu+8mui/h+a7pOWQjueahOiwg+acuuW4iOWCheWIl+ihqFxyXG4gICAgICAgICAgICBmaWx0ZXJlZFRpYW9qaVVzZXJzKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnRpYW9qaVVzZXJTZWFyY2gpIHJldHVybiB0aGlzLnRpYW9qaVVzZXJzO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qga3cgPSB0aGlzLnRpYW9qaVVzZXJTZWFyY2gudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50aWFvamlVc2Vycy5maWx0ZXIodSA9PiB1LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoa3cpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgd2F0Y2g6IHtcclxuICAgICAgICAgICAgLy8g5qCH6K6w6ISP5pWw5o2u77ya5oyJ6ZyA55uR5ZCs5a2X5q615Y+Y5YyWXHJcbiAgICAgICAgICAgIHNlbGVjdGVkVG9vbE5vKCkgeyB0aGlzLmlzRGlydHkgPSB0cnVlOyB9LFxyXG4gICAgICAgICAgICB1c2VMaW1pdElucHV0KCkgeyB0aGlzLmlzRGlydHkgPSB0cnVlOyB9LFxyXG4gICAgICAgICAgICBsaWZlV2FybklucHV0KCkgeyB0aGlzLmlzRGlydHkgPSB0cnVlOyB9LFxyXG4gICAgICAgICAgICB0b29sTmFtZSgpIHsgdGhpcy5pc0RpcnR5ID0gdHJ1ZTsgfSxcclxuICAgICAgICAgICAgdG9vbE1vZGVsKCkgeyB0aGlzLmlzRGlydHkgPSB0cnVlOyB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBtZXRob2RzOiB7XHJcbiAgICAgICAgICAgIC8v5p+l6K+i5b2T5YmN5pWw6YeH5pWw77yM5L2c5Li65LiL5YiA6K6h5pWw5a6e5pe25pi+56S6XHJcbiAgICAgICAgICAgIGFzeW5jIGZldGNoQ3VycmVudENqTnVtKHRvb2xObykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm1hY2hpbmVObykgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuJHBvc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICcvV29tZGFhL0dldFdvbWRhYXNCeVNob3cnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeSh7IG1hY2hpbmVObzogdGhpcy5tYWNoaW5lTm8gfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5zdGF0dXMgPT09IDAgJiYgQXJyYXkuaXNBcnJheShyZXMuZGF0YT8udGJCaWxsTGlzdCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZm91bmQgPSByZXMuZGF0YS50YkJpbGxMaXN0LmZpbmQoeCA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeC5jdXR0ZXJJZCA9PT0gdG9vbE5vIHx8IHguY3V0dGVSX0lEID09PSB0b29sTm9cclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kID8gKGZvdW5kLkN1cnJlbnRDak51bSA/PyBmb3VuZC5jdXJyZW50Q2pOdW0gPz8gbnVsbCkgOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ+iOt+WPlmN1cnJlbnRDak51beWksei0pScsIGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAvLyDmlrDlop7vvJrliLfmlrDmjInpkq7lpITnkIbmlrnms5VcclxuICAgICAgICAgICAgYXN5bmMgaGFuZGxlUmVmcmVzaCgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2hUb29scygnJyk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tYWNoaW5lTm8gJiYgdGhpcy53b3JrT3JkZXJObykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZmV0Y2hGb3JtRGF0YSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZmV0Y2hEZWZhdWx0VG9vbEZyb21Xb3JrT3JkZXIoKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyDliLfmlrDlkI7otYvlgLznrKzkuIDooYwgY3VycmVudENqTnVtXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudG9vbFJlY29yZHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRzZXQodGhpcy50b29sUmVjb3Jkc1swXSwgJ2N1cnJlbnRDak51bScsIHRoaXMud29ya09yZGVyQ3VycmVudENqTnVtKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRzaG93TWVzc2FnZSgn5Yi35paw5a6M5oiQJyk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIC8vIOiHquWKqOS/neWtmO+8muWQr+WKqFxyXG4gICAgICAgICAgICBzdGFydEF1dG9TYXZlKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmF1dG9TYXZlRW5hYmxlZCkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdG9wQXV0b1NhdmUoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXV0b1NhdmVUaW1lciA9IHNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dG9TYXZlVGljaygpO1xyXG4gICAgICAgICAgICAgICAgfSwgdGhpcy5hdXRvU2F2ZUludGVydmFsTXMpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAvLyDoh6rliqjkv53lrZjvvJrlgZzmraJcclxuICAgICAgICAgICAgc3RvcEF1dG9TYXZlKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYXV0b1NhdmVUaW1lcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5hdXRvU2F2ZVRpbWVyKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dG9TYXZlVGltZXIgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAvLyDoh6rliqjkv53lrZjvvJrmr4/mrKHlrprml7bmiafooYzml7bnmoTpgLvovpFcclxuICAgICAgICAgICAgYXN5bmMgYXV0b1NhdmVUaWNrKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmF1dG9TYXZlRW5hYmxlZCkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzRGlydHkpIHJldHVybjtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnN1Ym1pdHRpbmcgfHwgdGhpcy5sb2FkaW5nRm9ybSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGZuID0gdGhpcy5hdXRvU2F2ZUFjdGlvbk5hbWUgJiYgdHlwZW9mIHRoaXNbdGhpcy5hdXRvU2F2ZUFjdGlvbk5hbWVdID09PSAnZnVuY3Rpb24nXHJcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzW3RoaXMuYXV0b1NhdmVBY3Rpb25OYW1lXVxyXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICAgICAgICAgIGlmICghZm4pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ+iHquWKqOS/neWtmO+8muacquaJvuWIsOaWueazlScsIHRoaXMuYXV0b1NhdmVBY3Rpb25OYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Ym1pdHRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGZuLmNhbGwodGhpcyk7IC8vIOiwg+eUqOS/neWtmOaWueazle+8iOS+i+WmgiBoYW5kbGVVcFRvb2zvvIlcclxuICAgICAgICAgICAgICAgICAgICAvLyDlpoLmnpzkv53lrZjmiJDlip/vvIzmuIXohI/moIforrDvvIjkv53lrZjmlrnms5XlhoXpg6joi6XlpLHotKXmsqHmnInmipvlh7rlj6/kv53mjIHmraTmlrnlvI/vvIlcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzRGlydHkgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCfoh6rliqjkv53lrZjlpLHotKXvvJonLCBlKTtcclxuICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJtaXR0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAvLyDmlrDlop7vvJrlr7/lkb3mr5TpooTorablgLzlvZLkuIDljJYgKOi/lOWbniAwfjEg5oiWIG51bGwpXHJcbiAgICAgICAgICAgIG5vcm1hbGl6ZUxpZmVXYXJuKHYpIHtcclxuICAgICAgICAgICAgICAgIGlmICh2ID09IG51bGwpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmF3ID0gU3RyaW5nKHYpLnRyaW0oKS5yZXBsYWNlKC9bJe+8hV0vZywgJycpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJhdyA9PT0gJycpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbnVtID0gTnVtYmVyKHJhdyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWlzRmluaXRlKG51bSkgfHwgbnVtIDw9IDApIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bSA+IDEgPyAobnVtIC8gMTAwKSA6IG51bTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgb3BlblRvb2xEaWFsb2coKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dUb29sRGlhbG9nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMucGFnZUluZGV4ID0gMTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2hUb29scyh0aGlzLnNlYXJjaEtleSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNsb3NlVG9vbERpYWxvZygpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd1Rvb2xEaWFsb2cgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgYXN5bmMgZmV0Y2hUb29scyhzZWFyY2hLZXkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZ1Rvb2xzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy4kcG9zdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJy9NZXNDdXR0ZXJMZWRnZXIvUXVlcnlUb29scycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaEtleSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VJbmRleDogdGhpcy5wYWdlSW5kZXgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5zdGF0dXMgPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IEFycmF5LmlzQXJyYXkocmVzLmRhdGEpID8gcmVzLmRhdGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKHJlcy5kYXRhICYmIHJlcy5kYXRhLnRiQmlsbExpc3QpID8gcmVzLmRhdGEudGJCaWxsTGlzdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKHJlcy5kYXRhICYmIHJlcy5kYXRhLmRhdGEpID8gcmVzLmRhdGEuZGF0YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFtdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2V0RmllbGQgPSAob2JqLCAuLi5rZXlzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGsgb2Yga2V5cykgaWYgKG9iaj8uW2tdICE9PSB1bmRlZmluZWQgJiYgb2JqPy5ba10gIT09IG51bGwpIHJldHVybiBvYmpba107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOi/memHjOmcgOimgeaKiiBsaWZlV2FybiDlrZfmrrXkuZ/luKblh7rmnaVcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwcGVkID0gKHBheWxvYWQgfHwgW10pLm1hcCh0ID0+ICh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBubzogZ2V0RmllbGQodCwgJ2N1dHRlcklkJywgJ0NVVFRFUl9JRCcsICdjdXR0ZVJfSUQnLCAnZGFBMDAxJywgJ25vJyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBnZXRGaWVsZCh0LCAnY3V0dGVyTmFtZScsICdDVVRURVJfTkFNRScsICdjdXR0ZVJfTkFNRScsICduYW1lJyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbDogZ2V0RmllbGQodCwgJ2N1dHRlck1vZGVsJywgJ0NVVFRFUl9NT0RFTCcsICdjdXR0ZVJfTU9ERUwnLCAnbW9kZWwnKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpZmVXYXJuOiBnZXRGaWVsZCh0LCAnbW9kbExpZmVXb3JuaW5nJywgJ2xpZmVXYXJuJywgJ0xJRkVfV0FSTicsICdsaWZFX1dBUk4nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlcmVkVG9vbHMgPSBtYXBwZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9vbExpc3QgPSBtYXBwZWQuc2xpY2UoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRvdGFsRnJvbVJlcyA9IE51bWJlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5kYXRhPy50b3RhbCA/PyByZXMuZGF0YT8udG90YWxDb3VudCA/PyByZXMudG90YWwgPz8gcmVzLnRvdGFsQ291bnQgPz8gbWFwcGVkLmxlbmd0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvdGFsID0gTnVtYmVyLmlzRmluaXRlKHRvdGFsRnJvbVJlcykgPyB0b3RhbEZyb21SZXMgOiBtYXBwZWQubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wYWdlSW5kZXggPiB0aGlzLnRvdGFsUGFnZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFnZUluZGV4ID0gdGhpcy50b3RhbFBhZ2VzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kc2hvd01lc3NhZ2UocmVzLm1lc3NhZ2UgfHwgJ+afpeivouWksei0pScpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2ZldGNoVG9vbHMg6ZSZ6K+v77yaJywgZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiRzaG93TWVzc2FnZSgn5p+l6K+i5YiA5YW35aSx6LSl77yM6K+35qOA5p+l572R57uc5oiW5o6l5Y+jJyk7XHJcbiAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZ1Rvb2xzID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGFzeW5jIHByZXZQYWdlKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGFnZUluZGV4ID4gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFnZUluZGV4LS07XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5mZXRjaFRvb2xzKHRoaXMuc2VhcmNoS2V5KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgYXN5bmMgbmV4dFBhZ2UoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wYWdlSW5kZXggPCB0aGlzLnRvdGFsUGFnZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhZ2VJbmRleCsrO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZmV0Y2hUb29scyh0aGlzLnNlYXJjaEtleSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG9uU2VhcmNoS2V5SW5wdXQoKSB7XHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fc2VhcmNoVGltZXIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2VhcmNoVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFRvb2woKTtcclxuICAgICAgICAgICAgICAgIH0sIDMwMCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGFzeW5jIHNlYXJjaFRvb2woKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhZ2VJbmRleCA9IDE7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmZldGNoVG9vbHModGhpcy5zZWFyY2hLZXkpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZWxlY3RUb29sKHRvb2wpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUb29sTm8gPSB0b29sLm5vO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b29sTmFtZSA9IHRvb2wubmFtZTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG9vbE1vZGVsID0gdG9vbC5tb2RlbDtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlVG9vbE5vID0gdG9vbC5ubztcclxuICAgICAgICAgICAgICAgIC8vIOaWsOWinu+8muW4puWHuuWvv+WRveavlOmihOitpuWAvFxyXG4gICAgICAgICAgICAgICAgaWYgKHRvb2wubGlmZVdhcm4gIT09IHVuZGVmaW5lZCAmJiB0b29sLmxpZmVXYXJuICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5qC85byP5YyW5Li655m+5YiG5q+U5a2X56ym5LiyXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2FybiA9IE51bWJlcih0b29sLmxpZmVXYXJuKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxpZmVXYXJuSW5wdXQgPSB3YXJuIDw9IDEgPyAod2FybiAqIDEwMCkudG9GaXhlZCgwKSA6IHdhcm4udG9GaXhlZCgwKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5saWZlV2FybklucHV0ID0gJyc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNvbmZpcm1Ub29sKCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93VG9vbERpYWxvZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBhc3luYyBzZXRVc2VMaW1pdCgpIHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZFRvb2xObykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJHNob3dNZXNzYWdlKCfor7fpgInmi6nliIDlhbflkI7lho3orr7nva7kuIrpmZAnKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2ID0gTnVtYmVyKHRoaXMudXNlTGltaXRJbnB1dCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNOYU4odikgfHwgdiA8PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kc2hvd01lc3NhZ2UoJ+ivt+i+k+WFpeacieaViOeahOS9v+eUqOS4iumZkCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMudG9vbFJlY29yZHMgPSB0aGlzLnRvb2xSZWNvcmRzLm1hcChyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoci5ubyA9PT0gdGhpcy5zZWxlY3RlZFRvb2xObykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5yLCB1c2VMaW1pdDogdiB9O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcjtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b29sTGlzdCA9IHRoaXMudG9vbExpc3QubWFwKHQgPT4gdC5ubyA9PT0gdGhpcy5zZWxlY3RlZFRvb2xObyA/IHsgLi4udCwgdXNlTGltaXQ6IHYgfSA6IHQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kc2hvd01lc3NhZ2UoJ+S9v+eUqOS4iumZkOW3suiuvue9ru+8iOS7heWJjeerr+aYvuekuu+8iScpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAvLyDkuIrliIDml7bkvKDpgJIgc2RqcyA9IOW3peWNlSBjdXJyZW50Q2pOdW1cclxuICAgICAgICAgICAgYXN5bmMgaGFuZGxlVXBUb29sKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLndvcmtPcmRlck5vKSB7IHRoaXMuJHNob3dNZXNzYWdlKCflt6XljZXlj7fkuI3og73kuLrnqbonKTsgcmV0dXJuOyB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMubWFjaGluZU5vKSB7IHRoaXMuJHNob3dNZXNzYWdlKCfmnLrlj7Dlj7fkuI3og73kuLrnqbonKTsgcmV0dXJuOyB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRUb29sTm8pIHsgdGhpcy4kc2hvd01lc3NhZ2UoJ+WIgOWFt+e8luWPt+S4jeiDveS4uuepuicpOyByZXR1cm47IH1cclxuICAgICAgICAgICAgICAgIC8v5LiK5YiA5by65Yi25b2V5YWl5L2/55So5LiK6ZmQXHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMudXNlTGltaXRJbnB1dCkgeyB0aGlzLiRzaG93TWVzc2FnZSgn5L2/55So5LiK6ZmQ5LiN6IO95Li656m6Jyk7IHJldHVybjsgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgdXNlTGltaXQgPSBOdW1iZXIodGhpcy51c2VMaW1pdElucHV0KTtcclxuICAgICAgICAgICAgICAgIGlmIChpc05hTih1c2VMaW1pdCkgfHwgdXNlTGltaXQgPD0gMCkgeyB0aGlzLiRzaG93TWVzc2FnZSgn6K+36L6T5YWl5pyJ5pWI55qE5L2/55So5LiK6ZmQJyk7IHJldHVybjsgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIHNkanMg5L2/55So5bel5Y2VIGN1cnJlbnRDak51bVxyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2RqcyA9IHRoaXMud29ya09yZGVyQ3VycmVudENqTnVtICE9IG51bGwgPyBOdW1iZXIodGhpcy53b3JrT3JkZXJDdXJyZW50Q2pOdW0pIDogbnVsbDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxpZmVXYXJuUmF0aW8gPSB0aGlzLm5vcm1hbGl6ZUxpZmVXYXJuKHRoaXMubGlmZVdhcm5JbnB1dCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHdvcmtPcmRlck5vOiB0aGlzLndvcmtPcmRlck5vLFxyXG4gICAgICAgICAgICAgICAgICAgIG1hY2hpbmVObzogdGhpcy5tYWNoaW5lTm8sXHJcbiAgICAgICAgICAgICAgICAgICAgdG9vbE5vOiB0aGlzLnNlbGVjdGVkVG9vbE5vLFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICfkuIrmnLonLFxyXG4gICAgICAgICAgICAgICAgICAgIHVzZUxpbWl0LFxyXG4gICAgICAgICAgICAgICAgICAgIHNkanMsLy8g5LiK5YiA6K6h5pWw77yI5bel5Y2V5b2T5YmN5pWw6YeH77yJXHJcbiAgICAgICAgICAgICAgICAgICAgbW9kbExpZmVXb3JuaW5nOiBsaWZlV2FyblJhdGlvIC8vIOaWsOWinlxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJtaXR0aW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLiRwb3N0KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnL01lc0N1dHRlckxlZGdlci9TdWJtaXRUb29sQWN0aW9uJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkocGF5bG9hZCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5kYXRhICYmIHJlcy5kYXRhLm91dFN1bSA9PT0gXCIwXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdW5pLnNob3dUb2FzdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogcmVzLmRhdGEub3V0TXNnIHx8ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2Vycm9yJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzLmRhdGEgJiYgcmVzLmRhdGEub3V0TXNnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuaS5zaG93VG9hc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHJlcy5kYXRhLm91dE1zZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb246ICdub25lJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5ZCO57ut6YC76L6R57un57ut5omn6KGMXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5zdGF0dXMgPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5mZXRjaEZvcm1EYXRhKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJHNob3dNZXNzYWdlKCfkuIrliIDmj5DkuqTlpLHotKXvvIzor7fmo4Dmn6XnvZHnu5wnKTtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7IC8vIOaKm+WHuuS7peS+v+iHquWKqOS/neWtmOmAu+i+keaNleiOt+W5tuS/neeVmSBpc0RpcnR5XHJcbiAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3VibWl0dGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAvLyDkuIvliIDml7bkvKDpgJIgeGRqcyA9IOW3peWNlSBjdXJyZW50Q2pOdW1cclxuICAgICAgICAgICAgYXN5bmMgaGFuZGxlRG93blRvb2woKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMud29ya09yZGVyTm8pIHsgdGhpcy4kc2hvd01lc3NhZ2UoJ+W3peWNleWPt+S4jeiDveS4uuepuicpOyByZXR1cm47IH1cclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5tYWNoaW5lTm8pIHsgdGhpcy4kc2hvd01lc3NhZ2UoJ+acuuWPsOWPt+S4jeiDveS4uuepuicpOyByZXR1cm47IH1cclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZFRvb2xObykgeyB0aGlzLiRzaG93TWVzc2FnZSgn5YiA5YW357yW5Y+35LiN6IO95Li656m6Jyk7IHJldHVybjsgfVxyXG4gICAgICAgICAgICAgICAgLy/kuIvliIDkuI3lvLrliLblvZXlhaXkvb/nlKjkuIrpmZBcclxuICAgICAgICAgICAgICAgIC8vaWYgKCF0aGlzLnVzZUxpbWl0SW5wdXQpIHsgdGhpcy4kc2hvd01lc3NhZ2UoJ+S9v+eUqOS4iumZkOS4jeiDveS4uuepuicpOyByZXR1cm47IH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IHVzZUxpbWl0ID0gTnVtYmVyKHRoaXMudXNlTGltaXRJbnB1dCk7XHJcbiAgICAgICAgICAgICAgICAvL2lmIChpc05hTih1c2VMaW1pdCkgfHwgdXNlTGltaXQgPD0gMCkgeyB0aGlzLiRzaG93TWVzc2FnZSgn6K+36L6T5YWl5pyJ5pWI55qE5L2/55So5LiK6ZmQJyk7IHJldHVybjsgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIOS4i+WIgOiuoeaVsOWQjOagt+WPluW3peWNleacgOaWsOmHh+mbhuaVsFxyXG4gICAgICAgICAgICAgICAgY29uc3QgeGRqcyA9IHRoaXMud29ya09yZGVyQ3VycmVudENqTnVtICE9IG51bGwgPyBOdW1iZXIodGhpcy53b3JrT3JkZXJDdXJyZW50Q2pOdW0pIDogbnVsbDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxpZmVXYXJuUmF0aW8gPSB0aGlzLm5vcm1hbGl6ZUxpZmVXYXJuKHRoaXMubGlmZVdhcm5JbnB1dCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHdvcmtPcmRlck5vOiB0aGlzLndvcmtPcmRlck5vLFxyXG4gICAgICAgICAgICAgICAgICAgIG1hY2hpbmVObzogdGhpcy5tYWNoaW5lTm8sXHJcbiAgICAgICAgICAgICAgICAgICAgdG9vbE5vOiB0aGlzLnNlbGVjdGVkVG9vbE5vLFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICfkuIvmnLonLFxyXG4gICAgICAgICAgICAgICAgICAgIHVzZUxpbWl0LFxyXG4gICAgICAgICAgICAgICAgICAgIHhkanMsLy8g5LiL5YiA6K6h5pWwXHJcbiAgICAgICAgICAgICAgICAgICAgbW9kbExpZmVXb3JuaW5nOiBsaWZlV2FyblJhdGlvIC8vIOaWsOWinlxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJtaXR0aW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLiRwb3N0KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnL01lc0N1dHRlckxlZGdlci9TdWJtaXRUb29sQWN0aW9uJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkocGF5bG9hZCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5kYXRhICYmIHJlcy5kYXRhLm91dFN1bSA9PT0gXCIwXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdW5pLnNob3dUb2FzdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogcmVzLmRhdGEub3V0TXNnIHx8ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2Vycm9yJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzLmRhdGEgJiYgcmVzLmRhdGEub3V0TXNnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuaS5zaG93VG9hc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHJlcy5kYXRhLm91dE1zZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb246ICdub25lJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5ZCO57ut6YC76L6R57un57ut5omn6KGMXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5zdGF0dXMgPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5mZXRjaEZvcm1EYXRhKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJHNob3dNZXNzYWdlKCfkuIvliIDmj5DkuqTlpLHotKXvvIzor7fmo4Dmn6XnvZHnu5wnKTtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3VibWl0dGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjYW5jZWwoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVG9vbE5vID0gJyc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvb2xOYW1lID0gJyc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvb2xNb2RlbCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51c2VMaW1pdElucHV0ID0gJyc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpZmVXYXJuSW5wdXQgPSAnJzsgLy8g5paw5aKe77ya5riF56m6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRGlydHkgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgYXN5bmMgZmV0Y2hGb3JtRGF0YSgpIHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy53b3JrT3JkZXJObyB8fCAhdGhpcy5tYWNoaW5lTm8pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ+W3peWNleWPt+aIluacuuWPsOWPt+S4uuepuu+8jOi3s+i/h+iOt+WPluihqOWNleaVsOaNricpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZ0Zvcm0gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgICAgICAgICAgICAgICB3b3JrT3JkZXJObzogdGhpcy53b3JrT3JkZXJOby50cmltKCksXHJcbiAgICAgICAgICAgICAgICAgICAgbWFjaGluZU5vOiB0aGlzLm1hY2hpbmVOby50cmltKClcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuJHBvc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICcvTWVzQ3V0dGVyTGVkZ2VyL0dldEZvcm1EYXRhJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkocGF5bG9hZCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5zdGF0dXMgIT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kc2hvd01lc3NhZ2UocmVzLm1lc3NhZ2UgfHwgJ+iOt+WPluihqOWNleaVsOaNruWksei0pScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvb2xSZWNvcmRzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlzdCA9IEFycmF5LmlzQXJyYXkocmVzLmRhdGEpID8gcmVzLmRhdGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiAocmVzLmRhdGEgJiYgcmVzLmRhdGEudGJCaWxsTGlzdCkgPyByZXMuZGF0YS50YkJpbGxMaXN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChyZXMuZGF0YSAmJiByZXMuZGF0YS5kYXRhKSA/IHJlcy5kYXRhLmRhdGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFtdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBnZXRGaWVsZCA9IChvYmosIC4uLmtleXMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBrIG9mIGtleXMpIGlmIChvYmo/LltrXSAhPT0gdW5kZWZpbmVkICYmIG9iaj8uW2tdICE9PSBudWxsKSByZXR1cm4gb2JqW2tdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXBwZWQgPSAobGlzdCB8fCBbXSkubWFwKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cFRpbWVSYXcgPSBnZXRGaWVsZCh0LCAndVBfVElNRScsICdVUF9USU1FJywgJ3VQVGltZScsICdVUFRJTUUnLCAnVXBUaW1lJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvd25UaW1lUmF3ID0gZ2V0RmllbGQodCwgJ2Rvd05fVElNRScsICdET1dOX1RJTUUnLCAnZG93blRpbWUnLCAnRE9XTlRJTUUnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlmZVdhcm5SYXcgPSBnZXRGaWVsZCh0LCAnbGlmRV9XQVJOJywgJ0xJRkVfV0FSTicsICdsaWZlV2FybicsICdMSUZFV0FSTicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50Q2pOdW0gPSBnZXRGaWVsZCh0LCAnY3VycmVudENqTnVtJywgJ0NVUlJFTlRDSk5VTScsICdDdXJyZW50Q2pOdW0nKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVzZUNvdW50ID0gZ2V0RmllbGQodCwgJ3VzRV9DT1VOVCcsICdVU0VfQ09VTlQnLCAndXNlQ291bnQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXNlTGltaXQgPSBnZXRGaWVsZCh0LCAndXNFX0xJTUlUJywgJ1VTRV9MSU1JVCcsICd1c2VMaW1pdCcpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBlcmNlbnQgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzZUNvdW50ICE9IG51bGwgJiYgdXNlTGltaXQgIT0gbnVsbCAmJiAhaXNOYU4odXNlQ291bnQpICYmICFpc05hTih1c2VMaW1pdCkgJiYgTnVtYmVyKHVzZUxpbWl0KSA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmNlbnQgPSAoKE51bWJlcih1c2VDb3VudCkgLyBOdW1iZXIodXNlTGltaXQpKSAqIDEwMCkudG9GaXhlZCgwKSArICclJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyc2VOdW1iZXIgPSB2ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ID09PSBudWxsIHx8IHYgPT09IHVuZGVmaW5lZCB8fCB2ID09PSAnJykgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzID0gU3RyaW5nKHYpLnJlcGxhY2UoL1ss77yFJV0vZywgJycpLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG4gPSBwYXJzZUZsb2F0KHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShuKSA/IG4gOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXRQZXJjZW50ID0gbiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA9PT0gbnVsbCB8fCBuID09PSB1bmRlZmluZWQgfHwgaXNOYU4obikpIHJldHVybiAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuIDw9IDEpIHJldHVybiBgJHsobiAqIDEwMCkudG9GaXhlZCgwKX0lYDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtOdW1iZXIobikudG9GaXhlZCgwKX0lYDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlmZVdhcm5OdW0gPSBwYXJzZU51bWJlcihsaWZlV2FyblJhdyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgd2FyblN0YXR1cyA9IGdldEZpZWxkKHQsICdzdGF0dXMnLCAnU1RBVFVTJykgfHwgJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaWZlV2Fybk51bSAhPT0gbnVsbCAmJiB1c2VDb3VudCAhPSBudWxsICYmIHVzZUxpbWl0ICE9IG51bGwgJiYgIWlzTmFOKHVzZUNvdW50KSAmJiAhaXNOYU4odXNlTGltaXQpICYmIE51bWJlcih1c2VMaW1pdCkgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwZXJjZW50TnVtID0gTnVtYmVyKHVzZUNvdW50KSAvIE51bWJlcih1c2VMaW1pdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuU3RhdHVzID0gKHBlcmNlbnROdW0gPj0gbGlmZVdhcm5OdW0pID8gJ+mihOitpicgOiAn5q2j5bi4JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5TdGF0dXMgPSB3YXJuU3RhdHVzIHx8ICfmnKrnn6UnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGdldEZpZWxkKHQsICdpZCcsICdJRCcpIHx8IGAke2dldEZpZWxkKHQsICdjdXR0ZVJfSUQnKSB8fCBnZXRGaWVsZCh0LCAnQ1VUVEVSX0lEJykgfHwgJyd9LSR7dXBUaW1lUmF3IHx8ICcnfWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBubzogZ2V0RmllbGQodCwgJ2N1dHRlUl9JRCcsICdDVVRURVJfSUQnLCAnY3V0dGVySWQnLCAnbm8nKSB8fCAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGdldEZpZWxkKHQsICdjdXR0ZVJfTkFNRScsICdDVVRURVJfTkFNRScsICdjdXR0ZXJOYW1lJywgJ25hbWUnKSB8fCAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwVGltZTogdGhpcy5mb3JtYXREYXRlVGltZSh1cFRpbWVSYXcpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBDb3VudDogZ2V0RmllbGQodCwgJ3VQX0NPVU5UJywgJ1VQX0NPVU5UJywgJ3VwQ291bnQnKSA/PyAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvd25UaW1lOiB0aGlzLmZvcm1hdERhdGVUaW1lKGRvd25UaW1lUmF3KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvd25Db3VudDogZ2V0RmllbGQodCwgJ2Rvd05fQ09VTlQnLCAnRE9XTl9DT1VOVCcsICdkb3duQ291bnQnKSA/PyAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZUNvdW50OiB1c2VDb3VudCA/PyAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZUxpbWl0OiB1c2VMaW1pdCA/PyAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpZmVQZXJjZW50OiBwZXJjZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlmZVdhcm46IGZvcm1hdFBlcmNlbnQobGlmZVdhcm5OdW0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FyblN0YXR1cyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDak51bVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyDmlrDlop7vvJrmjInkuIrliIDml7bpl7TpmY3luo/mjpLluo/vvIjotormmZrnmoTotorkuIrpnaLvvIlcclxuICAgICAgICAgICAgICAgICAgICBtYXBwZWQuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDml7bpl7TmoLzlvI/lpoIgXCIxMC0yNCAxNjowM1wi77yM6L2s5Li6IERhdGUg5a+56LGh5q+U6L6DXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlID0gcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXMpIHJldHVybiAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g6KGl5bm05Lu977yM5YGH6K6+6YO95piv5LuK5bm0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB5ZWFyID0gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGAke3llYXJ9LSR7cy5yZXBsYWNlKC8tL2csICctJyl9OjAwYCkuZ2V0VGltZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2UoYi51cFRpbWUpIC0gcGFyc2UoYS51cFRpbWUpOyAvLyDms6jmhI/ov5nph4zpobrluo/lj43ov4fmnaVcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b29sUmVjb3JkcyA9IG1hcHBlZDtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0b3RhbEZyb21SZXMgPSBOdW1iZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5kYXRhPy50b3RhbCA/PyByZXMuZGF0YT8udG90YWxDb3VudCA/PyByZXMudG90YWwgPz8gcmVzLnRvdGFsQ291bnQgPz8gbWFwcGVkLmxlbmd0aFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b3RhbCA9IE51bWJlci5pc0Zpbml0ZSh0b3RhbEZyb21SZXMpID8gdG90YWxGcm9tUmVzIDogbWFwcGVkLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcign6I635Y+W6KGo5Y2V5pWw5o2u6ZSZ6K+vOicsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiRzaG93TWVzc2FnZSgn6I635Y+W5pWw5o2u5aSx6LSl77yM6K+35qOA5p+l572R57uc6L+e5o6lJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b29sUmVjb3JkcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmdGb3JtID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIC8vIOiHquWKqOW4puWHuuW3peWNleWIgOWFt+S/oeaBr++8jOW5tuiOt+WPluW3peWNleacgOaWsOmHh+mbhuaVsFxyXG4gICAgICAgICAgICBhc3luYyBmZXRjaERlZmF1bHRUb29sRnJvbVdvcmtPcmRlcigpIHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5tYWNoaW5lTm8pIHJldHVybjtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy4kcG9zdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJy9Xb21kYWEvR2V0V29tZGFhc0J5U2hvdycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KHsgbWFjaGluZU5vOiB0aGlzLm1hY2hpbmVObyB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzLnN0YXR1cyA9PT0gMCAmJiBBcnJheS5pc0FycmF5KHJlcy5kYXRhPy50YkJpbGxMaXN0KSAmJiByZXMuZGF0YS50YkJpbGxMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3JkZXIgPSByZXMuZGF0YS50YkJpbGxMaXN0WzBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g5paw5aKe77ya5L+d5a2Y5bel5Y2V5pWw5o2u77yM55So5LqO5oql6K+V5Lqn5pWwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3JkZXIgPSBvcmRlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcmRlcklkID0gb3JkZXIuaWQgfHwgb3JkZXIuSUQgfHwgb3JkZXIub3JkZXJJZCB8fCBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRvb2xObyA9IG9yZGVyLmN1dHRlcklkIHx8IG9yZGVyLmN1dHRlUl9JRCB8fCAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b29sTmFtZSA9IG9yZGVyLmN1dHRlck5hbWUgfHwgb3JkZXIuY3V0dGVSX05BTUUgfHwgJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9vbE1vZGVsID0gb3JkZXIuY3V0dGVyTW9kZWwgfHwgb3JkZXIuY3V0dGVSX01PREVMIHx8ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDlhbPplK7vvJrojrflj5blt6XljZXmnIDmlrDph4fpm4bmlbBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53b3JrT3JkZXJDdXJyZW50Q2pOdW0gPSBvcmRlci5DdXJyZW50Q2pOdW0gPz8gb3JkZXIuY3VycmVudENqTnVtID8/IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOaWsOWinu+8muiHquWKqOWhq+WFheWvv+WRveavlOmihOitpuWAvFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3JkZXIubW9kbExpZmVXb3JuaW5nICE9PSB1bmRlZmluZWQgJiYgb3JkZXIubW9kbExpZmVXb3JuaW5nICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3YXJuID0gTnVtYmVyKG9yZGVyLm1vZGxMaWZlV29ybmluZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxpZmVXYXJuSW5wdXQgPSB3YXJuIDw9IDEgPyAod2FybiAqIDEwMCkudG9GaXhlZCgwKSA6IHdhcm4udG9GaXhlZCgwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGlmZVdhcm5JbnB1dCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53b3JrT3JkZXJDdXJyZW50Q2pOdW0gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9yZGVyID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3JkZXJJZCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2Fybign6Ieq5Yqo5bim5Ye65bel5Y2V5YiA5YW35aSx6LSlJywgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53b3JrT3JkZXJDdXJyZW50Q2pOdW0gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3JkZXIgPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9yZGVySWQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBmb3JtYXREYXRlVGltZShkYXRlVGltZVN0cikge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFkYXRlVGltZVN0cikgcmV0dXJuICcnO1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzID0gU3RyaW5nKGRhdGVUaW1lU3RyKS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKC9eXFxkezEwfSQvLnRlc3QocykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZCA9IG5ldyBEYXRlKE51bWJlcihzKSAqIDEwMDApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7ZC5nZXRNb250aCgpICsgMX0tJHtkLmdldERhdGUoKX0gJHtkLmdldEhvdXJzKCl9OiR7U3RyaW5nKGQuZ2V0TWludXRlcygpKS5wYWRTdGFydCgyLCAnMCcpfWA7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgvXlxcZHsxM30kLy50ZXN0KHMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGQgPSBuZXcgRGF0ZShOdW1iZXIocykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7ZC5nZXRNb250aCgpICsgMX0tJHtkLmdldERhdGUoKX0gJHtkLmdldEhvdXJzKCl9OiR7U3RyaW5nKGQuZ2V0TWludXRlcygpKS5wYWRTdGFydCgyLCAnMCcpfWA7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShkYXRlVGltZVN0cik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc05hTihkYXRlLmdldFRpbWUoKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke2RhdGUuZ2V0TW9udGgoKSArIDF9LSR7ZGF0ZS5nZXREYXRlKCl9ICR7ZGF0ZS5nZXRIb3VycygpfToke1N0cmluZyhkYXRlLmdldE1pbnV0ZXMoKSkucGFkU3RhcnQoMiwgJzAnKX1gO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXRjaCA9IFN0cmluZyhkYXRlVGltZVN0cikubWF0Y2goLyhcXGR7MSw0fVstXFwvXVxcZHsxLDJ9Wy1cXC9dXFxkezEsMn0pLio/KFxcZHsxLDJ9OlxcZHsyfSkvKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2gpIHJldHVybiBgJHttYXRjaFsxXS5yZXBsYWNlKC8tL2csICcvJykucmVwbGFjZSgvXlxcZHs0fVxcLy8sIChtKSA9PiBtKX0gJHttYXRjaFsyXX1gO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZGF0ZVRpbWVTdHIpO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhkYXRlVGltZVN0cik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyDmlrDlop7vvJrpgInmi6nosIPmnLrluIjlgoVcclxuICAgICAgICAgICAgc2VsZWN0VGlhb2ppVXNlcih1KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRpYW9qaVN0YWZmTm8gPSB1O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1RpYW9qaVVzZXJTZWxlY3RTaG93ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRpYW9qaVVzZXJTZWFyY2ggPSAnJztcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIOaWsOWinu+8mumAgeajgOWRvOWPqyArIOaKpeivleS6p+aVsFxyXG4gICAgICAgICAgICBhc3luYyBoYW5kbGVJbnNwZWN0aW9uQ2FsbCgpIHtcclxuICAgICAgICAgICAgICAgIC8vIOmqjOivgeW/heWhq+mhuVxyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnRpYW9qaVN0YWZmTm8pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiRzaG93TWVzc2FnZSgn6K+36YCJ5oup6LCD5py65biI5YKFJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBjb25zdCBva1F0eSA9IE51bWJlcih0aGlzLnRpYW9qaU9rUXR5KTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGJhZFF0eSA9IE51bWJlcih0aGlzLnRpYW9qaUJhZFF0eSk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGlmIChpc05hTihva1F0eSkgfHwgb2tRdHkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kc2hvd01lc3NhZ2UoJ+ivt+i+k+WFpeacieaViOeahOiwg+acuuiJr+WTgeaVsCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgaWYgKGlzTmFOKGJhZFF0eSkgfHwgYmFkUXR5IDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJHNob3dNZXNzYWdlKCfor7fovpPlhaXmnInmlYjnmoTosIPmnLrkuI3oia/lk4HmlbAnKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN0YWZmTm8gPSB0aGlzLnRpYW9qaVN0YWZmTm8uc3BsaXQoJzonKVswXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDak51bSA9IHRoaXMub3JkZXI/LmN1cnJlbnRDak51bSB8fCAwO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAvLyDosIPnlKjmiqXor5XkuqfmlbDmjqXlj6Mo5L2/55So5oql5bel55WM6Z2i55qE5o6l5Y+jKVxyXG4gICAgICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgICAgICAgICAgICAgICBvcmRlck5vOiB0aGlzLndvcmtPcmRlck5vLFxyXG4gICAgICAgICAgICAgICAgICAgIG9yZGVySWQ6IHRoaXMub3JkZXJJZCwgLy8g6ZyA6KaB5LuO5bel5Y2V5pWw5o2u5Lit6I635Y+WXHJcbiAgICAgICAgICAgICAgICAgICAgYmY6IGJhZFF0eSwgLy8gYmbkvKDpgJLkuI3oia/lk4HmlbBcclxuICAgICAgICAgICAgICAgICAgICBzdGFmZk5vOiBzdGFmZk5vLFxyXG4gICAgICAgICAgICAgICAgICAgIGluaXRDak51bTogY3VycmVudENqTnVtIC0gYmFkUXR5IC0gb2tRdHksIC8vIGluaXRDak51bSA9IGN1cnJlbnRDak51bSAtIGJmIC0g6Imv5ZOB5pWwXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudENqTnVtOiBjdXJyZW50Q2pOdW0sXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3RpYW9qaScsIC8vIOagh+ivhuS4uuiwg+acuuaKpeW3pVxyXG4gICAgICAgICAgICAgICAgICAgIHRpYW9qaU9rUXR5OiBva1F0eSwgLy8g5paw5aKeOuiJr+WTgeaVsFxyXG4gICAgICAgICAgICAgICAgICAgIHRpYW9qaUJhZFF0eTogYmFkUXR5IC8vIOaWsOWinjrkuI3oia/lk4HmlbBcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJtaXR0aW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAvLyDosIPnlKjmiqXlt6XnlYzpnaLnmoTmiqXor5XkuqfmlbDmjqXlj6NcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLiRwb3N0KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnL01lc0ludkl0ZW1CYXJjb2Rlcy9BZGRCRlRvQmFyY29kZXMnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBwYXlsb2FkXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5zdGF0dXMgPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRzaG93TWVzc2FnZShyZXMubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kc2hvd01lc3NhZ2UoJ+iwg+acuuaKpeW3peaIkOWKnycpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIOa4heepuui+k+WFpVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGlhb2ppT2tRdHkgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRpYW9qaUJhZFF0eSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIOWIt+aWsOaVsOaNrlxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZmV0Y2hGb3JtRGF0YSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZmV0Y2hEZWZhdWx0VG9vbEZyb21Xb3JrT3JkZXIoKTtcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAvLyDmlrDlop7vvJroh6rliqjlpITnkIbosIPmnLrpgIHmo4DnlYzpnaLnmoTmjInpkq7pgLvovpFcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmF1dG9IYW5kbGVNYWNoaW5lSW5zcGVjdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcign6LCD5py65oql5bel6ZSZ6K+vOicsIGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kc2hvd01lc3NhZ2UoJ+iwg+acuuaKpeW3peWksei0pe+8jOivt+ajgOafpee9kee7nCcpO1xyXG4gICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Ym1pdHRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIOaWsOWinu+8muiHquWKqOWkhOeQhuiwg+acuumAgeajgOeVjOmdoueahOaMiemSrumAu+i+kVxyXG4gICAgICAgICAgICBhc3luYyBhdXRvSGFuZGxlTWFjaGluZUluc3BlY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIDEuIOS9v+eUqCBGaW5kQnlPcmRlck5vIOiOt+WPluiwg+acuumAgeajgOeVjOmdoueahOS4ieS4quaXtumXtFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXR1c1JlcyA9IGF3YWl0IHRoaXMuJHBvc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICcvTWVzT3JkZXJTdGEvRmluZEJ5T3JkZXJObycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVySWQ6IHRoaXMub3JkZXJJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyTm86IHRoaXMud29ya09yZGVyTm9cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghc3RhdHVzUmVzIHx8ICFzdGF0dXNSZXMuZGF0YSB8fCAhc3RhdHVzUmVzLmRhdGEudGJCaWxsTGlzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCfojrflj5blt6XljZXnirbmgIHlpLHotKUnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGF0dXNGb3JtID0gc3RhdHVzUmVzLmRhdGEudGJCaWxsTGlzdDtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYVN0YXJ0VGltZSA9IHN0YXR1c0Zvcm0ubWFTdGFydFRpbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFTaG91dFRpbWUgPSBzdGF0dXNGb3JtLm1hU2hvdXRUaW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hRW5kVGltZSA9IHN0YXR1c0Zvcm0ubWFFbmRUaW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIDIuIOWHhuWkh+mcgOimgeabtOaWsOeahOaXtumXtOaVsOaNrlxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBuZWVkU2F2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB1cGRhdGVEYXRhID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogc3RhdHVzRm9ybS5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXJJZDogdGhpcy5vcmRlcklkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lTm86IHRoaXMubWFjaGluZU5vLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmbGFnOiAtMVxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gMy4g5LuO5LiK5Yiw5LiL5qC55o2u5pi+56S65qGG6YeM5piv5ZCm5pyJ5pe26Ze05L6d5qyh6K6+572uXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5aaC5p6c6LCD5py65byA5aeL5pe26Ze05Li656m677yM6K6+572u6LCD5py65byA5aeL5pe26Ze0XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFtYVN0YXJ0VGltZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVEYXRhLm1hU3RhcnRUaW1lID0gdGhpcy4kZ2V0RGF0ZSgneXl5eS1tbS1kZCBoaDI0Om1pOnNzJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZURhdGEuZmxhZyA9IC0xOyAvLyDosIPmnLrlvIDlp4vnmoRmbGFnPS0xXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRTYXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVEYXRhLm1hU3RhcnRUaW1lID0gbWFTdGFydFRpbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOWmguaenOmAgeajgOWRvOWPq+aXtumXtOS4uuepuu+8jOiuvue9rumAgeajgOWRvOWPq+aXtumXtFxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghbWFTaG91dFRpbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlRGF0YS5tYVNob3V0VGltZSA9IHRoaXMuJGdldERhdGUoJ3l5eXktbW0tZGQgaGgyNDptaTpzcycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVEYXRhLmZsYWcgPSAxOyAvLyDpppbmrKHpgIHmo4Dlkbzlj6vnmoRmbGFnPTFcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmVlZFNhdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZURhdGEubWFTaG91dFRpbWUgPSBtYVNob3V0VGltZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g6LCD5py65a6M5oiQ5pe26Ze05L+d5oyB5LiN5Y+YXHJcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlRGF0YS5tYUVuZFRpbWUgPSBtYUVuZFRpbWUgfHwgJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gNC4g5aaC5p6c5pyJ6ZyA6KaB5pu05paw55qE5pe26Ze077yM6LCD55So5L+d5a2Y5o6l5Y+jXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5lZWRTYXZlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNhdmVSZXMgPSBhd2FpdCB0aGlzLiRwb3N0KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJy9NZXNPcmRlclN0YS9DaGFuZ2VNYWNoaW5lVGltZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB1cGRhdGVEYXRhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNhdmVSZXMgJiYgc2F2ZVJlcy5kYXRhICYmIHNhdmVSZXMuZGF0YS50YkJpbGxMaXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygn6LCD5py66YCB5qOA55WM6Z2i5pe26Ze06Ieq5Yqo5pu05paw5oiQ5YqfJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCfosIPmnLrpgIHmo4DnlYzpnaLml7bpl7Toh6rliqjmm7TmlrDlpLHotKUnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ+iHquWKqOWkhOeQhuiwg+acuumAgeajgOeVjOmdouWksei0pTonLCBlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIOS4jeS4reaWreS4u+a1geeoi++8jOWPquiusOW9lemUmeivr1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8g5paw5aKe77ya6I635Y+W6LCD5py65biI5YKF5YiX6KGoXHJcbiAgICAgICAgICAgIGFzeW5jIGZldGNoVGlhb2ppU3RhZmYoKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuJHBvc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICcvTWVzU3RhZmYvR2V0QWxsWFMwMTAxQll0aicgLy8g5LiO5oql5bel55WM6Z2i5L2/55So55u45ZCM5o6l5Y+jXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5zdGF0dXMgPT09IDAgJiYgcmVzLmRhdGEgJiYgcmVzLmRhdGEudGJCaWxsTGlzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFmZiA9IHJlcy5kYXRhLnRiQmlsbExpc3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGlhb2ppVXNlcnMgPSBzdGFmZi5tYXAocyA9PiBzLnN0YWZmTm8gKyAnOicgKyBzLnN0YWZmTmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcign6I635Y+W6LCD5py65biI5YKF5YiX6KGo5aSx6LSlOicsIGVycik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIG1vdW50ZWQoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmV0Y2hUb29scygnJyk7XHJcbiAgICAgICAgICAgIHRoaXMubWFjaGluZU5vID0gdW5pLmdldFN0b3JhZ2VTeW5jKCdtYWNoaW5lTm8nKSB8fCAnJztcclxuICAgICAgICAgICAgdGhpcy53b3JrT3JkZXJObyA9IHVuaS5nZXRTdG9yYWdlU3luYygnZGFhMDAxJykgfHwgJyc7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyDmlrDlop7vvJrojrflj5bosIPmnLrluIjlgoXliJfooahcclxuICAgICAgICAgICAgdGhpcy5mZXRjaFRpYW9qaVN0YWZmKCk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5tYWNoaW5lTm8gJiYgdGhpcy53b3JrT3JkZXJObykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mZXRjaEZvcm1EYXRhKCkudGhlbihhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5mZXRjaERlZmF1bHRUb29sRnJvbVdvcmtPcmRlcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIOi/m+WFpemhtemdouaXtui1i+WAvOesrOS4gOihjCBjdXJyZW50Q2pOdW1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50b29sUmVjb3Jkcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJHNldCh0aGlzLnRvb2xSZWNvcmRzWzBdLCAnY3VycmVudENqTnVtJywgdGhpcy53b3JrT3JkZXJDdXJyZW50Q2pOdW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCfmnLrlj7Dlj7fmiJblt6XljZXlj7fkuLrnqbrvvIzml6Dms5Xojrflj5booajljZXmlbDmja4nKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8g5ZCv5Yqo6Ieq5Yqo5L+d5a2Y5a6a5pe25ZmoXHJcbiAgICAgICAgICAgIC8vdGhpcy5zdGFydEF1dG9TYXZlKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBiZWZvcmVEZXN0cm95KCkge1xyXG4gICAgICAgICAgICAvLyDmuIXnkIblrprml7blmajvvIzpmLLmraLlhoXlrZjms4TmvI9cclxuICAgICAgICAgICAgdGhpcy5zdG9wQXV0b1NhdmUoKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG48L3NjcmlwdD5cclxuXHJcbjxzdHlsZSBzY29wZWQ+XHJcbiAgICAudG9wLXNlY3Rpb24tZ3JpZCB7XHJcbiAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xyXG4gICAgICAgIGdhcDogMTJweDtcclxuICAgICAgICBtYXJnaW4tYm90dG9tOiAydmg7XHJcbiAgICAgICAgd2lkdGg6IDk5dnc7XHJcbiAgICAgICAgbWF4LXdpZHRoOiAxOTIwcHg7XHJcbiAgICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87XHJcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xyXG4gICAgICAgIHBhZGRpbmc6IDEycHg7XHJcbiAgICAgICAgYmFja2dyb3VuZDogI2Y4ZjlmYTtcclxuICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7XHJcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2U5ZWNlZjtcclxuICAgIH1cclxuXHJcbiAgICAuZm9ybS1yb3cge1xyXG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcclxuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XHJcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICBtYXJnaW4tYm90dG9tOiAxMnB4O1xyXG4gICAgfVxyXG5cclxuICAgICAgICAuZm9ybS1yb3c6bGFzdC1jaGlsZCB7XHJcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIC5mb3JtLWNlbGwge1xyXG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAgICBtaW4td2lkdGg6IDA7XHJcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwO1xyXG4gICAgfVxyXG5cclxuICAgICAgICAuZm9ybS1jZWxsOm50aC1jaGlsZCgxKSB7XHJcbiAgICAgICAgICAgIGZsZXg6IDAgMCAyOCU7XHJcbiAgICAgICAgICAgIG1pbi13aWR0aDogMTgwcHg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuZm9ybS1jZWxsOm50aC1jaGlsZCgyKSB7XHJcbiAgICAgICAgICAgIGZsZXg6IDAgMCAzMiU7XHJcbiAgICAgICAgICAgIG1pbi13aWR0aDogMTgwcHg7XHJcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5mb3JtLWNlbGw6bnRoLWNoaWxkKDMpIHtcclxuICAgICAgICAgICAgZmxleDogMCAwIGF1dG87XHJcbiAgICAgICAgICAgIG1pbi13aWR0aDogMDtcclxuICAgICAgICAgICAgbWF4LXdpZHRoOiAyMjBweDsgLyog6ZmQ5Yi25pyA5aSn5a695bqm77yM6YG/5YWN5pKR5byAICovXHJcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIC5mb3JtLWxhYmVsIHtcclxuICAgICAgICB3aWR0aDogYXV0bztcclxuICAgICAgICBmb250LXdlaWdodDogNTAwO1xyXG4gICAgICAgIGNvbG9yOiAjMzMzO1xyXG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XHJcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiA0cHg7XHJcbiAgICAgICAgZmxleC1zaHJpbms6IDA7XHJcbiAgICAgICAgZm9udC1zaXplOiAyMnB4O1xyXG4gICAgfVxyXG5cclxuICAgIC5pbnB1dCB7XHJcbiAgICAgICAgcGFkZGluZzogMTRweCAyMHB4O1xyXG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNkY2RmZTY7XHJcbiAgICAgICAgZmxleDogMTtcclxuICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7XHJcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xyXG4gICAgICAgIGJhY2tncm91bmQ6ICNmZmY7XHJcbiAgICAgICAgbWluLXdpZHRoOiAwO1xyXG4gICAgICAgIGhlaWdodDogNTZweCAhaW1wb3J0YW50O1xyXG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICAgICAgZm9udC1zaXplOiAyMnB4O1xyXG4gICAgfVxyXG5cclxuICAgICAgICAuaW5wdXQuc21hbGwtZm9udCB7XHJcbiAgICAgICAgICAgIC8qIOS4jeiuvue9ruWtl+S9k+Wkp+WwjyAqL1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmlucHV0OmRpc2FibGVkIHtcclxuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjdmYTtcclxuICAgICAgICAgICAgY29sb3I6ICNjMGM0Y2M7XHJcbiAgICAgICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIC5pbnB1dC13aXRoLXVuaXQge1xyXG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAgICBnYXA6IDA7XHJcbiAgICB9XHJcblxyXG4gICAgICAgIC5pbnB1dC13aXRoLXVuaXQgLmlucHV0IHtcclxuICAgICAgICAgICAgd2lkdGg6IDYwcHggIWltcG9ydGFudDtcclxuICAgICAgICAgICAgbWluLXdpZHRoOiAwICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMnB4ICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAycHg7XHJcbiAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDJweDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5pbnB1dC13aXRoLXVuaXQgLmlucHV0IHtcclxuICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiA0cHggIWltcG9ydGFudDtcclxuICAgICAgICAgICAgd2lkdGg6IDYwcHggIWltcG9ydGFudDtcclxuICAgICAgICAgICAgbWluLXdpZHRoOiAwICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgLnVuaXQtdGV4dCB7XHJcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDtcclxuICAgICAgICBwYWRkaW5nLWxlZnQ6IDAgIWltcG9ydGFudDtcclxuICAgICAgICBmb250LXNpemU6IDIycHggIWltcG9ydGFudDtcclxuICAgIH1cclxuXHJcbiAgICAuYnRuLWJsdWUsIC5idG4tYmx1ZS5sYXJnZS1idG4ge1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMxODkwZmY7XHJcbiAgICAgICAgY29sb3I6IHdoaXRlO1xyXG4gICAgICAgIGJvcmRlcjogbm9uZTtcclxuICAgICAgICBwYWRkaW5nOiAxNHB4IDMycHg7XHJcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xyXG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgICAgICBmb250LXdlaWdodDogNTAwO1xyXG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XHJcbiAgICAgICAgaGVpZ2h0OiA3MHB4ICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcztcclxuICAgICAgICBmbGV4LXNocmluazogMDtcclxuICAgICAgICBtaW4td2lkdGg6IDE0MHB4O1xyXG4gICAgICAgIG1hcmdpbi1sZWZ0OiAyNHB4O1xyXG4gICAgfVxyXG5cclxuICAgICAgICAuYnRuLWJsdWUubGFyZ2UtYnRuIHtcclxuICAgICAgICAgICAgcGFkZGluZzogMCA2MHB4O1xyXG4gICAgICAgICAgICBtaW4td2lkdGg6IDE4MHB4O1xyXG4gICAgICAgICAgICBoZWlnaHQ6IDcycHggIWltcG9ydGFudDtcclxuICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDtcclxuICAgICAgICAgICAgZm9udC1zaXplOiAxLjNlbTtcclxuICAgICAgICAgICAgYm94LXNoYWRvdzogMCAycHggOHB4IHJnYmEoMjQsMTQ0LDI1NSwwLjA4KTtcclxuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDcycHg7IC8qIOWeguebtOWxheS4rSAqL1xyXG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IC8qIOS/neivgWxpbmUtaGVpZ2h055Sf5pWIICovXHJcbiAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuYnRuLWJsdWU6aG92ZXIge1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDBhOWZmO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmJ0bi1ibHVlOmFjdGl2ZSB7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMwOTZkZDk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuYnRuLWJsdWU6ZGlzYWJsZWQge1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjYmFlN2ZmO1xyXG4gICAgICAgICAgICBjb2xvcjogIzkxZDVmZjtcclxuICAgICAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgLmJ1dHRvbi1yb3cge1xyXG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICAgICAgZ2FwOiAzMnB4O1xyXG4gICAgICAgIG1hcmdpbjogMnZoIDA7XHJcbiAgICB9XHJcblxyXG4gICAgLnNhdmUtYnRuLCAuY2FuY2VsLWJ0biB7XHJcbiAgICAgICAgd2lkdGg6IDI4JTtcclxuICAgICAgICBwYWRkaW5nOiAxLjV2aDtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBBMkU5O1xyXG4gICAgICAgIGNvbG9yOiB3aGl0ZTtcclxuICAgICAgICBib3JkZXI6IG5vbmU7XHJcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcclxuICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcztcclxuICAgICAgICBmb250LXNpemU6IDIycHg7XHJcbiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcclxuICAgICAgICBib3gtc2hhZG93OiAwIDJweCA0cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xyXG4gICAgfVxyXG5cclxuICAgIC5jYW5jZWwtYnRuIHtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xyXG4gICAgICAgIGNvbG9yOiAjMzMzO1xyXG4gICAgfVxyXG5cclxuICAgIC5zYXZlLWJ0bjpob3ZlciB7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzQwYTlmZjtcclxuICAgIH1cclxuXHJcbiAgICAuc2F2ZS1idG46YWN0aXZlIHtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDk2ZGQ5O1xyXG4gICAgfVxyXG5cclxuICAgIC5zYXZlLWJ0bjpkaXNhYmxlZCwgLmNhbmNlbC1idG46ZGlzYWJsZWQge1xyXG4gICAgICAgIG9wYWNpdHk6IDAuNjtcclxuICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xyXG4gICAgfVxyXG5cclxuICAgIC8qIOW8ueeql+agt+W8jyAqL1xyXG4gICAgLmRpYWxvZy1vdmVybGF5IHtcclxuICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XHJcbiAgICAgICAgdG9wOiAwO1xyXG4gICAgICAgIGxlZnQ6IDA7XHJcbiAgICAgICAgcmlnaHQ6IDA7XHJcbiAgICAgICAgYm90dG9tOiAwO1xyXG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4xOCk7XHJcbiAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgICAgIHotaW5kZXg6IDEwMDA7XHJcbiAgICB9XHJcblxyXG4gICAgLmRpYWxvZyB7XHJcbiAgICAgICAgYmFja2dyb3VuZDogI2ZmZjtcclxuICAgICAgICBwYWRkaW5nOiAzdmggM3Z3O1xyXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDE4cHg7XHJcbiAgICAgICAgd2lkdGg6IDkwdnc7XHJcbiAgICAgICAgbWF4LXdpZHRoOiAxNjAwcHg7XHJcbiAgICAgICAgbWluLWhlaWdodDogNzB2aDtcclxuICAgICAgICBtYXgtaGVpZ2h0OiA4NXZoO1xyXG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICAgICAgYm94LXNoYWRvdzogMCA4cHggMzJweCByZ2JhKDAsMCwwLDAuMTIpO1xyXG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgIH1cclxuXHJcbiAgICAuZm9ybS1ncm91cCB7XHJcbiAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICBnYXA6IDEycHg7XHJcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAgICBtYXJnaW4tYm90dG9tOiAydmg7XHJcbiAgICAgICAgZmxleC1zaHJpbms6IDA7XHJcbiAgICB9XHJcblxyXG4gICAgICAgIC5mb3JtLWdyb3VwIC5pbnB1dCB7XHJcbiAgICAgICAgICAgIGZsZXg6IDE7XHJcbiAgICAgICAgICAgIG1pbi13aWR0aDogMzAwcHg7XHJcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDtcclxuICAgICAgICAgICAgYmFja2dyb3VuZDogI2Y4ZjhmODtcclxuICAgICAgICB9XHJcblxyXG4gICAgLnRvb2wtbGlzdCB7XHJcbiAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICBmbGV4LXdyYXA6IHdyYXA7XHJcbiAgICAgICAgbWFyZ2luOiAxdmggMDtcclxuICAgICAgICBmbGV4OiAxO1xyXG4gICAgICAgIG92ZXJmbG93LXk6IGF1dG87XHJcbiAgICAgICAgZ2FwOiAxMnB4O1xyXG4gICAgICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLnRvb2wtYnRuIHtcclxuICAgICAgICBmbGV4OiAwIDAgY2FsYygyMCUgLSAxMHB4KTtcclxuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgICAgIHBhZGRpbmc6IDEwcHggMTJweDtcclxuICAgICAgICBiYWNrZ3JvdW5kOiAjZjVmNWY1O1xyXG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNkMGQwZDA7XHJcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xyXG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgICAgICBjb2xvcjogIzMzMztcclxuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xyXG4gICAgICAgIG1pbi1oZWlnaHQ6IDUwcHg7XHJcbiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cywgY29sb3IgMC4xNXM7XHJcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcclxuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xyXG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjQ7XHJcbiAgICB9XHJcblxyXG4gICAgICAgIC50b29sLWJ0bi5hY3RpdmUge1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMDBBMkU5O1xyXG4gICAgICAgICAgICBjb2xvcjogI2ZmZjtcclxuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbiAgICAgICAgICAgIGJvcmRlcjogMS41cHggc29saWQgIzAwODZjMjtcclxuICAgICAgICB9XHJcblxyXG4gICAgLmRpYWxvZy1hY3Rpb25zIHtcclxuICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcclxuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgICAgIG1hcmdpbi10b3A6IDJ2aDtcclxuICAgICAgICBwYWRkaW5nLXRvcDogMnZoO1xyXG4gICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZWVlO1xyXG4gICAgICAgIGZsZXgtc2hyaW5rOiAwO1xyXG4gICAgfVxyXG5cclxuICAgICAgICAuZGlhbG9nLWFjdGlvbnMgPiBkaXY6Zmlyc3QtY2hpbGQge1xyXG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgICAgICAgICBnYXA6IDI0cHg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuZGlhbG9nLWFjdGlvbnMgPiBkaXY6bGFzdC1jaGlsZCB7XHJcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XHJcbiAgICAgICAgICAgIGdhcDogMThweDtcclxuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5kaWFsb2ctYWN0aW9ucyAuYnRuLWJsdWUge1xyXG4gICAgICAgICAgICBwYWRkaW5nOiAxMHB4IDI0cHg7XHJcbiAgICAgICAgICAgIG1pbi13aWR0aDogMTIwcHg7XHJcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMjJweDtcclxuICAgICAgICB9XHJcblxyXG4gICAgLmJ0bi1kaXNhYmxlZCB7XHJcbiAgICAgICAgYmFja2dyb3VuZDogI2YyZjJmMjtcclxuICAgICAgICBjb2xvcjogIzk5OTtcclxuICAgICAgICBib3JkZXI6IG5vbmU7XHJcbiAgICAgICAgcGFkZGluZzogMTBweCAyNHB4O1xyXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcclxuICAgICAgICBmb250LXdlaWdodDogNTAwO1xyXG4gICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XHJcbiAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcclxuICAgICAgICBtaW4td2lkdGg6IDEyMHB4O1xyXG4gICAgfVxyXG5cclxuICAgIC50YWJsZS1zZWN0aW9uIHtcclxuICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgICAgIG1hcmdpbjogMXZoIDA7XHJcbiAgICAgICAgb3ZlcmZsb3cteDogYXV0bztcclxuICAgICAgICB3aWR0aDogMTAwJTsgLyog56Gu5L+d6KGo5qC85a655Zmo5Y2g5ruh5a695bqmICovXHJcbiAgICB9XHJcblxyXG4gICAgdGFibGUuc3R5bGVkLXRhYmxlIHtcclxuICAgICAgICBtYXgtd2lkdGg6IDE4MDBweDsgLyog5LuOMTYwMHB45aKe5Yqg5YiwMTgwMHB4ICovXHJcbiAgICAgICAgd2lkdGg6IDk4dnc7IC8qIOS7jjk1dnflop7liqDliLA5OHZ3ICovXHJcbiAgICAgICAgbWFyZ2luOiAwIGF1dG87XHJcbiAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTtcclxuICAgICAgICBib3JkZXItc3BhY2luZzogMDtcclxuICAgICAgICBib3JkZXI6IDJweCBzb2xpZCAjYmZiZmJmO1xyXG4gICAgICAgIGJhY2tncm91bmQ6ICNmZmY7XHJcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDtcclxuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDEycHggcmdiYSgwLDAsMCwwLjA2KTtcclxuICAgIH1cclxuXHJcbiAgICAgICAgdGFibGUuc3R5bGVkLXRhYmxlIHRoZWFkIHRoIHtcclxuICAgICAgICAgICAgYmFja2dyb3VuZDogI2ZhZmFmYTtcclxuICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICNiZmJmYmY7XHJcbiAgICAgICAgICAgIHBhZGRpbmc6IDE2cHggMTBweDtcclxuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgICAgICAgICAgZm9udC1zaXplOiAyMnB4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGFibGUuc3R5bGVkLXRhYmxlIHRib2R5IHRkIHtcclxuICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlOGU4ZTg7XHJcbiAgICAgICAgICAgIHBhZGRpbmc6IDE0cHggMTBweDtcclxuICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcclxuICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgICAgICAgICBmb250LXNpemU6IDIycHg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIC50YWJsZS1zZWN0aW9uIHRhYmxlIHRoOmZpcnN0LWNoaWxkLCAudGFibGUtc2VjdGlvbiB0YWJsZSB0ZDpmaXJzdC1jaGlsZCB7XHJcbiAgICAgICAgYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjYmZiZmJmO1xyXG4gICAgfVxyXG5cclxuICAgIC50YWJsZS1zZWN0aW9uIHRhYmxlIHRoOmxhc3QtY2hpbGQsIC50YWJsZS1zZWN0aW9uIHRhYmxlIHRkOmxhc3QtY2hpbGQge1xyXG4gICAgICAgIGJvcmRlci1yaWdodDogMnB4IHNvbGlkICNiZmJmYmY7XHJcbiAgICB9XHJcblxyXG4gICAgLnJvdy1vZGQge1xyXG4gICAgICAgIGJhY2tncm91bmQ6ICNmZmY7XHJcbiAgICB9XHJcblxyXG4gICAgICAgIC5yb3ctb2RkICsgdHIge1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZmFmYWZhO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAubnVtIHtcclxuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgICAgcGFkZGluZy1yaWdodDogMDtcclxuICAgICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xyXG4gICAgfVxyXG5cclxuICAgIC5sZWZ0IHtcclxuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xyXG4gICAgICAgIHBhZGRpbmctbGVmdDogOHB4O1xyXG4gICAgfVxyXG5cclxuICAgIC53YXJuLWNlbGwge1xyXG4gICAgICAgIGNvbG9yOiAjZDkzMDI1O1xyXG4gICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG4gICAgfVxyXG5cclxuICAgIC5vay1jZWxsIHtcclxuICAgICAgICBjb2xvcjogIzMzMztcclxuICAgIH1cclxuXHJcbiAgICAud2Fybi1iYWRnZSB7XHJcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgICAgIGJhY2tncm91bmQ6ICNmZjRkNGY7XHJcbiAgICAgICAgY29sb3I6ICNmZmY7XHJcbiAgICAgICAgcGFkZGluZzogMnB4IDZweDtcclxuICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7XHJcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyog5ZON5bqU5byP6LCD5pW0ICovXHJcbiAgICBAbWVkaWEgKG1heC13aWR0aDogMTIwMHB4KSB7XHJcbiAgICAgICAgLmZvcm0tY2VsbCB7XHJcbiAgICAgICAgICAgIG1hcmdpbjogMCA0cHg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuZm9ybS1sYWJlbCB7XHJcbiAgICAgICAgICAgIHdpZHRoOiA5MHB4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmlucHV0IHtcclxuICAgICAgICAgICAgcGFkZGluZzogMTBweCAxNHB4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmJ0bi1ibHVlIHtcclxuICAgICAgICAgICAgcGFkZGluZzogMTBweCAxOHB4O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAuaW5wdXQtbGlmZS13YXJuIHtcclxuICAgICAgICB3aWR0aDogNDhweCAhaW1wb3J0YW50OyAvKiDnqI3lvq7mlL7lrr3vvIzpgb/lhY3lrZfkvZPmuqLlh7ogKi9cclxuICAgICAgICBtaW4td2lkdGg6IDAgIWltcG9ydGFudDtcclxuICAgICAgICBtYXJnaW4tcmlnaHQ6IDRweDtcclxuICAgICAgICBwYWRkaW5nLWxlZnQ6IDJweDtcclxuICAgICAgICBwYWRkaW5nLXJpZ2h0OiAycHg7XHJcbiAgICAgICAgZm9udC1zaXplOiAyMnB4ICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICB9XHJcblxyXG4gICAgLmlucHV0LFxyXG4gICAgLmlucHV0LnNtYWxsLWZvbnQsXHJcbiAgICAuaW5wdXQtdXNlLWxpbWl0LFxyXG4gICAgLmlucHV0LXRvb2wtbW9kZWwsXHJcbiAgICAuaW5wdXQtdG9vbC1uYW1lLFxyXG4gICAgLmlucHV0LWxpZmUtd2FybiB7XHJcbiAgICAgICAgZm9udC1zaXplOiAyMnB4ICFpbXBvcnRhbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLmlucHV0LXRvb2wtbW9kZWwge1xyXG4gICAgICAgIHdpZHRoOiAzMjBweCAhaW1wb3J0YW50OyAvKiDljp/kuLoyMDBweO+8jOeOsOWKoOmVvyAqL1xyXG4gICAgICAgIG1pbi13aWR0aDogMCAhaW1wb3J0YW50O1xyXG4gICAgICAgIG1hcmdpbi1yaWdodDogMTZweDtcclxuICAgIH1cclxuXHJcbiAgICAuaW5wdXQtdG9vbC1uYW1lIHtcclxuICAgICAgICB3aWR0aDogMTIwcHggIWltcG9ydGFudDtcclxuICAgICAgICBtaW4td2lkdGg6IDAgIWltcG9ydGFudDtcclxuICAgICAgICBtYXJnaW4tcmlnaHQ6IDE2cHg7XHJcbiAgICB9XHJcblxyXG4gICAgLmhpZ2hsaWdodC1sYWJlbCB7XHJcbiAgICAgICAgY29sb3I6ICMxODkwZmYgIWltcG9ydGFudDtcclxuICAgIH1cclxuXHJcbiAgICAudG9vbC1kaXItY2VsbCB7XHJcbiAgICAgICAgZmxleDogMCAwIGF1dG8gIWltcG9ydGFudDtcclxuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQgIWltcG9ydGFudDtcclxuICAgICAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAgICBtYXJnaW4tbGVmdDogMTZweDsgLyog5LiO6KeE5qC85Z6L5Y+36L6T5YWl5qGG5ouJ5byA6Led56a7ICovXHJcbiAgICB9XHJcblxyXG4gICAgLmZvcm0tY2VsbC1mbGV4IHtcclxuICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgICAgZmxleDogMCAwIDYwJTtcclxuICAgICAgICBtaW4td2lkdGg6IDMyMHB4O1xyXG4gICAgfVxyXG5cclxuICAgICAgICAuZm9ybS1jZWxsLWZsZXggLmZvcm0tbGFiZWwge1xyXG4gICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDRweDtcclxuICAgICAgICAgICAgd2lkdGg6IGF1dG87XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuZm9ybS1jZWxsLWZsZXggLmlucHV0LXVzZS1saW1pdCB7XHJcbiAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMTJweDtcclxuICAgICAgICB9XHJcblxyXG4gICAgLmlucHV0LXVzZS1saW1pdCB7XHJcbiAgICAgICAgd2lkdGg6IDQ1MHB4ICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgbWluLXdpZHRoOiAwICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxNnB4O1xyXG4gICAgICAgIGZsZXg6IG5vbmUgIWltcG9ydGFudDsgLyog5YWz6ZSu77ya5b275bqV56aB5q2iZmxleOaLieS8uCAqL1xyXG4gICAgfVxyXG5cclxuICAgIC8qIOaWsOWinu+8muiwg+acuuWMuuWfn+agt+W8jyAqL1xyXG4gICAgLnRpYW9qaS1zZWN0aW9uIHtcclxuICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICBtYXJnaW46IDJ2aCAwO1xyXG4gICAgICAgIHBhZGRpbmc6IDIwcHg7XHJcbiAgICAgICAgYmFja2dyb3VuZDogI2Y4ZjlmYTtcclxuICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7XHJcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2U5ZWNlZjtcclxuICAgIH1cclxuXHJcbiAgICAudGlhb2ppLXJvdyB7XHJcbiAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICBmbGV4LXdyYXA6IHdyYXA7XHJcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAgICBnYXA6IDIwcHg7XHJcbiAgICB9XHJcblxyXG4gICAgLyog5b2T5YmN6LCD5py65biI5YKF5Yy65Z+fIC0g5LiO5oql5bel55WM6Z2i5L+d5oyB5LiA6Ie0ICovXHJcbiAgICAuY3VycmVudC11c2VyLXNlY3Rpb24ge1xyXG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAgICBmb250LXNpemU6IDIycHg7XHJcbiAgICAgICAgYm9yZGVyOiAxLjVweCBzb2xpZCAjZjAwO1xyXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7XHJcbiAgICAgICAgcGFkZGluZzogMTRweCAyMnB4O1xyXG4gICAgICAgIGJhY2tncm91bmQ6ICNmZmY7XHJcbiAgICAgICAgZ2FwOiAxNHB4O1xyXG4gICAgICAgIGZsZXg6IDAgMCBhdXRvO1xyXG4gICAgfVxyXG5cclxuICAgIC5jdXJyZW50LXVzZXItbmFtZSB7XHJcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbiAgICAgICAgZm9udC1zaXplOiAyMnB4O1xyXG4gICAgfVxyXG5cclxuICAgIC8qIOmAieS6uuaMiemSriAtIOiTneiJsuS4u+mimO+8jOS4juaKpeW3peeVjOmdouS/neaMgeS4gOiHtCAqL1xyXG4gICAgLnNlbGVjdC11c2VyLWJ0biB7XHJcbiAgICAgICAgYmFja2dyb3VuZDogIzAwYTJlOTtcclxuICAgICAgICBjb2xvcjogI2ZmZjtcclxuICAgICAgICBib3JkZXI6IG5vbmU7XHJcbiAgICAgICAgcGFkZGluZzogMTJweCAyMnB4O1xyXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7XHJcbiAgICAgICAgZm9udC1zaXplOiAyMnB4O1xyXG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzO1xyXG4gICAgICAgIGhlaWdodDogNjZweDtcclxuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgIH1cclxuXHJcbiAgICAgICAgLnNlbGVjdC11c2VyLWJ0bjpob3ZlciB7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMwMDhhYzI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIC8qIOiwg+acuuaVsOmHj+i+k+WFpeWMuuWfnyAqL1xyXG4gICAgLnRpYW9qaS1pbnB1dC1zZWN0aW9uIHtcclxuICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgICAgZ2FwOiAxNHB4O1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMjJweDtcclxuICAgIH1cclxuXHJcbiAgICAudGlhb2ppLWlucHV0IHtcclxuICAgICAgICB3aWR0aDogMjAwcHg7XHJcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xyXG4gICAgICAgIGhlaWdodDogNjZweDtcclxuICAgICAgICBib3JkZXI6IDJweCBzb2xpZCAjODA4MDgwO1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMjhweDtcclxuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xyXG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICB9XHJcblxyXG4gICAgLyog6YCB5qOA5ZG85Y+r5oyJ6ZKuIC0g5LiO5oql5bel55WM6Z2i55qE56Gu6K6k5o+Q5Lqk5oyJ6ZKu5L+d5oyB5LiA6Ie0ICovXHJcbiAgICAuZGV0YWlscy1idG4ge1xyXG4gICAgICAgIHBhZGRpbmc6IDEycHggMzRweDtcclxuICAgICAgICBiYWNrZ3JvdW5kOiAjMDBhMmU5O1xyXG4gICAgICAgIGNvbG9yOiAjZmZmO1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMzJweDtcclxuICAgICAgICBib3JkZXI6IG5vbmU7XHJcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xyXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7XHJcbiAgICAgICAgaGVpZ2h0OiA2NnB4O1xyXG4gICAgICAgIG1pbi13aWR0aDogMTgwcHg7XHJcbiAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTtcclxuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXM7XHJcbiAgICB9XHJcblxyXG4gICAgICAgIC5kZXRhaWxzLWJ0bjpob3ZlciB7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMwMDhhYzI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuZGV0YWlscy1idG46ZGlzYWJsZWQge1xyXG4gICAgICAgICAgICBvcGFjaXR5OiAwLjY7XHJcbiAgICAgICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNiYWU3ZmY7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIC50aWFvamktc3VibWl0LXNlY3Rpb24ge1xyXG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIH1cclxuXHJcbiAgICAvKiDpgInkurrlvLnnqpfmoLflvI8gLSDkuI7miqXlt6XnlYzpnaLkv53mjIHkuIDoh7QgKi9cclxuICAgIC5vdmVybGF5IHtcclxuICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XHJcbiAgICAgICAgdG9wOiAwO1xyXG4gICAgICAgIGxlZnQ6IDA7XHJcbiAgICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsLjQ1KTtcclxuICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgICAgei1pbmRleDogMTAwMDtcclxuICAgIH1cclxuXHJcbiAgICAudXNlci1zZWxlY3QtcG9wdXAge1xyXG4gICAgICAgIGJhY2tncm91bmQ6ICNmZmY7XHJcbiAgICAgICAgd2lkdGg6IDE2MDBweDtcclxuICAgICAgICBtYXgtd2lkdGg6IDk5dnc7XHJcbiAgICAgICAgbWluLXdpZHRoOiAxMDAwcHg7XHJcbiAgICAgICAgaGVpZ2h0OiBhdXRvO1xyXG4gICAgICAgIG1pbi1oZWlnaHQ6IDUyMHB4O1xyXG4gICAgICAgIHBhZGRpbmc6IDA7XHJcbiAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMzJweDtcclxuICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4O1xyXG4gICAgICAgIGJveC1zaGFkb3c6IDAgOHB4IDMycHggcmdiYSgwLDAsMCwwLjEyKTtcclxuICAgICAgICB6LWluZGV4OiAxMDAxO1xyXG4gICAgfVxyXG5cclxuICAgIC51c2VyLXNlYXJjaC1iYXIge1xyXG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAgICBnYXA6IDE4cHg7XHJcbiAgICAgICAgcGFkZGluZzogMjRweCA2NHB4IDAgNjRweDtcclxuICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmO1xyXG4gICAgICAgIGZsZXgtd3JhcDogd3JhcDtcclxuICAgIH1cclxuXHJcbiAgICAudXNlci1zZWFyY2gtaW5wdXQge1xyXG4gICAgICAgIGZsZXg6IDEgMSAyNjBweDtcclxuICAgICAgICBwYWRkaW5nOiAxNnB4IDIwcHg7XHJcbiAgICAgICAgZm9udC1zaXplOiAyOHB4O1xyXG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNiYmI7XHJcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xyXG4gICAgICAgIG91dGxpbmU6IG5vbmU7XHJcbiAgICAgICAgaGVpZ2h0OiA1NHB4O1xyXG4gICAgfVxyXG5cclxuICAgICAgICAudXNlci1zZWFyY2gtaW5wdXQ6Zm9jdXMge1xyXG4gICAgICAgICAgICBib3JkZXItY29sb3I6ICMwMDdhZmY7XHJcbiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCByZ2JhKDAsMTIyLDI1NSwuMTUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAudXNlci1zZWFyY2gtY2xlYXIge1xyXG4gICAgICAgIHBhZGRpbmc6IDEycHggMjhweDtcclxuICAgICAgICBiYWNrZ3JvdW5kOiAjZmY5ZjQzO1xyXG4gICAgICAgIGNvbG9yOiAjZmZmO1xyXG4gICAgICAgIGJvcmRlcjogbm9uZTtcclxuICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7XHJcbiAgICAgICAgZm9udC1zaXplOiAyNHB4O1xyXG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgIH1cclxuXHJcbiAgICAgICAgLnVzZXItc2VhcmNoLWNsZWFyOmhvdmVyIHtcclxuICAgICAgICAgICAgYmFja2dyb3VuZDogI2ZmODkyMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgLnVzZXItc2VhcmNoLWluZm8ge1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMjJweDtcclxuICAgICAgICBjb2xvcjogIzU1NTtcclxuICAgIH1cclxuXHJcbiAgICAudXNlci1saXN0LXNjcm9sbCB7XHJcbiAgICAgICAgZmxleDogMSAxIGF1dG87XHJcbiAgICAgICAgb3ZlcmZsb3cteTogYXV0bztcclxuICAgICAgICBwYWRkaW5nOiAzMnB4IDY0cHggMCA2NHB4O1xyXG4gICAgfVxyXG5cclxuICAgIC51c2VyLWxpc3QtZ3JpZCB7XHJcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcclxuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpbGwsbWlubWF4KDIwMHB4LDFmcikpO1xyXG4gICAgICAgIGdhcDogMjJweCAyMnB4O1xyXG4gICAgfVxyXG5cclxuICAgIC51c2VyLWxpc3QtYnRuIHtcclxuICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAgICBnYXA6IDJweDtcclxuICAgICAgICBwYWRkaW5nOiAxMHB4IDEwcHg7XHJcbiAgICAgICAgaGVpZ2h0OiAxMDBweDtcclxuICAgICAgICBmb250LXNpemU6IDMwcHg7XHJcbiAgICAgICAgYmFja2dyb3VuZDogIzAwYTJlOTtcclxuICAgICAgICBjb2xvcjogI2ZmZjtcclxuICAgICAgICBib3JkZXI6IG5vbmU7XHJcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xyXG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XHJcbiAgICB9XHJcblxyXG4gICAgICAgIC51c2VyLWxpc3QtYnRuIC51c2VyLWNvZGUge1xyXG4gICAgICAgICAgICBmb250LXdlaWdodDogNzAwO1xyXG4gICAgICAgICAgICBmb250LXNpemU6IDM2cHg7XHJcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAudXNlci1saXN0LWJ0biAudXNlci1uYW1lIHtcclxuICAgICAgICAgICAgZm9udC1zaXplOiAzMnB4O1xyXG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMS4xO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnVzZXItbGlzdC1idG4uc2VsZWN0ZWQge1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMDA3MmM5O1xyXG4gICAgICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggcmdiYSgyNTUsMjU1LDI1NSwuNikgaW5zZXQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAudXNlci1saXN0LWJ0bjpob3ZlciB7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMwMDhlZDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIC5uby11c2VyLXJlc3VsdCB7XHJcbiAgICAgICAgcGFkZGluZzogNDBweCAwO1xyXG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgICAgICBmb250LXNpemU6IDI4cHg7XHJcbiAgICAgICAgY29sb3I6ICM2NjY7XHJcbiAgICB9XHJcblxyXG4gICAgLnVzZXItcG9wdXAtZm9vdGVyIHtcclxuICAgICAgICBmbGV4LXNocmluazogMDtcclxuICAgICAgICBwYWRkaW5nOiAyNHB4IDY0cHggMzJweCA2NHB4O1xyXG4gICAgICAgIGJhY2tncm91bmQ6ICNmZmY7XHJcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgfVxyXG5cclxuICAgIC5jbGVhbi1idG4ge1xyXG4gICAgICAgIHdpZHRoOiAyNCU7XHJcbiAgICAgICAgcGFkZGluZzogMTBweCAwO1xyXG4gICAgICAgIGNvbG9yOiAjZmZmO1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMjBweDtcclxuICAgICAgICBib3JkZXI6IG5vbmU7XHJcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjZ2dztcclxuICAgICAgICBiYWNrZ3JvdW5kOiAjMDA3YWZmO1xyXG4gICAgfVxyXG5cclxuICAgICAgICAuY2xlYW4tYnRuLndpZGUtYnRuIHtcclxuICAgICAgICAgICAgd2lkdGg6IDMwJTtcclxuICAgICAgICAgICAgZm9udC1zaXplOiAyMnB4O1xyXG4gICAgICAgICAgICBwYWRkaW5nOiAxMnB4IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuY2xlYW4tYnRuOmhvdmVyIHtcclxuICAgICAgICAgICAgYmFja2dyb3VuZDogIzAwNjJjOTtcclxuICAgICAgICB9XHJcbjwvc3R5bGU+Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///62\n"); |
| | | eval("/* WEBPACK VAR INJECTION */(function(__f__) {\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ 2);\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ 3));\nvar _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ 6));\nvar _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ 9));\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nvar _default = {\n data: function data() {\n return {\n machineNo: '',\n //机台编码\n workOrderNo: '',\n //工单号\n activeToolNo: '',\n // 当前选中的刀具编号\n pageIndex: 1,\n pageSize: 20,\n //单页显示的刀具数量\n total: 0,\n toolList: [],\n selectedToolNo: '',\n toolName: '',\n toolModel: '',\n showToolDialog: false,\n searchKey: '',\n filteredTools: [],\n useLimitInput: '',\n lifeWarnInput: '',\n // 新增:寿命比预警值原始输入\n toolRecords: [],\n loadingTools: false,\n loadingForm: false,\n submitting: false,\n _searchTimer: null,\n workOrderCurrentCjNum: null,\n // 工单当前数采\n\n // 自动保存相关\n autoSaveTimer: null,\n isDirty: false,\n // 表单是否有未保存变更\n autoSaveIntervalMs: 5 * 60 * 1000,\n // 默认 5 分钟\n autoSaveEnabled: true,\n autoSaveActionName: 'handleUpTool',\n // 自动触发的方法名,可改为自定义保存方法\n\n // 新增:调机相关字段\n isTiaojiUserSelectShow: false,\n // 调机师傅选择弹窗\n tiaojiStaffNo: '',\n // 当前选中的调机师傅(格式: 工号:姓名)\n tiaojiOkQty: '',\n // 调机良品数\n tiaojiBadQty: '',\n // 调机不良品数\n tiaojiUsers: [],\n // 调机师傅列表\n tiaojiUserSearch: '',\n // 搜索关键词\n\n // 新增:报试产数所需字段\n orderId: null,\n // 工单ID\n order: {} // 工单数据\n };\n },\n\n computed: {\n totalPages: function totalPages() {\n return Math.max(1, Math.ceil(this.total / this.pageSize) || 1);\n },\n // 新增:调机师傅显示名称\n tiaojiStaffDisplay: function tiaojiStaffDisplay() {\n if (!this.tiaojiStaffNo) return '';\n var segs = this.tiaojiStaffNo.split(':');\n return segs.length > 1 ? \"\".concat(segs[0], \" \").concat(segs[1]) : this.tiaojiStaffNo;\n },\n // 新增:过滤后的调机师傅列表\n filteredTiaojiUsers: function filteredTiaojiUsers() {\n if (!this.tiaojiUserSearch) return this.tiaojiUsers;\n var kw = this.tiaojiUserSearch.trim().toLowerCase();\n return this.tiaojiUsers.filter(function (u) {\n return u.toLowerCase().includes(kw);\n });\n }\n },\n watch: {\n // 标记脏数据:按需监听字段变化\n selectedToolNo: function selectedToolNo() {\n this.isDirty = true;\n },\n useLimitInput: function useLimitInput() {\n this.isDirty = true;\n },\n lifeWarnInput: function lifeWarnInput() {\n this.isDirty = true;\n },\n toolName: function toolName() {\n this.isDirty = true;\n },\n toolModel: function toolModel() {\n this.isDirty = true;\n }\n },\n methods: {\n //查询当前数采数,作为下刀计数实时显示\n fetchCurrentCjNum: function fetchCurrentCjNum(toolNo) {\n var _this = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {\n var _res$data, res, _ref, _found$CurrentCjNum, found;\n return _regenerator.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n if (_this.machineNo) {\n _context.next = 2;\n break;\n }\n return _context.abrupt(\"return\", null);\n case 2:\n _context.prev = 2;\n _context.next = 5;\n return _this.$post({\n url: '/Womdaa/GetWomdaasByShow',\n data: JSON.stringify({\n machineNo: _this.machineNo\n }),\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n case 5:\n res = _context.sent;\n if (!(res.status === 0 && Array.isArray((_res$data = res.data) === null || _res$data === void 0 ? void 0 : _res$data.tbBillList))) {\n _context.next = 9;\n break;\n }\n found = res.data.tbBillList.find(function (x) {\n return x.cutterId === toolNo || x.cutteR_ID === toolNo;\n });\n return _context.abrupt(\"return\", found ? (_ref = (_found$CurrentCjNum = found.CurrentCjNum) !== null && _found$CurrentCjNum !== void 0 ? _found$CurrentCjNum : found.currentCjNum) !== null && _ref !== void 0 ? _ref : null : null);\n case 9:\n _context.next = 14;\n break;\n case 11:\n _context.prev = 11;\n _context.t0 = _context[\"catch\"](2);\n __f__(\"warn\", '获取currentCjNum失败', _context.t0, \" at components/mold.vue:334\");\n case 14:\n return _context.abrupt(\"return\", null);\n case 15:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee, null, [[2, 11]]);\n }))();\n },\n // 新增:刷新按钮处理方法\n handleRefresh: function handleRefresh() {\n var _this2 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {\n return _regenerator.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n _this2.fetchTools('');\n if (!(_this2.machineNo && _this2.workOrderNo)) {\n _context2.next = 7;\n break;\n }\n _context2.next = 4;\n return _this2.fetchFormData();\n case 4:\n _context2.next = 6;\n return _this2.fetchDefaultToolFromWorkOrder();\n case 6:\n // 刷新后赋值第一行 currentCjNum\n if (_this2.toolRecords.length > 0) {\n _this2.$set(_this2.toolRecords[0], 'currentCjNum', _this2.workOrderCurrentCjNum);\n }\n case 7:\n _this2.$showMessage('刷新完成');\n case 8:\n case \"end\":\n return _context2.stop();\n }\n }\n }, _callee2);\n }))();\n },\n // 自动保存:启动\n startAutoSave: function startAutoSave() {\n var _this3 = this;\n if (!this.autoSaveEnabled) return;\n this.stopAutoSave();\n this.autoSaveTimer = setInterval(function () {\n _this3.autoSaveTick();\n }, this.autoSaveIntervalMs);\n },\n // 自动保存:停止\n stopAutoSave: function stopAutoSave() {\n if (this.autoSaveTimer) {\n clearInterval(this.autoSaveTimer);\n this.autoSaveTimer = null;\n }\n },\n // 自动保存:每次定时执行时的逻辑\n autoSaveTick: function autoSaveTick() {\n var _this4 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3() {\n var fn;\n return _regenerator.default.wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n if (_this4.autoSaveEnabled) {\n _context3.next = 2;\n break;\n }\n return _context3.abrupt(\"return\");\n case 2:\n if (_this4.isDirty) {\n _context3.next = 4;\n break;\n }\n return _context3.abrupt(\"return\");\n case 4:\n if (!(_this4.submitting || _this4.loadingForm)) {\n _context3.next = 6;\n break;\n }\n return _context3.abrupt(\"return\");\n case 6:\n fn = _this4.autoSaveActionName && typeof _this4[_this4.autoSaveActionName] === 'function' ? _this4[_this4.autoSaveActionName] : null;\n if (fn) {\n _context3.next = 10;\n break;\n }\n __f__(\"warn\", '自动保存:未找到方法', _this4.autoSaveActionName, \" at components/mold.vue:377\");\n return _context3.abrupt(\"return\");\n case 10:\n _context3.prev = 10;\n _this4.submitting = true;\n _context3.next = 14;\n return fn.call(_this4);\n case 14:\n // 调用保存方法(例如 handleUpTool)\n // 如果保存成功,清脏标记(保存方法内部若失败没有抛出可保持此方式)\n _this4.isDirty = false;\n _context3.next = 20;\n break;\n case 17:\n _context3.prev = 17;\n _context3.t0 = _context3[\"catch\"](10);\n __f__(\"error\", '自动保存失败:', _context3.t0, \" at components/mold.vue:387\");\n case 20:\n _context3.prev = 20;\n _this4.submitting = false;\n return _context3.finish(20);\n case 23:\n case \"end\":\n return _context3.stop();\n }\n }\n }, _callee3, null, [[10, 17, 20, 23]]);\n }))();\n },\n // 新增:寿命比预警值归一化 (返回 0~1 或 null)\n normalizeLifeWarn: function normalizeLifeWarn(v) {\n if (v == null) return null;\n var raw = String(v).trim().replace(/[%%]/g, '');\n if (raw === '') return null;\n var num = Number(raw);\n if (!isFinite(num) || num <= 0) return null;\n return num > 1 ? num / 100 : num;\n },\n openToolDialog: function openToolDialog() {\n this.showToolDialog = true;\n this.pageIndex = 1;\n this.fetchTools(this.searchKey);\n },\n closeToolDialog: function closeToolDialog() {\n this.showToolDialog = false;\n },\n fetchTools: function fetchTools(searchKey) {\n var _this5 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4() {\n var res, _ref2, _ref3, _ref4, _res$data$total, _res$data2, _res$data3, payload, getField, mapped, totalFromRes;\n return _regenerator.default.wrap(function _callee4$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n _this5.loadingTools = true;\n _context4.prev = 1;\n _context4.next = 4;\n return _this5.$post({\n url: '/MesCutterLedger/QueryTools',\n data: JSON.stringify({\n searchKey: searchKey,\n pageIndex: _this5.pageIndex,\n pageSize: _this5.pageSize\n }),\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n case 4:\n res = _context4.sent;\n if (res.status === 0) {\n payload = Array.isArray(res.data) ? res.data : res.data && res.data.tbBillList ? res.data.tbBillList : res.data && res.data.data ? res.data.data : [];\n getField = function getField(obj) {\n for (var _len = arguments.length, keys = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n keys[_key - 1] = arguments[_key];\n }\n for (var _i = 0, _keys = keys; _i < _keys.length; _i++) {\n var k = _keys[_i];\n if ((obj === null || obj === void 0 ? void 0 : obj[k]) !== undefined && (obj === null || obj === void 0 ? void 0 : obj[k]) !== null) return obj[k];\n }\n return null;\n }; // 这里需要把 lifeWarn 字段也带出来\n mapped = (payload || []).map(function (t) {\n return {\n no: getField(t, 'cutterId', 'CUTTER_ID', 'cutteR_ID', 'daA001', 'no'),\n name: getField(t, 'cutterName', 'CUTTER_NAME', 'cutteR_NAME', 'name'),\n model: getField(t, 'cutterModel', 'CUTTER_MODEL', 'cutteR_MODEL', 'model'),\n lifeWarn: getField(t, 'modlLifeWorning', 'lifeWarn', 'LIFE_WARN', 'lifE_WARN')\n };\n });\n _this5.filteredTools = mapped;\n _this5.toolList = mapped.slice();\n totalFromRes = Number((_ref2 = (_ref3 = (_ref4 = (_res$data$total = (_res$data2 = res.data) === null || _res$data2 === void 0 ? void 0 : _res$data2.total) !== null && _res$data$total !== void 0 ? _res$data$total : (_res$data3 = res.data) === null || _res$data3 === void 0 ? void 0 : _res$data3.totalCount) !== null && _ref4 !== void 0 ? _ref4 : res.total) !== null && _ref3 !== void 0 ? _ref3 : res.totalCount) !== null && _ref2 !== void 0 ? _ref2 : mapped.length);\n _this5.total = Number.isFinite(totalFromRes) ? totalFromRes : mapped.length;\n if (_this5.pageIndex > _this5.totalPages) {\n _this5.pageIndex = _this5.totalPages;\n }\n } else {\n _this5.$showMessage(res.message || '查询失败');\n }\n _context4.next = 12;\n break;\n case 8:\n _context4.prev = 8;\n _context4.t0 = _context4[\"catch\"](1);\n __f__(\"error\", 'fetchTools 错误:', _context4.t0, \" at components/mold.vue:456\");\n _this5.$showMessage('查询刀具失败,请检查网络或接口');\n case 12:\n _context4.prev = 12;\n _this5.loadingTools = false;\n return _context4.finish(12);\n case 15:\n case \"end\":\n return _context4.stop();\n }\n }\n }, _callee4, null, [[1, 8, 12, 15]]);\n }))();\n },\n prevPage: function prevPage() {\n var _this6 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5() {\n return _regenerator.default.wrap(function _callee5$(_context5) {\n while (1) {\n switch (_context5.prev = _context5.next) {\n case 0:\n if (!(_this6.pageIndex > 1)) {\n _context5.next = 4;\n break;\n }\n _this6.pageIndex--;\n _context5.next = 4;\n return _this6.fetchTools(_this6.searchKey);\n case 4:\n case \"end\":\n return _context5.stop();\n }\n }\n }, _callee5);\n }))();\n },\n nextPage: function nextPage() {\n var _this7 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6() {\n return _regenerator.default.wrap(function _callee6$(_context6) {\n while (1) {\n switch (_context6.prev = _context6.next) {\n case 0:\n if (!(_this7.pageIndex < _this7.totalPages)) {\n _context6.next = 4;\n break;\n }\n _this7.pageIndex++;\n _context6.next = 4;\n return _this7.fetchTools(_this7.searchKey);\n case 4:\n case \"end\":\n return _context6.stop();\n }\n }\n }, _callee6);\n }))();\n },\n onSearchKeyInput: function onSearchKeyInput() {\n var _this8 = this;\n clearTimeout(this._searchTimer);\n this._searchTimer = setTimeout(function () {\n _this8.searchTool();\n }, 300);\n },\n searchTool: function searchTool() {\n var _this9 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee7() {\n return _regenerator.default.wrap(function _callee7$(_context7) {\n while (1) {\n switch (_context7.prev = _context7.next) {\n case 0:\n _this9.pageIndex = 1;\n _context7.next = 3;\n return _this9.fetchTools(_this9.searchKey);\n case 3:\n case \"end\":\n return _context7.stop();\n }\n }\n }, _callee7);\n }))();\n },\n selectTool: function selectTool(tool) {\n this.selectedToolNo = tool.no;\n this.toolName = tool.name;\n this.toolModel = tool.model;\n this.activeToolNo = tool.no;\n // 新增:带出寿命比预警值\n if (tool.lifeWarn !== undefined && tool.lifeWarn !== null) {\n // 格式化为百分比字符串\n var warn = Number(tool.lifeWarn);\n this.lifeWarnInput = warn <= 1 ? (warn * 100).toFixed(0) : warn.toFixed(0);\n } else {\n this.lifeWarnInput = '';\n }\n },\n confirmTool: function confirmTool() {\n this.showToolDialog = false;\n },\n setUseLimit: function setUseLimit() {\n var _this10 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee8() {\n var v;\n return _regenerator.default.wrap(function _callee8$(_context8) {\n while (1) {\n switch (_context8.prev = _context8.next) {\n case 0:\n if (_this10.selectedToolNo) {\n _context8.next = 3;\n break;\n }\n _this10.$showMessage('请选择刀具后再设置上限');\n return _context8.abrupt(\"return\");\n case 3:\n v = Number(_this10.useLimitInput);\n if (!(isNaN(v) || v <= 0)) {\n _context8.next = 7;\n break;\n }\n _this10.$showMessage('请输入有效的使用上限');\n return _context8.abrupt(\"return\");\n case 7:\n _this10.toolRecords = _this10.toolRecords.map(function (r) {\n if (r.no === _this10.selectedToolNo) {\n return _objectSpread(_objectSpread({}, r), {}, {\n useLimit: v\n });\n }\n return r;\n });\n _this10.toolList = _this10.toolList.map(function (t) {\n return t.no === _this10.selectedToolNo ? _objectSpread(_objectSpread({}, t), {}, {\n useLimit: v\n }) : t;\n });\n _this10.$showMessage('使用上限已设置(仅前端显示)');\n case 10:\n case \"end\":\n return _context8.stop();\n }\n }\n }, _callee8);\n }))();\n },\n // 上刀时传递 sdjs = 工单 currentCjNum\n handleUpTool: function handleUpTool() {\n var _this11 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9() {\n var useLimit, sdjs, lifeWarnRatio, payload, res;\n return _regenerator.default.wrap(function _callee9$(_context9) {\n while (1) {\n switch (_context9.prev = _context9.next) {\n case 0:\n if (_this11.workOrderNo) {\n _context9.next = 3;\n break;\n }\n _this11.$showMessage('工单号不能为空');\n return _context9.abrupt(\"return\");\n case 3:\n if (_this11.machineNo) {\n _context9.next = 6;\n break;\n }\n _this11.$showMessage('机台号不能为空');\n return _context9.abrupt(\"return\");\n case 6:\n if (_this11.selectedToolNo) {\n _context9.next = 9;\n break;\n }\n _this11.$showMessage('刀具编号不能为空');\n return _context9.abrupt(\"return\");\n case 9:\n if (_this11.useLimitInput) {\n _context9.next = 12;\n break;\n }\n _this11.$showMessage('使用上限不能为空');\n return _context9.abrupt(\"return\");\n case 12:\n useLimit = Number(_this11.useLimitInput);\n if (!(isNaN(useLimit) || useLimit <= 0)) {\n _context9.next = 16;\n break;\n }\n _this11.$showMessage('请输入有效的使用上限');\n return _context9.abrupt(\"return\");\n case 16:\n // sdjs 使用工单 currentCjNum\n sdjs = _this11.workOrderCurrentCjNum != null ? Number(_this11.workOrderCurrentCjNum) : null;\n lifeWarnRatio = _this11.normalizeLifeWarn(_this11.lifeWarnInput);\n payload = {\n workOrderNo: _this11.workOrderNo,\n machineNo: _this11.machineNo,\n toolNo: _this11.selectedToolNo,\n type: '上机',\n useLimit: useLimit,\n sdjs: sdjs,\n // 上刀计数(工单当前数采)\n modlLifeWorning: lifeWarnRatio // 新增\n };\n _context9.prev = 19;\n _this11.submitting = true;\n _context9.next = 23;\n return _this11.$post({\n url: '/MesCutterLedger/SubmitToolAction',\n data: JSON.stringify(payload),\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n case 23:\n res = _context9.sent;\n if (!(res.data && res.data.outSum === \"0\")) {\n _context9.next = 29;\n break;\n }\n uni.showToast({\n title: res.data.outMsg || '',\n icon: 'error'\n });\n return _context9.abrupt(\"return\");\n case 29:\n if (res.data && res.data.outMsg) {\n uni.showToast({\n title: res.data.outMsg,\n icon: 'none'\n });\n }\n case 30:\n if (!(res.status === 0)) {\n _context9.next = 33;\n break;\n }\n _context9.next = 33;\n return _this11.fetchFormData();\n case 33:\n _context9.next = 40;\n break;\n case 35:\n _context9.prev = 35;\n _context9.t0 = _context9[\"catch\"](19);\n __f__(\"error\", _context9.t0, \" at components/mold.vue:566\");\n _this11.$showMessage('上刀提交失败,请检查网络');\n throw _context9.t0;\n case 40:\n _context9.prev = 40;\n _this11.submitting = false;\n return _context9.finish(40);\n case 43:\n case \"end\":\n return _context9.stop();\n }\n }\n }, _callee9, null, [[19, 35, 40, 43]]);\n }))();\n },\n // 下刀时传递 xdjs = 工单 currentCjNum\n handleDownTool: function handleDownTool() {\n var _this12 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee10() {\n var useLimit, xdjs, lifeWarnRatio, payload, res;\n return _regenerator.default.wrap(function _callee10$(_context10) {\n while (1) {\n switch (_context10.prev = _context10.next) {\n case 0:\n if (_this12.workOrderNo) {\n _context10.next = 3;\n break;\n }\n _this12.$showMessage('工单号不能为空');\n return _context10.abrupt(\"return\");\n case 3:\n if (_this12.machineNo) {\n _context10.next = 6;\n break;\n }\n _this12.$showMessage('机台号不能为空');\n return _context10.abrupt(\"return\");\n case 6:\n if (_this12.selectedToolNo) {\n _context10.next = 9;\n break;\n }\n _this12.$showMessage('刀具编号不能为空');\n return _context10.abrupt(\"return\");\n case 9:\n //下刀不强制录入使用上限\n //if (!this.useLimitInput) { this.$showMessage('使用上限不能为空'); return; }\n useLimit = Number(_this12.useLimitInput); //if (isNaN(useLimit) || useLimit <= 0) { this.$showMessage('请输入有效的使用上限'); return; }\n // 下刀计数同样取工单最新采集数\n xdjs = _this12.workOrderCurrentCjNum != null ? Number(_this12.workOrderCurrentCjNum) : null;\n lifeWarnRatio = _this12.normalizeLifeWarn(_this12.lifeWarnInput);\n payload = {\n workOrderNo: _this12.workOrderNo,\n machineNo: _this12.machineNo,\n toolNo: _this12.selectedToolNo,\n type: '下机',\n useLimit: useLimit,\n xdjs: xdjs,\n // 下刀计数\n modlLifeWorning: lifeWarnRatio // 新增\n };\n _context10.prev = 13;\n _this12.submitting = true;\n _context10.next = 17;\n return _this12.$post({\n url: '/MesCutterLedger/SubmitToolAction',\n data: JSON.stringify(payload),\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n case 17:\n res = _context10.sent;\n if (!(res.data && res.data.outSum === \"0\")) {\n _context10.next = 23;\n break;\n }\n uni.showToast({\n title: res.data.outMsg || '',\n icon: 'error'\n });\n return _context10.abrupt(\"return\");\n case 23:\n if (res.data && res.data.outMsg) {\n uni.showToast({\n title: res.data.outMsg,\n icon: 'none'\n });\n }\n case 24:\n if (!(res.status === 0)) {\n _context10.next = 27;\n break;\n }\n _context10.next = 27;\n return _this12.fetchFormData();\n case 27:\n _context10.next = 34;\n break;\n case 29:\n _context10.prev = 29;\n _context10.t0 = _context10[\"catch\"](13);\n __f__(\"error\", _context10.t0, \" at components/mold.vue:619\");\n _this12.$showMessage('下刀提交失败,请检查网络');\n throw _context10.t0;\n case 34:\n _context10.prev = 34;\n _this12.submitting = false;\n return _context10.finish(34);\n case 37:\n case \"end\":\n return _context10.stop();\n }\n }\n }, _callee10, null, [[13, 29, 34, 37]]);\n }))();\n },\n cancel: function cancel() {\n this.selectedToolNo = '';\n this.toolName = '';\n this.toolModel = '';\n this.useLimitInput = '';\n this.lifeWarnInput = ''; // 新增:清空\n this.isDirty = false;\n },\n fetchFormData: function fetchFormData() {\n var _this13 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee11() {\n var payload, _ref5, _ref6, _ref7, _res$data$total2, _res$data4, _res$data5, res, list, getField, mapped, totalFromRes;\n return _regenerator.default.wrap(function _callee11$(_context11) {\n while (1) {\n switch (_context11.prev = _context11.next) {\n case 0:\n if (!(!_this13.workOrderNo || !_this13.machineNo)) {\n _context11.next = 3;\n break;\n }\n __f__(\"warn\", '工单号或机台号为空,跳过获取表单数据', \" at components/mold.vue:636\");\n return _context11.abrupt(\"return\");\n case 3:\n _this13.loadingForm = true;\n payload = {\n workOrderNo: _this13.workOrderNo.trim(),\n machineNo: _this13.machineNo.trim()\n };\n _context11.prev = 5;\n _context11.next = 8;\n return _this13.$post({\n url: '/MesCutterLedger/GetFormData',\n data: JSON.stringify(payload),\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n case 8:\n res = _context11.sent;\n if (!(res.status !== 0)) {\n _context11.next = 13;\n break;\n }\n _this13.$showMessage(res.message || '获取表单数据失败');\n _this13.toolRecords = [];\n return _context11.abrupt(\"return\");\n case 13:\n list = Array.isArray(res.data) ? res.data : res.data && res.data.tbBillList ? res.data.tbBillList : res.data && res.data.data ? res.data.data : [];\n getField = function getField(obj) {\n for (var _len2 = arguments.length, keys = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n keys[_key2 - 1] = arguments[_key2];\n }\n for (var _i2 = 0, _keys2 = keys; _i2 < _keys2.length; _i2++) {\n var k = _keys2[_i2];\n if ((obj === null || obj === void 0 ? void 0 : obj[k]) !== undefined && (obj === null || obj === void 0 ? void 0 : obj[k]) !== null) return obj[k];\n }\n return null;\n };\n mapped = (list || []).map(function (t) {\n var _getField, _getField2;\n var upTimeRaw = getField(t, 'uP_TIME', 'UP_TIME', 'uPTime', 'UPTIME', 'UpTime');\n var downTimeRaw = getField(t, 'dowN_TIME', 'DOWN_TIME', 'downTime', 'DOWNTIME');\n var lifeWarnRaw = getField(t, 'lifE_WARN', 'LIFE_WARN', 'lifeWarn', 'LIFEWARN');\n var currentCjNum = getField(t, 'currentCjNum', 'CURRENTCJNUM', 'CurrentCjNum');\n var useCount = getField(t, 'usE_COUNT', 'USE_COUNT', 'useCount');\n var useLimit = getField(t, 'usE_LIMIT', 'USE_LIMIT', 'useLimit');\n var percent = '';\n if (useCount != null && useLimit != null && !isNaN(useCount) && !isNaN(useLimit) && Number(useLimit) > 0) {\n percent = (Number(useCount) / Number(useLimit) * 100).toFixed(0) + '%';\n }\n var parseNumber = function parseNumber(v) {\n if (v === null || v === undefined || v === '') return null;\n var s = String(v).replace(/[,%%]/g, '').trim();\n var n = parseFloat(s);\n return Number.isFinite(n) ? n : null;\n };\n var formatPercent = function formatPercent(n) {\n if (n === null || n === undefined || isNaN(n)) return '';\n if (n <= 1) return \"\".concat((n * 100).toFixed(0), \"%\");\n return \"\".concat(Number(n).toFixed(0), \"%\");\n };\n var lifeWarnNum = parseNumber(lifeWarnRaw);\n var warnStatus = getField(t, 'status', 'STATUS') || '';\n if (lifeWarnNum !== null && useCount != null && useLimit != null && !isNaN(useCount) && !isNaN(useLimit) && Number(useLimit) > 0) {\n var percentNum = Number(useCount) / Number(useLimit);\n warnStatus = percentNum >= lifeWarnNum ? '预警' : '正常';\n } else {\n warnStatus = warnStatus || '未知';\n }\n return {\n id: getField(t, 'id', 'ID') || \"\".concat(getField(t, 'cutteR_ID') || getField(t, 'CUTTER_ID') || '', \"-\").concat(upTimeRaw || ''),\n no: getField(t, 'cutteR_ID', 'CUTTER_ID', 'cutterId', 'no') || '',\n name: getField(t, 'cutteR_NAME', 'CUTTER_NAME', 'cutterName', 'name') || '',\n upTime: _this13.formatDateTime(upTimeRaw),\n upCount: (_getField = getField(t, 'uP_COUNT', 'UP_COUNT', 'upCount')) !== null && _getField !== void 0 ? _getField : '',\n downTime: _this13.formatDateTime(downTimeRaw),\n downCount: (_getField2 = getField(t, 'dowN_COUNT', 'DOWN_COUNT', 'downCount')) !== null && _getField2 !== void 0 ? _getField2 : '',\n useCount: useCount !== null && useCount !== void 0 ? useCount : '',\n useLimit: useLimit !== null && useLimit !== void 0 ? useLimit : '',\n lifePercent: percent,\n lifeWarn: formatPercent(lifeWarnNum),\n warnStatus: warnStatus,\n currentCjNum: currentCjNum\n };\n }); // 新增:按上刀时间降序排序(越晚的越上面)\n mapped.sort(function (a, b) {\n // 时间格式如 \"10-24 16:03\",转为 Date 对象比较\n var parse = function parse(s) {\n if (!s) return 0;\n // 补年份,假设都是今年\n var year = new Date().getFullYear();\n return new Date(\"\".concat(year, \"-\").concat(s.replace(/-/g, '-'), \":00\")).getTime();\n };\n return parse(b.upTime) - parse(a.upTime); // 注意这里顺序反过来\n });\n\n _this13.toolRecords = mapped;\n totalFromRes = Number((_ref5 = (_ref6 = (_ref7 = (_res$data$total2 = (_res$data4 = res.data) === null || _res$data4 === void 0 ? void 0 : _res$data4.total) !== null && _res$data$total2 !== void 0 ? _res$data$total2 : (_res$data5 = res.data) === null || _res$data5 === void 0 ? void 0 : _res$data5.totalCount) !== null && _ref7 !== void 0 ? _ref7 : res.total) !== null && _ref6 !== void 0 ? _ref6 : res.totalCount) !== null && _ref5 !== void 0 ? _ref5 : mapped.length);\n _this13.total = Number.isFinite(totalFromRes) ? totalFromRes : mapped.length;\n _context11.next = 27;\n break;\n case 22:\n _context11.prev = 22;\n _context11.t0 = _context11[\"catch\"](5);\n __f__(\"error\", '获取表单数据错误:', _context11.t0, \" at components/mold.vue:735\");\n _this13.$showMessage('获取数据失败,请检查网络连接');\n _this13.toolRecords = [];\n case 27:\n _context11.prev = 27;\n _this13.loadingForm = false;\n return _context11.finish(27);\n case 30:\n case \"end\":\n return _context11.stop();\n }\n }\n }, _callee11, null, [[5, 22, 27, 30]]);\n }))();\n },\n // 自动带出工单刀具信息,并获取工单最新采集数\n fetchDefaultToolFromWorkOrder: function fetchDefaultToolFromWorkOrder() {\n var _this14 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee12() {\n var _res$data6, res, _ref8, _order$CurrentCjNum, order, warn;\n return _regenerator.default.wrap(function _callee12$(_context12) {\n while (1) {\n switch (_context12.prev = _context12.next) {\n case 0:\n if (_this14.machineNo) {\n _context12.next = 2;\n break;\n }\n return _context12.abrupt(\"return\");\n case 2:\n _context12.prev = 2;\n _context12.next = 5;\n return _this14.$post({\n url: '/Womdaa/GetWomdaasByShow',\n data: JSON.stringify({\n machineNo: _this14.machineNo\n }),\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n case 5:\n res = _context12.sent;\n if (res.status === 0 && Array.isArray((_res$data6 = res.data) === null || _res$data6 === void 0 ? void 0 : _res$data6.tbBillList) && res.data.tbBillList.length > 0) {\n order = res.data.tbBillList[0]; // 新增:保存工单数据,用于报试产数\n _this14.order = order;\n _this14.orderId = order.id || order.ID || order.orderId || null;\n _this14.selectedToolNo = order.cutterId || order.cutteR_ID || '';\n _this14.toolName = order.cutterName || order.cutteR_NAME || '';\n _this14.toolModel = order.cutterModel || order.cutteR_MODEL || '';\n // 关键:获取工单最新采集数\n _this14.workOrderCurrentCjNum = (_ref8 = (_order$CurrentCjNum = order.CurrentCjNum) !== null && _order$CurrentCjNum !== void 0 ? _order$CurrentCjNum : order.currentCjNum) !== null && _ref8 !== void 0 ? _ref8 : null;\n // 新增:自动填充寿命比预警值\n if (order.modlLifeWorning !== undefined && order.modlLifeWorning !== null) {\n warn = Number(order.modlLifeWorning);\n _this14.lifeWarnInput = warn <= 1 ? (warn * 100).toFixed(0) : warn.toFixed(0);\n } else {\n _this14.lifeWarnInput = '';\n }\n } else {\n _this14.workOrderCurrentCjNum = null;\n _this14.order = {};\n _this14.orderId = null;\n }\n _context12.next = 15;\n break;\n case 9:\n _context12.prev = 9;\n _context12.t0 = _context12[\"catch\"](2);\n __f__(\"warn\", '自动带出工单刀具失败', _context12.t0, \" at components/mold.vue:776\");\n _this14.workOrderCurrentCjNum = null;\n _this14.order = {};\n _this14.orderId = null;\n case 15:\n case \"end\":\n return _context12.stop();\n }\n }\n }, _callee12, null, [[2, 9]]);\n }))();\n },\n formatDateTime: function formatDateTime(dateTimeStr) {\n if (!dateTimeStr) return '';\n try {\n var s = String(dateTimeStr).trim();\n if (/^\\d{10}$/.test(s)) {\n var d = new Date(Number(s) * 1000);\n return \"\".concat(d.getMonth() + 1, \"-\").concat(d.getDate(), \" \").concat(d.getHours(), \":\").concat(String(d.getMinutes()).padStart(2, '0'));\n }\n if (/^\\d{13}$/.test(s)) {\n var _d = new Date(Number(s));\n return \"\".concat(_d.getMonth() + 1, \"-\").concat(_d.getDate(), \" \").concat(_d.getHours(), \":\").concat(String(_d.getMinutes()).padStart(2, '0'));\n }\n var date = new Date(dateTimeStr);\n if (!isNaN(date.getTime())) {\n return \"\".concat(date.getMonth() + 1, \"-\").concat(date.getDate(), \" \").concat(date.getHours(), \":\").concat(String(date.getMinutes()).padStart(2, '0'));\n }\n var match = String(dateTimeStr).match(/(\\d{1,4}[-\\/]\\d{1,2}[-\\/]\\d{1,2}).*?(\\d{1,2}:\\d{2})/);\n if (match) return \"\".concat(match[1].replace(/-/g, '/').replace(/^\\d{4}\\//, function (m) {\n return m;\n }), \" \").concat(match[2]);\n return String(dateTimeStr);\n } catch (_unused) {\n return String(dateTimeStr);\n }\n },\n // 新增:选择调机师傅\n selectTiaojiUser: function selectTiaojiUser(u) {\n this.tiaojiStaffNo = u;\n this.isTiaojiUserSelectShow = false;\n this.tiaojiUserSearch = '';\n },\n // 新增:送检呼叫 + 报试产数\n handleInspectionCall: function handleInspectionCall() {\n var _this15 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee13() {\n var _this15$order;\n var okQty, badQty, staffNo, currentCjNum, payload, res;\n return _regenerator.default.wrap(function _callee13$(_context13) {\n while (1) {\n switch (_context13.prev = _context13.next) {\n case 0:\n if (_this15.tiaojiStaffNo) {\n _context13.next = 3;\n break;\n }\n _this15.$showMessage('请选择调机师傅');\n return _context13.abrupt(\"return\");\n case 3:\n okQty = Number(_this15.tiaojiOkQty);\n badQty = Number(_this15.tiaojiBadQty);\n if (!(isNaN(okQty) || okQty < 0)) {\n _context13.next = 8;\n break;\n }\n _this15.$showMessage('请输入有效的调机良品数');\n return _context13.abrupt(\"return\");\n case 8:\n if (!(isNaN(badQty) || badQty < 0)) {\n _context13.next = 11;\n break;\n }\n _this15.$showMessage('请输入有效的调机不良品数');\n return _context13.abrupt(\"return\");\n case 11:\n staffNo = _this15.tiaojiStaffNo.split(':')[0];\n currentCjNum = ((_this15$order = _this15.order) === null || _this15$order === void 0 ? void 0 : _this15$order.currentCjNum) || 0; // 调用报试产数接口(使用报工界面的接口)\n payload = {\n orderNo: _this15.workOrderNo,\n orderId: _this15.orderId,\n // 需要从工单数据中获取\n bf: badQty,\n // bf传递不良品数\n staffNo: staffNo,\n initCjNum: currentCjNum - badQty - okQty,\n // initCjNum = currentCjNum - bf - 良品数\n currentCjNum: currentCjNum,\n type: 'tiaoji',\n // 标识为调机报工\n tiaojiOkQty: okQty,\n // 新增:良品数\n tiaojiBadQty: badQty // 新增:不良品数\n };\n _context13.prev = 14;\n _this15.submitting = true;\n // 调用报工界面的报试产数接口\n _context13.next = 18;\n return _this15.$post({\n url: '/MesInvItemBarcodes/AddBFToBarcodes',\n data: payload\n });\n case 18:\n res = _context13.sent;\n if (!(res.status == 1)) {\n _context13.next = 22;\n break;\n }\n _this15.$showMessage(res.message);\n return _context13.abrupt(\"return\");\n case 22:\n _this15.$showMessage('调机报工成功');\n // 清空输入\n _this15.tiaojiOkQty = '';\n _this15.tiaojiBadQty = '';\n // 刷新数据\n _context13.next = 27;\n return _this15.fetchFormData();\n case 27:\n _context13.next = 29;\n return _this15.fetchDefaultToolFromWorkOrder();\n case 29:\n _context13.next = 31;\n return _this15.autoHandleMachineInspection();\n case 31:\n _context13.next = 37;\n break;\n case 33:\n _context13.prev = 33;\n _context13.t0 = _context13[\"catch\"](14);\n __f__(\"error\", '调机报工错误:', _context13.t0, \" at components/mold.vue:874\");\n _this15.$showMessage('调机报工失败,请检查网络');\n case 37:\n _context13.prev = 37;\n _this15.submitting = false;\n return _context13.finish(37);\n case 40:\n case \"end\":\n return _context13.stop();\n }\n }\n }, _callee13, null, [[14, 33, 37, 40]]);\n }))();\n },\n // 新增:自动处理调机送检界面的按钮逻辑\n autoHandleMachineInspection: function autoHandleMachineInspection() {\n var _this16 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee14() {\n var statusRes, statusForm, maStartTime, maShoutTime, maEndTime, needSave, updateData, actions, saveRes, successMsg, failMsg;\n return _regenerator.default.wrap(function _callee14$(_context14) {\n while (1) {\n switch (_context14.prev = _context14.next) {\n case 0:\n _context14.prev = 0;\n _context14.next = 3;\n return _this16.$post({\n url: '/MesOrderSta/FindByOrderNo',\n data: {\n orderId: _this16.orderId,\n orderNo: _this16.workOrderNo\n }\n });\n case 3:\n statusRes = _context14.sent;\n if (!(!statusRes || !statusRes.data || !statusRes.data.tbBillList)) {\n _context14.next = 8;\n break;\n }\n __f__(\"error\", '获取工单状态失败', \" at components/mold.vue:894\");\n _this16.$showMessage('获取工单状态失败');\n return _context14.abrupt(\"return\");\n case 8:\n statusForm = statusRes.data.tbBillList;\n maStartTime = statusForm.maStartTime;\n maShoutTime = statusForm.maShoutTime;\n maEndTime = statusForm.maEndTime; // 2. 准备需要更新的时间数据\n needSave = false;\n updateData = {\n id: statusForm.id,\n orderId: _this16.orderId,\n machineNo: _this16.machineNo,\n flag: -1\n }; // 记录哪些操作被执行了\n actions = []; // 3. 从上到下根据显示框里是否有时间依次设置\n // 如果调机开始时间为空,设置调机开始时间\n if (!maStartTime) {\n updateData.maStartTime = _this16.$getDate('yyyy-mm-dd hh24:mi:ss');\n updateData.flag = -1; // 调机开始的flag=-1\n needSave = true;\n actions.push('调机开始');\n } else {\n updateData.maStartTime = maStartTime;\n }\n\n // 如果送检呼叫时间为空,设置送检呼叫时间\n if (!maShoutTime) {\n updateData.maShoutTime = _this16.$getDate('yyyy-mm-dd hh24:mi:ss');\n updateData.flag = 1; // 首次送检呼叫的flag=1\n needSave = true;\n actions.push('送检呼叫');\n } else {\n updateData.maShoutTime = maShoutTime;\n }\n\n // 调机完成时间保持不变\n updateData.maEndTime = maEndTime || '';\n\n // 4. 如果有需要更新的时间,调用保存接口\n if (!needSave) {\n _context14.next = 25;\n break;\n }\n _context14.next = 21;\n return _this16.$post({\n url: '/MesOrderSta/ChangeMachineTime',\n data: updateData\n });\n case 21:\n saveRes = _context14.sent;\n if (saveRes && saveRes.data && saveRes.data.tbBillList) {\n successMsg = actions.join('、') + '成功';\n _this16.$showMessage(successMsg);\n __f__(\"log\", '调机送检界面时间自动更新成功:', actions, \" at components/mold.vue:950\");\n } else {\n failMsg = actions.join('、') + '失败';\n _this16.$showMessage(failMsg);\n __f__(\"error\", '调机送检界面时间自动更新失败', \" at components/mold.vue:954\");\n }\n _context14.next = 27;\n break;\n case 25:\n // 所有时间都已存在,无需更新\n _this16.$showMessage('调机开始和送检呼叫已完成');\n __f__(\"log\", '调机开始和送检呼叫时间已存在,无需更新', \" at components/mold.vue:959\");\n case 27:\n _context14.next = 33;\n break;\n case 29:\n _context14.prev = 29;\n _context14.t0 = _context14[\"catch\"](0);\n __f__(\"error\", '自动处理调机送检界面失败:', _context14.t0, \" at components/mold.vue:962\");\n _this16.$showMessage('自动处理调机送检失败');\n // 不中断主流程,只记录错误\n case 33:\n case \"end\":\n return _context14.stop();\n }\n }\n }, _callee14, null, [[0, 29]]);\n }))();\n },\n // 新增:获取调机师傅列表\n fetchTiaojiStaff: function fetchTiaojiStaff() {\n var _this17 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee15() {\n var res, staff;\n return _regenerator.default.wrap(function _callee15$(_context15) {\n while (1) {\n switch (_context15.prev = _context15.next) {\n case 0:\n _context15.prev = 0;\n _context15.next = 3;\n return _this17.$post({\n url: '/MesStaff/GetAllXS0101BYtj' // 与报工界面使用相同接口\n });\n case 3:\n res = _context15.sent;\n if (res.status === 0 && res.data && res.data.tbBillList) {\n staff = res.data.tbBillList;\n _this17.tiaojiUsers = staff.map(function (s) {\n return s.staffNo + ':' + s.staffName;\n });\n }\n _context15.next = 10;\n break;\n case 7:\n _context15.prev = 7;\n _context15.t0 = _context15[\"catch\"](0);\n __f__(\"error\", '获取调机师傅列表失败:', _context15.t0, \" at components/mold.vue:979\");\n case 10:\n case \"end\":\n return _context15.stop();\n }\n }\n }, _callee15, null, [[0, 7]]);\n }))();\n }\n },\n mounted: function mounted() {\n var _this18 = this;\n this.fetchTools('');\n this.machineNo = uni.getStorageSync('machineNo') || '';\n this.workOrderNo = uni.getStorageSync('daa001') || '';\n\n // 新增:获取调机师傅列表\n this.fetchTiaojiStaff();\n if (this.machineNo && this.workOrderNo) {\n this.fetchFormData().then( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee16() {\n return _regenerator.default.wrap(function _callee16$(_context16) {\n while (1) {\n switch (_context16.prev = _context16.next) {\n case 0:\n _context16.next = 2;\n return _this18.fetchDefaultToolFromWorkOrder();\n case 2:\n // 进入页面时赋值第一行 currentCjNum\n if (_this18.toolRecords.length > 0) {\n _this18.$set(_this18.toolRecords[0], 'currentCjNum', _this18.workOrderCurrentCjNum);\n }\n case 3:\n case \"end\":\n return _context16.stop();\n }\n }\n }, _callee16);\n })));\n } else {\n __f__(\"warn\", '机台号或工单号为空,无法获取表单数据', \" at components/mold.vue:1000\");\n }\n\n // 启动自动保存定时器\n //this.startAutoSave();\n },\n beforeDestroy: function beforeDestroy() {\n // 清理定时器,防止内存泄漏\n this.stopAutoSave();\n }\n};\nexports.default = _default;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 1)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vY29tcG9uZW50cy9tb2xkLnZ1ZSJdLCJuYW1lcyI6WyJkYXRhIiwibWFjaGluZU5vIiwid29ya09yZGVyTm8iLCJhY3RpdmVUb29sTm8iLCJwYWdlSW5kZXgiLCJwYWdlU2l6ZSIsInRvdGFsIiwidG9vbExpc3QiLCJzZWxlY3RlZFRvb2xObyIsInRvb2xOYW1lIiwidG9vbE1vZGVsIiwic2hvd1Rvb2xEaWFsb2ciLCJzZWFyY2hLZXkiLCJmaWx0ZXJlZFRvb2xzIiwidXNlTGltaXRJbnB1dCIsImxpZmVXYXJuSW5wdXQiLCJ0b29sUmVjb3JkcyIsImxvYWRpbmdUb29scyIsImxvYWRpbmdGb3JtIiwic3VibWl0dGluZyIsIl9zZWFyY2hUaW1lciIsIndvcmtPcmRlckN1cnJlbnRDak51bSIsImF1dG9TYXZlVGltZXIiLCJpc0RpcnR5IiwiYXV0b1NhdmVJbnRlcnZhbE1zIiwiYXV0b1NhdmVFbmFibGVkIiwiYXV0b1NhdmVBY3Rpb25OYW1lIiwiaXNUaWFvamlVc2VyU2VsZWN0U2hvdyIsInRpYW9qaVN0YWZmTm8iLCJ0aWFvamlPa1F0eSIsInRpYW9qaUJhZFF0eSIsInRpYW9qaVVzZXJzIiwidGlhb2ppVXNlclNlYXJjaCIsIm9yZGVySWQiLCJvcmRlciIsImNvbXB1dGVkIiwidG90YWxQYWdlcyIsInRpYW9qaVN0YWZmRGlzcGxheSIsImZpbHRlcmVkVGlhb2ppVXNlcnMiLCJ3YXRjaCIsIm1ldGhvZHMiLCJmZXRjaEN1cnJlbnRDak51bSIsInVybCIsImhlYWRlcnMiLCJyZXMiLCJmb3VuZCIsIngiLCJoYW5kbGVSZWZyZXNoIiwic3RhcnRBdXRvU2F2ZSIsInN0b3BBdXRvU2F2ZSIsImNsZWFySW50ZXJ2YWwiLCJhdXRvU2F2ZVRpY2siLCJmbiIsIm5vcm1hbGl6ZUxpZmVXYXJuIiwib3BlblRvb2xEaWFsb2ciLCJjbG9zZVRvb2xEaWFsb2ciLCJmZXRjaFRvb2xzIiwicGF5bG9hZCIsImdldEZpZWxkIiwia2V5cyIsIm1hcHBlZCIsIm5vIiwibmFtZSIsIm1vZGVsIiwibGlmZVdhcm4iLCJ0b3RhbEZyb21SZXMiLCJwcmV2UGFnZSIsIm5leHRQYWdlIiwib25TZWFyY2hLZXlJbnB1dCIsImNsZWFyVGltZW91dCIsInNlYXJjaFRvb2wiLCJzZWxlY3RUb29sIiwiY29uZmlybVRvb2wiLCJzZXRVc2VMaW1pdCIsInYiLCJpc05hTiIsInVzZUxpbWl0IiwiaGFuZGxlVXBUb29sIiwic2RqcyIsImxpZmVXYXJuUmF0aW8iLCJ0b29sTm8iLCJ0eXBlIiwibW9kbExpZmVXb3JuaW5nIiwidW5pIiwidGl0bGUiLCJpY29uIiwiaGFuZGxlRG93blRvb2wiLCJ4ZGpzIiwiY2FuY2VsIiwiZmV0Y2hGb3JtRGF0YSIsImxpc3QiLCJwZXJjZW50Iiwid2FyblN0YXR1cyIsImlkIiwidXBUaW1lIiwidXBDb3VudCIsImRvd25UaW1lIiwiZG93bkNvdW50IiwidXNlQ291bnQiLCJsaWZlUGVyY2VudCIsImN1cnJlbnRDak51bSIsImZldGNoRGVmYXVsdFRvb2xGcm9tV29ya09yZGVyIiwid2FybiIsImZvcm1hdERhdGVUaW1lIiwic2VsZWN0VGlhb2ppVXNlciIsImhhbmRsZUluc3BlY3Rpb25DYWxsIiwib2tRdHkiLCJiYWRRdHkiLCJzdGFmZk5vIiwib3JkZXJObyIsImJmIiwiaW5pdENqTnVtIiwiYXV0b0hhbmRsZU1hY2hpbmVJbnNwZWN0aW9uIiwic3RhdHVzUmVzIiwic3RhdHVzRm9ybSIsIm1hU3RhcnRUaW1lIiwibWFTaG91dFRpbWUiLCJtYUVuZFRpbWUiLCJuZWVkU2F2ZSIsInVwZGF0ZURhdGEiLCJmbGFnIiwiYWN0aW9ucyIsInNhdmVSZXMiLCJzdWNjZXNzTXNnIiwiZmFpbE1zZyIsImZldGNoVGlhb2ppU3RhZmYiLCJzdGFmZiIsIm1vdW50ZWQiLCJiZWZvcmVEZXN0cm95Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztlQXNQQTtFQUNBQTtJQUNBO01BQ0FDO01BQUE7TUFDQUM7TUFBQTtNQUNBQztNQUFBO01BQ0FDO01BQ0FDO01BQUE7TUFDQUM7TUFDQUM7TUFDQUM7TUFDQUM7TUFDQUM7TUFDQUM7TUFDQUM7TUFDQUM7TUFDQUM7TUFDQUM7TUFBQTtNQUNBQztNQUNBQztNQUNBQztNQUNBQztNQUNBQztNQUNBQztNQUFBOztNQUVBO01BQ0FDO01BQ0FDO01BQUE7TUFDQUM7TUFBQTtNQUNBQztNQUNBQztNQUFBOztNQUVBO01BQ0FDO01BQUE7TUFDQUM7TUFBQTtNQUNBQztNQUFBO01BQ0FDO01BQUE7TUFDQUM7TUFBQTtNQUNBQztNQUFBOztNQUVBO01BQ0FDO01BQUE7TUFDQUM7SUFDQTtFQUNBOztFQUNBQztJQUNBQztNQUNBO0lBQ0E7SUFDQTtJQUNBQztNQUNBO01BQ0E7TUFDQTtJQUNBO0lBQ0E7SUFDQUM7TUFDQTtNQUNBO01BQ0E7UUFBQTtNQUFBO0lBQ0E7RUFDQTtFQUNBQztJQUNBO0lBQ0EvQjtNQUFBO0lBQUE7SUFDQU07TUFBQTtJQUFBO0lBQ0FDO01BQUE7SUFBQTtJQUNBTjtNQUFBO0lBQUE7SUFDQUM7TUFBQTtJQUFBO0VBQ0E7RUFDQThCO0lBQ0E7SUFDQUM7TUFBQTtNQUFBO1FBQUE7UUFBQTtVQUFBO1lBQUE7Y0FBQTtnQkFBQSxJQUNBO2tCQUFBO2tCQUFBO2dCQUFBO2dCQUFBO2NBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUEsT0FFQTtrQkFDQUM7a0JBQ0ExQztvQkFBQUM7a0JBQUE7a0JBQ0EwQztvQkFBQTtrQkFBQTtnQkFDQTtjQUFBO2dCQUpBQztnQkFBQSxNQUtBQTtrQkFBQTtrQkFBQTtnQkFBQTtnQkFDQUM7a0JBQUEsT0FDQUM7Z0JBQUEsRUFDQTtnQkFBQSxpQ0FDQUQ7Y0FBQTtnQkFBQTtnQkFBQTtjQUFBO2dCQUFBO2dCQUFBO2dCQUdBO2NBQUE7Z0JBQUEsaUNBRUE7Y0FBQTtjQUFBO2dCQUFBO1lBQUE7VUFBQTtRQUFBO01BQUE7SUFDQTtJQUVBO0lBQ0FFO01BQUE7TUFBQTtRQUFBO1VBQUE7WUFBQTtjQUFBO2dCQUNBO2dCQUFBLE1BQ0E7a0JBQUE7a0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUEsT0FDQTtjQUFBO2dCQUFBO2dCQUFBLE9BQ0E7Y0FBQTtnQkFDQTtnQkFDQTtrQkFDQTtnQkFDQTtjQUFBO2dCQUVBO2NBQUE7Y0FBQTtnQkFBQTtZQUFBO1VBQUE7UUFBQTtNQUFBO0lBQ0E7SUFDQTtJQUNBQztNQUFBO01BQ0E7TUFDQTtNQUNBO1FBQ0E7TUFDQTtJQUNBO0lBQ0E7SUFDQUM7TUFDQTtRQUNBQztRQUNBO01BQ0E7SUFDQTtJQUNBO0lBQ0FDO01BQUE7TUFBQTtRQUFBO1FBQUE7VUFBQTtZQUFBO2NBQUE7Z0JBQUEsSUFDQTtrQkFBQTtrQkFBQTtnQkFBQTtnQkFBQTtjQUFBO2dCQUFBLElBQ0E7a0JBQUE7a0JBQUE7Z0JBQUE7Z0JBQUE7Y0FBQTtnQkFBQSxNQUNBO2tCQUFBO2tCQUFBO2dCQUFBO2dCQUFBO2NBQUE7Z0JBRUFDLDRGQUNBLG9DQUNBO2dCQUFBLElBQ0FBO2tCQUFBO2tCQUFBO2dCQUFBO2dCQUNBO2dCQUFBO2NBQUE7Z0JBQUE7Z0JBS0E7Z0JBQUE7Z0JBQUEsT0FDQUE7Y0FBQTtnQkFBQTtnQkFDQTtnQkFDQTtnQkFBQTtnQkFBQTtjQUFBO2dCQUFBO2dCQUFBO2dCQUVBO2NBQUE7Z0JBQUE7Z0JBRUE7Z0JBQUE7Y0FBQTtjQUFBO2dCQUFBO1lBQUE7VUFBQTtRQUFBO01BQUE7SUFFQTtJQUVBO0lBQ0FDO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO0lBQ0E7SUFDQUM7TUFDQTtNQUNBO01BQ0E7SUFDQTtJQUNBQztNQUNBO0lBQ0E7SUFDQUM7TUFBQTtNQUFBO1FBQUE7UUFBQTtVQUFBO1lBQUE7Y0FBQTtnQkFDQTtnQkFBQTtnQkFBQTtnQkFBQSxPQUVBO2tCQUNBZDtrQkFDQTFDO29CQUNBWTtvQkFDQVI7b0JBQ0FDO2tCQUNBO2tCQUNBc0M7b0JBQUE7a0JBQUE7Z0JBQ0E7Y0FBQTtnQkFSQUM7Z0JBVUE7a0JBQ0FhLCtDQUNBYix3REFDQUEsNENBQ0E7a0JBRUFjO29CQUFBO3NCQUFBQztvQkFBQTtvQkFDQTtzQkFBQTtzQkFBQTtvQkFBQTtvQkFDQTtrQkFDQSxHQUVBO2tCQUNBQztvQkFBQTtzQkFDQUM7c0JBQ0FDO3NCQUNBQztzQkFDQUM7b0JBQ0E7a0JBQUE7a0JBRUE7a0JBQ0E7a0JBRUFDLGtGQUNBckIsOFhBQ0E7a0JBQ0E7a0JBQ0E7b0JBQ0E7a0JBQ0E7Z0JBQ0E7a0JBQ0E7Z0JBQ0E7Z0JBQUE7Z0JBQUE7Y0FBQTtnQkFBQTtnQkFBQTtnQkFFQTtnQkFDQTtjQUFBO2dCQUFBO2dCQUVBO2dCQUFBO2NBQUE7Y0FBQTtnQkFBQTtZQUFBO1VBQUE7UUFBQTtNQUFBO0lBRUE7SUFDQXNCO01BQUE7TUFBQTtRQUFBO1VBQUE7WUFBQTtjQUFBO2dCQUFBLE1BQ0E7a0JBQUE7a0JBQUE7Z0JBQUE7Z0JBQ0E7Z0JBQUE7Z0JBQUEsT0FDQTtjQUFBO2NBQUE7Z0JBQUE7WUFBQTtVQUFBO1FBQUE7TUFBQTtJQUVBO0lBQ0FDO01BQUE7TUFBQTtRQUFBO1VBQUE7WUFBQTtjQUFBO2dCQUFBLE1BQ0E7a0JBQUE7a0JBQUE7Z0JBQUE7Z0JBQ0E7Z0JBQUE7Z0JBQUEsT0FDQTtjQUFBO2NBQUE7Z0JBQUE7WUFBQTtVQUFBO1FBQUE7TUFBQTtJQUVBO0lBQ0FDO01BQUE7TUFDQUM7TUFDQTtRQUNBO01BQ0E7SUFDQTtJQUNBQztNQUFBO01BQUE7UUFBQTtVQUFBO1lBQUE7Y0FBQTtnQkFDQTtnQkFBQTtnQkFBQSxPQUNBO2NBQUE7Y0FBQTtnQkFBQTtZQUFBO1VBQUE7UUFBQTtNQUFBO0lBQ0E7SUFDQUM7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7UUFDQTtRQUNBO1FBQ0E7TUFDQTtRQUNBO01BQ0E7SUFDQTtJQUNBQztNQUNBO0lBQ0E7SUFDQUM7TUFBQTtNQUFBO1FBQUE7UUFBQTtVQUFBO1lBQUE7Y0FBQTtnQkFBQSxJQUNBO2tCQUFBO2tCQUFBO2dCQUFBO2dCQUNBO2dCQUFBO2NBQUE7Z0JBR0FDO2dCQUFBLE1BQ0FDO2tCQUFBO2tCQUFBO2dCQUFBO2dCQUNBO2dCQUFBO2NBQUE7Z0JBR0E7a0JBQ0E7b0JBQ0E7c0JBQUFDO29CQUFBO2tCQUNBO2tCQUNBO2dCQUNBO2dCQUNBO2tCQUFBO29CQUFBQTtrQkFBQTtnQkFBQTtnQkFDQTtjQUFBO2NBQUE7Z0JBQUE7WUFBQTtVQUFBO1FBQUE7TUFBQTtJQUNBO0lBQ0E7SUFDQUM7TUFBQTtNQUFBO1FBQUE7UUFBQTtVQUFBO1lBQUE7Y0FBQTtnQkFBQSxJQUNBO2tCQUFBO2tCQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2NBQUE7Z0JBQUEsSUFDQTtrQkFBQTtrQkFBQTtnQkFBQTtnQkFBQTtnQkFBQTtjQUFBO2dCQUFBLElBQ0E7a0JBQUE7a0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Y0FBQTtnQkFBQSxJQUVBO2tCQUFBO2tCQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2NBQUE7Z0JBQ0FEO2dCQUFBLE1BQ0FEO2tCQUFBO2tCQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2NBQUE7Z0JBRUE7Z0JBQ0FHO2dCQUNBQztnQkFDQXRCO2tCQUNBdkQ7a0JBQ0FEO2tCQUNBK0U7a0JBQ0FDO2tCQUNBTDtrQkFDQUU7a0JBQUE7a0JBQ0FJO2dCQUNBO2dCQUFBO2dCQUVBO2dCQUFBO2dCQUFBLE9BQ0E7a0JBQ0F4QztrQkFDQTFDO2tCQUNBMkM7b0JBQUE7a0JBQUE7Z0JBQ0E7Y0FBQTtnQkFKQUM7Z0JBQUEsTUFLQUE7a0JBQUE7a0JBQUE7Z0JBQUE7Z0JBQ0F1QztrQkFDQUM7a0JBQ0FDO2dCQUNBO2dCQUFBO2NBQUE7Z0JBRUE7a0JBQ0FGO29CQUNBQztvQkFDQUM7a0JBQ0E7Z0JBQ0E7Y0FBQTtnQkFBQSxNQUVBekM7a0JBQUE7a0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUEsT0FDQTtjQUFBO2dCQUFBO2dCQUFBO2NBQUE7Z0JBQUE7Z0JBQUE7Z0JBR0E7Z0JBQ0E7Z0JBQUE7Y0FBQTtnQkFBQTtnQkFHQTtnQkFBQTtjQUFBO2NBQUE7Z0JBQUE7WUFBQTtVQUFBO1FBQUE7TUFBQTtJQUVBO0lBQ0E7SUFDQTBDO01BQUE7TUFBQTtRQUFBO1FBQUE7VUFBQTtZQUFBO2NBQUE7Z0JBQUEsSUFDQTtrQkFBQTtrQkFBQTtnQkFBQTtnQkFBQTtnQkFBQTtjQUFBO2dCQUFBLElBQ0E7a0JBQUE7a0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Y0FBQTtnQkFBQSxJQUNBO2tCQUFBO2tCQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2NBQUE7Z0JBQ0E7Z0JBQ0E7Z0JBQ0FWLDBDQUNBO2dCQUVBO2dCQUNBVztnQkFDQVI7Z0JBQ0F0QjtrQkFDQXZEO2tCQUNBRDtrQkFDQStFO2tCQUNBQztrQkFDQUw7a0JBQ0FXO2tCQUFBO2tCQUNBTDtnQkFDQTtnQkFBQTtnQkFFQTtnQkFBQTtnQkFBQSxPQUNBO2tCQUNBeEM7a0JBQ0ExQztrQkFDQTJDO29CQUFBO2tCQUFBO2dCQUNBO2NBQUE7Z0JBSkFDO2dCQUFBLE1BS0FBO2tCQUFBO2tCQUFBO2dCQUFBO2dCQUNBdUM7a0JBQ0FDO2tCQUNBQztnQkFDQTtnQkFBQTtjQUFBO2dCQUVBO2tCQUNBRjtvQkFDQUM7b0JBQ0FDO2tCQUNBO2dCQUNBO2NBQUE7Z0JBQUEsTUFFQXpDO2tCQUFBO2tCQUFBO2dCQUFBO2dCQUFBO2dCQUFBLE9BQ0E7Y0FBQTtnQkFBQTtnQkFBQTtjQUFBO2dCQUFBO2dCQUFBO2dCQUdBO2dCQUNBO2dCQUFBO2NBQUE7Z0JBQUE7Z0JBR0E7Z0JBQUE7Y0FBQTtjQUFBO2dCQUFBO1lBQUE7VUFBQTtRQUFBO01BQUE7SUFFQTtJQUNBNEM7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7SUFDQTtJQUNBQztNQUFBO01BQUE7UUFBQTtRQUFBO1VBQUE7WUFBQTtjQUFBO2dCQUFBLE1BQ0E7a0JBQUE7a0JBQUE7Z0JBQUE7Z0JBQ0E7Z0JBQUE7Y0FBQTtnQkFHQTtnQkFDQWhDO2tCQUNBdkQ7a0JBQ0FEO2dCQUNBO2dCQUFBO2dCQUFBO2dCQUFBLE9BRUE7a0JBQ0F5QztrQkFDQTFDO2tCQUNBMkM7b0JBQUE7a0JBQUE7Z0JBQ0E7Y0FBQTtnQkFKQUM7Z0JBQUEsTUFLQUE7a0JBQUE7a0JBQUE7Z0JBQUE7Z0JBQ0E7Z0JBQ0E7Z0JBQUE7Y0FBQTtnQkFHQThDLDRDQUNBOUMsd0RBQ0FBLDRDQUNBO2dCQUVBYztrQkFBQTtvQkFBQUM7a0JBQUE7a0JBQ0E7b0JBQUE7b0JBQUE7a0JBQUE7a0JBQ0E7Z0JBQ0E7Z0JBRUFDO2tCQUFBO2tCQUNBO2tCQUNBO2tCQUNBO2tCQUNBO2tCQUVBO2tCQUNBO2tCQUVBO2tCQUNBO29CQUNBK0I7a0JBQ0E7a0JBRUE7b0JBQ0E7b0JBQ0E7b0JBQ0E7b0JBQ0E7a0JBQ0E7a0JBQ0E7b0JBQ0E7b0JBQ0E7b0JBQ0E7a0JBQ0E7a0JBQ0E7a0JBRUE7a0JBQ0E7b0JBQ0E7b0JBQ0FDO2tCQUNBO29CQUNBQTtrQkFDQTtrQkFFQTtvQkFDQUM7b0JBQ0FoQztvQkFDQUM7b0JBQ0FnQztvQkFDQUM7b0JBQ0FDO29CQUNBQztvQkFDQUM7b0JBQ0F0QjtvQkFDQXVCO29CQUNBbkM7b0JBQ0E0QjtvQkFDQVE7a0JBQ0E7Z0JBQ0EsSUFFQTtnQkFDQXhDO2tCQUNBO2tCQUNBO29CQUNBO29CQUNBO29CQUNBO29CQUNBO2tCQUNBO2tCQUNBO2dCQUNBOztnQkFFQTtnQkFDQUssbUZBQ0FyQixnWUFDQTtnQkFDQTtnQkFBQTtnQkFBQTtjQUFBO2dCQUFBO2dCQUFBO2dCQUVBO2dCQUNBO2dCQUNBO2NBQUE7Z0JBQUE7Z0JBRUE7Z0JBQUE7Y0FBQTtjQUFBO2dCQUFBO1lBQUE7VUFBQTtRQUFBO01BQUE7SUFFQTtJQUNBO0lBQ0F5RDtNQUFBO01BQUE7UUFBQTtRQUFBO1VBQUE7WUFBQTtjQUFBO2dCQUFBLElBQ0E7a0JBQUE7a0JBQUE7Z0JBQUE7Z0JBQUE7Y0FBQTtnQkFBQTtnQkFBQTtnQkFBQSxPQUVBO2tCQUNBM0Q7a0JBQ0ExQztvQkFBQUM7a0JBQUE7a0JBQ0EwQztvQkFBQTtrQkFBQTtnQkFDQTtjQUFBO2dCQUpBQztnQkFLQTtrQkFDQVYsZ0NBRUE7a0JBQ0E7a0JBQ0E7a0JBRUE7a0JBQ0E7a0JBQ0E7a0JBQ0E7a0JBQ0E7a0JBQ0E7a0JBQ0E7b0JBQ0FvRTtvQkFDQTtrQkFDQTtvQkFDQTtrQkFDQTtnQkFDQTtrQkFDQTtrQkFDQTtrQkFDQTtnQkFDQTtnQkFBQTtnQkFBQTtjQUFBO2dCQUFBO2dCQUFBO2dCQUVBO2dCQUNBO2dCQUNBO2dCQUNBO2NBQUE7Y0FBQTtnQkFBQTtZQUFBO1VBQUE7UUFBQTtNQUFBO0lBRUE7SUFDQUM7TUFDQTtNQUNBO1FBQ0E7UUFDQTtVQUNBO1VBQ0E7UUFDQTtRQUNBO1VBQ0E7VUFDQTtRQUNBO1FBQ0E7UUFDQTtVQUNBO1FBQ0E7UUFDQTtRQUNBO1VBQUE7UUFBQTtRQUNBO01BQ0E7UUFDQTtNQUNBO0lBQ0E7SUFFQTtJQUNBQztNQUNBO01BQ0E7TUFDQTtJQUNBO0lBRUE7SUFDQUM7TUFBQTtNQUFBO1FBQUE7UUFBQTtRQUFBO1VBQUE7WUFBQTtjQUFBO2dCQUFBLElBRUE7a0JBQUE7a0JBQUE7Z0JBQUE7Z0JBQ0E7Z0JBQUE7Y0FBQTtnQkFJQUM7Z0JBQ0FDO2dCQUFBLE1BRUFoQztrQkFBQTtrQkFBQTtnQkFBQTtnQkFDQTtnQkFBQTtjQUFBO2dCQUFBLE1BSUFBO2tCQUFBO2tCQUFBO2dCQUFBO2dCQUNBO2dCQUFBO2NBQUE7Z0JBSUFpQztnQkFDQVIsa0lBRUE7Z0JBQ0EzQztrQkFDQW9EO2tCQUNBNUU7a0JBQUE7a0JBQ0E2RTtrQkFBQTtrQkFDQUY7a0JBQ0FHO2tCQUFBO2tCQUNBWDtrQkFDQW5CO2tCQUFBO2tCQUNBcEQ7a0JBQUE7a0JBQ0FDO2dCQUNBO2dCQUFBO2dCQUdBO2dCQUNBO2dCQUFBO2dCQUFBLE9BQ0E7a0JBQ0FZO2tCQUNBMUM7Z0JBQ0E7Y0FBQTtnQkFIQTRDO2dCQUFBLE1BS0FBO2tCQUFBO2tCQUFBO2dCQUFBO2dCQUNBO2dCQUFBO2NBQUE7Z0JBSUE7Z0JBQ0E7Z0JBQ0E7Z0JBQ0E7Z0JBQ0E7Z0JBQUE7Z0JBQUEsT0FDQTtjQUFBO2dCQUFBO2dCQUFBLE9BQ0E7Y0FBQTtnQkFBQTtnQkFBQSxPQUdBO2NBQUE7Z0JBQUE7Z0JBQUE7Y0FBQTtnQkFBQTtnQkFBQTtnQkFFQTtnQkFDQTtjQUFBO2dCQUFBO2dCQUVBO2dCQUFBO2NBQUE7Y0FBQTtnQkFBQTtZQUFBO1VBQUE7UUFBQTtNQUFBO0lBRUE7SUFFQTtJQUNBb0U7TUFBQTtNQUFBO1FBQUE7UUFBQTtVQUFBO1lBQUE7Y0FBQTtnQkFBQTtnQkFBQTtnQkFBQSxPQUdBO2tCQUNBdEU7a0JBQ0ExQztvQkFDQWlDO29CQUNBNEU7a0JBQ0E7Z0JBQ0E7Y0FBQTtnQkFOQUk7Z0JBQUEsTUFRQTtrQkFBQTtrQkFBQTtnQkFBQTtnQkFDQTtnQkFDQTtnQkFBQTtjQUFBO2dCQUlBQztnQkFDQUM7Z0JBQ0FDO2dCQUNBQyxrQ0FFQTtnQkFDQUM7Z0JBQ0FDO2tCQUNBMUI7a0JBQ0E1RDtrQkFDQWhDO2tCQUNBdUg7Z0JBQ0EsR0FFQTtnQkFDQUMsY0FFQTtnQkFDQTtnQkFDQTtrQkFDQUY7a0JBQ0FBO2tCQUNBRDtrQkFDQUc7Z0JBQ0E7a0JBQ0FGO2dCQUNBOztnQkFFQTtnQkFDQTtrQkFDQUE7a0JBQ0FBO2tCQUNBRDtrQkFDQUc7Z0JBQ0E7a0JBQ0FGO2dCQUNBOztnQkFFQTtnQkFDQUE7O2dCQUVBO2dCQUFBLEtBQ0FEO2tCQUFBO2tCQUFBO2dCQUFBO2dCQUFBO2dCQUFBLE9BQ0E7a0JBQ0E1RTtrQkFDQTFDO2dCQUNBO2NBQUE7Z0JBSEEwSDtnQkFLQTtrQkFDQUM7a0JBQ0E7a0JBQ0E7Z0JBQ0E7a0JBQ0FDO2tCQUNBO2tCQUNBO2dCQUNBO2dCQUFBO2dCQUFBO2NBQUE7Z0JBRUE7Z0JBQ0E7Z0JBQ0E7Y0FBQTtnQkFBQTtnQkFBQTtjQUFBO2dCQUFBO2dCQUFBO2dCQUdBO2dCQUNBO2dCQUNBO2NBQUE7Y0FBQTtnQkFBQTtZQUFBO1VBQUE7UUFBQTtNQUFBO0lBRUE7SUFFQTtJQUNBQztNQUFBO01BQUE7UUFBQTtRQUFBO1VBQUE7WUFBQTtjQUFBO2dCQUFBO2dCQUFBO2dCQUFBLE9BRUE7a0JBQ0FuRjtnQkFDQTtjQUFBO2dCQUZBRTtnQkFHQTtrQkFDQWtGO2tCQUNBO29CQUFBO2tCQUFBO2dCQUNBO2dCQUFBO2dCQUFBO2NBQUE7Z0JBQUE7Z0JBQUE7Z0JBRUE7Y0FBQTtjQUFBO2dCQUFBO1lBQUE7VUFBQTtRQUFBO01BQUE7SUFFQTtFQUNBO0VBQ0FDO0lBQUE7SUFDQTtJQUNBO0lBQ0E7O0lBRUE7SUFDQTtJQUVBO01BQ0E7UUFBQTtVQUFBO1lBQUE7Y0FBQTtnQkFBQTtnQkFBQSxPQUNBO2NBQUE7Z0JBQ0E7Z0JBQ0E7a0JBQ0E7Z0JBQ0E7Y0FBQTtjQUFBO2dCQUFBO1lBQUE7VUFBQTtRQUFBO01BQUEsQ0FDQTtJQUNBO01BQ0E7SUFDQTs7SUFFQTtJQUNBO0VBQ0E7RUFDQUM7SUFDQTtJQUNBO0VBQ0E7QUFDQTtBQUFBLDJCIiwiZmlsZSI6IjYyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiPHRlbXBsYXRlPlxyXG4gICAgPHZpZXcgY2xhc3M9XCJwYWdlXCI+XHJcbiAgICAgICAgPCEtLSDliIDlhbfpgInmi6nljLogLS0+XHJcbiAgICAgICAgPHZpZXcgY2xhc3M9XCJ0b3Atc2VjdGlvbi1ncmlkXCI+XHJcbiAgICAgICAgICAgIDwhLS0g56ys5LiA6KGM77ya56e76Zmk5YiA5YW355uu5b2V5oyJ6ZKuIC0tPlxyXG4gICAgICAgICAgICA8dmlldyBjbGFzcz1cImZvcm0tcm93XCI+XHJcbiAgICAgICAgICAgICAgICA8dmlldyBjbGFzcz1cImZvcm0tY2VsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj7liIDlhbfnvJblj7fvvJo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0IHNtYWxsLWZvbnRcIiB2LW1vZGVsPVwic2VsZWN0ZWRUb29sTm9cIiBwbGFjZWhvbGRlcj1cIuivt+mAmui/h+WIgOWFt+ebruW9lemAieaLqVwiIGRpc2FibGVkIC8+XHJcbiAgICAgICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICAgICAgICA8dmlldyBjbGFzcz1cImZvcm0tY2VsbCBmb3JtLWNlbGwtZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgaGlnaGxpZ2h0LWxhYmVsXCI+5L2/55So5LiK6ZmQ77yaPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dCBzbWFsbC1mb250IGlucHV0LXVzZS1saW1pdFwiIHR5cGU9XCJudW1iZXJcIiB2LW1vZGVsPVwidXNlTGltaXRJbnB1dFwiIHBsYWNlaG9sZGVyPVwi5q+P5qyh5LiK5YiA5pe25omL5aGr5LiK6ZmQXCIgOmRpc2FibGVkPVwiIXNlbGVjdGVkVG9vbE5vIHx8IGxvYWRpbmdGb3JtXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCIgc3R5bGU9XCJtYXJnaW4tbGVmdDoxNnB4O1wiPuWvv+WRveavlOmihOitpuWAvO+8mjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJpbnB1dC13aXRoLXVuaXRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXQgc21hbGwtZm9udCBpbnB1dC1saWZlLXdhcm5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD1cImxpZmVXYXJuSW5wdXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCLlpoI5MFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCIhc2VsZWN0ZWRUb29sTm8gfHwgbG9hZGluZ0Zvcm1cIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVuaXQtdGV4dFwiPiU8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgICA8L3ZpZXc+XHJcblxyXG4gICAgICAgICAgICA8IS0tIOesrOS6jOihjO+8muWcqOacgOWQjua3u+WKoOWIgOWFt+ebruW9leaMiemSriAtLT5cclxuICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJmb3JtLXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPCEtLSDliIDlhbflkI3np7AgLS0+XHJcbiAgICAgICAgICAgICAgICA8dmlldyBjbGFzcz1cImZvcm0tY2VsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj7liIDlhbflkI3np7DvvJo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0IHNtYWxsLWZvbnQgaW5wdXQtdG9vbC1uYW1lXCIgdi1tb2RlbD1cInRvb2xOYW1lXCIgcGxhY2Vob2xkZXI9XCLliIDlhbfluKblh7pcIiBkaXNhYmxlZCAvPlxyXG4gICAgICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgICAgICAgPCEtLSDop4TmoLzlnovlj7cgLS0+XHJcbiAgICAgICAgICAgICAgICA8dmlldyBjbGFzcz1cImZvcm0tY2VsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj7op4TmoLzlnovlj7fvvJo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0IHNtYWxsLWZvbnQgaW5wdXQtdG9vbC1tb2RlbFwiIHYtbW9kZWw9XCJ0b29sTW9kZWxcIiBwbGFjZWhvbGRlcj1cIuWIgOWFt+W4puWHulwiIGRpc2FibGVkIC8+XHJcbiAgICAgICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICAgICAgICA8IS0tIOWIgOWFt+ebruW9leaMiemSruWPs+enuyAtLT5cclxuICAgICAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwiZm9ybS1jZWxsIHRvb2wtZGlyLWNlbGxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLWJsdWUgbGFyZ2UtYnRuXCIgQGNsaWNrPVwib3BlblRvb2xEaWFsb2dcIiA6ZGlzYWJsZWQ9XCJsb2FkaW5nVG9vbHNcIj7liIDlhbfnm67lvZU8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgICAgICAgIDwhLS0g5paw5aKe77ya5Yi35paw5oyJ6ZKuIC0tPlxyXG4gICAgICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJmb3JtLWNlbGxcIiBzdHlsZT1cImZsZXg6MCAwIGF1dG87IG1hcmdpbi1sZWZ0OjE2cHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0bi1ibHVlIGxhcmdlLWJ0blwiIEBjbGljaz1cImhhbmRsZVJlZnJlc2hcIiA6ZGlzYWJsZWQ9XCJsb2FkaW5nRm9ybSB8fCBzdWJtaXR0aW5nXCI+5Yi35pawPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICA8L3ZpZXc+ICA8IS0tIOi/memHjOmXreWQiCB0b3Atc2VjdGlvbi1ncmlkIC0tPlxyXG4gICAgICAgIDwhLS0g5pON5L2c5oyJ6ZKuIC0g56e75Ye6IHRvcC1zZWN0aW9uLWdyaWQgLS0+XHJcbiAgICAgICAgPHZpZXcgY2xhc3M9XCJidXR0b24tcm93XCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJzYXZlLWJ0blwiIEBjbGljaz1cImhhbmRsZVVwVG9vbFwiIDpkaXNhYmxlZD1cInN1Ym1pdHRpbmcgfHwgbG9hZGluZ0Zvcm1cIj7kuIrliIDmj5DkuqQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInNhdmUtYnRuXCIgQGNsaWNrPVwiaGFuZGxlRG93blRvb2xcIiA6ZGlzYWJsZWQ9XCJzdWJtaXR0aW5nIHx8IGxvYWRpbmdGb3JtXCI+5LiL5YiA5o+Q5LqkPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjYW5jZWwtYnRuXCIgQGNsaWNrPVwiY2FuY2VsXCIgOmRpc2FibGVkPVwic3VibWl0dGluZyB8fCBsb2FkaW5nRm9ybVwiPua4heepuuWIgOWFt+mAieaLqTwvYnV0dG9uPlxyXG4gICAgICAgIDwvdmlldz5cclxuXHJcbiAgICAgICAgPCEtLSDmlrDlop7vvJrosIPmnLrmlbDmja7ovpPlhaXljLrln58gLS0+XHJcbiAgICAgICAgPHZpZXcgY2xhc3M9XCJ0aWFvamktc2VjdGlvblwiPlxyXG4gICAgICAgICAgICA8dmlldyBjbGFzcz1cInRpYW9qaS1yb3dcIj5cclxuICAgICAgICAgICAgICAgIDwhLS0g5b2T5YmN6LCD5py65biI5YKFIC0tPlxyXG4gICAgICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJjdXJyZW50LXVzZXItc2VjdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0PuW9k+WJjeiwg+acuuW4iOWChe+8mjwvdGV4dD5cclxuICAgICAgICAgICAgICAgICAgICA8dGV4dCBjbGFzcz1cImN1cnJlbnQtdXNlci1uYW1lXCI+e3sgdGlhb2ppU3RhZmZEaXNwbGF5IHx8ICfmnKrpgInmi6knIH19PC90ZXh0PlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJzZWxlY3QtdXNlci1idG5cIiBAY2xpY2s9XCJpc1RpYW9qaVVzZXJTZWxlY3RTaG93ID0gdHJ1ZVwiPumAieS6ujwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC92aWV3PlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0g6LCD5py66Imv5ZOB5pWwIC0tPlxyXG4gICAgICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJ0aWFvamktaW5wdXQtc2VjdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0Puiwg+acuuiJr+WTgeaVsO+8mjwvdGV4dD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdi1tb2RlbD1cInRpYW9qaU9rUXR5XCIgY2xhc3M9XCJpbnAgdGlhb2ppLWlucHV0XCIgdHlwZT1cIm51bWJlclwiIHBsYWNlaG9sZGVyPVwi6K+36L6T5YWl5pWw6YePXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvdmlldz5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIOiwg+acuuS4jeiJr+WTgeaVsCAtLT5cclxuICAgICAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwidGlhb2ppLWlucHV0LXNlY3Rpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICA8dGV4dD7osIPmnLrkuI3oia/lk4HmlbDvvJo8L3RleHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHYtbW9kZWw9XCJ0aWFvamlCYWRRdHlcIiBjbGFzcz1cImlucCB0aWFvamktaW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgcGxhY2Vob2xkZXI9XCLor7fovpPlhaXmlbDph49cIiAvPlxyXG4gICAgICAgICAgICAgICAgPC92aWV3PlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0g6YCB5qOA5ZG85Y+r5oyJ6ZKuIC0tPlxyXG4gICAgICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJ0aWFvamktc3VibWl0LXNlY3Rpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZGV0YWlscy1idG5cIiBAY2xpY2s9XCJoYW5kbGVJbnNwZWN0aW9uQ2FsbFwiPumAgeajgOWRvOWPqzwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgPC92aWV3PlxyXG5cclxuICAgICAgICA8IS0tIOmAieaLqeiwg+acuuW4iOWCheW8ueeqlyAtLT5cclxuICAgICAgICA8dmlldyB2LWlmPVwiaXNUaWFvamlVc2VyU2VsZWN0U2hvd1wiIGNsYXNzPVwib3ZlcmxheVwiPlxyXG4gICAgICAgICAgICA8dmlldyBjbGFzcz1cInBvcHVwIHVzZXItc2VsZWN0LXBvcHVwXCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIOaQnOe0ouagjyAtLT5cclxuICAgICAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwidXNlci1zZWFyY2gtYmFyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHYtbW9kZWwudHJpbT1cInRpYW9qaVVzZXJTZWFyY2hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidXNlci1zZWFyY2gtaW5wdXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIui+k+WFpeW3peWPt+aIluWnk+WQjeaQnOe0olwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIEBrZXlkb3duLmVudGVyLnByZXZlbnQgLz5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHYtaWY9XCJ0aWFvamlVc2VyU2VhcmNoXCIgY2xhc3M9XCJ1c2VyLXNlYXJjaC1jbGVhclwiIEBjbGljaz1cInRpYW9qaVVzZXJTZWFyY2g9JydcIj7muIXnqbo8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8dmlldyBjbGFzcz1cInVzZXItc2VhcmNoLWluZm9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAg5Yy56YWN77yae3sgZmlsdGVyZWRUaWFvamlVc2Vycy5sZW5ndGggfX0gLyB7eyB0aWFvamlVc2Vycy5sZW5ndGggfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICAgICAgICA8dmlldyBjbGFzcz1cInVzZXItbGlzdC1zY3JvbGxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1pZj1cImZpbHRlcmVkVGlhb2ppVXNlcnMubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwidXNlci1saXN0LWdyaWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdi1mb3I9XCIodSwgaW5kZXgpIGluIGZpbHRlcmVkVGlhb2ppVXNlcnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6a2V5PVwiaW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9XCJbJ3VzZXItbGlzdC1idG4nLCB7J3NlbGVjdGVkJzogdT09PXRpYW9qaVN0YWZmTm99XVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdFRpYW9qaVVzZXIodSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVzZXItY29kZVwiPnt7IHUuc3BsaXQoJzonKVswXSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVzZXItbmFtZVwiPnt7IHUuc3BsaXQoJzonKVsxXSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8dmlldyB2LWVsc2UgY2xhc3M9XCJuby11c2VyLXJlc3VsdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICDmnKrmib7liLDljLnphY3kurrlkZhcclxuICAgICAgICAgICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICAgICAgICA8dmlldyBjbGFzcz1cInVzZXItcG9wdXAtZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNsZWFuLWJ0biB3aWRlLWJ0blwiIEBjbGljaz1cImlzVGlhb2ppVXNlclNlbGVjdFNob3cgPSBmYWxzZVwiPuWFs+mXrTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgPC92aWV3PlxyXG5cclxuICAgICAgICA8IS0tIOWIgOWFt+ebruW9leW8ueeqlyAtLT5cclxuICAgICAgICA8dmlldyB2LWlmPVwic2hvd1Rvb2xEaWFsb2dcIiBjbGFzcz1cImRpYWxvZy1vdmVybGF5XCI+XHJcbiAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwiZGlhbG9nXCI+XHJcbiAgICAgICAgICAgICAgICA8dmlldyBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdi1tb2RlbD1cInNlYXJjaEtleVwiIHBsYWNlaG9sZGVyPVwi6L6T5YWl5YiA5YW357yW56CB44CB5ZCN56ew5qih57OK5pCc57SiXCIgY2xhc3M9XCJpbnB1dFwiIEBpbnB1dD1cIm9uU2VhcmNoS2V5SW5wdXRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4tYmx1ZVwiIEBjbGljaz1cInNlYXJjaFRvb2xcIiA6ZGlzYWJsZWQ9XCJsb2FkaW5nVG9vbHNcIj7mkJzntKI8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwidG9vbC1saXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB2LWZvcj1cInRvb2wgaW4gZmlsdGVyZWRUb29sc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6a2V5PVwidG9vbC5ub1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRvb2wtYnRuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzcz1cInsgYWN0aXZlOiBhY3RpdmVUb29sTm8gPT09IHRvb2wubm8gfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9XCJzZWxlY3RUb29sKHRvb2wpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHRvb2wubm8gfX0gfCB7eyB0b29sLm5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwiZGlhbG9nLWFjdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0bi1ibHVlXCIgQGNsaWNrPVwicHJldlBhZ2VcIiA6ZGlzYWJsZWQ9XCJwYWdlSW5kZXggPT09IDEgfHwgbG9hZGluZ1Rvb2xzXCI+5LiK5LiA6aG1PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luOiAwIDEycHg7XCI+56yse3sgcGFnZUluZGV4IH196aG1IC8g5YWxe3sgdG90YWxQYWdlcyB9femhtTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0bi1ibHVlXCIgQGNsaWNrPVwibmV4dFBhZ2VcIiA6ZGlzYWJsZWQ9XCJwYWdlSW5kZXggPT09IHRvdGFsUGFnZXMgfHwgbG9hZGluZ1Rvb2xzXCI+5LiL5LiA6aG1PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGdhcDogMThweDsgYWxpZ24taXRlbXM6IGNlbnRlcjtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0bi1ibHVlXCIgQGNsaWNrPVwiY29uZmlybVRvb2xcIj7noa7lrpo8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0bi1kaXNhYmxlZFwiIEBjbGljaz1cImNsb3NlVG9vbERpYWxvZ1wiPuWPlua2iDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgPC92aWV3PlxyXG5cclxuICAgICAgICA8IS0tIOmakOiXj+WIgOWFt+S9v+eUqOiusOW9leihqOagvCAtLT5cclxuICAgICAgICA8dmlldyB2LWlmPVwiZmFsc2VcIiBjbGFzcz1cInRhYmxlLXNlY3Rpb25cIj5cclxuICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwic3R5bGVkLXRhYmxlXCI+XHJcbiAgICAgICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDo3JVwiPuWIgOWFt+e8luWPtzwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOjEyJVwiPuWIgOWFt+WQjeensDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOjEwJVwiPuS4iuWIgOaXtumXtDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm51bVwiIHN0eWxlPVwid2lkdGg6NyVcIj7kuIrliIDorqHmlbA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDoxMCVcIj7kuIvliIDml7bpl7Q8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJudW1cIiBzdHlsZT1cIndpZHRoOjclXCI+5LiL5YiA6K6h5pWwPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibnVtXCIgc3R5bGU9XCJ3aWR0aDo3JVwiPuS9v+eUqOasoeaVsDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm51bVwiIHN0eWxlPVwid2lkdGg6NyVcIj7kvb/nlKjkuIrpmZA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJudW1cIiBzdHlsZT1cIndpZHRoOjclXCI+5a+/5ZG95q+UJTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm51bVwiIHN0eWxlPVwid2lkdGg6NyVcIj7lr7/lkb3mr5TpooTorablgLw8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDo3JVwiPumihOitpueKtuaAgTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOjclXCI+5YiA5YW35Zyo5py654q25oCBPC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICA8dHIgdi1mb3I9XCIoaXRlbSwgaWR4KSBpbiB0b29sUmVjb3Jkc1wiIDprZXk9XCJpdGVtLmlkXCIgOmNsYXNzPVwieydyb3ctb2RkJzogaWR4ICUgMiA9PT0gMH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7IGl0ZW0ubm8gfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJsZWZ0XCI+e3sgaXRlbS5uYW1lIH19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7IGl0ZW0udXBUaW1lIH19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwibnVtXCI+e3sgaXRlbS51cENvdW50ICE9IG51bGwgPyBpdGVtLnVwQ291bnQgOiAnJyB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyBpdGVtLmRvd25UaW1lIH19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSDlj6rmnInnrKzkuIDooYzmmL7npLogY3VycmVudENqTnVt77yM5YW25a6D6KGM5pi+56S6IGRvd25Db3VudCAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwibnVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1pZj1cImlkeCA9PT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0g56ys5LiA6KGM77ya5LiL5py65pe25LiN5a6e5pe25pi+56S6IGN1cnJlbnRDak51be+8jOaYvuekuiBkb3duQ291bnQgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtaWY9XCIhaXRlbS5kb3duVGltZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmN1cnJlbnRDak51bSAhPSBudWxsID8gaXRlbS5jdXJyZW50Q2pOdW0gOiAnJyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtZWxzZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5kb3duQ291bnQgIT0gbnVsbCA/IGl0ZW0uZG93bkNvdW50IDogJycgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LWVsc2U+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5kb3duQ291bnQgIT0gbnVsbCA/IGl0ZW0uZG93bkNvdW50IDogJycgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS3kvb/nlKjmrKHmlbAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwibnVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1pZj1cImlkeCA9PT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0g56ys5LiA6KGM5a6e5pe26K6h566X5L2/55So5qyh5pWw77yM6Iul5Li65LiL5py65YiZ5LiN5a6e5pe25pi+56S6IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LWlmPVwiIWl0ZW0uZG93blRpbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtLmN1cnJlbnRDak51bSAhPSBudWxsICYmIGl0ZW0udXBDb3VudCAhPSBudWxsID8gKE51bWJlcihpdGVtLmN1cnJlbnRDak51bSkgLSBOdW1iZXIoaXRlbS51cENvdW50KSkgOiAoaXRlbS51c2VDb3VudCAhPSBudWxsID8gaXRlbS51c2VDb3VudCA6ICcnKSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtZWxzZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS51c2VDb3VudCAhPSBudWxsID8gaXRlbS51c2VDb3VudCA6ICcnIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1lbHNlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0udXNlQ291bnQgIT0gbnVsbCA/IGl0ZW0udXNlQ291bnQgOiAnJyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwibnVtXCI+e3sgaXRlbS51c2VMaW1pdCAhPSBudWxsID8gaXRlbS51c2VMaW1pdCA6ICcnIH19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLeWvv+WRveavlCUtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwibnVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1pZj1cImlkeCA9PT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0g56ys5LiA6KGM5a6e5pe26K6h566X5a+/5ZG95q+UJe+8jOiLpeS4uuS4i+acuuWImeS4jeWunuaXtuaYvuekuiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1pZj1cIiFpdGVtLmRvd25UaW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbS5jdXJyZW50Q2pOdW0gIT0gbnVsbCAmJiBpdGVtLnVwQ291bnQgIT0gbnVsbCAmJiBpdGVtLnVzZUxpbWl0ICE9IG51bGwgJiYgTnVtYmVyKGl0ZW0udXNlTGltaXQpID4gMCA/IE1hdGgucm91bmQoKE51bWJlcihpdGVtLmN1cnJlbnRDak51bSkgLSBOdW1iZXIoaXRlbS51cENvdW50KSkgLyBOdW1iZXIoaXRlbS51c2VMaW1pdCkgKiAxMDApICsgJyUnIDogKGl0ZW0ubGlmZVBlcmNlbnQgIT0gbnVsbCA/IGl0ZW0ubGlmZVBlcmNlbnQgOiAnJykgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LWVsc2U+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0ubGlmZVBlcmNlbnQgIT0gbnVsbCA/IGl0ZW0ubGlmZVBlcmNlbnQgOiAnJyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtZWxzZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmxpZmVQZXJjZW50IH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJudW1cIj57eyBpdGVtLmxpZmVXYXJuIH19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIDpjbGFzcz1cIml0ZW0ud2FyblN0YXR1cyA9PT0gJ+mihOitpicgPyAnd2Fybi1jZWxsJyA6IChpdGVtLndhcm5TdGF0dXMgPT09ICfmraPluLgnID8gJ29rLWNlbGwnIDogJycpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiB2LWlmPVwiaXRlbS53YXJuU3RhdHVzID09PSAn6aKE6K2mJ1wiIGNsYXNzPVwid2Fybi1iYWRnZVwiPuitpuWRijwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHYtZWxzZT57eyBpdGVtLndhcm5TdGF0dXMgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uZG93blRpbWUgPyAn5LiL5py6JyA6ICflnKjmnLonIH19PCEtLeWcqOacuueKtuaAgS0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyIHYtaWY9XCIhdG9vbFJlY29yZHMubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiMTJcIj7mmoLml6DmlbDmja48L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgIDwvdmlldz5cclxuXHJcbiAgICAgICAgPCEtLSDor7TmmI4gLS0+XHJcbiAgICAgICAgPCEtLTx2aWV3IGNsYXNzPVwidG9vbC1kZXNjXCI+XHJcbiAgICAgICAgICAgIDxwIHN0eWxlPVwiY29sb3I6cmVkO1wiPifkvb/nlKjkuIrpmZAn5Lul5LiL5YiA5pe255qEJ+S9v+eUqOS4iumZkCfkuLrorqHnrpfmoIflh4Y8L3A+XHJcbiAgICAgICAgICAgIDxwIHN0eWxlPVwiY29sb3I6cmVkO1wiPuWvv+WRveavlOmihOitpuWAvOm7mOiupOS4ujkwJTwvcD5cclxuICAgICAgICA8L3ZpZXc+LS0+XHJcbiAgICA8L3ZpZXc+XHJcbjwvdGVtcGxhdGU+XHJcblxyXG48c2NyaXB0PlxyXG4gICAgZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgICAgIGRhdGEoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBtYWNoaW5lTm86ICcnLC8v5py65Y+w57yW56CBXHJcbiAgICAgICAgICAgICAgICB3b3JrT3JkZXJObzogJycsLy/lt6XljZXlj7dcclxuICAgICAgICAgICAgICAgIGFjdGl2ZVRvb2xObzogJycsIC8vIOW9k+WJjemAieS4reeahOWIgOWFt+e8luWPt1xyXG4gICAgICAgICAgICAgICAgcGFnZUluZGV4OiAxLFxyXG4gICAgICAgICAgICAgICAgcGFnZVNpemU6IDIwLCAvL+WNlemhteaYvuekuueahOWIgOWFt+aVsOmHj1xyXG4gICAgICAgICAgICAgICAgdG90YWw6IDAsXHJcbiAgICAgICAgICAgICAgICB0b29sTGlzdDogW10sXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvb2xObzogJycsXHJcbiAgICAgICAgICAgICAgICB0b29sTmFtZTogJycsXHJcbiAgICAgICAgICAgICAgICB0b29sTW9kZWw6ICcnLFxyXG4gICAgICAgICAgICAgICAgc2hvd1Rvb2xEaWFsb2c6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgc2VhcmNoS2V5OiAnJyxcclxuICAgICAgICAgICAgICAgIGZpbHRlcmVkVG9vbHM6IFtdLFxyXG4gICAgICAgICAgICAgICAgdXNlTGltaXRJbnB1dDogJycsXHJcbiAgICAgICAgICAgICAgICBsaWZlV2FybklucHV0OiAnJywgLy8g5paw5aKe77ya5a+/5ZG95q+U6aKE6K2m5YC85Y6f5aeL6L6T5YWlXHJcbiAgICAgICAgICAgICAgICB0b29sUmVjb3JkczogW10sXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nVG9vbHM6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgbG9hZGluZ0Zvcm06IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgc3VibWl0dGluZzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBfc2VhcmNoVGltZXI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICB3b3JrT3JkZXJDdXJyZW50Q2pOdW06IG51bGwsIC8vIOW3peWNleW9k+WJjeaVsOmHh1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIOiHquWKqOS/neWtmOebuOWFs1xyXG4gICAgICAgICAgICAgICAgYXV0b1NhdmVUaW1lcjogbnVsbCxcclxuICAgICAgICAgICAgICAgIGlzRGlydHk6IGZhbHNlLCAvLyDooajljZXmmK/lkKbmnInmnKrkv53lrZjlj5jmm7RcclxuICAgICAgICAgICAgICAgIGF1dG9TYXZlSW50ZXJ2YWxNczogNSAqIDYwICogMTAwMCwgLy8g6buY6K6kIDUg5YiG6ZKfXHJcbiAgICAgICAgICAgICAgICBhdXRvU2F2ZUVuYWJsZWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBhdXRvU2F2ZUFjdGlvbk5hbWU6ICdoYW5kbGVVcFRvb2wnLCAvLyDoh6rliqjop6blj5HnmoTmlrnms5XlkI3vvIzlj6/mlLnkuLroh6rlrprkuYnkv53lrZjmlrnms5VcclxuXHJcbiAgICAgICAgICAgICAgICAvLyDmlrDlop7vvJrosIPmnLrnm7jlhbPlrZfmrrVcclxuICAgICAgICAgICAgICAgIGlzVGlhb2ppVXNlclNlbGVjdFNob3c6IGZhbHNlLCAvLyDosIPmnLrluIjlgoXpgInmi6nlvLnnqpdcclxuICAgICAgICAgICAgICAgIHRpYW9qaVN0YWZmTm86ICcnLCAvLyDlvZPliY3pgInkuK3nmoTosIPmnLrluIjlgoUo5qC85byPOiDlt6Xlj7c65aeT5ZCNKVxyXG4gICAgICAgICAgICAgICAgdGlhb2ppT2tRdHk6ICcnLCAvLyDosIPmnLroia/lk4HmlbBcclxuICAgICAgICAgICAgICAgIHRpYW9qaUJhZFF0eTogJycsIC8vIOiwg+acuuS4jeiJr+WTgeaVsFxyXG4gICAgICAgICAgICAgICAgdGlhb2ppVXNlcnM6IFtdLCAvLyDosIPmnLrluIjlgoXliJfooahcclxuICAgICAgICAgICAgICAgIHRpYW9qaVVzZXJTZWFyY2g6ICcnLCAvLyDmkJzntKLlhbPplK7or41cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vIOaWsOWinu+8muaKpeivleS6p+aVsOaJgOmcgOWtl+autVxyXG4gICAgICAgICAgICAgICAgb3JkZXJJZDogbnVsbCwgLy8g5bel5Y2VSURcclxuICAgICAgICAgICAgICAgIG9yZGVyOiB7fSAvLyDlt6XljZXmlbDmja5cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbXB1dGVkOiB7XHJcbiAgICAgICAgICAgIHRvdGFsUGFnZXMoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgoMSwgTWF0aC5jZWlsKHRoaXMudG90YWwgLyB0aGlzLnBhZ2VTaXplKSB8fCAxKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgLy8g5paw5aKe77ya6LCD5py65biI5YKF5pi+56S65ZCN56ewXHJcbiAgICAgICAgICAgIHRpYW9qaVN0YWZmRGlzcGxheSgpIHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy50aWFvamlTdGFmZk5vKSByZXR1cm4gJyc7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzZWdzID0gdGhpcy50aWFvamlTdGFmZk5vLnNwbGl0KCc6Jyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc2Vncy5sZW5ndGggPiAxID8gYCR7c2Vnc1swXX0gJHtzZWdzWzFdfWAgOiB0aGlzLnRpYW9qaVN0YWZmTm87XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIC8vIOaWsOWinu+8mui/h+a7pOWQjueahOiwg+acuuW4iOWCheWIl+ihqFxyXG4gICAgICAgICAgICBmaWx0ZXJlZFRpYW9qaVVzZXJzKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnRpYW9qaVVzZXJTZWFyY2gpIHJldHVybiB0aGlzLnRpYW9qaVVzZXJzO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qga3cgPSB0aGlzLnRpYW9qaVVzZXJTZWFyY2gudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50aWFvamlVc2Vycy5maWx0ZXIodSA9PiB1LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoa3cpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgd2F0Y2g6IHtcclxuICAgICAgICAgICAgLy8g5qCH6K6w6ISP5pWw5o2u77ya5oyJ6ZyA55uR5ZCs5a2X5q615Y+Y5YyWXHJcbiAgICAgICAgICAgIHNlbGVjdGVkVG9vbE5vKCkgeyB0aGlzLmlzRGlydHkgPSB0cnVlOyB9LFxyXG4gICAgICAgICAgICB1c2VMaW1pdElucHV0KCkgeyB0aGlzLmlzRGlydHkgPSB0cnVlOyB9LFxyXG4gICAgICAgICAgICBsaWZlV2FybklucHV0KCkgeyB0aGlzLmlzRGlydHkgPSB0cnVlOyB9LFxyXG4gICAgICAgICAgICB0b29sTmFtZSgpIHsgdGhpcy5pc0RpcnR5ID0gdHJ1ZTsgfSxcclxuICAgICAgICAgICAgdG9vbE1vZGVsKCkgeyB0aGlzLmlzRGlydHkgPSB0cnVlOyB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBtZXRob2RzOiB7XHJcbiAgICAgICAgICAgIC8v5p+l6K+i5b2T5YmN5pWw6YeH5pWw77yM5L2c5Li65LiL5YiA6K6h5pWw5a6e5pe25pi+56S6XHJcbiAgICAgICAgICAgIGFzeW5jIGZldGNoQ3VycmVudENqTnVtKHRvb2xObykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm1hY2hpbmVObykgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuJHBvc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICcvV29tZGFhL0dldFdvbWRhYXNCeVNob3cnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeSh7IG1hY2hpbmVObzogdGhpcy5tYWNoaW5lTm8gfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5zdGF0dXMgPT09IDAgJiYgQXJyYXkuaXNBcnJheShyZXMuZGF0YT8udGJCaWxsTGlzdCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZm91bmQgPSByZXMuZGF0YS50YkJpbGxMaXN0LmZpbmQoeCA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeC5jdXR0ZXJJZCA9PT0gdG9vbE5vIHx8IHguY3V0dGVSX0lEID09PSB0b29sTm9cclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kID8gKGZvdW5kLkN1cnJlbnRDak51bSA/PyBmb3VuZC5jdXJyZW50Q2pOdW0gPz8gbnVsbCkgOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ+iOt+WPlmN1cnJlbnRDak51beWksei0pScsIGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAvLyDmlrDlop7vvJrliLfmlrDmjInpkq7lpITnkIbmlrnms5VcclxuICAgICAgICAgICAgYXN5bmMgaGFuZGxlUmVmcmVzaCgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2hUb29scygnJyk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tYWNoaW5lTm8gJiYgdGhpcy53b3JrT3JkZXJObykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZmV0Y2hGb3JtRGF0YSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZmV0Y2hEZWZhdWx0VG9vbEZyb21Xb3JrT3JkZXIoKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyDliLfmlrDlkI7otYvlgLznrKzkuIDooYwgY3VycmVudENqTnVtXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudG9vbFJlY29yZHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRzZXQodGhpcy50b29sUmVjb3Jkc1swXSwgJ2N1cnJlbnRDak51bScsIHRoaXMud29ya09yZGVyQ3VycmVudENqTnVtKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRzaG93TWVzc2FnZSgn5Yi35paw5a6M5oiQJyk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIC8vIOiHquWKqOS/neWtmO+8muWQr+WKqFxyXG4gICAgICAgICAgICBzdGFydEF1dG9TYXZlKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmF1dG9TYXZlRW5hYmxlZCkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdG9wQXV0b1NhdmUoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXV0b1NhdmVUaW1lciA9IHNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dG9TYXZlVGljaygpO1xyXG4gICAgICAgICAgICAgICAgfSwgdGhpcy5hdXRvU2F2ZUludGVydmFsTXMpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAvLyDoh6rliqjkv53lrZjvvJrlgZzmraJcclxuICAgICAgICAgICAgc3RvcEF1dG9TYXZlKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYXV0b1NhdmVUaW1lcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5hdXRvU2F2ZVRpbWVyKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dG9TYXZlVGltZXIgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAvLyDoh6rliqjkv53lrZjvvJrmr4/mrKHlrprml7bmiafooYzml7bnmoTpgLvovpFcclxuICAgICAgICAgICAgYXN5bmMgYXV0b1NhdmVUaWNrKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmF1dG9TYXZlRW5hYmxlZCkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzRGlydHkpIHJldHVybjtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnN1Ym1pdHRpbmcgfHwgdGhpcy5sb2FkaW5nRm9ybSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGZuID0gdGhpcy5hdXRvU2F2ZUFjdGlvbk5hbWUgJiYgdHlwZW9mIHRoaXNbdGhpcy5hdXRvU2F2ZUFjdGlvbk5hbWVdID09PSAnZnVuY3Rpb24nXHJcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzW3RoaXMuYXV0b1NhdmVBY3Rpb25OYW1lXVxyXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICAgICAgICAgIGlmICghZm4pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ+iHquWKqOS/neWtmO+8muacquaJvuWIsOaWueazlScsIHRoaXMuYXV0b1NhdmVBY3Rpb25OYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Ym1pdHRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGZuLmNhbGwodGhpcyk7IC8vIOiwg+eUqOS/neWtmOaWueazle+8iOS+i+WmgiBoYW5kbGVVcFRvb2zvvIlcclxuICAgICAgICAgICAgICAgICAgICAvLyDlpoLmnpzkv53lrZjmiJDlip/vvIzmuIXohI/moIforrDvvIjkv53lrZjmlrnms5XlhoXpg6joi6XlpLHotKXmsqHmnInmipvlh7rlj6/kv53mjIHmraTmlrnlvI/vvIlcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzRGlydHkgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCfoh6rliqjkv53lrZjlpLHotKXvvJonLCBlKTtcclxuICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJtaXR0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAvLyDmlrDlop7vvJrlr7/lkb3mr5TpooTorablgLzlvZLkuIDljJYgKOi/lOWbniAwfjEg5oiWIG51bGwpXHJcbiAgICAgICAgICAgIG5vcm1hbGl6ZUxpZmVXYXJuKHYpIHtcclxuICAgICAgICAgICAgICAgIGlmICh2ID09IG51bGwpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmF3ID0gU3RyaW5nKHYpLnRyaW0oKS5yZXBsYWNlKC9bJe+8hV0vZywgJycpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJhdyA9PT0gJycpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbnVtID0gTnVtYmVyKHJhdyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWlzRmluaXRlKG51bSkgfHwgbnVtIDw9IDApIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bSA+IDEgPyAobnVtIC8gMTAwKSA6IG51bTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgb3BlblRvb2xEaWFsb2coKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dUb29sRGlhbG9nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMucGFnZUluZGV4ID0gMTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2hUb29scyh0aGlzLnNlYXJjaEtleSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNsb3NlVG9vbERpYWxvZygpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd1Rvb2xEaWFsb2cgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgYXN5bmMgZmV0Y2hUb29scyhzZWFyY2hLZXkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZ1Rvb2xzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy4kcG9zdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJy9NZXNDdXR0ZXJMZWRnZXIvUXVlcnlUb29scycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaEtleSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VJbmRleDogdGhpcy5wYWdlSW5kZXgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5zdGF0dXMgPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IEFycmF5LmlzQXJyYXkocmVzLmRhdGEpID8gcmVzLmRhdGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKHJlcy5kYXRhICYmIHJlcy5kYXRhLnRiQmlsbExpc3QpID8gcmVzLmRhdGEudGJCaWxsTGlzdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKHJlcy5kYXRhICYmIHJlcy5kYXRhLmRhdGEpID8gcmVzLmRhdGEuZGF0YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFtdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2V0RmllbGQgPSAob2JqLCAuLi5rZXlzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGsgb2Yga2V5cykgaWYgKG9iaj8uW2tdICE9PSB1bmRlZmluZWQgJiYgb2JqPy5ba10gIT09IG51bGwpIHJldHVybiBvYmpba107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOi/memHjOmcgOimgeaKiiBsaWZlV2FybiDlrZfmrrXkuZ/luKblh7rmnaVcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwcGVkID0gKHBheWxvYWQgfHwgW10pLm1hcCh0ID0+ICh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBubzogZ2V0RmllbGQodCwgJ2N1dHRlcklkJywgJ0NVVFRFUl9JRCcsICdjdXR0ZVJfSUQnLCAnZGFBMDAxJywgJ25vJyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBnZXRGaWVsZCh0LCAnY3V0dGVyTmFtZScsICdDVVRURVJfTkFNRScsICdjdXR0ZVJfTkFNRScsICduYW1lJyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbDogZ2V0RmllbGQodCwgJ2N1dHRlck1vZGVsJywgJ0NVVFRFUl9NT0RFTCcsICdjdXR0ZVJfTU9ERUwnLCAnbW9kZWwnKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpZmVXYXJuOiBnZXRGaWVsZCh0LCAnbW9kbExpZmVXb3JuaW5nJywgJ2xpZmVXYXJuJywgJ0xJRkVfV0FSTicsICdsaWZFX1dBUk4nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlcmVkVG9vbHMgPSBtYXBwZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9vbExpc3QgPSBtYXBwZWQuc2xpY2UoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRvdGFsRnJvbVJlcyA9IE51bWJlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5kYXRhPy50b3RhbCA/PyByZXMuZGF0YT8udG90YWxDb3VudCA/PyByZXMudG90YWwgPz8gcmVzLnRvdGFsQ291bnQgPz8gbWFwcGVkLmxlbmd0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvdGFsID0gTnVtYmVyLmlzRmluaXRlKHRvdGFsRnJvbVJlcykgPyB0b3RhbEZyb21SZXMgOiBtYXBwZWQubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wYWdlSW5kZXggPiB0aGlzLnRvdGFsUGFnZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFnZUluZGV4ID0gdGhpcy50b3RhbFBhZ2VzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kc2hvd01lc3NhZ2UocmVzLm1lc3NhZ2UgfHwgJ+afpeivouWksei0pScpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2ZldGNoVG9vbHMg6ZSZ6K+v77yaJywgZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiRzaG93TWVzc2FnZSgn5p+l6K+i5YiA5YW35aSx6LSl77yM6K+35qOA5p+l572R57uc5oiW5o6l5Y+jJyk7XHJcbiAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZ1Rvb2xzID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGFzeW5jIHByZXZQYWdlKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGFnZUluZGV4ID4gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFnZUluZGV4LS07XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5mZXRjaFRvb2xzKHRoaXMuc2VhcmNoS2V5KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgYXN5bmMgbmV4dFBhZ2UoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wYWdlSW5kZXggPCB0aGlzLnRvdGFsUGFnZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhZ2VJbmRleCsrO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZmV0Y2hUb29scyh0aGlzLnNlYXJjaEtleSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG9uU2VhcmNoS2V5SW5wdXQoKSB7XHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fc2VhcmNoVGltZXIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2VhcmNoVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFRvb2woKTtcclxuICAgICAgICAgICAgICAgIH0sIDMwMCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGFzeW5jIHNlYXJjaFRvb2woKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhZ2VJbmRleCA9IDE7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmZldGNoVG9vbHModGhpcy5zZWFyY2hLZXkpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZWxlY3RUb29sKHRvb2wpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUb29sTm8gPSB0b29sLm5vO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b29sTmFtZSA9IHRvb2wubmFtZTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG9vbE1vZGVsID0gdG9vbC5tb2RlbDtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlVG9vbE5vID0gdG9vbC5ubztcclxuICAgICAgICAgICAgICAgIC8vIOaWsOWinu+8muW4puWHuuWvv+WRveavlOmihOitpuWAvFxyXG4gICAgICAgICAgICAgICAgaWYgKHRvb2wubGlmZVdhcm4gIT09IHVuZGVmaW5lZCAmJiB0b29sLmxpZmVXYXJuICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5qC85byP5YyW5Li655m+5YiG5q+U5a2X56ym5LiyXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2FybiA9IE51bWJlcih0b29sLmxpZmVXYXJuKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxpZmVXYXJuSW5wdXQgPSB3YXJuIDw9IDEgPyAod2FybiAqIDEwMCkudG9GaXhlZCgwKSA6IHdhcm4udG9GaXhlZCgwKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5saWZlV2FybklucHV0ID0gJyc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNvbmZpcm1Ub29sKCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93VG9vbERpYWxvZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBhc3luYyBzZXRVc2VMaW1pdCgpIHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZFRvb2xObykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJHNob3dNZXNzYWdlKCfor7fpgInmi6nliIDlhbflkI7lho3orr7nva7kuIrpmZAnKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2ID0gTnVtYmVyKHRoaXMudXNlTGltaXRJbnB1dCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNOYU4odikgfHwgdiA8PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kc2hvd01lc3NhZ2UoJ+ivt+i+k+WFpeacieaViOeahOS9v+eUqOS4iumZkCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMudG9vbFJlY29yZHMgPSB0aGlzLnRvb2xSZWNvcmRzLm1hcChyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoci5ubyA9PT0gdGhpcy5zZWxlY3RlZFRvb2xObykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5yLCB1c2VMaW1pdDogdiB9O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcjtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b29sTGlzdCA9IHRoaXMudG9vbExpc3QubWFwKHQgPT4gdC5ubyA9PT0gdGhpcy5zZWxlY3RlZFRvb2xObyA/IHsgLi4udCwgdXNlTGltaXQ6IHYgfSA6IHQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kc2hvd01lc3NhZ2UoJ+S9v+eUqOS4iumZkOW3suiuvue9ru+8iOS7heWJjeerr+aYvuekuu+8iScpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAvLyDkuIrliIDml7bkvKDpgJIgc2RqcyA9IOW3peWNlSBjdXJyZW50Q2pOdW1cclxuICAgICAgICAgICAgYXN5bmMgaGFuZGxlVXBUb29sKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLndvcmtPcmRlck5vKSB7IHRoaXMuJHNob3dNZXNzYWdlKCflt6XljZXlj7fkuI3og73kuLrnqbonKTsgcmV0dXJuOyB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMubWFjaGluZU5vKSB7IHRoaXMuJHNob3dNZXNzYWdlKCfmnLrlj7Dlj7fkuI3og73kuLrnqbonKTsgcmV0dXJuOyB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRUb29sTm8pIHsgdGhpcy4kc2hvd01lc3NhZ2UoJ+WIgOWFt+e8luWPt+S4jeiDveS4uuepuicpOyByZXR1cm47IH1cclxuICAgICAgICAgICAgICAgIC8v5LiK5YiA5by65Yi25b2V5YWl5L2/55So5LiK6ZmQXHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMudXNlTGltaXRJbnB1dCkgeyB0aGlzLiRzaG93TWVzc2FnZSgn5L2/55So5LiK6ZmQ5LiN6IO95Li656m6Jyk7IHJldHVybjsgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgdXNlTGltaXQgPSBOdW1iZXIodGhpcy51c2VMaW1pdElucHV0KTtcclxuICAgICAgICAgICAgICAgIGlmIChpc05hTih1c2VMaW1pdCkgfHwgdXNlTGltaXQgPD0gMCkgeyB0aGlzLiRzaG93TWVzc2FnZSgn6K+36L6T5YWl5pyJ5pWI55qE5L2/55So5LiK6ZmQJyk7IHJldHVybjsgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIHNkanMg5L2/55So5bel5Y2VIGN1cnJlbnRDak51bVxyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2RqcyA9IHRoaXMud29ya09yZGVyQ3VycmVudENqTnVtICE9IG51bGwgPyBOdW1iZXIodGhpcy53b3JrT3JkZXJDdXJyZW50Q2pOdW0pIDogbnVsbDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxpZmVXYXJuUmF0aW8gPSB0aGlzLm5vcm1hbGl6ZUxpZmVXYXJuKHRoaXMubGlmZVdhcm5JbnB1dCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHdvcmtPcmRlck5vOiB0aGlzLndvcmtPcmRlck5vLFxyXG4gICAgICAgICAgICAgICAgICAgIG1hY2hpbmVObzogdGhpcy5tYWNoaW5lTm8sXHJcbiAgICAgICAgICAgICAgICAgICAgdG9vbE5vOiB0aGlzLnNlbGVjdGVkVG9vbE5vLFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICfkuIrmnLonLFxyXG4gICAgICAgICAgICAgICAgICAgIHVzZUxpbWl0LFxyXG4gICAgICAgICAgICAgICAgICAgIHNkanMsLy8g5LiK5YiA6K6h5pWw77yI5bel5Y2V5b2T5YmN5pWw6YeH77yJXHJcbiAgICAgICAgICAgICAgICAgICAgbW9kbExpZmVXb3JuaW5nOiBsaWZlV2FyblJhdGlvIC8vIOaWsOWinlxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJtaXR0aW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLiRwb3N0KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnL01lc0N1dHRlckxlZGdlci9TdWJtaXRUb29sQWN0aW9uJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkocGF5bG9hZCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5kYXRhICYmIHJlcy5kYXRhLm91dFN1bSA9PT0gXCIwXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdW5pLnNob3dUb2FzdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogcmVzLmRhdGEub3V0TXNnIHx8ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2Vycm9yJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzLmRhdGEgJiYgcmVzLmRhdGEub3V0TXNnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuaS5zaG93VG9hc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHJlcy5kYXRhLm91dE1zZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb246ICdub25lJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5ZCO57ut6YC76L6R57un57ut5omn6KGMXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5zdGF0dXMgPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5mZXRjaEZvcm1EYXRhKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJHNob3dNZXNzYWdlKCfkuIrliIDmj5DkuqTlpLHotKXvvIzor7fmo4Dmn6XnvZHnu5wnKTtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7IC8vIOaKm+WHuuS7peS+v+iHquWKqOS/neWtmOmAu+i+keaNleiOt+W5tuS/neeVmSBpc0RpcnR5XHJcbiAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3VibWl0dGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAvLyDkuIvliIDml7bkvKDpgJIgeGRqcyA9IOW3peWNlSBjdXJyZW50Q2pOdW1cclxuICAgICAgICAgICAgYXN5bmMgaGFuZGxlRG93blRvb2woKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMud29ya09yZGVyTm8pIHsgdGhpcy4kc2hvd01lc3NhZ2UoJ+W3peWNleWPt+S4jeiDveS4uuepuicpOyByZXR1cm47IH1cclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5tYWNoaW5lTm8pIHsgdGhpcy4kc2hvd01lc3NhZ2UoJ+acuuWPsOWPt+S4jeiDveS4uuepuicpOyByZXR1cm47IH1cclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZFRvb2xObykgeyB0aGlzLiRzaG93TWVzc2FnZSgn5YiA5YW357yW5Y+35LiN6IO95Li656m6Jyk7IHJldHVybjsgfVxyXG4gICAgICAgICAgICAgICAgLy/kuIvliIDkuI3lvLrliLblvZXlhaXkvb/nlKjkuIrpmZBcclxuICAgICAgICAgICAgICAgIC8vaWYgKCF0aGlzLnVzZUxpbWl0SW5wdXQpIHsgdGhpcy4kc2hvd01lc3NhZ2UoJ+S9v+eUqOS4iumZkOS4jeiDveS4uuepuicpOyByZXR1cm47IH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IHVzZUxpbWl0ID0gTnVtYmVyKHRoaXMudXNlTGltaXRJbnB1dCk7XHJcbiAgICAgICAgICAgICAgICAvL2lmIChpc05hTih1c2VMaW1pdCkgfHwgdXNlTGltaXQgPD0gMCkgeyB0aGlzLiRzaG93TWVzc2FnZSgn6K+36L6T5YWl5pyJ5pWI55qE5L2/55So5LiK6ZmQJyk7IHJldHVybjsgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIOS4i+WIgOiuoeaVsOWQjOagt+WPluW3peWNleacgOaWsOmHh+mbhuaVsFxyXG4gICAgICAgICAgICAgICAgY29uc3QgeGRqcyA9IHRoaXMud29ya09yZGVyQ3VycmVudENqTnVtICE9IG51bGwgPyBOdW1iZXIodGhpcy53b3JrT3JkZXJDdXJyZW50Q2pOdW0pIDogbnVsbDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxpZmVXYXJuUmF0aW8gPSB0aGlzLm5vcm1hbGl6ZUxpZmVXYXJuKHRoaXMubGlmZVdhcm5JbnB1dCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHdvcmtPcmRlck5vOiB0aGlzLndvcmtPcmRlck5vLFxyXG4gICAgICAgICAgICAgICAgICAgIG1hY2hpbmVObzogdGhpcy5tYWNoaW5lTm8sXHJcbiAgICAgICAgICAgICAgICAgICAgdG9vbE5vOiB0aGlzLnNlbGVjdGVkVG9vbE5vLFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICfkuIvmnLonLFxyXG4gICAgICAgICAgICAgICAgICAgIHVzZUxpbWl0LFxyXG4gICAgICAgICAgICAgICAgICAgIHhkanMsLy8g5LiL5YiA6K6h5pWwXHJcbiAgICAgICAgICAgICAgICAgICAgbW9kbExpZmVXb3JuaW5nOiBsaWZlV2FyblJhdGlvIC8vIOaWsOWinlxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJtaXR0aW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLiRwb3N0KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnL01lc0N1dHRlckxlZGdlci9TdWJtaXRUb29sQWN0aW9uJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkocGF5bG9hZCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5kYXRhICYmIHJlcy5kYXRhLm91dFN1bSA9PT0gXCIwXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdW5pLnNob3dUb2FzdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogcmVzLmRhdGEub3V0TXNnIHx8ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2Vycm9yJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzLmRhdGEgJiYgcmVzLmRhdGEub3V0TXNnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuaS5zaG93VG9hc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHJlcy5kYXRhLm91dE1zZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb246ICdub25lJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5ZCO57ut6YC76L6R57un57ut5omn6KGMXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5zdGF0dXMgPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5mZXRjaEZvcm1EYXRhKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJHNob3dNZXNzYWdlKCfkuIvliIDmj5DkuqTlpLHotKXvvIzor7fmo4Dmn6XnvZHnu5wnKTtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3VibWl0dGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjYW5jZWwoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVG9vbE5vID0gJyc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvb2xOYW1lID0gJyc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvb2xNb2RlbCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51c2VMaW1pdElucHV0ID0gJyc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpZmVXYXJuSW5wdXQgPSAnJzsgLy8g5paw5aKe77ya5riF56m6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRGlydHkgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgYXN5bmMgZmV0Y2hGb3JtRGF0YSgpIHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy53b3JrT3JkZXJObyB8fCAhdGhpcy5tYWNoaW5lTm8pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ+W3peWNleWPt+aIluacuuWPsOWPt+S4uuepuu+8jOi3s+i/h+iOt+WPluihqOWNleaVsOaNricpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZ0Zvcm0gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgICAgICAgICAgICAgICB3b3JrT3JkZXJObzogdGhpcy53b3JrT3JkZXJOby50cmltKCksXHJcbiAgICAgICAgICAgICAgICAgICAgbWFjaGluZU5vOiB0aGlzLm1hY2hpbmVOby50cmltKClcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuJHBvc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICcvTWVzQ3V0dGVyTGVkZ2VyL0dldEZvcm1EYXRhJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkocGF5bG9hZCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5zdGF0dXMgIT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kc2hvd01lc3NhZ2UocmVzLm1lc3NhZ2UgfHwgJ+iOt+WPluihqOWNleaVsOaNruWksei0pScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvb2xSZWNvcmRzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlzdCA9IEFycmF5LmlzQXJyYXkocmVzLmRhdGEpID8gcmVzLmRhdGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiAocmVzLmRhdGEgJiYgcmVzLmRhdGEudGJCaWxsTGlzdCkgPyByZXMuZGF0YS50YkJpbGxMaXN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChyZXMuZGF0YSAmJiByZXMuZGF0YS5kYXRhKSA/IHJlcy5kYXRhLmRhdGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFtdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBnZXRGaWVsZCA9IChvYmosIC4uLmtleXMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBrIG9mIGtleXMpIGlmIChvYmo/LltrXSAhPT0gdW5kZWZpbmVkICYmIG9iaj8uW2tdICE9PSBudWxsKSByZXR1cm4gb2JqW2tdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXBwZWQgPSAobGlzdCB8fCBbXSkubWFwKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cFRpbWVSYXcgPSBnZXRGaWVsZCh0LCAndVBfVElNRScsICdVUF9USU1FJywgJ3VQVGltZScsICdVUFRJTUUnLCAnVXBUaW1lJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvd25UaW1lUmF3ID0gZ2V0RmllbGQodCwgJ2Rvd05fVElNRScsICdET1dOX1RJTUUnLCAnZG93blRpbWUnLCAnRE9XTlRJTUUnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlmZVdhcm5SYXcgPSBnZXRGaWVsZCh0LCAnbGlmRV9XQVJOJywgJ0xJRkVfV0FSTicsICdsaWZlV2FybicsICdMSUZFV0FSTicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50Q2pOdW0gPSBnZXRGaWVsZCh0LCAnY3VycmVudENqTnVtJywgJ0NVUlJFTlRDSk5VTScsICdDdXJyZW50Q2pOdW0nKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVzZUNvdW50ID0gZ2V0RmllbGQodCwgJ3VzRV9DT1VOVCcsICdVU0VfQ09VTlQnLCAndXNlQ291bnQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXNlTGltaXQgPSBnZXRGaWVsZCh0LCAndXNFX0xJTUlUJywgJ1VTRV9MSU1JVCcsICd1c2VMaW1pdCcpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBlcmNlbnQgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzZUNvdW50ICE9IG51bGwgJiYgdXNlTGltaXQgIT0gbnVsbCAmJiAhaXNOYU4odXNlQ291bnQpICYmICFpc05hTih1c2VMaW1pdCkgJiYgTnVtYmVyKHVzZUxpbWl0KSA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmNlbnQgPSAoKE51bWJlcih1c2VDb3VudCkgLyBOdW1iZXIodXNlTGltaXQpKSAqIDEwMCkudG9GaXhlZCgwKSArICclJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyc2VOdW1iZXIgPSB2ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ID09PSBudWxsIHx8IHYgPT09IHVuZGVmaW5lZCB8fCB2ID09PSAnJykgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzID0gU3RyaW5nKHYpLnJlcGxhY2UoL1ss77yFJV0vZywgJycpLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG4gPSBwYXJzZUZsb2F0KHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShuKSA/IG4gOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXRQZXJjZW50ID0gbiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA9PT0gbnVsbCB8fCBuID09PSB1bmRlZmluZWQgfHwgaXNOYU4obikpIHJldHVybiAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuIDw9IDEpIHJldHVybiBgJHsobiAqIDEwMCkudG9GaXhlZCgwKX0lYDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtOdW1iZXIobikudG9GaXhlZCgwKX0lYDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlmZVdhcm5OdW0gPSBwYXJzZU51bWJlcihsaWZlV2FyblJhdyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgd2FyblN0YXR1cyA9IGdldEZpZWxkKHQsICdzdGF0dXMnLCAnU1RBVFVTJykgfHwgJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaWZlV2Fybk51bSAhPT0gbnVsbCAmJiB1c2VDb3VudCAhPSBudWxsICYmIHVzZUxpbWl0ICE9IG51bGwgJiYgIWlzTmFOKHVzZUNvdW50KSAmJiAhaXNOYU4odXNlTGltaXQpICYmIE51bWJlcih1c2VMaW1pdCkgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwZXJjZW50TnVtID0gTnVtYmVyKHVzZUNvdW50KSAvIE51bWJlcih1c2VMaW1pdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuU3RhdHVzID0gKHBlcmNlbnROdW0gPj0gbGlmZVdhcm5OdW0pID8gJ+mihOitpicgOiAn5q2j5bi4JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5TdGF0dXMgPSB3YXJuU3RhdHVzIHx8ICfmnKrnn6UnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGdldEZpZWxkKHQsICdpZCcsICdJRCcpIHx8IGAke2dldEZpZWxkKHQsICdjdXR0ZVJfSUQnKSB8fCBnZXRGaWVsZCh0LCAnQ1VUVEVSX0lEJykgfHwgJyd9LSR7dXBUaW1lUmF3IHx8ICcnfWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBubzogZ2V0RmllbGQodCwgJ2N1dHRlUl9JRCcsICdDVVRURVJfSUQnLCAnY3V0dGVySWQnLCAnbm8nKSB8fCAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGdldEZpZWxkKHQsICdjdXR0ZVJfTkFNRScsICdDVVRURVJfTkFNRScsICdjdXR0ZXJOYW1lJywgJ25hbWUnKSB8fCAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwVGltZTogdGhpcy5mb3JtYXREYXRlVGltZSh1cFRpbWVSYXcpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBDb3VudDogZ2V0RmllbGQodCwgJ3VQX0NPVU5UJywgJ1VQX0NPVU5UJywgJ3VwQ291bnQnKSA/PyAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvd25UaW1lOiB0aGlzLmZvcm1hdERhdGVUaW1lKGRvd25UaW1lUmF3KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvd25Db3VudDogZ2V0RmllbGQodCwgJ2Rvd05fQ09VTlQnLCAnRE9XTl9DT1VOVCcsICdkb3duQ291bnQnKSA/PyAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZUNvdW50OiB1c2VDb3VudCA/PyAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZUxpbWl0OiB1c2VMaW1pdCA/PyAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpZmVQZXJjZW50OiBwZXJjZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlmZVdhcm46IGZvcm1hdFBlcmNlbnQobGlmZVdhcm5OdW0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FyblN0YXR1cyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDak51bVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyDmlrDlop7vvJrmjInkuIrliIDml7bpl7TpmY3luo/mjpLluo/vvIjotormmZrnmoTotorkuIrpnaLvvIlcclxuICAgICAgICAgICAgICAgICAgICBtYXBwZWQuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDml7bpl7TmoLzlvI/lpoIgXCIxMC0yNCAxNjowM1wi77yM6L2s5Li6IERhdGUg5a+56LGh5q+U6L6DXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlID0gcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXMpIHJldHVybiAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g6KGl5bm05Lu977yM5YGH6K6+6YO95piv5LuK5bm0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB5ZWFyID0gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGAke3llYXJ9LSR7cy5yZXBsYWNlKC8tL2csICctJyl9OjAwYCkuZ2V0VGltZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2UoYi51cFRpbWUpIC0gcGFyc2UoYS51cFRpbWUpOyAvLyDms6jmhI/ov5nph4zpobrluo/lj43ov4fmnaVcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b29sUmVjb3JkcyA9IG1hcHBlZDtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0b3RhbEZyb21SZXMgPSBOdW1iZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5kYXRhPy50b3RhbCA/PyByZXMuZGF0YT8udG90YWxDb3VudCA/PyByZXMudG90YWwgPz8gcmVzLnRvdGFsQ291bnQgPz8gbWFwcGVkLmxlbmd0aFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b3RhbCA9IE51bWJlci5pc0Zpbml0ZSh0b3RhbEZyb21SZXMpID8gdG90YWxGcm9tUmVzIDogbWFwcGVkLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcign6I635Y+W6KGo5Y2V5pWw5o2u6ZSZ6K+vOicsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiRzaG93TWVzc2FnZSgn6I635Y+W5pWw5o2u5aSx6LSl77yM6K+35qOA5p+l572R57uc6L+e5o6lJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b29sUmVjb3JkcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmdGb3JtID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIC8vIOiHquWKqOW4puWHuuW3peWNleWIgOWFt+S/oeaBr++8jOW5tuiOt+WPluW3peWNleacgOaWsOmHh+mbhuaVsFxyXG4gICAgICAgICAgICBhc3luYyBmZXRjaERlZmF1bHRUb29sRnJvbVdvcmtPcmRlcigpIHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5tYWNoaW5lTm8pIHJldHVybjtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy4kcG9zdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJy9Xb21kYWEvR2V0V29tZGFhc0J5U2hvdycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KHsgbWFjaGluZU5vOiB0aGlzLm1hY2hpbmVObyB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzLnN0YXR1cyA9PT0gMCAmJiBBcnJheS5pc0FycmF5KHJlcy5kYXRhPy50YkJpbGxMaXN0KSAmJiByZXMuZGF0YS50YkJpbGxMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3JkZXIgPSByZXMuZGF0YS50YkJpbGxMaXN0WzBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g5paw5aKe77ya5L+d5a2Y5bel5Y2V5pWw5o2u77yM55So5LqO5oql6K+V5Lqn5pWwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3JkZXIgPSBvcmRlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcmRlcklkID0gb3JkZXIuaWQgfHwgb3JkZXIuSUQgfHwgb3JkZXIub3JkZXJJZCB8fCBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRvb2xObyA9IG9yZGVyLmN1dHRlcklkIHx8IG9yZGVyLmN1dHRlUl9JRCB8fCAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b29sTmFtZSA9IG9yZGVyLmN1dHRlck5hbWUgfHwgb3JkZXIuY3V0dGVSX05BTUUgfHwgJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9vbE1vZGVsID0gb3JkZXIuY3V0dGVyTW9kZWwgfHwgb3JkZXIuY3V0dGVSX01PREVMIHx8ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDlhbPplK7vvJrojrflj5blt6XljZXmnIDmlrDph4fpm4bmlbBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53b3JrT3JkZXJDdXJyZW50Q2pOdW0gPSBvcmRlci5DdXJyZW50Q2pOdW0gPz8gb3JkZXIuY3VycmVudENqTnVtID8/IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOaWsOWinu+8muiHquWKqOWhq+WFheWvv+WRveavlOmihOitpuWAvFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3JkZXIubW9kbExpZmVXb3JuaW5nICE9PSB1bmRlZmluZWQgJiYgb3JkZXIubW9kbExpZmVXb3JuaW5nICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3YXJuID0gTnVtYmVyKG9yZGVyLm1vZGxMaWZlV29ybmluZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxpZmVXYXJuSW5wdXQgPSB3YXJuIDw9IDEgPyAod2FybiAqIDEwMCkudG9GaXhlZCgwKSA6IHdhcm4udG9GaXhlZCgwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGlmZVdhcm5JbnB1dCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53b3JrT3JkZXJDdXJyZW50Q2pOdW0gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9yZGVyID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3JkZXJJZCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2Fybign6Ieq5Yqo5bim5Ye65bel5Y2V5YiA5YW35aSx6LSlJywgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53b3JrT3JkZXJDdXJyZW50Q2pOdW0gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3JkZXIgPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9yZGVySWQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBmb3JtYXREYXRlVGltZShkYXRlVGltZVN0cikge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFkYXRlVGltZVN0cikgcmV0dXJuICcnO1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzID0gU3RyaW5nKGRhdGVUaW1lU3RyKS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKC9eXFxkezEwfSQvLnRlc3QocykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZCA9IG5ldyBEYXRlKE51bWJlcihzKSAqIDEwMDApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7ZC5nZXRNb250aCgpICsgMX0tJHtkLmdldERhdGUoKX0gJHtkLmdldEhvdXJzKCl9OiR7U3RyaW5nKGQuZ2V0TWludXRlcygpKS5wYWRTdGFydCgyLCAnMCcpfWA7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgvXlxcZHsxM30kLy50ZXN0KHMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGQgPSBuZXcgRGF0ZShOdW1iZXIocykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7ZC5nZXRNb250aCgpICsgMX0tJHtkLmdldERhdGUoKX0gJHtkLmdldEhvdXJzKCl9OiR7U3RyaW5nKGQuZ2V0TWludXRlcygpKS5wYWRTdGFydCgyLCAnMCcpfWA7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShkYXRlVGltZVN0cik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc05hTihkYXRlLmdldFRpbWUoKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke2RhdGUuZ2V0TW9udGgoKSArIDF9LSR7ZGF0ZS5nZXREYXRlKCl9ICR7ZGF0ZS5nZXRIb3VycygpfToke1N0cmluZyhkYXRlLmdldE1pbnV0ZXMoKSkucGFkU3RhcnQoMiwgJzAnKX1gO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXRjaCA9IFN0cmluZyhkYXRlVGltZVN0cikubWF0Y2goLyhcXGR7MSw0fVstXFwvXVxcZHsxLDJ9Wy1cXC9dXFxkezEsMn0pLio/KFxcZHsxLDJ9OlxcZHsyfSkvKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2gpIHJldHVybiBgJHttYXRjaFsxXS5yZXBsYWNlKC8tL2csICcvJykucmVwbGFjZSgvXlxcZHs0fVxcLy8sIChtKSA9PiBtKX0gJHttYXRjaFsyXX1gO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZGF0ZVRpbWVTdHIpO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhkYXRlVGltZVN0cik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyDmlrDlop7vvJrpgInmi6nosIPmnLrluIjlgoVcclxuICAgICAgICAgICAgc2VsZWN0VGlhb2ppVXNlcih1KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRpYW9qaVN0YWZmTm8gPSB1O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1RpYW9qaVVzZXJTZWxlY3RTaG93ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRpYW9qaVVzZXJTZWFyY2ggPSAnJztcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIOaWsOWinu+8mumAgeajgOWRvOWPqyArIOaKpeivleS6p+aVsFxyXG4gICAgICAgICAgICBhc3luYyBoYW5kbGVJbnNwZWN0aW9uQ2FsbCgpIHtcclxuICAgICAgICAgICAgICAgIC8vIOmqjOivgeW/heWhq+mhuVxyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnRpYW9qaVN0YWZmTm8pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiRzaG93TWVzc2FnZSgn6K+36YCJ5oup6LCD5py65biI5YKFJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBjb25zdCBva1F0eSA9IE51bWJlcih0aGlzLnRpYW9qaU9rUXR5KTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGJhZFF0eSA9IE51bWJlcih0aGlzLnRpYW9qaUJhZFF0eSk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGlmIChpc05hTihva1F0eSkgfHwgb2tRdHkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kc2hvd01lc3NhZ2UoJ+ivt+i+k+WFpeacieaViOeahOiwg+acuuiJr+WTgeaVsCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgaWYgKGlzTmFOKGJhZFF0eSkgfHwgYmFkUXR5IDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJHNob3dNZXNzYWdlKCfor7fovpPlhaXmnInmlYjnmoTosIPmnLrkuI3oia/lk4HmlbAnKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN0YWZmTm8gPSB0aGlzLnRpYW9qaVN0YWZmTm8uc3BsaXQoJzonKVswXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDak51bSA9IHRoaXMub3JkZXI/LmN1cnJlbnRDak51bSB8fCAwO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAvLyDosIPnlKjmiqXor5XkuqfmlbDmjqXlj6Mo5L2/55So5oql5bel55WM6Z2i55qE5o6l5Y+jKVxyXG4gICAgICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgICAgICAgICAgICAgICBvcmRlck5vOiB0aGlzLndvcmtPcmRlck5vLFxyXG4gICAgICAgICAgICAgICAgICAgIG9yZGVySWQ6IHRoaXMub3JkZXJJZCwgLy8g6ZyA6KaB5LuO5bel5Y2V5pWw5o2u5Lit6I635Y+WXHJcbiAgICAgICAgICAgICAgICAgICAgYmY6IGJhZFF0eSwgLy8gYmbkvKDpgJLkuI3oia/lk4HmlbBcclxuICAgICAgICAgICAgICAgICAgICBzdGFmZk5vOiBzdGFmZk5vLFxyXG4gICAgICAgICAgICAgICAgICAgIGluaXRDak51bTogY3VycmVudENqTnVtIC0gYmFkUXR5IC0gb2tRdHksIC8vIGluaXRDak51bSA9IGN1cnJlbnRDak51bSAtIGJmIC0g6Imv5ZOB5pWwXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudENqTnVtOiBjdXJyZW50Q2pOdW0sXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3RpYW9qaScsIC8vIOagh+ivhuS4uuiwg+acuuaKpeW3pVxyXG4gICAgICAgICAgICAgICAgICAgIHRpYW9qaU9rUXR5OiBva1F0eSwgLy8g5paw5aKeOuiJr+WTgeaVsFxyXG4gICAgICAgICAgICAgICAgICAgIHRpYW9qaUJhZFF0eTogYmFkUXR5IC8vIOaWsOWinjrkuI3oia/lk4HmlbBcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJtaXR0aW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAvLyDosIPnlKjmiqXlt6XnlYzpnaLnmoTmiqXor5XkuqfmlbDmjqXlj6NcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLiRwb3N0KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnL01lc0ludkl0ZW1CYXJjb2Rlcy9BZGRCRlRvQmFyY29kZXMnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBwYXlsb2FkXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5zdGF0dXMgPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRzaG93TWVzc2FnZShyZXMubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kc2hvd01lc3NhZ2UoJ+iwg+acuuaKpeW3peaIkOWKnycpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIOa4heepuui+k+WFpVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGlhb2ppT2tRdHkgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRpYW9qaUJhZFF0eSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIOWIt+aWsOaVsOaNrlxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZmV0Y2hGb3JtRGF0YSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZmV0Y2hEZWZhdWx0VG9vbEZyb21Xb3JrT3JkZXIoKTtcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAvLyDmlrDlop7vvJroh6rliqjlpITnkIbosIPmnLrpgIHmo4DnlYzpnaLnmoTmjInpkq7pgLvovpFcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmF1dG9IYW5kbGVNYWNoaW5lSW5zcGVjdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcign6LCD5py65oql5bel6ZSZ6K+vOicsIGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kc2hvd01lc3NhZ2UoJ+iwg+acuuaKpeW3peWksei0pe+8jOivt+ajgOafpee9kee7nCcpO1xyXG4gICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Ym1pdHRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIOaWsOWinu+8muiHquWKqOWkhOeQhuiwg+acuumAgeajgOeVjOmdoueahOaMiemSrumAu+i+kVxyXG4gICAgICAgICAgICBhc3luYyBhdXRvSGFuZGxlTWFjaGluZUluc3BlY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIDEuIOS9v+eUqCBGaW5kQnlPcmRlck5vIOiOt+WPluiwg+acuumAgeajgOeVjOmdoueahOS4ieS4quaXtumXtFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXR1c1JlcyA9IGF3YWl0IHRoaXMuJHBvc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICcvTWVzT3JkZXJTdGEvRmluZEJ5T3JkZXJObycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVySWQ6IHRoaXMub3JkZXJJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyTm86IHRoaXMud29ya09yZGVyTm9cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghc3RhdHVzUmVzIHx8ICFzdGF0dXNSZXMuZGF0YSB8fCAhc3RhdHVzUmVzLmRhdGEudGJCaWxsTGlzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCfojrflj5blt6XljZXnirbmgIHlpLHotKUnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kc2hvd01lc3NhZ2UoJ+iOt+WPluW3peWNleeKtuaAgeWksei0pScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXR1c0Zvcm0gPSBzdGF0dXNSZXMuZGF0YS50YkJpbGxMaXN0O1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hU3RhcnRUaW1lID0gc3RhdHVzRm9ybS5tYVN0YXJ0VGltZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYVNob3V0VGltZSA9IHN0YXR1c0Zvcm0ubWFTaG91dFRpbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFFbmRUaW1lID0gc3RhdHVzRm9ybS5tYUVuZFRpbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gMi4g5YeG5aSH6ZyA6KaB5pu05paw55qE5pe26Ze05pWw5o2uXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG5lZWRTYXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHVwZGF0ZURhdGEgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBzdGF0dXNGb3JtLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmRlcklkOiB0aGlzLm9yZGVySWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVObzogdGhpcy5tYWNoaW5lTm8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZsYWc6IC0xXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAvLyDorrDlvZXlk6rkupvmk43kvZzooqvmiafooYzkuoZcclxuICAgICAgICAgICAgICAgICAgICBsZXQgYWN0aW9ucyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIDMuIOS7juS4iuWIsOS4i+agueaNruaYvuekuuahhumHjOaYr+WQpuacieaXtumXtOS+neasoeiuvue9rlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOWmguaenOiwg+acuuW8gOWni+aXtumXtOS4uuepuu+8jOiuvue9ruiwg+acuuW8gOWni+aXtumXtFxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghbWFTdGFydFRpbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlRGF0YS5tYVN0YXJ0VGltZSA9IHRoaXMuJGdldERhdGUoJ3l5eXktbW0tZGQgaGgyNDptaTpzcycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVEYXRhLmZsYWcgPSAtMTsgLy8g6LCD5py65byA5aeL55qEZmxhZz0tMVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZWVkU2F2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbnMucHVzaCgn6LCD5py65byA5aeLJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlRGF0YS5tYVN0YXJ0VGltZSA9IG1hU3RhcnRUaW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAvLyDlpoLmnpzpgIHmo4Dlkbzlj6vml7bpl7TkuLrnqbrvvIzorr7nva7pgIHmo4Dlkbzlj6vml7bpl7RcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIW1hU2hvdXRUaW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZURhdGEubWFTaG91dFRpbWUgPSB0aGlzLiRnZXREYXRlKCd5eXl5LW1tLWRkIGhoMjQ6bWk6c3MnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlRGF0YS5mbGFnID0gMTsgLy8g6aaW5qyh6YCB5qOA5ZG85Y+r55qEZmxhZz0xXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRTYXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9ucy5wdXNoKCfpgIHmo4Dlkbzlj6snKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVEYXRhLm1hU2hvdXRUaW1lID0gbWFTaG91dFRpbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOiwg+acuuWujOaIkOaXtumXtOS/neaMgeS4jeWPmFxyXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZURhdGEubWFFbmRUaW1lID0gbWFFbmRUaW1lIHx8ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIDQuIOWmguaenOaciemcgOimgeabtOaWsOeahOaXtumXtO+8jOiwg+eUqOS/neWtmOaOpeWPo1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChuZWVkU2F2ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzYXZlUmVzID0gYXdhaXQgdGhpcy4kcG9zdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICcvTWVzT3JkZXJTdGEvQ2hhbmdlTWFjaGluZVRpbWUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogdXBkYXRlRGF0YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzYXZlUmVzICYmIHNhdmVSZXMuZGF0YSAmJiBzYXZlUmVzLmRhdGEudGJCaWxsTGlzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3VjY2Vzc01zZyA9IGFjdGlvbnMuam9pbign44CBJykgKyAn5oiQ5YqfJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJHNob3dNZXNzYWdlKHN1Y2Nlc3NNc2cpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ+iwg+acuumAgeajgOeVjOmdouaXtumXtOiHquWKqOabtOaWsOaIkOWKnzonLCBhY3Rpb25zKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZhaWxNc2cgPSBhY3Rpb25zLmpvaW4oJ+OAgScpICsgJ+Wksei0pSc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRzaG93TWVzc2FnZShmYWlsTXNnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ+iwg+acuumAgeajgOeVjOmdouaXtumXtOiHquWKqOabtOaWsOWksei0pScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g5omA5pyJ5pe26Ze06YO95bey5a2Y5Zyo77yM5peg6ZyA5pu05pawXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJHNob3dNZXNzYWdlKCfosIPmnLrlvIDlp4vlkozpgIHmo4Dlkbzlj6vlt7LlrozmiJAnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ+iwg+acuuW8gOWni+WSjOmAgeajgOWRvOWPq+aXtumXtOW3suWtmOWcqO+8jOaXoOmcgOabtOaWsCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ+iHquWKqOWkhOeQhuiwg+acuumAgeajgOeVjOmdouWksei0pTonLCBlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJHNob3dNZXNzYWdlKCfoh6rliqjlpITnkIbosIPmnLrpgIHmo4DlpLHotKUnKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyDkuI3kuK3mlq3kuLvmtYHnqIvvvIzlj6rorrDlvZXplJnor69cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIOaWsOWinu+8muiOt+WPluiwg+acuuW4iOWCheWIl+ihqFxyXG4gICAgICAgICAgICBhc3luYyBmZXRjaFRpYW9qaVN0YWZmKCkge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLiRwb3N0KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnL01lc1N0YWZmL0dldEFsbFhTMDEwMUJZdGonIC8vIOS4juaKpeW3peeVjOmdouS9v+eUqOebuOWQjOaOpeWPo1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXMuc3RhdHVzID09PSAwICYmIHJlcy5kYXRhICYmIHJlcy5kYXRhLnRiQmlsbExpc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhZmYgPSByZXMuZGF0YS50YkJpbGxMaXN0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRpYW9qaVVzZXJzID0gc3RhZmYubWFwKHMgPT4gcy5zdGFmZk5vICsgJzonICsgcy5zdGFmZk5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ+iOt+WPluiwg+acuuW4iOWCheWIl+ihqOWksei0pTonLCBlcnIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBtb3VudGVkKCkge1xyXG4gICAgICAgICAgICB0aGlzLmZldGNoVG9vbHMoJycpO1xyXG4gICAgICAgICAgICB0aGlzLm1hY2hpbmVObyA9IHVuaS5nZXRTdG9yYWdlU3luYygnbWFjaGluZU5vJykgfHwgJyc7XHJcbiAgICAgICAgICAgIHRoaXMud29ya09yZGVyTm8gPSB1bmkuZ2V0U3RvcmFnZVN5bmMoJ2RhYTAwMScpIHx8ICcnO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8g5paw5aKe77ya6I635Y+W6LCD5py65biI5YKF5YiX6KGoXHJcbiAgICAgICAgICAgIHRoaXMuZmV0Y2hUaWFvamlTdGFmZigpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMubWFjaGluZU5vICYmIHRoaXMud29ya09yZGVyTm8pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2hGb3JtRGF0YSgpLnRoZW4oYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZmV0Y2hEZWZhdWx0VG9vbEZyb21Xb3JrT3JkZXIoKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyDov5vlhaXpobXpnaLml7botYvlgLznrKzkuIDooYwgY3VycmVudENqTnVtXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudG9vbFJlY29yZHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRzZXQodGhpcy50b29sUmVjb3Jkc1swXSwgJ2N1cnJlbnRDak51bScsIHRoaXMud29ya09yZGVyQ3VycmVudENqTnVtKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2Fybign5py65Y+w5Y+35oiW5bel5Y2V5Y+35Li656m677yM5peg5rOV6I635Y+W6KGo5Y2V5pWw5o2uJyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIOWQr+WKqOiHquWKqOS/neWtmOWumuaXtuWZqFxyXG4gICAgICAgICAgICAvL3RoaXMuc3RhcnRBdXRvU2F2ZSgpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgYmVmb3JlRGVzdHJveSgpIHtcclxuICAgICAgICAgICAgLy8g5riF55CG5a6a5pe25Zmo77yM6Ziy5q2i5YaF5a2Y5rOE5ryPXHJcbiAgICAgICAgICAgIHRoaXMuc3RvcEF1dG9TYXZlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuPC9zY3JpcHQ+XHJcblxyXG48c3R5bGUgc2NvcGVkPlxyXG4gICAgLnRvcC1zZWN0aW9uLWdyaWQge1xyXG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcclxuICAgICAgICBnYXA6IDEycHg7XHJcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMnZoO1xyXG4gICAgICAgIHdpZHRoOiA5OXZ3O1xyXG4gICAgICAgIG1heC13aWR0aDogMTkyMHB4O1xyXG4gICAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xyXG4gICAgICAgIG1hcmdpbi1yaWdodDogYXV0bztcclxuICAgICAgICBwYWRkaW5nOiAxMnB4O1xyXG4gICAgICAgIGJhY2tncm91bmQ6ICNmOGY5ZmE7XHJcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xyXG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNlOWVjZWY7XHJcbiAgICB9XHJcblxyXG4gICAgLmZvcm0tcm93IHtcclxuICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XHJcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xyXG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDtcclxuICAgIH1cclxuXHJcbiAgICAgICAgLmZvcm0tcm93Omxhc3QtY2hpbGQge1xyXG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAuZm9ybS1jZWxsIHtcclxuICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgICAgbWluLXdpZHRoOiAwO1xyXG4gICAgICAgIG1hcmdpbi1yaWdodDogMDtcclxuICAgIH1cclxuXHJcbiAgICAgICAgLmZvcm0tY2VsbDpudGgtY2hpbGQoMSkge1xyXG4gICAgICAgICAgICBmbGV4OiAwIDAgMjglO1xyXG4gICAgICAgICAgICBtaW4td2lkdGg6IDE4MHB4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmZvcm0tY2VsbDpudGgtY2hpbGQoMikge1xyXG4gICAgICAgICAgICBmbGV4OiAwIDAgMzIlO1xyXG4gICAgICAgICAgICBtaW4td2lkdGg6IDE4MHB4O1xyXG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuZm9ybS1jZWxsOm50aC1jaGlsZCgzKSB7XHJcbiAgICAgICAgICAgIGZsZXg6IDAgMCBhdXRvO1xyXG4gICAgICAgICAgICBtaW4td2lkdGg6IDA7XHJcbiAgICAgICAgICAgIG1heC13aWR0aDogMjIwcHg7IC8qIOmZkOWItuacgOWkp+WuveW6pu+8jOmBv+WFjeaSkeW8gCAqL1xyXG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAuZm9ybS1sYWJlbCB7XHJcbiAgICAgICAgd2lkdGg6IGF1dG87XHJcbiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcclxuICAgICAgICBjb2xvcjogIzMzMztcclxuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xyXG4gICAgICAgIG1hcmdpbi1yaWdodDogNHB4O1xyXG4gICAgICAgIGZsZXgtc2hyaW5rOiAwO1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMjJweDtcclxuICAgIH1cclxuXHJcbiAgICAuaW5wdXQge1xyXG4gICAgICAgIHBhZGRpbmc6IDE0cHggMjBweDtcclxuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZGNkZmU2O1xyXG4gICAgICAgIGZsZXg6IDE7XHJcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwO1xyXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcclxuICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmO1xyXG4gICAgICAgIG1pbi13aWR0aDogMDtcclxuICAgICAgICBoZWlnaHQ6IDU2cHggIWltcG9ydGFudDtcclxuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMjJweDtcclxuICAgIH1cclxuXHJcbiAgICAgICAgLmlucHV0LnNtYWxsLWZvbnQge1xyXG4gICAgICAgICAgICAvKiDkuI3orr7nva7lrZfkvZPlpKflsI8gKi9cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5pbnB1dDpkaXNhYmxlZCB7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmNWY3ZmE7XHJcbiAgICAgICAgICAgIGNvbG9yOiAjYzBjNGNjO1xyXG4gICAgICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAuaW5wdXQtd2l0aC11bml0IHtcclxuICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgICAgZ2FwOiAwO1xyXG4gICAgfVxyXG5cclxuICAgICAgICAuaW5wdXQtd2l0aC11bml0IC5pbnB1dCB7XHJcbiAgICAgICAgICAgIHdpZHRoOiA2MHB4ICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICAgIG1pbi13aWR0aDogMCAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDJweCAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMnB4O1xyXG4gICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAycHg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuaW5wdXQtd2l0aC11bml0IC5pbnB1dCB7XHJcbiAgICAgICAgICAgIG1hcmdpbi1yaWdodDogNHB4ICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICAgIHdpZHRoOiA2MHB4ICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICAgIG1pbi13aWR0aDogMCAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIC51bml0LXRleHQge1xyXG4gICAgICAgIG1hcmdpbi1sZWZ0OiAwICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAwICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgZm9udC1zaXplOiAyMnB4ICFpbXBvcnRhbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLmJ0bi1ibHVlLCAuYnRuLWJsdWUubGFyZ2UtYnRuIHtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTg5MGZmO1xyXG4gICAgICAgIGNvbG9yOiB3aGl0ZTtcclxuICAgICAgICBib3JkZXI6IG5vbmU7XHJcbiAgICAgICAgcGFkZGluZzogMTRweCAzMnB4O1xyXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcclxuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcclxuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xyXG4gICAgICAgIGhlaWdodDogNzBweCAhaW1wb3J0YW50O1xyXG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuM3M7XHJcbiAgICAgICAgZmxleC1zaHJpbms6IDA7XHJcbiAgICAgICAgbWluLXdpZHRoOiAxNDBweDtcclxuICAgICAgICBtYXJnaW4tbGVmdDogMjRweDtcclxuICAgIH1cclxuXHJcbiAgICAgICAgLmJ0bi1ibHVlLmxhcmdlLWJ0biB7XHJcbiAgICAgICAgICAgIHBhZGRpbmc6IDAgNjBweDtcclxuICAgICAgICAgICAgbWluLXdpZHRoOiAxODBweDtcclxuICAgICAgICAgICAgaGVpZ2h0OiA3MnB4ICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAwICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4zZW07XHJcbiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDhweCByZ2JhKDI0LDE0NCwyNTUsMC4wOCk7XHJcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiA3MnB4OyAvKiDlnoLnm7TlsYXkuK0gKi9cclxuICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOyAvKiDkv53or4FsaW5lLWhlaWdodOeUn+aViCAqL1xyXG4gICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmJ0bi1ibHVlOmhvdmVyIHtcclxuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzQwYTlmZjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5idG4tYmx1ZTphY3RpdmUge1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDk2ZGQ5O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmJ0bi1ibHVlOmRpc2FibGVkIHtcclxuICAgICAgICAgICAgYmFja2dyb3VuZDogI2JhZTdmZjtcclxuICAgICAgICAgICAgY29sb3I6ICM5MWQ1ZmY7XHJcbiAgICAgICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIC5idXR0b24tcm93IHtcclxuICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgICAgIGdhcDogMzJweDtcclxuICAgICAgICBtYXJnaW46IDJ2aCAwO1xyXG4gICAgfVxyXG5cclxuICAgIC5zYXZlLWJ0biwgLmNhbmNlbC1idG4ge1xyXG4gICAgICAgIHdpZHRoOiAyOCU7XHJcbiAgICAgICAgcGFkZGluZzogMS41dmg7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzAwQTJFOTtcclxuICAgICAgICBjb2xvcjogd2hpdGU7XHJcbiAgICAgICAgYm9yZGVyOiBub25lO1xyXG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XHJcbiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuM3M7XHJcbiAgICAgICAgZm9udC1zaXplOiAyMnB4O1xyXG4gICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XHJcbiAgICAgICAgYm94LXNoYWRvdzogMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcclxuICAgIH1cclxuXHJcbiAgICAuY2FuY2VsLWJ0biB7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTtcclxuICAgICAgICBjb2xvcjogIzMzMztcclxuICAgIH1cclxuXHJcbiAgICAuc2F2ZS1idG46aG92ZXIge1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICM0MGE5ZmY7XHJcbiAgICB9XHJcblxyXG4gICAgLnNhdmUtYnRuOmFjdGl2ZSB7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzA5NmRkOTtcclxuICAgIH1cclxuXHJcbiAgICAuc2F2ZS1idG46ZGlzYWJsZWQsIC5jYW5jZWwtYnRuOmRpc2FibGVkIHtcclxuICAgICAgICBvcGFjaXR5OiAwLjY7XHJcbiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcclxuICAgIH1cclxuXHJcbiAgICAvKiDlvLnnqpfmoLflvI8gKi9cclxuICAgIC5kaWFsb2ctb3ZlcmxheSB7XHJcbiAgICAgICAgcG9zaXRpb246IGZpeGVkO1xyXG4gICAgICAgIHRvcDogMDtcclxuICAgICAgICBsZWZ0OiAwO1xyXG4gICAgICAgIHJpZ2h0OiAwO1xyXG4gICAgICAgIGJvdHRvbTogMDtcclxuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuMTgpO1xyXG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAgICB6LWluZGV4OiAxMDAwO1xyXG4gICAgfVxyXG5cclxuICAgIC5kaWFsb2cge1xyXG4gICAgICAgIGJhY2tncm91bmQ6ICNmZmY7XHJcbiAgICAgICAgcGFkZGluZzogM3ZoIDN2dztcclxuICAgICAgICBib3JkZXItcmFkaXVzOiAxOHB4O1xyXG4gICAgICAgIHdpZHRoOiA5MHZ3O1xyXG4gICAgICAgIG1heC13aWR0aDogMTYwMHB4O1xyXG4gICAgICAgIG1pbi1oZWlnaHQ6IDcwdmg7XHJcbiAgICAgICAgbWF4LWhlaWdodDogODV2aDtcclxuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgICAgIGJveC1zaGFkb3c6IDAgOHB4IDMycHggcmdiYSgwLDAsMCwwLjEyKTtcclxuICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgICB9XHJcblxyXG4gICAgLmZvcm0tZ3JvdXAge1xyXG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgZ2FwOiAxMnB4O1xyXG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMnZoO1xyXG4gICAgICAgIGZsZXgtc2hyaW5rOiAwO1xyXG4gICAgfVxyXG5cclxuICAgICAgICAuZm9ybS1ncm91cCAuaW5wdXQge1xyXG4gICAgICAgICAgICBmbGV4OiAxO1xyXG4gICAgICAgICAgICBtaW4td2lkdGg6IDMwMHB4O1xyXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmOGY4Zjg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIC50b29sLWxpc3Qge1xyXG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xyXG4gICAgICAgIG1hcmdpbjogMXZoIDA7XHJcbiAgICAgICAgZmxleDogMTtcclxuICAgICAgICBvdmVyZmxvdy15OiBhdXRvO1xyXG4gICAgICAgIGdhcDogMTJweDtcclxuICAgICAgICBhbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0O1xyXG4gICAgfVxyXG5cclxuICAgIC50b29sLWJ0biB7XHJcbiAgICAgICAgZmxleDogMCAwIGNhbGMoMjAlIC0gMTBweCk7XHJcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgICAgICBwYWRkaW5nOiAxMHB4IDEycHg7XHJcbiAgICAgICAgYmFja2dyb3VuZDogI2Y1ZjVmNTtcclxuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZDBkMGQwO1xyXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDtcclxuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICAgICAgY29sb3I6ICMzMzM7XHJcbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcclxuICAgICAgICBtaW4taGVpZ2h0OiA1MHB4O1xyXG4gICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXMsIGNvbG9yIDAuMTVzO1xyXG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XHJcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcclxuICAgICAgICBsaW5lLWhlaWdodDogMS40O1xyXG4gICAgfVxyXG5cclxuICAgICAgICAudG9vbC1idG4uYWN0aXZlIHtcclxuICAgICAgICAgICAgYmFja2dyb3VuZDogIzAwQTJFOTtcclxuICAgICAgICAgICAgY29sb3I6ICNmZmY7XHJcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG4gICAgICAgICAgICBib3JkZXI6IDEuNXB4IHNvbGlkICMwMDg2YzI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIC5kaWFsb2ctYWN0aW9ucyB7XHJcbiAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAgICBtYXJnaW4tdG9wOiAydmg7XHJcbiAgICAgICAgcGFkZGluZy10b3A6IDJ2aDtcclxuICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2VlZTtcclxuICAgICAgICBmbGV4LXNocmluazogMDtcclxuICAgIH1cclxuXHJcbiAgICAgICAgLmRpYWxvZy1hY3Rpb25zID4gZGl2OmZpcnN0LWNoaWxkIHtcclxuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAgICAgICAgZ2FwOiAyNHB4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmRpYWxvZy1hY3Rpb25zID4gZGl2Omxhc3QtY2hpbGQge1xyXG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xyXG4gICAgICAgICAgICBnYXA6IDE4cHg7XHJcbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuZGlhbG9nLWFjdGlvbnMgLmJ0bi1ibHVlIHtcclxuICAgICAgICAgICAgcGFkZGluZzogMTBweCAyNHB4O1xyXG4gICAgICAgICAgICBtaW4td2lkdGg6IDEyMHB4O1xyXG4gICAgICAgICAgICBmb250LXNpemU6IDIycHg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIC5idG4tZGlzYWJsZWQge1xyXG4gICAgICAgIGJhY2tncm91bmQ6ICNmMmYyZjI7XHJcbiAgICAgICAgY29sb3I6ICM5OTk7XHJcbiAgICAgICAgYm9yZGVyOiBub25lO1xyXG4gICAgICAgIHBhZGRpbmc6IDEwcHggMjRweDtcclxuICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XHJcbiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcclxuICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xyXG4gICAgICAgIGJveC1zaGFkb3c6IG5vbmU7XHJcbiAgICAgICAgbWluLXdpZHRoOiAxMjBweDtcclxuICAgIH1cclxuXHJcbiAgICAudGFibGUtc2VjdGlvbiB7XHJcbiAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgICAgICBtYXJnaW46IDF2aCAwO1xyXG4gICAgICAgIG92ZXJmbG93LXg6IGF1dG87XHJcbiAgICAgICAgd2lkdGg6IDEwMCU7IC8qIOehruS/neihqOagvOWuueWZqOWNoOa7oeWuveW6piAqL1xyXG4gICAgfVxyXG5cclxuICAgIHRhYmxlLnN0eWxlZC10YWJsZSB7XHJcbiAgICAgICAgbWF4LXdpZHRoOiAxODAwcHg7IC8qIOS7jjE2MDBweOWinuWKoOWIsDE4MDBweCAqL1xyXG4gICAgICAgIHdpZHRoOiA5OHZ3OyAvKiDku445NXZ35aKe5Yqg5YiwOTh2dyAqL1xyXG4gICAgICAgIG1hcmdpbjogMCBhdXRvO1xyXG4gICAgICAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7XHJcbiAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDA7XHJcbiAgICAgICAgYm9yZGVyOiAycHggc29saWQgI2JmYmZiZjtcclxuICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmO1xyXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7XHJcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAgICAgICBib3gtc2hhZG93OiAwIDJweCAxMnB4IHJnYmEoMCwwLDAsMC4wNik7XHJcbiAgICB9XHJcblxyXG4gICAgICAgIHRhYmxlLnN0eWxlZC10YWJsZSB0aGVhZCB0aCB7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmYWZhZmE7XHJcbiAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjYmZiZmJmO1xyXG4gICAgICAgICAgICBwYWRkaW5nOiAxNnB4IDEwcHg7XHJcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMjJweDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRhYmxlLnN0eWxlZC10YWJsZSB0Ym9keSB0ZCB7XHJcbiAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZThlOGU4O1xyXG4gICAgICAgICAgICBwYWRkaW5nOiAxNHB4IDEwcHg7XHJcbiAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XHJcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgICAgICAgICAgZm9udC1zaXplOiAyMnB4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAudGFibGUtc2VjdGlvbiB0YWJsZSB0aDpmaXJzdC1jaGlsZCwgLnRhYmxlLXNlY3Rpb24gdGFibGUgdGQ6Zmlyc3QtY2hpbGQge1xyXG4gICAgICAgIGJvcmRlci1sZWZ0OiAycHggc29saWQgI2JmYmZiZjtcclxuICAgIH1cclxuXHJcbiAgICAudGFibGUtc2VjdGlvbiB0YWJsZSB0aDpsYXN0LWNoaWxkLCAudGFibGUtc2VjdGlvbiB0YWJsZSB0ZDpsYXN0LWNoaWxkIHtcclxuICAgICAgICBib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjYmZiZmJmO1xyXG4gICAgfVxyXG5cclxuICAgIC5yb3ctb2RkIHtcclxuICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmO1xyXG4gICAgfVxyXG5cclxuICAgICAgICAucm93LW9kZCArIHRyIHtcclxuICAgICAgICAgICAgYmFja2dyb3VuZDogI2ZhZmFmYTtcclxuICAgICAgICB9XHJcblxyXG4gICAgLm51bSB7XHJcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDA7XHJcbiAgICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcclxuICAgIH1cclxuXHJcbiAgICAubGVmdCB7XHJcbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcclxuICAgICAgICBwYWRkaW5nLWxlZnQ6IDhweDtcclxuICAgIH1cclxuXHJcbiAgICAud2Fybi1jZWxsIHtcclxuICAgICAgICBjb2xvcjogI2Q5MzAyNTtcclxuICAgICAgICBmb250LXdlaWdodDogYm9sZDtcclxuICAgIH1cclxuXHJcbiAgICAub2stY2VsbCB7XHJcbiAgICAgICAgY29sb3I6ICMzMzM7XHJcbiAgICB9XHJcblxyXG4gICAgLndhcm4tYmFkZ2Uge1xyXG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgICAgICBiYWNrZ3JvdW5kOiAjZmY0ZDRmO1xyXG4gICAgICAgIGNvbG9yOiAjZmZmO1xyXG4gICAgICAgIHBhZGRpbmc6IDJweCA2cHg7XHJcbiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4O1xyXG4gICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG4gICAgfVxyXG5cclxuICAgIC8qIOWTjeW6lOW8j+iwg+aVtCAqL1xyXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDEyMDBweCkge1xyXG4gICAgICAgIC5mb3JtLWNlbGwge1xyXG4gICAgICAgICAgICBtYXJnaW46IDAgNHB4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmZvcm0tbGFiZWwge1xyXG4gICAgICAgICAgICB3aWR0aDogOTBweDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5pbnB1dCB7XHJcbiAgICAgICAgICAgIHBhZGRpbmc6IDEwcHggMTRweDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5idG4tYmx1ZSB7XHJcbiAgICAgICAgICAgIHBhZGRpbmc6IDEwcHggMThweDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLmlucHV0LWxpZmUtd2FybiB7XHJcbiAgICAgICAgd2lkdGg6IDQ4cHggIWltcG9ydGFudDsgLyog56iN5b6u5pS+5a6977yM6YG/5YWN5a2X5L2T5rqi5Ye6ICovXHJcbiAgICAgICAgbWluLXdpZHRoOiAwICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiA0cHg7XHJcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAycHg7XHJcbiAgICAgICAgcGFkZGluZy1yaWdodDogMnB4O1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMjJweCAhaW1wb3J0YW50O1xyXG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgfVxyXG5cclxuICAgIC5pbnB1dCxcclxuICAgIC5pbnB1dC5zbWFsbC1mb250LFxyXG4gICAgLmlucHV0LXVzZS1saW1pdCxcclxuICAgIC5pbnB1dC10b29sLW1vZGVsLFxyXG4gICAgLmlucHV0LXRvb2wtbmFtZSxcclxuICAgIC5pbnB1dC1saWZlLXdhcm4ge1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMjJweCAhaW1wb3J0YW50O1xyXG4gICAgfVxyXG5cclxuICAgIC5pbnB1dC10b29sLW1vZGVsIHtcclxuICAgICAgICB3aWR0aDogMzIwcHggIWltcG9ydGFudDsgLyog5Y6f5Li6MjAwcHjvvIznjrDliqDplb8gKi9cclxuICAgICAgICBtaW4td2lkdGg6IDAgIWltcG9ydGFudDtcclxuICAgICAgICBtYXJnaW4tcmlnaHQ6IDE2cHg7XHJcbiAgICB9XHJcblxyXG4gICAgLmlucHV0LXRvb2wtbmFtZSB7XHJcbiAgICAgICAgd2lkdGg6IDEyMHB4ICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgbWluLXdpZHRoOiAwICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxNnB4O1xyXG4gICAgfVxyXG5cclxuICAgIC5oaWdobGlnaHQtbGFiZWwge1xyXG4gICAgICAgIGNvbG9yOiAjMTg5MGZmICFpbXBvcnRhbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLnRvb2wtZGlyLWNlbGwge1xyXG4gICAgICAgIGZsZXg6IDAgMCBhdXRvICFpbXBvcnRhbnQ7XHJcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0ICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50O1xyXG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDE2cHg7IC8qIOS4juinhOagvOWei+WPt+i+k+WFpeahhuaLieW8gOi3neemuyAqL1xyXG4gICAgfVxyXG5cclxuICAgIC5mb3JtLWNlbGwtZmxleCB7XHJcbiAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgICAgIGZsZXg6IDAgMCA2MCU7XHJcbiAgICAgICAgbWluLXdpZHRoOiAzMjBweDtcclxuICAgIH1cclxuXHJcbiAgICAgICAgLmZvcm0tY2VsbC1mbGV4IC5mb3JtLWxhYmVsIHtcclxuICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiA0cHg7XHJcbiAgICAgICAgICAgIHdpZHRoOiBhdXRvO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmZvcm0tY2VsbC1mbGV4IC5pbnB1dC11c2UtbGltaXQge1xyXG4gICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDEycHg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIC5pbnB1dC11c2UtbGltaXQge1xyXG4gICAgICAgIHdpZHRoOiA0NTBweCAhaW1wb3J0YW50O1xyXG4gICAgICAgIG1pbi13aWR0aDogMCAhaW1wb3J0YW50O1xyXG4gICAgICAgIG1hcmdpbi1yaWdodDogMTZweDtcclxuICAgICAgICBmbGV4OiBub25lICFpbXBvcnRhbnQ7IC8qIOWFs+mUru+8muW9u+W6leemgeatomZsZXjmi4nkvLggKi9cclxuICAgIH1cclxuXHJcbiAgICAvKiDmlrDlop7vvJrosIPmnLrljLrln5/moLflvI8gKi9cclxuICAgIC50aWFvamktc2VjdGlvbiB7XHJcbiAgICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgICAgbWFyZ2luOiAydmggMDtcclxuICAgICAgICBwYWRkaW5nOiAyMHB4O1xyXG4gICAgICAgIGJhY2tncm91bmQ6ICNmOGY5ZmE7XHJcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xyXG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNlOWVjZWY7XHJcbiAgICB9XHJcblxyXG4gICAgLnRpYW9qaS1yb3cge1xyXG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xyXG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgICAgZ2FwOiAyMHB4O1xyXG4gICAgfVxyXG5cclxuICAgIC8qIOW9k+WJjeiwg+acuuW4iOWCheWMuuWfnyAtIOS4juaKpeW3peeVjOmdouS/neaMgeS4gOiHtCAqL1xyXG4gICAgLmN1cnJlbnQtdXNlci1zZWN0aW9uIHtcclxuICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgICAgZm9udC1zaXplOiAyMnB4O1xyXG4gICAgICAgIGJvcmRlcjogMS41cHggc29saWQgI2YwMDtcclxuICAgICAgICBib3JkZXItcmFkaXVzOiAxMHB4O1xyXG4gICAgICAgIHBhZGRpbmc6IDE0cHggMjJweDtcclxuICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmO1xyXG4gICAgICAgIGdhcDogMTRweDtcclxuICAgICAgICBmbGV4OiAwIDAgYXV0bztcclxuICAgIH1cclxuXHJcbiAgICAuY3VycmVudC11c2VyLW5hbWUge1xyXG4gICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMjJweDtcclxuICAgIH1cclxuXHJcbiAgICAvKiDpgInkurrmjInpkq4gLSDok53oibLkuLvpopjvvIzkuI7miqXlt6XnlYzpnaLkv53mjIHkuIDoh7QgKi9cclxuICAgIC5zZWxlY3QtdXNlci1idG4ge1xyXG4gICAgICAgIGJhY2tncm91bmQ6ICMwMGEyZTk7XHJcbiAgICAgICAgY29sb3I6ICNmZmY7XHJcbiAgICAgICAgYm9yZGVyOiBub25lO1xyXG4gICAgICAgIHBhZGRpbmc6IDEycHggMjJweDtcclxuICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4O1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMjJweDtcclxuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cztcclxuICAgICAgICBoZWlnaHQ6IDY2cHg7XHJcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICB9XHJcblxyXG4gICAgICAgIC5zZWxlY3QtdXNlci1idG46aG92ZXIge1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMDA4YWMyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAvKiDosIPmnLrmlbDph4/ovpPlhaXljLrln58gKi9cclxuICAgIC50aWFvamktaW5wdXQtc2VjdGlvbiB7XHJcbiAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgICAgIGdhcDogMTRweDtcclxuICAgICAgICBmb250LXNpemU6IDIycHg7XHJcbiAgICB9XHJcblxyXG4gICAgLnRpYW9qaS1pbnB1dCB7XHJcbiAgICAgICAgd2lkdGg6IDIwMHB4O1xyXG4gICAgICAgIG1heC13aWR0aDogMTAwJTtcclxuICAgICAgICBoZWlnaHQ6IDY2cHg7XHJcbiAgICAgICAgYm9yZGVyOiAycHggc29saWQgIzgwODA4MDtcclxuICAgICAgICBmb250LXNpemU6IDI4cHg7XHJcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDtcclxuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgfVxyXG5cclxuICAgIC8qIOmAgeajgOWRvOWPq+aMiemSriAtIOS4juaKpeW3peeVjOmdoueahOehruiupOaPkOS6pOaMiemSruS/neaMgeS4gOiHtCAqL1xyXG4gICAgLmRldGFpbHMtYnRuIHtcclxuICAgICAgICBwYWRkaW5nOiAxMnB4IDM0cHg7XHJcbiAgICAgICAgYmFja2dyb3VuZDogIzAwYTJlOTtcclxuICAgICAgICBjb2xvcjogI2ZmZjtcclxuICAgICAgICBmb250LXNpemU6IDMycHg7XHJcbiAgICAgICAgYm9yZGVyOiBub25lO1xyXG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4O1xyXG4gICAgICAgIGhlaWdodDogNjZweDtcclxuICAgICAgICBtaW4td2lkdGg6IDE4MHB4O1xyXG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE7XHJcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzO1xyXG4gICAgfVxyXG5cclxuICAgICAgICAuZGV0YWlscy1idG46aG92ZXIge1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMDA4YWMyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmRldGFpbHMtYnRuOmRpc2FibGVkIHtcclxuICAgICAgICAgICAgb3BhY2l0eTogMC42O1xyXG4gICAgICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjYmFlN2ZmO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAudGlhb2ppLXN1Ym1pdC1zZWN0aW9uIHtcclxuICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICB9XHJcblxyXG4gICAgLyog6YCJ5Lq65by556qX5qC35byPIC0g5LiO5oql5bel55WM6Z2i5L+d5oyB5LiA6Ie0ICovXHJcbiAgICAub3ZlcmxheSB7XHJcbiAgICAgICAgcG9zaXRpb246IGZpeGVkO1xyXG4gICAgICAgIHRvcDogMDtcclxuICAgICAgICBsZWZ0OiAwO1xyXG4gICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgIGhlaWdodDogMTAwJTtcclxuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLC40NSk7XHJcbiAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgICAgIHotaW5kZXg6IDEwMDA7XHJcbiAgICB9XHJcblxyXG4gICAgLnVzZXItc2VsZWN0LXBvcHVwIHtcclxuICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmO1xyXG4gICAgICAgIHdpZHRoOiAxNjAwcHg7XHJcbiAgICAgICAgbWF4LXdpZHRoOiA5OXZ3O1xyXG4gICAgICAgIG1pbi13aWR0aDogMTAwMHB4O1xyXG4gICAgICAgIGhlaWdodDogYXV0bztcclxuICAgICAgICBtaW4taGVpZ2h0OiA1MjBweDtcclxuICAgICAgICBwYWRkaW5nOiAwO1xyXG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgICAgICBmb250LXNpemU6IDMycHg7XHJcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDtcclxuICAgICAgICBib3gtc2hhZG93OiAwIDhweCAzMnB4IHJnYmEoMCwwLDAsMC4xMik7XHJcbiAgICAgICAgei1pbmRleDogMTAwMTtcclxuICAgIH1cclxuXHJcbiAgICAudXNlci1zZWFyY2gtYmFyIHtcclxuICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgICAgZ2FwOiAxOHB4O1xyXG4gICAgICAgIHBhZGRpbmc6IDI0cHggNjRweCAwIDY0cHg7XHJcbiAgICAgICAgYmFja2dyb3VuZDogI2ZmZjtcclxuICAgICAgICBmbGV4LXdyYXA6IHdyYXA7XHJcbiAgICB9XHJcblxyXG4gICAgLnVzZXItc2VhcmNoLWlucHV0IHtcclxuICAgICAgICBmbGV4OiAxIDEgMjYwcHg7XHJcbiAgICAgICAgcGFkZGluZzogMTZweCAyMHB4O1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMjhweDtcclxuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjYmJiO1xyXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDtcclxuICAgICAgICBvdXRsaW5lOiBub25lO1xyXG4gICAgICAgIGhlaWdodDogNTRweDtcclxuICAgIH1cclxuXHJcbiAgICAgICAgLnVzZXItc2VhcmNoLWlucHV0OmZvY3VzIHtcclxuICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjMDA3YWZmO1xyXG4gICAgICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggcmdiYSgwLDEyMiwyNTUsLjE1KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgLnVzZXItc2VhcmNoLWNsZWFyIHtcclxuICAgICAgICBwYWRkaW5nOiAxMnB4IDI4cHg7XHJcbiAgICAgICAgYmFja2dyb3VuZDogI2ZmOWY0MztcclxuICAgICAgICBjb2xvcjogI2ZmZjtcclxuICAgICAgICBib3JkZXI6IG5vbmU7XHJcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMjRweDtcclxuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICB9XHJcblxyXG4gICAgICAgIC51c2VyLXNlYXJjaC1jbGVhcjpob3ZlciB7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmZjg5MjA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIC51c2VyLXNlYXJjaC1pbmZvIHtcclxuICAgICAgICBmb250LXNpemU6IDIycHg7XHJcbiAgICAgICAgY29sb3I6ICM1NTU7XHJcbiAgICB9XHJcblxyXG4gICAgLnVzZXItbGlzdC1zY3JvbGwge1xyXG4gICAgICAgIGZsZXg6IDEgMSBhdXRvO1xyXG4gICAgICAgIG92ZXJmbG93LXk6IGF1dG87XHJcbiAgICAgICAgcGFkZGluZzogMzJweCA2NHB4IDAgNjRweDtcclxuICAgIH1cclxuXHJcbiAgICAudXNlci1saXN0LWdyaWQge1xyXG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XHJcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLG1pbm1heCgyMDBweCwxZnIpKTtcclxuICAgICAgICBnYXA6IDIycHggMjJweDtcclxuICAgIH1cclxuXHJcbiAgICAudXNlci1saXN0LWJ0biB7XHJcbiAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgICAgZ2FwOiAycHg7XHJcbiAgICAgICAgcGFkZGluZzogMTBweCAxMHB4O1xyXG4gICAgICAgIGhlaWdodDogMTAwcHg7XHJcbiAgICAgICAgZm9udC1zaXplOiAzMHB4O1xyXG4gICAgICAgIGJhY2tncm91bmQ6ICMwMGEyZTk7XHJcbiAgICAgICAgY29sb3I6ICNmZmY7XHJcbiAgICAgICAgYm9yZGVyOiBub25lO1xyXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDtcclxuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgICAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xyXG4gICAgfVxyXG5cclxuICAgICAgICAudXNlci1saXN0LWJ0biAudXNlci1jb2RlIHtcclxuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcclxuICAgICAgICAgICAgZm9udC1zaXplOiAzNnB4O1xyXG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMS4xO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnVzZXItbGlzdC1idG4gLnVzZXItbmFtZSB7XHJcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMzJweDtcclxuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC51c2VyLWxpc3QtYnRuLnNlbGVjdGVkIHtcclxuICAgICAgICAgICAgYmFja2dyb3VuZDogIzAwNzJjOTtcclxuICAgICAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgM3B4IHJnYmEoMjU1LDI1NSwyNTUsLjYpIGluc2V0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnVzZXItbGlzdC1idG46aG92ZXIge1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMDA4ZWQwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAubm8tdXNlci1yZXN1bHQge1xyXG4gICAgICAgIHBhZGRpbmc6IDQwcHggMDtcclxuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgICAgZm9udC1zaXplOiAyOHB4O1xyXG4gICAgICAgIGNvbG9yOiAjNjY2O1xyXG4gICAgfVxyXG5cclxuICAgIC51c2VyLXBvcHVwLWZvb3RlciB7XHJcbiAgICAgICAgZmxleC1zaHJpbms6IDA7XHJcbiAgICAgICAgcGFkZGluZzogMjRweCA2NHB4IDMycHggNjRweDtcclxuICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmO1xyXG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgIH1cclxuXHJcbiAgICAuY2xlYW4tYnRuIHtcclxuICAgICAgICB3aWR0aDogMjQlO1xyXG4gICAgICAgIHBhZGRpbmc6IDEwcHggMDtcclxuICAgICAgICBjb2xvcjogI2ZmZjtcclxuICAgICAgICBmb250LXNpemU6IDIwcHg7XHJcbiAgICAgICAgYm9yZGVyOiBub25lO1xyXG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC42dnc7XHJcbiAgICAgICAgYmFja2dyb3VuZDogIzAwN2FmZjtcclxuICAgIH1cclxuXHJcbiAgICAgICAgLmNsZWFuLWJ0bi53aWRlLWJ0biB7XHJcbiAgICAgICAgICAgIHdpZHRoOiAzMCU7XHJcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMjJweDtcclxuICAgICAgICAgICAgcGFkZGluZzogMTJweCAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmNsZWFuLWJ0bjpob3ZlciB7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMwMDYyYzk7XHJcbiAgICAgICAgfVxyXG48L3N0eWxlPiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///62\n"); |
| | | |
| | | /***/ }), |
| | | /* 63 */ |