快乐的昕的电脑
5 小时以前 a8e998ae4591fb97b0fc7a605226424316ae5742
unpackage/dist/dev/app-plus/app-service.js
@@ -3593,7 +3593,7 @@
/***/ (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      // 检查是否有调机时间\n      if (this.isShowTableData[0].maShoutTime) {\n        return '转跳报工界面';\n      } else {\n        return '转跳上下刀界面';\n      }\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                // 延迟跳转:根据是否有调机时间决定跳转到哪个界面\n                setTimeout(function () {\n                  if (_this11.isShowTableData[0].maShoutTime) {\n                    // 有调机时间,跳转到报工界面\n                    _this11.currentTab = 4;\n                  } else {\n                    // 没有调机时间,跳转到上下刀界面\n                    _this11.currentTab = 2;\n                  }\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: '/MesOrderDataCollection/BindDataCollectionFlag',\n                data: {\n                  machineNo: _this12.machineNo,\n                  orderNo: orderNo\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:941\");\n              _this12.$showMessage('数采标志绑定成功');\n              return _context3.abrupt(\"return\", true);\n            case 10:\n              __f__(\"error\", '数采标志绑定失败:', res.message || '未知错误', \" at pages/index.vue:945\");\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:950\");\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vcGFnZXMvaW5kZXgudnVlIl0sIm5hbWVzIjpbImNvbXBvbmVudHMiLCJUZWNobm9sb2d5IiwiV29ya09yZGVyIiwiV29ya09yZGVyUHJpbnQiLCJNYWNoaW5lIiwiTW9sZCIsIlVuaVRhYmxlIiwiV29ya09yZGVyU3RhdHVzIiwiUERGU2hvdyIsIlByaW50SW5pdCIsIlByaW50VGVzdCIsIkVxdWlwbWVudEluc3BlY3Rpb24iLCJNb2xkUmVjb3JkIiwiZGF0YSIsIm9yZGVyU3RhdHVzIiwiY3VycmVudFRhYiIsInByb2R1Y3RDb2RlIiwicHJvZHVjdFNwZWMiLCJtYWNoaW5lTGlzdCIsIm1hY2hpbmUiLCJlbmdpbmVlcmluZ05vTGlzdCIsImVuZ2luZWVyaW5nTm9NYXBMaXN0IiwiZW5naW5lZXJpbmdObyIsIm1hY2hpbmVObyIsIm1hY2hpbmVOYW1lIiwidGFibGVEYXRhIiwiaXNTaG93VGFibGVEYXRhIiwiY3JlYXRlZCIsInVuaSIsIm9uTG9hZCIsIm9uU2hvdyIsIm9uSGlkZSIsIm1ldGhvZHMiLCJvblJvd0NsaWNrIiwiZGV0YWlsIiwiaW5kZXgiLCJyZXNldEF1dG9SZWRpcmVjdFRpbWVyIiwiY2xlYXJUaW1lb3V0IiwidGl0bGUiLCJpY29uIiwiZHVyYXRpb24iLCJjaGVja0ZvclVwZGF0ZSIsInVybCIsImNvbnRlbnQiLCJzdWNjZXNzIiwiZG93bmxvYWROZXdBcGsiLCJwbHVzIiwiZm9yY2UiLCJmYWlsIiwicmVmcmVzaCIsImRlZmF1bHRTdGF0dXMiLCJnZXRQcmludEluZm8iLCJtYWMiLCJwZGFNYWMiLCJzYXZlIiwib3JkZXJJZCIsIm9yZGVyTm8iLCJvcmRlclNlbGVjdCIsImVkaXREYXRlIiwiaXRlbSIsImdldE1hY05ldyIsInRtcCIsInN0ciIsImNhbmNlbCIsImZvcm1hdERhdGUiLCJzZWxlY3Rpb25DaGFuZ2UiLCJzZWxlY3RlZEl0ZW1zIiwiY2hhbmdlVGFiIiwib25NYWNoaW5lQ2hhbmdlIiwib25FbmdpbmVlcmluZ05vQ2hhbmdlIiwiZ2V0TWFjaGluZUxpc3QiLCJnZXRXb21kYWFJc1Nob3ciLCJoYXNCaW5kZWRDdXR0ZXIiLCJvcmRlciIsImlzU2hvd1RhYiIsInN0YXR1cyIsInN0YXR1c0FyciIsImlzU2VsZWN0ZWQiLCJzZXRUaW1lb3V0IiwicmVzIiwiYmluZFN1Y2Nlc3MiLCJjbGVhckludGVydmFsIiwiY29tcHV0ZWQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFnUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQSxlQUVBO0VBQ0FBO0lBQ0FDO0lBQ0FDO0lBQ0FDO0lBQ0FDO0lBQ0FDO0lBQ0FDO0lBQ0FDO0lBQ0FDO0lBQ0FDO0lBQ0FDO0lBQ0FDO0lBQ0FDO0VBQ0E7RUFDQUM7SUFBQTtJQUNBO01BQ0FDO01BQUE7TUFDQUM7TUFFQUM7TUFBQTtNQUNBQztNQUFBOztNQUVBQztNQUVBQztNQUVBQztNQUNBQztNQUNBQztNQUVBQztNQUNBQztNQUVBQztNQUNBQztJQUFBLHNEQUVBLDREQUNBLG9EQUNBLDBEQUVBLG1EQUVBLGlFQUdBLCtEQUNBLHdFQUdBLGtFQUNBO0VBRUE7RUFDQUM7SUFFQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTs7SUFFQUM7SUFFQTs7SUFFQTtJQUNBO0VBRUE7RUFDQUM7SUFDQTtFQUNBO0VBQ0FDO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7TUFDQTtJQUNBO0VBQ0E7RUFDQUM7SUFDQTtJQUNBO0VBQ0E7RUFDQUM7SUFDQUM7TUFDQTtNQUNBO01BQ0E7UUFBQUM7VUFBQUM7UUFBQTtNQUFBO01BQ0E7TUFDQTtJQUNBO0lBRUE7SUFDQUM7TUFBQTtNQUNBO01BQ0E7UUFDQUM7UUFDQTtNQUNBOztNQUVBO01BQ0E7UUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBVDtZQUNBVTtZQUNBQztZQUNBQztVQUNBO1FBQ0E7TUFDQTtJQUNBO0lBQ0FDO01BQUE7TUFDQTtRQUNBQztRQUNBN0I7TUFDQTtRQUVBO1FBQ0E7O1FBRUE7VUFDQWU7WUFDQVU7WUFDQUs7WUFDQUM7Y0FDQTtnQkFDQTtjQUNBO1lBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1FBQ0E7TUFDQTtJQUVBO0lBRUFDO01BQ0FqQjtRQUNBVTtRQUNBQztRQUNBQztNQUNBO01BRUFaO1FBQ0FjO1FBQ0FFO1VBQ0E7WUFDQUU7Y0FDQUM7WUFDQTtjQUNBO2NBQ0E7Y0FDQTtjQUNBO1lBQ0E7Y0FDQTtZQUNBO1VBQ0E7UUFDQTtRQUNBQztVQUNBO1VBQ0FwQjtZQUNBVTtZQUNBQztZQUNBQztVQUNBO1FBQ0E7TUFDQTtJQUNBO0lBRUFTO01BQ0E7TUFDQTtNQUNBO01BQ0E7UUFDQTtRQUNBO1FBQ0E7VUFDQTtVQUNBO1lBQ0FDO1VBQ0E7WUFDQUE7VUFDQTtRQUNBO1FBQ0E7UUFDQSw2QkFDQSxjQUNBLE1BQ0EsS0FDQTtRQUNBO01BQ0E7SUFDQTtJQUNBQztNQUFBO01BQ0E7TUFFQUM7TUFDQTtRQUNBVjtRQUNBN0I7VUFDQXdDO1FBQ0E7TUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUVBekI7UUFDQUE7UUFFQTtRQUVBO01BQ0E7TUFDQTs7TUFHQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBOztNQUVBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTs7TUFFQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7O01BRUE7TUFDQTs7TUFHQTs7TUFFQTtNQUNBO0lBQ0E7SUFDQTBCO01BQUE7TUFDQTtNQUVBO1FBQ0E7UUFDQTtNQUNBO01BRUE7UUFDQTtRQUNBO01BQ0E7O01BRUE7O01BRUE7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBOztNQUVBO01BRUF6QztRQUNBO1VBQ0EwQztVQUNBQztRQUNBO1FBQ0FDO01BQ0E7TUFFQTtNQUVBO1FBQ0FmO1FBQ0E3QjtVQUNBVTtVQUNBbUM7VUFDQUM7UUFDQTtNQUNBO1FBQ0E7VUFDQTtVQUNBL0I7WUFDQVU7WUFDQTtZQUNBO1lBQ0FDO1lBQ0E7WUFDQUM7VUFDQTtRQUNBO1FBQ0E7TUFDQTtJQUVBO0lBQ0FvQjtNQUNBO01BQ0E7UUFDQTtVQUNBO1VBQ0E7VUFDQTs7VUFFQTtVQUNBO1lBQ0E7WUFDQTtZQUNBO2NBQ0FDO1lBQ0E7Y0FDQUE7WUFDQTtZQUNBO2NBQ0FBO1lBQ0E7WUFDQUM7VUFDQTtRQUNBO01BQ0E7UUFDQUE7TUFDQTtNQUNBO0lBQ0E7SUFFQUM7TUFBQTtNQUNBO1FBQ0E7TUFDQTs7TUFFQTtNQUNBO1FBQ0FuQztVQUNBVTtVQUNBQztVQUNBQztRQUNBO1FBQ0E7TUFDQTtNQUVBO01BQ0E7TUFFQTtRQUNBRTtRQUNBN0I7VUFDQVU7VUFDQW1DO1FBQ0E7TUFDQTtRQUNBO1VBQ0E7UUFDQTtNQUNBO0lBQ0E7SUFFQU07TUFDQTtNQUNBO01BQ0E7TUFDQTtJQUNBO0lBQ0FDO01BQ0E7TUFDQTtJQUNBO0lBRUFDO01BQUE7TUFDQTtRQUFBO01BQUE7SUFDQTtJQUdBQztNQUNBO01BQ0E7TUFDQTtRQUNBO1FBQ0E7UUFDQTtNQUNBO1FBQ0E7UUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO0lBQ0E7SUFDQUM7TUFFQTtNQUVBO01BRUF4QztNQUVBQTtNQUNBQTtNQUVBO0lBQ0E7SUFDQXlDO01BRUE7TUFFQTtNQUVBO0lBRUE7SUFDQUM7TUFBQTtNQUNBO1FBQ0E1QjtNQUNBO1FBQ0E7UUFDQTtVQUFBO1FBQUE7TUFDQTtJQUNBO0lBQ0E7SUFDQTZCO01BQUE7TUFDQTtRQUNBN0I7UUFDQTdCO1VBQ0FVO1FBQ0E7TUFDQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1VBQ0FpRCxrQkFDQUMsK0RBQ0FBLHdEQUNBQTtRQUNBO1FBQ0E7UUFDQTtRQUVBO1VBQ0E3QztVQUNBQTtRQUNBO01BQ0E7SUFDQTtJQUVBOEM7TUFDQTtRQUNBOUM7VUFDQVU7VUFDQUM7VUFDQUM7UUFDQTtRQUNBO01BQ0E7TUFFQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0EsNkJBQ0EsY0FDQSxNQUNBLEtBQ0E7TUFDQTtNQUNBO0lBQ0E7RUFBQSxtR0FFQW1DO0lBQ0E7SUFDQTtFQUNBLDhFQUNBO0lBQUE7SUFFQTtJQUVBO01BQ0FqQztNQUNBN0I7UUFDQVU7UUFDQW1DO01BQ0E7SUFDQTtNQUNBO0lBQ0E7RUFDQSw4RkFFQTtJQUFBO0lBQ0E7SUFDQTtJQUNBO01BQ0FrQjtJQUNBO01BQ0FBO0lBQ0E7SUFDQTtNQUNBbEM7TUFDQTdCO1FBQ0FVO1FBQ0FUO1FBQ0E0QztNQUNBO0lBQ0E7TUFDQTtJQUNBO0VBQ0EsMEVBQ0FDO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtFQUNBLDBGQUdBQTtJQUNBO0lBQ0E7TUFDQTtJQUNBOztJQUNBO0VBQ0EsOEZBR0FBO0lBQ0E7SUFDQTtNQUNBO0lBQ0E7SUFDQTtFQUNBLDhGQUdBQTtJQUNBO0lBQ0E7TUFDQTtJQUNBO0lBQ0E7SUFDQTtNQUNBO0lBQ0E7SUFDQTtFQUNBLHdGQUdBQTtJQUNBO0lBQ0E7TUFDQTtNQUNBO1FBQ0E7TUFDQTtRQUNBO01BQ0E7SUFDQTtJQUNBO0VBQ0Esd0ZBR0FBO0lBQUE7SUFBQTtNQUFBO01BQUE7UUFBQTtVQUFBO1lBQUE7Y0FDQTtjQUNBa0I7Y0FFQTtnQkFDQTtnQkFDQTs7Z0JBRUE7Z0JBQ0FDO2tCQUNBO29CQUNBO29CQUNBO2tCQUNBO29CQUNBO29CQUNBO2tCQUNBO2dCQUNBO2NBQ0E7Z0JBQ0E7Z0JBQ0FyQjtrQkFDQUY7a0JBQ0FDO2dCQUNBO2dCQUVBRTtnQkFFQTtrQkFDQWhCO2tCQUNBN0I7b0JBQ0FVO29CQUNBbUM7b0JBQ0FDO2tCQUNBO2dCQUNBO2tCQUFBO29CQUFBO29CQUFBO3NCQUFBO3dCQUFBOzBCQUFBOzRCQUFBLEtBQ0FvQjs4QkFBQTs4QkFBQTs0QkFBQTs0QkFDQTs7NEJBRUE7NEJBQUE7NEJBQUEsT0FDQTswQkFBQTs0QkFBQUM7NEJBRUE7NEJBQ0E7OEJBQ0FwRDtnQ0FDQVU7Z0NBQ0FDO2dDQUNBQzs4QkFDQTs0QkFDQTswQkFBQTswQkFBQTs0QkFBQTt3QkFBQTtzQkFBQTtvQkFBQTtrQkFBQSxDQUVBO2tCQUFBO29CQUFBO2tCQUFBO2dCQUFBO2NBQ0E7WUFBQTtZQUFBO2NBQUE7VUFBQTtRQUFBO01BQUE7SUFBQTtFQUNBLHNHQUdBZ0I7SUFBQTtJQUFBO01BQUE7TUFBQTtRQUFBO1VBQUE7WUFBQTtjQUFBO2NBQUE7Y0FBQSxPQUVBO2dCQUNBZDtnQkFDQTdCO2tCQUNBVTtrQkFDQWlDO2dCQUNBO2NBQ0E7WUFBQTtjQU5BdUI7Y0FBQSxNQVFBQTtnQkFBQTtnQkFBQTtjQUFBO2NBQ0E7Y0FDQTtjQUFBLGtDQUNBO1lBQUE7Y0FFQTtjQUNBO2NBQUEsa0NBQ0E7WUFBQTtjQUFBO2NBQUE7WUFBQTtjQUFBO2NBQUE7Y0FHQTtjQUNBO2NBQUEsa0NBQ0E7WUFBQTtZQUFBO2NBQUE7VUFBQTtRQUFBO01BQUE7SUFBQTtFQUVBLHdGQUdBcEI7SUFBQTtJQUFBO01BQUE7TUFBQTtRQUFBO1VBQUE7WUFBQTtjQUFBLElBQ0E7Z0JBQUE7Z0JBQUE7Y0FBQTtjQUFBO1lBQUE7Y0FBQSxLQUtBO2dCQUFBO2dCQUFBO2NBQUE7Y0FDQS9CO2dCQUNBVTtnQkFDQUM7Z0JBQ0FDO2NBQ0E7Y0FBQTtZQUFBO2NBSUFrQjtjQUNBO2NBRUE7Z0JBQ0FoQjtnQkFDQTdCO2tCQUNBVTtrQkFDQW1DO2dCQUNBO2NBQ0E7Z0JBQ0E7a0JBQ0E7a0JBQ0E5QjtvQkFDQVU7b0JBQ0FDO29CQUNBQztrQkFDQTs7a0JBRUE7a0JBQ0FzQztvQkFDQTtrQkFDQTtnQkFDQTtjQUNBO1lBQUE7WUFBQTtjQUFBO1VBQUE7UUFBQTtNQUFBO0lBQUE7RUFDQSw0RkFHQTtJQUFBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7TUFDQTtRQUNBO1VBQ0E7UUFDQTtNQUNBO0lBQ0E7RUFDQSwwRkFHQTtJQUNBO01BQ0FHO01BQ0E7SUFDQTtFQUNBLGFBQ0E7RUFDQUM7QUFDQTtBQUFBLDJCIiwiZmlsZSI6IjUyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiPHRlbXBsYXRlPlxyXG5cclxuXHQ8dmlldz5cclxuXHRcdDx2aWV3IGNsYXNzPVwidGFiLWJhclwiPlxyXG5cdFx0XHQ8dmlldyBjbGFzcz1cInRhYi1pdGVtXCIgOmNsYXNzPVwieyBhY3RpdmU6IGN1cnJlbnRUYWIgPT09IDcgfVwiIEBjbGljaz1cImNoYW5nZVRhYig3KVwiPlxyXG5cdFx0XHRcdOW3peWNlemAieaLqVxyXG5cdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdDx2aWV3IGNsYXNzPVwidGFiLWl0ZW1cIiA6Y2xhc3M9XCJ7IGFjdGl2ZTogY3VycmVudFRhYiA9PT0gMCB9XCIgQGNsaWNrPVwiY2hhbmdlVGFiKDApXCI+XHJcblx0XHRcdFx05Li755WM6Z2iXHJcblx0XHRcdDwvdmlldz5cclxuXHRcdFx0PHZpZXcgY2xhc3M9XCJ0YWItaXRlbVwiIDpjbGFzcz1cInsgYWN0aXZlOiBjdXJyZW50VGFiID09PSAyIH1cIiBAY2xpY2s9XCJjaGFuZ2VUYWIoMilcIj5cclxuXHRcdFx0XHTkuIrliIDkuIvliIBcclxuXHRcdFx0PC92aWV3PlxyXG5cdFx0XHQ8dmlldyBjbGFzcz1cInRhYi1pdGVtXCIgOmNsYXNzPVwieyBhY3RpdmU6IGN1cnJlbnRUYWIgPT09IDMgfVwiIEBjbGljaz1cImNoYW5nZVRhYigzKVwiPlxyXG5cdFx0XHRcdOiwg+acuumAgeajgFxyXG5cdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdDx2aWV3IGNsYXNzPVwidGFiLWl0ZW1cIiA6Y2xhc3M9XCJ7IGFjdGl2ZTogY3VycmVudFRhYiA9PT0gMTAgfVwiIEBjbGljaz1cImNoYW5nZVRhYigxMClcIj5cclxuXHRcdFx0XHTkuIrkuIvliIAv6aaW5qOA5Y2V6K6w5b2VXHJcblx0XHRcdDwvdmlldz5cclxuXHRcdFx0PHZpZXcgY2xhc3M9XCJ0YWItaXRlbVwiIDpjbGFzcz1cInsgYWN0aXZlOiBjdXJyZW50VGFiID09PSA0IH1cIiBAY2xpY2s9XCJjaGFuZ2VUYWIoNClcIj5cclxuXHRcdFx0XHTnlJ/kuqfmiqXlt6VcclxuXHRcdFx0PC92aWV3PlxyXG5cdFx0XHQ8dmlldyBjbGFzcz1cInRhYi1pdGVtXCIgOmNsYXNzPVwieyBhY3RpdmU6IGN1cnJlbnRUYWIgPT09IDEgfVwiIEBjbGljaz1cImNoYW5nZVRhYigxKVwiPlxyXG5cdFx0XHRcdOW8gOW3peWujOW3pVxyXG5cdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdDx2aWV3IGNsYXNzPVwidGFiLWl0ZW1cIiA6Y2xhc3M9XCJ7IGFjdGl2ZTogY3VycmVudFRhYiA9PT0gNSB9XCIgQGNsaWNrPVwiY2hhbmdlVGFiKDUpXCI+XHJcblx0XHRcdFx0ZS1TT1BcclxuXHRcdFx0PC92aWV3PlxyXG5cdFx0XHQ8dmlldyBjbGFzcz1cInRhYi1pdGVtXCIgOmNsYXNzPVwieyBhY3RpdmU6IGN1cnJlbnRUYWIgPT09IDYgfVwiIEBjbGljaz1cImNoYW5nZVRhYig2KVwiPlxyXG5cdFx0XHRcdOW3peiJuuWPguaVsFxyXG5cdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdDx2aWV3IGNsYXNzPVwidGFiLWl0ZW1cIiA6Y2xhc3M9XCJ7IGFjdGl2ZTogY3VycmVudFRhYiA9PT0gOSB9XCIgQGNsaWNrPVwiY2hhbmdlVGFiKDkpXCI+XHJcblx0XHRcdFx06K6+5aSH54K55qOAXHJcblx0XHRcdDwvdmlldz5cclxuXHRcdFx0PCEtLSA8dmlldyBjbGFzcz1cInRhYi1pdGVtXCIgOmNsYXNzPVwieyBhY3RpdmU6IGN1cnJlbnRUYWIgPT09IDggfVwiIEBjbGljaz1cImNoYW5nZVRhYig4KVwiPlxyXG5cdFx0XHTmiZPljbDmnLrorr7nva5cclxuXHRcdDwvdmlldz4gLS0+XHJcblxyXG5cdFx0PC92aWV3PlxyXG5cdFx0PHZpZXcgY2xhc3M9XCJmb250XCI+PC92aWV3PlxyXG5cdFx0PHNjcm9sbC12aWV3IGNsYXNzPVwiY29udGVudFwiPlxyXG5cdFx0XHQ8dmlldyB2LWlmPVwiY3VycmVudFRhYiA9PT0gN1wiIGNsYXNzPVwidGFiLWNvbnRlbnRcIj5cclxuXHRcdFx0XHQ8dmlldyBjbGFzcz1cImNvbnRlbnRcIj5cclxuXHRcdFx0XHRcdDwhLS08dmlldz5cclxuXHRcdFx0XHRcdFx0PGg0PuS4gOWPsOacuuWPsOWPquiDvemAieaLqeS4gOadoeW3peWNle+8iOWkmumAiem7mOiupOS4uuacgOWQjuS4gOadoe+8iTwvaDQ+XHJcblx0XHRcdFx0XHQ8L3ZpZXc+LS0+XHJcblx0XHRcdFx0XHQ8dmlldyBjbGFzcz1cInNlY3Rpb24gdG9wLXNlY3Rpb25cIj5cclxuXHRcdFx0XHRcdFx0PHZpZXcgY2xhc3M9XCJmb3JtLXJvdyBhbGlnbi1yb3dcIj5cclxuXHRcdFx0XHRcdFx0XHQ8aW5wdXQgdi1tb2RlbD1cIm1hY2hpbmVOYW1lXCJcclxuXHRcdFx0XHRcdFx0XHRcdCAgIGRpc2FibGVkPVwidHJ1ZVwiXHJcblx0XHRcdFx0XHRcdFx0XHQgICB0eXBlPVwidGV4dFwiXHJcblx0XHRcdFx0XHRcdFx0XHQgICBjbGFzcz1cIm1hY2hpbmUtbmFtZS1ib3hcIiAvPlxyXG5cdFx0XHRcdFx0XHRcdDx2aWV3IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0PGxhYmVsIHN0eWxlPVwiZmxvYXQ6IGxlZnQ7bWFyZ2luLXRvcDogMThweDtmb250LXNpemU6IDIycHg7XCI+54K55Ye75oyJ6ZKu562b6YCJ5bel5Y2V54q25oCBOjwvbGFiZWw+XHJcblx0XHRcdFx0XHRcdFx0XHQ8c3VwZXJ3ZWktY29tYm94IDpjYW5kaWRhdGVzPVwiZW5naW5lZXJpbmdOb01hcExpc3RcIiBwbGFjZWhvbGRlcj1cIuivt+mAieaLqVwiIHYtbW9kZWw9XCJlbmdpbmVlcmluZ05vXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0IEBzZWxlY3Q9XCJvbkVuZ2luZWVyaW5nTm9DaGFuZ2VcIiBjbGFzcz1cInBpY2tlclwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCBzdHlsZT1cInBhZGRpbmc6IDdweCA0NnB4O3dpZHRoOiA2NTBweDttYXJnaW4tcmlnaHQ6IDIwcHg7XCI+PC9zdXBlcndlaS1jb21ib3g+XHJcblx0XHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0XHRcdDx2aWV3IGNsYXNzPVwidG9wLXJpZ2h0XCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8YnV0dG9uIGNsYXNzPVwicmVmcmVzaC1idG5cIiBAY2xpY2s9XCJyZWZyZXNoXCI+5Yi35pawPC9idXR0b24+XHJcblx0XHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHQ8L3ZpZXc+XHJcblxyXG5cdFx0XHRcdFx0PCEtLSDlt6XljZXpgInmi6nooajmoLwgLS0+XHJcblx0XHRcdFx0XHQ8dmlldyBjbGFzcz1cInNlY3Rpb24gY2FyZFwiPlxyXG5cdFx0XHRcdFx0XHQ8dW5pLXRhYmxlIGJvcmRlciBzdHJpcGUgZW1wdHlUZXh0PVwi5pqC5peg5pu05aSa5pWw5o2uXCI+XHJcblx0XHRcdFx0XHRcdFx0PHVuaS10cj5cclxuXHRcdFx0XHRcdFx0XHRcdDx1bmktdGggYWxpZ249XCJjZW50ZXJcIiBjbGFzcz1cInRoXCIgc3R5bGU9XCJ3aWR0aDogMjIwcHg7XCI+5pON5L2cPC91bmktdGg+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dW5pLXRoIGFsaWduPVwiY2VudGVyXCIgY2xhc3M9XCJ0aFwiIHN0eWxlPVwid2lkdGg6IDEwMHB4O1wiPuW3peW6jzwvdW5pLXRoPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHVuaS10aCBhbGlnbj1cImNlbnRlclwiIGNsYXNzPVwidGhcIiBzdHlsZT1cIndpZHRoOiAyMDBweDtcIj7lt6XljZXlj7c8L3VuaS10aD5cclxuXHRcdFx0XHRcdFx0XHRcdDx1bmktdGggYWxpZ249XCJjZW50ZXJcIiBjbGFzcz1cInRoXCIgc3R5bGU9XCJ3aWR0aDogMTUwcHg7XCI+5Lqn5ZOB57yW56CBPC91bmktdGg+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dW5pLXRoIGFsaWduPVwiY2VudGVyXCIgY2xhc3M9XCJ0aFwiIHN0eWxlPVwid2lkdGg6IDI0MHB4O1wiPuS6p+WTgeWQjeensDwvdW5pLXRoPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHVuaS10aCBhbGlnbj1cImNlbnRlclwiIGNsYXNzPVwidGhcIiBzdHlsZT1cIndpZHRoOiAyMDBweDtcIj7op4TmoLw8L3VuaS10aD5cclxuXHRcdFx0XHRcdFx0XHRcdDx1bmktdGggYWxpZ249XCJjZW50ZXJcIiBjbGFzcz1cInRoXCIgc3R5bGU9XCJ3aWR0aDogMTUwcHg7XCI+5bey55Sf5Lqn5pWw6YePPC91bmktdGg+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dW5pLXRoIGFsaWduPVwiY2VudGVyXCIgY2xhc3M9XCJ0aFwiIHN0eWxlPVwid2lkdGg6IDE1MHB4O1wiPuacqueUn+S6p+aVsOmHjzwvdW5pLXRoPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHVuaS10aCBhbGlnbj1cImNlbnRlclwiIGNsYXNzPVwidGhcIiBzdHlsZT1cIndpZHRoOiAxNTBweDtcIj7mtL7lt6XmlbDph488L3VuaS10aD5cclxuXHRcdFx0XHRcdFx0XHRcdDx1bmktdGggYWxpZ249XCJjZW50ZXJcIiBjbGFzcz1cInRoXCIgc3R5bGU9XCJ3aWR0aDogMTUwcHg7XCI+5bel5Y2V5pWw6YePPC91bmktdGg+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dW5pLXRoIGFsaWduPVwiY2VudGVyXCIgY2xhc3M9XCJ0aFwiIHN0eWxlPVwid2lkdGg6IDkwcHg7XCI+5bel5Y2V54q25oCBPC91bmktdGg+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dW5pLXRoIGFsaWduPVwiY2VudGVyXCIgY2xhc3M9XCJ0aFwiIHN0eWxlPVwid2lkdGg6IDkwcHg7XCI+5oql5bel5Lq6PC91bmktdGg+XHJcblx0XHRcdFx0XHRcdFx0PC91bmktdHI+XHJcblx0XHRcdFx0XHRcdFx0PHVuaS10ciB2LWZvcj1cIihpdGVtLCBpbmRleCkgaW4gdGFibGVEYXRhXCIgOmtleT1cImluZGV4XCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dW5pLXRkIGFsaWduPVwiY2VudGVyXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx2aWV3IGNsYXNzPVwib3BlcmF0aW9uLWJ0bnNcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8YnV0dG9uIFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0OmNsYXNzPVwiZ2V0U3RhcnRCdG5DbGFzcyhpdGVtKVwiIFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0OmRpc2FibGVkPVwiaXNTdGFydEJ0bkRpc2FibGVkKGl0ZW0pXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdEBjbGljaz1cImhhbmRsZVN0YXJ0V29yayhpdGVtKVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3sgZ2V0U3RhcnRCdG5UZXh0KGl0ZW0pIH19XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9idXR0b24+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGJ1dHRvbiBcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwicGF1c2UtYnRuXCIgXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6ZGlzYWJsZWQ9XCJpc1BhdXNlQnRuRGlzYWJsZWQoaXRlbSlcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0QGNsaWNrPVwiaGFuZGxlUGF1c2VXb3JrKGl0ZW0pXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHTmmoLlgZxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2J1dHRvbj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0XHRcdFx0PC91bmktdGQ+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dW5pLXRkIGFsaWduPVwiY2VudGVyXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dCBjbGFzcz1cImZvcm0taW5wdXRcIiBkaXNhYmxlZD1cInRydWVcIiB0eXBlPVwidGV4dFwiIHYtbW9kZWw9XCJpdGVtLnByb2NOYW1lXCIgLz5cclxuXHRcdFx0XHRcdFx0XHRcdDwvdW5pLXRkPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHVuaS10ZCBhbGlnbj1cImNlbnRlclwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZm9ybS1pbnB1dFwiPnt7IGl0ZW0uZGFhMDAxIH19PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L3VuaS10ZD5cclxuXHRcdFx0XHRcdFx0XHRcdDx1bmktdGQgYWxpZ249XCJjZW50ZXJcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZvcm0taW5wdXRcIj57eyBpdGVtLmRhYTAwMiB9fTwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdFx0PC91bmktdGQ+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dW5pLXRkIGFsaWduPVwiY2VudGVyXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmb3JtLWlucHV0XCI+e3sgaXRlbS5kYWEwMDMgfX08L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHRcdDwvdW5pLXRkPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHVuaS10ZCBhbGlnbj1cImNlbnRlclwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZm9ybS1pbnB1dFwiPnt7IGl0ZW0uZGFhMDA0IH19PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L3VuaS10ZD5cclxuXHRcdFx0XHRcdFx0XHRcdDx1bmktdGQgYWxpZ249XCJjZW50ZXJcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0IGNsYXNzPVwiZm9ybS1pbnB1dFwiIGRpc2FibGVkPVwidHJ1ZVwiIHR5cGU9XCJ0ZXh0XCIgdi1tb2RlbD1cIml0ZW0uZGFhMDExXCIgLz5cclxuXHRcdFx0XHRcdFx0XHRcdDwvdW5pLXRkPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHVuaS10ZCBhbGlnbj1cImNlbnRlclwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgY2xhc3M9XCJmb3JtLWlucHV0XCIgZGlzYWJsZWQ9XCJ0cnVlXCIgdHlwZT1cInRleHRcIiA6dmFsdWU9XCIoaXRlbS5kYWEwMDggfHwgMCkgLSAoaXRlbS5kYWEwMTEgfHwgMClcIiAvPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC91bmktdGQ+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dW5pLXRkIGFsaWduPVwiY2VudGVyXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dCBjbGFzcz1cImZvcm0taW5wdXRcIiBkaXNhYmxlZD1cInRydWVcIiB0eXBlPVwidGV4dFwiIHYtbW9kZWw9XCJpdGVtLmRhYTAwOFwiIC8+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L3VuaS10ZD5cclxuXHRcdFx0XHRcdFx0XHRcdDx1bmktdGQgYWxpZ249XCJjZW50ZXJcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0IGNsYXNzPVwiZm9ybS1pbnB1dFwiIGRpc2FibGVkPVwidHJ1ZVwiIHR5cGU9XCJ0ZXh0XCIgdi1tb2RlbD1cIml0ZW0uZGFhMDA4XCIgLz5cclxuXHRcdFx0XHRcdFx0XHRcdDwvdW5pLXRkPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHVuaS10ZCBhbGlnbj1cImNlbnRlclwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgY2xhc3M9XCJmb3JtLWlucHV0XCIgZGlzYWJsZWQ9XCJ0cnVlXCIgdHlwZT1cInRleHRcIiB2LW1vZGVsPVwiaXRlbS5kYWEwMThcIiAvPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC91bmktdGQ+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dW5pLXRkIGFsaWduPVwiY2VudGVyXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dCBjbGFzcz1cImZvcm0taW5wdXRcIiBkaXNhYmxlZD1cInRydWVcIiB0eXBlPVwidGV4dFwiIHYtbW9kZWw9XCJpdGVtLnN0YWZmTmFtZVwiIC8+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L3VuaS10ZD5cclxuXHRcdFx0XHRcdFx0XHQ8L3VuaS10cj5cclxuXHRcdFx0XHRcdFx0PC91bmktdGFibGU+XHJcblx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdDx2aWV3IHYtaWY9XCJjdXJyZW50VGFiID09PSAwXCIgY2xhc3M9XCJ0YWItY29udGVudFwiPlxyXG5cdFx0XHRcdDxXb3JrT3JkZXIgOm9yZGVySWQ9XCJvcmRlcklkXCIgOm9yZGVyTm89XCJzZWxlY3RlZE9yZGVyXCIgOm1hY2hpbmVObz1cIm1hY2hpbmVOb1wiXHJcblx0XHRcdFx0XHRcdCAgIDpkZXZpY2VOdW1iZXI9XCJtYWNoaW5lTmFtZVwiIC8+XHJcblx0XHRcdDwvdmlldz5cclxuXHRcdFx0PHZpZXcgdi1pZj1cImN1cnJlbnRUYWIgPT09IDFcIiBjbGFzcz1cInRhYi1jb250ZW50XCI+XHJcblx0XHRcdFx0PCEtLSAgICAgICAgJmx0OyEmbmRhc2g7IOiwg+eUqCBXb3JrT3JkZXJTdGF0dXMg57uE5Lu2ICZuZGFzaDsmZ3Q7LS0+XHJcblx0XHRcdFx0PFdvcmtPcmRlclN0YXR1cyA6b3JkZXJJZD1cIm9yZGVySWRcIiA6b3JkZXJObz1cInNlbGVjdGVkT3JkZXJcIiA6bWFjaGluZU5vPVwibWFjaGluZU5vXCIgLz5cclxuXHRcdFx0PC92aWV3PlxyXG5cdFx0XHQ8dmlldyB2LWlmPVwiY3VycmVudFRhYiA9PT0gMlwiIGNsYXNzPVwidGFiLWNvbnRlbnRcIj5cclxuXHRcdFx0XHQ8IS0tICAgICAgICAmbHQ7ISZuZGFzaDsg6LCD55SoIG1vbGQg57uE5Lu2ICZuZGFzaDsmZ3Q7LS0+XHJcblx0XHRcdFx0PG1vbGQgOm9yZGVySWQ9XCJvcmRlcklkXCIgOm9yZGVyTm89XCJzZWxlY3RlZE9yZGVyXCIgOm1hY2hpbmVObz1cIm1hY2hpbmVOb1wiIC8+XHJcblx0XHRcdDwvdmlldz5cclxuXHRcdFx0PHZpZXcgdi1pZj1cImN1cnJlbnRUYWIgPT09IDNcIiBjbGFzcz1cInRhYi1jb250ZW50XCI+XHJcblx0XHRcdFx0PCEtLSAgICAgICAgJmx0OyEmbmRhc2g7IOiwg+eUqCBtb2xkIOe7hOS7tiAmbmRhc2g7Jmd0Oy0tPlxyXG5cdFx0XHRcdDxtYWNoaW5lIDpvcmRlcklkPVwib3JkZXJJZFwiIDpvcmRlck5vPVwic2VsZWN0ZWRPcmRlclwiIDptYWNoaW5lTm89XCJtYWNoaW5lTm9cIiAvPlxyXG5cdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdDx2aWV3IHYtaWY9XCJjdXJyZW50VGFiID09PSAxMFwiIGNsYXNzPVwidGFiLWNvbnRlbnRcIj5cclxuXHRcdFx0XHQ8IS0tIOiwg+eUqCBtb2xkUmVjb3JkIOe7hOS7tiAtLT5cclxuXHRcdFx0XHQ8TW9sZFJlY29yZCA6b3JkZXJJZD1cIm9yZGVySWRcIiA6b3JkZXJObz1cInNlbGVjdGVkT3JkZXJcIiA6bWFjaGluZU5vPVwibWFjaGluZU5vXCIgLz5cclxuXHRcdFx0PC92aWV3PlxyXG5cdFx0XHQ8dmlldyB2LWlmPVwiY3VycmVudFRhYiA9PT0gNFwiIGNsYXNzPVwidGFiLWNvbnRlbnRcIj5cclxuXHRcdFx0XHQ8IS0tICDosIPnlKggbW9sZCDnu4Tku7YgLS0+XHJcblx0XHRcdFx0PFdvcmtPcmRlclByaW50IDpvcmRlcklkPVwib3JkZXJJZFwiIDpvcmRlck5vPVwic2VsZWN0ZWRPcmRlclwiIDptYWNoaW5lTm89XCJtYWNoaW5lTm9cIiAvPlxyXG5cdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdDx2aWV3IHYtaWY9XCJjdXJyZW50VGFiID09PSA4XCIgY2xhc3M9XCJ0YWItY29udGVudFwiPlxyXG5cdFx0XHRcdDwhLS0g6LCD55SoIG1vbGQg57uE5Lu2IC0tPlxyXG5cdFx0XHRcdDxQcmludEluaXQgOm9yZGVySWQ9XCJvcmRlcklkXCIgOm9yZGVyTm89XCJzZWxlY3RlZE9yZGVyXCIgOm1hY2hpbmVObz1cIm1hY2hpbmVOb1wiIC8+XHJcblx0XHRcdDwvdmlldz5cclxuXHRcdFx0PHZpZXcgdi1pZj1cImN1cnJlbnRUYWIgPT09IDVcIiBjbGFzcz1cInRhYi1jb250ZW50XCI+XHJcblx0XHRcdFx0PFBERlNob3cgOm9yZGVySWQ9XCJvcmRlcklkXCIgOm9yZGVyTm89XCJzZWxlY3RlZE9yZGVyXCIgOm1hY2hpbmVObz1cIm1hY2hpbmVOb1wiIC8+XHJcblx0XHRcdDwvdmlldz5cclxuXHRcdFx0PHZpZXcgdi1pZj1cImN1cnJlbnRUYWIgPT09IDZcIiBjbGFzcz1cInRhYi1jb250ZW50XCI+XHJcblx0XHRcdFx0PFRlY2hub2xvZ3kgOm9yZGVySWQ9XCJvcmRlcklkXCIgOm9yZGVyTm89XCJzZWxlY3RlZE9yZGVyXCIgOm1hY2hpbmVObz1cIm1hY2hpbmVOb1wiIC8+XHJcblx0XHRcdDwvdmlldz5cclxuXHRcdFx0PHZpZXcgdi1pZj1cImN1cnJlbnRUYWIgPT09IDlcIiBjbGFzcz1cInRhYi1jb250ZW50XCI+XHJcblx0XHRcdFx0PCEtLSDorr7lpIfngrnmo4Dop4blm74gLS0+XHJcblx0XHRcdFx0PEVxdWlwbWVudEluc3BlY3Rpb24gOm1hY2hpbmVObz1cIm1hY2hpbmVOb1wiIC8+XHJcblx0XHRcdDwvdmlldz5cclxuXHRcdDwvc2Nyb2xsLXZpZXc+XHJcblxyXG5cclxuXHRcdDwhLS0g5by556qX5LiL5ouJ5qGG5Y+q5pi+56S65bel5Y2V54q25oCBIC0tPlxyXG5cdFx0PHZpZXcgdi1pZj1cImlzU2hvd1wiIGNsYXNzPVwib3ZlcmxheVwiPlxyXG5cdFx0XHQ8dmlldyBjbGFzcz1cInBvcHVwXCI+XHJcblx0XHRcdFx0PHZpZXcgY2xhc3M9XCJmb3JtLXJvd1wiPlxyXG5cdFx0XHRcdFx0PHZpZXcgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyO1wiPlxyXG5cdFx0XHRcdFx0XHQ8bGFiZWwgc3R5bGU9XCJmbG9hdDogbGVmdDttYXJnaW4tdG9wOiAxOHB4O2ZvbnQtc2l6ZTogMjJweDtcIj7ngrnlh7vmjInpkq7nrZvpgInlt6XljZXnirbmgIE6PC9sYWJlbD5cclxuXHRcdFx0XHRcdFx0PHN1cGVyd2VpLWNvbWJveCA6Y2FuZGlkYXRlcz1cImVuZ2luZWVyaW5nTm9NYXBMaXN0XCIgcGxhY2Vob2xkZXI9XCLor7fpgInmi6lcIiB2LW1vZGVsPVwiZW5naW5lZXJpbmdOb1wiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0IEBzZWxlY3Q9XCJvbkVuZ2luZWVyaW5nTm9DaGFuZ2VcIiBjbGFzcz1cInBpY2tlclwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0IHN0eWxlPVwicGFkZGluZzogN3B4IDQ2cHg7d2lkdGg6IDY1MHB4O1wiPjwvc3VwZXJ3ZWktY29tYm94PlxyXG5cdFx0XHRcdFx0XHQ8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAyMHB4OyBjb2xvcjogI2ZmNjYwMDsgZm9udC1zaXplOiAxOHB4O1wiPuWkmumAieaXtuWPquS/neeVmeacgOWQjuS4gOadoeW3peWNlTwvc3Bhbj5cclxuXHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHQ8L3ZpZXc+XHJcblxyXG5cdFx0XHRcdDxkaXYgc3R5bGU9XCJoZWlnaHQ6IDQ1MHB4OyBvdmVyZmxvdzogYXV0bztcIj4gPCEtLSDosIPmlbTpq5jluqbkuLozODBweO+8jOS4uuW6lemDqOaMiemSrueVmeWHuuabtOWkmuepuumXtCAtLT5cclxuXHRcdFx0XHRcdDx0YWJsZT5cclxuXHJcblx0XHRcdFx0XHRcdDx2aWV3IGNsYXNzPVwic2VjdGlvbiBjYXJkXCI+XHJcblx0XHRcdFx0XHRcdFx0PHVuaS10YWJsZSByZWY9XCJ0YWJsZVwiIHR5cGU9XCJzZWxlY3Rpb25cIiBib3JkZXIgc3RyaXBlIGVtcHR5VGV4dD1cIuaaguaXoOabtOWkmuaVsOaNrlwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdCAgIGNsYXNzPVwibGFyZ2Utc2VsZWN0aW9uLXRhYmxlXCIgQHNlbGVjdGlvbi1jaGFuZ2U9XCJzZWxlY3Rpb25DaGFuZ2VcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDx1bmktdHI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx1bmktdGggYWxpZ249XCJjZW50ZXJcIiBjbGFzcz1cInRoXCIgc3R5bGU9XCJ3aWR0aDogMTAwcHg7XCI+5bel5bqPPC91bmktdGg+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx1bmktdGggYWxpZ249XCJjZW50ZXJcIiBjbGFzcz1cInRoXCIgc3R5bGU9XCJ3aWR0aDogMjAwcHg7XCI+5bel5Y2V5Y+3PC91bmktdGg+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx1bmktdGggYWxpZ249XCJjZW50ZXJcIiBjbGFzcz1cInRoXCIgc3R5bGU9XCJ3aWR0aDogMTUwcHg7XCI+5Lqn5ZOB57yW56CBPC91bmktdGg+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx1bmktdGggYWxpZ249XCJjZW50ZXJcIiBjbGFzcz1cInRoXCIgc3R5bGU9XCJ3aWR0aDogMjQwcHg7XCI+5Lqn5ZOB5ZCN56ewPC91bmktdGg+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx1bmktdGggYWxpZ249XCJjZW50ZXJcIiBjbGFzcz1cInRoXCIgc3R5bGU9XCJ3aWR0aDogMjAwcHg7XCI+6KeE5qC8PC91bmktdGg+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx1bmktdGggYWxpZ249XCJjZW50ZXJcIiBjbGFzcz1cInRoXCIgc3R5bGU9XCJ3aWR0aDogMTUwcHg7XCI+5bey55Sf5Lqn5pWw6YePPC91bmktdGg+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx1bmktdGggYWxpZ249XCJjZW50ZXJcIiBjbGFzcz1cInRoXCIgc3R5bGU9XCJ3aWR0aDogMTUwcHg7XCI+5pyq55Sf5Lqn5pWw6YePPC91bmktdGg+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx1bmktdGggYWxpZ249XCJjZW50ZXJcIiBjbGFzcz1cInRoXCIgc3R5bGU9XCJ3aWR0aDogMTUwcHg7XCI+5rS+5bel5pWw6YePPC91bmktdGg+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx1bmktdGggYWxpZ249XCJjZW50ZXJcIiBjbGFzcz1cInRoXCIgc3R5bGU9XCJ3aWR0aDogMTUwcHg7XCI+5bel5Y2V5pWw6YePPC91bmktdGg+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx1bmktdGggYWxpZ249XCJjZW50ZXJcIiBjbGFzcz1cInRoXCIgc3R5bGU9XCJ3aWR0aDogOTBweDtcIj7lt6XljZXnirbmgIE8L3VuaS10aD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHVuaS10aCBhbGlnbj1cImNlbnRlclwiIGNsYXNzPVwidGhcIiBzdHlsZT1cIndpZHRoOiA5MHB4O1wiPuaKpeW3peS6ujwvdW5pLXRoPlxyXG48IS0tIFx0XHRcdFx0XHRcdFx0XHRcdDx1bmktdGggYWxpZ249XCJjZW50ZXJcIiBjbGFzcz1cInRoXCIgc3R5bGU9XCJ3aWR0aDogMTI2cHg7XCI+6YCJ5oupPC91bmktdGg+IC0tPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC91bmktdHI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dW5pLXRyIHYtZm9yPVwiKGl0ZW0sIGluZGV4KSBpbiB0YWJsZURhdGFcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDprZXk9XCJpbmRleFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0OmNsYXNzPVwieydyb3ctc2VsZWN0ZWQnOiBzZWxlY3RlZEluZGV4cy5pbmNsdWRlcyhpbmRleCl9XCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRAY2xpY2s9XCJvblJvd0NsaWNrKGluZGV4KVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3R5bGU9XCJjdXJzb3I6IHBvaW50ZXI7XCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx1bmktdGQgYWxpZ249XCJjZW50ZXJcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgY2xhc3M9XCJmb3JtLWlucHV0XCIgZGlzYWJsZWQ9XCJ0cnVlXCIgdHlwZT1cInRleHRcIiB2LW1vZGVsPVwiaXRlbS5wcm9jTmFtZVwiIC8+PCEtLeW3peW6jy0tPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3VuaS10ZD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHVuaS10ZCBhbGlnbj1cImNlbnRlclwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmb3JtLWlucHV0XCI+e3sgaXRlbS5kYWEwMDEgfX08L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PC91bmktdGQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx1bmktdGQgYWxpZ249XCJjZW50ZXJcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZm9ybS1pbnB1dFwiPnt7IGl0ZW0uZGFhMDAyIH19PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvdW5pLXRkPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dW5pLXRkIGFsaWduPVwiY2VudGVyXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZvcm0taW5wdXRcIj57eyBpdGVtLmRhYTAwMyB9fTwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3VuaS10ZD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHVuaS10ZCBhbGlnbj1cImNlbnRlclwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmb3JtLWlucHV0XCI+e3sgaXRlbS5kYWEwMDQgfX08L2Rpdj48IS0t6KeE5qC8LS0+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvdW5pLXRkPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dW5pLXRkIGFsaWduPVwiY2VudGVyXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0IGNsYXNzPVwiZm9ybS1pbnB1dFwiIGRpc2FibGVkPVwidHJ1ZVwiIHR5cGU9XCJ0ZXh0XCIgdi1tb2RlbD1cIml0ZW0uZGFhMDExXCIgLz48IS0t5bey55Sf5Lqn5pWw6YePLS0+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvdW5pLXRkPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dW5pLXRkIGFsaWduPVwiY2VudGVyXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0IGNsYXNzPVwiZm9ybS1pbnB1dFwiIGRpc2FibGVkPVwidHJ1ZVwiIHR5cGU9XCJ0ZXh0XCIgOnZhbHVlPVwiKGl0ZW0uZGFhMDA4IHx8IDApIC0gKGl0ZW0uZGFhMDExIHx8IDApXCIgLz48IS0t5pyq55Sf5Lqn5pWw6YePLS0+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvdW5pLXRkPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dW5pLXRkIGFsaWduPVwiY2VudGVyXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0IGNsYXNzPVwiZm9ybS1pbnB1dFwiIGRpc2FibGVkPVwidHJ1ZVwiIHR5cGU9XCJ0ZXh0XCIgdi1tb2RlbD1cIml0ZW0uZGFhMDA4XCIgLz48IS0t5rS+5bel5pWw6YePLS0+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvdW5pLXRkPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dW5pLXRkIGFsaWduPVwiY2VudGVyXCI+XHJcblx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1pbnB1dFwiIGRpc2FibGVkPVwidHJ1ZVwiIHR5cGU9XCJ0ZXh0XCIgdi1tb2RlbD1cIml0ZW0uZGFhMDA4XCIgLz48IS0t5bel5Y2V5pWw6YePLS0+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvdW5pLXRkPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dW5pLXRkIGFsaWduPVwiY2VudGVyXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0IGNsYXNzPVwiZm9ybS1pbnB1dFwiIGRpc2FibGVkPVwidHJ1ZVwiIHR5cGU9XCJ0ZXh0XCIgdi1tb2RlbD1cIml0ZW0uZGFhMDE4XCIgLz48IS0t5bel5Y2V54q25oCBLS0+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvdW5pLXRkPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dW5pLXRkIGFsaWduPVwiY2VudGVyXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0IGNsYXNzPVwiZm9ybS1pbnB1dFwiIGRpc2FibGVkPVwidHJ1ZVwiIHR5cGU9XCJ0ZXh0XCIgdi1tb2RlbD1cIml0ZW0uc3RhZmZOYW1lXCIgLz48IS0t5oql5bel5Lq6LS0+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvdW5pLXRkPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dW5pLXRkPlxyXG48IS0tIFx0XHRcdFx0XHRcdFx0XHRcdFx0PHZpZXcgY2xhc3M9XCJ1bmktZ3JvdXBcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxidXR0b24gY2xhc3M9XCJzZWxlY3QtYnRuXCIgdHlwZT1cImRlZmF1bHRcIiBAY2xpY2s9XCJ0b0RldGFpbChpdGVtKVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHTovazliLDkuLvnlYzpnaJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvYnV0dG9uPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvdmlldz4gLS0+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvdW5pLXRkPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC91bmktdHI+XHJcblx0XHRcdFx0XHRcdFx0PC91bmktdGFibGU+XHJcblx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHJcblx0XHRcdFx0XHQ8L3RhYmxlPlxyXG5cdFx0XHRcdDwvZGl2PlxyXG5cclxuXHRcdFx0XHQ8dmlldyBjbGFzcz1cImJvdHRvbS1zZWN0aW9uXCI+XHJcblx0XHRcdFx0XHQ8YnV0dG9uIGNsYXNzPVwic2F2ZS1idG5cIiBAY2xpY2s9XCJzYXZlXCI+5L+d5a2Y6YCJ5oupPC9idXR0b24+XHJcblx0XHRcdFx0XHQ8YnV0dG9uIGNsYXNzPVwiY2FuY2VsLWJ0blwiIEBjbGljaz1cImlzU2hvdyA9ICFpc1Nob3dcIj7lj5bmtog8L2J1dHRvbj5cclxuXHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdDwvdmlldz5cclxuXHRcdDwvdmlldz5cclxuXHQ8L3ZpZXc+XHJcbjwvdGVtcGxhdGU+XHJcblxyXG48c2NyaXB0PlxyXG5pbXBvcnQgV29ya09yZGVyU3RhdHVzIGZyb20gJy4uL2NvbXBvbmVudHMvV29ya09yZGVyU3RhdHVzLnZ1ZSc7IC8vIOehruS/nei3r+W+hOato+ehrlxyXG5pbXBvcnQgVW5pVGFibGUgZnJvbSBcIi4uL3VuaV9tb2R1bGVzL3VuaS10YWJsZS9jb21wb25lbnRzL3VuaS10YWJsZS91bmktdGFibGUudnVlXCI7XHJcbmltcG9ydCBNb2xkIGZyb20gXCIuLi9jb21wb25lbnRzL21vbGQudnVlXCI7XHJcbmltcG9ydCBNYWNoaW5lIGZyb20gXCIuLi9jb21wb25lbnRzL21hY2hpbmUudnVlXCI7XHJcbmltcG9ydCBXb3JrT3JkZXJQcmludCBmcm9tIFwiLi4vY29tcG9uZW50cy9Xb3JrT3JkZXJQcmludC52dWVcIjtcclxuaW1wb3J0IFdvcmtPcmRlciBmcm9tIFwiLi4vY29tcG9uZW50cy9Xb3JrT3JkZXIudnVlXCI7XHJcbmltcG9ydCBUZWNobm9sb2d5IGZyb20gXCIuLi9jb21wb25lbnRzL1RlY2hub2xvZ3kudnVlXCI7XHJcbmltcG9ydCBQREZTaG93IGZyb20gXCIuLi9jb21wb25lbnRzL1BERlNob3cudnVlXCI7XHJcbmltcG9ydCBQcmludEluaXQgZnJvbSBcIi4uL2NvbXBvbmVudHMvUHJpbnRJbml0LnZ1ZVwiO1xyXG5pbXBvcnQgUHJpbnRUZXN0IGZyb20gXCIuLi9jb21wb25lbnRzL1ByaW50VGVzdC52dWVcIjtcclxuaW1wb3J0IEVxdWlwbWVudEluc3BlY3Rpb24gZnJvbSBcIi4uL2NvbXBvbmVudHMvRXF1aXBtZW50SW5zcGVjdGlvbi52dWVcIjtcclxuaW1wb3J0IE1vbGRSZWNvcmQgZnJvbSBcIi4uL3BhZ2VzL21vbGRSZWNvcmQudnVlXCI7XHJcblxyXG5cdGV4cG9ydCBkZWZhdWx0IHtcclxuXHRcdGNvbXBvbmVudHM6IHtcclxuXHRcdFx0VGVjaG5vbG9neSxcclxuXHRcdFx0V29ya09yZGVyLFxyXG5cdFx0XHRXb3JrT3JkZXJQcmludCxcclxuXHRcdFx0TWFjaGluZSxcclxuXHRcdFx0TW9sZCxcclxuXHRcdFx0VW5pVGFibGUsXHJcblx0XHRcdFdvcmtPcmRlclN0YXR1cyxcclxuXHRcdFx0UERGU2hvdyxcclxuXHRcdFx0UHJpbnRJbml0LFxyXG5cdFx0XHRQcmludFRlc3QsXHJcblx0XHRcdEVxdWlwbWVudEluc3BlY3Rpb24sXHJcblx0XHRcdE1vbGRSZWNvcmRcclxuXHRcdH0sXHJcblx0XHRkYXRhKCkge1xyXG5cdFx0XHRyZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgb3JkZXJTdGF0dXM6ICcnLCAvLyDpu5jorqTlhajpg6hcclxuXHRcdFx0XHRjdXJyZW50VGFiOiA3LFxyXG5cclxuICAgICAgICAgICAgICAgIHByb2R1Y3RDb2RlOiAnJywgLy8g5Lqn5ZOB57yW56CBXHJcbiAgICAgICAgICAgICAgICBwcm9kdWN0U3BlYzogJycsIC8vIOS6p+WTgeinhOagvFxyXG5cclxuXHRcdFx0XHRtYWNoaW5lTGlzdDogW10sXHJcblxyXG5cdFx0XHRcdG1hY2hpbmU6IFtdLFxyXG5cclxuXHRcdFx0XHRlbmdpbmVlcmluZ05vTGlzdDogW10sXHJcblx0XHRcdFx0ZW5naW5lZXJpbmdOb01hcExpc3Q6IFtdLFxyXG5cdFx0XHRcdGVuZ2luZWVyaW5nTm86ICcnLFxyXG5cclxuXHRcdFx0XHRtYWNoaW5lTm86ICcnLFxyXG5cdFx0XHRcdG1hY2hpbmVOYW1lOiAnJyxcclxuXHJcblx0XHRcdFx0dGFibGVEYXRhOiBbXSxcclxuXHRcdFx0XHRpc1Nob3dUYWJsZURhdGE6IFtdLFxyXG5cclxuXHRcdFx0XHRvcmRlclN0YXR1czogJ+W8gOW3pScsXHJcblx0XHRcdFx0c2VsZWN0ZWRPcmRlcjogJycsXHJcblx0XHRcdFx0b3JkZXJJZDogMCxcclxuXHJcblx0XHRcdFx0c2VsZWN0ZWRJbmRleHM6IFtdLFxyXG5cclxuXHRcdFx0XHRpc1Nob3c6IGZhbHNlLFxyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdC8vIOiHquWKqOi3s+i9rOebuOWFs1xyXG5cdFx0XHRcdGF1dG9SZWRpcmVjdFRpbWVyOiBudWxsLFxyXG5cdFx0XHRcdGF1dG9SZWRpcmVjdFRpbWU6IDUgKiA2MCAqIDEwMDAsIC8vIDXliIbpkp9cclxuXHRcdFx0XHRcclxuXHRcdFx0XHQvLyDlt6XljZXpgInmi6npobXpnaLlrprml7bliLfmlrBcclxuXHRcdFx0XHRhdXRvUmVmcmVzaFRpbWVyOiBudWxsLFxyXG5cdFx0XHRcdGF1dG9SZWZyZXNoSW50ZXJ2YWw6IDYwICogMTAwMCwgLy8gMeWIhumSn1xyXG5cdFx0XHR9O1xyXG5cdFx0fSxcclxuXHRcdGNyZWF0ZWQoKSB7XHJcblxyXG5cdFx0XHQvL+iwg+ivleS9v+eUqOeahOS7o+eggVxyXG5cdFx0XHQvLyB0aGlzLm1hY2hpbmVObyA9IHVuaS5nZXRTdG9yYWdlU3luYygnbWFjaGluZU5vJyk7XHJcblx0XHRcdC8vIHRoaXMubWFjaGluZU5hbWUgPSB1bmkuZ2V0U3RvcmFnZVN5bmMoJ21hY2hpbmVOYW1lJyk7XHJcblx0XHRcdC8vXHJcblx0XHRcdC8vIGlmICh0aGlzLm1hY2hpbmVObykge1xyXG5cdFx0XHQvLyAgIHRoaXMuZ2V0V29tZGFhSXNTaG93KCk7XHJcblx0XHRcdC8vIH1cclxuXHJcblx0XHRcdHVuaS5jbGVhclN0b3JhZ2VTeW5jKCk7XHJcblx0XHRcdFxyXG5cdFx0XHR0aGlzLmNoZWNrRm9yVXBkYXRlKCk7XHJcblx0XHRcdFxyXG5cdFx0XHQvL+W3peaOp+acuuS9v+eUqOeahOS7o+eggVxyXG5cdFx0XHR0aGlzLmdldFByaW50SW5mbygpO1xyXG5cdFx0XHRcclxuXHRcdH0sXHJcblx0XHRvbkxvYWQob3B0aW9ucykge1xyXG5cdFx0XHR0aGlzLmdldE1hY2hpbmVMaXN0KCk7XHJcblx0XHR9LFxyXG5cdFx0b25TaG93KCkge1xyXG5cdFx0XHR0aGlzLnJlZnJlc2goKTtcclxuXHRcdFx0dGhpcy5yZXNldEF1dG9SZWRpcmVjdFRpbWVyKCk7XHJcblx0XHRcdC8vIOWmguaenOWcqOW3peWNlemAieaLqemhtemdou+8jOWQr+WKqOWumuaXtuWIt+aWsFxyXG5cdFx0XHRpZiAodGhpcy5jdXJyZW50VGFiID09PSA3KSB7XHJcblx0XHRcdFx0dGhpcy5zdGFydEF1dG9SZWZyZXNoKCk7XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblx0XHRvbkhpZGUoKSB7XHJcblx0XHRcdC8vIOmhtemdoumakOiXj+aXtua4hemZpOWumuaXtuWZqFxyXG5cdFx0XHR0aGlzLnN0b3BBdXRvUmVmcmVzaCgpO1xyXG5cdFx0fSxcclxuXHRcdG1ldGhvZHM6IHtcclxuICAgICAgICAgICAgb25Sb3dDbGljayhpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4cyA9IFtpbmRleF07IC8vIOWNlemAiVxyXG4gICAgICAgICAgICAgICAgLy8g5omL5Yqo6Kem5Y+RIHNlbGVjdGlvbkNoYW5nZSDku6XlkIzmraXlpI3pgInmoYZcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlKHsgZGV0YWlsOiB7IGluZGV4IH0gfSk7XHJcbiAgICAgICAgICAgICAgICAvLyDph43nva7oh6rliqjot7PovazorqHml7blmahcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzZXRBdXRvUmVkaXJlY3RUaW1lcigpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8g6YeN572u6Ieq5Yqo6Lez6L2s6K6h5pe25ZmoXHJcbiAgICAgICAgICAgIHJlc2V0QXV0b1JlZGlyZWN0VGltZXIoKSB7XHJcbiAgICAgICAgICAgICAgICAvLyDmuIXpmaTnjrDmnInnmoTlrprml7blmahcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmF1dG9SZWRpcmVjdFRpbWVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuYXV0b1JlZGlyZWN0VGltZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXV0b1JlZGlyZWN0VGltZXIgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAvLyDpmaTkuobkuLvpobUoMCnjgIHlt6XljZXpgInmi6npobUoNynjgIHnlJ/kuqfmiqXlt6XpobUoNCnkuYvlpJbnmoTpobXpnaLmiY3orr7nva7oh6rliqjot7PovaxcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRUYWIgIT09IDAgJiYgdGhpcy5jdXJyZW50VGFiICE9PSA3ICYmIHRoaXMuY3VycmVudFRhYiAhPT0gNCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXV0b1JlZGlyZWN0VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g6Lez6L2s5Zue5Li76aG1XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFRhYiA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOaYvuekuuaPkOekuuS/oeaBr1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmkuc2hvd1RvYXN0KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn6aG16Z2i6LaF5pe277yM6Ieq5Yqo6L+U5Zue5Li76aG1JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb246ICdub25lJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAyMDAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sIHRoaXMuYXV0b1JlZGlyZWN0VGltZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcblx0XHRcdGNoZWNrRm9yVXBkYXRlKCkge1xyXG5cdFx0XHRcdHRoaXMuJHBvc3Qoe1xyXG5cdFx0XHRcdFx0dXJsOiBcIi9EZXZNYWNoaW5lL2dldEFwcFVwZ3JhZGVJbmZvXCIsXHJcblx0XHRcdFx0XHRkYXRhOiB7fVxyXG5cdFx0XHRcdH0pLnRoZW4ocmVzID0+IHtcclxuXHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0bGV0IG5ld1ZlcnNpb24gPSByZXMuZGF0YS52ZXJzaW9uO1xyXG5cdFx0XHRcdFx0bGV0IGN1cnJlbnRWZXJzaW9uID0gdW5pLmdldFN5c3RlbUluZm9TeW5jKCk7IC8vIOiOt+WPluW9k+WJjSBBUEsg54mI5pys5Y+3XHJcblx0XHRcdFx0XHQgXHJcblx0XHRcdFx0XHRpZiAobmV3VmVyc2lvbiA+IGN1cnJlbnRWZXJzaW9uLmFwcFZlcnNpb24pIHtcclxuXHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdFx0dGl0bGU6IFwi5Y+R546w5paw54mI5pysXCIsXHJcblx0XHRcdFx0XHRcdFx0Y29udGVudDogXCLmmK/lkKbkuIvovb3mnIDmlrDniYjmnKw/XCIsXHJcblx0XHRcdFx0XHRcdFx0c3VjY2VzczogKG1vZGFsUmVzKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAobW9kYWxSZXMuY29uZmlybSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmRvd25sb2FkTmV3QXBrKHJlcy5kYXRhLmFwa1VybCk7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0Ly90aGlzLmRvd25sb2FkTmV3QXBrKHJlcy5kYXRhLmFwa1VybCk7XHJcblx0XHRcdFx0XHRcdHRoaXMudXBkYXRlQ2hlY2tlZCA9IHRydWU7IC8vIOagh+iusOabtOaWsOW3suajgOafpei/h1xyXG5cdFx0XHRcdFx0XHQvLyAgICAgIC8vIOWmguaenOacieaWsOeJiOacrO+8jOW8gOWni+S4i+i9vVxyXG5cdFx0XHRcdFx0XHQvL2Rvd25sb2FkKHJlcy5kYXRhLmFwa1VybCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0XHRcclxuXHRcdFx0fSxcclxuXHRcdFx0XHJcblx0XHRcdGRvd25sb2FkTmV3QXBrKGFwa1VybCkge1xyXG5cdFx0XHRcdHVuaS5zaG93VG9hc3Qoe1xyXG5cdFx0XHRcdFx0dGl0bGU6IFwi5byA5aeL5LiL6L295pu05pawLi4uXCIsXHJcblx0XHRcdFx0XHRpY29uOiBcIm5vbmVcIixcclxuXHRcdFx0XHRcdGR1cmF0aW9uOiAyMDAwXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFxyXG5cdFx0XHRcdHVuaS5kb3dubG9hZEZpbGUoe1xyXG5cdFx0XHRcdFx0dXJsOiBhcGtVcmwsXHJcblx0XHRcdFx0XHRzdWNjZXNzOiAocmVzKSA9PiB7XHJcblx0XHRcdFx0XHRcdGlmIChyZXMuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XHJcblx0XHRcdFx0XHRcdFx0cGx1cy5ydW50aW1lLmluc3RhbGwocmVzLnRlbXBGaWxlUGF0aCwge1xyXG5cdFx0XHRcdFx0XHRcdFx0Zm9yY2U6IHRydWVcclxuXHRcdFx0XHRcdFx0XHR9LCBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKFwi5a6J6KOF5oiQ5Yqf77yM6YeN5ZCv5bqU55SoXCIpO1xyXG5cdFx0XHRcdFx0XHRcdFx0Ly9wbHVzLnJ1bnRpbWUucmVzdGFydCgpO1xyXG5cdFx0XHRcdFx0XHRcdFx0Ly9wbHVzLnJ1bnRpbWUucXVpdCgpO1xyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gdW5pLm5hdmlnYXRlQmFjaygpXHJcblx0XHRcdFx0XHRcdFx0fSwgZnVuY3Rpb24oZSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5lcnJvcihcIuWuieijheWksei0pTpcIiwgZSk7XHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRmYWlsOiAoZXJyKSA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoXCLkuIvovb3lpLHotKU6XCIsIGVycik7XHJcblx0XHRcdFx0XHRcdHVuaS5zaG93VG9hc3Qoe1xyXG5cdFx0XHRcdFx0XHRcdHRpdGxlOiBcIuS4i+i9veWksei0pe+8jOivt+ajgOafpee9kee7nFwiLFxyXG5cdFx0XHRcdFx0XHRcdGljb246IFwibm9uZVwiLFxyXG5cdFx0XHRcdFx0XHRcdGR1cmF0aW9uOiAyMDAwXHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRcclxuXHRcdFx0cmVmcmVzaCgpIHtcclxuXHRcdFx0XHR0aGlzLmdldE1hY2hpbmVMaXN0KCk7XHJcblx0XHRcdFx0dGhpcy5nZXRQcmludEluZm8oKTsgLy8gZ2V0UHJpbnRJbmZvIOWujOaIkOWQjuS8muiHquWKqOiwg+eUqCBnZXRXb21kYWFJc1Nob3coKVxyXG5cdFx0XHRcdC8vIOWmguaenOW9k+WJjeWcqOW3peWNlemAieaLqemhtemdou+8jOm7mOiupOWKoOi9veW3peWNleWIl+ihqFxyXG5cdFx0XHRcdGlmICh0aGlzLmN1cnJlbnRUYWIgPT09IDcpIHtcclxuXHRcdFx0XHRcdC8vIOagueaNruW9k+WJjee7keWumuW3peWNleeahOeKtuaAgeWGs+Wumum7mOiupOetm+mAieadoeS7tlxyXG5cdFx0XHRcdFx0bGV0IGRlZmF1bHRTdGF0dXMgPSAn5b6F5byA5bel44CB5pyq5byA5bel44CB5pqC5YGcJztcclxuXHRcdFx0XHRcdGlmICh0aGlzLmlzU2hvd1RhYmxlRGF0YS5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IGN1cnJlbnRPcmRlclN0YXR1cyA9IHRoaXMuaXNTaG93VGFibGVEYXRhWzBdLmRhYTAxODtcclxuXHRcdFx0XHRcdFx0aWYgKGN1cnJlbnRPcmRlclN0YXR1cyA9PT0gJ+W8gOW3pScpIHtcclxuXHRcdFx0XHRcdFx0XHRkZWZhdWx0U3RhdHVzID0gJ+W8gOW3pSc7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoY3VycmVudE9yZGVyU3RhdHVzID09PSAn5a6M5belJykge1xyXG5cdFx0XHRcdFx0XHRcdGRlZmF1bHRTdGF0dXMgPSAn5a6M5belJztcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0dGhpcy5lbmdpbmVlcmluZ05vID0gZGVmYXVsdFN0YXR1cztcclxuXHRcdFx0XHRcdHRoaXMuZW5naW5lZXJpbmdOb01hcExpc3QgPSBbXHJcblx0XHRcdFx0XHRcdCflvoXlvIDlt6XjgIHmnKrlvIDlt6XjgIHmmoLlgZwnLFxyXG5cdFx0XHRcdFx0XHQn5byA5belJyxcclxuXHRcdFx0XHRcdFx0J+WujOW3pSdcclxuXHRcdFx0XHRcdF07XHJcblx0XHRcdFx0XHR0aGlzLmdldFdvbWRhYUJ5U3RhdHVzKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRnZXRQcmludEluZm8oKSB7XHJcblx0XHRcdFx0dmFyIG1hYyA9IFwiXCI7XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0bWFjID0gXCI3NDoyNDpjYTo0ZjpiNzo0ZFwiO1xyXG5cdFx0XHRcdHRoaXMuJHBvc3Qoe1xyXG5cdFx0XHRcdFx0dXJsOiBcIi9EZXZNYWNoaW5lL0dldERldk1hY2hpbmVCeVBkYU1hY1wiLFxyXG5cdFx0XHRcdFx0ZGF0YToge1xyXG5cdFx0XHRcdFx0XHRwZGFNYWM6IG1hYyxcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KS50aGVuKHJlcyA9PiB7XHJcblx0XHRcdFx0XHRsZXQgZGV2TWFjaGluZSA9IHJlcy5kYXRhLnRiQmlsbExpc3Q7XHJcblx0XHRcdFx0XHR0aGlzLm1hY2hpbmVObyA9IGRldk1hY2hpbmUubWFjaGluZU5vO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFjaGluZU5hbWUgPSBcIuiwg+ivleaooeW8j++8mlwiICsgdGhpcy5tYWNoaW5lTm8gKyBcIuWPt+m9v+i9ruaculwiXHJcblxyXG5cdFx0XHRcdFx0dW5pLnNldFN0b3JhZ2VTeW5jKCdtYWNoaW5lTm8nLCB0aGlzLm1hY2hpbmVObyk7XHJcblx0XHRcdFx0XHR1bmkuc2V0U3RvcmFnZVN5bmMoJ3ByaW50TWFjJywgZGV2TWFjaGluZS5wcmludE1hYyk7XHJcblxyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2coZGV2TWFjaGluZS5wcmludE1hYyk7XHJcblxyXG5cdFx0XHRcdFx0dGhpcy5nZXRXb21kYWFJc1Nob3coKTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0XHJcblx0Ly8gIFx0XHRcdGlmIChwbHVzLm9zLm5hbWUgPT0gXCJBbmRyb2lkXCIpIHtcclxuXHQvLyAgXHRcdFx0XHQvL+iOt+WPluaJi+acuk1BQ+WcsOWdgFxyXG5cdC8vICBcdFx0XHRcdHZhciBDb250ZXh0ID0gcGx1cy5hbmRyb2lkLmltcG9ydENsYXNzKFwiYW5kcm9pZC5jb250ZW50LkNvbnRleHRcIik7XHJcblx0Ly8gIFx0XHRcdFx0dmFyIFdpZmlNYW5hZ2VyID0gcGx1cy5hbmRyb2lkLmltcG9ydENsYXNzKFwiYW5kcm9pZC5uZXQud2lmaS5XaWZpTWFuYWdlclwiKTtcclxuXHQvLyAgXHRcdFx0XHR2YXIgd2lmaU1hbmFnZXIgPSBwbHVzLmFuZHJvaWQucnVudGltZU1haW5BY3Rpdml0eSgpLmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5XSUZJX1NFUlZJQ0UpO1xyXG5cdC8vICBcdFx0XHRcdHZhciBXaWZpSW5mbyA9IHBsdXMuYW5kcm9pZC5pbXBvcnRDbGFzcyhcImFuZHJvaWQubmV0LndpZmkuV2lmaUluZm9cIik7XHJcblx0Ly8gIFx0XHRcdFx0dmFyIHdpZmlJbmZvID0gd2lmaU1hbmFnZXIuZ2V0Q29ubmVjdGlvbkluZm8oKTtcclxuXHQvLyAgXHRcdFx0XHRtYWMgPSB3aWZpSW5mby5nZXRNYWNBZGRyZXNzKCk7XHJcblx0XHRcdFx0XHRcclxuXHQvLyAgXHRcdFx0XHQvL+WmguaenG1hY+S4uuKAnDAyOjAwOjAwOjAwOjAwOjAw4oCd77yM5YiZ5Y+v6IO95piv5a6J5Y2TNi4w5Lul5LiK54mI5pys77yM5YiZ5L2/55So5Y+m5LiA56eN5pa55rOV6I635Y+WbWFj5Zyw5Z2AXHJcblx0Ly8gIFx0XHRcdFx0aWYgKG1hYyA9PSBcIjAyOjAwOjAwOjAwOjAwOjAwXCIpIHtcclxuXHQvLyAgXHRcdFx0XHRcdG1hYyA9IHRoaXMuZ2V0TWFjTmV3KCk7XHJcblx0Ly8gIFx0XHRcdFx0fVxyXG5cdC8vICBcdFx0XHRcdC8v5aaC5p6cbWFj5L2/55So5paw5pa55rOV5L6d54S25piv4oCcMDI6MDA6MDA6MDA6MDA6MDDigJ3liJnkuI3ov5vooYzkv53lrZhcclxuXHQvLyAgXHRcdFx0XHRpZiAobWFjID09IFwiMDI6MDA6MDA6MDA6MDA6MDBcIikge1xyXG5cdC8vICBcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdC8vICBcdFx0XHRcdH1cclxuXHQvLyAgXHRcdFx0XHR1bmkuc2V0U3RvcmFnZVN5bmMoJ3BkYU1hYycsIG1hYyk7XHJcblxyXG5cdC8vICBcdFx0XHRcdHRoaXMuJHBvc3Qoe1xyXG5cdC8vICBcdFx0XHRcdFx0dXJsOiBcIi9EZXZNYWNoaW5lL0dldERldk1hY2hpbmVCeVBkYU1hY1wiLFxyXG5cdC8vICBcdFx0XHRcdFx0ZGF0YToge1xyXG5cdC8vICBcdFx0XHRcdFx0XHRwZGFNYWM6IG1hYyxcclxuXHQvLyAgXHRcdFx0XHRcdH1cclxuXHQvLyAgXHRcdFx0XHR9KS50aGVuKHJlcyA9PiB7XHJcblx0Ly8gIFx0XHRcdFx0XHRsZXQgZGV2TWFjaGluZSA9IHJlcy5kYXRhLnRiQmlsbExpc3Q7XHJcblx0Ly8gIFx0XHRcdFx0XHR0aGlzLm1hY2hpbmVObyA9IGRldk1hY2hpbmUubWFjaGluZU5vO1xyXG5cdC8vICBcdFx0XHRcdFx0dGhpcy5tYWNoaW5lTmFtZSA9IFwi5b2T5YmN5py65Y+w77yaXCIgKyB0aGlzLm1hY2hpbmVObyArIFwi5Y+36b2/6L2u5py6XCI7XHJcblxyXG5cdC8vICBcdFx0XHRcdFx0dW5pLnNldFN0b3JhZ2VTeW5jKCdtYWNoaW5lTm8nLCB0aGlzLm1hY2hpbmVObyk7XHJcblx0Ly8gIFx0XHRcdFx0XHR1bmkuc2V0U3RvcmFnZVN5bmMoJ3ByaW50TWFjJywgZGV2TWFjaGluZS5wcmludE1hYyk7XHJcbiBcclxuXHJcblx0Ly8gIFx0XHRcdFx0XHR0aGlzLmdldFdvbWRhYUlzU2hvdygpO1xyXG5cclxuXHQvLyAgXHRcdFx0XHR9KTtcclxuXHQvLyAgXHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRzYXZlKCkge1xyXG5cdFx0XHRcdGxldCBkYXRhID0gdGhpcy5zZWxlY3RlZEl0ZW1zKCk7XHJcblxyXG5cdFx0XHRcdGlmIChkYXRhLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJHNob3dNZXNzYWdlKFwi6K+36YCJ5oup5LiA5Liq5bel5Y2VXCIpO1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kc2hvd01lc3NhZ2UoXCLkuIDmrKHlj6rog73pgInlj5bkuIDkuKrlt6XljZVcIik7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvL2xldCBmaXJzdFZhbHVlID0gZGF0YVswXVtcIm1vbGRJZFwiXTsgLy8g6I635Y+W56ys5LiA5Liq5a+56LGh55qE5oyH5a6a5bGe5oCn5YC8XHJcblxyXG5cdFx0XHRcdC8vLy8g5L2/55SoIGV2ZXJ5IOaWueazleajgOafpeaJgOacieWvueixoeeahOivpeWxnuaAp+WAvOaYr+WQpuS4gOiHtFxyXG5cdFx0XHRcdC8vbGV0IGZsYWcgPSBkYXRhLmV2ZXJ5KGl0ZW0gPT4gaXRlbVtcIm1vbGRJZFwiXSA9PT0gZmlyc3RWYWx1ZSk7XHJcblx0XHRcdFx0Ly9pZiAoIWZsYWcpIHtcclxuXHRcdFx0XHQvL1x0dGhpcy4kc2hvd01lc3NhZ2UoXCLpgInlj5bnmoRcIiArIGRhdGEubGVuZ3RoICsgXCLkuKrlt6XljZXkuK3nmoTmqKHlhbfnvJblj7fkuI3kuIDoh7RcIik7XHJcblx0XHRcdFx0Ly9cdHJldHVybjtcclxuXHRcdFx0XHQvL31cclxuXHJcblx0XHRcdFx0bGV0IG9yZGVyU2VsZWN0ID0gW107XHJcblxyXG5cdFx0XHRcdGRhdGEuZm9yRWFjaChzID0+IHtcclxuXHRcdFx0XHRcdGxldCBlbnRpdHkgPSB7XHJcblx0XHRcdFx0XHRcdG9yZGVySWQ6IHMuaWQsXHJcblx0XHRcdFx0XHRcdG9yZGVyTm86IHMuZGFhMDAxLFxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0b3JkZXJTZWxlY3QucHVzaChlbnRpdHkpO1xyXG5cdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRsZXQgZWRpdERhdGUgPSB0aGlzLmZvcm1hdERhdGUobmV3IERhdGUoKSk7XHJcblxyXG5cdFx0XHRcdHRoaXMuJHBvc3Qoe1xyXG5cdFx0XHRcdFx0dXJsOiBcIi9NZXNPcmRlclNlbGVjdC9BZGRcIixcclxuXHRcdFx0XHRcdGRhdGE6IHtcclxuXHRcdFx0XHRcdFx0bWFjaGluZU5vOiB0aGlzLm1hY2hpbmVObyxcclxuXHRcdFx0XHRcdFx0ZWRpdERhdGU6IGVkaXREYXRlLFxyXG5cdFx0XHRcdFx0XHRpdGVtOiBvcmRlclNlbGVjdFxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pLnRoZW4ocmVzID0+IHtcclxuXHRcdFx0XHRcdGlmIChyZXMuZGF0YS50YkJpbGxMaXN0KSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuZ2V0V29tZGFhSXNTaG93KCk7XHJcblx0XHRcdFx0XHRcdHVuaS5zaG93VG9hc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfkv53lrZjlt6XljZXmiJDlip8nLFxyXG5cdFx0XHRcdFx0XHRcdC8vdGl0bGU6ICflsIbms6jloZHmnLrlvIDlkIjmqKHmlbDmuIUwJyxcclxuXHRcdFx0XHRcdFx0XHQvL+WwhuWAvOiuvue9ruS4uiBzdWNjZXNzIOaIluiAheebtOaOpeS4jeeUqOWGmWljb27ov5nkuKrlj4LmlbBcclxuXHRcdFx0XHRcdFx0XHRpY29uOiAnc3VjY2VzcycsXHJcblx0XHRcdFx0XHRcdFx0Ly/mmL7npLrmjIHnu63ml7bpl7TkuLogNeenklxyXG5cdFx0XHRcdFx0XHRcdGR1cmF0aW9uOiA1MDAwXHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0dGhpcy5pc1Nob3cgPSBmYWxzZTtcclxuXHRcdFx0XHR9KVxyXG5cclxuXHRcdFx0fSxcclxuXHRcdFx0Z2V0TWFjTmV3KCkge1xyXG5cdFx0XHRcdHZhciBzdHIgPSBcIlwiO1xyXG5cdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRpZiAocGx1cy5vcy5uYW1lID09IFwiQW5kcm9pZFwiKSB7XHJcblx0XHRcdFx0XHRcdHZhciBOZXR3b3JrSW50ZXJmYWNlID0gcGx1cy5hbmRyb2lkLmltcG9ydENsYXNzKFwiamF2YS5uZXQuTmV0d29ya0ludGVyZmFjZVwiKTtcclxuXHRcdFx0XHRcdFx0dmFyIG5ldHdvcmtJbnRlcmZhY2UgPSBOZXR3b3JrSW50ZXJmYWNlLmdldEJ5TmFtZShcIndsYW4wXCIpO1xyXG5cdFx0XHRcdFx0XHR2YXIgYnl0ZXMgPSBuZXR3b3JrSW50ZXJmYWNlLmdldEhhcmR3YXJlQWRkcmVzcygpO1xyXG5cdFx0XHRcclxuXHRcdFx0XHRcdFx0Ly/lsIZieXRlW10g6L2s5o2i5oiQIFN0cmluZ1xyXG5cdFx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdFx0dmFyIHRtcCA9IFwiXCI7XHJcblx0XHRcdFx0XHRcdFx0dmFyIG51bSA9IGJ5dGVzW2ldO1xyXG5cdFx0XHRcdFx0XHRcdGlmIChudW0gPCAwKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR0bXAgPSAoMjU1ICsgbnVtICsgMSkudG9TdHJpbmcoMTYpO1xyXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHR0bXAgPSBudW0udG9TdHJpbmcoMTYpO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRpZiAodG1wLmxlbmd0aCA9PSAxKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR0bXAgPSBcIjBcIiArIHRtcDtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0c3RyICs9IChpID09IDApID8gKHRtcCkgOiAoXCI6XCIgKyB0bXApO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSBjYXRjaCAoZXJyKSB7XHJcblx0XHRcdFx0XHRzdHIgPSBcIjAyOjAwOjAwOjAwOjAwOjAwXCI7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybiBzdHI7XHJcblx0XHRcdH0sXHJcblxyXG4gICAgICAgICAgICBjYW5jZWwoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMubWFjaGluZU5vKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIOebtOaOpeeUqCBmbGFnIOWIpOaWrVxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaGFzQmluZGVkQ3V0dGVyRmxhZykge1xyXG4gICAgICAgICAgICAgICAgICAgIHVuaS5zaG93VG9hc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+W9k+WJjeW3peWNleW3sue7keWumuWIgOWFt++8jOS4jeiDvea4heepuumHjemAiScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb246ICdlcnJvcicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAyMDAwXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBlZGl0RGF0ZSA9IHRoaXMuZm9ybWF0RGF0ZShuZXcgRGF0ZSgpKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleHMgPSBbXTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLiRwb3N0KHtcclxuICAgICAgICAgICAgICAgICAgICB1cmw6IFwiL01lc09yZGVyU2VsZWN0L1JlbW92ZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZU5vOiB0aGlzLm1hY2hpbmVObyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWRpdERhdGU6IGVkaXREYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH0pLnRoZW4ocmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzLmRhdGEudGJCaWxsTGlzdCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1Nob3dUYWJsZURhdGEgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSxcclxuXHJcblx0XHRcdGZvcm1hdERhdGUoZGF0ZSkge1xyXG5cdFx0XHRcdGxldCB5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpOyAvLyDojrflj5blubTku71cclxuXHRcdFx0XHRsZXQgbW9udGggPSBTdHJpbmcoZGF0ZS5nZXRNb250aCgpICsgMSkucGFkU3RhcnQoMiwgJzAnKTsgLy8g6I635Y+W5pyI5Lu95bm26KGl6Zu2XHJcblx0XHRcdFx0bGV0IGRheSA9IFN0cmluZyhkYXRlLmdldERhdGUoKSkucGFkU3RhcnQoMiwgJzAnKTsgLy8g6I635Y+W5pel5pyf5bm26KGl6Zu2XHJcblx0XHRcdFx0cmV0dXJuIGAke3llYXJ9LSR7bW9udGh9LSR7ZGF5fWA7IC8vIOi/lOWbnuagvOW8j+WMluWQjueahOWtl+espuS4slxyXG5cdFx0XHR9LFxyXG5cdFx0XHRzZWxlY3Rpb25DaGFuZ2UoZSkge1xyXG4gICAgICAgICAgICAgICAgLy8g5Y2V6YCJ55u05o6l6LWL5YC8XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXhzID0gW2UuZGV0YWlsLmluZGV4XTtcclxuXHRcdFx0fSxcclxuXHJcblx0XHRcdHNlbGVjdGVkSXRlbXMoKSB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuc2VsZWN0ZWRJbmRleHMubWFwKGkgPT4gdGhpcy50YWJsZURhdGFbaV0pXHJcblx0XHRcdH0sXHJcblxyXG5cclxuXHRcdFx0Y2hhbmdlVGFiKGluZGV4KSB7XHJcblx0XHRcdFx0dGhpcy5jdXJyZW50VGFiID0gaW5kZXg7XHJcblx0XHRcdFx0Ly8g5b2T5YiH5o2i5Yiw5bel5Y2V6YCJ5oup6aG16Z2iKGluZGV4ID09PSA3KeaXtuiHquWKqOWIt+aWsFxyXG5cdFx0XHRcdGlmIChpbmRleCA9PT0gNykge1xyXG5cdFx0XHRcdFx0dGhpcy5yZWZyZXNoKCk7XHJcblx0XHRcdFx0XHQvLyDlkK/liqjlrprml7bliLfmlrBcclxuXHRcdFx0XHRcdHRoaXMuc3RhcnRBdXRvUmVmcmVzaCgpO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHQvLyDnprvlvIDlt6XljZXpgInmi6npobXpnaLml7blgZzmraLlrprml7bliLfmlrBcclxuXHRcdFx0XHRcdHRoaXMuc3RvcEF1dG9SZWZyZXNoKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIOmHjee9ruiHquWKqOi3s+i9rOiuoeaXtuWZqFxyXG5cdFx0XHRcdHRoaXMucmVzZXRBdXRvUmVkaXJlY3RUaW1lcigpO1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGluZGV4KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0b25NYWNoaW5lQ2hhbmdlKGV2ZW50KSB7XHJcblxyXG5cdFx0XHRcdHRoaXMubWFjaGluZU5hbWUgPSBldmVudDtcclxuXHJcblx0XHRcdFx0dGhpcy5tYWNoaW5lTm8gPSB0aGlzLm1hY2hpbmVbdGhpcy5tYWNoaW5lTGlzdC5pbmRleE9mKGV2ZW50KV0ubWFjaGluZU5vO1xyXG5cclxuXHRcdFx0XHR1bmkuY2xlYXJTdG9yYWdlU3luYygpO1xyXG5cclxuXHRcdFx0XHR1bmkuc2V0U3RvcmFnZVN5bmMoJ21hY2hpbmVObycsIHRoaXMubWFjaGluZU5vKTtcclxuXHRcdFx0XHR1bmkuc2V0U3RvcmFnZVN5bmMoJ21hY2hpbmVOYW1lJywgdGhpcy5tYWNoaW5lTmFtZSk7XHJcblxyXG5cdFx0XHRcdHRoaXMuZ2V0V29tZGFhSXNTaG93KCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdG9uRW5naW5lZXJpbmdOb0NoYW5nZShldmVudCkge1xyXG5cclxuXHRcdFx0XHRsZXQgb3JkZSA9IHRoaXMuZW5naW5lZXJpbmdOb0xpc3RbdGhpcy5lbmdpbmVlcmluZ05vTWFwTGlzdC5pbmRleE9mKGV2ZW50KV07XHJcblxyXG5cdFx0XHRcdHRoaXMuZW5naW5lZXJpbmdObyA9IG9yZGUubW9sZElkO1xyXG5cclxuXHRcdFx0XHR0aGlzLmdldFdvbWRhYSgpO1xyXG5cclxuXHRcdFx0fSxcclxuXHRcdFx0Z2V0TWFjaGluZUxpc3QoKSB7XHJcblx0XHRcdFx0dGhpcy4kcG9zdCh7XHJcblx0XHRcdFx0XHR1cmw6IFwiL01lc01hY2hpbmUvR2V0SW5qZWN0aW9uTWFjaGluZVwiLFxyXG5cdFx0XHRcdH0pLnRoZW4ocmVzID0+IHtcclxuXHRcdFx0XHRcdHRoaXMubWFjaGluZSA9IHJlcy5kYXRhLnRiQmlsbExpc3Q7XHJcblx0XHRcdFx0XHR0aGlzLm1hY2hpbmVMaXN0ID0gdGhpcy5tYWNoaW5lLm1hcChzID0+IHMubWFjaGluZU5hbWUpO1xyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0sXHJcbiAgICAgICAgICAgIC8v6I635Y+W6KGo5qC855qE5pWw5o2u5rqQXHJcbiAgICAgICAgICAgIGdldFdvbWRhYUlzU2hvdygpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuJHBvc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgIHVybDogXCIvV29tZGFhL0dldFdvbWRhYXNCeVNob3dcIixcclxuICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVObzogdGhpcy5tYWNoaW5lTm8sXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSkudGhlbihyZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNTaG93VGFibGVEYXRhID0gcmVzLmRhdGEudGJCaWxsTGlzdDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5Y+q5Yik5pat56ys5LiA5p2h77yI5Y+q5YWB6K645LiA5p2h5bel5Y2V77yJXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3JkZXIgPSB0aGlzLmlzU2hvd1RhYmxlRGF0YVswXTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaGFzQmluZGVkQ3V0dGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9yZGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc0JpbmRlZEN1dHRlciA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3JkZXIub3V0VG9vbElkICYmIG9yZGVyLm91dFRvb2xJZC50b1N0cmluZygpLnRyaW0oKSAhPT0gJycpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3JkZXIub3V0VG9vbENvZGUgJiYgb3JkZXIub3V0VG9vbENvZGUudHJpbSgpICE9PSAnJykgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcmRlci5vdXRUb29sTmFtZSAmJiBvcmRlci5vdXRUb29sTmFtZS50cmltKCkgIT09ICcnKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5a2Y5YKo5YiwIGRhdGEg5Y+Y6YePXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYXNCaW5kZWRDdXR0ZXJGbGFnID0gaGFzQmluZGVkQ3V0dGVyO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1Nob3dUYWJsZURhdGEubGVuZ3RoID09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdW5pLnNldFN0b3JhZ2VTeW5jKCdkYWEwMDEnLCB0aGlzLmlzU2hvd1RhYmxlRGF0YVswXS5kYWEwMDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmkuc2V0U3RvcmFnZVN5bmMoJ2lkJywgdGhpcy5pc1Nob3dUYWJsZURhdGFbMF0uaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgaXNTaG93VGFiKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNTaG93VGFibGVEYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB1bmkuc2hvd1RvYXN0KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICflt7LmnInmraPlnKjmk43kvZznmoTlt6XljZXvvIzkuI3og73lho3mrKHpgInmi6knLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uOiAnZXJyb3InLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjogMjAwMFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2hvdyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAvLyDpu5jorqTpgInkuK3igJzlvoXlvIDlt6XigJ1cclxuICAgICAgICAgICAgICAgIHRoaXMuZW5naW5lZXJpbmdObyA9ICflvoXlvIDlt6XjgIHmnKrlvIDlt6XjgIHmmoLlgZwnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZURhdGEgPSBbXTtcclxuICAgICAgICAgICAgICAgIC8vIOS4i+aLieahhuWPquaYvuekuuWQiOW5tuWQjueahOeKtuaAgeWSjOWFtuWug+eKtuaAgVxyXG4gICAgICAgICAgICAgICAgdGhpcy5lbmdpbmVlcmluZ05vTWFwTGlzdCA9IFtcclxuICAgICAgICAgICAgICAgICAgICAn5b6F5byA5bel44CB5pyq5byA5bel44CB5pqC5YGcJyxcclxuICAgICAgICAgICAgICAgICAgICAn5byA5belJyxcclxuICAgICAgICAgICAgICAgICAgICAn5a6M5belJ1xyXG4gICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgICAgIC8vIOm7mOiupOaYvuekuuKAnOW+heW8gOW3peKAneW3peWNlVxyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRXb21kYWFCeVN0YXR1cygpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAvLyDkuIvmi4nmoYbpgInkuK3lkI7vvIzmjInnirbmgIHnrZvpgInlt6XljZVcclxuICAgICAgICAgICAgb25FbmdpbmVlcmluZ05vQ2hhbmdlKHN0YXR1cykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbmdpbmVlcmluZ05vID0gc3RhdHVzO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRXb21kYWFCeVN0YXR1cygpO1xyXG4gICAgICAgICAgICB9LFxyXG5cdFx0XHRnZXRXb21kYWEoKSB7XHJcblxyXG5cdFx0XHRcdGxldCBlZGl0RGF0ZSA9IHRoaXMuZm9ybWF0RGF0ZShuZXcgRGF0ZSgpKTtcclxuXHJcblx0XHRcdFx0dGhpcy4kcG9zdCh7XHJcblx0XHRcdFx0XHR1cmw6IFwiL1dvbWRhYS9HZXRXb21kYWFzQnlNYWNoaW5lXCIsXHJcblx0XHRcdFx0XHRkYXRhOiB7XHJcblx0XHRcdFx0XHRcdG1hY2hpbmVObzogdGhpcy5tYWNoaW5lTm8sXHJcblx0XHRcdFx0XHRcdGVkaXREYXRlOiBlZGl0RGF0ZVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pLnRoZW4ocmVzID0+IHtcclxuXHRcdFx0XHRcdHRoaXMudGFibGVEYXRhID0gcmVzLmRhdGEudGJCaWxsTGlzdDtcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9LFxyXG4gICAgICAgICAgICAvLyDmjInlt6XljZXnirbmgIHnrZvpgInlt6XljZVcclxuICAgICAgICAgICAgZ2V0V29tZGFhQnlTdGF0dXMoKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZWRpdERhdGUgPSB0aGlzLmZvcm1hdERhdGUobmV3IERhdGUoKSk7XHJcbiAgICAgICAgICAgICAgICBsZXQgc3RhdHVzQXJyID0gW107XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5lbmdpbmVlcmluZ05vID09PSAn5b6F5byA5bel44CB5pyq5byA5bel44CB5pqC5YGcJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1c0FyciA9IFsn5b6F5byA5belJywgJ+acquW8gOW3pScsICfmmoLlgZwnXTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzQXJyID0gW3RoaXMuZW5naW5lZXJpbmdOb107XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRwb3N0KHtcclxuICAgICAgICAgICAgICAgICAgICB1cmw6IFwiL1dvbWRhYS9HZXRXb21kYWFzQnlFbmdpbmVlcmluZ05vXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lTm86IHRoaXMubWFjaGluZU5vLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmRlclN0YXR1czogc3RhdHVzQXJyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlZGl0RGF0ZTogZWRpdERhdGVcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KS50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YWJsZURhdGEgPSByZXMuZGF0YS50YkJpbGxMaXN0O1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0sXHJcblx0XHRcdHRvRGV0YWlsKGl0ZW0pIHtcclxuXHRcdFx0XHR0aGlzLm9yZGVySWQgPSBpdGVtLmlkO1xyXG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWRPcmRlciA9IGl0ZW0uZGFhMDAxO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9kdWN0Q29kZSA9IGl0ZW0uZGFhMDAyOyAvLyDkuqflk4HnvJbnoIFcclxuICAgICAgICAgICAgICAgIHRoaXMucHJvZHVjdFNwZWMgPSBpdGVtLmRhYTAwNDsgLy8g5Lqn5ZOB6KeE5qC8XHJcblx0XHRcdFx0dGhpcy5jdXJyZW50VGFiID0gMDtcclxuXHRcdFx0fSxcclxuXHRcdFx0XHJcblx0XHRcdC8vIOiOt+WPluW8gOW3peaMiemSrueahGNsYXNzXHJcblx0XHRcdGdldFN0YXJ0QnRuQ2xhc3MoaXRlbSkge1xyXG5cdFx0XHRcdGNvbnN0IGlzU2VsZWN0ZWQgPSB0aGlzLmlzU2hvd1RhYmxlRGF0YS5sZW5ndGggPiAwICYmIHRoaXMuaXNTaG93VGFibGVEYXRhWzBdLmRhYTAwMSA9PT0gaXRlbS5kYWEwMDE7XHJcblx0XHRcdFx0aWYgKGlzU2VsZWN0ZWQpIHtcclxuXHRcdFx0XHRcdHJldHVybiAnc3RhcnQtYnRuIHN0YXJ0LWJ0bi1zZWxlY3RlZCc7IC8vIOW9k+WJjemAieS4reeahOW3peWNle+8jOe7v+iJslxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm4gJ3N0YXJ0LWJ0bic7XHJcblx0XHRcdH0sXHJcblx0XHRcdFxyXG5cdFx0XHQvLyDliKTmlq3lvIDlt6XmjInpkq7mmK/lkKbnpoHnlKhcclxuXHRcdFx0aXNTdGFydEJ0bkRpc2FibGVkKGl0ZW0pIHtcclxuXHRcdFx0XHQvLyDlpoLmnpzlt7Lnu4/mnInpgInkuK3nmoTlt6XljZXvvIzkuJTlvZPliY3pobnkuI3mmK/pgInkuK3nmoTlt6XljZXvvIzliJnnpoHnlKhcclxuXHRcdFx0XHRpZiAodGhpcy5pc1Nob3dUYWJsZURhdGEubGVuZ3RoID4gMCAmJiB0aGlzLmlzU2hvd1RhYmxlRGF0YVswXS5kYWEwMDEgIT09IGl0ZW0uZGFhMDAxKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRcclxuXHRcdFx0Ly8g5Yik5pat5pqC5YGc5oyJ6ZKu5piv5ZCm56aB55SoXHJcblx0XHRcdGlzUGF1c2VCdG5EaXNhYmxlZChpdGVtKSB7XHJcblx0XHRcdFx0Ly8g5aaC5p6c5bey57uP5pyJ6YCJ5Lit55qE5bel5Y2V77yM5LiU5b2T5YmN6aG55LiN5piv6YCJ5Lit55qE5bel5Y2V77yM5YiZ56aB55SoXHJcblx0XHRcdFx0aWYgKHRoaXMuaXNTaG93VGFibGVEYXRhLmxlbmd0aCA+IDAgJiYgdGhpcy5pc1Nob3dUYWJsZURhdGFbMF0uZGFhMDAxICE9PSBpdGVtLmRhYTAwMSkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIOWmguaenOi/mOayoeaciemAieS4reS7u+S9leW3peWNle+8jOS5n+emgeeUqOaaguWBnOaMiemSrlxyXG5cdFx0XHRcdGlmICh0aGlzLmlzU2hvd1RhYmxlRGF0YS5sZW5ndGggPT09IDApIHtcclxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH0sXHJcblx0XHRcdFxyXG5cdFx0XHQvLyDojrflj5blvIDlt6XmjInpkq7mlofmnKxcclxuXHRcdFx0Z2V0U3RhcnRCdG5UZXh0KGl0ZW0pIHtcclxuXHRcdFx0XHRjb25zdCBpc1NlbGVjdGVkID0gdGhpcy5pc1Nob3dUYWJsZURhdGEubGVuZ3RoID4gMCAmJiB0aGlzLmlzU2hvd1RhYmxlRGF0YVswXS5kYWEwMDEgPT09IGl0ZW0uZGFhMDAxO1xyXG5cdFx0XHRcdGlmIChpc1NlbGVjdGVkKSB7XHJcblx0XHRcdFx0XHQvLyDmo4Dmn6XmmK/lkKbmnInosIPmnLrml7bpl7RcclxuXHRcdFx0XHRcdGlmICh0aGlzLmlzU2hvd1RhYmxlRGF0YVswXS5tYVNob3V0VGltZSkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gJ+i9rOi3s+aKpeW3peeVjOmdoic7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gJ+i9rOi3s+S4iuS4i+WIgOeVjOmdoic7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybiAn5byA5belJztcclxuXHRcdFx0fSxcclxuXHRcdFx0XHJcblx0XHRcdC8vIOWkhOeQhuW8gOW3pVxyXG5cdFx0XHRhc3luYyBoYW5kbGVTdGFydFdvcmsoaXRlbSkge1xyXG5cdFx0XHRcdC8vIOWIpOaWreW9k+WJjeW3peWNleaYr+WQpuW3sumAieS4rVxyXG5cdFx0XHRcdGNvbnN0IGlzU2VsZWN0ZWQgPSB0aGlzLmlzU2hvd1RhYmxlRGF0YS5sZW5ndGggPiAwICYmIHRoaXMuaXNTaG93VGFibGVEYXRhWzBdLmRhYTAwMSA9PT0gaXRlbS5kYWEwMDE7XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0aWYgKGlzU2VsZWN0ZWQpIHtcclxuXHRcdFx0XHRcdC8vIOWmguaenOW3sumAieS4re+8jOWFiOi3s+i9rOWIsOS4u+eVjOmdolxyXG5cdFx0XHRcdFx0dGhpcy50b0RldGFpbChpdGVtKTtcclxuXHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0Ly8g5bu26L+f6Lez6L2s77ya5qC55o2u5piv5ZCm5pyJ6LCD5py65pe26Ze05Yaz5a6a6Lez6L2s5Yiw5ZOq5Liq55WM6Z2iXHJcblx0XHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcclxuXHRcdFx0XHRcdFx0aWYgKHRoaXMuaXNTaG93VGFibGVEYXRhWzBdLm1hU2hvdXRUaW1lKSB7XHJcblx0XHRcdFx0XHRcdFx0Ly8g5pyJ6LCD5py65pe26Ze077yM6Lez6L2s5Yiw5oql5bel55WM6Z2iXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5jdXJyZW50VGFiID0gNDtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHQvLyDmsqHmnInosIPmnLrml7bpl7TvvIzot7PovazliLDkuIrkuIvliIDnlYzpnaJcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmN1cnJlbnRUYWIgPSAyO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9LCAxMDApO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHQvLyDlpoLmnpzmnKrpgInkuK3vvIzliJnmiafooYzlvIDlt6XpgLvovpFcclxuXHRcdFx0XHRcdGxldCBvcmRlclNlbGVjdCA9IFt7XHJcblx0XHRcdFx0XHRcdG9yZGVySWQ6IGl0ZW0uaWQsXHJcblx0XHRcdFx0XHRcdG9yZGVyTm86IGl0ZW0uZGFhMDAxXHJcblx0XHRcdFx0XHR9XTtcclxuXHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0bGV0IGVkaXREYXRlID0gdGhpcy5mb3JtYXREYXRlKG5ldyBEYXRlKCkpO1xyXG5cdFx0XHRcdFx0XHJcblx0XHRcdFx0XHR0aGlzLiRwb3N0KHtcclxuXHRcdFx0XHRcdFx0dXJsOiBcIi9NZXNPcmRlclNlbGVjdC9BZGRcIixcclxuXHRcdFx0XHRcdFx0ZGF0YToge1xyXG5cdFx0XHRcdFx0XHRcdG1hY2hpbmVObzogdGhpcy5tYWNoaW5lTm8sXHJcblx0XHRcdFx0XHRcdFx0ZWRpdERhdGU6IGVkaXREYXRlLFxyXG5cdFx0XHRcdFx0XHRcdGl0ZW06IG9yZGVyU2VsZWN0XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0pLnRoZW4oYXN5bmMgcmVzID0+IHtcclxuXHRcdFx0XHRcdFx0aWYgKHJlcy5kYXRhLnRiQmlsbExpc3QpIHtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmdldFdvbWRhYUlzU2hvdygpO1xyXG5cdFx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdC8vIOiwg+eUqOWQjuerr+aWueazlee7keWumuaVsOmHh+agh+W/l1xyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IGJpbmRTdWNjZXNzID0gYXdhaXQgdGhpcy5iaW5kRGF0YUNvbGxlY3Rpb25GbGFnKGl0ZW0uZGFhMDAxKTtcclxuXHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHQvLyDnu5HlrprmiJDlip/lkI7lho3mj5DnpLrlvIDlt6XmiJDlip9cclxuXHRcdFx0XHRcdFx0XHRpZiAoYmluZFN1Y2Nlc3MpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHVuaS5zaG93VG9hc3Qoe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aXRsZTogJ+W8gOW3peaIkOWKnycsXHJcblx0XHRcdFx0XHRcdFx0XHRcdGljb246ICdzdWNjZXNzJyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZHVyYXRpb246IDIwMDBcclxuXHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRcclxuXHRcdFx0Ly8g5paw5aKe77ya57uR5a6a5pWw6YeH5qCH5b+X5pa55rOVXHJcblx0XHRcdGFzeW5jIGJpbmREYXRhQ29sbGVjdGlvbkZsYWcob3JkZXJObykge1xyXG5cdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRjb25zdCByZXMgPSBhd2FpdCB0aGlzLiRwb3N0KHtcclxuXHRcdFx0XHRcdFx0dXJsOiAnL01lc09yZGVyRGF0YUNvbGxlY3Rpb24vQmluZERhdGFDb2xsZWN0aW9uRmxhZycsXHJcblx0XHRcdFx0XHRcdGRhdGE6IHtcclxuXHRcdFx0XHRcdFx0XHRtYWNoaW5lTm86IHRoaXMubWFjaGluZU5vLFxyXG5cdFx0XHRcdFx0XHRcdG9yZGVyTm86IG9yZGVyTm9cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdGlmIChyZXMgJiYgcmVzLnN0YXR1cyA9PT0gMCkge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZygn5pWw6YeH5qCH5b+X57uR5a6a5oiQ5YqfJyk7XHJcblx0XHRcdFx0XHRcdHRoaXMuJHNob3dNZXNzYWdlKCfmlbDph4fmoIflv5fnu5HlrprmiJDlip8nKTtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKCfmlbDph4fmoIflv5fnu5HlrprlpLHotKU6JywgcmVzLm1lc3NhZ2UgfHwgJ+acquefpemUmeivrycpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLiRzaG93TWVzc2FnZSgn5pWw6YeH5qCH5b+X57uR5a6a5aSx6LSlJyk7XHJcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9IGNhdGNoIChlcnIpIHtcclxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ+e7keWumuaVsOmHh+agh+W/l+mUmeivrzonLCBlcnIpO1xyXG5cdFx0XHRcdFx0dGhpcy4kc2hvd01lc3NhZ2UoJ+e7keWumuaVsOmHh+agh+W/l+Wksei0pScpO1xyXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0XHJcblx0XHRcdC8vIOWkhOeQhuaaguWBnO+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");
/***/ }),
/* 53 */
@@ -4827,7 +4827,7 @@
/***/ (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 = 35;\n                break;\n              case 31:\n                _context13.prev = 31;\n                _context13.t0 = _context13[\"catch\"](14);\n                __f__(\"error\", '调机报工错误:', _context13.t0, \" at components/mold.vue:871\");\n                _this15.$showMessage('调机报工失败,请检查网络');\n              case 35:\n                _context13.prev = 35;\n                _this15.submitting = false;\n                return _context13.finish(35);\n              case 38:\n              case \"end\":\n                return _context13.stop();\n            }\n          }\n        }, _callee13, null, [[14, 31, 35, 38]]);\n      }))();\n    },\n    // 新增:获取调机师傅列表\n    fetchTiaojiStaff: function fetchTiaojiStaff() {\n      var _this16 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee14() {\n        var res, staff;\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: '/MesStaff/GetAllXS0101BYtj' // 与报工界面使用相同接口\n                });\n              case 3:\n                res = _context14.sent;\n                if (res.status === 0 && res.data && res.data.tbBillList) {\n                  staff = res.data.tbBillList;\n                  _this16.tiaojiUsers = staff.map(function (s) {\n                    return s.staffNo + ':' + s.staffName;\n                  });\n                }\n                _context14.next = 10;\n                break;\n              case 7:\n                _context14.prev = 7;\n                _context14.t0 = _context14[\"catch\"](0);\n                __f__(\"error\", '获取调机师傅列表失败:', _context14.t0, \" at components/mold.vue:889\");\n              case 10:\n              case \"end\":\n                return _context14.stop();\n            }\n          }\n        }, _callee14, null, [[0, 7]]);\n      }))();\n    }\n  },\n  mounted: function mounted() {\n    var _this17 = 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 _callee15() {\n        return _regenerator.default.wrap(function _callee15$(_context15) {\n          while (1) {\n            switch (_context15.prev = _context15.next) {\n              case 0:\n                _context15.next = 2;\n                return _this17.fetchDefaultToolFromWorkOrder();\n              case 2:\n                // 进入页面时赋值第一行 currentCjNum\n                if (_this17.toolRecords.length > 0) {\n                  _this17.$set(_this17.toolRecords[0], 'currentCjNum', _this17.workOrderCurrentCjNum);\n                }\n              case 3:\n              case \"end\":\n                return _context15.stop();\n            }\n          }\n        }, _callee15);\n      })));\n    } else {\n      __f__(\"warn\", '机台号或工单号为空,无法获取表单数据', \" at components/mold.vue:910\");\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vY29tcG9uZW50cy9tb2xkLnZ1ZSJdLCJuYW1lcyI6WyJkYXRhIiwibWFjaGluZU5vIiwid29ya09yZGVyTm8iLCJhY3RpdmVUb29sTm8iLCJwYWdlSW5kZXgiLCJwYWdlU2l6ZSIsInRvdGFsIiwidG9vbExpc3QiLCJzZWxlY3RlZFRvb2xObyIsInRvb2xOYW1lIiwidG9vbE1vZGVsIiwic2hvd1Rvb2xEaWFsb2ciLCJzZWFyY2hLZXkiLCJmaWx0ZXJlZFRvb2xzIiwidXNlTGltaXRJbnB1dCIsImxpZmVXYXJuSW5wdXQiLCJ0b29sUmVjb3JkcyIsImxvYWRpbmdUb29scyIsImxvYWRpbmdGb3JtIiwic3VibWl0dGluZyIsIl9zZWFyY2hUaW1lciIsIndvcmtPcmRlckN1cnJlbnRDak51bSIsImF1dG9TYXZlVGltZXIiLCJpc0RpcnR5IiwiYXV0b1NhdmVJbnRlcnZhbE1zIiwiYXV0b1NhdmVFbmFibGVkIiwiYXV0b1NhdmVBY3Rpb25OYW1lIiwiaXNUaWFvamlVc2VyU2VsZWN0U2hvdyIsInRpYW9qaVN0YWZmTm8iLCJ0aWFvamlPa1F0eSIsInRpYW9qaUJhZFF0eSIsInRpYW9qaVVzZXJzIiwidGlhb2ppVXNlclNlYXJjaCIsIm9yZGVySWQiLCJvcmRlciIsImNvbXB1dGVkIiwidG90YWxQYWdlcyIsInRpYW9qaVN0YWZmRGlzcGxheSIsImZpbHRlcmVkVGlhb2ppVXNlcnMiLCJ3YXRjaCIsIm1ldGhvZHMiLCJmZXRjaEN1cnJlbnRDak51bSIsInVybCIsImhlYWRlcnMiLCJyZXMiLCJmb3VuZCIsIngiLCJoYW5kbGVSZWZyZXNoIiwic3RhcnRBdXRvU2F2ZSIsInN0b3BBdXRvU2F2ZSIsImNsZWFySW50ZXJ2YWwiLCJhdXRvU2F2ZVRpY2siLCJmbiIsIm5vcm1hbGl6ZUxpZmVXYXJuIiwib3BlblRvb2xEaWFsb2ciLCJjbG9zZVRvb2xEaWFsb2ciLCJmZXRjaFRvb2xzIiwicGF5bG9hZCIsImdldEZpZWxkIiwia2V5cyIsIm1hcHBlZCIsIm5vIiwibmFtZSIsIm1vZGVsIiwibGlmZVdhcm4iLCJ0b3RhbEZyb21SZXMiLCJwcmV2UGFnZSIsIm5leHRQYWdlIiwib25TZWFyY2hLZXlJbnB1dCIsImNsZWFyVGltZW91dCIsInNlYXJjaFRvb2wiLCJzZWxlY3RUb29sIiwiY29uZmlybVRvb2wiLCJzZXRVc2VMaW1pdCIsInYiLCJpc05hTiIsInVzZUxpbWl0IiwiaGFuZGxlVXBUb29sIiwic2RqcyIsImxpZmVXYXJuUmF0aW8iLCJ0b29sTm8iLCJ0eXBlIiwibW9kbExpZmVXb3JuaW5nIiwidW5pIiwidGl0bGUiLCJpY29uIiwiaGFuZGxlRG93blRvb2wiLCJ4ZGpzIiwiY2FuY2VsIiwiZmV0Y2hGb3JtRGF0YSIsImxpc3QiLCJwZXJjZW50Iiwid2FyblN0YXR1cyIsImlkIiwidXBUaW1lIiwidXBDb3VudCIsImRvd25UaW1lIiwiZG93bkNvdW50IiwidXNlQ291bnQiLCJsaWZlUGVyY2VudCIsImN1cnJlbnRDak51bSIsImZldGNoRGVmYXVsdFRvb2xGcm9tV29ya09yZGVyIiwid2FybiIsImZvcm1hdERhdGVUaW1lIiwic2VsZWN0VGlhb2ppVXNlciIsImhhbmRsZUluc3BlY3Rpb25DYWxsIiwib2tRdHkiLCJiYWRRdHkiLCJzdGFmZk5vIiwib3JkZXJObyIsImJmIiwiaW5pdENqTnVtIiwiZmV0Y2hUaWFvamlTdGFmZiIsInN0YWZmIiwibW91bnRlZCIsImJlZm9yZURlc3Ryb3kiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2VBc1BBO0VBQ0FBO0lBQ0E7TUFDQUM7TUFBQTtNQUNBQztNQUFBO01BQ0FDO01BQUE7TUFDQUM7TUFDQUM7TUFBQTtNQUNBQztNQUNBQztNQUNBQztNQUNBQztNQUNBQztNQUNBQztNQUNBQztNQUNBQztNQUNBQztNQUNBQztNQUFBO01BQ0FDO01BQ0FDO01BQ0FDO01BQ0FDO01BQ0FDO01BQ0FDO01BQUE7O01BRUE7TUFDQUM7TUFDQUM7TUFBQTtNQUNBQztNQUFBO01BQ0FDO01BQ0FDO01BQUE7O01BRUE7TUFDQUM7TUFBQTtNQUNBQztNQUFBO01BQ0FDO01BQUE7TUFDQUM7TUFBQTtNQUNBQztNQUFBO01BQ0FDO01BQUE7O01BRUE7TUFDQUM7TUFBQTtNQUNBQztJQUNBO0VBQ0E7O0VBQ0FDO0lBQ0FDO01BQ0E7SUFDQTtJQUNBO0lBQ0FDO01BQ0E7TUFDQTtNQUNBO0lBQ0E7SUFDQTtJQUNBQztNQUNBO01BQ0E7TUFDQTtRQUFBO01BQUE7SUFDQTtFQUNBO0VBQ0FDO0lBQ0E7SUFDQS9CO01BQUE7SUFBQTtJQUNBTTtNQUFBO0lBQUE7SUFDQUM7TUFBQTtJQUFBO0lBQ0FOO01BQUE7SUFBQTtJQUNBQztNQUFBO0lBQUE7RUFDQTtFQUNBOEI7SUFDQTtJQUNBQztNQUFBO01BQUE7UUFBQTtRQUFBO1VBQUE7WUFBQTtjQUFBO2dCQUFBLElBQ0E7a0JBQUE7a0JBQUE7Z0JBQUE7Z0JBQUE7Y0FBQTtnQkFBQTtnQkFBQTtnQkFBQSxPQUVBO2tCQUNBQztrQkFDQTFDO29CQUFBQztrQkFBQTtrQkFDQTBDO29CQUFBO2tCQUFBO2dCQUNBO2NBQUE7Z0JBSkFDO2dCQUFBLE1BS0FBO2tCQUFBO2tCQUFBO2dCQUFBO2dCQUNBQztrQkFBQSxPQUNBQztnQkFBQSxFQUNBO2dCQUFBLGlDQUNBRDtjQUFBO2dCQUFBO2dCQUFBO2NBQUE7Z0JBQUE7Z0JBQUE7Z0JBR0E7Y0FBQTtnQkFBQSxpQ0FFQTtjQUFBO2NBQUE7Z0JBQUE7WUFBQTtVQUFBO1FBQUE7TUFBQTtJQUNBO0lBRUE7SUFDQUU7TUFBQTtNQUFBO1FBQUE7VUFBQTtZQUFBO2NBQUE7Z0JBQ0E7Z0JBQUEsTUFDQTtrQkFBQTtrQkFBQTtnQkFBQTtnQkFBQTtnQkFBQSxPQUNBO2NBQUE7Z0JBQUE7Z0JBQUEsT0FDQTtjQUFBO2dCQUNBO2dCQUNBO2tCQUNBO2dCQUNBO2NBQUE7Z0JBRUE7Y0FBQTtjQUFBO2dCQUFBO1lBQUE7VUFBQTtRQUFBO01BQUE7SUFDQTtJQUNBO0lBQ0FDO01BQUE7TUFDQTtNQUNBO01BQ0E7UUFDQTtNQUNBO0lBQ0E7SUFDQTtJQUNBQztNQUNBO1FBQ0FDO1FBQ0E7TUFDQTtJQUNBO0lBQ0E7SUFDQUM7TUFBQTtNQUFBO1FBQUE7UUFBQTtVQUFBO1lBQUE7Y0FBQTtnQkFBQSxJQUNBO2tCQUFBO2tCQUFBO2dCQUFBO2dCQUFBO2NBQUE7Z0JBQUEsSUFDQTtrQkFBQTtrQkFBQTtnQkFBQTtnQkFBQTtjQUFBO2dCQUFBLE1BQ0E7a0JBQUE7a0JBQUE7Z0JBQUE7Z0JBQUE7Y0FBQTtnQkFFQUMsNEZBQ0Esb0NBQ0E7Z0JBQUEsSUFDQUE7a0JBQUE7a0JBQUE7Z0JBQUE7Z0JBQ0E7Z0JBQUE7Y0FBQTtnQkFBQTtnQkFLQTtnQkFBQTtnQkFBQSxPQUNBQTtjQUFBO2dCQUFBO2dCQUNBO2dCQUNBO2dCQUFBO2dCQUFBO2NBQUE7Z0JBQUE7Z0JBQUE7Z0JBRUE7Y0FBQTtnQkFBQTtnQkFFQTtnQkFBQTtjQUFBO2NBQUE7Z0JBQUE7WUFBQTtVQUFBO1FBQUE7TUFBQTtJQUVBO0lBRUE7SUFDQUM7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7SUFDQTtJQUNBQztNQUNBO01BQ0E7TUFDQTtJQUNBO0lBQ0FDO01BQ0E7SUFDQTtJQUNBQztNQUFBO01BQUE7UUFBQTtRQUFBO1VBQUE7WUFBQTtjQUFBO2dCQUNBO2dCQUFBO2dCQUFBO2dCQUFBLE9BRUE7a0JBQ0FkO2tCQUNBMUM7b0JBQ0FZO29CQUNBUjtvQkFDQUM7a0JBQ0E7a0JBQ0FzQztvQkFBQTtrQkFBQTtnQkFDQTtjQUFBO2dCQVJBQztnQkFVQTtrQkFDQWEsK0NBQ0FiLHdEQUNBQSw0Q0FDQTtrQkFFQWM7b0JBQUE7c0JBQUFDO29CQUFBO29CQUNBO3NCQUFBO3NCQUFBO29CQUFBO29CQUNBO2tCQUNBLEdBRUE7a0JBQ0FDO29CQUFBO3NCQUNBQztzQkFDQUM7c0JBQ0FDO3NCQUNBQztvQkFDQTtrQkFBQTtrQkFFQTtrQkFDQTtrQkFFQUMsa0ZBQ0FyQiw4WEFDQTtrQkFDQTtrQkFDQTtvQkFDQTtrQkFDQTtnQkFDQTtrQkFDQTtnQkFDQTtnQkFBQTtnQkFBQTtjQUFBO2dCQUFBO2dCQUFBO2dCQUVBO2dCQUNBO2NBQUE7Z0JBQUE7Z0JBRUE7Z0JBQUE7Y0FBQTtjQUFBO2dCQUFBO1lBQUE7VUFBQTtRQUFBO01BQUE7SUFFQTtJQUNBc0I7TUFBQTtNQUFBO1FBQUE7VUFBQTtZQUFBO2NBQUE7Z0JBQUEsTUFDQTtrQkFBQTtrQkFBQTtnQkFBQTtnQkFDQTtnQkFBQTtnQkFBQSxPQUNBO2NBQUE7Y0FBQTtnQkFBQTtZQUFBO1VBQUE7UUFBQTtNQUFBO0lBRUE7SUFDQUM7TUFBQTtNQUFBO1FBQUE7VUFBQTtZQUFBO2NBQUE7Z0JBQUEsTUFDQTtrQkFBQTtrQkFBQTtnQkFBQTtnQkFDQTtnQkFBQTtnQkFBQSxPQUNBO2NBQUE7Y0FBQTtnQkFBQTtZQUFBO1VBQUE7UUFBQTtNQUFBO0lBRUE7SUFDQUM7TUFBQTtNQUNBQztNQUNBO1FBQ0E7TUFDQTtJQUNBO0lBQ0FDO01BQUE7TUFBQTtRQUFBO1VBQUE7WUFBQTtjQUFBO2dCQUNBO2dCQUFBO2dCQUFBLE9BQ0E7Y0FBQTtjQUFBO2dCQUFBO1lBQUE7VUFBQTtRQUFBO01BQUE7SUFDQTtJQUNBQztNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtRQUNBO1FBQ0E7UUFDQTtNQUNBO1FBQ0E7TUFDQTtJQUNBO0lBQ0FDO01BQ0E7SUFDQTtJQUNBQztNQUFBO01BQUE7UUFBQTtRQUFBO1VBQUE7WUFBQTtjQUFBO2dCQUFBLElBQ0E7a0JBQUE7a0JBQUE7Z0JBQUE7Z0JBQ0E7Z0JBQUE7Y0FBQTtnQkFHQUM7Z0JBQUEsTUFDQUM7a0JBQUE7a0JBQUE7Z0JBQUE7Z0JBQ0E7Z0JBQUE7Y0FBQTtnQkFHQTtrQkFDQTtvQkFDQTtzQkFBQUM7b0JBQUE7a0JBQ0E7a0JBQ0E7Z0JBQ0E7Z0JBQ0E7a0JBQUE7b0JBQUFBO2tCQUFBO2dCQUFBO2dCQUNBO2NBQUE7Y0FBQTtnQkFBQTtZQUFBO1VBQUE7UUFBQTtNQUFBO0lBQ0E7SUFDQTtJQUNBQztNQUFBO01BQUE7UUFBQTtRQUFBO1VBQUE7WUFBQTtjQUFBO2dCQUFBLElBQ0E7a0JBQUE7a0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Y0FBQTtnQkFBQSxJQUNBO2tCQUFBO2tCQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2NBQUE7Z0JBQUEsSUFDQTtrQkFBQTtrQkFBQTtnQkFBQTtnQkFBQTtnQkFBQTtjQUFBO2dCQUFBLElBRUE7a0JBQUE7a0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Y0FBQTtnQkFDQUQ7Z0JBQUEsTUFDQUQ7a0JBQUE7a0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Y0FBQTtnQkFFQTtnQkFDQUc7Z0JBQ0FDO2dCQUNBdEI7a0JBQ0F2RDtrQkFDQUQ7a0JBQ0ErRTtrQkFDQUM7a0JBQ0FMO2tCQUNBRTtrQkFBQTtrQkFDQUk7Z0JBQ0E7Z0JBQUE7Z0JBRUE7Z0JBQUE7Z0JBQUEsT0FDQTtrQkFDQXhDO2tCQUNBMUM7a0JBQ0EyQztvQkFBQTtrQkFBQTtnQkFDQTtjQUFBO2dCQUpBQztnQkFBQSxNQUtBQTtrQkFBQTtrQkFBQTtnQkFBQTtnQkFDQXVDO2tCQUNBQztrQkFDQUM7Z0JBQ0E7Z0JBQUE7Y0FBQTtnQkFFQTtrQkFDQUY7b0JBQ0FDO29CQUNBQztrQkFDQTtnQkFDQTtjQUFBO2dCQUFBLE1BRUF6QztrQkFBQTtrQkFBQTtnQkFBQTtnQkFBQTtnQkFBQSxPQUNBO2NBQUE7Z0JBQUE7Z0JBQUE7Y0FBQTtnQkFBQTtnQkFBQTtnQkFHQTtnQkFDQTtnQkFBQTtjQUFBO2dCQUFBO2dCQUdBO2dCQUFBO2NBQUE7Y0FBQTtnQkFBQTtZQUFBO1VBQUE7UUFBQTtNQUFBO0lBRUE7SUFDQTtJQUNBMEM7TUFBQTtNQUFBO1FBQUE7UUFBQTtVQUFBO1lBQUE7Y0FBQTtnQkFBQSxJQUNBO2tCQUFBO2tCQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2NBQUE7Z0JBQUEsSUFDQTtrQkFBQTtrQkFBQTtnQkFBQTtnQkFBQTtnQkFBQTtjQUFBO2dCQUFBLElBQ0E7a0JBQUE7a0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Y0FBQTtnQkFDQTtnQkFDQTtnQkFDQVYsMENBQ0E7Z0JBRUE7Z0JBQ0FXO2dCQUNBUjtnQkFDQXRCO2tCQUNBdkQ7a0JBQ0FEO2tCQUNBK0U7a0JBQ0FDO2tCQUNBTDtrQkFDQVc7a0JBQUE7a0JBQ0FMO2dCQUNBO2dCQUFBO2dCQUVBO2dCQUFBO2dCQUFBLE9BQ0E7a0JBQ0F4QztrQkFDQTFDO2tCQUNBMkM7b0JBQUE7a0JBQUE7Z0JBQ0E7Y0FBQTtnQkFKQUM7Z0JBQUEsTUFLQUE7a0JBQUE7a0JBQUE7Z0JBQUE7Z0JBQ0F1QztrQkFDQUM7a0JBQ0FDO2dCQUNBO2dCQUFBO2NBQUE7Z0JBRUE7a0JBQ0FGO29CQUNBQztvQkFDQUM7a0JBQ0E7Z0JBQ0E7Y0FBQTtnQkFBQSxNQUVBekM7a0JBQUE7a0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUEsT0FDQTtjQUFBO2dCQUFBO2dCQUFBO2NBQUE7Z0JBQUE7Z0JBQUE7Z0JBR0E7Z0JBQ0E7Z0JBQUE7Y0FBQTtnQkFBQTtnQkFHQTtnQkFBQTtjQUFBO2NBQUE7Z0JBQUE7WUFBQTtVQUFBO1FBQUE7TUFBQTtJQUVBO0lBQ0E0QztNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtJQUNBO0lBQ0FDO01BQUE7TUFBQTtRQUFBO1FBQUE7VUFBQTtZQUFBO2NBQUE7Z0JBQUEsTUFDQTtrQkFBQTtrQkFBQTtnQkFBQTtnQkFDQTtnQkFBQTtjQUFBO2dCQUdBO2dCQUNBaEM7a0JBQ0F2RDtrQkFDQUQ7Z0JBQ0E7Z0JBQUE7Z0JBQUE7Z0JBQUEsT0FFQTtrQkFDQXlDO2tCQUNBMUM7a0JBQ0EyQztvQkFBQTtrQkFBQTtnQkFDQTtjQUFBO2dCQUpBQztnQkFBQSxNQUtBQTtrQkFBQTtrQkFBQTtnQkFBQTtnQkFDQTtnQkFDQTtnQkFBQTtjQUFBO2dCQUdBOEMsNENBQ0E5Qyx3REFDQUEsNENBQ0E7Z0JBRUFjO2tCQUFBO29CQUFBQztrQkFBQTtrQkFDQTtvQkFBQTtvQkFBQTtrQkFBQTtrQkFDQTtnQkFDQTtnQkFFQUM7a0JBQUE7a0JBQ0E7a0JBQ0E7a0JBQ0E7a0JBQ0E7a0JBRUE7a0JBQ0E7a0JBRUE7a0JBQ0E7b0JBQ0ErQjtrQkFDQTtrQkFFQTtvQkFDQTtvQkFDQTtvQkFDQTtvQkFDQTtrQkFDQTtrQkFDQTtvQkFDQTtvQkFDQTtvQkFDQTtrQkFDQTtrQkFDQTtrQkFFQTtrQkFDQTtvQkFDQTtvQkFDQUM7a0JBQ0E7b0JBQ0FBO2tCQUNBO2tCQUVBO29CQUNBQztvQkFDQWhDO29CQUNBQztvQkFDQWdDO29CQUNBQztvQkFDQUM7b0JBQ0FDO29CQUNBQztvQkFDQXRCO29CQUNBdUI7b0JBQ0FuQztvQkFDQTRCO29CQUNBUTtrQkFDQTtnQkFDQSxJQUVBO2dCQUNBeEM7a0JBQ0E7a0JBQ0E7b0JBQ0E7b0JBQ0E7b0JBQ0E7b0JBQ0E7a0JBQ0E7a0JBQ0E7Z0JBQ0E7O2dCQUVBO2dCQUNBSyxtRkFDQXJCLGdZQUNBO2dCQUNBO2dCQUFBO2dCQUFBO2NBQUE7Z0JBQUE7Z0JBQUE7Z0JBRUE7Z0JBQ0E7Z0JBQ0E7Y0FBQTtnQkFBQTtnQkFFQTtnQkFBQTtjQUFBO2NBQUE7Z0JBQUE7WUFBQTtVQUFBO1FBQUE7TUFBQTtJQUVBO0lBQ0E7SUFDQXlEO01BQUE7TUFBQTtRQUFBO1FBQUE7VUFBQTtZQUFBO2NBQUE7Z0JBQUEsSUFDQTtrQkFBQTtrQkFBQTtnQkFBQTtnQkFBQTtjQUFBO2dCQUFBO2dCQUFBO2dCQUFBLE9BRUE7a0JBQ0EzRDtrQkFDQTFDO29CQUFBQztrQkFBQTtrQkFDQTBDO29CQUFBO2tCQUFBO2dCQUNBO2NBQUE7Z0JBSkFDO2dCQUtBO2tCQUNBVixnQ0FFQTtrQkFDQTtrQkFDQTtrQkFFQTtrQkFDQTtrQkFDQTtrQkFDQTtrQkFDQTtrQkFDQTtrQkFDQTtvQkFDQW9FO29CQUNBO2tCQUNBO29CQUNBO2tCQUNBO2dCQUNBO2tCQUNBO2tCQUNBO2tCQUNBO2dCQUNBO2dCQUFBO2dCQUFBO2NBQUE7Z0JBQUE7Z0JBQUE7Z0JBRUE7Z0JBQ0E7Z0JBQ0E7Z0JBQ0E7Y0FBQTtjQUFBO2dCQUFBO1lBQUE7VUFBQTtRQUFBO01BQUE7SUFFQTtJQUNBQztNQUNBO01BQ0E7UUFDQTtRQUNBO1VBQ0E7VUFDQTtRQUNBO1FBQ0E7VUFDQTtVQUNBO1FBQ0E7UUFDQTtRQUNBO1VBQ0E7UUFDQTtRQUNBO1FBQ0E7VUFBQTtRQUFBO1FBQ0E7TUFDQTtRQUNBO01BQ0E7SUFDQTtJQUVBO0lBQ0FDO01BQ0E7TUFDQTtNQUNBO0lBQ0E7SUFFQTtJQUNBQztNQUFBO01BQUE7UUFBQTtRQUFBO1FBQUE7VUFBQTtZQUFBO2NBQUE7Z0JBQUEsSUFFQTtrQkFBQTtrQkFBQTtnQkFBQTtnQkFDQTtnQkFBQTtjQUFBO2dCQUlBQztnQkFDQUM7Z0JBQUEsTUFFQWhDO2tCQUFBO2tCQUFBO2dCQUFBO2dCQUNBO2dCQUFBO2NBQUE7Z0JBQUEsTUFJQUE7a0JBQUE7a0JBQUE7Z0JBQUE7Z0JBQ0E7Z0JBQUE7Y0FBQTtnQkFJQWlDO2dCQUNBUixrSUFFQTtnQkFDQTNDO2tCQUNBb0Q7a0JBQ0E1RTtrQkFBQTtrQkFDQTZFO2tCQUFBO2tCQUNBRjtrQkFDQUc7a0JBQUE7a0JBQ0FYO2tCQUNBbkI7a0JBQUE7a0JBQ0FwRDtrQkFBQTtrQkFDQUM7Z0JBQ0E7Z0JBQUE7Z0JBR0E7Z0JBQ0E7Z0JBQUE7Z0JBQUEsT0FDQTtrQkFDQVk7a0JBQ0ExQztnQkFDQTtjQUFBO2dCQUhBNEM7Z0JBQUEsTUFLQUE7a0JBQUE7a0JBQUE7Z0JBQUE7Z0JBQ0E7Z0JBQUE7Y0FBQTtnQkFJQTtnQkFDQTtnQkFDQTtnQkFDQTtnQkFDQTtnQkFBQTtnQkFBQSxPQUNBO2NBQUE7Z0JBQUE7Z0JBQUEsT0FDQTtjQUFBO2dCQUFBO2dCQUFBO2NBQUE7Z0JBQUE7Z0JBQUE7Z0JBRUE7Z0JBQ0E7Y0FBQTtnQkFBQTtnQkFFQTtnQkFBQTtjQUFBO2NBQUE7Z0JBQUE7WUFBQTtVQUFBO1FBQUE7TUFBQTtJQUVBO0lBRUE7SUFDQW9FO01BQUE7TUFBQTtRQUFBO1FBQUE7VUFBQTtZQUFBO2NBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUEsT0FFQTtrQkFDQXRFO2dCQUNBO2NBQUE7Z0JBRkFFO2dCQUdBO2tCQUNBcUU7a0JBQ0E7b0JBQUE7a0JBQUE7Z0JBQ0E7Z0JBQUE7Z0JBQUE7Y0FBQTtnQkFBQTtnQkFBQTtnQkFFQTtjQUFBO2NBQUE7Z0JBQUE7WUFBQTtVQUFBO1FBQUE7TUFBQTtJQUVBO0VBQ0E7RUFDQUM7SUFBQTtJQUNBO0lBQ0E7SUFDQTs7SUFFQTtJQUNBO0lBRUE7TUFDQTtRQUFBO1VBQUE7WUFBQTtjQUFBO2dCQUFBO2dCQUFBLE9BQ0E7Y0FBQTtnQkFDQTtnQkFDQTtrQkFDQTtnQkFDQTtjQUFBO2NBQUE7Z0JBQUE7WUFBQTtVQUFBO1FBQUE7TUFBQSxDQUNBO0lBQ0E7TUFDQTtJQUNBOztJQUVBO0lBQ0E7RUFDQTtFQUNBQztJQUNBO0lBQ0E7RUFDQTtBQUNBO0FBQUEsMkIiLCJmaWxlIjoiNjIuanMiLCJzb3VyY2VzQ29udGVudCI6WyI8dGVtcGxhdGU+XHJcbiAgICA8dmlldyBjbGFzcz1cInBhZ2VcIj5cclxuICAgICAgICA8IS0tIOWIgOWFt+mAieaLqeWMuiAtLT5cclxuICAgICAgICA8dmlldyBjbGFzcz1cInRvcC1zZWN0aW9uLWdyaWRcIj5cclxuICAgICAgICAgICAgPCEtLSDnrKzkuIDooYzvvJrnp7vpmaTliIDlhbfnm67lvZXmjInpkq4gLS0+XHJcbiAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwiZm9ybS1yb3dcIj5cclxuICAgICAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwiZm9ybS1jZWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPuWIgOWFt+e8luWPt++8mjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXQgc21hbGwtZm9udFwiIHYtbW9kZWw9XCJzZWxlY3RlZFRvb2xOb1wiIHBsYWNlaG9sZGVyPVwi6K+36YCa6L+H5YiA5YW355uu5b2V6YCJ5oupXCIgZGlzYWJsZWQgLz5cclxuICAgICAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwiZm9ybS1jZWxsIGZvcm0tY2VsbC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBoaWdobGlnaHQtbGFiZWxcIj7kvb/nlKjkuIrpmZDvvJo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0IHNtYWxsLWZvbnQgaW5wdXQtdXNlLWxpbWl0XCIgdHlwZT1cIm51bWJlclwiIHYtbW9kZWw9XCJ1c2VMaW1pdElucHV0XCIgcGxhY2Vob2xkZXI9XCLmr4/mrKHkuIrliIDml7bmiYvloavkuIrpmZBcIiA6ZGlzYWJsZWQ9XCIhc2VsZWN0ZWRUb29sTm8gfHwgbG9hZGluZ0Zvcm1cIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIiBzdHlsZT1cIm1hcmdpbi1sZWZ0OjE2cHg7XCI+5a+/5ZG95q+U6aKE6K2m5YC877yaPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8dmlldyBjbGFzcz1cImlucHV0LXdpdGgtdW5pdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dCBzbWFsbC1mb250IGlucHV0LWxpZmUtd2FyblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LW1vZGVsPVwibGlmZVdhcm5JbnB1dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIuWmgjkwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpkaXNhYmxlZD1cIiFzZWxlY3RlZFRvb2xObyB8fCBsb2FkaW5nRm9ybVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidW5pdC10ZXh0XCI+JTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICAgIDwvdmlldz5cclxuXHJcbiAgICAgICAgICAgIDwhLS0g56ys5LqM6KGM77ya5Zyo5pyA5ZCO5re75Yqg5YiA5YW355uu5b2V5oyJ6ZKuIC0tPlxyXG4gICAgICAgICAgICA8dmlldyBjbGFzcz1cImZvcm0tcm93XCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIOWIgOWFt+WQjeensCAtLT5cclxuICAgICAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwiZm9ybS1jZWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPuWIgOWFt+WQjeensO+8mjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXQgc21hbGwtZm9udCBpbnB1dC10b29sLW5hbWVcIiB2LW1vZGVsPVwidG9vbE5hbWVcIiBwbGFjZWhvbGRlcj1cIuWIgOWFt+W4puWHulwiIGRpc2FibGVkIC8+XHJcbiAgICAgICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICAgICAgICA8IS0tIOinhOagvOWei+WPtyAtLT5cclxuICAgICAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwiZm9ybS1jZWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPuinhOagvOWei+WPt++8mjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXQgc21hbGwtZm9udCBpbnB1dC10b29sLW1vZGVsXCIgdi1tb2RlbD1cInRvb2xNb2RlbFwiIHBsYWNlaG9sZGVyPVwi5YiA5YW35bim5Ye6XCIgZGlzYWJsZWQgLz5cclxuICAgICAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgICAgICAgIDwhLS0g5YiA5YW355uu5b2V5oyJ6ZKu5Y+z56e7IC0tPlxyXG4gICAgICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJmb3JtLWNlbGwgdG9vbC1kaXItY2VsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4tYmx1ZSBsYXJnZS1idG5cIiBAY2xpY2s9XCJvcGVuVG9vbERpYWxvZ1wiIDpkaXNhYmxlZD1cImxvYWRpbmdUb29sc1wiPuWIgOWFt+ebruW9lTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgICAgICAgPCEtLSDmlrDlop7vvJrliLfmlrDmjInpkq4gLS0+XHJcbiAgICAgICAgICAgICAgICA8dmlldyBjbGFzcz1cImZvcm0tY2VsbFwiIHN0eWxlPVwiZmxleDowIDAgYXV0bzsgbWFyZ2luLWxlZnQ6MTZweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLWJsdWUgbGFyZ2UtYnRuXCIgQGNsaWNrPVwiaGFuZGxlUmVmcmVzaFwiIDpkaXNhYmxlZD1cImxvYWRpbmdGb3JtIHx8IHN1Ym1pdHRpbmdcIj7liLfmlrA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgIDwvdmlldz4gIDwhLS0g6L+Z6YeM6Zet5ZCIIHRvcC1zZWN0aW9uLWdyaWQgLS0+XHJcbiAgICAgICAgPCEtLSDmk43kvZzmjInpkq4gLSDnp7vlh7ogdG9wLXNlY3Rpb24tZ3JpZCAtLT5cclxuICAgICAgICA8dmlldyBjbGFzcz1cImJ1dHRvbi1yb3dcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInNhdmUtYnRuXCIgQGNsaWNrPVwiaGFuZGxlVXBUb29sXCIgOmRpc2FibGVkPVwic3VibWl0dGluZyB8fCBsb2FkaW5nRm9ybVwiPuS4iuWIgOaPkOS6pDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwic2F2ZS1idG5cIiBAY2xpY2s9XCJoYW5kbGVEb3duVG9vbFwiIDpkaXNhYmxlZD1cInN1Ym1pdHRpbmcgfHwgbG9hZGluZ0Zvcm1cIj7kuIvliIDmj5DkuqQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbmNlbC1idG5cIiBAY2xpY2s9XCJjYW5jZWxcIiA6ZGlzYWJsZWQ9XCJzdWJtaXR0aW5nIHx8IGxvYWRpbmdGb3JtXCI+5riF56m65YiA5YW36YCJ5oupPC9idXR0b24+XHJcbiAgICAgICAgPC92aWV3PlxyXG5cclxuICAgICAgICA8IS0tIOaWsOWinu+8muiwg+acuuaVsOaNrui+k+WFpeWMuuWfnyAtLT5cclxuICAgICAgICA8dmlldyBjbGFzcz1cInRpYW9qaS1zZWN0aW9uXCI+XHJcbiAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwidGlhb2ppLXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPCEtLSDlvZPliY3osIPmnLrluIjlgoUgLS0+XHJcbiAgICAgICAgICAgICAgICA8dmlldyBjbGFzcz1cImN1cnJlbnQtdXNlci1zZWN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRleHQ+5b2T5YmN6LCD5py65biI5YKF77yaPC90ZXh0PlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0IGNsYXNzPVwiY3VycmVudC11c2VyLW5hbWVcIj57eyB0aWFvamlTdGFmZkRpc3BsYXkgfHwgJ+acqumAieaLqScgfX08L3RleHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInNlbGVjdC11c2VyLWJ0blwiIEBjbGljaz1cImlzVGlhb2ppVXNlclNlbGVjdFNob3cgPSB0cnVlXCI+6YCJ5Lq6PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L3ZpZXc+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSDosIPmnLroia/lk4HmlbAgLS0+XHJcbiAgICAgICAgICAgICAgICA8dmlldyBjbGFzcz1cInRpYW9qaS1pbnB1dC1zZWN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRleHQ+6LCD5py66Imv5ZOB5pWw77yaPC90ZXh0PlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB2LW1vZGVsPVwidGlhb2ppT2tRdHlcIiBjbGFzcz1cImlucCB0aWFvamktaW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgcGxhY2Vob2xkZXI9XCLor7fovpPlhaXmlbDph49cIiAvPlxyXG4gICAgICAgICAgICAgICAgPC92aWV3PlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0g6LCD5py65LiN6Imv5ZOB5pWwIC0tPlxyXG4gICAgICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJ0aWFvamktaW5wdXQtc2VjdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0Puiwg+acuuS4jeiJr+WTgeaVsO+8mjwvdGV4dD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdi1tb2RlbD1cInRpYW9qaUJhZFF0eVwiIGNsYXNzPVwiaW5wIHRpYW9qaS1pbnB1dFwiIHR5cGU9XCJudW1iZXJcIiBwbGFjZWhvbGRlcj1cIuivt+i+k+WFpeaVsOmHj1wiIC8+XHJcbiAgICAgICAgICAgICAgICA8L3ZpZXc+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSDpgIHmo4Dlkbzlj6vmjInpkq4gLS0+XHJcbiAgICAgICAgICAgICAgICA8dmlldyBjbGFzcz1cInRpYW9qaS1zdWJtaXQtc2VjdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkZXRhaWxzLWJ0blwiIEBjbGljaz1cImhhbmRsZUluc3BlY3Rpb25DYWxsXCI+6YCB5qOA5ZG85Y+rPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICA8L3ZpZXc+XHJcblxyXG4gICAgICAgIDwhLS0g6YCJ5oup6LCD5py65biI5YKF5by556qXIC0tPlxyXG4gICAgICAgIDx2aWV3IHYtaWY9XCJpc1RpYW9qaVVzZXJTZWxlY3RTaG93XCIgY2xhc3M9XCJvdmVybGF5XCI+XHJcbiAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwicG9wdXAgdXNlci1zZWxlY3QtcG9wdXBcIj5cclxuICAgICAgICAgICAgICAgIDwhLS0g5pCc57Si5qCPIC0tPlxyXG4gICAgICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJ1c2VyLXNlYXJjaC1iYXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdi1tb2RlbC50cmltPVwidGlhb2ppVXNlclNlYXJjaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ1c2VyLXNlYXJjaC1pbnB1dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwi6L6T5YWl5bel5Y+35oiW5aeT5ZCN5pCc57SiXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgQGtleWRvd24uZW50ZXIucHJldmVudCAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdi1pZj1cInRpYW9qaVVzZXJTZWFyY2hcIiBjbGFzcz1cInVzZXItc2VhcmNoLWNsZWFyXCIgQGNsaWNrPVwidGlhb2ppVXNlclNlYXJjaD0nJ1wiPua4heepujwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwidXNlci1zZWFyY2gtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICDljLnphY3vvJp7eyBmaWx0ZXJlZFRpYW9qaVVzZXJzLmxlbmd0aCB9fSAvIHt7IHRpYW9qaVVzZXJzLmxlbmd0aCB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwidXNlci1saXN0LXNjcm9sbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LWlmPVwiZmlsdGVyZWRUaWFvamlVc2Vycy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJ1c2VyLWxpc3QtZ3JpZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB2LWZvcj1cIih1LCBpbmRleCkgaW4gZmlsdGVyZWRUaWFvamlVc2Vyc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDprZXk9XCJpbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzcz1cIlsndXNlci1saXN0LWJ0bicsIHsnc2VsZWN0ZWQnOiB1PT09dGlhb2ppU3RhZmZOb31dXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPVwic2VsZWN0VGlhb2ppVXNlcih1KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidXNlci1jb2RlXCI+e3sgdS5zcGxpdCgnOicpWzBdIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidXNlci1uYW1lXCI+e3sgdS5zcGxpdCgnOicpWzFdIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2aWV3IHYtZWxzZSBjbGFzcz1cIm5vLXVzZXItcmVzdWx0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIOacquaJvuWIsOWMuemFjeS6uuWRmFxyXG4gICAgICAgICAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwidXNlci1wb3B1cC1mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2xlYW4tYnRuIHdpZGUtYnRuXCIgQGNsaWNrPVwiaXNUaWFvamlVc2VyU2VsZWN0U2hvdyA9IGZhbHNlXCI+5YWz6ZetPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICA8L3ZpZXc+XHJcblxyXG4gICAgICAgIDwhLS0g5YiA5YW355uu5b2V5by556qXIC0tPlxyXG4gICAgICAgIDx2aWV3IHYtaWY9XCJzaG93VG9vbERpYWxvZ1wiIGNsYXNzPVwiZGlhbG9nLW92ZXJsYXlcIj5cclxuICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJkaWFsb2dcIj5cclxuICAgICAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB2LW1vZGVsPVwic2VhcmNoS2V5XCIgcGxhY2Vob2xkZXI9XCLovpPlhaXliIDlhbfnvJbnoIHjgIHlkI3np7DmqKHns4rmkJzntKJcIiBjbGFzcz1cImlucHV0XCIgQGlucHV0PVwib25TZWFyY2hLZXlJbnB1dFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0bi1ibHVlXCIgQGNsaWNrPVwic2VhcmNoVG9vbFwiIDpkaXNhYmxlZD1cImxvYWRpbmdUb29sc1wiPuaQnOe0ojwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJ0b29sLWxpc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHYtZm9yPVwidG9vbCBpbiBmaWx0ZXJlZFRvb2xzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDprZXk9XCJ0b29sLm5vXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidG9vbC1idG5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOmNsYXNzPVwieyBhY3RpdmU6IGFjdGl2ZVRvb2xObyA9PT0gdG9vbC5ubyB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdFRvb2wodG9vbClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgdG9vbC5ubyB9fSB8IHt7IHRvb2wubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJkaWFsb2ctYWN0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLWJsdWVcIiBAY2xpY2s9XCJwcmV2UGFnZVwiIDpkaXNhYmxlZD1cInBhZ2VJbmRleCA9PT0gMSB8fCBsb2FkaW5nVG9vbHNcIj7kuIrkuIDpobU8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW46IDAgMTJweDtcIj7nrKx7eyBwYWdlSW5kZXggfX3pobUgLyDlhbF7eyB0b3RhbFBhZ2VzIH196aG1PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLWJsdWVcIiBAY2xpY2s9XCJuZXh0UGFnZVwiIDpkaXNhYmxlZD1cInBhZ2VJbmRleCA9PT0gdG90YWxQYWdlcyB8fCBsb2FkaW5nVG9vbHNcIj7kuIvkuIDpobU8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgZ2FwOiAxOHB4OyBhbGlnbi1pdGVtczogY2VudGVyO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLWJsdWVcIiBAY2xpY2s9XCJjb25maXJtVG9vbFwiPuehruWumjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLWRpc2FibGVkXCIgQGNsaWNrPVwiY2xvc2VUb29sRGlhbG9nXCI+5Y+W5raIPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICA8L3ZpZXc+XHJcblxyXG4gICAgICAgIDwhLS0g6ZqQ6JeP5YiA5YW35L2/55So6K6w5b2V6KGo5qC8IC0tPlxyXG4gICAgICAgIDx2aWV3IHYtaWY9XCJmYWxzZVwiIGNsYXNzPVwidGFibGUtc2VjdGlvblwiPlxyXG4gICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJzdHlsZWQtdGFibGVcIj5cclxuICAgICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOjclXCI+5YiA5YW357yW5Y+3PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPVwid2lkdGg6MTIlXCI+5YiA5YW35ZCN56ewPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPVwid2lkdGg6MTAlXCI+5LiK5YiA5pe26Ze0PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibnVtXCIgc3R5bGU9XCJ3aWR0aDo3JVwiPuS4iuWIgOiuoeaVsDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOjEwJVwiPuS4i+WIgOaXtumXtDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm51bVwiIHN0eWxlPVwid2lkdGg6NyVcIj7kuIvliIDorqHmlbA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJudW1cIiBzdHlsZT1cIndpZHRoOjclXCI+5L2/55So5qyh5pWwPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibnVtXCIgc3R5bGU9XCJ3aWR0aDo3JVwiPuS9v+eUqOS4iumZkDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm51bVwiIHN0eWxlPVwid2lkdGg6NyVcIj7lr7/lkb3mr5QlPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibnVtXCIgc3R5bGU9XCJ3aWR0aDo3JVwiPuWvv+WRveavlOmihOitpuWAvDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOjclXCI+6aKE6K2m54q25oCBPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPVwid2lkdGg6NyVcIj7liIDlhbflnKjmnLrnirbmgIE8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgICAgPHRib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ciB2LWZvcj1cIihpdGVtLCBpZHgpIGluIHRvb2xSZWNvcmRzXCIgOmtleT1cIml0ZW0uaWRcIiA6Y2xhc3M9XCJ7J3Jvdy1vZGQnOiBpZHggJSAyID09PSAwfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3sgaXRlbS5ubyB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImxlZnRcIj57eyBpdGVtLm5hbWUgfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3sgaXRlbS51cFRpbWUgfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJudW1cIj57eyBpdGVtLnVwQ291bnQgIT0gbnVsbCA/IGl0ZW0udXBDb3VudCA6ICcnIH19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7IGl0ZW0uZG93blRpbWUgfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIOWPquacieesrOS4gOihjOaYvuekuiBjdXJyZW50Q2pOdW3vvIzlhbblroPooYzmmL7npLogZG93bkNvdW50IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJudW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LWlmPVwiaWR4ID09PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSDnrKzkuIDooYzvvJrkuIvmnLrml7bkuI3lrp7ml7bmmL7npLogY3VycmVudENqTnVt77yM5pi+56S6IGRvd25Db3VudCAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1pZj1cIiFpdGVtLmRvd25UaW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uY3VycmVudENqTnVtICE9IG51bGwgPyBpdGVtLmN1cnJlbnRDak51bSA6ICcnIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1lbHNlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmRvd25Db3VudCAhPSBudWxsID8gaXRlbS5kb3duQ291bnQgOiAnJyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtZWxzZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmRvd25Db3VudCAhPSBudWxsID8gaXRlbS5kb3duQ291bnQgOiAnJyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLeS9v+eUqOasoeaVsC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJudW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LWlmPVwiaWR4ID09PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSDnrKzkuIDooYzlrp7ml7borqHnrpfkvb/nlKjmrKHmlbDvvIzoi6XkuLrkuIvmnLrliJnkuI3lrp7ml7bmmL7npLogLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtaWY9XCIhaXRlbS5kb3duVGltZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW0uY3VycmVudENqTnVtICE9IG51bGwgJiYgaXRlbS51cENvdW50ICE9IG51bGwgPyAoTnVtYmVyKGl0ZW0uY3VycmVudENqTnVtKSAtIE51bWJlcihpdGVtLnVwQ291bnQpKSA6IChpdGVtLnVzZUNvdW50ICE9IG51bGwgPyBpdGVtLnVzZUNvdW50IDogJycpIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1lbHNlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLnVzZUNvdW50ICE9IG51bGwgPyBpdGVtLnVzZUNvdW50IDogJycgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LWVsc2U+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS51c2VDb3VudCAhPSBudWxsID8gaXRlbS51c2VDb3VudCA6ICcnIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJudW1cIj57eyBpdGVtLnVzZUxpbWl0ICE9IG51bGwgPyBpdGVtLnVzZUxpbWl0IDogJycgfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0t5a+/5ZG95q+UJS0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJudW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LWlmPVwiaWR4ID09PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSDnrKzkuIDooYzlrp7ml7borqHnrpflr7/lkb3mr5Ql77yM6Iul5Li65LiL5py65YiZ5LiN5a6e5pe25pi+56S6IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LWlmPVwiIWl0ZW0uZG93blRpbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtLmN1cnJlbnRDak51bSAhPSBudWxsICYmIGl0ZW0udXBDb3VudCAhPSBudWxsICYmIGl0ZW0udXNlTGltaXQgIT0gbnVsbCAmJiBOdW1iZXIoaXRlbS51c2VMaW1pdCkgPiAwID8gTWF0aC5yb3VuZCgoTnVtYmVyKGl0ZW0uY3VycmVudENqTnVtKSAtIE51bWJlcihpdGVtLnVwQ291bnQpKSAvIE51bWJlcihpdGVtLnVzZUxpbWl0KSAqIDEwMCkgKyAnJScgOiAoaXRlbS5saWZlUGVyY2VudCAhPSBudWxsID8gaXRlbS5saWZlUGVyY2VudCA6ICcnKSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtZWxzZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5saWZlUGVyY2VudCAhPSBudWxsID8gaXRlbS5saWZlUGVyY2VudCA6ICcnIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1lbHNlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0ubGlmZVBlcmNlbnQgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cIm51bVwiPnt7IGl0ZW0ubGlmZVdhcm4gfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgOmNsYXNzPVwiaXRlbS53YXJuU3RhdHVzID09PSAn6aKE6K2mJyA/ICd3YXJuLWNlbGwnIDogKGl0ZW0ud2FyblN0YXR1cyA9PT0gJ+ato+W4uCcgPyAnb2stY2VsbCcgOiAnJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHYtaWY9XCJpdGVtLndhcm5TdGF0dXMgPT09ICfpooToraYnXCIgY2xhc3M9XCJ3YXJuLWJhZGdlXCI+6K2m5ZGKPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdi1lbHNlPnt7IGl0ZW0ud2FyblN0YXR1cyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5kb3duVGltZSA/ICfkuIvmnLonIDogJ+WcqOacuicgfX08IS0t5Zyo5py654q25oCBLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICA8dHIgdi1pZj1cIiF0b29sUmVjb3Jkcy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCIxMlwiPuaaguaXoOaVsOaNrjwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgPC92aWV3PlxyXG5cclxuICAgICAgICA8IS0tIOivtOaYjiAtLT5cclxuICAgICAgICA8IS0tPHZpZXcgY2xhc3M9XCJ0b29sLWRlc2NcIj5cclxuICAgICAgICAgICAgPHAgc3R5bGU9XCJjb2xvcjpyZWQ7XCI+J+S9v+eUqOS4iumZkCfku6XkuIvliIDml7bnmoQn5L2/55So5LiK6ZmQJ+S4uuiuoeeul+agh+WHhjwvcD5cclxuICAgICAgICAgICAgPHAgc3R5bGU9XCJjb2xvcjpyZWQ7XCI+5a+/5ZG95q+U6aKE6K2m5YC86buY6K6k5Li6OTAlPC9wPlxyXG4gICAgICAgIDwvdmlldz4tLT5cclxuICAgIDwvdmlldz5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzY3JpcHQ+XHJcbiAgICBleHBvcnQgZGVmYXVsdCB7XHJcbiAgICAgICAgZGF0YSgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIG1hY2hpbmVObzogJycsLy/mnLrlj7DnvJbnoIFcclxuICAgICAgICAgICAgICAgIHdvcmtPcmRlck5vOiAnJywvL+W3peWNleWPt1xyXG4gICAgICAgICAgICAgICAgYWN0aXZlVG9vbE5vOiAnJywgLy8g5b2T5YmN6YCJ5Lit55qE5YiA5YW357yW5Y+3XHJcbiAgICAgICAgICAgICAgICBwYWdlSW5kZXg6IDEsXHJcbiAgICAgICAgICAgICAgICBwYWdlU2l6ZTogMjAsIC8v5Y2V6aG15pi+56S655qE5YiA5YW35pWw6YePXHJcbiAgICAgICAgICAgICAgICB0b3RhbDogMCxcclxuICAgICAgICAgICAgICAgIHRvb2xMaXN0OiBbXSxcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkVG9vbE5vOiAnJyxcclxuICAgICAgICAgICAgICAgIHRvb2xOYW1lOiAnJyxcclxuICAgICAgICAgICAgICAgIHRvb2xNb2RlbDogJycsXHJcbiAgICAgICAgICAgICAgICBzaG93VG9vbERpYWxvZzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBzZWFyY2hLZXk6ICcnLFxyXG4gICAgICAgICAgICAgICAgZmlsdGVyZWRUb29sczogW10sXHJcbiAgICAgICAgICAgICAgICB1c2VMaW1pdElucHV0OiAnJyxcclxuICAgICAgICAgICAgICAgIGxpZmVXYXJuSW5wdXQ6ICcnLCAvLyDmlrDlop7vvJrlr7/lkb3mr5TpooTorablgLzljp/lp4vovpPlhaVcclxuICAgICAgICAgICAgICAgIHRvb2xSZWNvcmRzOiBbXSxcclxuICAgICAgICAgICAgICAgIGxvYWRpbmdUb29sczogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nRm9ybTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBzdWJtaXR0aW5nOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIF9zZWFyY2hUaW1lcjogbnVsbCxcclxuICAgICAgICAgICAgICAgIHdvcmtPcmRlckN1cnJlbnRDak51bTogbnVsbCwgLy8g5bel5Y2V5b2T5YmN5pWw6YeHXHJcblxyXG4gICAgICAgICAgICAgICAgLy8g6Ieq5Yqo5L+d5a2Y55u45YWzXHJcbiAgICAgICAgICAgICAgICBhdXRvU2F2ZVRpbWVyOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgaXNEaXJ0eTogZmFsc2UsIC8vIOihqOWNleaYr+WQpuacieacquS/neWtmOWPmOabtFxyXG4gICAgICAgICAgICAgICAgYXV0b1NhdmVJbnRlcnZhbE1zOiA1ICogNjAgKiAxMDAwLCAvLyDpu5jorqQgNSDliIbpkp9cclxuICAgICAgICAgICAgICAgIGF1dG9TYXZlRW5hYmxlZDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGF1dG9TYXZlQWN0aW9uTmFtZTogJ2hhbmRsZVVwVG9vbCcsIC8vIOiHquWKqOinpuWPkeeahOaWueazleWQje+8jOWPr+aUueS4uuiHquWumuS5ieS/neWtmOaWueazlVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIOaWsOWinu+8muiwg+acuuebuOWFs+Wtl+autVxyXG4gICAgICAgICAgICAgICAgaXNUaWFvamlVc2VyU2VsZWN0U2hvdzogZmFsc2UsIC8vIOiwg+acuuW4iOWChemAieaLqeW8ueeql1xyXG4gICAgICAgICAgICAgICAgdGlhb2ppU3RhZmZObzogJycsIC8vIOW9k+WJjemAieS4reeahOiwg+acuuW4iOWChSjmoLzlvI86IOW3peWPtzrlp5PlkI0pXHJcbiAgICAgICAgICAgICAgICB0aWFvamlPa1F0eTogJycsIC8vIOiwg+acuuiJr+WTgeaVsFxyXG4gICAgICAgICAgICAgICAgdGlhb2ppQmFkUXR5OiAnJywgLy8g6LCD5py65LiN6Imv5ZOB5pWwXHJcbiAgICAgICAgICAgICAgICB0aWFvamlVc2VyczogW10sIC8vIOiwg+acuuW4iOWCheWIl+ihqFxyXG4gICAgICAgICAgICAgICAgdGlhb2ppVXNlclNlYXJjaDogJycsIC8vIOaQnOe0ouWFs+mUruivjVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgLy8g5paw5aKe77ya5oql6K+V5Lqn5pWw5omA6ZyA5a2X5q61XHJcbiAgICAgICAgICAgICAgICBvcmRlcklkOiBudWxsLCAvLyDlt6XljZVJRFxyXG4gICAgICAgICAgICAgICAgb3JkZXI6IHt9IC8vIOW3peWNleaVsOaNrlxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY29tcHV0ZWQ6IHtcclxuICAgICAgICAgICAgdG90YWxQYWdlcygpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLm1heCgxLCBNYXRoLmNlaWwodGhpcy50b3RhbCAvIHRoaXMucGFnZVNpemUpIHx8IDEpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAvLyDmlrDlop7vvJrosIPmnLrluIjlgoXmmL7npLrlkI3np7BcclxuICAgICAgICAgICAgdGlhb2ppU3RhZmZEaXNwbGF5KCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnRpYW9qaVN0YWZmTm8pIHJldHVybiAnJztcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNlZ3MgPSB0aGlzLnRpYW9qaVN0YWZmTm8uc3BsaXQoJzonKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBzZWdzLmxlbmd0aCA+IDEgPyBgJHtzZWdzWzBdfSAke3NlZ3NbMV19YCA6IHRoaXMudGlhb2ppU3RhZmZObztcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgLy8g5paw5aKe77ya6L+H5ruk5ZCO55qE6LCD5py65biI5YKF5YiX6KGoXHJcbiAgICAgICAgICAgIGZpbHRlcmVkVGlhb2ppVXNlcnMoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMudGlhb2ppVXNlclNlYXJjaCkgcmV0dXJuIHRoaXMudGlhb2ppVXNlcnM7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBrdyA9IHRoaXMudGlhb2ppVXNlclNlYXJjaC50cmltKCkudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRpYW9qaVVzZXJzLmZpbHRlcih1ID0+IHUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhrdykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICB3YXRjaDoge1xyXG4gICAgICAgICAgICAvLyDmoIforrDohI/mlbDmja7vvJrmjInpnIDnm5HlkKzlrZfmrrXlj5jljJZcclxuICAgICAgICAgICAgc2VsZWN0ZWRUb29sTm8oKSB7IHRoaXMuaXNEaXJ0eSA9IHRydWU7IH0sXHJcbiAgICAgICAgICAgIHVzZUxpbWl0SW5wdXQoKSB7IHRoaXMuaXNEaXJ0eSA9IHRydWU7IH0sXHJcbiAgICAgICAgICAgIGxpZmVXYXJuSW5wdXQoKSB7IHRoaXMuaXNEaXJ0eSA9IHRydWU7IH0sXHJcbiAgICAgICAgICAgIHRvb2xOYW1lKCkgeyB0aGlzLmlzRGlydHkgPSB0cnVlOyB9LFxyXG4gICAgICAgICAgICB0b29sTW9kZWwoKSB7IHRoaXMuaXNEaXJ0eSA9IHRydWU7IH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIG1ldGhvZHM6IHtcclxuICAgICAgICAgICAgLy/mn6Xor6LlvZPliY3mlbDph4fmlbDvvIzkvZzkuLrkuIvliIDorqHmlbDlrp7ml7bmmL7npLpcclxuICAgICAgICAgICAgYXN5bmMgZmV0Y2hDdXJyZW50Q2pOdW0odG9vbE5vKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMubWFjaGluZU5vKSByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy4kcG9zdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJy9Xb21kYWEvR2V0V29tZGFhc0J5U2hvdycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KHsgbWFjaGluZU5vOiB0aGlzLm1hY2hpbmVObyB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzLnN0YXR1cyA9PT0gMCAmJiBBcnJheS5pc0FycmF5KHJlcy5kYXRhPy50YkJpbGxMaXN0KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3VuZCA9IHJlcy5kYXRhLnRiQmlsbExpc3QuZmluZCh4ID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LmN1dHRlcklkID09PSB0b29sTm8gfHwgeC5jdXR0ZVJfSUQgPT09IHRvb2xOb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm91bmQgPyAoZm91bmQuQ3VycmVudENqTnVtID8/IGZvdW5kLmN1cnJlbnRDak51bSA/PyBudWxsKSA6IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2Fybign6I635Y+WY3VycmVudENqTnVt5aSx6LSlJywgZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgIC8vIOaWsOWinu+8muWIt+aWsOaMiemSruWkhOeQhuaWueazlVxyXG4gICAgICAgICAgICBhc3luYyBoYW5kbGVSZWZyZXNoKCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mZXRjaFRvb2xzKCcnKTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hY2hpbmVObyAmJiB0aGlzLndvcmtPcmRlck5vKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5mZXRjaEZvcm1EYXRhKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5mZXRjaERlZmF1bHRUb29sRnJvbVdvcmtPcmRlcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIOWIt+aWsOWQjui1i+WAvOesrOS4gOihjCBjdXJyZW50Q2pOdW1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50b29sUmVjb3Jkcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJHNldCh0aGlzLnRvb2xSZWNvcmRzWzBdLCAnY3VycmVudENqTnVtJywgdGhpcy53b3JrT3JkZXJDdXJyZW50Q2pOdW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuJHNob3dNZXNzYWdlKCfliLfmlrDlrozmiJAnKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgLy8g6Ieq5Yqo5L+d5a2Y77ya5ZCv5YqoXHJcbiAgICAgICAgICAgIHN0YXJ0QXV0b1NhdmUoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYXV0b1NhdmVFbmFibGVkKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3BBdXRvU2F2ZSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hdXRvU2F2ZVRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXV0b1NhdmVUaWNrKCk7XHJcbiAgICAgICAgICAgICAgICB9LCB0aGlzLmF1dG9TYXZlSW50ZXJ2YWxNcyk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIC8vIOiHquWKqOS/neWtmO+8muWBnOatolxyXG4gICAgICAgICAgICBzdG9wQXV0b1NhdmUoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5hdXRvU2F2ZVRpbWVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmF1dG9TYXZlVGltZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXV0b1NhdmVUaW1lciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIC8vIOiHquWKqOS/neWtmO+8muavj+asoeWumuaXtuaJp+ihjOaXtueahOmAu+i+kVxyXG4gICAgICAgICAgICBhc3luYyBhdXRvU2F2ZVRpY2soKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYXV0b1NhdmVFbmFibGVkKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNEaXJ0eSkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc3VibWl0dGluZyB8fCB0aGlzLmxvYWRpbmdGb3JtKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgZm4gPSB0aGlzLmF1dG9TYXZlQWN0aW9uTmFtZSAmJiB0eXBlb2YgdGhpc1t0aGlzLmF1dG9TYXZlQWN0aW9uTmFtZV0gPT09ICdmdW5jdGlvbidcclxuICAgICAgICAgICAgICAgICAgICA/IHRoaXNbdGhpcy5hdXRvU2F2ZUFjdGlvbk5hbWVdXHJcbiAgICAgICAgICAgICAgICAgICAgOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFmbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2Fybign6Ieq5Yqo5L+d5a2Y77ya5pyq5om+5Yiw5pa55rOVJywgdGhpcy5hdXRvU2F2ZUFjdGlvbk5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3VibWl0dGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZm4uY2FsbCh0aGlzKTsgLy8g6LCD55So5L+d5a2Y5pa55rOV77yI5L6L5aaCIGhhbmRsZVVwVG9vbO+8iVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOWmguaenOS/neWtmOaIkOWKn++8jOa4heiEj+agh+iusO+8iOS/neWtmOaWueazleWGhemDqOiLpeWksei0peayoeacieaKm+WHuuWPr+S/neaMgeatpOaWueW8j++8iVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNEaXJ0eSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ+iHquWKqOS/neWtmOWksei0pe+8micsIGUpO1xyXG4gICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Ym1pdHRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgIC8vIOaWsOWinu+8muWvv+WRveavlOmihOitpuWAvOW9kuS4gOWMliAo6L+U5ZueIDB+MSDmiJYgbnVsbClcclxuICAgICAgICAgICAgbm9ybWFsaXplTGlmZVdhcm4odikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHYgPT0gbnVsbCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByYXcgPSBTdHJpbmcodikudHJpbSgpLnJlcGxhY2UoL1sl77yFXS9nLCAnJyk7XHJcbiAgICAgICAgICAgICAgICBpZiAocmF3ID09PSAnJykgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBudW0gPSBOdW1iZXIocmF3KTtcclxuICAgICAgICAgICAgICAgIGlmICghaXNGaW5pdGUobnVtKSB8fCBudW0gPD0gMCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtID4gMSA/IChudW0gLyAxMDApIDogbnVtO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBvcGVuVG9vbERpYWxvZygpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd1Rvb2xEaWFsb2cgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYWdlSW5kZXggPSAxO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mZXRjaFRvb2xzKHRoaXMuc2VhcmNoS2V5KTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY2xvc2VUb29sRGlhbG9nKCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93VG9vbERpYWxvZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBhc3luYyBmZXRjaFRvb2xzKHNlYXJjaEtleSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nVG9vbHMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLiRwb3N0KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnL01lc0N1dHRlckxlZGdlci9RdWVyeVRvb2xzJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoS2V5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZUluZGV4OiB0aGlzLnBhZ2VJbmRleCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzLnN0YXR1cyA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXlsb2FkID0gQXJyYXkuaXNBcnJheShyZXMuZGF0YSkgPyByZXMuZGF0YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAocmVzLmRhdGEgJiYgcmVzLmRhdGEudGJCaWxsTGlzdCkgPyByZXMuZGF0YS50YkJpbGxMaXN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAocmVzLmRhdGEgJiYgcmVzLmRhdGEuZGF0YSkgPyByZXMuZGF0YS5kYXRhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogW107XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnZXRGaWVsZCA9IChvYmosIC4uLmtleXMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgayBvZiBrZXlzKSBpZiAob2JqPy5ba10gIT09IHVuZGVmaW5lZCAmJiBvYmo/LltrXSAhPT0gbnVsbCkgcmV0dXJuIG9ialtrXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g6L+Z6YeM6ZyA6KaB5oqKIGxpZmVXYXJuIOWtl+auteS5n+W4puWHuuadpVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXBwZWQgPSAocGF5bG9hZCB8fCBbXSkubWFwKHQgPT4gKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vOiBnZXRGaWVsZCh0LCAnY3V0dGVySWQnLCAnQ1VUVEVSX0lEJywgJ2N1dHRlUl9JRCcsICdkYUEwMDEnLCAnbm8nKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGdldEZpZWxkKHQsICdjdXR0ZXJOYW1lJywgJ0NVVFRFUl9OQU1FJywgJ2N1dHRlUl9OQU1FJywgJ25hbWUnKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsOiBnZXRGaWVsZCh0LCAnY3V0dGVyTW9kZWwnLCAnQ1VUVEVSX01PREVMJywgJ2N1dHRlUl9NT0RFTCcsICdtb2RlbCcpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlmZVdhcm46IGdldEZpZWxkKHQsICdtb2RsTGlmZVdvcm5pbmcnLCAnbGlmZVdhcm4nLCAnTElGRV9XQVJOJywgJ2xpZkVfV0FSTicpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRUb29scyA9IG1hcHBlZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b29sTGlzdCA9IG1hcHBlZC5zbGljZSgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdG90YWxGcm9tUmVzID0gTnVtYmVyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmRhdGE/LnRvdGFsID8/IHJlcy5kYXRhPy50b3RhbENvdW50ID8/IHJlcy50b3RhbCA/PyByZXMudG90YWxDb3VudCA/PyBtYXBwZWQubGVuZ3RoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG90YWwgPSBOdW1iZXIuaXNGaW5pdGUodG90YWxGcm9tUmVzKSA/IHRvdGFsRnJvbVJlcyA6IG1hcHBlZC5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnBhZ2VJbmRleCA+IHRoaXMudG90YWxQYWdlcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdlSW5kZXggPSB0aGlzLnRvdGFsUGFnZXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRzaG93TWVzc2FnZShyZXMubWVzc2FnZSB8fCAn5p+l6K+i5aSx6LSlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignZmV0Y2hUb29scyDplJnor6/vvJonLCBlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJHNob3dNZXNzYWdlKCfmn6Xor6LliIDlhbflpLHotKXvvIzor7fmo4Dmn6XnvZHnu5zmiJbmjqXlj6MnKTtcclxuICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nVG9vbHMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgYXN5bmMgcHJldlBhZ2UoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wYWdlSW5kZXggPiAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdlSW5kZXgtLTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmZldGNoVG9vbHModGhpcy5zZWFyY2hLZXkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBhc3luYyBuZXh0UGFnZSgpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnBhZ2VJbmRleCA8IHRoaXMudG90YWxQYWdlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFnZUluZGV4Kys7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5mZXRjaFRvb2xzKHRoaXMuc2VhcmNoS2V5KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgb25TZWFyY2hLZXlJbnB1dCgpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9zZWFyY2hUaW1lcik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWFyY2hUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoVG9vbCgpO1xyXG4gICAgICAgICAgICAgICAgfSwgMzAwKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgYXN5bmMgc2VhcmNoVG9vbCgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGFnZUluZGV4ID0gMTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZmV0Y2hUb29scyh0aGlzLnNlYXJjaEtleSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNlbGVjdFRvb2wodG9vbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRvb2xObyA9IHRvb2wubm87XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvb2xOYW1lID0gdG9vbC5uYW1lO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b29sTW9kZWwgPSB0b29sLm1vZGVsO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVUb29sTm8gPSB0b29sLm5vO1xyXG4gICAgICAgICAgICAgICAgLy8g5paw5aKe77ya5bim5Ye65a+/5ZG95q+U6aKE6K2m5YC8XHJcbiAgICAgICAgICAgICAgICBpZiAodG9vbC5saWZlV2FybiAhPT0gdW5kZWZpbmVkICYmIHRvb2wubGlmZVdhcm4gIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyDmoLzlvI/ljJbkuLrnmb7liIbmr5TlrZfnrKbkuLJcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB3YXJuID0gTnVtYmVyKHRvb2wubGlmZVdhcm4pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGlmZVdhcm5JbnB1dCA9IHdhcm4gPD0gMSA/ICh3YXJuICogMTAwKS50b0ZpeGVkKDApIDogd2Fybi50b0ZpeGVkKDApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxpZmVXYXJuSW5wdXQgPSAnJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY29uZmlybVRvb2woKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dUb29sRGlhbG9nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGFzeW5jIHNldFVzZUxpbWl0KCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkVG9vbE5vKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kc2hvd01lc3NhZ2UoJ+ivt+mAieaLqeWIgOWFt+WQjuWGjeiuvue9ruS4iumZkCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IHYgPSBOdW1iZXIodGhpcy51c2VMaW1pdElucHV0KTtcclxuICAgICAgICAgICAgICAgIGlmIChpc05hTih2KSB8fCB2IDw9IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiRzaG93TWVzc2FnZSgn6K+36L6T5YWl5pyJ5pWI55qE5L2/55So5LiK6ZmQJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy50b29sUmVjb3JkcyA9IHRoaXMudG9vbFJlY29yZHMubWFwKHIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyLm5vID09PSB0aGlzLnNlbGVjdGVkVG9vbE5vKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLnIsIHVzZUxpbWl0OiB2IH07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvb2xMaXN0ID0gdGhpcy50b29sTGlzdC5tYXAodCA9PiB0Lm5vID09PSB0aGlzLnNlbGVjdGVkVG9vbE5vID8geyAuLi50LCB1c2VMaW1pdDogdiB9IDogdCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRzaG93TWVzc2FnZSgn5L2/55So5LiK6ZmQ5bey6K6+572u77yI5LuF5YmN56uv5pi+56S677yJJyk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIC8vIOS4iuWIgOaXtuS8oOmAkiBzZGpzID0g5bel5Y2VIGN1cnJlbnRDak51bVxyXG4gICAgICAgICAgICBhc3luYyBoYW5kbGVVcFRvb2woKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMud29ya09yZGVyTm8pIHsgdGhpcy4kc2hvd01lc3NhZ2UoJ+W3peWNleWPt+S4jeiDveS4uuepuicpOyByZXR1cm47IH1cclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5tYWNoaW5lTm8pIHsgdGhpcy4kc2hvd01lc3NhZ2UoJ+acuuWPsOWPt+S4jeiDveS4uuepuicpOyByZXR1cm47IH1cclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZFRvb2xObykgeyB0aGlzLiRzaG93TWVzc2FnZSgn5YiA5YW357yW5Y+35LiN6IO95Li656m6Jyk7IHJldHVybjsgfVxyXG4gICAgICAgICAgICAgICAgLy/kuIrliIDlvLrliLblvZXlhaXkvb/nlKjkuIrpmZBcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy51c2VMaW1pdElucHV0KSB7IHRoaXMuJHNob3dNZXNzYWdlKCfkvb/nlKjkuIrpmZDkuI3og73kuLrnqbonKTsgcmV0dXJuOyB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCB1c2VMaW1pdCA9IE51bWJlcih0aGlzLnVzZUxpbWl0SW5wdXQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzTmFOKHVzZUxpbWl0KSB8fCB1c2VMaW1pdCA8PSAwKSB7IHRoaXMuJHNob3dNZXNzYWdlKCfor7fovpPlhaXmnInmlYjnmoTkvb/nlKjkuIrpmZAnKTsgcmV0dXJuOyB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gc2RqcyDkvb/nlKjlt6XljZUgY3VycmVudENqTnVtXHJcbiAgICAgICAgICAgICAgICBjb25zdCBzZGpzID0gdGhpcy53b3JrT3JkZXJDdXJyZW50Q2pOdW0gIT0gbnVsbCA/IE51bWJlcih0aGlzLndvcmtPcmRlckN1cnJlbnRDak51bSkgOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbGlmZVdhcm5SYXRpbyA9IHRoaXMubm9ybWFsaXplTGlmZVdhcm4odGhpcy5saWZlV2FybklucHV0KTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd29ya09yZGVyTm86IHRoaXMud29ya09yZGVyTm8sXHJcbiAgICAgICAgICAgICAgICAgICAgbWFjaGluZU5vOiB0aGlzLm1hY2hpbmVObyxcclxuICAgICAgICAgICAgICAgICAgICB0b29sTm86IHRoaXMuc2VsZWN0ZWRUb29sTm8sXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ+S4iuacuicsXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlTGltaXQsXHJcbiAgICAgICAgICAgICAgICAgICAgc2RqcywvLyDkuIrliIDorqHmlbDvvIjlt6XljZXlvZPliY3mlbDph4fvvIlcclxuICAgICAgICAgICAgICAgICAgICBtb2RsTGlmZVdvcm5pbmc6IGxpZmVXYXJuUmF0aW8gLy8g5paw5aKeXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Ym1pdHRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuJHBvc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICcvTWVzQ3V0dGVyTGVkZ2VyL1N1Ym1pdFRvb2xBY3Rpb24nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeShwYXlsb2FkKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzLmRhdGEgJiYgcmVzLmRhdGEub3V0U3VtID09PSBcIjBcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmkuc2hvd1RvYXN0KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiByZXMuZGF0YS5vdXRNc2cgfHwgJycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uOiAnZXJyb3InXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXMuZGF0YSAmJiByZXMuZGF0YS5vdXRNc2cpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdW5pLnNob3dUb2FzdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogcmVzLmRhdGEub3V0TXNnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjogJ25vbmUnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAvLyDlkI7nu63pgLvovpHnu6fnu63miafooYxcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzLnN0YXR1cyA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmZldGNoRm9ybURhdGEoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kc2hvd01lc3NhZ2UoJ+S4iuWIgOaPkOS6pOWksei0pe+8jOivt+ajgOafpee9kee7nCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycjsgLy8g5oqb5Ye65Lul5L6/6Ieq5Yqo5L+d5a2Y6YC76L6R5o2V6I635bm25L+d55WZIGlzRGlydHlcclxuICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJtaXR0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIC8vIOS4i+WIgOaXtuS8oOmAkiB4ZGpzID0g5bel5Y2VIGN1cnJlbnRDak51bVxyXG4gICAgICAgICAgICBhc3luYyBoYW5kbGVEb3duVG9vbCgpIHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy53b3JrT3JkZXJObykgeyB0aGlzLiRzaG93TWVzc2FnZSgn5bel5Y2V5Y+35LiN6IO95Li656m6Jyk7IHJldHVybjsgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm1hY2hpbmVObykgeyB0aGlzLiRzaG93TWVzc2FnZSgn5py65Y+w5Y+35LiN6IO95Li656m6Jyk7IHJldHVybjsgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkVG9vbE5vKSB7IHRoaXMuJHNob3dNZXNzYWdlKCfliIDlhbfnvJblj7fkuI3og73kuLrnqbonKTsgcmV0dXJuOyB9XHJcbiAgICAgICAgICAgICAgICAvL+S4i+WIgOS4jeW8uuWItuW9leWFpeS9v+eUqOS4iumZkFxyXG4gICAgICAgICAgICAgICAgLy9pZiAoIXRoaXMudXNlTGltaXRJbnB1dCkgeyB0aGlzLiRzaG93TWVzc2FnZSgn5L2/55So5LiK6ZmQ5LiN6IO95Li656m6Jyk7IHJldHVybjsgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgdXNlTGltaXQgPSBOdW1iZXIodGhpcy51c2VMaW1pdElucHV0KTtcclxuICAgICAgICAgICAgICAgIC8vaWYgKGlzTmFOKHVzZUxpbWl0KSB8fCB1c2VMaW1pdCA8PSAwKSB7IHRoaXMuJHNob3dNZXNzYWdlKCfor7fovpPlhaXmnInmlYjnmoTkvb/nlKjkuIrpmZAnKTsgcmV0dXJuOyB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8g5LiL5YiA6K6h5pWw5ZCM5qC35Y+W5bel5Y2V5pyA5paw6YeH6ZuG5pWwXHJcbiAgICAgICAgICAgICAgICBjb25zdCB4ZGpzID0gdGhpcy53b3JrT3JkZXJDdXJyZW50Q2pOdW0gIT0gbnVsbCA/IE51bWJlcih0aGlzLndvcmtPcmRlckN1cnJlbnRDak51bSkgOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbGlmZVdhcm5SYXRpbyA9IHRoaXMubm9ybWFsaXplTGlmZVdhcm4odGhpcy5saWZlV2FybklucHV0KTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd29ya09yZGVyTm86IHRoaXMud29ya09yZGVyTm8sXHJcbiAgICAgICAgICAgICAgICAgICAgbWFjaGluZU5vOiB0aGlzLm1hY2hpbmVObyxcclxuICAgICAgICAgICAgICAgICAgICB0b29sTm86IHRoaXMuc2VsZWN0ZWRUb29sTm8sXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ+S4i+acuicsXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlTGltaXQsXHJcbiAgICAgICAgICAgICAgICAgICAgeGRqcywvLyDkuIvliIDorqHmlbBcclxuICAgICAgICAgICAgICAgICAgICBtb2RsTGlmZVdvcm5pbmc6IGxpZmVXYXJuUmF0aW8gLy8g5paw5aKeXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Ym1pdHRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuJHBvc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICcvTWVzQ3V0dGVyTGVkZ2VyL1N1Ym1pdFRvb2xBY3Rpb24nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeShwYXlsb2FkKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzLmRhdGEgJiYgcmVzLmRhdGEub3V0U3VtID09PSBcIjBcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmkuc2hvd1RvYXN0KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiByZXMuZGF0YS5vdXRNc2cgfHwgJycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uOiAnZXJyb3InXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXMuZGF0YSAmJiByZXMuZGF0YS5vdXRNc2cpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdW5pLnNob3dUb2FzdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogcmVzLmRhdGEub3V0TXNnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjogJ25vbmUnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAvLyDlkI7nu63pgLvovpHnu6fnu63miafooYxcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzLnN0YXR1cyA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmZldGNoRm9ybURhdGEoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kc2hvd01lc3NhZ2UoJ+S4i+WIgOaPkOS6pOWksei0pe+8jOivt+ajgOafpee9kee7nCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJtaXR0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNhbmNlbCgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUb29sTm8gPSAnJztcclxuICAgICAgICAgICAgICAgIHRoaXMudG9vbE5hbWUgPSAnJztcclxuICAgICAgICAgICAgICAgIHRoaXMudG9vbE1vZGVsID0gJyc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVzZUxpbWl0SW5wdXQgPSAnJztcclxuICAgICAgICAgICAgICAgIHRoaXMubGlmZVdhcm5JbnB1dCA9ICcnOyAvLyDmlrDlop7vvJrmuIXnqbpcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNEaXJ0eSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBhc3luYyBmZXRjaEZvcm1EYXRhKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLndvcmtPcmRlck5vIHx8ICF0aGlzLm1hY2hpbmVObykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2Fybign5bel5Y2V5Y+35oiW5py65Y+w5Y+35Li656m677yM6Lez6L+H6I635Y+W6KGo5Y2V5pWw5o2uJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nRm9ybSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHdvcmtPcmRlck5vOiB0aGlzLndvcmtPcmRlck5vLnRyaW0oKSxcclxuICAgICAgICAgICAgICAgICAgICBtYWNoaW5lTm86IHRoaXMubWFjaGluZU5vLnRyaW0oKVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy4kcG9zdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJy9NZXNDdXR0ZXJMZWRnZXIvR2V0Rm9ybURhdGEnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeShwYXlsb2FkKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzLnN0YXR1cyAhPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRzaG93TWVzc2FnZShyZXMubWVzc2FnZSB8fCAn6I635Y+W6KGo5Y2V5pWw5o2u5aSx6LSlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9vbFJlY29yZHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBsaXN0ID0gQXJyYXkuaXNBcnJheShyZXMuZGF0YSkgPyByZXMuZGF0YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IChyZXMuZGF0YSAmJiByZXMuZGF0YS50YkJpbGxMaXN0KSA/IHJlcy5kYXRhLnRiQmlsbExpc3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKHJlcy5kYXRhICYmIHJlcy5kYXRhLmRhdGEpID8gcmVzLmRhdGEuZGF0YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogW107XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGdldEZpZWxkID0gKG9iaiwgLi4ua2V5cykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGsgb2Yga2V5cykgaWYgKG9iaj8uW2tdICE9PSB1bmRlZmluZWQgJiYgb2JqPy5ba10gIT09IG51bGwpIHJldHVybiBvYmpba107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcHBlZCA9IChsaXN0IHx8IFtdKS5tYXAodCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwVGltZVJhdyA9IGdldEZpZWxkKHQsICd1UF9USU1FJywgJ1VQX1RJTUUnLCAndVBUaW1lJywgJ1VQVElNRScsICdVcFRpbWUnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZG93blRpbWVSYXcgPSBnZXRGaWVsZCh0LCAnZG93Tl9USU1FJywgJ0RPV05fVElNRScsICdkb3duVGltZScsICdET1dOVElNRScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaWZlV2FyblJhdyA9IGdldEZpZWxkKHQsICdsaWZFX1dBUk4nLCAnTElGRV9XQVJOJywgJ2xpZmVXYXJuJywgJ0xJRkVXQVJOJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDak51bSA9IGdldEZpZWxkKHQsICdjdXJyZW50Q2pOdW0nLCAnQ1VSUkVOVENKTlVNJywgJ0N1cnJlbnRDak51bScpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXNlQ291bnQgPSBnZXRGaWVsZCh0LCAndXNFX0NPVU5UJywgJ1VTRV9DT1VOVCcsICd1c2VDb3VudCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1c2VMaW1pdCA9IGdldEZpZWxkKHQsICd1c0VfTElNSVQnLCAnVVNFX0xJTUlUJywgJ3VzZUxpbWl0Jyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGVyY2VudCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXNlQ291bnQgIT0gbnVsbCAmJiB1c2VMaW1pdCAhPSBudWxsICYmICFpc05hTih1c2VDb3VudCkgJiYgIWlzTmFOKHVzZUxpbWl0KSAmJiBOdW1iZXIodXNlTGltaXQpID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyY2VudCA9ICgoTnVtYmVyKHVzZUNvdW50KSAvIE51bWJlcih1c2VMaW1pdCkpICogMTAwKS50b0ZpeGVkKDApICsgJyUnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJzZU51bWJlciA9IHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYgPT09IG51bGwgfHwgdiA9PT0gdW5kZWZpbmVkIHx8IHYgPT09ICcnKSByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHMgPSBTdHJpbmcodikucmVwbGFjZSgvWyzvvIUlXS9nLCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbiA9IHBhcnNlRmxvYXQocyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKG4pID8gbiA6IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdFBlcmNlbnQgPSBuID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID09PSBudWxsIHx8IG4gPT09IHVuZGVmaW5lZCB8fCBpc05hTihuKSkgcmV0dXJuICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPD0gMSkgcmV0dXJuIGAkeyhuICogMTAwKS50b0ZpeGVkKDApfSVgO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke051bWJlcihuKS50b0ZpeGVkKDApfSVgO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaWZlV2Fybk51bSA9IHBhcnNlTnVtYmVyKGxpZmVXYXJuUmF3KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB3YXJuU3RhdHVzID0gZ2V0RmllbGQodCwgJ3N0YXR1cycsICdTVEFUVVMnKSB8fCAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpZmVXYXJuTnVtICE9PSBudWxsICYmIHVzZUNvdW50ICE9IG51bGwgJiYgdXNlTGltaXQgIT0gbnVsbCAmJiAhaXNOYU4odXNlQ291bnQpICYmICFpc05hTih1c2VMaW1pdCkgJiYgTnVtYmVyKHVzZUxpbWl0KSA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBlcmNlbnROdW0gPSBOdW1iZXIodXNlQ291bnQpIC8gTnVtYmVyKHVzZUxpbWl0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5TdGF0dXMgPSAocGVyY2VudE51bSA+PSBsaWZlV2Fybk51bSkgPyAn6aKE6K2mJyA6ICfmraPluLgnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FyblN0YXR1cyA9IHdhcm5TdGF0dXMgfHwgJ+acquefpSc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogZ2V0RmllbGQodCwgJ2lkJywgJ0lEJykgfHwgYCR7Z2V0RmllbGQodCwgJ2N1dHRlUl9JRCcpIHx8IGdldEZpZWxkKHQsICdDVVRURVJfSUQnKSB8fCAnJ30tJHt1cFRpbWVSYXcgfHwgJyd9YCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vOiBnZXRGaWVsZCh0LCAnY3V0dGVSX0lEJywgJ0NVVFRFUl9JRCcsICdjdXR0ZXJJZCcsICdubycpIHx8ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogZ2V0RmllbGQodCwgJ2N1dHRlUl9OQU1FJywgJ0NVVFRFUl9OQU1FJywgJ2N1dHRlck5hbWUnLCAnbmFtZScpIHx8ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBUaW1lOiB0aGlzLmZvcm1hdERhdGVUaW1lKHVwVGltZVJhdyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cENvdW50OiBnZXRGaWVsZCh0LCAndVBfQ09VTlQnLCAnVVBfQ09VTlQnLCAndXBDb3VudCcpID8/ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG93blRpbWU6IHRoaXMuZm9ybWF0RGF0ZVRpbWUoZG93blRpbWVSYXcpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG93bkNvdW50OiBnZXRGaWVsZCh0LCAnZG93Tl9DT1VOVCcsICdET1dOX0NPVU5UJywgJ2Rvd25Db3VudCcpID8/ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlQ291bnQ6IHVzZUNvdW50ID8/ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlTGltaXQ6IHVzZUxpbWl0ID8/ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlmZVBlcmNlbnQ6IHBlcmNlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWZlV2FybjogZm9ybWF0UGVyY2VudChsaWZlV2Fybk51bSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuU3RhdHVzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudENqTnVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOaWsOWinu+8muaMieS4iuWIgOaXtumXtOmZjeW6j+aOkuW6j++8iOi2iuaZmueahOi2iuS4iumdou+8iVxyXG4gICAgICAgICAgICAgICAgICAgIG1hcHBlZC5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOaXtumXtOagvOW8j+WmgiBcIjEwLTI0IDE2OjAzXCLvvIzovazkuLogRGF0ZSDlr7nosaHmr5TovoNcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyc2UgPSBzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcykgcmV0dXJuIDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDooaXlubTku73vvIzlgYforr7pg73mmK/ku4rlubRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHllYXIgPSBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoYCR7eWVhcn0tJHtzLnJlcGxhY2UoLy0vZywgJy0nKX06MDBgKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZShiLnVwVGltZSkgLSBwYXJzZShhLnVwVGltZSk7IC8vIOazqOaEj+i/memHjOmhuuW6j+WPjei/h+adpVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvb2xSZWNvcmRzID0gbWFwcGVkO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRvdGFsRnJvbVJlcyA9IE51bWJlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmRhdGE/LnRvdGFsID8/IHJlcy5kYXRhPy50b3RhbENvdW50ID8/IHJlcy50b3RhbCA/PyByZXMudG90YWxDb3VudCA/PyBtYXBwZWQubGVuZ3RoXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvdGFsID0gTnVtYmVyLmlzRmluaXRlKHRvdGFsRnJvbVJlcykgPyB0b3RhbEZyb21SZXMgOiBtYXBwZWQubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCfojrflj5booajljZXmlbDmja7plJnor686JywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJHNob3dNZXNzYWdlKCfojrflj5bmlbDmja7lpLHotKXvvIzor7fmo4Dmn6XnvZHnu5zov57mjqUnKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvb2xSZWNvcmRzID0gW107XHJcbiAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZ0Zvcm0gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgLy8g6Ieq5Yqo5bim5Ye65bel5Y2V5YiA5YW35L+h5oGv77yM5bm26I635Y+W5bel5Y2V5pyA5paw6YeH6ZuG5pWwXHJcbiAgICAgICAgICAgIGFzeW5jIGZldGNoRGVmYXVsdFRvb2xGcm9tV29ya09yZGVyKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm1hY2hpbmVObykgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLiRwb3N0KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnL1dvbWRhYS9HZXRXb21kYWFzQnlTaG93JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoeyBtYWNoaW5lTm86IHRoaXMubWFjaGluZU5vIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXMuc3RhdHVzID09PSAwICYmIEFycmF5LmlzQXJyYXkocmVzLmRhdGE/LnRiQmlsbExpc3QpICYmIHJlcy5kYXRhLnRiQmlsbExpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcmRlciA9IHJlcy5kYXRhLnRiQmlsbExpc3RbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDmlrDlop7vvJrkv53lrZjlt6XljZXmlbDmja7vvIznlKjkuo7miqXor5XkuqfmlbBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcmRlciA9IG9yZGVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9yZGVySWQgPSBvcmRlci5pZCB8fCBvcmRlci5JRCB8fCBvcmRlci5vcmRlcklkIHx8IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVG9vbE5vID0gb3JkZXIuY3V0dGVySWQgfHwgb3JkZXIuY3V0dGVSX0lEIHx8ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvb2xOYW1lID0gb3JkZXIuY3V0dGVyTmFtZSB8fCBvcmRlci5jdXR0ZVJfTkFNRSB8fCAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b29sTW9kZWwgPSBvcmRlci5jdXR0ZXJNb2RlbCB8fCBvcmRlci5jdXR0ZVJfTU9ERUwgfHwgJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOWFs+mUru+8muiOt+WPluW3peWNleacgOaWsOmHh+mbhuaVsFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndvcmtPcmRlckN1cnJlbnRDak51bSA9IG9yZGVyLkN1cnJlbnRDak51bSA/PyBvcmRlci5jdXJyZW50Q2pOdW0gPz8gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g5paw5aKe77ya6Ieq5Yqo5aGr5YWF5a+/5ZG95q+U6aKE6K2m5YC8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcmRlci5tb2RsTGlmZVdvcm5pbmcgIT09IHVuZGVmaW5lZCAmJiBvcmRlci5tb2RsTGlmZVdvcm5pbmcgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdhcm4gPSBOdW1iZXIob3JkZXIubW9kbExpZmVXb3JuaW5nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGlmZVdhcm5JbnB1dCA9IHdhcm4gPD0gMSA/ICh3YXJuICogMTAwKS50b0ZpeGVkKDApIDogd2Fybi50b0ZpeGVkKDApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5saWZlV2FybklucHV0ID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndvcmtPcmRlckN1cnJlbnRDak51bSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3JkZXIgPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcmRlcklkID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCfoh6rliqjluKblh7rlt6XljZXliIDlhbflpLHotKUnLCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLndvcmtPcmRlckN1cnJlbnRDak51bSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcmRlciA9IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3JkZXJJZCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGZvcm1hdERhdGVUaW1lKGRhdGVUaW1lU3RyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWRhdGVUaW1lU3RyKSByZXR1cm4gJyc7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHMgPSBTdHJpbmcoZGF0ZVRpbWVTdHIpLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoL15cXGR7MTB9JC8udGVzdChzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkID0gbmV3IERhdGUoTnVtYmVyKHMpICogMTAwMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtkLmdldE1vbnRoKCkgKyAxfS0ke2QuZ2V0RGF0ZSgpfSAke2QuZ2V0SG91cnMoKX06JHtTdHJpbmcoZC5nZXRNaW51dGVzKCkpLnBhZFN0YXJ0KDIsICcwJyl9YDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKC9eXFxkezEzfSQvLnRlc3QocykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZCA9IG5ldyBEYXRlKE51bWJlcihzKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtkLmdldE1vbnRoKCkgKyAxfS0ke2QuZ2V0RGF0ZSgpfSAke2QuZ2V0SG91cnMoKX06JHtTdHJpbmcoZC5nZXRNaW51dGVzKCkpLnBhZFN0YXJ0KDIsICcwJyl9YDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGRhdGVUaW1lU3RyKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7ZGF0ZS5nZXRNb250aCgpICsgMX0tJHtkYXRlLmdldERhdGUoKX0gJHtkYXRlLmdldEhvdXJzKCl9OiR7U3RyaW5nKGRhdGUuZ2V0TWludXRlcygpKS5wYWRTdGFydCgyLCAnMCcpfWA7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gU3RyaW5nKGRhdGVUaW1lU3RyKS5tYXRjaCgvKFxcZHsxLDR9Wy1cXC9dXFxkezEsMn1bLVxcL11cXGR7MSwyfSkuKj8oXFxkezEsMn06XFxkezJ9KS8pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaCkgcmV0dXJuIGAke21hdGNoWzFdLnJlcGxhY2UoLy0vZywgJy8nKS5yZXBsYWNlKC9eXFxkezR9XFwvLywgKG0pID0+IG0pfSAke21hdGNoWzJdfWA7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhkYXRlVGltZVN0cik7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGRhdGVUaW1lU3RyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIOaWsOWinu+8mumAieaLqeiwg+acuuW4iOWChVxyXG4gICAgICAgICAgICBzZWxlY3RUaWFvamlVc2VyKHUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudGlhb2ppU3RhZmZObyA9IHU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzVGlhb2ppVXNlclNlbGVjdFNob3cgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMudGlhb2ppVXNlclNlYXJjaCA9ICcnO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8g5paw5aKe77ya6YCB5qOA5ZG85Y+rICsg5oql6K+V5Lqn5pWwXHJcbiAgICAgICAgICAgIGFzeW5jIGhhbmRsZUluc3BlY3Rpb25DYWxsKCkge1xyXG4gICAgICAgICAgICAgICAgLy8g6aqM6K+B5b+F5aGr6aG5XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMudGlhb2ppU3RhZmZObykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJHNob3dNZXNzYWdlKCfor7fpgInmi6nosIPmnLrluIjlgoUnKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9rUXR5ID0gTnVtYmVyKHRoaXMudGlhb2ppT2tRdHkpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYmFkUXR5ID0gTnVtYmVyKHRoaXMudGlhb2ppQmFkUXR5KTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgaWYgKGlzTmFOKG9rUXR5KSB8fCBva1F0eSA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiRzaG93TWVzc2FnZSgn6K+36L6T5YWl5pyJ5pWI55qE6LCD5py66Imv5ZOB5pWwJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBpZiAoaXNOYU4oYmFkUXR5KSB8fCBiYWRRdHkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kc2hvd01lc3NhZ2UoJ+ivt+i+k+WFpeacieaViOeahOiwg+acuuS4jeiJr+WTgeaVsCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhZmZObyA9IHRoaXMudGlhb2ppU3RhZmZOby5zcGxpdCgnOicpWzBdO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudENqTnVtID0gdGhpcy5vcmRlcj8uY3VycmVudENqTnVtIHx8IDA7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vIOiwg+eUqOaKpeivleS6p+aVsOaOpeWPoyjkvb/nlKjmiqXlt6XnlYzpnaLnmoTmjqXlj6MpXHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIG9yZGVyTm86IHRoaXMud29ya09yZGVyTm8sXHJcbiAgICAgICAgICAgICAgICAgICAgb3JkZXJJZDogdGhpcy5vcmRlcklkLCAvLyDpnIDopoHku47lt6XljZXmlbDmja7kuK3ojrflj5ZcclxuICAgICAgICAgICAgICAgICAgICBiZjogYmFkUXR5LCAvLyBiZuS8oOmAkuS4jeiJr+WTgeaVsFxyXG4gICAgICAgICAgICAgICAgICAgIHN0YWZmTm86IHN0YWZmTm8sXHJcbiAgICAgICAgICAgICAgICAgICAgaW5pdENqTnVtOiBjdXJyZW50Q2pOdW0gLSBiYWRRdHkgLSBva1F0eSwgLy8gaW5pdENqTnVtID0gY3VycmVudENqTnVtIC0gYmYgLSDoia/lk4HmlbBcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q2pOdW06IGN1cnJlbnRDak51bSxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAndGlhb2ppJywgLy8g5qCH6K+G5Li66LCD5py65oql5belXHJcbiAgICAgICAgICAgICAgICAgICAgdGlhb2ppT2tRdHk6IG9rUXR5LCAvLyDmlrDlop466Imv5ZOB5pWwXHJcbiAgICAgICAgICAgICAgICAgICAgdGlhb2ppQmFkUXR5OiBiYWRRdHkgLy8g5paw5aKeOuS4jeiJr+WTgeaVsFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Ym1pdHRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIOiwg+eUqOaKpeW3peeVjOmdoueahOaKpeivleS6p+aVsOaOpeWPo1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuJHBvc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICcvTWVzSW52SXRlbUJhcmNvZGVzL0FkZEJGVG9CYXJjb2RlcycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHBheWxvYWRcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzLnN0YXR1cyA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJHNob3dNZXNzYWdlKHJlcy5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiRzaG93TWVzc2FnZSgn6LCD5py65oql5bel5oiQ5YqfJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5riF56m66L6T5YWlXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50aWFvamlPa1F0eSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGlhb2ppQmFkUXR5ID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5Yi35paw5pWw5o2uXHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5mZXRjaEZvcm1EYXRhKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5mZXRjaERlZmF1bHRUb29sRnJvbVdvcmtPcmRlcigpO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcign6LCD5py65oql5bel6ZSZ6K+vOicsIGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kc2hvd01lc3NhZ2UoJ+iwg+acuuaKpeW3peWksei0pe+8jOivt+ajgOafpee9kee7nCcpO1xyXG4gICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Ym1pdHRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIOaWsOWinu+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");
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 */