{"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\\components\\eipControl\\EipHotSubDialog.vue?vue&type=script&lang=js","dependencies":[{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\src\\components\\eipControl\\EipHotSubDialog.vue","mtime":1733309211891},{"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},{"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:aW1wb3J0IF9yZWFkT25seUVycm9yIGZyb20gIkQ6L2plbmtpbnMvd29ya3NwYWNlL2RhdGFTaGFyZS1mdnVlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9yZWFkT25seUVycm9yLmpzIjsKaW1wb3J0IF90eXBlb2YgZnJvbSAiRDovamVua2lucy93b3Jrc3BhY2UvZGF0YVNoYXJlLWZ2dWUvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZi5qcyI7CmltcG9ydCBfdG9Db25zdW1hYmxlQXJyYXkgZnJvbSAiRDovamVua2lucy93b3Jrc3BhY2UvZGF0YVNoYXJlLWZ2dWUvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5LmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZmlsdGVyLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnNwbGljZS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmZ1bmN0aW9uLm5hbWUuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5jb25zdHJ1Y3Rvci5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLml0ZXJhdG9yLmZpbHRlci5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLml0ZXJhdG9yLmZvci1lYWNoLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuanNvbi5zdHJpbmdpZnkuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3Qua2V5cy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuY29uc3RydWN0b3IuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuZG90LWFsbC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5leGVjLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLnN0aWNreS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC50by1zdHJpbmcuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcucmVwbGFjZS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5zZWFyY2guanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLmZvci1lYWNoLmpzIjsKLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KCmltcG9ydCB7IG1hcFN0YXRlIH0gZnJvbSAidnVleCI7CmltcG9ydCB1dGlscyBmcm9tICJAL3V0aWxzLmpzIjsKaW1wb3J0IHsgTWVzc2FnZSB9IGZyb20gImVsZW1lbnQtdWkiOwpleHBvcnQgZGVmYXVsdCB7CiAgbmFtZTogImh0LWhvdC1zdWJEaWFsb2ciLAogIHByb3BzOiBbInZhbGlkYXRlIiwgInZhbHVlIiwgImJ0bk5hbWUiLCAiYXR0ZXIiLCAic2luZ2xlIiwgImN1c3RkaWFsb2ciXSwKICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkgewogICAgcmV0dXJuIHsKICAgICAgY3VzdG9tRGlhbG9nU2hvd0xpc3Q6IGZhbHNlLAogICAgICBjdXN0b21EaWFsb2dTaG93VHJlZTogZmFsc2UsCiAgICAgIHNlbGVjdE9yZ1Byb3BzOiB7CiAgICAgICAgbGFiZWw6ICJidG5OYW1lIgogICAgICB9LAogICAgICBzdHlsZTogIiIsCiAgICAgIC8v5a+56K+d5qGG5a696auYCiAgICAgIHNlbGVjdE9yZ3M6IG51bGwsCiAgICAgIGlucHV0U3VmZml4SGVpZ2h0OiAzMCwKICAgICAgY29uZmlnOiBudWxsLAogICAgICB1cGRhdGluZzogZmFsc2UsCiAgICAgIGRpc3BsYXlmaWVsZDogW10sCiAgICAgIC8v5pi+56S65a2X5q61CiAgICAgIGN1c3RvbURpYWxvZzoge30sCiAgICAgIC8vCiAgICAgIGNvbW1lbnQ6ICIiLAogICAgICBxdWVyeVBhcmFtOiAiIiwKICAgICAgcHJvcHMxOiBbXSwKICAgICAgc2hvd0RhdGE6IFtdLAogICAgICBjaGVja0JveERhdGFBbGw6IFtdLAogICAgICAvL+mAieS4reWvueixoeeahOmbhuWQiAogICAgICBkZWZhdWx0UHJvcHM6IHsKICAgICAgICBjaGlsZHJlbjogImNoaWxkcmVucyIsCiAgICAgICAgbGFiZWw6ICJsYWJlbCIKICAgICAgfSwKICAgICAgcHJvcHNEYXRhOiBbXSwKICAgICAgcXVlcnlzU2hvdzogZmFsc2UsCiAgICAgIC8v5piv5ZCm5pi+56S65pCc57Si5qGGCiAgICAgIHVuZGVmaW5lZGE6ICIiLAogICAgICBvcE1hcDogewogICAgICAgICdFUSc6ICdFUVVBTCcsCiAgICAgICAgJ0dFJzogJ0dSRUFUX0VRVUFMJywKICAgICAgICAnR1QnOiAnR1JFQVQnLAogICAgICAgICdMVCc6ICdMRVNTJywKICAgICAgICAnTEUnOiAnTEVTU19FUVVBTCcsCiAgICAgICAgJ0lOJzogJ0lOJywKICAgICAgICAnTEsnOiAnTElLRScsCiAgICAgICAgJ0xGSyc6ICdMRUZUX0xJS0UnLAogICAgICAgICdSSEsnOiAnUklHSFRfTElLRScKICAgICAgfQogICAgfTsKICB9LAogIGNvbXB1dGVkOiBtYXBTdGF0ZSh7CiAgICBwYWdpbmF0aW9uOiBmdW5jdGlvbiBwYWdpbmF0aW9uKHN0YXRlKSB7CiAgICAgIHJldHVybiBzdGF0ZS5kaWFsb2cucGFnaW5hdGlvbjsKICAgIH0sCiAgICB0b3RhbDogZnVuY3Rpb24gdG90YWwoc3RhdGUpIHsKICAgICAgcmV0dXJuIHN0YXRlLmRpYWxvZy50b3RhbDsKICAgIH0sCiAgICBkaWFsb2dEYXRhOiBmdW5jdGlvbiBkaWFsb2dEYXRhKHN0YXRlKSB7CiAgICAgIHJldHVybiBzdGF0ZS5kaWFsb2cucm93czsKICAgIH0sCiAgICBpbnB1dFZhbDogZnVuY3Rpb24gaW5wdXRWYWwoKSB7CiAgICAgIGlmICghdGhpcy52YWx1ZSkgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9IGVsc2UgewogICAgICAgIHZhciBuYW1lQXJ5ID0gdGhpcy52YWx1ZS5zcGxpdCgiLCIpOwogICAgICAgIGlmICh0aGlzLnZhbHVlLmluZGV4T2YoInx8IikgPiAwKSB7CiAgICAgICAgICBuYW1lQXJ5ID0gdGhpcy52YWx1ZS5zcGxpdCgifHwiKVswXS5zcGxpdCgiLCIpOwogICAgICAgICAgdGhpcy5zaG93RGF0YSA9IEpTT04ucGFyc2UodGhpcy52YWx1ZS5zcGxpdCgifHwiKVsxXSk7CiAgICAgICAgfQogICAgICAgIHZhciBpZEFyeSA9IG51bGw7CiAgICAgICAgdmFyIGFjY291bnRBcnkgPSBudWxsOwogICAgICAgIHZhciByZXN1bHQgPSBbXTsKICAgICAgICBuYW1lQXJ5LmZvckVhY2goZnVuY3Rpb24gKG0sIGkpIHsKICAgICAgICAgIHZhciBuID0gewogICAgICAgICAgICB2YWx1ZTogbQogICAgICAgICAgfTsKICAgICAgICAgIHJlc3VsdC5wdXNoKG4pOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KICAgIH0sCiAgICBpbnB1dFdyaXRlYWJsZTogZnVuY3Rpb24gaW5wdXRXcml0ZWFibGUoKSB7CiAgICAgIHJldHVybiB1dGlscy5nZXRXcml0ZWFibGUodGhpcy5wZXJtaXNzaW9uKTsKICAgIH0sCiAgICBpbnB1dFZhbGlkYXRlOiBmdW5jdGlvbiBpbnB1dFZhbGlkYXRlKCkgewogICAgICB2YXIgdmFsaWRhdGVPYmogPSB0aGlzLiRzdG9yZS5zdGF0ZS5pbmRleC52YWxpZGF0ZTsKICAgICAgcmV0dXJuIHV0aWxzLmFkZFJlcXVpcmVkT3JOb3QodGhpcy5wZXJtaXNzaW9uLCB0aGlzLnZhbGlkYXRlLCB2YWxpZGF0ZU9iaiwgdGhpcyk7CiAgICB9LAogICAgaW5wdXROYW1lOiBmdW5jdGlvbiBpbnB1dE5hbWUoKSB7CiAgICAgIHJldHVybiB0aGlzLm5hbWUgPyB0aGlzLm5hbWUgOiB1dGlscy5nZXROYW1lKCk7CiAgICB9LAogICAgLy8g5piv5ZCm5pyJ5Zue5aGr6K6+572uCiAgICBiaW5kU2V0OiBmdW5jdGlvbiBiaW5kU2V0KCkgewogICAgICByZXR1cm4gdGhpcy5zZWxlY3RvcmNvbmZpZyA/IHRoaXMuc2VsZWN0b3Jjb25maWcuYmluZCA6IG51bGw7CiAgICB9LAogICAgZ2V0UGxhY2Vob2xkZXI6IGZ1bmN0aW9uIGdldFBsYWNlaG9sZGVyKCkgewogICAgICByZXR1cm4gdGhpcy5jdXN0ZGlhbG9nLm5hbWU7CiAgICB9CiAgfSksCiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHt9LAogIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7CiAgICB0aGlzLiR2YWxpZGF0b3IgPSB0aGlzLiRyb290LiR2YWxpZGF0b3I7CiAgfSwKICB3YXRjaDogewogICAgY3VzdG9tRGlhbG9nU2hvd1RyZWU6IGZ1bmN0aW9uIGN1c3RvbURpYWxvZ1Nob3dUcmVlKG5ld1ZhbCkgewogICAgICBpZiAobmV3VmFsKSB7CiAgICAgICAgdGhpcy5jaGVja0JveERhdGFBbGwgPSBbXTsKICAgICAgICBpZiAodGhpcy5pbnB1dFZhbCAmJiB0aGlzLmlucHV0VmFsLmNvbnN0cnVjdG9yID09IEFycmF5KSB7CiAgICAgICAgICB0aGlzLnNlbGVjdE9yZ3MgPSBfdG9Db25zdW1hYmxlQXJyYXkodGhpcy5pbnB1dFZhbCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuc2VsZWN0T3JncyA9IFtdOwogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIGN1c3RvbURpYWxvZ1Nob3dMaXN0OiBmdW5jdGlvbiBjdXN0b21EaWFsb2dTaG93TGlzdChuZXdWYWwpIHsKICAgICAgaWYgKG5ld1ZhbCkgewogICAgICAgIHRoaXMuY2hlY2tCb3hEYXRhQWxsID0gW107CiAgICAgICAgaWYgKHRoaXMuaW5wdXRWYWwgJiYgdGhpcy5pbnB1dFZhbC5jb25zdHJ1Y3RvciA9PSBBcnJheSkgewogICAgICAgICAgdGhpcy5zZWxlY3RPcmdzID0gX3RvQ29uc3VtYWJsZUFycmF5KHRoaXMuaW5wdXRWYWwpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLnNlbGVjdE9yZ3MgPSBbXTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9LAogIG1ldGhvZHM6IHsKICAgIGhhbmRsZVNpemVDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZVNpemVDaGFuZ2Uoc2l6ZSkgewogICAgICAvL+avj+mhteS4i+aLieaYvuekuuaVsOaNrgogICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgiZGlhbG9nL3NldFBhZ2luYXRpb25TaXplIiwgc2l6ZSk7CiAgICAgIHRoaXMuc2VhcmNoKCk7CiAgICB9LAogICAgaGFuZGxlQ3VycmVudENoYW5nZTogZnVuY3Rpb24gaGFuZGxlQ3VycmVudENoYW5nZShjdXJyZW50UGFnZSkgewogICAgICB2YXIgdGhpc18gPSB0aGlzOwogICAgICBpZiAodGhpcy5zZWxlY3RPcmdzICE9IHVuZGVmaW5lZCAmJiB0aGlzLnNlbGVjdE9yZ3MubGVuZ3RoID4gMCkgewogICAgICAgIHRoaXMuc2VsZWN0T3Jncy5mb3JFYWNoKGZ1bmN0aW9uIChyb3cpIHsKICAgICAgICAgIHZhciByZXMgPSB0aGlzXy5pbmRleEFycmF5KHRoaXNfLmNoZWNrQm94RGF0YUFsbCwgcm93KTsKICAgICAgICAgIGlmIChyZXMgPT0gLTEpIHsKICAgICAgICAgICAgdGhpc18uY2hlY2tCb3hEYXRhQWxsLnB1c2gocm93KTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgICB0aGlzXy5zZWxlY3RPcmdzID0gdGhpc18uY2hlY2tCb3hEYXRhQWxsOwogICAgICAvL+eCueWHu+esrOWHoOmhtQogICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgiZGlhbG9nL3NldFBhZ2luYXRpb25QYWdlTnVtIiwgY3VycmVudFBhZ2UpOwogICAgICB0aGlzLnNlYXJjaCgpOwogICAgfSwKICAgIGNoZWNrTGlzdDogZnVuY3Rpb24gY2hlY2tMaXN0KCkgewogICAgICB2YXIgdGhpc18gPSB0aGlzOwogICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICBpZiAodGhpc18uc2VsZWN0T3JncyAhPSB1bmRlZmluZWQgJiYgdGhpc18uc2VsZWN0T3Jncy5sZW5ndGggPiAwKSB7CiAgICAgICAgICBpZiAodGhpc18uc2VsZWN0T3JncyA9PSB1bmRlZmluZWQgfHwgdGhpc18uc2VsZWN0T3Jncy5sZW5ndGggPT0gMCkgewogICAgICAgICAgICB0aGlzXy5zZWxlY3RPcmdzID0gdGhpc18uY2hlY2tCb3hEYXRhQWxsOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHRoaXNfLnNlbGVjdE9yZ3MgIT0gdW5kZWZpbmVkICYmIHRoaXNfLnNlbGVjdE9yZ3MubGVuZ3RoID4gMCkgewogICAgICAgICAgICB0aGlzXy5zZWxlY3RPcmdzLmZvckVhY2goZnVuY3Rpb24gKHJvdykgewogICAgICAgICAgICAgIHZhciByZXMgPSB0aGlzXy5pbmRleEFycmF5KHRoaXNfLmRpYWxvZ0RhdGEsIHJvdyk7CiAgICAgICAgICAgICAgaWYgKHJlcyAhPSAtMSkgewogICAgICAgICAgICAgICAgdGhpc18uJHJlZnMub3JnVGFibGUudG9nZ2xlUm93U2VsZWN0aW9uKHRoaXNfLmRpYWxvZ0RhdGFbcmVzXSwgdHJ1ZSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKHRoaXNfLnNob3dEYXRhICE9IHVuZGVmaW5lZCAmJiB0aGlzXy5zaG93RGF0YS5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIHRoaXNfLnNob3dEYXRhLmZvckVhY2goZnVuY3Rpb24gKHJvdykgewogICAgICAgICAgICAgIHZhciByZXMgPSB0aGlzXy5pbmRleEFycmF5KHRoaXNfLmRpYWxvZ0RhdGEsIHJvdyk7CiAgICAgICAgICAgICAgaWYgKHJlcyAhPSAtMSkgewogICAgICAgICAgICAgICAgdGhpc18uJHJlZnMub3JnVGFibGUudG9nZ2xlUm93U2VsZWN0aW9uKHRoaXNfLmRpYWxvZ0RhdGFbcmVzXSwgdHJ1ZSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sIDI1MCk7CiAgICB9LAogICAgc2hvd0RpYWxvZzogZnVuY3Rpb24gc2hvd0RpYWxvZyhpdGVtKSB7CiAgICAgIHZhciBfdGhpczIgPSB0aGlzOwogICAgICB2YXIgc2VsZWN0TnVtID0gLTE7CiAgICAgIHZhciBzdWJSZWxhdGlvbk9iaiA9ICQoaXRlbS50YXJnZXQpLnBhcmVudHMoIltzdWItcmVsYXRpb25dIik7CiAgICAgIGlmIChzdWJSZWxhdGlvbk9iai5sZW5ndGggPiAwICYmICQoc3ViUmVsYXRpb25PYmpbMF0pLmF0dHIoInN1Yi1yZWxhdGlvbiIpID09ICJvbmV0b29uZSIpIHsKICAgICAgICBzZWxlY3ROdW0gPSAxOwogICAgICB9CiAgICAgIHZhciBhbGlhcyA9IHRoaXMuY3VzdGRpYWxvZy5jdXN0RGlhbG9nLmFsaWFzOwogICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgiZGlhbG9nL3NldERpYWxvZ0RhdGEiLCBbXSk7CiAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCJmb3JtL2dldEJ5QWxpYXMiLCBhbGlhcykudGhlbihmdW5jdGlvbiAoY3VzdG9tRGlhbG9nKSB7CiAgICAgICAgaWYgKCFjdXN0b21EaWFsb2cgfHwgIWN1c3RvbURpYWxvZy5hbGlhcykgewogICAgICAgICAgTWVzc2FnZS5lcnJvcigi5a+56K+d5qGG5Yir5ZCN44CQIiArIGFsaWFzICsgIuOAkeS4jeWtmOWcqO+8gSIpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBjdXN0b21EaWFsb2cuc2VsZWN0TnVtID0gc2VsZWN0TnVtOwogICAgICAgIHZhciBsaXN0ID0gSlNPTi5wYXJzZShjdXN0b21EaWFsb2cuY29uZGl0aW9uZmllbGQpOwogICAgICAgIHZhciBwYXJhbSA9IHt9OwogICAgICAgIGxpc3QuZm9yRWFjaChmdW5jdGlvbiAoZWxlKSB7CiAgICAgICAgICBpZiAoZWxlLmRlZmF1bHRUeXBlID09ICI0IikgewogICAgICAgICAgICBwYXJhbVtlbGUuZmllbGRdID0gZWxlLmNvbW1lbnQ7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgX3RoaXMyLnN0eWxlID0gImhlaWdodDoiICsgY3VzdG9tRGlhbG9nLmhlaWdodCArICJweCI7CiAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KHBhcmFtKSA9PSAie30iKSB7CiAgICAgICAgICAvL+ayoeacieWKqOaAgeS8oOWFpeeahOWtl+autQogICAgICAgICAgaWYgKGN1c3RvbURpYWxvZy5zdHlsZSA9PSAwKSB7CiAgICAgICAgICAgIF90aGlzMi5jdXN0b21EaWFsb2dTaG93KHsKICAgICAgICAgICAgICBhbGlhczogYWxpYXMsCiAgICAgICAgICAgICAgY3VzdG9tRGlhbG9nOiBjdXN0b21EaWFsb2cKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBfdGhpczIuY3VzdG9tRGlhbG9nVHJlZVNob3coewogICAgICAgICAgICAgIGFsaWFzOiBhbGlhcywKICAgICAgICAgICAgICBjdXN0b21EaWFsb2c6IGN1c3RvbURpYWxvZwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2Uge30KICAgICAgfSk7CiAgICB9LAogICAgaW5kZXhBcnJheTogZnVuY3Rpb24gaW5kZXhBcnJheShhcnJheSwgaXRlbSkgewogICAgICB2YXIgaWQgPSAiIjsKICAgICAgaWYgKF90eXBlb2YoaXRlbSkgPT0gIm9iamVjdCIpIHsKICAgICAgICBpZCA9IGl0ZW0uaWQ7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWQgPSBpdGVtOwogICAgICB9CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAoYXJyYXlbaV0uaWQgPT0gaWQpIHsKICAgICAgICAgIHJldHVybiBpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gLTE7CiAgICB9LAogICAgb25UYWJsZVNlbGVjdDogZnVuY3Rpb24gb25UYWJsZVNlbGVjdChyb3dzLCByb3cpIHsKICAgICAgdmFyIHNlbGVjdGVkID0gcm93cy5sZW5ndGggJiYgcm93cy5pbmRleE9mKHJvdykgIT09IC0xOwogICAgICBpZiAoIXNlbGVjdGVkKSB7CiAgICAgICAgdmFyIHJlcyA9IHRoaXMuaW5kZXhBcnJheSh0aGlzLmNoZWNrQm94RGF0YUFsbCwgcm93KTsKICAgICAgICB0aGlzLmNoZWNrQm94RGF0YUFsbC5zcGxpY2UocmVzLCAxKTsKICAgICAgICBpZiAodGhpcy5jaGVja0JveERhdGFBbGwubGVuZ3RoID09IDApIHsKICAgICAgICAgIHRoaXMuc2VsZWN0T3JncyA9IFtdOwogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIG9yZ1Jvd0NsaWNrOiBmdW5jdGlvbiBvcmdSb3dDbGljayhyb3csIGNvbHVtbiwgZXZlbnQpIHsKICAgICAgaWYgKHRoaXMuY3VzdG9tRGlhbG9nLnNlbGVjdE51bSA9PT0gMSkgewogICAgICAgICQoZXZlbnQuY3VycmVudFRhcmdldC5jaGlsZHJlblswXS5jaGlsZHJlblswXS5jaGlsZHJlblswXSkudHJpZ2dlcigiY2xpY2siKTsKICAgICAgICB0aGlzLnNlbGVjdE9yZ3MgPSBbcm93XTsKICAgICAgfQogICAgICB0aGlzLiRyZWZzLm9yZ1RhYmxlLnRvZ2dsZVJvd1NlbGVjdGlvbihyb3cpOwogICAgfSwKICAgIG9yZ1RhYmxlU2VsZWN0aW9uOiBmdW5jdGlvbiBvcmdUYWJsZVNlbGVjdGlvbihzZWxlY3Rpb24pIHsKICAgICAgaWYgKHRoaXMuY3VzdG9tRGlhbG9nLnNlbGVjdE51bSAhPSAxICYmIHNlbGVjdGlvbiAmJiBzZWxlY3Rpb24ubGVuZ3RoID4gMCkgewogICAgICAgIHRoaXMuc2VsZWN0T3JncyA9IHNlbGVjdGlvbjsKICAgICAgfQogICAgfSwKICAgIGRpYWxvZ0NvbmZpcm06IGZ1bmN0aW9uIGRpYWxvZ0NvbmZpcm0oKSB7CiAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCJkaWFsb2cvc2V0RGlhbG9nRGF0YSIsIFtdKTsKICAgICAgdGhpcy5jdXN0b21EaWFsb2dTaG93TGlzdCA9IGZhbHNlOwogICAgICB0aGlzLmNhbGFjSW5wdXRTdWZmaXhIZWlnaHQoKTsKICAgICAgdGhpcy5zeW5jSW5wdXRWYWx1ZSgpOwogICAgfSwKICAgIC8v6YeN572uCiAgICByZXNldDogZnVuY3Rpb24gcmVzZXQoKSB7CiAgICAgIHRoaXMucXVlcnlQYXJhbSA9ICIiOwogICAgICB0aGlzLnNlYXJjaCgpOwogICAgfSwKICAgIHNlYXJjaDogZnVuY3Rpb24gc2VhcmNoKCkgewogICAgICB2YXIgX3RoaXMzID0gdGhpczsKICAgICAgdmFyIHF1ZXJ5cyA9IFtdOyAvL+afpeivouadoeS7tgogICAgICB2YXIgcXVlcnlGaWx0ZXIgPSB7fTsKICAgICAgdmFyIHBhZ2VCZWFuID0gewogICAgICAgIHBhZ2VCZWFuOiB0aGlzLnBhZ2luYXRpb24KICAgICAgfTsKICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgaWYgKHRoaXMucXVlcnlQYXJhbSAhPSAiIikgewogICAgICAgIHZhciBjb25kaXRpb25maWVsZCA9IEpTT04ucGFyc2UodGhpcy5jdXN0b21EaWFsb2cuY29uZGl0aW9uZmllbGQpOwogICAgICAgIGNvbmRpdGlvbmZpZWxkLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgICAgIGlmIChpdGVtLmRlZmF1bHRUeXBlID09ICcxJykgewogICAgICAgICAgICBxdWVyeXMucHVzaCh7CiAgICAgICAgICAgICAgcHJvcGVydHk6IGl0ZW0uZmllbGQsCiAgICAgICAgICAgICAgdmFsdWU6IF90aGlzMy5xdWVyeVBhcmFtLAogICAgICAgICAgICAgIGdyb3VwOiAibWFpbiIsCiAgICAgICAgICAgICAgb3BlcmF0aW9uOiBfdGhpcy5vcE1hcFtpdGVtLmNvbmRpdGlvbl0sCiAgICAgICAgICAgICAgcmVsYXRpb246ICJPUiIKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgLy/lpITnkIblj4LmlbDkvKDlhaUKICAgICAgdmFyIGNvbmRpdGlvbnMgPSB0aGlzLmN1c3RkaWFsb2cuY3VzdERpYWxvZy5jb25kaXRpb25zOwogICAgICB2YXIgZm9ybUluc3QgPSB1dGlscy5nZXRPbmxpbmVGb3JtSW5zdGFuY2UodGhpcyk7CiAgICAgIGlmIChjb25kaXRpb25zICYmIGNvbmRpdGlvbnMubGVuZ3RoID4gMCAmJiBmb3JtSW5zdCAmJiBmb3JtSW5zdFsnZGF0YSddKSB7CiAgICAgICAgdmFyIGN1ckRhdGEgPSBmb3JtSW5zdFsnZGF0YSddOwogICAgICAgIGNvbmRpdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkgewogICAgICAgICAgaWYgKGl0ZW0uZGVmYXVsdFR5cGUgPT0gIjMiICYmIGl0ZW0uYmluZCkgewogICAgICAgICAgICB2YXIgb2JqID0ge307CiAgICAgICAgICAgIGl0ZW0uZmllbGQgPSBpdGVtLmZpZWxkOwogICAgICAgICAgICB2YXIgYmluZEFycmF5ID0gaXRlbS5iaW5kLnNwbGl0KCcuJyk7CiAgICAgICAgICAgIGlmIChiaW5kQXJyYXkubGVuZ3RoID09IDMpIHsKICAgICAgICAgICAgICB2YXIgdGFyZ2V0VmFsdWUgPSBjdXJEYXRhW2JpbmRBcnJheVsxXV1bYmluZEFycmF5WzJdXTsKICAgICAgICAgICAgICBxdWVyeXMucHVzaCh7CiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogaXRlbS5maWVsZCwKICAgICAgICAgICAgICAgIHZhbHVlOiB0YXJnZXRWYWx1ZSwKICAgICAgICAgICAgICAgIGdyb3VwOiAidHlwZTMiLAogICAgICAgICAgICAgICAgb3BlcmF0aW9uOiBfdGhpcy5vcE1hcFtpdGVtLmNvbmRpdGlvbl0sCiAgICAgICAgICAgICAgICByZWxhdGlvbjogIkFORCIKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIGlmIChxdWVyeXMubGVuZ3RoID4gMCkgewogICAgICAgIHF1ZXJ5RmlsdGVyID0gewogICAgICAgICAgcGFnZUJlYW46IHRoaXMucGFnaW5hdGlvbiwKICAgICAgICAgIHF1ZXJ5czogcXVlcnlzCiAgICAgICAgfTsKICAgICAgICB0aGlzLmN1c3RvbURpYWxvZy5wYWdlQmVhbiA9IHF1ZXJ5RmlsdGVyOwogICAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCJkaWFsb2cvZ2V0bGlzdEpzb24iLCB0aGlzLmN1c3RvbURpYWxvZyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5jdXN0b21EaWFsb2cucGFnZUJlYW4gPSBwYWdlQmVhbjsKICAgICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgiZGlhbG9nL2dldGxpc3RKc29uIiwgdGhpcy5jdXN0b21EaWFsb2cpOwogICAgICB9CiAgICAgIHRoaXMuY2hlY2tMaXN0KCk7CiAgICB9LAogICAgc2VhcmNoVHJlZTogZnVuY3Rpb24gc2VhcmNoVHJlZShyZXF1ZXN0UGFyYW1zKSB7CiAgICAgIHZhciBfdGhpczQgPSB0aGlzOwogICAgICBpZiAodGhpcy5wcm9wczEubGVuZ3RoIDwgMSkgewogICAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCJkaWFsb2cvZ2V0VHJlZURhdGEiLCByZXF1ZXN0UGFyYW1zKS50aGVuKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICAgIGlmIChfdGhpczQuY3VzdG9tRGlhbG9nLmRpc3BsYXlmaWVsZCAmJiBfdGhpczQuY3VzdG9tRGlhbG9nLnJlc3VsdGZpZWxkKSB7CiAgICAgICAgICAgIHZhciBkaXNwbGF5ZmllbGQgPSBKU09OLnBhcnNlKF90aGlzNC5jdXN0b21EaWFsb2cuZGlzcGxheWZpZWxkKTsKICAgICAgICAgICAgX3RoaXM0LmRlZmF1bHRQcm9wcy5sYWJlbCA9IGRpc3BsYXlmaWVsZC5kaXNwbGF5TmFtZTsKICAgICAgICAgICAgdmFyIHJlc3VsdGZpZWxkID0gSlNPTi5wYXJzZShfdGhpczQuY3VzdG9tRGlhbG9nLnJlc3VsdGZpZWxkKTsKICAgICAgICAgICAgX3RoaXM0LnByb3BzMSA9IF90aGlzNC50b1RyZWVEYXRhKHJlcywgZGlzcGxheWZpZWxkLmlkLCBkaXNwbGF5ZmllbGQucGlkLCBkaXNwbGF5ZmllbGQuZGlzcGxheU5hbWUsIGRpc3BsYXlmaWVsZC5wdmFsdWUgPyBkaXNwbGF5ZmllbGQucHZhbHVlIDogIjAiLCByZXN1bHRmaWVsZCk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0sCiAgICAvLyDlkIzmraXpgInmi6nnu5PmnpwKICAgIHN5bmNJbnB1dFZhbHVlOiBmdW5jdGlvbiBzeW5jSW5wdXRWYWx1ZSgpIHsKICAgICAgdmFyIF90aGlzNSA9IHRoaXM7CiAgICAgIHZhciByZXR1cm5TdHIgPSBKU09OLnBhcnNlKHRoaXMuY3VzdG9tRGlhbG9nLnJlc3VsdGZpZWxkKTsKICAgICAgLy/mi7/liLDov5Tlm57nmoTlrZfmrrUKICAgICAgdmFyIGZpZWxkID0gbmV3IEFycmF5KFtyZXR1cm5TdHIubGVuZ3RoXSk7CiAgICAgIHZhciBjb21tZW50ID0gbmV3IEFycmF5KFtyZXR1cm5TdHIubGVuZ3RoXSk7CiAgICAgIHZhciBzdHIgPSBbXTsKICAgICAgdmFyIGlkcyA9IFtdOwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJldHVyblN0ci5sZW5ndGg7IGkrKykgewogICAgICAgIGZpZWxkW2ldID0gdGhpcy5jdXN0b21EaWFsb2cuZHNUeXBlID09ICJkYXRhU291cmNlIiA/IHJldHVyblN0cltpXS5maWVsZC50b1VwcGVyQ2FzZSgpIDogcmV0dXJuU3RyW2ldLmZpZWxkOwogICAgICAgIGNvbW1lbnRbaV0gPSB0aGlzLmN1c3RvbURpYWxvZy5kc1R5cGUgPT0gImRhdGFTb3VyY2UiID8gcmV0dXJuU3RyW2ldLmNvbW1lbnQudG9VcHBlckNhc2UoKSA6IHJldHVyblN0cltpXS5jb21tZW50OwogICAgICB9CiAgICAgIHZhciB0aGlzXyA9IHRoaXM7CiAgICAgIHRoaXMuc2VsZWN0T3Jncy5mb3JFYWNoKGZ1bmN0aW9uIChyb3cpIHsKICAgICAgICBpZiAodGhpc18uY2hlY2tCb3hEYXRhQWxsIHx8IHRoaXNfLmNoZWNrQm94RGF0YUFsbC5sZW5ndGggPCAxKSB7CiAgICAgICAgICB0aGlzXy5jaGVja0JveERhdGFBbGwucHVzaChyb3cpOwogICAgICAgIH0gZWxzZSBpZiAoSlNPTi5zdHJpbmdpZnkodGhpc18uaW5kZXhBcnJheSkuaW5kZXhPZihKU09OLnN0cmluZ2lmeShyb3cpKSA9PSAtMSkgewogICAgICAgICAgdGhpc18uY2hlY2tCb3hEYXRhQWxsLnB1c2gocm93KTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICB2YXIgcyA9IHRoaXMuY2hlY2tCb3hEYXRhQWxsOwogICAgICBpZiAodGhpcy5jdXN0b21EaWFsb2cuc2VsZWN0TnVtID09PSAxKSB7CiAgICAgICAgdmFyIHRlbXAgPSAiIjsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbW1lbnQubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIHZhciB2YSA9IHNbMF1bZmllbGRbaV1dOwogICAgICAgICAgdHlwZW9mIHZhID09ICd1bmRlZmluZWQnID8gJycgOiB2YSwgX3JlYWRPbmx5RXJyb3IoInZhIik7CiAgICAgICAgICB0ZW1wICs9ICciJyArIGNvbW1lbnRbaV0gKyAnIjoiJyArIHZhICsgJyIsJzsKICAgICAgICB9CiAgICAgICAgaWYgKHRlbXAgIT0gIiIpIHsKICAgICAgICAgIHRlbXAgPSAieyIgKyB0ZW1wLnN1YnN0cmluZygwLCB0ZW1wLmxlbmd0aCAtIDEpICsgIn0iOwogICAgICAgIH0KICAgICAgICBzdHIucHVzaCh1dGlscy5wYXJzZVRvSnNvbih0ZW1wKSk7CiAgICAgICAgaWRzLnB1c2goc1swXS5pZCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICB2YXIgdGVtcCA9ICIiOwogICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBjb21tZW50Lmxlbmd0aDsgaisrKSB7CiAgICAgICAgICAgIHZhciBfdmEgPSBzW2ldW2ZpZWxkW2pdXTsKICAgICAgICAgICAgdHlwZW9mIF92YSA9PSAndW5kZWZpbmVkJyA/ICcnIDogX3ZhLCBfcmVhZE9ubHlFcnJvcigidmEiKTsKICAgICAgICAgICAgdGVtcCArPSAnIicgKyBjb21tZW50W2pdICsgJyI6IicgKyBfdmEgKyAnIiwnOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHRlbXAgIT0gIiIpIHsKICAgICAgICAgICAgdGVtcCA9ICJ7IiArIHRlbXAuc3Vic3RyaW5nKDAsIHRlbXAubGVuZ3RoIC0gMSkgKyAifSI7CiAgICAgICAgICB9CiAgICAgICAgICBzdHIucHVzaCh1dGlscy5wYXJzZVRvSnNvbih0ZW1wKSk7CiAgICAgICAgICBpZHMucHVzaChzW2ldLmlkKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFyIHJldHVybkRhdGEgPSBzdHI7CiAgICAgIHZhciBfdGhpcyA9IHRoaXM7CiAgICAgIHZhciBmb3JtSW5zdCA9IHV0aWxzLmdldE9ubGluZUZvcm1JbnN0YW5jZSh0aGlzKTsKICAgICAgdmFyIGhvdFRhYmxlVGFyZ2V0ID0gJyc7CiAgICAgIHJldHVybkRhdGEuZm9yRWFjaChmdW5jdGlvbiAocm93KSB7CiAgICAgICAgdmFyIHRhcmdldEFycmF5ID0gbnVsbDsKICAgICAgICB2YXIgc3ViTGluZURhdGEgPSB7fTsKICAgICAgICBfdGhpczUuY3VzdGRpYWxvZy5jdXN0RGlhbG9nLm1hcHBpbmdDb25mLmZvckVhY2goZnVuY3Rpb24gKGNvbikgewogICAgICAgICAgaWYgKGNvbi50YXJnZXRbMF0pIHsKICAgICAgICAgICAgaG90VGFibGVUYXJnZXQgPSBjb24udGFyZ2V0WzBdOwogICAgICAgICAgICB0YXJnZXRBcnJheSA9IGNvbi50YXJnZXRbMF0uc3BsaXQoIi4iKTsKICAgICAgICAgICAgdmFyIGZyb20gPSAiIjsKICAgICAgICAgICAgaWYgKF90aGlzLmN1c3RvbURpYWxvZy5kc1R5cGUgPT0gInJlc3RmdWwiKSB7CiAgICAgICAgICAgICAgZnJvbSA9IGNvbi5mcm9tOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGZyb20gPSBjb24uZnJvbS50b1VwcGVyQ2FzZSgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHN1YkxpbmVEYXRhW3RhcmdldEFycmF5W3RhcmdldEFycmF5Lmxlbmd0aCAtIDFdXSA9IHJvd1tmcm9tXTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBpZiAodGFyZ2V0QXJyYXkpIHsKICAgICAgICAgIHZhciBzdWJCbyA9IGZvcm1JbnN0WyJkYXRhIl1bdGFyZ2V0QXJyYXlbMF1dW3RhcmdldEFycmF5WzFdXTsKICAgICAgICAgIGlmIChfdGhpcy5jdXN0b21EaWFsb2cuc2VsZWN0TnVtID09IDEgJiYgc3ViQm8ubGVuZ3RoID4gMCkgewogICAgICAgICAgICBzdWJCby5zaGlmdCgpOwogICAgICAgICAgfQogICAgICAgICAgLy/lrZDooajlm57loasg6Ieq5Yqo5oqK5LmL5YmN5re75Yqg55qE5a2X5q615LiU5Li656m655qE5Lmf5Zue5aGrCiAgICAgICAgICAvLyBpZiAoZm9ybUluc3RbImRhdGEiXVt0YXJnZXRBcnJheVswXV1bdGFyZ2V0QXJyYXlbMV1dKSB7CiAgICAgICAgICAvLyAgIGZvcm1JbnN0WyJkYXRhIl1bdGFyZ2V0QXJyYXlbMF1dW3RhcmdldEFycmF5WzFdXS5mb3JFYWNoKG9iaiA9PiB7CiAgICAgICAgICAvLyAgICAgZm9yIChsZXQgaXRlbSBpbiBvYmopIHsKICAgICAgICAgIC8vICAgICAgIGlmICghb2JqW2l0ZW1dKSB7CiAgICAgICAgICAvLyAgICAgICAgIGZvciAobGV0IHN1YkRhdGEgaW4gc3ViTGluZURhdGEpIHsKICAgICAgICAgIC8vICAgICAgICAgICBvYmpbaXRlbV0gPSBzdWJMaW5lRGF0YVtpdGVtXTsKICAgICAgICAgIC8vICAgICAgICAgfQogICAgICAgICAgLy8gICAgICAgfQogICAgICAgICAgLy8gICAgIH0KICAgICAgICAgIC8vICAgfSk7CiAgICAgICAgICAvLyB9CiAgICAgICAgICBzdWJCby5wdXNoKHN1YkxpbmVEYXRhKTsKICAgICAgICAgIC8v5oqK5a2Q6KGo5Zue5aGr5YC85a2Y5Zyo5o6n5Lu255qE54i257uE5Lu25LitCiAgICAgICAgICBmb3JtSW5zdC5zdWJCYWNrZmlsbC5zZXQoImRhdGEuIiArIHRhcmdldEFycmF5WzBdICsgIi4iICsgdGFyZ2V0QXJyYXlbMV0sIHN1YkxpbmVEYXRhKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICBpZiAoaG90VGFibGVUYXJnZXQpIHsKICAgICAgICBmb3JtSW5zdC5ob3RUYWJsZUZpbGxiYWNrID0gaG90VGFibGVUYXJnZXQgKyAnX3RpbWVzdGFtcF8nICsgRGF0ZS5wYXJzZShuZXcgRGF0ZSgpKTsKICAgICAgfQogICAgfSwKICAgIGRpYWxvZ0NhbmNlbDogZnVuY3Rpb24gZGlhbG9nQ2FuY2VsKCkgewogICAgICB2YXIgX3RoaXM2ID0gdGhpczsKICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goImRpYWxvZy9zZXREaWFsb2dEYXRhIiwgW10pOwogICAgICB0aGlzLmN1c3RvbURpYWxvZ1Nob3dMaXN0ID0gZmFsc2U7CiAgICAgIGlmICh0aGlzLnNlbGVjdE9yZ3MpIHsKICAgICAgICB0aGlzLnNlbGVjdE9yZ3MuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkgewogICAgICAgICAgaWYgKCFfdGhpczYuaW5wdXRWYWwgfHwgX3RoaXM2LmlucHV0VmFsLmluZGV4T2YoaXRlbSkgPT09IC0xKSB7CiAgICAgICAgICAgIF90aGlzNi4kcmVmcy5vcmdUYWJsZS50b2dnbGVSb3dTZWxlY3Rpb24oaXRlbSwgZmFsc2UpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgX3RoaXM2LiRyZWZzLm9yZ1RhYmxlLnRvZ2dsZVJvd1NlbGVjdGlvbihpdGVtLCB0cnVlKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgICAvLyB0aGlzLnNlbGVjdE9yZ3MgPSB0aGlzLmlucHV0VmFsID8gdGhpcy5pbnB1dFZhbCA6IG51bGw7CiAgICB9LAogICAgZGlhbG9nVHJlZUNvbmZpcm06IGZ1bmN0aW9uIGRpYWxvZ1RyZWVDb25maXJtKCkgewogICAgICB2YXIgX3RoaXM3ID0gdGhpczsKICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goImRpYWxvZy9zZXREaWFsb2dEYXRhIiwgW10pOwogICAgICB2YXIgcmV0dXJuU3RyID0gSlNPTi5wYXJzZSh0aGlzLmN1c3RvbURpYWxvZy5yZXN1bHRmaWVsZCk7CiAgICAgIHZhciBmaWVsZCA9IG5ldyBBcnJheShbcmV0dXJuU3RyLmxlbmd0aF0pOwogICAgICB2YXIgY29tbWVudCA9IG5ldyBBcnJheShbcmV0dXJuU3RyLmxlbmd0aF0pOwogICAgICB2YXIgc3RyID0gW107CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmV0dXJuU3RyLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgZmllbGRbaV0gPSByZXR1cm5TdHJbaV0uZmllbGQ7CiAgICAgICAgY29tbWVudFtpXSA9IHJldHVyblN0cltpXS5jb21tZW50OwogICAgICB9CiAgICAgIGlmICh0aGlzLmN1c3RvbURpYWxvZy5zZWxlY3ROdW0gPT09IDEpIHsKICAgICAgICB2YXIgbm9kZXMgPSB0aGlzLnByb3BzRGF0YVswXTsKICAgICAgICB2YXIgdGVtcCA9ICIiOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29tbWVudC5sZW5ndGg7IGkrKykgewogICAgICAgICAgdGVtcCArPSAnIicgKyBjb21tZW50W2ldICsgJyI6IicgKyBub2Rlc1tmaWVsZFtpXV0gKyAnIiwnOwogICAgICAgIH0KICAgICAgICBpZiAodGVtcCAhPSAiIikgewogICAgICAgICAgdGVtcCA9ICJ7IiArIHRlbXAuc3Vic3RyaW5nKDAsIHRlbXAubGVuZ3RoIC0gMSkgKyAifSI7CiAgICAgICAgfQogICAgICAgIHN0ci5wdXNoKHV0aWxzLnBhcnNlVG9Kc29uKHRlbXApKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB2YXIgbm9kZXMgPSB0aGlzLnByb3BzRGF0YTsKICAgICAgICBub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtLCBrKSB7CiAgICAgICAgICB2YXIgdGVtcCA9ICIiOwogICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb21tZW50Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHRlbXAgKz0gJyInICsgY29tbWVudFtpXSArICciOiInICsgbm9kZXNbZmllbGRbaV1dICsgJyIsJzsKICAgICAgICAgICAgdGVtcCArPSAnIicgKyBjb21tZW50W2ldICsgJyI6IicgKyBub2Rlc1trXVtmaWVsZFtpXV0gKyAnIiwnOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHRlbXAgIT0gIiIpIHsKICAgICAgICAgICAgdGVtcCA9ICJ7IiArIHRlbXAuc3Vic3RyaW5nKDAsIHRlbXAubGVuZ3RoIC0gMSkgKyAifSI7CiAgICAgICAgICB9CiAgICAgICAgICBzdHIucHVzaCh1dGlscy5wYXJzZVRvSnNvbih0ZW1wKSk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgdmFyIHJldHVybkRhdGEgPSBzdHI7CiAgICAgIHZhciBfdGhpcyA9IHRoaXM7CiAgICAgIHZhciBmb3JtSW5zdCA9IHV0aWxzLmdldE9ubGluZUZvcm1JbnN0YW5jZSh0aGlzKTsKICAgICAgcmV0dXJuRGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChyb3cpIHsKICAgICAgICB2YXIgdGFyZ2V0QXJyYXkgPSBudWxsOwogICAgICAgIHZhciBzdWJMaW5lRGF0YSA9IHt9OwogICAgICAgIF90aGlzNy5jdXN0ZGlhbG9nLmN1c3REaWFsb2cubWFwcGluZ0NvbmYuZm9yRWFjaChmdW5jdGlvbiAoY29uKSB7CiAgICAgICAgICB0YXJnZXRBcnJheSA9IGNvbi50YXJnZXRbMF0uc3BsaXQoIi4iKTsKICAgICAgICAgIHZhciBmcm9tID0gIiI7CiAgICAgICAgICBpZiAoX3RoaXMuY3VzdG9tRGlhbG9nLmRzVHlwZSA9PSAicmVzdGZ1bCIpIHsKICAgICAgICAgICAgZnJvbSA9IGNvbi5mcm9tOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZnJvbSA9IGNvbi5mcm9tLnRvVXBwZXJDYXNlKCk7CiAgICAgICAgICB9CiAgICAgICAgICBzdWJMaW5lRGF0YVt0YXJnZXRBcnJheVt0YXJnZXRBcnJheS5sZW5ndGggLSAxXV0gPSByb3dbZnJvbV07CiAgICAgICAgfSk7CiAgICAgICAgaWYgKHRhcmdldEFycmF5KSB7CiAgICAgICAgICB2YXIgc3ViQm8gPSBmb3JtSW5zdFsiZGF0YSJdW3RhcmdldEFycmF5WzBdXVt0YXJnZXRBcnJheVsxXV07CiAgICAgICAgICBpZiAoX3RoaXMuY3VzdG9tRGlhbG9nLnNlbGVjdE51bSA9PSAxICYmIHN1YkJvLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgc3ViQm8uc2hpZnQoKTsKICAgICAgICAgIH0KICAgICAgICAgIHN1YkJvLnB1c2goc3ViTGluZURhdGEpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIC8vdGhpcy4kZW1pdCgiaW5wdXQiLCBKU09OLnN0cmluZ2lmeShzdHIpKTsKICAgICAgdGhpcy5jdXN0b21EaWFsb2dTaG93VHJlZSA9IGZhbHNlOwogICAgfSwKICAgIGRpYWxvZ0NhbmNlbFRyZWU6IGZ1bmN0aW9uIGRpYWxvZ0NhbmNlbFRyZWUoKSB7CiAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCJkaWFsb2cvc2V0RGlhbG9nRGF0YSIsIFtdKTsKICAgICAgdGhpcy5jdXN0b21EaWFsb2dTaG93VHJlZSA9IGZhbHNlOwogICAgfSwKICAgIGdldENoZWNrZWQ6IGZ1bmN0aW9uIGdldENoZWNrZWQoZGF0YSwgY2hlY2tlZCwgaW5kZXRlcm1pbmF0ZSkgewogICAgICBpZiAodGhpcy5jdXN0b21EaWFsb2cuc2VsZWN0TnVtID09PSAxKSB7CiAgICAgICAgdGhpcy5wcm9wc0RhdGEgPSBbXTsKICAgICAgICB0aGlzLnByb3BzRGF0YS5wdXNoKGRhdGEpOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMucHJvcHNEYXRhID0gdGhpcy4kcmVmcy50cmVlLmdldENoZWNrZWROb2RlcygpOwogICAgICB9CiAgICB9LAogICAgdHJlZUNsaWNrOiBmdW5jdGlvbiB0cmVlQ2xpY2soZGF0YSwgbiwgaSkgewogICAgICBpZiAodGhpcy5jdXN0b21EaWFsb2cuc2VsZWN0TnVtID09PSAxKSB7CiAgICAgICAgdGhpcy5wcm9wc0RhdGEgPSBbXTsKICAgICAgICB0aGlzLnByb3BzRGF0YS5wdXNoKGRhdGEpOwogICAgICB9CiAgICB9LAogICAgY2xlYXJBbGxTZWxlY3RPcmdzOiBmdW5jdGlvbiBjbGVhckFsbFNlbGVjdE9yZ3MoKSB7CiAgICAgIHRoaXMuc2VsZWN0T3JncyA9IG51bGw7CiAgICAgIHRoaXMuJHJlZnMub3JnVGFibGUuY2xlYXJTZWxlY3Rpb24oKTsKICAgIH0sCiAgICByZW1vdmVTZWxlY3RPcmdzOiBmdW5jdGlvbiByZW1vdmVTZWxlY3RPcmdzKCkgewogICAgICB2YXIgX3RoaXM4ID0gdGhpczsKICAgICAgdmFyIGFyeSA9IHRoaXMuJHJlZnMuc2VsZWN0VHJlZS5nZXRDaGVja2VkTm9kZXMoKTsKICAgICAgYXJ5LmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgICBfdGhpczguc2VsZWN0T3Jncy5yZW1vdmUoaXRlbSk7CiAgICAgICAgX3RoaXM4LiRyZWZzLm9yZ1RhYmxlLnRvZ2dsZVJvd1NlbGVjdGlvbihpdGVtLCBmYWxzZSk7CiAgICAgIH0pOwogICAgfSwKICAgIHJlbW92ZVNlbGVjdE9yZzogZnVuY3Rpb24gcmVtb3ZlU2VsZWN0T3JnKGl0ZW0pIHsKICAgICAgaWYgKHRoaXMuY3VzdG9tRGlhbG9nLnNlbGVjdE51bSA9PT0gMSkgewogICAgICAgIHRoaXMuJGVtaXQoImlucHV0IiwgIiIpOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuaW5wdXRWYWwuc3BsaWNlKGl0ZW0sIDEpOwogICAgICAgIHRoaXMuc2hvd0RhdGEuc3BsaWNlKGl0ZW0sIDEpOwogICAgICAgIHRoaXMuY2FsYWNJbnB1dFN1ZmZpeEhlaWdodCgpOwogICAgICAgIHZhciB2YWx1ZSA9ICIiOwogICAgICAgIHRoaXMuaW5wdXRWYWwuZm9yRWFjaChmdW5jdGlvbiAodmFsKSB7CiAgICAgICAgICB2YWx1ZSArPSB2YWwudmFsdWUgKyAiLCI7CiAgICAgICAgfSk7CiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IDApIHsKICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3Vic3RyaW5nKDAsIHZhbHVlLmxlbmd0aCAtIDEpOwogICAgICAgIH0KICAgICAgICBpZiAodmFsdWUgIT0gIiIpIHsKICAgICAgICAgIHZhbHVlID0gdmFsdWUgKyAifHwiICsgSlNPTi5zdHJpbmdpZnkodGhpcy5zaG93RGF0YSk7CiAgICAgICAgfQogICAgICAgIHRoaXMuJGVtaXQoImlucHV0IiwgdmFsdWUpOwogICAgICB9CiAgICB9LAogICAgY2FsYWNJbnB1dFN1ZmZpeEhlaWdodDogZnVuY3Rpb24gY2FsYWNJbnB1dFN1ZmZpeEhlaWdodCgpIHsKICAgICAgdmFyIF90aGlzOSA9IHRoaXM7CiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgIGlmICghX3RoaXM5LiRyZWZzLnRhZ1NwYW5zKSByZXR1cm47CiAgICAgICAgaWYgKF90aGlzOS4kcmVmcy50YWdTcGFucy5vZmZzZXRIZWlnaHQpIHsKICAgICAgICAgIF90aGlzOS5pbnB1dFN1ZmZpeEhlaWdodCA9IF90aGlzOS4kcmVmcy50YWdTcGFucy5vZmZzZXRIZWlnaHQgKyA1OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBfdGhpczkuaW5wdXRTdWZmaXhIZWlnaHQgPSAzMDsKICAgICAgICB9CiAgICAgICAgLy8g6Kem5Y+R6aqM6K+BCiAgICAgICAgX3RoaXM5LiR2YWxpZGF0b3IudmFsaWRhdGUoKTsKICAgICAgfSwgMCk7CiAgICB9LAogICAgY3VzdG9tRGlhbG9nU2hvdzogZnVuY3Rpb24gY3VzdG9tRGlhbG9nU2hvdyhwYWdlUGFyYW0pIHsKICAgICAgdmFyIF90aGlzMTAgPSB0aGlzOwogICAgICB0aGlzLmN1c3RvbURpYWxvZ1Nob3dMaXN0ID0gdHJ1ZTsKICAgICAgdGhpcy5jdXN0b21EaWFsb2cgPSBwYWdlUGFyYW0uY3VzdG9tRGlhbG9nOwogICAgICB0aGlzLmN1c3RvbURpYWxvZy5xdWVyeVVybCA9IHRoaXMuY3VzdG9tRGlhbG9nLmRzVHlwZSA9PSAiZGF0YVNvdXJjZSIgPyAiJHtmb3JtfS9mb3JtL2N1c3RvbURpYWxvZy92MS9nZXRMaXN0RGF0YT9hbGlhcz0iICsgdGhpcy5jdXN0b21EaWFsb2cuYWxpYXMgKyAiJm1hcFBhcmFtPSIgKyAodGhpcy5jdXN0b21EaWFsb2cubWFwUGFyYW0gPyB0aGlzLmN1c3RvbURpYWxvZy5tYXBQYXJhbSA6ICIiKSA6IHRoaXMuY3VzdG9tRGlhbG9nLnVybDsKICAgICAgdmFyIGNvbmRpdGlvbmZpZWxkID0gSlNPTi5wYXJzZSh0aGlzLmN1c3RvbURpYWxvZy5jb25kaXRpb25maWVsZCk7CiAgICAgIGlmICghdGhpcy5jb21tZW50ICYmIGNvbmRpdGlvbmZpZWxkLmxlbmd0aCA+IDApIHsKICAgICAgICBjb25kaXRpb25maWVsZC5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICAgICBpZiAoaXRlbS5jb250cm9sbGVyVHlwZSA9PSAxICYmIGl0ZW0uZGJUeXBlID09ICJ2YXJjaGFyIikgewogICAgICAgICAgICBfdGhpczEwLmNvbW1lbnQgKz0gaXRlbS5jb21tZW50ICsgIiwiOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGlmICh0aGlzLmNvbW1lbnQpIHsKICAgICAgICAgIHRoaXMucXVlcnlzU2hvdyA9IHRydWU7CiAgICAgICAgICB0aGlzLmNvbW1lbnQgPSAi6YCa6L+HIiArIHRoaXMuY29tbWVudC5zdWJzdHJpbmcoMCwgdGhpcy5jb21tZW50Lmxlbmd0aCAtIDEpICsgIuafpeivoiI7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0aGlzLmRpYWxvZ0RhdGEubGVuZ3RoIDwgMSkgewogICAgICAgIHRoaXMuc2VhcmNoKCk7CiAgICAgICAgdGhpcy5kaXNwbGF5ZmllbGQgPSBKU09OLnBhcnNlKHBhZ2VQYXJhbS5jdXN0b21EaWFsb2cuZGlzcGxheWZpZWxkKTsKICAgICAgICBpZiAodGhpcy5jdXN0b21EaWFsb2cuZHNUeXBlID09ICJkYXRhU291cmNlIikgewogICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRpc3BsYXlmaWVsZC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB0aGlzLmRpc3BsYXlmaWVsZFtpXS5maWVsZCA9IHRoaXMuZGlzcGxheWZpZWxkW2ldLmZpZWxkLnRvVXBwZXJDYXNlKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgY3VzdG9tRGlhbG9nVHJlZVNob3c6IGZ1bmN0aW9uIGN1c3RvbURpYWxvZ1RyZWVTaG93KHBhZ2VQYXJhbSkgewogICAgICB0aGlzLmN1c3RvbURpYWxvZyA9IHBhZ2VQYXJhbS5jdXN0b21EaWFsb2c7CiAgICAgIHZhciBjdXN0b21EaWFsb2cgPSB0aGlzLmN1c3RvbURpYWxvZzsKICAgICAgdmFyIG1hcFBhcmFtID0gIiI7CiAgICAgIGlmIChwYWdlUGFyYW0ucGFyYW0gIT0gdW5kZWZpbmVkKSB7CiAgICAgICAgbWFwUGFyYW0gPSBKU09OLnN0cmluZ2lmeShwYWdlUGFyYW0ucGFyYW0pOwogICAgICAgIG1hcFBhcmFtID0gbWFwUGFyYW0uc3Vic3RyaW5nKDEsIG1hcFBhcmFtLmxlbmd0aCAtIDEpOwogICAgICB9CiAgICAgIHZhciByZXF1ZXN0VHlwZSA9IGN1c3RvbURpYWxvZy5kc1R5cGUgPT0gImRhdGFTb3VyY2UiID8gIkdFVCIgOiBjdXN0b21EaWFsb2cucmVxdWVzdFR5cGUgPyBjdXN0b21EaWFsb2cucmVxdWVzdFR5cGUgOiAiUE9TVCI7CiAgICAgIHZhciB1cmwgPSAiJHtmb3JtfS9mb3JtL2N1c3RvbURpYWxvZy92MS9nZXRUcmVlRGF0YT9hbGlhcz0iICsgcGFnZVBhcmFtLmFsaWFzICsgIiZtYXBQYXJhbT0iICsgbWFwUGFyYW07CiAgICAgIHZhciBwYXJhbXNPYmogPSB7fTsKICAgICAgaWYgKGN1c3RvbURpYWxvZy5kc1R5cGUgIT0gImRhdGFTb3VyY2UiKSB7CiAgICAgICAgdXJsID0gY3VzdG9tRGlhbG9nLnVybDsKICAgICAgICB2YXIgdGVtcGxhdGVQYSA9IGN1c3RvbURpYWxvZy5kYXRhUGFyYW07CiAgICAgICAgaWYgKGN1c3RvbURpYWxvZy5jb25kaXRpb25maWVsZCkgewogICAgICAgICAgdmFyIGNvbmRpdGlvbnMgPSBKU09OLnBhcnNlKGN1c3RvbURpYWxvZy5jb25kaXRpb25maWVsZCk7CiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbmRpdGlvbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIGNvbiA9IGNvbmRpdGlvbnNbaV07CiAgICAgICAgICAgIGlmIChyZXF1ZXN0VHlwZSA9PSAiUE9TVCIpIHsKICAgICAgICAgICAgICBpZiAodGVtcGxhdGVQYSkgewogICAgICAgICAgICAgICAgdGVtcGxhdGVQYSA9IHRlbXBsYXRlUGEucmVwbGFjZShuZXcgUmVnRXhwKCJcXHsiICsgY29uLmZpZWxkICsgIlxcfSIsICJnIiksIGNvbi5kZWZhdWx0VmFsdWUpOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBwYXJhbXNPYmpbY29uLmZpZWxkXSA9IGNvbi5kZWZhdWx0VmFsdWU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHZhciBsakNoYXIgPSB1cmwuaW5kZXhPZigiPyIpID09IC0xID8gIj8iIDogIiYiOwogICAgICAgICAgICAgIHVybCA9IHVybCArIGxqQ2hhciArIGNvbi5maWVsZCArICI9IiArIGNvbi5kZWZhdWx0VmFsdWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmICh0ZW1wbGF0ZVBhKSB7CiAgICAgICAgICAgIHBhcmFtc09iaiA9IEpTT04ucGFyc2UodGVtcGxhdGVQYSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhciByZXF1ZXN0UGFyYW1zID0ge307CiAgICAgIHJlcXVlc3RQYXJhbXMucmVxdWVzdFR5cGUgPSByZXF1ZXN0VHlwZTsKICAgICAgcmVxdWVzdFBhcmFtcy51cmwgPSB1cmw7CiAgICAgIHJlcXVlc3RQYXJhbXMucGFyYW1zT2JqID0gcGFyYW1zT2JqOwogICAgICB0aGlzLnNlYXJjaFRyZWUocmVxdWVzdFBhcmFtcyk7CiAgICAgIHRoaXMuY3VzdG9tRGlhbG9nU2hvd1RyZWUgPSB0cnVlOwogICAgfSwKICAgIHRvVHJlZURhdGE6IGZ1bmN0aW9uIHRvVHJlZURhdGEoZGF0YSwgaWQsIHBpZCwgbmFtZSwgcHZhbHVlLCByZXR1cm5TdHIpIHsKICAgICAgLy8g5bu656uL5Liq5qCR5b2i57uT5p6ELOmcgOimgeWumuS5ieS4quacgOmhtuWxgueahOeItuiKgueCue+8jHB2YWx1ZeaYrzAKICAgICAgdmFyIHp0cmVlID0gdHJhbnNsYXRlRGF0YVRvVHJlZShkYXRhLCBwaWQsIGlkLCBuYW1lKTsKICAgICAgZnVuY3Rpb24gdHJhbnNsYXRlRGF0YVRvVHJlZShkYXRhLCBwaWQsIGlkLCBuYW1lKSB7CiAgICAgICAgdmFyIHBhcmVudHMgPSBkYXRhLmZpbHRlcihmdW5jdGlvbiAodmFsdWUpIHsKICAgICAgICAgIHJldHVybiB2YWx1ZVtpZF0gPT0gdmFsdWVbcGlkXSB8fCB2YWx1ZVtwaWRdID09IG51bGwgfHwgdmFsdWVbcGlkXSA9PSBudWxsIHx8IHZhbHVlW3BpZF0gPT0gMDsKICAgICAgICB9KTsKICAgICAgICBwYXJlbnRzLmxhYmVsID0gcGFyZW50c1tuYW1lXTsKICAgICAgICB2YXIgY2hpbGRyZW5zID0gZGF0YS5maWx0ZXIoZnVuY3Rpb24gKHZhbHVlKSB7CiAgICAgICAgICByZXR1cm4gdmFsdWVbcGlkXSAhPT0gInVuZGVmaW5lZCIgJiYgdmFsdWVbcGlkXSAhPSBudWxsICYmIHZhbHVlW2lkXSAhPSB2YWx1ZVtwaWRdOwogICAgICAgIH0pOwogICAgICAgIHZhciBfdHJhbnNsYXRvciA9IGZ1bmN0aW9uIHRyYW5zbGF0b3IocGFyZW50cywgY2hpbGRyZW5zKSB7CiAgICAgICAgICBwYXJlbnRzLmZvckVhY2goZnVuY3Rpb24gKHBhcmVudCkgewogICAgICAgICAgICBjaGlsZHJlbnMuZm9yRWFjaChmdW5jdGlvbiAoY3VycmVudCwgaW5kZXgpIHsKICAgICAgICAgICAgICBpZiAoY3VycmVudFtwaWRdID09PSBwYXJlbnRbaWRdKSB7CiAgICAgICAgICAgICAgICB2YXIgdGVtcCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY2hpbGRyZW5zKSk7CiAgICAgICAgICAgICAgICB0ZW1wLnNwbGljZShpbmRleCwgMSk7CiAgICAgICAgICAgICAgICBfdHJhbnNsYXRvcihbY3VycmVudF0sIHRlbXApOwogICAgICAgICAgICAgICAgY3VycmVudC5sYWJlbCA9IGN1cnJlbnRbbmFtZV07CiAgICAgICAgICAgICAgICB0eXBlb2YgcGFyZW50LmNoaWxkcmVucyAhPT0gInVuZGVmaW5lZCIgPyBwYXJlbnQuY2hpbGRyZW5zLnB1c2goY3VycmVudCkgOiBwYXJlbnQuY2hpbGRyZW5zID0gW2N1cnJlbnRdOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICB9KTsKICAgICAgICB9OwogICAgICAgIF90cmFuc2xhdG9yKHBhcmVudHMsIGNoaWxkcmVucyk7CiAgICAgICAgcmV0dXJuIHBhcmVudHM7CiAgICAgIH0KICAgICAgcmV0dXJuIHp0cmVlOwogICAgfQogIH0KfTs="},null]}