jt
2023-01-13 c36042dc6ed5ca3c6a118af332d660049a40262e
unpackage/dist/dev/app-plus/app-service.js
@@ -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        if (isVal != result.decodedata) {\n          _this2.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = result.decodedata;\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        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 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 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 (data.action[i].action_type == 'set_global_attr') {\n                $this.$data.global_attr = data.action[i].value || [];\n              } else if (data.action[i].action_type == 'add_subcls_panel') {\n                var result = action.value;\n                var list_1 = JSON.parse(JSON.stringify(_this9.$data.subClassAttrList));\n                $this.$data.subPanelList.push({\n                  scanCodeVal: $this.$data.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 == $this.$data.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            $this.$data.subPanelList.push({\n              scanCodeVal: $this.$data.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 == $this.$data.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:2424\");\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:2430\");\n      __f__(\"log\", dataInfo, \" at pages/modal/ms_classAttr.vue:2431\");\n      this.$store.dispatch('DataObjRunCustomEventInfo', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/ms_classAttr.vue:2433\");\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vcGFnZXMvbW9kYWwvbXNfY2xhc3NBdHRyLnZ1ZSJdLCJuYW1lcyI6WyJjb21wb25lbnRzIiwicGlja2VyQWRkcmVzcyIsImRhdGEiLCJ0aXRsZSIsInBhcmFtIiwiY2xhc3NBdHRyTGlzdCIsImNsYXNzR3JpZFN0eWxlIiwiZWRpdF9pbml0YWxfZXZlbnQiLCJlZGl0X29rX2V2ZW50IiwiZWRpdF9zZWxlY3RfY29tcG9zZV9ldmVudCIsImVkaXRfY29tcG9zZV9jbHNfaWQiLCJnbG9iYWxfYXR0ciIsInJlZmRhdGFzdG9yZSIsInNjYW5Db2RlVmFsIiwic3ViQ2xhc3NBdHRyTGlzdCIsInN1YlBhbmVsTGlzdCIsInN1YkNsYXNzR3JpZFN0eWxlIiwib25Mb2FkIiwib3B0aW9ucyIsInVuaSIsInNldE5hdmlnYXRpb25CYXJUaXRsZSIsInRpdGxlbmFtZSIsIkpTT04iLCJwYXJzZSIsIiRkYXRhIiwiQWRkX0J0bk5hbWUiLCJNYXN0ZXJfQ2xzIiwiVmlld19TdHlsZSIsInNob3dNb2RhbCIsImNvbnRlbnQiLCJzaG93Q2FuY2VsIiwiY29uZmlybVRleHQiLCJOYW1lIiwiZGF0YUluZm8iLCJjbGFzc19pZCIsIklEIiwiJHRoaXMiLCIkc3RvcmUiLCJzdGF0ZSIsInRoaXNhcmVhRnVuY0lEIiwiZ2V0dGVycyIsImdldGNsYXNzQXR0ckxpc3QiLCJjbGFzc0dyaWRTdHlsZUluZm8iLCJkaXNwYXRjaCIsInRoZW4iLCJzdWNjZXNzIiwiY29kZSIsIm1zZyIsImNhdGNoIiwiZXgiLCJlcnJNc2ciLCJzdWJkYXRhSW5mbyIsIlN1Yl9DbHMiLCJ0aGlzYXJlYUZ1bmNTdWJJRCIsImdldFN1YkNsYXNzQXR0ckxpc3QiLCJtZXRob2RzIiwiY2FuY2VsIiwiZSIsIm5hdmlnYXRlQmFjayIsImRlbHRhIiwicGFuZWxfZGVsIiwiaW5kZXgiLCJzcGxpY2UiLCJjbHNpZCIsInN0eWxlTmFtZSIsImNsc1R5cGUiLCJncmlkc3R5bGVJbmZvIiwibmFtZSIsInR5cGUiLCJ0aGlzRWRpdE5hbWUiLCJnZXRjbGFzc0dyaWRTdHlsZUluZm8iLCJjbGFzc19hdHRyX2luaXQiLCJTdHlsZURlZiIsImdldFN1YkNsYXNzR3JpZFN0eWxlSW5mbyIsInN1YkNsYXNzX2F0dHJfaW5pdCIsIm9udGFwIiwiZ2V0QXBwIiwib25TY2FuIiwicmVzdWx0IiwiaXNWYWwiLCJ0YXJnZXQiLCJkYXRhc2V0IiwiQXR0ciIsIlZhbHVlIiwiZGVjb2RlZGF0YSIsImV2ZW50aWQiLCJTY2FuX0NvZGUiLCJJbnB1dF9DaGFuZ2VfRXZlbnQiLCJyZXEiLCJhdHRybGlzdCIsImkiLCJsZW5ndGgiLCJhdHRyIiwiaiIsImFyIiwiVHlwZSIsInB1c2giLCJ2YWwiLCJWYWxJRCIsImluZm8iLCJlZHR5cGUiLCJwcm9qZWN0aWQiLCJyY2xzaWQiLCJyb2JqaWQiLCJ1c2VybG9naW4iLCJvYmppZCIsImlucHV0UGFyYW10ZXIiLCJ2YWx1ZSIsInNjYW5fRGF0YU9ialJ1bkN1c3RvbUV2ZW50Iiwic2Nhbl9vbnRhcCIsImlzZmxhZyIsIm9uYXJyb3ciLCJvcGVuIiwiT3BlbiIsIm9uZGF0ZVRpbWUiLCJvbmNoYW5nZSIsImRpY3RpdGVtIiwiZGF0YV9hdHRyIiwiYWN0aW9uIiwiRGF0YU9ialJ1bkN1c3RvbUV2ZW50Iiwib25jaGFuZ2UyIiwiaXRlbSIsImRlbHZhbHVlIiwiaWluZGV4IiwiZGluZGV4IiwiZCIsInYiLCJpdGVtdmFsdWUiLCJvbmV2ZW50Iiwib25jaGVjayIsImlzY2hlY2tlZCIsImlzY2hlY2siLCJpbnB1dFZhbExpc3RJc0RlbCIsImlucHV0VmFsTGlzdCIsImFkZHJlc3NjaGFuZ2UiLCJqb2luIiwiY2xhc3NBdHRyX2V4dEJ1dHRvbiIsImJlZm9yZV9jbGlja19idXR0b24iLCJidXR0b25fY2FsbGJhY2siLCJEYXRhT2JqUnVuQ3VzdG9tRXZlbnRfUmV0dXJuIiwic2Nhbl9jbGFzc0F0dHJfZXh0QnV0dG9uIiwiQmVmb3JlX1NlbGVjdF9FdmVudCIsIkFmdGVyX1NlbGVjdF9FdmVudCIsImNsYXNzQXR0cl9BZGRQZXIiLCJuYXZpZ2F0ZVRvIiwidXJsIiwic3RyaW5naWZ5IiwiZXZlbnRzIiwiQWRkUGVyIiwiTG9naW4iLCJ0cmltIiwiY2xhc3NBdHRyX0FkZFJlZiIsImNsYXNzQXR0cl9BZGRQcmoiLCJzYXZhIiwiQmVmb3JlX09LX0V2ZW50Iiwic2Nhbl9PS0RhdGFPYmpSdW5DdXN0b21FdmVudCIsIkFmdGVyX09LX0V2ZW50IiwiYWRkIiwic2hvd0xvYWRpbmciLCJzZWxlY3QiLCJ2YWxTdHIiLCJOb3RFbXB0eSIsIm5vdGVtcHR5IiwiaGlkZUxvYWRpbmciLCJEaXNwTmFtZSIsImVudmlyb21lbnQiLCJjbHNfaWQiLCJidXR0b25fbmFtZSIsIm1hc3RlciIsImRhdGFfb2JqX2lkIiwibWFzdGVyY2xzaWQiLCJ1cGZpbGUiLCJwb3N0X2RhdGEiLCJjb21wb3NlIiwiZXh0aW5mbyIsIm5vdF90cmlnZ2VyX3N5c19ldmVudCIsIkFjdGlvbiIsInJldCIsInJlc3VsdF90eXBlIiwic2hvd1RvYXN0IiwiaWNvbiIsImR1cmF0aW9uIiwicmVkaXJlY3RUbyIsInNob3dfc3R5bGUiLCJuZXdhdHRybGlzdCIsImF0dHJncm91cF9uYW1lIiwiYXR0cnMiLCJzIiwiY2xzYXR0ciIsImwiLCJjYSIsImVkaXQiLCJleHRfYnV0dG9uIiwiYnV0dG9uX2ltZyIsImJ1dHRvbl90b29sdGlwIiwiaGlkZGVuIiwidW5kZWZpbmVkIiwiZGljdGl0ZW1saXN0IiwibGFiZWwiLCJDTl9TX05BTUUiLCJDTl9DX0lTX0RFRkFVTFQiLCJub3dEYXRlIiwiRGF0ZSIsImRhdGUiLCJ5ZWFyIiwiZ2V0RnVsbFllYXIiLCJtb250aCIsImdldE1vbnRoIiwiZGF5IiwiZ2V0RGF0ZSIsInJlbENsc0xpc3QiLCJhdHRyX3Jlc2NscyIsIlJlbENscyIsInNwbGl0IiwiaWkiLCJyZXNjbHMiLCJpZCIsIlJlbENsc0xpc3QiLCJCa0NvbG9yIiwiSGFzQWNlIiwiSW1nRm9udFN0eWxlIiwiT3JkZXIiLCJjb250cm9sX3N0eWxlIiwidGl0bGVfcF93ZGl0aCIsIkZvbnQiLCJCa19Db2xvciIsIlRleHRfQ29sb3IiLCJldmVudGxpc3QiLCJldmVudCIsImV2ZW50X2lkIiwic2NyaXBfaWQiLCJjb21wb3NlX2Nsc19pZCIsImluaV9EYXRhT2JqUnVuQ3VzdG9tRXZlbnQiLCJzY2FuX2luaV9EYXRhT2JqUnVuQ3VzdG9tRXZlbnQiLCJFZGl0U3R5bGUiLCJWaWV3U3R5bGUiLCJOb3RUcmlnZ2VyU3lzRXZlbnQiLCJpbnB1dHBhcmFtZXRlciIsImFjdGlvbmxpc3QiLCJhY3Rpb25fdHlwZSIsImEiLCJkaWN0SXRlbUxpc3QiLCJjaG9pY2VfbGlzdCIsImZpbHRlciIsImVkaXRfZGxnIiwiZm9ybV9jb250cm9sIiwidGV4dCIsImdyb3VwX25hbWUiLCJHcm91cE5hbWUiLCJyZWFkb25seSIsIlJlYWRPbmx5IiwicmVwbGFjZSIsImMiLCJPS0RhdGFPYmpSdW5DdXN0b21FdmVudCIsImFjdGlvbnMiLCJkaWFsb2ciLCJzaG93Iiwic3R5bGUiLCJjYWxsYmFja19ldmVudGlkIiwicHJpUmVsIiwic2VsZWN0X3JhbmdlIiwicGFyYW1fIiwibGlzdF8xIiwic3ViQ2xhc3NBdHRyIiwiX3N1YkNsYXNzQXR0ciIsImV2ZW50SUQiLCJvYmplY3RzIiwic3ViX3JlcSIsIm9ial9pZCIsIm9ial9hdHRycyIsImRhdGFKc29uIiwibWFzdGVyX2NscyIsImNsc19uYW1lIiwiaW5wdXRfMzAzNyIsIm9wX3R5cGUiLCJPcGVyYXRpb25UeXBlIiwic3ViX2NscyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBZ2xCQztBQWhsQkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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VSxDQUFDO2NBQ2RyQyxHQUFHLEVBQUMsOEJBQThCLEdBQUMzSCxJQUFJLENBQUM0SCxTQUFTLENBQUM5RyxLQUFLLENBQUNaLEtBQUssQ0FBQ3BCLEtBQUssQ0FBQyxHQUFDLGFBQWEsR0FBQ2dDLEtBQUssQ0FBQ1osS0FBSyxDQUFDckI7WUFDaEcsQ0FBQyxDQUFDO1VBQ0g7UUFDRSxDQUFDLE1BQUk7VUFDSmdCLEdBQUcsQ0FBQ1MsU0FBUyxDQUFDO1lBQUN6QixLQUFLLEVBQUMsS0FBSztZQUFDMEIsT0FBTyxFQUFDZ0IsT0FBTyxDQUFDRSxHQUFHO1lBQUNqQixVQUFVLEVBQUMsS0FBSztZQUFDQyxXQUFXLEVBQUM7VUFBSSxDQUFDLENBQUM7UUFDbkY7TUFDRCxDQUFDLENBQUMsQ0FBQ2lCLEtBQUssQ0FBQyxVQUFBQyxFQUFFLEVBQUU7UUFDWjtRQUNIOUIsR0FBRyxDQUFDZ0osV0FBVyxFQUFFO1FBQ2RoSixHQUFHLENBQUNTLFNBQVMsQ0FBQztVQUFDekIsS0FBSyxFQUFDLE9BQU87VUFBQzBCLE9BQU8sRUFBQ29CLEVBQUUsQ0FBQ0MsTUFBTTtVQUFDcEIsVUFBVSxFQUFDLEtBQUs7VUFBQ0MsV0FBVyxFQUFDO1FBQUksQ0FBQyxDQUFDO01BQ25GLENBQUMsQ0FBQztJQUNIO0VBR0o7QUFDRCxDQUFDO0FBQUEsMkIiLCJmaWxlIjoiODAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblx0aW1wb3J0IHBpY2tlckFkZHJlc3MgZnJvbSAnLi4vLi4vanMvcGlja2VyQWRkcmVzcy9waWNrZXJBZGRyZXNzLnZ1ZSdcblx0ZXhwb3J0IGRlZmF1bHQge1xuXHRcdGNvbXBvbmVudHM6IHtcbiAgICAgICAgICAgIHBpY2tlckFkZHJlc3NcbiAgICAgICAgfSxcblx0XHRkYXRhKCkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dGl0bGU6ICfmlrDlop4nLFxuXHRcdFx0XHRwYXJhbTp7fSxcblx0XHRcdFx0Y2xhc3NBdHRyTGlzdDpbXSxcblx0XHRcdFx0Y2xhc3NHcmlkU3R5bGU6W10sXG5cdFx0XHRcdGVkaXRfaW5pdGFsX2V2ZW50OlwiXCIsICAvL+W8ueeql+WIneWni+WMluS6i+S7tklEXG5cdFx0XHRcdGVkaXRfb2tfZXZlbnQ6XCJcIiwgICAgICAvL+W8ueeql+eCueWHu09LIOinpuWPkeS6i+S7tklEXG5cdFx0XHRcdGVkaXRfc2VsZWN0X2NvbXBvc2VfZXZlbnQ6XCJcIiwgIC8v6YCJ5oup57uE5oiQ5a+56LGh5pe26LCD55SoXG5cdFx0XHRcdGVkaXRfY29tcG9zZV9jbHNfaWQ6XCJcIixcblx0XHRcdFx0Z2xvYmFsX2F0dHI6W10sXG5cdFx0XHRcdHJlZmRhdGFzdG9yZTogW10sXHQgICAvL+W8leeUqOaVsOaNruWtmOWCqOWMui8vIHthdHRyOidHX1BSSl8nICsgYmluZGF0dHIgKyAnX0lEJywgdmFsdWU6aW5mby5pZH1cblx0XHRcdFx0c2NhbkNvZGVWYWw6XCJcIixcblx0XHRcdFx0c3ViQ2xhc3NBdHRyTGlzdDpbXSxcblx0XHRcdFx0c3ViUGFuZWxMaXN0OltdLFxuXHRcdFx0XHRzdWJDbGFzc0dyaWRTdHlsZTpbXSxcblx0XHRcdH1cblx0XHR9LFxuXHRcdG9uTG9hZChvcHRpb25zKSB7XG5cdFx0XHQvLyBjb25zb2xlLmxvZyhvcHRpb25zKTtcblx0XHRcdHVuaS5zZXROYXZpZ2F0aW9uQmFyVGl0bGUoeyB0aXRsZTogb3B0aW9ucy50aXRsZW5hbWV9KTsgLy/orr7nva7pobbpg6jmoIfpopggXG5cdFx0XHR2YXIgcGFyYW0gPSBKU09OLnBhcnNlKG9wdGlvbnMucGFyYW0pO1xuXHRcdFx0dGhpcy4kZGF0YS50aXRsZSA9IHBhcmFtLkFkZF9CdG5OYW1lP3BhcmFtLkFkZF9CdG5OYW1lOm9wdGlvbnMudGl0bGVuYW1lOyAvL+iuvue9ruaMiemSruaWh+Wtl1xuXHRcdFx0Y29uc29sZS5sb2cocGFyYW0pO1xuXHRcdFx0aWYoIXBhcmFtLk1hc3Rlcl9DbHMuVmlld19TdHlsZSl7XG5cdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcIuivpeWKn+iDveeCueacqumFjee9rueVjOmdoueql+WPo++8jOivt+mHjeaWsOmFjee9ru+8gVwiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZighcGFyYW0uTWFzdGVyX0Nscy5WaWV3X1N0eWxlLk5hbWUpe1xuXHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCLor6Xlip/og73ngrnmnKrphY3nva7nqpflj6PmoLflvI/vvIzor7fph43mlrDphY3nva7vvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy4kZGF0YS5wYXJhbSA9IHBhcmFtO1xuXHRcdFx0Ly8gdmFyIGVkaXRfZGxnID0ge1xuXHRcdFx0Ly8gICAgIE1vZGVsOiBwYXJhbS5FZGl0RGxnTW9kZSxcblx0XHRcdC8vICAgICBOYW1lOiBwYXJhbS5NYXN0ZXJfQ2xzLlZpZXdfU3R5bGUuTmFtZVxuXHRcdFx0Ly8gfVxuXHRcdFx0Ly/kuLvmlbDmja7nsbvojrflj5Zcblx0XHRcdHZhciBkYXRhSW5mbyA9IHtcblx0XHRcdFx0Y2xhc3NfaWQ6IHBhcmFtLk1hc3Rlcl9DbHMuSURcblx0XHRcdH07XG5cdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdFx0JHRoaXMuJHN0b3JlLnN0YXRlLnRoaXNhcmVhRnVuY0lEID0gcGFyYW0uTWFzdGVyX0Nscy5JRDtcblx0XHRcdC8vIGNvbnNvbGUubG9nKCR0aGlzLiRzdG9yZS5nZXR0ZXJzLmdldGNsYXNzQXR0ckxpc3QpO1xuXHRcdFx0aWYoJHRoaXMuJHN0b3JlLmdldHRlcnMuZ2V0Y2xhc3NBdHRyTGlzdCl7XG5cdFx0XHQgXHQkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0ID0gJHRoaXMuJHN0b3JlLmdldHRlcnMuZ2V0Y2xhc3NBdHRyTGlzdC5kYXRhO1xuXHRcdFx0XHQkdGhpcy5jbGFzc0dyaWRTdHlsZUluZm8ocGFyYW0uTWFzdGVyX0Nscy5JRCwkdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLlZpZXdfU3R5bGUuTmFtZSwnTWFzdCcpO1xuXHRcdFx0fWVsc2V7XG5cdFx0XHRcdCR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnY2xhc3NBdHRyTGlzdCcsZGF0YUluZm8pLnRoZW4oc3VjY2Vzcz0+e1xuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xuXHRcdFx0XHRcdGlmIChzdWNjZXNzLmNvZGU9PScwMDAwMCcpIHtcblx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3QgPSBzdWNjZXNzLmRhdGE7XG5cdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdCR0aGlzLmNsYXNzR3JpZFN0eWxlSW5mbyhwYXJhbS5NYXN0ZXJfQ2xzLklELCR0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuVmlld19TdHlsZS5OYW1lLCdNYXN0Jyk7XG5cdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzFcIixjb250ZW50OnN1Y2Nlc3MubXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSkuY2F0Y2goZXg9Pntcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhleCk7XG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68xLjFcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRcblx0XHRcdC8v5LuO5pWw5o2u57G76I635Y+WXG5cdFx0XHR2YXIgc3ViZGF0YUluZm8gPSB7XG5cdFx0XHRcdGNsYXNzX2lkOiBwYXJhbS5TdWJfQ2xzLklEXG5cdFx0XHR9O1xuXHRcdFx0JHRoaXMuJHN0b3JlLnN0YXRlLnRoaXNhcmVhRnVuY1N1YklEID0gcGFyYW0uU3ViX0Nscy5JRDtcblx0XHRcdGlmKCR0aGlzLiRzdG9yZS5nZXR0ZXJzLmdldFN1YkNsYXNzQXR0ckxpc3Qpe1xuXHRcdFx0IFx0JHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdCA9ICR0aGlzLiRzdG9yZS5nZXR0ZXJzLmdldFN1YkNsYXNzQXR0ckxpc3QuZGF0YTtcblx0XHRcdFx0XHRcdCR0aGlzLmNsYXNzR3JpZFN0eWxlSW5mbyhwYXJhbS5TdWJfQ2xzLklELCR0aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuVmlld19TdHlsZS5OYW1lLCdTdWInKTtcblx0XHRcdH1lbHNle1xuXHRcdFx0XHQkdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ3N1YkNsYXNzQXR0ckxpc3QnLHN1YmRhdGFJbmZvKS50aGVuKHN1Y2Nlc3M9Pntcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhzdWNjZXNzKTtcblx0XHRcdFx0XHRpZiAoc3VjY2Vzcy5jb2RlPT0nMDAwMDAnKSB7XG5cdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5zdWJDbGFzc0F0dHJMaXN0ID0gc3VjY2Vzcy5kYXRhO1xuXHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHQkdGhpcy5jbGFzc0dyaWRTdHlsZUluZm8ocGFyYW0uU3ViX0Nscy5JRCwkdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLlZpZXdfU3R5bGUuTmFtZSwnU3ViJyk7XG5cdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzFfMVwiLGNvbnRlbnQ6c3VjY2Vzcy5tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KS5jYXRjaChleD0+e1xuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzFfMS4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0bWV0aG9kczoge1xuXHRcdFx0Y2FuY2VsKGUpe1xuXHRcdFx0XHR1bmkubmF2aWdhdGVCYWNrKHtcblx0XHRcdFx0XHRkZWx0YToxIC8v6L+U5Zue5bGC5pWw77yMMuWImeS4iuS4iumhtVxuXHRcdFx0XHR9KTtcblx0XHRcdH0sXG5cdFx0XHRwYW5lbF9kZWwoaW5kZXgpe1xuXHRcdFx0XHRpZiAodGhpcy4kZGF0YS5zdWJQYW5lbExpc3RbaW5kZXhdLnNjYW5Db2RlVmFsID09IHRoaXMuJGRhdGEuc2NhbkNvZGVWYWwpIHtcblx0XHRcdFx0XHR0aGlzLiRkYXRhLnNjYW5Db2RlVmFsPScnO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0LnNwbGljZShpbmRleCwgMSk7XG5cdFx0XHR9LFxuXHRcdFx0YXN5bmMgY2xhc3NHcmlkU3R5bGVJbmZvKGNsc2lkLHN0eWxlTmFtZSxjbHNUeXBlKXtcblx0XHRcdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHRcdFx0dmFyIGdyaWRzdHlsZUluZm8gPSB7XG5cdFx0XHRcdFx0Y2xhc3NfaWQ6IGNsc2lkLFxuXHRcdFx0XHRcdG5hbWU6IHN0eWxlTmFtZSxcblx0XHRcdFx0XHR0eXBlOiAnMidcblx0XHRcdFx0fTtcblx0XHRcdFx0JHRoaXMuJHN0b3JlLnN0YXRlLnRoaXNFZGl0TmFtZSA9IHN0eWxlTmFtZTtcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coJHRoaXMuJHN0b3JlLmdldHRlcnMuZ2V0Y2xhc3NHcmlkU3R5bGVJbmZvKTtcblx0XHRcdFx0Ly/ojrflj5bkuLvmlbDmja7nsbvnlYzpnaLmoLflvI9cblx0XHRcdFx0aWYoY2xzVHlwZT09J01hc3QnKXtcblx0XHRcdFx0XHRpZigkdGhpcy4kc3RvcmUuZ2V0dGVycy5nZXRjbGFzc0dyaWRTdHlsZUluZm8pe1xuXHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUgPSAkdGhpcy4kc3RvcmUuZ2V0dGVycy5nZXRjbGFzc0dyaWRTdHlsZUluZm8uZGF0YTtcblx0XHRcdFx0XHRcdCR0aGlzLmNsYXNzX2F0dHJfaW5pdCgpO1xuXHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0Ly9jb25zb2xlLmxvZyhncmlkc3R5bGVJbmZvKTtcblx0XHRcdFx0XHRcdCR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnY2xhc3NHcmlkU3R5bGVJbmZvJyxncmlkc3R5bGVJbmZvKS50aGVuKHN1Y2Nlc3M9Pntcblx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coc3VjY2Vzcyk7XG5cdFx0XHRcdFx0XHRcdGlmIChzdWNjZXNzLmNvZGU9PScwMDAwMCcpIHtcblx0XHRcdFx0XHRcdFx0XHRzdWNjZXNzLmRhdGEuU3R5bGVEZWYgPSBKU09OLnBhcnNlKHN1Y2Nlc3MuZGF0YS5TdHlsZURlZik7XG5cdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUgPSBzdWNjZXNzLmRhdGE7XG5cdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0JHRoaXMuY2xhc3NfYXR0cl9pbml0KCk7XG5cdFx0XHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMS4yXCIsY29udGVudDpzdWNjZXNzLm1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSkuY2F0Y2goZXg9Pntcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coZXgpO1xuXHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzEuM1wiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYoY2xzVHlwZT09J1N1YicpeyAgLy/ojrflj5bku47mlbDmja7nsbvnlYzpnaLmoLflvI9cblx0XHRcdFx0XHRpZigkdGhpcy4kc3RvcmUuZ2V0dGVycy5nZXRTdWJDbGFzc0dyaWRTdHlsZUluZm8pe1xuXHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGUgPSAkdGhpcy4kc3RvcmUuZ2V0dGVycy5nZXRTdWJDbGFzc0dyaWRTdHlsZUluZm8uZGF0YTtcblx0XHRcdFx0XHRcdCR0aGlzLnN1YkNsYXNzX2F0dHJfaW5pdCgpO1xuXHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0Ly9jb25zb2xlLmxvZyhncmlkc3R5bGVJbmZvKTtcblx0XHRcdFx0XHRcdCR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnc3ViQ2xhc3NHcmlkU3R5bGVJbmZvJyxncmlkc3R5bGVJbmZvKS50aGVuKHN1Y2Nlc3M9Pntcblx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coc3VjY2Vzcyk7XG5cdFx0XHRcdFx0XHRcdGlmIChzdWNjZXNzLmNvZGU9PScwMDAwMCcpIHtcblx0XHRcdFx0XHRcdFx0XHRzdWNjZXNzLmRhdGEuU3R5bGVEZWYgPSBKU09OLnBhcnNlKHN1Y2Nlc3MuZGF0YS5TdHlsZURlZik7XG5cdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGUgPSBzdWNjZXNzLmRhdGE7XG5cdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0JHRoaXMuc3ViQ2xhc3NfYXR0cl9pbml0KCk7XG5cdFx0XHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMS4yXCIsY29udGVudDpzdWNjZXNzLm1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSkuY2F0Y2goZXg9Pntcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coZXgpO1xuXHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzEuM1wiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0b250YXAoZSl7IC8v5omr56CB5Yqf6IO9XG5cdFx0XHRcdC8vY29uc29sZS5sb2coZS50YXJnZXQpXG5cdFx0XHRcdGdldEFwcCgpLm9uU2NhbigocmVzdWx0KT0+e1xuXHRcdFx0XHRcdC8vY29uc29sZS5sb2cocmVzdWx0LmRlY29kZWRhdGEpO1xuXHRcdFx0XHRcdHZhciBpc1ZhbCA9dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlO1xuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdGlmIChpc1ZhbCE9cmVzdWx0LmRlY29kZWRhdGEpIHtcblx0XHRcdFx0XHRcdHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5WYWx1ZT1yZXN1bHQuZGVjb2RlZGF0YTtcblx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0dmFyIGV2ZW50aWQgPSB0aGlzLiRkYXRhLnBhcmFtLlNjYW5fQ29kZS5JbnB1dF9DaGFuZ2VfRXZlbnQuSUQ7XG5cdFx0XHRcdFx0XHRpZiAoZXZlbnRpZCkge1xuXHRcdFx0XHRcdCAgICAgICAgdmFyIHJlcT1bXTtcblx0XHRcdFx0XHQgICAgICAgIHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdDtcblx0XHRcdFx0XHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHQgICAgICAgIFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xuXHRcdFx0XHRcdCAgICAgICAgXHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHQgICAgICAgIFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHRcdCAgICAgICAgXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0XHRpZihhci5WYWx1ZT09J+ivtycpIGFyLlZhbHVlPScnO1xuXHRcdFx0XHRcdCAgICAgICAgXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxuXHRcdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8Jylcblx0XHRcdFx0XHQgICAgICAgIFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsOiBhci5WYWx1ZT8nMSc6JzAnfSk7XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZVxuXHRcdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbHVlID9hci5WYWx1ZSA6Jyd9KTtcblx0XHRcdFx0XHQgICAgICAgIFx0fVxuXHRcdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHRcdCAgICAgICAgdmFyIGluZm8gPSB7XG5cdFx0XHRcdFx0ICAgICAgICAgICAgZXZlbnRpZDogZXZlbnRpZCxcblx0XHRcdFx0XHQgICAgICAgICAgICBlZHR5cGU6IFwiMFwiLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIHByb2plY3RpZDogJycsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgcmNsc2lkOiAnJyxcblx0XHRcdFx0XHQgICAgICAgICAgICByb2JqaWQ6ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIHVzZXJsb2dpbjogJycsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgY2xzaWQ6IHRoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5JRCxcblx0XHRcdFx0XHQgICAgICAgICAgICBvYmppZDogXCJcIixcblx0XHRcdFx0XHQgICAgICAgICAgICBhdHRyOiByZXEsXG5cdFx0XHRcdFx0XHRcdFx0aW5wdXRQYXJhbXRlcjpbeyBhdHRyOiAnbWFzdF9pbnB1dF8zMDM3JywgdmFsdWU6IHJlc3VsdC5kZWNvZGVkYXRhIH1dXG5cdFx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdCAgICAgICAgdGhpcy5zY2FuX0RhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvLCBcIlwiKTtcblx0XHRcdFx0XHQgICAgfVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdH0sXG5cdFx0XHRzY2FuX29udGFwKGUpeyAvL+aJq+eggeWMuuaJq+eggeWKn+iDvVxuXHRcdFx0XHQvL2NvbnNvbGUubG9nKGUudGFyZ2V0KVxuXHRcdFx0XHRnZXRBcHAoKS5vblNjYW4oKHJlc3VsdCk9Pntcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhyZXN1bHQuZGVjb2RlZGF0YSk7XG5cdFx0XHRcdFx0dmFyIGlzZmxhZz10cnVlO1xuXHRcdFx0XHRcdGZvcih2YXIgaSBpbiB0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdCl7XG5cdFx0XHRcdFx0XHRpZih0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtpXS5zY2FuQ29kZVZhbCA9PSByZXN1bHQuZGVjb2RlZGF0YSkgXG5cdFx0XHRcdFx0XHRcdGlzZmxhZz1mYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0aWYgKGlzZmxhZykge1xuXHRcdFx0XHRcdFx0dGhpcy4kZGF0YS5zY2FuQ29kZVZhbD1yZXN1bHQuZGVjb2RlZGF0YTtcblx0XHRcdFx0XHRcdHZhciBldmVudGlkID0gdGhpcy4kZGF0YS5wYXJhbS5TY2FuX0NvZGUuSW5wdXRfQ2hhbmdlX0V2ZW50LklEO1xuXHRcdFx0XHRcdFx0aWYgKGV2ZW50aWQpIHtcblx0XHRcdFx0XHQgICAgICAgIHZhciByZXE9W107XG5cdFx0XHRcdFx0ICAgICAgICB2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3Q7XG5cdFx0XHRcdFx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0ICAgICAgICBcdHZhciBhdHRyID0gYXR0cmxpc3RbaV0uQXR0cjtcblx0XHRcdFx0XHQgICAgICAgIFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0dmFyIGFyID0gYXR0cltqXTtcblx0XHRcdFx0XHQgICAgICAgIFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxuXHRcdFx0XHRcdCAgICAgICAgXHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0XHQgICAgICAgIFx0XHRpZihhci5UeXBlPT0n5byV55So5Lq65ZGYJyB8fCBhci5UeXBlPT0n5byV55So6aG555uuJylcblx0XHRcdFx0XHQgICAgICAgIFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8Jylcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWU/JzEnOicwJ30pO1xuXHRcdFx0XHRcdCAgICAgICAgXHRcdGVsc2Vcblx0XHRcdFx0XHQgICAgICAgIFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlID9hci5WYWx1ZSA6Jyd9KTtcblx0XHRcdFx0XHQgICAgICAgIFx0fVxuXHRcdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHRcdCAgICAgICAgdmFyIGluZm8gPSB7XG5cdFx0XHRcdFx0ICAgICAgICAgICAgZXZlbnRpZDogZXZlbnRpZCxcblx0XHRcdFx0XHQgICAgICAgICAgICBlZHR5cGU6IFwiMFwiLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIHByb2plY3RpZDogJycsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgcmNsc2lkOiAnJyxcblx0XHRcdFx0XHQgICAgICAgICAgICByb2JqaWQ6ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIHVzZXJsb2dpbjogJycsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgY2xzaWQ6IHRoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5JRCxcblx0XHRcdFx0XHQgICAgICAgICAgICBvYmppZDogXCJcIixcblx0XHRcdFx0XHQgICAgICAgICAgICBhdHRyOiByZXEsXG5cdFx0XHRcdFx0XHRcdFx0aW5wdXRQYXJhbXRlcjpbeyBhdHRyOiAnaW5wdXRfMzAzNycsIHZhbHVlOiB0aGlzLiRkYXRhLnNjYW5Db2RlVmFsIH1dXG5cdFx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdCAgICAgICAgdGhpcy5zY2FuX0RhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvLCBcIlwiKTtcblx0XHRcdFx0XHQgICAgfVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdH0sXG5cdFx0XHRvbmFycm93KGluZGV4LG9wZW4pe1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhpbmRleCsnLS0nK29wZW4pO1xuXHRcdFx0XHR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbaW5kZXhdLk9wZW49b3Blbj09dHJ1ZT9mYWxzZTp0cnVlO1xuXHRcdFx0fSxcblx0XHRcdG9uZGF0ZVRpbWUoZSkge1xuXHRcdFx0XHQvL2NvbnNvbGUubG9nKGUudGFyZ2V0KVxuXHRcdFx0XHR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWU9ZS50YXJnZXQudmFsdWU7XG5cdFx0XHR9LFxuXHRcdFx0b25jaGFuZ2UoZSkge1xuXHRcdFx0XHRjb25zb2xlLmxvZyhlLnRhcmdldCk7XG5cdFx0XHRcdHZhciB2YWx1ZT10aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uZGljdGl0ZW1bZS50YXJnZXQudmFsdWVdO1xuXHRcdFx0XHR2YXIgZGF0YV9hdHRyID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dO1xuXHRcdFx0XHRjb25zb2xlLmxvZyhkYXRhX2F0dHIpO1xuXHRcdFx0XHRpZiAodmFsdWUuTmFtZSAhPSBkYXRhX2F0dHIuVmFsdWUpIHtcblx0XHRcdFx0XHR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWU9dmFsdWUuTmFtZTtcblx0XHRcdFx0XHRjb25zb2xlLmxvZyh0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWUpO1xuXHRcdFx0XHRcdHZhciBldmVudGlkID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLmFjdGlvbjtcblx0XHRcdFx0XHRpZiAoZXZlbnRpZCkge1xuXHRcdFx0XHQgICAgICAgIC8vIHNlbGYuZXZlbnRfbm9fc3ViID0gMTtcblx0XHRcdFx0ICAgICAgICB2YXIgcmVxPVtdO1xuXHRcdFx0XHQgICAgICAgIHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdDtcblx0XHRcdFx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdCAgICAgICAgXHR2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLkF0dHI7XG5cdFx0XHRcdCAgICAgICAgXHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0ICAgICAgICBcdFx0dmFyIGFyID0gYXR0cltqXTtcblx0XHRcdFx0ICAgICAgICBcdFx0aWYoYXIuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJylcblx0XHRcdFx0ICAgICAgICBcdFx0XHRpZihhci5WYWx1ZT09J+ivtycpIGFyLlZhbHVlPScnO1xuXHRcdFx0XHQgICAgICAgIFx0XHRpZihhci5UeXBlPT0n5byV55So5Lq65ZGYJyB8fCBhci5UeXBlPT0n5byV55So6aG555uuJylcblx0XHRcdFx0ICAgICAgICBcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsSUQgP2FyLlZhbElEIDonJyB9KTtcblx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8Jylcblx0XHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsOiBhci5WYWx1ZT8nMSc6JzAnfSk7XG5cdFx0XHRcdCAgICAgICAgXHRcdGVsc2Vcblx0XHRcdFx0ICAgICAgICBcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsdWUgP2FyLlZhbHVlIDonJ30pO1xuXHRcdFx0XHQgICAgICAgIFx0fVxuXHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0ICAgICAgICB2YXIgaW5mbyA9IHtcblx0XHRcdFx0ICAgICAgICAgICAgZXZlbnRpZDogZXZlbnRpZCxcblx0XHRcdFx0ICAgICAgICAgICAgZWR0eXBlOiBcIjBcIixcblx0XHRcdFx0ICAgICAgICAgICAgcHJvamVjdGlkOiAnJyxcblx0XHRcdFx0ICAgICAgICAgICAgcmNsc2lkOiAnJyxcblx0XHRcdFx0ICAgICAgICAgICAgcm9iamlkOiAnJyxcblx0XHRcdFx0ICAgICAgICAgICAgdXNlcmxvZ2luOiAnJyxcblx0XHRcdFx0ICAgICAgICAgICAgY2xzaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCxcblx0XHRcdFx0ICAgICAgICAgICAgb2JqaWQ6IFwiXCIsXG5cdFx0XHRcdCAgICAgICAgICAgIGF0dHI6IHJlcSxcblx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdCAgICAgICAgdGhpcy5EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbyk7XG5cdFx0XHRcdCAgICB9XG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFx0XHR9LFxuXHRcdFx0b25jaGFuZ2UyKGl0ZW0sdmFsdWUsZGVsdmFsdWUpIHtcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coaXRlbSk7XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKHZhbHVlKTtcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coZGVsdmFsdWUpO1xuXHRcdFx0XHRpZihpdGVtLmxlbmd0aD09MCl7IC8v5Li656m65pe277yM5riF56m65bGe5oCndmFsdWVcblx0XHRcdFx0XHR2YXIgaW5kZXggLGlpbmRleCxkaW5kZXg9MDtcblx0XHRcdFx0XHRmb3IodmFyIGkgaW4gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0KXtcblx0XHRcdFx0XHRcdGZvcih2YXIgaiBpbiB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbaV0uQXR0cil7XG5cdFx0XHRcdFx0XHRcdGZvcih2YXIgZCBpbiB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbaV0uQXR0cltqXS5kaWN0aXRlbSl7XG5cdFx0XHRcdFx0XHRcdFx0aWYoZGVsdmFsdWVbMF0uTmFtZSA9PSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbaV0uQXR0cltqXS5kaWN0aXRlbVtkXS5OYW1lKXtcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpXS5BdHRyW2pdLlZhbHVlPVwiXCI7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdFx0XG5cdFx0XHRcdGZvcih2YXIgdiBpbiBpdGVtKXtcblx0XHRcdFx0XHR2YXIgaW5kZXggLGlpbmRleCxkaW5kZXg9MDtcblx0XHRcdFx0XHRmb3IodmFyIGkgaW4gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0KXtcblx0XHRcdFx0XHRcdGZvcih2YXIgaiBpbiB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbaV0uQXR0cil7XG5cdFx0XHRcdFx0XHRcdGZvcih2YXIgZCBpbiB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbaV0uQXR0cltqXS5kaWN0aXRlbSl7XG5cdFx0XHRcdFx0XHRcdFx0aWYoaXRlbVt2XS5OYW1lID09IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpXS5BdHRyW2pdLmRpY3RpdGVtW2RdLk5hbWUpe1xuXHRcdFx0XHRcdFx0XHRcdFx0aW5kZXg9aTtpaW5kZXg9ajtkaW5kZXg9ZDtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dmFyIGl0ZW12YWx1ZSA9IGl0ZW1bdl07XG5cdFx0XHRcdFx0dmFyIGRhdGFfYXR0ciA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpbmRleF0uQXR0cltpaW5kZXhdO1xuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKGRhdGFfYXR0cik7XG5cdFx0XHRcdFx0aWYgKGl0ZW12YWx1ZS5OYW1lICE9IGRhdGFfYXR0ci5WYWx1ZSkge1xuXHRcdFx0XHRcdFx0dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2luZGV4XS5BdHRyW2lpbmRleF0uVmFsdWU9dmFsdWU7XG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyh0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbaW5kZXhdLkF0dHJbaWluZGV4XS5WYWx1ZSk7XG5cdFx0XHRcdFx0XHR2YXIgZXZlbnRpZCA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpbmRleF0uQXR0cltpaW5kZXhdLmFjdGlvbjtcblx0XHRcdFx0XHRcdGlmIChldmVudGlkKSB7XG5cdFx0XHRcdFx0ICAgICAgICAvLyBzZWxmLmV2ZW50X25vX3N1YiA9IDE7XG5cdFx0XHRcdFx0ICAgICAgICB2YXIgcmVxPVtdO1xuXHRcdFx0XHRcdCAgICAgICAgdmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0O1xuXHRcdFx0XHRcdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdCAgICAgICAgXHR2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLkF0dHI7XG5cdFx0XHRcdFx0ICAgICAgICBcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdCAgICAgICAgXHRcdHZhciBhciA9IGF0dHJbal07XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0aWYoYXIuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJylcblx0XHRcdFx0XHQgICAgICAgIFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0aWYoYXIuVHlwZT09J+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZT09J+W8leeUqOmhueebricpXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsSUQgP2FyLlZhbElEIDonJyB9KTtcblx0XHRcdFx0XHQgICAgICAgIFx0XHRlbHNlIGlmKGFyLlR5cGU9PSfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsdWU/JzEnOicwJ30pO1xuXHRcdFx0XHRcdCAgICAgICAgXHRcdGVsc2UgaWYoYXIuVHlwZT09J+Wtl+WFuCcgfHwgYXIuVHlwZT09J+Wtl+WFuC3lrZfnrKbkuLInKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogaXRlbXZhbHVlLk5hbWV9KTtcblx0XHRcdFx0XHQgICAgICAgIFx0XHRlbHNlXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsdWUgP2FyLlZhbHVlIDonJ30pO1xuXHRcdFx0XHRcdCAgICAgICAgXHR9XG5cdFx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdFx0ICAgICAgICB2YXIgaW5mbyA9IHtcblx0XHRcdFx0XHQgICAgICAgICAgICBldmVudGlkOiBldmVudGlkLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIGVkdHlwZTogXCIwXCIsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgcHJvamVjdGlkOiAnJyxcblx0XHRcdFx0XHQgICAgICAgICAgICByY2xzaWQ6ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIHJvYmppZDogJycsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgdXNlcmxvZ2luOiAnJyxcblx0XHRcdFx0XHQgICAgICAgICAgICBjbHNpZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELFxuXHRcdFx0XHRcdCAgICAgICAgICAgIG9iamlkOiBcIlwiLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIGF0dHI6IHJlcSxcblx0XHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHQgICAgICAgIHRoaXMuRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8pO1xuXHRcdFx0XHRcdCAgICB9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdFxuXHRcdFx0XHRcblx0XHRcdH0sXG5cdFx0XHRvbmV2ZW50KGUpe1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhlLnRhcmdldCk7XG5cdFx0XHRcdHZhciBkYXRhX2F0dHIgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV07XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGRhdGFfYXR0cik7XG5cdFx0XHRcdGlmIChlLnRhcmdldC52YWx1ZSAhPSBkYXRhX2F0dHIuVmFsdWUpIHtcblx0XHRcdFx0XHR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWU9ZS50YXJnZXQudmFsdWU7XG5cdFx0XHRcdFx0dmFyIGV2ZW50aWQgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uYWN0aW9uO1xuXHRcdFx0XHRcdGlmIChldmVudGlkKSB7XG5cdFx0XHRcdCAgICAgICAgLy8gc2VsZi5ldmVudF9ub19zdWIgPSAxO1xuXHRcdFx0XHQgICAgICAgIHZhciByZXE9W107XG5cdFx0XHRcdCAgICAgICAgdmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0O1xuXHRcdFx0XHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0ICAgICAgICBcdHZhciBhdHRyID0gYXR0cmxpc3RbaV0uQXR0cjtcblx0XHRcdFx0ICAgICAgICBcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHQgICAgICAgIFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHQgICAgICAgIFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxuXHRcdFx0XHQgICAgICAgIFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdCAgICAgICAgXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxuXHRcdFx0XHQgICAgICAgIFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsOiBhci5WYWxJRCA/YXIuVmFsSUQgOicnIH0pO1xuXHRcdFx0XHQgICAgICAgIFx0XHRlbHNlIGlmKGFyLlR5cGU9PSfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbHVlPycxJzonMCd9KTtcblx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZVxuXHRcdFx0XHQgICAgICAgIFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsOiBhci5WYWx1ZSA/YXIuVmFsdWUgOicnfSk7XG5cdFx0XHRcdCAgICAgICAgXHR9XG5cdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgIHZhciBpbmZvID0ge1xuXHRcdFx0XHQgICAgICAgICAgICBldmVudGlkOiBldmVudGlkLFxuXHRcdFx0XHQgICAgICAgICAgICBlZHR5cGU6IFwiMFwiLFxuXHRcdFx0XHQgICAgICAgICAgICBwcm9qZWN0aWQ6ICcnLFxuXHRcdFx0XHQgICAgICAgICAgICByY2xzaWQ6ICcnLFxuXHRcdFx0XHQgICAgICAgICAgICByb2JqaWQ6ICcnLFxuXHRcdFx0XHQgICAgICAgICAgICB1c2VybG9naW46ICcnLFxuXHRcdFx0XHQgICAgICAgICAgICBjbHNpZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELFxuXHRcdFx0XHQgICAgICAgICAgICBvYmppZDogXCJcIixcblx0XHRcdFx0ICAgICAgICAgICAgYXR0cjogcmVxLFxuXHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0ICAgICAgICB0aGlzLkRhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvLCBkYXRhX2F0dHIpO1xuXHRcdFx0XHQgICAgfVxuXHRcdFx0XHR9XG5cdFx0XHRcdFxuXHRcdFx0fSxcblx0XHRcdG9uY2hlY2soZSkge1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhlLnRhcmdldCk7XG5cdFx0XHRcdHZhciBpc2NoZWNrZWQgPSBlLnRhcmdldC5kYXRhc2V0LmlzY2hlY2s/ZmFsc2U6dHJ1ZTtcblx0XHRcdFx0dmFyIGRhdGFfYXR0ciA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXTtcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coZGF0YV9hdHRyKTtcblx0XHRcdFx0aWYgKGlzY2hlY2tlZCAhPSBkYXRhX2F0dHIuVmFsdWUpIHtcblx0XHRcdFx0XHR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWU9aXNjaGVja2VkO1xuXHRcdFx0XHRcdHZhciBldmVudGlkID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLmFjdGlvbjtcblx0XHRcdFx0XHRpZiAoZXZlbnRpZCkge1xuXHRcdFx0XHQgICAgICAgIC8vIHNlbGYuZXZlbnRfbm9fc3ViID0gMTtcblx0XHRcdFx0ICAgICAgICB2YXIgcmVxPVtdO1xuXHRcdFx0XHQgICAgICAgIHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdDtcblx0XHRcdFx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdCAgICAgICAgXHR2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLkF0dHI7XG5cdFx0XHRcdCAgICAgICAgXHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0ICAgICAgICBcdFx0dmFyIGFyID0gYXR0cltqXTtcblx0XHRcdFx0ICAgICAgICBcdFx0aWYoYXIuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJylcblx0XHRcdFx0ICAgICAgICBcdFx0XHRpZihhci5WYWx1ZT09J+ivtycpIGFyLlZhbHVlPScnO1xuXHRcdFx0XHQgICAgICAgIFx0XHRpZihhci5UeXBlPT0n5byV55So5Lq65ZGYJyB8fCBhci5UeXBlPT0n5byV55So6aG555uuJylcblx0XHRcdFx0ICAgICAgICBcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsSUQgP2FyLlZhbElEIDonJyB9KTtcblx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8Jylcblx0XHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsOiBhci5WYWx1ZT8nMSc6JzAnfSk7XG5cdFx0XHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbHVlID9hci5WYWx1ZSA6Jyd9KTtcblx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0ICAgICAgICBcdH1cblx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdCAgICAgICAgdmFyIGluZm8gPSB7XG5cdFx0XHRcdCAgICAgICAgICAgIGV2ZW50aWQ6IGV2ZW50aWQsXG5cdFx0XHRcdCAgICAgICAgICAgIGVkdHlwZTogXCIwXCIsXG5cdFx0XHRcdCAgICAgICAgICAgIHByb2plY3RpZDogJycsXG5cdFx0XHRcdCAgICAgICAgICAgIHJjbHNpZDogJycsXG5cdFx0XHRcdCAgICAgICAgICAgIHJvYmppZDogJycsXG5cdFx0XHRcdCAgICAgICAgICAgIHVzZXJsb2dpbjogJycsXG5cdFx0XHRcdCAgICAgICAgICAgIGNsc2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsXG5cdFx0XHRcdCAgICAgICAgICAgIG9iamlkOiBcIlwiLFxuXHRcdFx0XHQgICAgICAgICAgICBhdHRyOiByZXEsXG5cdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgIHRoaXMuRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8pO1xuXHRcdFx0XHQgICAgfVxuXHRcdFx0XHR9XG5cdFx0XHRcdFxuXHRcdFx0fSxcblx0XHRcdGlucHV0VmFsTGlzdElzRGVsKGluZGV4KXtcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coaW5kZXgpO1xuICAgICAgICAgICAgICAgIHRoaXMuJGRhdGEuaW5wdXRWYWxMaXN0LnNwbGljZShpbmRleCwgMSk7IC8v5Yig6ZmkdGFiUGFnZWpzb27nmoTlhoXlrrlcblx0XHRcdFx0Ly8gY29uc29sZS5sb2codGhpcy4kZGF0YS5pbnB1dFZhbExpc3QpO1xuXHRcdFx0fSxcblx0XHRcdGFkZHJlc3NjaGFuZ2UoZSkge1xuXHRcdFx0ICAgIC8vIGNvbnNvbGUubG9nKGUudGFyZ2V0KTtcblx0XHRcdCAgICBjb25zb2xlLmxvZyhlLmRhdGEuam9pbignOycpKVxuXHRcdFx0XHR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWU9ZS5kYXRhLmpvaW4oJzsnKTtcblx0XHRcdH0sXG5cdFx0XHRjbGFzc0F0dHJfZXh0QnV0dG9uKGluZGV4LGlpbmRleCl7XG5cdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cdFx0XHRcdHZhciBiZWZvcmVfY2xpY2tfYnV0dG9uID0gJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpbmRleF0uQXR0cltpaW5kZXhdLmJlZm9yZV9jbGlja19idXR0b247XG5cdFx0XHRcdHZhciBidXR0b25fY2FsbGJhY2sgPSAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2luZGV4XS5BdHRyW2lpbmRleF0uYnV0dG9uX2NhbGxiYWNrO1xuXHRcdFx0XHRpZighYmVmb3JlX2NsaWNrX2J1dHRvbil7XG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50OlwiYmVmb3JlX2NsaWNrX2J1dHRvbi1ldmVudF9pZOS4uuepuu+8gVwiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZighYnV0dG9uX2NhbGxiYWNrKXtcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCJidXR0b25fY2FsbGJhY2stZXZlbnRfaWTkuLrnqbrvvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0dmFyIGRhdGFfYXR0ciA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpbmRleF0uQXR0cltpaW5kZXhdO1xuXHRcdFx0XHR0aGlzLkRhdGFPYmpSdW5DdXN0b21FdmVudF9SZXR1cm4oYmVmb3JlX2NsaWNrX2J1dHRvbiwgZGF0YV9hdHRyLCBidXR0b25fY2FsbGJhY2ssIGluZGV4LGlpbmRleCk7XG5cdFx0XHR9LFxuXHRcdFx0c2Nhbl9jbGFzc0F0dHJfZXh0QnV0dG9uKGUpeyAgLy8tLS0tLS0tLS3mnKrlrozmiJAtLS0tLS0tLS0tLVxuXHRcdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdFx0XHR2YXIgQmVmb3JlX1NlbGVjdF9FdmVudCA9ICR0aGlzLiRkYXRhLnBhcmFtLlNjYW5fQ29kZS5CZWZvcmVfU2VsZWN0X0V2ZW50LklEO1xuXHRcdFx0XHR2YXIgQWZ0ZXJfU2VsZWN0X0V2ZW50ID0gJHRoaXMuJGRhdGEucGFyYW0uU2Nhbl9Db2RlLkFmdGVyX1NlbGVjdF9FdmVudC5JRDtcblx0XHRcdFx0aWYoIUJlZm9yZV9TZWxlY3RfRXZlbnQpe1xuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcIumAieaLqeaMiemSruWJjeS6i+S7tuS4uuepuu+8gVwiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZighQWZ0ZXJfU2VsZWN0X0V2ZW50KXtcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCLmlrDlop7mjInpkq7lkI7kuovku7bkuLrnqbrvvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gdmFyIGRhdGFfYXR0ciA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpbmRleF0uQXR0cltpaW5kZXhdO1xuXHRcdFx0XHR0aGlzLkRhdGFPYmpSdW5DdXN0b21FdmVudF9SZXR1cm4oQmVmb3JlX1NlbGVjdF9FdmVudCwgJycsIEFmdGVyX1NlbGVjdF9FdmVudCwgJycsICcnKTtcblx0XHRcdH0sXG5cdFx0XHRjbGFzc0F0dHJfQWRkUGVyKGluZGV4LGlpbmRleCl7XG5cdFx0XHRcdHZhciBwYXJhbT17aW5kZXg6aW5kZXgsaWluZGV4OmlpbmRleH07XG5cdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cdFx0XHRcdHVuaS5uYXZpZ2F0ZVRvKHtcblx0XHRcdFx0XHR1cmw6Jy4uL3NlbHBzbi9pbmRleD9tdWxpdD1mYWxzZSZwYXJhbT0nK0pTT04uc3RyaW5naWZ5KHBhcmFtKSxcblx0XHRcdFx0XHRldmVudHM6e1xuXHRcdFx0XHRcdFx0QWRkUGVyKGRhdGEscGFyYW0peyBcblx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2cocGFyYW0pO1xuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhkYXRhKTtcblx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtwYXJhbS5pbmRleF0uQXR0cltwYXJhbS5paW5kZXhdLlZhbHVlPWRhdGFbMF0uTmFtZTtcblx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtwYXJhbS5pbmRleF0uQXR0cltwYXJhbS5paW5kZXhdLlZhbElEPWRhdGFbMF0uTG9naW4rJzsnK2RhdGFbMF0uTmFtZTtcblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdHZhciBldmVudGlkID0gJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtwYXJhbS5pbmRleF0uQXR0cltwYXJhbS5paW5kZXhdLmFjdGlvbjtcblx0XHRcdFx0XHRcdFx0aWYgKGV2ZW50aWQpIHtcblx0XHRcdFx0XHRcdFx0ICAgIGV2ZW50aWQgPSBldmVudGlkLnRyaW0oKTtcblx0XHRcdFx0XHRcdFx0ICAgIGlmIChldmVudGlkKSB7XG5cdFx0XHRcdFx0XHRcdCAgICAgICAgdmFyIGluZm8gPSB7XG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIGV2ZW50aWQ6IGV2ZW50aWQsXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIGVkdHlwZTogXCI0XCIsXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIHByb2plY3RpZDogXCJcIixcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgcmNsc2lkOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICByb2JqaWQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIHVzZXJsb2dpbjogZGF0YVswXS5Mb2dpbixcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgY2xzaWQ6ICR0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIG9iamlkOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICBhdHRyOiBbXSxcblx0XHRcdFx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRcdC8vIHZhciBkYXRhX2F0dHIgPSAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W3BhcmFtLmluZGV4XS5BdHRyW3BhcmFtLmlpbmRleF07XG5cdFx0XHRcdFx0XHRcdCAgICAgICAgJHRoaXMuRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8pO1xuXHRcdFx0XHRcdFx0XHQgICAgfVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0sXG5cdFx0XHRjbGFzc0F0dHJfQWRkUmVmKGUpe1xuXHRcdFx0XHRjb25zb2xlLmxvZyhlLnRhcmdldCk7XG5cdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcIuatpOWKn+iDvei/mOacquWunueOsO+8gVwiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHQvLyB2YXIgdmFsdWU9dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlJlbENsc1tlLnRhcmdldC52YWx1ZV07XG5cdFx0XHRcdC8vIHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5WYWx1ZT12YWx1ZTtcblx0XHRcdH0sXG5cdFx0XHRjbGFzc0F0dHJfQWRkUHJqKGluZGV4LGlpbmRleCl7XG5cdFx0XHRcdHZhciBwYXJhbT17aW5kZXg6aW5kZXgsaWluZGV4OmlpbmRleH07XG5cdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cdFx0XHRcdHVuaS5uYXZpZ2F0ZVRvKHtcblx0XHRcdFx0XHR1cmw6Jy4uL3NlbFByai9pbmRleD9yZWxhdGlvbj0tMSZwYXJhbT0nK0pTT04uc3RyaW5naWZ5KHBhcmFtKSxcblx0XHRcdFx0XHRldmVudHM6e1xuXHRcdFx0XHRcdFx0QWRkUGVyKGRhdGEscGFyYW0peyBcblx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2cocGFyYW0pO1xuXHRcdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhkYXRhKTtcblx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtwYXJhbS5pbmRleF0uQXR0cltwYXJhbS5paW5kZXhdLlZhbHVlPWRhdGFbMF0uTmFtZTtcblx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtwYXJhbS5pbmRleF0uQXR0cltwYXJhbS5paW5kZXhdLlZhbElEPWRhdGFbMF0uSUQrJzsnK2RhdGFbMF0uTmFtZTtcblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdHZhciBldmVudGlkID0gJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtwYXJhbS5pbmRleF0uQXR0cltwYXJhbS5paW5kZXhdLmFjdGlvbjtcblx0XHRcdFx0XHRcdFx0aWYgKGV2ZW50aWQpIHtcblx0XHRcdFx0XHRcdFx0ICAgIGV2ZW50aWQgPSBldmVudGlkLnRyaW0oKTtcblx0XHRcdFx0XHRcdFx0ICAgIGlmIChldmVudGlkKSB7XG5cdFx0XHRcdFx0XHRcdCAgICAgICAgdmFyIGluZm8gPSB7XG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIGV2ZW50aWQ6IGV2ZW50aWQsXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIGVkdHlwZTogXCIyXCIsXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIHByb2plY3RpZDogZGF0YVswXS5JRCxcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgcmNsc2lkOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICByb2JqaWQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIHVzZXJsb2dpbjogXCJcIixcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgY2xzaWQ6ICR0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIG9iamlkOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICBhdHRyOiBbXSxcblx0XHRcdFx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0ICAgICAgICAvLyB2YXIgZGF0YV9hdHRyID0gJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtwYXJhbS5pbmRleF0uQXR0cltwYXJhbS5paW5kZXhdO1xuXHRcdFx0XHRcdFx0XHQgICAgICAgICR0aGlzLkRhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvKTtcblx0XHRcdFx0XHRcdFx0ICAgIH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9LFxuXHRcdFx0c2F2YSgpe1xuXHRcdFx0XHRpZiAodGhpcy4kZGF0YS5wYXJhbS5CZWZvcmVfT0tfRXZlbnQpIC8v5Yik5pat5Yqf6IO954K55Y+C5pWw5piv5ZCm5pyJ56Gu5a6a5YmN6ISa5pysXG5cdFx0XHRcdFx0dGhpcy5zY2FuX09LRGF0YU9ialJ1bkN1c3RvbUV2ZW50KHRoaXMuJGRhdGEucGFyYW0uQmVmb3JlX09LX0V2ZW50LklEKTtcblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdHRoaXMuc2Nhbl9PS0RhdGFPYmpSdW5DdXN0b21FdmVudCh0aGlzLiRkYXRhLnBhcmFtLkFmdGVyX09LX0V2ZW50LklEKTtcblx0XHRcdH0sXG5cdFx0XHRhZGQoKXtcblx0XHRcdFx0dW5pLnNob3dMb2FkaW5nKHtcblx0XHRcdFx0XHR0aXRsZTpcIuWKoOi9veS4rS4uLlwiXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR2YXIgcmVxPVtdO1xuXHRcdFx0XHR2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Q7XG5cdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHR2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLkF0dHI7XG5cdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHRcdFx0aWYoYXIuVmFsdWU9PSfor7fpgInmi6knIHx8IGFyLlZhbHVlPT0n4oCU4oCU6K+36YCJ5oup4oCU4oCUJykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxuXHRcdFx0XHRcdFx0XHRpZihhci5WYWx1ZT09J+ivtycpIGFyLlZhbHVlPScnO1xuXHRcdFx0XHQgICAgICAgIGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxuXHRcdFx0XHQgICAgICAgIFx0cmVxLnB1c2goeyBuYW1lOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsSUQgP2FyLlZhbElEIDonJyB9KTtcblx0XHRcdFx0ICAgICAgICBlbHNlIGlmKGFyLlR5cGU9PSfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IG5hbWU6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZT8nMSc6JzAnfSk7XG5cdFx0XHRcdCAgICAgICAgZWxzZSBpZihhci5UeXBlPT0n5a2X5YW4JyB8fCBhci5UeXBlPT0n5a2X5YW4LeWtl+espuS4sicpe1xuXHRcdFx0XHRcdFx0XHRpZihhci5zZWxlY3Q9PXRydWUpeyAvL+WIpOaWreS4i+aLieaYr+WQpuWkmumAiVxuXHRcdFx0XHRcdFx0XHRcdHZhciB2YWxTdHIgPVwiXCI7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciB2IGluIGFyLlZhbHVlKXtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKHZhbFN0cilcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsU3RyKz1cIjtcIjtcblx0XHRcdFx0XHRcdFx0XHRcdHZhbFN0cis9YXIuVmFsdWVbdl07XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgbmFtZTogYXIuTmFtZSwgdmFsdWU6IHZhbFN0cn0pO1xuXHRcdFx0XHRcdFx0XHR9ZWxzZVxuXHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgbmFtZTogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlfSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgbmFtZTogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlID9hci5WYWx1ZSA6Jyd9KTtcblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRpZiAoKGFyLk5vdEVtcHR5ID09ICcxJyB8fCBhci5ub3RlbXB0eSA9PSB0cnVlKSAmJiAhYXIuVmFsdWUpIHtcblx0XHRcdFx0XHRcdC8vIGlmKGFyLm5vdEVtcHR5PT0nMScpe1xuXHRcdFx0XHRcdFx0XHR1bmkuaGlkZUxvYWRpbmcoKTtcblx0XHRcdFx0XHRcdFx0Ly8gdW5pLnNob3dUb2FzdCh7dGl0bGU6YXIuRGlzcE5hbWUrJ+S4jeiDveS4uuepuu+8gScsaWNvbjpcInN1Y2Nlc3NcIixkdXJhdGlvbjozMDAwfSk7XG5cdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDphci5EaXNwTmFtZSsn5LiN6IO95Li656m677yBJyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHR2YXIgZW52aXJvbWVudCA9IHtcblx0XHRcdFx0ICAgICAnZnVuY3Rpb24nOiAnMzAwMCcsIC8vIOWKn+iDveeCuee8luWPt1xuXHRcdFx0XHQgICAgIGNsc19pZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELCAgICAgLy8g5Yqf6IO954K55Li75pWw5o2u57G75qCH6K+GXG5cdFx0XHRcdCAgICAgJ2J1dHRvbic6ICd0b3AnLCAgIC8vIHRvcC9ib3R0b21cblx0XHRcdFx0ICAgICBidXR0b25fbmFtZTogJ+aWsOWinicsXG5cdFx0XHRcdCAgICAgbWFzdGVyOiB7XG5cdFx0XHRcdCAgICAgICAgIGNsc19pZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELCBcblx0XHRcdFx0ICAgICB9XG5cdFx0XHRcdH07XG5cdFx0XHRcdCBcblx0XHRcdFx0dmFyIGRhdGFJbmZvPXtcblx0XHRcdFx0ICAgIGNsYXNzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsIGRhdGFfb2JqX2lkOiAnJywgbWFzdGVyY2xzaWQ6ICcnLFxuXHRcdFx0XHQgICAgcmVxOiBKU09OLnN0cmluZ2lmeShyZXEpLCB1cGZpbGU6IEpTT04uc3RyaW5naWZ5KFtdKSwgcG9zdF9kYXRhOiBKU09OLnN0cmluZ2lmeSh7fSksXG5cdFx0XHRcdCAgICBjb21wb3NlOiBKU09OLnN0cmluZ2lmeShbXSksIHJlZmRhdGFzdG9yZTogSlNPTi5zdHJpbmdpZnkoW10pLCBleHRpbmZvOiBKU09OLnN0cmluZ2lmeShlbnZpcm9tZW50KSwgXG5cdFx0XHRcdFx0bm90X3RyaWdnZXJfc3lzX2V2ZW50OiAnJ1xuXHRcdFx0XHR9O1xuXHRcdFx0XHRcblx0XHRcdFx0Ly8gcmV0dXJuXG5cdFx0XHRcdGNvbnNvbGUubG9nKGRhdGFJbmZvKTtcblx0XHRcdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2FkZGNsYXNzYXR0cicsZGF0YUluZm8pLnRoZW4oc3VjY2Vzcz0+e1xuXHRcdFx0XHRcdGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xuXHRcdFx0XHRcdHVuaS5oaWRlTG9hZGluZygpO1xuXHRcdFx0XHRcdGlmIChzdWNjZXNzLmNvZGU9PScwMDAwMCcpIHtcblx0XHRcdFx0XHRcdHZhciBhY3Rpb24gPSBKU09OLnBhcnNlKHN1Y2Nlc3MuZGF0YS5BY3Rpb24pO1xuXHRcdFx0XHRcdFx0aWYoYWN0aW9uLnJldD09JzAnKXtcblx0XHRcdFx0XHRcdFx0aWYoYWN0aW9uLnJlc3VsdF90eXBlPT0nMCcpe1xuXHRcdFx0XHRcdFx0XHRcdHVuaS5zaG93VG9hc3Qoe3RpdGxlOmFjdGlvbi5yZXN1bHQsaWNvbjpcInN1Y2Nlc3NcIixkdXJhdGlvbjozMDAwfSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Ly8gXCJ7XCJyZXRcIjowLCBcInJlc3VsdF90eXBlXCI6MCwgXCJyZXN1bHRcIjpcIuWIm+W7uuaIkOWKnzEyMzEyMzEyM1wiLFwiaW5mb1wiOlwiXCJ9XCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC8v5Yi35pawXG5cdFx0XHRcdFx0XHR1bmkucmVkaXJlY3RUbyh7XG5cdFx0XHRcdFx0XHRcdHVybDonLi4vbW9kYWwvbXNfY2xhc3NBdHRyP3BhcmFtPScrSlNPTi5zdHJpbmdpZnkodGhpcy4kZGF0YS5wYXJhbSkrXCImdGl0bGVuYW1lPVwiK3RoaXMuJGRhdGEudGl0bGVcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0Ly8gdGhpcy5jbGFzc19hdHRyX2luaXQoKTtcblx0XHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vXCIsY29udGVudDpzdWNjZXNzLm1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLmNhdGNoKGV4PT57XG5cdFx0XHRcdFx0Y29uc29sZS5sb2coZXgpO1xuXHRcdFx0XHRcdHVuaS5oaWRlTG9hZGluZygpO1xuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSxcblx0XHRcdGNsYXNzX2F0dHJfaW5pdCgpe1xuXHRcdFx0XHR2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLnNob3dfc3R5bGVcblx0XHRcdFx0dmFyIG5ld2F0dHJsaXN0ID0gW107XG5cdFx0XHRcdGlmICh0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3QubGVuZ3RoID4gMCkge1xuXHRcdFx0XHQgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHQgICAgICAgIHZhciBvcGVuID0gYXR0cmxpc3RbaV0ub3Blbjtcblx0XHRcdFx0ICAgICAgICB2YXIgbmFtZSA9IGF0dHJsaXN0W2ldLmF0dHJncm91cF9uYW1lO1xuXHRcdFx0XHQgICAgICAgIHZhciBhdHRycyA9IGF0dHJsaXN0W2ldLmF0dHJzO1xuXHRcdFx0XHQgICAgICAgIGZvciAodmFyIHMgPSAwOyBzIDwgdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0Lmxlbmd0aDsgcysrKSB7XG5cdFx0XHRcdCAgICAgICAgICAgIHZhciBjbHNhdHRyID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W3NdO1xuXHRcdFx0XHQgICAgICAgICAgICBpZiAobmFtZSA9PSBjbHNhdHRyLk5hbWUpIHtcblx0XHRcdFx0ICAgICAgICAgICAgICAgIHZhciBhdHRyID0gW107XG5cdFx0XHRcdCAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGF0dHJzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbCA9IDA7IGwgPCBjbHNhdHRyLkF0dHIubGVuZ3RoOyBsKyspIHtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhID0gY2xzYXR0ci5BdHRyW2xdO1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXR0cnNbal0uYXR0ciA9PSBjYS5OYW1lKSB7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5hY3Rpb24gPSBhdHRyc1tqXS5hY3Rpb247XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5lZGl0ID0gYXR0cnNbal0uZWRpdDtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLm5vdGVtcHR5ID0gYXR0cnNbal0ubm90ZW1wdHk7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5leHRfYnV0dG9uID0gYXR0cnNbal0uZXh0X2J1dHRvbjtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmJ1dHRvbl9pbWcgPSBhdHRyc1tqXS5idXR0b25faW1nO1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuYnV0dG9uX3Rvb2x0aXAgPSBhdHRyc1tqXS5idXR0b25fdG9vbHRpcDtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmJlZm9yZV9jbGlja19idXR0b24gPSBhdHRyc1tqXS5iZWZvcmVfY2xpY2tfYnV0dG9uO1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuYnV0dG9uX2NhbGxiYWNrID0gYXR0cnNbal0uYnV0dG9uX2NhbGxiYWNrO1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuaGlkZGVuID0gYXR0cnNbal0uaGlkZGVuO1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Euc2VsZWN0ID0gYXR0cnNbal0uc2VsZWN0PT11bmRlZmluZWQ/ZmFsc2U6YXR0cnNbal0uc2VsZWN0O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlZhbHVlID1cIlwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGNhLmRpY3RpdGVtKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGNhLnNlbGVjdCA9PSB0cnVlKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9IFtdOy8vY2EuZGljdGl0ZW1bMF0uQ05fU19OQU1FO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZWxzZSBcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPSAn6K+36YCJ5oupJzsvL2NhLmRpY3RpdGVtWzBdLkNOX1NfTkFNRTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBkaWN0aXRlbWxpc3Q9W107XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBkID0gMDsgZCA8IGNhLmRpY3RpdGVtLmxlbmd0aDsgZCsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLmRpY3RpdGVtW2RdLmxhYmVsPWNhLmRpY3RpdGVtW2RdLkNOX1NfTkFNRTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuZGljdGl0ZW1bZF0udmFsdWU9Y2EuZGljdGl0ZW1bZF0uQ05fU19OQU1FO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5kaWN0aXRlbVtkXS5DTl9DX0lTX0RFRkFVTFQ9PScxJylcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZT1jYS5kaWN0aXRlbVtkXS5DTl9TX05BTUU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGNhLlR5cGU9PSfml6XmnJ8nIHx8IGNhLlR5cGU9PSfml7bpl7QnKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBub3dEYXRlID0gbmV3IERhdGUoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBkYXRlID0ge3llYXI6IG5vd0RhdGUuZ2V0RnVsbFllYXIoKSxtb250aDogbm93RGF0ZS5nZXRNb250aCgpICsgMSxkYXk6IG5vd0RhdGUuZ2V0RGF0ZSgpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPSBkYXRlLnllYXIgKyAnLScgKyAoZGF0ZS5tb250aCA+PSAxMCA/IGRhdGUubW9udGggOiAnMCcgKyBkYXRlLm1vbnRoKSArICctJyArIChkYXRlLmRheSA+PSAxMCA/IGRhdGUuZGF5IDogJzAnICsgZGF0ZS5kYXkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciByZWxDbHNMaXN0PVtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGF0dHJfcmVzY2xzID0gY2EuUmVsQ2xzLnNwbGl0KCcsJyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGlpIGluIGF0dHJfcmVzY2xzKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHJlc2NscyA9IGF0dHJfcmVzY2xzW2lpXS5zcGxpdCgnfCcpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZWxDbHNMaXN0LnB1c2goe2lkOnJlc2Nsc1swXSxuYW1lOnJlc2Nsc1sxXX0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuUmVsQ2xzTGlzdCA9IHJlbENsc0xpc3Q7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9ICfor7cnO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5UeXBlPT0n55yB5biC5Yy6Jylcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlZhbHVlID0gJ+ivt+mAieaLqSc7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY2EuVHlwZT09J+W4g+WwlOWAvCcpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyLnB1c2goY2EpO1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgICAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgICAgICAgICAgbmV3YXR0cmxpc3QucHVzaCh7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgQmtDb2xvcjogY2xzYXR0ci5Ca0NvbG9yLFxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIEhhc0FjZTogY2xzYXR0ci5IYXNBY2UsXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgSW1nRm9udFN0eWxlOiBjbHNhdHRyLkltZ0ZvbnRTdHlsZSxcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICBOYW1lOiBjbHNhdHRyLk5hbWUsXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgT3JkZXI6IGNsc2F0dHIuT3JkZXIsXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgT3Blbjogb3Blbixcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICBBdHRyOiBhdHRyLFxuXHRcdFx0XHRcdFx0XHRcdFx0Y29udHJvbF9zdHlsZTp0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLmNvbnRyb2xfc3R5bGUsXG5cdFx0XHRcdFx0XHRcdFx0XHR0aXRsZV9wX3dkaXRoOnRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYudGl0bGVfcF93ZGl0aCxcblx0XHRcdFx0XHRcdFx0XHRcdEZvbnQ6dGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5Gb250P3RoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuRm9udDp7fSxcblx0XHRcdFx0XHRcdFx0XHRcdEJrX0NvbG9yOnRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuQmtfQ29sb3I/dGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5Ca19Db2xvcjonI0ZGRkZGRicsXG5cdFx0XHRcdFx0XHRcdFx0XHRUZXh0X0NvbG9yOnRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuVGV4dF9Db2xvcj90aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLlRleHRfQ29sb3I6JyMwMDAwMDAnXG5cdFx0XHRcdCAgICAgICAgICAgICAgICB9KVxuXHRcdFx0XHQgICAgICAgICAgICB9XG5cdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHQgICAgfVxuXHRcdFx0XHQgICAgaWYgKG5ld2F0dHJsaXN0Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0ICAgICAgICB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3QgPSBuZXdhdHRybGlzdDtcblx0XHRcdFx0ICAgIH1cblx0XHRcdFx0XHR2YXIgcmVxPVtdO1xuXHRcdFx0XHQgICAgaWYgKHRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYpIHtcblx0XHRcdFx0ICAgICAgICAgaWYgKHRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuc2hvd19zdHlsZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdCAgICAgICAgICAgIHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuc2hvd19zdHlsZVxuXHRcdFx0XHQgICAgICAgICAgICAvLyAkZWwuZmluZCgnLmF0dHJfZmllbGQnKS5wcm9wKCdyZWFkb25seScsIHRydWUpO1xuXHRcdFx0XHQgICAgICAgICAgICAvLyAkZWwuZmluZCgnLmF0dHJfZmllbGQnKS5wcm9wKCdkaXNhYmxlZCcsIHRydWUpO1xuXHRcdFx0XHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICB2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLmF0dHJzXG5cdFx0XHRcdCAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICB2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5hdHRyLCB2YWx1ZTogYXIudmFsdWU/YXIudmFsdWU6JycgfSk7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICB9XG5cdFx0XHRcdCAgICAgICAgICAgIH1cblx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdFx0fVx0XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0dmFyIGV2ZW50bGlzdCA9IHRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuZXZlbnQ7XG5cdFx0XHRcdFx0aWYgKGV2ZW50bGlzdCkge1xuXHRcdFx0XHRcdCAgICBpZiAoZXZlbnRsaXN0Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXZlbnRsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0ICAgICAgICAgICAgaWYgKGV2ZW50bGlzdFtpXS5ldmVudF9pZCA9PSAnYmVmb3JlX29rJykge1xuXHRcdFx0XHRcdCAgICAgICAgICAgICAgICB0aGlzLiRkYXRhLmVkaXRfb2tfZXZlbnQgPSBldmVudGxpc3RbaV07XG5cdFx0XHRcdFx0ICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudGxpc3RbaV0uZXZlbnRfaWQgPT0gJ2luaXRpYWwnKSB7XG5cdFx0XHRcdFx0ICAgICAgICAgICAgICAgIHRoaXMuJGRhdGEuZWRpdF9pbml0YWxfZXZlbnQgPSBldmVudGxpc3RbaV07XG5cdFx0XHRcdFx0ICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudGxpc3RbaV0uZXZlbnRfaWQgPT0gJ2JlZm9yZV9zZWxlY3RfY29tcG9zZScpIHtcblx0XHRcdFx0XHQgICAgICAgICAgICAgICAgdGhpcy4kZGF0YS5lZGl0X3NlbGVjdF9jb21wb3NlX2V2ZW50ID0gZXZlbnRsaXN0W2ldLnNjcmlwX2lkO1xuXHRcdFx0XHRcdCAgICAgICAgICAgICAgICB0aGlzLiRkYXRhLmVkaXRfY29tcG9zZV9jbHNfaWQgPSBldmVudGxpc3RbaV0uY29tcG9zZV9jbHNfaWQ7XG5cdFx0XHRcdFx0ICAgICAgICAgICAgfVxuXHRcdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhyZXEpO1xuXHRcdFx0XHRcdGlmICh0aGlzLiRkYXRhLmVkaXRfaW5pdGFsX2V2ZW50KSB7XG5cdFx0XHRcdFx0ICAgIHZhciBldmVudGlkID0gdGhpcy4kZGF0YS5lZGl0X2luaXRhbF9ldmVudC5zY3JpcF9pZDtcblx0XHRcdFx0XHQgICAgdmFyIGluZm8gPSB7XG5cdFx0XHRcdFx0ICAgICAgICBldmVudGlkOiBldmVudGlkLFxuXHRcdFx0XHRcdCAgICAgICAgZWR0eXBlOiBcIjBcIixcblx0XHRcdFx0XHQgICAgICAgIHByb2plY3RpZDogJycsXG5cdFx0XHRcdFx0ICAgICAgICByY2xzaWQ6ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgcm9iamlkOiAnJyxcblx0XHRcdFx0XHQgICAgICAgIHVzZXJsb2dpbjogJycsXG5cdFx0XHRcdFx0ICAgICAgICBjbHNpZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELFxuXHRcdFx0XHRcdCAgICAgICAgb2JqaWQ6IFwiXCIsXG5cdFx0XHRcdFx0ICAgICAgICBhdHRyOiByZXEsXG5cdFx0XHRcdFx0ICAgIH1cblx0XHRcdFx0XHQgICAgdGhpcy5pbmlfRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zb2xlLmxvZyh0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlKTtcblx0XHRcdFx0XHRjb25zb2xlLmxvZyh0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3QpO1xuXHRcdFx0XHRcdFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcIuacquaJvuWIsOWPr+aYvuekuueahOeahOWxnuaAp1wiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0c3ViQ2xhc3NfYXR0cl9pbml0KCl7XG5cdFx0XHRcdHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuc2hvd19zdHlsZVxuXHRcdFx0XHR2YXIgbmV3YXR0cmxpc3QgPSBbXTtcblx0XHRcdFx0aWYgKHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdCAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdCAgICAgICAgdmFyIG9wZW4gPSBhdHRybGlzdFtpXS5vcGVuO1xuXHRcdFx0XHQgICAgICAgIHZhciBuYW1lID0gYXR0cmxpc3RbaV0uYXR0cmdyb3VwX25hbWU7XG5cdFx0XHRcdCAgICAgICAgdmFyIGF0dHJzID0gYXR0cmxpc3RbaV0uYXR0cnM7XG5cdFx0XHRcdCAgICAgICAgZm9yICh2YXIgcyA9IDA7IHMgPCB0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3QubGVuZ3RoOyBzKyspIHtcblx0XHRcdFx0ICAgICAgICAgICAgdmFyIGNsc2F0dHIgPSB0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3Rbc107XG5cdFx0XHRcdCAgICAgICAgICAgIGlmIChuYW1lID09IGNsc2F0dHIuTmFtZSkge1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgdmFyIGF0dHIgPSBbXTtcblx0XHRcdFx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYXR0cnMubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBsID0gMDsgbCA8IGNsc2F0dHIuQXR0ci5sZW5ndGg7IGwrKykge1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2EgPSBjbHNhdHRyLkF0dHJbbF07XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdHRyc1tqXS5hdHRyID09IGNhLk5hbWUpIHtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmFjdGlvbiA9IGF0dHJzW2pdLmFjdGlvbjtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmVkaXQgPSBhdHRyc1tqXS5lZGl0O1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Eubm90ZW1wdHkgPSBhdHRyc1tqXS5ub3RlbXB0eTtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmV4dF9idXR0b24gPSBhdHRyc1tqXS5leHRfYnV0dG9uO1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuYnV0dG9uX2ltZyA9IGF0dHJzW2pdLmJ1dHRvbl9pbWc7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5idXR0b25fdG9vbHRpcCA9IGF0dHJzW2pdLmJ1dHRvbl90b29sdGlwO1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuYmVmb3JlX2NsaWNrX2J1dHRvbiA9IGF0dHJzW2pdLmJlZm9yZV9jbGlja19idXR0b247XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5idXR0b25fY2FsbGJhY2sgPSBhdHRyc1tqXS5idXR0b25fY2FsbGJhY2s7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5oaWRkZW4gPSBhdHRyc1tqXS5oaWRkZW47XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5zZWxlY3QgPSBhdHRyc1tqXS5zZWxlY3Q9PXVuZGVmaW5lZD9mYWxzZTphdHRyc1tqXS5zZWxlY3Q7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPVwiXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY2EuZGljdGl0ZW0pe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY2Euc2VsZWN0ID09IHRydWUpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlZhbHVlID0gW107Ly9jYS5kaWN0aXRlbVswXS5DTl9TX05BTUU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbHNlIFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9ICfor7fpgInmi6knOy8vY2EuZGljdGl0ZW1bMF0uQ05fU19OQU1FO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGRpY3RpdGVtbGlzdD1bXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGQgPSAwOyBkIDwgY2EuZGljdGl0ZW0ubGVuZ3RoOyBkKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuZGljdGl0ZW1bZF0ubGFiZWw9Y2EuZGljdGl0ZW1bZF0uQ05fU19OQU1FO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5kaWN0aXRlbVtkXS52YWx1ZT1jYS5kaWN0aXRlbVtkXS5DTl9TX05BTUU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGNhLmRpY3RpdGVtW2RdLkNOX0NfSVNfREVGQVVMVD09JzEnKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlZhbHVlPWNhLmRpY3RpdGVtW2RdLkNOX1NfTkFNRTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY2EuVHlwZT09J+aXpeacnycgfHwgY2EuVHlwZT09J+aXtumXtCcpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIG5vd0RhdGUgPSBuZXcgRGF0ZSgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGRhdGUgPSB7eWVhcjogbm93RGF0ZS5nZXRGdWxsWWVhcigpLG1vbnRoOiBub3dEYXRlLmdldE1vbnRoKCkgKyAxLGRheTogbm93RGF0ZS5nZXREYXRlKCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9IGRhdGUueWVhciArICctJyArIChkYXRlLm1vbnRoID49IDEwID8gZGF0ZS5tb250aCA6ICcwJyArIGRhdGUubW9udGgpICsgJy0nICsgKGRhdGUuZGF5ID49IDEwID8gZGF0ZS5kYXkgOiAnMCcgKyBkYXRlLmRheSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGNhLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHJlbENsc0xpc3Q9W107XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgYXR0cl9yZXNjbHMgPSBjYS5SZWxDbHMuc3BsaXQoJywnKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgaWkgaW4gYXR0cl9yZXNjbHMpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgcmVzY2xzID0gYXR0cl9yZXNjbHNbaWldLnNwbGl0KCd8Jyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlbENsc0xpc3QucHVzaCh7aWQ6cmVzY2xzWzBdLG5hbWU6cmVzY2xzWzFdfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5SZWxDbHNMaXN0ID0gcmVsQ2xzTGlzdDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlZhbHVlID0gJ+ivtyc7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGNhLlR5cGU9PSfnnIHluILljLonKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPSAn6K+36YCJ5oupJztcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5UeXBlPT0n5biD5bCU5YC8Jylcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlZhbHVlID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIucHVzaChjYSk7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgIH1cblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICB9XG5cdFx0XHRcdCAgICAgICAgICAgICAgICB9XG5cdFx0XHRcdCAgICAgICAgICAgICAgICBuZXdhdHRybGlzdC5wdXNoKHtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICBCa0NvbG9yOiBjbHNhdHRyLkJrQ29sb3IsXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgSGFzQWNlOiBjbHNhdHRyLkhhc0FjZSxcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICBJbWdGb250U3R5bGU6IGNsc2F0dHIuSW1nRm9udFN0eWxlLFxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIE5hbWU6IGNsc2F0dHIuTmFtZSxcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICBPcmRlcjogY2xzYXR0ci5PcmRlcixcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICBPcGVuOiBvcGVuLFxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIEF0dHI6IGF0dHIsXG5cdFx0XHRcdFx0XHRcdFx0XHRjb250cm9sX3N0eWxlOnRoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuY29udHJvbF9zdHlsZSxcblx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlX3Bfd2RpdGg6dGhpcy4kZGF0YS5zdWJDbGFzc0dyaWRTdHlsZS5TdHlsZURlZi50aXRsZV9wX3dkaXRoLFxuXHRcdFx0XHRcdFx0XHRcdFx0Rm9udDp0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLkZvbnQ/dGhpcy4kZGF0YS5zdWJDbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5Gb250Ont9LFxuXHRcdFx0XHRcdFx0XHRcdFx0QmtfQ29sb3I6dGhpcy4kZGF0YS5zdWJDbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5Ca19Db2xvcj90aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLkJrX0NvbG9yOicjRkZGRkZGJyxcblx0XHRcdFx0XHRcdFx0XHRcdFRleHRfQ29sb3I6dGhpcy4kZGF0YS5zdWJDbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5UZXh0X0NvbG9yP3RoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuVGV4dF9Db2xvcjonIzAwMDAwMCdcblx0XHRcdFx0ICAgICAgICAgICAgICAgIH0pXG5cdFx0XHRcdCAgICAgICAgICAgIH1cblx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdCAgICB9XG5cdFx0XHRcdCAgICBpZiAobmV3YXR0cmxpc3QubGVuZ3RoID4gMCkge1xuXHRcdFx0XHQgICAgICAgIHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdCA9IG5ld2F0dHJsaXN0O1xuXHRcdFx0XHQgICAgfVxuXHRcdFx0XHRcdHZhciByZXE9W107XG5cdFx0XHRcdCAgICBpZiAodGhpcy4kZGF0YS5zdWJDbGFzc0dyaWRTdHlsZS5TdHlsZURlZikge1xuXHRcdFx0XHQgICAgICAgICBpZiAodGhpcy4kZGF0YS5zdWJDbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5zaG93X3N0eWxlLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0ICAgICAgICAgICAgdmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5zdWJDbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5zaG93X3N0eWxlXG5cdFx0XHRcdCAgICAgICAgICAgIC8vICRlbC5maW5kKCcuYXR0cl9maWVsZCcpLnByb3AoJ3JlYWRvbmx5JywgdHJ1ZSk7XG5cdFx0XHRcdCAgICAgICAgICAgIC8vICRlbC5maW5kKCcuYXR0cl9maWVsZCcpLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7XG5cdFx0XHRcdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0ICAgICAgICAgICAgICAgIHZhciBhdHRyID0gYXR0cmxpc3RbaV0uYXR0cnNcblx0XHRcdFx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIHZhciBhciA9IGF0dHJbal07XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLmF0dHIsIHZhbHVlOiBhci52YWx1ZT9hci52YWx1ZTonJyB9KTtcblx0XHRcdFx0ICAgICAgICAgICAgICAgIH1cblx0XHRcdFx0ICAgICAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHR9XHRcblx0XHRcdFx0XHRcblx0XHRcdFx0XHR2YXIgZXZlbnRsaXN0ID0gdGhpcy4kZGF0YS5zdWJDbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5ldmVudDtcblx0XHRcdFx0XHRpZiAoZXZlbnRsaXN0KSB7XG5cdFx0XHRcdFx0ICAgIGlmIChldmVudGxpc3QubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBldmVudGxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHQgICAgICAgICAgICBpZiAoZXZlbnRsaXN0W2ldLmV2ZW50X2lkID09ICdiZWZvcmVfb2snKSB7XG5cdFx0XHRcdFx0ICAgICAgICAgICAgICAgIHRoaXMuJGRhdGEuZWRpdF9va19ldmVudCA9IGV2ZW50bGlzdFtpXTtcblx0XHRcdFx0XHQgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50bGlzdFtpXS5ldmVudF9pZCA9PSAnaW5pdGlhbCcpIHtcblx0XHRcdFx0XHQgICAgICAgICAgICAgICAgdGhpcy4kZGF0YS5lZGl0X2luaXRhbF9ldmVudCA9IGV2ZW50bGlzdFtpXTtcblx0XHRcdFx0XHQgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50bGlzdFtpXS5ldmVudF9pZCA9PSAnYmVmb3JlX3NlbGVjdF9jb21wb3NlJykge1xuXHRcdFx0XHRcdCAgICAgICAgICAgICAgICB0aGlzLiRkYXRhLmVkaXRfc2VsZWN0X2NvbXBvc2VfZXZlbnQgPSBldmVudGxpc3RbaV0uc2NyaXBfaWQ7XG5cdFx0XHRcdFx0ICAgICAgICAgICAgICAgIHRoaXMuJGRhdGEuZWRpdF9jb21wb3NlX2Nsc19pZCA9IGV2ZW50bGlzdFtpXS5jb21wb3NlX2Nsc19pZDtcblx0XHRcdFx0XHQgICAgICAgICAgICB9XG5cdFx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHJlcSk7XG5cdFx0XHRcdFx0aWYgKHRoaXMuJGRhdGEuZWRpdF9pbml0YWxfZXZlbnQpIHtcblx0XHRcdFx0XHQgICAgdmFyIGV2ZW50aWQgPSB0aGlzLiRkYXRhLmVkaXRfaW5pdGFsX2V2ZW50LnNjcmlwX2lkO1xuXHRcdFx0XHRcdCAgICB2YXIgaW5mbyA9IHtcblx0XHRcdFx0XHQgICAgICAgIGV2ZW50aWQ6IGV2ZW50aWQsXG5cdFx0XHRcdFx0ICAgICAgICBlZHR5cGU6IFwiMFwiLFxuXHRcdFx0XHRcdCAgICAgICAgcHJvamVjdGlkOiAnJyxcblx0XHRcdFx0XHQgICAgICAgIHJjbHNpZDogJycsXG5cdFx0XHRcdFx0ICAgICAgICByb2JqaWQ6ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgdXNlcmxvZ2luOiAnJyxcblx0XHRcdFx0XHQgICAgICAgIGNsc2lkOiB0aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuSUQsXG5cdFx0XHRcdFx0ICAgICAgICBvYmppZDogXCJcIixcblx0XHRcdFx0XHQgICAgICAgIGF0dHI6IHJlcSxcblx0XHRcdFx0XHQgICAgfVxuXHRcdFx0XHRcdCAgICB0aGlzLnNjYW5faW5pX0RhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc29sZS5sb2codGhpcy4kZGF0YS5zdWJDbGFzc0dyaWRTdHlsZSk7XG5cdFx0XHRcdFx0Y29uc29sZS5sb2codGhpcy4kZGF0YS5zdWJDbGFzc0F0dHJMaXN0KTtcblx0XHRcdFx0XHRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCLmnKrmib7liLDlj6/mmL7npLrnmoTnmoTlsZ7mgKdcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGluaV9EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbyl7XG5cdFx0XHRcdHZhciBwYXJhbSA9IHtcblx0XHRcdFx0ICAgIEVkaXRTdHlsZTogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLlZpZXdfU3R5bGUuTmFtZSxcblx0XHRcdFx0ICAgIFZpZXdTdHlsZTogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLlZpZXdfU3R5bGUuTmFtZSxcblx0XHRcdFx0ICAgIE5vdFRyaWdnZXJTeXNFdmVudDogMCxcblx0XHRcdFx0ICAgIGVudmlyb21lbnQ6IHtcblx0XHRcdFx0ICAgICAgICAnZnVuY3Rpb24nOiAnMzAwMCcsIC8vIOWKn+iDveeCuee8luWPt1xuXHRcdFx0XHQgICAgICAgIGNsc19pZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELCAgICAgLy8g5Yqf6IO954K55Li75pWw5o2u57G75qCH6K+GXG5cdFx0XHRcdCAgICAgICAgJ2J1dHRvbic6ICd0b3AnLCAgIC8vIHRvcC9ib3R0b21cblx0XHRcdFx0ICAgICAgICBidXR0b25fbmFtZTogJ+aWsOWinicsXG5cdFx0XHRcdCAgICAgICAgbWFzdGVyOiB7XG5cdFx0XHRcdCAgICAgICAgICAgIGNsc19pZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELCAvLyBidXR0b249Ym90dG9t5pe2IG1hc3RlcueahGNsc19pZFxuXHRcdFx0XHQgICAgICAgICAgICAvL29ial9pZDogJycgIC8vIGJ1dHRvbj1ib3R0b23ml7YgbWFzdGVy55qEb2JqX2lkXG5cdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHQgICAgfVxuXHRcdFx0XHR9XG5cdFx0XHRcdHZhciBpbnB1dHBhcmFtZXRlciA9ICcnO1xuXHRcdFx0XHR2YXIgZ2xvYmFsX2F0dHIgPSAnJztcblx0XHRcdFx0XG5cdFx0XHRcdHZhciBkYXRhSW5mbyA9IHtcbiAgICAgICAgICAgICAgICAgICAgZWR0eXBlOiBpbmZvLmVkdHlwZSwgZXZlbnRpZDogaW5mby5ldmVudGlkLCBwcm9qZWN0aWQ6IGluZm8ucHJvamVjdGlkLFxuICAgICAgICAgICAgICAgICAgICByY2xzaWQ6IGluZm8ucmNsc2lkLCByb2JqaWQ6IGluZm8ucm9iamlkLCB1c2VybG9naW46IGluZm8udXNlcmxvZ2luLCBjbHNpZDogaW5mby5jbHNpZCwgb2JqaWQ6IGluZm8ub2JqaWQsXG4gICAgICAgICAgICAgICAgICAgIGF0dHI6IEpTT04uc3RyaW5naWZ5KGluZm8uYXR0ciksIGV4dGluZm86IEpTT04uc3RyaW5naWZ5KHBhcmFtKSwgaW5wdXRwYXJhbWV0ZXI6IGlucHV0cGFyYW1ldGVyLCBnbG9iYWxfYXR0cjogZ2xvYmFsX2F0dHJcbiAgICAgICAgICAgICAgICB9XG5cdFx0XHRcdGNvbnNvbGUubG9nKGRhdGFJbmZvKTtcblx0XHRcdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ0RhdGFPYmpSdW5DdXN0b21FdmVudEluZm8nLGRhdGFJbmZvKS50aGVuKHN1Y2Nlc3M9Pntcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhzdWNjZXNzKTtcblx0XHRcdFx0XHRpZiAoc3VjY2Vzcy5jb2RlPT0nMDAwMDAnKSB7XG5cdFx0XHRcdFx0XHR2YXIgZGF0YSA9IEpTT04ucGFyc2Uoc3VjY2Vzcy5kYXRhKTtcblx0XHRcdFx0XHRcdHZhciBhY3Rpb25saXN0ID0gZGF0YS5hY3Rpb247XG5cdFx0XHRcdFx0XHRpZiAoYWN0aW9ubGlzdCkge1xuXHRcdFx0XHRcdFx0ICAgIGZvciAodmFyIGogPSAwOyBqIDwgYWN0aW9ubGlzdC5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0ICAgICAgICB2YXIgYWN0aW9uID0gYWN0aW9ubGlzdFtqXVxuXHRcdFx0XHRcdFx0ICAgICAgICB2YXIgYWN0aW9uX3R5cGUgPSBhY3Rpb24uYWN0aW9uX3R5cGU7XG5cdFx0XHRcdFx0XHQgICAgICAgIHZhciB2YWx1ZSA9IGFjdGlvbi52YWx1ZTtcblx0XHRcdFx0XHRcdCAgICAgICAgaWYgKGFjdGlvbl90eXBlID09ICdzZXRfZGxnX2F0dHInKSB7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICBpZiAodmFsdWUpIHtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICB2YXIgdmFsID0gdmFsdWU7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykge1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICB2YWwgPSBKU09OLnBhcnNlKHZhbHVlKTtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKHZhbCk7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBhID0gMDsgYSA8IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdC5sZW5ndGg7IGErKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgbCA9IDA7IGwgPCB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbYV0uQXR0ci5sZW5ndGg7IGwrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgY2EgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbYV0uQXR0cltsXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKHZhbFtpXS5hdHRyICA9PSBjYS5OYW1lKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY2EuVHlwZT09J+Wtl+WFuCcgfHwgY2EuVHlwZT09J+Wtl+WFuC3lrZfnrKbkuLInKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBkaWN0SXRlbUxpc3Q9W107XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGQgaW4gdmFsW2ldLmNob2ljZV9saXN0KXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHZhbCA9dmFsW2ldLmNob2ljZV9saXN0W2RdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkaWN0SXRlbUxpc3QucHVzaCh7XCJDTl9TX05BTUVcIjp2YWwsXCJOYW1lXCI6dmFsLFwibGFiZWxcIjp2YWwsXCJ2YWx1ZVwiOnZhbH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLmRpY3RpdGVtID0gZGljdEl0ZW1MaXN0O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gYXR0cltqXS5kaWN0aXRlbSA9IHZhbFtpXS5jaG9pY2VfbGlzdDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGNhLnZhbHVlID0gdmFsW2ldLnZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IDA7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUuZmlsdGVyKGZ1bmN0aW9uIChzKSB7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsW2ldLmF0dHIgPT0gcy5hdHRyXG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIH0pLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gMTtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLnB1c2godmFsW2ldKTtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgfVxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICBpZiAobGVuZ3RoID09IDApIHtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0uYXR0ciA9PSB2YWxbaV0uYXR0cikge1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS52YWx1ZSA9IHZhbFtpXS52YWx1ZTtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIH1cblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICB9XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICB9XG5cdFx0XHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHRcdCAgICAgICAgaWYgKGFjdGlvbl90eXBlID09ICdvcGVuX3NlbGVjdF91c2VyZGxnJykge1xuXHRcdFx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68yLjJcIixjb250ZW50Olwib3Blbl9zZWxlY3RfdXNlcmRsZ+i/meS4qmFjdGlvbl90eXBl6L+Y5pyq5aSE55CG77yBXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHRcdCAgICB9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcblx0XHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMlwiLGNvbnRlbnQ6c3VjY2Vzcy5tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KS5jYXRjaChleD0+e1xuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzIuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0sXG5cdFx0ICAgIERhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvLGRhdGFfYXR0cil7XG5cdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cdFx0ICAgIFx0dmFyIGVudmlyb21lbnQgPSB7XG5cdFx0ICAgIFx0ICAgICdmdW5jdGlvbic6ICczMDAwJywgLy8g5Yqf6IO954K557yW5Y+3XG5cdFx0ICAgIFx0ICAgIGNsc19pZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELCAgICAgLy8g5Yqf6IO954K55Li75pWw5o2u57G75qCH6K+GXG5cdFx0ICAgIFx0ICAgICdidXR0b24nOiAndG9wJywgICAvLyB0b3AvYm90dG9tXG5cdFx0ICAgIFx0ICAgIGJ1dHRvbl9uYW1lOiAn5paw5aKeJyxcblx0XHQgICAgXHQgICAgbWFzdGVyOiB7XG5cdFx0ICAgIFx0ICAgICAgICBjbHNfaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCwgLy8gYnV0dG9uPWJvdHRvbeaXtiBtYXN0ZXLnmoRjbHNfaWRcblx0XHQgICAgXHQgICAgICAgIC8vb2JqX2lkOiAnJyAgLy8gYnV0dG9uPWJvdHRvbeaXtiBtYXN0ZXLnmoRvYmpfaWRcblx0XHQgICAgXHQgICAgfVxuXHRcdCAgICBcdH07XG5cdFx0XHRcdGVudmlyb21lbnQuZWRpdF9kbGcgPSB7XG5cdFx0XHRcdCAgICB0eXBlOiAnc21hbGwnLC8v5bCP56qX5Y+jXG5cdFx0XHRcdCAgICBjbGFzc19pZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELC8v5b2T5YmN5pWw5o2u57G7aWRcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZGF0YV9hdHRyKSB7XG5cdFx0XHRcdCAgICBlbnZpcm9tZW50LmVkaXRfZGxnLmZvcm1fY29udHJvbCA9IHsvL+aJgOWxnueahOihqOWNleaOp+S7tlxuXHRcdFx0XHQgICAgICAgIG5hbWU6IGRhdGFfYXR0ci5OYW1lLC8v5a2X5q615bGe5oCnXG5cdFx0XHRcdCAgICAgICAgdGV4dDogZGF0YV9hdHRyLkRpc3BOYW1lLC8v5pi+56S65paH5pysXG5cdFx0XHRcdCAgICAgICAgZ3JvdXBfbmFtZTogZGF0YV9hdHRyLkdyb3VwTmFtZSwvL+WxnuaAp+e7hFxuXHRcdFx0XHQgICAgICAgIHR5cGU6IGRhdGFfYXR0ci5UeXBlLC8v5a2X5q6157G75Z6LXG5cdFx0XHRcdCAgICAgICAgcmVhZG9ubHk6IGRhdGFfYXR0ci5SZWFkT25seSwvL+aYr+WQpuWPquivu1xuXHRcdFx0XHQgICAgICAgIGJ1dHRvbl9pbWc6IGRhdGFfYXR0ci5idXR0b25faW1nLC8v5byV55So5oyJ6ZKu55qE5Zu+5qCHXG5cdFx0XHRcdCAgICAgICAgYnV0dG9uX3Rvb2x0aXA6IGRhdGFfYXR0ci5idXR0b25fdG9vbHRpcC8v5byV55So5oyJ6ZKu55qEdG9vbHRpcFxuXHRcdFx0XHQgICAgfVxuXHRcdFx0XHR9XG5cdFx0ICAgIFx0dmFyIGRhdGFJbmZvID0ge1xuXHRcdCAgICAgICAgICAgIGVkdHlwZTogaW5mby5lZHR5cGUsIGV2ZW50aWQ6IGluZm8uZXZlbnRpZCwgcHJvamVjdGlkOiBpbmZvLnByb2plY3RpZC5yZXBsYWNlKCd7JywnJykucmVwbGFjZSgnfScsJycpLFxuXHRcdCAgICAgICAgICAgIHJjbHNpZDogaW5mby5yY2xzaWQsIHJvYmppZDogaW5mby5yb2JqaWQsIHVzZXJsb2dpbjogaW5mby51c2VybG9naW4sIGNsc2lkOiBpbmZvLmNsc2lkLCBvYmppZDogaW5mby5vYmppZCxcblx0XHQgICAgICAgICAgICBhdHRyOiBKU09OLnN0cmluZ2lmeShpbmZvLmF0dHIpLCBleHRpbmZvOiBKU09OLnN0cmluZ2lmeShlbnZpcm9tZW50KSwgaW5wdXRwYXJhbWV0ZXI6ICcnLCBnbG9iYWxfYXR0cjogSlNPTi5zdHJpbmdpZnkodGhpcy4kZGF0YS5nbG9iYWxfYXR0cilcblx0XHQgICAgICAgIH1cblx0XHQgICAgXHRjb25zb2xlLmxvZyhkYXRhSW5mbyk7XG5cdFx0ICAgIFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ0RhdGFPYmpSdW5DdXN0b21FdmVudEluZm8nLGRhdGFJbmZvKS50aGVuKHN1Y2Nlc3M9Pntcblx0XHQgICAgXHRcdGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xuXHRcdCAgICBcdFx0aWYgKHN1Y2Nlc3MuY29kZT09JzAwMDAwJykge1xuXHRcdFx0XHRcdFx0dmFyIGRhdGEgPSBKU09OLnBhcnNlKHN1Y2Nlc3MuZGF0YSk7XG5cdFx0ICAgIFx0XHRcdHZhciBhY3Rpb25saXN0ID0gZGF0YS5hY3Rpb247XG5cdFx0XHRcdFx0XHRcdFx0XHRcblx0XHQgICAgXHRcdFx0aWYgKGFjdGlvbmxpc3QpIHtcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coYWN0aW9ubGlzdCk7XG5cdFx0ICAgIFx0XHRcdCAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFjdGlvbmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICB2YXIgYWN0aW9uID0gYWN0aW9ubGlzdFtpXTtcblx0XHQgICAgXHRcdFx0ICAgICAgICBpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdzZXRfZGxnX2F0dHInKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgIHZhciByZXN1bHQgPSBhY3Rpb24udmFsdWU7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKHJlc3VsdFtpXS5jaG9pY2VfbGlzdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGMgPSAwOyBjIDwgJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdC5sZW5ndGg7IGMrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGF0dHIgPSAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2NdLkF0dHI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoYXR0cltqXS5OYW1lPT1yZXN1bHRbaV0uYXR0cil7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoYXR0cltqXS5UeXBlPT0n5a2X5YW4JyB8fCBhdHRyW2pdLlR5cGU9PSflrZflhbgt5a2X56ym5LiyJyl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZGljdEl0ZW1MaXN0PVtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBkIGluIHJlc3VsdFtpXS5jaG9pY2VfbGlzdCl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciB2YWwgPXJlc3VsdFtpXS5jaG9pY2VfbGlzdFtkXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGljdEl0ZW1MaXN0LnB1c2goe1wiQ05fU19OQU1FXCI6dmFsLFwiTmFtZVwiOnZhbCxcImxhYmVsXCI6dmFsLFwidmFsdWVcIjp2YWx9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGF0dHJbal0uZGljdGl0ZW0gPSBkaWN0SXRlbUxpc3Q7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBhdHRyW2pdLmRpY3RpdGVtID0gcmVzdWx0W2ldLmNob2ljZV9saXN0O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGMgPSAwOyBjIDwgJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdC5sZW5ndGg7IGMrKykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgXHR2YXIgYXR0ciA9ICR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbY10uQXR0cjtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhhdHRyW2pdLk5hbWUrJz09JytyZXN1bHRbaV0uYXR0cik7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBcdFx0aWYoYXR0cltqXS5OYW1lPT1yZXN1bHRbaV0uYXR0cil7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBcdFx0XHRhdHRyW2pdLlZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgXHRcdH1cblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIFx0fVxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgbGVuZ3RoID0gMDtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIGlmICghJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmZpbHRlcihmdW5jdGlvbiAocykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRbaV0uYXR0ciA9PSBzLmF0dHJcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIH0pLmxlbmd0aCkge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IDE7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLnB1c2gocmVzdWx0W2ldKTtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIGlmIChsZW5ndGggPT0gMCkge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmxlbmd0aDsgaisrKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0uYXR0ciA9PSByZXN1bHRbaV0uYXR0cikge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLnZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgfSBlbHNlIGlmIChkYXRhLmFjdGlvbltpXS5hY3Rpb25fdHlwZSA9PSAnc2V0X2dsb2JhbF9hdHRyJykge1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgJHRoaXMuJGRhdGEuZ2xvYmFsX2F0dHIgPSBkYXRhLmFjdGlvbltpXS52YWx1ZSB8fCBbXTtcblx0XHRcdFx0XHRcdCAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgfVxuXHRcdCAgICBcdFx0XHR9XG5cdFx0ICAgIFx0XHRcdFxuXHRcdCAgICBcdFx0XHRpZiAoZGF0YS5yZXN1bHQpIHtcblx0XHQgICAgXHRcdFx0ICAgIHZhciByZXN1bHQgPSBkYXRhLnJlc3VsdDtcblx0XHQgICAgXHRcdFx0ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgZm9yICh2YXIgYyA9IDA7IGMgPCAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0Lmxlbmd0aDsgYysrKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgXHR2YXIgYXR0ciA9ICR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbY10uQXR0cjtcblx0XHQgICAgXHRcdFx0ICAgICAgICBcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgIFx0XHRpZihhdHRyW2pdLk5hbWU9PXJlc3VsdFtpXS5hdHRyKXtcblx0XHQgICAgXHRcdFx0ICAgICAgICBcdFx0XHRhdHRyW2pdLlZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xuXHRcdCAgICBcdFx0XHQgICAgICAgIFx0XHR9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgXHR9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdHZhciBsZW5ndGggPSAwO1xuXHRcdCAgICBcdFx0XHQgICAgICAgIGlmICghJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmZpbHRlcihmdW5jdGlvbiAocykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICByZXR1cm4gcmVzdWx0W2ldLmF0dHIgPT0gcy5hdHRyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgfSkubGVuZ3RoKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgIGxlbmd0aCA9IDE7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5wdXNoKHJlc3VsdFtpXSk7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgICAgIGlmIChsZW5ndGggPT0gMCkge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8ICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGg7IGorKykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgaWYgKCR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS5hdHRyID09IHJlc3VsdFtpXS5hdHRyKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLnZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgfVxuXHRcdCAgICBcdFx0XHR9XG5cdFx0ICAgIFx0XHR9ZWxzZXtcblx0XHQgICAgXHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68zXCIsY29udGVudDpzdWNjZXNzLm1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHQgICAgXHRcdH1cblx0XHQgICAgXHR9KS5jYXRjaChleD0+e1xuXHRcdCAgICBcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xuXHRcdCAgICBcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68zLjFcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHQgICAgXHR9KTtcblx0XHQgICAgfSxcblx0XHRcdE9LRGF0YU9ialJ1bkN1c3RvbUV2ZW50KCl7XG5cdFx0ICAgIFx0dmFyIGVudmlyb21lbnQgPSB7XG5cdFx0XHRcdCAgICAnZnVuY3Rpb24nOiAnMzAwMCcsIC8vIOWKn+iDveeCuee8luWPt1xuXHRcdFx0XHQgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsICAgICAvLyDlip/og73ngrnkuLvmlbDmja7nsbvmoIfor4Zcblx0XHRcdFx0ICAgICdidXR0b24nOiAndG9wJywgICAvLyB0b3AvYm90dG9tXG5cdFx0XHRcdCAgICBidXR0b25fbmFtZTogJ+aWsOWinicsXG5cdFx0XHRcdCAgICBtYXN0ZXI6IHtcblx0XHRcdFx0ICAgICAgICBjbHNfaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCwgLy8gYnV0dG9uPWJvdHRvbeaXtiBtYXN0ZXLnmoRjbHNfaWRcblx0XHRcdFx0ICAgICAgICBcblx0XHRcdFx0ICAgIH1cblx0XHRcdFx0fTtcblx0XHQgICAgXHRcblx0XHRcdFx0dmFyIGV2ZW50aWQgPSB0aGlzLiRkYXRhLmVkaXRfb2tfZXZlbnQuc2NyaXBfaWQ7XG5cdFx0XHRcdHZhciByZXE9W107XG5cdFx0XHRcdHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdDtcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdHZhciBhdHRyID0gYXR0cmxpc3RbaV0uQXR0cjtcblx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdHZhciBhciA9IGF0dHJbal07XG5cdFx0XHRcdFx0XHRpZihhci5WYWx1ZT09J+ivt+mAieaLqScgfHwgYXIuVmFsdWU9PSfigJTigJTor7fpgInmi6nigJTigJQnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0XHRcdGlmKGFyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpXG5cdFx0XHRcdFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdCAgICAgICAgaWYoYXIuVHlwZT09J+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZT09J+W8leeUqOmhueebricpXG5cdFx0XHRcdCAgICAgICAgXHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWxJRCA/YXIuVmFsSUQgOicnIH0pO1xuXHRcdFx0XHQgICAgICAgIGVsc2UgaWYoYXIuVHlwZT09J+W4g+WwlOWAvCcpXG5cdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlPycxJzonMCd9KTtcblx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWUgfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdFxuXHRcdCAgICBcdGlmICh0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGggPiAwKSB7XG5cdFx0ICAgIFx0ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUubGVuZ3RoOyBpKyspIHtcblx0XHQgICAgXHQgICAgICAgIGlmICghcmVxLmZpbHRlcihmdW5jdGlvbiAocykge1xuXHRcdCAgICBcdCAgICAgICAgICAgIHJldHVybiB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtpXS5hdHRyID09IHMubmFtZVxuXHRcdCAgICBcdCAgICAgICAgfSkubGVuZ3RoKSB7XG5cdFx0ICAgIFx0ICAgICAgICAgICAgbGVuZ3RoID0gMTtcblx0XHQgICAgXHQgICAgICAgICAgICByZXEucHVzaCh7ICdhdHRyJzogdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbaV0uYXR0ciwgJ3ZhbHVlJzogdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbaV0udmFsdWUgfSk7XG5cdFx0ICAgIFx0ICAgICAgICB9XG5cdFx0ICAgIFx0ICAgIH1cblx0XHQgICAgXHR9XG5cdFx0ICAgIFx0dmFyIGluZm8gPSB7XG5cdFx0ICAgIFx0ICAgIGV2ZW50aWQ6IGV2ZW50aWQsXG5cdFx0ICAgIFx0ICAgIGVkdHlwZTogXCIwXCIsXG5cdFx0ICAgIFx0ICAgIHByb2plY3RpZDogJycsXG5cdFx0ICAgIFx0ICAgIHJjbHNpZDogJycsXG5cdFx0ICAgIFx0ICAgIHJvYmppZDogJycsXG5cdFx0ICAgIFx0ICAgIHVzZXJsb2dpbjogJycsXG5cdFx0ICAgIFx0ICAgIGNsc2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsXG5cdFx0ICAgIFx0ICAgIG9iamlkOiBcIlwiLFxuXHRcdCAgICBcdCAgICBhdHRyOiByZXEsXG5cdFx0ICAgIFx0fVxuXHRcdCAgICBcdHZhciBkYXRhSW5mbyA9IHtcblx0XHQgICAgICAgICAgICBlZHR5cGU6IGluZm8uZWR0eXBlLCBldmVudGlkOiBpbmZvLmV2ZW50aWQsIHByb2plY3RpZDogaW5mby5wcm9qZWN0aWQscmNsc2lkOiBpbmZvLnJjbHNpZCwgXG5cdFx0XHRcdFx0cm9iamlkOiBpbmZvLnJvYmppZCwgdXNlcmxvZ2luOiBpbmZvLnVzZXJsb2dpbiwgY2xzaWQ6IGluZm8uY2xzaWQsIG9iamlkOiBpbmZvLm9iamlkLFxuXHRcdFx0XHRcdGF0dHI6IEpTT04uc3RyaW5naWZ5KGluZm8uYXR0ciksIGV4dGluZm86IEpTT04uc3RyaW5naWZ5KGVudmlyb21lbnQpLCBnbG9iYWxfYXR0cjogSlNPTi5zdHJpbmdpZnkodGhpcy4kZGF0YS5nbG9iYWxfYXR0cilcblx0XHQgICAgICAgIH1cblx0XHQgICAgXHRjb25zb2xlLmxvZyhkYXRhSW5mbyk7XG5cdFx0ICAgIFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ0RhdGFPYmpSdW5DdXN0b21FdmVudEluZm8nLGRhdGFJbmZvKS50aGVuKHN1Y2Nlc3M9Pntcblx0XHQgICAgXHRcdGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xuXHRcdCAgICBcdFx0aWYgKHN1Y2Nlc3MuY29kZT09JzAwMDAwJykge1xuXHRcdFx0XHRcdFx0dmFyIGRhdGEgPSBKU09OLnBhcnNlKHN1Y2Nlc3MuZGF0YSk7XHRcdFxuXHRcdCAgICBcdFx0XHR2YXIgcmVzdWx0ID0gZGF0YS5yZXN1bHQ7XG5cdFx0ICAgIFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAvLyBzZWxmLmNsYXNzX2F0dHJfZWxlLmZpbmQoJy5hdHRyX2ZpZWxkW2RhdGEtZmllbGQ9XCInICsgcmVzdWx0W2ldLmF0dHIgKyAnXCJdJykudmFsKHJlc3VsdFtpXS52YWx1ZSkuZGF0YSgndmFsJywgcmVzdWx0W2ldLnZhbHVlKTtcblx0XHQgICAgXHRcdFx0ICAgIHZhciBsZW5ndGggPSAwO1xuXHRcdCAgICBcdFx0XHQgICAgaWYgKCF0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5maWx0ZXIoZnVuY3Rpb24gKHMpIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICByZXR1cm4gcmVzdWx0W2ldLmF0dHIgPT0gcy5hdHRyXG5cdFx0ICAgIFx0XHRcdCAgICB9KS5sZW5ndGgpIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICBsZW5ndGggPSAxO1xuXHRcdCAgICBcdFx0XHQgICAgICAgIHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLnB1c2gocmVzdWx0W2ldKTtcblx0XHQgICAgXHRcdFx0ICAgIH1cblx0XHQgICAgXHRcdFx0ICAgIGlmIChsZW5ndGggPT0gMCkge1xuXHRcdCAgICBcdFx0XHQgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUubGVuZ3RoOyBqKyspIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgaWYgKHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLmF0dHIgPT0gcmVzdWx0W2ldLmF0dHIpIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLnZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgfVxuXHRcdCAgICBcdFx0XHR9XG5cdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdHRoaXMuYWRkKCk7XG5cdFx0ICAgIFx0XHR9ZWxzZXtcblx0XHQgICAgXHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor680XCIsY29udGVudDpzdWNjZXNzLm1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHQgICAgXHRcdH1cblx0XHQgICAgXHR9KS5jYXRjaChleD0+e1xuXHRcdCAgICBcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xuXHRcdCAgICBcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor680LjFcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHQgICAgXHR9KTtcblx0XHQgICAgfSxcblx0XHQgICAgRGF0YU9ialJ1bkN1c3RvbUV2ZW50X1JldHVybihldmVudGlkLGRhdGFfYXR0cixidXR0b25fY2FsbGJhY2ssaW5kZXgsaWluZGV4KXtcblx0XHRcdFx0dmFyIGVudmlyb21lbnQgPSB7XG5cdFx0XHRcdCAgICAnZnVuY3Rpb24nOiAnMzAwMCcsIC8vIOWKn+iDveeCuee8luWPt1xuXHRcdFx0XHQgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsICAgICAvLyDlip/og73ngrnkuLvmlbDmja7nsbvmoIfor4Zcblx0XHRcdFx0ICAgICdidXR0b24nOiAndG9wJywgICAvLyB0b3AvYm90dG9tXG5cdFx0XHRcdCAgICBidXR0b25fbmFtZTogJ+aWsOWinicsXG5cdFx0XHRcdCAgICBtYXN0ZXI6IHtcblx0XHRcdFx0ICAgICAgICBjbHNfaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCwgLy8gYnV0dG9uPWJvdHRvbeaXtiBtYXN0ZXLnmoRjbHNfaWRcblx0XHRcdFx0ICAgICAgICAvL29ial9pZDogJycgIC8vIGJ1dHRvbj1ib3R0b23ml7YgbWFzdGVy55qEb2JqX2lkXG5cdFx0XHRcdCAgICB9XG5cdFx0XHRcdH07XG5cdFx0XHRcdHZhciByZXE9W107XG5cdFx0XHRcdHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdDtcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdHZhciBhdHRyID0gYXR0cmxpc3RbaV0uQXR0cjtcblx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdHZhciBhciA9IGF0dHJbal07XG5cdFx0XHRcdFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxuXHRcdFx0XHRcdFx0XHRpZihhci5WYWx1ZT09J+ivtycpIGFyLlZhbHVlPScnO1xuXHRcdFx0XHQgICAgICAgIGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxuXHRcdFx0XHQgICAgICAgIFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsSUQgP2FyLlZhbElEIDonJyB9KTtcblx0XHRcdFx0ICAgICAgICBlbHNlIGlmKGFyLlR5cGU9PSfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZT8nMSc6JzAnfSk7XG5cdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlIH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUubGVuZ3RoID4gMCkge1xuXHRcdFx0XHQgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHQgICAgICAgIGlmICghcmVxLmZpbHRlcihmdW5jdGlvbiAocykge1xuXHRcdFx0XHQgICAgICAgICAgICByZXR1cm4gdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbaV0uYXR0ciA9PSBzLm5hbWVcblx0XHRcdFx0ICAgICAgICB9KS5sZW5ndGgpIHtcblx0XHRcdFx0ICAgICAgICAgICAgbGVuZ3RoID0gMTtcblx0XHRcdFx0ICAgICAgICAgICAgcmVxLnB1c2goeyAnYXR0cic6IHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2ldLmF0dHIsICd2YWx1ZSc6IHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2ldLnZhbHVlIH0pO1xuXHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0ICAgIH1cblx0XHRcdFx0fVxuXHRcdFx0XHR2YXIgZXh0aW5mbyA9IGVudmlyb21lbnQ7XG5cdFx0XHRcdGV4dGluZm8uZWRpdF9kbGcgPSB7XG5cdFx0XHRcdCAgICB0eXBlOiAnc21hbGwnLC8v5bCP56qX5Y+jXG5cdFx0XHRcdCAgICBjbGFzc19pZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELC8v5b2T5YmN5pWw5o2u57G7aWRcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZGF0YV9hdHRyKSB7XG5cdFx0XHRcdCAgICBleHRpbmZvLmVkaXRfZGxnLmZvcm1fY29udHJvbCA9IHsvL+aJgOWxnueahOihqOWNleaOp+S7tlxuXHRcdFx0XHQgICAgICAgIG5hbWU6IGRhdGFfYXR0ci5OYW1lLC8v5a2X5q615bGe5oCnXG5cdFx0XHRcdCAgICAgICAgdGV4dDogZGF0YV9hdHRyLkRpc3BOYW1lLC8v5pi+56S65paH5pysXG5cdFx0XHRcdCAgICAgICAgZ3JvdXBfbmFtZTogZGF0YV9hdHRyLkdyb3VwTmFtZSwvL+WxnuaAp+e7hFxuXHRcdFx0XHQgICAgICAgIHR5cGU6IGRhdGFfYXR0ci5UeXBlLC8v5a2X5q6157G75Z6LXG5cdFx0XHRcdCAgICAgICAgcmVhZG9ubHk6IGRhdGFfYXR0ci5SZWFkT25seSwvL+aYr+WQpuWPquivu1xuXHRcdFx0XHQgICAgICAgIGJ1dHRvbl9pbWc6IGRhdGFfYXR0ci5idXR0b25faW1nLC8v5byV55So5oyJ6ZKu55qE5Zu+5qCHXG5cdFx0XHRcdCAgICAgICAgYnV0dG9uX3Rvb2x0aXA6IGRhdGFfYXR0ci5idXR0b25fdG9vbHRpcC8v5byV55So5oyJ6ZKu55qEdG9vbHRpcFxuXHRcdFx0XHQgICAgfVxuXHRcdFx0XHR9XG5cdFx0XHRcdHZhciBkYXRhSW5mbyA9IHtcblx0XHRcdFx0XHRlZHR5cGU6ICBcIjBcIiwgZXZlbnRpZDogZXZlbnRpZCwgcHJvamVjdGlkOiAnJyxyY2xzaWQ6ICcnLCByb2JqaWQ6ICcnLCB1c2VybG9naW46ICcnLCBcblx0XHRcdFx0XHRjbHNpZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELCBvYmppZDogJycsYXR0cjogSlNPTi5zdHJpbmdpZnkocmVxKSwgXG5cdFx0XHRcdFx0ZXh0aW5mbzogSlNPTi5zdHJpbmdpZnkoZXh0aW5mbyksIGdsb2JhbF9hdHRyOiBKU09OLnN0cmluZ2lmeSh0aGlzLiRkYXRhLmdsb2JhbF9hdHRyKVxuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnNvbGUubG9nKGRhdGFJbmZvKTtcblx0XHRcdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ0RhdGFPYmpSdW5DdXN0b21FdmVudEluZm8nLGRhdGFJbmZvKS50aGVuKHN1Y2Nlc3M9Pntcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhzdWNjZXNzKTtcblx0XHRcdFx0XHRpZiAoc3VjY2Vzcy5jb2RlPT0nMDAwMDAnKSB7XG5cdFx0XHRcdFx0XHR2YXIgZGF0YSA9IEpTT04ucGFyc2Uoc3VjY2Vzcy5kYXRhKTtcblx0XHRcdFx0XHRcdGlmIChkYXRhICE9IFwiXCIpIHtcblx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdHZhciBhY3Rpb25zID0gZGF0YS5hY3Rpb247XG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhhY3Rpb25zKTtcblx0XHRcdFx0XHRcdGlmIChhY3Rpb25zKSB7XG5cdFx0XHRcdFx0XHQgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHQgICAgICAgIHZhciBhY3Rpb24gPSBhY3Rpb25zW2ldO1xuXHRcdFx0XHRcdFx0ICAgICAgICB2YXIgdmFsID0gYWN0aW9uLnZhbHVlO1xuXHRcdFx0XHRcdFx0ICAgICAgICB2YXIgZW52aXJvbWVudCA9IEpTT04uc3RyaW5naWZ5KGVudmlyb21lbnQpO1xuXHRcdFx0XHRcdFx0ICAgICAgICBcblx0XHRcdFx0XHRcdCAgICAgICAgaWYgKGFjdGlvbi5hY3Rpb25fdHlwZSA9PSAnb3Blbl9wYW5lbCcpIHtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgdmFyIGQgPSBkaWFsb2coe1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgdGl0bGU6ICc8aSBjbGFzcz1cImFjZS1pY29uIGZhIGZhLWluZm8tY2lyY2xlXCI+PC9pPiAnICsgJ+aPkOekuicsXG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICBjb250ZW50OiBhY3Rpb24uYWN0aW9uX3R5cGUgKyAn5q2kYWN0aW9u5bCa5pyq5aSE55CG77yBJ1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICB9KTtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgZC5zaG93KCk7XG5cdFx0XHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHRcdCAgICAgICAgZWxzZSBpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdvcGVuX3NlbGVjdF91c2VyZGxnJykge1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgdmFyIHN0eWxlID0gdmFsLnN0eWxlO1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gc3R5bGUgPT0gJ3VzZXInID8gJ+mAieaLqeS6uuWRmCcgOiBzdHlsZSA9PSAnZGVwYXJ0bWVudCcgPyAn6YCJ5oup6YOo6ZeoJyA6IHN0eWxlID09ICdyb2xlJyA/ICfpgInmi6nop5LoibInIDogJydcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIHZhciAkdGhpcyA9IHRoaXM7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW09e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpbmRleDogaW5kZXgsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlpbmRleDppaW5kZXgsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGJ1dHRvbl9jYWxsYmFjazpidXR0b25fY2FsbGJhY2ssXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlcTpyZXEsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGFfYXR0cjpkYXRhX2F0dHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdHVuaS5uYXZpZ2F0ZVRvKHtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIFx0dXJsOicuLi9zZWxwc24vaW5kZXg/bXVsaXQ9ZmFsc2UmcGFyYW09JytKU09OLnN0cmluZ2lmeShwYXJhbSksXG5cdFx0XHRcdFx0XHQgICAgICAgICAgICBcdGV2ZW50czp7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICBcdFx0QWRkUGVyKGRhdGEscGFyYW0peyBcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIFx0XHRcdC8vIGNvbnNvbGUubG9nKHBhcmFtKTtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIFx0XHRcdGNvbnNvbGUubG9nKGRhdGEpO1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgXHRcdFx0dmFyIGNhbGxiYWNrX2V2ZW50aWQgPSBwYXJhbS5idXR0b25fY2FsbGJhY2sudHJpbSgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGluZm8gPSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgZXZlbnRpZDogY2FsbGJhY2tfZXZlbnRpZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICBlZHR5cGU6IFwiMFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgIHByb2plY3RpZDogJycsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgcmNsc2lkOiAnJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICByb2JqaWQ6ICcnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgIHVzZXJsb2dpbjogJycsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgY2xzaWQ6ICR0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgb2JqaWQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgYXR0cjogcGFyYW0ucmVxLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgIGlucHV0cGFyYW1ldGVyOiBkYXRhXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy5EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbywgcGFyYW0uZGF0YV9hdHRyKTtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIFx0XHR9XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICBcdH1cblx0XHRcdFx0XHRcdCAgICAgICAgICAgIH0pO1x0XG5cdFx0XHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHRcdCAgICAgICAgZWxzZSBpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdvcGVuX2RhdGFfcXVlcnlfZGxnJykge1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgXG5cdFx0XHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHRcdCAgICAgICAgZWxzZSBpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdvcGVuX2NvbW1vbl9kbGcnKSB7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICB2YXIgdmFsdWUgPSBhY3Rpb24udmFsdWU7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICB2YXIgZCA9IGRpYWxvZyh7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgdGl0bGU6ICc8aSBjbGFzcz1cImFjZS1pY29uIGZhIGZhLWluZm8tY2lyY2xlXCI+PC9pPiAnICsgJ+aPkOekuicsXG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgY29udGVudDogYWN0aW9uLmFjdGlvbl90eXBlICsgJ+atpGFjdGlvbuWwmuacquWkhOeQhu+8gSdcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIH0pO1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgZC5zaG93KCk7XG5cdFx0XHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHRcdCAgICAgICAgZWxzZSBpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdvcGVuX3Byb2plY3RfcXVlcnlfZGxnJykge1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhhY3Rpb24udmFsdWUuc2VsZWN0X3JhbmdlKTtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIC8vY29uc29sZS5sb2coYWN0aW9uLnZhbHVlLm11bGl0X3NlbGVjdCk7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICB2YXIgcHJpUmVsID0gJy0xJztcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIGlmIChhY3Rpb24udmFsdWUuc2VsZWN0X3JhbmdlID09ICflhajpg6jnm7jlhbMnKVxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgIHByaVJlbCA9ICcwJztcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIGVsc2UgaWYgKGFjdGlvbi52YWx1ZS5zZWxlY3RfcmFuZ2UgPT0gJ+aIkei0n+i0o+eahOmhueebricpXG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgcHJpUmVsID0gJzEnO1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgZWxzZSBpZiAoYWN0aW9uLnZhbHVlLnNlbGVjdF9yYW5nZSA9PSAn5oiR5Yib5bu655qEJylcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICBwcmlSZWwgPSAnMic7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICBlbHNlIGlmIChhY3Rpb24udmFsdWUuc2VsZWN0X3JhbmdlID09ICfmiJHlj4LkuI7nmoQnIHx8IGFjdGlvbi52YWx1ZS5zZWxlY3RfcmFuZ2UgPT0gJ+aIkeWPguWKoOeahCcpXG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgcHJpUmVsID0gJzMnO1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgZWxzZSBpZiAoYWN0aW9uLnZhbHVlLnNlbGVjdF9yYW5nZSA9PSAn5oiR5YWz5rOo55qEJylcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICBwcmlSZWwgPSAnNCc7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICBlbHNlIGlmIChhY3Rpb24udmFsdWUuc2VsZWN0X3JhbmdlID09ICfmiJHkuIvlsZ7nmoTpobnnm64nKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwcmlSZWwgPSAnNSc7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBwYXJhbV89e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpbmRleDogaW5kZXgsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlpbmRleDppaW5kZXgsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGJ1dHRvbl9jYWxsYmFjazpidXR0b25fY2FsbGJhY2ssXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlcTpyZXFcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdHVuaS5uYXZpZ2F0ZVRvKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dXJsOicuLi9zZWxQcmovaW5kZXg/cmVsYXRpb249JytwcmlSZWwrJyZwYXJhbT0nK0pTT04uc3RyaW5naWZ5KHBhcmFtXyksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGV2ZW50czp7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0QWRkUGVyKGRhdGEscGFyYW0peyBcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbcGFyYW0uaW5kZXhdLkF0dHJbcGFyYW0uaWluZGV4XS5WYWx1ZT1kYXRhWzBdLk5hbWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W3BhcmFtLmluZGV4XS5BdHRyW3BhcmFtLmlpbmRleF0uVmFsSUQ9ZGF0YVswXS5JRCsnOycrZGF0YVswXS5OYW1lO1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgXHRcdFx0dmFyIGNhbGxiYWNrX2V2ZW50aWQgPSBwYXJhbS5idXR0b25fY2FsbGJhY2sudHJpbSgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGNhbGxiYWNrX2V2ZW50aWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICB2YXIgaW5mbyA9IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgICAgZXZlbnRpZDogY2FsbGJhY2tfZXZlbnRpZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgICAgZWR0eXBlOiBcIjJcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgICAgcHJvamVjdGlkOiBkYXRhWzBdLklELFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgICByY2xzaWQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgICAgIHJvYmppZDogXCJcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgICAgdXNlcmxvZ2luOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgICBjbHNpZDogJHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgICAgb2JqaWQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgICAgIGF0dHI6IHBhcmFtLnJlcSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICR0aGlzLkRhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0ICAgICAgICB9IGVsc2Uge1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgdmFyIGQgPSBkaWFsb2coe1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgIHRpdGxlOiAnPGkgY2xhc3M9XCJhY2UtaWNvbiBmYSBmYS1pbmZvLWNpcmNsZVwiPjwvaT4gJyArICfmj5DnpLonLFxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGFjdGlvbi5hY3Rpb25fdHlwZSArICfmraRhY3Rpb27lsJrmnKrlpITnkIbvvIEnXG5cdFx0XHRcdFx0XHQgICAgICAgICAgICB9KTtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIGQuc2hvdygpO1xuXHRcdFx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdFx0XHQgICAgfVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6NS4yXCIsY29udGVudDogJ+iwg+eUqCBiZWZvcmVfY2xpY2tfYnV0dG9uIOiEmuacrOi/lOWbnuepuu+8jGV2ZW50X2lkJyArIGV2ZW50aWQsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzVcIixjb250ZW50OnN1Y2Nlc3MubXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSkuY2F0Y2goZXg9Pntcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhleCk7XG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLo1LjFcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0fSk7XG5cdFx0ICAgIH0sXG5cdFx0ICAgIHNjYW5faW5pX0RhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvKXtcblx0XHQgICAgXHR2YXIgcGFyYW0gPSB7XG5cdFx0ICAgIFx0ICAgIEVkaXRTdHlsZTogdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLlZpZXdfU3R5bGUuTmFtZSxcblx0XHQgICAgXHQgICAgVmlld1N0eWxlOiB0aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuVmlld19TdHlsZS5OYW1lLFxuXHRcdCAgICBcdCAgICBOb3RUcmlnZ2VyU3lzRXZlbnQ6IDAsXG5cdFx0ICAgIFx0ICAgIGVudmlyb21lbnQ6IHtcblx0XHQgICAgXHQgICAgICAgICdmdW5jdGlvbic6ICczMDAwJywgLy8g5Yqf6IO954K557yW5Y+3XG5cdFx0ICAgIFx0ICAgICAgICBjbHNfaWQ6IHRoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5JRCwgICAgIC8vIOWKn+iDveeCueS4u+aVsOaNruexu+agh+ivhlxuXHRcdCAgICBcdCAgICAgICAgJ2J1dHRvbic6ICd0b3AnLCAgIC8vIHRvcC9ib3R0b21cblx0XHQgICAgXHQgICAgICAgIGJ1dHRvbl9uYW1lOiAn5paw5aKeJyxcblx0XHQgICAgXHQgICAgICAgIG1hc3Rlcjoge1xuXHRcdCAgICBcdCAgICAgICAgICAgIGNsc19pZDogdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLklELCAvLyBidXR0b249Ym90dG9t5pe2IG1hc3RlcueahGNsc19pZFxuXHRcdCAgICBcdCAgICAgICAgICAgIC8vb2JqX2lkOiAnJyAgLy8gYnV0dG9uPWJvdHRvbeaXtiBtYXN0ZXLnmoRvYmpfaWRcblx0XHQgICAgXHQgICAgICAgIH1cblx0XHQgICAgXHQgICAgfVxuXHRcdCAgICBcdH1cblx0XHQgICAgXHR2YXIgaW5wdXRwYXJhbWV0ZXIgPSAnJztcblx0XHQgICAgXHR2YXIgZ2xvYmFsX2F0dHIgPSAnJztcblx0XHQgICAgXHRcblx0XHQgICAgXHR2YXIgZGF0YUluZm8gPSB7XG5cdFx0ICAgICAgICAgICAgZWR0eXBlOiBpbmZvLmVkdHlwZSwgZXZlbnRpZDogaW5mby5ldmVudGlkLCBwcm9qZWN0aWQ6IGluZm8ucHJvamVjdGlkLFxuXHRcdCAgICAgICAgICAgIHJjbHNpZDogaW5mby5yY2xzaWQsIHJvYmppZDogaW5mby5yb2JqaWQsIHVzZXJsb2dpbjogaW5mby51c2VybG9naW4sIGNsc2lkOiBpbmZvLmNsc2lkLCBvYmppZDogaW5mby5vYmppZCxcblx0XHQgICAgICAgICAgICBhdHRyOiBKU09OLnN0cmluZ2lmeShpbmZvLmF0dHIpLCBleHRpbmZvOiBKU09OLnN0cmluZ2lmeShwYXJhbSksIGlucHV0cGFyYW1ldGVyOiBpbnB1dHBhcmFtZXRlciwgZ2xvYmFsX2F0dHI6IGdsb2JhbF9hdHRyXG5cdFx0ICAgICAgICB9XG5cdFx0ICAgIFx0Y29uc29sZS5sb2coZGF0YUluZm8pO1xuXHRcdCAgICBcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdEYXRhT2JqUnVuQ3VzdG9tRXZlbnRJbmZvJyxkYXRhSW5mbykudGhlbihzdWNjZXNzPT57XG5cdFx0ICAgIFx0XHRjb25zb2xlLmxvZyhzdWNjZXNzKTtcblx0XHQgICAgXHRcdGlmIChzdWNjZXNzLmNvZGU9PScwMDAwMCcpIHtcblx0XHQgICAgXHRcdFx0dmFyIGRhdGEgPSBKU09OLnBhcnNlKHN1Y2Nlc3MuZGF0YSk7XG5cdFx0ICAgIFx0XHRcdHZhciBhY3Rpb25saXN0ID0gZGF0YS5hY3Rpb247XG5cdFx0ICAgIFx0XHRcdGlmIChhY3Rpb25saXN0KSB7XG5cdFx0ICAgIFx0XHRcdCAgICBmb3IgKHZhciBqID0gMDsgaiA8IGFjdGlvbmxpc3QubGVuZ3RoOyBqKyspIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICB2YXIgYWN0aW9uID0gYWN0aW9ubGlzdFtqXVxuXHRcdCAgICBcdFx0XHQgICAgICAgIHZhciBhY3Rpb25fdHlwZSA9IGFjdGlvbi5hY3Rpb25fdHlwZTtcblx0XHQgICAgXHRcdFx0ICAgICAgICB2YXIgdmFsdWUgPSBhY3Rpb24udmFsdWU7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgaWYgKGFjdGlvbl90eXBlID09ICdzZXRfZGxnX2F0dHInKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgdmFyIHZhbCA9IHZhbHVlO1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgIHZhbCA9IEpTT04ucGFyc2UodmFsdWUpO1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgfVxuXHRcdCAgICBcdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKHZhbCk7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xuXHRcdCAgICBcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgYSA9IDA7IGEgPCB0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3QubGVuZ3RoOyBhKyspIHtcblx0XHQgICAgXHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgbCA9IDA7IGwgPCB0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3RbYV0uQXR0ci5sZW5ndGg7IGwrKykge1xuXHRcdCAgICBcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBjYSA9IHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdFthXS5BdHRyW2xdO1xuXHRcdCAgICBcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICh2YWxbaV0uYXR0ciAgPT0gY2EuTmFtZSkge1xuXHRcdCAgICBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY2EuVHlwZT09J+Wtl+WFuCcgfHwgY2EuVHlwZT09J+Wtl+WFuC3lrZfnrKbkuLInKXtcblx0XHQgICAgXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGRpY3RJdGVtTGlzdD1bXTtcblx0XHQgICAgXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBkIGluIHZhbFtpXS5jaG9pY2VfbGlzdCl7XG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHZhbCA9dmFsW2ldLmNob2ljZV9saXN0W2RdO1xuXHRcdCAgICBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRpY3RJdGVtTGlzdC5wdXNoKHtcIkNOX1NfTkFNRVwiOnZhbCxcIk5hbWVcIjp2YWwsXCJsYWJlbFwiOnZhbCxcInZhbHVlXCI6dmFsfSk7XG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHQgICAgXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuZGljdGl0ZW0gPSBkaWN0SXRlbUxpc3Q7XG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGF0dHJbal0uZGljdGl0ZW0gPSB2YWxbaV0uY2hvaWNlX2xpc3Q7XG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9ZWxzZXtcblx0XHQgICAgXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gY2EudmFsdWUgPSB2YWxbaV0udmFsdWU7XG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdCAgICBcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0ICAgIFx0XHRcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0gMDtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmZpbHRlcihmdW5jdGlvbiAocykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsW2ldLmF0dHIgPT0gcy5hdHRyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgfSkubGVuZ3RoKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IDE7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLnB1c2godmFsW2ldKTtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgaWYgKGxlbmd0aCA9PSAwKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUubGVuZ3RoOyBqKyspIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS5hdHRyID09IHZhbFtpXS5hdHRyKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0udmFsdWUgPSB2YWxbaV0udmFsdWU7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgaWYgKGFjdGlvbl90eXBlID09ICdvcGVuX3NlbGVjdF91c2VyZGxnJykge1xuXHRcdCAgICBcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzYuMlwiLGNvbnRlbnQ6XCJvcGVuX3NlbGVjdF91c2VyZGxn6L+Z5LiqYWN0aW9uX3R5cGXov5jmnKrlpITnkIbvvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHQgICAgXHRcdFx0ICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICB9XG5cdFx0ICAgIFx0XHRcdH1cblx0XHQgICAgXHRcdFx0XG5cdFx0ICAgIFx0XHR9ZWxzZXtcblx0XHQgICAgXHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor682XCIsY29udGVudDpzdWNjZXNzLm1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHQgICAgXHRcdH1cblx0XHQgICAgXHR9KS5jYXRjaChleD0+e1xuXHRcdCAgICBcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xuXHRcdCAgICBcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor682LjFcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHQgICAgXHR9KTtcblx0XHQgICAgfSxcblx0XHQgICAgc2Nhbl9EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbyxkYXRhX2F0dHIpe1xuXHRcdCAgICBcdHZhciAkdGhpcyA9IHRoaXM7XG5cdFx0ICAgIFx0dmFyIGVudmlyb21lbnQgPSB7XG5cdFx0ICAgIFx0ICAgICdmdW5jdGlvbic6ICczMDAwJywgLy8g5Yqf6IO954K557yW5Y+3XG5cdFx0ICAgIFx0ICAgIGNsc19pZDogdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLklELCAgICAgLy8g5Yqf6IO954K55LuO5pWw5o2u57G75qCH6K+GXG5cdFx0ICAgIFx0ICAgICdidXR0b24nOiAndG9wJywgICAvLyB0b3AvYm90dG9tXG5cdFx0ICAgIFx0ICAgIGJ1dHRvbl9uYW1lOiAn5paw5aKeJyxcblx0XHQgICAgXHQgICAgbWFzdGVyOiB7XG5cdFx0ICAgIFx0ICAgICAgICBjbHNfaWQ6IHRoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5JRCwgLy8gYnV0dG9uPWJvdHRvbeaXtiBtYXN0ZXLnmoRjbHNfaWRcblx0XHQgICAgXHQgICAgICAgIC8vb2JqX2lkOiAnJyAgLy8gYnV0dG9uPWJvdHRvbeaXtiBtYXN0ZXLnmoRvYmpfaWRcblx0XHQgICAgXHQgICAgfVxuXHRcdCAgICBcdH07XG5cdFx0ICAgIFx0ZW52aXJvbWVudC5lZGl0X2RsZyA9IHtcblx0XHRcdFx0XHR0eXBlOiAnc21hbGwnLC8v5bCP56qX5Y+jXG5cdFx0ICAgIFx0ICAgIGNsYXNzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuSUQsLy/lvZPliY3mlbDmja7nsbtpZFxuXHRcdCAgICBcdH1cblx0XHQgICAgXHRpZiAoZGF0YV9hdHRyKSB7XG5cdFx0ICAgIFx0ICAgIGVudmlyb21lbnQuZWRpdF9kbGcuZm9ybV9jb250cm9sID0gey8v5omA5bGe55qE6KGo5Y2V5o6n5Lu2XG5cdFx0ICAgIFx0ICAgICAgICBuYW1lOiBkYXRhX2F0dHIuTmFtZSwvL+Wtl+auteWxnuaAp1xuXHRcdCAgICBcdCAgICAgICAgdGV4dDogZGF0YV9hdHRyLkRpc3BOYW1lLC8v5pi+56S65paH5pysXG5cdFx0ICAgIFx0ICAgICAgICBncm91cF9uYW1lOiBkYXRhX2F0dHIuR3JvdXBOYW1lLC8v5bGe5oCn57uEXG5cdFx0ICAgIFx0ICAgICAgICB0eXBlOiBkYXRhX2F0dHIuVHlwZSwvL+Wtl+auteexu+Wei1xuXHRcdCAgICBcdCAgICAgICAgcmVhZG9ubHk6IGRhdGFfYXR0ci5SZWFkT25seSwvL+aYr+WQpuWPquivu1xuXHRcdCAgICBcdCAgICAgICAgYnV0dG9uX2ltZzogZGF0YV9hdHRyLmJ1dHRvbl9pbWcsLy/lvJXnlKjmjInpkq7nmoTlm77moIdcblx0XHQgICAgXHQgICAgICAgIGJ1dHRvbl90b29sdGlwOiBkYXRhX2F0dHIuYnV0dG9uX3Rvb2x0aXAvL+W8leeUqOaMiemSrueahHRvb2x0aXBcblx0XHQgICAgXHQgICAgfVxuXHRcdCAgICBcdH1cblx0XHQgICAgXHRcblx0XHQgICAgXHR2YXIgZGF0YUluZm8gPSB7XG5cdFx0ICAgICAgICAgICAgZWR0eXBlOiBpbmZvLmVkdHlwZSwgZXZlbnRpZDogaW5mby5ldmVudGlkLCBwcm9qZWN0aWQ6IGluZm8ucHJvamVjdGlkLnJlcGxhY2UoJ3snLCcnKS5yZXBsYWNlKCd9JywnJyksXG5cdFx0ICAgICAgICAgICAgcmNsc2lkOiBpbmZvLnJjbHNpZCwgcm9iamlkOiBpbmZvLnJvYmppZCwgdXNlcmxvZ2luOiBpbmZvLnVzZXJsb2dpbiwgY2xzaWQ6IGluZm8uY2xzaWQsIG9iamlkOiBpbmZvLm9iamlkLFxuXHRcdCAgICAgICAgICAgIGF0dHI6IEpTT04uc3RyaW5naWZ5KGluZm8uYXR0ciksIGV4dGluZm86IEpTT04uc3RyaW5naWZ5KGVudmlyb21lbnQpLCBpbnB1dHBhcmFtZXRlcjogSlNPTi5zdHJpbmdpZnkoaW5mby5pbnB1dFBhcmFtdGVyKSwgZ2xvYmFsX2F0dHI6IEpTT04uc3RyaW5naWZ5KHRoaXMuJGRhdGEuZ2xvYmFsX2F0dHIpXG5cdFx0ICAgICAgICB9XG5cdFx0ICAgIFx0Y29uc29sZS5sb2coZGF0YUluZm8pO1xuXHRcdCAgICBcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdEYXRhT2JqUnVuQ3VzdG9tRXZlbnRJbmZvJyxkYXRhSW5mbykudGhlbihzdWNjZXNzPT57XG5cdFx0ICAgIFx0XHRjb25zb2xlLmxvZyhzdWNjZXNzKTtcblx0XHQgICAgXHRcdGlmIChzdWNjZXNzLmNvZGU9PScwMDAwMCcpIHtcblx0XHQgICAgXHRcdFx0dmFyIGRhdGEgPSBKU09OLnBhcnNlKHN1Y2Nlc3MuZGF0YSk7XG5cdFx0ICAgIFx0XHRcdHZhciBhY3Rpb25saXN0ID0gZGF0YS5hY3Rpb247XG5cdFx0ICAgIFx0XHRcdFx0XHRcdFxuXHRcdCAgICBcdFx0XHRpZiAoYWN0aW9ubGlzdCkge1xuXHRcdCAgICBcdFx0XHRcdGNvbnNvbGUubG9nKGFjdGlvbmxpc3QpO1xuXHRcdCAgICBcdFx0XHQgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhY3Rpb25saXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgdmFyIGFjdGlvbiA9IGFjdGlvbmxpc3RbaV07XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgaWYgKGFjdGlvbi5hY3Rpb25fdHlwZSA9PSAnc2V0X2RsZ19hdHRyJykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICB2YXIgcmVzdWx0ID0gYWN0aW9uLnZhbHVlO1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykge1xuXHRcdCAgICBcdFx0XHRcdFx0XHRcdGlmIChyZXN1bHRbaV0uY2hvaWNlX2xpc3QpIHtcblx0XHQgICAgXHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIHMgPSAwOyBzIDwgJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0Lmxlbmd0aDsgcysrKSB7XG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGMgPSAwOyBjIDwgJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W3NdLnN1YkNsYXNzQXR0ckxpc3QubGVuZ3RoOyBjKyspIHtcblx0XHQgICAgXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgYXR0ciA9ICR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtzXS5zdWJDbGFzc0F0dHJMaXN0W2NdLkF0dHI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGF0dHJbal0uTmFtZT09cmVzdWx0W2ldLmF0dHIpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoYXR0cltqXS5UeXBlPT0n5a2X5YW4JyB8fCBhdHRyW2pdLlR5cGU9PSflrZflhbgt5a2X56ym5LiyJyl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBkaWN0SXRlbUxpc3Q9W107XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgZCBpbiByZXN1bHRbaV0uY2hvaWNlX2xpc3Qpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciB2YWwgPXJlc3VsdFtpXS5jaG9pY2VfbGlzdFtkXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkaWN0SXRlbUxpc3QucHVzaCh7XCJDTl9TX05BTUVcIjp2YWwsXCJOYW1lXCI6dmFsLFwibGFiZWxcIjp2YWwsXCJ2YWx1ZVwiOnZhbH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGF0dHJbal0uZGljdGl0ZW0gPSBkaWN0SXRlbUxpc3Q7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGF0dHJbal0uZGljdGl0ZW0gPSByZXN1bHRbaV0uY2hvaWNlX2xpc3Q7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBmb3IgKHZhciBzID0gMDsgcyA8ICR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdC5sZW5ndGg7IHMrKykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgXHRmb3IgKHZhciBjID0gMDsgYyA8ICR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtzXS5zdWJDbGFzc0F0dHJMaXN0Lmxlbmd0aDsgYysrKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBcdFx0dmFyIGF0dHIgPSAkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3Rbc10uc3ViQ2xhc3NBdHRyTGlzdFtjXS5BdHRyO1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgXHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgXHRcdFx0Y29uc29sZS5sb2coYXR0cltqXS5OYW1lKyc9PScrcmVzdWx0W2ldLmF0dHIpO1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgXHRcdFx0aWYoYXR0cltqXS5OYW1lPT1yZXN1bHRbaV0uYXR0cil7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBcdFx0XHRcdGF0dHJbal0uVmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBcdFx0XHR9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBcdFx0fVxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgXHR9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0dmFyIGxlbmd0aCA9IDA7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBpZiAoISR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5maWx0ZXIoZnVuY3Rpb24gKHMpIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0W2ldLmF0dHIgPT0gcy5hdHRyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICB9KS5sZW5ndGgpIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSAxO1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5wdXNoKHJlc3VsdFtpXSk7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBpZiAobGVuZ3RoID09IDApIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8ICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGg7IGorKykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLmF0dHIgPT0gcmVzdWx0W2ldLmF0dHIpIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS52YWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgICAgIH0gZWxzZSBpZiAoZGF0YS5hY3Rpb25baV0uYWN0aW9uX3R5cGUgPT0gJ3NldF9nbG9iYWxfYXR0cicpIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgJHRoaXMuJGRhdGEuZ2xvYmFsX2F0dHIgPSBkYXRhLmFjdGlvbltpXS52YWx1ZSB8fCBbXTtcblx0XHQgICAgXHRcdFx0ICAgICAgICB9IGVsc2UgaWYgKGRhdGEuYWN0aW9uW2ldLmFjdGlvbl90eXBlID09ICdhZGRfc3ViY2xzX3BhbmVsJykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICB2YXIgcmVzdWx0ID0gYWN0aW9uLnZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0bGV0IGxpc3RfMSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy4kZGF0YS5zdWJDbGFzc0F0dHJMaXN0KSk7XG5cdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3QucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHNjYW5Db2RlVmFsOiR0aGlzLiRkYXRhLnNjYW5Db2RlVmFsLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdWJDbGFzc0F0dHI6bGlzdF8xXG5cdFx0XHRcdFx0XHRcdFx0XHR9KTsgXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIHMgPSAwOyBzIDwgJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0Lmxlbmd0aDsgcysrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W3NdLnNjYW5Db2RlVmFsID09ICR0aGlzLiRkYXRhLnNjYW5Db2RlVmFsKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBfc3ViQ2xhc3NBdHRyID0gJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W3NdLnN1YkNsYXNzQXR0cjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGMgPSAwOyBjIDwgX3N1YkNsYXNzQXR0ci5sZW5ndGg7IGMrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgYXR0ciA9IF9zdWJDbGFzc0F0dHJbY10uQXR0cjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coYXR0cltqXS5OYW1lKyc9PScrcmVzdWx0W2ldLmF0dHIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGF0dHJbal0uTmFtZT09cmVzdWx0W2ldLmF0dHIpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXR0cltqXS5WYWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W3NdLnN1YkNsYXNzQXR0cj1saXN0XzE7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBsZW5ndGggPSAwO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoISR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5maWx0ZXIoZnVuY3Rpb24gKHMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgIHJldHVybiByZXN1bHRbaV0uYXR0ciA9PSBzLmF0dHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSkubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICBsZW5ndGggPSAxO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLnB1c2gocmVzdWx0W2ldKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAobGVuZ3RoID09IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgIGZvciAodmFyIGogPSAwOyBqIDwgJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgICAgaWYgKCR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS5hdHRyID09IHJlc3VsdFtpXS5hdHRyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgICAgICAgICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS52YWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHQgICAgXHRcdFx0ICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICB9XG5cdFx0ICAgIFx0XHRcdH1cblx0XHQgICAgXHRcdFx0XG5cdFx0ICAgIFx0XHRcdGlmIChkYXRhLnJlc3VsdCkge1xuXHRcdFx0XHRcdFx0XHRsZXQgbGlzdF8xID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3QpKTtcblx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0LnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdHNjYW5Db2RlVmFsOiR0aGlzLiRkYXRhLnNjYW5Db2RlVmFsLFxuXHRcdFx0XHRcdFx0XHRcdHN1YkNsYXNzQXR0cjpsaXN0XzFcblx0XHRcdFx0XHRcdFx0fSk7IFxuXHRcdCAgICBcdFx0XHQgICAgdmFyIHJlc3VsdCA9IGRhdGEucmVzdWx0O1xuXHRcdCAgICBcdFx0XHQgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyBpKyspIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICBmb3IgKHZhciBzID0gMDsgcyA8ICR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdC5sZW5ndGg7IHMrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W3NdLnNjYW5Db2RlVmFsID09ICR0aGlzLiRkYXRhLnNjYW5Db2RlVmFsKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIF9zdWJDbGFzc0F0dHIgPSAkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3Rbc10uc3ViQ2xhc3NBdHRyO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBjID0gMDsgYyA8IF9zdWJDbGFzc0F0dHIubGVuZ3RoOyBjKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgYXR0ciA9IF9zdWJDbGFzc0F0dHJbY10uQXR0cjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGF0dHJbal0uTmFtZSsnPT0nK3Jlc3VsdFtpXS5hdHRyKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGF0dHJbal0uTmFtZT09cmVzdWx0W2ldLmF0dHIpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhdHRyW2pdLlZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdCAgICBcdFx0XHQgICAgICAgIFx0fVxuXHRcdCAgICBcdFx0XHQgICAgICAgIH1cblx0XHQgICAgXHRcdFx0XHRcdFxuXHRcdCAgICBcdFx0XHRcdFx0dmFyIGxlbmd0aCA9IDA7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgaWYgKCEkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUuZmlsdGVyKGZ1bmN0aW9uIChzKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgIHJldHVybiByZXN1bHRbaV0uYXR0ciA9PSBzLmF0dHJcblx0XHQgICAgXHRcdFx0ICAgICAgICB9KS5sZW5ndGgpIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgbGVuZ3RoID0gMTtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLnB1c2gocmVzdWx0W2ldKTtcblx0XHQgICAgXHRcdFx0ICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgaWYgKGxlbmd0aCA9PSAwKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmxlbmd0aDsgaisrKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBpZiAoJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLmF0dHIgPT0gcmVzdWx0W2ldLmF0dHIpIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICAkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0udmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICB9XG5cdFx0ICAgIFx0XHRcdH1cblx0XHQgICAgXHRcdH1lbHNle1xuXHRcdCAgICBcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzdcIixjb250ZW50OnN1Y2Nlc3MubXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdCAgICBcdFx0fVxuXHRcdCAgICBcdH0pLmNhdGNoKGV4PT57XG5cdFx0ICAgIFx0XHQvLyBjb25zb2xlLmxvZyhleCk7XG5cdFx0ICAgIFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzcuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdCAgICBcdH0pO1xuXHRcdCAgICB9LFxuXHRcdCAgICBzY2FuX09LRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGV2ZW50SUQpe1xuXHRcdFx0XHR1bmkuc2hvd0xvYWRpbmcoe1xuXHRcdFx0XHRcdHRpdGxlOlwi5Yqg6L295LitLi4uXCJcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cdFx0XHRcdHZhciByZXE9W107XG5cdFx0XHRcdHZhciBhdHRybGlzdCA9ICR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Q7XG5cdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHR2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLkF0dHI7XG5cdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHRcdFx0aWYoYXIuVmFsdWU9PSfor7fpgInmi6knIHx8IGFyLlZhbHVlPT0n4oCU4oCU6K+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      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        if (isVal != result.decodedata) {\n          _this2.$data.classAttrList[e.target.dataset['index']].Attr[e.target.dataset['iindex']].Value = result.decodedata;\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        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                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\") 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            $this.$data.subPanelList.push({\n              scanCodeVal: $this.$data.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 == $this.$data.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:2427\");\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:2433\");\n      __f__(\"log\", dataInfo, \" at pages/modal/ms_classAttr.vue:2434\");\n      this.$store.dispatch('DataObjRunCustomEventInfo', dataInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/modal/ms_classAttr.vue:2436\");\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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Q0g7WUFDQWhCLEdBQUcsQ0FBQ21LLFVBQVUsQ0FBQztjQUNkckMsR0FBRyxFQUFDLDhCQUE4QixHQUFDM0gsSUFBSSxDQUFDNEgsU0FBUyxDQUFDOUcsS0FBSyxDQUFDWixLQUFLLENBQUNwQixLQUFLLENBQUMsR0FBQyxhQUFhLEdBQUNnQyxLQUFLLENBQUNaLEtBQUssQ0FBQ3JCO1lBQ2hHLENBQUMsQ0FBQztVQUNIO1FBQ0UsQ0FBQyxNQUFJO1VBQ0pnQixHQUFHLENBQUNTLFNBQVMsQ0FBQztZQUFDekIsS0FBSyxFQUFDLEtBQUs7WUFBQzBCLE9BQU8sRUFBQ2dCLE9BQU8sQ0FBQ0UsR0FBRztZQUFDakIsVUFBVSxFQUFDLEtBQUs7WUFBQ0MsV0FBVyxFQUFDO1VBQUksQ0FBQyxDQUFDO1FBQ25GO01BQ0QsQ0FBQyxDQUFDLENBQUNpQixLQUFLLENBQUMsVUFBQUMsRUFBRSxFQUFFO1FBQ1o7UUFDSDlCLEdBQUcsQ0FBQ2dKLFdBQVcsRUFBRTtRQUNkaEosR0FBRyxDQUFDUyxTQUFTLENBQUM7VUFBQ3pCLEtBQUssRUFBQyxPQUFPO1VBQUMwQixPQUFPLEVBQUNvQixFQUFFLENBQUNDLE1BQU07VUFBQ3BCLFVBQVUsRUFBQyxLQUFLO1VBQUNDLFdBQVcsRUFBQztRQUFJLENBQUMsQ0FBQztNQUNuRixDQUFDLENBQUM7SUFDSDtFQUdKO0FBQ0QsQ0FBQztBQUFBLDJCIiwiZmlsZSI6IjgwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cdGltcG9ydCBwaWNrZXJBZGRyZXNzIGZyb20gJy4uLy4uL2pzL3BpY2tlckFkZHJlc3MvcGlja2VyQWRkcmVzcy52dWUnXG5cdGV4cG9ydCBkZWZhdWx0IHtcblx0XHRjb21wb25lbnRzOiB7XG4gICAgICAgICAgICBwaWNrZXJBZGRyZXNzXG4gICAgICAgIH0sXG5cdFx0ZGF0YSgpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHRpdGxlOiAn5paw5aKeJyxcblx0XHRcdFx0cGFyYW06e30sXG5cdFx0XHRcdGNsYXNzQXR0ckxpc3Q6W10sXG5cdFx0XHRcdGNsYXNzR3JpZFN0eWxlOltdLFxuXHRcdFx0XHRlZGl0X2luaXRhbF9ldmVudDpcIlwiLCAgLy/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+iDvVxuXHRcdFx0XHQvL2NvbnNvbGUubG9nKGUudGFyZ2V0KVxuXHRcdFx0XHRnZXRBcHAoKS5vblNjYW4oKHJlc3VsdCk9Pntcblx0XHRcdFx0XHQvL2NvbnNvbGUubG9nKHJlc3VsdC5kZWNvZGVkYXRhKTtcblx0XHRcdFx0XHR2YXIgaXNWYWwgPXRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5WYWx1ZTtcblx0XHRcdFx0XHRcblx0XHRcdFx0XHRpZiAoaXNWYWwhPXJlc3VsdC5kZWNvZGVkYXRhKSB7XG5cdFx0XHRcdFx0XHR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWU9cmVzdWx0LmRlY29kZWRhdGE7XG5cdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdHZhciBldmVudGlkID0gdGhpcy4kZGF0YS5wYXJhbS5TY2FuX0NvZGUuSW5wdXRfQ2hhbmdlX0V2ZW50LklEO1xuXHRcdFx0XHRcdFx0aWYgKGV2ZW50aWQpIHtcblx0XHRcdFx0XHQgICAgICAgIHZhciByZXE9W107XG5cdFx0XHRcdFx0ICAgICAgICB2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Q7XG5cdFx0XHRcdFx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0ICAgICAgICBcdHZhciBhdHRyID0gYXR0cmxpc3RbaV0uQXR0cjtcblx0XHRcdFx0XHQgICAgICAgIFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0dmFyIGFyID0gYXR0cltqXTtcblx0XHRcdFx0XHQgICAgICAgIFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxuXHRcdFx0XHRcdCAgICAgICAgXHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0XHQgICAgICAgIFx0XHRpZihhci5UeXBlPT0n5byV55So5Lq65ZGYJyB8fCBhci5UeXBlPT0n5byV55So6aG555uuJylcblx0XHRcdFx0XHQgICAgICAgIFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsOiBhci5WYWxJRCA/YXIuVmFsSUQgOicnIH0pO1xuXHRcdFx0XHRcdCAgICAgICAgXHRcdGVsc2UgaWYoYXIuVHlwZT09J+W4g+WwlOWAvCcpXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsdWU/JzEnOicwJ30pO1xuXHRcdFx0XHRcdCAgICAgICAgXHRcdGVsc2Vcblx0XHRcdFx0XHQgICAgICAgIFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsOiBhci5WYWx1ZSA/YXIuVmFsdWUgOicnfSk7XG5cdFx0XHRcdFx0ICAgICAgICBcdH1cblx0XHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHQgICAgICAgIHZhciBpbmZvID0ge1xuXHRcdFx0XHRcdCAgICAgICAgICAgIGV2ZW50aWQ6IGV2ZW50aWQsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgZWR0eXBlOiBcIjBcIixcblx0XHRcdFx0XHQgICAgICAgICAgICBwcm9qZWN0aWQ6ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIHJjbHNpZDogJycsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgcm9iamlkOiAnJyxcblx0XHRcdFx0XHQgICAgICAgICAgICB1c2VybG9naW46ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIGNsc2lkOiB0aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuSUQsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgb2JqaWQ6IFwiXCIsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgYXR0cjogcmVxLFxuXHRcdFx0XHRcdFx0XHRcdGlucHV0UGFyYW10ZXI6W3sgYXR0cjogJ21hc3RfaW5wdXRfMzAzNycsIHZhbHVlOiByZXN1bHQuZGVjb2RlZGF0YSB9XVxuXHRcdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHQgICAgICAgIHRoaXMuc2Nhbl9EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbywgXCJcIik7XG5cdFx0XHRcdFx0ICAgIH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHR9LFxuXHRcdFx0c2Nhbl9vbnRhcChlKXsgLy/miavnoIHljLrmiavnoIHlip/og71cblx0XHRcdFx0Ly9jb25zb2xlLmxvZyhlLnRhcmdldClcblx0XHRcdFx0Z2V0QXBwKCkub25TY2FuKChyZXN1bHQpPT57XG5cdFx0XHRcdFx0Y29uc29sZS5sb2cocmVzdWx0LmRlY29kZWRhdGEpO1xuXHRcdFx0XHRcdHZhciBpc2ZsYWc9dHJ1ZTtcblx0XHRcdFx0XHRmb3IodmFyIGkgaW4gdGhpcy4kZGF0YS5zdWJQYW5lbExpc3Qpe1xuXHRcdFx0XHRcdFx0aWYodGhpcy4kZGF0YS5zdWJQYW5lbExpc3RbaV0uc2NhbkNvZGVWYWwgPT0gcmVzdWx0LmRlY29kZWRhdGEpIFxuXHRcdFx0XHRcdFx0XHRpc2ZsYWc9ZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdGlmIChpc2ZsYWcpIHtcblx0XHRcdFx0XHRcdHRoaXMuJGRhdGEuc2NhbkNvZGVWYWw9cmVzdWx0LmRlY29kZWRhdGE7XG5cdFx0XHRcdFx0XHR2YXIgZXZlbnRpZCA9IHRoaXMuJGRhdGEucGFyYW0uU2Nhbl9Db2RlLklucHV0X0NoYW5nZV9FdmVudC5JRDtcblx0XHRcdFx0XHRcdGlmIChldmVudGlkKSB7XG5cdFx0XHRcdFx0ICAgICAgICB2YXIgcmVxPVtdO1xuXHRcdFx0XHRcdCAgICAgICAgdmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5zdWJDbGFzc0F0dHJMaXN0O1xuXHRcdFx0XHRcdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdCAgICAgICAgXHR2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLkF0dHI7XG5cdFx0XHRcdFx0ICAgICAgICBcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdCAgICAgICAgXHRcdHZhciBhciA9IGF0dHJbal07XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0aWYoYXIuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJylcblx0XHRcdFx0XHQgICAgICAgIFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0aWYoYXIuVHlwZT09J+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZT09J+W8leeUqOmhueebricpXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWxJRCA/YXIuVmFsSUQgOicnIH0pO1xuXHRcdFx0XHRcdCAgICAgICAgXHRcdGVsc2UgaWYoYXIuVHlwZT09J+W4g+WwlOWAvCcpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlPycxJzonMCd9KTtcblx0XHRcdFx0XHQgICAgICAgIFx0XHRlbHNlXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZSA/YXIuVmFsdWUgOicnfSk7XG5cdFx0XHRcdFx0ICAgICAgICBcdH1cblx0XHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHQgICAgICAgIHZhciBpbmZvID0ge1xuXHRcdFx0XHRcdCAgICAgICAgICAgIGV2ZW50aWQ6IGV2ZW50aWQsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgZWR0eXBlOiBcIjBcIixcblx0XHRcdFx0XHQgICAgICAgICAgICBwcm9qZWN0aWQ6ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIHJjbHNpZDogJycsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgcm9iamlkOiAnJyxcblx0XHRcdFx0XHQgICAgICAgICAgICB1c2VybG9naW46ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIGNsc2lkOiB0aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuSUQsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgb2JqaWQ6IFwiXCIsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgYXR0cjogcmVxLFxuXHRcdFx0XHRcdFx0XHRcdGlucHV0UGFyYW10ZXI6W3sgYXR0cjogJ2lucHV0XzMwMzcnLCB2YWx1ZTogdGhpcy4kZGF0YS5zY2FuQ29kZVZhbCB9XVxuXHRcdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHQgICAgICAgIHRoaXMuc2Nhbl9EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbywgXCJcIik7XG5cdFx0XHRcdFx0ICAgIH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHR9LFxuXHRcdFx0b25hcnJvdyhpbmRleCxvcGVuKXtcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coaW5kZXgrJy0tJytvcGVuKTtcblx0XHRcdFx0dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2luZGV4XS5PcGVuPW9wZW49PXRydWU/ZmFsc2U6dHJ1ZTtcblx0XHRcdH0sXG5cdFx0XHRvbmRhdGVUaW1lKGUpIHtcblx0XHRcdFx0Ly9jb25zb2xlLmxvZyhlLnRhcmdldClcblx0XHRcdFx0dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlPWUudGFyZ2V0LnZhbHVlO1xuXHRcdFx0fSxcblx0XHRcdG9uY2hhbmdlKGUpIHtcblx0XHRcdFx0Y29uc29sZS5sb2coZS50YXJnZXQpO1xuXHRcdFx0XHR2YXIgdmFsdWU9dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLmRpY3RpdGVtW2UudGFyZ2V0LnZhbHVlXTtcblx0XHRcdFx0dmFyIGRhdGFfYXR0ciA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXTtcblx0XHRcdFx0Y29uc29sZS5sb2coZGF0YV9hdHRyKTtcblx0XHRcdFx0aWYgKHZhbHVlLk5hbWUgIT0gZGF0YV9hdHRyLlZhbHVlKSB7XG5cdFx0XHRcdFx0dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlPXZhbHVlLk5hbWU7XG5cdFx0XHRcdFx0Y29uc29sZS5sb2codGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlKTtcblx0XHRcdFx0XHR2YXIgZXZlbnRpZCA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5hY3Rpb247XG5cdFx0XHRcdFx0aWYgKGV2ZW50aWQpIHtcblx0XHRcdFx0ICAgICAgICAvLyBzZWxmLmV2ZW50X25vX3N1YiA9IDE7XG5cdFx0XHRcdCAgICAgICAgdmFyIHJlcT1bXTtcblx0XHRcdFx0ICAgICAgICB2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Q7XG5cdFx0XHRcdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHQgICAgICAgIFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xuXHRcdFx0XHQgICAgICAgIFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdCAgICAgICAgXHRcdHZhciBhciA9IGF0dHJbal07XG5cdFx0XHRcdCAgICAgICAgXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpXG5cdFx0XHRcdCAgICAgICAgXHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0ICAgICAgICBcdFx0aWYoYXIuVHlwZT09J+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZT09J+W8leeUqOmhueebricpXG5cdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XG5cdFx0XHRcdCAgICAgICAgXHRcdGVsc2UgaWYoYXIuVHlwZT09J+W4g+WwlOWAvCcpXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsdWU/JzEnOicwJ30pO1xuXHRcdFx0XHQgICAgICAgIFx0XHRlbHNlXG5cdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbHVlID9hci5WYWx1ZSA6Jyd9KTtcblx0XHRcdFx0ICAgICAgICBcdH1cblx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdCAgICAgICAgdmFyIGluZm8gPSB7XG5cdFx0XHRcdCAgICAgICAgICAgIGV2ZW50aWQ6IGV2ZW50aWQsXG5cdFx0XHRcdCAgICAgICAgICAgIGVkdHlwZTogXCIwXCIsXG5cdFx0XHRcdCAgICAgICAgICAgIHByb2plY3RpZDogJycsXG5cdFx0XHRcdCAgICAgICAgICAgIHJjbHNpZDogJycsXG5cdFx0XHRcdCAgICAgICAgICAgIHJvYmppZDogJycsXG5cdFx0XHRcdCAgICAgICAgICAgIHVzZXJsb2dpbjogJycsXG5cdFx0XHRcdCAgICAgICAgICAgIGNsc2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsXG5cdFx0XHRcdCAgICAgICAgICAgIG9iamlkOiBcIlwiLFxuXHRcdFx0XHQgICAgICAgICAgICBhdHRyOiByZXEsXG5cdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgIHRoaXMuRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8pO1xuXHRcdFx0XHQgICAgfVxuXHRcdFx0XHR9XG5cdFx0XHRcdFxuXHRcdFx0fSxcblx0XHRcdG9uY2hhbmdlMihpdGVtLHZhbHVlLGRlbHZhbHVlKSB7XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGl0ZW0pO1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyh2YWx1ZSk7XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGRlbHZhbHVlKTtcblx0XHRcdFx0aWYoaXRlbS5sZW5ndGg9PTApeyAvL+S4uuepuuaXtu+8jOa4heepuuWxnuaAp3ZhbHVlXG5cdFx0XHRcdFx0dmFyIGluZGV4ICxpaW5kZXgsZGluZGV4PTA7XG5cdFx0XHRcdFx0Zm9yKHZhciBpIGluIHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdCl7XG5cdFx0XHRcdFx0XHRmb3IodmFyIGogaW4gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2ldLkF0dHIpe1xuXHRcdFx0XHRcdFx0XHRmb3IodmFyIGQgaW4gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2ldLkF0dHJbal0uZGljdGl0ZW0pe1xuXHRcdFx0XHRcdFx0XHRcdGlmKGRlbHZhbHVlWzBdLk5hbWUgPT0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2ldLkF0dHJbal0uZGljdGl0ZW1bZF0uTmFtZSl7XG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbaV0uQXR0cltqXS5WYWx1ZT1cIlwiO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRcdFxuXHRcdFx0XHRmb3IodmFyIHYgaW4gaXRlbSl7XG5cdFx0XHRcdFx0dmFyIGluZGV4ICxpaW5kZXgsZGluZGV4PTA7XG5cdFx0XHRcdFx0Zm9yKHZhciBpIGluIHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdCl7XG5cdFx0XHRcdFx0XHRmb3IodmFyIGogaW4gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2ldLkF0dHIpe1xuXHRcdFx0XHRcdFx0XHRmb3IodmFyIGQgaW4gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2ldLkF0dHJbal0uZGljdGl0ZW0pe1xuXHRcdFx0XHRcdFx0XHRcdGlmKGl0ZW1bdl0uTmFtZSA9PSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbaV0uQXR0cltqXS5kaWN0aXRlbVtkXS5OYW1lKXtcblx0XHRcdFx0XHRcdFx0XHRcdGluZGV4PWk7aWluZGV4PWo7ZGluZGV4PWQ7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHZhciBpdGVtdmFsdWUgPSBpdGVtW3ZdO1xuXHRcdFx0XHRcdHZhciBkYXRhX2F0dHIgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbaW5kZXhdLkF0dHJbaWluZGV4XTtcblx0XHRcdFx0XHRcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhkYXRhX2F0dHIpO1xuXHRcdFx0XHRcdGlmIChpdGVtdmFsdWUuTmFtZSAhPSBkYXRhX2F0dHIuVmFsdWUpIHtcblx0XHRcdFx0XHRcdHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpbmRleF0uQXR0cltpaW5kZXhdLlZhbHVlPXZhbHVlO1xuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2codGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2luZGV4XS5BdHRyW2lpbmRleF0uVmFsdWUpO1xuXHRcdFx0XHRcdFx0dmFyIGV2ZW50aWQgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbaW5kZXhdLkF0dHJbaWluZGV4XS5hY3Rpb247XG5cdFx0XHRcdFx0XHRpZiAoZXZlbnRpZCkge1xuXHRcdFx0XHRcdCAgICAgICAgLy8gc2VsZi5ldmVudF9ub19zdWIgPSAxO1xuXHRcdFx0XHRcdCAgICAgICAgdmFyIHJlcT1bXTtcblx0XHRcdFx0XHQgICAgICAgIHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdDtcblx0XHRcdFx0XHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHQgICAgICAgIFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xuXHRcdFx0XHRcdCAgICAgICAgXHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHQgICAgICAgIFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHRcdCAgICAgICAgXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpXG5cdFx0XHRcdFx0ICAgICAgICBcdFx0XHRpZihhci5WYWx1ZT09J+ivtycpIGFyLlZhbHVlPScnO1xuXHRcdFx0XHRcdCAgICAgICAgXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxuXHRcdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8Jylcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbHVlPycxJzonMCd9KTtcblx0XHRcdFx0XHQgICAgICAgIFx0XHRlbHNlIGlmKGFyLlR5cGU9PSflrZflhbgnIHx8IGFyLlR5cGU9PSflrZflhbgt5a2X56ym5LiyJylcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGl0ZW12YWx1ZS5OYW1lfSk7XG5cdFx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZVxuXHRcdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbHVlID9hci5WYWx1ZSA6Jyd9KTtcblx0XHRcdFx0XHQgICAgICAgIFx0fVxuXHRcdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHRcdCAgICAgICAgdmFyIGluZm8gPSB7XG5cdFx0XHRcdFx0ICAgICAgICAgICAgZXZlbnRpZDogZXZlbnRpZCxcblx0XHRcdFx0XHQgICAgICAgICAgICBlZHR5cGU6IFwiMFwiLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIHByb2plY3RpZDogJycsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgcmNsc2lkOiAnJyxcblx0XHRcdFx0XHQgICAgICAgICAgICByb2JqaWQ6ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgICAgIHVzZXJsb2dpbjogJycsXG5cdFx0XHRcdFx0ICAgICAgICAgICAgY2xzaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCxcblx0XHRcdFx0XHQgICAgICAgICAgICBvYmppZDogXCJcIixcblx0XHRcdFx0XHQgICAgICAgICAgICBhdHRyOiByZXEsXG5cdFx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdFx0ICAgICAgICB0aGlzLkRhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvKTtcblx0XHRcdFx0XHQgICAgfVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRcblx0XHRcdFx0XG5cdFx0XHR9LFxuXHRcdFx0b25ldmVudChlKXtcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coZS50YXJnZXQpO1xuXHRcdFx0XHR2YXIgZGF0YV9hdHRyID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dO1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhkYXRhX2F0dHIpO1xuXHRcdFx0XHRpZiAoZS50YXJnZXQudmFsdWUgIT0gZGF0YV9hdHRyLlZhbHVlKSB7XG5cdFx0XHRcdFx0dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlPWUudGFyZ2V0LnZhbHVlO1xuXHRcdFx0XHRcdHZhciBldmVudGlkID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLmFjdGlvbjtcblx0XHRcdFx0XHRpZiAoZXZlbnRpZCkge1xuXHRcdFx0XHQgICAgICAgIC8vIHNlbGYuZXZlbnRfbm9fc3ViID0gMTtcblx0XHRcdFx0ICAgICAgICB2YXIgcmVxPVtdO1xuXHRcdFx0XHQgICAgICAgIHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdDtcblx0XHRcdFx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdCAgICAgICAgXHR2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLkF0dHI7XG5cdFx0XHRcdCAgICAgICAgXHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0ICAgICAgICBcdFx0dmFyIGFyID0gYXR0cltqXTtcblx0XHRcdFx0ICAgICAgICBcdFx0aWYoYXIuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJylcblx0XHRcdFx0ICAgICAgICBcdFx0XHRpZihhci5WYWx1ZT09J+ivtycpIGFyLlZhbHVlPScnO1xuXHRcdFx0XHQgICAgICAgIFx0XHRpZihhci5UeXBlPT0n5byV55So5Lq65ZGYJyB8fCBhci5UeXBlPT0n5byV55So6aG555uuJylcblx0XHRcdFx0ICAgICAgICBcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsSUQgP2FyLlZhbElEIDonJyB9KTtcblx0XHRcdFx0ICAgICAgICBcdFx0ZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8Jylcblx0XHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsOiBhci5WYWx1ZT8nMSc6JzAnfSk7XG5cdFx0XHRcdCAgICAgICAgXHRcdGVsc2Vcblx0XHRcdFx0ICAgICAgICBcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsdWUgP2FyLlZhbHVlIDonJ30pO1xuXHRcdFx0XHQgICAgICAgIFx0fVxuXHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0ICAgICAgICB2YXIgaW5mbyA9IHtcblx0XHRcdFx0ICAgICAgICAgICAgZXZlbnRpZDogZXZlbnRpZCxcblx0XHRcdFx0ICAgICAgICAgICAgZWR0eXBlOiBcIjBcIixcblx0XHRcdFx0ICAgICAgICAgICAgcHJvamVjdGlkOiAnJyxcblx0XHRcdFx0ICAgICAgICAgICAgcmNsc2lkOiAnJyxcblx0XHRcdFx0ICAgICAgICAgICAgcm9iamlkOiAnJyxcblx0XHRcdFx0ICAgICAgICAgICAgdXNlcmxvZ2luOiAnJyxcblx0XHRcdFx0ICAgICAgICAgICAgY2xzaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCxcblx0XHRcdFx0ICAgICAgICAgICAgb2JqaWQ6IFwiXCIsXG5cdFx0XHRcdCAgICAgICAgICAgIGF0dHI6IHJlcSxcblx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdCAgICAgICAgdGhpcy5EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbywgZGF0YV9hdHRyKTtcblx0XHRcdFx0ICAgIH1cblx0XHRcdFx0fVxuXHRcdFx0XHRcblx0XHRcdH0sXG5cdFx0XHRvbmNoZWNrKGUpIHtcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coZS50YXJnZXQpO1xuXHRcdFx0XHR2YXIgaXNjaGVja2VkID0gZS50YXJnZXQuZGF0YXNldC5pc2NoZWNrP2ZhbHNlOnRydWU7XG5cdFx0XHRcdHZhciBkYXRhX2F0dHIgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV07XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGRhdGFfYXR0cik7XG5cdFx0XHRcdGlmIChpc2NoZWNrZWQgIT0gZGF0YV9hdHRyLlZhbHVlKSB7XG5cdFx0XHRcdFx0dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlPWlzY2hlY2tlZDtcblx0XHRcdFx0XHR2YXIgZXZlbnRpZCA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5hY3Rpb247XG5cdFx0XHRcdFx0aWYgKGV2ZW50aWQpIHtcblx0XHRcdFx0ICAgICAgICAvLyBzZWxmLmV2ZW50X25vX3N1YiA9IDE7XG5cdFx0XHRcdCAgICAgICAgdmFyIHJlcT1bXTtcblx0XHRcdFx0ICAgICAgICB2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Q7XG5cdFx0XHRcdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHQgICAgICAgIFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xuXHRcdFx0XHQgICAgICAgIFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdCAgICAgICAgXHRcdHZhciBhciA9IGF0dHJbal07XG5cdFx0XHRcdCAgICAgICAgXHRcdGlmKGFyLlR5cGU9PSflvJXnlKjlr7nosaEo5aSa5LiqKScpXG5cdFx0XHRcdCAgICAgICAgXHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0ICAgICAgICBcdFx0aWYoYXIuVHlwZT09J+W8leeUqOS6uuWRmCcgfHwgYXIuVHlwZT09J+W8leeUqOmhueebricpXG5cdFx0XHRcdCAgICAgICAgXHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWw6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XG5cdFx0XHRcdCAgICAgICAgXHRcdGVsc2UgaWYoYXIuVHlwZT09J+W4g+WwlOWAvCcpXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbDogYXIuVmFsdWU/JzEnOicwJ30pO1xuXHRcdFx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsOiBhci5WYWx1ZSA/YXIuVmFsdWUgOicnfSk7XG5cdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdCAgICAgICAgXHR9XG5cdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgIHZhciBpbmZvID0ge1xuXHRcdFx0XHQgICAgICAgICAgICBldmVudGlkOiBldmVudGlkLFxuXHRcdFx0XHQgICAgICAgICAgICBlZHR5cGU6IFwiMFwiLFxuXHRcdFx0XHQgICAgICAgICAgICBwcm9qZWN0aWQ6ICcnLFxuXHRcdFx0XHQgICAgICAgICAgICByY2xzaWQ6ICcnLFxuXHRcdFx0XHQgICAgICAgICAgICByb2JqaWQ6ICcnLFxuXHRcdFx0XHQgICAgICAgICAgICB1c2VybG9naW46ICcnLFxuXHRcdFx0XHQgICAgICAgICAgICBjbHNpZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELFxuXHRcdFx0XHQgICAgICAgICAgICBvYmppZDogXCJcIixcblx0XHRcdFx0ICAgICAgICAgICAgYXR0cjogcmVxLFxuXHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0ICAgICAgICB0aGlzLkRhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvKTtcblx0XHRcdFx0ICAgIH1cblx0XHRcdFx0fVxuXHRcdFx0XHRcblx0XHRcdH0sXG5cdFx0XHRpbnB1dFZhbExpc3RJc0RlbChpbmRleCl7XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGluZGV4KTtcbiAgICAgICAgICAgICAgICB0aGlzLiRkYXRhLmlucHV0VmFsTGlzdC5zcGxpY2UoaW5kZXgsIDEpOyAvL+WIoOmZpHRhYlBhZ2Vqc29u55qE5YaF5a65XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKHRoaXMuJGRhdGEuaW5wdXRWYWxMaXN0KTtcblx0XHRcdH0sXG5cdFx0XHRhZGRyZXNzY2hhbmdlKGUpIHtcblx0XHRcdCAgICAvLyBjb25zb2xlLmxvZyhlLnRhcmdldCk7XG5cdFx0XHQgICAgY29uc29sZS5sb2coZS5kYXRhLmpvaW4oJzsnKSlcblx0XHRcdFx0dGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2UudGFyZ2V0LmRhdGFzZXRbJ2luZGV4J11dLkF0dHJbZS50YXJnZXQuZGF0YXNldFsnaWluZGV4J11dLlZhbHVlPWUuZGF0YS5qb2luKCc7Jyk7XG5cdFx0XHR9LFxuXHRcdFx0Y2xhc3NBdHRyX2V4dEJ1dHRvbihpbmRleCxpaW5kZXgpe1xuXHRcdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdFx0XHR2YXIgYmVmb3JlX2NsaWNrX2J1dHRvbiA9ICR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbaW5kZXhdLkF0dHJbaWluZGV4XS5iZWZvcmVfY2xpY2tfYnV0dG9uO1xuXHRcdFx0XHR2YXIgYnV0dG9uX2NhbGxiYWNrID0gJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtpbmRleF0uQXR0cltpaW5kZXhdLmJ1dHRvbl9jYWxsYmFjaztcblx0XHRcdFx0aWYoIWJlZm9yZV9jbGlja19idXR0b24pe1xuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcImJlZm9yZV9jbGlja19idXR0b24tZXZlbnRfaWTkuLrnqbrvvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYoIWJ1dHRvbl9jYWxsYmFjayl7XG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50OlwiYnV0dG9uX2NhbGxiYWNrLWV2ZW50X2lk5Li656m677yBXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHZhciBkYXRhX2F0dHIgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbaW5kZXhdLkF0dHJbaWluZGV4XTtcblx0XHRcdFx0dGhpcy5EYXRhT2JqUnVuQ3VzdG9tRXZlbnRfUmV0dXJuKGJlZm9yZV9jbGlja19idXR0b24sIGRhdGFfYXR0ciwgYnV0dG9uX2NhbGxiYWNrLCBpbmRleCxpaW5kZXgpO1xuXHRcdFx0fSxcblx0XHRcdHNjYW5fY2xhc3NBdHRyX2V4dEJ1dHRvbihlKXsgIC8vLS0tLS0tLS0t5pyq5a6M5oiQLS0tLS0tLS0tLS1cblx0XHRcdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHRcdFx0dmFyIEJlZm9yZV9TZWxlY3RfRXZlbnQgPSAkdGhpcy4kZGF0YS5wYXJhbS5TY2FuX0NvZGUuQmVmb3JlX1NlbGVjdF9FdmVudC5JRDtcblx0XHRcdFx0dmFyIEFmdGVyX1NlbGVjdF9FdmVudCA9ICR0aGlzLiRkYXRhLnBhcmFtLlNjYW5fQ29kZS5BZnRlcl9TZWxlY3RfRXZlbnQuSUQ7XG5cdFx0XHRcdGlmKCFCZWZvcmVfU2VsZWN0X0V2ZW50KXtcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCLpgInmi6nmjInpkq7liY3kuovku7bkuLrnqbrvvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYoIUFmdGVyX1NlbGVjdF9FdmVudCl7XG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50Olwi5paw5aKe5oyJ6ZKu5ZCO5LqL5Lu25Li656m677yBXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIHZhciBkYXRhX2F0dHIgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbaW5kZXhdLkF0dHJbaWluZGV4XTtcblx0XHRcdFx0dGhpcy5EYXRhT2JqUnVuQ3VzdG9tRXZlbnRfUmV0dXJuKEJlZm9yZV9TZWxlY3RfRXZlbnQsICcnLCBBZnRlcl9TZWxlY3RfRXZlbnQsICcnLCAnJyk7XG5cdFx0XHR9LFxuXHRcdFx0Y2xhc3NBdHRyX0FkZFBlcihpbmRleCxpaW5kZXgpe1xuXHRcdFx0XHR2YXIgcGFyYW09e2luZGV4OmluZGV4LGlpbmRleDppaW5kZXh9O1xuXHRcdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdFx0XHR1bmkubmF2aWdhdGVUbyh7XG5cdFx0XHRcdFx0dXJsOicuLi9zZWxwc24vaW5kZXg/bXVsaXQ9ZmFsc2UmcGFyYW09JytKU09OLnN0cmluZ2lmeShwYXJhbSksXG5cdFx0XHRcdFx0ZXZlbnRzOntcblx0XHRcdFx0XHRcdEFkZFBlcihkYXRhLHBhcmFtKXsgXG5cdFx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHBhcmFtKTtcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coZGF0YSk7XG5cdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbcGFyYW0uaW5kZXhdLkF0dHJbcGFyYW0uaWluZGV4XS5WYWx1ZT1kYXRhWzBdLk5hbWU7XG5cdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbcGFyYW0uaW5kZXhdLkF0dHJbcGFyYW0uaWluZGV4XS5WYWxJRD1kYXRhWzBdLkxvZ2luKyc7JytkYXRhWzBdLk5hbWU7XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHR2YXIgZXZlbnRpZCA9ICR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbcGFyYW0uaW5kZXhdLkF0dHJbcGFyYW0uaWluZGV4XS5hY3Rpb247XG5cdFx0XHRcdFx0XHRcdGlmIChldmVudGlkKSB7XG5cdFx0XHRcdFx0XHRcdCAgICBldmVudGlkID0gZXZlbnRpZC50cmltKCk7XG5cdFx0XHRcdFx0XHRcdCAgICBpZiAoZXZlbnRpZCkge1xuXHRcdFx0XHRcdFx0XHQgICAgICAgIHZhciBpbmZvID0ge1xuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICBldmVudGlkOiBldmVudGlkLFxuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICBlZHR5cGU6IFwiNFwiLFxuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICBwcm9qZWN0aWQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIHJjbHNpZDogXCJcIixcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgcm9iamlkOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICB1c2VybG9naW46IGRhdGFbMF0uTG9naW4sXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIGNsc2lkOiAkdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELFxuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICBvYmppZDogXCJcIixcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgYXR0cjogW10sXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyB2YXIgZGF0YV9hdHRyID0gJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtwYXJhbS5pbmRleF0uQXR0cltwYXJhbS5paW5kZXhdO1xuXHRcdFx0XHRcdFx0XHQgICAgICAgICR0aGlzLkRhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvKTtcblx0XHRcdFx0XHRcdFx0ICAgIH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9LFxuXHRcdFx0Y2xhc3NBdHRyX0FkZFJlZihlKXtcblx0XHRcdFx0Y29uc29sZS5sb2coZS50YXJnZXQpO1xuXHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCLmraTlip/og73ov5jmnKrlrp7njrDvvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0Ly8gdmFyIHZhbHVlPXRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtlLnRhcmdldC5kYXRhc2V0WydpbmRleCddXS5BdHRyW2UudGFyZ2V0LmRhdGFzZXRbJ2lpbmRleCddXS5SZWxDbHNbZS50YXJnZXQudmFsdWVdO1xuXHRcdFx0XHQvLyB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbZS50YXJnZXQuZGF0YXNldFsnaW5kZXgnXV0uQXR0cltlLnRhcmdldC5kYXRhc2V0WydpaW5kZXgnXV0uVmFsdWU9dmFsdWU7XG5cdFx0XHR9LFxuXHRcdFx0Y2xhc3NBdHRyX0FkZFByaihpbmRleCxpaW5kZXgpe1xuXHRcdFx0XHR2YXIgcGFyYW09e2luZGV4OmluZGV4LGlpbmRleDppaW5kZXh9O1xuXHRcdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdFx0XHR1bmkubmF2aWdhdGVUbyh7XG5cdFx0XHRcdFx0dXJsOicuLi9zZWxQcmovaW5kZXg/cmVsYXRpb249LTEmcGFyYW09JytKU09OLnN0cmluZ2lmeShwYXJhbSksXG5cdFx0XHRcdFx0ZXZlbnRzOntcblx0XHRcdFx0XHRcdEFkZFBlcihkYXRhLHBhcmFtKXsgXG5cdFx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHBhcmFtKTtcblx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZGF0YSk7XG5cdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbcGFyYW0uaW5kZXhdLkF0dHJbcGFyYW0uaWluZGV4XS5WYWx1ZT1kYXRhWzBdLk5hbWU7XG5cdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbcGFyYW0uaW5kZXhdLkF0dHJbcGFyYW0uaWluZGV4XS5WYWxJRD1kYXRhWzBdLklEKyc7JytkYXRhWzBdLk5hbWU7XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHR2YXIgZXZlbnRpZCA9ICR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbcGFyYW0uaW5kZXhdLkF0dHJbcGFyYW0uaWluZGV4XS5hY3Rpb247XG5cdFx0XHRcdFx0XHRcdGlmIChldmVudGlkKSB7XG5cdFx0XHRcdFx0XHRcdCAgICBldmVudGlkID0gZXZlbnRpZC50cmltKCk7XG5cdFx0XHRcdFx0XHRcdCAgICBpZiAoZXZlbnRpZCkge1xuXHRcdFx0XHRcdFx0XHQgICAgICAgIHZhciBpbmZvID0ge1xuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICBldmVudGlkOiBldmVudGlkLFxuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICBlZHR5cGU6IFwiMlwiLFxuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICBwcm9qZWN0aWQ6IGRhdGFbMF0uSUQsXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIHJjbHNpZDogXCJcIixcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgcm9iamlkOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICB1c2VybG9naW46IFwiXCIsXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIGNsc2lkOiAkdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELFxuXHRcdFx0XHRcdFx0XHQgICAgICAgICAgICBvYmppZDogXCJcIixcblx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgYXR0cjogW10sXG5cdFx0XHRcdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdCAgICAgICAgLy8gdmFyIGRhdGFfYXR0ciA9ICR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3RbcGFyYW0uaW5kZXhdLkF0dHJbcGFyYW0uaWluZGV4XTtcblx0XHRcdFx0XHRcdFx0ICAgICAgICAkdGhpcy5EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbyk7XG5cdFx0XHRcdFx0XHRcdCAgICB9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSxcblx0XHRcdHNhdmEoKXtcblx0XHRcdFx0aWYgKHRoaXMuJGRhdGEucGFyYW0uQmVmb3JlX09LX0V2ZW50KSAvL+WIpOaWreWKn+iDveeCueWPguaVsOaYr+WQpuacieehruWumuWJjeiEmuacrFxuXHRcdFx0XHRcdHRoaXMuc2Nhbl9PS0RhdGFPYmpSdW5DdXN0b21FdmVudCh0aGlzLiRkYXRhLnBhcmFtLkJlZm9yZV9PS19FdmVudC5JRCk7XG5cdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHR0aGlzLnNjYW5fT0tEYXRhT2JqUnVuQ3VzdG9tRXZlbnQodGhpcy4kZGF0YS5wYXJhbS5BZnRlcl9PS19FdmVudC5JRCk7XG5cdFx0XHR9LFxuXHRcdFx0YWRkKCl7XG5cdFx0XHRcdHVuaS5zaG93TG9hZGluZyh7XG5cdFx0XHRcdFx0dGl0bGU6XCLliqDovb3kuK0uLi5cIlxuXHRcdFx0XHR9KTtcblx0XHRcdFx0dmFyIHJlcT1bXTtcblx0XHRcdFx0dmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0O1xuXHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xuXHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0dmFyIGFyID0gYXR0cltqXTtcblx0XHRcdFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+36YCJ5oupJyB8fCBhci5WYWx1ZT09J+KAlOKAlOivt+mAieaLqeKAlOKAlCcpIGFyLlZhbHVlPScnO1xuXHRcdFx0XHRcdFx0aWYoYXIuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJylcblx0XHRcdFx0XHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0ICAgICAgICBpZihhci5UeXBlPT0n5byV55So5Lq65ZGYJyB8fCBhci5UeXBlPT0n5byV55So6aG555uuJylcblx0XHRcdFx0ICAgICAgICBcdHJlcS5wdXNoKHsgbmFtZTogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XG5cdFx0XHRcdCAgICAgICAgZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8Jylcblx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBuYW1lOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWU/JzEnOicwJ30pO1xuXHRcdFx0XHQgICAgICAgIGVsc2UgaWYoYXIuVHlwZT09J+Wtl+WFuCcgfHwgYXIuVHlwZT09J+Wtl+WFuC3lrZfnrKbkuLInKXtcblx0XHRcdFx0XHRcdFx0aWYoYXIuc2VsZWN0PT10cnVlKXsgLy/liKTmlq3kuIvmi4nmmK/lkKblpJrpgIlcblx0XHRcdFx0XHRcdFx0XHR2YXIgdmFsU3RyID1cIlwiO1xuXHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgdiBpbiBhci5WYWx1ZSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZih2YWxTdHIpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhbFN0cis9XCI7XCI7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YWxTdHIrPWFyLlZhbHVlW3ZdO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IG5hbWU6IGFyLk5hbWUsIHZhbHVlOiB2YWxTdHJ9KTtcblx0XHRcdFx0XHRcdFx0fWVsc2Vcblx0XHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IG5hbWU6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZX0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IG5hbWU6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZSA/YXIuVmFsdWUgOicnfSk7XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0aWYgKChhci5Ob3RFbXB0eSA9PSAnMScgfHwgYXIubm90ZW1wdHkgPT0gdHJ1ZSkgJiYgIWFyLlZhbHVlKSB7XG5cdFx0XHRcdFx0XHQvLyBpZihhci5ub3RFbXB0eT09JzEnKXtcblx0XHRcdFx0XHRcdFx0dW5pLmhpZGVMb2FkaW5nKCk7XG5cdFx0XHRcdFx0XHRcdC8vIHVuaS5zaG93VG9hc3Qoe3RpdGxlOmFyLkRpc3BOYW1lKyfkuI3og73kuLrnqbrvvIEnLGljb246XCJzdWNjZXNzXCIsZHVyYXRpb246MzAwMH0pO1xuXHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6YXIuRGlzcE5hbWUrJ+S4jeiDveS4uuepuu+8gScsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0dmFyIGVudmlyb21lbnQgPSB7XG5cdFx0XHRcdCAgICAgJ2Z1bmN0aW9uJzogJzMwMDAnLCAvLyDlip/og73ngrnnvJblj7dcblx0XHRcdFx0ICAgICBjbHNfaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCwgICAgIC8vIOWKn+iDveeCueS4u+aVsOaNruexu+agh+ivhlxuXHRcdFx0XHQgICAgICdidXR0b24nOiAndG9wJywgICAvLyB0b3AvYm90dG9tXG5cdFx0XHRcdCAgICAgYnV0dG9uX25hbWU6ICfmlrDlop4nLFxuXHRcdFx0XHQgICAgIG1hc3Rlcjoge1xuXHRcdFx0XHQgICAgICAgICBjbHNfaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCwgXG5cdFx0XHRcdCAgICAgfVxuXHRcdFx0XHR9O1xuXHRcdFx0XHQgXG5cdFx0XHRcdHZhciBkYXRhSW5mbz17XG5cdFx0XHRcdCAgICBjbGFzc19pZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELCBkYXRhX29ial9pZDogJycsIG1hc3RlcmNsc2lkOiAnJyxcblx0XHRcdFx0ICAgIHJlcTogSlNPTi5zdHJpbmdpZnkocmVxKSwgdXBmaWxlOiBKU09OLnN0cmluZ2lmeShbXSksIHBvc3RfZGF0YTogSlNPTi5zdHJpbmdpZnkoe30pLFxuXHRcdFx0XHQgICAgY29tcG9zZTogSlNPTi5zdHJpbmdpZnkoW10pLCByZWZkYXRhc3RvcmU6IEpTT04uc3RyaW5naWZ5KFtdKSwgZXh0aW5mbzogSlNPTi5zdHJpbmdpZnkoZW52aXJvbWVudCksIFxuXHRcdFx0XHRcdG5vdF90cmlnZ2VyX3N5c19ldmVudDogJydcblx0XHRcdFx0fTtcblx0XHRcdFx0XG5cdFx0XHRcdC8vIHJldHVyblxuXHRcdFx0XHRjb25zb2xlLmxvZyhkYXRhSW5mbyk7XG5cdFx0XHRcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdhZGRjbGFzc2F0dHInLGRhdGFJbmZvKS50aGVuKHN1Y2Nlc3M9Pntcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhzdWNjZXNzKTtcblx0XHRcdFx0XHR1bmkuaGlkZUxvYWRpbmcoKTtcblx0XHRcdFx0XHRpZiAoc3VjY2Vzcy5jb2RlPT0nMDAwMDAnKSB7XG5cdFx0XHRcdFx0XHR2YXIgYWN0aW9uID0gSlNPTi5wYXJzZShzdWNjZXNzLmRhdGEuQWN0aW9uKTtcblx0XHRcdFx0XHRcdGlmKGFjdGlvbi5yZXQ9PScwJyl7XG5cdFx0XHRcdFx0XHRcdGlmKGFjdGlvbi5yZXN1bHRfdHlwZT09JzAnKXtcblx0XHRcdFx0XHRcdFx0XHR1bmkuc2hvd1RvYXN0KHt0aXRsZTphY3Rpb24ucmVzdWx0LGljb246XCJzdWNjZXNzXCIsZHVyYXRpb246MzAwMH0pO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdC8vIFwie1wicmV0XCI6MCwgXCJyZXN1bHRfdHlwZVwiOjAsIFwicmVzdWx0XCI6XCLliJvlu7rmiJDlip8xMjMxMjMxMjNcIixcImluZm9cIjpcIlwifVwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQvL+WIt+aWsFxuXHRcdFx0XHRcdFx0dW5pLnJlZGlyZWN0VG8oe1xuXHRcdFx0XHRcdFx0XHR1cmw6Jy4uL21vZGFsL21zX2NsYXNzQXR0cj9wYXJhbT0nK0pTT04uc3RyaW5naWZ5KHRoaXMuJGRhdGEucGFyYW0pK1wiJnRpdGxlbmFtZT1cIit0aGlzLiRkYXRhLnRpdGxlXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdC8vIHRoaXMuY2xhc3NfYXR0cl9pbml0KCk7XG5cdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivr1wiLGNvbnRlbnQ6c3VjY2Vzcy5tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KS5jYXRjaChleD0+e1xuXHRcdFx0XHRcdGNvbnNvbGUubG9nKGV4KTtcblx0XHRcdFx0XHR1bmkuaGlkZUxvYWRpbmcoKTtcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0sXG5cdFx0XHRjbGFzc19hdHRyX2luaXQoKXtcblx0XHRcdFx0dmFyIGF0dHJsaXN0ID0gdGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5zaG93X3N0eWxlXG5cdFx0XHRcdHZhciBuZXdhdHRybGlzdCA9IFtdO1xuXHRcdFx0XHRpZiAodGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0ICAgICAgICB2YXIgb3BlbiA9IGF0dHJsaXN0W2ldLm9wZW47XG5cdFx0XHRcdCAgICAgICAgdmFyIG5hbWUgPSBhdHRybGlzdFtpXS5hdHRyZ3JvdXBfbmFtZTtcblx0XHRcdFx0ICAgICAgICB2YXIgYXR0cnMgPSBhdHRybGlzdFtpXS5hdHRycztcblx0XHRcdFx0ICAgICAgICBmb3IgKHZhciBzID0gMDsgcyA8IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdC5sZW5ndGg7IHMrKykge1xuXHRcdFx0XHQgICAgICAgICAgICB2YXIgY2xzYXR0ciA9IHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtzXTtcblx0XHRcdFx0ICAgICAgICAgICAgaWYgKG5hbWUgPT0gY2xzYXR0ci5OYW1lKSB7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICB2YXIgYXR0ciA9IFtdO1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhdHRycy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGwgPSAwOyBsIDwgY2xzYXR0ci5BdHRyLmxlbmd0aDsgbCsrKSB7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYSA9IGNsc2F0dHIuQXR0cltsXTtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF0dHJzW2pdLmF0dHIgPT0gY2EuTmFtZSkge1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuYWN0aW9uID0gYXR0cnNbal0uYWN0aW9uO1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuZWRpdCA9IGF0dHJzW2pdLmVkaXQ7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5ub3RlbXB0eSA9IGF0dHJzW2pdLm5vdGVtcHR5O1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuZXh0X2J1dHRvbiA9IGF0dHJzW2pdLmV4dF9idXR0b247XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5idXR0b25faW1nID0gYXR0cnNbal0uYnV0dG9uX2ltZztcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmJ1dHRvbl90b29sdGlwID0gYXR0cnNbal0uYnV0dG9uX3Rvb2x0aXA7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5iZWZvcmVfY2xpY2tfYnV0dG9uID0gYXR0cnNbal0uYmVmb3JlX2NsaWNrX2J1dHRvbjtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmJ1dHRvbl9jYWxsYmFjayA9IGF0dHJzW2pdLmJ1dHRvbl9jYWxsYmFjaztcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmhpZGRlbiA9IGF0dHJzW2pdLmhpZGRlbjtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLnNlbGVjdCA9IGF0dHJzW2pdLnNlbGVjdD09dW5kZWZpbmVkP2ZhbHNlOmF0dHJzW2pdLnNlbGVjdDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9XCJcIjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5kaWN0aXRlbSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5zZWxlY3QgPT0gdHJ1ZSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPSBbXTsvL2NhLmRpY3RpdGVtWzBdLkNOX1NfTkFNRTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVsc2UgXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlZhbHVlID0gJ+ivt+mAieaLqSc7Ly9jYS5kaWN0aXRlbVswXS5DTl9TX05BTUU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZGljdGl0ZW1saXN0PVtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgZCA9IDA7IGQgPCBjYS5kaWN0aXRlbS5sZW5ndGg7IGQrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5kaWN0aXRlbVtkXS5sYWJlbD1jYS5kaWN0aXRlbVtkXS5DTl9TX05BTUU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLmRpY3RpdGVtW2RdLnZhbHVlPWNhLmRpY3RpdGVtW2RdLkNOX1NfTkFNRTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY2EuZGljdGl0ZW1bZF0uQ05fQ19JU19ERUZBVUxUPT0nMScpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWU9Y2EuZGljdGl0ZW1bZF0uQ05fU19OQU1FO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5UeXBlPT0n5pel5pyfJyB8fCBjYS5UeXBlPT0n5pe26Ze0Jyl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgbm93RGF0ZSA9IG5ldyBEYXRlKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZGF0ZSA9IHt5ZWFyOiBub3dEYXRlLmdldEZ1bGxZZWFyKCksbW9udGg6IG5vd0RhdGUuZ2V0TW9udGgoKSArIDEsZGF5OiBub3dEYXRlLmdldERhdGUoKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlZhbHVlID0gZGF0ZS55ZWFyICsgJy0nICsgKGRhdGUubW9udGggPj0gMTAgPyBkYXRlLm1vbnRoIDogJzAnICsgZGF0ZS5tb250aCkgKyAnLScgKyAoZGF0ZS5kYXkgPj0gMTAgPyBkYXRlLmRheSA6ICcwJyArIGRhdGUuZGF5KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY2EuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJyl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgcmVsQ2xzTGlzdD1bXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBhdHRyX3Jlc2NscyA9IGNhLlJlbENscy5zcGxpdCgnLCcpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBpaSBpbiBhdHRyX3Jlc2Nscyl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciByZXNjbHMgPSBhdHRyX3Jlc2Nsc1tpaV0uc3BsaXQoJ3wnKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVsQ2xzTGlzdC5wdXNoKHtpZDpyZXNjbHNbMF0sbmFtZTpyZXNjbHNbMV19KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlJlbENsc0xpc3QgPSByZWxDbHNMaXN0O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPSAn6K+3Jztcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY2EuVHlwZT09J+ecgeW4guWMuicpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9ICfor7fpgInmi6knO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGNhLlR5cGU9PSfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ci5wdXNoKGNhKTtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIH1cblx0XHRcdFx0ICAgICAgICAgICAgICAgIH1cblx0XHRcdFx0ICAgICAgICAgICAgICAgIG5ld2F0dHJsaXN0LnB1c2goe1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIEJrQ29sb3I6IGNsc2F0dHIuQmtDb2xvcixcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICBIYXNBY2U6IGNsc2F0dHIuSGFzQWNlLFxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIEltZ0ZvbnRTdHlsZTogY2xzYXR0ci5JbWdGb250U3R5bGUsXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgTmFtZTogY2xzYXR0ci5OYW1lLFxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIE9yZGVyOiBjbHNhdHRyLk9yZGVyLFxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIE9wZW46IG9wZW4sXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgQXR0cjogYXR0cixcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnRyb2xfc3R5bGU6dGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5jb250cm9sX3N0eWxlLFxuXHRcdFx0XHRcdFx0XHRcdFx0dGl0bGVfcF93ZGl0aDp0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLnRpdGxlX3Bfd2RpdGgsXG5cdFx0XHRcdFx0XHRcdFx0XHRGb250OnRoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuRm9udD90aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLkZvbnQ6e30sXG5cdFx0XHRcdFx0XHRcdFx0XHRCa19Db2xvcjp0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLkJrX0NvbG9yP3RoaXMuJGRhdGEuY2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuQmtfQ29sb3I6JyNGRkZGRkYnLFxuXHRcdFx0XHRcdFx0XHRcdFx0VGV4dF9Db2xvcjp0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLlRleHRfQ29sb3I/dGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5UZXh0X0NvbG9yOicjMDAwMDAwJ1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgfSlcblx0XHRcdFx0ICAgICAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0ICAgIH1cblx0XHRcdFx0ICAgIGlmIChuZXdhdHRybGlzdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdCAgICAgICAgdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0ID0gbmV3YXR0cmxpc3Q7XG5cdFx0XHRcdCAgICB9XG5cdFx0XHRcdFx0dmFyIHJlcT1bXTtcblx0XHRcdFx0ICAgIGlmICh0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmKSB7XG5cdFx0XHRcdCAgICAgICAgIGlmICh0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLnNob3dfc3R5bGUubGVuZ3RoID4gMCkge1xuXHRcdFx0XHQgICAgICAgICAgICB2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLnNob3dfc3R5bGVcblx0XHRcdFx0ICAgICAgICAgICAgLy8gJGVsLmZpbmQoJy5hdHRyX2ZpZWxkJykucHJvcCgncmVhZG9ubHknLCB0cnVlKTtcblx0XHRcdFx0ICAgICAgICAgICAgLy8gJGVsLmZpbmQoJy5hdHRyX2ZpZWxkJykucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTtcblx0XHRcdFx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgdmFyIGF0dHIgPSBhdHRybGlzdFtpXS5hdHRyc1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgdmFyIGFyID0gYXR0cltqXTtcblx0XHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuYXR0ciwgdmFsdWU6IGFyLnZhbHVlP2FyLnZhbHVlOicnIH0pO1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgICAgICB9XG5cdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHRcdH1cdFxuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdHZhciBldmVudGxpc3QgPSB0aGlzLiRkYXRhLmNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLmV2ZW50O1xuXHRcdFx0XHRcdGlmIChldmVudGxpc3QpIHtcblx0XHRcdFx0XHQgICAgaWYgKGV2ZW50bGlzdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50bGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdCAgICAgICAgICAgIGlmIChldmVudGxpc3RbaV0uZXZlbnRfaWQgPT0gJ2JlZm9yZV9vaycpIHtcblx0XHRcdFx0XHQgICAgICAgICAgICAgICAgdGhpcy4kZGF0YS5lZGl0X29rX2V2ZW50ID0gZXZlbnRsaXN0W2ldO1xuXHRcdFx0XHRcdCAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnRsaXN0W2ldLmV2ZW50X2lkID09ICdpbml0aWFsJykge1xuXHRcdFx0XHRcdCAgICAgICAgICAgICAgICB0aGlzLiRkYXRhLmVkaXRfaW5pdGFsX2V2ZW50ID0gZXZlbnRsaXN0W2ldO1xuXHRcdFx0XHRcdCAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnRsaXN0W2ldLmV2ZW50X2lkID09ICdiZWZvcmVfc2VsZWN0X2NvbXBvc2UnKSB7XG5cdFx0XHRcdFx0ICAgICAgICAgICAgICAgIHRoaXMuJGRhdGEuZWRpdF9zZWxlY3RfY29tcG9zZV9ldmVudCA9IGV2ZW50bGlzdFtpXS5zY3JpcF9pZDtcblx0XHRcdFx0XHQgICAgICAgICAgICAgICAgdGhpcy4kZGF0YS5lZGl0X2NvbXBvc2VfY2xzX2lkID0gZXZlbnRsaXN0W2ldLmNvbXBvc2VfY2xzX2lkO1xuXHRcdFx0XHRcdCAgICAgICAgICAgIH1cblx0XHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2cocmVxKTtcblx0XHRcdFx0XHRpZiAodGhpcy4kZGF0YS5lZGl0X2luaXRhbF9ldmVudCkge1xuXHRcdFx0XHRcdCAgICB2YXIgZXZlbnRpZCA9IHRoaXMuJGRhdGEuZWRpdF9pbml0YWxfZXZlbnQuc2NyaXBfaWQ7XG5cdFx0XHRcdFx0ICAgIHZhciBpbmZvID0ge1xuXHRcdFx0XHRcdCAgICAgICAgZXZlbnRpZDogZXZlbnRpZCxcblx0XHRcdFx0XHQgICAgICAgIGVkdHlwZTogXCIwXCIsXG5cdFx0XHRcdFx0ICAgICAgICBwcm9qZWN0aWQ6ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgcmNsc2lkOiAnJyxcblx0XHRcdFx0XHQgICAgICAgIHJvYmppZDogJycsXG5cdFx0XHRcdFx0ICAgICAgICB1c2VybG9naW46ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgY2xzaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCxcblx0XHRcdFx0XHQgICAgICAgIG9iamlkOiBcIlwiLFxuXHRcdFx0XHRcdCAgICAgICAgYXR0cjogcmVxLFxuXHRcdFx0XHRcdCAgICB9XG5cdFx0XHRcdFx0ICAgIHRoaXMuaW5pX0RhdGFPYmpSdW5DdXN0b21FdmVudChpbmZvKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc29sZS5sb2codGhpcy4kZGF0YS5jbGFzc0dyaWRTdHlsZSk7XG5cdFx0XHRcdFx0Y29uc29sZS5sb2codGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0KTtcblx0XHRcdFx0XHRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCLmnKrmib7liLDlj6/mmL7npLrnmoTnmoTlsZ7mgKdcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHN1YkNsYXNzX2F0dHJfaW5pdCgpe1xuXHRcdFx0XHR2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLnNob3dfc3R5bGVcblx0XHRcdFx0dmFyIG5ld2F0dHJsaXN0ID0gW107XG5cdFx0XHRcdGlmICh0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3QubGVuZ3RoID4gMCkge1xuXHRcdFx0XHQgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRybGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHQgICAgICAgIHZhciBvcGVuID0gYXR0cmxpc3RbaV0ub3Blbjtcblx0XHRcdFx0ICAgICAgICB2YXIgbmFtZSA9IGF0dHJsaXN0W2ldLmF0dHJncm91cF9uYW1lO1xuXHRcdFx0XHQgICAgICAgIHZhciBhdHRycyA9IGF0dHJsaXN0W2ldLmF0dHJzO1xuXHRcdFx0XHQgICAgICAgIGZvciAodmFyIHMgPSAwOyBzIDwgdGhpcy4kZGF0YS5zdWJDbGFzc0F0dHJMaXN0Lmxlbmd0aDsgcysrKSB7XG5cdFx0XHRcdCAgICAgICAgICAgIHZhciBjbHNhdHRyID0gdGhpcy4kZGF0YS5zdWJDbGFzc0F0dHJMaXN0W3NdO1xuXHRcdFx0XHQgICAgICAgICAgICBpZiAobmFtZSA9PSBjbHNhdHRyLk5hbWUpIHtcblx0XHRcdFx0ICAgICAgICAgICAgICAgIHZhciBhdHRyID0gW107XG5cdFx0XHRcdCAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGF0dHJzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbCA9IDA7IGwgPCBjbHNhdHRyLkF0dHIubGVuZ3RoOyBsKyspIHtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhID0gY2xzYXR0ci5BdHRyW2xdO1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXR0cnNbal0uYXR0ciA9PSBjYS5OYW1lKSB7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5hY3Rpb24gPSBhdHRyc1tqXS5hY3Rpb247XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5lZGl0ID0gYXR0cnNbal0uZWRpdDtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLm5vdGVtcHR5ID0gYXR0cnNbal0ubm90ZW1wdHk7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYS5leHRfYnV0dG9uID0gYXR0cnNbal0uZXh0X2J1dHRvbjtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmJ1dHRvbl9pbWcgPSBhdHRyc1tqXS5idXR0b25faW1nO1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuYnV0dG9uX3Rvb2x0aXAgPSBhdHRyc1tqXS5idXR0b25fdG9vbHRpcDtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhLmJlZm9yZV9jbGlja19idXR0b24gPSBhdHRyc1tqXS5iZWZvcmVfY2xpY2tfYnV0dG9uO1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuYnV0dG9uX2NhbGxiYWNrID0gYXR0cnNbal0uYnV0dG9uX2NhbGxiYWNrO1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2EuaGlkZGVuID0gYXR0cnNbal0uaGlkZGVuO1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Euc2VsZWN0ID0gYXR0cnNbal0uc2VsZWN0PT11bmRlZmluZWQ/ZmFsc2U6YXR0cnNbal0uc2VsZWN0O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlZhbHVlID1cIlwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGNhLmRpY3RpdGVtKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGNhLnNlbGVjdCA9PSB0cnVlKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9IFtdOy8vY2EuZGljdGl0ZW1bMF0uQ05fU19OQU1FO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZWxzZSBcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPSAn6K+36YCJ5oupJzsvL2NhLmRpY3RpdGVtWzBdLkNOX1NfTkFNRTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBkaWN0aXRlbWxpc3Q9W107XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBkID0gMDsgZCA8IGNhLmRpY3RpdGVtLmxlbmd0aDsgZCsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLmRpY3RpdGVtW2RdLmxhYmVsPWNhLmRpY3RpdGVtW2RdLkNOX1NfTkFNRTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuZGljdGl0ZW1bZF0udmFsdWU9Y2EuZGljdGl0ZW1bZF0uQ05fU19OQU1FO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5kaWN0aXRlbVtkXS5DTl9DX0lTX0RFRkFVTFQ9PScxJylcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZT1jYS5kaWN0aXRlbVtkXS5DTl9TX05BTUU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGNhLlR5cGU9PSfml6XmnJ8nIHx8IGNhLlR5cGU9PSfml7bpl7QnKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBub3dEYXRlID0gbmV3IERhdGUoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBkYXRlID0ge3llYXI6IG5vd0RhdGUuZ2V0RnVsbFllYXIoKSxtb250aDogbm93RGF0ZS5nZXRNb250aCgpICsgMSxkYXk6IG5vd0RhdGUuZ2V0RGF0ZSgpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuVmFsdWUgPSBkYXRlLnllYXIgKyAnLScgKyAoZGF0ZS5tb250aCA+PSAxMCA/IGRhdGUubW9udGggOiAnMCcgKyBkYXRlLm1vbnRoKSArICctJyArIChkYXRlLmRheSA+PSAxMCA/IGRhdGUuZGF5IDogJzAnICsgZGF0ZS5kYXkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciByZWxDbHNMaXN0PVtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGF0dHJfcmVzY2xzID0gY2EuUmVsQ2xzLnNwbGl0KCcsJyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGlpIGluIGF0dHJfcmVzY2xzKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHJlc2NscyA9IGF0dHJfcmVzY2xzW2lpXS5zcGxpdCgnfCcpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZWxDbHNMaXN0LnB1c2goe2lkOnJlc2Nsc1swXSxuYW1lOnJlc2Nsc1sxXX0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2EuUmVsQ2xzTGlzdCA9IHJlbENsc0xpc3Q7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9ICfor7cnO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjYS5UeXBlPT0n55yB5biC5Yy6Jylcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLlZhbHVlID0gJ+ivt+mAieaLqSc7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY2EuVHlwZT09J+W4g+WwlOWAvCcpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5WYWx1ZSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyLnB1c2goY2EpO1xuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgICAgICAgICAgfVxuXHRcdFx0XHQgICAgICAgICAgICAgICAgbmV3YXR0cmxpc3QucHVzaCh7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgQmtDb2xvcjogY2xzYXR0ci5Ca0NvbG9yLFxuXHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIEhhc0FjZTogY2xzYXR0ci5IYXNBY2UsXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgSW1nRm9udFN0eWxlOiBjbHNhdHRyLkltZ0ZvbnRTdHlsZSxcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICBOYW1lOiBjbHNhdHRyLk5hbWUsXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgT3JkZXI6IGNsc2F0dHIuT3JkZXIsXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgT3Blbjogb3Blbixcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICBBdHRyOiBhdHRyLFxuXHRcdFx0XHRcdFx0XHRcdFx0Y29udHJvbF9zdHlsZTp0aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLmNvbnRyb2xfc3R5bGUsXG5cdFx0XHRcdFx0XHRcdFx0XHR0aXRsZV9wX3dkaXRoOnRoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYudGl0bGVfcF93ZGl0aCxcblx0XHRcdFx0XHRcdFx0XHRcdEZvbnQ6dGhpcy4kZGF0YS5zdWJDbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5Gb250P3RoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuRm9udDp7fSxcblx0XHRcdFx0XHRcdFx0XHRcdEJrX0NvbG9yOnRoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuQmtfQ29sb3I/dGhpcy4kZGF0YS5zdWJDbGFzc0dyaWRTdHlsZS5TdHlsZURlZi5Ca19Db2xvcjonI0ZGRkZGRicsXG5cdFx0XHRcdFx0XHRcdFx0XHRUZXh0X0NvbG9yOnRoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuVGV4dF9Db2xvcj90aGlzLiRkYXRhLnN1YkNsYXNzR3JpZFN0eWxlLlN0eWxlRGVmLlRleHRfQ29sb3I6JyMwMDAwMDAnXG5cdFx0XHRcdCAgICAgICAgICAgICAgICB9KVxuXHRcdFx0XHQgICAgICAgICAgICB9XG5cdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHQgICAgfVxuXHRcdFx0XHQgICAgaWYgKG5ld2F0dHJsaXN0Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0ICAgICAgICB0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3QgPSBuZXdhdHRybGlzdDtcblx0XHRcdFx0ICAgIH1cblx0XHRcdFx0XHR2YXIgcmVxPVtdO1xuXHRcdFx0XHQgICAgaWYgKHRoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYpIHtcblx0XHRcdFx0ICAgICAgICAgaWYgKHRoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuc2hvd19zdHlsZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdCAgICAgICAgICAgIHZhciBhdHRybGlzdCA9IHRoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuc2hvd19zdHlsZVxuXHRcdFx0XHQgICAgICAgICAgICAvLyAkZWwuZmluZCgnLmF0dHJfZmllbGQnKS5wcm9wKCdyZWFkb25seScsIHRydWUpO1xuXHRcdFx0XHQgICAgICAgICAgICAvLyAkZWwuZmluZCgnLmF0dHJfZmllbGQnKS5wcm9wKCdkaXNhYmxlZCcsIHRydWUpO1xuXHRcdFx0XHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICB2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLmF0dHJzXG5cdFx0XHRcdCAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICB2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5hdHRyLCB2YWx1ZTogYXIudmFsdWU/YXIudmFsdWU6JycgfSk7XG5cdFx0XHRcdCAgICAgICAgICAgICAgICB9XG5cdFx0XHRcdCAgICAgICAgICAgIH1cblx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdFx0fVx0XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0dmFyIGV2ZW50bGlzdCA9IHRoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGUuU3R5bGVEZWYuZXZlbnQ7XG5cdFx0XHRcdFx0aWYgKGV2ZW50bGlzdCkge1xuXHRcdFx0XHRcdCAgICBpZiAoZXZlbnRsaXN0Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXZlbnRsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0ICAgICAgICAgICAgaWYgKGV2ZW50bGlzdFtpXS5ldmVudF9pZCA9PSAnYmVmb3JlX29rJykge1xuXHRcdFx0XHRcdCAgICAgICAgICAgICAgICB0aGlzLiRkYXRhLmVkaXRfb2tfZXZlbnQgPSBldmVudGxpc3RbaV07XG5cdFx0XHRcdFx0ICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudGxpc3RbaV0uZXZlbnRfaWQgPT0gJ2luaXRpYWwnKSB7XG5cdFx0XHRcdFx0ICAgICAgICAgICAgICAgIHRoaXMuJGRhdGEuZWRpdF9pbml0YWxfZXZlbnQgPSBldmVudGxpc3RbaV07XG5cdFx0XHRcdFx0ICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudGxpc3RbaV0uZXZlbnRfaWQgPT0gJ2JlZm9yZV9zZWxlY3RfY29tcG9zZScpIHtcblx0XHRcdFx0XHQgICAgICAgICAgICAgICAgdGhpcy4kZGF0YS5lZGl0X3NlbGVjdF9jb21wb3NlX2V2ZW50ID0gZXZlbnRsaXN0W2ldLnNjcmlwX2lkO1xuXHRcdFx0XHRcdCAgICAgICAgICAgICAgICB0aGlzLiRkYXRhLmVkaXRfY29tcG9zZV9jbHNfaWQgPSBldmVudGxpc3RbaV0uY29tcG9zZV9jbHNfaWQ7XG5cdFx0XHRcdFx0ICAgICAgICAgICAgfVxuXHRcdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhyZXEpO1xuXHRcdFx0XHRcdGlmICh0aGlzLiRkYXRhLmVkaXRfaW5pdGFsX2V2ZW50KSB7XG5cdFx0XHRcdFx0ICAgIHZhciBldmVudGlkID0gdGhpcy4kZGF0YS5lZGl0X2luaXRhbF9ldmVudC5zY3JpcF9pZDtcblx0XHRcdFx0XHQgICAgdmFyIGluZm8gPSB7XG5cdFx0XHRcdFx0ICAgICAgICBldmVudGlkOiBldmVudGlkLFxuXHRcdFx0XHRcdCAgICAgICAgZWR0eXBlOiBcIjBcIixcblx0XHRcdFx0XHQgICAgICAgIHByb2plY3RpZDogJycsXG5cdFx0XHRcdFx0ICAgICAgICByY2xzaWQ6ICcnLFxuXHRcdFx0XHRcdCAgICAgICAgcm9iamlkOiAnJyxcblx0XHRcdFx0XHQgICAgICAgIHVzZXJsb2dpbjogJycsXG5cdFx0XHRcdFx0ICAgICAgICBjbHNpZDogdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLklELFxuXHRcdFx0XHRcdCAgICAgICAgb2JqaWQ6IFwiXCIsXG5cdFx0XHRcdFx0ICAgICAgICBhdHRyOiByZXEsXG5cdFx0XHRcdFx0ICAgIH1cblx0XHRcdFx0XHQgICAgdGhpcy5zY2FuX2luaV9EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKHRoaXMuJGRhdGEuc3ViQ2xhc3NHcmlkU3R5bGUpO1xuXHRcdFx0XHRcdGNvbnNvbGUubG9nKHRoaXMuJGRhdGEuc3ViQ2xhc3NBdHRyTGlzdCk7XG5cdFx0XHRcdFx0XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50Olwi5pyq5om+5Yiw5Y+v5pi+56S655qE55qE5bGe5oCnXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRpbmlfRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8pe1xuXHRcdFx0XHR2YXIgcGFyYW0gPSB7XG5cdFx0XHRcdCAgICBFZGl0U3R5bGU6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5WaWV3X1N0eWxlLk5hbWUsXG5cdFx0XHRcdCAgICBWaWV3U3R5bGU6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5WaWV3X1N0eWxlLk5hbWUsXG5cdFx0XHRcdCAgICBOb3RUcmlnZ2VyU3lzRXZlbnQ6IDAsXG5cdFx0XHRcdCAgICBlbnZpcm9tZW50OiB7XG5cdFx0XHRcdCAgICAgICAgJ2Z1bmN0aW9uJzogJzMwMDAnLCAvLyDlip/og73ngrnnvJblj7dcblx0XHRcdFx0ICAgICAgICBjbHNfaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCwgICAgIC8vIOWKn+iDveeCueS4u+aVsOaNruexu+agh+ivhlxuXHRcdFx0XHQgICAgICAgICdidXR0b24nOiAndG9wJywgICAvLyB0b3AvYm90dG9tXG5cdFx0XHRcdCAgICAgICAgYnV0dG9uX25hbWU6ICfmlrDlop4nLFxuXHRcdFx0XHQgICAgICAgIG1hc3Rlcjoge1xuXHRcdFx0XHQgICAgICAgICAgICBjbHNfaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCwgLy8gYnV0dG9uPWJvdHRvbeaXtiBtYXN0ZXLnmoRjbHNfaWRcblx0XHRcdFx0ICAgICAgICAgICAgLy9vYmpfaWQ6ICcnICAvLyBidXR0b249Ym90dG9t5pe2IG1hc3RlcueahG9ial9pZFxuXHRcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0ICAgIH1cblx0XHRcdFx0fVxuXHRcdFx0XHR2YXIgaW5wdXRwYXJhbWV0ZXIgPSAnJztcblx0XHRcdFx0dmFyIGdsb2JhbF9hdHRyID0gJyc7XG5cdFx0XHRcdFxuXHRcdFx0XHR2YXIgZGF0YUluZm8gPSB7XG4gICAgICAgICAgICAgICAgICAgIGVkdHlwZTogaW5mby5lZHR5cGUsIGV2ZW50aWQ6IGluZm8uZXZlbnRpZCwgcHJvamVjdGlkOiBpbmZvLnByb2plY3RpZCxcbiAgICAgICAgICAgICAgICAgICAgcmNsc2lkOiBpbmZvLnJjbHNpZCwgcm9iamlkOiBpbmZvLnJvYmppZCwgdXNlcmxvZ2luOiBpbmZvLnVzZXJsb2dpbiwgY2xzaWQ6IGluZm8uY2xzaWQsIG9iamlkOiBpbmZvLm9iamlkLFxuICAgICAgICAgICAgICAgICAgICBhdHRyOiBKU09OLnN0cmluZ2lmeShpbmZvLmF0dHIpLCBleHRpbmZvOiBKU09OLnN0cmluZ2lmeShwYXJhbSksIGlucHV0cGFyYW1ldGVyOiBpbnB1dHBhcmFtZXRlciwgZ2xvYmFsX2F0dHI6IGdsb2JhbF9hdHRyXG4gICAgICAgICAgICAgICAgfVxuXHRcdFx0XHRjb25zb2xlLmxvZyhkYXRhSW5mbyk7XG5cdFx0XHRcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdEYXRhT2JqUnVuQ3VzdG9tRXZlbnRJbmZvJyxkYXRhSW5mbykudGhlbihzdWNjZXNzPT57XG5cdFx0XHRcdFx0Y29uc29sZS5sb2coc3VjY2Vzcyk7XG5cdFx0XHRcdFx0aWYgKHN1Y2Nlc3MuY29kZT09JzAwMDAwJykge1xuXHRcdFx0XHRcdFx0dmFyIGRhdGEgPSBKU09OLnBhcnNlKHN1Y2Nlc3MuZGF0YSk7XG5cdFx0XHRcdFx0XHR2YXIgYWN0aW9ubGlzdCA9IGRhdGEuYWN0aW9uO1xuXHRcdFx0XHRcdFx0aWYgKGFjdGlvbmxpc3QpIHtcblx0XHRcdFx0XHRcdCAgICBmb3IgKHZhciBqID0gMDsgaiA8IGFjdGlvbmxpc3QubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdCAgICAgICAgdmFyIGFjdGlvbiA9IGFjdGlvbmxpc3Rbal1cblx0XHRcdFx0XHRcdCAgICAgICAgdmFyIGFjdGlvbl90eXBlID0gYWN0aW9uLmFjdGlvbl90eXBlO1xuXHRcdFx0XHRcdFx0ICAgICAgICB2YXIgdmFsdWUgPSBhY3Rpb24udmFsdWU7XG5cdFx0XHRcdFx0XHQgICAgICAgIGlmIChhY3Rpb25fdHlwZSA9PSAnc2V0X2RsZ19hdHRyJykge1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgdmFyIHZhbCA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpIHtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgdmFsID0gSlNPTi5wYXJzZSh2YWx1ZSk7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyh2YWwpO1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgYSA9IDA7IGEgPCB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3QubGVuZ3RoOyBhKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGwgPSAwOyBsIDwgdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2FdLkF0dHIubGVuZ3RoOyBsKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGNhID0gdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2FdLkF0dHJbbF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICh2YWxbaV0uYXR0ciAgPT0gY2EuTmFtZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGNhLlR5cGU9PSflrZflhbgnIHx8IGNhLlR5cGU9PSflrZflhbgt5a2X56ym5LiyJyl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZGljdEl0ZW1MaXN0PVtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBkIGluIHZhbFtpXS5jaG9pY2VfbGlzdCl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciB2YWwgPXZhbFtpXS5jaG9pY2VfbGlzdFtkXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGljdEl0ZW1MaXN0LnB1c2goe1wiQ05fU19OQU1FXCI6dmFsLFwiTmFtZVwiOnZhbCxcImxhYmVsXCI6dmFsLFwidmFsdWVcIjp2YWx9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYS5kaWN0aXRlbSA9IGRpY3RJdGVtTGlzdDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGF0dHJbal0uZGljdGl0ZW0gPSB2YWxbaV0uY2hvaWNlX2xpc3Q7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBjYS52YWx1ZSA9IHZhbFtpXS52YWx1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSAwO1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmZpbHRlcihmdW5jdGlvbiAocykge1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbFtpXS5hdHRyID09IHMuYXR0clxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICB9KS5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IDE7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5wdXNoKHZhbFtpXSk7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgICAgIH1cblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgaWYgKGxlbmd0aCA9PSAwKSB7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLmF0dHIgPT0gdmFsW2ldLmF0dHIpIHtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0udmFsdWUgPSB2YWxbaV0udmFsdWU7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICB9XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgfVxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgfVxuXHRcdFx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdFx0XHQgICAgICAgIGlmIChhY3Rpb25fdHlwZSA9PSAnb3Blbl9zZWxlY3RfdXNlcmRsZycpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMi4yXCIsY29udGVudDpcIm9wZW5fc2VsZWN0X3VzZXJkbGfov5nkuKphY3Rpb25fdHlwZei/mOacquWkhOeQhu+8gVwiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdFx0XHQgICAgfVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzJcIixjb250ZW50OnN1Y2Nlc3MubXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSkuY2F0Y2goZXg9Pntcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhleCk7XG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68yLjFcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9LFxuXHRcdCAgICBEYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbyxkYXRhX2F0dHIpe1xuXHRcdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdCAgICBcdHZhciBlbnZpcm9tZW50ID0ge1xuXHRcdCAgICBcdCAgICAnZnVuY3Rpb24nOiAnMzAwMCcsIC8vIOWKn+iDveeCuee8luWPt1xuXHRcdCAgICBcdCAgICBjbHNfaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCwgICAgIC8vIOWKn+iDveeCueS4u+aVsOaNruexu+agh+ivhlxuXHRcdCAgICBcdCAgICAnYnV0dG9uJzogJ3RvcCcsICAgLy8gdG9wL2JvdHRvbVxuXHRcdCAgICBcdCAgICBidXR0b25fbmFtZTogJ+aWsOWinicsXG5cdFx0ICAgIFx0ICAgIG1hc3Rlcjoge1xuXHRcdCAgICBcdCAgICAgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsIC8vIGJ1dHRvbj1ib3R0b23ml7YgbWFzdGVy55qEY2xzX2lkXG5cdFx0ICAgIFx0ICAgICAgICAvL29ial9pZDogJycgIC8vIGJ1dHRvbj1ib3R0b23ml7YgbWFzdGVy55qEb2JqX2lkXG5cdFx0ICAgIFx0ICAgIH1cblx0XHQgICAgXHR9O1xuXHRcdFx0XHRlbnZpcm9tZW50LmVkaXRfZGxnID0ge1xuXHRcdFx0XHQgICAgdHlwZTogJ3NtYWxsJywvL+Wwj+eql+WPo1xuXHRcdFx0XHQgICAgY2xhc3NfaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCwvL+W9k+WJjeaVsOaNruexu2lkXG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGRhdGFfYXR0cikge1xuXHRcdFx0XHQgICAgZW52aXJvbWVudC5lZGl0X2RsZy5mb3JtX2NvbnRyb2wgPSB7Ly/miYDlsZ7nmoTooajljZXmjqfku7Zcblx0XHRcdFx0ICAgICAgICBuYW1lOiBkYXRhX2F0dHIuTmFtZSwvL+Wtl+auteWxnuaAp1xuXHRcdFx0XHQgICAgICAgIHRleHQ6IGRhdGFfYXR0ci5EaXNwTmFtZSwvL+aYvuekuuaWh+acrFxuXHRcdFx0XHQgICAgICAgIGdyb3VwX25hbWU6IGRhdGFfYXR0ci5Hcm91cE5hbWUsLy/lsZ7mgKfnu4Rcblx0XHRcdFx0ICAgICAgICB0eXBlOiBkYXRhX2F0dHIuVHlwZSwvL+Wtl+auteexu+Wei1xuXHRcdFx0XHQgICAgICAgIHJlYWRvbmx5OiBkYXRhX2F0dHIuUmVhZE9ubHksLy/mmK/lkKblj6ror7tcblx0XHRcdFx0ICAgICAgICBidXR0b25faW1nOiBkYXRhX2F0dHIuYnV0dG9uX2ltZywvL+W8leeUqOaMiemSrueahOWbvuagh1xuXHRcdFx0XHQgICAgICAgIGJ1dHRvbl90b29sdGlwOiBkYXRhX2F0dHIuYnV0dG9uX3Rvb2x0aXAvL+W8leeUqOaMiemSrueahHRvb2x0aXBcblx0XHRcdFx0ICAgIH1cblx0XHRcdFx0fVxuXHRcdCAgICBcdHZhciBkYXRhSW5mbyA9IHtcblx0XHQgICAgICAgICAgICBlZHR5cGU6IGluZm8uZWR0eXBlLCBldmVudGlkOiBpbmZvLmV2ZW50aWQsIHByb2plY3RpZDogaW5mby5wcm9qZWN0aWQucmVwbGFjZSgneycsJycpLnJlcGxhY2UoJ30nLCcnKSxcblx0XHQgICAgICAgICAgICByY2xzaWQ6IGluZm8ucmNsc2lkLCByb2JqaWQ6IGluZm8ucm9iamlkLCB1c2VybG9naW46IGluZm8udXNlcmxvZ2luLCBjbHNpZDogaW5mby5jbHNpZCwgb2JqaWQ6IGluZm8ub2JqaWQsXG5cdFx0ICAgICAgICAgICAgYXR0cjogSlNPTi5zdHJpbmdpZnkoaW5mby5hdHRyKSwgZXh0aW5mbzogSlNPTi5zdHJpbmdpZnkoZW52aXJvbWVudCksIGlucHV0cGFyYW1ldGVyOiAnJywgZ2xvYmFsX2F0dHI6IEpTT04uc3RyaW5naWZ5KHRoaXMuJGRhdGEuZ2xvYmFsX2F0dHIpXG5cdFx0ICAgICAgICB9XG5cdFx0ICAgIFx0Y29uc29sZS5sb2coZGF0YUluZm8pO1xuXHRcdCAgICBcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdEYXRhT2JqUnVuQ3VzdG9tRXZlbnRJbmZvJyxkYXRhSW5mbykudGhlbihzdWNjZXNzPT57XG5cdFx0ICAgIFx0XHRjb25zb2xlLmxvZyhzdWNjZXNzKTtcblx0XHQgICAgXHRcdGlmIChzdWNjZXNzLmNvZGU9PScwMDAwMCcpIHtcblx0XHRcdFx0XHRcdHZhciBkYXRhID0gSlNPTi5wYXJzZShzdWNjZXNzLmRhdGEpO1xuXHRcdCAgICBcdFx0XHR2YXIgYWN0aW9ubGlzdCA9IGRhdGEuYWN0aW9uO1xuXHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0ICAgIFx0XHRcdGlmIChhY3Rpb25saXN0KSB7XG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGFjdGlvbmxpc3QpO1xuXHRcdCAgICBcdFx0XHQgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhY3Rpb25saXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgdmFyIGFjdGlvbiA9IGFjdGlvbmxpc3RbaV07XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgaWYgKGFjdGlvbi5hY3Rpb25fdHlwZSA9PSAnc2V0X2RsZ19hdHRyJykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICB2YXIgcmVzdWx0ID0gYWN0aW9uLnZhbHVlO1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChyZXN1bHRbaV0uY2hvaWNlX2xpc3QpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBjID0gMDsgYyA8ICR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3QubGVuZ3RoOyBjKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBhdHRyID0gJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtjXS5BdHRyO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGF0dHJbal0uTmFtZT09cmVzdWx0W2ldLmF0dHIpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGF0dHJbal0uVHlwZT09J+Wtl+WFuCcgfHwgYXR0cltqXS5UeXBlPT0n5a2X5YW4LeWtl+espuS4sicpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGRpY3RJdGVtTGlzdD1bXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgZCBpbiByZXN1bHRbaV0uY2hvaWNlX2xpc3Qpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgdmFsID1yZXN1bHRbaV0uY2hvaWNlX2xpc3RbZF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRpY3RJdGVtTGlzdC5wdXNoKHtcIkNOX1NfTkFNRVwiOnZhbCxcIk5hbWVcIjp2YWwsXCJsYWJlbFwiOnZhbCxcInZhbHVlXCI6dmFsfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhdHRyW2pdLmRpY3RpdGVtID0gZGljdEl0ZW1MaXN0O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gYXR0cltqXS5kaWN0aXRlbSA9IHJlc3VsdFtpXS5jaG9pY2VfbGlzdDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBmb3IgKHZhciBjID0gMDsgYyA8ICR0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3QubGVuZ3RoOyBjKyspIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIFx0dmFyIGF0dHIgPSAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2NdLkF0dHI7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coYXR0cltqXS5OYW1lKyc9PScrcmVzdWx0W2ldLmF0dHIpO1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgXHRcdGlmKGF0dHJbal0uTmFtZT09cmVzdWx0W2ldLmF0dHIpe1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgXHRcdFx0YXR0cltqXS5WYWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIFx0XHR9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBcdH1cblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGxlbmd0aCA9IDA7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBpZiAoISR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5maWx0ZXIoZnVuY3Rpb24gKHMpIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0W2ldLmF0dHIgPT0gcy5hdHRyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICB9KS5sZW5ndGgpIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSAxO1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5wdXNoKHJlc3VsdFtpXSk7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBpZiAobGVuZ3RoID09IDApIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8ICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGg7IGorKykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLmF0dHIgPT0gcmVzdWx0W2ldLmF0dHIpIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS52YWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgICAgIH0gZWxzZSBpZiAoZGF0YS5hY3Rpb25baV0uYWN0aW9uX3R5cGUgPT0gJ3NldF9nbG9iYWxfYXR0cicpIHtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICR0aGlzLiRkYXRhLmdsb2JhbF9hdHRyID0gZGF0YS5hY3Rpb25baV0udmFsdWUgfHwgW107XG5cdFx0XHRcdFx0XHQgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgIH1cblx0XHQgICAgXHRcdFx0fVxuXHRcdCAgICBcdFx0XHRcblx0XHQgICAgXHRcdFx0aWYgKGRhdGEucmVzdWx0KSB7XG5cdFx0ICAgIFx0XHRcdCAgICB2YXIgcmVzdWx0ID0gZGF0YS5yZXN1bHQ7XG5cdFx0ICAgIFx0XHRcdCAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgIGZvciAodmFyIGMgPSAwOyBjIDwgJHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdC5sZW5ndGg7IGMrKykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgIFx0dmFyIGF0dHIgPSAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W2NdLkF0dHI7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgXHRmb3IgKHZhciBqID0gMDsgaiA8IGF0dHIubGVuZ3RoOyBqKyspIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICBcdFx0aWYoYXR0cltqXS5OYW1lPT1yZXN1bHRbaV0uYXR0cil7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgXHRcdFx0YXR0cltqXS5WYWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcblx0XHQgICAgXHRcdFx0ICAgICAgICBcdFx0fVxuXHRcdCAgICBcdFx0XHQgICAgICAgIFx0fVxuXHRcdCAgICBcdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHR2YXIgbGVuZ3RoID0gMDtcblx0XHQgICAgXHRcdFx0ICAgICAgICBpZiAoISR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5maWx0ZXIoZnVuY3Rpb24gKHMpIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFtpXS5hdHRyID09IHMuYXR0clxuXHRcdCAgICBcdFx0XHQgICAgICAgIH0pLmxlbmd0aCkge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICBsZW5ndGggPSAxO1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUucHVzaChyZXN1bHRbaV0pO1xuXHRcdCAgICBcdFx0XHQgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgICAgICBpZiAobGVuZ3RoID09IDApIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCAkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUubGVuZ3RoOyBqKyspIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIGlmICgkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0uYXR0ciA9PSByZXN1bHRbaV0uYXR0cikge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS52YWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgIH1cblx0XHQgICAgXHRcdFx0fVxuXHRcdCAgICBcdFx0fWVsc2V7XG5cdFx0ICAgIFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vM1wiLGNvbnRlbnQ6c3VjY2Vzcy5tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0ICAgIFx0XHR9XG5cdFx0ICAgIFx0fSkuY2F0Y2goZXg9Pntcblx0XHQgICAgXHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcblx0XHQgICAgXHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMy4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0ICAgIFx0fSk7XG5cdFx0ICAgIH0sXG5cdFx0XHRPS0RhdGFPYmpSdW5DdXN0b21FdmVudCgpe1xuXHRcdCAgICBcdHZhciBlbnZpcm9tZW50ID0ge1xuXHRcdFx0XHQgICAgJ2Z1bmN0aW9uJzogJzMwMDAnLCAvLyDlip/og73ngrnnvJblj7dcblx0XHRcdFx0ICAgIGNsc19pZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELCAgICAgLy8g5Yqf6IO954K55Li75pWw5o2u57G75qCH6K+GXG5cdFx0XHRcdCAgICAnYnV0dG9uJzogJ3RvcCcsICAgLy8gdG9wL2JvdHRvbVxuXHRcdFx0XHQgICAgYnV0dG9uX25hbWU6ICfmlrDlop4nLFxuXHRcdFx0XHQgICAgbWFzdGVyOiB7XG5cdFx0XHRcdCAgICAgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsIC8vIGJ1dHRvbj1ib3R0b23ml7YgbWFzdGVy55qEY2xzX2lkXG5cdFx0XHRcdCAgICAgICAgXG5cdFx0XHRcdCAgICB9XG5cdFx0XHRcdH07XG5cdFx0ICAgIFx0XG5cdFx0XHRcdHZhciBldmVudGlkID0gdGhpcy4kZGF0YS5lZGl0X29rX2V2ZW50LnNjcmlwX2lkO1xuXHRcdFx0XHR2YXIgcmVxPVtdO1xuXHRcdFx0XHR2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Q7XG5cdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHR2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLkF0dHI7XG5cdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHRcdFx0aWYoYXIuVmFsdWU9PSfor7fpgInmi6knIHx8IGFyLlZhbHVlPT0n4oCU4oCU6K+36YCJ5oup4oCU4oCUJykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxuXHRcdFx0XHRcdFx0XHRpZihhci5WYWx1ZT09J+ivtycpIGFyLlZhbHVlPScnO1xuXHRcdFx0XHQgICAgICAgIGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxuXHRcdFx0XHQgICAgICAgIFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsSUQgP2FyLlZhbElEIDonJyB9KTtcblx0XHRcdFx0ICAgICAgICBlbHNlIGlmKGFyLlR5cGU9PSfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZT8nMSc6JzAnfSk7XG5cdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlIH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRcblx0XHQgICAgXHRpZiAodGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUubGVuZ3RoID4gMCkge1xuXHRcdCAgICBcdCAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmxlbmd0aDsgaSsrKSB7XG5cdFx0ICAgIFx0ICAgICAgICBpZiAoIXJlcS5maWx0ZXIoZnVuY3Rpb24gKHMpIHtcblx0XHQgICAgXHQgICAgICAgICAgICByZXR1cm4gdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbaV0uYXR0ciA9PSBzLm5hbWVcblx0XHQgICAgXHQgICAgICAgIH0pLmxlbmd0aCkge1xuXHRcdCAgICBcdCAgICAgICAgICAgIGxlbmd0aCA9IDE7XG5cdFx0ICAgIFx0ICAgICAgICAgICAgcmVxLnB1c2goeyAnYXR0cic6IHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2ldLmF0dHIsICd2YWx1ZSc6IHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2ldLnZhbHVlIH0pO1xuXHRcdCAgICBcdCAgICAgICAgfVxuXHRcdCAgICBcdCAgICB9XG5cdFx0ICAgIFx0fVxuXHRcdCAgICBcdHZhciBpbmZvID0ge1xuXHRcdCAgICBcdCAgICBldmVudGlkOiBldmVudGlkLFxuXHRcdCAgICBcdCAgICBlZHR5cGU6IFwiMFwiLFxuXHRcdCAgICBcdCAgICBwcm9qZWN0aWQ6ICcnLFxuXHRcdCAgICBcdCAgICByY2xzaWQ6ICcnLFxuXHRcdCAgICBcdCAgICByb2JqaWQ6ICcnLFxuXHRcdCAgICBcdCAgICB1c2VybG9naW46ICcnLFxuXHRcdCAgICBcdCAgICBjbHNpZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELFxuXHRcdCAgICBcdCAgICBvYmppZDogXCJcIixcblx0XHQgICAgXHQgICAgYXR0cjogcmVxLFxuXHRcdCAgICBcdH1cblx0XHQgICAgXHR2YXIgZGF0YUluZm8gPSB7XG5cdFx0ICAgICAgICAgICAgZWR0eXBlOiBpbmZvLmVkdHlwZSwgZXZlbnRpZDogaW5mby5ldmVudGlkLCBwcm9qZWN0aWQ6IGluZm8ucHJvamVjdGlkLHJjbHNpZDogaW5mby5yY2xzaWQsIFxuXHRcdFx0XHRcdHJvYmppZDogaW5mby5yb2JqaWQsIHVzZXJsb2dpbjogaW5mby51c2VybG9naW4sIGNsc2lkOiBpbmZvLmNsc2lkLCBvYmppZDogaW5mby5vYmppZCxcblx0XHRcdFx0XHRhdHRyOiBKU09OLnN0cmluZ2lmeShpbmZvLmF0dHIpLCBleHRpbmZvOiBKU09OLnN0cmluZ2lmeShlbnZpcm9tZW50KSwgZ2xvYmFsX2F0dHI6IEpTT04uc3RyaW5naWZ5KHRoaXMuJGRhdGEuZ2xvYmFsX2F0dHIpXG5cdFx0ICAgICAgICB9XG5cdFx0ICAgIFx0Y29uc29sZS5sb2coZGF0YUluZm8pO1xuXHRcdCAgICBcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdEYXRhT2JqUnVuQ3VzdG9tRXZlbnRJbmZvJyxkYXRhSW5mbykudGhlbihzdWNjZXNzPT57XG5cdFx0ICAgIFx0XHRjb25zb2xlLmxvZyhzdWNjZXNzKTtcblx0XHQgICAgXHRcdGlmIChzdWNjZXNzLmNvZGU9PScwMDAwMCcpIHtcblx0XHRcdFx0XHRcdHZhciBkYXRhID0gSlNPTi5wYXJzZShzdWNjZXNzLmRhdGEpO1x0XHRcblx0XHQgICAgXHRcdFx0dmFyIHJlc3VsdCA9IGRhdGEucmVzdWx0O1xuXHRcdCAgICBcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykge1xuXHRcdCAgICBcdFx0XHQgICAgLy8gc2VsZi5jbGFzc19hdHRyX2VsZS5maW5kKCcuYXR0cl9maWVsZFtkYXRhLWZpZWxkPVwiJyArIHJlc3VsdFtpXS5hdHRyICsgJ1wiXScpLnZhbChyZXN1bHRbaV0udmFsdWUpLmRhdGEoJ3ZhbCcsIHJlc3VsdFtpXS52YWx1ZSk7XG5cdFx0ICAgIFx0XHRcdCAgICB2YXIgbGVuZ3RoID0gMDtcblx0XHQgICAgXHRcdFx0ICAgIGlmICghdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUuZmlsdGVyKGZ1bmN0aW9uIChzKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgcmV0dXJuIHJlc3VsdFtpXS5hdHRyID09IHMuYXR0clxuXHRcdCAgICBcdFx0XHQgICAgfSkubGVuZ3RoKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgbGVuZ3RoID0gMTtcblx0XHQgICAgXHRcdFx0ICAgICAgICB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5wdXNoKHJlc3VsdFtpXSk7XG5cdFx0ICAgIFx0XHRcdCAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICBpZiAobGVuZ3RoID09IDApIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmxlbmd0aDsgaisrKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgIGlmICh0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS5hdHRyID09IHJlc3VsdFtpXS5hdHRyKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS52YWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgIH1cblx0XHQgICAgXHRcdFx0fVxuXHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHR0aGlzLmFkZCgpO1xuXHRcdCAgICBcdFx0fWVsc2V7XG5cdFx0ICAgIFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vNFwiLGNvbnRlbnQ6c3VjY2Vzcy5tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0ICAgIFx0XHR9XG5cdFx0ICAgIFx0fSkuY2F0Y2goZXg9Pntcblx0XHQgICAgXHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcblx0XHQgICAgXHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vNC4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0ICAgIFx0fSk7XG5cdFx0ICAgIH0sXG5cdFx0ICAgIERhdGFPYmpSdW5DdXN0b21FdmVudF9SZXR1cm4oZXZlbnRpZCxkYXRhX2F0dHIsYnV0dG9uX2NhbGxiYWNrLGluZGV4LGlpbmRleCl7XG5cdFx0XHRcdHZhciBlbnZpcm9tZW50ID0ge1xuXHRcdFx0XHQgICAgJ2Z1bmN0aW9uJzogJzMwMDAnLCAvLyDlip/og73ngrnnvJblj7dcblx0XHRcdFx0ICAgIGNsc19pZDogdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELCAgICAgLy8g5Yqf6IO954K55Li75pWw5o2u57G75qCH6K+GXG5cdFx0XHRcdCAgICAnYnV0dG9uJzogJ3RvcCcsICAgLy8gdG9wL2JvdHRvbVxuXHRcdFx0XHQgICAgYnV0dG9uX25hbWU6ICfmlrDlop4nLFxuXHRcdFx0XHQgICAgbWFzdGVyOiB7XG5cdFx0XHRcdCAgICAgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsIC8vIGJ1dHRvbj1ib3R0b23ml7YgbWFzdGVy55qEY2xzX2lkXG5cdFx0XHRcdCAgICAgICAgLy9vYmpfaWQ6ICcnICAvLyBidXR0b249Ym90dG9t5pe2IG1hc3RlcueahG9ial9pZFxuXHRcdFx0XHQgICAgfVxuXHRcdFx0XHR9O1xuXHRcdFx0XHR2YXIgcmVxPVtdO1xuXHRcdFx0XHR2YXIgYXR0cmxpc3QgPSB0aGlzLiRkYXRhLmNsYXNzQXR0ckxpc3Q7XG5cdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHR2YXIgYXR0ciA9IGF0dHJsaXN0W2ldLkF0dHI7XG5cdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHR2YXIgYXIgPSBhdHRyW2pdO1xuXHRcdFx0XHRcdFx0aWYoYXIuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJylcblx0XHRcdFx0XHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0ICAgICAgICBpZihhci5UeXBlPT0n5byV55So5Lq65ZGYJyB8fCBhci5UeXBlPT0n5byV55So6aG555uuJylcblx0XHRcdFx0ICAgICAgICBcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbElEID9hci5WYWxJRCA6JycgfSk7XG5cdFx0XHRcdCAgICAgICAgZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8Jylcblx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWU/JzEnOicwJ30pO1xuXHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZSB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0ICAgICAgICBpZiAoIXJlcS5maWx0ZXIoZnVuY3Rpb24gKHMpIHtcblx0XHRcdFx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2ldLmF0dHIgPT0gcy5uYW1lXG5cdFx0XHRcdCAgICAgICAgfSkubGVuZ3RoKSB7XG5cdFx0XHRcdCAgICAgICAgICAgIGxlbmd0aCA9IDE7XG5cdFx0XHRcdCAgICAgICAgICAgIHJlcS5wdXNoKHsgJ2F0dHInOiB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtpXS5hdHRyLCAndmFsdWUnOiB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtpXS52YWx1ZSB9KTtcblx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdCAgICB9XG5cdFx0XHRcdH1cblx0XHRcdFx0dmFyIGV4dGluZm8gPSBlbnZpcm9tZW50O1xuXHRcdFx0XHRleHRpbmZvLmVkaXRfZGxnID0ge1xuXHRcdFx0XHQgICAgdHlwZTogJ3NtYWxsJywvL+Wwj+eql+WPo1xuXHRcdFx0XHQgICAgY2xhc3NfaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCwvL+W9k+WJjeaVsOaNruexu2lkXG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGRhdGFfYXR0cikge1xuXHRcdFx0XHQgICAgZXh0aW5mby5lZGl0X2RsZy5mb3JtX2NvbnRyb2wgPSB7Ly/miYDlsZ7nmoTooajljZXmjqfku7Zcblx0XHRcdFx0ICAgICAgICBuYW1lOiBkYXRhX2F0dHIuTmFtZSwvL+Wtl+auteWxnuaAp1xuXHRcdFx0XHQgICAgICAgIHRleHQ6IGRhdGFfYXR0ci5EaXNwTmFtZSwvL+aYvuekuuaWh+acrFxuXHRcdFx0XHQgICAgICAgIGdyb3VwX25hbWU6IGRhdGFfYXR0ci5Hcm91cE5hbWUsLy/lsZ7mgKfnu4Rcblx0XHRcdFx0ICAgICAgICB0eXBlOiBkYXRhX2F0dHIuVHlwZSwvL+Wtl+auteexu+Wei1xuXHRcdFx0XHQgICAgICAgIHJlYWRvbmx5OiBkYXRhX2F0dHIuUmVhZE9ubHksLy/mmK/lkKblj6ror7tcblx0XHRcdFx0ICAgICAgICBidXR0b25faW1nOiBkYXRhX2F0dHIuYnV0dG9uX2ltZywvL+W8leeUqOaMiemSrueahOWbvuagh1xuXHRcdFx0XHQgICAgICAgIGJ1dHRvbl90b29sdGlwOiBkYXRhX2F0dHIuYnV0dG9uX3Rvb2x0aXAvL+W8leeUqOaMiemSrueahHRvb2x0aXBcblx0XHRcdFx0ICAgIH1cblx0XHRcdFx0fVxuXHRcdFx0XHR2YXIgZGF0YUluZm8gPSB7XG5cdFx0XHRcdFx0ZWR0eXBlOiAgXCIwXCIsIGV2ZW50aWQ6IGV2ZW50aWQsIHByb2plY3RpZDogJycscmNsc2lkOiAnJywgcm9iamlkOiAnJywgdXNlcmxvZ2luOiAnJywgXG5cdFx0XHRcdFx0Y2xzaWQ6IHRoaXMuJGRhdGEucGFyYW0uTWFzdGVyX0Nscy5JRCwgb2JqaWQ6ICcnLGF0dHI6IEpTT04uc3RyaW5naWZ5KHJlcSksIFxuXHRcdFx0XHRcdGV4dGluZm86IEpTT04uc3RyaW5naWZ5KGV4dGluZm8pLCBnbG9iYWxfYXR0cjogSlNPTi5zdHJpbmdpZnkodGhpcy4kZGF0YS5nbG9iYWxfYXR0cilcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zb2xlLmxvZyhkYXRhSW5mbyk7XG5cdFx0XHRcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdEYXRhT2JqUnVuQ3VzdG9tRXZlbnRJbmZvJyxkYXRhSW5mbykudGhlbihzdWNjZXNzPT57XG5cdFx0XHRcdFx0Y29uc29sZS5sb2coc3VjY2Vzcyk7XG5cdFx0XHRcdFx0aWYgKHN1Y2Nlc3MuY29kZT09JzAwMDAwJykge1xuXHRcdFx0XHRcdFx0dmFyIGRhdGEgPSBKU09OLnBhcnNlKHN1Y2Nlc3MuZGF0YSk7XG5cdFx0XHRcdFx0XHRpZiAoZGF0YSAhPSBcIlwiKSB7XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHR2YXIgYWN0aW9ucyA9IGRhdGEuYWN0aW9uO1xuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coYWN0aW9ucyk7XG5cdFx0XHRcdFx0XHRpZiAoYWN0aW9ucykge1xuXHRcdFx0XHRcdFx0ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWN0aW9ucy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0ICAgICAgICB2YXIgYWN0aW9uID0gYWN0aW9uc1tpXTtcblx0XHRcdFx0XHRcdCAgICAgICAgdmFyIHZhbCA9IGFjdGlvbi52YWx1ZTtcblx0XHRcdFx0XHRcdCAgICAgICAgdmFyIGVudmlyb21lbnQgPSBKU09OLnN0cmluZ2lmeShlbnZpcm9tZW50KTtcblx0XHRcdFx0XHRcdCAgICAgICAgXG5cdFx0XHRcdFx0XHQgICAgICAgIGlmIChhY3Rpb24uYWN0aW9uX3R5cGUgPT0gJ29wZW5fcGFuZWwnKSB7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgIHZhciBkID0gZGlhbG9nKHtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgIHRpdGxlOiAnPGkgY2xhc3M9XCJhY2UtaWNvbiBmYSBmYS1pbmZvLWNpcmNsZVwiPjwvaT4gJyArICfmj5DnpLonLFxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgY29udGVudDogYWN0aW9uLmFjdGlvbl90eXBlICsgJ+atpGFjdGlvbuWwmuacquWkhOeQhu+8gSdcblx0XHRcdFx0XHRcdCAgICAgICAgICAgfSk7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgIGQuc2hvdygpO1xuXHRcdFx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdFx0XHQgICAgICAgIGVsc2UgaWYgKGFjdGlvbi5hY3Rpb25fdHlwZSA9PSAnb3Blbl9zZWxlY3RfdXNlcmRsZycpIHtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIHZhciBzdHlsZSA9IHZhbC5zdHlsZTtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIHN0eWxlID09ICd1c2VyJyA/ICfpgInmi6nkurrlkZgnIDogc3R5bGUgPT0gJ2RlcGFydG1lbnQnID8gJ+mAieaLqemDqOmXqCcgOiBzdHlsZSA9PSAncm9sZScgPyAn6YCJ5oup6KeS6ImyJyA6ICcnXG5cdFx0XHRcdFx0XHQgICAgICAgICAgICB2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtPXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aW5kZXg6IGluZGV4LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpaW5kZXg6aWluZGV4LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRidXR0b25fY2FsbGJhY2s6YnV0dG9uX2NhbGxiYWNrLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXE6cmVxLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhX2F0dHI6ZGF0YV9hdHRyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR1bmkubmF2aWdhdGVUbyh7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICBcdHVybDonLi4vc2VscHNuL2luZGV4P211bGl0PWZhbHNlJnBhcmFtPScrSlNPTi5zdHJpbmdpZnkocGFyYW0pLFxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgXHRldmVudHM6e1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgXHRcdEFkZFBlcihkYXRhLHBhcmFtKXsgXG5cdFx0XHRcdFx0XHQgICAgICAgICAgICBcdFx0XHQvLyBjb25zb2xlLmxvZyhwYXJhbSk7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICBcdFx0XHRjb25zb2xlLmxvZyhkYXRhKTtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIFx0XHRcdHZhciBjYWxsYmFja19ldmVudGlkID0gcGFyYW0uYnV0dG9uX2NhbGxiYWNrLnRyaW0oKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBpbmZvID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgIGV2ZW50aWQ6IGNhbGxiYWNrX2V2ZW50aWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgZWR0eXBlOiBcIjBcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICBwcm9qZWN0aWQ6ICcnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgIHJjbHNpZDogJycsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgcm9iamlkOiAnJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICB1c2VybG9naW46ICcnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgIGNsc2lkOiAkdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLklELFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgIG9iamlkOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgIGF0dHI6IHBhcmFtLnJlcSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICBpbnB1dHBhcmFtZXRlcjogZGF0YVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8sIHBhcmFtLmRhdGFfYXR0cik7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICBcdFx0fVxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgXHR9XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICB9KTtcdFxuXHRcdFx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdFx0XHQgICAgICAgIGVsc2UgaWYgKGFjdGlvbi5hY3Rpb25fdHlwZSA9PSAnb3Blbl9kYXRhX3F1ZXJ5X2RsZycpIHtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIFxuXHRcdFx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdFx0XHQgICAgICAgIGVsc2UgaWYgKGFjdGlvbi5hY3Rpb25fdHlwZSA9PSAnb3Blbl9jb21tb25fZGxnJykge1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgdmFyIHZhbHVlID0gYWN0aW9uLnZhbHVlO1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgdmFyIGQgPSBkaWFsb2coe1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgIHRpdGxlOiAnPGkgY2xhc3M9XCJhY2UtaWNvbiBmYSBmYS1pbmZvLWNpcmNsZVwiPjwvaT4gJyArICfmj5DnpLonLFxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGFjdGlvbi5hY3Rpb25fdHlwZSArICfmraRhY3Rpb27lsJrmnKrlpITnkIbvvIEnXG5cdFx0XHRcdFx0XHQgICAgICAgICAgICB9KTtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIGQuc2hvdygpO1xuXHRcdFx0XHRcdFx0ICAgICAgICB9XG5cdFx0XHRcdFx0XHQgICAgICAgIGVsc2UgaWYgKGFjdGlvbi5hY3Rpb25fdHlwZSA9PSAnb3Blbl9wcm9qZWN0X3F1ZXJ5X2RsZycpIHtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIC8vY29uc29sZS5sb2coYWN0aW9uLnZhbHVlLnNlbGVjdF9yYW5nZSk7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAvL2NvbnNvbGUubG9nKGFjdGlvbi52YWx1ZS5tdWxpdF9zZWxlY3QpO1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgdmFyIHByaVJlbCA9ICctMSc7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICBpZiAoYWN0aW9uLnZhbHVlLnNlbGVjdF9yYW5nZSA9PSAn5YWo6YOo55u45YWzJylcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICBwcmlSZWwgPSAnMCc7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICBlbHNlIGlmIChhY3Rpb24udmFsdWUuc2VsZWN0X3JhbmdlID09ICfmiJHotJ/otKPnmoTpobnnm64nKVxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgIHByaVJlbCA9ICcxJztcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIGVsc2UgaWYgKGFjdGlvbi52YWx1ZS5zZWxlY3RfcmFuZ2UgPT0gJ+aIkeWIm+W7uueahCcpXG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgcHJpUmVsID0gJzInO1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgZWxzZSBpZiAoYWN0aW9uLnZhbHVlLnNlbGVjdF9yYW5nZSA9PSAn5oiR5Y+C5LiO55qEJyB8fCBhY3Rpb24udmFsdWUuc2VsZWN0X3JhbmdlID09ICfmiJHlj4LliqDnmoQnKVxuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgICAgIHByaVJlbCA9ICczJztcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIGVsc2UgaWYgKGFjdGlvbi52YWx1ZS5zZWxlY3RfcmFuZ2UgPT0gJ+aIkeWFs+azqOeahCcpXG5cdFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgcHJpUmVsID0gJzQnO1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgZWxzZSBpZiAoYWN0aW9uLnZhbHVlLnNlbGVjdF9yYW5nZSA9PSAn5oiR5LiL5bGe55qE6aG555uuJylcblx0XHRcdFx0XHRcdFx0XHRcdFx0cHJpUmVsID0gJzUnO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1fPXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aW5kZXg6IGluZGV4LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpaW5kZXg6aWluZGV4LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRidXR0b25fY2FsbGJhY2s6YnV0dG9uX2NhbGxiYWNrLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXE6cmVxXG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR1bmkubmF2aWdhdGVUbyh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHVybDonLi4vc2VsUHJqL2luZGV4P3JlbGF0aW9uPScrcHJpUmVsKycmcGFyYW09JytKU09OLnN0cmluZ2lmeShwYXJhbV8pLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRldmVudHM6e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdEFkZFBlcihkYXRhLHBhcmFtKXsgXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0W3BhcmFtLmluZGV4XS5BdHRyW3BhcmFtLmlpbmRleF0uVmFsdWU9ZGF0YVswXS5OYW1lO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuY2xhc3NBdHRyTGlzdFtwYXJhbS5pbmRleF0uQXR0cltwYXJhbS5paW5kZXhdLlZhbElEPWRhdGFbMF0uSUQrJzsnK2RhdGFbMF0uTmFtZTtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIFx0XHRcdHZhciBjYWxsYmFja19ldmVudGlkID0gcGFyYW0uYnV0dG9uX2NhbGxiYWNrLnRyaW0oKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChjYWxsYmFja19ldmVudGlkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgdmFyIGluZm8gPSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgICAgIGV2ZW50aWQ6IGNhbGxiYWNrX2V2ZW50aWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgICAgIGVkdHlwZTogXCIyXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgICAgIHByb2plY3RpZDogZGF0YVswXS5JRCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgICAgcmNsc2lkOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgICByb2JqaWQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgICAgIHVzZXJsb2dpbjogXCJcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgICAgY2xzaWQ6ICR0aGlzLiRkYXRhLnBhcmFtLk1hc3Rlcl9DbHMuSUQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgICAgIG9iamlkOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgICBhdHRyOiBwYXJhbS5yZXEsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAkdGhpcy5EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdCAgICAgICAgfSBlbHNlIHtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgIHZhciBkID0gZGlhbG9nKHtcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICB0aXRsZTogJzxpIGNsYXNzPVwiYWNlLWljb24gZmEgZmEtaW5mby1jaXJjbGVcIj48L2k+ICcgKyAn5o+Q56S6Jyxcblx0XHRcdFx0XHRcdCAgICAgICAgICAgICAgICBjb250ZW50OiBhY3Rpb24uYWN0aW9uX3R5cGUgKyAn5q2kYWN0aW9u5bCa5pyq5aSE55CG77yBJ1xuXHRcdFx0XHRcdFx0ICAgICAgICAgICAgfSk7XG5cdFx0XHRcdFx0XHQgICAgICAgICAgICBkLnNob3coKTtcblx0XHRcdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHRcdFx0ICAgIH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekujUuMlwiLGNvbnRlbnQ6ICfosIPnlKggYmVmb3JlX2NsaWNrX2J1dHRvbiDohJrmnKzov5Tlm57nqbrvvIxldmVudF9pZCcgKyBldmVudGlkLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor681XCIsY29udGVudDpzdWNjZXNzLm1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLmNhdGNoKGV4PT57XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6NS4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0XHRcdH0pO1xuXHRcdCAgICB9LFxuXHRcdCAgICBzY2FuX2luaV9EYXRhT2JqUnVuQ3VzdG9tRXZlbnQoaW5mbyl7XG5cdFx0ICAgIFx0dmFyIHBhcmFtID0ge1xuXHRcdCAgICBcdCAgICBFZGl0U3R5bGU6IHRoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5WaWV3X1N0eWxlLk5hbWUsXG5cdFx0ICAgIFx0ICAgIFZpZXdTdHlsZTogdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLlZpZXdfU3R5bGUuTmFtZSxcblx0XHQgICAgXHQgICAgTm90VHJpZ2dlclN5c0V2ZW50OiAwLFxuXHRcdCAgICBcdCAgICBlbnZpcm9tZW50OiB7XG5cdFx0ICAgIFx0ICAgICAgICAnZnVuY3Rpb24nOiAnMzAwMCcsIC8vIOWKn+iDveeCuee8luWPt1xuXHRcdCAgICBcdCAgICAgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuSUQsICAgICAvLyDlip/og73ngrnkuLvmlbDmja7nsbvmoIfor4Zcblx0XHQgICAgXHQgICAgICAgICdidXR0b24nOiAndG9wJywgICAvLyB0b3AvYm90dG9tXG5cdFx0ICAgIFx0ICAgICAgICBidXR0b25fbmFtZTogJ+aWsOWinicsXG5cdFx0ICAgIFx0ICAgICAgICBtYXN0ZXI6IHtcblx0XHQgICAgXHQgICAgICAgICAgICBjbHNfaWQ6IHRoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5JRCwgLy8gYnV0dG9uPWJvdHRvbeaXtiBtYXN0ZXLnmoRjbHNfaWRcblx0XHQgICAgXHQgICAgICAgICAgICAvL29ial9pZDogJycgIC8vIGJ1dHRvbj1ib3R0b23ml7YgbWFzdGVy55qEb2JqX2lkXG5cdFx0ICAgIFx0ICAgICAgICB9XG5cdFx0ICAgIFx0ICAgIH1cblx0XHQgICAgXHR9XG5cdFx0ICAgIFx0dmFyIGlucHV0cGFyYW1ldGVyID0gJyc7XG5cdFx0ICAgIFx0dmFyIGdsb2JhbF9hdHRyID0gJyc7XG5cdFx0ICAgIFx0XG5cdFx0ICAgIFx0dmFyIGRhdGFJbmZvID0ge1xuXHRcdCAgICAgICAgICAgIGVkdHlwZTogaW5mby5lZHR5cGUsIGV2ZW50aWQ6IGluZm8uZXZlbnRpZCwgcHJvamVjdGlkOiBpbmZvLnByb2plY3RpZCxcblx0XHQgICAgICAgICAgICByY2xzaWQ6IGluZm8ucmNsc2lkLCByb2JqaWQ6IGluZm8ucm9iamlkLCB1c2VybG9naW46IGluZm8udXNlcmxvZ2luLCBjbHNpZDogaW5mby5jbHNpZCwgb2JqaWQ6IGluZm8ub2JqaWQsXG5cdFx0ICAgICAgICAgICAgYXR0cjogSlNPTi5zdHJpbmdpZnkoaW5mby5hdHRyKSwgZXh0aW5mbzogSlNPTi5zdHJpbmdpZnkocGFyYW0pLCBpbnB1dHBhcmFtZXRlcjogaW5wdXRwYXJhbWV0ZXIsIGdsb2JhbF9hdHRyOiBnbG9iYWxfYXR0clxuXHRcdCAgICAgICAgfVxuXHRcdCAgICBcdGNvbnNvbGUubG9nKGRhdGFJbmZvKTtcblx0XHQgICAgXHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnRGF0YU9ialJ1bkN1c3RvbUV2ZW50SW5mbycsZGF0YUluZm8pLnRoZW4oc3VjY2Vzcz0+e1xuXHRcdCAgICBcdFx0Y29uc29sZS5sb2coc3VjY2Vzcyk7XG5cdFx0ICAgIFx0XHRpZiAoc3VjY2Vzcy5jb2RlPT0nMDAwMDAnKSB7XG5cdFx0ICAgIFx0XHRcdHZhciBkYXRhID0gSlNPTi5wYXJzZShzdWNjZXNzLmRhdGEpO1xuXHRcdCAgICBcdFx0XHR2YXIgYWN0aW9ubGlzdCA9IGRhdGEuYWN0aW9uO1xuXHRcdCAgICBcdFx0XHRpZiAoYWN0aW9ubGlzdCkge1xuXHRcdCAgICBcdFx0XHQgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhY3Rpb25saXN0Lmxlbmd0aDsgaisrKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgdmFyIGFjdGlvbiA9IGFjdGlvbmxpc3Rbal1cblx0XHQgICAgXHRcdFx0ICAgICAgICB2YXIgYWN0aW9uX3R5cGUgPSBhY3Rpb24uYWN0aW9uX3R5cGU7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgdmFyIHZhbHVlID0gYWN0aW9uLnZhbHVlO1xuXHRcdCAgICBcdFx0XHQgICAgICAgIGlmIChhY3Rpb25fdHlwZSA9PSAnc2V0X2RsZ19hdHRyJykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICBpZiAodmFsdWUpIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIHZhciB2YWwgPSB2YWx1ZTtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICB2YWwgPSBKU09OLnBhcnNlKHZhbHVlKTtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIH1cblx0XHQgICAgXHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyh2YWwpO1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpKyspIHtcblx0XHQgICAgXHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGEgPSAwOyBhIDwgdGhpcy4kZGF0YS5zdWJDbGFzc0F0dHJMaXN0Lmxlbmd0aDsgYSsrKSB7XG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGwgPSAwOyBsIDwgdGhpcy4kZGF0YS5zdWJDbGFzc0F0dHJMaXN0W2FdLkF0dHIubGVuZ3RoOyBsKyspIHtcblx0XHQgICAgXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgY2EgPSB0aGlzLiRkYXRhLnN1YkNsYXNzQXR0ckxpc3RbYV0uQXR0cltsXTtcblx0XHQgICAgXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAodmFsW2ldLmF0dHIgID09IGNhLk5hbWUpIHtcblx0XHQgICAgXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGNhLlR5cGU9PSflrZflhbgnIHx8IGNhLlR5cGU9PSflrZflhbgt5a2X56ym5LiyJyl7XG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBkaWN0SXRlbUxpc3Q9W107XG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgZCBpbiB2YWxbaV0uY2hvaWNlX2xpc3Qpe1xuXHRcdCAgICBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciB2YWwgPXZhbFtpXS5jaG9pY2VfbGlzdFtkXTtcblx0XHQgICAgXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkaWN0SXRlbUxpc3QucHVzaCh7XCJDTl9TX05BTUVcIjp2YWwsXCJOYW1lXCI6dmFsLFwibGFiZWxcIjp2YWwsXCJ2YWx1ZVwiOnZhbH0pO1xuXHRcdCAgICBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdCAgICBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhLmRpY3RpdGVtID0gZGljdEl0ZW1MaXN0O1xuXHRcdCAgICBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBhdHRyW2pdLmRpY3RpdGVtID0gdmFsW2ldLmNob2ljZV9saXN0O1xuXHRcdCAgICBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fWVsc2V7XG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGNhLnZhbHVlID0gdmFsW2ldLnZhbHVlO1xuXHRcdCAgICBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdCAgICBcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHQgICAgXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdCAgICBcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdCAgICBcdFx0XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IDA7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5maWx0ZXIoZnVuY3Rpb24gKHMpIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbFtpXS5hdHRyID09IHMuYXR0clxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgIH0pLmxlbmd0aCkge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSAxO1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5wdXNoKHZhbFtpXSk7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgIGlmIChsZW5ndGggPT0gMCkge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmxlbmd0aDsgaisrKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0uYXR0ciA9PSB2YWxbaV0uYXR0cikge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLnZhbHVlID0gdmFsW2ldLnZhbHVlO1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgICAgIGlmIChhY3Rpb25fdHlwZSA9PSAnb3Blbl9zZWxlY3RfdXNlcmRsZycpIHtcblx0XHQgICAgXHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor682LjJcIixjb250ZW50Olwib3Blbl9zZWxlY3RfdXNlcmRsZ+i/meS4qmFjdGlvbl90eXBl6L+Y5pyq5aSE55CG77yBXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgfVxuXHRcdCAgICBcdFx0XHR9XG5cdFx0ICAgIFx0XHRcdFxuXHRcdCAgICBcdFx0fWVsc2V7XG5cdFx0ICAgIFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vNlwiLGNvbnRlbnQ6c3VjY2Vzcy5tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0ICAgIFx0XHR9XG5cdFx0ICAgIFx0fSkuY2F0Y2goZXg9Pntcblx0XHQgICAgXHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcblx0XHQgICAgXHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vNi4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0ICAgIFx0fSk7XG5cdFx0ICAgIH0sXG5cdFx0ICAgIHNjYW5fRGF0YU9ialJ1bkN1c3RvbUV2ZW50KGluZm8sZGF0YV9hdHRyKXtcblx0XHQgICAgXHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdCAgICBcdHZhciBlbnZpcm9tZW50ID0ge1xuXHRcdCAgICBcdCAgICAnZnVuY3Rpb24nOiAnMzAwMCcsIC8vIOWKn+iDveeCuee8luWPt1xuXHRcdCAgICBcdCAgICBjbHNfaWQ6IHRoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5JRCwgICAgIC8vIOWKn+iDveeCueS7juaVsOaNruexu+agh+ivhlxuXHRcdCAgICBcdCAgICAnYnV0dG9uJzogJ3RvcCcsICAgLy8gdG9wL2JvdHRvbVxuXHRcdCAgICBcdCAgICBidXR0b25fbmFtZTogJ+aWsOWinicsXG5cdFx0ICAgIFx0ICAgIG1hc3Rlcjoge1xuXHRcdCAgICBcdCAgICAgICAgY2xzX2lkOiB0aGlzLiRkYXRhLnBhcmFtLlN1Yl9DbHMuSUQsIC8vIGJ1dHRvbj1ib3R0b23ml7YgbWFzdGVy55qEY2xzX2lkXG5cdFx0ICAgIFx0ICAgICAgICAvL29ial9pZDogJycgIC8vIGJ1dHRvbj1ib3R0b23ml7YgbWFzdGVy55qEb2JqX2lkXG5cdFx0ICAgIFx0ICAgIH1cblx0XHQgICAgXHR9O1xuXHRcdCAgICBcdGVudmlyb21lbnQuZWRpdF9kbGcgPSB7XG5cdFx0XHRcdFx0dHlwZTogJ3NtYWxsJywvL+Wwj+eql+WPo1xuXHRcdCAgICBcdCAgICBjbGFzc19pZDogdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLklELC8v5b2T5YmN5pWw5o2u57G7aWRcblx0XHQgICAgXHR9XG5cdFx0ICAgIFx0aWYgKGRhdGFfYXR0cikge1xuXHRcdCAgICBcdCAgICBlbnZpcm9tZW50LmVkaXRfZGxnLmZvcm1fY29udHJvbCA9IHsvL+aJgOWxnueahOihqOWNleaOp+S7tlxuXHRcdCAgICBcdCAgICAgICAgbmFtZTogZGF0YV9hdHRyLk5hbWUsLy/lrZfmrrXlsZ7mgKdcblx0XHQgICAgXHQgICAgICAgIHRleHQ6IGRhdGFfYXR0ci5EaXNwTmFtZSwvL+aYvuekuuaWh+acrFxuXHRcdCAgICBcdCAgICAgICAgZ3JvdXBfbmFtZTogZGF0YV9hdHRyLkdyb3VwTmFtZSwvL+WxnuaAp+e7hFxuXHRcdCAgICBcdCAgICAgICAgdHlwZTogZGF0YV9hdHRyLlR5cGUsLy/lrZfmrrXnsbvlnotcblx0XHQgICAgXHQgICAgICAgIHJlYWRvbmx5OiBkYXRhX2F0dHIuUmVhZE9ubHksLy/mmK/lkKblj6ror7tcblx0XHQgICAgXHQgICAgICAgIGJ1dHRvbl9pbWc6IGRhdGFfYXR0ci5idXR0b25faW1nLC8v5byV55So5oyJ6ZKu55qE5Zu+5qCHXG5cdFx0ICAgIFx0ICAgICAgICBidXR0b25fdG9vbHRpcDogZGF0YV9hdHRyLmJ1dHRvbl90b29sdGlwLy/lvJXnlKjmjInpkq7nmoR0b29sdGlwXG5cdFx0ICAgIFx0ICAgIH1cblx0XHQgICAgXHR9XG5cdFx0ICAgIFx0XG5cdFx0ICAgIFx0dmFyIGRhdGFJbmZvID0ge1xuXHRcdCAgICAgICAgICAgIGVkdHlwZTogaW5mby5lZHR5cGUsIGV2ZW50aWQ6IGluZm8uZXZlbnRpZCwgcHJvamVjdGlkOiBpbmZvLnByb2plY3RpZC5yZXBsYWNlKCd7JywnJykucmVwbGFjZSgnfScsJycpLFxuXHRcdCAgICAgICAgICAgIHJjbHNpZDogaW5mby5yY2xzaWQsIHJvYmppZDogaW5mby5yb2JqaWQsIHVzZXJsb2dpbjogaW5mby51c2VybG9naW4sIGNsc2lkOiBpbmZvLmNsc2lkLCBvYmppZDogaW5mby5vYmppZCxcblx0XHQgICAgICAgICAgICBhdHRyOiBKU09OLnN0cmluZ2lmeShpbmZvLmF0dHIpLCBleHRpbmZvOiBKU09OLnN0cmluZ2lmeShlbnZpcm9tZW50KSwgaW5wdXRwYXJhbWV0ZXI6IEpTT04uc3RyaW5naWZ5KGluZm8uaW5wdXRQYXJhbXRlciksIGdsb2JhbF9hdHRyOiBKU09OLnN0cmluZ2lmeSh0aGlzLiRkYXRhLmdsb2JhbF9hdHRyKVxuXHRcdCAgICAgICAgfVxuXHRcdCAgICBcdGNvbnNvbGUubG9nKGRhdGFJbmZvKTtcblx0XHQgICAgXHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnRGF0YU9ialJ1bkN1c3RvbUV2ZW50SW5mbycsZGF0YUluZm8pLnRoZW4oc3VjY2Vzcz0+e1xuXHRcdCAgICBcdFx0Y29uc29sZS5sb2coc3VjY2Vzcyk7XG5cdFx0ICAgIFx0XHRpZiAoc3VjY2Vzcy5jb2RlPT0nMDAwMDAnKSB7XG5cdFx0ICAgIFx0XHRcdHZhciBkYXRhID0gSlNPTi5wYXJzZShzdWNjZXNzLmRhdGEpO1xuXHRcdCAgICBcdFx0XHR2YXIgYWN0aW9ubGlzdCA9IGRhdGEuYWN0aW9uO1xuXHRcdCAgICBcdFx0XHRcdFx0XHRcblx0XHQgICAgXHRcdFx0aWYgKGFjdGlvbmxpc3QpIHtcblx0XHQgICAgXHRcdFx0XHRjb25zb2xlLmxvZyhhY3Rpb25saXN0KTtcblx0XHQgICAgXHRcdFx0ICAgIGZvciAodmFyIGlpID0gMDsgaWkgPCBhY3Rpb25saXN0Lmxlbmd0aDsgaWkrKykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgIHZhciBhY3Rpb24gPSBhY3Rpb25saXN0W2lpXTtcblx0XHQgICAgXHRcdFx0ICAgICAgICBpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdzZXRfZGxnX2F0dHInKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgIHZhciByZXN1bHQgPSBhY3Rpb24udmFsdWU7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0ICAgIFx0XHRcdFx0XHRcdFx0aWYgKHJlc3VsdFtpXS5jaG9pY2VfbGlzdCkge1xuXHRcdCAgICBcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgcyA9IDA7IHMgPCAkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3QubGVuZ3RoOyBzKyspIHtcblx0XHQgICAgXHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgYyA9IDA7IGMgPCAkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3Rbc10uc3ViQ2xhc3NBdHRyTGlzdC5sZW5ndGg7IGMrKykge1xuXHRcdCAgICBcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBhdHRyID0gJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W3NdLnN1YkNsYXNzQXR0ckxpc3RbY10uQXR0cjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoYXR0cltqXS5OYW1lPT1yZXN1bHRbaV0uYXR0cil7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihhdHRyW2pdLlR5cGU9PSflrZflhbgnIHx8IGF0dHJbal0uVHlwZT09J+Wtl+WFuC3lrZfnrKbkuLInKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGRpY3RJdGVtTGlzdD1bXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBkIGluIHJlc3VsdFtpXS5jaG9pY2VfbGlzdCl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHZhbCA9cmVzdWx0W2ldLmNob2ljZV9saXN0W2RdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRpY3RJdGVtTGlzdC5wdXNoKHtcIkNOX1NfTkFNRVwiOnZhbCxcIk5hbWVcIjp2YWwsXCJsYWJlbFwiOnZhbCxcInZhbHVlXCI6dmFsfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXR0cltqXS5kaWN0aXRlbSA9IGRpY3RJdGVtTGlzdDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gYXR0cltqXS5kaWN0aXRlbSA9IHJlc3VsdFtpXS5jaG9pY2VfbGlzdDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHQgICAgXHRcdFx0XHRcdFx0XHRcdH1cblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIGZvciAodmFyIHMgPSAwOyBzIDwgJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0Lmxlbmd0aDsgcysrKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBcdGZvciAodmFyIGMgPSAwOyBjIDwgJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W3NdLnN1YkNsYXNzQXR0ckxpc3QubGVuZ3RoOyBjKyspIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIFx0XHR2YXIgYXR0ciA9ICR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtzXS5zdWJDbGFzc0F0dHJMaXN0W2NdLkF0dHI7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBcdFx0XHRjb25zb2xlLmxvZyhhdHRyW2pdLk5hbWUrJz09JytyZXN1bHRbaV0uYXR0cik7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBcdFx0XHRpZihhdHRyW2pdLk5hbWU9PXJlc3VsdFtpXS5hdHRyKXtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIFx0XHRcdFx0YXR0cltqXS5WYWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIFx0XHRcdH1cblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIFx0XHR9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICBcdH1cblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIH1cblx0XHQgICAgXHRcdFx0XHRcdFx0XHR2YXIgbGVuZ3RoID0gMDtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIGlmICghJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmZpbHRlcihmdW5jdGlvbiAocykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRbaV0uYXR0ciA9PSBzLmF0dHJcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIH0pLmxlbmd0aCkge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IDE7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLnB1c2gocmVzdWx0W2ldKTtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgICAgIGlmIChsZW5ndGggPT0gMCkge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmxlbmd0aDsgaisrKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0uYXR0ciA9PSByZXN1bHRbaV0uYXR0cikge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLnZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24uYWN0aW9uX3R5cGUgPT0gJ3NldF9nbG9iYWxfYXR0cicpIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgJHRoaXMuJGFjdGlvbnRyID0gYWN0aW9uLnZhbHVlIHx8IFtdO1xuXHRcdCAgICBcdFx0XHQgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uLmFjdGlvbl90eXBlID09ICdhZGRfc3ViY2xzX3BhbmVsJykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICB2YXIgcmVzdWx0ID0gYWN0aW9uLnZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0bGV0IGxpc3RfMSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy4kZGF0YS5zdWJDbGFzc0F0dHJMaXN0KSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgc2NhbkNvZGVWYWwgPSAkdGhpcy4kZGF0YS5zY2FuQ29kZVZhbDtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGluZm8uaW5wdXRQYXJhbXRlclswXS5hdHRyPT1cIm1hc3RfaW5wdXRfMzAzN1wiKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzY2FuQ29kZVZhbCA9IFwibWFzdF9pbnB1dF8zMDM3LVwiK2lpO1xuXHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0LnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRzY2FuQ29kZVZhbDpzY2FuQ29kZVZhbCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3ViQ2xhc3NBdHRyOmxpc3RfMVxuXHRcdFx0XHRcdFx0XHRcdFx0fSk7IFxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBzID0gMDsgcyA8ICR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdC5sZW5ndGg7IHMrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKCR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtzXS5zY2FuQ29kZVZhbCA9PSBzY2FuQ29kZVZhbCl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgX3N1YkNsYXNzQXR0ciA9ICR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtzXS5zdWJDbGFzc0F0dHI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBjID0gMDsgYyA8IF9zdWJDbGFzc0F0dHIubGVuZ3RoOyBjKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGF0dHIgPSBfc3ViQ2xhc3NBdHRyW2NdLkF0dHI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGF0dHJbal0uTmFtZSsnPT0nK3Jlc3VsdFtpXS5hdHRyKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihhdHRyW2pdLk5hbWU9PXJlc3VsdFtpXS5hdHRyKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGF0dHJbal0uVmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vICR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtzXS5zdWJDbGFzc0F0dHI9bGlzdF8xO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgbGVuZ3RoID0gMDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCEkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUuZmlsdGVyKGZ1bmN0aW9uIChzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICByZXR1cm4gcmVzdWx0W2ldLmF0dHIgPT0gcy5hdHRyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0pLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgbGVuZ3RoID0gMTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5wdXNoKHJlc3VsdFtpXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGxlbmd0aCA9PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICBmb3IgKHZhciBqID0gMDsgaiA8ICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgICAgIGlmICgkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0uYXR0ciA9PSByZXN1bHRbaV0uYXR0cikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgICAgICAgICAkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0udmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgICAgfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgfVxuXHRcdCAgICBcdFx0XHR9XG5cdFx0ICAgIFx0XHRcdFxuXHRcdCAgICBcdFx0XHRpZiAoZGF0YS5yZXN1bHQpIHtcblx0XHRcdFx0XHRcdFx0bGV0IGxpc3RfMSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy4kZGF0YS5zdWJDbGFzc0F0dHJMaXN0KSk7XG5cdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdC5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRzY2FuQ29kZVZhbDokdGhpcy4kZGF0YS5zY2FuQ29kZVZhbCxcblx0XHRcdFx0XHRcdFx0XHRzdWJDbGFzc0F0dHI6bGlzdF8xXG5cdFx0XHRcdFx0XHRcdH0pOyBcblx0XHQgICAgXHRcdFx0ICAgIHZhciByZXN1bHQgPSBkYXRhLnJlc3VsdDtcblx0XHQgICAgXHRcdFx0ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgZm9yICh2YXIgcyA9IDA7IHMgPCAkdGhpcy4kZGF0YS5zdWJQYW5lbExpc3QubGVuZ3RoOyBzKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKCR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdFtzXS5zY2FuQ29kZVZhbCA9PSAkdGhpcy4kZGF0YS5zY2FuQ29kZVZhbCl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBfc3ViQ2xhc3NBdHRyID0gJHRoaXMuJGRhdGEuc3ViUGFuZWxMaXN0W3NdLnN1YkNsYXNzQXR0cjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgYyA9IDA7IGMgPCBfc3ViQ2xhc3NBdHRyLmxlbmd0aDsgYysrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGF0dHIgPSBfc3ViQ2xhc3NBdHRyW2NdLkF0dHI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhhdHRyW2pdLk5hbWUrJz09JytyZXN1bHRbaV0uYXR0cik7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihhdHRyW2pdLk5hbWU9PXJlc3VsdFtpXS5hdHRyKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXR0cltqXS5WYWx1ZSA9IHJlc3VsdFtpXS52YWx1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHQgICAgXHRcdFx0ICAgICAgICBcdH1cblx0XHQgICAgXHRcdFx0ICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdFx0XHRcblx0XHQgICAgXHRcdFx0XHRcdHZhciBsZW5ndGggPSAwO1xuXHRcdCAgICBcdFx0XHQgICAgICAgIGlmICghJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlLmZpbHRlcihmdW5jdGlvbiAocykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICByZXR1cm4gcmVzdWx0W2ldLmF0dHIgPT0gcy5hdHRyXG5cdFx0ICAgIFx0XHRcdCAgICAgICAgfSkubGVuZ3RoKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgIGxlbmd0aCA9IDE7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5wdXNoKHJlc3VsdFtpXSk7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgICAgIGlmIChsZW5ndGggPT0gMCkge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8ICR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZS5sZW5ndGg7IGorKykge1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgaWYgKCR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS5hdHRyID09IHJlc3VsdFtpXS5hdHRyKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgJHRoaXMuJGRhdGEucmVmZGF0YXN0b3JlW2pdLnZhbHVlID0gcmVzdWx0W2ldLnZhbHVlO1xuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgfVxuXHRcdCAgICBcdFx0XHR9XG5cdFx0ICAgIFx0XHR9ZWxzZXtcblx0XHQgICAgXHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor683XCIsY29udGVudDpzdWNjZXNzLm1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHQgICAgXHRcdH1cblx0XHQgICAgXHR9KS5jYXRjaChleD0+e1xuXHRcdCAgICBcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xuXHRcdCAgICBcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor683LjFcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHQgICAgXHR9KTtcblx0XHQgICAgfSxcblx0XHQgICAgc2Nhbl9PS0RhdGFPYmpSdW5DdXN0b21FdmVudChldmVudElEKXtcblx0XHRcdFx0dW5pLnNob3dMb2FkaW5nKHtcblx0XHRcdFx0XHR0aXRsZTpcIuWKoOi9veS4rS4uLlwiXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdFx0XHR2YXIgcmVxPVtdO1xuXHRcdFx0XHR2YXIgYXR0cmxpc3QgPSAkdGhpcy4kZGF0YS5jbGFzc0F0dHJMaXN0O1xuXHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0dmFyIGF0dHIgPSBhdHRybGlzdFtpXS5BdHRyO1xuXHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0dmFyIGFyID0gYXR0cltqXTtcblx0XHRcdFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+36YCJ5oupJyB8fCBhci5WYWx1ZT09J+KAlOKAlOivt+mAieaLqeKAlOKAlCcpIGFyLlZhbHVlPScnO1xuXHRcdFx0XHRcdFx0aWYoYXIuVHlwZT09J+W8leeUqOWvueixoSjlpJrkuKopJylcblx0XHRcdFx0XHRcdFx0aWYoYXIuVmFsdWU9PSfor7cnKSBhci5WYWx1ZT0nJztcblx0XHRcdFx0XHRcdGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxuXHRcdFx0XHRcdFx0XHRyZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWxJRCA/YXIuVmFsSUQgOicnIH0pO1xuXHRcdFx0XHRcdFx0ZWxzZSBpZihhci5UeXBlPT0n5biD5bCU5YC8Jylcblx0XHRcdFx0XHRcdFx0cmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWU/JzEnOicwJ30pO1xuXHRcdFx0XHRcdFx0ZWxzZSBpZihhci5UeXBlPT0n5a2X5YW4JyB8fCBhci5UeXBlPT0n5a2X5YW4LeWtl+espuS4sicpe1xuXHRcdFx0XHRcdFx0XHRpZihhci5zZWxlY3Q9PXRydWUpeyAvL+WIpOaWreS4i+aLieaYr+WQpuWkmumAiVxuXHRcdFx0XHRcdFx0XHRcdHZhciB2YWxTdHIgPVwiXCI7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciB2IGluIGFyLlZhbHVlKXtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKHZhbFN0cilcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsU3RyKz1cIjtcIjtcblx0XHRcdFx0XHRcdFx0XHRcdHZhbFN0cis9YXIuVmFsdWVbdl07XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IHZhbFN0cn0pO1xuXHRcdFx0XHRcdFx0XHR9ZWxzZVxuXHRcdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlfSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdHJlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlID9hci5WYWx1ZSA6Jyd9KTtcblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRpZiAoKGFyLk5vdEVtcHR5ID09ICcxJyB8fCBhci5ub3RlbXB0eSA9PSB0cnVlKSAmJiAhYXIuVmFsdWUpIHtcblx0XHRcdFx0XHRcdC8vIGlmKGFyLm5vdEVtcHR5PT0nMScpe1xuXHRcdFx0XHRcdFx0XHR1bmkuaGlkZUxvYWRpbmcoKTtcblx0XHRcdFx0XHRcdFx0Ly8gdW5pLnNob3dUb2FzdCh7dGl0bGU6YXIuRGlzcE5hbWUrJ+S4jeiDveS4uuepuu+8gScsaWNvbjpcInN1Y2Nlc3NcIixkdXJhdGlvbjozMDAwfSk7XG5cdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDphci5EaXNwTmFtZSsn5LiN6IO95Li656m677yBJyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHR2YXIgb2JqZWN0cz1bXTtcblx0XHRcdFx0dmFyIHN1YlBhbmVsTGlzdCA9ICR0aGlzLiRkYXRhLnN1YlBhbmVsTGlzdDtcblx0XHRcdFx0Zm9yICh2YXIgcyA9IDA7IHMgPCBzdWJQYW5lbExpc3QubGVuZ3RoOyBzKyspIHtcblx0XHRcdFx0XHR2YXIgc3ViX3JlcT1bXTtcblx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN1YlBhbmVsTGlzdFtzXS5zdWJDbGFzc0F0dHIubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdHZhciBhdHRyID0gc3ViUGFuZWxMaXN0W3NdLnN1YkNsYXNzQXR0cltpXS5BdHRyO1xuXHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBhciA9IGF0dHJbal07XG5cdFx0XHRcdFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+36YCJ5oupJyB8fCBhci5WYWx1ZT09J+KAlOKAlOivt+mAieaLqeKAlOKAlCcpIGFyLlZhbHVlPScnO1xuXHRcdFx0XHRcdFx0XHRpZihhci5UeXBlPT0n5byV55So5a+56LGhKOWkmuS4qiknKVxuXHRcdFx0XHRcdFx0XHRcdGlmKGFyLlZhbHVlPT0n6K+3JykgYXIuVmFsdWU9Jyc7XG5cdFx0XHRcdFx0XHRcdGlmKGFyLlR5cGU9PSflvJXnlKjkurrlkZgnIHx8IGFyLlR5cGU9PSflvJXnlKjpobnnm64nKVxuXHRcdFx0XHRcdFx0XHRcdHN1Yl9yZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWxJRCA/YXIuVmFsSUQgOicnIH0pO1xuXHRcdFx0XHRcdFx0XHRlbHNlIGlmKGFyLlR5cGU9PSfluIPlsJTlgLwnKVxuXHRcdFx0XHRcdFx0XHRcdHN1Yl9yZXEucHVzaCh7IGF0dHI6IGFyLk5hbWUsIHZhbHVlOiBhci5WYWx1ZT8nMSc6JzAnfSk7XG5cdFx0XHRcdFx0XHRcdGVsc2UgaWYoYXIuVHlwZT09J+Wtl+WFuCcgfHwgYXIuVHlwZT09J+Wtl+WFuC3lrZfnrKbkuLInKXtcblx0XHRcdFx0XHRcdFx0XHRpZihhci5zZWxlY3Q9PXRydWUpeyAvL+WIpOaWreS4i+aLieaYr+WQpuWkmumAiVxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHZhbFN0ciA9XCJcIjtcblx0XHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgdiBpbiBhci5WYWx1ZSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKHZhbFN0cilcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YWxTdHIrPVwiO1wiO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YWxTdHIrPWFyLlZhbHVlW3ZdO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0c3ViX3JlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IHZhbFN0cn0pO1xuXHRcdFx0XHRcdFx0XHRcdH1lbHNlXG5cdFx0XHRcdFx0XHRcdFx0XHRzdWJfcmVxLnB1c2goeyBhdHRyOiBhci5OYW1lLCB2YWx1ZTogYXIuVmFsdWV9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdFx0c3ViX3JlcS5wdXNoKHsgYXR0cjogYXIuTmFtZSwgdmFsdWU6IGFyLlZhbHVlID9hci5WYWx1ZSA6Jyd9KTtcblx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0aWYgKChhci5Ob3RFbXB0eSA9PSAnMScgfHwgYXIubm90ZW1wdHkgPT0gdHJ1ZSkgJiYgIWFyLlZhbHVlKSB7XG5cdFx0XHRcdFx0XHRcdC8vIGlmKGFyLm5vdEVtcHR5PT0nMScpe1xuXHRcdFx0XHRcdFx0XHRcdHVuaS5oaWRlTG9hZGluZygpO1xuXHRcdFx0XHRcdFx0XHRcdC8vIHVuaS5zaG93VG9hc3Qoe3RpdGxlOmFyLkRpc3BOYW1lKyfkuI3og73kuLrnqbrvvIEnLGljb246XCJzdWNjZXNzXCIsZHVyYXRpb246MzAwMH0pO1xuXHRcdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDphci5EaXNwTmFtZSsn5LiN6IO95Li656m677yBJyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0b2JqZWN0cy5wdXNoKHtcblx0XHRcdFx0XHRcdG9ial9pZDpzdWJQYW5lbExpc3Rbc10uc2NhbkNvZGVWYWwsXG5cdFx0XHRcdFx0XHRvYmpfYXR0cnM6c3ViX3JlcVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHZhciBkYXRhSnNvbj17XG5cdFx0XHRcdFx0bWFzdGVyX2Nsczp7XG5cdFx0XHRcdFx0XHRjbHNfbmFtZTokdGhpcy4kZGF0YS5wYXJhbS5NYXN0ZXJfQ2xzLk5hbWUsXG5cdFx0XHRcdFx0XHRvYmpfYXR0cnM6cmVxXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRpbnB1dF8zMDM3OiR0aGlzLiRkYXRhLnNjYW5Db2RlVmFsLCAgIC8v5omr56CB5YaF5a65XG5cdFx0XHRcdFx0b3BfdHlwZTokdGhpcy4kZGF0YS5wYXJhbS5PcGVyYXRpb25UeXBlLCAvL+S9nOS4muexu+Wei+WumuS5iVxuXHRcdFx0XHRcdHN1Yl9jbHM6e1xuXHRcdFx0XHRcdFx0Y2xzX25hbWU6JHRoaXMuJGRhdGEucGFyYW0uU3ViX0Nscy5OYW1lLFxuXHRcdFx0XHRcdFx0b2JqZWN0czpvYmplY3RzXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdFx0XHRjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShkYXRhSnNvbikpO1xuXHRcdCAgICBcdHZhciBkYXRhSW5mbyA9IHtcblx0XHQgICAgICAgICAgICBlZHR5cGU6IFwiMFwiLCBldmVudGlkOiBldmVudElELCBwcm9qZWN0aWQ6ICcnLHJjbHNpZDogJycsIHJvYmppZDogJycsIHVzZXJsb2dpbjogJycsIFxuXHRcdFx0XHRcdGNsc2lkOiAkdGhpcy4kZGF0YS5wYXJhbS5TdWJfQ2xzLklELCBvYmppZDogJycsYXR0cjogSlNPTi5zdHJpbmdpZnkoW10pLCBleHRpbmZvOiBKU09OLnN0cmluZ2lmeShbXSksIFxuXHRcdFx0XHRcdGdsb2JhbF9hdHRyOiBKU09OLnN0cmluZ2lmeSgkdGhpcy4kZGF0YS5nbG9iYWxfYXR0ciksZGF0YUpzb246SlNPTi5zdHJpbmdpZnkoZGF0YUpzb24pXG5cdFx0ICAgICAgICB9XG5cdFx0XHRcdGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGRhdGFJbmZvKSk7XG5cdFx0ICAgIFx0Y29uc29sZS5sb2coZGF0YUluZm8pO1xuXHRcdCAgICBcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdEYXRhT2JqUnVuQ3VzdG9tRXZlbnRJbmZvJyxkYXRhSW5mbykudGhlbihzdWNjZXNzPT57XG5cdFx0ICAgIFx0XHRjb25zb2xlLmxvZyhzdWNjZXNzKTtcblx0XHRcdFx0XHR1bmkuaGlkZUxvYWRpbmcoKTtcblx0XHQgICAgXHRcdGlmIChzdWNjZXNzLmNvZGU9PScwMDAwMCcpIHtcblx0XHQgICAgXHRcdFx0dmFyIGRhdGEgPSBKU09OLnBhcnNlKHN1Y2Nlc3MuZGF0YSk7XHRcdFxuXHRcdCAgICBcdFx0XHR2YXIgcmVzdWx0ID0gZGF0YS5yZXN1bHQ7XG5cdFx0ICAgIFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAvLyBzZWxmLmNsYXNzX2F0dHJfZWxlLmZpbmQoJy5hdHRyX2ZpZWxkW2RhdGEtZmllbGQ9XCInICsgcmVzdWx0W2ldLmF0dHIgKyAnXCJdJykudmFsKHJlc3VsdFtpXS52YWx1ZSkuZGF0YSgndmFsJywgcmVzdWx0W2ldLnZhbHVlKTtcblx0XHQgICAgXHRcdFx0ICAgIHZhciBsZW5ndGggPSAwO1xuXHRcdCAgICBcdFx0XHQgICAgaWYgKCEkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUuZmlsdGVyKGZ1bmN0aW9uIChzKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgcmV0dXJuIHJlc3VsdFtpXS5hdHRyID09IHMuYXR0clxuXHRcdCAgICBcdFx0XHQgICAgfSkubGVuZ3RoKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgbGVuZ3RoID0gMTtcblx0XHQgICAgXHRcdFx0ICAgICAgICAkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUucHVzaChyZXN1bHRbaV0pO1xuXHRcdCAgICBcdFx0XHQgICAgfVxuXHRcdCAgICBcdFx0XHQgICAgaWYgKGxlbmd0aCA9PSAwKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCAkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmUubGVuZ3RoOyBqKyspIHtcblx0XHQgICAgXHRcdFx0ICAgICAgICAgICAgaWYgKCR0aGlzLiRkYXRhLnJlZmRhdGFzdG9yZVtqXS5hdHRyID09IHJlc3VsdFtpXS5hdHRyKSB7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgICAgICAkdGhpcy4kZGF0YS5yZWZkYXRhc3RvcmVbal0udmFsdWUgPSByZXN1bHRbaV0udmFsdWU7XG5cdFx0ICAgIFx0XHRcdCAgICAgICAgICAgIH1cblx0XHQgICAgXHRcdFx0ICAgICAgICB9XG5cdFx0ICAgIFx0XHRcdCAgICB9XG5cdFx0ICAgIFx0XHRcdH1cblx0XHQgICAgXHRcdFx0XG5cdFx0ICAgIFx0XHRcdGlmKGV2ZW50SUQgIT0gJHRoaXMuJGRhdGEucGFyYW0uQWZ0ZXJfT0tfRXZlbnQuSUQpXG5cdFx0ICAgIFx0XHRcdFx0JHRoaXMuc2Nhbl9PS0RhdGFPYmpSdW5DdXN0b21FdmVudCgkdGhpcy4kZGF0YS5wYXJhbS5BZnRlcl9PS19FdmVudC5JRCk7XG5cdFx0XHRcdFx0XHRlbHNle1xuXHRcdFx0XHRcdFx0XHQvL+WIt+aWsFxuXHRcdFx0XHRcdFx0XHR1bmkucmVkaXJlY3RUbyh7XG5cdFx0XHRcdFx0XHRcdFx0dXJsOicuLi9tb2RhbC9tc19jbGFzc0F0dHI/cGFyYW09JytKU09OLnN0cmluZ2lmeSgkdGhpcy4kZGF0YS5wYXJhbSkrXCImdGl0bGVuYW1lPVwiKyR0aGlzLiRkYXRhLnRpdGxlXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdCAgICBcdFx0fWVsc2V7XG5cdFx0ICAgIFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vOFwiLGNvbnRlbnQ6c3VjY2Vzcy5tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0ICAgIFx0XHR9XG5cdFx0ICAgIFx0fSkuY2F0Y2goZXg9Pntcblx0XHQgICAgXHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcblx0XHRcdFx0XHR1bmkuaGlkZUxvYWRpbmcoKTtcblx0XHQgICAgXHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vOC4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XG5cdFx0ICAgIFx0fSk7XG5cdFx0ICAgIH0sXG5cdFx0ICAgIFxuXHRcdFx0XG5cdFx0fVxuXHR9XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///80\n");
/***/ }),
/* 81 */