{"remainingRequest":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\thread-loader\\dist\\cjs.js!D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\babel-loader\\lib\\index.js!D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js??ref--0-0!D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\jenkins\\workspace\\dataShare-fvue\\src\\views\\dataShare\\shareFile\\Resource\\DetailDialog.vue?vue&type=script&lang=js","dependencies":[{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\src\\views\\dataShare\\shareFile\\Resource\\DetailDialog.vue","mtime":1734116152820},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\babel.config.js","mtime":1733906004399},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\thread-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\babel-loader\\lib\\index.js","mtime":456789000000},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\vue-loader\\lib\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:aW1wb3J0IF9yZWdlbmVyYXRvclJ1bnRpbWUgZnJvbSAiRDovamVua2lucy93b3Jrc3BhY2UvZGF0YVNoYXJlLWZ2dWUvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3JlZ2VuZXJhdG9yUnVudGltZS5qcyI7CmltcG9ydCBfYXN5bmNUb0dlbmVyYXRvciBmcm9tICJEOi9qZW5raW5zL3dvcmtzcGFjZS9kYXRhU2hhcmUtZnZ1ZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXN5bmNUb0dlbmVyYXRvci5qcyI7CmltcG9ydCBfb2JqZWN0U3ByZWFkIGZyb20gIkQ6L2plbmtpbnMvd29ya3NwYWNlL2RhdGFTaGFyZS1mdnVlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLmRlc2NyaXB0aW9uLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuY29uY2F0LmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuaW5jbHVkZXMuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5tYXAuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuc3BsaWNlLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuZnVuY3Rpb24ubmFtZS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLm51bWJlci5jb25zdHJ1Y3Rvci5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuY29uc3RydWN0b3IuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuZG90LWFsbC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5leGVjLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLnN0aWNreS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC50ZXN0LmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLnRvLXN0cmluZy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5pbmNsdWRlcy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy50cmltLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXNuZXh0Lml0ZXJhdG9yLmNvbnN0cnVjdG9yLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXNuZXh0Lml0ZXJhdG9yLmZvci1lYWNoLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXNuZXh0Lml0ZXJhdG9yLm1hcC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuZm9yLWVhY2guanMiOwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwoKaW1wb3J0IGRpYWxvZ01peGluIGZyb20gJ0AvbWl4aW5zL2RpYWxvZy5qcyc7Ci8vIGltcG9ydCBNb2RlbEhlYWRlciBmcm9tICcuL01vZGVsSGVhZGVyJzsKLy8gaW1wb3J0IE1vZGVsRW50cyBmcm9tICcuL01vZGVsRW50cyc7Ci8vIGltcG9ydCBNb2RlbEF0dHIgZnJvbSAnLi9Nb2RlbEF0dHInOwppbXBvcnQgZm9ybSBmcm9tICdAL2FwaS9mb3JtLmpzJzsKaW1wb3J0IHV0aWwgZnJvbSAnQC9ob3RlbnQtdWktdXRpbC5qcyc7CmltcG9ydCByZXEgZnJvbSAnQC9yZXF1ZXN0LmpzJzsKaW1wb3J0IG1haW4gZnJvbSAnQC9tYWluLmpzJzsKZXhwb3J0IGRlZmF1bHQgewogIG5hbWU6ICdDb21wYW55RGlhbG9nJywKICAvLyBjb21wb25lbnRzOiB7IE1vZGVsSGVhZGVyLCBNb2RlbEVudHMsIE1vZGVsQXR0ciB9LAogIG1peGluczogW2RpYWxvZ01peGluXSwKICBwcm9wczogewogICAgc2VsZWN0ZWRSb3dzOiB7CiAgICAgIHR5cGU6IEFycmF5LAogICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHsKICAgICAgICByZXR1cm4gW107CiAgICAgIH0KICAgIH0KICB9LAogIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7CiAgICByZXR1cm4gewogICAgICBmb3JtRGF0YTogewogICAgICAgIGFsaWFzOiAnJywKICAgICAgICBjYXRlZ29yeUlkOiAnJywKICAgICAgICBjYXRlZ29yeU5hbWU6ICcnLAogICAgICAgIGRlcGxveWVkOiAwLAogICAgICAgIGRlc2NyaXB0aW9uOiAnJywKICAgICAgICBkc05hbWU6ICcnLAogICAgICAgIGlzQ3JlYXRlVGFibGU6ICcnLAogICAgICAgIGlzRXh0ZXJuYWw6ICcnLAogICAgICAgIHN0YXR1czogJ25vcm1hbCcsCiAgICAgICAgc3VwcG9ydERiOiB0cnVlLAogICAgICAgIGVudHM6IFtdCiAgICAgIH0sCiAgICAgIHJ1bGVzOiB7CiAgICAgICAgbmFtZTogW3sKICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLAogICAgICAgICAgbWVzc2FnZTogJ+i1hOa6kOWQjeensOS4jeiDveS4uuepuicKICAgICAgICB9XSwKICAgICAgICBpc19hY3RpdmU6IFt7CiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgICAgICAgIG1lc3NhZ2U6ICfotYTmupDnsbvlnovkuI3og73kuLrnqbonCiAgICAgICAgfV0sCiAgICAgICAgdHlwZTogW3sKICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLAogICAgICAgICAgbWVzc2FnZTogJ+adpea6kOagvOW8j+S4jeiDveS4uuepuicKICAgICAgICB9XSwKICAgICAgICBpc19wdWJsaXNoOiBbewogICAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgICBtZXNzYWdlOiAn5piv5ZCm5Y+R5biD5LiN6IO95Li656m6JwogICAgICAgIH1dCiAgICAgIH0sCiAgICAgIGxvYWRpbmc6IGZhbHNlLAogICAgICBhc2lkZVNob3c6IHRydWUsCiAgICAgIGVudEluZGV4OiAwLAogICAgICBncmFuZFNvbkluZGV4OiAtMSwKICAgICAgb3BlbkdyYW5kU29uQXR0cjogZmFsc2UsCiAgICAgIGF0dHJUYWJsZURhdGE6IFtdLAogICAgICBtZXNzYWdlQ2F0aW9uczoge30KICAgIH07CiAgfSwKICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge30sCiAgbWV0aG9kczogewogICAgLyoqDQogICAgICogQGRlc2NyaXB0aW9uOiBkaWFsb2fmr4/mrKHmmL7npLrml7bop6blj5HnmoRpbml05pa55rOVDQogICAgICogQHBhcmFtIHsqfSBkYXRhIOS8oOWFpWRhdGENCiAgICAgKiBAcmV0dXJuIHsqfQ0KICAgICAqLwogICAgaW5pdERhdGE6IGZ1bmN0aW9uIGluaXREYXRhKGRhdGEpIHsKICAgICAgdmFyIF90aGlzMiA9IHRoaXM7CiAgICAgIHZhciBvcmdGb3JtID0gdGhpcy4kb3B0aW9ucy5kYXRhKCkuZm9ybURhdGE7CiAgICAgIHRoaXMuZm9ybURhdGEgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIG9yZ0Zvcm0pLCBkYXRhKTsKICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkgewogICAgICAgIF90aGlzMi4kcmVmcy5mb3JtLmNsZWFyVmFsaWRhdGUoKTsKICAgICAgfSk7CiAgICB9LAogICAgLy8g6KGo5Y2V5pWw5o2u5Yqg6L29CiAgICBnZXRGb3JtRGF0YTogZnVuY3Rpb24gZ2V0Rm9ybURhdGEoKSB7CiAgICAgIHZhciBfdGhpczMgPSB0aGlzOwogICAgICBpZiAodGhpcy5kYXRhVmlldy5pZCkgewogICAgICAgIGZvcm0uZ2V0RW50RGF0YSh0aGlzLmRhdGFWaWV3LmlkLCBmdW5jdGlvbiAocmVzcCkgewogICAgICAgICAgcmVzcC5kYXRhLmVudHMuZm9yRWFjaChmdW5jdGlvbiAoZW50RGF0YSwgaW5kZXgpIHsKICAgICAgICAgICAgaWYgKGVudERhdGEuaXNFeHRlcm5hbCA9PSAnMScgJiYgaW5kZXggPT0gMCkgewogICAgICAgICAgICAgIGVudERhdGEuc2hvdyA9ICfkuLvlrp7kvZMt5aSWJzsKICAgICAgICAgICAgfSBlbHNlIGlmIChlbnREYXRhLmlzRXh0ZXJuYWwgPT0gJzEnKSB7CiAgICAgICAgICAgICAgZW50RGF0YS5zaG93ID0gJ+WtkOWunuS9ky3lpJYnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gMCkgewogICAgICAgICAgICAgIGVudERhdGEuaXNDaGVjayA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGVudERhdGEuY2hpbGRyZW4pIHsKICAgICAgICAgICAgICBlbnREYXRhLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKHYpIHsKICAgICAgICAgICAgICAgIGlmICh2LmlzRXh0ZXJuYWwgPT0gJzEnKSB7CiAgICAgICAgICAgICAgICAgIHYuc2hvdyA9ICflrZnlrp7kvZMt5aSWJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmb3IgKHZhciBxID0gMDsgcSA8IGVudERhdGEuYXR0cmlidXRlTGlzdC5sZW5ndGg7IHErKykgewogICAgICAgICAgICAgIGlmIChlbnREYXRhLmF0dHJpYnV0ZUxpc3RbcV0pIHsKICAgICAgICAgICAgICAgIGlmIChlbnREYXRhLmF0dHJpYnV0ZUxpc3RbcV0uaXNSZXF1aXJlZCA9PSAwKSB7CiAgICAgICAgICAgICAgICAgIGVudERhdGEuYXR0cmlidXRlTGlzdFtxXS5pc1JlcXVpcmVkID0gJzAnOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgZW50RGF0YS5hdHRyaWJ1dGVMaXN0W3FdLmlzUmVxdWlyZWQgPSAnMSc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZW50RGF0YS5hdHRyaWJ1dGVMaXN0Lmxlbmd0aCAtIDEgLSBxOyBpKyspIHsKICAgICAgICAgICAgICAgIGlmIChlbnREYXRhLmF0dHJpYnV0ZUxpc3RbaV0uaW5kZXggPiBlbnREYXRhLmF0dHJpYnV0ZUxpc3RbaSArIDFdLmluZGV4KSB7CiAgICAgICAgICAgICAgICAgIHZhciB0ZW1wID0gZW50RGF0YS5hdHRyaWJ1dGVMaXN0W2ldOwogICAgICAgICAgICAgICAgICBlbnREYXRhLmF0dHJpYnV0ZUxpc3RbaV0gPSBlbnREYXRhLmF0dHJpYnV0ZUxpc3RbaSArIDFdOwogICAgICAgICAgICAgICAgICBlbnREYXRhLmF0dHJpYnV0ZUxpc3RbaSArIDFdID0gdGVtcDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgICAgX3RoaXMzLmZvcm1EYXRhID0gcmVzcC5kYXRhOwogICAgICAgIH0pOwogICAgICB9CiAgICB9LAogICAgLy8g5paw5aKe5a6e5L2TCiAgICBhZGRFbnRSb3dzOiBmdW5jdGlvbiBhZGRFbnRSb3dzKCkgewogICAgICB2YXIgX3RoaXM0ID0gdGhpczsKICAgICAgdmFyIHRoaXNfID0gdGhpczsKICAgICAgdXRpbC52YWxpZGF0ZUZvcm0odGhpc18sICdmb3JtJykudGhlbihmdW5jdGlvbiAoKSB7CiAgICAgICAgaWYgKHRoaXNfLmZvcm1EYXRhLmVudHMubGVuZ3RoID4gMCkgewogICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzXy5mb3JtRGF0YS5lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGlmICh0aGlzXy5jaGVja0dyYW5kU29uRW50cyhpKSkgewogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgdGhpc18uY291bnRBdHRyTGVuZ3RoID0gMDsKICAgICAgICAgIGlmICghdGhpc18uY2hlY2tFbnRGdW5jKHRoaXNfLmZvcm1EYXRhLmVudHMpKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXNfLmV4dExlbiA9IDA7CiAgICAgICAgfQogICAgICAgIHRoaXNfLmZvcm1EYXRhLmVudHMuZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkgewogICAgICAgICAgZGF0YS5pc0NoZWNrID0gZmFsc2U7CiAgICAgICAgfSk7CiAgICAgICAgdGhpc18uZW50SW5kZXggPSArK3RoaXNfLmVudEluZGV4OwogICAgICAgIHZhciByb3cgPSB7CiAgICAgICAgICBkZXNjOiAnJywKICAgICAgICAgIGluZGV4OiB0aGlzXy5lbnRJbmRleCwKICAgICAgICAgIG5hbWU6ICcnLAogICAgICAgICAgcGFja2FnZUlkOiAnJywKICAgICAgICAgIHNob3c6ICflrZDlrp7kvZMnLAogICAgICAgICAgY2hpbGRyZW46IFtdLAogICAgICAgICAgcmVsYXRpb246ICdvbmV0b21hbnknLAogICAgICAgICAgYXR0cmlidXRlTGlzdDogW10sCiAgICAgICAgICBzdGF0dXM6ICcnLAogICAgICAgICAgaXNDaGVjazogdHJ1ZQogICAgICAgIH07CiAgICAgICAgaWYgKHRoaXNfLmZvcm1EYXRhLmVudHMubGVuZ3RoID09IDApIHsKICAgICAgICAgIHRoaXNfLmVudEluZGV4ID0gMDsKICAgICAgICAgIHJvdyA9IHsKICAgICAgICAgICAgZGVzYzogJycsCiAgICAgICAgICAgIGluZGV4OiAwLAogICAgICAgICAgICBuYW1lOiAnJywKICAgICAgICAgICAgcGFja2FnZUlkOiAnJywKICAgICAgICAgICAgc2hvdzogJ+S4u+WunuS9kycsCiAgICAgICAgICAgIHJlbGF0aW9uOiAnbWFpbicsCiAgICAgICAgICAgIHN0YXR1czogJycsCiAgICAgICAgICAgIGF0dHJpYnV0ZUxpc3Q6IFtdLAogICAgICAgICAgICBpc0NoZWNrOiB0cnVlCiAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICBpZiAodGhpc18uZm9ybURhdGEuZW50cy5sZW5ndGggPiAwICYmIHRoaXNfLmNoZWNrR3JhbmRTb25FbnRzKHRoaXNfLmZvcm1EYXRhLmVudHMubGVuZ3RoIC0gMSkpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgdGhpc18uZm9ybURhdGEuZW50cy5wdXNoKHJvdyk7CiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChyZWFzb24pIHsKICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocmVhc29uKSkgewogICAgICAgICAgY29uc29sZS5sb2cocmVhc29uKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgdmFyIHJ1bGUgPSByZWFzb24ubWFwKGZ1bmN0aW9uICh2KSB7CiAgICAgICAgICByZXR1cm4gdi5ydWxlOwogICAgICAgIH0pOwogICAgICAgIHJ1bGUgPSBydWxlLnVuaXF1ZSgpOwogICAgICAgIGlmIChydWxlLmluY2x1ZGVzKCdyZXF1aXJlZCcpKSB7CiAgICAgICAgICB2YXIgbiA9IF90aGlzNC4kbWVzc2FnZS53YXJuaW5nKCfor7flsIbkv6Hmga/loavlhpnlrozmlbQnKTsKICAgICAgICAgIF90aGlzNC5tZXNzYWdlQ2F0aW9uc1tuLmlkXSA9IG47CiAgICAgICAgfSBlbHNlIGlmIChydWxlLmluY2x1ZGVzKCdyZWdleCcpKSB7CiAgICAgICAgICBfdGhpczQuJG1lc3NhZ2Uud2FybmluZygn5Y+q6IO96L6T5YWl5a2X5q+N44CB5pWw5a2X44CB5LiL5YiS57q/77yM5LiU5Lul5a2X5q+N5byA5aS0Jyk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0sCiAgICAvLyDliKDpmaTlrp7kvZMKICAgIGRlbGV0ZUVudFJvd3M6IGZ1bmN0aW9uIGRlbGV0ZUVudFJvd3MoaW5kZXgpIHsKICAgICAgdGhpcy5lbnRJbmRleCA9IGluZGV4OwogICAgICBpZiAoIXRoaXMuZm9ybURhdGEuZW50c1t0aGlzLmVudEluZGV4XS5hdHRyaWJ1dGVMaXN0KSB7CiAgICAgICAgdGhpcy5mb3JtRGF0YS5lbnRzW3RoaXMuZW50SW5kZXhdLmF0dHJpYnV0ZUxpc3QgPSBbXTsKICAgICAgfQogICAgICB0aGlzLmZvcm1EYXRhLmVudHMuc3BsaWNlKGluZGV4LCAxKTsKICAgICAgaWYgKHRoaXMuZW50SW5kZXggPj0gdGhpcy5mb3JtRGF0YS5lbnRzLmxlbmd0aCkgewogICAgICAgIHRoaXMuZW50SW5kZXggPSB0aGlzLmZvcm1EYXRhLmVudHMubGVuZ3RoIC0gMTsKICAgICAgICB0aGlzLmdldEVudHNCeUluZGV4KHRoaXMuZW50SW5kZXgpOwogICAgICB9CiAgICAgIGlmICh0aGlzLmZvcm1EYXRhLmVudHMubGVuZ3RoID4gMCkgewogICAgICAgIGlmIChpbmRleCA9PSAwKSB7CiAgICAgICAgICBpZiAodGhpcy5mb3JtRGF0YS5lbnRzWzBdLmlzRXh0ZXJuYWwgIT0gJzEnKSB7CiAgICAgICAgICAgIHRoaXMuZm9ybURhdGEuZW50c1swXS5zaG93ID0gJ+S4u+WunuS9kyc7CiAgICAgICAgICAgIHRoaXMuZm9ybURhdGEuZW50c1swXS5yZWxhdGlvbiA9ICdtYWluJzsKICAgICAgICAgICAgdGhpcy5mb3JtRGF0YS5lbnRzWzBdLmNoaWxkcmVuID0gW107CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlzLmZvcm1EYXRhLmVudHNbMF0uc2hvdyA9ICfkuLvlrp7kvZMt5aSWJzsKICAgICAgICAgICAgdGhpcy5mb3JtRGF0YS5lbnRzWzBdLnJlbGF0aW9uID0gJ21haW4nOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIGNoZWNrR3JhbmRTb25FbnRzOiBmdW5jdGlvbiBjaGVja0dyYW5kU29uRW50cyhpbmRleCwgcGFyYW0pIHsKICAgICAgaWYgKHRoaXMuZm9ybURhdGEuZW50c1tpbmRleF0uY2hpbGRyZW4gJiYgdGhpcy5mb3JtRGF0YS5lbnRzW2luZGV4XS5jaGlsZHJlbi5sZW5ndGggPT0gMCB8fCAhdGhpcy5mb3JtRGF0YS5lbnRzW2luZGV4XS5jaGlsZHJlbikgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICB2YXIgY2hpbGQgPSB0aGlzLmZvcm1EYXRhLmVudHNbaW5kZXhdLmNoaWxkcmVuOwogICAgICB2YXIgbGVuID0gdGhpcy5mb3JtRGF0YS5lbnRzW2luZGV4XS5jaGlsZHJlbi5sZW5ndGggLSAxOwogICAgICBjaGlsZFtsZW5dLmNvbW1lbnQgPSBjaGlsZFtsZW5dLmRlc2M7CiAgICAgIGNoaWxkW2xlbl0uZGVzY3JpcHRpb24gPSBjaGlsZFtsZW5dLmRlc2M7CiAgICAgIGlmICghcGFyYW0gJiYgY2hpbGRbbGVuXS5hdHRyaWJ1dGVMaXN0Lmxlbmd0aCA9PSAwKSB7CiAgICAgICAgdGhpcy4kbWVzc2FnZSh7CiAgICAgICAgICBtZXNzYWdlOiAn6K+35re75Yqg5a2X5q615L+h5oGvJywKICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJwogICAgICAgIH0pOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9LAogICAgYWRkR3JhbmRTb25FbnQ6IGZ1bmN0aW9uIGFkZEdyYW5kU29uRW50KGluZGV4KSB7CiAgICAgIHRoaXMuZ2V0RW50c0J5SW5kZXgoaW5kZXgpOwogICAgICB2YXIgcm93ID0gewogICAgICAgIGRlc2M6ICcnLAogICAgICAgIGluZGV4OiB0aGlzLmVudEluZGV4LAogICAgICAgIG5hbWU6ICcnLAogICAgICAgIHBhY2thZ2VJZDogJycsCiAgICAgICAgc2hvdzogJ+WtmeWunuS9kycsCiAgICAgICAgcmVsYXRpb246ICdvbmV0b21hbnknLAogICAgICAgIGF0dHJpYnV0ZUxpc3Q6IFtdLAogICAgICAgIHN0YXR1czogJycsCiAgICAgICAgaXNDaGVjazogdHJ1ZQogICAgICB9OwogICAgICBpZiAoIXRoaXMuZm9ybURhdGEuZW50c1tpbmRleF0uY2hpbGRyZW4pIHsKICAgICAgICB0aGlzLiRzZXQodGhpcy5mb3JtRGF0YS5lbnRzW2luZGV4XSwgJ2NoaWxkcmVuJywgW10pOwogICAgICB9CiAgICAgIGlmICh0aGlzLmNoZWNrR3JhbmRTb25FbnRzKGluZGV4KSkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB0aGlzLmZvcm1EYXRhLmVudHNbaW5kZXhdLmNoaWxkcmVuLnB1c2gocm93KTsKICAgICAgdGhpcy5ncmFuZFNvbkluZGV4ID0gdGhpcy5mb3JtRGF0YS5lbnRzW2luZGV4XS5jaGlsZHJlbi5sZW5ndGggLSAxOwogICAgICB0aGlzLm9wZW5HcmFuZFNvbkF0dHIgPSB0cnVlOwogICAgICB0aGlzLmF0dHJUYWJsZURhdGEgPSB0aGlzLmZvcm1EYXRhLmVudHNbaW5kZXhdLmNoaWxkcmVuW3RoaXMuZ3JhbmRTb25JbmRleF0uYXR0cmlidXRlTGlzdDsKICAgIH0sCiAgICBnZXRFbnRzQnlJbmRleDogZnVuY3Rpb24gZ2V0RW50c0J5SW5kZXgoaW5kZXgsIHBhcmFtKSB7CiAgICAgIHZhciBfdGhpczUgPSB0aGlzOwogICAgICAvLyDlpoLmnpzmmK/liKDpmaToh6rliqjpgInmi6nkuIrkuIDkuKrlrp7kvZMKICAgICAgaWYgKHBhcmFtID09ICdkZWxldGUnKSB7CiAgICAgICAgaWYgKHRoaXMuZm9ybURhdGEuZW50c1tpbmRleF0pIHsKICAgICAgICAgIHRoaXMuZW50SW5kZXggPSBpbmRleDsKICAgICAgICAgIHRoaXMuZm9ybURhdGEuZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7CiAgICAgICAgICAgIGRhdGEuaXNDaGVjayA9IGZhbHNlOwogICAgICAgICAgfSk7CiAgICAgICAgICB0aGlzLmZvcm1EYXRhLmVudHNbaW5kZXhdLmlzQ2hlY2sgPSB0cnVlOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIHZhciB0aGlzXyA9IHRoaXM7CiAgICAgICAgdXRpbC52YWxpZGF0ZUZvcm0odGhpcywgJ2Zvcm0nKS50aGVuKGZ1bmN0aW9uICgpIHsKICAgICAgICAgIF90aGlzNS5vcGVuR3JhbmRTb25BdHRyID0gZmFsc2U7CiAgICAgICAgICBpZiAocGFyYW0gPT0gJ2dyYW5kU29uRW50JykgewogICAgICAgICAgICBfdGhpczUub3BlbkdyYW5kU29uQXR0ciA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoX3RoaXM1LmZvcm1EYXRhLmVudHNbaW5kZXhdKSB7CiAgICAgICAgICAgIF90aGlzNS5lbnRJbmRleCA9IGluZGV4OwogICAgICAgICAgICBfdGhpczUuZm9ybURhdGEuZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7CiAgICAgICAgICAgICAgZGF0YS5pc0NoZWNrID0gZmFsc2U7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBfdGhpczUuZm9ybURhdGEuZW50c1tpbmRleF0uaXNDaGVjayA9IHRydWU7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChyZWFzb24pIHsKICAgICAgICAgIHZhciBydWxlID0gcmVhc29uLm1hcChmdW5jdGlvbiAodikgewogICAgICAgICAgICByZXR1cm4gdi5ydWxlOwogICAgICAgICAgfSk7CiAgICAgICAgICBydWxlID0gcnVsZS51bmlxdWUoKTsKICAgICAgICAgIHRoaXNfLmNsb3NlQWxsTm90aWZpY2F0aW9uKCk7CiAgICAgICAgICBpZiAocnVsZS5pbmNsdWRlcygncmVxdWlyZWQnKSkgewogICAgICAgICAgICB2YXIgbiA9IHRoaXNfLiRtZXNzYWdlLndhcm5pbmcoJ+ivt+WwhuS/oeaBr+Whq+WGmeWujOaVtCcpOwogICAgICAgICAgICB0aGlzXy5tZXNzYWdlQ2F0aW9uc1tuLmlkXSA9IG47CiAgICAgICAgICB9IGVsc2UgaWYgKHJ1bGUuaW5jbHVkZXMoJ3JlZ2V4JykpIHsKICAgICAgICAgICAgdmFyIF9uID0gdGhpc18uJG1lc3NhZ2Uud2FybmluZygn5Y+q6IO96L6T5YWl5a2X5q+N44CB5pWw5a2X44CB5LiL5YiS57q/77yM5LiU5Lul5a2X5q+N5byA5aS0Jyk7CiAgICAgICAgICAgIHRoaXNfLm1lc3NhZ2VDYXRpb25zW19uLmlkXSA9IF9uOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICB9LAogICAgY2hpbmVzZUZvcm1hdDogZnVuY3Rpb24gY2hpbmVzZUZvcm1hdChpZCwgbGlzdCwgcGFyYW0sIGluZGV4LCB2KSB7CiAgICAgIHZhciBfdGhpcyA9IHRoaXM7CiAgICAgIHZhciBkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOwogICAgICAvLyBkaXNhYmxlZCDmiJbogIUgcmVhZG9ubHkg5pe2IOS4jemcgOimgeivt+axggogICAgICB2YXIgdGltZXIgPSBudWxsOwogICAgICBpZiAoZCA9PT0gbnVsbCB8fCBkLl9fdnVlX18uZGlzYWJsZWQgfHwgZC5fX3Z1ZV9fLnJlYWRvbmx5IHx8ICF2KSByZXR1cm47CiAgICAgIGlmICh0aW1lcikgewogICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7CiAgICAgIH0KICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICByZXEucmVxdWVzdCh7CiAgICAgICAgICB1cmw6ICIiLmNvbmNhdCh3aW5kb3cuY29udGV4dC51YywgIi9iYXNlL3Rvb2xzL3YxL2dldFBpbnlpbiIpLAogICAgICAgICAgbWV0aG9kOiAnR0VUJywKICAgICAgICAgIHBhcmFtczogewogICAgICAgICAgICBjaGluZXNlOiB2LAogICAgICAgICAgICB0eXBlOiAwCiAgICAgICAgICB9CiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgICBpZiAocmVzLmRhdGEuc3RhdGUpIHsKICAgICAgICAgICAgbGlzdFtpbmRleF1bcGFyYW1dID0gcmVzLmRhdGEudmFsdWU7CiAgICAgICAgICAgIG1haW4uJG5leHRUaWNrKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICBtYWluLiR2YWxpZGF0b3IudmFsaWRhdGUoKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0sIDUwMCk7CiAgICB9LAogICAgZW50Qmx1cjogZnVuY3Rpb24gZW50Qmx1cigpIHsKICAgICAgaWYgKHRoaXMub3BlbkdyYW5kU29uQXR0ciAmJiB0aGlzLmZvcm1EYXRhLmVudHNbdGhpcy5lbnRJbmRleF0uY2hpbGRyZW5bdGhpcy5ncmFuZFNvbkluZGV4XS5hdHRyaWJ1dGVMaXN0ICYmIHRoaXMuZm9ybURhdGEuZW50c1t0aGlzLmVudEluZGV4XS5jaGlsZHJlblt0aGlzLmdyYW5kU29uSW5kZXhdLmF0dHJpYnV0ZUxpc3QubGVuZ3RoID4gMCkgewogICAgICAgIHRoaXMuZm9ybURhdGEuZW50c1t0aGlzLmVudEluZGV4XS5jaGlsZHJlblt0aGlzLmdyYW5kU29uSW5kZXhdLmF0dHJpYnV0ZUxpc3QuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkgewogICAgICAgICAgaXRlbS5kZXNjID0gaXRlbS5jb21tZW50OwogICAgICAgIH0pOwogICAgICB9CiAgICAgIGlmICh0eXBlb2YgdGhpcy5lbnRCbHVyRGVzY1JlcGVhdEluZGV4ID09PSAnbnVtYmVyJykgewogICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2hhbmdlRW50c0Rlc2MiLmNvbmNhdCh0aGlzLmVudEJsdXJEZXNjUmVwZWF0SW5kZXgpKSkgewogICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNoYW5nZUVudHNEZXNjIi5jb25jYXQodGhpcy5lbnRCbHVyRGVzY1JlcGVhdEluZGV4KSkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2RpdicpWzBdLmZpcnN0RWxlbWVudENoaWxkLnN0eWxlLmJvcmRlciA9ICcnOwogICAgICAgIH0KICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNoYW5nZUdyYW5kU29uRW50c0Rlc2MiLmNvbmNhdCh0aGlzLmVudEJsdXJEZXNjUmVwZWF0SW5kZXgpKSkgewogICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNoYW5nZUdyYW5kU29uRW50c0Rlc2MiLmNvbmNhdCh0aGlzLmVudEJsdXJEZXNjUmVwZWF0SW5kZXgpKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZGl2JylbMF0uZmlyc3RFbGVtZW50Q2hpbGQuc3R5bGUuYm9yZGVyID0gJyc7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0eXBlb2YgdGhpcy5lbnRCbHVyTmFtZVJlcGVhdEluZGV4ID09PSAnbnVtYmVyJykgewogICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZW50TmFtZSIuY29uY2F0KHRoaXMuZW50Qmx1ck5hbWVSZXBlYXRJbmRleCkpKSB7CiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZW50TmFtZSIuY29uY2F0KHRoaXMuZW50Qmx1ck5hbWVSZXBlYXRJbmRleCkpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdkaXYnKVswXS5maXJzdEVsZW1lbnRDaGlsZC5zdHlsZS5ib3JkZXIgPSAnJzsKICAgICAgICB9CiAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjaGFuZ2VHcmFuZFNvbkVudHNOYW1lIi5jb25jYXQodGhpcy5lbnRCbHVyTmFtZVJlcGVhdEluZGV4KSkpIHsKICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjaGFuZ2VHcmFuZFNvbkVudHNOYW1lIi5jb25jYXQodGhpcy5lbnRCbHVyTmFtZVJlcGVhdEluZGV4KSkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2RpdicpWzBdLmZpcnN0RWxlbWVudENoaWxkLnN0eWxlLmJvcmRlciA9ICcnOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAodGhpcy5hdHRyQ29tbWVudEVsZW1lbnRJZCAmJiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmF0dHJDb21tZW50RWxlbWVudElkKSkgewogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuYXR0ckNvbW1lbnRFbGVtZW50SWQpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdkaXYnKVswXS5maXJzdEVsZW1lbnRDaGlsZC5zdHlsZS5ib3JkZXIgPSAnJzsKICAgICAgfQogICAgICBpZiAodHlwZW9mIHRoaXMuY2hlY2tBdHRyTmFtZUluZGV4ID09PSAnbnVtYmVyJykgewogICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiIi5jb25jYXQodGhpcy5mb3JtRGF0YS5lbnRzW3RoaXMuZW50QXR0ckluZGV4XS5hdHRyaWJ1dGVMaXN0W3RoaXMuY2hlY2tBdHRyTmFtZUluZGV4XS5uYW1lLCAiYXR0ck5hbWUiKS5jb25jYXQodGhpcy5jaGVja0F0dHJOYW1lSW5kZXgpKSkgewogICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIiIuY29uY2F0KHRoaXMuZm9ybURhdGEuZW50c1t0aGlzLmVudEF0dHJJbmRleF0uYXR0cmlidXRlTGlzdFt0aGlzLmNoZWNrQXR0ck5hbWVJbmRleF0ubmFtZSwgImF0dHJOYW1lIikuY29uY2F0KHRoaXMuY2hlY2tBdHRyTmFtZUluZGV4KSkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2RpdicpWzBdLmZpcnN0RWxlbWVudENoaWxkLnN0eWxlLmJvcmRlciA9ICcnOwogICAgICAgIH0KICAgICAgICB2YXIgc29uQXR0ciA9IHRoaXMuZm9ybURhdGEuZW50c1t0aGlzLnNvbkF0dHJJbmRleF07CiAgICAgICAgaWYgKHNvbkF0dHIpIHsKICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCIiLmNvbmNhdChzb25BdHRyLmNoaWxkcmVuW3RoaXMuZW50QXR0ckluZGV4XS5hdHRyaWJ1dGVMaXN0W3RoaXMuY2hlY2tBdHRyTmFtZUluZGV4XS5uYW1lLCAiYXR0ck5hbWUiKS5jb25jYXQodGhpcy5jaGVja0F0dHJOYW1lSW5kZXgpKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZGl2JylbMF0uZmlyc3RFbGVtZW50Q2hpbGQuc3R5bGUuYm9yZGVyID0gJyc7CiAgICAgICAgfQogICAgICAgIHRoaXMuY2hlY2tBdHRyTmFtZUluZGV4ID0gbnVsbDsKICAgICAgfQogICAgICBpZiAodGhpcy5kZWZhdWx0VmFsdWVUeXBlKSB7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoImRlZmF1bHRWYWx1ZSIuY29uY2F0KHRoaXMuZGVmYXVsdFZhbHVlSW5kZXgpKVswXS5zdHlsZS5ib3JkZXIgPSAnJzsKICAgICAgICB0aGlzLmRlZmF1bHRWYWx1ZVR5cGUgPSBudWxsOwogICAgICB9CiAgICAgIGlmICh0aGlzLmF0dHJMZW5FbGVtZW50SWQgJiYgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5hdHRyTGVuRWxlbWVudElkKSkgewogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuYXR0ckxlbkVsZW1lbnRJZCkuc3R5bGUuYm9yZGVyID0gJyc7CiAgICAgIH0KICAgICAgaWYgKHRoaXMuYXR0ckRlY2ltYUVsZW1lbnRJZCAmJiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmF0dHJEZWNpbWFFbGVtZW50SWQpKSB7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5hdHRyRGVjaW1hRWxlbWVudElkKS5zdHlsZS5ib3JkZXIgPSAnJzsKICAgICAgfQogICAgfSwKICAgIC8vIOWFs+mXreaJgOacieagoemqjOmAmuefpQogICAgY2xvc2VBbGxOb3RpZmljYXRpb246IGZ1bmN0aW9uIGNsb3NlQWxsTm90aWZpY2F0aW9uKCkgewogICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5tZXNzYWdlQ2F0aW9ucykgewogICAgICAgIHRoaXMubWVzc2FnZUNhdGlvbnNba2V5XS5jbG9zZSgpOwogICAgICAgIGRlbGV0ZSB0aGlzLm1lc3NhZ2VDYXRpb25zW2tleV07CiAgICAgIH0KICAgIH0sCiAgICBnZXRHcmFuZFNvbkVudHNCeUluZGV4OiBmdW5jdGlvbiBnZXRHcmFuZFNvbkVudHNCeUluZGV4KGksIGluZGV4KSB7CiAgICAgIHRoaXMuZ2V0RW50c0J5SW5kZXgoaW5kZXgsICdncmFuZFNvbkVudCcpOwogICAgICB0aGlzLmdyYW5kU29uSW5kZXggPSBpOwogICAgICBpZiAodGhpcy5mb3JtRGF0YS5lbnRzW3RoaXMuZW50SW5kZXhdLmNoaWxkcmVuICYmIHRoaXMuZm9ybURhdGEuZW50c1t0aGlzLmVudEluZGV4XS5jaGlsZHJlbltpXSkgewogICAgICAgIHRoaXMuYXR0clRhYmxlRGF0YSA9IHRoaXMuZm9ybURhdGEuZW50c1t0aGlzLmVudEluZGV4XS5jaGlsZHJlbltpXS5hdHRyaWJ1dGVMaXN0OwogICAgICB9CiAgICB9LAogICAgZGVsZXRlR3JhbmRTb25FbnRSb3dzOiBmdW5jdGlvbiBkZWxldGVHcmFuZFNvbkVudFJvd3MoaSwgaW5kZXgpIHsKICAgICAgdGhpcy5nZXRFbnRzQnlJbmRleChpbmRleCwgJ25vQ2hlY2snKTsKICAgICAgdGhpcy5ncmFuZFNvbkluZGV4ID0gaTsKICAgICAgaWYgKCF0aGlzLmZvcm1EYXRhLmVudHNbdGhpcy5lbnRJbmRleF0uYXR0cmlidXRlTGlzdCkgewogICAgICAgIHRoaXMuZm9ybURhdGEuZW50c1t0aGlzLmVudEluZGV4XS5jaGlsZHJlbltpXS5hdHRyaWJ1dGVMaXN0ID0gW107CiAgICAgIH0KICAgICAgdGhpcy5mb3JtRGF0YS5lbnRzW3RoaXMuZW50SW5kZXhdLmNoaWxkcmVuLnNwbGljZShpLCAxKTsKICAgICAgdGhpcy5vcGVuR3JhbmRTb25BdHRyID0gZmFsc2U7CiAgICAgIHRoaXMuYXR0clRhYmxlRGF0YSA9IHRoaXMuZm9ybURhdGEuZW50c1t0aGlzLmVudEluZGV4XS5hdHRyaWJ1dGVMaXN0OwogICAgICBpZiAodGhpcy5mb3JtRGF0YS5lbnRzW3RoaXMuZW50SW5kZXhdLmNoaWxkcmVuW2kgLSAxXSAmJiB0aGlzLmZvcm1EYXRhLmVudHNbdGhpcy5lbnRJbmRleF0uY2hpbGRyZW5baSAtIDFdLmF0dHJpYnV0ZUxpc3QubGVuZ3RoID4gMCkgewogICAgICAgIHRoaXMuYXR0clRhYmxlRGF0YSA9IHRoaXMuZm9ybURhdGEuZW50c1t0aGlzLmVudEluZGV4XS5jaGlsZHJlbltpIC0gMV0uYXR0cmlidXRlTGlzdDsKICAgICAgfQogICAgfSwKICAgIGNoZWNrRW50RnVuYzogZnVuY3Rpb24gY2hlY2tFbnRGdW5jKGVudCwgc29uSW5kZXgpIHsKICAgICAgdmFyIGVudFZhbCA9IHt9OwogICAgICBpZiAoZW50Lmxlbmd0aCA8IDEpIHsKICAgICAgICB0aGlzLiRtZXNzYWdlKHsKICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJywKICAgICAgICAgIG1lc3NhZ2U6ICfor7fmt7vliqDlrp7kvZPlr7nosaHvvIEnCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZW50Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKGVudFtpXS5zaG93ICE9ICflrZnlrp7kvZMnKSB7CiAgICAgICAgICBlbnRbaV0uZGVzY3JpcHRpb24gPSBlbnRbaV0uY29tbWVudDsKICAgICAgICAgIGVudFtpXS5kZXNjID0gZW50W2ldLmNvbW1lbnQ7CiAgICAgICAgfQogICAgICAgIGlmICghZW50VmFsWyJkZXNjIi5jb25jYXQoZW50W2ldLmRlc2MpXSkgewogICAgICAgICAgZW50VmFsWyJkZXNjIi5jb25jYXQoZW50W2ldLmRlc2MpXSA9IGVudFtpXS5kZXNjOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLmVudEJsdXJEZXNjUmVwZWF0SW5kZXggPSBpOwogICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjaGFuZ2VFbnRzRGVzYyIuY29uY2F0KGkpKSAmJiBlbnRbaV0uc2hvdyA9PSAn5a2Q5a6e5L2TJykgewogICAgICAgICAgICB0aGlzLiRtZXNzYWdlKHsKICAgICAgICAgICAgICBtZXNzYWdlOiAiXHU1REYyXHU1QjU4XHU1NzI4XHU1QjUwXHU1QjlFXHU0RjUzXHU2M0NGXHU4RkYwXHU0RTNBXHUzMDEwIi5jb25jYXQoZW50W2ldLmRlc2MsICJcdTMwMTFcdTc2ODRib1x1NUI5RVx1NEY1MyIpLAogICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNoYW5nZUVudHNEZXNjIi5jb25jYXQoaSkpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdkaXYnKVswXS5sYXN0RWxlbWVudENoaWxkLmZvY3VzKCk7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjaGFuZ2VFbnRzRGVzYyIuY29uY2F0KGkpKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZGl2JylbMF0uZmlyc3RFbGVtZW50Q2hpbGQuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCByZWQnOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7CiAgICAgICAgICAgICAgbWVzc2FnZTogIlx1NURGMlx1NUI1OFx1NTcyOFx1NUI1OVx1NUI5RVx1NEY1M1x1NjNDRlx1OEZGMFx1NEUzQVx1MzAxMCIuY29uY2F0KGVudFtpXS5kZXNjLCAiXHUzMDExXHU3Njg0Ym9cdTVCOUVcdTRGNTMiKSwKICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjaGFuZ2VHcmFuZFNvbkVudHNEZXNjIi5jb25jYXQoaSkpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdkaXYnKVswXS5sYXN0RWxlbWVudENoaWxkLmZvY3VzKCk7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjaGFuZ2VHcmFuZFNvbkVudHNEZXNjIi5jb25jYXQoaSkpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdkaXYnKVswXS5maXJzdEVsZW1lbnRDaGlsZC5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkIHJlZCc7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGlmICghZW50VmFsWyJuYW1lIi5jb25jYXQoZW50W2ldLm5hbWUpXSkgewogICAgICAgICAgZW50VmFsWyJuYW1lIi5jb25jYXQoZW50W2ldLm5hbWUpXSA9IGVudFtpXS5uYW1lOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLmVudEJsdXJOYW1lUmVwZWF0SW5kZXggPSBpOwogICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJlbnROYW1lIi5jb25jYXQoaSkpICYmIGVudFtpXS5zaG93ID09ICflrZDlrp7kvZMnKSB7CiAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2UoewogICAgICAgICAgICAgIG1lc3NhZ2U6ICJcdTVERjJcdTVCNThcdTU3MjhcdTVCNTBcdTVCOUVcdTRGNTNcdTU0MERcdTc5RjBcdTRFM0FcdTMwMTAiLmNvbmNhdChlbnRbaV0ubmFtZSwgIlx1MzAxMVx1NzY4NGJvXHU1QjlFXHU0RjUzIiksCiAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZW50TmFtZSIuY29uY2F0KGkpKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZGl2JylbMF0ubGFzdEVsZW1lbnRDaGlsZC5mb2N1cygpOwogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZW50TmFtZSIuY29uY2F0KGkpKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZGl2JylbMF0uZmlyc3RFbGVtZW50Q2hpbGQuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCByZWQnOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7CiAgICAgICAgICAgICAgbWVzc2FnZTogIlx1NURGMlx1NUI1OFx1NTcyOFx1NUI1OVx1NUI5RVx1NEY1M1x1NTQwRFx1NzlGMFx1NEUzQVx1MzAxMCIuY29uY2F0KGVudFtpXS5uYW1lLCAiXHUzMDExXHU3Njg0Ym9cdTVCOUVcdTRGNTMiKSwKICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjaGFuZ2VHcmFuZFNvbkVudHNOYW1lIi5jb25jYXQoaSkpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdkaXYnKVswXS5sYXN0RWxlbWVudENoaWxkLmZvY3VzKCk7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjaGFuZ2VHcmFuZFNvbkVudHNOYW1lIi5jb25jYXQoaSkpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdkaXYnKVswXS5maXJzdEVsZW1lbnRDaGlsZC5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkIHJlZCc7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGlmIChlbnRbaV0uaXNFeHRlcm5hbCA9PSAnMScpIHsKICAgICAgICAgICsrdGhpcy5leHRMZW47CiAgICAgICAgICBpZiAoaSAhPSAwICYmIHRoaXMuZXh0TGVuID4gMSAmJiAhZW50W2ldLmZrKSB7CiAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2UoewogICAgICAgICAgICAgIG1lc3NhZ2U6ICJcdThCRjdcdTdFRDkiLmNvbmNhdChlbnRbaV0uY29tbWVudCwgIlx1NUI5RVx1NEY1M1x1NkRGQlx1NTJBMFx1NTkxNlx1OTUyRVx1RkYwMSIpLAogICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoZW50W2ldLmF0dHJpYnV0ZUxpc3QubGVuZ3RoID4gMCkgewogICAgICAgICAgaWYgKCF0aGlzLmNoZWNrQXR0ckZ1bmMoZW50W2ldLCBpLCBzb25JbmRleCkpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLiRtZXNzYWdlKHsKICAgICAgICAgICAgbWVzc2FnZTogJ+ivt+a3u+WKoOWtl+aute+8gScsCiAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJwogICAgICAgICAgfSk7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGlmIChlbnRbaV0uY2hpbGRyZW4gJiYgZW50W2ldLmNoaWxkcmVuLmxlbmd0aCA+IDApIHsKICAgICAgICAgIHRoaXMuY291bnRBdHRyTGVuZ3RoID0gMDsKICAgICAgICAgIGlmICghdGhpcy5jaGVja0VudEZ1bmMoZW50W2ldLmNoaWxkcmVuLCBpKSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRoaXMuY291bnRBdHRyTGVuZ3RoID0gMDsKICAgICAgfQogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0sCiAgICBjaGVja0F0dHJGdW5jOiBmdW5jdGlvbiBjaGVja0F0dHJGdW5jKGVudCwgaSwgc29uSW5kZXgpIHsKICAgICAgdmFyIHJlZ1BvcyA9IG5ldyBSZWdFeHAoJ15cXGQqKD86XFwuXFxkezEsMn0pPyQnKTsKICAgICAgdmFyIGF0dHJWYWwgPSB7fTsKICAgICAgdmFyIGF0dHIgPSBlbnQuYXR0cmlidXRlTGlzdDsKICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7CiAgICAgICAgYXR0cltqXS5kZXNjID0gYXR0cltqXS5jb21tZW50OwogICAgICAgIGlmIChhdHRyW2pdLmRlZmF1bHRWYWx1ZSA9PSBudWxsKSB7CiAgICAgICAgICBhdHRyW2pdLmRlZmF1bHRWYWx1ZSA9ICcnOwogICAgICAgIH0KICAgICAgICBhdHRyW2pdLmRlZmF1bHRWYWx1ZSA9IGF0dHJbal0uZGVmYXVsdFZhbHVlLnRyaW0oKTsKICAgICAgICB0aGlzLmF0dHJDb21tZW50RWxlbWVudElkID0gIiIuY29uY2F0KGF0dHJbal0ubmFtZSwgImNvbW1lbnQiKS5jb25jYXQoaik7CiAgICAgICAgaWYgKGVudC5pc0V4dGVybmFsICE9ICcxJykgewogICAgICAgICAgaWYgKCFhdHRyVmFsWyJuYW1lIi5jb25jYXQoYXR0cltqXS5uYW1lKV0pIHsKICAgICAgICAgICAgYXR0clZhbFsibmFtZSIuY29uY2F0KGF0dHJbal0ubmFtZSldID0gYXR0cltqXS5uYW1lOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5lbnRBdHRySW5kZXggPSBpOwogICAgICAgICAgICBpZiAoc29uSW5kZXgpIHsKICAgICAgICAgICAgICB0aGlzLnNvbkF0dHJJbmRleCA9IHNvbkluZGV4OwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuYXR0ck5hbWVFbGVtZW50SWQgPSBhdHRyOwogICAgICAgICAgICB0aGlzLmNoZWNrQXR0ck5hbWVJbmRleCA9IGo7CiAgICAgICAgICAgIHZhciBtc2cgPSAiXHU1QjlFXHU0RjUzXHVGRjFBIi5jb25jYXQoZW50LmRlc2MsICJcdUZGMDgiKS5jb25jYXQoZW50Lm5hbWUsICJcdUZGMDlcdTRFMkRcdTVCNThcdTU3MjhcdTkxQ0RcdTU5MERcdTVCNTdcdTZCQjVcdTU0MERcdTMwMTAiKS5jb25jYXQoYXR0cltqXS5uYW1lLCAiXHUzMDExIik7CiAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2UoewogICAgICAgICAgICAgIG1lc3NhZ2U6IG1zZywKICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCIiLmNvbmNhdCh0aGlzLmF0dHJOYW1lRWxlbWVudElkW2pdLm5hbWUsICJhdHRyTmFtZSIpLmNvbmNhdChqKSkuZm9jdXMoKTsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIiIuY29uY2F0KHRoaXMuYXR0ck5hbWVFbGVtZW50SWRbal0ubmFtZSwgImF0dHJOYW1lIikuY29uY2F0KGopKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZGl2JylbMF0uZmlyc3RFbGVtZW50Q2hpbGQuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCByZWQnOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLmF0dHJMZW5FbGVtZW50SWQgPSAiIi5jb25jYXQoYXR0cltqXS5uYW1lLCAiYXR0ckxlbiIpLmNvbmNhdChqKTsKICAgICAgICAgIGlmIChhdHRyW2pdLmF0dHJMZW5ndGggJiYgYXR0cltqXS5hdHRyTGVuZ3RoICE9PSAwKSB7CiAgICAgICAgICAgIGlmICghcmVnUG9zLnRlc3QoYXR0cltqXS5hdHRyTGVuZ3RoKSkgewogICAgICAgICAgICAgIHRoaXMuZW50QXR0ckluZGV4ID0gaTsKICAgICAgICAgICAgICBpZiAoc29uSW5kZXgpIHsKICAgICAgICAgICAgICAgIHRoaXMuc29uQXR0ckluZGV4ID0gc29uSW5kZXg7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuYXR0ckxlbkVsZW1lbnRJZCkuZm9jdXMoKTsKICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmF0dHJMZW5FbGVtZW50SWQpLnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgcmVkJzsKICAgICAgICAgICAgICB2YXIgbiA9IHRoaXMuJG1lc3NhZ2Uud2FybmluZygn6K+36L6T5YWl5q2j56Gu5pWw5a2XJyk7CiAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlQ2F0aW9uc1tuLmlkXSA9IG47CiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLmF0dHJEZWNpbWFFbGVtZW50SWQgPSAiIi5jb25jYXQoYXR0cltqXS5uYW1lLCAiZGVjaW1hIikuY29uY2F0KGopOwogICAgICAgICAgaWYgKGF0dHJbal0uZGVjaW1hbExlbiAmJiBhdHRyW2pdLmRlY2ltYWxMZW4gIT09IDApIHsKICAgICAgICAgICAgaWYgKCFyZWdQb3MudGVzdChhdHRyW2pdLmRlY2ltYWxMZW4pKSB7CiAgICAgICAgICAgICAgdGhpcy5lbnRBdHRySW5kZXggPSBpOwogICAgICAgICAgICAgIGlmIChzb25JbmRleCkgewogICAgICAgICAgICAgICAgdGhpcy5zb25BdHRySW5kZXggPSBzb25JbmRleDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5hdHRyRGVjaW1hRWxlbWVudElkKS5mb2N1cygpOwogICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuYXR0ckRlY2ltYUVsZW1lbnRJZCkuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCByZWQnOwogICAgICAgICAgICAgIHZhciBfbjIgPSB0aGlzLiRtZXNzYWdlLndhcm5pbmcoJ+ivt+i+k+WFpeato+ehruaVsOWtlycpOwogICAgICAgICAgICAgIHRoaXMubWVzc2FnZUNhdGlvbnNbX24yLmlkXSA9IF9uMjsKICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChhdHRyW2pdLmRlY2ltYWxMZW4pIHsKICAgICAgICAgICAgaWYgKGF0dHJbal0uZGVjaW1hbExlbi5sZW5ndGggPiAxKSB7CiAgICAgICAgICAgICAgdmFyIGRlY2ltYWxMZW4gPSBhdHRyW2pdLmRlY2ltYWxMZW4uc3Vic3RyKDAsIDEpOwogICAgICAgICAgICAgIGlmIChkZWNpbWFsTGVuID09ICcwJykgewogICAgICAgICAgICAgICAgYXR0cltqXS5kZWNpbWFsTGVuID0gYXR0cltqXS5kZWNpbWFsTGVuLnN1YnN0cigxLCBhdHRyW2pdLmRlY2ltYWxMZW4ubGVuZ3RoKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGF0dHJbal0uZGVjaW1hbExlbiA8IDAgfHwgYXR0cltqXS5kZWNpbWFsTGVuID4gMzApIHsKICAgICAgICAgICAgICB0aGlzLmVudEF0dHJJbmRleCA9IGk7CiAgICAgICAgICAgICAgaWYgKHNvbkluZGV4KSB7CiAgICAgICAgICAgICAgICB0aGlzLnNvbkF0dHJJbmRleCA9IHNvbkluZGV4OwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmF0dHJEZWNpbWFFbGVtZW50SWQpLmZvY3VzKCk7CiAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5hdHRyRGVjaW1hRWxlbWVudElkKS5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkIHJlZCc7CiAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7CiAgICAgICAgICAgICAgICBtZXNzYWdlOiAn5bCP5pWw6ZW/5bqm5LiN6IO95bCP5LqOMOaIluiAheWkp+S6jjMwJywKICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKGF0dHJbal0uZGF0YVR5cGUgPT09ICd2YXJjaGFyJykgewogICAgICAgICAgICB0aGlzLmNvdW50QXR0ckxlbmd0aCArPSBwYXJzZUludChhdHRyW2pdLmF0dHJMZW5ndGgpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGF0dHJbal0uYXR0ckxlbmd0aCkgewogICAgICAgICAgICBpZiAoYXR0cltqXS5hdHRyTGVuZ3RoLmxlbmd0aCA+IDEpIHsKICAgICAgICAgICAgICB2YXIgYXR0ckxlbmd0aCA9IGF0dHJbal0uYXR0ckxlbmd0aC5zdWJzdHIoMCwgMSk7CiAgICAgICAgICAgICAgaWYgKGF0dHJMZW5ndGggPT0gJzAnKSB7CiAgICAgICAgICAgICAgICBhdHRyW2pdLmF0dHJMZW5ndGggPSBhdHRyW2pdLmF0dHJMZW5ndGguc3Vic3RyKDEsIGF0dHJbal0uYXR0ckxlbmd0aC5sZW5ndGgpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoYXR0cltqXS5kYXRhVHlwZSA9PT0gJ3ZhcmNoYXInKSB7CiAgICAgICAgICAgICAgaWYgKGF0dHJbal0uYXR0ckxlbmd0aCA8IDEgfHwgdGhpcy5jb3VudEF0dHJMZW5ndGggPiAyMTUwMCkgewogICAgICAgICAgICAgICAgdGhpcy5lbnRBdHRySW5kZXggPSBpOwogICAgICAgICAgICAgICAgaWYgKHNvbkluZGV4KSB7CiAgICAgICAgICAgICAgICAgIHRoaXMuc29uQXR0ckluZGV4ID0gc29uSW5kZXg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmF0dHJMZW5FbGVtZW50SWQpLmZvY3VzKCk7CiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmF0dHJMZW5FbGVtZW50SWQpLnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgcmVkJzsKICAgICAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2UoewogICAgICAgICAgICAgICAgICBtZXNzYWdlOiAn5pW05pWw6ZW/5bqm5LiN6IO95bCP5LqOMeaIluiAhemVv+W6puaAu+WSjOi2heWHujIxNTAwJywKICAgICAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGF0dHJbal0uZGF0YVR5cGUgPT09ICdudW1iZXInIHx8IGF0dHJbal0uZGF0YVR5cGUgPT0gJ+aVsOWtlycpIHsKICAgICAgICAgICAgICB2YXIgZGVmYXVsdFZhbCA9IGF0dHJbal0uZGVmYXVsdFZhbHVlLnNwbGl0KCcuJyk7CiAgICAgICAgICAgICAgaWYgKE51bWJlcihhdHRyW2pdLmF0dHJMZW5ndGgpIDwgMSkgewogICAgICAgICAgICAgICAgdGhpcy5lbnRBdHRySW5kZXggPSBpOwogICAgICAgICAgICAgICAgaWYgKHNvbkluZGV4KSB7CiAgICAgICAgICAgICAgICAgIHRoaXMuc29uQXR0ckluZGV4ID0gc29uSW5kZXg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmF0dHJMZW5FbGVtZW50SWQpLmZvY3VzKCk7CiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmF0dHJMZW5FbGVtZW50SWQpLnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgcmVkJzsKICAgICAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2UoewogICAgICAgICAgICAgICAgICBtZXNzYWdlOiAn5pW05pWw6ZW/5bqm5LiN6IO95bCP5LqOMScsCiAgICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChOdW1iZXIoYXR0cltqXS5hdHRyTGVuZ3RoKSArIE51bWJlcihhdHRyW2pdLmRlY2ltYWxMZW4pID4gMzgpIHsKICAgICAgICAgICAgICAgIHRoaXMuZW50QXR0ckluZGV4ID0gaTsKICAgICAgICAgICAgICAgIGlmIChzb25JbmRleCkgewogICAgICAgICAgICAgICAgICB0aGlzLnNvbkF0dHJJbmRleCA9IHNvbkluZGV4OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5hdHRyTGVuRWxlbWVudElkKS5mb2N1cygpOwogICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5hdHRyTGVuRWxlbWVudElkKS5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkIHJlZCc7CiAgICAgICAgICAgICAgICB0aGlzLiRtZXNzYWdlKHsKICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ+aVtOaVsOmVv+W6puS4juWwj+aVsOmVv+W6puS5i+WSjOS4jeiDvei2hei/hzM4JywKICAgICAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKGRlZmF1bHRWYWxbMV0gJiYgTnVtYmVyKGRlZmF1bHRWYWxbMV0ubGVuZ3RoKSA+IE51bWJlcihhdHRyW2pdLmRlY2ltYWxMZW4pKSB7CiAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRWYWx1ZUluZGV4ID0gajsKICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdFZhbHVlVHlwZSA9ICdudW1iZXInOwogICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoImRlZmF1bHRWYWx1ZSIuY29uY2F0KGopKVswXS5mb2N1cygpOwogICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoImRlZmF1bHRWYWx1ZSIuY29uY2F0KGopKVswXS5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkIHJlZCc7CiAgICAgICAgICAgICAgICB0aGlzLiRtZXNzYWdlKHsKICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ+m7mOiupOWAvOS4reWwj+aVsOmVv+W6pui2heWHuuiuvue9ruWAvCcsCiAgICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChhdHRyW2pdLmRlZmF1bHRWYWx1ZSAmJiBhdHRyW2pdLmRlZmF1bHRWYWx1ZS5sZW5ndGggPiAyMSkgewogICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0VmFsdWVJbmRleCA9IGo7CiAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRWYWx1ZVR5cGUgPSAnbnVtYmVyJzsKICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCJkZWZhdWx0VmFsdWUiLmNvbmNhdChqKSlbMF0uZm9jdXMoKTsKICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCJkZWZhdWx0VmFsdWUiLmNvbmNhdChqKSlbMF0uc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCByZWQnOwogICAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7CiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICfmlbTmlbDplb/luqbkuI3og73otoXov4cyMScsCiAgICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmICghcmVnUG9zLnRlc3QoTnVtYmVyKGF0dHJbal0uZGVmYXVsdFZhbHVlKSkpIHsKICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdFZhbHVlSW5kZXggPSBqOwogICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0VmFsdWVUeXBlID0gJ251bWJlcic7CiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSgiZGVmYXVsdFZhbHVlIi5jb25jYXQoaikpWzBdLmZvY3VzKCk7CiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSgiZGVmYXVsdFZhbHVlIi5jb25jYXQoaikpWzBdLnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgcmVkJzsKICAgICAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2UoewogICAgICAgICAgICAgICAgICBtZXNzYWdlOiAn6buY6K6k5YC85bqU5Li65pWw5a2XJywKICAgICAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIGQgPSBhdHRyW2pdLmRlZmF1bHRWYWx1ZTsKICAgICAgICAgICAgaWYgKGQuaW5kZXhPZignLicpID4gLTEpIHsKICAgICAgICAgICAgICB2YXIgX2kgPSBkLmluZGV4T2YoJy4nKTsKICAgICAgICAgICAgICB2YXIgc3RhcnQgPSBkLnN1YnN0cmluZygwLCBfaSk7CiAgICAgICAgICAgICAgdmFyIGVuZCA9IGQuc3Vic3RyaW5nKF9pICsgMSwgYXR0cltqXS5kZWZhdWx0VmFsdWUubGVuZ3RoKTsKICAgICAgICAgICAgICBkID0gc3RhcnQgKyBlbmQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGQubGVuZ3RoID4gYXR0cltqXS5hdHRyTGVuZ3RoICsgYXR0cltqXS5kZWNpbWFsTGVuKSB7CiAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0VmFsdWVJbmRleCA9IGo7CiAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0VmFsdWVUeXBlID0gJ3ZhcmNoYXInOwogICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCJkZWZhdWx0VmFsdWUiLmNvbmNhdChqKSlbMF0uZm9jdXMoKTsKICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSgiZGVmYXVsdFZhbHVlIi5jb25jYXQoaikpWzBdLnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgcmVkJzsKICAgICAgICAgICAgICB0aGlzLiRtZXNzYWdlKHsKICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICfpu5jorqTlgLzplb/luqbpnIDlsI/kuo7mlbTmlbDplb/luqYnLAogICAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgaWYgKGF0dHJbal0uZGF0YVR5cGUgPT09ICd2YXJjaGFyJyB8fCBhdHRyW2pdLmRhdGFUeXBlID09PSAnbnVtYmVyJykgewogICAgICAgICAgICB0aGlzLmVudEF0dHJJbmRleCA9IGk7CiAgICAgICAgICAgIGlmIChzb25JbmRleCkgewogICAgICAgICAgICAgIHRoaXMuc29uQXR0ckluZGV4ID0gc29uSW5kZXg7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5hdHRyTGVuRWxlbWVudElkKS5mb2N1cygpOwogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmF0dHJMZW5FbGVtZW50SWQpLnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgcmVkJzsKICAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7CiAgICAgICAgICAgICAgbWVzc2FnZTogJ+ivt+a3u+WKoOaVtOaVsOmVv+W6picsCiAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfSwKICAgIC8vIOWFs+mXreihqOWNleWvueivneahhgogICAgaGFuZGxlRGlhbG9nQ2xvc2U6IGZ1bmN0aW9uIGhhbmRsZURpYWxvZ0Nsb3NlKCkgewogICAgICB0aGlzLiRlbWl0KCdsb2FkVGFibGVEYXRhJyk7CiAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlOwogICAgICB0aGlzLmlzU2F2ZSA9IGZhbHNlOwogICAgICB0aGlzLmVudEluZGV4ID0gMDsKICAgICAgdGhpcy5ncmFuZFNvbkluZGV4ID0gLTE7CiAgICAgIHRoaXMub3BlbkdyYW5kU29uQXR0ciA9IGZhbHNlOwogICAgICB0aGlzLmNvdW50QXR0ckxlbmd0aCA9IDA7CiAgICAgIHRoaXMuZm9ybURhdGEgPSB0aGlzLiRvcHRpb25zLmRhdGEoKS5mb3JtRGF0YTsKICAgICAgdGhpcy4kcm91dGVyLnB1c2goewogICAgICAgIHBhdGg6ICcvc3lzcGxhdC9idXNpbmVzc09iaicKICAgICAgfSk7IC8vIGZvcm0jYnVzaW5lc3NPYmoKICAgIH0sCiAgICBvbkNhbmNlbDogZnVuY3Rpb24gb25DYW5jZWwoKSB7CiAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlOwogICAgfSwKICAgIG9uQ29uZmlybTogZnVuY3Rpb24gb25Db25maXJtKCkgewogICAgICB0aGlzLiRyZWZzLmZvcm0udmFsaWRhdGUoLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHsKICAgICAgICB2YXIgX3JlZiA9IF9hc3luY1RvR2VuZXJhdG9yKC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3JSdW50aW1lKCkubWFyayhmdW5jdGlvbiBfY2FsbGVlKHZhbGlkKSB7CiAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZSgpLndyYXAoZnVuY3Rpb24gX2NhbGxlZSQoX2NvbnRleHQpIHsKICAgICAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQucHJldiA9IF9jb250ZXh0Lm5leHQpIHsKICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICBpZiAodmFsaWQpIHsKICAgICAgICAgICAgICAgICAgLy8gY29uc3QgcGFyYW1zID0gdGhpcy5oYW5kbGVQYXJhbXMoKQogICAgICAgICAgICAgICAgICAvLyB0cnkgewogICAgICAgICAgICAgICAgICAvLyAgIHRoaXMubG9hZGluZyA9IHRydWUKICAgICAgICAgICAgICAgICAgLy8gICBpZiAodGhpcy5kYXRhPy5pZCkgewogICAgICAgICAgICAgICAgICAvLyAgICAgYXdhaXQgdXBkYXRlRGF0YShwYXJhbXMpCiAgICAgICAgICAgICAgICAgIC8vICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgLy8gICAgIGF3YWl0IGRhdGFBZGQocGFyYW1zKQogICAgICAgICAgICAgICAgICAvLyAgIH0KICAgICAgICAgICAgICAgICAgLy8gICB0aGlzLiRtZXNzYWdlLnN1Y2Nlc3MoJ+aTjeS9nOaIkOWKnycpCiAgICAgICAgICAgICAgICAgIC8vICAgdGhpcy5vbkNhbmNlbCgpCiAgICAgICAgICAgICAgICAgIC8vIHRoaXMuJGVtaXQoJ2NvbmZpcm0nLCB7Li4udGhpcy5mb3JtRGF0YX0pCiAgICAgICAgICAgICAgICAgIC8vIH0gZmluYWxseSB7CiAgICAgICAgICAgICAgICAgIC8vICAgdGhpcy5sb2FkaW5nID0gZmFsc2UKICAgICAgICAgICAgICAgICAgLy8gfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICBjYXNlICJlbmQiOgogICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LnN0b3AoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwgX2NhbGxlZSk7CiAgICAgICAgfSkpOwogICAgICAgIHJldHVybiBmdW5jdGlvbiAoX3gpIHsKICAgICAgICAgIHJldHVybiBfcmVmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgICAgfTsKICAgICAgfSgpKTsKICAgIH0KICB9Cn07"},null]}