{"remainingRequest":"D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\thread-loader\\dist\\cjs.js!D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\babel-loader\\lib\\index.js!D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\eslint-loader\\index.js??ref--13-0!D:\\jenkins\\workspace\\bzzgj-fvue\\src\\store\\storeProcess.js","dependencies":[{"path":"D:\\jenkins\\workspace\\bzzgj-fvue\\src\\store\\storeProcess.js","mtime":1667545182301},{"path":"D:\\jenkins\\workspace\\bzzgj-fvue\\babel.config.js","mtime":1725536844935},{"path":"D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\thread-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\babel-loader\\lib\\index.js","mtime":456789000000},{"path":"D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\eslint-loader\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:aW1wb3J0IF90b0NvbnN1bWFibGVBcnJheSBmcm9tICJEOi9qZW5raW5zL3dvcmtzcGFjZS9ienpnai1mdnVlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b0NvbnN1bWFibGVBcnJheS5qcyI7CmltcG9ydCBfb2JqZWN0U3ByZWFkIGZyb20gIkQ6L2plbmtpbnMvd29ya3NwYWNlL2J6emdqLWZ2dWUvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZDIuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5tYXAuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuc3BsaWNlLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuaXRlcmF0b3IuY29uc3RydWN0b3IuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5mb3ItZWFjaC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLml0ZXJhdG9yLm1hcC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmpzb24uc3RyaW5naWZ5LmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmtleXMuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5mb3ItZWFjaC5qcyI7CmltcG9ydCBwcm9jZXNzIGZyb20gIkAvYXBpL3Byb2Nlc3MuanMiOwppbXBvcnQgeyBNZXNzYWdlIH0gZnJvbSAnZWxlbWVudC11aSc7CmltcG9ydCB7IExvYWRpbmcgfSBmcm9tICJlbGVtZW50LXVpIjsKdmFyIHN0YXRlID0gewogIHBhZ2luYXRpb246IHt9LAogIC8v5YiG6aG15Y+C5pWwCiAgcm93czogW10sCiAgLy/liJfooajmlbDmja4KICB0b3RhbDogMCwKICAvL+WIl+ihqOaVsOaNruaAu+adoeaVsAogIHRyZWU6IFtdLAogIC8v5rWB56iL5YiG57G75pWw5o2uCiAgcm93c0J0bjogW10sCiAgLy/mk43kvZzmjInpkq4KICBhcHByb3ZhbEl0ZW06IFtdLAogIC8v5a6h5om55bi455So6K+tCiAgb3BpbmlvbnM6IFtdLAogIC8v5a6h5om56K6w5b2VCiAgbm9kZXM6IFtdLAogIC8v5Lu75Yqh6IqC54K5CiAgY2hlY2tlZE5vZGVzOiBbXSwKICAvL+i3n+i4quS6hueahOS7u+WKoeiKgueCuQogIGJwbUV4ZVN0YWNrc1VzZXJOb2RlOiBbXSwKICAvL+WPr+mps+WbnueahOS7u+WKoeiKgueCuQogIHJlbGF0ZWRJbmZvcm1hdGlvbjoge30sCiAgLy/nm7jlhbPkv6Hmga8KICBkdWVUaW1lOiB7fSwKICAvL+S7u+WKoeW7tuacn+a2iOaBrwogIG5leHRFeGVjdXRvcjogbnVsbCwKICAvLyDpobrluo/nrb7nvbIg5LiL5LiA5q2l5omn6KGM5Lq6CiAgZm9yY2VMb2NrOiBmYWxzZSwKICAvL+aYr+WQpuW8uuWItuetvuaUtgogIHNpZ25hdHVyZUNvbmZpZzogewogICAgc3RhdHVzOiAnZGlzYWJsZScsCiAgICBmaWVsZDogJycsCiAgICBpc0NvdmVyOiBmYWxzZSwKICAgIHNlY3JldEZyZWU6IGZhbHNlLAogICAgcGFzc3dvcmQ6ICcnCiAgfSAvL+etvueroOmFjee9riBzdGF0dXM6ZGlzYWJsZSjmnKrlkK/nlKgp77yMc3RhcnTvvIjlvIDlp4vvvInvvIxpbmco6L+b6KGM5LitKe+8jHN1Y2Nlc3Mo5oiQ5YqfKe+8jGZhaWwo5aSx6LSlKQp9Owp2YXIgZ2V0dGVycyA9IHt9Owp2YXIgYWN0aW9ucyA9IHsKICAvL+abtOaWsOavj+mhteS4i+aLieaYvuekuuaVsOaNrgogIHNldFBhZ2luYXRpb25TaXplOiBmdW5jdGlvbiBzZXRQYWdpbmF0aW9uU2l6ZShfcmVmLCBzaXplKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZi5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZi5zdGF0ZTsKICAgIGNvbW1pdCgic2V0UGFnaW5hdGlvblNpemUiLCBzaXplKTsKICB9LAogIC8v5pu05paw56ys5Yeg6aG1CiAgc2V0UGFnaW5hdGlvblBhZ2VOdW06IGZ1bmN0aW9uIHNldFBhZ2luYXRpb25QYWdlTnVtKF9yZWYyLCBjdXJyZW50UGFnZSkgewogICAgdmFyIGNvbW1pdCA9IF9yZWYyLmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmMi5zdGF0ZTsKICAgIGNvbW1pdCgic2V0UGFnaW5hdGlvblBhZ2VOdW0iLCBjdXJyZW50UGFnZSk7CiAgfSwKICAvL+iOt+WPlua1geeoi+WIhuexu+WIl+ihqAogIGdldEZsb3dUcmVlOiBmdW5jdGlvbiBnZXRGbG93VHJlZShfcmVmMykgewogICAgdmFyIGNvbW1pdCA9IF9yZWYzLmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmMy5zdGF0ZTsKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgIHByb2Nlc3MuZ2V0Rmxvd1RyZWUoZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgcmVzb2x2ZShyZXNwb25zZS5kYXRhKTsKICAgICAgICBjb21taXQoInNldEZsb3dUcmVlcyIsIHJlc3BvbnNlLmRhdGEpOwogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/ojrflj5blvoXlip7liJfooagKICBnZXRUb2RvQnlQYWdpbmF0aW9uOiBmdW5jdGlvbiBnZXRUb2RvQnlQYWdpbmF0aW9uKF9yZWY0LCBwYWdpbmF0aW9uKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjQuY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWY0LnN0YXRlOwogICAgY29tbWl0KCJjbGVhckxpc3REYXRhIik7CiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICBwcm9jZXNzLmdldFRvZG9CeVBhZ2luYXRpb24ocGFnaW5hdGlvbiwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgY29tbWl0KCJzZXRSb3dzIiwgcmVzcG9uc2UuZGF0YS5yb3dzKTsgLy/lvoXlip7mlbDmja4KICAgICAgICBjb21taXQoInNldFRvdGFsIiwgcmVzcG9uc2UuZGF0YS50b3RhbCk7IC8v5oC75pWw5o2u5p2h5pWwCiAgICAgICAgdmFyIHBhZ2VCZWFuID0gewogICAgICAgICAgInBhZ2UiOiByZXNwb25zZS5kYXRhLnBhZ2UsCiAgICAgICAgICAicGFnZVNpemUiOiByZXNwb25zZS5kYXRhLnBhZ2VTaXplLAogICAgICAgICAgInNob3dUb3RhbCI6ICJ0cnVlIgogICAgICAgIH07IC8v5o6l5Y+j5pa55rOV6L+U5Zue55qEcGFnZUJlYW4KICAgICAgICBjb21taXQoInNldFBhZ2luYXRpb24iLCBwYWdlQmVhbik7IC8v5pi+56S656ys5Yeg6aG177yM5q+P6aG15pi+56S65aSa5bCR5p2hCiAgICAgICAgcmVzb2x2ZShyZXNwb25zZS5kYXRhLnJvd3MpOwogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/ojrflj5bpooblr7zlvoXlip7liJfooagKICBnZXRMZWFkZXJUb2RvQnlQYWdpbmF0aW9uOiBmdW5jdGlvbiBnZXRMZWFkZXJUb2RvQnlQYWdpbmF0aW9uKF9yZWY1LCBwYWdpbmF0aW9uKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjUuY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWY1LnN0YXRlOwogICAgY29tbWl0KCJjbGVhckxpc3REYXRhIik7CiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICBwcm9jZXNzLmdldExlYWRlclRvZG9CeVBhZ2luYXRpb24ocGFnaW5hdGlvbiwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgY29tbWl0KCJzZXRSb3dzIiwgcmVzcG9uc2UuZGF0YS5yb3dzKTsgLy/lvoXlip7mlbDmja4KICAgICAgICBjb21taXQoInNldFRvdGFsIiwgcmVzcG9uc2UuZGF0YS50b3RhbCk7IC8v5oC75pWw5o2u5p2h5pWwCiAgICAgICAgdmFyIHBhZ2VCZWFuID0gewogICAgICAgICAgInBhZ2UiOiByZXNwb25zZS5kYXRhLnBhZ2UsCiAgICAgICAgICAicGFnZVNpemUiOiByZXNwb25zZS5kYXRhLnBhZ2VTaXplLAogICAgICAgICAgInNob3dUb3RhbCI6ICJ0cnVlIgogICAgICAgIH07IC8v5o6l5Y+j5pa55rOV6L+U5Zue55qEcGFnZUJlYW4KICAgICAgICBjb21taXQoInNldFBhZ2luYXRpb24iLCBwYWdlQmVhbik7IC8v5pi+56S656ys5Yeg6aG177yM5q+P6aG15pi+56S65aSa5bCR5p2hCiAgICAgICAgcmVzb2x2ZShyZXNwb25zZS5kYXRhKTsKICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8v6I635Y+W5oiR6L2s5Yqe55qE5YiX6KGoCiAgZ2V0RGVsZWdhdGU6IGZ1bmN0aW9uIGdldERlbGVnYXRlKF9yZWY2LCBwYWdpbmF0aW9uKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjYuY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWY2LnN0YXRlOwogICAgY29tbWl0KCJjbGVhckxpc3REYXRhIik7CiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICBwcm9jZXNzLmdldERlbGVnYXRlKHBhZ2luYXRpb24sIGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIGNvbW1pdCgic2V0Um93cyIsIHJlc3BvbnNlLmRhdGEucm93cyk7IC8v5b6F5Yqe5pWw5o2uCiAgICAgICAgY29tbWl0KCJzZXRUb3RhbCIsIHJlc3BvbnNlLmRhdGEudG90YWwpOyAvL+aAu+aVsOaNruadoeaVsAogICAgICAgIHZhciBwYWdlQmVhbiA9IHsKICAgICAgICAgICJwYWdlIjogcmVzcG9uc2UuZGF0YS5wYWdlLAogICAgICAgICAgInBhZ2VTaXplIjogcmVzcG9uc2UuZGF0YS5wYWdlU2l6ZSwKICAgICAgICAgICJzaG93VG90YWwiOiAidHJ1ZSIKICAgICAgICB9OyAvL+aOpeWPo+aWueazlei/lOWbnueahHBhZ2VCZWFuCiAgICAgICAgY29tbWl0KCJzZXRQYWdpbmF0aW9uIiwgcGFnZUJlYW4pOyAvL+aYvuekuuesrOWHoOmhte+8jOavj+mhteaYvuekuuWkmuWwkeadoQogICAgICAgIHJlc29sdmUocmVzcG9uc2UuZGF0YS5yb3dzKTsKICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8v6I635Y+W5oiR5Lyg6ZiF55qE5Lu75Yqh5YiX6KGoCiAgZ2V0TXlOb3RpY2VSZWFkTGlzdDogZnVuY3Rpb24gZ2V0TXlOb3RpY2VSZWFkTGlzdChfcmVmNywgcGFnaW5hdGlvbikgewogICAgdmFyIGNvbW1pdCA9IF9yZWY3LmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmNy5zdGF0ZTsKICAgIGNvbW1pdCgiY2xlYXJMaXN0RGF0YSIpOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcHJvY2Vzcy5nZXRNeU5vdGljZVJlYWRMaXN0KHBhZ2luYXRpb24sIGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIGNvbW1pdCgic2V0Um93cyIsIHJlc3BvbnNlLmRhdGEucm93cyk7IC8v5b6F5Yqe5pWw5o2uCiAgICAgICAgY29tbWl0KCJzZXRUb3RhbCIsIHJlc3BvbnNlLmRhdGEudG90YWwpOyAvL+aAu+aVsOaNruadoeaVsAogICAgICAgIHZhciBwYWdlQmVhbiA9IHsKICAgICAgICAgICJwYWdlIjogcmVzcG9uc2UuZGF0YS5wYWdlLAogICAgICAgICAgInBhZ2VTaXplIjogcmVzcG9uc2UuZGF0YS5wYWdlU2l6ZSwKICAgICAgICAgICJzaG93VG90YWwiOiAidHJ1ZSIKICAgICAgICB9OyAvL+aOpeWPo+aWueazlei/lOWbnueahHBhZ2VCZWFuCiAgICAgICAgY29tbWl0KCJzZXRQYWdpbmF0aW9uIiwgcGFnZUJlYW4pOyAvL+aYvuekuuesrOWHoOmhte+8jOavj+mhteaYvuekuuWkmuWwkeadoQogICAgICAgIHJlc29sdmUocmVzcG9uc2UuZGF0YS5yb3dzKTsKICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8v5Yig6Zmk5Lyg6ZiF5Lu75YqhCiAgZGVsQnBtVGFza05vdGljZUJ5SWQ6IGZ1bmN0aW9uIGRlbEJwbVRhc2tOb3RpY2VCeUlkKF9yZWY4LCBpZCkgewogICAgdmFyIGNvbW1pdCA9IF9yZWY4LmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmOC5zdGF0ZTsKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgIHByb2Nlc3MuZGVsQnBtVGFza05vdGljZUJ5SWQoaWQsIGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIGlmIChyZXNwb25zZS5kYXRhLnN0YXRlKSB7CiAgICAgICAgICBNZXNzYWdlLnN1Y2Nlc3MoewogICAgICAgICAgICBkdXJhdGlvbjogMTUwMCwKICAgICAgICAgICAgbWVzc2FnZTogcmVzcG9uc2UuZGF0YS5tZXNzYWdlLAogICAgICAgICAgICBvbkNsb3NlOiBmdW5jdGlvbiBvbkNsb3NlKCkgewogICAgICAgICAgICAgIHJlc29sdmUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/ojrflj5blvoXpmIXliJfooagKICBnZXROb3RpY2VUb2RvUmVhZExpc3Q6IGZ1bmN0aW9uIGdldE5vdGljZVRvZG9SZWFkTGlzdChfcmVmOSwgcGFnaW5hdGlvbikgewogICAgdmFyIGNvbW1pdCA9IF9yZWY5LmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmOS5zdGF0ZTsKICAgIGNvbW1pdCgiY2xlYXJMaXN0RGF0YSIpOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcHJvY2Vzcy5nZXROb3RpY2VUb2RvUmVhZExpc3QocGFnaW5hdGlvbiwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgY29tbWl0KCJzZXRSb3dzIiwgcmVzcG9uc2UuZGF0YS5yb3dzKTsgLy/lvoXlip7mlbDmja4KICAgICAgICBjb21taXQoInNldFRvdGFsIiwgcmVzcG9uc2UuZGF0YS50b3RhbCk7IC8v5oC75pWw5o2u5p2h5pWwCiAgICAgICAgdmFyIHBhZ2VCZWFuID0gewogICAgICAgICAgInBhZ2UiOiByZXNwb25zZS5kYXRhLnBhZ2UsCiAgICAgICAgICAicGFnZVNpemUiOiByZXNwb25zZS5kYXRhLnBhZ2VTaXplLAogICAgICAgICAgInNob3dUb3RhbCI6ICJ0cnVlIgogICAgICAgIH07IC8v5o6l5Y+j5pa55rOV6L+U5Zue55qEcGFnZUJlYW4KICAgICAgICBjb21taXQoInNldFBhZ2luYXRpb24iLCBwYWdlQmVhbik7IC8v5pi+56S656ys5Yeg6aG177yM5q+P6aG15pi+56S65aSa5bCR5p2hCiAgICAgICAgcmVzb2x2ZShyZXNwb25zZS5kYXRhLnJvd3MpOwogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/ojrflj5blt7LpmIXliJfooagKICBnZXROb3RpY2VEb25lUmVhZExpc3Q6IGZ1bmN0aW9uIGdldE5vdGljZURvbmVSZWFkTGlzdChfcmVmMTAsIHBhZ2luYXRpb24pIHsKICAgIHZhciBjb21taXQgPSBfcmVmMTAuY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWYxMC5zdGF0ZTsKICAgIGNvbW1pdCgiY2xlYXJMaXN0RGF0YSIpOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcHJvY2Vzcy5nZXROb3RpY2VEb25lUmVhZExpc3QocGFnaW5hdGlvbiwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgY29tbWl0KCJzZXRSb3dzIiwgcmVzcG9uc2UuZGF0YS5yb3dzKTsgLy/lvoXlip7mlbDmja4KICAgICAgICBjb21taXQoInNldFRvdGFsIiwgcmVzcG9uc2UuZGF0YS50b3RhbCk7IC8v5oC75pWw5o2u5p2h5pWwCiAgICAgICAgdmFyIHBhZ2VCZWFuID0gewogICAgICAgICAgInBhZ2UiOiByZXNwb25zZS5kYXRhLnBhZ2UsCiAgICAgICAgICAicGFnZVNpemUiOiByZXNwb25zZS5kYXRhLnBhZ2VTaXplLAogICAgICAgICAgInNob3dUb3RhbCI6ICJ0cnVlIgogICAgICAgIH07IC8v5o6l5Y+j5pa55rOV6L+U5Zue55qEcGFnZUJlYW4KICAgICAgICBjb21taXQoInNldFBhZ2luYXRpb24iLCBwYWdlQmVhbik7IC8v5pi+56S656ys5Yeg6aG177yM5q+P6aG15pi+56S65aSa5bCR5p2hCiAgICAgICAgcmVzb2x2ZShyZXNwb25zZS5kYXRhLnJvd3MpOwogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/ojrflj5blt7Llip7liJfooagKICBnZXREb25lQnlQYWdpbmF0aW9uOiBmdW5jdGlvbiBnZXREb25lQnlQYWdpbmF0aW9uKF9yZWYxMSwgcGFnaW5hdGlvbikgewogICAgdmFyIGNvbW1pdCA9IF9yZWYxMS5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjExLnN0YXRlOwogICAgY29tbWl0KCJjbGVhckxpc3REYXRhIik7CiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICBwcm9jZXNzLmdldERvbmVCeVBhZ2luYXRpb24ocGFnaW5hdGlvbiwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgdmFyIHJldm9rZURhdGEgPSBbXTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3BvbnNlLmRhdGEucm93cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgaWYgKCEocmVzcG9uc2UuZGF0YS5yb3dzW2ldLnN0YXR1cyAhPSAncnVubmluZycgfHwgcmVzcG9uc2UuZGF0YS5yb3dzW2ldLm9waW5pb25TdGF0dXMgIT0gJ2FncmVlJykgfHwgcmVzcG9uc2UuZGF0YS5yb3dzW2ldLm9waW5pb25TdGF0dXMgPT0gJ2lucXUnKSB7CiAgICAgICAgICAgIHJlc3BvbnNlLmRhdGEucm93c1tpXS5yZXZva2UgPSB0cnVlOwogICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHJldm9rZURhdGEubGVuZ3RoOyBqKyspIHsKICAgICAgICAgICAgICBpZiAocmV2b2tlRGF0YVtqXS5pZCA9PSByZXNwb25zZS5kYXRhLnJvd3NbaV0uaWQgJiYgcmV2b2tlRGF0YVtqXS50YXNrS2V5ID09IHJlc3BvbnNlLmRhdGEucm93c1tpXS50YXNrS2V5ICYmIHJlc3BvbnNlLmRhdGEucm93c1tpXS5yZXZva2UgPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgcmVzcG9uc2UuZGF0YS5yb3dzW2ldLnJldm9rZSA9IGZhbHNlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICByZXZva2VEYXRhLnB1c2gocmVzcG9uc2UuZGF0YS5yb3dzW2ldKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJlc3BvbnNlLmRhdGEucm93c1tpXS5yZXZva2UgPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdmFyIGRhdGFSb3dzID0gcmVzcG9uc2UuZGF0YS5yb3dzOwogICAgICAgIGNvbW1pdCgic2V0Um93cyIsIGRhdGFSb3dzKTsgLy/lt7Llip7mlbDmja4KICAgICAgICBjb21taXQoInNldFRvdGFsIiwgcmVzcG9uc2UuZGF0YS50b3RhbCk7IC8v5oC75pWw5o2u5p2h5pWwCiAgICAgICAgdmFyIHBhZ2VCZWFuID0gewogICAgICAgICAgInBhZ2UiOiByZXNwb25zZS5kYXRhLnBhZ2UsCiAgICAgICAgICAicGFnZVNpemUiOiByZXNwb25zZS5kYXRhLnBhZ2VTaXplLAogICAgICAgICAgInNob3dUb3RhbCI6ICJ0cnVlIgogICAgICAgIH07IC8v5o6l5Y+j5pa55rOV6L+U5Zue55qEcGFnZUJlYW4KICAgICAgICBjb21taXQoInNldFBhZ2luYXRpb24iLCBwYWdlQmVhbik7IC8v5pi+56S656ys5Yeg6aG177yM5q+P6aG15pi+56S65aSa5bCR5p2hCiAgICAgICAgcmVzb2x2ZShyZXNwb25zZS5kYXRhLnJvd3MpOwogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/ojrflj5bmiJHnmoTor7fmsYLliJfooagKICBnZXRNeVJlcXVlc3RCeVBhZ2luYXRpb246IGZ1bmN0aW9uIGdldE15UmVxdWVzdEJ5UGFnaW5hdGlvbihfcmVmMTIsIHBhZ2luYXRpb24pIHsKICAgIHZhciBjb21taXQgPSBfcmVmMTIuY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWYxMi5zdGF0ZTsKICAgIGNvbW1pdCgiY2xlYXJMaXN0RGF0YSIpOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcHJvY2Vzcy5nZXRNeVJlcXVlc3RCeVBhZ2luYXRpb24ocGFnaW5hdGlvbiwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgY29tbWl0KCJzZXRSb3dzIiwgcmVzcG9uc2UuZGF0YS5yb3dzKTsgLy/lvoXlip7mlbDmja4KICAgICAgICBjb21taXQoInNldFRvdGFsIiwgcmVzcG9uc2UuZGF0YS50b3RhbCk7IC8v5oC75pWw5o2u5p2h5pWwCiAgICAgICAgdmFyIHBhZ2VCZWFuID0gewogICAgICAgICAgInBhZ2UiOiByZXNwb25zZS5kYXRhLnBhZ2UsCiAgICAgICAgICAicGFnZVNpemUiOiByZXNwb25zZS5kYXRhLnBhZ2VTaXplLAogICAgICAgICAgInNob3dUb3RhbCI6ICJ0cnVlIgogICAgICAgIH07IC8v5o6l5Y+j5pa55rOV6L+U5Zue55qEcGFnZUJlYW4KICAgICAgICBjb21taXQoInNldFBhZ2luYXRpb24iLCBwYWdlQmVhbik7IC8v5pi+56S656ys5Yeg6aG177yM5q+P6aG15pi+56S65aSa5bCR5p2hCiAgICAgICAgcmVzb2x2ZShyZXNwb25zZS5kYXRhLnJvd3MpOwogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/ojrflj5bmlrDlu7rmtYHnqIvliJfooagKICBnZXRGbG93TGlzdEJ5UGFnaW5hdGlvbjogZnVuY3Rpb24gZ2V0Rmxvd0xpc3RCeVBhZ2luYXRpb24oX3JlZjEzLCBwYWdpbmF0aW9uKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjEzLmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmMTMuc3RhdGU7CiAgICBjb21taXQoImNsZWFyTGlzdERhdGEiKTsKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgIHByb2Nlc3MuZ2V0Rmxvd0xpc3RCeVBhZ2luYXRpb24ocGFnaW5hdGlvbiwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgY29tbWl0KCJzZXRSb3dzIiwgcmVzcG9uc2UuZGF0YS5yb3dzKTsgLy/lvoXlip7mlbDmja4KICAgICAgICBjb21taXQoInNldFRvdGFsIiwgcmVzcG9uc2UuZGF0YS50b3RhbCk7IC8v5oC75pWw5o2u5p2h5pWwCiAgICAgICAgdmFyIHBhZ2VCZWFuID0gewogICAgICAgICAgInBhZ2UiOiByZXNwb25zZS5kYXRhLnBhZ2UsCiAgICAgICAgICAicGFnZVNpemUiOiByZXNwb25zZS5kYXRhLnBhZ2VTaXplLAogICAgICAgICAgInNob3dUb3RhbCI6ICJ0cnVlIgogICAgICAgIH07IC8v5o6l5Y+j5pa55rOV6L+U5Zue55qEcGFnZUJlYW4KICAgICAgICBjb21taXQoInNldFBhZ2luYXRpb24iLCBwYWdlQmVhbik7IC8v5pi+56S656ys5Yeg6aG177yM5q+P6aG15pi+56S65aSa5bCR5p2hCiAgICAgICAgcmVzb2x2ZShyZXNwb25zZS5kYXRhLnJvd3MpOwogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/mkqTlm54KICByZXZva2VJbnN0YW5jZTogZnVuY3Rpb24gcmV2b2tlSW5zdGFuY2UoX3JlZjE0LCBkYXRhKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjE0LmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmMTQuc3RhdGU7CiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICBwcm9jZXNzLnJldm9rZUluc3RhbmNlKGRhdGEsIGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIGlmIChyZXNwb25zZS5kYXRhLnN0YXRlKSB7CiAgICAgICAgICBNZXNzYWdlLnN1Y2Nlc3MoewogICAgICAgICAgICBkdXJhdGlvbjogMTUwMCwKICAgICAgICAgICAgbWVzc2FnZTogcmVzcG9uc2UuZGF0YS5tZXNzYWdlLAogICAgICAgICAgICBvbkNsb3NlOiBmdW5jdGlvbiBvbkNsb3NlKCkgewogICAgICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UuZGF0YS52YWx1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8v5a6h5om55p+l55yL6aG16Z2i5pKk5ZueCiAgcmV2b2tlSW5zdGFuY2VCdG46IGZ1bmN0aW9uIHJldm9rZUluc3RhbmNlQnRuKF9yZWYxNSwgZGF0YSwgaXNIYW5kKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjE1LmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmMTUuc3RhdGU7CiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICBwcm9jZXNzLnJldm9rZUluc3RhbmNlKGRhdGEsIGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIGlmIChyZXNwb25zZS5kYXRhLnN0YXRlKSB7CiAgICAgICAgICBNZXNzYWdlLnN1Y2Nlc3MoewogICAgICAgICAgICBkdXJhdGlvbjogMTUwMCwKICAgICAgICAgICAgbWVzc2FnZTogcmVzcG9uc2UuZGF0YS5tZXNzYWdlLAogICAgICAgICAgICBvbkNsb3NlOiBmdW5jdGlvbiBvbkNsb3NlKCkgewogICAgICAgICAgICAgIHJlc29sdmUoZGF0YS5pc0hhbmRSZXZva2UpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSk7CiAgfSwKICAvL+iOt+WPluWuoeaJueaTjeS9nOaMiemSrgogIHRhc2tEZXRhaWw6IGZ1bmN0aW9uIHRhc2tEZXRhaWwoX3JlZjE2LCBwYXJhbXMpIHsKICAgIHZhciBjb21taXQgPSBfcmVmMTYuY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWYxNi5zdGF0ZTsKICAgIHByb2Nlc3MudGFza0RldGFpbChwYXJhbXMsIGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICByZXNwb25zZS5kYXRhLmlzQWRkU2lnbiA9IHBhcmFtcy5pc0FkZFNpZ247CiAgICAgIGNvbW1pdCgic2V0QnV0dG9uUm93cyIsIHJlc3BvbnNlLmRhdGEpOwogICAgICBjb21taXQoInNldE5leHRFeGVjdXRvciIsIHJlc3BvbnNlLmRhdGEubWFwKTsKICAgIH0pOwogIH0sCiAgLy/ojrflj5blrqHmibnluLjnlKjor60KICBnZXRBcHByb3ZhbEJ5RGVmS2V5QW5kVHlwZUlkOiBmdW5jdGlvbiBnZXRBcHByb3ZhbEJ5RGVmS2V5QW5kVHlwZUlkKF9yZWYxNywgZGVmS2V5KSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjE3LmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmMTcuc3RhdGU7CiAgICBwcm9jZXNzLmdldEFwcHJvdmFsQnlEZWZLZXlBbmRUeXBlSWQoZGVmS2V5LCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgY29tbWl0KCJzZXRBcHByb3ZhbEl0ZW0iLCByZXNwb25zZS5kYXRhKTsKICAgIH0pOwogIH0sCiAgLy/ojrflj5blrqHmibnorrDlvZUKICBnZXRPcGluaW9uc0J5SWQ6IGZ1bmN0aW9uIGdldE9waW5pb25zQnlJZChfcmVmMTgsIHBhcmFtKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjE4LmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmMTguc3RhdGU7CiAgICBwcm9jZXNzLmdldE9waW5pb25zQnlJZChwYXJhbSwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgIHJlc3BvbnNlLnBhcmFtID0gcGFyYW07CiAgICAgIGNvbW1pdCgic2V0T3BpbmlvbnMiLCByZXNwb25zZSk7CiAgICB9KTsKICB9LAogIC8v6I635Y+W5Y+v6Lef6Liq55qE5Lu75Yqh6IqC54K5CiAgdGFza05vZGU6IGZ1bmN0aW9uIHRhc2tOb2RlKF9yZWYxOSwgZGF0YSkgewogICAgdmFyIGNvbW1pdCA9IF9yZWYxOS5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjE5LnN0YXRlOwogICAgcHJvY2Vzcy50YXNrTm9kZShkYXRhLmRlZklkLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgdmFyIG5vZGVzID0gcmVzcG9uc2UuZGF0YS5icG1EZWZMYXlvdXQubGlzdExheW91dDsKICAgICAgdmFyIG5vZGVzQ29weSA9IFtdOwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKG5vZGVzW2ldLm5vZGVUeXBlICE9ICdTVEFSVCcgJiYgbm9kZXNbaV0ubm9kZVR5cGUgIT0gJ0VORCcgJiYgbm9kZXNbaV0ubm9kZVR5cGUgIT0gJ0lOQ0xVU0lWRUdBVEVXQVknICYmIG5vZGVzW2ldLm5vZGVUeXBlICE9ICdFWENMVVNJVkVHQVRFV0FZJyAmJiBub2Rlc1tpXS5ub2RlVHlwZSAhPSAnUEFSQUxMRUxHQVRFV0FZJykgewogICAgICAgICAgbm9kZXNDb3B5LnB1c2goX29iamVjdFNwcmVhZCh7fSwgbm9kZXNbaV0pKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgY29tbWl0KCJzZXROb2RlcyIsIG5vZGVzQ29weSk7CiAgICAgIC8v5qC55o2u5rWB56iL5a6e5L6LaWTojrflj5blt7Lot5/ouKrnmoToioLngrkKICAgICAgcHJvY2Vzcy5nZXRGb2xsb3dlZE5vZGUoZGF0YS5wcm9JbnN0LCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICB2YXIgZm9sbG93ZWROb2RlSWRzID0gcmVzcG9uc2UuZGF0YS52YWx1ZSB8fCAnJzsKICAgICAgICB2YXIgY2hlY2tlZCA9IFtdOwogICAgICAgIHN0YXRlLm5vZGVzLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgICAgIGlmIChmb2xsb3dlZE5vZGVJZHMuaW5kZXhPZihpdGVtLm5vZGVJZCkgPiAtMSkgewogICAgICAgICAgICBjaGVja2VkLnB1c2goaXRlbS5ub2RlSWQpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGNvbW1pdCgic2V0Q2hlY2tlZE5vZGVzIiwgY2hlY2tlZCk7CiAgICAgIH0pOwogICAgfSk7CiAgfSwKICAvL+mAieaLqeS7u+WKoeiKgueCueaXtumAieaLqeivpeWkjemAieahhgogIHNldENoZWNrZWRQdXNoOiBmdW5jdGlvbiBzZXRDaGVja2VkUHVzaChfcmVmMjAsIHZhbHVlKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjIwLmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmMjAuc3RhdGU7CiAgICBjb21taXQoInNldENoZWNrZWRQdXNoIiwgdmFsdWUpOwogIH0sCiAgc2V0Q2hlY2tlZFNwbGljZTogZnVuY3Rpb24gc2V0Q2hlY2tlZFNwbGljZShfcmVmMjEsIHZhbHVlKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjIxLmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmMjEuc3RhdGU7CiAgICBjb21taXQoInNldENoZWNrZWRTcGxpY2UiLCB2YWx1ZSk7CiAgfSwKICAvL+agueaNruS7u+WKoUlE6I635Y+W5Lu75Yqh5piO57uGCiAgZ2V0VGFza0J5SWQ6IGZ1bmN0aW9uIGdldFRhc2tCeUlkKF9yZWYyMiwgaWQpIHsKICAgIHZhciBjb21taXQgPSBfcmVmMjIuY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWYyMi5zdGF0ZTsKICAgIHZhciBsb2FkaW5nID0gTG9hZGluZy5zZXJ2aWNlKHsKICAgICAgZnVsbHNjcmVlbjogdHJ1ZSwKICAgICAgbG9jazogdHJ1ZSwKICAgICAgdGV4dDogJ+ihqOWNleaVsOaNruWKoOi9veS4re+8jOivt+iAkOW/g+etieW+hS4uLicsCiAgICAgIHNwaW5uZXI6ICdlbC1pY29uLWxvYWRpbmcnLAogICAgICBiYWNrZ3JvdW5kOiAncmdiYSgwLCAwLCAwLCAwLjcpJwogICAgfSk7IC8v5byA5aeLCiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICBsb2FkaW5nLmNsb3NlKCk7IC8vIOe7k+adnwogICAgICBwcm9jZXNzLmdldFRhc2tCeUlkKGlkLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICByZXNvbHZlKHJlc3BvbnNlLmRhdGEpOwogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/moLnmja7ku7vliqFJROiOt+WPluS7u+WKoeaYjue7hgogIGdldE5vdGljZTogZnVuY3Rpb24gZ2V0Tm90aWNlKF9yZWYyMywgaWQpIHsKICAgIHZhciBjb21taXQgPSBfcmVmMjMuY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWYyMy5zdGF0ZTsKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgIHByb2Nlc3MuZ2V0Tm90aWNlKGlkLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICByZXNvbHZlKHJlc3BvbnNlLmRhdGEpOwogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/moLnmja7lrp7kvotpZOiOt+WPluWunuS+i+WvueixoQogIGdldEluc3RhbmNlQnlJbnN0SWQ6IGZ1bmN0aW9uIGdldEluc3RhbmNlQnlJbnN0SWQoX3JlZjI0LCBpZCkgewogICAgdmFyIGNvbW1pdCA9IF9yZWYyNC5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjI0LnN0YXRlOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcHJvY2Vzcy5nZXRJbnN0YW5jZUJ5SW5zdElkKGlkLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICByZXNvbHZlKHJlc3BvbnNlLmRhdGEpOwogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/moLnmja7lrp7kvotJROWIpOaWrea1geeoi+aYr+WQpue7k+adnwogIGlzRW5kOiBmdW5jdGlvbiBpc0VuZChfcmVmMjUsIGlkKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjI1LmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmMjUuc3RhdGU7CiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICBwcm9jZXNzLmlzRW5kKGlkLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5zdGF0ZSkgewogICAgICAgICAgcmVzb2x2ZSgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZWplY3QoKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSk7CiAgfSwKICAvL+aWsOWinizmm7TmlrDku7vliqHot5/ouKrooajmlbDmja4KICB0YXNrRm9sbG93U2F2ZTogZnVuY3Rpb24gdGFza0ZvbGxvd1NhdmUoX3JlZjI2LCBkYXRhKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjI2LmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmMjYuc3RhdGU7CiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICBwcm9jZXNzLnRhc2tGb2xsb3dTYXZlKGRhdGEsIGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIGlmIChyZXNwb25zZS5kYXRhLnN0YXRlKSB7CiAgICAgICAgICBNZXNzYWdlLnN1Y2Nlc3MoewogICAgICAgICAgICBkdXJhdGlvbjogMTUwMCwKICAgICAgICAgICAgbWVzc2FnZTogcmVzcG9uc2UuZGF0YS5tZXNzYWdlLAogICAgICAgICAgICBvbkNsb3NlOiBmdW5jdGlvbiBvbkNsb3NlKCkgewogICAgICAgICAgICAgIHJlc29sdmUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/pqbPlm57orr7nva4KICB0YXNrVG9SZWplY3Q6IGZ1bmN0aW9uIHRhc2tUb1JlamVjdChfcmVmMjcsIGRhdGEpIHsKICAgIHZhciBjb21taXQgPSBfcmVmMjcuY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWYyNy5zdGF0ZTsKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgIHByb2Nlc3MudGFza1RvUmVqZWN0KGRhdGEsIGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIGNvbW1pdCgic2V0QnBtRXhlU3RhY2tzVXNlck5vZGUiLCByZXNwb25zZS5kYXRhLmJwbUV4ZVN0YWNrc1VzZXJOb2RlKTsKICAgICAgICByZXNvbHZlKHJlc3BvbnNlLmRhdGEpOwogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/kv53lrZjpqbPlm57orr7nva4KICByZWplY3RDb21wbGV0ZTogZnVuY3Rpb24gcmVqZWN0Q29tcGxldGUoX3JlZjI4LCBkYXRhKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjI4LmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmMjguc3RhdGU7CiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICBwcm9jZXNzLnJlamVjdENvbXBsZXRlKGRhdGEsIGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIGlmIChyZXNwb25zZS5kYXRhLnN0YXRlKSB7CiAgICAgICAgICBNZXNzYWdlLnN1Y2Nlc3MoewogICAgICAgICAgICBkdXJhdGlvbjogMTUwMCwKICAgICAgICAgICAgbWVzc2FnZTogcmVzcG9uc2UuZGF0YS5tZXNzYWdlLAogICAgICAgICAgICBvbkNsb3NlOiBmdW5jdGlvbiBvbkNsb3NlKCkgewogICAgICAgICAgICAgIHJlc29sdmUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/kv53lrZjovazlip7orr7nva4KICBkZWxlZ2F0ZTogZnVuY3Rpb24gZGVsZWdhdGUoX3JlZjI5LCBkYXRhKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjI5LmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmMjkuc3RhdGU7CiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICBwcm9jZXNzLmRlbGVnYXRlKGRhdGEsIGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIGlmIChyZXNwb25zZS5kYXRhLnN0YXRlKSB7CiAgICAgICAgICBNZXNzYWdlLnN1Y2Nlc3MoewogICAgICAgICAgICBkdXJhdGlvbjogMTUwMCwKICAgICAgICAgICAgbWVzc2FnZTogcmVzcG9uc2UuZGF0YS5tZXNzYWdlLAogICAgICAgICAgICBvbkNsb3NlOiBmdW5jdGlvbiBvbkNsb3NlKCkgewogICAgICAgICAgICAgIHJlc29sdmUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/mtYHnqIvkvKDpmIUKICB0cmFuc1RvTW9yZTogZnVuY3Rpb24gdHJhbnNUb01vcmUoX3JlZjMwLCBkYXRhKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjMwLmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmMzAuc3RhdGU7CiAgICB2YXIgbG9hZGluZyA9IExvYWRpbmcuc2VydmljZSh7CiAgICAgIGZ1bGxzY3JlZW46IHRydWUsCiAgICAgIGxvY2s6IHRydWUsCiAgICAgIHRleHQ6ICfmraPlnKjlpITnkIbkuK3vvIzor7fogJDlv4PnrYnlvoUuLi4nLAogICAgICBzcGlubmVyOiAnZWwtaWNvbi1sb2FkaW5nJywKICAgICAgYmFja2dyb3VuZDogJ3JnYmEoMCwgMCwgMCwgMC43KScKICAgIH0pOyAvL+W8gOWniwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcHJvY2Vzcy50cmFuc1RvTW9yZShkYXRhLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICBsb2FkaW5nLmNsb3NlKCk7IC8vIOe7k+adnwogICAgICAgIGlmIChyZXNwb25zZS5kYXRhLnN0YXRlKSB7CiAgICAgICAgICBNZXNzYWdlLnN1Y2Nlc3MoewogICAgICAgICAgICBkdXJhdGlvbjogMTUwMCwKICAgICAgICAgICAgbWVzc2FnZTogcmVzcG9uc2UuZGF0YS5tZXNzYWdlLAogICAgICAgICAgICBvbkNsb3NlOiBmdW5jdGlvbiBvbkNsb3NlKCkgewogICAgICAgICAgICAgIHJlc29sdmUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/lvoHor6Lorr7nva4KICB0YXNrVG9JbnF1OiBmdW5jdGlvbiB0YXNrVG9JbnF1KF9yZWYzMSwgZGF0YSkgewogICAgdmFyIGNvbW1pdCA9IF9yZWYzMS5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjMxLnN0YXRlOwogICAgdmFyIGxvYWRpbmcgPSBMb2FkaW5nLnNlcnZpY2UoewogICAgICBmdWxsc2NyZWVuOiB0cnVlLAogICAgICBsb2NrOiB0cnVlLAogICAgICB0ZXh0OiAn5q2j5Zyo5aSE55CG5Lit77yM6K+36ICQ5b+D562J5b6FLi4uJywKICAgICAgc3Bpbm5lcjogJ2VsLWljb24tbG9hZGluZycsCiAgICAgIGJhY2tncm91bmQ6ICdyZ2JhKDAsIDAsIDAsIDAuNyknCiAgICB9KTsgLy/lvIDlp4sKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgIHByb2Nlc3MudGFza1RvSW5xdShkYXRhLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICBsb2FkaW5nLmNsb3NlKCk7IC8vIOe7k+adnwogICAgICAgIGlmIChyZXNwb25zZS5kYXRhLnN0YXRlKSB7CiAgICAgICAgICBNZXNzYWdlLnN1Y2Nlc3MoewogICAgICAgICAgICBkdXJhdGlvbjogMTUwMCwKICAgICAgICAgICAgbWVzc2FnZTogcmVzcG9uc2UuZGF0YS5tZXNzYWdlLAogICAgICAgICAgICBvbkNsb3NlOiBmdW5jdGlvbiBvbkNsb3NlKCkgewogICAgICAgICAgICAgIHJlc29sdmUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/mtYHnqIvnu4jmraIKICBkb0VuZFByb2Nlc3M6IGZ1bmN0aW9uIGRvRW5kUHJvY2VzcyhfcmVmMzIsIGRhdGEpIHsKICAgIHZhciBjb21taXQgPSBfcmVmMzIuY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWYzMi5zdGF0ZTsKICAgIHZhciBsb2FkaW5nID0gTG9hZGluZy5zZXJ2aWNlKHsKICAgICAgZnVsbHNjcmVlbjogdHJ1ZSwKICAgICAgbG9jazogdHJ1ZSwKICAgICAgdGV4dDogJ+ato+WcqOWkhOeQhuS4re+8jOivt+iAkOW/g+etieW+hS4uLicsCiAgICAgIHNwaW5uZXI6ICdlbC1pY29uLWxvYWRpbmcnLAogICAgICBiYWNrZ3JvdW5kOiAncmdiYSgwLCAwLCAwLCAwLjcpJwogICAgfSk7IC8v5byA5aeLCiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICBwcm9jZXNzLmRvRW5kUHJvY2VzcyhkYXRhLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICBsb2FkaW5nLmNsb3NlKCk7IC8vIOe7k+adnwogICAgICAgIGlmIChyZXNwb25zZS5kYXRhLnN0YXRlKSB7CiAgICAgICAgICBNZXNzYWdlLnN1Y2Nlc3MoewogICAgICAgICAgICBkdXJhdGlvbjogMTUwMCwKICAgICAgICAgICAgbWVzc2FnZTogcmVzcG9uc2UuZGF0YS5tZXNzYWdlLAogICAgICAgICAgICBvbkNsb3NlOiBmdW5jdGlvbiBvbkNsb3NlKCkgewogICAgICAgICAgICAgIHJlc29sdmUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/mtYHovazorr7nva4KICB0YXNrVG9UcmFuczogZnVuY3Rpb24gdGFza1RvVHJhbnMoX3JlZjMzLCBkYXRhKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjMzLmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmMzMuc3RhdGU7CiAgICB2YXIgbG9hZGluZyA9IExvYWRpbmcuc2VydmljZSh7CiAgICAgIGZ1bGxzY3JlZW46IHRydWUsCiAgICAgIGxvY2s6IHRydWUsCiAgICAgIHRleHQ6ICfmraPlnKjlpITnkIbkuK3vvIzor7fogJDlv4PnrYnlvoUuLi4nLAogICAgICBzcGlubmVyOiAnZWwtaWNvbi1sb2FkaW5nJywKICAgICAgYmFja2dyb3VuZDogJ3JnYmEoMCwgMCwgMCwgMC43KScKICAgIH0pOyAvL+W8gOWniwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcHJvY2Vzcy50YXNrVG9UcmFucyhkYXRhLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICBsb2FkaW5nLmNsb3NlKCk7IC8vIOe7k+adnwogICAgICAgIGlmIChyZXNwb25zZS5kYXRhLnN0YXRlKSB7CiAgICAgICAgICBNZXNzYWdlLnN1Y2Nlc3MoewogICAgICAgICAgICBkdXJhdGlvbjogMTUwMCwKICAgICAgICAgICAgbWVzc2FnZTogcmVzcG9uc2UuZGF0YS5tZXNzYWdlLAogICAgICAgICAgICBvbkNsb3NlOiBmdW5jdGlvbiBvbkNsb3NlKCkgewogICAgICAgICAgICAgIHJlc29sdmUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/mma7pgJrku7vliqHliqDnrb4KICB1c2VyVGFza1RvU2lnbjogZnVuY3Rpb24gdXNlclRhc2tUb1NpZ24oX3JlZjM0LCBkYXRhKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjM0LmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmMzQuc3RhdGU7CiAgICB2YXIgbG9hZGluZyA9IExvYWRpbmcuc2VydmljZSh7CiAgICAgIGZ1bGxzY3JlZW46IHRydWUsCiAgICAgIGxvY2s6IHRydWUsCiAgICAgIHRleHQ6ICfmraPlnKjlpITnkIbkuK3vvIzor7fogJDlv4PnrYnlvoUuLi4nLAogICAgICBzcGlubmVyOiAnZWwtaWNvbi1sb2FkaW5nJywKICAgICAgYmFja2dyb3VuZDogJ3JnYmEoMCwgMCwgMCwgMC43KScKICAgIH0pOyAvL+W8gOWniwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcHJvY2Vzcy51c2VyVGFza1RvU2lnbihkYXRhLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICBsb2FkaW5nLmNsb3NlKCk7IC8vIOe7k+adnwogICAgICAgIGlmIChyZXNwb25zZS5kYXRhLnN0YXRlKSB7CiAgICAgICAgICBNZXNzYWdlLnN1Y2Nlc3MoewogICAgICAgICAgICBkdXJhdGlvbjogMTUwMCwKICAgICAgICAgICAgbWVzc2FnZTogcmVzcG9uc2UuZGF0YS5tZXNzYWdlLAogICAgICAgICAgICBvbkNsb3NlOiBmdW5jdGlvbiBvbkNsb3NlKCkgewogICAgICAgICAgICAgIHJlc29sdmUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/mtYHnqIvlm74KICBnZXRCcG1JbWFnZTogZnVuY3Rpb24gZ2V0QnBtSW1hZ2UoX3JlZjM1LCBkYXRhKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjM1LmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmMzUuc3RhdGU7CiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICBwcm9jZXNzLmluc3RhbmNlRmxvd0ltYWdlKGRhdGEsIGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIHZhciBkZWZJZCA9IHJlc3BvbnNlLmRhdGEuaW5zdGFuY2VJZCA/ICcnIDogcmVzcG9uc2UuZGF0YS5kZWZJZDsKICAgICAgICBwcm9jZXNzLmdldEJwbUltYWdlKCcnLCByZXNwb25zZS5kYXRhLmluc3RhbmNlSWQsIGRlZklkLCBmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgICB2YXIgZGF0YSA9IHsKICAgICAgICAgICAgInJvd3MiOiByZXNwb25zZS5kYXRhLAogICAgICAgICAgICAiaW1nIjogcmVzLmRhdGEKICAgICAgICAgIH07CiAgICAgICAgICByZXNvbHZlKGRhdGEpOwogICAgICAgIH0pOwogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/lvoHor6Lorr7nva4KICB0YXNrVG9JbnF1UmVwbHk6IGZ1bmN0aW9uIHRhc2tUb0lucXVSZXBseShfcmVmMzYsIGRhdGEpIHsKICAgIHZhciBjb21taXQgPSBfcmVmMzYuY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWYzNi5zdGF0ZTsKICAgIHZhciBsb2FkaW5nID0gTG9hZGluZy5zZXJ2aWNlKHsKICAgICAgZnVsbHNjcmVlbjogdHJ1ZSwKICAgICAgbG9jazogdHJ1ZSwKICAgICAgdGV4dDogJ+ato+WcqOWkhOeQhuS4re+8jOivt+iAkOW/g+etieW+hS4uLicsCiAgICAgIHNwaW5uZXI6ICdlbC1pY29uLWxvYWRpbmcnLAogICAgICBiYWNrZ3JvdW5kOiAncmdiYSgwLCAwLCAwLCAwLjcpJwogICAgfSk7IC8v5byA5aeLCiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICBwcm9jZXNzLnRhc2tUb0lucXVSZXBseShkYXRhLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICBsb2FkaW5nLmNsb3NlKCk7IC8vIOe7k+adnwogICAgICAgIGlmIChyZXNwb25zZS5kYXRhLnN0YXRlKSB7CiAgICAgICAgICBNZXNzYWdlLnN1Y2Nlc3MoewogICAgICAgICAgICBkdXJhdGlvbjogMTUwMCwKICAgICAgICAgICAgbWVzc2FnZTogcmVzcG9uc2UuZGF0YS5tZXNzYWdlLAogICAgICAgICAgICBvbkNsb3NlOiBmdW5jdGlvbiBvbkNsb3NlKCkgewogICAgICAgICAgICAgIHJlc29sdmUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/mma7pgJrnlKjmiLfoioLngrnliqDnrb7lj43ppogKICB1c2VyQWRkU2lnbjogZnVuY3Rpb24gdXNlckFkZFNpZ24oX3JlZjM3LCBkYXRhKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjM3LmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmMzcuc3RhdGU7CiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICBwcm9jZXNzLnVzZXJBZGRTaWduKGRhdGEsIGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIGlmIChyZXNwb25zZS5kYXRhLnN0YXRlKSB7CiAgICAgICAgICBNZXNzYWdlLnN1Y2Nlc3MoewogICAgICAgICAgICBkdXJhdGlvbjogMTUwMCwKICAgICAgICAgICAgbWVzc2FnZTogcmVzcG9uc2UuZGF0YS5tZXNzYWdlLAogICAgICAgICAgICBvbkNsb3NlOiBmdW5jdGlvbiBvbkNsb3NlKCkgewogICAgICAgICAgICAgIHJlc29sdmUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/msp/pgJrorr7nva4KICBjb21tdW5pY2F0ZTogZnVuY3Rpb24gY29tbXVuaWNhdGUoX3JlZjM4LCBkYXRhKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjM4LmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmMzguc3RhdGU7CiAgICB2YXIgbG9hZGluZyA9IExvYWRpbmcuc2VydmljZSh7CiAgICAgIGZ1bGxzY3JlZW46IHRydWUsCiAgICAgIGxvY2s6IHRydWUsCiAgICAgIHRleHQ6ICfmraPlnKjlpITnkIbkuK3vvIzor7fogJDlv4PnrYnlvoUuLi4nLAogICAgICBzcGlubmVyOiAnZWwtaWNvbi1sb2FkaW5nJywKICAgICAgYmFja2dyb3VuZDogJ3JnYmEoMCwgMCwgMCwgMC43KScKICAgIH0pOyAvL+W8gOWniwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcHJvY2Vzcy5jb21tdW5pY2F0ZShkYXRhLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICBsb2FkaW5nLmNsb3NlKCk7IC8vIOe7k+adnwogICAgICAgIGlmIChyZXNwb25zZS5kYXRhLnN0YXRlKSB7CiAgICAgICAgICBNZXNzYWdlLnN1Y2Nlc3MoewogICAgICAgICAgICBkdXJhdGlvbjogMTUwMCwKICAgICAgICAgICAgbWVzc2FnZTogcmVzcG9uc2UuZGF0YS5tZXNzYWdlLAogICAgICAgICAgICBvbkNsb3NlOiBmdW5jdGlvbiBvbkNsb3NlKCkgewogICAgICAgICAgICAgIHJlc29sdmUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/msp/pgJrlj43ppogKICBkb05leHRjb21tdTogZnVuY3Rpb24gZG9OZXh0Y29tbXUoX3JlZjM5LCBkYXRhKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjM5LmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmMzkuc3RhdGU7CiAgICB2YXIgbG9hZGluZyA9IExvYWRpbmcuc2VydmljZSh7CiAgICAgIGZ1bGxzY3JlZW46IHRydWUsCiAgICAgIGxvY2s6IHRydWUsCiAgICAgIHRleHQ6ICfmraPlnKjlpITnkIbkuK3vvIzor7fogJDlv4PnrYnlvoUuLi4nLAogICAgICBzcGlubmVyOiAnZWwtaWNvbi1sb2FkaW5nJywKICAgICAgYmFja2dyb3VuZDogJ3JnYmEoMCwgMCwgMCwgMC43KScKICAgIH0pOyAvL+W8gOWniwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcHJvY2Vzcy5kb05leHRjb21tdShkYXRhLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICBsb2FkaW5nLmNsb3NlKCk7IC8vIOe7k+adnwogICAgICAgIGlmIChyZXNwb25zZS5kYXRhLnN0YXRlKSB7CiAgICAgICAgICBNZXNzYWdlLnN1Y2Nlc3MoewogICAgICAgICAgICBkdXJhdGlvbjogMTUwMCwKICAgICAgICAgICAgbWVzc2FnZTogcmVzcG9uc2UuZGF0YS5tZXNzYWdlLAogICAgICAgICAgICBvbkNsb3NlOiBmdW5jdGlvbiBvbkNsb3NlKCkgewogICAgICAgICAgICAgIHJlc29sdmUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/kvJrnrb7ku7vliqHliqDnrb4KICB0YXNrU2lnblVzZXJzOiBmdW5jdGlvbiB0YXNrU2lnblVzZXJzKF9yZWY0MCwgZGF0YSkgewogICAgdmFyIGNvbW1pdCA9IF9yZWY0MC5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjQwLnN0YXRlOwogICAgdmFyIGxvYWRpbmcgPSBMb2FkaW5nLnNlcnZpY2UoewogICAgICBmdWxsc2NyZWVuOiB0cnVlLAogICAgICBsb2NrOiB0cnVlLAogICAgICB0ZXh0OiAn5q2j5Zyo5aSE55CG5Lit77yM6K+36ICQ5b+D562J5b6FLi4uJywKICAgICAgc3Bpbm5lcjogJ2VsLWljb24tbG9hZGluZycsCiAgICAgIGJhY2tncm91bmQ6ICdyZ2JhKDAsIDAsIDAsIDAuNyknCiAgICB9KTsgLy/lvIDlp4sKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgIHByb2Nlc3MudGFza1NpZ25Vc2VycyhkYXRhLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICBsb2FkaW5nLmNsb3NlKCk7IC8vIOe7k+adnwogICAgICAgIGlmIChyZXNwb25zZS5kYXRhLnN0YXRlKSB7CiAgICAgICAgICBNZXNzYWdlLnN1Y2Nlc3MoewogICAgICAgICAgICBkdXJhdGlvbjogMTUwMCwKICAgICAgICAgICAgbWVzc2FnZTogcmVzcG9uc2UuZGF0YS5tZXNzYWdlLAogICAgICAgICAgICBvbkNsb3NlOiBmdW5jdGlvbiBvbkNsb3NlKCkgewogICAgICAgICAgICAgIHJlc29sdmUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/kvKDpmIXlm57lpI0KICBkb05leHRDb3B5dG86IGZ1bmN0aW9uIGRvTmV4dENvcHl0byhfcmVmNDEsIGRhdGEpIHsKICAgIHZhciBjb21taXQgPSBfcmVmNDEuY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWY0MS5zdGF0ZTsKICAgIHZhciBsb2FkaW5nID0gTG9hZGluZy5zZXJ2aWNlKHsKICAgICAgZnVsbHNjcmVlbjogdHJ1ZSwKICAgICAgbG9jazogdHJ1ZSwKICAgICAgdGV4dDogJ+ato+WcqOWkhOeQhuS4re+8jOivt+iAkOW/g+etieW+hS4uLicsCiAgICAgIHNwaW5uZXI6ICdlbC1pY29uLWxvYWRpbmcnLAogICAgICBiYWNrZ3JvdW5kOiAncmdiYSgwLCAwLCAwLCAwLjcpJwogICAgfSk7IC8v5byA5aeLCiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICBwcm9jZXNzLmRvTmV4dENvcHl0byhkYXRhLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICBsb2FkaW5nLmNsb3NlKCk7IC8vIOe7k+adnwogICAgICAgIGlmIChyZXNwb25zZS5kYXRhLnN0YXRlKSB7CiAgICAgICAgICBNZXNzYWdlLnN1Y2Nlc3MoewogICAgICAgICAgICBkdXJhdGlvbjogMTUwMCwKICAgICAgICAgICAgbWVzc2FnZTogcmVzcG9uc2UuZGF0YS5tZXNzYWdlLAogICAgICAgICAgICBvbkNsb3NlOiBmdW5jdGlvbiBvbkNsb3NlKCkgewogICAgICAgICAgICAgIHJlc29sdmUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/ojrflj5bku7vliqHmmK/lkKbog73plIHlrpoKICBjYW5Mb2NrOiBmdW5jdGlvbiBjYW5Mb2NrKF9yZWY0MiwgaWQpIHsKICAgIHZhciBjb21taXQgPSBfcmVmNDIuY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWY0Mi5zdGF0ZTsKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgIHByb2Nlc3MuY2FuTG9jayhpZCwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgcmVzb2x2ZShyZXNwb25zZS5kYXRhKTsKICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8v6I635Y+W5Lu75Yqh6ZSB5a6a54q25oCBCiAgbG9ja1VubG9jazogZnVuY3Rpb24gbG9ja1VubG9jayhfcmVmNDMsIGlkKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjQzLmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmNDMuc3RhdGU7CiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICBwcm9jZXNzLmxvY2tVbmxvY2soaWQsIGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIGlmIChyZXNwb25zZS5kYXRhID09IDEpIHsKICAgICAgICAgIE1lc3NhZ2Uuc3VjY2Vzcyh7CiAgICAgICAgICAgIGR1cmF0aW9uOiAxNTAwLAogICAgICAgICAgICBtZXNzYWdlOiAi5bey562+5pS2IiwKICAgICAgICAgICAgb25DbG9zZTogZnVuY3Rpb24gb25DbG9zZSgpIHsKICAgICAgICAgICAgICByZXNvbHZlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2UuZGF0YSA9PSAzKSB7CiAgICAgICAgICBNZXNzYWdlLnN1Y2Nlc3MoewogICAgICAgICAgICBkdXJhdGlvbjogMTUwMCwKICAgICAgICAgICAgbWVzc2FnZTogIuW3suWPlua2iOetvuaUtiIsCiAgICAgICAgICAgIG9uQ2xvc2U6IGZ1bmN0aW9uIG9uQ2xvc2UoKSB7CiAgICAgICAgICAgICAgcmVzb2x2ZSgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSk7CiAgfSwKICAvL+WkhOeQhuS7u+WKoQogIGNvbXBsZXRlOiBmdW5jdGlvbiBjb21wbGV0ZShfcmVmNDQsIGRhdGEpIHsKICAgIHZhciBjb21taXQgPSBfcmVmNDQuY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWY0NC5zdGF0ZTsKICAgIHZhciBsb2FkaW5nID0gTG9hZGluZy5zZXJ2aWNlKHsKICAgICAgZnVsbHNjcmVlbjogdHJ1ZSwKICAgICAgbG9jazogdHJ1ZSwKICAgICAgdGV4dDogJ+S7u+WKoeWkhOeQhuS4re+8jOivt+iAkOW/g+etieW+hS4uLicsCiAgICAgIHNwaW5uZXI6ICdlbC1pY29uLWxvYWRpbmcnLAogICAgICBiYWNrZ3JvdW5kOiAncmdiYSgwLCAwLCAwLCAwLjcpJwogICAgfSk7IC8v5byA5aeLCiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICBwcm9jZXNzLmNvbXBsZXRlKGRhdGEsIGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIGxvYWRpbmcuY2xvc2UoKTsgLy8g57uT5p2fCiAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuc3RhdGUpIHsKICAgICAgICAgIE1lc3NhZ2Uuc3VjY2Vzcyh7CiAgICAgICAgICAgIGR1cmF0aW9uOiAxNTAwLAogICAgICAgICAgICBtZXNzYWdlOiByZXNwb25zZS5kYXRhLm1lc3NhZ2UsCiAgICAgICAgICAgIG9uQ2xvc2U6IGZ1bmN0aW9uIG9uQ2xvc2UoKSB7CiAgICAgICAgICAgICAgcmVzb2x2ZSgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSk7CiAgfSwKICAvL+WQr+WKqOa1geeoiwogIHN0YXJ0OiBmdW5jdGlvbiBzdGFydChfcmVmNDUsIGRhdGEpIHsKICAgIHZhciBjb21taXQgPSBfcmVmNDUuY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWY0NS5zdGF0ZTsKICAgIHZhciBsb2FkaW5nID0gTG9hZGluZy5zZXJ2aWNlKHsKICAgICAgZnVsbHNjcmVlbjogdHJ1ZSwKICAgICAgbG9jazogdHJ1ZSwKICAgICAgdGV4dDogJ+a1geeoi+WQr+WKqOS4re+8jOivt+iAkOW/g+etieW+hS4uLicsCiAgICAgIHNwaW5uZXI6ICdlbC1pY29uLWxvYWRpbmcnLAogICAgICBiYWNrZ3JvdW5kOiAncmdiYSgwLCAwLCAwLCAwLjcpJwogICAgfSk7IC8v5byA5aeLCiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICBwcm9jZXNzLnN0YXJ0KGRhdGEsIGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIGxvYWRpbmcuY2xvc2UoKTsgLy8g57uT5p2fCiAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuc3RhdGUpIHsKICAgICAgICAgIE1lc3NhZ2Uuc3VjY2Vzcyh7CiAgICAgICAgICAgIGR1cmF0aW9uOiAxNTAwLAogICAgICAgICAgICBtZXNzYWdlOiByZXNwb25zZS5kYXRhLm1lc3NhZ2UsCiAgICAgICAgICAgIG9uQ2xvc2U6IGZ1bmN0aW9uIG9uQ2xvc2UoKSB7CiAgICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZS5kYXRhKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJlamVjdCgpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8v5L+d5a2Y6I2J56i/CiAgc2F2ZURyYWZ0OiBmdW5jdGlvbiBzYXZlRHJhZnQoX3JlZjQ2LCBkYXRhKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjQ2LmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmNDYuc3RhdGU7CiAgICB2YXIgbG9hZGluZyA9IExvYWRpbmcuc2VydmljZSh7CiAgICAgIGZ1bGxzY3JlZW46IHRydWUsCiAgICAgIGxvY2s6IHRydWUsCiAgICAgIHRleHQ6ICfkv53lrZjojYnnqL/kuK3vvIzor7fogJDlv4PnrYnlvoUuLi4nLAogICAgICBzcGlubmVyOiAnZWwtaWNvbi1sb2FkaW5nJywKICAgICAgYmFja2dyb3VuZDogJ3JnYmEoMCwgMCwgMCwgMC43KScKICAgIH0pOyAvL+W8gOWniwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcHJvY2Vzcy5zYXZlRHJhZnQoZGF0YSwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgbG9hZGluZy5jbG9zZSgpOyAvLyDnu5PmnZ8KICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5zdGF0ZSkgewogICAgICAgICAgTWVzc2FnZS5zdWNjZXNzKHsKICAgICAgICAgICAgZHVyYXRpb246IDE1MDAsCiAgICAgICAgICAgIG1lc3NhZ2U6IHJlc3BvbnNlLmRhdGEubWVzc2FnZSwKICAgICAgICAgICAgb25DbG9zZTogZnVuY3Rpb24gb25DbG9zZSgpIHsKICAgICAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlLmRhdGEpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSk7CiAgfSwKICAvL+WuoeaJuemhtemdouS/neWtmAogIHNhdmVUYXNrRHJhZnQ6IGZ1bmN0aW9uIHNhdmVUYXNrRHJhZnQoX3JlZjQ3LCBkYXRhKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjQ3LmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmNDcuc3RhdGU7CiAgICB2YXIgbG9hZGluZyA9IExvYWRpbmcuc2VydmljZSh7CiAgICAgIGZ1bGxzY3JlZW46IHRydWUsCiAgICAgIGxvY2s6IHRydWUsCiAgICAgIHRleHQ6ICfkv53lrZjojYnnqL/kuK3vvIzor7fogJDlv4PnrYnlvoUuLi4nLAogICAgICBzcGlubmVyOiAnZWwtaWNvbi1sb2FkaW5nJywKICAgICAgYmFja2dyb3VuZDogJ3JnYmEoMCwgMCwgMCwgMC43KScKICAgIH0pOyAvL+W8gOWniwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcHJvY2Vzcy5zYXZlVGFza0RyYWZ0KGRhdGEsIGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIGxvYWRpbmcuY2xvc2UoKTsgLy8g57uT5p2fCiAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuc3RhdGUpIHsKICAgICAgICAgIE1lc3NhZ2Uuc3VjY2Vzcyh7CiAgICAgICAgICAgIGR1cmF0aW9uOiAxNTAwLAogICAgICAgICAgICBtZXNzYWdlOiByZXNwb25zZS5kYXRhLm1lc3NhZ2UsCiAgICAgICAgICAgIG9uQ2xvc2U6IGZ1bmN0aW9uIG9uQ2xvc2UoKSB7CiAgICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZS5kYXRhKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/moLnmja7mtYHnqIvlrp7kvotJROiOt+WPluebuOWFs+S/oeaBrwogIGdldFJlbGF0ZWRJbmZvcm1hdGlvbkJ5SWQ6IGZ1bmN0aW9uIGdldFJlbGF0ZWRJbmZvcm1hdGlvbkJ5SWQoX3JlZjQ4LCBpZCkgewogICAgdmFyIGNvbW1pdCA9IF9yZWY0OC5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjQ4LnN0YXRlOwogICAgcHJvY2Vzcy5nZXRSZWxhdGVkSW5mb3JtYXRpb25CeUlkKGlkLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgY29tbWl0KCJzZXRSZWxhdGVkSW5mb3JtYXRpb24iLCByZXNwb25zZS5kYXRhKTsKICAgIH0pOwogIH0sCiAgLy/mt7vliqDpmIXor7vorrDlvZUKICBhZGRSZWFkUmVjb3JkOiBmdW5jdGlvbiBhZGRSZWFkUmVjb3JkKF9yZWY0OSwgaWQpIHsKICAgIHZhciBjb21taXQgPSBfcmVmNDkuY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWY0OS5zdGF0ZTsKICAgIHByb2Nlc3MuYWRkUmVhZFJlY29yZChpZCwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7fSk7CiAgfSwKICAvL+agueaNrua1geeoi+WunuS+i0lE6I635Y+W6ZiF6K+76K6w5b2VCiAgZ2V0QnlSZWNvcmRJbnN0SWQ6IGZ1bmN0aW9uIGdldEJ5UmVjb3JkSW5zdElkKF9yZWY1MCwgcGFnaW5hdGlvbikgewogICAgdmFyIGNvbW1pdCA9IF9yZWY1MC5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjUwLnN0YXRlOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcHJvY2Vzcy5nZXRCeVJlY29yZEluc3RJZChwYWdpbmF0aW9uLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5yb3dzWzBdICE9IG51bGwpIHsKICAgICAgICAgIGNvbW1pdCgic2V0Um93cyIsIHJlc3BvbnNlLmRhdGEucm93cyk7IC8v6ZiF6K+76K6w5pWw5o2uCiAgICAgICAgICBjb21taXQoInNldFRvdGFsIiwgcmVzcG9uc2UuZGF0YS50b3RhbCk7IC8v5oC75pWw5o2u5p2h5pWwCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbW1pdCgic2V0Um93cyIsIFtdKTsgLy/pmIXor7vorrDmlbDmja4KICAgICAgICAgIGNvbW1pdCgic2V0VG90YWwiLCAwKTsgLy/mgLvmlbDmja7mnaHmlbAKICAgICAgICB9CiAgICAgICAgdmFyIHBhZ2VCZWFuID0gewogICAgICAgICAgInBhZ2UiOiByZXNwb25zZS5kYXRhLnBhZ2UsCiAgICAgICAgICAicGFnZVNpemUiOiByZXNwb25zZS5kYXRhLnBhZ2VTaXplLAogICAgICAgICAgInNob3dUb3RhbCI6ICJ0cnVlIgogICAgICAgIH07IC8v5o6l5Y+j5pa55rOV6L+U5Zue55qEcGFnZUJlYW4KICAgICAgICBjb21taXQoInNldFBhZ2luYXRpb24iLCBwYWdlQmVhbik7IC8v5pi+56S656ys5Yeg6aG177yM5q+P6aG15pi+56S65aSa5bCR5p2hCiAgICAgICAgcmVzb2x2ZSgpOwogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/liKDpmaTojYnnqL8KICByZW1vdmVEcmFmdEJ5SWQ6IGZ1bmN0aW9uIHJlbW92ZURyYWZ0QnlJZChfcmVmNTEsIGlkKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjUxLmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmNTEuc3RhdGU7CiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICBwcm9jZXNzLnJlbW92ZURyYWZ0QnlJZChpZCwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuc3RhdGUpIHsKICAgICAgICAgIE1lc3NhZ2Uuc3VjY2Vzcyh7CiAgICAgICAgICAgIGR1cmF0aW9uOiAxNTAwLAogICAgICAgICAgICBtZXNzYWdlOiByZXNwb25zZS5kYXRhLm1lc3NhZ2UsCiAgICAgICAgICAgIG9uQ2xvc2U6IGZ1bmN0aW9uIG9uQ2xvc2UoKSB7CiAgICAgICAgICAgICAgcmVzb2x2ZSgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSk7CiAgfSwKICAvL+mAu+i+keWIoOmZpOa1geeoi+WunuS+iwogIGRvRW5kUHJvY2Vzc0J5SWQ6IGZ1bmN0aW9uIGRvRW5kUHJvY2Vzc0J5SWQoX3JlZjUyLCBpZCkgewogICAgdmFyIGNvbW1pdCA9IF9yZWY1Mi5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjUyLnN0YXRlOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcHJvY2Vzcy5kb0VuZFByb2Nlc3NCeUlkKGlkLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5zdGF0ZSkgewogICAgICAgICAgTWVzc2FnZS5zdWNjZXNzKHsKICAgICAgICAgICAgZHVyYXRpb246IDE1MDAsCiAgICAgICAgICAgIG1lc3NhZ2U6ICLnu4jmraLmiJDlip8iLAogICAgICAgICAgICBvbkNsb3NlOiBmdW5jdGlvbiBvbkNsb3NlKCkgewogICAgICAgICAgICAgIHJlc29sdmUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/moLnmja7mtYHnqIvlrp7kvotJROe7iOatoua1geeoiwogIHJlc3RvcmU6IGZ1bmN0aW9uIHJlc3RvcmUoX3JlZjUzLCBpZCkgewogICAgdmFyIGNvbW1pdCA9IF9yZWY1My5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjUzLnN0YXRlOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcHJvY2Vzcy5yZXN0b3JlKGlkLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5zdGF0ZSkgewogICAgICAgICAgTWVzc2FnZS5zdWNjZXNzKHsKICAgICAgICAgICAgZHVyYXRpb246IDE1MDAsCiAgICAgICAgICAgIG1lc3NhZ2U6ICLliKDpmaTmiJDlip8iLAogICAgICAgICAgICBvbkNsb3NlOiBmdW5jdGlvbiBvbkNsb3NlKCkgewogICAgICAgICAgICAgIHJlc29sdmUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/nn6XkvJrku7vliqHlvoXlip7ovazlt7Llip4KICBub3RpY2VUdXJuRG9kZTogZnVuY3Rpb24gbm90aWNlVHVybkRvZGUoX3JlZjU0LCBpZCkgewogICAgdmFyIGNvbW1pdCA9IF9yZWY1NC5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjU0LnN0YXRlOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcHJvY2Vzcy5ub3RpY2VUdXJuRG9kZShpZCwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgcmVzb2x2ZSgpOwogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/moLnmja7ku7vliqFpZOiOt+WPluacgOaWsOeahOW7tuacn+S/oeaBrwogIGJwbVRhc2tEdWVUaW1lOiBmdW5jdGlvbiBicG1UYXNrRHVlVGltZShfcmVmNTUsIGlkKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjU1LmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmNTUuc3RhdGU7CiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICBwcm9jZXNzLmJwbVRhc2tEdWVUaW1lKGlkLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICBjb21taXQoInNldER1ZVRpbWUiLCByZXNwb25zZS5kYXRhKTsKICAgICAgICByZXNvbHZlKHJlc3BvbnNlLmRhdGEpOwogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/moLnmja5pZOiOt+WPluWIsOacn+aXtumXtAogIGdldEV4cGlyYXRpb25EYXRlOiBmdW5jdGlvbiBnZXRFeHBpcmF0aW9uRGF0ZShfcmVmNTYsIGRhdGEpIHsKICAgIHZhciBjb21taXQgPSBfcmVmNTYuY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWY1Ni5zdGF0ZTsKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgIHByb2Nlc3MuZ2V0RXhwaXJhdGlvbkRhdGUoZGF0YSwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgcmVzb2x2ZShyZXNwb25zZS5kYXRhKTsKICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8v5re75Yqg5Lu75Yqh5pyf6ZmQ57uf6K6h5L+h5oGvCiAgZHVlVGltZVNhdmU6IGZ1bmN0aW9uIGR1ZVRpbWVTYXZlKF9yZWY1NywgZGF0YSkgewogICAgdmFyIGNvbW1pdCA9IF9yZWY1Ny5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjU3LnN0YXRlOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcHJvY2Vzcy5kdWVUaW1lU2F2ZShkYXRhLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5zdGF0ZSkgewogICAgICAgICAgTWVzc2FnZS5zdWNjZXNzKHsKICAgICAgICAgICAgZHVyYXRpb246IDE1MDAsCiAgICAgICAgICAgIG1lc3NhZ2U6IHJlc3BvbnNlLmRhdGEubWVzc2FnZSwKICAgICAgICAgICAgb25DbG9zZTogZnVuY3Rpb24gb25DbG9zZSgpIHsKICAgICAgICAgICAgICByZXNvbHZlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8v6I635Y+W5ZCO57ut5Y+v6Lez6L2s6IqC54K5CiAgZ2V0QWZ0ZXJKdW1wTm9kZXM6IGZ1bmN0aW9uIGdldEFmdGVySnVtcE5vZGVzKF9yZWY1OCwgZGF0YSkgewogICAgdmFyIGNvbW1pdCA9IF9yZWY1OC5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjU4LnN0YXRlOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcHJvY2Vzcy5nZXRBZnRlckp1bXBOb2RlcyhkYXRhLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICByZXNvbHZlKHJlc3BvbnNlLmRhdGEpOwogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/kv53lrZjooajljZXmlbDmja4KICBzYXZlRm9ybURhdGE6IGZ1bmN0aW9uIHNhdmVGb3JtRGF0YShfcmVmNTksIGRhdGEpIHsKICAgIHZhciBjb21taXQgPSBfcmVmNTkuY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWY1OS5zdGF0ZTsKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgIHByb2Nlc3Muc2F2ZUZvcm1EYXRhKGRhdGEsIGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIHJlc29sdmUocmVzcG9uc2UuZGF0YSk7CiAgICAgIH0pOwogICAgfSk7CiAgfSwKICAvL+agueaNrmlk6I635Y+W5Yiw5pyf5pe26Ze0CiAgZ2V0Q3VyTm9kZVByb3BlcnRpZXM6IGZ1bmN0aW9uIGdldEN1ck5vZGVQcm9wZXJ0aWVzKF9yZWY2MCwgZGF0YSkgewogICAgdmFyIGNvbW1pdCA9IF9yZWY2MC5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjYwLnN0YXRlOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcHJvY2Vzcy5nZXRDdXJOb2RlUHJvcGVydGllcyhkYXRhLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICByZXNvbHZlKHJlc3BvbnNlLmRhdGEpOwogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/ojrflj5bnu5/orqHlm77ooagKICBnZXRFY2hhcnREYXRhOiBmdW5jdGlvbiBnZXRFY2hhcnREYXRhKF9yZWY2MSwgcGFnaW5hdGlvbikgewogICAgdmFyIGNvbW1pdCA9IF9yZWY2MS5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjYxLnN0YXRlOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcHJvY2Vzcy5nZXRFY2hhcnREYXRhKHBhZ2luYXRpb24sIGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIHZhciBkYXRhID0gewogICAgICAgICAgb3B0aW9uczogW10KICAgICAgICB9OwogICAgICAgIGlmIChyZXNwb25zZS5kYXRhLnN0YXRlKSB7CiAgICAgICAgICBkYXRhLm9wdGlvbnMgPSByZXNwb25zZS5kYXRhLnZhbHVlOwogICAgICAgIH0KICAgICAgICByZXNvbHZlKGRhdGEpOwogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/ojrflj5blrqHmibnmhI/op4EKICBnZXROb2Rlb3BpbmlvbnM6IGZ1bmN0aW9uIGdldE5vZGVvcGluaW9ucyhfcmVmNjIsIHBhZ2luYXRpb24pIHsKICAgIHZhciBjb21taXQgPSBfcmVmNjIuY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWY2Mi5zdGF0ZTsKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgIHByb2Nlc3MuZ2V0Tm9kZW9waW5pb25zKHBhZ2luYXRpb24sIGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIHJlc29sdmUocmVzcG9uc2UuZGF0YSk7CiAgICAgIH0pOwogICAgfSk7CiAgfSwKICAvL+mAmui/h2Jv5pWw5o2u5Y+R6LW35rWB56iLCiAgc3RhcnRGb3JtOiBmdW5jdGlvbiBzdGFydEZvcm0oX3JlZjYzLCBwYWdpbmF0aW9uKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjYzLmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmNjMuc3RhdGU7CiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICBwcm9jZXNzLnN0YXJ0Rm9ybShwYWdpbmF0aW9uLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICByZXNvbHZlKHJlc3BvbnNlLmRhdGEpOwogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/ojrflj5blrqHntKfmgKXnirbmgIHphY3nva4KICBnZXRVcmdlbnRTdGF0ZUNvbmY6IGZ1bmN0aW9uIGdldFVyZ2VudFN0YXRlQ29uZihfcmVmNjQsIHBhcmFtKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjY0LmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmNjQuc3RhdGU7CiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICBwcm9jZXNzLmdldFVyZ2VudFN0YXRlQ29uZihwYXJhbSwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgcmVzb2x2ZShyZXNwb25zZS5kYXRhKTsKICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8v5qC55o2u5rWB56iL5a6e5L6LSUTjgIHlgqzlip7kurpJROiOt+WPluWCrOWKnuiusOW9lQogIGdldFVyZ3JudEJ5SWQ6IGZ1bmN0aW9uIGdldFVyZ3JudEJ5SWQoX3JlZjY1LCBwYXJhbSkgewogICAgdmFyIGNvbW1pdCA9IF9yZWY2NS5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjY1LnN0YXRlOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcHJvY2Vzcy5nZXRVcmdybnRCeUlkKHBhcmFtLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICBjb21taXQoInNldFJvd3MiLCByZXNwb25zZS5kYXRhLnJvd3MpOyAvL+WCrOWKnuaVsOaNrgogICAgICAgIGNvbW1pdCgic2V0VG90YWwiLCByZXNwb25zZS5kYXRhLnRvdGFsKTsgLy/mgLvmlbDmja7mnaHmlbAKICAgICAgICB2YXIgcGFnZUJlYW4gPSB7CiAgICAgICAgICAicGFnZSI6IHJlc3BvbnNlLmRhdGEucGFnZSwKICAgICAgICAgICJwYWdlU2l6ZSI6IHJlc3BvbnNlLmRhdGEucGFnZVNpemUsCiAgICAgICAgICAic2hvd1RvdGFsIjogInRydWUiCiAgICAgICAgfTsgLy/mjqXlj6Pmlrnms5Xov5Tlm57nmoRwYWdlQmVhbgogICAgICAgIGNvbW1pdCgic2V0UGFnaW5hdGlvbiIsIHBhZ2VCZWFuKTsgLy/mmL7npLrnrKzlh6DpobXvvIzmr4/pobXmmL7npLrlpJrlsJHmnaEKICAgICAgICByZXNvbHZlKHJlc3BvbnNlLmRhdGEucm93cyk7CiAgICAgIH0pOwogICAgfSk7CiAgfSwKICAvL+agueaNrua1geeoi+WunuS+i0lE6I635Y+W5b2T5YmN5Lu75Yqh6IqC54K55a6h5om55Lq6CiAgZ2V0RXhjdXRvck5hbWVCeUluc3RJZDogZnVuY3Rpb24gZ2V0RXhjdXRvck5hbWVCeUluc3RJZChfcmVmNjYsIGlkKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjY2LmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmNjYuc3RhdGU7CiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICBwcm9jZXNzLmdldEV4Y3V0b3JOYW1lQnlJbnN0SWQoaWQsIGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIHJlc29sdmUocmVzcG9uc2UuZGF0YSk7CiAgICAgIH0pOwogICAgfSk7CiAgfSwKICAvL+agueaNrua1geeoi+WumuS5iWlk6I635Y+W5rWB56iL5L+h5oGvCiAgZGVmR2V0OiBmdW5jdGlvbiBkZWZHZXQoX3JlZjY3LCBpZCkgewogICAgdmFyIGNvbW1pdCA9IF9yZWY2Ny5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjY3LnN0YXRlOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcHJvY2Vzcy5kZWZHZXQoaWQsIGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIHJlc29sdmUocmVzcG9uc2UuZGF0YSk7CiAgICAgIH0pOwogICAgfSk7CiAgfSwKICAvL+WPkemAgeS6uuW3peWCrOWKngogIHNlbmRCcG1UYXNrVXJnZW50OiBmdW5jdGlvbiBzZW5kQnBtVGFza1VyZ2VudChfcmVmNjgsIGRhdGEpIHsKICAgIHZhciBjb21taXQgPSBfcmVmNjguY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWY2OC5zdGF0ZTsKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgIHByb2Nlc3Muc2VuZEJwbVRhc2tVcmdlbnQoZGF0YSwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuc3RhdGUpIHsKICAgICAgICAgIE1lc3NhZ2Uuc3VjY2Vzcyh7CiAgICAgICAgICAgIGR1cmF0aW9uOiAxNTAwLAogICAgICAgICAgICBtZXNzYWdlOiByZXNwb25zZS5kYXRhLm1lc3NhZ2UsCiAgICAgICAgICAgIG9uQ2xvc2U6IGZ1bmN0aW9uIG9uQ2xvc2UoKSB7CiAgICAgICAgICAgICAgcmVzb2x2ZSgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSk7CiAgfSwKICAvL+WPluWbnui9rOWKnua1geeoiwogIHJldHJpZXZlQnBtVGFzazogZnVuY3Rpb24gcmV0cmlldmVCcG1UYXNrKF9yZWY2OSwgaWQpIHsKICAgIHZhciBjb21taXQgPSBfcmVmNjkuY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWY2OS5zdGF0ZTsKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgIHByb2Nlc3MucmV0cmlldmVCcG1UYXNrKGlkLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5zdGF0ZSkgewogICAgICAgICAgTWVzc2FnZS5zdWNjZXNzKHsKICAgICAgICAgICAgZHVyYXRpb246IDE1MDAsCiAgICAgICAgICAgIG1lc3NhZ2U6IHJlc3BvbnNlLmRhdGEubWVzc2FnZSwKICAgICAgICAgICAgb25DbG9zZTogZnVuY3Rpb24gb25DbG9zZSgpIHsKICAgICAgICAgICAgICByZXNvbHZlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8v6I635Y+W5bey5Yqe55qE5a6e5L6LCiAgZ2V0RG9uZUJ5SW5zdElkOiBmdW5jdGlvbiBnZXREb25lQnlJbnN0SWQoX3JlZjcwLCBpZCkgewogICAgdmFyIGNvbW1pdCA9IF9yZWY3MC5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjcwLnN0YXRlOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcHJvY2Vzcy5nZXREb25lQnlJbnN0SWQoaWQsIGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIHJlc29sdmUocmVzcG9uc2UpOwogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/mtYHovazorr7nva4KICB0YXNrVG9BcHByb3ZlTGluZTogZnVuY3Rpb24gdGFza1RvQXBwcm92ZUxpbmUoX3JlZjcxLCBkYXRhKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjcxLmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmNzEuc3RhdGU7CiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICBwcm9jZXNzLnRhc2tUb0FwcHJvdmVMaW5lKGRhdGEsIGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIGlmIChyZXNwb25zZS5kYXRhLnN0YXRlKSB7CiAgICAgICAgICBNZXNzYWdlLnN1Y2Nlc3MoewogICAgICAgICAgICBkdXJhdGlvbjogMTUwMCwKICAgICAgICAgICAgbWVzc2FnZTogcmVzcG9uc2UuZGF0YS5tZXNzYWdlLAogICAgICAgICAgICBvbkNsb3NlOiBmdW5jdGlvbiBvbkNsb3NlKCkgewogICAgICAgICAgICAgIHJlc29sdmUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwogIH0sCiAgdGFza1RvU2lnblNlcXVlbmNlOiBmdW5jdGlvbiB0YXNrVG9TaWduU2VxdWVuY2UoX3JlZjcyLCBkYXRhKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjcyLmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmNzIuc3RhdGU7CiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICBwcm9jZXNzLnRhc2tUb1NpZ25TZXF1ZW5jZShkYXRhLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5zdGF0ZSkgewogICAgICAgICAgTWVzc2FnZS5zdWNjZXNzKHsKICAgICAgICAgICAgZHVyYXRpb246IDE1MDAsCiAgICAgICAgICAgIG1lc3NhZ2U6IHJlc3BvbnNlLmRhdGEubWVzc2FnZSwKICAgICAgICAgICAgb25DbG9zZTogZnVuY3Rpb24gb25DbG9zZSgpIHsKICAgICAgICAgICAgICByZXNvbHZlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8vIOaPkOS6pOW5tuihjOetvue9suiuvue9rgogIHRhc2tUb1NpZ25MaW5lOiBmdW5jdGlvbiB0YXNrVG9TaWduTGluZShfcmVmNzMsIGRhdGEpIHsKICAgIHZhciBjb21taXQgPSBfcmVmNzMuY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWY3My5zdGF0ZTsKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgIHByb2Nlc3MudGFza1RvU2lnbkxpbmUoZGF0YSwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuc3RhdGUpIHsKICAgICAgICAgIE1lc3NhZ2Uuc3VjY2Vzcyh7CiAgICAgICAgICAgIGR1cmF0aW9uOiAxNTAwLAogICAgICAgICAgICBtZXNzYWdlOiByZXNwb25zZS5kYXRhLm1lc3NhZ2UsCiAgICAgICAgICAgIG9uQ2xvc2U6IGZ1bmN0aW9uIG9uQ2xvc2UoKSB7CiAgICAgICAgICAgICAgcmVzb2x2ZSgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSk7CiAgfSwKICAvL+aSpOWbnua1gei9rOS7u+WKoQogIHJldm9rZVRyYW5zOiBmdW5jdGlvbiByZXZva2VUcmFucyhfcmVmNzQsIGRhdGEpIHsKICAgIHZhciBjb21taXQgPSBfcmVmNzQuY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWY3NC5zdGF0ZTsKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgIHByb2Nlc3MucmV2b2tlVHJhbnMoZGF0YSwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuc3RhdGUpIHsKICAgICAgICAgIE1lc3NhZ2Uuc3VjY2Vzcyh7CiAgICAgICAgICAgIGR1cmF0aW9uOiAxNTAwLAogICAgICAgICAgICBtZXNzYWdlOiByZXNwb25zZS5kYXRhLm1lc3NhZ2UsCiAgICAgICAgICAgIG9uQ2xvc2U6IGZ1bmN0aW9uIG9uQ2xvc2UoKSB7CiAgICAgICAgICAgICAgcmVzb2x2ZSgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSk7CiAgfSwKICAvL+aSpOWbnuS7u+WKoSDnrb7nvbLmkqTlm54KICByZXZva2VDdXN0b21TaWduOiBmdW5jdGlvbiByZXZva2VDdXN0b21TaWduKF9yZWY3NSwgZGF0YSkgewogICAgdmFyIGNvbW1pdCA9IF9yZWY3NS5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjc1LnN0YXRlOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcHJvY2Vzcy5yZXZva2VDdXN0b21TaWduKGRhdGEsIGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIGlmIChyZXNwb25zZS5kYXRhLnN0YXRlKSB7CiAgICAgICAgICBNZXNzYWdlLnN1Y2Nlc3MoewogICAgICAgICAgICBkdXJhdGlvbjogMTUwMCwKICAgICAgICAgICAgbWVzc2FnZTogcmVzcG9uc2UuZGF0YS5tZXNzYWdlLAogICAgICAgICAgICBvbkNsb3NlOiBmdW5jdGlvbiBvbkNsb3NlKCkgewogICAgICAgICAgICAgIHJlc29sdmUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwogIH0sCiAgcmV2b2tlU2lnbkxpbmU6IGZ1bmN0aW9uIHJldm9rZVNpZ25MaW5lKF9yZWY3NiwgZGF0YSkgewogICAgdmFyIGNvbW1pdCA9IF9yZWY3Ni5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjc2LnN0YXRlOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcHJvY2Vzcy5yZXZva2VTaWduTGluZShkYXRhLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5zdGF0ZSkgewogICAgICAgICAgTWVzc2FnZS5zdWNjZXNzKHsKICAgICAgICAgICAgZHVyYXRpb246IDE1MDAsCiAgICAgICAgICAgIG1lc3NhZ2U6IHJlc3BvbnNlLmRhdGEubWVzc2FnZSwKICAgICAgICAgICAgb25DbG9zZTogZnVuY3Rpb24gb25DbG9zZSgpIHsKICAgICAgICAgICAgICByZXNvbHZlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9KTsKICB9LAogIGdldFNpZ25MaW5lc0luc3RJZE5vZGVJZDogZnVuY3Rpb24gZ2V0U2lnbkxpbmVzSW5zdElkTm9kZUlkKF9yZWY3NywgZGF0YSkgewogICAgdmFyIGNvbW1pdCA9IF9yZWY3Ny5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjc3LnN0YXRlOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcHJvY2Vzcy5nZXRTaWduTGluZXNJbnN0SWROb2RlSWQoZGF0YSwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEpIHsKICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UuZGF0YSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/moLnmja7kuLvplK5JROW+heWKnuiOt+WPluefpeS8muS7u+WKoeS/oeaBrwogIGdldEJwbVRhc2tOb3RpY2VCeUlkOiBmdW5jdGlvbiBnZXRCcG1UYXNrTm90aWNlQnlJZChfcmVmNzgsIGlkKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjc4LmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmNzguc3RhdGU7CiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICBwcm9jZXNzLmdldEJwbVRhc2tOb3RpY2VCeUlkKGlkLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICByZXNvbHZlKHJlc3BvbnNlLmRhdGEpOwogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/moLnmja7kuLvplK5JROiOt+WPluW3suWKnuefpeS8muS7u+WKoeS/oeaBrwogIGdldEJwbVRhc2tOb3RpY2VEb25lQnlJZDogZnVuY3Rpb24gZ2V0QnBtVGFza05vdGljZURvbmVCeUlkKF9yZWY3OSwgaWQpIHsKICAgIHZhciBjb21taXQgPSBfcmVmNzkuY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWY3OS5zdGF0ZTsKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgIHByb2Nlc3MuZ2V0QnBtVGFza05vdGljZURvbmVCeUlkKGlkLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICByZXNvbHZlKHJlc3BvbnNlLmRhdGEpOwogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/moLnmja7ku7vliqFJZOiOt+WPluWuoeaJueWOhuWPsuaVsOaNru+8iOWPquacieS4gOadoe+8iQogIGdldFRhc2tLZXlCeVRhc2tJZDogZnVuY3Rpb24gZ2V0VGFza0tleUJ5VGFza0lkKF9yZWY4MCwgaWQpIHsKICAgIHZhciBjb21taXQgPSBfcmVmODAuY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWY4MC5zdGF0ZTsKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgIHByb2Nlc3MuZ2V0VGFza0tleUJ5VGFza0lkKGlkLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICByZXNvbHZlKHJlc3BvbnNlLmRhdGEpOwogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/moLnmja7ku7vliqHoioLngrlJROWSjOa1geeoi+WunuS+i0lE6I635Y+W5a6h5om55Y6G5Y+y5pWw5o2u77yI5Y+q5pyJ5LiA5p2h77yJCiAgZ2V0VGFza0tleUJ5Tm9kZUlkOiBmdW5jdGlvbiBnZXRUYXNrS2V5QnlOb2RlSWQoX3JlZjgxLCBkYXRhKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjgxLmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmODEuc3RhdGU7CiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICBwcm9jZXNzLmdldFRhc2tLZXlCeU5vZGVJZChkYXRhLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICByZXNvbHZlKHJlc3BvbnNlLmRhdGEpOwogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/moLnmja7mtYHnqIvlrprkuYlJROiOt+WPluivpea1geeoi+eahOWFtuWug+W+heWKnu+8jOWmguaenOiOt+WPluS4jeWIsO+8jOWImei/lOWbnuWFtuWug+W+heWKnijov5Tlm57kuIDmnaEpCiAgZ2V0TmV4dFRhc2tCeURlZklkOiBmdW5jdGlvbiBnZXROZXh0VGFza0J5RGVmSWQoX3JlZjgyLCBkYXRhKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjgyLmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmODIuc3RhdGU7CiAgICB2YXIgbG9hZGluZyA9IExvYWRpbmcuc2VydmljZSh7CiAgICAgIGZ1bGxzY3JlZW46IHRydWUsCiAgICAgIGxvY2s6IHRydWUsCiAgICAgIHRleHQ6ICfmraPlnKjojrflj5bkuIvkuIDkuKrku7vliqEs6K+356iN562JLi4uJywKICAgICAgc3Bpbm5lcjogJ2VsLWljb24tbG9hZGluZycsCiAgICAgIGJhY2tncm91bmQ6ICdyZ2JhKDAsIDAsIDAsIDAuNyknCiAgICB9KTsgLy/lvIDlp4sKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgIHByb2Nlc3MuZ2V0TmV4dFRhc2tCeURlZklkKGRhdGEsIGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIGlmICghcmVzcG9uc2UuZGF0YSB8fCAhcmVzcG9uc2UuZGF0YS52YWx1ZSkgewogICAgICAgICAgbG9hZGluZy5jbG9zZSgpOwogICAgICAgICAgcmVzb2x2ZShyZXNwb25zZS5kYXRhKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIGxvYWRpbmcuY2xvc2UoKTsKICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZS5kYXRhKTsKICAgICAgICAgIH0sIDIwMDApOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9KTsKICB9LAogIGluaXRTaWduYXR1cmU6IGZ1bmN0aW9uIGluaXRTaWduYXR1cmUoX3JlZjgzLCBkYXRhKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjgzLmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmODMuc3RhdGU7CiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICBjb21taXQoImluaXRTaWduYXR1cmUiLCBkYXRhKTsgLy/lgqzlip7mlbDmja4KICAgICAgcmVzb2x2ZSgpOwogICAgfSk7CiAgfSwKICBzZXRTaWduYXR1cmVTdGF0dXM6IGZ1bmN0aW9uIHNldFNpZ25hdHVyZVN0YXR1cyhfcmVmODQsIHN0YXR1cykgewogICAgdmFyIGNvbW1pdCA9IF9yZWY4NC5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjg0LnN0YXRlOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgY29tbWl0KCJzZXRTaWduYXR1cmVTdGF0dXMiLCBzdGF0dXMpOyAvL+WCrOWKnuaVsOaNrgogICAgICByZXNvbHZlKCk7CiAgICB9KTsKICB9LAogIGRvU2lnbmF0dXJlOiBmdW5jdGlvbiBkb1NpZ25hdHVyZShfcmVmODUsIGRhdGEpIHsKICAgIHZhciBjb21taXQgPSBfcmVmODUuY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWY4NS5zdGF0ZTsKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgIGNvbW1pdCgic2V0U2lnbmF0dXJlIiwgZGF0YSk7IC8v5YKs5Yqe5pWw5o2uCiAgICAgIHJlc29sdmUoKTsKICAgIH0pOwogIH0KfTsKdmFyIG11dGF0aW9ucyA9IHsKICBjbGVhckxpc3REYXRhOiBmdW5jdGlvbiBjbGVhckxpc3REYXRhKHN0YXRlKSB7CiAgICBzdGF0ZS5yb3dzID0gW107CiAgICBzdGF0ZS5wYWdpbmF0aW9uID0ge307CiAgfSwKICBzZXRQYWdpbmF0aW9uOiBmdW5jdGlvbiBzZXRQYWdpbmF0aW9uKHN0YXRlLCBwYWdpbmF0aW9uKSB7CiAgICBzdGF0ZS5wYWdpbmF0aW9uID0gcGFnaW5hdGlvbjsKICB9LAogIHNldFBhZ2luYXRpb25TaXplOiBmdW5jdGlvbiBzZXRQYWdpbmF0aW9uU2l6ZShzdGF0ZSwgc2l6ZSkgewogICAgc3RhdGUucGFnaW5hdGlvbi5wYWdlU2l6ZSA9IHNpemU7CiAgfSwKICBzZXRQYWdpbmF0aW9uUGFnZU51bTogZnVuY3Rpb24gc2V0UGFnaW5hdGlvblBhZ2VOdW0oc3RhdGUsIGN1cnJlbnRQYWdlKSB7CiAgICBzdGF0ZS5wYWdpbmF0aW9uLnBhZ2UgPSBjdXJyZW50UGFnZTsKICB9LAogIHNldFJvd3M6IGZ1bmN0aW9uIHNldFJvd3Moc3RhdGUsIHJvd3MpIHsKICAgIHN0YXRlLnJvd3MgPSByb3dzOwogIH0sCiAgc2V0VG90YWw6IGZ1bmN0aW9uIHNldFRvdGFsKHN0YXRlLCB0b3RhbCkgewogICAgc3RhdGUudG90YWwgPSB0b3RhbDsKICB9LAogIHNldEZsb3dUcmVlczogZnVuY3Rpb24gc2V0Rmxvd1RyZWVzKHN0YXRlLCB0cmVlKSB7CiAgICBzdGF0ZS50cmVlID0gdHJlZTsKICB9LAogIHNldEJ1dHRvblJvd3M6IGZ1bmN0aW9uIHNldEJ1dHRvblJvd3Moc3RhdGUsIHJvd3MpIHsKICAgIHZhciByZXMgPSBbXTsKICAgIGlmIChyb3dzLmJ1dHRvbnMgJiYgcm93cy5idXR0b25zLmxlbmd0aCA+IDApIHsKICAgICAgLy/mmK/nlKjmiLfku7vliqEx6IqC54K577yI5Y2z5Y+R6LW35Lq66IqC54K577yJIOWPquiDveWtmOWcqCDlkIzmhI8gICDlvoHor6IgICAgIOS/neWtmCAg5oyJ6ZKuCiAgICAgIC8vIGlmKHJvd3MuaXNOb2RlSWRPbmUpewogICAgICAvLyAgIGZvcihsZXQgaSA9MDtpPHJvd3MuYnV0dG9ucy5sZW5ndGg7aSsrKXsKICAgICAgLy8gICAgIC8v5Yik5pat5piv5ZCm5a2Y5Zyo5ZCM5oSPIOW+geivoiDkv53lrZggIOaMiemSrgogICAgICAvLyAgICAgaWYocm93cy5idXR0b25zW2ldLmFsaWFzPT0iYWdyZWUiIHx8ICByb3dzLmJ1dHRvbnNbaV0uYWxpYXM9PSJzYXZlRHJhZnQiIHx8ICByb3dzLmJ1dHRvbnNbaV0uYWxpYXM9PSJpbnF1Iil7CiAgICAgIC8vICAgICAgIHJlcy5wdXNoKHJvd3MuYnV0dG9uc1tpXSk7CiAgICAgIC8vICAgICB9CiAgICAgIC8vICAgfQogICAgICAvLyB9ZWxzZXsKICAgICAgcmVzID0gX3RvQ29uc3VtYWJsZUFycmF5KHJvd3MuYnV0dG9ucyk7CiAgICAgIHZhciBzdGFydFRyYW5zID0ge307CiAgICAgIHZhciBlbmRQcm9jZXNzID0ge307CiAgICAgIHZhciBsb2NrVW5sb2NrID0ge307CiAgICAgIHZhciBzYXZlRHJhZnQgPSB7fTsKICAgICAgdmFyIGhhbmdVcCA9IHt9OwogICAgICB2YXIgY2FuY2VsSGFuZ1VwID0ge307CiAgICAgIC8v6YeN5paw5o6S5bqPIOaMieeFpyDlkIzmhI8g5Y+N5a+5IOmps+WbniDlvoHor6Ig6L2s5YqeIOa1gei9rCDnu4jmraIg562+5pS2IOS/neWtmAogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MuYnV0dG9ucy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChyb3dzLmJ1dHRvbnNbaV0uYWxpYXMgPT0gInN0YXJ0VHJhbnMiKSB7CiAgICAgICAgICAvL+a1gei9rAogICAgICAgICAgc3RhcnRUcmFucyA9IHJvd3MuYnV0dG9uc1tpXTsKICAgICAgICAgIHJlcy5yZW1vdmUocm93cy5idXR0b25zW2ldKTsKICAgICAgICB9IGVsc2UgaWYgKHJvd3MuYnV0dG9uc1tpXS5hbGlhcyA9PSAiZW5kUHJvY2VzcyIpIHsKICAgICAgICAgIC8v57uI5q2iCiAgICAgICAgICBlbmRQcm9jZXNzID0gcm93cy5idXR0b25zW2ldOwogICAgICAgICAgcmVzLnJlbW92ZShyb3dzLmJ1dHRvbnNbaV0pOwogICAgICAgIH0gZWxzZSBpZiAocm93cy5idXR0b25zW2ldLmFsaWFzID09ICJsb2NrVW5sb2NrIikgewogICAgICAgICAgLy/nrb7mlLYKICAgICAgICAgIGxvY2tVbmxvY2sgPSByb3dzLmJ1dHRvbnNbaV07CiAgICAgICAgICByZXMucmVtb3ZlKHJvd3MuYnV0dG9uc1tpXSk7CiAgICAgICAgICBpZiAocm93cy5idXR0b25zW2ldLmlzTG9jaykgewogICAgICAgICAgICBzdGF0ZS5mb3JjZUxvY2sgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAocm93cy5idXR0b25zW2ldLmFsaWFzID09ICJzYXZlRHJhZnQiKSB7CiAgICAgICAgICAvL+S/neWtmAogICAgICAgICAgc2F2ZURyYWZ0ID0gcm93cy5idXR0b25zW2ldOwogICAgICAgICAgcmVzLnJlbW92ZShyb3dzLmJ1dHRvbnNbaV0pOwogICAgICAgIH0gZWxzZSBpZiAocm93cy5idXR0b25zW2ldLmFsaWFzID09ICJoYW5nVXAiKSB7CiAgICAgICAgICBoYW5nVXAgPSByb3dzLmJ1dHRvbnNbaV07CiAgICAgICAgICByZXMucmVtb3ZlKHJvd3MuYnV0dG9uc1tpXSk7CiAgICAgICAgfSBlbHNlIGlmIChyb3dzLmJ1dHRvbnNbaV0uYWxpYXMgPT0gImNhbmNlbEhhbmdVcCIpIHsKICAgICAgICAgIGNhbmNlbEhhbmdVcCA9IHJvd3MuYnV0dG9uc1tpXTsKICAgICAgICAgIHJlcy5yZW1vdmUocm93cy5idXR0b25zW2ldKTsKICAgICAgICB9CiAgICAgICAgLy/liKTmlq3mmK/lkKbmmK/liqDnrb7ku7vliqEKICAgICAgICBpZiAocm93cy5pc0FkZFNpZ24pIHsKICAgICAgICAgIGlmIChyb3dzLmJ1dHRvbnNbaV0uYWxpYXMgPT0gImlucXUiKSB7CiAgICAgICAgICAgIC8v5b6B6K+iCiAgICAgICAgICAgIHJlcy5yZW1vdmUocm93cy5idXR0b25zW2ldKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgLy/liKTmlq3mmK/lkKbmmK/liqDnrb7ku7vliqEKICAgICAgaWYgKCFyb3dzLmlzQWRkU2lnbikgewogICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShzdGFydFRyYW5zKSAhPSAie30iKSB7CiAgICAgICAgICByZXMucHVzaChzdGFydFRyYW5zKTsKICAgICAgICB9CiAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KGxvY2tVbmxvY2spICE9ICJ7fSIpIHsKICAgICAgICAgIHJlcy5wdXNoKGxvY2tVbmxvY2spOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoSlNPTi5zdHJpbmdpZnkoZW5kUHJvY2VzcykgIT0gInt9IikgewogICAgICAgIHJlcy5wdXNoKGVuZFByb2Nlc3MpOwogICAgICB9CiAgICAgIGlmIChKU09OLnN0cmluZ2lmeShzYXZlRHJhZnQpICE9ICJ7fSIpIHsKICAgICAgICByZXMucHVzaChzYXZlRHJhZnQpOwogICAgICB9CiAgICAgIGlmIChKU09OLnN0cmluZ2lmeShoYW5nVXApICE9ICJ7fSIpIHsKICAgICAgICByZXMucHVzaChoYW5nVXApOwogICAgICB9CiAgICAgIGlmIChKU09OLnN0cmluZ2lmeShjYW5jZWxIYW5nVXApICE9ICJ7fSIpIHsKICAgICAgICByZXMucHVzaChjYW5jZWxIYW5nVXApOwogICAgICB9CiAgICB9CiAgICAvLyB9CiAgICBzdGF0ZS5yb3dzQnRuID0gcmVzOwogIH0sCiAgc2V0QXBwcm92YWxJdGVtOiBmdW5jdGlvbiBzZXRBcHByb3ZhbEl0ZW0oc3RhdGUsIGFwcHJvdmFsSXRlbSkgewogICAgc3RhdGUuYXBwcm92YWxJdGVtID0gYXBwcm92YWxJdGVtOwogIH0sCiAgc2V0T3BpbmlvbnM6IGZ1bmN0aW9uIHNldE9waW5pb25zKHN0YXRlLCBvcGluaW9ucykgewogICAgdmFyIHBhcmFtID0gb3BpbmlvbnMucGFyYW07CiAgICB2YXIgZGF0YXMgPSB7fTsKICAgIHZhciByZXMgPSBbXTsKICAgIC8v6ZmE5Lu25ZKM5q2j5paH5a2X56ym5Liy6L2s5a+56LGhCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9waW5pb25zLmRhdGEubGVuZ3RoOyBpKyspIHsKICAgICAgZGF0YXMgPSBvcGluaW9ucy5kYXRhW2ldOwogICAgICBpZiAob3BpbmlvbnMuZGF0YVtpXS5maWxlcykgewogICAgICAgIGRhdGFzLmZpbGVzID0gSlNPTi5wYXJzZShvcGluaW9ucy5kYXRhW2ldLmZpbGVzKTsKICAgICAgfQogICAgICBpZiAob3BpbmlvbnMuZGF0YVtpXS56ZmlsZXMpIHsKICAgICAgICBkYXRhcy56ZmlsZXMgPSBKU09OLnBhcnNlKG9waW5pb25zLmRhdGFbaV0uemZpbGVzKTsKICAgICAgfQogICAgICByZXMucHVzaChkYXRhcyk7CiAgICB9CiAgICAvL+WIpOaWreS8muetvuS7u+WKoeaYr+WQpumAieaLqSDlhYHorrjlj4LogIPmhI/op4EgICjpgInmi6nlkKbvvJpmYWxzZe+8jOWImeWuoeaJueaXtuS4jeWFgeiuuOWPguiAg+WQjOeOr+iKguWFtuS7luS8muetvuS6uuWRmOeahOaEj+ingSkKICAgIGlmICghcGFyYW0ucmVmZXJPcGluaW9uICYmIHBhcmFtLm5vZGVUeXBlID09ICJTSUdOVEFTSyIpIHsKICAgICAgcHJvY2Vzcy50YXNrTm9kZShwYXJhbS5kZWZJZCwgZnVuY3Rpb24gKHIpIHsKICAgICAgICB2YXIgbm9kZXMgPSByLmRhdGEuYnBtRGVmTGF5b3V0Lmxpc3RMYXlvdXQ7CiAgICAgICAgdmFyIHNpZ25Ob2RlcyA9IFtdOyAvL+S8muetvuS7u+WKoeiKgueCuQogICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbm9kZXMubGVuZ3RoOyBqKyspIHsKICAgICAgICAgIGlmIChub2Rlc1tqXS5ub2RlVHlwZSA9PSBwYXJhbS5ub2RlVHlwZSkgewogICAgICAgICAgICBzaWduTm9kZXMucHVzaChub2Rlc1tqXSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8v5Yig6Zmk5YW25LuW5Lya562+5Lu75Yqh5a6h5om55Lq65ZGY55qE5a6h5om56K6w5b2VCiAgICAgICAgZm9yICh2YXIgaSA9IHJlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgewogICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzaWduTm9kZXMubGVuZ3RoOyBqKyspIHsKICAgICAgICAgICAgaWYgKHNpZ25Ob2Rlc1tqXS5ub2RlSWQgPT0gcGFyYW0ubm9kZUlkICYmIHNpZ25Ob2Rlc1tqXS5ub2RlSWQgPT0gcmVzW2ldLnRhc2tLZXkgJiYgcmVzW2ldLnRhc2tJZCAhPSBwYXJhbS50YXNrSWQpIHsKICAgICAgICAgICAgICByZXMuc3BsaWNlKGksIDEpOwogICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICAgIHN0YXRlLm9waW5pb25zID0gcmVzOwogIH0sCiAgc2V0Tm9kZXM6IGZ1bmN0aW9uIHNldE5vZGVzKHN0YXRlLCBub2RlcykgewogICAgc3RhdGUubm9kZXMgPSBub2RlczsKICB9LAogIHNldENoZWNrZWROb2RlczogZnVuY3Rpb24gc2V0Q2hlY2tlZE5vZGVzKHN0YXRlLCBjaGVja2VkTm9kZXMpIHsKICAgIHN0YXRlLmNoZWNrZWROb2RlcyA9IGNoZWNrZWROb2RlczsKICB9LAogIHNldENoZWNrZWRQdXNoOiBmdW5jdGlvbiBzZXRDaGVja2VkUHVzaChzdGF0ZSwgdmFsdWUpIHsKICAgIHN0YXRlLmNoZWNrZWROb2Rlcy5wdXNoKHZhbHVlKTsKICB9LAogIHNldENoZWNrZWRTcGxpY2U6IGZ1bmN0aW9uIHNldENoZWNrZWRTcGxpY2Uoc3RhdGUsIHZhbHVlKSB7CiAgICBzdGF0ZS5jaGVja2VkTm9kZXMuc3BsaWNlKHZhbHVlLCAxKTsKICB9LAogIHNldEJwbUV4ZVN0YWNrc1VzZXJOb2RlOiBmdW5jdGlvbiBzZXRCcG1FeGVTdGFja3NVc2VyTm9kZShzdGF0ZSwgYnBtRXhlU3RhY2tzVXNlck5vZGUpIHsKICAgIHN0YXRlLmJwbUV4ZVN0YWNrc1VzZXJOb2RlID0gYnBtRXhlU3RhY2tzVXNlck5vZGU7CiAgfSwKICBzZXRSZWxhdGVkSW5mb3JtYXRpb246IGZ1bmN0aW9uIHNldFJlbGF0ZWRJbmZvcm1hdGlvbihzdGF0ZSwgcmVsYXRlZEluZm9ybWF0aW9uKSB7CiAgICBzdGF0ZS5yZWxhdGVkSW5mb3JtYXRpb24gPSByZWxhdGVkSW5mb3JtYXRpb247CiAgfSwKICBzZXREdWVUaW1lOiBmdW5jdGlvbiBzZXREdWVUaW1lKHN0YXRlLCBkdWVUaW1lKSB7CiAgICBzdGF0ZS5kdWVUaW1lID0gZHVlVGltZTsKICB9LAogIHNldE5leHRFeGVjdXRvcjogZnVuY3Rpb24gc2V0TmV4dEV4ZWN1dG9yKHN0YXRlLCBuZXh0RXhlY3V0b3IpIHsKICAgIHN0YXRlLm5leHRFeGVjdXRvciA9IG5leHRFeGVjdXRvcjsKICB9LAogIHNldFNpZ25hdHVyZTogZnVuY3Rpb24gc2V0U2lnbmF0dXJlKHN0YXRlLCBzaWduYXR1cmUpIHsKICAgIHN0YXRlLnNpZ25hdHVyZUNvbmZpZyA9IHNpZ25hdHVyZTsKICB9LAogIHNldFNpZ25hdHVyZVN0YXR1czogZnVuY3Rpb24gc2V0U2lnbmF0dXJlU3RhdHVzKHN0YXRlLCBzdGF0dXMpIHsKICAgIHN0YXRlLnNpZ25hdHVyZUNvbmZpZy5zdGF0dXMgPSBzdGF0dXM7CiAgfSwKICBpbml0U2lnbmF0dXJlOiBmdW5jdGlvbiBpbml0U2lnbmF0dXJlKHN0YXRlLCBkYXRhKSB7CiAgICBzdGF0ZS5zaWduYXR1cmVDb25maWcgPSB7CiAgICAgIHN0YXR1czogJ2Rpc2FibGUnLAogICAgICBmaWVsZDogJycsCiAgICAgIGlzQ292ZXI6IGZhbHNlLAogICAgICBzZWNyZXRGcmVlOiBmYWxzZSwKICAgICAgcGFzc3dvcmQ6ICcnCiAgICB9OwogIH0KfTsKZXhwb3J0IGRlZmF1bHQgewogIG5hbWVzcGFjZWQ6IHRydWUsCiAgc3RhdGU6IHN0YXRlLAogIGdldHRlcnM6IGdldHRlcnMsCiAgYWN0aW9uczogYWN0aW9ucywKICBtdXRhdGlvbnM6IG11dGF0aW9ucwp9Ow=="},null]}