{"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\\roadWatch\\InspectionPlan\\components\\EditAddPage\\index.vue?vue&type=script&lang=js","dependencies":[{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\src\\views\\patrolAndRescue\\roadWatch\\InspectionPlan\\components\\EditAddPage\\index.vue","mtime":1741464512716},{"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:aW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gIkQ6L2plbmtpbnMvd29ya3NwYWNlL3hjanktZnZ1ZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheS5qcyI7CmltcG9ydCBfcmVnZW5lcmF0b3JSdW50aW1lIGZyb20gIkQ6L2plbmtpbnMvd29ya3NwYWNlL3hjanktZnZ1ZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vcmVnZW5lcmF0b3JSdW50aW1lLmpzIjsKaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSAiRDovamVua2lucy93b3Jrc3BhY2UveGNqeS1mdnVlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyLmpzIjsKaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyBmcm9tICJEOi9qZW5raW5zL3dvcmtzcGFjZS94Y2p5LWZ2dWUvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzLmpzIjsKaW1wb3J0IF9hc3luY1RvR2VuZXJhdG9yIGZyb20gIkQ6L2plbmtpbnMvd29ya3NwYWNlL3hjanktZnZ1ZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXN5bmNUb0dlbmVyYXRvci5qcyI7CnZhciBfZXhjbHVkZWQgPSBbInJvYWRJZCIsICJmcmVxdWVuY3kiLCAicGxhblBhdHJvbERldGFpbHMiLCAicGxhblN0YXJ0RGF0ZSIsICJwbGFuRW5kRGF0ZSIsICJwbGFuSW50ZXJ2YWwiXSwKICBfZXhjbHVkZWQyID0gWyJzdGFydFBhdHJvbElkIiwgImVuZFBhdHJvbElkIiwgInJvYWRJZCIsICJzdGFydFBhdHJvbE5hbWUiLCAiZW5kUGF0cm9sTmFtZSIsICJwbGFuRGV0YWlscyIsICJwbGFuU3RhcnRFbmREYXRlIiwgInRpbWUiLCAicGxhbkludGVydmFsIl07CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuY29uY2F0LmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZmlsdGVyLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZmluZC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZpbmQtaW5kZXguanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5mbGF0LW1hcC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5Lm1hcC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnVuc2NvcGFibGVzLmZsYXQtbWFwLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuZnVuY3Rpb24ubmFtZS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLml0ZXJhdG9yLmNvbnN0cnVjdG9yLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuaXRlcmF0b3IuZmlsdGVyLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuaXRlcmF0b3IuZmluZC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLml0ZXJhdG9yLmZsYXQtbWFwLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuaXRlcmF0b3IuZm9yLWVhY2guanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5tYXAuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5zb21lLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmtleXMuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5mb3ItZWFjaC5qcyI7Ci8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCgppbXBvcnQgUHViU3ViIGZyb20gJ3B1YnN1Yi1qcyc7CmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JzsKaW1wb3J0ICdtb21lbnQtZHVyYXRpb24tZm9ybWF0JzsKaW1wb3J0IHsgcmVmaW5lUmVxdWVzdEJvZHkgfSBmcm9tICdAL3V0aWxzL3JlcXVlc3RXcmFwcGVycyc7CmltcG9ydCB7IGRpY3Rpb25hcnlFc2NhcGUsIGdldERpY3Rpb25hcnlCeUNvZGUgfSBmcm9tICdAL3V0aWxzL2RpY3Rpb25hcnknOwppbXBvcnQgeyB0YWJsZUFkZEVkaXQsIHRhYmxlRGV0YWlsIH0gZnJvbSAnQC9hcGkvcGF0cm9sQW5kUmVzY3VlL3JvYWRXYXRjaC9pbnNwZWN0aW9uUGxhbic7CmltcG9ydCB7IHRhYmxlRGF0YSBhcyBhbG9uZ1JvdXRlSW5mb0ludGVyIH0gZnJvbSAnQC9hcGkvcGF0cm9sQW5kUmVzY3VlL2luZm9NZ210UGF0cm9sc1Jlc2N1ZXMvYWxvbmdSb3V0ZUluZm8nOwppbXBvcnQgeyB0YWJsZURhdGEgYXMgdGVhbURhdGEgfSBmcm9tICdAL2FwaS9wYXRyb2xBbmRSZXNjdWUvaW5mb01nbXRQYXRyb2xzUmVzY3Vlcy9wYXRyb2xBbmRSZXNjdWVUZWFtc01nbXQnOwppbXBvcnQgeyBwb2ludFRyZWVEYXRhIH0gZnJvbSAnQC9hcGkvcGF0cm9sQW5kUmVzY3VlL2luZm9NZ210UGF0cm9sc1Jlc2N1ZXMvaW5zcGVjdGlvblBvaW50TWdtdCc7CmltcG9ydCB7IG9yZ1RyZWUgfSBmcm9tICdAL2FwaS9zeXN0ZW1JbnRlcmZhY2UnOwpleHBvcnQgZGVmYXVsdCB7CiAgbmFtZTogJ0VkaXRBZGRQYWdlJywKICBwcm9wczogewogICAgY29tcG9uZW50TmFtZTogewogICAgICBkZWZhdWx0OiAnVGFibGVQYWdlJywKICAgICAgdHlwZTogU3RyaW5nCiAgICB9CiAgfSwKICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkgewogICAgdmFyIF90aGlzID0gdGhpczsKICAgIHZhciB2YWxpZGF0ZVBsYW5EZXRhaWxzID0gZnVuY3Rpb24gdmFsaWRhdGVQbGFuRGV0YWlscyhfLCB2YWx1ZSwgY2FsbGJhY2spIHsKICAgICAgdmFyIF90aGlzJCRyZWZzJGFkZEVkaXRUcjsKICAgICAgdmFyIGFyciA9ICgoX3RoaXMkJHJlZnMkYWRkRWRpdFRyID0gX3RoaXMuJHJlZnMuYWRkRWRpdFRyZWUpID09PSBudWxsIHx8IF90aGlzJCRyZWZzJGFkZEVkaXRUciA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkJHJlZnMkYWRkRWRpdFRyLmdldENoZWNrZWRLZXlzKCkpIHx8IFtdOwogICAgICBpZiAoQXJyYXkuaXNBcnJheShhcnIpICYmIGFyci5sZW5ndGgpIHsKICAgICAgICBjYWxsYmFjaygpOwogICAgICB9IGVsc2UgewogICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcign5beh5qOA5YaF5a655LiN6IO95Li656m6JykpOwogICAgICB9CiAgICB9OwogICAgcmV0dXJuIHsKICAgICAgYWRkRWRpdEZvcm06IHsKICAgICAgICB3b3JrY2xhc3M6ICcxJywKICAgICAgICBmcmVxdWVuY3k6ICczJywKICAgICAgICByb2FkSWQ6ICcnLAogICAgICAgIHN0YXJ0UGF0cm9sSWQ6ICcnLAogICAgICAgIGVuZFBhdHJvbElkOiAnJywKICAgICAgICBwbGFuRGV0YWlsczogW10sCiAgICAgICAgcGxhblR5cGU6ICcxJywKICAgICAgICBpbnNwZWN0VHlwZTogJzEnLAogICAgICAgIHBsYW5DbGFzczogJ2NvbS5hcnRmZXNzLnJlc2N1ZS5wYXRyb2wuam9iLkluc3BlY3Rpb25QbGFuSm9iJywKICAgICAgICBwbGFuSW50ZXJ2YWw6ICcwMTowMDowMCcsCiAgICAgICAgdGltZTogW10KICAgICAgfSwKICAgICAgYWRkRWRpdFJ1bGVzOiB7CiAgICAgICAgd29ya2NsYXNzOiBbewogICAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgICBtZXNzYWdlOiAn54+t5qyh5LiN6IO95Li656m6JywKICAgICAgICAgIHRyaWdnZXI6ICdjaGFuZ2UnCiAgICAgICAgfV0sCiAgICAgICAgcGxhblR5cGU6IFt7CiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgICAgICAgIG1lc3NhZ2U6ICflt6Hmo4DnsbvlnovkuI3og73kuLrnqbonLAogICAgICAgICAgdHJpZ2dlcjogJ2NoYW5nZScKICAgICAgICB9XSwKICAgICAgICBpbnNwZWN0VHlwZTogW3sKICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLAogICAgICAgICAgbWVzc2FnZTogJ+W+gOi/lOexu+Wei+S4jeiDveS4uuepuicsCiAgICAgICAgICB0cmlnZ2VyOiAnY2hhbmdlJwogICAgICAgIH1dLAogICAgICAgIHJvYWRJZDogW3sKICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLAogICAgICAgICAgbWVzc2FnZTogJ+aJgOWxnui3r+auteS4jeiDveS4uuepuicsCiAgICAgICAgICB0cmlnZ2VyOiAnY2hhbmdlJwogICAgICAgIH1dLAogICAgICAgIHN0YXJ0UGF0cm9sSWQ6IFt7CiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgICAgICAgIG1lc3NhZ2U6ICflvIDlp4vlt6Hmo4Dnq5nkuI3og73kuLrnqbonLAogICAgICAgICAgdHJpZ2dlcjogJ2NoYW5nZScKICAgICAgICB9XSwKICAgICAgICBlbmRQYXRyb2xJZDogW3sKICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLAogICAgICAgICAgbWVzc2FnZTogJ+e7k+adn+W3oeajgOermeS4jeiDveS4uuepuicsCiAgICAgICAgICB0cmlnZ2VyOiAnY2hhbmdlJwogICAgICAgIH1dLAogICAgICAgIHRlYW1JZDogW3sKICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLAogICAgICAgICAgbWVzc2FnZTogJ+W3oeajgOmYn+S8jeS4jeiDveS4uuepuicsCiAgICAgICAgICB0cmlnZ2VyOiAnY2hhbmdlJwogICAgICAgIH1dLAogICAgICAgIHBsYW5EZXRhaWxzOiBbewogICAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgICB2YWxpZGF0b3I6IHZhbGlkYXRlUGxhbkRldGFpbHMsCiAgICAgICAgICB0cmlnZ2VyOiAnY2hhbmdlJwogICAgICAgIH1dLAogICAgICAgIGZyZXF1ZW5jeTogW3sKICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLAogICAgICAgICAgbWVzc2FnZTogJ+S7u+WKoemikeeOh+S4jeiDveS4uuepuicsCiAgICAgICAgICB0cmlnZ2VyOiAnY2hhbmdlJwogICAgICAgIH1dLAogICAgICAgIHBsYW5TdGFydEVuZERhdGU6IFt7CiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgICAgICAgIG1lc3NhZ2U6ICfnlJ/miJDku7vliqHml7bpl7TmrrXkuI3og73kuLrnqbonLAogICAgICAgICAgdHJpZ2dlcjogJ2NoYW5nZScKICAgICAgICB9XSwKICAgICAgICBwbGFuQ2xhc3M6IFt7CiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgICAgICAgIG1lc3NhZ2U6ICflrprml7bku7vliqHmiafooYznsbvkuI3og73kuLrnqbonLAogICAgICAgICAgdHJpZ2dlcjogJ2NoYW5nZScKICAgICAgICB9XQogICAgICB9LAogICAgICBwaWNrZXJPcHRpb25zOiB7CiAgICAgICAgLy8g5pe26Ze06YCJ5oup5Zmo5pe26Ze06IyD5Zu0CiAgICAgICAgZGlzYWJsZWREYXRlOiBmdW5jdGlvbiBkaXNhYmxlZERhdGUodGltZSkgewogICAgICAgICAgcmV0dXJuIG1vbWVudCh0aW1lKS5pc0JlZm9yZShtb21lbnQoKS5zdWJ0cmFjdCgxLCAnZGF5cycpKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHNhdmVMb2FkaW5nOiBmYWxzZSwKICAgICAgLy8g5LiK5LygbG9hZGluZwogICAgICBmb3JtTG9hZGluZzogdHJ1ZSwKICAgICAgLy8g5LiK5LygbG9hZGluZwogICAgICByb2FkQ2hvaWNlRGlhbG9nOiBmYWxzZSwKICAgICAgLy8g5piv5ZCm5bGV56S66YCJ5oup6Lev5q615by55bGCCiAgICAgIHRyZWVEYXRhOiBbXSwKICAgICAgLy8g57uE57uH5qCRCiAgICAgIHJvYWREYXRhOiBbXSwKICAgICAgLy8g6Lev5q615pWw5o2uCiAgICAgIGFsb25nUm91dGVJbmZvRGF0YTogW10sCiAgICAgIC8vIOayv+e6v+iuvuWkh+aVsOaNrgogICAgICBpbnNwZWN0aW9uUG9pbnRzRGF0YTogW10sCiAgICAgIC8vIOW3oeafpeWGheWuue+8iOagkeW9oueCueS9je+8ieaVsOaNrgogICAgICBhZGRFZGl0VHJlZVByb3BzOiB7CiAgICAgICAgY2hpbGRyZW46ICdjaGlsZHJlbicsCiAgICAgICAgbGFiZWw6ICduYW1lJywKICAgICAgICBkaXNhYmxlZDogZnVuY3Rpb24gZGlzYWJsZWQoZGF0YSkgewogICAgICAgICAgcmV0dXJuIGRhdGEubGV2ZWwgIT09ICc0JzsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGlkOiAnJywKICAgICAgLy8gaWTmoIfor4bnrKYKICAgICAgcHViU3ViOiBudWxsLAogICAgICB0cmVlTG9hZGluZzogZmFsc2UKICAgIH07CiAgfSwKICB3YXRjaDogewogICAgY29tcG9uZW50TmFtZTogewogICAgICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKG5ld1ZhbCkgewogICAgICAgIGlmIChuZXdWYWwgPT09IHRoaXMuJG9wdGlvbnMubmFtZSkgewogICAgICAgICAgdGhpcy5vcGVuUGFnZSgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLmNsb3NlUGFnZSgpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0sCiAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCgpIHsKICAgIC8vIHRoaXMuZ2V0T3JnVHJlZURhdGEoKQogICAgLy8gdGhpcy5nZXRSb2FkRGF0YSgpCiAgfSwKICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkgewogICAgdmFyIF90aGlzMiA9IHRoaXM7CiAgICB0aGlzLnB1YlN1YiA9IFB1YlN1Yi5zdWJzY3JpYmUoJ0VkaXRBZGRQYWdlJywgZnVuY3Rpb24gKF8sIGRhdGEpIHsKICAgICAgY29uc29sZS5sb2coZGF0YSwgJzk5OTk5OTk5OTk5OScpOwogICAgICBpZiAoZGF0YS5vcmdOYW1lKSB7CiAgICAgICAgX3RoaXMyLmFkZEVkaXRGb3JtLnJvYWROYW1lID0gZGF0YS5vcmdOYW1lOwogICAgICAgIF90aGlzMi5hZGRFZGl0Rm9ybS5yb2FkSWQgPSBkYXRhLmNhdGFsb2dJZDsKICAgICAgICBfdGhpczIuYWRkRWRpdEZvcm0ucm9hZENvZGUgPSBkYXRhLmNvZGU7CiAgICAgICAgX3RoaXMyLnJvYWRDaGFuZ2UoZGF0YS5jYXRhbG9nSWQpOwogICAgICB9CiAgICAgIC8vIOaWsOWinuaIluS/ruaUuQogICAgICBpZiAoZGF0YS5pZCkgewogICAgICAgIF90aGlzMi5pZCA9IGRhdGEuaWQ7CiAgICAgICAgX3RoaXMyLmdldERldGFpbChkYXRhLmlkKTsKICAgICAgfQogICAgICAvLyB0aGlzLmdldFJvYWREYXRhKCkKICAgIH0pOwogIH0sCiAgbWV0aG9kczogewogICAgdGVhbUNoYW5nZTogZnVuY3Rpb24gdGVhbUNoYW5nZSh2YWx1ZSkgewogICAgICB0aGlzLmFkZEVkaXRGb3JtLnRlYW1OYW1lID0gdGhpcy50cmVlRGF0YS5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgICByZXR1cm4gaXRlbS5pZCA9PT0gdmFsdWU7CiAgICAgIH0pWzBdLm5hbWU7CiAgICB9LAogICAgLy8g6I635Y+W6K+m5oOFCiAgICBnZXREZXRhaWw6IGZ1bmN0aW9uIGdldERldGFpbChpZCkgewogICAgICB2YXIgX3RoaXMzID0gdGhpczsKICAgICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3JSdW50aW1lKCkubWFyayhmdW5jdGlvbiBfY2FsbGVlKCkgewogICAgICAgIHZhciBfeWllbGQkdGFibGVEZXRhaWwsIF95aWVsZCR0YWJsZURldGFpbCRybywgcm9hZElkLCBfeWllbGQkdGFibGVEZXRhaWwkZnIsIGZyZXF1ZW5jeSwgX3lpZWxkJHRhYmxlRGV0YWlsJHBsLCBwbGFuUGF0cm9sRGV0YWlscywgX3lpZWxkJHRhYmxlRGV0YWlsJHBsMiwgcGxhblN0YXJ0RGF0ZSwgX3lpZWxkJHRhYmxlRGV0YWlsJHBsMywgcGxhbkVuZERhdGUsIF95aWVsZCR0YWJsZURldGFpbCRwbDQsIHBsYW5JbnRlcnZhbCwgYWRkRWRpdEZvcm0sIHBsYW5JbnRlcnZhbEFyciwgdGltZSwgcGxhbkRldGFpbHM7CiAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUoKS53cmFwKGZ1bmN0aW9uIF9jYWxsZWUkKF9jb250ZXh0KSB7CiAgICAgICAgICB3aGlsZSAoMSkgc3dpdGNoIChfY29udGV4dC5wcmV2ID0gX2NvbnRleHQubmV4dCkgewogICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgX2NvbnRleHQucHJldiA9IDA7CiAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDM7CiAgICAgICAgICAgICAgcmV0dXJuIHRhYmxlRGV0YWlsKGlkKTsKICAgICAgICAgICAgY2FzZSAzOgogICAgICAgICAgICAgIF95aWVsZCR0YWJsZURldGFpbCA9IF9jb250ZXh0LnNlbnQ7CiAgICAgICAgICAgICAgX3lpZWxkJHRhYmxlRGV0YWlsJHJvID0gX3lpZWxkJHRhYmxlRGV0YWlsLnJvYWRJZDsKICAgICAgICAgICAgICByb2FkSWQgPSBfeWllbGQkdGFibGVEZXRhaWwkcm8gPT09IHZvaWQgMCA/ICcnIDogX3lpZWxkJHRhYmxlRGV0YWlsJHJvOwogICAgICAgICAgICAgIF95aWVsZCR0YWJsZURldGFpbCRmciA9IF95aWVsZCR0YWJsZURldGFpbC5mcmVxdWVuY3k7CiAgICAgICAgICAgICAgZnJlcXVlbmN5ID0gX3lpZWxkJHRhYmxlRGV0YWlsJGZyID09PSB2b2lkIDAgPyAnJyA6IF95aWVsZCR0YWJsZURldGFpbCRmcjsKICAgICAgICAgICAgICBfeWllbGQkdGFibGVEZXRhaWwkcGwgPSBfeWllbGQkdGFibGVEZXRhaWwucGxhblBhdHJvbERldGFpbHM7CiAgICAgICAgICAgICAgcGxhblBhdHJvbERldGFpbHMgPSBfeWllbGQkdGFibGVEZXRhaWwkcGwgPT09IHZvaWQgMCA/IFtdIDogX3lpZWxkJHRhYmxlRGV0YWlsJHBsOwogICAgICAgICAgICAgIF95aWVsZCR0YWJsZURldGFpbCRwbDIgPSBfeWllbGQkdGFibGVEZXRhaWwucGxhblN0YXJ0RGF0ZTsKICAgICAgICAgICAgICBwbGFuU3RhcnREYXRlID0gX3lpZWxkJHRhYmxlRGV0YWlsJHBsMiA9PT0gdm9pZCAwID8gJycgOiBfeWllbGQkdGFibGVEZXRhaWwkcGwyOwogICAgICAgICAgICAgIF95aWVsZCR0YWJsZURldGFpbCRwbDMgPSBfeWllbGQkdGFibGVEZXRhaWwucGxhbkVuZERhdGU7CiAgICAgICAgICAgICAgcGxhbkVuZERhdGUgPSBfeWllbGQkdGFibGVEZXRhaWwkcGwzID09PSB2b2lkIDAgPyAnJyA6IF95aWVsZCR0YWJsZURldGFpbCRwbDM7CiAgICAgICAgICAgICAgX3lpZWxkJHRhYmxlRGV0YWlsJHBsNCA9IF95aWVsZCR0YWJsZURldGFpbC5wbGFuSW50ZXJ2YWw7CiAgICAgICAgICAgICAgcGxhbkludGVydmFsID0gX3lpZWxkJHRhYmxlRGV0YWlsJHBsNCA9PT0gdm9pZCAwID8gJycgOiBfeWllbGQkdGFibGVEZXRhaWwkcGw0OwogICAgICAgICAgICAgIGFkZEVkaXRGb3JtID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF95aWVsZCR0YWJsZURldGFpbCwgX2V4Y2x1ZGVkKTsKICAgICAgICAgICAgICBwbGFuSW50ZXJ2YWxBcnIgPSBwbGFuSW50ZXJ2YWwuc3BsaXQoJ3wnKS5maWx0ZXIoZnVuY3Rpb24gKGkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBpOwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIHRpbWUgPSAnJzsKICAgICAgICAgICAgICBwbGFuRGV0YWlscyA9IHBsYW5QYXRyb2xEZXRhaWxzLmZsYXRNYXAoZnVuY3Rpb24gKGkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBpLmlkID8gaS5pZCA6IFtdOwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIHJvYWRJZCA9IHJvYWRJZCB8fCAnJzsKICAgICAgICAgICAgICBpZiAocGxhbkludGVydmFsQXJyLmxlbmd0aCA9PT0gMikgewogICAgICAgICAgICAgICAgaWYgKGZyZXF1ZW5jeSA9PT0gJzUnKSB7CiAgICAgICAgICAgICAgICAgIHRpbWUgPSBwbGFuSW50ZXJ2YWxBcnJbMF0uc3BsaXQoJywnKSB8fCBbXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIHRpbWUgPSBwbGFuSW50ZXJ2YWxBcnJbMF0gfHwgJyc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF90aGlzMy5hZGRFZGl0Rm9ybSA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgYWRkRWRpdEZvcm0pLCB7fSwgewogICAgICAgICAgICAgICAgcm9hZElkOiByb2FkSWQsCiAgICAgICAgICAgICAgICBwbGFuRGV0YWlsczogcGxhbkRldGFpbHMsCiAgICAgICAgICAgICAgICBwbGFuU3RhcnRFbmREYXRlOiBwbGFuU3RhcnREYXRlICYmIHBsYW5FbmREYXRlID8gW3BsYW5TdGFydERhdGUsIHBsYW5FbmREYXRlXSA6IFtdLAogICAgICAgICAgICAgICAgdGltZTogdGltZSwKICAgICAgICAgICAgICAgIHBsYW5JbnRlcnZhbDogcGxhbkludGVydmFsQXJyW3BsYW5JbnRlcnZhbEFyci5sZW5ndGggLSAxXSB8fCAnJywKICAgICAgICAgICAgICAgIGZyZXF1ZW5jeTogZnJlcXVlbmN5CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgX3RoaXMzLnJvYWRDaGFuZ2Uocm9hZElkKTsKCiAgICAgICAgICAgICAgLy8gIOmAmui/h+i3r+auteS/oeaBr+iOt+WPluagkeW9oueCueS9jeOAgeWIneWni+WMluagkeWLvumAiQogICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAyNjsKICAgICAgICAgICAgICByZXR1cm4gX3RoaXMzLmdldEluc3BlY3Rpb25Qb2ludHNEYXRhKHJvYWRJZCwgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczMuaW5pdGlhbGl6ZVRyZWUocGxhbkRldGFpbHMpOwogICAgICAgICAgICAgICAgfSwgMCk7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGNhc2UgMjY6CiAgICAgICAgICAgICAgX2NvbnRleHQucHJldiA9IDI2OwogICAgICAgICAgICAgIF90aGlzMy5mb3JtTG9hZGluZyA9IGZhbHNlOwogICAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5maW5pc2goMjYpOwogICAgICAgICAgICBjYXNlIDI5OgogICAgICAgICAgICBjYXNlICJlbmQiOgogICAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5zdG9wKCk7CiAgICAgICAgICB9CiAgICAgICAgfSwgX2NhbGxlZSwgbnVsbCwgW1swLCwgMjYsIDI5XV0pOwogICAgICB9KSkoKTsKICAgIH0sCiAgICAvLyDojrflj5blhazlj7jmoJEKICAgIGdldE9yZ1RyZWVEYXRhOiBmdW5jdGlvbiBnZXRPcmdUcmVlRGF0YSgpIHsKICAgICAgdmFyIF90aGlzNCA9IHRoaXM7CiAgICAgIHJldHVybiBfYXN5bmNUb0dlbmVyYXRvcigvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoZnVuY3Rpb24gX2NhbGxlZTIoKSB7CiAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUoKS53cmFwKGZ1bmN0aW9uIF9jYWxsZWUyJChfY29udGV4dDIpIHsKICAgICAgICAgIHdoaWxlICgxKSBzd2l0Y2ggKF9jb250ZXh0Mi5wcmV2ID0gX2NvbnRleHQyLm5leHQpIHsKICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gMjsKICAgICAgICAgICAgICByZXR1cm4gb3JnVHJlZSgpOwogICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgX3RoaXM0LnRyZWVEYXRhID0gX2NvbnRleHQyLnNlbnQ7CiAgICAgICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgY2FzZSAiZW5kIjoKICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLnN0b3AoKTsKICAgICAgICAgIH0KICAgICAgICB9LCBfY2FsbGVlMik7CiAgICAgIH0pKSgpOwogICAgfSwKICAgIC8v6I635Y+W5omA5Zyo6Lev5q615YiX6KGo5pWw5o2uCiAgICAvLyBhc3luYyBnZXRSb2FkRGF0YSgpIHsKICAgIC8vICAgY29uc3QgeyByb3dzID0gW10gfSA9IGF3YWl0IHJvYWRTZWN0aW9uSW5mb0ludGVyKHsgcGFnZUJlYW46IHsgcGFnZVNpemU6IC0xIH0gfSkKICAgIC8vICAgdGhpcy5yb2FkRGF0YSA9IHJvd3MubWFwKGl0ZW0gPT4gewogICAgLy8gICAgIGl0ZW0ucm9hZE5hbWUgPSBpdGVtLm5hbWUgKyAnICcgKyBpdGVtLmNvZGUKICAgIC8vICAgICByZXR1cm4gaXRlbQogICAgLy8gICB9KQogICAgLy8gICBpZiAoIXRoaXMuaWQpIHsKICAgIC8vICAgICB0aGlzLmFkZEVkaXRGb3JtLnJvYWRJZCA9IHRoaXMucm9hZERhdGFbMF0uaWQKICAgIC8vICAgICB0aGlzLnJvYWRDaGFuZ2UodGhpcy5yb2FkRGF0YVswXS5pZCkKICAgIC8vICAgfQogICAgLy8gfSwKICAgIC8vIOiOt+WPlueCueS9jeagkeaVsOaNrgogICAgZ2V0SW5zcGVjdGlvblBvaW50c0RhdGE6IGZ1bmN0aW9uIGdldEluc3BlY3Rpb25Qb2ludHNEYXRhKCkgewogICAgICB2YXIgX2FyZ3VtZW50cyA9IGFyZ3VtZW50cywKICAgICAgICBfdGhpczUgPSB0aGlzOwogICAgICByZXR1cm4gX2FzeW5jVG9HZW5lcmF0b3IoLyojX19QVVJFX18qL19yZWdlbmVyYXRvclJ1bnRpbWUoKS5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUzKCkgewogICAgICAgIHZhciByb2FkSWQsIGNhbGxiYWNrLCBfeWllbGQkcG9pbnRUcmVlRGF0YSwgX3lpZWxkJHBvaW50VHJlZURhdGEkLCB2YWx1ZTsKICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZSgpLndyYXAoZnVuY3Rpb24gX2NhbGxlZTMkKF9jb250ZXh0MykgewogICAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQzLnByZXYgPSBfY29udGV4dDMubmV4dCkgewogICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgcm9hZElkID0gX2FyZ3VtZW50cy5sZW5ndGggPiAwICYmIF9hcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IF9hcmd1bWVudHNbMF0gOiAnJzsKICAgICAgICAgICAgICBjYWxsYmFjayA9IF9hcmd1bWVudHMubGVuZ3RoID4gMSA/IF9hcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgX2NvbnRleHQzLnByZXYgPSAyOwogICAgICAgICAgICAgIF90aGlzNS50cmVlTG9hZGluZyA9IHRydWU7CiAgICAgICAgICAgICAgX2NvbnRleHQzLm5leHQgPSA2OwogICAgICAgICAgICAgIHJldHVybiBwb2ludFRyZWVEYXRhKHsKICAgICAgICAgICAgICAgIC8vIHJvYWRJZDogQXJyYXkuaXNBcnJheShyb2FkSWQpID8gcm9hZElkLmpvaW4oKSA6ICcnCiAgICAgICAgICAgICAgICByb2FkSWQ6IHJvYWRJZAogICAgICAgICAgICAgIH0sICdhZGRFZGl0Jyk7CiAgICAgICAgICAgIGNhc2UgNjoKICAgICAgICAgICAgICBfeWllbGQkcG9pbnRUcmVlRGF0YSA9IF9jb250ZXh0My5zZW50OwogICAgICAgICAgICAgIF95aWVsZCRwb2ludFRyZWVEYXRhJCA9IF95aWVsZCRwb2ludFRyZWVEYXRhLnZhbHVlOwogICAgICAgICAgICAgIHZhbHVlID0gX3lpZWxkJHBvaW50VHJlZURhdGEkID09PSB2b2lkIDAgPyBbXSA6IF95aWVsZCRwb2ludFRyZWVEYXRhJDsKICAgICAgICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjayh2YWx1ZSk7CiAgICAgICAgICAgICAgX3RoaXM1Lmluc3BlY3Rpb25Qb2ludHNEYXRhID0gdmFsdWU7CiAgICAgICAgICAgICAgX2NvbnRleHQzLm5leHQgPSAxNjsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAxMzoKICAgICAgICAgICAgICBfY29udGV4dDMucHJldiA9IDEzOwogICAgICAgICAgICAgIF9jb250ZXh0My50MCA9IF9jb250ZXh0M1siY2F0Y2giXSgyKTsKICAgICAgICAgICAgICAvLyDkuI3kuLror7fmsYLov4flv6vnu5PmnZ/nmoTmg4XlhrXkuIvvvIzph43nva4KICAgICAgICAgICAgICBpZiAoX2NvbnRleHQzLnQwLm1lc3NhZ2UgIT09ICdjYW5jZWxlZCcpIGNhbGxiYWNrICYmIGNhbGxiYWNrKFtdKTsKICAgICAgICAgICAgY2FzZSAxNjoKICAgICAgICAgICAgICBfY29udGV4dDMucHJldiA9IDE2OwogICAgICAgICAgICAgIF90aGlzNS50cmVlTG9hZGluZyA9IGZhbHNlOwogICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDMuZmluaXNoKDE2KTsKICAgICAgICAgICAgY2FzZSAxOToKICAgICAgICAgICAgY2FzZSAiZW5kIjoKICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQzLnN0b3AoKTsKICAgICAgICAgIH0KICAgICAgICB9LCBfY2FsbGVlMywgbnVsbCwgW1syLCAxMywgMTYsIDE5XV0pOwogICAgICB9KSkoKTsKICAgIH0sCiAgICAvLyDpgJrov4fot6/mrrXkv6Hmga/ojrflj5bmsr/nur/orr7lpIfkv6Hmga8KICAgIGdldEFsb25nUm91dGVJbmZvOiBmdW5jdGlvbiBnZXRBbG9uZ1JvdXRlSW5mbyh2YWx1ZSwgY2FsbGJhY2spIHsKICAgICAgdmFyIF90aGlzNiA9IHRoaXM7CiAgICAgIHJldHVybiBfYXN5bmNUb0dlbmVyYXRvcigvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoZnVuY3Rpb24gX2NhbGxlZTQoKSB7CiAgICAgICAgdmFyIF93aXBlRGF0YSwgX3lpZWxkJGFsb25nUm91dGVJbmZvLCBfeWllbGQkYWxvbmdSb3V0ZUluZm8yLCByb3dzOwogICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lKCkud3JhcChmdW5jdGlvbiBfY2FsbGVlNCQoX2NvbnRleHQ0KSB7CiAgICAgICAgICB3aGlsZSAoMSkgc3dpdGNoIChfY29udGV4dDQucHJldiA9IF9jb250ZXh0NC5uZXh0KSB7CiAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICBfd2lwZURhdGEgPSBmdW5jdGlvbiBfd2lwZURhdGEoKSB7CiAgICAgICAgICAgICAgICBfdGhpczYuYWxvbmdSb3V0ZUluZm9EYXRhID0gW107CiAgICAgICAgICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjayhfdGhpczYuYWxvbmdSb3V0ZUluZm9EYXRhKTsKICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgIF9jb250ZXh0NC5wcmV2ID0gMTsKICAgICAgICAgICAgICBfY29udGV4dDQubmV4dCA9IDQ7CiAgICAgICAgICAgICAgcmV0dXJuIGFsb25nUm91dGVJbmZvSW50ZXIocmVmaW5lUmVxdWVzdEJvZHkoewogICAgICAgICAgICAgICAgcXVlcnlzOiBbewogICAgICAgICAgICAgICAgICBvcGVyYXRpb246ICdJTicsCiAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiAncm9hZF9zZWdtZW50X2lkXycsCiAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZQogICAgICAgICAgICAgICAgfV0KICAgICAgICAgICAgICB9KSwgJ2FkZEVkaXQnKTsKICAgICAgICAgICAgY2FzZSA0OgogICAgICAgICAgICAgIF95aWVsZCRhbG9uZ1JvdXRlSW5mbyA9IF9jb250ZXh0NC5zZW50OwogICAgICAgICAgICAgIF95aWVsZCRhbG9uZ1JvdXRlSW5mbzIgPSBfeWllbGQkYWxvbmdSb3V0ZUluZm8ucm93czsKICAgICAgICAgICAgICByb3dzID0gX3lpZWxkJGFsb25nUm91dGVJbmZvMiA9PT0gdm9pZCAwID8gW10gOiBfeWllbGQkYWxvbmdSb3V0ZUluZm8yOwogICAgICAgICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKHJvd3MpOwogICAgICAgICAgICAgIF90aGlzNi5hbG9uZ1JvdXRlSW5mb0RhdGEgPSByb3dzOwogICAgICAgICAgICAgIF9jb250ZXh0NC5uZXh0ID0gMTQ7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMTE6CiAgICAgICAgICAgICAgX2NvbnRleHQ0LnByZXYgPSAxMTsKICAgICAgICAgICAgICBfY29udGV4dDQudDAgPSBfY29udGV4dDRbImNhdGNoIl0oMSk7CiAgICAgICAgICAgICAgLy8g5LiN5Li66K+35rGC6L+H5b+r57uT5p2f55qE5oOF5Ya15LiL77yM6YeN572uCiAgICAgICAgICAgICAgaWYgKF9jb250ZXh0NC50MC5tZXNzYWdlICE9PSAnY2FuY2VsZWQnKSBfd2lwZURhdGEoKTsKICAgICAgICAgICAgY2FzZSAxNDoKICAgICAgICAgICAgY2FzZSAiZW5kIjoKICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ0LnN0b3AoKTsKICAgICAgICAgIH0KICAgICAgICB9LCBfY2FsbGVlNCwgbnVsbCwgW1sxLCAxMV1dKTsKICAgICAgfSkpKCk7CiAgICB9LAogICAgLy8g5omT5byA6aG16Z2i5omn6KGMCiAgICBvcGVuUGFnZTogZnVuY3Rpb24gb3BlblBhZ2UoKSB7fSwKICAgIC8vIOWFs+mXremhtemdouaJp+ihjAogICAgY2xvc2VQYWdlOiBmdW5jdGlvbiBjbG9zZVBhZ2UoKSB7CiAgICAgIHZhciBfdGhpczcgPSB0aGlzOwogICAgICB2YXIgYWRkRWRpdFJ1bGVzID0gdGhpcy5hZGRFZGl0UnVsZXMsCiAgICAgICAgcHViU3ViID0gdGhpcy5wdWJTdWIsCiAgICAgICAgdHJlZURhdGEgPSB0aGlzLnRyZWVEYXRhLAogICAgICAgIHJvYWREYXRhID0gdGhpcy5yb2FkRGF0YTsKICAgICAgdGhpcy5yZXNldFRyZWUoKTsKCiAgICAgIC8vIOmHjee9rue7hOS7tuaVsOaNrgogICAgICBPYmplY3QuYXNzaWduKHRoaXMuJGRhdGEsIHRoaXMuJG9wdGlvbnMuZGF0YS5jYWxsKHRoaXMpLCB7CiAgICAgICAgYWRkRWRpdFJ1bGVzOiBhZGRFZGl0UnVsZXMsCiAgICAgICAgcHViU3ViOiBwdWJTdWIsCiAgICAgICAgdHJlZURhdGE6IHRyZWVEYXRhLAogICAgICAgIHJvYWREYXRhOiByb2FkRGF0YQogICAgICB9KTsKICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKF8pIHsKICAgICAgICBfdGhpczcuJHJlZnMuYWRkRWRpdEZvcm0uJGVsLnNjcm9sbFRvcCA9IDA7CiAgICAgICAgX3RoaXM3LiRyZWZzLmFkZEVkaXRGb3JtLmNsZWFyVmFsaWRhdGUoKTsKICAgICAgfSk7CiAgICB9LAogICAgLy8g6YCa6L+HSlNPTuWvueixoeiOt+WPluWxnuaAp+WAvAogICAgZ2V0VmFsQnlKc29uOiBmdW5jdGlvbiBnZXRWYWxCeUpzb24oanNvbiwga2V5KSB7CiAgICAgIHZhciBfSlNPTiRwYXJzZTsKICAgICAgcmV0dXJuIChfSlNPTiRwYXJzZSA9IEpTT04ucGFyc2UoanNvbikpID09PSBudWxsIHx8IF9KU09OJHBhcnNlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfSlNPTiRwYXJzZVtrZXldOwogICAgfSwKICAgIC8vIOi3r+auteaUueWPmOWQjuinpuWPkQogICAgcm9hZENoYW5nZTogZnVuY3Rpb24gcm9hZENoYW5nZSh2YWx1ZSkgewogICAgICB2YXIgX3RoaXM4ID0gdGhpczsKICAgICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3JSdW50aW1lKCkubWFyayhmdW5jdGlvbiBfY2FsbGVlNSgpIHsKICAgICAgICB2YXIgX2ZpbmRJbmRleDsKICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZSgpLndyYXAoZnVuY3Rpb24gX2NhbGxlZTUkKF9jb250ZXh0NSkgewogICAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQ1LnByZXYgPSBfY29udGV4dDUubmV4dCkgewogICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIC8vIOagueaNrmlk5p+l6K+i5pWw5o2u57Si5byVCiAgICAgICAgICAgICAgICBfZmluZEluZGV4ID0gZnVuY3Rpb24gX2ZpbmRJbmRleCgpIHsKICAgICAgICAgICAgICAgICAgdmFyIGFyciA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogW107CiAgICAgICAgICAgICAgICAgIHZhciBpZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgICByZXR1cm4gYXJyID09PSBudWxsIHx8IGFyciA9PT0gdm9pZCAwID8gdm9pZCAwIDogYXJyLmZpbmRJbmRleChmdW5jdGlvbiAoaXRlbSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmlkID09PSBpZDsKICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9OyAvLyDmm7TmlrDmjpLluo8KICAgICAgICAgICAgICAgIC8vIHZhbHVlLnNvcnQoKGEsIGIpID0+IF9maW5kSW5kZXgodGhpcy5yb2FkRGF0YSwgYSkgLSBfZmluZEluZGV4KHRoaXMucm9hZERhdGEsIGIpKQogICAgICAgICAgICAgICAgLy8g6YCa6L+H6Lev5q615L+h5oGv6I635Y+W5beh5p+l6Zif5LyN5L+h5oGvCiAgICAgICAgICAgICAgICBfdGhpczguZ2V0VGVhbURhdGEodmFsdWUpOwoKICAgICAgICAgICAgICAgIC8vIOmAmui/h+i3r+auteS/oeaBr+iOt+WPluayv+e6v+iuvuWkh+S/oeaBrwogICAgICAgICAgICAgICAgX3RoaXM4LmdldEFsb25nUm91dGVJbmZvKHZhbHVlLCBmdW5jdGlvbiAoZGF0YSkgewogICAgICAgICAgICAgICAgICB2YXIgX3RoaXM4JGFkZEVkaXRGb3JtID0gX3RoaXM4LmFkZEVkaXRGb3JtLAogICAgICAgICAgICAgICAgICAgIHN0YXJ0UGF0cm9sSWQgPSBfdGhpczgkYWRkRWRpdEZvcm0uc3RhcnRQYXRyb2xJZCwKICAgICAgICAgICAgICAgICAgICBlbmRQYXRyb2xJZCA9IF90aGlzOCRhZGRFZGl0Rm9ybS5lbmRQYXRyb2xJZDsKCiAgICAgICAgICAgICAgICAgIC8qDQogICAgICAgICAgICAgICAgICAqIOW3oeajgOW8gOWni++8jOe7k+adn+ermQ0KICAgICAgICAgICAgICAgICAgKiAqLwogICAgICAgICAgICAgICAgICBpZiAoc3RhcnRQYXRyb2xJZCkgewogICAgICAgICAgICAgICAgICAgIGlmICghZGF0YS5zb21lKGZ1bmN0aW9uIChpKSB7CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaS5pZCA9PT0gc3RhcnRQYXRyb2xJZDsKICAgICAgICAgICAgICAgICAgICB9KSkgewogICAgICAgICAgICAgICAgICAgICAgX3RoaXM4LmFkZEVkaXRGb3JtLnN0YXJ0UGF0cm9sSWQgPSAnJzsKICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKF8pIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzOC4kbWVzc2FnZS53YXJuaW5nKCfor7fph43mlrDpgInmi6nlt6Hmo4DlvIDlp4vnq5kuLicpOwogICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChlbmRQYXRyb2xJZCkgewogICAgICAgICAgICAgICAgICAgIGlmICghZGF0YS5zb21lKGZ1bmN0aW9uIChpKSB7CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaS5pZCA9PT0gZW5kUGF0cm9sSWQ7CiAgICAgICAgICAgICAgICAgICAgfSkpIHsKICAgICAgICAgICAgICAgICAgICAgIF90aGlzOC5hZGRFZGl0Rm9ybS5lbmRQYXRyb2xJZCA9ICcnOwogICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoXykgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXM4LiRtZXNzYWdlLndhcm5pbmcoJ+ivt+mHjeaWsOmAieaLqeW3oeajgOe7k+adn+ermS4uJyk7CiAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIC8vIOmAmui/h+i3r+auteS/oeaBr+iOt+WPluW3oeajgOWGheWuueeCueS9jQogICAgICAgICAgICAgICAgX3RoaXM4LmdldEluc3BlY3Rpb25Qb2ludHNEYXRhKHZhbHVlLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDApIHJldHVybiBfdGhpczguYWRkRWRpdEZvcm0ucGxhbkRldGFpbHMgPSBbXTsKICAgICAgICAgICAgICAgICAgdmFyIF90aGlzOCRhZGRFZGl0Rm9ybSRwbCA9IF90aGlzOC5hZGRFZGl0Rm9ybS5wbGFuRGV0YWlscywKICAgICAgICAgICAgICAgICAgICBwbGFuRGV0YWlscyA9IF90aGlzOCRhZGRFZGl0Rm9ybSRwbCA9PT0gdm9pZCAwID8gW10gOiBfdGhpczgkYWRkRWRpdEZvcm0kcGw7CgogICAgICAgICAgICAgICAgICAvLyDpgb/lhY3liIfmjaLot6/mrrXlr7zoh7TnmoTngrnkvY3mlbDmja7kuI3lkIjms5UKICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoXykgewogICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczgkJHJlZnMkYWRkRWRpdFQ7CiAgICAgICAgICAgICAgICAgICAgX3RoaXM4LmluaXRpYWxpemVUcmVlKHBsYW5EZXRhaWxzKTsKICAgICAgICAgICAgICAgICAgICB2YXIgY2hlY2tOb2RlID0gKChfdGhpczgkJHJlZnMkYWRkRWRpdFQgPSBfdGhpczguJHJlZnMuYWRkRWRpdFRyZWUpID09PSBudWxsIHx8IF90aGlzOCQkcmVmcyRhZGRFZGl0VCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXM4JCRyZWZzJGFkZEVkaXRULmdldENoZWNrZWROb2RlcygpKSB8fCBbXTsKICAgICAgICAgICAgICAgICAgICBfdGhpczguYWRkRWRpdEZvcm0ucGxhbkRldGFpbHMgPSBwbGFuRGV0YWlscy5maWx0ZXIoZnVuY3Rpb24gKHBhdHJvbElkKSB7CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hlY2tOb2RlLmZpbmQoZnVuY3Rpb24gKGkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkuY29kZSA9PT0gcGF0cm9sSWQ7CiAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgfSwgMCk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgICAgX3RoaXM4LmZvcm1Mb2FkaW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgIGNhc2UgImVuZCI6CiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0NS5zdG9wKCk7CiAgICAgICAgICB9CiAgICAgICAgfSwgX2NhbGxlZTUpOwogICAgICB9KSkoKTsKICAgIH0sCiAgICAvLyDpgJrov4fot6/mrrXkv6Hmga/ojrflj5blt6Hmn6XpmJ/kvI3kv6Hmga8KICAgIGdldFRlYW1EYXRhOiBmdW5jdGlvbiBnZXRUZWFtRGF0YSh2YWx1ZSkgewogICAgICB2YXIgX3RoaXM5ID0gdGhpczsKICAgICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3JSdW50aW1lKCkubWFyayhmdW5jdGlvbiBfY2FsbGVlNigpIHsKICAgICAgICB2YXIgX3lpZWxkJHRlYW1EYXRhLCBfeWllbGQkdGVhbURhdGEkcm93cywgcm93czsKICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZSgpLndyYXAoZnVuY3Rpb24gX2NhbGxlZTYkKF9jb250ZXh0NikgewogICAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQ2LnByZXYgPSBfY29udGV4dDYubmV4dCkgewogICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgX2NvbnRleHQ2Lm5leHQgPSAyOwogICAgICAgICAgICAgIHJldHVybiB0ZWFtRGF0YShyZWZpbmVSZXF1ZXN0Qm9keSh7CiAgICAgICAgICAgICAgICBxdWVyeXM6IFt7CiAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbjogJ0lOJywKICAgICAgICAgICAgICAgICAgcHJvcGVydHk6ICdyLmlkXycsCiAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZQogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICBvcGVyYXRpb246ICdFUVVBTCcsCiAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiAndC50eXBlXycsCiAgICAgICAgICAgICAgICAgIHZhbHVlOiAnMScKICAgICAgICAgICAgICAgIH1dCiAgICAgICAgICAgICAgfSksICdhZGRFZGl0Jyk7CiAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICBfeWllbGQkdGVhbURhdGEgPSBfY29udGV4dDYuc2VudDsKICAgICAgICAgICAgICBfeWllbGQkdGVhbURhdGEkcm93cyA9IF95aWVsZCR0ZWFtRGF0YS5yb3dzOwogICAgICAgICAgICAgIHJvd3MgPSBfeWllbGQkdGVhbURhdGEkcm93cyA9PT0gdm9pZCAwID8gW10gOiBfeWllbGQkdGVhbURhdGEkcm93czsKICAgICAgICAgICAgICBfdGhpczkudHJlZURhdGEgPSByb3dzOwogICAgICAgICAgICBjYXNlIDY6CiAgICAgICAgICAgIGNhc2UgImVuZCI6CiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Ni5zdG9wKCk7CiAgICAgICAgICB9CiAgICAgICAgfSwgX2NhbGxlZTYpOwogICAgICB9KSkoKTsKICAgIH0sCiAgICAvLyDmoJHoioLngrnpgInkuK0KICAgIGNoZWNrQ2hhbmdlOiBmdW5jdGlvbiBjaGVja0NoYW5nZSgpIHsKICAgICAgdmFyIF90aGlzJCRyZWZzJGFkZEVkaXRUcjI7CiAgICAgIHRoaXMuYWRkRWRpdEZvcm0ucGxhbkRldGFpbHMgPSAoKF90aGlzJCRyZWZzJGFkZEVkaXRUcjIgPSB0aGlzLiRyZWZzLmFkZEVkaXRUcmVlKSA9PT0gbnVsbCB8fCBfdGhpcyQkcmVmcyRhZGRFZGl0VHIyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyQkcmVmcyRhZGRFZGl0VHIyLmdldENoZWNrZWRLZXlzKCkpIHx8IFtdOwogICAgfSwKICAgIC8vIOa4heepuuagkemAieS4rQogICAgY2xlYXJUcmVlU2VsZWN0OiBmdW5jdGlvbiBjbGVhclRyZWVTZWxlY3QoKSB7CiAgICAgIHRoaXMuJHJlZnMuYWRkRWRpdFRyZWUuc2V0Q2hlY2tlZEtleXMoW10pOwogICAgICB0aGlzLmFkZEVkaXRGb3JtLnBsYW5EZXRhaWxzID0gW107CiAgICB9LAogICAgLy8g6YeN572u5qCR54q25oCBCiAgICByZXNldFRyZWU6IGZ1bmN0aW9uIHJlc2V0VHJlZSgpIHsKICAgICAgdGhpcy5jbGVhclRyZWVTZWxlY3QoKTsKICAgICAgdGhpcy5jb2xsYXBzZUFsbE5vZGVzKGZhbHNlKTsKICAgIH0sCiAgICAvLyDmlLbotbfmiJblsZXlvIDmoJHmiYDmnInlsYLnuqcKICAgIGNvbGxhcHNlQWxsTm9kZXM6IGZ1bmN0aW9uIGNvbGxhcHNlQWxsTm9kZXMoKSB7CiAgICAgIHZhciBzdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogdHJ1ZTsKICAgICAgdmFyIG5vZGVzID0gdGhpcy4kcmVmcy5hZGRFZGl0VHJlZS5zdG9yZS5fZ2V0QWxsTm9kZXMoKTsKICAgICAgbm9kZXMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkgewogICAgICAgIHJldHVybiBpdGVtLmV4cGFuZGVkID0gc3RhdGU7CiAgICAgIH0pOwogICAgfSwKICAgIC8vIOWxleW8gOWLvumAieWxgue6p+eCueS9jQogICAgaW5pdGlhbGl6ZVRyZWU6IGZ1bmN0aW9uIGluaXRpYWxpemVUcmVlKCkgewogICAgICB2YXIgc2VsZWN0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBbXTsKICAgICAgaWYgKCEoQXJyYXkuaXNBcnJheShzZWxlY3QpICYmIHNlbGVjdC5sZW5ndGgpKSByZXR1cm47CiAgICAgIHZhciB0cmVlID0gdGhpcy4kcmVmcy5hZGRFZGl0VHJlZTsKICAgICAgLy8g6K6+572u5Yu+6YCJ55qE6IqC54K5CiAgICAgIHRyZWUuc2V0Q2hlY2tlZEtleXMoc2VsZWN0KTsKCiAgICAgIC8vIOiOt+WPluaJgOacieWLvumAieeahOiKgueCueW5tuWxleW8gOWFtueItuiKgueCuQogICAgICBzZWxlY3QuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7CiAgICAgICAgdmFyIG5vZGUgPSB0cmVlID09PSBudWxsIHx8IHRyZWUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRyZWUuZ2V0Tm9kZShrZXkpOwogICAgICAgIGlmIChub2RlKSB7CiAgICAgICAgICB2YXIgcGFyZW50ID0gbm9kZS5wYXJlbnQ7CiAgICAgICAgICB3aGlsZSAocGFyZW50KSB7CiAgICAgICAgICAgIHBhcmVudC5leHBhbmQoKTsKICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0pOwogICAgfSwKICAgIC8vIOS7u+WKoeexu+Wei+WIh+aNogogICAgZnJlcXVlbmN5Q2hhbmdlOiBmdW5jdGlvbiBmcmVxdWVuY3lDaGFuZ2UoKSB7CiAgICAgIHZhciBfdGhpczEwID0gdGhpczsKICAgICAgdGhpcy5hZGRFZGl0Rm9ybS5wbGFuSW50ZXJ2YWwgPSAnJzsKICAgICAgdGhpcy5hZGRFZGl0Rm9ybS50aW1lID0gW107CiAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uIChfKSB7CiAgICAgICAgX3RoaXMxMC4kcmVmcy5hZGRFZGl0Rm9ybS5jbGVhclZhbGlkYXRlKFsncGxhbkludGVydmFsJywgJ3RpbWUnLCAndGFza1R5cGUnXSk7CiAgICAgIH0pOwogICAgfSwKICAgIC8vIOS/neWtmAogICAgaGFuZGxlU2F2ZTogZnVuY3Rpb24gaGFuZGxlU2F2ZSgpIHsKICAgICAgdmFyIF90aGlzMTEgPSB0aGlzOwogICAgICB0aGlzLiRyZWZzLmFkZEVkaXRGb3JtLnZhbGlkYXRlKC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIF9yZWYgPSBfYXN5bmNUb0dlbmVyYXRvcigvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoZnVuY3Rpb24gX2NhbGxlZTcodmFsaWQsIG9iamVjdCkgewogICAgICAgICAgdmFyIF90aGlzMTEkYWRkRWRpdEZvcm0sIF90aGlzMTEkYWRkRWRpdEZvcm0kcywgc3RhcnRQYXRyb2xJZCwgX3RoaXMxMSRhZGRFZGl0Rm9ybSRlLCBlbmRQYXRyb2xJZCwgX3RoaXMxMSRhZGRFZGl0Rm9ybSRyLCByb2FkSWQsIF90aGlzMTEkYWRkRWRpdEZvcm0kczIsIHN0YXJ0UGF0cm9sTmFtZSwgX3RoaXMxMSRhZGRFZGl0Rm9ybSRlMiwgZW5kUGF0cm9sTmFtZSwgX3RoaXMxMSRhZGRFZGl0Rm9ybSRwLCBwbGFuRGV0YWlscywgX3RoaXMxMSRhZGRFZGl0Rm9ybSRwMiwgX3RoaXMxMSRhZGRFZGl0Rm9ybSRwMywgX3RoaXMxMSRhZGRFZGl0Rm9ybSRwNCwgX3RoaXMxMSRhZGRFZGl0Rm9ybSRwNSwgcGxhblN0YXJ0RGF0ZSwgX3RoaXMxMSRhZGRFZGl0Rm9ybSRwNiwgcGxhbkVuZERhdGUsIF90aGlzMTEkYWRkRWRpdEZvcm0kdCwgdGltZSwgX3RoaXMxMSRhZGRFZGl0Rm9ybSRwNywgcGxhbkludGVydmFsLCBhZGRFZGl0Rm9ybSwgcm9hZERhdGEsIGFsb25nUm91dGVJbmZvRGF0YSwgX3lpZWxkJHRhYmxlQWRkRWRpdCwgc3RhdGUsIG1lc3NhZ2U7CiAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZSgpLndyYXAoZnVuY3Rpb24gX2NhbGxlZTckKF9jb250ZXh0NykgewogICAgICAgICAgICB3aGlsZSAoMSkgc3dpdGNoIChfY29udGV4dDcucHJldiA9IF9jb250ZXh0Ny5uZXh0KSB7CiAgICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgICAgaWYgKHZhbGlkKSB7CiAgICAgICAgICAgICAgICAgIF9jb250ZXh0Ny5uZXh0ID0gNDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBfdGhpczExLiRtZXNzYWdlLndhcm5pbmcoIlx1NjcwOSIuY29uY2F0KE9iamVjdC5rZXlzKG9iamVjdCkubGVuZ3RoLCAiXHU0RTJBXHU1QjU3XHU2QkI1XHU2NzJBXHU5MDFBXHU4RkM3XHU2ODIxXHU5QThDXHVGRjBDXHU4QkY3XHU2QjYzXHU3ODZFXHU1ODZCXHU1MTk5XHU4ODY4XHU1MzU1XHU1MTg1XHU1QkI5XHUzMDAyIikpOwogICAgICAgICAgICAgICAgX2NvbnRleHQ3Lm5leHQgPSAxODsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgNDoKICAgICAgICAgICAgICAgIF90aGlzMTEuc2F2ZUxvYWRpbmcgPSB0cnVlOwogICAgICAgICAgICAgICAgY29uc29sZS5sb2coX3RoaXMxMS5hZGRFZGl0Rm9ybSk7CiAgICAgICAgICAgICAgICBfdGhpczExJGFkZEVkaXRGb3JtID0gX3RoaXMxMS5hZGRFZGl0Rm9ybSwgX3RoaXMxMSRhZGRFZGl0Rm9ybSRzID0gX3RoaXMxMSRhZGRFZGl0Rm9ybS5zdGFydFBhdHJvbElkLCBzdGFydFBhdHJvbElkID0gX3RoaXMxMSRhZGRFZGl0Rm9ybSRzID09PSB2b2lkIDAgPyAnJyA6IF90aGlzMTEkYWRkRWRpdEZvcm0kcywgX3RoaXMxMSRhZGRFZGl0Rm9ybSRlID0gX3RoaXMxMSRhZGRFZGl0Rm9ybS5lbmRQYXRyb2xJZCwgZW5kUGF0cm9sSWQgPSBfdGhpczExJGFkZEVkaXRGb3JtJGUgPT09IHZvaWQgMCA/ICcnIDogX3RoaXMxMSRhZGRFZGl0Rm9ybSRlLCBfdGhpczExJGFkZEVkaXRGb3JtJHIgPSBfdGhpczExJGFkZEVkaXRGb3JtLnJvYWRJZCwgcm9hZElkID0gX3RoaXMxMSRhZGRFZGl0Rm9ybSRyID09PSB2b2lkIDAgPyAnJyA6IF90aGlzMTEkYWRkRWRpdEZvcm0kciwgX3RoaXMxMSRhZGRFZGl0Rm9ybSRzMiA9IF90aGlzMTEkYWRkRWRpdEZvcm0uc3RhcnRQYXRyb2xOYW1lLCBzdGFydFBhdHJvbE5hbWUgPSBfdGhpczExJGFkZEVkaXRGb3JtJHMyID09PSB2b2lkIDAgPyAnJyA6IF90aGlzMTEkYWRkRWRpdEZvcm0kczIsIF90aGlzMTEkYWRkRWRpdEZvcm0kZTIgPSBfdGhpczExJGFkZEVkaXRGb3JtLmVuZFBhdHJvbE5hbWUsIGVuZFBhdHJvbE5hbWUgPSBfdGhpczExJGFkZEVkaXRGb3JtJGUyID09PSB2b2lkIDAgPyAnJyA6IF90aGlzMTEkYWRkRWRpdEZvcm0kZTIsIF90aGlzMTEkYWRkRWRpdEZvcm0kcCA9IF90aGlzMTEkYWRkRWRpdEZvcm0ucGxhbkRldGFpbHMsIHBsYW5EZXRhaWxzID0gX3RoaXMxMSRhZGRFZGl0Rm9ybSRwID09PSB2b2lkIDAgPyBbXSA6IF90aGlzMTEkYWRkRWRpdEZvcm0kcCwgX3RoaXMxMSRhZGRFZGl0Rm9ybSRwMiA9IF90aGlzMTEkYWRkRWRpdEZvcm0ucGxhblN0YXJ0RW5kRGF0ZSwgX3RoaXMxMSRhZGRFZGl0Rm9ybSRwMyA9IF90aGlzMTEkYWRkRWRpdEZvcm0kcDIgPT09IHZvaWQgMCA/IFtdIDogX3RoaXMxMSRhZGRFZGl0Rm9ybSRwMiwgX3RoaXMxMSRhZGRFZGl0Rm9ybSRwNCA9IF9zbGljZWRUb0FycmF5KF90aGlzMTEkYWRkRWRpdEZvcm0kcDMsIDIpLCBfdGhpczExJGFkZEVkaXRGb3JtJHA1ID0gX3RoaXMxMSRhZGRFZGl0Rm9ybSRwNFswXSwgcGxhblN0YXJ0RGF0ZSA9IF90aGlzMTEkYWRkRWRpdEZvcm0kcDUgPT09IHZvaWQgMCA/ICcnIDogX3RoaXMxMSRhZGRFZGl0Rm9ybSRwNSwgX3RoaXMxMSRhZGRFZGl0Rm9ybSRwNiA9IF90aGlzMTEkYWRkRWRpdEZvcm0kcDRbMV0sIHBsYW5FbmREYXRlID0gX3RoaXMxMSRhZGRFZGl0Rm9ybSRwNiA9PT0gdm9pZCAwID8gJycgOiBfdGhpczExJGFkZEVkaXRGb3JtJHA2LCBfdGhpczExJGFkZEVkaXRGb3JtJHQgPSBfdGhpczExJGFkZEVkaXRGb3JtLnRpbWUsIHRpbWUgPSBfdGhpczExJGFkZEVkaXRGb3JtJHQgPT09IHZvaWQgMCA/IFtdIDogX3RoaXMxMSRhZGRFZGl0Rm9ybSR0LCBfdGhpczExJGFkZEVkaXRGb3JtJHA3ID0gX3RoaXMxMSRhZGRFZGl0Rm9ybS5wbGFuSW50ZXJ2YWwsIHBsYW5JbnRlcnZhbCA9IF90aGlzMTEkYWRkRWRpdEZvcm0kcDcgPT09IHZvaWQgMCA/ICcnIDogX3RoaXMxMSRhZGRFZGl0Rm9ybSRwNywgYWRkRWRpdEZvcm0gPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMxMSRhZGRFZGl0Rm9ybSwgX2V4Y2x1ZGVkMik7IC8vIOe7k+aehOWHuui3r+auteWPiuayv+i3r+iuvuaWveaVsOaNrgogICAgICAgICAgICAgICAgcm9hZERhdGEgPSBfdGhpczExLnJvYWREYXRhLCBhbG9uZ1JvdXRlSW5mb0RhdGEgPSBfdGhpczExLmFsb25nUm91dGVJbmZvRGF0YTsgLy8g6I635Y+W5beh5qOA6ZifcGF0aOWPiuWQjeensAogICAgICAgICAgICAgICAgLy8gY29uc3QgewogICAgICAgICAgICAgICAgLy8gICBwYXRoOiB0ZWFtRnVsbElkID0gJycsCiAgICAgICAgICAgICAgICAvLyAgIG5hbWU6IHRlYW1OYW1lID0gJycKICAgICAgICAgICAgICAgIC8vIH0gPSB0aGlzLiRyZWZzLmNhc2NhZGVyPy5nZXRDaGVja2VkTm9kZXMoKVswXT8uZGF0YSB8fCB7fQogICAgICAgICAgICAgICAgLyoNCiAgICAgICAgICAgICAgICAqIOWkhOeQhuaVsOaNrg0KICAgICAgICAgICAgICAgICogZGljdGlvbmFyeUVzY2FwZeS4uui9rOS5ieWHveaVsA0KICAgICAgICAgICAgICAgICogKi8KICAgICAgICAgICAgICAgIF9jb250ZXh0Ny5wcmV2ID0gODsKICAgICAgICAgICAgICAgIF9jb250ZXh0Ny5uZXh0ID0gMTE7CiAgICAgICAgICAgICAgICByZXR1cm4gdGFibGVBZGRFZGl0KF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgYWRkRWRpdEZvcm0pLCB7fSwgewogICAgICAgICAgICAgICAgICBzdGFydFBhdHJvbElkOiBzdGFydFBhdHJvbElkLAogICAgICAgICAgICAgICAgICBlbmRQYXRyb2xJZDogZW5kUGF0cm9sSWQsCiAgICAgICAgICAgICAgICAgIHJvYWRJZDogcm9hZElkLAogICAgICAgICAgICAgICAgICAvLyByb2FkTmFtZTogcm9hZEluZm8ubmFtZSwKICAgICAgICAgICAgICAgICAgLy8gcm9hZENvZGU6IHJvYWRJbmZvLmNvZGUsCiAgICAgICAgICAgICAgICAgIHN0YXJ0UGF0cm9sTmFtZTogZGljdGlvbmFyeUVzY2FwZShhbG9uZ1JvdXRlSW5mb0RhdGEsIHN0YXJ0UGF0cm9sSWQsIHsKICAgICAgICAgICAgICAgICAgICB2YWx1ZUtleTogJ2lkJwogICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgZW5kUGF0cm9sTmFtZTogZGljdGlvbmFyeUVzY2FwZShhbG9uZ1JvdXRlSW5mb0RhdGEsIGVuZFBhdHJvbElkLCB7CiAgICAgICAgICAgICAgICAgICAgdmFsdWVLZXk6ICdpZCcKICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgIC8vIHRlYW1GdWxsSWQsCiAgICAgICAgICAgICAgICAgIC8vIHRlYW1OYW1lLAogICAgICAgICAgICAgICAgICBwbGFuRGV0YWlsczogcGxhbkRldGFpbHMubWFwKGZ1bmN0aW9uIChwYXRyb2xJZCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICBwYXRyb2xJZDogcGF0cm9sSWQKICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgcGxhblN0YXJ0RGF0ZTogcGxhblN0YXJ0RGF0ZSwKICAgICAgICAgICAgICAgICAgcGxhbkVuZERhdGU6IHBsYW5FbmREYXRlLAogICAgICAgICAgICAgICAgICBwbGFuSW50ZXJ2YWw6IHRpbWUubGVuZ3RoID8gIiIuY29uY2F0KHRpbWUsICJ8IikuY29uY2F0KHBsYW5JbnRlcnZhbCkgOiBwbGFuSW50ZXJ2YWwKICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICBjYXNlIDExOgogICAgICAgICAgICAgICAgX3lpZWxkJHRhYmxlQWRkRWRpdCA9IF9jb250ZXh0Ny5zZW50OwogICAgICAgICAgICAgICAgc3RhdGUgPSBfeWllbGQkdGFibGVBZGRFZGl0LnN0YXRlOwogICAgICAgICAgICAgICAgbWVzc2FnZSA9IF95aWVsZCR0YWJsZUFkZEVkaXQubWVzc2FnZTsKICAgICAgICAgICAgICAgIGlmIChzdGF0ZSkgewogICAgICAgICAgICAgICAgICBtZXNzYWdlID0gX3RoaXMxMS5pZCA/ICfnvJbovpEnIDogJ+aWsOWinic7CiAgICAgICAgICAgICAgICAgIF90aGlzMTEuJG1lc3NhZ2Uuc3VjY2VzcygiXHU1REUxXHU2OEMwXHU4QkExXHU1MjEyIi5jb25jYXQobWVzc2FnZSwgIlx1NjIxMFx1NTI5RiIpKTsKICAgICAgICAgICAgICAgICAgX3RoaXMxMS5jaGFuZ2VQYWdlKCdUYWJsZVBhZ2UnLCBfdGhpczExLmlkID8gJ2VkaXQnIDogJ2FkZCcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGNhc2UgMTU6CiAgICAgICAgICAgICAgICBfY29udGV4dDcucHJldiA9IDE1OwogICAgICAgICAgICAgICAgX3RoaXMxMS5zYXZlTG9hZGluZyA9IGZhbHNlOwogICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Ny5maW5pc2goMTUpOwogICAgICAgICAgICAgIGNhc2UgMTg6CiAgICAgICAgICAgICAgY2FzZSAiZW5kIjoKICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDcuc3RvcCgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9LCBfY2FsbGVlNywgbnVsbCwgW1s4LCwgMTUsIDE4XV0pOwogICAgICAgIH0pKTsKICAgICAgICByZXR1cm4gZnVuY3Rpb24gKF94LCBfeDIpIHsKICAgICAgICAgIHJldHVybiBfcmVmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgICAgfTsKICAgICAgfSgpKTsKICAgIH0sCiAgICAvLyDlsZXnpLrlvLnlsYIKICAgIHNob3dEaWFsb2c6IGZ1bmN0aW9uIHNob3dEaWFsb2coZGlhbG9nTmFtZSkgewogICAgICBpZiAoIWRpYWxvZ05hbWUpIHJldHVybjsKICAgICAgdGhpc1tkaWFsb2dOYW1lICsgJ0RpYWxvZyddID0gdHJ1ZTsKICAgIH0sCiAgICAvLyDmlLnlj5jpobXpnaIKICAgIGNoYW5nZVBhZ2U6IGZ1bmN0aW9uIGNoYW5nZVBhZ2UoKSB7CiAgICAgIHZhciBwYWdlTmFtZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogJyc7CiAgICAgIHZhciB0eXBlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAnJzsKICAgICAgaWYgKCFwYWdlTmFtZSkgcmV0dXJuOwogICAgICB0aGlzLiRlbWl0KCdjaGFuZ2VQYWdlJywgcGFnZU5hbWUsIGZ1bmN0aW9uIChfKSB7CiAgICAgICAgUHViU3ViLnB1Ymxpc2gocGFnZU5hbWUsIHsKICAgICAgICAgIHR5cGU6IHR5cGUKICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9LAogICAgbW9tZW50OiBtb21lbnQsCiAgICBnZXREaWN0aW9uYXJ5QnlDb2RlOiBnZXREaWN0aW9uYXJ5QnlDb2RlCiAgfSwKICBiZWZvcmVEZXN0cm95OiBmdW5jdGlvbiBiZWZvcmVEZXN0cm95KCkgewogICAgLy8g5Zyo57uE5Lu26ZSA5q+B5LmL5YmNIOa4hemZpOiuoumYhea2iOaBrwogICAgUHViU3ViLnVuc3Vic2NyaWJlKHRoaXMucHViU3ViKTsKICB9Cn07"},null]}