Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:二级页面详情¥page_detail¥MyFieldᴰⁿ@@eyJkYXRhIjoie1wiYXNzb2NpYXRlZE1vZGVsc01hcEZvckpvaW5UYWJsZVwiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhGS1wiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhvdXRGS1wiOnt9LFwiZmllbGRzVG9TZXRUb0RlZmF1bHRcIjpbXSxcImlkXCI6MCxcImxhc3RfY2hhcHRlcl9ydWxlXCI6XCJcIixcImxpc3RUb0NsZWFyQXNzb2NpYXRlZEZLXCI6W10sXCJsaXN0VG9DbGVhclNlbGZGS1wiOltdLFwicGFnZUxpc3RcIjpbe1wiY29sX3R5cGVcIjpcInRleHRfMVwiLFwibmFtZVwiOlwiQ2xhc3NUYWJcIixcInBhdGhcIjpcIkNsYXNzVGFiXCIsXCJydWxlXCI6XCJmdW5jdGlvbiBDbGFzc1RhYihjbGFzc0FycmF5LCBwYXJhbXMpIHtcXG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLCBwYXJhbXMpXFxuICAgIHRoaXMuYXJyID0gY2xhc3NBcnJheS5tYXAodiA9PiB0aGlzLmluaXQodikpXFxuICAgIHRoaXMuc2lnbiA9ICckJyArIE1ZX1JVTEUudGl0bGUgKyAnXycgKyAodGhpcy5uYW1lIHx8ICcnKSArICdfJ1xcbiAgICB0aGlzLmNvbG9yID0gdGhpcy5jb2xvciB8fCAnIzEyYjY2OCdcXG4gICAgdGhpcy5ib3VuZGFyeSA9IHRoaXMuYm91bmRhcnkgfHwgJ2JsYW5rX2Jsb2NrJ1xcbn1cXG5DbGFzc1RhYi5wcm90b3R5cGUgPSB7XFxuICAgIGNvbnN0cnVjdG9yOiBDbGFzc1RhYixcXG4gICAgbG9hZChlbCkge1xcbiAgICAgICAgbGV0IGZvbGRlZCA9IGdldFZhcignZm9sZF8nICsgdGhpcy5zaWduLCAnJylcXG4gICAgICAgIGlmICh0aGlzLmZvbGQpIGVsLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPHNwYW4gc3R5bGU9XFxcImNvbG9yOiMwNDllZmZcXFwiPicgKyAoZm9sZGVkID8gJ+KWticgOiAn4pa8JyksXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChzaWduLCBmb2xkZWQpID0+IHtcXG4gICAgICAgICAgICAgICAgcHV0VmFyKCdmb2xkXycgKyBzaWduLCB7ICcnOiAnVCcsICdUJzogJycgfSBbZm9sZGVkXSlcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICB9LCB0aGlzLnNpZ24sIGZvbGRlZCksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbiAgICAgICAgfSlcXG4gICAgICAgIGxldCBhcnIgPSBmb2xkZWQgPyBbdGhpcy5hcnJbMF1dIDogdGhpcy5hcnJcXG4gICAgICAgIGFyci5mb3JFYWNoKCh2KSA9PiB7XFxuICAgICAgICAgICAgbGV0IHsgaWQsIGNsYXNzX25hbWUsIGNsYXNzX3VybCB9ID0gdixcXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmdldENsYXNzKGlkKSlcXG4gICAgICAgICAgICBjbGFzc19uYW1lLmZvckVhY2goKG5hbWUsIGkpID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IHVybCA9IGNsYXNzX3VybFtpXSxcXG4gICAgICAgICAgICAgICAgICAgIG5vdyA9IEpTT04uc3RyaW5naWZ5KHsgbmFtZTogbmFtZSwgdXJsOiB1cmwgfSlcXG4gICAgICAgICAgICAgICAgZWwucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogKHNlbGVjdGVkID09IG5vdyA/ICfigJzigJzigJ3igJ08c3BhbiBzdHlsZT1cXFwiY29sb3I6JyArIHRoaXMuY29sb3IgKyAnXFxcIj48Yj4nIDogJycpICsgbmFtZSxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoc2lnbiwgaWQsIG5vdykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dFZhcihzaWduICsgaWQsIG5vdylcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRWYXIoc2lnbiwgbm93KVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICAgICAgICAgIH0sIHRoaXMuc2lnbiwgaWQsIG5vdyksXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICBlbC5wdXNoKHsgY29sX3R5cGU6IHRoaXMuYm91bmRhcnkgfSlcXG4gICAgICAgIH0pXFxuICAgIH0sXFxuICAgIGluaXQoY2xhc3NPYmplY3QpIHtcXG4gICAgICAgIGlmICh0eXBlb2YgY2xhc3NPYmplY3QuY2xhc3NfbmFtZSA9PSAnc3RyaW5nJylcXG4gICAgICAgICAgICBjbGFzc09iamVjdC5jbGFzc19uYW1lID0gY2xhc3NPYmplY3QuY2xhc3NfbmFtZS5zcGxpdCgnJicpXFxuICAgICAgICBpZiAodHlwZW9mIGNsYXNzT2JqZWN0LmNsYXNzX3VybCA9PSAnc3RyaW5nJylcXG4gICAgICAgICAgICBjbGFzc09iamVjdC5jbGFzc191cmwgPSBjbGFzc09iamVjdC5jbGFzc191cmwuc3BsaXQoJyYnKS5tYXAoKHYpID0+IHYudHJpbSgpKVxcbiAgICAgICAgcmV0dXJuIGNsYXNzT2JqZWN0XFxuICAgIH0sXFxuICAgIHB1c2goY2xhc3NPYmplY3QpIHtcXG4gICAgICAgIHRoaXMuYXJyLnB1c2godGhpcy5pbml0KGNsYXNzT2JqZWN0KSlcXG4gICAgfSxcXG4gICAgZ2V0Q2xhc3MoaWQpIHtcXG4gICAgICAgIGxldCBkZWZhdWx0Q2xhc3MgPSB0aGlzLmFyci5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PSBpZClcXG4gICAgICAgIGlmIChkZWZhdWx0Q2xhc3MpIGRlZmF1bHRDbGFzcyA9IEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICBuYW1lOiBkZWZhdWx0Q2xhc3MuY2xhc3NfbmFtZVswXSxcXG4gICAgICAgICAgICB1cmw6IGRlZmF1bHRDbGFzcy5jbGFzc191cmxbMF1cXG4gICAgICAgIH0pXFxuICAgICAgICBlbHNlIHRocm93IG5ldyBFcnJvcignY2Fubm90IGZpbmQgaWQ6ICcgKyBpZCArICcgaW4gY2xhc3NUYWI6ICcgKyB0aGlzLnNpZ24pXFxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShnZXRWYXIodGhpcy5zaWduICsgaWQsIGRlZmF1bHRDbGFzcykpXFxuICAgIH0sXFxuICAgIGdldExhc3RDbGljaygpIHtcXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGdldFZhcih0aGlzLnNpZ24sICd7fScpKVxcbiAgICB9LFxcbiAgICBzZXRVcmwodXJsKSB7XFxuICAgICAgICByZXR1cm4gdXJsLnJlcGxhY2UoL1xcXFwkXFxcXHsoW159XSopXFxcXH0vZywgKF8sIGlkKSA9PiB0aGlzLmdldENsYXNzKGlkKS51cmwpXFxuICAgIH1cXG59XFxuJC5leHBvcnRzID0gQ2xhc3NUYWJcXG5cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIummlumhtVwiLFwicGF0aFwiOlwiaW5kZXhMb2FkXCIsXCJydWxlXCI6XCJqczpcXG5sZXQgbXlDb2xsZWN0aW9uX2VsID0gW10sXFxuICAgIHBhZ2VOdW0gPSBwYXJzZUludChNWV9VUkwuc3BsaXQoJyMnKVsxXSksXFxuICAgIFJVTEUgPSBNWV9QQVJBTVMuUlVMRSxcXG4gICAgZnlBbGwgPSBSVUxFLnVybC5pbmNsdWRlcygnZnlBbGwnKSxcXG4gICAgLy8g5Yqg6L29Q2xhc3NUYWLnu4Tku7ZcXG4gICAgQ2xhc3NUYWIgPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9DbGFzc1RhYj9ydWxlPScgKyBnZXRJdGVtKCdteUNvbGxlY3Rpb24nKSksXFxuICAgIHRhYkhlYWRlciA9IFtdXFxuXFxuaWYgKFJVTEUuY2xhc3NfbmFtZSkgdGFiSGVhZGVyLnB1c2goe1xcbiAgICBpZDogZnlBbGwgPyAnZnlBbGwnIDogJ2Z5Y2xhc3MnLFxcbiAgICBjbGFzc19uYW1lOiBSVUxFLmNsYXNzX25hbWUsXFxuICAgIGNsYXNzX3VybDogUlVMRS5jbGFzc191cmxcXG59KVxcbmlmIChSVUxFLmFyZWFfbmFtZSkgdGFiSGVhZGVyLnB1c2goe1xcbiAgICBpZDogZnlBbGwgPyAnZnlBbGwnIDogJ2Z5YXJlYScsXFxuICAgIGNsYXNzX25hbWU6IFJVTEUuYXJlYV9uYW1lLFxcbiAgICBjbGFzc191cmw6IFJVTEUuYXJlYV91cmxcXG59KVxcbmlmIChSVUxFLnllYXJfbmFtZSkgdGFiSGVhZGVyLnB1c2goe1xcbiAgICBpZDogZnlBbGwgPyAnZnlBbGwnIDogJ2Z5eWVhcicsXFxuICAgIGNsYXNzX25hbWU6IFJVTEUueWVhcl9uYW1lLFxcbiAgICBjbGFzc191cmw6IFJVTEUueWVhcl91cmxcXG59KVxcbmlmIChSVUxFLnNvcnRfbmFtZSkgdGFiSGVhZGVyLnB1c2goe1xcbiAgICBpZDogZnlBbGwgPyAnZnlBbGwnIDogJ2Z5c29ydCcsXFxuICAgIGNsYXNzX25hbWU6IFJVTEUuc29ydF9uYW1lLFxcbiAgICBjbGFzc191cmw6IFJVTEUuc29ydF91cmxcXG59KVxcbnRhYkhlYWRlciA9IG5ldyBDbGFzc1RhYih0YWJIZWFkZXIsIHsgbmFtZTogUlVMRS50aXRsZSB9KVxcbmlmIChwYWdlTnVtID09IDEpIHtcXG4gICAgYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAnY2xlYXJWYXIoXFxcIm15Q29sbGVjdGlvbi1zZWFyY2hNb2RlXFxcIiknKVxcbiAgICBwdXRWYXIoJ215Q29sbGVjdGlvbi1zZWFyY2hNb2RlJywgUlVMRS50aXRsZSlcXG4gICAgdGFiSGVhZGVyLmxvYWQobXlDb2xsZWN0aW9uX2VsKVxcbiAgICBpZiAoUlVMRS5zZWFyY2hfdXJsKSBteUNvbGxlY3Rpb25fZWwucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIuaQnOe0olxcXCIsXFxuICAgICAgICBkZXNjOiBcXFwi5pCc5L2g5oOz6KaB55qELi4uXFxcIixcXG4gICAgICAgIHVybDogJ1xcXCJoaWtlcjovL3BhZ2Uvc2luZ2xlU2VhcmNoP2tleXdvcmQ9XFxcIitpbnB1dCtcXFwiJnBhZ2U9ZnlwYWdlXFxcIicsXFxuICAgICAgICBleHRyYTogeyBydWxlOiBnZXRJdGVtKCdteUNvbGxlY3Rpb24nKSwgUlVMRTogUlVMRSB9LFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJpbnB1dFxcXCIsXFxuICAgIH0pXFxufVxcbi8vIOWkhOeQhk1ZX1VSTOWSjE1ZX1JVTEVcXG5NWV9SVUxFLnVhID0gUlVMRS51YVxcbk1ZX1JVTEUudGl0bGUgPSBSVUxFLnRpdGxlXFxuTVlfUlVMRS5jb2xfdHlwZSA9IFJVTEUuY29sX3R5cGVcXG5NWV9SVUxFLmRldGFpbF9jb2xfdHlwZSA9IFJVTEUuZGV0YWlsX2NvbF90eXBlXFxuTVlfUlVMRS5maW5kX3J1bGUgPSBSVUxFLmZpbmRfcnVsZVxcbk1ZX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSA9IFJVTEUuZGV0YWlsX2ZpbmRfcnVsZVxcbk1ZX1JVTEUucHJlUnVsZSA9IFJVTEUucHJlUnVsZVxcbk1ZX1JVTEUucGFnZUxpc3QgPSBKU09OLnBhcnNlKFJVTEUucGFnZXMgfHwgJ1tdJylcXG5NWV9SVUxFLnBhZ2VzID0gSlNPTi5zdHJpbmdpZnkoTVlfUlVMRS5wYWdlTGlzdClcXG5NWV9SVUxFLmxhc3RfY2hhcHRlcl9ydWxlID0gUlVMRS5sYXN0X2NoYXB0ZXJfcnVsZVxcbk1ZX1JVTEUucGFyYW1zID0ge31cXG5cXG5jb25zdCB7IHJ1bkNvZGUsIHVybFBhcnNlIH0gPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS91dGlsaXR5P3J1bGU9JyArIGdldEl0ZW0oJ215Q29sbGVjdGlvbicpKVxcbnZhciB7IE1ZX1VSTCwgTVlfVVJMX09wdGlvbnMgfSA9IHVybFBhcnNlKFJVTEUudXJsLCB7fSwgcGFnZU51bSwgKHVybCkgPT4ge1xcbiAgICB1cmxbMF0gPSBmeUFsbCA/IHVybFswXS5yZXBsYWNlKC9meUFsbC9nLCAnJCR7ZnlBbGx9JykgOiB1cmxbMF0ucmVwbGFjZSgvZnkoY2xhc3N8YXJlYXx5ZWFyfHNvcnQpL2csICckJHtmeSQxfScpXFxuICAgIHVybFswXSA9IHRhYkhlYWRlci5zZXRVcmwodXJsWzBdKVxcbn0pLFxcbiAgICBpbmRleEh0bWwgPSBmZXRjaChNWV9VUkwsIE1ZX1VSTF9PcHRpb25zKVxcbk1ZX1JVTEUudXJsID0gTVlfVVJMXFxuTVlfUlVMRS51cmxIZWFkZXJzID0gTVlfVVJMX09wdGlvbnMuaGVhZGVyc1xcbi8vIOato+aWh+ino+aekFxcbmlmIChwYWdlTnVtID09IDEpIGV2YWwoTVlfUlVMRS5wcmVSdWxlKVxcbmlmIChNWV9SVUxFLmZpbmRfcnVsZS5zdGFydHNXaXRoKCdqczonKSkge1xcbiAgICBmdW5jdGlvbiBnZXRVcmwoKSB7XFxuICAgICAgICByZXR1cm4gTVlfVVJMXFxuICAgIH1cXG5cXG4gICAgZnVuY3Rpb24gZ2V0UmVzQ29kZSgpIHtcXG4gICAgICAgIHJldHVybiBpbmRleEh0bWxcXG4gICAgfVxcblxcbiAgICBmdW5jdGlvbiBzZXRSZXN1bHQoZWwsIHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMpIHtcXG4gICAgICAgIHBhcmFtMSA9IENBTExCQUNLX0tFWVxcbiAgICAgICAgcGFyYW0yID0gTVlfUlVMRVxcbiAgICAgICAgcGFyYW0zID0gTVlfVFlQRVxcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZWwuZGF0YSkpIGVsID0gZWwuZGF0YVxcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkobXlDb2xsZWN0aW9uX2VsLCBlbC5tYXAoKHYpID0+IHtcXG4gICAgICAgICAgICBsZXQgTVlfX1JVTEUgPSBPYmplY3QuYXNzaWduKHt9LCBNWV9SVUxFKVxcbiAgICAgICAgICAgIHYuY29sX3R5cGUgPSB2LmNvbF90eXBlIHx8IE1ZX1JVTEUuY29sX3R5cGVcXG5cXG4gICAgICAgICAgICBpZiAoIXYudXJsIHx8IFsncnVsZScsICdwaWNzJywgJ3RvYXN0JywgJ2lucHV0JywgJ2NvcHknLCAnZWRpdEZpbGUnLCAneDUnLCAneDVXZWJWaWV3JywgJ3g1UGxheScsICd3ZWInLCAnc2VsZWN0JywgJ3g1UnVsZScsICd3ZWJSdWxlJ10uZmluZCgodnYpID0+IHYudXJsLnN0YXJ0c1dpdGgodnYgKyAnOi8vJykpKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiB2XFxuICAgICAgICAgICAgfSBlbHNlIGlmICh2LnVybC5pbmNsdWRlcygnQHJ1bGU9JykpIHtcXG4gICAgICAgICAgICAgICAgbGV0IFtfLCB1cmwsIHJ1bGVdID0gdi51cmwubWF0Y2goL14oW1xcXFxzXFxcXFNdKj8pQHJ1bGU9KFtcXFxcc1xcXFxTXSopJC8pXFxuICAgICAgICAgICAgICAgIHYudXJsID0gdXJsXFxuICAgICAgICAgICAgICAgIE1ZX19SVUxFLmRldGFpbF9maW5kX3J1bGUgPSBydWxlXFxuICAgICAgICAgICAgICAgIE1ZX19SVUxFLmRldGFpbF9jb2xfdHlwZSA9IE1ZX1JVTEUuY29sX3R5cGVcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHYudXJsLnN0YXJ0c1dpdGgoJ2hpa2VyOi8vcGFnZS8nKSkge1xcbiAgICAgICAgICAgICAgICBpZiAodi51cmwuaW5jbHVkZXMoJ3J1bGU9JykgfHwgKHYuZXh0cmEgfHwge30pLnJ1bGUpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdlxcbiAgICAgICAgICAgICAgICBsZXQgW18sIHBhdGgsIHBhcmFtc10gPSB2LnVybC5zcGxpdCgnIycpWzBdLm1hdGNoKC9eaGlrZXI6XFxcXC9cXFxcL3BhZ2VcXFxcLyguKz8pKD86XFxcXD8oLiopKT8kLyksXFxuICAgICAgICAgICAgICAgICAgICBzdWJQYWdlID0gTVlfUlVMRS5wYWdlTGlzdC5maW5kKCh2KSA9PiB2LnBhdGggPT0gcGF0aCksXFxuICAgICAgICAgICAgICAgICAgICBzdWJVcmwgPSAocGFyYW1zIHx8ICcnKS5zcGxpdCgnJicpLmZpbmQoKHYpID0+IHYuc3RhcnRzV2l0aCgndXJsPScpKVxcbiAgICAgICAgICAgICAgICB2LnVybCA9IHN1YlVybCA/IHN1YlVybC5zbGljZSg0KS5yZXBsYWNlKC/vvJ/vvJ8vZywgJz8nKS5yZXBsYWNlKC/vvIbvvIYvZywgJyYnKSA6ICh2LmV4dHJhIHx8IHt9KS51cmwgfHwgJ2hpa2VyOi8vZW1wdHk/JyArIChwYXJhbXMgfHwgJycpXFxuICAgICAgICAgICAgICAgIE1ZX19SVUxFLmRldGFpbF9maW5kX3J1bGUgPSBzdWJQYWdlLnJ1bGVcXG4gICAgICAgICAgICAgICAgTVlfX1JVTEUuZGV0YWlsX2NvbF90eXBlID0gc3ViUGFnZS5jb2xfdHlwZVxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5wYXJhbXMgPSB2LmV4dHJhIHx8IHt9XFxuICAgICAgICAgICAgfSBlbHNlIGlmICh2LnVybC5pbmNsdWRlcygnQGxhenlSdWxlPScpKSB7XFxuICAgICAgICAgICAgICAgIHYudXJsID0gdi51cmwucmVwbGFjZSgnLmpzOicsICcuanM6XFxcXG5pZihNWV9SVUxFKU9iamVjdC5hc3NpZ24oTVlfUlVMRSwnICsgJC5zdHJpbmdpZnkoeyBwYWdlczogTVlfUlVMRS5wYWdlcywgcGFnZUxpc3Q6IE1ZX1JVTEUucGFnZUxpc3QsIGZpbmRfcnVsZTogJycsIHBhcmFtczogJycgfSkgKyAnKTtNWV9VUkw9XFxcIicgKyBNWV9VUkwgKyAnXFxcIjsnKVxcbiAgICAgICAgICAgICAgICByZXR1cm4gdlxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIU1ZX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSB8fCB2LnVybC5zdGFydHNXaXRoKCdoaWtlcjovLycpKSB7IHJldHVybiB2IH1cXG4gICAgICAgICAgICB2LmV4dHJhID0geyB1cmw6IHYudXJsLCBSVUxFOiBNWV9fUlVMRSwgcGFnZVRpdGxlOiB2LnRpdGxlIH1cXG4gICAgICAgICAgICB2LnVybCA9ICdoaWtlcjovL3BhZ2UvZGV0YWlsTG9hZD9ydWxlPScgKyBnZXRJdGVtKCdteUNvbGxlY3Rpb24nKVxcbiAgICAgICAgICAgIGlmICh2LmV4dHJhLlJVTEUudXJsLmluY2x1ZGVzKCcjaW1tZXJzaXZlVGhlbWUjJykpIHYudXJsICs9ICcmI2ltbWVyc2l2ZVRoZW1lIydcXG4gICAgICAgICAgICByZXR1cm4gdlxcbiAgICAgICAgfSkpXFxuICAgICAgICBtZXRob2Rfc2V0UmVzdWx0Lmludm9rZShqYXZhQ29udGV4dCwgbXlDb2xsZWN0aW9uX2VsLCBwYXJhbTEsIHBhcmFtMiwgcGFyYW0zKVxcbiAgICB9XFxuICAgIHNldEhvbWVSZXN1bHQgPSBzZXRSZXN1bHRcXG4gICAgc2V0U2VhcmNoUmVzdWx0ID0gc2V0UmVzdWx0XFxuXFxuICAgIGV2YWwoTVlfUlVMRS5maW5kX3J1bGUuc2xpY2UoMykpXFxufSBlbHNlIHtcXG4gICAgbGV0IGZpbmRSdWxlID0gTVlfUlVMRS5maW5kX3J1bGUuc3BsaXQoJzsnKVxcbiAgICBwYXJzZURvbUZvckFycmF5KGluZGV4SHRtbCwgZmluZFJ1bGUuc2hpZnQoKSkuZm9yRWFjaCgoZGF0YSkgPT4ge1xcbiAgICAgICAgbGV0IFt0aXRsZSwgaW1nLCBkZXNjLCB1cmxdID0gZmluZFJ1bGUubWFwKCh2LCBpKSA9PiB7XFxuICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAodiA9PSAnKicpIHJldHVybiAnJ1xcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB2ID0gKGkgPT0gMSB8fCBpID09IDMpID9cXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZURvbShkYXRhLCB2KSA6XFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VEb21Gb3JIdG1sKGRhdGEsIHYpXFxuICAgICAgICAgICAgICAgICAgICBpZiAoaSAhPSAzKSB2ID0gcnVuQ29kZSh2KVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZcXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgeyByZXR1cm4gJycgfVxcbiAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgIHJlcyA9IHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICB1cmw6IHVybCxcXG4gICAgICAgICAgICAgICAgZGVzYzogZGVzYyxcXG4gICAgICAgICAgICAgICAgaW1nOiBpbWcsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBNWV9SVUxFLmNvbF90eXBlXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgaWYgKHJlcy51cmwpIHtcXG4gICAgICAgICAgICBpZiAocmVzLnVybC5pbmNsdWRlcygnQGxhenlSdWxlPScpKSB7XFxuICAgICAgICAgICAgICAgIHJlcy51cmwgPSByZXMudXJsLnJlcGxhY2UoJy5qczonLCAnLmpzOlxcXFxuaWYoTVlfUlVMRSlPYmplY3QuYXNzaWduKE1ZX1JVTEUsJyArICQuc3RyaW5naWZ5KHsgcGFnZXM6IE1ZX1JVTEUucGFnZXMsIHBhZ2VMaXN0OiBNWV9SVUxFLnBhZ2VMaXN0LCBmaW5kX3J1bGU6ICcnLCBwYXJhbXM6ICcnIH0pICsgJyk7TVlfVVJMPVxcXCInICsgTVlfVVJMICsgJ1xcXCI7JylcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKE1ZX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSkge1xcbiAgICAgICAgICAgICAgICByZXMuZXh0cmEgPSB7IHVybDogdXJsLCBSVUxFOiBNWV9SVUxFLCBwYWdlVGl0bGU6IHRpdGxlIH1cXG4gICAgICAgICAgICAgICAgcmVzLnVybCA9ICdoaWtlcjovL3BhZ2UvZGV0YWlsTG9hZD9ydWxlPScgKyBnZXRJdGVtKCdteUNvbGxlY3Rpb24nKVxcbiAgICAgICAgICAgICAgICBpZiAocmVzLmV4dHJhLlJVTEUudXJsLmluY2x1ZGVzKCcjaW1tZXJzaXZlVGhlbWUjJykpIHJlcy51cmwgKz0gJyYjaW1tZXJzaXZlVGhlbWUjJ1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIG15Q29sbGVjdGlvbl9lbC5wdXNoKHJlcylcXG4gICAgfSlcXG4gICAgc2V0UmVzdWx0KG15Q29sbGVjdGlvbl9lbClcXG59XFxuXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLor6bmg4VcIixcInBhdGhcIjpcImRldGFpbExvYWRcIixcInJ1bGVcIjpcImpzOlxcbmxldCBteUNvbGxlY3Rpb25fZWwgPSBbXSxcXG4gICAgcGFnZU51bSA9IDFcXG5cXG4vLyDlpITnkIZNWV9VUkzlkoxNWV9SVUxFXFxubGV0IFJVTEUgPSBNWV9QQVJBTVMuUlVMRVxcbk1ZX1JVTEUudWEgPSBSVUxFLnVhXFxuTVlfUlVMRS50aXRsZSA9IFJVTEUudGl0bGVcXG5NWV9SVUxFLmNvbF90eXBlID0gUlVMRS5kZXRhaWxfY29sX3R5cGVcXG5NWV9SVUxFLmZpbmRfcnVsZSA9IFJVTEUuZGV0YWlsX2ZpbmRfcnVsZVxcbk1ZX1JVTEUucHJlUnVsZSA9IFJVTEUucHJlUnVsZVxcbk1ZX1JVTEUucGFnZUxpc3QgPSBSVUxFLnBhZ2VMaXN0XFxuTVlfUlVMRS5wYWdlcyA9IFJVTEUucGFnZXNcXG5NWV9SVUxFLmxhc3RfY2hhcHRlcl9ydWxlID0gUlVMRS5sYXN0X2NoYXB0ZXJfcnVsZVxcbk1ZX1JVTEUucGFyYW1zID0gUlVMRS5wYXJhbXNcXG5cXG5jb25zdCB7IHJ1bkNvZGUsIHVybFBhcnNlIH0gPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS91dGlsaXR5P3J1bGU9JyArIGdldEl0ZW0oJ215Q29sbGVjdGlvbicpKVxcbmxldCBmeXBhZ2VGbGFnID0gTVlfUEFSQU1TLnVybC5pbmRleE9mKCdmeXBhZ2UnKVxcbmlmIChmeXBhZ2VGbGFnID49IDApIHBhZ2VOdW0gPSBwYXJzZUludCgvXlxcXFxkKy8uZXhlYyhNWV9VUkwuc2xpY2UoZnlwYWdlRmxhZykpKVxcbnZhciB7IE1ZX1VSTCwgTVlfVVJMX09wdGlvbnMgfSA9IHVybFBhcnNlKE1ZX1BBUkFNUy51cmwsIFJVTEUudXJsSGVhZGVycywgcGFnZU51bSksXFxuICAgIGluZGV4SHRtbCA9IGZldGNoKE1ZX1VSTCwgTVlfVVJMX09wdGlvbnMpXFxuTVlfUlVMRS51cmwgPSBNWV9VUkxcXG5NWV9SVUxFLnVybEhlYWRlcnMgPSBNWV9VUkxfT3B0aW9ucy5oZWFkZXJzXFxuLy8g6Kej5p6Q5q2j5paHXFxuaWYgKE1ZX1BBUkFNUy5wYWdlVGl0bGUpIHNldFBhZ2VUaXRsZShNWV9QQVJBTVMucGFnZVRpdGxlKVxcbmV2YWwoTVlfUlVMRS5wcmVSdWxlKVxcbnNldExhc3RDaGFwdGVyUnVsZShNWV9SVUxFLmxhc3RfY2hhcHRlcl9ydWxlKVxcbk1ZX1BBUkFNUyA9IE1ZX1JVTEUucGFyYW1zXFxuaWYgKE1ZX1JVTEUuZmluZF9ydWxlLnN0YXJ0c1dpdGgoJ2pzOicpKSB7XFxuICAgIGZ1bmN0aW9uIGdldFVybCgpIHtcXG4gICAgICAgIHJldHVybiBNWV9VUkxcXG4gICAgfVxcblxcbiAgICBmdW5jdGlvbiBnZXRSZXNDb2RlKCkge1xcbiAgICAgICAgcmV0dXJuIGluZGV4SHRtbFxcbiAgICB9XFxuXFxuICAgIGZ1bmN0aW9uIHNldFJlc3VsdChlbCwgcGFyYW0xLCBwYXJhbTIsIHBhcmFtMykge1xcbiAgICAgICAgcGFyYW0xID0gQ0FMTEJBQ0tfS0VZXFxuICAgICAgICBwYXJhbTIgPSBNWV9SVUxFXFxuICAgICAgICBwYXJhbTMgPSBNWV9UWVBFXFxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShlbC5kYXRhKSkgZWwgPSBlbC5kYXRhXFxuICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShteUNvbGxlY3Rpb25fZWwsIGVsLm1hcCgodikgPT4ge1xcbiAgICAgICAgICAgIGxldCBNWV9fUlVMRSA9IE9iamVjdC5hc3NpZ24oe30sIE1ZX1JVTEUpXFxuICAgICAgICAgICAgdi5jb2xfdHlwZSA9IHYuY29sX3R5cGUgfHwgTVlfUlVMRS5jb2xfdHlwZVxcblxcbiAgICAgICAgICAgIGlmICghdi51cmwgfHwgWydydWxlJywgJ3BpY3MnLCAndG9hc3QnLCAnaW5wdXQnLCAnY29weScsICdlZGl0RmlsZScsICd4NScsICd4NVdlYlZpZXcnLCAneDVQbGF5JywgJ3dlYicsICdzZWxlY3QnLCAneDVSdWxlJywgJ3dlYlJ1bGUnXS5maW5kKCh2dikgPT4gdi51cmwuc3RhcnRzV2l0aCh2diArICc6Ly8nKSkpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHYudXJsLmluY2x1ZGVzKCdAcnVsZT0nKSkge1xcbiAgICAgICAgICAgICAgICBsZXQgW18sIHVybCwgcnVsZV0gPSB2LnVybC5tYXRjaCgvXihbXFxcXHNcXFxcU10qPylAcnVsZT0oW1xcXFxzXFxcXFNdKikkLylcXG4gICAgICAgICAgICAgICAgdi51cmwgPSB1cmxcXG4gICAgICAgICAgICAgICAgTVlfX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSA9IHJ1bGVcXG4gICAgICAgICAgICAgICAgTVlfX1JVTEUuZGV0YWlsX2NvbF90eXBlID0gTVlfUlVMRS5jb2xfdHlwZVxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodi51cmwuc3RhcnRzV2l0aCgnaGlrZXI6Ly9wYWdlLycpKSB7XFxuICAgICAgICAgICAgICAgIGlmICh2LnVybC5pbmNsdWRlcygncnVsZT0nKSB8fCAodi5leHRyYSB8fCB7fSkucnVsZSlcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2XFxuICAgICAgICAgICAgICAgIGxldCBbXywgcGF0aCwgcGFyYW1zXSA9IHYudXJsLnNwbGl0KCcjJylbMF0ubWF0Y2goL15oaWtlcjpcXFxcL1xcXFwvcGFnZVxcXFwvKC4rPykoPzpcXFxcPyguKikpPyQvKSxcXG4gICAgICAgICAgICAgICAgICAgIHN1YlBhZ2UgPSBNWV9SVUxFLnBhZ2VMaXN0LmZpbmQoKHYpID0+IHYucGF0aCA9PSBwYXRoKSxcXG4gICAgICAgICAgICAgICAgICAgIHN1YlVybCA9IChwYXJhbXMgfHwgJycpLnNwbGl0KCcmJykuZmluZCgodikgPT4gdi5zdGFydHNXaXRoKCd1cmw9JykpXFxuICAgICAgICAgICAgICAgIHYudXJsID0gc3ViVXJsID8gc3ViVXJsLnNsaWNlKDQpLnJlcGxhY2UoL++8n++8ny9nLCAnPycpLnJlcGxhY2UoL++8hu+8hi9nLCAnJicpIDogKHYuZXh0cmEgfHwge30pLnVybCB8fCAnaGlrZXI6Ly9lbXB0eT8nICsgKHBhcmFtcyB8fCAnJylcXG4gICAgICAgICAgICAgICAgTVlfX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSA9IHN1YlBhZ2UucnVsZVxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5kZXRhaWxfY29sX3R5cGUgPSBzdWJQYWdlLmNvbF90eXBlXFxuICAgICAgICAgICAgICAgIE1ZX19SVUxFLnBhcmFtcyA9IHYuZXh0cmEgfHwge31cXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHYudXJsLmluY2x1ZGVzKCdAbGF6eVJ1bGU9JykpIHtcXG4gICAgICAgICAgICAgICAgdi51cmwgPSB2LnVybC5yZXBsYWNlKCcuanM6JywgJy5qczpcXFxcbmlmKE1ZX1JVTEUpT2JqZWN0LmFzc2lnbihNWV9SVUxFLCcgKyAkLnN0cmluZ2lmeSh7IHBhZ2VzOiBNWV9SVUxFLnBhZ2VzLCBwYWdlTGlzdDogTVlfUlVMRS5wYWdlTGlzdCwgZmluZF9ydWxlOiAnJywgcGFyYW1zOiAnJyB9KSArICcpO01ZX1VSTD1cXFwiJyArIE1ZX1VSTCArICdcXFwiOycpXFxuICAgICAgICAgICAgICAgIHJldHVybiB2XFxuICAgICAgICAgICAgfSBlbHNlIHsgcmV0dXJuIHYgfVxcbiAgICAgICAgICAgIHYuZXh0cmEgPSB7IHVybDogdi51cmwsIFJVTEU6IE1ZX19SVUxFIH1cXG4gICAgICAgICAgICB2LnVybCA9ICdoaWtlcjovL3BhZ2UvZGV0YWlsTG9hZD9ydWxlPScgKyBnZXRJdGVtKCdteUNvbGxlY3Rpb24nKVxcbiAgICAgICAgICAgIGlmICh2LmV4dHJhLlJVTEUudXJsLmluY2x1ZGVzKCcjaW1tZXJzaXZlVGhlbWUjJykpIHYudXJsICs9ICcmI2ltbWVyc2l2ZVRoZW1lIydcXG4gICAgICAgICAgICByZXR1cm4gdlxcbiAgICAgICAgfSkpXFxuICAgICAgICBtZXRob2Rfc2V0UmVzdWx0Lmludm9rZShqYXZhQ29udGV4dCwgbXlDb2xsZWN0aW9uX2VsLCBwYXJhbTEsIHBhcmFtMiwgcGFyYW0zKVxcbiAgICB9XFxuICAgIHNldEhvbWVSZXN1bHQgPSBzZXRSZXN1bHRcXG4gICAgc2V0U2VhcmNoUmVzdWx0ID0gc2V0UmVzdWx0XFxuXFxuICAgIGV2YWwoTVlfUlVMRS5maW5kX3J1bGUuc2xpY2UoMykpXFxufSBlbHNlIHtcXG4gICAgbGV0IFtfLCBmaW5kUnVsZSwgZGV0YWlsRmluZFJ1bGVdID0gTVlfUlVMRS5maW5kX3J1bGUubWF0Y2goL14oLio/KSg/Oj09PiguKikpPyQvKVxcbiAgICBmaW5kUnVsZSA9IGZpbmRSdWxlLnNwbGl0KCc7JylcXG4gICAgcGFyc2VEb21Gb3JBcnJheShpbmRleEh0bWwsIGZpbmRSdWxlLnNoaWZ0KCkpLmZvckVhY2goKGRhdGEpID0+IHtcXG4gICAgICAgIGxldCBbdGl0bGUsIGltZywgZGVzYywgdXJsXSA9IGZpbmRSdWxlLm1hcCgodiwgaSkgPT4ge1xcbiAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKHYgPT0gJyonKSByZXR1cm4gJydcXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgdiA9IChpID09IDEgfHwgaSA9PSAzKSA/XFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VEb20oZGF0YSwgdikgOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRG9tRm9ySHRtbChkYXRhLCB2KVxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT0gMykgdiA9IHJ1bkNvZGUodilcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2XFxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsgcmV0dXJuICcnIH1cXG4gICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICByZXMgPSB7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgdXJsOiB1cmwsXFxuICAgICAgICAgICAgICAgIGRlc2M6IGRlc2MsXFxuICAgICAgICAgICAgICAgIGltZzogaW1nLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogTVlfUlVMRS5jb2xfdHlwZVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIGlmIChyZXMudXJsKSB7XFxuICAgICAgICAgICAgaWYgKHJlcy51cmwuaW5jbHVkZXMoJ0BsYXp5UnVsZT0nKSkge1xcbiAgICAgICAgICAgICAgICByZXMudXJsID0gcmVzLnVybC5yZXBsYWNlKCcuanM6JywgJy5qczpcXFxcbmlmKE1ZX1JVTEUpT2JqZWN0LmFzc2lnbihNWV9SVUxFLCcgKyAkLnN0cmluZ2lmeSh7IHBhZ2VzOiBNWV9SVUxFLnBhZ2VzLCBwYWdlTGlzdDogTVlfUlVMRS5wYWdlTGlzdCwgZmluZF9ydWxlOiAnJywgcGFyYW1zOiAnJyB9KSArICcpO01ZX1VSTD1cXFwiJyArIE1ZX1VSTCArICdcXFwiOycpXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChkZXRhaWxGaW5kUnVsZSkge1xcbiAgICAgICAgICAgICAgICByZXMuZXh0cmEgPSB7IHVybDogdXJsLCBSVUxFOiBPYmplY3QuYXNzaWduKHt9LCBNWV9SVUxFLCB7IGRldGFpbF9maW5kX3J1bGU6IGRldGFpbEZpbmRSdWxlIH0pIH1cXG4gICAgICAgICAgICAgICAgcmVzLnVybCA9ICdoaWtlcjovL3BhZ2UvZGV0YWlsTG9hZD9ydWxlPScgKyBnZXRJdGVtKCdteUNvbGxlY3Rpb24nKVxcbiAgICAgICAgICAgICAgICBpZiAocmVzLmV4dHJhLlJVTEUudXJsLmluY2x1ZGVzKCcjaW1tZXJzaXZlVGhlbWUjJykpIHJlcy51cmwgKz0gJyYjaW1tZXJzaXZlVGhlbWUjJ1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIG15Q29sbGVjdGlvbl9lbC5wdXNoKHJlcylcXG4gICAgfSlcXG4gICAgc2V0UmVzdWx0KG15Q29sbGVjdGlvbl9lbClcXG59XFxuXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLlt6Xlhbfpm4ZcIixcInBhdGhcIjpcInV0aWxpdHlcIixcInJ1bGVcIjpcIiQuZXhwb3J0cyA9IHtcXG4gICAgZGF0YUxvYWQ6IGZ1bmN0aW9uKHNob3dBbGwpIHtcXG4gICAgICAgIC8v5qOA5p+l6Ze06ZqU77yM6buY6K6k5LiA5aSpXFxuICAgICAgICBsZXQgaW50ZXJ2YWwgPSBwYXJzZUludChyZWFkRmlsZSgndXBkYXRlSW50ZXJ2YWwnKSB8fCAnMScpLFxcbiAgICAgICAgICAgIHRpbWUgPSBwYXJzZUludChyZWFkRmlsZSgndXBkYXRlVGltZScpKSB8fCAwLFxcbiAgICAgICAgICAgIG5vdyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpLFxcbiAgICAgICAgICAgIGRhdGEgPSBbXVxcbiAgICAgICAgaWYgKHRpbWUgPT0gMCB8fCBpbnRlcnZhbCA+IDAgJiYgbm93IC0gdGltZSA+IDEwMDAgKiA2MCAqIDYwICogMjQgKiBpbnRlcnZhbCkge1xcbiAgICAgICAgICAgIC8vIOiOt+WPlui/nOeoi+aVsOaNrlxcbiAgICAgICAgICAgIGxldCB1cmwgPSBnZXRJdGVtKCdyZW1vdGVVcmwnKVxcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIGxldCByZW1vdGVEYXRhID0gZmV0Y2godXJsKVxcbiAgICAgICAgICAgICAgICBpZiAodXJsLnN0YXJ0c1dpdGgoJ2hpa2VyOi8vcGFnZS8nKSlcXG4gICAgICAgICAgICAgICAgICAgIHJlbW90ZURhdGEgPSBKU09OLnBhcnNlKHJlbW90ZURhdGEpLnJ1bGVcXG4gICAgICAgICAgICAgICAgZGF0YSA9IEpTT04ucGFyc2UocmVtb3RlRGF0YSlcXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxcbiAgICAgICAgICAgIGlmKGRhdGEubGVuZ3RoID09IDApIHtcXG4gICAgICAgICAgICAgICAgZGF0YSA9IEpTT04ucGFyc2UocmVhZEZpbGUoJ2RhdGFDYWNoZScpIHx8ICdbXScpXFxuICAgICAgICAgICAgICAgIGxvZygn5rKh5pyJ6I635Y+W5Yiw5pu05paw5pWw5o2uJylcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBkYXRhID0gZGF0YS5maWx0ZXIoKHYpID0+IHsgcmV0dXJuIHYudGl0bGUgIT0gZ2V0SXRlbSgnbXlDb2xsZWN0aW9uJykgJiYgIXYuYXV0aG9yLmluY2x1ZGVzKCfovbvlkIjpm4bnlJ/miJDlmagnKSB9KVxcbiAgICAgICAgICAgICAgICBzYXZlRmlsZSgnZGF0YUNhY2hlJywgSlNPTi5zdHJpbmdpZnkoZGF0YSkpXFxuICAgICAgICAgICAgICAgIHNhdmVGaWxlKCd1cGRhdGVUaW1lJywgbm93LnRvU3RyaW5nKCkpXFxuICAgICAgICAgICAgICAgIGxvZygn5pu05paw5pWw5o2u5bey5YaZ5YWl5pys5ZywJylcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKHJlYWRGaWxlKCdkYXRhQ2FjaGUnKSB8fCAnW10nKVxcbiAgICAgICAgfVxcbiAgICAgICAgLy8g5YaZ5YWl6Ieq5a6a5LmJ5pWw5o2uXFxuICAgICAgICBsZXQgY3VzdG9tRGF0YSA9IEpTT04ucGFyc2UocmVhZEZpbGUoJ2N1c3RvbURhdGEnKSB8fCAnW10nKSxcXG4gICAgICAgICAgICByZXdyaXRlRGF0YSA9IFtdXFxuICAgICAgICBjdXN0b21EYXRhID0gY3VzdG9tRGF0YS5yZWR1Y2UoKHNlbGYsIHYpID0+IHtcXG4gICAgICAgICAgICBsZXQgaW5kZXggPSBkYXRhLmZpbmRJbmRleCgodnYpID0+IHYudGl0bGUgPT0gdnYudGl0bGUpXFxuICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcXG4gICAgICAgICAgICAgICAgc2VsZi5wdXNoKHYpXFxuICAgICAgICAgICAgICAgIGxldCBydWxlID0gZGF0YS5zcGxpY2UoaW5kZXgsIDEpWzBdXFxuICAgICAgICAgICAgICAgIGlmKHNob3dBbGwgfHwgdi52aXNpYmxlKVxcbiAgICAgICAgICAgICAgICAgICAgcmV3cml0ZURhdGEucHVzaChPYmplY3QuYXNzaWduKHJ1bGUsIHYpKVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gc2VsZlxcbiAgICAgICAgfSwgW10pXFxuICAgICAgICBkYXRhLmZvckVhY2goKHYpID0+IGN1c3RvbURhdGEucHVzaCh7IHRpdGxlOiB2LnRpdGxlLCB2aXNpYmxlOiB0cnVlIH0pKVxcbiAgICAgICAgc2F2ZUZpbGUoJ2N1c3RvbURhdGEnLCBKU09OLnN0cmluZ2lmeShjdXN0b21EYXRhKSlcXG4gICAgICAgIHJldHVybiByZXdyaXRlRGF0YS5jb25jYXQoZGF0YSlcXG4gICAgfSxcXG4gICAgcnVuQ29kZTogZnVuY3Rpb24ocnVsZSkge1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICBsZXQgW2lucHV0LCBjb2RlXSA9IHJ1bGUuc3BsaXQoJy5qczonKVxcbiAgICAgICAgICAgIHJldHVybiBjb2RlID8gZXZhbChjb2RlKSA6IHJ1bGVcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgcmV0dXJuIHJ1bGUgfVxcbiAgICB9LFxcbiAgICB1cmxQYXJzZTogZnVuY3Rpb24odXJsLCBoZWFkZXJzLCBwYWdlTnVtLCBmdW5jKSB7XFxuICAgICAgICB1cmwgPSB1cmwuc3BsaXQoJzsnKS5tYXAoKHYpID0+IHYucmVwbGFjZSgv77yb77ybL2csICc7JykpXFxuICAgICAgICBpZiAoZnVuYykgZnVuYyh1cmwpXFxuICAgICAgICB1cmxbMF0gPSB1cmxbMF0ucmVwbGFjZSgvZnlwYWdlKD86QCgtP1xcXFxkKylAKT8oPzpcXFxcKihcXFxcZCspQCk/LywgKF8sIHN0YXJ0LCBzcGFjZSkgPT4gcGFyc2VJbnQoc3RhcnQgfHwgMCkgKyAxICsgKHBhZ2VOdW0gLSAxKSAqIHBhcnNlSW50KHNwYWNlIHx8IDEpKVxcbiAgICAgICAgdXJsWzBdID0gL14oW1xcXFxzXFxcXFNdKj8pKD86XFxcXFtmaXJzdFBhZ2U9KFtcXFxcc1xcXFxTXSo/KVxcXFxdKT8kLy5leGVjKHVybFswXSlcXG4gICAgICAgIHVybFswXSA9IHJ1bkNvZGUodXJsWzBdWzJdICYmIHBhZ2VOdW0gPT0gMSA/IHVybFswXVsyXSA6IHVybFswXVsxXSlcXG4gICAgICAgIGxldCBvcHRpb25zID0geyBoZWFkZXJzOiBoZWFkZXJzLCBtZXRob2Q6IHVybFsxXSB9XFxuICAgICAgICAvLyBwb3N05pa55rOV5pe26L2s5o2i5Y+C5pWwXFxuICAgICAgICBpZiAoL15wb3N0JC9pLnRlc3Qob3B0aW9uc1snbWV0aG9kJ10pKSB7XFxuICAgICAgICAgICAgbGV0IFtvcmlVcmwsIGJvZHldID0gdXJsWzBdLnNwbGl0KCc/JylcXG4gICAgICAgICAgICB1cmxbMF0gPSBvcmlVcmwucmVwbGFjZSgv77yf77yfL2csICc/JylcXG4gICAgICAgICAgICBpZiAoYm9keS5zdGFydHNXaXRoKCdKc29uQm9keT0nKSkgYm9keSA9IGJvZHkuc2xpY2UoOSlcXG4gICAgICAgICAgICBvcHRpb25zWydib2R5J10gPSBib2R5XFxuICAgICAgICB9XFxuICAgICAgICBpZiAodXJsWzJdKSBvcHRpb25zLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ3RleHQvcGxhaW47Y2hhcnN0PScgKyB1cmxbMl1cXG4gICAgICAgIGlmICh1cmxbM10pIHVybFszXS5tYXRjaCgveyguKil9LylbMV0uc3BsaXQoJyYmJykuZm9yRWFjaCgodikgPT4ge1xcbiAgICAgICAgICAgIGxldCBba2V5LCB2YWx1ZV0gPSB2LnNwbGl0KCdAJylcXG4gICAgICAgICAgICBvcHRpb25zLmhlYWRlcnNba2V5XSA9IHJ1bkNvZGUodmFsdWUpXFxuICAgICAgICB9KVxcbiAgICAgICAgLy8g5re75Yqg5YWo5bGAVUFcXG4gICAgICAgIGlmICghb3B0aW9ucy5oZWFkZXJzWydVc2VyLUFnZW50J10pIHtcXG4gICAgICAgICAgICBpZiAoTVlfUlVMRS51YSA9PSAncGMnKVxcbiAgICAgICAgICAgICAgICBvcHRpb25zLmhlYWRlcnNbJ1VzZXItQWdlbnQnXSA9IFBDX1VBXFxuICAgICAgICAgICAgZWxzZSBpZiAoTVlfUlVMRS51YSA9PSAnbW9iaWxlJylcXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5oZWFkZXJzWydVc2VyLUFnZW50J10gPSBNT0JJTEVfVUFcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiB7IE1ZX1VSTDogdXJsWzBdLCBNWV9VUkxfT3B0aW9uczogb3B0aW9ucyB9XFxuICAgIH1cXG59XFxuXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8xX3ZlcnRpY2FsX3BpY1wiLFwibmFtZVwiOlwi5Y2V5pCcXCIsXCJwYXRoXCI6XCJzaW5nbGVTZWFyY2hcIixcInJ1bGVcIjpcImpzOlxcbmxldCBteUNvbGxlY3Rpb25fZWwgPSBbXSxcXG4gICAgUlVMRSA9IE1ZX1BBUkFNUy5SVUxFLFxcbiAgICBrZXl3b3JkID0gZ2V0UGFyYW0oJ2tleXdvcmQnKSxcXG4gICAgcGFnZU51bSA9IHBhcnNlSW50KGdldFBhcmFtKCdwYWdlJykpXFxuXFxuLy8g5aSE55CGTVlfVVJM5ZKMTVlfUlVMRVxcbk1ZX1RZUEUgPSAnc2VhcmNoJ1xcbk1ZX1JVTEUudWEgPSBSVUxFLnVhXFxuTVlfUlVMRS50aXRsZSA9IFJVTEUudGl0bGVcXG5NWV9SVUxFLmNvbF90eXBlID0gUlVMRS5jb2xfdHlwZVxcbk1ZX1JVTEUuZGV0YWlsX2NvbF90eXBlID0gWycnLCAnKiddLmluY2x1ZGVzKFJVTEUuc2RldGFpbF9maW5kX3J1bGUpID8gUlVMRS5kZXRhaWxfY29sX3R5cGUgOiBSVUxFLnNkZXRhaWxfY29sX3R5cGVcXG5NWV9SVUxFLmZpbmRfcnVsZSA9IFJVTEUuc2VhcmNoRmluZFxcbk1ZX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSA9IFsnJywgJyonXS5pbmNsdWRlcyhSVUxFLnNkZXRhaWxfZmluZF9ydWxlKSA/IFJVTEUuZGV0YWlsX2ZpbmRfcnVsZSA6IFJVTEUuc2RldGFpbF9maW5kX3J1bGVcXG5NWV9SVUxFLnByZVJ1bGUgPSBSVUxFLnByZVJ1bGVcXG5NWV9SVUxFLnBhZ2VMaXN0ID0gSlNPTi5wYXJzZShSVUxFLnBhZ2VzIHx8ICdbXScpXFxuTVlfUlVMRS5wYWdlcyA9IEpTT04uc3RyaW5naWZ5KE1ZX1JVTEUucGFnZUxpc3QpXFxuTVlfUlVMRS5sYXN0X2NoYXB0ZXJfcnVsZSA9IFJVTEUubGFzdF9jaGFwdGVyX3J1bGVcXG5NWV9SVUxFLnBhcmFtcyA9IHt9XFxuXFxuY29uc3QgeyBydW5Db2RlLCB1cmxQYXJzZSB9ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvdXRpbGl0eT9ydWxlPScgKyBnZXRJdGVtKCdteUNvbGxlY3Rpb24nKSlcXG52YXIgeyBNWV9VUkwsIE1ZX1VSTF9PcHRpb25zIH0gPSB1cmxQYXJzZShSVUxFLnNlYXJjaF91cmwsIHt9LCBwYWdlTnVtLCAodXJsKSA9PiB7XFxuICAgIHVybFswXSA9IHVybFswXS5yZXBsYWNlKHVybFswXS5pbmNsdWRlcygnJSUnKSA/IC8lJS9nIDogL1xcXFwqXFxcXCovZywgZW5jb2RlU3RyKGtleXdvcmQsIHVybFsyXSkpXFxufSksXFxuICAgIGluZGV4SHRtbCA9IGZldGNoKE1ZX1VSTCwgTVlfVVJMX09wdGlvbnMpXFxuTVlfUlVMRS51cmwgPSBNWV9VUkxcXG5NWV9SVUxFLnVybEhlYWRlcnMgPSBNWV9VUkxfT3B0aW9ucy5oZWFkZXJzXFxuLy8g5q2j5paH6Kej5p6QXFxuaWYgKHBhZ2VOdW0gPT0gMSkgc2V0UGFnZVRpdGxlKCfigJwnICsga2V5d29yZCArICfigJ3nmoTmkJzntKLnu5PmnpwnKVxcbmlmIChNWV9SVUxFLmZpbmRfcnVsZS5zdGFydHNXaXRoKCdqczonKSkge1xcbiAgICBmdW5jdGlvbiBnZXRVcmwoKSB7XFxuICAgICAgICByZXR1cm4gTVlfVVJMXFxuICAgIH1cXG5cXG4gICAgZnVuY3Rpb24gZ2V0UmVzQ29kZSgpIHtcXG4gICAgICAgIHJldHVybiBpbmRleEh0bWxcXG4gICAgfVxcblxcbiAgICBmdW5jdGlvbiBzZXRSZXN1bHQoZWwsIHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMpIHtcXG4gICAgICAgIHBhcmFtMSA9IENBTExCQUNLX0tFWVxcbiAgICAgICAgcGFyYW0yID0gTVlfUlVMRVxcbiAgICAgICAgcGFyYW0zID0gTVlfVFlQRVxcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZWwuZGF0YSkpIGVsID0gZWwuZGF0YVxcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkobXlDb2xsZWN0aW9uX2VsLCBlbC5tYXAoKHYpID0+IHtcXG4gICAgICAgICAgICBsZXQgTVlfX1JVTEUgPSBPYmplY3QuYXNzaWduKHt9LCBNWV9SVUxFKSxcXG4gICAgICAgICAgICAgICAgc3ViVGl0bGUgPSB2LnRpdGxlXFxuICAgICAgICAgICAgdi50aXRsZSArPSAn4oCc4oCc4oCd4oCdPGJyPicgKyAoUlVMRS50aXRsZS5mb250Y29sb3IoJyMxMmI2NjgnKSArICcg4paqICcgKyAodi5kZXNjIHx8ICcnKS5mb250Y29sb3IoJyM2NjY2NjYnKSkuc21hbGwoKVxcbiAgICAgICAgICAgIHYuZGVzYyA9IHYuY29udGVudCB8fCAnJ1xcbiAgICAgICAgICAgIGlmKCF2LmltZyAmJiAhdi5waWNfdXJsKSB2LmNvbF90eXBlID0gJ3RleHRfMSdcXG4gICAgICAgICAgICBkZWxldGUgdi5jb250ZW50XFxuXFxuICAgICAgICAgICAgaWYgKCF2LnVybCB8fCBbJ3J1bGUnLCAncGljcycsICd0b2FzdCcsICdpbnB1dCcsICdjb3B5JywgJ2VkaXRGaWxlJywgJ3g1JywgJ3g1V2ViVmlldycsICd4NVBsYXknLCAnd2ViJywgJ3NlbGVjdCcsICd4NVJ1bGUnLCAnd2ViUnVsZSddLmZpbmQoKHZ2KSA9PiB2LnVybC5zdGFydHNXaXRoKHZ2ICsgJzovLycpKSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdlxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodi51cmwuaW5jbHVkZXMoJ0BydWxlPScpKSB7XFxuICAgICAgICAgICAgICAgIGxldCBbXywgdXJsLCBydWxlXSA9IHYudXJsLm1hdGNoKC9eKFtcXFxcc1xcXFxTXSo/KUBydWxlPShbXFxcXHNcXFxcU10qKSQvKVxcbiAgICAgICAgICAgICAgICB2LnVybCA9IHVybFxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5kZXRhaWxfZmluZF9ydWxlID0gcnVsZVxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5kZXRhaWxfY29sX3R5cGUgPSBNWV9SVUxFLmNvbF90eXBlXFxuICAgICAgICAgICAgfSBlbHNlIGlmICh2LnVybC5zdGFydHNXaXRoKCdoaWtlcjovL3BhZ2UvJykpIHtcXG4gICAgICAgICAgICAgICAgaWYgKHYudXJsLmluY2x1ZGVzKCdydWxlPScpIHx8ICh2LmV4dHJhIHx8IHt9KS5ydWxlKVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZcXG4gICAgICAgICAgICAgICAgbGV0IFtfLCBwYXRoLCBwYXJhbXNdID0gdi51cmwuc3BsaXQoJyMnKVswXS5tYXRjaCgvXmhpa2VyOlxcXFwvXFxcXC9wYWdlXFxcXC8oLis/KSg/OlxcXFw/KC4qKSk/JC8pLFxcbiAgICAgICAgICAgICAgICAgICAgc3ViUGFnZSA9IE1ZX1JVTEUucGFnZUxpc3QuZmluZCgodikgPT4gdi5wYXRoID09IHBhdGgpLFxcbiAgICAgICAgICAgICAgICAgICAgc3ViVXJsID0gKHBhcmFtcyB8fCAnJykuc3BsaXQoJyYnKS5maW5kKCh2KSA9PiB2LnN0YXJ0c1dpdGgoJ3VybD0nKSlcXG4gICAgICAgICAgICAgICAgdi51cmwgPSBzdWJVcmwgPyBzdWJVcmwuc2xpY2UoNCkucmVwbGFjZSgv77yf77yfL2csICc/JykucmVwbGFjZSgv77yG77yGL2csICcmJykgOiAodi5leHRyYSB8fCB7fSkudXJsIHx8ICdoaWtlcjovL2VtcHR5PycgKyAocGFyYW1zIHx8ICcnKVxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5kZXRhaWxfZmluZF9ydWxlID0gc3ViUGFnZS5ydWxlXFxuICAgICAgICAgICAgICAgIE1ZX19SVUxFLmRldGFpbF9jb2xfdHlwZSA9IHN1YlBhZ2UuY29sX3R5cGVcXG4gICAgICAgICAgICAgICAgTVlfX1JVTEUucGFyYW1zID0gdi5leHRyYSB8fCB7fVxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodi51cmwuaW5jbHVkZXMoJ0BsYXp5UnVsZT0nKSkge1xcbiAgICAgICAgICAgICAgICB2LnVybCA9IHYudXJsLnJlcGxhY2UoJy5qczonLCAnLmpzOlxcXFxuaWYoTVlfUlVMRSlPYmplY3QuYXNzaWduKE1ZX1JVTEUsJyArICQuc3RyaW5naWZ5KHsgcGFnZXM6IE1ZX1JVTEUucGFnZXMsIHBhZ2VMaXN0OiBNWV9SVUxFLnBhZ2VMaXN0LCBmaW5kX3J1bGU6ICcnLCBwYXJhbXM6ICcnIH0pICsgJyk7TVlfVVJMPVxcXCInICsgTVlfVVJMICsgJ1xcXCI7JylcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFNWV9SVUxFLmRldGFpbF9maW5kX3J1bGUgfHwgdi51cmwuc3RhcnRzV2l0aCgnaGlrZXI6Ly8nKSkgeyByZXR1cm4gdiB9XFxuICAgICAgICAgICAgdi5leHRyYSA9IHsgdXJsOiB2LnVybCwgUlVMRTogTVlfX1JVTEUsIHBhZ2VUaXRsZTogc3ViVGl0bGUgfVxcbiAgICAgICAgICAgIHYudXJsID0gJ2hpa2VyOi8vcGFnZS9kZXRhaWxMb2FkP3J1bGU9JyArIGdldEl0ZW0oJ215Q29sbGVjdGlvbicpXFxuICAgICAgICAgICAgaWYgKHYuZXh0cmEuUlVMRS51cmwuaW5jbHVkZXMoJyNpbW1lcnNpdmVUaGVtZSMnKSkgdi51cmwgKz0gJyYjaW1tZXJzaXZlVGhlbWUjJ1xcbiAgICAgICAgICAgIHJldHVybiB2XFxuICAgICAgICB9KSlcXG4gICAgICAgIG1ldGhvZF9zZXRSZXN1bHQuaW52b2tlKGphdmFDb250ZXh0LCBteUNvbGxlY3Rpb25fZWwsIHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMpXFxuICAgIH1cXG4gICAgc2V0SG9tZVJlc3VsdCA9IHNldFJlc3VsdFxcbiAgICBzZXRTZWFyY2hSZXN1bHQgPSBzZXRSZXN1bHRcXG5cXG4gICAgZXZhbChNWV9SVUxFLmZpbmRfcnVsZS5zbGljZSgzKSlcXG59IGVsc2Uge1xcbiAgICBsZXQgZmluZFJ1bGUgPSBNWV9SVUxFLmZpbmRfcnVsZS5zcGxpdCgnOycpXFxuICAgIHBhcnNlRG9tRm9yQXJyYXkoaW5kZXhIdG1sLCBmaW5kUnVsZS5zaGlmdCgpKS5mb3JFYWNoKChkYXRhKSA9PiB7XFxuICAgICAgICBsZXQgW3RpdGxlLCB1cmwsIGRlc2MsIGNvbnRlbnQsIGltZ10gPSBmaW5kUnVsZS5tYXAoKHYsIGkpID0+IHtcXG4gICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgIGlmICh2ID09ICcqJykgcmV0dXJuICcnXFxuICAgICAgICAgICAgICAgICAgICBlbHNlIHYgPSAoaSA9PSAxIHx8IGkgPT0gNCkgP1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRG9tKGRhdGEsIHYpIDpcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZURvbUZvckh0bWwoZGF0YSwgdilcXG4gICAgICAgICAgICAgICAgICAgIGlmIChpICE9IDEpIHYgPSBydW5Db2RlKHYpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdlxcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7IHJldHVybiAnJyB9XFxuICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgcmVzID0ge1xcbiAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUgKyAn4oCc4oCc4oCd4oCdPGJyPicgKyAoUlVMRS50aXRsZS5mb250Y29sb3IoJyMxMmI2NjgnKSArICcg4paqICcgKyBkZXNjLmZvbnRjb2xvcignIzY2NjY2NicpKS5zbWFsbCgpLFxcbiAgICAgICAgICAgICAgICB1cmw6IHVybCxcXG4gICAgICAgICAgICAgICAgZGVzYzogY29udGVudCxcXG4gICAgICAgICAgICAgICAgaW1nOiBpbWdcXG4gICAgICAgICAgICB9XFxuICAgICAgICBpZighcmVzLmltZykgcmVzLmNvbF90eXBlID0gJ3RleHRfMSdcXG4gICAgICAgIGlmIChyZXMudXJsKSB7XFxuICAgICAgICAgICAgaWYgKHJlcy51cmwuaW5jbHVkZXMoJ0BsYXp5UnVsZT0nKSkge1xcbiAgICAgICAgICAgICAgICByZXMudXJsID0gcmVzLnVybC5yZXBsYWNlKCcuanM6JywgJy5qczpcXFxcbmlmKE1ZX1JVTEUpT2JqZWN0LmFzc2lnbihNWV9SVUxFLCcgKyAkLnN0cmluZ2lmeSh7IHBhZ2VzOiBNWV9SVUxFLnBhZ2VzLCBwYWdlTGlzdDogTVlfUlVMRS5wYWdlTGlzdCwgZmluZF9ydWxlOiAnJywgcGFyYW1zOiAnJyB9KSArICcpO01ZX1VSTD1cXFwiJyArIE1ZX1VSTCArICdcXFwiOycpXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChNWV9SVUxFLmRldGFpbF9maW5kX3J1bGUpIHtcXG4gICAgICAgICAgICAgICAgcmVzLmV4dHJhID0geyB1cmw6IHVybCwgUlVMRTogTVlfUlVMRSwgcGFnZVRpdGxlOiB0aXRsZSB9XFxuICAgICAgICAgICAgICAgIHJlcy51cmwgPSAnaGlrZXI6Ly9wYWdlL2RldGFpbExvYWQ/cnVsZT0nICsgZ2V0SXRlbSgnbXlDb2xsZWN0aW9uJylcXG4gICAgICAgICAgICAgICAgaWYgKHJlcy5leHRyYS5SVUxFLnVybC5pbmNsdWRlcygnI2ltbWVyc2l2ZVRoZW1lIycpKSByZXMudXJsICs9ICcmI2ltbWVyc2l2ZVRoZW1lIydcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICBteUNvbGxlY3Rpb25fZWwucHVzaChyZXMpXFxuICAgIH0pXFxuICAgIHNldFJlc3VsdChteUNvbGxlY3Rpb25fZWwpXFxufVxcblwifSx7XCJjb2xfdHlwZVwiOlwiaWNvbl8yX3JvdW5kXCIsXCJuYW1lXCI6XCLorr7nva5cIixcInBhdGhcIjpcIkNvbmZpZ1wiLFwicnVsZVwiOlwianM6XFxuYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAnY2xlYXJWYXIoXFxcIm15Q29sbGVjdGlvbi1zb3J0RmxhZ1xcXCIpO3JlZnJlc2hQYWdlKCknKVxcbnNldFBhZ2VUaXRsZSgn4pqZIOi9u+WQiOmbhuiuvue9riDimpknKVxcbmNvbnN0IHsgZGF0YUxvYWQgfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL3V0aWxpdHk/cnVsZT0nICsgZ2V0SXRlbSgnbXlDb2xsZWN0aW9uJykpXFxubGV0IGRhdGEgPSBkYXRhTG9hZCh0cnVlKSxcXG4gICAgZWwgPSBbe1xcbiAgICAgICAgdGl0bGU6ICfmuIXpmaTnvJPlrZgs56uL5Y2z5pu05pawIDxzbWFsbD4g77yI5Z+65LqO6L+c56iL5LuT5bqTLOS4jeimgemikee5geeCueWHu++8iScsXFxuICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgZGVsZXRlRmlsZSgndXBkYXRlVGltZScpXFxuICAgICAgICAgICAgYmFjayhmYWxzZSlcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5pu05pawJ1xcbiAgICAgICAgfSksXFxuICAgICAgICBpbWc6ICdoaWtlcjovL2ltYWdlcy9pY29uMScsXFxuICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcidcXG4gICAgfV0sXFxuICAgIHNlYXJjaFRoZCA9IHJlYWRGaWxlKCdzZWFyY2hUaGQnKSB8fCAnNScsXFxuICAgIHVwZGF0ZUludGVydmFsID0gcmVhZEZpbGUoJ3VwZGF0ZUludGVydmFsJykgfHwgJzEnLFxcbiAgICBuZXdXaW5kb3cgPSByZWFkRmlsZSgnbmV3V2luZG93JyksXFxuICAgIGVkaXRNb2RlID0gZ2V0VmFyKCdteUNvbGxlY3Rpb24tZWRpdE1vZGUnLCAn5ZCv55SoL+emgeeUqCcpXFxuXFxuZWwucHVzaCh7XFxuICAgIHRpdGxlOiAnICDwn5SNIOaQnOe0ouaooeW8jzogJyArIChzZWFyY2hUaGQgPT0gMCA/ICfliJcnIDogJ+iBmicgKyBzZWFyY2hUaGQpICsgJyAgJyxcXG4gICAgdXJsOiAkKFsn5YiX6KGo5pCc57SiJywgJ+iBmuWQiOaQnOe0oiddLCAxKS5zZWxlY3QoKHNlYXJjaFRoZCkgPT4ge1xcbiAgICAgICAgaWYgKGlucHV0ID09ICfliJfooajmkJzntKInKSB7XFxuICAgICAgICAgICAgc2F2ZUZpbGUoJ3NlYXJjaFRoZCcsICcwJylcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGlmIChzZWFyY2hUaGQgPT0gMCkgc2VhcmNoVGhkID0gNVxcbiAgICAgICAgICAgIHJldHVybiAkKHNlYXJjaFRoZCwgJ+i+k+WFpeaQnOe0oue6v+eoi++8jOacgOWlveS4jeimgei2hei/hzE2JykuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICBzYXZlRmlsZSgnc2VhcmNoVGhkJywgaW5wdXQpXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfVxcbiAgICB9LCBzZWFyY2hUaGQpLFxcbiAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxufSwge1xcbiAgICB0aXRsZTogJyAg8J+SoSDmm7TmlrDpopHnjoc6ICcgKyAodXBkYXRlSW50ZXJ2YWwgPCAxID8gJ+aJi+WKqCcgOiB1cGRhdGVJbnRlcnZhbCArICflpKknKSArICcgICcsXFxuICAgIHVybDogJCh1cGRhdGVJbnRlcnZhbCwgJ+i+k+WFpeabtOaWsOmXtOmalO+8iOWkqe+8ie+8jOS4ujDliJnmiYvliqjmm7TmlrAnKS5pbnB1dCgoKSA9PiB7XFxuICAgICAgICBzYXZlRmlsZSgndXBkYXRlSW50ZXJ2YWwnLCBpbnB1dClcXG4gICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgfSksXFxuICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG59LCB7XFxuICAgIHRpdGxlOiAnICDwn5alIOeLrOeri+mmlumhtTogJyArIChuZXdXaW5kb3cgPyAn5pivJyA6ICflkKYnKSArICcgICcsXFxuICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgobmV3V2luZG93KSA9PiB7XFxuICAgICAgICBzYXZlRmlsZSgnbmV3V2luZG93JywgbmV3V2luZG93ID8gJycgOiAnMScpXFxuICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgIH0sIG5ld1dpbmRvdyksXFxuICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG59LCB7XFxuICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9XFxcIiM2NjY2NjZcXFwiPjxzbWFsbD7nibnliKvpuKPosKLvvIzlsI/nqIvluo/mj5DkvpvogIXvvJpcXFxcbicgK1xcbiAgICAgICAgZGF0YS5yZWR1Y2UoKHNlbGYsIHYpID0+IHYuYXV0aG9yID8gc2VsZi5jb25jYXQodi5hdXRob3Iuc3BsaXQoJyYnKSkgOiBzZWxmLCBbXSlcXG4gICAgICAgIC5maWx0ZXIoKHYsIGksIGFycikgPT4gdiAmJiBhcnIuaW5kZXhPZih2KSA9PSBpKS5qb2luKCfjgIEnKSxcXG4gICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXG59KVxcblxcbmVsLnB1c2goeyBjb2xfdHlwZTogJ2xpbmUnIH0sIHsgY29sX3R5cGU6ICdiaWdfYmxhbmtfYmxvY2snIH0pO1xcblsn5ZCv55SoL+emgeeUqCcsICfph43mlrDmjpLluo8nLCAn5pu05pS55Zu+5qCHJywgJ+WvvOWFpea1t+mYlCddLmZvckVhY2goKHYpID0+IHtcXG4gICAgZWwucHVzaCh7XFxuICAgICAgICB0aXRsZTogdiA9PSBlZGl0TW9kZSA/ICfigJzigJzigJ3igJ0nICsgdi5ib2xkKCkuZm9udGNvbG9yKCcjMTJiNjY4JykgOiB2LFxcbiAgICAgICAgdXJsOiB2ID09IGVkaXRNb2RlID8gJ2hpa2VyOi8vZW1wdHknIDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgodikgPT4ge1xcbiAgICAgICAgICAgIHB1dFZhcignbXlDb2xsZWN0aW9uLWVkaXRNb2RlJywgdilcXG4gICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcXG4gICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICB9LCB2KSxcXG4gICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG4gICAgfSlcXG59KVxcbmVsLnB1c2goe1xcbiAgICB0aXRsZTogJ+aBouWkjeWHuuWOguaVsOaNricsXFxuICAgIHVybDogJCgn56Gu5a6a6KaB5oGi5aSN5Ye65Y6C77yM5riF5qWa6Ieq5a6a5LmJ5pWw5o2u5ZCX77yfJykuY29uZmlybSgoKSA9PiB7XFxuICAgICAgICBkZWxldGVGaWxlKCdjdXN0b21EYXRhJylcXG4gICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcbiAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suaBouWkjeWHuuWOguaVsOaNridcXG4gICAgfSksXFxuICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG59KVxcblxcbkpTT04ucGFyc2UocmVhZEZpbGUoJ2N1c3RvbURhdGEnKSB8fCAnW10nKS5mb3JFYWNoKCh2LCBpKSA9PiB7XFxuICAgIGxldCBkID0geyB0aXRsZTogdi50aXRsZSwgaW1nOiBkYXRhW2ldLmljb24gfVxcbiAgICBzd2l0Y2ggKGVkaXRNb2RlKSB7XFxuICAgICAgICBjYXNlICflkK/nlKgv56aB55SoJzpcXG4gICAgICAgICAgICBkLnRpdGxlID0gKHYudmlzaWJsZSA/ICfwn5+iICAnIDogJ/CflLQgICcpICsgZC50aXRsZVxcbiAgICAgICAgICAgIGQudXJsID0gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgocnVsZSkgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgcnVsZXMgPSBKU09OLnBhcnNlKHJlYWRGaWxlKCdjdXN0b21EYXRhJykgfHwgJ1tdJyksXFxuICAgICAgICAgICAgICAgICAgICBpbmRleCA9IHJ1bGVzLmZpbmRJbmRleCgodikgPT4gdi50aXRsZSA9PSBydWxlLnRpdGxlKVxcbiAgICAgICAgICAgICAgICBydWxlc1tpbmRleF0udmlzaWJsZSA9ICFydWxlc1tpbmRleF0udmlzaWJsZVxcbiAgICAgICAgICAgICAgICBzYXZlRmlsZSgnY3VzdG9tRGF0YScsIEpTT04uc3RyaW5naWZ5KHJ1bGVzKSlcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICB9LCB2KVxcbiAgICAgICAgICAgIGJyZWFrXFxuICAgICAgICBjYXNlICfph43mlrDmjpLluo8nOlxcbiAgICAgICAgICAgIGxldCBzb3J0RmxhZyA9IHBhcnNlSW50KGdldFZhcignbXlDb2xsZWN0aW9uLXNvcnRGbGFnJywgJy0xJykpXFxuICAgICAgICAgICAgZC50aXRsZSA9IChzb3J0RmxhZyA9PSBpID8gJ/CflIMgICcgOiAnJykgKyBkLnRpdGxlXFxuICAgICAgICAgICAgaWYgKHNvcnRGbGFnID09IC0xKVxcbiAgICAgICAgICAgICAgICBkLnVybCA9ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGkpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHB1dFZhcignbXlDb2xsZWN0aW9uLXNvcnRGbGFnJywgaS50b1N0cmluZygpKVxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6YCJ5oup6KaB56e75Yqo5Yiw55qE5L2N572uJ1xcbiAgICAgICAgICAgICAgICB9LCBpKVxcbiAgICAgICAgICAgIGVsc2VcXG4gICAgICAgICAgICAgICAgZC51cmwgPSAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChvbGRJbmRleCwgbmV3SW5kZXgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBydWxlcyA9IEpTT04ucGFyc2UocmVhZEZpbGUoJ2N1c3RvbURhdGEnKSB8fCAnW10nKVxcbiAgICAgICAgICAgICAgICAgICAgcnVsZXMuc3BsaWNlKG5ld0luZGV4LCAwLCBydWxlcy5zcGxpY2Uob2xkSW5kZXgsIDEpWzBdKVxcbiAgICAgICAgICAgICAgICAgICAgc2F2ZUZpbGUoJ2N1c3RvbURhdGEnLCBKU09OLnN0cmluZ2lmeShydWxlcykpXFxuICAgICAgICAgICAgICAgICAgICBwdXRWYXIoJ215Q29sbGVjdGlvbi1zb3J0RmxhZycsICctMScpXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICAgICAgfSwgc29ydEZsYWcsIGkpXFxuICAgICAgICAgICAgYnJlYWtcXG4gICAgICAgIGNhc2UgJ+abtOaUueWbvuaghyc6XFxuICAgICAgICAgICAgZC51cmwgPSAkKHYuaWNvbiB8fCAnJywgJ+i+k+WFpeaWsOWbvuagh+WcsOWdgOaIluminOiJsuS7o+egge+8micpLmlucHV0KChydWxlKSA9PiB7XFxuICAgICAgICAgICAgICAgIGxldCBydWxlcyA9IEpTT04ucGFyc2UocmVhZEZpbGUoJ2N1c3RvbURhdGEnKSB8fCAnW10nKSxcXG4gICAgICAgICAgICAgICAgICAgIGluZGV4ID0gcnVsZXMuZmluZEluZGV4KCh2KSA9PiB2LnRpdGxlID09IHJ1bGUudGl0bGUpXFxuICAgICAgICAgICAgICAgIGlmIChpbnB1dClcXG4gICAgICAgICAgICAgICAgICAgIHJ1bGVzW2luZGV4XS5pY29uID0gaW5wdXRcXG4gICAgICAgICAgICAgICAgZWxzZVxcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJ1bGVzW2luZGV4XS5pY29uXFxuICAgICAgICAgICAgICAgIHNhdmVGaWxlKCdjdXN0b21EYXRhJywgSlNPTi5zdHJpbmdpZnkocnVsZXMpKVxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgIH0sIHYpXFxuICAgICAgICAgICAgYnJlYWtcXG4gICAgICAgIGNhc2UgJ+WvvOWFpea1t+mYlCc6XFxuICAgICAgICAgICAgZC51cmwgPSAncnVsZTovLycgKyBiYXNlNjRFbmNvZGUoSlNPTi5zdHJpbmdpZnkoZGF0YVtpXSkpXFxuICAgICAgICAgICAgYnJlYWtcXG4gICAgfVxcbiAgICBlbC5wdXNoKGQpXFxufSlcXG5zZXRSZXN1bHQoZWwpXFxuXCJ9XSxcInBhcmFtc1wiOlwie1xcXCJSVUxFXFxcIjp7XFxcImFyZWFfbmFtZVxcXCI6XFxcIlxcXCIsXFxcImFyZWFfdXJsXFxcIjpcXFwiXFxcIixcXFwiYXV0aG9yXFxcIjpcXFwi5pat5b+1XFxcIixcXFwiY2xhc3NfbmFtZVxcXCI6XFxcIlxcXCIsXFxcImNsYXNzX3VybFxcXCI6XFxcIlxcXCIsXFxcImNvbF90eXBlXFxcIjpcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxcImRldGFpbF9jb2xfdHlwZVxcXCI6XFxcIm1vdmllXzFcXFwiLFxcXCJkZXRhaWxfZmluZF9ydWxlXFxcIjpcXFwiXFxcIixcXFwiZmluZF9ydWxlXFxcIjpcXFwianM6XFxcXG50aGlzLmQgPSBbXTtcXFxcblxcXFxuY29uc3QganhJdGVtID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2p4SXRlbVxcXFxcXFwiKSxcXFxcbiAgICBSb3V0ZSA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9Sb3V0ZVxcXFxcXFwiKTtcXFxcblxcXFxuYWRkTGlzdGVuZXIoJ29uUmVmcmVzaCcsICQudG9TdHJpbmcoKCkgPT4ge1xcXFxuICAgIHN3aXRjaCAoZ2V0VmFyKCdrcWp4Y3MnLCAnMCcpKSB7XFxcXG4gICAgICAgIGNhc2UgJzAnOlxcXFxuICAgICAgICAgICAgcHV0VmFyKCdrcWp4Y3MnLCAxKTtcXFxcbiAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICBjYXNlICcxJzpcXFxcbiAgICAgICAgICAgIHB1dFZhcigna3FqeGNzJywgMik7XFxcXG4gICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgZGVmYXVsdDpcXFxcbiAgICAgICAgICAgIHB1dFZhcigna3FqeGNzJywgMCk7XFxcXG4gICAgICAgICAgICBicmVhaztcXFxcbiAgICB9XFxcXG59KSk7XFxcXG5cXFxcbmlmIChnZXRWYXIoJ2txanhjcycpID09IDIpIHtcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogJ+KAmOKAmOKAmeKAmTxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6I0ZBQ0MyRVxcXFxcXFwiPuino+aekOa1i+ivlScsXFxcXG4gICAgICAgIHVybDogJCgpLmxhenlSdWxlKCgpID0+IHtcXFxcbiAgICAgICAgICAgIHZhciB2aXBVcmwgPSBnZXRWYXIoJ3BsdWdpbkxpbmsnKTtcXFxcbiAgICAgICAgICAgIGlmICh2aXBVcmwuc3Vic3RyKDAsIDQpID09ICdodHRwJykge1xcXFxuICAgICAgICAgICAgICAgIGV2YWwoJ3ZhciBDb25maWcgPScgKyBmZXRjaChnZXRWYXIoJ29sZENvbmZpZycpKSk7XFxcXG4gICAgICAgICAgICAgICAgZXZhbChmZXRjaChDb25maWcuY2opKTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gYXl0bVBhcnNlKHZpcFVybCk7XFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/ovpPlhaXmoYbmnKrloatVcmzmiJbogIXml6DmlYhVcmwnO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KSxcXFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJyxcXFxcbiAgICB9KTtcXFxcbn1cXFxcblxcXFxudmFyIGp4TmV3ViA9IGdldFZhcignanhOZXdWJywgJycpLFxcXFxuICAgIGp4T2xkViA9IGdldFZhcignanhPbGRWJyk7XFxcXG52YXIgdmVyc2lvblRpcHMgPSBqeE5ld1YgPT0gJycgPyAnVmVyc2lvbiAnICsganhPbGRWIDogJ+KAmOKAmCcgKyBqeE5ld1YgKyAnXFxcXFxcXFxu5YWI5pu05paw5bCP56iL5bqP54S25ZCO54K55Ye75pu05paw6ISa5pys5L6d6LWW4oCZ4oCZJztcXFxcbmQucHVzaCh7XFxcXG4gICAgdGl0bGU6ICfigJjigJjigJnigJk8YmlnPjxiaWc+PHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjojMEMwMDAwXFxcXFxcXCI+TXlQYXJzZVMnLFxcXFxuICAgIGRlc2M6IHZlcnNpb25UaXBzLFxcXFxuICAgIHVybDogIWdldFZhcigna3FqeGNzJykgPyAndG9hc3Q6Ly/ov5nmmK/moIfpopgnIDogUm91dGUuc3pQYXJzZSxcXFxcbiAgICBleHRyYToge1xcXFxuICAgICAgICBuZXdXaW5kb3c6IHRydWUsXFxcXG4gICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcXFxuICAgIH0sXFxcXG4gICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcXFxufSk7XFxcXG5cXFxcbmZ1bmN0aW9uIGN6R3VpZGUoKSB7XFxcXG4gICAgcmV0dXJuIFxcXFxcXFwiaHR0cHM6Ly9kb2NzLnFxLmNvbS9kb2MvRFZYTkdWR2RMUkVGUFkzWnpcXFxcXFxcIlxcXFxufVxcXFxuXFxcXG5qeEl0ZW0ubHFGaWxlKCk7XFxcXG5cXFxcblJvdXRlLmFkZExhbkppZShkKTtcXFwiLFxcXCJncm91cFxcXCI6XFxcIuKRoOaOqOiNkFxcXCIsXFxcImljb25cXFwiOlxcXCJodHRwczovL3N0YXRpYzAxLmltZ2tyLmNvbS90ZW1wLzIzODEzN2VmYjYxNjQ1ODc5Njg3YTg1MDNmMzRkODkzLnBuZ1xcXCIsXFxcImxhc3RfY2hhcHRlcl9ydWxlXFxcIjpcXFwiXFxcIixcXFwicGFnZUxpc3RcXFwiOlt7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCJQYXJzZV9Ebi5odG1sXFxcIixcXFwicGF0aFxcXCI6XFxcIlBhcnNlX0RuLmh0bWxcXFwiLFxcXCJydWxlXFxcIjpcXFwiPCFET0NUWVBFIGh0bWw+XFxcXG48aHRtbD5cXFxcbjxoZWFkPlxcXFxuICAgIDxtZXRhIGNoYXJzZXQ9XFxcXFxcXCJ1dGYtOFxcXFxcXFwiPlxcXFxuICAgIDxtZXRhIG5hbWU9XFxcXFxcXCJ2aWV3cG9ydFxcXFxcXFwiIGNvbnRlbnQ9XFxcXFxcXCJ3aWR0aD1kZXZpY2Utd2lkdGgsaW5pdGlhbC1zY2FsZT0xLG1pbmltdW0tc2NhbGU9MSxtYXhpbXVtLXNjYWxlPTEsdXNlci1zY2FsYWJsZT1ub1xcXFxcXFwiIC8+XFxcXG4gICAgPHNjcmlwdCBzcmM9XFxcXFxcXCJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL3Z1ZUAyLjUuMTYvZGlzdC92dWUubWluLmpzXFxcXFxcXCI+PC9zY3JpcHQ+XFxcXG4gICAgPHNjcmlwdCBzcmM9XFxcXFxcXCJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMi4xLjQubWluLmpzXFxcXFxcXCI+PC9zY3JpcHQ+XFxcXG4gICAgPCEtLVxcXFxuICAgIDxzY3JpcHQgc3JjPVxcXFxcXFwiaHR0cDovL2FwcHMuYmRpbWcuY29tL2xpYnMvanF1ZXJ5LzIuMS40L2pxdWVyeS5taW4uanNcXFxcXFxcIj48L3NjcmlwdD5cXFxcbiAgICA8c2NyaXB0IHNyYz1cXFxcXFxcImh0dHA6Ly9hcHBzLmJkaW1nLmNvbS9saWJzL3Z1ZS8xLjAuMTQvdnVlLmpzXFxcXFxcXCI+PC9zY3JpcHQ+XFxcXG4gICAgLS0+XFxcXG4gICAgPHRpdGxlPlBhcnNlX0RuPC90aXRsZT5cXFxcbiAgICA8c3R5bGUgdHlwZT10ZXh0L2Nzcz5cXFxcbiAgICAgICAgaHRtbCwgYm9keSB7XFxcXG4gICAgICAgICAgICBoZWlnaHQ6IGF1dG87XFxcXG4gICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGJvZHkge1xcXFxuICAgICAgICAgICAgbWFyZ2luOiAwIDVweCAwIDVweDtcXFxcbiAgICAgICAgICAgIHBhZGRpbmc6IDAgMHB4IDAgMHB4O1xcXFxuICAgICAgICAgICAgLy9iYWNrZ3JvdW5kOiAjRjlGMERBO1xcXFxuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDA7XFxcXG4gICAgICAgICAgICBmb250LWZhbWlseTogXFxcXFxcXCJNaWNyb3NvZnQgWWFIZWlcXFxcXFxcIixcXFxcXFxcIuWui+S9k1xcXFxcXFwiLFxcXFxcXFwiU2Vnb2UgVUlcXFxcXFxcIiwgXFxcXFxcXCJMdWNpZGEgR3JhbmRlXFxcXFxcXCIsIEhlbHZldGljYSwgQXJpYWwsc2Fucy1zZXJpZiwgRnJlZVNhbnMsIEFyaW1vO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgICNkaXYye1xcXFxuICAgICAgICAgICBtYXJnaW4tdG9wOjM1cHg7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgLyrovpPlhaXmoYbniLblhYPntKAqL1xcXFxuICAgICAgICBkaXYuYm94IHtcXFxcbiAgICAgICAgICAgIGhlaWdodDogNTNweDtcXFxcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4O1xcXFxuICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIC8q6L6T5YWl5qGG5bC65a+4Ki9cXFxcbiAgICAgICAgZm9ybSB7XFxcXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXFxcbiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXFxcbiAgICAgICAgICAgIHdpZHRoOiA5MiU7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgaW5wdXQsIGxhYmVsLCAubGllYiBidXR0b24ge1xcXFxuICAgICAgICAgICAgYm9yZGVyOiBub25lO1xcXFxuICAgICAgICAgICAgb3V0bGluZTogbm9uZTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICAvKuWtl+S9k+S9jee9riovXFxcXG4gICAgICAgIGlucHV0IHtcXFxcbiAgICAgICAgICAgIHdpZHRoOiA3NyU7XFxcXG4gICAgICAgICAgICBoZWlnaHQ6IDMycHg7XFxcXG4gICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDY2cHg7XFxcXG4gICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAzMHB4O1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGxhYmVsIHtcXFxcbiAgICAgICAgICAgIHRleHQtYWxpZ246Y2VudGVyO1xcXFxuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDQzcHg7XFxcXG4gICAgICAgICAgICBoZWlnaHQ6IDQwcHg7XFxcXG4gICAgICAgICAgICB3aWR0aDogNjBweDtcXFxcbiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcXFxcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICAvKuWwj+ahhiovXFxcXG4gICAgICAgIC5iYXIgbGFiZWwge1xcXFxuICAgICAgICAgICAgYmFja2dyb3VuZDogI0QwNkI2QztcXFxcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDU1NSA1NTVweCA1NTVweCA1NTU7XFxcXG4gICAgICAgICAgICB3aWR0aDogNjBweDtcXFxcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDtcXFxcbiAgICAgICAgICAgIGNvbG9yOiAjRjlGMERBO1xcXFxuICAgICAgICAgICAgdG9wOiAwO1xcXFxuICAgICAgICAgICAgbGVmdDogM3B4O1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIC8q6L6T5YWl5qGG5qC35byPKi9cXFxcbiAgICAgICAgLmJhciBpbnB1dCB7XFxcXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjRjlGMERBO1xcXFxuICAgICAgICAgICAgYm9yZGVyOiAzcHggc29saWQgI0QwNkI2QztcXFxcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICAvKuWIl+ihqCovXFxcXG4gICAgICAgIC5saWViIGJ1dHRvbiB7XFxcXG4gICAgICAgICAgICB0ZXh0LWFsaWduOmNlbnRlcjtcXFxcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OjQwcHg7XFxcXG4gICAgICAgICAgICBoZWlnaHQ6IDQwcHg7XFxcXG4gICAgICAgICAgICB3aWR0aDogMjdweDtcXFxcbiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcXFxcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICAvKuWIl+ihqCovXFxcXG4gICAgICAgIC5saWViIGJ1dHRvbntcXFxcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcXFxcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNEMDZCNkM7XFxcXG4gICAgICAgICAgICBmb250LXNpemU6IDEzcHg7XFxcXG4gICAgICAgICAgICBjb2xvcjogI0Y5RjBEQTtcXFxcbiAgICAgICAgICAgIHRvcDogMDtcXFxcbiAgICAgICAgICAgIHJpZ2h0OiAwcHg7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgLyrlpLTlg48qL1xcXFxuICAgICAgICAucm91bmRfaWNvbntcXFxcbiAgICAgICAgICAgIHdpZHRoOiA0MHB4O1xcXFxuICAgICAgICAgICAgaGVpZ2h0OiA0MHB4O1xcXFxuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcXFxcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcXFxcbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxcXG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXFxcbiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XFxcXG4gICAgICAgIH1cXFxcblxcXFxuICAgICAgICAuangtdWwsIC5jai11bCB7XFxcXG4gICAgICAgICAgICB6LWluZGV4OiA5OTk7XFxcXG4gICAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XFxcXG4gICAgICAgICAgICB3aWR0aDogNzclO1xcXFxuICAgICAgICAgICAvLyBsZWZ0OiAxMCU7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgLmp4LXVsLCAuY2otdWwge1xcXFxuICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICAuangtdWwge1xcXFxuICAgICAgICAgICAgdG9wOiAyJTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICAuY2otdWwge1xcXFxuICAgICAgICAgICAgdG9wOiAzMCU7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgbGkge1xcXFxuICAgICAgICAgICAgaGVpZ2h0OiAzNXB4O1xcXFxuICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzAxYmZkYTtcXFxcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDtcXFxcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC44KTtcXFxcbiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTtcXFxcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAzNXB4O1xcXFxuICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xcXFxuICAgICAgICAgICAgZm9udC1zaXplOiAxNnB4O1xcXFxuICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXFxcbiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XFxcXG4gICAgICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBsaSB7XFxcXG4gICAgICAgICAgICBsaXN0LXN0eWxlOiBub25lO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGxpOmhvdmVyIHtcXFxcbiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcXFxcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMTM5LCAxMzEsIDEyMCwgMC45KTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBsaVtjaGVjaz1cXFxcXFxcInRydWVcXFxcXFxcIl0ge1xcXFxuICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgxMzksIDAsIDAsIDAuOSk7XFxcXG4gICAgICAgIH1cXFxcblxcXFxuICAgIDwvc3R5bGU+XFxcXG48L2hlYWQ+XFxcXG5cXFxcbjxib2R5PlxcXFxuICAgIDxkaXYgY2xhc3M9XFxcXFxcXCJmdW5nXFxcXFxcXCI+XFxcXG4gICAgICAgIDxhIHN0eWxlPVxcXFxcXFwiZmxvYXQ6bGVmdDtcXFxcXFxcIj5cXFxcbiAgICAgICAgICAgIDxidXR0b24gIHN0eWxlPVxcXFxcXFwiYm9yZGVyOiBub25lO2JvcmRlci1yYWRpdXM6MTBweDtiYWNrZ3JvdW5kOiAjYzU0NjRhO3dpZHRoOiA4MHB4OyBmb250LXNpemU6IDE4cHg7Y29sb3I6ICNGOUYwREE7XFxcXFxcXCIgb25jbGljaz1cXFxcXFxcImNhbmNlbCgpO1xcXFxcXFwiPuWFsyDpl608L2J1dHRvbj5cXFxcbiAgICAgICAgPC9hPlxcXFxuICAgICAgICA8YSBzdHlsZT1cXFxcXFxcImZsb2F0OnJpZ2h0XFxcXFxcXCI+XFxcXG4gICAgICAgICAgICA8YnV0dG9uIHN0eWxlPVxcXFxcXFwiYm9yZGVyOiBub25lO2JvcmRlci1yYWRpdXM6MTBweDtiYWNrZ3JvdW5kOiAjMDY4MDA2O3dpZHRoOiA4MHB4OyBmb250LXNpemU6IDE4cHg7Y29sb3I6ICNGOUYwREE7XFxcXFxcXCJvbmNsaWNrPVxcXFxcXFwiY2xpY2ttZSgn6YWNIOe9riDlt7Ig5L+dIOWtmCDvvIEnLCAxMDAwLCAn5byAJyk7XFxcXFxcXCI+5L+dIOWtmDwvYnV0dG9uPiBcXFxcbiAgICAgICAgPC9hPlxcXFxuICAgIDwvZGl2PlxcXFxuICAgIDxicj5cXFxcbiAgICA8ZGl2IGlkPVxcXFxcXFwiZGl2MlxcXFxcXFwiPjwvZGl2PlxcXFxuICAgIDxkaXY+XFxcXG4gICAgICAgIDxhIHN0eWxlPVxcXFxcXFwiZmxvYXQ6bGVmdDttYXJnaW4tdG9wOjVweDtcXFxcXFxcIiBvbmNsaWNrPVxcXFxcXFwib3BlbkRuUGFnZSgpXFxcXFxcXCI+XFxcXG4gICAgICAgICAgICA8aW1nIHNyYz1cXFxcXFxcImh0dHBzOi8vczMuYXgxeC5jb20vMjAyMS8wMi8yMi95N3diOU8uanBnXFxcXFxcXCIgY2xhc3M9XFxcXFxcXCJyb3VuZF9pY29uXFxcXFxcXCIgIGFsdD1cXFxcXFxcIlxcXFxcXFwiPlxcXFxuICAgICAgICA8L2E+XFxcXG4gICAgICAgIDxzcGFuIHN0eWxlPVxcXFxcXFwibGluZS1oZWlnaHQ6NjBweDtmb250LXNpemU6MThweDtjb2xvcjogZ3JleTtcXFxcXFxcIj4mbmJzcDsmbmJzcDvmlq0mbmJzcDvlv7U8L3NwYW4+XFxcXG4gICAgICAgIDxhIHN0eWxlPVxcXFxcXFwiZmxvYXQ6cmlnaHQ7bWFyZ2luLXRvcDo1cHg7XFxcXFxcXCI+XFxcXG4gICAgICAgICAgICA8YnV0dG9uICBzdHlsZT1cXFxcXFxcImJvcmRlcjogbm9uZTtib3JkZXItcmFkaXVzOjEwcHg7YmFja2dyb3VuZDogIzA1QkZDNTt3aWR0aDogMTg1cHg7aGVpZ2h0OjQwcHg7IGZvbnQtc2l6ZTogMThweDtjb2xvcjogI0Y5RjBEQTtcXFxcXFxcIiBvbmNsaWNrPVxcXFxcXFwiY2xpY2ttZSgn6YWNIOe9riDlt7Ig5L+dIOWtmCDvvIEnLCAxMDAwLCAn5YWzJyk7XFxcXFxcXCI+5L+d5a2Y6K6+572u5bm25YWz6Zet55WM6Z2iPC9idXR0b24+XFxcXG4gICAgICAgIDwvYT5cXFxcbiAgICA8L2Rpdj5cXFxcbiAgICA8ZGl2IGNsYXNzPVxcXFxcXFwiemotZGl2XFxcXFxcXCI+XFxcXG4gICAgICAgIDx1bCBjbGFzcz1cXFxcXFxcImp4LXVsXFxcXFxcXCIgc3R5bGU9XFxcXFxcXCJoZWlnaHQ6NDQ0cHg7b3ZlcmZsb3cteTphdXRvO1xcXFxcXFwiPlxcXFxuICAgICAgICAgICAgPGxpIGNsYXNzPVxcXFxcXFwibXlDaG9pY2VcXFxcXFxcIiBzdHlsZT1cXFxcXFxcInotaW5kZXg6OTk5OTtwb3NpdGlvbjogZml4ZWQ7d2lkdGg6NzYuNSU7Y29sb3I6cmVkO1xcXFxcXFwiPjwvbGk+XFxcXG4gICAgICAgICAgICA8bGkgY2xhc3M9XFxcXFxcXCJ1c2VsZXNzXFxcXFxcXCI+PC9saT5cXFxcbiAgICAgICAgICAgIDxsaSBjbGFzcz1cXFxcXFxcInhsTGlzdFxcXFxcXFwiIHYtZm9yPVxcXFxcXFwiaXRlbSBpbiBqeERhdGFcXFxcXFxcIj57e2l0ZW19fTwvbGk+XFxcXG4gICAgICAgIDwvdWw+XFxcXG4gICAgICAgIDx1bCBjbGFzcz1cXFxcXFxcImNqLXVsXFxcXFxcXCI+XFxcXG4gICAgICAgICAgICA8bGkgc3R5bGU9XFxcXFxcXCJiYWNrZ3JvdW5kOmdyZXk7XFxcXFxcXCI+6K+36YCJ5oup5o+S5Lu2PC9saT5cXFxcbiAgICAgICAgICAgIDxsaSB2LWZvcj1cXFxcXFxcIml0ZW0gaW4gY2pEYXRhXFxcXFxcXCI+e3tpdGVtfX08L2xpPlxcXFxuICAgICAgICA8L3VsPlxcXFxuICAgIDwvZGl2PlxcXFxuPC9ib2R5PlxcXFxuPHNjcmlwdD5cXFxcbiAgICB2YXIgc2V0dGluZ3MgPSB7XFxcXG4gICAgICAgIHF5OiAneXVuMTcxNycsXFxcXG4gICAgICAgIHlrOiAneXVuMTcxNycsXFxcXG4gICAgICAgIHR4OiAneXVuMTcxNycsXFxcXG4gICAgICAgIG1nOiAneXVuMTcxNycsXFxcXG4gICAgICAgIGJsOiAneXVuMTcxNycsXFxcXG4gICAgICAgIG90aDogJ3l1bjE3MTcnLFxcXFxuICAgICAgICBxanU6ICcnLFxcXFxuICAgICAgICBjajogJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanMnXFxcXG4gICAgfTtcXFxcbiAgICBldmFsKGZ5X2JyaWRnZV9hcHAuZ2V0SW50ZXJuYWxKcygpKTtcXFxcbiAgICBcXFxcbiAgICB2YXIgb2xkUm91dGUgPSBcXFxcXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvTXlQYXJzZVNldC5qc29uXFxcXFxcXCI7XFxcXG4gICAgdmFyIG15U2V0ID0gZnlfYnJpZGdlX2FwcC5mZXRjaChvbGRSb3V0ZSk7XFxcXG4gICAgXFxcXG4gICAgdmFyIG5ld1JvdXRlID0gXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL0R1YW5OaWFuL015UGFyc2UuanNvblxcXFxcXFwiO1xcXFxuICAgIHZhciBuZXdDb25maWcgPSBmeV9icmlkZ2VfYXBwLmZldGNoKG5ld1JvdXRlKTtcXFxcbiAgICB2YXIgbXlTZWxlY3QgPSBbXTtcXFxcbiAgICBpZihuZXdDb25maWcgIT0gXFxcXFxcXCJcXFxcXFxcIil7XFxcXG4gICAgICAgIGV2YWwoXFxcXFxcXCJuZXdDb25maWcgPVxcXFxcXFwiICsgbmV3Q29uZmlnICsgXFxcXFxcXCI7XFxcXFxcXCIpO1xcXFxuICAgICAgICBzZXR0aW5ncyA9IG5ld0NvbmZpZy5zZXR0aW5ncztcXFxcbiAgICAgICAgdmFyIHljVGl0bGUgPSBbJ2RlZmF1bHRQYXJzZScsICdtYW9zcycsICdDaXR5SVAnLCAnY2FjaGVNM3U4JywgJ3BjVUEnLCAncGFyc2VMYycsICdncGFyc2UnLCAnbnBhcnNlJ107XFxcXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBuZXdDb25maWcudGl0bGUubGVuZ3RoOyBpKyspe1xcXFxuICAgICAgICAgICAgdmFyIFRpdGxlcyA9IG5ld0NvbmZpZy50aXRsZVtpXTtcXFxcbiAgICAgICAgICAgIGlmKHljVGl0bGUuaW5jbHVkZXMoVGl0bGVzKSA9PSBmYWxzZSl7XFxcXG4gICAgICAgICAgICAgICAgbXlTZWxlY3QucHVzaChUaXRsZXMpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxuICAgIHZhciBzZlJlZnJlc2ggPSBzZXR0aW5ncy5jajtcXFxcbiAgICBmdW5jdGlvbiBEaWQoaWQpe1xcXFxuICAgICAgICByZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xcXFxuICAgIH1cXFxcbiAgICBcXFxcbiAgICBpZihteVNldCA9PSAnJyl7XFxcXG4gICAgICAgIERpZChcXFxcXFxcImRpdjJcXFxcXFxcIikuaW5zZXJ0QWRqYWNlbnRIVE1MKCdhZnRlckJlZ2luJywnXFxcXFxcXFxcXFxcbjxoND7mj5DnpLrvvJo8YnI+4pGg5rOo5oSP5o+S5Lu26YCJ6aG577yM5rKh5pyJ5omL5Yqo5a+85YWl5o+S5Lu255qE6K+d5LiN55So5Yqo5a6D44CC5aaC6K6+572u5LiN5b2T5Lya5a+86Ie06KeE5YiZ5peg5rOV5L2/55So77yMPGJyPuino+WGs+WKnuazle+8muinhueVjOaJk+W8gOabtOWkmuiuvue9ruKGkuaWh+S7tueuoeeQhuKGkueCuWNhY2hl4oaS6ZW/5oyJTXlQYXJzZVNldC5qc29u5Yig6Zmk5o6J77ybPGJyPuKRoeWFqOWxgOiuvue9ruWmguaenOmAieaLqeS6humdnum7mOiupOmCo+S5iOWFqOmDqOeahOino+aekOS8muS9v+eUqOi/meS4gOiuvue9ru+8jOS4jeaDs+i/meagt+eahOivneivt+Whq+WFpem7mOiupO+8mzxicj7ikaLnu7/oibLkv53lrZjmjInpkq7ku4Xku4Xkv53lrZjphY3nva7kuI3kvJrlhbPpl63orr7nva7pobXpnaLvvIzphY3nva7lkI7mg7Pkv53lrZjlubblhbPpl63orr7nva7pobXpnaLnmoTor53or7fngrnok53oibLmjInpkq7vvJs8YnI+4pGj6ZiF6K+75a6M5o+Q56S654K55YWz6Zet5Yqg6L295a6M5pW06K6+572u6aG16Z2i77yM5aaC5Ye66Zeu6aKY5peg5rOV6Ieq6KGM6Kej5Yaz54K55Zu+54mH6L+b5YWl6K665Z2b5ZCR5oiR5Y+N6aaI44CCPGJyPjwvaDQ+Jyk7XFxcXG4gICAgfVxcXFxuICAgIFxcXFxuICAgIHZhciBib3hEYXRhID0gW1xcXFxuICAgICAgICB7XFxcXG4gICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLlpYcg5aWHXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBpZDogXFxcXFxcXCJxeVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgdmFsdWU6IHNldHRpbmdzLnF5LFxcXFxuICAgICAgICB9LCB7XFxcXG4gICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLphbcg6YW3XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBpZDogXFxcXFxcXCJ5a1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgdmFsdWU6IHNldHRpbmdzLnlrLFxcXFxuICAgICAgICB9LCB7XFxcXG4gICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLohb4g6IW+XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBpZDogXFxcXFxcXCJ0eFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgdmFsdWU6IHNldHRpbmdzLnR4LFxcXFxuICAgICAgICB9LCB7XFxcXG4gICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLmnpwg5p6cXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBpZDogXFxcXFxcXCJtZ1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgdmFsdWU6IHNldHRpbmdzLm1nLFxcXFxuICAgICAgICB9LCB7XFxcXG4gICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLlk6kg5ZOpXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBpZDogXFxcXFxcXCJibFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgdmFsdWU6IHNldHRpbmdzLmJsLFxcXFxuICAgICAgICB9LCB7XFxcXG4gICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLlhbYg5LuWXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBpZDogXFxcXFxcXCJvdGhcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHZhbHVlOiBzZXR0aW5ncy5vdGgsXFxcXG4gICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIuWFqCDlsYBcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGlkOiBcXFxcXFxcInFqdVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgdmFsdWU6IHNldHRpbmdzLnFqdSxcXFxcbiAgICAgICAgfSwge1xcXFxuICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi5o+SIOS7tlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgaWQ6IFxcXFxcXFwiY2pcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHZhbHVlOiBzZXR0aW5ncy5jaixcXFxcbiAgICAgICAgfVxcXFxuICAgIF07XFxcXG5cXFxcbiAgICB2YXIgaW5wdXRCb3ggPSBcXFxcXFxcIlxcXFxcXFwiO1xcXFxuICAgIGZvcihsZXQgaSA9IDA7IGkgPCBib3hEYXRhLmxlbmd0aDsgaSsrKXtcXFxcbiAgICAgICAgbGV0IGIgPSBib3hEYXRhW2ldO1xcXFxuICAgICAgICBpbnB1dEJveCArPSAnPGRpdiBjbGFzcz1cXFxcXFxcImJveCBiYXJcXFxcXFxcIj5cXFxcXFxcXFxcXFxuICAgICAgICAgICAgPGZvcm0+XFxcXFxcXFxcXFxcbiAgICAgICAgICAgICAgICA8bGFiZWwgdHlwZT1cXFxcXFxcInN1Ym1pdFxcXFxcXFwiPicgKyBiLnRpdGxlICsgJzwvbGFiZWw+XFxcXFxcXFxcXFxcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cXFxcXFxcInRleHRcXFxcXFxcIiBwbGFjZWhvbGRlcj1cXFxcXFxcIui+k+WFpeino+aekOWQjeaIluiAhVVSTC4uLi4uLlxcXFxcXFwiIHZhbHVlPVxcXFxcXFwiJyArIGIudmFsdWUgKyAnXFxcXFxcXCIgaWQ9XFxcXFxcXCInICsgYi5pZCArICdcXFxcXFxcIj5cXFxcXFxcXFxcXFxuICAgICAgICAgICAgPC9mb3JtPlxcXFxcXFxcXFxcXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXFxcXFwibGllYlxcXFxcXFwiPlxcXFxcXFxcXFxcXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD1cXFxcXFxcIicgKyBiLmlkICsgJ1NlbGVjdFxcXFxcXFwiPuKYsDwvYnV0dG9uPlxcXFxcXFxcXFxcXG4gICAgICAgICAgICA8L2Rpdj5cXFxcXFxcXFxcXFxuICAgICAgICA8L2Rpdj4nO1xcXFxuICAgIH1cXFxcbiAgICBEaWQoXFxcXFxcXCJkaXYyXFxcXFxcXCIpLmluc2VydEFkamFjZW50SFRNTCgnYWZ0ZXJlbmQnLCBpbnB1dEJveCk7XFxcXG4gICAgRGlkKFxcXFxcXFwiY2pcXFxcXFxcIikucGxhY2Vob2xkZXIgPSBcXFxcXFxcIui+k+WFpeaPkuS7tuWcsOWdgC4uLi4uLlxcXFxcXFwiO1xcXFxuICAgIERpZChcXFxcXFxcInFqdVxcXFxcXFwiKS5wbGFjZWhvbGRlciA9IFxcXFxcXFwi5q2k6aG55bu66K6u55WZ56m65oiW6ICF5aGr6buY6K6k5Lik5Liq5a2XXFxcXFxcXCI7XFxcXG4gICAgXFxcXG4gICAgbmV3IFZ1ZSh7XFxcXG4gICAgICAgIGVsOiBcXFxcXFxcIi56ai1kaXZcXFxcXFxcIixcXFxcbiAgICAgICAgZGF0YToge1xcXFxuICAgICAgICAgICAganhEYXRhOiBteVNlbGVjdCxcXFxcbiAgICAgICAgICAgIGNqRGF0YTogW1xcXFxcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5qc1xcXFxcXFwiLCBcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvZHpIb3VzZS9qcy9zcmNhdXRvLmpzXFxcXFxcXCIsIFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9qcy9QYXJzZS1WMl9Ebi5qc1xcXFxcXFwiXVxcXFxuICAgICAgICB9XFxcXG4gICAgfSk7XFxcXG5cXFxcbiAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHtcXFxcbiAgICAgICAgdmFyIGxlbiA9ICQoJy5qeC11bCcpLmNoaWxkcmVuKCdsaScpLmxlbmd0aDtcXFxcbiAgICAgICAgdmFyIGxlbjIgPSAkKCcuY2otdWwnKS5jaGlsZHJlbignbGknKS5sZW5ndGg7XFxcXG4gICAgICAgICQoJy5saWViIGJ1dHRvbicpLmNsaWNrKGZ1bmN0aW9uKGUpIHtcXFxcbiAgICAgICAgICAgIGlmKCQoJy5saWViIGJ1dHRvbicpLnRleHQoKS5pbmNsdWRlcygn4pSBJykpe1xcXFxuICAgICAgICAgICAgICAgICQoJy5saWViIGJ1dHRvbicpLmNzcygnYmFja2dyb3VuZCcsICcnKTtcXFxcbiAgICAgICAgICAgICAgICAkKCcubGllYiBidXR0b24nKS50ZXh0KCfimLAnKTtcXFxcbiAgICAgICAgICAgIH1lbHNle1xcXFxuICAgICAgICAgICAgICAgICQodGhpcykudGV4dCgn4pSBJyk7XFxcXG4gICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoJ2JhY2tncm91bmQnLCAncmVkJyk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAkKCdsaScpLmF0dHIoJ2NoZWNrJywgJ2ZhbHNlJyk7XFxcXG4gICAgICAgICAgICB2YXIgaW5wdXRpZCA9IFxcXFxcXFwiI1xcXFxcXFwiICsgdGhpcy5pZC5zcGxpdChcXFxcXFxcIlNlbGVjdFxcXFxcXFwiKVswXTtcXFxcbiAgICAgICAgICAgIHZhciBhcnIgPSAkKGlucHV0aWQpLnZhbCgpLnNwbGl0KCcsJyk7XFxcXG4gICAgICAgICAgICBhcnIgPSBhcnJbMF0gPT0gJycgPyBbXSA6IGFycjtcXFxcbiAgICAgICAgICAgICQoJy5teUNob2ljZScpLnRleHQoYXJyKTtcXFxcbiAgICAgICAgICAgIGlmIChpbnB1dGlkICE9PSAnI2NqJyAmJiAkKCcuY2otdWwnKS5jc3MoJ2Rpc3BsYXknKT09J25vbmUnKSB7XFxcXG4gICAgICAgICAgICAgICAgJCgnLmp4LXVsJykuc2xpZGVUb2dnbGUoKTtcXFxcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xcXFxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgbGVuOyBpKyspIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdmFyIGp4TGlzdCA9ICQoJy5qeC11bCBsaTpub3QoLm15Q2hvaWNlKScpLmVxKGkpO1xcXFxuICAgICAgICAgICAgICAgICAgICBpZiAoYXJyLmluY2x1ZGVzKGp4TGlzdC50ZXh0KCkpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBqeExpc3QuYXR0cignY2hlY2snLCAndHJ1ZScpO1xcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIGp4TGlzdC51bmJpbmQoJ2NsaWNrJykuY2xpY2soZnVuY3Rpb24oZSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkKHRoaXMpLmF0dHIoJ2NoZWNrJykgIT09IFxcXFxcXFwidHJ1ZVxcXFxcXFwiKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5hdHRyKCdjaGVjaycsICd0cnVlJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnVuc2hpZnQoJCh0aGlzKS50ZXh0KCkpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoaW5wdXRpZCkudmFsKGFycik7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnLm15Q2hvaWNlJykudGV4dChhcnIpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmF0dHIoJ2NoZWNrJywgJ2ZhbHNlJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgYSA9IDA7IGEgPCBhcnIubGVuZ3RoOyBhKyspIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyclthXSA9PSAkKHRoaXMpLnRleHQoKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnNwbGljZShhLCAxKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoaW5wdXRpZCkudmFsKGFycik7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcubXlDaG9pY2UnKS50ZXh0KGFycik7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSBlbHNlIGlmKCQoJy5qeC11bCcpLmNzcygnZGlzcGxheScpPT0nbm9uZScpe1xcXFxuICAgICAgICAgICAgICAgICQoJy5jai11bCcpLnNsaWRlVG9nZ2xlKCk7XFxcXG4gICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcXFxcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjI7IGkrKykge1xcXFxuICAgICAgICAgICAgICAgICAgICB2YXIgY2pMaXN0ID0gJCgnLmNqLXVsIGxpJykuZXEoaSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGlmICgkKGlucHV0aWQpLnZhbCgpID09IGNqTGlzdC50ZXh0KCkpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNqTGlzdC5hdHRyKCdjaGVjaycsICd0cnVlJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgY2pMaXN0LnVuYmluZCgnY2xpY2snKS5jbGljayhmdW5jdGlvbigpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpICE9PSAwKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChpbnB1dGlkKS52YWwoJCh0aGlzKS50ZXh0KCkpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuYXR0cignY2hlY2snLCAndHJ1ZScpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuc2libGluZ3MoKS5hdHRyKCdjaGVjaycsICdmYWxzZScpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgICQoZG9jdW1lbnQpLm5vdCgkKCcueGxMaXN0JykpLmNsaWNrKGZ1bmN0aW9uKGUpIHtcXFxcbiAgICAgICAgICAgICQoJy5qeC11bCcpLnNsaWRlVXAoKTtcXFxcbiAgICAgICAgICAgICQoJy5jai11bCcpLnNsaWRlVXAoKTtcXFxcbiAgICAgICAgICAgICQoJy5saWViIGJ1dHRvbicpLnRleHQoJ+KYsCcpO1xcXFxuICAgICAgICAgICAgJCgnLmxpZWIgYnV0dG9uJykuY3NzKCdiYWNrZ3JvdW5kJywgJycpO1xcXFxuICAgICAgICB9KVxcXFxuICAgICAgICAkKCdsYWJlbCcpLmRibGNsaWNrKGZ1bmN0aW9uKCl7XFxcXG4gICAgICAgICAgICBsZXQgaW5wdXRpZCA9ICcjJyArICQodGhpcykubmV4dCgpLmF0dHIoJ2lkJyk7XFxcXG4gICAgICAgICAgICAkKGlucHV0aWQpLnZhbCgnJyk7XFxcXG4gICAgICAgIH0pXFxcXG4gICAgfSlcXFxcbiAgICBcXFxcbiAgICBmdW5jdGlvbiBUb2FzdChtc2csZHVyYXRpb24peyAgXFxcXG4gICAgICAgIGR1cmF0aW9uPWlzTmFOKGR1cmF0aW9uKT8yMDAwOmR1cmF0aW9uOyAgXFxcXG4gICAgICAgIHZhciBtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7ICBcXFxcbiAgICAgICAgbS5pbm5lckhUTUwgPSBtc2c7ICBcXFxcbiAgICAgICAgbS5zdHlsZS5jc3NUZXh0PVxcXFxcXFwid2lkdGg6NDUlOyBtaW4td2lkdGg6MTUwcHg7IGJhY2tncm91bmQ6IzMxMTsgb3BhY2l0eTowLjY7IGhlaWdodDphdXRvO21pbi1oZWlnaHQ6IDQ1cHg7IGNvbG9yOiNmZmY7IGxpbmUtaGVpZ2h0OjQ1cHg7IHRleHQtYWxpZ246Y2VudGVyOyBib3JkZXItcmFkaXVzOjEwcHg7IHBvc2l0aW9uOmZpeGVkOyB0b3A6NjAlOyBsZWZ0OjI2JTsgei1pbmRleDo5OTk5OTk7XFxcXFxcXCI7ICBcXFxcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChtKTsgIFxcXFxuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyAgXFxcXG4gICAgICAgICAgICB2YXIgZCA9IDAuNTsgIFxcXFxuICAgICAgICAgICAgbS5zdHlsZS53ZWJraXRUcmFuc2l0aW9uID0gJy13ZWJraXQtdHJhbnNmb3JtICcgKyBkICsgJ3MgZWFzZS1pbiwgb3BhY2l0eSAnICsgZCArICdzIGVhc2UtaW4nOyAgXFxcXG4gICAgICAgICAgICBtLnN0eWxlLm9wYWNpdHkgPSAnMCc7ICBcXFxcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobSkgfSwgZCAqIDEwMDApOyAgXFxcXG4gICAgICAgIH0sIGR1cmF0aW9uKTsgIFxcXFxuICAgIH0gIFxcXFxuXFxcXG4gICAgZnVuY3Rpb24gb3BlbkRuUGFnZSgpe1xcXFxuICAgICAgICBmYmEub3BlbihKU09OLnN0cmluZ2lmeSh7XFxcXG4gICAgICAgICAgICBydWxlOiBcXFxcXFxcIj1eX149XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLnrqHnkIbop6PmnpBcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU957yW6L6RI25vSGlzdG9yeSNcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGdyb3VwOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAvL2ZpbmRSdWxlOiBcXFxcXFxcImpzOnRoaXMuZD1bXTskLnJlcXVpcmUoXFxcXFxcXFxcXFxcXFxcImhpa2VyOi8vcGFnZS9QYXJzZV9Ebi5qcz9ydWxlPU15RmllbGThtLDigb9cXFxcXFxcXFxcXFxcXFwiKS5lZGl0KCk7c2V0UmVzdWx0KGQpO1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgcHJlUnVsZTogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGV4dHJhOiB7fVxcXFxuICAgICAgICB9KSk7XFxcXG4gICAgfVxcXFxuICAgIGZ1bmN0aW9uIGNhbmNlbCgpe1xcXFxuICAgICAgICBpZihteVNldD09Jycpe1xcXFxuICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC53cml0ZUZpbGUob2xkUm91dGUsIEpTT04uc3RyaW5naWZ5KHNldHRpbmdzLCBudWxsLCA0KSk7XFxcXG4gICAgICAgICAgICBmeV9icmlkZ2VfYXBwLnJlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICB9ZWxzZXtcXFxcbiAgICAgICAgICAgIGZ5X2JyaWRnZV9hcHAuYmFjayhmYWxzZSk7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9XFxcXG4gICAgZnVuY3Rpb24gY2xpY2ttZShtc2csZHVyYXRpb24sdGl0bGUpe1xcXFxuICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgYm94RGF0YS5sZW5ndGg7IGkrKyl7XFxcXG4gICAgICAgICAgICBsZXQgaWQgPSBib3hEYXRhW2ldLmlkO1xcXFxuICAgICAgICAgICAgc2V0dGluZ3NbaWRdID0gRGlkKGlkKS52YWx1ZTtcXFxcbiAgICAgICAgICAgIGlmKHNldHRpbmdzLnFqdSA9PSAnJyl7XFxcXG4gICAgICAgICAgICAgICAgc2V0dGluZ3MucWp1ID0gJ+m7mOiupCc7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgaWYgKG15U2VsZWN0WzBdICE9IHVuZGVmaW5lZCkge1xcXFxuICAgICAgICAgICAgZXZhbCgndmFyIGJjQ29uZmlnPScgKyBmeV9icmlkZ2VfYXBwLmZldGNoKG5ld1JvdXRlKSk7XFxcXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGJjQ29uZmlnLnNldHRpbmdzLCBzZXR0aW5ncyk7XFxcXG4gICAgICAgICAgICBmeV9icmlkZ2VfYXBwLndyaXRlRmlsZShuZXdSb3V0ZSwgJCQkLnN0cmluZ2lmeShiY0NvbmZpZykpO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGZ5X2JyaWRnZV9hcHAud3JpdGVGaWxlKG9sZFJvdXRlLCAkJCQuc3RyaW5naWZ5KHNldHRpbmdzKSk7XFxcXG4gICAgICAgICAgICBcXFxcbiAgICAgICAgVG9hc3QobXNnLGR1cmF0aW9uKTtcXFxcbiAgICAgICAgaWYodGl0bGU9PVxcXFxcXFwi5YWzXFxcXFxcXCIpe1xcXFxuICAgICAgICAgICAgaWYoc2ZSZWZyZXNoICE9IERpZChcXFxcXFxcImNqXFxcXFxcXCIpLnZhbHVlKXtcXFxcbiAgICAgICAgICAgICAgICBmeV9icmlkZ2VfYXBwLmJhY2soKTtcXFxcbiAgICAgICAgICAgIH1lbHNle1xcXFxuICAgICAgICAgICAgICAgIGZ5X2JyaWRnZV9hcHAuYmFjayhmYWxzZSk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH1lbHNle1xcXFxuICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC5yZWZyZXNoUGFnZSh0cnVlKTtcXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcblxcXFxuPC9zY3JpcHQ+ICAgXFxcXG48L2h0bWw+XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwiUGFyc2VfRG4uanNcXFwiLFxcXCJwYXRoXFxcIjpcXFwiUGFyc2VfRG4uanNcXFwiLFxcXCJydWxlXFxcIjpcXFwiLy89PT09PT09PT09PT3lhY3ll4XosIPnlKg9PT09PT09PT09PT1cXFxcbi8v77yN77yN77yNPV5fXj1cXFxcblxcXFxudmFyIHZlcnNpb24gPSBcXFxcXFxcIjMuNS4xXFxcXFxcXCI7XFxcXG52YXIgdXBkYXRlRGF0ZSA9ICcyMDIxLzEwLzMwLzIyOjIyJztcXFxcbnZhciBfbXlTZXQgPSB7XFxcXG4gICAgcWp1OiAn6buY6K6kJyxcXFxcbiAgICBjamNhY2hlOiAnaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5qcycsXFxcXG4gICAgeDVjYWNoZTogJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uaHRtbCcsXFxcXG4gICAgb2xkQ29uZmlnOiAnaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVBhcnNlU2V0Lmpzb24nLFxcXFxuICAgIGNrTGluazogJ2h0dHBzOi8vY29kZS5hbGl5dW4uY29tL0FJOTU3L0hpa2VyL3Jhdy9tYXN0ZXIvdi8nLFxcXFxuICAgIGNqOiAnaHR0cHM6Ly9jb2RlLmFsaXl1bi5jb20vQUk5NTcvSGlrZXIvcmF3L21hc3Rlci92L0Nsb3VkUGFyc2UtVjJfRG4uanMnLFxcXFxuICAgIHg1VXJsOiAnaHR0cHM6Ly9jb2RlLmFsaXl1bi5jb20vQUk5NTcvSGlrZXIvcmF3L21hc3Rlci92L1BhcnNlX0RuLmh0bWwnLFxcXFxuICAgIHBhcnNlUm91dGU6ICdoaWtlcjovL2ZpbGVzL3J1bGVzL0R1YW5OaWFuL015UGFyc2UuanNvbicsXFxcXG4gICAgeDVSb3V0ZTogJ2ZpbGU6Ly8vc3RvcmFnZS9lbXVsYXRlZC8wL0FuZHJvaWQvZGF0YS9jb20uZXhhbXBsZS5oaWtlcnZpZXcvZmlsZXMvRG9jdW1lbnRzL2NhY2hlL1BhcnNlX0RuLmh0bWwnXFxcXG59O1xcXFxudmFyIE15UGFyc2VTID0ge307XFxcXG52YXIgbXlTZXQgPSBfbXlTZXQ7XFxcXG5pZiAoZmlsZUV4aXN0KF9teVNldC5wYXJzZVJvdXRlKSkge1xcXFxuICAgIGV2YWwoJ3ZhciBwYXJzZUZpbGUgPScgKyBmZXRjaChfbXlTZXQucGFyc2VSb3V0ZSkpO1xcXFxuICAgIE15UGFyc2VTID0gcGFyc2VGaWxlLmNvZGVzO1xcXFxuICAgIG15U2V0ID0gcGFyc2VGaWxlLnNldHRpbmdzO1xcXFxufVxcXFxuXFxcXG52YXIgcGFyc2VUaXRsZSA9IFtcXFxcbiAgICBcXFxcXFxcInl1bjE3MTdcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcIlBhbkd1XFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJGdVhpbmdcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcImh0dHBzOi8vanh4LnNteXM4LmNuL2luZGV4LnBocD91cmw9XFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJodHRwczovL29ranguY2MvP3VybD1cXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcImh0dHBzOi8vangubTN1OC50di9qaWV4aS8/dXJsPVxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwiaHR0cHM6Ly9zYi41Z3Nlby5uZXQvP3VybD1cXFxcXFxcIlxcXFxuXTtcXFxcblxcXFxuLy/vvI3vvI3vvI09Xl9ePVxcXFxuXFxcXG4vL+aOpeWPo+iuvue9ri5cXFxcblxcXFxudmFyIHNldFVybCA9IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL1JvdXRlP3J1bGU9TXlGaWVsZOG0sOKBvyZ0eXBlPeiuvue9riNub1JlY29yZEhpc3RvcnkjXFxcXFxcXCI7XFxcXG52YXIgc2V0X3N3aXRjaCA9IHNldFVybDtcXFxcbnZhciBsYXp5ID0gYGV2YWwoJ3ZhciBjb25maWcgPScgKyBmZXRjaChnZXRWYXIoJ29sZENvbmZpZycpKSk7ZXZhbChmZXRjaChjb25maWcuY2opKTtheXRtUGFyc2UoaW5wdXQpYDtcXFxcblxcXFxuLy92YXIgcGFyd2l4ID0gYHZhciB5dXJsPSdodHRwczovL2RhaWxpLm1heWl4aW9uZ2RpLmNuLz91cmw9JztSZWZlcmVyJzogJ2h0dHBzOi8vd3d3Lm1heWl4aW9uZ2RpLmNuL3lzP2lkPSc7J2h0dHBzOi8vZGFpbGkubWF5aXhpb25nZGkuY24vYXBpLnBocCcsICdSZWZlcmVyJzonaHR0cHM6Ly9kYWlsaS5tYXlpeGlvbmdkaS5jbic7XFxcXG4vLyDlhajmsJFodHRwczovL3BjdmlkZW9hbGl5dW4udGlhbnNoYW5ncmVuamlhbi5tZ3R2LmNvbS44OHd1bWEuY29tLz91cmw9XFxcXG5cXFxcbi8v77yN77yN77yN5aSHIOeUqO+8je+8je+8jVxcXFxuLypcXFxcbiAqIOW9seinhuW3peWcuu+8miBodHRwczovL3lzZ2MuY2MvXFxcXG4gKiDmsZ/muZY6IDU1NeeUteW9sSBodHRwczovL3d3dy41NTVkeTIuY29tL3Bob25lLmh0bWwg772cIDE355yLIGh0dHA6Ly8xN2thbnl5LmNuLyBodHRwOi8vamhqaWV4aS4zMHZyLmNuLz91cmw9IO+9nCBodHRwOi8vYXBpLm1haXppbWFsbC5jb20vaW5kZXgucGhwP3VybD1cXFxcbiAqIOaxn+a5ljogaHR0cDovL3d3dy50aWFuc2h1eXVuLm5ldC9pbmRleC5waHAvdm9kL3BsYXkvaWQvNDQ4Mzc3L3NpZC8xL25pZC8xLmh0bWxcXFxcbiAqIOaxn+a5ljI6IGh0dHA6Ly85OGh5ay5jbi9pbmRleC5waHAvdm9kL3BsYXkvaWQvNzI4NDEvc2lkLzEvbmlkLzEuaHRtbFxcXFxuICog5Lq65Lq66L+3OiBodHRwczovL3ZpcC5zdXNvdS50di9wbGF5ZXIvP3VybD0g772cIGh0dHBzOi8vd3d3Lm1vbWRtLmNjL1xcXFxuICogXFxcXG4gKiB3dWlnZW46IGh0dHBzOi8vd3d3LjVpZ2VuLmNvbS9kbXBsYXllci9wbGF5ZXIvP3VybD1cXFxcbiAqIOW5sumlrSjkurrkurrov7cpOiBodHRwczovL2p4Lnp1aS5jbS8/dXJsPVxcXFxuICogaHR0cHM6Ly8yLjY2bW92aWUudG9wL3BsYXllci8/dXJsPVxcXFxuICogXFxcXG4gKi9cXFxcblxcXFxuXFxcXG52YXIgdG9vbHMgPSB7XFxcXG4gICAgTUQ1OiBmdW5jdGlvbihkYXRhKSB7XFxcXG4gICAgICAgIGV2YWwoZ2V0Q3J5cHRvSlMoKSk7XFxcXG4gICAgICAgIHJldHVybiBDcnlwdG9KUy5NRDUoZGF0YSkudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLkhleCk7XFxcXG4gICAgfSxcXFxcbiAgICBBRVM6IGZ1bmN0aW9uKHRleHQsIGtleSwgaXYsIGlzRW5jcnlwdCkge1xcXFxuICAgICAgICBldmFsKGdldENyeXB0b0pTKCkpO1xcXFxuICAgICAgICB2YXIga2V5ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2Uoa2V5KTtcXFxcbiAgICAgICAgdmFyIGl2ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoaXYpO1xcXFxuICAgICAgICBpZiAoaXNFbmNyeXB0KSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gQ3J5cHRvSlMuQUVTLmVuY3J5cHQodGV4dCwga2V5LCB7XFxcXG4gICAgICAgICAgICAgICAgaXY6IGl2LFxcXFxuICAgICAgICAgICAgICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLFxcXFxuICAgICAgICAgICAgICAgIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Qa2NzN1xcXFxuICAgICAgICAgICAgfSkudG9TdHJpbmcoKTtcXFxcbiAgICAgICAgfTtcXFxcbiAgICAgICAgcmV0dXJuIENyeXB0b0pTLkFFUy5kZWNyeXB0KHRleHQsIGtleSwge1xcXFxuICAgICAgICAgICAgaXY6IGl2LFxcXFxuICAgICAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBrY3M3XFxcXG4gICAgICAgIH0pLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5VdGY4KTtcXFxcbiAgICB9LFxcXFxuICAgIC8vYXNjaWlcXFxcbiAgICBuZXh0Q2hhcmFjdGVyOiBmdW5jdGlvbihhc2NpaVZhbHVlLCBrKSB7XFxcXG4gICAgICAgIHZhciBzID0gYXNjaWlWYWx1ZTtcXFxcbiAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocyArIGspO1xcXFxuICAgIH0sXFxcXG4gICAgLy/lh6/mkpJcXFxcbiAgICBjYWVzYXJDaXBoZXI6IGZ1bmN0aW9uKHN0cmluZ1ZhbHVlLCBrKSB7XFxcXG4gICAgICAgIHZhciBuZXdTdHJpbmcgPSBcXFxcXFxcIlxcXFxcXFwiO1xcXFxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cmluZ1ZhbHVlLmxlbmd0aDsgaSsrKSB7XFxcXG4gICAgICAgICAgICBuZXdTdHJpbmcgKz0gdGhpcy5uZXh0Q2hhcmFjdGVyKHN0cmluZ1ZhbHVlW2ldLmNoYXJDb2RlQXQoKSwgayk7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgcmV0dXJuIG5ld1N0cmluZztcXFxcbiAgICB9LFxcXFxuICAgIG5vd0RhdGU6IGZ1bmN0aW9uKCkge1xcXFxuICAgICAgICB2YXIgZGF0ZTEgPSBuZXcgRGF0ZSgpO1xcXFxuICAgICAgICB2YXIgZGF0ZVN0ciA9IFxcXFxcXFwiXFxcXFxcXCI7XFxcXG4gICAgICAgIGlmIChkYXRlMSkge1xcXFxuICAgICAgICAgICAgZGF0ZVN0ciA9IGRhdGUxLmdldEZ1bGxZZWFyKCk7XFxcXG4gICAgICAgICAgICB2YXIgbW9udGggPSBkYXRlMS5nZXRNb250aCgpICsgMTtcXFxcbiAgICAgICAgICAgIHZhciBkYXkgPSBkYXRlMS5nZXREYXRlKCk7XFxcXG4gICAgICAgICAgICBpZiAobW9udGggPCAxMCkge1xcXFxuICAgICAgICAgICAgICAgIGRhdGVTdHIgKz0gXFxcXFxcXCItMFxcXFxcXFwiICsgbW9udGg7XFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgIGRhdGVTdHIgKz0gXFxcXFxcXCItXFxcXFxcXCIgKyBtb250aDtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIGlmIChkYXkgPCAxMCkge1xcXFxuICAgICAgICAgICAgICAgIGRhdGVTdHIgKz0gXFxcXFxcXCItMFxcXFxcXFwiICsgZGF5O1xcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICBkYXRlU3RyICs9IFxcXFxcXFwiLVxcXFxcXFwiICsgZGF5O1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHJldHVybiBkYXRlU3RyO1xcXFxuICAgIH0sXFxcXG4gICAgdG9KU09OOiBmdW5jdGlvbihqc29uKSB7XFxcXG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShqc29uLCAoa2V5LCB2YWx1ZSkgPT4ge1xcXFxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnZnVuY3Rpb24nKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSwgNCk7XFxcXG4gICAgfSxcXFxcbiAgICB0b1ZOdW06IGZ1bmN0aW9uKGEpIHtcXFxcbiAgICAgICAgdmFyIGEgPSBhLnRvU3RyaW5nKCk7XFxcXG4gICAgICAgIHZhciBjID0gYS5zcGxpdCgnLicpO1xcXFxuICAgICAgICB2YXIgbnVtX3BsYWNlID0gW1xcXFxcXFwiXFxcXFxcXCIsIFxcXFxcXFwiMFxcXFxcXFwiLCBcXFxcXFxcIjAwXFxcXFxcXCIsIFxcXFxcXFwiMDAwXFxcXFxcXCIsIFxcXFxcXFwiMDAwMFxcXFxcXFwiXSxcXFxcbiAgICAgICAgICAgIHIgPSBudW1fcGxhY2UucmV2ZXJzZSgpO1xcXFxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGMubGVuZ3RoOyBpKyspIHtcXFxcbiAgICAgICAgICAgIHZhciBsZW4gPSBjW2ldLmxlbmd0aDtcXFxcbiAgICAgICAgICAgIGNbaV0gPSByW2xlbl0gKyBjW2ldO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHZhciByZXMgPSBjLmpvaW4oJycpO1xcXFxuICAgICAgICByZXR1cm4gcmVzO1xcXFxuICAgIH0sXFxcXG4gICAgY3ByVmVyc2lvbjogZnVuY3Rpb24oYSwgYikge1xcXFxuICAgICAgICB2YXIgX2EgPSBwYXJzZUludCh0aGlzLnRvVk51bShhKSksXFxcXG4gICAgICAgICAgICBfYiA9IHBhcnNlSW50KHRoaXMudG9WTnVtKGIpKTtcXFxcbiAgICAgICAgYiA9IGlzTmFOKF9iKSA/IHZlcnNpb24gOiBiO1xcXFxuICAgICAgICBpZiAoX2EgPiBfYikge1xcXFxuICAgICAgICAgICAgcHV0VmFyKCdqeE5ld1YnLCAn5pyJ5paw54mI5pysOiAnICsgYSk7XFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICBjbGVhclZhcignanhOZXdWJyk7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgcHV0VmFyKCdqeE9sZFYnLCBiKTtcXFxcbiAgICB9XFxcXG59O1xcXFxuXFxcXG5pZiAoZ2V0VmFyKFxcXFxcXFwianhPbGRWXFxcXFxcXCIsIFxcXFxcXFwiMFxcXFxcXFwiKSAhPSB2ZXJzaW9uKSB7XFxcXG4gICAgcHV0VmFyKCdjakNhY2hlJywgX215U2V0LmNqY2FjaGUpO1xcXFxuICAgIHB1dFZhcigneDVDYWNoZScsIF9teVNldC54NUNhY2hlKTtcXFxcbiAgICBwdXRWYXIoJ29sZENvbmZpZycsIF9teVNldC5vbGRDb25maWcpO1xcXFxuICAgIHB1dFZhcigncGFyc2VSb3V0ZScsIF9teVNldC5wYXJzZVJvdXRlKTtcXFxcbiAgICBsZXQgbWF5Y2sgPSAnaHR0cHM6Ly9naXRlZS5jb20vRHVhbi1OaWFuL0RuL3Jhdy9tYXN0ZXIvaGlrZXJ2aWV3Lyc7XFxcXG4gICAgbGV0IGp4TmV3ViA9IGZldGNoKG1heWNrICsgJ1BhcnNlVmVyc2lvbi50eHQnKSxcXFxcbiAgICAgICAganhPbGRWID0gKGZldGNoKF9teVNldC5jamNhY2hlKS5zcGxpdCgndmVyc2lvbiA9IFxcXFxcXFwiJylbMV0gKyAnJykuc3BsaXQoJ1xcXFxcXFwiJylbMF07XFxcXG4gICAgdG9vbHMuY3ByVmVyc2lvbihqeE5ld1YsIGp4T2xkVik7XFxcXG4gICAgd3JpdGVGaWxlKCdoaWtlcjovL2ZpbGVzL2NhY2hlL3g1UGFyc2VMYW5KaWUudHh0JywgZmV0Y2gobWF5Y2sgKyAneDVQYXJzZUxhbkppZS50eHQnKSk7XFxcXG59XFxcXG5cXFxcbnZhciBQYXJzZVMgPSB7fTtcXFxcbnZhciBvcmlnaW5hbFBhcnNlUyA9IHtcXFxcbiAgICAvL3VwZGF0ZURhdGU6IHVwZGF0ZURhdGUsXFxcXG4gICAgQ2l0eUlQOiAnaHR0cDovL3B2LnNvaHUuY29tL2NpdHlqc29uJyxcXFxcbiAgICBwY1VBOiAnVXNlci1BZ2VudEBNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wXFxcXFxcXFzvvJtcXFxcXFxcXO+8myBXT1c2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzQ5LjAuMjYyMy44NyBTYWZhcmkvNTM3LjM2JyxcXFxcbiAgICBjYWNoZU0zdTg6IGZ1bmN0aW9uKHZVcmwsIHJlZikge1xcXFxuICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgdmFyIG0zdTggPSBmZXRjaCh2VXJsLCB7fSk7XFxcXG4gICAgICAgICAgICB3cml0ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvY2FjaGUvdmlkZW9zLm0zdTgnLCBtM3U4KTtcXFxcbiAgICAgICAgfSBjYXRjaCAoZSkge31cXFxcbiAgICAgICAgcmV0dXJuICdmaWxlOi8vL3N0b3JhZ2UvZW11bGF0ZWQvMC9BbmRyb2lkL2RhdGEvY29tLmV4YW1wbGUuaGlrZXJ2aWV3L2ZpbGVzL0RvY3VtZW50cy9jYWNoZS92aWRlb3MubTN1OCMnO1xcXFxuICAgIH0sXFxcXG4gICAgZGVmYXVsdFBhcnNlOiBmdW5jdGlvbih1cmwpIHtcXFxcbiAgICAgICAgcmV0dXJuIHVybDtcXFxcbiAgICB9LFxcXFxuICAgIG1hb3NzOiBmdW5jdGlvbihqeHVybCwgcmVmLCBrZXkpIHtcXFxcbiAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgIHZhciBnZXRWaWRlb0luZm8gPSBmdW5jdGlvbih0ZXh0KSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRvb2xzLkFFUyh0ZXh0LCBrZXksIGl2KTtcXFxcbiAgICAgICAgICAgIH07XFxcXG4gICAgICAgICAgICBpZiAocmVmKSB7XFxcXG4gICAgICAgICAgICAgICAgdmFyIGh0bWwgPSByZXF1ZXN0KGp4dXJsLCB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICdSZWZlcmVyJzogcmVmXFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgdmFyIGh0bWwgPSByZXF1ZXN0KGp4dXJsKTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIGlmIChodG1sLmluZGV4T2YoJyZidHdhZj0nKSAhPSAtMSkge1xcXFxuICAgICAgICAgICAgICAgIGh0bWwgPSByZXF1ZXN0KGp4dXJsICsgJyZidHdhZicgKyBodG1sLm1hdGNoKC8mYnR3YWYoLio/KVxcXFxcXFwiLylbMV0sIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1JlZmVyZXInOiByZWZcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB2YXIgaXYgPSBodG1sLnNwbGl0KCdidF90b2tlbiA9IFxcXFxcXFwiJylbMV0uc3BsaXQoJ1xcXFxcXFwiJylbMF07XFxcXG4gICAgICAgICAgICBldmFsKGh0bWwubWF0Y2goL3ZhciBjb25maWcgPSB7W1xcXFxcXFxcc1xcXFxcXFxcU10qP30vKVswXSArICcnKTtcXFxcbiAgICAgICAgICAgIGlmIChjb25maWcudXJsLnNsaWNlKDAsIDQpICE9ICdodHRwJykge1xcXFxuICAgICAgICAgICAgICAgIGNvbmZpZy51cmwgPSBkZWNvZGVVUklDb21wb25lbnQodG9vbHMuQUVTKGNvbmZpZy51cmwsIFxcXFxcXFwiZHZ5WVJRbG5QUkNNZFFTZVxcXFxcXFwiLCBpdikpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy51cmw7XFxcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiAnJztcXFxcbiAgICAgICAgfVxcXFxuICAgIH0sXFxcXG4gICAgTExROiBmdW5jdGlvbihqeHVybCkge1xcXFxuICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgdmFyIGFwaSA9IGp4dXJsLnNwbGl0KCc/dXJsPScpWzBdICsgXFxcXFxcXCJhcGkucGhwXFxcXFxcXCI7XFxcXG4gICAgICAgICAgICB2YXIgYjY0aWQgPSBiYXNlNjRFbmNvZGUoanh1cmwuc3BsaXQoJ3VybD0nKVsxXSk7XFxcXG4gICAgICAgICAgICB2YXIgcGFyc2VpZCA9IHRvb2xzLmNhZXNhckNpcGhlcihiNjRpZCwgLTEpO1xcXFxuICAgICAgICAgICAgdmFyIGpzb24gPSBKU09OLnBhcnNlKHJlcXVlc3QoYXBpLCB7XFxcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgICAgICAgICAnUmVmZXJlcic6IGp4dXJsXFxcXG4gICAgICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcXFxcbiAgICAgICAgICAgICAgICBib2R5OiAndXJsPScgKyBwYXJzZWlkXFxcXG4gICAgICAgICAgICB9KSk7XFxcXG4gICAgICAgICAgICB1cmwgPSAoanNvbi5jb2RlID09IDIwMCA/IGJhc2U2NERlY29kZSh0b29scy5jYWVzYXJDaXBoZXIoanNvbi51cmwsIC0xKSkgOiAnJyk7XFxcXG4gICAgICAgICAgICByZXR1cm4gdXJsO1xcXFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gJyc7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9LFxcXFxuICAgIFBhbkd1OiBmdW5jdGlvbih2aXBVcmwsIGRhdGEpIHtcXFxcbiAgICAgICAgLyp2YXIgcmVmID0gJ2h0dHBzOi8vd3d3LnBhbmd1amlleGkuY29tLyc7XFxcXG4gICAgICAgIHZhciBwYXJzZSA9ICdodHRwczovL3Bhbmd1YXBpLm50cnlqZC5uZXQvamlleGkvP3VybD0nICsgdmlwVXJsO1xcXFxuICAgICAgICB2YXIgYXBpID0gJ2h0dHBzOi8vcGFuZ3VhcGkubnRyeWpkLm5ldC9qaWV4aS9hcGkucGhwJztcXFxcbiAgICAgICAgKi9cXFxcbiAgICAgICAgLy92YXIgcmVmID0gJ2h0dHBzOi8veG15c3R2LmNvbS8nO1xcXFxuICAgICAgICAvL3ZhciBwYXJzZSA9ICdodHRwczovL3d3dy45OWtwdy5jb20vcGFuZ3UvaW5kZXgucGhwP3VybD0nICsgdGFpbFVybDtcXFxcbiAgICAgICAgLy92YXIgYXBpID0gJ2h0dHBzOi8vd3d3Ljk5a3B3LmNvbS9wYW5ndS9hcGkucGhwJztcXFxcbiAgICAgICAgdmFyIHBhcnNlID0gXFxcXFxcXCJodHRwczovL3d3dy5wYW5ndWppZXhpLmNvbS9wYW5ndS8/dXJsPVxcXFxcXFwiICsgdmlwVXJsO1xcXFxuICAgICAgICB2YXIgYXBpID0gXFxcXFxcXCJodHRwczovL3Bhbmd1YXBpLm50cnlqZC5uZXQvcGFuZ3UyMDIxL2FwaS5waHBcXFxcXFxcIjtcXFxcbiAgICAgICAgaWYgKGRhdGEpIHtcXFxcbiAgICAgICAgICAgIHJlZiA9IGRhdGFbMF07XFxcXG4gICAgICAgICAgICBwYXJzZSA9IGRhdGFbMV07XFxcXG4gICAgICAgICAgICBhcGkgPSBkYXRhWzJdO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHZhciBUaW1lID0gKE1hdGguZmxvb3IobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKSAqIDEpLnRvU3RyaW5nKCk7XFxcXG4gICAgICAgIHZhciBqc29uID0gcmVxdWVzdChhcGksIHtcXFxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcIlJlZmVyZXJcXFxcXFxcIjogcGFyc2VcXFxcbiAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICBib2R5OiBcXFxcXFxcInVybD1cXFxcXFxcIiArIHZpcFVybCArIFxcXFxcXFwiJnJlZmVyZXI9XFxcXFxcXCIgKyBiYXNlNjRFbmNvZGUocGFyc2UpICsgXFxcXFxcXCImcmVmPTEmdGltZT1cXFxcXFxcIiArIFRpbWUgKyBcXFxcXFxcIiZ0eXBlPSZvdGhlcj1cXFxcXFxcIiArIGJhc2U2NEVuY29kZSh2aXBVcmwpICsgXFxcXFxcXCImaW9zPTBcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIG1ldGhvZDogXFxcXFxcXCJQT1NUXFxcXFxcXCJcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgIHZhciB1cmwgPSBqc29uWzBdID09IFxcXFxcXFwie1xcXFxcXFwiID8gSlNPTi5wYXJzZShqc29uKS51cmwgOiBcXFxcXFxcIlxcXFxcXFwiO1xcXFxuICAgICAgICByZXR1cm4gdXJsO1xcXFxuICAgIH0sXFxcXG4gICAgeXVuMTcxNzogZnVuY3Rpb24odmlwVXJsKSB7XFxcXG4gICAgICAgIHZhciBpc3lrID0gdmlwVXJsLmluZGV4T2YoJ3lvdWt1Jyk7XFxcXG4gICAgICAgIHZhciByZWYgPSBcXFxcXFxcImh0dHBzOi8vd3d3LjE3MTd5dW4uY29tL2p4L3R5LnBocD91cmw9XFxcXFxcXCIgKyB2aXBVcmw7XFxcXG4gICAgICAgIHZhciBwYXJzZSA9IFxcXFxcXFwiaHR0cHM6Ly8xNzE3eXVuLmNvbS56aDE4OC5uZXQvMDgyOC8/dXJsPVxcXFxcXFwiICsgdmlwVXJsO1xcXFxuICAgICAgICB2YXIgYXBpID0gXFxcXFxcXCJodHRwczovLzE3MTd5dW4uY29tLnpoMTg4Lm5ldC8xMDA0Ly4uaW5kZXguLnBocFxcXFxcXFwiO1xcXFxuICAgICAgICByZXR1cm4gaXN5ayA9PSAtMSA/IHRoaXMuUGFuR3UodmlwVXJsLCBbcmVmLCBwYXJzZSwgYXBpXSkgOiB0aGlzLlBhbkd1KHZpcFVybCwgW3JlZiArICcsdmlwOicsIHBhcnNlICsgJyx2aXA6JywgYXBpXSk7XFxcXG4gICAgfSxcXFxcbiAgICBGdVhpbmc6IGZ1bmN0aW9uKHZpcFVybCkge1xcXFxuICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgLy9pZih2aXBVcmwuaW5kZXhPZigndi55b3VrdScpIT0tMSl7XFxcXG4gICAgICAgICAgICAvLyAgICB2aXBVcmwgPSAoSlNPTi5wYXJzZShyZXF1ZXN0KHZpcFVybCwge3JlZGlyZWN0OmZhbHNlLCB3aXRoSGVhZGVyczp0cnVlfSkpLmhlYWRlcnMubG9jYXRpb24gKyAnJykucmVwbGFjZSgvXFxcXFxcXFw/LiovLCcnKTtcXFxcbiAgICAgICAgICAgIC8vfVxcXFxuICAgICAgICAgICAgdmFyIHJlZiA9ICdodHRwczovL2p4Lnh1ZXR1aWd1YW5nLmNuL2ppZXhpLz91cmw9JyArIHZpcFVybDtcXFxcbiAgICAgICAgICAgIHZhciBwYXJzZSA9IHJlZjtcXFxcbiAgICAgICAgICAgIHZhciBhcGkgPSAnaHR0cHM6Ly9qeC54dWV0dWlndWFuZy5jbi9qaWV4aS9hcGl1X2Z4LnBocCc7XFxcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5QYW5HdSh2aXBVcmwsIFtyZWYsIHBhcnNlLCBhcGldKTtcXFxcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcXFxuICAgICAgICAgICAgcmV0dXJuICcnO1xcXFxuICAgICAgICB9XFxcXG4gICAgfSxcXFxcbn07XFxcXG5cXFxcbk9iamVjdC5hc3NpZ24oUGFyc2VTLCBvcmlnaW5hbFBhcnNlUywgTXlQYXJzZVMpO1xcXFxuLy/opobnm5bpobrluo/vvIznrKzkuInkuKropobnm5bnrKzkuozkuKrnhLblkI7opobnm5bnrKzkuIDkuKpcXFxcblxcXFxuXFxcXG5mdW5jdGlvbiBheXRtUGFyc2UodmlwVXJsKSB7XFxcXG4gICAgdGhpcy5yZXF1ZXN0ID0gZnVuY3Rpb24ocGFyYW0wLCBwYXJhbTEsIHBhcmFtMikge1xcXFxuICAgICAgICBwYXJhbTEgPSBwYXJhbTEgPT0gdW5kZWZpbmVkID8ge30gOiBwYXJhbTE7XFxcXG4gICAgICAgIHBhcmFtMS50aW1lb3V0ID0gMjUwMDtcXFxcbiAgICAgICAgcGFyYW0yID0gTVlfUlVMRTtcXFxcbiAgICAgICAgdmFyIHJldFN0ciA9IG1ldGhvZF9yZXF1ZXN0Lmludm9rZShqYXZhQ29udGV4dCwgcGFyYW0wLCBwYXJhbTEsIHBhcmFtMik7XFxcXG4gICAgICAgIHJldHVybiByZXRTdHIgPT0gbnVsbCA/IHJldFN0ciA6IHJldFN0ciArIFxcXFxcXFwiXFxcXFxcXCI7XFxcXG4gICAgfTtcXFxcbiAgICB0aGlzLmZldGNoID0gZnVuY3Rpb24ocGFyYW0wLCBwYXJhbTEsIHBhcmFtMikge1xcXFxuICAgICAgICBwYXJhbTEgPSBwYXJhbTEgPT0gdW5kZWZpbmVkID8ge30gOiBwYXJhbTE7XFxcXG4gICAgICAgIHBhcmFtMS5oZWFkZXJzID0gcGFyYW0xLmhlYWRlcnMgPT0gdW5kZWZpbmVkID8ge30gOiBwYXJhbTEuaGVhZGVycztcXFxcbiAgICAgICAgcGFyYW0xLmhlYWRlcnNbJ1VzZXItQWdlbnQnXSA9IFBDX1VBO1xcXFxuICAgICAgICBwYXJhbTEudGltZW91dCA9IDI1MDA7XFxcXG4gICAgICAgIHBhcmFtMiA9IE1ZX1JVTEU7XFxcXG4gICAgICAgIHZhciByZXRTdHIgPSBtZXRob2RfZmV0Y2guaW52b2tlKGphdmFDb250ZXh0LCBwYXJhbTAsIHBhcmFtMSwgcGFyYW0yKTtcXFxcbiAgICAgICAgcmV0dXJuIHJldFN0ciA9PSBudWxsID8gcmV0U3RyIDogcmV0U3RyICsgXFxcXFxcXCJcXFxcXFxcIjtcXFxcbiAgICB9O1xcXFxuICAgIHZhciBob3N0ID0gdmlwVXJsLm1hdGNoKC9cXFxcXFxcXC4oLio/KVxcXFxcXFxcLy8pO1xcXFxuICAgIGhvc3QgPSBob3N0ID09IG51bGwgPyBudWxsIDogaG9zdFsxXTtcXFxcbiAgICB2YXIgbm9VcmwgPSBcXFxcXFxcInRvYXN0Oi8v5o6l5pS25Yiw55qE6ZO+5o6l5Li6OiBcXFxcXFxcIjtcXFxcbiAgICBzd2l0Y2ggKG15U2V0LnFqdSkge1xcXFxuICAgICAgICBjYXNlIFxcXFxcXFwiXFxcXFxcXCI6XFxcXG4gICAgICAgIGNhc2UgXFxcXFxcXCLpu5jorqRcXFxcXFxcIjpcXFxcbiAgICAgICAgICAgIHN3aXRjaCAoaG9zdCkge1xcXFxuICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCJxcS5jb21cXFxcXFxcIjpcXFxcbiAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQudHg7XFxcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCJpcWl5aS5jb21cXFxcXFxcIjpcXFxcbiAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQucXk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCJ5b3VrdS5jb21cXFxcXFxcIjpcXFxcbiAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQueWs7XFxcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCJtZ3R2LmNvbVxcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5tZztcXFxcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcImJpbGliaWxpLmNvbVxcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5ibDtcXFxcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcXFxcbiAgICAgICAgICAgICAgICAgICAgc3RyID0gaG9zdCA9PSBudWxsID8gbm9VcmwgOiBteVNldC5vdGg7XFxcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgIGRlZmF1bHQ6XFxcXG4gICAgICAgICAgICBzdHIgPSBob3N0ID09IG51bGwgPyBub1VybCA6IG15U2V0LnFqdTtcXFxcbiAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgIH1cXFxcbiAgICBsZXQgbXlDaG9pY2UgPSBzdHIuc3BsaXQoJywnKTtcXFxcbiAgICBsZXQgbGVuID0gbXlDaG9pY2UubGVuZ3RoO1xcXFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcXFxcbiAgICAgICAgbGV0IG5hbWUgPSBteUNob2ljZVtpXTtcXFxcbiAgICAgICAgaWYgKHR5cGVvZiBQYXJzZVNbbmFtZV0gPT0gJ2Z1bmN0aW9uJykge1xcXFxuICAgICAgICAgICAgbGV0IHVybCA9IFBhcnNlU1tuYW1lXSh2aXBVcmwpO1xcXFxuICAgICAgICAgICAgaWYgKGkgIT0gbGVuIC0gMSAmJiAhL20zdTh8bXA0fGh0dHAvLnRlc3QodXJsKSkge1xcXFxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgaWYgKHVybFswXSA9PSAnLycpIHtcXFxcbiAgICAgICAgICAgICAgICB1cmwgPSAnaHR0cHM6JyArIHVybFxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgaWYgKHVybC5pbmRleE9mKCc9aHR0cCcpICE9IC0xKSB7XFxcXG4gICAgICAgICAgICAgICAgdXJsID0gdXJsLmluZGV4T2YoJyZ1cmw9JykgPiAtMSA/IHVybCA6ICdodHRwJyArIGRlY29kZVVSSUNvbXBvbmVudCh1cmwuc3BsaXQoJz1odHRwJylbMV0pO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgLyppZih1cmwubWF0Y2goL21ndHYuY29tL2cpPT0nbWd0di5jb20nKXtcXFxcbiAgICAgICAgICAgICAgICB1cmwgPSB1cmwgKyAnO3tSZWZlcmVyQGh0dHBzOi8vd3d3Lm1ndHYuY29tfSc7XFxcXG4gICAgICAgICAgICB9IGVsc2UgKi9cXFxcbiAgICAgICAgICAgIGlmICh1cmwuaW5kZXhPZignLmZsdicpICE9IC0xKSB7XFxcXG4gICAgICAgICAgICAgICAgdXJsID0gdXJsICsgJzt7VXNlci1BZ2VudEBhcHAmJlJlZmVyZXJAJyArIHZpcFVybCArICd9JztcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIGlmICh1cmwgPT0gJycgfHwgdXJsID09IHZpcFVybCkge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiB2aXBVcmw7XFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiB1cmwgKyAnI2lzVmlkZW89dHJ1ZSMnO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBQYXJzZVNbbmFtZV0gPT0gJ3N0cmluZycpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiBQYXJzZVMuZGVmYXVsdFBhcnNlKFBhcnNlU1tuYW1lXSArIHZpcFVybCk7XFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gbmFtZS5zdWJzdHIoMCwgNCkgPT0gXFxcXFxcXCJodHRwXFxcXFxcXCIgfHwgaG9zdCA9PSBudWxsID8gbmFtZSArIHZpcFVybCA6IFxcXFxcXFwidG9hc3Q6Ly9cXFxcXFxcIiArIG5hbWUgKyBcXFxcXFxcIiDkuI3mmK/nm7Tpk77kuZ/kuI3mmK/lhY3ll4VcXFxcXFxcIjtcXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcbn07XFxcXG5cXFxcbnZhciBwbGF5UGFyc2UgPSB7XFxcXG4gICAgcGxheWVyX3h4OiBmdW5jdGlvbihqdXJsLCBMYWJlbCkge1xcXFxuICAgICAgICByZXR1cm4gJChqdXJsKS5sYXp5UnVsZSgoaykgPT4ge1xcXFxuICAgICAgICAgICAgdmFyIGpzVXJsID0gSlNPTi5wYXJzZShmZXRjaChnZXRWYXIoJ29sZENvbmZpZycpKSkuY2o7XFxcXG4gICAgICAgICAgICB2YXIgTGFiZWwgPSBrO1xcXFxuICAgICAgICAgICAgdmFyIGZhID0gWydsZXR2JywgJ3BwdHYnLCAncXEnLCAneW91a3UnLCAncWl5aScsICdpcWl5aScsICdtZ3R2JywgJ2JpbGliaWxpJywgJ3NvaHUnLCAnbWlndScsICdtMTkwNScsICd2aXAnXTtcXFxcbiAgICAgICAgICAgIHZhciBodG1sID0gcGFyc2VEb20ocmVxdWVzdChpbnB1dCksIExhYmVsKTtcXFxcbiAgICAgICAgICAgIGV2YWwoaHRtbC5yZXBsYWNlKC9wbGF5ZXJfLio/PXsvLCAncGRhdGE9eycpKTtcXFxcbiAgICAgICAgICAgIGV2YWwoZmV0Y2goanNVcmwpKTtcXFxcbiAgICAgICAgICAgIGlmIChwZGF0YS51cmwuc3Vic3RyKDAsIDgpLm1hdGNoKC9KVC4uSlQuLi8pKSB7XFxcXG4gICAgICAgICAgICAgICAgcGRhdGEudXJsID0gYmFzZTY0RGVjb2RlKHBkYXRhLnVybCk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBpZiAocGRhdGEudXJsLnN1YnN0cigwLCA4KS5tYXRjaCgvJS4uJS4uLykpIHtcXFxcbiAgICAgICAgICAgICAgICBwZGF0YS51cmwgPSB1bmVzY2FwZShwZGF0YS51cmwpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgaWYgKGZhLmluY2x1ZGVzKHBkYXRhLmZyb20pID09IHRydWUpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gYXl0bVBhcnNlKHBkYXRhLnVybCk7XFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBwZGF0YS51cmwgKyAnI2lzVmlkZW89dHJ1ZSMnO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9LCBMYWJlbClcXFxcbiAgICB9XFxcXG59O1xcXFxuXFxcXG5mdW5jdGlvbiBzZXRQYXJzZSgpIHtcXFxcbiAgICAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/XFxcXFxcXCIpLnNldFBhcnNlKCk7XFxcXG59XFxcXG5cXFxcbmZ1bmN0aW9uIG16UG9wdXAoKSB7XFxcXG4gICAgaWYgKGdldFZhcihcXFxcXFxcImlqay10eFxcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKSA9PSBcXFxcXFxcIjFcXFxcXFxcIikge1xcXFxuICAgICAgICBzZXRJdGVtKFxcXFxcXFwidGl4aW5nXFxcXFxcXCIsIFxcXFxcXFwiMVxcXFxcXFwiKVxcXFxuICAgICAgICBjbGVhclZhcihcXFxcXFxcImlqay10eFxcXFxcXFwiKVxcXFxuICAgIH1cXFxcbiAgICByZXR1cm4gY29uZmlybSh7XFxcXG4gICAgICAgIHRpdGxlOiAn5YWN6LSj5aOw5piOJyxcXFxcbiAgICAgICAgY29udGVudDogJ+acrOeoi+W6j+S4jeaPkOS+m+inhumikeino+aekOacjeWKoVxcXFxcXFxcbuaJgOacieWGheWuueWdh+S7jueUqOaIt+WIhuS6q+S4reaUtumbhlxcXFxcXFxcbuS7heS+m+a1i+ivleWSjOWtpuS5oOS6pOa1gVxcXFxcXFxcblxcXFxcXFxcbuehruWumuWNs+iupOWPr++8jOS4jeWGjeaPkOmGkicsXFxcXG4gICAgICAgIGNvbmZpcm06ICQudG9TdHJpbmcoKCkgPT4ge1xcXFxuICAgICAgICAgICAgcHV0VmFyKFxcXFxcXFwiaWprLXR4XFxcXFxcXCIsIFxcXFxcXFwiMVxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5oKo54K55Ye75LqG56Gu6K6kXFxcXFxcXCJcXFxcbiAgICAgICAgfSlcXFxcbiAgICB9KVxcXFxufVxcXFxuaWYgKGdldEl0ZW0oXFxcXFxcXCJ0aXhpbmdcXFxcXFxcIiwgXFxcXFxcXCJcXFxcXFxcIikgPT0gXFxcXFxcXCJcXFxcXFxcIikge1xcXFxuICAgIG16UG9wdXAoKTtcXFxcbn1cXFxcblxcXFxuLy89PT09PT09PT09Peino+aekOS7o+eggee7k+adnz09PT09PT09PT09XFxcXG5cXFxcbmZ1bmN0aW9uIHNhdmVCdXR0b24oY29udGVudCkge1xcXFxuICAgIHZhciBkYXRhID0gY29udGVudC5zcGxpdCgn4piF4piF4piFJyk7XFxcXG4gICAgaWYgKGRhdGEubGVuZ3RoID09IDIpIHtcXFxcbiAgICAgICAgdmFyIF9kdCA9IHBhcnNlUGFzdGUoZGF0YVswXSk7XFxcXG4gICAgICAgIGNvbnRlbnQgPSBfZHQuc3Vic3RyKDAsIDYpICE9ICdlcnJvcjonID8gX2R0IDogJyc7XFxcXG4gICAgfVxcXFxuICAgIGRhdGEgPSBjb250ZW50LnNwbGl0KCfimIUnKTtcXFxcbiAgICB2YXIgdHlwZSA9IGRhdGFbMF07XFxcXG4gICAgdmFyIGFyckxpc3QgPSBbXTtcXFxcbiAgICB2YXIgb2JqQ29kZSA9IHt9O1xcXFxuICAgIGlmIChkYXRhLmxlbmd0aCA+IDIgJiYgZGF0YVswXSAhPSAn55u06ZO+Jykge1xcXFxuICAgICAgICB2YXIgb2JqS2V5ID0gZGF0YVsxXTtcXFxcbiAgICAgICAgdmFyIG9ialZhbHVlID0gZGF0YVsyXTtcXFxcbiAgICAgICAgaWYgKHR5cGUgPT0gJ015UGFyc2VTJykge1xcXFxuICAgICAgICAgICAgb2JqVmFsdWUgPSBiYXNlNjREZWNvZGUob2JqVmFsdWUpO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGlmIChvYmpWYWx1ZS5zcGxpdCgnZnVuY3Rpb24nKS5sZW5ndGggPiAxKSB7XFxcXG4gICAgICAgICAgICBldmFsKCdvYmpWYWx1ZT0nICsgb2JqVmFsdWUpO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGFyckxpc3Quc3BsaWNlKDAsIDAsIG9iaktleSk7XFxcXG4gICAgICAgIG9iakNvZGVbb2JqS2V5XSA9IG9ialZhbHVlO1xcXFxuXFxcXG4gICAgfSBlbHNlIGlmICh0eXBlID09ICfnm7Tpk74nKSB7XFxcXG4gICAgICAgIGFyckxpc3QgPSBkYXRhO1xcXFxuICAgICAgICBhcnJMaXN0LnNwbGljZSgwLCAxKTtcXFxcbiAgICB9IGVsc2Uge1xcXFxuICAgICAgICBhcnJMaXN0ID0gbnVsbDtcXFxcbiAgICB9XFxcXG4gICAgaWYgKGFyckxpc3QgIT0gbnVsbCkge1xcXFxuICAgICAgICB2YXIgcGFyc2VSb3V0ZSA9IGdldFZhcigncGFyc2VSb3V0ZScpO1xcXFxuICAgICAgICBldmFsKCd2YXIganNvbiA9JyArIGZldGNoKHBhcnNlUm91dGUpKTtcXFxcbiAgICAgICAgYXJyTGlzdCA9IGFyckxpc3QuY29uY2F0KGpzb24udGl0bGUpO1xcXFxuICAgICAgICBqc29uLnRpdGxlID0gQXJyYXkuZnJvbShuZXcgU2V0KGFyckxpc3QpKTtcXFxcbiAgICAgICAgT2JqZWN0LmFzc2lnbihqc29uLmNvZGVzLCBvYmpDb2RlKTtcXFxcbiAgICAgICAgaWYgKHR5cGUgPT0gJ+a1i+ivlScpIHtcXFxcbiAgICAgICAgICAgIGV2YWwoJ3ZhciBjb25maWcgPScgKyBmZXRjaChnZXRWYXIoJ29sZENvbmZpZycpKSk7XFxcXG4gICAgICAgICAgICBldmFsKGZldGNoKGNvbmZpZy5jaikpO1xcXFxuICAgICAgICAgICAgaWYgKHR5cGVvZiBQYXJzZVNbZGF0YVsxXV0gPT0gXFxcXFxcXCJmdW5jdGlvblxcXFxcXFwiKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFBhcnNlU1tkYXRhWzFdXShkYXRhWzJdKTtcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFBhcnNlUy5kZWZhdWx0UGFyc2UoUGFyc2VTW2RhdGFbMV1dICsgZGF0YVsyXSk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICB3cml0ZUZpbGUocGFyc2VSb3V0ZSwgJC5zdHJpbmdpZnkoanNvbikpO1xcXFxuICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/lt7Lkv53lrZjlhoXlrrlcXFxcXFxcIjtcXFxcbiAgICAgICAgfVxcXFxuICAgIH0gZWxzZSB7XFxcXG4gICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5peg5rOV6K+G5Yir6L+Z5Liq5YaF5a655ZGiXFxcXFxcXCJcXFxcbiAgICB9XFxcXG59XFxcXG5cXFxcbmlmIChnZXRJdGVtKCd1cGRhdGVEYXRlJykgIT0gdXBkYXRlRGF0ZSkge1xcXFxuICAgIHZhciBmdW5jdGlvbkNvZGUgPSBzYXZlQnV0dG9uICsgJyc7XFxcXG4gICAgd3JpdGVGaWxlKCdoaWtlcjovL2ZpbGVzL2NhY2hlL3Bsc2NQYXJzZS5odG1sJywgZmV0Y2goX215U2V0LmNrTGluayArICdwbHNjUGFyc2UuaHRtbCcpKTtcXFxcbiAgICBzZXRJdGVtKCdteUZ1bmN0aW9uJywgZnVuY3Rpb25Db2RlKTtcXFxcbiAgICBzZXRJdGVtKCd1cGRhdGVEYXRlJywgdXBkYXRlRGF0ZSk7XFxcXG59XFxcXG52YXIgYmpJdGVtID0ge1xcXFxuICAgIGhmUGx1Z2luOiBmdW5jdGlvbihwYXJzZVJvdXRlKSB7XFxcXG4gICAgICAgIHJldHVybiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChrKSA9PiB7XFxcXG4gICAgICAgICAgICBpZiAoZmlsZUV4aXN0KGspID09IHRydWUpIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgY2pjYWNoZSA9IGdldFZhcignY2pDYWNoZScpO1xcXFxuICAgICAgICAgICAgICAgIGV2YWwoJ3ZhciBqc29uID0nICsgZmV0Y2goaykpO1xcXFxuICAgICAgICAgICAgICAgIGpzb24uc2V0dGluZ3MuY2ogPSBjamNhY2hlO1xcXFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShrLCAkLnN0cmluZ2lmeShqc29uKSk7XFxcXG4gICAgICAgICAgICAgICAgdmFyIG9sZFJvdXRlID0gZ2V0VmFyKCdvbGRDb25maWcnKTtcXFxcbiAgICAgICAgICAgICAgICB2YXIgb2xkQ29uZmlnID0ganNvbi5zZXR0aW5ncztcXFxcbiAgICAgICAgICAgICAgICBvbGRDb25maWcuY2ogPSBjamNhY2hlO1xcXFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShvbGRSb3V0ZSwgJC5zdHJpbmdpZnkob2xkQ29uZmlnKSk7XFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mgaLlpI3miJDlip8nO1xcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6ZyA6KaB5YWI5ouJ5Y+W5YiX6KGoJ1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9LCBwYXJzZVJvdXRlKVxcXFxuICAgIH0sXFxcXG4gICAgcHVsbENvZGU6IGZ1bmN0aW9uKGspIHtcXFxcbiAgICAgICAgcmV0dXJuICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGspID0+IHtcXFxcbiAgICAgICAgICAgIHZhciBwdWxsTW9kZSA9IGtbMF07XFxcXG4gICAgICAgICAgICB2YXIgcGFyc2VSb3V0ZSA9IGtbMV07XFxcXG4gICAgICAgICAgICB2YXIgcGFyc2VGaWxlID0gZmV0Y2gocGFyc2VSb3V0ZSk7XFxcXG4gICAgICAgICAgICBpZiAoIXBhcnNlRmlsZSkge1xcXFxuICAgICAgICAgICAgICAgIHZhciBzZXR0aW5ncyA9IGZldGNoKGdldFZhcignb2xkQ29uZmlnJykpO1xcXFxuICAgICAgICAgICAgICAgIHNldHRpbmdzID0gc2V0dGluZ3MgPT0gJycgPyB7fSA6IEpTT04ucGFyc2Uoc2V0dGluZ3MpO1xcXFxuICAgICAgICAgICAgICAgIHZhciBqc29uID0ge307XFxcXG4gICAgICAgICAgICAgICAganNvbi5zZXR0aW5ncyA9IHNldHRpbmdzO1xcXFxuICAgICAgICAgICAgICAgIGpzb24udGl0bGUgPSBbXTtcXFxcbiAgICAgICAgICAgICAgICBqc29uLmNvZGVzID0ge307XFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgIGV2YWwoJ3ZhciBqc29uID0nICsgcGFyc2VGaWxlKTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIHZhciB0aXNoaSA9ICd0b2FzdDovL+aKseatiSHml6Dms5Xor4bliKvov5nkuKrlhoXlrrnlkaLila/vuY/ilbAnO1xcXFxuICAgICAgICAgICAgdmFyIGNqTGluayA9IGdldFZhcigncGx1Z2luTGluaycpO1xcXFxuICAgICAgICAgICAgdmFyIENvbnRlbnRzID0gY2pMaW5rID09ICdR56WeJyA/IHB1bGxNb2RlICsgJ+KYhScgKyBmZXRjaCgnaGlrZXI6Ly9maWxlcy9qaWV4aS9qaWV4aS50eHQnKSA6IGNqTGluaztcXFxcbiAgICAgICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICAgICAgdmFyIHlQYXN0ZSA9IHBhcnNlUGFzdGUoQ29udGVudHMpLnNwbGl0KCdAYmFzZTY0Oi8vJyk7XFxcXG4gICAgICAgICAgICAgICAgaWYgKHlQYXN0ZS5sZW5ndGggPT0gMikge1xcXFxuICAgICAgICAgICAgICAgICAgICBDb250ZW50cyA9IGJhc2U2NERlY29kZSh5UGFzdGVbMV0pO1xcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2pMaW5rLnN1YnN0cigwLCA1KSA9PSAnaGlrZXInIHx8IGNqTGluay5zdWJzdHIoMCwgNCkgPT0gJ2h0dHAnKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIENvbnRlbnRzID0gZmV0Y2goY2pMaW5rKTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgdmFyIGpjS0wgPSBDb250ZW50cy5zcGxpdCgn4piFJyk7XFxcXG4gICAgICAgICAgICAgICAgdmFyIGlzS0wgPSBqY0tMWzBdO1xcXFxuICAgICAgICAgICAgICAgIGlmIChqY0tMLmxlbmd0aCA9PSAyKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGlzS0wgPSBpc0tMID09ICcnID8gcHVsbE1vZGUgOiBpc0tMO1xcXFxuICAgICAgICAgICAgICAgICAgICBDb250ZW50cyA9IGpjS0xbMV0uc3BsaXQoJ1xcXFxcXFxcbicpO1xcXFxuICAgICAgICAgICAgICAgICAgICBpZiAoQ29udGVudHNbMF0gPT0gJycpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRzLnNwbGljZSgwLCAxKVxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIHZhciBhZGRUaXRsZSA9IFtdLFxcXFxuICAgICAgICAgICAgICAgICAgICBhZGRDb2RlID0ge307XFxcXG4gICAgICAgICAgICAgICAgaWYgKCgnJyArIENvbnRlbnRzWzBdKS5zcGxpdCgnJiYnKS5sZW5ndGggPT0gMikge1xcXFxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IENvbnRlbnRzLmxlbmd0aDsgaSsrKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXJyID0gQ29udGVudHNbaV0uc3BsaXQoJyYmJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSBhcnJbMF0gKyAnKHg1KScsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gYXJyWzFdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHB1bGxNb2RlID09ICflhY3ll4UnKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkVGl0bGUucHVzaCh0aXRsZSlcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRDb2RlW3RpdGxlXSA9IHVybDtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkVGl0bGUucHVzaCh1cmwpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc0tMID09ICfnm7Tpk74nICYmIHB1bGxNb2RlID09ICfnm7Tpk74nKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGFkZFRpdGxlID0gQ29udGVudHM7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIGlmIChhZGRUaXRsZVswXSA9PSB1bmRlZmluZWQpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgZXZhbChDb250ZW50cyk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb3JpZ2luYWxQYXJzZVMgPT0gJ29iamVjdCcpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZENvZGUgPSBvcmlnaW5hbFBhcnNlUztcXFxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZENvZGUgPSBQYXJzZVM7XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNjT2JqZWN0ID0gW1xcXFxcXFwicGFyc2VMY1xcXFxcXFwiLCBcXFxcXFxcImdwYXJzZVxcXFxcXFwiLCBcXFxcXFxcIm5wYXJzZVxcXFxcXFwiLCBcXFxcXFxcIk1hb+WFqOe9kVxcXFxcXFwiLCBcXFxcXFxcImRzOTczXFxcXFxcXCIsIFxcXFxcXFwicGFyd2l4XFxcXFxcXCIsIFxcXFxcXFwiT0pCS1xcXFxcXFwiLCBcXFxcXFxcIjkx6Kej5p6QXFxcXFxcXCIsIFxcXFxcXFwi5Lq65Lq66L+3XFxcXFxcXCIsIFxcXFxcXFwi5rGf5rmWXFxcXFxcXCIsIFxcXFxcXFwi5LmF5pKtXFxcXFxcXCIsIFxcXFxcXFwi6aqa54GrXFxcXFxcXCIsIFxcXFxcXFwiTEvop6PmnpBcXFxcXFxcIiwgXFxcXFxcXCLlsI/ni7zkupFcXFxcXFxcIiwgXFxcXFxcXCLkuZ3lhavnnItcXFxcXFxcIiwgXFxcXFxcXCLmgJ3kupHop6PmnpBcXFxcXFxcIiwgXFxcXFxcXCJDaXR5SVBcXFxcXFxcIiwgXFxcXFxcXCJwY1VBXFxcXFxcXCIsIFxcXFxcXFwiY2FjaGVNM3U4XFxcXFxcXCIsIFxcXFxcXFwiZGVmYXVsdFBhcnNlXFxcXFxcXCIsIFxcXFxcXFwibWFvc3NcXFxcXFxcIiwgXFxcXFxcXCJMTFFcXFxcXFxcIl07XFxcXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2NPYmplY3QubGVuZ3RoOyBpKyspIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBhZGRDb2RlW3NjT2JqZWN0W2ldXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHBhcnNlVGl0bGUgPT0gJ29iamVjdCcpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRpdGxlID0gcGFyc2VUaXRsZTtcXFxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRpdGxlID0gT2JqZWN0LmtleXMoYWRkQ29kZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgdmFyIG9sZFNMID0ganNvbi50aXRsZS5sZW5ndGg7XFxcXG4gICAgICAgICAgICAgICAgdmFyIG5ld1RpdGxlID0ganNvbi50aXRsZS5jb25jYXQoYWRkVGl0bGUpO1xcXFxuICAgICAgICAgICAgICAgIGpzb24udGl0bGUgPSBBcnJheS5mcm9tKG5ldyBTZXQobmV3VGl0bGUpKTtcXFxcbiAgICAgICAgICAgICAgICBpZiAocHVsbE1vZGUgPT0gJ+WFjeWXhScpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihqc29uLmNvZGVzLCBhZGRDb2RlKTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgdmFyIG5ld1NMID0ganNvbi50aXRsZS5sZW5ndGggLSBvbGRTTDtcXFxcbiAgICAgICAgICAgICAgICB2YXIgY292ZXJTTCA9IG5ld1RpdGxlLmxlbmd0aCAtIGpzb24udGl0bGUubGVuZ3RoO1xcXFxuICAgICAgICAgICAgICAgIGNvdmVyU0wgPSBjb3ZlclNMID09IDAgPyAnJyA6ICcsIOimhuebluS6hicgKyBjb3ZlclNMICsgJ+S4qic7XFxcXG4gICAgICAgICAgICAgICAgLy92YXIgbmV3RmlsZSA9IHRvb2xzLnRvSlNPTihqc29uKTsvL+iHquWumuS5iXN0cmluZ2lmeeWHveaVsO+8jOW4puaciei9rOS5ieWtl+esplxcXFxuICAgICAgICAgICAgICAgIHZhciBuZXdGaWxlID0gJC5zdHJpbmdpZnkoanNvbik7IC8vSlNPTi5wYXJzZeS8muaKpemUmVxcXFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShwYXJzZVJvdXRlLCBuZXdGaWxlKTtcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aAu+WFseWvvOWFpeS6hicgKyBuZXdTTCArICfkuKonICsgcHVsbE1vZGUgKyAn6Kej5p6QJyArIGNvdmVyU0w7XFxcXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRpc2hpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9LCBbaywgX215U2V0LnBhcnNlUm91dGVdKVxcXFxuICAgIH0sXFxcXG4gICAgcHVsbFNjcmlwdDogZnVuY3Rpb24oY2osIHg1KSB7XFxcXG4gICAgICAgIHJldHVybiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChrKSA9PiB7XFxcXG4gICAgICAgICAgICB2YXIgY2pGcm9tID0gJ2hpa2VyOi8vcGFnZS9QYXJzZV9Ebi5qcz9ydWxlPU15RmllbGThtLDigb8nO1xcXFxuICAgICAgICAgICAgdmFyIHg1RnJvbSA9ICdoaWtlcjovL3BhZ2UvUGFyc2VfRG4uaHRtbD9ydWxlPU15RmllbGThtLDigb8nO1xcXFxuICAgICAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgY2pGaWxlID0gSlNPTi5wYXJzZShmZXRjaChjakZyb20pKS5ydWxlO1xcXFxuICAgICAgICAgICAgICAgIGNqRmlsZSA9IGNqRmlsZS5zcGxpdCgn6Kej5p6Q5Luj56CB57uT5p2fJylbMF07XFxcXG4gICAgICAgICAgICAgICAgdmFyIHg1RmlsZSA9IEpTT04ucGFyc2UoZmV0Y2goeDVGcm9tKSkucnVsZTtcXFxcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUoa1swXSwgY2pGaWxlKTtcXFxcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUoa1sxXSwgeDVGaWxlKTtcXFxcbiAgICAgICAgICAgICAgICBjbGVhclZhcignanhPbGRWJyk7XFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mm7TmlrDmiJDlip8nO1xcXFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mnKrmiJDlip/ojrflj5blhoXlrrknO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9LCBbY2osIHg1XSlcXFxcbiAgICB9LFxcXFxuICAgIHhsU2VsZWN0OiBmdW5jdGlvbihiaWFuamksIGxiTGVuZ3RoKSB7XFxcXG4gICAgICAgIHJldHVybiBcXFxcXFxcInNlbGVjdDovL1xcXFxcXFwiICsgSlNPTi5zdHJpbmdpZnkoe1xcXFxuICAgICAgICAgICAgb3B0aW9uczogWyfigJjigJjigJnigJk8c3BhbiBzdHlsZT1cXFxcXFxcImNvbG9yOnJlZFxcXFxcXFwiIHRpdGxlPVxcXFxcXFwi5Yig6ZmkfHwnICsgYmlhbmppICsgJ1xcXFxcXFwiPuWIoCDpmaQnLCAn4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjojRjU3NDc0XFxcXFxcXCIgdGl0bGU9XFxcXFxcXCLpmpDol498fCcgKyBiaWFuamkgKyAnXFxcXFxcXCI+6ZqQIOiXjycsICfigJjigJjigJnigJk8c3BhbiBzdHlsZT1cXFxcXFxcImNvbG9yOiNGRjgwMDBcXFxcXFxcIiB0aXRsZT1cXFxcXFxcIuS/ruaUuXx8JyArIGJpYW5qaSArICdcXFxcXFxcIj7kv64g5pS5JywgJ+KAmOKAmOKAmeKAmTxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6IzA5OEFDMVxcXFxcXFwiIHRpdGxlPVxcXFxcXFwi572u6aG2fHwnICsgYmlhbmppICsgJzAnICsgJ1xcXFxcXFwiPue9riDpobYnLCAn4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjojMDk4QUMxXFxcXFxcXCIgdGl0bGU9XFxcXFxcXCLnp7vliqh8fCcgKyBiaWFuamkgKyAnXFxcXFxcXCI+56e7IOWKqCcsICfigJjigJjigJnigJk8c3BhbiBzdHlsZT1cXFxcXFxcImNvbG9yOiMwOThBQzFcXFxcXFxcIiB0aXRsZT1cXFxcXFxcIue9ruW6lXx8JyArIGJpYW5qaSArIGxiTGVuZ3RoICsgJ1xcXFxcXFwiPue9riDlupUnLCAn4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjojMDRCNDMxXFxcXFxcXCIgdGl0bGU9XFxcXFxcXCLliIbkuqt8fCcgKyBiaWFuamkgKyAnXFxcXFxcXCI+5Zyw5p2/5YiG5LqrJywgJ+KAmOKAmOKAmeKAmTxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6IzA0QjQzMVxcXFxcXFwiIHRpdGxlPVxcXFxcXFwi5LqR5YiG5LqrfHwnICsgYmlhbmppICsgJ1xcXFxcXFwiPuS6keadv+WIhuS6qyddLFxcXFxuICAgICAgICAgICAgY29sOiAnMicsXFxcXG4gICAgICAgICAgICBqczogJC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgdmFyIHBhcnNlUm91dGUgPSBnZXRWYXIoJ3BhcnNlUm91dGUnKTtcXFxcbiAgICAgICAgICAgICAgICBldmFsKCd2YXIganNvbiA9JyArIGZldGNoKHBhcnNlUm91dGUpKTtcXFxcbiAgICAgICAgICAgICAgICB2YXIgbmV3SW5wdXQgPSBwYXJzZURvbUZvckh0bWwoaW5wdXQsICdzcGFuJiZ0aXRsZScpLnNwbGl0KCd8fCcpO1xcXFxuICAgICAgICAgICAgICAgIHZhciB0eXBlID0gbmV3SW5wdXRbMF07XFxcXG4gICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBuZXdJbnB1dFsxXTtcXFxcbiAgICAgICAgICAgICAgICB2YXIgbnVtID0gbmV3SW5wdXRbMl07XFxcXG4gICAgICAgICAgICAgICAgdmFyIG51bTIgPSBuZXdJbnB1dFszXTtcXFxcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcIuWIoOmZpFxcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcXFxcXCLljbPlsIbliKDpmaQ6IFxcXFxcXFwiICsgbmFtZSkuY29uZmlybSgoaykgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0ga1swXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnVtID0ga1sxXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyc2VSb3V0ZSA9IGdldFZhcigncGFyc2VSb3V0ZScpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoJ3ZhciBqc29uID0nICsgZmV0Y2gocGFyc2VSb3V0ZSkpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqc29uLmNvZGVzLmhhc093blByb3BlcnR5KG5hbWUpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBqc29uLmNvZGVzW25hbWVdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uLnRpdGxlLnNwbGljZShudW0sIDEpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShwYXJzZVJvdXRlLCAkLnN0cmluZ2lmeShqc29uKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5bey5bCG44CWXFxcXFxcXCIgKyBuYW1lICsgXFxcXFxcXCLjgJfliKDpmaRcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIFtuYW1lLCBudW1dKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFwi6ZqQ6JePXFxcXFxcXCI6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFxcXFxcImhpa2VyOi8vZW1wdHkjbm9Mb2FkaW5nI1xcXFxcXFwiKS5sYXp5UnVsZSgoaykgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0ga1swXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnVtID0ga1sxXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyc2VSb3V0ZSA9IGdldFZhcigncGFyc2VSb3V0ZScpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoJ3ZhciBqc29uID0nICsgZmV0Y2gocGFyc2VSb3V0ZSkpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqc29uLmNvZGVzLmhhc093blByb3BlcnR5KG5hbWUpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24udGl0bGUuc3BsaWNlKG51bSwgMSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShwYXJzZVJvdXRlLCAkLnN0cmluZ2lmeShqc29uKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/lt7LlsIbjgJZcXFxcXFxcIiArIG5hbWUgKyBcXFxcXFxcIuOAl+makOiXj1xcXFxcXFwiO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5Y+v6IO95piv5Liq572R5Z2ALCDmgqjlj6/pgInmi6nliKDpmaRcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBbbmFtZSwgbnVtXSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcIuS/ruaUuVxcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgLy9pZiAoanNvbi5jb2Rlc1tuYW1lXSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5Db2RlID0gbmFtZTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuTmFtZSA9IFxcXFxcXFwi6L+Z5piv5ZCN56ewXFxcXFxcXCI7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoanNvbi5jb2Rlc1tuYW1lXSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5Db2RlID0ganNvbi5jb2Rlc1tuYW1lXS50b1N0cmluZygpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5OYW1lID0gbmFtZTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFxcXFxcXFwiaGlrZXI6Ly9lbXB0eSNub1JlY29yZEhpc3RvcnkjXFxcXFxcXCIpLnJ1bGUoKGspID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZCA9IFtdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoZ2V0SXRlbSgnbXlGdW5jdGlvbicpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IGtbMF07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGUgPSBrWzFdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn5L+dIOWtmCcsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogc2F2ZUJ1dHRvbiArIFxcXFxcXFwic2F2ZUJ1dHRvbihnZXRWYXIoJ2lucHV0X2VkaXQnKSk7YmFjaygpO1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJpbnB1dFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFxcXFxcIuW7uuiuruaMiem7mOiupOeahOS7o+eggeagvOW8j+S/ruaUueWTplxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6IFxcXFxcXFwicHV0VmFyKCdpbnB1dF9lZGl0JywgaW5wdXQpXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcXFxcXFxcInRleHRhcmVhXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IFxcXFxcXFwiLTFcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlVmlzaWJsZTogZmFsc2UsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6ICfkv67mlLnimIUnICsgbmFtZSArICfimIUnICsgY29kZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPHNtYWxsPjxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6IzZFQjg5N1xcXFxcXFwiPuagvOW8j+S4uu+8muaTjeS9nOexu+Wei+KYheagh+mimOKYhWZ1bmN0aW9uKCl76Ieq5a6a5LmJ5YaF5a65fTxicj7or7fli7/loavlhaXlhbbku5bmoLzlvI8nLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHNhdmVCdXR0b24pID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVCdXR0b24oZ2V0VmFyKCdpbnB1dF9lZGl0JykpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFjaygpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suS/neWtmOS/ruaUuSc7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHNhdmVCdXR0b24pLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiAn4oCY4oCY4oCZ4oCZPGJpZz48YmlnPjxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6IzI5OEEwOFxcXFxcXFwiPuS/nSDlrZgnLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0UmVzdWx0KGQpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgW25OYW1lLCBuQ29kZV0pIC8vW25hbWUsIGpzb24uY29kZXNbbmFtZV0udG9TdHJpbmcoKV0pXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAvKn0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/lj6rmnInnvZHlnYDmiJbogIXmoIfpopgsIOS4jeaUr+aMgeS/ruaUuVxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9Ki9cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFwi572u6aG2XFxcXFxcXCI6XFxcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCLnva7lupVcXFxcXFxcIjpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVtID0ganNvbi50aXRsZS5zcGxpY2UobnVtLCAxKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzb24udGl0bGUuc3BsaWNlKG51bTIsIDAsIGl0ZW1bMF0pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKHBhcnNlUm91dGUsICQuc3RyaW5naWZ5KGpzb24pKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFwi56e75YqoXFxcXFxcXCI6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCgnaGlrZXI6Ly9lbXB0eSNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGspID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRWYXIoJ2JpYW5qaScsICfnp7vliqgjJyArIGspO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXQ7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBudW0pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCLliIbkuqtcXFxcXFxcIjpcXFxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcIuS6keWIhuS6q1xcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24uY29kZXNbbmFtZV0pIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyc2VUZXh0ID0gdHlwZW9mIGpzb24uY29kZXNbbmFtZV0gPT0gJ2Z1bmN0aW9uJyA/ICQuc3RyaW5naWZ5KGpzb24uY29kZXNbbmFtZV0pIDoganNvbi5jb2Rlc1tuYW1lXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVRleHQgPSAnTXlQYXJzZVPimIUnICsgbmFtZSArICfimIUnICsgYmFzZTY0RW5jb2RlKHBhcnNlVGV4dCk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJzZVRleHQgPSAn55u06ZO+4piFJyArIGpzb24udGl0bGVbbnVtXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlID09ICfkupHliIbkuqsnICYmIHBhcnNlVGV4dC5zdWJzdHIoMCwgOCkgPT0gJ015UGFyc2VTJykge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlVGV4dCA9IHNoYXJlUGFzdGUocGFyc2VUZXh0KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VUZXh0LnN1YnN0cigwLCA2KSAhPSAnZXJyb3I6JyA/ICdjb3B5Oi8vJyArIHBhcnNlVGV4dCArICdcXFxcXFxcXG7imIXimIXimIVcXFxcXFxcXG4nICsgJ015UGFyc2VT77yaJyArIG5hbWUgOiAndG9hc3Q6Ly/liIbkuqvlpLHotKUhIeS6keWJqui0tOadv+WPr+iDveaMguS6hic7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnY29weTovLycgKyBwYXJzZVRleHQ7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pqC5LiN5pSv5oyBJztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgIH0gLy9zd2l0Y2jnmoRcXFxcbiAgICAgICAgICAgIH0pIC8vU3RyaW5n55qEXFxcXG4gICAgICAgIH0pIC8vc3RyaW5naWZ555qEXFxcXG4gICAgfSxcXFxcbiAgICB4alBhcnNlOiBmdW5jdGlvbigpIHtcXFxcbiAgICAgICAgcmV0dXJuICQoXFxcXFxcXCJoaWtlcjovL2VtcHR5I25vUmVjb3JkSGlzdG9yeSNcXFxcXFxcIikucnVsZSgoKSA9PiB7XFxcXG4gICAgICAgICAgICB2YXIgZCA9IFtdO1xcXFxuICAgICAgICAgICAgZXZhbChnZXRJdGVtKCdteUZ1bmN0aW9uJykpO1xcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+S/nSDlrZgnLFxcXFxuICAgICAgICAgICAgICAgIHVybDogc2F2ZUJ1dHRvbiArIFxcXFxcXFwic2F2ZUJ1dHRvbihpbnB1dCk7YmFjaygpO2NsZWFyVmFyKCdpbnB1dF9hZGQnKVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImlucHV0XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgZGVzYzogXFxcXFxcXCLovpPlhaXmraPnoa7moLzlvI/lhoXlrrlcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZTogJ3B1dFZhcihcXFxcXFxcImlucHV0X2FkZFxcXFxcXFwiLCBpbnB1dCknLFxcXFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcXFxcXFxcInRleHRhcmVhXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogXFxcXFxcXCItMVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZVZpc2libGU6IGZhbHNlLFxcXFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldFZhcignaW5wdXRfYWRkJyksXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPHNtYWxsPjxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6IzZFQjg5N1xcXFxcXFwiPuaMieaPj+i/sOivieagvOW8j+i+k+WFpSwg6K+35Yu/5aGr5YWl5YW25LuW5qC85byPPGJyPuacrOWcsOWPo+S7pDog5pON5L2c57G75Z6L4piF5ZCN56ew4piF5Luj56CBPGJyPuS6keWPo+S7pDog6ZO+5o6l4piF4piF4piF5ZCN56ewOyDnuq/nvZHlnYA6IOebtOmTvuKYhXVybDHimIV1cmwyJyxcXFxcbiAgICAgICAgICAgICAgICBkZXNjOiAn4oCY4oCY4oCZ4oCZPGJpZz48YmlnPjxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6IzI5OEEwOFxcXFxcXFwiPuS/nSDlrZgnLFxcXFxuICAgICAgICAgICAgICAgIHVybDogJCgnbm9Mb2FkaW5nJykubGF6eVJ1bGUoKHNhdmVCdXR0b24pID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNhdmVCdXR0b24oZ2V0VmFyKCdpbnB1dF9hZGQnKSk7XFxcXG4gICAgICAgICAgICAgICAgfSwgc2F2ZUJ1dHRvbiksXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICBzZXRSZXN1bHQoZCk7XFxcXG4gICAgICAgIH0pXFxcXG4gICAgfSxcXFxcbiAgICB5ZFBhcnNlOiBmdW5jdGlvbihCSm1vZGUsIGkpIHtcXFxcbiAgICAgICAgcmV0dXJuICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGspID0+IHtcXFxcbiAgICAgICAgICAgIHZhciBBID0ga1swXS5zcGxpdCgnIycpWzFdO1xcXFxuICAgICAgICAgICAgdmFyIEIgPSBrWzFdO1xcXFxuICAgICAgICAgICAgdmFyIHBhcnNlUm91dGUgPSBnZXRWYXIoJ3BhcnNlUm91dGUnKTtcXFxcbiAgICAgICAgICAgIGV2YWwoJ3ZhciBqc29uID0nICsgZmV0Y2gocGFyc2VSb3V0ZSkpO1xcXFxuICAgICAgICAgICAgdmFyIGl0ZW0gPSBqc29uLnRpdGxlLnNwbGljZShBLCAxKTsgLy8gMTog5qCH6K6w5byA5aeL5L2N572u77yMMjog5Yig6Zmk5Yiw5ZOq5Liq5L2N572uXFxcXG4gICAgICAgICAgICBqc29uLnRpdGxlLnNwbGljZShCLCAwLCBpdGVtWzBdKTsgLy8gMTog5ZCM5LiK77yMMjogMOihqOekuuS4jeWIoOmZpO+8jDM6IOa3u+WKoOWvueixoVxcXFxuICAgICAgICAgICAgd3JpdGVGaWxlKHBhcnNlUm91dGUsICQuc3RyaW5naWZ5KGpzb24pKTtcXFxcbiAgICAgICAgICAgIGNsZWFyVmFyKCdiaWFuamknKTtcXFxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXFxcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxcXG4gICAgICAgIH0sIFtCSm1vZGUsIGldKVxcXFxuICAgIH0sXFxcXG4gICAgcGxzY1BhcnNlOiBmdW5jdGlvbigpIHtcXFxcbiAgICAgICAgcmV0dXJuICQoJ2hpa2VyOi8vZW1wdHkjbm9SZWNvcmRIaXN0b3J5IycpLnJ1bGUoKCkgPT4ge1xcXFxuICAgICAgICAgICAgdmFyIGQgPSBbXTtcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfmibnph4/liKDpmaTop6PmnpAnLFxcXFxuICAgICAgICAgICAgICAgIGRlc2M6ICdhdXRvJiZmbG9hdCcsXFxcXG4gICAgICAgICAgICAgICAgdXJsOiAnZmlsZTovLy9zdG9yYWdlL2VtdWxhdGVkLzAvQW5kcm9pZC9kYXRhL2NvbS5leGFtcGxlLmhpa2Vydmlldy9maWxlcy9Eb2N1bWVudHMvY2FjaGUvcGxzY1BhcnNlLmh0bWwnLFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAneDVfd2Vidmlld19zaW5nbGUnXFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgc2V0UmVzdWx0KGQpO1xcXFxuICAgICAgICB9KVxcXFxuICAgIH1cXFxcbn07XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi6LCD55So6Lev55SxXFxcIixcXFwicGF0aFxcXCI6XFxcIlJvdXRlXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxuY29uc3QgZCA9IFtdO1xcXFxuY29uc3QgZGF0YSA9IHt9O1xcXFxuXFxcXG5pZiAoIWdldFZhcignanhPbGRWJykpIHtcXFxcbiAgICBldmFsKEpTT04ucGFyc2UoZmV0Y2goXFxcXFxcXCJoaWtlcjovL3BhZ2UvUGFyc2VfRG4uanNcXFxcXFxcIikpLnJ1bGUpO1xcXFxufVxcXFxuXFxcXG5kYXRhLm9sZENvbmZpZyA9IFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVBhcnNlU2V0Lmpzb25cXFxcXFxcIjtcXFxcbmRhdGEuY2pSb3V0ZSA9IFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5qc1xcXFxcXFwiO1xcXFxuZGF0YS54NVJvdXRlID0gXFxcXFxcXCJmaWxlOi8vL3N0b3JhZ2UvZW11bGF0ZWQvMC9BbmRyb2lkL2RhdGEvY29tLmV4YW1wbGUuaGlrZXJ2aWV3L2ZpbGVzL0RvY3VtZW50cy9jYWNoZS9QYXJzZV9Ebi5odG1sXFxcXFxcXCI7XFxcXG5cXFxcbmRhdGEuanhMYXp5ID0gXFxcXFxcXCJldmFsKCd2YXIgY29uZmlnID0nICsgZmV0Y2goJ1xcXFxcXFwiICsgZGF0YS5vbGRDb25maWcgKyBcXFxcXFxcIicpKTtldmFsKGZldGNoKGNvbmZpZy5jaikpO2F5dG1QYXJzZShpbnB1dClcXFxcXFxcIjtcXFxcblxcXFxuZGF0YS5zelBhcnNlID0gXFxcXFxcXCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU96K6+572uI25vSGlzdG9yeSNcXFxcXFxcIjtcXFxcblxcXFxuZGF0YS5hZGRMYW5KaWUgPSBmdW5jdGlvbihkKSB7XFxcXG4gICAgbGV0IGxhbmppZSA9IFsnYmFpZHUuKi5wbmcnLCAnLmpwZycsICdiYWlkdS4nLCAnY256ei4nLCAnZHlralxcXFxcXFxcLiddO1xcXFxuICAgIGV2YWwoJ3ZhciB5bGFuamllID0nICsgZmV0Y2goJ2hpa2VyOi8vZmlsZXMvY2FjaGUveDVQYXJzZUxhbkppZS50eHQnKSk7XFxcXG4gICAgbGFuamllID0gdHlwZW9mKHlsYW5qaWUpID09ICdvYmplY3QnID8geWxhbmppZSA6IGxhbmppZTtcXFxcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGQubGVuZ3RoOyBpKyspIHtcXFxcbiAgICAgICAgbGV0IGR1cmwgPSBkW2ldLnVybDtcXFxcbiAgICAgICAgaWYgKGR1cmwgIT0gdW5kZWZpbmVkICYmIC9sYXp5UnVsZS8udGVzdChkdXJsKSAmJiAvYXl0bVBhcnNlfGRlZmF1bHRQYXJzZS8udGVzdChkdXJsKSkge1xcXFxuICAgICAgICAgICAgZFtpXS5leHRyYSA9IGRbaV0uZXh0cmEgPT0gdW5kZWZpbmVkID8ge30gOiBkW2ldLmV4dHJhO1xcXFxuICAgICAgICAgICAgZFtpXS5leHRyYS5ibG9ja1J1bGVzID0gbGFuamllO1xcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxuICAgIHNldFJlc3VsdChkKTtcXFxcbn1cXFxcbmRhdGEueDVQYXJzZSA9IGZ1bmN0aW9uKFVybCkge1xcXFxuICAgIHJldHVybiAkKFVybCkubGF6eVJ1bGUoKCkgPT4ge1xcXFxuICAgICAgICBldmFsKCd2YXIgUGFyc2VTID0nICsgZmV0Y2goJ2hpa2VyOi8vZmlsZXMvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uJykpO1xcXFxuICAgICAgICByZXR1cm4gUGFyc2VTLmNvZGVzLmRlZmF1bHRQYXJzZShpbnB1dCk7XFxcXG4gICAgfSlcXFxcbn1cXFxcbmRhdGEuc2V0UGFyc2UgPSBmdW5jdGlvbigpIHtcXFxcbiAgICB2YXIgZCA9IFtdO1xcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIGRlc2M6ICdhdXRvJyxcXFxcbiAgICAgICAgdXJsOiB0aGlzLng1Um91dGUsXFxcXG4gICAgICAgIGNvbF90eXBlOiAneDVfd2Vidmlld19zaW5nbGUnXFxcXG4gICAgfSk7XFxcXG4gICAgdmFyIGp4TmV3ViA9IGdldFZhcignanhOZXdWJywgJycpLFxcXFxuICAgICAgICBqeE9sZFYgPSBnZXRWYXIoJ2p4T2xkVicpO1xcXFxuICAgIHZhciB2ZXJzaW9uVGlwcyA9IGp4TmV3ViA9PSAnJyA/ICfigJjigJgnIDogJ+KAmOKAmCcgKyBqeE5ld1Y7XFxcXG4gICAgdmFyIHBpY3MgPSBbXFxcXG4gICAgICAgICdodHRwczovL3R2YTEuc2luYWltZy5jbi9sYXJnZS85YmQ5YjE2N2d5MWZ3cmk1NndqaHFqMjFoYzB1MGFyci5qcGcnLFxcXFxuICAgICAgICAnaHR0cHM6Ly9jZG4uc2VvdnguY29tL2ltZy9zZW92eC0yMC0xMCUyMCg5MikuanBnJyxcXFxcbiAgICAgICAgJ2h0dHBzOi8vY2RuLnNlb3Z4LmNvbS9pbWcvbW9tMjAxOCUyMCgyMDcpLmpwZycsXFxcXG4gICAgICAgICdodHRwczovL3R2YTQuc2luYWltZy5jbi9sYXJnZS85YmQ5YjE2N2d5MWZ3cmg1eG9sdGRqMjFoYzB1MHRheC5qcGcnLFxcXFxuICAgICAgICAnaHR0cHM6Ly90dmExLnNpbmFpbWcuY24vbGFyZ2UvMDA1QllxcGdneTFmd3JleXU0bmw2ajMxaGMwdTBhaHIuanBnJyxcXFxcbiAgICAgICAgJ2h0dHBzOi8vczMuYm1wLm92aC9pbWdzLzIwMjEvMTAvZDdlNjBiOTkwNzQyMDkzZC5qcGVnJyxcXFxcbiAgICAgICAgJ2h0dHBzOi8vczMuYm1wLm92aC9pbWdzLzIwMjEvMTAvOTFhZDZkNjUzOGJmODY4OS5qcGcnLFxcXFxuICAgICAgICAnaHR0cHM6Ly90dmExLnNpbmFpbWcuY24vbGFyZ2UvMDA1QllxcGdneTFmd3Jlc2w1cG1sajMxaGMweGN3a2EuanBnJyxcXFxcbiAgICAgICAgJ2h0dHBzOi8vdHZhMy5zaW5haW1nLmNuL2xhcmdlLzAwNUJZcXBnZ3kxZndyZ2pkazc0b2ozMWhjMHUwZHFuLmpwZycsXFxcXG4gICAgICAgICdodHRwczovL2Nkbi5zZW92eC5jb20vaW1nL21vbTIwMTglMjAoMzIwKS5qcGcnLFxcXFxuICAgICAgICAnaHR0cHM6Ly9jZG4uc2VvdnguY29tL2ltZy9tb20yMDE4JTIwKDgwMykuanBnJ1xcXFxuICAgIF07XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgaW1nOiBwaWNzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwKV0sXFxcXG4gICAgICAgIHRpdGxlOiB2ZXJzaW9uVGlwcyArICfigJnigJk8c21hbGw+PHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjojNkVCODk3XFxcXFxcXCI+PGJyPuOAgOOAgOeCueWHu+S4iuaWueWktOWDj+i/m+WFpee8lui+kTxicj7ngrnmraTov5vlhaXorrrlnZvluJblrZDliJfooagnLFxcXFxuICAgICAgICBkZXNjOiAn5b2T5YmN54mI5pysOiAnICsganhPbGRWLFxcXFxuICAgICAgICB1cmw6ICdodHRwczovL2hhaWt1b3NoaWppZS5jbi91c2VyLzE5NTgnLFxcXFxuICAgICAgICBjb2xfdHlwZTogJ21vdmllXzEnXFxcXG4gICAgfSk7XFxcXG4gICAgc2V0UmVzdWx0KGQpO1xcXFxufVxcXFxuXFxcXG5zd2l0Y2ggKGdldFBhcmFtKFxcXFxcXFwidHlwZVxcXFxcXFwiKSkge1xcXFxuICAgIGNhc2UgXFxcXFxcXCLorr7nva5cXFxcXFxcIjpcXFxcbiAgICAgICAgZGF0YS5zZXRQYXJzZSgpO1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlIFxcXFxcXFwi57yW6L6RXFxcXFxcXCI6XFxcXG4gICAgICAgICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9qeEl0ZW0/cnVsZT1NeUZpZWxk4bSw4oG/XFxcXFxcXCIpLmp4TGlzdCgpO1xcXFxuICAgICAgICBzZXRSZXN1bHQoZCk7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGRlZmF1bHQ6XFxcXG4gICAgICAgICQuZXhwb3J0cyA9IGRhdGE7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxufVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuino+aekOmhueS4u+eVjOmdolxcXCIsXFxcInBhdGhcXFwiOlxcXCJqeEl0ZW1cXFwiLFxcXCJydWxlXFxcIjpcXFwidmFyIF8weG9kMj0nanNqaWFtaS5jb20udjYnLF8weDQ2OTA9W18weG9kMiwnZkZMRHM4TzFJZz09JywnVnd6Q244Sy93bzQ9JywndzVEQ3FNT3ZKY0szJywndzdVNUNzT1YnLCd3N1RDdGNPdk44S1QnLCd3N2JEbzhPdVVpQT0nLCdSbTFPdzY1dScsJ01FeFV3NlRDcEE9PScsJzVhK1c1WWExNTVpVTZaTzUnLCdEY0s0S2NLSnc1d3JEY09sJywnNWE2QjVZYW81WVNJNVpTZycsJ3c0ekN2TU9HTXNLZ3c3WT0nLCd3NFFFdzRRd2ZnPT0nLCdGRUREblJrKycsJ1Y4S3hmMG93JywnS3pERHA4Tyt3NXc9JywnRE1LY3dyL0Noc0tXJywnSE1LWEFSWENwUT09JywndzYwOXc3OEdmdz09Jywnd3JSL0JjS09LRHJEdlI5K3dwOHZhRllDZnNLTXdwc3pCUlRDb1dyRHNHRXhkc0tDdzZWV3dwUW4nLCdXc0tmZjhLeHdwND0nLCd3NmJDck1LMEd3PT0nLCdWeXAxdzRwSicsJ3c3SUdDc09OSFE9PScsJ1lNS3JaSFF5JywnVE1LekI4T2R3NjdDazhLWU9RPT0nLCd3NDNEanhab00ycGVNY0tFRWc9PScsJ0hGTER1VEFKJywnU3NLQVhVc2EnLCdUQ1RDZzhLZ3dyTT0nLCdXc0tod3FkM3dvbz0nLCdBMVpNdzVmQ3RnPT0nLCd3cUhEa1JyRG4ybkR0Vi9EblE9PScsJ2N6TmV3NFJOYkJqRG1BPT0nLCdHSFpxdzZMQ2g4S1VKZ2hSJywndzR2RHBVMHEnLCdJRk02d3FRaScsJ0ljS1JiUT09JywnYnk5Y3c0MD0nLCd3b1pKd29qQ2hjS2InLCd3NWZEb0M5NUlnPT0nLCdWRGpDbmNLcXdwOD0nLCdlOEtiWThLQXdwVERqRi9EdDIwZicsJ3c1ZkR1VkFuJywnd3FIRGtRWERtdz09JywndzQzRGo4T3Baejk5dzYwWHc1ZkNxdz09JywnTjhLSllzS0p3NkREc3NLcScsJ1ppeHp3NHhnJywnd3EwVHc2TENqY0s0Q0RZWHdwakNxc09wUUZJPScsJ3dyRlFQUnc9JywnNG9LbDRvS2k0b0tjNG9DU1VIekR0aG5DbWVldHZ1ZVF2ZWlraGVhZGd3PT0nLCd3NUxDazhLWEd4az0nLCdNc09RdzVqQ3FWbz0nLCd3cVFEdzVZeXc0N0Nrd0hDcjFyQ28zSjh3cUE9JywnRWNPRXc2WENvM2s9Jywnd3BSb2ZCbkNsR2htJywnVThLdGVFND0nLCdLY09udzdqQ2lVQkF3NzdDak1LOUsyQmR3Nlp2dzUzRHN4MWZ3bzhnSXNPRHc0VERnTU9wdzRIRG1RZkNpR25EaFFGdlg4S3knLCdVOEtwVEZZMicsJ1ZNS2dKTU9aJywndzYzRGxEc1F3NE09JywnRWpiRGs4Tzd3NGtGd3JUQ2ljT2V3NVE9JywnYjhPSGJzS0V3cWpEaGxZPScsJ0dNS25CTUtCdzdFPScsJ0M4S0l3cUJBREE9PScsJ3c2ekRnOE9kd3JOcnc3VENoaU09Jywnd3IzRGw4S213NDFjdzR4NndwQWZIZz09Jywnd3BaQVNCVENoQT09Jywnd3I3RGlNS0dJc09XJywnV3c1cHc3VERxZz09JywnY1h6Q3BtM0Nydz09JywnWjhLRFNzS1Z3cWc9Jywnd281NVhSND0nLCc0b0tzNG9LQjRvTzg0b0dkZGxzZHdxRWQ1cEtLNUx5bzVvMnU1YisrJywndzdocXdwakRqU2c9JywndzVjakZjT0pCdz09JywnTUNYRHBjTzZ3Nm89Jywnd3A1NUhzS3FiZz09JywnSzhPOHc2WENsdz09JywnUVZKT3c3WT0nLCc0b0dNNG9DaTRvR1g0b09SZTJURHBCcHhXTU8vdzdYQ2k4T1d3NWZEc3NLY084T2N3cVBDbXNPTUdjT2ZWQ1hEcHNPNXc2Wi93NVJLJywnVDhLWmJzS0V3cm89JywnQVdYRHZDazBZejNDcGc9PScsJ2FRVENnY0tEd3BFPScsJ3c2QWZPTU83Rmc9PScsJ3c0L0R0VVkyQU1PK1YxSER0VmJDaHpQQ3FnPT0nLCd3Ni9DdmNLcUVSZzJ3NVk9JywndzVEQ3VNT2FKc0t4JywnRmNLa0xzS0F3NjErUnNLdlJVb2JZV3ZDZ0JqQ2dtbGZJQlhDbmxYRGpIST0nLCdaTU9OQWlMQ2lzS013cjNDbkNJTVVjT3N3NEZwd3BFPScsJ0NNT0Z3NFhDdkVRPScsJ1FFMWZ3NU5wJywnSG1CMFdzTzMnLCd3NkhDclM5OXdxND0nLCdhc0tPUW1NaScsJ0oyeDZ3NnJDaEE9PScsJ3c2ckNnUzVPd3BNPScsJ3c2a0t3cTdDaGNPVkYySUZ3NW5DczhLb1kxVT0nLCc0b0tDNG9LVTRvR1A0b081d3FmRGtCM0NwOEthU3NPZ3dxSENzakhDdU1LV3c2c2J3clRDaXdqQ3RVUENnV0YzVGxnbXdvcE5hU3JEbUF3WXc2em1scmZDdCtXNG1NS3U2S1NKTWVhZGhnPT0nLCdGaWJEaDhPanc0VUZ3cVBDanNPYXc0Vkl3N2ZEdmc9PScsJ3c2YkRqTU9zd3JGMHc3bz0nLCc1NlMyNVlpZXc3Yz0nLCc0b0NCNG9DUDRvTzM0b0M3dzRmQ29nTENod0E0QXNLMkE4S1ZCMkREZ0VYQ3ZpZkRyY09DRjhLNHdvYkRyY0tUTjBqQ25zT2hXUT09JywndzR2RHNVd3hPc09QWFVyRHRWWT0nLCd3NEREcmo3Q3FjT3UnLCd3N0REcWNPRFpBTT0nLCd3bzFhd296Q21NS2UnLCdiY085d3BURG96MD0nLCdBY092TGNPU3dwN0R1Zz09JywnNG9DQjRvQ1A0b08zNG9DN3c0ZkNzeHZDZ1ZBa0FzS3lHOEtYUWk3Q2xsL0N2UzdDdjhLU1RzTzB3NWpDdThPWlRGdkNrTUtHSlVIQ3BjT2Z3NmJDcU9hWHYxL2x1YkI1NkthR1ErYWZ1Zz09JywnU2xuQ28wN0NpQT09JywndzdiRHVDRENtY09CJywnUnNLVHdxSlV3cHc9JywnWHNLMXdwTnonLCd3NTFvWHNLZHc2ST0nLCd3by9EbzhLS1A4SzYnLCd3cVphd3JEQ3NzS1InLCc1NmU0NVl1dUNNS0knLCd3NTNDa01LTEpnYz0nLCdHeWZEcjhPMnc2Z1Z3cU09JywndzZjTnc2TU5iZz09JywndzVuQ2lnUlInLCdDc0tZd3FmQ3RnPT0nLCdUc09Fd3FYRGhEdz0nLCd3cVhEZ1E3RGgzWENxQT09JywnTEZZZHdxMHJjc08zRHc9PScsJ3dvekR1OEtQQU1LMycsJ3dxa1h3NmpDaXNLQ09Ud013cGpDcWc9PScsJ3c0UENrQjVYJywndzVUQ2t6Vnh3ckE9JywnRThLandyWjBQZz09JywnUWNLMk84T2N3N009Jywnd3FCT0pEZzQnLCdjU05DdzRSdllCaz0nLCdOY08ydzcvQ2pRPT0nLCdTVXpEazhPUicsJ1E4T0dJbUhDb2c9PScsJ0M4S1J3bzVtRmc9PScsJ3dyZ2R3N0RDdGNLTScsJ2VIekNoRzdDa0E9PScsJ3c0a3N3NmNWWkE9PScsJ3dwRUV3NWJDamNLeicsJzRvS2o0b0tJNG9DbjRvR2JZOE91UWw3RHJ4UENoaGpEb3NPK0VjTzhDc09HdzYwSlU4T0h3b2ZEc01LbXc0SEN1Q1pYZUdoeScsJ3c0Y1BMTU9FUEE9PScsJ0FuVnd3Njg9JywndzZyRHVTWENpQT09JywndzZSQ2ZFMXgnLCd3cWpEbThLbUlzS24nLCdlM3JEdGNPQUtRPT0nLCd3NzdDcXNLSkNoZ3J3NHZDaEE9PScsJ3dxSERrOEs2dzVsTnc3WT0nLCd3NnpEaU1PM1d6dz0nLCd3NTdEczFJdk53PT0nLCd3NWpEbWNPcFpnUT0nLCdHTUtTSWpVPScsJzVveWU1bysxNWJ5WTZMMjI1WWF1NXA2bjVwVzc1WVNUNWE2NicsJ2F6Snh3NVBEbnc9PScsJ1dzSzh3cFZnd29EQ3NCY093cnZDdEE9PScsJ3c3TmxVRlpFTU1PWE1NTzFJTU9RRk1PcllNTzhTY09xd3IvRGdNT1hjTU9CQUZGcHdwVT0nLCc0b0sxNG9DZDRvTzE0b0tSUkUxRndvYkRqZWFEb09Xa3BlYU9uT1M1aGVpMWtPVzhxT1M3anVtNXRlaXV1dz09JywnNWI2SzVZaTc2S3lrNTc2WDVMdWRVWE09Jywnd3JIbHI0am1sSURvdHEzbHY1dkNweElRdzdOR3dwa0p3NmpDdlREQ3RFbkRpOE9NREYzRG04S1N3cDdEcmNLb3c2RVZGQ1ZrSnNPUU1IND0nLCd3clZBTmdBTWJEL0Rtc09pTWpQRGc4S1onLCc1YTZvNVlXZjVZU0Q1WlNOJywnQVcvRGx5a1pPUT09JywnNG9PSTRvRys0b0szNG9HZndxM0NrZzNDcGhEbWtJdmt2WnptaktUbHZvUT0nLCd3NUxEck1LTEp6NVFHOEtvJywnNG9HWjRvS0w0b0tWNG9PZ0R4akN1TU9FdzZ2bW1yN21scm5vaEt6bW5yL2t2cDNvdDdnPScsJzVMcVc1bytYNUxpYTVhK1E1cFdHNkxlQTViNm93NXZEazhLdFN5L0RrTU9YdzRuRG04Tzlmc0ttR0RNL3c1dkRyZ2hmdzY5RDU3NkY2YUNSNklXSTVwMjM1YTJ6NXBlMzZMV0Y1YjI4T01LZndxQjlNWEJaUmNLb3c1aHhhY09Sd3FrRHc1SENnY0s4dzVEQ3FjT2R3N1U9JywnNWE2WjVwU2I2TGFoNWIrd2FTOTF3NGJEb3pza3c2L0NoME5jVHNLUlZHRERvY0tzTjhPNnc3ckNsTU9EdzdEQ2dzT1VWTU9xZFRzaicsJzVMNkI1NVNrNTV1VzVZU0Y1WW0rNklPaDZaeUQ1NXFPNWI2ajZLYVQ1NWVMNksrajVaNkE2TFNPNVl5a3c2RGxwNGptbjRqcGxML3BvYlRsaVovbHZKam9ySkxsblkza3VaVG9wTExvcjdmbWdJdz0nLCdUVnpEbU1PTkhzT3cnLCd3NHpDc01PR01NS0x3N3pEdXlYRGhzS1AnLCd3Nk56WWNLcXc0Zz0nLCc0b0NLNG9LMDRvR3A0b0NidzQ3Q204S2J3b0U0RmxQRHI4T2ZLY09EZmNLSjU1bWs1YitHNW8ycDU2V0QnLCdRc0trd3BSM3dwckRwSFJJd3IzQ3ZzS3J3NzU5QXNPa3dxZFp3clREalFSN0ZITVJaZ0VYd29uQ25pYkRxY0s0U01PUmVBPT0nLCd3NGRMd3FmRHFndz0nLCd3N1U3TDhPNExBPT0nLCd3N1hEaWNPTWVSVT0nLCd3ckZoS1RJZCcsJ1ZYWlZ3NWRSJywndzRURHVNS1hOeTlyRzhLelZ5ST0nLCd6QU5qc3lqVGlhbUJQaS5jSVRvWW0udnQ2cENRSk1EPT0nXTsoZnVuY3Rpb24oXzB4MzZlMzQyLF8weDVlODRjYyxfMHgyZTFiNzIpe3ZhciBfMHhhYTVjOD1mdW5jdGlvbihfMHg3YmVmYWMsXzB4MTg1MmY5LF8weDQyY2Q1OCxfMHgzMmJlZTksXzB4NDUxNDZiKXtfMHgxODUyZjk9XzB4MTg1MmY5Pj4weDgsXzB4NDUxNDZiPSdwbyc7dmFyIF8weDU1ZjAwZT0nc2hpZnQnLF8weDI0ODk3OD0ncHVzaCc7aWYoXzB4MTg1MmY5PF8weDdiZWZhYyl7d2hpbGUoLS1fMHg3YmVmYWMpe18weDMyYmVlOT1fMHgzNmUzNDJbXzB4NTVmMDBlXSgpO2lmKF8weDE4NTJmOT09PV8weDdiZWZhYyl7XzB4MTg1MmY5PV8weDMyYmVlOTtfMHg0MmNkNTg9XzB4MzZlMzQyW18weDQ1MTQ2YisncCddKCk7fWVsc2UgaWYoXzB4MTg1MmY5JiZfMHg0MmNkNThbJ3JlcGxhY2UnXSgvW3pBTnlUQlBJVFl0cENRSk1EPV0vZywnJyk9PT1fMHgxODUyZjkpe18weDM2ZTM0MltfMHgyNDg5NzhdKF8weDMyYmVlOSk7fX1fMHgzNmUzNDJbXzB4MjQ4OTc4XShfMHgzNmUzNDJbXzB4NTVmMDBlXSgpKTt9cmV0dXJuIDB4YjExNjY7fTtyZXR1cm4gXzB4YWE1YzgoKytfMHg1ZTg0Y2MsXzB4MmUxYjcyKT4+XzB4NWU4NGNjXl8weDJlMWI3Mjt9KF8weDQ2OTAsMHgxMGQsMHgxMGQwMCkpO3ZhciBfMHgzMzc3PWZ1bmN0aW9uKF8weGVjZDZjNyxfMHhlOGNlZTMpe18weGVjZDZjNz1+ficweCdbJ2NvbmNhdCddKF8weGVjZDZjNyk7dmFyIF8weDQyYmVjNj1fMHg0NjkwW18weGVjZDZjN107aWYoXzB4MzM3N1snRGhkbGRLJ109PT11bmRlZmluZWQpeyhmdW5jdGlvbigpe3ZhciBfMHgyNjhiODQ9dHlwZW9mIHdpbmRvdyE9PSd1bmRlZmluZWQnP3dpbmRvdzp0eXBlb2YgcHJvY2Vzcz09PSdvYmplY3QnJiZ0eXBlb2YgcmVxdWlyZT09PSdmdW5jdGlvbicmJnR5cGVvZiBnbG9iYWw9PT0nb2JqZWN0Jz9nbG9iYWw6dGhpczt2YXIgXzB4OTk2ZDgzPSdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSc7XzB4MjY4Yjg0WydhdG9iJ118fChfMHgyNjhiODRbJ2F0b2InXT1mdW5jdGlvbihfMHgyOTZiOWEpe3ZhciBfMHhmNmMzMzY9U3RyaW5nKF8weDI5NmI5YSlbJ3JlcGxhY2UnXSgvPSskLywnJyk7Zm9yKHZhciBfMHg0MTk0MzA9MHgwLF8weDJkMjc0OCxfMHg2OWJmZDUsXzB4YWU2OTMwPTB4MCxfMHgxNzQ2ZGI9Jyc7XzB4NjliZmQ1PV8weGY2YzMzNlsnY2hhckF0J10oXzB4YWU2OTMwKyspO35fMHg2OWJmZDUmJihfMHgyZDI3NDg9XzB4NDE5NDMwJTB4ND9fMHgyZDI3NDgqMHg0MCtfMHg2OWJmZDU6XzB4NjliZmQ1LF8weDQxOTQzMCsrJTB4NCk/XzB4MTc0NmRiKz1TdHJpbmdbJ2Zyb21DaGFyQ29kZSddKDB4ZmYmXzB4MmQyNzQ4Pj4oLTB4MipfMHg0MTk0MzAmMHg2KSk6MHgwKXtfMHg2OWJmZDU9XzB4OTk2ZDgzWydpbmRleE9mJ10oXzB4NjliZmQ1KTt9cmV0dXJuIF8weDE3NDZkYjt9KTt9KCkpO3ZhciBfMHgxN2JjNDc9ZnVuY3Rpb24oXzB4M2JmY2UwLF8weGU4Y2VlMyl7dmFyIF8weDI1ZGYyNz1bXSxfMHgzNzYwMzM9MHgwLF8weDNmNWQ2OCxfMHgyMzQ0YzU9JycsXzB4YjhjNjgxPScnO18weDNiZmNlMD1hdG9iKF8weDNiZmNlMCk7Zm9yKHZhciBfMHgxYmI5Y2Y9MHgwLF8weDE0NzJkZT1fMHgzYmZjZTBbJ2xlbmd0aCddO18weDFiYjljZjxfMHgxNDcyZGU7XzB4MWJiOWNmKyspe18weGI4YzY4MSs9JyUnKygnMDAnK18weDNiZmNlMFsnY2hhckNvZGVBdCddKF8weDFiYjljZilbJ3RvU3RyaW5nJ10oMHgxMCkpWydzbGljZSddKC0weDIpO31fMHgzYmZjZTA9ZGVjb2RlVVJJQ29tcG9uZW50KF8weGI4YzY4MSk7Zm9yKHZhciBfMHg1ZTRhZGI9MHgwO18weDVlNGFkYjwweDEwMDtfMHg1ZTRhZGIrKyl7XzB4MjVkZjI3W18weDVlNGFkYl09XzB4NWU0YWRiO31mb3IoXzB4NWU0YWRiPTB4MDtfMHg1ZTRhZGI8MHgxMDA7XzB4NWU0YWRiKyspe18weDM3NjAzMz0oXzB4Mzc2MDMzK18weDI1ZGYyN1tfMHg1ZTRhZGJdK18weGU4Y2VlM1snY2hhckNvZGVBdCddKF8weDVlNGFkYiVfMHhlOGNlZTNbJ2xlbmd0aCddKSklMHgxMDA7XzB4M2Y1ZDY4PV8weDI1ZGYyN1tfMHg1ZTRhZGJdO18weDI1ZGYyN1tfMHg1ZTRhZGJdPV8weDI1ZGYyN1tfMHgzNzYwMzNdO18weDI1ZGYyN1tfMHgzNzYwMzNdPV8weDNmNWQ2ODt9XzB4NWU0YWRiPTB4MDtfMHgzNzYwMzM9MHgwO2Zvcih2YXIgXzB4M2JjZTAxPTB4MDtfMHgzYmNlMDE8XzB4M2JmY2UwWydsZW5ndGgnXTtfMHgzYmNlMDErKyl7XzB4NWU0YWRiPShfMHg1ZTRhZGIrMHgxKSUweDEwMDtfMHgzNzYwMzM9KF8weDM3NjAzMytfMHgyNWRmMjdbXzB4NWU0YWRiXSklMHgxMDA7XzB4M2Y1ZDY4PV8weDI1ZGYyN1tfMHg1ZTRhZGJdO18weDI1ZGYyN1tfMHg1ZTRhZGJdPV8weDI1ZGYyN1tfMHgzNzYwMzNdO18weDI1ZGYyN1tfMHgzNzYwMzNdPV8weDNmNWQ2ODtfMHgyMzQ0YzUrPVN0cmluZ1snZnJvbUNoYXJDb2RlJ10oXzB4M2JmY2UwWydjaGFyQ29kZUF0J10oXzB4M2JjZTAxKV5fMHgyNWRmMjdbKF8weDI1ZGYyN1tfMHg1ZTRhZGJdK18weDI1ZGYyN1tfMHgzNzYwMzNdKSUweDEwMF0pO31yZXR1cm4gXzB4MjM0NGM1O307XzB4MzM3N1snQ3dtZmNMJ109XzB4MTdiYzQ3O18weDMzNzdbJ2p5V2ZteCddPXt9O18weDMzNzdbJ0RoZGxkSyddPSEhW107fXZhciBfMHgxZmU5ZDU9XzB4MzM3N1snanlXZm14J11bXzB4ZWNkNmM3XTtpZihfMHgxZmU5ZDU9PT11bmRlZmluZWQpe2lmKF8weDMzNzdbJ2NsTnhQQSddPT09dW5kZWZpbmVkKXtfMHgzMzc3WydjbE54UEEnXT0hIVtdO31fMHg0MmJlYzY9XzB4MzM3N1snQ3dtZmNMJ10oXzB4NDJiZWM2LF8weGU4Y2VlMyk7XzB4MzM3N1snanlXZm14J11bXzB4ZWNkNmM3XT1fMHg0MmJlYzY7fWVsc2V7XzB4NDJiZWM2PV8weDFmZTlkNTt9cmV0dXJuIF8weDQyYmVjNjt9O2V2YWwoSlNPTltfMHgzMzc3KCcwJywnRzNxUScpXShmZXRjaChfMHgzMzc3KCcxJywnRFVPKCcpKSlbJ3J1bGUnXSk7ZnVuY3Rpb24gYmJzWVooKXt2YXIgXzB4YmE4NGJjPXsnSVZJRXcnOidqZFJvdXRlJywncWpiTU4nOmZ1bmN0aW9uKF8weDI4M2E3NCxfMHgxY2NmOTcsXzB4NDRjNTExKXtyZXR1cm4gXzB4MjgzYTc0KF8weDFjY2Y5NyxfMHg0NGM1MTEpO30sJ1BqSGZwJzonYmJzWVonLCdSSEJCUSc6ZnVuY3Rpb24oXzB4MzM3MzM4KXtyZXR1cm4gXzB4MzM3MzM4KCk7fSwnZERpYlonOl8weDMzNzcoJzInLCdPNkl5JyksJ092Y2tTJzpmdW5jdGlvbihfMHg0MGZiZWEsXzB4MmE1YzQyKXtyZXR1cm4gXzB4NDBmYmVhKF8weDJhNWM0Mik7fX07aWYoIWdldFZhcihfMHhiYTg0YmNbXzB4MzM3NygnMycsJyZIWUwnKV0pKXtfMHhiYTg0YmNbXzB4MzM3NygnNCcsJzR4W1AnKV0ocHV0VmFyLF8weGJhODRiY1tfMHgzMzc3KCc1JywnZDYkRCcpXSxfMHhiYTg0YmNbXzB4MzM3NygnNicsJzJmaUwnKV0oaXNMb2dpbikpO3B1dFZhcihfMHhiYTg0YmNbXzB4MzM3NygnNycsJ1NLKEQnKV0sXzB4YmE4NGJjWydkRGliWiddKTt9cmV0dXJuIF8weGJhODRiY1tfMHgzMzc3KCc4JywnZCh5XicpXShnZXRWYXIsXzB4YmE4NGJjWydQakhmcCddKTt9ZnVuY3Rpb24gc3BsaXRMaW5lKF8weDIxZTg3YSxfMHhhOWJlNzYpe3ZhciBfMHgyYTA3YWY9eydZZENxbCc6ZnVuY3Rpb24oXzB4NDc2OTJjLF8weDEzMTI0Zil7cmV0dXJuIF8weDQ3NjkyYzxfMHgxMzEyNGY7fX07Zm9yKGxldCBfMHgzYTY3NmQ9MHgwO18weDJhMDdhZltfMHgzMzc3KCc5JywnMmZpTCcpXShfMHgzYTY3NmQsXzB4YTliZTc2KTtfMHgzYTY3NmQrKyl7ZFsncHVzaCddKHsnY29sX3R5cGUnOl8weDIxZTg3YX0pO319dmFyIGp4SXRlbT17J2p4TGlzdCc6ZnVuY3Rpb24oKXt2YXIgXzB4M2VlNzY2PXsnbHlKU2EnOl8weDMzNzcoJ2EnLCdlKjhMJyksJ2d2WE5PJzpfMHgzMzc3KCdiJywnT01jZScpLCdTTk1scyc6XzB4MzM3NygnYycsJ1FeMSonKSwnaFpRRFEnOmZ1bmN0aW9uKF8weGFmOTU0MSxfMHg1ZGVmOGMpe3JldHVybiBfMHhhZjk1NDEoXzB4NWRlZjhjKTt9LCdlY2xtaCc6XzB4MzM3NygnZCcsJ1lvRjknKSwnYWtqTGsnOmZ1bmN0aW9uKF8weDRjMzMxYyxfMHgyY2ZmYzMpe3JldHVybiBfMHg0YzMzMWMrXzB4MmNmZmMzO30sJ1FqUmNQJzpmdW5jdGlvbihfMHgxMmJjZTMsXzB4MTIwMTA4KXtyZXR1cm4gXzB4MTJiY2UzPT1fMHgxMjAxMDg7fSwncGhpVnknOl8weDMzNzcoJ2UnLCdQU0lNJyksJ2xiUWFiJzon4oCY4oCY4oCZ4oCZPHNtYWxsPjxzcGFuXFxcXFxcXFx4MjBzdHlsZT1cXFxcXFxcXHgyMmNvbG9yOiNGRTlBMkVcXFxcXFxcXHgyMj4nLCdIckx0VCc6J+enu+WKqDpcXFxcXFxcXHgyMCcsJ0FjYVJwJzpmdW5jdGlvbihfMHg1N2NlODgsXzB4MjU4YzA0KXtyZXR1cm4gXzB4NTdjZTg4K18weDI1OGMwNDt9LCdCQ1V5aCc6J3RleHRfMicsJ2dSWE1UJzpmdW5jdGlvbihfMHg0ZmViNDksXzB4MWUyZGM5KXtyZXR1cm4gXzB4NGZlYjQ5K18weDFlMmRjOTt9LCdXUEVLZCc6XzB4MzM3NygnZicsJ3MmbEsnKSwnUXJyUFAnOmZ1bmN0aW9uKF8weDE5NGI2ZCxfMHgxYjNiMjYpe3JldHVybiBfMHgxOTRiNmQoXzB4MWIzYjI2KTt9LCdHYm1LbSc6XzB4MzM3NygnMTAnLCdCZF5aJyksJ1FBVElrJzpmdW5jdGlvbihfMHgyODllYWIsXzB4NTllYTBlKXtyZXR1cm4gXzB4Mjg5ZWFiKF8weDU5ZWEwZSk7fSwnZmZYQ2cnOmZ1bmN0aW9uKF8weDMyYWU1OCxfMHg0NDllYWMpe3JldHVybiBfMHgzMmFlNTghPT1fMHg0NDllYWM7fSwnV2JlZWknOl8weDMzNzcoJzExJywnT01jZScpLCdsdHZ5Wic6XzB4MzM3NygnMTInLCdibTZMJyksJ2xDQlN1JzpmdW5jdGlvbihfMHgzZTdlY2YsXzB4OWE0MjE5KXtyZXR1cm4gXzB4M2U3ZWNmK18weDlhNDIxOTt9LCdPcGZtVSc6ZnVuY3Rpb24oXzB4NWUzNDBhLF8weGRiZTQ1ZCl7cmV0dXJuIF8weDVlMzQwYT09XzB4ZGJlNDVkO30sJ1F6SmNuJzpmdW5jdGlvbihfMHg1ODg4ZWMsXzB4ZWU1ZThlKXtyZXR1cm4gXzB4NTg4OGVjK18weGVlNWU4ZTt9LCdXVVFYbSc6ZnVuY3Rpb24oXzB4NDQ2MWE1LF8weDQzYTVhZSl7cmV0dXJuIF8weDQ0NjFhNStfMHg0M2E1YWU7fX07dmFyIF8weDQzZmRhNj1nZXRWYXIoXzB4M2VlNzY2W18weDMzNzcoJzEzJywnIV10UycpXSk7dmFyIF8weDVhNGRlYT1wYXJzZUZpbGVbXzB4MzM3NygnMTQnLCduWndKJyldO3ZhciBfMHg1MDU2OTc9XzB4M2VlNzY2WydRQVRJayddKGdldFZhcixfMHgzMzc3KCcxNScsJ21MWCUnKSk7ZFsncHVzaCddKHsndGl0bGUnOl8weDMzNzcoJzE2JywncyZsSycpLCd1cmwnOmJqSXRlbVsneGpQYXJzZSddKCksJ2NvbF90eXBlJzpfMHgzZWU3NjZbXzB4MzM3NygnMTcnLCdzJmxLJyldfSk7dmFyIF8weDIyNGViND1fMHg1YTRkZWFbJ2xlbmd0aCddO2Zvcih2YXIgXzB4MTc0YmMwPTB4MDtfMHgxNzRiYzA8XzB4MjI0ZWI0O18weDE3NGJjMCsrKXtpZihfMHgzZWU3NjZbJ2ZmWENnJ10oXzB4M2VlNzY2WydXYmVlaSddLF8weDNlZTc2NltfMHgzMzc3KCcxOCcsJ09NY2UnKV0pKXt2YXIgXzB4MjEwYjU4PV8weDVhNGRlYVtfMHgxNzRiYzBdO3ZhciBfMHgzNGU0ZjI9XzB4M2VlNzY2W18weDMzNzcoJzE5JywnVzRFVicpXShfMHgyMTBiNTgsJycpWydyZXBsYWNlJ10oL2h0dHAuKlxcXFxcXFxcL1xcXFxcXFxcLy9nLCcnKTtpZigv56e75YqoL1tfMHgzMzc3KCcxYScsJ1c0RVYnKV0oXzB4NTA1Njk3KSl7ZFsncHVzaCddKHsndGl0bGUnOl8weDNlZTc2NlsnT3BmbVUnXShfMHgzZWU3NjZbXzB4MzM3NygnMWInLCc5RkBCJyldKF8weDNlZTc2NltfMHgzMzc3KCcxYycsJzFLR2YnKV0sXzB4MTc0YmMwKSxfMHg1MDU2OTcpP18weDNlZTc2NlsnUXpKY24nXShfMHgzZWU3NjZbXzB4MzM3NygnMWQnLCchXXRTJyldLF8weDMzNzcoJzFlJywnZ3J6cycpKStfMHgzNGU0ZjI6XzB4M2VlNzY2W18weDMzNzcoJzFmJywnaWJGNycpXShfMHgzZWU3NjZbJ1dQRUtkJ10sXzB4MzRlNGYyKSwndXJsJzpiakl0ZW1bXzB4MzM3NygnMjAnLCdRXjEqJyldKF8weDUwNTY5NyxfMHgxNzRiYzApLCdjb2xfdHlwZSc6XzB4M2VlNzY2W18weDMzNzcoJzIxJywnWGZjRycpXX0pO31lbHNle3ZhciBfMHg0YTY0YmY9W18weDIxMGI1OCxfMHgzZWU3NjZbJ1dVUVhtJ10oXzB4MTc0YmMwLCd8fCcpXVtfMHgzMzc3KCcyMicsJzJmaUwnKV0oJ3x8Jyk7ZFtfMHgzMzc3KCcyMycsJzVLa3cnKV0oeyd0aXRsZSc6XzB4M2VlNzY2W18weDMzNzcoJzI0Jywnblp3SicpXStfMHgzNGU0ZjIsJ2NvbF90eXBlJzpfMHgzMzc3KCcyNScsJ3JeSlknKSwndXJsJzpiakl0ZW1bXzB4MzM3NygnMjYnLCc4aWxiJyldKF8weDRhNjRiZixfMHgyMjRlYjRbJ3RvU3RyaW5nJ10oKSl9KTt9fWVsc2V7dmFyIF8weDMyNzY2ZD1fMHgzZWU3NjZbJ2x5SlNhJ11bXzB4MzM3NygnMjcnLCcxS0dmJyldKCd8JyksXzB4MTlkOWY1PTB4MDt3aGlsZSghIVtdKXtzd2l0Y2goXzB4MzI3NjZkW18weDE5ZDlmNSsrXSl7Y2FzZScwJzp2YXIgXzB4MzhjZjg0PWdldFZhcihfMHgzMzc3KCcyOCcsJ2UqOEwnKSk7Y29udGludWU7Y2FzZScxJzpkW18weDMzNzcoJzI5JywnMmZpTCcpXSh7J3RpdGxlJzpfMHgzZWU3NjZbXzB4MzM3NygnMmEnLCcyZmlMJyldLCd1cmwnOmJqSXRlbVsneGpQYXJzZSddKCksJ2NvbF90eXBlJzpfMHgzZWU3NjZbJ1NOTWxzJ119KTtjb250aW51ZTtjYXNlJzInOnZhciBfMHg1MGQ3NTQ9XzB4M2VlNzY2W18weDMzNzcoJzJiJywncDNIcycpXShnZXRWYXIsXzB4M2VlNzY2W18weDMzNzcoJzJjJywnKnlUaicpXSk7Y29udGludWU7Y2FzZSczJzpmb3IodmFyIF8weDVkNDAxZT0weDA7XzB4NWQ0MDFlPF8weDE0YWY1MztfMHg1ZDQwMWUrKyl7dmFyIF8weDJmOGVmZD1fMHgxZDNjMTZbXzB4NWQ0MDFlXTt2YXIgXzB4MTgyNjI4PV8weDNlZTc2NltfMHgzMzc3KCcyZCcsJykmSnAnKV0oXzB4MmY4ZWZkLCcnKVtfMHgzMzc3KCcyZScsJ2dyenMnKV0oL2h0dHAuKlxcXFxcXFxcL1xcXFxcXFxcLy9nLCcnKTtpZigv56e75YqoL1tfMHgzMzc3KCcyZicsJyZIWUwnKV0oXzB4NTBkNzU0KSl7ZFtfMHgzMzc3KCczMCcsJ1smMksnKV0oeyd0aXRsZSc6XzB4M2VlNzY2W18weDMzNzcoJzMxJywnTzZJeScpXShfMHgzZWU3NjZbJ2FrakxrJ10oXzB4M2VlNzY2W18weDMzNzcoJzMyJywncDNIcycpXSxfMHg1ZDQwMWUpLF8weDUwZDc1NCk/XzB4M2VlNzY2W18weDMzNzcoJzMzJywnZSo4TCcpXShfMHgzZWU3NjZbXzB4MzM3NygnMzQnLCdzJmxLJyldKF8weDNlZTc2NltfMHgzMzc3KCczNScsJ1hmY0cnKV0sXzB4M2VlNzY2W18weDMzNzcoJzM2JywnZSo4TCcpXSksXzB4MTgyNjI4KTpfMHgzZWU3NjZbJ0FjYVJwJ10oXzB4MzM3NygnMzcnLCdCZF5aJyksXzB4MTgyNjI4KSwndXJsJzpiakl0ZW1bJ3lkUGFyc2UnXShfMHg1MGQ3NTQsXzB4NWQ0MDFlKSwnY29sX3R5cGUnOl8weDNlZTc2NltfMHgzMzc3KCczOCcsJzhNd2InKV19KTt9ZWxzZXt2YXIgXzB4NWQ3ODQ1PVtfMHgyZjhlZmQsXzB4M2VlNzY2WydnUlhNVCddKF8weDVkNDAxZSwnfHwnKV1bXzB4MzM3NygnMzknLCdkKHleJyldKCd8fCcpO2RbXzB4MzM3NygnM2EnLCdPTWNlJyldKHsndGl0bGUnOl8weDNlZTc2NltfMHgzMzc3KCczYicsJzRxIU4nKV0oXzB4M2VlNzY2W18weDMzNzcoJzNjJywnMUtHZicpXSxfMHgxODI2MjgpLCdjb2xfdHlwZSc6XzB4M2VlNzY2W18weDMzNzcoJzNkJywnWyYySycpXSwndXJsJzpiakl0ZW1bJ3hsU2VsZWN0J10oXzB4NWQ3ODQ1LF8weDE0YWY1M1tfMHgzMzc3KCczZScsJ2liRjcnKV0oKSl9KTt9fWNvbnRpbnVlO2Nhc2UnNCc6dmFyIF8weDFkM2MxNj1wYXJzZUZpbGVbJ3RpdGxlJ107Y29udGludWU7Y2FzZSc1Jzp2YXIgXzB4MTRhZjUzPV8weDFkM2MxNltfMHgzMzc3KCczZicsJ1BTSU0nKV07Y29udGludWU7Y2FzZSc2JzpfMHgzZWU3NjZbXzB4MzM3NygnNDAnLCdibTZMJyldKGNsZWFyVmFyLF8weDNlZTc2NltfMHgzMzc3KCc0MScsJ0JkXlonKV0pO2NvbnRpbnVlO31icmVhazt9fX1jbGVhclZhcihfMHgzZWU3NjZbXzB4MzM3NygnNDInLCdibTZMJyldKTt9LCdscUZpbGUnOmZ1bmN0aW9uKCl7dmFyIF8weDFhNjg2Mj17J3Zxa1hUJzpmdW5jdGlvbihfMHgxYmIzZmMsXzB4MzQ4ZjcwKXtyZXR1cm4gXzB4MWJiM2ZjPT1fMHgzNDhmNzA7fSwncHdWRXgnOmZ1bmN0aW9uKF8weDM4ZTMxMSl7cmV0dXJuIF8weDM4ZTMxMSgpO30sJ0hzSXJ5JzpfMHgzMzc3KCc0MycsJyEmckInKSwnTW1yVFUnOmZ1bmN0aW9uKF8weDI3ZGMzYixfMHgyYjAxZDQsXzB4NDZlODQyKXtyZXR1cm4gXzB4MjdkYzNiKF8weDJiMDFkNCxfMHg0NmU4NDIpO30sJ1hWTWVzJzonaGlrZXI6Ly9wYWdlL1JvdXRlP3R5cGU957yW6L6RI25vUmVjb3JkSGlzdG9yeSMnLCdUbEdiRyc6XzB4MzM3NygnNDQnLCckJlFBJyksJ3ZlalRHJzpfMHgzMzc3KCc0NScsJyRvU20nKSwnd0pzcEknOl8weDMzNzcoJzQ2JywnVzRFVicpLCdDc29SZyc6XzB4MzM3NygnNDcnLCc0cSFOJyksJ1BDZXN3JzpmdW5jdGlvbihfMHgyOWRjZDMsXzB4MzViYzU3KXtyZXR1cm4gXzB4MjlkY2QzK18weDM1YmM1Nzt9LCdQRXZIWCc6XzB4MzM3NygnNDgnLCdLWU0pJyksJ2lYVm1PJzpmdW5jdGlvbihfMHg0MGVlZjksXzB4NWFhYzFjKXtyZXR1cm4gXzB4NDBlZWY5K18weDVhYWMxYzt9LCdZUmhSQSc6XzB4MzM3NygnNDknLCdlKjhMJyksJ2hrSE9UJzpfMHgzMzc3KCc0YScsJ0JkXlonKSwncHFHcGMnOl8weDMzNzcoJzRiJywnKSZKcCcpLCdrTFVWYSc6J+WvvOWFpeebtOmTvicsJ0VFYUR3JzpfMHgzMzc3KCc0YycsJzhpbGInKSwnVFBsT3InOifmibnph4/liKDpmaQnLCdJc1hpRic6XzB4MzM3NygnNGQnLCdTbTM3JyksJ0xxaVZoJzpfMHgzMzc3KCc0ZScsJ3pqajknKSwnak5LYnQnOmZ1bmN0aW9uKF8weDVjYTkwNyxfMHg0NmNjNGYpe3JldHVybiBfMHg1Y2E5MDc9PV8weDQ2Y2M0Zjt9LCdSb2x0Uyc6XzB4MzM3NygnNGYnLCdSJVV4JyksJ09WYXdmJzpfMHgzMzc3KCc1MCcsJyZIWUwnKSwnZWpBZG4nOl8weDMzNzcoJzUxJywnS1lNKScpLCdzQ1RQaSc6XzB4MzM3NygnNTInLCcpJkpwJyksJ1BXaVpKJzpmdW5jdGlvbihfMHgxNGMxYmYsXzB4MmY2MDdlKXtyZXR1cm4gXzB4MTRjMWJmKF8weDJmNjA3ZSk7fSwnTUtKbHYnOl8weDMzNzcoJzUzJywnYUFqeScpLCdYa2NhcSc6XzB4MzM3NygnNTQnLCdbJjJLJyksJ3BEZ0ZOJzpmdW5jdGlvbihfMHgzNTg4YmUsXzB4YWQyZWY4KXtyZXR1cm4gXzB4MzU4OGJlKF8weGFkMmVmOCk7fSwnZFFoSXYnOmZ1bmN0aW9uKF8weDUwMGVhMyxfMHgzZDIwNmYpe3JldHVybiBfMHg1MDBlYTMrXzB4M2QyMDZmO30sJ0VrU0xjJzon4oCY4oCY4oCZ4oCZPGJpZz7nrqHnkIbop6PmnpAnLCdLWWtZTCc6ZnVuY3Rpb24oXzB4NTEyMDBhLF8weDU0YzhmMSl7cmV0dXJuIF8weDUxMjAwYShfMHg1NGM4ZjEpO30sJ1JKZm1ZJzpmdW5jdGlvbihfMHg1ZWIzZTQsXzB4MTE0ZGNiKXtyZXR1cm4gXzB4NWViM2U0PF8weDExNGRjYjt9LCdhSnJEeCc6J2lRU1lrJywnaExmYmUnOmZ1bmN0aW9uKF8weDJlN2FhNyxfMHgzNTAxZDgpe3JldHVybiBfMHgyZTdhYTcrXzB4MzUwMWQ4O30sJ2RuU25FJzpmdW5jdGlvbihfMHg1YzM5ZWYsXzB4M2MzNDUxKXtyZXR1cm4gXzB4NWMzOWVmK18weDNjMzQ1MTt9LCd0eVdPZSc6XzB4MzM3NygnNTUnLCdHM3FRJyksJ1VvdEVQJzpmdW5jdGlvbihfMHg1NzI3M2YsXzB4MzQwM2Y3KXtyZXR1cm4gXzB4NTcyNzNmPT1fMHgzNDAzZjc7fSwnUmZabXAnOmZ1bmN0aW9uKF8weDVkOTJhZCl7cmV0dXJuIF8weDVkOTJhZCgpO30sJ1RoamNWJzpmdW5jdGlvbihfMHgyOTE3YmIsXzB4MmQxOTg0KXtyZXR1cm4gXzB4MjkxN2JiIT09XzB4MmQxOTg0O30sJ1dtTmNjJzpfMHgzMzc3KCc1NicsJzlGQEInKSwnV0tUcnMnOl8weDMzNzcoJzU3JywnTzZJeScpLCdlU0FGQic6XzB4MzM3NygnNTgnLCdXNEVWJyl9O2lmKF8weDFhNjg2MltfMHgzMzc3KCc1OScsJ0tZTSknKV0oXzB4MWE2ODYyW18weDMzNzcoJzVhJywnOE13YicpXShiYnNZWiksXzB4MWE2ODYyW18weDMzNzcoJzViJywnYm02TCcpXSkpe18weDFhNjg2MlsnUFdpWkonXShldmFsLF8weDFhNjg2MltfMHgzMzc3KCc1YycsJykmSnAnKV0oZ2V0VmFyLCdqZFJvdXRlJykpO3hkUm91dGU9XzB4MWE2ODYyW18weDMzNzcoJzVkJywnNHhbUCcpXSh4ZFJvdXRlLF9teVNldFtfMHgzMzc3KCc1ZScsJ1IlVXgnKV0pO3NwbGl0TGluZSgnbGluZScsMHg1KTtkWydwdXNoJ10oeyd0aXRsZSc6XzB4MWE2ODYyW18weDMzNzcoJzVmJywnWyYySycpXSwndXJsJzpfMHgxYTY4NjJbJ1hWTWVzJ10sJ2Rlc2MnOl8weDFhNjg2MltfMHgzMzc3KCc2MCcsJ2dtIWgnKV0sJ2NvbF90eXBlJzpfMHgxYTY4NjJbXzB4MzM3NygnNjEnLCdHM3FRJyldfSk7ZFtfMHgzMzc3KCc2MicsJzhNd2InKV0oeydkZXNjJzpfMHgxYTY4NjJbXzB4MzM3NygnNjMnLCdHM3FRJyldLCdjb2xfdHlwZSc6XzB4MWE2ODYyWyd2ZWpURyddLCdleHRyYSc6eyd0aXRsZVZpc2libGUnOiFbXSwnZGVmYXVsdFZhbHVlJzpfMHgxYTY4NjJbXzB4MzM3NygnNjQnLCdibTZMJyldKGdldFZhcixfMHgxYTY4NjJbXzB4MzM3NygnNjUnLCc0eFtQJyldKSwnb25DaGFuZ2UnOl8weDFhNjg2MlsnQ3NvUmcnXX19KTt2YXIgXzB4NGZhZTZmPV8weDFhNjg2MltfMHgzMzc3KCc2NicsJ2QoeV4nKV07dmFyIF8weDFlOWQzYz1beyd0aXRsZSc6XzB4MzM3NygnNjcnLCdXNEVWJyksJ3VybCc6YmpJdGVtW18weDMzNzcoJzY4JywnRFVPKCcpXSgn55u06ZO+Jyl9LHsndGl0bGUnOl8weDMzNzcoJzY5JywnRFVPKCcpLCd1cmwnOmJqSXRlbVsncHVsbENvZGUnXSgn5YWN5ZeFJyl9LHsndGl0bGUnOl8weDFhNjg2MlsnVFBsT3InXSwndXJsJzpiakl0ZW1bJ3Bsc2NQYXJzZSddKCl9XTtmb3IodmFyIF8weDVhODlmND0weDA7XzB4MWE2ODYyWydSSmZtWSddKF8weDVhODlmNCxfMHgxZTlkM2NbXzB4MzM3NygnNmEnLCdHM3FRJyldKTtfMHg1YTg5ZjQrKyl7aWYoXzB4MWE2ODYyW18weDMzNzcoJzZiJywnWGZjRycpXT09PV8weDFhNjg2MltfMHgzMzc3KCc2YycsJ1NtMzcnKV0pe2RbXzB4MzM3NygnMzAnLCdbJjJLJyldKHsndGl0bGUnOl8weDFlOWQzY1tfMHg1YTg5ZjRdW18weDMzNzcoJzZkJywnU0soRCcpXSwndXJsJzpfMHgxZTlkM2NbXzB4NWE4OWY0XVsndXJsJ10sJ2NvbF90eXBlJzpfMHgxYTY4NjJbXzB4MzM3NygnNmUnLCdRXjEqJyldfSk7fWVsc2V7aWYoXzB4MWE2ODYyW18weDMzNzcoJzZmJywnNUtrdycpXShfMHgxYTY4NjJbXzB4MzM3NygnNzAnLCchJnJCJyldKGJic1laKSxfMHgxYTY4NjJbXzB4MzM3NygnNzEnLCdYZmNHJyldKSl7dmFyIF8weDFjZTMyMT1fMHgzMzc3KCc3MicsJzhNd2InKVsnc3BsaXQnXSgnfCcpLF8weDVkOWVlZT0weDA7d2hpbGUoISFbXSl7c3dpdGNoKF8weDFjZTMyMVtfMHg1ZDllZWUrK10pe2Nhc2UnMCc6XzB4MWE2ODYyW18weDMzNzcoJzczJywnJCZRQScpXShzcGxpdExpbmUsXzB4MzM3NygnNzQnLCdpYkY3JyksMHg1KTtjb250aW51ZTtjYXNlJzEnOnZhciBfMHg3YjRjMTc9XzB4MWE2ODYyWydYVk1lcyddO2NvbnRpbnVlO2Nhc2UnMic6ZFsncHVzaCddKHsnZGVzYyc6XzB4MWE2ODYyW18weDMzNzcoJzc1JywnZ3J6cycpXSwnY29sX3R5cGUnOl8weDFhNjg2MlsndmVqVEcnXSwnZXh0cmEnOnsndGl0bGVWaXNpYmxlJzohW10sJ2RlZmF1bHRWYWx1ZSc6Z2V0VmFyKF8weDFhNjg2MltfMHgzMzc3KCc3NicsJzhNd2InKV0pLCdvbkNoYW5nZSc6XzB4MWE2ODYyW18weDMzNzcoJzc3JywnU0soRCcpXX19KTtjb250aW51ZTtjYXNlJzMnOnhkUm91dGU9XzB4MWE2ODYyWydQQ2VzdyddKHhkUm91dGUsX215U2V0WydwYXJzZVJvdXRlJ10pO2NvbnRpbnVlO2Nhc2UnNCc6ZFsncHVzaCddKHsndGl0bGUnOl8weDFhNjg2MlsnUEV2SFgnXSwndXJsJzpiakl0ZW1bXzB4MzM3NygnNzgnLCcqeVRqJyldKF9teVNldFtfMHgzMzc3KCc3OScsJ0BmKXAnKV0pLCdkZXNjJzpfMHgxYTY4NjJbXzB4MzM3NygnN2EnLCdTbTM3JyldKF8weDFhNjg2MltfMHgzMzc3KCc3YicsJ1NLKEQnKV0oXzB4MWE2ODYyWydZUmhSQSddLG15U2V0WydjaiddKSxfMHgxYTY4NjJbXzB4MzM3NygnN2MnLCdnbSFoJyldKSwnY29sX3R5cGUnOl8weDFhNjg2MltfMHgzMzc3KCc3ZCcsJ1c0RVYnKV19KTtjb250aW51ZTtjYXNlJzUnOnZhciBfMHgzZmQ3NDc9W3sndGl0bGUnOl8weDFhNjg2MltfMHgzMzc3KCc3ZScsJ2QoeV4nKV0sJ3VybCc6YmpJdGVtW18weDMzNzcoJzdmJywncl5KWScpXSgn55u06ZO+Jyl9LHsndGl0bGUnOl8weDFhNjg2MlsnRUVhRHcnXSwndXJsJzpiakl0ZW1bXzB4MzM3NygnODAnLCdncnpzJyldKCflhY3ll4UnKX0seyd0aXRsZSc6XzB4MWE2ODYyWydUUGxPciddLCd1cmwnOmJqSXRlbVtfMHgzMzc3KCc4MScsJ2QoeV4nKV0oKX1dO2NvbnRpbnVlO2Nhc2UnNic6Zm9yKHZhciBfMHg0Yzk2NTM9MHgwO18weDRjOTY1MzxfMHgzZmQ3NDdbXzB4MzM3NygnM2YnLCdQU0lNJyldO18weDRjOTY1MysrKXtkW18weDMzNzcoJzgyJywnQmReWicpXSh7J3RpdGxlJzpfMHgzZmQ3NDdbXzB4NGM5NjUzXVtfMHgzMzc3KCc4MycsJzhpbGInKV0sJ3VybCc6XzB4M2ZkNzQ3W18weDRjOTY1M11bXzB4MzM3NygnODQnLCdOdVtKJyldLCdjb2xfdHlwZSc6XzB4MWE2ODYyWydJc1hpRiddfSk7fWNvbnRpbnVlO2Nhc2UnNyc6c3BsaXRMaW5lKF8weDMzNzcoJzg1JywnZ3J6cycpLDB4Mik7Y29udGludWU7Y2FzZSc4JzpkWydwdXNoJ10oeyd0aXRsZSc6XzB4MWE2ODYyW18weDMzNzcoJzg2JywnIV10UycpXSwndXJsJzpfMHgxYTY4NjJbXzB4MzM3NygnODcnLCdAZilwJyldKHR5cGVvZiBjekd1aWRlLF8weDFhNjg2MlsnUm9sdFMnXSk/XzB4MWE2ODYyW18weDMzNzcoJzg4JywnZ20haCcpXShjekd1aWRlKTonJywnY29sX3R5cGUnOl8weDFhNjg2MlsncHFHcGMnXX0pO2NvbnRpbnVlO2Nhc2UnOSc6c3BsaXRMaW5lKF8weDMzNzcoJzg5JywnJCZRQScpLDB4MSk7Y29udGludWU7Y2FzZScxMCc6c3BsaXRMaW5lKF8weDMzNzcoJzhhJywnQmReWicpLDB4MSk7Y29udGludWU7Y2FzZScxMSc6ZFtfMHgzMzc3KCc4YicsJ3JeSlknKV0oeyd0aXRsZSc6XzB4MWE2ODYyWydPVmF3ZiddLCd1cmwnOmJqSXRlbVtfMHgzMzc3KCc4YycsJ2JtNkwnKV0oX215U2V0W18weDMzNzcoJzhkJywnTnVbSicpXSxfbXlTZXRbJ3g1Y2FjaGUnXSksJ2Rlc2MnOl8weDFhNjg2MltfMHgzMzc3KCc4ZScsJ2dyenMnKV0sJ2NvbF90eXBlJzpfMHgzMzc3KCc4ZicsJ2UqOEwnKX0pO2NvbnRpbnVlO2Nhc2UnMTInOmRbXzB4MzM3NygnOTAnLCcpJkpwJyldKHsndGl0bGUnOl8weDMzNzcoJzkxJywnYm02TCcpLCd1cmwnOl8weDFhNjg2MltfMHgzMzc3KCc5MicsJ2liRjcnKV0sJ2Rlc2MnOl8weDFhNjg2MltfMHgzMzc3KCc5MycsJyZIWUwnKV0sJ2NvbF90eXBlJzpfMHgzMzc3KCc5NCcsJ3pqajknKX0pO2NvbnRpbnVlO2Nhc2UnMTMnOmV2YWwoXzB4MWE2ODYyW18weDMzNzcoJzk1JywnJkhZTCcpXShnZXRWYXIsXzB4MzM3NygnOTYnLCdhQWp5JykpKTtjb250aW51ZTt9YnJlYWs7fX1lbHNle2RbXzB4MzM3NygnOTcnLCdTSyhEJyldKHsndGl0bGUnOifigJjigJjigJnigJk8c3Ryb25nPjxiaWc+55m75b2V5o+Q56S6JywnZGVzYyc6XzB4MWE2ODYyWydNS0psdiddLCd1cmwnOl8weDMzNzcoJzk4JywnJkhZTCcpLCdjb2xfdHlwZSc6XzB4MWE2ODYyW18weDMzNzcoJzk5JywnU0soRCcpXX0pO319fXNwbGl0TGluZSgnbGluZScsMHgyKTtkW18weDMzNzcoJzlhJywnKnlUaicpXSh7J3RpdGxlJzpfMHgxYTY4NjJbXzB4MzM3NygnOWInLCcjTzFzJyldLCd1cmwnOmJqSXRlbVtfMHgzMzc3KCc5YycsJ1FeMSonKV0oX215U2V0WydjamNhY2hlJ10sX215U2V0W18weDMzNzcoJzlkJywnJCZRQScpXSksJ2Rlc2MnOl8weDFhNjg2MltfMHgzMzc3KCc5ZScsJ0RVTygnKV0sJ2NvbF90eXBlJzpfMHgxYTY4NjJbXzB4MzM3NygnOWYnLCdwM0hzJyldfSk7c3BsaXRMaW5lKCdsaW5lJywweDEpO2RbJ3B1c2gnXSh7J3RpdGxlJzpfMHgxYTY4NjJbJ1BFdkhYJ10sJ3VybCc6YmpJdGVtW18weDMzNzcoJ2EwJywnWW9GOScpXShfbXlTZXRbXzB4MzM3NygnYTEnLCdQU0lNJyldKSwnZGVzYyc6XzB4MWE2ODYyW18weDMzNzcoJ2EyJywnYUFqeScpXShfMHgxYTY4NjJbXzB4MzM3NygnYTMnLCdwXUdIJyldKF8weDFhNjg2MltfMHgzMzc3KCdhNCcsJyRvU20nKV0sbXlTZXRbJ2NqJ10pLF8weDFhNjg2MltfMHgzMzc3KCdhNScsJ3MmbEsnKV0pLCdjb2xfdHlwZSc6XzB4MWE2ODYyW18weDMzNzcoJ2E2JywnJCZRQScpXX0pO3NwbGl0TGluZShfMHgxYTY4NjJbJ3R5V09lJ10sMHgxKTtkW18weDMzNzcoJ2E3JywnYUFqeScpXSh7J3RpdGxlJzpfMHgzMzc3KCdhOCcsJ1IlVXgnKSwndXJsJzpfMHgxYTY4NjJbXzB4MzM3NygnYTknLCdLWU0pJyldKHR5cGVvZiBjekd1aWRlLF8weDFhNjg2MltfMHgzMzc3KCdhYScsJzhNd2InKV0pP18weDFhNjg2MltfMHgzMzc3KCdhYicsJ1FeMSonKV0oY3pHdWlkZSk6JycsJ2NvbF90eXBlJzondGV4dF9jZW50ZXJfMSd9KTt9ZWxzZXtpZihfMHgxYTY4NjJbJ1RoamNWJ10oXzB4MWE2ODYyWydXbU5jYyddLF8weDFhNjg2MltfMHgzMzc3KCdhYycsJ3hvWlQnKV0pKXt2YXIgXzB4MWFjMWUyPVtlZGl0RFgsXzB4MWE2ODYyWydpWFZtTyddKF8weDVhODlmNCwnfHwnKV1bXzB4MzM3NygnYWQnLCcmSFlMJyldKCd8fCcpO2RbXzB4MzM3NygnYWUnLCc0eFtQJyldKHsndGl0bGUnOl8weDMzNzcoJ2FmJywnOGlsYicpK3hzTGlzdCwnY29sX3R5cGUnOl8weDFhNjg2MltfMHgzMzc3KCdiMCcsJyQmUUEnKV0sJ3VybCc6YmpJdGVtWyd4bFNlbGVjdCddKF8weDFhYzFlMixsYkxlbmd0aFtfMHgzMzc3KCdiMScsJ1NtMzcnKV0oKSl9KTt9ZWxzZXtkW18weDMzNzcoJzYyJywnOE13YicpXSh7J3RpdGxlJzpfMHgxYTY4NjJbJ1dLVHJzJ10sJ2Rlc2MnOl8weDFhNjg2MltfMHgzMzc3KCdiMicsJ2dtIWgnKV0sJ3VybCc6XzB4MWE2ODYyW18weDMzNzcoJ2IzJywnOE13YicpXSwnY29sX3R5cGUnOl8weDMzNzcoJ2I0JywnQmReWicpfSk7fX19fTskW18weDMzNzcoJ2I1JywnaWJGNycpXT1qeEl0ZW07O18weG9kMj0nanNqaWFtaS5jb20udjYnO1xcXCJ9XSxcXFwicGFnZXNcXFwiOlxcXCJbe1xcXFxcXFwiY29sX3R5cGVcXFxcXFxcIjpcXFxcXFxcIm1vdmllXzNcXFxcXFxcIixcXFxcXFxcIm5hbWVcXFxcXFxcIjpcXFxcXFxcIlBhcnNlX0RuLmh0bWxcXFxcXFxcIixcXFxcXFxcInBhdGhcXFxcXFxcIjpcXFxcXFxcIlBhcnNlX0RuLmh0bWxcXFxcXFxcIixcXFxcXFxcInJ1bGVcXFxcXFxcIjpcXFxcXFxcIjwhRE9DVFlQRSBodG1sPlxcXFxcXFxcbjxodG1sPlxcXFxcXFxcbjxoZWFkPlxcXFxcXFxcbiAgICA8bWV0YSBjaGFyc2V0PVxcXFxcXFxcXFxcXFxcXCJ1dGYtOFxcXFxcXFxcXFxcXFxcXCI+XFxcXFxcXFxuICAgIDxtZXRhIG5hbWU9XFxcXFxcXFxcXFxcXFxcInZpZXdwb3J0XFxcXFxcXFxcXFxcXFxcIiBjb250ZW50PVxcXFxcXFxcXFxcXFxcXCJ3aWR0aD1kZXZpY2Utd2lkdGgsaW5pdGlhbC1zY2FsZT0xLG1pbmltdW0tc2NhbGU9MSxtYXhpbXVtLXNjYWxlPTEsdXNlci1zY2FsYWJsZT1ub1xcXFxcXFxcXFxcXFxcXCIgLz5cXFxcXFxcXG4gICAgPHNjcmlwdCBzcmM9XFxcXFxcXFxcXFxcXFxcImh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vdnVlQDIuNS4xNi9kaXN0L3Z1ZS5taW4uanNcXFxcXFxcXFxcXFxcXFwiPjwvc2NyaXB0PlxcXFxcXFxcbiAgICA8c2NyaXB0IHNyYz1cXFxcXFxcXFxcXFxcXFwiaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTIuMS40Lm1pbi5qc1xcXFxcXFxcXFxcXFxcXCI+PC9zY3JpcHQ+XFxcXFxcXFxuICAgIDwhLS1cXFxcXFxcXG4gICAgPHNjcmlwdCBzcmM9XFxcXFxcXFxcXFxcXFxcImh0dHA6Ly9hcHBzLmJkaW1nLmNvbS9saWJzL2pxdWVyeS8yLjEuNC9qcXVlcnkubWluLmpzXFxcXFxcXFxcXFxcXFxcIj48L3NjcmlwdD5cXFxcXFxcXG4gICAgPHNjcmlwdCBzcmM9XFxcXFxcXFxcXFxcXFxcImh0dHA6Ly9hcHBzLmJkaW1nLmNvbS9saWJzL3Z1ZS8xLjAuMTQvdnVlLmpzXFxcXFxcXFxcXFxcXFxcIj48L3NjcmlwdD5cXFxcXFxcXG4gICAgLS0+XFxcXFxcXFxuICAgIDx0aXRsZT5QYXJzZV9EbjwvdGl0bGU+XFxcXFxcXFxuICAgIDxzdHlsZSB0eXBlPXRleHQvY3NzPlxcXFxcXFxcbiAgICAgICAgaHRtbCwgYm9keSB7XFxcXFxcXFxuICAgICAgICAgICAgaGVpZ2h0OiBhdXRvO1xcXFxcXFxcbiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XFxcXFxcXFxuICAgICAgICB9XFxcXFxcXFxuICAgICAgICBib2R5IHtcXFxcXFxcXG4gICAgICAgICAgICBtYXJnaW46IDAgNXB4IDAgNXB4O1xcXFxcXFxcbiAgICAgICAgICAgIHBhZGRpbmc6IDAgMHB4IDAgMHB4O1xcXFxcXFxcbiAgICAgICAgICAgIC8vYmFja2dyb3VuZDogI0Y5RjBEQTtcXFxcXFxcXG4gICAgICAgICAgICBmb250LXdlaWdodDogMDtcXFxcXFxcXG4gICAgICAgICAgICBmb250LWZhbWlseTogXFxcXFxcXFxcXFxcXFxcIk1pY3Jvc29mdCBZYUhlaVxcXFxcXFxcXFxcXFxcXCIsXFxcXFxcXFxcXFxcXFxcIuWui+S9k1xcXFxcXFxcXFxcXFxcXCIsXFxcXFxcXFxcXFxcXFxcIlNlZ29lIFVJXFxcXFxcXFxcXFxcXFxcIiwgXFxcXFxcXFxcXFxcXFxcIkx1Y2lkYSBHcmFuZGVcXFxcXFxcXFxcXFxcXFwiLCBIZWx2ZXRpY2EsIEFyaWFsLHNhbnMtc2VyaWYsIEZyZWVTYW5zLCBBcmltbztcXFxcXFxcXG4gICAgICAgIH1cXFxcXFxcXG4gICAgICAgICNkaXYye1xcXFxcXFxcbiAgICAgICAgICAgbWFyZ2luLXRvcDozNXB4O1xcXFxcXFxcbiAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgLyrovpPlhaXmoYbniLblhYPntKAqL1xcXFxcXFxcbiAgICAgICAgZGl2LmJveCB7XFxcXFxcXFxuICAgICAgICAgICAgaGVpZ2h0OiA1M3B4O1xcXFxcXFxcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4O1xcXFxcXFxcbiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXFxcXFxcXG4gICAgICAgIH1cXFxcXFxcXG4gICAgICAgIC8q6L6T5YWl5qGG5bC65a+4Ki9cXFxcXFxcXG4gICAgICAgIGZvcm0ge1xcXFxcXFxcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcXFxcXFxcbiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXFxcXFxcXG4gICAgICAgICAgICB3aWR0aDogOTIlO1xcXFxcXFxcbiAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgaW5wdXQsIGxhYmVsLCAubGllYiBidXR0b24ge1xcXFxcXFxcbiAgICAgICAgICAgIGJvcmRlcjogbm9uZTtcXFxcXFxcXG4gICAgICAgICAgICBvdXRsaW5lOiBub25lO1xcXFxcXFxcbiAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgLyrlrZfkvZPkvY3nva4qL1xcXFxcXFxcbiAgICAgICAgaW5wdXQge1xcXFxcXFxcbiAgICAgICAgICAgIHdpZHRoOiA3NyU7XFxcXFxcXFxuICAgICAgICAgICAgaGVpZ2h0OiAzMnB4O1xcXFxcXFxcbiAgICAgICAgICAgIHBhZGRpbmctbGVmdDogNjZweDtcXFxcXFxcXG4gICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAzMHB4O1xcXFxcXFxcbiAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgbGFiZWwge1xcXFxcXFxcbiAgICAgICAgICAgIHRleHQtYWxpZ246Y2VudGVyO1xcXFxcXFxcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiA0M3B4O1xcXFxcXFxcbiAgICAgICAgICAgIGhlaWdodDogNDBweDtcXFxcXFxcXG4gICAgICAgICAgICB3aWR0aDogNjBweDtcXFxcXFxcXG4gICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XFxcXFxcXFxuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcXFxcXFxcbiAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgLyrlsI/moYYqL1xcXFxcXFxcbiAgICAgICAgLmJhciBsYWJlbCB7XFxcXFxcXFxuICAgICAgICAgICAgYmFja2dyb3VuZDogI0QwNkI2QztcXFxcXFxcXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiA1NTUgNTU1cHggNTU1cHggNTU1O1xcXFxcXFxcbiAgICAgICAgICAgIHdpZHRoOiA2MHB4O1xcXFxcXFxcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDtcXFxcXFxcXG4gICAgICAgICAgICBjb2xvcjogI0Y5RjBEQTtcXFxcXFxcXG4gICAgICAgICAgICB0b3A6IDA7XFxcXFxcXFxuICAgICAgICAgICAgbGVmdDogM3B4O1xcXFxcXFxcbiAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgLyrovpPlhaXmoYbmoLflvI8qL1xcXFxcXFxcbiAgICAgICAgLmJhciBpbnB1dCB7XFxcXFxcXFxuICAgICAgICAgICAgYmFja2dyb3VuZDogI0Y5RjBEQTtcXFxcXFxcXG4gICAgICAgICAgICBib3JkZXI6IDNweCBzb2xpZCAjRDA2QjZDO1xcXFxcXFxcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcXFxcXFxcXG4gICAgICAgIH1cXFxcXFxcXG4gICAgICAgIC8q5YiX6KGoKi9cXFxcXFxcXG4gICAgICAgIC5saWViIGJ1dHRvbiB7XFxcXFxcXFxuICAgICAgICAgICAgdGV4dC1hbGlnbjpjZW50ZXI7XFxcXFxcXFxuICAgICAgICAgICAgbGluZS1oZWlnaHQ6NDBweDtcXFxcXFxcXG4gICAgICAgICAgICBoZWlnaHQ6IDQwcHg7XFxcXFxcXFxuICAgICAgICAgICAgd2lkdGg6IDI3cHg7XFxcXFxcXFxuICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xcXFxcXFxcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXFxcXFxcXG4gICAgICAgIH1cXFxcXFxcXG4gICAgICAgIC8q5YiX6KGoKi9cXFxcXFxcXG4gICAgICAgIC5saWViIGJ1dHRvbntcXFxcXFxcXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XFxcXFxcXFxuICAgICAgICAgICAgYmFja2dyb3VuZDogI0QwNkI2QztcXFxcXFxcXG4gICAgICAgICAgICBmb250LXNpemU6IDEzcHg7XFxcXFxcXFxuICAgICAgICAgICAgY29sb3I6ICNGOUYwREE7XFxcXFxcXFxuICAgICAgICAgICAgdG9wOiAwO1xcXFxcXFxcbiAgICAgICAgICAgIHJpZ2h0OiAwcHg7XFxcXFxcXFxuICAgICAgICB9XFxcXFxcXFxuICAgICAgICAvKuWktOWDjyovXFxcXFxcXFxuICAgICAgICAucm91bmRfaWNvbntcXFxcXFxcXG4gICAgICAgICAgICB3aWR0aDogNDBweDtcXFxcXFxcXG4gICAgICAgICAgICBoZWlnaHQ6IDQwcHg7XFxcXFxcXFxuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcXFxcXFxcXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XFxcXFxcXFxuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXFxcXFxcXG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXFxcXFxcXG4gICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xcXFxcXFxcbiAgICAgICAgfVxcXFxcXFxcblxcXFxcXFxcbiAgICAgICAgLmp4LXVsLCAuY2otdWwge1xcXFxcXFxcbiAgICAgICAgICAgIHotaW5kZXg6IDk5OTtcXFxcXFxcXG4gICAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XFxcXFxcXFxuICAgICAgICAgICAgd2lkdGg6IDc3JTtcXFxcXFxcXG4gICAgICAgICAgIC8vIGxlZnQ6IDEwJTtcXFxcXFxcXG4gICAgICAgIH1cXFxcXFxcXG4gICAgICAgIC5qeC11bCwgLmNqLXVsIHtcXFxcXFxcXG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xcXFxcXFxcbiAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgLmp4LXVsIHtcXFxcXFxcXG4gICAgICAgICAgICB0b3A6IDIlO1xcXFxcXFxcbiAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgLmNqLXVsIHtcXFxcXFxcXG4gICAgICAgICAgICB0b3A6IDMwJTtcXFxcXFxcXG4gICAgICAgIH1cXFxcXFxcXG4gICAgICAgIGxpIHtcXFxcXFxcXG4gICAgICAgICAgICBoZWlnaHQ6IDM1cHg7XFxcXFxcXFxuICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzAxYmZkYTtcXFxcXFxcXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7XFxcXFxcXFxuICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjgpO1xcXFxcXFxcbiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTtcXFxcXFxcXG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMzVweDtcXFxcXFxcXG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxcXFxcXFxuICAgICAgICAgICAgZm9udC1zaXplOiAxNnB4O1xcXFxcXFxcbiAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxcXFxcXFxuICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcXFxcXFxcXG4gICAgICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcXFxcXFxcXG4gICAgICAgIH1cXFxcXFxcXG4gICAgICAgIGxpIHtcXFxcXFxcXG4gICAgICAgICAgICBsaXN0LXN0eWxlOiBub25lO1xcXFxcXFxcbiAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgbGk6aG92ZXIge1xcXFxcXFxcbiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcXFxcXFxcXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDEzOSwgMTMxLCAxMjAsIDAuOSk7XFxcXFxcXFxuICAgICAgICB9XFxcXFxcXFxuICAgICAgICBsaVtjaGVjaz1cXFxcXFxcXFxcXFxcXFwidHJ1ZVxcXFxcXFxcXFxcXFxcXCJdIHtcXFxcXFxcXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDEzOSwgMCwgMCwgMC45KTtcXFxcXFxcXG4gICAgICAgIH1cXFxcXFxcXG5cXFxcXFxcXG4gICAgPC9zdHlsZT5cXFxcXFxcXG48L2hlYWQ+XFxcXFxcXFxuXFxcXFxcXFxuPGJvZHk+XFxcXFxcXFxuICAgIDxkaXYgY2xhc3M9XFxcXFxcXFxcXFxcXFxcImZ1bmdcXFxcXFxcXFxcXFxcXFwiPlxcXFxcXFxcbiAgICAgICAgPGEgc3R5bGU9XFxcXFxcXFxcXFxcXFxcImZsb2F0OmxlZnQ7XFxcXFxcXFxcXFxcXFxcIj5cXFxcXFxcXG4gICAgICAgICAgICA8YnV0dG9uICBzdHlsZT1cXFxcXFxcXFxcXFxcXFwiYm9yZGVyOiBub25lO2JvcmRlci1yYWRpdXM6MTBweDtiYWNrZ3JvdW5kOiAjYzU0NjRhO3dpZHRoOiA4MHB4OyBmb250LXNpemU6IDE4cHg7Y29sb3I6ICNGOUYwREE7XFxcXFxcXFxcXFxcXFxcIiBvbmNsaWNrPVxcXFxcXFxcXFxcXFxcXCJjYW5jZWwoKTtcXFxcXFxcXFxcXFxcXFwiPuWFsyDpl608L2J1dHRvbj5cXFxcXFxcXG4gICAgICAgIDwvYT5cXFxcXFxcXG4gICAgICAgIDxhIHN0eWxlPVxcXFxcXFxcXFxcXFxcXCJmbG9hdDpyaWdodFxcXFxcXFxcXFxcXFxcXCI+XFxcXFxcXFxuICAgICAgICAgICAgPGJ1dHRvbiBzdHlsZT1cXFxcXFxcXFxcXFxcXFwiYm9yZGVyOiBub25lO2JvcmRlci1yYWRpdXM6MTBweDtiYWNrZ3JvdW5kOiAjMDY4MDA2O3dpZHRoOiA4MHB4OyBmb250LXNpemU6IDE4cHg7Y29sb3I6ICNGOUYwREE7XFxcXFxcXFxcXFxcXFxcIm9uY2xpY2s9XFxcXFxcXFxcXFxcXFxcImNsaWNrbWUoJ+mFjSDnva4g5beyIOS/nSDlrZgg77yBJywgMTAwMCwgJ+W8gCcpO1xcXFxcXFxcXFxcXFxcXCI+5L+dIOWtmDwvYnV0dG9uPiBcXFxcXFxcXG4gICAgICAgIDwvYT5cXFxcXFxcXG4gICAgPC9kaXY+XFxcXFxcXFxuICAgIDxicj5cXFxcXFxcXG4gICAgPGRpdiBpZD1cXFxcXFxcXFxcXFxcXFwiZGl2MlxcXFxcXFxcXFxcXFxcXCI+PC9kaXY+XFxcXFxcXFxuICAgIDxkaXY+XFxcXFxcXFxuICAgICAgICA8YSBzdHlsZT1cXFxcXFxcXFxcXFxcXFwiZmxvYXQ6bGVmdDttYXJnaW4tdG9wOjVweDtcXFxcXFxcXFxcXFxcXFwiIG9uY2xpY2s9XFxcXFxcXFxcXFxcXFxcIm9wZW5EblBhZ2UoKVxcXFxcXFxcXFxcXFxcXCI+XFxcXFxcXFxuICAgICAgICAgICAgPGltZyBzcmM9XFxcXFxcXFxcXFxcXFxcImh0dHBzOi8vczMuYXgxeC5jb20vMjAyMS8wMi8yMi95N3diOU8uanBnXFxcXFxcXFxcXFxcXFxcIiBjbGFzcz1cXFxcXFxcXFxcXFxcXFwicm91bmRfaWNvblxcXFxcXFxcXFxcXFxcXCIgIGFsdD1cXFxcXFxcXFxcXFxcXFwiXFxcXFxcXFxcXFxcXFxcIj5cXFxcXFxcXG4gICAgICAgIDwvYT5cXFxcXFxcXG4gICAgICAgIDxzcGFuIHN0eWxlPVxcXFxcXFxcXFxcXFxcXCJsaW5lLWhlaWdodDo2MHB4O2ZvbnQtc2l6ZToxOHB4O2NvbG9yOiBncmV5O1xcXFxcXFxcXFxcXFxcXCI+Jm5ic3A7Jm5ic3A75patJm5ic3A75b+1PC9zcGFuPlxcXFxcXFxcbiAgICAgICAgPGEgc3R5bGU9XFxcXFxcXFxcXFxcXFxcImZsb2F0OnJpZ2h0O21hcmdpbi10b3A6NXB4O1xcXFxcXFxcXFxcXFxcXCI+XFxcXFxcXFxuICAgICAgICAgICAgPGJ1dHRvbiAgc3R5bGU9XFxcXFxcXFxcXFxcXFxcImJvcmRlcjogbm9uZTtib3JkZXItcmFkaXVzOjEwcHg7YmFja2dyb3VuZDogIzA1QkZDNTt3aWR0aDogMTg1cHg7aGVpZ2h0OjQwcHg7IGZvbnQtc2l6ZTogMThweDtjb2xvcjogI0Y5RjBEQTtcXFxcXFxcXFxcXFxcXFwiIG9uY2xpY2s9XFxcXFxcXFxcXFxcXFxcImNsaWNrbWUoJ+mFjSDnva4g5beyIOS/nSDlrZgg77yBJywgMTAwMCwgJ+WFsycpO1xcXFxcXFxcXFxcXFxcXCI+5L+d5a2Y6K6+572u5bm25YWz6Zet55WM6Z2iPC9idXR0b24+XFxcXFxcXFxuICAgICAgICA8L2E+XFxcXFxcXFxuICAgIDwvZGl2PlxcXFxcXFxcbiAgICA8ZGl2IGNsYXNzPVxcXFxcXFxcXFxcXFxcXCJ6ai1kaXZcXFxcXFxcXFxcXFxcXFwiPlxcXFxcXFxcbiAgICAgICAgPHVsIGNsYXNzPVxcXFxcXFxcXFxcXFxcXCJqeC11bFxcXFxcXFxcXFxcXFxcXCIgc3R5bGU9XFxcXFxcXFxcXFxcXFxcImhlaWdodDo0NDRweDtvdmVyZmxvdy15OmF1dG87XFxcXFxcXFxcXFxcXFxcIj5cXFxcXFxcXG4gICAgICAgICAgICA8bGkgY2xhc3M9XFxcXFxcXFxcXFxcXFxcIm15Q2hvaWNlXFxcXFxcXFxcXFxcXFxcIiBzdHlsZT1cXFxcXFxcXFxcXFxcXFwiei1pbmRleDo5OTk5O3Bvc2l0aW9uOiBmaXhlZDt3aWR0aDo3Ni41JTtjb2xvcjpyZWQ7XFxcXFxcXFxcXFxcXFxcIj48L2xpPlxcXFxcXFxcbiAgICAgICAgICAgIDxsaSBjbGFzcz1cXFxcXFxcXFxcXFxcXFwidXNlbGVzc1xcXFxcXFxcXFxcXFxcXCI+PC9saT5cXFxcXFxcXG4gICAgICAgICAgICA8bGkgY2xhc3M9XFxcXFxcXFxcXFxcXFxcInhsTGlzdFxcXFxcXFxcXFxcXFxcXCIgdi1mb3I9XFxcXFxcXFxcXFxcXFxcIml0ZW0gaW4ganhEYXRhXFxcXFxcXFxcXFxcXFxcIj57e2l0ZW19fTwvbGk+XFxcXFxcXFxuICAgICAgICA8L3VsPlxcXFxcXFxcbiAgICAgICAgPHVsIGNsYXNzPVxcXFxcXFxcXFxcXFxcXCJjai11bFxcXFxcXFxcXFxcXFxcXCI+XFxcXFxcXFxuICAgICAgICAgICAgPGxpIHN0eWxlPVxcXFxcXFxcXFxcXFxcXCJiYWNrZ3JvdW5kOmdyZXk7XFxcXFxcXFxcXFxcXFxcIj7or7fpgInmi6nmj5Lku7Y8L2xpPlxcXFxcXFxcbiAgICAgICAgICAgIDxsaSB2LWZvcj1cXFxcXFxcXFxcXFxcXFwiaXRlbSBpbiBjakRhdGFcXFxcXFxcXFxcXFxcXFwiPnt7aXRlbX19PC9saT5cXFxcXFxcXG4gICAgICAgIDwvdWw+XFxcXFxcXFxuICAgIDwvZGl2PlxcXFxcXFxcbjwvYm9keT5cXFxcXFxcXG48c2NyaXB0PlxcXFxcXFxcbiAgICB2YXIgc2V0dGluZ3MgPSB7XFxcXFxcXFxuICAgICAgICBxeTogJ3l1bjE3MTcnLFxcXFxcXFxcbiAgICAgICAgeWs6ICd5dW4xNzE3JyxcXFxcXFxcXG4gICAgICAgIHR4OiAneXVuMTcxNycsXFxcXFxcXFxuICAgICAgICBtZzogJ3l1bjE3MTcnLFxcXFxcXFxcbiAgICAgICAgYmw6ICd5dW4xNzE3JyxcXFxcXFxcXG4gICAgICAgIG90aDogJ3l1bjE3MTcnLFxcXFxcXFxcbiAgICAgICAgcWp1OiAnJyxcXFxcXFxcXG4gICAgICAgIGNqOiAnaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5qcydcXFxcXFxcXG4gICAgfTtcXFxcXFxcXG4gICAgZXZhbChmeV9icmlkZ2VfYXBwLmdldEludGVybmFsSnMoKSk7XFxcXFxcXFxuICAgIFxcXFxcXFxcbiAgICB2YXIgb2xkUm91dGUgPSBcXFxcXFxcXFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVBhcnNlU2V0Lmpzb25cXFxcXFxcXFxcXFxcXFwiO1xcXFxcXFxcbiAgICB2YXIgbXlTZXQgPSBmeV9icmlkZ2VfYXBwLmZldGNoKG9sZFJvdXRlKTtcXFxcXFxcXG4gICAgXFxcXFxcXFxuICAgIHZhciBuZXdSb3V0ZSA9IFxcXFxcXFxcXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL0R1YW5OaWFuL015UGFyc2UuanNvblxcXFxcXFxcXFxcXFxcXCI7XFxcXFxcXFxuICAgIHZhciBuZXdDb25maWcgPSBmeV9icmlkZ2VfYXBwLmZldGNoKG5ld1JvdXRlKTtcXFxcXFxcXG4gICAgdmFyIG15U2VsZWN0ID0gW107XFxcXFxcXFxuICAgIGlmKG5ld0NvbmZpZyAhPSBcXFxcXFxcXFxcXFxcXFwiXFxcXFxcXFxcXFxcXFxcIil7XFxcXFxcXFxuICAgICAgICBldmFsKFxcXFxcXFxcXFxcXFxcXCJuZXdDb25maWcgPVxcXFxcXFxcXFxcXFxcXCIgKyBuZXdDb25maWcgKyBcXFxcXFxcXFxcXFxcXFwiO1xcXFxcXFxcXFxcXFxcXCIpO1xcXFxcXFxcbiAgICAgICAgc2V0dGluZ3MgPSBuZXdDb25maWcuc2V0dGluZ3M7XFxcXFxcXFxuICAgICAgICB2YXIgeWNUaXRsZSA9IFsnZGVmYXVsdFBhcnNlJywgJ21hb3NzJywgJ0NpdHlJUCcsICdjYWNoZU0zdTgnLCAncGNVQScsICdwYXJzZUxjJywgJ2dwYXJzZScsICducGFyc2UnXTtcXFxcXFxcXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBuZXdDb25maWcudGl0bGUubGVuZ3RoOyBpKyspe1xcXFxcXFxcbiAgICAgICAgICAgIHZhciBUaXRsZXMgPSBuZXdDb25maWcudGl0bGVbaV07XFxcXFxcXFxuICAgICAgICAgICAgaWYoeWNUaXRsZS5pbmNsdWRlcyhUaXRsZXMpID09IGZhbHNlKXtcXFxcXFxcXG4gICAgICAgICAgICAgICAgbXlTZWxlY3QucHVzaChUaXRsZXMpO1xcXFxcXFxcbiAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgIH1cXFxcXFxcXG4gICAgfVxcXFxcXFxcbiAgICB2YXIgc2ZSZWZyZXNoID0gc2V0dGluZ3MuY2o7XFxcXFxcXFxuICAgIGZ1bmN0aW9uIERpZChpZCl7XFxcXFxcXFxuICAgICAgICByZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xcXFxcXFxcbiAgICB9XFxcXFxcXFxuICAgIFxcXFxcXFxcbiAgICBpZihteVNldCA9PSAnJyl7XFxcXFxcXFxuICAgICAgICBEaWQoXFxcXFxcXFxcXFxcXFxcImRpdjJcXFxcXFxcXFxcXFxcXFwiKS5pbnNlcnRBZGphY2VudEhUTUwoJ2FmdGVyQmVnaW4nLCdcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxuPGg0PuaPkOekuu+8mjxicj7ikaDms6jmhI/mj5Lku7bpgInpobnvvIzmsqHmnInmiYvliqjlr7zlhaXmj5Lku7bnmoTor53kuI3nlKjliqjlroPjgILlpoLorr7nva7kuI3lvZPkvJrlr7zoh7Top4TliJnml6Dms5Xkvb/nlKjvvIw8YnI+6Kej5Yaz5Yqe5rOV77ya6KeG55WM5omT5byA5pu05aSa6K6+572u4oaS5paH5Lu2566h55CG4oaS54K5Y2FjaGXihpLplb/mjIlNeVBhcnNlU2V0Lmpzb27liKDpmaTmjonvvJs8YnI+4pGh5YWo5bGA6K6+572u5aaC5p6c6YCJ5oup5LqG6Z2e6buY6K6k6YKj5LmI5YWo6YOo55qE6Kej5p6Q5Lya5L2/55So6L+Z5LiA6K6+572u77yM5LiN5oOz6L+Z5qC355qE6K+d6K+35aGr5YWl6buY6K6k77ybPGJyPuKRoue7v+iJsuS/neWtmOaMiemSruS7heS7heS/neWtmOmFjee9ruS4jeS8muWFs+mXreiuvue9rumhtemdou+8jOmFjee9ruWQjuaDs+S/neWtmOW5tuWFs+mXreiuvue9rumhtemdoueahOivneivt+eCueiTneiJsuaMiemSru+8mzxicj7ikaPpmIXor7vlrozmj5DnpLrngrnlhbPpl63liqDovb3lrozmlbTorr7nva7pobXpnaLvvIzlpoLlh7rpl67popjml6Dms5Xoh6rooYzop6PlhrPngrnlm77niYfov5vlhaXorrrlnZvlkJHmiJHlj43ppojjgII8YnI+PC9oND4nKTtcXFxcXFxcXG4gICAgfVxcXFxcXFxcbiAgICBcXFxcXFxcXG4gICAgdmFyIGJveERhdGEgPSBbXFxcXFxcXFxuICAgICAgICB7XFxcXFxcXFxuICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFxcXFxcXFxcXCLlpYcg5aWHXFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXG4gICAgICAgICAgICBpZDogXFxcXFxcXFxcXFxcXFxcInF5XFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXG4gICAgICAgICAgICB2YWx1ZTogc2V0dGluZ3MucXksXFxcXFxcXFxuICAgICAgICB9LCB7XFxcXFxcXFxuICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFxcXFxcXFxcXCLphbcg6YW3XFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXG4gICAgICAgICAgICBpZDogXFxcXFxcXFxcXFxcXFxcInlrXFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXG4gICAgICAgICAgICB2YWx1ZTogc2V0dGluZ3MueWssXFxcXFxcXFxuICAgICAgICB9LCB7XFxcXFxcXFxuICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFxcXFxcXFxcXCLohb4g6IW+XFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXG4gICAgICAgICAgICBpZDogXFxcXFxcXFxcXFxcXFxcInR4XFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXG4gICAgICAgICAgICB2YWx1ZTogc2V0dGluZ3MudHgsXFxcXFxcXFxuICAgICAgICB9LCB7XFxcXFxcXFxuICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFxcXFxcXFxcXCLmnpwg5p6cXFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXG4gICAgICAgICAgICBpZDogXFxcXFxcXFxcXFxcXFxcIm1nXFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXG4gICAgICAgICAgICB2YWx1ZTogc2V0dGluZ3MubWcsXFxcXFxcXFxuICAgICAgICB9LCB7XFxcXFxcXFxuICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFxcXFxcXFxcXCLlk6kg5ZOpXFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXG4gICAgICAgICAgICBpZDogXFxcXFxcXFxcXFxcXFxcImJsXFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXG4gICAgICAgICAgICB2YWx1ZTogc2V0dGluZ3MuYmwsXFxcXFxcXFxuICAgICAgICB9LCB7XFxcXFxcXFxuICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFxcXFxcXFxcXCLlhbYg5LuWXFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXG4gICAgICAgICAgICBpZDogXFxcXFxcXFxcXFxcXFxcIm90aFxcXFxcXFxcXFxcXFxcXCIsXFxcXFxcXFxuICAgICAgICAgICAgdmFsdWU6IHNldHRpbmdzLm90aCxcXFxcXFxcXG4gICAgICAgIH0sIHtcXFxcXFxcXG4gICAgICAgICAgICB0aXRsZTogXFxcXFxcXFxcXFxcXFxcIuWFqCDlsYBcXFxcXFxcXFxcXFxcXFwiLFxcXFxcXFxcbiAgICAgICAgICAgIGlkOiBcXFxcXFxcXFxcXFxcXFwicWp1XFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXG4gICAgICAgICAgICB2YWx1ZTogc2V0dGluZ3MucWp1LFxcXFxcXFxcbiAgICAgICAgfSwge1xcXFxcXFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcXFxcXFxcXFwi5o+SIOS7tlxcXFxcXFxcXFxcXFxcXCIsXFxcXFxcXFxuICAgICAgICAgICAgaWQ6IFxcXFxcXFxcXFxcXFxcXCJjalxcXFxcXFxcXFxcXFxcXCIsXFxcXFxcXFxuICAgICAgICAgICAgdmFsdWU6IHNldHRpbmdzLmNqLFxcXFxcXFxcbiAgICAgICAgfVxcXFxcXFxcbiAgICBdO1xcXFxcXFxcblxcXFxcXFxcbiAgICB2YXIgaW5wdXRCb3ggPSBcXFxcXFxcXFxcXFxcXFwiXFxcXFxcXFxcXFxcXFxcIjtcXFxcXFxcXG4gICAgZm9yKGxldCBpID0gMDsgaSA8IGJveERhdGEubGVuZ3RoOyBpKyspe1xcXFxcXFxcbiAgICAgICAgbGV0IGIgPSBib3hEYXRhW2ldO1xcXFxcXFxcbiAgICAgICAgaW5wdXRCb3ggKz0gJzxkaXYgY2xhc3M9XFxcXFxcXFxcXFxcXFxcImJveCBiYXJcXFxcXFxcXFxcXFxcXFwiPlxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXG4gICAgICAgICAgICA8Zm9ybT5cXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxuICAgICAgICAgICAgICAgIDxsYWJlbCB0eXBlPVxcXFxcXFxcXFxcXFxcXCJzdWJtaXRcXFxcXFxcXFxcXFxcXFwiPicgKyBiLnRpdGxlICsgJzwvbGFiZWw+XFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cXFxcXFxcXFxcXFxcXFwidGV4dFxcXFxcXFxcXFxcXFxcXCIgcGxhY2Vob2xkZXI9XFxcXFxcXFxcXFxcXFxcIui+k+WFpeino+aekOWQjeaIluiAhVVSTC4uLi4uLlxcXFxcXFxcXFxcXFxcXCIgdmFsdWU9XFxcXFxcXFxcXFxcXFxcIicgKyBiLnZhbHVlICsgJ1xcXFxcXFxcXFxcXFxcXCIgaWQ9XFxcXFxcXFxcXFxcXFxcIicgKyBiLmlkICsgJ1xcXFxcXFxcXFxcXFxcXCI+XFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcbiAgICAgICAgICAgIDwvZm9ybT5cXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFxcXFxcXFxcXFxcXFwibGllYlxcXFxcXFxcXFxcXFxcXCI+XFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPVxcXFxcXFxcXFxcXFxcXCInICsgYi5pZCArICdTZWxlY3RcXFxcXFxcXFxcXFxcXFwiPuKYsDwvYnV0dG9uPlxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXG4gICAgICAgICAgICA8L2Rpdj5cXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxuICAgICAgICA8L2Rpdj4nO1xcXFxcXFxcbiAgICB9XFxcXFxcXFxuICAgIERpZChcXFxcXFxcXFxcXFxcXFwiZGl2MlxcXFxcXFxcXFxcXFxcXCIpLmluc2VydEFkamFjZW50SFRNTCgnYWZ0ZXJlbmQnLCBpbnB1dEJveCk7XFxcXFxcXFxuICAgIERpZChcXFxcXFxcXFxcXFxcXFwiY2pcXFxcXFxcXFxcXFxcXFwiKS5wbGFjZWhvbGRlciA9IFxcXFxcXFxcXFxcXFxcXCLovpPlhaXmj5Lku7blnLDlnYAuLi4uLi5cXFxcXFxcXFxcXFxcXFwiO1xcXFxcXFxcbiAgICBEaWQoXFxcXFxcXFxcXFxcXFxcInFqdVxcXFxcXFxcXFxcXFxcXCIpLnBsYWNlaG9sZGVyID0gXFxcXFxcXFxcXFxcXFxcIuatpOmhueW7uuiurueVmeepuuaIluiAheWhq+m7mOiupOS4pOS4quWtl1xcXFxcXFxcXFxcXFxcXCI7XFxcXFxcXFxuICAgIFxcXFxcXFxcbiAgICBuZXcgVnVlKHtcXFxcXFxcXG4gICAgICAgIGVsOiBcXFxcXFxcXFxcXFxcXFwiLnpqLWRpdlxcXFxcXFxcXFxcXFxcXCIsXFxcXFxcXFxuICAgICAgICBkYXRhOiB7XFxcXFxcXFxuICAgICAgICAgICAganhEYXRhOiBteVNlbGVjdCxcXFxcXFxcXG4gICAgICAgICAgICBjakRhdGE6IFtcXFxcXFxcXFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5qc1xcXFxcXFxcXFxcXFxcXCIsIFxcXFxcXFxcXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2R6SG91c2UvanMvc3JjYXV0by5qc1xcXFxcXFxcXFxcXFxcXCIsIFxcXFxcXFxcXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2pzL1BhcnNlLVYyX0RuLmpzXFxcXFxcXFxcXFxcXFxcIl1cXFxcXFxcXG4gICAgICAgIH1cXFxcXFxcXG4gICAgfSk7XFxcXFxcXFxuXFxcXFxcXFxuICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkge1xcXFxcXFxcbiAgICAgICAgdmFyIGxlbiA9ICQoJy5qeC11bCcpLmNoaWxkcmVuKCdsaScpLmxlbmd0aDtcXFxcXFxcXG4gICAgICAgIHZhciBsZW4yID0gJCgnLmNqLXVsJykuY2hpbGRyZW4oJ2xpJykubGVuZ3RoO1xcXFxcXFxcbiAgICAgICAgJCgnLmxpZWIgYnV0dG9uJykuY2xpY2soZnVuY3Rpb24oZSkge1xcXFxcXFxcbiAgICAgICAgICAgIGlmKCQoJy5saWViIGJ1dHRvbicpLnRleHQoKS5pbmNsdWRlcygn4pSBJykpe1xcXFxcXFxcbiAgICAgICAgICAgICAgICAkKCcubGllYiBidXR0b24nKS5jc3MoJ2JhY2tncm91bmQnLCAnJyk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICQoJy5saWViIGJ1dHRvbicpLnRleHQoJ+KYsCcpO1xcXFxcXFxcbiAgICAgICAgICAgIH1lbHNle1xcXFxcXFxcbiAgICAgICAgICAgICAgICAkKHRoaXMpLnRleHQoJ+KUgScpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAkKHRoaXMpLmNzcygnYmFja2dyb3VuZCcsICdyZWQnKTtcXFxcXFxcXG4gICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgJCgnbGknKS5hdHRyKCdjaGVjaycsICdmYWxzZScpO1xcXFxcXFxcbiAgICAgICAgICAgIHZhciBpbnB1dGlkID0gXFxcXFxcXFxcXFxcXFxcIiNcXFxcXFxcXFxcXFxcXFwiICsgdGhpcy5pZC5zcGxpdChcXFxcXFxcXFxcXFxcXFwiU2VsZWN0XFxcXFxcXFxcXFxcXFxcIilbMF07XFxcXFxcXFxuICAgICAgICAgICAgdmFyIGFyciA9ICQoaW5wdXRpZCkudmFsKCkuc3BsaXQoJywnKTtcXFxcXFxcXG4gICAgICAgICAgICBhcnIgPSBhcnJbMF0gPT0gJycgPyBbXSA6IGFycjtcXFxcXFxcXG4gICAgICAgICAgICAkKCcubXlDaG9pY2UnKS50ZXh0KGFycik7XFxcXFxcXFxuICAgICAgICAgICAgaWYgKGlucHV0aWQgIT09ICcjY2onICYmICQoJy5jai11bCcpLmNzcygnZGlzcGxheScpPT0nbm9uZScpIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgJCgnLmp4LXVsJykuc2xpZGVUb2dnbGUoKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBsZW47IGkrKykge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgdmFyIGp4TGlzdCA9ICQoJy5qeC11bCBsaTpub3QoLm15Q2hvaWNlKScpLmVxKGkpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyci5pbmNsdWRlcyhqeExpc3QudGV4dCgpKSkge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGp4TGlzdC5hdHRyKCdjaGVjaycsICd0cnVlJyk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBqeExpc3QudW5iaW5kKCdjbGljaycpLmNsaWNrKGZ1bmN0aW9uKGUpIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkKHRoaXMpLmF0dHIoJ2NoZWNrJykgIT09IFxcXFxcXFxcXFxcXFxcXCJ0cnVlXFxcXFxcXFxcXFxcXFxcIikge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmF0dHIoJ2NoZWNrJywgJ3RydWUnKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnVuc2hpZnQoJCh0aGlzKS50ZXh0KCkpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGlucHV0aWQpLnZhbChhcnIpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcubXlDaG9pY2UnKS50ZXh0KGFycik7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5hdHRyKCdjaGVjaycsICdmYWxzZScpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBhID0gMDsgYSA8IGFyci5sZW5ndGg7IGErKykge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyclthXSA9PSAkKHRoaXMpLnRleHQoKSkge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyci5zcGxpY2UoYSwgMSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChpbnB1dGlkKS52YWwoYXJyKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcubXlDaG9pY2UnKS50ZXh0KGFycik7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICB9KVxcXFxcXFxcbiAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgfSBlbHNlIGlmKCQoJy5qeC11bCcpLmNzcygnZGlzcGxheScpPT0nbm9uZScpe1xcXFxcXFxcbiAgICAgICAgICAgICAgICAkKCcuY2otdWwnKS5zbGlkZVRvZ2dsZSgpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjI7IGkrKykge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNqTGlzdCA9ICQoJy5jai11bCBsaScpLmVxKGkpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKCQoaW5wdXRpZCkudmFsKCkgPT0gY2pMaXN0LnRleHQoKSkge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNqTGlzdC5hdHRyKCdjaGVjaycsICd0cnVlJyk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBjakxpc3QudW5iaW5kKCdjbGljaycpLmNsaWNrKGZ1bmN0aW9uKCkge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpICE9PSAwKSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoaW5wdXRpZCkudmFsKCQodGhpcykudGV4dCgpKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5hdHRyKCdjaGVjaycsICd0cnVlJyk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuc2libGluZ3MoKS5hdHRyKCdjaGVjaycsICdmYWxzZScpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxcXFxcXFxuICAgICAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICB9KTtcXFxcXFxcXG4gICAgICAgICQoZG9jdW1lbnQpLm5vdCgkKCcueGxMaXN0JykpLmNsaWNrKGZ1bmN0aW9uKGUpIHtcXFxcXFxcXG4gICAgICAgICAgICAkKCcuangtdWwnKS5zbGlkZVVwKCk7XFxcXFxcXFxuICAgICAgICAgICAgJCgnLmNqLXVsJykuc2xpZGVVcCgpO1xcXFxcXFxcbiAgICAgICAgICAgICQoJy5saWViIGJ1dHRvbicpLnRleHQoJ+KYsCcpO1xcXFxcXFxcbiAgICAgICAgICAgICQoJy5saWViIGJ1dHRvbicpLmNzcygnYmFja2dyb3VuZCcsICcnKTtcXFxcXFxcXG4gICAgICAgIH0pXFxcXFxcXFxuICAgICAgICAkKCdsYWJlbCcpLmRibGNsaWNrKGZ1bmN0aW9uKCl7XFxcXFxcXFxuICAgICAgICAgICAgbGV0IGlucHV0aWQgPSAnIycgKyAkKHRoaXMpLm5leHQoKS5hdHRyKCdpZCcpO1xcXFxcXFxcbiAgICAgICAgICAgICQoaW5wdXRpZCkudmFsKCcnKTtcXFxcXFxcXG4gICAgICAgIH0pXFxcXFxcXFxuICAgIH0pXFxcXFxcXFxuICAgIFxcXFxcXFxcbiAgICBmdW5jdGlvbiBUb2FzdChtc2csZHVyYXRpb24peyAgXFxcXFxcXFxuICAgICAgICBkdXJhdGlvbj1pc05hTihkdXJhdGlvbik/MjAwMDpkdXJhdGlvbjsgIFxcXFxcXFxcbiAgICAgICAgdmFyIG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsgIFxcXFxcXFxcbiAgICAgICAgbS5pbm5lckhUTUwgPSBtc2c7ICBcXFxcXFxcXG4gICAgICAgIG0uc3R5bGUuY3NzVGV4dD1cXFxcXFxcXFxcXFxcXFwid2lkdGg6NDUlOyBtaW4td2lkdGg6MTUwcHg7IGJhY2tncm91bmQ6IzMxMTsgb3BhY2l0eTowLjY7IGhlaWdodDphdXRvO21pbi1oZWlnaHQ6IDQ1cHg7IGNvbG9yOiNmZmY7IGxpbmUtaGVpZ2h0OjQ1cHg7IHRleHQtYWxpZ246Y2VudGVyOyBib3JkZXItcmFkaXVzOjEwcHg7IHBvc2l0aW9uOmZpeGVkOyB0b3A6NjAlOyBsZWZ0OjI2JTsgei1pbmRleDo5OTk5OTk7XFxcXFxcXFxcXFxcXFxcIjsgIFxcXFxcXFxcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChtKTsgIFxcXFxcXFxcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgIFxcXFxcXFxcbiAgICAgICAgICAgIHZhciBkID0gMC41OyAgXFxcXFxcXFxuICAgICAgICAgICAgbS5zdHlsZS53ZWJraXRUcmFuc2l0aW9uID0gJy13ZWJraXQtdHJhbnNmb3JtICcgKyBkICsgJ3MgZWFzZS1pbiwgb3BhY2l0eSAnICsgZCArICdzIGVhc2UtaW4nOyAgXFxcXFxcXFxuICAgICAgICAgICAgbS5zdHlsZS5vcGFjaXR5ID0gJzAnOyAgXFxcXFxcXFxuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChtKSB9LCBkICogMTAwMCk7ICBcXFxcXFxcXG4gICAgICAgIH0sIGR1cmF0aW9uKTsgIFxcXFxcXFxcbiAgICB9ICBcXFxcXFxcXG5cXFxcXFxcXG4gICAgZnVuY3Rpb24gb3BlbkRuUGFnZSgpe1xcXFxcXFxcbiAgICAgICAgZmJhLm9wZW4oSlNPTi5zdHJpbmdpZnkoe1xcXFxcXFxcbiAgICAgICAgICAgIHJ1bGU6IFxcXFxcXFxcXFxcXFxcXCI9Xl9ePVxcXFxcXFxcXFxcXFxcXCIsXFxcXFxcXFxuICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFxcXFxcXFxcXCLnrqHnkIbop6PmnpBcXFxcXFxcXFxcXFxcXFwiLFxcXFxcXFxcbiAgICAgICAgICAgIHVybDogXFxcXFxcXFxcXFxcXFxcImhpa2VyOi8vcGFnZS9Sb3V0ZT9ydWxlPU15RmllbGThtLDigb8mdHlwZT3nvJbovpEjbm9IaXN0b3J5I1xcXFxcXFxcXFxcXFxcXCIsXFxcXFxcXFxuICAgICAgICAgICAgZ3JvdXA6IFxcXFxcXFxcXFxcXFxcXCJcXFxcXFxcXFxcXFxcXFwiLFxcXFxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcXFxcXFxcXFwiXFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXG4gICAgICAgICAgICAvL2ZpbmRSdWxlOiBcXFxcXFxcXFxcXFxcXFwianM6dGhpcy5kPVtdOyQucmVxdWlyZShcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcImhpa2VyOi8vcGFnZS9QYXJzZV9Ebi5qcz9ydWxlPU15RmllbGThtLDigb9cXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcIikuZWRpdCgpO3NldFJlc3VsdChkKTtcXFxcXFxcXFxcXFxcXFwiLFxcXFxcXFxcbiAgICAgICAgICAgIHByZVJ1bGU6IFxcXFxcXFxcXFxcXFxcXCJcXFxcXFxcXFxcXFxcXFwiLFxcXFxcXFxcbiAgICAgICAgICAgIGV4dHJhOiB7fVxcXFxcXFxcbiAgICAgICAgfSkpO1xcXFxcXFxcbiAgICB9XFxcXFxcXFxuICAgIGZ1bmN0aW9uIGNhbmNlbCgpe1xcXFxcXFxcbiAgICAgICAgaWYobXlTZXQ9PScnKXtcXFxcXFxcXG4gICAgICAgICAgICBmeV9icmlkZ2VfYXBwLndyaXRlRmlsZShvbGRSb3V0ZSwgSlNPTi5zdHJpbmdpZnkoc2V0dGluZ3MsIG51bGwsIDQpKTtcXFxcXFxcXG4gICAgICAgICAgICBmeV9icmlkZ2VfYXBwLnJlZnJlc2hQYWdlKHRydWUpO1xcXFxcXFxcbiAgICAgICAgfWVsc2V7XFxcXFxcXFxuICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC5iYWNrKGZhbHNlKTtcXFxcXFxcXG4gICAgICAgIH1cXFxcXFxcXG4gICAgfVxcXFxcXFxcbiAgICBmdW5jdGlvbiBjbGlja21lKG1zZyxkdXJhdGlvbix0aXRsZSl7XFxcXFxcXFxuICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgYm94RGF0YS5sZW5ndGg7IGkrKyl7XFxcXFxcXFxuICAgICAgICAgICAgbGV0IGlkID0gYm94RGF0YVtpXS5pZDtcXFxcXFxcXG4gICAgICAgICAgICBzZXR0aW5nc1tpZF0gPSBEaWQoaWQpLnZhbHVlO1xcXFxcXFxcbiAgICAgICAgICAgIGlmKHNldHRpbmdzLnFqdSA9PSAnJyl7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHNldHRpbmdzLnFqdSA9ICfpu5jorqQnO1xcXFxcXFxcbiAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgIH1cXFxcXFxcXG4gICAgICAgIGlmIChteVNlbGVjdFswXSAhPSB1bmRlZmluZWQpIHtcXFxcXFxcXG4gICAgICAgICAgICBldmFsKCd2YXIgYmNDb25maWc9JyArIGZ5X2JyaWRnZV9hcHAuZmV0Y2gobmV3Um91dGUpKTtcXFxcXFxcXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGJjQ29uZmlnLnNldHRpbmdzLCBzZXR0aW5ncyk7XFxcXFxcXFxuICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC53cml0ZUZpbGUobmV3Um91dGUsICQkJC5zdHJpbmdpZnkoYmNDb25maWcpKTtcXFxcXFxcXG4gICAgICAgIH1cXFxcXFxcXG4gICAgICAgIGZ5X2JyaWRnZV9hcHAud3JpdGVGaWxlKG9sZFJvdXRlLCAkJCQuc3RyaW5naWZ5KHNldHRpbmdzKSk7XFxcXFxcXFxuICAgICAgICAgICAgXFxcXFxcXFxuICAgICAgICBUb2FzdChtc2csZHVyYXRpb24pO1xcXFxcXFxcbiAgICAgICAgaWYodGl0bGU9PVxcXFxcXFxcXFxcXFxcXCLlhbNcXFxcXFxcXFxcXFxcXFwiKXtcXFxcXFxcXG4gICAgICAgICAgICBpZihzZlJlZnJlc2ggIT0gRGlkKFxcXFxcXFxcXFxcXFxcXCJjalxcXFxcXFxcXFxcXFxcXCIpLnZhbHVlKXtcXFxcXFxcXG4gICAgICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC5iYWNrKCk7XFxcXFxcXFxuICAgICAgICAgICAgfWVsc2V7XFxcXFxcXFxuICAgICAgICAgICAgICAgIGZ5X2JyaWRnZV9hcHAuYmFjayhmYWxzZSk7XFxcXFxcXFxuICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgfWVsc2V7XFxcXFxcXFxuICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC5yZWZyZXNoUGFnZSh0cnVlKTtcXFxcXFxcXG4gICAgICAgIH1cXFxcXFxcXG4gICAgfVxcXFxcXFxcblxcXFxcXFxcbjwvc2NyaXB0PiAgIFxcXFxcXFxcbjwvaHRtbD5cXFxcXFxcIn0se1xcXFxcXFwiY29sX3R5cGVcXFxcXFxcIjpcXFxcXFxcIm1vdmllXzNcXFxcXFxcIixcXFxcXFxcIm5hbWVcXFxcXFxcIjpcXFxcXFxcIlBhcnNlX0RuLmpzXFxcXFxcXCIsXFxcXFxcXCJwYXRoXFxcXFxcXCI6XFxcXFxcXCJQYXJzZV9Ebi5qc1xcXFxcXFwiLFxcXFxcXFwicnVsZVxcXFxcXFwiOlxcXFxcXFwiLy89PT09PT09PT09PT3lhY3ll4XosIPnlKg9PT09PT09PT09PT1cXFxcXFxcXG4vL++8je+8je+8jT1eX149XFxcXFxcXFxuXFxcXFxcXFxudmFyIHZlcnNpb24gPSBcXFxcXFxcXFxcXFxcXFwiMy41LjFcXFxcXFxcXFxcXFxcXFwiO1xcXFxcXFxcbnZhciB1cGRhdGVEYXRlID0gJzIwMjEvMTAvMzAvMjI6MjInO1xcXFxcXFxcbnZhciBfbXlTZXQgPSB7XFxcXFxcXFxuICAgIHFqdTogJ+m7mOiupCcsXFxcXFxcXFxuICAgIGNqY2FjaGU6ICdoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmpzJyxcXFxcXFxcXG4gICAgeDVjYWNoZTogJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uaHRtbCcsXFxcXFxcXFxuICAgIG9sZENvbmZpZzogJ2hpa2VyOi8vZmlsZXMvY2FjaGUvTXlQYXJzZVNldC5qc29uJyxcXFxcXFxcXG4gICAgY2tMaW5rOiAnaHR0cHM6Ly9jb2RlLmFsaXl1bi5jb20vQUk5NTcvSGlrZXIvcmF3L21hc3Rlci92LycsXFxcXFxcXFxuICAgIGNqOiAnaHR0cHM6Ly9jb2RlLmFsaXl1bi5jb20vQUk5NTcvSGlrZXIvcmF3L21hc3Rlci92L0Nsb3VkUGFyc2UtVjJfRG4uanMnLFxcXFxcXFxcbiAgICB4NVVybDogJ2h0dHBzOi8vY29kZS5hbGl5dW4uY29tL0FJOTU3L0hpa2VyL3Jhdy9tYXN0ZXIvdi9QYXJzZV9Ebi5odG1sJyxcXFxcXFxcXG4gICAgcGFyc2VSb3V0ZTogJ2hpa2VyOi8vZmlsZXMvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uJyxcXFxcXFxcXG4gICAgeDVSb3V0ZTogJ2ZpbGU6Ly8vc3RvcmFnZS9lbXVsYXRlZC8wL0FuZHJvaWQvZGF0YS9jb20uZXhhbXBsZS5oaWtlcnZpZXcvZmlsZXMvRG9jdW1lbnRzL2NhY2hlL1BhcnNlX0RuLmh0bWwnXFxcXFxcXFxufTtcXFxcXFxcXG52YXIgTXlQYXJzZVMgPSB7fTtcXFxcXFxcXG52YXIgbXlTZXQgPSBfbXlTZXQ7XFxcXFxcXFxuaWYgKGZpbGVFeGlzdChfbXlTZXQucGFyc2VSb3V0ZSkpIHtcXFxcXFxcXG4gICAgZXZhbCgndmFyIHBhcnNlRmlsZSA9JyArIGZldGNoKF9teVNldC5wYXJzZVJvdXRlKSk7XFxcXFxcXFxuICAgIE15UGFyc2VTID0gcGFyc2VGaWxlLmNvZGVzO1xcXFxcXFxcbiAgICBteVNldCA9IHBhcnNlRmlsZS5zZXR0aW5ncztcXFxcXFxcXG59XFxcXFxcXFxuXFxcXFxcXFxudmFyIHBhcnNlVGl0bGUgPSBbXFxcXFxcXFxuICAgIFxcXFxcXFxcXFxcXFxcXCJ5dW4xNzE3XFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXG4gICAgXFxcXFxcXFxcXFxcXFxcIlBhbkd1XFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXG4gICAgXFxcXFxcXFxcXFxcXFxcIkZ1WGluZ1xcXFxcXFxcXFxcXFxcXCIsXFxcXFxcXFxuICAgIFxcXFxcXFxcXFxcXFxcXCJodHRwczovL2p4eC5zbXlzOC5jbi9pbmRleC5waHA/dXJsPVxcXFxcXFxcXFxcXFxcXCIsXFxcXFxcXFxuICAgIFxcXFxcXFxcXFxcXFxcXCJodHRwczovL29ranguY2MvP3VybD1cXFxcXFxcXFxcXFxcXFwiLFxcXFxcXFxcbiAgICBcXFxcXFxcXFxcXFxcXFwiaHR0cHM6Ly9qeC5tM3U4LnR2L2ppZXhpLz91cmw9XFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXG4gICAgXFxcXFxcXFxcXFxcXFxcImh0dHBzOi8vc2IuNWdzZW8ubmV0Lz91cmw9XFxcXFxcXFxcXFxcXFxcIlxcXFxcXFxcbl07XFxcXFxcXFxuXFxcXFxcXFxuLy/vvI3vvI3vvI09Xl9ePVxcXFxcXFxcblxcXFxcXFxcbi8v5o6l5Y+j6K6+572uLlxcXFxcXFxcblxcXFxcXFxcbnZhciBzZXRVcmwgPSBcXFxcXFxcXFxcXFxcXFwiaGlrZXI6Ly9wYWdlL1JvdXRlP3J1bGU9TXlGaWVsZOG0sOKBvyZ0eXBlPeiuvue9riNub1JlY29yZEhpc3RvcnkjXFxcXFxcXFxcXFxcXFxcIjtcXFxcXFxcXG52YXIgc2V0X3N3aXRjaCA9IHNldFVybDtcXFxcXFxcXG52YXIgbGF6eSA9IGBldmFsKCd2YXIgY29uZmlnID0nICsgZmV0Y2goZ2V0VmFyKCdvbGRDb25maWcnKSkpO2V2YWwoZmV0Y2goY29uZmlnLmNqKSk7YXl0bVBhcnNlKGlucHV0KWA7XFxcXFxcXFxuXFxcXFxcXFxuLy92YXIgcGFyd2l4ID0gYHZhciB5dXJsPSdodHRwczovL2RhaWxpLm1heWl4aW9uZ2RpLmNuLz91cmw9JztSZWZlcmVyJzogJ2h0dHBzOi8vd3d3Lm1heWl4aW9uZ2RpLmNuL3lzP2lkPSc7J2h0dHBzOi8vZGFpbGkubWF5aXhpb25nZGkuY24vYXBpLnBocCcsICdSZWZlcmVyJzonaHR0cHM6Ly9kYWlsaS5tYXlpeGlvbmdkaS5jbic7XFxcXFxcXFxuLy8g5YWo5rCRaHR0cHM6Ly9wY3ZpZGVvYWxpeXVuLnRpYW5zaGFuZ3JlbmppYW4ubWd0di5jb20uODh3dW1hLmNvbS8/dXJsPVxcXFxcXFxcblxcXFxcXFxcbi8v77yN77yN77yN5aSHIOeUqO+8je+8je+8jVxcXFxcXFxcbi8qXFxcXFxcXFxuICog5b2x6KeG5bel5Zy677yaIGh0dHBzOi8veXNnYy5jYy9cXFxcXFxcXG4gKiDmsZ/muZY6IDU1NeeUteW9sSBodHRwczovL3d3dy41NTVkeTIuY29tL3Bob25lLmh0bWwg772cIDE355yLIGh0dHA6Ly8xN2thbnl5LmNuLyBodHRwOi8vamhqaWV4aS4zMHZyLmNuLz91cmw9IO+9nCBodHRwOi8vYXBpLm1haXppbWFsbC5jb20vaW5kZXgucGhwP3VybD1cXFxcXFxcXG4gKiDmsZ/muZY6IGh0dHA6Ly93d3cudGlhbnNodXl1bi5uZXQvaW5kZXgucGhwL3ZvZC9wbGF5L2lkLzQ0ODM3Ny9zaWQvMS9uaWQvMS5odG1sXFxcXFxcXFxuICog5rGf5rmWMjogaHR0cDovLzk4aHlrLmNuL2luZGV4LnBocC92b2QvcGxheS9pZC83Mjg0MS9zaWQvMS9uaWQvMS5odG1sXFxcXFxcXFxuICog5Lq65Lq66L+3OiBodHRwczovL3ZpcC5zdXNvdS50di9wbGF5ZXIvP3VybD0g772cIGh0dHBzOi8vd3d3Lm1vbWRtLmNjL1xcXFxcXFxcbiAqIFxcXFxcXFxcbiAqIHd1aWdlbjogaHR0cHM6Ly93d3cuNWlnZW4uY29tL2RtcGxheWVyL3BsYXllci8/dXJsPVxcXFxcXFxcbiAqIOW5sumlrSjkurrkurrov7cpOiBodHRwczovL2p4Lnp1aS5jbS8/dXJsPVxcXFxcXFxcbiAqIGh0dHBzOi8vMi42Nm1vdmllLnRvcC9wbGF5ZXIvP3VybD1cXFxcXFxcXG4gKiBcXFxcXFxcXG4gKi9cXFxcXFxcXG5cXFxcXFxcXG5cXFxcXFxcXG52YXIgdG9vbHMgPSB7XFxcXFxcXFxuICAgIE1ENTogZnVuY3Rpb24oZGF0YSkge1xcXFxcXFxcbiAgICAgICAgZXZhbChnZXRDcnlwdG9KUygpKTtcXFxcXFxcXG4gICAgICAgIHJldHVybiBDcnlwdG9KUy5NRDUoZGF0YSkudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLkhleCk7XFxcXFxcXFxuICAgIH0sXFxcXFxcXFxuICAgIEFFUzogZnVuY3Rpb24odGV4dCwga2V5LCBpdiwgaXNFbmNyeXB0KSB7XFxcXFxcXFxuICAgICAgICBldmFsKGdldENyeXB0b0pTKCkpO1xcXFxcXFxcbiAgICAgICAgdmFyIGtleSA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKGtleSk7XFxcXFxcXFxuICAgICAgICB2YXIgaXYgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShpdik7XFxcXFxcXFxuICAgICAgICBpZiAoaXNFbmNyeXB0KSB7XFxcXFxcXFxuICAgICAgICAgICAgcmV0dXJuIENyeXB0b0pTLkFFUy5lbmNyeXB0KHRleHQsIGtleSwge1xcXFxcXFxcbiAgICAgICAgICAgICAgICBpdjogaXYsXFxcXFxcXFxuICAgICAgICAgICAgICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLFxcXFxcXFxcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiBDcnlwdG9KUy5wYWQuUGtjczdcXFxcXFxcXG4gICAgICAgICAgICB9KS50b1N0cmluZygpO1xcXFxcXFxcbiAgICAgICAgfTtcXFxcXFxcXG4gICAgICAgIHJldHVybiBDcnlwdG9KUy5BRVMuZGVjcnlwdCh0ZXh0LCBrZXksIHtcXFxcXFxcXG4gICAgICAgICAgICBpdjogaXYsXFxcXFxcXFxuICAgICAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBrY3M3XFxcXFxcXFxuICAgICAgICB9KS50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCk7XFxcXFxcXFxuICAgIH0sXFxcXFxcXFxuICAgIC8vYXNjaWlcXFxcXFxcXG4gICAgbmV4dENoYXJhY3RlcjogZnVuY3Rpb24oYXNjaWlWYWx1ZSwgaykge1xcXFxcXFxcbiAgICAgICAgdmFyIHMgPSBhc2NpaVZhbHVlO1xcXFxcXFxcbiAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocyArIGspO1xcXFxcXFxcbiAgICB9LFxcXFxcXFxcbiAgICAvL+WHr+aSklxcXFxcXFxcbiAgICBjYWVzYXJDaXBoZXI6IGZ1bmN0aW9uKHN0cmluZ1ZhbHVlLCBrKSB7XFxcXFxcXFxuICAgICAgICB2YXIgbmV3U3RyaW5nID0gXFxcXFxcXFxcXFxcXFxcIlxcXFxcXFxcXFxcXFxcXCI7XFxcXFxcXFxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cmluZ1ZhbHVlLmxlbmd0aDsgaSsrKSB7XFxcXFxcXFxuICAgICAgICAgICAgbmV3U3RyaW5nICs9IHRoaXMubmV4dENoYXJhY3RlcihzdHJpbmdWYWx1ZVtpXS5jaGFyQ29kZUF0KCksIGspO1xcXFxcXFxcbiAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgcmV0dXJuIG5ld1N0cmluZztcXFxcXFxcXG4gICAgfSxcXFxcXFxcXG4gICAgbm93RGF0ZTogZnVuY3Rpb24oKSB7XFxcXFxcXFxuICAgICAgICB2YXIgZGF0ZTEgPSBuZXcgRGF0ZSgpO1xcXFxcXFxcbiAgICAgICAgdmFyIGRhdGVTdHIgPSBcXFxcXFxcXFxcXFxcXFwiXFxcXFxcXFxcXFxcXFxcIjtcXFxcXFxcXG4gICAgICAgIGlmIChkYXRlMSkge1xcXFxcXFxcbiAgICAgICAgICAgIGRhdGVTdHIgPSBkYXRlMS5nZXRGdWxsWWVhcigpO1xcXFxcXFxcbiAgICAgICAgICAgIHZhciBtb250aCA9IGRhdGUxLmdldE1vbnRoKCkgKyAxO1xcXFxcXFxcbiAgICAgICAgICAgIHZhciBkYXkgPSBkYXRlMS5nZXREYXRlKCk7XFxcXFxcXFxuICAgICAgICAgICAgaWYgKG1vbnRoIDwgMTApIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgZGF0ZVN0ciArPSBcXFxcXFxcXFxcXFxcXFwiLTBcXFxcXFxcXFxcXFxcXFwiICsgbW9udGg7XFxcXFxcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgZGF0ZVN0ciArPSBcXFxcXFxcXFxcXFxcXFwiLVxcXFxcXFxcXFxcXFxcXCIgKyBtb250aDtcXFxcXFxcXG4gICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgaWYgKGRheSA8IDEwKSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgIGRhdGVTdHIgKz0gXFxcXFxcXFxcXFxcXFxcIi0wXFxcXFxcXFxcXFxcXFxcIiArIGRheTtcXFxcXFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxcXFxcbiAgICAgICAgICAgICAgICBkYXRlU3RyICs9IFxcXFxcXFxcXFxcXFxcXCItXFxcXFxcXFxcXFxcXFxcIiArIGRheTtcXFxcXFxcXG4gICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICB9XFxcXFxcXFxuICAgICAgICByZXR1cm4gZGF0ZVN0cjtcXFxcXFxcXG4gICAgfSxcXFxcXFxcXG4gICAgdG9KU09OOiBmdW5jdGlvbihqc29uKSB7XFxcXFxcXFxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoanNvbiwgKGtleSwgdmFsdWUpID0+IHtcXFxcXFxcXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09ICdmdW5jdGlvbicpIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XFxcXFxcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xcXFxcXFxcbiAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgIH0sIDQpO1xcXFxcXFxcbiAgICB9LFxcXFxcXFxcbiAgICB0b1ZOdW06IGZ1bmN0aW9uKGEpIHtcXFxcXFxcXG4gICAgICAgIHZhciBhID0gYS50b1N0cmluZygpO1xcXFxcXFxcbiAgICAgICAgdmFyIGMgPSBhLnNwbGl0KCcuJyk7XFxcXFxcXFxuICAgICAgICB2YXIgbnVtX3BsYWNlID0gW1xcXFxcXFxcXFxcXFxcXCJcXFxcXFxcXFxcXFxcXFwiLCBcXFxcXFxcXFxcXFxcXFwiMFxcXFxcXFxcXFxcXFxcXCIsIFxcXFxcXFxcXFxcXFxcXCIwMFxcXFxcXFxcXFxcXFxcXCIsIFxcXFxcXFxcXFxcXFxcXCIwMDBcXFxcXFxcXFxcXFxcXFwiLCBcXFxcXFxcXFxcXFxcXFwiMDAwMFxcXFxcXFxcXFxcXFxcXCJdLFxcXFxcXFxcbiAgICAgICAgICAgIHIgPSBudW1fcGxhY2UucmV2ZXJzZSgpO1xcXFxcXFxcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjLmxlbmd0aDsgaSsrKSB7XFxcXFxcXFxuICAgICAgICAgICAgdmFyIGxlbiA9IGNbaV0ubGVuZ3RoO1xcXFxcXFxcbiAgICAgICAgICAgIGNbaV0gPSByW2xlbl0gKyBjW2ldO1xcXFxcXFxcbiAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgdmFyIHJlcyA9IGMuam9pbignJyk7XFxcXFxcXFxuICAgICAgICByZXR1cm4gcmVzO1xcXFxcXFxcbiAgICB9LFxcXFxcXFxcbiAgICBjcHJWZXJzaW9uOiBmdW5jdGlvbihhLCBiKSB7XFxcXFxcXFxuICAgICAgICB2YXIgX2EgPSBwYXJzZUludCh0aGlzLnRvVk51bShhKSksXFxcXFxcXFxuICAgICAgICAgICAgX2IgPSBwYXJzZUludCh0aGlzLnRvVk51bShiKSk7XFxcXFxcXFxuICAgICAgICBiID0gaXNOYU4oX2IpID8gdmVyc2lvbiA6IGI7XFxcXFxcXFxuICAgICAgICBpZiAoX2EgPiBfYikge1xcXFxcXFxcbiAgICAgICAgICAgIHB1dFZhcignanhOZXdWJywgJ+acieaWsOeJiOacrDogJyArIGEpO1xcXFxcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcXFxcXG4gICAgICAgICAgICBjbGVhclZhcignanhOZXdWJyk7XFxcXFxcXFxuICAgICAgICB9XFxcXFxcXFxuICAgICAgICBwdXRWYXIoJ2p4T2xkVicsIGIpO1xcXFxcXFxcbiAgICB9XFxcXFxcXFxufTtcXFxcXFxcXG5cXFxcXFxcXG5pZiAoZ2V0VmFyKFxcXFxcXFxcXFxcXFxcXCJqeE9sZFZcXFxcXFxcXFxcXFxcXFwiLCBcXFxcXFxcXFxcXFxcXFwiMFxcXFxcXFxcXFxcXFxcXCIpICE9IHZlcnNpb24pIHtcXFxcXFxcXG4gICAgcHV0VmFyKCdjakNhY2hlJywgX215U2V0LmNqY2FjaGUpO1xcXFxcXFxcbiAgICBwdXRWYXIoJ3g1Q2FjaGUnLCBfbXlTZXQueDVDYWNoZSk7XFxcXFxcXFxuICAgIHB1dFZhcignb2xkQ29uZmlnJywgX215U2V0Lm9sZENvbmZpZyk7XFxcXFxcXFxuICAgIHB1dFZhcigncGFyc2VSb3V0ZScsIF9teVNldC5wYXJzZVJvdXRlKTtcXFxcXFxcXG4gICAgbGV0IG1heWNrID0gJ2h0dHBzOi8vZ2l0ZWUuY29tL0R1YW4tTmlhbi9Ebi9yYXcvbWFzdGVyL2hpa2Vydmlldy8nO1xcXFxcXFxcbiAgICBsZXQganhOZXdWID0gZmV0Y2gobWF5Y2sgKyAnUGFyc2VWZXJzaW9uLnR4dCcpLFxcXFxcXFxcbiAgICAgICAganhPbGRWID0gKGZldGNoKF9teVNldC5jamNhY2hlKS5zcGxpdCgndmVyc2lvbiA9IFxcXFxcXFxcXFxcXFxcXCInKVsxXSArICcnKS5zcGxpdCgnXFxcXFxcXFxcXFxcXFxcIicpWzBdO1xcXFxcXFxcbiAgICB0b29scy5jcHJWZXJzaW9uKGp4TmV3ViwganhPbGRWKTtcXFxcXFxcXG4gICAgd3JpdGVGaWxlKCdoaWtlcjovL2ZpbGVzL2NhY2hlL3g1UGFyc2VMYW5KaWUudHh0JywgZmV0Y2gobWF5Y2sgKyAneDVQYXJzZUxhbkppZS50eHQnKSk7XFxcXFxcXFxufVxcXFxcXFxcblxcXFxcXFxcbnZhciBQYXJzZVMgPSB7fTtcXFxcXFxcXG52YXIgb3JpZ2luYWxQYXJzZVMgPSB7XFxcXFxcXFxuICAgIC8vdXBkYXRlRGF0ZTogdXBkYXRlRGF0ZSxcXFxcXFxcXG4gICAgQ2l0eUlQOiAnaHR0cDovL3B2LnNvaHUuY29tL2NpdHlqc29uJyxcXFxcXFxcXG4gICAgcGNVQTogJ1VzZXItQWdlbnRATW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMFxcXFxcXFxcXFxcXFxcXFzvvJtcXFxcXFxcXFxcXFxcXFxc77ybIFdPVzY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvNDkuMC4yNjIzLjg3IFNhZmFyaS81MzcuMzYnLFxcXFxcXFxcbiAgICBjYWNoZU0zdTg6IGZ1bmN0aW9uKHZVcmwsIHJlZikge1xcXFxcXFxcbiAgICAgICAgdHJ5IHtcXFxcXFxcXG4gICAgICAgICAgICB2YXIgbTN1OCA9IGZldGNoKHZVcmwsIHt9KTtcXFxcXFxcXG4gICAgICAgICAgICB3cml0ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvY2FjaGUvdmlkZW9zLm0zdTgnLCBtM3U4KTtcXFxcXFxcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHt9XFxcXFxcXFxuICAgICAgICByZXR1cm4gJ2ZpbGU6Ly8vc3RvcmFnZS9lbXVsYXRlZC8wL0FuZHJvaWQvZGF0YS9jb20uZXhhbXBsZS5oaWtlcnZpZXcvZmlsZXMvRG9jdW1lbnRzL2NhY2hlL3ZpZGVvcy5tM3U4Iyc7XFxcXFxcXFxuICAgIH0sXFxcXFxcXFxuICAgIGRlZmF1bHRQYXJzZTogZnVuY3Rpb24odXJsKSB7XFxcXFxcXFxuICAgICAgICByZXR1cm4gdXJsO1xcXFxcXFxcbiAgICB9LFxcXFxcXFxcbiAgICBtYW9zczogZnVuY3Rpb24oanh1cmwsIHJlZiwga2V5KSB7XFxcXFxcXFxuICAgICAgICB0cnkge1xcXFxcXFxcbiAgICAgICAgICAgIHZhciBnZXRWaWRlb0luZm8gPSBmdW5jdGlvbih0ZXh0KSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHJldHVybiB0b29scy5BRVModGV4dCwga2V5LCBpdik7XFxcXFxcXFxuICAgICAgICAgICAgfTtcXFxcXFxcXG4gICAgICAgICAgICBpZiAocmVmKSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHZhciBodG1sID0gcmVxdWVzdChqeHVybCwge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICdSZWZlcmVyJzogcmVmXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHZhciBodG1sID0gcmVxdWVzdChqeHVybCk7XFxcXFxcXFxuICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgIGlmIChodG1sLmluZGV4T2YoJyZidHdhZj0nKSAhPSAtMSkge1xcXFxcXFxcbiAgICAgICAgICAgICAgICBodG1sID0gcmVxdWVzdChqeHVybCArICcmYnR3YWYnICsgaHRtbC5tYXRjaCgvJmJ0d2FmKC4qPylcXFxcXFxcXFxcXFxcXFwiLylbMV0sIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAnUmVmZXJlcic6IHJlZlxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgICAgICB9KVxcXFxcXFxcbiAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICB2YXIgaXYgPSBodG1sLnNwbGl0KCdidF90b2tlbiA9IFxcXFxcXFxcXFxcXFxcXCInKVsxXS5zcGxpdCgnXFxcXFxcXFxcXFxcXFxcIicpWzBdO1xcXFxcXFxcbiAgICAgICAgICAgIGV2YWwoaHRtbC5tYXRjaCgvdmFyIGNvbmZpZyA9IHtbXFxcXFxcXFxcXFxcXFxcXHNcXFxcXFxcXFxcXFxcXFxcU10qP30vKVswXSArICcnKTtcXFxcXFxcXG4gICAgICAgICAgICBpZiAoY29uZmlnLnVybC5zbGljZSgwLCA0KSAhPSAnaHR0cCcpIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgY29uZmlnLnVybCA9IGRlY29kZVVSSUNvbXBvbmVudCh0b29scy5BRVMoY29uZmlnLnVybCwgXFxcXFxcXFxcXFxcXFxcImR2eVlSUWxuUFJDTWRRU2VcXFxcXFxcXFxcXFxcXFwiLCBpdikpO1xcXFxcXFxcbiAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICByZXR1cm4gY29uZmlnLnVybDtcXFxcXFxcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXFxcXFxcXG4gICAgICAgICAgICByZXR1cm4gJyc7XFxcXFxcXFxuICAgICAgICB9XFxcXFxcXFxuICAgIH0sXFxcXFxcXFxuICAgIExMUTogZnVuY3Rpb24oanh1cmwpIHtcXFxcXFxcXG4gICAgICAgIHRyeSB7XFxcXFxcXFxuICAgICAgICAgICAgdmFyIGFwaSA9IGp4dXJsLnNwbGl0KCc/dXJsPScpWzBdICsgXFxcXFxcXFxcXFxcXFxcImFwaS5waHBcXFxcXFxcXFxcXFxcXFwiO1xcXFxcXFxcbiAgICAgICAgICAgIHZhciBiNjRpZCA9IGJhc2U2NEVuY29kZShqeHVybC5zcGxpdCgndXJsPScpWzFdKTtcXFxcXFxcXG4gICAgICAgICAgICB2YXIgcGFyc2VpZCA9IHRvb2xzLmNhZXNhckNpcGhlcihiNjRpZCwgLTEpO1xcXFxcXFxcbiAgICAgICAgICAgIHZhciBqc29uID0gSlNPTi5wYXJzZShyZXF1ZXN0KGFwaSwge1xcXFxcXFxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAnUmVmZXJlcic6IGp4dXJsXFxcXFxcXFxuICAgICAgICAgICAgICAgIH0sXFxcXFxcXFxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxcXFxcXFxcbiAgICAgICAgICAgICAgICBib2R5OiAndXJsPScgKyBwYXJzZWlkXFxcXFxcXFxuICAgICAgICAgICAgfSkpO1xcXFxcXFxcbiAgICAgICAgICAgIHVybCA9IChqc29uLmNvZGUgPT0gMjAwID8gYmFzZTY0RGVjb2RlKHRvb2xzLmNhZXNhckNpcGhlcihqc29uLnVybCwgLTEpKSA6ICcnKTtcXFxcXFxcXG4gICAgICAgICAgICByZXR1cm4gdXJsO1xcXFxcXFxcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcXFxcXFxcbiAgICAgICAgICAgIHJldHVybiAnJztcXFxcXFxcXG4gICAgICAgIH1cXFxcXFxcXG4gICAgfSxcXFxcXFxcXG4gICAgUGFuR3U6IGZ1bmN0aW9uKHZpcFVybCwgZGF0YSkge1xcXFxcXFxcbiAgICAgICAgLyp2YXIgcmVmID0gJ2h0dHBzOi8vd3d3LnBhbmd1amlleGkuY29tLyc7XFxcXFxcXFxuICAgICAgICB2YXIgcGFyc2UgPSAnaHR0cHM6Ly9wYW5ndWFwaS5udHJ5amQubmV0L2ppZXhpLz91cmw9JyArIHZpcFVybDtcXFxcXFxcXG4gICAgICAgIHZhciBhcGkgPSAnaHR0cHM6Ly9wYW5ndWFwaS5udHJ5amQubmV0L2ppZXhpL2FwaS5waHAnO1xcXFxcXFxcbiAgICAgICAgKi9cXFxcXFxcXG4gICAgICAgIC8vdmFyIHJlZiA9ICdodHRwczovL3hteXN0di5jb20vJztcXFxcXFxcXG4gICAgICAgIC8vdmFyIHBhcnNlID0gJ2h0dHBzOi8vd3d3Ljk5a3B3LmNvbS9wYW5ndS9pbmRleC5waHA/dXJsPScgKyB0YWlsVXJsO1xcXFxcXFxcbiAgICAgICAgLy92YXIgYXBpID0gJ2h0dHBzOi8vd3d3Ljk5a3B3LmNvbS9wYW5ndS9hcGkucGhwJztcXFxcXFxcXG4gICAgICAgIHZhciBwYXJzZSA9IFxcXFxcXFxcXFxcXFxcXCJodHRwczovL3d3dy5wYW5ndWppZXhpLmNvbS9wYW5ndS8/dXJsPVxcXFxcXFxcXFxcXFxcXCIgKyB2aXBVcmw7XFxcXFxcXFxuICAgICAgICB2YXIgYXBpID0gXFxcXFxcXFxcXFxcXFxcImh0dHBzOi8vcGFuZ3VhcGkubnRyeWpkLm5ldC9wYW5ndTIwMjEvYXBpLnBocFxcXFxcXFxcXFxcXFxcXCI7XFxcXFxcXFxuICAgICAgICBpZiAoZGF0YSkge1xcXFxcXFxcbiAgICAgICAgICAgIHJlZiA9IGRhdGFbMF07XFxcXFxcXFxuICAgICAgICAgICAgcGFyc2UgPSBkYXRhWzFdO1xcXFxcXFxcbiAgICAgICAgICAgIGFwaSA9IGRhdGFbMl07XFxcXFxcXFxuICAgICAgICB9XFxcXFxcXFxuICAgICAgICB2YXIgVGltZSA9IChNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCkgKiAxKS50b1N0cmluZygpO1xcXFxcXFxcbiAgICAgICAgdmFyIGpzb24gPSByZXF1ZXN0KGFwaSwge1xcXFxcXFxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXFxcXFxcXFxcIlJlZmVyZXJcXFxcXFxcXFxcXFxcXFwiOiBwYXJzZVxcXFxcXFxcbiAgICAgICAgICAgIH0sXFxcXFxcXFxuICAgICAgICAgICAgYm9keTogXFxcXFxcXFxcXFxcXFxcInVybD1cXFxcXFxcXFxcXFxcXFwiICsgdmlwVXJsICsgXFxcXFxcXFxcXFxcXFxcIiZyZWZlcmVyPVxcXFxcXFxcXFxcXFxcXCIgKyBiYXNlNjRFbmNvZGUocGFyc2UpICsgXFxcXFxcXFxcXFxcXFxcIiZyZWY9MSZ0aW1lPVxcXFxcXFxcXFxcXFxcXCIgKyBUaW1lICsgXFxcXFxcXFxcXFxcXFxcIiZ0eXBlPSZvdGhlcj1cXFxcXFxcXFxcXFxcXFwiICsgYmFzZTY0RW5jb2RlKHZpcFVybCkgKyBcXFxcXFxcXFxcXFxcXFwiJmlvcz0wXFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXG4gICAgICAgICAgICBtZXRob2Q6IFxcXFxcXFxcXFxcXFxcXCJQT1NUXFxcXFxcXFxcXFxcXFxcIlxcXFxcXFxcbiAgICAgICAgfSk7XFxcXFxcXFxuICAgICAgICB2YXIgdXJsID0ganNvblswXSA9PSBcXFxcXFxcXFxcXFxcXFwie1xcXFxcXFxcXFxcXFxcXCIgPyBKU09OLnBhcnNlKGpzb24pLnVybCA6IFxcXFxcXFxcXFxcXFxcXCJcXFxcXFxcXFxcXFxcXFwiO1xcXFxcXFxcbiAgICAgICAgcmV0dXJuIHVybDtcXFxcXFxcXG4gICAgfSxcXFxcXFxcXG4gICAgeXVuMTcxNzogZnVuY3Rpb24odmlwVXJsKSB7XFxcXFxcXFxuICAgICAgICB2YXIgaXN5ayA9IHZpcFVybC5pbmRleE9mKCd5b3VrdScpO1xcXFxcXFxcbiAgICAgICAgdmFyIHJlZiA9IFxcXFxcXFxcXFxcXFxcXCJodHRwczovL3d3dy4xNzE3eXVuLmNvbS9qeC90eS5waHA/dXJsPVxcXFxcXFxcXFxcXFxcXCIgKyB2aXBVcmw7XFxcXFxcXFxuICAgICAgICB2YXIgcGFyc2UgPSBcXFxcXFxcXFxcXFxcXFwiaHR0cHM6Ly8xNzE3eXVuLmNvbS56aDE4OC5uZXQvMDgyOC8/dXJsPVxcXFxcXFxcXFxcXFxcXCIgKyB2aXBVcmw7XFxcXFxcXFxuICAgICAgICB2YXIgYXBpID0gXFxcXFxcXFxcXFxcXFxcImh0dHBzOi8vMTcxN3l1bi5jb20uemgxODgubmV0LzEwMDQvLi5pbmRleC4ucGhwXFxcXFxcXFxcXFxcXFxcIjtcXFxcXFxcXG4gICAgICAgIHJldHVybiBpc3lrID09IC0xID8gdGhpcy5QYW5HdSh2aXBVcmwsIFtyZWYsIHBhcnNlLCBhcGldKSA6IHRoaXMuUGFuR3UodmlwVXJsLCBbcmVmICsgJyx2aXA6JywgcGFyc2UgKyAnLHZpcDonLCBhcGldKTtcXFxcXFxcXG4gICAgfSxcXFxcXFxcXG4gICAgRnVYaW5nOiBmdW5jdGlvbih2aXBVcmwpIHtcXFxcXFxcXG4gICAgICAgIHRyeSB7XFxcXFxcXFxuICAgICAgICAgICAgLy9pZih2aXBVcmwuaW5kZXhPZigndi55b3VrdScpIT0tMSl7XFxcXFxcXFxuICAgICAgICAgICAgLy8gICAgdmlwVXJsID0gKEpTT04ucGFyc2UocmVxdWVzdCh2aXBVcmwsIHtyZWRpcmVjdDpmYWxzZSwgd2l0aEhlYWRlcnM6dHJ1ZX0pKS5oZWFkZXJzLmxvY2F0aW9uICsgJycpLnJlcGxhY2UoL1xcXFxcXFxcXFxcXFxcXFw/LiovLCcnKTtcXFxcXFxcXG4gICAgICAgICAgICAvL31cXFxcXFxcXG4gICAgICAgICAgICB2YXIgcmVmID0gJ2h0dHBzOi8vangueHVldHVpZ3VhbmcuY24vamlleGkvP3VybD0nICsgdmlwVXJsO1xcXFxcXFxcbiAgICAgICAgICAgIHZhciBwYXJzZSA9IHJlZjtcXFxcXFxcXG4gICAgICAgICAgICB2YXIgYXBpID0gJ2h0dHBzOi8vangueHVldHVpZ3VhbmcuY24vamlleGkvYXBpdV9meC5waHAnO1xcXFxcXFxcbiAgICAgICAgICAgIHJldHVybiB0aGlzLlBhbkd1KHZpcFVybCwgW3JlZiwgcGFyc2UsIGFwaV0pO1xcXFxcXFxcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcXFxcXFxcbiAgICAgICAgICAgIHJldHVybiAnJztcXFxcXFxcXG4gICAgICAgIH1cXFxcXFxcXG4gICAgfSxcXFxcXFxcXG59O1xcXFxcXFxcblxcXFxcXFxcbk9iamVjdC5hc3NpZ24oUGFyc2VTLCBvcmlnaW5hbFBhcnNlUywgTXlQYXJzZVMpO1xcXFxcXFxcbi8v6KaG55uW6aG65bqP77yM56ys5LiJ5Liq6KaG55uW56ys5LqM5Liq54S25ZCO6KaG55uW56ys5LiA5LiqXFxcXFxcXFxuXFxcXFxcXFxuXFxcXFxcXFxuZnVuY3Rpb24gYXl0bVBhcnNlKHZpcFVybCkge1xcXFxcXFxcbiAgICB0aGlzLnJlcXVlc3QgPSBmdW5jdGlvbihwYXJhbTAsIHBhcmFtMSwgcGFyYW0yKSB7XFxcXFxcXFxuICAgICAgICBwYXJhbTEgPSBwYXJhbTEgPT0gdW5kZWZpbmVkID8ge30gOiBwYXJhbTE7XFxcXFxcXFxuICAgICAgICBwYXJhbTEudGltZW91dCA9IDI1MDA7XFxcXFxcXFxuICAgICAgICBwYXJhbTIgPSBNWV9SVUxFO1xcXFxcXFxcbiAgICAgICAgdmFyIHJldFN0ciA9IG1ldGhvZF9yZXF1ZXN0Lmludm9rZShqYXZhQ29udGV4dCwgcGFyYW0wLCBwYXJhbTEsIHBhcmFtMik7XFxcXFxcXFxuICAgICAgICByZXR1cm4gcmV0U3RyID09IG51bGwgPyByZXRTdHIgOiByZXRTdHIgKyBcXFxcXFxcXFxcXFxcXFwiXFxcXFxcXFxcXFxcXFxcIjtcXFxcXFxcXG4gICAgfTtcXFxcXFxcXG4gICAgdGhpcy5mZXRjaCA9IGZ1bmN0aW9uKHBhcmFtMCwgcGFyYW0xLCBwYXJhbTIpIHtcXFxcXFxcXG4gICAgICAgIHBhcmFtMSA9IHBhcmFtMSA9PSB1bmRlZmluZWQgPyB7fSA6IHBhcmFtMTtcXFxcXFxcXG4gICAgICAgIHBhcmFtMS5oZWFkZXJzID0gcGFyYW0xLmhlYWRlcnMgPT0gdW5kZWZpbmVkID8ge30gOiBwYXJhbTEuaGVhZGVycztcXFxcXFxcXG4gICAgICAgIHBhcmFtMS5oZWFkZXJzWydVc2VyLUFnZW50J10gPSBQQ19VQTtcXFxcXFxcXG4gICAgICAgIHBhcmFtMS50aW1lb3V0ID0gMjUwMDtcXFxcXFxcXG4gICAgICAgIHBhcmFtMiA9IE1ZX1JVTEU7XFxcXFxcXFxuICAgICAgICB2YXIgcmV0U3RyID0gbWV0aG9kX2ZldGNoLmludm9rZShqYXZhQ29udGV4dCwgcGFyYW0wLCBwYXJhbTEsIHBhcmFtMik7XFxcXFxcXFxuICAgICAgICByZXR1cm4gcmV0U3RyID09IG51bGwgPyByZXRTdHIgOiByZXRTdHIgKyBcXFxcXFxcXFxcXFxcXFwiXFxcXFxcXFxcXFxcXFxcIjtcXFxcXFxcXG4gICAgfTtcXFxcXFxcXG4gICAgdmFyIGhvc3QgPSB2aXBVcmwubWF0Y2goL1xcXFxcXFxcXFxcXFxcXFwuKC4qPylcXFxcXFxcXFxcXFxcXFxcLy8pO1xcXFxcXFxcbiAgICBob3N0ID0gaG9zdCA9PSBudWxsID8gbnVsbCA6IGhvc3RbMV07XFxcXFxcXFxuICAgIHZhciBub1VybCA9IFxcXFxcXFxcXFxcXFxcXCJ0b2FzdDovL+aOpeaUtuWIsOeahOmTvuaOpeS4ujogXFxcXFxcXFxcXFxcXFxcIjtcXFxcXFxcXG4gICAgc3dpdGNoIChteVNldC5xanUpIHtcXFxcXFxcXG4gICAgICAgIGNhc2UgXFxcXFxcXFxcXFxcXFxcIlxcXFxcXFxcXFxcXFxcXCI6XFxcXFxcXFxuICAgICAgICBjYXNlIFxcXFxcXFxcXFxcXFxcXCLpu5jorqRcXFxcXFxcXFxcXFxcXFwiOlxcXFxcXFxcbiAgICAgICAgICAgIHN3aXRjaCAoaG9zdCkge1xcXFxcXFxcbiAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFxcXFxcXFxcXCJxcS5jb21cXFxcXFxcXFxcXFxcXFwiOlxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQudHg7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcXFxcXG4gICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcXFxcXFxcXFwiaXFpeWkuY29tXFxcXFxcXFxcXFxcXFxcIjpcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LnF5O1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXFxcXFxuICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXFxcXFxcXFxcInlvdWt1LmNvbVxcXFxcXFxcXFxcXFxcXCI6XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC55aztcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxcXFxcbiAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFxcXFxcXFxcXCJtZ3R2LmNvbVxcXFxcXFxcXFxcXFxcXCI6XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5tZztcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxcXFxcbiAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFxcXFxcXFxcXCJiaWxpYmlsaS5jb21cXFxcXFxcXFxcXFxcXFwiOlxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQuYmw7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcXFxcXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIHN0ciA9IGhvc3QgPT0gbnVsbCA/IG5vVXJsIDogbXlTZXQub3RoO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXFxcXFxuICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgIGJyZWFrO1xcXFxcXFxcbiAgICAgICAgZGVmYXVsdDpcXFxcXFxcXG4gICAgICAgICAgICBzdHIgPSBob3N0ID09IG51bGwgPyBub1VybCA6IG15U2V0LnFqdTtcXFxcXFxcXG4gICAgICAgICAgICBicmVhaztcXFxcXFxcXG4gICAgfVxcXFxcXFxcbiAgICBsZXQgbXlDaG9pY2UgPSBzdHIuc3BsaXQoJywnKTtcXFxcXFxcXG4gICAgbGV0IGxlbiA9IG15Q2hvaWNlLmxlbmd0aDtcXFxcXFxcXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xcXFxcXFxcbiAgICAgICAgbGV0IG5hbWUgPSBteUNob2ljZVtpXTtcXFxcXFxcXG4gICAgICAgIGlmICh0eXBlb2YgUGFyc2VTW25hbWVdID09ICdmdW5jdGlvbicpIHtcXFxcXFxcXG4gICAgICAgICAgICBsZXQgdXJsID0gUGFyc2VTW25hbWVdKHZpcFVybCk7XFxcXFxcXFxuICAgICAgICAgICAgaWYgKGkgIT0gbGVuIC0gMSAmJiAhL20zdTh8bXA0fGh0dHAvLnRlc3QodXJsKSkge1xcXFxcXFxcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcXFxcXFxcXG4gICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgaWYgKHVybFswXSA9PSAnLycpIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgdXJsID0gJ2h0dHBzOicgKyB1cmxcXFxcXFxcXG4gICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgaWYgKHVybC5pbmRleE9mKCc9aHR0cCcpICE9IC0xKSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHVybCA9IHVybC5pbmRleE9mKCcmdXJsPScpID4gLTEgPyB1cmwgOiAnaHR0cCcgKyBkZWNvZGVVUklDb21wb25lbnQodXJsLnNwbGl0KCc9aHR0cCcpWzFdKTtcXFxcXFxcXG4gICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgLyppZih1cmwubWF0Y2goL21ndHYuY29tL2cpPT0nbWd0di5jb20nKXtcXFxcXFxcXG4gICAgICAgICAgICAgICAgdXJsID0gdXJsICsgJzt7UmVmZXJlckBodHRwczovL3d3dy5tZ3R2LmNvbX0nO1xcXFxcXFxcbiAgICAgICAgICAgIH0gZWxzZSAqL1xcXFxcXFxcbiAgICAgICAgICAgIGlmICh1cmwuaW5kZXhPZignLmZsdicpICE9IC0xKSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHVybCA9IHVybCArICc7e1VzZXItQWdlbnRAYXBwJiZSZWZlcmVyQCcgKyB2aXBVcmwgKyAnfSc7XFxcXFxcXFxuICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgIGlmICh1cmwgPT0gJycgfHwgdXJsID09IHZpcFVybCkge1xcXFxcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gdmlwVXJsO1xcXFxcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHJldHVybiB1cmwgKyAnI2lzVmlkZW89dHJ1ZSMnO1xcXFxcXFxcbiAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIFBhcnNlU1tuYW1lXSA9PSAnc3RyaW5nJykge1xcXFxcXFxcbiAgICAgICAgICAgIHJldHVybiBQYXJzZVMuZGVmYXVsdFBhcnNlKFBhcnNlU1tuYW1lXSArIHZpcFVybCk7XFxcXFxcXFxuICAgICAgICB9IGVsc2Uge1xcXFxcXFxcbiAgICAgICAgICAgIHJldHVybiBuYW1lLnN1YnN0cigwLCA0KSA9PSBcXFxcXFxcXFxcXFxcXFwiaHR0cFxcXFxcXFxcXFxcXFxcXCIgfHwgaG9zdCA9PSBudWxsID8gbmFtZSArIHZpcFVybCA6IFxcXFxcXFxcXFxcXFxcXCJ0b2FzdDovL1xcXFxcXFxcXFxcXFxcXCIgKyBuYW1lICsgXFxcXFxcXFxcXFxcXFxcIiDkuI3mmK/nm7Tpk77kuZ/kuI3mmK/lhY3ll4VcXFxcXFxcXFxcXFxcXFwiO1xcXFxcXFxcbiAgICAgICAgfVxcXFxcXFxcbiAgICB9XFxcXFxcXFxufTtcXFxcXFxcXG5cXFxcXFxcXG52YXIgcGxheVBhcnNlID0ge1xcXFxcXFxcbiAgICBwbGF5ZXJfeHg6IGZ1bmN0aW9uKGp1cmwsIExhYmVsKSB7XFxcXFxcXFxuICAgICAgICByZXR1cm4gJChqdXJsKS5sYXp5UnVsZSgoaykgPT4ge1xcXFxcXFxcbiAgICAgICAgICAgIHZhciBqc1VybCA9IEpTT04ucGFyc2UoZmV0Y2goZ2V0VmFyKCdvbGRDb25maWcnKSkpLmNqO1xcXFxcXFxcbiAgICAgICAgICAgIHZhciBMYWJlbCA9IGs7XFxcXFxcXFxuICAgICAgICAgICAgdmFyIGZhID0gWydsZXR2JywgJ3BwdHYnLCAncXEnLCAneW91a3UnLCAncWl5aScsICdpcWl5aScsICdtZ3R2JywgJ2JpbGliaWxpJywgJ3NvaHUnLCAnbWlndScsICdtMTkwNScsICd2aXAnXTtcXFxcXFxcXG4gICAgICAgICAgICB2YXIgaHRtbCA9IHBhcnNlRG9tKHJlcXVlc3QoaW5wdXQpLCBMYWJlbCk7XFxcXFxcXFxuICAgICAgICAgICAgZXZhbChodG1sLnJlcGxhY2UoL3BsYXllcl8uKj89ey8sICdwZGF0YT17JykpO1xcXFxcXFxcbiAgICAgICAgICAgIGV2YWwoZmV0Y2goanNVcmwpKTtcXFxcXFxcXG4gICAgICAgICAgICBpZiAocGRhdGEudXJsLnN1YnN0cigwLCA4KS5tYXRjaCgvSlQuLkpULi4vKSkge1xcXFxcXFxcbiAgICAgICAgICAgICAgICBwZGF0YS51cmwgPSBiYXNlNjREZWNvZGUocGRhdGEudXJsKTtcXFxcXFxcXG4gICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgaWYgKHBkYXRhLnVybC5zdWJzdHIoMCwgOCkubWF0Y2goLyUuLiUuLi8pKSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHBkYXRhLnVybCA9IHVuZXNjYXBlKHBkYXRhLnVybCk7XFxcXFxcXFxuICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgIGlmIChmYS5pbmNsdWRlcyhwZGF0YS5mcm9tKSA9PSB0cnVlKSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHJldHVybiBheXRtUGFyc2UocGRhdGEudXJsKTtcXFxcXFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gcGRhdGEudXJsICsgJyNpc1ZpZGVvPXRydWUjJztcXFxcXFxcXG4gICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICB9LCBMYWJlbClcXFxcXFxcXG4gICAgfVxcXFxcXFxcbn07XFxcXFxcXFxuXFxcXFxcXFxuZnVuY3Rpb24gc2V0UGFyc2UoKSB7XFxcXFxcXFxuICAgICQucmVxdWlyZShcXFxcXFxcXFxcXFxcXFwiaGlrZXI6Ly9wYWdlL1JvdXRlP3J1bGU9TXlGaWVsZOG0sOKBv1xcXFxcXFxcXFxcXFxcXCIpLnNldFBhcnNlKCk7XFxcXFxcXFxufVxcXFxcXFxcblxcXFxcXFxcbmZ1bmN0aW9uIG16UG9wdXAoKSB7XFxcXFxcXFxuICAgIGlmIChnZXRWYXIoXFxcXFxcXFxcXFxcXFxcImlqay10eFxcXFxcXFxcXFxcXFxcXCIsIFxcXFxcXFxcXFxcXFxcXCJcXFxcXFxcXFxcXFxcXFwiKSA9PSBcXFxcXFxcXFxcXFxcXFwiMVxcXFxcXFxcXFxcXFxcXCIpIHtcXFxcXFxcXG4gICAgICAgIHNldEl0ZW0oXFxcXFxcXFxcXFxcXFxcInRpeGluZ1xcXFxcXFxcXFxcXFxcXCIsIFxcXFxcXFxcXFxcXFxcXCIxXFxcXFxcXFxcXFxcXFxcIilcXFxcXFxcXG4gICAgICAgIGNsZWFyVmFyKFxcXFxcXFxcXFxcXFxcXCJpamstdHhcXFxcXFxcXFxcXFxcXFwiKVxcXFxcXFxcbiAgICB9XFxcXFxcXFxuICAgIHJldHVybiBjb25maXJtKHtcXFxcXFxcXG4gICAgICAgIHRpdGxlOiAn5YWN6LSj5aOw5piOJyxcXFxcXFxcXG4gICAgICAgIGNvbnRlbnQ6ICfmnKznqIvluo/kuI3mj5Dkvpvop4bpopHop6PmnpDmnI3liqFcXFxcXFxcXFxcXFxcXFxcbuaJgOacieWGheWuueWdh+S7jueUqOaIt+WIhuS6q+S4reaUtumbhlxcXFxcXFxcXFxcXFxcXFxu5LuF5L6b5rWL6K+V5ZKM5a2m5Lmg5Lqk5rWBXFxcXFxcXFxcXFxcXFxcXG5cXFxcXFxcXFxcXFxcXFxcbuehruWumuWNs+iupOWPr++8jOS4jeWGjeaPkOmGkicsXFxcXFxcXFxuICAgICAgICBjb25maXJtOiAkLnRvU3RyaW5nKCgpID0+IHtcXFxcXFxcXG4gICAgICAgICAgICBwdXRWYXIoXFxcXFxcXFxcXFxcXFxcImlqay10eFxcXFxcXFxcXFxcXFxcXCIsIFxcXFxcXFxcXFxcXFxcXCIxXFxcXFxcXFxcXFxcXFxcIik7XFxcXFxcXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcXFxcXFxcXFwidG9hc3Q6Ly/mgqjngrnlh7vkuobnoa7orqRcXFxcXFxcXFxcXFxcXFwiXFxcXFxcXFxuICAgICAgICB9KVxcXFxcXFxcbiAgICB9KVxcXFxcXFxcbn1cXFxcXFxcXG5pZiAoZ2V0SXRlbShcXFxcXFxcXFxcXFxcXFwidGl4aW5nXFxcXFxcXFxcXFxcXFxcIiwgXFxcXFxcXFxcXFxcXFxcIlxcXFxcXFxcXFxcXFxcXCIpID09IFxcXFxcXFxcXFxcXFxcXCJcXFxcXFxcXFxcXFxcXFwiKSB7XFxcXFxcXFxuICAgIG16UG9wdXAoKTtcXFxcXFxcXG59XFxcXFxcXFxuXFxcXFxcXFxuLy89PT09PT09PT09Peino+aekOS7o+eggee7k+adnz09PT09PT09PT09XFxcXFxcXFxuXFxcXFxcXFxuZnVuY3Rpb24gc2F2ZUJ1dHRvbihjb250ZW50KSB7XFxcXFxcXFxuICAgIHZhciBkYXRhID0gY29udGVudC5zcGxpdCgn4piF4piF4piFJyk7XFxcXFxcXFxuICAgIGlmIChkYXRhLmxlbmd0aCA9PSAyKSB7XFxcXFxcXFxuICAgICAgICB2YXIgX2R0ID0gcGFyc2VQYXN0ZShkYXRhWzBdKTtcXFxcXFxcXG4gICAgICAgIGNvbnRlbnQgPSBfZHQuc3Vic3RyKDAsIDYpICE9ICdlcnJvcjonID8gX2R0IDogJyc7XFxcXFxcXFxuICAgIH1cXFxcXFxcXG4gICAgZGF0YSA9IGNvbnRlbnQuc3BsaXQoJ+KYhScpO1xcXFxcXFxcbiAgICB2YXIgdHlwZSA9IGRhdGFbMF07XFxcXFxcXFxuICAgIHZhciBhcnJMaXN0ID0gW107XFxcXFxcXFxuICAgIHZhciBvYmpDb2RlID0ge307XFxcXFxcXFxuICAgIGlmIChkYXRhLmxlbmd0aCA+IDIgJiYgZGF0YVswXSAhPSAn55u06ZO+Jykge1xcXFxcXFxcbiAgICAgICAgdmFyIG9iaktleSA9IGRhdGFbMV07XFxcXFxcXFxuICAgICAgICB2YXIgb2JqVmFsdWUgPSBkYXRhWzJdO1xcXFxcXFxcbiAgICAgICAgaWYgKHR5cGUgPT0gJ015UGFyc2VTJykge1xcXFxcXFxcbiAgICAgICAgICAgIG9ialZhbHVlID0gYmFzZTY0RGVjb2RlKG9ialZhbHVlKTtcXFxcXFxcXG4gICAgICAgIH1cXFxcXFxcXG4gICAgICAgIGlmIChvYmpWYWx1ZS5zcGxpdCgnZnVuY3Rpb24nKS5sZW5ndGggPiAxKSB7XFxcXFxcXFxuICAgICAgICAgICAgZXZhbCgnb2JqVmFsdWU9JyArIG9ialZhbHVlKTtcXFxcXFxcXG4gICAgICAgIH1cXFxcXFxcXG4gICAgICAgIGFyckxpc3Quc3BsaWNlKDAsIDAsIG9iaktleSk7XFxcXFxcXFxuICAgICAgICBvYmpDb2RlW29iaktleV0gPSBvYmpWYWx1ZTtcXFxcXFxcXG5cXFxcXFxcXG4gICAgfSBlbHNlIGlmICh0eXBlID09ICfnm7Tpk74nKSB7XFxcXFxcXFxuICAgICAgICBhcnJMaXN0ID0gZGF0YTtcXFxcXFxcXG4gICAgICAgIGFyckxpc3Quc3BsaWNlKDAsIDEpO1xcXFxcXFxcbiAgICB9IGVsc2Uge1xcXFxcXFxcbiAgICAgICAgYXJyTGlzdCA9IG51bGw7XFxcXFxcXFxuICAgIH1cXFxcXFxcXG4gICAgaWYgKGFyckxpc3QgIT0gbnVsbCkge1xcXFxcXFxcbiAgICAgICAgdmFyIHBhcnNlUm91dGUgPSBnZXRWYXIoJ3BhcnNlUm91dGUnKTtcXFxcXFxcXG4gICAgICAgIGV2YWwoJ3ZhciBqc29uID0nICsgZmV0Y2gocGFyc2VSb3V0ZSkpO1xcXFxcXFxcbiAgICAgICAgYXJyTGlzdCA9IGFyckxpc3QuY29uY2F0KGpzb24udGl0bGUpO1xcXFxcXFxcbiAgICAgICAganNvbi50aXRsZSA9IEFycmF5LmZyb20obmV3IFNldChhcnJMaXN0KSk7XFxcXFxcXFxuICAgICAgICBPYmplY3QuYXNzaWduKGpzb24uY29kZXMsIG9iakNvZGUpO1xcXFxcXFxcbiAgICAgICAgaWYgKHR5cGUgPT0gJ+a1i+ivlScpIHtcXFxcXFxcXG4gICAgICAgICAgICBldmFsKCd2YXIgY29uZmlnID0nICsgZmV0Y2goZ2V0VmFyKCdvbGRDb25maWcnKSkpO1xcXFxcXFxcbiAgICAgICAgICAgIGV2YWwoZmV0Y2goY29uZmlnLmNqKSk7XFxcXFxcXFxuICAgICAgICAgICAgaWYgKHR5cGVvZiBQYXJzZVNbZGF0YVsxXV0gPT0gXFxcXFxcXFxcXFxcXFxcImZ1bmN0aW9uXFxcXFxcXFxcXFxcXFxcIikge1xcXFxcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gUGFyc2VTW2RhdGFbMV1dKGRhdGFbMl0pO1xcXFxcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHJldHVybiBQYXJzZVMuZGVmYXVsdFBhcnNlKFBhcnNlU1tkYXRhWzFdXSArIGRhdGFbMl0pO1xcXFxcXFxcbiAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXFxcXFxuICAgICAgICAgICAgd3JpdGVGaWxlKHBhcnNlUm91dGUsICQuc3RyaW5naWZ5KGpzb24pKTtcXFxcXFxcXG4gICAgICAgICAgICByZXR1cm4gXFxcXFxcXFxcXFxcXFxcInRvYXN0Oi8v5bey5L+d5a2Y5YaF5a65XFxcXFxcXFxcXFxcXFxcIjtcXFxcXFxcXG4gICAgICAgIH1cXFxcXFxcXG4gICAgfSBlbHNlIHtcXFxcXFxcXG4gICAgICAgIHJldHVybiBcXFxcXFxcXFxcXFxcXFwidG9hc3Q6Ly/ml6Dms5Xor4bliKvov5nkuKrlhoXlrrnlkaJcXFxcXFxcXFxcXFxcXFwiXFxcXFxcXFxuICAgIH1cXFxcXFxcXG59XFxcXFxcXFxuXFxcXFxcXFxuaWYgKGdldEl0ZW0oJ3VwZGF0ZURhdGUnKSAhPSB1cGRhdGVEYXRlKSB7XFxcXFxcXFxuICAgIHZhciBmdW5jdGlvbkNvZGUgPSBzYXZlQnV0dG9uICsgJyc7XFxcXFxcXFxuICAgIHdyaXRlRmlsZSgnaGlrZXI6Ly9maWxlcy9jYWNoZS9wbHNjUGFyc2UuaHRtbCcsIGZldGNoKF9teVNldC5ja0xpbmsgKyAncGxzY1BhcnNlLmh0bWwnKSk7XFxcXFxcXFxuICAgIHNldEl0ZW0oJ215RnVuY3Rpb24nLCBmdW5jdGlvbkNvZGUpO1xcXFxcXFxcbiAgICBzZXRJdGVtKCd1cGRhdGVEYXRlJywgdXBkYXRlRGF0ZSk7XFxcXFxcXFxufVxcXFxcXFxcbnZhciBiakl0ZW0gPSB7XFxcXFxcXFxuICAgIGhmUGx1Z2luOiBmdW5jdGlvbihwYXJzZVJvdXRlKSB7XFxcXFxcXFxuICAgICAgICByZXR1cm4gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaykgPT4ge1xcXFxcXFxcbiAgICAgICAgICAgIGlmIChmaWxlRXhpc3QoaykgPT0gdHJ1ZSkge1xcXFxcXFxcbiAgICAgICAgICAgICAgICB2YXIgY2pjYWNoZSA9IGdldFZhcignY2pDYWNoZScpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICBldmFsKCd2YXIganNvbiA9JyArIGZldGNoKGspKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAganNvbi5zZXR0aW5ncy5jaiA9IGNqY2FjaGU7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShrLCAkLnN0cmluZ2lmeShqc29uKSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHZhciBvbGRSb3V0ZSA9IGdldFZhcignb2xkQ29uZmlnJyk7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHZhciBvbGRDb25maWcgPSBqc29uLnNldHRpbmdzO1xcXFxcXFxcbiAgICAgICAgICAgICAgICBvbGRDb25maWcuY2ogPSBjamNhY2hlO1xcXFxcXFxcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUob2xkUm91dGUsICQuc3RyaW5naWZ5KG9sZENvbmZpZykpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mgaLlpI3miJDlip8nO1xcXFxcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/pnIDopoHlhYjmi4nlj5bliJfooagnXFxcXFxcXFxuICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgfSwgcGFyc2VSb3V0ZSlcXFxcXFxcXG4gICAgfSxcXFxcXFxcXG4gICAgcHVsbENvZGU6IGZ1bmN0aW9uKGspIHtcXFxcXFxcXG4gICAgICAgIHJldHVybiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChrKSA9PiB7XFxcXFxcXFxuICAgICAgICAgICAgdmFyIHB1bGxNb2RlID0ga1swXTtcXFxcXFxcXG4gICAgICAgICAgICB2YXIgcGFyc2VSb3V0ZSA9IGtbMV07XFxcXFxcXFxuICAgICAgICAgICAgdmFyIHBhcnNlRmlsZSA9IGZldGNoKHBhcnNlUm91dGUpO1xcXFxcXFxcbiAgICAgICAgICAgIGlmICghcGFyc2VGaWxlKSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHZhciBzZXR0aW5ncyA9IGZldGNoKGdldFZhcignb2xkQ29uZmlnJykpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICBzZXR0aW5ncyA9IHNldHRpbmdzID09ICcnID8ge30gOiBKU09OLnBhcnNlKHNldHRpbmdzKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgdmFyIGpzb24gPSB7fTtcXFxcXFxcXG4gICAgICAgICAgICAgICAganNvbi5zZXR0aW5ncyA9IHNldHRpbmdzO1xcXFxcXFxcbiAgICAgICAgICAgICAgICBqc29uLnRpdGxlID0gW107XFxcXFxcXFxuICAgICAgICAgICAgICAgIGpzb24uY29kZXMgPSB7fTtcXFxcXFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxcXFxcbiAgICAgICAgICAgICAgICBldmFsKCd2YXIganNvbiA9JyArIHBhcnNlRmlsZSk7XFxcXFxcXFxuICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgIHZhciB0aXNoaSA9ICd0b2FzdDovL+aKseatiSHml6Dms5Xor4bliKvov5nkuKrlhoXlrrnlkaLila/vuY/ilbAnO1xcXFxcXFxcbiAgICAgICAgICAgIHZhciBjakxpbmsgPSBnZXRWYXIoJ3BsdWdpbkxpbmsnKTtcXFxcXFxcXG4gICAgICAgICAgICB2YXIgQ29udGVudHMgPSBjakxpbmsgPT0gJ1HnpZ4nID8gcHVsbE1vZGUgKyAn4piFJyArIGZldGNoKCdoaWtlcjovL2ZpbGVzL2ppZXhpL2ppZXhpLnR4dCcpIDogY2pMaW5rO1xcXFxcXFxcbiAgICAgICAgICAgIHRyeSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHZhciB5UGFzdGUgPSBwYXJzZVBhc3RlKENvbnRlbnRzKS5zcGxpdCgnQGJhc2U2NDovLycpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICBpZiAoeVBhc3RlLmxlbmd0aCA9PSAyKSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBDb250ZW50cyA9IGJhc2U2NERlY29kZSh5UGFzdGVbMV0pO1xcXFxcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNqTGluay5zdWJzdHIoMCwgNSkgPT0gJ2hpa2VyJyB8fCBjakxpbmsuc3Vic3RyKDAsIDQpID09ICdodHRwJykge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgQ29udGVudHMgPSBmZXRjaChjakxpbmspO1xcXFxcXFxcbiAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgICAgIHZhciBqY0tMID0gQ29udGVudHMuc3BsaXQoJ+KYhScpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICB2YXIgaXNLTCA9IGpjS0xbMF07XFxcXFxcXFxuICAgICAgICAgICAgICAgIGlmIChqY0tMLmxlbmd0aCA9PSAyKSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBpc0tMID0gaXNLTCA9PSAnJyA/IHB1bGxNb2RlIDogaXNLTDtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIENvbnRlbnRzID0gamNLTFsxXS5zcGxpdCgnXFxcXFxcXFxcXFxcXFxcXG4nKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIGlmIChDb250ZW50c1swXSA9PSAnJykge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRzLnNwbGljZSgwLCAxKVxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgICAgIHZhciBhZGRUaXRsZSA9IFtdLFxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgYWRkQ29kZSA9IHt9O1xcXFxcXFxcbiAgICAgICAgICAgICAgICBpZiAoKCcnICsgQ29udGVudHNbMF0pLnNwbGl0KCcmJicpLmxlbmd0aCA9PSAyKSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IENvbnRlbnRzLmxlbmd0aDsgaSsrKSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFyciA9IENvbnRlbnRzW2ldLnNwbGl0KCcmJicpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aXRsZSA9IGFyclswXSArICcoeDUpJyxcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gYXJyWzFdO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwdWxsTW9kZSA9PSAn5YWN5ZeFJykge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRUaXRsZS5wdXNoKHRpdGxlKVxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRDb2RlW3RpdGxlXSA9IHVybDtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRUaXRsZS5wdXNoKHVybCk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzS0wgPT0gJ+ebtOmTvicgJiYgcHVsbE1vZGUgPT0gJ+ebtOmTvicpIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIGFkZFRpdGxlID0gQ29udGVudHM7XFxcXFxcXFxuICAgICAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICAgICAgaWYgKGFkZFRpdGxlWzBdID09IHVuZGVmaW5lZCkge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgZXZhbChDb250ZW50cyk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9yaWdpbmFsUGFyc2VTID09ICdvYmplY3QnKSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgYWRkQ29kZSA9IG9yaWdpbmFsUGFyc2VTO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRDb2RlID0gUGFyc2VTO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNjT2JqZWN0ID0gW1xcXFxcXFxcXFxcXFxcXCJwYXJzZUxjXFxcXFxcXFxcXFxcXFxcIiwgXFxcXFxcXFxcXFxcXFxcImdwYXJzZVxcXFxcXFxcXFxcXFxcXCIsIFxcXFxcXFxcXFxcXFxcXCJucGFyc2VcXFxcXFxcXFxcXFxcXFwiLCBcXFxcXFxcXFxcXFxcXFwiTWFv5YWo572RXFxcXFxcXFxcXFxcXFxcIiwgXFxcXFxcXFxcXFxcXFxcImRzOTczXFxcXFxcXFxcXFxcXFxcIiwgXFxcXFxcXFxcXFxcXFxcInBhcndpeFxcXFxcXFxcXFxcXFxcXCIsIFxcXFxcXFxcXFxcXFxcXCJPSkJLXFxcXFxcXFxcXFxcXFxcIiwgXFxcXFxcXFxcXFxcXFxcIjkx6Kej5p6QXFxcXFxcXFxcXFxcXFxcIiwgXFxcXFxcXFxcXFxcXFxcIuS6uuS6uui/t1xcXFxcXFxcXFxcXFxcXCIsIFxcXFxcXFxcXFxcXFxcXCLmsZ/muZZcXFxcXFxcXFxcXFxcXFwiLCBcXFxcXFxcXFxcXFxcXFwi5LmF5pKtXFxcXFxcXFxcXFxcXFxcIiwgXFxcXFxcXFxcXFxcXFxcIumqmueBq1xcXFxcXFxcXFxcXFxcXCIsIFxcXFxcXFxcXFxcXFxcXCJMS+ino+aekFxcXFxcXFxcXFxcXFxcXCIsIFxcXFxcXFxcXFxcXFxcXCLlsI/ni7zkupFcXFxcXFxcXFxcXFxcXFwiLCBcXFxcXFxcXFxcXFxcXFwi5Lmd5YWr55yLXFxcXFxcXFxcXFxcXFxcIiwgXFxcXFxcXFxcXFxcXFxcIuaAneS6keino+aekFxcXFxcXFxcXFxcXFxcXCIsIFxcXFxcXFxcXFxcXFxcXCJDaXR5SVBcXFxcXFxcXFxcXFxcXFwiLCBcXFxcXFxcXFxcXFxcXFwicGNVQVxcXFxcXFxcXFxcXFxcXCIsIFxcXFxcXFxcXFxcXFxcXCJjYWNoZU0zdThcXFxcXFxcXFxcXFxcXFwiLCBcXFxcXFxcXFxcXFxcXFwiZGVmYXVsdFBhcnNlXFxcXFxcXFxcXFxcXFxcIiwgXFxcXFxcXFxcXFxcXFxcIm1hb3NzXFxcXFxcXFxcXFxcXFxcIiwgXFxcXFxcXFxcXFxcXFxcIkxMUVxcXFxcXFxcXFxcXFxcXCJdO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzY09iamVjdC5sZW5ndGg7IGkrKykge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBhZGRDb2RlW3NjT2JqZWN0W2ldXTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcGFyc2VUaXRsZSA9PSAnb2JqZWN0Jykge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRpdGxlID0gcGFyc2VUaXRsZTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgYWRkVGl0bGUgPSBPYmplY3Qua2V5cyhhZGRDb2RlKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgICAgICB2YXIgb2xkU0wgPSBqc29uLnRpdGxlLmxlbmd0aDtcXFxcXFxcXG4gICAgICAgICAgICAgICAgdmFyIG5ld1RpdGxlID0ganNvbi50aXRsZS5jb25jYXQoYWRkVGl0bGUpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICBqc29uLnRpdGxlID0gQXJyYXkuZnJvbShuZXcgU2V0KG5ld1RpdGxlKSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgIGlmIChwdWxsTW9kZSA9PSAn5YWN5ZeFJykge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihqc29uLmNvZGVzLCBhZGRDb2RlKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgICAgICB2YXIgbmV3U0wgPSBqc29uLnRpdGxlLmxlbmd0aCAtIG9sZFNMO1xcXFxcXFxcbiAgICAgICAgICAgICAgICB2YXIgY292ZXJTTCA9IG5ld1RpdGxlLmxlbmd0aCAtIGpzb24udGl0bGUubGVuZ3RoO1xcXFxcXFxcbiAgICAgICAgICAgICAgICBjb3ZlclNMID0gY292ZXJTTCA9PSAwID8gJycgOiAnLCDopobnm5bkuoYnICsgY292ZXJTTCArICfkuKonO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAvL3ZhciBuZXdGaWxlID0gdG9vbHMudG9KU09OKGpzb24pOy8v6Ieq5a6a5LmJc3RyaW5naWZ55Ye95pWw77yM5bim5pyJ6L2s5LmJ5a2X56ymXFxcXFxcXFxuICAgICAgICAgICAgICAgIHZhciBuZXdGaWxlID0gJC5zdHJpbmdpZnkoanNvbik7IC8vSlNPTi5wYXJzZeS8muaKpemUmVxcXFxcXFxcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUocGFyc2VSb3V0ZSwgbmV3RmlsZSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aAu+WFseWvvOWFpeS6hicgKyBuZXdTTCArICfkuKonICsgcHVsbE1vZGUgKyAn6Kej5p6QJyArIGNvdmVyU0w7XFxcXFxcXFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcXFxcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gdGlzaGk7XFxcXFxcXFxuICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgfSwgW2ssIF9teVNldC5wYXJzZVJvdXRlXSlcXFxcXFxcXG4gICAgfSxcXFxcXFxcXG4gICAgcHVsbFNjcmlwdDogZnVuY3Rpb24oY2osIHg1KSB7XFxcXFxcXFxuICAgICAgICByZXR1cm4gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaykgPT4ge1xcXFxcXFxcbiAgICAgICAgICAgIHZhciBjakZyb20gPSAnaGlrZXI6Ly9wYWdlL1BhcnNlX0RuLmpzP3J1bGU9TXlGaWVsZOG0sOKBvyc7XFxcXFxcXFxuICAgICAgICAgICAgdmFyIHg1RnJvbSA9ICdoaWtlcjovL3BhZ2UvUGFyc2VfRG4uaHRtbD9ydWxlPU15RmllbGThtLDigb8nO1xcXFxcXFxcbiAgICAgICAgICAgIHRyeSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHZhciBjakZpbGUgPSBKU09OLnBhcnNlKGZldGNoKGNqRnJvbSkpLnJ1bGU7XFxcXFxcXFxuICAgICAgICAgICAgICAgIGNqRmlsZSA9IGNqRmlsZS5zcGxpdCgn6Kej5p6Q5Luj56CB57uT5p2fJylbMF07XFxcXFxcXFxuICAgICAgICAgICAgICAgIHZhciB4NUZpbGUgPSBKU09OLnBhcnNlKGZldGNoKHg1RnJvbSkpLnJ1bGU7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShrWzBdLCBjakZpbGUpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUoa1sxXSwgeDVGaWxlKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgY2xlYXJWYXIoJ2p4T2xkVicpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mm7TmlrDmiJDlip8nO1xcXFxcXFxcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+acquaIkOWKn+iOt+WPluWGheWuuSc7XFxcXFxcXFxuICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgfSwgW2NqLCB4NV0pXFxcXFxcXFxuICAgIH0sXFxcXFxcXFxuICAgIHhsU2VsZWN0OiBmdW5jdGlvbihiaWFuamksIGxiTGVuZ3RoKSB7XFxcXFxcXFxuICAgICAgICByZXR1cm4gXFxcXFxcXFxcXFxcXFxcInNlbGVjdDovL1xcXFxcXFxcXFxcXFxcXCIgKyBKU09OLnN0cmluZ2lmeSh7XFxcXFxcXFxuICAgICAgICAgICAgb3B0aW9uczogWyfigJjigJjigJnigJk8c3BhbiBzdHlsZT1cXFxcXFxcXFxcXFxcXFwiY29sb3I6cmVkXFxcXFxcXFxcXFxcXFxcIiB0aXRsZT1cXFxcXFxcXFxcXFxcXFwi5Yig6ZmkfHwnICsgYmlhbmppICsgJ1xcXFxcXFxcXFxcXFxcXCI+5YigIOmZpCcsICfigJjigJjigJnigJk8c3BhbiBzdHlsZT1cXFxcXFxcXFxcXFxcXFwiY29sb3I6I0Y1NzQ3NFxcXFxcXFxcXFxcXFxcXCIgdGl0bGU9XFxcXFxcXFxcXFxcXFxcIumakOiXj3x8JyArIGJpYW5qaSArICdcXFxcXFxcXFxcXFxcXFwiPumakCDol48nLCAn4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcXFxcXFxcXFxcXFxcImNvbG9yOiNGRjgwMDBcXFxcXFxcXFxcXFxcXFwiIHRpdGxlPVxcXFxcXFxcXFxcXFxcXCLkv67mlLl8fCcgKyBiaWFuamkgKyAnXFxcXFxcXFxcXFxcXFxcIj7kv64g5pS5JywgJ+KAmOKAmOKAmeKAmTxzcGFuIHN0eWxlPVxcXFxcXFxcXFxcXFxcXCJjb2xvcjojMDk4QUMxXFxcXFxcXFxcXFxcXFxcIiB0aXRsZT1cXFxcXFxcXFxcXFxcXFwi572u6aG2fHwnICsgYmlhbmppICsgJzAnICsgJ1xcXFxcXFxcXFxcXFxcXCI+572uIOmhticsICfigJjigJjigJnigJk8c3BhbiBzdHlsZT1cXFxcXFxcXFxcXFxcXFwiY29sb3I6IzA5OEFDMVxcXFxcXFxcXFxcXFxcXCIgdGl0bGU9XFxcXFxcXFxcXFxcXFxcIuenu+WKqHx8JyArIGJpYW5qaSArICdcXFxcXFxcXFxcXFxcXFwiPuenuyDliqgnLCAn4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcXFxcXFxcXFxcXFxcImNvbG9yOiMwOThBQzFcXFxcXFxcXFxcXFxcXFwiIHRpdGxlPVxcXFxcXFxcXFxcXFxcXCLnva7lupV8fCcgKyBiaWFuamkgKyBsYkxlbmd0aCArICdcXFxcXFxcXFxcXFxcXFwiPue9riDlupUnLCAn4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcXFxcXFxcXFxcXFxcImNvbG9yOiMwNEI0MzFcXFxcXFxcXFxcXFxcXFwiIHRpdGxlPVxcXFxcXFxcXFxcXFxcXCLliIbkuqt8fCcgKyBiaWFuamkgKyAnXFxcXFxcXFxcXFxcXFxcIj7lnLDmnb/liIbkuqsnLCAn4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcXFxcXFxcXFxcXFxcImNvbG9yOiMwNEI0MzFcXFxcXFxcXFxcXFxcXFwiIHRpdGxlPVxcXFxcXFxcXFxcXFxcXCLkupHliIbkuqt8fCcgKyBiaWFuamkgKyAnXFxcXFxcXFxcXFxcXFxcIj7kupHmnb/liIbkuqsnXSxcXFxcXFxcXG4gICAgICAgICAgICBjb2w6ICcyJyxcXFxcXFxcXG4gICAgICAgICAgICBqczogJC50b1N0cmluZygoKSA9PiB7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHZhciBwYXJzZVJvdXRlID0gZ2V0VmFyKCdwYXJzZVJvdXRlJyk7XFxcXFxcXFxuICAgICAgICAgICAgICAgIGV2YWwoJ3ZhciBqc29uID0nICsgZmV0Y2gocGFyc2VSb3V0ZSkpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICB2YXIgbmV3SW5wdXQgPSBwYXJzZURvbUZvckh0bWwoaW5wdXQsICdzcGFuJiZ0aXRsZScpLnNwbGl0KCd8fCcpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IG5ld0lucHV0WzBdO1xcXFxcXFxcbiAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IG5ld0lucHV0WzFdO1xcXFxcXFxcbiAgICAgICAgICAgICAgICB2YXIgbnVtID0gbmV3SW5wdXRbMl07XFxcXFxcXFxuICAgICAgICAgICAgICAgIHZhciBudW0yID0gbmV3SW5wdXRbM107XFxcXFxcXFxuICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcXFxcXFxcXFwi5Yig6ZmkXFxcXFxcXFxcXFxcXFxcIjpcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFxcXFxcXFxcXFxcXFwi5Y2z5bCG5Yig6ZmkOiBcXFxcXFxcXFxcXFxcXFwiICsgbmFtZSkuY29uZmlybSgoaykgPT4ge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IGtbMF07XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW0gPSBrWzFdO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyc2VSb3V0ZSA9IGdldFZhcigncGFyc2VSb3V0ZScpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmFsKCd2YXIganNvbiA9JyArIGZldGNoKHBhcnNlUm91dGUpKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24uY29kZXMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBqc29uLmNvZGVzW25hbWVdO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24udGl0bGUuc3BsaWNlKG51bSwgMSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShwYXJzZVJvdXRlLCAkLnN0cmluZ2lmeShqc29uKSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFxcXFxcXFxcXCJ0b2FzdDovL+W3suWwhuOAllxcXFxcXFxcXFxcXFxcXCIgKyBuYW1lICsgXFxcXFxcXFxcXFxcXFxcIuOAl+WIoOmZpFxcXFxcXFxcXFxcXFxcXCI7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgW25hbWUsIG51bV0pO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcXFxcXFxcXFwi6ZqQ6JePXFxcXFxcXFxcXFxcXFxcIjpcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFxcXFxcXFxcXFxcXFwiaGlrZXI6Ly9lbXB0eSNub0xvYWRpbmcjXFxcXFxcXFxcXFxcXFxcIikubGF6eVJ1bGUoKGspID0+IHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBrWzBdO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnVtID0ga1sxXTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnNlUm91dGUgPSBnZXRWYXIoJ3BhcnNlUm91dGUnKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbCgndmFyIGpzb24gPScgKyBmZXRjaChwYXJzZVJvdXRlKSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqc29uLmNvZGVzLmhhc093blByb3BlcnR5KG5hbWUpKSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uLnRpdGxlLnNwbGljZShudW0sIDEpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKHBhcnNlUm91dGUsICQuc3RyaW5naWZ5KGpzb24pKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcXFxcXFxcXFwidG9hc3Q6Ly/lt7LlsIbjgJZcXFxcXFxcXFxcXFxcXFwiICsgbmFtZSArIFxcXFxcXFxcXFxcXFxcXCLjgJfpmpDol49cXFxcXFxcXFxcXFxcXFwiO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFxcXFxcXFxcXCJ0b2FzdDovL+WPr+iDveaYr+S4que9keWdgCwg5oKo5Y+v6YCJ5oup5Yig6ZmkXFxcXFxcXFxcXFxcXFxcIjtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIFtuYW1lLCBudW1dKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXFxcXFxcXFxcIuS/ruaUuVxcXFxcXFxcXFxcXFxcXCI6XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgLy9pZiAoanNvbi5jb2Rlc1tuYW1lXSkge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuQ29kZSA9IG5hbWU7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5OYW1lID0gXFxcXFxcXFxcXFxcXFxcIui/meaYr+WQjeensFxcXFxcXFxcXFxcXFxcXCI7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24uY29kZXNbbmFtZV0pIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbkNvZGUgPSBqc29uLmNvZGVzW25hbWVdLnRvU3RyaW5nKCk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5OYW1lID0gbmFtZTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcXFxcXFxcXFxcXFxcImhpa2VyOi8vZW1wdHkjbm9SZWNvcmRIaXN0b3J5I1xcXFxcXFxcXFxcXFxcXCIpLnJ1bGUoKGspID0+IHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSBbXTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChnZXRJdGVtKCdteUZ1bmN0aW9uJykpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IGtbMF07XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RlID0ga1sxXTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn5L+dIOWtmCcsXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHNhdmVCdXR0b24gKyBcXFxcXFxcXFxcXFxcXFwic2F2ZUJ1dHRvbihnZXRWYXIoJ2lucHV0X2VkaXQnKSk7YmFjaygpO1xcXFxcXFxcXFxcXFxcXCIsXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXFxcXFxcXFxcImlucHV0XFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXFxcXFxcXFxcXFxcXCLlu7rorq7mjInpu5jorqTnmoTku6PnoIHmoLzlvI/kv67mlLnlk6ZcXFxcXFxcXFxcXFxcXFwiLFxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZTogXFxcXFxcXFxcXFxcXFxcInB1dFZhcignaW5wdXRfZWRpdCcsIGlucHV0KVxcXFxcXFxcXFxcXFxcXCIsXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXFxcXFxcXFxcXFxcXFxcInRleHRhcmVhXFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IFxcXFxcXFxcXFxcXFxcXCItMVxcXFxcXFxcXFxcXFxcXCIsXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGVWaXNpYmxlOiBmYWxzZSxcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6ICfkv67mlLnimIUnICsgbmFtZSArICfimIUnICsgY29kZSxcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+KAmOKAmOKAmeKAmTxzbWFsbD48c3BhbiBzdHlsZT1cXFxcXFxcXFxcXFxcXFwiY29sb3I6IzZFQjg5N1xcXFxcXFxcXFxcXFxcXCI+5qC85byP5Li677ya5pON5L2c57G75Z6L4piF5qCH6aKY4piFZnVuY3Rpb24oKXvoh6rlrprkuYnlhoXlrrl9PGJyPuivt+WLv+Whq+WFpeWFtuS7luagvOW8jycsXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHNhdmVCdXR0b24pID0+IHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlQnV0dG9uKGdldFZhcignaW5wdXRfZWRpdCcpKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrKCk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suS/neWtmOS/ruaUuSc7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBzYXZlQnV0dG9uKSxcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6ICfigJjigJjigJnigJk8YmlnPjxiaWc+PHNwYW4gc3R5bGU9XFxcXFxcXFxcXFxcXFxcImNvbG9yOiMyOThBMDhcXFxcXFxcXFxcXFxcXFwiPuS/nSDlrZgnLFxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0UmVzdWx0KGQpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIFtuTmFtZSwgbkNvZGVdKSAvL1tuYW1lLCBqc29uLmNvZGVzW25hbWVdLnRvU3RyaW5nKCldKVxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qfSBlbHNlIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFxcXFxcXFxcXCJ0b2FzdDovL+WPquaciee9keWdgOaIluiAheagh+mimCwg5LiN5pSv5oyB5L+u5pS5XFxcXFxcXFxcXFxcXFxcIlxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0qL1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcXFxcXFxcXFwi572u6aG2XFxcXFxcXFxcXFxcXFxcIjpcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXFxcXFxcXFxcIue9ruW6lVxcXFxcXFxcXFxcXFxcXCI6XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSBqc29uLnRpdGxlLnNwbGljZShudW0sIDEpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzb24udGl0bGUuc3BsaWNlKG51bTIsIDAsIGl0ZW1bMF0pO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShwYXJzZVJvdXRlLCAkLnN0cmluZ2lmeShqc29uKSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcXFxcXFxcXFwi56e75YqoXFxcXFxcXFxcXFxcXFxcIjpcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCgnaGlrZXI6Ly9lbXB0eSNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGspID0+IHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0VmFyKCdiaWFuamknLCAn56e75YqoIycgKyBrKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXQ7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgbnVtKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXFxcXFxcXFxcIuWIhuS6q1xcXFxcXFxcXFxcXFxcXCI6XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFxcXFxcXFxcXCLkupHliIbkuqtcXFxcXFxcXFxcXFxcXFwiOlxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqc29uLmNvZGVzW25hbWVdKSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJzZVRleHQgPSB0eXBlb2YganNvbi5jb2Rlc1tuYW1lXSA9PSAnZnVuY3Rpb24nID8gJC5zdHJpbmdpZnkoanNvbi5jb2Rlc1tuYW1lXSkgOiBqc29uLmNvZGVzW25hbWVdO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVRleHQgPSAnTXlQYXJzZVPimIUnICsgbmFtZSArICfimIUnICsgYmFzZTY0RW5jb2RlKHBhcnNlVGV4dCk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnNlVGV4dCA9ICfnm7Tpk77imIUnICsganNvbi50aXRsZVtudW1dO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSAn5LqR5YiG5LqrJyAmJiBwYXJzZVRleHQuc3Vic3RyKDAsIDgpID09ICdNeVBhcnNlUycpIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VUZXh0ID0gc2hhcmVQYXN0ZShwYXJzZVRleHQpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VUZXh0LnN1YnN0cigwLCA2KSAhPSAnZXJyb3I6JyA/ICdjb3B5Oi8vJyArIHBhcnNlVGV4dCArICdcXFxcXFxcXFxcXFxcXFxcbuKYheKYheKYhVxcXFxcXFxcXFxcXFxcXFxuJyArICdNeVBhcnNlU++8micgKyBuYW1lIDogJ3RvYXN0Oi8v5YiG5Lqr5aSx6LSlISHkupHliarotLTmnb/lj6/og73mjILkuoYnO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnY29weTovLycgKyBwYXJzZVRleHQ7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pqC5LiN5pSv5oyBJztcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcXFxcXG4gICAgICAgICAgICAgICAgfSAvL3N3aXRjaOeahFxcXFxcXFxcbiAgICAgICAgICAgIH0pIC8vU3RyaW5n55qEXFxcXFxcXFxuICAgICAgICB9KSAvL3N0cmluZ2lmeeeahFxcXFxcXFxcbiAgICB9LFxcXFxcXFxcbiAgICB4alBhcnNlOiBmdW5jdGlvbigpIHtcXFxcXFxcXG4gICAgICAgIHJldHVybiAkKFxcXFxcXFxcXFxcXFxcXCJoaWtlcjovL2VtcHR5I25vUmVjb3JkSGlzdG9yeSNcXFxcXFxcXFxcXFxcXFwiKS5ydWxlKCgpID0+IHtcXFxcXFxcXG4gICAgICAgICAgICB2YXIgZCA9IFtdO1xcXFxcXFxcbiAgICAgICAgICAgIGV2YWwoZ2V0SXRlbSgnbXlGdW5jdGlvbicpKTtcXFxcXFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+S/nSDlrZgnLFxcXFxcXFxcbiAgICAgICAgICAgICAgICB1cmw6IHNhdmVCdXR0b24gKyBcXFxcXFxcXFxcXFxcXFwic2F2ZUJ1dHRvbihpbnB1dCk7YmFjaygpO2NsZWFyVmFyKCdpbnB1dF9hZGQnKVxcXFxcXFxcXFxcXFxcXCIsXFxcXFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcXFxcXFxcXFwiaW5wdXRcXFxcXFxcXFxcXFxcXFwiLFxcXFxcXFxcbiAgICAgICAgICAgICAgICBkZXNjOiBcXFxcXFxcXFxcXFxcXFwi6L6T5YWl5q2j56Gu5qC85byP5YaF5a65XFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiAncHV0VmFyKFxcXFxcXFxcXFxcXFxcXCJpbnB1dF9hZGRcXFxcXFxcXFxcXFxcXFwiLCBpbnB1dCknLFxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXFxcXFxcXFxcXFxcXFxcInRleHRhcmVhXFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogXFxcXFxcXFxcXFxcXFxcIi0xXFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlVmlzaWJsZTogZmFsc2UsXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldFZhcignaW5wdXRfYWRkJyksXFxcXFxcXFxuICAgICAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICB9KTtcXFxcXFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+KAmOKAmOKAmeKAmTxzbWFsbD48c3BhbiBzdHlsZT1cXFxcXFxcXFxcXFxcXFwiY29sb3I6IzZFQjg5N1xcXFxcXFxcXFxcXFxcXCI+5oyJ5o+P6L+w6K+J5qC85byP6L6T5YWlLCDor7fli7/loavlhaXlhbbku5bmoLzlvI88YnI+5pys5Zyw5Y+j5LukOiDmk43kvZznsbvlnovimIXlkI3np7DimIXku6PnoIE8YnI+5LqR5Y+j5LukOiDpk77mjqXimIXimIXimIXlkI3np7A7IOe6r+e9keWdgDog55u06ZO+4piFdXJsMeKYhXVybDInLFxcXFxcXFxcbiAgICAgICAgICAgICAgICBkZXNjOiAn4oCY4oCY4oCZ4oCZPGJpZz48YmlnPjxzcGFuIHN0eWxlPVxcXFxcXFxcXFxcXFxcXCJjb2xvcjojMjk4QTA4XFxcXFxcXFxcXFxcXFxcIj7kv50g5a2YJyxcXFxcXFxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCdub0xvYWRpbmcnKS5sYXp5UnVsZSgoc2F2ZUJ1dHRvbikgPT4ge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNhdmVCdXR0b24oZ2V0VmFyKCdpbnB1dF9hZGQnKSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgIH0sIHNhdmVCdXR0b24pLFxcXFxcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxcXFxcXFxuICAgICAgICAgICAgfSk7XFxcXFxcXFxuICAgICAgICAgICAgc2V0UmVzdWx0KGQpO1xcXFxcXFxcbiAgICAgICAgfSlcXFxcXFxcXG4gICAgfSxcXFxcXFxcXG4gICAgeWRQYXJzZTogZnVuY3Rpb24oQkptb2RlLCBpKSB7XFxcXFxcXFxuICAgICAgICByZXR1cm4gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaykgPT4ge1xcXFxcXFxcbiAgICAgICAgICAgIHZhciBBID0ga1swXS5zcGxpdCgnIycpWzFdO1xcXFxcXFxcbiAgICAgICAgICAgIHZhciBCID0ga1sxXTtcXFxcXFxcXG4gICAgICAgICAgICB2YXIgcGFyc2VSb3V0ZSA9IGdldFZhcigncGFyc2VSb3V0ZScpO1xcXFxcXFxcbiAgICAgICAgICAgIGV2YWwoJ3ZhciBqc29uID0nICsgZmV0Y2gocGFyc2VSb3V0ZSkpO1xcXFxcXFxcbiAgICAgICAgICAgIHZhciBpdGVtID0ganNvbi50aXRsZS5zcGxpY2UoQSwgMSk7IC8vIDE6IOagh+iusOW8gOWni+S9jee9ru+8jDI6IOWIoOmZpOWIsOWTquS4quS9jee9rlxcXFxcXFxcbiAgICAgICAgICAgIGpzb24udGl0bGUuc3BsaWNlKEIsIDAsIGl0ZW1bMF0pOyAvLyAxOiDlkIzkuIrvvIwyOiAw6KGo56S65LiN5Yig6Zmk77yMMzog5re75Yqg5a+56LGhXFxcXFxcXFxuICAgICAgICAgICAgd3JpdGVGaWxlKHBhcnNlUm91dGUsICQuc3RyaW5naWZ5KGpzb24pKTtcXFxcXFxcXG4gICAgICAgICAgICBjbGVhclZhcignYmlhbmppJyk7XFxcXFxcXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxcXFxcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxcXFxcXFxuICAgICAgICB9LCBbQkptb2RlLCBpXSlcXFxcXFxcXG4gICAgfSxcXFxcXFxcXG4gICAgcGxzY1BhcnNlOiBmdW5jdGlvbigpIHtcXFxcXFxcXG4gICAgICAgIHJldHVybiAkKCdoaWtlcjovL2VtcHR5I25vUmVjb3JkSGlzdG9yeSMnKS5ydWxlKCgpID0+IHtcXFxcXFxcXG4gICAgICAgICAgICB2YXIgZCA9IFtdO1xcXFxcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn5om56YeP5Yig6Zmk6Kej5p6QJyxcXFxcXFxcXG4gICAgICAgICAgICAgICAgZGVzYzogJ2F1dG8mJmZsb2F0JyxcXFxcXFxcXG4gICAgICAgICAgICAgICAgdXJsOiAnZmlsZTovLy9zdG9yYWdlL2VtdWxhdGVkLzAvQW5kcm9pZC9kYXRhL2NvbS5leGFtcGxlLmhpa2Vydmlldy9maWxlcy9Eb2N1bWVudHMvY2FjaGUvcGxzY1BhcnNlLmh0bWwnLFxcXFxcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3g1X3dlYnZpZXdfc2luZ2xlJ1xcXFxcXFxcbiAgICAgICAgICAgIH0pXFxcXFxcXFxuICAgICAgICAgICAgc2V0UmVzdWx0KGQpO1xcXFxcXFxcbiAgICAgICAgfSlcXFxcXFxcXG4gICAgfVxcXFxcXFxcbn07XFxcXFxcXCJ9LHtcXFxcXFxcImNvbF90eXBlXFxcXFxcXCI6XFxcXFxcXCJtb3ZpZV8zXFxcXFxcXCIsXFxcXFxcXCJuYW1lXFxcXFxcXCI6XFxcXFxcXCLosIPnlKjot6/nlLFcXFxcXFxcIixcXFxcXFxcInBhdGhcXFxcXFxcIjpcXFxcXFxcIlJvdXRlXFxcXFxcXCIsXFxcXFxcXCJydWxlXFxcXFxcXCI6XFxcXFxcXCJqczpcXFxcXFxcXG5jb25zdCBkID0gW107XFxcXFxcXFxuY29uc3QgZGF0YSA9IHt9O1xcXFxcXFxcblxcXFxcXFxcbmlmICghZ2V0VmFyKCdqeE9sZFYnKSkge1xcXFxcXFxcbiAgICBldmFsKEpTT04ucGFyc2UoZmV0Y2goXFxcXFxcXFxcXFxcXFxcImhpa2VyOi8vcGFnZS9QYXJzZV9Ebi5qc1xcXFxcXFxcXFxcXFxcXCIpKS5ydWxlKTtcXFxcXFxcXG59XFxcXFxcXFxuXFxcXFxcXFxuZGF0YS5vbGRDb25maWcgPSBcXFxcXFxcXFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVBhcnNlU2V0Lmpzb25cXFxcXFxcXFxcXFxcXFwiO1xcXFxcXFxcbmRhdGEuY2pSb3V0ZSA9IFxcXFxcXFxcXFxcXFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmpzXFxcXFxcXFxcXFxcXFxcIjtcXFxcXFxcXG5kYXRhLng1Um91dGUgPSBcXFxcXFxcXFxcXFxcXFwiZmlsZTovLy9zdG9yYWdlL2VtdWxhdGVkLzAvQW5kcm9pZC9kYXRhL2NvbS5leGFtcGxlLmhpa2Vydmlldy9maWxlcy9Eb2N1bWVudHMvY2FjaGUvUGFyc2VfRG4uaHRtbFxcXFxcXFxcXFxcXFxcXCI7XFxcXFxcXFxuXFxcXFxcXFxuZGF0YS5qeExhenkgPSBcXFxcXFxcXFxcXFxcXFwiZXZhbCgndmFyIGNvbmZpZyA9JyArIGZldGNoKCdcXFxcXFxcXFxcXFxcXFwiICsgZGF0YS5vbGRDb25maWcgKyBcXFxcXFxcXFxcXFxcXFwiJykpO2V2YWwoZmV0Y2goY29uZmlnLmNqKSk7YXl0bVBhcnNlKGlucHV0KVxcXFxcXFxcXFxcXFxcXCI7XFxcXFxcXFxuXFxcXFxcXFxuZGF0YS5zelBhcnNlID0gXFxcXFxcXFxcXFxcXFxcImhpa2VyOi8vcGFnZS9Sb3V0ZT9ydWxlPU15RmllbGThtLDigb8mdHlwZT3orr7nva4jbm9IaXN0b3J5I1xcXFxcXFxcXFxcXFxcXCI7XFxcXFxcXFxuXFxcXFxcXFxuZGF0YS5hZGRMYW5KaWUgPSBmdW5jdGlvbihkKSB7XFxcXFxcXFxuICAgIGxldCBsYW5qaWUgPSBbJ2JhaWR1LioucG5nJywgJy5qcGcnLCAnYmFpZHUuJywgJ2NuenouJywgJ2R5a2pcXFxcXFxcXFxcXFxcXFxcLiddO1xcXFxcXFxcbiAgICBldmFsKCd2YXIgeWxhbmppZSA9JyArIGZldGNoKCdoaWtlcjovL2ZpbGVzL2NhY2hlL3g1UGFyc2VMYW5KaWUudHh0JykpO1xcXFxcXFxcbiAgICBsYW5qaWUgPSB0eXBlb2YoeWxhbmppZSkgPT0gJ29iamVjdCcgPyB5bGFuamllIDogbGFuamllO1xcXFxcXFxcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGQubGVuZ3RoOyBpKyspIHtcXFxcXFxcXG4gICAgICAgIGxldCBkdXJsID0gZFtpXS51cmw7XFxcXFxcXFxuICAgICAgICBpZiAoZHVybCAhPSB1bmRlZmluZWQgJiYgL2xhenlSdWxlLy50ZXN0KGR1cmwpICYmIC9heXRtUGFyc2V8ZGVmYXVsdFBhcnNlLy50ZXN0KGR1cmwpKSB7XFxcXFxcXFxuICAgICAgICAgICAgZFtpXS5leHRyYSA9IGRbaV0uZXh0cmEgPT0gdW5kZWZpbmVkID8ge30gOiBkW2ldLmV4dHJhO1xcXFxcXFxcbiAgICAgICAgICAgIGRbaV0uZXh0cmEuYmxvY2tSdWxlcyA9IGxhbmppZTtcXFxcXFxcXG4gICAgICAgIH1cXFxcXFxcXG4gICAgfVxcXFxcXFxcbiAgICBzZXRSZXN1bHQoZCk7XFxcXFxcXFxufVxcXFxcXFxcbmRhdGEueDVQYXJzZSA9IGZ1bmN0aW9uKFVybCkge1xcXFxcXFxcbiAgICByZXR1cm4gJChVcmwpLmxhenlSdWxlKCgpID0+IHtcXFxcXFxcXG4gICAgICAgIGV2YWwoJ3ZhciBQYXJzZVMgPScgKyBmZXRjaCgnaGlrZXI6Ly9maWxlcy9ydWxlcy9EdWFuTmlhbi9NeVBhcnNlLmpzb24nKSk7XFxcXFxcXFxuICAgICAgICByZXR1cm4gUGFyc2VTLmNvZGVzLmRlZmF1bHRQYXJzZShpbnB1dCk7XFxcXFxcXFxuICAgIH0pXFxcXFxcXFxufVxcXFxcXFxcbmRhdGEuc2V0UGFyc2UgPSBmdW5jdGlvbigpIHtcXFxcXFxcXG4gICAgdmFyIGQgPSBbXTtcXFxcXFxcXG4gICAgZC5wdXNoKHtcXFxcXFxcXG4gICAgICAgIGRlc2M6ICdhdXRvJyxcXFxcXFxcXG4gICAgICAgIHVybDogdGhpcy54NVJvdXRlLFxcXFxcXFxcbiAgICAgICAgY29sX3R5cGU6ICd4NV93ZWJ2aWV3X3NpbmdsZSdcXFxcXFxcXG4gICAgfSk7XFxcXFxcXFxuICAgIHZhciBqeE5ld1YgPSBnZXRWYXIoJ2p4TmV3VicsICcnKSxcXFxcXFxcXG4gICAgICAgIGp4T2xkViA9IGdldFZhcignanhPbGRWJyk7XFxcXFxcXFxuICAgIHZhciB2ZXJzaW9uVGlwcyA9IGp4TmV3ViA9PSAnJyA/ICfigJjigJgnIDogJ+KAmOKAmCcgKyBqeE5ld1Y7XFxcXFxcXFxuICAgIHZhciBwaWNzID0gW1xcXFxcXFxcbiAgICAgICAgJ2h0dHBzOi8vdHZhMS5zaW5haW1nLmNuL2xhcmdlLzliZDliMTY3Z3kxZndyaTU2d2pocWoyMWhjMHUwYXJyLmpwZycsXFxcXFxcXFxuICAgICAgICAnaHR0cHM6Ly9jZG4uc2VvdnguY29tL2ltZy9zZW92eC0yMC0xMCUyMCg5MikuanBnJyxcXFxcXFxcXG4gICAgICAgICdodHRwczovL2Nkbi5zZW92eC5jb20vaW1nL21vbTIwMTglMjAoMjA3KS5qcGcnLFxcXFxcXFxcbiAgICAgICAgJ2h0dHBzOi8vdHZhNC5zaW5haW1nLmNuL2xhcmdlLzliZDliMTY3Z3kxZndyaDV4b2x0ZGoyMWhjMHUwdGF4LmpwZycsXFxcXFxcXFxuICAgICAgICAnaHR0cHM6Ly90dmExLnNpbmFpbWcuY24vbGFyZ2UvMDA1QllxcGdneTFmd3JleXU0bmw2ajMxaGMwdTBhaHIuanBnJyxcXFxcXFxcXG4gICAgICAgICdodHRwczovL3MzLmJtcC5vdmgvaW1ncy8yMDIxLzEwL2Q3ZTYwYjk5MDc0MjA5M2QuanBlZycsXFxcXFxcXFxuICAgICAgICAnaHR0cHM6Ly9zMy5ibXAub3ZoL2ltZ3MvMjAyMS8xMC85MWFkNmQ2NTM4YmY4Njg5LmpwZycsXFxcXFxcXFxuICAgICAgICAnaHR0cHM6Ly90dmExLnNpbmFpbWcuY24vbGFyZ2UvMDA1QllxcGdneTFmd3Jlc2w1cG1sajMxaGMweGN3a2EuanBnJyxcXFxcXFxcXG4gICAgICAgICdodHRwczovL3R2YTMuc2luYWltZy5jbi9sYXJnZS8wMDVCWXFwZ2d5MWZ3cmdqZGs3NG9qMzFoYzB1MGRxbi5qcGcnLFxcXFxcXFxcbiAgICAgICAgJ2h0dHBzOi8vY2RuLnNlb3Z4LmNvbS9pbWcvbW9tMjAxOCUyMCgzMjApLmpwZycsXFxcXFxcXFxuICAgICAgICAnaHR0cHM6Ly9jZG4uc2VvdnguY29tL2ltZy9tb20yMDE4JTIwKDgwMykuanBnJ1xcXFxcXFxcbiAgICBdO1xcXFxcXFxcbiAgICBkLnB1c2goe1xcXFxcXFxcbiAgICAgICAgaW1nOiBwaWNzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwKV0sXFxcXFxcXFxuICAgICAgICB0aXRsZTogdmVyc2lvblRpcHMgKyAn4oCZ4oCZPHNtYWxsPjxzcGFuIHN0eWxlPVxcXFxcXFxcXFxcXFxcXCJjb2xvcjojNkVCODk3XFxcXFxcXFxcXFxcXFxcIj48YnI+44CA44CA54K55Ye75LiK5pa55aS05YOP6L+b5YWl57yW6L6RPGJyPueCueatpOi/m+WFpeiuuuWdm+W4luWtkOWIl+ihqCcsXFxcXFxcXFxuICAgICAgICBkZXNjOiAn5b2T5YmN54mI5pysOiAnICsganhPbGRWLFxcXFxcXFxcbiAgICAgICAgdXJsOiAnaHR0cHM6Ly9oYWlrdW9zaGlqaWUuY24vdXNlci8xOTU4JyxcXFxcXFxcXG4gICAgICAgIGNvbF90eXBlOiAnbW92aWVfMSdcXFxcXFxcXG4gICAgfSk7XFxcXFxcXFxuICAgIHNldFJlc3VsdChkKTtcXFxcXFxcXG59XFxcXFxcXFxuXFxcXFxcXFxuc3dpdGNoIChnZXRQYXJhbShcXFxcXFxcXFxcXFxcXFwidHlwZVxcXFxcXFxcXFxcXFxcXCIpKSB7XFxcXFxcXFxuICAgIGNhc2UgXFxcXFxcXFxcXFxcXFxcIuiuvue9rlxcXFxcXFxcXFxcXFxcXCI6XFxcXFxcXFxuICAgICAgICBkYXRhLnNldFBhcnNlKCk7XFxcXFxcXFxuICAgICAgICBicmVhaztcXFxcXFxcXG4gICAgY2FzZSBcXFxcXFxcXFxcXFxcXFwi57yW6L6RXFxcXFxcXFxcXFxcXFxcIjpcXFxcXFxcXG4gICAgICAgICQucmVxdWlyZShcXFxcXFxcXFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2p4SXRlbT9ydWxlPU15RmllbGThtLDigb9cXFxcXFxcXFxcXFxcXFwiKS5qeExpc3QoKTtcXFxcXFxcXG4gICAgICAgIHNldFJlc3VsdChkKTtcXFxcXFxcXG4gICAgICAgIGJyZWFrO1xcXFxcXFxcbiAgICBkZWZhdWx0OlxcXFxcXFxcbiAgICAgICAgJC5leHBvcnRzID0gZGF0YTtcXFxcXFxcXG4gICAgICAgIGJyZWFrO1xcXFxcXFxcbn1cXFxcXFxcIn0se1xcXFxcXFwiY29sX3R5cGVcXFxcXFxcIjpcXFxcXFxcIm1vdmllXzNcXFxcXFxcIixcXFxcXFxcIm5hbWVcXFxcXFxcIjpcXFxcXFxcIuino+aekOmhueS4u+eVjOmdolxcXFxcXFwiLFxcXFxcXFwicGF0aFxcXFxcXFwiOlxcXFxcXFwianhJdGVtXFxcXFxcXCIsXFxcXFxcXCJydWxlXFxcXFxcXCI6XFxcXFxcXCJ2YXIgXzB4b2QyPSdqc2ppYW1pLmNvbS52NicsXzB4NDY5MD1bXzB4b2QyLCdmRkxEczhPMUlnPT0nLCdWd3pDbjhLL3dvND0nLCd3NURDcU1PdkpjSzMnLCd3N1U1Q3NPVicsJ3c3VEN0Y092TjhLVCcsJ3c3YkRvOE91VWlBPScsJ1JtMU93NjV1JywnTUV4VXc2VENwQT09JywnNWErVzVZYTE1NWlVNlpPNScsJ0RjSzRLY0tKdzV3ckRjT2wnLCc1YTZCNVlhbzVZU0k1WlNnJywndzR6Q3ZNT0dNc0tndzdZPScsJ3c0UUV3NFF3Zmc9PScsJ0ZFRERuUmsrJywnVjhLeGYwb3cnLCdLekREcDhPK3c1dz0nLCdETUtjd3IvQ2hzS1cnLCdITUtYQVJYQ3BRPT0nLCd3NjA5dzc4R2Z3PT0nLCd3clIvQmNLT0tEckR2Ujkrd3A4dmFGWUNmc0tNd3BzekJSVENvV3JEc0dFeGRzS0N3NlZXd3BRbicsJ1dzS2ZmOEt4d3A0PScsJ3c2YkNyTUswR3c9PScsJ1Z5cDF3NHBKJywndzdJR0NzT05IUT09JywnWU1LclpIUXknLCdUTUt6QjhPZHc2N0NrOEtZT1E9PScsJ3c0M0RqeFpvTTJwZU1jS0VFZz09JywnSEZMRHVUQUonLCdTc0tBWFVzYScsJ1RDVENnOEtnd3JNPScsJ1dzS2h3cWQzd29vPScsJ0ExWk13NWZDdGc9PScsJ3dxSERrUnJEbjJuRHRWL0RuUT09JywnY3pOZXc0Uk5iQmpEbUE9PScsJ0dIWnF3NkxDaDhLVUpnaFInLCd3NHZEcFUwcScsJ0lGTTZ3cVFpJywnSWNLUmJRPT0nLCdieTljdzQwPScsJ3dvWkp3b2pDaGNLYicsJ3c1ZkRvQzk1SWc9PScsJ1ZEakNuY0txd3A4PScsJ2U4S2JZOEtBd3BURGpGL0R0MjBmJywndzVmRHVWQW4nLCd3cUhEa1FYRG13PT0nLCd3NDNEajhPcFp6OTl3NjBYdzVmQ3F3PT0nLCdOOEtKWXNLSnc2RERzc0txJywnWml4enc0eGcnLCd3cTBUdzZMQ2pjSzRDRFlYd3BqQ3FzT3BRRkk9Jywnd3JGUVBSdz0nLCc0b0tsNG9LaTRvS2M0b0NTVUh6RHRobkNtZWV0dnVlUXZlaWtoZWFkZ3c9PScsJ3c1TENrOEtYR3hrPScsJ01zT1F3NWpDcVZvPScsJ3dxUUR3NVl5dzQ3Q2t3SENyMXJDbzNKOHdxQT0nLCdFY09FdzZYQ28zaz0nLCd3cFJvZkJuQ2xHaG0nLCdVOEt0ZUU0PScsJ0tjT253N2pDaVVCQXc3N0NqTUs5SzJCZHc2WnZ3NTNEc3gxZndvOGdJc09EdzRURGdNT3B3NEhEbVFmQ2lHbkRoUUZ2WDhLeScsJ1U4S3BURlkyJywnVk1LZ0pNT1onLCd3NjNEbERzUXc0TT0nLCdFamJEazhPN3c0a0Z3clRDaWNPZXc1UT0nLCdiOE9IYnNLRXdxakRobFk9JywnR01LbkJNS0J3N0U9JywnQzhLSXdxQkFEQT09JywndzZ6RGc4T2R3ck5ydzdUQ2hpTT0nLCd3cjNEbDhLbXc0MWN3NHg2d3BBZkhnPT0nLCd3cFpBU0JUQ2hBPT0nLCd3cjdEaU1LR0lzT1cnLCdXdzVwdzdURHFnPT0nLCdjWHpDcG0zQ3J3PT0nLCdaOEtEU3NLVndxZz0nLCd3bzU1WFI0PScsJzRvS3M0b0tCNG9PODRvR2RkbHNkd3FFZDVwS0s1THlvNW8ydTViKysnLCd3N2hxd3BqRGpTZz0nLCd3NWNqRmNPSkJ3PT0nLCdNQ1hEcGNPNnc2bz0nLCd3cDU1SHNLcWJnPT0nLCdLOE84dzZYQ2x3PT0nLCdRVkpPdzdZPScsJzRvR000b0NpNG9HWDRvT1JlMlREcEJweFdNTy93N1hDaThPV3c1ZkRzc0tjTzhPY3dxUENtc09NR2NPZlZDWERwc081dzZaL3c1UksnLCdUOEtaYnNLRXdybz0nLCdBV1hEdkNrMFl6M0NwZz09JywnYVFUQ2djS0R3cEU9JywndzZBZk9NTzdGZz09JywndzQvRHRVWTJBTU8rVjFIRHRWYkNoelBDcWc9PScsJ3c2L0N2Y0txRVJnMnc1WT0nLCd3NURDdU1PYUpzS3gnLCdGY0trTHNLQXc2MStSc0t2UlVvYllXdkNnQmpDZ21sZklCWENubFhEakhJPScsJ1pNT05BaUxDaXNLTXdyM0NuQ0lNVWNPc3c0RnB3cEU9JywnQ01PRnc0WEN2RVE9JywnUUUxZnc1TnAnLCdIbUIwV3NPMycsJ3c2SENyUzk5d3E0PScsJ2FzS09RbU1pJywnSjJ4Nnc2ckNoQT09JywndzZyQ2dTNU93cE09JywndzZrS3dxN0NoY09WRjJJRnc1bkNzOEtvWTFVPScsJzRvS0M0b0tVNG9HUDRvTzV3cWZEa0IzQ3A4S2FTc09nd3FIQ3NqSEN1TUtXdzZzYndyVENpd2pDdFVQQ2dXRjNUbGdtd29wTmFTckRtQXdZdzZ6bWxyZkN0K1c0bU1LdTZLU0pNZWFkaGc9PScsJ0ZpYkRoOE9qdzRVRndxUENqc09hdzRWSXc3ZkR2Zz09JywndzZiRGpNT3N3ckYwdzdvPScsJzU2UzI1WWlldzdjPScsJzRvQ0I0b0NQNG9PMzRvQzd3NGZDb2dMQ2h3QTRBc0syQThLVkIyRERnRVhDdmlmRHJjT0NGOEs0d29iRHJjS1ROMGpDbnNPaFdRPT0nLCd3NHZEc1V3eE9zT1BYVXJEdFZZPScsJ3c0RERyajdDcWNPdScsJ3c3RERxY09EWkFNPScsJ3dvMWF3b3pDbU1LZScsJ2JjTzl3cFREb3owPScsJ0FjT3ZMY09Td3A3RHVnPT0nLCc0b0NCNG9DUDRvTzM0b0M3dzRmQ3N4dkNnVkFrQXNLeUc4S1hRaTdDbGwvQ3ZTN0N2OEtTVHNPMHc1akN1OE9aVEZ2Q2tNS0dKVUhDcGNPZnc2YkNxT2FYdjEvbHViQjU2S2FHUSthZnVnPT0nLCdTbG5DbzA3Q2lBPT0nLCd3N2JEdUNEQ21jT0InLCdSc0tUd3FKVXdwdz0nLCdYc0sxd3BOeicsJ3c1MW9Yc0tkdzZJPScsJ3dvL0RvOEtLUDhLNicsJ3dxWmF3ckRDc3NLUicsJzU2ZTQ1WXV1Q01LSScsJ3c1M0NrTUtMSmdjPScsJ0d5ZkRyOE8ydzZnVndxTT0nLCd3NmNOdzZNTmJnPT0nLCd3NW5DaWdSUicsJ0NzS1l3cWZDdGc9PScsJ1RzT0V3cVhEaER3PScsJ3dxWERnUTdEaDNYQ3FBPT0nLCdMRllkd3EwcmNzTzNEdz09Jywnd296RHU4S1BBTUszJywnd3FrWHc2akNpc0tDT1R3TXdwakNxZz09JywndzRQQ2tCNVgnLCd3NVRDa3pWeHdyQT0nLCdFOEtqd3JaMFBnPT0nLCdRY0syTzhPY3c3TT0nLCd3cUJPSkRnNCcsJ2NTTkN3NFJ2WUJrPScsJ05jTzJ3Ny9DalE9PScsJ1NVekRrOE9SJywnUThPR0ltSENvZz09JywnQzhLUndvNW1GZz09Jywnd3JnZHc3REN0Y0tNJywnZUh6Q2hHN0NrQT09JywndzRrc3c2Y1ZaQT09Jywnd3BFRXc1YkNqY0t6JywnNG9LajRvS0k0b0NuNG9HYlk4T3VRbDdEcnhQQ2hoakRvc08rRWNPOENzT0d3NjBKVThPSHdvZkRzTUttdzRIQ3VDWlhlR2h5JywndzRjUExNT0VQQT09JywnQW5Wd3c2OD0nLCd3NnJEdVNYQ2lBPT0nLCd3NlJDZkUxeCcsJ3dxakRtOEttSXNLbicsJ2UzckR0Y09BS1E9PScsJ3c3N0Nxc0tKQ2hncnc0dkNoQT09Jywnd3FIRGs4SzZ3NWxOdzdZPScsJ3c2ekRpTU8zV3p3PScsJ3c1N0RzMUl2Tnc9PScsJ3c1akRtY09wWmdRPScsJ0dNS1NJalU9JywnNW95ZTVvKzE1YnlZNkwyMjVZYXU1cDZuNXBXNzVZU1Q1YTY2JywnYXpKeHc1UERudz09JywnV3NLOHdwVmd3b0RDc0JjT3dydkN0QT09JywndzdObFVGWkVNTU9YTU1PMUlNT1FGTU9yWU1POFNjT3F3ci9EZ01PWGNNT0JBRkZwd3BVPScsJzRvSzE0b0NkNG9PMTRvS1JSRTFGd29iRGplYURvT1drcGVhT25PUzVoZWkxa09XOHFPUzdqdW01dGVpdXV3PT0nLCc1YjZLNVlpNzZLeWs1NzZYNUx1ZFVYTT0nLCd3ckhscjRqbWxJRG90cTNsdjV2Q3B4SVF3N05Hd3BrSnc2akN2VERDdEVuRGk4T01ERjNEbThLU3dwN0RyY0tvdzZFVkZDVmtKc09RTUg0PScsJ3dyVkFOZ0FNYkQvRG1zT2lNalBEZzhLWicsJzVhNm81WVdmNVlTRDVaU04nLCdBVy9EbHlrWk9RPT0nLCc0b09JNG9HKzRvSzM0b0dmd3EzQ2tnM0NwaERta0l2a3Zaem1qS1Rsdm9RPScsJ3c1TERyTUtMSno1UUc4S28nLCc0b0daNG9LTDRvS1Y0b09nRHhqQ3VNT0V3NnZtbXI3bWxybm9oS3ptbnIva3ZwM290N2c9JywnNUxxVzVvK1g1TGlhNWErUTVwV0c2TGVBNWI2b3c1dkRrOEt0U3kvRGtNT1h3NG5EbThPOWZzS21HRE0vdzV2RHJnaGZ3NjlENTc2RjZhQ1I2SVdJNXAyMzVhMno1cGUzNkxXRjViMjhPTUtmd3FCOU1YQlpSY0tvdzVoeGFjT1J3cWtEdzVIQ2djSzh3NURDcWNPZHc3VT0nLCc1YTZaNXBTYjZMYWg1Yit3YVM5MXc0YkRvenNrdzYvQ2gwTmNUc0tSVkdERG9jS3NOOE82dzdyQ2xNT0R3N0RDZ3NPVVZNT3FkVHNqJywnNUw2QjU1U2s1NXVXNVlTRjVZbSs2SU9oNlp5RDU1cU81YjZqNkthVDU1ZUw2SytqNVo2QTZMU081WXlrdzZEbHA0am1uNGpwbEwvcG9iVGxpWi9sdkpqb3JKTGxuWTNrdVpUb3BMTG9yN2ZtZ0l3PScsJ1RWekRtTU9OSHNPdycsJ3c0ekNzTU9HTU1LTHc3ekR1eVhEaHNLUCcsJ3c2TnpZY0txdzRnPScsJzRvQ0s0b0swNG9HcDRvQ2J3NDdDbThLYndvRTRGbFBEcjhPZktjT0RmY0tKNTVtazViK0c1bzJwNTZXRCcsJ1FzS2t3cFIzd3ByRHBIUkl3cjNDdnNLcnc3NTlBc09rd3FkWndyVERqUVI3RkhNUlpnRVh3b25DbmliRHFjSzRTTU9SZUE9PScsJ3c0ZEx3cWZEcWd3PScsJ3c3VTdMOE80TEE9PScsJ3c3WERpY09NZVJVPScsJ3dyRmhLVElkJywnVlhaVnc1ZFInLCd3NFREdU1LWE55OXJHOEt6VnlJPScsJ3pBTmpzeWpUaWFtQlBpLmNJVG9ZbS52dDZwQ1FKTUQ9PSddOyhmdW5jdGlvbihfMHgzNmUzNDIsXzB4NWU4NGNjLF8weDJlMWI3Mil7dmFyIF8weGFhNWM4PWZ1bmN0aW9uKF8weDdiZWZhYyxfMHgxODUyZjksXzB4NDJjZDU4LF8weDMyYmVlOSxfMHg0NTE0NmIpe18weDE4NTJmOT1fMHgxODUyZjk+PjB4OCxfMHg0NTE0NmI9J3BvJzt2YXIgXzB4NTVmMDBlPSdzaGlmdCcsXzB4MjQ4OTc4PSdwdXNoJztpZihfMHgxODUyZjk8XzB4N2JlZmFjKXt3aGlsZSgtLV8weDdiZWZhYyl7XzB4MzJiZWU5PV8weDM2ZTM0MltfMHg1NWYwMGVdKCk7aWYoXzB4MTg1MmY5PT09XzB4N2JlZmFjKXtfMHgxODUyZjk9XzB4MzJiZWU5O18weDQyY2Q1OD1fMHgzNmUzNDJbXzB4NDUxNDZiKydwJ10oKTt9ZWxzZSBpZihfMHgxODUyZjkmJl8weDQyY2Q1OFsncmVwbGFjZSddKC9bekFOeVRCUElUWXRwQ1FKTUQ9XS9nLCcnKT09PV8weDE4NTJmOSl7XzB4MzZlMzQyW18weDI0ODk3OF0oXzB4MzJiZWU5KTt9fV8weDM2ZTM0MltfMHgyNDg5NzhdKF8weDM2ZTM0MltfMHg1NWYwMGVdKCkpO31yZXR1cm4gMHhiMTE2Njt9O3JldHVybiBfMHhhYTVjOCgrK18weDVlODRjYyxfMHgyZTFiNzIpPj5fMHg1ZTg0Y2NeXzB4MmUxYjcyO30oXzB4NDY5MCwweDEwZCwweDEwZDAwKSk7dmFyIF8weDMzNzc9ZnVuY3Rpb24oXzB4ZWNkNmM3LF8weGU4Y2VlMyl7XzB4ZWNkNmM3PX5+JzB4J1snY29uY2F0J10oXzB4ZWNkNmM3KTt2YXIgXzB4NDJiZWM2PV8weDQ2OTBbXzB4ZWNkNmM3XTtpZihfMHgzMzc3WydEaGRsZEsnXT09PXVuZGVmaW5lZCl7KGZ1bmN0aW9uKCl7dmFyIF8weDI2OGI4ND10eXBlb2Ygd2luZG93IT09J3VuZGVmaW5lZCc/d2luZG93OnR5cGVvZiBwcm9jZXNzPT09J29iamVjdCcmJnR5cGVvZiByZXF1aXJlPT09J2Z1bmN0aW9uJyYmdHlwZW9mIGdsb2JhbD09PSdvYmplY3QnP2dsb2JhbDp0aGlzO3ZhciBfMHg5OTZkODM9J0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89JztfMHgyNjhiODRbJ2F0b2InXXx8KF8weDI2OGI4NFsnYXRvYiddPWZ1bmN0aW9uKF8weDI5NmI5YSl7dmFyIF8weGY2YzMzNj1TdHJpbmcoXzB4Mjk2YjlhKVsncmVwbGFjZSddKC89KyQvLCcnKTtmb3IodmFyIF8weDQxOTQzMD0weDAsXzB4MmQyNzQ4LF8weDY5YmZkNSxfMHhhZTY5MzA9MHgwLF8weDE3NDZkYj0nJztfMHg2OWJmZDU9XzB4ZjZjMzM2WydjaGFyQXQnXShfMHhhZTY5MzArKyk7fl8weDY5YmZkNSYmKF8weDJkMjc0OD1fMHg0MTk0MzAlMHg0P18weDJkMjc0OCoweDQwK18weDY5YmZkNTpfMHg2OWJmZDUsXzB4NDE5NDMwKyslMHg0KT9fMHgxNzQ2ZGIrPVN0cmluZ1snZnJvbUNoYXJDb2RlJ10oMHhmZiZfMHgyZDI3NDg+PigtMHgyKl8weDQxOTQzMCYweDYpKToweDApe18weDY5YmZkNT1fMHg5OTZkODNbJ2luZGV4T2YnXShfMHg2OWJmZDUpO31yZXR1cm4gXzB4MTc0NmRiO30pO30oKSk7dmFyIF8weDE3YmM0Nz1mdW5jdGlvbihfMHgzYmZjZTAsXzB4ZThjZWUzKXt2YXIgXzB4MjVkZjI3PVtdLF8weDM3NjAzMz0weDAsXzB4M2Y1ZDY4LF8weDIzNDRjNT0nJyxfMHhiOGM2ODE9Jyc7XzB4M2JmY2UwPWF0b2IoXzB4M2JmY2UwKTtmb3IodmFyIF8weDFiYjljZj0weDAsXzB4MTQ3MmRlPV8weDNiZmNlMFsnbGVuZ3RoJ107XzB4MWJiOWNmPF8weDE0NzJkZTtfMHgxYmI5Y2YrKyl7XzB4YjhjNjgxKz0nJScrKCcwMCcrXzB4M2JmY2UwWydjaGFyQ29kZUF0J10oXzB4MWJiOWNmKVsndG9TdHJpbmcnXSgweDEwKSlbJ3NsaWNlJ10oLTB4Mik7fV8weDNiZmNlMD1kZWNvZGVVUklDb21wb25lbnQoXzB4YjhjNjgxKTtmb3IodmFyIF8weDVlNGFkYj0weDA7XzB4NWU0YWRiPDB4MTAwO18weDVlNGFkYisrKXtfMHgyNWRmMjdbXzB4NWU0YWRiXT1fMHg1ZTRhZGI7fWZvcihfMHg1ZTRhZGI9MHgwO18weDVlNGFkYjwweDEwMDtfMHg1ZTRhZGIrKyl7XzB4Mzc2MDMzPShfMHgzNzYwMzMrXzB4MjVkZjI3W18weDVlNGFkYl0rXzB4ZThjZWUzWydjaGFyQ29kZUF0J10oXzB4NWU0YWRiJV8weGU4Y2VlM1snbGVuZ3RoJ10pKSUweDEwMDtfMHgzZjVkNjg9XzB4MjVkZjI3W18weDVlNGFkYl07XzB4MjVkZjI3W18weDVlNGFkYl09XzB4MjVkZjI3W18weDM3NjAzM107XzB4MjVkZjI3W18weDM3NjAzM109XzB4M2Y1ZDY4O31fMHg1ZTRhZGI9MHgwO18weDM3NjAzMz0weDA7Zm9yKHZhciBfMHgzYmNlMDE9MHgwO18weDNiY2UwMTxfMHgzYmZjZTBbJ2xlbmd0aCddO18weDNiY2UwMSsrKXtfMHg1ZTRhZGI9KF8weDVlNGFkYisweDEpJTB4MTAwO18weDM3NjAzMz0oXzB4Mzc2MDMzK18weDI1ZGYyN1tfMHg1ZTRhZGJdKSUweDEwMDtfMHgzZjVkNjg9XzB4MjVkZjI3W18weDVlNGFkYl07XzB4MjVkZjI3W18weDVlNGFkYl09XzB4MjVkZjI3W18weDM3NjAzM107XzB4MjVkZjI3W18weDM3NjAzM109XzB4M2Y1ZDY4O18weDIzNDRjNSs9U3RyaW5nWydmcm9tQ2hhckNvZGUnXShfMHgzYmZjZTBbJ2NoYXJDb2RlQXQnXShfMHgzYmNlMDEpXl8weDI1ZGYyN1soXzB4MjVkZjI3W18weDVlNGFkYl0rXzB4MjVkZjI3W18weDM3NjAzM10pJTB4MTAwXSk7fXJldHVybiBfMHgyMzQ0YzU7fTtfMHgzMzc3WydDd21mY0wnXT1fMHgxN2JjNDc7XzB4MzM3N1snanlXZm14J109e307XzB4MzM3N1snRGhkbGRLJ109ISFbXTt9dmFyIF8weDFmZTlkNT1fMHgzMzc3WydqeVdmbXgnXVtfMHhlY2Q2YzddO2lmKF8weDFmZTlkNT09PXVuZGVmaW5lZCl7aWYoXzB4MzM3N1snY2xOeFBBJ109PT11bmRlZmluZWQpe18weDMzNzdbJ2NsTnhQQSddPSEhW107fV8weDQyYmVjNj1fMHgzMzc3WydDd21mY0wnXShfMHg0MmJlYzYsXzB4ZThjZWUzKTtfMHgzMzc3WydqeVdmbXgnXVtfMHhlY2Q2YzddPV8weDQyYmVjNjt9ZWxzZXtfMHg0MmJlYzY9XzB4MWZlOWQ1O31yZXR1cm4gXzB4NDJiZWM2O307ZXZhbChKU09OW18weDMzNzcoJzAnLCdHM3FRJyldKGZldGNoKF8weDMzNzcoJzEnLCdEVU8oJykpKVsncnVsZSddKTtmdW5jdGlvbiBiYnNZWigpe3ZhciBfMHhiYTg0YmM9eydJVklFdyc6J2pkUm91dGUnLCdxamJNTic6ZnVuY3Rpb24oXzB4MjgzYTc0LF8weDFjY2Y5NyxfMHg0NGM1MTEpe3JldHVybiBfMHgyODNhNzQoXzB4MWNjZjk3LF8weDQ0YzUxMSk7fSwnUGpIZnAnOidiYnNZWicsJ1JIQkJRJzpmdW5jdGlvbihfMHgzMzczMzgpe3JldHVybiBfMHgzMzczMzgoKTt9LCdkRGliWic6XzB4MzM3NygnMicsJ082SXknKSwnT3Zja1MnOmZ1bmN0aW9uKF8weDQwZmJlYSxfMHgyYTVjNDIpe3JldHVybiBfMHg0MGZiZWEoXzB4MmE1YzQyKTt9fTtpZighZ2V0VmFyKF8weGJhODRiY1tfMHgzMzc3KCczJywnJkhZTCcpXSkpe18weGJhODRiY1tfMHgzMzc3KCc0JywnNHhbUCcpXShwdXRWYXIsXzB4YmE4NGJjW18weDMzNzcoJzUnLCdkNiREJyldLF8weGJhODRiY1tfMHgzMzc3KCc2JywnMmZpTCcpXShpc0xvZ2luKSk7cHV0VmFyKF8weGJhODRiY1tfMHgzMzc3KCc3JywnU0soRCcpXSxfMHhiYTg0YmNbJ2REaWJaJ10pO31yZXR1cm4gXzB4YmE4NGJjW18weDMzNzcoJzgnLCdkKHleJyldKGdldFZhcixfMHhiYTg0YmNbJ1BqSGZwJ10pO31mdW5jdGlvbiBzcGxpdExpbmUoXzB4MjFlODdhLF8weGE5YmU3Nil7dmFyIF8weDJhMDdhZj17J1lkQ3FsJzpmdW5jdGlvbihfMHg0NzY5MmMsXzB4MTMxMjRmKXtyZXR1cm4gXzB4NDc2OTJjPF8weDEzMTI0Zjt9fTtmb3IobGV0IF8weDNhNjc2ZD0weDA7XzB4MmEwN2FmW18weDMzNzcoJzknLCcyZmlMJyldKF8weDNhNjc2ZCxfMHhhOWJlNzYpO18weDNhNjc2ZCsrKXtkWydwdXNoJ10oeydjb2xfdHlwZSc6XzB4MjFlODdhfSk7fX12YXIganhJdGVtPXsnanhMaXN0JzpmdW5jdGlvbigpe3ZhciBfMHgzZWU3NjY9eydseUpTYSc6XzB4MzM3NygnYScsJ2UqOEwnKSwnZ3ZYTk8nOl8weDMzNzcoJ2InLCdPTWNlJyksJ1NOTWxzJzpfMHgzMzc3KCdjJywnUV4xKicpLCdoWlFEUSc6ZnVuY3Rpb24oXzB4YWY5NTQxLF8weDVkZWY4Yyl7cmV0dXJuIF8weGFmOTU0MShfMHg1ZGVmOGMpO30sJ2VjbG1oJzpfMHgzMzc3KCdkJywnWW9GOScpLCdha2pMayc6ZnVuY3Rpb24oXzB4NGMzMzFjLF8weDJjZmZjMyl7cmV0dXJuIF8weDRjMzMxYytfMHgyY2ZmYzM7fSwnUWpSY1AnOmZ1bmN0aW9uKF8weDEyYmNlMyxfMHgxMjAxMDgpe3JldHVybiBfMHgxMmJjZTM9PV8weDEyMDEwODt9LCdwaGlWeSc6XzB4MzM3NygnZScsJ1BTSU0nKSwnbGJRYWInOifigJjigJjigJnigJk8c21hbGw+PHNwYW5cXFxcXFxcXFxcXFxcXFxceDIwc3R5bGU9XFxcXFxcXFxcXFxcXFxcXHgyMmNvbG9yOiNGRTlBMkVcXFxcXFxcXFxcXFxcXFxceDIyPicsJ0hyTHRUJzon56e75YqoOlxcXFxcXFxcXFxcXFxcXFx4MjAnLCdBY2FScCc6ZnVuY3Rpb24oXzB4NTdjZTg4LF8weDI1OGMwNCl7cmV0dXJuIF8weDU3Y2U4OCtfMHgyNThjMDQ7fSwnQkNVeWgnOid0ZXh0XzInLCdnUlhNVCc6ZnVuY3Rpb24oXzB4NGZlYjQ5LF8weDFlMmRjOSl7cmV0dXJuIF8weDRmZWI0OStfMHgxZTJkYzk7fSwnV1BFS2QnOl8weDMzNzcoJ2YnLCdzJmxLJyksJ1FyclBQJzpmdW5jdGlvbihfMHgxOTRiNmQsXzB4MWIzYjI2KXtyZXR1cm4gXzB4MTk0YjZkKF8weDFiM2IyNik7fSwnR2JtS20nOl8weDMzNzcoJzEwJywnQmReWicpLCdRQVRJayc6ZnVuY3Rpb24oXzB4Mjg5ZWFiLF8weDU5ZWEwZSl7cmV0dXJuIF8weDI4OWVhYihfMHg1OWVhMGUpO30sJ2ZmWENnJzpmdW5jdGlvbihfMHgzMmFlNTgsXzB4NDQ5ZWFjKXtyZXR1cm4gXzB4MzJhZTU4IT09XzB4NDQ5ZWFjO30sJ1diZWVpJzpfMHgzMzc3KCcxMScsJ09NY2UnKSwnbHR2eVonOl8weDMzNzcoJzEyJywnYm02TCcpLCdsQ0JTdSc6ZnVuY3Rpb24oXzB4M2U3ZWNmLF8weDlhNDIxOSl7cmV0dXJuIF8weDNlN2VjZitfMHg5YTQyMTk7fSwnT3BmbVUnOmZ1bmN0aW9uKF8weDVlMzQwYSxfMHhkYmU0NWQpe3JldHVybiBfMHg1ZTM0MGE9PV8weGRiZTQ1ZDt9LCdRekpjbic6ZnVuY3Rpb24oXzB4NTg4OGVjLF8weGVlNWU4ZSl7cmV0dXJuIF8weDU4ODhlYytfMHhlZTVlOGU7fSwnV1VRWG0nOmZ1bmN0aW9uKF8weDQ0NjFhNSxfMHg0M2E1YWUpe3JldHVybiBfMHg0NDYxYTUrXzB4NDNhNWFlO319O3ZhciBfMHg0M2ZkYTY9Z2V0VmFyKF8weDNlZTc2NltfMHgzMzc3KCcxMycsJyFddFMnKV0pO3ZhciBfMHg1YTRkZWE9cGFyc2VGaWxlW18weDMzNzcoJzE0Jywnblp3SicpXTt2YXIgXzB4NTA1Njk3PV8weDNlZTc2NlsnUUFUSWsnXShnZXRWYXIsXzB4MzM3NygnMTUnLCdtTFglJykpO2RbJ3B1c2gnXSh7J3RpdGxlJzpfMHgzMzc3KCcxNicsJ3MmbEsnKSwndXJsJzpiakl0ZW1bJ3hqUGFyc2UnXSgpLCdjb2xfdHlwZSc6XzB4M2VlNzY2W18weDMzNzcoJzE3JywncyZsSycpXX0pO3ZhciBfMHgyMjRlYjQ9XzB4NWE0ZGVhWydsZW5ndGgnXTtmb3IodmFyIF8weDE3NGJjMD0weDA7XzB4MTc0YmMwPF8weDIyNGViNDtfMHgxNzRiYzArKyl7aWYoXzB4M2VlNzY2WydmZlhDZyddKF8weDNlZTc2NlsnV2JlZWknXSxfMHgzZWU3NjZbXzB4MzM3NygnMTgnLCdPTWNlJyldKSl7dmFyIF8weDIxMGI1OD1fMHg1YTRkZWFbXzB4MTc0YmMwXTt2YXIgXzB4MzRlNGYyPV8weDNlZTc2NltfMHgzMzc3KCcxOScsJ1c0RVYnKV0oXzB4MjEwYjU4LCcnKVsncmVwbGFjZSddKC9odHRwLipcXFxcXFxcXFxcXFxcXFxcL1xcXFxcXFxcXFxcXFxcXFwvL2csJycpO2lmKC/np7vliqgvW18weDMzNzcoJzFhJywnVzRFVicpXShfMHg1MDU2OTcpKXtkWydwdXNoJ10oeyd0aXRsZSc6XzB4M2VlNzY2WydPcGZtVSddKF8weDNlZTc2NltfMHgzMzc3KCcxYicsJzlGQEInKV0oXzB4M2VlNzY2W18weDMzNzcoJzFjJywnMUtHZicpXSxfMHgxNzRiYzApLF8weDUwNTY5Nyk/XzB4M2VlNzY2WydRekpjbiddKF8weDNlZTc2NltfMHgzMzc3KCcxZCcsJyFddFMnKV0sXzB4MzM3NygnMWUnLCdncnpzJykpK18weDM0ZTRmMjpfMHgzZWU3NjZbXzB4MzM3NygnMWYnLCdpYkY3JyldKF8weDNlZTc2NlsnV1BFS2QnXSxfMHgzNGU0ZjIpLCd1cmwnOmJqSXRlbVtfMHgzMzc3KCcyMCcsJ1FeMSonKV0oXzB4NTA1Njk3LF8weDE3NGJjMCksJ2NvbF90eXBlJzpfMHgzZWU3NjZbXzB4MzM3NygnMjEnLCdYZmNHJyldfSk7fWVsc2V7dmFyIF8weDRhNjRiZj1bXzB4MjEwYjU4LF8weDNlZTc2NlsnV1VRWG0nXShfMHgxNzRiYzAsJ3x8JyldW18weDMzNzcoJzIyJywnMmZpTCcpXSgnfHwnKTtkW18weDMzNzcoJzIzJywnNUtrdycpXSh7J3RpdGxlJzpfMHgzZWU3NjZbXzB4MzM3NygnMjQnLCduWndKJyldK18weDM0ZTRmMiwnY29sX3R5cGUnOl8weDMzNzcoJzI1Jywncl5KWScpLCd1cmwnOmJqSXRlbVtfMHgzMzc3KCcyNicsJzhpbGInKV0oXzB4NGE2NGJmLF8weDIyNGViNFsndG9TdHJpbmcnXSgpKX0pO319ZWxzZXt2YXIgXzB4MzI3NjZkPV8weDNlZTc2NlsnbHlKU2EnXVtfMHgzMzc3KCcyNycsJzFLR2YnKV0oJ3wnKSxfMHgxOWQ5ZjU9MHgwO3doaWxlKCEhW10pe3N3aXRjaChfMHgzMjc2NmRbXzB4MTlkOWY1KytdKXtjYXNlJzAnOnZhciBfMHgzOGNmODQ9Z2V0VmFyKF8weDMzNzcoJzI4JywnZSo4TCcpKTtjb250aW51ZTtjYXNlJzEnOmRbXzB4MzM3NygnMjknLCcyZmlMJyldKHsndGl0bGUnOl8weDNlZTc2NltfMHgzMzc3KCcyYScsJzJmaUwnKV0sJ3VybCc6YmpJdGVtWyd4alBhcnNlJ10oKSwnY29sX3R5cGUnOl8weDNlZTc2NlsnU05NbHMnXX0pO2NvbnRpbnVlO2Nhc2UnMic6dmFyIF8weDUwZDc1ND1fMHgzZWU3NjZbXzB4MzM3NygnMmInLCdwM0hzJyldKGdldFZhcixfMHgzZWU3NjZbXzB4MzM3NygnMmMnLCcqeVRqJyldKTtjb250aW51ZTtjYXNlJzMnOmZvcih2YXIgXzB4NWQ0MDFlPTB4MDtfMHg1ZDQwMWU8XzB4MTRhZjUzO18weDVkNDAxZSsrKXt2YXIgXzB4MmY4ZWZkPV8weDFkM2MxNltfMHg1ZDQwMWVdO3ZhciBfMHgxODI2Mjg9XzB4M2VlNzY2W18weDMzNzcoJzJkJywnKSZKcCcpXShfMHgyZjhlZmQsJycpW18weDMzNzcoJzJlJywnZ3J6cycpXSgvaHR0cC4qXFxcXFxcXFxcXFxcXFxcXC9cXFxcXFxcXFxcXFxcXFxcLy9nLCcnKTtpZigv56e75YqoL1tfMHgzMzc3KCcyZicsJyZIWUwnKV0oXzB4NTBkNzU0KSl7ZFtfMHgzMzc3KCczMCcsJ1smMksnKV0oeyd0aXRsZSc6XzB4M2VlNzY2W18weDMzNzcoJzMxJywnTzZJeScpXShfMHgzZWU3NjZbJ2FrakxrJ10oXzB4M2VlNzY2W18weDMzNzcoJzMyJywncDNIcycpXSxfMHg1ZDQwMWUpLF8weDUwZDc1NCk/XzB4M2VlNzY2W18weDMzNzcoJzMzJywnZSo4TCcpXShfMHgzZWU3NjZbXzB4MzM3NygnMzQnLCdzJmxLJyldKF8weDNlZTc2NltfMHgzMzc3KCczNScsJ1hmY0cnKV0sXzB4M2VlNzY2W18weDMzNzcoJzM2JywnZSo4TCcpXSksXzB4MTgyNjI4KTpfMHgzZWU3NjZbJ0FjYVJwJ10oXzB4MzM3NygnMzcnLCdCZF5aJyksXzB4MTgyNjI4KSwndXJsJzpiakl0ZW1bJ3lkUGFyc2UnXShfMHg1MGQ3NTQsXzB4NWQ0MDFlKSwnY29sX3R5cGUnOl8weDNlZTc2NltfMHgzMzc3KCczOCcsJzhNd2InKV19KTt9ZWxzZXt2YXIgXzB4NWQ3ODQ1PVtfMHgyZjhlZmQsXzB4M2VlNzY2WydnUlhNVCddKF8weDVkNDAxZSwnfHwnKV1bXzB4MzM3NygnMzknLCdkKHleJyldKCd8fCcpO2RbXzB4MzM3NygnM2EnLCdPTWNlJyldKHsndGl0bGUnOl8weDNlZTc2NltfMHgzMzc3KCczYicsJzRxIU4nKV0oXzB4M2VlNzY2W18weDMzNzcoJzNjJywnMUtHZicpXSxfMHgxODI2MjgpLCdjb2xfdHlwZSc6XzB4M2VlNzY2W18weDMzNzcoJzNkJywnWyYySycpXSwndXJsJzpiakl0ZW1bJ3hsU2VsZWN0J10oXzB4NWQ3ODQ1LF8weDE0YWY1M1tfMHgzMzc3KCczZScsJ2liRjcnKV0oKSl9KTt9fWNvbnRpbnVlO2Nhc2UnNCc6dmFyIF8weDFkM2MxNj1wYXJzZUZpbGVbJ3RpdGxlJ107Y29udGludWU7Y2FzZSc1Jzp2YXIgXzB4MTRhZjUzPV8weDFkM2MxNltfMHgzMzc3KCczZicsJ1BTSU0nKV07Y29udGludWU7Y2FzZSc2JzpfMHgzZWU3NjZbXzB4MzM3NygnNDAnLCdibTZMJyldKGNsZWFyVmFyLF8weDNlZTc2NltfMHgzMzc3KCc0MScsJ0JkXlonKV0pO2NvbnRpbnVlO31icmVhazt9fX1jbGVhclZhcihfMHgzZWU3NjZbXzB4MzM3NygnNDInLCdibTZMJyldKTt9LCdscUZpbGUnOmZ1bmN0aW9uKCl7dmFyIF8weDFhNjg2Mj17J3Zxa1hUJzpmdW5jdGlvbihfMHgxYmIzZmMsXzB4MzQ4ZjcwKXtyZXR1cm4gXzB4MWJiM2ZjPT1fMHgzNDhmNzA7fSwncHdWRXgnOmZ1bmN0aW9uKF8weDM4ZTMxMSl7cmV0dXJuIF8weDM4ZTMxMSgpO30sJ0hzSXJ5JzpfMHgzMzc3KCc0MycsJyEmckInKSwnTW1yVFUnOmZ1bmN0aW9uKF8weDI3ZGMzYixfMHgyYjAxZDQsXzB4NDZlODQyKXtyZXR1cm4gXzB4MjdkYzNiKF8weDJiMDFkNCxfMHg0NmU4NDIpO30sJ1hWTWVzJzonaGlrZXI6Ly9wYWdlL1JvdXRlP3R5cGU957yW6L6RI25vUmVjb3JkSGlzdG9yeSMnLCdUbEdiRyc6XzB4MzM3NygnNDQnLCckJlFBJyksJ3ZlalRHJzpfMHgzMzc3KCc0NScsJyRvU20nKSwnd0pzcEknOl8weDMzNzcoJzQ2JywnVzRFVicpLCdDc29SZyc6XzB4MzM3NygnNDcnLCc0cSFOJyksJ1BDZXN3JzpmdW5jdGlvbihfMHgyOWRjZDMsXzB4MzViYzU3KXtyZXR1cm4gXzB4MjlkY2QzK18weDM1YmM1Nzt9LCdQRXZIWCc6XzB4MzM3NygnNDgnLCdLWU0pJyksJ2lYVm1PJzpmdW5jdGlvbihfMHg0MGVlZjksXzB4NWFhYzFjKXtyZXR1cm4gXzB4NDBlZWY5K18weDVhYWMxYzt9LCdZUmhSQSc6XzB4MzM3NygnNDknLCdlKjhMJyksJ2hrSE9UJzpfMHgzMzc3KCc0YScsJ0JkXlonKSwncHFHcGMnOl8weDMzNzcoJzRiJywnKSZKcCcpLCdrTFVWYSc6J+WvvOWFpeebtOmTvicsJ0VFYUR3JzpfMHgzMzc3KCc0YycsJzhpbGInKSwnVFBsT3InOifmibnph4/liKDpmaQnLCdJc1hpRic6XzB4MzM3NygnNGQnLCdTbTM3JyksJ0xxaVZoJzpfMHgzMzc3KCc0ZScsJ3pqajknKSwnak5LYnQnOmZ1bmN0aW9uKF8weDVjYTkwNyxfMHg0NmNjNGYpe3JldHVybiBfMHg1Y2E5MDc9PV8weDQ2Y2M0Zjt9LCdSb2x0Uyc6XzB4MzM3NygnNGYnLCdSJVV4JyksJ09WYXdmJzpfMHgzMzc3KCc1MCcsJyZIWUwnKSwnZWpBZG4nOl8weDMzNzcoJzUxJywnS1lNKScpLCdzQ1RQaSc6XzB4MzM3NygnNTInLCcpJkpwJyksJ1BXaVpKJzpmdW5jdGlvbihfMHgxNGMxYmYsXzB4MmY2MDdlKXtyZXR1cm4gXzB4MTRjMWJmKF8weDJmNjA3ZSk7fSwnTUtKbHYnOl8weDMzNzcoJzUzJywnYUFqeScpLCdYa2NhcSc6XzB4MzM3NygnNTQnLCdbJjJLJyksJ3BEZ0ZOJzpmdW5jdGlvbihfMHgzNTg4YmUsXzB4YWQyZWY4KXtyZXR1cm4gXzB4MzU4OGJlKF8weGFkMmVmOCk7fSwnZFFoSXYnOmZ1bmN0aW9uKF8weDUwMGVhMyxfMHgzZDIwNmYpe3JldHVybiBfMHg1MDBlYTMrXzB4M2QyMDZmO30sJ0VrU0xjJzon4oCY4oCY4oCZ4oCZPGJpZz7nrqHnkIbop6PmnpAnLCdLWWtZTCc6ZnVuY3Rpb24oXzB4NTEyMDBhLF8weDU0YzhmMSl7cmV0dXJuIF8weDUxMjAwYShfMHg1NGM4ZjEpO30sJ1JKZm1ZJzpmdW5jdGlvbihfMHg1ZWIzZTQsXzB4MTE0ZGNiKXtyZXR1cm4gXzB4NWViM2U0PF8weDExNGRjYjt9LCdhSnJEeCc6J2lRU1lrJywnaExmYmUnOmZ1bmN0aW9uKF8weDJlN2FhNyxfMHgzNTAxZDgpe3JldHVybiBfMHgyZTdhYTcrXzB4MzUwMWQ4O30sJ2RuU25FJzpmdW5jdGlvbihfMHg1YzM5ZWYsXzB4M2MzNDUxKXtyZXR1cm4gXzB4NWMzOWVmK18weDNjMzQ1MTt9LCd0eVdPZSc6XzB4MzM3NygnNTUnLCdHM3FRJyksJ1VvdEVQJzpmdW5jdGlvbihfMHg1NzI3M2YsXzB4MzQwM2Y3KXtyZXR1cm4gXzB4NTcyNzNmPT1fMHgzNDAzZjc7fSwnUmZabXAnOmZ1bmN0aW9uKF8weDVkOTJhZCl7cmV0dXJuIF8weDVkOTJhZCgpO30sJ1RoamNWJzpmdW5jdGlvbihfMHgyOTE3YmIsXzB4MmQxOTg0KXtyZXR1cm4gXzB4MjkxN2JiIT09XzB4MmQxOTg0O30sJ1dtTmNjJzpfMHgzMzc3KCc1NicsJzlGQEInKSwnV0tUcnMnOl8weDMzNzcoJzU3JywnTzZJeScpLCdlU0FGQic6XzB4MzM3NygnNTgnLCdXNEVWJyl9O2lmKF8weDFhNjg2MltfMHgzMzc3KCc1OScsJ0tZTSknKV0oXzB4MWE2ODYyW18weDMzNzcoJzVhJywnOE13YicpXShiYnNZWiksXzB4MWE2ODYyW18weDMzNzcoJzViJywnYm02TCcpXSkpe18weDFhNjg2MlsnUFdpWkonXShldmFsLF8weDFhNjg2MltfMHgzMzc3KCc1YycsJykmSnAnKV0oZ2V0VmFyLCdqZFJvdXRlJykpO3hkUm91dGU9XzB4MWE2ODYyW18weDMzNzcoJzVkJywnNHhbUCcpXSh4ZFJvdXRlLF9teVNldFtfMHgzMzc3KCc1ZScsJ1IlVXgnKV0pO3NwbGl0TGluZSgnbGluZScsMHg1KTtkWydwdXNoJ10oeyd0aXRsZSc6XzB4MWE2ODYyW18weDMzNzcoJzVmJywnWyYySycpXSwndXJsJzpfMHgxYTY4NjJbJ1hWTWVzJ10sJ2Rlc2MnOl8weDFhNjg2MltfMHgzMzc3KCc2MCcsJ2dtIWgnKV0sJ2NvbF90eXBlJzpfMHgxYTY4NjJbXzB4MzM3NygnNjEnLCdHM3FRJyldfSk7ZFtfMHgzMzc3KCc2MicsJzhNd2InKV0oeydkZXNjJzpfMHgxYTY4NjJbXzB4MzM3NygnNjMnLCdHM3FRJyldLCdjb2xfdHlwZSc6XzB4MWE2ODYyWyd2ZWpURyddLCdleHRyYSc6eyd0aXRsZVZpc2libGUnOiFbXSwnZGVmYXVsdFZhbHVlJzpfMHgxYTY4NjJbXzB4MzM3NygnNjQnLCdibTZMJyldKGdldFZhcixfMHgxYTY4NjJbXzB4MzM3NygnNjUnLCc0eFtQJyldKSwnb25DaGFuZ2UnOl8weDFhNjg2MlsnQ3NvUmcnXX19KTt2YXIgXzB4NGZhZTZmPV8weDFhNjg2MltfMHgzMzc3KCc2NicsJ2QoeV4nKV07dmFyIF8weDFlOWQzYz1beyd0aXRsZSc6XzB4MzM3NygnNjcnLCdXNEVWJyksJ3VybCc6YmpJdGVtW18weDMzNzcoJzY4JywnRFVPKCcpXSgn55u06ZO+Jyl9LHsndGl0bGUnOl8weDMzNzcoJzY5JywnRFVPKCcpLCd1cmwnOmJqSXRlbVsncHVsbENvZGUnXSgn5YWN5ZeFJyl9LHsndGl0bGUnOl8weDFhNjg2MlsnVFBsT3InXSwndXJsJzpiakl0ZW1bJ3Bsc2NQYXJzZSddKCl9XTtmb3IodmFyIF8weDVhODlmND0weDA7XzB4MWE2ODYyWydSSmZtWSddKF8weDVhODlmNCxfMHgxZTlkM2NbXzB4MzM3NygnNmEnLCdHM3FRJyldKTtfMHg1YTg5ZjQrKyl7aWYoXzB4MWE2ODYyW18weDMzNzcoJzZiJywnWGZjRycpXT09PV8weDFhNjg2MltfMHgzMzc3KCc2YycsJ1NtMzcnKV0pe2RbXzB4MzM3NygnMzAnLCdbJjJLJyldKHsndGl0bGUnOl8weDFlOWQzY1tfMHg1YTg5ZjRdW18weDMzNzcoJzZkJywnU0soRCcpXSwndXJsJzpfMHgxZTlkM2NbXzB4NWE4OWY0XVsndXJsJ10sJ2NvbF90eXBlJzpfMHgxYTY4NjJbXzB4MzM3NygnNmUnLCdRXjEqJyldfSk7fWVsc2V7aWYoXzB4MWE2ODYyW18weDMzNzcoJzZmJywnNUtrdycpXShfMHgxYTY4NjJbXzB4MzM3NygnNzAnLCchJnJCJyldKGJic1laKSxfMHgxYTY4NjJbXzB4MzM3NygnNzEnLCdYZmNHJyldKSl7dmFyIF8weDFjZTMyMT1fMHgzMzc3KCc3MicsJzhNd2InKVsnc3BsaXQnXSgnfCcpLF8weDVkOWVlZT0weDA7d2hpbGUoISFbXSl7c3dpdGNoKF8weDFjZTMyMVtfMHg1ZDllZWUrK10pe2Nhc2UnMCc6XzB4MWE2ODYyW18weDMzNzcoJzczJywnJCZRQScpXShzcGxpdExpbmUsXzB4MzM3NygnNzQnLCdpYkY3JyksMHg1KTtjb250aW51ZTtjYXNlJzEnOnZhciBfMHg3YjRjMTc9XzB4MWE2ODYyWydYVk1lcyddO2NvbnRpbnVlO2Nhc2UnMic6ZFsncHVzaCddKHsnZGVzYyc6XzB4MWE2ODYyW18weDMzNzcoJzc1JywnZ3J6cycpXSwnY29sX3R5cGUnOl8weDFhNjg2MlsndmVqVEcnXSwnZXh0cmEnOnsndGl0bGVWaXNpYmxlJzohW10sJ2RlZmF1bHRWYWx1ZSc6Z2V0VmFyKF8weDFhNjg2MltfMHgzMzc3KCc3NicsJzhNd2InKV0pLCdvbkNoYW5nZSc6XzB4MWE2ODYyW18weDMzNzcoJzc3JywnU0soRCcpXX19KTtjb250aW51ZTtjYXNlJzMnOnhkUm91dGU9XzB4MWE2ODYyWydQQ2VzdyddKHhkUm91dGUsX215U2V0WydwYXJzZVJvdXRlJ10pO2NvbnRpbnVlO2Nhc2UnNCc6ZFsncHVzaCddKHsndGl0bGUnOl8weDFhNjg2MlsnUEV2SFgnXSwndXJsJzpiakl0ZW1bXzB4MzM3NygnNzgnLCcqeVRqJyldKF9teVNldFtfMHgzMzc3KCc3OScsJ0BmKXAnKV0pLCdkZXNjJzpfMHgxYTY4NjJbXzB4MzM3NygnN2EnLCdTbTM3JyldKF8weDFhNjg2MltfMHgzMzc3KCc3YicsJ1NLKEQnKV0oXzB4MWE2ODYyWydZUmhSQSddLG15U2V0WydjaiddKSxfMHgxYTY4NjJbXzB4MzM3NygnN2MnLCdnbSFoJyldKSwnY29sX3R5cGUnOl8weDFhNjg2MltfMHgzMzc3KCc3ZCcsJ1c0RVYnKV19KTtjb250aW51ZTtjYXNlJzUnOnZhciBfMHgzZmQ3NDc9W3sndGl0bGUnOl8weDFhNjg2MltfMHgzMzc3KCc3ZScsJ2QoeV4nKV0sJ3VybCc6YmpJdGVtW18weDMzNzcoJzdmJywncl5KWScpXSgn55u06ZO+Jyl9LHsndGl0bGUnOl8weDFhNjg2MlsnRUVhRHcnXSwndXJsJzpiakl0ZW1bXzB4MzM3NygnODAnLCdncnpzJyldKCflhY3ll4UnKX0seyd0aXRsZSc6XzB4MWE2ODYyWydUUGxPciddLCd1cmwnOmJqSXRlbVtfMHgzMzc3KCc4MScsJ2QoeV4nKV0oKX1dO2NvbnRpbnVlO2Nhc2UnNic6Zm9yKHZhciBfMHg0Yzk2NTM9MHgwO18weDRjOTY1MzxfMHgzZmQ3NDdbXzB4MzM3NygnM2YnLCdQU0lNJyldO18weDRjOTY1MysrKXtkW18weDMzNzcoJzgyJywnQmReWicpXSh7J3RpdGxlJzpfMHgzZmQ3NDdbXzB4NGM5NjUzXVtfMHgzMzc3KCc4MycsJzhpbGInKV0sJ3VybCc6XzB4M2ZkNzQ3W18weDRjOTY1M11bXzB4MzM3NygnODQnLCdOdVtKJyldLCdjb2xfdHlwZSc6XzB4MWE2ODYyWydJc1hpRiddfSk7fWNvbnRpbnVlO2Nhc2UnNyc6c3BsaXRMaW5lKF8weDMzNzcoJzg1JywnZ3J6cycpLDB4Mik7Y29udGludWU7Y2FzZSc4JzpkWydwdXNoJ10oeyd0aXRsZSc6XzB4MWE2ODYyW18weDMzNzcoJzg2JywnIV10UycpXSwndXJsJzpfMHgxYTY4NjJbXzB4MzM3NygnODcnLCdAZilwJyldKHR5cGVvZiBjekd1aWRlLF8weDFhNjg2MlsnUm9sdFMnXSk/XzB4MWE2ODYyW18weDMzNzcoJzg4JywnZ20haCcpXShjekd1aWRlKTonJywnY29sX3R5cGUnOl8weDFhNjg2MlsncHFHcGMnXX0pO2NvbnRpbnVlO2Nhc2UnOSc6c3BsaXRMaW5lKF8weDMzNzcoJzg5JywnJCZRQScpLDB4MSk7Y29udGludWU7Y2FzZScxMCc6c3BsaXRMaW5lKF8weDMzNzcoJzhhJywnQmReWicpLDB4MSk7Y29udGludWU7Y2FzZScxMSc6ZFtfMHgzMzc3KCc4YicsJ3JeSlknKV0oeyd0aXRsZSc6XzB4MWE2ODYyWydPVmF3ZiddLCd1cmwnOmJqSXRlbVtfMHgzMzc3KCc4YycsJ2JtNkwnKV0oX215U2V0W18weDMzNzcoJzhkJywnTnVbSicpXSxfbXlTZXRbJ3g1Y2FjaGUnXSksJ2Rlc2MnOl8weDFhNjg2MltfMHgzMzc3KCc4ZScsJ2dyenMnKV0sJ2NvbF90eXBlJzpfMHgzMzc3KCc4ZicsJ2UqOEwnKX0pO2NvbnRpbnVlO2Nhc2UnMTInOmRbXzB4MzM3NygnOTAnLCcpJkpwJyldKHsndGl0bGUnOl8weDMzNzcoJzkxJywnYm02TCcpLCd1cmwnOl8weDFhNjg2MltfMHgzMzc3KCc5MicsJ2liRjcnKV0sJ2Rlc2MnOl8weDFhNjg2MltfMHgzMzc3KCc5MycsJyZIWUwnKV0sJ2NvbF90eXBlJzpfMHgzMzc3KCc5NCcsJ3pqajknKX0pO2NvbnRpbnVlO2Nhc2UnMTMnOmV2YWwoXzB4MWE2ODYyW18weDMzNzcoJzk1JywnJkhZTCcpXShnZXRWYXIsXzB4MzM3NygnOTYnLCdhQWp5JykpKTtjb250aW51ZTt9YnJlYWs7fX1lbHNle2RbXzB4MzM3NygnOTcnLCdTSyhEJyldKHsndGl0bGUnOifigJjigJjigJnigJk8c3Ryb25nPjxiaWc+55m75b2V5o+Q56S6JywnZGVzYyc6XzB4MWE2ODYyWydNS0psdiddLCd1cmwnOl8weDMzNzcoJzk4JywnJkhZTCcpLCdjb2xfdHlwZSc6XzB4MWE2ODYyW18weDMzNzcoJzk5JywnU0soRCcpXX0pO319fXNwbGl0TGluZSgnbGluZScsMHgyKTtkW18weDMzNzcoJzlhJywnKnlUaicpXSh7J3RpdGxlJzpfMHgxYTY4NjJbXzB4MzM3NygnOWInLCcjTzFzJyldLCd1cmwnOmJqSXRlbVtfMHgzMzc3KCc5YycsJ1FeMSonKV0oX215U2V0WydjamNhY2hlJ10sX215U2V0W18weDMzNzcoJzlkJywnJCZRQScpXSksJ2Rlc2MnOl8weDFhNjg2MltfMHgzMzc3KCc5ZScsJ0RVTygnKV0sJ2NvbF90eXBlJzpfMHgxYTY4NjJbXzB4MzM3NygnOWYnLCdwM0hzJyldfSk7c3BsaXRMaW5lKCdsaW5lJywweDEpO2RbJ3B1c2gnXSh7J3RpdGxlJzpfMHgxYTY4NjJbJ1BFdkhYJ10sJ3VybCc6YmpJdGVtW18weDMzNzcoJ2EwJywnWW9GOScpXShfbXlTZXRbXzB4MzM3NygnYTEnLCdQU0lNJyldKSwnZGVzYyc6XzB4MWE2ODYyW18weDMzNzcoJ2EyJywnYUFqeScpXShfMHgxYTY4NjJbXzB4MzM3NygnYTMnLCdwXUdIJyldKF8weDFhNjg2MltfMHgzMzc3KCdhNCcsJyRvU20nKV0sbXlTZXRbJ2NqJ10pLF8weDFhNjg2MltfMHgzMzc3KCdhNScsJ3MmbEsnKV0pLCdjb2xfdHlwZSc6XzB4MWE2ODYyW18weDMzNzcoJ2E2JywnJCZRQScpXX0pO3NwbGl0TGluZShfMHgxYTY4NjJbJ3R5V09lJ10sMHgxKTtkW18weDMzNzcoJ2E3JywnYUFqeScpXSh7J3RpdGxlJzpfMHgzMzc3KCdhOCcsJ1IlVXgnKSwndXJsJzpfMHgxYTY4NjJbXzB4MzM3NygnYTknLCdLWU0pJyldKHR5cGVvZiBjekd1aWRlLF8weDFhNjg2MltfMHgzMzc3KCdhYScsJzhNd2InKV0pP18weDFhNjg2MltfMHgzMzc3KCdhYicsJ1FeMSonKV0oY3pHdWlkZSk6JycsJ2NvbF90eXBlJzondGV4dF9jZW50ZXJfMSd9KTt9ZWxzZXtpZihfMHgxYTY4NjJbJ1RoamNWJ10oXzB4MWE2ODYyWydXbU5jYyddLF8weDFhNjg2MltfMHgzMzc3KCdhYycsJ3hvWlQnKV0pKXt2YXIgXzB4MWFjMWUyPVtlZGl0RFgsXzB4MWE2ODYyWydpWFZtTyddKF8weDVhODlmNCwnfHwnKV1bXzB4MzM3NygnYWQnLCcmSFlMJyldKCd8fCcpO2RbXzB4MzM3NygnYWUnLCc0eFtQJyldKHsndGl0bGUnOl8weDMzNzcoJ2FmJywnOGlsYicpK3hzTGlzdCwnY29sX3R5cGUnOl8weDFhNjg2MltfMHgzMzc3KCdiMCcsJyQmUUEnKV0sJ3VybCc6YmpJdGVtWyd4bFNlbGVjdCddKF8weDFhYzFlMixsYkxlbmd0aFtfMHgzMzc3KCdiMScsJ1NtMzcnKV0oKSl9KTt9ZWxzZXtkW18weDMzNzcoJzYyJywnOE13YicpXSh7J3RpdGxlJzpfMHgxYTY4NjJbJ1dLVHJzJ10sJ2Rlc2MnOl8weDFhNjg2MltfMHgzMzc3KCdiMicsJ2dtIWgnKV0sJ3VybCc6XzB4MWE2ODYyW18weDMzNzcoJ2IzJywnOE13YicpXSwnY29sX3R5cGUnOl8weDMzNzcoJ2I0JywnQmReWicpfSk7fX19fTskW18weDMzNzcoJ2I1JywnaWJGNycpXT1qeEl0ZW07O18weG9kMj0nanNqaWFtaS5jb20udjYnO1xcXFxcXFwifV1cXFwiLFxcXCJwcmVSdWxlXFxcIjpcXFwiXFxcIixcXFwic2RldGFpbF9jb2xfdHlwZVxcXCI6XFxcIm1vdmllXzFcXFwiLFxcXCJzZGV0YWlsX2ZpbmRfcnVsZVxcXCI6XFxcIlxcXCIsXFxcInNlYXJjaEZpbmRcXFwiOlxcXCJcXFwiLFxcXCJzZWFyY2hfdXJsXFxcIjpcXFwiXFxcIixcXFwic29ydF9uYW1lXFxcIjpcXFwiXFxcIixcXFwic29ydF91cmxcXFwiOlxcXCJcXFwiLFxcXCJ0aXRsZVxcXCI6XFxcIk15RmllbGThtLDigb9cXFwiLFxcXCJ1YVxcXCI6XFxcIm1vYmlsZVxcXCIsXFxcInVybFxcXCI6XFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcXCJ2ZXJzaW9uXFxcIjo1LFxcXCJ2aXNpYmxlXFxcIjp0cnVlLFxcXCJ5ZWFyX25hbWVcXFwiOlxcXCJcXFwiLFxcXCJ5ZWFyX3VybFxcXCI6XFxcIlxcXCJ9fVwiLFwic2F2ZWRcIjpmYWxzZSxcInRpdGxlXCI6XCLljJfln47lkIjpm4YxMjA2LuWMl+WfjlwiLFwidmVyc2lvblwiOjAsXCJ1cmxcIjpcImhpa2VyOi8vcGFnZS9pbmRleExvYWQ/IzEjbm9IaXN0b3J5I1wiLFwiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcImZpbmRfcnVsZVwiOlwianM6XFxubGV0IG15Q29sbGVjdGlvbl9lbCA9IFtdLFxcbiAgICBwYWdlTnVtID0gcGFyc2VJbnQoTVlfVVJMLnNwbGl0KCcjJylbMV0pLFxcbiAgICBSVUxFID0gTVlfUEFSQU1TLlJVTEUsXFxuICAgIGZ5QWxsID0gUlVMRS51cmwuaW5jbHVkZXMoJ2Z5QWxsJyksXFxuICAgIC8vIOWKoOi9vUNsYXNzVGFi57uE5Lu2XFxuICAgIENsYXNzVGFiID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvQ2xhc3NUYWI/cnVsZT0nICsgZ2V0SXRlbSgnbXlDb2xsZWN0aW9uJykpLFxcbiAgICB0YWJIZWFkZXIgPSBbXVxcblxcbmlmIChSVUxFLmNsYXNzX25hbWUpIHRhYkhlYWRlci5wdXNoKHtcXG4gICAgaWQ6IGZ5QWxsID8gJ2Z5QWxsJyA6ICdmeWNsYXNzJyxcXG4gICAgY2xhc3NfbmFtZTogUlVMRS5jbGFzc19uYW1lLFxcbiAgICBjbGFzc191cmw6IFJVTEUuY2xhc3NfdXJsXFxufSlcXG5pZiAoUlVMRS5hcmVhX25hbWUpIHRhYkhlYWRlci5wdXNoKHtcXG4gICAgaWQ6IGZ5QWxsID8gJ2Z5QWxsJyA6ICdmeWFyZWEnLFxcbiAgICBjbGFzc19uYW1lOiBSVUxFLmFyZWFfbmFtZSxcXG4gICAgY2xhc3NfdXJsOiBSVUxFLmFyZWFfdXJsXFxufSlcXG5pZiAoUlVMRS55ZWFyX25hbWUpIHRhYkhlYWRlci5wdXNoKHtcXG4gICAgaWQ6IGZ5QWxsID8gJ2Z5QWxsJyA6ICdmeXllYXInLFxcbiAgICBjbGFzc19uYW1lOiBSVUxFLnllYXJfbmFtZSxcXG4gICAgY2xhc3NfdXJsOiBSVUxFLnllYXJfdXJsXFxufSlcXG5pZiAoUlVMRS5zb3J0X25hbWUpIHRhYkhlYWRlci5wdXNoKHtcXG4gICAgaWQ6IGZ5QWxsID8gJ2Z5QWxsJyA6ICdmeXNvcnQnLFxcbiAgICBjbGFzc19uYW1lOiBSVUxFLnNvcnRfbmFtZSxcXG4gICAgY2xhc3NfdXJsOiBSVUxFLnNvcnRfdXJsXFxufSlcXG50YWJIZWFkZXIgPSBuZXcgQ2xhc3NUYWIodGFiSGVhZGVyLCB7IG5hbWU6IFJVTEUudGl0bGUgfSlcXG5pZiAocGFnZU51bSA9PSAxKSB7XFxuICAgIGFkZExpc3RlbmVyKCdvbkNsb3NlJywgJ2NsZWFyVmFyKFxcXCJteUNvbGxlY3Rpb24tc2VhcmNoTW9kZVxcXCIpJylcXG4gICAgcHV0VmFyKCdteUNvbGxlY3Rpb24tc2VhcmNoTW9kZScsIFJVTEUudGl0bGUpXFxuICAgIHRhYkhlYWRlci5sb2FkKG15Q29sbGVjdGlvbl9lbClcXG4gICAgaWYgKFJVTEUuc2VhcmNoX3VybCkgbXlDb2xsZWN0aW9uX2VsLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCLmkJzntKJcXFwiLFxcbiAgICAgICAgZGVzYzogXFxcIuaQnOS9oOaDs+imgeeahC4uLlxcXCIsXFxuICAgICAgICB1cmw6ICdcXFwiaGlrZXI6Ly9wYWdlL3NpbmdsZVNlYXJjaD9rZXl3b3JkPVxcXCIraW5wdXQrXFxcIiZwYWdlPWZ5cGFnZVxcXCInLFxcbiAgICAgICAgZXh0cmE6IHsgcnVsZTogZ2V0SXRlbSgnbXlDb2xsZWN0aW9uJyksIFJVTEU6IFJVTEUgfSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiLFxcbiAgICB9KVxcbn1cXG4vLyDlpITnkIZNWV9VUkzlkoxNWV9SVUxFXFxuTVlfUlVMRS51YSA9IFJVTEUudWFcXG5NWV9SVUxFLnRpdGxlID0gUlVMRS50aXRsZVxcbk1ZX1JVTEUuY29sX3R5cGUgPSBSVUxFLmNvbF90eXBlXFxuTVlfUlVMRS5kZXRhaWxfY29sX3R5cGUgPSBSVUxFLmRldGFpbF9jb2xfdHlwZVxcbk1ZX1JVTEUuZmluZF9ydWxlID0gUlVMRS5maW5kX3J1bGVcXG5NWV9SVUxFLmRldGFpbF9maW5kX3J1bGUgPSBSVUxFLmRldGFpbF9maW5kX3J1bGVcXG5NWV9SVUxFLnByZVJ1bGUgPSBSVUxFLnByZVJ1bGVcXG5NWV9SVUxFLnBhZ2VMaXN0ID0gSlNPTi5wYXJzZShSVUxFLnBhZ2VzIHx8ICdbXScpXFxuTVlfUlVMRS5wYWdlcyA9IEpTT04uc3RyaW5naWZ5KE1ZX1JVTEUucGFnZUxpc3QpXFxuTVlfUlVMRS5sYXN0X2NoYXB0ZXJfcnVsZSA9IFJVTEUubGFzdF9jaGFwdGVyX3J1bGVcXG5NWV9SVUxFLnBhcmFtcyA9IHt9XFxuXFxuY29uc3QgeyBydW5Db2RlLCB1cmxQYXJzZSB9ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvdXRpbGl0eT9ydWxlPScgKyBnZXRJdGVtKCdteUNvbGxlY3Rpb24nKSlcXG52YXIgeyBNWV9VUkwsIE1ZX1VSTF9PcHRpb25zIH0gPSB1cmxQYXJzZShSVUxFLnVybCwge30sIHBhZ2VOdW0sICh1cmwpID0+IHtcXG4gICAgdXJsWzBdID0gZnlBbGwgPyB1cmxbMF0ucmVwbGFjZSgvZnlBbGwvZywgJyQke2Z5QWxsfScpIDogdXJsWzBdLnJlcGxhY2UoL2Z5KGNsYXNzfGFyZWF8eWVhcnxzb3J0KS9nLCAnJCR7ZnkkMX0nKVxcbiAgICB1cmxbMF0gPSB0YWJIZWFkZXIuc2V0VXJsKHVybFswXSlcXG59KSxcXG4gICAgaW5kZXhIdG1sID0gZmV0Y2goTVlfVVJMLCBNWV9VUkxfT3B0aW9ucylcXG5NWV9SVUxFLnVybCA9IE1ZX1VSTFxcbk1ZX1JVTEUudXJsSGVhZGVycyA9IE1ZX1VSTF9PcHRpb25zLmhlYWRlcnNcXG4vLyDmraPmlofop6PmnpBcXG5pZiAocGFnZU51bSA9PSAxKSBldmFsKE1ZX1JVTEUucHJlUnVsZSlcXG5pZiAoTVlfUlVMRS5maW5kX3J1bGUuc3RhcnRzV2l0aCgnanM6JykpIHtcXG4gICAgZnVuY3Rpb24gZ2V0VXJsKCkge1xcbiAgICAgICAgcmV0dXJuIE1ZX1VSTFxcbiAgICB9XFxuXFxuICAgIGZ1bmN0aW9uIGdldFJlc0NvZGUoKSB7XFxuICAgICAgICByZXR1cm4gaW5kZXhIdG1sXFxuICAgIH1cXG5cXG4gICAgZnVuY3Rpb24gc2V0UmVzdWx0KGVsLCBwYXJhbTEsIHBhcmFtMiwgcGFyYW0zKSB7XFxuICAgICAgICBwYXJhbTEgPSBDQUxMQkFDS19LRVlcXG4gICAgICAgIHBhcmFtMiA9IE1ZX1JVTEVcXG4gICAgICAgIHBhcmFtMyA9IE1ZX1RZUEVcXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGVsLmRhdGEpKSBlbCA9IGVsLmRhdGFcXG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KG15Q29sbGVjdGlvbl9lbCwgZWwubWFwKCh2KSA9PiB7XFxuICAgICAgICAgICAgbGV0IE1ZX19SVUxFID0gT2JqZWN0LmFzc2lnbih7fSwgTVlfUlVMRSlcXG4gICAgICAgICAgICB2LmNvbF90eXBlID0gdi5jb2xfdHlwZSB8fCBNWV9SVUxFLmNvbF90eXBlXFxuXFxuICAgICAgICAgICAgaWYgKCF2LnVybCB8fCBbJ3J1bGUnLCAncGljcycsICd0b2FzdCcsICdpbnB1dCcsICdjb3B5JywgJ2VkaXRGaWxlJywgJ3g1JywgJ3g1V2ViVmlldycsICd4NVBsYXknLCAnd2ViJywgJ3NlbGVjdCcsICd4NVJ1bGUnLCAnd2ViUnVsZSddLmZpbmQoKHZ2KSA9PiB2LnVybC5zdGFydHNXaXRoKHZ2ICsgJzovLycpKSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdlxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodi51cmwuaW5jbHVkZXMoJ0BydWxlPScpKSB7XFxuICAgICAgICAgICAgICAgIGxldCBbXywgdXJsLCBydWxlXSA9IHYudXJsLm1hdGNoKC9eKFtcXFxcc1xcXFxTXSo/KUBydWxlPShbXFxcXHNcXFxcU10qKSQvKVxcbiAgICAgICAgICAgICAgICB2LnVybCA9IHVybFxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5kZXRhaWxfZmluZF9ydWxlID0gcnVsZVxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5kZXRhaWxfY29sX3R5cGUgPSBNWV9SVUxFLmNvbF90eXBlXFxuICAgICAgICAgICAgfSBlbHNlIGlmICh2LnVybC5zdGFydHNXaXRoKCdoaWtlcjovL3BhZ2UvJykpIHtcXG4gICAgICAgICAgICAgICAgaWYgKHYudXJsLmluY2x1ZGVzKCdydWxlPScpIHx8ICh2LmV4dHJhIHx8IHt9KS5ydWxlKVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZcXG4gICAgICAgICAgICAgICAgbGV0IFtfLCBwYXRoLCBwYXJhbXNdID0gdi51cmwuc3BsaXQoJyMnKVswXS5tYXRjaCgvXmhpa2VyOlxcXFwvXFxcXC9wYWdlXFxcXC8oLis/KSg/OlxcXFw/KC4qKSk/JC8pLFxcbiAgICAgICAgICAgICAgICAgICAgc3ViUGFnZSA9IE1ZX1JVTEUucGFnZUxpc3QuZmluZCgodikgPT4gdi5wYXRoID09IHBhdGgpLFxcbiAgICAgICAgICAgICAgICAgICAgc3ViVXJsID0gKHBhcmFtcyB8fCAnJykuc3BsaXQoJyYnKS5maW5kKCh2KSA9PiB2LnN0YXJ0c1dpdGgoJ3VybD0nKSlcXG4gICAgICAgICAgICAgICAgdi51cmwgPSBzdWJVcmwgPyBzdWJVcmwuc2xpY2UoNCkucmVwbGFjZSgv77yf77yfL2csICc/JykucmVwbGFjZSgv77yG77yGL2csICcmJykgOiAodi5leHRyYSB8fCB7fSkudXJsIHx8ICdoaWtlcjovL2VtcHR5PycgKyAocGFyYW1zIHx8ICcnKVxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5kZXRhaWxfZmluZF9ydWxlID0gc3ViUGFnZS5ydWxlXFxuICAgICAgICAgICAgICAgIE1ZX19SVUxFLmRldGFpbF9jb2xfdHlwZSA9IHN1YlBhZ2UuY29sX3R5cGVcXG4gICAgICAgICAgICAgICAgTVlfX1JVTEUucGFyYW1zID0gdi5leHRyYSB8fCB7fVxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodi51cmwuaW5jbHVkZXMoJ0BsYXp5UnVsZT0nKSkge1xcbiAgICAgICAgICAgICAgICB2LnVybCA9IHYudXJsLnJlcGxhY2UoJy5qczonLCAnLmpzOlxcXFxuaWYoTVlfUlVMRSlPYmplY3QuYXNzaWduKE1ZX1JVTEUsJyArICQuc3RyaW5naWZ5KHsgcGFnZXM6IE1ZX1JVTEUucGFnZXMsIHBhZ2VMaXN0OiBNWV9SVUxFLnBhZ2VMaXN0LCBmaW5kX3J1bGU6ICcnLCBwYXJhbXM6ICcnIH0pICsgJyk7TVlfVVJMPVxcXCInICsgTVlfVVJMICsgJ1xcXCI7JylcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFNWV9SVUxFLmRldGFpbF9maW5kX3J1bGUgfHwgdi51cmwuc3RhcnRzV2l0aCgnaGlrZXI6Ly8nKSkgeyByZXR1cm4gdiB9XFxuICAgICAgICAgICAgdi5leHRyYSA9IHsgdXJsOiB2LnVybCwgUlVMRTogTVlfX1JVTEUsIHBhZ2VUaXRsZTogdi50aXRsZSB9XFxuICAgICAgICAgICAgdi51cmwgPSAnaGlrZXI6Ly9wYWdlL2RldGFpbExvYWQ/cnVsZT0nICsgZ2V0SXRlbSgnbXlDb2xsZWN0aW9uJylcXG4gICAgICAgICAgICBpZiAodi5leHRyYS5SVUxFLnVybC5pbmNsdWRlcygnI2ltbWVyc2l2ZVRoZW1lIycpKSB2LnVybCArPSAnJiNpbW1lcnNpdmVUaGVtZSMnXFxuICAgICAgICAgICAgcmV0dXJuIHZcXG4gICAgICAgIH0pKVxcbiAgICAgICAgbWV0aG9kX3NldFJlc3VsdC5pbnZva2UoamF2YUNvbnRleHQsIG15Q29sbGVjdGlvbl9lbCwgcGFyYW0xLCBwYXJhbTIsIHBhcmFtMylcXG4gICAgfVxcbiAgICBzZXRIb21lUmVzdWx0ID0gc2V0UmVzdWx0XFxuICAgIHNldFNlYXJjaFJlc3VsdCA9IHNldFJlc3VsdFxcblxcbiAgICBldmFsKE1ZX1JVTEUuZmluZF9ydWxlLnNsaWNlKDMpKVxcbn0gZWxzZSB7XFxuICAgIGxldCBmaW5kUnVsZSA9IE1ZX1JVTEUuZmluZF9ydWxlLnNwbGl0KCc7JylcXG4gICAgcGFyc2VEb21Gb3JBcnJheShpbmRleEh0bWwsIGZpbmRSdWxlLnNoaWZ0KCkpLmZvckVhY2goKGRhdGEpID0+IHtcXG4gICAgICAgIGxldCBbdGl0bGUsIGltZywgZGVzYywgdXJsXSA9IGZpbmRSdWxlLm1hcCgodiwgaSkgPT4ge1xcbiAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKHYgPT0gJyonKSByZXR1cm4gJydcXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgdiA9IChpID09IDEgfHwgaSA9PSAzKSA/XFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VEb20oZGF0YSwgdikgOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRG9tRm9ySHRtbChkYXRhLCB2KVxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT0gMykgdiA9IHJ1bkNvZGUodilcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2XFxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsgcmV0dXJuICcnIH1cXG4gICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICByZXMgPSB7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgdXJsOiB1cmwsXFxuICAgICAgICAgICAgICAgIGRlc2M6IGRlc2MsXFxuICAgICAgICAgICAgICAgIGltZzogaW1nLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogTVlfUlVMRS5jb2xfdHlwZVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIGlmIChyZXMudXJsKSB7XFxuICAgICAgICAgICAgaWYgKHJlcy51cmwuaW5jbHVkZXMoJ0BsYXp5UnVsZT0nKSkge1xcbiAgICAgICAgICAgICAgICByZXMudXJsID0gcmVzLnVybC5yZXBsYWNlKCcuanM6JywgJy5qczpcXFxcbmlmKE1ZX1JVTEUpT2JqZWN0LmFzc2lnbihNWV9SVUxFLCcgKyAkLnN0cmluZ2lmeSh7IHBhZ2VzOiBNWV9SVUxFLnBhZ2VzLCBwYWdlTGlzdDogTVlfUlVMRS5wYWdlTGlzdCwgZmluZF9ydWxlOiAnJywgcGFyYW1zOiAnJyB9KSArICcpO01ZX1VSTD1cXFwiJyArIE1ZX1VSTCArICdcXFwiOycpXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChNWV9SVUxFLmRldGFpbF9maW5kX3J1bGUpIHtcXG4gICAgICAgICAgICAgICAgcmVzLmV4dHJhID0geyB1cmw6IHVybCwgUlVMRTogTVlfUlVMRSwgcGFnZVRpdGxlOiB0aXRsZSB9XFxuICAgICAgICAgICAgICAgIHJlcy51cmwgPSAnaGlrZXI6Ly9wYWdlL2RldGFpbExvYWQ/cnVsZT0nICsgZ2V0SXRlbSgnbXlDb2xsZWN0aW9uJylcXG4gICAgICAgICAgICAgICAgaWYgKHJlcy5leHRyYS5SVUxFLnVybC5pbmNsdWRlcygnI2ltbWVyc2l2ZVRoZW1lIycpKSByZXMudXJsICs9ICcmI2ltbWVyc2l2ZVRoZW1lIydcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICBteUNvbGxlY3Rpb25fZWwucHVzaChyZXMpXFxuICAgIH0pXFxuICAgIHNldFJlc3VsdChteUNvbGxlY3Rpb25fZWwpXFxufVxcblwiLFwiZ3JvdXBcIjpcIuKek+i9u+WQiOmbhlwiLFwidWFcIjpcIm1vYmlsZVwiLFwicHJlUnVsZVwiOlwic2V0SXRlbSgnbXlDb2xsZWN0aW9uJywgTVlfUlVMRS50aXRsZSlcXG5zZXRJdGVtKCdyZW1vdGVVcmwnLCAnaHR0cDovL2hpa2VyLm5va2lhLnByZXNzL2hpa2VydWxlL3J1bGVsaXN0Lmpzb24/aWQ9Mjk2NicpXFxuLy8gXFxuLy8g5YyF6KO56ZSZ6K+vXCIsXCJwYWdlc1wiOlwiW3tcXFwiY29sX3R5cGVcXFwiOlxcXCJ0ZXh0XzFcXFwiLFxcXCJuYW1lXFxcIjpcXFwiQ2xhc3NUYWJcXFwiLFxcXCJwYXRoXFxcIjpcXFwiQ2xhc3NUYWJcXFwiLFxcXCJydWxlXFxcIjpcXFwiZnVuY3Rpb24gQ2xhc3NUYWIoY2xhc3NBcnJheSwgcGFyYW1zKSB7XFxcXG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLCBwYXJhbXMpXFxcXG4gICAgdGhpcy5hcnIgPSBjbGFzc0FycmF5Lm1hcCh2ID0+IHRoaXMuaW5pdCh2KSlcXFxcbiAgICB0aGlzLnNpZ24gPSAnJCcgKyBNWV9SVUxFLnRpdGxlICsgJ18nICsgKHRoaXMubmFtZSB8fCAnJykgKyAnXydcXFxcbiAgICB0aGlzLmNvbG9yID0gdGhpcy5jb2xvciB8fCAnIzEyYjY2OCdcXFxcbiAgICB0aGlzLmJvdW5kYXJ5ID0gdGhpcy5ib3VuZGFyeSB8fCAnYmxhbmtfYmxvY2snXFxcXG59XFxcXG5DbGFzc1RhYi5wcm90b3R5cGUgPSB7XFxcXG4gICAgY29uc3RydWN0b3I6IENsYXNzVGFiLFxcXFxuICAgIGxvYWQoZWwpIHtcXFxcbiAgICAgICAgbGV0IGZvbGRlZCA9IGdldFZhcignZm9sZF8nICsgdGhpcy5zaWduLCAnJylcXFxcbiAgICAgICAgaWYgKHRoaXMuZm9sZCkgZWwucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnTxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6IzA0OWVmZlxcXFxcXFwiPicgKyAoZm9sZGVkID8gJ+KWticgOiAn4pa8JyksXFxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHNpZ24sIGZvbGRlZCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIHB1dFZhcignZm9sZF8nICsgc2lnbiwgeyAnJzogJ1QnLCAnVCc6ICcnIH0gW2ZvbGRlZF0pXFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcXFxuICAgICAgICAgICAgfSwgdGhpcy5zaWduLCBmb2xkZWQpLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcXFxuICAgICAgICB9KVxcXFxuICAgICAgICBsZXQgYXJyID0gZm9sZGVkID8gW3RoaXMuYXJyWzBdXSA6IHRoaXMuYXJyXFxcXG4gICAgICAgIGFyci5mb3JFYWNoKCh2KSA9PiB7XFxcXG4gICAgICAgICAgICBsZXQgeyBpZCwgY2xhc3NfbmFtZSwgY2xhc3NfdXJsIH0gPSB2LFxcXFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkID0gSlNPTi5zdHJpbmdpZnkodGhpcy5nZXRDbGFzcyhpZCkpXFxcXG4gICAgICAgICAgICBjbGFzc19uYW1lLmZvckVhY2goKG5hbWUsIGkpID0+IHtcXFxcbiAgICAgICAgICAgICAgICBsZXQgdXJsID0gY2xhc3NfdXJsW2ldLFxcXFxuICAgICAgICAgICAgICAgICAgICBub3cgPSBKU09OLnN0cmluZ2lmeSh7IG5hbWU6IG5hbWUsIHVybDogdXJsIH0pXFxcXG4gICAgICAgICAgICAgICAgZWwucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAoc2VsZWN0ZWQgPT0gbm93ID8gJ+KAnOKAnOKAneKAnTxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6JyArIHRoaXMuY29sb3IgKyAnXFxcXFxcXCI+PGI+JyA6ICcnKSArIG5hbWUsXFxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoc2lnbiwgaWQsIG5vdykgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0VmFyKHNpZ24gKyBpZCwgbm93KVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0VmFyKHNpZ24sIG5vdylcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcXFxuICAgICAgICAgICAgICAgICAgICB9LCB0aGlzLnNpZ24sIGlkLCBub3cpLFxcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxcXG4gICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICBlbC5wdXNoKHsgY29sX3R5cGU6IHRoaXMuYm91bmRhcnkgfSlcXFxcbiAgICAgICAgfSlcXFxcbiAgICB9LFxcXFxuICAgIGluaXQoY2xhc3NPYmplY3QpIHtcXFxcbiAgICAgICAgaWYgKHR5cGVvZiBjbGFzc09iamVjdC5jbGFzc19uYW1lID09ICdzdHJpbmcnKVxcXFxuICAgICAgICAgICAgY2xhc3NPYmplY3QuY2xhc3NfbmFtZSA9IGNsYXNzT2JqZWN0LmNsYXNzX25hbWUuc3BsaXQoJyYnKVxcXFxuICAgICAgICBpZiAodHlwZW9mIGNsYXNzT2JqZWN0LmNsYXNzX3VybCA9PSAnc3RyaW5nJylcXFxcbiAgICAgICAgICAgIGNsYXNzT2JqZWN0LmNsYXNzX3VybCA9IGNsYXNzT2JqZWN0LmNsYXNzX3VybC5zcGxpdCgnJicpLm1hcCgodikgPT4gdi50cmltKCkpXFxcXG4gICAgICAgIHJldHVybiBjbGFzc09iamVjdFxcXFxuICAgIH0sXFxcXG4gICAgcHVzaChjbGFzc09iamVjdCkge1xcXFxuICAgICAgICB0aGlzLmFyci5wdXNoKHRoaXMuaW5pdChjbGFzc09iamVjdCkpXFxcXG4gICAgfSxcXFxcbiAgICBnZXRDbGFzcyhpZCkge1xcXFxuICAgICAgICBsZXQgZGVmYXVsdENsYXNzID0gdGhpcy5hcnIuZmluZChpdGVtID0+IGl0ZW0uaWQgPT0gaWQpXFxcXG4gICAgICAgIGlmIChkZWZhdWx0Q2xhc3MpIGRlZmF1bHRDbGFzcyA9IEpTT04uc3RyaW5naWZ5KHtcXFxcbiAgICAgICAgICAgIG5hbWU6IGRlZmF1bHRDbGFzcy5jbGFzc19uYW1lWzBdLFxcXFxuICAgICAgICAgICAgdXJsOiBkZWZhdWx0Q2xhc3MuY2xhc3NfdXJsWzBdXFxcXG4gICAgICAgIH0pXFxcXG4gICAgICAgIGVsc2UgdGhyb3cgbmV3IEVycm9yKCdjYW5ub3QgZmluZCBpZDogJyArIGlkICsgJyBpbiBjbGFzc1RhYjogJyArIHRoaXMuc2lnbilcXFxcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZ2V0VmFyKHRoaXMuc2lnbiArIGlkLCBkZWZhdWx0Q2xhc3MpKVxcXFxuICAgIH0sXFxcXG4gICAgZ2V0TGFzdENsaWNrKCkge1xcXFxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShnZXRWYXIodGhpcy5zaWduLCAne30nKSlcXFxcbiAgICB9LFxcXFxuICAgIHNldFVybCh1cmwpIHtcXFxcbiAgICAgICAgcmV0dXJuIHVybC5yZXBsYWNlKC9cXFxcXFxcXCRcXFxcXFxcXHsoW159XSopXFxcXFxcXFx9L2csIChfLCBpZCkgPT4gdGhpcy5nZXRDbGFzcyhpZCkudXJsKVxcXFxuICAgIH1cXFxcbn1cXFxcbiQuZXhwb3J0cyA9IENsYXNzVGFiXFxcXG5cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLpppbpobVcXFwiLFxcXCJwYXRoXFxcIjpcXFwiaW5kZXhMb2FkXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxubGV0IG15Q29sbGVjdGlvbl9lbCA9IFtdLFxcXFxuICAgIHBhZ2VOdW0gPSBwYXJzZUludChNWV9VUkwuc3BsaXQoJyMnKVsxXSksXFxcXG4gICAgUlVMRSA9IE1ZX1BBUkFNUy5SVUxFLFxcXFxuICAgIGZ5QWxsID0gUlVMRS51cmwuaW5jbHVkZXMoJ2Z5QWxsJyksXFxcXG4gICAgLy8g5Yqg6L29Q2xhc3NUYWLnu4Tku7ZcXFxcbiAgICBDbGFzc1RhYiA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL0NsYXNzVGFiP3J1bGU9JyArIGdldEl0ZW0oJ215Q29sbGVjdGlvbicpKSxcXFxcbiAgICB0YWJIZWFkZXIgPSBbXVxcXFxuXFxcXG5pZiAoUlVMRS5jbGFzc19uYW1lKSB0YWJIZWFkZXIucHVzaCh7XFxcXG4gICAgaWQ6IGZ5QWxsID8gJ2Z5QWxsJyA6ICdmeWNsYXNzJyxcXFxcbiAgICBjbGFzc19uYW1lOiBSVUxFLmNsYXNzX25hbWUsXFxcXG4gICAgY2xhc3NfdXJsOiBSVUxFLmNsYXNzX3VybFxcXFxufSlcXFxcbmlmIChSVUxFLmFyZWFfbmFtZSkgdGFiSGVhZGVyLnB1c2goe1xcXFxuICAgIGlkOiBmeUFsbCA/ICdmeUFsbCcgOiAnZnlhcmVhJyxcXFxcbiAgICBjbGFzc19uYW1lOiBSVUxFLmFyZWFfbmFtZSxcXFxcbiAgICBjbGFzc191cmw6IFJVTEUuYXJlYV91cmxcXFxcbn0pXFxcXG5pZiAoUlVMRS55ZWFyX25hbWUpIHRhYkhlYWRlci5wdXNoKHtcXFxcbiAgICBpZDogZnlBbGwgPyAnZnlBbGwnIDogJ2Z5eWVhcicsXFxcXG4gICAgY2xhc3NfbmFtZTogUlVMRS55ZWFyX25hbWUsXFxcXG4gICAgY2xhc3NfdXJsOiBSVUxFLnllYXJfdXJsXFxcXG59KVxcXFxuaWYgKFJVTEUuc29ydF9uYW1lKSB0YWJIZWFkZXIucHVzaCh7XFxcXG4gICAgaWQ6IGZ5QWxsID8gJ2Z5QWxsJyA6ICdmeXNvcnQnLFxcXFxuICAgIGNsYXNzX25hbWU6IFJVTEUuc29ydF9uYW1lLFxcXFxuICAgIGNsYXNzX3VybDogUlVMRS5zb3J0X3VybFxcXFxufSlcXFxcbnRhYkhlYWRlciA9IG5ldyBDbGFzc1RhYih0YWJIZWFkZXIsIHsgbmFtZTogUlVMRS50aXRsZSB9KVxcXFxuaWYgKHBhZ2VOdW0gPT0gMSkge1xcXFxuICAgIGFkZExpc3RlbmVyKCdvbkNsb3NlJywgJ2NsZWFyVmFyKFxcXFxcXFwibXlDb2xsZWN0aW9uLXNlYXJjaE1vZGVcXFxcXFxcIiknKVxcXFxuICAgIHB1dFZhcignbXlDb2xsZWN0aW9uLXNlYXJjaE1vZGUnLCBSVUxFLnRpdGxlKVxcXFxuICAgIHRhYkhlYWRlci5sb2FkKG15Q29sbGVjdGlvbl9lbClcXFxcbiAgICBpZiAoUlVMRS5zZWFyY2hfdXJsKSBteUNvbGxlY3Rpb25fZWwucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiBcXFxcXFxcIuaQnOe0olxcXFxcXFwiLFxcXFxuICAgICAgICBkZXNjOiBcXFxcXFxcIuaQnOS9oOaDs+imgeeahC4uLlxcXFxcXFwiLFxcXFxuICAgICAgICB1cmw6ICdcXFxcXFxcImhpa2VyOi8vcGFnZS9zaW5nbGVTZWFyY2g/a2V5d29yZD1cXFxcXFxcIitpbnB1dCtcXFxcXFxcIiZwYWdlPWZ5cGFnZVxcXFxcXFwiJyxcXFxcbiAgICAgICAgZXh0cmE6IHsgcnVsZTogZ2V0SXRlbSgnbXlDb2xsZWN0aW9uJyksIFJVTEU6IFJVTEUgfSxcXFxcbiAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiaW5wdXRcXFxcXFxcIixcXFxcbiAgICB9KVxcXFxufVxcXFxuLy8g5aSE55CGTVlfVVJM5ZKMTVlfUlVMRVxcXFxuTVlfUlVMRS51YSA9IFJVTEUudWFcXFxcbk1ZX1JVTEUudGl0bGUgPSBSVUxFLnRpdGxlXFxcXG5NWV9SVUxFLmNvbF90eXBlID0gUlVMRS5jb2xfdHlwZVxcXFxuTVlfUlVMRS5kZXRhaWxfY29sX3R5cGUgPSBSVUxFLmRldGFpbF9jb2xfdHlwZVxcXFxuTVlfUlVMRS5maW5kX3J1bGUgPSBSVUxFLmZpbmRfcnVsZVxcXFxuTVlfUlVMRS5kZXRhaWxfZmluZF9ydWxlID0gUlVMRS5kZXRhaWxfZmluZF9ydWxlXFxcXG5NWV9SVUxFLnByZVJ1bGUgPSBSVUxFLnByZVJ1bGVcXFxcbk1ZX1JVTEUucGFnZUxpc3QgPSBKU09OLnBhcnNlKFJVTEUucGFnZXMgfHwgJ1tdJylcXFxcbk1ZX1JVTEUucGFnZXMgPSBKU09OLnN0cmluZ2lmeShNWV9SVUxFLnBhZ2VMaXN0KVxcXFxuTVlfUlVMRS5sYXN0X2NoYXB0ZXJfcnVsZSA9IFJVTEUubGFzdF9jaGFwdGVyX3J1bGVcXFxcbk1ZX1JVTEUucGFyYW1zID0ge31cXFxcblxcXFxuY29uc3QgeyBydW5Db2RlLCB1cmxQYXJzZSB9ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvdXRpbGl0eT9ydWxlPScgKyBnZXRJdGVtKCdteUNvbGxlY3Rpb24nKSlcXFxcbnZhciB7IE1ZX1VSTCwgTVlfVVJMX09wdGlvbnMgfSA9IHVybFBhcnNlKFJVTEUudXJsLCB7fSwgcGFnZU51bSwgKHVybCkgPT4ge1xcXFxuICAgIHVybFswXSA9IGZ5QWxsID8gdXJsWzBdLnJlcGxhY2UoL2Z5QWxsL2csICckJHtmeUFsbH0nKSA6IHVybFswXS5yZXBsYWNlKC9meShjbGFzc3xhcmVhfHllYXJ8c29ydCkvZywgJyQke2Z5JDF9JylcXFxcbiAgICB1cmxbMF0gPSB0YWJIZWFkZXIuc2V0VXJsKHVybFswXSlcXFxcbn0pLFxcXFxuICAgIGluZGV4SHRtbCA9IGZldGNoKE1ZX1VSTCwgTVlfVVJMX09wdGlvbnMpXFxcXG5NWV9SVUxFLnVybCA9IE1ZX1VSTFxcXFxuTVlfUlVMRS51cmxIZWFkZXJzID0gTVlfVVJMX09wdGlvbnMuaGVhZGVyc1xcXFxuLy8g5q2j5paH6Kej5p6QXFxcXG5pZiAocGFnZU51bSA9PSAxKSBldmFsKE1ZX1JVTEUucHJlUnVsZSlcXFxcbmlmIChNWV9SVUxFLmZpbmRfcnVsZS5zdGFydHNXaXRoKCdqczonKSkge1xcXFxuICAgIGZ1bmN0aW9uIGdldFVybCgpIHtcXFxcbiAgICAgICAgcmV0dXJuIE1ZX1VSTFxcXFxuICAgIH1cXFxcblxcXFxuICAgIGZ1bmN0aW9uIGdldFJlc0NvZGUoKSB7XFxcXG4gICAgICAgIHJldHVybiBpbmRleEh0bWxcXFxcbiAgICB9XFxcXG5cXFxcbiAgICBmdW5jdGlvbiBzZXRSZXN1bHQoZWwsIHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMpIHtcXFxcbiAgICAgICAgcGFyYW0xID0gQ0FMTEJBQ0tfS0VZXFxcXG4gICAgICAgIHBhcmFtMiA9IE1ZX1JVTEVcXFxcbiAgICAgICAgcGFyYW0zID0gTVlfVFlQRVxcXFxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShlbC5kYXRhKSkgZWwgPSBlbC5kYXRhXFxcXG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KG15Q29sbGVjdGlvbl9lbCwgZWwubWFwKCh2KSA9PiB7XFxcXG4gICAgICAgICAgICBsZXQgTVlfX1JVTEUgPSBPYmplY3QuYXNzaWduKHt9LCBNWV9SVUxFKVxcXFxuICAgICAgICAgICAgdi5jb2xfdHlwZSA9IHYuY29sX3R5cGUgfHwgTVlfUlVMRS5jb2xfdHlwZVxcXFxuXFxcXG4gICAgICAgICAgICBpZiAoIXYudXJsIHx8IFsncnVsZScsICdwaWNzJywgJ3RvYXN0JywgJ2lucHV0JywgJ2NvcHknLCAnZWRpdEZpbGUnLCAneDUnLCAneDVXZWJWaWV3JywgJ3g1UGxheScsICd3ZWInLCAnc2VsZWN0JywgJ3g1UnVsZScsICd3ZWJSdWxlJ10uZmluZCgodnYpID0+IHYudXJsLnN0YXJ0c1dpdGgodnYgKyAnOi8vJykpKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodi51cmwuaW5jbHVkZXMoJ0BydWxlPScpKSB7XFxcXG4gICAgICAgICAgICAgICAgbGV0IFtfLCB1cmwsIHJ1bGVdID0gdi51cmwubWF0Y2goL14oW1xcXFxcXFxcc1xcXFxcXFxcU10qPylAcnVsZT0oW1xcXFxcXFxcc1xcXFxcXFxcU10qKSQvKVxcXFxuICAgICAgICAgICAgICAgIHYudXJsID0gdXJsXFxcXG4gICAgICAgICAgICAgICAgTVlfX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSA9IHJ1bGVcXFxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5kZXRhaWxfY29sX3R5cGUgPSBNWV9SVUxFLmNvbF90eXBlXFxcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHYudXJsLnN0YXJ0c1dpdGgoJ2hpa2VyOi8vcGFnZS8nKSkge1xcXFxuICAgICAgICAgICAgICAgIGlmICh2LnVybC5pbmNsdWRlcygncnVsZT0nKSB8fCAodi5leHRyYSB8fCB7fSkucnVsZSlcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZcXFxcbiAgICAgICAgICAgICAgICBsZXQgW18sIHBhdGgsIHBhcmFtc10gPSB2LnVybC5zcGxpdCgnIycpWzBdLm1hdGNoKC9eaGlrZXI6XFxcXFxcXFwvXFxcXFxcXFwvcGFnZVxcXFxcXFxcLyguKz8pKD86XFxcXFxcXFw/KC4qKSk/JC8pLFxcXFxuICAgICAgICAgICAgICAgICAgICBzdWJQYWdlID0gTVlfUlVMRS5wYWdlTGlzdC5maW5kKCh2KSA9PiB2LnBhdGggPT0gcGF0aCksXFxcXG4gICAgICAgICAgICAgICAgICAgIHN1YlVybCA9IChwYXJhbXMgfHwgJycpLnNwbGl0KCcmJykuZmluZCgodikgPT4gdi5zdGFydHNXaXRoKCd1cmw9JykpXFxcXG4gICAgICAgICAgICAgICAgdi51cmwgPSBzdWJVcmwgPyBzdWJVcmwuc2xpY2UoNCkucmVwbGFjZSgv77yf77yfL2csICc/JykucmVwbGFjZSgv77yG77yGL2csICcmJykgOiAodi5leHRyYSB8fCB7fSkudXJsIHx8ICdoaWtlcjovL2VtcHR5PycgKyAocGFyYW1zIHx8ICcnKVxcXFxuICAgICAgICAgICAgICAgIE1ZX19SVUxFLmRldGFpbF9maW5kX3J1bGUgPSBzdWJQYWdlLnJ1bGVcXFxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5kZXRhaWxfY29sX3R5cGUgPSBzdWJQYWdlLmNvbF90eXBlXFxcXG4gICAgICAgICAgICAgICAgTVlfX1JVTEUucGFyYW1zID0gdi5leHRyYSB8fCB7fVxcXFxuICAgICAgICAgICAgfSBlbHNlIGlmICh2LnVybC5pbmNsdWRlcygnQGxhenlSdWxlPScpKSB7XFxcXG4gICAgICAgICAgICAgICAgdi51cmwgPSB2LnVybC5yZXBsYWNlKCcuanM6JywgJy5qczpcXFxcXFxcXG5pZihNWV9SVUxFKU9iamVjdC5hc3NpZ24oTVlfUlVMRSwnICsgJC5zdHJpbmdpZnkoeyBwYWdlczogTVlfUlVMRS5wYWdlcywgcGFnZUxpc3Q6IE1ZX1JVTEUucGFnZUxpc3QsIGZpbmRfcnVsZTogJycsIHBhcmFtczogJycgfSkgKyAnKTtNWV9VUkw9XFxcXFxcXCInICsgTVlfVVJMICsgJ1xcXFxcXFwiOycpXFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIU1ZX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSB8fCB2LnVybC5zdGFydHNXaXRoKCdoaWtlcjovLycpKSB7IHJldHVybiB2IH1cXFxcbiAgICAgICAgICAgIHYuZXh0cmEgPSB7IHVybDogdi51cmwsIFJVTEU6IE1ZX19SVUxFLCBwYWdlVGl0bGU6IHYudGl0bGUgfVxcXFxuICAgICAgICAgICAgdi51cmwgPSAnaGlrZXI6Ly9wYWdlL2RldGFpbExvYWQ/cnVsZT0nICsgZ2V0SXRlbSgnbXlDb2xsZWN0aW9uJylcXFxcbiAgICAgICAgICAgIGlmICh2LmV4dHJhLlJVTEUudXJsLmluY2x1ZGVzKCcjaW1tZXJzaXZlVGhlbWUjJykpIHYudXJsICs9ICcmI2ltbWVyc2l2ZVRoZW1lIydcXFxcbiAgICAgICAgICAgIHJldHVybiB2XFxcXG4gICAgICAgIH0pKVxcXFxuICAgICAgICBtZXRob2Rfc2V0UmVzdWx0Lmludm9rZShqYXZhQ29udGV4dCwgbXlDb2xsZWN0aW9uX2VsLCBwYXJhbTEsIHBhcmFtMiwgcGFyYW0zKVxcXFxuICAgIH1cXFxcbiAgICBzZXRIb21lUmVzdWx0ID0gc2V0UmVzdWx0XFxcXG4gICAgc2V0U2VhcmNoUmVzdWx0ID0gc2V0UmVzdWx0XFxcXG5cXFxcbiAgICBldmFsKE1ZX1JVTEUuZmluZF9ydWxlLnNsaWNlKDMpKVxcXFxufSBlbHNlIHtcXFxcbiAgICBsZXQgZmluZFJ1bGUgPSBNWV9SVUxFLmZpbmRfcnVsZS5zcGxpdCgnOycpXFxcXG4gICAgcGFyc2VEb21Gb3JBcnJheShpbmRleEh0bWwsIGZpbmRSdWxlLnNoaWZ0KCkpLmZvckVhY2goKGRhdGEpID0+IHtcXFxcbiAgICAgICAgbGV0IFt0aXRsZSwgaW1nLCBkZXNjLCB1cmxdID0gZmluZFJ1bGUubWFwKCh2LCBpKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKHYgPT0gJyonKSByZXR1cm4gJydcXFxcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB2ID0gKGkgPT0gMSB8fCBpID09IDMpID9cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRG9tKGRhdGEsIHYpIDpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRG9tRm9ySHRtbChkYXRhLCB2KVxcXFxuICAgICAgICAgICAgICAgICAgICBpZiAoaSAhPSAzKSB2ID0gcnVuQ29kZSh2KVxcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdlxcXFxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsgcmV0dXJuICcnIH1cXFxcbiAgICAgICAgICAgIH0pLFxcXFxuICAgICAgICAgICAgcmVzID0ge1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXFxcbiAgICAgICAgICAgICAgICB1cmw6IHVybCxcXFxcbiAgICAgICAgICAgICAgICBkZXNjOiBkZXNjLFxcXFxuICAgICAgICAgICAgICAgIGltZzogaW1nLFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBNWV9SVUxFLmNvbF90eXBlXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIGlmIChyZXMudXJsKSB7XFxcXG4gICAgICAgICAgICBpZiAocmVzLnVybC5pbmNsdWRlcygnQGxhenlSdWxlPScpKSB7XFxcXG4gICAgICAgICAgICAgICAgcmVzLnVybCA9IHJlcy51cmwucmVwbGFjZSgnLmpzOicsICcuanM6XFxcXFxcXFxuaWYoTVlfUlVMRSlPYmplY3QuYXNzaWduKE1ZX1JVTEUsJyArICQuc3RyaW5naWZ5KHsgcGFnZXM6IE1ZX1JVTEUucGFnZXMsIHBhZ2VMaXN0OiBNWV9SVUxFLnBhZ2VMaXN0LCBmaW5kX3J1bGU6ICcnLCBwYXJhbXM6ICcnIH0pICsgJyk7TVlfVVJMPVxcXFxcXFwiJyArIE1ZX1VSTCArICdcXFxcXFxcIjsnKVxcXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChNWV9SVUxFLmRldGFpbF9maW5kX3J1bGUpIHtcXFxcbiAgICAgICAgICAgICAgICByZXMuZXh0cmEgPSB7IHVybDogdXJsLCBSVUxFOiBNWV9SVUxFLCBwYWdlVGl0bGU6IHRpdGxlIH1cXFxcbiAgICAgICAgICAgICAgICByZXMudXJsID0gJ2hpa2VyOi8vcGFnZS9kZXRhaWxMb2FkP3J1bGU9JyArIGdldEl0ZW0oJ215Q29sbGVjdGlvbicpXFxcXG4gICAgICAgICAgICAgICAgaWYgKHJlcy5leHRyYS5SVUxFLnVybC5pbmNsdWRlcygnI2ltbWVyc2l2ZVRoZW1lIycpKSByZXMudXJsICs9ICcmI2ltbWVyc2l2ZVRoZW1lIydcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBteUNvbGxlY3Rpb25fZWwucHVzaChyZXMpXFxcXG4gICAgfSlcXFxcbiAgICBzZXRSZXN1bHQobXlDb2xsZWN0aW9uX2VsKVxcXFxufVxcXFxuXFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi6K+m5oOFXFxcIixcXFwicGF0aFxcXCI6XFxcImRldGFpbExvYWRcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG5sZXQgbXlDb2xsZWN0aW9uX2VsID0gW10sXFxcXG4gICAgcGFnZU51bSA9IDFcXFxcblxcXFxuLy8g5aSE55CGTVlfVVJM5ZKMTVlfUlVMRVxcXFxubGV0IFJVTEUgPSBNWV9QQVJBTVMuUlVMRVxcXFxuTVlfUlVMRS51YSA9IFJVTEUudWFcXFxcbk1ZX1JVTEUudGl0bGUgPSBSVUxFLnRpdGxlXFxcXG5NWV9SVUxFLmNvbF90eXBlID0gUlVMRS5kZXRhaWxfY29sX3R5cGVcXFxcbk1ZX1JVTEUuZmluZF9ydWxlID0gUlVMRS5kZXRhaWxfZmluZF9ydWxlXFxcXG5NWV9SVUxFLnByZVJ1bGUgPSBSVUxFLnByZVJ1bGVcXFxcbk1ZX1JVTEUucGFnZUxpc3QgPSBSVUxFLnBhZ2VMaXN0XFxcXG5NWV9SVUxFLnBhZ2VzID0gUlVMRS5wYWdlc1xcXFxuTVlfUlVMRS5sYXN0X2NoYXB0ZXJfcnVsZSA9IFJVTEUubGFzdF9jaGFwdGVyX3J1bGVcXFxcbk1ZX1JVTEUucGFyYW1zID0gUlVMRS5wYXJhbXNcXFxcblxcXFxuY29uc3QgeyBydW5Db2RlLCB1cmxQYXJzZSB9ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvdXRpbGl0eT9ydWxlPScgKyBnZXRJdGVtKCdteUNvbGxlY3Rpb24nKSlcXFxcbmxldCBmeXBhZ2VGbGFnID0gTVlfUEFSQU1TLnVybC5pbmRleE9mKCdmeXBhZ2UnKVxcXFxuaWYgKGZ5cGFnZUZsYWcgPj0gMCkgcGFnZU51bSA9IHBhcnNlSW50KC9eXFxcXFxcXFxkKy8uZXhlYyhNWV9VUkwuc2xpY2UoZnlwYWdlRmxhZykpKVxcXFxudmFyIHsgTVlfVVJMLCBNWV9VUkxfT3B0aW9ucyB9ID0gdXJsUGFyc2UoTVlfUEFSQU1TLnVybCwgUlVMRS51cmxIZWFkZXJzLCBwYWdlTnVtKSxcXFxcbiAgICBpbmRleEh0bWwgPSBmZXRjaChNWV9VUkwsIE1ZX1VSTF9PcHRpb25zKVxcXFxuTVlfUlVMRS51cmwgPSBNWV9VUkxcXFxcbk1ZX1JVTEUudXJsSGVhZGVycyA9IE1ZX1VSTF9PcHRpb25zLmhlYWRlcnNcXFxcbi8vIOino+aekOato+aWh1xcXFxuaWYgKE1ZX1BBUkFNUy5wYWdlVGl0bGUpIHNldFBhZ2VUaXRsZShNWV9QQVJBTVMucGFnZVRpdGxlKVxcXFxuZXZhbChNWV9SVUxFLnByZVJ1bGUpXFxcXG5zZXRMYXN0Q2hhcHRlclJ1bGUoTVlfUlVMRS5sYXN0X2NoYXB0ZXJfcnVsZSlcXFxcbk1ZX1BBUkFNUyA9IE1ZX1JVTEUucGFyYW1zXFxcXG5pZiAoTVlfUlVMRS5maW5kX3J1bGUuc3RhcnRzV2l0aCgnanM6JykpIHtcXFxcbiAgICBmdW5jdGlvbiBnZXRVcmwoKSB7XFxcXG4gICAgICAgIHJldHVybiBNWV9VUkxcXFxcbiAgICB9XFxcXG5cXFxcbiAgICBmdW5jdGlvbiBnZXRSZXNDb2RlKCkge1xcXFxuICAgICAgICByZXR1cm4gaW5kZXhIdG1sXFxcXG4gICAgfVxcXFxuXFxcXG4gICAgZnVuY3Rpb24gc2V0UmVzdWx0KGVsLCBwYXJhbTEsIHBhcmFtMiwgcGFyYW0zKSB7XFxcXG4gICAgICAgIHBhcmFtMSA9IENBTExCQUNLX0tFWVxcXFxuICAgICAgICBwYXJhbTIgPSBNWV9SVUxFXFxcXG4gICAgICAgIHBhcmFtMyA9IE1ZX1RZUEVcXFxcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZWwuZGF0YSkpIGVsID0gZWwuZGF0YVxcXFxuICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShteUNvbGxlY3Rpb25fZWwsIGVsLm1hcCgodikgPT4ge1xcXFxuICAgICAgICAgICAgbGV0IE1ZX19SVUxFID0gT2JqZWN0LmFzc2lnbih7fSwgTVlfUlVMRSlcXFxcbiAgICAgICAgICAgIHYuY29sX3R5cGUgPSB2LmNvbF90eXBlIHx8IE1ZX1JVTEUuY29sX3R5cGVcXFxcblxcXFxuICAgICAgICAgICAgaWYgKCF2LnVybCB8fCBbJ3J1bGUnLCAncGljcycsICd0b2FzdCcsICdpbnB1dCcsICdjb3B5JywgJ2VkaXRGaWxlJywgJ3g1JywgJ3g1V2ViVmlldycsICd4NVBsYXknLCAnd2ViJywgJ3NlbGVjdCcsICd4NVJ1bGUnLCAnd2ViUnVsZSddLmZpbmQoKHZ2KSA9PiB2LnVybC5zdGFydHNXaXRoKHZ2ICsgJzovLycpKSkge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiB2XFxcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHYudXJsLmluY2x1ZGVzKCdAcnVsZT0nKSkge1xcXFxuICAgICAgICAgICAgICAgIGxldCBbXywgdXJsLCBydWxlXSA9IHYudXJsLm1hdGNoKC9eKFtcXFxcXFxcXHNcXFxcXFxcXFNdKj8pQHJ1bGU9KFtcXFxcXFxcXHNcXFxcXFxcXFNdKikkLylcXFxcbiAgICAgICAgICAgICAgICB2LnVybCA9IHVybFxcXFxuICAgICAgICAgICAgICAgIE1ZX19SVUxFLmRldGFpbF9maW5kX3J1bGUgPSBydWxlXFxcXG4gICAgICAgICAgICAgICAgTVlfX1JVTEUuZGV0YWlsX2NvbF90eXBlID0gTVlfUlVMRS5jb2xfdHlwZVxcXFxuICAgICAgICAgICAgfSBlbHNlIGlmICh2LnVybC5zdGFydHNXaXRoKCdoaWtlcjovL3BhZ2UvJykpIHtcXFxcbiAgICAgICAgICAgICAgICBpZiAodi51cmwuaW5jbHVkZXMoJ3J1bGU9JykgfHwgKHYuZXh0cmEgfHwge30pLnJ1bGUpXFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2XFxcXG4gICAgICAgICAgICAgICAgbGV0IFtfLCBwYXRoLCBwYXJhbXNdID0gdi51cmwuc3BsaXQoJyMnKVswXS5tYXRjaCgvXmhpa2VyOlxcXFxcXFxcL1xcXFxcXFxcL3BhZ2VcXFxcXFxcXC8oLis/KSg/OlxcXFxcXFxcPyguKikpPyQvKSxcXFxcbiAgICAgICAgICAgICAgICAgICAgc3ViUGFnZSA9IE1ZX1JVTEUucGFnZUxpc3QuZmluZCgodikgPT4gdi5wYXRoID09IHBhdGgpLFxcXFxuICAgICAgICAgICAgICAgICAgICBzdWJVcmwgPSAocGFyYW1zIHx8ICcnKS5zcGxpdCgnJicpLmZpbmQoKHYpID0+IHYuc3RhcnRzV2l0aCgndXJsPScpKVxcXFxuICAgICAgICAgICAgICAgIHYudXJsID0gc3ViVXJsID8gc3ViVXJsLnNsaWNlKDQpLnJlcGxhY2UoL++8n++8ny9nLCAnPycpLnJlcGxhY2UoL++8hu+8hi9nLCAnJicpIDogKHYuZXh0cmEgfHwge30pLnVybCB8fCAnaGlrZXI6Ly9lbXB0eT8nICsgKHBhcmFtcyB8fCAnJylcXFxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5kZXRhaWxfZmluZF9ydWxlID0gc3ViUGFnZS5ydWxlXFxcXG4gICAgICAgICAgICAgICAgTVlfX1JVTEUuZGV0YWlsX2NvbF90eXBlID0gc3ViUGFnZS5jb2xfdHlwZVxcXFxuICAgICAgICAgICAgICAgIE1ZX19SVUxFLnBhcmFtcyA9IHYuZXh0cmEgfHwge31cXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodi51cmwuaW5jbHVkZXMoJ0BsYXp5UnVsZT0nKSkge1xcXFxuICAgICAgICAgICAgICAgIHYudXJsID0gdi51cmwucmVwbGFjZSgnLmpzOicsICcuanM6XFxcXFxcXFxuaWYoTVlfUlVMRSlPYmplY3QuYXNzaWduKE1ZX1JVTEUsJyArICQuc3RyaW5naWZ5KHsgcGFnZXM6IE1ZX1JVTEUucGFnZXMsIHBhZ2VMaXN0OiBNWV9SVUxFLnBhZ2VMaXN0LCBmaW5kX3J1bGU6ICcnLCBwYXJhbXM6ICcnIH0pICsgJyk7TVlfVVJMPVxcXFxcXFwiJyArIE1ZX1VSTCArICdcXFxcXFxcIjsnKVxcXFxuICAgICAgICAgICAgICAgIHJldHVybiB2XFxcXG4gICAgICAgICAgICB9IGVsc2UgeyByZXR1cm4gdiB9XFxcXG4gICAgICAgICAgICB2LmV4dHJhID0geyB1cmw6IHYudXJsLCBSVUxFOiBNWV9fUlVMRSB9XFxcXG4gICAgICAgICAgICB2LnVybCA9ICdoaWtlcjovL3BhZ2UvZGV0YWlsTG9hZD9ydWxlPScgKyBnZXRJdGVtKCdteUNvbGxlY3Rpb24nKVxcXFxuICAgICAgICAgICAgaWYgKHYuZXh0cmEuUlVMRS51cmwuaW5jbHVkZXMoJyNpbW1lcnNpdmVUaGVtZSMnKSkgdi51cmwgKz0gJyYjaW1tZXJzaXZlVGhlbWUjJ1xcXFxuICAgICAgICAgICAgcmV0dXJuIHZcXFxcbiAgICAgICAgfSkpXFxcXG4gICAgICAgIG1ldGhvZF9zZXRSZXN1bHQuaW52b2tlKGphdmFDb250ZXh0LCBteUNvbGxlY3Rpb25fZWwsIHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMpXFxcXG4gICAgfVxcXFxuICAgIHNldEhvbWVSZXN1bHQgPSBzZXRSZXN1bHRcXFxcbiAgICBzZXRTZWFyY2hSZXN1bHQgPSBzZXRSZXN1bHRcXFxcblxcXFxuICAgIGV2YWwoTVlfUlVMRS5maW5kX3J1bGUuc2xpY2UoMykpXFxcXG59IGVsc2Uge1xcXFxuICAgIGxldCBbXywgZmluZFJ1bGUsIGRldGFpbEZpbmRSdWxlXSA9IE1ZX1JVTEUuZmluZF9ydWxlLm1hdGNoKC9eKC4qPykoPzo9PT4oLiopKT8kLylcXFxcbiAgICBmaW5kUnVsZSA9IGZpbmRSdWxlLnNwbGl0KCc7JylcXFxcbiAgICBwYXJzZURvbUZvckFycmF5KGluZGV4SHRtbCwgZmluZFJ1bGUuc2hpZnQoKSkuZm9yRWFjaCgoZGF0YSkgPT4ge1xcXFxuICAgICAgICBsZXQgW3RpdGxlLCBpbWcsIGRlc2MsIHVybF0gPSBmaW5kUnVsZS5tYXAoKHYsIGkpID0+IHtcXFxcbiAgICAgICAgICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgICAgICAgICBpZiAodiA9PSAnKicpIHJldHVybiAnJ1xcXFxuICAgICAgICAgICAgICAgICAgICBlbHNlIHYgPSAoaSA9PSAxIHx8IGkgPT0gMykgP1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VEb20oZGF0YSwgdikgOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VEb21Gb3JIdG1sKGRhdGEsIHYpXFxcXG4gICAgICAgICAgICAgICAgICAgIGlmIChpICE9IDMpIHYgPSBydW5Db2RlKHYpXFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2XFxcXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgeyByZXR1cm4gJycgfVxcXFxuICAgICAgICAgICAgfSksXFxcXG4gICAgICAgICAgICByZXMgPSB7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcXFxuICAgICAgICAgICAgICAgIHVybDogdXJsLFxcXFxuICAgICAgICAgICAgICAgIGRlc2M6IGRlc2MsXFxcXG4gICAgICAgICAgICAgICAgaW1nOiBpbWcsXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IE1ZX1JVTEUuY29sX3R5cGVcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgaWYgKHJlcy51cmwpIHtcXFxcbiAgICAgICAgICAgIGlmIChyZXMudXJsLmluY2x1ZGVzKCdAbGF6eVJ1bGU9JykpIHtcXFxcbiAgICAgICAgICAgICAgICByZXMudXJsID0gcmVzLnVybC5yZXBsYWNlKCcuanM6JywgJy5qczpcXFxcXFxcXG5pZihNWV9SVUxFKU9iamVjdC5hc3NpZ24oTVlfUlVMRSwnICsgJC5zdHJpbmdpZnkoeyBwYWdlczogTVlfUlVMRS5wYWdlcywgcGFnZUxpc3Q6IE1ZX1JVTEUucGFnZUxpc3QsIGZpbmRfcnVsZTogJycsIHBhcmFtczogJycgfSkgKyAnKTtNWV9VUkw9XFxcXFxcXCInICsgTVlfVVJMICsgJ1xcXFxcXFwiOycpXFxcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRldGFpbEZpbmRSdWxlKSB7XFxcXG4gICAgICAgICAgICAgICAgcmVzLmV4dHJhID0geyB1cmw6IHVybCwgUlVMRTogT2JqZWN0LmFzc2lnbih7fSwgTVlfUlVMRSwgeyBkZXRhaWxfZmluZF9ydWxlOiBkZXRhaWxGaW5kUnVsZSB9KSB9XFxcXG4gICAgICAgICAgICAgICAgcmVzLnVybCA9ICdoaWtlcjovL3BhZ2UvZGV0YWlsTG9hZD9ydWxlPScgKyBnZXRJdGVtKCdteUNvbGxlY3Rpb24nKVxcXFxuICAgICAgICAgICAgICAgIGlmIChyZXMuZXh0cmEuUlVMRS51cmwuaW5jbHVkZXMoJyNpbW1lcnNpdmVUaGVtZSMnKSkgcmVzLnVybCArPSAnJiNpbW1lcnNpdmVUaGVtZSMnXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgbXlDb2xsZWN0aW9uX2VsLnB1c2gocmVzKVxcXFxuICAgIH0pXFxcXG4gICAgc2V0UmVzdWx0KG15Q29sbGVjdGlvbl9lbClcXFxcbn1cXFxcblxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuW3peWFt+mbhlxcXCIsXFxcInBhdGhcXFwiOlxcXCJ1dGlsaXR5XFxcIixcXFwicnVsZVxcXCI6XFxcIiQuZXhwb3J0cyA9IHtcXFxcbiAgICBkYXRhTG9hZDogZnVuY3Rpb24oc2hvd0FsbCkge1xcXFxuICAgICAgICAvL+ajgOafpemXtOmalO+8jOm7mOiupOS4gOWkqVxcXFxuICAgICAgICBsZXQgaW50ZXJ2YWwgPSBwYXJzZUludChyZWFkRmlsZSgndXBkYXRlSW50ZXJ2YWwnKSB8fCAnMScpLFxcXFxuICAgICAgICAgICAgdGltZSA9IHBhcnNlSW50KHJlYWRGaWxlKCd1cGRhdGVUaW1lJykpIHx8IDAsXFxcXG4gICAgICAgICAgICBub3cgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSxcXFxcbiAgICAgICAgICAgIGRhdGEgPSBbXVxcXFxuICAgICAgICBpZiAodGltZSA9PSAwIHx8IGludGVydmFsID4gMCAmJiBub3cgLSB0aW1lID4gMTAwMCAqIDYwICogNjAgKiAyNCAqIGludGVydmFsKSB7XFxcXG4gICAgICAgICAgICAvLyDojrflj5bov5znqIvmlbDmja5cXFxcbiAgICAgICAgICAgIGxldCB1cmwgPSBnZXRJdGVtKCdyZW1vdGVVcmwnKVxcXFxuICAgICAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgICAgICBsZXQgcmVtb3RlRGF0YSA9IGZldGNoKHVybClcXFxcbiAgICAgICAgICAgICAgICBpZiAodXJsLnN0YXJ0c1dpdGgoJ2hpa2VyOi8vcGFnZS8nKSlcXFxcbiAgICAgICAgICAgICAgICAgICAgcmVtb3RlRGF0YSA9IEpTT04ucGFyc2UocmVtb3RlRGF0YSkucnVsZVxcXFxuICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKHJlbW90ZURhdGEpXFxcXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxcXFxuICAgICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT0gMCkge1xcXFxuICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKHJlYWRGaWxlKCdkYXRhQ2FjaGUnKSB8fCAnW10nKVxcXFxuICAgICAgICAgICAgICAgIGxvZygn5rKh5pyJ6I635Y+W5Yiw5pu05paw5pWw5o2uJylcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEuZmlsdGVyKCh2KSA9PiB7IHJldHVybiB2LnRpdGxlICE9IGdldEl0ZW0oJ215Q29sbGVjdGlvbicpICYmICF2LmF1dGhvci5pbmNsdWRlcygn6L275ZCI6ZuG55Sf5oiQ5ZmoJykgfSlcXFxcbiAgICAgICAgICAgICAgICBzYXZlRmlsZSgnZGF0YUNhY2hlJywgSlNPTi5zdHJpbmdpZnkoZGF0YSkpXFxcXG4gICAgICAgICAgICAgICAgc2F2ZUZpbGUoJ3VwZGF0ZVRpbWUnLCBub3cudG9TdHJpbmcoKSlcXFxcbiAgICAgICAgICAgICAgICBsb2coJ+abtOaWsOaVsOaNruW3suWGmeWFpeacrOWcsCcpXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICBkYXRhID0gSlNPTi5wYXJzZShyZWFkRmlsZSgnZGF0YUNhY2hlJykgfHwgJ1tdJylcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICAvLyDlhpnlhaXoh6rlrprkuYnmlbDmja5cXFxcbiAgICAgICAgbGV0IGN1c3RvbURhdGEgPSBKU09OLnBhcnNlKHJlYWRGaWxlKCdjdXN0b21EYXRhJykgfHwgJ1tdJyksXFxcXG4gICAgICAgICAgICByZXdyaXRlRGF0YSA9IFtdXFxcXG4gICAgICAgIGN1c3RvbURhdGEgPSBjdXN0b21EYXRhLnJlZHVjZSgoc2VsZiwgdikgPT4ge1xcXFxuICAgICAgICAgICAgbGV0IGluZGV4ID0gZGF0YS5maW5kSW5kZXgoKHZ2KSA9PiB2LnRpdGxlID09IHZ2LnRpdGxlKVxcXFxuICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcXFxcbiAgICAgICAgICAgICAgICBzZWxmLnB1c2godilcXFxcbiAgICAgICAgICAgICAgICBsZXQgcnVsZSA9IGRhdGEuc3BsaWNlKGluZGV4LCAxKVswXVxcXFxuICAgICAgICAgICAgICAgIGlmKHNob3dBbGwgfHwgdi52aXNpYmxlKVxcXFxuICAgICAgICAgICAgICAgICAgICByZXdyaXRlRGF0YS5wdXNoKE9iamVjdC5hc3NpZ24ocnVsZSwgdikpXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICByZXR1cm4gc2VsZlxcXFxuICAgICAgICB9LCBbXSlcXFxcbiAgICAgICAgZGF0YS5mb3JFYWNoKCh2KSA9PiBjdXN0b21EYXRhLnB1c2goeyB0aXRsZTogdi50aXRsZSwgdmlzaWJsZTogdHJ1ZSB9KSlcXFxcbiAgICAgICAgc2F2ZUZpbGUoJ2N1c3RvbURhdGEnLCBKU09OLnN0cmluZ2lmeShjdXN0b21EYXRhKSlcXFxcbiAgICAgICAgcmV0dXJuIHJld3JpdGVEYXRhLmNvbmNhdChkYXRhKVxcXFxuICAgIH0sXFxcXG4gICAgcnVuQ29kZTogZnVuY3Rpb24ocnVsZSkge1xcXFxuICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgbGV0IFtpbnB1dCwgY29kZV0gPSBydWxlLnNwbGl0KCcuanM6JylcXFxcbiAgICAgICAgICAgIHJldHVybiBjb2RlID8gZXZhbChjb2RlKSA6IHJ1bGVcXFxcbiAgICAgICAgfSBjYXRjaCAoZSkgeyByZXR1cm4gcnVsZSB9XFxcXG4gICAgfSxcXFxcbiAgICB1cmxQYXJzZTogZnVuY3Rpb24odXJsLCBoZWFkZXJzLCBwYWdlTnVtLCBmdW5jKSB7XFxcXG4gICAgICAgIHVybCA9IHVybC5zcGxpdCgnOycpLm1hcCgodikgPT4gdi5yZXBsYWNlKC/vvJvvvJsvZywgJzsnKSlcXFxcbiAgICAgICAgaWYgKGZ1bmMpIGZ1bmModXJsKVxcXFxuICAgICAgICB1cmxbMF0gPSB1cmxbMF0ucmVwbGFjZSgvZnlwYWdlKD86QCgtP1xcXFxcXFxcZCspQCk/KD86XFxcXFxcXFwqKFxcXFxcXFxcZCspQCk/LywgKF8sIHN0YXJ0LCBzcGFjZSkgPT4gcGFyc2VJbnQoc3RhcnQgfHwgMCkgKyAxICsgKHBhZ2VOdW0gLSAxKSAqIHBhcnNlSW50KHNwYWNlIHx8IDEpKVxcXFxuICAgICAgICB1cmxbMF0gPSAvXihbXFxcXFxcXFxzXFxcXFxcXFxTXSo/KSg/OlxcXFxcXFxcW2ZpcnN0UGFnZT0oW1xcXFxcXFxcc1xcXFxcXFxcU10qPylcXFxcXFxcXF0pPyQvLmV4ZWModXJsWzBdKVxcXFxuICAgICAgICB1cmxbMF0gPSBydW5Db2RlKHVybFswXVsyXSAmJiBwYWdlTnVtID09IDEgPyB1cmxbMF1bMl0gOiB1cmxbMF1bMV0pXFxcXG4gICAgICAgIGxldCBvcHRpb25zID0geyBoZWFkZXJzOiBoZWFkZXJzLCBtZXRob2Q6IHVybFsxXSB9XFxcXG4gICAgICAgIC8vIHBvc3Tmlrnms5Xml7bovazmjaLlj4LmlbBcXFxcbiAgICAgICAgaWYgKC9ecG9zdCQvaS50ZXN0KG9wdGlvbnNbJ21ldGhvZCddKSkge1xcXFxuICAgICAgICAgICAgbGV0IFtvcmlVcmwsIGJvZHldID0gdXJsWzBdLnNwbGl0KCc/JylcXFxcbiAgICAgICAgICAgIHVybFswXSA9IG9yaVVybC5yZXBsYWNlKC/vvJ/vvJ8vZywgJz8nKVxcXFxuICAgICAgICAgICAgaWYgKGJvZHkuc3RhcnRzV2l0aCgnSnNvbkJvZHk9JykpIGJvZHkgPSBib2R5LnNsaWNlKDkpXFxcXG4gICAgICAgICAgICBvcHRpb25zWydib2R5J10gPSBib2R5XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgaWYgKHVybFsyXSkgb3B0aW9ucy5oZWFkZXJzWydDb250ZW50LVR5cGUnXSA9ICd0ZXh0L3BsYWluO2NoYXJzdD0nICsgdXJsWzJdXFxcXG4gICAgICAgIGlmICh1cmxbM10pIHVybFszXS5tYXRjaCgveyguKil9LylbMV0uc3BsaXQoJyYmJykuZm9yRWFjaCgodikgPT4ge1xcXFxuICAgICAgICAgICAgbGV0IFtrZXksIHZhbHVlXSA9IHYuc3BsaXQoJ0AnKVxcXFxuICAgICAgICAgICAgb3B0aW9ucy5oZWFkZXJzW2tleV0gPSBydW5Db2RlKHZhbHVlKVxcXFxuICAgICAgICB9KVxcXFxuICAgICAgICAvLyDmt7vliqDlhajlsYBVQVxcXFxuICAgICAgICBpZiAoIW9wdGlvbnMuaGVhZGVyc1snVXNlci1BZ2VudCddKSB7XFxcXG4gICAgICAgICAgICBpZiAoTVlfUlVMRS51YSA9PSAncGMnKVxcXFxuICAgICAgICAgICAgICAgIG9wdGlvbnMuaGVhZGVyc1snVXNlci1BZ2VudCddID0gUENfVUFcXFxcbiAgICAgICAgICAgIGVsc2UgaWYgKE1ZX1JVTEUudWEgPT0gJ21vYmlsZScpXFxcXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5oZWFkZXJzWydVc2VyLUFnZW50J10gPSBNT0JJTEVfVUFcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICByZXR1cm4geyBNWV9VUkw6IHVybFswXSwgTVlfVVJMX09wdGlvbnM6IG9wdGlvbnMgfVxcXFxuICAgIH1cXFxcbn1cXFxcblxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8xX3ZlcnRpY2FsX3BpY1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLljZXmkJxcXFwiLFxcXCJwYXRoXFxcIjpcXFwic2luZ2xlU2VhcmNoXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxubGV0IG15Q29sbGVjdGlvbl9lbCA9IFtdLFxcXFxuICAgIFJVTEUgPSBNWV9QQVJBTVMuUlVMRSxcXFxcbiAgICBrZXl3b3JkID0gZ2V0UGFyYW0oJ2tleXdvcmQnKSxcXFxcbiAgICBwYWdlTnVtID0gcGFyc2VJbnQoZ2V0UGFyYW0oJ3BhZ2UnKSlcXFxcblxcXFxuLy8g5aSE55CGTVlfVVJM5ZKMTVlfUlVMRVxcXFxuTVlfVFlQRSA9ICdzZWFyY2gnXFxcXG5NWV9SVUxFLnVhID0gUlVMRS51YVxcXFxuTVlfUlVMRS50aXRsZSA9IFJVTEUudGl0bGVcXFxcbk1ZX1JVTEUuY29sX3R5cGUgPSBSVUxFLmNvbF90eXBlXFxcXG5NWV9SVUxFLmRldGFpbF9jb2xfdHlwZSA9IFsnJywgJyonXS5pbmNsdWRlcyhSVUxFLnNkZXRhaWxfZmluZF9ydWxlKSA/IFJVTEUuZGV0YWlsX2NvbF90eXBlIDogUlVMRS5zZGV0YWlsX2NvbF90eXBlXFxcXG5NWV9SVUxFLmZpbmRfcnVsZSA9IFJVTEUuc2VhcmNoRmluZFxcXFxuTVlfUlVMRS5kZXRhaWxfZmluZF9ydWxlID0gWycnLCAnKiddLmluY2x1ZGVzKFJVTEUuc2RldGFpbF9maW5kX3J1bGUpID8gUlVMRS5kZXRhaWxfZmluZF9ydWxlIDogUlVMRS5zZGV0YWlsX2ZpbmRfcnVsZVxcXFxuTVlfUlVMRS5wcmVSdWxlID0gUlVMRS5wcmVSdWxlXFxcXG5NWV9SVUxFLnBhZ2VMaXN0ID0gSlNPTi5wYXJzZShSVUxFLnBhZ2VzIHx8ICdbXScpXFxcXG5NWV9SVUxFLnBhZ2VzID0gSlNPTi5zdHJpbmdpZnkoTVlfUlVMRS5wYWdlTGlzdClcXFxcbk1ZX1JVTEUubGFzdF9jaGFwdGVyX3J1bGUgPSBSVUxFLmxhc3RfY2hhcHRlcl9ydWxlXFxcXG5NWV9SVUxFLnBhcmFtcyA9IHt9XFxcXG5cXFxcbmNvbnN0IHsgcnVuQ29kZSwgdXJsUGFyc2UgfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL3V0aWxpdHk/cnVsZT0nICsgZ2V0SXRlbSgnbXlDb2xsZWN0aW9uJykpXFxcXG52YXIgeyBNWV9VUkwsIE1ZX1VSTF9PcHRpb25zIH0gPSB1cmxQYXJzZShSVUxFLnNlYXJjaF91cmwsIHt9LCBwYWdlTnVtLCAodXJsKSA9PiB7XFxcXG4gICAgdXJsWzBdID0gdXJsWzBdLnJlcGxhY2UodXJsWzBdLmluY2x1ZGVzKCclJScpID8gLyUlL2cgOiAvXFxcXFxcXFwqXFxcXFxcXFwqL2csIGVuY29kZVN0cihrZXl3b3JkLCB1cmxbMl0pKVxcXFxufSksXFxcXG4gICAgaW5kZXhIdG1sID0gZmV0Y2goTVlfVVJMLCBNWV9VUkxfT3B0aW9ucylcXFxcbk1ZX1JVTEUudXJsID0gTVlfVVJMXFxcXG5NWV9SVUxFLnVybEhlYWRlcnMgPSBNWV9VUkxfT3B0aW9ucy5oZWFkZXJzXFxcXG4vLyDmraPmlofop6PmnpBcXFxcbmlmIChwYWdlTnVtID09IDEpIHNldFBhZ2VUaXRsZSgn4oCcJyArIGtleXdvcmQgKyAn4oCd55qE5pCc57Si57uT5p6cJylcXFxcbmlmIChNWV9SVUxFLmZpbmRfcnVsZS5zdGFydHNXaXRoKCdqczonKSkge1xcXFxuICAgIGZ1bmN0aW9uIGdldFVybCgpIHtcXFxcbiAgICAgICAgcmV0dXJuIE1ZX1VSTFxcXFxuICAgIH1cXFxcblxcXFxuICAgIGZ1bmN0aW9uIGdldFJlc0NvZGUoKSB7XFxcXG4gICAgICAgIHJldHVybiBpbmRleEh0bWxcXFxcbiAgICB9XFxcXG5cXFxcbiAgICBmdW5jdGlvbiBzZXRSZXN1bHQoZWwsIHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMpIHtcXFxcbiAgICAgICAgcGFyYW0xID0gQ0FMTEJBQ0tfS0VZXFxcXG4gICAgICAgIHBhcmFtMiA9IE1ZX1JVTEVcXFxcbiAgICAgICAgcGFyYW0zID0gTVlfVFlQRVxcXFxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShlbC5kYXRhKSkgZWwgPSBlbC5kYXRhXFxcXG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KG15Q29sbGVjdGlvbl9lbCwgZWwubWFwKCh2KSA9PiB7XFxcXG4gICAgICAgICAgICBsZXQgTVlfX1JVTEUgPSBPYmplY3QuYXNzaWduKHt9LCBNWV9SVUxFKSxcXFxcbiAgICAgICAgICAgICAgICBzdWJUaXRsZSA9IHYudGl0bGVcXFxcbiAgICAgICAgICAgIHYudGl0bGUgKz0gJ+KAnOKAnOKAneKAnTxicj4nICsgKFJVTEUudGl0bGUuZm9udGNvbG9yKCcjMTJiNjY4JykgKyAnIOKWqiAnICsgKHYuZGVzYyB8fCAnJykuZm9udGNvbG9yKCcjNjY2NjY2JykpLnNtYWxsKClcXFxcbiAgICAgICAgICAgIHYuZGVzYyA9IHYuY29udGVudCB8fCAnJ1xcXFxuICAgICAgICAgICAgaWYoIXYuaW1nICYmICF2LnBpY191cmwpIHYuY29sX3R5cGUgPSAndGV4dF8xJ1xcXFxuICAgICAgICAgICAgZGVsZXRlIHYuY29udGVudFxcXFxuXFxcXG4gICAgICAgICAgICBpZiAoIXYudXJsIHx8IFsncnVsZScsICdwaWNzJywgJ3RvYXN0JywgJ2lucHV0JywgJ2NvcHknLCAnZWRpdEZpbGUnLCAneDUnLCAneDVXZWJWaWV3JywgJ3g1UGxheScsICd3ZWInLCAnc2VsZWN0JywgJ3g1UnVsZScsICd3ZWJSdWxlJ10uZmluZCgodnYpID0+IHYudXJsLnN0YXJ0c1dpdGgodnYgKyAnOi8vJykpKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodi51cmwuaW5jbHVkZXMoJ0BydWxlPScpKSB7XFxcXG4gICAgICAgICAgICAgICAgbGV0IFtfLCB1cmwsIHJ1bGVdID0gdi51cmwubWF0Y2goL14oW1xcXFxcXFxcc1xcXFxcXFxcU10qPylAcnVsZT0oW1xcXFxcXFxcc1xcXFxcXFxcU10qKSQvKVxcXFxuICAgICAgICAgICAgICAgIHYudXJsID0gdXJsXFxcXG4gICAgICAgICAgICAgICAgTVlfX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSA9IHJ1bGVcXFxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5kZXRhaWxfY29sX3R5cGUgPSBNWV9SVUxFLmNvbF90eXBlXFxcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHYudXJsLnN0YXJ0c1dpdGgoJ2hpa2VyOi8vcGFnZS8nKSkge1xcXFxuICAgICAgICAgICAgICAgIGlmICh2LnVybC5pbmNsdWRlcygncnVsZT0nKSB8fCAodi5leHRyYSB8fCB7fSkucnVsZSlcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZcXFxcbiAgICAgICAgICAgICAgICBsZXQgW18sIHBhdGgsIHBhcmFtc10gPSB2LnVybC5zcGxpdCgnIycpWzBdLm1hdGNoKC9eaGlrZXI6XFxcXFxcXFwvXFxcXFxcXFwvcGFnZVxcXFxcXFxcLyguKz8pKD86XFxcXFxcXFw/KC4qKSk/JC8pLFxcXFxuICAgICAgICAgICAgICAgICAgICBzdWJQYWdlID0gTVlfUlVMRS5wYWdlTGlzdC5maW5kKCh2KSA9PiB2LnBhdGggPT0gcGF0aCksXFxcXG4gICAgICAgICAgICAgICAgICAgIHN1YlVybCA9IChwYXJhbXMgfHwgJycpLnNwbGl0KCcmJykuZmluZCgodikgPT4gdi5zdGFydHNXaXRoKCd1cmw9JykpXFxcXG4gICAgICAgICAgICAgICAgdi51cmwgPSBzdWJVcmwgPyBzdWJVcmwuc2xpY2UoNCkucmVwbGFjZSgv77yf77yfL2csICc/JykucmVwbGFjZSgv77yG77yGL2csICcmJykgOiAodi5leHRyYSB8fCB7fSkudXJsIHx8ICdoaWtlcjovL2VtcHR5PycgKyAocGFyYW1zIHx8ICcnKVxcXFxuICAgICAgICAgICAgICAgIE1ZX19SVUxFLmRldGFpbF9maW5kX3J1bGUgPSBzdWJQYWdlLnJ1bGVcXFxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5kZXRhaWxfY29sX3R5cGUgPSBzdWJQYWdlLmNvbF90eXBlXFxcXG4gICAgICAgICAgICAgICAgTVlfX1JVTEUucGFyYW1zID0gdi5leHRyYSB8fCB7fVxcXFxuICAgICAgICAgICAgfSBlbHNlIGlmICh2LnVybC5pbmNsdWRlcygnQGxhenlSdWxlPScpKSB7XFxcXG4gICAgICAgICAgICAgICAgdi51cmwgPSB2LnVybC5yZXBsYWNlKCcuanM6JywgJy5qczpcXFxcXFxcXG5pZihNWV9SVUxFKU9iamVjdC5hc3NpZ24oTVlfUlVMRSwnICsgJC5zdHJpbmdpZnkoeyBwYWdlczogTVlfUlVMRS5wYWdlcywgcGFnZUxpc3Q6IE1ZX1JVTEUucGFnZUxpc3QsIGZpbmRfcnVsZTogJycsIHBhcmFtczogJycgfSkgKyAnKTtNWV9VUkw9XFxcXFxcXCInICsgTVlfVVJMICsgJ1xcXFxcXFwiOycpXFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIU1ZX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSB8fCB2LnVybC5zdGFydHNXaXRoKCdoaWtlcjovLycpKSB7IHJldHVybiB2IH1cXFxcbiAgICAgICAgICAgIHYuZXh0cmEgPSB7IHVybDogdi51cmwsIFJVTEU6IE1ZX19SVUxFLCBwYWdlVGl0bGU6IHN1YlRpdGxlIH1cXFxcbiAgICAgICAgICAgIHYudXJsID0gJ2hpa2VyOi8vcGFnZS9kZXRhaWxMb2FkP3J1bGU9JyArIGdldEl0ZW0oJ215Q29sbGVjdGlvbicpXFxcXG4gICAgICAgICAgICBpZiAodi5leHRyYS5SVUxFLnVybC5pbmNsdWRlcygnI2ltbWVyc2l2ZVRoZW1lIycpKSB2LnVybCArPSAnJiNpbW1lcnNpdmVUaGVtZSMnXFxcXG4gICAgICAgICAgICByZXR1cm4gdlxcXFxuICAgICAgICB9KSlcXFxcbiAgICAgICAgbWV0aG9kX3NldFJlc3VsdC5pbnZva2UoamF2YUNvbnRleHQsIG15Q29sbGVjdGlvbl9lbCwgcGFyYW0xLCBwYXJhbTIsIHBhcmFtMylcXFxcbiAgICB9XFxcXG4gICAgc2V0SG9tZVJlc3VsdCA9IHNldFJlc3VsdFxcXFxuICAgIHNldFNlYXJjaFJlc3VsdCA9IHNldFJlc3VsdFxcXFxuXFxcXG4gICAgZXZhbChNWV9SVUxFLmZpbmRfcnVsZS5zbGljZSgzKSlcXFxcbn0gZWxzZSB7XFxcXG4gICAgbGV0IGZpbmRSdWxlID0gTVlfUlVMRS5maW5kX3J1bGUuc3BsaXQoJzsnKVxcXFxuICAgIHBhcnNlRG9tRm9yQXJyYXkoaW5kZXhIdG1sLCBmaW5kUnVsZS5zaGlmdCgpKS5mb3JFYWNoKChkYXRhKSA9PiB7XFxcXG4gICAgICAgIGxldCBbdGl0bGUsIHVybCwgZGVzYywgY29udGVudCwgaW1nXSA9IGZpbmRSdWxlLm1hcCgodiwgaSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGlmICh2ID09ICcqJykgcmV0dXJuICcnXFxcXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgdiA9IChpID09IDEgfHwgaSA9PSA0KSA/XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZURvbShkYXRhLCB2KSA6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZURvbUZvckh0bWwoZGF0YSwgdilcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT0gMSkgdiA9IHJ1bkNvZGUodilcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZcXFxcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7IHJldHVybiAnJyB9XFxcXG4gICAgICAgICAgICB9KSxcXFxcbiAgICAgICAgICAgIHJlcyA9IHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUgKyAn4oCc4oCc4oCd4oCdPGJyPicgKyAoUlVMRS50aXRsZS5mb250Y29sb3IoJyMxMmI2NjgnKSArICcg4paqICcgKyBkZXNjLmZvbnRjb2xvcignIzY2NjY2NicpKS5zbWFsbCgpLFxcXFxuICAgICAgICAgICAgICAgIHVybDogdXJsLFxcXFxuICAgICAgICAgICAgICAgIGRlc2M6IGNvbnRlbnQsXFxcXG4gICAgICAgICAgICAgICAgaW1nOiBpbWdcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgaWYoIXJlcy5pbWcpIHJlcy5jb2xfdHlwZSA9ICd0ZXh0XzEnXFxcXG4gICAgICAgIGlmIChyZXMudXJsKSB7XFxcXG4gICAgICAgICAgICBpZiAocmVzLnVybC5pbmNsdWRlcygnQGxhenlSdWxlPScpKSB7XFxcXG4gICAgICAgICAgICAgICAgcmVzLnVybCA9IHJlcy51cmwucmVwbGFjZSgnLmpzOicsICcuanM6XFxcXFxcXFxuaWYoTVlfUlVMRSlPYmplY3QuYXNzaWduKE1ZX1JVTEUsJyArICQuc3RyaW5naWZ5KHsgcGFnZXM6IE1ZX1JVTEUucGFnZXMsIHBhZ2VMaXN0OiBNWV9SVUxFLnBhZ2VMaXN0LCBmaW5kX3J1bGU6ICcnLCBwYXJhbXM6ICcnIH0pICsgJyk7TVlfVVJMPVxcXFxcXFwiJyArIE1ZX1VSTCArICdcXFxcXFxcIjsnKVxcXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChNWV9SVUxFLmRldGFpbF9maW5kX3J1bGUpIHtcXFxcbiAgICAgICAgICAgICAgICByZXMuZXh0cmEgPSB7IHVybDogdXJsLCBSVUxFOiBNWV9SVUxFLCBwYWdlVGl0bGU6IHRpdGxlIH1cXFxcbiAgICAgICAgICAgICAgICByZXMudXJsID0gJ2hpa2VyOi8vcGFnZS9kZXRhaWxMb2FkP3J1bGU9JyArIGdldEl0ZW0oJ215Q29sbGVjdGlvbicpXFxcXG4gICAgICAgICAgICAgICAgaWYgKHJlcy5leHRyYS5SVUxFLnVybC5pbmNsdWRlcygnI2ltbWVyc2l2ZVRoZW1lIycpKSByZXMudXJsICs9ICcmI2ltbWVyc2l2ZVRoZW1lIydcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBteUNvbGxlY3Rpb25fZWwucHVzaChyZXMpXFxcXG4gICAgfSlcXFxcbiAgICBzZXRSZXN1bHQobXlDb2xsZWN0aW9uX2VsKVxcXFxufVxcXFxuXFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcImljb25fMl9yb3VuZFxcXCIsXFxcIm5hbWVcXFwiOlxcXCLorr7nva5cXFwiLFxcXCJwYXRoXFxcIjpcXFwiQ29uZmlnXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxuYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAnY2xlYXJWYXIoXFxcXFxcXCJteUNvbGxlY3Rpb24tc29ydEZsYWdcXFxcXFxcIik7cmVmcmVzaFBhZ2UoKScpXFxcXG5zZXRQYWdlVGl0bGUoJ+KamSDovbvlkIjpm4borr7nva4g4pqZJylcXFxcbmNvbnN0IHsgZGF0YUxvYWQgfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL3V0aWxpdHk/cnVsZT0nICsgZ2V0SXRlbSgnbXlDb2xsZWN0aW9uJykpXFxcXG5sZXQgZGF0YSA9IGRhdGFMb2FkKHRydWUpLFxcXFxuICAgIGVsID0gW3tcXFxcbiAgICAgICAgdGl0bGU6ICfmuIXpmaTnvJPlrZgs56uL5Y2z5pu05pawIDxzbWFsbD4g77yI5Z+65LqO6L+c56iL5LuT5bqTLOS4jeimgemikee5geeCueWHu++8iScsXFxcXG4gICAgICAgIHVybDogJCgpLmxhenlSdWxlKCgpID0+IHtcXFxcbiAgICAgICAgICAgIGRlbGV0ZUZpbGUoJ3VwZGF0ZVRpbWUnKVxcXFxuICAgICAgICAgICAgYmFjayhmYWxzZSlcXFxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lmm7TmlrAnXFxcXG4gICAgICAgIH0pLFxcXFxuICAgICAgICBpbWc6ICdoaWtlcjovL2ltYWdlcy9pY29uMScsXFxcXG4gICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJ1xcXFxuICAgIH1dLFxcXFxuICAgIHNlYXJjaFRoZCA9IHJlYWRGaWxlKCdzZWFyY2hUaGQnKSB8fCAnNScsXFxcXG4gICAgdXBkYXRlSW50ZXJ2YWwgPSByZWFkRmlsZSgndXBkYXRlSW50ZXJ2YWwnKSB8fCAnMScsXFxcXG4gICAgbmV3V2luZG93ID0gcmVhZEZpbGUoJ25ld1dpbmRvdycpLFxcXFxuICAgIGVkaXRNb2RlID0gZ2V0VmFyKCdteUNvbGxlY3Rpb24tZWRpdE1vZGUnLCAn5ZCv55SoL+emgeeUqCcpXFxcXG5cXFxcbmVsLnB1c2goe1xcXFxuICAgIHRpdGxlOiAnICDwn5SNIOaQnOe0ouaooeW8jzogJyArIChzZWFyY2hUaGQgPT0gMCA/ICfliJcnIDogJ+iBmicgKyBzZWFyY2hUaGQpICsgJyAgJyxcXFxcbiAgICB1cmw6ICQoWyfliJfooajmkJzntKInLCAn6IGa5ZCI5pCc57SiJ10sIDEpLnNlbGVjdCgoc2VhcmNoVGhkKSA9PiB7XFxcXG4gICAgICAgIGlmIChpbnB1dCA9PSAn5YiX6KGo5pCc57SiJykge1xcXFxuICAgICAgICAgICAgc2F2ZUZpbGUoJ3NlYXJjaFRoZCcsICcwJylcXFxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIGlmIChzZWFyY2hUaGQgPT0gMCkgc2VhcmNoVGhkID0gNVxcXFxuICAgICAgICAgICAgcmV0dXJuICQoc2VhcmNoVGhkLCAn6L6T5YWl5pCc57Si57q/56iL77yM5pyA5aW95LiN6KaB6LaF6L+HMTYnKS5pbnB1dCgoKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgc2F2ZUZpbGUoJ3NlYXJjaFRoZCcsIGlucHV0KVxcXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgIH1cXFxcbiAgICB9LCBzZWFyY2hUaGQpLFxcXFxuICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXFxcbn0sIHtcXFxcbiAgICB0aXRsZTogJyAg8J+SoSDmm7TmlrDpopHnjoc6ICcgKyAodXBkYXRlSW50ZXJ2YWwgPCAxID8gJ+aJi+WKqCcgOiB1cGRhdGVJbnRlcnZhbCArICflpKknKSArICcgICcsXFxcXG4gICAgdXJsOiAkKHVwZGF0ZUludGVydmFsLCAn6L6T5YWl5pu05paw6Ze06ZqU77yI5aSp77yJ77yM5Li6MOWImeaJi+WKqOabtOaWsCcpLmlucHV0KCgpID0+IHtcXFxcbiAgICAgICAgc2F2ZUZpbGUoJ3VwZGF0ZUludGVydmFsJywgaW5wdXQpXFxcXG4gICAgICAgIHJlZnJlc2hQYWdlKClcXFxcbiAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcXFxuICAgIH0pLFxcXFxuICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXFxcbn0sIHtcXFxcbiAgICB0aXRsZTogJyAg8J+WpSDni6znq4vpppbpobU6ICcgKyAobmV3V2luZG93ID8gJ+aYrycgOiAn5ZCmJykgKyAnICAnLFxcXFxuICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgobmV3V2luZG93KSA9PiB7XFxcXG4gICAgICAgIHNhdmVGaWxlKCduZXdXaW5kb3cnLCBuZXdXaW5kb3cgPyAnJyA6ICcxJylcXFxcbiAgICAgICAgcmVmcmVzaFBhZ2UoKVxcXFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxcXG4gICAgfSwgbmV3V2luZG93KSxcXFxcbiAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxcXG59LCB7XFxcXG4gICAgdGl0bGU6ICfigJzigJzigJ3igJ08Zm9udCBjb2xvcj1cXFxcXFxcIiM2NjY2NjZcXFxcXFxcIj48c21hbGw+54m55Yir6bij6LCi77yM5bCP56iL5bqP5o+Q5L6b6ICF77yaXFxcXFxcXFxuJyArXFxcXG4gICAgICAgIGRhdGEucmVkdWNlKChzZWxmLCB2KSA9PiB2LmF1dGhvciA/IHNlbGYuY29uY2F0KHYuYXV0aG9yLnNwbGl0KCcmJykpIDogc2VsZiwgW10pXFxcXG4gICAgICAgIC5maWx0ZXIoKHYsIGksIGFycikgPT4gdiAmJiBhcnIuaW5kZXhPZih2KSA9PSBpKS5qb2luKCfjgIEnKSxcXFxcbiAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXFxcbiAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxcXG59KVxcXFxuXFxcXG5lbC5wdXNoKHsgY29sX3R5cGU6ICdsaW5lJyB9LCB7IGNvbF90eXBlOiAnYmlnX2JsYW5rX2Jsb2NrJyB9KTtcXFxcblsn5ZCv55SoL+emgeeUqCcsICfph43mlrDmjpLluo8nLCAn5pu05pS55Zu+5qCHJywgJ+WvvOWFpea1t+mYlCddLmZvckVhY2goKHYpID0+IHtcXFxcbiAgICBlbC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IHYgPT0gZWRpdE1vZGUgPyAn4oCc4oCc4oCd4oCdJyArIHYuYm9sZCgpLmZvbnRjb2xvcignIzEyYjY2OCcpIDogdixcXFxcbiAgICAgICAgdXJsOiB2ID09IGVkaXRNb2RlID8gJ2hpa2VyOi8vZW1wdHknIDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgodikgPT4ge1xcXFxuICAgICAgICAgICAgcHV0VmFyKCdteUNvbGxlY3Rpb24tZWRpdE1vZGUnLCB2KVxcXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxcXG4gICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxcXG4gICAgICAgIH0sIHYpLFxcXFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxcXG4gICAgfSlcXFxcbn0pXFxcXG5lbC5wdXNoKHtcXFxcbiAgICB0aXRsZTogJ+aBouWkjeWHuuWOguaVsOaNricsXFxcXG4gICAgdXJsOiAkKCfnoa7lrpropoHmgaLlpI3lh7rljoLvvIzmuIXmpZroh6rlrprkuYnmlbDmja7lkJfvvJ8nKS5jb25maXJtKCgpID0+IHtcXFxcbiAgICAgICAgZGVsZXRlRmlsZSgnY3VzdG9tRGF0YScpXFxcXG4gICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcXFxuICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5oGi5aSN5Ye65Y6C5pWw5o2uJ1xcXFxuICAgIH0pLFxcXFxuICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXFxcbn0pXFxcXG5cXFxcbkpTT04ucGFyc2UocmVhZEZpbGUoJ2N1c3RvbURhdGEnKSB8fCAnW10nKS5mb3JFYWNoKCh2LCBpKSA9PiB7XFxcXG4gICAgbGV0IGQgPSB7IHRpdGxlOiB2LnRpdGxlLCBpbWc6IGRhdGFbaV0uaWNvbiB9XFxcXG4gICAgc3dpdGNoIChlZGl0TW9kZSkge1xcXFxuICAgICAgICBjYXNlICflkK/nlKgv56aB55SoJzpcXFxcbiAgICAgICAgICAgIGQudGl0bGUgPSAodi52aXNpYmxlID8gJ/Cfn6IgICcgOiAn8J+UtCAgJykgKyBkLnRpdGxlXFxcXG4gICAgICAgICAgICBkLnVybCA9ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHJ1bGUpID0+IHtcXFxcbiAgICAgICAgICAgICAgICBsZXQgcnVsZXMgPSBKU09OLnBhcnNlKHJlYWRGaWxlKCdjdXN0b21EYXRhJykgfHwgJ1tdJyksXFxcXG4gICAgICAgICAgICAgICAgICAgIGluZGV4ID0gcnVsZXMuZmluZEluZGV4KCh2KSA9PiB2LnRpdGxlID09IHJ1bGUudGl0bGUpXFxcXG4gICAgICAgICAgICAgICAgcnVsZXNbaW5kZXhdLnZpc2libGUgPSAhcnVsZXNbaW5kZXhdLnZpc2libGVcXFxcbiAgICAgICAgICAgICAgICBzYXZlRmlsZSgnY3VzdG9tRGF0YScsIEpTT04uc3RyaW5naWZ5KHJ1bGVzKSlcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxcXG4gICAgICAgICAgICB9LCB2KVxcXFxuICAgICAgICAgICAgYnJlYWtcXFxcbiAgICAgICAgY2FzZSAn6YeN5paw5o6S5bqPJzpcXFxcbiAgICAgICAgICAgIGxldCBzb3J0RmxhZyA9IHBhcnNlSW50KGdldFZhcignbXlDb2xsZWN0aW9uLXNvcnRGbGFnJywgJy0xJykpXFxcXG4gICAgICAgICAgICBkLnRpdGxlID0gKHNvcnRGbGFnID09IGkgPyAn8J+UgyAgJyA6ICcnKSArIGQudGl0bGVcXFxcbiAgICAgICAgICAgIGlmIChzb3J0RmxhZyA9PSAtMSlcXFxcbiAgICAgICAgICAgICAgICBkLnVybCA9ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGkpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcHV0VmFyKCdteUNvbGxlY3Rpb24tc29ydEZsYWcnLCBpLnRvU3RyaW5nKCkpXFxcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6YCJ5oup6KaB56e75Yqo5Yiw55qE5L2N572uJ1xcXFxuICAgICAgICAgICAgICAgIH0sIGkpXFxcXG4gICAgICAgICAgICBlbHNlXFxcXG4gICAgICAgICAgICAgICAgZC51cmwgPSAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChvbGRJbmRleCwgbmV3SW5kZXgpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJ1bGVzID0gSlNPTi5wYXJzZShyZWFkRmlsZSgnY3VzdG9tRGF0YScpIHx8ICdbXScpXFxcXG4gICAgICAgICAgICAgICAgICAgIHJ1bGVzLnNwbGljZShuZXdJbmRleCwgMCwgcnVsZXMuc3BsaWNlKG9sZEluZGV4LCAxKVswXSlcXFxcbiAgICAgICAgICAgICAgICAgICAgc2F2ZUZpbGUoJ2N1c3RvbURhdGEnLCBKU09OLnN0cmluZ2lmeShydWxlcykpXFxcXG4gICAgICAgICAgICAgICAgICAgIHB1dFZhcignbXlDb2xsZWN0aW9uLXNvcnRGbGFnJywgJy0xJylcXFxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXFxcbiAgICAgICAgICAgICAgICB9LCBzb3J0RmxhZywgaSlcXFxcbiAgICAgICAgICAgIGJyZWFrXFxcXG4gICAgICAgIGNhc2UgJ+abtOaUueWbvuaghyc6XFxcXG4gICAgICAgICAgICBkLnVybCA9ICQodi5pY29uIHx8ICcnLCAn6L6T5YWl5paw5Zu+5qCH5Zyw5Z2A5oiW6aKc6Imy5Luj56CB77yaJykuaW5wdXQoKHJ1bGUpID0+IHtcXFxcbiAgICAgICAgICAgICAgICBsZXQgcnVsZXMgPSBKU09OLnBhcnNlKHJlYWRGaWxlKCdjdXN0b21EYXRhJykgfHwgJ1tdJyksXFxcXG4gICAgICAgICAgICAgICAgICAgIGluZGV4ID0gcnVsZXMuZmluZEluZGV4KCh2KSA9PiB2LnRpdGxlID09IHJ1bGUudGl0bGUpXFxcXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0KVxcXFxuICAgICAgICAgICAgICAgICAgICBydWxlc1tpbmRleF0uaWNvbiA9IGlucHV0XFxcXG4gICAgICAgICAgICAgICAgZWxzZVxcXFxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcnVsZXNbaW5kZXhdLmljb25cXFxcbiAgICAgICAgICAgICAgICBzYXZlRmlsZSgnY3VzdG9tRGF0YScsIEpTT04uc3RyaW5naWZ5KHJ1bGVzKSlcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxcXG4gICAgICAgICAgICB9LCB2KVxcXFxuICAgICAgICAgICAgYnJlYWtcXFxcbiAgICAgICAgY2FzZSAn5a+85YWl5rW36ZiUJzpcXFxcbiAgICAgICAgICAgIGQudXJsID0gJ3J1bGU6Ly8nICsgYmFzZTY0RW5jb2RlKEpTT04uc3RyaW5naWZ5KGRhdGFbaV0pKVxcXFxuICAgICAgICAgICAgYnJlYWtcXFxcbiAgICB9XFxcXG4gICAgZWwucHVzaChkKVxcXFxufSlcXFxcbnNldFJlc3VsdChlbClcXFxcblxcXCJ9XVwifSIsInBpY1VybCI6Imh0dHBzOi8vc3RhdGljMDEuaW1na3IuY29tL3RlbXAvMjM4MTM3ZWZiNjE2NDU4Nzk2ODdhODUwM2YzNGQ4OTMucG5nIiwidGl0bGUiOiJNeUZpZWxk4bSw4oG/In0=
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement