jt
2023-02-09 d9d1b4332986fae66a00ef1f309d50560588920c
unpackage/dist/dev/app-plus/app-service.js
@@ -2051,7 +2051,7 @@
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("/* WEBPACK VAR INJECTION */(function(__f__) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n// import {\n// \tmapState,\n// \tmapMutations,\n// \tmapActions ,\n// } from 'vuex'\nvar _default = {\n  data: function data() {\n    //获取全局参数:url-服务器地址\n    var server = uni.getStorageSync('server');\n    var account = uni.getStorageSync('account');\n    var password = uni.getStorageSync('password');\n    var url = this.$store.state.url;\n    var username = this.$store.state.username;\n    var userpwd = this.$store.state.userpwd;\n    var ischecked = false;\n    if (!server) server = url;\n    if (!account) account = username;\n    if (account && password) ischecked = true;\n    // console.log(url);\n    return {\n      login: \"开始登录\",\n      userServer: server,\n      userName: account,\n      userPwd: password,\n      ischecked: ischecked,\n      version: \"1.0.0\"\n    };\n  },\n  // computed: mapState({\n  // \t// 从state中拿到数据 箭头函数可使代码更简练\n  // \thasLogin: state => state.hasLogin,\n  // \tloginprovider: state => state.loginProvider,\n  // \tappinfo:state=>state.appInfo\n  // }),\n  methods: {\n    // ...mapMutations({\n    // \tmutatLogin:'login'\n    // }),\n    // ...mapActions({\n    // \tactionLogin:'login'\n    // }),\n    inputDialogToggle: function inputDialogToggle() {\n      this.$refs.inputDialog.open();\n    },\n    dialogInputConfirm: function dialogInputConfirm(val) {\n      // console.log(val);\n      // uni.showLoading({\n      // \ttitle: '3秒后会关闭'\n      // })\n      // setTimeout(() => {\n      // uni.hideLoading();\n      this.userServer = val;\n      uni.setStorageSync('server', val);\n      // this.value = val\n      // 关闭窗口后,恢复默认内容\n      this.$refs.inputDialog.close();\n      // }, 3000)\n    },\n    rememberPwd: function rememberPwd(e) {\n      //记住密码\n      __f__(\"log\", e.target, \" at pages/login/index.vue:231\");\n      uni.setStorageSync('account', '');\n      uni.setStorageSync('password', '');\n      if (e.target.value[0] == '1') {\n        uni.setStorageSync('account', this.userName);\n        uni.setStorageSync('password', this.userPwd);\n      }\n    },\n    // getCookie(key){\n    // \tif(document.cookie.length>0){\n    // \t\tvar start = document.cookie.indexOf(key +'=');\n    // \t\tif(start !== -1){\n    // \t\t\tstart = start+key.length+1;\n    // \t\t\tvar end = document.cookie.indexOf(';',start);\n    // \t\t\tif(end === -1) end=document.cookie.length;\n    // \t\t\treturn document.cookie.substring(start,end);\n    // \t\t}\n    // \t}\n    // \treturn '';\n    // },\n    // setCookie(cName,value,expiredays){\n    // \tvar exdate = new Date();\n    // \texdate.setDate(exdate.getDate(),expiredays)\n    // \tdocument.cookie = cName+'='+ documentURLComponent(value)+\n    // \t((expiredays==null)?'':';expires='+exdate.toGMTString());\n    // },\n    logind: function logind() {\n      var _this = this;\n      if (!this.userServer) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"未输入网站地址,请重新配置输入!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      if (!this.userName) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"未输入用户名,请重新输入!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      if (!this.userPwd) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"未输入密码,请重新输入!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      //检查 \"登录状态/锁屏状态\" 结束\n      var loginInfo = {\n        server: this.userServer,\n        uname: this.userName,\n        pwd: this.userPwd,\n        cname: plus.device.model,\n        type: \"0\"\n      };\n      __f__(\"log\", loginInfo, \" at pages/login/index.vue:279\");\n      this.$data.login = \"loading......\";\n      //登录\n      this.$store.dispatch('login', loginInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/login/index.vue:284\");\n        if (success.code == '00000') {\n          //设置全局参数:user-用户信息\n          uni.setStorageSync('server', loginInfo.server);\n          // uni.setStorageSync('account',loginInfo.uname);\n          // uni.setStorageSync('password',loginInfo.pwd);\n          // this.mutatLogin({loginid:success});\n          _this.$store.commit('login', {\n            loginid: success\n          });\n          uni.navigateTo({\n            url: '../index/index?args=9999999999'\n          });\n          // uni.redirectTo({\n          // \turl:'../index/index?args=9999999999'\n          // });\n          _this.login = \"开始登录\";\n        } else {\n          uni.showModal({\n            title: \"错误\",\n            content: success.msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n          _this.login = \"开始登录\";\n        }\n      }).catch(function (ex) {\n        __f__(\"log\", ex, \" at pages/login/index.vue:306\");\n        uni.showModal({\n          title: \"错误\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        _this.login = \"开始登录\";\n      });\n    }\n  },\n  onLoad: function onLoad() {\n    var _this2 = this;\n    plus.runtime.getProperty(plus.runtime.appid, function (info) {\n      // console.log(info);\n      _this2.$data.version = info.version;\n    });\n  }\n};\nexports.default = _default;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 18)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vcGFnZXMvbG9naW4vaW5kZXgudnVlIl0sIm5hbWVzIjpbImRhdGEiLCJzZXJ2ZXIiLCJhY2NvdW50IiwiaXNjaGVja2VkIiwibG9naW4iLCJ1c2VyU2VydmVyIiwidXNlck5hbWUiLCJ1c2VyUHdkIiwidmVyc2lvbiIsIm1ldGhvZHMiLCJpbnB1dERpYWxvZ1RvZ2dsZSIsImRpYWxvZ0lucHV0Q29uZmlybSIsInVuaSIsInJlbWVtYmVyUHdkIiwibG9naW5kIiwidGl0bGUiLCJjb250ZW50Iiwic2hvd0NhbmNlbCIsImNvbmZpcm1UZXh0IiwidW5hbWUiLCJwd2QiLCJjbmFtZSIsInR5cGUiLCJsb2dpbmlkIiwidXJsIiwib25Mb2FkIiwicGx1cyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF3S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBLGVBQ0E7RUFDQUE7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0EsYUFDQUM7SUFDQSxjQUNBQztJQUNBLHlCQUNBQztJQUNBO0lBQ0E7TUFDQUM7TUFDQUM7TUFDQUM7TUFDQUM7TUFDQUo7TUFDQUs7SUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0FDO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0FDO01BQ0E7SUFDQTtJQUNBQztNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0FDO01BQ0E7TUFDQTtNQUNBO01BQ0E7SUFDQTtJQUNBQztNQUFBO01BQ0E7TUFDQUQ7TUFDQUE7TUFDQTtRQUNBQTtRQUNBQTtNQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBRUE7SUFDQUU7TUFBQTtNQUNBO1FBQ0FGO1VBQUFHO1VBQUFDO1VBQUFDO1VBQUFDO1FBQUE7UUFDQTtNQUNBO01BQ0E7UUFDQU47VUFBQUc7VUFBQUM7VUFBQUM7VUFBQUM7UUFBQTtRQUNBO01BQ0E7TUFDQTtRQUNBTjtVQUFBRztVQUFBQztVQUFBQztVQUFBQztRQUFBO1FBQ0E7TUFDQTtNQUNBO01BQ0E7UUFDQWpCO1FBQ0FrQjtRQUNBQztRQUNBQztRQUNBQztNQUNBO01BQ0E7TUFFQTtNQUNBO01BQ0E7UUFDQTtRQUNBO1VBQ0E7VUFDQVY7VUFDQTtVQUNBO1VBQ0E7VUFDQTtZQUNBVztVQUNBO1VBQ0FYO1lBQ0FZO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtRQUNBO1VBQ0FaO1lBQUFHO1lBQUFDO1lBQUFDO1lBQUFDO1VBQUE7VUFDQTtRQUNBO01BQ0E7UUFDQTtRQUNBTjtVQUFBRztVQUFBQztVQUFBQztVQUFBQztRQUFBO1FBQ0E7TUFDQTtJQUNBO0VBQ0E7RUFDQU87SUFBQTtJQUNBQztNQUNBO01BQ0E7SUFDQTtFQUNBO0FBQ0E7QUFBQSwyQiIsImZpbGUiOiI1MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIlxyXG48c3R5bGU+XHJcblx0aW5wdXQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xyXG5cdFx0Zm9udC1zaXplOiAxMnJweDtcclxuXHR9XHJcblx0I2hlYWRyIHtcclxuXHRcdGJhY2tncm91bmQ6ICM0MzQzNDM7XHJcblx0XHQvKiB3aWR0aDogMzc1cHg7ICovXHJcblx0XHRoZWlnaHQ6IDI1MHJweDtcclxuXHRcdHRleHQtYWxpZ246IGNlbnRlcjtcclxuXHRcdGJhY2tncm91bmQtY29sb3I6ICM0MzhFQjk7XHJcblx0XHQvKiBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vLi4vaW1hZ2VzL2xvZ2luL3Jvb3QucG5nKSAhaW1wb3J0YW50O1xyXG5cdFx0YmFja2dyb3VuZC1zaXplOiBjb3ZlciAhaW1wb3J0YW50OyBcclxuXHRcdGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQgIWltcG9ydGFudDsgKi9cclxuXHR9XHJcblx0LlNldFNlcnZlcnsgICAgXHJcblx0XHRmbG9hdDogbGVmdDtcclxuXHRcdG1hcmdpbi1sZWZ0OiAyMHJweDtcclxuXHR9XHJcblx0LmNoZWNrX3JlbWVtYmVyUHdke1xyXG5cdFx0bWFyZ2luLXRvcDogMjBycHg7XHJcblx0XHRtYXJnaW4tbGVmdDogMjBycHg7XHJcblx0fVxyXG5cdC5sb2dvIHtcclxuXHRcdGhlaWdodDogMTgwcnB4O1xyXG5cdFx0d2lkdGg6IDE4MHJweDsgXHJcblx0XHRtYXJnaW4tdG9wOiAxNzBycHg7XHJcblx0fVxyXG5cdC5sb2dvX2lucHV0IHtcclxuXHRcdGhlaWdodDogNDBycHg7XHJcblx0XHR3aWR0aDogNDBycHg7XHJcblx0XHRtYXJnaW4tbGVmdDogNDBycHg7XHJcblx0fVxyXG5cdC5sb2dvX2ljb24ge1xyXG5cdFx0aGVpZ2h0OiA1MHJweDtcclxuXHRcdHdpZHRoOiA1MHJweDtcclxuXHRcdG1hcmdpbi1sZWZ0OiAxNXJweDtcclxuXHRcdG1hcmdpbi10b3A6IDIwcnB4O1xyXG5cdH1cclxuXHQubXVpLWNvbnRlbnR7XHJcblx0XHRoZWlnaHQ6IDEwMCU7XHJcblx0XHRwYWRkaW5nLXRvcDogMTQwcnB4O1xyXG5cdFx0YmFja2dyb3VuZDogI0ZGRkZGRjtcclxuXHRcdHotaW5kZXg6IDE7XHJcblx0fVxyXG5cdC5tdWktaW5wdXQtZ3JvdXAgLmxhX2ljb24ge1xyXG5cdCAgICB3aWR0aDogMTAwcnB4O1xyXG5cdCAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcblx0ICAgIGZvbnQtZmFtaWx5OiAnSGVsdmV0aWNhIE5ldWUnLEhlbHZldGljYSxzYW5zLXNlcmlmO1xyXG5cdCAgICBsaW5lLWhlaWdodDogMS41O1xyXG5cdCAgICBmbG9hdDogbGVmdDtcclxuXHQgICAgcGFkZGluZzogN3B4IDEzcHg7XHJcblx0fVxyXG5cdC5tdWktaW5wdXQtZ3JvdXAgLm11aS1pbnB1dC1yb3cge1xyXG5cdCAgICBoZWlnaHQ6IDg1cnB4O1xyXG5cdFx0cG9zaXRpb246IHJlbGF0aXZlO1xyXG5cdFx0Y2xlYXI6IGxlZnQ7XHJcblx0XHRvdmVyZmxvdzogaGlkZGVuO1xyXG5cdH1cclxuXHQubXVpLWlucHV0LXJvdzpmaXJzdC1jaGlsZCB7XHJcblx0XHRib3JkZXItdG9wOiAxcHggc29saWQgI2M4YzdjYztcclxuXHR9XHJcblx0Lm11aS1pbnB1dC1yb3c6bGFzdC1jaGlsZCB7XHJcblx0XHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI2M4YzdjYztcclxuXHR9XHJcblx0Lm11aS1pbnB1dC1ncm91cCAubXVpLWlucHV0LXJvdzpsYXN0LWNoaWxkOmFmdGVyIHtcclxuXHRcdGJhY2tncm91bmQtY29sb3I6I2ZmZjtcclxuXHR9XHJcblx0Lm11aS1pbnB1dC1ncm91cCAubXVpLWlucHV0LXJvdzphZnRlciB7XHJcblx0ICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuXHQgICAgcmlnaHQ6IDA7XHJcblx0ICAgIGJvdHRvbTogMDtcclxuXHQgICAgbGVmdDogMTVweDtcclxuXHQgICAgaGVpZ2h0OiAxcHg7XHJcblx0ICAgIGNvbnRlbnQ6ICcnO1xyXG5cdCAgICB0cmFuc2Zvcm06IHNjYWxlWSguNSk7XHJcblx0ICAgIGJhY2tncm91bmQtY29sb3I6ICNjOGM3Y2M7XHJcblx0fVxyXG5cdC5tdWktaW5wdXQtcm93IGlucHV0IHtcclxuXHRcdGZvbnQtZmFtaWx5OiAnSGVsdmV0aWNhIE5ldWUnLEhlbHZldGljYSxzYW5zLXNlcmlmO1xyXG5cdFx0Zm9udC1zaXplOiAxNXB4O1xyXG5cdFx0d2lkdGg6IDQ4MHJweDtcclxuXHRcdC8qIGZsb2F0OiByaWdodDsgKi9cclxuXHRcdG1hcmdpbi1ib3R0b206IDA7XHJcblx0XHRwYWRkaW5nLWxlZnQ6IDIwcnB4O1xyXG5cdFx0LyogcGFkZGluZy1yaWdodDogMTBycHg7ICovXHJcblx0XHQvKiBsaW5lLWhlaWdodDogMzBycHg7ICovXHJcblx0XHRoZWlnaHQ6IDg1cnB4O1xyXG5cdFx0LyogcGFkZGluZzogN3B4IDQwcHggN3B4IDBweDsgKi9cclxuXHRcdC13ZWJraXQtdXNlci1zZWxlY3Q6IHRleHQ7XHJcblx0XHQvKiBib3JkZXI6IDA7ICovXHJcblx0XHQvKiBib3JkZXItcmFkaXVzOiAwOyAqL1xyXG5cdFx0Ym94LXNoYWRvdzogbm9uZTtcclxuXHRcdG91dGxpbmU6IDA7XHJcblx0XHRiYWNrZ3JvdW5kOiAwIDA7XHJcblx0XHQtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XHJcblx0fVxyXG5cdFxyXG5cdC5tdWktaW5wdXQtZ3JvdXAgbGFiZWwubXVpLW5hdmlnYXRlLXJpZ2h0IHtcclxuXHRcdGZvbnQtc2l6ZTogMjVweDtcclxuXHRcdGZsb2F0OiByaWdodDtcclxuXHRcdHBhZGRpbmc6IDA7XHJcblx0XHR3aWR0aDogODBycHg7XHJcblx0XHRtYXJnaW4tcmlnaHQ6IDVycHg7XHJcblx0XHRtYXJnaW4tdG9wOiAtODhycHg7XHJcblx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0fVxyXG5cdFxyXG5cdGJ1dHRvbi5idG5fbG9naW4ge1xyXG5cdFx0bWFyZ2luLXRvcDogNTBycHg7XHJcblx0XHRwYWRkaW5nOiAyMHJweDtcclxuXHRcdGxpbmUtaGVpZ2h0OiAxLjU7XHJcblx0XHRiYWNrZ3JvdW5kOiAjMjdBNkUxO1xyXG5cdFx0Ym9yZGVyOiBub25lO1xyXG5cdFx0Y29sb3I6ICNmZmY7XHJcblx0fVxyXG48L3N0eWxlPlxyXG4gXHJcblxyXG48dGVtcGxhdGU+XHJcblx0PHZpZXcgY2xhc3M9XCJcIiBzdHlsZT1cIndpZHRoOiAxMDB2dztoZWlnaHQ6IDY0dmg7XCI+XHJcblx0XHQ8ZGl2IGlkPVwiaGVhZHJcIiBjbGFzcz1cIm11aS1iYXIgbXVpLWJhci1uYXZcIj5cclxuXHRcdFx0PGltYWdlIGNsYXNzPVwibG9nb1wiIHNyYz1cIi4uLy4uL2ltYWdlcy9sb2dpbi9tb2JveF9sb2dfMjAwLnBuZ1wiPjwvaW1hZ2U+XHJcblx0XHQ8L2Rpdj5cclxuXHRcdDxkaXYgY2xhc3M9XCJtdWktY29udGVudFwiPlxyXG5cdFx0XHQ8Zm9ybSBpZD0nbG9naW4tZm9ybScgY2xhc3M9XCJtdWktaW5wdXQtZ3JvdXBcIj5cclxuXHRcdFx0XHQ8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgY2xhc3M9XCJTZXRTZXJ2ZXJcIiBAY2xpY2s9XCJpbnB1dERpYWxvZ1RvZ2dsZVwiPumFjee9rjwvYT5cclxuXHRcdFx0XHQ8IS0tIDxkaXYgY2xhc3M9XCJtdWktaW5wdXQtcm93XCI+XHJcblx0XHRcdFx0XHQ8bGFiZWwgY2xhc3M9XCJsYV9pY29uXCI+PGltYWdlIGNsYXNzPVwibG9nb19pbnB1dFwiIHNyYz1cIi4uLy4uL2ltYWdlcy9sb2dpbi9zdnJfMzAucG5nXCI+PC9pbWFnZT48L2xhYmVsPlxyXG5cdFx0XHRcdFx0PGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJtdWktaW5wdXRcIiB2LW1vZGVsPVwidXNlclNlcnZlclwiIHBsYWNlaG9sZGVyPVwi5pyN5Yqh5Zmo5Zyw5Z2AXCI+XHJcblx0XHRcdFx0XHQ8bGFiZWwgY2xhc3M9XCJtdWktbmF2aWdhdGUtcmlnaHRcIiBpZD1cInNlcnNlbFwiPjxpbWFnZSBjbGFzcz1cImxvZ29faWNvblwiIHNyYz1cIi4uLy4uL2ltYWdlcy9sb2dpbi9zZWxfbGVmdC5wbmdcIiA+PC9pbWFnZT48L2xhYmVsPlxyXG5cdFx0XHRcdDwvZGl2PiAtLT5cclxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwibXVpLWlucHV0LXJvd1wiPlxyXG5cdFx0XHRcdFx0PGxhYmVsIGNsYXNzPVwibGFfaWNvblwiID48aW1hZ2UgY2xhc3M9XCJsb2dvX2lucHV0XCIgc3JjPVwiLi4vLi4vaW1hZ2VzL2xvZ2luL3BlcnNvbl8zMC5wbmdcIj48L2ltYWdlPjwvbGFiZWw+XHJcblx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cIm11aS1pbnB1dFwiIHYtbW9kZWw9XCJ1c2VyTmFtZVwiIHBsYWNlaG9sZGVyPVwi6K+36L6T5YWl6LSm5Y+3XCI+XHJcblx0XHRcdFx0XHQ8IS0tIDxsYWJlbCBjbGFzcz1cIm11aS1uYXZpZ2F0ZS1yaWdodFwiIGlkPVwibmFtc2VsXCI+PGltYWdlIGNsYXNzPVwibG9nb19pY29uXCIgc3JjPVwiLi4vLi4vaW1hZ2VzL2xvZ2luL3VzZXItcGhvdG8ucG5nPC9pbWFnZT48L2xhYmVsPiAtLT5cclxuXHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwibXVpLWlucHV0LXJvd1wiPlxyXG5cdFx0XHRcdFx0PGxhYmVsIGNsYXNzPVwibGFfaWNvblwiID48aW1hZ2UgY2xhc3M9XCJsb2dvX2lucHV0XCIgc3JjPVwiLi4vLi4vaW1hZ2VzL2xvZ2luL2xvY2tfMzAucG5nXCI+PC9pbWFnZT48L2xhYmVsPlxyXG5cdFx0XHRcdFx0PGlucHV0IHR5cGU9XCJwYXNzd29yZFwiIGNsYXNzPVwibXVpLWlucHV0XCIgdi1tb2RlbD1cInVzZXJQd2RcIiBwbGFjZWhvbGRlcj1cIuivt+i+k+WFpeWvhueggVwiPlxyXG5cdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdDxjaGVja2JveC1ncm91cCBjbGFzcz1cImNoZWNrX3JlbWVtYmVyUHdkXCIgQGNoYW5nZT1cInJlbWVtYmVyUHdkXCI+XHJcblx0XHRcdFx0XHQ8bGFiZWw+XHJcblx0XHRcdFx0XHRcdDxjaGVja2JveCB2YWx1ZT1cIjFcIiA6Y2hlY2tlZD1cImlzY2hlY2tlZFwiLz5cclxuXHRcdFx0XHRcdFx0PHRleHQ+6K6w5L2P5a+G56CBPC90ZXh0PlxyXG5cdFx0XHRcdFx0PC9sYWJlbD5cclxuXHRcdFx0XHQ8L2NoZWNrYm94LWdyb3VwPlxyXG5cdFx0XHQ8L2Zvcm0+XHJcblx0XHRcdDxidXR0b24gaWQ9J2xvZ2luJyB0eXBlPVwiZGVmYXVsdFwiIEB0YXA9XCJsb2dpbmRcIiBjbGFzcz1cImJ0bl9sb2dpblwiPnt7bG9naW59fTwvYnV0dG9uPlxyXG5cdFx0XHQ8cCBzdHlsZT1cImZsb2F0OnJpZ2h0OyBtYXJnaW46IDEwcHggMTBweDtjb2xvcjojYzhjN2NjXCI+XHJcblx0XHRcdFx0PHNwYW4+54mI5pys5Y+377yaPC9zcGFuPlxyXG5cdFx0XHRcdDxzcGFuPnt7dmVyc2lvbn19PC9zcGFuPlxyXG5cdFx0XHQ8L3A+XHJcblx0XHRcdDxkaXYgY2xhc3M9XCJcIiBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjtiYWNrZ3JvdW5kOiB3aGl0ZTtib3JkZXItdG9wOiAwcHggc29saWQgI0MwQzBDMDtjb2xvcjogIzdjZDBmODtwb3NpdGlvbjogYWJzb2x1dGU7Ym90dG9tOiAwO3dpZHRoOiAxMDAlO2hlaWdodDogMjRweDtwYWRkaW5nLXRvcDozcHg7Zm9udC1zaXplOiAxMXB4O1wiPlxyXG5cdFx0XHQ8L2Rpdj5cclxuXHRcdDwvZGl2PlxyXG5cdFx0PHZpZXc+XHJcblx0XHRcdDwhLS0g6L6T5YWl5qGG56S65L6LIC0tPlxyXG5cdFx0XHQ8dW5pLXBvcHVwIHJlZj1cImlucHV0RGlhbG9nXCIgdHlwZT1cImRpYWxvZ1wiPlxyXG5cdFx0XHRcdDx1bmktcG9wdXAtZGlhbG9nIHJlZj1cImlucHV0Q2xvc2VcIiAgbW9kZT1cImlucHV0XCIgdGl0bGU9XCLorr7nva5cIiA6dmFsdWU9XCJ1c2VyU2VydmVyXCJcclxuXHRcdFx0XHRcdHBsYWNlaG9sZGVyPVwi6K+36L6T5YWl5YaF5a65XCIgQGNvbmZpcm09XCJkaWFsb2dJbnB1dENvbmZpcm1cIj48L3VuaS1wb3B1cC1kaWFsb2c+XHJcblx0XHRcdDwvdW5pLXBvcHVwPlxyXG5cdFx0PC92aWV3PlxyXG5cdDwvdmlldz5cclxuXHQgXHJcbjwvdGVtcGxhdGU+XHJcblxyXG48c2NyaXB0PiBcclxuXHQvLyBpbXBvcnQge1xyXG5cdC8vIFx0bWFwU3RhdGUsXHJcblx0Ly8gXHRtYXBNdXRhdGlvbnMsXHJcblx0Ly8gXHRtYXBBY3Rpb25zICxcclxuXHQvLyB9IGZyb20gJ3Z1ZXgnXHJcblx0ZXhwb3J0IGRlZmF1bHQge1xyXG5cdFx0ZGF0YSgpe1xyXG5cdFx0XHQvL+iOt+WPluWFqOWxgOWPguaVsO+8mnVybC3mnI3liqHlmajlnLDlnYBcclxuXHRcdFx0dmFyIHNlcnZlciA9IHVuaS5nZXRTdG9yYWdlU3luYygnc2VydmVyJyk7XHJcblx0XHRcdHZhciBhY2NvdW50ID0gdW5pLmdldFN0b3JhZ2VTeW5jKCdhY2NvdW50Jyk7XHJcblx0XHRcdHZhciBwYXNzd29yZCA9IHVuaS5nZXRTdG9yYWdlU3luYygncGFzc3dvcmQnKTtcclxuXHRcdFx0dmFyIHVybCA9IHRoaXMuJHN0b3JlLnN0YXRlLnVybDtcclxuXHRcdFx0dmFyIHVzZXJuYW1lID0gdGhpcy4kc3RvcmUuc3RhdGUudXNlcm5hbWU7XHJcblx0XHRcdHZhciB1c2VycHdkID0gdGhpcy4kc3RvcmUuc3RhdGUudXNlcnB3ZDtcclxuXHRcdFx0dmFyIGlzY2hlY2tlZD1mYWxzZTtcclxuXHRcdFx0aWYoIXNlcnZlcilcclxuXHRcdFx0XHRzZXJ2ZXIgPSB1cmw7XHJcblx0XHRcdGlmKCFhY2NvdW50KVxyXG5cdFx0XHRcdGFjY291bnQgPSB1c2VybmFtZTtcclxuXHRcdFx0aWYoYWNjb3VudCAmJiBwYXNzd29yZClcclxuXHRcdFx0XHRpc2NoZWNrZWQ9dHJ1ZTtcclxuXHRcdFx0Ly8gY29uc29sZS5sb2codXJsKTtcclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRsb2dpbjpcIuW8gOWni+eZu+W9lVwiLFxyXG5cdFx0XHRcdHVzZXJTZXJ2ZXI6c2VydmVyLFxyXG5cdFx0XHRcdHVzZXJOYW1lOmFjY291bnQsXHJcblx0XHRcdFx0dXNlclB3ZDpwYXNzd29yZCxcclxuXHRcdFx0XHRpc2NoZWNrZWQ6aXNjaGVja2VkLFxyXG5cdFx0XHRcdHZlcnNpb246XCIxLjAuMFwiLFxyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cdFx0Ly8gY29tcHV0ZWQ6IG1hcFN0YXRlKHtcclxuXHRcdC8vIFx0Ly8g5LuOc3RhdGXkuK3mi7/liLDmlbDmja4g566t5aS05Ye95pWw5Y+v5L2/5Luj56CB5pu0566A57uDXHJcblx0XHQvLyBcdGhhc0xvZ2luOiBzdGF0ZSA9PiBzdGF0ZS5oYXNMb2dpbixcclxuXHRcdC8vIFx0bG9naW5wcm92aWRlcjogc3RhdGUgPT4gc3RhdGUubG9naW5Qcm92aWRlcixcclxuXHRcdC8vIFx0YXBwaW5mbzpzdGF0ZT0+c3RhdGUuYXBwSW5mb1xyXG5cdFx0Ly8gfSksXHJcblx0XHRtZXRob2RzOntcclxuXHRcdFx0Ly8gLi4ubWFwTXV0YXRpb25zKHtcclxuXHRcdFx0Ly8gXHRtdXRhdExvZ2luOidsb2dpbidcclxuXHRcdFx0Ly8gfSksXHJcblx0XHRcdC8vIC4uLm1hcEFjdGlvbnMoe1xyXG5cdFx0XHQvLyBcdGFjdGlvbkxvZ2luOidsb2dpbidcclxuXHRcdFx0Ly8gfSksXHJcblx0XHRcdGlucHV0RGlhbG9nVG9nZ2xlKCkge1xyXG5cdFx0XHRcdHRoaXMuJHJlZnMuaW5wdXREaWFsb2cub3BlbigpXHJcblx0XHRcdH0sXHJcblx0XHRcdGRpYWxvZ0lucHV0Q29uZmlybSh2YWwpIHtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyh2YWwpO1xyXG5cdFx0XHRcdC8vIHVuaS5zaG93TG9hZGluZyh7XHJcblx0XHRcdFx0Ly8gXHR0aXRsZTogJzPnp5LlkI7kvJrlhbPpl60nXHJcblx0XHRcdFx0Ly8gfSlcclxuXHRcdFx0XHQvLyBzZXRUaW1lb3V0KCgpID0+IHtcclxuXHRcdFx0XHQvLyB1bmkuaGlkZUxvYWRpbmcoKTtcclxuXHRcdFx0XHR0aGlzLnVzZXJTZXJ2ZXIgPSB2YWw7XHJcblx0XHRcdFx0dW5pLnNldFN0b3JhZ2VTeW5jKCdzZXJ2ZXInLHZhbCk7XHJcblx0XHRcdFx0Ly8gdGhpcy52YWx1ZSA9IHZhbFxyXG5cdFx0XHRcdC8vIOWFs+mXreeql+WPo+WQju+8jOaBouWkjem7mOiupOWGheWuuVxyXG5cdFx0XHRcdHRoaXMuJHJlZnMuaW5wdXREaWFsb2cuY2xvc2UoKVxyXG5cdFx0XHRcdC8vIH0sIDMwMDApXHJcblx0XHRcdH0sXHJcblx0XHRcdHJlbWVtYmVyUHdkKGUpeyAgLy/orrDkvY/lr4bnoIFcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhlLnRhcmdldCk7XHJcblx0XHRcdFx0dW5pLnNldFN0b3JhZ2VTeW5jKCdhY2NvdW50JywnJyk7XHJcblx0XHRcdFx0dW5pLnNldFN0b3JhZ2VTeW5jKCdwYXNzd29yZCcsJycpO1xyXG5cdFx0XHRcdGlmKGUudGFyZ2V0LnZhbHVlWzBdPT0nMScpe1xyXG5cdFx0XHRcdFx0dW5pLnNldFN0b3JhZ2VTeW5jKCdhY2NvdW50Jyx0aGlzLnVzZXJOYW1lKTtcclxuXHRcdFx0XHRcdHVuaS5zZXRTdG9yYWdlU3luYygncGFzc3dvcmQnLHRoaXMudXNlclB3ZCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHQvLyBnZXRDb29raWUoa2V5KXtcclxuXHRcdFx0Ly8gXHRpZihkb2N1bWVudC5jb29raWUubGVuZ3RoPjApe1xyXG5cdFx0XHQvLyBcdFx0dmFyIHN0YXJ0ID0gZG9jdW1lbnQuY29va2llLmluZGV4T2Yoa2V5ICsnPScpO1xyXG5cdFx0XHQvLyBcdFx0aWYoc3RhcnQgIT09IC0xKXtcclxuXHRcdFx0Ly8gXHRcdFx0c3RhcnQgPSBzdGFydCtrZXkubGVuZ3RoKzE7XHJcblx0XHRcdC8vIFx0XHRcdHZhciBlbmQgPSBkb2N1bWVudC5jb29raWUuaW5kZXhPZignOycsc3RhcnQpO1xyXG5cdFx0XHQvLyBcdFx0XHRpZihlbmQgPT09IC0xKSBlbmQ9ZG9jdW1lbnQuY29va2llLmxlbmd0aDtcclxuXHRcdFx0Ly8gXHRcdFx0cmV0dXJuIGRvY3VtZW50LmNvb2tpZS5zdWJzdHJpbmcoc3RhcnQsZW5kKTtcclxuXHRcdFx0Ly8gXHRcdH1cclxuXHRcdFx0Ly8gXHR9XHJcblx0XHRcdC8vIFx0cmV0dXJuICcnO1xyXG5cdFx0XHQvLyB9LFxyXG5cdFx0XHQvLyBzZXRDb29raWUoY05hbWUsdmFsdWUsZXhwaXJlZGF5cyl7XHJcblx0XHRcdC8vIFx0dmFyIGV4ZGF0ZSA9IG5ldyBEYXRlKCk7XHJcblx0XHRcdC8vIFx0ZXhkYXRlLnNldERhdGUoZXhkYXRlLmdldERhdGUoKSxleHBpcmVkYXlzKVxyXG5cdFx0XHQvLyBcdGRvY3VtZW50LmNvb2tpZSA9IGNOYW1lKyc9JysgZG9jdW1lbnRVUkxDb21wb25lbnQodmFsdWUpK1xyXG5cdFx0XHQvLyBcdCgoZXhwaXJlZGF5cz09bnVsbCk/Jyc6JztleHBpcmVzPScrZXhkYXRlLnRvR01UU3RyaW5nKCkpO1xyXG5cdFx0XHRcdFxyXG5cdFx0XHQvLyB9LFxyXG5cdFx0XHRsb2dpbmQoKXtcclxuXHRcdFx0XHRpZighdGhpcy51c2VyU2VydmVyKXtcclxuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcIuacqui+k+WFpee9keermeWcsOWdgO+8jOivt+mHjeaWsOmFjee9rui+k+WFpe+8gVwiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZighdGhpcy51c2VyTmFtZSl7XHJcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCLmnKrovpPlhaXnlKjmiLflkI3vvIzor7fph43mlrDovpPlhaXvvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYoIXRoaXMudXNlclB3ZCl7XHJcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCLmnKrovpPlhaXlr4bnoIHvvIzor7fph43mlrDovpPlhaXvvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly/mo4Dmn6UgXCLnmbvlvZXnirbmgIEv6ZSB5bGP54q25oCBXCIg57uT5p2fXHJcblx0XHRcdFx0dmFyIGxvZ2luSW5mbyA9IHtcclxuXHRcdFx0XHRcdHNlcnZlcjogdGhpcy51c2VyU2VydmVyLFxyXG5cdFx0XHRcdFx0dW5hbWU6IHRoaXMudXNlck5hbWUsXHJcblx0XHRcdFx0XHRwd2Q6IHRoaXMudXNlclB3ZCxcclxuXHRcdFx0XHRcdGNuYW1lOiBwbHVzLmRldmljZS5tb2RlbCxcclxuXHRcdFx0XHRcdHR5cGU6XCIwXCJcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGxvZ2luSW5mbyk7XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0dGhpcy4kZGF0YS5sb2dpbj1cImxvYWRpbmcuLi4uLi5cIjtcclxuXHRcdFx0XHQvL+eZu+W9lVxyXG5cdFx0XHRcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdsb2dpbicsbG9naW5JbmZvKS50aGVuKHN1Y2Nlc3M9PntcclxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xyXG5cdFx0XHRcdFx0aWYgKHN1Y2Nlc3MuY29kZSA9PSAnMDAwMDAnKSB7XHJcblx0XHRcdFx0XHRcdC8v6K6+572u5YWo5bGA5Y+C5pWw77yadXNlci3nlKjmiLfkv6Hmga9cclxuXHRcdFx0XHRcdFx0dW5pLnNldFN0b3JhZ2VTeW5jKCdzZXJ2ZXInLGxvZ2luSW5mby5zZXJ2ZXIpO1xyXG5cdFx0XHRcdFx0XHQvLyB1bmkuc2V0U3RvcmFnZVN5bmMoJ2FjY291bnQnLGxvZ2luSW5mby51bmFtZSk7XHJcblx0XHRcdFx0XHRcdC8vIHVuaS5zZXRTdG9yYWdlU3luYygncGFzc3dvcmQnLGxvZ2luSW5mby5wd2QpO1xyXG5cdFx0XHRcdFx0XHQvLyB0aGlzLm11dGF0TG9naW4oe2xvZ2luaWQ6c3VjY2Vzc30pO1xyXG5cdFx0XHRcdFx0XHR0aGlzLiRzdG9yZS5jb21taXQoJ2xvZ2luJyx7XHJcblx0XHRcdFx0XHRcdFx0bG9naW5pZDpzdWNjZXNzIFxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0dW5pLm5hdmlnYXRlVG8oe1xyXG5cdFx0XHRcdFx0XHRcdHVybDonLi4vaW5kZXgvaW5kZXg/YXJncz05OTk5OTk5OTk5J1xyXG5cdFx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdFx0XHQvLyB1bmkucmVkaXJlY3RUbyh7XHJcblx0XHRcdFx0XHRcdC8vIFx0dXJsOicuLi9pbmRleC9pbmRleD9hcmdzPTk5OTk5OTk5OTknXHJcblx0XHRcdFx0XHRcdC8vIH0pO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmxvZ2luPVwi5byA5aeL55m75b2VXCI7XHJcblx0XHRcdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor69cIixjb250ZW50OnN1Y2Nlc3MubXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmxvZ2luPVwi5byA5aeL55m75b2VXCI7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSkuY2F0Y2goZXg9PntcclxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKGV4KTtcclxuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHR0aGlzLmxvZ2luPVwi5byA5aeL55m75b2VXCI7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblx0XHRvbkxvYWQoKSB7XHJcblx0XHRcdHBsdXMucnVudGltZS5nZXRQcm9wZXJ0eShwbHVzLnJ1bnRpbWUuYXBwaWQsKGluZm8pPT57XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coaW5mbyk7XHJcblx0XHRcdFx0dGhpcy4kZGF0YS52ZXJzaW9uPWluZm8udmVyc2lvbjtcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0fVxyXG48L3NjcmlwdD5cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///51\n");
eval("/* WEBPACK VAR INJECTION */(function(__f__) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n// import {\n// \tmapState,\n// \tmapMutations,\n// \tmapActions ,\n// } from 'vuex'\nvar _default = {\n  data: function data() {\n    //获取全局参数:url-服务器地址\n    var server = uni.getStorageSync('server');\n    var account = uni.getStorageSync('account');\n    var password = uni.getStorageSync('password');\n    var url = this.$store.state.url;\n    var username = this.$store.state.username;\n    var userpwd = this.$store.state.userpwd;\n    var ischecked = false;\n    if (!server) server = url;\n    if (!account) account = username;\n    if (account && password) ischecked = true;\n    // console.log(url);\n    return {\n      login: \"开始登录\",\n      userServer: server,\n      userName: account,\n      userPwd: password,\n      ischecked: ischecked,\n      version: \"1.0.0\"\n    };\n  },\n  // computed: mapState({\n  // \t// 从state中拿到数据 箭头函数可使代码更简练\n  // \thasLogin: state => state.hasLogin,\n  // \tloginprovider: state => state.loginProvider,\n  // \tappinfo:state=>state.appInfo\n  // }),\n  methods: {\n    // ...mapMutations({\n    // \tmutatLogin:'login'\n    // }),\n    // ...mapActions({\n    // \tactionLogin:'login'\n    // }),\n    inputDialogToggle: function inputDialogToggle() {\n      this.$refs.inputDialog.open();\n    },\n    dialogInputConfirm: function dialogInputConfirm(val) {\n      // console.log(val);\n      // uni.showLoading({\n      // \ttitle: '3秒后会关闭'\n      // })\n      // setTimeout(() => {\n      // uni.hideLoading();\n      this.userServer = val;\n      uni.setStorageSync('server', val);\n      // this.value = val\n      // 关闭窗口后,恢复默认内容\n      this.$refs.inputDialog.close();\n      // }, 3000)\n    },\n    rememberPwd: function rememberPwd(e) {\n      //记住密码\n      __f__(\"log\", e.target, \" at pages/login/index.vue:231\");\n      uni.setStorageSync('account', '');\n      uni.setStorageSync('password', '');\n      if (e.target.value[0] == '1') {\n        uni.setStorageSync('account', this.userName);\n        uni.setStorageSync('password', this.userPwd);\n      }\n    },\n    // getCookie(key){\n    // \tif(document.cookie.length>0){\n    // \t\tvar start = document.cookie.indexOf(key +'=');\n    // \t\tif(start !== -1){\n    // \t\t\tstart = start+key.length+1;\n    // \t\t\tvar end = document.cookie.indexOf(';',start);\n    // \t\t\tif(end === -1) end=document.cookie.length;\n    // \t\t\treturn document.cookie.substring(start,end);\n    // \t\t}\n    // \t}\n    // \treturn '';\n    // },\n    // setCookie(cName,value,expiredays){\n    // \tvar exdate = new Date();\n    // \texdate.setDate(exdate.getDate(),expiredays)\n    // \tdocument.cookie = cName+'='+ documentURLComponent(value)+\n    // \t((expiredays==null)?'':';expires='+exdate.toGMTString());\n    // },\n    logind: function logind() {\n      var _this = this;\n      if (!this.userServer) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"未输入网站地址,请重新配置输入!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      if (!this.userName) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"未输入用户名,请重新输入!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      if (!this.userPwd) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"未输入密码,请重新输入!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      //检查 \"登录状态/锁屏状态\" 结束\n      var loginInfo = {\n        server: this.userServer,\n        uname: this.userName,\n        pwd: this.userPwd,\n        cname: plus.device.model,\n        type: \"0\"\n      };\n      __f__(\"log\", loginInfo, \" at pages/login/index.vue:279\");\n      this.$data.login = \"loading......\";\n      //登录\n      this.$store.dispatch('login', loginInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/login/index.vue:284\");\n        if (success.code == '00000') {\n          //登录成功后清空缓存数据\n          _this.$store.commit(\"areaFunc\", null);\n          _this.$store.commit(\"classAttrList\", null);\n          _this.$store.commit(\"classGridStyleInfo\", null);\n          _this.$store.commit(\"dicValueInfo\", null);\n          _this.$store.commit(\"subClassAttrList\", null);\n          _this.$store.commit(\"subClassGridStyleInfo\", null);\n          //设置全局参数:user-用户信息\n          uni.setStorageSync('server', loginInfo.server);\n          // uni.setStorageSync('account',loginInfo.uname);\n          // uni.setStorageSync('password',loginInfo.pwd);\n          // this.mutatLogin({loginid:success});\n          _this.$store.commit('login', {\n            loginid: success\n          });\n          uni.navigateTo({\n            url: '../index/index?args=9999999999'\n          });\n          // uni.redirectTo({\n          // \turl:'../index/index?args=9999999999'\n          // });\n          _this.login = \"开始登录\";\n        } else {\n          uni.showModal({\n            title: \"错误\",\n            content: success.msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n          _this.login = \"开始登录\";\n        }\n      }).catch(function (ex) {\n        __f__(\"log\", ex, \" at pages/login/index.vue:314\");\n        uni.showModal({\n          title: \"错误\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        _this.login = \"开始登录\";\n      });\n    }\n  },\n  onLoad: function onLoad() {\n    var _this2 = this;\n    plus.runtime.getProperty(plus.runtime.appid, function (info) {\n      // console.log(info);\n      _this2.$data.version = info.version;\n    });\n  }\n};\nexports.default = _default;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 18)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vcGFnZXMvbG9naW4vaW5kZXgudnVlIl0sIm5hbWVzIjpbImRhdGEiLCJzZXJ2ZXIiLCJhY2NvdW50IiwiaXNjaGVja2VkIiwibG9naW4iLCJ1c2VyU2VydmVyIiwidXNlck5hbWUiLCJ1c2VyUHdkIiwidmVyc2lvbiIsIm1ldGhvZHMiLCJpbnB1dERpYWxvZ1RvZ2dsZSIsImRpYWxvZ0lucHV0Q29uZmlybSIsInVuaSIsInJlbWVtYmVyUHdkIiwibG9naW5kIiwidGl0bGUiLCJjb250ZW50Iiwic2hvd0NhbmNlbCIsImNvbmZpcm1UZXh0IiwidW5hbWUiLCJwd2QiLCJjbmFtZSIsInR5cGUiLCJsb2dpbmlkIiwidXJsIiwib25Mb2FkIiwicGx1cyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF3S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBLGVBQ0E7RUFDQUE7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0EsYUFDQUM7SUFDQSxjQUNBQztJQUNBLHlCQUNBQztJQUNBO0lBQ0E7TUFDQUM7TUFDQUM7TUFDQUM7TUFDQUM7TUFDQUo7TUFDQUs7SUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0FDO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0FDO01BQ0E7SUFDQTtJQUNBQztNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0FDO01BQ0E7TUFDQTtNQUNBO01BQ0E7SUFDQTtJQUNBQztNQUFBO01BQ0E7TUFDQUQ7TUFDQUE7TUFDQTtRQUNBQTtRQUNBQTtNQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBRUE7SUFDQUU7TUFBQTtNQUNBO1FBQ0FGO1VBQUFHO1VBQUFDO1VBQUFDO1VBQUFDO1FBQUE7UUFDQTtNQUNBO01BQ0E7UUFDQU47VUFBQUc7VUFBQUM7VUFBQUM7VUFBQUM7UUFBQTtRQUNBO01BQ0E7TUFDQTtRQUNBTjtVQUFBRztVQUFBQztVQUFBQztVQUFBQztRQUFBO1FBQ0E7TUFDQTtNQUNBO01BQ0E7UUFDQWpCO1FBQ0FrQjtRQUNBQztRQUNBQztRQUNBQztNQUNBO01BQ0E7TUFFQTtNQUNBO01BQ0E7UUFDQTtRQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBVjtVQUNBO1VBQ0E7VUFDQTtVQUNBO1lBQ0FXO1VBQ0E7VUFDQVg7WUFDQVk7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1FBRUE7VUFDQVo7WUFBQUc7WUFBQUM7WUFBQUM7WUFBQUM7VUFBQTtVQUNBO1FBQ0E7TUFDQTtRQUNBO1FBQ0FOO1VBQUFHO1VBQUFDO1VBQUFDO1VBQUFDO1FBQUE7UUFDQTtNQUNBO0lBQ0E7RUFDQTtFQUNBTztJQUFBO0lBQ0FDO01BQ0E7TUFDQTtJQUNBO0VBQ0E7QUFDQTtBQUFBLDJCIiwiZmlsZSI6IjUxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXHJcbjxzdHlsZT5cclxuXHRpbnB1dDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XHJcblx0XHRmb250LXNpemU6IDEycnB4O1xyXG5cdH1cclxuXHQjaGVhZHIge1xyXG5cdFx0YmFja2dyb3VuZDogIzQzNDM0MztcclxuXHRcdC8qIHdpZHRoOiAzNzVweDsgKi9cclxuXHRcdGhlaWdodDogMjUwcnB4O1xyXG5cdFx0dGV4dC1hbGlnbjogY2VudGVyO1xyXG5cdFx0YmFja2dyb3VuZC1jb2xvcjogIzQzOEVCOTtcclxuXHRcdC8qIGJhY2tncm91bmQtaW1hZ2U6IHVybCguLi8uLi9pbWFnZXMvbG9naW4vcm9vdC5wbmcpICFpbXBvcnRhbnQ7XHJcblx0XHRiYWNrZ3JvdW5kLXNpemU6IGNvdmVyICFpbXBvcnRhbnQ7IFxyXG5cdFx0YmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdCAhaW1wb3J0YW50OyAqL1xyXG5cdH1cclxuXHQuU2V0U2VydmVyeyAgICBcclxuXHRcdGZsb2F0OiBsZWZ0O1xyXG5cdFx0bWFyZ2luLWxlZnQ6IDIwcnB4O1xyXG5cdH1cclxuXHQuY2hlY2tfcmVtZW1iZXJQd2R7XHJcblx0XHRtYXJnaW4tdG9wOiAyMHJweDtcclxuXHRcdG1hcmdpbi1sZWZ0OiAyMHJweDtcclxuXHR9XHJcblx0LmxvZ28ge1xyXG5cdFx0aGVpZ2h0OiAxODBycHg7XHJcblx0XHR3aWR0aDogMTgwcnB4OyBcclxuXHRcdG1hcmdpbi10b3A6IDE3MHJweDtcclxuXHR9XHJcblx0LmxvZ29faW5wdXQge1xyXG5cdFx0aGVpZ2h0OiA0MHJweDtcclxuXHRcdHdpZHRoOiA0MHJweDtcclxuXHRcdG1hcmdpbi1sZWZ0OiA0MHJweDtcclxuXHR9XHJcblx0LmxvZ29faWNvbiB7XHJcblx0XHRoZWlnaHQ6IDUwcnB4O1xyXG5cdFx0d2lkdGg6IDUwcnB4O1xyXG5cdFx0bWFyZ2luLWxlZnQ6IDE1cnB4O1xyXG5cdFx0bWFyZ2luLXRvcDogMjBycHg7XHJcblx0fVxyXG5cdC5tdWktY29udGVudHtcclxuXHRcdGhlaWdodDogMTAwJTtcclxuXHRcdHBhZGRpbmctdG9wOiAxNDBycHg7XHJcblx0XHRiYWNrZ3JvdW5kOiAjRkZGRkZGO1xyXG5cdFx0ei1pbmRleDogMTtcclxuXHR9XHJcblx0Lm11aS1pbnB1dC1ncm91cCAubGFfaWNvbiB7XHJcblx0ICAgIHdpZHRoOiAxMDBycHg7XHJcblx0ICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuXHQgICAgZm9udC1mYW1pbHk6ICdIZWx2ZXRpY2EgTmV1ZScsSGVsdmV0aWNhLHNhbnMtc2VyaWY7XHJcblx0ICAgIGxpbmUtaGVpZ2h0OiAxLjU7XHJcblx0ICAgIGZsb2F0OiBsZWZ0O1xyXG5cdCAgICBwYWRkaW5nOiA3cHggMTNweDtcclxuXHR9XHJcblx0Lm11aS1pbnB1dC1ncm91cCAubXVpLWlucHV0LXJvdyB7XHJcblx0ICAgIGhlaWdodDogODVycHg7XHJcblx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XHJcblx0XHRjbGVhcjogbGVmdDtcclxuXHRcdG92ZXJmbG93OiBoaWRkZW47XHJcblx0fVxyXG5cdC5tdWktaW5wdXQtcm93OmZpcnN0LWNoaWxkIHtcclxuXHRcdGJvcmRlci10b3A6IDFweCBzb2xpZCAjYzhjN2NjO1xyXG5cdH1cclxuXHQubXVpLWlucHV0LXJvdzpsYXN0LWNoaWxkIHtcclxuXHRcdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjYzhjN2NjO1xyXG5cdH1cclxuXHQubXVpLWlucHV0LWdyb3VwIC5tdWktaW5wdXQtcm93Omxhc3QtY2hpbGQ6YWZ0ZXIge1xyXG5cdFx0YmFja2dyb3VuZC1jb2xvcjojZmZmO1xyXG5cdH1cclxuXHQubXVpLWlucHV0LWdyb3VwIC5tdWktaW5wdXQtcm93OmFmdGVyIHtcclxuXHQgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG5cdCAgICByaWdodDogMDtcclxuXHQgICAgYm90dG9tOiAwO1xyXG5cdCAgICBsZWZ0OiAxNXB4O1xyXG5cdCAgICBoZWlnaHQ6IDFweDtcclxuXHQgICAgY29udGVudDogJyc7XHJcblx0ICAgIHRyYW5zZm9ybTogc2NhbGVZKC41KTtcclxuXHQgICAgYmFja2dyb3VuZC1jb2xvcjogI2M4YzdjYztcclxuXHR9XHJcblx0Lm11aS1pbnB1dC1yb3cgaW5wdXQge1xyXG5cdFx0Zm9udC1mYW1pbHk6ICdIZWx2ZXRpY2EgTmV1ZScsSGVsdmV0aWNhLHNhbnMtc2VyaWY7XHJcblx0XHRmb250LXNpemU6IDE1cHg7XHJcblx0XHR3aWR0aDogNDgwcnB4O1xyXG5cdFx0LyogZmxvYXQ6IHJpZ2h0OyAqL1xyXG5cdFx0bWFyZ2luLWJvdHRvbTogMDtcclxuXHRcdHBhZGRpbmctbGVmdDogMjBycHg7XHJcblx0XHQvKiBwYWRkaW5nLXJpZ2h0OiAxMHJweDsgKi9cclxuXHRcdC8qIGxpbmUtaGVpZ2h0OiAzMHJweDsgKi9cclxuXHRcdGhlaWdodDogODVycHg7XHJcblx0XHQvKiBwYWRkaW5nOiA3cHggNDBweCA3cHggMHB4OyAqL1xyXG5cdFx0LXdlYmtpdC11c2VyLXNlbGVjdDogdGV4dDtcclxuXHRcdC8qIGJvcmRlcjogMDsgKi9cclxuXHRcdC8qIGJvcmRlci1yYWRpdXM6IDA7ICovXHJcblx0XHRib3gtc2hhZG93OiBub25lO1xyXG5cdFx0b3V0bGluZTogMDtcclxuXHRcdGJhY2tncm91bmQ6IDAgMDtcclxuXHRcdC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcclxuXHR9XHJcblx0XHJcblx0Lm11aS1pbnB1dC1ncm91cCBsYWJlbC5tdWktbmF2aWdhdGUtcmlnaHQge1xyXG5cdFx0Zm9udC1zaXplOiAyNXB4O1xyXG5cdFx0ZmxvYXQ6IHJpZ2h0O1xyXG5cdFx0cGFkZGluZzogMDtcclxuXHRcdHdpZHRoOiA4MHJweDtcclxuXHRcdG1hcmdpbi1yaWdodDogNXJweDtcclxuXHRcdG1hcmdpbi10b3A6IC04OHJweDtcclxuXHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuXHR9XHJcblx0XHJcblx0YnV0dG9uLmJ0bl9sb2dpbiB7XHJcblx0XHRtYXJnaW4tdG9wOiA1MHJweDtcclxuXHRcdHBhZGRpbmc6IDIwcnB4O1xyXG5cdFx0bGluZS1oZWlnaHQ6IDEuNTtcclxuXHRcdGJhY2tncm91bmQ6ICMyN0E2RTE7XHJcblx0XHRib3JkZXI6IG5vbmU7XHJcblx0XHRjb2xvcjogI2ZmZjtcclxuXHR9XHJcbjwvc3R5bGU+XHJcbiBcclxuXHJcbjx0ZW1wbGF0ZT5cclxuXHQ8dmlldyBjbGFzcz1cIlwiIHN0eWxlPVwid2lkdGg6IDEwMHZ3O2hlaWdodDogNjR2aDtcIj5cclxuXHRcdDxkaXYgaWQ9XCJoZWFkclwiIGNsYXNzPVwibXVpLWJhciBtdWktYmFyLW5hdlwiPlxyXG5cdFx0XHQ8aW1hZ2UgY2xhc3M9XCJsb2dvXCIgc3JjPVwiLi4vLi4vaW1hZ2VzL2xvZ2luL21vYm94X2xvZ18yMDAucG5nXCI+PC9pbWFnZT5cclxuXHRcdDwvZGl2PlxyXG5cdFx0PGRpdiBjbGFzcz1cIm11aS1jb250ZW50XCI+XHJcblx0XHRcdDxmb3JtIGlkPSdsb2dpbi1mb3JtJyBjbGFzcz1cIm11aS1pbnB1dC1ncm91cFwiPlxyXG5cdFx0XHRcdDxhIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiBjbGFzcz1cIlNldFNlcnZlclwiIEBjbGljaz1cImlucHV0RGlhbG9nVG9nZ2xlXCI+6YWN572uPC9hPlxyXG5cdFx0XHRcdDwhLS0gPGRpdiBjbGFzcz1cIm11aS1pbnB1dC1yb3dcIj5cclxuXHRcdFx0XHRcdDxsYWJlbCBjbGFzcz1cImxhX2ljb25cIj48aW1hZ2UgY2xhc3M9XCJsb2dvX2lucHV0XCIgc3JjPVwiLi4vLi4vaW1hZ2VzL2xvZ2luL3N2cl8zMC5wbmdcIj48L2ltYWdlPjwvbGFiZWw+XHJcblx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cIm11aS1pbnB1dFwiIHYtbW9kZWw9XCJ1c2VyU2VydmVyXCIgcGxhY2Vob2xkZXI9XCLmnI3liqHlmajlnLDlnYBcIj5cclxuXHRcdFx0XHRcdDxsYWJlbCBjbGFzcz1cIm11aS1uYXZpZ2F0ZS1yaWdodFwiIGlkPVwic2Vyc2VsXCI+PGltYWdlIGNsYXNzPVwibG9nb19pY29uXCIgc3JjPVwiLi4vLi4vaW1hZ2VzL2xvZ2luL3NlbF9sZWZ0LnBuZ1wiID48L2ltYWdlPjwvbGFiZWw+XHJcblx0XHRcdFx0PC9kaXY+IC0tPlxyXG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJtdWktaW5wdXQtcm93XCI+XHJcblx0XHRcdFx0XHQ8bGFiZWwgY2xhc3M9XCJsYV9pY29uXCIgPjxpbWFnZSBjbGFzcz1cImxvZ29faW5wdXRcIiBzcmM9XCIuLi8uLi9pbWFnZXMvbG9naW4vcGVyc29uXzMwLnBuZ1wiPjwvaW1hZ2U+PC9sYWJlbD5cclxuXHRcdFx0XHRcdDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwibXVpLWlucHV0XCIgdi1tb2RlbD1cInVzZXJOYW1lXCIgcGxhY2Vob2xkZXI9XCLor7fovpPlhaXotKblj7dcIj5cclxuXHRcdFx0XHRcdDwhLS0gPGxhYmVsIGNsYXNzPVwibXVpLW5hdmlnYXRlLXJpZ2h0XCIgaWQ9XCJuYW1zZWxcIj48aW1hZ2UgY2xhc3M9XCJsb2dvX2ljb25cIiBzcmM9XCIuLi8uLi9pbWFnZXMvbG9naW4vdXNlci1waG90by5wbmc8L2ltYWdlPjwvbGFiZWw+IC0tPlxyXG5cdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJtdWktaW5wdXQtcm93XCI+XHJcblx0XHRcdFx0XHQ8bGFiZWwgY2xhc3M9XCJsYV9pY29uXCIgPjxpbWFnZSBjbGFzcz1cImxvZ29faW5wdXRcIiBzcmM9XCIuLi8uLi9pbWFnZXMvbG9naW4vbG9ja18zMC5wbmdcIj48L2ltYWdlPjwvbGFiZWw+XHJcblx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInBhc3N3b3JkXCIgY2xhc3M9XCJtdWktaW5wdXRcIiB2LW1vZGVsPVwidXNlclB3ZFwiIHBsYWNlaG9sZGVyPVwi6K+36L6T5YWl5a+G56CBXCI+XHJcblx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0PGNoZWNrYm94LWdyb3VwIGNsYXNzPVwiY2hlY2tfcmVtZW1iZXJQd2RcIiBAY2hhbmdlPVwicmVtZW1iZXJQd2RcIj5cclxuXHRcdFx0XHRcdDxsYWJlbD5cclxuXHRcdFx0XHRcdFx0PGNoZWNrYm94IHZhbHVlPVwiMVwiIDpjaGVja2VkPVwiaXNjaGVja2VkXCIvPlxyXG5cdFx0XHRcdFx0XHQ8dGV4dD7orrDkvY/lr4bnoIE8L3RleHQ+XHJcblx0XHRcdFx0XHQ8L2xhYmVsPlxyXG5cdFx0XHRcdDwvY2hlY2tib3gtZ3JvdXA+XHJcblx0XHRcdDwvZm9ybT5cclxuXHRcdFx0PGJ1dHRvbiBpZD0nbG9naW4nIHR5cGU9XCJkZWZhdWx0XCIgQHRhcD1cImxvZ2luZFwiIGNsYXNzPVwiYnRuX2xvZ2luXCI+e3tsb2dpbn19PC9idXR0b24+XHJcblx0XHRcdDxwIHN0eWxlPVwiZmxvYXQ6cmlnaHQ7IG1hcmdpbjogMTBweCAxMHB4O2NvbG9yOiNjOGM3Y2NcIj5cclxuXHRcdFx0XHQ8c3Bhbj7niYjmnKzlj7fvvJo8L3NwYW4+XHJcblx0XHRcdFx0PHNwYW4+e3t2ZXJzaW9ufX08L3NwYW4+XHJcblx0XHRcdDwvcD5cclxuXHRcdFx0PGRpdiBjbGFzcz1cIlwiIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyO2JhY2tncm91bmQ6IHdoaXRlO2JvcmRlci10b3A6IDBweCBzb2xpZCAjQzBDMEMwO2NvbG9yOiAjN2NkMGY4O3Bvc2l0aW9uOiBhYnNvbHV0ZTtib3R0b206IDA7d2lkdGg6IDEwMCU7aGVpZ2h0OiAyNHB4O3BhZGRpbmctdG9wOjNweDtmb250LXNpemU6IDExcHg7XCI+XHJcblx0XHRcdDwvZGl2PlxyXG5cdFx0PC9kaXY+XHJcblx0XHQ8dmlldz5cclxuXHRcdFx0PCEtLSDovpPlhaXmoYbnpLrkvosgLS0+XHJcblx0XHRcdDx1bmktcG9wdXAgcmVmPVwiaW5wdXREaWFsb2dcIiB0eXBlPVwiZGlhbG9nXCI+XHJcblx0XHRcdFx0PHVuaS1wb3B1cC1kaWFsb2cgcmVmPVwiaW5wdXRDbG9zZVwiICBtb2RlPVwiaW5wdXRcIiB0aXRsZT1cIuiuvue9rlwiIDp2YWx1ZT1cInVzZXJTZXJ2ZXJcIlxyXG5cdFx0XHRcdFx0cGxhY2Vob2xkZXI9XCLor7fovpPlhaXlhoXlrrlcIiBAY29uZmlybT1cImRpYWxvZ0lucHV0Q29uZmlybVwiPjwvdW5pLXBvcHVwLWRpYWxvZz5cclxuXHRcdFx0PC91bmktcG9wdXA+XHJcblx0XHQ8L3ZpZXc+XHJcblx0PC92aWV3PlxyXG5cdCBcclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzY3JpcHQ+IFxyXG5cdC8vIGltcG9ydCB7XHJcblx0Ly8gXHRtYXBTdGF0ZSxcclxuXHQvLyBcdG1hcE11dGF0aW9ucyxcclxuXHQvLyBcdG1hcEFjdGlvbnMgLFxyXG5cdC8vIH0gZnJvbSAndnVleCdcclxuXHRleHBvcnQgZGVmYXVsdCB7XHJcblx0XHRkYXRhKCl7XHJcblx0XHRcdC8v6I635Y+W5YWo5bGA5Y+C5pWw77yadXJsLeacjeWKoeWZqOWcsOWdgFxyXG5cdFx0XHR2YXIgc2VydmVyID0gdW5pLmdldFN0b3JhZ2VTeW5jKCdzZXJ2ZXInKTtcclxuXHRcdFx0dmFyIGFjY291bnQgPSB1bmkuZ2V0U3RvcmFnZVN5bmMoJ2FjY291bnQnKTtcclxuXHRcdFx0dmFyIHBhc3N3b3JkID0gdW5pLmdldFN0b3JhZ2VTeW5jKCdwYXNzd29yZCcpO1xyXG5cdFx0XHR2YXIgdXJsID0gdGhpcy4kc3RvcmUuc3RhdGUudXJsO1xyXG5cdFx0XHR2YXIgdXNlcm5hbWUgPSB0aGlzLiRzdG9yZS5zdGF0ZS51c2VybmFtZTtcclxuXHRcdFx0dmFyIHVzZXJwd2QgPSB0aGlzLiRzdG9yZS5zdGF0ZS51c2VycHdkO1xyXG5cdFx0XHR2YXIgaXNjaGVja2VkPWZhbHNlO1xyXG5cdFx0XHRpZighc2VydmVyKVxyXG5cdFx0XHRcdHNlcnZlciA9IHVybDtcclxuXHRcdFx0aWYoIWFjY291bnQpXHJcblx0XHRcdFx0YWNjb3VudCA9IHVzZXJuYW1lO1xyXG5cdFx0XHRpZihhY2NvdW50ICYmIHBhc3N3b3JkKVxyXG5cdFx0XHRcdGlzY2hlY2tlZD10cnVlO1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyh1cmwpO1xyXG5cdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdGxvZ2luOlwi5byA5aeL55m75b2VXCIsXHJcblx0XHRcdFx0dXNlclNlcnZlcjpzZXJ2ZXIsXHJcblx0XHRcdFx0dXNlck5hbWU6YWNjb3VudCxcclxuXHRcdFx0XHR1c2VyUHdkOnBhc3N3b3JkLFxyXG5cdFx0XHRcdGlzY2hlY2tlZDppc2NoZWNrZWQsXHJcblx0XHRcdFx0dmVyc2lvbjpcIjEuMC4wXCIsXHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblx0XHQvLyBjb21wdXRlZDogbWFwU3RhdGUoe1xyXG5cdFx0Ly8gXHQvLyDku45zdGF0ZeS4reaLv+WIsOaVsOaNriDnrq3lpLTlh73mlbDlj6/kvb/ku6PnoIHmm7TnroDnu4NcclxuXHRcdC8vIFx0aGFzTG9naW46IHN0YXRlID0+IHN0YXRlLmhhc0xvZ2luLFxyXG5cdFx0Ly8gXHRsb2dpbnByb3ZpZGVyOiBzdGF0ZSA9PiBzdGF0ZS5sb2dpblByb3ZpZGVyLFxyXG5cdFx0Ly8gXHRhcHBpbmZvOnN0YXRlPT5zdGF0ZS5hcHBJbmZvXHJcblx0XHQvLyB9KSxcclxuXHRcdG1ldGhvZHM6e1xyXG5cdFx0XHQvLyAuLi5tYXBNdXRhdGlvbnMoe1xyXG5cdFx0XHQvLyBcdG11dGF0TG9naW46J2xvZ2luJ1xyXG5cdFx0XHQvLyB9KSxcclxuXHRcdFx0Ly8gLi4ubWFwQWN0aW9ucyh7XHJcblx0XHRcdC8vIFx0YWN0aW9uTG9naW46J2xvZ2luJ1xyXG5cdFx0XHQvLyB9KSxcclxuXHRcdFx0aW5wdXREaWFsb2dUb2dnbGUoKSB7XHJcblx0XHRcdFx0dGhpcy4kcmVmcy5pbnB1dERpYWxvZy5vcGVuKClcclxuXHRcdFx0fSxcclxuXHRcdFx0ZGlhbG9nSW5wdXRDb25maXJtKHZhbCkge1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKHZhbCk7XHJcblx0XHRcdFx0Ly8gdW5pLnNob3dMb2FkaW5nKHtcclxuXHRcdFx0XHQvLyBcdHRpdGxlOiAnM+enkuWQjuS8muWFs+mXrSdcclxuXHRcdFx0XHQvLyB9KVxyXG5cdFx0XHRcdC8vIHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cdFx0XHRcdC8vIHVuaS5oaWRlTG9hZGluZygpO1xyXG5cdFx0XHRcdHRoaXMudXNlclNlcnZlciA9IHZhbDtcclxuXHRcdFx0XHR1bmkuc2V0U3RvcmFnZVN5bmMoJ3NlcnZlcicsdmFsKTtcclxuXHRcdFx0XHQvLyB0aGlzLnZhbHVlID0gdmFsXHJcblx0XHRcdFx0Ly8g5YWz6Zet56qX5Y+j5ZCO77yM5oGi5aSN6buY6K6k5YaF5a65XHJcblx0XHRcdFx0dGhpcy4kcmVmcy5pbnB1dERpYWxvZy5jbG9zZSgpXHJcblx0XHRcdFx0Ly8gfSwgMzAwMClcclxuXHRcdFx0fSxcclxuXHRcdFx0cmVtZW1iZXJQd2QoZSl7ICAvL+iusOS9j+WvhueggVxyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGUudGFyZ2V0KTtcclxuXHRcdFx0XHR1bmkuc2V0U3RvcmFnZVN5bmMoJ2FjY291bnQnLCcnKTtcclxuXHRcdFx0XHR1bmkuc2V0U3RvcmFnZVN5bmMoJ3Bhc3N3b3JkJywnJyk7XHJcblx0XHRcdFx0aWYoZS50YXJnZXQudmFsdWVbMF09PScxJyl7XHJcblx0XHRcdFx0XHR1bmkuc2V0U3RvcmFnZVN5bmMoJ2FjY291bnQnLHRoaXMudXNlck5hbWUpO1xyXG5cdFx0XHRcdFx0dW5pLnNldFN0b3JhZ2VTeW5jKCdwYXNzd29yZCcsdGhpcy51c2VyUHdkKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblx0XHRcdC8vIGdldENvb2tpZShrZXkpe1xyXG5cdFx0XHQvLyBcdGlmKGRvY3VtZW50LmNvb2tpZS5sZW5ndGg+MCl7XHJcblx0XHRcdC8vIFx0XHR2YXIgc3RhcnQgPSBkb2N1bWVudC5jb29raWUuaW5kZXhPZihrZXkgKyc9Jyk7XHJcblx0XHRcdC8vIFx0XHRpZihzdGFydCAhPT0gLTEpe1xyXG5cdFx0XHQvLyBcdFx0XHRzdGFydCA9IHN0YXJ0K2tleS5sZW5ndGgrMTtcclxuXHRcdFx0Ly8gXHRcdFx0dmFyIGVuZCA9IGRvY3VtZW50LmNvb2tpZS5pbmRleE9mKCc7JyxzdGFydCk7XHJcblx0XHRcdC8vIFx0XHRcdGlmKGVuZCA9PT0gLTEpIGVuZD1kb2N1bWVudC5jb29raWUubGVuZ3RoO1xyXG5cdFx0XHQvLyBcdFx0XHRyZXR1cm4gZG9jdW1lbnQuY29va2llLnN1YnN0cmluZyhzdGFydCxlbmQpO1xyXG5cdFx0XHQvLyBcdFx0fVxyXG5cdFx0XHQvLyBcdH1cclxuXHRcdFx0Ly8gXHRyZXR1cm4gJyc7XHJcblx0XHRcdC8vIH0sXHJcblx0XHRcdC8vIHNldENvb2tpZShjTmFtZSx2YWx1ZSxleHBpcmVkYXlzKXtcclxuXHRcdFx0Ly8gXHR2YXIgZXhkYXRlID0gbmV3IERhdGUoKTtcclxuXHRcdFx0Ly8gXHRleGRhdGUuc2V0RGF0ZShleGRhdGUuZ2V0RGF0ZSgpLGV4cGlyZWRheXMpXHJcblx0XHRcdC8vIFx0ZG9jdW1lbnQuY29va2llID0gY05hbWUrJz0nKyBkb2N1bWVudFVSTENvbXBvbmVudCh2YWx1ZSkrXHJcblx0XHRcdC8vIFx0KChleHBpcmVkYXlzPT1udWxsKT8nJzonO2V4cGlyZXM9JytleGRhdGUudG9HTVRTdHJpbmcoKSk7XHJcblx0XHRcdFx0XHJcblx0XHRcdC8vIH0sXHJcblx0XHRcdGxvZ2luZCgpe1xyXG5cdFx0XHRcdGlmKCF0aGlzLnVzZXJTZXJ2ZXIpe1xyXG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50Olwi5pyq6L6T5YWl572R56uZ5Zyw5Z2A77yM6K+36YeN5paw6YWN572u6L6T5YWl77yBXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmKCF0aGlzLnVzZXJOYW1lKXtcclxuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcIuacqui+k+WFpeeUqOaIt+WQje+8jOivt+mHjeaWsOi+k+WFpe+8gVwiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZighdGhpcy51c2VyUHdkKXtcclxuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcIuacqui+k+WFpeWvhuegge+8jOivt+mHjeaWsOi+k+WFpe+8gVwiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQvL+ajgOafpSBcIueZu+W9leeKtuaAgS/plIHlsY/nirbmgIFcIiDnu5PmnZ9cclxuXHRcdFx0XHR2YXIgbG9naW5JbmZvID0ge1xyXG5cdFx0XHRcdFx0c2VydmVyOiB0aGlzLnVzZXJTZXJ2ZXIsXHJcblx0XHRcdFx0XHR1bmFtZTogdGhpcy51c2VyTmFtZSxcclxuXHRcdFx0XHRcdHB3ZDogdGhpcy51c2VyUHdkLFxyXG5cdFx0XHRcdFx0Y25hbWU6IHBsdXMuZGV2aWNlLm1vZGVsLFxyXG5cdFx0XHRcdFx0dHlwZTpcIjBcIlxyXG5cdFx0XHRcdH07XHJcblx0XHRcdFx0Y29uc29sZS5sb2cobG9naW5JbmZvKTtcclxuXHRcdFx0XHRcclxuXHRcdFx0XHR0aGlzLiRkYXRhLmxvZ2luPVwibG9hZGluZy4uLi4uLlwiO1xyXG5cdFx0XHRcdC8v55m75b2VXHJcblx0XHRcdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2xvZ2luJyxsb2dpbkluZm8pLnRoZW4oc3VjY2Vzcz0+e1xyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2coc3VjY2Vzcyk7XHJcblx0XHRcdFx0XHRpZiAoc3VjY2Vzcy5jb2RlID09ICcwMDAwMCcpIHtcclxuXHRcdFx0XHRcdFx0Ly/nmbvlvZXmiJDlip/lkI7muIXnqbrnvJPlrZjmlbDmja5cclxuXHRcdFx0XHRcdFx0dGhpcy4kc3RvcmUuY29tbWl0KFwiYXJlYUZ1bmNcIixudWxsKTtcclxuXHRcdFx0XHRcdFx0dGhpcy4kc3RvcmUuY29tbWl0KFwiY2xhc3NBdHRyTGlzdFwiLG51bGwpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLiRzdG9yZS5jb21taXQoXCJjbGFzc0dyaWRTdHlsZUluZm9cIixudWxsKTtcclxuXHRcdFx0XHRcdFx0dGhpcy4kc3RvcmUuY29tbWl0KFwiZGljVmFsdWVJbmZvXCIsbnVsbCk7XHJcblx0XHRcdFx0XHRcdHRoaXMuJHN0b3JlLmNvbW1pdChcInN1YkNsYXNzQXR0ckxpc3RcIixudWxsKTtcclxuXHRcdFx0XHRcdFx0dGhpcy4kc3RvcmUuY29tbWl0KFwic3ViQ2xhc3NHcmlkU3R5bGVJbmZvXCIsbnVsbCk7XHJcblx0XHRcdFx0XHRcdC8v6K6+572u5YWo5bGA5Y+C5pWw77yadXNlci3nlKjmiLfkv6Hmga9cclxuXHRcdFx0XHRcdFx0dW5pLnNldFN0b3JhZ2VTeW5jKCdzZXJ2ZXInLGxvZ2luSW5mby5zZXJ2ZXIpO1xyXG5cdFx0XHRcdFx0XHQvLyB1bmkuc2V0U3RvcmFnZVN5bmMoJ2FjY291bnQnLGxvZ2luSW5mby51bmFtZSk7XHJcblx0XHRcdFx0XHRcdC8vIHVuaS5zZXRTdG9yYWdlU3luYygncGFzc3dvcmQnLGxvZ2luSW5mby5wd2QpO1xyXG5cdFx0XHRcdFx0XHQvLyB0aGlzLm11dGF0TG9naW4oe2xvZ2luaWQ6c3VjY2Vzc30pO1xyXG5cdFx0XHRcdFx0XHR0aGlzLiRzdG9yZS5jb21taXQoJ2xvZ2luJyx7XHJcblx0XHRcdFx0XHRcdFx0bG9naW5pZDpzdWNjZXNzIFxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0dW5pLm5hdmlnYXRlVG8oe1xyXG5cdFx0XHRcdFx0XHRcdHVybDonLi4vaW5kZXgvaW5kZXg/YXJncz05OTk5OTk5OTk5J1xyXG5cdFx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdFx0XHQvLyB1bmkucmVkaXJlY3RUbyh7XHJcblx0XHRcdFx0XHRcdC8vIFx0dXJsOicuLi9pbmRleC9pbmRleD9hcmdzPTk5OTk5OTk5OTknXHJcblx0XHRcdFx0XHRcdC8vIH0pO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmxvZ2luPVwi5byA5aeL55m75b2VXCI7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vXCIsY29udGVudDpzdWNjZXNzLm1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdFx0dGhpcy5sb2dpbj1cIuW8gOWni+eZu+W9lVwiO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pLmNhdGNoKGV4PT57XHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhleCk7XHJcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivr1wiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0dGhpcy5sb2dpbj1cIuW8gOWni+eZu+W9lVwiO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cdFx0b25Mb2FkKCkge1xyXG5cdFx0XHRwbHVzLnJ1bnRpbWUuZ2V0UHJvcGVydHkocGx1cy5ydW50aW1lLmFwcGlkLChpbmZvKT0+e1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGluZm8pO1xyXG5cdFx0XHRcdHRoaXMuJGRhdGEudmVyc2lvbj1pbmZvLnZlcnNpb247XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdH1cclxuPC9zY3JpcHQ+XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///51\n");
/***/ }),
/* 52 */
@@ -2240,7 +2240,7 @@
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("/* WEBPACK VAR INJECTION */(function(__f__) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\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  onNavigationBarButtonTap: function onNavigationBarButtonTap(e) {\n    // console.log(e.text);\n    // console.log(e.fontSize);\n    this.$store.state.areaFunc = '';\n    this.$store.commit(\"classAttrList\", null);\n    this.$store.commit(\"classGridStyleInfo\", null);\n    this.$store.commit(\"dicValueInfo\", null);\n    //刷新当前页面\n    // location.reload();\n    uni.redirectTo({\n      url: '../index/index?args=9999999999'\n    });\n  },\n  data: function data() {\n    return {\n      title: 'Hello',\n      data: []\n    };\n  },\n  onLoad: function onLoad(options) {\n    var _this = this;\n    __f__(\"log\", options, \" at pages/index/index.vue:106\");\n\n    // 获取所有AppType=\"MES\",ClientType=\"2\"(PDA)的引用领域功能点信息\n    if (this.$store.state.areaFunc) this.data = this.$store.state.areaFunc.data;else this.$store.dispatch('areaFunc', {}).then(function (success) {\n      __f__(\"log\", success, \" at pages/index/index.vue:113\");\n      if (success.code == '00000') {\n        _this.data = success.data;\n      } else {\n        uni.showModal({\n          title: \"错误\",\n          content: success.msg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      }\n    }).catch(function (ex) {\n      // console.log(ex);\n      uni.showModal({\n        title: \"错误\",\n        content: ex.errMsg,\n        showCancel: false,\n        confirmText: \"取消\"\n      });\n    });\n\n    // var data = {\n    // \t\tin1:\"ll1\",\n    // \t\tin2:\"ll2\",\n    // \t\tin3:\"ll3\",\n    // \t\tin4:\"ll4\",\n    // \t\tin5:\"ll5\",\n    // \t\tin6:\"ll6\",\n    // \t};\n    // for(var i in data)\n    // \tthis.$data.keys.push(i)\n    // this.$data.data = data;\n    // console.log(this.$data.keys);\n  },\n\n  methods: {\n    appCreate: function appCreate(app) {\n      //点击功能点跳转页面\n      __f__(\"log\", app, \" at pages/index/index.vue:139\");\n      if (!app.Param) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"该功能点未配置参数,请重新配置参数!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      if (app.DefCode == '3018') {\n        uni.navigateTo({\n          url: '../modal/classAttr?param=' + app.Param + \"&titlename=\" + app.Name\n        });\n      } else if (app.DefCode == '3037') {\n        uni.navigateTo({\n          url: '../modal/ms_classAttr?param=' + app.Param + \"&titlename=\" + app.Name\n        });\n      }\n      // uni.redirectTo({\n      // \turl:'../index/index?args=9999999999'\n      // });\n    },\n    ontap: function ontap(e) {\n      var _this2 = this;\n      //扫码功能\n      // console.log(e.target)\n      getApp().onScan(function (result) {\n        // console.log(result.decodedata);\n        _this2.$data.data[e.target.dataset['key']] = result.decodedata;\n      });\n    }\n  }\n};\nexports.default = _default;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 18)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vcGFnZXMvaW5kZXgvaW5kZXgudnVlIl0sIm5hbWVzIjpbIm9uTmF2aWdhdGlvbkJhckJ1dHRvblRhcCIsInVuaSIsInVybCIsImRhdGEiLCJ0aXRsZSIsIm9uTG9hZCIsImNvbnRlbnQiLCJzaG93Q2FuY2VsIiwiY29uZmlybVRleHQiLCJtZXRob2RzIiwiYXBwQ3JlYXRlIiwib250YXAiLCJnZXRBcHAiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2VBb0ZBO0VBQ0FBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBQztNQUNBQztJQUNBO0VBQ0E7RUFDQUM7SUFDQTtNQUNBQztNQUNBRDtJQUNBO0VBQ0E7RUFDQUU7SUFBQTtJQUNBOztJQUVBO0lBQ0EsZ0NBQ0EsaURBRUE7TUFDQTtNQUNBO1FBQ0E7TUFDQTtRQUNBSjtVQUFBRztVQUFBRTtVQUFBQztVQUFBQztRQUFBO01BQ0E7SUFDQTtNQUNBO01BQ0FQO1FBQUFHO1FBQUFFO1FBQUFDO1FBQUFDO01BQUE7SUFDQTs7SUFFQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7RUFDQTs7RUFDQUM7SUFDQUM7TUFBQTtNQUNBO01BQ0E7UUFDQVQ7VUFBQUc7VUFBQUU7VUFBQUM7VUFBQUM7UUFBQTtRQUNBO01BQ0E7TUFDQTtRQUNBUDtVQUNBQztRQUNBO01BQ0E7UUFDQUQ7VUFDQUM7UUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO0lBQ0E7SUFDQVM7TUFBQTtNQUFBO01BQ0E7TUFDQUM7UUFDQTtRQUNBO01BQ0E7SUFDQTtFQUVBO0FBQ0E7QUFBQSwyQiIsImZpbGUiOiI1Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbIjxzdHlsZT5cclxuXHQuY29udGVudCB7XHJcblx0XHQvKiBkaXNwbGF5OiBmbGV4O1xyXG5cdFx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuXHRcdGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcblx0XHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgKi9cclxuXHRcdHdpZHRoOiAxMDB2dztcclxuXHRcdGhlaWdodDogMTAwdmg7XHJcblx0XHRiYWNrZ3JvdW5kOiAjRUFFQUVBO1xyXG5cdFx0cGFkZGluZzogMXJweCAwcnB4O1xyXG5cdH1cclxuXHQudi1hcmVhe1xyXG5cdFx0Ym9yZGVyLXJhZGl1czogMTJycHg7XHJcblx0XHRtYXJnaW46IDMwcnB4O1xyXG5cdFx0cGFkZGluZzogMTBycHg7XHJcblx0XHRiYWNrZ3JvdW5kOiAjRkZGRkZGOyAgICBcclxuXHR9XHJcblx0LmFyZWFMaXN0e1xyXG5cdFx0cGFkZGluZzogMDtcclxuXHR9XHJcblx0LmFyZWFMaXN0IGxpe1xyXG5cdFx0LyogYm9yZGVyOiAxcHggc29saWQgIzAwNjJDQzsgKi9cclxuXHRcdGxpc3Qtc3R5bGU6IG5vbmU7XHJcblx0XHQvKiB3aWR0aDogMTIwcnB4OyAqL1xyXG5cdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG5cdFx0cGFkZGluZzogMzBycHggMTZycHggMTZycHggMjBycHg7XHJcblx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XHJcblx0XHRmb250LXNpemU6IDE0cHg7XHJcblx0fVxyXG5cdC5sb2dvIHtcclxuXHRcdGhlaWdodDogMTIwcnB4O1xyXG5cdFx0d2lkdGg6IDEyMHJweDtcclxuXHRcdGJvcmRlci1yYWRpdXM6IDIwcnB4O1xyXG5cdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG5cdFx0dGV4dC1hbGlnbjogY2VudGVyO1xyXG5cdFx0cGFkZGluZzogMThycHg7XHJcblx0XHRjb2xvcjogIzAwMDAwMDtcclxuXHRcdGJvcmRlcjogMHB4IHNvbGlkIHJnYigyMjEsIDIyMSwgMjIxKTtcclxuXHR9XHJcblx0LmxvZ28gaXtcclxuXHRcdGNvbG9yOiAjMDAwMDAwO1xyXG5cdFx0Zm9udC1zaXplOiA0MHB4O1xyXG5cdFx0bGluZS1oZWlnaHQ6IDUzcHg7XHJcblx0fVxyXG5cdFxyXG48L3N0eWxlPlxyXG5cclxuPHRlbXBsYXRlPlxyXG5cdDx2aWV3IGNsYXNzPVwiY29udGVudFwiPlxyXG5cdFx0PCEtLSA8dmlldyBjbGFzcz1cInYtYXJlYVwiPlxyXG5cdFx0XHQ8cD50dHR0dHR0dHR0PC9wPlxyXG5cdFx0XHQ8dWwgY2xhc3M9XCJhcmVhTGlzdFwiPlxyXG5cdFx0XHRcdDxsaT5cclxuXHRcdFx0XHRcdDxhIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiBjbGFzcz1cImxvZ29cIiA+XHJcblx0XHRcdFx0XHRcdDxpIGNsYXNzPVwiZnUtc3lzX2xvZ1wiPjwvaT5cclxuXHRcdFx0XHRcdDwvYT5cclxuXHRcdFx0XHRcdDxwID7mlrDlop7lhYPmlbDmja48L3A+XHJcblx0XHRcdFx0PC9saT5cclxuXHRcdFx0PC91bD5cclxuXHRcdDwvdmlldz4gLS0+XHJcblx0XHRcclxuXHRcdDx2aWV3IGNsYXNzPVwidi1hcmVhXCIgdi1mb3I9XCIoYXJlYSxpbmRleCkgaW4gZGF0YVwiPlxyXG5cdFx0XHQ8cCA6ZGF0YS1rZXk9XCJhcmVhLklEXCI+e3sgYXJlYS5OYW1lIH19PC9wPlxyXG5cdFx0XHQ8dWwgY2xhc3M9XCJhcmVhTGlzdFwiPlxyXG5cdFx0XHRcdDxsaSB2LWZvcj1cIihhcHAsa2V5KSBpbiBhcmVhLkFwcFwiPlxyXG5cdFx0XHRcdFx0PGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIEB0YXA9XCJhcHBDcmVhdGUoYXBwKVwiIGNsYXNzPVwibG9nb1wiIDpzdHlsZT1cInsnYmFja2dyb3VuZC1jb2xvcic6YXBwLkJrQ29sb3IsJ2NvbG9yJzphcHAuQmtDb2xvcn1cIj5cclxuXHRcdFx0XHRcdFx0PGkgOmNsYXNzPVwiYXBwLkltZ0ZvbnRTdHlsZVwiIDpzdHlsZT1cInsnY29sb3InOmFwcC5UeHRDb2xvcn1cIj48L2k+XHJcblx0XHRcdFx0XHQ8L2E+XHJcblx0XHRcdFx0XHQ8cCA6ZGF0YS1rZXk9XCJhcmVhLklEXCI+e3sgYXBwLk5hbWUgfX08L3A+XHJcblx0XHRcdFx0PC9saT5cclxuXHRcdFx0PC91bD5cclxuXHRcdDwvdmlldz5cclxuXHRcdFxyXG5cdFx0PCEtLSA8aW1hZ2UgY2xhc3M9XCJsb2dvXCIgc3JjPVwiL3N0YXRpYy9sb2dvLnBuZ1wiPjwvaW1hZ2U+XHJcblx0XHQ8dmlldyBjbGFzcz1cInRleHQtYXJlYVwiPlxyXG5cdFx0XHQ8dGV4dCBjbGFzcz1cInRpdGxlXCI+e3t0aXRsZX19PC90ZXh0PlxyXG5cdFx0PC92aWV3PlxyXG5cdFx0PHZpZXcgY2xhc3M9XCJcIiB2LWZvcj1cIih2LGluZGV4KSBpbiBkYXRhXCI+XHJcblx0XHRcdDxpbnB1dCB0eXBlPVwidGV4dFwiIDp2YWx1ZT1cInZcIiBAZm9jdXM9XCJvbnRhcFwiIDpkYXRhLWtleT1cImluZGV4XCIgIDprZXk9XCJpbmRleFwiLz5cclxuXHRcdDwvdmlldz4gLS0+XHJcblx0PC92aWV3PlxyXG48L3RlbXBsYXRlPiBcclxuXHJcbjxzY3JpcHQ+XHJcblx0ZXhwb3J0IGRlZmF1bHQge1xyXG5cdFx0b25OYXZpZ2F0aW9uQmFyQnV0dG9uVGFwKGUpIHtcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coZS50ZXh0KTtcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coZS5mb250U2l6ZSk7XHJcblx0XHRcdHRoaXMuJHN0b3JlLnN0YXRlLmFyZWFGdW5jPScnO1xyXG5cdFx0XHR0aGlzLiRzdG9yZS5jb21taXQoXCJjbGFzc0F0dHJMaXN0XCIsbnVsbCk7XHJcblx0XHRcdHRoaXMuJHN0b3JlLmNvbW1pdChcImNsYXNzR3JpZFN0eWxlSW5mb1wiLG51bGwpO1xyXG5cdFx0XHR0aGlzLiRzdG9yZS5jb21taXQoXCJkaWNWYWx1ZUluZm9cIixudWxsKTtcclxuXHRcdFx0Ly/liLfmlrDlvZPliY3pobXpnaJcclxuXHRcdFx0Ly8gbG9jYXRpb24ucmVsb2FkKCk7XHJcblx0XHRcdHVuaS5yZWRpcmVjdFRvKHtcclxuXHRcdFx0XHR1cmw6Jy4uL2luZGV4L2luZGV4P2FyZ3M9OTk5OTk5OTk5OSdcclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHRkYXRhKCkge1xyXG5cdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdHRpdGxlOiAnSGVsbG8nLFxyXG5cdFx0XHRcdGRhdGE6W11cclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHRcdG9uTG9hZChvcHRpb25zKSB7XHJcblx0XHRcdGNvbnNvbGUubG9nKG9wdGlvbnMpO1xyXG5cdFx0XHRcclxuXHRcdFx0Ly8g6I635Y+W5omA5pyJQXBwVHlwZT1cIk1FU1wiLENsaWVudFR5cGU9XCIyXCIoUERBKeeahOW8leeUqOmihuWfn+WKn+iDveeCueS/oeaBr1xyXG5cdFx0XHRpZih0aGlzLiRzdG9yZS5zdGF0ZS5hcmVhRnVuYylcclxuXHRcdFx0XHR0aGlzLmRhdGEgPSB0aGlzLiRzdG9yZS5zdGF0ZS5hcmVhRnVuYy5kYXRhO1xyXG5cdFx0XHRlbHNlXHJcblx0XHRcdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2FyZWFGdW5jJyx7fSkudGhlbihzdWNjZXNzPT57XHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhzdWNjZXNzKTtcclxuXHRcdFx0XHRcdGlmIChzdWNjZXNzLmNvZGU9PScwMDAwMCcpIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5kYXRhID0gc3VjY2Vzcy5kYXRhO1xyXG5cdFx0XHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vXCIsY29udGVudDpzdWNjZXNzLm1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KS5jYXRjaChleD0+e1xyXG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor69cIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHJcblx0XHRcdC8vIHZhciBkYXRhID0ge1xyXG5cdFx0XHQvLyBcdFx0aW4xOlwibGwxXCIsXHJcblx0XHRcdC8vIFx0XHRpbjI6XCJsbDJcIixcclxuXHRcdFx0Ly8gXHRcdGluMzpcImxsM1wiLFxyXG5cdFx0XHQvLyBcdFx0aW40OlwibGw0XCIsXHJcblx0XHRcdC8vIFx0XHRpbjU6XCJsbDVcIixcclxuXHRcdFx0Ly8gXHRcdGluNjpcImxsNlwiLFxyXG5cdFx0XHQvLyBcdH07XHJcblx0XHRcdC8vIGZvcih2YXIgaSBpbiBkYXRhKVxyXG5cdFx0XHQvLyBcdHRoaXMuJGRhdGEua2V5cy5wdXNoKGkpXHJcblx0XHRcdC8vIHRoaXMuJGRhdGEuZGF0YSA9IGRhdGE7XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKHRoaXMuJGRhdGEua2V5cyk7XHJcblx0XHR9LFxyXG5cdFx0bWV0aG9kczoge1xyXG5cdFx0XHRhcHBDcmVhdGUoYXBwKXsgLy/ngrnlh7vlip/og73ngrnot7PovazpobXpnaJcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhhcHApO1xyXG5cdFx0XHRcdGlmKCFhcHAuUGFyYW0pe1xyXG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50Olwi6K+l5Yqf6IO954K55pyq6YWN572u5Y+C5pWw77yM6K+36YeN5paw6YWN572u5Y+C5pWw77yBXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmKGFwcC5EZWZDb2RlID09ICczMDE4Jyl7XHJcblx0XHRcdFx0XHR1bmkubmF2aWdhdGVUbyh7XHJcblx0XHRcdFx0XHRcdHVybDonLi4vbW9kYWwvY2xhc3NBdHRyP3BhcmFtPScrYXBwLlBhcmFtK1wiJnRpdGxlbmFtZT1cIithcHAuTmFtZVxyXG5cdFx0XHRcdFx0fSlcclxuXHRcdFx0XHR9IGVsc2UgaWYoYXBwLkRlZkNvZGUgPT0gJzMwMzcnKXtcclxuXHRcdFx0XHRcdHVuaS5uYXZpZ2F0ZVRvKHtcclxuXHRcdFx0XHRcdFx0dXJsOicuLi9tb2RhbC9tc19jbGFzc0F0dHI/cGFyYW09JythcHAuUGFyYW0rXCImdGl0bGVuYW1lPVwiK2FwcC5OYW1lXHJcblx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdH0gXHJcblx0XHRcdFx0Ly8gdW5pLnJlZGlyZWN0VG8oe1xyXG5cdFx0XHRcdC8vIFx0dXJsOicuLi9pbmRleC9pbmRleD9hcmdzPTk5OTk5OTk5OTknXHJcblx0XHRcdFx0Ly8gfSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdG9udGFwKGUpeyAvL+aJq+eggeWKn+iDvVxyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGUudGFyZ2V0KVxyXG5cdFx0XHRcdGdldEFwcCgpLm9uU2NhbigocmVzdWx0KT0+e1xyXG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2cocmVzdWx0LmRlY29kZWRhdGEpO1xyXG5cdFx0XHRcdFx0dGhpcy4kZGF0YS5kYXRhW2UudGFyZ2V0LmRhdGFzZXRbJ2tleSddXT1yZXN1bHQuZGVjb2RlZGF0YTtcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9XHJcblx0XHRcclxuXHRcdH1cclxuXHR9XHJcbjwvc2NyaXB0PlxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///56\n");
eval("/* WEBPACK VAR INJECTION */(function(__f__) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\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  onNavigationBarButtonTap: function onNavigationBarButtonTap(e) {\n    // console.log(e.text);\n    // console.log(e.fontSize);\n    this.$store.state.areaFunc = '';\n    this.$store.commit(\"classAttrList\", null);\n    this.$store.commit(\"classGridStyleInfo\", null);\n    this.$store.commit(\"dicValueInfo\", null);\n    this.$store.commit(\"subClassAttrList\", null);\n    this.$store.commit(\"subClassGridStyleInfo\", null);\n    //刷新当前页面\n    // location.reload();\n    uni.redirectTo({\n      url: '../index/index?args=9999999999'\n    });\n  },\n  data: function data() {\n    return {\n      title: 'Hello',\n      data: []\n    };\n  },\n  onLoad: function onLoad(options) {\n    var _this = this;\n    __f__(\"log\", options, \" at pages/index/index.vue:108\");\n\n    // 获取所有AppType=\"MES\",ClientType=\"2\"(PDA)的引用领域功能点信息\n    if (this.$store.state.areaFunc) this.data = this.$store.state.areaFunc.data;else this.$store.dispatch('areaFunc', {}).then(function (success) {\n      __f__(\"log\", success, \" at pages/index/index.vue:115\");\n      if (success.code == '00000') {\n        _this.data = success.data;\n      } else {\n        uni.showModal({\n          title: \"错误\",\n          content: success.msg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      }\n    }).catch(function (ex) {\n      // console.log(ex);\n      uni.showModal({\n        title: \"错误\",\n        content: ex.errMsg,\n        showCancel: false,\n        confirmText: \"取消\"\n      });\n    });\n\n    // var data = {\n    // \t\tin1:\"ll1\",\n    // \t\tin2:\"ll2\",\n    // \t\tin3:\"ll3\",\n    // \t\tin4:\"ll4\",\n    // \t\tin5:\"ll5\",\n    // \t\tin6:\"ll6\",\n    // \t};\n    // for(var i in data)\n    // \tthis.$data.keys.push(i)\n    // this.$data.data = data;\n    // console.log(this.$data.keys);\n  },\n\n  methods: {\n    appCreate: function appCreate(app) {\n      //点击功能点跳转页面\n      __f__(\"log\", app, \" at pages/index/index.vue:141\");\n      if (!app.Param) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"该功能点未配置参数,请重新配置参数!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      if (app.DefCode == '3018') {\n        uni.navigateTo({\n          url: '../modal/classAttr?param=' + app.Param + \"&titlename=\" + app.Name\n        });\n      } else if (app.DefCode == '3037') {\n        uni.navigateTo({\n          url: '../modal/ms_classAttr?param=' + app.Param + \"&titlename=\" + app.Name\n        });\n      }\n      // uni.redirectTo({\n      // \turl:'../index/index?args=9999999999'\n      // });\n    },\n    ontap: function ontap(e) {\n      var _this2 = this;\n      //扫码功能\n      // console.log(e.target)\n      getApp().onScan(function (result) {\n        // console.log(result.decodedata);\n        _this2.$data.data[e.target.dataset['key']] = result.decodedata;\n      });\n    }\n  }\n};\nexports.default = _default;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 18)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vcGFnZXMvaW5kZXgvaW5kZXgudnVlIl0sIm5hbWVzIjpbIm9uTmF2aWdhdGlvbkJhckJ1dHRvblRhcCIsInVuaSIsInVybCIsImRhdGEiLCJ0aXRsZSIsIm9uTG9hZCIsImNvbnRlbnQiLCJzaG93Q2FuY2VsIiwiY29uZmlybVRleHQiLCJtZXRob2RzIiwiYXBwQ3JlYXRlIiwib250YXAiLCJnZXRBcHAiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2VBb0ZBO0VBQ0FBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQUM7TUFDQUM7SUFDQTtFQUNBO0VBQ0FDO0lBQ0E7TUFDQUM7TUFDQUQ7SUFDQTtFQUNBO0VBQ0FFO0lBQUE7SUFDQTs7SUFFQTtJQUNBLGdDQUNBLGlEQUVBO01BQ0E7TUFDQTtRQUNBO01BQ0E7UUFDQUo7VUFBQUc7VUFBQUU7VUFBQUM7VUFBQUM7UUFBQTtNQUNBO0lBQ0E7TUFDQTtNQUNBUDtRQUFBRztRQUFBRTtRQUFBQztRQUFBQztNQUFBO0lBQ0E7O0lBRUE7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0VBQ0E7O0VBQ0FDO0lBQ0FDO01BQUE7TUFDQTtNQUNBO1FBQ0FUO1VBQUFHO1VBQUFFO1VBQUFDO1VBQUFDO1FBQUE7UUFDQTtNQUNBO01BQ0E7UUFDQVA7VUFDQUM7UUFDQTtNQUNBO1FBQ0FEO1VBQ0FDO1FBQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtJQUNBO0lBQ0FTO01BQUE7TUFBQTtNQUNBO01BQ0FDO1FBQ0E7UUFDQTtNQUNBO0lBQ0E7RUFFQTtBQUNBO0FBQUEsMkIiLCJmaWxlIjoiNTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyI8c3R5bGU+XHJcblx0LmNvbnRlbnQge1xyXG5cdFx0LyogZGlzcGxheTogZmxleDtcclxuXHRcdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcblx0XHRhbGlnbi1pdGVtczogY2VudGVyO1xyXG5cdFx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7ICovXHJcblx0XHR3aWR0aDogMTAwdnc7XHJcblx0XHRoZWlnaHQ6IDEwMHZoO1xyXG5cdFx0YmFja2dyb3VuZDogI0VBRUFFQTtcclxuXHRcdHBhZGRpbmc6IDFycHggMHJweDtcclxuXHR9XHJcblx0LnYtYXJlYXtcclxuXHRcdGJvcmRlci1yYWRpdXM6IDEycnB4O1xyXG5cdFx0bWFyZ2luOiAzMHJweDtcclxuXHRcdHBhZGRpbmc6IDEwcnB4O1xyXG5cdFx0YmFja2dyb3VuZDogI0ZGRkZGRjsgICAgXHJcblx0fVxyXG5cdC5hcmVhTGlzdHtcclxuXHRcdHBhZGRpbmc6IDA7XHJcblx0fVxyXG5cdC5hcmVhTGlzdCBsaXtcclxuXHRcdC8qIGJvcmRlcjogMXB4IHNvbGlkICMwMDYyQ0M7ICovXHJcblx0XHRsaXN0LXN0eWxlOiBub25lO1xyXG5cdFx0Lyogd2lkdGg6IDEyMHJweDsgKi9cclxuXHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuXHRcdHBhZGRpbmc6IDMwcnB4IDE2cnB4IDE2cnB4IDIwcnB4O1xyXG5cdFx0dGV4dC1hbGlnbjogY2VudGVyO1xyXG5cdFx0Zm9udC1zaXplOiAxNHB4O1xyXG5cdH1cclxuXHQubG9nbyB7XHJcblx0XHRoZWlnaHQ6IDEyMHJweDtcclxuXHRcdHdpZHRoOiAxMjBycHg7XHJcblx0XHRib3JkZXItcmFkaXVzOiAyMHJweDtcclxuXHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuXHRcdHRleHQtYWxpZ246IGNlbnRlcjtcclxuXHRcdHBhZGRpbmc6IDE4cnB4O1xyXG5cdFx0Y29sb3I6ICMwMDAwMDA7XHJcblx0XHRib3JkZXI6IDBweCBzb2xpZCByZ2IoMjIxLCAyMjEsIDIyMSk7XHJcblx0fVxyXG5cdC5sb2dvIGl7XHJcblx0XHRjb2xvcjogIzAwMDAwMDtcclxuXHRcdGZvbnQtc2l6ZTogNDBweDtcclxuXHRcdGxpbmUtaGVpZ2h0OiA1M3B4O1xyXG5cdH1cclxuXHRcclxuPC9zdHlsZT5cclxuXHJcbjx0ZW1wbGF0ZT5cclxuXHQ8dmlldyBjbGFzcz1cImNvbnRlbnRcIj5cclxuXHRcdDwhLS0gPHZpZXcgY2xhc3M9XCJ2LWFyZWFcIj5cclxuXHRcdFx0PHA+dHR0dHR0dHR0dDwvcD5cclxuXHRcdFx0PHVsIGNsYXNzPVwiYXJlYUxpc3RcIj5cclxuXHRcdFx0XHQ8bGk+XHJcblx0XHRcdFx0XHQ8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgY2xhc3M9XCJsb2dvXCIgPlxyXG5cdFx0XHRcdFx0XHQ8aSBjbGFzcz1cImZ1LXN5c19sb2dcIj48L2k+XHJcblx0XHRcdFx0XHQ8L2E+XHJcblx0XHRcdFx0XHQ8cCA+5paw5aKe5YWD5pWw5o2uPC9wPlxyXG5cdFx0XHRcdDwvbGk+XHJcblx0XHRcdDwvdWw+XHJcblx0XHQ8L3ZpZXc+IC0tPlxyXG5cdFx0XHJcblx0XHQ8dmlldyBjbGFzcz1cInYtYXJlYVwiIHYtZm9yPVwiKGFyZWEsaW5kZXgpIGluIGRhdGFcIj5cclxuXHRcdFx0PHAgOmRhdGEta2V5PVwiYXJlYS5JRFwiPnt7IGFyZWEuTmFtZSB9fTwvcD5cclxuXHRcdFx0PHVsIGNsYXNzPVwiYXJlYUxpc3RcIj5cclxuXHRcdFx0XHQ8bGkgdi1mb3I9XCIoYXBwLGtleSkgaW4gYXJlYS5BcHBcIj5cclxuXHRcdFx0XHRcdDxhIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiBAdGFwPVwiYXBwQ3JlYXRlKGFwcClcIiBjbGFzcz1cImxvZ29cIiA6c3R5bGU9XCJ7J2JhY2tncm91bmQtY29sb3InOmFwcC5Ca0NvbG9yLCdjb2xvcic6YXBwLkJrQ29sb3J9XCI+XHJcblx0XHRcdFx0XHRcdDxpIDpjbGFzcz1cImFwcC5JbWdGb250U3R5bGVcIiA6c3R5bGU9XCJ7J2NvbG9yJzphcHAuVHh0Q29sb3J9XCI+PC9pPlxyXG5cdFx0XHRcdFx0PC9hPlxyXG5cdFx0XHRcdFx0PHAgOmRhdGEta2V5PVwiYXJlYS5JRFwiPnt7IGFwcC5OYW1lIH19PC9wPlxyXG5cdFx0XHRcdDwvbGk+XHJcblx0XHRcdDwvdWw+XHJcblx0XHQ8L3ZpZXc+XHJcblx0XHRcclxuXHRcdDwhLS0gPGltYWdlIGNsYXNzPVwibG9nb1wiIHNyYz1cIi9zdGF0aWMvbG9nby5wbmdcIj48L2ltYWdlPlxyXG5cdFx0PHZpZXcgY2xhc3M9XCJ0ZXh0LWFyZWFcIj5cclxuXHRcdFx0PHRleHQgY2xhc3M9XCJ0aXRsZVwiPnt7dGl0bGV9fTwvdGV4dD5cclxuXHRcdDwvdmlldz5cclxuXHRcdDx2aWV3IGNsYXNzPVwiXCIgdi1mb3I9XCIodixpbmRleCkgaW4gZGF0YVwiPlxyXG5cdFx0XHQ8aW5wdXQgdHlwZT1cInRleHRcIiA6dmFsdWU9XCJ2XCIgQGZvY3VzPVwib250YXBcIiA6ZGF0YS1rZXk9XCJpbmRleFwiICA6a2V5PVwiaW5kZXhcIi8+XHJcblx0XHQ8L3ZpZXc+IC0tPlxyXG5cdDwvdmlldz5cclxuPC90ZW1wbGF0ZT4gXHJcblxyXG48c2NyaXB0PlxyXG5cdGV4cG9ydCBkZWZhdWx0IHtcclxuXHRcdG9uTmF2aWdhdGlvbkJhckJ1dHRvblRhcChlKSB7XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKGUudGV4dCk7XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKGUuZm9udFNpemUpO1xyXG5cdFx0XHR0aGlzLiRzdG9yZS5zdGF0ZS5hcmVhRnVuYz0nJztcclxuXHRcdFx0dGhpcy4kc3RvcmUuY29tbWl0KFwiY2xhc3NBdHRyTGlzdFwiLG51bGwpO1xyXG5cdFx0XHR0aGlzLiRzdG9yZS5jb21taXQoXCJjbGFzc0dyaWRTdHlsZUluZm9cIixudWxsKTtcclxuXHRcdFx0dGhpcy4kc3RvcmUuY29tbWl0KFwiZGljVmFsdWVJbmZvXCIsbnVsbCk7XHJcblx0XHRcdHRoaXMuJHN0b3JlLmNvbW1pdChcInN1YkNsYXNzQXR0ckxpc3RcIixudWxsKTtcclxuXHRcdFx0dGhpcy4kc3RvcmUuY29tbWl0KFwic3ViQ2xhc3NHcmlkU3R5bGVJbmZvXCIsbnVsbCk7XHJcblx0XHRcdC8v5Yi35paw5b2T5YmN6aG16Z2iXHJcblx0XHRcdC8vIGxvY2F0aW9uLnJlbG9hZCgpO1xyXG5cdFx0XHR1bmkucmVkaXJlY3RUbyh7XHJcblx0XHRcdFx0dXJsOicuLi9pbmRleC9pbmRleD9hcmdzPTk5OTk5OTk5OTknXHJcblx0XHRcdH0pO1xyXG5cdFx0fSxcclxuXHRcdGRhdGEoKSB7XHJcblx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0dGl0bGU6ICdIZWxsbycsXHJcblx0XHRcdFx0ZGF0YTpbXVxyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cdFx0b25Mb2FkKG9wdGlvbnMpIHtcclxuXHRcdFx0Y29uc29sZS5sb2cob3B0aW9ucyk7XHJcblx0XHRcdFxyXG5cdFx0XHQvLyDojrflj5bmiYDmnIlBcHBUeXBlPVwiTUVTXCIsQ2xpZW50VHlwZT1cIjJcIihQREEp55qE5byV55So6aKG5Z+f5Yqf6IO954K55L+h5oGvXHJcblx0XHRcdGlmKHRoaXMuJHN0b3JlLnN0YXRlLmFyZWFGdW5jKVxyXG5cdFx0XHRcdHRoaXMuZGF0YSA9IHRoaXMuJHN0b3JlLnN0YXRlLmFyZWFGdW5jLmRhdGE7XHJcblx0XHRcdGVsc2VcclxuXHRcdFx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnYXJlYUZ1bmMnLHt9KS50aGVuKHN1Y2Nlc3M9PntcclxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xyXG5cdFx0XHRcdFx0aWYgKHN1Y2Nlc3MuY29kZT09JzAwMDAwJykge1xyXG5cdFx0XHRcdFx0XHR0aGlzLmRhdGEgPSBzdWNjZXNzLmRhdGE7XHJcblx0XHRcdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor69cIixjb250ZW50OnN1Y2Nlc3MubXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pLmNhdGNoKGV4PT57XHJcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhleCk7XHJcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivr1wiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHRcclxuXHRcdFx0Ly8gdmFyIGRhdGEgPSB7XHJcblx0XHRcdC8vIFx0XHRpbjE6XCJsbDFcIixcclxuXHRcdFx0Ly8gXHRcdGluMjpcImxsMlwiLFxyXG5cdFx0XHQvLyBcdFx0aW4zOlwibGwzXCIsXHJcblx0XHRcdC8vIFx0XHRpbjQ6XCJsbDRcIixcclxuXHRcdFx0Ly8gXHRcdGluNTpcImxsNVwiLFxyXG5cdFx0XHQvLyBcdFx0aW42OlwibGw2XCIsXHJcblx0XHRcdC8vIFx0fTtcclxuXHRcdFx0Ly8gZm9yKHZhciBpIGluIGRhdGEpXHJcblx0XHRcdC8vIFx0dGhpcy4kZGF0YS5rZXlzLnB1c2goaSlcclxuXHRcdFx0Ly8gdGhpcy4kZGF0YS5kYXRhID0gZGF0YTtcclxuXHRcdFx0Ly8gY29uc29sZS5sb2codGhpcy4kZGF0YS5rZXlzKTtcclxuXHRcdH0sXHJcblx0XHRtZXRob2RzOiB7XHJcblx0XHRcdGFwcENyZWF0ZShhcHApeyAvL+eCueWHu+WKn+iDveeCuei3s+i9rOmhtemdolxyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGFwcCk7XHJcblx0XHRcdFx0aWYoIWFwcC5QYXJhbSl7XHJcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCLor6Xlip/og73ngrnmnKrphY3nva7lj4LmlbDvvIzor7fph43mlrDphY3nva7lj4LmlbDvvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYoYXBwLkRlZkNvZGUgPT0gJzMwMTgnKXtcclxuXHRcdFx0XHRcdHVuaS5uYXZpZ2F0ZVRvKHtcclxuXHRcdFx0XHRcdFx0dXJsOicuLi9tb2RhbC9jbGFzc0F0dHI/cGFyYW09JythcHAuUGFyYW0rXCImdGl0bGVuYW1lPVwiK2FwcC5OYW1lXHJcblx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdH0gZWxzZSBpZihhcHAuRGVmQ29kZSA9PSAnMzAzNycpe1xyXG5cdFx0XHRcdFx0dW5pLm5hdmlnYXRlVG8oe1xyXG5cdFx0XHRcdFx0XHR1cmw6Jy4uL21vZGFsL21zX2NsYXNzQXR0cj9wYXJhbT0nK2FwcC5QYXJhbStcIiZ0aXRsZW5hbWU9XCIrYXBwLk5hbWVcclxuXHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0fSBcclxuXHRcdFx0XHQvLyB1bmkucmVkaXJlY3RUbyh7XHJcblx0XHRcdFx0Ly8gXHR1cmw6Jy4uL2luZGV4L2luZGV4P2FyZ3M9OTk5OTk5OTk5OSdcclxuXHRcdFx0XHQvLyB9KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0b250YXAoZSl7IC8v5omr56CB5Yqf6IO9XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coZS50YXJnZXQpXHJcblx0XHRcdFx0Z2V0QXBwKCkub25TY2FuKChyZXN1bHQpPT57XHJcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhyZXN1bHQuZGVjb2RlZGF0YSk7XHJcblx0XHRcdFx0XHR0aGlzLiRkYXRhLmRhdGFbZS50YXJnZXQuZGF0YXNldFsna2V5J11dPXJlc3VsdC5kZWNvZGVkYXRhO1xyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH1cclxuXHRcdFxyXG5cdFx0fVxyXG5cdH1cclxuPC9zY3JpcHQ+XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///56\n");
/***/ }),
/* 57 */
@@ -14922,7 +14922,7 @@
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("/* WEBPACK VAR INJECTION */(function(__f__) {\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ 1);\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ 67));\nvar _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ 69));\nvar _pickerAddress = _interopRequireDefault(__webpack_require__(/*! ../../js/pickerAddress/pickerAddress.vue */ 70));\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\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  components: {\n    pickerAddress: _pickerAddress.default\n  },\n  data: function data() {\n    return {\n      title: '新增',\n      param: {},\n      classAttrList: [],\n      classGridStyle: [],\n      edit_inital_event: \"\",\n      //弹窗初始化事件ID\n      edit_ok_event: \"\",\n      //弹窗点击OK 触发事件ID\n      edit_select_compose_event: \"\",\n      //选择组成对象时调用\n      edit_compose_cls_id: \"\",\n      global_attr: [],\n      refdatastore: [],\n      //引用数据存储区// {attr:'G_PRJ_' + bindattr + '_ID', value:info.id}\n      scanCodeVal: \"\",\n      subClassAttrList: [],\n      subPanelList: [],\n      subClassGridStyle: []\n    };\n  },\n  onLoad: function onLoad(options) {\n    // console.log(options);\n    uni.setNavigationBarTitle({\n      title: options.titlename\n    }); //设置顶部标题 \n    var param = JSON.parse(options.param);\n    this.$data.title = param.Add_BtnName ? param.Add_BtnName : options.titlename; //设置按钮文字\n    __f__(\"log\", param, \" at pages/modal/ms_classAttr.vue:621\");\n    if (!param.Master_Cls.View_Style) {\n      uni.showModal({\n        title: \"提示\",\n        content: \"该功能点未配置界面窗口,请重新配置!\",\n        showCancel: false,\n        confirmText: \"取消\"\n      });\n      return;\n    }\n    if (!param.Master_Cls.View_Style.Name) {\n      uni.showModal({\n        title: \"提示\",\n        content: \"该功能点未配置窗口样式,请重新配置!\",\n        showCancel: false,\n        confirmText: \"取消\"\n      });\n      return;\n    }\n    this.$data.param = param;\n    // var edit_dlg = {\n    //     Model: param.EditDlgMode,\n    //     Name: param.Master_Cls.View_Style.Name\n    // }\n    //主数据类获取\n    var dataInfo = {\n      class_id: param.Master_Cls.ID\n    };\n    var $this = this;\n    $this.$store.state.thisareaFuncID = param.Master_Cls.ID;\n    // console.log($this.$store.getters.getclassAttrList);\n    if ($this.$store.getters.getclassAttrList) {\n      $this.$data.classAttrList = $this.$store.getters.getclassAttrList.data;\n      $this.classGridStyleInfo(param.Master_Cls.ID, $this.$data.param.Master_Cls.View_Style.Name, 'Mast');\n    } else {\n      $this.$store.dispatch('classAttrList', dataInfo).then(function (success) {\n        // console.log(success);\n        if (success.code == '00000') {\n          $this.$data.classAttrList = success.data;\n          $this.classGridStyleInfo(param.Master_Cls.ID, $this.$data.param.Master_Cls.View_Style.Name, 'Mast');\n        } else {\n          uni.showModal({\n            title: \"错误1\",\n            content: success.msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误1.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    }\n\n    //从数据类获取\n    var subdataInfo = {\n      class_id: param.Sub_Cls.ID\n    };\n    $this.$store.state.thisareaFuncSubID = param.Sub_Cls.ID;\n    if ($this.$store.getters.getSubClassAttrList) {\n      $this.$data.subClassAttrList = $this.$store.getters.getSubClassAttrList.data;\n      $this.classGridStyleInfo(param.Sub_Cls.ID, $this.$data.param.Sub_Cls.View_Style.Name, 'Sub');\n    } else {\n      $this.$store.dispatch('subClassAttrList', subdataInfo).then(function (success) {\n        // console.log(success);\n        if (success.code == '00000') {\n          $this.$data.subClassAttrList = success.data;\n          $this.classGridStyleInfo(param.Sub_Cls.ID, $this.$data.param.Sub_Cls.View_Style.Name, 'Sub');\n        } else {\n          uni.showModal({\n            title: \"错误1_1\",\n            content: success.msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误1_1.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    }\n  },\n  methods: {\n    cancel: function cancel(e) {\n      uni.navigateBack({\n        delta: 1 //返回层数,2则上上页\n      });\n    },\n    panel_del: function panel_del(index) {\n      if (this.$data.subPanelList[index].scanCodeVal == this.$data.scanCodeVal) {\n        this.$data.scanCodeVal = '';\n      }\n      this.$data.subPanelList.splice(index, 1);\n    },\n    classGridStyleInfo: function classGridStyleInfo(clsid, styleName, clsType) {\n      var _this = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {\n        var $this, gridstyleInfo;\n        return _regenerator.default.wrap(function _callee$(_context) {\n          while (1) {\n            switch (_context.prev = _context.next) {\n              case 0:\n                $this = _this;\n                gridstyleInfo = {\n                  class_id: clsid,\n                  name: styleName,\n                  type: '2'\n                };\n                $this.$store.state.thisEditName = styleName;\n                // console.log($this.$store.getters.getclassGridStyleInfo);\n                //获取主数据类界面样式\n                if (clsType == 'Mast') {\n                  if ($this.$store.getters.getclassGridStyleInfo) {\n                    $this.$data.classGridStyle = $this.$store.getters.getclassGridStyleInfo.data;\n                    $this.class_attr_init();\n                  } else {\n                    //console.log(gridstyleInfo);\n                    $this.$store.dispatch('classGridStyleInfo', gridstyleInfo).then(function (success) {\n                      // console.log(success);\n                      if (success.code == '00000') {\n                        success.data.StyleDef = JSON.parse(success.data.StyleDef);\n                        $this.$data.classGridStyle = success.data;\n                        $this.class_attr_init();\n                      } else {\n                        uni.showModal({\n                          title: \"错误1.2\",\n                          content: success.msg,\n                          showCancel: false,\n                          confirmText: \"取消\"\n                        });\n                      }\n                    }).catch(function (ex) {\n                      __f__(\"log\", ex, \" at pages/modal/ms_classAttr.vue:724\");\n                      uni.showModal({\n                        title: \"错误1.3\",\n                        content: ex.errMsg,\n                        showCancel: false,\n                        confirmText: \"取消\"\n                      });\n                    });\n                  }\n                } else if (clsType == 'Sub') {\n                  //获取从数据类界面样式\n                  if ($this.$store.getters.getSubClassGridStyleInfo) {\n                    $this.$data.subClassGridStyle = $this.$store.getters.getSubClassGridStyleInfo.data;\n                    $this.subClass_attr_init();\n                  } else {\n                    //console.log(gridstyleInfo);\n                    $this.$store.dispatch('subClassGridStyleInfo', gridstyleInfo).then(function (success) {\n                      // console.log(success);\n                      if (success.code == '00000') {\n                        success.data.StyleDef = JSON.parse(success.data.StyleDef);\n                        $this.$data.subClassGridStyle = success.data;\n                        $this.subClass_attr_init();\n                      } else {\n                        uni.showModal({\n                          title: \"错误1.2\",\n                          content: success.msg,\n                          showCancel: false,\n                          confirmText: \"取消\"\n                        });\n                      }\n                    }).catch(function (ex) {\n                      __f__(\"log\", ex, \" at pages/modal/ms_classAttr.vue:745\");\n                      uni.showModal({\n                        title: \"错误1.3\",\n                        content: ex.errMsg,\n                        showCancel: false,\n                        confirmText: \"取消\"\n                      });\n                    });\n                  }\n                }\n              case 4:\n              case \"end\":\n                return _context.stop();\n            }\n          }\n        }, _callee);\n      }))();\n    },\n    ontap: function ontap(e) {\n      var _this2 = this;\n      //扫码功能\n      //console.log(e.target)\n      getApp().onScan(function (result) {\n        //console.log(result.decodedata);\n        var isVal = _this2.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value;\n        //主数据类扫码查询数据\n        if (isVal != result.decodedata) {\n          _this2.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = result.decodedata;\n          //子数据类扫码区事件脚本\n          var eventid = _this2.$data.param.Scan_Code.Input_Change_Event.ID;\n          if (eventid) {\n            var req = [];\n            var attrlist = _this2.$data.classAttrList; //主数据类属性\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                  attr: ar.Name,\n                  val: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') req.push({\n                  attr: ar.Name,\n                  val: ar.Value ? '1' : '0'\n                });else req.push({\n                  attr: ar.Name,\n                  val: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var info = {\n              eventid: eventid,\n              edtype: \"0\",\n              projectid: '',\n              rclsid: '',\n              robjid: '',\n              userlogin: '',\n              clsid: _this2.$data.param.Sub_Cls.ID,\n              objid: \"\",\n              attr: req,\n              inputParamter: [{\n                attr: 'mast_input_3037',\n                value: result.decodedata\n              }]\n            };\n            _this2.scan_DataObjRunCustomEvent(info, \"\");\n          }\n        }\n      });\n    },\n    scan_ontap: function scan_ontap(e) {\n      var _this3 = this;\n      //扫码区扫码功能\n      //console.log(e.target)\n      getApp().onScan(function (result) {\n        __f__(\"log\", result.decodedata, \" at pages/modal/ms_classAttr.vue:799\");\n        var isflag = true;\n        for (var i in _this3.$data.subPanelList) {\n          if (_this3.$data.subPanelList[i].scanCodeVal == result.decodedata) isflag = false;\n        }\n        //子数据类扫码查询数据\n        if (isflag) {\n          _this3.$data.scanCodeVal = result.decodedata;\n          var eventid = _this3.$data.param.Scan_Code.Input_Change_Event.ID;\n          if (eventid) {\n            var req = [];\n            var attrlist = _this3.$data.subClassAttrList;\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                  attr: ar.Name,\n                  value: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? '1' : '0'\n                });else req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var info = {\n              eventid: eventid,\n              edtype: \"0\",\n              projectid: '',\n              rclsid: '',\n              robjid: '',\n              userlogin: '',\n              clsid: _this3.$data.param.Sub_Cls.ID,\n              objid: \"\",\n              attr: req,\n              inputParamter: [{\n                attr: 'input_3037',\n                value: _this3.$data.scanCodeVal\n              }]\n            };\n            _this3.scan_DataObjRunCustomEvent(info, \"\");\n          }\n        }\n      });\n    },\n    onarrow: function onarrow(index, open) {\n      // console.log(index+'--'+open);\n      this.$data.classAttrList[index].Open = open == true ? false : true;\n    },\n    ondateTime: function ondateTime(e) {\n      //console.log(e.target)\n      this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = e.target.value;\n    },\n    onchange: function onchange(e) {\n      __f__(\"log\", e.target, \" at pages/modal/ms_classAttr.vue:853\");\n      var value = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].dictitem[e.target.value];\n      var data_attr = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']];\n      __f__(\"log\", data_attr, \" at pages/modal/ms_classAttr.vue:856\");\n      if (value.Name != data_attr.Value) {\n        this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = value.Name;\n        __f__(\"log\", this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value, \" at pages/modal/ms_classAttr.vue:859\");\n        var eventid = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].action;\n        if (eventid) {\n          // self.event_no_sub = 1;\n          var req = [];\n          var attrlist = this.$data.classAttrList;\n          for (var i = 0; i < attrlist.length; i++) {\n            var attr = attrlist[i].Attr;\n            for (var j = 0; j < attr.length; j++) {\n              var ar = attr[j];\n              if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n              if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                attr: ar.Name,\n                val: ar.ValID ? ar.ValID : ''\n              });else if (ar.Type == '布尔值') req.push({\n                attr: ar.Name,\n                val: ar.Value ? '1' : '0'\n              });else req.push({\n                attr: ar.Name,\n                val: ar.Value ? ar.Value : ''\n              });\n            }\n          }\n          var info = {\n            eventid: eventid,\n            edtype: \"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: this.$data.param.Master_Cls.ID,\n            objid: \"\",\n            attr: req\n          };\n          this.DataObjRunCustomEvent(info);\n        }\n      }\n    },\n    onchange2: function onchange2(item, value, delvalue) {\n      // console.log(item);\n      // console.log(value);\n      // console.log(delvalue);\n      if (item.length == 0) {\n        //为空时,清空属性value\n        var index,\n          iindex,\n          dindex = 0;\n        for (var i in this.$data.classAttrList) {\n          for (var j in this.$data.classAttrList[i].Attr) {\n            for (var d in this.$data.classAttrList[i].Attr[j].dictitem) {\n              if (delvalue[0].Name == this.$data.classAttrList[i].Attr[j].dictitem[d].Name) {\n                this.$data.classAttrList[i].Attr[j].Value = \"\";\n              }\n            }\n          }\n        }\n      }\n      for (var v in item) {\n        var index,\n          iindex,\n          dindex = 0;\n        for (var i in this.$data.classAttrList) {\n          for (var j in this.$data.classAttrList[i].Attr) {\n            for (var d in this.$data.classAttrList[i].Attr[j].dictitem) {\n              if (item[v].Name == this.$data.classAttrList[i].Attr[j].dictitem[d].Name) {\n                index = i;\n                iindex = j;\n                dindex = d;\n              }\n            }\n          }\n        }\n        var itemvalue = item[v];\n        var data_attr = this.$data.classAttrList[index].Attr[iindex];\n        __f__(\"log\", data_attr, \" at pages/modal/ms_classAttr.vue:926\");\n        if (itemvalue.Name != data_attr.Value) {\n          this.$data.classAttrList[index].Attr[iindex].Value = value;\n          __f__(\"log\", this.$data.classAttrList[index].Attr[iindex].Value, \" at pages/modal/ms_classAttr.vue:929\");\n          var eventid = this.$data.classAttrList[index].Attr[iindex].action;\n          if (eventid) {\n            // self.event_no_sub = 1;\n            var req = [];\n            var attrlist = this.$data.classAttrList;\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                  attr: ar.Name,\n                  val: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') req.push({\n                  attr: ar.Name,\n                  val: ar.Value ? '1' : '0'\n                });else if (ar.Type == '字典' || ar.Type == '字典-字符串') req.push({\n                  attr: ar.Name,\n                  val: itemvalue.Name\n                });else req.push({\n                  attr: ar.Name,\n                  val: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var info = {\n              eventid: eventid,\n              edtype: \"0\",\n              projectid: '',\n              rclsid: '',\n              robjid: '',\n              userlogin: '',\n              clsid: this.$data.param.Master_Cls.ID,\n              objid: \"\",\n              attr: req\n            };\n            this.DataObjRunCustomEvent(info);\n          }\n        }\n      }\n    },\n    onevent: function onevent(e) {\n      // console.log(e.target);\n      var data_attr = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']];\n      // console.log(data_attr);\n      if (e.target.value != data_attr.Value) {\n        this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = e.target.value;\n        var eventid = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].action;\n        if (eventid) {\n          // self.event_no_sub = 1;\n          var req = [];\n          var attrlist = this.$data.classAttrList;\n          for (var i = 0; i < attrlist.length; i++) {\n            var attr = attrlist[i].Attr;\n            for (var j = 0; j < attr.length; j++) {\n              var ar = attr[j];\n              if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n              if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                attr: ar.Name,\n                val: ar.ValID ? ar.ValID : ''\n              });else if (ar.Type == '布尔值') req.push({\n                attr: ar.Name,\n                val: ar.Value ? '1' : '0'\n              });else req.push({\n                attr: ar.Name,\n                val: ar.Value ? ar.Value : ''\n              });\n            }\n          }\n          var info = {\n            eventid: eventid,\n            edtype: \"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: this.$data.param.Master_Cls.ID,\n            objid: \"\",\n            attr: req\n          };\n          this.DataObjRunCustomEvent(info, data_attr);\n        }\n      }\n    },\n    oncheck: function oncheck(e) {\n      // console.log(e.target);\n      var ischecked = e.target.dataset.ischeck ? false : true;\n      var data_attr = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']];\n      // console.log(data_attr);\n      if (ischecked != data_attr.Value) {\n        this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = ischecked;\n        var eventid = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].action;\n        if (eventid) {\n          // self.event_no_sub = 1;\n          var req = [];\n          var attrlist = this.$data.classAttrList;\n          for (var i = 0; i < attrlist.length; i++) {\n            var attr = attrlist[i].Attr;\n            for (var j = 0; j < attr.length; j++) {\n              var ar = attr[j];\n              if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n              if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                attr: ar.Name,\n                val: ar.ValID ? ar.ValID : ''\n              });else if (ar.Type == '布尔值') req.push({\n                attr: ar.Name,\n                val: ar.Value ? '1' : '0'\n              });else req.push({\n                attr: ar.Name,\n                val: ar.Value ? ar.Value : ''\n              });\n            }\n          }\n          var info = {\n            eventid: eventid,\n            edtype: \"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: this.$data.param.Master_Cls.ID,\n            objid: \"\",\n            attr: req\n          };\n          this.DataObjRunCustomEvent(info);\n        }\n      }\n    },\n    inputValListIsDel: function inputValListIsDel(index) {\n      // console.log(index);\n      this.$data.inputValList.splice(index, 1); //删除tabPagejson的内容\n      // console.log(this.$data.inputValList);\n    },\n    addresschange: function addresschange(e) {\n      // console.log(e.target);\n      __f__(\"log\", e.data.join(';'), \" at pages/modal/ms_classAttr.vue:1060\");\n      this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = e.data.join(';');\n    },\n    classAttr_extButton: function classAttr_extButton(index, iindex) {\n      var $this = this;\n      var before_click_button = $this.$data.classAttrList[index].Attr[iindex].before_click_button;\n      var button_callback = $this.$data.classAttrList[index].Attr[iindex].button_callback;\n      if (!before_click_button) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"before_click_button-event_id为空!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      if (!button_callback) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"button_callback-event_id为空!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      var data_attr = this.$data.classAttrList[index].Attr[iindex];\n      this.DataObjRunCustomEvent_Return(before_click_button, data_attr, button_callback, index, iindex);\n    },\n    scan_classAttr_extButton: function scan_classAttr_extButton(e) {\n      //---------未完成-----------\n      var $this = this;\n      var Before_Select_Event = $this.$data.param.Scan_Code.Before_Select_Event.ID;\n      var After_Select_Event = $this.$data.param.Scan_Code.After_Select_Event.ID;\n      if (!Before_Select_Event) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"选择按钮前事件为空!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      if (!After_Select_Event) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"新增按钮后事件为空!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      // var data_attr = this.$data.classAttrList[index].Attr[iindex];\n      this.DataObjRunCustomEvent_Return(Before_Select_Event, '', After_Select_Event, '', '');\n    },\n    classAttr_AddPer: function classAttr_AddPer(index, iindex) {\n      var param = {\n        index: index,\n        iindex: iindex\n      };\n      var $this = this;\n      uni.navigateTo({\n        url: '../selpsn/index?mulit=false&param=' + JSON.stringify(param),\n        events: {\n          AddPer: function AddPer(data, param) {\n            // console.log(param);\n            __f__(\"log\", data, \" at pages/modal/ms_classAttr.vue:1101\");\n            $this.$data.classAttrList[param.index].Attr[param.iindex].Value = data[0].Name;\n            $this.$data.classAttrList[param.index].Attr[param.iindex].ValID = data[0].Login + ';' + data[0].Name;\n            var eventid = $this.$data.classAttrList[param.index].Attr[param.iindex].action;\n            if (eventid) {\n              eventid = eventid.trim();\n              if (eventid) {\n                var info = {\n                  eventid: eventid,\n                  edtype: \"4\",\n                  projectid: \"\",\n                  rclsid: \"\",\n                  robjid: \"\",\n                  userlogin: data[0].Login,\n                  clsid: $this.$data.param.Master_Cls.ID,\n                  objid: \"\",\n                  attr: []\n                };\n\n                // var data_attr = $this.$data.classAttrList[param.index].Attr[param.iindex];\n                $this.DataObjRunCustomEvent(info);\n              }\n            }\n          }\n        }\n      });\n    },\n    classAttr_AddRef: function classAttr_AddRef(e) {\n      __f__(\"log\", e.target, \" at pages/modal/ms_classAttr.vue:1130\");\n      uni.showModal({\n        title: \"提示\",\n        content: \"此功能还未实现!\",\n        showCancel: false,\n        confirmText: \"取消\"\n      });\n      // var value=this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].RelCls[e.target.value];\n      // this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value=value;\n    },\n    classAttr_AddPrj: function classAttr_AddPrj(index, iindex) {\n      var param = {\n        index: index,\n        iindex: iindex\n      };\n      var $this = this;\n      uni.navigateTo({\n        url: '../selPrj/index?relation=-1&param=' + JSON.stringify(param),\n        events: {\n          AddPer: function AddPer(data, param) {\n            // console.log(param);\n            // console.log(data);\n            $this.$data.classAttrList[param.index].Attr[param.iindex].Value = data[0].Name;\n            $this.$data.classAttrList[param.index].Attr[param.iindex].ValID = data[0].ID + ';' + data[0].Name;\n            var eventid = $this.$data.classAttrList[param.index].Attr[param.iindex].action;\n            if (eventid) {\n              eventid = eventid.trim();\n              if (eventid) {\n                var info = {\n                  eventid: eventid,\n                  edtype: \"2\",\n                  projectid: data[0].ID,\n                  rclsid: \"\",\n                  robjid: \"\",\n                  userlogin: \"\",\n                  clsid: $this.$data.param.Master_Cls.ID,\n                  objid: \"\",\n                  attr: []\n                };\n\n                // var data_attr = $this.$data.classAttrList[param.index].Attr[param.iindex];\n                $this.DataObjRunCustomEvent(info);\n              }\n            }\n          }\n        }\n      });\n    },\n    sava: function sava() {\n      if (this.$data.param.Before_OK_Event)\n        //判断功能点参数是否有确定前脚本\n        this.scan_OKDataObjRunCustomEvent(this.$data.param.Before_OK_Event.ID);else this.scan_OKDataObjRunCustomEvent(this.$data.param.After_OK_Event.ID);\n    },\n    add: function add() {\n      var _this4 = this;\n      uni.showLoading({\n        title: \"加载中...\"\n      });\n      var req = [];\n      var attrlist = this.$data.classAttrList;\n      for (var i = 0; i < attrlist.length; i++) {\n        var attr = attrlist[i].Attr;\n        for (var j = 0; j < attr.length; j++) {\n          var ar = attr[j];\n          if (ar.Value == '请选择' || ar.Value == '——请选择——') ar.Value = '';\n          if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n          if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n            name: ar.Name,\n            value: ar.ValID ? ar.ValID : ''\n          });else if (ar.Type == '布尔值') req.push({\n            name: ar.Name,\n            value: ar.Value ? '1' : '0'\n          });else if (ar.Type == '字典' || ar.Type == '字典-字符串') {\n            if (ar.select == true) {\n              //判断下拉是否多选\n              var valStr = \"\";\n              for (var v in ar.Value) {\n                if (valStr) valStr += \";\";\n                valStr += ar.Value[v];\n              }\n              req.push({\n                name: ar.Name,\n                value: valStr\n              });\n            } else req.push({\n              name: ar.Name,\n              value: ar.Value\n            });\n          } else req.push({\n            name: ar.Name,\n            value: ar.Value ? ar.Value : ''\n          });\n          if ((ar.NotEmpty == '1' || ar.notempty == true) && !ar.Value) {\n            // if(ar.notEmpty=='1'){\n            uni.hideLoading();\n            // uni.showToast({title:ar.DispName+'不能为空!',icon:\"success\",duration:3000});\n            uni.showModal({\n              title: \"提示\",\n              content: ar.DispName + '不能为空!',\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return;\n          }\n        }\n      }\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: this.$data.param.Master_Cls.ID,\n        // 功能点主数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        master: {\n          cls_id: this.$data.param.Master_Cls.ID\n        }\n      };\n      var dataInfo = {\n        class_id: this.$data.param.Master_Cls.ID,\n        data_obj_id: '',\n        masterclsid: '',\n        req: JSON.stringify(req),\n        upfile: JSON.stringify([]),\n        post_data: JSON.stringify({}),\n        compose: JSON.stringify([]),\n        refdatastore: JSON.stringify([]),\n        extinfo: JSON.stringify(enviroment),\n        not_trigger_sys_event: ''\n      };\n\n      // return\n      __f__(\"log\", dataInfo, \" at pages/modal/ms_classAttr.vue:1236\");\n      this.$store.dispatch('addclassattr', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/ms_classAttr.vue:1238\");\n        uni.hideLoading();\n        if (success.code == '00000') {\n          var action = JSON.parse(success.data.Action);\n          if (action.ret == '0') {\n            if (action.result_type == '0') {\n              uni.showToast({\n                title: action.result,\n                icon: \"success\",\n                duration: 3000\n              });\n            }\n            // \"{\"ret\":0, \"result_type\":0, \"result\":\"创建成功123123123\",\"info\":\"\"}\"\n          }\n          //刷新\n          uni.redirectTo({\n            url: '../modal/ms_classAttr?param=' + JSON.stringify(_this4.$data.param) + \"&titlename=\" + _this4.$data.title\n          });\n          // this.class_attr_init();\n        } else {\n          uni.showModal({\n            title: \"错误\",\n            content: success.msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        __f__(\"log\", ex, \" at pages/modal/ms_classAttr.vue:1257\");\n        uni.hideLoading();\n        uni.showModal({\n          title: \"提示\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    class_attr_init: function class_attr_init() {\n      var attrlist = this.$data.classGridStyle.StyleDef.show_style;\n      var newattrlist = [];\n      if (this.$data.classAttrList.length > 0) {\n        for (var i = 0; i < attrlist.length; i++) {\n          var open = attrlist[i].open;\n          var name = attrlist[i].attrgroup_name;\n          var attrs = attrlist[i].attrs;\n          for (var s = 0; s < this.$data.classAttrList.length; s++) {\n            var clsattr = this.$data.classAttrList[s];\n            if (name == clsattr.Name) {\n              var attr = [];\n              for (var j = 0; j < attrs.length; j++) {\n                for (var l = 0; l < clsattr.Attr.length; l++) {\n                  var ca = clsattr.Attr[l];\n                  if (attrs[j].attr == ca.Name) {\n                    ca.action = attrs[j].action;\n                    ca.edit = attrs[j].edit;\n                    ca.notempty = attrs[j].notempty;\n                    ca.ext_button = attrs[j].ext_button;\n                    ca.button_img = attrs[j].button_img;\n                    ca.button_tooltip = attrs[j].button_tooltip;\n                    ca.before_click_button = attrs[j].before_click_button;\n                    ca.button_callback = attrs[j].button_callback;\n                    ca.hidden = attrs[j].hidden;\n                    ca.select = attrs[j].select == undefined ? false : attrs[j].select;\n                    ca.Value = \"\";\n                    if (ca.dictitem) {\n                      if (ca.select == true) ca.Value = []; //ca.dictitem[0].CN_S_NAME;\n                      else ca.Value = '请选择'; //ca.dictitem[0].CN_S_NAME;\n                      var dictitemlist = [];\n                      for (var d = 0; d < ca.dictitem.length; d++) {\n                        ca.dictitem[d].label = ca.dictitem[d].CN_S_NAME;\n                        ca.dictitem[d].value = ca.dictitem[d].CN_S_NAME;\n                        if (ca.dictitem[d].CN_C_IS_DEFAULT == '1') ca.Value = ca.dictitem[d].CN_S_NAME;\n                      }\n                    }\n                    if (ca.Type == '日期' || ca.Type == '时间') {\n                      var nowDate = new Date();\n                      var date = {\n                        year: nowDate.getFullYear(),\n                        month: nowDate.getMonth() + 1,\n                        day: nowDate.getDate()\n                      };\n                      ca.Value = date.year + '-' + (date.month >= 10 ? date.month : '0' + date.month) + '-' + (date.day >= 10 ? date.day : '0' + date.day);\n                    }\n                    if (ca.Type == '引用对象(多个)') {\n                      var relClsList = [];\n                      var attr_rescls = ca.RelCls.split(',');\n                      for (var ii in attr_rescls) {\n                        var rescls = attr_rescls[ii].split('|');\n                        relClsList.push({\n                          id: rescls[0],\n                          name: rescls[1]\n                        });\n                      }\n                      ca.RelClsList = relClsList;\n                      ca.Value = '请';\n                    }\n                    if (ca.Type == '省市区') ca.Value = '请选择';\n                    if (ca.Type == '布尔值') ca.Value = false;\n                    attr.push(ca);\n                  }\n                }\n              }\n              newattrlist.push({\n                BkColor: clsattr.BkColor,\n                HasAce: clsattr.HasAce,\n                ImgFontStyle: clsattr.ImgFontStyle,\n                Name: clsattr.Name,\n                Order: clsattr.Order,\n                Open: open,\n                Attr: attr,\n                control_style: this.$data.classGridStyle.StyleDef.control_style,\n                title_p_wdith: this.$data.classGridStyle.StyleDef.title_p_wdith,\n                Font: this.$data.classGridStyle.StyleDef.Font ? this.$data.classGridStyle.StyleDef.Font : {},\n                Bk_Color: this.$data.classGridStyle.StyleDef.Bk_Color ? this.$data.classGridStyle.StyleDef.Bk_Color : '#FFFFFF',\n                Text_Color: this.$data.classGridStyle.StyleDef.Text_Color ? this.$data.classGridStyle.StyleDef.Text_Color : '#000000'\n              });\n            }\n          }\n        }\n        if (newattrlist.length > 0) {\n          this.$data.classAttrList = newattrlist;\n        }\n        var req = [];\n        if (this.$data.classGridStyle.StyleDef) {\n          if (this.$data.classGridStyle.StyleDef.show_style.length > 0) {\n            var attrlist = this.$data.classGridStyle.StyleDef.show_style;\n            // $el.find('.attr_field').prop('readonly', true);\n            // $el.find('.attr_field').prop('disabled', true);\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].attrs;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                req.push({\n                  attr: ar.attr,\n                  value: ar.value ? ar.value : ''\n                });\n              }\n            }\n          }\n        }\n        var eventlist = this.$data.classGridStyle.StyleDef.event;\n        if (eventlist) {\n          if (eventlist.length > 0) {\n            for (var i = 0; i < eventlist.length; i++) {\n              if (eventlist[i].event_id == 'before_ok') {\n                this.$data.edit_ok_event = eventlist[i];\n              } else if (eventlist[i].event_id == 'initial') {\n                this.$data.edit_inital_event = eventlist[i];\n              } else if (eventlist[i].event_id == 'before_select_compose') {\n                this.$data.edit_select_compose_event = eventlist[i].scrip_id;\n                this.$data.edit_compose_cls_id = eventlist[i].compose_cls_id;\n              }\n            }\n          }\n        }\n        // console.log(req);\n        if (this.$data.edit_inital_event) {\n          var eventid = this.$data.edit_inital_event.scrip_id;\n          var info = {\n            eventid: eventid,\n            edtype: \"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: this.$data.param.Master_Cls.ID,\n            objid: \"\",\n            attr: req\n          };\n          this.ini_DataObjRunCustomEvent(info);\n        }\n        __f__(\"log\", this.$data.classGridStyle, \" at pages/modal/ms_classAttr.vue:1393\");\n        __f__(\"log\", this.$data.classAttrList, \" at pages/modal/ms_classAttr.vue:1394\");\n      } else {\n        uni.showModal({\n          title: \"提示\",\n          content: \"未找到可显示的的属性\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      }\n    },\n    subClass_attr_init: function subClass_attr_init() {\n      var attrlist = this.$data.subClassGridStyle.StyleDef.show_style;\n      var newattrlist = [];\n      if (this.$data.subClassAttrList.length > 0) {\n        for (var i = 0; i < attrlist.length; i++) {\n          var open = attrlist[i].open;\n          var name = attrlist[i].attrgroup_name;\n          var attrs = attrlist[i].attrs;\n          for (var s = 0; s < this.$data.subClassAttrList.length; s++) {\n            var clsattr = this.$data.subClassAttrList[s];\n            if (name == clsattr.Name) {\n              var attr = [];\n              for (var j = 0; j < attrs.length; j++) {\n                for (var l = 0; l < clsattr.Attr.length; l++) {\n                  var ca = clsattr.Attr[l];\n                  if (attrs[j].attr == ca.Name) {\n                    ca.action = attrs[j].action;\n                    ca.edit = attrs[j].edit;\n                    ca.notempty = attrs[j].notempty;\n                    ca.ext_button = attrs[j].ext_button;\n                    ca.button_img = attrs[j].button_img;\n                    ca.button_tooltip = attrs[j].button_tooltip;\n                    ca.before_click_button = attrs[j].before_click_button;\n                    ca.button_callback = attrs[j].button_callback;\n                    ca.hidden = attrs[j].hidden;\n                    ca.select = attrs[j].select == undefined ? false : attrs[j].select;\n                    ca.Value = \"\";\n                    if (ca.dictitem) {\n                      if (ca.select == true) ca.Value = []; //ca.dictitem[0].CN_S_NAME;\n                      else ca.Value = '请选择'; //ca.dictitem[0].CN_S_NAME;\n                      var dictitemlist = [];\n                      for (var d = 0; d < ca.dictitem.length; d++) {\n                        ca.dictitem[d].label = ca.dictitem[d].CN_S_NAME;\n                        ca.dictitem[d].value = ca.dictitem[d].CN_S_NAME;\n                        if (ca.dictitem[d].CN_C_IS_DEFAULT == '1') ca.Value = ca.dictitem[d].CN_S_NAME;\n                      }\n                    }\n                    if (ca.Type == '日期' || ca.Type == '时间') {\n                      var nowDate = new Date();\n                      var date = {\n                        year: nowDate.getFullYear(),\n                        month: nowDate.getMonth() + 1,\n                        day: nowDate.getDate()\n                      };\n                      ca.Value = date.year + '-' + (date.month >= 10 ? date.month : '0' + date.month) + '-' + (date.day >= 10 ? date.day : '0' + date.day);\n                    }\n                    if (ca.Type == '引用对象(多个)') {\n                      var relClsList = [];\n                      var attr_rescls = ca.RelCls.split(',');\n                      for (var ii in attr_rescls) {\n                        var rescls = attr_rescls[ii].split('|');\n                        relClsList.push({\n                          id: rescls[0],\n                          name: rescls[1]\n                        });\n                      }\n                      ca.RelClsList = relClsList;\n                      ca.Value = '请';\n                    }\n                    if (ca.Type == '省市区') ca.Value = '请选择';\n                    if (ca.Type == '布尔值') ca.Value = false;\n                    attr.push(ca);\n                  }\n                }\n              }\n              newattrlist.push({\n                BkColor: clsattr.BkColor,\n                HasAce: clsattr.HasAce,\n                ImgFontStyle: clsattr.ImgFontStyle,\n                Name: clsattr.Name,\n                Order: clsattr.Order,\n                Open: open,\n                Attr: attr,\n                control_style: this.$data.subClassGridStyle.StyleDef.control_style,\n                title_p_wdith: this.$data.subClassGridStyle.StyleDef.title_p_wdith,\n                Font: this.$data.subClassGridStyle.StyleDef.Font ? this.$data.subClassGridStyle.StyleDef.Font : {},\n                Bk_Color: this.$data.subClassGridStyle.StyleDef.Bk_Color ? this.$data.subClassGridStyle.StyleDef.Bk_Color : '#FFFFFF',\n                Text_Color: this.$data.subClassGridStyle.StyleDef.Text_Color ? this.$data.subClassGridStyle.StyleDef.Text_Color : '#000000'\n              });\n            }\n          }\n        }\n        if (newattrlist.length > 0) {\n          this.$data.subClassAttrList = newattrlist;\n        }\n        var req = [];\n        if (this.$data.subClassGridStyle.StyleDef) {\n          if (this.$data.subClassGridStyle.StyleDef.show_style.length > 0) {\n            var attrlist = this.$data.subClassGridStyle.StyleDef.show_style;\n            // $el.find('.attr_field').prop('readonly', true);\n            // $el.find('.attr_field').prop('disabled', true);\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].attrs;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                req.push({\n                  attr: ar.attr,\n                  value: ar.value ? ar.value : ''\n                });\n              }\n            }\n          }\n        }\n        var eventlist = this.$data.subClassGridStyle.StyleDef.event;\n        if (eventlist) {\n          if (eventlist.length > 0) {\n            for (var i = 0; i < eventlist.length; i++) {\n              if (eventlist[i].event_id == 'before_ok') {\n                this.$data.edit_ok_event = eventlist[i];\n              } else if (eventlist[i].event_id == 'initial') {\n                this.$data.edit_inital_event = eventlist[i];\n              } else if (eventlist[i].event_id == 'before_select_compose') {\n                this.$data.edit_select_compose_event = eventlist[i].scrip_id;\n                this.$data.edit_compose_cls_id = eventlist[i].compose_cls_id;\n              }\n            }\n          }\n        }\n        // console.log(req);\n        if (this.$data.edit_inital_event) {\n          var eventid = this.$data.edit_inital_event.scrip_id;\n          var info = {\n            eventid: eventid,\n            edtype: \"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: this.$data.param.Sub_Cls.ID,\n            objid: \"\",\n            attr: req\n          };\n          this.scan_ini_DataObjRunCustomEvent(info);\n        }\n        __f__(\"log\", this.$data.subClassGridStyle, \" at pages/modal/ms_classAttr.vue:1531\");\n        __f__(\"log\", this.$data.subClassAttrList, \" at pages/modal/ms_classAttr.vue:1532\");\n      } else {\n        uni.showModal({\n          title: \"提示\",\n          content: \"未找到可显示的的属性\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      }\n    },\n    ini_DataObjRunCustomEvent: function ini_DataObjRunCustomEvent(info) {\n      var _this5 = this;\n      var param = {\n        EditStyle: this.$data.param.Master_Cls.View_Style.Name,\n        ViewStyle: this.$data.param.Master_Cls.View_Style.Name,\n        NotTriggerSysEvent: 0,\n        enviroment: {\n          'function': '3000',\n          // 功能点编号\n          cls_id: this.$data.param.Master_Cls.ID,\n          // 功能点主数据类标识\n          'button': 'top',\n          // top/bottom\n          button_name: '新增',\n          master: {\n            cls_id: this.$data.param.Master_Cls.ID // button=bottom时 master的cls_id\n            //obj_id: ''  // button=bottom时 master的obj_id\n          }\n        }\n      };\n\n      var inputparameter = '';\n      var global_attr = '';\n      var dataInfo = {\n        edtype: info.edtype,\n        eventid: info.eventid,\n        projectid: info.projectid,\n        rclsid: info.rclsid,\n        robjid: info.robjid,\n        userlogin: info.userlogin,\n        clsid: info.clsid,\n        objid: info.objid,\n        attr: JSON.stringify(info.attr),\n        extinfo: JSON.stringify(param),\n        inputparameter: inputparameter,\n        global_attr: global_attr\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/ms_classAttr.vue:1562\");\n      this.$store.dispatch('DataObjRunCustomEventInfo', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/ms_classAttr.vue:1564\");\n        if (success.code == '00000') {\n          var data = JSON.parse(success.data);\n          var actionlist = data.action;\n          if (actionlist) {\n            for (var j = 0; j < actionlist.length; j++) {\n              var action = actionlist[j];\n              var action_type = action.action_type;\n              var value = action.value;\n              if (action_type == 'set_dlg_attr') {\n                if (value) {\n                  var val = value;\n                  if (typeof value == 'string') {\n                    val = JSON.parse(value);\n                  }\n                  __f__(\"log\", val, \" at pages/modal/ms_classAttr.vue:1579\");\n                  for (var i = 0; i < val.length; i++) {\n                    for (var a = 0; a < _this5.$data.classAttrList.length; a++) {\n                      for (var l = 0; l < _this5.$data.classAttrList[a].Attr.length; l++) {\n                        var ca = _this5.$data.classAttrList[a].Attr[l];\n                        if (val[i].attr == ca.Name) {\n                          if (ca.Type == '字典' || ca.Type == '字典-字符串') {\n                            var dictItemList = [];\n                            for (var d in val[i].choice_list) {\n                              var val = val[i].choice_list[d];\n                              dictItemList.push({\n                                \"CN_S_NAME\": val,\n                                \"Name\": val,\n                                \"label\": val,\n                                \"value\": val\n                              });\n                            }\n                            ca.dictitem = dictItemList;\n                            // attr[j].dictitem = val[i].choice_list;\n                          } else {\n                            // ca.value = val[i].value;\n                          }\n                        }\n                      }\n                    }\n                    var length = 0;\n                    if (!_this5.$data.refdatastore.filter(function (s) {\n                      return val[i].attr == s.attr;\n                    }).length) {\n                      length = 1;\n                      _this5.$data.refdatastore.push(val[i]);\n                    }\n                    if (length == 0) {\n                      for (var j = 0; j < _this5.$data.refdatastore.length; j++) {\n                        if (_this5.$data.refdatastore[j].attr == val[i].attr) {\n                          _this5.$data.refdatastore[j].value = val[i].value;\n                        }\n                      }\n                    }\n                  }\n                }\n              }\n              if (action_type == 'open_select_userdlg') {\n                uni.showModal({\n                  title: \"错误2.2\",\n                  content: \"open_select_userdlg这个action_type还未处理!\",\n                  showCancel: false,\n                  confirmText: \"取消\"\n                });\n              }\n            }\n          }\n        } else {\n          uni.showModal({\n            title: \"错误2\",\n            content: success.msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误2.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    DataObjRunCustomEvent: function DataObjRunCustomEvent(info, data_attr) {\n      var $this = this;\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: this.$data.param.Master_Cls.ID,\n        // 功能点主数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        master: {\n          cls_id: this.$data.param.Master_Cls.ID // button=bottom时 master的cls_id\n          //obj_id: ''  // button=bottom时 master的obj_id\n        }\n      };\n\n      enviroment.edit_dlg = {\n        type: 'small',\n        //小窗口\n        class_id: this.$data.param.Master_Cls.ID //当前数据类id\n      };\n\n      if (data_attr) {\n        enviroment.edit_dlg.form_control = {\n          //所属的表单控件\n          name: data_attr.Name,\n          //字段属性\n          text: data_attr.DispName,\n          //显示文本\n          group_name: data_attr.GroupName,\n          //属性组\n          type: data_attr.Type,\n          //字段类型\n          readonly: data_attr.ReadOnly,\n          //是否只读\n          button_img: data_attr.button_img,\n          //引用按钮的图标\n          button_tooltip: data_attr.button_tooltip //引用按钮的tooltip\n        };\n      }\n\n      var dataInfo = {\n        edtype: info.edtype,\n        eventid: info.eventid,\n        projectid: info.projectid.replace('{', '').replace('}', ''),\n        rclsid: info.rclsid,\n        robjid: info.robjid,\n        userlogin: info.userlogin,\n        clsid: info.clsid,\n        objid: info.objid,\n        attr: JSON.stringify(info.attr),\n        extinfo: JSON.stringify(enviroment),\n        inputparameter: '',\n        global_attr: JSON.stringify(this.$data.global_attr)\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/ms_classAttr.vue:1664\");\n      this.$store.dispatch('DataObjRunCustomEventInfo', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/ms_classAttr.vue:1666\");\n        if (success.code == '00000') {\n          var data = JSON.parse(success.data);\n          var actionlist = data.action;\n          if (actionlist) {\n            __f__(\"log\", actionlist, \" at pages/modal/ms_classAttr.vue:1672\");\n            for (var i = 0; i < actionlist.length; i++) {\n              var action = actionlist[i];\n              if (action.action_type == 'set_dlg_attr') {\n                var result = action.value;\n                for (var i = 0; i < result.length; i++) {\n                  if (result[i].choice_list) {\n                    for (var c = 0; c < $this.$data.classAttrList.length; c++) {\n                      var attr = $this.$data.classAttrList[c].Attr;\n                      for (var j = 0; j < attr.length; j++) {\n                        if (attr[j].Name == result[i].attr) {\n                          if (attr[j].Type == '字典' || attr[j].Type == '字典-字符串') {\n                            var dictItemList = [];\n                            for (var d in result[i].choice_list) {\n                              var val = result[i].choice_list[d];\n                              dictItemList.push({\n                                \"CN_S_NAME\": val,\n                                \"Name\": val,\n                                \"label\": val,\n                                \"value\": val\n                              });\n                            }\n                            attr[j].dictitem = dictItemList;\n                            // attr[j].dictitem = result[i].choice_list;\n                          }\n                        }\n                      }\n                    }\n                  }\n\n                  for (var c = 0; c < $this.$data.classAttrList.length; c++) {\n                    var attr = $this.$data.classAttrList[c].Attr;\n                    for (var j = 0; j < attr.length; j++) {\n                      __f__(\"log\", attr[j].Name + '==' + result[i].attr, \" at pages/modal/ms_classAttr.vue:1699\");\n                      if (attr[j].Name == result[i].attr) {\n                        attr[j].Value = result[i].value;\n                      }\n                    }\n                  }\n                  var length = 0;\n                  if (!$this.$data.refdatastore.filter(function (s) {\n                    return result[i].attr == s.attr;\n                  }).length) {\n                    length = 1;\n                    $this.$data.refdatastore.push(result[i]);\n                  }\n                  if (length == 0) {\n                    for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                      if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                        $this.$data.refdatastore[j].value = result[i].value;\n                      }\n                    }\n                  }\n                }\n              } else if (data.action[i].action_type == 'set_global_attr') {\n                $this.$data.global_attr = data.action[i].value || [];\n              }\n            }\n          }\n          if (data.result) {\n            var result = data.result;\n            for (var i = 0; i < result.length; i++) {\n              for (var c = 0; c < $this.$data.classAttrList.length; c++) {\n                var attr = $this.$data.classAttrList[c].Attr;\n                for (var j = 0; j < attr.length; j++) {\n                  if (attr[j].Name == result[i].attr) {\n                    attr[j].Value = result[i].value;\n                  }\n                }\n              }\n              var length = 0;\n              if (!$this.$data.refdatastore.filter(function (s) {\n                return result[i].attr == s.attr;\n              }).length) {\n                length = 1;\n                $this.$data.refdatastore.push(result[i]);\n              }\n              if (length == 0) {\n                for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                  if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                    $this.$data.refdatastore[j].value = result[i].value;\n                  }\n                }\n              }\n            }\n          }\n        } else {\n          uni.showModal({\n            title: \"错误3\",\n            content: success.msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误3.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    OKDataObjRunCustomEvent: function OKDataObjRunCustomEvent() {\n      var _this6 = this;\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: this.$data.param.Master_Cls.ID,\n        // 功能点主数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        master: {\n          cls_id: this.$data.param.Master_Cls.ID // button=bottom时 master的cls_id\n        }\n      };\n\n      var eventid = this.$data.edit_ok_event.scrip_id;\n      var req = [];\n      var attrlist = this.$data.classAttrList;\n      for (var i = 0; i < attrlist.length; i++) {\n        var attr = attrlist[i].Attr;\n        for (var j = 0; j < attr.length; j++) {\n          var ar = attr[j];\n          if (ar.Value == '请选择' || ar.Value == '——请选择——') ar.Value = '';\n          if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n          if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n            attr: ar.Name,\n            value: ar.ValID ? ar.ValID : ''\n          });else if (ar.Type == '布尔值') req.push({\n            attr: ar.Name,\n            value: ar.Value ? '1' : '0'\n          });else req.push({\n            attr: ar.Name,\n            value: ar.Value\n          });\n        }\n      }\n      if (this.$data.refdatastore.length > 0) {\n        for (var i = 0; i < this.$data.refdatastore.length; i++) {\n          if (!req.filter(function (s) {\n            return this.$data.refdatastore[i].attr == s.name;\n          }).length) {\n            length = 1;\n            req.push({\n              'attr': this.$data.refdatastore[i].attr,\n              'value': this.$data.refdatastore[i].value\n            });\n          }\n        }\n      }\n      var info = {\n        eventid: eventid,\n        edtype: \"0\",\n        projectid: '',\n        rclsid: '',\n        robjid: '',\n        userlogin: '',\n        clsid: this.$data.param.Master_Cls.ID,\n        objid: \"\",\n        attr: req\n      };\n      var dataInfo = {\n        edtype: info.edtype,\n        eventid: info.eventid,\n        projectid: info.projectid,\n        rclsid: info.rclsid,\n        robjid: info.robjid,\n        userlogin: info.userlogin,\n        clsid: info.clsid,\n        objid: info.objid,\n        attr: JSON.stringify(info.attr),\n        extinfo: JSON.stringify(enviroment),\n        global_attr: JSON.stringify(this.$data.global_attr)\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/ms_classAttr.vue:1819\");\n      this.$store.dispatch('DataObjRunCustomEventInfo', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/ms_classAttr.vue:1821\");\n        if (success.code == '00000') {\n          var data = JSON.parse(success.data);\n          var result = data.result;\n          for (var i = 0; i < result.length; i++) {\n            // self.class_attr_ele.find('.attr_field[data-field=\"' + result[i].attr + '\"]').val(result[i].value).data('val', result[i].value);\n            var length = 0;\n            if (!_this6.$data.refdatastore.filter(function (s) {\n              return result[i].attr == s.attr;\n            }).length) {\n              length = 1;\n              _this6.$data.refdatastore.push(result[i]);\n            }\n            if (length == 0) {\n              for (var j = 0; j < _this6.$data.refdatastore.length; j++) {\n                if (_this6.$data.refdatastore[j].attr == result[i].attr) {\n                  _this6.$data.refdatastore[j].value = result[i].value;\n                }\n              }\n            }\n          }\n          _this6.add();\n        } else {\n          uni.showModal({\n            title: \"错误4\",\n            content: success.msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误4.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    DataObjRunCustomEvent_Return: function DataObjRunCustomEvent_Return(eventid, data_attr, button_callback, index, iindex) {\n      var _this7 = this;\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: this.$data.param.Master_Cls.ID,\n        // 功能点主数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        master: {\n          cls_id: this.$data.param.Master_Cls.ID // button=bottom时 master的cls_id\n          //obj_id: ''  // button=bottom时 master的obj_id\n        }\n      };\n\n      var req = [];\n      var attrlist = this.$data.classAttrList;\n      for (var i = 0; i < attrlist.length; i++) {\n        var attr = attrlist[i].Attr;\n        for (var j = 0; j < attr.length; j++) {\n          var ar = attr[j];\n          if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n          if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n            attr: ar.Name,\n            value: ar.ValID ? ar.ValID : ''\n          });else if (ar.Type == '布尔值') req.push({\n            attr: ar.Name,\n            value: ar.Value ? '1' : '0'\n          });else req.push({\n            attr: ar.Name,\n            value: ar.Value\n          });\n        }\n      }\n      if (this.$data.refdatastore.length > 0) {\n        for (var i = 0; i < this.$data.refdatastore.length; i++) {\n          if (!req.filter(function (s) {\n            return this.$data.refdatastore[i].attr == s.name;\n          }).length) {\n            length = 1;\n            req.push({\n              'attr': this.$data.refdatastore[i].attr,\n              'value': this.$data.refdatastore[i].value\n            });\n          }\n        }\n      }\n      var extinfo = enviroment;\n      extinfo.edit_dlg = {\n        type: 'small',\n        //小窗口\n        class_id: this.$data.param.Master_Cls.ID //当前数据类id\n      };\n\n      if (data_attr) {\n        extinfo.edit_dlg.form_control = {\n          //所属的表单控件\n          name: data_attr.Name,\n          //字段属性\n          text: data_attr.DispName,\n          //显示文本\n          group_name: data_attr.GroupName,\n          //属性组\n          type: data_attr.Type,\n          //字段类型\n          readonly: data_attr.ReadOnly,\n          //是否只读\n          button_img: data_attr.button_img,\n          //引用按钮的图标\n          button_tooltip: data_attr.button_tooltip //引用按钮的tooltip\n        };\n      }\n\n      var dataInfo = {\n        edtype: \"0\",\n        eventid: eventid,\n        projectid: '',\n        rclsid: '',\n        robjid: '',\n        userlogin: '',\n        clsid: this.$data.param.Master_Cls.ID,\n        objid: '',\n        attr: JSON.stringify(req),\n        extinfo: JSON.stringify(extinfo),\n        global_attr: JSON.stringify(this.$data.global_attr)\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/ms_classAttr.vue:1910\");\n      this.$store.dispatch('DataObjRunCustomEventInfo', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/ms_classAttr.vue:1912\");\n        if (success.code == '00000') {\n          var data = JSON.parse(success.data);\n          if (data != \"\") {\n            var actions = data.action;\n            __f__(\"log\", actions, \" at pages/modal/ms_classAttr.vue:1918\");\n            if (actions) {\n              for (var i = 0; i < actions.length; i++) {\n                var action = actions[i];\n                var val = action.value;\n                var enviroment = JSON.stringify(enviroment);\n                if (action.action_type == 'open_panel') {\n                  var d = dialog({\n                    title: '<i class=\"ace-icon fa fa-info-circle\"></i> ' + '提示',\n                    content: action.action_type + '此action尚未处理!'\n                  });\n                  d.show();\n                } else if (action.action_type == 'open_select_userdlg') {\n                  var style = val.style;\n                  // style == 'user' ? '选择人员' : style == 'department' ? '选择部门' : style == 'role' ? '选择角色' : ''\n                  var $this = _this7;\n                  var param = {\n                    index: index,\n                    iindex: iindex,\n                    button_callback: button_callback,\n                    req: req,\n                    data_attr: data_attr\n                  };\n                  uni.navigateTo({\n                    url: '../selpsn/index?mulit=false&param=' + JSON.stringify(param),\n                    events: {\n                      AddPer: function AddPer(data, param) {\n                        // console.log(param);\n                        __f__(\"log\", data, \" at pages/modal/ms_classAttr.vue:1948\");\n                        var callback_eventid = param.button_callback.trim();\n                        var info = {\n                          eventid: callback_eventid,\n                          edtype: \"0\",\n                          projectid: '',\n                          rclsid: '',\n                          robjid: '',\n                          userlogin: '',\n                          clsid: $this.$data.param.Master_Cls.ID,\n                          objid: \"\",\n                          attr: param.req,\n                          inputparameter: data\n                        };\n                        $this.DataObjRunCustomEvent(info, param.data_attr);\n                      }\n                    }\n                  });\n                } else if (action.action_type == 'open_data_query_dlg') {} else if (action.action_type == 'open_common_dlg') {\n                  var value = action.value;\n                  var d = dialog({\n                    title: '<i class=\"ace-icon fa fa-info-circle\"></i> ' + '提示',\n                    content: action.action_type + '此action尚未处理!'\n                  });\n                  d.show();\n                } else if (action.action_type == 'open_project_query_dlg') {\n                  //console.log(action.value.select_range);\n                  //console.log(action.value.mulit_select);\n                  var priRel = '-1';\n                  if (action.value.select_range == '全部相关') priRel = '0';else if (action.value.select_range == '我负责的项目') priRel = '1';else if (action.value.select_range == '我创建的') priRel = '2';else if (action.value.select_range == '我参与的' || action.value.select_range == '我参加的') priRel = '3';else if (action.value.select_range == '我关注的') priRel = '4';else if (action.value.select_range == '我下属的项目') priRel = '5';\n                  var $this = _this7;\n                  var param_ = {\n                    index: index,\n                    iindex: iindex,\n                    button_callback: button_callback,\n                    req: req\n                  };\n                  uni.navigateTo({\n                    url: '../selPrj/index?relation=' + priRel + '&param=' + JSON.stringify(param_),\n                    events: {\n                      AddPer: function AddPer(data, param) {\n                        $this.$data.classAttrList[param.index].Attr[param.iindex].Value = data[0].Name;\n                        $this.$data.classAttrList[param.index].Attr[param.iindex].ValID = data[0].ID + ';' + data[0].Name;\n                        var callback_eventid = param.button_callback.trim();\n                        if (callback_eventid) {\n                          var info = {\n                            eventid: callback_eventid,\n                            edtype: \"2\",\n                            projectid: data[0].ID,\n                            rclsid: \"\",\n                            robjid: \"\",\n                            userlogin: \"\",\n                            clsid: $this.$data.param.Master_Cls.ID,\n                            objid: \"\",\n                            attr: param.req\n                          };\n                          $this.DataObjRunCustomEvent(info);\n                        }\n                      }\n                    }\n                  });\n                } else {\n                  var d = dialog({\n                    title: '<i class=\"ace-icon fa fa-info-circle\"></i> ' + '提示',\n                    content: action.action_type + '此action尚未处理!'\n                  });\n                  d.show();\n                }\n              }\n            }\n          } else {\n            uni.showModal({\n              title: \"提示5.2\",\n              content: '调用 before_click_button 脚本返回空,event_id' + eventid,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n          }\n        } else {\n          uni.showModal({\n            title: \"错误5\",\n            content: success.msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"提示5.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    scan_ini_DataObjRunCustomEvent: function scan_ini_DataObjRunCustomEvent(info) {\n      var _this8 = this;\n      var param = {\n        EditStyle: this.$data.param.Sub_Cls.View_Style.Name,\n        ViewStyle: this.$data.param.Sub_Cls.View_Style.Name,\n        NotTriggerSysEvent: 0,\n        enviroment: {\n          'function': '3000',\n          // 功能点编号\n          cls_id: this.$data.param.Sub_Cls.ID,\n          // 功能点主数据类标识\n          'button': 'top',\n          // top/bottom\n          button_name: '新增',\n          master: {\n            cls_id: this.$data.param.Sub_Cls.ID // button=bottom时 master的cls_id\n            //obj_id: ''  // button=bottom时 master的obj_id\n          }\n        }\n      };\n\n      var inputparameter = '';\n      var global_attr = '';\n      var dataInfo = {\n        edtype: info.edtype,\n        eventid: info.eventid,\n        projectid: info.projectid,\n        rclsid: info.rclsid,\n        robjid: info.robjid,\n        userlogin: info.userlogin,\n        clsid: info.clsid,\n        objid: info.objid,\n        attr: JSON.stringify(info.attr),\n        extinfo: JSON.stringify(param),\n        inputparameter: inputparameter,\n        global_attr: global_attr\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/ms_classAttr.vue:2071\");\n      this.$store.dispatch('DataObjRunCustomEventInfo', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/ms_classAttr.vue:2073\");\n        if (success.code == '00000') {\n          var data = JSON.parse(success.data);\n          var actionlist = data.action;\n          if (actionlist) {\n            for (var j = 0; j < actionlist.length; j++) {\n              var action = actionlist[j];\n              var action_type = action.action_type;\n              var value = action.value;\n              if (action_type == 'set_dlg_attr') {\n                if (value) {\n                  var val = value;\n                  if (typeof value == 'string') {\n                    val = JSON.parse(value);\n                  }\n                  __f__(\"log\", val, \" at pages/modal/ms_classAttr.vue:2088\");\n                  for (var i = 0; i < val.length; i++) {\n                    for (var a = 0; a < _this8.$data.subClassAttrList.length; a++) {\n                      for (var l = 0; l < _this8.$data.subClassAttrList[a].Attr.length; l++) {\n                        var ca = _this8.$data.subClassAttrList[a].Attr[l];\n                        if (val[i].attr == ca.Name) {\n                          if (ca.Type == '字典' || ca.Type == '字典-字符串') {\n                            var dictItemList = [];\n                            for (var d in val[i].choice_list) {\n                              var val = val[i].choice_list[d];\n                              dictItemList.push({\n                                \"CN_S_NAME\": val,\n                                \"Name\": val,\n                                \"label\": val,\n                                \"value\": val\n                              });\n                            }\n                            ca.dictitem = dictItemList;\n                            // attr[j].dictitem = val[i].choice_list;\n                          } else {\n                            // ca.value = val[i].value;\n                          }\n                        }\n                      }\n                    }\n                    var length = 0;\n                    if (!_this8.$data.refdatastore.filter(function (s) {\n                      return val[i].attr == s.attr;\n                    }).length) {\n                      length = 1;\n                      _this8.$data.refdatastore.push(val[i]);\n                    }\n                    if (length == 0) {\n                      for (var j = 0; j < _this8.$data.refdatastore.length; j++) {\n                        if (_this8.$data.refdatastore[j].attr == val[i].attr) {\n                          _this8.$data.refdatastore[j].value = val[i].value;\n                        }\n                      }\n                    }\n                  }\n                }\n              }\n              if (action_type == 'open_select_userdlg') {\n                uni.showModal({\n                  title: \"错误6.2\",\n                  content: \"open_select_userdlg这个action_type还未处理!\",\n                  showCancel: false,\n                  confirmText: \"取消\"\n                });\n              }\n            }\n          }\n        } else {\n          uni.showModal({\n            title: \"错误6\",\n            content: success.msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误6.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    scan_DataObjRunCustomEvent: function scan_DataObjRunCustomEvent(info, data_attr) {\n      var _this9 = this;\n      var $this = this;\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: this.$data.param.Sub_Cls.ID,\n        // 功能点从数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        master: {\n          cls_id: this.$data.param.Sub_Cls.ID // button=bottom时 master的cls_id\n          //obj_id: ''  // button=bottom时 master的obj_id\n        }\n      };\n\n      enviroment.edit_dlg = {\n        type: 'small',\n        //小窗口\n        class_id: this.$data.param.Sub_Cls.ID //当前数据类id\n      };\n\n      if (data_attr) {\n        enviroment.edit_dlg.form_control = {\n          //所属的表单控件\n          name: data_attr.Name,\n          //字段属性\n          text: data_attr.DispName,\n          //显示文本\n          group_name: data_attr.GroupName,\n          //属性组\n          type: data_attr.Type,\n          //字段类型\n          readonly: data_attr.ReadOnly,\n          //是否只读\n          button_img: data_attr.button_img,\n          //引用按钮的图标\n          button_tooltip: data_attr.button_tooltip //引用按钮的tooltip\n        };\n      }\n\n      var dataInfo = {\n        edtype: info.edtype,\n        eventid: info.eventid,\n        projectid: info.projectid.replace('{', '').replace('}', ''),\n        rclsid: info.rclsid,\n        robjid: info.robjid,\n        userlogin: info.userlogin,\n        clsid: info.clsid,\n        objid: info.objid,\n        attr: JSON.stringify(info.attr),\n        extinfo: JSON.stringify(enviroment),\n        inputparameter: JSON.stringify(info.inputParamter),\n        global_attr: JSON.stringify(this.$data.global_attr)\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/ms_classAttr.vue:2174\");\n      this.$store.dispatch('DataObjRunCustomEventInfo', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/ms_classAttr.vue:2176\");\n        if (success.code == '00000') {\n          var data = JSON.parse(success.data);\n          var actionlist = data.action;\n          if (actionlist) {\n            __f__(\"log\", actionlist, \" at pages/modal/ms_classAttr.vue:2182\");\n            for (var ii = 0; ii < actionlist.length; ii++) {\n              var action = actionlist[ii];\n              if (action.action_type == 'set_dlg_attr') {\n                var result = action.value;\n                for (var i = 0; i < result.length; i++) {\n                  if (result[i].choice_list) {\n                    for (var s = 0; s < $this.$data.subPanelList.length; s++) {\n                      for (var c = 0; c < $this.$data.subPanelList[s].subClassAttrList.length; c++) {\n                        var attr = $this.$data.subPanelList[s].subClassAttrList[c].Attr;\n                        for (var j = 0; j < attr.length; j++) {\n                          if (attr[j].Name == result[i].attr) {\n                            if (attr[j].Type == '字典' || attr[j].Type == '字典-字符串') {\n                              var dictItemList = [];\n                              for (var d in result[i].choice_list) {\n                                var val = result[i].choice_list[d];\n                                dictItemList.push({\n                                  \"CN_S_NAME\": val,\n                                  \"Name\": val,\n                                  \"label\": val,\n                                  \"value\": val\n                                });\n                              }\n                              attr[j].dictitem = dictItemList;\n                              // attr[j].dictitem = result[i].choice_list;\n                            }\n                          }\n                        }\n                      }\n                    }\n                  }\n\n                  for (var s = 0; s < $this.$data.subPanelList.length; s++) {\n                    for (var c = 0; c < $this.$data.subPanelList[s].subClassAttrList.length; c++) {\n                      var attr = $this.$data.subPanelList[s].subClassAttrList[c].Attr;\n                      for (var j = 0; j < attr.length; j++) {\n                        __f__(\"log\", attr[j].Name + '==' + result[i].attr, \" at pages/modal/ms_classAttr.vue:2212\");\n                        if (attr[j].Name == result[i].attr) {\n                          attr[j].Value = result[i].value;\n                        }\n                      }\n                    }\n                  }\n                  var length = 0;\n                  if (!$this.$data.refdatastore.filter(function (s) {\n                    return result[i].attr == s.attr;\n                  }).length) {\n                    length = 1;\n                    $this.$data.refdatastore.push(result[i]);\n                  }\n                  if (length == 0) {\n                    for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                      if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                        $this.$data.refdatastore[j].value = result[i].value;\n                      }\n                    }\n                  }\n                }\n              } else if (action.action_type == 'set_global_attr') {\n                $this.$actiontr = action.value || [];\n              } else if (action.action_type == 'add_subcls_panel') {\n                //主从数据类扫码查询数据\n                var result = action.value;\n                var list_1 = JSON.parse(JSON.stringify(_this9.$data.subClassAttrList));\n                var scanCodeVal = $this.$data.scanCodeVal;\n                if (info.inputParamter[0].attr == \"mast_input_3037\")\n                  //判断是主数据类扫码查询数据\n                  scanCodeVal = \"mast_input_3037-\" + ii;\n                $this.$data.subPanelList.push({\n                  scanCodeVal: scanCodeVal,\n                  subClassAttr: list_1\n                });\n                for (var i = 0; i < result.length; i++) {\n                  for (var s = 0; s < $this.$data.subPanelList.length; s++) {\n                    if ($this.$data.subPanelList[s].scanCodeVal == scanCodeVal) {\n                      var _subClassAttr = $this.$data.subPanelList[s].subClassAttr;\n                      for (var c = 0; c < _subClassAttr.length; c++) {\n                        var attr = _subClassAttr[c].Attr;\n                        for (var j = 0; j < attr.length; j++) {\n                          // console.log(attr[j].Name+'=='+result[i].attr);\n                          if (attr[j].Name == result[i].attr) {\n                            attr[j].Value = result[i].value;\n                          }\n                        }\n                      }\n\n                      // $this.$data.subPanelList[s].subClassAttr=list_1;\n                    }\n                  }\n\n                  var length = 0;\n                  if (!$this.$data.refdatastore.filter(function (s) {\n                    return result[i].attr == s.attr;\n                  }).length) {\n                    length = 1;\n                    $this.$data.refdatastore.push(result[i]);\n                  }\n                  if (length == 0) {\n                    for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                      if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                        $this.$data.refdatastore[j].value = result[i].value;\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n          if (data.result) {\n            var _list_ = JSON.parse(JSON.stringify(_this9.$data.subClassAttrList));\n            var scanCodeVal = $this.$data.scanCodeVal;\n            if (info.inputParamter[0].attr == \"mast_input_3037\") scanCodeVal = \"mast_input_3037-\" + ii;\n            $this.$data.subPanelList.push({\n              scanCodeVal: scanCodeVal,\n              subClassAttr: _list_\n            });\n            var result = data.result;\n            for (var i = 0; i < result.length; i++) {\n              for (var s = 0; s < $this.$data.subPanelList.length; s++) {\n                if ($this.$data.subPanelList[s].scanCodeVal == scanCodeVal) {\n                  var _subClassAttr = $this.$data.subPanelList[s].subClassAttr;\n                  for (var c = 0; c < _subClassAttr.length; c++) {\n                    var attr = _subClassAttr[c].Attr;\n                    for (var j = 0; j < attr.length; j++) {\n                      // console.log(attr[j].Name+'=='+result[i].attr);\n                      if (attr[j].Name == result[i].attr) {\n                        attr[j].Value = result[i].value;\n                      }\n                    }\n                  }\n                }\n              }\n              var length = 0;\n              if (!$this.$data.refdatastore.filter(function (s) {\n                return result[i].attr == s.attr;\n              }).length) {\n                length = 1;\n                $this.$data.refdatastore.push(result[i]);\n              }\n              if (length == 0) {\n                for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                  if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                    $this.$data.refdatastore[j].value = result[i].value;\n                  }\n                }\n              }\n            }\n          }\n        } else {\n          uni.showModal({\n            title: \"错误7\",\n            content: success.msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误7.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    scan_OKDataObjRunCustomEvent: function scan_OKDataObjRunCustomEvent(eventID) {\n      uni.showLoading({\n        title: \"加载中...\"\n      });\n      var $this = this;\n      var req = [];\n      var attrlist = $this.$data.classAttrList;\n      for (var i = 0; i < attrlist.length; i++) {\n        var attr = attrlist[i].Attr;\n        for (var j = 0; j < attr.length; j++) {\n          var ar = attr[j];\n          if (ar.Value == '请选择' || ar.Value == '——请选择——') ar.Value = '';\n          if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n          if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n            attr: ar.Name,\n            value: ar.ValID ? ar.ValID : ''\n          });else if (ar.Type == '布尔值') req.push({\n            attr: ar.Name,\n            value: ar.Value ? '1' : '0'\n          });else if (ar.Type == '字典' || ar.Type == '字典-字符串') {\n            if (ar.select == true) {\n              //判断下拉是否多选\n              var valStr = \"\";\n              for (var v in ar.Value) {\n                if (valStr) valStr += \";\";\n                valStr += ar.Value[v];\n              }\n              req.push({\n                attr: ar.Name,\n                value: valStr\n              });\n            } else req.push({\n              attr: ar.Name,\n              value: ar.Value\n            });\n          } else req.push({\n            attr: ar.Name,\n            value: ar.Value ? ar.Value : ''\n          });\n          if ((ar.NotEmpty == '1' || ar.notempty == true) && !ar.Value) {\n            // if(ar.notEmpty=='1'){\n            uni.hideLoading();\n            // uni.showToast({title:ar.DispName+'不能为空!',icon:\"success\",duration:3000});\n            uni.showModal({\n              title: \"提示\",\n              content: ar.DispName + '不能为空!',\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return;\n          }\n        }\n      }\n      var objects = [];\n      var subPanelList = $this.$data.subPanelList;\n      for (var s = 0; s < subPanelList.length; s++) {\n        var sub_req = [];\n        for (var i = 0; i < subPanelList[s].subClassAttr.length; i++) {\n          var attr = subPanelList[s].subClassAttr[i].Attr;\n          for (var j = 0; j < attr.length; j++) {\n            var ar = attr[j];\n            if (ar.Value == '请选择' || ar.Value == '——请选择——') ar.Value = '';\n            if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n            if (ar.Type == '引用人员' || ar.Type == '引用项目') sub_req.push({\n              attr: ar.Name,\n              value: ar.ValID ? ar.ValID : ''\n            });else if (ar.Type == '布尔值') sub_req.push({\n              attr: ar.Name,\n              value: ar.Value ? '1' : '0'\n            });else if (ar.Type == '字典' || ar.Type == '字典-字符串') {\n              if (ar.select == true) {\n                //判断下拉是否多选\n                var valStr = \"\";\n                for (var v in ar.Value) {\n                  if (valStr) valStr += \";\";\n                  valStr += ar.Value[v];\n                }\n                sub_req.push({\n                  attr: ar.Name,\n                  value: valStr\n                });\n              } else sub_req.push({\n                attr: ar.Name,\n                value: ar.Value\n              });\n            } else sub_req.push({\n              attr: ar.Name,\n              value: ar.Value ? ar.Value : ''\n            });\n            if ((ar.NotEmpty == '1' || ar.notempty == true) && !ar.Value) {\n              // if(ar.notEmpty=='1'){\n              uni.hideLoading();\n              // uni.showToast({title:ar.DispName+'不能为空!',icon:\"success\",duration:3000});\n              uni.showModal({\n                title: \"提示\",\n                content: ar.DispName + '不能为空!',\n                showCancel: false,\n                confirmText: \"取消\"\n              });\n              return;\n            }\n          }\n        }\n        objects.push({\n          obj_id: subPanelList[s].scanCodeVal,\n          obj_attrs: sub_req\n        });\n      }\n      var dataJson = {\n        master_cls: {\n          cls_name: $this.$data.param.Master_Cls.Name,\n          obj_attrs: req\n        },\n        input_3037: $this.$data.scanCodeVal,\n        //扫码内容\n        op_type: $this.$data.param.OperationType,\n        //作业类型定义\n        sub_cls: {\n          cls_name: $this.$data.param.Sub_Cls.Name,\n          objects: objects\n        }\n      };\n      __f__(\"log\", JSON.stringify(dataJson), \" at pages/modal/ms_classAttr.vue:2430\");\n      var dataInfo = {\n        edtype: \"0\",\n        eventid: eventID,\n        projectid: '',\n        rclsid: '',\n        robjid: '',\n        userlogin: '',\n        clsid: $this.$data.param.Sub_Cls.ID,\n        objid: '',\n        attr: JSON.stringify([]),\n        extinfo: JSON.stringify([]),\n        global_attr: JSON.stringify($this.$data.global_attr),\n        dataJson: JSON.stringify(dataJson)\n      };\n      __f__(\"log\", JSON.stringify(dataInfo), \" at pages/modal/ms_classAttr.vue:2436\");\n      __f__(\"log\", dataInfo, \" at pages/modal/ms_classAttr.vue:2437\");\n      this.$store.dispatch('DataObjRunCustomEventInfo', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/ms_classAttr.vue:2439\");\n        uni.hideLoading();\n        if (success.code == '00000') {\n          var data = JSON.parse(success.data);\n          var result = data.result;\n          for (var i = 0; i < result.length; i++) {\n            // self.class_attr_ele.find('.attr_field[data-field=\"' + result[i].attr + '\"]').val(result[i].value).data('val', result[i].value);\n            var length = 0;\n            if (!$this.$data.refdatastore.filter(function (s) {\n              return result[i].attr == s.attr;\n            }).length) {\n              length = 1;\n              $this.$data.refdatastore.push(result[i]);\n            }\n            if (length == 0) {\n              for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                  $this.$data.refdatastore[j].value = result[i].value;\n                }\n              }\n            }\n          }\n          if (eventID != $this.$data.param.After_OK_Event.ID) $this.scan_OKDataObjRunCustomEvent($this.$data.param.After_OK_Event.ID);else {\n            //刷新\n            uni.redirectTo({\n              url: '../modal/ms_classAttr?param=' + JSON.stringify($this.$data.param) + \"&titlename=\" + $this.$data.title\n            });\n          }\n        } else {\n          uni.showModal({\n            title: \"错误8\",\n            content: success.msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.hideLoading();\n        uni.showModal({\n          title: \"错误8.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    }\n  }\n};\nexports.default = _default;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 18)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vcGFnZXMvbW9kYWwvbXNfY2xhc3NBdHRyLnZ1ZSJdLCJuYW1lcyI6WyJjb21wb25lbnRzIiwicGlja2VyQWRkcmVzcyIsImRhdGEiLCJ0aXRsZSIsInBhcmFtIiwiY2xhc3NBdHRyTGlzdCIsImNsYXNzR3JpZFN0eWxlIiwiZWRpdF9pbml0YWxfZXZlbnQiLCJlZGl0X29rX2V2ZW50IiwiZWRpdF9zZWxlY3RfY29tcG9zZV9ldmVudCIsImVkaXRfY29tcG9zZV9jbHNfaWQiLCJnbG9iYWxfYXR0ciIsInJlZmRhdGFzdG9yZSIsInNjYW5Db2RlVmFsIiwic3ViQ2xhc3NBdHRyTGlzdCIsInN1YlBhbmVsTGlzdCIsInN1YkNsYXNzR3JpZFN0eWxlIiwib25Mb2FkIiwib3B0aW9ucyIsInVuaSIsInNldE5hdmlnYXRpb25CYXJUaXRsZSIsInRpdGxlbmFtZSIsIkpTT04iLCJwYXJzZSIsIiRkYXRhIiwiQWRkX0J0bk5hbWUiLCJNYXN0ZXJfQ2xzIiwiVmlld19TdHlsZSIsInNob3dNb2RhbCIsImNvbnRlbnQiLCJzaG93Q2FuY2VsIiwiY29uZmlybVRleHQiLCJOYW1lIiwiZGF0YUluZm8iLCJjbGFzc19pZCIsIklEIiwiJHRoaXMiLCIkc3RvcmUiLCJzdGF0ZSIsInRoaXNhcmVhRnVuY0lEIiwiZ2V0dGVycyIsImdldGNsYXNzQXR0ckxpc3QiLCJjbGFzc0dyaWRTdHlsZUluZm8iLCJkaXNwYXRjaCIsInRoZW4iLCJzdWNjZXNzIiwiY29kZSIsIm1zZyIsImNhdGNoIiwiZXgiLCJlcnJNc2ciLCJzdWJkYXRhSW5mbyIsIlN1Yl9DbHMiLCJ0aGlzYXJlYUZ1bmNTdWJJRCIsImdldFN1YkNsYXNzQXR0ckxpc3QiLCJtZXRob2RzIiwiY2FuY2VsIiwiZSIsIm5hdmlnYXRlQmFjayIsImRlbHRhIiwicGFuZWxfZGVsIiwiaW5kZXgiLCJzcGxpY2UiLCJjbHNpZCIsInN0eWxlTmFtZSIsImNsc1R5cGUiLCJncmlkc3R5bGVJbmZvIiwibmFtZSIsInR5cGUiLCJ0aGlzRWRpdE5hbWUiLCJnZXRjbGFzc0dyaWRTdHlsZUluZm8iLCJjbGFzc19hdHRyX2luaXQiLCJTdHlsZURlZiIsImdldFN1YkNsYXNzR3JpZFN0eWxlSW5mbyIsInN1YkNsYXNzX2F0dHJfaW5pdCIsIm9udGFwIiwiZ2V0QXBwIiwib25TY2FuIiwicmVzdWx0IiwiaXNWYWwiLCJ0YXJnZXQiLCJkYXRhc2V0IiwiQXR0ciIsIlZhbHVlIiwiZGVjb2RlZGF0YSIsImV2ZW50aWQiLCJTY2FuX0NvZGUiLCJJbnB1dF9DaGFuZ2VfRXZlbnQiLCJyZXEiLCJhdHRybGlzdCIsImkiLCJsZW5ndGgiLCJhdHRyIiwiaiIsImFyIiwiVHlwZSIsInB1c2giLCJ2YWwiLCJWYWxJRCIsImluZm8iLCJlZHR5cGUiLCJwcm9qZWN0aWQiLCJyY2xzaWQiLCJyb2JqaWQiLCJ1c2VybG9naW4iLCJvYmppZCIsImlucHV0UGFyYW10ZXIiLCJ2YWx1ZSIsInNjYW5fRGF0YU9ialJ1bkN1c3RvbUV2ZW50Iiwic2Nhbl9vbnRhcCIsImlzZmxhZyIsIm9uYXJyb3ciLCJvcGVuIiwiT3BlbiIsIm9uZGF0ZVRpbWUiLCJvbmNoYW5nZSIsImRpY3RpdGVtIiwiZGF0YV9hdHRyIiwiYWN0aW9uIiwiRGF0YU9ialJ1bkN1c3RvbUV2ZW50Iiwib25jaGFuZ2UyIiwiaXRlbSIsImRlbHZhbHVlIiwiaWluZGV4IiwiZGluZGV4IiwiZCIsInYiLCJpdGVtdmFsdWUiLCJvbmV2ZW50Iiwib25jaGVjayIsImlzY2hlY2tlZCIsImlzY2hlY2siLCJpbnB1dFZhbExpc3RJc0RlbCIsImlucHV0VmFsTGlzdCIsImFkZHJlc3NjaGFuZ2UiLCJqb2luIiwiY2xhc3NBdHRyX2V4dEJ1dHRvbiIsImJlZm9yZV9jbGlja19idXR0b24iLCJidXR0b25fY2FsbGJhY2siLCJEYXRhT2JqUnVuQ3VzdG9tRXZlbnRfUmV0dXJuIiwic2Nhbl9jbGFzc0F0dHJfZXh0QnV0dG9uIiwiQmVmb3JlX1NlbGVjdF9FdmVudCIsIkFmdGVyX1NlbGVjdF9FdmVudCIsImNsYXNzQXR0cl9BZGRQZXIiLCJuYXZpZ2F0ZVRvIiwidXJsIiwic3RyaW5naWZ5IiwiZXZlbnRzIiwiQWRkUGVyIiwiTG9naW4iLCJ0cmltIiwiY2xhc3NBdHRyX0FkZFJlZiIsImNsYXNzQXR0cl9BZGRQcmoiLCJzYXZhIiwiQmVmb3JlX09LX0V2ZW50Iiwic2Nhbl9PS0RhdGFPYmpSdW5DdXN0b21FdmVudCIsIkFmdGVyX09LX0V2ZW50IiwiYWRkIiwic2hvd0xvYWRpbmciLCJzZWxlY3QiLCJ2YWxTdHIiLCJOb3RFbXB0eSIsIm5vdGVtcHR5IiwiaGlkZUxvYWRpbmciLCJEaXNwTmFtZSIsImVudmlyb21lbnQiLCJjbHNfaWQiLCJidXR0b25fbmFtZSIsIm1hc3RlciIsImRhdGFfb2JqX2lkIiwibWFzdGVyY2xzaWQiLCJ1cGZpbGUiLCJwb3N0X2RhdGEiLCJjb21wb3NlIiwiZXh0aW5mbyIsIm5vdF90cmlnZ2VyX3N5c19ldmVudCIsIkFjdGlvbiIsInJldCIsInJlc3VsdF90eXBlIiwic2hvd1RvYXN0IiwiaWNvbiIsImR1cmF0aW9uIiwicmVkaXJlY3RUbyIsInNob3dfc3R5bGUiLCJuZXdhdHRybGlzdCIsImF0dHJncm91cF9uYW1lIiwiYXR0cnMiLCJzIiwiY2xzYXR0ciIsImwiLCJjYSIsImVkaXQiLCJleHRfYnV0dG9uIiwiYnV0dG9uX2ltZyIsImJ1dHRvbl90b29sdGlwIiwiaGlkZGVuIiwidW5kZWZpbmVkIiwiZGljdGl0ZW1saXN0IiwibGFiZWwiLCJDTl9TX05BTUUiLCJDTl9DX0lTX0RFRkFVTFQiLCJub3dEYXRlIiwiRGF0ZSIsImRhdGUiLCJ5ZWFyIiwiZ2V0RnVsbFllYXIiLCJtb250aCIsImdldE1vbnRoIiwiZGF5IiwiZ2V0RGF0ZSIsInJlbENsc0xpc3QiLCJhdHRyX3Jlc2NscyIsIlJlbENscyIsInNwbGl0IiwiaWkiLCJyZXNjbHMiLCJpZCIsIlJlbENsc0xpc3QiLCJCa0NvbG9yIiwiSGFzQWNlIiwiSW1nRm9udFN0eWxlIiwiT3JkZXIiLCJjb250cm9sX3N0eWxlIiwidGl0bGVfcF93ZGl0aCIsIkZvbnQiLCJCa19Db2xvciIsIlRleHRfQ29sb3IiLCJldmVudGxpc3QiLCJldmVudCIsImV2ZW50X2lkIiwic2NyaXBfaWQiLCJjb21wb3NlX2Nsc19pZCIsImluaV9EYXRhT2JqUnVuQ3VzdG9tRXZlbnQiLCJzY2FuX2luaV9EYXRhT2JqUnVuQ3VzdG9tRXZlbnQiLCJFZGl0U3R5bGUiLCJWaWV3U3R5bGUiLCJOb3RUcmlnZ2VyU3lzRXZlbnQiLCJpbnB1dHBhcmFtZXRlciIsImFjdGlvbmxpc3QiLCJhY3Rpb25fdHlwZSIsImEiLCJkaWN0SXRlbUxpc3QiLCJjaG9pY2VfbGlzdCIsImZpbHRlciIsImVkaXRfZGxnIiwiZm9ybV9jb250cm9sIiwidGV4dCIsImdyb3VwX25hbWUiLCJHcm91cE5hbWUiLCJyZWFkb25seSIsIlJlYWRPbmx5IiwicmVwbGFjZSIsImMiLCJPS0RhdGFPYmpSdW5DdXN0b21FdmVudCIsImFjdGlvbnMiLCJkaWFsb2ciLCJzaG93Iiwic3R5bGUiLCJjYWxsYmFja19ldmVudGlkIiwicHJpUmVsIiwic2VsZWN0X3JhbmdlIiwicGFyYW1fIiwiJGFjdGlvbnRyIiwibGlzdF8xIiwic3ViQ2xhc3NBdHRyIiwiX3N1YkNsYXNzQXR0ciIsImV2ZW50SUQiLCJvYmplY3RzIiwic3ViX3JlcSIsIm9ial9pZCIsIm9ial9hdHRycyIsImRhdGFKc29uIiwibWFzdGVyX2NscyIsImNsc19uYW1lIiwiaW5wdXRfMzAzNyIsIm9wX3R5cGUiLCJPcGVyYXRpb25UeXBlIiwic3ViX2NscyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBZ2xCQztBQWhsQkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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Q1osS0FBSyxDQUFDcEIsS0FBSyxDQUFDd0osY0FBYyxDQUFDekgsRUFBRSxFQUNoREMsS0FBSyxDQUFDdUgsNEJBQTRCLENBQUN2SCxLQUFLLENBQUNaLEtBQUssQ0FBQ3BCLEtBQUssQ0FBQ3dKLGNBQWMsQ0FBQ3pILEVBQUUsQ0FBQyxDQUFDLEtBQ3hFO1lBQ0g7WUFDQWhCLEdBQUcsQ0FBQ21LLFVBQVUsQ0FBQztjQUNkckMsR0FBRyxFQUFDLDhCQUE4QixHQUFDM0gsSUFBSSxDQUFDNEgsU0FBUyxDQUFDOUcsS0FBSyxDQUFDWixLQUFLLENBQUNwQixLQUFLLENBQUMsR0FBQyxhQUFhLEdBQUNnQyxLQUFLLENBQUNaLEtBQUssQ0FBQ3JCO1lBQ2hHLENBQUMsQ0FBQztVQUNIO1FBQ0UsQ0FBQyxNQUFJO1VBQ0pnQixHQUFHLENBQUNTLFNBQVMsQ0FBQztZQUFDekIsS0FBSyxFQUFDLEtBQUs7WUFBQzBCLE9BQU8sRUFBQ2dCLE9BQU8sQ0FBQ0UsR0FBRztZQUFDakIsVUFBVSxFQUFDLEtBQUs7WUFBQ0MsV0FBVyxFQUFDO1VBQUksQ0FBQyxDQUFDO1FBQ25GO01BQ0QsQ0FBQyxDQUFDLENBQUNpQixLQUFLLENBQUMsVUFBQUMsRUFBRSxFQUFFO1FBQ1o7UUFDSDlCLEdBQUcsQ0FBQ2dKLFdBQVcsRUFBRTtRQUNkaEosR0FBRyxDQUFDUyxTQUFTLENBQUM7VUFBQ3pCLEtBQUssRUFBQyxPQUFPO1VBQUMwQixPQUFPLEVBQUNvQixFQUFFLENBQUNDLE1BQU07VUFBQ3BCLFVBQVUsRUFBQyxLQUFLO1VBQUNDLFdBQVcsRUFBQztRQUFJLENBQUMsQ0FBQztNQUNuRixDQUFDLENBQUM7SUFDSDtFQUdKO0FBQ0QsQ0FBQztBQUFBLDJCIiwiZmlsZSI6IjgwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cdGltcG9ydCBwaWNrZXJBZGRyZXNzIGZyb20gJy4uLy4uL2pzL3BpY2tlckFkZHJlc3MvcGlja2VyQWRkcmVzcy52dWUnXG5cdGV4cG9ydCBkZWZhdWx0IHtcblx0XHRjb21wb25lbnRzOiB7XG4gICAgICAgICAgICBwaWNrZXJBZGRyZXNzXG4gICAgICAgIH0sXG5cdFx0ZGF0YSgpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHRpdGxlOiAn5paw5aKeJyxcblx0XHRcdFx0cGFyYW06e30sXG5cdFx0XHRcdGNsYXNzQXR0ckxpc3Q6W10sXG5cdFx0XHRcdGNsYXNzR3JpZFN0eWxlOltdLFxuXHRcdFx0XHRlZGl0X2luaXRhbF9ldmVudDpcIlwiLCAgLy/lvLnnqpfliJ3lp4vljJbkuovku7ZJRFxuXHRcdFx0XHRlZGl0X29rX2V2ZW50OlwiXCIsICAgICAgLy/lvLnnqpfngrnlh7tPSyDop6blj5Hkuovku7ZJRFxuXHRcdFx0XHRlZGl0X3NlbGVjdF9jb21wb3NlX2V2ZW50OlwiXCIsICAvL+mAieaLqee7hOaIkOWvueixoeaXtuiwg+eUqFxuXHRcdFx0XHRlZGl0X2NvbXBvc2VfY2xzX2lkOlwiXCIsXG5cdFx0XHRcdGdsb2JhbF9hdHRyOltdLFxuXHRcdFx0XHRyZWZkYXRhc3RvcmU6IFtdLFx0ICAgLy/lvJXnlKjmlbDmja7lrZjlgqjljLovLyB7YXR0cjonR19QUkpfJyArIGJpbmRhdHRyICsgJ19JRCcsIHZhbHVlOmluZm8uaWR9XG5cdFx0XHRcdHNjYW5Db2RlVmFsOlwiXCIsXG5cdFx0XHRcdHN1YkNsYXNzQXR0ckxpc3Q6W10sXG5cdFx0XHRcdHN1YlBhbmVsTGlzdDpbXSxcblx0XHRcdFx0c3ViQ2xhc3NHcmlkU3R5bGU6W10sXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRvbkxvYWQob3B0aW9ucykge1xuXHRcdFx0Ly8gY29uc29sZS5sb2cob3B0aW9ucyk7XG5cdFx0XHR1bmkuc2V0TmF2aWdhdGlvbkJhclRpdGxlKHsgdGl0bGU6IG9wdGlvbnMudGl0bGVuYW1lfSk7IC8v6K6+572u6aG26YOo5qCH6aKYIFxuXHRcdFx0dmFyIHBhcmFtID0gSlNPTi5wYXJzZShvcHRpb25zLnBhcmFtKTtcblx0XHRcdHRoaXMuJGRhdGEudGl0bGUgPSBwYXJhbS5BZGRfQnRuTmFtZT9wYXJhbS5BZGRfQnRuTmFtZTpvcHRpb25zLnRpdGxlbmFtZTsgLy/orr7nva7mjInpkq7mloflrZdcblx0XHRcdGNvbnNvbGUubG9nKHBhcmFtKTtcblx0XHRcdGlmKCFwYXJhbS5NYXN0ZXJfQ2xzLlZpZXdfU3R5bGUpe1xuXHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCLor6Xlip/og73ngrnmnKrphY3nva7nlYzpnaLnqpflj6PvvIzor7fph43mlrDphY3nva7vvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0aWYoIXBhcmFtLk1hc3Rlcl9DbHMuVmlld19TdHlsZS5OYW1lKXtcblx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50Olwi6K+l5Yqf6IO954K55pyq6YWN572u56qX5Y+j5qC35byP77yM6K+36YeN5paw6YWN572u77yBXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHRoaXMuJGRhdGEucGFyYW0gPSBwYXJhbTtcblx0XHRcdC8vIHZhciBlZGl0X2RsZyA9IHtcblx0XHRcdC8vICAgICBNb2RlbDogcGFyYW0uRWRpdERsZ01vZGUsXG5cdFx0XHQvLyAgICAgTmFtZTogcGFyYW0uTWFzdGVyX0Nscy5WaWV3X1N0eWxlLk5hbWVcblx0XHRcdC8vIH1cblx0XHRcdC8v5Li75pWw5o2u57G76I635Y+WXG5cdFx0XHR2YXIgZGF0YUluZm8gPSB7XG5cdFx0XHRcdGNsYXNzX2lkOiBwYXJhbS5NYXN0ZXJfQ2xzLklEXG5cdFx0XHR9O1xuXHRcdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHRcdCR0aGlzLiRzdG9yZS5zdGF0ZS50aGlzYXJlYUZ1bmNJRCA9IHBhcmFtLk1hc3Rlcl9DbHMuSUQ7XG5cdFx0XHQvLyBjb25zb2xlLmxvZygkdGhpcy4kc3RvcmUuZ2V0dGVycy5nZXRjbGFzc0F0dHJMaXN0KTtcblx0XHRcdGlmKCR0aGlzLiRzdG9yZS5nZXR0ZXJzLmdldGNsYXNzQXR0ckxpc3Qpe1xuXHRcdFx0IFx0JHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdCA9ICR0aGlzLiRzdG9yZS5nZXR0ZXJzLmdldGNsYXNzQXR0ckxpc3QuZGF0YTtcblx0XHRcdFx0JHRoaXMuY2xhc3NHcmlkU3R5bGVJbmZvKHBhcmFtLk1hc3Rlcl9DbHMuSUQsJHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5WaWV3X1N0eWxlLk5hbWUsJ01hc3QnKTtcblx0XHRcdH1lbHNle1xuXHRcdFx0XHQkdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2NsYXNzQXR0ckxpc3QnLGRhdGFJbmZvKS50aGVuKHN1Y2Nlc3M9Pntcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhzdWNjZXNzKTtcblx0XHRcdFx0XHRpZiAoc3VjY2Vzcy5jb2RlPT0nMDAwMDAnKSB7XG5cdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0ID0gc3VjY2Vzcy5kYXRhO1xuXHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHQkdGhpcy5jbGFzc0dyaWRTdHlsZUluZm8ocGFyYW0uTWFzdGVyX0Nscy5JRCwkdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLlZpZXdfU3R5bGUuTmFtZSwnTWFzdCcpO1xuXHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68xXCIsY29udGVudDpzdWNjZXNzLm1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLmNhdGNoKGV4PT57XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMS4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0XG5cdFx0XHQvL+S7juaVsOaNruexu+iOt+WPllxuXHRcdFx0dmFyIHN1YmRhdGFJbmZvID0ge1xuXHRcdFx0XHRjbGFzc19pZDogcGFyYW0uU3ViX0Nscy5JRFxuXHRcdFx0fTtcblx0XHRcdCR0aGlzLiRzdG9yZS5zdGF0ZS50aGlzYXJlYUZ1bmNTdWJJRCA9IHBhcmFtLlN1Yl9DbHMuSUQ7XG5cdFx0XHRpZigkdGhpcy4kc3RvcmUuZ2V0dGVycy5nZXRTdWJDbGFzc0F0dHJMaXN0KXtcblx0XHRcdCBcdCR0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3QgPSAkdGhpcy4kc3RvcmUuZ2V0dGVycy5nZXRTdWJDbGFzc0F0dHJMaXN0LmRhdGE7XG5cdFx0XHRcdFx0XHQkdGhpcy5jbGFzc0dyaWRTdHlsZUluZm8ocGFyYW0uU3ViX0Nscy5JRCwkdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLlZpZXdfU3R5bGUuTmFtZSwnU3ViJyk7XG5cdFx0XHR9ZWxzZXtcblx0XHRcdFx0JHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdzdWJDbGFzc0F0dHJMaXN0JyxzdWJkYXRhSW5mbykudGhlbihzdWNjZXNzPT57XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coc3VjY2Vzcyk7XG5cdFx0XHRcdFx0aWYgKHN1Y2Nlc3MuY29kZT09JzAwMDAwJykge1xuXHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdCA9IHN1Y2Nlc3MuZGF0YTtcblx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0JHRoaXMuY2xhc3NHcmlkU3R5bGVJbmZvKHBhcmFtLlN1Yl9DbHMuSUQsJHRoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5WaWV3X1N0eWxlLk5hbWUsJ1N1YicpO1xuXHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68xXzFcIixjb250ZW50OnN1Y2Nlc3MubXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSkuY2F0Y2goZXg9Pntcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhleCk7XG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68xXzEuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdG1ldGhvZHM6IHtcblx0XHRcdGNhbmNlbChlKXtcblx0XHRcdFx0dW5pLm5hdmlnYXRlQmFjayh7XG5cdFx0XHRcdFx0ZGVsdGE6MSAvL+i/lOWbnuWxguaVsO+8jDLliJnkuIrkuIrpobVcblx0XHRcdFx0fSk7XG5cdFx0XHR9LFxuXHRcdFx0cGFuZWxfZGVsKGluZGV4KXtcblx0XHRcdFx0aWYgKHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W2luZGV4XS5zY2FuQ29kZVZhbCA9PSB0aGlzLiRkYXRhLnNjYW5Db2RlVmFsKSB7XG5cdFx0XHRcdFx0dGhpcy4kZGF0YS5zY2FuQ29kZVZhbD0nJztcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdFx0fSxcblx0XHRcdGFzeW5jIGNsYXNzR3JpZFN0eWxlSW5mbyhjbHNpZCxzdHlsZU5hbWUsY2xzVHlwZSl7XG5cdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cdFx0XHRcdHZhciBncmlkc3R5bGVJbmZvID0ge1xuXHRcdFx0XHRcdGNsYXNzX2lkOiBjbHNpZCxcblx0XHRcdFx0XHRuYW1lOiBzdHlsZU5hbWUsXG5cdFx0XHRcdFx0dHlwZTogJzInXG5cdFx0XHRcdH07XG5cdFx0XHRcdCR0aGlzLiRzdG9yZS5zdGF0ZS50aGlzRWRpdE5hbWUgPSBzdHlsZU5hbWU7XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKCR0aGlzLiRzdG9yZS5nZXR0ZXJzLmdldGNsYXNzR3JpZFN0eWxlSW5mbyk7XG5cdFx0XHRcdC8v6I635Y+W5Li75pWw5o2u57G755WM6Z2i5qC35byPXG5cdFx0XHRcdGlmKGNsc1R5cGU9PSdNYXN0Jyl7XG5cdFx0XHRcdFx0aWYoJHRoaXMuJHN0b3JlLmdldHRlcnMuZ2V0Y2xhc3NHcmlkU3R5bGVJbmZvKXtcblx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlID0gJHRoaXMuJHN0b3JlLmdldHRlcnMuZ2V0Y2xhc3NHcmlkU3R5bGVJbmZvLmRhdGE7XG5cdFx0XHRcdFx0XHQkdGhpcy5jbGFzc19hdHRyX2luaXQoKTtcblx0XHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRcdC8vY29uc29sZS5sb2coZ3JpZHN0eWxlSW5mbyk7XG5cdFx0XHRcdFx0XHQkdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2NsYXNzR3JpZFN0eWxlSW5mbycsZ3JpZHN0eWxlSW5mbykudGhlbihzdWNjZXNzPT57XG5cdFx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xuXHRcdFx0XHRcdFx0XHRpZiAoc3VjY2Vzcy5jb2RlPT0nMDAwMDAnKSB7XG5cdFx0XHRcdFx0XHRcdFx0c3VjY2Vzcy5kYXRhLlN0eWxlRGVmID0gSlNPTi5wYXJzZShzdWNjZXNzLmRhdGEuU3R5bGVEZWYpO1xuXHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlID0gc3VjY2Vzcy5kYXRhO1xuXHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdCR0aGlzLmNsYXNzX2F0dHJfaW5pdCgpO1xuXHRcdFx0XHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzEuMlwiLGNvbnRlbnQ6c3VjY2Vzcy5tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pLmNhdGNoKGV4PT57XG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGV4KTtcblx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68xLjNcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmKGNsc1R5cGU9PSdTdWInKXsgIC8v6I635Y+W5LuO5pWw5o2u57G755WM6Z2i5qC35byPXG5cdFx0XHRcdFx0aWYoJHRoaXMuJHN0b3JlLmdldHRlcnMuZ2V0U3ViQ2xhc3NHcmlkU3R5bGVJbmZvKXtcblx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlID0gJHRoaXMuJHN0b3JlLmdldHRlcnMuZ2V0U3ViQ2xhc3NHcmlkU3R5bGVJbmZvLmRhdGE7XG5cdFx0XHRcdFx0XHQkdGhpcy5zdWJDbGFzc19hdHRyX2luaXQoKTtcblx0XHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRcdC8vY29uc29sZS5sb2coZ3JpZHN0eWxlSW5mbyk7XG5cdFx0XHRcdFx0XHQkdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ3N1YkNsYXNzR3JpZFN0eWxlSW5mbycsZ3JpZHN0eWxlSW5mbykudGhlbihzdWNjZXNzPT57XG5cdFx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xuXHRcdFx0XHRcdFx0XHRpZiAoc3VjY2Vzcy5jb2RlPT0nMDAwMDAnKSB7XG5cdFx0XHRcdFx0XHRcdFx0c3VjY2Vzcy5kYXRhLlN0eWxlRGVmID0gSlNPTi5wYXJzZShzdWNjZXNzLmRhdGEuU3R5bGVEZWYpO1xuXHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlID0gc3VjY2Vzcy5kYXRhO1xuXHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdCR0aGlzLnN1YkNsYXNzX2F0dHJfaW5pdCgpO1xuXHRcdFx0XHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzEuMlwiLGNvbnRlbnQ6c3VjY2Vzcy5tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pLmNhdGNoKGV4PT57XG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGV4KTtcblx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68xLjNcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdG9udGFwKGUpeyAvL+aJq+eggeWKn+iDvVxuXHRcdFx0XHQvL2NvbnNvbGUubG9nKGUudGFyZ2V0KVxuXHRcdFx0XHRnZXRBcHAoKS5vblNjYW4oKHJlc3VsdCk9Pntcblx0XHRcdFx0XHQvL2NvbnNvbGUubG9nKHJlc3VsdC5kZWNvZGVkYXRhKTtcblx0XHRcdFx0XHR2YXIgaXNWYWwgPXRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5WYWx1ZTtcblx0XHRcdFx0XHQvL+S4u+aVsOaNruexu+aJq+eggeafpeivouaVsOaNrlxuXHRcdFx0XHRcdGlmIChpc1ZhbCE9cmVzdWx0LmRlY29kZWRhdGEpIHtcblx0XHRcdFx0XHRcdHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5WYWx1ZT1yZXN1bHQuZGVjb2RlZGF0YTtcblx0XHRcdFx0XHRcdC8v5a2Q5pWw5o2u57G75omr56CB5Yy65LqL5Lu26ISa5pysXG5cdFx0XHRcdFx0XHR2YXIgZXZlbnRpZCA9IHRoaXMuJGRhdGEucGFyYW0uU2Nhbl9Db2RlLklucHV0X0NoYW5nZV9FdmVudC5JRDtcblx0XHRcdFx0XHRcdGlmIChldmVudGlkKSB7XG5cdFx0XHRcdFx0ICAgICAgICB2YXIgcmVxPVtdO1xuXHRcdFx0XHRcdCAgICAgICAgdmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0OyAgLy/kuLvmlbDmja7nsbvlsZ7mgKdcblx0XHRcdFx0XHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHQgICAgICAgIFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xuXHRcdFx0XHRcdCAgICAgICAgXHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHQgICAgICAgIFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHRcdCAgICAgICAgXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0XHRpZihhci5WYWx1ZT09J+ivtycpIGFyLlZhbHVlPScnO1xuXHRcdFx0XHRcdCAgICAgICAgXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxuXHRcdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8Jylcblx0XHRcdFx0XHQgICAgICAgIFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsOiBhci5WYWx1ZT8nMSc6JzAnfSk7XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZVxuXHRcdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbHVlID9hci5WYWx1ZSA6Jyd9KTtcblx0XHRcdFx0XHQgICAgICAgIFx0fVxuXHRcdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHRcdCAgICAgICAgdmFyIGluZm8gPSB7XG5cdFx0XHRcdFx0ICAgICAgICAgICAgZXZlbnRpZDogZXZlbnRpZCxcblx0XHRcdFx0XHQgICAgICAgICAgICBlZHR5cGU6IFwiMFwiLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIHByb2plY3RpZDogJycsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgcmNsc2lkOiAnJyxcblx0XHRcdFx0XHQgICAgICAgICAgICByb2JqaWQ6ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIHVzZXJsb2dpbjogJycsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgY2xzaWQ6IHRoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5JRCxcblx0XHRcdFx0XHQgICAgICAgICAgICBvYmppZDogXCJcIixcblx0XHRcdFx0XHQgICAgICAgICAgICBhdHRyOiByZXEsXG5cdFx0XHRcdFx0XHRcdFx0aW5wdXRQYXJhbXRlcjpbeyBhdHRyOiAnbWFzdF9pbnB1dF8zMDM3JywgdmFsdWU6IHJlc3VsdC5kZWNvZGVkYXRhIH1dXG5cdFx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdCAgICAgICAgdGhpcy5zY2FuX0RhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvLCBcIlwiKTtcblx0XHRcdFx0XHQgICAgfVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdH0sXG5cdFx0XHRzY2FuX29udGFwKGUpeyAvL+aJq+eggeWMuuaJq+eggeWKn+iDvVxuXHRcdFx0XHQvL2NvbnNvbGUubG9nKGUudGFyZ2V0KVxuXHRcdFx0XHRnZXRBcHAoKS5vblNjYW4oKHJlc3VsdCk9Pntcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhyZXN1bHQuZGVjb2RlZGF0YSk7XG5cdFx0XHRcdFx0dmFyIGlzZmxhZz10cnVlO1xuXHRcdFx0XHRcdGZvcih2YXIgaSBpbiB0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdCl7XG5cdFx0XHRcdFx0XHRpZih0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtpXS5zY2FuQ29kZVZhbCA9PSByZXN1bHQuZGVjb2RlZGF0YSkgXG5cdFx0XHRcdFx0XHRcdGlzZmxhZz1mYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly/lrZDmlbDmja7nsbvmiavnoIHmn6Xor6LmlbDmja5cblx0XHRcdFx0XHRpZiAoaXNmbGFnKSB7XG5cdFx0XHRcdFx0XHR0aGlzLiRkYXRhLnNjYW5Db2RlVmFsPXJlc3VsdC5kZWNvZGVkYXRhO1xuXHRcdFx0XHRcdFx0dmFyIGV2ZW50aWQgPSB0aGlzLiRkYXRhLnBhcmFtLlNjYW5fQ29kZS5JbnB1dF9DaGFuZ2VfRXZlbnQuSUQ7XG5cdFx0XHRcdFx0XHRpZiAoZXZlbnRpZCkge1xuXHRcdFx0XHRcdCAgICAgICAgdmFyIHJlcT1bXTtcblx0XHRcdFx0XHQgICAgICAgIHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdDtcblx0XHRcdFx0XHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHQgICAgICAgIFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xuXHRcdFx0XHRcdCAgICAgICAgXHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHQgICAgICAgIFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHRcdCAgICAgICAgXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0XHRpZihhci5WYWx1ZT09J+ivtycpIGFyLlZhbHVlPScnO1xuXHRcdFx0XHRcdCAgICAgICAgXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxuXHRcdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsSUQgP2FyLlZhbElEIDonJyB9KTtcblx0XHRcdFx0XHQgICAgICAgIFx0XHRlbHNlIGlmKGFyLlR5cGU9PSfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZT8nMSc6JzAnfSk7XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZVxuXHRcdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWUgP2FyLlZhbHVlIDonJ30pO1xuXHRcdFx0XHRcdCAgICAgICAgXHR9XG5cdFx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdFx0ICAgICAgICB2YXIgaW5mbyA9IHtcblx0XHRcdFx0XHQgICAgICAgICAgICBldmVudGlkOiBldmVudGlkLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIGVkdHlwZTogXCIwXCIsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgcHJvamVjdGlkOiAnJyxcblx0XHRcdFx0XHQgICAgICAgICAgICByY2xzaWQ6ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIHJvYmppZDogJycsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgdXNlcmxvZ2luOiAnJyxcblx0XHRcdFx0XHQgICAgICAgICAgICBjbHNpZDogdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLklELFxuXHRcdFx0XHRcdCAgICAgICAgICAgIG9iamlkOiBcIlwiLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIGF0dHI6IHJlcSxcblx0XHRcdFx0XHRcdFx0XHRpbnB1dFBhcmFtdGVyOlt7IGF0dHI6ICdpbnB1dF8zMDM3JywgdmFsdWU6IHRoaXMuJGRhdGEuc2NhbkNvZGVWYWwgfV1cblx0XHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0ICAgICAgICB0aGlzLnNjYW5fRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8sIFwiXCIpO1xuXHRcdFx0XHRcdCAgICB9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0fSxcblx0XHRcdG9uYXJyb3coaW5kZXgsb3Blbil7XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGluZGV4KyctLScrb3Blbik7XG5cdFx0XHRcdHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpbmRleF0uT3Blbj1vcGVuPT10cnVlP2ZhbHNlOnRydWU7XG5cdFx0XHR9LFxuXHRcdFx0b25kYXRlVGltZShlKSB7XG5cdFx0XHRcdC8vY29uc29sZS5sb2coZS50YXJnZXQpXG5cdFx0XHRcdHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5WYWx1ZT1lLnRhcmdldC52YWx1ZTtcblx0XHRcdH0sXG5cdFx0XHRvbmNoYW5nZShlKSB7XG5cdFx0XHRcdGNvbnNvbGUubG9nKGUudGFyZ2V0KTtcblx0XHRcdFx0dmFyIHZhbHVlPXRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5kaWN0aXRlbVtlLnRhcmdldC52YWx1ZV07XG5cdFx0XHRcdHZhciBkYXRhX2F0dHIgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV07XG5cdFx0XHRcdGNvbnNvbGUubG9nKGRhdGFfYXR0cik7XG5cdFx0XHRcdGlmICh2YWx1ZS5OYW1lICE9IGRhdGFfYXR0ci5WYWx1ZSkge1xuXHRcdFx0XHRcdHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5WYWx1ZT12YWx1ZS5OYW1lO1xuXHRcdFx0XHRcdGNvbnNvbGUubG9nKHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5WYWx1ZSk7XG5cdFx0XHRcdFx0dmFyIGV2ZW50aWQgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uYWN0aW9uO1xuXHRcdFx0XHRcdGlmIChldmVudGlkKSB7XG5cdFx0XHRcdCAgICAgICAgLy8gc2VsZi5ldmVudF9ub19zdWIgPSAxO1xuXHRcdFx0XHQgICAgICAgIHZhciByZXE9W107XG5cdFx0XHRcdCAgICAgICAgdmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0O1xuXHRcdFx0XHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0ICAgICAgICBcdHZhciBhdHRyID0gYXR0cmxpc3RbaV0uQXR0cjtcblx0XHRcdFx0ICAgICAgICBcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHQgICAgICAgIFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHQgICAgICAgIFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxuXHRcdFx0XHQgICAgICAgIFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdCAgICAgICAgXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxuXHRcdFx0XHQgICAgICAgIFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsOiBhci5WYWxJRCA/YXIuVmFsSUQgOicnIH0pO1xuXHRcdFx0XHQgICAgICAgIFx0XHRlbHNlIGlmKGFyLlR5cGU9PSfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbHVlPycxJzonMCd9KTtcblx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZVxuXHRcdFx0XHQgICAgICAgIFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsOiBhci5WYWx1ZSA/YXIuVmFsdWUgOicnfSk7XG5cdFx0XHRcdCAgICAgICAgXHR9XG5cdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgIHZhciBpbmZvID0ge1xuXHRcdFx0XHQgICAgICAgICAgICBldmVudGlkOiBldmVudGlkLFxuXHRcdFx0XHQgICAgICAgICAgICBlZHR5cGU6IFwiMFwiLFxuXHRcdFx0XHQgICAgICAgICAgICBwcm9qZWN0aWQ6ICcnLFxuXHRcdFx0XHQgICAgICAgICAgICByY2xzaWQ6ICcnLFxuXHRcdFx0XHQgICAgICAgICAgICByb2JqaWQ6ICcnLFxuXHRcdFx0XHQgICAgICAgICAgICB1c2VybG9naW46ICcnLFxuXHRcdFx0XHQgICAgICAgICAgICBjbHNpZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELFxuXHRcdFx0XHQgICAgICAgICAgICBvYmppZDogXCJcIixcblx0XHRcdFx0ICAgICAgICAgICAgYXR0cjogcmVxLFxuXHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0ICAgICAgICB0aGlzLkRhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvKTtcblx0XHRcdFx0ICAgIH1cblx0XHRcdFx0fVxuXHRcdFx0XHRcblx0XHRcdH0sXG5cdFx0XHRvbmNoYW5nZTIoaXRlbSx2YWx1ZSxkZWx2YWx1ZSkge1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhpdGVtKTtcblx0XHRcdFx0Ly8gY29uc29sZS5sb2codmFsdWUpO1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhkZWx2YWx1ZSk7XG5cdFx0XHRcdGlmKGl0ZW0ubGVuZ3RoPT0wKXsgLy/kuLrnqbrml7bvvIzmuIXnqbrlsZ7mgKd2YWx1ZVxuXHRcdFx0XHRcdHZhciBpbmRleCAsaWluZGV4LGRpbmRleD0wO1xuXHRcdFx0XHRcdGZvcih2YXIgaSBpbiB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Qpe1xuXHRcdFx0XHRcdFx0Zm9yKHZhciBqIGluIHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpXS5BdHRyKXtcblx0XHRcdFx0XHRcdFx0Zm9yKHZhciBkIGluIHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpXS5BdHRyW2pdLmRpY3RpdGVtKXtcblx0XHRcdFx0XHRcdFx0XHRpZihkZWx2YWx1ZVswXS5OYW1lID09IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpXS5BdHRyW2pdLmRpY3RpdGVtW2RdLk5hbWUpe1xuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2ldLkF0dHJbal0uVmFsdWU9XCJcIjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0XHRcblx0XHRcdFx0Zm9yKHZhciB2IGluIGl0ZW0pe1xuXHRcdFx0XHRcdHZhciBpbmRleCAsaWluZGV4LGRpbmRleD0wO1xuXHRcdFx0XHRcdGZvcih2YXIgaSBpbiB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Qpe1xuXHRcdFx0XHRcdFx0Zm9yKHZhciBqIGluIHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpXS5BdHRyKXtcblx0XHRcdFx0XHRcdFx0Zm9yKHZhciBkIGluIHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpXS5BdHRyW2pdLmRpY3RpdGVtKXtcblx0XHRcdFx0XHRcdFx0XHRpZihpdGVtW3ZdLk5hbWUgPT0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2ldLkF0dHJbal0uZGljdGl0ZW1bZF0uTmFtZSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRpbmRleD1pO2lpbmRleD1qO2RpbmRleD1kO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR2YXIgaXRlbXZhbHVlID0gaXRlbVt2XTtcblx0XHRcdFx0XHR2YXIgZGF0YV9hdHRyID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2luZGV4XS5BdHRyW2lpbmRleF07XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0Y29uc29sZS5sb2coZGF0YV9hdHRyKTtcblx0XHRcdFx0XHRpZiAoaXRlbXZhbHVlLk5hbWUgIT0gZGF0YV9hdHRyLlZhbHVlKSB7XG5cdFx0XHRcdFx0XHR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbaW5kZXhdLkF0dHJbaWluZGV4XS5WYWx1ZT12YWx1ZTtcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpbmRleF0uQXR0cltpaW5kZXhdLlZhbHVlKTtcblx0XHRcdFx0XHRcdHZhciBldmVudGlkID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2luZGV4XS5BdHRyW2lpbmRleF0uYWN0aW9uO1xuXHRcdFx0XHRcdFx0aWYgKGV2ZW50aWQpIHtcblx0XHRcdFx0XHQgICAgICAgIC8vIHNlbGYuZXZlbnRfbm9fc3ViID0gMTtcblx0XHRcdFx0XHQgICAgICAgIHZhciByZXE9W107XG5cdFx0XHRcdFx0ICAgICAgICB2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Q7XG5cdFx0XHRcdFx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0ICAgICAgICBcdHZhciBhdHRyID0gYXR0cmxpc3RbaV0uQXR0cjtcblx0XHRcdFx0XHQgICAgICAgIFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0dmFyIGFyID0gYXR0cltqXTtcblx0XHRcdFx0XHQgICAgICAgIFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxuXHRcdFx0XHRcdCAgICAgICAgXHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0XHQgICAgICAgIFx0XHRpZihhci5UeXBlPT0n5byV55So5Lq65ZGYJyB8fCBhci5UeXBlPT0n5byV55So6aG555uuJylcblx0XHRcdFx0XHQgICAgICAgIFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsOiBhci5WYWxJRCA/YXIuVmFsSUQgOicnIH0pO1xuXHRcdFx0XHRcdCAgICAgICAgXHRcdGVsc2UgaWYoYXIuVHlwZT09J+W4g+WwlOWAvCcpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsOiBhci5WYWx1ZT8nMSc6JzAnfSk7XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZSBpZihhci5UeXBlPT0n5a2X5YW4JyB8fCBhci5UeXBlPT0n5a2X5YW4LeWtl+espuS4sicpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsOiBpdGVtdmFsdWUuTmFtZX0pO1xuXHRcdFx0XHRcdCAgICAgICAgXHRcdGVsc2Vcblx0XHRcdFx0XHQgICAgICAgIFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsOiBhci5WYWx1ZSA/YXIuVmFsdWUgOicnfSk7XG5cdFx0XHRcdFx0ICAgICAgICBcdH1cblx0XHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHQgICAgICAgIHZhciBpbmZvID0ge1xuXHRcdFx0XHRcdCAgICAgICAgICAgIGV2ZW50aWQ6IGV2ZW50aWQsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgZWR0eXBlOiBcIjBcIixcblx0XHRcdFx0XHQgICAgICAgICAgICBwcm9qZWN0aWQ6ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIHJjbHNpZDogJycsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgcm9iamlkOiAnJyxcblx0XHRcdFx0XHQgICAgICAgICAgICB1c2VybG9naW46ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIGNsc2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgb2JqaWQ6IFwiXCIsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgYXR0cjogcmVxLFxuXHRcdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHRcdCAgICAgICAgdGhpcy5EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbyk7XG5cdFx0XHRcdFx0ICAgIH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFx0XHRcdFxuXHRcdFx0fSxcblx0XHRcdG9uZXZlbnQoZSl7XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGUudGFyZ2V0KTtcblx0XHRcdFx0dmFyIGRhdGFfYXR0ciA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXTtcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coZGF0YV9hdHRyKTtcblx0XHRcdFx0aWYgKGUudGFyZ2V0LnZhbHVlICE9IGRhdGFfYXR0ci5WYWx1ZSkge1xuXHRcdFx0XHRcdHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5WYWx1ZT1lLnRhcmdldC52YWx1ZTtcblx0XHRcdFx0XHR2YXIgZXZlbnRpZCA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5hY3Rpb247XG5cdFx0XHRcdFx0aWYgKGV2ZW50aWQpIHtcblx0XHRcdFx0ICAgICAgICAvLyBzZWxmLmV2ZW50X25vX3N1YiA9IDE7XG5cdFx0XHRcdCAgICAgICAgdmFyIHJlcT1bXTtcblx0XHRcdFx0ICAgICAgICB2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Q7XG5cdFx0XHRcdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHQgICAgICAgIFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xuXHRcdFx0XHQgICAgICAgIFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdCAgICAgICAgXHRcdHZhciBhciA9IGF0dHJbal07XG5cdFx0XHRcdCAgICAgICAgXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpXG5cdFx0XHRcdCAgICAgICAgXHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0ICAgICAgICBcdFx0aWYoYXIuVHlwZT09J+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZT09J+W8leeUqOmhueebricpXG5cdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XG5cdFx0XHRcdCAgICAgICAgXHRcdGVsc2UgaWYoYXIuVHlwZT09J+W4g+WwlOWAvCcpXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsdWU/JzEnOicwJ30pO1xuXHRcdFx0XHQgICAgICAgIFx0XHRlbHNlXG5cdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbHVlID9hci5WYWx1ZSA6Jyd9KTtcblx0XHRcdFx0ICAgICAgICBcdH1cblx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdCAgICAgICAgdmFyIGluZm8gPSB7XG5cdFx0XHRcdCAgICAgICAgICAgIGV2ZW50aWQ6IGV2ZW50aWQsXG5cdFx0XHRcdCAgICAgICAgICAgIGVkdHlwZTogXCIwXCIsXG5cdFx0XHRcdCAgICAgICAgICAgIHByb2plY3RpZDogJycsXG5cdFx0XHRcdCAgICAgICAgICAgIHJjbHNpZDogJycsXG5cdFx0XHRcdCAgICAgICAgICAgIHJvYmppZDogJycsXG5cdFx0XHRcdCAgICAgICAgICAgIHVzZXJsb2dpbjogJycsXG5cdFx0XHRcdCAgICAgICAgICAgIGNsc2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsXG5cdFx0XHRcdCAgICAgICAgICAgIG9iamlkOiBcIlwiLFxuXHRcdFx0XHQgICAgICAgICAgICBhdHRyOiByZXEsXG5cdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgIHRoaXMuRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8sIGRhdGFfYXR0cik7XG5cdFx0XHRcdCAgICB9XG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFx0XHR9LFxuXHRcdFx0b25jaGVjayhlKSB7XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGUudGFyZ2V0KTtcblx0XHRcdFx0dmFyIGlzY2hlY2tlZCA9IGUudGFyZ2V0LmRhdGFzZXQuaXNjaGVjaz9mYWxzZTp0cnVlO1xuXHRcdFx0XHR2YXIgZGF0YV9hdHRyID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dO1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhkYXRhX2F0dHIpO1xuXHRcdFx0XHRpZiAoaXNjaGVja2VkICE9IGRhdGFfYXR0ci5WYWx1ZSkge1xuXHRcdFx0XHRcdHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5WYWx1ZT1pc2NoZWNrZWQ7XG5cdFx0XHRcdFx0dmFyIGV2ZW50aWQgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uYWN0aW9uO1xuXHRcdFx0XHRcdGlmIChldmVudGlkKSB7XG5cdFx0XHRcdCAgICAgICAgLy8gc2VsZi5ldmVudF9ub19zdWIgPSAxO1xuXHRcdFx0XHQgICAgICAgIHZhciByZXE9W107XG5cdFx0XHRcdCAgICAgICAgdmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0O1xuXHRcdFx0XHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0ICAgICAgICBcdHZhciBhdHRyID0gYXR0cmxpc3RbaV0uQXR0cjtcblx0XHRcdFx0ICAgICAgICBcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHQgICAgICAgIFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHQgICAgICAgIFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxuXHRcdFx0XHQgICAgICAgIFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdCAgICAgICAgXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxuXHRcdFx0XHQgICAgICAgIFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsOiBhci5WYWxJRCA/YXIuVmFsSUQgOicnIH0pO1xuXHRcdFx0XHQgICAgICAgIFx0XHRlbHNlIGlmKGFyLlR5cGU9PSfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbHVlPycxJzonMCd9KTtcblx0XHRcdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsdWUgP2FyLlZhbHVlIDonJ30pO1xuXHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHQgICAgICAgIFx0fVxuXHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0ICAgICAgICB2YXIgaW5mbyA9IHtcblx0XHRcdFx0ICAgICAgICAgICAgZXZlbnRpZDogZXZlbnRpZCxcblx0XHRcdFx0ICAgICAgICAgICAgZWR0eXBlOiBcIjBcIixcblx0XHRcdFx0ICAgICAgICAgICAgcHJvamVjdGlkOiAnJyxcblx0XHRcdFx0ICAgICAgICAgICAgcmNsc2lkOiAnJyxcblx0XHRcdFx0ICAgICAgICAgICAgcm9iamlkOiAnJyxcblx0XHRcdFx0ICAgICAgICAgICAgdXNlcmxvZ2luOiAnJyxcblx0XHRcdFx0ICAgICAgICAgICAgY2xzaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCxcblx0XHRcdFx0ICAgICAgICAgICAgb2JqaWQ6IFwiXCIsXG5cdFx0XHRcdCAgICAgICAgICAgIGF0dHI6IHJlcSxcblx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdCAgICAgICAgdGhpcy5EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbyk7XG5cdFx0XHRcdCAgICB9XG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFx0XHR9LFxuXHRcdFx0aW5wdXRWYWxMaXN0SXNEZWwoaW5kZXgpe1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhpbmRleCk7XG4gICAgICAgICAgICAgICAgdGhpcy4kZGF0YS5pbnB1dFZhbExpc3Quc3BsaWNlKGluZGV4LCAxKTsgLy/liKDpmaR0YWJQYWdlanNvbueahOWGheWuuVxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyh0aGlzLiRkYXRhLmlucHV0VmFsTGlzdCk7XG5cdFx0XHR9LFxuXHRcdFx0YWRkcmVzc2NoYW5nZShlKSB7XG5cdFx0XHQgICAgLy8gY29uc29sZS5sb2coZS50YXJnZXQpO1xuXHRcdFx0ICAgIGNvbnNvbGUubG9nKGUuZGF0YS5qb2luKCc7JykpXG5cdFx0XHRcdHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5WYWx1ZT1lLmRhdGEuam9pbignOycpO1xuXHRcdFx0fSxcblx0XHRcdGNsYXNzQXR0cl9leHRCdXR0b24oaW5kZXgsaWluZGV4KXtcblx0XHRcdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHRcdFx0dmFyIGJlZm9yZV9jbGlja19idXR0b24gPSAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2luZGV4XS5BdHRyW2lpbmRleF0uYmVmb3JlX2NsaWNrX2J1dHRvbjtcblx0XHRcdFx0dmFyIGJ1dHRvbl9jYWxsYmFjayA9ICR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbaW5kZXhdLkF0dHJbaWluZGV4XS5idXR0b25fY2FsbGJhY2s7XG5cdFx0XHRcdGlmKCFiZWZvcmVfY2xpY2tfYnV0dG9uKXtcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCJiZWZvcmVfY2xpY2tfYnV0dG9uLWV2ZW50X2lk5Li656m677yBXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmKCFidXR0b25fY2FsbGJhY2spe1xuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcImJ1dHRvbl9jYWxsYmFjay1ldmVudF9pZOS4uuepuu+8gVwiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHR2YXIgZGF0YV9hdHRyID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2luZGV4XS5BdHRyW2lpbmRleF07XG5cdFx0XHRcdHRoaXMuRGF0YU9ialJ1bkN1c3RvbUV2ZW50X1JldHVybihiZWZvcmVfY2xpY2tfYnV0dG9uLCBkYXRhX2F0dHIsIGJ1dHRvbl9jYWxsYmFjaywgaW5kZXgsaWluZGV4KTtcblx0XHRcdH0sXG5cdFx0XHRzY2FuX2NsYXNzQXR0cl9leHRCdXR0b24oZSl7ICAvLy0tLS0tLS0tLeacquWujOaIkC0tLS0tLS0tLS0tXG5cdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cdFx0XHRcdHZhciBCZWZvcmVfU2VsZWN0X0V2ZW50ID0gJHRoaXMuJGRhdGEucGFyYW0uU2Nhbl9Db2RlLkJlZm9yZV9TZWxlY3RfRXZlbnQuSUQ7XG5cdFx0XHRcdHZhciBBZnRlcl9TZWxlY3RfRXZlbnQgPSAkdGhpcy4kZGF0YS5wYXJhbS5TY2FuX0NvZGUuQWZ0ZXJfU2VsZWN0X0V2ZW50LklEO1xuXHRcdFx0XHRpZighQmVmb3JlX1NlbGVjdF9FdmVudCl7XG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50Olwi6YCJ5oup5oyJ6ZKu5YmN5LqL5Lu25Li656m677yBXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmKCFBZnRlcl9TZWxlY3RfRXZlbnQpe1xuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcIuaWsOWinuaMiemSruWQjuS6i+S7tuS4uuepuu+8gVwiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyB2YXIgZGF0YV9hdHRyID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2luZGV4XS5BdHRyW2lpbmRleF07XG5cdFx0XHRcdHRoaXMuRGF0YU9ialJ1bkN1c3RvbUV2ZW50X1JldHVybihCZWZvcmVfU2VsZWN0X0V2ZW50LCAnJywgQWZ0ZXJfU2VsZWN0X0V2ZW50LCAnJywgJycpO1xuXHRcdFx0fSxcblx0XHRcdGNsYXNzQXR0cl9BZGRQZXIoaW5kZXgsaWluZGV4KXtcblx0XHRcdFx0dmFyIHBhcmFtPXtpbmRleDppbmRleCxpaW5kZXg6aWluZGV4fTtcblx0XHRcdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHRcdFx0dW5pLm5hdmlnYXRlVG8oe1xuXHRcdFx0XHRcdHVybDonLi4vc2VscHNuL2luZGV4P211bGl0PWZhbHNlJnBhcmFtPScrSlNPTi5zdHJpbmdpZnkocGFyYW0pLFxuXHRcdFx0XHRcdGV2ZW50czp7XG5cdFx0XHRcdFx0XHRBZGRQZXIoZGF0YSxwYXJhbSl7IFxuXHRcdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhwYXJhbSk7XG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGRhdGEpO1xuXHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W3BhcmFtLmluZGV4XS5BdHRyW3BhcmFtLmlpbmRleF0uVmFsdWU9ZGF0YVswXS5OYW1lO1xuXHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W3BhcmFtLmluZGV4XS5BdHRyW3BhcmFtLmlpbmRleF0uVmFsSUQ9ZGF0YVswXS5Mb2dpbisnOycrZGF0YVswXS5OYW1lO1xuXHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0dmFyIGV2ZW50aWQgPSAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W3BhcmFtLmluZGV4XS5BdHRyW3BhcmFtLmlpbmRleF0uYWN0aW9uO1xuXHRcdFx0XHRcdFx0XHRpZiAoZXZlbnRpZCkge1xuXHRcdFx0XHRcdFx0XHQgICAgZXZlbnRpZCA9IGV2ZW50aWQudHJpbSgpO1xuXHRcdFx0XHRcdFx0XHQgICAgaWYgKGV2ZW50aWQpIHtcblx0XHRcdFx0XHRcdFx0ICAgICAgICB2YXIgaW5mbyA9IHtcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgZXZlbnRpZDogZXZlbnRpZCxcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgZWR0eXBlOiBcIjRcIixcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgcHJvamVjdGlkOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICByY2xzaWQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIHJvYmppZDogXCJcIixcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgdXNlcmxvZ2luOiBkYXRhWzBdLkxvZ2luLFxuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICBjbHNpZDogJHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCxcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgb2JqaWQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIGF0dHI6IFtdLFxuXHRcdFx0XHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gdmFyIGRhdGFfYXR0ciA9ICR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbcGFyYW0uaW5kZXhdLkF0dHJbcGFyYW0uaWluZGV4XTtcblx0XHRcdFx0XHRcdFx0ICAgICAgICAkdGhpcy5EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbyk7XG5cdFx0XHRcdFx0XHRcdCAgICB9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSxcblx0XHRcdGNsYXNzQXR0cl9BZGRSZWYoZSl7XG5cdFx0XHRcdGNvbnNvbGUubG9nKGUudGFyZ2V0KTtcblx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50Olwi5q2k5Yqf6IO96L+Y5pyq5a6e546w77yBXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdC8vIHZhciB2YWx1ZT10aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uUmVsQ2xzW2UudGFyZ2V0LnZhbHVlXTtcblx0XHRcdFx0Ly8gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlPXZhbHVlO1xuXHRcdFx0fSxcblx0XHRcdGNsYXNzQXR0cl9BZGRQcmooaW5kZXgsaWluZGV4KXtcblx0XHRcdFx0dmFyIHBhcmFtPXtpbmRleDppbmRleCxpaW5kZXg6aWluZGV4fTtcblx0XHRcdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHRcdFx0dW5pLm5hdmlnYXRlVG8oe1xuXHRcdFx0XHRcdHVybDonLi4vc2VsUHJqL2luZGV4P3JlbGF0aW9uPS0xJnBhcmFtPScrSlNPTi5zdHJpbmdpZnkocGFyYW0pLFxuXHRcdFx0XHRcdGV2ZW50czp7XG5cdFx0XHRcdFx0XHRBZGRQZXIoZGF0YSxwYXJhbSl7IFxuXHRcdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhwYXJhbSk7XG5cdFx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGRhdGEpO1xuXHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W3BhcmFtLmluZGV4XS5BdHRyW3BhcmFtLmlpbmRleF0uVmFsdWU9ZGF0YVswXS5OYW1lO1xuXHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W3BhcmFtLmluZGV4XS5BdHRyW3BhcmFtLmlpbmRleF0uVmFsSUQ9ZGF0YVswXS5JRCsnOycrZGF0YVswXS5OYW1lO1xuXHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0dmFyIGV2ZW50aWQgPSAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W3BhcmFtLmluZGV4XS5BdHRyW3BhcmFtLmlpbmRleF0uYWN0aW9uO1xuXHRcdFx0XHRcdFx0XHRpZiAoZXZlbnRpZCkge1xuXHRcdFx0XHRcdFx0XHQgICAgZXZlbnRpZCA9IGV2ZW50aWQudHJpbSgpO1xuXHRcdFx0XHRcdFx0XHQgICAgaWYgKGV2ZW50aWQpIHtcblx0XHRcdFx0XHRcdFx0ICAgICAgICB2YXIgaW5mbyA9IHtcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgZXZlbnRpZDogZXZlbnRpZCxcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgZWR0eXBlOiBcIjJcIixcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgcHJvamVjdGlkOiBkYXRhWzBdLklELFxuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICByY2xzaWQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIHJvYmppZDogXCJcIixcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgdXNlcmxvZ2luOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICBjbHNpZDogJHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCxcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgb2JqaWQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIGF0dHI6IFtdLFxuXHRcdFx0XHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHQgICAgICAgIC8vIHZhciBkYXRhX2F0dHIgPSAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W3BhcmFtLmluZGV4XS5BdHRyW3BhcmFtLmlpbmRleF07XG5cdFx0XHRcdFx0XHRcdCAgICAgICAgJHRoaXMuRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8pO1xuXHRcdFx0XHRcdFx0XHQgICAgfVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0sXG5cdFx0XHRzYXZhKCl7XG5cdFx0XHRcdGlmICh0aGlzLiRkYXRhLnBhcmFtLkJlZm9yZV9PS19FdmVudCkgLy/liKTmlq3lip/og73ngrnlj4LmlbDmmK/lkKbmnInnoa7lrprliY3ohJrmnKxcblx0XHRcdFx0XHR0aGlzLnNjYW5fT0tEYXRhT2JqUnVuQ3VzdG9tRXZlbnQodGhpcy4kZGF0YS5wYXJhbS5CZWZvcmVfT0tfRXZlbnQuSUQpO1xuXHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0dGhpcy5zY2FuX09LRGF0YU9ialJ1bkN1c3RvbUV2ZW50KHRoaXMuJGRhdGEucGFyYW0uQWZ0ZXJfT0tfRXZlbnQuSUQpO1xuXHRcdFx0fSxcblx0XHRcdGFkZCgpe1xuXHRcdFx0XHR1bmkuc2hvd0xvYWRpbmcoe1xuXHRcdFx0XHRcdHRpdGxlOlwi5Yqg6L295LitLi4uXCJcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHZhciByZXE9W107XG5cdFx0XHRcdHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdDtcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdHZhciBhdHRyID0gYXR0cmxpc3RbaV0uQXR0cjtcblx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdHZhciBhciA9IGF0dHJbal07XG5cdFx0XHRcdFx0XHRpZihhci5WYWx1ZT09J+ivt+mAieaLqScgfHwgYXIuVmFsdWU9PSfigJTigJTor7fpgInmi6nigJTigJQnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0XHRcdGlmKGFyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpXG5cdFx0XHRcdFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdCAgICAgICAgaWYoYXIuVHlwZT09J+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZT09J+W8leeUqOmhueebricpXG5cdFx0XHRcdCAgICAgICAgXHRyZXEucHVzaCh7IG5hbWU6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWxJRCA/YXIuVmFsSUQgOicnIH0pO1xuXHRcdFx0XHQgICAgICAgIGVsc2UgaWYoYXIuVHlwZT09J+W4g+WwlOWAvCcpXG5cdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgbmFtZTogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlPycxJzonMCd9KTtcblx0XHRcdFx0ICAgICAgICBlbHNlIGlmKGFyLlR5cGU9PSflrZflhbgnIHx8IGFyLlR5cGU9PSflrZflhbgt5a2X56ym5LiyJyl7XG5cdFx0XHRcdFx0XHRcdGlmKGFyLnNlbGVjdD09dHJ1ZSl7IC8v5Yik5pat5LiL5ouJ5piv5ZCm5aSa6YCJXG5cdFx0XHRcdFx0XHRcdFx0dmFyIHZhbFN0ciA9XCJcIjtcblx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIHYgaW4gYXIuVmFsdWUpe1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYodmFsU3RyKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YWxTdHIrPVwiO1wiO1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFsU3RyKz1hci5WYWx1ZVt2XTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBuYW1lOiBhci5OYW1lLCB2YWx1ZTogdmFsU3RyfSk7XG5cdFx0XHRcdFx0XHRcdH1lbHNlXG5cdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBuYW1lOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWV9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBuYW1lOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWUgP2FyLlZhbHVlIDonJ30pO1xuXHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdGlmICgoYXIuTm90RW1wdHkgPT0gJzEnIHx8IGFyLm5vdGVtcHR5ID09IHRydWUpICYmICFhci5WYWx1ZSkge1xuXHRcdFx0XHRcdFx0Ly8gaWYoYXIubm90RW1wdHk9PScxJyl7XG5cdFx0XHRcdFx0XHRcdHVuaS5oaWRlTG9hZGluZygpO1xuXHRcdFx0XHRcdFx0XHQvLyB1bmkuc2hvd1RvYXN0KHt0aXRsZTphci5EaXNwTmFtZSsn5LiN6IO95Li656m677yBJyxpY29uOlwic3VjY2Vzc1wiLGR1cmF0aW9uOjMwMDB9KTtcblx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50OmFyLkRpc3BOYW1lKyfkuI3og73kuLrnqbrvvIEnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHZhciBlbnZpcm9tZW50ID0ge1xuXHRcdFx0XHQgICAgICdmdW5jdGlvbic6ICczMDAwJywgLy8g5Yqf6IO954K557yW5Y+3XG5cdFx0XHRcdCAgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsICAgICAvLyDlip/og73ngrnkuLvmlbDmja7nsbvmoIfor4Zcblx0XHRcdFx0ICAgICAnYnV0dG9uJzogJ3RvcCcsICAgLy8gdG9wL2JvdHRvbVxuXHRcdFx0XHQgICAgIGJ1dHRvbl9uYW1lOiAn5paw5aKeJyxcblx0XHRcdFx0ICAgICBtYXN0ZXI6IHtcblx0XHRcdFx0ICAgICAgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsIFxuXHRcdFx0XHQgICAgIH1cblx0XHRcdFx0fTtcblx0XHRcdFx0IFxuXHRcdFx0XHR2YXIgZGF0YUluZm89e1xuXHRcdFx0XHQgICAgY2xhc3NfaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCwgZGF0YV9vYmpfaWQ6ICcnLCBtYXN0ZXJjbHNpZDogJycsXG5cdFx0XHRcdCAgICByZXE6IEpTT04uc3RyaW5naWZ5KHJlcSksIHVwZmlsZTogSlNPTi5zdHJpbmdpZnkoW10pLCBwb3N0X2RhdGE6IEpTT04uc3RyaW5naWZ5KHt9KSxcblx0XHRcdFx0ICAgIGNvbXBvc2U6IEpTT04uc3RyaW5naWZ5KFtdKSwgcmVmZGF0YXN0b3JlOiBKU09OLnN0cmluZ2lmeShbXSksIGV4dGluZm86IEpTT04uc3RyaW5naWZ5KGVudmlyb21lbnQpLCBcblx0XHRcdFx0XHRub3RfdHJpZ2dlcl9zeXNfZXZlbnQ6ICcnXG5cdFx0XHRcdH07XG5cdFx0XHRcdFxuXHRcdFx0XHQvLyByZXR1cm5cblx0XHRcdFx0Y29uc29sZS5sb2coZGF0YUluZm8pO1xuXHRcdFx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnYWRkY2xhc3NhdHRyJyxkYXRhSW5mbykudGhlbihzdWNjZXNzPT57XG5cdFx0XHRcdFx0Y29uc29sZS5sb2coc3VjY2Vzcyk7XG5cdFx0XHRcdFx0dW5pLmhpZGVMb2FkaW5nKCk7XG5cdFx0XHRcdFx0aWYgKHN1Y2Nlc3MuY29kZT09JzAwMDAwJykge1xuXHRcdFx0XHRcdFx0dmFyIGFjdGlvbiA9IEpTT04ucGFyc2Uoc3VjY2Vzcy5kYXRhLkFjdGlvbik7XG5cdFx0XHRcdFx0XHRpZihhY3Rpb24ucmV0PT0nMCcpe1xuXHRcdFx0XHRcdFx0XHRpZihhY3Rpb24ucmVzdWx0X3R5cGU9PScwJyl7XG5cdFx0XHRcdFx0XHRcdFx0dW5pLnNob3dUb2FzdCh7dGl0bGU6YWN0aW9uLnJlc3VsdCxpY29uOlwic3VjY2Vzc1wiLGR1cmF0aW9uOjMwMDB9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHQvLyBcIntcInJldFwiOjAsIFwicmVzdWx0X3R5cGVcIjowLCBcInJlc3VsdFwiOlwi5Yib5bu65oiQ5YqfMTIzMTIzMTIzXCIsXCJpbmZvXCI6XCJcIn1cIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Ly/liLfmlrBcblx0XHRcdFx0XHRcdHVuaS5yZWRpcmVjdFRvKHtcblx0XHRcdFx0XHRcdFx0dXJsOicuLi9tb2RhbC9tc19jbGFzc0F0dHI/cGFyYW09JytKU09OLnN0cmluZ2lmeSh0aGlzLiRkYXRhLnBhcmFtKStcIiZ0aXRsZW5hbWU9XCIrdGhpcy4kZGF0YS50aXRsZVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHQvLyB0aGlzLmNsYXNzX2F0dHJfaW5pdCgpO1xuXHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor69cIixjb250ZW50OnN1Y2Nlc3MubXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSkuY2F0Y2goZXg9Pntcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhleCk7XG5cdFx0XHRcdFx0dW5pLmhpZGVMb2FkaW5nKCk7XG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9LFxuXHRcdFx0Y2xhc3NfYXR0cl9pbml0KCl7XG5cdFx0XHRcdHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuc2hvd19zdHlsZVxuXHRcdFx0XHR2YXIgbmV3YXR0cmxpc3QgPSBbXTtcblx0XHRcdFx0aWYgKHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdCAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdCAgICAgICAgdmFyIG9wZW4gPSBhdHRybGlzdFtpXS5vcGVuO1xuXHRcdFx0XHQgICAgICAgIHZhciBuYW1lID0gYXR0cmxpc3RbaV0uYXR0cmdyb3VwX25hbWU7XG5cdFx0XHRcdCAgICAgICAgdmFyIGF0dHJzID0gYXR0cmxpc3RbaV0uYXR0cnM7XG5cdFx0XHRcdCAgICAgICAgZm9yICh2YXIgcyA9IDA7IHMgPCB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3QubGVuZ3RoOyBzKyspIHtcblx0XHRcdFx0ICAgICAgICAgICAgdmFyIGNsc2F0dHIgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Rbc107XG5cdFx0XHRcdCAgICAgICAgICAgIGlmIChuYW1lID09IGNsc2F0dHIuTmFtZSkge1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgdmFyIGF0dHIgPSBbXTtcblx0XHRcdFx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYXR0cnMubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBsID0gMDsgbCA8IGNsc2F0dHIuQXR0ci5sZW5ndGg7IGwrKykge1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2EgPSBjbHNhdHRyLkF0dHJbbF07XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdHRyc1tqXS5hdHRyID09IGNhLk5hbWUpIHtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmFjdGlvbiA9IGF0dHJzW2pdLmFjdGlvbjtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmVkaXQgPSBhdHRyc1tqXS5lZGl0O1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Eubm90ZW1wdHkgPSBhdHRyc1tqXS5ub3RlbXB0eTtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmV4dF9idXR0b24gPSBhdHRyc1tqXS5leHRfYnV0dG9uO1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuYnV0dG9uX2ltZyA9IGF0dHJzW2pdLmJ1dHRvbl9pbWc7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5idXR0b25fdG9vbHRpcCA9IGF0dHJzW2pdLmJ1dHRvbl90b29sdGlwO1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuYmVmb3JlX2NsaWNrX2J1dHRvbiA9IGF0dHJzW2pdLmJlZm9yZV9jbGlja19idXR0b247XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5idXR0b25fY2FsbGJhY2sgPSBhdHRyc1tqXS5idXR0b25fY2FsbGJhY2s7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5oaWRkZW4gPSBhdHRyc1tqXS5oaWRkZW47XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5zZWxlY3QgPSBhdHRyc1tqXS5zZWxlY3Q9PXVuZGVmaW5lZD9mYWxzZTphdHRyc1tqXS5zZWxlY3Q7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPVwiXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY2EuZGljdGl0ZW0pe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY2Euc2VsZWN0ID09IHRydWUpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlZhbHVlID0gW107Ly9jYS5kaWN0aXRlbVswXS5DTl9TX05BTUU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbHNlIFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9ICfor7fpgInmi6knOy8vY2EuZGljdGl0ZW1bMF0uQ05fU19OQU1FO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGRpY3RpdGVtbGlzdD1bXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGQgPSAwOyBkIDwgY2EuZGljdGl0ZW0ubGVuZ3RoOyBkKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuZGljdGl0ZW1bZF0ubGFiZWw9Y2EuZGljdGl0ZW1bZF0uQ05fU19OQU1FO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5kaWN0aXRlbVtkXS52YWx1ZT1jYS5kaWN0aXRlbVtkXS5DTl9TX05BTUU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGNhLmRpY3RpdGVtW2RdLkNOX0NfSVNfREVGQVVMVD09JzEnKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlZhbHVlPWNhLmRpY3RpdGVtW2RdLkNOX1NfTkFNRTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY2EuVHlwZT09J+aXpeacnycgfHwgY2EuVHlwZT09J+aXtumXtCcpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIG5vd0RhdGUgPSBuZXcgRGF0ZSgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGRhdGUgPSB7eWVhcjogbm93RGF0ZS5nZXRGdWxsWWVhcigpLG1vbnRoOiBub3dEYXRlLmdldE1vbnRoKCkgKyAxLGRheTogbm93RGF0ZS5nZXREYXRlKCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9IGRhdGUueWVhciArICctJyArIChkYXRlLm1vbnRoID49IDEwID8gZGF0ZS5tb250aCA6ICcwJyArIGRhdGUubW9udGgpICsgJy0nICsgKGRhdGUuZGF5ID49IDEwID8gZGF0ZS5kYXkgOiAnMCcgKyBkYXRlLmRheSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGNhLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHJlbENsc0xpc3Q9W107XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgYXR0cl9yZXNjbHMgPSBjYS5SZWxDbHMuc3BsaXQoJywnKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgaWkgaW4gYXR0cl9yZXNjbHMpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgcmVzY2xzID0gYXR0cl9yZXNjbHNbaWldLnNwbGl0KCd8Jyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlbENsc0xpc3QucHVzaCh7aWQ6cmVzY2xzWzBdLG5hbWU6cmVzY2xzWzFdfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5SZWxDbHNMaXN0ID0gcmVsQ2xzTGlzdDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlZhbHVlID0gJ+ivtyc7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGNhLlR5cGU9PSfnnIHluILljLonKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPSAn6K+36YCJ5oupJztcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5UeXBlPT0n5biD5bCU5YC8Jylcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlZhbHVlID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIucHVzaChjYSk7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgIH1cblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICB9XG5cdFx0XHRcdCAgICAgICAgICAgICAgICB9XG5cdFx0XHRcdCAgICAgICAgICAgICAgICBuZXdhdHRybGlzdC5wdXNoKHtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICBCa0NvbG9yOiBjbHNhdHRyLkJrQ29sb3IsXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgSGFzQWNlOiBjbHNhdHRyLkhhc0FjZSxcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICBJbWdGb250U3R5bGU6IGNsc2F0dHIuSW1nRm9udFN0eWxlLFxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIE5hbWU6IGNsc2F0dHIuTmFtZSxcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICBPcmRlcjogY2xzYXR0ci5PcmRlcixcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICBPcGVuOiBvcGVuLFxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIEF0dHI6IGF0dHIsXG5cdFx0XHRcdFx0XHRcdFx0XHRjb250cm9sX3N0eWxlOnRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuY29udHJvbF9zdHlsZSxcblx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlX3Bfd2RpdGg6dGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZS5TdHlsZURlZi50aXRsZV9wX3dkaXRoLFxuXHRcdFx0XHRcdFx0XHRcdFx0Rm9udDp0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLkZvbnQ/dGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5Gb250Ont9LFxuXHRcdFx0XHRcdFx0XHRcdFx0QmtfQ29sb3I6dGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5Ca19Db2xvcj90aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLkJrX0NvbG9yOicjRkZGRkZGJyxcblx0XHRcdFx0XHRcdFx0XHRcdFRleHRfQ29sb3I6dGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5UZXh0X0NvbG9yP3RoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuVGV4dF9Db2xvcjonIzAwMDAwMCdcblx0XHRcdFx0ICAgICAgICAgICAgICAgIH0pXG5cdFx0XHRcdCAgICAgICAgICAgIH1cblx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdCAgICB9XG5cdFx0XHRcdCAgICBpZiAobmV3YXR0cmxpc3QubGVuZ3RoID4gMCkge1xuXHRcdFx0XHQgICAgICAgIHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdCA9IG5ld2F0dHJsaXN0O1xuXHRcdFx0XHQgICAgfVxuXHRcdFx0XHRcdHZhciByZXE9W107XG5cdFx0XHRcdCAgICBpZiAodGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZS5TdHlsZURlZikge1xuXHRcdFx0XHQgICAgICAgICBpZiAodGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5zaG93X3N0eWxlLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0ICAgICAgICAgICAgdmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5zaG93X3N0eWxlXG5cdFx0XHRcdCAgICAgICAgICAgIC8vICRlbC5maW5kKCcuYXR0cl9maWVsZCcpLnByb3AoJ3JlYWRvbmx5JywgdHJ1ZSk7XG5cdFx0XHRcdCAgICAgICAgICAgIC8vICRlbC5maW5kKCcuYXR0cl9maWVsZCcpLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7XG5cdFx0XHRcdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0ICAgICAgICAgICAgICAgIHZhciBhdHRyID0gYXR0cmxpc3RbaV0uYXR0cnNcblx0XHRcdFx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIHZhciBhciA9IGF0dHJbal07XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLmF0dHIsIHZhbHVlOiBhci52YWx1ZT9hci52YWx1ZTonJyB9KTtcblx0XHRcdFx0ICAgICAgICAgICAgICAgIH1cblx0XHRcdFx0ICAgICAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHR9XHRcblx0XHRcdFx0XHRcblx0XHRcdFx0XHR2YXIgZXZlbnRsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5ldmVudDtcblx0XHRcdFx0XHRpZiAoZXZlbnRsaXN0KSB7XG5cdFx0XHRcdFx0ICAgIGlmIChldmVudGxpc3QubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBldmVudGxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHQgICAgICAgICAgICBpZiAoZXZlbnRsaXN0W2ldLmV2ZW50X2lkID09ICdiZWZvcmVfb2snKSB7XG5cdFx0XHRcdFx0ICAgICAgICAgICAgICAgIHRoaXMuJGRhdGEuZWRpdF9va19ldmVudCA9IGV2ZW50bGlzdFtpXTtcblx0XHRcdFx0XHQgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50bGlzdFtpXS5ldmVudF9pZCA9PSAnaW5pdGlhbCcpIHtcblx0XHRcdFx0XHQgICAgICAgICAgICAgICAgdGhpcy4kZGF0YS5lZGl0X2luaXRhbF9ldmVudCA9IGV2ZW50bGlzdFtpXTtcblx0XHRcdFx0XHQgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50bGlzdFtpXS5ldmVudF9pZCA9PSAnYmVmb3JlX3NlbGVjdF9jb21wb3NlJykge1xuXHRcdFx0XHRcdCAgICAgICAgICAgICAgICB0aGlzLiRkYXRhLmVkaXRfc2VsZWN0X2NvbXBvc2VfZXZlbnQgPSBldmVudGxpc3RbaV0uc2NyaXBfaWQ7XG5cdFx0XHRcdFx0ICAgICAgICAgICAgICAgIHRoaXMuJGRhdGEuZWRpdF9jb21wb3NlX2Nsc19pZCA9IGV2ZW50bGlzdFtpXS5jb21wb3NlX2Nsc19pZDtcblx0XHRcdFx0XHQgICAgICAgICAgICB9XG5cdFx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHJlcSk7XG5cdFx0XHRcdFx0aWYgKHRoaXMuJGRhdGEuZWRpdF9pbml0YWxfZXZlbnQpIHtcblx0XHRcdFx0XHQgICAgdmFyIGV2ZW50aWQgPSB0aGlzLiRkYXRhLmVkaXRfaW5pdGFsX2V2ZW50LnNjcmlwX2lkO1xuXHRcdFx0XHRcdCAgICB2YXIgaW5mbyA9IHtcblx0XHRcdFx0XHQgICAgICAgIGV2ZW50aWQ6IGV2ZW50aWQsXG5cdFx0XHRcdFx0ICAgICAgICBlZHR5cGU6IFwiMFwiLFxuXHRcdFx0XHRcdCAgICAgICAgcHJvamVjdGlkOiAnJyxcblx0XHRcdFx0XHQgICAgICAgIHJjbHNpZDogJycsXG5cdFx0XHRcdFx0ICAgICAgICByb2JqaWQ6ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgdXNlcmxvZ2luOiAnJyxcblx0XHRcdFx0XHQgICAgICAgIGNsc2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsXG5cdFx0XHRcdFx0ICAgICAgICBvYmppZDogXCJcIixcblx0XHRcdFx0XHQgICAgICAgIGF0dHI6IHJlcSxcblx0XHRcdFx0XHQgICAgfVxuXHRcdFx0XHRcdCAgICB0aGlzLmluaV9EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKHRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUpO1xuXHRcdFx0XHRcdGNvbnNvbGUubG9nKHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdCk7XG5cdFx0XHRcdFx0XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50Olwi5pyq5om+5Yiw5Y+v5pi+56S655qE55qE5bGe5oCnXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRzdWJDbGFzc19hdHRyX2luaXQoKXtcblx0XHRcdFx0dmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5zdWJDbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5zaG93X3N0eWxlXG5cdFx0XHRcdHZhciBuZXdhdHRybGlzdCA9IFtdO1xuXHRcdFx0XHRpZiAodGhpcy4kZGF0YS5zdWJDbGFzc0F0dHJMaXN0Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0ICAgICAgICB2YXIgb3BlbiA9IGF0dHJsaXN0W2ldLm9wZW47XG5cdFx0XHRcdCAgICAgICAgdmFyIG5hbWUgPSBhdHRybGlzdFtpXS5hdHRyZ3JvdXBfbmFtZTtcblx0XHRcdFx0ICAgICAgICB2YXIgYXR0cnMgPSBhdHRybGlzdFtpXS5hdHRycztcblx0XHRcdFx0ICAgICAgICBmb3IgKHZhciBzID0gMDsgcyA8IHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdC5sZW5ndGg7IHMrKykge1xuXHRcdFx0XHQgICAgICAgICAgICB2YXIgY2xzYXR0ciA9IHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdFtzXTtcblx0XHRcdFx0ICAgICAgICAgICAgaWYgKG5hbWUgPT0gY2xzYXR0ci5OYW1lKSB7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICB2YXIgYXR0ciA9IFtdO1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhdHRycy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGwgPSAwOyBsIDwgY2xzYXR0ci5BdHRyLmxlbmd0aDsgbCsrKSB7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYSA9IGNsc2F0dHIuQXR0cltsXTtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF0dHJzW2pdLmF0dHIgPT0gY2EuTmFtZSkge1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuYWN0aW9uID0gYXR0cnNbal0uYWN0aW9uO1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuZWRpdCA9IGF0dHJzW2pdLmVkaXQ7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5ub3RlbXB0eSA9IGF0dHJzW2pdLm5vdGVtcHR5O1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuZXh0X2J1dHRvbiA9IGF0dHJzW2pdLmV4dF9idXR0b247XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5idXR0b25faW1nID0gYXR0cnNbal0uYnV0dG9uX2ltZztcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmJ1dHRvbl90b29sdGlwID0gYXR0cnNbal0uYnV0dG9uX3Rvb2x0aXA7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5iZWZvcmVfY2xpY2tfYnV0dG9uID0gYXR0cnNbal0uYmVmb3JlX2NsaWNrX2J1dHRvbjtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmJ1dHRvbl9jYWxsYmFjayA9IGF0dHJzW2pdLmJ1dHRvbl9jYWxsYmFjaztcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmhpZGRlbiA9IGF0dHJzW2pdLmhpZGRlbjtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLnNlbGVjdCA9IGF0dHJzW2pdLnNlbGVjdD09dW5kZWZpbmVkP2ZhbHNlOmF0dHJzW2pdLnNlbGVjdDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9XCJcIjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5kaWN0aXRlbSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5zZWxlY3QgPT0gdHJ1ZSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPSBbXTsvL2NhLmRpY3RpdGVtWzBdLkNOX1NfTkFNRTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVsc2UgXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlZhbHVlID0gJ+ivt+mAieaLqSc7Ly9jYS5kaWN0aXRlbVswXS5DTl9TX05BTUU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZGljdGl0ZW1saXN0PVtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgZCA9IDA7IGQgPCBjYS5kaWN0aXRlbS5sZW5ndGg7IGQrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5kaWN0aXRlbVtkXS5sYWJlbD1jYS5kaWN0aXRlbVtkXS5DTl9TX05BTUU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLmRpY3RpdGVtW2RdLnZhbHVlPWNhLmRpY3RpdGVtW2RdLkNOX1NfTkFNRTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY2EuZGljdGl0ZW1bZF0uQ05fQ19JU19ERUZBVUxUPT0nMScpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWU9Y2EuZGljdGl0ZW1bZF0uQ05fU19OQU1FO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5UeXBlPT0n5pel5pyfJyB8fCBjYS5UeXBlPT0n5pe26Ze0Jyl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgbm93RGF0ZSA9IG5ldyBEYXRlKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZGF0ZSA9IHt5ZWFyOiBub3dEYXRlLmdldEZ1bGxZZWFyKCksbW9udGg6IG5vd0RhdGUuZ2V0TW9udGgoKSArIDEsZGF5OiBub3dEYXRlLmdldERhdGUoKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlZhbHVlID0gZGF0ZS55ZWFyICsgJy0nICsgKGRhdGUubW9udGggPj0gMTAgPyBkYXRlLm1vbnRoIDogJzAnICsgZGF0ZS5tb250aCkgKyAnLScgKyAoZGF0ZS5kYXkgPj0gMTAgPyBkYXRlLmRheSA6ICcwJyArIGRhdGUuZGF5KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY2EuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJyl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgcmVsQ2xzTGlzdD1bXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBhdHRyX3Jlc2NscyA9IGNhLlJlbENscy5zcGxpdCgnLCcpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBpaSBpbiBhdHRyX3Jlc2Nscyl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciByZXNjbHMgPSBhdHRyX3Jlc2Nsc1tpaV0uc3BsaXQoJ3wnKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVsQ2xzTGlzdC5wdXNoKHtpZDpyZXNjbHNbMF0sbmFtZTpyZXNjbHNbMV19KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlJlbENsc0xpc3QgPSByZWxDbHNMaXN0O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPSAn6K+3Jztcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY2EuVHlwZT09J+ecgeW4guWMuicpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9ICfor7fpgInmi6knO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGNhLlR5cGU9PSfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ci5wdXNoKGNhKTtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIH1cblx0XHRcdFx0ICAgICAgICAgICAgICAgIH1cblx0XHRcdFx0ICAgICAgICAgICAgICAgIG5ld2F0dHJsaXN0LnB1c2goe1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIEJrQ29sb3I6IGNsc2F0dHIuQmtDb2xvcixcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICBIYXNBY2U6IGNsc2F0dHIuSGFzQWNlLFxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIEltZ0ZvbnRTdHlsZTogY2xzYXR0ci5JbWdGb250U3R5bGUsXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgTmFtZTogY2xzYXR0ci5OYW1lLFxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIE9yZGVyOiBjbHNhdHRyLk9yZGVyLFxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIE9wZW46IG9wZW4sXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgQXR0cjogYXR0cixcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnRyb2xfc3R5bGU6dGhpcy4kZGF0YS5zdWJDbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5jb250cm9sX3N0eWxlLFxuXHRcdFx0XHRcdFx0XHRcdFx0dGl0bGVfcF93ZGl0aDp0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLnRpdGxlX3Bfd2RpdGgsXG5cdFx0XHRcdFx0XHRcdFx0XHRGb250OnRoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuRm9udD90aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLkZvbnQ6e30sXG5cdFx0XHRcdFx0XHRcdFx0XHRCa19Db2xvcjp0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLkJrX0NvbG9yP3RoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuQmtfQ29sb3I6JyNGRkZGRkYnLFxuXHRcdFx0XHRcdFx0XHRcdFx0VGV4dF9Db2xvcjp0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLlRleHRfQ29sb3I/dGhpcy4kZGF0YS5zdWJDbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5UZXh0X0NvbG9yOicjMDAwMDAwJ1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgfSlcblx0XHRcdFx0ICAgICAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0ICAgIH1cblx0XHRcdFx0ICAgIGlmIChuZXdhdHRybGlzdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdCAgICAgICAgdGhpcy4kZGF0YS5zdWJDbGFzc0F0dHJMaXN0ID0gbmV3YXR0cmxpc3Q7XG5cdFx0XHRcdCAgICB9XG5cdFx0XHRcdFx0dmFyIHJlcT1bXTtcblx0XHRcdFx0ICAgIGlmICh0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmKSB7XG5cdFx0XHRcdCAgICAgICAgIGlmICh0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLnNob3dfc3R5bGUubGVuZ3RoID4gMCkge1xuXHRcdFx0XHQgICAgICAgICAgICB2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLnNob3dfc3R5bGVcblx0XHRcdFx0ICAgICAgICAgICAgLy8gJGVsLmZpbmQoJy5hdHRyX2ZpZWxkJykucHJvcCgncmVhZG9ubHknLCB0cnVlKTtcblx0XHRcdFx0ICAgICAgICAgICAgLy8gJGVsLmZpbmQoJy5hdHRyX2ZpZWxkJykucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTtcblx0XHRcdFx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgdmFyIGF0dHIgPSBhdHRybGlzdFtpXS5hdHRyc1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgdmFyIGFyID0gYXR0cltqXTtcblx0XHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuYXR0ciwgdmFsdWU6IGFyLnZhbHVlP2FyLnZhbHVlOicnIH0pO1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgICAgICB9XG5cdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHRcdH1cdFxuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdHZhciBldmVudGxpc3QgPSB0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLmV2ZW50O1xuXHRcdFx0XHRcdGlmIChldmVudGxpc3QpIHtcblx0XHRcdFx0XHQgICAgaWYgKGV2ZW50bGlzdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50bGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdCAgICAgICAgICAgIGlmIChldmVudGxpc3RbaV0uZXZlbnRfaWQgPT0gJ2JlZm9yZV9vaycpIHtcblx0XHRcdFx0XHQgICAgICAgICAgICAgICAgdGhpcy4kZGF0YS5lZGl0X29rX2V2ZW50ID0gZXZlbnRsaXN0W2ldO1xuXHRcdFx0XHRcdCAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnRsaXN0W2ldLmV2ZW50X2lkID09ICdpbml0aWFsJykge1xuXHRcdFx0XHRcdCAgICAgICAgICAgICAgICB0aGlzLiRkYXRhLmVkaXRfaW5pdGFsX2V2ZW50ID0gZXZlbnRsaXN0W2ldO1xuXHRcdFx0XHRcdCAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnRsaXN0W2ldLmV2ZW50X2lkID09ICdiZWZvcmVfc2VsZWN0X2NvbXBvc2UnKSB7XG5cdFx0XHRcdFx0ICAgICAgICAgICAgICAgIHRoaXMuJGRhdGEuZWRpdF9zZWxlY3RfY29tcG9zZV9ldmVudCA9IGV2ZW50bGlzdFtpXS5zY3JpcF9pZDtcblx0XHRcdFx0XHQgICAgICAgICAgICAgICAgdGhpcy4kZGF0YS5lZGl0X2NvbXBvc2VfY2xzX2lkID0gZXZlbnRsaXN0W2ldLmNvbXBvc2VfY2xzX2lkO1xuXHRcdFx0XHRcdCAgICAgICAgICAgIH1cblx0XHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2cocmVxKTtcblx0XHRcdFx0XHRpZiAodGhpcy4kZGF0YS5lZGl0X2luaXRhbF9ldmVudCkge1xuXHRcdFx0XHRcdCAgICB2YXIgZXZlbnRpZCA9IHRoaXMuJGRhdGEuZWRpdF9pbml0YWxfZXZlbnQuc2NyaXBfaWQ7XG5cdFx0XHRcdFx0ICAgIHZhciBpbmZvID0ge1xuXHRcdFx0XHRcdCAgICAgICAgZXZlbnRpZDogZXZlbnRpZCxcblx0XHRcdFx0XHQgICAgICAgIGVkdHlwZTogXCIwXCIsXG5cdFx0XHRcdFx0ICAgICAgICBwcm9qZWN0aWQ6ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgcmNsc2lkOiAnJyxcblx0XHRcdFx0XHQgICAgICAgIHJvYmppZDogJycsXG5cdFx0XHRcdFx0ICAgICAgICB1c2VybG9naW46ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgY2xzaWQ6IHRoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5JRCxcblx0XHRcdFx0XHQgICAgICAgIG9iamlkOiBcIlwiLFxuXHRcdFx0XHRcdCAgICAgICAgYXR0cjogcmVxLFxuXHRcdFx0XHRcdCAgICB9XG5cdFx0XHRcdFx0ICAgIHRoaXMuc2Nhbl9pbmlfRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zb2xlLmxvZyh0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlKTtcblx0XHRcdFx0XHRjb25zb2xlLmxvZyh0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3QpO1xuXHRcdFx0XHRcdFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcIuacquaJvuWIsOWPr+aYvuekuueahOeahOWxnuaAp1wiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0aW5pX0RhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvKXtcblx0XHRcdFx0dmFyIHBhcmFtID0ge1xuXHRcdFx0XHQgICAgRWRpdFN0eWxlOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuVmlld19TdHlsZS5OYW1lLFxuXHRcdFx0XHQgICAgVmlld1N0eWxlOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuVmlld19TdHlsZS5OYW1lLFxuXHRcdFx0XHQgICAgTm90VHJpZ2dlclN5c0V2ZW50OiAwLFxuXHRcdFx0XHQgICAgZW52aXJvbWVudDoge1xuXHRcdFx0XHQgICAgICAgICdmdW5jdGlvbic6ICczMDAwJywgLy8g5Yqf6IO954K557yW5Y+3XG5cdFx0XHRcdCAgICAgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsICAgICAvLyDlip/og73ngrnkuLvmlbDmja7nsbvmoIfor4Zcblx0XHRcdFx0ICAgICAgICAnYnV0dG9uJzogJ3RvcCcsICAgLy8gdG9wL2JvdHRvbVxuXHRcdFx0XHQgICAgICAgIGJ1dHRvbl9uYW1lOiAn5paw5aKeJyxcblx0XHRcdFx0ICAgICAgICBtYXN0ZXI6IHtcblx0XHRcdFx0ICAgICAgICAgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsIC8vIGJ1dHRvbj1ib3R0b23ml7YgbWFzdGVy55qEY2xzX2lkXG5cdFx0XHRcdCAgICAgICAgICAgIC8vb2JqX2lkOiAnJyAgLy8gYnV0dG9uPWJvdHRvbeaXtiBtYXN0ZXLnmoRvYmpfaWRcblx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdCAgICB9XG5cdFx0XHRcdH1cblx0XHRcdFx0dmFyIGlucHV0cGFyYW1ldGVyID0gJyc7XG5cdFx0XHRcdHZhciBnbG9iYWxfYXR0ciA9ICcnO1xuXHRcdFx0XHRcblx0XHRcdFx0dmFyIGRhdGFJbmZvID0ge1xuICAgICAgICAgICAgICAgICAgICBlZHR5cGU6IGluZm8uZWR0eXBlLCBldmVudGlkOiBpbmZvLmV2ZW50aWQsIHByb2plY3RpZDogaW5mby5wcm9qZWN0aWQsXG4gICAgICAgICAgICAgICAgICAgIHJjbHNpZDogaW5mby5yY2xzaWQsIHJvYmppZDogaW5mby5yb2JqaWQsIHVzZXJsb2dpbjogaW5mby51c2VybG9naW4sIGNsc2lkOiBpbmZvLmNsc2lkLCBvYmppZDogaW5mby5vYmppZCxcbiAgICAgICAgICAgICAgICAgICAgYXR0cjogSlNPTi5zdHJpbmdpZnkoaW5mby5hdHRyKSwgZXh0aW5mbzogSlNPTi5zdHJpbmdpZnkocGFyYW0pLCBpbnB1dHBhcmFtZXRlcjogaW5wdXRwYXJhbWV0ZXIsIGdsb2JhbF9hdHRyOiBnbG9iYWxfYXR0clxuICAgICAgICAgICAgICAgIH1cblx0XHRcdFx0Y29uc29sZS5sb2coZGF0YUluZm8pO1xuXHRcdFx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnRGF0YU9ialJ1bkN1c3RvbUV2ZW50SW5mbycsZGF0YUluZm8pLnRoZW4oc3VjY2Vzcz0+e1xuXHRcdFx0XHRcdGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xuXHRcdFx0XHRcdGlmIChzdWNjZXNzLmNvZGU9PScwMDAwMCcpIHtcblx0XHRcdFx0XHRcdHZhciBkYXRhID0gSlNPTi5wYXJzZShzdWNjZXNzLmRhdGEpO1xuXHRcdFx0XHRcdFx0dmFyIGFjdGlvbmxpc3QgPSBkYXRhLmFjdGlvbjtcblx0XHRcdFx0XHRcdGlmIChhY3Rpb25saXN0KSB7XG5cdFx0XHRcdFx0XHQgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhY3Rpb25saXN0Lmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHQgICAgICAgIHZhciBhY3Rpb24gPSBhY3Rpb25saXN0W2pdXG5cdFx0XHRcdFx0XHQgICAgICAgIHZhciBhY3Rpb25fdHlwZSA9IGFjdGlvbi5hY3Rpb25fdHlwZTtcblx0XHRcdFx0XHRcdCAgICAgICAgdmFyIHZhbHVlID0gYWN0aW9uLnZhbHVlO1xuXHRcdFx0XHRcdFx0ICAgICAgICBpZiAoYWN0aW9uX3R5cGUgPT0gJ3NldF9kbGdfYXR0cicpIHtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgIHZhciB2YWwgPSB2YWx1ZTtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIHZhbCA9IEpTT04ucGFyc2UodmFsdWUpO1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgIH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2codmFsKTtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGEgPSAwOyBhIDwgdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0Lmxlbmd0aDsgYSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBsID0gMDsgbCA8IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFthXS5BdHRyLmxlbmd0aDsgbCsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBjYSA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFthXS5BdHRyW2xdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAodmFsW2ldLmF0dHIgID09IGNhLk5hbWUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5UeXBlPT0n5a2X5YW4JyB8fCBjYS5UeXBlPT0n5a2X5YW4LeWtl+espuS4sicpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGRpY3RJdGVtTGlzdD1bXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgZCBpbiB2YWxbaV0uY2hvaWNlX2xpc3Qpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgdmFsID12YWxbaV0uY2hvaWNlX2xpc3RbZF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRpY3RJdGVtTGlzdC5wdXNoKHtcIkNOX1NfTkFNRVwiOnZhbCxcIk5hbWVcIjp2YWwsXCJsYWJlbFwiOnZhbCxcInZhbHVlXCI6dmFsfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuZGljdGl0ZW0gPSBkaWN0SXRlbUxpc3Q7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBhdHRyW2pdLmRpY3RpdGVtID0gdmFsW2ldLmNob2ljZV9saXN0O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gY2EudmFsdWUgPSB2YWxbaV0udmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0gMDtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5maWx0ZXIoZnVuY3Rpb24gKHMpIHtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWxbaV0uYXR0ciA9PSBzLmF0dHJcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgfSkubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSAxO1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUucHVzaCh2YWxbaV0pO1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICB9XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIGlmIChsZW5ndGggPT0gMCkge1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS5hdHRyID09IHZhbFtpXS5hdHRyKSB7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLnZhbHVlID0gdmFsW2ldLnZhbHVlO1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgIH1cblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgfVxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgIH1cblx0XHRcdFx0XHRcdCAgICAgICAgICAgIH1cblx0XHRcdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHRcdFx0ICAgICAgICBpZiAoYWN0aW9uX3R5cGUgPT0gJ29wZW5fc2VsZWN0X3VzZXJkbGcnKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzIuMlwiLGNvbnRlbnQ6XCJvcGVuX3NlbGVjdF91c2VyZGxn6L+Z5LiqYWN0aW9uX3R5cGXov5jmnKrlpITnkIbvvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHRcdFx0ICAgIH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68yXCIsY29udGVudDpzdWNjZXNzLm1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLmNhdGNoKGV4PT57XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMi4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSxcblx0XHQgICAgRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8sZGF0YV9hdHRyKXtcblx0XHRcdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHQgICAgXHR2YXIgZW52aXJvbWVudCA9IHtcblx0XHQgICAgXHQgICAgJ2Z1bmN0aW9uJzogJzMwMDAnLCAvLyDlip/og73ngrnnvJblj7dcblx0XHQgICAgXHQgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsICAgICAvLyDlip/og73ngrnkuLvmlbDmja7nsbvmoIfor4Zcblx0XHQgICAgXHQgICAgJ2J1dHRvbic6ICd0b3AnLCAgIC8vIHRvcC9ib3R0b21cblx0XHQgICAgXHQgICAgYnV0dG9uX25hbWU6ICfmlrDlop4nLFxuXHRcdCAgICBcdCAgICBtYXN0ZXI6IHtcblx0XHQgICAgXHQgICAgICAgIGNsc19pZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELCAvLyBidXR0b249Ym90dG9t5pe2IG1hc3RlcueahGNsc19pZFxuXHRcdCAgICBcdCAgICAgICAgLy9vYmpfaWQ6ICcnICAvLyBidXR0b249Ym90dG9t5pe2IG1hc3RlcueahG9ial9pZFxuXHRcdCAgICBcdCAgICB9XG5cdFx0ICAgIFx0fTtcblx0XHRcdFx0ZW52aXJvbWVudC5lZGl0X2RsZyA9IHtcblx0XHRcdFx0ICAgIHR5cGU6ICdzbWFsbCcsLy/lsI/nqpflj6Ncblx0XHRcdFx0ICAgIGNsYXNzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsLy/lvZPliY3mlbDmja7nsbtpZFxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChkYXRhX2F0dHIpIHtcblx0XHRcdFx0ICAgIGVudmlyb21lbnQuZWRpdF9kbGcuZm9ybV9jb250cm9sID0gey8v5omA5bGe55qE6KGo5Y2V5o6n5Lu2XG5cdFx0XHRcdCAgICAgICAgbmFtZTogZGF0YV9hdHRyLk5hbWUsLy/lrZfmrrXlsZ7mgKdcblx0XHRcdFx0ICAgICAgICB0ZXh0OiBkYXRhX2F0dHIuRGlzcE5hbWUsLy/mmL7npLrmlofmnKxcblx0XHRcdFx0ICAgICAgICBncm91cF9uYW1lOiBkYXRhX2F0dHIuR3JvdXBOYW1lLC8v5bGe5oCn57uEXG5cdFx0XHRcdCAgICAgICAgdHlwZTogZGF0YV9hdHRyLlR5cGUsLy/lrZfmrrXnsbvlnotcblx0XHRcdFx0ICAgICAgICByZWFkb25seTogZGF0YV9hdHRyLlJlYWRPbmx5LC8v5piv5ZCm5Y+q6K+7XG5cdFx0XHRcdCAgICAgICAgYnV0dG9uX2ltZzogZGF0YV9hdHRyLmJ1dHRvbl9pbWcsLy/lvJXnlKjmjInpkq7nmoTlm77moIdcblx0XHRcdFx0ICAgICAgICBidXR0b25fdG9vbHRpcDogZGF0YV9hdHRyLmJ1dHRvbl90b29sdGlwLy/lvJXnlKjmjInpkq7nmoR0b29sdGlwXG5cdFx0XHRcdCAgICB9XG5cdFx0XHRcdH1cblx0XHQgICAgXHR2YXIgZGF0YUluZm8gPSB7XG5cdFx0ICAgICAgICAgICAgZWR0eXBlOiBpbmZvLmVkdHlwZSwgZXZlbnRpZDogaW5mby5ldmVudGlkLCBwcm9qZWN0aWQ6IGluZm8ucHJvamVjdGlkLnJlcGxhY2UoJ3snLCcnKS5yZXBsYWNlKCd9JywnJyksXG5cdFx0ICAgICAgICAgICAgcmNsc2lkOiBpbmZvLnJjbHNpZCwgcm9iamlkOiBpbmZvLnJvYmppZCwgdXNlcmxvZ2luOiBpbmZvLnVzZXJsb2dpbiwgY2xzaWQ6IGluZm8uY2xzaWQsIG9iamlkOiBpbmZvLm9iamlkLFxuXHRcdCAgICAgICAgICAgIGF0dHI6IEpTT04uc3RyaW5naWZ5KGluZm8uYXR0ciksIGV4dGluZm86IEpTT04uc3RyaW5naWZ5KGVudmlyb21lbnQpLCBpbnB1dHBhcmFtZXRlcjogJycsIGdsb2JhbF9hdHRyOiBKU09OLnN0cmluZ2lmeSh0aGlzLiRkYXRhLmdsb2JhbF9hdHRyKVxuXHRcdCAgICAgICAgfVxuXHRcdCAgICBcdGNvbnNvbGUubG9nKGRhdGFJbmZvKTtcblx0XHQgICAgXHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnRGF0YU9ialJ1bkN1c3RvbUV2ZW50SW5mbycsZGF0YUluZm8pLnRoZW4oc3VjY2Vzcz0+e1xuXHRcdCAgICBcdFx0Y29uc29sZS5sb2coc3VjY2Vzcyk7XG5cdFx0ICAgIFx0XHRpZiAoc3VjY2Vzcy5jb2RlPT0nMDAwMDAnKSB7XG5cdFx0XHRcdFx0XHR2YXIgZGF0YSA9IEpTT04ucGFyc2Uoc3VjY2Vzcy5kYXRhKTtcblx0XHQgICAgXHRcdFx0dmFyIGFjdGlvbmxpc3QgPSBkYXRhLmFjdGlvbjtcblx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdCAgICBcdFx0XHRpZiAoYWN0aW9ubGlzdCkge1xuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhhY3Rpb25saXN0KTtcblx0XHQgICAgXHRcdFx0ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWN0aW9ubGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgIHZhciBhY3Rpb24gPSBhY3Rpb25saXN0W2ldO1xuXHRcdCAgICBcdFx0XHQgICAgICAgIGlmIChhY3Rpb24uYWN0aW9uX3R5cGUgPT0gJ3NldF9kbGdfYXR0cicpIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGFjdGlvbi52YWx1ZTtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAocmVzdWx0W2ldLmNob2ljZV9saXN0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgYyA9IDA7IGMgPCAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0Lmxlbmd0aDsgYysrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgYXR0ciA9ICR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbY10uQXR0cjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihhdHRyW2pdLk5hbWU9PXJlc3VsdFtpXS5hdHRyKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihhdHRyW2pdLlR5cGU9PSflrZflhbgnIHx8IGF0dHJbal0uVHlwZT09J+Wtl+WFuC3lrZfnrKbkuLInKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBkaWN0SXRlbUxpc3Q9W107XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGQgaW4gcmVzdWx0W2ldLmNob2ljZV9saXN0KXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHZhbCA9cmVzdWx0W2ldLmNob2ljZV9saXN0W2RdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkaWN0SXRlbUxpc3QucHVzaCh7XCJDTl9TX05BTUVcIjp2YWwsXCJOYW1lXCI6dmFsLFwibGFiZWxcIjp2YWwsXCJ2YWx1ZVwiOnZhbH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXR0cltqXS5kaWN0aXRlbSA9IGRpY3RJdGVtTGlzdDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGF0dHJbal0uZGljdGl0ZW0gPSByZXN1bHRbaV0uY2hvaWNlX2xpc3Q7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgZm9yICh2YXIgYyA9IDA7IGMgPCAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0Lmxlbmd0aDsgYysrKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBcdHZhciBhdHRyID0gJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtjXS5BdHRyO1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgXHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGF0dHJbal0uTmFtZSsnPT0nK3Jlc3VsdFtpXS5hdHRyKTtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIFx0XHRpZihhdHRyW2pdLk5hbWU9PXJlc3VsdFtpXS5hdHRyKXtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIFx0XHRcdGF0dHJbal0uVmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBcdFx0fVxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgXHR9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBsZW5ndGggPSAwO1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgaWYgKCEkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUuZmlsdGVyKGZ1bmN0aW9uIChzKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFtpXS5hdHRyID09IHMuYXR0clxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgfSkubGVuZ3RoKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gMTtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICAkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUucHVzaChyZXN1bHRbaV0pO1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgaWYgKGxlbmd0aCA9PSAwKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCAkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUubGVuZ3RoOyBqKyspIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS5hdHRyID09IHJlc3VsdFtpXS5hdHRyKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0udmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgICAgICB9IGVsc2UgaWYgKGRhdGEuYWN0aW9uW2ldLmFjdGlvbl90eXBlID09ICdzZXRfZ2xvYmFsX2F0dHInKSB7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAkdGhpcy4kZGF0YS5nbG9iYWxfYXR0ciA9IGRhdGEuYWN0aW9uW2ldLnZhbHVlIHx8IFtdO1xuXHRcdFx0XHRcdFx0ICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICB9XG5cdFx0ICAgIFx0XHRcdH1cblx0XHQgICAgXHRcdFx0XG5cdFx0ICAgIFx0XHRcdGlmIChkYXRhLnJlc3VsdCkge1xuXHRcdCAgICBcdFx0XHQgICAgdmFyIHJlc3VsdCA9IGRhdGEucmVzdWx0O1xuXHRcdCAgICBcdFx0XHQgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyBpKyspIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICBmb3IgKHZhciBjID0gMDsgYyA8ICR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3QubGVuZ3RoOyBjKyspIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICBcdHZhciBhdHRyID0gJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtjXS5BdHRyO1xuXHRcdCAgICBcdFx0XHQgICAgICAgIFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgXHRcdGlmKGF0dHJbal0uTmFtZT09cmVzdWx0W2ldLmF0dHIpe1xuXHRcdCAgICBcdFx0XHQgICAgICAgIFx0XHRcdGF0dHJbal0uVmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgXHRcdH1cblx0XHQgICAgXHRcdFx0ICAgICAgICBcdH1cblx0XHQgICAgXHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGxlbmd0aCA9IDA7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgaWYgKCEkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUuZmlsdGVyKGZ1bmN0aW9uIChzKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgIHJldHVybiByZXN1bHRbaV0uYXR0ciA9PSBzLmF0dHJcblx0XHQgICAgXHRcdFx0ICAgICAgICB9KS5sZW5ndGgpIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgbGVuZ3RoID0gMTtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLnB1c2gocmVzdWx0W2ldKTtcblx0XHQgICAgXHRcdFx0ICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgaWYgKGxlbmd0aCA9PSAwKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmxlbmd0aDsgaisrKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBpZiAoJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLmF0dHIgPT0gcmVzdWx0W2ldLmF0dHIpIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICAkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0udmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICB9XG5cdFx0ICAgIFx0XHRcdH1cblx0XHQgICAgXHRcdH1lbHNle1xuXHRcdCAgICBcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzNcIixjb250ZW50OnN1Y2Nlc3MubXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdCAgICBcdFx0fVxuXHRcdCAgICBcdH0pLmNhdGNoKGV4PT57XG5cdFx0ICAgIFx0XHQvLyBjb25zb2xlLmxvZyhleCk7XG5cdFx0ICAgIFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzMuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdCAgICBcdH0pO1xuXHRcdCAgICB9LFxuXHRcdFx0T0tEYXRhT2JqUnVuQ3VzdG9tRXZlbnQoKXtcblx0XHQgICAgXHR2YXIgZW52aXJvbWVudCA9IHtcblx0XHRcdFx0ICAgICdmdW5jdGlvbic6ICczMDAwJywgLy8g5Yqf6IO954K557yW5Y+3XG5cdFx0XHRcdCAgICBjbHNfaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCwgICAgIC8vIOWKn+iDveeCueS4u+aVsOaNruexu+agh+ivhlxuXHRcdFx0XHQgICAgJ2J1dHRvbic6ICd0b3AnLCAgIC8vIHRvcC9ib3R0b21cblx0XHRcdFx0ICAgIGJ1dHRvbl9uYW1lOiAn5paw5aKeJyxcblx0XHRcdFx0ICAgIG1hc3Rlcjoge1xuXHRcdFx0XHQgICAgICAgIGNsc19pZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELCAvLyBidXR0b249Ym90dG9t5pe2IG1hc3RlcueahGNsc19pZFxuXHRcdFx0XHQgICAgICAgIFxuXHRcdFx0XHQgICAgfVxuXHRcdFx0XHR9O1xuXHRcdCAgICBcdFxuXHRcdFx0XHR2YXIgZXZlbnRpZCA9IHRoaXMuJGRhdGEuZWRpdF9va19ldmVudC5zY3JpcF9pZDtcblx0XHRcdFx0dmFyIHJlcT1bXTtcblx0XHRcdFx0dmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0O1xuXHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xuXHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0dmFyIGFyID0gYXR0cltqXTtcblx0XHRcdFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+36YCJ5oupJyB8fCBhci5WYWx1ZT09J+KAlOKAlOivt+mAieaLqeKAlOKAlCcpIGFyLlZhbHVlPScnO1xuXHRcdFx0XHRcdFx0aWYoYXIuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJylcblx0XHRcdFx0XHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0ICAgICAgICBpZihhci5UeXBlPT0n5byV55So5Lq65ZGYJyB8fCBhci5UeXBlPT0n5byV55So6aG555uuJylcblx0XHRcdFx0ICAgICAgICBcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XG5cdFx0XHRcdCAgICAgICAgZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8Jylcblx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWU/JzEnOicwJ30pO1xuXHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZSB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFx0ICAgIFx0aWYgKHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmxlbmd0aCA+IDApIHtcblx0XHQgICAgXHQgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGg7IGkrKykge1xuXHRcdCAgICBcdCAgICAgICAgaWYgKCFyZXEuZmlsdGVyKGZ1bmN0aW9uIChzKSB7XG5cdFx0ICAgIFx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2ldLmF0dHIgPT0gcy5uYW1lXG5cdFx0ICAgIFx0ICAgICAgICB9KS5sZW5ndGgpIHtcblx0XHQgICAgXHQgICAgICAgICAgICBsZW5ndGggPSAxO1xuXHRcdCAgICBcdCAgICAgICAgICAgIHJlcS5wdXNoKHsgJ2F0dHInOiB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtpXS5hdHRyLCAndmFsdWUnOiB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtpXS52YWx1ZSB9KTtcblx0XHQgICAgXHQgICAgICAgIH1cblx0XHQgICAgXHQgICAgfVxuXHRcdCAgICBcdH1cblx0XHQgICAgXHR2YXIgaW5mbyA9IHtcblx0XHQgICAgXHQgICAgZXZlbnRpZDogZXZlbnRpZCxcblx0XHQgICAgXHQgICAgZWR0eXBlOiBcIjBcIixcblx0XHQgICAgXHQgICAgcHJvamVjdGlkOiAnJyxcblx0XHQgICAgXHQgICAgcmNsc2lkOiAnJyxcblx0XHQgICAgXHQgICAgcm9iamlkOiAnJyxcblx0XHQgICAgXHQgICAgdXNlcmxvZ2luOiAnJyxcblx0XHQgICAgXHQgICAgY2xzaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCxcblx0XHQgICAgXHQgICAgb2JqaWQ6IFwiXCIsXG5cdFx0ICAgIFx0ICAgIGF0dHI6IHJlcSxcblx0XHQgICAgXHR9XG5cdFx0ICAgIFx0dmFyIGRhdGFJbmZvID0ge1xuXHRcdCAgICAgICAgICAgIGVkdHlwZTogaW5mby5lZHR5cGUsIGV2ZW50aWQ6IGluZm8uZXZlbnRpZCwgcHJvamVjdGlkOiBpbmZvLnByb2plY3RpZCxyY2xzaWQ6IGluZm8ucmNsc2lkLCBcblx0XHRcdFx0XHRyb2JqaWQ6IGluZm8ucm9iamlkLCB1c2VybG9naW46IGluZm8udXNlcmxvZ2luLCBjbHNpZDogaW5mby5jbHNpZCwgb2JqaWQ6IGluZm8ub2JqaWQsXG5cdFx0XHRcdFx0YXR0cjogSlNPTi5zdHJpbmdpZnkoaW5mby5hdHRyKSwgZXh0aW5mbzogSlNPTi5zdHJpbmdpZnkoZW52aXJvbWVudCksIGdsb2JhbF9hdHRyOiBKU09OLnN0cmluZ2lmeSh0aGlzLiRkYXRhLmdsb2JhbF9hdHRyKVxuXHRcdCAgICAgICAgfVxuXHRcdCAgICBcdGNvbnNvbGUubG9nKGRhdGFJbmZvKTtcblx0XHQgICAgXHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnRGF0YU9ialJ1bkN1c3RvbUV2ZW50SW5mbycsZGF0YUluZm8pLnRoZW4oc3VjY2Vzcz0+e1xuXHRcdCAgICBcdFx0Y29uc29sZS5sb2coc3VjY2Vzcyk7XG5cdFx0ICAgIFx0XHRpZiAoc3VjY2Vzcy5jb2RlPT0nMDAwMDAnKSB7XG5cdFx0XHRcdFx0XHR2YXIgZGF0YSA9IEpTT04ucGFyc2Uoc3VjY2Vzcy5kYXRhKTtcdFx0XG5cdFx0ICAgIFx0XHRcdHZhciByZXN1bHQgPSBkYXRhLnJlc3VsdDtcblx0XHQgICAgXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyBpKyspIHtcblx0XHQgICAgXHRcdFx0ICAgIC8vIHNlbGYuY2xhc3NfYXR0cl9lbGUuZmluZCgnLmF0dHJfZmllbGRbZGF0YS1maWVsZD1cIicgKyByZXN1bHRbaV0uYXR0ciArICdcIl0nKS52YWwocmVzdWx0W2ldLnZhbHVlKS5kYXRhKCd2YWwnLCByZXN1bHRbaV0udmFsdWUpO1xuXHRcdCAgICBcdFx0XHQgICAgdmFyIGxlbmd0aCA9IDA7XG5cdFx0ICAgIFx0XHRcdCAgICBpZiAoIXRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmZpbHRlcihmdW5jdGlvbiAocykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgIHJldHVybiByZXN1bHRbaV0uYXR0ciA9PSBzLmF0dHJcblx0XHQgICAgXHRcdFx0ICAgIH0pLmxlbmd0aCkge1xuXHRcdCAgICBcdFx0XHQgICAgICAgIGxlbmd0aCA9IDE7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUucHVzaChyZXN1bHRbaV0pO1xuXHRcdCAgICBcdFx0XHQgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgaWYgKGxlbmd0aCA9PSAwKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGg7IGorKykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICBpZiAodGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0uYXR0ciA9PSByZXN1bHRbaV0uYXR0cikge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0udmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICB9XG5cdFx0ICAgIFx0XHRcdH1cblx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0dGhpcy5hZGQoKTtcblx0XHQgICAgXHRcdH1lbHNle1xuXHRcdCAgICBcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzRcIixjb250ZW50OnN1Y2Nlc3MubXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdCAgICBcdFx0fVxuXHRcdCAgICBcdH0pLmNhdGNoKGV4PT57XG5cdFx0ICAgIFx0XHQvLyBjb25zb2xlLmxvZyhleCk7XG5cdFx0ICAgIFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzQuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdCAgICBcdH0pO1xuXHRcdCAgICB9LFxuXHRcdCAgICBEYXRhT2JqUnVuQ3VzdG9tRXZlbnRfUmV0dXJuKGV2ZW50aWQsZGF0YV9hdHRyLGJ1dHRvbl9jYWxsYmFjayxpbmRleCxpaW5kZXgpe1xuXHRcdFx0XHR2YXIgZW52aXJvbWVudCA9IHtcblx0XHRcdFx0ICAgICdmdW5jdGlvbic6ICczMDAwJywgLy8g5Yqf6IO954K557yW5Y+3XG5cdFx0XHRcdCAgICBjbHNfaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCwgICAgIC8vIOWKn+iDveeCueS4u+aVsOaNruexu+agh+ivhlxuXHRcdFx0XHQgICAgJ2J1dHRvbic6ICd0b3AnLCAgIC8vIHRvcC9ib3R0b21cblx0XHRcdFx0ICAgIGJ1dHRvbl9uYW1lOiAn5paw5aKeJyxcblx0XHRcdFx0ICAgIG1hc3Rlcjoge1xuXHRcdFx0XHQgICAgICAgIGNsc19pZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELCAvLyBidXR0b249Ym90dG9t5pe2IG1hc3RlcueahGNsc19pZFxuXHRcdFx0XHQgICAgICAgIC8vb2JqX2lkOiAnJyAgLy8gYnV0dG9uPWJvdHRvbeaXtiBtYXN0ZXLnmoRvYmpfaWRcblx0XHRcdFx0ICAgIH1cblx0XHRcdFx0fTtcblx0XHRcdFx0dmFyIHJlcT1bXTtcblx0XHRcdFx0dmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0O1xuXHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xuXHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0dmFyIGFyID0gYXR0cltqXTtcblx0XHRcdFx0XHRcdGlmKGFyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpXG5cdFx0XHRcdFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdCAgICAgICAgaWYoYXIuVHlwZT09J+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZT09J+W8leeUqOmhueebricpXG5cdFx0XHRcdCAgICAgICAgXHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWxJRCA/YXIuVmFsSUQgOicnIH0pO1xuXHRcdFx0XHQgICAgICAgIGVsc2UgaWYoYXIuVHlwZT09J+W4g+WwlOWAvCcpXG5cdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlPycxJzonMCd9KTtcblx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWUgfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdCAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdCAgICAgICAgaWYgKCFyZXEuZmlsdGVyKGZ1bmN0aW9uIChzKSB7XG5cdFx0XHRcdCAgICAgICAgICAgIHJldHVybiB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtpXS5hdHRyID09IHMubmFtZVxuXHRcdFx0XHQgICAgICAgIH0pLmxlbmd0aCkge1xuXHRcdFx0XHQgICAgICAgICAgICBsZW5ndGggPSAxO1xuXHRcdFx0XHQgICAgICAgICAgICByZXEucHVzaCh7ICdhdHRyJzogdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbaV0uYXR0ciwgJ3ZhbHVlJzogdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbaV0udmFsdWUgfSk7XG5cdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHQgICAgfVxuXHRcdFx0XHR9XG5cdFx0XHRcdHZhciBleHRpbmZvID0gZW52aXJvbWVudDtcblx0XHRcdFx0ZXh0aW5mby5lZGl0X2RsZyA9IHtcblx0XHRcdFx0ICAgIHR5cGU6ICdzbWFsbCcsLy/lsI/nqpflj6Ncblx0XHRcdFx0ICAgIGNsYXNzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsLy/lvZPliY3mlbDmja7nsbtpZFxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChkYXRhX2F0dHIpIHtcblx0XHRcdFx0ICAgIGV4dGluZm8uZWRpdF9kbGcuZm9ybV9jb250cm9sID0gey8v5omA5bGe55qE6KGo5Y2V5o6n5Lu2XG5cdFx0XHRcdCAgICAgICAgbmFtZTogZGF0YV9hdHRyLk5hbWUsLy/lrZfmrrXlsZ7mgKdcblx0XHRcdFx0ICAgICAgICB0ZXh0OiBkYXRhX2F0dHIuRGlzcE5hbWUsLy/mmL7npLrmlofmnKxcblx0XHRcdFx0ICAgICAgICBncm91cF9uYW1lOiBkYXRhX2F0dHIuR3JvdXBOYW1lLC8v5bGe5oCn57uEXG5cdFx0XHRcdCAgICAgICAgdHlwZTogZGF0YV9hdHRyLlR5cGUsLy/lrZfmrrXnsbvlnotcblx0XHRcdFx0ICAgICAgICByZWFkb25seTogZGF0YV9hdHRyLlJlYWRPbmx5LC8v5piv5ZCm5Y+q6K+7XG5cdFx0XHRcdCAgICAgICAgYnV0dG9uX2ltZzogZGF0YV9hdHRyLmJ1dHRvbl9pbWcsLy/lvJXnlKjmjInpkq7nmoTlm77moIdcblx0XHRcdFx0ICAgICAgICBidXR0b25fdG9vbHRpcDogZGF0YV9hdHRyLmJ1dHRvbl90b29sdGlwLy/lvJXnlKjmjInpkq7nmoR0b29sdGlwXG5cdFx0XHRcdCAgICB9XG5cdFx0XHRcdH1cblx0XHRcdFx0dmFyIGRhdGFJbmZvID0ge1xuXHRcdFx0XHRcdGVkdHlwZTogIFwiMFwiLCBldmVudGlkOiBldmVudGlkLCBwcm9qZWN0aWQ6ICcnLHJjbHNpZDogJycsIHJvYmppZDogJycsIHVzZXJsb2dpbjogJycsIFxuXHRcdFx0XHRcdGNsc2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsIG9iamlkOiAnJyxhdHRyOiBKU09OLnN0cmluZ2lmeShyZXEpLCBcblx0XHRcdFx0XHRleHRpbmZvOiBKU09OLnN0cmluZ2lmeShleHRpbmZvKSwgZ2xvYmFsX2F0dHI6IEpTT04uc3RyaW5naWZ5KHRoaXMuJGRhdGEuZ2xvYmFsX2F0dHIpXG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc29sZS5sb2coZGF0YUluZm8pO1xuXHRcdFx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnRGF0YU9ialJ1bkN1c3RvbUV2ZW50SW5mbycsZGF0YUluZm8pLnRoZW4oc3VjY2Vzcz0+e1xuXHRcdFx0XHRcdGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xuXHRcdFx0XHRcdGlmIChzdWNjZXNzLmNvZGU9PScwMDAwMCcpIHtcblx0XHRcdFx0XHRcdHZhciBkYXRhID0gSlNPTi5wYXJzZShzdWNjZXNzLmRhdGEpO1xuXHRcdFx0XHRcdFx0aWYgKGRhdGEgIT0gXCJcIikge1xuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0dmFyIGFjdGlvbnMgPSBkYXRhLmFjdGlvbjtcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGFjdGlvbnMpO1xuXHRcdFx0XHRcdFx0aWYgKGFjdGlvbnMpIHtcblx0XHRcdFx0XHRcdCAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFjdGlvbnMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdCAgICAgICAgdmFyIGFjdGlvbiA9IGFjdGlvbnNbaV07XG5cdFx0XHRcdFx0XHQgICAgICAgIHZhciB2YWwgPSBhY3Rpb24udmFsdWU7XG5cdFx0XHRcdFx0XHQgICAgICAgIHZhciBlbnZpcm9tZW50ID0gSlNPTi5zdHJpbmdpZnkoZW52aXJvbWVudCk7XG5cdFx0XHRcdFx0XHQgICAgICAgIFxuXHRcdFx0XHRcdFx0ICAgICAgICBpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdvcGVuX3BhbmVsJykge1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICB2YXIgZCA9IGRpYWxvZyh7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICB0aXRsZTogJzxpIGNsYXNzPVwiYWNlLWljb24gZmEgZmEtaW5mby1jaXJjbGVcIj48L2k+ICcgKyAn5o+Q56S6Jyxcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgIGNvbnRlbnQ6IGFjdGlvbi5hY3Rpb25fdHlwZSArICfmraRhY3Rpb27lsJrmnKrlpITnkIbvvIEnXG5cdFx0XHRcdFx0XHQgICAgICAgICAgIH0pO1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICBkLnNob3coKTtcblx0XHRcdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHRcdFx0ICAgICAgICBlbHNlIGlmIChhY3Rpb24uYWN0aW9uX3R5cGUgPT0gJ29wZW5fc2VsZWN0X3VzZXJkbGcnKSB7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICB2YXIgc3R5bGUgPSB2YWwuc3R5bGU7XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBzdHlsZSA9PSAndXNlcicgPyAn6YCJ5oup5Lq65ZGYJyA6IHN0eWxlID09ICdkZXBhcnRtZW50JyA/ICfpgInmi6npg6jpl6gnIDogc3R5bGUgPT0gJ3JvbGUnID8gJ+mAieaLqeinkuiJsicgOiAnJ1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgdmFyICR0aGlzID0gdGhpcztcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBwYXJhbT17XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGluZGV4OiBpbmRleCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWluZGV4OmlpbmRleCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0YnV0dG9uX2NhbGxiYWNrOmJ1dHRvbl9jYWxsYmFjayxcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVxOnJlcSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YV9hdHRyOmRhdGFfYXR0clxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0dW5pLm5hdmlnYXRlVG8oe1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgXHR1cmw6Jy4uL3NlbHBzbi9pbmRleD9tdWxpdD1mYWxzZSZwYXJhbT0nK0pTT04uc3RyaW5naWZ5KHBhcmFtKSxcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIFx0ZXZlbnRzOntcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIFx0XHRBZGRQZXIoZGF0YSxwYXJhbSl7IFxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgXHRcdFx0Ly8gY29uc29sZS5sb2cocGFyYW0pO1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgXHRcdFx0Y29uc29sZS5sb2coZGF0YSk7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICBcdFx0XHR2YXIgY2FsbGJhY2tfZXZlbnRpZCA9IHBhcmFtLmJ1dHRvbl9jYWxsYmFjay50cmltKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgaW5mbyA9IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICBldmVudGlkOiBjYWxsYmFja19ldmVudGlkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgIGVkdHlwZTogXCIwXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgcHJvamVjdGlkOiAnJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICByY2xzaWQ6ICcnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgIHJvYmppZDogJycsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgdXNlcmxvZ2luOiAnJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICBjbHNpZDogJHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICBvYmppZDogXCJcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICBhdHRyOiBwYXJhbS5yZXEsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgaW5wdXRwYXJhbWV0ZXI6IGRhdGFcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLkRhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvLCBwYXJhbS5kYXRhX2F0dHIpO1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgXHRcdH1cblx0XHRcdFx0XHRcdCAgICAgICAgICAgIFx0fVxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgfSk7XHRcblx0XHRcdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHRcdFx0ICAgICAgICBlbHNlIGlmIChhY3Rpb24uYWN0aW9uX3R5cGUgPT0gJ29wZW5fZGF0YV9xdWVyeV9kbGcnKSB7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICBcblx0XHRcdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHRcdFx0ICAgICAgICBlbHNlIGlmIChhY3Rpb24uYWN0aW9uX3R5cGUgPT0gJ29wZW5fY29tbW9uX2RsZycpIHtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIHZhciB2YWx1ZSA9IGFjdGlvbi52YWx1ZTtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIHZhciBkID0gZGlhbG9nKHtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICB0aXRsZTogJzxpIGNsYXNzPVwiYWNlLWljb24gZmEgZmEtaW5mby1jaXJjbGVcIj48L2k+ICcgKyAn5o+Q56S6Jyxcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICBjb250ZW50OiBhY3Rpb24uYWN0aW9uX3R5cGUgKyAn5q2kYWN0aW9u5bCa5pyq5aSE55CG77yBJ1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgfSk7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICBkLnNob3coKTtcblx0XHRcdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHRcdFx0ICAgICAgICBlbHNlIGlmIChhY3Rpb24uYWN0aW9uX3R5cGUgPT0gJ29wZW5fcHJvamVjdF9xdWVyeV9kbGcnKSB7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAvL2NvbnNvbGUubG9nKGFjdGlvbi52YWx1ZS5zZWxlY3RfcmFuZ2UpO1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhhY3Rpb24udmFsdWUubXVsaXRfc2VsZWN0KTtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIHZhciBwcmlSZWwgPSAnLTEnO1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgaWYgKGFjdGlvbi52YWx1ZS5zZWxlY3RfcmFuZ2UgPT0gJ+WFqOmDqOebuOWFsycpXG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgcHJpUmVsID0gJzAnO1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgZWxzZSBpZiAoYWN0aW9uLnZhbHVlLnNlbGVjdF9yYW5nZSA9PSAn5oiR6LSf6LSj55qE6aG555uuJylcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICBwcmlSZWwgPSAnMSc7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICBlbHNlIGlmIChhY3Rpb24udmFsdWUuc2VsZWN0X3JhbmdlID09ICfmiJHliJvlu7rnmoQnKVxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgIHByaVJlbCA9ICcyJztcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIGVsc2UgaWYgKGFjdGlvbi52YWx1ZS5zZWxlY3RfcmFuZ2UgPT0gJ+aIkeWPguS4jueahCcgfHwgYWN0aW9uLnZhbHVlLnNlbGVjdF9yYW5nZSA9PSAn5oiR5Y+C5Yqg55qEJylcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICBwcmlSZWwgPSAnMyc7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICBlbHNlIGlmIChhY3Rpb24udmFsdWUuc2VsZWN0X3JhbmdlID09ICfmiJHlhbPms6jnmoQnKVxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgIHByaVJlbCA9ICc0Jztcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIGVsc2UgaWYgKGFjdGlvbi52YWx1ZS5zZWxlY3RfcmFuZ2UgPT0gJ+aIkeS4i+WxnueahOmhueebricpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHByaVJlbCA9ICc1Jztcblx0XHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtXz17XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGluZGV4OiBpbmRleCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWluZGV4OmlpbmRleCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0YnV0dG9uX2NhbGxiYWNrOmJ1dHRvbl9jYWxsYmFjayxcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVxOnJlcVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0dW5pLm5hdmlnYXRlVG8oe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR1cmw6Jy4uL3NlbFByai9pbmRleD9yZWxhdGlvbj0nK3ByaVJlbCsnJnBhcmFtPScrSlNPTi5zdHJpbmdpZnkocGFyYW1fKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZXZlbnRzOntcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRBZGRQZXIoZGF0YSxwYXJhbSl7IFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtwYXJhbS5pbmRleF0uQXR0cltwYXJhbS5paW5kZXhdLlZhbHVlPWRhdGFbMF0uTmFtZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbcGFyYW0uaW5kZXhdLkF0dHJbcGFyYW0uaWluZGV4XS5WYWxJRD1kYXRhWzBdLklEKyc7JytkYXRhWzBdLk5hbWU7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICBcdFx0XHR2YXIgY2FsbGJhY2tfZXZlbnRpZCA9IHBhcmFtLmJ1dHRvbl9jYWxsYmFjay50cmltKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoY2FsbGJhY2tfZXZlbnRpZCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgIHZhciBpbmZvID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgICBldmVudGlkOiBjYWxsYmFja19ldmVudGlkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgICBlZHR5cGU6IFwiMlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgICBwcm9qZWN0aWQ6IGRhdGFbMF0uSUQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgICAgIHJjbHNpZDogXCJcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgICAgcm9iamlkOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgICB1c2VybG9naW46IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgICAgIGNsc2lkOiAkdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgICBvYmppZDogXCJcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgICAgYXR0cjogcGFyYW0ucmVxLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgIH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgJHRoaXMuRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHQgICAgICAgIH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICB2YXIgZCA9IGRpYWxvZyh7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgdGl0bGU6ICc8aSBjbGFzcz1cImFjZS1pY29uIGZhIGZhLWluZm8tY2lyY2xlXCI+PC9pPiAnICsgJ+aPkOekuicsXG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgY29udGVudDogYWN0aW9uLmFjdGlvbl90eXBlICsgJ+atpGFjdGlvbuWwmuacquWkhOeQhu+8gSdcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIH0pO1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgZC5zaG93KCk7XG5cdFx0XHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHRcdCAgICB9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLo1LjJcIixjb250ZW50OiAn6LCD55SoIGJlZm9yZV9jbGlja19idXR0b24g6ISa5pys6L+U5Zue56m677yMZXZlbnRfaWQnICsgZXZlbnRpZCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vNVwiLGNvbnRlbnQ6c3VjY2Vzcy5tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KS5jYXRjaChleD0+e1xuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekujUuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHR9KTtcblx0XHQgICAgfSxcblx0XHQgICAgc2Nhbl9pbmlfRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8pe1xuXHRcdCAgICBcdHZhciBwYXJhbSA9IHtcblx0XHQgICAgXHQgICAgRWRpdFN0eWxlOiB0aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuVmlld19TdHlsZS5OYW1lLFxuXHRcdCAgICBcdCAgICBWaWV3U3R5bGU6IHRoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5WaWV3X1N0eWxlLk5hbWUsXG5cdFx0ICAgIFx0ICAgIE5vdFRyaWdnZXJTeXNFdmVudDogMCxcblx0XHQgICAgXHQgICAgZW52aXJvbWVudDoge1xuXHRcdCAgICBcdCAgICAgICAgJ2Z1bmN0aW9uJzogJzMwMDAnLCAvLyDlip/og73ngrnnvJblj7dcblx0XHQgICAgXHQgICAgICAgIGNsc19pZDogdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLklELCAgICAgLy8g5Yqf6IO954K55Li75pWw5o2u57G75qCH6K+GXG5cdFx0ICAgIFx0ICAgICAgICAnYnV0dG9uJzogJ3RvcCcsICAgLy8gdG9wL2JvdHRvbVxuXHRcdCAgICBcdCAgICAgICAgYnV0dG9uX25hbWU6ICfmlrDlop4nLFxuXHRcdCAgICBcdCAgICAgICAgbWFzdGVyOiB7XG5cdFx0ICAgIFx0ICAgICAgICAgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuSUQsIC8vIGJ1dHRvbj1ib3R0b23ml7YgbWFzdGVy55qEY2xzX2lkXG5cdFx0ICAgIFx0ICAgICAgICAgICAgLy9vYmpfaWQ6ICcnICAvLyBidXR0b249Ym90dG9t5pe2IG1hc3RlcueahG9ial9pZFxuXHRcdCAgICBcdCAgICAgICAgfVxuXHRcdCAgICBcdCAgICB9XG5cdFx0ICAgIFx0fVxuXHRcdCAgICBcdHZhciBpbnB1dHBhcmFtZXRlciA9ICcnO1xuXHRcdCAgICBcdHZhciBnbG9iYWxfYXR0ciA9ICcnO1xuXHRcdCAgICBcdFxuXHRcdCAgICBcdHZhciBkYXRhSW5mbyA9IHtcblx0XHQgICAgICAgICAgICBlZHR5cGU6IGluZm8uZWR0eXBlLCBldmVudGlkOiBpbmZvLmV2ZW50aWQsIHByb2plY3RpZDogaW5mby5wcm9qZWN0aWQsXG5cdFx0ICAgICAgICAgICAgcmNsc2lkOiBpbmZvLnJjbHNpZCwgcm9iamlkOiBpbmZvLnJvYmppZCwgdXNlcmxvZ2luOiBpbmZvLnVzZXJsb2dpbiwgY2xzaWQ6IGluZm8uY2xzaWQsIG9iamlkOiBpbmZvLm9iamlkLFxuXHRcdCAgICAgICAgICAgIGF0dHI6IEpTT04uc3RyaW5naWZ5KGluZm8uYXR0ciksIGV4dGluZm86IEpTT04uc3RyaW5naWZ5KHBhcmFtKSwgaW5wdXRwYXJhbWV0ZXI6IGlucHV0cGFyYW1ldGVyLCBnbG9iYWxfYXR0cjogZ2xvYmFsX2F0dHJcblx0XHQgICAgICAgIH1cblx0XHQgICAgXHRjb25zb2xlLmxvZyhkYXRhSW5mbyk7XG5cdFx0ICAgIFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ0RhdGFPYmpSdW5DdXN0b21FdmVudEluZm8nLGRhdGFJbmZvKS50aGVuKHN1Y2Nlc3M9Pntcblx0XHQgICAgXHRcdGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xuXHRcdCAgICBcdFx0aWYgKHN1Y2Nlc3MuY29kZT09JzAwMDAwJykge1xuXHRcdCAgICBcdFx0XHR2YXIgZGF0YSA9IEpTT04ucGFyc2Uoc3VjY2Vzcy5kYXRhKTtcblx0XHQgICAgXHRcdFx0dmFyIGFjdGlvbmxpc3QgPSBkYXRhLmFjdGlvbjtcblx0XHQgICAgXHRcdFx0aWYgKGFjdGlvbmxpc3QpIHtcblx0XHQgICAgXHRcdFx0ICAgIGZvciAodmFyIGogPSAwOyBqIDwgYWN0aW9ubGlzdC5sZW5ndGg7IGorKykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgIHZhciBhY3Rpb24gPSBhY3Rpb25saXN0W2pdXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgdmFyIGFjdGlvbl90eXBlID0gYWN0aW9uLmFjdGlvbl90eXBlO1xuXHRcdCAgICBcdFx0XHQgICAgICAgIHZhciB2YWx1ZSA9IGFjdGlvbi52YWx1ZTtcblx0XHQgICAgXHRcdFx0ICAgICAgICBpZiAoYWN0aW9uX3R5cGUgPT0gJ3NldF9kbGdfYXR0cicpIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICB2YXIgdmFsID0gdmFsdWU7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgdmFsID0gSlNPTi5wYXJzZSh2YWx1ZSk7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2codmFsKTtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBhID0gMDsgYSA8IHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdC5sZW5ndGg7IGErKykge1xuXHRcdCAgICBcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBsID0gMDsgbCA8IHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdFthXS5BdHRyLmxlbmd0aDsgbCsrKSB7XG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGNhID0gdGhpcy4kZGF0YS5zdWJDbGFzc0F0dHJMaXN0W2FdLkF0dHJbbF07XG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKHZhbFtpXS5hdHRyICA9PSBjYS5OYW1lKSB7XG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5UeXBlPT0n5a2X5YW4JyB8fCBjYS5UeXBlPT0n5a2X5YW4LeWtl+espuS4sicpe1xuXHRcdCAgICBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZGljdEl0ZW1MaXN0PVtdO1xuXHRcdCAgICBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGQgaW4gdmFsW2ldLmNob2ljZV9saXN0KXtcblx0XHQgICAgXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgdmFsID12YWxbaV0uY2hvaWNlX2xpc3RbZF07XG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGljdEl0ZW1MaXN0LnB1c2goe1wiQ05fU19OQU1FXCI6dmFsLFwiTmFtZVwiOnZhbCxcImxhYmVsXCI6dmFsLFwidmFsdWVcIjp2YWx9KTtcblx0XHQgICAgXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcblx0XHQgICAgXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdCAgICBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5kaWN0aXRlbSA9IGRpY3RJdGVtTGlzdDtcblx0XHQgICAgXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gYXR0cltqXS5kaWN0aXRlbSA9IHZhbFtpXS5jaG9pY2VfbGlzdDtcblx0XHQgICAgXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1lbHNle1xuXHRcdCAgICBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBjYS52YWx1ZSA9IHZhbFtpXS52YWx1ZTtcblx0XHQgICAgXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHQgICAgXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHQgICAgXHRcdFx0XHRcdFx0XHRcdH1cblx0XHQgICAgXHRcdFxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSAwO1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUuZmlsdGVyKGZ1bmN0aW9uIChzKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWxbaV0uYXR0ciA9PSBzLmF0dHJcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICB9KS5sZW5ndGgpIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gMTtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUucHVzaCh2YWxbaV0pO1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICBpZiAobGVuZ3RoID09IDApIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGg7IGorKykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLmF0dHIgPT0gdmFsW2ldLmF0dHIpIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS52YWx1ZSA9IHZhbFtpXS52YWx1ZTtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgICAgICBpZiAoYWN0aW9uX3R5cGUgPT0gJ29wZW5fc2VsZWN0X3VzZXJkbGcnKSB7XG5cdFx0ICAgIFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vNi4yXCIsY29udGVudDpcIm9wZW5fc2VsZWN0X3VzZXJkbGfov5nkuKphY3Rpb25fdHlwZei/mOacquWkhOeQhu+8gVwiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdCAgICBcdFx0XHQgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgIH1cblx0XHQgICAgXHRcdFx0fVxuXHRcdCAgICBcdFx0XHRcblx0XHQgICAgXHRcdH1lbHNle1xuXHRcdCAgICBcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzZcIixjb250ZW50OnN1Y2Nlc3MubXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdCAgICBcdFx0fVxuXHRcdCAgICBcdH0pLmNhdGNoKGV4PT57XG5cdFx0ICAgIFx0XHQvLyBjb25zb2xlLmxvZyhleCk7XG5cdFx0ICAgIFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzYuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdCAgICBcdH0pO1xuXHRcdCAgICB9LFxuXHRcdCAgICBzY2FuX0RhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvLGRhdGFfYXR0cil7XG5cdFx0ICAgIFx0dmFyICR0aGlzID0gdGhpcztcblx0XHQgICAgXHR2YXIgZW52aXJvbWVudCA9IHtcblx0XHQgICAgXHQgICAgJ2Z1bmN0aW9uJzogJzMwMDAnLCAvLyDlip/og73ngrnnvJblj7dcblx0XHQgICAgXHQgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuSUQsICAgICAvLyDlip/og73ngrnku47mlbDmja7nsbvmoIfor4Zcblx0XHQgICAgXHQgICAgJ2J1dHRvbic6ICd0b3AnLCAgIC8vIHRvcC9ib3R0b21cblx0XHQgICAgXHQgICAgYnV0dG9uX25hbWU6ICfmlrDlop4nLFxuXHRcdCAgICBcdCAgICBtYXN0ZXI6IHtcblx0XHQgICAgXHQgICAgICAgIGNsc19pZDogdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLklELCAvLyBidXR0b249Ym90dG9t5pe2IG1hc3RlcueahGNsc19pZFxuXHRcdCAgICBcdCAgICAgICAgLy9vYmpfaWQ6ICcnICAvLyBidXR0b249Ym90dG9t5pe2IG1hc3RlcueahG9ial9pZFxuXHRcdCAgICBcdCAgICB9XG5cdFx0ICAgIFx0fTtcblx0XHQgICAgXHRlbnZpcm9tZW50LmVkaXRfZGxnID0ge1xuXHRcdFx0XHRcdHR5cGU6ICdzbWFsbCcsLy/lsI/nqpflj6Ncblx0XHQgICAgXHQgICAgY2xhc3NfaWQ6IHRoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5JRCwvL+W9k+WJjeaVsOaNruexu2lkXG5cdFx0ICAgIFx0fVxuXHRcdCAgICBcdGlmIChkYXRhX2F0dHIpIHtcblx0XHQgICAgXHQgICAgZW52aXJvbWVudC5lZGl0X2RsZy5mb3JtX2NvbnRyb2wgPSB7Ly/miYDlsZ7nmoTooajljZXmjqfku7Zcblx0XHQgICAgXHQgICAgICAgIG5hbWU6IGRhdGFfYXR0ci5OYW1lLC8v5a2X5q615bGe5oCnXG5cdFx0ICAgIFx0ICAgICAgICB0ZXh0OiBkYXRhX2F0dHIuRGlzcE5hbWUsLy/mmL7npLrmlofmnKxcblx0XHQgICAgXHQgICAgICAgIGdyb3VwX25hbWU6IGRhdGFfYXR0ci5Hcm91cE5hbWUsLy/lsZ7mgKfnu4Rcblx0XHQgICAgXHQgICAgICAgIHR5cGU6IGRhdGFfYXR0ci5UeXBlLC8v5a2X5q6157G75Z6LXG5cdFx0ICAgIFx0ICAgICAgICByZWFkb25seTogZGF0YV9hdHRyLlJlYWRPbmx5LC8v5piv5ZCm5Y+q6K+7XG5cdFx0ICAgIFx0ICAgICAgICBidXR0b25faW1nOiBkYXRhX2F0dHIuYnV0dG9uX2ltZywvL+W8leeUqOaMiemSrueahOWbvuagh1xuXHRcdCAgICBcdCAgICAgICAgYnV0dG9uX3Rvb2x0aXA6IGRhdGFfYXR0ci5idXR0b25fdG9vbHRpcC8v5byV55So5oyJ6ZKu55qEdG9vbHRpcFxuXHRcdCAgICBcdCAgICB9XG5cdFx0ICAgIFx0fVxuXHRcdCAgICBcdFxuXHRcdCAgICBcdHZhciBkYXRhSW5mbyA9IHtcblx0XHQgICAgICAgICAgICBlZHR5cGU6IGluZm8uZWR0eXBlLCBldmVudGlkOiBpbmZvLmV2ZW50aWQsIHByb2plY3RpZDogaW5mby5wcm9qZWN0aWQucmVwbGFjZSgneycsJycpLnJlcGxhY2UoJ30nLCcnKSxcblx0XHQgICAgICAgICAgICByY2xzaWQ6IGluZm8ucmNsc2lkLCByb2JqaWQ6IGluZm8ucm9iamlkLCB1c2VybG9naW46IGluZm8udXNlcmxvZ2luLCBjbHNpZDogaW5mby5jbHNpZCwgb2JqaWQ6IGluZm8ub2JqaWQsXG5cdFx0ICAgICAgICAgICAgYXR0cjogSlNPTi5zdHJpbmdpZnkoaW5mby5hdHRyKSwgZXh0aW5mbzogSlNPTi5zdHJpbmdpZnkoZW52aXJvbWVudCksIGlucHV0cGFyYW1ldGVyOiBKU09OLnN0cmluZ2lmeShpbmZvLmlucHV0UGFyYW10ZXIpLCBnbG9iYWxfYXR0cjogSlNPTi5zdHJpbmdpZnkodGhpcy4kZGF0YS5nbG9iYWxfYXR0cilcblx0XHQgICAgICAgIH1cblx0XHQgICAgXHRjb25zb2xlLmxvZyhkYXRhSW5mbyk7XG5cdFx0ICAgIFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ0RhdGFPYmpSdW5DdXN0b21FdmVudEluZm8nLGRhdGFJbmZvKS50aGVuKHN1Y2Nlc3M9Pntcblx0XHQgICAgXHRcdGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xuXHRcdCAgICBcdFx0aWYgKHN1Y2Nlc3MuY29kZT09JzAwMDAwJykge1xuXHRcdCAgICBcdFx0XHR2YXIgZGF0YSA9IEpTT04ucGFyc2Uoc3VjY2Vzcy5kYXRhKTtcblx0XHQgICAgXHRcdFx0dmFyIGFjdGlvbmxpc3QgPSBkYXRhLmFjdGlvbjtcblx0XHQgICAgXHRcdFx0XHRcdFx0XG5cdFx0ICAgIFx0XHRcdGlmIChhY3Rpb25saXN0KSB7XG5cdFx0ICAgIFx0XHRcdFx0Y29uc29sZS5sb2coYWN0aW9ubGlzdCk7XG5cdFx0ICAgIFx0XHRcdCAgICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgYWN0aW9ubGlzdC5sZW5ndGg7IGlpKyspIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICB2YXIgYWN0aW9uID0gYWN0aW9ubGlzdFtpaV07XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgaWYgKGFjdGlvbi5hY3Rpb25fdHlwZSA9PSAnc2V0X2RsZ19hdHRyJykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICB2YXIgcmVzdWx0ID0gYWN0aW9uLnZhbHVlO1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykge1xuXHRcdCAgICBcdFx0XHRcdFx0XHRcdGlmIChyZXN1bHRbaV0uY2hvaWNlX2xpc3QpIHtcblx0XHQgICAgXHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIHMgPSAwOyBzIDwgJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0Lmxlbmd0aDsgcysrKSB7XG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGMgPSAwOyBjIDwgJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W3NdLnN1YkNsYXNzQXR0ckxpc3QubGVuZ3RoOyBjKyspIHtcblx0XHQgICAgXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgYXR0ciA9ICR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtzXS5zdWJDbGFzc0F0dHJMaXN0W2NdLkF0dHI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGF0dHJbal0uTmFtZT09cmVzdWx0W2ldLmF0dHIpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoYXR0cltqXS5UeXBlPT0n5a2X5YW4JyB8fCBhdHRyW2pdLlR5cGU9PSflrZflhbgt5a2X56ym5LiyJyl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBkaWN0SXRlbUxpc3Q9W107XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgZCBpbiByZXN1bHRbaV0uY2hvaWNlX2xpc3Qpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciB2YWwgPXJlc3VsdFtpXS5jaG9pY2VfbGlzdFtkXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkaWN0SXRlbUxpc3QucHVzaCh7XCJDTl9TX05BTUVcIjp2YWwsXCJOYW1lXCI6dmFsLFwibGFiZWxcIjp2YWwsXCJ2YWx1ZVwiOnZhbH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGF0dHJbal0uZGljdGl0ZW0gPSBkaWN0SXRlbUxpc3Q7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGF0dHJbal0uZGljdGl0ZW0gPSByZXN1bHRbaV0uY2hvaWNlX2xpc3Q7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBmb3IgKHZhciBzID0gMDsgcyA8ICR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdC5sZW5ndGg7IHMrKykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgXHRmb3IgKHZhciBjID0gMDsgYyA8ICR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtzXS5zdWJDbGFzc0F0dHJMaXN0Lmxlbmd0aDsgYysrKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBcdFx0dmFyIGF0dHIgPSAkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3Rbc10uc3ViQ2xhc3NBdHRyTGlzdFtjXS5BdHRyO1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgXHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgXHRcdFx0Y29uc29sZS5sb2coYXR0cltqXS5OYW1lKyc9PScrcmVzdWx0W2ldLmF0dHIpO1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgXHRcdFx0aWYoYXR0cltqXS5OYW1lPT1yZXN1bHRbaV0uYXR0cil7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBcdFx0XHRcdGF0dHJbal0uVmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBcdFx0XHR9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBcdFx0fVxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgXHR9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0dmFyIGxlbmd0aCA9IDA7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBpZiAoISR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5maWx0ZXIoZnVuY3Rpb24gKHMpIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0W2ldLmF0dHIgPT0gcy5hdHRyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICB9KS5sZW5ndGgpIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSAxO1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5wdXNoKHJlc3VsdFtpXSk7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBpZiAobGVuZ3RoID09IDApIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8ICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGg7IGorKykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLmF0dHIgPT0gcmVzdWx0W2ldLmF0dHIpIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS52YWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdzZXRfZ2xvYmFsX2F0dHInKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICR0aGlzLiRhY3Rpb250ciA9IGFjdGlvbi52YWx1ZSB8fCBbXTtcblx0XHQgICAgXHRcdFx0ICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbi5hY3Rpb25fdHlwZSA9PSAnYWRkX3N1YmNsc19wYW5lbCcpIHsgLy/kuLvku47mlbDmja7nsbvmiavnoIHmn6Xor6LmlbDmja5cblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGFjdGlvbi52YWx1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdGxldCBsaXN0XzEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdCkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHNjYW5Db2RlVmFsID0gJHRoaXMuJGRhdGEuc2NhbkNvZGVWYWw7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihpbmZvLmlucHV0UGFyYW10ZXJbMF0uYXR0cj09XCJtYXN0X2lucHV0XzMwMzdcIikgLy/liKTmlq3mmK/kuLvmlbDmja7nsbvmiavnoIHmn6Xor6LmlbDmja5cblx0XHRcdFx0XHRcdFx0XHRcdFx0c2NhbkNvZGVWYWwgPSBcIm1hc3RfaW5wdXRfMzAzNy1cIitpaTtcblx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdC5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0c2NhbkNvZGVWYWw6c2NhbkNvZGVWYWwsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN1YkNsYXNzQXR0cjpsaXN0XzFcblx0XHRcdFx0XHRcdFx0XHRcdH0pOyBcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgcyA9IDA7IHMgPCAkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3QubGVuZ3RoOyBzKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZigkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3Rbc10uc2NhbkNvZGVWYWwgPT0gc2NhbkNvZGVWYWwpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIF9zdWJDbGFzc0F0dHIgPSAkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3Rbc10uc3ViQ2xhc3NBdHRyO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgYyA9IDA7IGMgPCBfc3ViQ2xhc3NBdHRyLmxlbmd0aDsgYysrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBhdHRyID0gX3N1YkNsYXNzQXR0cltjXS5BdHRyO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhhdHRyW2pdLk5hbWUrJz09JytyZXN1bHRbaV0uYXR0cik7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoYXR0cltqXS5OYW1lPT1yZXN1bHRbaV0uYXR0cil7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhdHRyW2pdLlZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyAkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3Rbc10uc3ViQ2xhc3NBdHRyPWxpc3RfMTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGxlbmd0aCA9IDA7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICghJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmZpbHRlcihmdW5jdGlvbiAocykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgcmV0dXJuIHJlc3VsdFtpXS5hdHRyID09IHMuYXR0clxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KS5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgIGxlbmd0aCA9IDE7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUucHVzaChyZXN1bHRbaV0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChsZW5ndGggPT0gMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgZm9yICh2YXIgaiA9IDA7IGogPCAkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgICBpZiAoJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLmF0dHIgPT0gcmVzdWx0W2ldLmF0dHIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLnZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgIH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdCAgICBcdFx0XHQgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgIH1cblx0XHQgICAgXHRcdFx0fVxuXHRcdCAgICBcdFx0XHRcblx0XHQgICAgXHRcdFx0aWYgKGRhdGEucmVzdWx0KSB7XG5cdFx0XHRcdFx0XHRcdGxldCBsaXN0XzEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdCkpO1xuXHRcdFx0XHRcdFx0XHR2YXIgc2NhbkNvZGVWYWwgPSAkdGhpcy4kZGF0YS5zY2FuQ29kZVZhbDtcblx0XHRcdFx0XHRcdFx0aWYoaW5mby5pbnB1dFBhcmFtdGVyWzBdLmF0dHI9PVwibWFzdF9pbnB1dF8zMDM3XCIpXG5cdFx0XHRcdFx0XHRcdFx0c2NhbkNvZGVWYWwgPSBcIm1hc3RfaW5wdXRfMzAzNy1cIitpaTtcblx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0LnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdHNjYW5Db2RlVmFsOnNjYW5Db2RlVmFsLFxuXHRcdFx0XHRcdFx0XHRcdHN1YkNsYXNzQXR0cjpsaXN0XzFcblx0XHRcdFx0XHRcdFx0fSk7IFxuXHRcdCAgICBcdFx0XHQgICAgdmFyIHJlc3VsdCA9IGRhdGEucmVzdWx0O1xuXHRcdCAgICBcdFx0XHQgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyBpKyspIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICBmb3IgKHZhciBzID0gMDsgcyA8ICR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdC5sZW5ndGg7IHMrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W3NdLnNjYW5Db2RlVmFsID09IHNjYW5Db2RlVmFsKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIF9zdWJDbGFzc0F0dHIgPSAkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3Rbc10uc3ViQ2xhc3NBdHRyO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBjID0gMDsgYyA8IF9zdWJDbGFzc0F0dHIubGVuZ3RoOyBjKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgYXR0ciA9IF9zdWJDbGFzc0F0dHJbY10uQXR0cjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGF0dHJbal0uTmFtZSsnPT0nK3Jlc3VsdFtpXS5hdHRyKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGF0dHJbal0uTmFtZT09cmVzdWx0W2ldLmF0dHIpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhdHRyW2pdLlZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdCAgICBcdFx0XHQgICAgICAgIFx0fVxuXHRcdCAgICBcdFx0XHQgICAgICAgIH1cblx0XHQgICAgXHRcdFx0XHRcdFxuXHRcdCAgICBcdFx0XHRcdFx0dmFyIGxlbmd0aCA9IDA7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgaWYgKCEkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUuZmlsdGVyKGZ1bmN0aW9uIChzKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgIHJldHVybiByZXN1bHRbaV0uYXR0ciA9PSBzLmF0dHJcblx0XHQgICAgXHRcdFx0ICAgICAgICB9KS5sZW5ndGgpIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgbGVuZ3RoID0gMTtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLnB1c2gocmVzdWx0W2ldKTtcblx0XHQgICAgXHRcdFx0ICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgaWYgKGxlbmd0aCA9PSAwKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmxlbmd0aDsgaisrKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBpZiAoJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLmF0dHIgPT0gcmVzdWx0W2ldLmF0dHIpIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICAkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0udmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICB9XG5cdFx0ICAgIFx0XHRcdH1cblx0XHQgICAgXHRcdH1lbHNle1xuXHRcdCAgICBcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzdcIixjb250ZW50OnN1Y2Nlc3MubXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdCAgICBcdFx0fVxuXHRcdCAgICBcdH0pLmNhdGNoKGV4PT57XG5cdFx0ICAgIFx0XHQvLyBjb25zb2xlLmxvZyhleCk7XG5cdFx0ICAgIFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzcuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdCAgICBcdH0pO1xuXHRcdCAgICB9LFxuXHRcdCAgICBzY2FuX09LRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGV2ZW50SUQpe1xuXHRcdFx0XHR1bmkuc2hvd0xvYWRpbmcoe1xuXHRcdFx0XHRcdHRpdGxlOlwi5Yqg6L295LitLi4uXCJcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cdFx0XHRcdHZhciByZXE9W107XG5cdFx0XHRcdHZhciBhdHRybGlzdCA9ICR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Q7XG5cdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHR2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLkF0dHI7XG5cdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHRcdFx0aWYoYXIuVmFsdWU9PSfor7fpgInmi6knIHx8IGFyLlZhbHVlPT0n4oCU4oCU6K+36YCJ5oup4oCU4oCUJykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxuXHRcdFx0XHRcdFx0XHRpZihhci5WYWx1ZT09J+ivtycpIGFyLlZhbHVlPScnO1xuXHRcdFx0XHRcdFx0aWYoYXIuVHlwZT09J+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZT09J+W8leeUqOmhueebricpXG5cdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XG5cdFx0XHRcdFx0XHRlbHNlIGlmKGFyLlR5cGU9PSfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZT8nMSc6JzAnfSk7XG5cdFx0XHRcdFx0XHRlbHNlIGlmKGFyLlR5cGU9PSflrZflhbgnIHx8IGFyLlR5cGU9PSflrZflhbgt5a2X56ym5LiyJyl7XG5cdFx0XHRcdFx0XHRcdGlmKGFyLnNlbGVjdD09dHJ1ZSl7IC8v5Yik5pat5LiL5ouJ5piv5ZCm5aSa6YCJXG5cdFx0XHRcdFx0XHRcdFx0dmFyIHZhbFN0ciA9XCJcIjtcblx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIHYgaW4gYXIuVmFsdWUpe1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYodmFsU3RyKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YWxTdHIrPVwiO1wiO1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFsU3RyKz1hci5WYWx1ZVt2XTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogdmFsU3RyfSk7XG5cdFx0XHRcdFx0XHRcdH1lbHNlXG5cdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWV9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWUgP2FyLlZhbHVlIDonJ30pO1xuXHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdGlmICgoYXIuTm90RW1wdHkgPT0gJzEnIHx8IGFyLm5vdGVtcHR5ID09IHRydWUpICYmICFhci5WYWx1ZSkge1xuXHRcdFx0XHRcdFx0Ly8gaWYoYXIubm90RW1wdHk9PScxJyl7XG5cdFx0XHRcdFx0XHRcdHVuaS5oaWRlTG9hZGluZygpO1xuXHRcdFx0XHRcdFx0XHQvLyB1bmkuc2hvd1RvYXN0KHt0aXRsZTphci5EaXNwTmFtZSsn5LiN6IO95Li656m677yBJyxpY29uOlwic3VjY2Vzc1wiLGR1cmF0aW9uOjMwMDB9KTtcblx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50OmFyLkRpc3BOYW1lKyfkuI3og73kuLrnqbrvvIEnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHZhciBvYmplY3RzPVtdO1xuXHRcdFx0XHR2YXIgc3ViUGFuZWxMaXN0ID0gJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0O1xuXHRcdFx0XHRmb3IgKHZhciBzID0gMDsgcyA8IHN1YlBhbmVsTGlzdC5sZW5ndGg7IHMrKykge1xuXHRcdFx0XHRcdHZhciBzdWJfcmVxPVtdO1xuXHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ViUGFuZWxMaXN0W3NdLnN1YkNsYXNzQXR0ci5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0dmFyIGF0dHIgPSBzdWJQYW5lbExpc3Rbc10uc3ViQ2xhc3NBdHRyW2ldLkF0dHI7XG5cdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdFx0dmFyIGFyID0gYXR0cltqXTtcblx0XHRcdFx0XHRcdFx0aWYoYXIuVmFsdWU9PSfor7fpgInmi6knIHx8IGFyLlZhbHVlPT0n4oCU4oCU6K+36YCJ5oup4oCU4oCUJykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdFx0XHRcdGlmKGFyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpXG5cdFx0XHRcdFx0XHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0XHRcdFx0aWYoYXIuVHlwZT09J+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZT09J+W8leeUqOmhueebricpXG5cdFx0XHRcdFx0XHRcdFx0c3ViX3JlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XG5cdFx0XHRcdFx0XHRcdGVsc2UgaWYoYXIuVHlwZT09J+W4g+WwlOWAvCcpXG5cdFx0XHRcdFx0XHRcdFx0c3ViX3JlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlPycxJzonMCd9KTtcblx0XHRcdFx0XHRcdFx0ZWxzZSBpZihhci5UeXBlPT0n5a2X5YW4JyB8fCBhci5UeXBlPT0n5a2X5YW4LeWtl+espuS4sicpe1xuXHRcdFx0XHRcdFx0XHRcdGlmKGFyLnNlbGVjdD09dHJ1ZSl7IC8v5Yik5pat5LiL5ouJ5piv5ZCm5aSa6YCJXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgdmFsU3RyID1cIlwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciB2IGluIGFyLlZhbHVlKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYodmFsU3RyKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhbFN0cis9XCI7XCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhbFN0cis9YXIuVmFsdWVbdl07XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRzdWJfcmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogdmFsU3RyfSk7XG5cdFx0XHRcdFx0XHRcdFx0fWVsc2Vcblx0XHRcdFx0XHRcdFx0XHRcdHN1Yl9yZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZX0pO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRzdWJfcmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWUgP2FyLlZhbHVlIDonJ30pO1xuXHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRpZiAoKGFyLk5vdEVtcHR5ID09ICcxJyB8fCBhci5ub3RlbXB0eSA9PSB0cnVlKSAmJiAhYXIuVmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0Ly8gaWYoYXIubm90RW1wdHk9PScxJyl7XG5cdFx0XHRcdFx0XHRcdFx0dW5pLmhpZGVMb2FkaW5nKCk7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gdW5pLnNob3dUb2FzdCh7dGl0bGU6YXIuRGlzcE5hbWUrJ+S4jeiDveS4uuepuu+8gScsaWNvbjpcInN1Y2Nlc3NcIixkdXJhdGlvbjozMDAwfSk7XG5cdFx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50OmFyLkRpc3BOYW1lKyfkuI3og73kuLrnqbrvvIEnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRvYmplY3RzLnB1c2goe1xuXHRcdFx0XHRcdFx0b2JqX2lkOnN1YlBhbmVsTGlzdFtzXS5zY2FuQ29kZVZhbCxcblx0XHRcdFx0XHRcdG9ial9hdHRyczpzdWJfcmVxXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dmFyIGRhdGFKc29uPXtcblx0XHRcdFx0XHRtYXN0ZXJfY2xzOntcblx0XHRcdFx0XHRcdGNsc19uYW1lOiR0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuTmFtZSxcblx0XHRcdFx0XHRcdG9ial9hdHRyczpyZXFcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGlucHV0XzMwMzc6JHRoaXMuJGRhdGEuc2NhbkNvZGVWYWwsICAgLy/miavnoIHlhoXlrrlcblx0XHRcdFx0XHRvcF90eXBlOiR0aGlzLiRkYXRhLnBhcmFtLk9wZXJhdGlvblR5cGUsIC8v5L2c5Lia57G75Z6L5a6a5LmJXG5cdFx0XHRcdFx0c3ViX2Nsczp7XG5cdFx0XHRcdFx0XHRjbHNfbmFtZTokdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLk5hbWUsXG5cdFx0XHRcdFx0XHRvYmplY3RzOm9iamVjdHNcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0XHRcdGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGRhdGFKc29uKSk7XG5cdFx0ICAgIFx0dmFyIGRhdGFJbmZvID0ge1xuXHRcdCAgICAgICAgICAgIGVkdHlwZTogXCIwXCIsIGV2ZW50aWQ6IGV2ZW50SUQsIHByb2plY3RpZDogJycscmNsc2lkOiAnJywgcm9iamlkOiAnJywgdXNlcmxvZ2luOiAnJywgXG5cdFx0XHRcdFx0Y2xzaWQ6ICR0aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuSUQsIG9iamlkOiAnJyxhdHRyOiBKU09OLnN0cmluZ2lmeShbXSksIGV4dGluZm86IEpTT04uc3RyaW5naWZ5KFtdKSwgXG5cdFx0XHRcdFx0Z2xvYmFsX2F0dHI6IEpTT04uc3RyaW5naWZ5KCR0aGlzLiRkYXRhLmdsb2JhbF9hdHRyKSxkYXRhSnNvbjpKU09OLnN0cmluZ2lmeShkYXRhSnNvbilcblx0XHQgICAgICAgIH1cblx0XHRcdFx0Y29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoZGF0YUluZm8pKTtcblx0XHQgICAgXHRjb25zb2xlLmxvZyhkYXRhSW5mbyk7XG5cdFx0ICAgIFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ0RhdGFPYmpSdW5DdXN0b21FdmVudEluZm8nLGRhdGFJbmZvKS50aGVuKHN1Y2Nlc3M9Pntcblx0XHQgICAgXHRcdGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xuXHRcdFx0XHRcdHVuaS5oaWRlTG9hZGluZygpO1xuXHRcdCAgICBcdFx0aWYgKHN1Y2Nlc3MuY29kZT09JzAwMDAwJykge1xuXHRcdCAgICBcdFx0XHR2YXIgZGF0YSA9IEpTT04ucGFyc2Uoc3VjY2Vzcy5kYXRhKTtcdFx0XG5cdFx0ICAgIFx0XHRcdHZhciByZXN1bHQgPSBkYXRhLnJlc3VsdDtcblx0XHQgICAgXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyBpKyspIHtcblx0XHQgICAgXHRcdFx0ICAgIC8vIHNlbGYuY2xhc3NfYXR0cl9lbGUuZmluZCgnLmF0dHJfZmllbGRbZGF0YS1maWVsZD1cIicgKyByZXN1bHRbaV0uYXR0ciArICdcIl0nKS52YWwocmVzdWx0W2ldLnZhbHVlKS5kYXRhKCd2YWwnLCByZXN1bHRbaV0udmFsdWUpO1xuXHRcdCAgICBcdFx0XHQgICAgdmFyIGxlbmd0aCA9IDA7XG5cdFx0ICAgIFx0XHRcdCAgICBpZiAoISR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5maWx0ZXIoZnVuY3Rpb24gKHMpIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICByZXR1cm4gcmVzdWx0W2ldLmF0dHIgPT0gcy5hdHRyXG5cdFx0ICAgIFx0XHRcdCAgICB9KS5sZW5ndGgpIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICBsZW5ndGggPSAxO1xuXHRcdCAgICBcdFx0XHQgICAgICAgICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5wdXNoKHJlc3VsdFtpXSk7XG5cdFx0ICAgIFx0XHRcdCAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICBpZiAobGVuZ3RoID09IDApIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8ICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGg7IGorKykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICBpZiAoJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLmF0dHIgPT0gcmVzdWx0W2ldLmF0dHIpIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS52YWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgIH1cblx0XHQgICAgXHRcdFx0fVxuXHRcdCAgICBcdFx0XHRcblx0XHQgICAgXHRcdFx0aWYoZXZlbnRJRCAhPSAkdGhpcy4kZGF0YS5wYXJhbS5BZnRlcl9PS19FdmVudC5JRClcblx0XHQgICAgXHRcdFx0XHQkdGhpcy5zY2FuX09LRGF0YU9ialJ1bkN1c3RvbUV2ZW50KCR0aGlzLiRkYXRhLnBhcmFtLkFmdGVyX09LX0V2ZW50LklEKTtcblx0XHRcdFx0XHRcdGVsc2V7XG5cdFx0XHRcdFx0XHRcdC8v5Yi35pawXG5cdFx0XHRcdFx0XHRcdHVuaS5yZWRpcmVjdFRvKHtcblx0XHRcdFx0XHRcdFx0XHR1cmw6Jy4uL21vZGFsL21zX2NsYXNzQXR0cj9wYXJhbT0nK0pTT04uc3RyaW5naWZ5KCR0aGlzLiRkYXRhLnBhcmFtKStcIiZ0aXRsZW5hbWU9XCIrJHRoaXMuJGRhdGEudGl0bGVcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0ICAgIFx0XHR9ZWxzZXtcblx0XHQgICAgXHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor684XCIsY29udGVudDpzdWNjZXNzLm1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHQgICAgXHRcdH1cblx0XHQgICAgXHR9KS5jYXRjaChleD0+e1xuXHRcdCAgICBcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xuXHRcdFx0XHRcdHVuaS5oaWRlTG9hZGluZygpO1xuXHRcdCAgICBcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor684LjFcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHQgICAgXHR9KTtcblx0XHQgICAgfSxcblx0XHQgICAgXG5cdFx0XHRcblx0XHR9XG5cdH1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///80\n");
eval("/* WEBPACK VAR INJECTION */(function(__f__) {\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ 1);\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ 67));\nvar _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ 69));\nvar _pickerAddress = _interopRequireDefault(__webpack_require__(/*! ../../js/pickerAddress/pickerAddress.vue */ 70));\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\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  components: {\n    pickerAddress: _pickerAddress.default\n  },\n  data: function data() {\n    return {\n      title: '新增',\n      param: {},\n      classAttrList: [],\n      classGridStyle: [],\n      edit_inital_event: \"\",\n      //弹窗初始化事件ID\n      edit_ok_event: \"\",\n      //弹窗点击OK 触发事件ID\n      edit_select_compose_event: \"\",\n      //选择组成对象时调用\n      edit_compose_cls_id: \"\",\n      global_attr: [],\n      refdatastore: [],\n      //引用数据存储区// {attr:'G_PRJ_' + bindattr + '_ID', value:info.id}\n      scanCodeVal: \"\",\n      subClassAttrList: [],\n      subPanelList: [],\n      subClassGridStyle: []\n    };\n  },\n  onLoad: function onLoad(options) {\n    // console.log(options);\n    uni.setNavigationBarTitle({\n      title: options.titlename\n    }); //设置顶部标题 \n    var param = JSON.parse(options.param);\n    this.$data.title = param.Add_BtnName ? param.Add_BtnName : options.titlename; //设置按钮文字\n    __f__(\"log\", param, \" at pages/modal/ms_classAttr.vue:621\");\n    if (!param.Master_Cls.View_Style) {\n      uni.showModal({\n        title: \"提示\",\n        content: \"该功能点未配置界面窗口,请重新配置!\",\n        showCancel: false,\n        confirmText: \"取消\"\n      });\n      return;\n    }\n    if (!param.Master_Cls.View_Style.Name) {\n      uni.showModal({\n        title: \"提示\",\n        content: \"该功能点未配置窗口样式,请重新配置!\",\n        showCancel: false,\n        confirmText: \"取消\"\n      });\n      return;\n    }\n    this.$data.param = param;\n    // var edit_dlg = {\n    //     Model: param.EditDlgMode,\n    //     Name: param.Master_Cls.View_Style.Name\n    // }\n    //主数据类获取\n    var dataInfo = {\n      class_id: param.Master_Cls.ID\n    };\n    var $this = this;\n    $this.$store.state.thisareaFuncID = param.Master_Cls.ID;\n    // console.log($this.$store.getters.getclassAttrList);\n    if ($this.$store.getters.getclassAttrList) {\n      $this.$data.classAttrList = $this.$store.getters.getclassAttrList.data;\n      $this.classGridStyleInfo(param.Master_Cls.ID, $this.$data.param.Master_Cls.View_Style.Name, 'Mast');\n    } else {\n      $this.$store.dispatch('classAttrList', dataInfo).then(function (success) {\n        // console.log(success);\n        if (success.code == '00000') {\n          $this.$data.classAttrList = success.data;\n          $this.classGridStyleInfo(param.Master_Cls.ID, $this.$data.param.Master_Cls.View_Style.Name, 'Mast');\n        } else {\n          uni.showModal({\n            title: \"错误1\",\n            content: success.msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误1.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    }\n\n    //从数据类获取\n    var subdataInfo = {\n      class_id: param.Sub_Cls.ID\n    };\n    $this.$store.state.thisareaFuncSubID = param.Sub_Cls.ID;\n    if ($this.$store.getters.getSubClassAttrList) {\n      $this.$data.subClassAttrList = $this.$store.getters.getSubClassAttrList.data;\n      $this.classGridStyleInfo(param.Sub_Cls.ID, $this.$data.param.Sub_Cls.View_Style.Name, 'Sub');\n    } else {\n      $this.$store.dispatch('subClassAttrList', subdataInfo).then(function (success) {\n        // console.log(success);\n        if (success.code == '00000') {\n          $this.$data.subClassAttrList = success.data;\n          $this.classGridStyleInfo(param.Sub_Cls.ID, $this.$data.param.Sub_Cls.View_Style.Name, 'Sub');\n        } else {\n          uni.showModal({\n            title: \"错误1_1\",\n            content: success.msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误1_1.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    }\n  },\n  methods: {\n    cancel: function cancel(e) {\n      uni.navigateBack({\n        delta: 1 //返回层数,2则上上页\n      });\n    },\n    panel_del: function panel_del(index) {\n      var $this = this;\n      if (this.$data.subPanelList[index].scanCodeVal == this.$data.scanCodeVal) {\n        this.$data.scanCodeVal = '';\n      }\n      if (!this.$data.subPanelList[index].ObjID) this.$data.subPanelList.splice(index, 1);else {\n        var dataInfo = {\n          clsId: this.$data.param.Sub_Cls.ID,\n          objId: this.$data.subPanelList[index].ObjID\n        };\n        __f__(\"log\", dataInfo, \" at pages/modal/ms_classAttr.vue:703\");\n        // return;\n        uni.showLoading({\n          title: \"加载中...\"\n        });\n        this.$store.dispatch('DelObj', dataInfo).then(function (success) {\n          __f__(\"log\", success, \" at pages/modal/ms_classAttr.vue:707\");\n          uni.hideLoading();\n          if (success.code == '00000') {\n            $this.$data.subPanelList.splice(index, 1);\n            uni.showModal({\n              title: \"提示\",\n              content: \"删除成功!\",\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n          } else {\n            uni.showModal({\n              title: \"错误9\",\n              content: success.msg,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n          }\n        }).catch(function (ex) {\n          __f__(\"log\", ex, \" at pages/modal/ms_classAttr.vue:716\");\n          uni.hideLoading();\n          uni.showModal({\n            title: \"提示9.1\",\n            content: ex.errMsg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        });\n      }\n    },\n    classGridStyleInfo: function classGridStyleInfo(clsid, styleName, clsType) {\n      var _this = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {\n        var $this, gridstyleInfo;\n        return _regenerator.default.wrap(function _callee$(_context) {\n          while (1) {\n            switch (_context.prev = _context.next) {\n              case 0:\n                $this = _this;\n                gridstyleInfo = {\n                  class_id: clsid,\n                  name: styleName,\n                  type: '2'\n                };\n                $this.$store.state.thisEditName = styleName;\n                // console.log($this.$store.getters.getclassGridStyleInfo);\n                //获取主数据类界面样式\n                if (clsType == 'Mast') {\n                  if ($this.$store.getters.getclassGridStyleInfo) {\n                    $this.$data.classGridStyle = $this.$store.getters.getclassGridStyleInfo.data;\n                    $this.class_attr_init();\n                  } else {\n                    //console.log(gridstyleInfo);\n                    $this.$store.dispatch('classGridStyleInfo', gridstyleInfo).then(function (success) {\n                      // console.log(success);\n                      if (success.code == '00000') {\n                        success.data.StyleDef = JSON.parse(success.data.StyleDef);\n                        $this.$data.classGridStyle = success.data;\n                        $this.class_attr_init();\n                      } else {\n                        uni.showModal({\n                          title: \"错误1.2\",\n                          content: success.msg,\n                          showCancel: false,\n                          confirmText: \"取消\"\n                        });\n                      }\n                    }).catch(function (ex) {\n                      __f__(\"log\", ex, \" at pages/modal/ms_classAttr.vue:749\");\n                      uni.showModal({\n                        title: \"错误1.3\",\n                        content: ex.errMsg,\n                        showCancel: false,\n                        confirmText: \"取消\"\n                      });\n                    });\n                  }\n                } else if (clsType == 'Sub') {\n                  //获取从数据类界面样式\n                  if ($this.$store.getters.getSubClassGridStyleInfo) {\n                    $this.$data.subClassGridStyle = $this.$store.getters.getSubClassGridStyleInfo.data;\n                    $this.subClass_attr_init();\n                  } else {\n                    //console.log(gridstyleInfo);\n                    $this.$store.dispatch('subClassGridStyleInfo', gridstyleInfo).then(function (success) {\n                      // console.log(success);\n                      if (success.code == '00000') {\n                        success.data.StyleDef = JSON.parse(success.data.StyleDef);\n                        $this.$data.subClassGridStyle = success.data;\n                        $this.subClass_attr_init();\n                      } else {\n                        uni.showModal({\n                          title: \"错误1.2\",\n                          content: success.msg,\n                          showCancel: false,\n                          confirmText: \"取消\"\n                        });\n                      }\n                    }).catch(function (ex) {\n                      __f__(\"log\", ex, \" at pages/modal/ms_classAttr.vue:770\");\n                      uni.showModal({\n                        title: \"错误1.3\",\n                        content: ex.errMsg,\n                        showCancel: false,\n                        confirmText: \"取消\"\n                      });\n                    });\n                  }\n                }\n              case 4:\n              case \"end\":\n                return _context.stop();\n            }\n          }\n        }, _callee);\n      }))();\n    },\n    ontap: function ontap(e) {\n      var _this2 = this;\n      //扫码功能\n      //console.log(e.target)\n      getApp().onScan(function (result) {\n        //console.log(result.decodedata);\n        var isVal = _this2.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value;\n        //主数据类扫码查询数据\n        if (isVal != result.decodedata) {\n          _this2.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = result.decodedata;\n          //子数据类扫码区事件脚本\n          var eventid = _this2.$data.param.Scan_Code.Input_Change_Event.ID;\n          if (eventid) {\n            var req = [];\n            var attrlist = _this2.$data.classAttrList; //主数据类属性\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                  attr: ar.Name,\n                  value: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? '1' : '0'\n                });else req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var info = {\n              eventid: eventid,\n              edtype: \"7\",\n              //\"0\",\n              projectid: '',\n              rclsid: '',\n              robjid: '',\n              userlogin: '',\n              clsid: 'MBOX',\n              //this.$data.param.Sub_Cls.ID,\n              objid: \"\",\n              attr: req,\n              mast_attr: [],\n              inputParamter: [{\n                attr: 'mast_input_3037',\n                value: result.decodedata\n              }]\n            };\n            _this2.scan_DataObjRunCustomEvent(info, \"\");\n          }\n        }\n      });\n    },\n    scan_ontap: function scan_ontap(e) {\n      var _this3 = this;\n      //扫码区扫码功能\n      //console.log(e.target)\n      getApp().onScan(function (result) {\n        __f__(\"log\", result.decodedata, \" at pages/modal/ms_classAttr.vue:825\");\n        var isflag = true;\n        for (var i in _this3.$data.subPanelList) {\n          if (_this3.$data.subPanelList[i].scanCodeVal == result.decodedata) isflag = false;\n        }\n        //子数据类扫码查询数据\n        if (isflag) {\n          _this3.$data.scanCodeVal = result.decodedata;\n          var eventid = _this3.$data.param.Scan_Code.Input_Change_Event.ID;\n          if (eventid) {\n            var mast_req = [];\n            //主数据类属性\n            var classattrlist = _this3.$data.classAttrList;\n            for (var i = 0; i < classattrlist.length; i++) {\n              var attr = classattrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') mast_req.push({\n                  attr: ar.Name,\n                  value: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') mast_req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? '1' : '0'\n                });else mast_req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var req = [];\n            //子数据类属性\n            var attrlist = _this3.$data.subClassAttrList;\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                  attr: ar.Name,\n                  value: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? '1' : '0'\n                });else req.push({\n                  attr: ar.Name,\n                  value: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var info = {\n              eventid: eventid,\n              edtype: '7',\n              //\"0\",\n              projectid: '',\n              rclsid: '',\n              robjid: '',\n              userlogin: '',\n              clsid: 'MBOX',\n              //this.$data.param.Sub_Cls.ID,\n              objid: \"\",\n              attr: req,\n              mast_attr: mast_req,\n              inputParamter: [{\n                attr: 'input_3037',\n                value: _this3.$data.scanCodeVal\n              }]\n            };\n            _this3.scan_DataObjRunCustomEvent(info, \"\");\n          }\n        }\n      });\n    },\n    onarrow: function onarrow(index, open) {\n      // console.log(index+'--'+open);\n      this.$data.classAttrList[index].Open = open == true ? false : true;\n    },\n    ondateTime: function ondateTime(e) {\n      //console.log(e.target)\n      this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = e.target.value;\n    },\n    onchange: function onchange(e) {\n      __f__(\"log\", e.target, \" at pages/modal/ms_classAttr.vue:898\");\n      var value = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].dictitem[e.target.value];\n      var data_attr = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']];\n      __f__(\"log\", data_attr, \" at pages/modal/ms_classAttr.vue:901\");\n      if (value.Name != data_attr.Value) {\n        this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = value.Name;\n        __f__(\"log\", this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value, \" at pages/modal/ms_classAttr.vue:904\");\n        var eventid = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].action;\n        if (eventid) {\n          // self.event_no_sub = 1;\n          var req = [];\n          var attrlist = this.$data.classAttrList;\n          for (var i = 0; i < attrlist.length; i++) {\n            var attr = attrlist[i].Attr;\n            for (var j = 0; j < attr.length; j++) {\n              var ar = attr[j];\n              if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n              if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                attr: ar.Name,\n                val: ar.ValID ? ar.ValID : ''\n              });else if (ar.Type == '布尔值') req.push({\n                attr: ar.Name,\n                val: ar.Value ? '1' : '0'\n              });else req.push({\n                attr: ar.Name,\n                val: ar.Value ? ar.Value : ''\n              });\n            }\n          }\n          var info = {\n            eventid: eventid,\n            edtype: \"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: this.$data.param.Master_Cls.ID,\n            objid: \"\",\n            attr: req\n          };\n          this.DataObjRunCustomEvent(info);\n        }\n      }\n    },\n    onchange2: function onchange2(item, value, delvalue) {\n      // console.log(item);\n      // console.log(value);\n      // console.log(delvalue);\n      if (item.length == 0) {\n        //为空时,清空属性value\n        var index,\n          iindex,\n          dindex = 0;\n        for (var i in this.$data.classAttrList) {\n          for (var j in this.$data.classAttrList[i].Attr) {\n            for (var d in this.$data.classAttrList[i].Attr[j].dictitem) {\n              if (delvalue[0].Name == this.$data.classAttrList[i].Attr[j].dictitem[d].Name) {\n                this.$data.classAttrList[i].Attr[j].Value = \"\";\n              }\n            }\n          }\n        }\n      }\n      for (var v in item) {\n        var index,\n          iindex,\n          dindex = 0;\n        for (var i in this.$data.classAttrList) {\n          for (var j in this.$data.classAttrList[i].Attr) {\n            for (var d in this.$data.classAttrList[i].Attr[j].dictitem) {\n              if (item[v].Name == this.$data.classAttrList[i].Attr[j].dictitem[d].Name) {\n                index = i;\n                iindex = j;\n                dindex = d;\n              }\n            }\n          }\n        }\n        var itemvalue = item[v];\n        var data_attr = this.$data.classAttrList[index].Attr[iindex];\n        __f__(\"log\", data_attr, \" at pages/modal/ms_classAttr.vue:971\");\n        if (itemvalue.Name != data_attr.Value) {\n          this.$data.classAttrList[index].Attr[iindex].Value = value;\n          __f__(\"log\", this.$data.classAttrList[index].Attr[iindex].Value, \" at pages/modal/ms_classAttr.vue:974\");\n          var eventid = this.$data.classAttrList[index].Attr[iindex].action;\n          if (eventid) {\n            // self.event_no_sub = 1;\n            var req = [];\n            var attrlist = this.$data.classAttrList;\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].Attr;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n                if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                  attr: ar.Name,\n                  val: ar.ValID ? ar.ValID : ''\n                });else if (ar.Type == '布尔值') req.push({\n                  attr: ar.Name,\n                  val: ar.Value ? '1' : '0'\n                });else if (ar.Type == '字典' || ar.Type == '字典-字符串') req.push({\n                  attr: ar.Name,\n                  val: itemvalue.Name\n                });else req.push({\n                  attr: ar.Name,\n                  val: ar.Value ? ar.Value : ''\n                });\n              }\n            }\n            var info = {\n              eventid: eventid,\n              edtype: \"0\",\n              projectid: '',\n              rclsid: '',\n              robjid: '',\n              userlogin: '',\n              clsid: this.$data.param.Master_Cls.ID,\n              objid: \"\",\n              attr: req\n            };\n            this.DataObjRunCustomEvent(info);\n          }\n        }\n      }\n    },\n    onevent: function onevent(e) {\n      // console.log(e.target);\n      var data_attr = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']];\n      // console.log(data_attr);\n      if (e.target.value != data_attr.Value) {\n        this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = e.target.value;\n        var eventid = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].action;\n        if (eventid) {\n          // self.event_no_sub = 1;\n          var req = [];\n          var attrlist = this.$data.classAttrList;\n          for (var i = 0; i < attrlist.length; i++) {\n            var attr = attrlist[i].Attr;\n            for (var j = 0; j < attr.length; j++) {\n              var ar = attr[j];\n              if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n              if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                attr: ar.Name,\n                val: ar.ValID ? ar.ValID : ''\n              });else if (ar.Type == '布尔值') req.push({\n                attr: ar.Name,\n                val: ar.Value ? '1' : '0'\n              });else req.push({\n                attr: ar.Name,\n                val: ar.Value ? ar.Value : ''\n              });\n            }\n          }\n          var info = {\n            eventid: eventid,\n            edtype: \"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: this.$data.param.Master_Cls.ID,\n            objid: \"\",\n            attr: req\n          };\n          this.DataObjRunCustomEvent(info, data_attr);\n        }\n      }\n    },\n    oncheck: function oncheck(e) {\n      // console.log(e.target);\n      var ischecked = e.target.dataset.ischeck ? false : true;\n      var data_attr = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']];\n      // console.log(data_attr);\n      if (ischecked != data_attr.Value) {\n        this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = ischecked;\n        var eventid = this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].action;\n        if (eventid) {\n          // self.event_no_sub = 1;\n          var req = [];\n          var attrlist = this.$data.classAttrList;\n          for (var i = 0; i < attrlist.length; i++) {\n            var attr = attrlist[i].Attr;\n            for (var j = 0; j < attr.length; j++) {\n              var ar = attr[j];\n              if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n              if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n                attr: ar.Name,\n                val: ar.ValID ? ar.ValID : ''\n              });else if (ar.Type == '布尔值') req.push({\n                attr: ar.Name,\n                val: ar.Value ? '1' : '0'\n              });else req.push({\n                attr: ar.Name,\n                val: ar.Value ? ar.Value : ''\n              });\n            }\n          }\n          var info = {\n            eventid: eventid,\n            edtype: \"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: this.$data.param.Master_Cls.ID,\n            objid: \"\",\n            attr: req\n          };\n          this.DataObjRunCustomEvent(info);\n        }\n      }\n    },\n    inputValListIsDel: function inputValListIsDel(index) {\n      // console.log(index);\n      this.$data.inputValList.splice(index, 1); //删除tabPagejson的内容\n      // console.log(this.$data.inputValList);\n    },\n    addresschange: function addresschange(e) {\n      // console.log(e.target);\n      __f__(\"log\", e.data.join(';'), \" at pages/modal/ms_classAttr.vue:1105\");\n      this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = e.data.join(';');\n    },\n    classAttr_extButton: function classAttr_extButton(index, iindex) {\n      var $this = this;\n      var before_click_button = $this.$data.classAttrList[index].Attr[iindex].before_click_button;\n      var button_callback = $this.$data.classAttrList[index].Attr[iindex].button_callback;\n      if (!before_click_button) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"before_click_button-event_id为空!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      if (!button_callback) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"button_callback-event_id为空!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      var data_attr = this.$data.classAttrList[index].Attr[iindex];\n      this.DataObjRunCustomEvent_Return(before_click_button, data_attr, button_callback, index, iindex);\n    },\n    scan_classAttr_extButton: function scan_classAttr_extButton(e) {\n      //---------未完成-----------\n      var $this = this;\n      var Before_Select_Event = $this.$data.param.Scan_Code.Before_Select_Event.ID;\n      var After_Select_Event = $this.$data.param.Scan_Code.After_Select_Event.ID;\n      if (!Before_Select_Event) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"选择按钮前事件为空!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      if (!After_Select_Event) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"新增按钮后事件为空!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      // var data_attr = this.$data.classAttrList[index].Attr[iindex];\n      this.DataObjRunCustomEvent_Return(Before_Select_Event, '', After_Select_Event, '', '');\n    },\n    classAttr_AddPer: function classAttr_AddPer(index, iindex) {\n      var param = {\n        index: index,\n        iindex: iindex\n      };\n      var $this = this;\n      uni.navigateTo({\n        url: '../selpsn/index?mulit=false&param=' + JSON.stringify(param),\n        events: {\n          AddPer: function AddPer(data, param) {\n            // console.log(param);\n            __f__(\"log\", data, \" at pages/modal/ms_classAttr.vue:1146\");\n            $this.$data.classAttrList[param.index].Attr[param.iindex].Value = data[0].Name;\n            $this.$data.classAttrList[param.index].Attr[param.iindex].ValID = data[0].Login + ';' + data[0].Name;\n            var eventid = $this.$data.classAttrList[param.index].Attr[param.iindex].action;\n            if (eventid) {\n              eventid = eventid.trim();\n              if (eventid) {\n                var info = {\n                  eventid: eventid,\n                  edtype: \"4\",\n                  projectid: \"\",\n                  rclsid: \"\",\n                  robjid: \"\",\n                  userlogin: data[0].Login,\n                  clsid: $this.$data.param.Master_Cls.ID,\n                  objid: \"\",\n                  attr: []\n                };\n\n                // var data_attr = $this.$data.classAttrList[param.index].Attr[param.iindex];\n                $this.DataObjRunCustomEvent(info);\n              }\n            }\n          }\n        }\n      });\n    },\n    classAttr_AddRef: function classAttr_AddRef(e) {\n      __f__(\"log\", e.target, \" at pages/modal/ms_classAttr.vue:1175\");\n      uni.showModal({\n        title: \"提示\",\n        content: \"此功能还未实现!\",\n        showCancel: false,\n        confirmText: \"取消\"\n      });\n      // var value=this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].RelCls[e.target.value];\n      // this.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value=value;\n    },\n    classAttr_AddPrj: function classAttr_AddPrj(index, iindex) {\n      var param = {\n        index: index,\n        iindex: iindex\n      };\n      var $this = this;\n      uni.navigateTo({\n        url: '../selPrj/index?relation=-1&param=' + JSON.stringify(param),\n        events: {\n          AddPer: function AddPer(data, param) {\n            // console.log(param);\n            // console.log(data);\n            $this.$data.classAttrList[param.index].Attr[param.iindex].Value = data[0].Name;\n            $this.$data.classAttrList[param.index].Attr[param.iindex].ValID = data[0].ID + ';' + data[0].Name;\n            var eventid = $this.$data.classAttrList[param.index].Attr[param.iindex].action;\n            if (eventid) {\n              eventid = eventid.trim();\n              if (eventid) {\n                var info = {\n                  eventid: eventid,\n                  edtype: \"2\",\n                  projectid: data[0].ID,\n                  rclsid: \"\",\n                  robjid: \"\",\n                  userlogin: \"\",\n                  clsid: $this.$data.param.Master_Cls.ID,\n                  objid: \"\",\n                  attr: []\n                };\n\n                // var data_attr = $this.$data.classAttrList[param.index].Attr[param.iindex];\n                $this.DataObjRunCustomEvent(info);\n              }\n            }\n          }\n        }\n      });\n    },\n    sava: function sava() {\n      if (this.$data.param.Before_OK_Event)\n        //判断功能点参数是否有确定前脚本\n        this.scan_OKDataObjRunCustomEvent(this.$data.param.Before_OK_Event.ID);else this.scan_OKDataObjRunCustomEvent(this.$data.param.After_OK_Event.ID);\n    },\n    add: function add() {\n      var _this4 = this;\n      uni.showLoading({\n        title: \"加载中...\"\n      });\n      var req = [];\n      var attrlist = this.$data.classAttrList;\n      for (var i = 0; i < attrlist.length; i++) {\n        var attr = attrlist[i].Attr;\n        for (var j = 0; j < attr.length; j++) {\n          var ar = attr[j];\n          if (ar.Value == '请选择' || ar.Value == '——请选择——') ar.Value = '';\n          if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n          if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n            name: ar.Name,\n            value: ar.ValID ? ar.ValID : ''\n          });else if (ar.Type == '布尔值') req.push({\n            name: ar.Name,\n            value: ar.Value ? '1' : '0'\n          });else if (ar.Type == '字典' || ar.Type == '字典-字符串') {\n            if (ar.select == true) {\n              //判断下拉是否多选\n              var valStr = \"\";\n              for (var v in ar.Value) {\n                if (valStr) valStr += \";\";\n                valStr += ar.Value[v];\n              }\n              req.push({\n                name: ar.Name,\n                value: valStr\n              });\n            } else req.push({\n              name: ar.Name,\n              value: ar.Value\n            });\n          } else req.push({\n            name: ar.Name,\n            value: ar.Value ? ar.Value : ''\n          });\n          if ((ar.NotEmpty == '1' || ar.notempty == true) && !ar.Value) {\n            // if(ar.notEmpty=='1'){\n            uni.hideLoading();\n            // uni.showToast({title:ar.DispName+'不能为空!',icon:\"success\",duration:3000});\n            uni.showModal({\n              title: \"提示\",\n              content: ar.DispName + '不能为空!',\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return;\n          }\n        }\n      }\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: this.$data.param.Master_Cls.ID,\n        // 功能点主数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        master: {\n          cls_id: this.$data.param.Master_Cls.ID\n        }\n      };\n      var dataInfo = {\n        class_id: this.$data.param.Master_Cls.ID,\n        data_obj_id: '',\n        masterclsid: '',\n        req: JSON.stringify(req),\n        upfile: JSON.stringify([]),\n        post_data: JSON.stringify({}),\n        compose: JSON.stringify([]),\n        refdatastore: JSON.stringify([]),\n        extinfo: JSON.stringify(enviroment),\n        not_trigger_sys_event: ''\n      };\n\n      // return\n      __f__(\"log\", dataInfo, \" at pages/modal/ms_classAttr.vue:1281\");\n      this.$store.dispatch('addclassattr', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/ms_classAttr.vue:1283\");\n        uni.hideLoading();\n        if (success.code == '00000') {\n          var action = JSON.parse(success.data.Action);\n          if (action.ret == '0') {\n            if (action.result_type == '0') {\n              uni.showToast({\n                title: action.result,\n                icon: \"success\",\n                duration: 3000\n              });\n            }\n            // \"{\"ret\":0, \"result_type\":0, \"result\":\"创建成功123123123\",\"info\":\"\"}\"\n          }\n          //刷新\n          uni.redirectTo({\n            url: '../modal/ms_classAttr?param=' + JSON.stringify(_this4.$data.param) + \"&titlename=\" + _this4.$data.title\n          });\n          // this.class_attr_init();\n        } else {\n          uni.showModal({\n            title: \"错误\",\n            content: success.msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        __f__(\"log\", ex, \" at pages/modal/ms_classAttr.vue:1302\");\n        uni.hideLoading();\n        uni.showModal({\n          title: \"提示\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    class_attr_init: function class_attr_init() {\n      var attrlist = this.$data.classGridStyle.StyleDef.show_style;\n      var newattrlist = [];\n      if (this.$data.classAttrList.length > 0) {\n        for (var i = 0; i < attrlist.length; i++) {\n          var open = attrlist[i].open;\n          var name = attrlist[i].attrgroup_name;\n          var attrs = attrlist[i].attrs;\n          for (var s = 0; s < this.$data.classAttrList.length; s++) {\n            var clsattr = this.$data.classAttrList[s];\n            if (name == clsattr.Name) {\n              var attr = [];\n              for (var j = 0; j < attrs.length; j++) {\n                for (var l = 0; l < clsattr.Attr.length; l++) {\n                  var ca = clsattr.Attr[l];\n                  if (attrs[j].attr == ca.Name) {\n                    ca.action = attrs[j].action;\n                    ca.edit = attrs[j].edit;\n                    ca.notempty = attrs[j].notempty;\n                    ca.ext_button = attrs[j].ext_button;\n                    ca.button_img = attrs[j].button_img;\n                    ca.button_tooltip = attrs[j].button_tooltip;\n                    ca.before_click_button = attrs[j].before_click_button;\n                    ca.button_callback = attrs[j].button_callback;\n                    ca.hidden = attrs[j].hidden;\n                    ca.select = attrs[j].select == undefined ? false : attrs[j].select;\n                    ca.Value = \"\";\n                    if (ca.dictitem) {\n                      if (ca.select == true) ca.Value = []; //ca.dictitem[0].CN_S_NAME;\n                      else ca.Value = '请选择'; //ca.dictitem[0].CN_S_NAME;\n                      var dictitemlist = [];\n                      for (var d = 0; d < ca.dictitem.length; d++) {\n                        ca.dictitem[d].label = ca.dictitem[d].CN_S_NAME;\n                        ca.dictitem[d].value = ca.dictitem[d].CN_S_NAME;\n                        if (ca.dictitem[d].CN_C_IS_DEFAULT == '1') ca.Value = ca.dictitem[d].CN_S_NAME;\n                      }\n                    }\n                    if (ca.Type == '日期' || ca.Type == '时间') {\n                      var nowDate = new Date();\n                      var date = {\n                        year: nowDate.getFullYear(),\n                        month: nowDate.getMonth() + 1,\n                        day: nowDate.getDate()\n                      };\n                      ca.Value = date.year + '-' + (date.month >= 10 ? date.month : '0' + date.month) + '-' + (date.day >= 10 ? date.day : '0' + date.day);\n                    }\n                    if (ca.Type == '引用对象(多个)') {\n                      var relClsList = [];\n                      var attr_rescls = ca.RelCls.split(',');\n                      for (var ii in attr_rescls) {\n                        var rescls = attr_rescls[ii].split('|');\n                        relClsList.push({\n                          id: rescls[0],\n                          name: rescls[1]\n                        });\n                      }\n                      ca.RelClsList = relClsList;\n                      ca.Value = '请';\n                    }\n                    if (ca.Type == '省市区') ca.Value = '请选择';\n                    if (ca.Type == '布尔值') ca.Value = false;\n                    attr.push(ca);\n                  }\n                }\n              }\n              newattrlist.push({\n                BkColor: clsattr.BkColor,\n                HasAce: clsattr.HasAce,\n                ImgFontStyle: clsattr.ImgFontStyle,\n                Name: clsattr.Name,\n                Order: clsattr.Order,\n                Open: open,\n                Attr: attr,\n                control_style: this.$data.classGridStyle.StyleDef.control_style,\n                title_p_wdith: this.$data.classGridStyle.StyleDef.title_p_wdith,\n                Font: this.$data.classGridStyle.StyleDef.Font ? this.$data.classGridStyle.StyleDef.Font : {},\n                Bk_Color: this.$data.classGridStyle.StyleDef.Bk_Color ? this.$data.classGridStyle.StyleDef.Bk_Color : '#FFFFFF',\n                Text_Color: this.$data.classGridStyle.StyleDef.Text_Color ? this.$data.classGridStyle.StyleDef.Text_Color : '#000000'\n              });\n            }\n          }\n        }\n        if (newattrlist.length > 0) {\n          this.$data.classAttrList = newattrlist;\n        }\n        var req = [];\n        if (this.$data.classGridStyle.StyleDef) {\n          if (this.$data.classGridStyle.StyleDef.show_style.length > 0) {\n            var attrlist = this.$data.classGridStyle.StyleDef.show_style;\n            // $el.find('.attr_field').prop('readonly', true);\n            // $el.find('.attr_field').prop('disabled', true);\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].attrs;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                req.push({\n                  attr: ar.attr,\n                  value: ar.value ? ar.value : ''\n                });\n              }\n            }\n          }\n        }\n        var eventlist = this.$data.classGridStyle.StyleDef.event;\n        if (eventlist) {\n          if (eventlist.length > 0) {\n            for (var i = 0; i < eventlist.length; i++) {\n              if (eventlist[i].event_id == 'before_ok') {\n                this.$data.edit_ok_event = eventlist[i];\n              } else if (eventlist[i].event_id == 'initial') {\n                this.$data.edit_inital_event = eventlist[i];\n              } else if (eventlist[i].event_id == 'before_select_compose') {\n                this.$data.edit_select_compose_event = eventlist[i].scrip_id;\n                this.$data.edit_compose_cls_id = eventlist[i].compose_cls_id;\n              }\n            }\n          }\n        }\n        // console.log(req);\n        if (this.$data.edit_inital_event) {\n          var eventid = this.$data.edit_inital_event.scrip_id;\n          var info = {\n            eventid: eventid,\n            edtype: \"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: this.$data.param.Master_Cls.ID,\n            objid: \"\",\n            attr: req\n          };\n          this.ini_DataObjRunCustomEvent(info);\n        }\n        __f__(\"log\", this.$data.classGridStyle, \" at pages/modal/ms_classAttr.vue:1438\");\n        __f__(\"log\", this.$data.classAttrList, \" at pages/modal/ms_classAttr.vue:1439\");\n      } else {\n        uni.showModal({\n          title: \"提示\",\n          content: \"未找到可显示的的属性\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      }\n    },\n    subClass_attr_init: function subClass_attr_init() {\n      var attrlist = this.$data.subClassGridStyle.StyleDef.show_style;\n      var newattrlist = [];\n      if (this.$data.subClassAttrList.length > 0) {\n        for (var i = 0; i < attrlist.length; i++) {\n          var open = attrlist[i].open;\n          var name = attrlist[i].attrgroup_name;\n          var attrs = attrlist[i].attrs;\n          for (var s = 0; s < this.$data.subClassAttrList.length; s++) {\n            var clsattr = this.$data.subClassAttrList[s];\n            if (name == clsattr.Name) {\n              var attr = [];\n              for (var j = 0; j < attrs.length; j++) {\n                for (var l = 0; l < clsattr.Attr.length; l++) {\n                  var ca = clsattr.Attr[l];\n                  if (attrs[j].attr == ca.Name) {\n                    ca.action = attrs[j].action;\n                    ca.edit = attrs[j].edit;\n                    ca.notempty = attrs[j].notempty;\n                    ca.ext_button = attrs[j].ext_button;\n                    ca.button_img = attrs[j].button_img;\n                    ca.button_tooltip = attrs[j].button_tooltip;\n                    ca.before_click_button = attrs[j].before_click_button;\n                    ca.button_callback = attrs[j].button_callback;\n                    ca.hidden = attrs[j].hidden;\n                    ca.select = attrs[j].select == undefined ? false : attrs[j].select;\n                    ca.Value = \"\";\n                    if (ca.dictitem) {\n                      if (ca.select == true) ca.Value = []; //ca.dictitem[0].CN_S_NAME;\n                      else ca.Value = '请选择'; //ca.dictitem[0].CN_S_NAME;\n                      var dictitemlist = [];\n                      for (var d = 0; d < ca.dictitem.length; d++) {\n                        ca.dictitem[d].label = ca.dictitem[d].CN_S_NAME;\n                        ca.dictitem[d].value = ca.dictitem[d].CN_S_NAME;\n                        if (ca.dictitem[d].CN_C_IS_DEFAULT == '1') ca.Value = ca.dictitem[d].CN_S_NAME;\n                      }\n                    }\n                    if (ca.Type == '日期' || ca.Type == '时间') {\n                      var nowDate = new Date();\n                      var date = {\n                        year: nowDate.getFullYear(),\n                        month: nowDate.getMonth() + 1,\n                        day: nowDate.getDate()\n                      };\n                      ca.Value = date.year + '-' + (date.month >= 10 ? date.month : '0' + date.month) + '-' + (date.day >= 10 ? date.day : '0' + date.day);\n                    }\n                    if (ca.Type == '引用对象(多个)') {\n                      var relClsList = [];\n                      var attr_rescls = ca.RelCls.split(',');\n                      for (var ii in attr_rescls) {\n                        var rescls = attr_rescls[ii].split('|');\n                        relClsList.push({\n                          id: rescls[0],\n                          name: rescls[1]\n                        });\n                      }\n                      ca.RelClsList = relClsList;\n                      ca.Value = '请';\n                    }\n                    if (ca.Type == '省市区') ca.Value = '请选择';\n                    if (ca.Type == '布尔值') ca.Value = false;\n                    attr.push(ca);\n                  }\n                }\n              }\n              newattrlist.push({\n                BkColor: clsattr.BkColor,\n                HasAce: clsattr.HasAce,\n                ImgFontStyle: clsattr.ImgFontStyle,\n                Name: clsattr.Name,\n                Order: clsattr.Order,\n                Open: open,\n                Attr: attr,\n                control_style: this.$data.subClassGridStyle.StyleDef.control_style,\n                title_p_wdith: this.$data.subClassGridStyle.StyleDef.title_p_wdith,\n                Font: this.$data.subClassGridStyle.StyleDef.Font ? this.$data.subClassGridStyle.StyleDef.Font : {},\n                Bk_Color: this.$data.subClassGridStyle.StyleDef.Bk_Color ? this.$data.subClassGridStyle.StyleDef.Bk_Color : '#FFFFFF',\n                Text_Color: this.$data.subClassGridStyle.StyleDef.Text_Color ? this.$data.subClassGridStyle.StyleDef.Text_Color : '#000000'\n              });\n            }\n          }\n        }\n        if (newattrlist.length > 0) {\n          this.$data.subClassAttrList = newattrlist;\n        }\n        var req = [];\n        if (this.$data.subClassGridStyle.StyleDef) {\n          if (this.$data.subClassGridStyle.StyleDef.show_style.length > 0) {\n            var attrlist = this.$data.subClassGridStyle.StyleDef.show_style;\n            // $el.find('.attr_field').prop('readonly', true);\n            // $el.find('.attr_field').prop('disabled', true);\n            for (var i = 0; i < attrlist.length; i++) {\n              var attr = attrlist[i].attrs;\n              for (var j = 0; j < attr.length; j++) {\n                var ar = attr[j];\n                req.push({\n                  attr: ar.attr,\n                  value: ar.value ? ar.value : ''\n                });\n              }\n            }\n          }\n        }\n        var eventlist = this.$data.subClassGridStyle.StyleDef.event;\n        if (eventlist) {\n          if (eventlist.length > 0) {\n            for (var i = 0; i < eventlist.length; i++) {\n              if (eventlist[i].event_id == 'before_ok') {\n                this.$data.edit_ok_event = eventlist[i];\n              } else if (eventlist[i].event_id == 'initial') {\n                this.$data.edit_inital_event = eventlist[i];\n              } else if (eventlist[i].event_id == 'before_select_compose') {\n                this.$data.edit_select_compose_event = eventlist[i].scrip_id;\n                this.$data.edit_compose_cls_id = eventlist[i].compose_cls_id;\n              }\n            }\n          }\n        }\n        // console.log(req);\n        if (this.$data.edit_inital_event) {\n          var eventid = this.$data.edit_inital_event.scrip_id;\n          var info = {\n            eventid: eventid,\n            edtype: \"0\",\n            projectid: '',\n            rclsid: '',\n            robjid: '',\n            userlogin: '',\n            clsid: this.$data.param.Sub_Cls.ID,\n            objid: \"\",\n            attr: req\n          };\n          this.scan_ini_DataObjRunCustomEvent(info);\n        }\n        __f__(\"log\", this.$data.subClassGridStyle, \" at pages/modal/ms_classAttr.vue:1576\");\n        __f__(\"log\", this.$data.subClassAttrList, \" at pages/modal/ms_classAttr.vue:1577\");\n      } else {\n        uni.showModal({\n          title: \"提示\",\n          content: \"未找到可显示的的属性\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      }\n    },\n    ini_DataObjRunCustomEvent: function ini_DataObjRunCustomEvent(info) {\n      var _this5 = this;\n      var param = {\n        EditStyle: this.$data.param.Master_Cls.View_Style.Name,\n        ViewStyle: this.$data.param.Master_Cls.View_Style.Name,\n        NotTriggerSysEvent: 0,\n        enviroment: {\n          'function': '3000',\n          // 功能点编号\n          cls_id: this.$data.param.Master_Cls.ID,\n          // 功能点主数据类标识\n          'button': 'top',\n          // top/bottom\n          button_name: '新增',\n          master: {\n            cls_id: this.$data.param.Master_Cls.ID // button=bottom时 master的cls_id\n            //obj_id: ''  // button=bottom时 master的obj_id\n          }\n        }\n      };\n\n      var inputparameter = '';\n      var global_attr = '';\n      var dataInfo = {\n        edtype: info.edtype,\n        eventid: info.eventid,\n        projectid: info.projectid,\n        rclsid: info.rclsid,\n        robjid: info.robjid,\n        userlogin: info.userlogin,\n        clsid: info.clsid,\n        objid: info.objid,\n        attr: JSON.stringify(info.attr),\n        extinfo: JSON.stringify(param),\n        inputparameter: inputparameter,\n        global_attr: global_attr\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/ms_classAttr.vue:1607\");\n      this.$store.dispatch('DataObjRunCustomEventInfo', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/ms_classAttr.vue:1609\");\n        if (success.code == '00000') {\n          var data = JSON.parse(success.data);\n          var actionlist = data.action;\n          if (actionlist) {\n            for (var j = 0; j < actionlist.length; j++) {\n              var action = actionlist[j];\n              var action_type = action.action_type;\n              var value = action.value;\n              if (action_type == 'set_dlg_attr') {\n                if (value) {\n                  var val = value;\n                  if (typeof value == 'string') {\n                    val = JSON.parse(value);\n                  }\n                  __f__(\"log\", val, \" at pages/modal/ms_classAttr.vue:1624\");\n                  for (var i = 0; i < val.length; i++) {\n                    for (var a = 0; a < _this5.$data.classAttrList.length; a++) {\n                      for (var l = 0; l < _this5.$data.classAttrList[a].Attr.length; l++) {\n                        var ca = _this5.$data.classAttrList[a].Attr[l];\n                        if (val[i].attr == ca.Name) {\n                          if (ca.Type == '字典' || ca.Type == '字典-字符串') {\n                            var dictItemList = [];\n                            for (var d in val[i].choice_list) {\n                              var val = val[i].choice_list[d];\n                              dictItemList.push({\n                                \"CN_S_NAME\": val,\n                                \"Name\": val,\n                                \"label\": val,\n                                \"value\": val\n                              });\n                            }\n                            ca.dictitem = dictItemList;\n                            // attr[j].dictitem = val[i].choice_list;\n                          } else {\n                            // ca.value = val[i].value;\n                          }\n                        }\n                      }\n                    }\n                    var length = 0;\n                    if (!_this5.$data.refdatastore.filter(function (s) {\n                      return val[i].attr == s.attr;\n                    }).length) {\n                      length = 1;\n                      _this5.$data.refdatastore.push(val[i]);\n                    }\n                    if (length == 0) {\n                      for (var j = 0; j < _this5.$data.refdatastore.length; j++) {\n                        if (_this5.$data.refdatastore[j].attr == val[i].attr) {\n                          _this5.$data.refdatastore[j].value = val[i].value;\n                        }\n                      }\n                    }\n                  }\n                }\n              }\n              if (action_type == 'open_select_userdlg') {\n                uni.showModal({\n                  title: \"错误2.2\",\n                  content: \"open_select_userdlg这个action_type还未处理!\",\n                  showCancel: false,\n                  confirmText: \"取消\"\n                });\n              }\n            }\n          }\n        } else {\n          uni.showModal({\n            title: \"错误2\",\n            content: success.msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误2.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    DataObjRunCustomEvent: function DataObjRunCustomEvent(info, data_attr) {\n      var $this = this;\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: this.$data.param.Master_Cls.ID,\n        // 功能点主数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        master: {\n          cls_id: this.$data.param.Master_Cls.ID // button=bottom时 master的cls_id\n          //obj_id: ''  // button=bottom时 master的obj_id\n        }\n      };\n\n      enviroment.edit_dlg = {\n        type: 'small',\n        //小窗口\n        class_id: this.$data.param.Master_Cls.ID //当前数据类id\n      };\n\n      if (data_attr) {\n        enviroment.edit_dlg.form_control = {\n          //所属的表单控件\n          name: data_attr.Name,\n          //字段属性\n          text: data_attr.DispName,\n          //显示文本\n          group_name: data_attr.GroupName,\n          //属性组\n          type: data_attr.Type,\n          //字段类型\n          readonly: data_attr.ReadOnly,\n          //是否只读\n          button_img: data_attr.button_img,\n          //引用按钮的图标\n          button_tooltip: data_attr.button_tooltip //引用按钮的tooltip\n        };\n      }\n\n      var dataInfo = {\n        edtype: info.edtype,\n        eventid: info.eventid,\n        projectid: info.projectid.replace('{', '').replace('}', ''),\n        rclsid: info.rclsid,\n        robjid: info.robjid,\n        userlogin: info.userlogin,\n        clsid: info.clsid,\n        objid: info.objid,\n        attr: JSON.stringify(info.attr),\n        extinfo: JSON.stringify(enviroment),\n        inputparameter: '',\n        global_attr: JSON.stringify(this.$data.global_attr)\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/ms_classAttr.vue:1709\");\n      this.$store.dispatch('DataObjRunCustomEventInfo', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/ms_classAttr.vue:1711\");\n        if (success.code == '00000') {\n          var data = JSON.parse(success.data);\n          var actionlist = data.action;\n          if (actionlist) {\n            __f__(\"log\", actionlist, \" at pages/modal/ms_classAttr.vue:1717\");\n            for (var i = 0; i < actionlist.length; i++) {\n              var action = actionlist[i];\n              if (action.action_type == 'set_dlg_attr') {\n                var result = action.value;\n                for (var i = 0; i < result.length; i++) {\n                  if (result[i].choice_list) {\n                    for (var c = 0; c < $this.$data.classAttrList.length; c++) {\n                      var attr = $this.$data.classAttrList[c].Attr;\n                      for (var j = 0; j < attr.length; j++) {\n                        if (attr[j].Name == result[i].attr) {\n                          if (attr[j].Type == '字典' || attr[j].Type == '字典-字符串') {\n                            var dictItemList = [];\n                            for (var d in result[i].choice_list) {\n                              var val = result[i].choice_list[d];\n                              dictItemList.push({\n                                \"CN_S_NAME\": val,\n                                \"Name\": val,\n                                \"label\": val,\n                                \"value\": val\n                              });\n                            }\n                            attr[j].dictitem = dictItemList;\n                            // attr[j].dictitem = result[i].choice_list;\n                          }\n                        }\n                      }\n                    }\n                  }\n\n                  for (var c = 0; c < $this.$data.classAttrList.length; c++) {\n                    var attr = $this.$data.classAttrList[c].Attr;\n                    for (var j = 0; j < attr.length; j++) {\n                      __f__(\"log\", attr[j].Name + '==' + result[i].attr, \" at pages/modal/ms_classAttr.vue:1744\");\n                      if (attr[j].Name == result[i].attr) {\n                        attr[j].Value = result[i].value;\n                      }\n                    }\n                  }\n                  var length = 0;\n                  if (!$this.$data.refdatastore.filter(function (s) {\n                    return result[i].attr == s.attr;\n                  }).length) {\n                    length = 1;\n                    $this.$data.refdatastore.push(result[i]);\n                  }\n                  if (length == 0) {\n                    for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                      if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                        $this.$data.refdatastore[j].value = result[i].value;\n                      }\n                    }\n                  }\n                }\n              } else if (data.action[i].action_type == 'set_global_attr') {\n                $this.$data.global_attr = data.action[i].value || [];\n              }\n            }\n          }\n          if (data.result) {\n            var result = data.result;\n            for (var i = 0; i < result.length; i++) {\n              for (var c = 0; c < $this.$data.classAttrList.length; c++) {\n                var attr = $this.$data.classAttrList[c].Attr;\n                for (var j = 0; j < attr.length; j++) {\n                  if (attr[j].Name == result[i].attr) {\n                    attr[j].Value = result[i].value;\n                  }\n                }\n              }\n              var length = 0;\n              if (!$this.$data.refdatastore.filter(function (s) {\n                return result[i].attr == s.attr;\n              }).length) {\n                length = 1;\n                $this.$data.refdatastore.push(result[i]);\n              }\n              if (length == 0) {\n                for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                  if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                    $this.$data.refdatastore[j].value = result[i].value;\n                  }\n                }\n              }\n            }\n          }\n        } else {\n          uni.showModal({\n            title: \"错误3\",\n            content: success.msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误3.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    OKDataObjRunCustomEvent: function OKDataObjRunCustomEvent() {\n      var _this6 = this;\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: this.$data.param.Master_Cls.ID,\n        // 功能点主数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        master: {\n          cls_id: this.$data.param.Master_Cls.ID // button=bottom时 master的cls_id\n        }\n      };\n\n      var eventid = this.$data.edit_ok_event.scrip_id;\n      var req = [];\n      var attrlist = this.$data.classAttrList;\n      for (var i = 0; i < attrlist.length; i++) {\n        var attr = attrlist[i].Attr;\n        for (var j = 0; j < attr.length; j++) {\n          var ar = attr[j];\n          if (ar.Value == '请选择' || ar.Value == '——请选择——') ar.Value = '';\n          if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n          if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n            attr: ar.Name,\n            value: ar.ValID ? ar.ValID : ''\n          });else if (ar.Type == '布尔值') req.push({\n            attr: ar.Name,\n            value: ar.Value ? '1' : '0'\n          });else req.push({\n            attr: ar.Name,\n            value: ar.Value\n          });\n        }\n      }\n      if (this.$data.refdatastore.length > 0) {\n        for (var i = 0; i < this.$data.refdatastore.length; i++) {\n          if (!req.filter(function (s) {\n            return this.$data.refdatastore[i].attr == s.name;\n          }).length) {\n            length = 1;\n            req.push({\n              'attr': this.$data.refdatastore[i].attr,\n              'value': this.$data.refdatastore[i].value\n            });\n          }\n        }\n      }\n      var info = {\n        eventid: eventid,\n        edtype: \"0\",\n        projectid: '',\n        rclsid: '',\n        robjid: '',\n        userlogin: '',\n        clsid: this.$data.param.Master_Cls.ID,\n        objid: \"\",\n        attr: req\n      };\n      var dataInfo = {\n        edtype: info.edtype,\n        eventid: info.eventid,\n        projectid: info.projectid,\n        rclsid: info.rclsid,\n        robjid: info.robjid,\n        userlogin: info.userlogin,\n        clsid: info.clsid,\n        objid: info.objid,\n        attr: JSON.stringify(info.attr),\n        extinfo: JSON.stringify(enviroment),\n        global_attr: JSON.stringify(this.$data.global_attr)\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/ms_classAttr.vue:1864\");\n      this.$store.dispatch('DataObjRunCustomEventInfo', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/ms_classAttr.vue:1866\");\n        if (success.code == '00000') {\n          var data = JSON.parse(success.data);\n          var result = data.result;\n          for (var i = 0; i < result.length; i++) {\n            // self.class_attr_ele.find('.attr_field[data-field=\"' + result[i].attr + '\"]').val(result[i].value).data('val', result[i].value);\n            var length = 0;\n            if (!_this6.$data.refdatastore.filter(function (s) {\n              return result[i].attr == s.attr;\n            }).length) {\n              length = 1;\n              _this6.$data.refdatastore.push(result[i]);\n            }\n            if (length == 0) {\n              for (var j = 0; j < _this6.$data.refdatastore.length; j++) {\n                if (_this6.$data.refdatastore[j].attr == result[i].attr) {\n                  _this6.$data.refdatastore[j].value = result[i].value;\n                }\n              }\n            }\n          }\n          _this6.add();\n        } else {\n          uni.showModal({\n            title: \"错误4\",\n            content: success.msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误4.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    DataObjRunCustomEvent_Return: function DataObjRunCustomEvent_Return(eventid, data_attr, button_callback, index, iindex) {\n      var _this7 = this;\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: this.$data.param.Master_Cls.ID,\n        // 功能点主数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        master: {\n          cls_id: this.$data.param.Master_Cls.ID // button=bottom时 master的cls_id\n          //obj_id: ''  // button=bottom时 master的obj_id\n        }\n      };\n\n      var req = [];\n      var attrlist = this.$data.classAttrList;\n      for (var i = 0; i < attrlist.length; i++) {\n        var attr = attrlist[i].Attr;\n        for (var j = 0; j < attr.length; j++) {\n          var ar = attr[j];\n          if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n          if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n            attr: ar.Name,\n            value: ar.ValID ? ar.ValID : ''\n          });else if (ar.Type == '布尔值') req.push({\n            attr: ar.Name,\n            value: ar.Value ? '1' : '0'\n          });else req.push({\n            attr: ar.Name,\n            value: ar.Value\n          });\n        }\n      }\n      if (this.$data.refdatastore.length > 0) {\n        for (var i = 0; i < this.$data.refdatastore.length; i++) {\n          if (!req.filter(function (s) {\n            return this.$data.refdatastore[i].attr == s.name;\n          }).length) {\n            length = 1;\n            req.push({\n              'attr': this.$data.refdatastore[i].attr,\n              'value': this.$data.refdatastore[i].value\n            });\n          }\n        }\n      }\n      var extinfo = enviroment;\n      extinfo.edit_dlg = {\n        type: 'small',\n        //小窗口\n        class_id: this.$data.param.Master_Cls.ID //当前数据类id\n      };\n\n      if (data_attr) {\n        extinfo.edit_dlg.form_control = {\n          //所属的表单控件\n          name: data_attr.Name,\n          //字段属性\n          text: data_attr.DispName,\n          //显示文本\n          group_name: data_attr.GroupName,\n          //属性组\n          type: data_attr.Type,\n          //字段类型\n          readonly: data_attr.ReadOnly,\n          //是否只读\n          button_img: data_attr.button_img,\n          //引用按钮的图标\n          button_tooltip: data_attr.button_tooltip //引用按钮的tooltip\n        };\n      }\n\n      var dataInfo = {\n        edtype: \"0\",\n        eventid: eventid,\n        projectid: '',\n        rclsid: '',\n        robjid: '',\n        userlogin: '',\n        clsid: this.$data.param.Master_Cls.ID,\n        objid: '',\n        attr: JSON.stringify(req),\n        extinfo: JSON.stringify(extinfo),\n        global_attr: JSON.stringify(this.$data.global_attr)\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/ms_classAttr.vue:1955\");\n      this.$store.dispatch('DataObjRunCustomEventInfo', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/ms_classAttr.vue:1957\");\n        if (success.code == '00000') {\n          var data = JSON.parse(success.data);\n          if (data != \"\") {\n            var actions = data.action;\n            __f__(\"log\", actions, \" at pages/modal/ms_classAttr.vue:1963\");\n            if (actions) {\n              for (var i = 0; i < actions.length; i++) {\n                var action = actions[i];\n                var val = action.value;\n                var enviroment = JSON.stringify(enviroment);\n                if (action.action_type == 'open_panel') {\n                  var d = dialog({\n                    title: '<i class=\"ace-icon fa fa-info-circle\"></i> ' + '提示',\n                    content: action.action_type + '此action尚未处理!'\n                  });\n                  d.show();\n                } else if (action.action_type == 'open_select_userdlg') {\n                  var style = val.style;\n                  // style == 'user' ? '选择人员' : style == 'department' ? '选择部门' : style == 'role' ? '选择角色' : ''\n                  var $this = _this7;\n                  var param = {\n                    index: index,\n                    iindex: iindex,\n                    button_callback: button_callback,\n                    req: req,\n                    data_attr: data_attr\n                  };\n                  uni.navigateTo({\n                    url: '../selpsn/index?mulit=false&param=' + JSON.stringify(param),\n                    events: {\n                      AddPer: function AddPer(data, param) {\n                        // console.log(param);\n                        __f__(\"log\", data, \" at pages/modal/ms_classAttr.vue:1993\");\n                        var callback_eventid = param.button_callback.trim();\n                        var info = {\n                          eventid: callback_eventid,\n                          edtype: \"0\",\n                          projectid: '',\n                          rclsid: '',\n                          robjid: '',\n                          userlogin: '',\n                          clsid: $this.$data.param.Master_Cls.ID,\n                          objid: \"\",\n                          attr: param.req,\n                          inputparameter: data\n                        };\n                        $this.DataObjRunCustomEvent(info, param.data_attr);\n                      }\n                    }\n                  });\n                } else if (action.action_type == 'open_data_query_dlg') {} else if (action.action_type == 'open_common_dlg') {\n                  var value = action.value;\n                  var d = dialog({\n                    title: '<i class=\"ace-icon fa fa-info-circle\"></i> ' + '提示',\n                    content: action.action_type + '此action尚未处理!'\n                  });\n                  d.show();\n                } else if (action.action_type == 'open_project_query_dlg') {\n                  //console.log(action.value.select_range);\n                  //console.log(action.value.mulit_select);\n                  var priRel = '-1';\n                  if (action.value.select_range == '全部相关') priRel = '0';else if (action.value.select_range == '我负责的项目') priRel = '1';else if (action.value.select_range == '我创建的') priRel = '2';else if (action.value.select_range == '我参与的' || action.value.select_range == '我参加的') priRel = '3';else if (action.value.select_range == '我关注的') priRel = '4';else if (action.value.select_range == '我下属的项目') priRel = '5';\n                  var $this = _this7;\n                  var param_ = {\n                    index: index,\n                    iindex: iindex,\n                    button_callback: button_callback,\n                    req: req\n                  };\n                  uni.navigateTo({\n                    url: '../selPrj/index?relation=' + priRel + '&param=' + JSON.stringify(param_),\n                    events: {\n                      AddPer: function AddPer(data, param) {\n                        $this.$data.classAttrList[param.index].Attr[param.iindex].Value = data[0].Name;\n                        $this.$data.classAttrList[param.index].Attr[param.iindex].ValID = data[0].ID + ';' + data[0].Name;\n                        var callback_eventid = param.button_callback.trim();\n                        if (callback_eventid) {\n                          var info = {\n                            eventid: callback_eventid,\n                            edtype: \"2\",\n                            projectid: data[0].ID,\n                            rclsid: \"\",\n                            robjid: \"\",\n                            userlogin: \"\",\n                            clsid: $this.$data.param.Master_Cls.ID,\n                            objid: \"\",\n                            attr: param.req\n                          };\n                          $this.DataObjRunCustomEvent(info);\n                        }\n                      }\n                    }\n                  });\n                } else {\n                  var d = dialog({\n                    title: '<i class=\"ace-icon fa fa-info-circle\"></i> ' + '提示',\n                    content: action.action_type + '此action尚未处理!'\n                  });\n                  d.show();\n                }\n              }\n            }\n          } else {\n            uni.showModal({\n              title: \"提示5.2\",\n              content: '调用 before_click_button 脚本返回空,event_id' + eventid,\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n          }\n        } else {\n          uni.showModal({\n            title: \"错误5\",\n            content: success.msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"提示5.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    scan_ini_DataObjRunCustomEvent: function scan_ini_DataObjRunCustomEvent(info) {\n      var _this8 = this;\n      var param = {\n        EditStyle: this.$data.param.Sub_Cls.View_Style.Name,\n        ViewStyle: this.$data.param.Sub_Cls.View_Style.Name,\n        NotTriggerSysEvent: 0,\n        enviroment: {\n          'function': '3000',\n          // 功能点编号\n          cls_id: this.$data.param.Sub_Cls.ID,\n          // 功能点主数据类标识\n          'button': 'top',\n          // top/bottom\n          button_name: '新增',\n          master: {\n            cls_id: this.$data.param.Sub_Cls.ID // button=bottom时 master的cls_id\n            //obj_id: ''  // button=bottom时 master的obj_id\n          }\n        }\n      };\n\n      var inputparameter = '';\n      var global_attr = '';\n      var dataInfo = {\n        edtype: info.edtype,\n        eventid: info.eventid,\n        projectid: info.projectid,\n        rclsid: info.rclsid,\n        robjid: info.robjid,\n        userlogin: info.userlogin,\n        clsid: info.clsid,\n        objid: info.objid,\n        attr: JSON.stringify(info.attr),\n        extinfo: JSON.stringify(param),\n        inputparameter: inputparameter,\n        global_attr: global_attr\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/ms_classAttr.vue:2116\");\n      this.$store.dispatch('DataObjRunCustomEventInfo', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/ms_classAttr.vue:2118\");\n        if (success.code == '00000') {\n          var data = JSON.parse(success.data);\n          var actionlist = data.action;\n          if (actionlist) {\n            for (var j = 0; j < actionlist.length; j++) {\n              var action = actionlist[j];\n              var action_type = action.action_type;\n              var value = action.value;\n              if (action_type == 'set_dlg_attr') {\n                if (value) {\n                  var val = value;\n                  if (typeof value == 'string') {\n                    val = JSON.parse(value);\n                  }\n                  __f__(\"log\", val, \" at pages/modal/ms_classAttr.vue:2133\");\n                  for (var i = 0; i < val.length; i++) {\n                    for (var a = 0; a < _this8.$data.subClassAttrList.length; a++) {\n                      for (var l = 0; l < _this8.$data.subClassAttrList[a].Attr.length; l++) {\n                        var ca = _this8.$data.subClassAttrList[a].Attr[l];\n                        if (val[i].attr == ca.Name) {\n                          if (ca.Type == '字典' || ca.Type == '字典-字符串') {\n                            var dictItemList = [];\n                            for (var d in val[i].choice_list) {\n                              var val = val[i].choice_list[d];\n                              dictItemList.push({\n                                \"CN_S_NAME\": val,\n                                \"Name\": val,\n                                \"label\": val,\n                                \"value\": val\n                              });\n                            }\n                            ca.dictitem = dictItemList;\n                            // attr[j].dictitem = val[i].choice_list;\n                          } else {\n                            // ca.value = val[i].value;\n                          }\n                        }\n                      }\n                    }\n                    var length = 0;\n                    if (!_this8.$data.refdatastore.filter(function (s) {\n                      return val[i].attr == s.attr;\n                    }).length) {\n                      length = 1;\n                      _this8.$data.refdatastore.push(val[i]);\n                    }\n                    if (length == 0) {\n                      for (var j = 0; j < _this8.$data.refdatastore.length; j++) {\n                        if (_this8.$data.refdatastore[j].attr == val[i].attr) {\n                          _this8.$data.refdatastore[j].value = val[i].value;\n                        }\n                      }\n                    }\n                  }\n                }\n              }\n              if (action_type == 'open_select_userdlg') {\n                uni.showModal({\n                  title: \"错误6.2\",\n                  content: \"open_select_userdlg这个action_type还未处理!\",\n                  showCancel: false,\n                  confirmText: \"取消\"\n                });\n              }\n            }\n          }\n        } else {\n          uni.showModal({\n            title: \"错误6\",\n            content: success.msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误6.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    scan_DataObjRunCustomEvent: function scan_DataObjRunCustomEvent(info, data_attr) {\n      var _this9 = this;\n      var $this = this;\n      var enviroment = {\n        'function': '3000',\n        // 功能点编号\n        cls_id: 'MBOX',\n        //this.$data.param.Sub_Cls.ID,     // 功能点从数据类标识\n        'button': 'top',\n        // top/bottom\n        button_name: '新增',\n        master: {\n          cls_id: 'MBOX',\n          //this.$data.param.Sub_Cls.ID, // button=bottom时 master的cls_id\n          attr: info.mast_attr //主数据类属性\n          //obj_id: ''  // button=bottom时 master的obj_id\n        }\n      };\n\n      enviroment.edit_dlg = {\n        type: 'small',\n        //小窗口\n        class_id: 'MBOX' //this.$data.param.Sub_Cls.ID,//当前数据类id\n      };\n\n      if (data_attr) {\n        enviroment.edit_dlg.form_control = {\n          //所属的表单控件\n          name: data_attr.Name,\n          //字段属性\n          text: data_attr.DispName,\n          //显示文本\n          group_name: data_attr.GroupName,\n          //属性组\n          type: data_attr.Type,\n          //字段类型\n          readonly: data_attr.ReadOnly,\n          //是否只读\n          button_img: data_attr.button_img,\n          //引用按钮的图标\n          button_tooltip: data_attr.button_tooltip //引用按钮的tooltip\n        };\n      }\n\n      var dataInfo = {\n        edtype: info.edtype,\n        eventid: info.eventid,\n        projectid: info.projectid.replace('{', '').replace('}', ''),\n        rclsid: info.rclsid,\n        robjid: info.robjid,\n        userlogin: info.userlogin,\n        clsid: info.clsid,\n        objid: info.objid,\n        attr: JSON.stringify(info.attr),\n        extinfo: JSON.stringify(enviroment),\n        inputparameter: JSON.stringify(info.inputParamter),\n        global_attr: JSON.stringify(this.$data.global_attr)\n      };\n      __f__(\"log\", dataInfo, \" at pages/modal/ms_classAttr.vue:2220\");\n      this.$store.dispatch('DataObjRunCustomEventInfo', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/ms_classAttr.vue:2222\");\n        if (success.code == '00000') {\n          var data = JSON.parse(success.data);\n          var actionlist = data.action;\n          if (actionlist) {\n            __f__(\"log\", actionlist, \" at pages/modal/ms_classAttr.vue:2228\");\n            for (var ii = 0; ii < actionlist.length; ii++) {\n              var action = actionlist[ii];\n              if (action.action_type == 'set_dlg_attr') {\n                var result = action.value;\n                for (var i = 0; i < result.length; i++) {\n                  if (result[i].choice_list) {\n                    for (var s = 0; s < $this.$data.subPanelList.length; s++) {\n                      for (var c = 0; c < $this.$data.subPanelList[s].subClassAttrList.length; c++) {\n                        var attr = $this.$data.subPanelList[s].subClassAttrList[c].Attr;\n                        for (var j = 0; j < attr.length; j++) {\n                          if (attr[j].Name == result[i].attr) {\n                            if (attr[j].Type == '字典' || attr[j].Type == '字典-字符串') {\n                              var dictItemList = [];\n                              for (var d in result[i].choice_list) {\n                                var val = result[i].choice_list[d];\n                                dictItemList.push({\n                                  \"CN_S_NAME\": val,\n                                  \"Name\": val,\n                                  \"label\": val,\n                                  \"value\": val\n                                });\n                              }\n                              attr[j].dictitem = dictItemList;\n                              // attr[j].dictitem = result[i].choice_list;\n                            }\n                          }\n                        }\n                      }\n                    }\n                  }\n\n                  for (var s = 0; s < $this.$data.subPanelList.length; s++) {\n                    for (var c = 0; c < $this.$data.subPanelList[s].subClassAttrList.length; c++) {\n                      var attr = $this.$data.subPanelList[s].subClassAttrList[c].Attr;\n                      for (var j = 0; j < attr.length; j++) {\n                        __f__(\"log\", attr[j].Name + '==' + result[i].attr, \" at pages/modal/ms_classAttr.vue:2258\");\n                        if (attr[j].Name == result[i].attr) {\n                          attr[j].Value = result[i].value;\n                        }\n                      }\n                    }\n                  }\n                  var length = 0;\n                  if (!$this.$data.refdatastore.filter(function (s) {\n                    return result[i].attr == s.attr;\n                  }).length) {\n                    length = 1;\n                    $this.$data.refdatastore.push(result[i]);\n                  }\n                  if (length == 0) {\n                    for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                      if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                        $this.$data.refdatastore[j].value = result[i].value;\n                      }\n                    }\n                  }\n                }\n              } else if (action.action_type == 'set_global_attr') {\n                $this.$actiontr = action.value || [];\n              } else if (action.action_type == 'add_subcls_panel') {\n                //主从数据类扫码查询数据\n                var result = action.value;\n                var list_1 = JSON.parse(JSON.stringify(_this9.$data.subClassAttrList));\n                var scanCodeVal = $this.$data.scanCodeVal;\n                if (info.inputParamter[0].attr == \"mast_input_3037\")\n                  //判断是主数据类扫码查询数据\n                  scanCodeVal = \"mast_input_3037-\" + ii;\n                $this.$data.subPanelList.push({\n                  scanCodeVal: scanCodeVal,\n                  subClassAttr: list_1\n                });\n                for (var i = 0; i < result.length; i++) {\n                  for (var s = 0; s < $this.$data.subPanelList.length; s++) {\n                    if ($this.$data.subPanelList[s].scanCodeVal == scanCodeVal) {\n                      if (result[i].attr == \"S_ID\") $this.$data.subPanelList[s].ObjID = result[i].value;\n                      var _subClassAttr = $this.$data.subPanelList[s].subClassAttr;\n                      for (var c = 0; c < _subClassAttr.length; c++) {\n                        var attr = _subClassAttr[c].Attr;\n                        for (var j = 0; j < attr.length; j++) {\n                          // console.log(attr[j].Name+'=='+result[i].attr);\n                          if (attr[j].Name == result[i].attr) {\n                            attr[j].Value = result[i].value;\n                          }\n                        }\n                      }\n\n                      // $this.$data.subPanelList[s].subClassAttr=list_1;\n                    }\n                  }\n\n                  var length = 0;\n                  if (!$this.$data.refdatastore.filter(function (s) {\n                    return result[i].attr == s.attr;\n                  }).length) {\n                    length = 1;\n                    $this.$data.refdatastore.push(result[i]);\n                  }\n                  if (length == 0) {\n                    for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                      if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                        $this.$data.refdatastore[j].value = result[i].value;\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n          if (data.result) {\n            var _list_ = JSON.parse(JSON.stringify(_this9.$data.subClassAttrList));\n            var scanCodeVal = $this.$data.scanCodeVal;\n            if (info.inputParamter[0].attr == \"mast_input_3037\") scanCodeVal = \"mast_input_3037-\" + ii;\n            $this.$data.subPanelList.push({\n              scanCodeVal: scanCodeVal,\n              subClassAttr: _list_\n            });\n            var result = data.result;\n            for (var i = 0; i < result.length; i++) {\n              for (var s = 0; s < $this.$data.subPanelList.length; s++) {\n                if ($this.$data.subPanelList[s].scanCodeVal == scanCodeVal) {\n                  if (result[i].attr == \"S_ID\") $this.$data.subPanelList[s].ObjID = result[i].value;\n                  var _subClassAttr = $this.$data.subPanelList[s].subClassAttr;\n                  for (var c = 0; c < _subClassAttr.length; c++) {\n                    var attr = _subClassAttr[c].Attr;\n                    for (var j = 0; j < attr.length; j++) {\n                      // console.log(attr[j].Name+'=='+result[i].attr);\n                      if (attr[j].Name == result[i].attr) {\n                        attr[j].Value = result[i].value;\n                      }\n                    }\n                  }\n                }\n              }\n              var length = 0;\n              if (!$this.$data.refdatastore.filter(function (s) {\n                return result[i].attr == s.attr;\n              }).length) {\n                length = 1;\n                $this.$data.refdatastore.push(result[i]);\n              }\n              if (length == 0) {\n                for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                  if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                    $this.$data.refdatastore[j].value = result[i].value;\n                  }\n                }\n              }\n            }\n          }\n        } else {\n          uni.showModal({\n            title: \"错误7\",\n            content: success.msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.showModal({\n          title: \"错误7.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    },\n    scan_OKDataObjRunCustomEvent: function scan_OKDataObjRunCustomEvent(eventID) {\n      uni.showLoading({\n        title: \"加载中...\"\n      });\n      var $this = this;\n      var req = [];\n      var attrlist = $this.$data.classAttrList;\n      for (var i = 0; i < attrlist.length; i++) {\n        var attr = attrlist[i].Attr;\n        for (var j = 0; j < attr.length; j++) {\n          var ar = attr[j];\n          if (ar.Value == '请选择' || ar.Value == '——请选择——') ar.Value = '';\n          if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n          if (ar.Type == '引用人员' || ar.Type == '引用项目') req.push({\n            attr: ar.Name,\n            value: ar.ValID ? ar.ValID : ''\n          });else if (ar.Type == '布尔值') req.push({\n            attr: ar.Name,\n            value: ar.Value ? '1' : '0'\n          });else if (ar.Type == '字典' || ar.Type == '字典-字符串') {\n            if (ar.select == true) {\n              //判断下拉是否多选\n              var valStr = \"\";\n              for (var v in ar.Value) {\n                if (valStr) valStr += \";\";\n                valStr += ar.Value[v];\n              }\n              req.push({\n                attr: ar.Name,\n                value: valStr\n              });\n            } else req.push({\n              attr: ar.Name,\n              value: ar.Value\n            });\n          } else req.push({\n            attr: ar.Name,\n            value: ar.Value ? ar.Value : ''\n          });\n          if ((ar.NotEmpty == '1' || ar.notempty == true) && !ar.Value) {\n            // if(ar.notEmpty=='1'){\n            uni.hideLoading();\n            // uni.showToast({title:ar.DispName+'不能为空!',icon:\"success\",duration:3000});\n            uni.showModal({\n              title: \"提示\",\n              content: ar.DispName + '不能为空!',\n              showCancel: false,\n              confirmText: \"取消\"\n            });\n            return;\n          }\n        }\n      }\n      var objects = [];\n      var subPanelList = $this.$data.subPanelList;\n      for (var s = 0; s < subPanelList.length; s++) {\n        var sub_req = [];\n        for (var i = 0; i < subPanelList[s].subClassAttr.length; i++) {\n          var attr = subPanelList[s].subClassAttr[i].Attr;\n          for (var j = 0; j < attr.length; j++) {\n            var ar = attr[j];\n            if (ar.Value == '请选择' || ar.Value == '——请选择——') ar.Value = '';\n            if (ar.Type == '引用对象(多个)') if (ar.Value == '请') ar.Value = '';\n            if (ar.Type == '引用人员' || ar.Type == '引用项目') sub_req.push({\n              attr: ar.Name,\n              value: ar.ValID ? ar.ValID : ''\n            });else if (ar.Type == '布尔值') sub_req.push({\n              attr: ar.Name,\n              value: ar.Value ? '1' : '0'\n            });else if (ar.Type == '字典' || ar.Type == '字典-字符串') {\n              if (ar.select == true) {\n                //判断下拉是否多选\n                var valStr = \"\";\n                for (var v in ar.Value) {\n                  if (valStr) valStr += \";\";\n                  valStr += ar.Value[v];\n                }\n                sub_req.push({\n                  attr: ar.Name,\n                  value: valStr\n                });\n              } else sub_req.push({\n                attr: ar.Name,\n                value: ar.Value\n              });\n            } else sub_req.push({\n              attr: ar.Name,\n              value: ar.Value ? ar.Value : ''\n            });\n            if ((ar.NotEmpty == '1' || ar.notempty == true) && !ar.Value) {\n              // if(ar.notEmpty=='1'){\n              uni.hideLoading();\n              // uni.showToast({title:ar.DispName+'不能为空!',icon:\"success\",duration:3000});\n              uni.showModal({\n                title: \"提示\",\n                content: ar.DispName + '不能为空!',\n                showCancel: false,\n                confirmText: \"取消\"\n              });\n              return;\n            }\n          }\n        }\n        objects.push({\n          obj_id: subPanelList[s].scanCodeVal,\n          obj_attrs: sub_req\n        });\n      }\n      var dataJson = {\n        master_cls: {\n          cls_name: 'MBOX',\n          //$this.$data.param.Master_Cls.Name,\n          obj_attrs: req\n        },\n        input_3037: $this.$data.scanCodeVal,\n        //扫码内容\n        op_type: $this.$data.param.OperationType,\n        //作业类型定义\n        sub_cls: {\n          cls_name: 'MBOX',\n          //$this.$data.param.Sub_Cls.Name,\n          objects: objects\n        }\n      };\n      __f__(\"log\", JSON.stringify(dataJson), \" at pages/modal/ms_classAttr.vue:2480\");\n      var dataInfo = {\n        edtype: \"7\",\n        eventid: eventID,\n        projectid: '',\n        rclsid: '',\n        robjid: '',\n        userlogin: '',\n        clsid: 'MBOX',\n        objid: '',\n        attr: JSON.stringify([]),\n        extinfo: JSON.stringify([]),\n        global_attr: JSON.stringify($this.$data.global_attr),\n        dataJson: JSON.stringify(dataJson)\n      };\n      __f__(\"log\", JSON.stringify(dataInfo), \" at pages/modal/ms_classAttr.vue:2486\");\n      __f__(\"log\", dataInfo, \" at pages/modal/ms_classAttr.vue:2487\");\n      this.$store.dispatch('DataObjRunCustomEventInfo', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/ms_classAttr.vue:2489\");\n        uni.hideLoading();\n        if (success.code == '00000') {\n          var data = JSON.parse(success.data);\n          var result = data.result;\n          for (var i = 0; i < result.length; i++) {\n            // self.class_attr_ele.find('.attr_field[data-field=\"' + result[i].attr + '\"]').val(result[i].value).data('val', result[i].value);\n            var length = 0;\n            if (!$this.$data.refdatastore.filter(function (s) {\n              return result[i].attr == s.attr;\n            }).length) {\n              length = 1;\n              $this.$data.refdatastore.push(result[i]);\n            }\n            if (length == 0) {\n              for (var j = 0; j < $this.$data.refdatastore.length; j++) {\n                if ($this.$data.refdatastore[j].attr == result[i].attr) {\n                  $this.$data.refdatastore[j].value = result[i].value;\n                }\n              }\n            }\n          }\n          if (eventID != $this.$data.param.After_OK_Event.ID) $this.scan_OKDataObjRunCustomEvent($this.$data.param.After_OK_Event.ID);else {\n            //刷新\n            uni.redirectTo({\n              url: '../modal/ms_classAttr?param=' + JSON.stringify($this.$data.param) + \"&titlename=\" + $this.$data.title\n            });\n          }\n        } else {\n          uni.showModal({\n            title: \"错误8\",\n            content: success.msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n        }\n      }).catch(function (ex) {\n        // console.log(ex);\n        uni.hideLoading();\n        uni.showModal({\n          title: \"错误8.1\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n      });\n    }\n  }\n};\nexports.default = _default;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 18)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vcGFnZXMvbW9kYWwvbXNfY2xhc3NBdHRyLnZ1ZSJdLCJuYW1lcyI6WyJjb21wb25lbnRzIiwicGlja2VyQWRkcmVzcyIsImRhdGEiLCJ0aXRsZSIsInBhcmFtIiwiY2xhc3NBdHRyTGlzdCIsImNsYXNzR3JpZFN0eWxlIiwiZWRpdF9pbml0YWxfZXZlbnQiLCJlZGl0X29rX2V2ZW50IiwiZWRpdF9zZWxlY3RfY29tcG9zZV9ldmVudCIsImVkaXRfY29tcG9zZV9jbHNfaWQiLCJnbG9iYWxfYXR0ciIsInJlZmRhdGFzdG9yZSIsInNjYW5Db2RlVmFsIiwic3ViQ2xhc3NBdHRyTGlzdCIsInN1YlBhbmVsTGlzdCIsInN1YkNsYXNzR3JpZFN0eWxlIiwib25Mb2FkIiwidW5pIiwiY29udGVudCIsInNob3dDYW5jZWwiLCJjb25maXJtVGV4dCIsImNsYXNzX2lkIiwiJHRoaXMiLCJtZXRob2RzIiwiY2FuY2VsIiwiZGVsdGEiLCJwYW5lbF9kZWwiLCJjbHNJZCIsIm9iaklkIiwiY2xhc3NHcmlkU3R5bGVJbmZvIiwiZ3JpZHN0eWxlSW5mbyIsIm5hbWUiLCJ0eXBlIiwic3VjY2VzcyIsIm9udGFwIiwiZ2V0QXBwIiwicmVxIiwiYXR0ciIsInZhbHVlIiwiZXZlbnRpZCIsImVkdHlwZSIsInByb2plY3RpZCIsInJjbHNpZCIsInJvYmppZCIsInVzZXJsb2dpbiIsImNsc2lkIiwib2JqaWQiLCJtYXN0X2F0dHIiLCJpbnB1dFBhcmFtdGVyIiwic2Nhbl9vbnRhcCIsImlzZmxhZyIsIm1hc3RfcmVxIiwib25hcnJvdyIsIm9uZGF0ZVRpbWUiLCJvbmNoYW5nZSIsInZhbCIsIm9uY2hhbmdlMiIsImlpbmRleCIsImRpbmRleCIsImluZGV4Iiwib25ldmVudCIsIm9uY2hlY2siLCJpbnB1dFZhbExpc3RJc0RlbCIsImFkZHJlc3NjaGFuZ2UiLCJjbGFzc0F0dHJfZXh0QnV0dG9uIiwic2Nhbl9jbGFzc0F0dHJfZXh0QnV0dG9uIiwiY2xhc3NBdHRyX0FkZFBlciIsInVybCIsImV2ZW50cyIsIkFkZFBlciIsImNsYXNzQXR0cl9BZGRSZWYiLCJjbGFzc0F0dHJfQWRkUHJqIiwic2F2YSIsImFkZCIsInZhbFN0ciIsImNsc19pZCIsImJ1dHRvbl9uYW1lIiwibWFzdGVyIiwiZGF0YV9vYmpfaWQiLCJtYXN0ZXJjbHNpZCIsInVwZmlsZSIsInBvc3RfZGF0YSIsImNvbXBvc2UiLCJleHRpbmZvIiwibm90X3RyaWdnZXJfc3lzX2V2ZW50IiwiaWNvbiIsImR1cmF0aW9uIiwiY2xhc3NfYXR0cl9pbml0IiwiY2EiLCJ5ZWFyIiwibW9udGgiLCJkYXkiLCJyZWxDbHNMaXN0IiwiaWQiLCJuZXdhdHRybGlzdCIsIkJrQ29sb3IiLCJIYXNBY2UiLCJJbWdGb250U3R5bGUiLCJOYW1lIiwiT3JkZXIiLCJPcGVuIiwiQXR0ciIsImNvbnRyb2xfc3R5bGUiLCJ0aXRsZV9wX3dkaXRoIiwiRm9udCIsIkJrX0NvbG9yIiwiVGV4dF9Db2xvciIsInN1YkNsYXNzX2F0dHJfaW5pdCIsImluaV9EYXRhT2JqUnVuQ3VzdG9tRXZlbnQiLCJFZGl0U3R5bGUiLCJWaWV3U3R5bGUiLCJOb3RUcmlnZ2VyU3lzRXZlbnQiLCJlbnZpcm9tZW50IiwiaW5wdXRwYXJhbWV0ZXIiLCJkaWN0SXRlbUxpc3QiLCJsZW5ndGgiLCJEYXRhT2JqUnVuQ3VzdG9tRXZlbnQiLCJ0ZXh0IiwiZ3JvdXBfbmFtZSIsInJlYWRvbmx5IiwiYnV0dG9uX2ltZyIsImJ1dHRvbl90b29sdGlwIiwiT0tEYXRhT2JqUnVuQ3VzdG9tRXZlbnQiLCJEYXRhT2JqUnVuQ3VzdG9tRXZlbnRfUmV0dXJuIiwiZCIsImJ1dHRvbl9jYWxsYmFjayIsImRhdGFfYXR0ciIsInByaVJlbCIsInNjYW5faW5pX0RhdGFPYmpSdW5DdXN0b21FdmVudCIsInNjYW5fRGF0YU9ialJ1bkN1c3RvbUV2ZW50Iiwic3ViQ2xhc3NBdHRyIiwic2Nhbl9PS0RhdGFPYmpSdW5DdXN0b21FdmVudCIsInN1Yl9yZXEiLCJvYmplY3RzIiwib2JqX2lkIiwib2JqX2F0dHJzIiwibWFzdGVyX2NscyIsImNsc19uYW1lIiwiaW5wdXRfMzAzNyIsIm9wX3R5cGUiLCJzdWJfY2xzIiwiZGF0YUpzb24iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQWdsQkE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7ZUFDQTtFQUNBQTtJQUNBQztFQUNBO0VBQ0FDO0lBQ0E7TUFDQUM7TUFDQUM7TUFDQUM7TUFDQUM7TUFDQUM7TUFBQTtNQUNBQztNQUFBO01BQ0FDO01BQUE7TUFDQUM7TUFDQUM7TUFDQUM7TUFBQTtNQUNBQztNQUNBQztNQUNBQztNQUNBQztJQUNBO0VBQ0E7RUFDQUM7SUFDQTtJQUNBQztNQUFBZjtJQUFBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7TUFDQWU7UUFBQWY7UUFBQWdCO1FBQUFDO1FBQUFDO01BQUE7TUFDQTtJQUNBO0lBQ0E7TUFDQUg7UUFBQWY7UUFBQWdCO1FBQUFDO1FBQUFDO01BQUE7TUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7TUFDQUM7SUFDQTtJQUNBO0lBQ0FDO0lBQ0E7SUFDQTtNQUNBQTtNQUNBQTtJQUNBO01BQ0FBO1FBQ0E7UUFDQTtVQUNBQTtVQUVBQTtRQUNBO1VBQ0FMO1lBQUFmO1lBQUFnQjtZQUFBQztZQUFBQztVQUFBO1FBQ0E7TUFDQTtRQUNBO1FBQ0FIO1VBQUFmO1VBQUFnQjtVQUFBQztVQUFBQztRQUFBO01BQ0E7SUFDQTs7SUFFQTtJQUNBO01BQ0FDO0lBQ0E7SUFDQUM7SUFDQTtNQUNBQTtNQUNBQTtJQUNBO01BQ0FBO1FBQ0E7UUFDQTtVQUNBQTtVQUVBQTtRQUNBO1VBQ0FMO1lBQUFmO1lBQUFnQjtZQUFBQztZQUFBQztVQUFBO1FBQ0E7TUFDQTtRQUNBO1FBQ0FIO1VBQUFmO1VBQUFnQjtVQUFBQztVQUFBQztRQUFBO01BQ0E7SUFDQTtFQUNBO0VBQ0FHO0lBQ0FDO01BQ0FQO1FBQ0FRO01BQ0E7SUFDQTtJQUNBQztNQUNBO01BQ0E7UUFDQTtNQUNBO01BQ0EsMkNBQ0EsOENBQ0E7UUFDQTtVQUNBQztVQUNBQztRQUNBO1FBQ0E7UUFDQTtRQUNBWDtVQUFBZjtRQUFBO1FBQ0E7VUFDQTtVQUNBZTtVQUNBO1lBQ0FLO1lBQ0FMO2NBQUFmO2NBQUFnQjtjQUFBQztjQUFBQztZQUFBO1VBQ0E7WUFDQUg7Y0FBQWY7Y0FBQWdCO2NBQUFDO2NBQUFDO1lBQUE7VUFDQTtRQUNBO1VBQ0E7VUFDQUg7VUFDQUE7WUFBQWY7WUFBQWdCO1lBQUFDO1lBQUFDO1VBQUE7UUFDQTtNQUNBO0lBQ0E7SUFDQVM7TUFBQTtNQUFBO1FBQUE7UUFBQTtVQUFBO1lBQUE7Y0FBQTtnQkFDQVA7Z0JBQ0FRO2tCQUNBVDtrQkFDQVU7a0JBQ0FDO2dCQUNBO2dCQUNBVjtnQkFDQTtnQkFD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Z0JBQUFDO2NBQUE7Y0FDQTtZQUNBO1VBQ0E7UUFDQTtRQUNBaUg7VUFDQUM7VUFDQUM7UUFDQTtNQUNBO01BQ0E7UUFDQUM7VUFDQUM7VUFBQTtVQUNBRjtRQUNBO1FBQ0FHO1FBQUE7UUFDQUM7UUFBQTtRQUNBQztVQUNBSDtVQUFBO1VBQ0FKO1FBQ0E7TUFDQTtNQUNBO01BQ0E7UUFDQTdGO1FBQUFEO1FBQUFFO1FBQUFDO1FBQUFDO1FBQUFDO1FBQ0FDO1FBQUFDO1FBQUFUO1FBQUE4QztRQUNBekU7UUFBQW1JO01BQ0E7TUFDQTtNQUNBO01BQ0E7UUFDQTtRQUNBNUg7UUFDQTtVQUNBO1VBQ0E7VUFDQTtZQUNBO1lBQ0E7WUFDQTtjQUNBO1lBQ0E7Y0FDQWtHO2NBQ0E3RjtZQUNBO1lBQ0E7Y0FDQTtnQkFDQTtrQkFDQUE7Z0JBQ0E7Y0FDQTtZQUNBO1VBQ0E7VUFFQSxvREFDQUEsNkVBQ0E7WUFDQTtZQUNBTDtjQUNBa0Q7WUFDQTtVQUNBO1FBQ0E7VUFDQWxEO1lBQUFmO1lBQUFnQjtZQUFBQztZQUFBQztVQUFBO1FBQ0E7TUFDQTtRQUNBO1FBQ0FIO1FBQ0FBO1VBQUFmO1VBQUFnQjtVQUFBQztVQUFBQztRQUFBO01BQ0E7SUFDQTtFQUdBO0FBQ0E7QUFBQSwyQiIsImZpbGUiOiI4MC5qcyIsInNvdXJjZXNDb250ZW50IjpbIjxzdHlsZT5cclxuXHQuY2xhc3NfYXR0cl90aXRsZSB7XHJcblx0XHRmb250LXNpemU6IDQ0cnB4O1xyXG5cdCAgICBwYWRkaW5nLWJvdHRvbTogMjJycHg7XHJcblx0ICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuXHR9XHJcblx0LmNsYXNzX2F0dHJfdGl0bGUgLnRpdGxlX2xpbmUge1xyXG5cdCAgICBib3JkZXItYm90dG9tOiAycnB4IHNvbGlkICNhYWE7XHJcblx0ICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuXHQgICAgYm90dG9tOiAtNTBycHg7XHJcblx0ICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAyOTBycHgpO1xyXG5cdCAgICBtYXJnaW4tbGVmdDogMTAwcHg7XHJcblx0fVxyXG5cdC5jbGFzc19hdHRyX3RpdGxlIC50aXRsZV9pY29uIHtcclxuXHQgICAgYm9yZGVyLXJhZGl1czogNTAlO1xyXG5cdCAgICB3aWR0aDogMTAwcnB4O1xyXG5cdFx0bGluZS1oZWlnaHQ6IDY0cnB4O1xyXG5cdCAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0ICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XHJcblx0ICAgIHBhZGRpbmctdG9wOiAxMHJweDsgICAgXHJcblx0XHRwYWRkaW5nLWxlZnQ6IDIwcnB4O1xyXG5cdCAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcblx0ICAgIGNvbG9yOiAjZmZmO1xyXG5cdH1cclxuXHQuY2xhc3NfYXR0cl90aXRsZSBpIHtcclxuXHQgICAgY29sb3I6ICMyYzZhYTAhaW1wb3J0YW50O1xyXG5cdH1cclxuXHQuY2xhc3NfYXR0cl90aXRsZSAudGl0bGVfaWNvbiBpIHtcclxuXHQgICAgZm9udC1zaXplOiA4MHJweDtcclxuXHR9XHJcblx0LmNsYXNzX2F0dHJfdGl0bGUgLnRpdGxlIHtcclxuXHQgICAgcGFkZGluZy1yaWdodDogMjJycHg7XHJcblx0ICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuXHQgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcclxuXHQgICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG5cdCAgICBib3R0b206IC04cnB4O1xyXG5cdH1cclxuXHQuY2xhc3NfYXR0cl90aXRsZSAuYXJyb3cge1xyXG5cdCAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcblx0XHR0b3A6IDZycHg7XHJcblx0XHRyaWdodDogMzBycHg7XHJcblx0XHRmb250LXNpemU6IDYwcnB4O1xyXG5cdH1cclxuXHRpbnB1dDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XHJcblx0XHRmb250LXNpemU6IDEycnB4O1xyXG5cdH1cclxuXHR0ZXh0YXJlYXtcclxuXHRcdHdpZHRoOiA5OCU7XHJcblx0XHRib3JkZXI6IDFweCBzb2xpZCAjZDVkNWQ1O1xyXG5cdFx0cGFkZGluZzogMTBycHggOHJweCAxMnJweDtcclxuXHRcdGJhY2tncm91bmQ6ICNGRkY7XHJcblx0XHRib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XHJcblx0XHRmb250LXNpemU6IDM0cnB4O1xyXG5cdFx0Zm9udC1mYW1pbHk6IGluaGVyaXQ7XHJcblx0XHRib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XHJcblx0XHR0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjFzO1xyXG5cdFx0Y29sb3I6ICMwNDZkYjM7XHJcblx0XHRtYXJnaW4tdG9wOiA0cHg7XHJcblx0fVxyXG5cdGlucHV0e1xyXG5cdFx0Ym9yZGVyOiAxcHggc29saWQgI2Q1ZDVkNTtcclxuXHRcdHdpZHRoOiA5OCU7XHJcblx0XHRoZWlnaHQ6IDUycnB4O1xyXG5cdFx0YmFja2dyb3VuZDogI0ZGRjtcclxuXHRcdGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcclxuXHRcdGNvbG9yOiAjMDQ2ZGIzO1xyXG5cdFx0cGFkZGluZzogMTBycHggOHJweCAxMnJweDtcclxuXHRcdGZvbnQtc2l6ZTogMzRycHg7XHJcblx0XHRmb250LWZhbWlseTogaW5oZXJpdDtcclxuXHRcdGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcclxuXHRcdHRyYW5zaXRpb24tZHVyYXRpb246IDAuMXM7XHJcblx0XHRtYXJnaW4tdG9wOiA0cnB4O1xyXG5cdH1cclxuXHQuc2VsZWN0eyAgICBcclxuXHRcdHdpZHRoOiAyMHB4O1xyXG5cdFx0cG9zaXRpb246IGFic29sdXRlO1xyXG5cdFx0b3BhY2l0eTogMDtcclxuXHR9XHJcblx0LmNsYXNzX2F0dHJfYm9keSAuZm9ybS1ncm91cCB7XHJcblx0XHRtYXJnaW46IDIwcnB4IDMwcnB4O1xyXG5cdCAgICAvKiBtYXJnaW4tbGVmdDogLTEycHg7XHJcblx0ICAgIG1hcmdpbi1yaWdodDogLTEycHg7ICovXHJcblx0fVxyXG5cdC5zdWJjbGFzc19hdHRyX2JvZHkgLmZvcm0tZ3JvdXAge1xyXG5cdFx0bWFyZ2luOiAyMHJweCAxMHJweDtcclxuXHQgICAgLyogbWFyZ2luLWxlZnQ6IC0xMnB4O1xyXG5cdCAgICBtYXJnaW4tcmlnaHQ6IC0xMnB4OyAqL1xyXG5cdH1cclxuXHQuZm9ybS1ncm91cCA+IGxhYmVsW2NsYXNzKj1cImNvbC1cIl0ge1xyXG5cdCAgICBtYXJnaW4tYm90dG9tOiA4cnB4O1xyXG5cdFx0Zm9udC1zaXplOiAzMnJweDtcclxuXHR9XHJcblx0LmZvcm0tZ3JvdXAgbGFiZWwge1xyXG5cdCAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG5cdCAgICBsaW5lLWhlaWdodDogNjBycHg7XHJcblx0fVxyXG5cdC5uby1wYWRkaW5nLXJpZ2h0IHtcclxuXHQgICAgcGFkZGluZy1yaWdodDogMCAhaW1wb3J0YW50O1xyXG5cdH1cclxuXHQuY29sLXhzLTEyIHtcclxuXHQgICAgd2lkdGg6IDEwMCU7XHJcblx0fVxyXG5cdC50eF90aXRsZXtcclxuXHRcdGZvbnQtc2l6ZTogMzJycHg7XHJcblx0fVxyXG5cdC50eF90aXRsZTJ7XHJcblx0XHRmb250LXNpemU6IDMycnB4O1xyXG5cdFx0dGV4dC1hbGlnbjogcmlnaHQ7XHJcblx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0XHR2ZXJ0aWNhbC1hbGlnbjogLTJweDtcclxuXHR9XHJcblx0LnRleHQtcmlnaHR7XHJcblx0XHRtYXJnaW4tcmlnaHQ6IDIwcnB4O1xyXG5cdFx0bWFyZ2luLXRvcDogLTZycHg7XHJcblx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0XHRmbG9hdDogcmlnaHQ7XHJcblx0XHRmb250LXNpemU6IDQ0cnB4O1xyXG5cdH1cclxuXHQudGV4dC1yaWdodDIge1xyXG5cdFx0bWFyZ2luOiAwO1xyXG5cdFx0dmVydGljYWwtYWxpZ246IC00cHg7XHJcblx0XHRtYXJnaW4tbGVmdDogOXB4O1xyXG5cdFx0ZmxvYXQ6IG5vbmU7XHJcblx0XHRmb250LXNpemU6IDQ0cnB4O1xyXG5cdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG5cdH1cclxuXHQuc2VjdGlvbl9pcHV0e1xyXG5cdFx0Ym9yZGVyOiAxcHggc29saWQgI2Q1ZDVkNTtcclxuXHRcdHdpZHRoOiA5OCU7XHJcblx0XHRoZWlnaHQ6IDYycnB4O1xyXG5cdFx0YmFja2dyb3VuZDogI0ZGRjtcclxuXHRcdGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcclxuXHRcdGNvbG9yOiAjMDQ2ZGIzO1xyXG5cdFx0cGFkZGluZzogMTBycHggOHJweCAxMHJweDtcclxuXHRcdGZvbnQtc2l6ZTogMzRycHg7XHJcblx0XHRmb250LWZhbWlseTogaW5oZXJpdDtcclxuXHRcdGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcclxuXHRcdHRyYW5zaXRpb24tZHVyYXRpb246IDAuMXM7XHJcblx0fVxyXG5cdC5kYXRlX2lwdXR7XHJcblx0XHRib3JkZXI6IDFweCBzb2xpZCAjZDVkNWQ1O1xyXG5cdFx0Lyogd2lkdGg6IDk4JTsgKi9cclxuXHRcdGhlaWdodDogNjJycHg7XHJcblx0XHRiYWNrZ3JvdW5kOiAjRkZGO1xyXG5cdFx0Ym9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xyXG5cdFx0Y29sb3I6ICMwNDZkYjM7XHJcblx0XHRwYWRkaW5nOiAxMHJweCA4cnB4IDRycHg7XHJcblx0XHRmb250LXNpemU6IDM0cnB4O1xyXG5cdFx0Zm9udC1mYW1pbHk6IGluaGVyaXQ7XHJcblx0XHRib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XHJcblx0XHR0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjFzO1xyXG5cdH1cclxuXHRidXR0b24uYnRuX2FkZCB7XHJcblx0XHR3aWR0aDo0OS41JTtcclxuXHRcdG1hcmdpbi10b3A6IDUwcnB4O1xyXG5cdFx0cGFkZGluZzogMjBycHg7XHJcblx0XHRsaW5lLWhlaWdodDogMS41O1xyXG5cdFx0YmFja2dyb3VuZDogIzI3QTZFMTtcclxuXHRcdGJvcmRlcjogbm9uZTtcclxuXHRcdGNvbG9yOiAjZmZmO1xyXG5cdCAgICBmb250LXNpemU6IDM4cnB4O1xyXG5cdFx0Zm9udC13ZWlnaHQ6IGJvbGQ7XHJcblx0XHRmbG9hdDogcmlnaHQ7XHJcblx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0fVxyXG5cdGJ1dHRvbi5idG5fY2FuY2VsIHtcclxuXHRcdHdpZHRoOjQ5LjUlO1xyXG5cdFx0bWFyZ2luLXRvcDogNTBycHg7XHJcblx0XHRwYWRkaW5nOiAyMHJweDtcclxuXHRcdGxpbmUtaGVpZ2h0OiAxLjU7XHJcblx0XHRiYWNrZ3JvdW5kOiAjMjdBNkUxO1xyXG5cdFx0Ym9yZGVyOiBub25lO1xyXG5cdFx0Y29sb3I6ICNmZmY7XHJcblx0ICAgIGZvbnQtc2l6ZTogMzhycHg7XHJcblx0XHRmb250LXdlaWdodDogYm9sZDtcclxuXHRcdGZsb2F0OiBsZWZ0O1xyXG5cdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG5cdH1cclxuXHQuaV90aXNoaXtcclxuXHRcdGNvbG9yOiByZWQ7XHJcblx0XHR2ZXJ0aWNhbC1hbGlnbjogc3ViO1xyXG5cdFx0Zm9udC1zdHlsZTogaW5pdGlhbDtcclxuXHRcdG1hcmdpbi1sZWZ0OiAyMHJweDtcclxuXHRcdGZvbnQtc2l6ZTogMTdweDtcclxuXHR9XHJcblx0LmF0dHJfZmllbGR7XHJcblx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0XHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG5cdFx0bWFyZ2luLWxlZnQ6IDhweDtcclxuXHRcdC8qIHdpZHRoOiA3MSU7ICovXHJcblx0fVxyXG5cdFxyXG5cdC5pbnB1dF92YWxsaXN0IHtcclxuXHRcdG1heC1oZWlnaHQ6IDM1MHJweDtcclxuXHRcdG92ZXJmbG93LXk6YXV0bztcclxuXHRcdGRpc3BsYXk6IG5vbmU7XHJcblx0fVxyXG5cdC5pbnB1dF92YWxsaXN0IHVse1xyXG5cdFx0LyogYm9yZGVyOiAxcHggc29saWQgcmVkOyAqL1xyXG5cdFx0cGFkZGluZzogMCAyMHJweDtcclxuXHR9XHJcblx0LmlucHV0X3ZhbGxpc3QgdWwgbGl7XHJcblx0XHRsaXN0LXN0eWxlOiBub25lO1xyXG5cdFx0cGFkZGluZzogMjBycHg7XHJcblx0XHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI2NjYztcclxuXHR9XHJcblx0LmlucHV0X3ZhbGxpc3QgdWwgbGkgYXtcclxuXHRcdGZsb2F0OiByaWdodDtcclxuXHR9XHJcblx0LmlucHV0X3ZhbGxpc3QgdWwgbGkgYSBpIHtcclxuXHQgICAgZm9udC1zaXplOiA0NXJweDtcclxuXHR9XHJcblx0LnBhbmVsX3RpdGxle1xyXG5cdCAgICBmb250LXNpemU6IDM4cnB4O1xyXG5cdFx0YmFja2dyb3VuZC1jb2xvcjogIzI3QTZFMTtcclxuXHRcdGxpbmUtaGVpZ2h0OiA4MHJweDtcclxuXHRcdGNvbG9yOiAjZmZmO1xyXG5cdFx0dGV4dC1hbGlnbjogY2VudGVyO1xyXG5cdFx0Zm9udC13ZWlnaHQ6IGJvbGQ7XHJcblx0fVxyXG5cdC52LXBhbmVsbGlzdHtcclxuXHRcdGJvcmRlcjo0cnB4IHNvbGlkICNhYWE7XHJcblx0XHRib3JkZXItcmFkaXVzOiAxMHJweDtcclxuXHRcdG1hcmdpbjogMTBycHggMjBycHggMHJweCAyMHJweDtcclxuXHR9XHJcblx0LnYtcGFuZWxkZWx7XHJcblx0XHR0ZXh0LWFsaWduOiByaWdodDtcclxuXHR9XHJcblx0LnBhbmVsX2RlbHtcclxuXHRcdGZvbnQtc2l6ZTogNDRycHg7XHJcblx0XHR0ZXh0LWRlY29yYXRpb246IGluaXRpYWw7XHJcblx0XHRtYXJnaW4tdG9wOiAxMHJweDtcclxuXHRcdG1hcmdpbi1yaWdodDogMjBycHg7XHJcblx0fVxyXG5cdC5kaXZYe1xyXG5cdCAgICB3aWR0aDogMjBweDtcclxuXHQgICAgaGVpZ2h0OiAyMHB4O1xyXG5cdCAgICBib3JkZXItcmFkaXVzOiA2MCU7XHJcblx0ICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuXHQgICAgdG9wOiAtMTBweDtcclxuXHQgICAgcmlnaHQ6IC0xMHB4O1xyXG5cdCAgICB6LWluZGV4OiAxMDA7XHJcblx0fVxyXG5cdFxyXG48L3N0eWxlPlxyXG5cclxuPHRlbXBsYXRlPlxyXG5cdDx2aWV3IGNsYXNzPVwiY29udGVudFwiPlxyXG5cdFx0PHZpZXcgY2xhc3M9XCJ2LWFyZWFcIiB2LWZvcj1cIihjbGFzc2F0dHIsaW5kZXgpIGluIGNsYXNzQXR0ckxpc3RcIj5cclxuXHRcdFx0PGRpdiBjbGFzcz1cImNsYXNzX2F0dHJfdGl0bGVcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCI+XHJcblx0XHRcdFx0PGRpdiBjbGFzcz1cInRpdGxlX2xpbmVcIj48L2Rpdj5cclxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwidGl0bGVfaWNvblwiIDpzdHlsZT1cInsnYmFja2dyb3VuZC1jb2xvcic6Y2xhc3NhdHRyLkJrQ29sb3J9XCI+ICAgXHJcblx0XHRcdFx0XHQ8aSBjbGFzcz1cImFjZS1pY29uIGZhXCIgOmNsYXNzPVwiY2xhc3NhdHRyLkltZ0ZvbnRTdHlsZVwiPjwvaT5cclxuXHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHQ8c3BhbiBjbGFzcz1cInRpdGxlXCI+e3tjbGFzc2F0dHIuTmFtZX19PC9zcGFuPlxyXG5cdFx0XHRcdDxhIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiBjbGFzcz1cImFycm93XCIgQHRhcD1cIm9uYXJyb3coaW5kZXgsY2xhc3NhdHRyLk9wZW4pXCI+PGkgY2xhc3M9XCJhY2UtaWNvbiBmYSBcIjpjbGFzcz1cImNsYXNzYXR0ci5PcGVuPydmYS1hbmdsZS1kb3duJzonZmEtYW5nbGUtdXAnXCI+PC9pPjwvYT5cclxuXHRcdFx0PC9kaXY+XHJcblx0XHRcdDxkaXYgY2xhc3M9XCJjbGFzc19hdHRyX2JvZHlcIiA6c3R5bGU9XCJ7J2Rpc3BsYXknOmNsYXNzYXR0ci5PcGVuPydibG9jayc6J25vbmUnfVwiPlxyXG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJkdl9maWVsZF9kaXZcIiB2LWZvcj1cIihhdHRyLGlpbmRleCkgaW4gY2xhc3NhdHRyLkF0dHJcIj5cclxuXHRcdFx0XHRcdDx2aWV3IGNsYXNzPVwiZm9ybS1ncm91cFwiIHYtaWY9XCJhdHRyLlR5cGU9PSflrZfnrKbkuLInIHx8IGF0dHIuVHlwZT09J+WPr+WPmOmVv+Wtl+espuS4sicgfHwgYXR0ci5UeXBlPT0n5pW05pWwJyB8fCBhdHRyLlR5cGU9PSfmta7ngrnmlbAnXCIgOnN0eWxlPVwieydkaXNwbGF5JzphdHRyLmhpZGRlbiA9PSAnVHJ1ZSc/J25vbmUnOicnfVwiPlxyXG5cdFx0XHRcdFx0XHQ8dmlldyB2LWlmPVwiY2xhc3NhdHRyLmNvbnRyb2xfc3R5bGU9PSfkuIrkuIvluIPlsYAnXCI+XHJcblx0XHRcdFx0XHRcdFx0PHRleHQgY2xhc3M9XCJ0eF90aXRsZVwiIDpzdHlsZT1cInsnZm9udC1mYW1pbHknOmNsYXNzYXR0ci5Gb250Lk5hbWU/Y2xhc3NhdHRyLkZvbnQuTmFtZTonaW5pdGlhbCcsJ2ZvbnQtc2l6ZSc6Y2xhc3NhdHRyLkZvbnQuU2l6ZT9jbGFzc2F0dHIuRm9udC5TaXplOidpbml0aWFsJywnZm9udC13ZWlnaHQnOmNsYXNzYXR0ci5Gb250LkJvbGQ/J2JvbGQnOidpbml0aWFsJywnZm9udC1zdHlsZSc6Y2xhc3NhdHRyLkZvbnQuVGlsdD8naXRhbGljJzonaW5pdGlhbCcsJ3RleHQtZGVjb3JhdGlvbic6Y2xhc3NhdHRyLkZvbnQuVW5kZXJsaW5lPyd1bmRlcmxpbmUnOidpbml0aWFsJywnYmFja2dyb3VuZC1jb2xvcic6Y2xhc3NhdHRyLkZvbnQuQmtfQ29sb3IsJ2NvbG9yJzpjbGFzc2F0dHIuRm9udC5UZXh0X0NvbG9yLCd3aWR0aCc6Y2xhc3NhdHRyLnRpdGxlX3Bfd2RpdGgrJyUnfVwiPjxpIGNsYXNzPVwiaV90aXNoaVwiIHYtaWY9XCJhdHRyLm5vdGVtcHR5PT10cnVlIHx8IGF0dHIuTm90RW1wdHk9PScxJ1wiPio8L2k+e3thdHRyLkRpc3BOYW1lfX06PC90ZXh0PiAgPCEtLSBhdHRyLk5vdEVtcHR5PT0nMScgLS0+XHJcblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cInRleHQtcmlnaHRcIiB2LWlmPVwiYXR0ci5leHRfYnV0dG9uPT10cnVlXCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8YSBAdGFwPVwiY2xhc3NBdHRyX2V4dEJ1dHRvbihpbmRleCxpaW5kZXgpXCIgPjxpIGNsYXNzPVwiYWNlLWljb24gZmEgZmEtcGx1cy1jaXJjbGVcIj48L2k+PC9hPlxyXG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdDwhLS0gPGRpdiBzdHlsZT0nd2lkdGg6IDEwMHB4O3Bvc2l0aW9uOiByZWxhdGl2ZTsnPiBcclxuXHRcdFx0XHRcdFx0XHQ8aW1hZ2UgY2xhc3M9XCJkaXZYXCIgc3JjPVwiLi4vLi4vaW1hZ2VzL21zZ181MF9uZXcucG5nXCI+PC9pbWFnZT4tLT5cclxuXHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInRleHRcIiA6dmFsdWU9XCJhdHRyLlZhbHVlXCIgQGZvY3VzPVwib250YXBcIiBAYmx1cj1cIm9uZXZlbnRcIiB2LWlmPVwiYXR0ci5IZWlnaHQ9PScxJ1wiIDpkYXRhLWluZGV4PVwiaW5kZXhcIiA6ZGF0YS1paW5kZXg9XCJpaW5kZXhcIiA6c3R5bGU9XCJ7J3dpZHRoJzphdHRyLldpZHRofVwiIDpkaXNhYmxlZD1cImF0dHIuZWRpdD9mYWxzZTp0cnVlXCIgPiA8IS0tID09J2ZsYXNlJz90cnVlOmZhbHNlIC0tPlxyXG5cdFx0XHRcdFx0XHRcdDx0ZXh0YXJlYSA6dmFsdWU9XCJhdHRyLlZhbHVlXCIgQGZvY3VzPVwib250YXBcIiBAYmx1cj1cIm9uZXZlbnRcIiB2LWVsc2UtaWY9XCJhdHRyLkhlaWdodD09JzInXCIgOmRhdGEtaW5kZXg9XCJpbmRleFwiOmRhdGEtaWluZGV4PVwiaWluZGV4XCIgc3R5bGU9XCJoZWlnaHQ6NjBweDtcIiA6c3R5bGU9XCJ7J3dpZHRoJzphdHRyLldpZHRofVwiIDpkaXNhYmxlZD1cImF0dHIuZWRpdD9mYWxzZTp0cnVlXCI+PC90ZXh0YXJlYT5cclxuXHRcdFx0XHRcdFx0XHQ8dGV4dGFyZWEgOnZhbHVlPVwiYXR0ci5WYWx1ZVwiIEBmb2N1cz1cIm9udGFwXCIgQGJsdXI9XCJvbmV2ZW50XCIgdi1lbHNlLWlmPVwiYXR0ci5IZWlnaHQ9PSczJ1wiIDpkYXRhLWluZGV4PVwiaW5kZXhcIjpkYXRhLWlpbmRleD1cImlpbmRleFwiIHN0eWxlPVwiaGVpZ2h0OjkwcHg7XCIgOnN0eWxlPVwieyd3aWR0aCc6YXR0ci5XaWR0aH1cIiA6ZGlzYWJsZWQ9XCJhdHRyLmVkaXQ/ZmFsc2U6dHJ1ZVwiPjwvdGV4dGFyZWE+XHJcblx0XHRcdFx0XHRcdFx0PCEtLSA8L2Rpdj4gLS0+XHJcblx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdFx0PHZpZXcgdi1pZj1cImNsYXNzYXR0ci5jb250cm9sX3N0eWxlPT0n5bem5Y+z5biD5bGAJ1wiPlxyXG5cdFx0XHRcdFx0XHRcdDxwIGNsYXNzPVwidHhfdGl0bGUyXCIgOnN0eWxlPVwieydmb250LWZhbWlseSc6Y2xhc3NhdHRyLkZvbnQuTmFtZT9jbGFzc2F0dHIuRm9udC5OYW1lOidpbml0aWFsJywnZm9udC1zaXplJzpjbGFzc2F0dHIuRm9udC5TaXplP2NsYXNzYXR0ci5Gb250LlNpemU6J2luaXRpYWwnLCdmb250LXdlaWdodCc6Y2xhc3NhdHRyLkZvbnQuQm9sZD8nYm9sZCc6J2luaXRpYWwnLCdmb250LXN0eWxlJzpjbGFzc2F0dHIuRm9udC5UaWx0PydpdGFsaWMnOidpbml0aWFsJywndGV4dC1kZWNvcmF0aW9uJzpjbGFzc2F0dHIuRm9udC5VbmRlcmxpbmU/J3VuZGVybGluZSc6J2luaXRpYWwnLCdiYWNrZ3JvdW5kLWNvbG9yJzpjbGFzc2F0dHIuRm9udC5Ca19Db2xvciwnY29sb3InOmNsYXNzYXR0ci5Gb250LlRleHRfQ29sb3IsJ3dpZHRoJzpjbGFzc2F0dHIudGl0bGVfcF93ZGl0aCsnJSd9XCI+XHJcblx0XHRcdFx0XHRcdFx0PGkgY2xhc3M9XCJpX3Rpc2hpXCIgdi1pZj1cImF0dHIubm90ZW1wdHk9PXRydWUgfHwgYXR0ci5Ob3RFbXB0eT09JzEnXCI+KjwvaT57e2F0dHIuRGlzcE5hbWV9fTo8L3A+XHJcblx0XHRcdFx0XHRcdFx0PCEtLSA8ZGl2IHN0eWxlPSd3aWR0aDogMTAwJTtwb3NpdGlvbjogcmVsYXRpdmU7Jz5cclxuXHRcdFx0XHRcdFx0XHRcdDxpbWFnZSBjbGFzcz1cImRpdlhcIiBzcmM9XCIuLi8uLi9pbWFnZXMvbXNnXzUwX25ldy5wbmdcIj48L2ltYWdlPiAtLT5cclxuXHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImF0dHJfZmllbGRcIiA6dmFsdWU9XCJhdHRyLlZhbHVlXCIgQGZvY3VzPVwib250YXBcIiBAYmx1cj1cIm9uZXZlbnRcIiB2LWlmPVwiYXR0ci5IZWlnaHQ9PScxJ1wiIDpkYXRhLWluZGV4PVwiaW5kZXhcIiA6ZGF0YS1paW5kZXg9XCJpaW5kZXhcIiA6c3R5bGU9XCJ7J3dpZHRoJzogYXR0ci5XaWR0aC5zcGxpdCgnJScpWzBdIC0gY2xhc3NhdHRyLnRpdGxlX3Bfd2RpdGggLSAoYXR0ci5ub3RlbXB0eT09dHJ1ZSB8fCBhdHRyLk5vdEVtcHR5PT0nMSc/MTA6NSkgLSAoYXR0ci5leHRfYnV0dG9uPT10cnVlPzk6MCkgKyclJ31cIiA6ZGlzYWJsZWQ9XCJhdHRyLmVkaXQ/ZmFsc2U6dHJ1ZVwiID5cclxuXHRcdFx0XHRcdFx0XHQ8dGV4dGFyZWEgY2xhc3M9XCJhdHRyX2ZpZWxkXCIgOnZhbHVlPVwiYXR0ci5WYWx1ZVwiIEBmb2N1cz1cIm9udGFwXCIgQGJsdXI9XCJvbmV2ZW50XCIgdi1lbHNlLWlmPVwiYXR0ci5IZWlnaHQ9PScyJ1wiIDpkYXRhLWluZGV4PVwiaW5kZXhcIjpkYXRhLWlpbmRleD1cImlpbmRleFwiIHN0eWxlPVwiaGVpZ2h0OjYwcHg7XCIgOnN0eWxlPVwieyd3aWR0aCc6IGF0dHIuV2lkdGguc3BsaXQoJyUnKVswXSAtIGNsYXNzYXR0ci50aXRsZV9wX3dkaXRoIC0gKGF0dHIubm90ZW1wdHk9PXRydWUgfHwgYXR0ci5Ob3RFbXB0eT09JzEnPzEwOjUpIC0gKGF0dHIuZXh0X2J1dHRvbj09dHJ1ZT85OjApICsnJSd9XCIgOmRpc2FibGVkPVwiYXR0ci5lZGl0P2ZhbHNlOnRydWVcIj48L3RleHRhcmVhPlxyXG5cdFx0XHRcdFx0XHRcdDx0ZXh0YXJlYSBjbGFzcz1cImF0dHJfZmllbGRcIiA6dmFsdWU9XCJhdHRyLlZhbHVlXCIgQGZvY3VzPVwib250YXBcIiBAYmx1cj1cIm9uZXZlbnRcIiB2LWVsc2UtaWY9XCJhdHRyLkhlaWdodD09JzMnXCIgOmRhdGEtaW5kZXg9XCJpbmRleFwiOmRhdGEtaWluZGV4PVwiaWluZGV4XCIgc3R5bGU9XCJoZWlnaHQ6OTBweDtcIiA6c3R5bGU9XCJ7J3dpZHRoJzogYXR0ci5XaWR0aC5zcGxpdCgnJScpWzBdIC0gY2xhc3NhdHRyLnRpdGxlX3Bfd2RpdGggLSAoYXR0ci5ub3RlbXB0eT09dHJ1ZSB8fCBhdHRyLk5vdEVtcHR5PT0nMSc/MTA6NSkgLSAoYXR0ci5leHRfYnV0dG9uPT10cnVlPzk6MCkgKyclJ31cIiA6ZGlzYWJsZWQ9XCJhdHRyLmVkaXQ/ZmFsc2U6dHJ1ZVwiPjwvdGV4dGFyZWE+XHJcblx0XHRcdFx0XHRcdFx0PCEtLSA8L2Rpdj4gLS0+XHJcblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cInRleHQtcmlnaHQyXCIgdi1pZj1cImF0dHIuZXh0X2J1dHRvbj09dHJ1ZVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0PGEgQHRhcD1cImNsYXNzQXR0cl9leHRCdXR0b24oaW5kZXgsaWluZGV4KVwiID48aSBjbGFzcz1cImFjZS1pY29uIGZhIGZhLXBsdXMtY2lyY2xlXCI+PC9pPjwvYT5cclxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0PHZpZXcgY2xhc3M9XCJmb3JtLWdyb3VwXCIgdi1pZj1cImF0dHIuVHlwZT09J+W4g+WwlOWAvCdcIiA6c3R5bGU9XCJ7J2Rpc3BsYXknOmF0dHIuaGlkZGVuID09ICdUcnVlJz8nbm9uZSc6Jyd9XCI+XHJcblx0XHRcdFx0XHRcdDxjaGVja2JveC1ncm91cCBjbGFzcz1cImNoZWNrX3JlbWVtYmVyUHdkXCIgQGNoYW5nZT1cIm9uY2hlY2tcIiA6ZGF0YS1pc2NoZWNrPVwiYXR0ci5WYWx1ZVwiIDpkYXRhLWluZGV4PVwiaW5kZXhcIiA6ZGF0YS1paW5kZXg9XCJpaW5kZXhcIiA6c3R5bGU9XCJ7J21hcmdpbi1sZWZ0JzogY2xhc3NhdHRyLmNvbnRyb2xfc3R5bGU9PSflt6blj7PluIPlsYAnP2NsYXNzYXR0ci50aXRsZV9wX3dkaXRoKzIgKyclJzonMTBycHgnfVwiPlxyXG5cdFx0XHRcdFx0XHRcdDxsYWJlbD5cclxuXHRcdFx0XHRcdFx0XHRcdDxjaGVja2JveCA6dmFsdWU9XCJhdHRyLlZhbHVlXCIgOmNoZWNrZWQ9XCJhdHRyLlZhbHVlXCIvPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHRleHQ+e3thdHRyLkRpc3BOYW1lfX08aSBjbGFzcz1cImlfdGlzaGlcIiB2LWlmPVwiYXR0ci5ub3RlbXB0eT09dHJ1ZSB8fCBhdHRyLk5vdEVtcHR5PT0nMSdcIj4qPC9pPjwvdGV4dD5cclxuXHRcdFx0XHRcdFx0XHQ8L2xhYmVsPlxyXG5cdFx0XHRcdFx0XHQ8L2NoZWNrYm94LWdyb3VwPlxyXG5cdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0PHZpZXcgY2xhc3M9XCJmb3JtLWdyb3VwXCIgdi1pZj1cImF0dHIuVHlwZT09J+aXpeacnycgfHwgYXR0ci5UeXBlPT0n5pe26Ze0J1wiIDpzdHlsZT1cInsnZGlzcGxheSc6YXR0ci5oaWRkZW4gPT0gJ1RydWUnPydub25lJzonJ31cIj5cclxuXHRcdFx0XHRcdFx0PHZpZXcgdi1pZj1cImNsYXNzYXR0ci5jb250cm9sX3N0eWxlPT0n5LiK5LiL5biD5bGAJ1wiPlxyXG5cdFx0XHRcdFx0XHRcdDx0ZXh0IGNsYXNzPVwidHhfdGl0bGVcIiA6c3R5bGU9XCJ7J2ZvbnQtZmFtaWx5JzpjbGFzc2F0dHIuRm9udC5OYW1lP2NsYXNzYXR0ci5Gb250Lk5hbWU6J2luaXRpYWwnLCdmb250LXNpemUnOmNsYXNzYXR0ci5Gb250LlNpemU/Y2xhc3NhdHRyLkZvbnQuU2l6ZTonaW5pdGlhbCcsJ2ZvbnQtd2VpZ2h0JzpjbGFzc2F0dHIuRm9udC5Cb2xkPydib2xkJzonaW5pdGlhbCcsJ2ZvbnQtc3R5bGUnOmNsYXNzYXR0ci5Gb250LlRpbHQ/J2l0YWxpYyc6J2luaXRpYWwnLCd0ZXh0LWRlY29yYXRpb24nOmNsYXNzYXR0ci5Gb250LlVuZGVybGluZT8ndW5kZXJsaW5lJzonaW5pdGlhbCcsJ2JhY2tncm91bmQtY29sb3InOmNsYXNzYXR0ci5Gb250LkJrX0NvbG9yLCdjb2xvcic6Y2xhc3NhdHRyLkZvbnQuVGV4dF9Db2xvciwnd2lkdGgnOmNsYXNzYXR0ci50aXRsZV9wX3dkaXRoKyclJ31cIj48aSBjbGFzcz1cImlfdGlzaGlcIiB2LWlmPVwiYXR0ci5ub3RlbXB0eT09dHJ1ZSB8fCBhdHRyLk5vdEVtcHR5PT0nMSdcIj4qPC9pPnt7YXR0ci5EaXNwTmFtZX19OjwvdGV4dD5cclxuXHRcdFx0XHRcdFx0XHQ8cGlja2VyIG1vZGU9XCJkYXRlXCIgOnZhbHVlPVwiYXR0ci5WYWx1ZVwiIEBjaGFuZ2U9XCJvbmRhdGVUaW1lXCIgY2xhc3M9XCJkYXRlX2lwdXRcIiA6ZGF0YS1pbmRleD1cImluZGV4XCIgOmRhdGEtaWluZGV4PVwiaWluZGV4XCIgOnN0eWxlPVwieyd3aWR0aCc6YXR0ci5XaWR0aH1cIj5cclxuXHRcdFx0XHRcdFx0XHQgICA8dmlldyBjbGFzcz1cInBpY2tlclwiPnt7YXR0ci5WYWx1ZX19PC92aWV3PlxyXG5cdFx0XHRcdFx0XHRcdDwvcGlja2VyPlxyXG5cdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHRcdDx2aWV3IHYtaWY9XCJjbGFzc2F0dHIuY29udHJvbF9zdHlsZT09J+W3puWPs+W4g+WxgCdcIj5cclxuXHRcdFx0XHRcdFx0XHQ8cCBjbGFzcz1cInR4X3RpdGxlMlwiIDpzdHlsZT1cInsnZm9udC1mYW1pbHknOmNsYXNzYXR0ci5Gb250Lk5hbWU/Y2xhc3NhdHRyLkZvbnQuTmFtZTonaW5pdGlhbCcsJ2ZvbnQtc2l6ZSc6Y2xhc3NhdHRyLkZvbnQuU2l6ZT9jbGFzc2F0dHIuRm9udC5TaXplOidpbml0aWFsJywnZm9udC13ZWlnaHQnOmNsYXNzYXR0ci5Gb250LkJvbGQ/J2JvbGQnOidpbml0aWFsJywnZm9udC1zdHlsZSc6Y2xhc3NhdHRyLkZvbnQuVGlsdD8naXRhbGljJzonaW5pdGlhbCcsJ3RleHQtZGVjb3JhdGlvbic6Y2xhc3NhdHRyLkZvbnQuVW5kZXJsaW5lPyd1bmRlcmxpbmUnOidpbml0aWFsJywnYmFja2dyb3VuZC1jb2xvcic6Y2xhc3NhdHRyLkZvbnQuQmtfQ29sb3IsJ2NvbG9yJzpjbGFzc2F0dHIuRm9udC5UZXh0X0NvbG9yLCd3aWR0aCc6Y2xhc3NhdHRyLnRpdGxlX3Bfd2RpdGgrJyUnfVwiPjxpIGNsYXNzPVwiaV90aXNoaVwiIHYtaWY9XCJhdHRyLm5vdGVtcHR5PT10cnVlIHx8IGF0dHIuTm90RW1wdHk9PScxJ1wiPio8L2k+e3thdHRyLkRpc3BOYW1lfX06PC9wPlxyXG5cdFx0XHRcdFx0XHRcdDxwaWNrZXIgbW9kZT1cImRhdGVcIiA6dmFsdWU9XCJhdHRyLlZhbHVlXCIgQGNoYW5nZT1cIm9uZGF0ZVRpbWVcIiBjbGFzcz1cImRhdGVfaXB1dCBhdHRyX2ZpZWxkXCIgOmRhdGEtaW5kZXg9XCJpbmRleFwiIDpkYXRhLWlpbmRleD1cImlpbmRleFwiIDpzdHlsZT1cInsnd2lkdGgnOiBhdHRyLldpZHRoLnNwbGl0KCclJylbMF0gLSBjbGFzc2F0dHIudGl0bGVfcF93ZGl0aCAtIChhdHRyLm5vdGVtcHR5PT10cnVlIHx8IGF0dHIuTm90RW1wdHk9PScxJz8xMDo1KSArJyUnfVwiPlxyXG5cdFx0XHRcdFx0XHRcdCAgIDx2aWV3IGNsYXNzPVwicGlja2VyXCI+e3thdHRyLlZhbHVlfX08L3ZpZXc+XHJcblx0XHRcdFx0XHRcdFx0PC9waWNrZXI+XHJcblx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdDx2aWV3IGNsYXNzPVwiZm9ybS1ncm91cFwiIHYtaWY9XCJhdHRyLlR5cGU9PSflrZflhbgnIHx8IGF0dHIuVHlwZT09J+Wtl+WFuC3lrZfnrKbkuLInXCIgOnN0eWxlPVwieydkaXNwbGF5JzphdHRyLmhpZGRlbiA9PSAnVHJ1ZSc/J25vbmUnOicnfVwiPlxyXG5cdFx0XHRcdFx0XHQ8dmlldyB2LWlmPVwiY2xhc3NhdHRyLmNvbnRyb2xfc3R5bGU9PSfkuIrkuIvluIPlsYAnXCI+XHJcblx0XHRcdFx0XHRcdFx0PHRleHQgY2xhc3M9XCJ0eF90aXRsZVwiIDpzdHlsZT1cInsnZm9udC1mYW1pbHknOmNsYXNzYXR0ci5Gb250Lk5hbWU/Y2xhc3NhdHRyLkZvbnQuTmFtZTonaW5pdGlhbCcsJ2ZvbnQtc2l6ZSc6Y2xhc3NhdHRyLkZvbnQuU2l6ZT9jbGFzc2F0dHIuRm9udC5TaXplOidpbml0aWFsJywnZm9udC13ZWlnaHQnOmNsYXNzYXR0ci5Gb250LkJvbGQ/J2JvbGQnOidpbml0aWFsJywnZm9udC1zdHlsZSc6Y2xhc3NhdHRyLkZvbnQuVGlsdD8naXRhbGljJzonaW5pdGlhbCcsJ3RleHQtZGVjb3JhdGlvbic6Y2xhc3NhdHRyLkZvbnQuVW5kZXJsaW5lPyd1bmRlcmxpbmUnOidpbml0aWFsJywnYmFja2dyb3VuZC1jb2xvcic6Y2xhc3NhdHRyLkZvbnQuQmtfQ29sb3IsJ2NvbG9yJzpjbGFzc2F0dHIuRm9udC5UZXh0X0NvbG9yLCd3aWR0aCc6Y2xhc3NhdHRyLnRpdGxlX3Bfd2RpdGgrJyUnfVwiPjxpIGNsYXNzPVwiaV90aXNoaVwiIHYtaWY9XCJhdHRyLm5vdGVtcHR5PT10cnVlIHx8IGF0dHIuTm90RW1wdHk9PScxJ1wiPio8L2k+e3thdHRyLkRpc3BOYW1lfX06PC90ZXh0PlxyXG5cdFx0XHRcdFx0XHRcdDxwaWNrZXIgY2xhc3M9XCJzZWN0aW9uX2lwdXRcIiBAY2hhbmdlPVwib25jaGFuZ2VcIiA6cmFuZ2U9XCJhdHRyLmRpY3RpdGVtXCIgcmFuZ2Uta2V5PVwiQ05fU19OQU1FXCIgdi1pZj1cImF0dHIuc2VsZWN0PT1mYWxzZVwiIDpkYXRhLWluZGV4PVwiaW5kZXhcIiA6ZGF0YS1paW5kZXg9XCJpaW5kZXhcIiA6c3R5bGU9XCJ7J3dpZHRoJzphdHRyLldpZHRofVwiIDpkaXNhYmxlZD1cImF0dHIuZWRpdD9mYWxzZTp0cnVlXCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgY2xhc3M9XCJcIj57eyBhdHRyLlZhbHVlIH19PC9sYWJlbD5cclxuXHRcdFx0XHRcdFx0XHQ8L3BpY2tlcj5cclxuXHRcdFx0XHRcdFx0XHQ8c2VsZWN0LWN5IDp2YWx1ZT1cImF0dHIuVmFsdWVcIiA6bmFtZT1cImF0dHIuTmFtZVwiIDpvcHRpb25zPVwiYXR0ci5kaWN0aXRlbVwiIHNob3dDbGVhckljb249XCJ0cnVlXCIgQGNoYW5nZT1cIm9uY2hhbmdlMlwiIHYtZWxzZS1pZj1cImF0dHIuc2VsZWN0PT10cnVlXCIgOmRhdGEtaW5kZXg9XCJpbmRleFwiIDpkYXRhLWlpbmRleD1cImlpbmRleFwiIDpzdHlsZT1cInsnd2lkdGgnOmF0dHIuV2lkdGh9XCIgOmRpc2FibGVkPVwiYXR0ci5lZGl0P2ZhbHNlOnRydWVcIj48L3NlbGVjdC1jeT5cclxuXHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0XHQ8dmlldyB2LWlmPVwiY2xhc3NhdHRyLmNvbnRyb2xfc3R5bGU9PSflt6blj7PluIPlsYAnXCI+XHJcblx0XHRcdFx0XHRcdFx0PHAgY2xhc3M9XCJ0eF90aXRsZTJcIiA6c3R5bGU9XCJ7J2ZvbnQtZmFtaWx5JzpjbGFzc2F0dHIuRm9udC5OYW1lP2NsYXNzYXR0ci5Gb250Lk5hbWU6J2luaXRpYWwnLCdmb250LXNpemUnOmNsYXNzYXR0ci5Gb250LlNpemU/Y2xhc3NhdHRyLkZvbnQuU2l6ZTonaW5pdGlhbCcsJ2ZvbnQtd2VpZ2h0JzpjbGFzc2F0dHIuRm9udC5Cb2xkPydib2xkJzonaW5pdGlhbCcsJ2ZvbnQtc3R5bGUnOmNsYXNzYXR0ci5Gb250LlRpbHQ/J2l0YWxpYyc6J2luaXRpYWwnLCd0ZXh0LWRlY29yYXRpb24nOmNsYXNzYXR0ci5Gb250LlVuZGVybGluZT8ndW5kZXJsaW5lJzonaW5pdGlhbCcsJ2JhY2tncm91bmQtY29sb3InOmNsYXNzYXR0ci5Gb250LkJrX0NvbG9yLCdjb2xvcic6Y2xhc3NhdHRyLkZvbnQuVGV4dF9Db2xvciwnd2lkdGgnOmNsYXNzYXR0ci50aXRsZV9wX3dkaXRoKyclJ31cIj48aSBjbGFzcz1cImlfdGlzaGlcIiB2LWlmPVwiYXR0ci5ub3RlbXB0eT09dHJ1ZSB8fCBhdHRyLk5vdEVtcHR5PT0nMSdcIj4qPC9pPnt7YXR0ci5EaXNwTmFtZX19OjwvcD5cclxuXHRcdFx0XHRcdFx0XHQ8cGlja2VyIGNsYXNzPVwic2VjdGlvbl9pcHV0IGF0dHJfZmllbGRcIiBAY2hhbmdlPVwib25jaGFuZ2VcIiA6cmFuZ2U9XCJhdHRyLmRpY3RpdGVtXCIgcmFuZ2Uta2V5PVwiQ05fU19OQU1FXCIgdi1pZj1cImF0dHIuc2VsZWN0PT1mYWxzZVwiIDpkYXRhLWluZGV4PVwiaW5kZXhcIiA6ZGF0YS1paW5kZXg9XCJpaW5kZXhcIiA6c3R5bGU9XCJ7J3dpZHRoJzogYXR0ci5XaWR0aC5zcGxpdCgnJScpWzBdIC0gY2xhc3NhdHRyLnRpdGxlX3Bfd2RpdGggLSAoYXR0ci5ub3RlbXB0eT09dHJ1ZSB8fCBhdHRyLk5vdEVtcHR5PT0nMSc/MTA6NSkgKyclJ31cIj5cclxuXHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBjbGFzcz1cIlwiPnt7IGF0dHIuVmFsdWUgfX08L2xhYmVsPlxyXG5cdFx0XHRcdFx0XHRcdDwvcGlja2VyPlxyXG5cdFx0XHRcdFx0XHRcdDxzZWxlY3QtY3kgOnZhbHVlPVwiYXR0ci5WYWx1ZVwiIDpuYW1lPVwiYXR0ci5OYW1lXCIgOm9wdGlvbnM9XCJhdHRyLmRpY3RpdGVtXCIgc2hvd0NsZWFySWNvbj1cInRydWVcIiBAY2hhbmdlPVwib25jaGFuZ2UyXCIgdi1lbHNlLWlmPVwiYXR0ci5zZWxlY3Q9PXRydWVcIiA6ZGF0YS1pbmRleD1cImluZGV4XCIgOmRhdGEtaWluZGV4PVwiaWluZGV4XCIgOnN0eWxlPVwieyd3aWR0aCc6YXR0ci5XaWR0aH1cIj48L3NlbGVjdC1jeT5cclxuXHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0PHZpZXcgY2xhc3M9XCJmb3JtLWdyb3VwXCIgdi1pZj1cImF0dHIuVHlwZT09J+W8leeUqOWvueixoSjljZXkuKopJyB8fCBhdHRyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKSdcIiA6c3R5bGU9XCJ7J2Rpc3BsYXknOmF0dHIuaGlkZGVuID09ICdUcnVlJz8nbm9uZSc6Jyd9XCI+XHJcblx0XHRcdFx0XHRcdDx2aWV3IHYtaWY9XCJjbGFzc2F0dHIuY29udHJvbF9zdHlsZT09J+S4iuS4i+W4g+WxgCdcIj5cclxuXHRcdFx0XHRcdFx0XHQ8dGV4dCBjbGFzcz1cInR4X3RpdGxlXCIgOnN0eWxlPVwieydmb250LWZhbWlseSc6Y2xhc3NhdHRyLkZvbnQuTmFtZT9jbGFzc2F0dHIuRm9udC5OYW1lOidpbml0aWFsJywnZm9udC1zaXplJzpjbGFzc2F0dHIuRm9udC5TaXplP2NsYXNzYXR0ci5Gb250LlNpemU6J2luaXRpYWwnLCdmb250LXdlaWdodCc6Y2xhc3NhdHRyLkZvbnQuQm9sZD8nYm9sZCc6J2luaXRpYWwnLCdmb250LXN0eWxlJzpjbGFzc2F0dHIuRm9udC5UaWx0PydpdGFsaWMnOidpbml0aWFsJywndGV4dC1kZWNvcmF0aW9uJzpjbGFzc2F0dHIuRm9udC5VbmRlcmxpbmU/J3VuZGVybGluZSc6J2luaXRpYWwnLCdiYWNrZ3JvdW5kLWNvbG9yJzpjbGFzc2F0dHIuRm9udC5Ca19Db2xvciwnY29sb3InOmNsYXNzYXR0ci5Gb250LlRleHRfQ29sb3IsJ3dpZHRoJzpjbGFzc2F0dHIudGl0bGVfcF93ZGl0aCsnJSd9XCI+PGkgY2xhc3M9XCJpX3Rpc2hpXCIgdi1pZj1cImF0dHIubm90ZW1wdHk9PXRydWUgfHwgYXR0ci5Ob3RFbXB0eT09JzEnXCI+KjwvaT57e2F0dHIuRGlzcE5hbWV9fTo8L3RleHQ+XHJcblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cInRleHQtcmlnaHRcIiB2LWlmPVwiYXR0ci5UeXBlPT0n5byV55So5a+56LGhKOWNleS4qiknXCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8YSBAdGFwPVwiY2xhc3NBdHRyX0FkZFJlZlwiIDpkYXRhLWNsYXNzaWQ9XCJhdHRyLlJlbENscy5zcGxpdCgnfCcpWzBdXCIgOmRhdGEtY2xhc3NuYW1lPVwiYXR0ci5SZWxDbHMuc3BsaXQoJ3wnKVsxXVwiID48aSBjbGFzcz1cImFjZS1pY29uIGZhIGZhLXBsdXMtY2lyY2xlXCI+PC9pPjwvYT5cclxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwidGV4dC1yaWdodFwiIHYtaWY9XCJhdHRyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKSdcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDxwaWNrZXIgY2xhc3M9XCJzZWxlY3RcIiBAY2hhbmdlPVwiY2xhc3NBdHRyX0FkZFJlZlwiIDpyYW5nZT1cImF0dHIuUmVsQ2xzTGlzdFwiIHJhbmdlLWtleT1cIm5hbWVcIiA6ZGF0YS1pbmRleD1cImluZGV4XCIgOmRhdGEtaWluZGV4PVwiaWluZGV4XCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBjbGFzcz1cIlwiPnt7IGF0dHIuVmFsdWUgfX08L2xhYmVsPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC9waWNrZXI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8YSBjbGFzcz1cImNsYXNzX2F0dHJfYWRkX3JlZlwiPjxpIGNsYXNzPVwiYWNlLWljb24gZmEgZmEtcGx1cy1jaXJjbGVcIj48L2k+PC9hPlxyXG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdDxpbnB1dCB0eXBlPVwidGV4dFwiIDpkYXRhLWluZGV4PVwiaW5kZXhcIiA6ZGF0YS1paW5kZXg9XCJpaW5kZXhcIiA6c3R5bGU9XCJ7J3dpZHRoJzphdHRyLldpZHRofVwiIGRpc2FibGVkPVwidHJ1ZVwiID5cclxuXHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0XHQ8dmlldyB2LWlmPVwiY2xhc3NhdHRyLmNvbnRyb2xfc3R5bGU9PSflt6blj7PluIPlsYAnXCI+XHJcblx0XHRcdFx0XHRcdFx0PHAgY2xhc3M9XCJ0eF90aXRsZTJcIiA6c3R5bGU9XCJ7J2ZvbnQtZmFtaWx5JzpjbGFzc2F0dHIuRm9udC5OYW1lP2NsYXNzYXR0ci5Gb250Lk5hbWU6J2luaXRpYWwnLCdmb250LXNpemUnOmNsYXNzYXR0ci5Gb250LlNpemU/Y2xhc3NhdHRyLkZvbnQuU2l6ZTonaW5pdGlhbCcsJ2ZvbnQtd2VpZ2h0JzpjbGFzc2F0dHIuRm9udC5Cb2xkPydib2xkJzonaW5pdGlhbCcsJ2ZvbnQtc3R5bGUnOmNsYXNzYXR0ci5Gb250LlRpbHQ/J2l0YWxpYyc6J2luaXRpYWwnLCd0ZXh0LWRlY29yYXRpb24nOmNsYXNzYXR0ci5Gb250LlVuZGVybGluZT8ndW5kZXJsaW5lJzonaW5pdGlhbCcsJ2JhY2tncm91bmQtY29sb3InOmNsYXNzYXR0ci5Gb250LkJrX0NvbG9yLCdjb2xvcic6Y2xhc3NhdHRyLkZvbnQuVGV4dF9Db2xvciwnd2lkdGgnOmNsYXNzYXR0ci50aXRsZV9wX3dkaXRoKyclJ31cIj48aSBjbGFzcz1cImlfdGlzaGlcIiB2LWlmPVwiYXR0ci5ub3RlbXB0eT09dHJ1ZSB8fCBhdHRyLk5vdEVtcHR5PT0nMSdcIj4qPC9pPnt7YXR0ci5EaXNwTmFtZX19OjwvcD5cclxuXHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImF0dHJfZmllbGRcIiA6ZGF0YS1pbmRleD1cImluZGV4XCIgOmRhdGEtaWluZGV4PVwiaWluZGV4XCIgOnN0eWxlPVwieyd3aWR0aCc6IGF0dHIuV2lkdGguc3BsaXQoJyUnKVswXSAtIGNsYXNzYXR0ci50aXRsZV9wX3dkaXRoIC0gKGF0dHIubm90ZW1wdHk9PXRydWUgfHwgYXR0ci5Ob3RFbXB0eT09JzEnPzEwOjUpIC0gOSArJyUnfVwiIGRpc2FibGVkPVwidHJ1ZVwiID5cclxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwidGV4dC1yaWdodDJcIiB2LWlmPVwiYXR0ci5UeXBlPT0n5byV55So5a+56LGhKOWNleS4qiknXCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8YSBAdGFwPVwiY2xhc3NBdHRyX0FkZFJlZlwiIDpkYXRhLWNsYXNzaWQ9XCJhdHRyLlJlbENscy5zcGxpdCgnfCcpWzBdXCIgOmRhdGEtY2xhc3NuYW1lPVwiYXR0ci5SZWxDbHMuc3BsaXQoJ3wnKVsxXVwiID48aSBjbGFzcz1cImFjZS1pY29uIGZhIGZhLXBsdXMtY2lyY2xlXCI+PC9pPjwvYT5cclxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwidGV4dC1yaWdodDJcIiB2LWlmPVwiYXR0ci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknXCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8cGlja2VyIGNsYXNzPVwic2VsZWN0XCIgQGNoYW5nZT1cImNsYXNzQXR0cl9BZGRSZWZcIiA6cmFuZ2U9XCJhdHRyLlJlbENsc0xpc3RcIiByYW5nZS1rZXk9XCJuYW1lXCIgOmRhdGEtaW5kZXg9XCJpbmRleFwiIDpkYXRhLWlpbmRleD1cImlpbmRleFwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgY2xhc3M9XCJcIj57eyBhdHRyLlZhbHVlIH19PC9sYWJlbD5cclxuXHRcdFx0XHRcdFx0XHRcdDwvcGlja2VyPlxyXG5cdFx0XHRcdFx0XHRcdFx0PGEgY2xhc3M9XCJjbGFzc19hdHRyX2FkZF9yZWZcIj48aSBjbGFzcz1cImFjZS1pY29uIGZhIGZhLXBsdXMtY2lyY2xlXCI+PC9pPjwvYT5cclxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0PHZpZXcgY2xhc3M9XCJmb3JtLWdyb3VwXCIgdi1pZj1cImF0dHIuVHlwZT09J+W8leeUqOS6uuWRmCdcIiA6c3R5bGU9XCJ7J2Rpc3BsYXknOmF0dHIuaGlkZGVuID09ICdUcnVlJz8nbm9uZSc6Jyd9XCI+XHJcblx0XHRcdFx0XHRcdDx2aWV3IHYtaWY9XCJjbGFzc2F0dHIuY29udHJvbF9zdHlsZT09J+S4iuS4i+W4g+WxgCdcIj5cclxuXHRcdFx0XHRcdFx0XHQ8dGV4dCBjbGFzcz1cInR4X3RpdGxlXCIgOnN0eWxlPVwieydmb250LWZhbWlseSc6Y2xhc3NhdHRyLkZvbnQuTmFtZT9jbGFzc2F0dHIuRm9udC5OYW1lOidpbml0aWFsJywnZm9udC1zaXplJzpjbGFzc2F0dHIuRm9udC5TaXplP2NsYXNzYXR0ci5Gb250LlNpemU6J2luaXRpYWwnLCdmb250LXdlaWdodCc6Y2xhc3NhdHRyLkZvbnQuQm9sZD8nYm9sZCc6J2luaXRpYWwnLCdmb250LXN0eWxlJzpjbGFzc2F0dHIuRm9udC5UaWx0PydpdGFsaWMnOidpbml0aWFsJywndGV4dC1kZWNvcmF0aW9uJzpjbGFzc2F0dHIuRm9udC5VbmRlcmxpbmU/J3VuZGVybGluZSc6J2luaXRpYWwnLCdiYWNrZ3JvdW5kLWNvbG9yJzpjbGFzc2F0dHIuRm9udC5Ca19Db2xvciwnY29sb3InOmNsYXNzYXR0ci5Gb250LlRleHRfQ29sb3IsJ3dpZHRoJzpjbGFzc2F0dHIudGl0bGVfcF93ZGl0aCsnJSd9XCI+PGkgY2xhc3M9XCJpX3Rpc2hpXCIgdi1pZj1cImF0dHIubm90ZW1wdHk9PXRydWUgfHwgYXR0ci5Ob3RFbXB0eT09JzEnXCI+KjwvaT57e2F0dHIuRGlzcE5hbWV9fTo8L3RleHQ+XHJcblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cInRleHQtcmlnaHRcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDxhIGNsYXNzPVwiY2xhc3NfYXR0cl9hZGRfcGVyXCIgQHRhcD1cImNsYXNzQXR0cl9BZGRQZXIoaW5kZXgsaWluZGV4KVwiPjxpIGNsYXNzPVwiYWNlLWljb24gZmEgZmEtcGx1cy1jaXJjbGVcIj48L2k+PC9hPlxyXG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdDxpbnB1dCB0eXBlPVwidGV4dFwiIDp2YWx1ZT1cImF0dHIuVmFsdWVcIiA6c3R5bGU9XCJ7J3dpZHRoJzphdHRyLldpZHRofVwiIGRpc2FibGVkPVwidHJ1ZVwiID5cclxuXHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0XHQ8dmlldyB2LWlmPVwiY2xhc3NhdHRyLmNvbnRyb2xfc3R5bGU9PSflt6blj7PluIPlsYAnXCI+XHJcblx0XHRcdFx0XHRcdFx0PHAgY2xhc3M9XCJ0eF90aXRsZTJcIiA6c3R5bGU9XCJ7J2ZvbnQtZmFtaWx5JzpjbGFzc2F0dHIuRm9udC5OYW1lP2NsYXNzYXR0ci5Gb250Lk5hbWU6J2luaXRpYWwnLCdmb250LXNpemUnOmNsYXNzYXR0ci5Gb250LlNpemU/Y2xhc3NhdHRyLkZvbnQuU2l6ZTonaW5pdGlhbCcsJ2ZvbnQtd2VpZ2h0JzpjbGFzc2F0dHIuRm9udC5Cb2xkPydib2xkJzonaW5pdGlhbCcsJ2ZvbnQtc3R5bGUnOmNsYXNzYXR0ci5Gb250LlRpbHQ/J2l0YWxpYyc6J2luaXRpYWwnLCd0ZXh0LWRlY29yYXRpb24nOmNsYXNzYXR0ci5Gb250LlVuZGVybGluZT8ndW5kZXJsaW5lJzonaW5pdGlhbCcsJ2JhY2tncm91bmQtY29sb3InOmNsYXNzYXR0ci5Gb250LkJrX0NvbG9yLCdjb2xvcic6Y2xhc3NhdHRyLkZvbnQuVGV4dF9Db2xvciwnd2lkdGgnOmNsYXNzYXR0ci50aXRsZV9wX3dkaXRoKyclJ31cIj48aSBjbGFzcz1cImlfdGlzaGlcIiB2LWlmPVwiYXR0ci5ub3RlbXB0eT09dHJ1ZSB8fCBhdHRyLk5vdEVtcHR5PT0nMSdcIj4qPC9pPnt7YXR0ci5EaXNwTmFtZX19OjwvcD5cclxuXHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImF0dHJfZmllbGRcIiA6dmFsdWU9XCJhdHRyLlZhbHVlXCIgOnN0eWxlPVwieyd3aWR0aCc6IGF0dHIuV2lkdGguc3BsaXQoJyUnKVswXSAtIGNsYXNzYXR0ci50aXRsZV9wX3dkaXRoIC0gKGF0dHIubm90ZW1wdHk9PXRydWUgfHwgYXR0ci5Ob3RFbXB0eT09JzEnPzEwOjUpIC0gOSArJyUnfVwiIGRpc2FibGVkPVwidHJ1ZVwiID5cclxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwidGV4dC1yaWdodDJcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDxhIGNsYXNzPVwiY2xhc3NfYXR0cl9hZGRfcGVyXCIgQHRhcD1cImNsYXNzQXR0cl9BZGRQZXIoaW5kZXgsaWluZGV4KVwiPjxpIGNsYXNzPVwiYWNlLWljb24gZmEgZmEtcGx1cy1jaXJjbGVcIj48L2k+PC9hPlxyXG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHQ8dmlldyBjbGFzcz1cImZvcm0tZ3JvdXBcIiB2LWlmPVwiYXR0ci5UeXBlPT0n5byV55So6aG555uuJ1wiIDpzdHlsZT1cInsnZGlzcGxheSc6YXR0ci5oaWRkZW4gPT0gJ1RydWUnPydub25lJzonJ31cIj5cclxuXHRcdFx0XHRcdFx0PHZpZXcgdi1pZj1cImNsYXNzYXR0ci5jb250cm9sX3N0eWxlPT0n5LiK5LiL5biD5bGAJ1wiPlxyXG5cdFx0XHRcdFx0XHRcdDx0ZXh0IGNsYXNzPVwidHhfdGl0bGVcIiA6c3R5bGU9XCJ7J2ZvbnQtZmFtaWx5JzpjbGFzc2F0dHIuRm9udC5OYW1lP2NsYXNzYXR0ci5Gb250Lk5hbWU6J2luaXRpYWwnLCdmb250LXNpemUnOmNsYXNzYXR0ci5Gb250LlNpemU/Y2xhc3NhdHRyLkZvbnQuU2l6ZTonaW5pdGlhbCcsJ2ZvbnQtd2VpZ2h0JzpjbGFzc2F0dHIuRm9udC5Cb2xkPydib2xkJzonaW5pdGlhbCcsJ2ZvbnQtc3R5bGUnOmNsYXNzYXR0ci5Gb250LlRpbHQ/J2l0YWxpYyc6J2luaXRpYWwnLCd0ZXh0LWRlY29yYXRpb24nOmNsYXNzYXR0ci5Gb250LlVuZGVybGluZT8ndW5kZXJsaW5lJzonaW5pdGlhbCcsJ2JhY2tncm91bmQtY29sb3InOmNsYXNzYXR0ci5Gb250LkJrX0NvbG9yLCdjb2xvcic6Y2xhc3NhdHRyLkZvbnQuVGV4dF9Db2xvciwnd2lkdGgnOmNsYXNzYXR0ci50aXRsZV9wX3dkaXRoKyclJ31cIj48aSBjbGFzcz1cImlfdGlzaGlcIiB2LWlmPVwiYXR0ci5ub3RlbXB0eT09dHJ1ZSB8fCBhdHRyLk5vdEVtcHR5PT0nMSdcIj4qPC9pPnt7YXR0ci5EaXNwTmFtZX19OjwvdGV4dD5cclxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwidGV4dC1yaWdodFwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0PGEgaHJlZj1cIiNcIiBjbGFzcz1cImNsYXNzX2F0dHJfYWRkX3ByalwiIEB0YXA9XCJjbGFzc0F0dHJfQWRkUHJqKGluZGV4LGlpbmRleClcIj48aSBjbGFzcz1cImFjZS1pY29uIGZhIGZhLXBsdXMtY2lyY2xlXCI+PC9pPjwvYT5cclxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInRleHRcIiA6dmFsdWU9XCJhdHRyLlZhbHVlXCIgOnN0eWxlPVwieyd3aWR0aCc6YXR0ci5XaWR0aH1cIiBkaXNhYmxlZD1cInRydWVcIiA+XHJcblx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdFx0PHZpZXcgdi1pZj1cImNsYXNzYXR0ci5jb250cm9sX3N0eWxlPT0n5bem5Y+z5biD5bGAJ1wiPlxyXG5cdFx0XHRcdFx0XHRcdDxwIGNsYXNzPVwidHhfdGl0bGUyXCIgOnN0eWxlPVwieydmb250LWZhbWlseSc6Y2xhc3NhdHRyLkZvbnQuTmFtZT9jbGFzc2F0dHIuRm9udC5OYW1lOidpbml0aWFsJywnZm9udC1zaXplJzpjbGFzc2F0dHIuRm9udC5TaXplP2NsYXNzYXR0ci5Gb250LlNpemU6J2luaXRpYWwnLCdmb250LXdlaWdodCc6Y2xhc3NhdHRyLkZvbnQuQm9sZD8nYm9sZCc6J2luaXRpYWwnLCdmb250LXN0eWxlJzpjbGFzc2F0dHIuRm9udC5UaWx0PydpdGFsaWMnOidpbml0aWFsJywndGV4dC1kZWNvcmF0aW9uJzpjbGFzc2F0dHIuRm9udC5VbmRlcmxpbmU/J3VuZGVybGluZSc6J2luaXRpYWwnLCdiYWNrZ3JvdW5kLWNvbG9yJzpjbGFzc2F0dHIuRm9udC5Ca19Db2xvciwnY29sb3InOmNsYXNzYXR0ci5Gb250LlRleHRfQ29sb3IsJ3dpZHRoJzpjbGFzc2F0dHIudGl0bGVfcF93ZGl0aCsnJSd9XCI+PGkgY2xhc3M9XCJpX3Rpc2hpXCIgdi1pZj1cImF0dHIubm90ZW1wdHk9PXRydWUgfHwgYXR0ci5Ob3RFbXB0eT09JzEnXCI+KjwvaT57e2F0dHIuRGlzcE5hbWV9fTo8L3A+XHJcblx0XHRcdFx0XHRcdFx0PGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJhdHRyX2ZpZWxkXCIgOnZhbHVlPVwiYXR0ci5WYWx1ZVwiIDpzdHlsZT1cInsnd2lkdGgnOiBhdHRyLldpZHRoLnNwbGl0KCclJylbMF0gLSBjbGFzc2F0dHIudGl0bGVfcF93ZGl0aCAtIChhdHRyLm5vdGVtcHR5PT10cnVlIHx8IGF0dHIuTm90RW1wdHk9PScxJz8xMDo1KSAtIDkgKyclJ31cIiBkaXNhYmxlZD1cInRydWVcIiA+XHJcblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cInRleHQtcmlnaHQyXCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8YSBjbGFzcz1cImNsYXNzX2F0dHJfYWRkX3ByalwiIEB0YXA9XCJjbGFzc0F0dHJfQWRkUHJqKGluZGV4LGlpbmRleClcIj48aSBjbGFzcz1cImFjZS1pY29uIGZhIGZhLXBsdXMtY2lyY2xlXCI+PC9pPjwvYT5cclxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0PHZpZXcgY2xhc3M9XCJmb3JtLWdyb3VwXCIgdi1pZj1cImF0dHIuVHlwZT09J+e8lueggSdcIiA6c3R5bGU9XCJ7J2Rpc3BsYXknOmF0dHIuaGlkZGVuID09ICdUcnVlJz8nbm9uZSc6Jyd9XCI+XHJcblx0XHRcdFx0XHRcdDx2aWV3IHYtaWY9XCJjbGFzc2F0dHIuY29udHJvbF9zdHlsZT09J+S4iuS4i+W4g+WxgCdcIj5cclxuXHRcdFx0XHRcdFx0XHQ8dGV4dCBjbGFzcz1cInR4X3RpdGxlXCIgOnN0eWxlPVwieydmb250LWZhbWlseSc6Y2xhc3NhdHRyLkZvbnQuTmFtZT9jbGFzc2F0dHIuRm9udC5OYW1lOidpbml0aWFsJywnZm9udC1zaXplJzpjbGFzc2F0dHIuRm9udC5TaXplP2NsYXNzYXR0ci5Gb250LlNpemU6J2luaXRpYWwnLCdmb250LXdlaWdodCc6Y2xhc3NhdHRyLkZvbnQuQm9sZD8nYm9sZCc6J2luaXRpYWwnLCdmb250LXN0eWxlJzpjbGFzc2F0dHIuRm9udC5UaWx0PydpdGFsaWMnOidpbml0aWFsJywndGV4dC1kZWNvcmF0aW9uJzpjbGFzc2F0dHIuRm9udC5VbmRlcmxpbmU/J3VuZGVybGluZSc6J2luaXRpYWwnLCdiYWNrZ3JvdW5kLWNvbG9yJzpjbGFzc2F0dHIuRm9udC5Ca19Db2xvciwnY29sb3InOmNsYXNzYXR0ci5Gb250LlRleHRfQ29sb3IsJ3dpZHRoJzpjbGFzc2F0dHIudGl0bGVfcF93ZGl0aCsnJSd9XCI+PGkgY2xhc3M9XCJpX3Rpc2hpXCIgdi1pZj1cImF0dHIubm90ZW1wdHk9PXRydWUgfHwgYXR0ci5Ob3RFbXB0eT09JzEnXCI+KjwvaT57e2F0dHIuRGlzcE5hbWV9fTo8L3RleHQ+XHJcblx0XHRcdFx0XHRcdFx0PGlucHV0IHR5cGU9XCJ0ZXh0XCIgOmRhdGEtaW5kZXg9XCJpbmRleFwiIDpkYXRhLWlpbmRleD1cImlpbmRleFwiIDpzdHlsZT1cInsnd2lkdGgnOmF0dHIuV2lkdGh9XCIgOmRpc2FibGVkPVwiYXR0ci5lZGl0P2ZhbHNlOnRydWVcIiA+XHJcblx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdFx0PHZpZXcgdi1pZj1cImNsYXNzYXR0ci5jb250cm9sX3N0eWxlPT0n5bem5Y+z5biD5bGAJ1wiPlxyXG5cdFx0XHRcdFx0XHRcdDxwIGNsYXNzPVwidHhfdGl0bGUyXCIgOnN0eWxlPVwieydmb250LWZhbWlseSc6Y2xhc3NhdHRyLkZvbnQuTmFtZT9jbGFzc2F0dHIuRm9udC5OYW1lOidpbml0aWFsJywnZm9udC1zaXplJzpjbGFzc2F0dHIuRm9udC5TaXplP2NsYXNzYXR0ci5Gb250LlNpemU6J2luaXRpYWwnLCdmb250LXdlaWdodCc6Y2xhc3NhdHRyLkZvbnQuQm9sZD8nYm9sZCc6J2luaXRpYWwnLCdmb250LXN0eWxlJzpjbGFzc2F0dHIuRm9udC5UaWx0PydpdGFsaWMnOidpbml0aWFsJywndGV4dC1kZWNvcmF0aW9uJzpjbGFzc2F0dHIuRm9udC5VbmRlcmxpbmU/J3VuZGVybGluZSc6J2luaXRpYWwnLCdiYWNrZ3JvdW5kLWNvbG9yJzpjbGFzc2F0dHIuRm9udC5Ca19Db2xvciwnY29sb3InOmNsYXNzYXR0ci5Gb250LlRleHRfQ29sb3IsJ3dpZHRoJzpjbGFzc2F0dHIudGl0bGVfcF93ZGl0aCsnJSd9XCI+e3thdHRyLkRpc3BOYW1lfX06PC9wPlxyXG5cdFx0XHRcdFx0XHRcdDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiYXR0cl9maWVsZFwiIDpkYXRhLWluZGV4PVwiaW5kZXhcIiA6ZGF0YS1paW5kZXg9XCJpaW5kZXhcIiA6c3R5bGU9XCJ7J3dpZHRoJzogYXR0ci5XaWR0aC5zcGxpdCgnJScpWzBdIC0gY2xhc3NhdHRyLnRpdGxlX3Bfd2RpdGggLSAoYXR0ci5ub3RlbXB0eT09dHJ1ZSB8fCBhdHRyLk5vdEVtcHR5PT0nMSc/MTA6NSkgKyclJ31cIiA6ZGlzYWJsZWQ9XCJhdHRyLmVkaXQ/ZmFsc2U6dHJ1ZVwiID5cclxuXHRcdFx0XHRcdFx0XHQ8aSBjbGFzcz1cImlfdGlzaGlcIiB2LWlmPVwiYXR0ci5ub3RlbXB0eT09dHJ1ZSB8fCBhdHRyLk5vdEVtcHR5PT0nMSdcIj4qPC9pPlxyXG5cdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHQ8dmlldyBjbGFzcz1cImZvcm0tZ3JvdXBcIiB2LWlmPVwiYXR0ci5UeXBlPT0n55yB5biC5Yy6J1wiIDpzdHlsZT1cInsnZGlzcGxheSc6YXR0ci5oaWRkZW4gPT0gJ1RydWUnPydub25lJzonJ31cIj5cclxuXHRcdFx0XHRcdFx0PHZpZXcgdi1pZj1cImNsYXNzYXR0ci5jb250cm9sX3N0eWxlPT0n5LiK5LiL5biD5bGAJ1wiPlxyXG5cdFx0XHRcdFx0XHRcdDx0ZXh0IGNsYXNzPVwidHhfdGl0bGVcIiA6c3R5bGU9XCJ7J2ZvbnQtZmFtaWx5JzpjbGFzc2F0dHIuRm9udC5OYW1lP2NsYXNzYXR0ci5Gb250Lk5hbWU6J2luaXRpYWwnLCdmb250LXNpemUnOmNsYXNzYXR0ci5Gb250LlNpemU/Y2xhc3NhdHRyLkZvbnQuU2l6ZTonaW5pdGlhbCcsJ2ZvbnQtd2VpZ2h0JzpjbGFzc2F0dHIuRm9udC5Cb2xkPydib2xkJzonaW5pdGlhbCcsJ2ZvbnQtc3R5bGUnOmNsYXNzYXR0ci5Gb250LlRpbHQ/J2l0YWxpYyc6J2luaXRpYWwnLCd0ZXh0LWRlY29yYXRpb24nOmNsYXNzYXR0ci5Gb250LlVuZGVybGluZT8ndW5kZXJsaW5lJzonaW5pdGlhbCcsJ2JhY2tncm91bmQtY29sb3InOmNsYXNzYXR0ci5Gb250LkJrX0NvbG9yLCdjb2xvcic6Y2xhc3NhdHRyLkZvbnQuVGV4dF9Db2xvciwnd2lkdGgnOmNsYXNzYXR0ci50aXRsZV9wX3dkaXRoKyclJ31cIj48aSBjbGFzcz1cImlfdGlzaGlcIiB2LWlmPVwiYXR0ci5ub3RlbXB0eT09dHJ1ZSB8fCBhdHRyLk5vdEVtcHR5PT0nMSdcIj4qPC9pPnt7YXR0ci5EaXNwTmFtZX19OjwvdGV4dD5cclxuXHRcdFx0XHRcdFx0XHQ8cGlja2VyQWRkcmVzcyBjbGFzcz1cImRhdGVfaXB1dFwiIEBjaGFuZ2U9XCJhZGRyZXNzY2hhbmdlXCIgOmRhdGEtaW5kZXg9XCJpbmRleFwiIDpkYXRhLWlpbmRleD1cImlpbmRleFwiIDpzdHlsZT1cInsnd2lkdGgnOmF0dHIuV2lkdGh9XCIgPnt7YXR0ci5WYWx1ZX19PC9waWNrZXJBZGRyZXNzPlxyXG5cdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHRcdDx2aWV3IHYtaWY9XCJjbGFzc2F0dHIuY29udHJvbF9zdHlsZT09J+W3puWPs+W4g+WxgCdcIj5cclxuXHRcdFx0XHRcdFx0XHQ8cCBjbGFzcz1cInR4X3RpdGxlMlwiIDpzdHlsZT1cInsnZm9udC1mYW1pbHknOmNsYXNzYXR0ci5Gb250Lk5hbWU/Y2xhc3NhdHRyLkZvbnQuTmFtZTonaW5pdGlhbCcsJ2ZvbnQtc2l6ZSc6Y2xhc3NhdHRyLkZvbnQuU2l6ZT9jbGFzc2F0dHIuRm9udC5TaXplOidpbml0aWFsJywnZm9udC13ZWlnaHQnOmNsYXNzYXR0ci5Gb250LkJvbGQ/J2JvbGQnOidpbml0aWFsJywnZm9udC1zdHlsZSc6Y2xhc3NhdHRyLkZvbnQuVGlsdD8naXRhbGljJzonaW5pdGlhbCcsJ3RleHQtZGVjb3JhdGlvbic6Y2xhc3NhdHRyLkZvbnQuVW5kZXJsaW5lPyd1bmRlcmxpbmUnOidpbml0aWFsJywnYmFja2dyb3VuZC1jb2xvcic6Y2xhc3NhdHRyLkZvbnQuQmtfQ29sb3IsJ2NvbG9yJzpjbGFzc2F0dHIuRm9udC5UZXh0X0NvbG9yLCd3aWR0aCc6Y2xhc3NhdHRyLnRpdGxlX3Bfd2RpdGgrJyUnfVwiPjxpIGNsYXNzPVwiaV90aXNoaVwiIHYtaWY9XCJhdHRyLm5vdGVtcHR5PT10cnVlIHx8IGF0dHIuTm90RW1wdHk9PScxJ1wiPio8L2k+e3thdHRyLkRpc3BOYW1lfX06PC9wPlxyXG5cdFx0XHRcdFx0XHRcdDxwaWNrZXJBZGRyZXNzIGNsYXNzPVwiZGF0ZV9pcHV0IGF0dHJfZmllbGRcIiBAY2hhbmdlPVwiYWRkcmVzc2NoYW5nZVwiIDpkYXRhLWluZGV4PVwiaW5kZXhcIiA6ZGF0YS1paW5kZXg9XCJpaW5kZXhcIiA6c3R5bGU9XCJ7J3dpZHRoJzogYXR0ci5XaWR0aC5zcGxpdCgnJScpWzBdIC0gY2xhc3NhdHRyLnRpdGxlX3Bfd2RpdGggLSAoYXR0ci5ub3RlbXB0eT09dHJ1ZSB8fCBhdHRyLk5vdEVtcHR5PT0nMSc/MTA6NSkgKyclJ31cIj57e2F0dHIuVmFsdWV9fTwvcGlja2VyQWRkcmVzcz5cclxuXHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHQ8L2Rpdj5cclxuXHRcdDwvdmlldz5cclxuXHRcdDx2aWV3IGNsYXNzPVwidi1hcmVhIGNsYXNzX2F0dHJfYm9keVwiPlxyXG5cdFx0XHQ8dmlldyBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuXHRcdFx0XHQ8IS0tIOW3puWPs+W4g+WxgCAtLT5cclxuXHRcdFx0XHQ8cCBjbGFzcz1cInR4X3RpdGxlMlwiID57e3BhcmFtLlNjYW5fQ29kZS5OYW1lfX06PC9wPlxyXG5cdFx0XHRcdDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiYXR0cl9maWVsZFwiIDp2YWx1ZT1cInNjYW5Db2RlVmFsXCIgQGZvY3VzPVwic2Nhbl9vbnRhcFwiIDpzdHlsZT1cInBhcmFtLlNjYW5fQ29kZS5IYXZlX1NlbGVjdF9CdXR0b249PXRydWU/J3dpZHRoOiAnKygxMDAtKHBhcmFtLlNjYW5fQ29kZS5OYW1lLmxlbmd0aCAqIDUpLTE0KSsnJTsnOid3aWR0aDogJysoMTAwLShwYXJhbS5TY2FuX0NvZGUuTmFtZS5sZW5ndGggKiA1KS01KSsnJTsnXCI+XHJcblx0XHRcdFx0PGRpdiBjbGFzcz1cInRleHQtcmlnaHQyXCIgdi1pZj1cInBhcmFtLlNjYW5fQ29kZS5IYXZlX1NlbGVjdF9CdXR0b249PXRydWVcIj5cclxuXHRcdFx0XHRcdDxhIEB0YXA9XCJzY2FuX2NsYXNzQXR0cl9leHRCdXR0b24oKVwiID48aSBjbGFzcz1cImFjZS1pY29uIGZhXCIgOmNsYXNzPVwicGFyYW0uU2Nhbl9Db2RlLkltZz9wYXJhbS5TY2FuX0NvZGUuSW1nOidmYS1wbHVzLWNpcmNsZSdcIj48L2k+PC9hPlxyXG5cdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdDwhLS0g5LiK5LiL5biD5bGAIC0tPlxyXG5cdFx0XHRcdDwhLS0gPHRleHQgY2xhc3M9XCJ0eF90aXRsZVwiPnt7cGFyYW0uU2Nhbl9Db2RlLk5hbWV9fe+8mjwvdGV4dD4gXHJcblx0XHRcdFx0PGRpdiBjbGFzcz1cInRleHQtcmlnaHRcIiB2LWlmPVwicGFyYW0uU2Nhbl9Db2RlLkhhdmVfU2VsZWN0X0J1dHRvbj09dHJ1ZVwiPiAgXHJcblx0XHRcdFx0XHQ8YSBAdGFwPVwibXNfY2xhc3NBdHRyX2V4dEJ1dHRvbigpXCI+PGkgY2xhc3M9XCJhY2UtaWNvbiBmYVwiIDpjbGFzcz1cInBhcmFtLlNjYW5fQ29kZS5JbWc/cGFyYW0uU2Nhbl9Db2RlLkltZzonZmEtcGx1cy1jaXJjbGUnXCI+PC9pPjwvYT5cclxuXHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHQ8aW5wdXQgdHlwZT1cInRleHRcIiB2YWx1ZT1cIlwiID4gLS0+XHJcblx0XHRcdDwvdmlldz5cclxuXHRcdDwvdmlldz5cclxuXHRcdFxyXG5cdFx0PHZpZXcgY2xhc3M9XCJ2LXBhbmVsXCI+XHJcblx0XHRcdDxkaXYgY2xhc3M9XCJwYW5lbF90aXRsZVwiPnt7cGFyYW0uU3ViX0Nscy5UaXRsZX19PC9kaXY+XHJcblx0XHRcdDx2aWV3IGNsYXNzPVwidi1wYW5lbGxpc3RcIiB2LWZvcj1cIihzdWJwYW5lbCxpbmRleCkgaW4gc3ViUGFuZWxMaXN0XCI+XHJcblx0XHRcdFx0PHZpZXcgY2xhc3M9XCJ2LWFyZWFcIiB2LWZvcj1cIihzdWJjbGFzc2F0dHIsaW5kZXgpIGluIHN1YnBhbmVsLnN1YkNsYXNzQXR0clwiPlxyXG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cImNsYXNzX2F0dHJfdGl0bGVcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCI+XHJcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJ0aXRsZV9saW5lXCI+PC9kaXY+XHJcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJ0aXRsZV9pY29uXCIgOnN0eWxlPVwieydiYWNrZ3JvdW5kLWNvbG9yJzpzdWJjbGFzc2F0dHIuQmtDb2xvcn1cIj4gICBcclxuXHRcdFx0XHRcdFx0XHQ8aSBjbGFzcz1cImFjZS1pY29uIGZhXCIgOmNsYXNzPVwic3ViY2xhc3NhdHRyLkltZ0ZvbnRTdHlsZVwiPjwvaT5cclxuXHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwidGl0bGVcIj57e3N1YmNsYXNzYXR0ci5OYW1lfX08L3NwYW4+XHJcblx0XHRcdFx0XHRcdDxhIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiBjbGFzcz1cImFycm93XCIgQHRhcD1cIm9uYXJyb3coaW5kZXgsc3ViY2xhc3NhdHRyLk9wZW4pXCI+PGkgY2xhc3M9XCJhY2UtaWNvbiBmYSBcIjpjbGFzcz1cInN1YmNsYXNzYXR0ci5PcGVuPydmYS1hbmdsZS1kb3duJzonZmEtYW5nbGUtdXAnXCI+PC9pPjwvYT5cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cInN1YmNsYXNzX2F0dHJfYm9keVwiIDpzdHlsZT1cInsnZGlzcGxheSc6c3ViY2xhc3NhdHRyLk9wZW4/J2Jsb2NrJzonbm9uZSd9XCI+XHJcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJkdl9maWVsZF9kaXZcIiB2LWZvcj1cIihhdHRyLGlpbmRleCkgaW4gc3ViY2xhc3NhdHRyLkF0dHJcIj5cclxuXHRcdFx0XHRcdFx0XHQ8dmlldyBjbGFzcz1cImZvcm0tZ3JvdXBcIiB2LWlmPVwiYXR0ci5UeXBlPT0n5a2X56ym5LiyJyB8fCBhdHRyLlR5cGU9PSflj6/lj5jplb/lrZfnrKbkuLInIHx8IGF0dHIuVHlwZT09J+aVtOaVsCcgfHwgYXR0ci5UeXBlPT0n5rWu54K55pWwJ1wiIDpzdHlsZT1cInsnZGlzcGxheSc6YXR0ci5oaWRkZW4gPT0gJ1RydWUnPydub25lJzonJ31cIj5cclxuXHRcdFx0XHRcdFx0XHRcdDx2aWV3IHYtaWY9XCJzdWJjbGFzc2F0dHIuY29udHJvbF9zdHlsZT09J+S4iuS4i+W4g+WxgCdcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHRleHQgY2xhc3M9XCJ0eF90aXRsZVwiIDpzdHlsZT1cInsnZm9udC1mYW1pbHknOnN1YmNsYXNzYXR0ci5Gb250Lk5hbWU/c3ViY2xhc3NhdHRyLkZvbnQuTmFtZTonaW5pdGlhbCcsJ2ZvbnQtc2l6ZSc6c3ViY2xhc3NhdHRyLkZvbnQuU2l6ZT9zdWJjbGFzc2F0dHIuRm9udC5TaXplOidpbml0aWFsJywnZm9udC13ZWlnaHQnOnN1YmNsYXNzYXR0ci5Gb250LkJvbGQ/J2JvbGQnOidpbml0aWFsJywnZm9udC1zdHlsZSc6c3ViY2xhc3NhdHRyLkZvbnQuVGlsdD8naXRhbGljJzonaW5pdGlhbCcsJ3RleHQtZGVjb3JhdGlvbic6c3ViY2xhc3NhdHRyLkZvbnQuVW5kZXJsaW5lPyd1bmRlcmxpbmUnOidpbml0aWFsJywnYmFja2dyb3VuZC1jb2xvcic6c3ViY2xhc3NhdHRyLkZvbnQuQmtfQ29sb3IsJ2NvbG9yJzpzdWJjbGFzc2F0dHIuRm9udC5UZXh0X0NvbG9yLCd3aWR0aCc6c3ViY2xhc3NhdHRyLnRpdGxlX3Bfd2RpdGggKyclJ31cIj48aSBjbGFzcz1cImlfdGlzaGlcIiB2LWlmPVwiYXR0ci5ub3RlbXB0eT09dHJ1ZSB8fCBhdHRyLk5vdEVtcHR5PT0nMSdcIj4qPC9pPnt7YXR0ci5EaXNwTmFtZX19OjwvdGV4dD4gIDwhLS0gYXR0ci5Ob3RFbXB0eT09JzEnIC0tPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwidGV4dC1yaWdodFwiIHYtaWY9XCJhdHRyLmV4dF9idXR0b249PXRydWVcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8YSBAdGFwPVwiY2xhc3NBdHRyX2V4dEJ1dHRvbihpbmRleCxpaW5kZXgpXCIgPjxpIGNsYXNzPVwiYWNlLWljb24gZmEgZmEtcGx1cy1jaXJjbGVcIj48L2k+PC9hPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0IHR5cGU9XCJ0ZXh0XCIgOnZhbHVlPVwiYXR0ci5WYWx1ZVwiIEBmb2N1cz1cIm9udGFwXCIgQGJsdXI9XCJvbmV2ZW50XCIgdi1pZj1cImF0dHIuSGVpZ2h0PT0nMSdcIiA6ZGF0YS1pbmRleD1cImluZGV4XCIgOmRhdGEtaWluZGV4PVwiaWluZGV4XCIgOnN0eWxlPVwieyd3aWR0aCc6YXR0ci5XaWR0aC5zcGxpdCgnJScpWzBdIC0gMi41ICsnJSd9XCIgOmRpc2FibGVkPVwiYXR0ci5lZGl0P2ZhbHNlOnRydWVcIiA+IDwhLS0gPT0nZmxhc2UnP3RydWU6ZmFsc2UgLS0+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx0ZXh0YXJlYSA6dmFsdWU9XCJhdHRyLlZhbHVlXCIgQGZvY3VzPVwib250YXBcIiBAYmx1cj1cIm9uZXZlbnRcIiB2LWVsc2UtaWY9XCJhdHRyLkhlaWdodD09JzInXCIgOmRhdGEtaW5kZXg9XCJpbmRleFwiOmRhdGEtaWluZGV4PVwiaWluZGV4XCIgc3R5bGU9XCJoZWlnaHQ6NjBweDtcIiA6c3R5bGU9XCJ7J3dpZHRoJzphdHRyLldpZHRoLnNwbGl0KCclJylbMF0gLSAyLjUgKyclJ31cIiA6ZGlzYWJsZWQ9XCJhdHRyLmVkaXQ/ZmFsc2U6dHJ1ZVwiPjwvdGV4dGFyZWE+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx0ZXh0YXJlYSA6dmFsdWU9XCJhdHRyLlZhbHVlXCIgQGZvY3VzPVwib250YXBcIiBAYmx1cj1cIm9uZXZlbnRcIiB2LWVsc2UtaWY9XCJhdHRyLkhlaWdodD09JzMnXCIgOmRhdGEtaW5kZXg9XCJpbmRleFwiOmRhdGEtaWluZGV4PVwiaWluZGV4XCIgc3R5bGU9XCJoZWlnaHQ6OTBweDtcIiA6c3R5bGU9XCJ7J3dpZHRoJzphdHRyLldpZHRoLnNwbGl0KCclJylbMF0gLSAyLjUgKyclJ31cIiA6ZGlzYWJsZWQ9XCJhdHRyLmVkaXQ/ZmFsc2U6dHJ1ZVwiPjwvdGV4dGFyZWE+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dmlldyB2LWlmPVwic3ViY2xhc3NhdHRyLmNvbnRyb2xfc3R5bGU9PSflt6blj7PluIPlsYAnXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxwIGNsYXNzPVwidHhfdGl0bGUyXCIgOnN0eWxlPVwieydmb250LWZhbWlseSc6c3ViY2xhc3NhdHRyLkZvbnQuTmFtZT9zdWJjbGFzc2F0dHIuRm9udC5OYW1lOidpbml0aWFsJywnZm9udC1zaXplJzpzdWJjbGFzc2F0dHIuRm9udC5TaXplP3N1YmNsYXNzYXR0ci5Gb250LlNpemU6J2luaXRpYWwnLCdmb250LXdlaWdodCc6c3ViY2xhc3NhdHRyLkZvbnQuQm9sZD8nYm9sZCc6J2luaXRpYWwnLCdmb250LXN0eWxlJzpzdWJjbGFzc2F0dHIuRm9udC5UaWx0PydpdGFsaWMnOidpbml0aWFsJywndGV4dC1kZWNvcmF0aW9uJzpzdWJjbGFzc2F0dHIuRm9udC5VbmRlcmxpbmU/J3VuZGVybGluZSc6J2luaXRpYWwnLCdiYWNrZ3JvdW5kLWNvbG9yJzpzdWJjbGFzc2F0dHIuRm9udC5Ca19Db2xvciwnY29sb3InOnN1YmNsYXNzYXR0ci5Gb250LlRleHRfQ29sb3IsJ3dpZHRoJzpzdWJjbGFzc2F0dHIudGl0bGVfcF93ZGl0aCArJyUnfVwiPjxpIGNsYXNzPVwiaV90aXNoaVwiIHYtaWY9XCJhdHRyLm5vdGVtcHR5PT10cnVlIHx8IGF0dHIuTm90RW1wdHk9PScxJ1wiPio8L2k+e3thdHRyLkRpc3BOYW1lfX06PC9wPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImF0dHJfZmllbGRcIiA6dmFsdWU9XCJhdHRyLlZhbHVlXCIgQGZvY3VzPVwib250YXBcIiBAYmx1cj1cIm9uZXZlbnRcIiB2LWlmPVwiYXR0ci5IZWlnaHQ9PScxJ1wiIDpkYXRhLWluZGV4PVwiaW5kZXhcIiA6ZGF0YS1paW5kZXg9XCJpaW5kZXhcIiA6c3R5bGU9XCJ7J3dpZHRoJzogYXR0ci5XaWR0aC5zcGxpdCgnJScpWzBdIC0gc3ViY2xhc3NhdHRyLnRpdGxlX3Bfd2RpdGggLSA3IC0gKGF0dHIuZXh0X2J1dHRvbj09dHJ1ZT85OjApICsnJSd9XCIgOmRpc2FibGVkPVwiYXR0ci5lZGl0P2ZhbHNlOnRydWVcIiA+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx0ZXh0YXJlYSBjbGFzcz1cImF0dHJfZmllbGRcIiA6dmFsdWU9XCJhdHRyLlZhbHVlXCIgQGZvY3VzPVwib250YXBcIiBAYmx1cj1cIm9uZXZlbnRcIiB2LWVsc2UtaWY9XCJhdHRyLkhlaWdodD09JzInXCIgOmRhdGEtaW5kZXg9XCJpbmRleFwiOmRhdGEtaWluZGV4PVwiaWluZGV4XCIgc3R5bGU9XCJoZWlnaHQ6NjBweDtcIiA6c3R5bGU9XCJ7J3dpZHRoJzogYXR0ci5XaWR0aC5zcGxpdCgnJScpWzBdIC0gc3ViY2xhc3NhdHRyLnRpdGxlX3Bfd2RpdGggLSA3IC0gKGF0dHIuZXh0X2J1dHRvbj09dHJ1ZT85OjApICsnJSd9XCIgOmRpc2FibGVkPVwiYXR0ci5lZGl0P2ZhbHNlOnRydWVcIj48L3RleHRhcmVhPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dGV4dGFyZWEgY2xhc3M9XCJhdHRyX2ZpZWxkXCIgOnZhbHVlPVwiYXR0ci5WYWx1ZVwiIEBmb2N1cz1cIm9udGFwXCIgQGJsdXI9XCJvbmV2ZW50XCIgdi1lbHNlLWlmPVwiYXR0ci5IZWlnaHQ9PSczJ1wiIDpkYXRhLWluZGV4PVwiaW5kZXhcIjpkYXRhLWlpbmRleD1cImlpbmRleFwiIHN0eWxlPVwiaGVpZ2h0OjkwcHg7XCIgOnN0eWxlPVwieyd3aWR0aCc6IGF0dHIuV2lkdGguc3BsaXQoJyUnKVswXSAtIHN1YmNsYXNzYXR0ci50aXRsZV9wX3dkaXRoIC0gNyAtIChhdHRyLmV4dF9idXR0b249PXRydWU/OTowKSArJyUnfVwiIDpkaXNhYmxlZD1cImF0dHIuZWRpdD9mYWxzZTp0cnVlXCI+PC90ZXh0YXJlYT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cInRleHQtcmlnaHQyXCIgdi1pZj1cImF0dHIuZXh0X2J1dHRvbj09dHJ1ZVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxhIEB0YXA9XCJjbGFzc0F0dHJfZXh0QnV0dG9uKGluZGV4LGlpbmRleClcIiA+PGkgY2xhc3M9XCJhY2UtaWNvbiBmYSBmYS1wbHVzLWNpcmNsZVwiPjwvaT48L2E+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdFx0XHQ8dmlldyBjbGFzcz1cImZvcm0tZ3JvdXBcIiB2LWlmPVwiYXR0ci5UeXBlPT0n5biD5bCU5YC8J1wiIDpzdHlsZT1cInsnZGlzcGxheSc6YXR0ci5oaWRkZW4gPT0gJ1RydWUnPydub25lJzonJ31cIj5cclxuXHRcdFx0XHRcdFx0XHRcdDxjaGVja2JveC1ncm91cCBjbGFzcz1cImNoZWNrX3JlbWVtYmVyUHdkXCIgQGNoYW5nZT1cIm9uY2hlY2tcIiA6ZGF0YS1pc2NoZWNrPVwiYXR0ci5WYWx1ZVwiIDpkYXRhLWluZGV4PVwiaW5kZXhcIiA6ZGF0YS1paW5kZXg9XCJpaW5kZXhcIiA6c3R5bGU9XCJ7J21hcmdpbi1sZWZ0Jzogc3ViY2xhc3NhdHRyLmNvbnRyb2xfc3R5bGU9PSflt6blj7PluIPlsYAnP3N1YmNsYXNzYXR0ci50aXRsZV9wX3dkaXRoKzIgKyclJzonMTBycHgnfVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8bGFiZWw+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGNoZWNrYm94IDp2YWx1ZT1cImF0dHIuVmFsdWVcIiA6Y2hlY2tlZD1cImF0dHIuVmFsdWVcIi8+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PHRleHQ+e3thdHRyLkRpc3BOYW1lfX08aSBjbGFzcz1cImlfdGlzaGlcIiB2LWlmPVwiYXR0ci5ub3RlbXB0eT09dHJ1ZSB8fCBhdHRyLk5vdEVtcHR5PT0nMSdcIj4qPC9pPjwvdGV4dD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PC9sYWJlbD5cclxuXHRcdFx0XHRcdFx0XHRcdDwvY2hlY2tib3gtZ3JvdXA+XHJcblx0XHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0XHRcdDx2aWV3IGNsYXNzPVwiZm9ybS1ncm91cFwiIHYtaWY9XCJhdHRyLlR5cGU9PSfml6XmnJ8nIHx8IGF0dHIuVHlwZT09J+aXtumXtCdcIiA6c3R5bGU9XCJ7J2Rpc3BsYXknOmF0dHIuaGlkZGVuID09ICdUcnVlJz8nbm9uZSc6Jyd9XCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dmlldyB2LWlmPVwic3ViY2xhc3NhdHRyLmNvbnRyb2xfc3R5bGU9PSfkuIrkuIvluIPlsYAnXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx0ZXh0IGNsYXNzPVwidHhfdGl0bGVcIiA6c3R5bGU9XCJ7J2ZvbnQtZmFtaWx5JzpzdWJjbGFzc2F0dHIuRm9udC5OYW1lP3N1YmNsYXNzYXR0ci5Gb250Lk5hbWU6J2luaXRpYWwnLCdmb250LXNpemUnOnN1YmNsYXNzYXR0ci5Gb250LlNpemU/c3ViY2xhc3NhdHRyLkZvbnQuU2l6ZTonaW5pdGlhbCcsJ2ZvbnQtd2VpZ2h0JzpzdWJjbGFzc2F0dHIuRm9udC5Cb2xkPydib2xkJzonaW5pdGlhbCcsJ2ZvbnQtc3R5bGUnOnN1YmNsYXNzYXR0ci5Gb250LlRpbHQ/J2l0YWxpYyc6J2luaXRpYWwnLCd0ZXh0LWRlY29yYXRpb24nOnN1YmNsYXNzYXR0ci5Gb250LlVuZGVybGluZT8ndW5kZXJsaW5lJzonaW5pdGlhbCcsJ2JhY2tncm91bmQtY29sb3InOnN1YmNsYXNzYXR0ci5Gb250LkJrX0NvbG9yLCdjb2xvcic6c3ViY2xhc3NhdHRyLkZvbnQuVGV4dF9Db2xvciwnd2lkdGgnOnN1YmNsYXNzYXR0ci50aXRsZV9wX3dkaXRoKyclJ31cIj48aSBjbGFzcz1cImlfdGlzaGlcIiB2LWlmPVwiYXR0ci5ub3RlbXB0eT09dHJ1ZVwiPio8L2k+e3thdHRyLkRpc3BOYW1lfX06PC90ZXh0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8cGlja2VyIG1vZGU9XCJkYXRlXCIgOnZhbHVlPVwiYXR0ci5WYWx1ZVwiIEBjaGFuZ2U9XCJvbmRhdGVUaW1lXCIgY2xhc3M9XCJkYXRlX2lwdXRcIiA6ZGF0YS1pbmRleD1cImluZGV4XCIgOmRhdGEtaWluZGV4PVwiaWluZGV4XCIgOnN0eWxlPVwieyd3aWR0aCc6YXR0ci5XaWR0aC5zcGxpdCgnJScpWzBdIC0gMi41ICsnJSd9XCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdCAgIDx2aWV3IGNsYXNzPVwicGlja2VyXCI+e3thdHRyLlZhbHVlfX08L3ZpZXc+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvcGlja2VyPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0XHRcdFx0PHZpZXcgdi1pZj1cInN1YmNsYXNzYXR0ci5jb250cm9sX3N0eWxlPT0n5bem5Y+z5biD5bGAJ1wiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8cCBjbGFzcz1cInR4X3RpdGxlMlwiIDpzdHlsZT1cInsnZm9udC1mYW1pbHknOnN1YmNsYXNzYXR0ci5Gb250Lk5hbWU/c3ViY2xhc3NhdHRyLkZvbnQuTmFtZTonaW5pdGlhbCcsJ2ZvbnQtc2l6ZSc6c3ViY2xhc3NhdHRyLkZvbnQuU2l6ZT9zdWJjbGFzc2F0dHIuRm9udC5TaXplOidpbml0aWFsJywnZm9udC13ZWlnaHQnOnN1YmNsYXNzYXR0ci5Gb250LkJvbGQ/J2JvbGQnOidpbml0aWFsJywnZm9udC1zdHlsZSc6c3ViY2xhc3NhdHRyLkZvbnQuVGlsdD8naXRhbGljJzonaW5pdGlhbCcsJ3RleHQtZGVjb3JhdGlvbic6c3ViY2xhc3NhdHRyLkZvbnQuVW5kZXJsaW5lPyd1bmRlcmxpbmUnOidpbml0aWFsJywnYmFja2dyb3VuZC1jb2xvcic6c3ViY2xhc3NhdHRyLkZvbnQuQmtfQ29sb3IsJ2NvbG9yJzpzdWJjbGFzc2F0dHIuRm9udC5UZXh0X0NvbG9yLCd3aWR0aCc6c3ViY2xhc3NhdHRyLnRpdGxlX3Bfd2RpdGgrJyUnfVwiPjxpIGNsYXNzPVwiaV90aXNoaVwiIHYtaWY9XCJhdHRyLm5vdGVtcHR5PT10cnVlIHx8IGF0dHIuTm90RW1wdHk9PScxJ1wiPio8L2k+e3thdHRyLkRpc3BOYW1lfX06PC9wPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8cGlja2VyIG1vZGU9XCJkYXRlXCIgOnZhbHVlPVwiYXR0ci5WYWx1ZVwiIEBjaGFuZ2U9XCJvbmRhdGVUaW1lXCIgY2xhc3M9XCJkYXRlX2lwdXQgYXR0cl9maWVsZFwiIDpkYXRhLWluZGV4PVwiaW5kZXhcIiA6ZGF0YS1paW5kZXg9XCJpaW5kZXhcIiA6c3R5bGU9XCJ7J3dpZHRoJzogYXR0ci5XaWR0aC5zcGxpdCgnJScpWzBdIC0gc3ViY2xhc3NhdHRyLnRpdGxlX3Bfd2RpdGggLSA3ICsnJSd9XCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdCAgIDx2aWV3IGNsYXNzPVwicGlja2VyXCI+e3thdHRyLlZhbHVlfX08L3ZpZXc+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvcGlja2VyPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdFx0XHQ8dmlldyBjbGFzcz1cImZvcm0tZ3JvdXBcIiB2LWlmPVwiYXR0ci5UeXBlPT0n5a2X5YW4JyB8fCBhdHRyLlR5cGU9PSflrZflhbgt5a2X56ym5LiyJ1wiIDpzdHlsZT1cInsnZGlzcGxheSc6YXR0ci5oaWRkZW4gPT0gJ1RydWUnPydub25lJzonJ31cIj5cclxuXHRcdFx0XHRcdFx0XHRcdDx2aWV3IHYtaWY9XCJzdWJjbGFzc2F0dHIuY29udHJvbF9zdHlsZT09J+S4iuS4i+W4g+WxgCdcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHRleHQgY2xhc3M9XCJ0eF90aXRsZVwiIDpzdHlsZT1cInsnZm9udC1mYW1pbHknOnN1YmNsYXNzYXR0ci5Gb250Lk5hbWU/c3ViY2xhc3NhdHRyLkZvbnQuTmFtZTonaW5pdGlhbCcsJ2ZvbnQtc2l6ZSc6c3ViY2xhc3NhdHRyLkZvbnQuU2l6ZT9zdWJjbGFzc2F0dHIuRm9udC5TaXplOidpbml0aWFsJywnZm9udC13ZWlnaHQnOnN1YmNsYXNzYXR0ci5Gb250LkJvbGQ/J2JvbGQnOidpbml0aWFsJywnZm9udC1zdHlsZSc6c3ViY2xhc3NhdHRyLkZvbnQuVGlsdD8naXRhbGljJzonaW5pdGlhbCcsJ3RleHQtZGVjb3JhdGlvbic6c3ViY2xhc3NhdHRyLkZvbnQuVW5kZXJsaW5lPyd1bmRlcmxpbmUnOidpbml0aWFsJywnYmFja2dyb3VuZC1jb2xvcic6c3ViY2xhc3NhdHRyLkZvbnQuQmtfQ29sb3IsJ2NvbG9yJzpzdWJjbGFzc2F0dHIuRm9udC5UZXh0X0NvbG9yLCd3aWR0aCc6c3ViY2xhc3NhdHRyLnRpdGxlX3Bfd2RpdGgrJyUnfVwiPjxpIGNsYXNzPVwiaV90aXNoaVwiIHYtaWY9XCJhdHRyLm5vdGVtcHR5PT10cnVlIHx8IGF0dHIuTm90RW1wdHk9PScxJ1wiPio8L2k+e3thdHRyLkRpc3BOYW1lfX06PC90ZXh0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8cGlja2VyIGNsYXNzPVwic2VjdGlvbl9pcHV0XCIgQGNoYW5nZT1cIm9uY2hhbmdlXCIgOnJhbmdlPVwiYXR0ci5kaWN0aXRlbVwiIHJhbmdlLWtleT1cIkNOX1NfTkFNRVwiIHYtaWY9XCJhdHRyLnNlbGVjdD09ZmFsc2VcIiA6ZGF0YS1pbmRleD1cImluZGV4XCIgOmRhdGEtaWluZGV4PVwiaWluZGV4XCIgOnN0eWxlPVwieyd3aWR0aCc6YXR0ci5XaWR0aC5zcGxpdCgnJScpWzBdIC0gMi41ICsnJSd9XCIgOmRpc2FibGVkPVwiYXR0ci5lZGl0P2ZhbHNlOnRydWVcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgY2xhc3M9XCJcIj57eyBhdHRyLlZhbHVlIH19PC9sYWJlbD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PC9waWNrZXI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxzZWxlY3QtY3kgOnZhbHVlPVwiYXR0ci5WYWx1ZVwiIDpuYW1lPVwiYXR0ci5OYW1lXCIgOm9wdGlvbnM9XCJhdHRyLmRpY3RpdGVtXCIgc2hvd0NsZWFySWNvbj1cInRydWVcIiBAY2hhbmdlPVwib25jaGFuZ2UyXCIgdi1lbHNlLWlmPVwiYXR0ci5zZWxlY3Q9PXRydWVcIiA6ZGF0YS1pbmRleD1cImluZGV4XCIgOmRhdGEtaWluZGV4PVwiaWluZGV4XCIgOnN0eWxlPVwieyd3aWR0aCc6YXR0ci5XaWR0aC5zcGxpdCgnJScpWzBdIC0gMi41ICsnJSd9XCIgOmRpc2FibGVkPVwiYXR0ci5lZGl0P2ZhbHNlOnRydWVcIj48L3NlbGVjdC1jeT5cclxuXHRcdFx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdFx0XHRcdDx2aWV3IHYtaWY9XCJzdWJjbGFzc2F0dHIuY29udHJvbF9zdHlsZT09J+W3puWPs+W4g+WxgCdcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHAgY2xhc3M9XCJ0eF90aXRsZTJcIiA6c3R5bGU9XCJ7J2ZvbnQtZmFtaWx5JzpzdWJjbGFzc2F0dHIuRm9udC5OYW1lP3N1YmNsYXNzYXR0ci5Gb250Lk5hbWU6J2luaXRpYWwnLCdmb250LXNpemUnOnN1YmNsYXNzYXR0ci5Gb250LlNpemU/c3ViY2xhc3NhdHRyLkZvbnQuU2l6ZTonaW5pdGlhbCcsJ2ZvbnQtd2VpZ2h0JzpzdWJjbGFzc2F0dHIuRm9udC5Cb2xkPydib2xkJzonaW5pdGlhbCcsJ2ZvbnQtc3R5bGUnOnN1YmNsYXNzYXR0ci5Gb250LlRpbHQ/J2l0YWxpYyc6J2luaXRpYWwnLCd0ZXh0LWRlY29yYXRpb24nOnN1YmNsYXNzYXR0ci5Gb250LlVuZGVybGluZT8ndW5kZXJsaW5lJzonaW5pdGlhbCcsJ2JhY2tncm91bmQtY29sb3InOnN1YmNsYXNzYXR0ci5Gb250LkJrX0NvbG9yLCdjb2xvcic6c3ViY2xhc3NhdHRyLkZvbnQuVGV4dF9Db2xvciwnd2lkdGgnOnN1YmNsYXNzYXR0ci50aXRsZV9wX3dkaXRoKyclJ31cIj48aSBjbGFzcz1cImlfdGlzaGlcIiB2LWlmPVwiYXR0ci5ub3RlbXB0eT09dHJ1ZSB8fCBhdHRyLk5vdEVtcHR5PT0nMSdcIj4qPC9pPnt7YXR0ci5EaXNwTmFtZX19OjwvcD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHBpY2tlciBjbGFzcz1cInNlY3Rpb25faXB1dCBhdHRyX2ZpZWxkXCIgQGNoYW5nZT1cIm9uY2hhbmdlXCIgOnJhbmdlPVwiYXR0ci5kaWN0aXRlbVwiIHJhbmdlLWtleT1cIkNOX1NfTkFNRVwiIHYtaWY9XCJhdHRyLnNlbGVjdD09ZmFsc2VcIiA6ZGF0YS1pbmRleD1cImluZGV4XCIgOmRhdGEtaWluZGV4PVwiaWluZGV4XCIgOnN0eWxlPVwieyd3aWR0aCc6IGF0dHIuV2lkdGguc3BsaXQoJyUnKVswXSAtIHN1YmNsYXNzYXR0ci50aXRsZV9wX3dkaXRoIC0gNyArJyUnfVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBjbGFzcz1cIlwiPnt7IGF0dHIuVmFsdWUgfX08L2xhYmVsPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3BpY2tlcj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHNlbGVjdC1jeSA6dmFsdWU9XCJhdHRyLlZhbHVlXCIgOm5hbWU9XCJhdHRyLk5hbWVcIiA6b3B0aW9ucz1cImF0dHIuZGljdGl0ZW1cIiBzaG93Q2xlYXJJY29uPVwidHJ1ZVwiIEBjaGFuZ2U9XCJvbmNoYW5nZTJcIiB2LWVsc2UtaWY9XCJhdHRyLnNlbGVjdD09dHJ1ZVwiIDpkYXRhLWluZGV4PVwiaW5kZXhcIiA6ZGF0YS1paW5kZXg9XCJpaW5kZXhcIiA6c3R5bGU9XCJ7J3dpZHRoJzphdHRyLldpZHRofVwiPjwvc2VsZWN0LWN5PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHRcdFx0PHZpZXcgY2xhc3M9XCJmb3JtLWdyb3VwXCIgdi1pZj1cImF0dHIuVHlwZT09J+W8leeUqOWvueixoSjljZXkuKopJyB8fCBhdHRyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKSdcIiA6c3R5bGU9XCJ7J2Rpc3BsYXknOmF0dHIuaGlkZGVuID09ICdUcnVlJz8nbm9uZSc6Jyd9XCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dmlldyB2LWlmPVwic3ViY2xhc3NhdHRyLmNvbnRyb2xfc3R5bGU9PSfkuIrkuIvluIPlsYAnXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx0ZXh0IGNsYXNzPVwidHhfdGl0bGVcIiA6c3R5bGU9XCJ7J2ZvbnQtZmFtaWx5JzpzdWJjbGFzc2F0dHIuRm9udC5OYW1lP3N1YmNsYXNzYXR0ci5Gb250Lk5hbWU6J2luaXRpYWwnLCdmb250LXNpemUnOnN1YmNsYXNzYXR0ci5Gb250LlNpemU/c3ViY2xhc3NhdHRyLkZvbnQuU2l6ZTonaW5pdGlhbCcsJ2ZvbnQtd2VpZ2h0JzpzdWJjbGFzc2F0dHIuRm9udC5Cb2xkPydib2xkJzonaW5pdGlhbCcsJ2ZvbnQtc3R5bGUnOnN1YmNsYXNzYXR0ci5Gb250LlRpbHQ/J2l0YWxpYyc6J2luaXRpYWwnLCd0ZXh0LWRlY29yYXRpb24nOnN1YmNsYXNzYXR0ci5Gb250LlVuZGVybGluZT8ndW5kZXJsaW5lJzonaW5pdGlhbCcsJ2JhY2tncm91bmQtY29sb3InOnN1YmNsYXNzYXR0ci5Gb250LkJrX0NvbG9yLCdjb2xvcic6c3ViY2xhc3NhdHRyLkZvbnQuVGV4dF9Db2xvciwnd2lkdGgnOnN1YmNsYXNzYXR0ci50aXRsZV9wX3dkaXRoKyclJ31cIj48aSBjbGFzcz1cImlfdGlzaGlcIiB2LWlmPVwiYXR0ci5ub3RlbXB0eT09dHJ1ZSB8fCBhdHRyLk5vdEVtcHR5PT0nMSdcIj4qPC9pPnt7YXR0ci5EaXNwTmFtZX19OjwvdGV4dD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cInRleHQtcmlnaHRcIiB2LWlmPVwiYXR0ci5UeXBlPT0n5byV55So5a+56LGhKOWNleS4qiknXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGEgQHRhcD1cImNsYXNzQXR0cl9BZGRSZWZcIiA6ZGF0YS1jbGFzc2lkPVwiYXR0ci5SZWxDbHMuc3BsaXQoJ3wnKVswXVwiIDpkYXRhLWNsYXNzbmFtZT1cImF0dHIuUmVsQ2xzLnNwbGl0KCd8JylbMV1cIiA+PGkgY2xhc3M9XCJhY2UtaWNvbiBmYSBmYS1wbHVzLWNpcmNsZVwiPjwvaT48L2E+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwidGV4dC1yaWdodFwiIHYtaWY9XCJhdHRyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKSdcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8cGlja2VyIGNsYXNzPVwic2VsZWN0XCIgQGNoYW5nZT1cImNsYXNzQXR0cl9BZGRSZWZcIiA6cmFuZ2U9XCJhdHRyLlJlbENsc0xpc3RcIiByYW5nZS1rZXk9XCJuYW1lXCIgOmRhdGEtaW5kZXg9XCJpbmRleFwiIDpkYXRhLWlpbmRleD1cImlpbmRleFwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGNsYXNzPVwiXCI+e3sgYXR0ci5WYWx1ZSB9fTwvbGFiZWw+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9waWNrZXI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGEgY2xhc3M9XCJjbGFzc19hdHRyX2FkZF9yZWZcIj48aSBjbGFzcz1cImFjZS1pY29uIGZhIGZhLXBsdXMtY2lyY2xlXCI+PC9pPjwvYT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dCB0eXBlPVwidGV4dFwiIDpkYXRhLWluZGV4PVwiaW5kZXhcIiA6ZGF0YS1paW5kZXg9XCJpaW5kZXhcIiA6c3R5bGU9XCJ7J3dpZHRoJzphdHRyLldpZHRofVwiIGRpc2FibGVkPVwidHJ1ZVwiID5cclxuXHRcdFx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdFx0XHRcdDx2aWV3IHYtaWY9XCJzdWJjbGFzc2F0dHIuY29udHJvbF9zdHlsZT09J+W3puWPs+W4g+WxgCdcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHAgY2xhc3M9XCJ0eF90aXRsZTJcIiA6c3R5bGU9XCJ7J2ZvbnQtZmFtaWx5JzpzdWJjbGFzc2F0dHIuRm9udC5OYW1lP3N1YmNsYXNzYXR0ci5Gb250Lk5hbWU6J2luaXRpYWwnLCdmb250LXNpemUnOnN1YmNsYXNzYXR0ci5Gb250LlNpemU/c3ViY2xhc3NhdHRyLkZvbnQuU2l6ZTonaW5pdGlhbCcsJ2ZvbnQtd2VpZ2h0JzpzdWJjbGFzc2F0dHIuRm9udC5Cb2xkPydib2xkJzonaW5pdGlhbCcsJ2ZvbnQtc3R5bGUnOnN1YmNsYXNzYXR0ci5Gb250LlRpbHQ/J2l0YWxpYyc6J2luaXRpYWwnLCd0ZXh0LWRlY29yYXRpb24nOnN1YmNsYXNzYXR0ci5Gb250LlVuZGVybGluZT8ndW5kZXJsaW5lJzonaW5pdGlhbCcsJ2JhY2tncm91bmQtY29sb3InOnN1YmNsYXNzYXR0ci5Gb250LkJrX0NvbG9yLCdjb2xvcic6c3ViY2xhc3NhdHRyLkZvbnQuVGV4dF9Db2xvciwnd2lkdGgnOnN1YmNsYXNzYXR0ci50aXRsZV9wX3dkaXRoKyclJ31cIj48aSBjbGFzcz1cImlfdGlzaGlcIiB2LWlmPVwiYXR0ci5ub3RlbXB0eT09dHJ1ZSB8fCBhdHRyLk5vdEVtcHR5PT0nMSdcIj4qPC9pPnt7YXR0ci5EaXNwTmFtZX19OjwvcD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJhdHRyX2ZpZWxkXCIgOmRhdGEtaW5kZXg9XCJpbmRleFwiIDpkYXRhLWlpbmRleD1cImlpbmRleFwiIDpzdHlsZT1cInsnd2lkdGgnOiBhdHRyLldpZHRoLnNwbGl0KCclJylbMF0gLSBzdWJjbGFzc2F0dHIudGl0bGVfcF93ZGl0aCAtIDE2ICsnJSd9XCIgZGlzYWJsZWQ9XCJ0cnVlXCIgPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwidGV4dC1yaWdodDJcIiB2LWlmPVwiYXR0ci5UeXBlPT0n5byV55So5a+56LGhKOWNleS4qiknXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGEgQHRhcD1cImNsYXNzQXR0cl9BZGRSZWZcIiA6ZGF0YS1jbGFzc2lkPVwiYXR0ci5SZWxDbHMuc3BsaXQoJ3wnKVswXVwiIDpkYXRhLWNsYXNzbmFtZT1cImF0dHIuUmVsQ2xzLnNwbGl0KCd8JylbMV1cIiA+PGkgY2xhc3M9XCJhY2UtaWNvbiBmYSBmYS1wbHVzLWNpcmNsZVwiPjwvaT48L2E+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwidGV4dC1yaWdodDJcIiB2LWlmPVwiYXR0ci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PHBpY2tlciBjbGFzcz1cInNlbGVjdFwiIEBjaGFuZ2U9XCJjbGFzc0F0dHJfQWRkUmVmXCIgOnJhbmdlPVwiYXR0ci5SZWxDbHNMaXN0XCIgcmFuZ2Uta2V5PVwibmFtZVwiIDpkYXRhLWluZGV4PVwiaW5kZXhcIiA6ZGF0YS1paW5kZXg9XCJpaW5kZXhcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBjbGFzcz1cIlwiPnt7IGF0dHIuVmFsdWUgfX08L2xhYmVsPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvcGlja2VyPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxhIGNsYXNzPVwiY2xhc3NfYXR0cl9hZGRfcmVmXCI+PGkgY2xhc3M9XCJhY2UtaWNvbiBmYSBmYS1wbHVzLWNpcmNsZVwiPjwvaT48L2E+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdFx0XHQ8dmlldyBjbGFzcz1cImZvcm0tZ3JvdXBcIiB2LWlmPVwiYXR0ci5UeXBlPT0n5byV55So5Lq65ZGYJ1wiIDpzdHlsZT1cInsnZGlzcGxheSc6YXR0ci5oaWRkZW4gPT0gJ1RydWUnPydub25lJzonJ31cIj5cclxuXHRcdFx0XHRcdFx0XHRcdDx2aWV3IHYtaWY9XCJzdWJjbGFzc2F0dHIuY29udHJvbF9zdHlsZT09J+S4iuS4i+W4g+WxgCdcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHRleHQgY2xhc3M9XCJ0eF90aXRsZVwiIDpzdHlsZT1cInsnZm9udC1mYW1pbHknOnN1YmNsYXNzYXR0ci5Gb250Lk5hbWU/c3ViY2xhc3NhdHRyLkZvbnQuTmFtZTonaW5pdGlhbCcsJ2ZvbnQtc2l6ZSc6c3ViY2xhc3NhdHRyLkZvbnQuU2l6ZT9zdWJjbGFzc2F0dHIuRm9udC5TaXplOidpbml0aWFsJywnZm9udC13ZWlnaHQnOnN1YmNsYXNzYXR0ci5Gb250LkJvbGQ/J2JvbGQnOidpbml0aWFsJywnZm9udC1zdHlsZSc6c3ViY2xhc3NhdHRyLkZvbnQuVGlsdD8naXRhbGljJzonaW5pdGlhbCcsJ3RleHQtZGVjb3JhdGlvbic6c3ViY2xhc3NhdHRyLkZvbnQuVW5kZXJsaW5lPyd1bmRlcmxpbmUnOidpbml0aWFsJywnYmFja2dyb3VuZC1jb2xvcic6c3ViY2xhc3NhdHRyLkZvbnQuQmtfQ29sb3IsJ2NvbG9yJzpzdWJjbGFzc2F0dHIuRm9udC5UZXh0X0NvbG9yLCd3aWR0aCc6c3ViY2xhc3NhdHRyLnRpdGxlX3Bfd2RpdGgrJyUnfVwiPjxpIGNsYXNzPVwiaV90aXNoaVwiIHYtaWY9XCJhdHRyLm5vdGVtcHR5PT10cnVlIHx8IGF0dHIuTm90RW1wdHk9PScxJ1wiPio8L2k+e3thdHRyLkRpc3BOYW1lfX06PC90ZXh0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwidGV4dC1yaWdodFwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxhIGNsYXNzPVwiY2xhc3NfYXR0cl9hZGRfcGVyXCIgQHRhcD1cImNsYXNzQXR0cl9BZGRQZXIoaW5kZXgsaWluZGV4KVwiPjxpIGNsYXNzPVwiYWNlLWljb24gZmEgZmEtcGx1cy1jaXJjbGVcIj48L2k+PC9hPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0IHR5cGU9XCJ0ZXh0XCIgOnZhbHVlPVwiYXR0ci5WYWx1ZVwiIDpzdHlsZT1cInsnd2lkdGgnOmF0dHIuV2lkdGh9XCIgZGlzYWJsZWQ9XCJ0cnVlXCIgPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0XHRcdFx0PHZpZXcgdi1pZj1cInN1YmNsYXNzYXR0ci5jb250cm9sX3N0eWxlPT0n5bem5Y+z5biD5bGAJ1wiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8cCBjbGFzcz1cInR4X3RpdGxlMlwiIDpzdHlsZT1cInsnZm9udC1mYW1pbHknOnN1YmNsYXNzYXR0ci5Gb250Lk5hbWU/c3ViY2xhc3NhdHRyLkZvbnQuTmFtZTonaW5pdGlhbCcsJ2ZvbnQtc2l6ZSc6c3ViY2xhc3NhdHRyLkZvbnQuU2l6ZT9zdWJjbGFzc2F0dHIuRm9udC5TaXplOidpbml0aWFsJywnZm9udC13ZWlnaHQnOnN1YmNsYXNzYXR0ci5Gb250LkJvbGQ/J2JvbGQnOidpbml0aWFsJywnZm9udC1zdHlsZSc6c3ViY2xhc3NhdHRyLkZvbnQuVGlsdD8naXRhbGljJzonaW5pdGlhbCcsJ3RleHQtZGVjb3JhdGlvbic6c3ViY2xhc3NhdHRyLkZvbnQuVW5kZXJsaW5lPyd1bmRlcmxpbmUnOidpbml0aWFsJywnYmFja2dyb3VuZC1jb2xvcic6c3ViY2xhc3NhdHRyLkZvbnQuQmtfQ29sb3IsJ2NvbG9yJzpzdWJjbGFzc2F0dHIuRm9udC5UZXh0X0NvbG9yLCd3aWR0aCc6c3ViY2xhc3NhdHRyLnRpdGxlX3Bfd2RpdGgrJyUnfVwiPjxpIGNsYXNzPVwiaV90aXNoaVwiIHYtaWY9XCJhdHRyLm5vdGVtcHR5PT10cnVlIHx8IGF0dHIuTm90RW1wdHk9PScxJ1wiPio8L2k+e3thdHRyLkRpc3BOYW1lfX06PC9wPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImF0dHJfZmllbGRcIiA6dmFsdWU9XCJhdHRyLlZhbHVlXCIgOnN0eWxlPVwieyd3aWR0aCc6IGF0dHIuV2lkdGguc3BsaXQoJyUnKVswXSAtIHN1YmNsYXNzYXR0ci50aXRsZV9wX3dkaXRoIC0gMTYgKyclJ31cIiBkaXNhYmxlZD1cInRydWVcIiA+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJ0ZXh0LXJpZ2h0MlwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxhIGNsYXNzPVwiY2xhc3NfYXR0cl9hZGRfcGVyXCIgQHRhcD1cImNsYXNzQXR0cl9BZGRQZXIoaW5kZXgsaWluZGV4KVwiPjxpIGNsYXNzPVwiYWNlLWljb24gZmEgZmEtcGx1cy1jaXJjbGVcIj48L2k+PC9hPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHRcdFx0PHZpZXcgY2xhc3M9XCJmb3JtLWdyb3VwXCIgdi1pZj1cImF0dHIuVHlwZT09J+W8leeUqOmhueebridcIiA6c3R5bGU9XCJ7J2Rpc3BsYXknOmF0dHIuaGlkZGVuID09ICdUcnVlJz8nbm9uZSc6Jyd9XCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dmlldyB2LWlmPVwic3ViY2xhc3NhdHRyLmNvbnRyb2xfc3R5bGU9PSfkuIrkuIvluIPlsYAnXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx0ZXh0IGNsYXNzPVwidHhfdGl0bGVcIiA6c3R5bGU9XCJ7J2ZvbnQtZmFtaWx5JzpzdWJjbGFzc2F0dHIuRm9udC5OYW1lP3N1YmNsYXNzYXR0ci5Gb250Lk5hbWU6J2luaXRpYWwnLCdmb250LXNpemUnOnN1YmNsYXNzYXR0ci5Gb250LlNpemU/c3ViY2xhc3NhdHRyLkZvbnQuU2l6ZTonaW5pdGlhbCcsJ2ZvbnQtd2VpZ2h0JzpzdWJjbGFzc2F0dHIuRm9udC5Cb2xkPydib2xkJzonaW5pdGlhbCcsJ2ZvbnQtc3R5bGUnOnN1YmNsYXNzYXR0ci5Gb250LlRpbHQ/J2l0YWxpYyc6J2luaXRpYWwnLCd0ZXh0LWRlY29yYXRpb24nOnN1YmNsYXNzYXR0ci5Gb250LlVuZGVybGluZT8ndW5kZXJsaW5lJzonaW5pdGlhbCcsJ2JhY2tncm91bmQtY29sb3InOnN1YmNsYXNzYXR0ci5Gb250LkJrX0NvbG9yLCdjb2xvcic6c3ViY2xhc3NhdHRyLkZvbnQuVGV4dF9Db2xvciwnd2lkdGgnOnN1YmNsYXNzYXR0ci50aXRsZV9wX3dkaXRoKyclJ31cIj48aSBjbGFzcz1cImlfdGlzaGlcIiB2LWlmPVwiYXR0ci5ub3RlbXB0eT09dHJ1ZSB8fCBhdHRyLk5vdEVtcHR5PT0nMSdcIj4qPC9pPnt7YXR0ci5EaXNwTmFtZX19OjwvdGV4dD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cInRleHQtcmlnaHRcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8YSBocmVmPVwiI1wiIGNsYXNzPVwiY2xhc3NfYXR0cl9hZGRfcHJqXCIgQHRhcD1cImNsYXNzQXR0cl9BZGRQcmooaW5kZXgsaWluZGV4KVwiPjxpIGNsYXNzPVwiYWNlLWljb24gZmEgZmEtcGx1cy1jaXJjbGVcIj48L2k+PC9hPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0IHR5cGU9XCJ0ZXh0XCIgOnZhbHVlPVwiYXR0ci5WYWx1ZVwiIDpzdHlsZT1cInsnd2lkdGgnOmF0dHIuV2lkdGh9XCIgZGlzYWJsZWQ9XCJ0cnVlXCIgPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0XHRcdFx0PHZpZXcgdi1pZj1cInN1YmNsYXNzYXR0ci5jb250cm9sX3N0eWxlPT0n5bem5Y+z5biD5bGAJ1wiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8cCBjbGFzcz1cInR4X3RpdGxlMlwiIDpzdHlsZT1cInsnZm9udC1mYW1pbHknOnN1YmNsYXNzYXR0ci5Gb250Lk5hbWU/c3ViY2xhc3NhdHRyLkZvbnQuTmFtZTonaW5pdGlhbCcsJ2ZvbnQtc2l6ZSc6c3ViY2xhc3NhdHRyLkZvbnQuU2l6ZT9zdWJjbGFzc2F0dHIuRm9udC5TaXplOidpbml0aWFsJywnZm9udC13ZWlnaHQnOnN1YmNsYXNzYXR0ci5Gb250LkJvbGQ/J2JvbGQnOidpbml0aWFsJywnZm9udC1zdHlsZSc6c3ViY2xhc3NhdHRyLkZvbnQuVGlsdD8naXRhbGljJzonaW5pdGlhbCcsJ3RleHQtZGVjb3JhdGlvbic6c3ViY2xhc3NhdHRyLkZvbnQuVW5kZXJsaW5lPyd1bmRlcmxpbmUnOidpbml0aWFsJywnYmFja2dyb3VuZC1jb2xvcic6c3ViY2xhc3NhdHRyLkZvbnQuQmtfQ29sb3IsJ2NvbG9yJzpzdWJjbGFzc2F0dHIuRm9udC5UZXh0X0NvbG9yLCd3aWR0aCc6c3ViY2xhc3NhdHRyLnRpdGxlX3Bfd2RpdGgrJyUnfVwiPjxpIGNsYXNzPVwiaV90aXNoaVwiIHYtaWY9XCJhdHRyLm5vdGVtcHR5PT10cnVlIHx8IGF0dHIuTm90RW1wdHk9PScxJ1wiPio8L2k+e3thdHRyLkRpc3BOYW1lfX06PC9wPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImF0dHJfZmllbGRcIiA6dmFsdWU9XCJhdHRyLlZhbHVlXCIgOnN0eWxlPVwieyd3aWR0aCc6IGF0dHIuV2lkdGguc3BsaXQoJyUnKVswXSAtIHN1YmNsYXNzYXR0ci50aXRsZV9wX3dkaXRoIC0gMTYgKyclJ31cIiBkaXNhYmxlZD1cInRydWVcIiA+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJ0ZXh0LXJpZ2h0MlwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxhIGNsYXNzPVwiY2xhc3NfYXR0cl9hZGRfcHJqXCIgQHRhcD1cImNsYXNzQXR0cl9BZGRQcmooaW5kZXgsaWluZGV4KVwiPjxpIGNsYXNzPVwiYWNlLWljb24gZmEgZmEtcGx1cy1jaXJjbGVcIj48L2k+PC9hPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHRcdFx0PHZpZXcgY2xhc3M9XCJmb3JtLWdyb3VwXCIgdi1pZj1cImF0dHIuVHlwZT09J+e8lueggSdcIiA6c3R5bGU9XCJ7J2Rpc3BsYXknOmF0dHIuaGlkZGVuID09ICdUcnVlJz8nbm9uZSc6Jyd9XCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dmlldyB2LWlmPVwic3ViY2xhc3NhdHRyLmNvbnRyb2xfc3R5bGU9PSfkuIrkuIvluIPlsYAnXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx0ZXh0IGNsYXNzPVwidHhfdGl0bGVcIiA6c3R5bGU9XCJ7J2ZvbnQtZmFtaWx5JzpzdWJjbGFzc2F0dHIuRm9udC5OYW1lP3N1YmNsYXNzYXR0ci5Gb250Lk5hbWU6J2luaXRpYWwnLCdmb250LXNpemUnOnN1YmNsYXNzYXR0ci5Gb250LlNpemU/c3ViY2xhc3NhdHRyLkZvbnQuU2l6ZTonaW5pdGlhbCcsJ2ZvbnQtd2VpZ2h0JzpzdWJjbGFzc2F0dHIuRm9udC5Cb2xkPydib2xkJzonaW5pdGlhbCcsJ2ZvbnQtc3R5bGUnOnN1YmNsYXNzYXR0ci5Gb250LlRpbHQ/J2l0YWxpYyc6J2luaXRpYWwnLCd0ZXh0LWRlY29yYXRpb24nOnN1YmNsYXNzYXR0ci5Gb250LlVuZGVybGluZT8ndW5kZXJsaW5lJzonaW5pdGlhbCcsJ2JhY2tncm91bmQtY29sb3InOnN1YmNsYXNzYXR0ci5Gb250LkJrX0NvbG9yLCdjb2xvcic6c3ViY2xhc3NhdHRyLkZvbnQuVGV4dF9Db2xvciwnd2lkdGgnOnN1YmNsYXNzYXR0ci50aXRsZV9wX3dkaXRoKyclJ31cIj48aSBjbGFzcz1cImlfdGlzaGlcIiB2LWlmPVwiYXR0ci5ub3RlbXB0eT09dHJ1ZSB8fCBhdHRyLk5vdEVtcHR5PT0nMSdcIj4qPC9pPnt7YXR0ci5EaXNwTmFtZX19OjwvdGV4dD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0IHR5cGU9XCJ0ZXh0XCIgOmRhdGEtaW5kZXg9XCJpbmRleFwiIDpkYXRhLWlpbmRleD1cImlpbmRleFwiIDpzdHlsZT1cInsnd2lkdGgnOmF0dHIuV2lkdGh9XCIgOmRpc2FibGVkPVwiYXR0ci5lZGl0P2ZhbHNlOnRydWVcIiA+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dmlldyB2LWlmPVwic3ViY2xhc3NhdHRyLmNvbnRyb2xfc3R5bGU9PSflt6blj7PluIPlsYAnXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxwIGNsYXNzPVwidHhfdGl0bGUyXCIgOnN0eWxlPVwieydmb250LWZhbWlseSc6c3ViY2xhc3NhdHRyLkZvbnQuTmFtZT9zdWJjbGFzc2F0dHIuRm9udC5OYW1lOidpbml0aWFsJywnZm9udC1zaXplJzpzdWJjbGFzc2F0dHIuRm9udC5TaXplP3N1YmNsYXNzYXR0ci5Gb250LlNpemU6J2luaXRpYWwnLCdmb250LXdlaWdodCc6c3ViY2xhc3NhdHRyLkZvbnQuQm9sZD8nYm9sZCc6J2luaXRpYWwnLCdmb250LXN0eWxlJzpzdWJjbGFzc2F0dHIuRm9udC5UaWx0PydpdGFsaWMnOidpbml0aWFsJywndGV4dC1kZWNvcmF0aW9uJzpzdWJjbGFzc2F0dHIuRm9udC5VbmRlcmxpbmU/J3VuZGVybGluZSc6J2luaXRpYWwnLCdiYWNrZ3JvdW5kLWNvbG9yJzpzdWJjbGFzc2F0dHIuRm9udC5Ca19Db2xvciwnY29sb3InOnN1YmNsYXNzYXR0ci5Gb250LlRleHRfQ29sb3IsJ3dpZHRoJzpzdWJjbGFzc2F0dHIudGl0bGVfcF93ZGl0aCsnJSd9XCI+PGkgY2xhc3M9XCJpX3Rpc2hpXCIgdi1pZj1cImF0dHIubm90ZW1wdHk9PXRydWUgfHwgYXR0ci5Ob3RFbXB0eT09JzEnXCI+KjwvaT57e2F0dHIuRGlzcE5hbWV9fTo8L3A+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiYXR0cl9maWVsZFwiIDpkYXRhLWluZGV4PVwiaW5kZXhcIiA6ZGF0YS1paW5kZXg9XCJpaW5kZXhcIiA6c3R5bGU9XCJ7J3dpZHRoJzogYXR0ci5XaWR0aC5zcGxpdCgnJScpWzBdIC0gc3ViY2xhc3NhdHRyLnRpdGxlX3Bfd2RpdGggLSA3ICsnJSd9XCIgOmRpc2FibGVkPVwiYXR0ci5lZGl0P2ZhbHNlOnRydWVcIiA+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0XHRcdDx2aWV3IGNsYXNzPVwiZm9ybS1ncm91cFwiIHYtaWY9XCJhdHRyLlR5cGU9PSfnnIHluILljLonXCIgOnN0eWxlPVwieydkaXNwbGF5JzphdHRyLmhpZGRlbiA9PSAnVHJ1ZSc/J25vbmUnOicnfVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHZpZXcgdi1pZj1cInN1YmNsYXNzYXR0ci5jb250cm9sX3N0eWxlPT0n5LiK5LiL5biD5bGAJ1wiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dGV4dCBjbGFzcz1cInR4X3RpdGxlXCIgOnN0eWxlPVwieydmb250LWZhbWlseSc6c3ViY2xhc3NhdHRyLkZvbnQuTmFtZT9zdWJjbGFzc2F0dHIuRm9udC5OYW1lOidpbml0aWFsJywnZm9udC1zaXplJzpzdWJjbGFzc2F0dHIuRm9udC5TaXplP3N1YmNsYXNzYXR0ci5Gb250LlNpemU6J2luaXRpYWwnLCdmb250LXdlaWdodCc6c3ViY2xhc3NhdHRyLkZvbnQuQm9sZD8nYm9sZCc6J2luaXRpYWwnLCdmb250LXN0eWxlJzpzdWJjbGFzc2F0dHIuRm9udC5UaWx0PydpdGFsaWMnOidpbml0aWFsJywndGV4dC1kZWNvcmF0aW9uJzpzdWJjbGFzc2F0dHIuRm9udC5VbmRlcmxpbmU/J3VuZGVybGluZSc6J2luaXRpYWwnLCdiYWNrZ3JvdW5kLWNvbG9yJzpzdWJjbGFzc2F0dHIuRm9udC5Ca19Db2xvciwnY29sb3InOnN1YmNsYXNzYXR0ci5Gb250LlRleHRfQ29sb3IsJ3dpZHRoJzpzdWJjbGFzc2F0dHIudGl0bGVfcF93ZGl0aCsnJSd9XCI+PGkgY2xhc3M9XCJpX3Rpc2hpXCIgdi1pZj1cImF0dHIubm90ZW1wdHk9PXRydWUgfHwgYXR0ci5Ob3RFbXB0eT09JzEnXCI+KjwvaT57e2F0dHIuRGlzcE5hbWV9fTo8L3RleHQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxwaWNrZXJBZGRyZXNzIGNsYXNzPVwiZGF0ZV9pcHV0XCIgQGNoYW5nZT1cImFkZHJlc3NjaGFuZ2VcIiA6ZGF0YS1pbmRleD1cImluZGV4XCIgOmRhdGEtaWluZGV4PVwiaWluZGV4XCIgOnN0eWxlPVwieyd3aWR0aCc6YXR0ci5XaWR0aH1cIiA+e3thdHRyLlZhbHVlfX08L3BpY2tlckFkZHJlc3M+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dmlldyB2LWlmPVwic3ViY2xhc3NhdHRyLmNvbnRyb2xfc3R5bGU9PSflt6blj7PluIPlsYAnXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxwIGNsYXNzPVwidHhfdGl0bGUyXCIgOnN0eWxlPVwieydmb250LWZhbWlseSc6c3ViY2xhc3NhdHRyLkZvbnQuTmFtZT9zdWJjbGFzc2F0dHIuRm9udC5OYW1lOidpbml0aWFsJywnZm9udC1zaXplJzpzdWJjbGFzc2F0dHIuRm9udC5TaXplP3N1YmNsYXNzYXR0ci5Gb250LlNpemU6J2luaXRpYWwnLCdmb250LXdlaWdodCc6c3ViY2xhc3NhdHRyLkZvbnQuQm9sZD8nYm9sZCc6J2luaXRpYWwnLCdmb250LXN0eWxlJzpzdWJjbGFzc2F0dHIuRm9udC5UaWx0PydpdGFsaWMnOidpbml0aWFsJywndGV4dC1kZWNvcmF0aW9uJzpzdWJjbGFzc2F0dHIuRm9udC5VbmRlcmxpbmU/J3VuZGVybGluZSc6J2luaXRpYWwnLCdiYWNrZ3JvdW5kLWNvbG9yJzpzdWJjbGFzc2F0dHIuRm9udC5Ca19Db2xvciwnY29sb3InOnN1YmNsYXNzYXR0ci5Gb250LlRleHRfQ29sb3IsJ3dpZHRoJzpzdWJjbGFzc2F0dHIudGl0bGVfcF93ZGl0aCsnJSd9XCI+PGkgY2xhc3M9XCJpX3Rpc2hpXCIgdi1pZj1cImF0dHIubm90ZW1wdHk9PXRydWUgfHwgYXR0ci5Ob3RFbXB0eT09JzEnXCI+KjwvaT57e2F0dHIuRGlzcE5hbWV9fTo8L3A+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxwaWNrZXJBZGRyZXNzIGNsYXNzPVwiZGF0ZV9pcHV0IGF0dHJfZmllbGRcIiBAY2hhbmdlPVwiYWRkcmVzc2NoYW5nZVwiIDpkYXRhLWluZGV4PVwiaW5kZXhcIiA6ZGF0YS1paW5kZXg9XCJpaW5kZXhcIiA6c3R5bGU9XCJ7J3dpZHRoJzogYXR0ci5XaWR0aC5zcGxpdCgnJScpWzBdIC0gc3ViY2xhc3NhdHRyLnRpdGxlX3Bfd2RpdGggLSA3ICsnJSd9XCI+e3thdHRyLlZhbHVlfX08L3BpY2tlckFkZHJlc3M+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcclxuXHRcdFx0XHQ8dmlldyBjbGFzcz1cInYtcGFuZWxkZWxcIj48YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgY2xhc3M9XCJwYW5lbF9kZWxcIiBAdGFwPVwicGFuZWxfZGVsKGluZGV4KVwiPjxpIGNsYXNzPVwiYWNlLWljb24gZnUtZGVsZXRlXCI+PC9pPjwvYT48L3ZpZXc+XHJcblx0XHRcdDwvdmlldz5cclxuXHRcdDwvdmlldz5cclxuXHRcdFxyXG5cdFx0PGJ1dHRvbiB0eXBlPVwiZGVmYXVsdFwiIEB0YXA9XCJjYW5jZWxcIiBjbGFzcz1cImJ0bl9jYW5jZWxcIj7lj5bmtog8L2J1dHRvbj5cclxuXHRcdDxidXR0b24gdHlwZT1cImRlZmF1bHRcIiBAdGFwPVwic2F2YVwiIGNsYXNzPVwiYnRuX2FkZFwiPnt7dGl0bGV9fTwvYnV0dG9uPlxyXG5cdDwvdmlldz5cclxuPC90ZW1wbGF0ZT4gXHJcblxyXG48c2NyaXB0PlxyXG5cdGltcG9ydCBwaWNrZXJBZGRyZXNzIGZyb20gJy4uLy4uL2pzL3BpY2tlckFkZHJlc3MvcGlja2VyQWRkcmVzcy52dWUnXHJcblx0ZXhwb3J0IGRlZmF1bHQge1xyXG5cdFx0Y29tcG9uZW50czoge1xyXG4gICAgICAgICAgICBwaWNrZXJBZGRyZXNzXHJcbiAgICAgICAgfSxcclxuXHRcdGRhdGEoKSB7XHJcblx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0dGl0bGU6ICfmlrDlop4nLFxyXG5cdFx0XHRcdHBhcmFtOnt9LFxyXG5cdFx0XHRcdGNsYXNzQXR0ckxpc3Q6W10sXHJcblx0XHRcdFx0Y2xhc3NHcmlkU3R5bGU6W10sXHJcblx0XHRcdFx0ZWRpdF9pbml0YWxfZXZlbnQ6XCJcIiwgIC8v5by556qX5Yid5aeL5YyW5LqL5Lu2SURcclxuXHRcdFx0XHRlZGl0X29rX2V2ZW50OlwiXCIsICAgICAgLy/lvLnnqpfngrnlh7tPSyDop6blj5Hkuovku7ZJRFxyXG5cdFx0XHRcdGVkaXRfc2VsZWN0X2NvbXBvc2VfZXZlbnQ6XCJcIiwgIC8v6YCJ5oup57uE5oiQ5a+56LGh5pe26LCD55SoXHJcblx0XHRcdFx0ZWRpdF9jb21wb3NlX2Nsc19pZDpcIlwiLFxyXG5cdFx0XHRcdGdsb2JhbF9hdHRyOltdLFxyXG5cdFx0XHRcdHJlZmRhdGFzdG9yZTogW10sXHQgICAvL+W8leeUqOaVsOaNruWtmOWCqOWMui8vIHthdHRyOidHX1BSSl8nICsgYmluZGF0dHIgKyAnX0lEJywgdmFsdWU6aW5mby5pZH1cclxuXHRcdFx0XHRzY2FuQ29kZVZhbDpcIlwiLFxyXG5cdFx0XHRcdHN1YkNsYXNzQXR0ckxpc3Q6W10sXHJcblx0XHRcdFx0c3ViUGFuZWxMaXN0OltdLFxyXG5cdFx0XHRcdHN1YkNsYXNzR3JpZFN0eWxlOltdLFxyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cdFx0b25Mb2FkKG9wdGlvbnMpIHtcclxuXHRcdFx0Ly8gY29uc29sZS5sb2cob3B0aW9ucyk7XHJcblx0XHRcdHVuaS5zZXROYXZpZ2F0aW9uQmFyVGl0bGUoeyB0aXRsZTogb3B0aW9ucy50aXRsZW5hbWV9KTsgLy/orr7nva7pobbpg6jmoIfpopggXHJcblx0XHRcdHZhciBwYXJhbSA9IEpTT04ucGFyc2Uob3B0aW9ucy5wYXJhbSk7XHJcblx0XHRcdHRoaXMuJGRhdGEudGl0bGUgPSBwYXJhbS5BZGRfQnRuTmFtZT9wYXJhbS5BZGRfQnRuTmFtZTpvcHRpb25zLnRpdGxlbmFtZTsgLy/orr7nva7mjInpkq7mloflrZdcclxuXHRcdFx0Y29uc29sZS5sb2cocGFyYW0pO1xyXG5cdFx0XHRpZighcGFyYW0uTWFzdGVyX0Nscy5WaWV3X1N0eWxlKXtcclxuXHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCLor6Xlip/og73ngrnmnKrphY3nva7nlYzpnaLnqpflj6PvvIzor7fph43mlrDphY3nva7vvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0aWYoIXBhcmFtLk1hc3Rlcl9DbHMuVmlld19TdHlsZS5OYW1lKXtcclxuXHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCLor6Xlip/og73ngrnmnKrphY3nva7nqpflj6PmoLflvI/vvIzor7fph43mlrDphY3nva7vvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0dGhpcy4kZGF0YS5wYXJhbSA9IHBhcmFtO1xyXG5cdFx0XHQvLyB2YXIgZWRpdF9kbGcgPSB7XHJcblx0XHRcdC8vICAgICBNb2RlbDogcGFyYW0uRWRpdERsZ01vZGUsXHJcblx0XHRcdC8vICAgICBOYW1lOiBwYXJhbS5NYXN0ZXJfQ2xzLlZpZXdfU3R5bGUuTmFtZVxyXG5cdFx0XHQvLyB9XHJcblx0XHRcdC8v5Li75pWw5o2u57G76I635Y+WXHJcblx0XHRcdHZhciBkYXRhSW5mbyA9IHtcclxuXHRcdFx0XHRjbGFzc19pZDogcGFyYW0uTWFzdGVyX0Nscy5JRFxyXG5cdFx0XHR9O1xyXG5cdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0XHQkdGhpcy4kc3RvcmUuc3RhdGUudGhpc2FyZWFGdW5jSUQgPSBwYXJhbS5NYXN0ZXJfQ2xzLklEO1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZygkdGhpcy4kc3RvcmUuZ2V0dGVycy5nZXRjbGFzc0F0dHJMaXN0KTtcclxuXHRcdFx0aWYoJHRoaXMuJHN0b3JlLmdldHRlcnMuZ2V0Y2xhc3NBdHRyTGlzdCl7XHJcblx0XHRcdCBcdCR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3QgPSAkdGhpcy4kc3RvcmUuZ2V0dGVycy5nZXRjbGFzc0F0dHJMaXN0LmRhdGE7XHJcblx0XHRcdFx0JHRoaXMuY2xhc3NHcmlkU3R5bGVJbmZvKHBhcmFtLk1hc3Rlcl9DbHMuSUQsJHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5WaWV3X1N0eWxlLk5hbWUsJ01hc3QnKTtcclxuXHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0JHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdjbGFzc0F0dHJMaXN0JyxkYXRhSW5mbykudGhlbihzdWNjZXNzPT57XHJcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhzdWNjZXNzKTtcclxuXHRcdFx0XHRcdGlmIChzdWNjZXNzLmNvZGU9PScwMDAwMCcpIHtcclxuXHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdCA9IHN1Y2Nlc3MuZGF0YTtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdCR0aGlzLmNsYXNzR3JpZFN0eWxlSW5mbyhwYXJhbS5NYXN0ZXJfQ2xzLklELCR0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuVmlld19TdHlsZS5OYW1lLCdNYXN0Jyk7XHJcblx0XHRcdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68xXCIsY29udGVudDpzdWNjZXNzLm1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KS5jYXRjaChleD0+e1xyXG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68xLjFcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0XHRcclxuXHRcdFx0Ly/ku47mlbDmja7nsbvojrflj5ZcclxuXHRcdFx0dmFyIHN1YmRhdGFJbmZvID0ge1xyXG5cdFx0XHRcdGNsYXNzX2lkOiBwYXJhbS5TdWJfQ2xzLklEXHJcblx0XHRcdH07XHJcblx0XHRcdCR0aGlzLiRzdG9yZS5zdGF0ZS50aGlzYXJlYUZ1bmNTdWJJRCA9IHBhcmFtLlN1Yl9DbHMuSUQ7XHJcblx0XHRcdGlmKCR0aGlzLiRzdG9yZS5nZXR0ZXJzLmdldFN1YkNsYXNzQXR0ckxpc3Qpe1xyXG5cdFx0XHQgXHQkdGhpcy4kZGF0YS5zdWJDbGFzc0F0dHJMaXN0ID0gJHRoaXMuJHN0b3JlLmdldHRlcnMuZ2V0U3ViQ2xhc3NBdHRyTGlzdC5kYXRhO1xyXG5cdFx0XHRcdFx0XHQkdGhpcy5jbGFzc0dyaWRTdHlsZUluZm8ocGFyYW0uU3ViX0Nscy5JRCwkdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLlZpZXdfU3R5bGUuTmFtZSwnU3ViJyk7XHJcblx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdCR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnc3ViQ2xhc3NBdHRyTGlzdCcsc3ViZGF0YUluZm8pLnRoZW4oc3VjY2Vzcz0+e1xyXG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coc3VjY2Vzcyk7XHJcblx0XHRcdFx0XHRpZiAoc3VjY2Vzcy5jb2RlPT0nMDAwMDAnKSB7XHJcblx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3QgPSBzdWNjZXNzLmRhdGE7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHQkdGhpcy5jbGFzc0dyaWRTdHlsZUluZm8ocGFyYW0uU3ViX0Nscy5JRCwkdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLlZpZXdfU3R5bGUuTmFtZSwnU3ViJyk7XHJcblx0XHRcdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68xXzFcIixjb250ZW50OnN1Y2Nlc3MubXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pLmNhdGNoKGV4PT57XHJcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhleCk7XHJcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzFfMS4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblx0XHRtZXRob2RzOiB7XHJcblx0XHRcdGNhbmNlbChlKXtcclxuXHRcdFx0XHR1bmkubmF2aWdhdGVCYWNrKHtcclxuXHRcdFx0XHRcdGRlbHRhOjEgLy/ov5Tlm57lsYLmlbDvvIwy5YiZ5LiK5LiK6aG1XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHBhbmVsX2RlbChpbmRleCl7XHJcblx0XHRcdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdFx0XHRpZiAodGhpcy4kZGF0YS5zdWJQYW5lbExpc3RbaW5kZXhdLnNjYW5Db2RlVmFsID09IHRoaXMuJGRhdGEuc2NhbkNvZGVWYWwpIHtcclxuXHRcdFx0XHRcdHRoaXMuJGRhdGEuc2NhbkNvZGVWYWw9Jyc7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmKCF0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtpbmRleF0uT2JqSUQpXHJcblx0XHRcdFx0XHR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xyXG5cdFx0XHRcdGVsc2V7XHJcblx0XHRcdFx0XHR2YXIgZGF0YUluZm8gPSB7XHJcblx0XHRcdFx0XHRcdGNsc0lkOnRoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5JRCxcclxuXHRcdFx0XHRcdFx0b2JqSWQ6dGhpcy4kZGF0YS5zdWJQYW5lbExpc3RbaW5kZXhdLk9iaklEXHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2coZGF0YUluZm8pO1xyXG5cdFx0XHRcdFx0Ly8gcmV0dXJuO1xyXG5cdFx0XHRcdFx0dW5pLnNob3dMb2FkaW5nKHsgdGl0bGU6XCLliqDovb3kuK0uLi5cIiB9KTtcclxuXHRcdFx0XHRcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdEZWxPYmonLGRhdGFJbmZvKS50aGVuKHN1Y2Nlc3M9PntcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coc3VjY2Vzcyk7XHJcblx0XHRcdFx0XHRcdHVuaS5oaWRlTG9hZGluZygpO1xyXG5cdFx0XHRcdFx0XHRpZiAoc3VjY2Vzcy5jb2RlPT0nMDAwMDAnKSB7XHJcblx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0LnNwbGljZShpbmRleCwgMSk7XHJcblx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50Olwi5Yig6Zmk5oiQ5Yqf77yBXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vOVwiLGNvbnRlbnQ6c3VjY2Vzcy5tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0pLmNhdGNoKGV4PT57XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGV4KTtcclxuXHRcdFx0XHRcdFx0dW5pLmhpZGVMb2FkaW5nKCk7XHJcblx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6OS4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblx0XHRcdGFzeW5jIGNsYXNzR3JpZFN0eWxlSW5mbyhjbHNpZCxzdHlsZU5hbWUsY2xzVHlwZSl7XHJcblx0XHRcdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdFx0XHR2YXIgZ3JpZHN0eWxlSW5mbyA9IHtcclxuXHRcdFx0XHRcdGNsYXNzX2lkOiBjbHNpZCxcclxuXHRcdFx0XHRcdG5hbWU6IHN0eWxlTmFtZSxcclxuXHRcdFx0XHRcdHR5cGU6ICcyJ1xyXG5cdFx0XHRcdH07XHJcblx0XHRcdFx0JHRoaXMuJHN0b3JlLnN0YXRlLnRoaXNFZGl0TmFtZSA9IHN0eWxlTmFtZTtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZygkdGhpcy4kc3RvcmUuZ2V0dGVycy5nZXRjbGFzc0dyaWRTdHlsZUluZm8pO1xyXG5cdFx0XHRcdC8v6I635Y+W5Li75pWw5o2u57G755WM6Z2i5qC35byPXHJcblx0XHRcdFx0aWYoY2xzVHlwZT09J01hc3QnKXtcclxuXHRcdFx0XHRcdGlmKCR0aGlzLiRzdG9yZS5nZXR0ZXJzLmdldGNsYXNzR3JpZFN0eWxlSW5mbyl7XHJcblx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlID0gJHRoaXMuJHN0b3JlLmdldHRlcnMuZ2V0Y2xhc3NHcmlkU3R5bGVJbmZvLmRhdGE7XHJcblx0XHRcdFx0XHRcdCR0aGlzLmNsYXNzX2F0dHJfaW5pdCgpO1xyXG5cdFx0XHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0XHRcdC8vY29uc29sZS5sb2coZ3JpZHN0eWxlSW5mbyk7XHJcblx0XHRcdFx0XHRcdCR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnY2xhc3NHcmlkU3R5bGVJbmZvJyxncmlkc3R5bGVJbmZvKS50aGVuKHN1Y2Nlc3M9PntcclxuXHRcdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhzdWNjZXNzKTtcclxuXHRcdFx0XHRcdFx0XHRpZiAoc3VjY2Vzcy5jb2RlPT0nMDAwMDAnKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRzdWNjZXNzLmRhdGEuU3R5bGVEZWYgPSBKU09OLnBhcnNlKHN1Y2Nlc3MuZGF0YS5TdHlsZURlZik7XHJcblx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZSA9IHN1Y2Nlc3MuZGF0YTtcclxuXHRcdFx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdFx0JHRoaXMuY2xhc3NfYXR0cl9pbml0KCk7XHJcblx0XHRcdFx0XHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzEuMlwiLGNvbnRlbnQ6c3VjY2Vzcy5tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9KS5jYXRjaChleD0+e1xyXG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGV4KTtcclxuXHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzEuM1wiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9IGVsc2UgaWYoY2xzVHlwZT09J1N1YicpeyAgLy/ojrflj5bku47mlbDmja7nsbvnlYzpnaLmoLflvI9cclxuXHRcdFx0XHRcdGlmKCR0aGlzLiRzdG9yZS5nZXR0ZXJzLmdldFN1YkNsYXNzR3JpZFN0eWxlSW5mbyl7XHJcblx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlID0gJHRoaXMuJHN0b3JlLmdldHRlcnMuZ2V0U3ViQ2xhc3NHcmlkU3R5bGVJbmZvLmRhdGE7XHJcblx0XHRcdFx0XHRcdCR0aGlzLnN1YkNsYXNzX2F0dHJfaW5pdCgpO1xyXG5cdFx0XHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0XHRcdC8vY29uc29sZS5sb2coZ3JpZHN0eWxlSW5mbyk7XHJcblx0XHRcdFx0XHRcdCR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnc3ViQ2xhc3NHcmlkU3R5bGVJbmZvJyxncmlkc3R5bGVJbmZvKS50aGVuKHN1Y2Nlc3M9PntcclxuXHRcdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhzdWNjZXNzKTtcclxuXHRcdFx0XHRcdFx0XHRpZiAoc3VjY2Vzcy5jb2RlPT0nMDAwMDAnKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRzdWNjZXNzLmRhdGEuU3R5bGVEZWYgPSBKU09OLnBhcnNlKHN1Y2Nlc3MuZGF0YS5TdHlsZURlZik7XHJcblx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5zdWJDbGFzc0dyaWRTdHlsZSA9IHN1Y2Nlc3MuZGF0YTtcclxuXHRcdFx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdFx0JHRoaXMuc3ViQ2xhc3NfYXR0cl9pbml0KCk7XHJcblx0XHRcdFx0XHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzEuMlwiLGNvbnRlbnQ6c3VjY2Vzcy5tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9KS5jYXRjaChleD0+e1xyXG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGV4KTtcclxuXHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzEuM1wiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblx0XHRcdG9udGFwKGUpeyAvL+aJq+eggeWKn+iDvVxyXG5cdFx0XHRcdC8vY29uc29sZS5sb2coZS50YXJnZXQpXHJcblx0XHRcdFx0Z2V0QXBwKCkub25TY2FuKChyZXN1bHQpPT57XHJcblx0XHRcdFx0XHQvL2NvbnNvbGUubG9nKHJlc3VsdC5kZWNvZGVkYXRhKTtcclxuXHRcdFx0XHRcdHZhciBpc1ZhbCA9dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlO1xyXG5cdFx0XHRcdFx0Ly/kuLvmlbDmja7nsbvmiavnoIHmn6Xor6LmlbDmja5cclxuXHRcdFx0XHRcdGlmIChpc1ZhbCE9cmVzdWx0LmRlY29kZWRhdGEpIHtcclxuXHRcdFx0XHRcdFx0dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlPXJlc3VsdC5kZWNvZGVkYXRhO1xyXG5cdFx0XHRcdFx0XHQvL+WtkOaVsOaNruexu+aJq+eggeWMuuS6i+S7tuiEmuacrFxyXG5cdFx0XHRcdFx0XHR2YXIgZXZlbnRpZCA9IHRoaXMuJGRhdGEucGFyYW0uU2Nhbl9Db2RlLklucHV0X0NoYW5nZV9FdmVudC5JRDtcclxuXHRcdFx0XHRcdFx0aWYgKGV2ZW50aWQpIHtcclxuXHRcdFx0XHRcdCAgICAgICAgdmFyIHJlcT1bXTtcclxuXHRcdFx0XHRcdCAgICAgICAgdmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0OyAgLy/kuLvmlbDmja7nsbvlsZ7mgKdcclxuXHRcdFx0XHRcdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0ICAgICAgICBcdHZhciBhdHRyID0gYXR0cmxpc3RbaV0uQXR0cjtcclxuXHRcdFx0XHRcdCAgICAgICAgXHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcclxuXHRcdFx0XHRcdCAgICAgICAgXHRcdHZhciBhciA9IGF0dHJbal07XHJcblx0XHRcdFx0XHQgICAgICAgIFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxyXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0XHRpZihhci5WYWx1ZT09J+ivtycpIGFyLlZhbHVlPScnO1xyXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0aWYoYXIuVHlwZT09J+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZT09J+W8leeUqOmhueebricpXHJcblx0XHRcdFx0XHQgICAgICAgIFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XHJcblx0XHRcdFx0XHQgICAgICAgIFx0XHRlbHNlIGlmKGFyLlR5cGU9PSfluIPlsJTlgLwnKVxyXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZT8nMSc6JzAnfSk7XHJcblx0XHRcdFx0XHQgICAgICAgIFx0XHRlbHNlXHJcblx0XHRcdFx0XHQgICAgICAgIFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlID9hci5WYWx1ZSA6Jyd9KTtcclxuXHRcdFx0XHRcdCAgICAgICAgXHR9XHJcblx0XHRcdFx0XHQgICAgICAgIH1cclxuXHRcdFx0XHRcdCAgICAgICAgdmFyIGluZm8gPSB7XHJcblx0XHRcdFx0XHQgICAgICAgICAgICBldmVudGlkOiBldmVudGlkLFxyXG5cdFx0XHRcdFx0ICAgICAgICAgICAgZWR0eXBlOiBcIjdcIiwvL1wiMFwiLFxyXG5cdFx0XHRcdFx0ICAgICAgICAgICAgcHJvamVjdGlkOiAnJyxcclxuXHRcdFx0XHRcdCAgICAgICAgICAgIHJjbHNpZDogJycsXHJcblx0XHRcdFx0XHQgICAgICAgICAgICByb2JqaWQ6ICcnLFxyXG5cdFx0XHRcdFx0ICAgICAgICAgICAgdXNlcmxvZ2luOiAnJyxcclxuXHRcdFx0XHRcdCAgICAgICAgICAgIGNsc2lkOiAnTUJPWCcsLy90aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuSUQsXHJcblx0XHRcdFx0XHQgICAgICAgICAgICBvYmppZDogXCJcIixcclxuXHRcdFx0XHRcdCAgICAgICAgICAgIGF0dHI6IHJlcSxcclxuXHRcdFx0XHRcdFx0XHRcdG1hc3RfYXR0cjogW10sXHJcblx0XHRcdFx0XHRcdFx0XHRpbnB1dFBhcmFtdGVyOlt7IGF0dHI6ICdtYXN0X2lucHV0XzMwMzcnLCB2YWx1ZTogcmVzdWx0LmRlY29kZWRhdGEgfV1cclxuXHRcdFx0XHRcdCAgICAgICAgfVxyXG5cdFx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0ICAgICAgICB0aGlzLnNjYW5fRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8sIFwiXCIpO1xyXG5cdFx0XHRcdFx0ICAgIH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRzY2FuX29udGFwKGUpeyAvL+aJq+eggeWMuuaJq+eggeWKn+iDvVxyXG5cdFx0XHRcdC8vY29uc29sZS5sb2coZS50YXJnZXQpXHJcblx0XHRcdFx0Z2V0QXBwKCkub25TY2FuKChyZXN1bHQpPT57XHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhyZXN1bHQuZGVjb2RlZGF0YSk7XHJcblx0XHRcdFx0XHR2YXIgaXNmbGFnPXRydWU7XHJcblx0XHRcdFx0XHRmb3IodmFyIGkgaW4gdGhpcy4kZGF0YS5zdWJQYW5lbExpc3Qpe1xyXG5cdFx0XHRcdFx0XHRpZih0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtpXS5zY2FuQ29kZVZhbCA9PSByZXN1bHQuZGVjb2RlZGF0YSkgXHJcblx0XHRcdFx0XHRcdFx0aXNmbGFnPWZhbHNlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Ly/lrZDmlbDmja7nsbvmiavnoIHmn6Xor6LmlbDmja5cclxuXHRcdFx0XHRcdGlmIChpc2ZsYWcpIHtcclxuXHRcdFx0XHRcdFx0dGhpcy4kZGF0YS5zY2FuQ29kZVZhbD1yZXN1bHQuZGVjb2RlZGF0YTtcclxuXHRcdFx0XHRcdFx0dmFyIGV2ZW50aWQgPSB0aGlzLiRkYXRhLnBhcmFtLlNjYW5fQ29kZS5JbnB1dF9DaGFuZ2VfRXZlbnQuSUQ7XHJcblx0XHRcdFx0XHRcdGlmIChldmVudGlkKSB7XHJcblx0XHRcdFx0XHQgICAgICAgIHZhciBtYXN0X3JlcT1bXTtcclxuXHRcdFx0XHRcdFx0XHQvL+S4u+aVsOaNruexu+WxnuaAp1xyXG5cdFx0XHRcdFx0XHRcdHZhciBjbGFzc2F0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0OyAgXHJcblx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBjbGFzc2F0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgYXR0ciA9IGNsYXNzYXR0cmxpc3RbaV0uQXR0cjtcclxuXHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1hc3RfcmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsSUQgP2FyLlZhbElEIDonJyB9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8JylcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRtYXN0X3JlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlPycxJzonMCd9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZWxzZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1hc3RfcmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWUgP2FyLlZhbHVlIDonJ30pO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdCAgICAgICAgdmFyIHJlcT1bXTtcclxuXHRcdFx0XHRcdCAgICAgICAgLy/lrZDmlbDmja7nsbvlsZ7mgKdcclxuXHRcdFx0XHRcdFx0XHR2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3Q7XHJcblx0XHRcdFx0XHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHsgXHJcblx0XHRcdFx0XHQgICAgICAgIFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xyXG5cdFx0XHRcdFx0ICAgICAgICBcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xyXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0dmFyIGFyID0gYXR0cltqXTtcclxuXHRcdFx0XHRcdCAgICAgICAgXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpXHJcblx0XHRcdFx0XHQgICAgICAgIFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XHJcblx0XHRcdFx0XHQgICAgICAgIFx0XHRpZihhci5UeXBlPT0n5byV55So5Lq65ZGYJyB8fCBhci5UeXBlPT0n5byV55So6aG555uuJylcclxuXHRcdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsSUQgP2FyLlZhbElEIDonJyB9KTtcclxuXHRcdFx0XHRcdCAgICAgICAgXHRcdGVsc2UgaWYoYXIuVHlwZT09J+W4g+WwlOWAvCcpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWU/JzEnOicwJ30pO1xyXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZVxyXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZSA/YXIuVmFsdWUgOicnfSk7XHJcblx0XHRcdFx0XHQgICAgICAgIFx0fVxyXG5cdFx0XHRcdFx0ICAgICAgICB9XHJcblx0XHRcdFx0XHQgICAgICAgIHZhciBpbmZvID0ge1xyXG5cdFx0XHRcdFx0ICAgICAgICAgICAgZXZlbnRpZDogZXZlbnRpZCxcclxuXHRcdFx0XHRcdCAgICAgICAgICAgIGVkdHlwZTogJzcnLC8vXCIwXCIsXHJcblx0XHRcdFx0XHQgICAgICAgICAgICBwcm9qZWN0aWQ6ICcnLFxyXG5cdFx0XHRcdFx0ICAgICAgICAgICAgcmNsc2lkOiAnJyxcclxuXHRcdFx0XHRcdCAgICAgICAgICAgIHJvYmppZDogJycsXHJcblx0XHRcdFx0XHQgICAgICAgICAgICB1c2VybG9naW46ICcnLFxyXG5cdFx0XHRcdFx0ICAgICAgICAgICAgY2xzaWQ6ICdNQk9YJywvL3RoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5JRCxcclxuXHRcdFx0XHRcdCAgICAgICAgICAgIG9iamlkOiBcIlwiLFxyXG5cdFx0XHRcdFx0ICAgICAgICAgICAgYXR0cjogcmVxLFxyXG5cdFx0XHRcdFx0XHRcdFx0bWFzdF9hdHRyOiBtYXN0X3JlcSxcclxuXHRcdFx0XHRcdFx0XHRcdGlucHV0UGFyYW10ZXI6W3sgYXR0cjogJ2lucHV0XzMwMzcnLCB2YWx1ZTogdGhpcy4kZGF0YS5zY2FuQ29kZVZhbCB9XVxyXG5cdFx0XHRcdFx0ICAgICAgICB9XHJcblx0XHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHQgICAgICAgIHRoaXMuc2Nhbl9EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbywgXCJcIik7XHJcblx0XHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0sXHJcblx0XHRcdG9uYXJyb3coaW5kZXgsb3Blbil7XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coaW5kZXgrJy0tJytvcGVuKTtcclxuXHRcdFx0XHR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbaW5kZXhdLk9wZW49b3Blbj09dHJ1ZT9mYWxzZTp0cnVlO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRvbmRhdGVUaW1lKGUpIHtcclxuXHRcdFx0XHQvL2NvbnNvbGUubG9nKGUudGFyZ2V0KVxyXG5cdFx0XHRcdHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5WYWx1ZT1lLnRhcmdldC52YWx1ZTtcclxuXHRcdFx0fSxcclxuXHRcdFx0b25jaGFuZ2UoZSkge1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGUudGFyZ2V0KTtcclxuXHRcdFx0XHR2YXIgdmFsdWU9dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLmRpY3RpdGVtW2UudGFyZ2V0LnZhbHVlXTtcclxuXHRcdFx0XHR2YXIgZGF0YV9hdHRyID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dO1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGRhdGFfYXR0cik7XHJcblx0XHRcdFx0aWYgKHZhbHVlLk5hbWUgIT0gZGF0YV9hdHRyLlZhbHVlKSB7XHJcblx0XHRcdFx0XHR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWU9dmFsdWUuTmFtZTtcclxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5WYWx1ZSk7XHJcblx0XHRcdFx0XHR2YXIgZXZlbnRpZCA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5hY3Rpb247XHJcblx0XHRcdFx0XHRpZiAoZXZlbnRpZCkge1xyXG5cdFx0XHRcdCAgICAgICAgLy8gc2VsZi5ldmVudF9ub19zdWIgPSAxO1xyXG5cdFx0XHRcdCAgICAgICAgdmFyIHJlcT1bXTtcclxuXHRcdFx0XHQgICAgICAgIHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdDtcclxuXHRcdFx0XHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHQgICAgICAgIFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xyXG5cdFx0XHRcdCAgICAgICAgXHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcclxuXHRcdFx0XHQgICAgICAgIFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xyXG5cdFx0XHRcdCAgICAgICAgXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpXHJcblx0XHRcdFx0ICAgICAgICBcdFx0XHRpZihhci5WYWx1ZT09J+ivtycpIGFyLlZhbHVlPScnO1xyXG5cdFx0XHRcdCAgICAgICAgXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxyXG5cdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XHJcblx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8JylcclxuXHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbHVlPycxJzonMCd9KTtcclxuXHRcdFx0XHQgICAgICAgIFx0XHRlbHNlXHJcblx0XHRcdFx0ICAgICAgICBcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsdWUgP2FyLlZhbHVlIDonJ30pO1xyXG5cdFx0XHRcdCAgICAgICAgXHR9XHJcblx0XHRcdFx0ICAgICAgICB9XHJcblx0XHRcdFx0ICAgICAgICB2YXIgaW5mbyA9IHtcclxuXHRcdFx0XHQgICAgICAgICAgICBldmVudGlkOiBldmVudGlkLFxyXG5cdFx0XHRcdCAgICAgICAgICAgIGVkdHlwZTogXCIwXCIsXHJcblx0XHRcdFx0ICAgICAgICAgICAgcHJvamVjdGlkOiAnJyxcclxuXHRcdFx0XHQgICAgICAgICAgICByY2xzaWQ6ICcnLFxyXG5cdFx0XHRcdCAgICAgICAgICAgIHJvYmppZDogJycsXHJcblx0XHRcdFx0ICAgICAgICAgICAgdXNlcmxvZ2luOiAnJyxcclxuXHRcdFx0XHQgICAgICAgICAgICBjbHNpZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELFxyXG5cdFx0XHRcdCAgICAgICAgICAgIG9iamlkOiBcIlwiLFxyXG5cdFx0XHRcdCAgICAgICAgICAgIGF0dHI6IHJlcSxcclxuXHRcdFx0XHQgICAgICAgIH1cclxuXHRcdFx0XHQgICAgICAgIHRoaXMuRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8pO1xyXG5cdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdFxyXG5cdFx0XHR9LFxyXG5cdFx0XHRvbmNoYW5nZTIoaXRlbSx2YWx1ZSxkZWx2YWx1ZSkge1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGl0ZW0pO1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKHZhbHVlKTtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhkZWx2YWx1ZSk7XHJcblx0XHRcdFx0aWYoaXRlbS5sZW5ndGg9PTApeyAvL+S4uuepuuaXtu+8jOa4heepuuWxnuaAp3ZhbHVlXHJcblx0XHRcdFx0XHR2YXIgaW5kZXggLGlpbmRleCxkaW5kZXg9MDtcclxuXHRcdFx0XHRcdGZvcih2YXIgaSBpbiB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Qpe1xyXG5cdFx0XHRcdFx0XHRmb3IodmFyIGogaW4gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2ldLkF0dHIpe1xyXG5cdFx0XHRcdFx0XHRcdGZvcih2YXIgZCBpbiB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbaV0uQXR0cltqXS5kaWN0aXRlbSl7XHJcblx0XHRcdFx0XHRcdFx0XHRpZihkZWx2YWx1ZVswXS5OYW1lID09IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpXS5BdHRyW2pdLmRpY3RpdGVtW2RdLk5hbWUpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbaV0uQXR0cltqXS5WYWx1ZT1cIlwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRcdFxyXG5cdFx0XHRcdGZvcih2YXIgdiBpbiBpdGVtKXtcclxuXHRcdFx0XHRcdHZhciBpbmRleCAsaWluZGV4LGRpbmRleD0wO1xyXG5cdFx0XHRcdFx0Zm9yKHZhciBpIGluIHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdCl7XHJcblx0XHRcdFx0XHRcdGZvcih2YXIgaiBpbiB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbaV0uQXR0cil7XHJcblx0XHRcdFx0XHRcdFx0Zm9yKHZhciBkIGluIHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpXS5BdHRyW2pdLmRpY3RpdGVtKXtcclxuXHRcdFx0XHRcdFx0XHRcdGlmKGl0ZW1bdl0uTmFtZSA9PSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbaV0uQXR0cltqXS5kaWN0aXRlbVtkXS5OYW1lKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aW5kZXg9aTtpaW5kZXg9ajtkaW5kZXg9ZDtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHZhciBpdGVtdmFsdWUgPSBpdGVtW3ZdO1xyXG5cdFx0XHRcdFx0dmFyIGRhdGFfYXR0ciA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpbmRleF0uQXR0cltpaW5kZXhdO1xyXG5cdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhkYXRhX2F0dHIpO1xyXG5cdFx0XHRcdFx0aWYgKGl0ZW12YWx1ZS5OYW1lICE9IGRhdGFfYXR0ci5WYWx1ZSkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbaW5kZXhdLkF0dHJbaWluZGV4XS5WYWx1ZT12YWx1ZTtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2codGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2luZGV4XS5BdHRyW2lpbmRleF0uVmFsdWUpO1xyXG5cdFx0XHRcdFx0XHR2YXIgZXZlbnRpZCA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpbmRleF0uQXR0cltpaW5kZXhdLmFjdGlvbjtcclxuXHRcdFx0XHRcdFx0aWYgKGV2ZW50aWQpIHtcclxuXHRcdFx0XHRcdCAgICAgICAgLy8gc2VsZi5ldmVudF9ub19zdWIgPSAxO1xyXG5cdFx0XHRcdFx0ICAgICAgICB2YXIgcmVxPVtdO1xyXG5cdFx0XHRcdFx0ICAgICAgICB2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Q7XHJcblx0XHRcdFx0XHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdCAgICAgICAgXHR2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLkF0dHI7XHJcblx0XHRcdFx0XHQgICAgICAgIFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0XHQgICAgICAgIFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xyXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0aWYoYXIuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJylcclxuXHRcdFx0XHRcdCAgICAgICAgXHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcclxuXHRcdFx0XHRcdCAgICAgICAgXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxyXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsSUQgP2FyLlZhbElEIDonJyB9KTtcclxuXHRcdFx0XHRcdCAgICAgICAgXHRcdGVsc2UgaWYoYXIuVHlwZT09J+W4g+WwlOWAvCcpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbHVlPycxJzonMCd9KTtcclxuXHRcdFx0XHRcdCAgICAgICAgXHRcdGVsc2UgaWYoYXIuVHlwZT09J+Wtl+WFuCcgfHwgYXIuVHlwZT09J+Wtl+WFuC3lrZfnrKbkuLInKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsOiBpdGVtdmFsdWUuTmFtZX0pO1xyXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZVxyXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsdWUgP2FyLlZhbHVlIDonJ30pO1xyXG5cdFx0XHRcdFx0ICAgICAgICBcdH1cclxuXHRcdFx0XHRcdCAgICAgICAgfVxyXG5cdFx0XHRcdFx0ICAgICAgICB2YXIgaW5mbyA9IHtcclxuXHRcdFx0XHRcdCAgICAgICAgICAgIGV2ZW50aWQ6IGV2ZW50aWQsXHJcblx0XHRcdFx0XHQgICAgICAgICAgICBlZHR5cGU6IFwiMFwiLFxyXG5cdFx0XHRcdFx0ICAgICAgICAgICAgcHJvamVjdGlkOiAnJyxcclxuXHRcdFx0XHRcdCAgICAgICAgICAgIHJjbHNpZDogJycsXHJcblx0XHRcdFx0XHQgICAgICAgICAgICByb2JqaWQ6ICcnLFxyXG5cdFx0XHRcdFx0ICAgICAgICAgICAgdXNlcmxvZ2luOiAnJyxcclxuXHRcdFx0XHRcdCAgICAgICAgICAgIGNsc2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsXHJcblx0XHRcdFx0XHQgICAgICAgICAgICBvYmppZDogXCJcIixcclxuXHRcdFx0XHRcdCAgICAgICAgICAgIGF0dHI6IHJlcSxcclxuXHRcdFx0XHRcdCAgICAgICAgfVxyXG5cdFx0XHRcdFx0ICAgICAgICB0aGlzLkRhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvKTtcclxuXHRcdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdFxyXG5cdFx0XHR9LFxyXG5cdFx0XHRvbmV2ZW50KGUpe1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGUudGFyZ2V0KTtcclxuXHRcdFx0XHR2YXIgZGF0YV9hdHRyID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dO1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGRhdGFfYXR0cik7XHJcblx0XHRcdFx0aWYgKGUudGFyZ2V0LnZhbHVlICE9IGRhdGFfYXR0ci5WYWx1ZSkge1xyXG5cdFx0XHRcdFx0dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlPWUudGFyZ2V0LnZhbHVlO1xyXG5cdFx0XHRcdFx0dmFyIGV2ZW50aWQgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uYWN0aW9uO1xyXG5cdFx0XHRcdFx0aWYgKGV2ZW50aWQpIHtcclxuXHRcdFx0XHQgICAgICAgIC8vIHNlbGYuZXZlbnRfbm9fc3ViID0gMTtcclxuXHRcdFx0XHQgICAgICAgIHZhciByZXE9W107XHJcblx0XHRcdFx0ICAgICAgICB2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Q7XHJcblx0XHRcdFx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0ICAgICAgICBcdHZhciBhdHRyID0gYXR0cmxpc3RbaV0uQXR0cjtcclxuXHRcdFx0XHQgICAgICAgIFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0ICAgICAgICBcdFx0dmFyIGFyID0gYXR0cltqXTtcclxuXHRcdFx0XHQgICAgICAgIFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxyXG5cdFx0XHRcdCAgICAgICAgXHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcclxuXHRcdFx0XHQgICAgICAgIFx0XHRpZihhci5UeXBlPT0n5byV55So5Lq65ZGYJyB8fCBhci5UeXBlPT0n5byV55So6aG555uuJylcclxuXHRcdFx0XHQgICAgICAgIFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsOiBhci5WYWxJRCA/YXIuVmFsSUQgOicnIH0pO1xyXG5cdFx0XHRcdCAgICAgICAgXHRcdGVsc2UgaWYoYXIuVHlwZT09J+W4g+WwlOWAvCcpXHJcblx0XHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsOiBhci5WYWx1ZT8nMSc6JzAnfSk7XHJcblx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZVxyXG5cdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbHVlID9hci5WYWx1ZSA6Jyd9KTtcclxuXHRcdFx0XHQgICAgICAgIFx0fVxyXG5cdFx0XHRcdCAgICAgICAgfVxyXG5cdFx0XHRcdCAgICAgICAgdmFyIGluZm8gPSB7XHJcblx0XHRcdFx0ICAgICAgICAgICAgZXZlbnRpZDogZXZlbnRpZCxcclxuXHRcdFx0XHQgICAgICAgICAgICBlZHR5cGU6IFwiMFwiLFxyXG5cdFx0XHRcdCAgICAgICAgICAgIHByb2plY3RpZDogJycsXHJcblx0XHRcdFx0ICAgICAgICAgICAgcmNsc2lkOiAnJyxcclxuXHRcdFx0XHQgICAgICAgICAgICByb2JqaWQ6ICcnLFxyXG5cdFx0XHRcdCAgICAgICAgICAgIHVzZXJsb2dpbjogJycsXHJcblx0XHRcdFx0ICAgICAgICAgICAgY2xzaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCxcclxuXHRcdFx0XHQgICAgICAgICAgICBvYmppZDogXCJcIixcclxuXHRcdFx0XHQgICAgICAgICAgICBhdHRyOiByZXEsXHJcblx0XHRcdFx0ICAgICAgICB9XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLkRhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvLCBkYXRhX2F0dHIpO1xyXG5cdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdFxyXG5cdFx0XHR9LFxyXG5cdFx0XHRvbmNoZWNrKGUpIHtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhlLnRhcmdldCk7XHJcblx0XHRcdFx0dmFyIGlzY2hlY2tlZCA9IGUudGFyZ2V0LmRhdGFzZXQuaXNjaGVjaz9mYWxzZTp0cnVlO1xyXG5cdFx0XHRcdHZhciBkYXRhX2F0dHIgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV07XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coZGF0YV9hdHRyKTtcclxuXHRcdFx0XHRpZiAoaXNjaGVja2VkICE9IGRhdGFfYXR0ci5WYWx1ZSkge1xyXG5cdFx0XHRcdFx0dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlPWlzY2hlY2tlZDtcclxuXHRcdFx0XHRcdHZhciBldmVudGlkID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLmFjdGlvbjtcclxuXHRcdFx0XHRcdGlmIChldmVudGlkKSB7XHJcblx0XHRcdFx0ICAgICAgICAvLyBzZWxmLmV2ZW50X25vX3N1YiA9IDE7XHJcblx0XHRcdFx0ICAgICAgICB2YXIgcmVxPVtdO1xyXG5cdFx0XHRcdCAgICAgICAgdmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0O1xyXG5cdFx0XHRcdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdCAgICAgICAgXHR2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLkF0dHI7XHJcblx0XHRcdFx0ICAgICAgICBcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xyXG5cdFx0XHRcdCAgICAgICAgXHRcdHZhciBhciA9IGF0dHJbal07XHJcblx0XHRcdFx0ICAgICAgICBcdFx0aWYoYXIuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJylcclxuXHRcdFx0XHQgICAgICAgIFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XHJcblx0XHRcdFx0ICAgICAgICBcdFx0aWYoYXIuVHlwZT09J+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZT09J+W8leeUqOmhueebricpXHJcblx0XHRcdFx0ICAgICAgICBcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsSUQgP2FyLlZhbElEIDonJyB9KTtcclxuXHRcdFx0XHQgICAgICAgIFx0XHRlbHNlIGlmKGFyLlR5cGU9PSfluIPlsJTlgLwnKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsdWU/JzEnOicwJ30pO1xyXG5cdFx0XHRcdFx0XHRcdFx0ZWxzZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsdWUgP2FyLlZhbHVlIDonJ30pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0ICAgICAgICBcdH1cclxuXHRcdFx0XHQgICAgICAgIH1cclxuXHRcdFx0XHQgICAgICAgIHZhciBpbmZvID0ge1xyXG5cdFx0XHRcdCAgICAgICAgICAgIGV2ZW50aWQ6IGV2ZW50aWQsXHJcblx0XHRcdFx0ICAgICAgICAgICAgZWR0eXBlOiBcIjBcIixcclxuXHRcdFx0XHQgICAgICAgICAgICBwcm9qZWN0aWQ6ICcnLFxyXG5cdFx0XHRcdCAgICAgICAgICAgIHJjbHNpZDogJycsXHJcblx0XHRcdFx0ICAgICAgICAgICAgcm9iamlkOiAnJyxcclxuXHRcdFx0XHQgICAgICAgICAgICB1c2VybG9naW46ICcnLFxyXG5cdFx0XHRcdCAgICAgICAgICAgIGNsc2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsXHJcblx0XHRcdFx0ICAgICAgICAgICAgb2JqaWQ6IFwiXCIsXHJcblx0XHRcdFx0ICAgICAgICAgICAgYXR0cjogcmVxLFxyXG5cdFx0XHRcdCAgICAgICAgfVxyXG5cdFx0XHRcdCAgICAgICAgdGhpcy5EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbyk7XHJcblx0XHRcdFx0ICAgIH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0XHJcblx0XHRcdH0sXHJcblx0XHRcdGlucHV0VmFsTGlzdElzRGVsKGluZGV4KXtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhpbmRleCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRkYXRhLmlucHV0VmFsTGlzdC5zcGxpY2UoaW5kZXgsIDEpOyAvL+WIoOmZpHRhYlBhZ2Vqc29u55qE5YaF5a65XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2codGhpcy4kZGF0YS5pbnB1dFZhbExpc3QpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRhZGRyZXNzY2hhbmdlKGUpIHtcclxuXHRcdFx0ICAgIC8vIGNvbnNvbGUubG9nKGUudGFyZ2V0KTtcclxuXHRcdFx0ICAgIGNvbnNvbGUubG9nKGUuZGF0YS5qb2luKCc7JykpXHJcblx0XHRcdFx0dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlPWUuZGF0YS5qb2luKCc7Jyk7XHJcblx0XHRcdH0sXHJcblx0XHRcdGNsYXNzQXR0cl9leHRCdXR0b24oaW5kZXgsaWluZGV4KXtcclxuXHRcdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0XHRcdHZhciBiZWZvcmVfY2xpY2tfYnV0dG9uID0gJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpbmRleF0uQXR0cltpaW5kZXhdLmJlZm9yZV9jbGlja19idXR0b247XHJcblx0XHRcdFx0dmFyIGJ1dHRvbl9jYWxsYmFjayA9ICR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbaW5kZXhdLkF0dHJbaWluZGV4XS5idXR0b25fY2FsbGJhY2s7XHJcblx0XHRcdFx0aWYoIWJlZm9yZV9jbGlja19idXR0b24pe1xyXG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50OlwiYmVmb3JlX2NsaWNrX2J1dHRvbi1ldmVudF9pZOS4uuepuu+8gVwiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZighYnV0dG9uX2NhbGxiYWNrKXtcclxuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcImJ1dHRvbl9jYWxsYmFjay1ldmVudF9pZOS4uuepuu+8gVwiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR2YXIgZGF0YV9hdHRyID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2luZGV4XS5BdHRyW2lpbmRleF07XHJcblx0XHRcdFx0dGhpcy5EYXRhT2JqUnVuQ3VzdG9tRXZlbnRfUmV0dXJuKGJlZm9yZV9jbGlja19idXR0b24sIGRhdGFfYXR0ciwgYnV0dG9uX2NhbGxiYWNrLCBpbmRleCxpaW5kZXgpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRzY2FuX2NsYXNzQXR0cl9leHRCdXR0b24oZSl7ICAvLy0tLS0tLS0tLeacquWujOaIkC0tLS0tLS0tLS0tXHJcblx0XHRcdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdFx0XHR2YXIgQmVmb3JlX1NlbGVjdF9FdmVudCA9ICR0aGlzLiRkYXRhLnBhcmFtLlNjYW5fQ29kZS5CZWZvcmVfU2VsZWN0X0V2ZW50LklEO1xyXG5cdFx0XHRcdHZhciBBZnRlcl9TZWxlY3RfRXZlbnQgPSAkdGhpcy4kZGF0YS5wYXJhbS5TY2FuX0NvZGUuQWZ0ZXJfU2VsZWN0X0V2ZW50LklEO1xyXG5cdFx0XHRcdGlmKCFCZWZvcmVfU2VsZWN0X0V2ZW50KXtcclxuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcIumAieaLqeaMiemSruWJjeS6i+S7tuS4uuepuu+8gVwiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZighQWZ0ZXJfU2VsZWN0X0V2ZW50KXtcclxuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcIuaWsOWinuaMiemSruWQjuS6i+S7tuS4uuepuu+8gVwiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQvLyB2YXIgZGF0YV9hdHRyID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2luZGV4XS5BdHRyW2lpbmRleF07XHJcblx0XHRcdFx0dGhpcy5EYXRhT2JqUnVuQ3VzdG9tRXZlbnRfUmV0dXJuKEJlZm9yZV9TZWxlY3RfRXZlbnQsICcnLCBBZnRlcl9TZWxlY3RfRXZlbnQsICcnLCAnJyk7XHJcblx0XHRcdH0sXHJcblx0XHRcdGNsYXNzQXR0cl9BZGRQZXIoaW5kZXgsaWluZGV4KXtcclxuXHRcdFx0XHR2YXIgcGFyYW09e2luZGV4OmluZGV4LGlpbmRleDppaW5kZXh9O1xyXG5cdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHRcdFx0dW5pLm5hdmlnYXRlVG8oe1xyXG5cdFx0XHRcdFx0dXJsOicuLi9zZWxwc24vaW5kZXg/bXVsaXQ9ZmFsc2UmcGFyYW09JytKU09OLnN0cmluZ2lmeShwYXJhbSksXHJcblx0XHRcdFx0XHRldmVudHM6e1xyXG5cdFx0XHRcdFx0XHRBZGRQZXIoZGF0YSxwYXJhbSl7IFxyXG5cdFx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHBhcmFtKTtcclxuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhkYXRhKTtcclxuXHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W3BhcmFtLmluZGV4XS5BdHRyW3BhcmFtLmlpbmRleF0uVmFsdWU9ZGF0YVswXS5OYW1lO1xyXG5cdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbcGFyYW0uaW5kZXhdLkF0dHJbcGFyYW0uaWluZGV4XS5WYWxJRD1kYXRhWzBdLkxvZ2luKyc7JytkYXRhWzBdLk5hbWU7XHJcblx0XHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdFx0dmFyIGV2ZW50aWQgPSAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W3BhcmFtLmluZGV4XS5BdHRyW3BhcmFtLmlpbmRleF0uYWN0aW9uO1xyXG5cdFx0XHRcdFx0XHRcdGlmIChldmVudGlkKSB7XHJcblx0XHRcdFx0XHRcdFx0ICAgIGV2ZW50aWQgPSBldmVudGlkLnRyaW0oKTtcclxuXHRcdFx0XHRcdFx0XHQgICAgaWYgKGV2ZW50aWQpIHtcclxuXHRcdFx0XHRcdFx0XHQgICAgICAgIHZhciBpbmZvID0ge1xyXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIGV2ZW50aWQ6IGV2ZW50aWQsXHJcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgZWR0eXBlOiBcIjRcIixcclxuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICBwcm9qZWN0aWQ6IFwiXCIsXHJcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgcmNsc2lkOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIHJvYmppZDogXCJcIixcclxuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICB1c2VybG9naW46IGRhdGFbMF0uTG9naW4sXHJcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgY2xzaWQ6ICR0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsXHJcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgb2JqaWQ6IFwiXCIsXHJcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgYXR0cjogW10sXHJcblx0XHRcdFx0XHRcdFx0ICAgICAgICB9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyB2YXIgZGF0YV9hdHRyID0gJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtwYXJhbS5pbmRleF0uQXR0cltwYXJhbS5paW5kZXhdO1xyXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgJHRoaXMuRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8pO1xyXG5cdFx0XHRcdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdGNsYXNzQXR0cl9BZGRSZWYoZSl7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coZS50YXJnZXQpO1xyXG5cdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcIuatpOWKn+iDvei/mOacquWunueOsO+8gVwiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdC8vIHZhciB2YWx1ZT10aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uUmVsQ2xzW2UudGFyZ2V0LnZhbHVlXTtcclxuXHRcdFx0XHQvLyB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWU9dmFsdWU7XHJcblx0XHRcdH0sXHJcblx0XHRcdGNsYXNzQXR0cl9BZGRQcmooaW5kZXgsaWluZGV4KXtcclxuXHRcdFx0XHR2YXIgcGFyYW09e2luZGV4OmluZGV4LGlpbmRleDppaW5kZXh9O1xyXG5cdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHRcdFx0dW5pLm5hdmlnYXRlVG8oe1xyXG5cdFx0XHRcdFx0dXJsOicuLi9zZWxQcmovaW5kZXg/cmVsYXRpb249LTEmcGFyYW09JytKU09OLnN0cmluZ2lmeShwYXJhbSksXHJcblx0XHRcdFx0XHRldmVudHM6e1xyXG5cdFx0XHRcdFx0XHRBZGRQZXIoZGF0YSxwYXJhbSl7IFxyXG5cdFx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHBhcmFtKTtcclxuXHRcdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhkYXRhKTtcclxuXHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W3BhcmFtLmluZGV4XS5BdHRyW3BhcmFtLmlpbmRleF0uVmFsdWU9ZGF0YVswXS5OYW1lO1xyXG5cdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbcGFyYW0uaW5kZXhdLkF0dHJbcGFyYW0uaWluZGV4XS5WYWxJRD1kYXRhWzBdLklEKyc7JytkYXRhWzBdLk5hbWU7XHJcblx0XHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdFx0dmFyIGV2ZW50aWQgPSAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W3BhcmFtLmluZGV4XS5BdHRyW3BhcmFtLmlpbmRleF0uYWN0aW9uO1xyXG5cdFx0XHRcdFx0XHRcdGlmIChldmVudGlkKSB7XHJcblx0XHRcdFx0XHRcdFx0ICAgIGV2ZW50aWQgPSBldmVudGlkLnRyaW0oKTtcclxuXHRcdFx0XHRcdFx0XHQgICAgaWYgKGV2ZW50aWQpIHtcclxuXHRcdFx0XHRcdFx0XHQgICAgICAgIHZhciBpbmZvID0ge1xyXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIGV2ZW50aWQ6IGV2ZW50aWQsXHJcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgZWR0eXBlOiBcIjJcIixcclxuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICBwcm9qZWN0aWQ6IGRhdGFbMF0uSUQsXHJcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgcmNsc2lkOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIHJvYmppZDogXCJcIixcclxuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICB1c2VybG9naW46IFwiXCIsXHJcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgY2xzaWQ6ICR0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsXHJcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgb2JqaWQ6IFwiXCIsXHJcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgYXR0cjogW10sXHJcblx0XHRcdFx0XHRcdFx0ICAgICAgICB9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgLy8gdmFyIGRhdGFfYXR0ciA9ICR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbcGFyYW0uaW5kZXhdLkF0dHJbcGFyYW0uaWluZGV4XTtcclxuXHRcdFx0XHRcdFx0XHQgICAgICAgICR0aGlzLkRhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvKTtcclxuXHRcdFx0XHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRzYXZhKCl7XHJcblx0XHRcdFx0aWYgKHRoaXMuJGRhdGEucGFyYW0uQmVmb3JlX09LX0V2ZW50KSAvL+WIpOaWreWKn+iDveeCueWPguaVsOaYr+WQpuacieehruWumuWJjeiEmuacrFxyXG5cdFx0XHRcdFx0dGhpcy5zY2FuX09LRGF0YU9ialJ1bkN1c3RvbUV2ZW50KHRoaXMuJGRhdGEucGFyYW0uQmVmb3JlX09LX0V2ZW50LklEKTtcclxuXHRcdFx0XHRlbHNlXHJcblx0XHRcdFx0XHR0aGlzLnNjYW5fT0tEYXRhT2JqUnVuQ3VzdG9tRXZlbnQodGhpcy4kZGF0YS5wYXJhbS5BZnRlcl9PS19FdmVudC5JRCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdGFkZCgpe1xyXG5cdFx0XHRcdHVuaS5zaG93TG9hZGluZyh7XHJcblx0XHRcdFx0XHR0aXRsZTpcIuWKoOi9veS4rS4uLlwiXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0dmFyIHJlcT1bXTtcclxuXHRcdFx0XHR2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Q7XHJcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xyXG5cdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0XHRcdHZhciBhciA9IGF0dHJbal07XHJcblx0XHRcdFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+36YCJ5oupJyB8fCBhci5WYWx1ZT09J+KAlOKAlOivt+mAieaLqeKAlOKAlCcpIGFyLlZhbHVlPScnO1xyXG5cdFx0XHRcdFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxyXG5cdFx0XHRcdFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XHJcblx0XHRcdFx0ICAgICAgICBpZihhci5UeXBlPT0n5byV55So5Lq65ZGYJyB8fCBhci5UeXBlPT0n5byV55So6aG555uuJylcclxuXHRcdFx0XHQgICAgICAgIFx0cmVxLnB1c2goeyBuYW1lOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsSUQgP2FyLlZhbElEIDonJyB9KTtcclxuXHRcdFx0XHQgICAgICAgIGVsc2UgaWYoYXIuVHlwZT09J+W4g+WwlOWAvCcpXHJcblx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBuYW1lOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWU/JzEnOicwJ30pO1xyXG5cdFx0XHRcdCAgICAgICAgZWxzZSBpZihhci5UeXBlPT0n5a2X5YW4JyB8fCBhci5UeXBlPT0n5a2X5YW4LeWtl+espuS4sicpe1xyXG5cdFx0XHRcdFx0XHRcdGlmKGFyLnNlbGVjdD09dHJ1ZSl7IC8v5Yik5pat5LiL5ouJ5piv5ZCm5aSa6YCJXHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgdmFsU3RyID1cIlwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciB2IGluIGFyLlZhbHVlKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYodmFsU3RyKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhbFN0cis9XCI7XCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhbFN0cis9YXIuVmFsdWVbdl07XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IG5hbWU6IGFyLk5hbWUsIHZhbHVlOiB2YWxTdHJ9KTtcclxuXHRcdFx0XHRcdFx0XHR9ZWxzZVxyXG5cdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBuYW1lOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWV9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRlbHNlXHJcblx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBuYW1lOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWUgP2FyLlZhbHVlIDonJ30pO1xyXG5cdFx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRpZiAoKGFyLk5vdEVtcHR5ID09ICcxJyB8fCBhci5ub3RlbXB0eSA9PSB0cnVlKSAmJiAhYXIuVmFsdWUpIHtcclxuXHRcdFx0XHRcdFx0Ly8gaWYoYXIubm90RW1wdHk9PScxJyl7XHJcblx0XHRcdFx0XHRcdFx0dW5pLmhpZGVMb2FkaW5nKCk7XHJcblx0XHRcdFx0XHRcdFx0Ly8gdW5pLnNob3dUb2FzdCh7dGl0bGU6YXIuRGlzcE5hbWUrJ+S4jeiDveS4uuepuu+8gScsaWNvbjpcInN1Y2Nlc3NcIixkdXJhdGlvbjozMDAwfSk7XHJcblx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50OmFyLkRpc3BOYW1lKyfkuI3og73kuLrnqbrvvIEnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR2YXIgZW52aXJvbWVudCA9IHtcclxuXHRcdFx0XHQgICAgICdmdW5jdGlvbic6ICczMDAwJywgLy8g5Yqf6IO954K557yW5Y+3XHJcblx0XHRcdFx0ICAgICBjbHNfaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCwgICAgIC8vIOWKn+iDveeCueS4u+aVsOaNruexu+agh+ivhlxyXG5cdFx0XHRcdCAgICAgJ2J1dHRvbic6ICd0b3AnLCAgIC8vIHRvcC9ib3R0b21cclxuXHRcdFx0XHQgICAgIGJ1dHRvbl9uYW1lOiAn5paw5aKeJyxcclxuXHRcdFx0XHQgICAgIG1hc3Rlcjoge1xyXG5cdFx0XHRcdCAgICAgICAgIGNsc19pZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELCBcclxuXHRcdFx0XHQgICAgIH1cclxuXHRcdFx0XHR9O1xyXG5cdFx0XHRcdCBcclxuXHRcdFx0XHR2YXIgZGF0YUluZm89e1xyXG5cdFx0XHRcdCAgICBjbGFzc19pZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELCBkYXRhX29ial9pZDogJycsIG1hc3RlcmNsc2lkOiAnJyxcclxuXHRcdFx0XHQgICAgcmVxOiBKU09OLnN0cmluZ2lmeShyZXEpLCB1cGZpbGU6IEpTT04uc3RyaW5naWZ5KFtdKSwgcG9zdF9kYXRhOiBKU09OLnN0cmluZ2lmeSh7fSksXHJcblx0XHRcdFx0ICAgIGNvbXBvc2U6IEpTT04uc3RyaW5naWZ5KFtdKSwgcmVmZGF0YXN0b3JlOiBKU09OLnN0cmluZ2lmeShbXSksIGV4dGluZm86IEpTT04uc3RyaW5naWZ5KGVudmlyb21lbnQpLCBcclxuXHRcdFx0XHRcdG5vdF90cmlnZ2VyX3N5c19ldmVudDogJydcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdC8vIHJldHVyblxyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGRhdGFJbmZvKTtcclxuXHRcdFx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnYWRkY2xhc3NhdHRyJyxkYXRhSW5mbykudGhlbihzdWNjZXNzPT57XHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhzdWNjZXNzKTtcclxuXHRcdFx0XHRcdHVuaS5oaWRlTG9hZGluZygpO1xyXG5cdFx0XHRcdFx0aWYgKHN1Y2Nlc3MuY29kZT09JzAwMDAwJykge1xyXG5cdFx0XHRcdFx0XHR2YXIgYWN0aW9uID0gSlNPTi5wYXJzZShzdWNjZXNzLmRhdGEuQWN0aW9uKTtcclxuXHRcdFx0XHRcdFx0aWYoYWN0aW9uLnJldD09JzAnKXtcclxuXHRcdFx0XHRcdFx0XHRpZihhY3Rpb24ucmVzdWx0X3R5cGU9PScwJyl7XHJcblx0XHRcdFx0XHRcdFx0XHR1bmkuc2hvd1RvYXN0KHt0aXRsZTphY3Rpb24ucmVzdWx0LGljb246XCJzdWNjZXNzXCIsZHVyYXRpb246MzAwMH0pO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHQvLyBcIntcInJldFwiOjAsIFwicmVzdWx0X3R5cGVcIjowLCBcInJlc3VsdFwiOlwi5Yib5bu65oiQ5YqfMTIzMTIzMTIzXCIsXCJpbmZvXCI6XCJcIn1cIlxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdC8v5Yi35pawXHJcblx0XHRcdFx0XHRcdHVuaS5yZWRpcmVjdFRvKHtcclxuXHRcdFx0XHRcdFx0XHR1cmw6Jy4uL21vZGFsL21zX2NsYXNzQXR0cj9wYXJhbT0nK0pTT04uc3RyaW5naWZ5KHRoaXMuJGRhdGEucGFyYW0pK1wiJnRpdGxlbmFtZT1cIit0aGlzLiRkYXRhLnRpdGxlXHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHQvLyB0aGlzLmNsYXNzX2F0dHJfaW5pdCgpO1xyXG5cdFx0XHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vXCIsY29udGVudDpzdWNjZXNzLm1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KS5jYXRjaChleD0+e1xyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHRcdFx0dW5pLmhpZGVMb2FkaW5nKCk7XHJcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRjbGFzc19hdHRyX2luaXQoKXtcclxuXHRcdFx0XHR2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLnNob3dfc3R5bGVcclxuXHRcdFx0XHR2YXIgbmV3YXR0cmxpc3QgPSBbXTtcclxuXHRcdFx0XHRpZiAodGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0Lmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHQgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdCAgICAgICAgdmFyIG9wZW4gPSBhdHRybGlzdFtpXS5vcGVuO1xyXG5cdFx0XHRcdCAgICAgICAgdmFyIG5hbWUgPSBhdHRybGlzdFtpXS5hdHRyZ3JvdXBfbmFtZTtcclxuXHRcdFx0XHQgICAgICAgIHZhciBhdHRycyA9IGF0dHJsaXN0W2ldLmF0dHJzO1xyXG5cdFx0XHRcdCAgICAgICAgZm9yICh2YXIgcyA9IDA7IHMgPCB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3QubGVuZ3RoOyBzKyspIHtcclxuXHRcdFx0XHQgICAgICAgICAgICB2YXIgY2xzYXR0ciA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtzXTtcclxuXHRcdFx0XHQgICAgICAgICAgICBpZiAobmFtZSA9PSBjbHNhdHRyLk5hbWUpIHtcclxuXHRcdFx0XHQgICAgICAgICAgICAgICAgdmFyIGF0dHIgPSBbXTtcclxuXHRcdFx0XHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhdHRycy5sZW5ndGg7IGorKykge1xyXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbCA9IDA7IGwgPCBjbHNhdHRyLkF0dHIubGVuZ3RoOyBsKyspIHtcclxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2EgPSBjbHNhdHRyLkF0dHJbbF07XHJcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF0dHJzW2pdLmF0dHIgPT0gY2EuTmFtZSkge1xyXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5hY3Rpb24gPSBhdHRyc1tqXS5hY3Rpb247XHJcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmVkaXQgPSBhdHRyc1tqXS5lZGl0O1xyXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5ub3RlbXB0eSA9IGF0dHJzW2pdLm5vdGVtcHR5O1xyXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5leHRfYnV0dG9uID0gYXR0cnNbal0uZXh0X2J1dHRvbjtcclxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuYnV0dG9uX2ltZyA9IGF0dHJzW2pdLmJ1dHRvbl9pbWc7XHJcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmJ1dHRvbl90b29sdGlwID0gYXR0cnNbal0uYnV0dG9uX3Rvb2x0aXA7XHJcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmJlZm9yZV9jbGlja19idXR0b24gPSBhdHRyc1tqXS5iZWZvcmVfY2xpY2tfYnV0dG9uO1xyXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5idXR0b25fY2FsbGJhY2sgPSBhdHRyc1tqXS5idXR0b25fY2FsbGJhY2s7XHJcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmhpZGRlbiA9IGF0dHJzW2pdLmhpZGRlbjtcclxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Euc2VsZWN0ID0gYXR0cnNbal0uc2VsZWN0PT11bmRlZmluZWQ/ZmFsc2U6YXR0cnNbal0uc2VsZWN0O1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPVwiXCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5kaWN0aXRlbSl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGNhLnNlbGVjdCA9PSB0cnVlKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlZhbHVlID0gW107Ly9jYS5kaWN0aXRlbVswXS5DTl9TX05BTUU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVsc2UgXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPSAn6K+36YCJ5oupJzsvL2NhLmRpY3RpdGVtWzBdLkNOX1NfTkFNRTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGRpY3RpdGVtbGlzdD1bXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgZCA9IDA7IGQgPCBjYS5kaWN0aXRlbS5sZW5ndGg7IGQrKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLmRpY3RpdGVtW2RdLmxhYmVsPWNhLmRpY3RpdGVtW2RdLkNOX1NfTkFNRTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5kaWN0aXRlbVtkXS52YWx1ZT1jYS5kaWN0aXRlbVtkXS5DTl9TX05BTUU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY2EuZGljdGl0ZW1bZF0uQ05fQ19JU19ERUZBVUxUPT0nMScpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZT1jYS5kaWN0aXRlbVtkXS5DTl9TX05BTUU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGNhLlR5cGU9PSfml6XmnJ8nIHx8IGNhLlR5cGU9PSfml7bpl7QnKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIG5vd0RhdGUgPSBuZXcgRGF0ZSgpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZGF0ZSA9IHt5ZWFyOiBub3dEYXRlLmdldEZ1bGxZZWFyKCksbW9udGg6IG5vd0RhdGUuZ2V0TW9udGgoKSArIDEsZGF5OiBub3dEYXRlLmdldERhdGUoKX1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPSBkYXRlLnllYXIgKyAnLScgKyAoZGF0ZS5tb250aCA+PSAxMCA/IGRhdGUubW9udGggOiAnMCcgKyBkYXRlLm1vbnRoKSArICctJyArIChkYXRlLmRheSA+PSAxMCA/IGRhdGUuZGF5IDogJzAnICsgZGF0ZS5kYXkpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY2EuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJyl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciByZWxDbHNMaXN0PVtdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgYXR0cl9yZXNjbHMgPSBjYS5SZWxDbHMuc3BsaXQoJywnKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBpaSBpbiBhdHRyX3Jlc2Nscyl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHJlc2NscyA9IGF0dHJfcmVzY2xzW2lpXS5zcGxpdCgnfCcpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlbENsc0xpc3QucHVzaCh7aWQ6cmVzY2xzWzBdLG5hbWU6cmVzY2xzWzFdfSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuUmVsQ2xzTGlzdCA9IHJlbENsc0xpc3Q7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlZhbHVlID0gJ+ivtyc7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5UeXBlPT0n55yB5biC5Yy6JylcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPSAn6K+36YCJ5oupJztcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGNhLlR5cGU9PSfluIPlsJTlgLwnKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ci5wdXNoKGNhKTtcclxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICB9XHJcblx0XHRcdFx0ICAgICAgICAgICAgICAgIH1cclxuXHRcdFx0XHQgICAgICAgICAgICAgICAgbmV3YXR0cmxpc3QucHVzaCh7XHJcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICBCa0NvbG9yOiBjbHNhdHRyLkJrQ29sb3IsXHJcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICBIYXNBY2U6IGNsc2F0dHIuSGFzQWNlLFxyXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgSW1nRm9udFN0eWxlOiBjbHNhdHRyLkltZ0ZvbnRTdHlsZSxcclxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIE5hbWU6IGNsc2F0dHIuTmFtZSxcclxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIE9yZGVyOiBjbHNhdHRyLk9yZGVyLFxyXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgT3Blbjogb3BlbixcclxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIEF0dHI6IGF0dHIsXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnRyb2xfc3R5bGU6dGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5jb250cm9sX3N0eWxlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aXRsZV9wX3dkaXRoOnRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYudGl0bGVfcF93ZGl0aCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0Rm9udDp0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLkZvbnQ/dGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5Gb250Ont9LFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRCa19Db2xvcjp0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLkJrX0NvbG9yP3RoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuQmtfQ29sb3I6JyNGRkZGRkYnLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRUZXh0X0NvbG9yOnRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuVGV4dF9Db2xvcj90aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLlRleHRfQ29sb3I6JyMwMDAwMDAnXHJcblx0XHRcdFx0ICAgICAgICAgICAgICAgIH0pXHJcblx0XHRcdFx0ICAgICAgICAgICAgfVxyXG5cdFx0XHRcdCAgICAgICAgfVxyXG5cdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0ICAgIGlmIChuZXdhdHRybGlzdC5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0ICAgICAgICB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3QgPSBuZXdhdHRybGlzdDtcclxuXHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdFx0dmFyIHJlcT1bXTtcclxuXHRcdFx0XHQgICAgaWYgKHRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYpIHtcclxuXHRcdFx0XHQgICAgICAgICBpZiAodGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5zaG93X3N0eWxlLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHQgICAgICAgICAgICB2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLnNob3dfc3R5bGVcclxuXHRcdFx0XHQgICAgICAgICAgICAvLyAkZWwuZmluZCgnLmF0dHJfZmllbGQnKS5wcm9wKCdyZWFkb25seScsIHRydWUpO1xyXG5cdFx0XHRcdCAgICAgICAgICAgIC8vICRlbC5maW5kKCcuYXR0cl9maWVsZCcpLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7XHJcblx0XHRcdFx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdCAgICAgICAgICAgICAgICB2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLmF0dHJzXHJcblx0XHRcdFx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xyXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgdmFyIGFyID0gYXR0cltqXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5hdHRyLCB2YWx1ZTogYXIudmFsdWU/YXIudmFsdWU6JycgfSk7XHJcblx0XHRcdFx0ICAgICAgICAgICAgICAgIH1cclxuXHRcdFx0XHQgICAgICAgICAgICB9XHJcblx0XHRcdFx0ICAgICAgICB9XHJcblx0XHRcdFx0XHR9XHRcclxuXHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0dmFyIGV2ZW50bGlzdCA9IHRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuZXZlbnQ7XHJcblx0XHRcdFx0XHRpZiAoZXZlbnRsaXN0KSB7XHJcblx0XHRcdFx0XHQgICAgaWYgKGV2ZW50bGlzdC5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0XHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXZlbnRsaXN0Lmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHQgICAgICAgICAgICBpZiAoZXZlbnRsaXN0W2ldLmV2ZW50X2lkID09ICdiZWZvcmVfb2snKSB7XHJcblx0XHRcdFx0XHQgICAgICAgICAgICAgICAgdGhpcy4kZGF0YS5lZGl0X29rX2V2ZW50ID0gZXZlbnRsaXN0W2ldO1xyXG5cdFx0XHRcdFx0ICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudGxpc3RbaV0uZXZlbnRfaWQgPT0gJ2luaXRpYWwnKSB7XHJcblx0XHRcdFx0XHQgICAgICAgICAgICAgICAgdGhpcy4kZGF0YS5lZGl0X2luaXRhbF9ldmVudCA9IGV2ZW50bGlzdFtpXTtcclxuXHRcdFx0XHRcdCAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnRsaXN0W2ldLmV2ZW50X2lkID09ICdiZWZvcmVfc2VsZWN0X2NvbXBvc2UnKSB7XHJcblx0XHRcdFx0XHQgICAgICAgICAgICAgICAgdGhpcy4kZGF0YS5lZGl0X3NlbGVjdF9jb21wb3NlX2V2ZW50ID0gZXZlbnRsaXN0W2ldLnNjcmlwX2lkO1xyXG5cdFx0XHRcdFx0ICAgICAgICAgICAgICAgIHRoaXMuJGRhdGEuZWRpdF9jb21wb3NlX2Nsc19pZCA9IGV2ZW50bGlzdFtpXS5jb21wb3NlX2Nsc19pZDtcclxuXHRcdFx0XHRcdCAgICAgICAgICAgIH1cclxuXHRcdFx0XHRcdCAgICAgICAgfVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhyZXEpO1xyXG5cdFx0XHRcdFx0aWYgKHRoaXMuJGRhdGEuZWRpdF9pbml0YWxfZXZlbnQpIHtcclxuXHRcdFx0XHRcdCAgICB2YXIgZXZlbnRpZCA9IHRoaXMuJGRhdGEuZWRpdF9pbml0YWxfZXZlbnQuc2NyaXBfaWQ7XHJcblx0XHRcdFx0XHQgICAgdmFyIGluZm8gPSB7XHJcblx0XHRcdFx0XHQgICAgICAgIGV2ZW50aWQ6IGV2ZW50aWQsXHJcblx0XHRcdFx0XHQgICAgICAgIGVkdHlwZTogXCIwXCIsXHJcblx0XHRcdFx0XHQgICAgICAgIHByb2plY3RpZDogJycsXHJcblx0XHRcdFx0XHQgICAgICAgIHJjbHNpZDogJycsXHJcblx0XHRcdFx0XHQgICAgICAgIHJvYmppZDogJycsXHJcblx0XHRcdFx0XHQgICAgICAgIHVzZXJsb2dpbjogJycsXHJcblx0XHRcdFx0XHQgICAgICAgIGNsc2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsXHJcblx0XHRcdFx0XHQgICAgICAgIG9iamlkOiBcIlwiLFxyXG5cdFx0XHRcdFx0ICAgICAgICBhdHRyOiByZXEsXHJcblx0XHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdFx0ICAgIHRoaXMuaW5pX0RhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKHRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUpO1xyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2codGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0KTtcclxuXHRcdFx0XHRcdFxyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCLmnKrmib7liLDlj6/mmL7npLrnmoTnmoTlsZ7mgKdcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblx0XHRcdHN1YkNsYXNzX2F0dHJfaW5pdCgpe1xyXG5cdFx0XHRcdHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuc2hvd19zdHlsZVxyXG5cdFx0XHRcdHZhciBuZXdhdHRybGlzdCA9IFtdO1xyXG5cdFx0XHRcdGlmICh0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3QubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdCAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0ICAgICAgICB2YXIgb3BlbiA9IGF0dHJsaXN0W2ldLm9wZW47XHJcblx0XHRcdFx0ICAgICAgICB2YXIgbmFtZSA9IGF0dHJsaXN0W2ldLmF0dHJncm91cF9uYW1lO1xyXG5cdFx0XHRcdCAgICAgICAgdmFyIGF0dHJzID0gYXR0cmxpc3RbaV0uYXR0cnM7XHJcblx0XHRcdFx0ICAgICAgICBmb3IgKHZhciBzID0gMDsgcyA8IHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdC5sZW5ndGg7IHMrKykge1xyXG5cdFx0XHRcdCAgICAgICAgICAgIHZhciBjbHNhdHRyID0gdGhpcy4kZGF0YS5zdWJDbGFzc0F0dHJMaXN0W3NdO1xyXG5cdFx0XHRcdCAgICAgICAgICAgIGlmIChuYW1lID09IGNsc2F0dHIuTmFtZSkge1xyXG5cdFx0XHRcdCAgICAgICAgICAgICAgICB2YXIgYXR0ciA9IFtdO1xyXG5cdFx0XHRcdCAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGF0dHJzLmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBsID0gMDsgbCA8IGNsc2F0dHIuQXR0ci5sZW5ndGg7IGwrKykge1xyXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYSA9IGNsc2F0dHIuQXR0cltsXTtcclxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXR0cnNbal0uYXR0ciA9PSBjYS5OYW1lKSB7XHJcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmFjdGlvbiA9IGF0dHJzW2pdLmFjdGlvbjtcclxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuZWRpdCA9IGF0dHJzW2pdLmVkaXQ7XHJcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLm5vdGVtcHR5ID0gYXR0cnNbal0ubm90ZW1wdHk7XHJcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmV4dF9idXR0b24gPSBhdHRyc1tqXS5leHRfYnV0dG9uO1xyXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5idXR0b25faW1nID0gYXR0cnNbal0uYnV0dG9uX2ltZztcclxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuYnV0dG9uX3Rvb2x0aXAgPSBhdHRyc1tqXS5idXR0b25fdG9vbHRpcDtcclxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuYmVmb3JlX2NsaWNrX2J1dHRvbiA9IGF0dHJzW2pdLmJlZm9yZV9jbGlja19idXR0b247XHJcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmJ1dHRvbl9jYWxsYmFjayA9IGF0dHJzW2pdLmJ1dHRvbl9jYWxsYmFjaztcclxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuaGlkZGVuID0gYXR0cnNbal0uaGlkZGVuO1xyXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5zZWxlY3QgPSBhdHRyc1tqXS5zZWxlY3Q9PXVuZGVmaW5lZD9mYWxzZTphdHRyc1tqXS5zZWxlY3Q7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9XCJcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGNhLmRpY3RpdGVtKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY2Euc2VsZWN0ID09IHRydWUpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPSBbXTsvL2NhLmRpY3RpdGVtWzBdLkNOX1NfTkFNRTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZWxzZSBcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9ICfor7fpgInmi6knOy8vY2EuZGljdGl0ZW1bMF0uQ05fU19OQU1FO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZGljdGl0ZW1saXN0PVtdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBkID0gMDsgZCA8IGNhLmRpY3RpdGVtLmxlbmd0aDsgZCsrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuZGljdGl0ZW1bZF0ubGFiZWw9Y2EuZGljdGl0ZW1bZF0uQ05fU19OQU1FO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLmRpY3RpdGVtW2RdLnZhbHVlPWNhLmRpY3RpdGVtW2RdLkNOX1NfTkFNRTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5kaWN0aXRlbVtkXS5DTl9DX0lTX0RFRkFVTFQ9PScxJylcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlZhbHVlPWNhLmRpY3RpdGVtW2RdLkNOX1NfTkFNRTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY2EuVHlwZT09J+aXpeacnycgfHwgY2EuVHlwZT09J+aXtumXtCcpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgbm93RGF0ZSA9IG5ldyBEYXRlKCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBkYXRlID0ge3llYXI6IG5vd0RhdGUuZ2V0RnVsbFllYXIoKSxtb250aDogbm93RGF0ZS5nZXRNb250aCgpICsgMSxkYXk6IG5vd0RhdGUuZ2V0RGF0ZSgpfVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9IGRhdGUueWVhciArICctJyArIChkYXRlLm1vbnRoID49IDEwID8gZGF0ZS5tb250aCA6ICcwJyArIGRhdGUubW9udGgpICsgJy0nICsgKGRhdGUuZGF5ID49IDEwID8gZGF0ZS5kYXkgOiAnMCcgKyBkYXRlLmRheSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHJlbENsc0xpc3Q9W107XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBhdHRyX3Jlc2NscyA9IGNhLlJlbENscy5zcGxpdCgnLCcpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGlpIGluIGF0dHJfcmVzY2xzKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgcmVzY2xzID0gYXR0cl9yZXNjbHNbaWldLnNwbGl0KCd8Jyk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVsQ2xzTGlzdC5wdXNoKHtpZDpyZXNjbHNbMF0sbmFtZTpyZXNjbHNbMV19KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5SZWxDbHNMaXN0ID0gcmVsQ2xzTGlzdDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPSAn6K+3JztcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGNhLlR5cGU9PSfnnIHluILljLonKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9ICfor7fpgInmi6knO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY2EuVHlwZT09J+W4g+WwlOWAvCcpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlZhbHVlID0gZmFsc2U7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyLnB1c2goY2EpO1xyXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIH1cclxuXHRcdFx0XHQgICAgICAgICAgICAgICAgfVxyXG5cdFx0XHRcdCAgICAgICAgICAgICAgICBuZXdhdHRybGlzdC5wdXNoKHtcclxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIEJrQ29sb3I6IGNsc2F0dHIuQmtDb2xvcixcclxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIEhhc0FjZTogY2xzYXR0ci5IYXNBY2UsXHJcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICBJbWdGb250U3R5bGU6IGNsc2F0dHIuSW1nRm9udFN0eWxlLFxyXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgTmFtZTogY2xzYXR0ci5OYW1lLFxyXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgT3JkZXI6IGNsc2F0dHIuT3JkZXIsXHJcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICBPcGVuOiBvcGVuLFxyXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgQXR0cjogYXR0cixcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y29udHJvbF9zdHlsZTp0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLmNvbnRyb2xfc3R5bGUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlX3Bfd2RpdGg6dGhpcy4kZGF0YS5zdWJDbGFzc0dyaWRTdHlsZS5TdHlsZURlZi50aXRsZV9wX3dkaXRoLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRGb250OnRoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuRm9udD90aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLkZvbnQ6e30sXHJcblx0XHRcdFx0XHRcdFx0XHRcdEJrX0NvbG9yOnRoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuQmtfQ29sb3I/dGhpcy4kZGF0YS5zdWJDbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5Ca19Db2xvcjonI0ZGRkZGRicsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFRleHRfQ29sb3I6dGhpcy4kZGF0YS5zdWJDbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5UZXh0X0NvbG9yP3RoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuVGV4dF9Db2xvcjonIzAwMDAwMCdcclxuXHRcdFx0XHQgICAgICAgICAgICAgICAgfSlcclxuXHRcdFx0XHQgICAgICAgICAgICB9XHJcblx0XHRcdFx0ICAgICAgICB9XHJcblx0XHRcdFx0ICAgIH1cclxuXHRcdFx0XHQgICAgaWYgKG5ld2F0dHJsaXN0Lmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHQgICAgICAgIHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdCA9IG5ld2F0dHJsaXN0O1xyXG5cdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0XHR2YXIgcmVxPVtdO1xyXG5cdFx0XHRcdCAgICBpZiAodGhpcy4kZGF0YS5zdWJDbGFzc0dyaWRTdHlsZS5TdHlsZURlZikge1xyXG5cdFx0XHRcdCAgICAgICAgIGlmICh0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLnNob3dfc3R5bGUubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdCAgICAgICAgICAgIHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuc2hvd19zdHlsZVxyXG5cdFx0XHRcdCAgICAgICAgICAgIC8vICRlbC5maW5kKCcuYXR0cl9maWVsZCcpLnByb3AoJ3JlYWRvbmx5JywgdHJ1ZSk7XHJcblx0XHRcdFx0ICAgICAgICAgICAgLy8gJGVsLmZpbmQoJy5hdHRyX2ZpZWxkJykucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTtcclxuXHRcdFx0XHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0ICAgICAgICAgICAgICAgIHZhciBhdHRyID0gYXR0cmxpc3RbaV0uYXR0cnNcclxuXHRcdFx0XHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICB2YXIgYXIgPSBhdHRyW2pdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLmF0dHIsIHZhbHVlOiBhci52YWx1ZT9hci52YWx1ZTonJyB9KTtcclxuXHRcdFx0XHQgICAgICAgICAgICAgICAgfVxyXG5cdFx0XHRcdCAgICAgICAgICAgIH1cclxuXHRcdFx0XHQgICAgICAgIH1cclxuXHRcdFx0XHRcdH1cdFxyXG5cdFx0XHRcdFx0XHJcblx0XHRcdFx0XHR2YXIgZXZlbnRsaXN0ID0gdGhpcy4kZGF0YS5zdWJDbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5ldmVudDtcclxuXHRcdFx0XHRcdGlmIChldmVudGxpc3QpIHtcclxuXHRcdFx0XHRcdCAgICBpZiAoZXZlbnRsaXN0Lmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRcdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBldmVudGxpc3QubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdCAgICAgICAgICAgIGlmIChldmVudGxpc3RbaV0uZXZlbnRfaWQgPT0gJ2JlZm9yZV9vaycpIHtcclxuXHRcdFx0XHRcdCAgICAgICAgICAgICAgICB0aGlzLiRkYXRhLmVkaXRfb2tfZXZlbnQgPSBldmVudGxpc3RbaV07XHJcblx0XHRcdFx0XHQgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50bGlzdFtpXS5ldmVudF9pZCA9PSAnaW5pdGlhbCcpIHtcclxuXHRcdFx0XHRcdCAgICAgICAgICAgICAgICB0aGlzLiRkYXRhLmVkaXRfaW5pdGFsX2V2ZW50ID0gZXZlbnRsaXN0W2ldO1xyXG5cdFx0XHRcdFx0ICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudGxpc3RbaV0uZXZlbnRfaWQgPT0gJ2JlZm9yZV9zZWxlY3RfY29tcG9zZScpIHtcclxuXHRcdFx0XHRcdCAgICAgICAgICAgICAgICB0aGlzLiRkYXRhLmVkaXRfc2VsZWN0X2NvbXBvc2VfZXZlbnQgPSBldmVudGxpc3RbaV0uc2NyaXBfaWQ7XHJcblx0XHRcdFx0XHQgICAgICAgICAgICAgICAgdGhpcy4kZGF0YS5lZGl0X2NvbXBvc2VfY2xzX2lkID0gZXZlbnRsaXN0W2ldLmNvbXBvc2VfY2xzX2lkO1xyXG5cdFx0XHRcdFx0ICAgICAgICAgICAgfVxyXG5cdFx0XHRcdFx0ICAgICAgICB9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHJlcSk7XHJcblx0XHRcdFx0XHRpZiAodGhpcy4kZGF0YS5lZGl0X2luaXRhbF9ldmVudCkge1xyXG5cdFx0XHRcdFx0ICAgIHZhciBldmVudGlkID0gdGhpcy4kZGF0YS5lZGl0X2luaXRhbF9ldmVudC5zY3JpcF9pZDtcclxuXHRcdFx0XHRcdCAgICB2YXIgaW5mbyA9IHtcclxuXHRcdFx0XHRcdCAgICAgICAgZXZlbnRpZDogZXZlbnRpZCxcclxuXHRcdFx0XHRcdCAgICAgICAgZWR0eXBlOiBcIjBcIixcclxuXHRcdFx0XHRcdCAgICAgICAgcHJvamVjdGlkOiAnJyxcclxuXHRcdFx0XHRcdCAgICAgICAgcmNsc2lkOiAnJyxcclxuXHRcdFx0XHRcdCAgICAgICAgcm9iamlkOiAnJyxcclxuXHRcdFx0XHRcdCAgICAgICAgdXNlcmxvZ2luOiAnJyxcclxuXHRcdFx0XHRcdCAgICAgICAgY2xzaWQ6IHRoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5JRCxcclxuXHRcdFx0XHRcdCAgICAgICAgb2JqaWQ6IFwiXCIsXHJcblx0XHRcdFx0XHQgICAgICAgIGF0dHI6IHJlcSxcclxuXHRcdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0XHQgICAgdGhpcy5zY2FuX2luaV9EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbyk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZyh0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlKTtcclxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdCk7XHJcblx0XHRcdFx0XHRcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50Olwi5pyq5om+5Yiw5Y+v5pi+56S655qE55qE5bGe5oCnXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRpbmlfRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8pe1xyXG5cdFx0XHRcdHZhciBwYXJhbSA9IHtcclxuXHRcdFx0XHQgICAgRWRpdFN0eWxlOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuVmlld19TdHlsZS5OYW1lLFxyXG5cdFx0XHRcdCAgICBWaWV3U3R5bGU6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5WaWV3X1N0eWxlLk5hbWUsXHJcblx0XHRcdFx0ICAgIE5vdFRyaWdnZXJTeXNFdmVudDogMCxcclxuXHRcdFx0XHQgICAgZW52aXJvbWVudDoge1xyXG5cdFx0XHRcdCAgICAgICAgJ2Z1bmN0aW9uJzogJzMwMDAnLCAvLyDlip/og73ngrnnvJblj7dcclxuXHRcdFx0XHQgICAgICAgIGNsc19pZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELCAgICAgLy8g5Yqf6IO954K55Li75pWw5o2u57G75qCH6K+GXHJcblx0XHRcdFx0ICAgICAgICAnYnV0dG9uJzogJ3RvcCcsICAgLy8gdG9wL2JvdHRvbVxyXG5cdFx0XHRcdCAgICAgICAgYnV0dG9uX25hbWU6ICfmlrDlop4nLFxyXG5cdFx0XHRcdCAgICAgICAgbWFzdGVyOiB7XHJcblx0XHRcdFx0ICAgICAgICAgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsIC8vIGJ1dHRvbj1ib3R0b23ml7YgbWFzdGVy55qEY2xzX2lkXHJcblx0XHRcdFx0ICAgICAgICAgICAgLy9vYmpfaWQ6ICcnICAvLyBidXR0b249Ym90dG9t5pe2IG1hc3RlcueahG9ial9pZFxyXG5cdFx0XHRcdCAgICAgICAgfVxyXG5cdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHZhciBpbnB1dHBhcmFtZXRlciA9ICcnO1xyXG5cdFx0XHRcdHZhciBnbG9iYWxfYXR0ciA9ICcnO1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdHZhciBkYXRhSW5mbyA9IHtcclxuICAgICAgICAgICAgICAgICAgICBlZHR5cGU6IGluZm8uZWR0eXBlLCBldmVudGlkOiBpbmZvLmV2ZW50aWQsIHByb2plY3RpZDogaW5mby5wcm9qZWN0aWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcmNsc2lkOiBpbmZvLnJjbHNpZCwgcm9iamlkOiBpbmZvLnJvYmppZCwgdXNlcmxvZ2luOiBpbmZvLnVzZXJsb2dpbiwgY2xzaWQ6IGluZm8uY2xzaWQsIG9iamlkOiBpbmZvLm9iamlkLFxyXG4gICAgICAgICAgICAgICAgICAgIGF0dHI6IEpTT04uc3RyaW5naWZ5KGluZm8uYXR0ciksIGV4dGluZm86IEpTT04uc3RyaW5naWZ5KHBhcmFtKSwgaW5wdXRwYXJhbWV0ZXI6IGlucHV0cGFyYW1ldGVyLCBnbG9iYWxfYXR0cjogZ2xvYmFsX2F0dHJcclxuICAgICAgICAgICAgICAgIH1cclxuXHRcdFx0XHRjb25zb2xlLmxvZyhkYXRhSW5mbyk7XHJcblx0XHRcdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ0RhdGFPYmpSdW5DdXN0b21FdmVudEluZm8nLGRhdGFJbmZvKS50aGVuKHN1Y2Nlc3M9PntcclxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xyXG5cdFx0XHRcdFx0aWYgKHN1Y2Nlc3MuY29kZT09JzAwMDAwJykge1xyXG5cdFx0XHRcdFx0XHR2YXIgZGF0YSA9IEpTT04ucGFyc2Uoc3VjY2Vzcy5kYXRhKTtcclxuXHRcdFx0XHRcdFx0dmFyIGFjdGlvbmxpc3QgPSBkYXRhLmFjdGlvbjtcclxuXHRcdFx0XHRcdFx0aWYgKGFjdGlvbmxpc3QpIHtcclxuXHRcdFx0XHRcdFx0ICAgIGZvciAodmFyIGogPSAwOyBqIDwgYWN0aW9ubGlzdC5sZW5ndGg7IGorKykge1xyXG5cdFx0XHRcdFx0XHQgICAgICAgIHZhciBhY3Rpb24gPSBhY3Rpb25saXN0W2pdXHJcblx0XHRcdFx0XHRcdCAgICAgICAgdmFyIGFjdGlvbl90eXBlID0gYWN0aW9uLmFjdGlvbl90eXBlO1xyXG5cdFx0XHRcdFx0XHQgICAgICAgIHZhciB2YWx1ZSA9IGFjdGlvbi52YWx1ZTtcclxuXHRcdFx0XHRcdFx0ICAgICAgICBpZiAoYWN0aW9uX3R5cGUgPT0gJ3NldF9kbGdfYXR0cicpIHtcclxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgaWYgKHZhbHVlKSB7XHJcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICB2YXIgdmFsID0gdmFsdWU7XHJcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnKSB7XHJcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgdmFsID0gSlNPTi5wYXJzZSh2YWx1ZSk7XHJcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICB9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2codmFsKTtcclxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBhID0gMDsgYSA8IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdC5sZW5ndGg7IGErKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBsID0gMDsgbCA8IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFthXS5BdHRyLmxlbmd0aDsgbCsrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGNhID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2FdLkF0dHJbbF07XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKHZhbFtpXS5hdHRyICA9PSBjYS5OYW1lKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5UeXBlPT0n5a2X5YW4JyB8fCBjYS5UeXBlPT0n5a2X5YW4LeWtl+espuS4sicpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZGljdEl0ZW1MaXN0PVtdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGQgaW4gdmFsW2ldLmNob2ljZV9saXN0KXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgdmFsID12YWxbaV0uY2hvaWNlX2xpc3RbZF07XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGljdEl0ZW1MaXN0LnB1c2goe1wiQ05fU19OQU1FXCI6dmFsLFwiTmFtZVwiOnZhbCxcImxhYmVsXCI6dmFsLFwidmFsdWVcIjp2YWx9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5kaWN0aXRlbSA9IGRpY3RJdGVtTGlzdDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gYXR0cltqXS5kaWN0aXRlbSA9IHZhbFtpXS5jaG9pY2VfbGlzdDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBjYS52YWx1ZSA9IHZhbFtpXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSAwO1xyXG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUuZmlsdGVyKGZ1bmN0aW9uIChzKSB7XHJcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWxbaV0uYXR0ciA9PSBzLmF0dHJcclxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICB9KS5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gMTtcclxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUucHVzaCh2YWxbaV0pO1xyXG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIH1cclxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICBpZiAobGVuZ3RoID09IDApIHtcclxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGg7IGorKykge1xyXG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLmF0dHIgPT0gdmFsW2ldLmF0dHIpIHtcclxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS52YWx1ZSA9IHZhbFtpXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIH1cclxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgIH1cclxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgfVxyXG5cdFx0XHRcdFx0XHQgICAgICAgIH1cclxuXHRcdFx0XHRcdFx0ICAgICAgICBpZiAoYWN0aW9uX3R5cGUgPT0gJ29wZW5fc2VsZWN0X3VzZXJkbGcnKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMi4yXCIsY29udGVudDpcIm9wZW5fc2VsZWN0X3VzZXJkbGfov5nkuKphY3Rpb25fdHlwZei/mOacquWkhOeQhu+8gVwiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0XHQgICAgICAgIH1cclxuXHRcdFx0XHRcdFx0ICAgIH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzJcIixjb250ZW50OnN1Y2Nlc3MubXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pLmNhdGNoKGV4PT57XHJcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhleCk7XHJcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzIuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9LFxyXG5cdFx0ICAgIERhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvLGRhdGFfYXR0cil7XHJcblx0XHRcdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdCAgICBcdHZhciBlbnZpcm9tZW50ID0ge1xyXG5cdFx0ICAgIFx0ICAgICdmdW5jdGlvbic6ICczMDAwJywgLy8g5Yqf6IO954K557yW5Y+3XHJcblx0XHQgICAgXHQgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsICAgICAvLyDlip/og73ngrnkuLvmlbDmja7nsbvmoIfor4ZcclxuXHRcdCAgICBcdCAgICAnYnV0dG9uJzogJ3RvcCcsICAgLy8gdG9wL2JvdHRvbVxyXG5cdFx0ICAgIFx0ICAgIGJ1dHRvbl9uYW1lOiAn5paw5aKeJyxcclxuXHRcdCAgICBcdCAgICBtYXN0ZXI6IHtcclxuXHRcdCAgICBcdCAgICAgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsIC8vIGJ1dHRvbj1ib3R0b23ml7YgbWFzdGVy55qEY2xzX2lkXHJcblx0XHQgICAgXHQgICAgICAgIC8vb2JqX2lkOiAnJyAgLy8gYnV0dG9uPWJvdHRvbeaXtiBtYXN0ZXLnmoRvYmpfaWRcclxuXHRcdCAgICBcdCAgICB9XHJcblx0XHQgICAgXHR9O1xyXG5cdFx0XHRcdGVudmlyb21lbnQuZWRpdF9kbGcgPSB7XHJcblx0XHRcdFx0ICAgIHR5cGU6ICdzbWFsbCcsLy/lsI/nqpflj6NcclxuXHRcdFx0XHQgICAgY2xhc3NfaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCwvL+W9k+WJjeaVsOaNruexu2lkXHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmIChkYXRhX2F0dHIpIHtcclxuXHRcdFx0XHQgICAgZW52aXJvbWVudC5lZGl0X2RsZy5mb3JtX2NvbnRyb2wgPSB7Ly/miYDlsZ7nmoTooajljZXmjqfku7ZcclxuXHRcdFx0XHQgICAgICAgIG5hbWU6IGRhdGFfYXR0ci5OYW1lLC8v5a2X5q615bGe5oCnXHJcblx0XHRcdFx0ICAgICAgICB0ZXh0OiBkYXRhX2F0dHIuRGlzcE5hbWUsLy/mmL7npLrmlofmnKxcclxuXHRcdFx0XHQgICAgICAgIGdyb3VwX25hbWU6IGRhdGFfYXR0ci5Hcm91cE5hbWUsLy/lsZ7mgKfnu4RcclxuXHRcdFx0XHQgICAgICAgIHR5cGU6IGRhdGFfYXR0ci5UeXBlLC8v5a2X5q6157G75Z6LXHJcblx0XHRcdFx0ICAgICAgICByZWFkb25seTogZGF0YV9hdHRyLlJlYWRPbmx5LC8v5piv5ZCm5Y+q6K+7XHJcblx0XHRcdFx0ICAgICAgICBidXR0b25faW1nOiBkYXRhX2F0dHIuYnV0dG9uX2ltZywvL+W8leeUqOaMiemSrueahOWbvuagh1xyXG5cdFx0XHRcdCAgICAgICAgYnV0dG9uX3Rvb2x0aXA6IGRhdGFfYXR0ci5idXR0b25fdG9vbHRpcC8v5byV55So5oyJ6ZKu55qEdG9vbHRpcFxyXG5cdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0fVxyXG5cdFx0ICAgIFx0dmFyIGRhdGFJbmZvID0ge1xyXG5cdFx0ICAgICAgICAgICAgZWR0eXBlOiBpbmZvLmVkdHlwZSwgZXZlbnRpZDogaW5mby5ldmVudGlkLCBwcm9qZWN0aWQ6IGluZm8ucHJvamVjdGlkLnJlcGxhY2UoJ3snLCcnKS5yZXBsYWNlKCd9JywnJyksXHJcblx0XHQgICAgICAgICAgICByY2xzaWQ6IGluZm8ucmNsc2lkLCByb2JqaWQ6IGluZm8ucm9iamlkLCB1c2VybG9naW46IGluZm8udXNlcmxvZ2luLCBjbHNpZDogaW5mby5jbHNpZCwgb2JqaWQ6IGluZm8ub2JqaWQsXHJcblx0XHQgICAgICAgICAgICBhdHRyOiBKU09OLnN0cmluZ2lmeShpbmZvLmF0dHIpLCBleHRpbmZvOiBKU09OLnN0cmluZ2lmeShlbnZpcm9tZW50KSwgaW5wdXRwYXJhbWV0ZXI6ICcnLCBnbG9iYWxfYXR0cjogSlNPTi5zdHJpbmdpZnkodGhpcy4kZGF0YS5nbG9iYWxfYXR0cilcclxuXHRcdCAgICAgICAgfVxyXG5cdFx0ICAgIFx0Y29uc29sZS5sb2coZGF0YUluZm8pO1xyXG5cdFx0ICAgIFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ0RhdGFPYmpSdW5DdXN0b21FdmVudEluZm8nLGRhdGFJbmZvKS50aGVuKHN1Y2Nlc3M9PntcclxuXHRcdCAgICBcdFx0Y29uc29sZS5sb2coc3VjY2Vzcyk7XHJcblx0XHQgICAgXHRcdGlmIChzdWNjZXNzLmNvZGU9PScwMDAwMCcpIHtcclxuXHRcdFx0XHRcdFx0dmFyIGRhdGEgPSBKU09OLnBhcnNlKHN1Y2Nlc3MuZGF0YSk7XHJcblx0XHQgICAgXHRcdFx0dmFyIGFjdGlvbmxpc3QgPSBkYXRhLmFjdGlvbjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHJcblx0XHQgICAgXHRcdFx0aWYgKGFjdGlvbmxpc3QpIHtcclxuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhhY3Rpb25saXN0KTtcclxuXHRcdCAgICBcdFx0XHQgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhY3Rpb25saXN0Lmxlbmd0aDsgaSsrKSB7XHJcblx0XHQgICAgXHRcdFx0ICAgICAgICB2YXIgYWN0aW9uID0gYWN0aW9ubGlzdFtpXTtcclxuXHRcdCAgICBcdFx0XHQgICAgICAgIGlmIChhY3Rpb24uYWN0aW9uX3R5cGUgPT0gJ3NldF9kbGdfYXR0cicpIHtcclxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICB2YXIgcmVzdWx0ID0gYWN0aW9uLnZhbHVlO1xyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAocmVzdWx0W2ldLmNob2ljZV9saXN0KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBjID0gMDsgYyA8ICR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3QubGVuZ3RoOyBjKyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGF0dHIgPSAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2NdLkF0dHI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGF0dHJbal0uTmFtZT09cmVzdWx0W2ldLmF0dHIpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoYXR0cltqXS5UeXBlPT0n5a2X5YW4JyB8fCBhdHRyW2pdLlR5cGU9PSflrZflhbgt5a2X56ym5LiyJyl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBkaWN0SXRlbUxpc3Q9W107XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgZCBpbiByZXN1bHRbaV0uY2hvaWNlX2xpc3Qpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciB2YWwgPXJlc3VsdFtpXS5jaG9pY2VfbGlzdFtkXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkaWN0SXRlbUxpc3QucHVzaCh7XCJDTl9TX05BTUVcIjp2YWwsXCJOYW1lXCI6dmFsLFwibGFiZWxcIjp2YWwsXCJ2YWx1ZVwiOnZhbH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGF0dHJbal0uZGljdGl0ZW0gPSBkaWN0SXRlbUxpc3Q7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGF0dHJbal0uZGljdGl0ZW0gPSByZXN1bHRbaV0uY2hvaWNlX2xpc3Q7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIH1cclxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgZm9yICh2YXIgYyA9IDA7IGMgPCAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0Lmxlbmd0aDsgYysrKSB7XHJcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIFx0dmFyIGF0dHIgPSAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2NdLkF0dHI7XHJcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGF0dHJbal0uTmFtZSsnPT0nK3Jlc3VsdFtpXS5hdHRyKTtcclxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgXHRcdGlmKGF0dHJbal0uTmFtZT09cmVzdWx0W2ldLmF0dHIpe1xyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBcdFx0XHRhdHRyW2pdLlZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBcdFx0fVxyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBcdH1cclxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgfVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBsZW5ndGggPSAwO1xyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBpZiAoISR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5maWx0ZXIoZnVuY3Rpb24gKHMpIHtcclxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRbaV0uYXR0ciA9PSBzLmF0dHJcclxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgfSkubGVuZ3RoKSB7XHJcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSAxO1xyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLnB1c2gocmVzdWx0W2ldKTtcclxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgfVxyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBpZiAobGVuZ3RoID09IDApIHtcclxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmxlbmd0aDsgaisrKSB7XHJcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS5hdHRyID09IHJlc3VsdFtpXS5hdHRyKSB7XHJcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS52YWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcclxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICB9XHJcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIH1cclxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICB9XHJcblx0XHQgICAgXHRcdFx0ICAgICAgICB9IGVsc2UgaWYgKGRhdGEuYWN0aW9uW2ldLmFjdGlvbl90eXBlID09ICdzZXRfZ2xvYmFsX2F0dHInKSB7XHJcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICR0aGlzLiRkYXRhLmdsb2JhbF9hdHRyID0gZGF0YS5hY3Rpb25baV0udmFsdWUgfHwgW107XHJcblx0XHRcdFx0XHRcdCAgICAgICAgfVxyXG5cdFx0ICAgIFx0XHRcdCAgICB9XHJcblx0XHQgICAgXHRcdFx0fVxyXG5cdFx0ICAgIFx0XHRcdFxyXG5cdFx0ICAgIFx0XHRcdGlmIChkYXRhLnJlc3VsdCkge1xyXG5cdFx0ICAgIFx0XHRcdCAgICB2YXIgcmVzdWx0ID0gZGF0YS5yZXN1bHQ7XHJcblx0XHQgICAgXHRcdFx0ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XHJcblx0XHQgICAgXHRcdFx0ICAgICAgICBmb3IgKHZhciBjID0gMDsgYyA8ICR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3QubGVuZ3RoOyBjKyspIHtcclxuXHRcdCAgICBcdFx0XHQgICAgICAgIFx0dmFyIGF0dHIgPSAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2NdLkF0dHI7XHJcblx0XHQgICAgXHRcdFx0ICAgICAgICBcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgXHRcdGlmKGF0dHJbal0uTmFtZT09cmVzdWx0W2ldLmF0dHIpe1xyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgXHRcdFx0YXR0cltqXS5WYWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcclxuXHRcdCAgICBcdFx0XHQgICAgICAgIFx0XHR9XHJcblx0XHQgICAgXHRcdFx0ICAgICAgICBcdH1cclxuXHRcdCAgICBcdFx0XHQgICAgICAgIH1cclxuXHRcdFx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIGxlbmd0aCA9IDA7XHJcblx0XHQgICAgXHRcdFx0ICAgICAgICBpZiAoISR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5maWx0ZXIoZnVuY3Rpb24gKHMpIHtcclxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICByZXR1cm4gcmVzdWx0W2ldLmF0dHIgPT0gcy5hdHRyXHJcblx0XHQgICAgXHRcdFx0ICAgICAgICB9KS5sZW5ndGgpIHtcclxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICBsZW5ndGggPSAxO1xyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5wdXNoKHJlc3VsdFtpXSk7XHJcblx0XHQgICAgXHRcdFx0ICAgICAgICB9XHJcblx0XHQgICAgXHRcdFx0ICAgICAgICBpZiAobGVuZ3RoID09IDApIHtcclxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8ICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGg7IGorKykge1xyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBpZiAoJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLmF0dHIgPT0gcmVzdWx0W2ldLmF0dHIpIHtcclxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS52YWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcclxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgfVxyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgIH1cclxuXHRcdCAgICBcdFx0XHQgICAgICAgIH1cclxuXHRcdCAgICBcdFx0XHQgICAgfVxyXG5cdFx0ICAgIFx0XHRcdH1cclxuXHRcdCAgICBcdFx0fWVsc2V7XHJcblx0XHQgICAgXHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68zXCIsY29udGVudDpzdWNjZXNzLm1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdCAgICBcdFx0fVxyXG5cdFx0ICAgIFx0fSkuY2F0Y2goZXg9PntcclxuXHRcdCAgICBcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0ICAgIFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzMuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0ICAgIFx0fSk7XHJcblx0XHQgICAgfSxcclxuXHRcdFx0T0tEYXRhT2JqUnVuQ3VzdG9tRXZlbnQoKXtcclxuXHRcdCAgICBcdHZhciBlbnZpcm9tZW50ID0ge1xyXG5cdFx0XHRcdCAgICAnZnVuY3Rpb24nOiAnMzAwMCcsIC8vIOWKn+iDveeCuee8luWPt1xyXG5cdFx0XHRcdCAgICBjbHNfaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCwgICAgIC8vIOWKn+iDveeCueS4u+aVsOaNruexu+agh+ivhlxyXG5cdFx0XHRcdCAgICAnYnV0dG9uJzogJ3RvcCcsICAgLy8gdG9wL2JvdHRvbVxyXG5cdFx0XHRcdCAgICBidXR0b25fbmFtZTogJ+aWsOWinicsXHJcblx0XHRcdFx0ICAgIG1hc3Rlcjoge1xyXG5cdFx0XHRcdCAgICAgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsIC8vIGJ1dHRvbj1ib3R0b23ml7YgbWFzdGVy55qEY2xzX2lkXHJcblx0XHRcdFx0ICAgICAgICBcclxuXHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdH07XHJcblx0XHQgICAgXHRcclxuXHRcdFx0XHR2YXIgZXZlbnRpZCA9IHRoaXMuJGRhdGEuZWRpdF9va19ldmVudC5zY3JpcF9pZDtcclxuXHRcdFx0XHR2YXIgcmVxPVtdO1xyXG5cdFx0XHRcdHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdDtcclxuXHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHR2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLkF0dHI7XHJcblx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcclxuXHRcdFx0XHRcdFx0dmFyIGFyID0gYXR0cltqXTtcclxuXHRcdFx0XHRcdFx0aWYoYXIuVmFsdWU9PSfor7fpgInmi6knIHx8IGFyLlZhbHVlPT0n4oCU4oCU6K+36YCJ5oup4oCU4oCUJykgYXIuVmFsdWU9Jyc7XHJcblx0XHRcdFx0XHRcdGlmKGFyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpXHJcblx0XHRcdFx0XHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcclxuXHRcdFx0XHQgICAgICAgIGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxyXG5cdFx0XHRcdCAgICAgICAgXHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWxJRCA/YXIuVmFsSUQgOicnIH0pO1xyXG5cdFx0XHRcdCAgICAgICAgZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8JylcclxuXHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZT8nMSc6JzAnfSk7XHJcblx0XHRcdFx0XHRcdGVsc2VcclxuXHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZSB9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0XHJcblx0XHQgICAgXHRpZiAodGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUubGVuZ3RoID4gMCkge1xyXG5cdFx0ICAgIFx0ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUubGVuZ3RoOyBpKyspIHtcclxuXHRcdCAgICBcdCAgICAgICAgaWYgKCFyZXEuZmlsdGVyKGZ1bmN0aW9uIChzKSB7XHJcblx0XHQgICAgXHQgICAgICAgICAgICByZXR1cm4gdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbaV0uYXR0ciA9PSBzLm5hbWVcclxuXHRcdCAgICBcdCAgICAgICAgfSkubGVuZ3RoKSB7XHJcblx0XHQgICAgXHQgICAgICAgICAgICBsZW5ndGggPSAxO1xyXG5cdFx0ICAgIFx0ICAgICAgICAgICAgcmVxLnB1c2goeyAnYXR0cic6IHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2ldLmF0dHIsICd2YWx1ZSc6IHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2ldLnZhbHVlIH0pO1xyXG5cdFx0ICAgIFx0ICAgICAgICB9XHJcblx0XHQgICAgXHQgICAgfVxyXG5cdFx0ICAgIFx0fVxyXG5cdFx0ICAgIFx0dmFyIGluZm8gPSB7XHJcblx0XHQgICAgXHQgICAgZXZlbnRpZDogZXZlbnRpZCxcclxuXHRcdCAgICBcdCAgICBlZHR5cGU6IFwiMFwiLFxyXG5cdFx0ICAgIFx0ICAgIHByb2plY3RpZDogJycsXHJcblx0XHQgICAgXHQgICAgcmNsc2lkOiAnJyxcclxuXHRcdCAgICBcdCAgICByb2JqaWQ6ICcnLFxyXG5cdFx0ICAgIFx0ICAgIHVzZXJsb2dpbjogJycsXHJcblx0XHQgICAgXHQgICAgY2xzaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCxcclxuXHRcdCAgICBcdCAgICBvYmppZDogXCJcIixcclxuXHRcdCAgICBcdCAgICBhdHRyOiByZXEsXHJcblx0XHQgICAgXHR9XHJcblx0XHQgICAgXHR2YXIgZGF0YUluZm8gPSB7XHJcblx0XHQgICAgICAgICAgICBlZHR5cGU6IGluZm8uZWR0eXBlLCBldmVudGlkOiBpbmZvLmV2ZW50aWQsIHByb2plY3RpZDogaW5mby5wcm9qZWN0aWQscmNsc2lkOiBpbmZvLnJjbHNpZCwgXHJcblx0XHRcdFx0XHRyb2JqaWQ6IGluZm8ucm9iamlkLCB1c2VybG9naW46IGluZm8udXNlcmxvZ2luLCBjbHNpZDogaW5mby5jbHNpZCwgb2JqaWQ6IGluZm8ub2JqaWQsXHJcblx0XHRcdFx0XHRhdHRyOiBKU09OLnN0cmluZ2lmeShpbmZvLmF0dHIpLCBleHRpbmZvOiBKU09OLnN0cmluZ2lmeShlbnZpcm9tZW50KSwgZ2xvYmFsX2F0dHI6IEpTT04uc3RyaW5naWZ5KHRoaXMuJGRhdGEuZ2xvYmFsX2F0dHIpXHJcblx0XHQgICAgICAgIH1cclxuXHRcdCAgICBcdGNvbnNvbGUubG9nKGRhdGFJbmZvKTtcclxuXHRcdCAgICBcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdEYXRhT2JqUnVuQ3VzdG9tRXZlbnRJbmZvJyxkYXRhSW5mbykudGhlbihzdWNjZXNzPT57XHJcblx0XHQgICAgXHRcdGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xyXG5cdFx0ICAgIFx0XHRpZiAoc3VjY2Vzcy5jb2RlPT0nMDAwMDAnKSB7XHJcblx0XHRcdFx0XHRcdHZhciBkYXRhID0gSlNPTi5wYXJzZShzdWNjZXNzLmRhdGEpO1x0XHRcclxuXHRcdCAgICBcdFx0XHR2YXIgcmVzdWx0ID0gZGF0YS5yZXN1bHQ7XHJcblx0XHQgICAgXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyBpKyspIHtcclxuXHRcdCAgICBcdFx0XHQgICAgLy8gc2VsZi5jbGFzc19hdHRyX2VsZS5maW5kKCcuYXR0cl9maWVsZFtkYXRhLWZpZWxkPVwiJyArIHJlc3VsdFtpXS5hdHRyICsgJ1wiXScpLnZhbChyZXN1bHRbaV0udmFsdWUpLmRhdGEoJ3ZhbCcsIHJlc3VsdFtpXS52YWx1ZSk7XHJcblx0XHQgICAgXHRcdFx0ICAgIHZhciBsZW5ndGggPSAwO1xyXG5cdFx0ICAgIFx0XHRcdCAgICBpZiAoIXRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmZpbHRlcihmdW5jdGlvbiAocykge1xyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgcmV0dXJuIHJlc3VsdFtpXS5hdHRyID09IHMuYXR0clxyXG5cdFx0ICAgIFx0XHRcdCAgICB9KS5sZW5ndGgpIHtcclxuXHRcdCAgICBcdFx0XHQgICAgICAgIGxlbmd0aCA9IDE7XHJcblx0XHQgICAgXHRcdFx0ICAgICAgICB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5wdXNoKHJlc3VsdFtpXSk7XHJcblx0XHQgICAgXHRcdFx0ICAgIH1cclxuXHRcdCAgICBcdFx0XHQgICAgaWYgKGxlbmd0aCA9PSAwKSB7XHJcblx0XHQgICAgXHRcdFx0ICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmxlbmd0aDsgaisrKSB7XHJcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgaWYgKHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLmF0dHIgPT0gcmVzdWx0W2ldLmF0dHIpIHtcclxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0udmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XHJcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgfVxyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgfVxyXG5cdFx0ICAgIFx0XHRcdCAgICB9XHJcblx0XHQgICAgXHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0dGhpcy5hZGQoKTtcclxuXHRcdCAgICBcdFx0fWVsc2V7XHJcblx0XHQgICAgXHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor680XCIsY29udGVudDpzdWNjZXNzLm1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdCAgICBcdFx0fVxyXG5cdFx0ICAgIFx0fSkuY2F0Y2goZXg9PntcclxuXHRcdCAgICBcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0ICAgIFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzQuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0ICAgIFx0fSk7XHJcblx0XHQgICAgfSxcclxuXHRcdCAgICBEYXRhT2JqUnVuQ3VzdG9tRXZlbnRfUmV0dXJuKGV2ZW50aWQsZGF0YV9hdHRyLGJ1dHRvbl9jYWxsYmFjayxpbmRleCxpaW5kZXgpe1xyXG5cdFx0XHRcdHZhciBlbnZpcm9tZW50ID0ge1xyXG5cdFx0XHRcdCAgICAnZnVuY3Rpb24nOiAnMzAwMCcsIC8vIOWKn+iDveeCuee8luWPt1xyXG5cdFx0XHRcdCAgICBjbHNfaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCwgICAgIC8vIOWKn+iDveeCueS4u+aVsOaNruexu+agh+ivhlxyXG5cdFx0XHRcdCAgICAnYnV0dG9uJzogJ3RvcCcsICAgLy8gdG9wL2JvdHRvbVxyXG5cdFx0XHRcdCAgICBidXR0b25fbmFtZTogJ+aWsOWinicsXHJcblx0XHRcdFx0ICAgIG1hc3Rlcjoge1xyXG5cdFx0XHRcdCAgICAgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsIC8vIGJ1dHRvbj1ib3R0b23ml7YgbWFzdGVy55qEY2xzX2lkXHJcblx0XHRcdFx0ICAgICAgICAvL29ial9pZDogJycgIC8vIGJ1dHRvbj1ib3R0b23ml7YgbWFzdGVy55qEb2JqX2lkXHJcblx0XHRcdFx0ICAgIH1cclxuXHRcdFx0XHR9O1xyXG5cdFx0XHRcdHZhciByZXE9W107XHJcblx0XHRcdFx0dmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0O1xyXG5cdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdHZhciBhdHRyID0gYXR0cmxpc3RbaV0uQXR0cjtcclxuXHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xyXG5cdFx0XHRcdFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xyXG5cdFx0XHRcdFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxyXG5cdFx0XHRcdFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XHJcblx0XHRcdFx0ICAgICAgICBpZihhci5UeXBlPT0n5byV55So5Lq65ZGYJyB8fCBhci5UeXBlPT0n5byV55So6aG555uuJylcclxuXHRcdFx0XHQgICAgICAgIFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsSUQgP2FyLlZhbElEIDonJyB9KTtcclxuXHRcdFx0XHQgICAgICAgIGVsc2UgaWYoYXIuVHlwZT09J+W4g+WwlOWAvCcpXHJcblx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWU/JzEnOicwJ30pO1xyXG5cdFx0XHRcdFx0XHRlbHNlXHJcblx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWUgfSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmICh0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHQgICAgICAgIGlmICghcmVxLmZpbHRlcihmdW5jdGlvbiAocykge1xyXG5cdFx0XHRcdCAgICAgICAgICAgIHJldHVybiB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtpXS5hdHRyID09IHMubmFtZVxyXG5cdFx0XHRcdCAgICAgICAgfSkubGVuZ3RoKSB7XHJcblx0XHRcdFx0ICAgICAgICAgICAgbGVuZ3RoID0gMTtcclxuXHRcdFx0XHQgICAgICAgICAgICByZXEucHVzaCh7ICdhdHRyJzogdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbaV0uYXR0ciwgJ3ZhbHVlJzogdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbaV0udmFsdWUgfSk7XHJcblx0XHRcdFx0ICAgICAgICB9XHJcblx0XHRcdFx0ICAgIH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dmFyIGV4dGluZm8gPSBlbnZpcm9tZW50O1xyXG5cdFx0XHRcdGV4dGluZm8uZWRpdF9kbGcgPSB7XHJcblx0XHRcdFx0ICAgIHR5cGU6ICdzbWFsbCcsLy/lsI/nqpflj6NcclxuXHRcdFx0XHQgICAgY2xhc3NfaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCwvL+W9k+WJjeaVsOaNruexu2lkXHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmIChkYXRhX2F0dHIpIHtcclxuXHRcdFx0XHQgICAgZXh0aW5mby5lZGl0X2RsZy5mb3JtX2NvbnRyb2wgPSB7Ly/miYDlsZ7nmoTooajljZXmjqfku7ZcclxuXHRcdFx0XHQgICAgICAgIG5hbWU6IGRhdGFfYXR0ci5OYW1lLC8v5a2X5q615bGe5oCnXHJcblx0XHRcdFx0ICAgICAgICB0ZXh0OiBkYXRhX2F0dHIuRGlzcE5hbWUsLy/mmL7npLrmlofmnKxcclxuXHRcdFx0XHQgICAgICAgIGdyb3VwX25hbWU6IGRhdGFfYXR0ci5Hcm91cE5hbWUsLy/lsZ7mgKfnu4RcclxuXHRcdFx0XHQgICAgICAgIHR5cGU6IGRhdGFfYXR0ci5UeXBlLC8v5a2X5q6157G75Z6LXHJcblx0XHRcdFx0ICAgICAgICByZWFkb25seTogZGF0YV9hdHRyLlJlYWRPbmx5LC8v5piv5ZCm5Y+q6K+7XHJcblx0XHRcdFx0ICAgICAgICBidXR0b25faW1nOiBkYXRhX2F0dHIuYnV0dG9uX2ltZywvL+W8leeUqOaMiemSrueahOWbvuagh1xyXG5cdFx0XHRcdCAgICAgICAgYnV0dG9uX3Rvb2x0aXA6IGRhdGFfYXR0ci5idXR0b25fdG9vbHRpcC8v5byV55So5oyJ6ZKu55qEdG9vbHRpcFxyXG5cdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHZhciBkYXRhSW5mbyA9IHtcclxuXHRcdFx0XHRcdGVkdHlwZTogIFwiMFwiLCBldmVudGlkOiBldmVudGlkLCBwcm9qZWN0aWQ6ICcnLHJjbHNpZDogJycsIHJvYmppZDogJycsIHVzZXJsb2dpbjogJycsIFxyXG5cdFx0XHRcdFx0Y2xzaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCwgb2JqaWQ6ICcnLGF0dHI6IEpTT04uc3RyaW5naWZ5KHJlcSksIFxyXG5cdFx0XHRcdFx0ZXh0aW5mbzogSlNPTi5zdHJpbmdpZnkoZXh0aW5mbyksIGdsb2JhbF9hdHRyOiBKU09OLnN0cmluZ2lmeSh0aGlzLiRkYXRhLmdsb2JhbF9hdHRyKVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjb25zb2xlLmxvZyhkYXRhSW5mbyk7XHJcblx0XHRcdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ0RhdGFPYmpSdW5DdXN0b21FdmVudEluZm8nLGRhdGFJbmZvKS50aGVuKHN1Y2Nlc3M9PntcclxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xyXG5cdFx0XHRcdFx0aWYgKHN1Y2Nlc3MuY29kZT09JzAwMDAwJykge1xyXG5cdFx0XHRcdFx0XHR2YXIgZGF0YSA9IEpTT04ucGFyc2Uoc3VjY2Vzcy5kYXRhKTtcclxuXHRcdFx0XHRcdFx0aWYgKGRhdGEgIT0gXCJcIikge1xyXG5cdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdHZhciBhY3Rpb25zID0gZGF0YS5hY3Rpb247XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGFjdGlvbnMpO1xyXG5cdFx0XHRcdFx0XHRpZiAoYWN0aW9ucykge1xyXG5cdFx0XHRcdFx0XHQgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhY3Rpb25zLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdCAgICAgICAgdmFyIGFjdGlvbiA9IGFjdGlvbnNbaV07XHJcblx0XHRcdFx0XHRcdCAgICAgICAgdmFyIHZhbCA9IGFjdGlvbi52YWx1ZTtcclxuXHRcdFx0XHRcdFx0ICAgICAgICB2YXIgZW52aXJvbWVudCA9IEpTT04uc3RyaW5naWZ5KGVudmlyb21lbnQpO1xyXG5cdFx0XHRcdFx0XHQgICAgICAgIFxyXG5cdFx0XHRcdFx0XHQgICAgICAgIGlmIChhY3Rpb24uYWN0aW9uX3R5cGUgPT0gJ29wZW5fcGFuZWwnKSB7XHJcblx0XHRcdFx0XHRcdCAgICAgICAgICAgdmFyIGQgPSBkaWFsb2coe1xyXG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICB0aXRsZTogJzxpIGNsYXNzPVwiYWNlLWljb24gZmEgZmEtaW5mby1jaXJjbGVcIj48L2k+ICcgKyAn5o+Q56S6JyxcclxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgY29udGVudDogYWN0aW9uLmFjdGlvbl90eXBlICsgJ+atpGFjdGlvbuWwmuacquWkhOeQhu+8gSdcclxuXHRcdFx0XHRcdFx0ICAgICAgICAgICB9KTtcclxuXHRcdFx0XHRcdFx0ICAgICAgICAgICBkLnNob3coKTtcclxuXHRcdFx0XHRcdFx0ICAgICAgICB9XHJcblx0XHRcdFx0XHRcdCAgICAgICAgZWxzZSBpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdvcGVuX3NlbGVjdF91c2VyZGxnJykge1xyXG5cdFx0XHRcdFx0XHQgICAgICAgICAgICB2YXIgc3R5bGUgPSB2YWwuc3R5bGU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdC8vIHN0eWxlID09ICd1c2VyJyA/ICfpgInmi6nkurrlkZgnIDogc3R5bGUgPT0gJ2RlcGFydG1lbnQnID8gJ+mAieaLqemDqOmXqCcgOiBzdHlsZSA9PSAncm9sZScgPyAn6YCJ5oup6KeS6ImyJyA6ICcnXHJcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBwYXJhbT17XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aW5kZXg6IGluZGV4LFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlpbmRleDppaW5kZXgsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0YnV0dG9uX2NhbGxiYWNrOmJ1dHRvbl9jYWxsYmFjayxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXE6cmVxLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGFfYXR0cjpkYXRhX2F0dHJcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR1bmkubmF2aWdhdGVUbyh7XHJcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIFx0dXJsOicuLi9zZWxwc24vaW5kZXg/bXVsaXQ9ZmFsc2UmcGFyYW09JytKU09OLnN0cmluZ2lmeShwYXJhbSksXHJcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIFx0ZXZlbnRzOntcclxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgXHRcdEFkZFBlcihkYXRhLHBhcmFtKXsgXHJcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIFx0XHRcdC8vIGNvbnNvbGUubG9nKHBhcmFtKTtcclxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgXHRcdFx0Y29uc29sZS5sb2coZGF0YSk7XHJcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIFx0XHRcdHZhciBjYWxsYmFja19ldmVudGlkID0gcGFyYW0uYnV0dG9uX2NhbGxiYWNrLnRyaW0oKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGluZm8gPSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICBldmVudGlkOiBjYWxsYmFja19ldmVudGlkLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgZWR0eXBlOiBcIjBcIixcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgIHByb2plY3RpZDogJycsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICByY2xzaWQ6ICcnLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgcm9iamlkOiAnJyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgIHVzZXJsb2dpbjogJycsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICBjbHNpZDogJHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgIG9iamlkOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgYXR0cjogcGFyYW0ucmVxLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgaW5wdXRwYXJhbWV0ZXI6IGRhdGFcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy5EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbywgcGFyYW0uZGF0YV9hdHRyKTtcclxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgXHRcdH1cclxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgXHR9XHJcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIH0pO1x0XHJcblx0XHRcdFx0XHRcdCAgICAgICAgfVxyXG5cdFx0XHRcdFx0XHQgICAgICAgIGVsc2UgaWYgKGFjdGlvbi5hY3Rpb25fdHlwZSA9PSAnb3Blbl9kYXRhX3F1ZXJ5X2RsZycpIHtcclxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgXHJcblx0XHRcdFx0XHRcdCAgICAgICAgfVxyXG5cdFx0XHRcdFx0XHQgICAgICAgIGVsc2UgaWYgKGFjdGlvbi5hY3Rpb25fdHlwZSA9PSAnb3Blbl9jb21tb25fZGxnJykge1xyXG5cdFx0XHRcdFx0XHQgICAgICAgICAgICB2YXIgdmFsdWUgPSBhY3Rpb24udmFsdWU7XHJcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIHZhciBkID0gZGlhbG9nKHtcclxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgIHRpdGxlOiAnPGkgY2xhc3M9XCJhY2UtaWNvbiBmYSBmYS1pbmZvLWNpcmNsZVwiPjwvaT4gJyArICfmj5DnpLonLFxyXG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgY29udGVudDogYWN0aW9uLmFjdGlvbl90eXBlICsgJ+atpGFjdGlvbuWwmuacquWkhOeQhu+8gSdcclxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgfSk7XHJcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIGQuc2hvdygpO1xyXG5cdFx0XHRcdFx0XHQgICAgICAgIH1cclxuXHRcdFx0XHRcdFx0ICAgICAgICBlbHNlIGlmIChhY3Rpb24uYWN0aW9uX3R5cGUgPT0gJ29wZW5fcHJvamVjdF9xdWVyeV9kbGcnKSB7XHJcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIC8vY29uc29sZS5sb2coYWN0aW9uLnZhbHVlLnNlbGVjdF9yYW5nZSk7XHJcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIC8vY29uc29sZS5sb2coYWN0aW9uLnZhbHVlLm11bGl0X3NlbGVjdCk7XHJcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIHZhciBwcmlSZWwgPSAnLTEnO1xyXG5cdFx0XHRcdFx0XHQgICAgICAgICAgICBpZiAoYWN0aW9uLnZhbHVlLnNlbGVjdF9yYW5nZSA9PSAn5YWo6YOo55u45YWzJylcclxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgIHByaVJlbCA9ICcwJztcclxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgZWxzZSBpZiAoYWN0aW9uLnZhbHVlLnNlbGVjdF9yYW5nZSA9PSAn5oiR6LSf6LSj55qE6aG555uuJylcclxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgIHByaVJlbCA9ICcxJztcclxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgZWxzZSBpZiAoYWN0aW9uLnZhbHVlLnNlbGVjdF9yYW5nZSA9PSAn5oiR5Yib5bu655qEJylcclxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgIHByaVJlbCA9ICcyJztcclxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgZWxzZSBpZiAoYWN0aW9uLnZhbHVlLnNlbGVjdF9yYW5nZSA9PSAn5oiR5Y+C5LiO55qEJyB8fCBhY3Rpb24udmFsdWUuc2VsZWN0X3JhbmdlID09ICfmiJHlj4LliqDnmoQnKVxyXG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgcHJpUmVsID0gJzMnO1xyXG5cdFx0XHRcdFx0XHQgICAgICAgICAgICBlbHNlIGlmIChhY3Rpb24udmFsdWUuc2VsZWN0X3JhbmdlID09ICfmiJHlhbPms6jnmoQnKVxyXG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgcHJpUmVsID0gJzQnO1xyXG5cdFx0XHRcdFx0XHQgICAgICAgICAgICBlbHNlIGlmIChhY3Rpb24udmFsdWUuc2VsZWN0X3JhbmdlID09ICfmiJHkuIvlsZ7nmoTpobnnm64nKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHByaVJlbCA9ICc1JztcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtXz17XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aW5kZXg6IGluZGV4LFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlpbmRleDppaW5kZXgsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0YnV0dG9uX2NhbGxiYWNrOmJ1dHRvbl9jYWxsYmFjayxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXE6cmVxXHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0dW5pLm5hdmlnYXRlVG8oe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHVybDonLi4vc2VsUHJqL2luZGV4P3JlbGF0aW9uPScrcHJpUmVsKycmcGFyYW09JytKU09OLnN0cmluZ2lmeShwYXJhbV8pLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGV2ZW50czp7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRBZGRQZXIoZGF0YSxwYXJhbSl7IFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W3BhcmFtLmluZGV4XS5BdHRyW3BhcmFtLmlpbmRleF0uVmFsdWU9ZGF0YVswXS5OYW1lO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W3BhcmFtLmluZGV4XS5BdHRyW3BhcmFtLmlpbmRleF0uVmFsSUQ9ZGF0YVswXS5JRCsnOycrZGF0YVswXS5OYW1lO1xyXG5cdFx0XHRcdFx0XHQgICAgICAgICAgICBcdFx0XHR2YXIgY2FsbGJhY2tfZXZlbnRpZCA9IHBhcmFtLmJ1dHRvbl9jYWxsYmFjay50cmltKCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChjYWxsYmFja19ldmVudGlkKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICB2YXIgaW5mbyA9IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgICBldmVudGlkOiBjYWxsYmFja19ldmVudGlkLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgICAgIGVkdHlwZTogXCIyXCIsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgICAgcHJvamVjdGlkOiBkYXRhWzBdLklELFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgICAgIHJjbHNpZDogXCJcIixcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgICByb2JqaWQ6IFwiXCIsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgICAgdXNlcmxvZ2luOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgICAgIGNsc2lkOiAkdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgICAgIG9iamlkOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgICAgIGF0dHI6IHBhcmFtLnJlcSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgIH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICR0aGlzLkRhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdCAgICAgICAgfSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgdmFyIGQgPSBkaWFsb2coe1xyXG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgdGl0bGU6ICc8aSBjbGFzcz1cImFjZS1pY29uIGZhIGZhLWluZm8tY2lyY2xlXCI+PC9pPiAnICsgJ+aPkOekuicsXHJcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICBjb250ZW50OiBhY3Rpb24uYWN0aW9uX3R5cGUgKyAn5q2kYWN0aW9u5bCa5pyq5aSE55CG77yBJ1xyXG5cdFx0XHRcdFx0XHQgICAgICAgICAgICB9KTtcclxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgZC5zaG93KCk7XHJcblx0XHRcdFx0XHRcdCAgICAgICAgfVxyXG5cdFx0XHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6NS4yXCIsY29udGVudDogJ+iwg+eUqCBiZWZvcmVfY2xpY2tfYnV0dG9uIOiEmuacrOi/lOWbnuepuu+8jGV2ZW50X2lkJyArIGV2ZW50aWQsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzVcIixjb250ZW50OnN1Y2Nlc3MubXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pLmNhdGNoKGV4PT57XHJcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhleCk7XHJcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekujUuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0ICAgIH0sXHJcblx0XHQgICAgc2Nhbl9pbmlfRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8pe1xyXG5cdFx0ICAgIFx0dmFyIHBhcmFtID0ge1xyXG5cdFx0ICAgIFx0ICAgIEVkaXRTdHlsZTogdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLlZpZXdfU3R5bGUuTmFtZSxcclxuXHRcdCAgICBcdCAgICBWaWV3U3R5bGU6IHRoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5WaWV3X1N0eWxlLk5hbWUsXHJcblx0XHQgICAgXHQgICAgTm90VHJpZ2dlclN5c0V2ZW50OiAwLFxyXG5cdFx0ICAgIFx0ICAgIGVudmlyb21lbnQ6IHtcclxuXHRcdCAgICBcdCAgICAgICAgJ2Z1bmN0aW9uJzogJzMwMDAnLCAvLyDlip/og73ngrnnvJblj7dcclxuXHRcdCAgICBcdCAgICAgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuSUQsICAgICAvLyDlip/og73ngrnkuLvmlbDmja7nsbvmoIfor4ZcclxuXHRcdCAgICBcdCAgICAgICAgJ2J1dHRvbic6ICd0b3AnLCAgIC8vIHRvcC9ib3R0b21cclxuXHRcdCAgICBcdCAgICAgICAgYnV0dG9uX25hbWU6ICfmlrDlop4nLFxyXG5cdFx0ICAgIFx0ICAgICAgICBtYXN0ZXI6IHtcclxuXHRcdCAgICBcdCAgICAgICAgICAgIGNsc19pZDogdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLklELCAvLyBidXR0b249Ym90dG9t5pe2IG1hc3RlcueahGNsc19pZFxyXG5cdFx0ICAgIFx0ICAgICAgICAgICAgLy9vYmpfaWQ6ICcnICAvLyBidXR0b249Ym90dG9t5pe2IG1hc3RlcueahG9ial9pZFxyXG5cdFx0ICAgIFx0ICAgICAgICB9XHJcblx0XHQgICAgXHQgICAgfVxyXG5cdFx0ICAgIFx0fVxyXG5cdFx0ICAgIFx0dmFyIGlucHV0cGFyYW1ldGVyID0gJyc7XHJcblx0XHQgICAgXHR2YXIgZ2xvYmFsX2F0dHIgPSAnJztcclxuXHRcdCAgICBcdFxyXG5cdFx0ICAgIFx0dmFyIGRhdGFJbmZvID0ge1xyXG5cdFx0ICAgICAgICAgICAgZWR0eXBlOiBpbmZvLmVkdHlwZSwgZXZlbnRpZDogaW5mby5ldmVudGlkLCBwcm9qZWN0aWQ6IGluZm8ucHJvamVjdGlkLFxyXG5cdFx0ICAgICAgICAgICAgcmNsc2lkOiBpbmZvLnJjbHNpZCwgcm9iamlkOiBpbmZvLnJvYmppZCwgdXNlcmxvZ2luOiBpbmZvLnVzZXJsb2dpbiwgY2xzaWQ6IGluZm8uY2xzaWQsIG9iamlkOiBpbmZvLm9iamlkLFxyXG5cdFx0ICAgICAgICAgICAgYXR0cjogSlNPTi5zdHJpbmdpZnkoaW5mby5hdHRyKSwgZXh0aW5mbzogSlNPTi5zdHJpbmdpZnkocGFyYW0pLCBpbnB1dHBhcmFtZXRlcjogaW5wdXRwYXJhbWV0ZXIsIGdsb2JhbF9hdHRyOiBnbG9iYWxfYXR0clxyXG5cdFx0ICAgICAgICB9XHJcblx0XHQgICAgXHRjb25zb2xlLmxvZyhkYXRhSW5mbyk7XHJcblx0XHQgICAgXHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnRGF0YU9ialJ1bkN1c3RvbUV2ZW50SW5mbycsZGF0YUluZm8pLnRoZW4oc3VjY2Vzcz0+e1xyXG5cdFx0ICAgIFx0XHRjb25zb2xlLmxvZyhzdWNjZXNzKTtcclxuXHRcdCAgICBcdFx0aWYgKHN1Y2Nlc3MuY29kZT09JzAwMDAwJykge1xyXG5cdFx0ICAgIFx0XHRcdHZhciBkYXRhID0gSlNPTi5wYXJzZShzdWNjZXNzLmRhdGEpO1xyXG5cdFx0ICAgIFx0XHRcdHZhciBhY3Rpb25saXN0ID0gZGF0YS5hY3Rpb247XHJcblx0XHQgICAgXHRcdFx0aWYgKGFjdGlvbmxpc3QpIHtcclxuXHRcdCAgICBcdFx0XHQgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhY3Rpb25saXN0Lmxlbmd0aDsgaisrKSB7XHJcblx0XHQgICAgXHRcdFx0ICAgICAgICB2YXIgYWN0aW9uID0gYWN0aW9ubGlzdFtqXVxyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgdmFyIGFjdGlvbl90eXBlID0gYWN0aW9uLmFjdGlvbl90eXBlO1xyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgdmFyIHZhbHVlID0gYWN0aW9uLnZhbHVlO1xyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgaWYgKGFjdGlvbl90eXBlID09ICdzZXRfZGxnX2F0dHInKSB7XHJcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgaWYgKHZhbHVlKSB7XHJcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIHZhciB2YWwgPSB2YWx1ZTtcclxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykge1xyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgdmFsID0gSlNPTi5wYXJzZSh2YWx1ZSk7XHJcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIH1cclxuXHRcdCAgICBcdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKHZhbCk7XHJcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XHJcblx0XHQgICAgXHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGEgPSAwOyBhIDwgdGhpcy4kZGF0YS5zdWJDbGFzc0F0dHJMaXN0Lmxlbmd0aDsgYSsrKSB7XHJcblx0XHQgICAgXHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgbCA9IDA7IGwgPCB0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3RbYV0uQXR0ci5sZW5ndGg7IGwrKykge1xyXG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGNhID0gdGhpcy4kZGF0YS5zdWJDbGFzc0F0dHJMaXN0W2FdLkF0dHJbbF07XHJcblx0XHQgICAgXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAodmFsW2ldLmF0dHIgID09IGNhLk5hbWUpIHtcclxuXHRcdCAgICBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY2EuVHlwZT09J+Wtl+WFuCcgfHwgY2EuVHlwZT09J+Wtl+WFuC3lrZfnrKbkuLInKXtcclxuXHRcdCAgICBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZGljdEl0ZW1MaXN0PVtdO1xyXG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgZCBpbiB2YWxbaV0uY2hvaWNlX2xpc3Qpe1xyXG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHZhbCA9dmFsW2ldLmNob2ljZV9saXN0W2RdO1xyXG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGljdEl0ZW1MaXN0LnB1c2goe1wiQ05fU19OQU1FXCI6dmFsLFwiTmFtZVwiOnZhbCxcImxhYmVsXCI6dmFsLFwidmFsdWVcIjp2YWx9KTtcclxuXHRcdCAgICBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxyXG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdCAgICBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5kaWN0aXRlbSA9IGRpY3RJdGVtTGlzdDtcclxuXHRcdCAgICBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBhdHRyW2pdLmRpY3RpdGVtID0gdmFsW2ldLmNob2ljZV9saXN0O1xyXG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9ZWxzZXtcclxuXHRcdCAgICBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBjYS52YWx1ZSA9IHZhbFtpXS52YWx1ZTtcclxuXHRcdCAgICBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdCAgICBcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0ICAgIFx0XHRcclxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSAwO1xyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5maWx0ZXIoZnVuY3Rpb24gKHMpIHtcclxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsW2ldLmF0dHIgPT0gcy5hdHRyXHJcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICB9KS5sZW5ndGgpIHtcclxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSAxO1xyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLnB1c2godmFsW2ldKTtcclxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgIH1cclxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgIGlmIChsZW5ndGggPT0gMCkge1xyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUubGVuZ3RoOyBqKyspIHtcclxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLmF0dHIgPT0gdmFsW2ldLmF0dHIpIHtcclxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLnZhbHVlID0gdmFsW2ldLnZhbHVlO1xyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgfVxyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICB9XHJcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgfVxyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgfVxyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgaWYgKGFjdGlvbl90eXBlID09ICdvcGVuX3NlbGVjdF91c2VyZGxnJykge1xyXG5cdFx0ICAgIFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vNi4yXCIsY29udGVudDpcIm9wZW5fc2VsZWN0X3VzZXJkbGfov5nkuKphY3Rpb25fdHlwZei/mOacquWkhOeQhu+8gVwiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgfVxyXG5cdFx0ICAgIFx0XHRcdCAgICB9XHJcblx0XHQgICAgXHRcdFx0fVxyXG5cdFx0ICAgIFx0XHRcdFxyXG5cdFx0ICAgIFx0XHR9ZWxzZXtcclxuXHRcdCAgICBcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzZcIixjb250ZW50OnN1Y2Nlc3MubXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0ICAgIFx0XHR9XHJcblx0XHQgICAgXHR9KS5jYXRjaChleD0+e1xyXG5cdFx0ICAgIFx0XHQvLyBjb25zb2xlLmxvZyhleCk7XHJcblx0XHQgICAgXHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vNi4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHQgICAgXHR9KTtcclxuXHRcdCAgICB9LFxyXG5cdFx0ICAgIHNjYW5fRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8sZGF0YV9hdHRyKXtcclxuXHRcdCAgICBcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHQgICAgXHR2YXIgZW52aXJvbWVudCA9IHtcclxuXHRcdCAgICBcdCAgICAnZnVuY3Rpb24nOiAnMzAwMCcsIC8vIOWKn+iDveeCuee8luWPt1xyXG5cdFx0ICAgIFx0ICAgIGNsc19pZDogJ01CT1gnLC8vdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLklELCAgICAgLy8g5Yqf6IO954K55LuO5pWw5o2u57G75qCH6K+GXHJcblx0XHQgICAgXHQgICAgJ2J1dHRvbic6ICd0b3AnLCAgIC8vIHRvcC9ib3R0b21cclxuXHRcdCAgICBcdCAgICBidXR0b25fbmFtZTogJ+aWsOWinicsXHJcblx0XHQgICAgXHQgICAgbWFzdGVyOiB7XHJcblx0XHQgICAgXHQgICAgICAgIGNsc19pZDogJ01CT1gnLC8vdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLklELCAvLyBidXR0b249Ym90dG9t5pe2IG1hc3RlcueahGNsc19pZFxyXG5cdFx0XHRcdFx0XHRhdHRyOiBpbmZvLm1hc3RfYXR0ciAvL+S4u+aVsOaNruexu+WxnuaAp1xyXG5cdFx0ICAgIFx0ICAgICAgICAvL29ial9pZDogJycgIC8vIGJ1dHRvbj1ib3R0b23ml7YgbWFzdGVy55qEb2JqX2lkXHJcblx0XHQgICAgXHQgICAgfVxyXG5cdFx0ICAgIFx0fTtcclxuXHRcdCAgICBcdGVudmlyb21lbnQuZWRpdF9kbGcgPSB7XHJcblx0XHRcdFx0XHR0eXBlOiAnc21hbGwnLC8v5bCP56qX5Y+jXHJcblx0XHQgICAgXHQgICAgY2xhc3NfaWQ6ICdNQk9YJywvL3RoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5JRCwvL+W9k+WJjeaVsOaNruexu2lkXHJcblx0XHQgICAgXHR9XHJcblx0XHQgICAgXHRpZiAoZGF0YV9hdHRyKSB7XHJcblx0XHQgICAgXHQgICAgZW52aXJvbWVudC5lZGl0X2RsZy5mb3JtX2NvbnRyb2wgPSB7Ly/miYDlsZ7nmoTooajljZXmjqfku7ZcclxuXHRcdCAgICBcdCAgICAgICAgbmFtZTogZGF0YV9hdHRyLk5hbWUsLy/lrZfmrrXlsZ7mgKdcclxuXHRcdCAgICBcdCAgICAgICAgdGV4dDogZGF0YV9hdHRyLkRpc3BOYW1lLC8v5pi+56S65paH5pysXHJcblx0XHQgICAgXHQgICAgICAgIGdyb3VwX25hbWU6IGRhdGFfYXR0ci5Hcm91cE5hbWUsLy/lsZ7mgKfnu4RcclxuXHRcdCAgICBcdCAgICAgICAgdHlwZTogZGF0YV9hdHRyLlR5cGUsLy/lrZfmrrXnsbvlnotcclxuXHRcdCAgICBcdCAgICAgICAgcmVhZG9ubHk6IGRhdGFfYXR0ci5SZWFkT25seSwvL+aYr+WQpuWPquivu1xyXG5cdFx0ICAgIFx0ICAgICAgICBidXR0b25faW1nOiBkYXRhX2F0dHIuYnV0dG9uX2ltZywvL+W8leeUqOaMiemSrueahOWbvuagh1xyXG5cdFx0ICAgIFx0ICAgICAgICBidXR0b25fdG9vbHRpcDogZGF0YV9hdHRyLmJ1dHRvbl90b29sdGlwLy/lvJXnlKjmjInpkq7nmoR0b29sdGlwXHJcblx0XHQgICAgXHQgICAgfVxyXG5cdFx0ICAgIFx0fVxyXG5cdFx0ICAgIFx0XHJcblx0XHQgICAgXHR2YXIgZGF0YUluZm8gPSB7XHJcblx0XHQgICAgICAgICAgICBlZHR5cGU6IGluZm8uZWR0eXBlLCBldmVudGlkOiBpbmZvLmV2ZW50aWQsIHByb2plY3RpZDogaW5mby5wcm9qZWN0aWQucmVwbGFjZSgneycsJycpLnJlcGxhY2UoJ30nLCcnKSxcclxuXHRcdCAgICAgICAgICAgIHJjbHNpZDogaW5mby5yY2xzaWQsIHJvYmppZDogaW5mby5yb2JqaWQsIHVzZXJsb2dpbjogaW5mby51c2VybG9naW4sIGNsc2lkOiBpbmZvLmNsc2lkLCBvYmppZDogaW5mby5vYmppZCxcclxuXHRcdCAgICAgICAgICAgIGF0dHI6IEpTT04uc3RyaW5naWZ5KGluZm8uYXR0ciksIGV4dGluZm86IEpTT04uc3RyaW5naWZ5KGVudmlyb21lbnQpLCBpbnB1dHBhcmFtZXRlcjogSlNPTi5zdHJpbmdpZnkoaW5mby5pbnB1dFBhcmFtdGVyKSwgZ2xvYmFsX2F0dHI6IEpTT04uc3RyaW5naWZ5KHRoaXMuJGRhdGEuZ2xvYmFsX2F0dHIpXHJcblx0XHQgICAgICAgIH1cclxuXHRcdCAgICBcdGNvbnNvbGUubG9nKGRhdGFJbmZvKTtcclxuXHRcdCAgICBcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdEYXRhT2JqUnVuQ3VzdG9tRXZlbnRJbmZvJyxkYXRhSW5mbykudGhlbihzdWNjZXNzPT57XHJcblx0XHQgICAgXHRcdGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xyXG5cdFx0ICAgIFx0XHRpZiAoc3VjY2Vzcy5jb2RlPT0nMDAwMDAnKSB7XHJcblx0XHQgICAgXHRcdFx0dmFyIGRhdGEgPSBKU09OLnBhcnNlKHN1Y2Nlc3MuZGF0YSk7XHJcblx0XHQgICAgXHRcdFx0dmFyIGFjdGlvbmxpc3QgPSBkYXRhLmFjdGlvbjtcclxuXHRcdCAgICBcdFx0XHRcclxuXHRcdCAgICBcdFx0XHRpZiAoYWN0aW9ubGlzdCkge1xyXG5cdFx0ICAgIFx0XHRcdFx0Y29uc29sZS5sb2coYWN0aW9ubGlzdCk7XHJcblx0XHQgICAgXHRcdFx0ICAgIGZvciAodmFyIGlpID0gMDsgaWkgPCBhY3Rpb25saXN0Lmxlbmd0aDsgaWkrKykge1xyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgdmFyIGFjdGlvbiA9IGFjdGlvbmxpc3RbaWldO1xyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgaWYgKGFjdGlvbi5hY3Rpb25fdHlwZSA9PSAnc2V0X2RsZ19hdHRyJykge1xyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgIHZhciByZXN1bHQgPSBhY3Rpb24udmFsdWU7XHJcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyBpKyspIHtcclxuXHRcdCAgICBcdFx0XHRcdFx0XHRcdGlmIChyZXN1bHRbaV0uY2hvaWNlX2xpc3QpIHtcclxuXHRcdCAgICBcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgcyA9IDA7IHMgPCAkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3QubGVuZ3RoOyBzKyspIHtcclxuXHRcdCAgICBcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBjID0gMDsgYyA8ICR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtzXS5zdWJDbGFzc0F0dHJMaXN0Lmxlbmd0aDsgYysrKSB7XHJcblx0XHQgICAgXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgYXR0ciA9ICR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtzXS5zdWJDbGFzc0F0dHJMaXN0W2NdLkF0dHI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihhdHRyW2pdLk5hbWU9PXJlc3VsdFtpXS5hdHRyKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoYXR0cltqXS5UeXBlPT0n5a2X5YW4JyB8fCBhdHRyW2pdLlR5cGU9PSflrZflhbgt5a2X56ym5LiyJyl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGRpY3RJdGVtTGlzdD1bXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGQgaW4gcmVzdWx0W2ldLmNob2ljZV9saXN0KXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciB2YWwgPXJlc3VsdFtpXS5jaG9pY2VfbGlzdFtkXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRpY3RJdGVtTGlzdC5wdXNoKHtcIkNOX1NfTkFNRVwiOnZhbCxcIk5hbWVcIjp2YWwsXCJsYWJlbFwiOnZhbCxcInZhbHVlXCI6dmFsfSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGF0dHJbal0uZGljdGl0ZW0gPSBkaWN0SXRlbUxpc3Q7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gYXR0cltqXS5kaWN0aXRlbSA9IHJlc3VsdFtpXS5jaG9pY2VfbGlzdDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIH1cclxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgZm9yICh2YXIgcyA9IDA7IHMgPCAkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3QubGVuZ3RoOyBzKyspIHtcclxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgXHRmb3IgKHZhciBjID0gMDsgYyA8ICR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtzXS5zdWJDbGFzc0F0dHJMaXN0Lmxlbmd0aDsgYysrKSB7XHJcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIFx0XHR2YXIgYXR0ciA9ICR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtzXS5zdWJDbGFzc0F0dHJMaXN0W2NdLkF0dHI7XHJcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcclxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgXHRcdFx0Y29uc29sZS5sb2coYXR0cltqXS5OYW1lKyc9PScrcmVzdWx0W2ldLmF0dHIpO1xyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBcdFx0XHRpZihhdHRyW2pdLk5hbWU9PXJlc3VsdFtpXS5hdHRyKXtcclxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgXHRcdFx0XHRhdHRyW2pdLlZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBcdFx0XHR9XHJcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIFx0XHR9XHJcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIFx0fVxyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICB9XHJcblx0XHQgICAgXHRcdFx0XHRcdFx0XHR2YXIgbGVuZ3RoID0gMDtcclxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgaWYgKCEkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUuZmlsdGVyKGZ1bmN0aW9uIChzKSB7XHJcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0W2ldLmF0dHIgPT0gcy5hdHRyXHJcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIH0pLmxlbmd0aCkge1xyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gMTtcclxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5wdXNoKHJlc3VsdFtpXSk7XHJcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIH1cclxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgaWYgKGxlbmd0aCA9PSAwKSB7XHJcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8ICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGg7IGorKykge1xyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0uYXR0ciA9PSByZXN1bHRbaV0uYXR0cikge1xyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0udmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XHJcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgfVxyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICB9XHJcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgfVxyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24uYWN0aW9uX3R5cGUgPT0gJ3NldF9nbG9iYWxfYXR0cicpIHtcclxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAkdGhpcy4kYWN0aW9udHIgPSBhY3Rpb24udmFsdWUgfHwgW107XHJcblx0XHQgICAgXHRcdFx0ICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbi5hY3Rpb25fdHlwZSA9PSAnYWRkX3N1YmNsc19wYW5lbCcpIHsgLy/kuLvku47mlbDmja7nsbvmiavnoIHmn6Xor6LmlbDmja5cclxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICB2YXIgcmVzdWx0ID0gYWN0aW9uLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRsZXQgbGlzdF8xID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3QpKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHNjYW5Db2RlVmFsID0gJHRoaXMuJGRhdGEuc2NhbkNvZGVWYWw7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGluZm8uaW5wdXRQYXJhbXRlclswXS5hdHRyPT1cIm1hc3RfaW5wdXRfMzAzN1wiKSAvL+WIpOaWreaYr+S4u+aVsOaNruexu+aJq+eggeafpeivouaVsOaNrlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHNjYW5Db2RlVmFsID0gXCJtYXN0X2lucHV0XzMwMzctXCIraWk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdC5wdXNoKHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzY2FuQ29kZVZhbDpzY2FuQ29kZVZhbCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdWJDbGFzc0F0dHI6bGlzdF8xXHJcblx0XHRcdFx0XHRcdFx0XHRcdH0pOyBcclxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIHMgPSAwOyBzIDwgJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0Lmxlbmd0aDsgcysrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZigkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3Rbc10uc2NhbkNvZGVWYWwgPT0gc2NhbkNvZGVWYWwpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihyZXN1bHRbaV0uYXR0cj09XCJTX0lEXCIpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W3NdLk9iaklEPXJlc3VsdFtpXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIF9zdWJDbGFzc0F0dHIgPSAkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3Rbc10uc3ViQ2xhc3NBdHRyO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBjID0gMDsgYyA8IF9zdWJDbGFzc0F0dHIubGVuZ3RoOyBjKyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgYXR0ciA9IF9zdWJDbGFzc0F0dHJbY10uQXR0cjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGF0dHJbal0uTmFtZSsnPT0nK3Jlc3VsdFtpXS5hdHRyKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGF0dHJbal0uTmFtZT09cmVzdWx0W2ldLmF0dHIpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhdHRyW2pdLlZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W3NdLnN1YkNsYXNzQXR0cj1saXN0XzE7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBsZW5ndGggPSAwO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICghJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmZpbHRlcihmdW5jdGlvbiAocykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICByZXR1cm4gcmVzdWx0W2ldLmF0dHIgPT0gcy5hdHRyXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSkubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgIGxlbmd0aCA9IDE7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5wdXNoKHJlc3VsdFtpXSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChsZW5ndGggPT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICBmb3IgKHZhciBqID0gMDsgaiA8ICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGg7IGorKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgICAgaWYgKCR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS5hdHRyID09IHJlc3VsdFtpXS5hdHRyKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLnZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgICAgfVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHQgICAgXHRcdFx0ICAgICAgICB9XHJcblx0XHQgICAgXHRcdFx0ICAgIH1cclxuXHRcdCAgICBcdFx0XHR9XHJcblx0XHQgICAgXHRcdFx0XHJcblx0XHQgICAgXHRcdFx0aWYgKGRhdGEucmVzdWx0KSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGxpc3RfMSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy4kZGF0YS5zdWJDbGFzc0F0dHJMaXN0KSk7XHJcblx0XHRcdFx0XHRcdFx0dmFyIHNjYW5Db2RlVmFsID0gJHRoaXMuJGRhdGEuc2NhbkNvZGVWYWw7XHJcblx0XHRcdFx0XHRcdFx0aWYoaW5mby5pbnB1dFBhcmFtdGVyWzBdLmF0dHI9PVwibWFzdF9pbnB1dF8zMDM3XCIpXHJcblx0XHRcdFx0XHRcdFx0XHRzY2FuQ29kZVZhbCA9IFwibWFzdF9pbnB1dF8zMDM3LVwiK2lpO1xyXG5cdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdC5wdXNoKHtcclxuXHRcdFx0XHRcdFx0XHRcdHNjYW5Db2RlVmFsOnNjYW5Db2RlVmFsLFxyXG5cdFx0XHRcdFx0XHRcdFx0c3ViQ2xhc3NBdHRyOmxpc3RfMVxyXG5cdFx0XHRcdFx0XHRcdH0pOyBcclxuXHRcdCAgICBcdFx0XHQgICAgdmFyIHJlc3VsdCA9IGRhdGEucmVzdWx0O1xyXG5cdFx0ICAgIFx0XHRcdCAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykge1xyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgZm9yICh2YXIgcyA9IDA7IHMgPCAkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3QubGVuZ3RoOyBzKyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYoJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W3NdLnNjYW5Db2RlVmFsID09IHNjYW5Db2RlVmFsKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZihyZXN1bHRbaV0uYXR0cj09XCJTX0lEXCIpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3Rbc10uT2JqSUQ9cmVzdWx0W2ldLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBfc3ViQ2xhc3NBdHRyID0gJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W3NdLnN1YkNsYXNzQXR0cjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBjID0gMDsgYyA8IF9zdWJDbGFzc0F0dHIubGVuZ3RoOyBjKyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBhdHRyID0gX3N1YkNsYXNzQXR0cltjXS5BdHRyO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGF0dHJbal0uTmFtZSsnPT0nK3Jlc3VsdFtpXS5hdHRyKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoYXR0cltqXS5OYW1lPT1yZXN1bHRbaV0uYXR0cil7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXR0cltqXS5WYWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdCAgICBcdFx0XHQgICAgICAgIFx0fVxyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgfVxyXG5cdFx0ICAgIFx0XHRcdFx0XHRcclxuXHRcdCAgICBcdFx0XHRcdFx0dmFyIGxlbmd0aCA9IDA7XHJcblx0XHQgICAgXHRcdFx0ICAgICAgICBpZiAoISR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5maWx0ZXIoZnVuY3Rpb24gKHMpIHtcclxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICByZXR1cm4gcmVzdWx0W2ldLmF0dHIgPT0gcy5hdHRyXHJcblx0XHQgICAgXHRcdFx0ICAgICAgICB9KS5sZW5ndGgpIHtcclxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICBsZW5ndGggPSAxO1xyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5wdXNoKHJlc3VsdFtpXSk7XHJcblx0XHQgICAgXHRcdFx0ICAgICAgICB9XHJcblx0XHQgICAgXHRcdFx0ICAgICAgICBpZiAobGVuZ3RoID09IDApIHtcclxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8ICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGg7IGorKykge1xyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBpZiAoJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLmF0dHIgPT0gcmVzdWx0W2ldLmF0dHIpIHtcclxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS52YWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcclxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgfVxyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgIH1cclxuXHRcdCAgICBcdFx0XHQgICAgICAgIH1cclxuXHRcdCAgICBcdFx0XHQgICAgfVxyXG5cdFx0ICAgIFx0XHRcdH1cclxuXHRcdCAgICBcdFx0fWVsc2V7XHJcblx0XHQgICAgXHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor683XCIsY29udGVudDpzdWNjZXNzLm1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdCAgICBcdFx0fVxyXG5cdFx0ICAgIFx0fSkuY2F0Y2goZXg9PntcclxuXHRcdCAgICBcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0ICAgIFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzcuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0ICAgIFx0fSk7XHJcblx0XHQgICAgfSxcclxuXHRcdCAgICBzY2FuX09LRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGV2ZW50SUQpe1xyXG5cdFx0XHRcdHVuaS5zaG93TG9hZGluZyh7XHJcblx0XHRcdFx0XHR0aXRsZTpcIuWKoOi9veS4rS4uLlwiXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdFx0XHR2YXIgcmVxPVtdO1xyXG5cdFx0XHRcdHZhciBhdHRybGlzdCA9ICR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Q7XHJcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xyXG5cdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0XHRcdHZhciBhciA9IGF0dHJbal07XHJcblx0XHRcdFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+36YCJ5oupJyB8fCBhci5WYWx1ZT09J+KAlOKAlOivt+mAieaLqeKAlOKAlCcpIGFyLlZhbHVlPScnO1xyXG5cdFx0XHRcdFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxyXG5cdFx0XHRcdFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XHJcblx0XHRcdFx0XHRcdGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxyXG5cdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XHJcblx0XHRcdFx0XHRcdGVsc2UgaWYoYXIuVHlwZT09J+W4g+WwlOWAvCcpXHJcblx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWU/JzEnOicwJ30pO1xyXG5cdFx0XHRcdFx0XHRlbHNlIGlmKGFyLlR5cGU9PSflrZflhbgnIHx8IGFyLlR5cGU9PSflrZflhbgt5a2X56ym5LiyJyl7XHJcblx0XHRcdFx0XHRcdFx0aWYoYXIuc2VsZWN0PT10cnVlKXsgLy/liKTmlq3kuIvmi4nmmK/lkKblpJrpgIlcclxuXHRcdFx0XHRcdFx0XHRcdHZhciB2YWxTdHIgPVwiXCI7XHJcblx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIHYgaW4gYXIuVmFsdWUpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZih2YWxTdHIpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsU3RyKz1cIjtcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsU3RyKz1hci5WYWx1ZVt2XTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IHZhbFN0cn0pO1xyXG5cdFx0XHRcdFx0XHRcdH1lbHNlXHJcblx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZX0pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGVsc2VcclxuXHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZSA/YXIuVmFsdWUgOicnfSk7XHJcblx0XHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdGlmICgoYXIuTm90RW1wdHkgPT0gJzEnIHx8IGFyLm5vdGVtcHR5ID09IHRydWUpICYmICFhci5WYWx1ZSkge1xyXG5cdFx0XHRcdFx0XHQvLyBpZihhci5ub3RFbXB0eT09JzEnKXtcclxuXHRcdFx0XHRcdFx0XHR1bmkuaGlkZUxvYWRpbmcoKTtcclxuXHRcdFx0XHRcdFx0XHQvLyB1bmkuc2hvd1RvYXN0KHt0aXRsZTphci5EaXNwTmFtZSsn5LiN6IO95Li656m677yBJyxpY29uOlwic3VjY2Vzc1wiLGR1cmF0aW9uOjMwMDB9KTtcclxuXHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6YXIuRGlzcE5hbWUrJ+S4jeiDveS4uuepuu+8gScsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHZhciBvYmplY3RzPVtdO1xyXG5cdFx0XHRcdHZhciBzdWJQYW5lbExpc3QgPSAkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3Q7XHJcblx0XHRcdFx0Zm9yICh2YXIgcyA9IDA7IHMgPCBzdWJQYW5lbExpc3QubGVuZ3RoOyBzKyspIHtcclxuXHRcdFx0XHRcdHZhciBzdWJfcmVxPVtdO1xyXG5cdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzdWJQYW5lbExpc3Rbc10uc3ViQ2xhc3NBdHRyLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdHZhciBhdHRyID0gc3ViUGFuZWxMaXN0W3NdLnN1YkNsYXNzQXR0cltpXS5BdHRyO1xyXG5cdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcclxuXHRcdFx0XHRcdFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xyXG5cdFx0XHRcdFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+36YCJ5oupJyB8fCBhci5WYWx1ZT09J+KAlOKAlOivt+mAieaLqeKAlOKAlCcpIGFyLlZhbHVlPScnO1xyXG5cdFx0XHRcdFx0XHRcdGlmKGFyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpXHJcblx0XHRcdFx0XHRcdFx0XHRpZihhci5WYWx1ZT09J+ivtycpIGFyLlZhbHVlPScnO1xyXG5cdFx0XHRcdFx0XHRcdGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxyXG5cdFx0XHRcdFx0XHRcdFx0c3ViX3JlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XHJcblx0XHRcdFx0XHRcdFx0ZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8JylcclxuXHRcdFx0XHRcdFx0XHRcdHN1Yl9yZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZT8nMSc6JzAnfSk7XHJcblx0XHRcdFx0XHRcdFx0ZWxzZSBpZihhci5UeXBlPT0n5a2X5YW4JyB8fCBhci5UeXBlPT0n5a2X5YW4LeWtl+espuS4sicpe1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYoYXIuc2VsZWN0PT10cnVlKXsgLy/liKTmlq3kuIvmi4nmmK/lkKblpJrpgIlcclxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHZhbFN0ciA9XCJcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciB2IGluIGFyLlZhbHVlKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZih2YWxTdHIpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YWxTdHIrPVwiO1wiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhbFN0cis9YXIuVmFsdWVbdl07XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0c3ViX3JlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IHZhbFN0cn0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0fWVsc2VcclxuXHRcdFx0XHRcdFx0XHRcdFx0c3ViX3JlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlfSk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdGVsc2VcclxuXHRcdFx0XHRcdFx0XHRcdHN1Yl9yZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZSA/YXIuVmFsdWUgOicnfSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHRpZiAoKGFyLk5vdEVtcHR5ID09ICcxJyB8fCBhci5ub3RlbXB0eSA9PSB0cnVlKSAmJiAhYXIuVmFsdWUpIHtcclxuXHRcdFx0XHRcdFx0XHQvLyBpZihhci5ub3RFbXB0eT09JzEnKXtcclxuXHRcdFx0XHRcdFx0XHRcdHVuaS5oaWRlTG9hZGluZygpO1xyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gdW5pLnNob3dUb2FzdCh7dGl0bGU6YXIuRGlzcE5hbWUrJ+S4jeiDveS4uuepuu+8gScsaWNvbjpcInN1Y2Nlc3NcIixkdXJhdGlvbjozMDAwfSk7XHJcblx0XHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6YXIuRGlzcE5hbWUrJ+S4jeiDveS4uuepuu+8gScsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRvYmplY3RzLnB1c2goe1xyXG5cdFx0XHRcdFx0XHRvYmpfaWQ6c3ViUGFuZWxMaXN0W3NdLnNjYW5Db2RlVmFsLFxyXG5cdFx0XHRcdFx0XHRvYmpfYXR0cnM6c3ViX3JlcVxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHZhciBkYXRhSnNvbj17XHJcblx0XHRcdFx0XHRtYXN0ZXJfY2xzOntcclxuXHRcdFx0XHRcdFx0Y2xzX25hbWU6J01CT1gnLC8vJHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5OYW1lLFxyXG5cdFx0XHRcdFx0XHRvYmpfYXR0cnM6cmVxXHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0aW5wdXRfMzAzNzokdGhpcy4kZGF0YS5zY2FuQ29kZVZhbCwgICAvL+aJq+eggeWGheWuuVxyXG5cdFx0XHRcdFx0b3BfdHlwZTokdGhpcy4kZGF0YS5wYXJhbS5PcGVyYXRpb25UeXBlLCAvL+S9nOS4muexu+Wei+WumuS5iVxyXG5cdFx0XHRcdFx0c3ViX2Nsczp7XHJcblx0XHRcdFx0XHRcdGNsc19uYW1lOidNQk9YJywvLyR0aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuTmFtZSxcclxuXHRcdFx0XHRcdFx0b2JqZWN0czpvYmplY3RzXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fTtcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShkYXRhSnNvbikpO1xyXG5cdFx0ICAgIFx0dmFyIGRhdGFJbmZvID0ge1xyXG5cdFx0ICAgICAgICAgICAgZWR0eXBlOiBcIjdcIiwgZXZlbnRpZDogZXZlbnRJRCwgcHJvamVjdGlkOiAnJyxyY2xzaWQ6ICcnLCByb2JqaWQ6ICcnLCB1c2VybG9naW46ICcnLCBcclxuXHRcdFx0XHRcdGNsc2lkOiAnTUJPWCcsIG9iamlkOiAnJyxhdHRyOiBKU09OLnN0cmluZ2lmeShbXSksIGV4dGluZm86IEpTT04uc3RyaW5naWZ5KFtdKSwgXHJcblx0XHRcdFx0XHRnbG9iYWxfYXR0cjogSlNPTi5zdHJpbmdpZnkoJHRoaXMuJGRhdGEuZ2xvYmFsX2F0dHIpLGRhdGFKc29uOkpTT04uc3RyaW5naWZ5KGRhdGFKc29uKVxyXG5cdFx0ICAgICAgICB9XHJcblx0XHRcdFx0Y29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoZGF0YUluZm8pKTtcclxuXHRcdCAgICBcdGNvbnNvbGUubG9nKGRhdGFJbmZvKTtcclxuXHRcdCAgICBcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdEYXRhT2JqUnVuQ3VzdG9tRXZlbnRJbmZvJyxkYXRhSW5mbykudGhlbihzdWNjZXNzPT57XHJcblx0XHQgICAgXHRcdGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xyXG5cdFx0XHRcdFx0dW5pLmhpZGVMb2FkaW5nKCk7XHJcblx0XHQgICAgXHRcdGlmIChzdWNjZXNzLmNvZGU9PScwMDAwMCcpIHtcclxuXHRcdCAgICBcdFx0XHR2YXIgZGF0YSA9IEpTT04ucGFyc2Uoc3VjY2Vzcy5kYXRhKTtcdFx0XHJcblx0XHQgICAgXHRcdFx0dmFyIHJlc3VsdCA9IGRhdGEucmVzdWx0O1xyXG5cdFx0ICAgIFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XHJcblx0XHQgICAgXHRcdFx0ICAgIC8vIHNlbGYuY2xhc3NfYXR0cl9lbGUuZmluZCgnLmF0dHJfZmllbGRbZGF0YS1maWVsZD1cIicgKyByZXN1bHRbaV0uYXR0ciArICdcIl0nKS52YWwocmVzdWx0W2ldLnZhbHVlKS5kYXRhKCd2YWwnLCByZXN1bHRbaV0udmFsdWUpO1xyXG5cdFx0ICAgIFx0XHRcdCAgICB2YXIgbGVuZ3RoID0gMDtcclxuXHRcdCAgICBcdFx0XHQgICAgaWYgKCEkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUuZmlsdGVyKGZ1bmN0aW9uIChzKSB7XHJcblx0XHQgICAgXHRcdFx0ICAgICAgICByZXR1cm4gcmVzdWx0W2ldLmF0dHIgPT0gcy5hdHRyXHJcblx0XHQgICAgXHRcdFx0ICAgIH0pLmxlbmd0aCkge1xyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgbGVuZ3RoID0gMTtcclxuXHRcdCAgICBcdFx0XHQgICAgICAgICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5wdXNoKHJlc3VsdFtpXSk7XHJcblx0XHQgICAgXHRcdFx0ICAgIH1cclxuXHRcdCAgICBcdFx0XHQgICAgaWYgKGxlbmd0aCA9PSAwKSB7XHJcblx0XHQgICAgXHRcdFx0ICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8ICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGg7IGorKykge1xyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgIGlmICgkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0uYXR0ciA9PSByZXN1bHRbaV0uYXR0cikge1xyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0udmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XHJcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgfVxyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgfVxyXG5cdFx0ICAgIFx0XHRcdCAgICB9XHJcblx0XHQgICAgXHRcdFx0fVxyXG5cdFx0ICAgIFx0XHRcdFxyXG5cdFx0ICAgIFx0XHRcdGlmKGV2ZW50SUQgIT0gJHRoaXMuJGRhdGEucGFyYW0uQWZ0ZXJfT0tfRXZlbnQuSUQpXHJcblx0XHQgICAgXHRcdFx0XHQkdGhpcy5zY2FuX09LRGF0YU9ialJ1bkN1c3RvbUV2ZW50KCR0aGlzLiRkYXRhLnBhcmFtLkFmdGVyX09LX0V2ZW50LklEKTtcclxuXHRcdFx0XHRcdFx0ZWxzZXtcclxuXHRcdFx0XHRcdFx0XHQvL+WIt+aWsFxyXG5cdFx0XHRcdFx0XHRcdHVuaS5yZWRpcmVjdFRvKHtcclxuXHRcdFx0XHRcdFx0XHRcdHVybDonLi4vbW9kYWwvbXNfY2xhc3NBdHRyP3BhcmFtPScrSlNPTi5zdHJpbmdpZnkoJHRoaXMuJGRhdGEucGFyYW0pK1wiJnRpdGxlbmFtZT1cIiskdGhpcy4kZGF0YS50aXRsZVxyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHQgICAgXHRcdH1lbHNle1xyXG5cdFx0ICAgIFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vOFwiLGNvbnRlbnQ6c3VjY2Vzcy5tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHQgICAgXHRcdH1cclxuXHRcdCAgICBcdH0pLmNhdGNoKGV4PT57XHJcblx0XHQgICAgXHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcclxuXHRcdFx0XHRcdHVuaS5oaWRlTG9hZGluZygpO1xyXG5cdFx0ICAgIFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzguMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0ICAgIFx0fSk7XHJcblx0XHQgICAgfSxcclxuXHRcdCAgICBcclxuXHRcdFx0XHJcblx0XHR9XHJcblx0fVxyXG48L3NjcmlwdD5cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///80\n");
/***/ }),
/* 81 */
@@ -15424,7 +15424,7 @@
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("/* WEBPACK VAR INJECTION */(function(__f__) {\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ 1);\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar _vue = _interopRequireDefault(__webpack_require__(/*! vue */ 96));\nvar _vuex = _interopRequireDefault(__webpack_require__(/*! vuex */ 101));\nvar _app = _interopRequireDefault(__webpack_require__(/*! ./modules/app */ 102));\n_vue.default.use(_vuex.default);\nvar store = new _vuex.default.Store({\n  modules: {\n    app: _app.default\n  },\n  state: {\n    hasLogin: false,\n    loginProvider: \"\",\n    areaFunc: '',\n    thisareaFuncID: '',\n    thisareaFuncSubID: '',\n    thisEditName: '',\n    thisEditSubName: '',\n    thisDictName: '',\n    _classAttrList: {},\n    _classGridStyleInfo: {},\n    _subClassAttrList: {},\n    _subClassGridStyleInfo: {},\n    _dicValueInfo: {},\n    DataObjRunCustomEventInfo: '',\n    querySelpsn: '',\n    ProjectGetAnalysisList: '',\n    addclassattr: '',\n    username: \"sa\",\n    userpwd: \"0000\",\n    url: \"115.29.185.26:5000\" //192.168.1.184:5200 36.33.24.94:5200\n  },\n\n  mutations: {\n    setUrl: function setUrl(state, url) {\n      state.url = url;\n    },\n    login: function login(state, provider) {\n      state.hasLogin = true;\n      state.loginProvider = provider;\n    },\n    areaFunc: function areaFunc(state, ret) {\n      state.areaFunc = ret;\n    },\n    setareaFuncid: function setareaFuncid(state, id) {\n      state.thisareaFuncID = id;\n    },\n    setareaFunSubcid: function setareaFunSubcid(state, id) {\n      state.thisareaFuncSubID = id;\n    },\n    seteditName: function seteditName(state, editName) {\n      state.thisEditName = editName;\n    },\n    seteditSubName: function seteditSubName(state, editName) {\n      state.thisEditSubName = editName;\n    },\n    setDictName: function setDictName(state, dictName) {\n      state.thisDictName = dictName;\n    },\n    classAttrList: function classAttrList(state, ret) {\n      // state._classAttrList[state.thisareaFuncID] = ret;\n      _vue.default.set(state._classAttrList, state.thisareaFuncID, ret);\n    },\n    classGridStyleInfo: function classGridStyleInfo(state, ret) {\n      // state._classGridStyleInfo[state.thisareaFuncID] = ret;\n      var data = {};\n      if (state._classGridStyleInfo[state.thisareaFuncID]) data = state._classGridStyleInfo[state.thisareaFuncID];\n      _vue.default.set(data, state.thisEditName, ret);\n      _vue.default.set(state._classGridStyleInfo, state.thisareaFuncID, data);\n    },\n    subClassAttrList: function subClassAttrList(state, ret) {\n      _vue.default.set(state._subClassAttrList, state.thisareaFuncSubID, ret);\n    },\n    subClassGridStyleInfo: function subClassGridStyleInfo(state, ret) {\n      var data = {};\n      if (state._subClassGridStyleInfo[state.thisareaFuncSubID]) data = state._subClassGridStyleInfo[state.thisareaFuncSubID];\n      _vue.default.set(data, state.thisEditSubName, ret);\n      _vue.default.set(state._subClassGridStyleInfo, state.thisareaFuncSubID, data);\n    },\n    dicValueInfo: function dicValueInfo(state, ret) {\n      // state._dicValueInfo[state.thisareaFuncID] = ret;\n      _vue.default.set(state._dicValueInfo, state.thisDictName, ret);\n    },\n    DataObjRunCustomEventInfo: function DataObjRunCustomEventInfo(state, ret) {\n      state.DataObjRunCustomEventInfo = ret;\n    },\n    querySelpsn: function querySelpsn(state, ret) {\n      state.querySelpsn = ret;\n    },\n    ProjectGetAnalysisList: function ProjectGetAnalysisList(state, ret) {\n      state.ProjectGetAnalysisList = ret;\n    },\n    addclassattr: function addclassattr(state, ret) {\n      state.addclassattr = ret;\n    },\n    logout: function logout(state) {\n      state.hasLogin = false;\n    }\n  },\n  getters: {\n    loginid: function loginid(state) {\n      return state.loginProvider.loginid;\n    },\n    getUrl: function getUrl(state) {\n      return state.url;\n    },\n    getclassAttrList: function getclassAttrList(state) {\n      return state._classAttrList[state.thisareaFuncID];\n    },\n    getclassGridStyleInfo: function getclassGridStyleInfo(state) {\n      if (state._classGridStyleInfo[state.thisareaFuncID]) return state._classGridStyleInfo[state.thisareaFuncID][state.thisEditName];else return \"\";\n    },\n    getSubClassAttrList: function getSubClassAttrList(state) {\n      return state._subClassAttrList[state.thisareaFuncSubID];\n    },\n    getSubClassGridStyleInfo: function getSubClassGridStyleInfo(state) {\n      if (state._subClassGridStyleInfo[state.thisareaFuncSubID]) return state._subClassGridStyleInfo[state.thisareaFuncSubID][state.thisEditSubName];else return \"\";\n    },\n    getdicValueInfo: function getdicValueInfo(state) {\n      return state._dicValueInfo[state.thisDictName];\n    }\n  },\n  actions: {\n    //{commit} 解构,\n    //univerifyInfo 自定义参数\n    login: function login(_ref, univerifyInfo) {\n      var commit = _ref.commit,\n        state = _ref.state;\n      return new Promise(function (resolve, reject) {\n        univerifyInfo = univerifyInfo || {};\n        univerifyInfo.server = univerifyInfo.server || '';\n        univerifyInfo.uname = univerifyInfo.uname || '';\n        univerifyInfo.pwd = univerifyInfo.pwd || '';\n        // console.log(univerifyInfo);\n        if (univerifyInfo.server.length == 0) {\n          reject({\n            \"errMsg\": '服务器地址不能为空!'\n          });\n        }\n        if (univerifyInfo.uname.length < 2) {\n          reject({\n            \"errMsg\": '账号最短为 2 个字符!'\n          });\n        }\n        if (univerifyInfo.pwd.length < 1) {\n          reject({\n            \"errMsg\": '密码最短为 1个字符!'\n          });\n        }\n        var openinfo = \"http://\" + univerifyInfo.server + \"/\"; //+\"/OrgWebS\"\n        //设置全局参数:url-服务器地址\n        commit(\"setUrl\", openinfo);\n\n        // if (univerifyInfo.server.split(':').length < 2)\n        // \tcgi = \"http://\" + univerifyInfo.server + \":5010\"; ///OrgWebS\n\n        // setTimeout(_=>{\n        // \tresolve(\"00000000000\")\n        // },3000)\n        // console.log(openinfo + \"PDA/SignIn\");\n        uni.request({\n          url: openinfo + \"PDA/SignIn\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            // console.log(res); \n            var ret = res.data;\n            if (ret.code == '00000') {\n              commit(\"login\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            __f__(\"log\", err, \" at store/index.js:183\");\n            reject(err);\n          }\n        });\n      });\n    },\n    areaFunc: function areaFunc(_ref2, univerifyInfo) {\n      var commit = _ref2.commit,\n        state = _ref2.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n\n        uni.request({\n          url: state.url + \"PDA/PDAArea\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            // console.log(res);\n            var ret = res.data;\n            if (ret.code == '00000') {\n              commit(\"areaFunc\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    classAttrList: function classAttrList(_ref3, univerifyInfo) {\n      var commit = _ref3.commit,\n        state = _ref3.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n\n        uni.request({\n          url: state.url + \"PDA/PDAAttrList\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            __f__(\"log\", res, \" at store/index.js:239\");\n            var ret = res.data;\n            if (ret.code == '00000') {\n              commit(\"classAttrList\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    classGridStyleInfo: function classGridStyleInfo(_ref4, univerifyInfo) {\n      var commit = _ref4.commit,\n        state = _ref4.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n\n        uni.request({\n          url: state.url + \"PDA/PDAGridStyleGetInfo\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            __f__(\"log\", res, \" at store/index.js:272\");\n            var ret = res.data;\n            if (ret.code == '00000') {\n              // var data ={};\n              // Vue.set(data,univerifyInfo.name,ret);\n              commit(\"classGridStyleInfo\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    subClassAttrList: function subClassAttrList(_ref5, univerifyInfo) {\n      var commit = _ref5.commit,\n        state = _ref5.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n\n        uni.request({\n          url: state.url + \"PDA/PDAAttrList\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            __f__(\"log\", res, \" at store/index.js:307\");\n            var ret = res.data;\n            if (ret.code == '00000') {\n              commit(\"subClassAttrList\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    subClassGridStyleInfo: function subClassGridStyleInfo(_ref6, univerifyInfo) {\n      var commit = _ref6.commit,\n        state = _ref6.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n\n        uni.request({\n          url: state.url + \"PDA/PDAGridStyleGetInfo\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            __f__(\"log\", res, \" at store/index.js:340\");\n            var ret = res.data;\n            if (ret.code == '00000') {\n              // var data ={};\n              // Vue.set(data,univerifyInfo.name,ret);\n              commit(\"subClassGridStyleInfo\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    dicValueInfo: function dicValueInfo(_ref7, univerifyInfo) {\n      var commit = _ref7.commit,\n        state = _ref7.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n\n        uni.request({\n          url: state.url + \"PDA/PDADicValueGetInfo\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            // console.log(res);\n            var ret = res.data;\n            if (ret.code == '00000') {\n              state.thisDictName = univerifyInfo.dic_name;\n              commit(\"dicValueInfo\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            __f__(\"log\", err, \" at store/index.js:386\");\n            reject(err);\n          }\n        });\n      });\n    },\n    DataObjRunCustomEventInfo: function DataObjRunCustomEventInfo(_ref8, univerifyInfo) {\n      var commit = _ref8.commit,\n        state = _ref8.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        uni.request({\n          url: state.url + \"PDA/PDADataObjRunCustomEvent\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            __f__(\"log\", res, \" at store/index.js:408\");\n            var ret = res.data;\n            if (ret.code == '00000') {\n              commit(\"DataObjRunCustomEventInfo\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            __f__(\"log\", err, \" at store/index.js:418\");\n            reject(err);\n          }\n        });\n      });\n    },\n    querySelpsn: function querySelpsn(_ref9, univerifyInfo) {\n      var commit = _ref9.commit,\n        state = _ref9.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        uni.request({\n          url: state.url + \"selpsn/queryjson\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            // console.log(res);\n            var ret = JSON.parse(res.data);\n            if (ret.code == '00000') {\n              commit(\"querySelpsn\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            __f__(\"log\", err, \" at store/index.js:450\");\n            reject(err);\n          }\n        });\n      });\n    },\n    ProjectGetAnalysisList: function ProjectGetAnalysisList(_ref10, univerifyInfo) {\n      var commit = _ref10.commit,\n        state = _ref10.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        uni.request({\n          url: state.url + \"bpm/ProjectGetAnalysisList\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            __f__(\"log\", res, \" at store/index.js:472\");\n            var ret = res.data;\n            if (ret.code == '00000') {\n              commit(\"ProjectGetAnalysisList\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            __f__(\"log\", err, \" at store/index.js:482\");\n            reject(err);\n          }\n        });\n      });\n    },\n    addclassattr: function addclassattr(_ref11, univerifyInfo) {\n      var commit = _ref11.commit,\n        state = _ref11.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        uni.request({\n          url: state.url + \"workspace/addclassattr\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            __f__(\"log\", res, \" at store/index.js:504\");\n            var ret = res.data;\n            if (ret.code == '00000') {\n              commit(\"addclassattr\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": JSON.stringify(ret)\n              });\n            }\n          },\n          fail: function fail(err) {\n            __f__(\"log\", err, \" at store/index.js:514\");\n            reject(err);\n          }\n        });\n      });\n    }\n  }\n});\nvar _default = store;\nexports.default = _default;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 18)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vc3RvcmUvaW5kZXguanMiXSwibmFtZXMiOlsiVnVlIiwidXNlIiwiVnVleCIsInN0b3JlIiwiU3RvcmUiLCJtb2R1bGVzIiwiYXBwIiwic3RhdGUiLCJoYXNMb2dpbiIsImxvZ2luUHJvdmlkZXIiLCJhcmVhRnVuYyIsInRoaXNhcmVhRnVuY0lEIiwidGhpc2FyZWFGdW5jU3ViSUQiLCJ0aGlzRWRpdE5hbWUiLCJ0aGlzRWRpdFN1Yk5hbWUiLCJ0aGlzRGljdE5hbWUiLCJfY2xhc3NBdHRyTGlzdCIsIl9jbGFzc0dyaWRTdHlsZUluZm8iLCJfc3ViQ2xhc3NBdHRyTGlzdCIsIl9zdWJDbGFzc0dyaWRTdHlsZUluZm8iLCJfZGljVmFsdWVJbmZvIiwiRGF0YU9ialJ1bkN1c3RvbUV2ZW50SW5mbyIsInF1ZXJ5U2VscHNuIiwiUHJvamVjdEdldEFuYWx5c2lzTGlzdCIsImFkZGNsYXNzYXR0ciIsInVzZXJuYW1lIiwidXNlcnB3ZCIsInVybCIsIm11dGF0aW9ucyIsInNldFVybCIsImxvZ2luIiwicHJvdmlkZXIiLCJyZXQiLCJzZXRhcmVhRnVuY2lkIiwiaWQiLCJzZXRhcmVhRnVuU3ViY2lkIiwic2V0ZWRpdE5hbWUiLCJlZGl0TmFtZSIsInNldGVkaXRTdWJOYW1lIiwic2V0RGljdE5hbWUiLCJkaWN0TmFtZSIsImNsYXNzQXR0ckxpc3QiLCJzZXQiLCJjbGFzc0dyaWRTdHlsZUluZm8iLCJkYXRhIiwic3ViQ2xhc3NBdHRyTGlzdCIsInN1YkNsYXNzR3JpZFN0eWxlSW5mbyIsImRpY1ZhbHVlSW5mbyIsImxvZ291dCIsImdldHRlcnMiLCJsb2dpbmlkIiwiZ2V0VXJsIiwiZ2V0Y2xhc3NBdHRyTGlzdCIsImdldGNsYXNzR3JpZFN0eWxlSW5mbyIsImdldFN1YkNsYXNzQXR0ckxpc3QiLCJnZXRTdWJDbGFzc0dyaWRTdHlsZUluZm8iLCJnZXRkaWNWYWx1ZUluZm8iLCJhY3Rpb25zIiwidW5pdmVyaWZ5SW5mbyIsImNvbW1pdCIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0Iiwic2VydmVyIiwidW5hbWUiLCJwd2QiLCJsZW5ndGgiLCJvcGVuaW5mbyIsInVuaSIsInJlcXVlc3QiLCJtZXRob2QiLCJkYXRhVHlwZSIsImhlYWRlciIsInN1Y2Nlc3MiLCJyZXMiLCJjb2RlIiwibXNnIiwiZmFpbCIsImVyciIsImRpY19uYW1lIiwiSlNPTiIsInBhcnNlIiwic3RyaW5naWZ5Il0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7QUFDQTtBQUdBO0FBRkFBLFlBQUcsQ0FBQ0MsR0FBRyxDQUFDQyxhQUFJLENBQUM7QUFHYixJQUFNQyxLQUFLLEdBQUcsSUFBSUQsYUFBSSxDQUFDRSxLQUFLLENBQUM7RUFDNUJDLE9BQU8sRUFBQztJQUNQQyxHQUFHLEVBQUhBO0VBQ0QsQ0FBQztFQUNEQyxLQUFLLEVBQUU7SUFDTkMsUUFBUSxFQUFFLEtBQUs7SUFDZkMsYUFBYSxFQUFFLEVBQUU7SUFDakJDLFFBQVEsRUFBQyxFQUFFO0lBQ1hDLGNBQWMsRUFBQyxFQUFFO0lBQ2pCQyxpQkFBaUIsRUFBQyxFQUFFO0lBQ3BCQyxZQUFZLEVBQUMsRUFBRTtJQUNmQyxlQUFlLEVBQUMsRUFBRTtJQUNsQkMsWUFBWSxFQUFDLEVBQUU7SUFDZkMsY0FBYyxFQUFDLENBQUMsQ0FBQztJQUNqQkMsbUJBQW1CLEVBQUMsQ0FBQyxDQUFDO0lBQ3RCQyxpQkFBaUIsRUFBQyxDQUFDLENBQUM7SUFDcEJDLHNCQUFzQixFQUFDLENBQUMsQ0FBQztJQUN6QkMsYUFBYSxFQUFDLENBQUMsQ0FBQztJQUNoQkMseUJBQXlCLEVBQUMsRUFBRTtJQUM1QkMsV0FBVyxFQUFDLEVBQUU7SUFDZEMsc0JBQXNCLEVBQUMsRUFBRTtJQUN6QkMsWUFBWSxFQUFDLEVBQUU7SUFDZkMsUUFBUSxFQUFDLElBQUk7SUFDYkMsT0FBTyxFQUFDLE1BQU07SUFDZEMsR0FBRyxFQUFDLG9CQUFvQixDQUFDO0VBQzFCLENBQUM7O0VBQ0RDLFNBQVMsRUFBRTtJQUNWQyxNQUFNLGtCQUFDdEIsS0FB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QUFNO1VBQ2ZDLE1BQU0sRUFBRTtZQUNQLGNBQWMsRUFBRTtVQUNqQixDQUFDO1VBQ0RDLE9BQU8sRUFBRSxpQkFBQ0MsR0FBRyxFQUFLO1lBQ2pCLGFBQVlBLEdBQUc7WUFDZixJQUFNMUMsR0FBRyxHQUFHMEMsR0FBRyxDQUFDOUIsSUFBSTtZQUNwQixJQUFJWixHQUFHLENBQUMyQyxJQUFJLElBQUUsT0FBTyxFQUFFO2NBQ3RCaEIsTUFBTSxDQUFDLGNBQWMsRUFBQzNCLEdBQUcsQ0FBQztjQUMxQjZCLE9BQU8sQ0FBQzdCLEdBQUcsQ0FBQztZQUNiLENBQUMsTUFBTTtjQUNOOEIsTUFBTSxDQUFDO2dCQUFDLFFBQVEsRUFBQ2tCLElBQUksQ0FBQ0UsU0FBUyxDQUFDbEQsR0FBRztjQUFDLENBQUMsQ0FBQztZQUN2QztVQUNELENBQUM7VUFDRDZDLElBQUksRUFBRSxjQUFDQyxHQUFHLEVBQUs7WUFDZCxhQUFZQSxHQUFHO1lBQ2ZoQixNQUFNLENBQUNnQixHQUFHLENBQUM7VUFDWjtRQUNELENBQUMsQ0FBQztNQUNILENBQUMsQ0FBQztJQUNIO0VBRUQ7QUFDRCxDQUFDLENBQUM7QUFBQSxlQUVhM0UsS0FBSztBQUFBLDJCIiwiZmlsZSI6IjEwMC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBWdWUgZnJvbSAndnVlJ1xyXG5pbXBvcnQgVnVleCBmcm9tICd2dWV4J1xyXG5WdWUudXNlKFZ1ZXgpXHJcblxyXG5pbXBvcnQgYXBwIGZyb20gJy4vbW9kdWxlcy9hcHAnXHJcbmNvbnN0IHN0b3JlID0gbmV3IFZ1ZXguU3RvcmUoe1xyXG5cdG1vZHVsZXM6e1xyXG5cdFx0YXBwLFxyXG5cdH0sXHJcblx0c3RhdGU6IHtcclxuXHRcdGhhc0xvZ2luOiBmYWxzZSxcclxuXHRcdGxvZ2luUHJvdmlkZXI6IFwiXCIsXHJcblx0XHRhcmVhRnVuYzonJyxcclxuXHRcdHRoaXNhcmVhRnVuY0lEOicnLFxyXG5cdFx0dGhpc2FyZWFGdW5jU3ViSUQ6JycsXHJcblx0XHR0aGlzRWRpdE5hbWU6JycsXHJcblx0XHR0aGlzRWRpdFN1Yk5hbWU6JycsXHJcblx0XHR0aGlzRGljdE5hbWU6JycsXHJcblx0XHRfY2xhc3NBdHRyTGlzdDp7fSxcclxuXHRcdF9jbGFzc0dyaWRTdHlsZUluZm86e30sXHJcblx0XHRfc3ViQ2xhc3NBdHRyTGlzdDp7fSxcclxuXHRcdF9zdWJDbGFzc0dyaWRTdHlsZUluZm86e30sXHJcblx0XHRfZGljVmFsdWVJbmZvOnt9LFxyXG5cdFx0RGF0YU9ialJ1bkN1c3RvbUV2ZW50SW5mbzonJyxcclxuXHRcdHF1ZXJ5U2VscHNuOicnLFxyXG5cdFx0UHJvamVjdEdldEFuYWx5c2lzTGlzdDonJyxcclxuXHRcdGFkZGNsYXNzYXR0cjonJyxcclxuXHRcdHVzZXJuYW1lOlwic2FcIixcclxuXHRcdHVzZXJwd2Q6XCIwMDAwXCIsXHJcblx0XHR1cmw6XCIxMTUuMjkuMTg1LjI2OjUwMDBcIiAvLzE5Mi4xNjguMS4xODQ6NTIwMCAzNi4zMy4yNC45NDo1MjAwXHJcblx0fSxcclxuXHRtdXRhdGlvbnM6IHtcclxuXHRcdHNldFVybChzdGF0ZSwgdXJsKSB7XHJcblx0XHRcdHN0YXRlLnVybCA9IHVybDtcclxuXHRcdH0sXHJcblx0XHRsb2dpbihzdGF0ZSwgcHJvdmlkZXIpIHtcclxuXHRcdFx0c3RhdGUuaGFzTG9naW4gPSB0cnVlO1xyXG5cdFx0XHRzdGF0ZS5sb2dpblByb3ZpZGVyID0gcHJvdmlkZXI7XHJcblx0XHR9LFxyXG5cdFx0YXJlYUZ1bmMoc3RhdGUsIHJldCkge1xyXG5cdFx0XHRzdGF0ZS5hcmVhRnVuYyA9IHJldDtcclxuXHRcdH0sXHJcblx0XHRzZXRhcmVhRnVuY2lkKHN0YXRlLGlkKXtcclxuXHRcdFx0c3RhdGUudGhpc2FyZWFGdW5jSUQ9aWQ7XHJcblx0XHR9LFxyXG5cdFx0c2V0YXJlYUZ1blN1YmNpZChzdGF0ZSxpZCl7XHJcblx0XHRcdHN0YXRlLnRoaXNhcmVhRnVuY1N1YklEPWlkO1xyXG5cdFx0fSxcclxuXHRcdHNldGVkaXROYW1lKHN0YXRlLGVkaXROYW1lKXtcclxuXHRcdFx0c3RhdGUudGhpc0VkaXROYW1lPWVkaXROYW1lO1xyXG5cdFx0fSxcclxuXHRcdHNldGVkaXRTdWJOYW1lKHN0YXRlLGVkaXROYW1lKXtcclxuXHRcdFx0c3RhdGUudGhpc0VkaXRTdWJOYW1lPWVkaXROYW1lO1xyXG5cdFx0fSxcclxuXHRcdHNldERpY3ROYW1lKHN0YXRlLGRpY3ROYW1lKXtcclxuXHRcdFx0c3RhdGUudGhpc0RpY3ROYW1lPWRpY3ROYW1lO1xyXG5cdFx0fSxcclxuXHRcdGNsYXNzQXR0ckxpc3Qoc3RhdGUsIHJldCkge1xyXG5cdFx0XHQvLyBzdGF0ZS5fY2xhc3NBdHRyTGlzdFtzdGF0ZS50aGlzYXJlYUZ1bmNJRF0gPSByZXQ7XHJcblx0XHRcdFZ1ZS5zZXQoc3RhdGUuX2NsYXNzQXR0ckxpc3Qsc3RhdGUudGhpc2FyZWFGdW5jSUQscmV0KTtcclxuXHRcdH0sXHJcblx0XHRjbGFzc0dyaWRTdHlsZUluZm8oc3RhdGUsIHJldCkge1xyXG5cdFx0XHQvLyBzdGF0ZS5fY2xhc3NHcmlkU3R5bGVJbmZvW3N0YXRlLnRoaXNhcmVhRnVuY0lEXSA9IHJldDtcclxuXHRcdFx0dmFyIGRhdGEgPSB7fTtcclxuXHRcdFx0aWYoc3RhdGUuX2NsYXNzR3JpZFN0eWxlSW5mb1tzdGF0ZS50aGlzYXJlYUZ1bmNJRF0pXHJcblx0XHRcdFx0ZGF0YSA9IHN0YXRlLl9jbGFzc0dyaWRTdHlsZUluZm9bc3RhdGUudGhpc2FyZWFGdW5jSURdO1xyXG5cdFx0XHRWdWUuc2V0KGRhdGEsc3RhdGUudGhpc0VkaXROYW1lLHJldCk7XHJcblx0XHRcdFZ1ZS5zZXQoc3RhdGUuX2NsYXNzR3JpZFN0eWxlSW5mbyxzdGF0ZS50aGlzYXJlYUZ1bmNJRCxkYXRhKTtcclxuXHRcdH0sXHJcblx0XHRzdWJDbGFzc0F0dHJMaXN0KHN0YXRlLCByZXQpIHtcclxuXHRcdFx0VnVlLnNldChzdGF0ZS5fc3ViQ2xhc3NBdHRyTGlzdCxzdGF0ZS50aGlzYXJlYUZ1bmNTdWJJRCxyZXQpO1xyXG5cdFx0fSxcclxuXHRcdHN1YkNsYXNzR3JpZFN0eWxlSW5mbyhzdGF0ZSwgcmV0KSB7XHJcblx0XHRcdHZhciBkYXRhID0ge307XHJcblx0XHRcdGlmKHN0YXRlLl9zdWJDbGFzc0dyaWRTdHlsZUluZm9bc3RhdGUudGhpc2FyZWFGdW5jU3ViSURdKVxyXG5cdFx0XHRcdGRhdGEgPSBzdGF0ZS5fc3ViQ2xhc3NHcmlkU3R5bGVJbmZvW3N0YXRlLnRoaXNhcmVhRnVuY1N1YklEXTtcclxuXHRcdFx0VnVlLnNldChkYXRhLHN0YXRlLnRoaXNFZGl0U3ViTmFtZSxyZXQpO1xyXG5cdFx0XHRWdWUuc2V0KHN0YXRlLl9zdWJDbGFzc0dyaWRTdHlsZUluZm8sc3RhdGUudGhpc2FyZWFGdW5jU3ViSUQsZGF0YSk7XHJcblx0XHR9LFxyXG5cdFx0ZGljVmFsdWVJbmZvKHN0YXRlLCByZXQpIHtcclxuXHRcdFx0Ly8gc3RhdGUuX2RpY1ZhbHVlSW5mb1tzdGF0ZS50aGlzYXJlYUZ1bmNJRF0gPSByZXQ7XHJcblx0XHRcdFZ1ZS5zZXQoc3RhdGUuX2RpY1ZhbHVlSW5mbyxzdGF0ZS50aGlzRGljdE5hbWUscmV0KTtcclxuXHRcdH0sXHJcblx0XHREYXRhT2JqUnVuQ3VzdG9tRXZlbnRJbmZvKHN0YXRlLCByZXQpIHtcclxuXHRcdFx0c3RhdGUuRGF0YU9ialJ1bkN1c3RvbUV2ZW50SW5mbyA9IHJldDtcclxuXHRcdH0sXHJcblx0XHRxdWVyeVNlbHBzbihzdGF0ZSwgcmV0KSB7XHJcblx0XHRcdHN0YXRlLnF1ZXJ5U2VscHNuID0gcmV0O1xyXG5cdFx0fSxcclxuXHRcdFByb2plY3RHZXRBbmFseXNpc0xpc3Qoc3RhdGUsIHJldCkge1xyXG5cdFx0XHRzdGF0ZS5Qcm9qZWN0R2V0QW5hbHlzaXNMaXN0ID0gcmV0O1xyXG5cdFx0fSxcclxuXHRcdGFkZGNsYXNzYXR0cihzdGF0ZSwgcmV0KSB7XHJcblx0XHRcdHN0YXRlLmFkZGNsYXNzYXR0ciA9IHJldDtcclxuXHRcdH0sXHJcblx0XHRsb2dvdXQoc3RhdGUpIHtcclxuXHRcdFx0c3RhdGUuaGFzTG9naW4gPSBmYWxzZVxyXG5cdFx0fSxcclxuXHR9LFxyXG5cdGdldHRlcnM6IHtcclxuXHRcdGxvZ2luaWQoc3RhdGUpIHtcclxuXHRcdFx0cmV0dXJuIHN0YXRlLmxvZ2luUHJvdmlkZXIubG9naW5pZFxyXG5cdFx0fSxcclxuXHRcdGdldFVybChzdGF0ZSkge1xyXG5cdFx0XHRyZXR1cm4gc3RhdGUudXJsXHJcblx0XHR9LFxyXG5cdFx0Z2V0Y2xhc3NBdHRyTGlzdChzdGF0ZSl7XHJcblx0XHRcdHJldHVybiBzdGF0ZS5fY2xhc3NBdHRyTGlzdFtzdGF0ZS50aGlzYXJlYUZ1bmNJRF07XHJcblx0XHR9LFxyXG5cdFx0Z2V0Y2xhc3NHcmlkU3R5bGVJbmZvKHN0YXRlKXtcclxuXHRcdFx0aWYoc3RhdGUuX2NsYXNzR3JpZFN0eWxlSW5mb1tzdGF0ZS50aGlzYXJlYUZ1bmNJRF0pXHJcblx0XHRcdFx0cmV0dXJuIHN0YXRlLl9jbGFzc0dyaWRTdHlsZUluZm9bc3RhdGUudGhpc2FyZWFGdW5jSURdW3N0YXRlLnRoaXNFZGl0TmFtZV07XHJcblx0XHRcdGVsc2UgXHJcblx0XHRcdFx0cmV0dXJuIFwiXCI7XHJcblx0XHR9LFxyXG5cdFx0Z2V0U3ViQ2xhc3NBdHRyTGlzdChzdGF0ZSl7XHJcblx0XHRcdHJldHVybiBzdGF0ZS5fc3ViQ2xhc3NBdHRyTGlzdFtzdGF0ZS50aGlzYXJlYUZ1bmNTdWJJRF07XHJcblx0XHR9LFxyXG5cdFx0Z2V0U3ViQ2xhc3NHcmlkU3R5bGVJbmZvKHN0YXRlKXtcclxuXHRcdFx0aWYoc3RhdGUuX3N1YkNsYXNzR3JpZFN0eWxlSW5mb1tzdGF0ZS50aGlzYXJlYUZ1bmNTdWJJRF0pXHJcblx0XHRcdFx0cmV0dXJuIHN0YXRlLl9zdWJDbGFzc0dyaWRTdHlsZUluZm9bc3RhdGUudGhpc2FyZWFGdW5jU3ViSURdW3N0YXRlLnRoaXNFZGl0U3ViTmFtZV07XHJcblx0XHRcdGVsc2UgXHJcblx0XHRcdFx0cmV0dXJuIFwiXCI7XHJcblx0XHR9LFxyXG5cdFx0Z2V0ZGljVmFsdWVJbmZvKHN0YXRlKXtcclxuXHRcdFx0cmV0dXJuIHN0YXRlLl9kaWNWYWx1ZUluZm9bc3RhdGUudGhpc0RpY3ROYW1lXTtcclxuXHRcdH1cclxuXHRcdFxyXG5cdFx0XHJcblx0fSxcclxuXHRhY3Rpb25zOiB7XHJcblx0XHQvL3tjb21taXR9IOino+aehO+8jFxyXG5cdFx0Ly91bml2ZXJpZnlJbmZvIOiHquWumuS5ieWPguaVsFxyXG5cdFx0bG9naW46IGZ1bmN0aW9uKHtcclxuXHRcdFx0Y29tbWl0LFxyXG5cdFx0XHRzdGF0ZVxyXG5cdFx0fSwgdW5pdmVyaWZ5SW5mbykge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHRcdHVuaXZlcmlmeUluZm8gPSB1bml2ZXJpZnlJbmZvIHx8IHt9O1xyXG5cdFx0XHRcdHVuaXZlcmlmeUluZm8uc2VydmVyID0gdW5pdmVyaWZ5SW5mby5zZXJ2ZXIgfHwgJyc7XHJcblx0XHRcdFx0dW5pdmVyaWZ5SW5mby51bmFtZSA9IHVuaXZlcmlmeUluZm8udW5hbWUgfHwgJyc7XHJcblx0XHRcdFx0dW5pdmVyaWZ5SW5mby5wd2QgPSB1bml2ZXJpZnlJbmZvLnB3ZCB8fCAnJztcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyh1bml2ZXJpZnlJbmZvKTtcclxuXHRcdFx0XHRpZiAodW5pdmVyaWZ5SW5mby5zZXJ2ZXIubGVuZ3RoID09IDApIHtcclxuXHRcdFx0XHRcdHJlamVjdCh7XCJlcnJNc2dcIjon5pyN5Yqh5Zmo5Zyw5Z2A5LiN6IO95Li656m6ISd9KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKHVuaXZlcmlmeUluZm8udW5hbWUubGVuZ3RoIDwgMikge1xyXG5cdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOifotKblj7fmnIDnn63kuLogMiDkuKrlrZfnrKYhJ30pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAodW5pdmVyaWZ5SW5mby5wd2QubGVuZ3RoIDwgMSkge1xyXG5cdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOiflr4bnoIHmnIDnn63kuLogMeS4quWtl+espiEnfSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHZhciBvcGVuaW5mbyA9IFwiaHR0cDovL1wiICsgdW5pdmVyaWZ5SW5mby5zZXJ2ZXIgKyBcIi9cIjsgLy8rXCIvT3JnV2ViU1wiXHJcblx0XHRcdFx0Ly/orr7nva7lhajlsYDlj4LmlbDvvJp1cmwt5pyN5Yqh5Zmo5Zyw5Z2AXHJcblx0XHRcdFx0Y29tbWl0KFwic2V0VXJsXCIsb3BlbmluZm8pO1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdC8vIGlmICh1bml2ZXJpZnlJbmZvLnNlcnZlci5zcGxpdCgnOicpLmxlbmd0aCA8IDIpXHJcblx0XHRcdFx0Ly8gXHRjZ2kgPSBcImh0dHA6Ly9cIiArIHVuaXZlcmlmeUluZm8uc2VydmVyICsgXCI6NTAxMFwiOyAvLy9PcmdXZWJTXHJcblx0XHRcdFx0XHJcblx0XHRcdFx0Ly8gc2V0VGltZW91dChfPT57XHJcblx0XHRcdFx0Ly8gXHRyZXNvbHZlKFwiMDAwMDAwMDAwMDBcIilcclxuXHRcdFx0XHQvLyB9LDMwMDApXHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2cob3BlbmluZm8gKyBcIlBEQS9TaWduSW5cIik7XHJcblx0XHRcdFx0dW5pLnJlcXVlc3Qoe1xyXG5cdFx0XHRcdFx0dXJsOiBvcGVuaW5mbyArIFwiUERBL1NpZ25JblwiLFxyXG5cdFx0XHRcdFx0ZGF0YTogdW5pdmVyaWZ5SW5mbyxcclxuXHRcdFx0XHRcdG1ldGhvZDogJ1BPU1QnLFxyXG5cdFx0XHRcdFx0ZGF0YVR5cGU6XCJqc29uXCIsXHJcblx0XHRcdFx0XHRoZWFkZXI6IHtcclxuXHRcdFx0XHRcdCAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRzdWNjZXNzOiAocmVzKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHJlcyk7IFxyXG5cdFx0XHRcdFx0XHRjb25zdCByZXQgPSByZXMuZGF0YVxyXG5cdFx0XHRcdFx0XHRpZiAocmV0LmNvZGU9PScwMDAwMCcpIHtcclxuXHRcdFx0XHRcdFx0XHRjb21taXQoXCJsb2dpblwiLHJldCk7XHJcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShyZXQpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHJlamVjdCh7XCJlcnJNc2dcIjpyZXQubXNnfSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRmYWlsOiAoZXJyKSA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGVycik7XHJcblx0XHRcdFx0XHRcdHJlamVjdChlcnIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0pXHJcblx0XHR9LFxyXG5cdFx0XHJcblx0XHRhcmVhRnVuYzogZnVuY3Rpb24oe1xyXG5cdFx0XHRjb21taXQsXHJcblx0XHRcdHN0YXRlXHJcblx0XHR9LCB1bml2ZXJpZnlJbmZvKSB7XHJcblx0XHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblx0XHRcdFx0IC8vIGNvbnNvbGUubG9nKHN0YXRlLnVybCk7XHJcblx0XHRcdFx0IFxyXG5cdFx0XHRcdHVuaS5yZXF1ZXN0KHtcclxuXHRcdFx0XHRcdHVybDogc3RhdGUudXJsICsgXCJQREEvUERBQXJlYVwiLFxyXG5cdFx0XHRcdFx0ZGF0YTogdW5pdmVyaWZ5SW5mbyxcclxuXHRcdFx0XHRcdG1ldGhvZDogJ1BPU1QnLFxyXG5cdFx0XHRcdFx0ZGF0YVR5cGU6XCJqc29uXCIsXHJcblx0XHRcdFx0XHRoZWFkZXI6IHtcclxuXHRcdFx0XHRcdFx0J2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0c3VjY2VzczogKHJlcykgPT4ge1xyXG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhyZXMpO1xyXG5cdFx0XHRcdFx0XHRjb25zdCByZXQgPSByZXMuZGF0YVxyXG5cdFx0XHRcdFx0XHRpZiAocmV0LmNvZGU9PScwMDAwMCcpIHtcclxuXHRcdFx0XHRcdFx0XHRjb21taXQoXCJhcmVhRnVuY1wiLHJldCk7XHJcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShyZXQpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHJlamVjdCh7XCJlcnJNc2dcIjpyZXQubXNnfSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRmYWlsOiAoZXJyKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGVycik7XHJcblx0XHRcdFx0XHRcdHJlamVjdChlcnIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0pXHJcblx0XHR9LFxyXG5cdFx0XHJcblx0XHRjbGFzc0F0dHJMaXN0OiBmdW5jdGlvbih7XHJcblx0XHRcdGNvbW1pdCxcclxuXHRcdFx0c3RhdGVcclxuXHRcdH0sIHVuaXZlcmlmeUluZm8pIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdFx0XHQgLy8gY29uc29sZS5sb2coc3RhdGUudXJsKTtcclxuXHRcdFx0XHRcclxuXHRcdFx0XHR1bmkucmVxdWVzdCh7XHJcblx0XHRcdFx0XHR1cmw6IHN0YXRlLnVybCArIFwiUERBL1BEQUF0dHJMaXN0XCIsXHJcblx0XHRcdFx0XHRkYXRhOiB1bml2ZXJpZnlJbmZvLFxyXG5cdFx0XHRcdFx0bWV0aG9kOiAnUE9TVCcsXHJcblx0XHRcdFx0XHRkYXRhVHlwZTpcImpzb25cIixcclxuXHRcdFx0XHRcdGhlYWRlcjoge1xyXG5cdFx0XHRcdFx0XHQnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRzdWNjZXNzOiAocmVzKSA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKHJlcyk7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHJldCA9IHJlcy5kYXRhXHJcblx0XHRcdFx0XHRcdGlmIChyZXQuY29kZT09JzAwMDAwJykge1xyXG5cdFx0XHRcdFx0XHRcdGNvbW1pdChcImNsYXNzQXR0ckxpc3RcIixyZXQpO1xyXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUocmV0KTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRyZWplY3Qoe1wiZXJyTXNnXCI6cmV0Lm1zZ30pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZmFpbDogKGVycikgPT4ge1xyXG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhlcnIpO1xyXG5cdFx0XHRcdFx0XHRyZWplY3QoZXJyKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9KVxyXG5cdFx0fSxcclxuXHRcdFxyXG5cdFx0Y2xhc3NHcmlkU3R5bGVJbmZvOiBmdW5jdGlvbih7XHJcblx0XHRcdGNvbW1pdCxcclxuXHRcdFx0c3RhdGVcclxuXHRcdH0sIHVuaXZlcmlmeUluZm8pIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdFx0XHQgLy8gY29uc29sZS5sb2coc3RhdGUudXJsKTtcclxuXHRcdFx0XHQgXHJcblx0XHRcdFx0dW5pLnJlcXVlc3Qoe1xyXG5cdFx0XHRcdFx0dXJsOiBzdGF0ZS51cmwgKyBcIlBEQS9QREFHcmlkU3R5bGVHZXRJbmZvXCIsXHJcblx0XHRcdFx0XHRkYXRhOiB1bml2ZXJpZnlJbmZvLFxyXG5cdFx0XHRcdFx0bWV0aG9kOiAnUE9TVCcsXHJcblx0XHRcdFx0XHRkYXRhVHlwZTpcImpzb25cIixcclxuXHRcdFx0XHRcdGhlYWRlcjoge1xyXG5cdFx0XHRcdFx0XHQnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRzdWNjZXNzOiAocmVzKSA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKHJlcyk7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHJldCA9IHJlcy5kYXRhXHJcblx0XHRcdFx0XHRcdGlmIChyZXQuY29kZT09JzAwMDAwJykge1xyXG5cdFx0XHRcdFx0XHRcdC8vIHZhciBkYXRhID17fTtcclxuXHRcdFx0XHRcdFx0XHQvLyBWdWUuc2V0KGRhdGEsdW5pdmVyaWZ5SW5mby5uYW1lLHJldCk7XHJcblx0XHRcdFx0XHRcdFx0Y29tbWl0KFwiY2xhc3NHcmlkU3R5bGVJbmZvXCIscmV0KTtcclxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKHJldCk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOnJldC5tc2d9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGZhaWw6IChlcnIpID0+IHtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXJyKTtcclxuXHRcdFx0XHRcdFx0cmVqZWN0KGVycik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHRcclxuXHRcdHN1YkNsYXNzQXR0ckxpc3Q6IGZ1bmN0aW9uKHtcclxuXHRcdFx0Y29tbWl0LFxyXG5cdFx0XHRzdGF0ZVxyXG5cdFx0fSwgdW5pdmVyaWZ5SW5mbykge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHRcdCAvLyBjb25zb2xlLmxvZyhzdGF0ZS51cmwpO1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdHVuaS5yZXF1ZXN0KHtcclxuXHRcdFx0XHRcdHVybDogc3RhdGUudXJsICsgXCJQREEvUERBQXR0ckxpc3RcIixcclxuXHRcdFx0XHRcdGRhdGE6IHVuaXZlcmlmeUluZm8sXHJcblx0XHRcdFx0XHRtZXRob2Q6ICdQT1NUJyxcclxuXHRcdFx0XHRcdGRhdGFUeXBlOlwianNvblwiLFxyXG5cdFx0XHRcdFx0aGVhZGVyOiB7XHJcblx0XHRcdFx0XHRcdCdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdHN1Y2Nlc3M6IChyZXMpID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2cocmVzKTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgcmV0ID0gcmVzLmRhdGFcclxuXHRcdFx0XHRcdFx0aWYgKHJldC5jb2RlPT0nMDAwMDAnKSB7XHJcblx0XHRcdFx0XHRcdFx0Y29tbWl0KFwic3ViQ2xhc3NBdHRyTGlzdFwiLHJldCk7XHJcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShyZXQpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHJlamVjdCh7XCJlcnJNc2dcIjpyZXQubXNnfSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRmYWlsOiAoZXJyKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGVycik7XHJcblx0XHRcdFx0XHRcdHJlamVjdChlcnIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0pXHJcblx0XHR9LFxyXG5cdFx0XHJcblx0XHRzdWJDbGFzc0dyaWRTdHlsZUluZm86IGZ1bmN0aW9uKHtcclxuXHRcdFx0Y29tbWl0LFxyXG5cdFx0XHRzdGF0ZVxyXG5cdFx0fSwgdW5pdmVyaWZ5SW5mbykge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHRcdCAvLyBjb25zb2xlLmxvZyhzdGF0ZS51cmwpO1xyXG5cdFx0XHRcdCBcclxuXHRcdFx0XHR1bmkucmVxdWVzdCh7XHJcblx0XHRcdFx0XHR1cmw6IHN0YXRlLnVybCArIFwiUERBL1BEQUdyaWRTdHlsZUdldEluZm9cIixcclxuXHRcdFx0XHRcdGRhdGE6IHVuaXZlcmlmeUluZm8sXHJcblx0XHRcdFx0XHRtZXRob2Q6ICdQT1NUJyxcclxuXHRcdFx0XHRcdGRhdGFUeXBlOlwianNvblwiLFxyXG5cdFx0XHRcdFx0aGVhZGVyOiB7XHJcblx0XHRcdFx0XHRcdCdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdHN1Y2Nlc3M6IChyZXMpID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2cocmVzKTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgcmV0ID0gcmVzLmRhdGFcclxuXHRcdFx0XHRcdFx0aWYgKHJldC5jb2RlPT0nMDAwMDAnKSB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gdmFyIGRhdGEgPXt9O1xyXG5cdFx0XHRcdFx0XHRcdC8vIFZ1ZS5zZXQoZGF0YSx1bml2ZXJpZnlJbmZvLm5hbWUscmV0KTtcclxuXHRcdFx0XHRcdFx0XHRjb21taXQoXCJzdWJDbGFzc0dyaWRTdHlsZUluZm9cIixyZXQpO1xyXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUocmV0KTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRyZWplY3Qoe1wiZXJyTXNnXCI6cmV0Lm1zZ30pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZmFpbDogKGVycikgPT4ge1xyXG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhlcnIpO1xyXG5cdFx0XHRcdFx0XHRyZWplY3QoZXJyKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9KVxyXG5cdFx0fSxcclxuXHRcdFxyXG5cdFx0ZGljVmFsdWVJbmZvOiBmdW5jdGlvbih7XHJcblx0XHRcdGNvbW1pdCxcclxuXHRcdFx0c3RhdGVcclxuXHRcdH0sIHVuaXZlcmlmeUluZm8pIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdFx0XHQgLy8gY29uc29sZS5sb2coc3RhdGUudXJsKTtcclxuXHRcdFx0XHQgXHJcblx0XHRcdFx0dW5pLnJlcXVlc3Qoe1xyXG5cdFx0XHRcdFx0dXJsOiBzdGF0ZS51cmwgKyBcIlBEQS9QREFEaWNWYWx1ZUdldEluZm9cIixcclxuXHRcdFx0XHRcdGRhdGE6IHVuaXZlcmlmeUluZm8sXHJcblx0XHRcdFx0XHRtZXRob2Q6ICdQT1NUJyxcclxuXHRcdFx0XHRcdGRhdGFUeXBlOlwianNvblwiLFxyXG5cdFx0XHRcdFx0aGVhZGVyOiB7XHJcblx0XHRcdFx0XHRcdCdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdHN1Y2Nlc3M6IChyZXMpID0+IHtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2cocmVzKTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgcmV0ID0gcmVzLmRhdGFcclxuXHRcdFx0XHRcdFx0aWYgKHJldC5jb2RlPT0nMDAwMDAnKSB7XHJcblx0XHRcdFx0XHRcdFx0c3RhdGUudGhpc0RpY3ROYW1lID0gdW5pdmVyaWZ5SW5mby5kaWNfbmFtZVxyXG5cdFx0XHRcdFx0XHRcdGNvbW1pdChcImRpY1ZhbHVlSW5mb1wiLHJldCk7XHJcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShyZXQpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHJlamVjdCh7XCJlcnJNc2dcIjpyZXQubXNnfSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRmYWlsOiAoZXJyKSA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGVycik7XHJcblx0XHRcdFx0XHRcdHJlamVjdChlcnIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0pXHJcblx0XHR9LFxyXG5cdFx0XHJcblx0XHREYXRhT2JqUnVuQ3VzdG9tRXZlbnRJbmZvOiBmdW5jdGlvbih7XHJcblx0XHRcdGNvbW1pdCxcclxuXHRcdFx0c3RhdGVcclxuXHRcdH0sIHVuaXZlcmlmeUluZm8pIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdFx0XHQgLy8gY29uc29sZS5sb2coc3RhdGUudXJsKTtcclxuXHRcdFx0XHR1bmkucmVxdWVzdCh7XHJcblx0XHRcdFx0XHR1cmw6IHN0YXRlLnVybCArIFwiUERBL1BEQURhdGFPYmpSdW5DdXN0b21FdmVudFwiLFxyXG5cdFx0XHRcdFx0ZGF0YTogdW5pdmVyaWZ5SW5mbyxcclxuXHRcdFx0XHRcdG1ldGhvZDogJ1BPU1QnLFxyXG5cdFx0XHRcdFx0ZGF0YVR5cGU6XCJqc29uXCIsXHJcblx0XHRcdFx0XHRoZWFkZXI6IHtcclxuXHRcdFx0XHRcdFx0J2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0c3VjY2VzczogKHJlcykgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhyZXMpO1xyXG5cdFx0XHRcdFx0XHRjb25zdCByZXQgPSByZXMuZGF0YVxyXG5cdFx0XHRcdFx0XHRpZiAocmV0LmNvZGU9PScwMDAwMCcpIHtcclxuXHRcdFx0XHRcdFx0XHRjb21taXQoXCJEYXRhT2JqUnVuQ3VzdG9tRXZlbnRJbmZvXCIscmV0KTtcclxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKHJldCk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOnJldC5tc2d9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGZhaWw6IChlcnIpID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coZXJyKTtcclxuXHRcdFx0XHRcdFx0cmVqZWN0KGVycik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHRcclxuXHRcdHF1ZXJ5U2VscHNuOiBmdW5jdGlvbih7XHJcblx0XHRcdGNvbW1pdCxcclxuXHRcdFx0c3RhdGVcclxuXHRcdH0sIHVuaXZlcmlmeUluZm8pIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdFx0XHQgLy8gY29uc29sZS5sb2coc3RhdGUudXJsKTtcclxuXHRcdFx0XHR1bmkucmVxdWVzdCh7XHJcblx0XHRcdFx0XHR1cmw6IHN0YXRlLnVybCArIFwic2VscHNuL3F1ZXJ5anNvblwiLFxyXG5cdFx0XHRcdFx0ZGF0YTogdW5pdmVyaWZ5SW5mbyxcclxuXHRcdFx0XHRcdG1ldGhvZDogJ1BPU1QnLFxyXG5cdFx0XHRcdFx0ZGF0YVR5cGU6XCJqc29uXCIsXHJcblx0XHRcdFx0XHRoZWFkZXI6IHtcclxuXHRcdFx0XHRcdFx0J2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0c3VjY2VzczogKHJlcykgPT4ge1xyXG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhyZXMpO1xyXG5cdFx0XHRcdFx0XHRjb25zdCByZXQgPSBKU09OLnBhcnNlKHJlcy5kYXRhKTtcclxuXHRcdFx0XHRcdFx0aWYgKHJldC5jb2RlPT0nMDAwMDAnKSB7XHJcblx0XHRcdFx0XHRcdFx0Y29tbWl0KFwicXVlcnlTZWxwc25cIixyZXQpO1xyXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUocmV0KTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRyZWplY3Qoe1wiZXJyTXNnXCI6cmV0Lm1zZ30pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZmFpbDogKGVycikgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhlcnIpO1xyXG5cdFx0XHRcdFx0XHRyZWplY3QoZXJyKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9KVxyXG5cdFx0fSxcclxuXHRcdFxyXG5cdFx0UHJvamVjdEdldEFuYWx5c2lzTGlzdDogZnVuY3Rpb24oe1xyXG5cdFx0XHRjb21taXQsXHJcblx0XHRcdHN0YXRlXHJcblx0XHR9LCB1bml2ZXJpZnlJbmZvKSB7XHJcblx0XHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblx0XHRcdFx0IC8vIGNvbnNvbGUubG9nKHN0YXRlLnVybCk7XHJcblx0XHRcdFx0dW5pLnJlcXVlc3Qoe1xyXG5cdFx0XHRcdFx0dXJsOiBzdGF0ZS51cmwgKyBcImJwbS9Qcm9qZWN0R2V0QW5hbHlzaXNMaXN0XCIsXHJcblx0XHRcdFx0XHRkYXRhOiB1bml2ZXJpZnlJbmZvLFxyXG5cdFx0XHRcdFx0bWV0aG9kOiAnUE9TVCcsXHJcblx0XHRcdFx0XHRkYXRhVHlwZTpcImpzb25cIixcclxuXHRcdFx0XHRcdGhlYWRlcjoge1xyXG5cdFx0XHRcdFx0XHQnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRzdWNjZXNzOiAocmVzKSA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKHJlcyk7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHJldCA9IHJlcy5kYXRhO1xyXG5cdFx0XHRcdFx0XHRpZiAocmV0LmNvZGU9PScwMDAwMCcpIHtcclxuXHRcdFx0XHRcdFx0XHRjb21taXQoXCJQcm9qZWN0R2V0QW5hbHlzaXNMaXN0XCIscmV0KTtcclxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKHJldCk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOnJldC5tc2d9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGZhaWw6IChlcnIpID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coZXJyKTtcclxuXHRcdFx0XHRcdFx0cmVqZWN0KGVycik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHRcclxuXHRcdGFkZGNsYXNzYXR0cjogZnVuY3Rpb24oe1xyXG5cdFx0XHRjb21taXQsXHJcblx0XHRcdHN0YXRlXHJcblx0XHR9LCB1bml2ZXJpZnlJbmZvKSB7XHJcblx0XHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblx0XHRcdFx0IC8vIGNvbnNvbGUubG9nKHN0YXRlLnVybCk7XHJcblx0XHRcdFx0dW5pLnJlcXVlc3Qoe1xyXG5cdFx0XHRcdFx0dXJsOiBzdGF0ZS51cmwgKyBcIndvcmtzcGFjZS9hZGRjbGFzc2F0dHJcIixcclxuXHRcdFx0XHRcdGRhdGE6IHVuaXZlcmlmeUluZm8sXHJcblx0XHRcdFx0XHRtZXRob2Q6ICdQT1NUJyxcclxuXHRcdFx0XHRcdGRhdGFUeXBlOlwianNvblwiLFxyXG5cdFx0XHRcdFx0aGVhZGVyOiB7XHJcblx0XHRcdFx0XHRcdCdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdHN1Y2Nlc3M6IChyZXMpID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2cocmVzKTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgcmV0ID0gcmVzLmRhdGE7XHJcblx0XHRcdFx0XHRcdGlmIChyZXQuY29kZT09JzAwMDAwJykge1xyXG5cdFx0XHRcdFx0XHRcdGNvbW1pdChcImFkZGNsYXNzYXR0clwiLHJldCk7XHJcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShyZXQpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHJlamVjdCh7XCJlcnJNc2dcIjpKU09OLnN0cmluZ2lmeShyZXQpfSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRmYWlsOiAoZXJyKSA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGVycik7XHJcblx0XHRcdFx0XHRcdHJlamVjdChlcnIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0pXHJcblx0XHR9XHJcblx0XHRcclxuXHR9XHJcbn0pXHJcblxyXG5leHBvcnQgZGVmYXVsdCBzdG9yZVxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///100\n");
eval("/* WEBPACK VAR INJECTION */(function(__f__) {\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ 1);\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar _vue = _interopRequireDefault(__webpack_require__(/*! vue */ 96));\nvar _vuex = _interopRequireDefault(__webpack_require__(/*! vuex */ 101));\nvar _app = _interopRequireDefault(__webpack_require__(/*! ./modules/app */ 102));\n_vue.default.use(_vuex.default);\nvar store = new _vuex.default.Store({\n  modules: {\n    app: _app.default\n  },\n  state: {\n    hasLogin: false,\n    loginProvider: \"\",\n    areaFunc: '',\n    thisareaFuncID: '',\n    thisareaFuncSubID: '',\n    thisEditName: '',\n    thisEditSubName: '',\n    thisDictName: '',\n    _classAttrList: {},\n    _classGridStyleInfo: {},\n    _subClassAttrList: {},\n    _subClassGridStyleInfo: {},\n    _dicValueInfo: {},\n    DataObjRunCustomEventInfo: '',\n    querySelpsn: '',\n    ProjectGetAnalysisList: '',\n    addclassattr: '',\n    DelObj: '',\n    username: \"sa\",\n    userpwd: \"0000\",\n    url: \"115.29.185.26:5000\" //192.168.1.184:5200 36.33.24.94:5200\n  },\n\n  mutations: {\n    setUrl: function setUrl(state, url) {\n      state.url = url;\n    },\n    login: function login(state, provider) {\n      state.hasLogin = true;\n      state.loginProvider = provider;\n    },\n    areaFunc: function areaFunc(state, ret) {\n      state.areaFunc = ret;\n    },\n    setareaFuncid: function setareaFuncid(state, id) {\n      state.thisareaFuncID = id;\n    },\n    setareaFunSubcid: function setareaFunSubcid(state, id) {\n      state.thisareaFuncSubID = id;\n    },\n    seteditName: function seteditName(state, editName) {\n      state.thisEditName = editName;\n    },\n    seteditSubName: function seteditSubName(state, editName) {\n      state.thisEditSubName = editName;\n    },\n    setDictName: function setDictName(state, dictName) {\n      state.thisDictName = dictName;\n    },\n    classAttrList: function classAttrList(state, ret) {\n      // state._classAttrList[state.thisareaFuncID] = ret;\n      _vue.default.set(state._classAttrList, state.thisareaFuncID, ret);\n    },\n    classGridStyleInfo: function classGridStyleInfo(state, ret) {\n      // state._classGridStyleInfo[state.thisareaFuncID] = ret;\n      var data = {};\n      if (state._classGridStyleInfo[state.thisareaFuncID]) data = state._classGridStyleInfo[state.thisareaFuncID];\n      _vue.default.set(data, state.thisEditName, ret);\n      _vue.default.set(state._classGridStyleInfo, state.thisareaFuncID, data);\n    },\n    subClassAttrList: function subClassAttrList(state, ret) {\n      _vue.default.set(state._subClassAttrList, state.thisareaFuncSubID, ret);\n    },\n    subClassGridStyleInfo: function subClassGridStyleInfo(state, ret) {\n      var data = {};\n      if (state._subClassGridStyleInfo[state.thisareaFuncSubID]) data = state._subClassGridStyleInfo[state.thisareaFuncSubID];\n      _vue.default.set(data, state.thisEditSubName, ret);\n      _vue.default.set(state._subClassGridStyleInfo, state.thisareaFuncSubID, data);\n    },\n    dicValueInfo: function dicValueInfo(state, ret) {\n      // state._dicValueInfo[state.thisareaFuncID] = ret;\n      _vue.default.set(state._dicValueInfo, state.thisDictName, ret);\n    },\n    DataObjRunCustomEventInfo: function DataObjRunCustomEventInfo(state, ret) {\n      state.DataObjRunCustomEventInfo = ret;\n    },\n    querySelpsn: function querySelpsn(state, ret) {\n      state.querySelpsn = ret;\n    },\n    ProjectGetAnalysisList: function ProjectGetAnalysisList(state, ret) {\n      state.ProjectGetAnalysisList = ret;\n    },\n    addclassattr: function addclassattr(state, ret) {\n      state.addclassattr = ret;\n    },\n    DelObj: function DelObj(state, ret) {\n      state.DelObj = ret;\n    },\n    logout: function logout(state) {\n      state.hasLogin = false;\n    }\n  },\n  getters: {\n    loginid: function loginid(state) {\n      return state.loginProvider.loginid;\n    },\n    getUrl: function getUrl(state) {\n      return state.url;\n    },\n    getclassAttrList: function getclassAttrList(state) {\n      return state._classAttrList[state.thisareaFuncID];\n    },\n    getclassGridStyleInfo: function getclassGridStyleInfo(state) {\n      if (state._classGridStyleInfo[state.thisareaFuncID]) return state._classGridStyleInfo[state.thisareaFuncID][state.thisEditName];else return \"\";\n    },\n    getSubClassAttrList: function getSubClassAttrList(state) {\n      return state._subClassAttrList[state.thisareaFuncSubID];\n    },\n    getSubClassGridStyleInfo: function getSubClassGridStyleInfo(state) {\n      if (state._subClassGridStyleInfo[state.thisareaFuncSubID]) return state._subClassGridStyleInfo[state.thisareaFuncSubID][state.thisEditSubName];else return \"\";\n    },\n    getdicValueInfo: function getdicValueInfo(state) {\n      return state._dicValueInfo[state.thisDictName];\n    }\n  },\n  actions: {\n    //{commit} 解构,\n    //univerifyInfo 自定义参数\n    login: function login(_ref, univerifyInfo) {\n      var commit = _ref.commit,\n        state = _ref.state;\n      return new Promise(function (resolve, reject) {\n        univerifyInfo = univerifyInfo || {};\n        univerifyInfo.server = univerifyInfo.server || '';\n        univerifyInfo.uname = univerifyInfo.uname || '';\n        univerifyInfo.pwd = univerifyInfo.pwd || '';\n        // console.log(univerifyInfo);\n        if (univerifyInfo.server.length == 0) {\n          reject({\n            \"errMsg\": '服务器地址不能为空!'\n          });\n        }\n        if (univerifyInfo.uname.length < 2) {\n          reject({\n            \"errMsg\": '账号最短为 2 个字符!'\n          });\n        }\n        if (univerifyInfo.pwd.length < 1) {\n          reject({\n            \"errMsg\": '密码最短为 1个字符!'\n          });\n        }\n        var openinfo = \"http://\" + univerifyInfo.server + \"/\"; //+\"/OrgWebS\"\n        //设置全局参数:url-服务器地址\n        commit(\"setUrl\", openinfo);\n\n        // if (univerifyInfo.server.split(':').length < 2)\n        // \tcgi = \"http://\" + univerifyInfo.server + \":5010\"; ///OrgWebS\n\n        // setTimeout(_=>{\n        // \tresolve(\"00000000000\")\n        // },3000)\n        // console.log(openinfo + \"PDA/SignIn\");\n        uni.request({\n          url: openinfo + \"PDA/SignIn\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            // console.log(res); \n            var ret = res.data;\n            if (ret.code == '00000') {\n              commit(\"login\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            __f__(\"log\", err, \" at store/index.js:187\");\n            reject(err);\n          }\n        });\n      });\n    },\n    areaFunc: function areaFunc(_ref2, univerifyInfo) {\n      var commit = _ref2.commit,\n        state = _ref2.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n\n        uni.request({\n          url: state.url + \"PDA/PDAArea\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            // console.log(res);\n            var ret = res.data;\n            if (ret.code == '00000') {\n              commit(\"areaFunc\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    classAttrList: function classAttrList(_ref3, univerifyInfo) {\n      var commit = _ref3.commit,\n        state = _ref3.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n\n        uni.request({\n          url: state.url + \"PDA/PDAAttrList\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            __f__(\"log\", res, \" at store/index.js:243\");\n            var ret = res.data;\n            if (ret.code == '00000') {\n              commit(\"classAttrList\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    classGridStyleInfo: function classGridStyleInfo(_ref4, univerifyInfo) {\n      var commit = _ref4.commit,\n        state = _ref4.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n\n        uni.request({\n          url: state.url + \"PDA/PDAGridStyleGetInfo\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            __f__(\"log\", res, \" at store/index.js:276\");\n            var ret = res.data;\n            if (ret.code == '00000') {\n              // var data ={};\n              // Vue.set(data,univerifyInfo.name,ret);\n              commit(\"classGridStyleInfo\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    subClassAttrList: function subClassAttrList(_ref5, univerifyInfo) {\n      var commit = _ref5.commit,\n        state = _ref5.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n\n        uni.request({\n          url: state.url + \"PDA/PDAAttrList\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            __f__(\"log\", res, \" at store/index.js:311\");\n            var ret = res.data;\n            if (ret.code == '00000') {\n              commit(\"subClassAttrList\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    subClassGridStyleInfo: function subClassGridStyleInfo(_ref6, univerifyInfo) {\n      var commit = _ref6.commit,\n        state = _ref6.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n\n        uni.request({\n          url: state.url + \"PDA/PDAGridStyleGetInfo\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            __f__(\"log\", res, \" at store/index.js:344\");\n            var ret = res.data;\n            if (ret.code == '00000') {\n              // var data ={};\n              // Vue.set(data,univerifyInfo.name,ret);\n              commit(\"subClassGridStyleInfo\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    dicValueInfo: function dicValueInfo(_ref7, univerifyInfo) {\n      var commit = _ref7.commit,\n        state = _ref7.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n\n        uni.request({\n          url: state.url + \"PDA/PDADicValueGetInfo\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            // console.log(res);\n            var ret = res.data;\n            if (ret.code == '00000') {\n              state.thisDictName = univerifyInfo.dic_name;\n              commit(\"dicValueInfo\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            __f__(\"log\", err, \" at store/index.js:390\");\n            reject(err);\n          }\n        });\n      });\n    },\n    DataObjRunCustomEventInfo: function DataObjRunCustomEventInfo(_ref8, univerifyInfo) {\n      var commit = _ref8.commit,\n        state = _ref8.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        uni.request({\n          url: state.url + \"PDA/PDADataObjRunCustomEvent\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            __f__(\"log\", res, \" at store/index.js:412\");\n            var ret = res.data;\n            if (ret.code == '00000') {\n              commit(\"DataObjRunCustomEventInfo\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            __f__(\"log\", err, \" at store/index.js:422\");\n            reject(err);\n          }\n        });\n      });\n    },\n    querySelpsn: function querySelpsn(_ref9, univerifyInfo) {\n      var commit = _ref9.commit,\n        state = _ref9.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        uni.request({\n          url: state.url + \"selpsn/queryjson\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            // console.log(res);\n            var ret = JSON.parse(res.data);\n            if (ret.code == '00000') {\n              commit(\"querySelpsn\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            __f__(\"log\", err, \" at store/index.js:454\");\n            reject(err);\n          }\n        });\n      });\n    },\n    ProjectGetAnalysisList: function ProjectGetAnalysisList(_ref10, univerifyInfo) {\n      var commit = _ref10.commit,\n        state = _ref10.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        uni.request({\n          url: state.url + \"bpm/ProjectGetAnalysisList\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            __f__(\"log\", res, \" at store/index.js:476\");\n            var ret = res.data;\n            if (ret.code == '00000') {\n              commit(\"ProjectGetAnalysisList\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            __f__(\"log\", err, \" at store/index.js:486\");\n            reject(err);\n          }\n        });\n      });\n    },\n    addclassattr: function addclassattr(_ref11, univerifyInfo) {\n      var commit = _ref11.commit,\n        state = _ref11.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        uni.request({\n          url: state.url + \"workspace/addclassattr\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            __f__(\"log\", res, \" at store/index.js:508\");\n            var ret = res.data;\n            if (ret.code == '00000') {\n              commit(\"addclassattr\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": JSON.stringify(ret)\n              });\n            }\n          },\n          fail: function fail(err) {\n            __f__(\"log\", err, \" at store/index.js:518\");\n            reject(err);\n          }\n        });\n      });\n    },\n    DelObj: function DelObj(_ref12, univerifyInfo) {\n      var commit = _ref12.commit,\n        state = _ref12.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        uni.request({\n          url: state.url + \"PDA/DelObj\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            __f__(\"log\", res, \" at store/index.js:540\");\n            var ret = res.data;\n            if (ret.code == '00000') {\n              commit(\"DelObj\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": JSON.stringify(ret)\n              });\n            }\n          },\n          fail: function fail(err) {\n            __f__(\"log\", err, \" at store/index.js:550\");\n            reject(err);\n          }\n        });\n      });\n    }\n  }\n});\nvar _default = store;\nexports.default = _default;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 18)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vc3RvcmUvaW5kZXguanMiXSwibmFtZXMiOlsiVnVlIiwidXNlIiwiVnVleCIsInN0b3JlIiwiU3RvcmUiLCJtb2R1bGVzIiwiYXBwIiwic3RhdGUiLCJoYXNMb2dpbiIsImxvZ2luUHJvdmlkZXIiLCJhcmVhRnVuYyIsInRoaXNhcmVhRnVuY0lEIiwidGhpc2FyZWFGdW5jU3ViSUQiLCJ0aGlzRWRpdE5hbWUiLCJ0aGlzRWRpdFN1Yk5hbWUiLCJ0aGlzRGljdE5hbWUiLCJfY2xhc3NBdHRyTGlzdCIsIl9jbGFzc0dyaWRTdHlsZUluZm8iLCJfc3ViQ2xhc3NBdHRyTGlzdCIsIl9zdWJDbGFzc0dyaWRTdHlsZUluZm8iLCJfZGljVmFsdWVJbmZvIiwiRGF0YU9ialJ1bkN1c3RvbUV2ZW50SW5mbyIsInF1ZXJ5U2VscHNuIiwiUHJvamVjdEdldEFuYWx5c2lzTGlzdCIsImFkZGNsYXNzYXR0ciIsIkRlbE9iaiIsInVzZXJuYW1lIiwidXNlcnB3ZCIsInVybCIsIm11dGF0aW9ucyIsInNldFVybCIsImxvZ2luIiwicHJvdmlkZXIiLCJyZXQiLCJzZXRhcmVhRnVuY2lkIiwiaWQiLCJzZXRhcmVhRnVuU3ViY2lkIiwic2V0ZWRpdE5hbWUiLCJlZGl0TmFtZSIsInNldGVkaXRTdWJOYW1lIiwic2V0RGljdE5hbWUiLCJkaWN0TmFtZSIsImNsYXNzQXR0ckxpc3QiLCJzZXQiLCJjbGFzc0dyaWRTdHlsZUluZm8iLCJkYXRhIiwic3ViQ2xhc3NBdHRyTGlzdCIsInN1YkNsYXNzR3JpZFN0eWxlSW5mbyIsImRpY1ZhbHVlSW5mbyIsImxvZ291dCIsImdldHRlcnMiLCJsb2dpbmlkIiwiZ2V0VXJsIiwiZ2V0Y2xhc3NBdHRyTGlzdCIsImdldGNsYXNzR3JpZFN0eWxlSW5mbyIsImdldFN1YkNsYXNzQXR0ckxpc3QiLCJnZXRTdWJDbGFzc0dyaWRTdHlsZUluZm8iLCJnZXRkaWNWYWx1ZUluZm8iLCJhY3Rpb25zIiwidW5pdmVyaWZ5SW5mbyIsImNvbW1pdCIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0Iiwic2VydmVyIiwidW5hbWUiLCJwd2QiLCJsZW5ndGgiLCJvcGVuaW5mbyIsInVuaSIsInJlcXVlc3QiLCJtZXRob2QiLCJkYXRhVHlwZSIsImhlYWRlciIsInN1Y2Nlc3MiLCJyZXMiLCJjb2RlIiwibXNnIiwiZmFpbCIsImVyciIsImRpY19uYW1lIiwiSlNPTiIsInBhcnNlIiwic3RyaW5naWZ5Il0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7QUFDQTtBQUdBO0FBRkFBLFlBQUcsQ0FBQ0MsR0FBRyxDQUFDQyxhQUFJLENBQUM7QUFHYixJQUFNQyxLQUFLLEdBQUcsSUFBSUQsYUFBSSxDQUFDRSxLQUFLLENBQUM7RUFDNUJDLE9BQU8sRUFBQztJQUNQQyxHQUFHLEVBQUhBO0VBQ0QsQ0FBQztFQUNEQyxLQUFLLEVBQUU7SUFDTkMsUUFBUSxFQUFFLEtBQUs7SUFDZkMsYUFBYSxFQUFFLEVBQUU7SUFDakJDLFFBQVEsRUFBQyxFQUFFO0lBQ1hDLGNBQWMsRUFBQyxFQUFFO0lBQ2pCQyxpQkFBaUIsRUFBQyxFQUFFO0lBQ3BCQyxZQUFZLEVBQUMsRUFBRTtJQUNmQyxlQUFlLEVBQUMsRUFBRTtJQUNsQkMsWUFBWSxFQUFDLEVBQUU7SUFDZkMsY0FBYyxFQUFDLENBQUMsQ0FBQztJQUNqQkMsbUJBQW1CLEVBQUMsQ0FBQyxDQUFDO0lBQ3RCQyxpQkFBaUIsRUFBQyxDQUFDLENBQUM7SUFDcEJDLHNCQUFzQixFQUFDLENBQUMsQ0FBQztJQUN6QkMsYUFBYSxFQUFDLENBQUMsQ0FBQztJQUNoQkMseUJBQXlCLEVBQUMsRUFBRTtJQUM1QkMsV0FBVyxFQUFDLEVBQUU7SUFDZEMsc0JBQXNCLEVBQUMsRUFBRTtJQUN6QkMsWUFBWSxFQUFDLEVBQUU7SUFDZkMsTUFBTSxFQUFDLEVBQUU7SUFDVEMsUUFBUSxFQUFDLElBQUk7SUFDYkMsT0FBTyxFQUFDLE1BQU07SUFDZEMsR0FBRyxFQUFDLG9CQUFvQixDQUFDO0VBQzFCLENBQUM7O0VBQ0RDLFNB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QUU7WUFDUCxjQUFjLEVBQUU7VUFDakIsQ0FBQztVQUNEQyxPQUFPLEVBQUUsaUJBQUNDLEdBQUcsRUFBSztZQUNqQixhQUFZQSxHQUFHO1lBQ2YsSUFBTTFDLEdBQUcsR0FBRzBDLEdBQUcsQ0FBQzlCLElBQUk7WUFDcEIsSUFBSVosR0FBRyxDQUFDMkMsSUFBSSxJQUFFLE9BQU8sRUFBRTtjQUN0QmhCLE1BQU0sQ0FBQyxRQUFRLEVBQUMzQixHQUFHLENBQUM7Y0FDcEI2QixPQUFPLENBQUM3QixHQUFHLENBQUM7WUFDYixDQUFDLE1BQU07Y0FDTjhCLE1BQU0sQ0FBQztnQkFBQyxRQUFRLEVBQUNrQixJQUFJLENBQUNFLFNBQVMsQ0FBQ2xELEdBQUc7Y0FBQyxDQUFDLENBQUM7WUFDdkM7VUFDRCxDQUFDO1VBQ0Q2QyxJQUFJLEVBQUUsY0FBQ0MsR0FBRyxFQUFLO1lBQ2QsYUFBWUEsR0FBRztZQUNmaEIsTUFBTSxDQUFDZ0IsR0FBRyxDQUFDO1VBQ1o7UUFDRCxDQUFDLENBQUM7TUFDSCxDQUFDLENBQUM7SUFDSDtFQUVEO0FBQ0QsQ0FBQyxDQUFDO0FBQUEsZUFFYTVFLEtBQUs7QUFBQSwyQiIsImZpbGUiOiIxMDAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVnVlIGZyb20gJ3Z1ZSdcclxuaW1wb3J0IFZ1ZXggZnJvbSAndnVleCdcclxuVnVlLnVzZShWdWV4KVxyXG5cclxuaW1wb3J0IGFwcCBmcm9tICcuL21vZHVsZXMvYXBwJ1xyXG5jb25zdCBzdG9yZSA9IG5ldyBWdWV4LlN0b3JlKHtcclxuXHRtb2R1bGVzOntcclxuXHRcdGFwcCxcclxuXHR9LFxyXG5cdHN0YXRlOiB7XHJcblx0XHRoYXNMb2dpbjogZmFsc2UsXHJcblx0XHRsb2dpblByb3ZpZGVyOiBcIlwiLFxyXG5cdFx0YXJlYUZ1bmM6JycsXHJcblx0XHR0aGlzYXJlYUZ1bmNJRDonJyxcclxuXHRcdHRoaXNhcmVhRnVuY1N1YklEOicnLFxyXG5cdFx0dGhpc0VkaXROYW1lOicnLFxyXG5cdFx0dGhpc0VkaXRTdWJOYW1lOicnLFxyXG5cdFx0dGhpc0RpY3ROYW1lOicnLFxyXG5cdFx0X2NsYXNzQXR0ckxpc3Q6e30sXHJcblx0XHRfY2xhc3NHcmlkU3R5bGVJbmZvOnt9LFxyXG5cdFx0X3N1YkNsYXNzQXR0ckxpc3Q6e30sXHJcblx0XHRfc3ViQ2xhc3NHcmlkU3R5bGVJbmZvOnt9LFxyXG5cdFx0X2RpY1ZhbHVlSW5mbzp7fSxcclxuXHRcdERhdGFPYmpSdW5DdXN0b21FdmVudEluZm86JycsXHJcblx0XHRxdWVyeVNlbHBzbjonJyxcclxuXHRcdFByb2plY3RHZXRBbmFseXNpc0xpc3Q6JycsXHJcblx0XHRhZGRjbGFzc2F0dHI6JycsXHJcblx0XHREZWxPYmo6JycsXHJcblx0XHR1c2VybmFtZTpcInNhXCIsXHJcblx0XHR1c2VycHdkOlwiMDAwMFwiLFxyXG5cdFx0dXJsOlwiMTE1LjI5LjE4NS4yNjo1MDAwXCIgLy8xOTIuMTY4LjEuMTg0OjUyMDAgMzYuMzMuMjQuOTQ6NTIwMFxyXG5cdH0sXHJcblx0bXV0YXRpb25zOiB7XHJcblx0XHRzZXRVcmwoc3RhdGUsIHVybCkge1xyXG5cdFx0XHRzdGF0ZS51cmwgPSB1cmw7XHJcblx0XHR9LFxyXG5cdFx0bG9naW4oc3RhdGUsIHByb3ZpZGVyKSB7XHJcblx0XHRcdHN0YXRlLmhhc0xvZ2luID0gdHJ1ZTtcclxuXHRcdFx0c3RhdGUubG9naW5Qcm92aWRlciA9IHByb3ZpZGVyO1xyXG5cdFx0fSxcclxuXHRcdGFyZWFGdW5jKHN0YXRlLCByZXQpIHtcclxuXHRcdFx0c3RhdGUuYXJlYUZ1bmMgPSByZXQ7XHJcblx0XHR9LFxyXG5cdFx0c2V0YXJlYUZ1bmNpZChzdGF0ZSxpZCl7XHJcblx0XHRcdHN0YXRlLnRoaXNhcmVhRnVuY0lEPWlkO1xyXG5cdFx0fSxcclxuXHRcdHNldGFyZWFGdW5TdWJjaWQoc3RhdGUsaWQpe1xyXG5cdFx0XHRzdGF0ZS50aGlzYXJlYUZ1bmNTdWJJRD1pZDtcclxuXHRcdH0sXHJcblx0XHRzZXRlZGl0TmFtZShzdGF0ZSxlZGl0TmFtZSl7XHJcblx0XHRcdHN0YXRlLnRoaXNFZGl0TmFtZT1lZGl0TmFtZTtcclxuXHRcdH0sXHJcblx0XHRzZXRlZGl0U3ViTmFtZShzdGF0ZSxlZGl0TmFtZSl7XHJcblx0XHRcdHN0YXRlLnRoaXNFZGl0U3ViTmFtZT1lZGl0TmFtZTtcclxuXHRcdH0sXHJcblx0XHRzZXREaWN0TmFtZShzdGF0ZSxkaWN0TmFtZSl7XHJcblx0XHRcdHN0YXRlLnRoaXNEaWN0TmFtZT1kaWN0TmFtZTtcclxuXHRcdH0sXHJcblx0XHRjbGFzc0F0dHJMaXN0KHN0YXRlLCByZXQpIHtcclxuXHRcdFx0Ly8gc3RhdGUuX2NsYXNzQXR0ckxpc3Rbc3RhdGUudGhpc2FyZWFGdW5jSURdID0gcmV0O1xyXG5cdFx0XHRWdWUuc2V0KHN0YXRlLl9jbGFzc0F0dHJMaXN0LHN0YXRlLnRoaXNhcmVhRnVuY0lELHJldCk7XHJcblx0XHR9LFxyXG5cdFx0Y2xhc3NHcmlkU3R5bGVJbmZvKHN0YXRlLCByZXQpIHtcclxuXHRcdFx0Ly8gc3RhdGUuX2NsYXNzR3JpZFN0eWxlSW5mb1tzdGF0ZS50aGlzYXJlYUZ1bmNJRF0gPSByZXQ7XHJcblx0XHRcdHZhciBkYXRhID0ge307XHJcblx0XHRcdGlmKHN0YXRlLl9jbGFzc0dyaWRTdHlsZUluZm9bc3RhdGUudGhpc2FyZWFGdW5jSURdKVxyXG5cdFx0XHRcdGRhdGEgPSBzdGF0ZS5fY2xhc3NHcmlkU3R5bGVJbmZvW3N0YXRlLnRoaXNhcmVhRnVuY0lEXTtcclxuXHRcdFx0VnVlLnNldChkYXRhLHN0YXRlLnRoaXNFZGl0TmFtZSxyZXQpO1xyXG5cdFx0XHRWdWUuc2V0KHN0YXRlLl9jbGFzc0dyaWRTdHlsZUluZm8sc3RhdGUudGhpc2FyZWFGdW5jSUQsZGF0YSk7XHJcblx0XHR9LFxyXG5cdFx0c3ViQ2xhc3NBdHRyTGlzdChzdGF0ZSwgcmV0KSB7XHJcblx0XHRcdFZ1ZS5zZXQoc3RhdGUuX3N1YkNsYXNzQXR0ckxpc3Qsc3RhdGUudGhpc2FyZWFGdW5jU3ViSUQscmV0KTtcclxuXHRcdH0sXHJcblx0XHRzdWJDbGFzc0dyaWRTdHlsZUluZm8oc3RhdGUsIHJldCkge1xyXG5cdFx0XHR2YXIgZGF0YSA9IHt9O1xyXG5cdFx0XHRpZihzdGF0ZS5fc3ViQ2xhc3NHcmlkU3R5bGVJbmZvW3N0YXRlLnRoaXNhcmVhRnVuY1N1YklEXSlcclxuXHRcdFx0XHRkYXRhID0gc3RhdGUuX3N1YkNsYXNzR3JpZFN0eWxlSW5mb1tzdGF0ZS50aGlzYXJlYUZ1bmNTdWJJRF07XHJcblx0XHRcdFZ1ZS5zZXQoZGF0YSxzdGF0ZS50aGlzRWRpdFN1Yk5hbWUscmV0KTtcclxuXHRcdFx0VnVlLnNldChzdGF0ZS5fc3ViQ2xhc3NHcmlkU3R5bGVJbmZvLHN0YXRlLnRoaXNhcmVhRnVuY1N1YklELGRhdGEpO1xyXG5cdFx0fSxcclxuXHRcdGRpY1ZhbHVlSW5mbyhzdGF0ZSwgcmV0KSB7XHJcblx0XHRcdC8vIHN0YXRlLl9kaWNWYWx1ZUluZm9bc3RhdGUudGhpc2FyZWFGdW5jSURdID0gcmV0O1xyXG5cdFx0XHRWdWUuc2V0KHN0YXRlLl9kaWNWYWx1ZUluZm8sc3RhdGUudGhpc0RpY3ROYW1lLHJldCk7XHJcblx0XHR9LFxyXG5cdFx0RGF0YU9ialJ1bkN1c3RvbUV2ZW50SW5mbyhzdGF0ZSwgcmV0KSB7XHJcblx0XHRcdHN0YXRlLkRhdGFPYmpSdW5DdXN0b21FdmVudEluZm8gPSByZXQ7XHJcblx0XHR9LFxyXG5cdFx0cXVlcnlTZWxwc24oc3RhdGUsIHJldCkge1xyXG5cdFx0XHRzdGF0ZS5xdWVyeVNlbHBzbiA9IHJldDtcclxuXHRcdH0sXHJcblx0XHRQcm9qZWN0R2V0QW5hbHlzaXNMaXN0KHN0YXRlLCByZXQpIHtcclxuXHRcdFx0c3RhdGUuUHJvamVjdEdldEFuYWx5c2lzTGlzdCA9IHJldDtcclxuXHRcdH0sXHJcblx0XHRhZGRjbGFzc2F0dHIoc3RhdGUsIHJldCkge1xyXG5cdFx0XHRzdGF0ZS5hZGRjbGFzc2F0dHIgPSByZXQ7XHJcblx0XHR9LFxyXG5cdFx0RGVsT2JqKHN0YXRlLCByZXQpIHtcclxuXHRcdFx0c3RhdGUuRGVsT2JqID0gcmV0O1xyXG5cdFx0fSxcclxuXHRcdGxvZ291dChzdGF0ZSkge1xyXG5cdFx0XHRzdGF0ZS5oYXNMb2dpbiA9IGZhbHNlXHJcblx0XHR9LFxyXG5cdH0sXHJcblx0Z2V0dGVyczoge1xyXG5cdFx0bG9naW5pZChzdGF0ZSkge1xyXG5cdFx0XHRyZXR1cm4gc3RhdGUubG9naW5Qcm92aWRlci5sb2dpbmlkXHJcblx0XHR9LFxyXG5cdFx0Z2V0VXJsKHN0YXRlKSB7XHJcblx0XHRcdHJldHVybiBzdGF0ZS51cmxcclxuXHRcdH0sXHJcblx0XHRnZXRjbGFzc0F0dHJMaXN0KHN0YXRlKXtcclxuXHRcdFx0cmV0dXJuIHN0YXRlLl9jbGFzc0F0dHJMaXN0W3N0YXRlLnRoaXNhcmVhRnVuY0lEXTtcclxuXHRcdH0sXHJcblx0XHRnZXRjbGFzc0dyaWRTdHlsZUluZm8oc3RhdGUpe1xyXG5cdFx0XHRpZihzdGF0ZS5fY2xhc3NHcmlkU3R5bGVJbmZvW3N0YXRlLnRoaXNhcmVhRnVuY0lEXSlcclxuXHRcdFx0XHRyZXR1cm4gc3RhdGUuX2NsYXNzR3JpZFN0eWxlSW5mb1tzdGF0ZS50aGlzYXJlYUZ1bmNJRF1bc3RhdGUudGhpc0VkaXROYW1lXTtcclxuXHRcdFx0ZWxzZSBcclxuXHRcdFx0XHRyZXR1cm4gXCJcIjtcclxuXHRcdH0sXHJcblx0XHRnZXRTdWJDbGFzc0F0dHJMaXN0KHN0YXRlKXtcclxuXHRcdFx0cmV0dXJuIHN0YXRlLl9zdWJDbGFzc0F0dHJMaXN0W3N0YXRlLnRoaXNhcmVhRnVuY1N1YklEXTtcclxuXHRcdH0sXHJcblx0XHRnZXRTdWJDbGFzc0dyaWRTdHlsZUluZm8oc3RhdGUpe1xyXG5cdFx0XHRpZihzdGF0ZS5fc3ViQ2xhc3NHcmlkU3R5bGVJbmZvW3N0YXRlLnRoaXNhcmVhRnVuY1N1YklEXSlcclxuXHRcdFx0XHRyZXR1cm4gc3RhdGUuX3N1YkNsYXNzR3JpZFN0eWxlSW5mb1tzdGF0ZS50aGlzYXJlYUZ1bmNTdWJJRF1bc3RhdGUudGhpc0VkaXRTdWJOYW1lXTtcclxuXHRcdFx0ZWxzZSBcclxuXHRcdFx0XHRyZXR1cm4gXCJcIjtcclxuXHRcdH0sXHJcblx0XHRnZXRkaWNWYWx1ZUluZm8oc3RhdGUpe1xyXG5cdFx0XHRyZXR1cm4gc3RhdGUuX2RpY1ZhbHVlSW5mb1tzdGF0ZS50aGlzRGljdE5hbWVdO1xyXG5cdFx0fVxyXG5cdFx0XHJcblx0XHRcclxuXHR9LFxyXG5cdGFjdGlvbnM6IHtcclxuXHRcdC8ve2NvbW1pdH0g6Kej5p6E77yMXHJcblx0XHQvL3VuaXZlcmlmeUluZm8g6Ieq5a6a5LmJ5Y+C5pWwXHJcblx0XHRsb2dpbjogZnVuY3Rpb24oe1xyXG5cdFx0XHRjb21taXQsXHJcblx0XHRcdHN0YXRlXHJcblx0XHR9LCB1bml2ZXJpZnlJbmZvKSB7XHJcblx0XHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblx0XHRcdFx0dW5pdmVyaWZ5SW5mbyA9IHVuaXZlcmlmeUluZm8gfHwge307XHJcblx0XHRcdFx0dW5pdmVyaWZ5SW5mby5zZXJ2ZXIgPSB1bml2ZXJpZnlJbmZvLnNlcnZlciB8fCAnJztcclxuXHRcdFx0XHR1bml2ZXJpZnlJbmZvLnVuYW1lID0gdW5pdmVyaWZ5SW5mby51bmFtZSB8fCAnJztcclxuXHRcdFx0XHR1bml2ZXJpZnlJbmZvLnB3ZCA9IHVuaXZlcmlmeUluZm8ucHdkIHx8ICcnO1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKHVuaXZlcmlmeUluZm8pO1xyXG5cdFx0XHRcdGlmICh1bml2ZXJpZnlJbmZvLnNlcnZlci5sZW5ndGggPT0gMCkge1xyXG5cdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOifmnI3liqHlmajlnLDlnYDkuI3og73kuLrnqbohJ30pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAodW5pdmVyaWZ5SW5mby51bmFtZS5sZW5ndGggPCAyKSB7XHJcblx0XHRcdFx0XHRyZWplY3Qoe1wiZXJyTXNnXCI6J+i0puWPt+acgOefreS4uiAyIOS4quWtl+espiEnfSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmICh1bml2ZXJpZnlJbmZvLnB3ZC5sZW5ndGggPCAxKSB7XHJcblx0XHRcdFx0XHRyZWplY3Qoe1wiZXJyTXNnXCI6J+WvhueggeacgOefreS4uiAx5Liq5a2X56ymISd9KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dmFyIG9wZW5pbmZvID0gXCJodHRwOi8vXCIgKyB1bml2ZXJpZnlJbmZvLnNlcnZlciArIFwiL1wiOyAvLytcIi9PcmdXZWJTXCJcclxuXHRcdFx0XHQvL+iuvue9ruWFqOWxgOWPguaVsO+8mnVybC3mnI3liqHlmajlnLDlnYBcclxuXHRcdFx0XHRjb21taXQoXCJzZXRVcmxcIixvcGVuaW5mbyk7XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0Ly8gaWYgKHVuaXZlcmlmeUluZm8uc2VydmVyLnNwbGl0KCc6JykubGVuZ3RoIDwgMilcclxuXHRcdFx0XHQvLyBcdGNnaSA9IFwiaHR0cDovL1wiICsgdW5pdmVyaWZ5SW5mby5zZXJ2ZXIgKyBcIjo1MDEwXCI7IC8vL09yZ1dlYlNcclxuXHRcdFx0XHRcclxuXHRcdFx0XHQvLyBzZXRUaW1lb3V0KF89PntcclxuXHRcdFx0XHQvLyBcdHJlc29sdmUoXCIwMDAwMDAwMDAwMFwiKVxyXG5cdFx0XHRcdC8vIH0sMzAwMClcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhvcGVuaW5mbyArIFwiUERBL1NpZ25JblwiKTtcclxuXHRcdFx0XHR1bmkucmVxdWVzdCh7XHJcblx0XHRcdFx0XHR1cmw6IG9wZW5pbmZvICsgXCJQREEvU2lnbkluXCIsXHJcblx0XHRcdFx0XHRkYXRhOiB1bml2ZXJpZnlJbmZvLFxyXG5cdFx0XHRcdFx0bWV0aG9kOiAnUE9TVCcsXHJcblx0XHRcdFx0XHRkYXRhVHlwZTpcImpzb25cIixcclxuXHRcdFx0XHRcdGhlYWRlcjoge1xyXG5cdFx0XHRcdFx0ICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdHN1Y2Nlc3M6IChyZXMpID0+IHtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2cocmVzKTsgXHJcblx0XHRcdFx0XHRcdGNvbnN0IHJldCA9IHJlcy5kYXRhXHJcblx0XHRcdFx0XHRcdGlmIChyZXQuY29kZT09JzAwMDAwJykge1xyXG5cdFx0XHRcdFx0XHRcdGNvbW1pdChcImxvZ2luXCIscmV0KTtcclxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKHJldCk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOnJldC5tc2d9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGZhaWw6IChlcnIpID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coZXJyKTtcclxuXHRcdFx0XHRcdFx0cmVqZWN0KGVycik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHRcclxuXHRcdGFyZWFGdW5jOiBmdW5jdGlvbih7XHJcblx0XHRcdGNvbW1pdCxcclxuXHRcdFx0c3RhdGVcclxuXHRcdH0sIHVuaXZlcmlmeUluZm8pIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdFx0XHQgLy8gY29uc29sZS5sb2coc3RhdGUudXJsKTtcclxuXHRcdFx0XHQgXHJcblx0XHRcdFx0dW5pLnJlcXVlc3Qoe1xyXG5cdFx0XHRcdFx0dXJsOiBzdGF0ZS51cmwgKyBcIlBEQS9QREFBcmVhXCIsXHJcblx0XHRcdFx0XHRkYXRhOiB1bml2ZXJpZnlJbmZvLFxyXG5cdFx0XHRcdFx0bWV0aG9kOiAnUE9TVCcsXHJcblx0XHRcdFx0XHRkYXRhVHlwZTpcImpzb25cIixcclxuXHRcdFx0XHRcdGhlYWRlcjoge1xyXG5cdFx0XHRcdFx0XHQnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRzdWNjZXNzOiAocmVzKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHJlcyk7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHJldCA9IHJlcy5kYXRhXHJcblx0XHRcdFx0XHRcdGlmIChyZXQuY29kZT09JzAwMDAwJykge1xyXG5cdFx0XHRcdFx0XHRcdGNvbW1pdChcImFyZWFGdW5jXCIscmV0KTtcclxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKHJldCk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOnJldC5tc2d9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGZhaWw6IChlcnIpID0+IHtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXJyKTtcclxuXHRcdFx0XHRcdFx0cmVqZWN0KGVycik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHRcclxuXHRcdGNsYXNzQXR0ckxpc3Q6IGZ1bmN0aW9uKHtcclxuXHRcdFx0Y29tbWl0LFxyXG5cdFx0XHRzdGF0ZVxyXG5cdFx0fSwgdW5pdmVyaWZ5SW5mbykge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHRcdCAvLyBjb25zb2xlLmxvZyhzdGF0ZS51cmwpO1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdHVuaS5yZXF1ZXN0KHtcclxuXHRcdFx0XHRcdHVybDogc3RhdGUudXJsICsgXCJQREEvUERBQXR0ckxpc3RcIixcclxuXHRcdFx0XHRcdGRhdGE6IHVuaXZlcmlmeUluZm8sXHJcblx0XHRcdFx0XHRtZXRob2Q6ICdQT1NUJyxcclxuXHRcdFx0XHRcdGRhdGFUeXBlOlwianNvblwiLFxyXG5cdFx0XHRcdFx0aGVhZGVyOiB7XHJcblx0XHRcdFx0XHRcdCdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdHN1Y2Nlc3M6IChyZXMpID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2cocmVzKTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgcmV0ID0gcmVzLmRhdGFcclxuXHRcdFx0XHRcdFx0aWYgKHJldC5jb2RlPT0nMDAwMDAnKSB7XHJcblx0XHRcdFx0XHRcdFx0Y29tbWl0KFwiY2xhc3NBdHRyTGlzdFwiLHJldCk7XHJcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShyZXQpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHJlamVjdCh7XCJlcnJNc2dcIjpyZXQubXNnfSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRmYWlsOiAoZXJyKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGVycik7XHJcblx0XHRcdFx0XHRcdHJlamVjdChlcnIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0pXHJcblx0XHR9LFxyXG5cdFx0XHJcblx0XHRjbGFzc0dyaWRTdHlsZUluZm86IGZ1bmN0aW9uKHtcclxuXHRcdFx0Y29tbWl0LFxyXG5cdFx0XHRzdGF0ZVxyXG5cdFx0fSwgdW5pdmVyaWZ5SW5mbykge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHRcdCAvLyBjb25zb2xlLmxvZyhzdGF0ZS51cmwpO1xyXG5cdFx0XHRcdCBcclxuXHRcdFx0XHR1bmkucmVxdWVzdCh7XHJcblx0XHRcdFx0XHR1cmw6IHN0YXRlLnVybCArIFwiUERBL1BEQUdyaWRTdHlsZUdldEluZm9cIixcclxuXHRcdFx0XHRcdGRhdGE6IHVuaXZlcmlmeUluZm8sXHJcblx0XHRcdFx0XHRtZXRob2Q6ICdQT1NUJyxcclxuXHRcdFx0XHRcdGRhdGFUeXBlOlwianNvblwiLFxyXG5cdFx0XHRcdFx0aGVhZGVyOiB7XHJcblx0XHRcdFx0XHRcdCdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdHN1Y2Nlc3M6IChyZXMpID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2cocmVzKTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgcmV0ID0gcmVzLmRhdGFcclxuXHRcdFx0XHRcdFx0aWYgKHJldC5jb2RlPT0nMDAwMDAnKSB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gdmFyIGRhdGEgPXt9O1xyXG5cdFx0XHRcdFx0XHRcdC8vIFZ1ZS5zZXQoZGF0YSx1bml2ZXJpZnlJbmZvLm5hbWUscmV0KTtcclxuXHRcdFx0XHRcdFx0XHRjb21taXQoXCJjbGFzc0dyaWRTdHlsZUluZm9cIixyZXQpO1xyXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUocmV0KTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRyZWplY3Qoe1wiZXJyTXNnXCI6cmV0Lm1zZ30pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZmFpbDogKGVycikgPT4ge1xyXG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhlcnIpO1xyXG5cdFx0XHRcdFx0XHRyZWplY3QoZXJyKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9KVxyXG5cdFx0fSxcclxuXHRcdFxyXG5cdFx0c3ViQ2xhc3NBdHRyTGlzdDogZnVuY3Rpb24oe1xyXG5cdFx0XHRjb21taXQsXHJcblx0XHRcdHN0YXRlXHJcblx0XHR9LCB1bml2ZXJpZnlJbmZvKSB7XHJcblx0XHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblx0XHRcdFx0IC8vIGNvbnNvbGUubG9nKHN0YXRlLnVybCk7XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0dW5pLnJlcXVlc3Qoe1xyXG5cdFx0XHRcdFx0dXJsOiBzdGF0ZS51cmwgKyBcIlBEQS9QREFBdHRyTGlzdFwiLFxyXG5cdFx0XHRcdFx0ZGF0YTogdW5pdmVyaWZ5SW5mbyxcclxuXHRcdFx0XHRcdG1ldGhvZDogJ1BPU1QnLFxyXG5cdFx0XHRcdFx0ZGF0YVR5cGU6XCJqc29uXCIsXHJcblx0XHRcdFx0XHRoZWFkZXI6IHtcclxuXHRcdFx0XHRcdFx0J2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0c3VjY2VzczogKHJlcykgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhyZXMpO1xyXG5cdFx0XHRcdFx0XHRjb25zdCByZXQgPSByZXMuZGF0YVxyXG5cdFx0XHRcdFx0XHRpZiAocmV0LmNvZGU9PScwMDAwMCcpIHtcclxuXHRcdFx0XHRcdFx0XHRjb21taXQoXCJzdWJDbGFzc0F0dHJMaXN0XCIscmV0KTtcclxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKHJldCk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOnJldC5tc2d9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGZhaWw6IChlcnIpID0+IHtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXJyKTtcclxuXHRcdFx0XHRcdFx0cmVqZWN0KGVycik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHRcclxuXHRcdHN1YkNsYXNzR3JpZFN0eWxlSW5mbzogZnVuY3Rpb24oe1xyXG5cdFx0XHRjb21taXQsXHJcblx0XHRcdHN0YXRlXHJcblx0XHR9LCB1bml2ZXJpZnlJbmZvKSB7XHJcblx0XHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblx0XHRcdFx0IC8vIGNvbnNvbGUubG9nKHN0YXRlLnVybCk7XHJcblx0XHRcdFx0IFxyXG5cdFx0XHRcdHVuaS5yZXF1ZXN0KHtcclxuXHRcdFx0XHRcdHVybDogc3RhdGUudXJsICsgXCJQREEvUERBR3JpZFN0eWxlR2V0SW5mb1wiLFxyXG5cdFx0XHRcdFx0ZGF0YTogdW5pdmVyaWZ5SW5mbyxcclxuXHRcdFx0XHRcdG1ldGhvZDogJ1BPU1QnLFxyXG5cdFx0XHRcdFx0ZGF0YVR5cGU6XCJqc29uXCIsXHJcblx0XHRcdFx0XHRoZWFkZXI6IHtcclxuXHRcdFx0XHRcdFx0J2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0c3VjY2VzczogKHJlcykgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhyZXMpO1xyXG5cdFx0XHRcdFx0XHRjb25zdCByZXQgPSByZXMuZGF0YVxyXG5cdFx0XHRcdFx0XHRpZiAocmV0LmNvZGU9PScwMDAwMCcpIHtcclxuXHRcdFx0XHRcdFx0XHQvLyB2YXIgZGF0YSA9e307XHJcblx0XHRcdFx0XHRcdFx0Ly8gVnVlLnNldChkYXRhLHVuaXZlcmlmeUluZm8ubmFtZSxyZXQpO1xyXG5cdFx0XHRcdFx0XHRcdGNvbW1pdChcInN1YkNsYXNzR3JpZFN0eWxlSW5mb1wiLHJldCk7XHJcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShyZXQpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHJlamVjdCh7XCJlcnJNc2dcIjpyZXQubXNnfSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRmYWlsOiAoZXJyKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGVycik7XHJcblx0XHRcdFx0XHRcdHJlamVjdChlcnIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0pXHJcblx0XHR9LFxyXG5cdFx0XHJcblx0XHRkaWNWYWx1ZUluZm86IGZ1bmN0aW9uKHtcclxuXHRcdFx0Y29tbWl0LFxyXG5cdFx0XHRzdGF0ZVxyXG5cdFx0fSwgdW5pdmVyaWZ5SW5mbykge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHRcdCAvLyBjb25zb2xlLmxvZyhzdGF0ZS51cmwpO1xyXG5cdFx0XHRcdCBcclxuXHRcdFx0XHR1bmkucmVxdWVzdCh7XHJcblx0XHRcdFx0XHR1cmw6IHN0YXRlLnVybCArIFwiUERBL1BEQURpY1ZhbHVlR2V0SW5mb1wiLFxyXG5cdFx0XHRcdFx0ZGF0YTogdW5pdmVyaWZ5SW5mbyxcclxuXHRcdFx0XHRcdG1ldGhvZDogJ1BPU1QnLFxyXG5cdFx0XHRcdFx0ZGF0YVR5cGU6XCJqc29uXCIsXHJcblx0XHRcdFx0XHRoZWFkZXI6IHtcclxuXHRcdFx0XHRcdFx0J2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0c3VjY2VzczogKHJlcykgPT4ge1xyXG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhyZXMpO1xyXG5cdFx0XHRcdFx0XHRjb25zdCByZXQgPSByZXMuZGF0YVxyXG5cdFx0XHRcdFx0XHRpZiAocmV0LmNvZGU9PScwMDAwMCcpIHtcclxuXHRcdFx0XHRcdFx0XHRzdGF0ZS50aGlzRGljdE5hbWUgPSB1bml2ZXJpZnlJbmZvLmRpY19uYW1lXHJcblx0XHRcdFx0XHRcdFx0Y29tbWl0KFwiZGljVmFsdWVJbmZvXCIscmV0KTtcclxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKHJldCk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOnJldC5tc2d9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGZhaWw6IChlcnIpID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coZXJyKTtcclxuXHRcdFx0XHRcdFx0cmVqZWN0KGVycik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHRcclxuXHRcdERhdGFPYmpSdW5DdXN0b21FdmVudEluZm86IGZ1bmN0aW9uKHtcclxuXHRcdFx0Y29tbWl0LFxyXG5cdFx0XHRzdGF0ZVxyXG5cdFx0fSwgdW5pdmVyaWZ5SW5mbykge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHRcdCAvLyBjb25zb2xlLmxvZyhzdGF0ZS51cmwpO1xyXG5cdFx0XHRcdHVuaS5yZXF1ZXN0KHtcclxuXHRcdFx0XHRcdHVybDogc3RhdGUudXJsICsgXCJQREEvUERBRGF0YU9ialJ1bkN1c3RvbUV2ZW50XCIsXHJcblx0XHRcdFx0XHRkYXRhOiB1bml2ZXJpZnlJbmZvLFxyXG5cdFx0XHRcdFx0bWV0aG9kOiAnUE9TVCcsXHJcblx0XHRcdFx0XHRkYXRhVHlwZTpcImpzb25cIixcclxuXHRcdFx0XHRcdGhlYWRlcjoge1xyXG5cdFx0XHRcdFx0XHQnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRzdWNjZXNzOiAocmVzKSA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKHJlcyk7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHJldCA9IHJlcy5kYXRhXHJcblx0XHRcdFx0XHRcdGlmIChyZXQuY29kZT09JzAwMDAwJykge1xyXG5cdFx0XHRcdFx0XHRcdGNvbW1pdChcIkRhdGFPYmpSdW5DdXN0b21FdmVudEluZm9cIixyZXQpO1xyXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUocmV0KTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRyZWplY3Qoe1wiZXJyTXNnXCI6cmV0Lm1zZ30pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZmFpbDogKGVycikgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhlcnIpO1xyXG5cdFx0XHRcdFx0XHRyZWplY3QoZXJyKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9KVxyXG5cdFx0fSxcclxuXHRcdFxyXG5cdFx0cXVlcnlTZWxwc246IGZ1bmN0aW9uKHtcclxuXHRcdFx0Y29tbWl0LFxyXG5cdFx0XHRzdGF0ZVxyXG5cdFx0fSwgdW5pdmVyaWZ5SW5mbykge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHRcdCAvLyBjb25zb2xlLmxvZyhzdGF0ZS51cmwpO1xyXG5cdFx0XHRcdHVuaS5yZXF1ZXN0KHtcclxuXHRcdFx0XHRcdHVybDogc3RhdGUudXJsICsgXCJzZWxwc24vcXVlcnlqc29uXCIsXHJcblx0XHRcdFx0XHRkYXRhOiB1bml2ZXJpZnlJbmZvLFxyXG5cdFx0XHRcdFx0bWV0aG9kOiAnUE9TVCcsXHJcblx0XHRcdFx0XHRkYXRhVHlwZTpcImpzb25cIixcclxuXHRcdFx0XHRcdGhlYWRlcjoge1xyXG5cdFx0XHRcdFx0XHQnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRzdWNjZXNzOiAocmVzKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHJlcyk7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHJldCA9IEpTT04ucGFyc2UocmVzLmRhdGEpO1xyXG5cdFx0XHRcdFx0XHRpZiAocmV0LmNvZGU9PScwMDAwMCcpIHtcclxuXHRcdFx0XHRcdFx0XHRjb21taXQoXCJxdWVyeVNlbHBzblwiLHJldCk7XHJcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShyZXQpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHJlamVjdCh7XCJlcnJNc2dcIjpyZXQubXNnfSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRmYWlsOiAoZXJyKSA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGVycik7XHJcblx0XHRcdFx0XHRcdHJlamVjdChlcnIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0pXHJcblx0XHR9LFxyXG5cdFx0XHJcblx0XHRQcm9qZWN0R2V0QW5hbHlzaXNMaXN0OiBmdW5jdGlvbih7XHJcblx0XHRcdGNvbW1pdCxcclxuXHRcdFx0c3RhdGVcclxuXHRcdH0sIHVuaXZlcmlmeUluZm8pIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdFx0XHQgLy8gY29uc29sZS5sb2coc3RhdGUudXJsKTtcclxuXHRcdFx0XHR1bmkucmVxdWVzdCh7XHJcblx0XHRcdFx0XHR1cmw6IHN0YXRlLnVybCArIFwiYnBtL1Byb2plY3RHZXRBbmFseXNpc0xpc3RcIixcclxuXHRcdFx0XHRcdGRhdGE6IHVuaXZlcmlmeUluZm8sXHJcblx0XHRcdFx0XHRtZXRob2Q6ICdQT1NUJyxcclxuXHRcdFx0XHRcdGRhdGFUeXBlOlwianNvblwiLFxyXG5cdFx0XHRcdFx0aGVhZGVyOiB7XHJcblx0XHRcdFx0XHRcdCdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdHN1Y2Nlc3M6IChyZXMpID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2cocmVzKTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgcmV0ID0gcmVzLmRhdGE7XHJcblx0XHRcdFx0XHRcdGlmIChyZXQuY29kZT09JzAwMDAwJykge1xyXG5cdFx0XHRcdFx0XHRcdGNvbW1pdChcIlByb2plY3RHZXRBbmFseXNpc0xpc3RcIixyZXQpO1xyXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUocmV0KTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRyZWplY3Qoe1wiZXJyTXNnXCI6cmV0Lm1zZ30pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZmFpbDogKGVycikgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhlcnIpO1xyXG5cdFx0XHRcdFx0XHRyZWplY3QoZXJyKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9KVxyXG5cdFx0fSxcclxuXHRcdFxyXG5cdFx0YWRkY2xhc3NhdHRyOiBmdW5jdGlvbih7XHJcblx0XHRcdGNvbW1pdCxcclxuXHRcdFx0c3RhdGVcclxuXHRcdH0sIHVuaXZlcmlmeUluZm8pIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdFx0XHQgLy8gY29uc29sZS5sb2coc3RhdGUudXJsKTtcclxuXHRcdFx0XHR1bmkucmVxdWVzdCh7XHJcblx0XHRcdFx0XHR1cmw6IHN0YXRlLnVybCArIFwid29ya3NwYWNlL2FkZGNsYXNzYXR0clwiLFxyXG5cdFx0XHRcdFx0ZGF0YTogdW5pdmVyaWZ5SW5mbyxcclxuXHRcdFx0XHRcdG1ldGhvZDogJ1BPU1QnLFxyXG5cdFx0XHRcdFx0ZGF0YVR5cGU6XCJqc29uXCIsXHJcblx0XHRcdFx0XHRoZWFkZXI6IHtcclxuXHRcdFx0XHRcdFx0J2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0c3VjY2VzczogKHJlcykgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhyZXMpO1xyXG5cdFx0XHRcdFx0XHRjb25zdCByZXQgPSByZXMuZGF0YTtcclxuXHRcdFx0XHRcdFx0aWYgKHJldC5jb2RlPT0nMDAwMDAnKSB7XHJcblx0XHRcdFx0XHRcdFx0Y29tbWl0KFwiYWRkY2xhc3NhdHRyXCIscmV0KTtcclxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKHJldCk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOkpTT04uc3RyaW5naWZ5KHJldCl9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGZhaWw6IChlcnIpID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coZXJyKTtcclxuXHRcdFx0XHRcdFx0cmVqZWN0KGVycik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHRcclxuXHRcdERlbE9iajogZnVuY3Rpb24oe1xyXG5cdFx0XHRjb21taXQsXHJcblx0XHRcdHN0YXRlXHJcblx0XHR9LCB1bml2ZXJpZnlJbmZvKSB7XHJcblx0XHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblx0XHRcdFx0IC8vIGNvbnNvbGUubG9nKHN0YXRlLnVybCk7XHJcblx0XHRcdFx0dW5pLnJlcXVlc3Qoe1xyXG5cdFx0XHRcdFx0dXJsOiBzdGF0ZS51cmwgKyBcIlBEQS9EZWxPYmpcIixcclxuXHRcdFx0XHRcdGRhdGE6IHVuaXZlcmlmeUluZm8sXHJcblx0XHRcdFx0XHRtZXRob2Q6ICdQT1NUJyxcclxuXHRcdFx0XHRcdGRhdGFUeXBlOlwianNvblwiLFxyXG5cdFx0XHRcdFx0aGVhZGVyOiB7XHJcblx0XHRcdFx0XHRcdCdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdHN1Y2Nlc3M6IChyZXMpID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2cocmVzKTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgcmV0ID0gcmVzLmRhdGE7XHJcblx0XHRcdFx0XHRcdGlmIChyZXQuY29kZT09JzAwMDAwJykge1xyXG5cdFx0XHRcdFx0XHRcdGNvbW1pdChcIkRlbE9ialwiLHJldCk7XHJcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShyZXQpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHJlamVjdCh7XCJlcnJNc2dcIjpKU09OLnN0cmluZ2lmeShyZXQpfSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRmYWlsOiAoZXJyKSA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGVycik7XHJcblx0XHRcdFx0XHRcdHJlamVjdChlcnIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0pXHJcblx0XHR9XHJcblx0XHRcclxuXHR9XHJcbn0pXHJcblxyXG5leHBvcnQgZGVmYXVsdCBzdG9yZVxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///100\n");
/***/ }),
/* 101 */