{"remainingRequest":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\jenkins\\workspace\\dataShare-fvue\\src\\views\\dataCollect\\dataCollectCompany\\dataSourceItem\\DetailDialog.vue?vue&type=script&lang=js","dependencies":[{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\src\\views\\dataCollect\\dataCollectCompany\\dataSourceItem\\DetailDialog.vue","mtime":1734375359944},{"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:Ly8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KDQppbXBvcnQgZGlhbG9nTWl4aW4gZnJvbSAnQC9taXhpbnMvZGlhbG9nLmpzJzsNCmltcG9ydCBNb2RlbEhlYWRlciBmcm9tICcuL01vZGVsSGVhZGVyJzsNCmltcG9ydCBNb2RlbEVudHMgZnJvbSAnLi9Nb2RlbEVudHMnOw0KaW1wb3J0IE1vZGVsQXR0ciBmcm9tICcuL01vZGVsQXR0cic7DQoNCmltcG9ydCBmb3JtIGZyb20gJ0AvYXBpL2Zvcm0uanMnOw0KaW1wb3J0IHV0aWwgZnJvbSAnQC9ob3RlbnQtdWktdXRpbC5qcyc7DQppbXBvcnQgcmVxIGZyb20gJ0AvcmVxdWVzdC5qcyc7DQppbXBvcnQgbWFpbiBmcm9tICdAL21haW4uanMnOw0KDQpleHBvcnQgZGVmYXVsdCB7DQogIG5hbWU6ICdDb21wYW55RGlhbG9nJywNCiAgY29tcG9uZW50czogeyBNb2RlbEhlYWRlciwgTW9kZWxFbnRzLCBNb2RlbEF0dHIgfSwNCiAgbWl4aW5zOiBbZGlhbG9nTWl4aW5dLA0KICBwcm9wczogew0KICAgIHNlbGVjdGVkUm93czogew0KICAgICAgdHlwZTogQXJyYXksDQogICAgICBkZWZhdWx0OiAoKSA9PiBbXSwNCiAgICB9LA0KICB9LA0KICBkYXRhKCkgew0KICAgIHJldHVybiB7DQogICAgICBmb3JtRGF0YTogew0KICAgICAgICBhbGlhczogJycsDQogICAgICAgIGNhdGVnb3J5SWQ6ICcnLA0KICAgICAgICBjYXRlZ29yeU5hbWU6ICcnLA0KICAgICAgICBkZXBsb3llZDogMCwNCiAgICAgICAgZGVzY3JpcHRpb246ICcnLA0KICAgICAgICBkc05hbWU6ICcnLA0KICAgICAgICBpc0NyZWF0ZVRhYmxlOiAnJywNCiAgICAgICAgaXNFeHRlcm5hbDogJycsDQogICAgICAgIHN0YXR1czogJ25vcm1hbCcsDQogICAgICAgIHN1cHBvcnREYjogdHJ1ZSwNCiAgICAgICAgZW50czogW10sDQogICAgICB9LA0KICAgICAgcnVsZXM6IHsNCiAgICAgICAgbmFtZTogW3sgcmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6ICfotYTmupDlkI3np7DkuI3og73kuLrnqbonIH1dLA0KICAgICAgICBpc19hY3RpdmU6IFt7IHJlcXVpcmVkOiB0cnVlLCBtZXNzYWdlOiAn6LWE5rqQ57G75Z6L5LiN6IO95Li656m6JyB9XSwNCiAgICAgICAgdHlwZTogW3sgcmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6ICfmnaXmupDmoLzlvI/kuI3og73kuLrnqbonIH1dLA0KICAgICAgICBpc19wdWJsaXNoOiBbeyByZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogJ+aYr+WQpuWPkeW4g+S4jeiDveS4uuepuicgfV0sDQogICAgICB9LA0KICAgICAgbG9hZGluZzogZmFsc2UsDQogICAgICBhc2lkZVNob3c6IHRydWUsDQogICAgICBlbnRJbmRleDogMCwNCiAgICAgIGdyYW5kU29uSW5kZXg6IC0xLA0KICAgICAgb3BlbkdyYW5kU29uQXR0cjogZmFsc2UsDQogICAgICBhdHRyVGFibGVEYXRhOiBbXSwNCiAgICAgIG1lc3NhZ2VDYXRpb25zOiB7fSwNCiAgICB9Ow0KICB9LA0KICBtb3VudGVkKCkge30sDQogIG1ldGhvZHM6IHsNCiAgICAvKioNCiAgICAgKiBAZGVzY3JpcHRpb246IGRpYWxvZ+avj+asoeaYvuekuuaXtuinpuWPkeeahGluaXTmlrnms5UNCiAgICAgKiBAcGFyYW0geyp9IGRhdGEg5Lyg5YWlZGF0YQ0KICAgICAqIEByZXR1cm4geyp9DQogICAgICovDQogICAgaW5pdERhdGEoZGF0YSkgew0KICAgICAgY29uc3Qgb3JnRm9ybSA9IHRoaXMuJG9wdGlvbnMuZGF0YSgpLmZvcm1EYXRhOw0KICAgICAgdGhpcy5mb3JtRGF0YSA9IHsgLi4ub3JnRm9ybSwgLi4uZGF0YSB9Ow0KICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gew0KICAgICAgICB0aGlzLiRyZWZzLmZvcm0uY2xlYXJWYWxpZGF0ZSgpOw0KICAgICAgfSk7DQogICAgfSwNCiAgICAvLyDooajljZXmlbDmja7liqDovb0NCiAgICBnZXRGb3JtRGF0YSgpIHsNCiAgICAgIGlmICh0aGlzLmRhdGFWaWV3LmlkKSB7DQogICAgICAgIGZvcm0uZ2V0RW50RGF0YSh0aGlzLmRhdGFWaWV3LmlkLCAocmVzcCkgPT4gew0KICAgICAgICAgIHJlc3AuZGF0YS5lbnRzLmZvckVhY2goKGVudERhdGEsIGluZGV4KSA9PiB7DQogICAgICAgICAgICBpZiAoZW50RGF0YS5pc0V4dGVybmFsID09ICcxJyAmJiBpbmRleCA9PSAwKSB7DQogICAgICAgICAgICAgIGVudERhdGEuc2hvdyA9ICfkuLvlrp7kvZMt5aSWJzsNCiAgICAgICAgICAgIH0gZWxzZSBpZiAoZW50RGF0YS5pc0V4dGVybmFsID09ICcxJykgew0KICAgICAgICAgICAgICBlbnREYXRhLnNob3cgPSAn5a2Q5a6e5L2TLeWklic7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoaW5kZXggPT09IDApIHsNCiAgICAgICAgICAgICAgZW50RGF0YS5pc0NoZWNrID0gdHJ1ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmIChlbnREYXRhLmNoaWxkcmVuKSB7DQogICAgICAgICAgICAgIGVudERhdGEuY2hpbGRyZW4uZm9yRWFjaCgodikgPT4gew0KICAgICAgICAgICAgICAgIGlmICh2LmlzRXh0ZXJuYWwgPT0gJzEnKSB7DQogICAgICAgICAgICAgICAgICB2LnNob3cgPSAn5a2Z5a6e5L2TLeWklic7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGZvciAobGV0IHEgPSAwOyBxIDwgZW50RGF0YS5hdHRyaWJ1dGVMaXN0Lmxlbmd0aDsgcSsrKSB7DQogICAgICAgICAgICAgIGlmIChlbnREYXRhLmF0dHJpYnV0ZUxpc3RbcV0pIHsNCiAgICAgICAgICAgICAgICBpZiAoZW50RGF0YS5hdHRyaWJ1dGVMaXN0W3FdLmlzUmVxdWlyZWQgPT0gMCkgew0KICAgICAgICAgICAgICAgICAgZW50RGF0YS5hdHRyaWJ1dGVMaXN0W3FdLmlzUmVxdWlyZWQgPSAnMCc7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgIGVudERhdGEuYXR0cmlidXRlTGlzdFtxXS5pc1JlcXVpcmVkID0gJzEnOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVudERhdGEuYXR0cmlidXRlTGlzdC5sZW5ndGggLSAxIC0gcTsgaSsrKSB7DQogICAgICAgICAgICAgICAgaWYgKGVudERhdGEuYXR0cmlidXRlTGlzdFtpXS5pbmRleCA+IGVudERhdGEuYXR0cmlidXRlTGlzdFtpICsgMV0uaW5kZXgpIHsNCiAgICAgICAgICAgICAgICAgIGNvbnN0IHRlbXAgPSBlbnREYXRhLmF0dHJpYnV0ZUxpc3RbaV07DQogICAgICAgICAgICAgICAgICBlbnREYXRhLmF0dHJpYnV0ZUxpc3RbaV0gPSBlbnREYXRhLmF0dHJpYnV0ZUxpc3RbaSArIDFdOw0KICAgICAgICAgICAgICAgICAgZW50RGF0YS5hdHRyaWJ1dGVMaXN0W2kgKyAxXSA9IHRlbXA7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgfSk7DQogICAgICAgICAgdGhpcy5mb3JtRGF0YSA9IHJlc3AuZGF0YTsNCiAgICAgICAgfSk7DQogICAgICB9DQogICAgfSwNCiAgICAvLyDmlrDlop7lrp7kvZMNCiAgICBhZGRFbnRSb3dzKCkgew0KICAgICAgY29uc3QgdGhpc18gPSB0aGlzOw0KICAgICAgdXRpbA0KICAgICAgICAudmFsaWRhdGVGb3JtKHRoaXNfLCAnZm9ybScpDQogICAgICAgIC50aGVuKCgpID0+IHsNCiAgICAgICAgICBpZiAodGhpc18uZm9ybURhdGEuZW50cy5sZW5ndGggPiAwKSB7DQogICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXNfLmZvcm1EYXRhLmVudHMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgICAgaWYgKHRoaXNfLmNoZWNrR3JhbmRTb25FbnRzKGkpKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICB0aGlzXy5jb3VudEF0dHJMZW5ndGggPSAwOw0KICAgICAgICAgICAgaWYgKCF0aGlzXy5jaGVja0VudEZ1bmModGhpc18uZm9ybURhdGEuZW50cykpIHsNCiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgdGhpc18uZXh0TGVuID0gMDsNCiAgICAgICAgICB9DQogICAgICAgICAgdGhpc18uZm9ybURhdGEuZW50cy5mb3JFYWNoKChkYXRhKSA9PiB7DQogICAgICAgICAgICBkYXRhLmlzQ2hlY2sgPSBmYWxzZTsNCiAgICAgICAgICB9KTsNCiAgICAgICAgICB0aGlzXy5lbnRJbmRleCA9ICsrdGhpc18uZW50SW5kZXg7DQogICAgICAgICAgbGV0IHJvdyA9IHsNCiAgICAgICAgICAgIGRlc2M6ICcnLA0KICAgICAgICAgICAgaW5kZXg6IHRoaXNfLmVudEluZGV4LA0KICAgICAgICAgICAgbmFtZTogJycsDQogICAgICAgICAgICBwYWNrYWdlSWQ6ICcnLA0KICAgICAgICAgICAgc2hvdzogJ+WtkOWunuS9kycsDQogICAgICAgICAgICBjaGlsZHJlbjogW10sDQogICAgICAgICAgICByZWxhdGlvbjogJ29uZXRvbWFueScsDQogICAgICAgICAgICBhdHRyaWJ1dGVMaXN0OiBbXSwNCiAgICAgICAgICAgIHN0YXR1czogJycsDQogICAgICAgICAgICBpc0NoZWNrOiB0cnVlLA0KICAgICAgICAgIH07DQogICAgICAgICAgaWYgKHRoaXNfLmZvcm1EYXRhLmVudHMubGVuZ3RoID09IDApIHsNCiAgICAgICAgICAgIHRoaXNfLmVudEluZGV4ID0gMDsNCiAgICAgICAgICAgIHJvdyA9IHsNCiAgICAgICAgICAgICAgZGVzYzogJycsDQogICAgICAgICAgICAgIGluZGV4OiAwLA0KICAgICAgICAgICAgICBuYW1lOiAnJywNCiAgICAgICAgICAgICAgcGFja2FnZUlkOiAnJywNCiAgICAgICAgICAgICAgc2hvdzogJ+S4u+WunuS9kycsDQogICAgICAgICAgICAgIHJlbGF0aW9uOiAnbWFpbicsDQogICAgICAgICAgICAgIHN0YXR1czogJycsDQogICAgICAgICAgICAgIGF0dHJpYnV0ZUxpc3Q6IFtdLA0KICAgICAgICAgICAgICBpc0NoZWNrOiB0cnVlLA0KICAgICAgICAgICAgfTsNCiAgICAgICAgICB9DQogICAgICAgICAgaWYgKHRoaXNfLmZvcm1EYXRhLmVudHMubGVuZ3RoID4gMCAmJiB0aGlzXy5jaGVja0dyYW5kU29uRW50cyh0aGlzXy5mb3JtRGF0YS5lbnRzLmxlbmd0aCAtIDEpKSB7DQogICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgfQ0KICAgICAgICAgIHRoaXNfLmZvcm1EYXRhLmVudHMucHVzaChyb3cpOw0KICAgICAgICB9KQ0KICAgICAgICAuY2F0Y2goKHJlYXNvbikgPT4gew0KICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShyZWFzb24pKSB7DQogICAgICAgICAgICBjb25zb2xlLmxvZyhyZWFzb24pOw0KICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgIH0NCiAgICAgICAgICBsZXQgcnVsZSA9IHJlYXNvbi5tYXAoKHYpID0+IHsNCiAgICAgICAgICAgIHJldHVybiB2LnJ1bGU7DQogICAgICAgICAgfSk7DQogICAgICAgICAgcnVsZSA9IHJ1bGUudW5pcXVlKCk7DQogICAgICAgICAgaWYgKHJ1bGUuaW5jbHVkZXMoJ3JlcXVpcmVkJykpIHsNCiAgICAgICAgICAgIGNvbnN0IG4gPSB0aGlzLiRtZXNzYWdlLndhcm5pbmcoJ+ivt+WwhuS/oeaBr+Whq+WGmeWujOaVtCcpOw0KICAgICAgICAgICAgdGhpcy5tZXNzYWdlQ2F0aW9uc1tuLmlkXSA9IG47DQogICAgICAgICAgfSBlbHNlIGlmIChydWxlLmluY2x1ZGVzKCdyZWdleCcpKSB7DQogICAgICAgICAgICB0aGlzLiRtZXNzYWdlLndhcm5pbmcoJ+WPquiDvei+k+WFpeWtl+avjeOAgeaVsOWtl+OAgeS4i+WIkue6v++8jOS4lOS7peWtl+avjeW8gOWktCcpOw0KICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgfSwNCiAgICAvLyDliKDpmaTlrp7kvZMNCiAgICBkZWxldGVFbnRSb3dzKGluZGV4KSB7DQogICAgICB0aGlzLmVudEluZGV4ID0gaW5kZXg7DQogICAgICBpZiAoIXRoaXMuZm9ybURhdGEuZW50c1t0aGlzLmVudEluZGV4XS5hdHRyaWJ1dGVMaXN0KSB7DQogICAgICAgIHRoaXMuZm9ybURhdGEuZW50c1t0aGlzLmVudEluZGV4XS5hdHRyaWJ1dGVMaXN0ID0gW107DQogICAgICB9DQogICAgICB0aGlzLmZvcm1EYXRhLmVudHMuc3BsaWNlKGluZGV4LCAxKTsNCiAgICAgIGlmICh0aGlzLmVudEluZGV4ID49IHRoaXMuZm9ybURhdGEuZW50cy5sZW5ndGgpIHsNCiAgICAgICAgdGhpcy5lbnRJbmRleCA9IHRoaXMuZm9ybURhdGEuZW50cy5sZW5ndGggLSAxOw0KICAgICAgICB0aGlzLmdldEVudHNCeUluZGV4KHRoaXMuZW50SW5kZXgpOw0KICAgICAgfQ0KICAgICAgaWYgKHRoaXMuZm9ybURhdGEuZW50cy5sZW5ndGggPiAwKSB7DQogICAgICAgIGlmIChpbmRleCA9PSAwKSB7DQogICAgICAgICAgaWYgKHRoaXMuZm9ybURhdGEuZW50c1swXS5pc0V4dGVybmFsICE9ICcxJykgew0KICAgICAgICAgICAgdGhpcy5mb3JtRGF0YS5lbnRzWzBdLnNob3cgPSAn5Li75a6e5L2TJzsNCiAgICAgICAgICAgIHRoaXMuZm9ybURhdGEuZW50c1swXS5yZWxhdGlvbiA9ICdtYWluJzsNCiAgICAgICAgICAgIHRoaXMuZm9ybURhdGEuZW50c1swXS5jaGlsZHJlbiA9IFtdOw0KICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICB0aGlzLmZvcm1EYXRhLmVudHNbMF0uc2hvdyA9ICfkuLvlrp7kvZMt5aSWJzsNCiAgICAgICAgICAgIHRoaXMuZm9ybURhdGEuZW50c1swXS5yZWxhdGlvbiA9ICdtYWluJzsNCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9LA0KICAgIGNoZWNrR3JhbmRTb25FbnRzKGluZGV4LCBwYXJhbSkgew0KICAgICAgaWYgKCh0aGlzLmZvcm1EYXRhLmVudHNbaW5kZXhdLmNoaWxkcmVuICYmIHRoaXMuZm9ybURhdGEuZW50c1tpbmRleF0uY2hpbGRyZW4ubGVuZ3RoID09IDApIHx8ICF0aGlzLmZvcm1EYXRhLmVudHNbaW5kZXhdLmNoaWxkcmVuKSB7DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgIH0NCiAgICAgIGNvbnN0IGNoaWxkID0gdGhpcy5mb3JtRGF0YS5lbnRzW2luZGV4XS5jaGlsZHJlbjsNCiAgICAgIGNvbnN0IGxlbiA9IHRoaXMuZm9ybURhdGEuZW50c1tpbmRleF0uY2hpbGRyZW4ubGVuZ3RoIC0gMTsNCiAgICAgIGNoaWxkW2xlbl0uY29tbWVudCA9IGNoaWxkW2xlbl0uZGVzYzsNCiAgICAgIGNoaWxkW2xlbl0uZGVzY3JpcHRpb24gPSBjaGlsZFtsZW5dLmRlc2M7DQogICAgICBpZiAoIXBhcmFtICYmIGNoaWxkW2xlbl0uYXR0cmlidXRlTGlzdC5sZW5ndGggPT0gMCkgew0KICAgICAgICB0aGlzLiRtZXNzYWdlKHsgbWVzc2FnZTogJ+ivt+a3u+WKoOWtl+auteS/oeaBrycsIHR5cGU6ICd3YXJuaW5nJyB9KTsNCiAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICB9DQogICAgfSwNCiAgICBhZGRHcmFuZFNvbkVudChpbmRleCkgew0KICAgICAgdGhpcy5nZXRFbnRzQnlJbmRleChpbmRleCk7DQogICAgICBjb25zdCByb3cgPSB7DQogICAgICAgIGRlc2M6ICcnLA0KICAgICAgICBpbmRleDogdGhpcy5lbnRJbmRleCwNCiAgICAgICAgbmFtZTogJycsDQogICAgICAgIHBhY2thZ2VJZDogJycsDQogICAgICAgIHNob3c6ICflrZnlrp7kvZMnLA0KICAgICAgICByZWxhdGlvbjogJ29uZXRvbWFueScsDQogICAgICAgIGF0dHJpYnV0ZUxpc3Q6IFtdLA0KICAgICAgICBzdGF0dXM6ICcnLA0KICAgICAgICBpc0NoZWNrOiB0cnVlLA0KICAgICAgfTsNCiAgICAgIGlmICghdGhpcy5mb3JtRGF0YS5lbnRzW2luZGV4XS5jaGlsZHJlbikgew0KICAgICAgICB0aGlzLiRzZXQodGhpcy5mb3JtRGF0YS5lbnRzW2luZGV4XSwgJ2NoaWxkcmVuJywgW10pOw0KICAgICAgfQ0KICAgICAgaWYgKHRoaXMuY2hlY2tHcmFuZFNvbkVudHMoaW5kZXgpKSB7DQogICAgICAgIHJldHVybjsNCiAgICAgIH0NCiAgICAgIHRoaXMuZm9ybURhdGEuZW50c1tpbmRleF0uY2hpbGRyZW4ucHVzaChyb3cpOw0KICAgICAgdGhpcy5ncmFuZFNvbkluZGV4ID0gdGhpcy5mb3JtRGF0YS5lbnRzW2luZGV4XS5jaGlsZHJlbi5sZW5ndGggLSAxOw0KICAgICAgdGhpcy5vcGVuR3JhbmRTb25BdHRyID0gdHJ1ZTsNCiAgICAgIHRoaXMuYXR0clRhYmxlRGF0YSA9IHRoaXMuZm9ybURhdGEuZW50c1tpbmRleF0uY2hpbGRyZW5bdGhpcy5ncmFuZFNvbkluZGV4XS5hdHRyaWJ1dGVMaXN0Ow0KICAgIH0sDQogICAgZ2V0RW50c0J5SW5kZXgoaW5kZXgsIHBhcmFtKSB7DQogICAgICAvLyDlpoLmnpzmmK/liKDpmaToh6rliqjpgInmi6nkuIrkuIDkuKrlrp7kvZMNCiAgICAgIGlmIChwYXJhbSA9PSAnZGVsZXRlJykgew0KICAgICAgICBpZiAodGhpcy5mb3JtRGF0YS5lbnRzW2luZGV4XSkgew0KICAgICAgICAgIHRoaXMuZW50SW5kZXggPSBpbmRleDsNCiAgICAgICAgICB0aGlzLmZvcm1EYXRhLmVudHMuZm9yRWFjaCgoZGF0YSkgPT4gew0KICAgICAgICAgICAgZGF0YS5pc0NoZWNrID0gZmFsc2U7DQogICAgICAgICAgfSk7DQogICAgICAgICAgdGhpcy5mb3JtRGF0YS5lbnRzW2luZGV4XS5pc0NoZWNrID0gdHJ1ZTsNCiAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgfQ0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgY29uc3QgdGhpc18gPSB0aGlzOw0KICAgICAgICB1dGlsDQogICAgICAgICAgLnZhbGlkYXRlRm9ybSh0aGlzLCAnZm9ybScpDQogICAgICAgICAgLnRoZW4oKCkgPT4gew0KICAgICAgICAgICAgdGhpcy5vcGVuR3JhbmRTb25BdHRyID0gZmFsc2U7DQogICAgICAgICAgICBpZiAocGFyYW0gPT0gJ2dyYW5kU29uRW50Jykgew0KICAgICAgICAgICAgICB0aGlzLm9wZW5HcmFuZFNvbkF0dHIgPSB0cnVlOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKHRoaXMuZm9ybURhdGEuZW50c1tpbmRleF0pIHsNCiAgICAgICAgICAgICAgdGhpcy5lbnRJbmRleCA9IGluZGV4Ow0KICAgICAgICAgICAgICB0aGlzLmZvcm1EYXRhLmVudHMuZm9yRWFjaCgoZGF0YSkgPT4gew0KICAgICAgICAgICAgICAgIGRhdGEuaXNDaGVjayA9IGZhbHNlOw0KICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgdGhpcy5mb3JtRGF0YS5lbnRzW2luZGV4XS5pc0NoZWNrID0gdHJ1ZTsNCiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgICAgICB9DQogICAgICAgICAgfSkNCiAgICAgICAgICAuY2F0Y2goKHJlYXNvbikgPT4gew0KICAgICAgICAgICAgbGV0IHJ1bGUgPSByZWFzb24ubWFwKCh2KSA9PiB7DQogICAgICAgICAgICAgIHJldHVybiB2LnJ1bGU7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIHJ1bGUgPSBydWxlLnVuaXF1ZSgpOw0KICAgICAgICAgICAgdGhpc18uY2xvc2VBbGxOb3RpZmljYXRpb24oKTsNCiAgICAgICAgICAgIGlmIChydWxlLmluY2x1ZGVzKCdyZXF1aXJlZCcpKSB7DQogICAgICAgICAgICAgIGNvbnN0IG4gPSB0aGlzXy4kbWVzc2FnZS53YXJuaW5nKCfor7flsIbkv6Hmga/loavlhpnlrozmlbQnKTsNCiAgICAgICAgICAgICAgdGhpc18ubWVzc2FnZUNhdGlvbnNbbi5pZF0gPSBuOw0KICAgICAgICAgICAgfSBlbHNlIGlmIChydWxlLmluY2x1ZGVzKCdyZWdleCcpKSB7DQogICAgICAgICAgICAgIGNvbnN0IG4gPSB0aGlzXy4kbWVzc2FnZS53YXJuaW5nKCflj6rog73ovpPlhaXlrZfmr43jgIHmlbDlrZfjgIHkuIvliJLnur/vvIzkuJTku6XlrZfmr43lvIDlpLQnKTsNCiAgICAgICAgICAgICAgdGhpc18ubWVzc2FnZUNhdGlvbnNbbi5pZF0gPSBuOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0pOw0KICAgICAgfQ0KICAgIH0sDQogICAgY2hpbmVzZUZvcm1hdChpZCwgbGlzdCwgcGFyYW0sIGluZGV4LCB2KSB7DQogICAgICBjb25zdCBfdGhpcyA9IHRoaXM7DQogICAgICBjb25zdCBkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOw0KICAgICAgLy8gZGlzYWJsZWQg5oiW6ICFIHJlYWRvbmx5IOaXtiDkuI3pnIDopoHor7fmsYINCiAgICAgIGxldCB0aW1lciA9IG51bGw7DQogICAgICBpZiAoZCA9PT0gbnVsbCB8fCBkLl9fdnVlX18uZGlzYWJsZWQgfHwgZC5fX3Z1ZV9fLnJlYWRvbmx5IHx8ICF2KSByZXR1cm47DQogICAgICBpZiAodGltZXIpIHsNCiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTsNCiAgICAgIH0NCiAgICAgIHRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7DQogICAgICAgIHJlcQ0KICAgICAgICAgIC5yZXF1ZXN0KHsNCiAgICAgICAgICAgIHVybDogYCR7d2luZG93LmNvbnRleHQudWN9L2Jhc2UvdG9vbHMvdjEvZ2V0UGlueWluYCwNCiAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsDQogICAgICAgICAgICBwYXJhbXM6IHsgY2hpbmVzZTogdiwgdHlwZTogMCB9LA0KICAgICAgICAgIH0pDQogICAgICAgICAgLnRoZW4oKHJlcykgPT4gew0KICAgICAgICAgICAgaWYgKHJlcy5kYXRhLnN0YXRlKSB7DQogICAgICAgICAgICAgIGxpc3RbaW5kZXhdW3BhcmFtXSA9IHJlcy5kYXRhLnZhbHVlOw0KICAgICAgICAgICAgICBtYWluLiRuZXh0VGljaygoKSA9PiB7DQogICAgICAgICAgICAgICAgbWFpbi4kdmFsaWRhdG9yLnZhbGlkYXRlKCk7DQogICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0pOw0KICAgICAgfSwgNTAwKTsNCiAgICB9LA0KICAgIGVudEJsdXIoKSB7DQogICAgICBpZiAoDQogICAgICAgIHRoaXMub3BlbkdyYW5kU29uQXR0ciAmJg0KICAgICAgICB0aGlzLmZvcm1EYXRhLmVudHNbdGhpcy5lbnRJbmRleF0uY2hpbGRyZW5bdGhpcy5ncmFuZFNvbkluZGV4XS5hdHRyaWJ1dGVMaXN0ICYmDQogICAgICAgIHRoaXMuZm9ybURhdGEuZW50c1t0aGlzLmVudEluZGV4XS5jaGlsZHJlblt0aGlzLmdyYW5kU29uSW5kZXhdLmF0dHJpYnV0ZUxpc3QubGVuZ3RoID4gMA0KICAgICAgKSB7DQogICAgICAgIHRoaXMuZm9ybURhdGEuZW50c1t0aGlzLmVudEluZGV4XS5jaGlsZHJlblt0aGlzLmdyYW5kU29uSW5kZXhdLmF0dHJpYnV0ZUxpc3QuZm9yRWFjaCgoaXRlbSkgPT4gew0KICAgICAgICAgIGl0ZW0uZGVzYyA9IGl0ZW0uY29tbWVudDsNCiAgICAgICAgfSk7DQogICAgICB9DQogICAgICBpZiAodHlwZW9mIHRoaXMuZW50Qmx1ckRlc2NSZXBlYXRJbmRleCA9PT0gJ251bWJlcicpIHsNCiAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBjaGFuZ2VFbnRzRGVzYyR7dGhpcy5lbnRCbHVyRGVzY1JlcGVhdEluZGV4fWApKSB7DQogICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYGNoYW5nZUVudHNEZXNjJHt0aGlzLmVudEJsdXJEZXNjUmVwZWF0SW5kZXh9YCkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2RpdicpWzBdLmZpcnN0RWxlbWVudENoaWxkLnN0eWxlLmJvcmRlciA9ICcnOw0KICAgICAgICB9DQogICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgY2hhbmdlR3JhbmRTb25FbnRzRGVzYyR7dGhpcy5lbnRCbHVyRGVzY1JlcGVhdEluZGV4fWApKSB7DQogICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYGNoYW5nZUdyYW5kU29uRW50c0Rlc2Mke3RoaXMuZW50Qmx1ckRlc2NSZXBlYXRJbmRleH1gKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZGl2JylbMF0uZmlyc3RFbGVtZW50Q2hpbGQuc3R5bGUuYm9yZGVyID0gJyc7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIGlmICh0eXBlb2YgdGhpcy5lbnRCbHVyTmFtZVJlcGVhdEluZGV4ID09PSAnbnVtYmVyJykgew0KICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYGVudE5hbWUke3RoaXMuZW50Qmx1ck5hbWVSZXBlYXRJbmRleH1gKSkgew0KICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBlbnROYW1lJHt0aGlzLmVudEJsdXJOYW1lUmVwZWF0SW5kZXh9YCkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2RpdicpWzBdLmZpcnN0RWxlbWVudENoaWxkLnN0eWxlLmJvcmRlciA9ICcnOw0KICAgICAgICB9DQogICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgY2hhbmdlR3JhbmRTb25FbnRzTmFtZSR7dGhpcy5lbnRCbHVyTmFtZVJlcGVhdEluZGV4fWApKSB7DQogICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYGNoYW5nZUdyYW5kU29uRW50c05hbWUke3RoaXMuZW50Qmx1ck5hbWVSZXBlYXRJbmRleH1gKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZGl2JylbMF0uZmlyc3RFbGVtZW50Q2hpbGQuc3R5bGUuYm9yZGVyID0gJyc7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIGlmICh0aGlzLmF0dHJDb21tZW50RWxlbWVudElkICYmIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuYXR0ckNvbW1lbnRFbGVtZW50SWQpKSB7DQogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuYXR0ckNvbW1lbnRFbGVtZW50SWQpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdkaXYnKVswXS5maXJzdEVsZW1lbnRDaGlsZC5zdHlsZS5ib3JkZXIgPSAnJzsNCiAgICAgIH0NCiAgICAgIGlmICh0eXBlb2YgdGhpcy5jaGVja0F0dHJOYW1lSW5kZXggPT09ICdudW1iZXInKSB7DQogICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHt0aGlzLmZvcm1EYXRhLmVudHNbdGhpcy5lbnRBdHRySW5kZXhdLmF0dHJpYnV0ZUxpc3RbdGhpcy5jaGVja0F0dHJOYW1lSW5kZXhdLm5hbWV9YXR0ck5hbWUke3RoaXMuY2hlY2tBdHRyTmFtZUluZGV4fWApKSB7DQogICAgICAgICAgZG9jdW1lbnQNCiAgICAgICAgICAgIC5nZXRFbGVtZW50QnlJZChgJHt0aGlzLmZvcm1EYXRhLmVudHNbdGhpcy5lbnRBdHRySW5kZXhdLmF0dHJpYnV0ZUxpc3RbdGhpcy5jaGVja0F0dHJOYW1lSW5kZXhdLm5hbWV9YXR0ck5hbWUke3RoaXMuY2hlY2tBdHRyTmFtZUluZGV4fWApDQogICAgICAgICAgICAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2RpdicpWzBdLmZpcnN0RWxlbWVudENoaWxkLnN0eWxlLmJvcmRlciA9ICcnOw0KICAgICAgICB9DQogICAgICAgIGNvbnN0IHNvbkF0dHIgPSB0aGlzLmZvcm1EYXRhLmVudHNbdGhpcy5zb25BdHRySW5kZXhdOw0KICAgICAgICBpZiAoc29uQXR0cikgew0KICAgICAgICAgIGRvY3VtZW50DQogICAgICAgICAgICAuZ2V0RWxlbWVudEJ5SWQoYCR7c29uQXR0ci5jaGlsZHJlblt0aGlzLmVudEF0dHJJbmRleF0uYXR0cmlidXRlTGlzdFt0aGlzLmNoZWNrQXR0ck5hbWVJbmRleF0ubmFtZX1hdHRyTmFtZSR7dGhpcy5jaGVja0F0dHJOYW1lSW5kZXh9YCkNCiAgICAgICAgICAgIC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZGl2JylbMF0uZmlyc3RFbGVtZW50Q2hpbGQuc3R5bGUuYm9yZGVyID0gJyc7DQogICAgICAgIH0NCiAgICAgICAgdGhpcy5jaGVja0F0dHJOYW1lSW5kZXggPSBudWxsOw0KICAgICAgfQ0KICAgICAgaWYgKHRoaXMuZGVmYXVsdFZhbHVlVHlwZSkgew0KICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShgZGVmYXVsdFZhbHVlJHt0aGlzLmRlZmF1bHRWYWx1ZUluZGV4fWApWzBdLnN0eWxlLmJvcmRlciA9ICcnOw0KICAgICAgICB0aGlzLmRlZmF1bHRWYWx1ZVR5cGUgPSBudWxsOw0KICAgICAgfQ0KICAgICAgaWYgKHRoaXMuYXR0ckxlbkVsZW1lbnRJZCAmJiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmF0dHJMZW5FbGVtZW50SWQpKSB7DQogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuYXR0ckxlbkVsZW1lbnRJZCkuc3R5bGUuYm9yZGVyID0gJyc7DQogICAgICB9DQogICAgICBpZiAodGhpcy5hdHRyRGVjaW1hRWxlbWVudElkICYmIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuYXR0ckRlY2ltYUVsZW1lbnRJZCkpIHsNCiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5hdHRyRGVjaW1hRWxlbWVudElkKS5zdHlsZS5ib3JkZXIgPSAnJzsNCiAgICAgIH0NCiAgICB9LA0KICAgIC8vIOWFs+mXreaJgOacieagoemqjOmAmuefpQ0KICAgIGNsb3NlQWxsTm90aWZpY2F0aW9uKCkgew0KICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5tZXNzYWdlQ2F0aW9ucykgew0KICAgICAgICB0aGlzLm1lc3NhZ2VDYXRpb25zW2tleV0uY2xvc2UoKTsNCiAgICAgICAgZGVsZXRlIHRoaXMubWVzc2FnZUNhdGlvbnNba2V5XTsNCiAgICAgIH0NCiAgICB9LA0KICAgIGdldEdyYW5kU29uRW50c0J5SW5kZXgoaSwgaW5kZXgpIHsNCiAgICAgIHRoaXMuZ2V0RW50c0J5SW5kZXgoaW5kZXgsICdncmFuZFNvbkVudCcpOw0KICAgICAgdGhpcy5ncmFuZFNvbkluZGV4ID0gaTsNCiAgICAgIGlmICh0aGlzLmZvcm1EYXRhLmVudHNbdGhpcy5lbnRJbmRleF0uY2hpbGRyZW4gJiYgdGhpcy5mb3JtRGF0YS5lbnRzW3RoaXMuZW50SW5kZXhdLmNoaWxkcmVuW2ldKSB7DQogICAgICAgIHRoaXMuYXR0clRhYmxlRGF0YSA9IHRoaXMuZm9ybURhdGEuZW50c1t0aGlzLmVudEluZGV4XS5jaGlsZHJlbltpXS5hdHRyaWJ1dGVMaXN0Ow0KICAgICAgfQ0KICAgIH0sDQogICAgZGVsZXRlR3JhbmRTb25FbnRSb3dzKGksIGluZGV4KSB7DQogICAgICB0aGlzLmdldEVudHNCeUluZGV4KGluZGV4LCAnbm9DaGVjaycpOw0KICAgICAgdGhpcy5ncmFuZFNvbkluZGV4ID0gaTsNCiAgICAgIGlmICghdGhpcy5mb3JtRGF0YS5lbnRzW3RoaXMuZW50SW5kZXhdLmF0dHJpYnV0ZUxpc3QpIHsNCiAgICAgICAgdGhpcy5mb3JtRGF0YS5lbnRzW3RoaXMuZW50SW5kZXhdLmNoaWxkcmVuW2ldLmF0dHJpYnV0ZUxpc3QgPSBbXTsNCiAgICAgIH0NCiAgICAgIHRoaXMuZm9ybURhdGEuZW50c1t0aGlzLmVudEluZGV4XS5jaGlsZHJlbi5zcGxpY2UoaSwgMSk7DQogICAgICB0aGlzLm9wZW5HcmFuZFNvbkF0dHIgPSBmYWxzZTsNCiAgICAgIHRoaXMuYXR0clRhYmxlRGF0YSA9IHRoaXMuZm9ybURhdGEuZW50c1t0aGlzLmVudEluZGV4XS5hdHRyaWJ1dGVMaXN0Ow0KICAgICAgaWYgKHRoaXMuZm9ybURhdGEuZW50c1t0aGlzLmVudEluZGV4XS5jaGlsZHJlbltpIC0gMV0gJiYgdGhpcy5mb3JtRGF0YS5lbnRzW3RoaXMuZW50SW5kZXhdLmNoaWxkcmVuW2kgLSAxXS5hdHRyaWJ1dGVMaXN0Lmxlbmd0aCA+IDApIHsNCiAgICAgICAgdGhpcy5hdHRyVGFibGVEYXRhID0gdGhpcy5mb3JtRGF0YS5lbnRzW3RoaXMuZW50SW5kZXhdLmNoaWxkcmVuW2kgLSAxXS5hdHRyaWJ1dGVMaXN0Ow0KICAgICAgfQ0KICAgIH0sDQogICAgY2hlY2tFbnRGdW5jKGVudCwgc29uSW5kZXgpIHsNCiAgICAgIGNvbnN0IGVudFZhbCA9IHt9Ow0KICAgICAgaWYgKGVudC5sZW5ndGggPCAxKSB7DQogICAgICAgIHRoaXMuJG1lc3NhZ2UoeyB0eXBlOiAnd2FybmluZycsIG1lc3NhZ2U6ICfor7fmt7vliqDlrp7kvZPlr7nosaHvvIEnIH0pOw0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICB9DQogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVudC5sZW5ndGg7IGkrKykgew0KICAgICAgICBpZiAoZW50W2ldLnNob3cgIT0gJ+WtmeWunuS9kycpIHsNCiAgICAgICAgICBlbnRbaV0uZGVzY3JpcHRpb24gPSBlbnRbaV0uY29tbWVudDsNCiAgICAgICAgICBlbnRbaV0uZGVzYyA9IGVudFtpXS5jb21tZW50Ow0KICAgICAgICB9DQogICAgICAgIGlmICghZW50VmFsW2BkZXNjJHtlbnRbaV0uZGVzY31gXSkgew0KICAgICAgICAgIGVudFZhbFtgZGVzYyR7ZW50W2ldLmRlc2N9YF0gPSBlbnRbaV0uZGVzYzsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICB0aGlzLmVudEJsdXJEZXNjUmVwZWF0SW5kZXggPSBpOw0KICAgICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgY2hhbmdlRW50c0Rlc2Mke2l9YCkgJiYgZW50W2ldLnNob3cgPT0gJ+WtkOWunuS9kycpIHsNCiAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uoew0KICAgICAgICAgICAgICBtZXNzYWdlOiBg5bey5a2Y5Zyo5a2Q5a6e5L2T5o+P6L+w5Li644CQJHtlbnRbaV0uZGVzY33jgJHnmoRib+WunuS9k2AsDQogICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJywNCiAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYGNoYW5nZUVudHNEZXNjJHtpfWApLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdkaXYnKVswXS5sYXN0RWxlbWVudENoaWxkLmZvY3VzKCk7DQogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgY2hhbmdlRW50c0Rlc2Mke2l9YCkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2RpdicpWzBdLmZpcnN0RWxlbWVudENoaWxkLnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgcmVkJzsNCiAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7DQogICAgICAgICAgICAgIG1lc3NhZ2U6IGDlt7LlrZjlnKjlrZnlrp7kvZPmj4/ov7DkuLrjgJAke2VudFtpXS5kZXNjfeOAkeeahGJv5a6e5L2TYCwNCiAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLA0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgY2hhbmdlR3JhbmRTb25FbnRzRGVzYyR7aX1gKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZGl2JylbMF0ubGFzdEVsZW1lbnRDaGlsZC5mb2N1cygpOw0KICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYGNoYW5nZUdyYW5kU29uRW50c0Rlc2Mke2l9YCkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2RpdicpWzBdLmZpcnN0RWxlbWVudENoaWxkLnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgcmVkJzsNCiAgICAgICAgICB9DQogICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQogICAgICAgIGlmICghZW50VmFsW2BuYW1lJHtlbnRbaV0ubmFtZX1gXSkgew0KICAgICAgICAgIGVudFZhbFtgbmFtZSR7ZW50W2ldLm5hbWV9YF0gPSBlbnRbaV0ubmFtZTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICB0aGlzLmVudEJsdXJOYW1lUmVwZWF0SW5kZXggPSBpOw0KICAgICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgZW50TmFtZSR7aX1gKSAmJiBlbnRbaV0uc2hvdyA9PSAn5a2Q5a6e5L2TJykgew0KICAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7DQogICAgICAgICAgICAgIG1lc3NhZ2U6IGDlt7LlrZjlnKjlrZDlrp7kvZPlkI3np7DkuLrjgJAke2VudFtpXS5uYW1lfeOAkeeahGJv5a6e5L2TYCwNCiAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLA0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgZW50TmFtZSR7aX1gKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZGl2JylbMF0ubGFzdEVsZW1lbnRDaGlsZC5mb2N1cygpOw0KICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYGVudE5hbWUke2l9YCkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2RpdicpWzBdLmZpcnN0RWxlbWVudENoaWxkLnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgcmVkJzsNCiAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7DQogICAgICAgICAgICAgIG1lc3NhZ2U6IGDlt7LlrZjlnKjlrZnlrp7kvZPlkI3np7DkuLrjgJAke2VudFtpXS5uYW1lfeOAkeeahGJv5a6e5L2TYCwNCiAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLA0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgY2hhbmdlR3JhbmRTb25FbnRzTmFtZSR7aX1gKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZGl2JylbMF0ubGFzdEVsZW1lbnRDaGlsZC5mb2N1cygpOw0KICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYGNoYW5nZUdyYW5kU29uRW50c05hbWUke2l9YCkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2RpdicpWzBdLmZpcnN0RWxlbWVudENoaWxkLnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgcmVkJzsNCiAgICAgICAgICB9DQogICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQogICAgICAgIGlmIChlbnRbaV0uaXNFeHRlcm5hbCA9PSAnMScpIHsNCiAgICAgICAgICArK3RoaXMuZXh0TGVuOw0KICAgICAgICAgIGlmIChpICE9IDAgJiYgdGhpcy5leHRMZW4gPiAxICYmICFlbnRbaV0uZmspIHsNCiAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uoew0KICAgICAgICAgICAgICBtZXNzYWdlOiBg6K+357uZJHtlbnRbaV0uY29tbWVudH3lrp7kvZPmt7vliqDlpJbplK7vvIFgLA0KICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsDQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgaWYgKGVudFtpXS5hdHRyaWJ1dGVMaXN0Lmxlbmd0aCA+IDApIHsNCiAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tBdHRyRnVuYyhlbnRbaV0sIGksIHNvbkluZGV4KSkgew0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgIH0NCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICB0aGlzLiRtZXNzYWdlKHsgbWVzc2FnZTogJ+ivt+a3u+WKoOWtl+aute+8gScsIHR5cGU6ICd3YXJuaW5nJyB9KTsNCiAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0NCiAgICAgICAgaWYgKGVudFtpXS5jaGlsZHJlbiAmJiBlbnRbaV0uY2hpbGRyZW4ubGVuZ3RoID4gMCkgew0KICAgICAgICAgIHRoaXMuY291bnRBdHRyTGVuZ3RoID0gMDsNCiAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tFbnRGdW5jKGVudFtpXS5jaGlsZHJlbiwgaSkpIHsNCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgdGhpcy5jb3VudEF0dHJMZW5ndGggPSAwOw0KICAgICAgfQ0KICAgICAgcmV0dXJuIHRydWU7DQogICAgfSwNCiAgICBjaGVja0F0dHJGdW5jKGVudCwgaSwgc29uSW5kZXgpIHsNCiAgICAgIGNvbnN0IHJlZ1BvcyA9IG5ldyBSZWdFeHAoJ15cXGQqKD86XFwuXFxkezEsMn0pPyQnKTsNCiAgICAgIGNvbnN0IGF0dHJWYWwgPSB7fTsNCiAgICAgIGNvbnN0IGF0dHIgPSBlbnQuYXR0cmlidXRlTGlzdDsNCiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykgew0KICAgICAgICBhdHRyW2pdLmRlc2MgPSBhdHRyW2pdLmNvbW1lbnQ7DQogICAgICAgIGlmIChhdHRyW2pdLmRlZmF1bHRWYWx1ZSA9PSBudWxsKSB7DQogICAgICAgICAgYXR0cltqXS5kZWZhdWx0VmFsdWUgPSAnJzsNCiAgICAgICAgfQ0KICAgICAgICBhdHRyW2pdLmRlZmF1bHRWYWx1ZSA9IGF0dHJbal0uZGVmYXVsdFZhbHVlLnRyaW0oKTsNCiAgICAgICAgdGhpcy5hdHRyQ29tbWVudEVsZW1lbnRJZCA9IGAke2F0dHJbal0ubmFtZX1jb21tZW50JHtqfWA7DQogICAgICAgIGlmIChlbnQuaXNFeHRlcm5hbCAhPSAnMScpIHsNCiAgICAgICAgICBpZiAoIWF0dHJWYWxbYG5hbWUke2F0dHJbal0ubmFtZX1gXSkgew0KICAgICAgICAgICAgYXR0clZhbFtgbmFtZSR7YXR0cltqXS5uYW1lfWBdID0gYXR0cltqXS5uYW1lOw0KICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICB0aGlzLmVudEF0dHJJbmRleCA9IGk7DQogICAgICAgICAgICBpZiAoc29uSW5kZXgpIHsNCiAgICAgICAgICAgICAgdGhpcy5zb25BdHRySW5kZXggPSBzb25JbmRleDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHRoaXMuYXR0ck5hbWVFbGVtZW50SWQgPSBhdHRyOw0KICAgICAgICAgICAgdGhpcy5jaGVja0F0dHJOYW1lSW5kZXggPSBqOw0KICAgICAgICAgICAgY29uc3QgbXNnID0gYOWunuS9k++8miR7ZW50LmRlc2N977yIJHtlbnQubmFtZX3vvInkuK3lrZjlnKjph43lpI3lrZfmrrXlkI3jgJAke2F0dHJbal0ubmFtZX3jgJFgOw0KICAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7IG1lc3NhZ2U6IG1zZywgdHlwZTogJ3dhcm5pbmcnIH0pOw0KICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7dGhpcy5hdHRyTmFtZUVsZW1lbnRJZFtqXS5uYW1lfWF0dHJOYW1lJHtqfWApLmZvY3VzKCk7DQogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHt0aGlzLmF0dHJOYW1lRWxlbWVudElkW2pdLm5hbWV9YXR0ck5hbWUke2p9YCkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2RpdicpWzBdLmZpcnN0RWxlbWVudENoaWxkLnN0eWxlLmJvcmRlciA9DQogICAgICAgICAgICAgICcxcHggc29saWQgcmVkJzsNCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICB9DQogICAgICAgICAgdGhpcy5hdHRyTGVuRWxlbWVudElkID0gYCR7YXR0cltqXS5uYW1lfWF0dHJMZW4ke2p9YDsNCiAgICAgICAgICBpZiAoYXR0cltqXS5hdHRyTGVuZ3RoICYmIGF0dHJbal0uYXR0ckxlbmd0aCAhPT0gMCkgew0KICAgICAgICAgICAgaWYgKCFyZWdQb3MudGVzdChhdHRyW2pdLmF0dHJMZW5ndGgpKSB7DQogICAgICAgICAgICAgIHRoaXMuZW50QXR0ckluZGV4ID0gaTsNCiAgICAgICAgICAgICAgaWYgKHNvbkluZGV4KSB7DQogICAgICAgICAgICAgICAgdGhpcy5zb25BdHRySW5kZXggPSBzb25JbmRleDsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmF0dHJMZW5FbGVtZW50SWQpLmZvY3VzKCk7DQogICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuYXR0ckxlbkVsZW1lbnRJZCkuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCByZWQnOw0KICAgICAgICAgICAgICBjb25zdCBuID0gdGhpcy4kbWVzc2FnZS53YXJuaW5nKCfor7fovpPlhaXmraPnoa7mlbDlrZcnKTsNCiAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlQ2F0aW9uc1tuLmlkXSA9IG47DQogICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQogICAgICAgICAgdGhpcy5hdHRyRGVjaW1hRWxlbWVudElkID0gYCR7YXR0cltqXS5uYW1lfWRlY2ltYSR7an1gOw0KICAgICAgICAgIGlmIChhdHRyW2pdLmRlY2ltYWxMZW4gJiYgYXR0cltqXS5kZWNpbWFsTGVuICE9PSAwKSB7DQogICAgICAgICAgICBpZiAoIXJlZ1Bvcy50ZXN0KGF0dHJbal0uZGVjaW1hbExlbikpIHsNCiAgICAgICAgICAgICAgdGhpcy5lbnRBdHRySW5kZXggPSBpOw0KICAgICAgICAgICAgICBpZiAoc29uSW5kZXgpIHsNCiAgICAgICAgICAgICAgICB0aGlzLnNvbkF0dHJJbmRleCA9IHNvbkluZGV4Ow0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuYXR0ckRlY2ltYUVsZW1lbnRJZCkuZm9jdXMoKTsNCiAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5hdHRyRGVjaW1hRWxlbWVudElkKS5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkIHJlZCc7DQogICAgICAgICAgICAgIGNvbnN0IG4gPSB0aGlzLiRtZXNzYWdlLndhcm5pbmcoJ+ivt+i+k+WFpeato+ehruaVsOWtlycpOw0KICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VDYXRpb25zW24uaWRdID0gbjsNCiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgICBpZiAoYXR0cltqXS5kZWNpbWFsTGVuKSB7DQogICAgICAgICAgICBpZiAoYXR0cltqXS5kZWNpbWFsTGVuLmxlbmd0aCA+IDEpIHsNCiAgICAgICAgICAgICAgY29uc3QgZGVjaW1hbExlbiA9IGF0dHJbal0uZGVjaW1hbExlbi5zdWJzdHIoMCwgMSk7DQogICAgICAgICAgICAgIGlmIChkZWNpbWFsTGVuID09ICcwJykgew0KICAgICAgICAgICAgICAgIGF0dHJbal0uZGVjaW1hbExlbiA9IGF0dHJbal0uZGVjaW1hbExlbi5zdWJzdHIoMSwgYXR0cltqXS5kZWNpbWFsTGVuLmxlbmd0aCk7DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmIChhdHRyW2pdLmRlY2ltYWxMZW4gPCAwIHx8IGF0dHJbal0uZGVjaW1hbExlbiA+IDMwKSB7DQogICAgICAgICAgICAgIHRoaXMuZW50QXR0ckluZGV4ID0gaTsNCiAgICAgICAgICAgICAgaWYgKHNvbkluZGV4KSB7DQogICAgICAgICAgICAgICAgdGhpcy5zb25BdHRySW5kZXggPSBzb25JbmRleDsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmF0dHJEZWNpbWFFbGVtZW50SWQpLmZvY3VzKCk7DQogICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuYXR0ckRlY2ltYUVsZW1lbnRJZCkuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCByZWQnOw0KICAgICAgICAgICAgICB0aGlzLiRtZXNzYWdlKHsNCiAgICAgICAgICAgICAgICBtZXNzYWdlOiAn5bCP5pWw6ZW/5bqm5LiN6IO95bCP5LqOMOaIluiAheWkp+S6jjMwJywNCiAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsDQogICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgICAgIGlmIChhdHRyW2pdLmRhdGFUeXBlID09PSAndmFyY2hhcicpIHsNCiAgICAgICAgICAgIHRoaXMuY291bnRBdHRyTGVuZ3RoICs9IHBhcnNlSW50KGF0dHJbal0uYXR0ckxlbmd0aCk7DQogICAgICAgICAgfQ0KICAgICAgICAgIGlmIChhdHRyW2pdLmF0dHJMZW5ndGgpIHsNCiAgICAgICAgICAgIGlmIChhdHRyW2pdLmF0dHJMZW5ndGgubGVuZ3RoID4gMSkgew0KICAgICAgICAgICAgICBjb25zdCBhdHRyTGVuZ3RoID0gYXR0cltqXS5hdHRyTGVuZ3RoLnN1YnN0cigwLCAxKTsNCiAgICAgICAgICAgICAgaWYgKGF0dHJMZW5ndGggPT0gJzAnKSB7DQogICAgICAgICAgICAgICAgYXR0cltqXS5hdHRyTGVuZ3RoID0gYXR0cltqXS5hdHRyTGVuZ3RoLnN1YnN0cigxLCBhdHRyW2pdLmF0dHJMZW5ndGgubGVuZ3RoKTsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKGF0dHJbal0uZGF0YVR5cGUgPT09ICd2YXJjaGFyJykgew0KICAgICAgICAgICAgICBpZiAoYXR0cltqXS5hdHRyTGVuZ3RoIDwgMSB8fCB0aGlzLmNvdW50QXR0ckxlbmd0aCA+IDIxNTAwKSB7DQogICAgICAgICAgICAgICAgdGhpcy5lbnRBdHRySW5kZXggPSBpOw0KICAgICAgICAgICAgICAgIGlmIChzb25JbmRleCkgew0KICAgICAgICAgICAgICAgICAgdGhpcy5zb25BdHRySW5kZXggPSBzb25JbmRleDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5hdHRyTGVuRWxlbWVudElkKS5mb2N1cygpOw0KICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuYXR0ckxlbkVsZW1lbnRJZCkuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCByZWQnOw0KICAgICAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uoew0KICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ+aVtOaVsOmVv+W6puS4jeiDveWwj+S6jjHmiJbogIXplb/luqbmgLvlkozotoXlh7oyMTUwMCcsDQogICAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsDQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmIChhdHRyW2pdLmRhdGFUeXBlID09PSAnbnVtYmVyJyB8fCBhdHRyW2pdLmRhdGFUeXBlID09ICfmlbDlrZcnKSB7DQogICAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRWYWwgPSBhdHRyW2pdLmRlZmF1bHRWYWx1ZS5zcGxpdCgnLicpOw0KICAgICAgICAgICAgICBpZiAoTnVtYmVyKGF0dHJbal0uYXR0ckxlbmd0aCkgPCAxKSB7DQogICAgICAgICAgICAgICAgdGhpcy5lbnRBdHRySW5kZXggPSBpOw0KICAgICAgICAgICAgICAgIGlmIChzb25JbmRleCkgew0KICAgICAgICAgICAgICAgICAgdGhpcy5zb25BdHRySW5kZXggPSBzb25JbmRleDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5hdHRyTGVuRWxlbWVudElkKS5mb2N1cygpOw0KICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuYXR0ckxlbkVsZW1lbnRJZCkuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCByZWQnOw0KICAgICAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uoew0KICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ+aVtOaVsOmVv+W6puS4jeiDveWwj+S6jjEnLA0KICAgICAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLA0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBpZiAoTnVtYmVyKGF0dHJbal0uYXR0ckxlbmd0aCkgKyBOdW1iZXIoYXR0cltqXS5kZWNpbWFsTGVuKSA+IDM4KSB7DQogICAgICAgICAgICAgICAgdGhpcy5lbnRBdHRySW5kZXggPSBpOw0KICAgICAgICAgICAgICAgIGlmIChzb25JbmRleCkgew0KICAgICAgICAgICAgICAgICAgdGhpcy5zb25BdHRySW5kZXggPSBzb25JbmRleDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5hdHRyTGVuRWxlbWVudElkKS5mb2N1cygpOw0KICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuYXR0ckxlbkVsZW1lbnRJZCkuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCByZWQnOw0KICAgICAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uoew0KICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ+aVtOaVsOmVv+W6puS4juWwj+aVsOmVv+W6puS5i+WSjOS4jeiDvei2hei/hzM4JywNCiAgICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJywNCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgaWYgKGRlZmF1bHRWYWxbMV0gJiYgTnVtYmVyKGRlZmF1bHRWYWxbMV0ubGVuZ3RoKSA+IE51bWJlcihhdHRyW2pdLmRlY2ltYWxMZW4pKSB7DQogICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0VmFsdWVJbmRleCA9IGo7DQogICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0VmFsdWVUeXBlID0gJ251bWJlcic7DQogICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoYGRlZmF1bHRWYWx1ZSR7an1gKVswXS5mb2N1cygpOw0KICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKGBkZWZhdWx0VmFsdWUke2p9YClbMF0uc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCByZWQnOw0KICAgICAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uoew0KICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ+m7mOiupOWAvOS4reWwj+aVsOmVv+W6pui2heWHuuiuvue9ruWAvCcsDQogICAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsDQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGlmIChhdHRyW2pdLmRlZmF1bHRWYWx1ZSAmJiBhdHRyW2pdLmRlZmF1bHRWYWx1ZS5sZW5ndGggPiAyMSkgew0KICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdFZhbHVlSW5kZXggPSBqOw0KICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdFZhbHVlVHlwZSA9ICdudW1iZXInOw0KICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKGBkZWZhdWx0VmFsdWUke2p9YClbMF0uZm9jdXMoKTsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShgZGVmYXVsdFZhbHVlJHtqfWApWzBdLnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgcmVkJzsNCiAgICAgICAgICAgICAgICB0aGlzLiRtZXNzYWdlKHsgbWVzc2FnZTogJ+aVtOaVsOmVv+W6puS4jeiDvei2hei/hzIxJywgdHlwZTogJ3dhcm5pbmcnIH0pOw0KICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBpZiAoIXJlZ1Bvcy50ZXN0KE51bWJlcihhdHRyW2pdLmRlZmF1bHRWYWx1ZSkpKSB7DQogICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0VmFsdWVJbmRleCA9IGo7DQogICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0VmFsdWVUeXBlID0gJ251bWJlcic7DQogICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoYGRlZmF1bHRWYWx1ZSR7an1gKVswXS5mb2N1cygpOw0KICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKGBkZWZhdWx0VmFsdWUke2p9YClbMF0uc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCByZWQnOw0KICAgICAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2UoeyBtZXNzYWdlOiAn6buY6K6k5YC85bqU5Li65pWw5a2XJywgdHlwZTogJ3dhcm5pbmcnIH0pOw0KICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgbGV0IGQgPSBhdHRyW2pdLmRlZmF1bHRWYWx1ZTsNCiAgICAgICAgICAgIGlmIChkLmluZGV4T2YoJy4nKSA+IC0xKSB7DQogICAgICAgICAgICAgIGNvbnN0IGkgPSBkLmluZGV4T2YoJy4nKTsNCiAgICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBkLnN1YnN0cmluZygwLCBpKTsNCiAgICAgICAgICAgICAgY29uc3QgZW5kID0gZC5zdWJzdHJpbmcoaSArIDEsIGF0dHJbal0uZGVmYXVsdFZhbHVlLmxlbmd0aCk7DQogICAgICAgICAgICAgIGQgPSBzdGFydCArIGVuZDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmIChkLmxlbmd0aCA+IGF0dHJbal0uYXR0ckxlbmd0aCArIGF0dHJbal0uZGVjaW1hbExlbikgew0KICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRWYWx1ZUluZGV4ID0gajsNCiAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0VmFsdWVUeXBlID0gJ3ZhcmNoYXInOw0KICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShgZGVmYXVsdFZhbHVlJHtqfWApWzBdLmZvY3VzKCk7DQogICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKGBkZWZhdWx0VmFsdWUke2p9YClbMF0uc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCByZWQnOw0KICAgICAgICAgICAgICB0aGlzLiRtZXNzYWdlKHsNCiAgICAgICAgICAgICAgICBtZXNzYWdlOiAn6buY6K6k5YC86ZW/5bqm6ZyA5bCP5LqO5pW05pWw6ZW/5bqmJywNCiAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsDQogICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICB9DQogICAgICAgICAgfSBlbHNlIGlmIChhdHRyW2pdLmRhdGFUeXBlID09PSAndmFyY2hhcicgfHwgYXR0cltqXS5kYXRhVHlwZSA9PT0gJ251bWJlcicpIHsNCiAgICAgICAgICAgIHRoaXMuZW50QXR0ckluZGV4ID0gaTsNCiAgICAgICAgICAgIGlmIChzb25JbmRleCkgew0KICAgICAgICAgICAgICB0aGlzLnNvbkF0dHJJbmRleCA9IHNvbkluZGV4Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5hdHRyTGVuRWxlbWVudElkKS5mb2N1cygpOw0KICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5hdHRyTGVuRWxlbWVudElkKS5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkIHJlZCc7DQogICAgICAgICAgICB0aGlzLiRtZXNzYWdlKHsgbWVzc2FnZTogJ+ivt+a3u+WKoOaVtOaVsOmVv+W6picsIHR5cGU6ICd3YXJuaW5nJyB9KTsNCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIHJldHVybiB0cnVlOw0KICAgIH0sDQogICAgLy8g5YWz6Zet6KGo5Y2V5a+56K+d5qGGDQogICAgaGFuZGxlRGlhbG9nQ2xvc2UoKSB7DQogICAgICB0aGlzLiRlbWl0KCdsb2FkVGFibGVEYXRhJyk7DQogICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTsNCiAgICAgIHRoaXMuaXNTYXZlID0gZmFsc2U7DQogICAgICB0aGlzLmVudEluZGV4ID0gMDsNCiAgICAgIHRoaXMuZ3JhbmRTb25JbmRleCA9IC0xOw0KICAgICAgdGhpcy5vcGVuR3JhbmRTb25BdHRyID0gZmFsc2U7DQogICAgICB0aGlzLmNvdW50QXR0ckxlbmd0aCA9IDA7DQogICAgICB0aGlzLmZvcm1EYXRhID0gdGhpcy4kb3B0aW9ucy5kYXRhKCkuZm9ybURhdGE7DQogICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7IHBhdGg6ICcvc3lzcGxhdC9idXNpbmVzc09iaicgfSk7IC8vIGZvcm0jYnVzaW5lc3NPYmoNCiAgICB9LA0KICAgIG9uQ2FuY2VsKCkgew0KICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7DQogICAgfSwNCiAgICBvbkNvbmZpcm0oKSB7DQogICAgICB0aGlzLiRyZWZzLmZvcm0udmFsaWRhdGUoYXN5bmMgKHZhbGlkKSA9PiB7DQogICAgICAgIGlmICh2YWxpZCkgew0KICAgICAgICAgIC8vIGNvbnN0IHBhcmFtcyA9IHRoaXMuaGFuZGxlUGFyYW1zKCkNCiAgICAgICAgICAvLyB0cnkgew0KICAgICAgICAgIC8vICAgdGhpcy5sb2FkaW5nID0gdHJ1ZQ0KICAgICAgICAgIC8vICAgaWYgKHRoaXMuZGF0YT8uaWQpIHsNCiAgICAgICAgICAvLyAgICAgYXdhaXQgdXBkYXRlRGF0YShwYXJhbXMpDQogICAgICAgICAgLy8gICB9IGVsc2Ugew0KICAgICAgICAgIC8vICAgICBhd2FpdCBkYXRhQWRkKHBhcmFtcykNCiAgICAgICAgICAvLyAgIH0NCiAgICAgICAgICAvLyAgIHRoaXMuJG1lc3NhZ2Uuc3VjY2Vzcygn5pON5L2c5oiQ5YqfJykNCiAgICAgICAgICAvLyAgIHRoaXMub25DYW5jZWwoKQ0KICAgICAgICAgIC8vIHRoaXMuJGVtaXQoJ2NvbmZpcm0nLCB7Li4udGhpcy5mb3JtRGF0YX0pDQogICAgICAgICAgLy8gfSBmaW5hbGx5IHsNCiAgICAgICAgICAvLyAgIHRoaXMubG9hZGluZyA9IGZhbHNlDQogICAgICAgICAgLy8gfQ0KICAgICAgICB9DQogICAgICB9KTsNCiAgICB9LA0KICB9LA0KfTsNCg=="},null]}