| 1 |
- {"remainingRequest":"D:\\front\\item\\zyAdmin\\node_modules\\thread-loader\\dist\\cjs.js!D:\\front\\item\\zyAdmin\\node_modules\\babel-loader\\lib\\index.js!D:\\front\\item\\zyAdmin\\node_modules\\cache-loader\\dist\\cjs.js??ref--0-0!D:\\front\\item\\zyAdmin\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\front\\item\\zyAdmin\\src\\pages\\user\\list\\index.vue?vue&type=script&lang=js","dependencies":[{"path":"D:\\front\\item\\zyAdmin\\src\\pages\\user\\list\\index.vue","mtime":1761614939082},{"path":"D:\\front\\item\\zyAdmin\\babel.config.js","mtime":1761614925168},{"path":"D:\\front\\item\\zyAdmin\\.babelrc","mtime":1761614925165},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1761614927801},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\thread-loader\\dist\\cjs.js","mtime":1761614937017},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\babel-loader\\lib\\index.js","mtime":1761614927320},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1761614927801},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\vue-loader\\lib\\index.js","mtime":1761614937402}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:aW1wb3J0IF90b0NvbnN1bWFibGVBcnJheSBmcm9tICJEOi9mcm9udC9pdGVtL3p5QWRtaW4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5LmpzIjsKaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tICJEOi9mcm9udC9pdGVtL3p5QWRtaW4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5LmpzIjsKaW1wb3J0IF9yZWdlbmVyYXRvciBmcm9tICJEOi9mcm9udC9pdGVtL3p5QWRtaW4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3JlZ2VuZXJhdG9yLmpzIjsKaW1wb3J0IF9hc3luY1RvR2VuZXJhdG9yIGZyb20gIkQ6L2Zyb250L2l0ZW0venlBZG1pbi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXN5bmNUb0dlbmVyYXRvci5qcyI7CmltcG9ydCBfb2JqZWN0U3ByZWFkIGZyb20gIkQ6L2Zyb250L2l0ZW0venlBZG1pbi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMi5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmNvbmNhdC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZpbmQtaW5kZXguanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5qb2luLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkubWFwLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnNwbGljZS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLml0ZXJhdG9yLmNvbnN0cnVjdG9yLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuaXRlcmF0b3IubWFwLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuanNvbi5zdHJpbmdpZnkuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3Qua2V5cy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5zZXQuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5zZXQuZGlmZmVyZW5jZS52Mi5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnNldC5pbnRlcnNlY3Rpb24udjIuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5zZXQuaXMtZGlzam9pbnQtZnJvbS52Mi5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnNldC5pcy1zdWJzZXQtb2YudjIuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5zZXQuaXMtc3VwZXJzZXQtb2YudjIuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5zZXQuc3ltbWV0cmljLWRpZmZlcmVuY2UudjIuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5zZXQudW5pb24udjIuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3IuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yLmpzIjsKaW1wb3J0IHVzZXJMYWJlbCBmcm9tICdAL2NvbXBvbmVudHMvdXNlckxhYmVsJzsKaW1wb3J0IHsgbWFwU3RhdGUgfSBmcm9tICd2dWV4JzsKaW1wb3J0IGV4cGFuZFJvdyBmcm9tICcuL3RhYmxlRXhwYW5kLnZ1ZSc7CmltcG9ydCB1c2VyRWRpdCBmcm9tICcuL2hhbmRsZS91c2VyRWRpdC52dWUnOwppbXBvcnQgeyB1c2VyTGlzdCwgZ2V0VXNlckRhdGEsIGlzU2hvd0FwaSwgZWRpdE90aGVyQXBpLCBnaXZlTGV2ZWxBcGksIHVzZXJTZXRHcm91cCwgdXNlckdyb3VwQXBpLCBsZXZlbExpc3RBcGksIHVzZXJTZXRMYWJlbEFwaSwgdXNlckxhYmVsQXBpLCB1c2VyU3luY2hybywgZ2V0VXNlclNhdmVGb3JtLCBnaXZlTGV2ZWxUaW1lQXBpLCBnZXRVc2VySW5mbywgc2V0VXNlciBhcyBfc2V0VXNlciwgZWRpdFVzZXIsIHNhdmVTZXRMYWJlbCB9IGZyb20gJ0AvYXBpL3VzZXInOwppbXBvcnQgeyBhZ2VudFNwcmVhZEFwaSB9IGZyb20gJ0AvYXBpL2FnZW50JzsKaW1wb3J0IHsgZXhwb3J0VXNlckxpc3QgfSBmcm9tICdAL2FwaS9leHBvcnQnOwppbXBvcnQgZWRpdEZyb20gZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy9mcm9tL2Zyb20nOwppbXBvcnQgc2VuZEZyb20gZnJvbSAnQC9jb21wb25lbnRzL3NlbmRDb3Vwb25zL2luZGV4JzsKaW1wb3J0IHVzZXJEZXRhaWxzIGZyb20gJy4vaGFuZGxlL3VzZXJEZXRhaWxzJzsKaW1wb3J0IG5ld3NDYXRlZ29yeSBmcm9tICdAL2NvbXBvbmVudHMvbmV3c0NhdGVnb3J5L2luZGV4JzsKaW1wb3J0IGN1c3RvbWVySW5mbyBmcm9tICdAL2NvbXBvbmVudHMvY3VzdG9tZXJJbmZvJzsKaW1wb3J0IHsgY2l0eUxpc3QgfSBmcm9tICdAL2FwaS9hcHAnOwppbXBvcnQgeyBtZW1iZXJzaGlwRGF0YUxpc3RBcGkgfSBmcm9tICdAL2FwaS9tZW1iZXJzaGlwTGV2ZWwnOwpleHBvcnQgZGVmYXVsdCB7CiAgbmFtZTogJ3VzZXJfbGlzdCcsCiAgY29tcG9uZW50czogewogICAgZXhwYW5kUm93OiBleHBhbmRSb3csCiAgICBlZGl0RnJvbTogZWRpdEZyb20sCiAgICBzZW5kRnJvbTogc2VuZEZyb20sCiAgICB1c2VyRGV0YWlsczogdXNlckRldGFpbHMsCiAgICBuZXdzQ2F0ZWdvcnk6IG5ld3NDYXRlZ29yeSwKICAgIGN1c3RvbWVySW5mbzogY3VzdG9tZXJJbmZvLAogICAgdXNlckxhYmVsOiB1c2VyTGFiZWwsCiAgICB1c2VyRWRpdDogdXNlckVkaXQKICB9LAogIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7CiAgICByZXR1cm4gewogICAgICBkYXRhTGFiZWw6IFtdLAogICAgICBzZWxlY3REYXRhTGFiZWw6IFtdLAogICAgICB1c2VyRGF0YToge30sCiAgICAgIG1vZGFsczogZmFsc2UsCiAgICAgIHNlbGVjdExhYmVsU2hvdzogZmFsc2UsCiAgICAgIGxhYmVsU2hvdzogZmFsc2UsCiAgICAgIGN1c3RvbWVyU2hvdzogZmFsc2UsCiAgICAgIHByb21vdGVyU2hvdzogZmFsc2UsCiAgICAgIGxhYmVsQWN0aXZlOiB7CiAgICAgICAgdWlkOiAwCiAgICAgIH0sCiAgICAgIGZvcm1JbmxpbmU6IHsKICAgICAgICB1aWQ6IDAsCiAgICAgICAgc3ByZWFkX3VpZDogMCwKICAgICAgICBpbWFnZTogJycKICAgICAgfSwKICAgICAgcGlja2VyT3B0aW9uczogdGhpcy4kdGltZU9wdGlvbnMsCiAgICAgIGNvbGxhcHNlOiBmYWxzZSwKICAgICAgaGVhZGVOdW06IFt7CiAgICAgICAgdHlwZTogJycsCiAgICAgICAgbmFtZTogJ+WFqOmDqCcKICAgICAgfSwgewogICAgICAgIHR5cGU6ICd3ZWNoYXQnLAogICAgICAgIG5hbWU6ICflvq7kv6HlhazkvJflj7cnCiAgICAgIH0sIHsKICAgICAgICB0eXBlOiAncm91dGluZScsCiAgICAgICAgbmFtZTogJ+W+ruS/oeWwj+eoi+W6jycKICAgICAgfSwgewogICAgICAgIHR5cGU6ICdoNScsCiAgICAgICAgbmFtZTogJ0g1JwogICAgICB9LCB7CiAgICAgICAgdHlwZTogJ3BjJywKICAgICAgICBuYW1lOiAnUEMnCiAgICAgIH0sIHsKICAgICAgICB0eXBlOiAnYXBwJywKICAgICAgICBuYW1lOiAnQVBQJwogICAgICB9XSwKICAgICAgYWRkcmVzczogW10sCiAgICAgIGFkZHJlc0RhdGE6IFtdLAogICAgICBpc1Nob3dTZW5kOiB0cnVlLAogICAgICBtb2RhbDEzOiBmYWxzZSwKICAgICAgbWF4Q29sczogNCwKICAgICAgc2Nyb2xsZXJIZWlnaHQ6ICc2MDAnLAogICAgICBjb250ZW50VG9wOiAnMTMwJywKICAgICAgY29udGVudFdpZHRoOiAnOTglJywKICAgICAgZ3JpZDogewogICAgICAgIHhsOiA2LAogICAgICAgIGxnOiA2LAogICAgICAgIG1kOiA4LAogICAgICAgIHNtOiAxMiwKICAgICAgICB4czogMjQKICAgICAgfSwKICAgICAgZ3JpZDI6IHsKICAgICAgICB4bDogOCwKICAgICAgICBsZzogOCwKICAgICAgICBtZDogOCwKICAgICAgICBzbTogMTIsCiAgICAgICAgeHM6IDI0CiAgICAgIH0sCiAgICAgIGxvYWRpbmc6IGZhbHNlLAogICAgICB0b3RhbDogMCwKICAgICAgdXNlckZyb206IHsKICAgICAgICBsYWJlbF9pZDogJycsCiAgICAgICAgdXNlcl90eXBlOiAnJywKICAgICAgICBzdGF0dXM6ICcnLAogICAgICAgIHNleDogJycsCiAgICAgICAgaXNfcHJvbW90ZXI6ICcnLAogICAgICAgIGNvdW50cnk6ICcnLAogICAgICAgIGlzTWVtYmVyOiAnJywKICAgICAgICBwYXlfY291bnRfbnVtOiBbJycsICcnXSwKICAgICAgICBiYWxhbmNlOiBbJycsICcnXSwKICAgICAgICBpbnRlZ3JhbDogWycnLCAnJ10sCiAgICAgICAgcGF5X2NvdW50X21vbmV5OiBbJycsICcnXSwKICAgICAgICByZWNoYXJnZV9jb3VudDogWycnLCAnJ10sCiAgICAgICAgdXNlcl90aW1lX3R5cGU6ICcnLAogICAgICAgIHVzZXJfdGltZTogJycsCiAgICAgICAgYmVmb3JlX3BheV90aW1lOiAnJywKICAgICAgICBuaWNrbmFtZTogJycsCiAgICAgICAgcHJvdmluY2U6ICcnLAogICAgICAgIGNpdHk6ICcnLAogICAgICAgIHBhZ2U6IDEsCiAgICAgICAgbGltaXQ6IDE1LAogICAgICAgIGxldmVsOiAnJywKICAgICAgICBncm91cF9pZDogJycsCiAgICAgICAgYWdlbnRfbGV2ZWw6ICcnLAogICAgICAgIGZpZWxkX2tleTogJycKICAgICAgfSwKICAgICAgYmVmb3JlX3BheV90aW1lOiAnJywKICAgICAgZmllbGRfa2V5OiAnJywKICAgICAgbGV2ZWw6ICcnLAogICAgICBncm91cF9pZDogJycsCiAgICAgIGFnZW50X2xldmVsOiAnJywKICAgICAgbGFiZWxfaWQ6ICcnLAogICAgICB1c2VyX3RpbWVfdHlwZTogJycsCiAgICAgIHBheV9jb3VudDogJycsCiAgICAgIHVzZXJMaXN0czogW10sCiAgICAgIEZyb21EYXRhOiBudWxsLAogICAgICBzZWxlY3Rpb25MaXN0OiBbXSwKICAgICAgdXNlcl9pZHM6ICcnLAogICAgICBzZWxlY3RlZERhdGE6IFtdLAogICAgICB0aW1lVmFsOiBbXSwKICAgICAgZ3JvdXBMaXN0OiBbXSwKICAgICAgbGV2ZWxMaXN0OiBbXSwKICAgICAgbWVtYmVyc2hpcExpc3Q6IFtdLAogICAgICBsYWJlbEZyb206IHsKICAgICAgICBwYWdlOiAxLAogICAgICAgIGxpbWl0OiAnJwogICAgICB9LAogICAgICBsYWJlbExpc3RzOiBbXSwKICAgICAgc2VsZWN0ZWRJZHM6IFtdLAogICAgICAvL+mAieS4reWQiOW5tumhueeahGlkCiAgICAgIGlkczogW10KICAgIH07CiAgfSwKICBjb21wdXRlZDogX29iamVjdFNwcmVhZCh7fSwgbWFwU3RhdGUoJ21lZGlhJywgWydpc01vYmlsZSddKSksCiAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCgpIHsKICAgIHRoaXMuZ2V0TGlzdCgpOwogICAgdGhpcy5nZXRDaXR5TGlzdCgpOwogIH0sCiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHsKICAgIHRoaXMudXNlckdyb3VwKCk7CiAgICB0aGlzLmxldmVsTGlzdHMoKTsKICAgIHRoaXMubWVtYmVyc2hpcERhdGFMaXN0KCk7CiAgICAvLyB0aGlzLmdyb3VwTGlzdHMoKTsKICB9LAogIG1ldGhvZHM6IHsKICAgIGdldENpdHlMaXN0OiBmdW5jdGlvbiBnZXRDaXR5TGlzdCgpIHsKICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgY2l0eUxpc3QoKS50aGVuKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICBfdGhpcy5hZGRyZXNEYXRhID0gcmVzLmRhdGE7CiAgICAgIH0pOwogICAgfSwKICAgIHNldFVzZXI6IGZ1bmN0aW9uIHNldFVzZXIoKSB7CiAgICAgIHZhciBfdGhpczIgPSB0aGlzOwogICAgICB2YXIgZGF0YSA9IHRoaXMuJHJlZnMudXNlckVkaXQuZm9ybUl0ZW07CiAgICAgIHZhciBpZHMgPSBbXTsKICAgICAgdGhpcy4kcmVmcy51c2VyRWRpdC5kYXRhTGFiZWwubWFwKGZ1bmN0aW9uIChpKSB7CiAgICAgICAgaWRzLnB1c2goaS5pZCk7CiAgICAgIH0pOwogICAgICBkYXRhLmxhYmVsX2lkID0gaWRzOwogICAgICAvLyBpZiAoIWRhdGEucmVhbF9uYW1lKSByZXR1cm4gdGhpcy4kbWVzc2FnZS53YXJuaW5nKCLor7fovpPlhaXnnJ/lrp7lp5PlkI0iKTsKICAgICAgLy8gaWYgKCFkYXRhLnBob25lKSByZXR1cm4gdGhpcy4kbWVzc2FnZS53YXJuaW5nKCLor7fovpPlhaXmiYvmnLrlj7ciKTsKICAgICAgLy8gaWYgKCFkYXRhLnB3ZCkgcmV0dXJuIHRoaXMuJG1lc3NhZ2Uud2FybmluZygi6K+36L6T5YWl5a+G56CBIik7CiAgICAgIC8vIGlmICghZGF0YS50cnVlX3B3ZCkgcmV0dXJuIHRoaXMuJG1lc3NhZ2Uud2FybmluZygi6K+36L6T5YWl56Gu6K6k5a+G56CBIik7CiAgICAgIGlmIChkYXRhLnVpZCkgewogICAgICAgIGVkaXRVc2VyKGRhdGEpLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgICAgX3RoaXMyLm1vZGFscyA9IGZhbHNlOwogICAgICAgICAgX3RoaXMyLiRtZXNzYWdlLnN1Y2Nlc3MocmVzLm1zZyk7CiAgICAgICAgICBfdGhpczIuZ2V0TGlzdCgpOwogICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHsKICAgICAgICAgIF90aGlzMi4kbWVzc2FnZS5lcnJvcihlcnIpOwogICAgICAgIH0pOwogICAgICB9IGVsc2UgewogICAgICAgIF9zZXRVc2VyKGRhdGEpLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgICAgX3RoaXMyLm1vZGFscyA9IGZhbHNlOwogICAgICAgICAgX3RoaXMyLiRtZXNzYWdlLnN1Y2Nlc3MocmVzLm1zZyk7CiAgICAgICAgICBfdGhpczIuZ2V0TGlzdCgpOwogICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHsKICAgICAgICAgIF90aGlzMi4kbWVzc2FnZS5lcnJvcihlcnIubXNnKTsKICAgICAgICB9KTsKICAgICAgfQogICAgfSwKICAgIG9uY2VHZXRMaXN0OiBmdW5jdGlvbiBvbmNlR2V0TGlzdCgpIHsKICAgICAgdGhpcy5sYWJlbEFjdGl2ZS51aWQgPSAwOwogICAgICB0aGlzLmdldExpc3QoKTsKICAgIH0sCiAgICAvLyDmoIfnrb7lvLnnqpflhbPpl60KICAgIGxhYmVsQ2xvc2U6IGZ1bmN0aW9uIGxhYmVsQ2xvc2UoKSB7CiAgICAgIHRoaXMubGFiZWxBY3RpdmUudWlkID0gMDsKICAgICAgdGhpcy5sYWJlbFNob3cgPSBmYWxzZTsKICAgICAgdGhpcy5zZWxlY3RMYWJlbFNob3cgPSBmYWxzZTsKICAgIH0sCiAgICAvLyDmj5DkuqQKICAgIHB1dFNlbmQ6IGZ1bmN0aW9uIHB1dFNlbmQobmFtZSkgewogICAgICB2YXIgX3RoaXMzID0gdGhpczsKICAgICAgdGhpcy4kcmVmc1tuYW1lXS52YWxpZGF0ZShmdW5jdGlvbiAodmFsaWQpIHsKICAgICAgICBpZiAodmFsaWQpIHsKICAgICAgICAgIGlmICghX3RoaXMzLmZvcm1JbmxpbmUuc3ByZWFkX3VpZCkgewogICAgICAgICAgICByZXR1cm4gX3RoaXMzLiRtZXNzYWdlLmVycm9yKCfor7fkuIrkvKDnlKjmiLcnKTsKICAgICAgICAgIH0KICAgICAgICAgIGFnZW50U3ByZWFkQXBpKF90aGlzMy5mb3JtSW5saW5lKS50aGVuKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICAgICAgX3RoaXMzLnByb21vdGVyU2hvdyA9IGZhbHNlOwogICAgICAgICAgICBfdGhpczMuJG1lc3NhZ2Uuc3VjY2VzcyhyZXMubXNnKTsKICAgICAgICAgICAgX3RoaXMzLmdldExpc3QoKTsKICAgICAgICAgICAgX3RoaXMzLiRyZWZzW25hbWVdLnJlc2V0RmllbGRzKCk7CiAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgICAgIF90aGlzMy4kbWVzc2FnZS5lcnJvcihyZXMubXNnKTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9LAogICAgc2F2ZTogZnVuY3Rpb24gc2F2ZSgpIHsKICAgICAgdGhpcy5tb2RhbHMgPSB0cnVlOwoKICAgICAgLy8gdGhpcy4kbW9kYWxGb3JtKGdldFVzZXJTYXZlRm9ybSgpKQogICAgICAvLyAgIC50aGVuKCgpID0+IHsKICAgICAgLy8gICAgIHRoaXMudXNlckZyb20ucGFnZSA9IDE7CiAgICAgIC8vICAgICB0aGlzLmdldExpc3QoKTsKICAgICAgLy8gICB9KQogICAgICAvLyAgIC5jYXRjaCgocmVzKSA9PiB7CiAgICAgIC8vICAgICB0aGlzLiRtZXNzYWdlLmVycm9yKHJlcy5tc2cpOwogICAgICAvLyAgIH0pOwogICAgfSwKICAgIHN5bmNocm86IGZ1bmN0aW9uIHN5bmNocm8oKSB7CiAgICAgIHZhciBfdGhpczQgPSB0aGlzOwogICAgICB1c2VyU3luY2hybygpLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgIF90aGlzNC4kbWVzc2FnZS5zdWNjZXNzKHJlcy5tc2cpOwogICAgICB9KS5jYXRjaChmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgX3RoaXM0LiRtZXNzYWdlLmVycm9yKHJlcy5tc2cpOwogICAgICB9KTsKICAgIH0sCiAgICBpc1NlbDogZnVuY3Rpb24gaXNTZWwocm93KSB7CiAgICAgIHJldHVybiAhISFyb3cuaXNfZGVsOwogICAgfSwKICAgIC8vIOWIhue7hOWIl+ihqAogICAgZ3JvdXBMaXN0czogZnVuY3Rpb24gZ3JvdXBMaXN0cygpIHsKICAgICAgdmFyIF90aGlzNSA9IHRoaXM7CiAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7CiAgICAgIHVzZXJMYWJlbEFwaSh0aGlzLmxhYmVsRnJvbSkudGhlbigvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBfcmVmID0gX2FzeW5jVG9HZW5lcmF0b3IoLyojX19QVVJFX18qL19yZWdlbmVyYXRvcigpLm0oZnVuY3Rpb24gX2NhbGxlZShyZXMpIHsKICAgICAgICAgIHZhciBkYXRhOwogICAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvcigpLncoZnVuY3Rpb24gKF9jb250ZXh0KSB7CiAgICAgICAgICAgIHdoaWxlICgxKSBzd2l0Y2ggKF9jb250ZXh0Lm4pIHsKICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICBkYXRhID0gcmVzLmRhdGE7CiAgICAgICAgICAgICAgICBfdGhpczUubGFiZWxMaXN0cyA9IGRhdGEubGlzdDsKICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuYSgyKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwgX2NhbGxlZSk7CiAgICAgICAgfSkpOwogICAgICAgIHJldHVybiBmdW5jdGlvbiAoX3gpIHsKICAgICAgICAgIHJldHVybiBfcmVmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgICAgfTsKICAgICAgfSgpKS5jYXRjaChmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgX3RoaXM1LmxvYWRpbmcgPSBmYWxzZTsKICAgICAgICBfdGhpczUuJG1lc3NhZ2UuZXJyb3IocmVzLm1zZyk7CiAgICAgIH0pOwogICAgfSwKICAgIG9uQ2xpY2tUYWI6IGZ1bmN0aW9uIG9uQ2xpY2tUYWIoKSB7CiAgICAgIHRoaXMudXNlckZyb20ucGFnZSA9IDE7CiAgICAgIHRoaXMuZ2V0TGlzdCgpOwogICAgfSwKICAgIHVzZXJHcm91cDogZnVuY3Rpb24gdXNlckdyb3VwKCkgewogICAgICB2YXIgX3RoaXM2ID0gdGhpczsKICAgICAgdmFyIGRhdGEgPSB7CiAgICAgICAgcGFnZTogMSwKICAgICAgICBsaW1pdDogJycKICAgICAgfTsKICAgICAgdXNlckdyb3VwQXBpKGRhdGEpLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgIF90aGlzNi5ncm91cExpc3QgPSByZXMuZGF0YS5saXN0OwogICAgICB9KTsKICAgIH0sCiAgICBsZXZlbExpc3RzOiBmdW5jdGlvbiBsZXZlbExpc3RzKCkgewogICAgICB2YXIgX3RoaXM3ID0gdGhpczsKICAgICAgdmFyIGRhdGEgPSB7CiAgICAgICAgcGFnZTogMSwKICAgICAgICBsaW1pdDogJycsCiAgICAgICAgdGl0bGU6ICcnLAogICAgICAgIGlzX3Nob3c6IDEKICAgICAgfTsKICAgICAgbGV2ZWxMaXN0QXBpKGRhdGEpLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgIF90aGlzNy5sZXZlbExpc3QgPSByZXMuZGF0YS5saXN0OwogICAgICB9KTsKICAgIH0sCiAgICBtZW1iZXJzaGlwRGF0YUxpc3Q6IGZ1bmN0aW9uIG1lbWJlcnNoaXBEYXRhTGlzdCgpIHsKICAgICAgdmFyIF90aGlzOCA9IHRoaXM7CiAgICAgIHZhciBkYXRhID0gewogICAgICAgIHBhZ2U6IDEsCiAgICAgICAgbGltaXQ6IDAsCiAgICAgICAgc3RhdXM6IDEKICAgICAgfTsKICAgICAgbWVtYmVyc2hpcERhdGFMaXN0QXBpKGRhdGEpLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgIF90aGlzOC5tZW1iZXJzaGlwTGlzdCA9IHJlcy5kYXRhLmxpc3Q7CiAgICAgIH0pOwogICAgfSwKICAgIC8vIOaJuemHj+iuvue9ruWIhue7hO+8mwogICAgc2V0R3JvdXA6IGZ1bmN0aW9uIHNldEdyb3VwKCkgewogICAgICB2YXIgX3RoaXM5ID0gdGhpczsKICAgICAgaWYgKHRoaXMuaWRzLmxlbmd0aCA9PT0gMCkgewogICAgICAgIHRoaXMuJG1lc3NhZ2Uud2FybmluZygn6K+36YCJ5oup6KaB6K6+572u5YiG57uE55qE55So5oi3Jyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdmFyIHVpZHMgPSB7CiAgICAgICAgICB1aWRzOiB0aGlzLmlkcwogICAgICAgIH07CiAgICAgICAgdGhpcy4kbW9kYWxGb3JtKHVzZXJTZXRHcm91cCh1aWRzKSkudGhlbihmdW5jdGlvbiAoKSB7CiAgICAgICAgICBfdGhpczkuaWRzID0gW107CiAgICAgICAgICBfdGhpczkuc2VsZWN0ZWRJZHMgPSBbXTsKICAgICAgICAgIF90aGlzOS5nZXRMaXN0KCk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0sCiAgICAvLyDmibnph4/orr7nva7moIfnrb7vvJsKICAgIHNldExhYmVsOiBmdW5jdGlvbiBzZXRMYWJlbCgpIHsKICAgICAgaWYgKHRoaXMuaWRzLmxlbmd0aCA9PT0gMCkgewogICAgICAgIHRoaXMuJG1lc3NhZ2Uud2FybmluZygn6K+36YCJ5oup6KaB6K6+572u5qCH562+55qE55So5oi3Jyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdmFyIHVpZHMgPSB7CiAgICAgICAgICB1aWRzOiB0aGlzLmlkcwogICAgICAgIH07CiAgICAgICAgdGhpcy5sYWJlbEFjdGl2ZS51aWQgPSAwOwogICAgICAgIHRoaXMubGFiZWxTaG93ID0gdHJ1ZTsKICAgICAgICAvLyB0aGlzLiRtb2RhbEZvcm0odXNlclNldExhYmVsQXBpKHVpZHMpKS50aGVuKCgpID0+CiAgICAgICAgLy8gICB0aGlzLiRyZWZzLnNlbmRzLmdldExpc3QoKQogICAgICAgIC8vICk7CiAgICAgIH0KICAgIH0sCiAgICBhY3RpdmVTZWxlY3REYXRhOiBmdW5jdGlvbiBhY3RpdmVTZWxlY3REYXRhKGRhdGEpIHsKICAgICAgdGhpcy5zZWxlY3RMYWJlbFNob3cgPSBmYWxzZTsKICAgICAgdGhpcy5zZWxlY3REYXRhTGFiZWwgPSBkYXRhIHx8IFtdOwogICAgICBpZiAodGhpcy5zZWxlY3REYXRhTGFiZWwubGVuZ3RoKSB7CiAgICAgICAgdmFyIGFjdGl2ZUlkcyA9IFtdOwogICAgICAgIHRoaXMuc2VsZWN0RGF0YUxhYmVsLm1hcChmdW5jdGlvbiAoaXRlbSkgewogICAgICAgICAgYWN0aXZlSWRzLnB1c2goaXRlbS5pZCk7CiAgICAgICAgfSk7CiAgICAgICAgdGhpcy51c2VyRnJvbS5sYWJlbF9pZCA9IGFjdGl2ZUlkcy5qb2luKCcsJyk7CiAgICAgICAgdGhpcy5nZXRMaXN0KCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy51c2VyRnJvbS5sYWJlbF9pZCA9ICcnOwogICAgICB9CiAgICB9LAogICAgaGFuZGxlQ2xvc2U6IGZ1bmN0aW9uIGhhbmRsZUNsb3NlKHRhZykgewogICAgICB2YXIgX3RoaXMwID0gdGhpczsKICAgICAgdmFyIGkgPSB0aGlzLnNlbGVjdERhdGFMYWJlbC5maW5kSW5kZXgoZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgICByZXR1cm4gaXRlbS5pZCA9PT0gdGFnLmlkOwogICAgICB9KTsKICAgICAgaWYgKGkgIT09IC0xKSB7CiAgICAgICAgdGhpcy5zZWxlY3REYXRhTGFiZWwuc3BsaWNlKGksIDEpOwogICAgICB9CiAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHsKICAgICAgICBpZiAoX3RoaXMwLnNlbGVjdERhdGFMYWJlbC5sZW5ndGgpIHsKICAgICAgICAgIHZhciBhY3RpdmVJZHMgPSBbXTsKICAgICAgICAgIF90aGlzMC5zZWxlY3REYXRhTGFiZWwubWFwKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICAgICAgIGFjdGl2ZUlkcy5wdXNoKGl0ZW0uaWQpOwogICAgICAgICAgfSk7CiAgICAgICAgICBfdGhpczAudXNlckZyb20ubGFiZWxfaWQgPSBhY3RpdmVJZHMuam9pbignLCcpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBfdGhpczAudXNlckZyb20ubGFiZWxfaWQgPSAnJzsKICAgICAgICB9CiAgICAgIH0pOwogICAgICAvLyB0aGlzLnVzZXJTZWFyY2hzKCk7CiAgICB9LAogICAgLy8g5om56YeP6K6+572u5qCH562+CiAgICBhY3RpdmVEYXRhOiBmdW5jdGlvbiBhY3RpdmVEYXRhKGRhdGEpIHsKICAgICAgdmFyIF90aGlzMSA9IHRoaXM7CiAgICAgIHZhciBsYWJlbHMgPSBbXTsKICAgICAgaWYgKCFkYXRhLmxlbmd0aCkgcmV0dXJuOwogICAgICBkYXRhLm1hcChmdW5jdGlvbiAoaSkgewogICAgICAgIGxhYmVscy5wdXNoKGkuaWQpOwogICAgICB9KTsKICAgICAgc2F2ZVNldExhYmVsKHsKICAgICAgICB1aWRzOiB0aGlzLmlkcy5qb2luKCcsJyksCiAgICAgICAgbGFiZWxfaWQ6IGxhYmVscwogICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICBfdGhpczEubGFiZWxTaG93ID0gZmFsc2U7CiAgICAgICAgX3RoaXMxLnNlbGVjdGVkSWRzID0gbmV3IFNldCgpOwogICAgICAgIF90aGlzMS5nZXRMaXN0KCk7CiAgICAgICAgX3RoaXMxLiRtZXNzYWdlLnN1Y2Nlc3MocmVzLm1zZyk7CiAgICAgIH0pOwogICAgfSwKICAgIC8v5piv5ZCm5Li65LuY6LS55Lya5ZGY77ybCiAgICBjaGFuZ2VNZW1iZXI6IGZ1bmN0aW9uIGNoYW5nZU1lbWJlcigpIHsKICAgICAgdGhpcy51c2VyRnJvbS5wYWdlID0gMTsKICAgICAgdGhpcy5nZXRMaXN0KCk7CiAgICB9LAogICAgLy8g6YCJ5oup5Zu95a62CiAgICBjaGFuZ2VDb3VudHJ5OiBmdW5jdGlvbiBjaGFuZ2VDb3VudHJ5KCkgewogICAgICBpZiAodGhpcy51c2VyRnJvbS5jb3VudHJ5ID09PSAnYWJyb2FkJyB8fCAhdGhpcy51c2VyRnJvbS5jb3VudHJ5KSB7CiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGEgPSBbXTsKICAgICAgICB0aGlzLnVzZXJGcm9tLnByb3ZpbmNlID0gJyc7CiAgICAgICAgdGhpcy51c2VyRnJvbS5jaXR5ID0gJyc7CiAgICAgICAgdGhpcy5hZGRyZXNzID0gW107CiAgICAgIH0KICAgIH0sCiAgICAvLyDpgInmi6nlnLDlnYAKICAgIGhhbmRsZUNoYW5nZTogZnVuY3Rpb24gaGFuZGxlQ2hhbmdlKHNlbGVjdGVkRGF0YSkgewogICAgICB0aGlzLnNlbGVjdGVkRGF0YSA9IHNlbGVjdGVkRGF0YS5tYXAoZnVuY3Rpb24gKG8pIHsKICAgICAgICByZXR1cm4gby5sYWJlbDsKICAgICAgfSk7CiAgICAgIHRoaXMudXNlckZyb20ucHJvdmluY2UgPSB0aGlzLnNlbGVjdGVkRGF0YVswXTsKICAgICAgdGhpcy51c2VyRnJvbS5jaXR5ID0gdGhpcy5zZWxlY3RlZERhdGFbMV07CiAgICB9LAogICAgLy8g5YW35L2T5pel5pyfCiAgICBvbmNoYW5nZVRpbWU6IGZ1bmN0aW9uIG9uY2hhbmdlVGltZShlLCB0eXBlKSB7CiAgICAgIHRoaXMudXNlckZyb21bdHlwZV0gPSBlID8gZS5qb2luKCctJykgOiAnJzsKICAgIH0sCiAgICB1c2VyRGV0YWlsOiBmdW5jdGlvbiB1c2VyRGV0YWlsKHJvdykgewogICAgICB0aGlzLiRyZWZzLnVzZXJEZXRhaWxzLm1vZGFscyA9IHRydWU7CiAgICAgIHRoaXMuJHJlZnMudXNlckRldGFpbHMuZ2V0RGV0YWlscyhyb3cudWlkKTsKICAgIH0sCiAgICAvLyDmk43kvZwKICAgIGNoYW5nZU1lbnU6IGZ1bmN0aW9uIGNoYW5nZU1lbnUocm93LCBuYW1lLCBpbmRleCkgewogICAgICB2YXIgX3RoaXMxMCA9IHRoaXM7CiAgICAgIHZhciB1aWQgPSBbXTsKICAgICAgdWlkLnB1c2gocm93LnVpZCk7CiAgICAgIHZhciB1aWRzID0gewogICAgICAgIHVpZHM6IHVpZAogICAgICB9OwogICAgICBzd2l0Y2ggKG5hbWUpIHsKICAgICAgICBjYXNlICcxJzoKICAgICAgICAgIHRoaXMuZWRpdChyb3cpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnMic6CiAgICAgICAgICB0aGlzLmdldE90aGVyRnJvbShyb3cudWlkLCAnbW9uZXknKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJzMnOgogICAgICAgICAgdGhpcy5naXZlTGV2ZWxUaW1lKHJvdy51aWQpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnNCc6CiAgICAgICAgICB0aGlzLmRlbChyb3csICfmuIXpmaQg44CQICcgKyB0aGlzLnRlblRleHQocm93Lm5pY2tuYW1lKSArICcg44CR55qE5Lya5ZGY562J57qnJywgaW5kZXgsICd1c2VyJyk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICc1JzoKICAgICAgICAgIHRoaXMuJG1vZGFsRm9ybSh1c2VyU2V0R3JvdXAodWlkcykpLnRoZW4oZnVuY3Rpb24gKCkgewogICAgICAgICAgICByZXR1cm4gX3RoaXMxMC5nZXRMaXN0KCk7CiAgICAgICAgICB9KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJzYnOgogICAgICAgICAgdGhpcy5vcGVuTGFiZWwocm93KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJzcnOgogICAgICAgICAgdGhpcy5lZGl0Uyhyb3cpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnOCc6CiAgICAgICAgICB0aGlzLmdldE90aGVyRnJvbShyb3cudWlkLCAncG9pbnQnKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICB0aGlzLmRlbChyb3csICfop6PpmaTjgJAgJyArIHRoaXMudGVuVGV4dChyb3cubmlja25hbWUpICsgJyDjgJHnmoTkuIrnuqfmjqjlub/kuronLCBpbmRleCwgJ3R1aWd1YW5nJyk7CiAgICAgIH0KICAgIH0sCiAgICB0ZW5UZXh0OiBmdW5jdGlvbiB0ZW5UZXh0KHN0cikgewogICAgICBpZiAoc3RyLmxlbmd0aCA+IDEwKSB7CiAgICAgICAgLy/lpoLmnpzlrZfnrKbplb/luqbotoXov4cxMO+8jOWQjumdoueahOWtl+espuWwseWPmOaIkC4uLuWPr+iHquihjOiwg+aVtOmVv+W6puWSjOS7o+abv+Wtl+espgogICAgICAgIHN0ciA9IHN0ci5zdWJzdHIoMCwgMTApICsgJy4uLic7IC8v5oiq5Y+W5LuO56ys5LiA5Liq5a2X56ym5byA5aeL77yM5b6A5ZCO5Y+WMTDkuKrlrZfnrKbvvIzliankvZnnmoTnlKguLi7ku6Pmm78KICAgICAgfQogICAgICByZXR1cm4gc3RyOwogICAgfSwKICAgIG9wZW5MYWJlbDogZnVuY3Rpb24gb3BlbkxhYmVsKHJvdykgewogICAgICB0aGlzLmxhYmVsU2hvdyA9IHRydWU7CiAgICAgIHRoaXMubGFiZWxBY3RpdmUudWlkID0gcm93LnVpZDsKICAgIH0sCiAgICBvcGVuU2VsZWN0TGFiZWw6IGZ1bmN0aW9uIG9wZW5TZWxlY3RMYWJlbCgpIHsKICAgICAgdGhpcy5zZWxlY3RMYWJlbFNob3cgPSB0cnVlOwogICAgfSwKICAgIGVkaXRTOiBmdW5jdGlvbiBlZGl0Uyhyb3cpIHsKICAgICAgdGhpcy5wcm9tb3RlclNob3cgPSB0cnVlOwogICAgICB0aGlzLmZvcm1JbmxpbmUudWlkID0gcm93LnVpZDsKICAgIH0sCiAgICBjdXN0b21lcjogZnVuY3Rpb24gY3VzdG9tZXIoKSB7CiAgICAgIHRoaXMuY3VzdG9tZXJTaG93ID0gdHJ1ZTsKICAgIH0sCiAgICBpbWFnZU9iamVjdDogZnVuY3Rpb24gaW1hZ2VPYmplY3QoZSkgewogICAgICB0aGlzLmN1c3RvbWVyU2hvdyA9IGZhbHNlOwogICAgICB0aGlzLmZvcm1JbmxpbmUuc3ByZWFkX3VpZCA9IGUudWlkOwogICAgICB0aGlzLmZvcm1JbmxpbmUuaW1hZ2UgPSBlLmltYWdlOwogICAgfSwKICAgIGNhbmNlbDogZnVuY3Rpb24gY2FuY2VsKG5hbWUpIHsKICAgICAgdGhpcy5wcm9tb3RlclNob3cgPSBmYWxzZTsKICAgICAgdGhpcy4kcmVmc1tuYW1lXS5yZXNldEZpZWxkcygpOwogICAgICB0aGlzLmZvcm1JbmxpbmUgPSB7CiAgICAgICAgdWlkOiAwLAogICAgICAgIHNwcmVhZF91aWQ6IDAsCiAgICAgICAgaW1hZ2U6ICcnCiAgICAgIH07CiAgICB9LAogICAgLy8g6LWg6YCB5Lya5ZGY562J57qnCiAgICBnaXZlTGV2ZWw6IGZ1bmN0aW9uIGdpdmVMZXZlbChpZCkgewogICAgICB2YXIgX3RoaXMxMSA9IHRoaXM7CiAgICAgIHRoaXMuJG1vZGFsRm9ybShnaXZlTGV2ZWxBcGkoaWQpKS50aGVuKGZ1bmN0aW9uICgpIHsKICAgICAgICByZXR1cm4gX3RoaXMxMS5nZXRMaXN0KDEpOwogICAgICB9KTsKCiAgICAgIC8vIGdpdmVMZXZlbEFwaShpZCkKICAgICAgLy8gICAudGhlbihhc3luYyAocmVzKSA9PiB7CiAgICAgIC8vICAgICBpZiAocmVzLmRhdGEuc3RhdHVzID09PSBmYWxzZSkgewogICAgICAvLyAgICAgICByZXR1cm4gdGhpcy4kYXV0aExhcHNlKHJlcy5kYXRhKTsKICAgICAgLy8gICAgIH0KCiAgICAgIC8vICAgICB0aGlzLkZyb21EYXRhID0gcmVzLmRhdGE7CiAgICAgIC8vICAgICB0aGlzLiRyZWZzLmVkaXRzLm1vZGFscyA9IHRydWU7CiAgICAgIC8vICAgfSkKICAgICAgLy8gICAuY2F0Y2goKHJlcykgPT4gewogICAgICAvLyAgICAgdGhpcy4kbWVzc2FnZS5lcnJvcihyZXMubXNnKTsKICAgICAgLy8gICB9KTsKICAgIH0sCiAgICAvLyDotaDpgIHkvJrlkZjnrYnnuqcKICAgIGdpdmVMZXZlbFRpbWU6IGZ1bmN0aW9uIGdpdmVMZXZlbFRpbWUoaWQpIHsKICAgICAgdmFyIF90aGlzMTIgPSB0aGlzOwogICAgICB0aGlzLiRtb2RhbEZvcm0oZ2l2ZUxldmVsVGltZUFwaShpZCkpLnRoZW4oZnVuY3Rpb24gKCkgewogICAgICAgIHJldHVybiBfdGhpczEyLmdldExpc3QoMSk7CiAgICAgIH0pOwoKICAgICAgLy8gZ2l2ZUxldmVsVGltZUFwaShpZCkKICAgICAgLy8gICAudGhlbihhc3luYyAocmVzKSA9PiB7CiAgICAgIC8vICAgICBpZiAocmVzLmRhdGEuc3RhdHVzID09PSBmYWxzZSkgewogICAgICAvLyAgICAgICByZXR1cm4gdGhpcy4kYXV0aExhcHNlKHJlcy5kYXRhKTsKICAgICAgLy8gICAgIH0KICAgICAgLy8gICAgIHRoaXMuRnJvbURhdGEgPSByZXMuZGF0YTsKICAgICAgLy8gICAgIHRoaXMuJHJlZnMuZWRpdHMubW9kYWxzID0gdHJ1ZTsKICAgICAgLy8gICB9KQogICAgICAvLyAgIC5jYXRjaCgocmVzKSA9PiB7CiAgICAgIC8vICAgICB0aGlzLiRtZXNzYWdlLmVycm9yKHJlcy5tc2cpOwogICAgICAvLyAgIH0pOwogICAgfSwKICAgIC8vIOWIoOmZpAogICAgZGVsOiBmdW5jdGlvbiBkZWwocm93LCB0aXQsIG51bSwgbmFtZSkgewogICAgICB2YXIgX3RoaXMxMyA9IHRoaXM7CiAgICAgIHZhciBkZWxmcm9tRGF0YSA9IHsKICAgICAgICB0aXRsZTogdGl0LAogICAgICAgIG51bTogbnVtLAogICAgICAgIHVybDogbmFtZSA9PT0gJ3VzZXInID8gInVzZXIvZGVsX2xldmVsLyIuY29uY2F0KHJvdy51aWQpIDogImFnZW50L3N0YWlyL2RlbGV0ZV9zcHJlYWQvIi5jb25jYXQocm93LnVpZCksCiAgICAgICAgbWV0aG9kOiBuYW1lID09PSAndXNlcicgPyAnREVMRVRFJyA6ICdQVVQnLAogICAgICAgIGlkczogJycsCiAgICAgICAgd2lkdGg6IDYwMAogICAgICB9OwogICAgICB0aGlzLiRtb2RhbFN1cmUoZGVsZnJvbURhdGEpLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgIF90aGlzMTMuJG1lc3NhZ2Uuc3VjY2VzcyhyZXMubXNnKTsKICAgICAgICBfdGhpczEzLmdldExpc3QoKTsKICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKHJlcykgewogICAgICAgIF90aGlzMTMuJG1lc3NhZ2UuZXJyb3IocmVzLm1zZyk7CiAgICAgIH0pOwogICAgfSwKICAgIC8vIOa4hemZpOS8muWRmOWIoOmZpOaIkOWKnwogICAgc3VibWl0TW9kZWw6IGZ1bmN0aW9uIHN1Ym1pdE1vZGVsKCkgewogICAgICB0aGlzLmdldExpc3QoKTsKICAgIH0sCiAgICAvLyDkvJrlkZjliJfooagKICAgIGdldExpc3Q6IGZ1bmN0aW9uIGdldExpc3QoKSB7CiAgICAgIHZhciBfdGhpczE0ID0gdGhpczsKICAgICAgLy8gaWYgKHRoaXMuc2VsZWN0RGF0YUxhYmVsLmxlbmd0aCkgewogICAgICAvLyAgIGxldCBhY3RpdmVJZHMgPSBbXTsKICAgICAgLy8gICB0aGlzLnNlbGVjdERhdGFMYWJlbC5mb3JFYWNoKChpdGVtKSA9PiB7CiAgICAgIC8vICAgICBhY3RpdmVJZHMucHVzaChpdGVtLmlkKTsKICAgICAgLy8gICB9KTsKICAgICAgLy8gICB0aGlzLnVzZXJGcm9tLmxhYmVsX2lkID0gYWN0aXZlSWRzLmpvaW4oJywnKTsKICAgICAgLy8gfQogICAgICB0aGlzLnVzZXJGcm9tLnVzZXJfdHlwZSA9IHRoaXMudXNlckZyb20udXNlcl90eXBlIHx8ICcnOwogICAgICB0aGlzLnVzZXJGcm9tLnN0YXR1cyA9IHRoaXMudXNlckZyb20uc3RhdHVzIHx8ICcnOwogICAgICB0aGlzLnVzZXJGcm9tLnNleCA9IHRoaXMudXNlckZyb20uc2V4IHx8ICcnOwogICAgICB0aGlzLnVzZXJGcm9tLmlzX3Byb21vdGVyID0gdGhpcy51c2VyRnJvbS5pc19wcm9tb3RlciB8fCAnJzsKICAgICAgdGhpcy51c2VyRnJvbS5jb3VudHJ5ID0gdGhpcy51c2VyRnJvbS5jb3VudHJ5IHx8ICcnOwogICAgICB0aGlzLnVzZXJGcm9tLnBheV9jb3VudCA9IHRoaXMucGF5X2NvdW50ID09PSAnYWxsJyA/ICcnIDogdGhpcy5wYXlfY291bnQ7CiAgICAgIHRoaXMudXNlckZyb20udXNlcl90aW1lX3R5cGUgPSB0aGlzLnVzZXJfdGltZV90eXBlID09PSAnYWxsJyA/ICcnIDogdGhpcy51c2VyX3RpbWVfdHlwZTsKICAgICAgdGhpcy51c2VyRnJvbS5maWVsZF9rZXkgPSB0aGlzLmZpZWxkX2tleSA9PT0gJ2FsbCcgPyAnJyA6IHRoaXMuZmllbGRfa2V5OwogICAgICB0aGlzLnVzZXJGcm9tLmxldmVsID0gdGhpcy5sZXZlbCA9PT0gJ2FsbCcgPyAnJyA6IHRoaXMubGV2ZWw7CiAgICAgIHRoaXMudXNlckZyb20uZ3JvdXBfaWQgPSB0aGlzLmdyb3VwX2lkID09PSAnYWxsJyA/ICcnIDogdGhpcy5ncm91cF9pZDsKICAgICAgdGhpcy51c2VyRnJvbS5hZ2VudF9sZXZlbCA9IHRoaXMuYWdlbnRfbGV2ZWwgPT09ICdhbGwnID8gJycgOiB0aGlzLmFnZW50X2xldmVsOwogICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlOwogICAgICB1c2VyTGlzdCh0aGlzLnVzZXJGcm9tKS50aGVuKC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIF9yZWYyID0gX2FzeW5jVG9HZW5lcmF0b3IoLyojX19QVVJFX18qL19yZWdlbmVyYXRvcigpLm0oZnVuY3Rpb24gX2NhbGxlZTIocmVzKSB7CiAgICAgICAgICB2YXIgZGF0YTsKICAgICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3IoKS53KGZ1bmN0aW9uIChfY29udGV4dDIpIHsKICAgICAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQyLm4pIHsKICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICBkYXRhID0gcmVzLmRhdGE7CiAgICAgICAgICAgICAgICBfdGhpczE0LnVzZXJMaXN0cyA9IGRhdGEubGlzdDsKICAgICAgICAgICAgICAgIF90aGlzMTQudG90YWwgPSBkYXRhLmNvdW50OwogICAgICAgICAgICAgICAgX3RoaXMxNC5sb2FkaW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgICBfdGhpczE0LiRuZXh0VGljayhmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgIF90aGlzMTQuc2V0Q2hlY2tlZCgpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Mi5hKDIpOwogICAgICAgICAgICB9CiAgICAgICAgICB9LCBfY2FsbGVlMik7CiAgICAgICAgfSkpOwogICAgICAgIHJldHVybiBmdW5jdGlvbiAoX3gyKSB7CiAgICAgICAgICByZXR1cm4gX3JlZjIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgICB9OwogICAgICB9KCkpLmNhdGNoKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICBfdGhpczE0LmxvYWRpbmcgPSBmYWxzZTsKICAgICAgICBfdGhpczE0LiRtZXNzYWdlLmVycm9yKHJlcy5tc2cpOwogICAgICB9KTsKICAgIH0sCiAgICAvLyDnlKjmiLflr7zlh7oKICAgIGV4cG9ydExpc3Q6IGZ1bmN0aW9uIGV4cG9ydExpc3QoKSB7CiAgICAgIHZhciBfdGhpczE1ID0gdGhpczsKICAgICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IoKS5tKGZ1bmN0aW9uIF9jYWxsZWUzKCkgewogICAgICAgIHZhciB0aCwgZmlsZWtleSwgZGF0YSwgZmlsZU5hbWUsIGV4Y2VsRGF0YSwgaSwgbGViRGF0YTsKICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yKCkudyhmdW5jdGlvbiAoX2NvbnRleHQzKSB7CiAgICAgICAgICB3aGlsZSAoMSkgc3dpdGNoIChfY29udGV4dDMubikgewogICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgaWYgKF90aGlzMTUuaWRzLmxlbmd0aCkgewogICAgICAgICAgICAgICAgX3RoaXMxNS51c2VyRnJvbS5pZHMgPSBfdGhpczE1LmlkczsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX3RoaXMxNS51c2VyRnJvbS51c2VyX3R5cGUgPSBfdGhpczE1LnVzZXJGcm9tLnVzZXJfdHlwZSB8fCAnJzsKICAgICAgICAgICAgICBfdGhpczE1LnVzZXJGcm9tLnN0YXR1cyA9IF90aGlzMTUudXNlckZyb20uc3RhdHVzIHx8ICcnOwogICAgICAgICAgICAgIF90aGlzMTUudXNlckZyb20uc2V4ID0gX3RoaXMxNS51c2VyRnJvbS5zZXggfHwgJyc7CiAgICAgICAgICAgICAgX3RoaXMxNS51c2VyRnJvbS5pc19wcm9tb3RlciA9IF90aGlzMTUudXNlckZyb20uaXNfcHJvbW90ZXIgfHwgJyc7CiAgICAgICAgICAgICAgX3RoaXMxNS51c2VyRnJvbS5jb3VudHJ5ID0gX3RoaXMxNS51c2VyRnJvbS5jb3VudHJ5IHx8ICcnOwogICAgICAgICAgICAgIF90aGlzMTUudXNlckZyb20ucGF5X2NvdW50ID0gX3RoaXMxNS5wYXlfY291bnQgPT09ICdhbGwnID8gJycgOiBfdGhpczE1LnBheV9jb3VudDsKICAgICAgICAgICAgICBfdGhpczE1LnVzZXJGcm9tLnVzZXJfdGltZV90eXBlID0gX3RoaXMxNS51c2VyX3RpbWVfdHlwZSA9PT0gJ2FsbCcgPyAnJyA6IF90aGlzMTUudXNlcl90aW1lX3R5cGU7CiAgICAgICAgICAgICAgX3RoaXMxNS51c2VyRnJvbS5maWVsZF9rZXkgPSBfdGhpczE1LmZpZWxkX2tleSA9PT0gJ2FsbCcgPyAnJyA6IF90aGlzMTUuZmllbGRfa2V5OwogICAgICAgICAgICAgIF90aGlzMTUudXNlckZyb20ubGV2ZWwgPSBfdGhpczE1LmxldmVsID09PSAnYWxsJyA/ICcnIDogX3RoaXMxNS5sZXZlbDsKICAgICAgICAgICAgICBfdGhpczE1LnVzZXJGcm9tLmdyb3VwX2lkID0gX3RoaXMxNS5ncm91cF9pZCA9PT0gJ2FsbCcgPyAnJyA6IF90aGlzMTUuZ3JvdXBfaWQ7CiAgICAgICAgICAgICAgX3RoaXMxNS51c2VyRnJvbS5hZ2VudF9sZXZlbCA9IF90aGlzMTUuYWdlbnRfbGV2ZWwgPT09ICdhbGwnID8gJycgOiBfdGhpczE1LmFnZW50X2xldmVsOwogICAgICAgICAgICAgIHRoID0gW10sIGZpbGVrZXkgPSBbXSwgZGF0YSA9IFtdLCBmaWxlTmFtZSA9ICcnOyAvLyAgIGxldCBmaWxlTmFtZSA9ICIiOwogICAgICAgICAgICAgIGV4Y2VsRGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoX3RoaXMxNS51c2VyRnJvbSkpOwogICAgICAgICAgICAgIGV4Y2VsRGF0YS5wYWdlID0gMTsKICAgICAgICAgICAgICBpID0gMDsKICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgIGlmICghKGkgPCBleGNlbERhdGEucGFnZSArIDEpKSB7CiAgICAgICAgICAgICAgICBfY29udGV4dDMubiA9IDU7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX2NvbnRleHQzLm4gPSAyOwogICAgICAgICAgICAgIHJldHVybiBfdGhpczE1LmdldEV4Y2VsRGF0YShleGNlbERhdGEpOwogICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgbGViRGF0YSA9IF9jb250ZXh0My52OwogICAgICAgICAgICAgIGlmICghZmlsZU5hbWUpIGZpbGVOYW1lID0gbGViRGF0YS5maWxlbmFtZTsKICAgICAgICAgICAgICBpZiAoIWZpbGVrZXkubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICBmaWxla2V5ID0gbGViRGF0YS5maWxlS2V5OwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoIXRoLmxlbmd0aCkgdGggPSBsZWJEYXRhLmhlYWRlcjsKICAgICAgICAgICAgICBpZiAoIWxlYkRhdGEuZXhwb3J0Lmxlbmd0aCkgewogICAgICAgICAgICAgICAgX2NvbnRleHQzLm4gPSAzOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGRhdGEgPSBkYXRhLmNvbmNhdChsZWJEYXRhLmV4cG9ydCk7CiAgICAgICAgICAgICAgZXhjZWxEYXRhLnBhZ2UrKzsKICAgICAgICAgICAgICBfY29udGV4dDMubiA9IDQ7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgICBfdGhpczE1LiRleHBvcnRFeGNlbCh0aCwgZmlsZWtleSwgZmlsZU5hbWUsIGRhdGEpOwogICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDMuYSgyKTsKICAgICAgICAgICAgY2FzZSA0OgogICAgICAgICAgICAgIGkrKzsKICAgICAgICAgICAgICBfY29udGV4dDMubiA9IDE7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgNToKICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQzLmEoMik7CiAgICAgICAgICB9CiAgICAgICAgfSwgX2NhbGxlZTMpOwogICAgICB9KSkoKTsKICAgIH0sCiAgICBnZXRFeGNlbERhdGE6IGZ1bmN0aW9uIGdldEV4Y2VsRGF0YShleGNlbERhdGEpIHsKICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgICBleHBvcnRVc2VyTGlzdChleGNlbERhdGEpLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgICAgcmVzb2x2ZShyZXMuZGF0YSk7CiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgfSwKICAgIHBhZ2VDaGFuZ2U6IGZ1bmN0aW9uIHBhZ2VDaGFuZ2UoKSB7CiAgICAgIHRoaXMuc2VsZWN0aW9uTGlzdCA9IFtdOwogICAgICB0aGlzLmdldExpc3QoKTsKICAgIH0sCiAgICAvLyDmkJzntKIKICAgIHVzZXJTZWFyY2hzOiBmdW5jdGlvbiB1c2VyU2VhcmNocygpIHsKICAgICAgdGhpcy51c2VyRnJvbS5wYWdlID0gMTsKICAgICAgdGhpcy5nZXRMaXN0KCk7CiAgICB9LAogICAgLy8g6YeN572uCiAgICByZXNldDogZnVuY3Rpb24gcmVzZXQobmFtZSkgewogICAgICB0aGlzLnVzZXJGcm9tID0gX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eSh7CiAgICAgICAgbGFiZWxfaWQ6ICcnLAogICAgICAgIHN0YXR1czogJycsCiAgICAgICAgc2V4OiAnJywKICAgICAgICBpc19wcm9tb3RlcjogJycsCiAgICAgICAgY291bnRyeTogJycsCiAgICAgICAgaXNNZW1iZXI6ICcnLAogICAgICAgIHBheV9jb3VudF9udW06IFsnJywgJyddLAogICAgICAgIGJhbGFuY2U6IFsnJywgJyddLAogICAgICAgIGludGVncmFsOiBbJycsICcnXSwKICAgICAgICBwYXlfY291bnRfbW9uZXk6IFsnJywgJyddLAogICAgICAgIHJlY2hhcmdlX2NvdW50OiBbJycsICcnXSwKICAgICAgICB1c2VyX3RpbWVfdHlwZTogJycsCiAgICAgICAgdXNlcl90aW1lOiAnJywKICAgICAgICBiZWZvcmVfcGF5X3RpbWU6ICcnLAogICAgICAgIG5pY2tuYW1lOiAnJywKICAgICAgICBwcm92aW5jZTogJycsCiAgICAgICAgY2l0eTogJycsCiAgICAgICAgcGFnZTogMSwKICAgICAgICBsaW1pdDogMTUsCiAgICAgICAgbGV2ZWw6ICcnLAogICAgICAgIGdyb3VwX2lkOiAnJywKICAgICAgICBhZ2VudF9sZXZlbDogJycsCiAgICAgICAgZmllbGRfa2V5OiAnJwogICAgICB9LCAicGFnZSIsIDEpLCAibGltaXQiLCAyMCk7CiAgICAgIHRoaXMuZmllbGRfa2V5ID0gJyc7CiAgICAgIHRoaXMubGV2ZWwgPSAnJzsKICAgICAgdGhpcy5ncm91cF9pZCA9ICcnOwogICAgICB0aGlzLmFnZW50X2xldmVsID0gJyc7CiAgICAgIHRoaXMuZGF0YUxhYmVsID0gW107CiAgICAgIHRoaXMuc2VsZWN0RGF0YUxhYmVsID0gW107CiAgICAgIHRoaXMudXNlcl90aW1lX3R5cGUgPSAnJzsKICAgICAgdGhpcy5wYXlfY291bnQgPSAnJzsKICAgICAgdGhpcy50aW1lVmFsID0gW107CiAgICAgIHRoaXMuc2VsZWN0ZWRJZHMgPSBuZXcgU2V0KCk7CiAgICAgIHRoaXMuZ2V0TGlzdCgpOwogICAgfSwKICAgIC8vIOiOt+WPlue8lui+keihqOWNleaVsOaNrgogICAgZ2V0VXNlckZyb206IGZ1bmN0aW9uIGdldFVzZXJGcm9tKGlkKSB7CiAgICAgIHZhciBfdGhpczE2ID0gdGhpczsKICAgICAgZ2V0VXNlckluZm8oaWQpLnRoZW4oLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHsKICAgICAgICB2YXIgX3JlZjMgPSBfYXN5bmNUb0dlbmVyYXRvcigvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yKCkubShmdW5jdGlvbiBfY2FsbGVlNChyZXMpIHsKICAgICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3IoKS53KGZ1bmN0aW9uIChfY29udGV4dDQpIHsKICAgICAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQ0Lm4pIHsKICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICBfdGhpczE2Lm1vZGFscyA9IHRydWU7CiAgICAgICAgICAgICAgICBfdGhpczE2LnVzZXJEYXRhID0gcmVzLmRhdGE7CiAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0NC5hKDIpOwogICAgICAgICAgICB9CiAgICAgICAgICB9LCBfY2FsbGVlNCk7CiAgICAgICAgfSkpOwogICAgICAgIHJldHVybiBmdW5jdGlvbiAoX3gzKSB7CiAgICAgICAgICByZXR1cm4gX3JlZjMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgICB9OwogICAgICB9KCkpLmNhdGNoKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICBfdGhpczE2LiRtZXNzYWdlLmVycm9yKHJlcy5tc2cpOwogICAgICB9KTsKICAgIH0sCiAgICAvLyDojrflj5bnp6/liIbkvZnpop3ooajljZUKICAgIGdldE90aGVyRnJvbTogZnVuY3Rpb24gZ2V0T3RoZXJGcm9tKGlkLCB0eXBlKSB7CiAgICAgIHZhciBfdGhpczE3ID0gdGhpczsKICAgICAgdGhpcy4kbW9kYWxGb3JtKGVkaXRPdGhlckFwaShpZCwgdHlwZSkpLnRoZW4oZnVuY3Rpb24gKCkgewogICAgICAgIHJldHVybiBfdGhpczE3LmdldExpc3QoMSk7CiAgICAgIH0pOwogICAgfSwKICAgIC8vIOS/ruaUueeKtuaAgQogICAgb25jaGFuZ2VJc1Nob3c6IGZ1bmN0aW9uIG9uY2hhbmdlSXNTaG93KHJvdykgewogICAgICB2YXIgX3RoaXMxOCA9IHRoaXM7CiAgICAgIHZhciBkYXRhID0gewogICAgICAgIGlkOiByb3cudWlkLAogICAgICAgIHN0YXR1czogcm93LnN0YXR1cwogICAgICB9OwogICAgICBpc1Nob3dBcGkoZGF0YSkudGhlbigvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBfcmVmNCA9IF9hc3luY1RvR2VuZXJhdG9yKC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IoKS5tKGZ1bmN0aW9uIF9jYWxsZWU1KHJlcykgewogICAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvcigpLncoZnVuY3Rpb24gKF9jb250ZXh0NSkgewogICAgICAgICAgICB3aGlsZSAoMSkgc3dpdGNoIChfY29udGV4dDUubikgewogICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgIF90aGlzMTguJG1lc3NhZ2Uuc3VjY2VzcyhyZXMubXNnKTsKICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ1LmEoMik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sIF9jYWxsZWU1KTsKICAgICAgICB9KSk7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChfeDQpIHsKICAgICAgICAgIHJldHVybiBfcmVmNC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgICAgIH07CiAgICAgIH0oKSkuY2F0Y2goZnVuY3Rpb24gKHJlcykgewogICAgICAgIF90aGlzMTguJG1lc3NhZ2UuZXJyb3IocmVzLm1zZyk7CiAgICAgIH0pOwogICAgfSwKICAgIC8vIOeCueWHu+WPkemAgeS8mOaDoOWIuAogICAgb25TZW5kOiBmdW5jdGlvbiBvblNlbmQoKSB7CiAgICAgIGlmICh0aGlzLmlkcy5sZW5ndGggPT09IDApIHsKICAgICAgICB0aGlzLiRtZXNzYWdlLndhcm5pbmcoJ+ivt+mAieaLqeimgeWPkemAgeS8mOaDoOWIuOeahOeUqOaItycpOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuJHJlZnMuc2VuZHMubW9kYWxzID0gdHJ1ZTsKICAgICAgICB0aGlzLiRyZWZzLnNlbmRzLmdldExpc3QoKTsKICAgICAgfQogICAgfSwKICAgIC8vIOWPkemAgeWbvuaWh+a2iOaBrwogICAgb25TZW5kUGljOiBmdW5jdGlvbiBvblNlbmRQaWMoKSB7CiAgICAgIGlmICh0aGlzLmlkcy5sZW5ndGggPT09IDApIHsKICAgICAgICB0aGlzLiRtZXNzYWdlLndhcm5pbmcoJ+ivt+mAieaLqeimgeWPkemAgeWbvuaWh+a2iOaBr+eahOeUqOaItycpOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMubW9kYWwxMyA9IHRydWU7CiAgICAgIH0KICAgIH0sCiAgICAvLyDnvJbovpEKICAgIGVkaXQ6IGZ1bmN0aW9uIGVkaXQocm93KSB7CiAgICAgIHRoaXMuZ2V0VXNlckZyb20ocm93LnVpZCk7CiAgICB9LAogICAgLy8g5L+u5pS55oiQ5YqfCiAgICBzdWJtaXRGYWlsOiBmdW5jdGlvbiBzdWJtaXRGYWlsKCkgewogICAgICAvLyB0aGlzLmdldExpc3QoKTsKICAgIH0sCiAgICAvLyDmjpLluo8KICAgIHNvcnRDaGFuZ2VkOiBmdW5jdGlvbiBzb3J0Q2hhbmdlZChlLCBwcm9wcywgb3JkZXIpIHsKICAgICAgdGhpcy51c2VyRnJvbVtlLnByb3BdID0gZS5vcmRlcjsKICAgICAgdGhpcy5nZXRMaXN0KCk7CiAgICB9LAogICAgLy/lhajpgInlkozlj5bmtojlhajpgInml7bop6blj5EKICAgIGhhbmRsZVNlbGVjdEFsbDogZnVuY3Rpb24gaGFuZGxlU2VsZWN0QWxsKHNlbGVjdGlvbikgewogICAgICB2YXIgX3RoaXMxOSA9IHRoaXM7CiAgICAgIHZhciBpZHMgPSBbXTsKICAgICAgc2VsZWN0aW9uLm1hcChmdW5jdGlvbiAoZSkgewogICAgICAgIGlkcy5wdXNoKGUudWlkKTsKICAgICAgfSk7CiAgICAgIHRoaXMuc2VsZWN0ZWRJZHMgPSBpZHM7CiAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHsKICAgICAgICAvL+ehruS/nWRvbeWKoOi9veWujOavlQogICAgICAgIF90aGlzMTkuc2V0Q2hlY2tlZCgpOwogICAgICB9KTsKICAgIH0sCiAgICAvLyAg6YCJ5Lit5p+Q5LiA6KGMCiAgICBoYW5kbGVTZWxlY3RSb3c6IGZ1bmN0aW9uIGhhbmRsZVNlbGVjdFJvdyhzZWxlY3Rpb24sIHJvdykgewogICAgICB2YXIgX3RoaXMyMCA9IHRoaXM7CiAgICAgIHZhciBpZHMgPSBbXTsKICAgICAgc2VsZWN0aW9uLm1hcChmdW5jdGlvbiAoZSkgewogICAgICAgIGlkcy5wdXNoKGUudWlkKTsKICAgICAgfSk7CiAgICAgIHRoaXMuc2VsZWN0ZWRJZHMgPSBpZHM7CiAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHsKICAgICAgICAvL+ehruS/nWRvbeWKoOi9veWujOavlQogICAgICAgIF90aGlzMjAuc2V0Q2hlY2tlZCgpOwogICAgICB9KTsKICAgIH0sCiAgICBzZXRDaGVja2VkOiBmdW5jdGlvbiBzZXRDaGVja2VkKCkgewogICAgICAvL+Wwhm5ldyBTZXQoKei9rOWMluS4uuaVsOe7hAogICAgICB0aGlzLmlkcyA9IF90b0NvbnN1bWFibGVBcnJheSh0aGlzLnNlbGVjdGVkSWRzKTsKICAgICAgLy8g5om+5Yiw57uR5a6a55qEdGFibGXnmoRyZWblr7nlupTnmoRkb23vvIzmib7liLB0YWJsZeeahG9iakRhdGHlr7nosaHvvIxvYmpEYXRh5L+d5a2Y55qE5piv5b2T5YmN6aG155qE5pWw5o2uCiAgICAgIHZhciBvYmpEYXRhID0gdGhpcy4kcmVmcy50YWJsZS5vYmpEYXRhOwogICAgICBmb3IgKHZhciBpbmRleCBpbiBvYmpEYXRhKSB7CiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJZHMuaGFzKG9iakRhdGFbaW5kZXhdLnVpZCkpIHsKICAgICAgICAgIG9iakRhdGFbaW5kZXhdLl9pc0NoZWNrZWQgPSB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KfTs="},null]}
|