{"remainingRequest":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\thread-loader\\dist\\cjs.js!D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\babel-loader\\lib\\index.js!D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js??ref--0-0!D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\jenkins\\workspace\\dataShare-fvue\\src\\views\\dataResource\\dataServices\\dataServiceAPI\\index.vue?vue&type=script&lang=js","dependencies":[{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\src\\views\\dataResource\\dataServices\\dataServiceAPI\\index.vue","mtime":1749495331801},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\babel.config.js","mtime":1733906004399},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\thread-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\babel-loader\\lib\\index.js","mtime":456789000000},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\vue-loader\\lib\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:aW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gIkQ6L2plbmtpbnMvd29ya3NwYWNlL2RhdGFTaGFyZS1mdnVlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5LmpzIjsKaW1wb3J0IF9yZWdlbmVyYXRvclJ1bnRpbWUgZnJvbSAiRDovamVua2lucy93b3Jrc3BhY2UvZGF0YVNoYXJlLWZ2dWUvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3JlZ2VuZXJhdG9yUnVudGltZS5qcyI7CmltcG9ydCBfYXN5bmNUb0dlbmVyYXRvciBmcm9tICJEOi9qZW5raW5zL3dvcmtzcGFjZS9kYXRhU2hhcmUtZnZ1ZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXN5bmNUb0dlbmVyYXRvci5qcyI7CmltcG9ydCBfb2JqZWN0U3ByZWFkIGZyb20gIkQ6L2plbmtpbnMvd29ya3NwYWNlL2RhdGFTaGFyZS1mdnVlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuY29uY2F0LmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZmluZC1pbmRleC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmluY2x1ZGVzLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnNwbGljZS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmZ1bmN0aW9uLm5hbWUuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5jb25zdHJ1Y3Rvci5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLml0ZXJhdG9yLmZvci1lYWNoLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuanNvbi5zdHJpbmdpZnkuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuZW50cmllcy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5rZXlzLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvci5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy50cmltLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5mb3ItZWFjaC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3IuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy93ZWIudXJsLXNlYXJjaC1wYXJhbXMuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy93ZWIudXJsLXNlYXJjaC1wYXJhbXMuZGVsZXRlLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvd2ViLnVybC1zZWFyY2gtcGFyYW1zLmhhcy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL3dlYi51cmwtc2VhcmNoLXBhcmFtcy5zaXplLmpzIjsKLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KCmltcG9ydCBBUEkgZnJvbSAnQC9hcGkvYnVzaW5lc3MvZGF0YVNlcnZpY2VBUEknOwppbXBvcnQgU2VydmljZURpYWxvZyBmcm9tICcuLi9kYXRhU2VydmljZUFQSS9TZXJ2aWNlRGlhbG9nLnZ1ZSc7CmltcG9ydCBEZXRhaWxEaWFsb2cgZnJvbSAnLi9EZXRhaWxEaWFsb2cudnVlJzsKaW1wb3J0IEFkZERpYWxvZyBmcm9tICdAL3ZpZXdzL2RhdGFSZXNvdXJjZS9kYXRhU2VydmljZXMvZGF0YVNlcnZpY2VBUEkvQWRkRGlhbG9nLnZ1ZSc7CmltcG9ydCB0YWJsZU1peGluIGZyb20gJ0AvbWl4aW5zL3RhYmxlLmpzJzsgLy8g5YiX6KGobWl4aW5zCmltcG9ydCBTaG93RGlhbG9nIGZyb20gJ0Avdmlld3MvZGF0YVJlc291cmNlL2RhdGFTZXJ2aWNlcy9kYXRhU2VydmljZUFQSS9TaG93RGlhbG9nLnZ1ZSc7CmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7IC8vIOWcqOaWh+S7tumhtumDqOa3u+WKoApleHBvcnQgZGVmYXVsdCB7CiAgY29tcG9uZW50czogewogICAgRGV0YWlsRGlhbG9nOiBEZXRhaWxEaWFsb2csCiAgICBTZXJ2aWNlRGlhbG9nOiBTZXJ2aWNlRGlhbG9nLAogICAgU2hvd0RpYWxvZzogU2hvd0RpYWxvZywKICAgIEFkZERpYWxvZzogQWRkRGlhbG9nCiAgfSwKICBtaXhpbnM6IFt0YWJsZU1peGluXSwKICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkgewogICAgdmFyIF90aGlzID0gdGhpczsKICAgIC8vIOagkQogICAgdmFyIFRSRUVfQ09ORklHID0gewogICAgICBuYW1lOiAnJywKICAgICAgdHJlZUlkOiAnJywKICAgICAgdHJlZVByb3BzOiB7CiAgICAgICAgdmFsdWU6ICdpZCcsCiAgICAgICAgbGFiZWw6ICduYW1lJwogICAgICB9LAogICAgICBleHBhbmRBbGw6IGZhbHNlLAogICAgICBkZWZhdWx0RXhwYW5kZWRLZXlzOiBbJzAnXSwKICAgICAgLy8g5q2k5aSEZmllbGRz5YaF6YWN572u5a+56LGh5bGe5oCn5YyF5ousOiBsYWJlbC9wcm9wL3J1bGVzL3R5cGUo5p6a5Li+OnN3aXRjaC9udW1iZXIvaW5wdXQo6buY6K6kKSkvc3Bhbi8KICAgICAgdHJlZUZpZWxkczogW3sKICAgICAgICBsYWJlbDogJ+aOpeWPo+ebruW9leWQjeensCcsCiAgICAgICAgcHJvcDogJ25hbWUnLAogICAgICAgIGxhYmVsV2lkdGg6ICcxMjAnLAogICAgICAgIHJ1bGVzOiBbewogICAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgICBtZXNzYWdlOiAn5o6l5Y+j55uu5b2V5ZCN56ew5LiN6IO95Li656m6JwogICAgICAgIH1dCiAgICAgIH0sIHsKICAgICAgICBsYWJlbDogJ+aOpeWPo+ebruW9lee8lueggScsCiAgICAgICAgcHJvcDogJ2NvZGUnLAogICAgICAgIGxhYmVsV2lkdGg6ICcxMjAnLAogICAgICAgIHJ1bGVzOiBbewogICAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgICBtZXNzYWdlOiAn5o6l5Y+j55uu5b2V57yW56CB5LiN6IO95Li656m6JwogICAgICAgIH1dCiAgICAgIH1dLAogICAgICBjdXJOb2RlOiB7fSAvLyDlvZPliY3pgInmi6noioLngrkKICAgIH07CiAgICAvLyB0YWJsZeWIl+ihqAogICAgdmFyIFRBQkxFX0NPTkZJRyA9IHsKICAgICAgLy8gZmlsdGVyczogewogICAgICAvLyAgIGFwaU1vZGU6IDEsIC8vIOivt+axguaWueW8j+m7mOiupOS4ukdFVAogICAgICAvLyB9LAogICAgICBjcmVhdGVkTGlzdDogW3sKICAgICAgICBsYWJlbDogJ0dFVCcsCiAgICAgICAgdmFsdWU6ICcxJwogICAgICB9LCB7CiAgICAgICAgbGFiZWw6ICdQT1NUJywKICAgICAgICB2YWx1ZTogJzAnCiAgICAgIH1dLAogICAgICAvLyDliJfooajooajlpLQKICAgICAgY29sdW1uczogW3sKICAgICAgICBsYWJlbDogJ+aOpeWPo+WQjeensCcsCiAgICAgICAgcHJvcDogJ2FwaU5hbWUnLAogICAgICAgIHdpZHRoOiAnMjAwcHgnLAogICAgICAgIGFsaWduOiAnY2VudGVyJwogICAgICB9LCB7CiAgICAgICAgbGFiZWw6ICfmjqXlj6Pmj4/ov7AnLAogICAgICAgIHByb3A6ICdhcGlEZXNjJywKICAgICAgICB3aWR0aDogJzIwMHB4JywKICAgICAgICBhbGlnbjogJ2NlbnRlcicKICAgICAgfSwgewogICAgICAgIGxhYmVsOiAn5o6l5Y+j5Zyw5Z2AJywKICAgICAgICBwcm9wOiAnYXBpVXJsJywKICAgICAgICBhbGlnbjogJ2NlbnRlcicKICAgICAgfSwgewogICAgICAgIGxhYmVsOiAn5pWw5o2u5bqT6KGo5ZCNJywKICAgICAgICBwcm9wOiAnZGJBbGlhcycsCiAgICAgICAgd2lkdGg6ICcxMDBweCcsCiAgICAgICAgYWxpZ246ICdjZW50ZXInCiAgICAgIH0sIHsKICAgICAgICBsYWJlbDogJ+ivt+axguaWueW8jycsCiAgICAgICAgcHJvcDogJ2FwaU1vZGUnLAogICAgICAgIGRhdGFUeXBlOiAnc2xvdCcsCiAgICAgICAgc2xvdDogJ2FwaU1vZGUnLAogICAgICAgIHdpZHRoOiAnMTAwcHgnLAogICAgICAgIGFsaWduOiAnY2VudGVyJwogICAgICB9LCB7CiAgICAgICAgbGFiZWw6ICfmjqXlj6PnirbmgIEnLAogICAgICAgIHByb3A6ICdzdGF0dXMnLAogICAgICAgIHdpZHRoOiAnMTAwJywKICAgICAgICBhbGlnbjogJ2NlbnRlcicsCiAgICAgICAgZGF0YVR5cGU6ICdzbG90JywKICAgICAgICAvLyDkvb/nlKjmj5Lmp70KICAgICAgICBzbG90OiAnc3RhdHVzJwogICAgICB9LCB7CiAgICAgICAgZGF0YVR5cGU6ICdvcHRpb24nLAogICAgICAgIGxhYmVsOiAn5pON5L2cJywKICAgICAgICB3aWR0aDogJzIyMCcsCiAgICAgICAgb3BlcmF0aW9uOiBbewogICAgICAgICAgbmFtZTogJ+a1i+ivlScsCiAgICAgICAgICBpY29uOiAnZWwtaWNvbi1zLXVuZm9sZCcsCiAgICAgICAgICBjb2xvcjogJyM0MDllZmYnLAogICAgICAgICAgY2xpY2tGdW46IGZ1bmN0aW9uIGNsaWNrRnVuKHJvdykgewogICAgICAgICAgICBfdGhpcy5zaG93RHJhd2VyKHJvdyk7CiAgICAgICAgICB9CiAgICAgICAgfSwgewogICAgICAgICAgbmFtZTogJ+afpeeci+aXpeW/lycsCiAgICAgICAgICBpY29uOiAnZWwtaWNvbi1kb2N1bWVudCcsCiAgICAgICAgICBjbGlja0Z1bjogZnVuY3Rpb24gY2xpY2tGdW4ocm93KSB7CiAgICAgICAgICAgIF90aGlzLnNlcnZpY2VzaG93KHJvdyk7CiAgICAgICAgICB9CiAgICAgICAgfSwgewogICAgICAgICAgbmFtZTogJ+aOpeWPo+aWh+aho+afpeeciycsCiAgICAgICAgICBpY29uOiAnZWwtaWNvbi10aWNrZXRzJywKICAgICAgICAgIGNvbG9yOiAnIzQwN2NmZicsCiAgICAgICAgICBjbGlja0Z1bjogZnVuY3Rpb24gY2xpY2tGdW4ocm93KSB7CiAgICAgICAgICAgIF90aGlzLmRldGFpbHNzaG93KHJvdyk7CiAgICAgICAgICB9CiAgICAgICAgfSwgewogICAgICAgICAgbmFtZTogJ+WPkeW4gycsCiAgICAgICAgICBpY29uOiAnZWwtaWNvbi1zLXByb21vdGlvbicsCiAgICAgICAgICBjb2xvcjogJyNmYTkxMmEnLAogICAgICAgICAgc2hvd0hpZGU6IGZ1bmN0aW9uIHNob3dIaWRlKHJvdykgewogICAgICAgICAgICByZXR1cm4gcm93LnN0YXR1cyAhPT0gJzEnOwogICAgICAgICAgfSwKICAgICAgICAgIGNsaWNrRnVuOiBmdW5jdGlvbiBjbGlja0Z1bihyb3cpIHsKICAgICAgICAgICAgX3RoaXMucHVibGlzaFRhYmxlKHJvdyk7CiAgICAgICAgICB9CiAgICAgICAgfSwgewogICAgICAgICAgbmFtZTogJ+S4i+aeticsCiAgICAgICAgICBpY29uOiAnZWwtaWNvbi1yZW1vdmUnLAogICAgICAgICAgY29sb3I6ICcjZjU2YzZjJywKICAgICAgICAgIHNob3dIaWRlOiBmdW5jdGlvbiBzaG93SGlkZShyb3cpIHsKICAgICAgICAgICAgcmV0dXJuIHJvdy5zdGF0dXMgPT09ICcxJzsgLy8g5bey5Y+R5biD5pe25pi+56S6ICLkuIvmnrYiIOaMiemSrgogICAgICAgICAgfSwKICAgICAgICAgIGNsaWNrRnVuOiBmdW5jdGlvbiBjbGlja0Z1bihyb3cpIHsKICAgICAgICAgICAgX3RoaXMucHVibGlzaFRhYmxlKHJvdyk7CiAgICAgICAgICB9CiAgICAgICAgfSwgewogICAgICAgICAgbmFtZTogJ+WIoOmZpCcsCiAgICAgICAgICBpY29uOiAnZWwtaWNvbi1kZWxldGUnLAogICAgICAgICAgY29sb3I6ICdyZWQnLAogICAgICAgICAgc2hvd0hpZGU6IGZ1bmN0aW9uIHNob3dIaWRlKHJvdykgewogICAgICAgICAgICByZXR1cm4gcm93LnN0YXR1cyAhPT0gJzEnOyAvLyDlt7Llj5HluIPml7bmmL7npLogIuS4i+aetiIg5oyJ6ZKuCiAgICAgICAgICB9LAogICAgICAgICAgY2xpY2tGdW46IGZ1bmN0aW9uIGNsaWNrRnVuKHJvdykgewogICAgICAgICAgICBfdGhpcy5kZWxBcGkocm93KTsKICAgICAgICAgIH0KICAgICAgICB9XQogICAgICB9XSwKICAgICAgZGVmYXVsdEZpbHRlcjogW3sKICAgICAgICBvcGVyYXRpb246ICdFUVVBTCcsCiAgICAgICAgcHJvcGVydHk6ICdjYXRhbG9nSWQnLAogICAgICAgIHJlbGF0aW9uOiAnQU5EJywKICAgICAgICB2YWx1ZTogJycKICAgICAgfV0KICAgIH07CiAgICAvLyBkaWFsb2flvLnlh7oKICAgIHZhciBESUFMT0dfQ09ORklHID0gewogICAgICBkZXRhaWxWaXNpYmxlOiBmYWxzZSwKICAgICAgYWRkVmlzaWJsZTogZmFsc2UsCiAgICAgIGRpYWxvZ1NlcnZpY2U6IGZhbHNlLAogICAgICBkaWFsb2dEZXRhaWxzOiBmYWxzZSwKICAgICAgZHJhd2VyVmlzaWJsZTogZmFsc2UsCiAgICAgIC8vIOaOp+WItuaKveWxieaYvuekuuWSjOmakOiXj+eahOWPmOmHjwogICAgICBkZXRhaWxUaXRsZTogJ+e8lui+kScsCiAgICAgIGFkZFRpdGxlOiAn5paw5aKeJywKICAgICAgZGlhbG9nU2VydmljZVRpdGxlOiAn5p+l55yL5pel5b+XJywKICAgICAgZGlhbG9nRGV0YWlsc1RpdGxlOiAn5o6l5Y+j6K+m5oOFJywKICAgICAgZGlhbG9nZERhdGE6IHt9CiAgICB9OwogICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIFRSRUVfQ09ORklHKSwgVEFCTEVfQ09ORklHKSwgRElBTE9HX0NPTkZJRyksIHt9LCB7CiAgICAgIC8vIOS4u+WIl+ihqGRpYWxvZ+ebuOWFswogICAgICAvLyBzdGF0dXM6ICcnLCAvLyDliJ3lp4vljJbmjqXlj6PnirbmgIHkuLrnqboKICAgICAgdGFibGVEYXRhOiBbXSwKICAgICAgLy8g5Yid5aeL5YyW5YiX6KGo5Li656m65pWw57uECiAgICAgIHZhbHVlOiAnJywKICAgICAgcmVxdWVzdFVybDogJycsCiAgICAgIHJlcXVlc3RNZXRob2Q6ICcnLAogICAgICByZXNwb25zZURhdGE6IG51bGwsCiAgICAgIHJlc3BvbnNlU3RhdHVzOiBudWxsLAogICAgICByZXNwb25zZVRpbWU6IG51bGwsCiAgICAgIHJlc3BvbnNlSGVhZGVyczogW10sCiAgICAgIHJlc3BvbnNlQ29va2llczogW10sCiAgICAgIGFjdGl2ZVJlc3BvbnNlVGFiOiAnYm9keScsCiAgICAgIGN1cnJlbnRSb3c6IG51bGwsCiAgICAgIGN1cnJlbnRSb3dhOiBudWxsLAogICAgICBpc1VybERpc2FibGVkOiBmYWxzZSwKICAgICAgLy8g5o6n5Yi2cmVxdWVzdFVybOi+k+WFpeahhuaYr+WQpuemgeeUqAogICAgICBpc01ldGhvZERpc2FibGVkOiBmYWxzZSwKICAgICAgLy8g5o6n5Yi2cmVxdWVzdE1ldGhvZOmAieaLqeahhuaYr+WQpuemgeeUqAogICAgICBib2R5Rm9ybWF0OiAncmF3JywKICAgICAgcmF3Rm9ybWF0OiAnYXBwbGljYXRpb24vanNvbicsCiAgICAgIGFjdGl2ZVJlcXVlc3RUYWI6ICdwYXJhbXMnLAogICAgICAvLyDmlrDlop7vvJrlvZPliY3mv4DmtLvnmoTor7fmsYLmoIfnrb7pobUKICAgICAgcmVxdWVzdEhlYWRlcnM6IFsKICAgICAgLy8g5paw5aKe77ya6K+35rGC5aS05Y+C5pWwCiAgICAgIHsKICAgICAgICBrZXk6ICcnLAogICAgICAgIHZhbHVlOiAnJwogICAgICB9XSwKICAgICAgYm9keVBhcmFtczogWwogICAgICAvLyDmlrDlop7vvJror7fmsYLkvZPlj4LmlbAKICAgICAgewogICAgICAgIGtleTogJycsCiAgICAgICAgdmFsdWU6ICcnCiAgICAgIH1dLAogICAgICByYXdCb2R5OiAnJywKICAgICAgLy8g5paw5aKe77yacmF35qC85byP55qE6K+35rGC5L2T5YaF5a65CiAgICAgIC8vIFJlcXVlc3QgcGFyYW1ldGVycwogICAgICByZXF1ZXN0UGFyYW1zOiBbewogICAgICAgIGtleTogJycsCiAgICAgICAgdmFsdWU6ICcnLAogICAgICAgIGRlc2NyaXB0aW9uOiAnJwogICAgICB9XQogICAgfSk7CiAgfSwKICBjb21wdXRlZDogewogICAgc2hvd0JvZHlGb3JtYXRTZWxlY3RvcjogZnVuY3Rpb24gc2hvd0JvZHlGb3JtYXRTZWxlY3RvcigpIHsKICAgICAgdmFyIF90aGlzJHJlcXVlc3RNZXRob2Q7CiAgICAgIC8vIOWFgeiuuOW4pmJvZHnnmoRIVFRQ5pa55rOVCiAgICAgIHJldHVybiBbJ1BPU1QnLCAnUFVUJywgJ1BBVENIJywgJ0RFTEVURSddLmluY2x1ZGVzKChfdGhpcyRyZXF1ZXN0TWV0aG9kID0gdGhpcy5yZXF1ZXN0TWV0aG9kKSA9PT0gbnVsbCB8fCBfdGhpcyRyZXF1ZXN0TWV0aG9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRyZXF1ZXN0TWV0aG9kLnRvVXBwZXJDYXNlKCkpOwogICAgfSwKICAgIC8vIOmFjee9ruWIl+ihqOaOpeWPo+aWueazle+8m+WPquaciemFjee9ruS6huivpeiuoeeul+WxnuaAp+aJjeS8muaJp+ihjHRhYmxlIG1peGluc+S4reeahGdldERhdGHmlrnms5UKICAgIGRhdGFNZXRob2Q6IGZ1bmN0aW9uIGRhdGFNZXRob2QoKSB7CiAgICAgIHJldHVybiBBUEkudHJlZXF1ZXJ5VGFibGU7CiAgICB9LAogICAgZm9ybWF0dGVkUmVzcG9uc2U6IGZ1bmN0aW9uIGZvcm1hdHRlZFJlc3BvbnNlKCkgewogICAgICBpZiAoIXRoaXMucmVzcG9uc2VEYXRhKSByZXR1cm4gJyc7CiAgICAgIHRyeSB7CiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KEpTT04ucGFyc2UodGhpcy5yZXNwb25zZURhdGEpLCBudWxsLCAyKTsKICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIHJldHVybiB0aGlzLnJlc3BvbnNlRGF0YTsKICAgICAgfQogICAgfSwKICAgIHN0YXR1c0NsYXNzOiBmdW5jdGlvbiBzdGF0dXNDbGFzcygpIHsKICAgICAgaWYgKCF0aGlzLnJlc3BvbnNlU3RhdHVzKSByZXR1cm4gJyc7CiAgICAgIHZhciBjb2RlID0gcGFyc2VJbnQodGhpcy5yZXNwb25zZVN0YXR1cyk7CiAgICAgIGlmIChjb2RlID49IDIwMCAmJiBjb2RlIDwgMzAwKSByZXR1cm4gJ3N1Y2Nlc3MnOwogICAgICBpZiAoY29kZSA+PSAzMDAgJiYgY29kZSA8IDQwMCkgcmV0dXJuICdyZWRpcmVjdCc7CiAgICAgIGlmIChjb2RlID49IDQwMCAmJiBjb2RlIDwgNTAwKSByZXR1cm4gJ2NsaWVudC1lcnJvcic7CiAgICAgIGlmIChjb2RlID49IDUwMCkgcmV0dXJuICdzZXJ2ZXItZXJyb3InOwogICAgICByZXR1cm4gJyc7CiAgICB9CiAgfSwKICBtZXRob2RzOiB7CiAgICAvLyBhcGlNb2Rl5qCH562+6aKc6ImyCiAgICBkZXRlcm1pbmVUYWdUeXBlOiBmdW5jdGlvbiBkZXRlcm1pbmVUYWdUeXBlKGFwaU1vZGUpIHsKICAgICAgcmV0dXJuIGFwaU1vZGUgPT09ICdHRVQnID8gJycgOiAnd2FybmluZyc7CiAgICB9LAogICAgLy8g5qCRCiAgICBnZXRUcmVlTm9kZXM6IGZ1bmN0aW9uIGdldFRyZWVOb2RlcygpIHsKICAgICAgdmFyIF90aGlzMiA9IHRoaXM7CiAgICAgIHJldHVybiBfYXN5bmNUb0dlbmVyYXRvcigvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoZnVuY3Rpb24gX2NhbGxlZSgpIHsKICAgICAgICB2YXIgX3lpZWxkJEFQSSR0cmVlQWN0aW9uLCBfeWllbGQkQVBJJHRyZWVBY3Rpb24yLCB2YWx1ZTsKICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZSgpLndyYXAoZnVuY3Rpb24gX2NhbGxlZSQoX2NvbnRleHQpIHsKICAgICAgICAgIHdoaWxlICgxKSBzd2l0Y2ggKF9jb250ZXh0LnByZXYgPSBfY29udGV4dC5uZXh0KSB7CiAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gMjsKICAgICAgICAgICAgICByZXR1cm4gQVBJLnRyZWVBY3Rpb24oKTsKICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgIF95aWVsZCRBUEkkdHJlZUFjdGlvbiA9IF9jb250ZXh0LnNlbnQ7CiAgICAgICAgICAgICAgX3lpZWxkJEFQSSR0cmVlQWN0aW9uMiA9IF95aWVsZCRBUEkkdHJlZUFjdGlvbi52YWx1ZTsKICAgICAgICAgICAgICB2YWx1ZSA9IF95aWVsZCRBUEkkdHJlZUFjdGlvbjIgPT09IHZvaWQgMCA/IFtdIDogX3lpZWxkJEFQSSR0cmVlQWN0aW9uMjsKICAgICAgICAgICAgICBfdGhpczIuZGVmYXVsdEV4cGFuZGVkS2V5cyA9IFsodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHZhbHVlWzBdLmlkKSB8fCAnJ107CiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LmFicnVwdCgicmV0dXJuIiwgewogICAgICAgICAgICAgICAgZGF0YTogdmFsdWUgfHwgW10KICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgY2FzZSA3OgogICAgICAgICAgICBjYXNlICJlbmQiOgogICAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5zdG9wKCk7CiAgICAgICAgICB9CiAgICAgICAgfSwgX2NhbGxlZSk7CiAgICAgIH0pKSgpOwogICAgfSwKICAgIHJlbG9hZFRyZWU6IGZ1bmN0aW9uIHJlbG9hZFRyZWUoKSB7CiAgICAgIHRoaXMuJHJlZnMuYXBwQXN5bmNUcmVlLmdldFRyZWVEYXRhKCk7CiAgICB9LAogICAgLyoqDQogICAgICogQGRlc2NyaXB0aW9uOiB0cmVlQWN0aW9uc+aUr+aMgeWHveaVsOS5n+aUr+aMgeaVsOe7hO+8jOeUseS6juWunumZheWcuuaZr+W9k+S4rSDlj6/og73kvJrliqjmgIHorr7nva7mjInpkq7vvIzmlYXku6Xlh73mlbDnpLrkvovmnaXlsZXnpLoNCiAgICAgKiBAcGFyYW0geyp9IGRhdGEg5b2T5YmN54K55Ye76IqC54K55pWw5o2uDQogICAgICogQHJldHVybiB7Kn0g5b2T5YmN6IqC54K55bGV56S655qE5pON5L2c6aG55pWw57uEDQogICAgICovCiAgICB0cmVlQWN0aW9uczogZnVuY3Rpb24gdHJlZUFjdGlvbnMoZGF0YSkgewogICAgICAvLyDmoLnoioLngrnliKTmlq3mlrnlvI/ku6XkuJrliqHkuLrlh4bvvIzmraTlpITku4XkuLrnpLrkvosKICAgICAgcmV0dXJuIFt7CiAgICAgICAgbGFiZWw6ICfmt7vliqAnLAogICAgICAgIHR5cGU6ICdhZGQnLAogICAgICAgIG1ldGhvZDogdGhpcy5hZGROb2RlCiAgICAgIH0sIHsKICAgICAgICBsYWJlbDogJ+e8lui+kScsCiAgICAgICAgdHlwZTogJ2VkaXQnLAogICAgICAgIG1ldGhvZDogdGhpcy5lZGl0Tm9kZQogICAgICB9LCB7CiAgICAgICAgbGFiZWw6ICfliKDpmaQnLAogICAgICAgIHR5cGU6ICdkZWxldGUnLAogICAgICAgIG1ldGhvZDogdGhpcy5kZWxOb2RlCiAgICAgIH1dOwogICAgfSwKICAgIG9uVHJlZU5vZGVDbGljazogZnVuY3Rpb24gb25UcmVlTm9kZUNsaWNrKG5vZGUpIHsKICAgICAgdmFyIF90aGlzJGN1ck5vZGU7CiAgICAgIHRoaXMudHJlZUlkID0gbm9kZS5pZDsKICAgICAgLy8g5p6E5bu65p+l6K+i5Y+C5pWw5a+56LGh77yM5oyJ54Wn5L2g5o+Q5L6b55qE5qC85byP56S65L6LCiAgICAgIHZhciBxdWVyeVBhcmFtcyA9IHsKICAgICAgICBncm91cFJlbGF0aW9uOiAnQU5EJywKICAgICAgICBncm91cFRyZWU6IHt9LAogICAgICAgIHBhcmFtczoge30sCiAgICAgICAgcXVlcnlzOiBbewogICAgICAgICAgZ3JvdXA6ICdtYWluJywKICAgICAgICAgIG9wZXJhdGlvbjogJ0VRVUFMJywKICAgICAgICAgIHBhcmVudEdyb3VwOiAnJywKICAgICAgICAgIHByb3BlcnR5OiAnJywKICAgICAgICAgIHJlbGF0aW9uOiAnQU5EJywKICAgICAgICAgIHZhbHVlOiB7fQogICAgICAgIH0sIHsKICAgICAgICAgIGdyb3VwOiAnbWFpbicsCiAgICAgICAgICBvcGVyYXRpb246ICdFUVVBTCcsCiAgICAgICAgICBwYXJlbnRHcm91cDogJycsCiAgICAgICAgICBwcm9wZXJ0eTogJ2NhdGFsb2dJZCcsCiAgICAgICAgICByZWxhdGlvbjogJ0FORCcsCiAgICAgICAgICB2YWx1ZTogdGhpcy50cmVlSWQKICAgICAgICB9XSwKICAgICAgICBzb3J0ZXI6IFt7CiAgICAgICAgICBkaXJlY3Rpb246ICdBU0MnLAogICAgICAgICAgcHJvcGVydHk6ICcnCiAgICAgICAgfV0KICAgICAgfTsKICAgICAgaWYgKG5vZGUuaWQgPT09ICgoX3RoaXMkY3VyTm9kZSA9IHRoaXMuY3VyTm9kZSkgPT09IG51bGwgfHwgX3RoaXMkY3VyTm9kZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkY3VyTm9kZS5pZCkpIHJldHVybjsKICAgICAgdGhpcy5kZXB0TmFtZSA9IG5vZGUubGFiZWw7CiAgICAgIHRoaXMuY3VyTm9kZSA9IF9vYmplY3RTcHJlYWQoe30sIG5vZGUpOwogICAgICB0aGlzLmZvcm0gPSB0aGlzLiRvcHRpb25zLmRhdGEoKS5mb3JtOwogICAgICB0aGlzLmdldERhdGEocXVlcnlQYXJhbXMpOwogICAgfSwKICAgIC8vIOebruW9leaWsOWingogICAgYWRkTm9kZTogZnVuY3Rpb24gYWRkTm9kZShwYXJhbXMsIG5vZGUpIHsKICAgICAgdmFyIF90aGlzMyA9IHRoaXM7CiAgICAgIHJldHVybiBfYXN5bmNUb0dlbmVyYXRvcigvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoZnVuY3Rpb24gX2NhbGxlZTIoKSB7CiAgICAgICAgdmFyIGNvZGUsIG5hbWUsIGlkLCBuZXdOb2RlLCBfeWllbGQkQVBJJGFkZEFQSVRyZWUsIHN0YXRlLCBtZXNzYWdlOwogICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lKCkud3JhcChmdW5jdGlvbiBfY2FsbGVlMiQoX2NvbnRleHQyKSB7CiAgICAgICAgICB3aGlsZSAoMSkgc3dpdGNoIChfY29udGV4dDIucHJldiA9IF9jb250ZXh0Mi5uZXh0KSB7CiAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICBjb2RlID0gcGFyYW1zLmNvZGUsIG5hbWUgPSBwYXJhbXMubmFtZTsKICAgICAgICAgICAgICBpZCA9IG5vZGUuaWQ7CiAgICAgICAgICAgICAgbmV3Tm9kZSA9IHsKICAgICAgICAgICAgICAgIGNvZGU6IGNvZGUsCiAgICAgICAgICAgICAgICBuYW1lOiBuYW1lLAogICAgICAgICAgICAgICAgcGFyZW50SWQ6IGlkCiAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICBfY29udGV4dDIucHJldiA9IDM7CiAgICAgICAgICAgICAgX2NvbnRleHQyLm5leHQgPSA2OwogICAgICAgICAgICAgIHJldHVybiBBUEkuYWRkQVBJVHJlZShuZXdOb2RlKTsKICAgICAgICAgICAgY2FzZSA2OgogICAgICAgICAgICAgIF95aWVsZCRBUEkkYWRkQVBJVHJlZSA9IF9jb250ZXh0Mi5zZW50OwogICAgICAgICAgICAgIHN0YXRlID0gX3lpZWxkJEFQSSRhZGRBUElUcmVlLnN0YXRlOwogICAgICAgICAgICAgIG1lc3NhZ2UgPSBfeWllbGQkQVBJJGFkZEFQSVRyZWUubWVzc2FnZTsKICAgICAgICAgICAgICBpZiAoc3RhdGUpIHsKICAgICAgICAgICAgICAgIF90aGlzMy5yZWxvYWRUcmVlKCk7CiAgICAgICAgICAgICAgICBfdGhpczMuJG1lc3NhZ2Uuc3VjY2Vzcygn5re75Yqg6LWE5rqQ55uu5b2V5oiQ5Yqf77yBJyk7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIF90aGlzMy4kbWVzc2FnZS53YXJuaW5nKG1lc3NhZ2UgfHwgJ+a3u+WKoOaOpeWPo+ebruW9leWksei0pe+8gScpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBfY29udGV4dDIubmV4dCA9IDE1OwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDEyOgogICAgICAgICAgICAgIF9jb250ZXh0Mi5wcmV2ID0gMTI7CiAgICAgICAgICAgICAgX2NvbnRleHQyLnQwID0gX2NvbnRleHQyWyJjYXRjaCJdKDMpOwogICAgICAgICAgICAgIF90aGlzMy4kbWVzc2FnZS53YXJuaW5nKF9jb250ZXh0Mi50MCB8fCAn5re75Yqg5o6l5Y+j55uu5b2V5aSx6LSl77yBJyk7CiAgICAgICAgICAgIGNhc2UgMTU6CiAgICAgICAgICAgIGNhc2UgImVuZCI6CiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Mi5zdG9wKCk7CiAgICAgICAgICB9CiAgICAgICAgfSwgX2NhbGxlZTIsIG51bGwsIFtbMywgMTJdXSk7CiAgICAgIH0pKSgpOwogICAgfSwKICAgIC8vIOebruW9lee8lui+kQogICAgZWRpdE5vZGU6IGZ1bmN0aW9uIGVkaXROb2RlKHBhcmFtcykgewogICAgICB2YXIgX3RoaXM0ID0gdGhpczsKICAgICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3JSdW50aW1lKCkubWFyayhmdW5jdGlvbiBfY2FsbGVlMygpIHsKICAgICAgICB2YXIgY29kZSwgbmFtZSwgcGFyZW50SWQsIGlkLCBuZXdOb2RlLCBfeWllbGQkQVBJJGVkaXRBUElUcmUsIHN0YXRlLCBtZXNzYWdlOwogICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lKCkud3JhcChmdW5jdGlvbiBfY2FsbGVlMyQoX2NvbnRleHQzKSB7CiAgICAgICAgICB3aGlsZSAoMSkgc3dpdGNoIChfY29udGV4dDMucHJldiA9IF9jb250ZXh0My5uZXh0KSB7CiAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICBjb2RlID0gcGFyYW1zLmNvZGUsIG5hbWUgPSBwYXJhbXMubmFtZSwgcGFyZW50SWQgPSBwYXJhbXMucGFyZW50SWQsIGlkID0gcGFyYW1zLmlkOwogICAgICAgICAgICAgIG5ld05vZGUgPSB7CiAgICAgICAgICAgICAgICBjb2RlOiBjb2RlLAogICAgICAgICAgICAgICAgbmFtZTogbmFtZSwKICAgICAgICAgICAgICAgIGlkOiBpZCwKICAgICAgICAgICAgICAgIHBhcmVudElkOiBwYXJlbnRJZAogICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgX2NvbnRleHQzLnByZXYgPSAyOwogICAgICAgICAgICAgIF9jb250ZXh0My5uZXh0ID0gNTsKICAgICAgICAgICAgICByZXR1cm4gQVBJLmVkaXRBUElUcmVlKG5ld05vZGUpOwogICAgICAgICAgICBjYXNlIDU6CiAgICAgICAgICAgICAgX3lpZWxkJEFQSSRlZGl0QVBJVHJlID0gX2NvbnRleHQzLnNlbnQ7CiAgICAgICAgICAgICAgc3RhdGUgPSBfeWllbGQkQVBJJGVkaXRBUElUcmUuc3RhdGU7CiAgICAgICAgICAgICAgbWVzc2FnZSA9IF95aWVsZCRBUEkkZWRpdEFQSVRyZS5tZXNzYWdlOwogICAgICAgICAgICAgIGlmIChzdGF0ZSkgewogICAgICAgICAgICAgICAgX3RoaXM0LnJlbG9hZFRyZWUoKTsKICAgICAgICAgICAgICAgIF90aGlzNC4kbWVzc2FnZS5zdWNjZXNzKCfnvJbovpHotYTmupDnm67lvZXmiJDlip/vvIEnKTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgX3RoaXM0LiRtZXNzYWdlLndhcm5pbmcobWVzc2FnZSB8fCAn57yW6L6R5o6l5Y+j55uu5b2V5aSx6LSl77yBJyk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9jb250ZXh0My5uZXh0ID0gMTQ7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMTE6CiAgICAgICAgICAgICAgX2NvbnRleHQzLnByZXYgPSAxMTsKICAgICAgICAgICAgICBfY29udGV4dDMudDAgPSBfY29udGV4dDNbImNhdGNoIl0oMik7CiAgICAgICAgICAgICAgX3RoaXM0LiRtZXNzYWdlLndhcm5pbmcoX2NvbnRleHQzLnQwIHx8ICfnvJbovpHmjqXlj6Pnm67lvZXlpLHotKXvvIEnKTsKICAgICAgICAgICAgY2FzZSAxNDoKICAgICAgICAgICAgY2FzZSAiZW5kIjoKICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQzLnN0b3AoKTsKICAgICAgICAgIH0KICAgICAgICB9LCBfY2FsbGVlMywgbnVsbCwgW1syLCAxMV1dKTsKICAgICAgfSkpKCk7CiAgICB9LAogICAgLy8g55uu5b2V5Yig6ZmkCiAgICBkZWxOb2RlOiBmdW5jdGlvbiBkZWxOb2RlKHBhcmFtcywgbm9kZSkgewogICAgICB2YXIgX3RoaXM1ID0gdGhpczsKICAgICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3JSdW50aW1lKCkubWFyayhmdW5jdGlvbiBfY2FsbGVlNCgpIHsKICAgICAgICB2YXIgX3lpZWxkJEFQSSRyZW1vdmVBUElULCBzdGF0ZSwgbWVzc2FnZTsKICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZSgpLndyYXAoZnVuY3Rpb24gX2NhbGxlZTQkKF9jb250ZXh0NCkgewogICAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQ0LnByZXYgPSBfY29udGV4dDQubmV4dCkgewogICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgX2NvbnRleHQ0LnByZXYgPSAwOwogICAgICAgICAgICAgIF9jb250ZXh0NC5uZXh0ID0gMzsKICAgICAgICAgICAgICByZXR1cm4gQVBJLnJlbW92ZUFQSVRyZWUobm9kZS5pZCk7CiAgICAgICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgICBfeWllbGQkQVBJJHJlbW92ZUFQSVQgPSBfY29udGV4dDQuc2VudDsKICAgICAgICAgICAgICBzdGF0ZSA9IF95aWVsZCRBUEkkcmVtb3ZlQVBJVC5zdGF0ZTsKICAgICAgICAgICAgICBtZXNzYWdlID0gX3lpZWxkJEFQSSRyZW1vdmVBUElULm1lc3NhZ2U7CiAgICAgICAgICAgICAgaWYgKHN0YXRlKSB7CiAgICAgICAgICAgICAgICBfdGhpczUucmVsb2FkVHJlZSgpOwogICAgICAgICAgICAgICAgX3RoaXM1LiRtZXNzYWdlLnN1Y2Nlc3MoJ+WIoOmZpOi1hOa6kOebruW9leaIkOWKn++8gScpOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBfdGhpczUuJG1lc3NhZ2Uud2FybmluZyhtZXNzYWdlIHx8ICfliKDpmaTmjqXlj6Pnm67lvZXlpLHotKXvvIEnKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX2NvbnRleHQ0Lm5leHQgPSAxMjsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSA5OgogICAgICAgICAgICAgIF9jb250ZXh0NC5wcmV2ID0gOTsKICAgICAgICAgICAgICBfY29udGV4dDQudDAgPSBfY29udGV4dDRbImNhdGNoIl0oMCk7CiAgICAgICAgICAgICAgX3RoaXM1LiRtZXNzYWdlLndhcm5pbmcoX2NvbnRleHQ0LnQwIHx8ICfliKDpmaTotYTmjqXlj6Pnm67lvZXlpLHotKXvvIEnKTsKICAgICAgICAgICAgY2FzZSAxMjoKICAgICAgICAgICAgY2FzZSAiZW5kIjoKICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ0LnN0b3AoKTsKICAgICAgICAgIH0KICAgICAgICB9LCBfY2FsbGVlNCwgbnVsbCwgW1swLCA5XV0pOwogICAgICB9KSkoKTsKICAgIH0sCiAgICAvLyB0YWJsZeWIl+ihqOaWsOWingogICAgYWRkRGF0YTogZnVuY3Rpb24gYWRkRGF0YSgpIHsKICAgICAgdGhpcy5hZGRUaXRsZSA9ICfmlrDlop5BUEnmjqXlj6MnOwogICAgICB0aGlzLmRpYWxvZ2REYXRhID0gewogICAgICAgIGNhdGFsb2dJZDogdGhpcy5jdXJOb2RlLmlkCiAgICAgIH07CiAgICAgIHRoaXMuYWRkVmlzaWJsZSA9IHRydWU7CiAgICB9LAogICAgLy8g5aSE55CG5Y+M5Ye75LqL5Lu2CiAgICBoYW5kbGVSb3dEYmxDbGljazogZnVuY3Rpb24gaGFuZGxlUm93RGJsQ2xpY2socm93KSB7CiAgICAgIGNvbnNvbGUubG9nKHJvdywgJzc3Nzc3Nzc0NCcpOwogICAgICBpZiAocm93LnN0YXR1cyA9PT0gJzEnKSB7CiAgICAgICAgdGhpcy4kbWVzc2FnZS53YXJuaW5nKCflj6rmnInkuIvmnrbnmoTmjqXlj6PmiY3og73nvJbovpHvvIEnKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdGhpcy5lZGl0RGF0YShyb3cpOwogICAgfSwKICAgIC8vIHRhYmxl5YiX6KGo57yW6L6RCiAgICBlZGl0RGF0YTogZnVuY3Rpb24gZWRpdERhdGEocm93KSB7CiAgICAgIGlmIChyb3cuc3RhdHVzID09PSAnMScpIHsKICAgICAgICB0aGlzLiRtZXNzYWdlLndhcm5pbmcoJ+WPquacieS4i+aetueahOaOpeWPo+aJjeiDvee8lui+ke+8gScpOwogICAgICAgIHJldHVybjsgLy8g55u05o6l6L+U5Zue77yM5LiN5omn6KGM5ZCO57ut6YC76L6RCiAgICAgIH0KICAgICAgdGhpcy5kZXRhaWxUaXRsZSA9ICJcdTdGMTZcdThGOTEgLSAiLmNvbmNhdChyb3cuYXBpTmFtZSk7CiAgICAgIHRoaXMuZGlhbG9nZERhdGEgPSByb3c7CiAgICAgIHRoaXMuZGV0YWlsVmlzaWJsZSA9IHRydWU7CiAgICB9LAogICAgLy8gdGFibGXliJfooajliKDpmaQKICAgIGRlbEFwaTogZnVuY3Rpb24gZGVsQXBpKHJvdykgewogICAgICB2YXIgX3RoaXM2ID0gdGhpczsKICAgICAgdGhpcy4kY29uZmlybSgiXHU2QjY0XHU2NENEXHU0RjVDXHU1QzA2XHU2QzM4XHU0RTQ1XHU1MjIwXHU5NjY0XHU4QkU1XHU2M0E1XHU1M0UzXHU5ODc5XHVGRjA4Ii5jb25jYXQocm93LmFwaU5hbWUsICJcdUZGMDksIFx1NjYyRlx1NTQyNlx1N0VFN1x1N0VFRD8iKSwgJ+aPkOekuicsIHsKICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogJ+ehruWumicsCiAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogJ+WPlua2iCcsCiAgICAgICAgdHlwZTogJ3dhcm5pbmcnCiAgICAgIH0pLnRoZW4oLyojX19QVVJFX18qL19hc3luY1RvR2VuZXJhdG9yKC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3JSdW50aW1lKCkubWFyayhmdW5jdGlvbiBfY2FsbGVlNSgpIHsKICAgICAgICB2YXIgaW5kZXg7CiAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUoKS53cmFwKGZ1bmN0aW9uIF9jYWxsZWU1JChfY29udGV4dDUpIHsKICAgICAgICAgIHdoaWxlICgxKSBzd2l0Y2ggKF9jb250ZXh0NS5wcmV2ID0gX2NvbnRleHQ1Lm5leHQpIHsKICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgIF9jb250ZXh0NS5uZXh0ID0gMjsKICAgICAgICAgICAgICByZXR1cm4gQVBJLmRlbEFwaURhdGEocm93LmlkKTsKICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgIF90aGlzNi5nZXREYXRhKCk7CiAgICAgICAgICAgICAgX3RoaXM2LiRtZXNzYWdlLnN1Y2Nlc3MoJ+WIoOmZpOaIkOWKnycpOwogICAgICAgICAgICAgIC8vIOaJvuWIsOimgeWIoOmZpOeahOaVsOaNruWcqHRhYmxlRGF0YeS4reeahOe0ouW8lQogICAgICAgICAgICAgIGluZGV4ID0gX3RoaXM2LnRhYmxlRGF0YS5maW5kSW5kZXgoZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmlkID09PSByb3cuaWQ7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkgewogICAgICAgICAgICAgICAgLy8g5LuOdGFibGVEYXRh5pWw57uE5Lit5Yig6Zmk5a+55bqU55qE5pWw5o2uCiAgICAgICAgICAgICAgICBfdGhpczYudGFibGVEYXRhLnNwbGljZShpbmRleCwgMSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICBjYXNlIDY6CiAgICAgICAgICAgIGNhc2UgImVuZCI6CiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0NS5zdG9wKCk7CiAgICAgICAgICB9CiAgICAgICAgfSwgX2NhbGxlZTUpOwogICAgICB9KSkpLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoJ+WIoOmZpOaVsOaNruWksei0pTonLCBlcnJvcik7CiAgICAgIH0pOwogICAgfSwKICAgIG9uQmVmb3JlR2V0RGF0YTogZnVuY3Rpb24gb25CZWZvcmVHZXREYXRhKHF1ZXJ5UGFyYW1zLCBmb3JtRGF0YSkgewogICAgICB0aGlzLnNldEZpbHRlclZhbHVlKHRoaXMucXVlcnlQYXJhbXMsIHRoaXMuZGVmYXVsdEZpbHRlciwgJ2NhdGFsb2dJZCcsIHRoaXMuY3VyTm9kZS5pZCk7CiAgICB9LAogICAgLy8g5paw5aKe56Gu5a6a5oyJ6ZKuCiAgICBvbkNvbmZpcm06IGZ1bmN0aW9uIG9uQ29uZmlybShkYXRhLCBwRGF0YSkgewogICAgICB0aGlzLmdldERhdGEoKTsKICAgIH0sCiAgICAvLyDmn6XnnIvml6Xlv5fmjInpkq4KICAgIHNlcnZpY2VzaG93OiBmdW5jdGlvbiBzZXJ2aWNlc2hvdyhyb3cpIHsKICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlVGl0bGUgPSAiXHU2N0U1XHU3NzBCXHU2NUU1XHU1RkQ3LSAiLmNvbmNhdChyb3cuYXBpTmFtZSk7CiAgICAgIHRoaXMuY3VycmVudFJvdyA9IHJvdzsKICAgICAgdmFyIHJvd0lkID0gcm93LmlkOyAvLyDojrflj5blvZPliY3ooYznmoRpZAogICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UgPSB0cnVlOwogICAgICB0aGlzLiRyZWZzLlNlcnZpY2VEaWFsb2cuaW5pdERhdGEoewogICAgICAgIGlkOiByb3dJZAogICAgICB9KTsgLy8g5bCGaWTkvKDpgJLnu5lTZXJ2aWNlRGlhbG9n57uE5Lu2CiAgICB9LAogICAgLy8g5o6l5Y+j5paH5qGj5p+l55yLCiAgICBkZXRhaWxzc2hvdzogZnVuY3Rpb24gZGV0YWlsc3Nob3cocm93KSB7CiAgICAgIGNvbnNvbGUubG9nKHJvdywgJzk5OTk5OTk5Jyk7CiAgICAgIHRoaXMuZGlhbG9nRGV0YWlsc1RpdGxlID0gIlx1NjNBNVx1NTNFM1x1OEJFNlx1NjBDNS0gIi5jb25jYXQocm93LmFwaU5hbWUpOwogICAgICB0aGlzLmN1cnJlbnRSb3dhID0gcm93OwogICAgICB0aGlzLmRpYWxvZ0RldGFpbHMgPSB0cnVlOwogICAgfSwKICAgIC8vIOWPkeW4gwogICAgcHVibGlzaFRhYmxlOiBmdW5jdGlvbiBwdWJsaXNoVGFibGUoZGF0YSkgewogICAgICB2YXIgX3RoaXM3ID0gdGhpczsKICAgICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3JSdW50aW1lKCkubWFyayhmdW5jdGlvbiBfY2FsbGVlNygpIHsKICAgICAgICB2YXIgaXNQdWJsaXNoZWQsIGFjdGlvbjsKICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZSgpLndyYXAoZnVuY3Rpb24gX2NhbGxlZTckKF9jb250ZXh0NykgewogICAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQ3LnByZXYgPSBfY29udGV4dDcubmV4dCkgewogICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgaXNQdWJsaXNoZWQgPSBkYXRhLnN0YXR1cyA9PT0gJzEnOyAvLyDliKTmlq3lvZPliY3nirbmgIHmmK/lkKblt7Llj5HluIMKICAgICAgICAgICAgICBhY3Rpb24gPSBpc1B1Ymxpc2hlZCA/ICfkuIvmnrYnIDogJ+WPkeW4gyc7IC8vIGNvbnN0IGFwaU1ldGhvZCA9IGlzUHVibGlzaGVkID8gQVBJLlRha2VvZmZBUEkgOiBBUEkucHVibGlzaEFQSQogICAgICAgICAgICAgIF90aGlzNy4kY29uZmlybSgiXHU2QjY0XHU2NENEXHU0RjVDXHU1QzA2Ii5jb25jYXQoYWN0aW9uLCAiXHU2M0E1XHU1M0UzXHVGRjA4IikuY29uY2F0KGRhdGEuYXBpTmFtZSwgIlx1RkYwOVx1RkYwQ1x1NjYyRlx1NTQyNlx1N0VFN1x1N0VFRFx1RkYxRiIpLCAn5o+Q56S6JywgewogICAgICAgICAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICfnoa7lrponLAogICAgICAgICAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogJ+WPlua2iCcsCiAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycKICAgICAgICAgICAgICB9KS50aGVuKC8qI19fUFVSRV9fKi9fYXN5bmNUb0dlbmVyYXRvcigvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoZnVuY3Rpb24gX2NhbGxlZTYoKSB7CiAgICAgICAgICAgICAgICB2YXIgcGF5bG9hZCwgcmVzcG9uc2U7CiAgICAgICAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZSgpLndyYXAoZnVuY3Rpb24gX2NhbGxlZTYkKF9jb250ZXh0NikgewogICAgICAgICAgICAgICAgICB3aGlsZSAoMSkgc3dpdGNoIChfY29udGV4dDYucHJldiA9IF9jb250ZXh0Ni5uZXh0KSB7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQ2LnByZXYgPSAwOwogICAgICAgICAgICAgICAgICAgICAgX3RoaXM3LnRhYmxlTG9hZGluZyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zdCB7c3RhdGUsIG1lc3NhZ2V9ID0gYXdhaXQgYXBpTWV0aG9kKGRhdGEpIC8v5Yqo5oCB6LCD55So5o6l5Y+jCiAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpOwogICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5hcHBlbmQoJ2lkJywgZGF0YS5pZCk7CiAgICAgICAgICAgICAgICAgICAgICAvLyDliJvlu7rlj6rljIXlkKtpZOeahEZvcm1EYXRhCiAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpCiAgICAgICAgICAgICAgICAgICAgICAvLyBmb3JtRGF0YS5hcHBlbmQoJ2lkJywgZGF0YS5pZCkKCiAgICAgICAgICAgICAgICAgICAgICAvLyDmoLnmja7nirbmgIHosIPnlKjkuI3lkIzmjqXlj6MKICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNQdWJsaXNoZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQ2Lm5leHQgPSAxMDsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDYubmV4dCA9IDc7CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQVBJLlRha2VvZmZBUEkocGF5bG9hZCk7CiAgICAgICAgICAgICAgICAgICAgY2FzZSA3OgogICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQ2LnQwID0gX2NvbnRleHQ2LnNlbnQ7CiAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDYubmV4dCA9IDEzOwogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAxMDoKICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0Ni5uZXh0ID0gMTI7CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQVBJLnB1Ymxpc2hBUEkocGF5bG9hZCk7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAxMjoKICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0Ni50MCA9IF9jb250ZXh0Ni5zZW50OwogICAgICAgICAgICAgICAgICAgIGNhc2UgMTM6CiAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IF9jb250ZXh0Ni50MDsKICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0ZSkgewogICAgICAgICAgICAgICAgICAgICAgICBfdGhpczcuZ2V0RGF0YSgpOwogICAgICAgICAgICAgICAgICAgICAgICBfdGhpczcuJG1lc3NhZ2Uuc3VjY2VzcygiXHU2M0E1XHU1M0UzIi5jb25jYXQoYWN0aW9uLCAiXHU2MjEwXHU1MjlGXHVGRjAxIikpOwogICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM3LnRhYmxlTG9hZGluZyA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICBfdGhpczcuJG1lc3NhZ2Uud2FybmluZyhyZXNwb25zZS5tZXNzYWdlIHx8ICJcdTYzQTVcdTUzRTMiLmNvbmNhdChhY3Rpb24sICJcdTU5MzFcdThEMjVcdUZGMDEiKSk7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDYubmV4dCA9IDIwOwogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAxNzoKICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0Ni5wcmV2ID0gMTc7CiAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDYudDEgPSBfY29udGV4dDZbImNhdGNoIl0oMCk7CiAgICAgICAgICAgICAgICAgICAgICBfdGhpczcuJG1lc3NhZ2Uud2FybmluZyhfY29udGV4dDYudDEgfHwgIlx1NjNBNVx1NTNFMyIuY29uY2F0KGFjdGlvbiwgIlx1NTkzMVx1OEQyNVx1RkYwMSIpKTsKICAgICAgICAgICAgICAgICAgICBjYXNlIDIwOgogICAgICAgICAgICAgICAgICAgIGNhc2UgImVuZCI6CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ2LnN0b3AoKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwgX2NhbGxlZTYsIG51bGwsIFtbMCwgMTddXSk7CiAgICAgICAgICAgICAgfSkpKS5jYXRjaChmdW5jdGlvbiAoKSB7fSk7CiAgICAgICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgY2FzZSAiZW5kIjoKICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ3LnN0b3AoKTsKICAgICAgICAgIH0KICAgICAgICB9LCBfY2FsbGVlNyk7CiAgICAgIH0pKSgpOwogICAgfSwKICAgIC8vIOa1i+ivleaMiemSrgogICAgc2hvd0RyYXdlcjogZnVuY3Rpb24gc2hvd0RyYXdlcihyb3cpIHsKICAgICAgdGhpcy5jdXJyZW50Um93ID0gcm93OwogICAgICB0aGlzLmRyYXdlclZpc2libGUgPSB0cnVlOwogICAgICB0aGlzLnJlcXVlc3RNZXRob2QgPSByb3cuYXBpTW9kZS50b1VwcGVyQ2FzZSgpOwogICAgICAvLyDlnKhhcGlVcmzliY3pnaLliqDkuIror7fmsYLlpLRodHRwczovLzgwODAKICAgICAgLy8gdGhpcy5yZXF1ZXN0VXJsID0gYGh0dHA6Ly8xMjAuNDYuMTUuMTY1OjkxNjYke3Jvdy5hcGlVcmx9YDsKICAgICAgLy8gdGhpcy5yZXF1ZXN0VXJsID0gYGh0dHA6Ly8xMC4zMS4yNDMuMTgyOjkxNTcke3Jvdy5hcGlVcmx9YDsvL+acrOWcsOeOr+WigwogICAgICB0aGlzLnJlcXVlc3RVcmwgPSB3aW5kb3cuY29udGV4dC5kYXRhQXBpICsgcm93LmFwaVVybDsgLy8g5q2j5byP546v5aKDCiAgICAgIHRoaXMuaXNVcmxEaXNhYmxlZCA9IHRydWU7IC8vIOemgeeUqHJlcXVlc3RVcmzovpPlhaXmoYYKICAgICAgdGhpcy5pc01ldGhvZERpc2FibGVkID0gdHJ1ZTsgLy8g56aB55SocmVxdWVzdE1ldGhvZOmAieaLqeahhgogICAgICB0aGlzLnJlc3BvbnNlRGF0YSA9IG51bGw7CiAgICAgIHRoaXMucmVzcG9uc2VTdGF0dXMgPSBudWxsOwogICAgICB0aGlzLnJlc3BvbnNlVGltZSA9IG51bGw7CiAgICAgIHRoaXMucmVzcG9uc2VIZWFkZXJzID0gW107CiAgICAgIHRoaXMucmVzcG9uc2VDb29raWVzID0gW107CiAgICAgIHRoaXMucmVxdWVzdFBhcmFtcyA9IFt7CiAgICAgICAga2V5OiAnJywKICAgICAgICB2YWx1ZTogJycKICAgICAgfV07CiAgICAgIC8vIHRoaXMuYm9keUZvcm1hdCA9ICdyYXcnOyAvLyDph43nva7kuLpub25lCiAgICAgIC8vIOagueaNruivt+axguaWueazleiuvue9rum7mOiupOa/gOa0u+eahOagh+etvumhteWSjGJvZHlGb3JtYXQKICAgICAgaWYgKHRoaXMucmVxdWVzdE1ldGhvZC50b0xvd2VyQ2FzZSgpID09PSAnZ2V0JykgewogICAgICAgIHRoaXMuYWN0aXZlUmVxdWVzdFRhYiA9ICdwYXJhbXMnOwogICAgICAgIHRoaXMuYm9keUZvcm1hdCA9ICdub25lJzsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLmFjdGl2ZVJlcXVlc3RUYWIgPSAnYm9keSc7CiAgICAgICAgdGhpcy5ib2R5Rm9ybWF0ID0gJ3Jhdyc7CiAgICAgIH0KICAgICAgdGhpcy5ib2R5UGFyYW1zID0gW3sKICAgICAgICBrZXk6ICcnLAogICAgICAgIHZhbHVlOiAnJwogICAgICB9XTsgLy8g6YeN572u5Y+C5pWwCiAgICAgIHRoaXMucmF3Qm9keSA9ICcnOyAvLyDmuIXnqbpyYXcgYm9keQogICAgfSwKICAgIGhhbmRsZUJvZHlGb3JtYXRDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZUJvZHlGb3JtYXRDaGFuZ2UodmFsKSB7CiAgICAgIC8vIOW9k2JvZHnmoLzlvI/mlLnlj5jml7blj6/ku6XmiafooYzkuIDkupvpgLvovpEKICAgICAgY29uc29sZS5sb2coJ0JvZHkgZm9ybWF0IGNoYW5nZWQgdG86JywgdmFsKTsgLy8g5omT5Y2w54K55Ye755qE5Y2V6YCJ5qGGCgogICAgICAvLyDlpoLmnpzliIfmjaLliLBub25l77yM5Y+v5Lul5riF56m655u45YWz5pWw5o2uCiAgICAgIGlmICh2YWwgPT09ICdub25lJykgewogICAgICAgIHRoaXMuYm9keVBhcmFtcyA9IFt7CiAgICAgICAgICBrZXk6ICcnLAogICAgICAgICAgdmFsdWU6ICcnCiAgICAgICAgfV07CiAgICAgICAgdGhpcy5yYXdCb2R5ID0gJyc7CiAgICAgIH0KCiAgICAgIC8vIOWmguaenOWIh+aNouWIsGZvcm0tZGF0YeaIlngtd3d3LWZvcm0tdXJsZW5jb2RlZO+8jOehruS/neiHs+WwkeacieS4gOS4quWPguaVsAogICAgICBpZiAodmFsID09PSAnZm9ybS1kYXRhJyB8fCB2YWwgPT09ICd4LXd3dy1mb3JtLXVybGVuY29kZWQnKSB7CiAgICAgICAgaWYgKHRoaXMuYm9keVBhcmFtcy5sZW5ndGggPT09IDApIHsKICAgICAgICAgIHRoaXMuYm9keVBhcmFtcyA9IFt7CiAgICAgICAgICAgIGtleTogJycsCiAgICAgICAgICAgIHZhbHVlOiAnJwogICAgICAgICAgfV07CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgYWRkUGFyYW06IGZ1bmN0aW9uIGFkZFBhcmFtKCkgewogICAgICB0aGlzLnJlcXVlc3RQYXJhbXMucHVzaCh7CiAgICAgICAga2V5OiAnJywKICAgICAgICB2YWx1ZTogJycsCiAgICAgICAgZGVzY3JpcHRpb246ICcnCiAgICAgIH0pOwogICAgfSwKICAgIHJlbW92ZVBhcmFtOiBmdW5jdGlvbiByZW1vdmVQYXJhbShpbmRleCkgewogICAgICB0aGlzLnJlcXVlc3RQYXJhbXMuc3BsaWNlKGluZGV4LCAxKTsKICAgIH0sCiAgICAvLyDmlrDlop7vvJrmt7vliqDor7fmsYLlpLQKICAgIGFkZEhlYWRlcjogZnVuY3Rpb24gYWRkSGVhZGVyKCkgewogICAgICB0aGlzLnJlcXVlc3RIZWFkZXJzLnB1c2goewogICAgICAgIGtleTogJycsCiAgICAgICAgdmFsdWU6ICcnCiAgICAgIH0pOwogICAgfSwKICAgIC8vIOaWsOWinu+8muWIoOmZpOivt+axguWktAogICAgcmVtb3ZlSGVhZGVyOiBmdW5jdGlvbiByZW1vdmVIZWFkZXIoaW5kZXgpIHsKICAgICAgdGhpcy5yZXF1ZXN0SGVhZGVycy5zcGxpY2UoaW5kZXgsIDEpOwogICAgfSwKICAgIC8vIOaWsOWinu+8mua3u+WKoOivt+axguS9k+WPguaVsAogICAgYWRkQm9keVBhcmFtOiBmdW5jdGlvbiBhZGRCb2R5UGFyYW0oKSB7CiAgICAgIHRoaXMuYm9keVBhcmFtcy5wdXNoKHsKICAgICAgICBrZXk6ICcnLAogICAgICAgIHZhbHVlOiAnJwogICAgICB9KTsKICAgIH0sCiAgICAvLyDmlrDlop7vvJrliKDpmaTor7fmsYLkvZPlj4LmlbAKICAgIHJlbW92ZUJvZHlQYXJhbTogZnVuY3Rpb24gcmVtb3ZlQm9keVBhcmFtKGluZGV4KSB7CiAgICAgIHRoaXMuYm9keVBhcmFtcy5zcGxpY2UoaW5kZXgsIDEpOwogICAgfSwKICAgIC8vIGPmtYvor5XmjInpkq7lj5HpgIEKICAgIC8vIGPmtYvor5XmjInpkq7lj5HpgIEKICAgIHNlbmRSZXF1ZXN0OiBmdW5jdGlvbiBzZW5kUmVxdWVzdCgpIHsKICAgICAgdmFyIF90aGlzOCA9IHRoaXM7CiAgICAgIHJldHVybiBfYXN5bmNUb0dlbmVyYXRvcigvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoZnVuY3Rpb24gX2NhbGxlZTgoKSB7CiAgICAgICAgdmFyIHN0YXJ0VGltZSwgY29uZmlnLCBmb3JtRGF0YSwgcGFyYW1zLCBfcGFyYW1zLCByZXNwb25zZSwgcmVzcG9uc2VUaW1lOwogICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lKCkud3JhcChmdW5jdGlvbiBfY2FsbGVlOCQoX2NvbnRleHQ4KSB7CiAgICAgICAgICB3aGlsZSAoMSkgc3dpdGNoIChfY29udGV4dDgucHJldiA9IF9jb250ZXh0OC5uZXh0KSB7CiAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICBpZiAoX3RoaXM4LnJlcXVlc3RVcmwpIHsKICAgICAgICAgICAgICAgIF9jb250ZXh0OC5uZXh0ID0gMzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBfdGhpczguJG1lc3NhZ2Uud2FybmluZygn6K+36L6T5YWl6K+35rGCVVJMJyk7CiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0OC5hYnJ1cHQoInJldHVybiIpOwogICAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICAgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTsKICAgICAgICAgICAgICBjb25maWcgPSB7CiAgICAgICAgICAgICAgICBtZXRob2Q6IF90aGlzOC5yZXF1ZXN0TWV0aG9kLnRvTG93ZXJDYXNlKCksCiAgICAgICAgICAgICAgICB1cmw6IF90aGlzOC5yZXF1ZXN0VXJsLAogICAgICAgICAgICAgICAgaGVhZGVyczoge30sCiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IGZhbHNlIC8vIOS/ruaUueS4umZhbHNl77yM6Zmk6Z2e5L2g6ZyA6KaB5Y+R6YCBY29va2llcwogICAgICAgICAgICAgIH07IC8vIOWkhOeQhuivt+axguWktAoKICAgICAgICAgICAgICBfdGhpczgucmVxdWVzdEhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbiAoaGVhZGVyKSB7CiAgICAgICAgICAgICAgICBpZiAoaGVhZGVyLmtleSkgewogICAgICAgICAgICAgICAgICBjb25maWcuaGVhZGVyc1toZWFkZXIua2V5XSA9IGhlYWRlci52YWx1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICBfY29udGV4dDgucHJldiA9IDY7CiAgICAgICAgICAgICAgLy8g5qC55o2u6K+35rGC5pa55rOV5Yaz5a6a5aaC5L2V5aSE55CG5Y+C5pWwCiAgICAgICAgICAgICAgaWYgKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnLCAnZGVsZXRlJ10uaW5jbHVkZXMoX3RoaXM4LnJlcXVlc3RNZXRob2QudG9Mb3dlckNhc2UoKSkpIHsKICAgICAgICAgICAgICAgIC8vIOWPr+S7peW4pmJvZHnnmoTor7fmsYLmlrnms5UKICAgICAgICAgICAgICAgIGlmIChfdGhpczguYm9keUZvcm1hdCA9PT0gJ2Zvcm0tZGF0YScpIHsKICAgICAgICAgICAgICAgICAgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKICAgICAgICAgICAgICAgICAgX3RoaXM4LmJvZHlQYXJhbXMuZm9yRWFjaChmdW5jdGlvbiAocGFyYW0pIHsKICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW0ua2V5KSBmb3JtRGF0YS5hcHBlbmQocGFyYW0ua2V5LCBwYXJhbS52YWx1ZSk7CiAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICBjb25maWcuZGF0YSA9IGZvcm1EYXRhOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChfdGhpczguYm9keUZvcm1hdCA9PT0gJ3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpIHsKICAgICAgICAgICAgICAgICAgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpOwogICAgICAgICAgICAgICAgICBfdGhpczguYm9keVBhcmFtcy5mb3JFYWNoKGZ1bmN0aW9uIChwYXJhbSkgewogICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbS5rZXkpIHBhcmFtcy5hcHBlbmQocGFyYW0ua2V5LCBwYXJhbS52YWx1ZSk7CiAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICBjb25maWcuZGF0YSA9IHBhcmFtczsKICAgICAgICAgICAgICAgICAgY29uZmlnLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCc7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKF90aGlzOC5ib2R5Rm9ybWF0ID09PSAncmF3JykgewogICAgICAgICAgICAgICAgICBjb25maWcuZGF0YSA9IF90aGlzOC5yYXdCb2R5OwogICAgICAgICAgICAgICAgICBjb25maWcuaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSBfdGhpczgucmF3Rm9ybWF0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAvLyBHRVQvSEVBROetieivt+axgu+8jOWPguaVsOS9nOS4uuafpeivouWPguaVsAogICAgICAgICAgICAgICAgX3BhcmFtcyA9IHt9OwogICAgICAgICAgICAgICAgX3RoaXM4LnJlcXVlc3RQYXJhbXMuZm9yRWFjaChmdW5jdGlvbiAocGFyYW0pIHsKICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtLmtleSAmJiBwYXJhbS52YWx1ZSkgewogICAgICAgICAgICAgICAgICAgIF9wYXJhbXNbcGFyYW0ua2V5XSA9IHBhcmFtLnZhbHVlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIGNvbmZpZy5wYXJhbXMgPSBfcGFyYW1zOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBjb25zb2xlLmxvZygnU2VuZGluZyByZXF1ZXN0IHdpdGggY29uZmlnOicsIGNvbmZpZyk7IC8vIOatpOWkhOaJk+WNsOS6huaWueW8j++8jOWcsOWdgAogICAgICAgICAgICAgIF9jb250ZXh0OC5uZXh0ID0gMTE7CiAgICAgICAgICAgICAgcmV0dXJuIGF4aW9zKGNvbmZpZyk7CiAgICAgICAgICAgIGNhc2UgMTE6CiAgICAgICAgICAgICAgcmVzcG9uc2UgPSBfY29udGV4dDguc2VudDsKICAgICAgICAgICAgICByZXNwb25zZVRpbWUgPSBEYXRlLm5vdygpIC0gc3RhcnRUaW1lOyAvLyDlpITnkIblk43lupQuLi4KICAgICAgICAgICAgICBfdGhpczgucmVzcG9uc2VTdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7CiAgICAgICAgICAgICAgX3RoaXM4LnJlc3BvbnNlVGltZSA9IHJlc3BvbnNlVGltZTsKICAgICAgICAgICAgICBfdGhpczgucmVzcG9uc2VIZWFkZXJzID0gW107CiAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMocmVzcG9uc2UuaGVhZGVycykuZm9yRWFjaChmdW5jdGlvbiAoX3JlZjMpIHsKICAgICAgICAgICAgICAgIHZhciBfcmVmNCA9IF9zbGljZWRUb0FycmF5KF9yZWYzLCAyKSwKICAgICAgICAgICAgICAgICAga2V5ID0gX3JlZjRbMF0sCiAgICAgICAgICAgICAgICAgIHZhbHVlID0gX3JlZjRbMV07CiAgICAgICAgICAgICAgICBfdGhpczgucmVzcG9uc2VIZWFkZXJzLnB1c2goewogICAgICAgICAgICAgICAgICBrZXk6IGtleSwKICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICBfdGhpczgucmVzcG9uc2VEYXRhID0gcmVzcG9uc2UuZGF0YTsKICAgICAgICAgICAgICBfdGhpczgucHJvY2Vzc0Nvb2tpZXMocmVzcG9uc2UpOwogICAgICAgICAgICAgIF9jb250ZXh0OC5uZXh0ID0gMjY7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMjE6CiAgICAgICAgICAgICAgX2NvbnRleHQ4LnByZXYgPSAyMTsKICAgICAgICAgICAgICBfY29udGV4dDgudDAgPSBfY29udGV4dDhbImNhdGNoIl0oNik7CiAgICAgICAgICAgICAgaWYgKF9jb250ZXh0OC50MC5yZXNwb25zZSkgewogICAgICAgICAgICAgICAgX3RoaXM4LnJlc3BvbnNlU3RhdHVzID0gX2NvbnRleHQ4LnQwLnJlc3BvbnNlLnN0YXR1czsKICAgICAgICAgICAgICAgIF90aGlzOC5yZXNwb25zZURhdGEgPSBfY29udGV4dDgudDAucmVzcG9uc2UuZGF0YTsKICAgICAgICAgICAgICB9IGVsc2UgaWYgKF9jb250ZXh0OC50MC5yZXF1ZXN0KSB7CiAgICAgICAgICAgICAgICBfdGhpczgucmVzcG9uc2VEYXRhID0gJ+ivt+axguWHuumUmTog5rKh5pyJ5pS25Yiw5ZON5bqUJzsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgX3RoaXM4LnJlc3BvbnNlRGF0YSA9ICJcdThCRjdcdTZDNDJcdTUxRkFcdTk1MTk6ICIuY29uY2F0KF9jb250ZXh0OC50MC5tZXNzYWdlKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX3RoaXM4LnJlc3BvbnNlU3RhdHVzID0gJ0Vycm9yJzsKICAgICAgICAgICAgICBfdGhpczguJG1lc3NhZ2UuZXJyb3IoIlx1OEJGN1x1NkM0Mlx1NTkzMVx1OEQyNTogIi5jb25jYXQoX2NvbnRleHQ4LnQwLm1lc3NhZ2UpKTsKICAgICAgICAgICAgY2FzZSAyNjoKICAgICAgICAgICAgY2FzZSAiZW5kIjoKICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ4LnN0b3AoKTsKICAgICAgICAgIH0KICAgICAgICB9LCBfY2FsbGVlOCwgbnVsbCwgW1s2LCAyMV1dKTsKICAgICAgfSkpKCk7CiAgICB9LAogICAgcHJvY2Vzc0Nvb2tpZXM6IGZ1bmN0aW9uIHByb2Nlc3NDb29raWVzKHJlc3BvbnNlKSB7CiAgICAgIHZhciBfdGhpczkgPSB0aGlzOwogICAgICB0aGlzLnJlc3BvbnNlQ29va2llcyA9IFtdOwogICAgICB2YXIgY29va2llSGVhZGVyID0gcmVzcG9uc2UuaGVhZGVyc1snc2V0LWNvb2tpZSddIHx8ICcnOwogICAgICBpZiAoY29va2llSGVhZGVyKSB7CiAgICAgICAgLy8g5aSE55CG5aSa5LiqIGNvb2tpZQogICAgICAgIHZhciBjb29raWVzID0gQXJyYXkuaXNBcnJheShjb29raWVIZWFkZXIpID8gY29va2llSGVhZGVyIDogW2Nvb2tpZUhlYWRlcl07CiAgICAgICAgY29va2llcy5mb3JFYWNoKGZ1bmN0aW9uIChjb29raWUpIHsKICAgICAgICAgIC8vIOWIhuWJsuavj+S4qiBjb29raWUg5a2X56ym5LiyCiAgICAgICAgICB2YXIgcGFydHMgPSBjb29raWUuc3BsaXQoJzsnKTsKICAgICAgICAgIGlmIChwYXJ0cy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIHZhciBfcGFydHMkMCRzcGxpdCA9IHBhcnRzWzBdLnNwbGl0KCc9JyksCiAgICAgICAgICAgICAgX3BhcnRzJDAkc3BsaXQyID0gX3NsaWNlZFRvQXJyYXkoX3BhcnRzJDAkc3BsaXQsIDEpLAogICAgICAgICAgICAgIGtleVZhbHVlID0gX3BhcnRzJDAkc3BsaXQyWzBdOwogICAgICAgICAgICBpZiAoa2V5VmFsdWUpIHsKICAgICAgICAgICAgICBfdGhpczkucmVzcG9uc2VDb29raWVzLnB1c2goewogICAgICAgICAgICAgICAga2V5OiBrZXlWYWx1ZS50cmltKCksCiAgICAgICAgICAgICAgICB2YWx1ZTogcGFydHNbMF0uc3Vic3RyaW5nKGtleVZhbHVlLmxlbmd0aCArIDEpCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgfQogIH0KfTs="},null]}