{"remainingRequest":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\thread-loader\\dist\\cjs.js!D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\babel-loader\\lib\\index.js!D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\cache-loader\\dist\\cjs.js??ref--0-0!D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\jenkins\\workspace\\xcjy-fvue\\src\\views\\patrolAndRescue\\infoMgmtPatrolsRescues\\electronicFence\\index.vue?vue&type=script&lang=js","dependencies":[{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\src\\views\\patrolAndRescue\\infoMgmtPatrolsRescues\\electronicFence\\index.vue","mtime":1741723721200},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\babel.config.js","mtime":1741314102158},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\thread-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\babel-loader\\lib\\index.js","mtime":456789000000},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\vue-loader\\lib\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:aW1wb3J0IF9yZWdlbmVyYXRvclJ1bnRpbWUgZnJvbSAiRDovamVua2lucy93b3Jrc3BhY2UveGNqeS1mdnVlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9yZWdlbmVyYXRvclJ1bnRpbWUuanMiOwppbXBvcnQgX2FzeW5jVG9HZW5lcmF0b3IgZnJvbSAiRDovamVua2lucy93b3Jrc3BhY2UveGNqeS1mdnVlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3luY1RvR2VuZXJhdG9yLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkubWFwLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmZ1bmN0aW9uLm5hbWUuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5jb25zdHJ1Y3Rvci5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLml0ZXJhdG9yLm1hcC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmpzb24uc3RyaW5naWZ5LmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMubnVtYmVyLmNvbnN0cnVjdG9yLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmtleXMuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLmV4ZWMuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuc2VhcmNoLmpzIjsKLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KCmltcG9ydCB7IGxhenlBTWFwQXBpTG9hZGVySW5zdGFuY2UgfSBmcm9tICd2dWUtYW1hcCc7CmltcG9ydCB7IGVkaXRQb2ludFNhdmluZywgZ2V0RmVuZWMsIGdldFRyZWUsIHBvaW50U2F2aW5nLCB0YWJsZURlbGV0ZSB9IGZyb20gJ0AvYXBpL3BhdHJvbEFuZFJlc2N1ZS9pbmZvTWdtdFBhdHJvbHNSZXNjdWVzL2VsZWN0cm9uaWNGZW5jZSc7CmltcG9ydCB0cmVlU2lkZSBmcm9tICdAL2NvbXBvbmVudHMvdHJlZVNpZGUvaW5kZXgudnVlJzsKd2luZG93Ll9BTWFwU2VjdXJpdHlDb25maWcgPSB7CiAgc2VjdXJpdHlKc0NvZGU6ICczMzAzNWU5M2Y3ZjA3ZDQ0ZWM1MmM3MWYzYmQ2NGIyOScgLy/kvaDnmoTnp5jpkqUKfTsKZXhwb3J0IGRlZmF1bHQgewogIG5hbWU6ICdUYWJsZVBhZ2UnLAogIGNvbXBvbmVudHM6IHsKICAgIHRyZWVTaWRlOiB0cmVlU2lkZQogIH0sCiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHsKICAgIHJldHVybiB7CiAgICAgIG1hcExvYWRpbmc6IGZhbHNlLAogICAgICByb2FkSWQ6ICcnLAogICAgICByb2FkTGlzdDogW10sCiAgICAgIHRyZWVMb2FkaW5nOiBmYWxzZSwKICAgICAgdHJlZURhdGE6IFtdLAogICAgICAvL+W3pui+ueagkQogICAgICBkZWZhdWx0UHJvcHM6IHsKICAgICAgICBjaGlsZHJlbjogJ2NoaWxkcmVuJywKICAgICAgICBsYWJlbDogJ25hbWUnCiAgICAgIH0sCiAgICAgIGNlbnRlcjogWzEwNi41NDc4NzY3LCAyOS41NjQ3Mzk4XSwKICAgICAgLy8g5Zyw5Zu+5Lit5b+D54K5CiAgICAgIHpvb206IDExLAogICAgICBtYXA6IHVuZGVmaW5lZCwKICAgICAgcG9seWdvbjogbnVsbCwKICAgICAgLy/lvZPliY3nmoTnu5jliLblm77lsYIKICAgICAgY3VycmVudE92ZXJsYXk6IHVuZGVmaW5lZCwKICAgICAgLy/mjqfliLbnu5jliLblnIblvaLnmoTlj5jph48KICAgICAgaXNDaXJjbGU6IHRydWUsCiAgICAgIC8v5o6n5Yi257uY5Yi25aSa5Y+Y5Z6L55qE5Y+Y6YePCiAgICAgIGlzUG9seWdvbjogdHJ1ZSwKICAgICAgYWN0aXZlRWRpdG9yOiB1bmRlZmluZWQsCiAgICAgIGVkaXRvck9wdGlvbnM6IHVuZGVmaW5lZCwKICAgICAgcGF0aDogW10sCiAgICAgIGlzcGxvdDogZmFsc2UsCiAgICAgIGlzRWRpdDogZmFsc2UsCiAgICAgIG1hcEFkZHJlc3M6ICcnLAogICAgICBwb2lMaXN0RGF0YTogW10sCiAgICAgIGF1dG9Db21wbGV0ZUNvbXBvbmVudDogdW5kZWZpbmVkLAogICAgICBwbGFjZVNlYXJjaENvbXBvbmVudDogdW5kZWZpbmVkLAogICAgICBzaG93c2VhcmNoUmVzdWx0OiBmYWxzZSwKICAgICAgc2hvd0luZm86IGZhbHNlLAogICAgICBpbmZvV2luZG93UG9zaXRpb246IHt9LAogICAgICBpbmZvV2luZG93Q29udGVudDogJ+eCueWHu+WPs+mUruS/neWtmCcKICAgIH07CiAgfSwKICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkgewogICAgdmFyIF90aGlzID0gdGhpczsKICAgIC8vIOiOt+WPluagkeW9ouebruW9lQogICAgdGhpcy5nZXRPcmdUcmVlRGF0YShmdW5jdGlvbiAodHJlZURhdGEpIHsKICAgICAgLy8g5Zue6LCD5Lit6buY6K6k6YCJ5Lit56ys5LiA6aG55bm25bCG5YW2aWTkvZzkuLrlj4LmlbDor7fmsYLooajmoLwKICAgICAgX3RoaXMudHJlZUl0ZW0gPSB0cmVlRGF0YVswXSB8fCB7fTsKICAgICAgaWYgKF90aGlzLnRyZWVJdGVtLmNoaWxkcmVuLmxlbmd0aCA+IDApIHsKICAgICAgICBfdGhpcy5pc3Bsb3QgPSBmYWxzZTsKICAgICAgICBfdGhpcy5yb2FkTGlzdCA9IF90aGlzLnRyZWVJdGVtLmNoaWxkcmVuLm1hcChmdW5jdGlvbiAoaXRlbSkgewogICAgICAgICAgcmV0dXJuIGl0ZW0uaWQ7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgX3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uIChfKSB7CiAgICAgICAgdmFyIF90aGlzJCRyZWZzJHRyZWVTaWRlLCBfdHJlZURhdGEkLCBfdGhpcyQkcmVmcyR0cmVlU2lkZTI7CiAgICAgICAgKF90aGlzJCRyZWZzJHRyZWVTaWRlID0gX3RoaXMuJHJlZnMudHJlZVNpZGUpID09PSBudWxsIHx8IF90aGlzJCRyZWZzJHRyZWVTaWRlID09PSB2b2lkIDAgfHwgX3RoaXMkJHJlZnMkdHJlZVNpZGUuc2V0Q3VycmVudEtleSgoX3RyZWVEYXRhJCA9IHRyZWVEYXRhWzBdKSA9PT0gbnVsbCB8fCBfdHJlZURhdGEkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdHJlZURhdGEkLmlkKTsKICAgICAgICAoX3RoaXMkJHJlZnMkdHJlZVNpZGUyID0gX3RoaXMuJHJlZnMudHJlZVNpZGUpID09PSBudWxsIHx8IF90aGlzJCRyZWZzJHRyZWVTaWRlMiA9PT0gdm9pZCAwIHx8IF90aGlzJCRyZWZzJHRyZWVTaWRlMi5leHBhbmRIYW5kbGUodHJ1ZSwgMik7CiAgICAgIH0pOwogICAgfSk7CiAgfSwKICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkgewogICAgdmFyIF90aGlzMiA9IHRoaXM7CiAgICBsYXp5QU1hcEFwaUxvYWRlckluc3RhbmNlLmxvYWQoKS50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICBfdGhpczIuaW5pdE1hcCgpOwogICAgfSk7CiAgfSwKICBtZXRob2RzOiB7CiAgICAvKiog5Yid5aeL5YyW5pCc57SiICovbWFwU2VhcmNoSW5pdDogZnVuY3Rpb24gbWFwU2VhcmNoSW5pdCgpIHsKICAgICAgdmFyIGF1dG9PcHRpb25zID0gewogICAgICAgIGlucHV0OiAidGlwSW5wdXQiCiAgICAgIH07CiAgICAgIHRoaXMuYXV0b0NvbXBsZXRlQ29tcG9uZW50ID0gbmV3IEFNYXAuQXV0b2NvbXBsZXRlKGF1dG9PcHRpb25zKTsKICAgICAgLy8g5rOo5YaMcGxhY2VTZWFyY2jnu4Tku7YKICAgICAgdGhpcy5wbGFjZVNlYXJjaENvbXBvbmVudCA9IG5ldyBBTWFwLlBsYWNlU2VhcmNoKHsKICAgICAgICBjaXR5OiAi6YeN5bqGIiAvL+WfjuW4ggogICAgICB9KTsKICAgIH0sCiAgICBzZWFyY2hLZXlXb3JkOiBmdW5jdGlvbiBzZWFyY2hLZXlXb3JkKCkgewogICAgICB2YXIgX3RoaXMzID0gdGhpczsKICAgICAgaWYgKHRoaXMubWFwQWRkcmVzcyAhPT0gJycpIHsKICAgICAgICB0aGlzLnBsYWNlU2VhcmNoQ29tcG9uZW50LnNlYXJjaCh0aGlzLm1hcEFkZHJlc3MsIGZ1bmN0aW9uIChzdGF0dXMsIHJlc3VsdCkgewogICAgICAgICAgaWYgKHN0YXR1cyA9PT0gJ2NvbXBsZXRlJyAmJiByZXN1bHQuaW5mbyA9PT0gIk9LIikgewogICAgICAgICAgICBfdGhpczMuc2hvd3NlYXJjaFJlc3VsdCA9IHRydWU7CiAgICAgICAgICAgIF90aGlzMy5wb2lMaXN0RGF0YSA9IHJlc3VsdC5wb2lMaXN0LnBvaXM7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBfdGhpczMuc2hvd3NlYXJjaFJlc3VsdCA9IGZhbHNlOwogICAgICAgICAgICBfdGhpczMucG9pTGlzdERhdGEgPSBbXTsKICAgICAgICAgICAgX3RoaXMzLiRtZXNzYWdlKHsKICAgICAgICAgICAgICBtZXNzYWdlOiAi5rKh5pyJ5p+l5Yiw57uT5p6cIiwKICAgICAgICAgICAgICB0eXBlOiAid2FybmluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5wb2lMaXN0RGF0YSA9IFtdOwogICAgICAgIHRoaXMuc2hvd3NlYXJjaFJlc3VsdCA9IGZhbHNlOwogICAgICAgIHRoaXMubWFwLmNsZWFyTWFwKCk7CiAgICAgIH0KICAgIH0sCiAgICBtYXJrZXJSZXN1bHQ6IGZ1bmN0aW9uIG1hcmtlclJlc3VsdChkYXRhKSB7CiAgICAgIHZhciBfdGhpczQgPSB0aGlzOwogICAgICB0aGlzLnNob3dzZWFyY2hSZXN1bHQgPSBmYWxzZTsKICAgICAgdGhpcy5hZGRyZXNzID0gZGF0YS5uYW1lOwogICAgICB2YXIgbWFya2VyID0gbmV3IEFNYXAuTWFya2VyKHsKICAgICAgICBwb3NpdGlvbjogW051bWJlcihkYXRhLmxvY2F0aW9uLmxuZyksIE51bWJlcihkYXRhLmxvY2F0aW9uLmxhdCldCiAgICAgIH0pOwogICAgICB0aGlzLm1hcC5jbGVhck1hcCgpOyAvLyDmuIXpmaTmiYDmnInopobnm5bnianvvIjngrnmoIflv5fvvIkKICAgICAgdGhpcy5tYXAuYWRkKG1hcmtlcik7IC8vIOa3u+WKoOeCueagh+W/lwogICAgICB0aGlzLnNob3dJbmZvV2luZG93KG1hcmtlcik7CiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgIF90aGlzNC5tYXAuc2V0Q2VudGVyKGRhdGEubG9jYXRpb24pOwogICAgICAgIF90aGlzNC5tYXAuc2V0Wm9vbSgxNSk7CiAgICAgIH0sIDUwKTsKICAgICAgdmFyIHRoaXNQb3NpdGlvbiA9IHsKICAgICAgICBhZGRyZXNzOiB0aGlzLmFkZHJlc3MsCiAgICAgICAgbG5nOiBkYXRhLmxvY2F0aW9uLmxuZywKICAgICAgICBsYXQ6IGRhdGEubG9jYXRpb24ubGF0CiAgICAgIH07CiAgICAgIHRoaXMuJGVtaXQoInNlbGVjdCIsIHRoaXNQb3NpdGlvbik7CiAgICB9LAogICAgc2hvd0luZm9XaW5kb3c6IGZ1bmN0aW9uIHNob3dJbmZvV2luZG93KG1hcmtlcikgewogICAgICB2YXIgaW5mb1dpbmRvdyA9IG5ldyBBTWFwLkluZm9XaW5kb3coewogICAgICAgIGlzQ3VzdG9tOiB0cnVlLAogICAgICAgIC8v5piv5ZCm6Ieq5a6a5LmJ5L+h5oGv56qX5L2TCiAgICAgICAgY29udGVudDogIjxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtjb2xvcjojMDAwMDAwOyBwYWRkaW5nOiAxMHB4OyBib3JkZXItcmFkaXVzOiA1cHg7Ym9yZGVyOiAxcHggc29saWQgI2NjY2NjYztcIj4gXHU1NzMwXHU1NzQwXHVGRjFBIi5jb25jYXQodGhpcy5hZGRyZXNzLCAiPC9kaXY+IiksCiAgICAgICAgY2xvc2VXaGVuQ2xpY2tNYXA6IHRydWUsCiAgICAgICAgekluZGV4OiA5OTksCiAgICAgICAgb2Zmc2V0OiBuZXcgQU1hcC5QaXhlbCgxNiwgLTM1KQogICAgICB9KTsKICAgICAgaW5mb1dpbmRvdy5vcGVuKHRoaXMubWFwLCBtYXJrZXIuZ2V0UG9zaXRpb24oKSk7CiAgICB9LAogICAgLy8g6I635Y+W6Lev5q615qCRCiAgICBnZXRPcmdUcmVlRGF0YTogZnVuY3Rpb24gZ2V0T3JnVHJlZURhdGEoY2FsbGJhY2spIHsKICAgICAgdmFyIF90aGlzNSA9IHRoaXM7CiAgICAgIHJldHVybiBfYXN5bmNUb0dlbmVyYXRvcigvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoZnVuY3Rpb24gX2NhbGxlZSgpIHsKICAgICAgICB2YXIgX3lpZWxkJGdldFRyZWUsIHZhbHVlOwogICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lKCkud3JhcChmdW5jdGlvbiBfY2FsbGVlJChfY29udGV4dCkgewogICAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQucHJldiA9IF9jb250ZXh0Lm5leHQpIHsKICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgIF9jb250ZXh0LnByZXYgPSAwOwogICAgICAgICAgICAgIF90aGlzNS50cmVlTG9hZGluZyA9IHRydWU7CiAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDQ7CiAgICAgICAgICAgICAgcmV0dXJuIGdldFRyZWUoKTsKICAgICAgICAgICAgY2FzZSA0OgogICAgICAgICAgICAgIF95aWVsZCRnZXRUcmVlID0gX2NvbnRleHQuc2VudDsKICAgICAgICAgICAgICB2YWx1ZSA9IF95aWVsZCRnZXRUcmVlLnZhbHVlOwogICAgICAgICAgICAgIF90aGlzNS50cmVlRGF0YSA9IF90aGlzNS50cmFuc2Zvcm1UcmVlRGF0YSh2YWx1ZSk7CiAgICAgICAgICAgIGNhc2UgNzoKICAgICAgICAgICAgICBfY29udGV4dC5wcmV2ID0gNzsKICAgICAgICAgICAgICBfdGhpczUudHJlZUxvYWRpbmcgPSBmYWxzZTsKICAgICAgICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjayhfdGhpczUudHJlZURhdGEpOwogICAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5maW5pc2goNyk7CiAgICAgICAgICAgIGNhc2UgMTE6CiAgICAgICAgICAgIGNhc2UgImVuZCI6CiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LnN0b3AoKTsKICAgICAgICAgIH0KICAgICAgICB9LCBfY2FsbGVlLCBudWxsLCBbWzAsLCA3LCAxMV1dKTsKICAgICAgfSkpKCk7CiAgICB9LAogICAgdHJhbnNmb3JtVHJlZURhdGE6IGZ1bmN0aW9uIHRyYW5zZm9ybVRyZWVEYXRhKGRhdGEpIHsKICAgICAgcmV0dXJuIGRhdGEubWFwKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGlkOiBpdGVtLmlkLAogICAgICAgICAgbmFtZTogaXRlbS5uYW1lLAogICAgICAgICAgLy8g5LiA57qn55uu5b2V55qEIGxhYmVsCiAgICAgICAgICBjaGlsZHJlbjogaXRlbS50ZWFtTGlzdC5tYXAoZnVuY3Rpb24gKGdyaWQpIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICBpZDogZ3JpZC5pZCwKICAgICAgICAgICAgICBpc0RyYXc6IGdyaWQuaXNEcmF3LAogICAgICAgICAgICAgIG5hbWU6IGdyaWQubmFtZSArICcoJyArIChncmlkLmlzRHJhdyA9PT0gJzEnID8gJ+W3sue7mOWbvicgOiAn5pyq57uY5Zu+JykgKyAnKScgLy8g5LqM57qn55uu5b2V55qEIGxhYmVsCiAgICAgICAgICAgIH07CiAgICAgICAgICB9KQogICAgICAgIH07CiAgICAgIH0pOwogICAgfSwKICAgIGN1cnJlbnRDaGFuZ2U6IGZ1bmN0aW9uIGN1cnJlbnRDaGFuZ2Uobm9kZUl0ZW0pIHsKICAgICAgaWYgKG5vZGVJdGVtLmNoaWxkcmVuICYmIG5vZGVJdGVtLmNoaWxkcmVuLmxlbmd0aCA+IDApIHsKICAgICAgICB0aGlzLnJvYWRJZCA9ICcnOwogICAgICAgIHRoaXMucm9hZExpc3QgPSBub2RlSXRlbS5jaGlsZHJlbi5tYXAoZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgICAgIHJldHVybiBpdGVtLmlkOwogICAgICAgIH0pOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuaXNwbG90ID0gdHJ1ZTsKICAgICAgICB0aGlzLmlzRWRpdCA9IG5vZGVJdGVtLmlzRHJhdyA9PT0gJzEnOwogICAgICAgIHRoaXMucm9hZExpc3QgPSBbXTsKICAgICAgICB0aGlzLnJvYWRJZCA9IG5vZGVJdGVtID09PSBudWxsIHx8IG5vZGVJdGVtID09PSB2b2lkIDAgPyB2b2lkIDAgOiBub2RlSXRlbS5pZDsKICAgICAgfQogICAgICB0aGlzLmlzUG9seWdvbiA9IHRydWU7CiAgICAgIHRoaXMuY2xlYXJBbGxEcmF3aW5ncygpOwogICAgICB0aGlzLmNsZWFyUG9seWdvbnMoKTsKICAgICAgdGhpcy5kcmF3U2F2ZWRQb2x5Z29uKCk7CiAgICB9LAogICAgLy/lnLDlm77liJ3lp4vljJYKICAgIGluaXRNYXA6IGZ1bmN0aW9uIGluaXRNYXAoKSB7CiAgICAgIHZhciBfdGhpczYgPSB0aGlzOwogICAgICB0aGlzLm1hcCA9IG5ldyBBTWFwLk1hcCgnbWFwQ29udGFpbmVyJywgewogICAgICAgIGNlbnRlcjogdGhpcy5jZW50ZXIsCiAgICAgICAgem9vbTogdGhpcy56b29tLAogICAgICAgIGxheWVyczogW25ldyBBTWFwLlRpbGVMYXllcigpIC8vIOm7mOiupOaZrumAmuWcsOWbvuWbvuWxggogICAgICAgIF0KICAgICAgfSk7CiAgICAgIC8vIOaQnOe0ogogICAgICB0aGlzLm1hcFNlYXJjaEluaXQoKTsKICAgICAgLy8g5Zue5pi+CiAgICAgIHRoaXMuZHJhd1NhdmVkUG9seWdvbigpOwogICAgICAvLyDliJ3lp4vljJYgTW91c2VUb29sCiAgICAgIEFNYXAucGx1Z2luKCdBTWFwLk1vdXNlVG9vbCcsIGZ1bmN0aW9uICgpIHsKICAgICAgICBfdGhpczYuZHJhd2luZ01hbmFnZXIgPSBuZXcgQU1hcC5Nb3VzZVRvb2woX3RoaXM2Lm1hcCk7IC8vIOWIneWni+WMliBNb3VzZVRvb2wKICAgICAgfSk7CiAgICAgIC8vIC8vZWRpdG9yT3B0aW9ucyDmmK/kuIDkuKrphY3nva7lr7nosaHvvIzkuJPpl6jnlKjkuo7mjqfliLblnLDlm77kuIrnvJbovpHlip/og73nmoTmoLflvI/lkozooYzkuLrvvIzlsKTlhbbmmK/kuI4gTW91c2VUb29sIOmFjeWQiOS9v+eUqOaXtu+8jOiDveWkn+Wvuee7mOWItueahOWbvuW9oui/m+ihjOe8lui+ke+8iOS+i+Wmguenu+WKqOagh+iusOeCueOAgeS/ruaUueWkmui+ueW9ouiKgueCueetie+8ieOAggogICAgICB0aGlzLmVkaXRvck9wdGlvbnMgPSB7CiAgICAgICAgZWRpdE1hcmtlck9wdGlvbnM6IHsKICAgICAgICAgIGljb246IG5ldyBBTWFwLkljb24oewogICAgICAgICAgICBzaXplOiBuZXcgQU1hcC5TaXplKDE2LCAxNiksCiAgICAgICAgICAgIC8vIOWbvuagh+Wkp+WwjwogICAgICAgICAgICBpbWFnZTogJ2h0dHBzOi8vd2ViYXBpLmFtYXAuY29tL3RoZW1lL3YxLjMvbWFya2Vycy9uL21hcmtfYi5wbmcnCiAgICAgICAgICB9KSwKICAgICAgICAgIG9mZnNldDogbmV3IEFNYXAuUGl4ZWwoLTgsIC04KSAvLyDlm77moIflgY/np7vph48KICAgICAgICB9LAogICAgICAgIC8vIOmFjee9ruWPr+enu+WKqOeahOagh+iusOeCueeahOagt+W8jwogICAgICAgIG1vdmVNYXJrZXJPcHRpb25zOiB7CiAgICAgICAgICBpY29uOiBuZXcgQU1hcC5JY29uKHsKICAgICAgICAgICAgc2l6ZTogbmV3IEFNYXAuU2l6ZSgyMCwgMjApLAogICAgICAgICAgICBpbWFnZTogJ2h0dHBzOi8vd2ViYXBpLmFtYXAuY29tL3RoZW1lL3YxLjMvbWFya2Vycy9uL21hcmtfci5wbmcnCiAgICAgICAgICB9KSwKICAgICAgICAgIG9mZnNldDogbmV3IEFNYXAuUGl4ZWwoLTEwLCAtMTApCiAgICAgICAgfSwKICAgICAgICAvLyDphY3nva7lpJrovrnlvaIv57q/5p2h5Lit6Ze06IqC54K555qE5qC35byPCiAgICAgICAgbWlkTWFya2VyT3B0aW9uczogewogICAgICAgICAgaWNvbjogbmV3IEFNYXAuSWNvbih7CiAgICAgICAgICAgIHNpemU6IG5ldyBBTWFwLlNpemUoMTQsIDE0KSwKICAgICAgICAgICAgaW1hZ2U6ICdodHRwczovL3dlYmFwaS5hbWFwLmNvbS90aGVtZS92MS4zL21hcmtlcnMvbi9tYXJrX3IucG5nJwogICAgICAgICAgfSksCiAgICAgICAgICBvZmZzZXQ6IG5ldyBBTWFwLlBpeGVsKC03LCAtNykKICAgICAgICB9CiAgICAgIH07CiAgICAgIC8vIOebkeWQrOWchuW9oue7mOWItuWujOaIkOS6i+S7tgogICAgICB0aGlzLmRyYXdpbmdNYW5hZ2VyLm9uKCdkcmF3JywgZnVuY3Rpb24gKGV2ZW50KSB7CiAgICAgICAgY29uc29sZS5sb2coZXZlbnQsICcwMDAwMDAwMDAwMDAwMDAwJyk7CiAgICAgICAgaWYgKF90aGlzNi5jdXJyZW50T3ZlcmxheSkgewogICAgICAgICAgX3RoaXM2Lm1hcC5yZW1vdmUoX3RoaXM2LmN1cnJlbnRPdmVybGF5KTsKICAgICAgICB9CiAgICAgICAgX3RoaXM2LmN1cnJlbnRPdmVybGF5ID0gZXZlbnQub2JqOwogICAgICAgIHZhciBzaGFwZSA9IGV2ZW50Lm9iajsgLy8g6I635Y+W57uY5Yi255qE5Zu+5b2i5a+56LGhCgogICAgICAgIGlmIChzaGFwZSBpbnN0YW5jZW9mIEFNYXAuUG9seWdvbikgewogICAgICAgICAgc2hhcGUuc2V0T3B0aW9ucyh7CiAgICAgICAgICAgIGRyYWdnYWJsZTogdHJ1ZQogICAgICAgICAgfSk7CiAgICAgICAgICBzaGFwZS5vbignZHJhZ2VuZCcsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIG5ld1BhdGggPSBzaGFwZS5nZXRQYXRoKCk7IC8vIOiOt+WPluaLluaLveWQjueahOi3r+W+hAogICAgICAgICAgICBjb25zb2xlLmxvZygn5ouW5ou95ZCO55qE5aSa6L655b2iJywgbmV3UGF0aCk7CiAgICAgICAgICB9KTsKICAgICAgICAgIC8vIOWmguaenOaYr+Wkmui+ueW9ouaIluefqeW9ou+8iOefqeW9ouS5n+aYr+Wkmui+ueW9oueahOS4gOenje+8iQogICAgICAgICAgX3RoaXM2LnBhdGggPSBzaGFwZS5nZXRQYXRoKCk7IC8vIOiOt+WPluWkmui+ueW9oueahOi3r+W+hOeCuQogICAgICAgICAgY29uc29sZS5sb2coIue7mOWItuWujOaIkOeahOWbvuW9ouexu+Weizog5aSa6L655b2i5oiW55+p5b2iIik7CiAgICAgICAgICBjb25zb2xlLmxvZygi6aG254K557uP57qs5bqm5pWw57uEOiIsIF90aGlzNi5wYXRoKTsKICAgICAgICAgIC8vIHRoaXMuZHJhd2luZ01hbmFnZXIuY2xvc2UoKTsKICAgICAgICAgIF90aGlzNi5kcmF3UG9seWdvbigpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9LAogICAgLy/lpJrovrnlvaLnu5jliLblvIDlkK8KICAgIHBvbHlnb25DbGljazogZnVuY3Rpb24gcG9seWdvbkNsaWNrKCkgewogICAgICB0aGlzLmRyYXdpbmdNYW5hZ2VyLmNsb3NlKCk7CiAgICAgIHRoaXMuaXNQb2x5Z29uID0gIXRoaXMuaXNQb2x5Z29uOwogICAgICBpZiAodGhpcy5pc1BvbHlnb24pIHsKICAgICAgICB0aGlzLmRyYXdpbmdNYW5hZ2VyLmNsb3NlKCk7IC8vIOWFs+mXree7mOWbvuaooeW8jwogICAgICAgIHRoaXMuZW5hYmxlRWRpdGluZygpOwogICAgICAgIGNvbnNvbGUubG9nKCcxMTExMScpOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnNvbGUubG9nKCcyMjIyMicpOwogICAgICAgIC8vIGlmICh0aGlzLmN1cnJlbnRPdmVybGF5KSB7CiAgICAgICAgLy8gICB0aGlzLmNsZWFyQWxsRHJhd2luZ3MoKTsKICAgICAgICAvLyB9CiAgICAgICAgdGhpcy5kcmF3UG9seWdvbigpOwogICAgICB9CiAgICB9LAogICAgLy/lvIDlkK/nu5jliLblm77lvaLnvJbovpHmqKHlvI8KICAgIGVuYWJsZUVkaXRpbmc6IGZ1bmN0aW9uIGVuYWJsZUVkaXRpbmcoKSB7CiAgICAgIGlmICghdGhpcy5jdXJyZW50T3ZlcmxheSkgewogICAgICAgIGFsZXJ0KCLor7flhYjnu5jliLblm77lvaLvvIEiKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKHRoaXMuY3VycmVudE92ZXJsYXkgaW5zdGFuY2VvZiBBTWFwLlBvbHlnb24pIHsKICAgICAgICBpZiAodGhpcy5hY3RpdmVFZGl0b3IpIHsKICAgICAgICAgIHRoaXMuYWN0aXZlRWRpdG9yLmNsb3NlKCk7IC8vIOWFs+mXreS5i+WJjeeahOe8lui+keWZqAogICAgICAgIH0KICAgICAgICB0aGlzLmFjdGl2ZUVkaXRvciA9IG5ldyBBTWFwLlBvbHlFZGl0b3IodGhpcy5tYXAsIHRoaXMuY3VycmVudE92ZXJsYXksIHRoaXMuZWRpdG9yT3B0aW9ucyk7CiAgICAgICAgY29uc29sZS5sb2coImFjdGl2ZUVkaXRvciIsIHRoaXMuYWN0aXZlRWRpdG9yKTsKICAgICAgICB0aGlzLmFjdGl2ZUVkaXRvci5vcGVuKCk7CiAgICAgIH0KICAgIH0sCiAgICAvL+a4heepuuaJgOaciee7mOWItuWbvuW9ogogICAgY2xlYXJBbGxBcGk6IGZ1bmN0aW9uIGNsZWFyQWxsQXBpKCkgewogICAgICB2YXIgX3RoaXM3ID0gdGhpczsKICAgICAgdGhpcy4kY29uZmlybSgn56Gu5a6a5Yig6Zmk6K+l5Yy65Z+f5ZCX77yfJywgJ+aPkOekuicsIHsKICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogJ+ehruiupCcsCiAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogJ+WPlua2iCcsCiAgICAgICAgdHlwZTogJ3dhcm5pbmcnCiAgICAgIH0pLnRoZW4oLyojX19QVVJFX18qL19hc3luY1RvR2VuZXJhdG9yKC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3JSdW50aW1lKCkubWFyayhmdW5jdGlvbiBfY2FsbGVlMigpIHsKICAgICAgICB2YXIgX3lpZWxkJHRhYmxlRGVsZXRlLCBzdGF0ZTsKICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZSgpLndyYXAoZnVuY3Rpb24gX2NhbGxlZTIkKF9jb250ZXh0MikgewogICAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQyLnByZXYgPSBfY29udGV4dDIubmV4dCkgewogICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgX2NvbnRleHQyLm5leHQgPSAyOwogICAgICAgICAgICAgIHJldHVybiB0YWJsZURlbGV0ZShfdGhpczcucm9hZElkKTsKICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgIF95aWVsZCR0YWJsZURlbGV0ZSA9IF9jb250ZXh0Mi5zZW50OwogICAgICAgICAgICAgIHN0YXRlID0gX3lpZWxkJHRhYmxlRGVsZXRlLnN0YXRlOwogICAgICAgICAgICAgIGlmICghc3RhdGUpIHsKICAgICAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gMTE7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX3RoaXM3LmlzUG9seWdvbiA9IHRydWU7CiAgICAgICAgICAgICAgX3RoaXM3LiRtZXNzYWdlLnN1Y2Nlc3MoIlx1NTIyMFx1OTY2NFx1NjIxMFx1NTI5RiIpOwogICAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gOTsKICAgICAgICAgICAgICByZXR1cm4gX3RoaXM3LmdldE9yZ1RyZWVEYXRhKGZ1bmN0aW9uICh0cmVlRGF0YSkgewogICAgICAgICAgICAgICAgX3RoaXM3LmRyYXdTYXZlZFBvbHlnb24oKTsKICAgICAgICAgICAgICAgIF90aGlzNy5pc0VkaXQgPSBmYWxzZTsKICAgICAgICAgICAgICAgIF90aGlzNy4kbmV4dFRpY2soZnVuY3Rpb24gKF8pIHsKICAgICAgICAgICAgICAgICAgdmFyIF90aGlzNyQkcmVmcyR0cmVlU2lkZSwgX3RoaXM3JCRyZWZzJHRyZWVTaWRlMjsKICAgICAgICAgICAgICAgICAgKF90aGlzNyQkcmVmcyR0cmVlU2lkZSA9IF90aGlzNy4kcmVmcy50cmVlU2lkZSkgPT09IG51bGwgfHwgX3RoaXM3JCRyZWZzJHRyZWVTaWRlID09PSB2b2lkIDAgfHwgX3RoaXM3JCRyZWZzJHRyZWVTaWRlLnNldEN1cnJlbnRLZXkoX3RoaXM3LnJvYWRJZCk7CiAgICAgICAgICAgICAgICAgIChfdGhpczckJHJlZnMkdHJlZVNpZGUyID0gX3RoaXM3LiRyZWZzLnRyZWVTaWRlKSA9PT0gbnVsbCB8fCBfdGhpczckJHJlZnMkdHJlZVNpZGUyID09PSB2b2lkIDAgfHwgX3RoaXM3JCRyZWZzJHRyZWVTaWRlMi5leHBhbmRIYW5kbGUodHJ1ZSwgMik7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgY2FzZSA5OgogICAgICAgICAgICAgIF90aGlzNy5jbGVhckFsbERyYXdpbmdzKCk7CiAgICAgICAgICAgICAgX3RoaXM3LmNsZWFyUG9seWdvbnMoKTsKICAgICAgICAgICAgY2FzZSAxMToKICAgICAgICAgICAgY2FzZSAiZW5kIjoKICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLnN0b3AoKTsKICAgICAgICAgIH0KICAgICAgICB9LCBfY2FsbGVlMik7CiAgICAgIH0pKSkuY2F0Y2goZnVuY3Rpb24gKF8pIHsKICAgICAgICByZXR1cm4gXzsKICAgICAgfSk7CiAgICB9LAogICAgY2xlYXJBbGw6IGZ1bmN0aW9uIGNsZWFyQWxsKCkgewogICAgICB0aGlzLmlzUG9seWdvbiA9IGZhbHNlOwogICAgICB0aGlzLmlzRWRpdCA9IGZhbHNlOwogICAgICB0aGlzLmVuYWJsZUVkaXRpbmcoKTsKICAgICAgdGhpcy5jbGVhckFsbERyYXdpbmdzKCk7CiAgICAgIHRoaXMuY2xlYXJQb2x5Z29ucygpOwogICAgfSwKICAgIC8v55So5p2l5riF56m65omA5pyJ55qE57uY5Yi25Zu+5b2iCiAgICBjbGVhckFsbERyYXdpbmdzOiBmdW5jdGlvbiBjbGVhckFsbERyYXdpbmdzKCkgewogICAgICB0aGlzLm1hcC5jbGVhck1hcCgpOwogICAgfSwKICAgIC8v55So5p2l5riF56m657uY5Yi25aSa6L655b2i5Zu+5b2iCiAgICBjbGVhclBvbHlnb25zOiBmdW5jdGlvbiBjbGVhclBvbHlnb25zKCkgewogICAgICB0aGlzLm1hcC5jbGVhck1hcCgpOwogICAgfSwKICAgIC8v5aSa6L655b2i5Zue5pi+CiAgICBkcmF3UG9seWdvbjogZnVuY3Rpb24gZHJhd1BvbHlnb24oKSB7CiAgICAgIHRoaXMuZHJhd2luZ01hbmFnZXIucG9seWdvbih7CiAgICAgICAgc3Ryb2tlQ29sb3I6ICdyZWQnLAogICAgICAgIC8vIOaPj+i+ueminOiJsgogICAgICAgIHN0cm9rZU9wYWNpdHk6IDEsCiAgICAgICAgLy8g5o+P6L656YCP5piO5bqmCiAgICAgICAgc3Ryb2tlV2VpZ2h0OiAzLAogICAgICAgIC8vIOaPj+i+ueWuveW6pgogICAgICAgIGZpbGxDb2xvcjogJ3JlZCcsCiAgICAgICAgLy8g5aGr5YWF6aKc6ImyCiAgICAgICAgZmlsbE9wYWNpdHk6IDAuNSAvLyDloavlhYXpgI/mmI7luqYKICAgICAgfSk7CiAgICB9LAogICAgLy8g5L+d5a2YCiAgICBwcmVzZXJ2YXRpb246IGZ1bmN0aW9uIHByZXNlcnZhdGlvbigpIHsKICAgICAgdmFyIF90aGlzOCA9IHRoaXM7CiAgICAgIHJldHVybiBfYXN5bmNUb0dlbmVyYXRvcigvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoZnVuY3Rpb24gX2NhbGxlZTMoKSB7CiAgICAgICAgdmFyIHBhcmFtLCBfcmVmMiwgc3RhdGU7CiAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUoKS53cmFwKGZ1bmN0aW9uIF9jYWxsZWUzJChfY29udGV4dDMpIHsKICAgICAgICAgIHdoaWxlICgxKSBzd2l0Y2ggKF9jb250ZXh0My5wcmV2ID0gX2NvbnRleHQzLm5leHQpIHsKICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgIHBhcmFtID0gewogICAgICAgICAgICAgICAgaWQ6IF90aGlzOC5pc0VkaXQgPyBfdGhpczguaWQgOiAnJywKICAgICAgICAgICAgICAgIHRlYW1JZDogX3RoaXM4LnJvYWRJZCwKICAgICAgICAgICAgICAgIGNvb3JkaW5hdGU6IEpTT04uc3RyaW5naWZ5KF90aGlzOC5wYXRoKQogICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgaWYgKCFfdGhpczguaXNFZGl0KSB7CiAgICAgICAgICAgICAgICBfY29udGV4dDMubmV4dCA9IDc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX2NvbnRleHQzLm5leHQgPSA0OwogICAgICAgICAgICAgIHJldHVybiBlZGl0UG9pbnRTYXZpbmcocGFyYW0pOwogICAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgICAgX2NvbnRleHQzLnQwID0gX2NvbnRleHQzLnNlbnQ7CiAgICAgICAgICAgICAgX2NvbnRleHQzLm5leHQgPSAxMDsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSA3OgogICAgICAgICAgICAgIF9jb250ZXh0My5uZXh0ID0gOTsKICAgICAgICAgICAgICByZXR1cm4gcG9pbnRTYXZpbmcocGFyYW0pOwogICAgICAgICAgICBjYXNlIDk6CiAgICAgICAgICAgICAgX2NvbnRleHQzLnQwID0gX2NvbnRleHQzLnNlbnQ7CiAgICAgICAgICAgIGNhc2UgMTA6CiAgICAgICAgICAgICAgX3JlZjIgPSBfY29udGV4dDMudDA7CiAgICAgICAgICAgICAgc3RhdGUgPSBfcmVmMi5zdGF0ZTsKICAgICAgICAgICAgICBpZiAoIXN0YXRlKSB7CiAgICAgICAgICAgICAgICBfY29udGV4dDMubmV4dCA9IDE5OwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF90aGlzOC5pc1BvbHlnb24gPSB0cnVlOwogICAgICAgICAgICAgIF90aGlzOC5jbGVhckFsbERyYXdpbmdzKCk7CiAgICAgICAgICAgICAgX3RoaXM4LmNsZWFyUG9seWdvbnMoKTsKICAgICAgICAgICAgICBfY29udGV4dDMubmV4dCA9IDE4OwogICAgICAgICAgICAgIHJldHVybiBfdGhpczguZ2V0T3JnVHJlZURhdGEoZnVuY3Rpb24gKHRyZWVEYXRhKSB7CiAgICAgICAgICAgICAgICBfdGhpczguZHJhd1NhdmVkUG9seWdvbigpOwogICAgICAgICAgICAgICAgX3RoaXM4LmRyYXdpbmdNYW5hZ2VyLmNsb3NlKCk7CiAgICAgICAgICAgICAgICBfdGhpczguaXNFZGl0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgIF90aGlzOC4kbmV4dFRpY2soZnVuY3Rpb24gKF8pIHsKICAgICAgICAgICAgICAgICAgdmFyIF90aGlzOCQkcmVmcyR0cmVlU2lkZSwgX3RoaXM4JCRyZWZzJHRyZWVTaWRlMjsKICAgICAgICAgICAgICAgICAgKF90aGlzOCQkcmVmcyR0cmVlU2lkZSA9IF90aGlzOC4kcmVmcy50cmVlU2lkZSkgPT09IG51bGwgfHwgX3RoaXM4JCRyZWZzJHRyZWVTaWRlID09PSB2b2lkIDAgfHwgX3RoaXM4JCRyZWZzJHRyZWVTaWRlLnNldEN1cnJlbnRLZXkoX3RoaXM4LnJvYWRJZCk7CiAgICAgICAgICAgICAgICAgIChfdGhpczgkJHJlZnMkdHJlZVNpZGUyID0gX3RoaXM4LiRyZWZzLnRyZWVTaWRlKSA9PT0gbnVsbCB8fCBfdGhpczgkJHJlZnMkdHJlZVNpZGUyID09PSB2b2lkIDAgfHwgX3RoaXM4JCRyZWZzJHRyZWVTaWRlMi5leHBhbmRIYW5kbGUodHJ1ZSwgMik7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgY2FzZSAxODoKICAgICAgICAgICAgICBfdGhpczguJG1lc3NhZ2Uuc3VjY2Vzcygn5L+d5a2Y5oiQ5YqfJyk7CiAgICAgICAgICAgIGNhc2UgMTk6CiAgICAgICAgICAgIGNhc2UgImVuZCI6CiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0My5zdG9wKCk7CiAgICAgICAgICB9CiAgICAgICAgfSwgX2NhbGxlZTMpOwogICAgICB9KSkoKTsKICAgIH0sCiAgICAvLyDlm57mmL4g6K+m5oOFCiAgICBkcmF3U2F2ZWRQb2x5Z29uOiBmdW5jdGlvbiBkcmF3U2F2ZWRQb2x5Z29uKCkgewogICAgICB2YXIgX3RoaXM5ID0gdGhpczsKICAgICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3JSdW50aW1lKCkubWFyayhmdW5jdGlvbiBfY2FsbGVlNCgpIHsKICAgICAgICB2YXIgdGVhbUlkcywgZGVhbFBvbHlnb25BcnIsIF95aWVsZCRnZXRGZW5lYywgc3RhdGUsIHZhbHVlLCBpLCBfdmFsdWUkaSwgYXJyYXksIHBhdGg7CiAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUoKS53cmFwKGZ1bmN0aW9uIF9jYWxsZWU0JChfY29udGV4dDQpIHsKICAgICAgICAgIHdoaWxlICgxKSBzd2l0Y2ggKF9jb250ZXh0NC5wcmV2ID0gX2NvbnRleHQ0Lm5leHQpIHsKICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgIF90aGlzOS5tYXBMb2FkaW5nID0gdHJ1ZTsKICAgICAgICAgICAgICB0ZWFtSWRzID0gW107CiAgICAgICAgICAgICAgZGVhbFBvbHlnb25BcnIgPSBbXTsKICAgICAgICAgICAgICBpZiAoX3RoaXM5LnJvYWRMaXN0ID4gMCkgewogICAgICAgICAgICAgICAgdGVhbUlkcyA9IF90aGlzOS5yb2FkTGlzdDsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGVhbUlkcy5wdXNoKF90aGlzOS5yb2FkSWQpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBfY29udGV4dDQubmV4dCA9IDY7CiAgICAgICAgICAgICAgcmV0dXJuIGdldEZlbmVjKHRlYW1JZHMpOwogICAgICAgICAgICBjYXNlIDY6CiAgICAgICAgICAgICAgX3lpZWxkJGdldEZlbmVjID0gX2NvbnRleHQ0LnNlbnQ7CiAgICAgICAgICAgICAgc3RhdGUgPSBfeWllbGQkZ2V0RmVuZWMuc3RhdGU7CiAgICAgICAgICAgICAgdmFsdWUgPSBfeWllbGQkZ2V0RmVuZWMudmFsdWU7CiAgICAgICAgICAgICAgaWYgKHN0YXRlKSB7CiAgICAgICAgICAgICAgICBfdGhpczkubWFwTG9hZGluZyA9IGZhbHNlOwogICAgICAgICAgICAgICAgLy8g5Yik5pat5aaC5p6c5piv57yW6L6R5pe2CiAgICAgICAgICAgICAgICBpZiAoX3RoaXM5LmlzRWRpdCkgewogICAgICAgICAgICAgICAgICBfdGhpczkuaWQgPSB2YWx1ZVswXS5pZDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIC8vIOWbnuaYvgogICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgIGFycmF5ID0gSlNPTi5wYXJzZSgoX3ZhbHVlJGkgPSB2YWx1ZVtpXSkgPT09IG51bGwgfHwgX3ZhbHVlJGkgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF92YWx1ZSRpLmNvb3JkaW5hdGUpOwogICAgICAgICAgICAgICAgICBwYXRoID0gYXJyYXkubWFwKGZ1bmN0aW9uIChjb29yZCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQU1hcC5MbmdMYXQoY29vcmQubG5nLCBjb29yZC5sYXQpOwogICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgX3RoaXM5LnBvbHlnb24gPSBuZXcgQU1hcC5Qb2x5Z29uKHsKICAgICAgICAgICAgICAgICAgICBwYXRoOiBwYXRoLAogICAgICAgICAgICAgICAgICAgIC8vIOS9v+eUqOS/neWtmOeahOmhtueCueWdkOagh+aVsOe7hOadpee7mOWItuWkmui+ueW9ogogICAgICAgICAgICAgICAgICAgIHN0cm9rZUNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICAvLyDmj4/ovrnpopzoibIKICAgICAgICAgICAgICAgICAgICBzdHJva2VPcGFjaXR5OiAxLAogICAgICAgICAgICAgICAgICAgIC8vIOaPj+i+uemAj+aYjuW6pgogICAgICAgICAgICAgICAgICAgIHN0cm9rZVdlaWdodDogMywKICAgICAgICAgICAgICAgICAgICAvLyDmj4/ovrnlrr3luqYKICAgICAgICAgICAgICAgICAgICBmaWxsQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIC8vIOWhq+WFheminOiJsgogICAgICAgICAgICAgICAgICAgIGZpbGxPcGFjaXR5OiAwLjUKICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgIGRlYWxQb2x5Z29uQXJyLnB1c2goX3RoaXM5LnBvbHlnb24pOwogICAgICAgICAgICAgICAgICBfdGhpczkucG9seWdvbi5zZXRNYXAoX3RoaXM5Lm1hcCk7CiAgICAgICAgICAgICAgICAgIF90aGlzOS5tYXAuYWRkKGRlYWxQb2x5Z29uQXJyKTsKICAgICAgICAgICAgICAgICAgX3RoaXM5Lm1hcC5zZXRGaXRWaWV3KGRlYWxQb2x5Z29uQXJyKTsKICAgICAgICAgICAgICAgICAgX3RoaXM5LmN1cnJlbnRPdmVybGF5ID0gX3RoaXM5LnBvbHlnb247CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gaWYodmFsdWUubGVuZ3RoID09PSAxKXsKICAgICAgICAgICAgICAgIC8vICAgdGhpcy5pZCA9IHZhbHVlWzBdLmlkCiAgICAgICAgICAgICAgICAvLyAgIGNvbnN0IHBhdGggPSBKU09OLnBhcnNlKHZhbHVlWzBdLmNvb3JkaW5hdGUpLm1hcChjb29yZCA9PiBuZXcgQU1hcC5MbmdMYXQoY29vcmQubG5nLCBjb29yZC5sYXQpKTsKICAgICAgICAgICAgICAgIC8vICAgdGhpcy5wb2x5Z29uID0gbmV3IEFNYXAuUG9seWdvbih7CiAgICAgICAgICAgICAgICAvLyAgICAgcGF0aDogcGF0aCwgLy8g5L2/55So5L+d5a2Y55qE6aG254K55Z2Q5qCH5pWw57uE5p2l57uY5Yi25aSa6L655b2iCiAgICAgICAgICAgICAgICAvLyAgICAgc3Ryb2tlQ29sb3I6ICdyZWQnLCAgIC8vIOaPj+i+ueminOiJsgogICAgICAgICAgICAgICAgLy8gICAgIHN0cm9rZU9wYWNpdHk6IDEsICAgICAgICAgLy8g5o+P6L656YCP5piO5bqmCiAgICAgICAgICAgICAgICAvLyAgICAgc3Ryb2tlV2VpZ2h0OiAzLCAgICAgICAgICAvLyDmj4/ovrnlrr3luqYKICAgICAgICAgICAgICAgIC8vICAgICBmaWxsQ29sb3I6ICdyZWQnLCAgICAgLy8g5aGr5YWF6aKc6ImyCiAgICAgICAgICAgICAgICAvLyAgICAgZmlsbE9wYWNpdHk6IDAuNQogICAgICAgICAgICAgICAgLy8gICB9KQogICAgICAgICAgICAgICAgLy8gICB0aGlzLnBvbHlnb24uc2V0TWFwKHRoaXMubWFwKQogICAgICAgICAgICAgICAgLy8gICAvLyB0aGlzLm1hcC5hZGQodGhpcy5wb2x5Z29uKTsKICAgICAgICAgICAgICAgIC8vICAgLy8gdGhpcy5tYXAuc2V0Rml0VmlldyhbdGhpcy5wb2x5Z29uXSkKICAgICAgICAgICAgICAgIC8vIH1lbHNlIGlmKHZhbHVlLmxlbmd0aD4xKXsKICAgICAgICAgICAgICAgIC8vICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgLy8gICAgIGxldCBhcnJheSA9IEpTT04ucGFyc2UodmFsdWVbaV0/LmNvb3JkaW5hdGUpCiAgICAgICAgICAgICAgICAvLyAgICAgY29uc3QgcGF0aCA9IGFycmF5Lm1hcChjb29yZCA9PiBuZXcgQU1hcC5MbmdMYXQoY29vcmQubG5nLCBjb29yZC5sYXQpKTsKICAgICAgICAgICAgICAgIC8vICAgICB0aGlzLnBvbHlnb24gPSBuZXcgQU1hcC5Qb2x5Z29uKHsKICAgICAgICAgICAgICAgIC8vICAgICAgIHBhdGg6IHBhdGgsIC8vIOS9v+eUqOS/neWtmOeahOmhtueCueWdkOagh+aVsOe7hOadpee7mOWItuWkmui+ueW9ogogICAgICAgICAgICAgICAgLy8gICAgICAgc3Ryb2tlQ29sb3I6ICdyZWQnLCAgIC8vIOaPj+i+ueminOiJsgogICAgICAgICAgICAgICAgLy8gICAgICAgc3Ryb2tlT3BhY2l0eTogMSwgICAgICAgICAvLyDmj4/ovrnpgI/mmI7luqYKICAgICAgICAgICAgICAgIC8vICAgICAgIHN0cm9rZVdlaWdodDogMywgICAgICAgICAgLy8g5o+P6L655a695bqmCiAgICAgICAgICAgICAgICAvLyAgICAgICBmaWxsQ29sb3I6ICdyZWQnLCAgICAgLy8g5aGr5YWF6aKc6ImyCiAgICAgICAgICAgICAgICAvLyAgICAgICBmaWxsT3BhY2l0eTogMC41CiAgICAgICAgICAgICAgICAvLyAgICAgfSkKICAgICAgICAgICAgICAgIC8vICAgICB0aGlzLnBvbHlnb24uc2V0TWFwKHRoaXMubWFwKQogICAgICAgICAgICAgICAgLy8gICB9CiAgICAgICAgICAgICAgICAvLyB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICBjYXNlIDEwOgogICAgICAgICAgICBjYXNlICJlbmQiOgogICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDQuc3RvcCgpOwogICAgICAgICAgfQogICAgICAgIH0sIF9jYWxsZWU0KTsKICAgICAgfSkpKCk7CiAgICB9CiAgfQp9Ow=="},null]}