{"remainingRequest":"D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\thread-loader\\dist\\cjs.js!D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\babel-loader\\lib\\index.js!D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js??ref--0-0!D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\jenkins\\workspace\\ljzc-fvue\\src\\components\\flow\\taskFlowComponents\\flowAction.vue?vue&type=script&lang=js&","dependencies":[{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\src\\components\\flow\\taskFlowComponents\\flowAction.vue","mtime":1705040076915},{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\babel.config.js","mtime":1701311296006},{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\thread-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\babel-loader\\lib\\index.js","mtime":456789000000},{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\vue-loader\\lib\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:aW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuaW5jbHVkZXMuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuaW5jbHVkZXMuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5mdW5jdGlvbi5uYW1lLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLmZvci1lYWNoLmpzIjsKLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KCmltcG9ydCBJbWFnZUJwbSBmcm9tICdAL2NvbXBvbmVudHMvZmxvdy9pbWFnZUJwbS52dWUnOwppbXBvcnQgRm9ybUNvbnRlbnQgZnJvbSAnQC9jb21wb25lbnRzL2Zsb3cvdGFza0Zsb3dDb21wb25lbnRzL2Zvcm1Db250ZW50LnZ1ZSc7Ci8vaW1wb3J0IE9waW5pb25UZXh0IGZyb20gIkAvY29tcG9uZW50cy9jb21tb24vb3BpbmlvblRleHQudnVlIjsKLy9pbXBvcnQgRmlsZVVwbG9hZCBmcm9tICJAL2NvbXBvbmVudHMvY29tbW9uL2ZpbGVVcGxvYWQudnVlIjsKaW1wb3J0IHsgbWFwU3RhdGUgfSBmcm9tICd2dWV4JzsKaW1wb3J0IHsgTWVzc2FnZSB9IGZyb20gJ2VsZW1lbnQtdWknOwppbXBvcnQgVGFza1RvUmVqZWN0IGZyb20gJ0AvY29tcG9uZW50cy9mbG93L3Rhc2svdGFza1RvUmVqZWN0LnZ1ZSc7CmltcG9ydCBUYXNrVG9EZWxlZ2F0ZSBmcm9tICdAL2NvbXBvbmVudHMvZmxvdy90YXNrL3Rhc2tUb0RlbGVnYXRlLnZ1ZSc7CmltcG9ydCBUYXNrVG9Db3B5VG8gZnJvbSAnQC9jb21wb25lbnRzL2Zsb3cvdGFzay90YXNrVG9Db3B5VG8udnVlJzsKaW1wb3J0IFRhc2tUb0lucXUgZnJvbSAnQC9jb21wb25lbnRzL2Zsb3cvdGFzay90YXNrVG9JbnF1LnZ1ZSc7CmltcG9ydCBUYXNrVG9FbmRQcm9jZXNzIGZyb20gJ0AvY29tcG9uZW50cy9mbG93L3Rhc2svdGFza1RvRW5kUHJvY2Vzcy52dWUnOwppbXBvcnQgVGFza1RvVHJhbnMgZnJvbSAnQC9jb21wb25lbnRzL2Zsb3cvdGFzay90YXNrVG9UcmFucy52dWUnOwppbXBvcnQgVGFza1RvQWRkU2lnbiBmcm9tICdAL2NvbXBvbmVudHMvZmxvdy90YXNrL3Rhc2tUb0FkZFNpZ24udnVlJzsKaW1wb3J0IFRhc2tUb0RlbGF5IGZyb20gJ0AvY29tcG9uZW50cy9mbG93L3Rhc2svdGFza1RvRGVsYXkudnVlJzsKaW1wb3J0IFRhc2tTZWxlY3REZXN0aW5hdGlvbiBmcm9tICdAL2NvbXBvbmVudHMvZmxvdy90YXNrL3Rhc2tTZWxlY3REZXN0aW5hdGlvbi52dWUnOwppbXBvcnQgVGFza1RvQXBwcm92ZUxpbmUgZnJvbSAnQC9jb21wb25lbnRzL2Zsb3cvdGFzay90YXNrVG9BcHByb3ZlTGluZS52dWUnOwppbXBvcnQgdGFza1RvU2lnblNlcXVlbmNlIGZyb20gJ0AvY29tcG9uZW50cy9mbG93L3Rhc2svdGFza1RvU2lnblNlcXVlbmNlLnZ1ZSc7CmltcG9ydCB0YXNrVG9TaWduTGluZSBmcm9tICdAL2NvbXBvbmVudHMvZmxvdy90YXNrL3Rhc2tUb1NpZ25MaW5lLnZ1ZSc7CmltcG9ydCB0YXNrVG9Db21wbGV0ZSBmcm9tICdAL2NvbXBvbmVudHMvZmxvdy90YXNrL3Rhc2tUb0NvbXBsZXRlLnZ1ZSc7CmltcG9ydCB0YXNrVG9TYXZlIGZyb20gJ0AvY29tcG9uZW50cy9mbG93L3Rhc2svdGFza1RvU2F2ZS52dWUnOwppbXBvcnQgdGFza1RvUmVhZCBmcm9tICdAL2NvbXBvbmVudHMvZmxvdy90YXNrL3Rhc2tUb1JlYWQudnVlJzsKaW1wb3J0IHRhc2tUb0ZlZUJhY2sgZnJvbSAnQC9jb21wb25lbnRzL2Zsb3cvdGFzay90YXNrVG9GZWVCYWNrLnZ1ZSc7CmltcG9ydCB0YXNrVG9JbnF1UmVwbHkgZnJvbSAnQC9jb21wb25lbnRzL2Zsb3cvdGFzay90YXNrVG9JbnF1UmVwbHkudnVlJzsKaW1wb3J0IHVzZXJBZGRTaWduUmVwbHkgZnJvbSAnQC9jb21wb25lbnRzL2Zsb3cvdGFzay91c2VyQWRkU2lnblJlcGx5LnZ1ZSc7CmltcG9ydCB0YXNrVG9SZXZva2UgZnJvbSAnQC9jb21wb25lbnRzL2Zsb3cvdGFzay90YXNrVG9SZXZva2UudnVlJzsKaW1wb3J0IHV0aWxzIGZyb20gJ0AvdXRpbHMuanMnOwppbXBvcnQgeyBCYXNlNjQgfSBmcm9tICdqcy1iYXNlNjQnOwppbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7IC8v5pel5pyf5qC85byP5YyW5o+S5Lu2CmltcG9ydCBmb3JtIGZyb20gJ0AvYXBpL2Zvcm0uanMnOwppbXBvcnQgZmxvdyBmcm9tICdAL2FwaS9mbG93LmpzJzsKaW1wb3J0IGkxOG4gZnJvbSAnQC9sYW5nL2luZGV4LmpzJzsKaW1wb3J0IHJlcSBmcm9tICdAL3JlcXVlc3QuanMnOwpleHBvcnQgZGVmYXVsdCB7CiAgY29tcG9uZW50czogewogICAgSW1hZ2VCcG06IEltYWdlQnBtLAogICAgRm9ybUNvbnRlbnQ6IEZvcm1Db250ZW50LAogICAgLy9PcGluaW9uVGV4dCwKICAgIC8vRmlsZVVwbG9hZCwKICAgIFRhc2tUb1JlamVjdDogVGFza1RvUmVqZWN0LAogICAgVGFza1RvRGVsZWdhdGU6IFRhc2tUb0RlbGVnYXRlLAogICAgVGFza1RvQ29weVRvOiBUYXNrVG9Db3B5VG8sCiAgICBUYXNrVG9JbnF1OiBUYXNrVG9JbnF1LAogICAgVGFza1RvRW5kUHJvY2VzczogVGFza1RvRW5kUHJvY2VzcywKICAgIFRhc2tUb1RyYW5zOiBUYXNrVG9UcmFucywKICAgIFRhc2tUb0FkZFNpZ246IFRhc2tUb0FkZFNpZ24sCiAgICBUYXNrVG9EZWxheTogVGFza1RvRGVsYXksCiAgICBUYXNrU2VsZWN0RGVzdGluYXRpb246IFRhc2tTZWxlY3REZXN0aW5hdGlvbiwKICAgIFRhc2tUb0FwcHJvdmVMaW5lOiBUYXNrVG9BcHByb3ZlTGluZSwKICAgIHRhc2tUb1NpZ25TZXF1ZW5jZTogdGFza1RvU2lnblNlcXVlbmNlLAogICAgdGFza1RvU2lnbkxpbmU6IHRhc2tUb1NpZ25MaW5lLAogICAgdGFza1RvQ29tcGxldGU6IHRhc2tUb0NvbXBsZXRlLAogICAgdGFza1RvU2F2ZTogdGFza1RvU2F2ZSwKICAgIHRhc2tUb1JlYWQ6IHRhc2tUb1JlYWQsCiAgICB0YXNrVG9GZWVCYWNrOiB0YXNrVG9GZWVCYWNrLAogICAgdGFza1RvSW5xdVJlcGx5OiB0YXNrVG9JbnF1UmVwbHksCiAgICB1c2VyQWRkU2lnblJlcGx5OiB1c2VyQWRkU2lnblJlcGx5LAogICAgdGFza1RvUmV2b2tlOiB0YXNrVG9SZXZva2UKICB9LAogIHByb3BzOiBbJ3Rhc2tzJywKICAvL+S7u+WKoeivpuaDhQogICd0YXNrX3N0YXRlJywgJ2luc3RJZCcsICd0eXBlJywgJ3Rhc2tJZCcsICdleGVjSWQnLCAnZGVmSWQnLCAnc3RhdHVzJywgJ2Nob2ljZUV4Y3V0b3InLCAnanVtcFR5cGUnLCAnaW5zdFN0YXR1cycsICdsZWFkZXJJZCcsICdteVJlYWRUeXBlJywgJ3JlYWRJZCcsCiAgLy/nn6XkvJrku7vliqHlvoXlip7kvKDpmIXku7vliqHnmoTkuLvplK5JRAogICdyZWFkRG9uZUlkJywKICAvL+efpeS8muS7u+WKoeW3suWKnuS8oOmYheS7u+WKoeeahOS4u+mUrklECiAgJ2FwcHJvdmFsQXJlYScsCiAgLy/lrqHmibnljLrln5/mmL7npLrnmoTlhoXlrrkKICAncmVmZXJPcGluaW9uJywKICAvL+WFgeiuuOWPguiAg+aEj+ingSAo6YCJ5oup5ZCm77yM5YiZ5a6h5om55pe25LiN5YWB6K645Y+C6ICD5ZCM546v6IqC5YW25LuW5Lya562+5Lq65ZGY55qE5oSP6KeBKQogICdub2RlVHlwZScsCiAgLy/lvZPliY3ku7vliqHnsbvlnosKICAnbm9kZUlkJywKICAvL+W9k+WJjeS7u+WKoeiKgueCuQogICdpc0xvb2snLCAnc3BvbnNvclJldm9rZScsCiAgLy/lhYHorrjlj5HotbfkurrmkqTlm57vvIjpu5jorqTkuI3li77pgInvvIkKICAnb3BpbmlvbkZpZWxkJywKICAvL+W9k+WJjeiKgueCueWuoeaJueaEj+ingeWbnuWhq+Wtl+autQogICdhcHBlbmRPcGluaW9uJywKICAvL+aYr+WQpuimhuebluWuoeaJueaEj+ingQogICdzaWduYXR1cmVGaWVsZCcsCiAgLy/oh6rliqjnrb7nq6DlrZfmrrUKICAnc2lnbmF0dXJlQ292ZXInLAogIC8v6Ieq5Yqo562+56ug5piv5ZCm6KaG55uWCiAgJ3NlY3JldEZyZWUnLAogIC8v6Ieq5Yqo562+56ug5pe25piv5ZCm5YWN5a+GLAogICdkZWZLZXknXSwKICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkgewogICAgcmV0dXJuIHsKICAgICAgaXNNazogZmFsc2UsCiAgICAgIC8v5piv5ZCm5piv5qih5Z2X5YyW5byA5Y+R6L+b5p2lCiAgICAgIGlzRGQ6IGZhbHNlLAogICAgICAvLyDmmK/lkKbmmK/lj6rmmL7npLrlrqHmibnpobXpnaIKICAgICAgaXNHZHQ6IGZhbHNlLAogICAgICAvL+aYr+WQpuaciea7muWKqOadoQogICAgICBkaWFsb2dGb3JtVmlzaWJsZTogZmFsc2UsCiAgICAgIGRhaWxvZ1RpdGxlOiAnJywKICAgICAgb3BpbmlvbjogJycsCiAgICAgIGlzSGFuZDogJycsCiAgICAgIHN0YXRlOiAnJywKICAgICAgY2FuTG9jazogJycsCiAgICAgIGZvcm1EYXRhOiAnJywKICAgICAgYWN0aW9uTmFtZTogJycsCiAgICAgIHRleHQ6ICcnLAogICAgICBkaXNhYmxlZDogdHJ1ZSwKICAgICAgYnRuQWxpYXM6ICcnLAogICAgICAvL+mAieaLqeeahOaMiemSrgogICAgICB0b2tlbjogdXRpbHMuZ2V0VXJsS2V5KCd0b2tlbicpLAogICAgICBpc0FwcHJvdmFsT3BpbmlvbjogdHJ1ZSwKICAgICAgLy/mmK/lkKbmmL7npLrlrqHmibnmhI/op4EKICAgICAgaXN6RmlsZTogdHJ1ZSwKICAgICAgLy/mmK/lkKbmmL7npLrmraPmlocKICAgICAgaXNGaWxlOiB0cnVlLAogICAgICAvL+aYr+WQpuaYvuekuumZhOS7tgogICAgICBpc1Byb2Nlc3NSZWNvcmQ6IHRydWUsCiAgICAgIC8v5piv5ZCm5pi+56S65aSE55CG6K6w5b2VCiAgICAgIGlzSW1hZ2VCcG06IHRydWUsCiAgICAgIC8v5piv5ZCm5pi+56S65rWB56iL5Zu+CiAgICAgIHRhc2tTdGF0dXNBcnJheTogWydBUFBST1ZFTElORUlORycsICdBUFBST1ZFTElORUVEJywgJ1NJR05TRVFVRU5DRUlORycsICdTSUdOU0VRVUVOQ0VFRCcsICdTSUdOTElORUlORycsICdTSUdOTElORUVEJ10sCiAgICAgIGlzSGFuZzogZmFsc2UsCiAgICAgIG9waW5pb25GaWxlczogJycsCiAgICAgIGFwcGVuZFN0cjogdHJ1ZSwKICAgICAgaW5pdEJvQXR0cjogJycKICAgIH07CiAgfSwKICB3YXRjaDogewogICAgc3RhdHVzOiBmdW5jdGlvbiBzdGF0dXMobmV3VmFsLCBvbGRWYWwpIHsKICAgICAgdmFyIF90aGlzMiA9IHRoaXM7CiAgICAgIHRoaXMuc3RhdGUgPSBuZXdWYWw7IC8vbmV3VmFs5Y2z5pivc3RhdHVzCiAgICAgIGlmICh0aGlzLnN0YXRlICE9ICdDT1BZVE8nICYmIHRoaXMuc3RhdGUgIT0gJ0ZPTExPVycgJiYgdGhpcy5zdGF0ZSAhPSAnQ09NTVUnKSB7CiAgICAgICAgdmFyIHBhcmFtcyA9IHsKICAgICAgICAgIHRhc2tJZDogdGhpcy50YXNrSWQsCiAgICAgICAgICBsZWFkZXJJZDogdGhpcy5sZWFkZXJJZCwKICAgICAgICAgIG5vZGVUeXBlOiB0aGlzLm5vZGVUeXBlCiAgICAgICAgfTsKICAgICAgICAvL+WIpOaWreaYr+WQpuaYr+aZrumAmueUqOaIt+S7u+WKoeWKoOetvuWQjueahOW+heWKnuS7u+WKoQogICAgICAgIGlmICh0aGlzLnRhc2tzLmJwbVRhc2sucGFyZW50SWQgIT0gJzAnKSB7CiAgICAgICAgICBwYXJhbXMuaXNBZGRTaWduID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgLy/pgJrov4fmtYHnqIvlrp7kvotJROWSjOS7u+WKoUlE6I635Y+W5a6h5om55oSP6KeBCiAgICAgICAgaWYgKHRoaXMudGFza0lkICYmIHRoaXMuaW5zdElkKSB7CiAgICAgICAgICB2YXIgYnBtU2F2ZU9waW5pb24gPSB7CiAgICAgICAgICAgIGluc3RJZDogdGhpcy5pbnN0SWQsCiAgICAgICAgICAgIHRhc2tJZDogdGhpcy50YXNrSWQKICAgICAgICAgIH07CiAgICAgICAgICBmbG93LmdldEJwbVNhdmVPcGluaW9uQnlUZWFtKGJwbVNhdmVPcGluaW9uKS50aGVuKGZ1bmN0aW9uIChkYXRhKSB7CiAgICAgICAgICAgIGlmIChkYXRhLnN0YXRlKSB7CiAgICAgICAgICAgICAgaWYgKGRhdGEudmFsdWUgIT0gJycpIHsKICAgICAgICAgICAgICAgIF90aGlzMi50ZXh0ID0gZGF0YS52YWx1ZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgnc3RvcmVQcm9jZXNzL3Rhc2tEZXRhaWwnLCBwYXJhbXMpOyAvL+iOt+WPluaTjeS9nOaMiemSrgogICAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdzdG9yZVByb2Nlc3MvY2FuTG9jaycsIHsKICAgICAgICAgIHRhc2tJZDogdGhpcy50YXNrSWQsCiAgICAgICAgICBsZWFkZXJJZDogdGhpcy5sZWFkZXJJZAogICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKGNhbkxvY2spIHsKICAgICAgICAgIC8v6I635Y+W5Lu75Yqh5piv5ZCm6IO96ZSB5a6aCiAgICAgICAgICBpZiAoY2FuTG9jayA9PSA0ICYmIF90aGlzMi4kcm91dGVyLmhpc3RvcnkuY3VycmVudC5mdWxsUGF0aC5pbmRleE9mKCd0b2tlbicpID4gLTEpIHsKICAgICAgICAgICAgY2FuTG9jayA9ICc1JzsKICAgICAgICAgIH0KICAgICAgICAgIF90aGlzMi5jYW5Mb2NrID0gY2FuTG9jazsKICAgICAgICB9KTsKICAgICAgfQogICAgfSwKICAgIGFwcHJvdmFsQXJlYTogZnVuY3Rpb24gYXBwcm92YWxBcmVhKG5ld1ZhbCwgb2xkVmFsKSB7CiAgICAgIC8v5a6h5om55Yy65Z+f5pi+56S655qE5YaF5a65CiAgICAgIGlmIChuZXdWYWwpIHsKICAgICAgICB0aGlzLmFwcHJvdmFsQXJlYSA9IG5ld1ZhbDsKICAgICAgICBpZiAodGhpcy5hcHByb3ZhbEFyZWEpIHsKICAgICAgICAgIGlmICh0aGlzLmFwcHJvdmFsQXJlYS5pbmRleE9mKCdhcHByb3ZhbE9waW5pb24nKSA9PSAtMSkgewogICAgICAgICAgICB0aGlzLmlzQXBwcm92YWxPcGluaW9uID0gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodGhpcy5hcHByb3ZhbEFyZWEuaW5kZXhPZignekZpbGUnKSA9PSAtMSkgewogICAgICAgICAgICB0aGlzLmlzekZpbGUgPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0aGlzLmFwcHJvdmFsQXJlYS5pbmRleE9mKCdmaWxlJykgPT0gLTEpIHsKICAgICAgICAgICAgdGhpcy5pc0ZpbGUgPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0aGlzLmFwcHJvdmFsQXJlYS5pbmRleE9mKCdwcm9jZXNzUmVjb3JkJykgPT0gLTEpIHsKICAgICAgICAgICAgdGhpcy5pc1Byb2Nlc3NSZWNvcmQgPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0aGlzLmFwcHJvdmFsQXJlYS5pbmRleE9mKCdpbWFnZUJwbScpID09IC0xKSB7CiAgICAgICAgICAgIHRoaXMuaXNJbWFnZUJwbSA9IGZhbHNlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogIH0sCiAgY29tcHV0ZWQ6IG1hcFN0YXRlKHsKICAgIHJvd3NCdG46IGZ1bmN0aW9uIHJvd3NCdG4oc3RhdGUpIHsKICAgICAgcmV0dXJuIHN0YXRlLnN0b3JlUHJvY2Vzcy5yb3dzQnRuOwogICAgfSwKICAgIGZvcmNlTG9jazogZnVuY3Rpb24gZm9yY2VMb2NrKHN0YXRlKSB7CiAgICAgIHJldHVybiBzdGF0ZS5zdG9yZVByb2Nlc3MuZm9yY2VMb2NrOwogICAgfSwKICAgIGlzU2hvd0FwcHJvdmFsQXJlYTogZnVuY3Rpb24gaXNTaG93QXBwcm92YWxBcmVhKCkgewogICAgICBpZiAodGhpcy5zdGF0dXMgIT0gJ0NPUFlUTycgJiYgdGhpcy5zdGF0dXMgIT0gJ0ZPTExPVycgJiYgKHRoaXMudHlwZSAhPSB1bmRlZmluZWQgfHwgdGhpcy50YXNrSWQgIT0gdW5kZWZpbmVkKSAmJiB0aGlzLmluc3RTdGF0dXMgIT0gJ2VuZCcgJiYgdGhpcy5pbnN0U3RhdHVzICE9ICdtYW51YWxlbmQnIHx8IHRoaXMuc3RhdHVzID09ICdDT01NVScpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfSksCiAgYmVmb3JlRGVzdHJveTogZnVuY3Rpb24gYmVmb3JlRGVzdHJveSgpIHsKICAgIC8v57uE5Lu25rOo6ZSA56e76Zmk5LqL5Lu255uR5ZCs5Zmo77yM5Lul6Ziy5aSa5qyh6LCD55SoCiAgICB0aGlzLiRyb290LiRvZmYoJ2Zvcm1Mb2FkaW5nJyk7CiAgfSwKICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkgewogICAgdmFyIHRoaXNfID0gdGhpczsKICAgIC8v55uR5ZCs6KGo5Y2V5Yqg6L295a6M5oiQ5Y+R5biD5LqL5Lu2CiAgICB0aGlzXy4kcm9vdC4kb24oJ2Zvcm1Mb2FkaW5nJywgZnVuY3Rpb24gKHZhbHVlKSB7CiAgICAgIHRoaXNfLmRpc2FibGVkID0gdmFsdWU7CiAgICAgIC8v5qOA5p+l5b2T5YmN5oyC6LW354q25oCB77yM5Yik5pat5piv5ZCm56aB55So5oyJ6ZKuCiAgICAgIHRoaXNfLmNoZWNrSW5zdFN0YXR1cygpOwogICAgfSk7CiAgfSwKICBtZXRob2RzOiB7CiAgICAvLyDpgJrov4fmjInpkq7liKvlkI3ojrflj5bmjInpkq7kuLvpopjnsbvlnosKICAgIGdldFR5cGU6IGZ1bmN0aW9uIGdldFR5cGUoYWxpYXMpIHsKICAgICAgdmFyIHR5cGUgPSAnZGVmYXVsdCc7CiAgICAgIHN3aXRjaCAoYWxpYXMpIHsKICAgICAgICBjYXNlICdhZ3JlZSc6CiAgICAgICAgY2FzZSAnYWdyZWVUcmFucyc6CiAgICAgICAgICB0eXBlID0gJ3ByaW1hcnknOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnb3Bwb3NlJzoKICAgICAgICBjYXNlICdvcHBvc2VUcmFucyc6CiAgICAgICAgY2FzZSAncmVqZWN0JzoKICAgICAgICBjYXNlICdlbmRQcm9jZXNzJzoKICAgICAgICAgIHR5cGUgPSAnZGFuZ2VyJzsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHJldHVybiB0eXBlOwogICAgfSwKICAgIC8vIC8v5pqC5a2Y5a6h5om55oSP6KeBCiAgICAvLyBjcmVhdGVCcG1TYXZlT3BpbmlvbihmbGFnKSB7CiAgICAvLyAgIC8v54K55Ye75L+d5a2Y5pqC5a2Y5a6h5om55oSP6KeB5pe277yM5rKh5pyJ5aGr5YaZ5a6h5om55oSP6KeB5LiN5aSE55CGCiAgICAvLyAgIGlmICh0aGlzLiRyZWZzLm9waW5pb25UZXh0LmdldE9waW5pb24oKSA9PSAiIiAmJiBmbGFnKSB7CiAgICAvLyAgICAgcmV0dXJuOwogICAgLy8gICB9CiAgICAvLyAgIGlmICh0aGlzLiRyZWZzLm9waW5pb25UZXh0LmdldE9waW5pb24oKSA9PSAiIikgewogICAgLy8gICAgIE1lc3NhZ2Uud2FybmluZygi6K+36L6T5YWl5a6h5om55oSP6KeB5YaF5a65Iik7CiAgICAvLyAgIH0gZWxzZSB7CiAgICAvLyAgICAgbGV0IGJwbVNhdmVPcGluaW9uID0geyBwcm9jSW5zdElkOiB0aGlzLmluc3RJZCwgdGFza0lkOiB0aGlzLnRhc2tJZCwgb3BpbmlvbjogdGhpcy4kcmVmcy5vcGluaW9uVGV4dC5nZXRPcGluaW9uKCkgfTsKICAgIC8vICAgICBmbG93LmNyZWF0ZUJwbVNhdmVPcGluaW9uKGJwbVNhdmVPcGluaW9uKS50aGVuKGRhdGEgPT4gewogICAgLy8gICAgICAgaWYgKGRhdGEuc3RhdGUpIHsKICAgIC8vICAgICAgICAgaWYgKCFmbGFnKSB7CiAgICAvLyAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7IHR5cGU6ICJzdWNjZXNzIiwgbWVzc2FnZTogZGF0YS5tZXNzYWdlIH0pOwogICAgLy8gICAgICAgICB9CiAgICAvLyAgICAgICB9CiAgICAvLyAgICAgfSk7CiAgICAvLyAgIH0KICAgIC8vIH0sCiAgICAvL+iOt+WPluaEj+ingQogICAgLy8gZ2V0T3BpbmlvbihvcGluaW9uKSB7CiAgICAvLyAgIHRoaXMudGV4dCA9IG9waW5pb247CiAgICAvLyAgIGxldCBvcGluaW9WYWx1ZSA9IHRoaXMuJHJlZnMub3BpbmlvblRleHQuZ2V0T3BpbmlvbigpOwogICAgLy8gICBpZiAodGhpcy5vcGluaW9uRmllbGQpIHsKICAgIC8vICAgICBsZXQgY3VycmVudFVzZXIgPSB0aGlzLiRzdG9yZS5zdGF0ZS51c2VyLmN1cnJlbnRVc2VyRGV0YWlsLnVzZXI7CiAgICAvLyAgICAgbGV0IG1vbWVudCA9IHJlcXVpcmUoIm1vbWVudCIpOwogICAgLy8gICAgIGxldCBib0RhdGEgPSB0aGlzLiRyZWZzLmZvcm1Db250ZW50LmRhdGE7CiAgICAvLyAgICAgbGV0IGZpbGVkID0gdGhpcy5vcGluaW9uRmllbGQuc3BsaXQoIi4iKTsKICAgIC8vICAgICBpZiAoYm9EYXRhW2ZpbGVkWzBdXVtmaWxlZFsxXV0gPT0gJzxwPjxici8+PC9wPicpIHsKICAgIC8vICAgICAgIGJvRGF0YVtmaWxlZFswXV1bZmlsZWRbMV1dID0gIiI7CiAgICAvLyAgICAgfQogICAgLy8gICAgIC8v5piv5ZCm6KaG55uW5a6h5om55oSP6KeBCiAgICAvLyAgICAgaWYgKHRoaXMuYXBwZW5kT3BpbmlvbikgewogICAgLy8gICAgICAgaWYgKG9waW5pb1ZhbHVlKSB7CiAgICAvLyAgICAgICAgIGJvRGF0YVtmaWxlZFswXV1bZmlsZWRbMV1dID0gb3BpbmlvVmFsdWUgKyAiXG4iICsgY3VycmVudFVzZXIuZnVsbG5hbWUgKyAiICIgKyBtb21lbnQoKS5mb3JtYXQoIllZWVktTU0tREQgSEg6bW06c3MiKTsKICAgIC8vICAgICAgIH0KICAgIC8vICAgICB9IGVsc2UgewogICAgLy8gICAgICAgaWYgKG9waW5pb1ZhbHVlKSB7CiAgICAvLyAgICAgICAgIG9waW5pb1ZhbHVlICs9ICJcbiIgKyBjdXJyZW50VXNlci5mdWxsbmFtZSArICIgIiArIG1vbWVudCgpLmZvcm1hdCgiWVlZWS1NTS1ERCBISDptbTpzcyIpOwogICAgLy8gICAgICAgfQogICAgLy8gICAgICAgaWYgKHRoaXMuYXBwZW5kU3RyKSB7CiAgICAvLyAgICAgICAgIHRoaXMuaW5pdEJvQXR0ciA9IGJvRGF0YVtmaWxlZFswXV1bZmlsZWRbMV1dOwogICAgLy8gICAgICAgfQogICAgLy8gICAgICAgaWYgKGZpbGVkLmxlbmd0aCA9PSAyKSB7CiAgICAvLyAgICAgICAgIGlmICh0aGlzLmluaXRCb0F0dHIpIHsKICAgIC8vICAgICAgICAgICBpZiAob3BpbmlvbikgewogICAgLy8gICAgICAgICAgICAgYm9EYXRhW2ZpbGVkWzBdXVtmaWxlZFsxXV0gPSB0aGlzLmluaXRCb0F0dHIgKyAiXG5cbiIgKyBvcGluaW9WYWx1ZTsKICAgIC8vICAgICAgICAgICB9IGVsc2UgewogICAgLy8gICAgICAgICAgICAgYm9EYXRhW2ZpbGVkWzBdXVtmaWxlZFsxXV0gPSB0aGlzLmluaXRCb0F0dHIKICAgIC8vICAgICAgICAgICB9CiAgICAvLyAgICAgICAgIH0gZWxzZSB7CiAgICAvLyAgICAgICAgICAgYm9EYXRhW2ZpbGVkWzBdXVtmaWxlZFsxXV0gPSBvcGluaW9WYWx1ZTsKICAgIC8vICAgICAgICAgfQogICAgLy8gICAgICAgfQogICAgLy8gICAgICAgdGhpcy5hcHBlbmRTdHIgPSBmYWxzZTsKICAgIC8vICAgICB9CiAgICAvLyAgIH0KICAgIC8vIH0sCiAgICAvL+S/neWtmOaMiemSrgogICAgc2F2ZURyYWZ0QnRuOiBmdW5jdGlvbiBzYXZlRHJhZnRCdG4oKSB7CiAgICAgIHZhciBfdGhpczMgPSB0aGlzOwogICAgICAvL3RoaXMuJHJlZnMudGFza1RvU2F2ZS5zaG93RGlhbG9nKCk7CiAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdzdG9yZVByb2Nlc3MvY2FuTG9jaycsIHsKICAgICAgICB0YXNrSWQ6IHRoaXMudGFza0lkLAogICAgICAgIGxlYWRlcklkOiB0aGlzLmxlYWRlcklkCiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKGNhbkxvY2spIHsKICAgICAgICAvL+iOt+WPluS7u+WKoeaYr+WQpuiDvemUgeWumgogICAgICAgIGlmIChjYW5Mb2NrID09IDQgJiYgX3RoaXMzLiRyb3V0ZXIuaGlzdG9yeS5jdXJyZW50LmZ1bGxQYXRoLmluZGV4T2YoJ3Rva2VuJykgPiAtMSkgewogICAgICAgICAgY2FuTG9jayA9ICc1JzsKICAgICAgICB9CiAgICAgICAgaWYgKGNhbkxvY2sgPT0gNCkgewogICAgICAgICAgX3RoaXMzLiRtZXNzYWdlLndhcm5pbmcoJ+S7u+WKoeW3suiiq+WFtuS7luS6uuetvuaUtuS6hicpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBfdGhpczMudGFza1NhdmVEcmFmdCgpOyAvL+S/neWtmOihqOWNleWGheWuuQogICAgICAgICAgLy90aGlzLmNyZWF0ZUJwbVNhdmVPcGluaW9uKHRydWUpOy8v5pqC5a2Y5a6h5om55oSP6KeBCiAgICAgICAgfQogICAgICB9KTsKICAgIH0sCiAgICAvL+WQjOaEj+aMiemSrgogICAgYWdyZWVCdG46IGZ1bmN0aW9uIGFncmVlQnRuKCkgewogICAgICB2YXIgX3RoaXM0ID0gdGhpczsKICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ3N0b3JlUHJvY2Vzcy9jYW5Mb2NrJywgewogICAgICAgIHRhc2tJZDogdGhpcy50YXNrSWQsCiAgICAgICAgbGVhZGVySWQ6IHRoaXMubGVhZGVySWQKICAgICAgfSkudGhlbihmdW5jdGlvbiAoY2FuTG9jaykgewogICAgICAgIC8v6I635Y+W5Lu75Yqh5piv5ZCm6IO96ZSB5a6aCiAgICAgICAgaWYgKGNhbkxvY2sgPT0gNCAmJiBfdGhpczQuJHJvdXRlci5oaXN0b3J5LmN1cnJlbnQuZnVsbFBhdGguaW5kZXhPZigndG9rZW4nKSA+IC0xKSB7CiAgICAgICAgICBjYW5Mb2NrID0gJzUnOwogICAgICAgIH0KICAgICAgICBpZiAoY2FuTG9jayA9PSA0KSB7CiAgICAgICAgICBfdGhpczQuJG1lc3NhZ2Uud2FybmluZygn5Lu75Yqh5bey6KKr5YW25LuW5Lq6562+5pS25LqGJyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIF90aGlzNC50YXNrQWdyZWUoKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSwKICAgIGNoZWNrSW5zdFN0YXR1czogZnVuY3Rpb24gY2hlY2tJbnN0U3RhdHVzKGNhbGxiYWNrKSB7CiAgICAgIHZhciB0aGlzXyA9IHRoaXM7CiAgICAgIHRoaXMuJGh0dHAuZ2V0KCcke2JwbVJ1blRpbWV9L3J1bnRpbWUvaW5zdGFuY2UvdjEvZ2V0RGVmU3RhdHVzP2luc3RJZD0nICsgKHRoaXMuaW5zdElkIHx8ICcnKSArICcmdGFza0lkPScgKyAodGhpcy50YXNrSWQgfHwgJycpKS50aGVuKGZ1bmN0aW9uIChyZXNwKSB7CiAgICAgICAgaWYgKHJlc3AuZGF0YSkgewogICAgICAgICAgcmVzcC5kYXRhICs9ICcnOwogICAgICAgICAgaWYgKHJlc3AuZGF0YS5pbmRleE9mKCcxJykgPiAtMSkgewogICAgICAgICAgICB0aGlzXy5kaXNhYmxlZCA9IHRydWU7CiAgICAgICAgICAgIHRoaXNfLmlzSGFuZyA9IHRydWU7CiAgICAgICAgICAgIHRoaXNfLiRtZXNzYWdlLndhcm5pbmcoJ+W9k+WJjea1geeoi+WunuS+i+W3suiiq+aMgui1t++8jOaXoOazleWuoeaJuScpOwogICAgICAgICAgfSBlbHNlIGlmIChyZXNwLmRhdGEuaW5kZXhPZignMycpID4gLTEpIHsKICAgICAgICAgICAgdGhpc18uZGlzYWJsZWQgPSB0cnVlOwogICAgICAgICAgICB0aGlzXy4kbWVzc2FnZS53YXJuaW5nKCflvZPliY3mtYHnqIvlrprkuYnlt7LooqvnpoHmraLlrp7kvovvvIzml6Dms5XlrqHmibknKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKCk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChjYWxsYmFjaykgewogICAgICAgICAgY2FsbGJhY2soKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSwKICAgIC8v5o+Q5Lqk5LqL5Lu2CiAgICBzdWJtaXRSZXZva2U6IGZ1bmN0aW9uIHN1Ym1pdFJldm9rZShhbGlhcykgewogICAgICB2YXIgX3RoaXM1ID0gdGhpczsKICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgLy/ojrflj5ZWVUXooajljZXlrp7kvoso5Yik5pat5piv5ZCm5piv5Zyo57q/6KGo5Y2VKQogICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoJ29ubGluZS1mb3JtJylbMF0pIHsKICAgICAgICB2YXIgdGFibGVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoJ29ubGluZS1mb3JtJylbMF0uX192dWVfXy5wZXJtaXNzaW9uLnRhYmxlOyAvL+iOt+WPluWtkOihqOadg+mZkAogICAgICAgIHZhciBib0RhdGEgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSgnb25saW5lLWZvcm0nKVswXS5fX3Z1ZV9fLmRhdGE7IC8v6I635Y+W6KGo5Y2VYm/lr7nosaEKICAgICAgICB2YXIgekRhdGEgPSB7fTsKICAgICAgICBmb3IgKHZhciBrIGluIGJvRGF0YSkgewogICAgICAgICAgekRhdGEgPSBib0RhdGFba107CiAgICAgICAgfQogICAgICAgIGZvciAodmFyIGtleSBpbiB0YWJsZXMpIHsKICAgICAgICAgIC8v5aaC5p6c5pyJ5a+85YWl5bGe5oCn77yM5YiZ6KGo5piO5LiN5piv5a2Q6KGo6ICM5piv5pWw5o2u5oql6KGo77yM5LiN5YGa5b+F5aGr5qCh6aqMCiAgICAgICAgICBpZiAodGFibGVzW2tleV0gJiYgdGFibGVzW2tleV0uaGFzT3duUHJvcGVydHkoJ2V4cG9ydCcpKSB7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgaWYgKCh0YWJsZXNba2V5XS5yZXF1aXJlZCA9PSB0cnVlIHx8IHRhYmxlc1trZXldLnJlcXVpcmVkID09ICd0cnVlJykgJiYgekRhdGFbJ3N1Yl8nICsga2V5XSAmJiB6RGF0YVsnc3ViXycgKyBrZXldLmxlbmd0aCA9PSAwKSB7CiAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2UoewogICAgICAgICAgICAgIG1lc3NhZ2U6ICflrZDooajlv4XloavkuIDmnaHorrDlvZUnLAogICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICB0aGlzLnByZXNzQWN0aW9uID0gdHJ1ZTsKICAgICAgdGhpcy5idG5BbGlhcyA9IGFsaWFzOwogICAgICAvL+WFs+mXrQogICAgICBpZiAodGhpcy5idG5BbGlhcyA9PSAndGFza0Nsb3NlJykgewogICAgICAgIHV0aWxzLmNsb3NlQWxsTm90aWZpY2F0aW9uKCk7CiAgICAgICAgLy/liKTmlq3oj5zljZXmmK/lkKbmmK/mqKHlnZflvIDlj5HphY3nva7lh7rmnaXnmoQKICAgICAgICB0aGlzLiRyb3V0ZXIuZ28oLTEpOwogICAgICAgIC8vdG9kbwogICAgICAgIC8vIGlmICh0aGlzLiRyb3V0ZS5uYW1lLmluZGV4T2YoJ3JlcG9ydE1vZHVsZUluc3QnKSAhPSAtMSkgewogICAgICAgIC8vICAgICB0aGlzLiRyb3V0ZXIucHVzaCgKICAgICAgICAvLyAgICAgICAgICcvc3RhdGVtZW50L3RlbXBsYXRlL3ByZXZpZXcvJyArCiAgICAgICAgLy8gICAgICAgICAgICAgdGhpcy4kcm91dGUucGFyYW1zLnRlbXBsYXRlS2V5ICsKICAgICAgICAvLyAgICAgICAgICAgICAnL3RvZG8vJyArCiAgICAgICAgLy8gICAgICAgICAgICAgdGhpcy4kcm91dGUucGFyYW1zLmRlZktleSArCiAgICAgICAgLy8gICAgICAgICAgICAgJy90cnVlJwogICAgICAgIC8vICAgICApCiAgICAgICAgLy8gfSBlbHNlIGlmICh0aGlzLiRyb3V0ZS5uYW1lLmluZGV4T2YoJ3N5c01vZHVsZUluc3QnKSAhPSAtMSkgewogICAgICAgIC8vICAgICB0aGlzLiRyb3V0ZXIucHVzaCgKICAgICAgICAvLyAgICAgICAgICcvdi1mbG93L3YtdG9kby8nICsgdGhpcy4kcm91dGUucGFyYW1zLmRlZktleQogICAgICAgIC8vICAgICApCiAgICAgICAgLy8gfSBlbHNlIGlmICgKICAgICAgICAvLyAgICAgdGhpcy50eXBlID09ICdkb25lJyB8fAogICAgICAgIC8vICAgICB0aGlzLnR5cGUgPT0gJ3JlcXVlc3QnIHx8CiAgICAgICAgLy8gICAgIHRoaXMubXlSZWFkVHlwZSA9PSAnbXlSZXF1ZXN0JwogICAgICAgIC8vICkgewogICAgICAgIC8vICAgICB0aGlzLiRyb3V0ZXIucHVzaCgnL3YtZmxvdy92LXJlcXVlc3QnKQogICAgICAgIC8vIH0gZWxzZSBpZiAoCiAgICAgICAgLy8gICAgIHRoaXMuc3RhdGUgPT0gJ0NPTU1VJyB8fAogICAgICAgIC8vICAgICB0aGlzLnN0YXRlID09ICdGT0xMT1cnIHx8CiAgICAgICAgLy8gICAgIHRoaXMuJHJvdXRlLm5hbWUgPT0gJ2luc3RSZWFkLXJlYWQnCiAgICAgICAgLy8gKSB7CiAgICAgICAgLy8gICAgIHRoaXMuJHJvdXRlci5wdXNoKCcvdi1mbG93L3YtdG9kb1JlYWQnKSAvL+W+hemYhQogICAgICAgIC8vIH0gZWxzZSBpZiAodGhpcy4kcm91dGUubmFtZSA9PSAnaW5zdFJlYWQtZG9uZScpIHsKICAgICAgICAvLyAgICAgdGhpcy4kcm91dGVyLnB1c2goJy92LWZsb3cvdi1kb25lUmVhZCcpIC8v5bey6ZiFCiAgICAgICAgLy8gfSBlbHNlIGlmICh0aGlzLiRyb3V0ZS5uYW1lID09ICdteVJlYWQtdHlwZScpIHsKICAgICAgICAvLyAgICAgdGhpcy4kcm91dGVyLnB1c2goJy92LWZsb3cvdi1teVJlYWQnKSAvL+aIkeS8oOmYheeahAogICAgICAgIC8vIH0gZWxzZSBpZiAoCiAgICAgICAgLy8gICAgIHRoaXMuJHJvdXRlLm5hbWUgPT0gJ2luc3RSZWFkJyAmJgogICAgICAgIC8vICAgICB0aGlzLiRyb3V0ZS5wYXJhbXMubXlSZWFkVHlwZSA9PSAnZGVsZWdhdGUnCiAgICAgICAgLy8gKSB7CiAgICAgICAgLy8gICAgIHRoaXMuJHJvdXRlci5wdXNoKCcvdi1mbG93L3YtbXlEZWxlZ2F0ZScpCiAgICAgICAgLy8gfSBlbHNlIHsKICAgICAgICAvLyAgICAgaWYgKEpTT04uc3RyaW5naWZ5KHRoaXMuJHJvdXRlLnF1ZXJ5KSA9PSAne30nKSB7CiAgICAgICAgLy8gICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCgnL3YtZmxvdy92LXRvZG8nKQogICAgICAgIC8vICAgICB9IGVsc2UgewogICAgICAgIC8vICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goJy9ob21lJykKICAgICAgICAvLyAgICAgfQogICAgICAgIC8vIH0KICAgICAgfSBlbHNlIGlmICh0aGlzLmJ0bkFsaWFzID09ICdzYXZlRHJhZnQnKSB7CiAgICAgICAgLy8gdG9kbyDkv53lrZgKICAgICAgICAvLyB0aGlzLnNhdmVEcmFmdEJ0bigpCiAgICAgIH0gZWxzZSBpZiAodGhpcy5idG5BbGlhcyA9PSAnYWdyZWUnKSB7CiAgICAgICAgLy8gdG9kbyDlkIzmhI8KICAgICAgICB0aGlzLmFncmVlQnRuKCk7CiAgICAgIH0gZWxzZSBpZiAodGhpcy5idG5BbGlhcyA9PSAnaGFuZGxlUmVhZCcpIHsKICAgICAgICAvL+S8oOmYheWbnuWkjQogICAgICAgIHRoaXMuaGFuZGxlUmVhZCgpOwogICAgICB9IGVsc2UgaWYgKHRoaXMuYnRuQWxpYXMgPT0gJ2hhbmRsZVJldm9rZScpIHsKICAgICAgICAvL+aSpOWbngogICAgICAgIHRoaXMuaGFuZGxlUmV2b2tlKCk7CiAgICAgIH0gZWxzZSBpZiAodGhpcy5idG5BbGlhcyA9PSAnY29tbXVGZWVkQmFjaycpIHsKICAgICAgICAvL+ayn+mAmuWPjemmiAogICAgICAgIHRoaXMuY29tbXVGZWVkQmFjaygpOwogICAgICB9IGVsc2UgaWYgKHRoaXMuYnRuQWxpYXMgPT0gJ3Rhc2tUb0lucXVSZXBseScpIHsKICAgICAgICAvL+W+geivouWbnuWkjQogICAgICAgIHRoaXMudGFza1RvSW5xdVJlcGx5KCk7CiAgICAgIH0gZWxzZSBpZiAodGhpcy5idG5BbGlhcyA9PSAndXNlckFkZFNpZ24nKSB7CiAgICAgICAgLy/mma7pgJroioLngrnliqDnrb7lj43ppogKICAgICAgICB0aGlzLnVzZXJBZGRTaWduKCk7CiAgICAgIH0gZWxzZSBpZiAodGhpcy5idG5BbGlhcyA9PSAncmVqZWN0JykgewogICAgICAgIC8vdG9kbyDpqbPlm54KICAgICAgICB0aGlzLnRhc2tUb1JlamVjdCgpOwogICAgICB9IGVsc2UgaWYgKHRoaXMuYnRuQWxpYXMgPT0gJ2RlbGVnYXRlJykgewogICAgICAgIC8v6L2s5YqeCiAgICAgICAgdGhpcy50YXNrVG9EZWxlZ2F0ZSgpOwogICAgICB9IGVsc2UgaWYgKHRoaXMuYnRuQWxpYXMgPT0gJ2lucXUnKSB7CiAgICAgICAgLy/lvoHor6IKICAgICAgICB0aGlzLnRhc2tUb0lucXUoKTsKICAgICAgfSBlbHNlIGlmICh0aGlzLmJ0bkFsaWFzID09ICdlbmRQcm9jZXNzJykgewogICAgICAgIC8vIHRvZG8g5rWB56iL57uI5q2iCiAgICAgICAgdGhpcy50YXNrVG9FbmRQcm9jZXNzKCk7CiAgICAgIH0gZWxzZSBpZiAodGhpcy5idG5BbGlhcyA9PSAnc3RhcnRUcmFucycpIHsKICAgICAgICAvL3RvZG8g5rWB6L2sCiAgICAgICAgdGhpcy50YXNrVG9UcmFucygpOwogICAgICB9IGVsc2UgaWYgKHRoaXMuYnRuQWxpYXMgPT0gJ2FkZFNpZ24nKSB7CiAgICAgICAgLy90b2RvIOWKoOetvgogICAgICAgIHRoaXMudGFza1RvQWRkU2lnbigpOwogICAgICB9IGVsc2UgaWYgKHRoaXMuYnRuQWxpYXMgPT0gJ3Rhc2tEZWxheScpIHsKICAgICAgICAvL3RvZG8g5Lu75Yqh5bu25pyfCiAgICAgICAgLy8gdGhpcy50YXNrVG9EZWxheSgpOwogICAgICB9IGVsc2UgaWYgKHRoaXMuYnRuQWxpYXMgPT0gJ2FncmVlVHJhbnMnKSB7CiAgICAgICAgLy90b2RvIOWQjOaEj++8iOa1gei9rO+8iQogICAgICAgIHRoaXMudGFza0FncmVlVHJhbnMoKTsKICAgICAgfSBlbHNlIGlmICh0aGlzLmJ0bkFsaWFzID09ICdvcHBvc2VUcmFucycpIHsKICAgICAgICAvL3RvZG8g5Y+N5a+577yI5rWB6L2s77yJCiAgICAgICAgdGhpcy50YXNrT3Bwb3NlVHJhbnMoKTsKICAgICAgfSBlbHNlIGlmICh0aGlzLmJ0bkFsaWFzID09ICdvcHBvc2UnKSB7CiAgICAgICAgLy90b2RvIOWPjeWvuQogICAgICAgIHRoaXMudGFza09wcG9zZSgpOwogICAgICB9IGVsc2UgaWYgKHRoaXMuYnRuQWxpYXMgPT0gJ2xvY2tVbmxvY2snKSB7CiAgICAgICAgLy/nrb7mlLYKICAgICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgnc3RvcmVQcm9jZXNzL2NhbkxvY2snLCB0aGlzLnRhc2tJZCkudGhlbihmdW5jdGlvbiAoY2FuTG9jaykgewogICAgICAgICAgLy/ojrflj5bku7vliqHmmK/lkKbog73plIHlrpoKICAgICAgICAgIGlmIChjYW5Mb2NrID09IDQgJiYgX3RoaXM1LiRyb3V0ZXIuaGlzdG9yeS5jdXJyZW50LmZ1bGxQYXRoLmluZGV4T2YoJ3Rva2VuJykgPiAtMSkgewogICAgICAgICAgICBjYW5Mb2NrID0gJzUnOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGNhbkxvY2sgPT0gNCkgewogICAgICAgICAgICBfdGhpczUuJG1lc3NhZ2Uud2FybmluZygn5Lu75Yqh5bey6KKr5YW25LuW5Lq6562+5pS25LqGJyk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBfdGhpczUubG9ja1VubG9jaygpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9IGVsc2UgaWYgKHRoaXMuYnRuQWxpYXMgPT0gJ2FwcHJvdmVMaW5lJykgewogICAgICAgIC8v5bm26KGM5a6h5om5CiAgICAgICAgdGhpcy50YXNrQXBwcm92ZUxpbmUoKTsKICAgICAgfSBlbHNlIGlmICh0aGlzLmJ0bkFsaWFzID09ICdzaWduU2VxdWVuY2UnKSB7CiAgICAgICAgLy8g6aG65bqP562+572yCiAgICAgICAgdGhpcy50YXNrU2lnblNlcXVlbmNlKCk7CiAgICAgIH0gZWxzZSBpZiAodGhpcy5idG5BbGlhcyA9PSAnc2lnbkxpbmUnKSB7CiAgICAgICAgLy8g5bm26KGM562+572yCiAgICAgICAgdGhpcy50YXNrU2lnbkxpbmUoKTsKICAgICAgfQogICAgfSwKICAgIC8v5omn6KGM5YmN572u6ISa5pysCiAgICBydW5CZWZvcmVTY3JpcHQ6IGZ1bmN0aW9uIHJ1bkJlZm9yZVNjcmlwdCgpIHsKICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgdmFyIGl0ZW0gPSB1dGlscy5pbmRleE9mTGlzdChfdGhpcy5yb3dzQnRuLCAnYWxpYXMnLCBfdGhpcy5idG5BbGlhcyk7CiAgICAgIHJldHVybiBfdGhpcy50ZW1wU2NyaXB0KGl0ZW0uYmVmb3JlU2NyaXB0KTsKICAgIH0sCiAgICAvL+aJp+ihjOWJjee9ruiEmuacrAogICAgdGVtcFNjcmlwdDogZnVuY3Rpb24gdGVtcFNjcmlwdChzY3JpcHQpIHsKICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgdmFyIF9yZXEgPSByZXE7CiAgICAgIHZhciBib0RhdGEgPSBfdGhpcy4kcmVmcy5mb3JtQ29udGVudC5kYXRhOwogICAgICB2YXIgdGVtcFNjcmlwdCA9ICd2YXIgdGVtcEZ1bmN0aW9uID0gZnVuY3Rpb24oX3JlcSxkYXRhLF90aGlzKXsgJyArIHNjcmlwdCArICd9Oyc7CiAgICAgIHZhciByZXN1bHQgPSBldmFsKHRlbXBTY3JpcHQgKyAndGVtcEZ1bmN0aW9uKF9yZXEsYm9EYXRhLF90aGlzKTsnKTsKICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQudGhlbiAmJiB0eXBlb2YgcmVzdWx0LnRoZW4gPT0gJ2Z1bmN0aW9uJykgewogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KICAgICAgaWYgKHJlc3VsdCA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9LAogICAgLy/kv53lrZgKICAgIHRhc2tTYXZlRHJhZnQ6IGZ1bmN0aW9uIHRhc2tTYXZlRHJhZnQoKSB7CiAgICAgIHZhciBfdGhpczYgPSB0aGlzOwogICAgICB2YXIgdGhpc18gPSB0aGlzOwogICAgICB1dGlscy5nZXRPbmxpbmVGb3JtRGF0YShmYWxzZSkudGhlbihmdW5jdGlvbiAoZm9ybURhdGFTdHIpIHsKICAgICAgICByZXR1cm4gdGhpc18uc2F2ZURyYWZ0U3VibWl0KGZvcm1EYXRhU3RyKTsKICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKHJlYXNvbikgewogICAgICAgIHJldHVybiB1dGlscy5oYW5kbGVHZXRGb3JtRGF0YVJlamVjdChyZWFzb24pLnRoZW4oZnVuY3Rpb24gKCkgewogICAgICAgICAgcmV0dXJuIF90aGlzNi5zYXZlRHJhZnRTdWJtaXQoKTsKICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9LAogICAgc2F2ZURyYWZ0U3VibWl0OiBmdW5jdGlvbiBzYXZlRHJhZnRTdWJtaXQoZm9ybURhdGFTdHIpIHsKICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgdmFyIHNjcmlwdFJlc3VsdCA9IHRoaXMucnVuQmVmb3JlU2NyaXB0KCk7CiAgICAgIC8v5omn6KGM5YmN572u6ISa5pys6L+U5ZueZmFsc2Xml7bnu4jmraLmjInpkq7mk43kvZwKICAgICAgaWYgKHNjcmlwdFJlc3VsdCA9PT0gZmFsc2UpIHJldHVybjsKICAgICAgLy/miafooYzliY3nva7ohJrmnKzov5Tlm57nmoTmjqXlj6Pml7blhYjmiafooYzliY3nva7kuovku7bmjqXlj6MKICAgICAgaWYgKHNjcmlwdFJlc3VsdC50aGVuICYmIHR5cGVvZiBzY3JpcHRSZXN1bHQudGhlbiA9PSAnZnVuY3Rpb24nKSB7CiAgICAgICAgc2NyaXB0UmVzdWx0LnRoZW4oZnVuY3Rpb24gKCkgewogICAgICAgICAgLy/mjqXlj6Pov5Tlm57miJDlip/liJnmraPluLjmiafooYzmjInpkq7mk43kvZwKICAgICAgICAgIF90aGlzLmZ1bmNTYXZlRHJhZnQoZm9ybURhdGFTdHIpOwogICAgICAgIH0sIGZ1bmN0aW9uIChmYWlsKSB7CiAgICAgICAgICAvL+aOpeWPo+i/lOWbnuWksei0peWImee7iOatouaMiemSruaTjeS9nO+8jOW5tue7meS4juaPkOekugogICAgICAgICAgX3RoaXMuJG1lc3NhZ2Uud2FybmluZyhmYWlsKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9KTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvL+aJp+ihjOWJjee9ruiEmuacrOi/lOWbnnRydWXml7bmraPluLjmiafooYzmjInpkq7mk43kvZwKICAgICAgICBfdGhpcy5mdW5jU2F2ZURyYWZ0KGZvcm1EYXRhU3RyKTsKICAgICAgfQogICAgfSwKICAgIC8v5L+d5a2Y6I2J56i/CiAgICBmdW5jU2F2ZURyYWZ0OiBmdW5jdGlvbiBmdW5jU2F2ZURyYWZ0KGZvcm1EYXRhU3RyKSB7CiAgICAgIHV0aWxzLmNsb3NlQWxsTm90aWZpY2F0aW9uKCk7CiAgICAgIHZhciBkYXRhID0gdGhpcy5oYW5kbGVGb3JtRGF0YShmb3JtRGF0YVN0cik7CiAgICAgIGRhdGEuZGVmSWQgPSB0aGlzLmRlZklkOwogICAgICBkYXRhLmFwcHJvdmFsID0gdHJ1ZTsKICAgICAgZGF0YS5mb3JtS2V5ID0gdGhpcy4kcmVmcy5mb3JtQ29udGVudC5mb3JtS2V5OwogICAgICB0aGlzLiRyZWZzLnRhc2tUb1NhdmUuc2hvd0RpYWxvZyhkYXRhKTsKICAgICAgLy8gdGhpcy4kc3RvcmUuZGlzcGF0Y2goInN0b3JlUHJvY2Vzcy9zYXZlVGFza0RyYWZ0IiwgZGF0YSkudGhlbigoKSA9PiB7CiAgICAgIC8vICAgdXRpbHMucmVsb2FkKCk7CiAgICAgIC8vIH0pOwogICAgfSwKICAgIC8v5Lyg6ZiF5Zue5aSNCiAgICBoYW5kbGVSZWFkOiBmdW5jdGlvbiBoYW5kbGVSZWFkKCkgewogICAgICB0aGlzLiRyZWZzLnRhc2tUb1JlYWQuc2hvd0RpYWxvZygpOwogICAgfSwKICAgIC8vIOWHhuWkh+imgeaPkOS6pOeahOaVsOaNrgogICAgaGFuZGxlRm9ybURhdGE6IGZ1bmN0aW9uIGhhbmRsZUZvcm1EYXRhKGZvcm1EYXRhU3RyKSB7CiAgICAgIC8vbGV0IGZpbGVzID0gIiI7CiAgICAgIHZhciB6ZmlsZXMgPSAnJzsKICAgICAgLy8gdGhpcy4kcmVmcy5maWxlVXBsb2FkLmlzRmluaXNoVXBsb2FkKCk7CiAgICAgIC8vIGlmICh0aGlzLiRyZWZzLmZpbGVVcGxvYWQgJiYgdGhpcy4kcmVmcy5maWxlVXBsb2FkLmdldEZpbGVzKCkgIT0gIiIpIHsKICAgICAgLy8gICBmaWxlcyA9IEpTT04uc3RyaW5naWZ5KHRoaXMuJHJlZnMuZmlsZVVwbG9hZC5nZXRGaWxlcygpKTsKICAgICAgLy8gfQogICAgICAvL2xldCBvcGluaW9uID0gIiI7CiAgICAgIC8vIGlmICh0aGlzLiRyZWZzLm9waW5pb25UZXh0ICYmIHRoaXMuJHJlZnMub3BpbmlvblRleHQuZ2V0T3BpbmlvbigpICE9ICIiKSB7CiAgICAgIC8vICAgb3BpbmlvbiA9IHRoaXMuJHJlZnMub3BpbmlvblRleHQuZ2V0T3BpbmlvbigpOwogICAgICAvLyB9CgogICAgICB2YXIgZGF0YSA9IHsKICAgICAgICB0YXNrSWQ6IHRoaXMudGFza0lkLAogICAgICAgIGFjdGlvbk5hbWU6IHRoaXMuYWN0aW9uTmFtZSwKICAgICAgICBkZXN0aW5hdGlvbjogJycsCiAgICAgICAgLy9maWxlczogZmlsZXMsCiAgICAgICAgemZpbGVzOiB6ZmlsZXMsCiAgICAgICAgLy9vcGluaW9uOiBvcGluaW9uLAogICAgICAgIGp1bXBUeXBlOiAnJywKICAgICAgICBhZ2VudExlYWRlcklkOiB0aGlzLmxlYWRlcklkLAogICAgICAgIG5vZGVVc2VyczogJ1tdJwogICAgICB9OwogICAgICBpZiAoZm9ybURhdGFTdHIpIHsKICAgICAgICAvLyBVUkzooajljZUKICAgICAgICBpZiAoZm9ybURhdGFTdHIuY29uc3RydWN0b3IgPT0gT2JqZWN0KSB7CiAgICAgICAgICBkYXRhLmZvcm1UeXBlID0gJ2ZyYW1lJzsKICAgICAgICAgIGlmIChmb3JtRGF0YVN0ci5idXNpbmVzc0tleSkgewogICAgICAgICAgICBkYXRhLmJ1c2luZXNzS2V5ID0gZm9ybURhdGFTdHIuYnVzaW5lc3NLZXk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoZm9ybURhdGFTdHIuc3lzQ29kZSkgewogICAgICAgICAgICBkYXRhLnN5c0NvZGUgPSBmb3JtRGF0YVN0ci5zeXNDb2RlOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGZvcm1EYXRhU3RyLnZhcnMpIHsKICAgICAgICAgICAgZGF0YS52YXJzID0gZm9ybURhdGFTdHIudmFyczsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKGZvcm1EYXRhU3RyLmNvbnN0cnVjdG9yID09IFN0cmluZykgewogICAgICAgICAgZGF0YS5kYXRhID0gQmFzZTY0LmVuY29kZShmb3JtRGF0YVN0cik7CiAgICAgICAgICBkYXRhLmZvcm1UeXBlID0gJ2lubmVyJzsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHdpbmRvdy51cmdlbnRTdGF0ZVZhbHVlKSB7CiAgICAgICAgZGF0YS51cmdlbnRTdGF0ZVZhbHVlID0gd2luZG93LnVyZ2VudFN0YXRlVmFsdWU7CiAgICAgIH0KICAgICAgcmV0dXJuIGRhdGE7CiAgICB9LAogICAgaGFuZGxlQ2xvc2U6IGZ1bmN0aW9uIGhhbmRsZUNsb3NlKCkgewogICAgICB0aGlzLmRpYWxvZ0Zvcm1WaXNpYmxlID0gdHJ1ZTsKICAgIH0sCiAgICAvL+iOt+WPluS7u+WKoemUgeWumueKtuaAgQogICAgbG9ja1VubG9jazogZnVuY3Rpb24gbG9ja1VubG9jaygpIHsKICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ3N0b3JlUHJvY2Vzcy9sb2NrVW5sb2NrJywgdGhpcy50YXNrSWQgKyAnJmxlYWRlcklkPScgKyB0aGlzLmxlYWRlcklkKS50aGVuKGZ1bmN0aW9uICgpIHsKICAgICAgICAvLyB0aGlzLiRyb3V0ZXIuZ28odGhpcy4kcm91dGVyLmN1cnJlbnRSb3V0ZSk7CiAgICAgICAgdXRpbHMucmVsb2FkKCk7CiAgICAgIH0pOwogICAgfSwKICAgIC8v5pKk5ZueCiAgICBoYW5kbGVSZXZva2U6IGZ1bmN0aW9uIGhhbmRsZVJldm9rZShpZCwgc3RhdHVzKSB7CiAgICAgIGlmIChzdGF0dXMgPT0gJ3Jldm9rZVRvU3RhcnQnKSB7CiAgICAgICAgdGhpcy4kbWVzc2FnZS53YXJuaW5nKCflt7LmkqTlm57vvIzkuI3og73lho3mkqTlm54nKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgLy8gaWYgKHRoaXMuJHJlZnMub3BpbmlvblRleHQuZ2V0T3BpbmlvbigpID09ICIiKSB7CiAgICAgIC8vICAgdGhpcy4kbWVzc2FnZS53YXJuaW5nKCLor7floavlhpnmkqTlm57mhI/op4EiKTsKICAgICAgLy8gICByZXR1cm4gZmFsc2U7CiAgICAgIC8vIH0KICAgICAgdmFyIGRhdGEgPSB7CiAgICAgICAgaW5zdGFuY2VJZDogdGhpcy5pbnN0SWQsCiAgICAgICAgaXNIYW5kUmV2b2tlOiB0aGlzLmlzSGFuZAogICAgICAgIC8vY2F1c2U6IHRoaXMuJHJlZnMub3BpbmlvblRleHQuZ2V0T3BpbmlvbigpCiAgICAgIH07CiAgICAgIHZhciByZXZva2VVcmwgPSAnc3RvcmVQcm9jZXNzL3Jldm9rZUluc3RhbmNlQnRuJzsKICAgICAgdGhpcy4kcmVmcy50YXNrVG9SZXZva2Uuc2hvd0RpYWxvZyhyZXZva2VVcmwsIGRhdGEpOwogICAgICAvLyB0aGlzLiRjb25maXJtKCLnoa7orqQiICsgdGhpcy5kYWlsb2dUaXRsZSArICI/IiwgIuaPkOekuiIsIHsKICAgICAgLy8gICBjYW5jZWxCdXR0b25UZXh0OiAi5Y+W5raIIiwKICAgICAgLy8gICBjb25maXJtQnV0dG9uVGV4dDogIuehruWumiIsCiAgICAgIC8vICAgdHlwZTogIndhcm5pbmciLAogICAgICAvLyAgIGNsb3NlT25DbGlja01vZGFsOiBmYWxzZQogICAgICAvLyB9KS50aGVuKCgpID0+IHsKICAgICAgLy8gICB0aGlzLiRzdG9yZQogICAgICAvLyAgICAgLmRpc3BhdGNoKCJzdG9yZVByb2Nlc3MvcmV2b2tlSW5zdGFuY2VCdG4iLCBkYXRhKQogICAgICAvLyAgICAgLnRoZW4oaXNIYW5kUmV2b2tlID0+IHsKICAgICAgLy8gICAgICAgaWYgKHRoaXMudG9rZW4gIT0gbnVsbCkgewogICAgICAvLyAgICAgICAgIHdpbmRvdy5jbG9zZSgpOwogICAgICAvLyAgICAgICB9IGVsc2UgewogICAgICAvLyAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKCIvdi1mbG93L3YtdG9kbyIpOwogICAgICAvLyAgICAgICB9CiAgICAgIC8vICAgICB9KTsKICAgICAgLy8gfSk7CiAgICB9LAogICAgc2F2ZVJldm9rZTogZnVuY3Rpb24gc2F2ZVJldm9rZSgpIHsKICAgICAgdmFyIF90aGlzNyA9IHRoaXM7CiAgICAgIGlmICh0aGlzLm9waW5pb24gPT0gJycpIHsKICAgICAgICB0aGlzLiRtZXNzYWdlLndhcm5pbmcoJ+ivt+Whq+WGmeaSpOWbnuaEj+ingScpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICB2YXIgZGF0YSA9IHsKICAgICAgICBpbnN0YW5jZUlkOiB0aGlzLmluc3RJZCwKICAgICAgICBpc0hhbmRSZXZva2U6IHRoaXMuaXNIYW5kLAogICAgICAgIGNhdXNlOiB0aGlzLm9waW5pb24KICAgICAgfTsKICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ3N0b3JlUHJvY2Vzcy9yZXZva2VJbnN0YW5jZUJ0bicsIGRhdGEpLnRoZW4oZnVuY3Rpb24gKCkgewogICAgICAgIGlmIChfdGhpczcudG9rZW4gIT0gbnVsbCkgewogICAgICAgICAgd2luZG93LmNsb3NlKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIF90aGlzNy4kcm91dGVyLmdvKC0xKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICB0aGlzLmRpYWxvZ0Zvcm1WaXNpYmxlID0gZmFsc2U7CiAgICAgIHRoaXMub3BpbmlvbiA9ICcnOwogICAgfSwKICAgIGV4aXRSZXZva2U6IGZ1bmN0aW9uIGV4aXRSZXZva2UoKSB7CiAgICAgIHRoaXMuZGlhbG9nRm9ybVZpc2libGUgPSBmYWxzZTsKICAgICAgdGhpcy5vcGluaW9uID0gJyc7CiAgICB9LAogICAgLy/msp/pgJrlj43ppogKICAgIGNvbW11RmVlZEJhY2s6IGZ1bmN0aW9uIGNvbW11RmVlZEJhY2soKSB7CiAgICAgIHRoaXMuJHJlZnMudGFza1RvRmVlQmFjay5zaG93RGlhbG9nKCk7CiAgICB9LAogICAgdXNlckFkZFNpZ246IGZ1bmN0aW9uIHVzZXJBZGRTaWduKCkgewogICAgICB0aGlzLiRyZWZzLnVzZXJBZGRTaWduUmVwbHkuc2hvd0RpYWxvZygpOwogICAgICAvLyBpZiAodGhpcy4kcmVmcy5vcGluaW9uVGV4dC5nZXRPcGluaW9uKCkgPT0gIiIpIHsKICAgICAgLy8gICBNZXNzYWdlLndhcm5pbmcoIuivt+i+k+WFpeaEj+ingeWGheWuuSIpOwogICAgICAvLyB9IGVsc2UgewogICAgICAvLyAgIGxldCBmaWxlcyA9ICIiOwogICAgICAvLyAgIGxldCB6ZmlsZXMgPSAiIjsKICAgICAgLy8gICB0aGlzLiRyZWZzLmZpbGVVcGxvYWQuaXNGaW5pc2hVcGxvYWQoKTsKICAgICAgLy8gICBpZiAodGhpcy4kcmVmcy5maWxlVXBsb2FkICYmIHRoaXMuJHJlZnMuZmlsZVVwbG9hZC5nZXRGaWxlcygpICE9ICIiKSB7CiAgICAgIC8vICAgICBmaWxlcyA9IEpTT04uc3RyaW5naWZ5KHRoaXMuJHJlZnMuZmlsZVVwbG9hZC5nZXRGaWxlcygpKTsKICAgICAgLy8gICB9CiAgICAgIC8vICAgbGV0IGRhdGEgPSB7CiAgICAgIC8vICAgICBwcm9jRGVmSWQ6IHRoaXMuZGVmSWQsCiAgICAgIC8vICAgICBwcm9jSW5zdElkOiB0aGlzLmluc3RJZCwKICAgICAgLy8gICAgIHN0YXR1czogImlucXVfcmVwbHkiLAogICAgICAvLyAgICAgdGFza0lkOiB0aGlzLnRhc2tJZCwKICAgICAgLy8gICAgIG9waW5pb246IHRoaXMuJHJlZnMub3BpbmlvblRleHQuZ2V0T3BpbmlvbigpLAogICAgICAvLyAgICAgZmlsZXM6IGZpbGVzLAogICAgICAvLyAgICAgemZpbGVzOiB6ZmlsZXMKICAgICAgLy8gICB9OwogICAgICAvLyAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCJzdG9yZVByb2Nlc3MvdXNlckFkZFNpZ24iLCBkYXRhKS50aGVuKCgpID0+IHsKICAgICAgLy8gICAgIGlmICh0aGlzLnRva2VuICE9IG51bGwpIHsKICAgICAgLy8gICAgICAgd2luZG93LmNsb3NlKCk7CiAgICAgIC8vICAgICB9IGVsc2UgewogICAgICAvLyAgICAgICB0aGlzLiRyb3V0ZXIuZ28oLTEpOwogICAgICAvLyAgICAgfQogICAgICAvLyAgIH0pOwogICAgICAvLyB9CiAgICB9LAogICAgLy/lvoHor6Llm57lpI0KICAgIHRhc2tUb0lucXVSZXBseTogZnVuY3Rpb24gdGFza1RvSW5xdVJlcGx5KCkgewogICAgICB0aGlzLiRyZWZzLnRhc2tUb0lucXVSZXBseS5zaG93RGlhbG9nKCk7CiAgICAgIC8vIGlmICh0aGlzLiRyZWZzLm9waW5pb25UZXh0LmdldE9waW5pb24oKSA9PSAiIikgewogICAgICAvLyAgIE1lc3NhZ2Uud2FybmluZygi6K+36L6T5YWl5oSP6KeB5YaF5a65Iik7CiAgICAgIC8vIH0gZWxzZSB7CiAgICAgIC8vICAgbGV0IGZpbGVzID0gIiI7CiAgICAgIC8vICAgbGV0IHpmaWxlcyA9ICIiOwogICAgICAvLyAgIHRoaXMuJHJlZnMuZmlsZVVwbG9hZC5pc0ZpbmlzaFVwbG9hZCgpOwogICAgICAvLyAgIGlmICh0aGlzLiRyZWZzLmZpbGVVcGxvYWQgJiYgdGhpcy4kcmVmcy5maWxlVXBsb2FkLmdldEZpbGVzKCkgIT0gIiIpIHsKICAgICAgLy8gICAgIGZpbGVzID0gSlNPTi5zdHJpbmdpZnkodGhpcy4kcmVmcy5maWxlVXBsb2FkLmdldEZpbGVzKCkpOwogICAgICAvLyAgIH0KICAgICAgLy8gICBsZXQgZGF0YSA9IHsKICAgICAgLy8gICAgIHByb2NEZWZJZDogdGhpcy5kZWZJZCwKICAgICAgLy8gICAgIHByb2NJbnN0SWQ6IHRoaXMuaW5zdElkLAogICAgICAvLyAgICAgc3RhdHVzOiAiaW5xdV9yZXBseSIsCiAgICAgIC8vICAgICB0YXNrSWQ6IHRoaXMudGFza0lkLAogICAgICAvLyAgICAgb3BpbmlvbjogdGhpcy4kcmVmcy5vcGluaW9uVGV4dC5nZXRPcGluaW9uKCksCiAgICAgIC8vICAgICBmaWxlczogZmlsZXMsCiAgICAgIC8vICAgICB6ZmlsZXM6IHpmaWxlcywKICAgICAgLy8gICAgIGZvcm1EYXRhOiBKU09OLnN0cmluZ2lmeSh0aGlzLiRyZWZzLmZvcm1Db250ZW50LmRhdGEpCiAgICAgIC8vICAgfTsKICAgICAgLy8gICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgic3RvcmVQcm9jZXNzL3Rhc2tUb0lucXVSZXBseSIsIGRhdGEpLnRoZW4oKCkgPT4gewogICAgICAvLyAgICAgaWYgKHRoaXMudG9rZW4gIT0gbnVsbCkgewogICAgICAvLyAgICAgICB3aW5kb3cuY2xvc2UoKTsKICAgICAgLy8gICAgIH0gZWxzZSB7CiAgICAgIC8vICAgICAgIHRoaXMuJHJvdXRlci5nbygtMSk7CiAgICAgIC8vICAgICB9CiAgICAgIC8vICAgfSk7CiAgICAgIC8vIH0KICAgIH0sCiAgICAvL+mps+Wbnuiuvue9rgogICAgdGFza1RvUmVqZWN0OiBmdW5jdGlvbiB0YXNrVG9SZWplY3QoKSB7CiAgICAgIHZhciBfdGhpczggPSB0aGlzOwogICAgICAvLyDlrqHmibnpmYTku7bmlbDmja4KICAgICAgLy8gaWYgKHRoaXMuJHJlZnMuZmlsZVVwbG9hZCAmJiB0aGlzLiRyZWZzLmZpbGVVcGxvYWQuZ2V0RmlsZXMoKSAhPSAiIikgewogICAgICAvLyAgIHRoaXMub3BpbmlvbkZpbGVzID0gSlNPTi5zdHJpbmdpZnkodGhpcy4kcmVmcy5maWxlVXBsb2FkLmdldEZpbGVzKCkpOwogICAgICAvLyB9CiAgICAgIHZhciBwYXJlbnRUYXNrSWQgPSAnJzsgLy/nlKjmiLfku7vliqHliqDnrb7lkI7nmoTniLbku7vliqFJRAogICAgICBpZiAodGhpcy5ub2RlVHlwZSA9PSAnVVNFUlRBU0snICYmIHRoaXMudGFza3MuYnBtVGFzay5wYXJlbnRJZCAhPSAnMCcpIHsKICAgICAgICAvL+eUqOaIt+S7u+WKoeWKoOetvgogICAgICAgIHBhcmVudFRhc2tJZCA9IHRoaXMudGFza3MuYnBtVGFzay5wYXJlbnRJZDsKICAgICAgfQogICAgICB1dGlscy5nZXRPbmxpbmVGb3JtRGF0YSh0cnVlKS50aGVuKGZ1bmN0aW9uICgpIHsKICAgICAgICByZXR1cm4gX3RoaXM4LiRyZWZzLnRhc2tUb1JlamVjdC5oYW5kbGVPcGVuKHBhcmVudFRhc2tJZCwgX3RoaXM4KTsKICAgICAgfSkgLy/niLbnu4Tku7bosIPnlKjlrZDnu4Tku7bmlrnms5UKICAgICAgLmNhdGNoKGZ1bmN0aW9uIChyZWFzb24pIHsKICAgICAgICByZXR1cm4gdXRpbHMuaGFuZGxlR2V0Rm9ybURhdGFSZWplY3QocmVhc29uKS50aGVuKGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHJldHVybiBfdGhpczguc3VibWl0Q29uZmlybSgpOwogICAgICAgIH0pOwogICAgICB9KTsKICAgIH0sCiAgICAvL+i9rOWKnuiuvue9rgogICAgdGFza1RvRGVsZWdhdGU6IGZ1bmN0aW9uIHRhc2tUb0RlbGVnYXRlKCkgewogICAgICB0aGlzLiRyZWZzLnRhc2tUb0RlbGVnYXRlLmhhbmRsZUNsb3NlKHRoaXMub3BpbmlvbkZpZWxkLCB0aGlzLiRyZWZzLmZvcm1Db250ZW50LmRhdGEsIHRoaXMuYXBwZW5kT3BpbmlvbiwgdGhpcyk7IC8v54i257uE5Lu26LCD55So5a2Q57uE5Lu25pa55rOVCiAgICB9LAogICAgLy/lvoHor6Lorr7nva4KICAgIHRhc2tUb0lucXU6IGZ1bmN0aW9uIHRhc2tUb0lucXUoKSB7CiAgICAgIGlmICh0aGlzLnN0YXR1cyAhPSAnVFJBTlNGT1JNRURJTlFVJykgewogICAgICAgIHRoaXMuJHJlZnMudGFza1RvSW5xdS5zaG93VHlwZSgpOwogICAgICB9CiAgICAgIHRoaXMuJHJlZnMudGFza1RvSW5xdS5oYW5kbGVDbG9zZSh0aGlzLm9waW5pb25GaWVsZCwgdGhpcy4kcmVmcy5mb3JtQ29udGVudC5kYXRhLCB0aGlzLmFwcGVuZE9waW5pb24pOyAvL+eItue7hOS7tuiwg+eUqOWtkOe7hOS7tuaWueazlQogICAgfSwKICAgIC8v5rWB56iL57uI5q2iCiAgICB0YXNrVG9FbmRQcm9jZXNzOiBmdW5jdGlvbiB0YXNrVG9FbmRQcm9jZXNzKCkgewogICAgICB0aGlzLiRyZWZzLnRhc2tUb0VuZFByb2Nlc3MuaGFuZGxlQ2xvc2UodGhpcyk7IC8v54i257uE5Lu26LCD55So5a2Q57uE5Lu25pa55rOVCiAgICB9LAogICAgLy/mtYHovazorr7nva4KICAgIHRhc2tUb1RyYW5zOiBmdW5jdGlvbiB0YXNrVG9UcmFucygpIHsKICAgICAgLy8gaWYgKHRoaXMuJHJlZnMuZmlsZVVwbG9hZCAmJiB0aGlzLiRyZWZzLmZpbGVVcGxvYWQuZ2V0RmlsZXMoKSAhPSAiIikgewogICAgICAvLyAgIHRoaXMub3BpbmlvbkZpbGVzID0gSlNPTi5zdHJpbmdpZnkodGhpcy4kcmVmcy5maWxlVXBsb2FkLmdldEZpbGVzKCkpOwogICAgICAvLyB9CiAgICAgIHRoaXMuJHJlZnMudGFza1RvVHJhbnMuaGFuZGxlQ2xvc2UodGhpcywgdGhpcy5vcGluaW9uRmllbGQsIHRoaXMuJHJlZnMuZm9ybUNvbnRlbnQuZGF0YSwgdGhpcy5hcHBlbmRPcGluaW9uKTsgLy/niLbnu4Tku7bosIPnlKjlrZDnu4Tku7bmlrnms5UKICAgIH0sCiAgICAvL+WKoOetvuiuvue9rgogICAgdGFza1RvQWRkU2lnbjogZnVuY3Rpb24gdGFza1RvQWRkU2lnbigpIHsKICAgICAgdGhpcy4kcmVmcy50YXNrVG9BZGRTaWduLmhhbmRsZUNsb3NlKHRoaXMubm9kZVR5cGUsIHRoaXMuaW5zdElkLCB0aGlzKTsgLy/niLbnu4Tku7bosIPnlKjlrZDnu4Tku7bmlrnms5UKICAgIH0sCiAgICAvL+S7u+WKoeW7tuacnwogICAgdGFza1RvRGVsYXk6IGZ1bmN0aW9uIHRhc2tUb0RlbGF5KCkgewogICAgICB0aGlzLiRyZWZzLnRhc2tUb0RlbGF5LmhhbmRsZUNsb3NlKCk7IC8v54i257uE5Lu26LCD55So5a2Q57uE5Lu25pa55rOVCiAgICB9LAogICAgLy/lubbooYzlrqHmibkKICAgIHRhc2tBcHByb3ZlTGluZTogZnVuY3Rpb24gdGFza0FwcHJvdmVMaW5lKCkgewogICAgICB0aGlzLiRyZWZzLnRhc2tUb0FwcHJvdmVMaW5lLmhhbmRsZUNsb3NlKCk7IC8v54i257uE5Lu26LCD55So5a2Q57uE5Lu25pa55rOVCiAgICB9LAogICAgLy8g6aG65bqP562+572yCiAgICB0YXNrU2lnblNlcXVlbmNlOiBmdW5jdGlvbiB0YXNrU2lnblNlcXVlbmNlKCkgewogICAgICB0aGlzLiRyZWZzLnRhc2tUb1NpZ25TZXF1ZW5jZS5oYW5kbGVDbG9zZSgpOyAvL+eItue7hOS7tuiwg+eUqOWtkOe7hOS7tuaWueazlQogICAgfSwKICAgIC8vIOW5tuihjOetvue9sgogICAgdGFza1NpZ25MaW5lOiBmdW5jdGlvbiB0YXNrU2lnbkxpbmUoKSB7CiAgICAgIHRoaXMuJHJlZnMudGFza1RvU2lnbkxpbmUuaGFuZGxlQ2xvc2UoKTsgLy/niLbnu4Tku7bosIPnlKjlrZDnu4Tku7bmlrnms5UKICAgIH0sCiAgICBkb05leHQ6IGZ1bmN0aW9uIGRvTmV4dCgpIHsKICAgICAgdmFyIF90aGlzOSA9IHRoaXM7CiAgICAgIGlmICghdGhpcy50ZXh0KSB7CiAgICAgICAgaWYgKHRoaXMuYWN0aW9uTmFtZSA9PSAnb3Bwb3NlVHJhbnMnIHx8IHRoaXMuYWN0aW9uTmFtZSA9PSAnb3Bwb3NlJykgewogICAgICAgICAgdGhpcy50ZXh0ID0gJ+WPjeWvuSc7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMudGV4dCA9ICflkIzmhI8nOwogICAgICAgIH0KICAgICAgfQogICAgICB2YXIgdGhpc18gPSB0aGlzOwogICAgICB1dGlscy5nZXRPbmxpbmVGb3JtRGF0YSh0cnVlKS50aGVuKGZ1bmN0aW9uIChmb3JtRGF0YVN0cikgewogICAgICAgIHJldHVybiB0aGlzXy5kb05leHRTdWJtaXQoZm9ybURhdGFTdHIpOwogICAgICB9KS5jYXRjaChmdW5jdGlvbiAocmVhc29uKSB7CiAgICAgICAgcmV0dXJuIHV0aWxzLmhhbmRsZUdldEZvcm1EYXRhUmVqZWN0KHJlYXNvbikudGhlbihmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4gX3RoaXM5LmRvTmV4dFN1Ym1pdCgpOwogICAgICAgIH0pOwogICAgICB9KTsKICAgIH0sCiAgICAvLyBkb05leHTmiafooYzjgIJmb3JtRGF0YVN0cu+8muWtl+espuS4suagvOW8j+eahOihqOWNleaVsOaNruOAggogICAgZG9OZXh0U3VibWl0OiBmdW5jdGlvbiBkb05leHRTdWJtaXQoZm9ybURhdGFTdHIpIHsKICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgdmFyIHNjcmlwdFJlc3VsdCA9IHRoaXMucnVuQmVmb3JlU2NyaXB0KCk7CiAgICAgIC8v5omn6KGM5YmN572u6ISa5pys6L+U5ZueZmFsc2Xml7bnu4jmraLmjInpkq7mk43kvZwKICAgICAgaWYgKHNjcmlwdFJlc3VsdCA9PT0gZmFsc2UpIHJldHVybjsKICAgICAgLy/miafooYzliY3nva7ohJrmnKzov5Tlm57nmoTmjqXlj6Pml7blhYjmiafooYzliY3nva7kuovku7bmjqXlj6MKICAgICAgaWYgKHNjcmlwdFJlc3VsdC50aGVuICYmIHR5cGVvZiBzY3JpcHRSZXN1bHQudGhlbiA9PSAnZnVuY3Rpb24nKSB7CiAgICAgICAgc2NyaXB0UmVzdWx0LnRoZW4oZnVuY3Rpb24gKCkgewogICAgICAgICAgLy/mjqXlj6Pov5Tlm57miJDlip/liJnmraPluLjmiafooYzmjInpkq7mk43kvZwKICAgICAgICAgIF90aGlzLmZ1bmNEb05leHQoZm9ybURhdGFTdHIpOwogICAgICAgIH0sIGZ1bmN0aW9uIChmYWlsKSB7CiAgICAgICAgICAvL+aOpeWPo+i/lOWbnuWksei0peWImee7iOatouaMiemSruaTjeS9nO+8jOW5tue7meS4juaPkOekugogICAgICAgICAgX3RoaXMuJG1lc3NhZ2Uud2FybmluZyhmYWlsKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9KTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvL+aJp+ihjOWJjee9ruiEmuacrOi/lOWbnnRydWXml7bmraPluLjmiafooYzmjInpkq7mk43kvZwKICAgICAgICBfdGhpcy5mdW5jRG9OZXh0KGZvcm1EYXRhU3RyKTsKICAgICAgfQogICAgfSwKICAgIGZ1bmNEb05leHQ6IGZ1bmN0aW9uIGZ1bmNEb05leHQoZm9ybURhdGFTdHIpIHsKICAgICAgdmFyIF90aGlzMTAgPSB0aGlzOwogICAgICB1dGlscy5jbG9zZUFsbE5vdGlmaWNhdGlvbigpOwogICAgICB2YXIgZGF0YSA9IHRoaXMuaGFuZGxlRm9ybURhdGEoZm9ybURhdGFTdHIpOwogICAgICBkYXRhLmZvcm1LZXkgPSB0aGlzLiRyZWZzLmZvcm1Db250ZW50LmZvcm1LZXk7CiAgICAgIGRhdGEub3BpbmlvbiA9IHRoaXMudGV4dDsKICAgICAgaWYgKHRoaXMubm9kZVR5cGUgPT0gJ1VTRVJUQVNLJyAmJiB0aGlzLnRhc2tzLmJwbVRhc2sucGFyZW50SWQgIT0gJzAnKSB7CiAgICAgICAgLy/nlKjmiLfku7vliqHliqDnrb4KICAgICAgICBpZiAodGhpcy5hY3Rpb25OYW1lID09ICdvcHBvc2UnKSB7CiAgICAgICAgICBkYXRhLmFkZFNpZ25BY3Rpb24gPSAnb3Bwb3NlVHJhbnMnOwogICAgICAgIH0gZWxzZSBpZiAodGhpcy5hY3Rpb25OYW1lID09ICdhZ3JlZScpIHsKICAgICAgICAgIGRhdGEuYWRkU2lnbkFjdGlvbiA9ICdhZ3JlZVRyYW5zJzsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKCh0aGlzLmNob2ljZUV4Y3V0b3IgfHwgdGhpcy5qdW1wVHlwZSB8fCB0aGlzLiRyb3V0ZS5xdWVyeS50eXBlID09PSAnZnJlZScpICYmICF0aGlzLnRhc2tTdGF0dXNBcnJheS5pbmNsdWRlcyh0aGlzLnN0YXR1cykpIHsKICAgICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgnc3RvcmVQcm9jZXNzL2dldEFmdGVySnVtcE5vZGVzJywgewogICAgICAgICAgdGFza0lkOiB0aGlzLnRhc2tJZCwKICAgICAgICAgIGRhdGE6IGRhdGEuZGF0YSwKICAgICAgICAgIGRlZklkOiAnJywKICAgICAgICAgIGluc3RJZDogJycsCiAgICAgICAgICB0eXBlOiB0aGlzLiRyb3V0ZS5xdWVyeS50eXBlIHx8IHRoaXMuanVtcFR5cGUKICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICAgIGlmIChyZXMuYWZ0ZXJOb2Rlcy5sZW5ndGggPT0gMCB8fCByZXMuYWZ0ZXJOb2Rlcy5sZW5ndGggPT0gMSAmJiByZXMuYWZ0ZXJOb2Rlc1swXS5leGN1dG9yTGlzdCAhPSB1bmRlZmluZWQgJiYgcmVzLmFmdGVyTm9kZXNbMF0uZXhjdXRvckxpc3QubGVuZ3RoID09IDEpIHsKICAgICAgICAgICAgX3RoaXMxMC4kcmVmcy50YXNrVG9Db21wbGV0ZS5zaG93RGlhbG9nKF90aGlzMTAub3BpbmlvbkZpZWxkLCBfdGhpczEwLiRyZWZzLmZvcm1Db250ZW50LmRhdGEsIF90aGlzMTAuYXBwZW5kT3BpbmlvbiwgZGF0YSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBfdGhpczEwLiRyZWZzLnRhc2tTZWxlY3REZXN0aW5hdGlvbi5zaG93RGlhbG9nKGRhdGEuZGF0YSwgZGF0YS5maWxlcywgZGF0YS56ZmlsZXMsIGRhdGEub3BpbmlvbiwgX3RoaXMxMC5pbnN0SWQsIF90aGlzMTAuanVtcFR5cGUpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9IGVsc2UgewogICAgICAgIC8vdGhpcy5kaXNhYmxlZCA9IHRydWU7CiAgICAgICAgdmFyIHRpcE1zZyA9ICfnoa7orqTlip7nkIbmraTku7vliqE/JzsKICAgICAgICBpZiAodGhpcy5hY3Rpb25OYW1lID09ICdhZ3JlZScgJiYgdGhpcy5zdGF0dXMgPT0gJ1NJR05TRVFVRU5DRUVEJykgewogICAgICAgICAgdGhpcy4kaHR0cC5nZXQoJyR7YnBtUnVuVGltZX0vcnVudGltZS90YXNrL3YxL25leHRFeGVjdXRvcj90YXNrSWQ9JyArIHRoaXMudGFza0lkKS50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5zdGF0ZSAmJiByZXNwb25zZS5kYXRhLnZhbHVlKSB7CiAgICAgICAgICAgICAgdGlwTXNnID0gIlx1NEUwQlx1NEUwMFx1NkI2NVx1NzY4NFx1NjI2N1x1ODg0Q1x1NEVCQVx1NEUzQVx1RkYxQSIuY29uY2F0KHJlc3BvbnNlLmRhdGEudmFsdWUubmFtZSwgIlx1MzAwMjxici8+IFx1NjBBOFx1Nzg2RVx1NUI5QVx1ODk4MVx1NjNEMFx1NEVBNFx1NTQxN1x1RkYxRiIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIF90aGlzMTAuJHJlZnMudGFza1RvQ29tcGxldGUuc2hvd0RpYWxvZyhfdGhpczEwLm9waW5pb25GaWVsZCwgX3RoaXMxMC4kcmVmcy5mb3JtQ29udGVudC5kYXRhLCBfdGhpczEwLmFwcGVuZE9waW5pb24sIGRhdGEpOwogICAgICAgICAgfSk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHRoaXMuJHJlZnMudGFza1RvQ29tcGxldGUuc2hvd0RpYWxvZyh0aGlzLm9waW5pb25GaWVsZCwgdGhpcy4kcmVmcy5mb3JtQ29udGVudC5kYXRhLCB0aGlzLmFwcGVuZE9waW5pb24sIGRhdGEpOwogICAgICB9CiAgICB9LAogICAgLy/lkIzmhI8KICAgIHRhc2tBZ3JlZTogZnVuY3Rpb24gdGFza0FncmVlKCkgewogICAgICB0aGlzLmFjdGlvbk5hbWUgPSAnYWdyZWUnOwogICAgICB0aGlzLmRvTmV4dCgpOwogICAgfSwKICAgIC8v5ZCM5oSP77yI5rWB6L2s77yJCiAgICB0YXNrQWdyZWVUcmFuczogZnVuY3Rpb24gdGFza0FncmVlVHJhbnMoKSB7CiAgICAgIHRoaXMuYWN0aW9uTmFtZSA9ICdhZ3JlZVRyYW5zJzsKICAgICAgdGhpcy5kb05leHQoKTsKICAgIH0sCiAgICAvL+WPjeWvuQogICAgdGFza09wcG9zZTogZnVuY3Rpb24gdGFza09wcG9zZSgpIHsKICAgICAgdGhpcy5hY3Rpb25OYW1lID0gJ29wcG9zZSc7CiAgICAgIHRoaXMuZG9OZXh0KCk7CiAgICB9LAogICAgLy/lj43lr7nvvIjmtYHovazvvIkKICAgIHRhc2tPcHBvc2VUcmFuczogZnVuY3Rpb24gdGFza09wcG9zZVRyYW5zKCkgewogICAgICB0aGlzLmFjdGlvbk5hbWUgPSAnb3Bwb3NlVHJhbnMnOwogICAgICB0aGlzLmRvTmV4dCgpOwogICAgfSwKICAgIGhpZGRlbk9wZXJ0aW9uOiBmdW5jdGlvbiBoaWRkZW5PcGVydGlvbigpIHsKICAgICAgaWYgKHRoaXMuJHJlZnMuYnRuUmVnaW9uKSB7CiAgICAgICAgdGhpcy4kcmVmcy5idG5SZWdpb24uc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgfQogICAgICB0aGlzLiRyZWZzLmZvcm1Db250ZW50LmhpZGRlbkNvbnRlbnQoKTsKICAgIH0sCiAgICAvL+aYr+WQpuaYvuekuua7muWKqOadoQogICAgaXNTY3JvbGw6IGZ1bmN0aW9uIGlzU2Nyb2xsKCkgewogICAgICAvL+Wxj+W5leWuveW6pgogICAgICB2YXIgd2luZG93X3dpZHRoID0gJCh3aW5kb3cpLndpZHRoKCk7CiAgICAgIC8v5a6h5om56aG16Z2i5a695bqmCiAgICAgIHZhciBmcm9tX3cgPSAkKCdtYWluJylbMF0uY2xpZW50V2lkdGg7CiAgICAgIC8v5pyJ5rua5Yqo5p2hCiAgICAgIGlmICh3aW5kb3dfd2lkdGggPiBmcm9tX3cpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9LAogICAgLy/mjILotbcKICAgIGhhbmdVcDogZnVuY3Rpb24gaGFuZ1VwKCkgewogICAgICB2YXIgX3RoaXMxMSA9IHRoaXM7CiAgICAgIGZsb3cuZm9yYmlkZGVuSW5zdGFuY2UodGhpcy5pbnN0SWQpLnRoZW4oZnVuY3Rpb24gKGRhdGEpIHsKICAgICAgICBpZiAoZGF0YS5zdGF0ZSkgewogICAgICAgICAgX3RoaXMxMS4kbWVzc2FnZSh7CiAgICAgICAgICAgIHR5cGU6ICdzdWNjZXNzJywKICAgICAgICAgICAgbWVzc2FnZTogZGF0YS5tZXNzYWdlCiAgICAgICAgICB9KTsKICAgICAgICAgIF90aGlzMTEuY2hlY2tJbnN0U3RhdHVzKCk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0sCiAgICAvL+WPlua2iOaMgui1twogICAgY2FuY2VsSGFuZ1VwOiBmdW5jdGlvbiBjYW5jZWxIYW5nVXAoKSB7CiAgICAgIHZhciBfdGhpczEyID0gdGhpczsKICAgICAgZmxvdy51bkZvcmJpZGRlbkluc3RhbmNlKHRoaXMuaW5zdElkKS50aGVuKGZ1bmN0aW9uIChkYXRhKSB7CiAgICAgICAgaWYgKGRhdGEuc3RhdGUpIHsKICAgICAgICAgIF90aGlzMTIuJG1lc3NhZ2UoewogICAgICAgICAgICB0eXBlOiAnc3VjY2VzcycsCiAgICAgICAgICAgIG1lc3NhZ2U6IGRhdGEubWVzc2FnZQogICAgICAgICAgfSk7CiAgICAgICAgICBfdGhpczEyLmNoZWNrSW5zdFN0YXR1cyhmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIF90aGlzMTIuaXNIYW5nID0gZmFsc2U7CiAgICAgICAgICAgIF90aGlzMTIuZGlzYWJsZWQgPSBmYWxzZTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9LAogICAgLy/ot7PovazliLDkuIvkuIDkuKrku7vliqEKICAgIG5leHRUYXNrOiBmdW5jdGlvbiBuZXh0VGFzaygpIHsKICAgICAgdmFyIF90aGlzMTMgPSB0aGlzOwogICAgICB2YXIgX3RoaXMgPSB0aGlzOwogICAgICBpZiAoX3RoaXMuJHJvdXRlLm5hbWUuaW5kZXhPZigncmVwb3J0TW9kdWxlSW5zdCcpICE9IC0xKSB7CiAgICAgICAgX3RoaXMuJHJvdXRlci5wdXNoKCcvc3RhdGVtZW50L3RlbXBsYXRlL3ByZXZpZXcvJyArIF90aGlzLiRyb3V0ZS5wYXJhbXMudGVtcGxhdGVLZXkgKyAnL3RvZG8vJyArIF90aGlzLiRyb3V0ZS5wYXJhbXMuZGVmS2V5ICsgJy90cnVlJyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ3N0b3JlUHJvY2Vzcy9nZXROZXh0VGFza0J5RGVmSWQnLCB7CiAgICAgICAgICBkZWZJZDogdGhpcy5kZWZJZCwKICAgICAgICAgIGRlZktleTogdGhpcy5kZWZLZXkKICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXNwKSB7CiAgICAgICAgICBpZiAocmVzcC5zdGF0ZSkgewogICAgICAgICAgICAvL+i3s+i9rOWIsOaWsOeahOW+heWKnumhtemdogogICAgICAgICAgICBpZiAocmVzcC52YWx1ZSkgewogICAgICAgICAgICAgIF90aGlzMTMuaGFuZGxlT3BlblRhc2socmVzcC52YWx1ZSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgX3RoaXMxMy4kbWVzc2FnZSh7CiAgICAgICAgICAgICAgICB0eXBlOiAnc3VjY2VzcycsCiAgICAgICAgICAgICAgICBtZXNzYWdlOiAn6K+l5rWB56iL5omA5bGe5Lu75Yqh5bey5aSE55CG5a6M5oiQJwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgaWYgKF90aGlzMTMuJHJvdXRlLm5hbWUuaW5kZXhPZignc3lzTW9kdWxlSW5zdCcpICE9IC0xKSB7CiAgICAgICAgICAgICAgICAgIF90aGlzLiRyb3V0ZXIucHVzaCgnL3YtZmxvdy92LXRvZG8vJyArIF90aGlzLiRyb3V0ZS5wYXJhbXMuZGVmS2V5KTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIF90aGlzLiRyb3V0ZXIucHVzaCgnL3YtZmxvdy92LXRvZG8vJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSwgMTApOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0sCiAgICBoYW5kbGVPcGVuVGFzazogZnVuY3Rpb24gaGFuZGxlT3BlblRhc2socm93KSB7CiAgICAgIGlmIChyb3cuc3RhdHVzID09ICdTSEFSRScgfHwgcm93LnN0YXR1cyA9PSAnQkFDS1NIQVJFJykgewogICAgICAgIGlmIChyb3cuaWRlbnRpdHlMaXN0ICYmIHJvdy5pZGVudGl0eUxpc3QubGVuZ3RoID09IDEpIHsKICAgICAgICAgIHZhciB1cmwgPSAnL3Rhc2svJyArIHJvdy5pZCArICcvJyArIHJvdy5pZGVudGl0eUxpc3RbMF0uaWQ7CiAgICAgICAgICB0aGlzLm9wZW5BbmRSZWxvYWQodXJsKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdmFyIGh0bWwgPSAnPHNlbGVjdCByZWY9JyArIE1hdGgucmFuZG9tKCkgKyAnIGlkPSJhcHByb3ZhbExlYWRlclNlbGVjdCIgc3R5bGU9IndpZHRoOiAyMDBweDtoZWlnaHQ6IDMwcHg7Ym9yZGVyLXJhZGl1czogNHB4O21hcmdpbjogMjBweCA3MHB4OyIgPjxvcHRpb24gdmFsdWU9IiI+6K+36YCJ5oupPC9vcHRpb24+JzsKICAgICAgICAgIHJvdy5pZGVudGl0eUxpc3QuZm9yRWFjaChmdW5jdGlvbiAoaWRlbnRpdHkpIHsKICAgICAgICAgICAgaHRtbCArPSAnPG9wdGlvbiB2YWx1ZT0iJyArIGlkZW50aXR5LmlkICsgJyI+JyArIGlkZW50aXR5Lm5hbWUgKyAnPC9vcHRpb24+JzsKICAgICAgICAgIH0pOwogICAgICAgICAgaHRtbCArPSAnPC9zZWxlY3Q+JzsKICAgICAgICAgIHZhciB0aGlzXyA9IHRoaXM7CiAgICAgICAgICB0aGlzLiRhbGVydChodG1sLCAn6K+36YCJ5oup5LiA5Liq6aKG5a+85Luj5Li65a6h5om5JywgewogICAgICAgICAgICBkYW5nZXJvdXNseVVzZUhUTUxTdHJpbmc6IHRydWUsCiAgICAgICAgICAgIGJlZm9yZUNsb3NlOiBmdW5jdGlvbiBiZWZvcmVDbG9zZShhY3Rpb24sIGluc3RhbmNlLCBkb25lKSB7CiAgICAgICAgICAgICAgaWYgKGFjdGlvbiA9PSAnY29uZmlybScpIHsKICAgICAgICAgICAgICAgIHZhciBzZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhcHByb3ZhbExlYWRlclNlbGVjdCcpOwogICAgICAgICAgICAgICAgaWYgKHNlLnNlbGVjdGVkSW5kZXggPT0gMCkgewogICAgICAgICAgICAgICAgICB0aGlzLiRtZXNzYWdlLndhcm5pbmcoJ+ivt+mAieaLqeS7o+S4uuWuoeaJueeahOmihuWvvCcpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgaW5zdGFuY2UuY2xvc2UoKTsKICAgICAgICAgICAgICAgICAgdGhpc18ub3BlbkFuZFJlbG9hZCgnL3Rhc2svJyArIHJvdy5pZCArICcvJyArIHNlW3NlLnNlbGVjdGVkSW5kZXhdLnZhbHVlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaW5zdGFuY2UuY2xvc2UoKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChyb3cuc3RhdHVzID09ICdBR0VOVCcgJiYgcm93Lm93bmVySWQgIT0gcm93LmFzc2lnbmVlSWQgJiYgcm93Lm93bmVySWQgPT0gdGhpcy4kc3RvcmUuc3RhdGUubG9naW4uY3VycmVudFVzZXIudXNlcklkKSB7CiAgICAgICAgLy/lp5TmiZjku7vliqEKICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCgnL2luc3RSZWFkLycgKyByb3cucHJvY0luc3RJZCArICcvYWdlbnQnKTsKICAgICAgfSBlbHNlIGlmIChyb3cuc3RhdHVzID09ICdGT0xMT1cnKSB7CiAgICAgICAgLy/ot5/ouKrku7vliqEKICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCgnL3Rhc2tSZWFkLycgKyByb3cuaWQgKyAnL0ZPTExPVycpOwogICAgICB9IGVsc2UgewogICAgICAgIHZhciBfdXJsID0gJy90YXNrLycgKyByb3cuaWQgKyAnLzAnOwogICAgICAgIGlmICh0aGlzLiRyb3V0ZS5uYW1lLmluZGV4T2YoJ3JlcG9ydE1vZHVsZUluc3QnKSAhPSAtMSkgewogICAgICAgICAgX3VybCA9ICcvcmVwb3J0TW9kdWxlSW5zdC8nICsgcm93LmlkICsgJy8wJyArICcvJyArIHRoaXMuJHJvdXRlLnBhcmFtcy5kZWZLZXkgKyAnL3RydWUvJyArIHRoaXMuJHJvdXRlLnRlbXBsYXRlS2V5OwogICAgICAgIH0gZWxzZSBpZiAodGhpcy4kcm91dGUubmFtZS5pbmRleE9mKCdzeXNNb2R1bGVJbnN0JykgIT0gLTEpIHsKICAgICAgICAgIF91cmwgPSAnL3N5c01vZHVsZUluc3QvJyArIHJvdy5pZCArICcvMCcgKyAnLycgKyB0aGlzLiRyb3V0ZS5wYXJhbXMuZGVmS2V5ICsgJy90cnVlJzsKICAgICAgICB9CiAgICAgICAgdGhpcy5vcGVuQW5kUmVsb2FkKF91cmwpOwogICAgICB9CiAgICB9LAogICAgb3BlbkFuZFJlbG9hZDogZnVuY3Rpb24gb3BlbkFuZFJlbG9hZCh1cmwpIHsKICAgICAgdmFyIF90aGlzMTQgPSB0aGlzOwogICAgICB0aGlzLiRyb3V0ZXIucHVzaCh1cmwpOwogICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICBfdGhpczE0LiRyb290LiRjaGlsZHJlblswXS5yZWxvYWQoKTsKICAgICAgfSwgMTApOwogICAgfQogIH0sCiAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCgpIHsKICAgIC8v5YW85a655Y+q5pi+56S65a6h5om56aG16Z2i5pe2CiAgICBpZiAodGhpcy4kcm91dGUubWV0YS5zaW5nbGUpIHsKICAgICAgdGhpcy5pc0RkID0gdHJ1ZTsKICAgIH0KICAgIGlmICh0aGlzLnR5cGUgPT0gJ2RvbmUnKSB7CiAgICAgIHRoaXMuZGFpbG9nVGl0bGUgPSAn5pKk5ZueJzsKICAgICAgdGhpcy5pc0hhbmQgPSB0cnVlOwogICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT0gJ3JlcXVlc3QnKSB7CiAgICAgIHRoaXMuZGFpbG9nVGl0bGUgPSAn5pKk5Zue5Yiw5Y+R6LW35Lq6JzsKICAgICAgdGhpcy5pc0hhbmQgPSBmYWxzZTsKICAgIH0KICB9Cn07"},null]}