Advertisement
xiaomianao666

邀您一起看:新番更新表

Jan 17th, 2022
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:二级页面详情¥page_detail¥新番更新表@@eyJkYXRhIjoie1wiYXNzb2NpYXRlZE1vZGVsc01hcEZvckpvaW5UYWJsZVwiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhGS1wiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhvdXRGS1wiOnt9LFwiZmllbGRzVG9TZXRUb0RlZmF1bHRcIjpbXSxcImlkXCI6MCxcImxhc3RfY2hhcHRlcl9ydWxlXCI6XCJcIixcImxpc3RUb0NsZWFyQXNzb2NpYXRlZEZLXCI6W10sXCJsaXN0VG9DbGVhclNlbGZGS1wiOltdLFwicGFnZUxpc3RcIjpbe1wiY29sX3R5cGVcIjpcInRleHRfMVwiLFwibmFtZVwiOlwiQ2xhc3NUYWJcIixcInBhdGhcIjpcIkNsYXNzVGFiXCIsXCJydWxlXCI6XCJmdW5jdGlvbiBDbGFzc1RhYihjbGFzc0FycmF5LCBwYXJhbXMpIHtcXG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLCBwYXJhbXMpXFxuICAgIHRoaXMuYXJyID0gY2xhc3NBcnJheS5tYXAodiA9PiB0aGlzLmluaXQodikpXFxuICAgIHRoaXMuc2lnbiA9ICckJyArIE1ZX1JVTEUudGl0bGUgKyAnXycgKyAodGhpcy5uYW1lIHx8ICcnKSArICdfJ1xcbiAgICB0aGlzLmNvbG9yID0gdGhpcy5jb2xvciB8fCAnIzEyYjY2OCdcXG4gICAgdGhpcy5ib3VuZGFyeSA9IHRoaXMuYm91bmRhcnkgfHwgJ2JsYW5rX2Jsb2NrJ1xcbn1cXG5DbGFzc1RhYi5wcm90b3R5cGUgPSB7XFxuICAgIGNvbnN0cnVjdG9yOiBDbGFzc1RhYixcXG4gICAgbG9hZChlbCkge1xcbiAgICAgICAgbGV0IGZvbGRlZCA9IGdldFZhcignZm9sZF8nICsgdGhpcy5zaWduLCAnJylcXG4gICAgICAgIGlmICh0aGlzLmZvbGQpIGVsLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPHNwYW4gc3R5bGU9XFxcImNvbG9yOiMwNDllZmZcXFwiPicgKyAoZm9sZGVkID8gJ+KWticgOiAn4pa8JyksXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChzaWduLCBmb2xkZWQpID0+IHtcXG4gICAgICAgICAgICAgICAgcHV0VmFyKCdmb2xkXycgKyBzaWduLCB7ICcnOiAnVCcsICdUJzogJycgfSBbZm9sZGVkXSlcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICB9LCB0aGlzLnNpZ24sIGZvbGRlZCksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbiAgICAgICAgfSlcXG4gICAgICAgIGxldCBhcnIgPSBmb2xkZWQgPyBbdGhpcy5hcnJbMF1dIDogdGhpcy5hcnJcXG4gICAgICAgIGFyci5mb3JFYWNoKCh2KSA9PiB7XFxuICAgICAgICAgICAgbGV0IHsgaWQsIGNsYXNzX25hbWUsIGNsYXNzX3VybCB9ID0gdixcXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmdldENsYXNzKGlkKSlcXG4gICAgICAgICAgICBjbGFzc19uYW1lLmZvckVhY2goKG5hbWUsIGkpID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IHVybCA9IGNsYXNzX3VybFtpXSxcXG4gICAgICAgICAgICAgICAgICAgIG5vdyA9IEpTT04uc3RyaW5naWZ5KHsgbmFtZTogbmFtZSwgdXJsOiB1cmwgfSlcXG4gICAgICAgICAgICAgICAgZWwucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogKHNlbGVjdGVkID09IG5vdyA/ICfigJzigJzigJ3igJ08c3BhbiBzdHlsZT1cXFwiY29sb3I6JyArIHRoaXMuY29sb3IgKyAnXFxcIj48Yj4nIDogJycpICsgbmFtZSxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoc2lnbiwgaWQsIG5vdykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dFZhcihzaWduICsgaWQsIG5vdylcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRWYXIoc2lnbiwgbm93KVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICAgICAgICAgIH0sIHRoaXMuc2lnbiwgaWQsIG5vdyksXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICBlbC5wdXNoKHsgY29sX3R5cGU6IHRoaXMuYm91bmRhcnkgfSlcXG4gICAgICAgIH0pXFxuICAgIH0sXFxuICAgIGluaXQoY2xhc3NPYmplY3QpIHtcXG4gICAgICAgIGlmICh0eXBlb2YgY2xhc3NPYmplY3QuY2xhc3NfbmFtZSA9PSAnc3RyaW5nJylcXG4gICAgICAgICAgICBjbGFzc09iamVjdC5jbGFzc19uYW1lID0gY2xhc3NPYmplY3QuY2xhc3NfbmFtZS5zcGxpdCgnJicpXFxuICAgICAgICBpZiAodHlwZW9mIGNsYXNzT2JqZWN0LmNsYXNzX3VybCA9PSAnc3RyaW5nJylcXG4gICAgICAgICAgICBjbGFzc09iamVjdC5jbGFzc191cmwgPSBjbGFzc09iamVjdC5jbGFzc191cmwuc3BsaXQoJyYnKS5tYXAoKHYpID0+IHYudHJpbSgpKVxcbiAgICAgICAgcmV0dXJuIGNsYXNzT2JqZWN0XFxuICAgIH0sXFxuICAgIHB1c2goY2xhc3NPYmplY3QpIHtcXG4gICAgICAgIHRoaXMuYXJyLnB1c2godGhpcy5pbml0KGNsYXNzT2JqZWN0KSlcXG4gICAgfSxcXG4gICAgZ2V0Q2xhc3MoaWQpIHtcXG4gICAgICAgIGxldCBkZWZhdWx0Q2xhc3MgPSB0aGlzLmFyci5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PSBpZClcXG4gICAgICAgIGlmIChkZWZhdWx0Q2xhc3MpIGRlZmF1bHRDbGFzcyA9IEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICBuYW1lOiBkZWZhdWx0Q2xhc3MuY2xhc3NfbmFtZVswXSxcXG4gICAgICAgICAgICB1cmw6IGRlZmF1bHRDbGFzcy5jbGFzc191cmxbMF1cXG4gICAgICAgIH0pXFxuICAgICAgICBlbHNlIHRocm93IG5ldyBFcnJvcignY2Fubm90IGZpbmQgaWQ6ICcgKyBpZCArICcgaW4gY2xhc3NUYWI6ICcgKyB0aGlzLnNpZ24pXFxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShnZXRWYXIodGhpcy5zaWduICsgaWQsIGRlZmF1bHRDbGFzcykpXFxuICAgIH0sXFxuICAgIGdldExhc3RDbGljaygpIHtcXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGdldFZhcih0aGlzLnNpZ24sICd7fScpKVxcbiAgICB9LFxcbiAgICBzZXRVcmwodXJsKSB7XFxuICAgICAgICByZXR1cm4gdXJsLnJlcGxhY2UoL1xcXFwkXFxcXHsoW159XSopXFxcXH0vZywgKF8sIGlkKSA9PiB0aGlzLmdldENsYXNzKGlkKS51cmwpXFxuICAgIH1cXG59XFxuJC5leHBvcnRzID0gQ2xhc3NUYWJcXG5cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIummlumhtVwiLFwicGF0aFwiOlwiaW5kZXhMb2FkXCIsXCJydWxlXCI6XCJqczpcXG5sZXQgbXlDb2xsZWN0aW9uX2VsID0gW10sXFxuICAgIHBhZ2VOdW0gPSBwYXJzZUludChNWV9VUkwuc3BsaXQoJyMnKVsxXSksXFxuICAgIFJVTEUgPSBNWV9QQVJBTVMuUlVMRSxcXG4gICAgZnlBbGwgPSBSVUxFLnVybC5pbmNsdWRlcygnZnlBbGwnKSxcXG4gICAgLy8g5Yqg6L29Q2xhc3NUYWLnu4Tku7ZcXG4gICAgQ2xhc3NUYWIgPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9DbGFzc1RhYj9ydWxlPScgKyBnZXRJdGVtKCdteUNvbGxlY3Rpb24nKSksXFxuICAgIHRhYkhlYWRlciA9IFtdXFxuXFxuaWYgKFJVTEUuY2xhc3NfbmFtZSkgdGFiSGVhZGVyLnB1c2goe1xcbiAgICBpZDogZnlBbGwgPyAnZnlBbGwnIDogJ2Z5Y2xhc3MnLFxcbiAgICBjbGFzc19uYW1lOiBSVUxFLmNsYXNzX25hbWUsXFxuICAgIGNsYXNzX3VybDogUlVMRS5jbGFzc191cmxcXG59KVxcbmlmIChSVUxFLmFyZWFfbmFtZSkgdGFiSGVhZGVyLnB1c2goe1xcbiAgICBpZDogZnlBbGwgPyAnZnlBbGwnIDogJ2Z5YXJlYScsXFxuICAgIGNsYXNzX25hbWU6IFJVTEUuYXJlYV9uYW1lLFxcbiAgICBjbGFzc191cmw6IFJVTEUuYXJlYV91cmxcXG59KVxcbmlmIChSVUxFLnllYXJfbmFtZSkgdGFiSGVhZGVyLnB1c2goe1xcbiAgICBpZDogZnlBbGwgPyAnZnlBbGwnIDogJ2Z5eWVhcicsXFxuICAgIGNsYXNzX25hbWU6IFJVTEUueWVhcl9uYW1lLFxcbiAgICBjbGFzc191cmw6IFJVTEUueWVhcl91cmxcXG59KVxcbmlmIChSVUxFLnNvcnRfbmFtZSkgdGFiSGVhZGVyLnB1c2goe1xcbiAgICBpZDogZnlBbGwgPyAnZnlBbGwnIDogJ2Z5c29ydCcsXFxuICAgIGNsYXNzX25hbWU6IFJVTEUuc29ydF9uYW1lLFxcbiAgICBjbGFzc191cmw6IFJVTEUuc29ydF91cmxcXG59KVxcbnRhYkhlYWRlciA9IG5ldyBDbGFzc1RhYih0YWJIZWFkZXIsIHsgbmFtZTogUlVMRS50aXRsZSB9KVxcbmlmIChwYWdlTnVtID09IDEpIHtcXG4gICAgYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAnY2xlYXJWYXIoXFxcIm15Q29sbGVjdGlvbi1zZWFyY2hNb2RlXFxcIiknKVxcbiAgICBwdXRWYXIoJ215Q29sbGVjdGlvbi1zZWFyY2hNb2RlJywgUlVMRS50aXRsZSlcXG4gICAgdGFiSGVhZGVyLmxvYWQobXlDb2xsZWN0aW9uX2VsKVxcbiAgICBpZiAoUlVMRS5zZWFyY2hfdXJsKSBteUNvbGxlY3Rpb25fZWwucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIuaQnOe0olxcXCIsXFxuICAgICAgICBkZXNjOiBcXFwi5pCc5L2g5oOz6KaB55qELi4uXFxcIixcXG4gICAgICAgIHVybDogJ1xcXCJoaWtlcjovL3BhZ2Uvc2luZ2xlU2VhcmNoP2tleXdvcmQ9XFxcIitpbnB1dCtcXFwiJnBhZ2U9ZnlwYWdlXFxcIicsXFxuICAgICAgICBleHRyYTogeyBydWxlOiBnZXRJdGVtKCdteUNvbGxlY3Rpb24nKSwgUlVMRTogUlVMRSB9LFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJpbnB1dFxcXCIsXFxuICAgIH0pXFxufVxcbi8vIOWkhOeQhk1ZX1VSTOWSjE1ZX1JVTEVcXG5NWV9SVUxFLnVhID0gUlVMRS51YVxcbk1ZX1JVTEUudGl0bGUgPSBSVUxFLnRpdGxlXFxuTVlfUlVMRS5jb2xfdHlwZSA9IFJVTEUuY29sX3R5cGVcXG5NWV9SVUxFLmRldGFpbF9jb2xfdHlwZSA9IFJVTEUuZGV0YWlsX2NvbF90eXBlXFxuTVlfUlVMRS5maW5kX3J1bGUgPSBSVUxFLmZpbmRfcnVsZVxcbk1ZX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSA9IFJVTEUuZGV0YWlsX2ZpbmRfcnVsZVxcbk1ZX1JVTEUucHJlUnVsZSA9IFJVTEUucHJlUnVsZVxcbk1ZX1JVTEUucGFnZUxpc3QgPSBKU09OLnBhcnNlKFJVTEUucGFnZXMgfHwgJ1tdJylcXG5NWV9SVUxFLnBhZ2VzID0gSlNPTi5zdHJpbmdpZnkoTVlfUlVMRS5wYWdlTGlzdClcXG5NWV9SVUxFLmxhc3RfY2hhcHRlcl9ydWxlID0gUlVMRS5sYXN0X2NoYXB0ZXJfcnVsZVxcbk1ZX1JVTEUucGFyYW1zID0ge31cXG5cXG5jb25zdCB7IHJ1bkNvZGUsIHVybFBhcnNlIH0gPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS91dGlsaXR5P3J1bGU9JyArIGdldEl0ZW0oJ215Q29sbGVjdGlvbicpKVxcbnZhciB7IE1ZX1VSTCwgTVlfVVJMX09wdGlvbnMgfSA9IHVybFBhcnNlKFJVTEUudXJsLCB7fSwgcGFnZU51bSwgKHVybCkgPT4ge1xcbiAgICB1cmxbMF0gPSBmeUFsbCA/IHVybFswXS5yZXBsYWNlKC9meUFsbC9nLCAnJCR7ZnlBbGx9JykgOiB1cmxbMF0ucmVwbGFjZSgvZnkoY2xhc3N8YXJlYXx5ZWFyfHNvcnQpL2csICckJHtmeSQxfScpXFxuICAgIHVybFswXSA9IHRhYkhlYWRlci5zZXRVcmwodXJsWzBdKVxcbn0pLFxcbiAgICBpbmRleEh0bWwgPSBmZXRjaChNWV9VUkwsIE1ZX1VSTF9PcHRpb25zKVxcbk1ZX1JVTEUudXJsID0gTVlfVVJMXFxuTVlfUlVMRS51cmxIZWFkZXJzID0gTVlfVVJMX09wdGlvbnMuaGVhZGVyc1xcbmxvZyhNWV9VUkwpXFxuLy8g5q2j5paH6Kej5p6QXFxuaWYgKHBhZ2VOdW0gPT0gMSkgZXZhbChNWV9SVUxFLnByZVJ1bGUpXFxuaWYgKE1ZX1JVTEUuZmluZF9ydWxlLnN0YXJ0c1dpdGgoJ2pzOicpKSB7XFxuICAgIGZ1bmN0aW9uIGdldFVybCgpIHtcXG4gICAgICAgIHJldHVybiBNWV9VUkxcXG4gICAgfVxcblxcbiAgICBmdW5jdGlvbiBnZXRSZXNDb2RlKCkge1xcbiAgICAgICAgcmV0dXJuIGluZGV4SHRtbFxcbiAgICB9XFxuXFxuICAgIGZ1bmN0aW9uIHNldFJlc3VsdChlbCwgcGFyYW0xLCBwYXJhbTIsIHBhcmFtMykge1xcbiAgICAgICAgcGFyYW0xID0gQ0FMTEJBQ0tfS0VZXFxuICAgICAgICBwYXJhbTIgPSBNWV9SVUxFXFxuICAgICAgICBwYXJhbTMgPSBNWV9UWVBFXFxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShlbC5kYXRhKSkgZWwgPSBlbC5kYXRhXFxuICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShteUNvbGxlY3Rpb25fZWwsIGVsLm1hcCgodikgPT4ge1xcbiAgICAgICAgICAgIGxldCBNWV9fUlVMRSA9IE9iamVjdC5hc3NpZ24oe30sIE1ZX1JVTEUpXFxuICAgICAgICAgICAgdi5jb2xfdHlwZSA9IHYuY29sX3R5cGUgfHwgTVlfUlVMRS5jb2xfdHlwZVxcblxcbiAgICAgICAgICAgIGlmICghdi51cmwpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHYudXJsLmluY2x1ZGVzKCdAcnVsZT0nKSkge1xcbiAgICAgICAgICAgICAgICBsZXQgW18sIHVybCwgcnVsZV0gPSB2LnVybC5tYXRjaCgvXihbXFxcXHNcXFxcU10qPylAcnVsZT0oW1xcXFxzXFxcXFNdKikkLylcXG4gICAgICAgICAgICAgICAgdi51cmwgPSB1cmxcXG4gICAgICAgICAgICAgICAgTVlfX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSA9IHJ1bGVcXG4gICAgICAgICAgICAgICAgTVlfX1JVTEUuZGV0YWlsX2NvbF90eXBlID0gTVlfUlVMRS5jb2xfdHlwZVxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodi51cmwuc3RhcnRzV2l0aCgnaGlrZXI6Ly9wYWdlLycpKSB7XFxuICAgICAgICAgICAgICAgIGlmICh2LnVybC5pbmNsdWRlcygncnVsZT0nKSB8fCAodi5leHRyYSB8fCB7fSkucnVsZSlcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2XFxuICAgICAgICAgICAgICAgIGxldCBbXywgcGF0aCwgcGFyYW1zXSA9IHYudXJsLnNwbGl0KCcjJylbMF0ubWF0Y2goL15oaWtlcjpcXFxcL1xcXFwvcGFnZVxcXFwvKC4rPykoPzpcXFxcPyguKikpPyQvKSxcXG4gICAgICAgICAgICAgICAgICAgIHN1YlBhZ2UgPSBNWV9SVUxFLnBhZ2VMaXN0LmZpbmQoKHYpID0+IHYucGF0aCA9PSBwYXRoKSxcXG4gICAgICAgICAgICAgICAgICAgIHN1YlVybCA9IChwYXJhbXMgfHwgJycpLnNwbGl0KCcmJykuZmluZCgodikgPT4gdi5zdGFydHNXaXRoKCd1cmw9JykpXFxuICAgICAgICAgICAgICAgIHYudXJsID0gc3ViVXJsID8gc3ViVXJsLnNsaWNlKDQpLnJlcGxhY2UoL++8n++8ny9nLCAnPycpLnJlcGxhY2UoL++8hu+8hi9nLCAnJicpIDogKHYuZXh0cmEgfHwge30pLnVybCB8fCAnaGlrZXI6Ly9lbXB0eT8nICsgKHBhcmFtcyB8fCAnJylcXG4gICAgICAgICAgICAgICAgTVlfX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSA9IHN1YlBhZ2UucnVsZVxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5kZXRhaWxfY29sX3R5cGUgPSBzdWJQYWdlLmNvbF90eXBlXFxuICAgICAgICAgICAgICAgIE1ZX19SVUxFLnBhcmFtcyA9IHYuZXh0cmEgfHwge31cXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHYudXJsLmluY2x1ZGVzKCdAbGF6eVJ1bGU9JykpIHtcXG4gICAgICAgICAgICAgICAgdi51cmwgPSB2LnVybC5yZXBsYWNlKCcuanM6JywgJy5qczpcXFxcbmlmKE1ZX1JVTEUpT2JqZWN0LmFzc2lnbihNWV9SVUxFLCcgKyAkLnN0cmluZ2lmeSh7IHBhZ2VzOiBNWV9SVUxFLnBhZ2VzLCBwYWdlTGlzdDogTVlfUlVMRS5wYWdlTGlzdCwgZmluZF9ydWxlOiAnJywgcGFyYW1zOiAnJyB9KSArICcpO01ZX1VSTD1cXFwiJyArIE1ZX1VSTCArICdcXFwiOycpXFxuICAgICAgICAgICAgICAgIHJldHVybiB2XFxuICAgICAgICAgICAgfSBlbHNlIGlmICghTVlfUlVMRS5kZXRhaWxfZmluZF9ydWxlIHx8IHYudXJsLnN0YXJ0c1dpdGgoJ2hpa2VyOi8vJykpIHsgcmV0dXJuIHYgfVxcbiAgICAgICAgICAgIHYuZXh0cmEgPSB7IHVybDogdi51cmwsIFJVTEU6IE1ZX19SVUxFLCBwYWdlVGl0bGU6IHYudGl0bGUgfVxcbiAgICAgICAgICAgIHYudXJsID0gJ2hpa2VyOi8vcGFnZS9kZXRhaWxMb2FkP3J1bGU9JyArIGdldEl0ZW0oJ215Q29sbGVjdGlvbicpXFxuICAgICAgICAgICAgaWYgKHYuZXh0cmEuUlVMRS51cmwuaW5jbHVkZXMoJyNpbW1lcnNpdmVUaGVtZSMnKSkgdi51cmwgKz0gJyYjaW1tZXJzaXZlVGhlbWUjJ1xcbiAgICAgICAgICAgIHJldHVybiB2XFxuICAgICAgICB9KSlcXG4gICAgICAgIG1ldGhvZF9zZXRSZXN1bHQuaW52b2tlKGphdmFDb250ZXh0LCBteUNvbGxlY3Rpb25fZWwsIHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMpXFxuICAgIH1cXG4gICAgc2V0SG9tZVJlc3VsdCA9IHNldFJlc3VsdFxcbiAgICBzZXRTZWFyY2hSZXN1bHQgPSBzZXRSZXN1bHRcXG5cXG4gICAgZXZhbChNWV9SVUxFLmZpbmRfcnVsZS5zbGljZSgzKSlcXG59IGVsc2Uge1xcbiAgICBsZXQgZmluZFJ1bGUgPSBNWV9SVUxFLmZpbmRfcnVsZS5zcGxpdCgnOycpXFxuICAgIHBhcnNlRG9tRm9yQXJyYXkoaW5kZXhIdG1sLCBmaW5kUnVsZS5zaGlmdCgpKS5mb3JFYWNoKChkYXRhKSA9PiB7XFxuICAgICAgICBsZXQgW3RpdGxlLCBpbWcsIGRlc2MsIHVybF0gPSBmaW5kUnVsZS5tYXAoKHYsIGkpID0+IHtcXG4gICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgIGlmICh2ID09ICcqJykgcmV0dXJuICcnXFxuICAgICAgICAgICAgICAgICAgICBlbHNlIHYgPSAoaSA9PSAxIHx8IGkgPT0gMykgP1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRG9tKGRhdGEsIHYpIDpcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZURvbUZvckh0bWwoZGF0YSwgdilcXG4gICAgICAgICAgICAgICAgICAgIGlmIChpICE9IDMpIHYgPSBydW5Db2RlKHYpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdlxcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7IHJldHVybiAnJyB9XFxuICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgcmVzID0ge1xcbiAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICAgICAgICAgIHVybDogdXJsLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBkZXNjLFxcbiAgICAgICAgICAgICAgICBpbWc6IGltZyxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IE1ZX1JVTEUuY29sX3R5cGVcXG4gICAgICAgICAgICB9XFxuICAgICAgICBpZiAocmVzLnVybCkge1xcbiAgICAgICAgICAgIGlmIChyZXMudXJsLmluY2x1ZGVzKCdAbGF6eVJ1bGU9JykpIHtcXG4gICAgICAgICAgICAgICAgcmVzLnVybCA9IHJlcy51cmwucmVwbGFjZSgnLmpzOicsICcuanM6XFxcXG5pZihNWV9SVUxFKU9iamVjdC5hc3NpZ24oTVlfUlVMRSwnICsgJC5zdHJpbmdpZnkoeyBwYWdlczogTVlfUlVMRS5wYWdlcywgcGFnZUxpc3Q6IE1ZX1JVTEUucGFnZUxpc3QsIGZpbmRfcnVsZTogJycsIHBhcmFtczogJycgfSkgKyAnKTtNWV9VUkw9XFxcIicgKyBNWV9VUkwgKyAnXFxcIjsnKVxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoTVlfUlVMRS5kZXRhaWxfZmluZF9ydWxlKSB7XFxuICAgICAgICAgICAgICAgIHJlcy5leHRyYSA9IHsgdXJsOiB1cmwsIFJVTEU6IE1ZX1JVTEUsIHBhZ2VUaXRsZTogdGl0bGUgfVxcbiAgICAgICAgICAgICAgICByZXMudXJsID0gJ2hpa2VyOi8vcGFnZS9kZXRhaWxMb2FkP3J1bGU9JyArIGdldEl0ZW0oJ215Q29sbGVjdGlvbicpXFxuICAgICAgICAgICAgICAgIGlmIChyZXMuZXh0cmEuUlVMRS51cmwuaW5jbHVkZXMoJyNpbW1lcnNpdmVUaGVtZSMnKSkgcmVzLnVybCArPSAnJiNpbW1lcnNpdmVUaGVtZSMnXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgbXlDb2xsZWN0aW9uX2VsLnB1c2gocmVzKVxcbiAgICB9KVxcbiAgICBzZXRSZXN1bHQobXlDb2xsZWN0aW9uX2VsKVxcbn1cXG5cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuivpuaDhVwiLFwicGF0aFwiOlwiZGV0YWlsTG9hZFwiLFwicnVsZVwiOlwianM6XFxubGV0IG15Q29sbGVjdGlvbl9lbCA9IFtdXFxuXFxuLy8g5aSE55CGTVlfVVJM5ZKMTVlfUlVMRVxcbmxldCBSVUxFID0gTVlfUEFSQU1TLlJVTEVcXG5NWV9SVUxFLnVhID0gUlVMRS51YVxcbk1ZX1JVTEUudGl0bGUgPSBSVUxFLnRpdGxlXFxuTVlfUlVMRS5jb2xfdHlwZSA9IFJVTEUuZGV0YWlsX2NvbF90eXBlXFxuTVlfUlVMRS5maW5kX3J1bGUgPSBSVUxFLmRldGFpbF9maW5kX3J1bGVcXG5NWV9SVUxFLnByZVJ1bGUgPSBSVUxFLnByZVJ1bGVcXG5NWV9SVUxFLnBhZ2VMaXN0ID0gUlVMRS5wYWdlTGlzdFxcbk1ZX1JVTEUucGFnZXMgPSBSVUxFLnBhZ2VzXFxuTVlfUlVMRS5sYXN0X2NoYXB0ZXJfcnVsZSA9IFJVTEUubGFzdF9jaGFwdGVyX3J1bGVcXG5NWV9SVUxFLnBhcmFtcyA9IFJVTEUucGFyYW1zXFxuXFxuY29uc3QgeyBydW5Db2RlLCB1cmxQYXJzZSB9ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvdXRpbGl0eT9ydWxlPScgKyBnZXRJdGVtKCdteUNvbGxlY3Rpb24nKSlcXG52YXIgeyBNWV9VUkwsIE1ZX1VSTF9PcHRpb25zIH0gPSB1cmxQYXJzZShNWV9QQVJBTVMudXJsLCBSVUxFLnVybEhlYWRlcnMsIDEpLFxcbiAgICBpbmRleEh0bWwgPSBmZXRjaChNWV9VUkwsIE1ZX1VSTF9PcHRpb25zKVxcbk1ZX1JVTEUudXJsID0gTVlfVVJMXFxuTVlfUlVMRS51cmxIZWFkZXJzID0gTVlfVVJMX09wdGlvbnMuaGVhZGVyc1xcbi8vIOino+aekOato+aWh1xcbmlmIChNWV9QQVJBTVMucGFnZVRpdGxlKSBzZXRQYWdlVGl0bGUoTVlfUEFSQU1TLnBhZ2VUaXRsZSlcXG5ldmFsKE1ZX1JVTEUucHJlUnVsZSlcXG5zZXRMYXN0Q2hhcHRlclJ1bGUoTVlfUlVMRS5sYXN0X2NoYXB0ZXJfcnVsZSlcXG5NWV9QQVJBTVMgPSBNWV9SVUxFLnBhcmFtc1xcbmlmIChNWV9SVUxFLmZpbmRfcnVsZS5zdGFydHNXaXRoKCdqczonKSkge1xcbiAgICBmdW5jdGlvbiBnZXRVcmwoKSB7XFxuICAgICAgICByZXR1cm4gTVlfVVJMXFxuICAgIH1cXG5cXG4gICAgZnVuY3Rpb24gZ2V0UmVzQ29kZSgpIHtcXG4gICAgICAgIHJldHVybiBpbmRleEh0bWxcXG4gICAgfVxcblxcbiAgICBmdW5jdGlvbiBzZXRSZXN1bHQoZWwsIHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMpIHtcXG4gICAgICAgIHBhcmFtMSA9IENBTExCQUNLX0tFWVxcbiAgICAgICAgcGFyYW0yID0gTVlfUlVMRVxcbiAgICAgICAgcGFyYW0zID0gTVlfVFlQRVxcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZWwuZGF0YSkpIGVsID0gZWwuZGF0YVxcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkobXlDb2xsZWN0aW9uX2VsLCBlbC5tYXAoKHYpID0+IHtcXG4gICAgICAgICAgICBsZXQgTVlfX1JVTEUgPSBPYmplY3QuYXNzaWduKHt9LCBNWV9SVUxFKVxcbiAgICAgICAgICAgIHYuY29sX3R5cGUgPSB2LmNvbF90eXBlIHx8IE1ZX1JVTEUuY29sX3R5cGVcXG5cXG4gICAgICAgICAgICBpZiAoIXYudXJsKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiB2XFxuICAgICAgICAgICAgfSBlbHNlIGlmICh2LnVybC5pbmNsdWRlcygnQHJ1bGU9JykpIHtcXG4gICAgICAgICAgICAgICAgbGV0IFtfLCB1cmwsIHJ1bGVdID0gdi51cmwubWF0Y2goL14oW1xcXFxzXFxcXFNdKj8pQHJ1bGU9KFtcXFxcc1xcXFxTXSopJC8pXFxuICAgICAgICAgICAgICAgIHYudXJsID0gdXJsXFxuICAgICAgICAgICAgICAgIE1ZX19SVUxFLmRldGFpbF9maW5kX3J1bGUgPSBydWxlXFxuICAgICAgICAgICAgICAgIE1ZX19SVUxFLmRldGFpbF9jb2xfdHlwZSA9IE1ZX1JVTEUuY29sX3R5cGVcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHYudXJsLnN0YXJ0c1dpdGgoJ2hpa2VyOi8vcGFnZS8nKSkge1xcbiAgICAgICAgICAgICAgICBpZiAodi51cmwuaW5jbHVkZXMoJ3J1bGU9JykgfHwgKHYuZXh0cmEgfHwge30pLnJ1bGUpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdlxcbiAgICAgICAgICAgICAgICBsZXQgW18sIHBhdGgsIHBhcmFtc10gPSB2LnVybC5zcGxpdCgnIycpWzBdLm1hdGNoKC9eaGlrZXI6XFxcXC9cXFxcL3BhZ2VcXFxcLyguKz8pKD86XFxcXD8oLiopKT8kLyksXFxuICAgICAgICAgICAgICAgICAgICBzdWJQYWdlID0gTVlfUlVMRS5wYWdlTGlzdC5maW5kKCh2KSA9PiB2LnBhdGggPT0gcGF0aCksXFxuICAgICAgICAgICAgICAgICAgICBzdWJVcmwgPSAocGFyYW1zIHx8ICcnKS5zcGxpdCgnJicpLmZpbmQoKHYpID0+IHYuc3RhcnRzV2l0aCgndXJsPScpKVxcbiAgICAgICAgICAgICAgICB2LnVybCA9IHN1YlVybCA/IHN1YlVybC5zbGljZSg0KS5yZXBsYWNlKC/vvJ/vvJ8vZywgJz8nKS5yZXBsYWNlKC/vvIbvvIYvZywgJyYnKSA6ICh2LmV4dHJhIHx8IHt9KS51cmwgfHwgJ2hpa2VyOi8vZW1wdHk/JyArIChwYXJhbXMgfHwgJycpXFxuICAgICAgICAgICAgICAgIE1ZX19SVUxFLmRldGFpbF9maW5kX3J1bGUgPSBzdWJQYWdlLnJ1bGVcXG4gICAgICAgICAgICAgICAgTVlfX1JVTEUuZGV0YWlsX2NvbF90eXBlID0gc3ViUGFnZS5jb2xfdHlwZVxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5wYXJhbXMgPSB2LmV4dHJhIHx8IHt9XFxuICAgICAgICAgICAgfSBlbHNlIGlmICh2LnVybC5pbmNsdWRlcygnQGxhenlSdWxlPScpKSB7XFxuICAgICAgICAgICAgICAgIHYudXJsID0gdi51cmwucmVwbGFjZSgnLmpzOicsICcuanM6XFxcXG5pZihNWV9SVUxFKU9iamVjdC5hc3NpZ24oTVlfUlVMRSwnICsgJC5zdHJpbmdpZnkoeyBwYWdlczogTVlfUlVMRS5wYWdlcywgcGFnZUxpc3Q6IE1ZX1JVTEUucGFnZUxpc3QsIGZpbmRfcnVsZTogJycsIHBhcmFtczogJycgfSkgKyAnKTtNWV9VUkw9XFxcIicgKyBNWV9VUkwgKyAnXFxcIjsnKVxcbiAgICAgICAgICAgICAgICByZXR1cm4gdlxcbiAgICAgICAgICAgIH0gZWxzZSB7IHJldHVybiB2IH1cXG4gICAgICAgICAgICB2LmV4dHJhID0geyB1cmw6IHYudXJsLCBSVUxFOiBNWV9fUlVMRSB9XFxuICAgICAgICAgICAgdi51cmwgPSAnaGlrZXI6Ly9wYWdlL2RldGFpbExvYWQ/cnVsZT0nICsgZ2V0SXRlbSgnbXlDb2xsZWN0aW9uJylcXG4gICAgICAgICAgICBpZiAodi5leHRyYS5SVUxFLnVybC5pbmNsdWRlcygnI2ltbWVyc2l2ZVRoZW1lIycpKSB2LnVybCArPSAnJiNpbW1lcnNpdmVUaGVtZSMnXFxuICAgICAgICAgICAgcmV0dXJuIHZcXG4gICAgICAgIH0pKVxcbiAgICAgICAgbWV0aG9kX3NldFJlc3VsdC5pbnZva2UoamF2YUNvbnRleHQsIG15Q29sbGVjdGlvbl9lbCwgcGFyYW0xLCBwYXJhbTIsIHBhcmFtMylcXG4gICAgfVxcbiAgICBzZXRIb21lUmVzdWx0ID0gc2V0UmVzdWx0XFxuICAgIHNldFNlYXJjaFJlc3VsdCA9IHNldFJlc3VsdFxcblxcbiAgICBldmFsKE1ZX1JVTEUuZmluZF9ydWxlLnNsaWNlKDMpKVxcbn0gZWxzZSB7XFxuICAgIGxldCBbXywgZmluZFJ1bGUsIGRldGFpbEZpbmRSdWxlXSA9IE1ZX1JVTEUuZmluZF9ydWxlLm1hdGNoKC9eKC4qPykoPzo9PT4oLiopKT8kLylcXG4gICAgZmluZFJ1bGUgPSBmaW5kUnVsZS5zcGxpdCgnOycpXFxuICAgIHBhcnNlRG9tRm9yQXJyYXkoaW5kZXhIdG1sLCBmaW5kUnVsZS5zaGlmdCgpKS5mb3JFYWNoKChkYXRhKSA9PiB7XFxuICAgICAgICBsZXQgW3RpdGxlLCBpbWcsIGRlc2MsIHVybF0gPSBmaW5kUnVsZS5tYXAoKHYsIGkpID0+IHtcXG4gICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgIGlmICh2ID09ICcqJykgcmV0dXJuICcnXFxuICAgICAgICAgICAgICAgICAgICBlbHNlIHYgPSAoaSA9PSAxIHx8IGkgPT0gMykgP1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRG9tKGRhdGEsIHYpIDpcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZURvbUZvckh0bWwoZGF0YSwgdilcXG4gICAgICAgICAgICAgICAgICAgIGlmIChpICE9IDMpIHYgPSBydW5Db2RlKHYpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdlxcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7IHJldHVybiAnJyB9XFxuICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgcmVzID0ge1xcbiAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICAgICAgICAgIHVybDogdXJsLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBkZXNjLFxcbiAgICAgICAgICAgICAgICBpbWc6IGltZyxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IE1ZX1JVTEUuY29sX3R5cGVcXG4gICAgICAgICAgICB9XFxuICAgICAgICBpZiAocmVzLnVybCkge1xcbiAgICAgICAgICAgIGlmIChyZXMudXJsLmluY2x1ZGVzKCdAbGF6eVJ1bGU9JykpIHtcXG4gICAgICAgICAgICAgICAgcmVzLnVybCA9IHJlcy51cmwucmVwbGFjZSgnLmpzOicsICcuanM6XFxcXG5pZihNWV9SVUxFKU9iamVjdC5hc3NpZ24oTVlfUlVMRSwnICsgJC5zdHJpbmdpZnkoeyBwYWdlczogTVlfUlVMRS5wYWdlcywgcGFnZUxpc3Q6IE1ZX1JVTEUucGFnZUxpc3QsIGZpbmRfcnVsZTogJycsIHBhcmFtczogJycgfSkgKyAnKTtNWV9VUkw9XFxcIicgKyBNWV9VUkwgKyAnXFxcIjsnKVxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGV0YWlsRmluZFJ1bGUpIHtcXG4gICAgICAgICAgICAgICAgcmVzLmV4dHJhID0geyB1cmw6IHVybCwgUlVMRTogT2JqZWN0LmFzc2lnbih7fSwgTVlfUlVMRSwgeyBkZXRhaWxfZmluZF9ydWxlOiBkZXRhaWxGaW5kUnVsZSB9KSB9XFxuICAgICAgICAgICAgICAgIHJlcy51cmwgPSAnaGlrZXI6Ly9wYWdlL2RldGFpbExvYWQ/cnVsZT0nICsgZ2V0SXRlbSgnbXlDb2xsZWN0aW9uJylcXG4gICAgICAgICAgICAgICAgaWYgKHJlcy5leHRyYS5SVUxFLnVybC5pbmNsdWRlcygnI2ltbWVyc2l2ZVRoZW1lIycpKSByZXMudXJsICs9ICcmI2ltbWVyc2l2ZVRoZW1lIydcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICBteUNvbGxlY3Rpb25fZWwucHVzaChyZXMpXFxuICAgIH0pXFxuICAgIHNldFJlc3VsdChteUNvbGxlY3Rpb25fZWwpXFxufVxcblwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5bel5YW36ZuGXCIsXCJwYXRoXCI6XCJ1dGlsaXR5XCIsXCJydWxlXCI6XCIkLmV4cG9ydHMgPSB7XFxuICAgIGRhdGFMb2FkOiBmdW5jdGlvbihzaG93QWxsKSB7XFxuICAgICAgICAvL+ajgOafpemXtOmalO+8jOm7mOiupOS4gOWkqVxcbiAgICAgICAgbGV0IG1pbiA9IDYwICogMjQgKiAxLFxcbiAgICAgICAgICAgIGRhdGEgPSBbXSxcXG4gICAgICAgICAgICB0aW1lID0gcGFyc2VJbnQocmVhZEZpbGUoJ3VwZGF0ZXRpbWUnKSkgfHwgMCxcXG4gICAgICAgICAgICBub3cgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKVxcbiAgICAgICAgaWYgKG5vdyAtIHRpbWUgPiAxMDAwICogNjAgKiBtaW4pIHtcXG4gICAgICAgICAgICBsb2coJ+abtOaWsOS6huaVsOaNricpXFxuICAgICAgICAgICAgLy8g6I635Y+W6L+c56iL5pWw5o2uXFxuICAgICAgICAgICAgbGV0IHVybCA9IGdldEl0ZW0oJ3JlbW90ZVVybCcpXFxuICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgZGF0YSA9IGZldGNoKHVybClcXG4gICAgICAgICAgICAgICAgaWYgKHVybC5zdGFydHNXaXRoKCdoaWtlcjovL3BhZ2UvJykpXFxuICAgICAgICAgICAgICAgICAgICBkYXRhID0gSlNPTi5wYXJzZShkYXRhKS5ydWxlXFxuICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpXFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICBkYXRhID0gW11cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgZGF0YSA9IGRhdGEuZmlsdGVyKCh2KSA9PiB7IHJldHVybiB2LnRpdGxlICE9IGdldEl0ZW0oJ215Q29sbGVjdGlvbicpICYmICF2LmF1dGhvci5pbmNsdWRlcygn6L275ZCI6ZuG55Sf5oiQ5ZmoJykgfSlcXG4gICAgICAgICAgICBzYXZlRmlsZSgnZGF0YUNhY2hlJywgSlNPTi5zdHJpbmdpZnkoZGF0YSkpXFxuICAgICAgICAgICAgc2F2ZUZpbGUoJ3VwZGF0ZXRpbWUnLCAnJyArIG5vdylcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgbG9nKCfmsqHmnInmm7TmlrDmlbDmja4nKVxcbiAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKHJlYWRGaWxlKCdkYXRhQ2FjaGUnKSlcXG4gICAgICAgIH1cXG4gICAgICAgIC8vIOWGmeWFpeiHquWumuS5ieaVsOaNrlxcbiAgICAgICAgbGV0IGN1c3RvbURhdGEgPSBKU09OLnBhcnNlKHJlYWRGaWxlKCdjdXN0b21EYXRhJykgfHwgJ1tdJyksXFxuICAgICAgICAgICAgcmV3cml0ZURhdGEgPSBbXVxcbiAgICAgICAgY3VzdG9tRGF0YSA9IGN1c3RvbURhdGEucmVkdWNlKChzZWxmLCB2KSA9PiB7XFxuICAgICAgICAgICAgbGV0IGluZGV4ID0gZGF0YS5maW5kSW5kZXgoKHZ2KSA9PiB2LnRpdGxlID09IHZ2LnRpdGxlKVxcbiAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XFxuICAgICAgICAgICAgICAgIHNlbGYucHVzaCh2KVxcbiAgICAgICAgICAgICAgICBsZXQgcnVsZSA9IGRhdGEuc3BsaWNlKGluZGV4LCAxKVswXVxcbiAgICAgICAgICAgICAgICBpZihzaG93QWxsIHx8IHYudmlzaWJsZSlcXG4gICAgICAgICAgICAgICAgICAgIHJld3JpdGVEYXRhLnB1c2goT2JqZWN0LmFzc2lnbihydWxlLCB2KSlcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIHNlbGZcXG4gICAgICAgIH0sIFtdKVxcbiAgICAgICAgZGF0YS5mb3JFYWNoKCh2KSA9PiBjdXN0b21EYXRhLnB1c2goeyB0aXRsZTogdi50aXRsZSwgdmlzaWJsZTogdHJ1ZSB9KSlcXG4gICAgICAgIHNhdmVGaWxlKCdjdXN0b21EYXRhJywgSlNPTi5zdHJpbmdpZnkoY3VzdG9tRGF0YSkpXFxuICAgICAgICByZXR1cm4gcmV3cml0ZURhdGEuY29uY2F0KGRhdGEpXFxuICAgIH0sXFxuICAgIHJ1bkNvZGU6IGZ1bmN0aW9uKHJ1bGUpIHtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgbGV0IFtpbnB1dCwgY29kZV0gPSBydWxlLnNwbGl0KCcuanM6JylcXG4gICAgICAgICAgICByZXR1cm4gY29kZSA/IGV2YWwoY29kZSkgOiBydWxlXFxuICAgICAgICB9IGNhdGNoIChlKSB7IHJldHVybiBydWxlIH1cXG4gICAgfSxcXG4gICAgdXJsUGFyc2U6IGZ1bmN0aW9uKHVybCwgaGVhZGVycywgcGFnZU51bSwgZnVuYykge1xcbiAgICAgICAgdXJsID0gdXJsLnNwbGl0KCc7JykubWFwKCh2KSA9PiB2LnJlcGxhY2UoL++8m++8my9nLCAnOycpKVxcbiAgICAgICAgaWYgKGZ1bmMpIGZ1bmModXJsKVxcbiAgICAgICAgdXJsWzBdID0gdXJsWzBdLnJlcGxhY2UoL2Z5cGFnZSg/OkAoLT9cXFxcZCspQCk/KD86XFxcXCooXFxcXGQrKUApPy8sIChfLCBzdGFydCwgc3BhY2UpID0+IHBhcnNlSW50KHN0YXJ0IHx8IDApICsgMSArIChwYWdlTnVtIC0gMSkgKiBwYXJzZUludChzcGFjZSB8fCAxKSlcXG4gICAgICAgIHVybFswXSA9IC9eKC4qPykoPzpcXFxcW2ZpcnN0UGFnZT0oLio/KVxcXFxdKT8kLy5leGVjKHVybFswXSlcXG4gICAgICAgIHVybFswXSA9IHJ1bkNvZGUodXJsWzBdWzJdICYmIHBhZ2VOdW0gPT0gMSA/IHVybFswXVsyXSA6IHVybFswXVsxXSlcXG4gICAgICAgIGxldCBvcHRpb25zID0geyBoZWFkZXJzOiBoZWFkZXJzLCBtZXRob2Q6IHVybFsxXSB9XFxuICAgICAgICAvLyBwb3N05pa55rOV5pe26L2s5o2i5Y+C5pWwXFxuICAgICAgICBpZiAoL15wb3N0JC9pLnRlc3Qob3B0aW9uc1snbWV0aG9kJ10pKSB7XFxuICAgICAgICAgICAgbGV0IFtvcmlVcmwsIGJvZHldID0gdXJsWzBdLnNwbGl0KCc/JylcXG4gICAgICAgICAgICB1cmxbMF0gPSBvcmlVcmwucmVwbGFjZSgv77yf77yfL2csICc/JylcXG4gICAgICAgICAgICBpZiAoYm9keS5zdGFydHNXaXRoKCdKc29uQm9keT0nKSkgYm9keSA9IGJvZHkuc2xpY2UoOSlcXG4gICAgICAgICAgICBvcHRpb25zWydib2R5J10gPSBib2R5XFxuICAgICAgICB9XFxuICAgICAgICBpZiAodXJsWzJdKSBvcHRpb25zLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ3RleHQvcGxhaW47Y2hhcnN0PScgKyB1cmxbMl1cXG4gICAgICAgIGlmICh1cmxbM10pIHVybFszXS5tYXRjaCgveyguKil9LylbMV0uc3BsaXQoJyYmJykuZm9yRWFjaCgodikgPT4ge1xcbiAgICAgICAgICAgIGxldCBba2V5LCB2YWx1ZV0gPSB2LnNwbGl0KCdAJylcXG4gICAgICAgICAgICBvcHRpb25zLmhlYWRlcnNba2V5XSA9IHJ1bkNvZGUodmFsdWUpXFxuICAgICAgICB9KVxcbiAgICAgICAgLy8g5re75Yqg5YWo5bGAVUFcXG4gICAgICAgIGlmICghb3B0aW9ucy5oZWFkZXJzWydVc2VyLUFnZW50J10pIHtcXG4gICAgICAgICAgICBpZiAoTVlfUlVMRS51YSA9PSAncGMnKVxcbiAgICAgICAgICAgICAgICBvcHRpb25zLmhlYWRlcnNbJ1VzZXItQWdlbnQnXSA9IFBDX1VBXFxuICAgICAgICAgICAgZWxzZSBpZiAoTVlfUlVMRS51YSA9PSAnbW9iaWxlJylcXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5oZWFkZXJzWydVc2VyLUFnZW50J10gPSBNT0JJTEVfVUFcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiB7IE1ZX1VSTDogdXJsWzBdLCBNWV9VUkxfT3B0aW9uczogb3B0aW9ucyB9XFxuICAgIH1cXG59XFxuXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8xX3ZlcnRpY2FsX3BpY1wiLFwibmFtZVwiOlwi5Y2V5pCcXCIsXCJwYXRoXCI6XCJzaW5nbGVTZWFyY2hcIixcInJ1bGVcIjpcImpzOlxcbmxldCBteUNvbGxlY3Rpb25fZWwgPSBbXSxcXG4gICAgUlVMRSA9IE1ZX1BBUkFNUy5SVUxFLFxcbiAgICBrZXl3b3JkID0gZ2V0UGFyYW0oJ2tleXdvcmQnKSxcXG4gICAgcGFnZU51bSA9IHBhcnNlSW50KGdldFBhcmFtKCdwYWdlJykpXFxuXFxuLy8g5aSE55CGTVlfVVJM5ZKMTVlfUlVMRVxcbk1ZX1JVTEUudWEgPSBSVUxFLnVhXFxuTVlfUlVMRS50aXRsZSA9IFJVTEUudGl0bGVcXG5NWV9SVUxFLmNvbF90eXBlID0gUlVMRS5jb2xfdHlwZVxcbk1ZX1JVTEUuZGV0YWlsX2NvbF90eXBlID0gWycnLCAnKiddLmluY2x1ZGVzKFJVTEUuc2RldGFpbF9maW5kX3J1bGUpID8gUlVMRS5kZXRhaWxfY29sX3R5cGUgOiBSVUxFLnNkZXRhaWxfY29sX3R5cGVcXG5NWV9SVUxFLmZpbmRfcnVsZSA9IFJVTEUuc2VhcmNoRmluZFxcbk1ZX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSA9IFsnJywgJyonXS5pbmNsdWRlcyhSVUxFLnNkZXRhaWxfZmluZF9ydWxlKSA/IFJVTEUuZGV0YWlsX2ZpbmRfcnVsZSA6IFJVTEUuc2RldGFpbF9maW5kX3J1bGVcXG5NWV9SVUxFLnByZVJ1bGUgPSBSVUxFLnByZVJ1bGVcXG5NWV9SVUxFLnBhZ2VMaXN0ID0gSlNPTi5wYXJzZShSVUxFLnBhZ2VzIHx8ICdbXScpXFxuTVlfUlVMRS5wYWdlcyA9IEpTT04uc3RyaW5naWZ5KE1ZX1JVTEUucGFnZUxpc3QpXFxuTVlfUlVMRS5sYXN0X2NoYXB0ZXJfcnVsZSA9IFJVTEUubGFzdF9jaGFwdGVyX3J1bGVcXG5NWV9SVUxFLnBhcmFtcyA9IHt9XFxuXFxuY29uc3QgeyBydW5Db2RlLCB1cmxQYXJzZSB9ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvdXRpbGl0eT9ydWxlPScgKyBnZXRJdGVtKCdteUNvbGxlY3Rpb24nKSlcXG52YXIgeyBNWV9VUkwsIE1ZX1VSTF9PcHRpb25zIH0gPSB1cmxQYXJzZShSVUxFLnNlYXJjaF91cmwsIHt9LCBwYWdlTnVtLCAodXJsKSA9PiB7XFxuICAgIHVybFswXSA9IHVybFswXS5yZXBsYWNlKHVybFswXS5pbmNsdWRlcygnJSUnKSA/IC8lJS9nIDogL1xcXFwqXFxcXCovZywgZW5jb2RlU3RyKGtleXdvcmQsIHVybFsyXSkpXFxufSksXFxuICAgIGluZGV4SHRtbCA9IGZldGNoKE1ZX1VSTCwgTVlfVVJMX09wdGlvbnMpXFxuTVlfUlVMRS51cmwgPSBNWV9VUkxcXG5NWV9SVUxFLnVybEhlYWRlcnMgPSBNWV9VUkxfT3B0aW9ucy5oZWFkZXJzXFxuLy8g5q2j5paH6Kej5p6QXFxuaWYgKHBhZ2VOdW0gPT0gMSkgc2V0UGFnZVRpdGxlKCfigJwnICsga2V5d29yZCArICfigJ3nmoTmkJzntKLnu5PmnpwnKVxcbmlmIChNWV9SVUxFLmZpbmRfcnVsZS5zdGFydHNXaXRoKCdqczonKSkge1xcbiAgICBmdW5jdGlvbiBnZXRVcmwoKSB7XFxuICAgICAgICByZXR1cm4gTVlfVVJMXFxuICAgIH1cXG5cXG4gICAgZnVuY3Rpb24gZ2V0UmVzQ29kZSgpIHtcXG4gICAgICAgIHJldHVybiBpbmRleEh0bWxcXG4gICAgfVxcblxcbiAgICBmdW5jdGlvbiBzZXRSZXN1bHQoZWwsIHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMpIHtcXG4gICAgICAgIHBhcmFtMSA9IENBTExCQUNLX0tFWVxcbiAgICAgICAgcGFyYW0yID0gTVlfUlVMRVxcbiAgICAgICAgcGFyYW0zID0gTVlfVFlQRVxcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZWwuZGF0YSkpIGVsID0gZWwuZGF0YVxcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkobXlDb2xsZWN0aW9uX2VsLCBlbC5tYXAoKHYpID0+IHtcXG4gICAgICAgICAgICBsZXQgTVlfX1JVTEUgPSBPYmplY3QuYXNzaWduKHt9LCBNWV9SVUxFKSxcXG4gICAgICAgICAgICAgICAgc3ViVGl0bGUgPSB2LnRpdGxlXFxuICAgICAgICAgICAgdi50aXRsZSArPSAn4oCc4oCc4oCd4oCdPGJyPicgKyAoUlVMRS50aXRsZS5mb250Y29sb3IoJyMxMmI2NjgnKSArICcg4paqICcgKyAodi5kZXNjIHx8ICcnKS5mb250Y29sb3IoJyM2NjY2NjYnKSkuc21hbGwoKVxcbiAgICAgICAgICAgIHYuZGVzYyA9IHYuY29udGVudCB8fCAnJ1xcbiAgICAgICAgICAgIGlmKCF2LmltZykgdi5jb2xfdHlwZSA9ICd0ZXh0XzEnXFxuICAgICAgICAgICAgZGVsZXRlIHYuY29udGVudFxcblxcbiAgICAgICAgICAgIGlmICghdi51cmwpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHYudXJsLmluY2x1ZGVzKCdAcnVsZT0nKSkge1xcbiAgICAgICAgICAgICAgICBsZXQgW18sIHVybCwgcnVsZV0gPSB2LnVybC5tYXRjaCgvXihbXFxcXHNcXFxcU10qPylAcnVsZT0oW1xcXFxzXFxcXFNdKikkLylcXG4gICAgICAgICAgICAgICAgdi51cmwgPSB1cmxcXG4gICAgICAgICAgICAgICAgTVlfX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSA9IHJ1bGVcXG4gICAgICAgICAgICAgICAgTVlfX1JVTEUuZGV0YWlsX2NvbF90eXBlID0gTVlfUlVMRS5jb2xfdHlwZVxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodi51cmwuc3RhcnRzV2l0aCgnaGlrZXI6Ly9wYWdlLycpKSB7XFxuICAgICAgICAgICAgICAgIGlmICh2LnVybC5pbmNsdWRlcygncnVsZT0nKSB8fCAodi5leHRyYSB8fCB7fSkucnVsZSlcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2XFxuICAgICAgICAgICAgICAgIGxldCBbXywgcGF0aCwgcGFyYW1zXSA9IHYudXJsLnNwbGl0KCcjJylbMF0ubWF0Y2goL15oaWtlcjpcXFxcL1xcXFwvcGFnZVxcXFwvKC4rPykoPzpcXFxcPyguKikpPyQvKSxcXG4gICAgICAgICAgICAgICAgICAgIHN1YlBhZ2UgPSBNWV9SVUxFLnBhZ2VMaXN0LmZpbmQoKHYpID0+IHYucGF0aCA9PSBwYXRoKSxcXG4gICAgICAgICAgICAgICAgICAgIHN1YlVybCA9IChwYXJhbXMgfHwgJycpLnNwbGl0KCcmJykuZmluZCgodikgPT4gdi5zdGFydHNXaXRoKCd1cmw9JykpXFxuICAgICAgICAgICAgICAgIHYudXJsID0gc3ViVXJsID8gc3ViVXJsLnNsaWNlKDQpLnJlcGxhY2UoL++8n++8ny9nLCAnPycpLnJlcGxhY2UoL++8hu+8hi9nLCAnJicpIDogKHYuZXh0cmEgfHwge30pLnVybCB8fCAnaGlrZXI6Ly9lbXB0eT8nICsgKHBhcmFtcyB8fCAnJylcXG4gICAgICAgICAgICAgICAgTVlfX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSA9IHN1YlBhZ2UucnVsZVxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5kZXRhaWxfY29sX3R5cGUgPSBzdWJQYWdlLmNvbF90eXBlXFxuICAgICAgICAgICAgICAgIE1ZX19SVUxFLnBhcmFtcyA9IHYuZXh0cmEgfHwge31cXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHYudXJsLmluY2x1ZGVzKCdAbGF6eVJ1bGU9JykpIHtcXG4gICAgICAgICAgICAgICAgdi51cmwgPSB2LnVybC5yZXBsYWNlKCcuanM6JywgJy5qczpcXFxcbmlmKE1ZX1JVTEUpT2JqZWN0LmFzc2lnbihNWV9SVUxFLCcgKyAkLnN0cmluZ2lmeSh7IHBhZ2VzOiBNWV9SVUxFLnBhZ2VzLCBwYWdlTGlzdDogTVlfUlVMRS5wYWdlTGlzdCwgZmluZF9ydWxlOiAnJywgcGFyYW1zOiAnJyB9KSArICcpO01ZX1VSTD1cXFwiJyArIE1ZX1VSTCArICdcXFwiOycpXFxuICAgICAgICAgICAgICAgIHJldHVybiB2XFxuICAgICAgICAgICAgfSBlbHNlIGlmICghTVlfUlVMRS5kZXRhaWxfZmluZF9ydWxlIHx8IHYudXJsLnN0YXJ0c1dpdGgoJ2hpa2VyOi8vJykpIHsgcmV0dXJuIHYgfVxcbiAgICAgICAgICAgIHYuZXh0cmEgPSB7IHVybDogdi51cmwsIFJVTEU6IE1ZX19SVUxFLCBwYWdlVGl0bGU6IHN1YlRpdGxlIH1cXG4gICAgICAgICAgICB2LnVybCA9ICdoaWtlcjovL3BhZ2UvZGV0YWlsTG9hZD9ydWxlPScgKyBnZXRJdGVtKCdteUNvbGxlY3Rpb24nKVxcbiAgICAgICAgICAgIGlmICh2LmV4dHJhLlJVTEUudXJsLmluY2x1ZGVzKCcjaW1tZXJzaXZlVGhlbWUjJykpIHYudXJsICs9ICcmI2ltbWVyc2l2ZVRoZW1lIydcXG4gICAgICAgICAgICByZXR1cm4gdlxcbiAgICAgICAgfSkpXFxuICAgICAgICBtZXRob2Rfc2V0UmVzdWx0Lmludm9rZShqYXZhQ29udGV4dCwgbXlDb2xsZWN0aW9uX2VsLCBwYXJhbTEsIHBhcmFtMiwgcGFyYW0zKVxcbiAgICB9XFxuICAgIHNldEhvbWVSZXN1bHQgPSBzZXRSZXN1bHRcXG4gICAgc2V0U2VhcmNoUmVzdWx0ID0gc2V0UmVzdWx0XFxuXFxuICAgIGV2YWwoTVlfUlVMRS5maW5kX3J1bGUuc2xpY2UoMykpXFxufSBlbHNlIHtcXG4gICAgbGV0IGZpbmRSdWxlID0gTVlfUlVMRS5maW5kX3J1bGUuc3BsaXQoJzsnKVxcbiAgICBwYXJzZURvbUZvckFycmF5KGluZGV4SHRtbCwgZmluZFJ1bGUuc2hpZnQoKSkuZm9yRWFjaCgoZGF0YSkgPT4ge1xcbiAgICAgICAgbGV0IFt0aXRsZSwgdXJsLCBkZXNjLCBjb250ZW50LCBpbWddID0gZmluZFJ1bGUubWFwKCh2LCBpKSA9PiB7XFxuICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAodiA9PSAnKicpIHJldHVybiAnJ1xcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB2ID0gKGkgPT0gMSB8fCBpID09IDQpID9cXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZURvbShkYXRhLCB2KSA6XFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VEb21Gb3JIdG1sKGRhdGEsIHYpXFxuICAgICAgICAgICAgICAgICAgICBpZiAoaSAhPSAxKSB2ID0gcnVuQ29kZSh2KVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZcXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgeyByZXR1cm4gJycgfVxcbiAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgIHJlcyA9IHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlICsgJ+KAnOKAnOKAneKAnTxicj4nICsgKFJVTEUudGl0bGUuZm9udGNvbG9yKCcjMTJiNjY4JykgKyAnIOKWqiAnICsgZGVzYy5mb250Y29sb3IoJyM2NjY2NjYnKSkuc21hbGwoKSxcXG4gICAgICAgICAgICAgICAgdXJsOiB1cmwsXFxuICAgICAgICAgICAgICAgIGRlc2M6IGNvbnRlbnQsXFxuICAgICAgICAgICAgICAgIGltZzogaW1nXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgaWYoIXJlcy5pbWcpIHJlcy5jb2xfdHlwZSA9ICd0ZXh0XzEnXFxuICAgICAgICBpZiAocmVzLnVybCkge1xcbiAgICAgICAgICAgIGlmIChyZXMudXJsLmluY2x1ZGVzKCdAbGF6eVJ1bGU9JykpIHtcXG4gICAgICAgICAgICAgICAgcmVzLnVybCA9IHJlcy51cmwucmVwbGFjZSgnLmpzOicsICcuanM6XFxcXG5pZihNWV9SVUxFKU9iamVjdC5hc3NpZ24oTVlfUlVMRSwnICsgJC5zdHJpbmdpZnkoeyBwYWdlczogTVlfUlVMRS5wYWdlcywgcGFnZUxpc3Q6IE1ZX1JVTEUucGFnZUxpc3QsIGZpbmRfcnVsZTogJycsIHBhcmFtczogJycgfSkgKyAnKTtNWV9VUkw9XFxcIicgKyBNWV9VUkwgKyAnXFxcIjsnKVxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoTVlfUlVMRS5kZXRhaWxfZmluZF9ydWxlKSB7XFxuICAgICAgICAgICAgICAgIHJlcy5leHRyYSA9IHsgdXJsOiB1cmwsIFJVTEU6IE1ZX1JVTEUsIHBhZ2VUaXRsZTogdGl0bGUgfVxcbiAgICAgICAgICAgICAgICByZXMudXJsID0gJ2hpa2VyOi8vcGFnZS9kZXRhaWxMb2FkP3J1bGU9JyArIGdldEl0ZW0oJ215Q29sbGVjdGlvbicpXFxuICAgICAgICAgICAgICAgIGlmIChyZXMuZXh0cmEuUlVMRS51cmwuaW5jbHVkZXMoJyNpbW1lcnNpdmVUaGVtZSMnKSkgcmVzLnVybCArPSAnJiNpbW1lcnNpdmVUaGVtZSMnXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgbXlDb2xsZWN0aW9uX2VsLnB1c2gocmVzKVxcbiAgICB9KVxcbiAgICBzZXRSZXN1bHQobXlDb2xsZWN0aW9uX2VsKVxcbn1cXG5cIn0se1wiY29sX3R5cGVcIjpcImljb25fMl9yb3VuZFwiLFwibmFtZVwiOlwi6K6+572uXCIsXCJwYXRoXCI6XCJDb25maWdcIixcInJ1bGVcIjpcImpzOlxcbmFkZExpc3RlbmVyKCdvbkNsb3NlJywgJ2NsZWFyVmFyKFxcXCJteUNvbGxlY3Rpb24tc29ydEZsYWdcXFwiKTtyZWZyZXNoUGFnZSgpJylcXG5zZXRQYWdlVGl0bGUoJ+KamSDovbvlkIjpm4borr7nva4g4pqZJylcXG5sZXQgZWwgPSBbe1xcbiAgICAgICAgdGl0bGU6ICfmuIXpmaTnvJPlrZgs56uL5Y2z5pu05pawIDxzbWFsbD4g77yI5Z+65LqO6L+c56iL5LuT5bqTLOS4jeimgemikee5geeCueWHu++8iScsXFxuICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgZGVsZXRlRmlsZSgndXBkYXRldGltZScpXFxuICAgICAgICAgICAgYmFjayh0cnVlKVxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lmm7TmlrAnXFxuICAgICAgICB9KSxcXG4gICAgICAgIGltZzogJ2hpa2VyOi8vaW1hZ2VzL2ljb24xJyxcXG4gICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJ1xcbiAgICB9XSxcXG4gICAgc2VhcmNoVGhkID0gcGFyc2VJbnQocmVhZEZpbGUoJ3NlYXJjaFRoZCcpIHx8ICc1JyksXFxuICAgIG5ld1dpbmRvdyA9IHJlYWRGaWxlKCduZXdXaW5kb3cnKSxcXG4gICAgZWRpdE1vZGUgPSBnZXRWYXIoJ215Q29sbGVjdGlvbi1lZGl0TW9kZScsICflkK/nlKgv56aB55SoJylcXG5cXG5lbC5wdXNoKHtcXG4gICAgdGl0bGU6ICfwn5SNIOaQnOe0ouaooeW8jzogJyArIChzZWFyY2hUaGQgPT0gMCA/ICfliJcnIDogJ+iBmicgKyBzZWFyY2hUaGQpLFxcbiAgICB1cmw6ICQoWyfliJfooajmkJzntKInLCAn6IGa5ZCI5pCc57SiJ10sIDEpLnNlbGVjdCgoc2VhcmNoVGhkKSA9PiB7XFxuICAgICAgICBpZiAoaW5wdXQgPT0gJ+WIl+ihqOaQnOe0oicpIHtcXG4gICAgICAgICAgICBzYXZlRmlsZSgnc2VhcmNoVGhkJywgJzAnKVxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgaWYgKHNlYXJjaFRoZCA9PSAwKSBzZWFyY2hUaGQgPSA1XFxuICAgICAgICAgICAgcmV0dXJuICQoc2VhcmNoVGhkLCAn6L6T5YWl5pCc57Si57q/56iL77yM5pyA5aW95LiN6KaB6LaF6L+HMTYnKS5pbnB1dCgoKSA9PiB7XFxuICAgICAgICAgICAgICAgIHNhdmVGaWxlKCdzZWFyY2hUaGQnLCBpbnB1dClcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9XFxuICAgIH0sIHNlYXJjaFRoZCksXFxuICAgIGNvbF90eXBlOiAndGV4dF8yJ1xcbn0sIHtcXG4gICAgdGl0bGU6ICfwn5alIOeLrOeri+mmlumhtTogJyArIChuZXdXaW5kb3cgPyAn5pivJyA6ICflkKYnKSxcXG4gICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChuZXdXaW5kb3cpID0+IHtcXG4gICAgICAgIHNhdmVGaWxlKCduZXdXaW5kb3cnLCBuZXdXaW5kb3cgPyAnJyA6ICcxJylcXG4gICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgfSwgbmV3V2luZG93KSxcXG4gICAgY29sX3R5cGU6ICd0ZXh0XzInXFxufSlcXG5cXG5lbC5wdXNoKHsgY29sX3R5cGU6ICdsaW5lJyB9LCB7IGNvbF90eXBlOiAnYmlnX2JsYW5rX2Jsb2NrJyB9KTtcXG5bJ+WQr+eUqC/npoHnlKgnLCAn6YeN5paw5o6S5bqPJywgJ+abtOaUueWbvuaghycsICflr7zlhaXmtbfpmJQnXS5mb3JFYWNoKCh2KSA9PiB7XFxuICAgIGVsLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IHYgPT0gZWRpdE1vZGUgPyAn4oCc4oCc4oCd4oCdJyArIHYuYm9sZCgpLmZvbnRjb2xvcignIzEyYjY2OCcpIDogdixcXG4gICAgICAgIHVybDogdiA9PSBlZGl0TW9kZSA/ICdoaWtlcjovL2VtcHR5JyA6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHYpID0+IHtcXG4gICAgICAgICAgICBwdXRWYXIoJ215Q29sbGVjdGlvbi1lZGl0TW9kZScsIHYpXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgfSwgdiksXFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxuICAgIH0pXFxufSlcXG5lbC5wdXNoKHtcXG4gICAgdGl0bGU6ICfmgaLlpI3lh7rljoLmlbDmja4nLFxcbiAgICB1cmw6ICQoJ+ehruWumuimgeaBouWkjeWHuuWOgu+8jOa4healmuiHquWumuS5ieaVsOaNruWQl++8nycpLmNvbmZpcm0oKCkgPT4ge1xcbiAgICAgICAgZGVsZXRlRmlsZSgnY3VzdG9tRGF0YScpXFxuICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcXG4gICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7LmgaLlpI3lh7rljoLmlbDmja4nXFxuICAgIH0pLFxcbiAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxufSlcXG5cXG5jb25zdCB7IGRhdGFMb2FkIH0gPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS91dGlsaXR5P3J1bGU9JyArIGdldEl0ZW0oJ215Q29sbGVjdGlvbicpKVxcbmxldCBkYXRhID0gZGF0YUxvYWQodHJ1ZSlcXG5KU09OLnBhcnNlKHJlYWRGaWxlKCdjdXN0b21EYXRhJykgfHwgJ1tdJykuZm9yRWFjaCgodiwgaSkgPT4ge1xcbiAgICBsZXQgZCA9IHsgdGl0bGU6IHYudGl0bGUsIGltZzogZGF0YVtpXS5pY29uIH1cXG4gICAgc3dpdGNoIChlZGl0TW9kZSkge1xcbiAgICAgICAgY2FzZSAn5ZCv55SoL+emgeeUqCc6XFxuICAgICAgICAgICAgZC50aXRsZSA9ICh2LnZpc2libGUgPyAn8J+foiAgJyA6ICfwn5S0ICAnKSArIGQudGl0bGVcXG4gICAgICAgICAgICBkLnVybCA9ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHJ1bGUpID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IHJ1bGVzID0gSlNPTi5wYXJzZShyZWFkRmlsZSgnY3VzdG9tRGF0YScpIHx8ICdbXScpLFxcbiAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBydWxlcy5maW5kSW5kZXgoKHYpID0+IHYudGl0bGUgPT0gcnVsZS50aXRsZSlcXG4gICAgICAgICAgICAgICAgcnVsZXNbaW5kZXhdLnZpc2libGUgPSAhcnVsZXNbaW5kZXhdLnZpc2libGVcXG4gICAgICAgICAgICAgICAgc2F2ZUZpbGUoJ2N1c3RvbURhdGEnLCBKU09OLnN0cmluZ2lmeShydWxlcykpXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgfSwgdilcXG4gICAgICAgICAgICBicmVha1xcbiAgICAgICAgY2FzZSAn6YeN5paw5o6S5bqPJzpcXG4gICAgICAgICAgICBsZXQgc29ydEZsYWcgPSBwYXJzZUludChnZXRWYXIoJ215Q29sbGVjdGlvbi1zb3J0RmxhZycsICctMScpKVxcbiAgICAgICAgICAgIGQudGl0bGUgPSAoc29ydEZsYWcgPT0gaSA/ICfwn5SEICAnIDogJycpICsgZC50aXRsZVxcbiAgICAgICAgICAgIGlmIChzb3J0RmxhZyA9PSAtMSlcXG4gICAgICAgICAgICAgICAgZC51cmwgPSAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChpKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBwdXRWYXIoJ215Q29sbGVjdGlvbi1zb3J0RmxhZycsIGkudG9TdHJpbmcoKSlcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+mAieaLqeimgeenu+WKqOWIsOeahOS9jee9ridcXG4gICAgICAgICAgICAgICAgfSwgaSlcXG4gICAgICAgICAgICBlbHNlXFxuICAgICAgICAgICAgICAgIGQudXJsID0gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgob2xkSW5kZXgsIG5ld0luZGV4KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgcnVsZXMgPSBKU09OLnBhcnNlKHJlYWRGaWxlKCdjdXN0b21EYXRhJykgfHwgJ1tdJylcXG4gICAgICAgICAgICAgICAgICAgIHJ1bGVzLnNwbGljZShuZXdJbmRleCwgMCwgcnVsZXMuc3BsaWNlKG9sZEluZGV4LCAxKVswXSlcXG4gICAgICAgICAgICAgICAgICAgIHNhdmVGaWxlKCdjdXN0b21EYXRhJywgSlNPTi5zdHJpbmdpZnkocnVsZXMpKVxcbiAgICAgICAgICAgICAgICAgICAgcHV0VmFyKCdteUNvbGxlY3Rpb24tc29ydEZsYWcnLCAnLTEnKVxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgICAgIH0sIHNvcnRGbGFnLCBpKVxcbiAgICAgICAgICAgIGJyZWFrXFxuICAgICAgICBjYXNlICfmm7TmlLnlm77moIcnOlxcbiAgICAgICAgICAgIGQudXJsID0gJCh2Lmljb24gfHwgJycsICfovpPlhaXmlrDlm77moIflnLDlnYDmiJbpopzoibLku6PnoIHvvJonKS5pbnB1dCgocnVsZSkgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgcnVsZXMgPSBKU09OLnBhcnNlKHJlYWRGaWxlKCdjdXN0b21EYXRhJykgfHwgJ1tdJyksXFxuICAgICAgICAgICAgICAgICAgICBpbmRleCA9IHJ1bGVzLmZpbmRJbmRleCgodikgPT4gdi50aXRsZSA9PSBydWxlLnRpdGxlKVxcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQpXFxuICAgICAgICAgICAgICAgICAgICBydWxlc1tpbmRleF0uaWNvbiA9IGlucHV0XFxuICAgICAgICAgICAgICAgIGVsc2VcXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBydWxlc1tpbmRleF0uaWNvblxcbiAgICAgICAgICAgICAgICBzYXZlRmlsZSgnY3VzdG9tRGF0YScsIEpTT04uc3RyaW5naWZ5KHJ1bGVzKSlcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICB9LCB2KVxcbiAgICAgICAgICAgIGJyZWFrXFxuICAgICAgICBjYXNlICflr7zlhaXmtbfpmJQnOlxcbiAgICAgICAgICAgIGQudXJsID0gJ3J1bGU6Ly8nICsgYmFzZTY0RW5jb2RlKEpTT04uc3RyaW5naWZ5KGRhdGFbaV0pKVxcbiAgICAgICAgICAgIGJyZWFrXFxuICAgIH1cXG4gICAgZWwucHVzaChkKVxcbn0pXFxuc2V0UmVzdWx0KGVsKVxcblwifV0sXCJwYXJhbXNcIjpcIntcXFwiUlVMRVxcXCI6e1xcXCJhcmVhX25hbWVcXFwiOlxcXCJcXFwiLFxcXCJhcmVhX3VybFxcXCI6XFxcIlxcXCIsXFxcImF1dGhvclxcXCI6XFxcIjE2MDYxNDJcXFwiLFxcXCJjbGFzc19uYW1lXFxcIjpcXFwiXFxcIixcXFwiY2xhc3NfdXJsXFxcIjpcXFwiXFxcIixcXFwiY29sX3R5cGVcXFwiOlxcXCJsb25nX3RleHRcXFwiLFxcXCJkZXRhaWxfY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8yXFxcIixcXFwiZGV0YWlsX2ZpbmRfcnVsZVxcXCI6XFxcImpzOlxcXFxuZXZhbChnZXRWYXIoJ2FhJykuc3BsaXQoJy8qKi8nKVsxXSk7XFxcIixcXFwiZmluZF9ydWxlXFxcIjpcXFwianM6Ly8xODhcXFxcbnZhciByZXMgPSB7fTtcXFxcbnZhciBkID0gW107XFxcXG5mdW5jdGlvbiBwaW4oYSxiKXtcXFxcblxcXFxuXFxcXG5yZXR1cm4gKGI9PTA/J+KAnOKAnOKAneKAnSc6JycpKyc8Zm9udCBjb2xvcj1cXFxcXFxcIiNlZjViOWNcXFxcXFxcIj4nK2ErJzwvZm9udD4nO1xcXFxuXFxcXG59XFxcXG5hPWdldFZhcignYXhlJywnNicpO1xcXFxudmFyIGI9cGFyc2VJbnQoTVlfVVJMLnNwbGl0KCcjJylbMV0pO1xcXFxuaWYoYj09MSl7XFxcXG5kLnB1c2goe1xcXFxudGl0bGU6KGE9PTU/J+KAnOKAnOKAneKAnTxmb250IGNvbG9yPVxcXFxcXFwicmVkXFxcXFxcXCI+5pio5pel5pu05pawPC9mb250Pic6J+aYqOaXpeabtOaWsCcpLFxcXFxudXJsOmBoaWtlcjovL2VtcHR5QGxhenlSdWxlPS5qczpwdXRWYXIyKCdheGUnLCc1Jyk7cmVmcmVzaFBhZ2UoZmFsc2UpOyd0b2FzdDovL+WIh+aNouiHs+aYqOaXpeabtOaWsCdgLFxcXFxuY29sX3R5cGU6J3RleHRfMydcXFxcbn0pO1xcXFxuZC5wdXNoKHtcXFxcbnRpdGxlOihhPT02PyfigJzigJzigJ3igJ08Zm9udCBjb2xvcj1cXFxcXFxcInJlZFxcXFxcXFwiPuS7iuaXpeabtOaWsDwvZm9udD4nOifku4rml6Xmm7TmlrAnKSxcXFxcbnVybDpgaGlrZXI6Ly9lbXB0eUBsYXp5UnVsZT0uanM6cHV0VmFyMignYXhlJywnNicpO3JlZnJlc2hQYWdlKGZhbHNlKTsndG9hc3Q6Ly/liIfmjaLoh7Pku4rml6Xmm7TmlrAnYCxcXFxcbmNvbF90eXBlOid0ZXh0XzMnXFxcXG59KTtcXFxcbmQucHVzaCh7XFxcXG50aXRsZTooYT09Nz8n4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9XFxcXFxcXCJyZWRcXFxcXFxcIj7mmI7ml6Xmm7TmlrA8L2ZvbnQ+Jzon5piO5pel5pu05pawJyksXFxcXG51cmw6YGhpa2VyOi8vZW1wdHlAbGF6eVJ1bGU9LmpzOnB1dFZhcjIoJ2F4ZScsJzcnKTtyZWZyZXNoUGFnZShmYWxzZSk7J3RvYXN0Oi8v5YiH5o2i6Iez5piO5pel5pu05pawJ2AsXFxcXG5jb2xfdHlwZTondGV4dF8zJ1xcXFxufSk7XFxcXG5kLnB1c2goe1xcXFxudGl0bGU6KGE9PSflvLrlir/mjqXmoaMnPyfigJzigJzigJ3igJ08Zm9udCBjb2xvcj1cXFxcXFxcInJlZFxcXFxcXFwiPuiFvuiur+aOpeahozwvZm9udD4nOifohb7orq/mjqXmoaMnKSxcXFxcbnVybDpgaGlrZXI6Ly9lbXB0eUBsYXp5UnVsZT0uanM6cHV0VmFyMignYXhlJywn5by65Yq/5o6l5qGjJyk7cmVmcmVzaFBhZ2UoZmFsc2UpOyd0b2FzdDovL+WIh+aNouiHs+iFvuiur+aOpeahoydgLFxcXFxuY29sX3R5cGU6J3RleHRfMydcXFxcbn0pO1xcXFxudmFyIG1vZGU9WyfnlarliafntKLlvJUnLCflm73liJvntKLlvJUnXTtcXFxcbmlmKGEuaW5jbHVkZXMoJ+e0ouW8lScpKVxcXFxudmFyIG1vPWdldFZhcignYXhlJyk9PSfnlarliafntKLlvJUnP21vZGVbMF06bW9kZVsxXTtcXFxcbmQucHVzaCh7XFxcXG50aXRsZTphLmluY2x1ZGVzKCfntKLlvJUnKT8oJ+KAnOKAnOKAneKAnTxmb250IGNvbG9yPVxcXFxcXFwicmVkXFxcXFxcXCI+JyttbysnPC9mb250PicpOidC56uZ57Si5byVJyxcXFxcbnVybDpgaGlrZXI6Ly9lbXB0eUBsYXp5UnVsZT0uanM6aWYoZ2V0VmFyKCdheGUnKT09J+eVquWJp+e0ouW8lScpcHV0VmFyMignYXhlJywn5Zu95Yib57Si5byVJyk7ZWxzZSBwdXRWYXIyKCdheGUnLCfnlarliafntKLlvJUnKTtyZWZyZXNoUGFnZShmYWxzZSk7J3RvYXN0Oi8v5YiH5o2i6IezJytnZXRWYXIoJ2F4ZScpYCxcXFxcbmNvbF90eXBlOid0ZXh0XzMnXFxcXG59KTtcXFxcbmQucHVzaCh7XFxcXG50aXRsZTphPT0n6L+955WqJz8n4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9XFxcXFxcXCJyZWRcXFxcXFxcIj7miJHnmoTov73nlao8L2ZvbnQ+Jzon5oiR55qE6L+955WqJyxcXFxcbnVybDpgaGlrZXI6Ly9lbXB0eUBsYXp5UnVsZT0uanM6cHV0VmFyMignYXhlJywn6L+955WqJyk7cmVmcmVzaFBhZ2UoZmFsc2UpOyd0b2FzdDovL+WIh+aNouiHs+aIkeeahOi/veeVqidgLFxcXFxuY29sX3R5cGU6J3RleHRfMydcXFxcbn0pO31cXFxcbmlmKGEuaW5jbHVkZXMoJ+e0ouW8lScpKXtcXFxcbnZhciBvcmQ9WyczJywnMCcsJzQnLCcyJywnNSddO1xcXFxudmFyIHRpdD1bJ+i/veeVquS6uuaVsCcsJ+abtOaWsOaXtumXtCcsJ+acgOmrmOivhOWIhicsJ+aSreaUvuaVsOmHjycsJ+W8gOaSreaXtumXtCddO1xcXFxudmFyIG9yPXBhcnNlSW50KGdldFZhcignb3InLCcwJyksMTApO1xcXFxuYjwyJiZkLnB1c2goe2NvbF90eXBlOidsaW5lX2JsYW5rJ30pO1xcXFxuZm9yKHZhciBpPTA7YjwyJiZpPG9yZC5sZW5ndGg7aSsrKXtcXFxcbnZhciB0dD0n4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9XFxcXFxcXCJibHVlXFxcXFxcXCI+Jyt0aXRbaV0rJzwvZm9udD4nO1xcXFxuZC5wdXNoKHtcXFxcbnRpdGxlOm9yPT1vcmRbaV0/dHQ6dGl0W2ldLFxcXFxudXJsOidoaWtlcjovL2VtcHR5Iycrb3JkW2ldK2BAbGF6eVJ1bGU9LmpzOnZhciBpPWlucHV0LnNwbGl0KCcjJylbMV07cHV0VmFyMignb3InLGkpO3JlZnJlc2hQYWdlKGZhbHNlKTsndG9hc3Q6Ly/liIfmjaLmiJDlip/vvIEnYCxcXFxcbmNvbF90eXBlOid0ZXh0XzMnXFxcXG59KTtcXFxcbn1cXFxcbmQucHVzaCh7Y29sX3R5cGU6J2xpbmUnfSk7XFxcXG52YXIgbW9kZWw9WycxJywnNCddO1xcXFxudmFyIHdlYj0naHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3BnYy9zZWFzb24vaW5kZXgvcmVzdWx0P3NlYXNvbl92ZXJzaW9uPS0xJmFyZWE9LTEmaXNfZmluaXNoPS0xJmNvcHlyaWdodD0tMSZzZWFzb25fc3RhdHVzPS0xJnNlYXNvbl9tb250aD0tMSZ5ZWFyPS0xJnN0eWxlX2lkPS0xJm9yZGVyPScrb3IrJyZzdD0xJnNvcnQ9MCZwYWdlPScrYisnJnNlYXNvbl90eXBlPScrbW9kZWxbKGdldFZhcignYXhlJyk9PSfnlarliafntKLlvJUnPzA6MSldKycmcGFnZXNpemU9MjAmdHlwZT0xJztcXFxcbnRyeXtcXFxcbnZhciB5bT1KU09OLnBhcnNlKHJlcXVlc3Qod2ViLHt9KSkuZGF0YS5saXN0O1xcXFxuZm9yKHZhciBpIGluIHltKXtcXFxcbnZhciBidD15bVtpXS50aXRsZTtcXFxcbnZhciBpbmQ9eW1baV0uaW5kZXhfc2hvdztcXFxcbmluZD1pbmQ/KGluZCsnICcpOicnO1xcXFxudmFyIGJ0PWdldFZhcignbGIxJykuaW5jbHVkZXMoeW1baV0ubGluayk/cGluKGJ0KTpidDtcXFxcblxcXFxuZC5wdXNoKHtcXFxcblxcXFx0dGl0bGU6J+KAnOKAnOKAneKAnTxzdHJvbmc+JytidCsnPC9zdHJvbmc+JyxcXFxcbiAgZGVzYzonPHN0cm9uZz4nK2luZCsnPC9zdHJvbmc+4oCY4oCY4oCZ4oCZPGZvbnQgY29sb3I9XFxcXFxcXCJyZWRcXFxcXFxcIj4nK3ltW2ldLm9yZGVyKyc8L2ZvbnQ+JyxcXFxcbiAgcGljX3VybDp5bVtpXS5jb3ZlcisnQFJlZmVyZXI9aHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tJyxcXFxcbnVybDp5bVtpXS5saW5rKycjIycreW1baV0udGl0bGUrJyYmJyt5bVtpXS5saW5rKycmJicreW1baV0uY292ZXIsXFxcXG5cXFxcdGNvbF90eXBlOiAnbW92aWVfMSdcXFxcbn0pO1xcXFxufX1jYXRjaChlKXt9XFxcXG59ZWxzZSBpZihhPT0n5by65Yq/5o6l5qGjJyYmYj09MSl7XFxcXG5kLnB1c2goe2NvbF90eXBlOidsaW5lX2JsYW5rJ30pO1xcXFxudmFyIGpkPVsn6YeN56OF5o6o6I2QJywn5by65qGj5o6o6I2QJywn5by65Yq/5o6l5qGjJ107XFxcXG5cXFxcbnZhciBqZHM9Wycuc2xpZGVyX25hdiYmLm5hdl9saW5rJywnLm1vZF9maWd1cmUmJi5saXN0X2l0ZW0nLCcubW9kX2JkLDMmJi5saXN0X2l0ZW0nXTtcXFxcbnZhciBkdT1nZXRWYXIoJ2R1JyxqZHNbMl0pO1xcXFxuZm9yKHZhciBpIGluIGpkKXtcXFxcbnZhciB0dD0n4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9XFxcXFxcXCJibHVlXFxcXFxcXCI+JytqZFtpXSsnPC9mb250Pic7XFxcXG5cXFxcbmQucHVzaCh7XFxcXG50aXRsZTpkdT09amRzW2ldP3R0OmpkW2ldLFxcXFxudXJsOidoaWtlcjovL2VtcHR5IycramRzW2ldK2BAbGF6eVJ1bGU9LmpzOnZhciBpPWlucHV0LnNwbGl0KCcjJylbMV07cHV0VmFyMignZHUnLGkpO3JlZnJlc2hQYWdlKGZhbHNlKTsndG9hc3Q6Ly/liIfmjaLmiJDlip/vvIEnYCxcXFxcbmNvbF90eXBlOid0ZXh0XzMnXFxcXG59KTtcXFxcblxcXFxufVxcXFxudmFyIHRlbj1mZXRjaCgnaHR0cHM6Ly92LnFxLmNvbS9jaGFubmVsL2NhcnRvb24nLCB7aGVhZGVyczp7XFxcXFxcXCJVc2VyLUFnZW50XFxcXFxcXCI6UENfVUF9fSk7XFxcXG52YXIgbGVuPScnO1xcXFxuaWYoZHU9PWpkc1syXSl7XFxcXG52YXIgbGVuPXBhcnNlRG9tRm9yQXJyYXkodGVuLCcubW9kX2xpc3RpbmdzX3RpdGxlJiYudGl0bGVfaXRlbScpO31cXFxcbnZhciBsZT1wYXJzZURvbUZvckFycmF5KHRlbixkdSk7XFxcXG5cXFxcbmZvcih2YXIgaSBpbiBsZSl7XFxcXG50cnl7XFxcXG52YXIgdXI9cGFyc2VEb21Gb3JIdG1sKGxlW2ldLCdhJiZocmVmJyk7XFxcXG52YXIgdGk9cGFyc2VEb21Gb3JIdG1sKGxlW2ldLCcudGl0bGVfdGV4dHx8YSwxJiZUZXh0Jyk7XFxcXG50cnl7dmFyIHBpPXBhcnNlRG9tRm9ySHRtbChsZVtpXSwnaW1nJiZsel9uZXh0fHxzcmMnKTt9Y2F0Y2goZSl7dmFyIHBpPScnO31cXFxcblxcXFxudHJ5e1xcXFxuaWYocGk9PScnKVxcXFxudmFyIHBpPXBhcnNlRG9tRm9ySHRtbChsZVtpXSwnYSYmZGF0YS1iZ2ltYWdlJyk7fWNhdGNoKGUpe31cXFxcbnBpPXBpLmluY2x1ZGVzKCdodHRwJyk/cGk6KCdodHRwczonK3BpKTtcXFxcbnZhciBkZT1sZW4/KCfigJjigJjigJnigJk8Zm9udCBjb2xvcj1cXFxcXFxcInJlZFxcXFxcXFwiPicrcGFyc2VEb21Gb3JIdG1sKGxlbltpXSwnLnRpdGxlJiZUZXh0JykrJzwvZm9udD4gPHN0cm9uZz4nKyBwYXJzZURvbUZvckh0bWwobGVuW2ldLCcuZGVzYyYmVGV4dCcpKyc8L3N0cm9uZz4nKydcXFxcXFxcXG48Zm9udCBjb2xvcj1cXFxcXFxcImJsdWVcXFxcXFxcIj4nK3BhcnNlRG9tRm9ySHRtbChsZVtpXSwnLmZpZ3VyZV9kZXNjJiZUZXh0JykrJzwvZm9udD4nKTpwYXJzZURvbUZvckh0bWwobGVbaV0sJ3NwYW58fC5maWd1cmVfY2FwdGlvbiYmVGV4dCcpLnJlcGxhY2UodGksJycpO1xcXFxuZGU9bGVufHxkdT09amRzWzBdP2RlOign4oCY4oCY4oCZ4oCZPGZvbnQgY29sb3I9XFxcXFxcXCJyZWRcXFxcXFxcIj4nK2RlKyc8L2ZvbnQ+Jyk7XFxcXG59Y2F0Y2goZSl7fVxcXFxudmFyIHRpdD1nZXRWYXIoJ2xiMScpLmluY2x1ZGVzKHVyKT9waW4odGkpOnRpO1xcXFxudGk9ZHU9PWpkc1swXT90aTooJ+KAnOKAnOKAneKAnTxzdHJvbmc+Jyt0aXQrJzwvc3Ryb25nPicpO1xcXFxuaWYodGkpXFxcXG5kLnB1c2goe1xcXFxuXFxcXHR0aXRsZTp0aSxcXFxcbiAgZGVzYzogZGUsXFxcXG4gIHBpY191cmw6cGksXFxcXG5cXFxcdHVybDp1cisnIyMnK2J0KycmJicrdXIrJyYmJytwaSxcXFxcblxcXFx0Y29sX3R5cGU6IGR1PT0nLnNsaWRlcl9uYXYmJi5uYXZfbGluayc/J3BpY18xJzonbW92aWVfMSdcXFxcbn0pO1xcXFxuXFxcXG59XFxcXG59ZWxzZSBpZihhPT0n6L+955WqJyYmYj09MSl7XFxcXG5kMT1bXSA7XFxcXG5kMj1bXTtcXFxcbmlmKGdldFZhcignbGIxJykhPScnKXtcXFxcbnZhciB4eD1nZXRWYXIoJ2xiMScpLnNsaWNlKDAsLTEpLnNwbGl0KCcsJyk7XFxcXG5mb3IodmFyIGsgaW4geHgpe1xcXFxudHJ5e1xcXFxudmFyIHg9eHhba10uc3BsaXQoJyYmJyk7XFxcXG52YXIgeW09cmVxdWVzdCh4WzFdLHt9KTtcXFxcbnRyeXtcXFxcbmlmKHhbMV0uaW5jbHVkZXMoJ2JpbGliaWxpJykpe1xcXFxudmFyIGVwPUpTT04ucGFyc2UoeW0uc3BsaXQoJ1xcXFxcXFwiZXBMaXN0XFxcXFxcXCI6JylbMV0uc3BsaXQoJ31dJylbMF0rJ31dJyk7IFxcXFxudmFyIGd4ej1lcFtlcC5sZW5ndGgtMV0udGl0bGU7fVxcXFxufWNhdGNoKGUpe2d4ej0n5pyA5paw54q25oCB6I635Y+W5aSx6LSl77yBJzt9XFxcXG50cnl7XFxcXG5pZih4WzFdLmluY2x1ZGVzKCdxcScpKXtcXFxcbnZhciBodG09SlNPTi5wYXJzZSh5bS5zcGxpdCgnQ09WRVJfSU5GTyA9ICcpWzFdLnNwbGl0KCd2YXInKVswXSk7XFxcXG52YXIgZ3h6PSfnrKwnK2h0bS5ub21hbF9pZHMuZmlsdGVyKGE9PntpZihhLkY9PTJ8fGEuRj09NylyZXR1cm4gYTt9KS5sZW5ndGgrJ+ivnSc7XFxcXG59XFxcXG59Y2F0Y2goZSl7Z3h6PSfmnIDmlrDnirbmgIHojrflj5blpLHotKXvvIEnO31cXFxcbmlmKGd4ej09J+acgOaWsOeKtuaAgeiOt+WPluWksei0pe+8gScpe1xcXFxuZDIucHVzaCh7XFxcXG5cXFxcdHRpdGxlOiAn4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9XFxcXFxcXCJncmV5XFxcXFxcXCI+Jyt4WzBdKyc8L2ZvbnQ+JyxcXFxcbiAgcGljX3VybDogeFsyXSsoeFsxXS5pbmNsdWRlcygnYmlsaWJpbGknKT8nQFJlZmVyZXI9aHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tJzonJyksXFxcXG5kZXNjOih4Lmxlbmd0aD49ND8oJ+ingueci+iHsyDigJjigJgnK3hbM10rJ+KAmeKAmScpOign4oCY4oCY5pyq6KeC55yL4oCZ4oCZJykpKydcXFxcXFxcXG7mm7TmlrDoh7MgPGZvbnQgY29sb3I9XFxcXFxcXCJyZWRcXFxcXFxcIj4nK2d4eisnPC9mb250PicsXFxcXG5cXFxcdHVybDp4WzFdKycjIycreHhba10rJyMjJyxcXFxcblxcXFx0Y29sX3R5cGU6ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpYydcXFxcbn0pO1xcXFxufWVsc2V7XFxcXG5pZih4WzNdIT1neHopXFxcXG5kLnB1c2goe1xcXFxuXFxcXHR0aXRsZTogcGluKHhbMF0sMCksXFxcXG4gIHBpY191cmw6IHhbMl0rKHhbMV0uaW5jbHVkZXMoJ2JpbGliaWxpJyk/J0BSZWZlcmVyPWh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbSc6JycpLFxcXFxuZGVzYzooeC5sZW5ndGg+PTQ/KCfop4LnnIvoh7MgJysoeFszXSE9Z3h6Pygn4oCc4oCcJyt4WzNdKyfigJ3igJ0nKTooJ+KAmOKAmCcreFszXSsn4oCZ4oCZJykpKTooJ+KAmOKAmOacquingueci+KAmeKAmScpKSsnXFxcXFxcXFxu5pu05paw6IezICcrKHgubGVuZ3RoPj00JiZ4WzNdIT1neHo/KCfigJzigJwnK2d4eisn4oCd4oCdJyk6KCfigJjigJgnK2d4eisn4oCZ4oCZJykpLFxcXFxuXFxcXHR1cmw6eFsxXSsnIyMnK3h4W2tdKycjIycsXFxcXG5cXFxcdGNvbF90eXBlOiAnbW92aWVfMV92ZXJ0aWNhbF9waWMnXFxcXG59KTtcXFxcbmVsc2VcXFxcbmQxLnB1c2goe1xcXFxuXFxcXHR0aXRsZTogeFswXSxcXFxcbiAgcGljX3VybDogeFsyXSsoeFsxXS5pbmNsdWRlcygnYmlsaWJpbGknKT8nQFJlZmVyZXI9aHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tJzonJyksXFxcXG5kZXNjOih4Lmxlbmd0aD49ND8oJ+ingueci+iHsyAnKyh4WzNdIT1neHo/KCfigJzigJwnK3hbM10rJ+KAneKAnScpOign4oCY4oCYJyt4WzNdKyfigJnigJknKSkpOign4oCY4oCY5pyq6KeC55yL4oCZ4oCZJykpKydcXFxcXFxcXG7mm7TmlrDoh7MgJysoeC5sZW5ndGg+PTQmJnhbM10hPWd4ej8oJ+KAnOKAnCcrZ3h6KyfigJ3igJ0nKTooJ+KAmOKAmCcrZ3h6KyfigJnigJknKSksXFxcXG5cXFxcdHVybDp4WzFdKycjIycreHhba10rJyMjJyxcXFxcblxcXFx0Y29sX3R5cGU6ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpYydcXFxcbn0pO1xcXFxufVxcXFxufWNhdGNoKGUpe31cXFxcblxcXFxuXFxcXG59XFxcXG5kMT1kMS5jb25jYXQoZDIpO1xcXFxuZD1kLmNvbmNhdChkMSk7XFxcXG59ZWxzZXtcXFxcbmQucHVzaCh7XFxcXG5cXFxcdHRpdGxlOifigJzigJzov5jmsqHmnInov73nlarvvIHigJ3igJ0nLFxcXFxudXJsOmBoaWtlcjovL2VtcHR5QGxhenlSdWxlPS5qczpyZWZyZXNoUGFnZShmYWxzZSk7J3RvYXN0Oi8v5Yi35paw5a6M5q+V77yBJ2AsXFxcXG5kZXNjOifngrnlh7vliLfmlrAnLFxcXFxuXFxcXG5cXFxcdGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXFxcbn0pO1xcXFxufVxcXFxufWVsc2UgaWYoYj09MSl7XFxcXG52YXIgc3Q9YT09Nz8nJzon4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9XFxcXFxcXCJyZWRcXFxcXFxcIj4rPC9mb250PiAnO1xcXFxudmFyIGNzPTA7XFxcXG52YXIgbj1hPT03PyfmmI7ml6UgJzooYT09Nj8n5LuK5pelICc6J+aYqOaXpSAnKTtcXFxcbi8vaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL2FuaW1lL3RpbWVsaW5lXFxcXG52YXLCoGg9bmV3wqBEYXRlKCkuZ2V0SG91cnMoKTtcXFxcbnZhciBtPW5ld8KgRGF0ZSgpLmdldE1pbnV0ZXMoKTtcXFxcbnZhciBzaT1oKjYwK207XFxcXG5cXFxcbnZhcsKgeTE9ZmV0Y2goJ2h0dHBzOi8vYmFuZ3VtaS5iaWxpYmlsaS5jb20vd2ViX2FwaS90aW1lbGluZV9nbG9iYWwnLHt9KTtcXFxcbnZhciB5bTE9SlNPTi5wYXJzZSh5MSkucmVzdWx0W2FdLnNlYXNvbnM7XFxcXG52YXIgeTI9ZmV0Y2goJ2h0dHBzOi8vYmFuZ3VtaS5iaWxpYmlsaS5jb20vd2ViX2FwaS90aW1lbGluZV9jbicse30pO1xcXFxudmFyIHltMj1KU09OLnBhcnNlKHkyKS5yZXN1bHRbYV0uc2Vhc29ucztcXFxcbnZhciB5PXkxK3kyO1xcXFxuLy/lkIjlubbmjpLluo/lvIDlp4tcXFxcblxcXFxudmFyIHltPXltMS5jb25jYXQoeW0yKTtcXFxcblxcXFxudmFyIHRlbj1mZXRjaCgnaHR0cHM6Ly92LnFxLmNvbS9jaGFubmVsL2NhcnRvb24nLCB7aGVhZGVyczp7XFxcXFxcXCJVc2VyLUFnZW50XFxcXFxcXCI6UENfVUF9fSk7XFxcXG52YXIgeW0zPVtdO1xcXFxudmFyIHcgPSBuZXcgRGF0ZSgpLmdldERheSgpO1xcXFxudmFyIHZlPXc9PTA/Njoody0xKTtcXFxcbnZlPWE9PTY/dmU6KGE9PTU/KHZlLTEpOih2ZSsxKSk7XFxcXG52ZT12ZT09Nz8wOih2ZT09LTE/Njp2ZSk7XFxcXG52YXIgbGVuPXBhcnNlRG9tRm9yQXJyYXkodGVuLCcubW9kX2JkLDImJi5tb2RfZmlndXJlLCcrKHZlKzEpKycmJi5saXN0X2l0ZW0nKTtcXFxcbmZvcih2YXIgaSBpbiBsZW4pe1xcXFxudmFyIGJ0PXBhcnNlRG9tRm9ySHRtbChsZW5baV0sJ2EsMSYmdGl0bGUnKTtcXFxcbnZhciB1eno9cGFyc2VEb21Gb3JIdG1sKGxlbltpXSwnLmZpZ3VyZV9jYXB0aW9uJiZUZXh0Jyk7XFxcXG5pZih5LmluZGV4T2YoYnQucmVwbGFjZSgv56ysW1xcXFxcXFxcU10qP+Wtoy9nLCcnKSk9PS0xJiYhdXp6fHx1enouc2VhcmNoKC/lhah85a6M57uTLyk9PS0xKXtcXFxcbnZhciB1cj1wYXJzZURvbShsZW5baV0sJ2EmJmhyZWYnKTtcXFxcbnRyeXtcXFxcbnZhciBodG09SlNPTi5wYXJzZShmZXRjaCh1cix7fSkuc3BsaXQoJ0NPVkVSX0lORk8gPSAnKVsxXS5zcGxpdCgndmFyJylbMF0pO1xcXFxudmFyIHQ9aHRtLnVwZGF0ZV9ub3RpZnlfZGVzYztcXFxcbnZhciBsPWh0bS5ub21hbF9pZHM7XFxcXG59Y2F0Y2goZSl7fVxcXFxuaWYoIXR8fHQuc2VhcmNoKC/lhah85a6M57uTLyk9PS0xKXtcXFxcbnZhciB1ej0wO1xcXFxuZm9yKHZhciBqcyBpbiBsKXtpZihsW2pzXS5GPT0yfHxsW2pzXS5GPT03KXt1eisrO319XFxcXG5cXFxcbnRyeXtcXFxcbnZhciB1cGQ9J+acquefpSc7XFxcXG51cGQ9dC5yZXBsYWNlKC8oXFxcXFxcXFxkKinngrkoXFxcXFxcXFxkKinliIZ7MX0vZywnJDE6JDInKS5tYXRjaCgvXFxcXFxcXFxkezEsMn3vvJpcXFxcXFxcXGR7Mn18XFxcXFxcXFxkezEsMn06XFxcXFxcXFxkezJ9fFxcXFxcXFxcZHsxLDJ9KD8954K5KS9nKVswXTtcXFxcbnVwZD11cGQuaW5jbHVkZXMoJ++8micpP3VwZC5yZXBsYWNlKCfvvJonLCc6Jyk6dXBkO1xcXFxudXBkPXVwZC5pbmNsdWRlcygnOicpP3VwZDoodXBkKyc6MDAnKTtcXFxcblxcXFxudmFyIHNpaT1wYXJzZUludCh1cGQuc3BsaXQoJzonKVswXSwxMCkqNjArcGFyc2VJbnQodXBkLnNwbGl0KCc6JylbMV0sMTApO1xcXFxufWNhdGNoKGUpe3ZhciB1cGQ9J+acquefpSc7fVxcXFxuXFxcXG5pZih1cGQhPSfmnKrnn6UnKXtcXFxcblxcXFxuaWYoKGE9PTYmJnNpPHNpaSl8fGE9PTcpdXorKztcXFxcblxcXFxueW0zLnB1c2goe3RpdGxlOmJ0LFxcXFxucHViX3RpbWU6dXBkLFxcXFxuc3F1YXJlX2NvdmVyOnBhcnNlRG9tRm9ySHRtbChsZW5baV0sJ2ltZyYmbHpfbmV4dCcpLFxcXFxucHViX2luZGV4OifnrKwnK3V6Kyfor50nLFxcXFxudXJsOnVyXFxcXG59KTt9XFxcXG59XFxcXG59XFxcXG59XFxcXG55bT15bS5jb25jYXQoeW0zKTtcXFxcblxcXFxueW09eW0uc29ydChmdW5jdGlvbiB2KGEsYil7XFxcXG5cXFxcbnZhciBhYT1hLnB1Yl90aW1lO1xcXFxuXFxcXG52YXIgYz1wYXJzZUludChhYS5zcGxpdCgnOicpWzBdLDEwKSo2MCtwYXJzZUludChhYS5zcGxpdCgnOicpWzFdLDEwKTtcXFxcbnZhciBiYj1iLnB1Yl90aW1lO1xcXFxudmFyIGQ9cGFyc2VJbnQoYmIuc3BsaXQoJzonKVswXSwxMCkqNjArcGFyc2VJbnQoYmIuc3BsaXQoJzonKVsxXSwxMCk7XFxcXG5cXFxcbnJldHVybiBjLWQ7XFxcXG59KTtcXFxcblxcXFxuLy9kLnB1c2goe3RpdGxlOnltfSk7XFxcXG4vL+WQiOW5tuaOkuW6j+e7k+adn1xcXFxuXFxcXG5oPWg8MTA/KCcwJytoKTpoO1xcXFxubT1tPDEwPygnMCcrbSk6bTtcXFxcblxcXFxuZm9yKHZhcsKgacKgaW7CoHltKXtcXFxcblxcXFxudmFyIHRpPXltW2ldLnB1Yl90aW1lO1xcXFxuXFxcXG5pZihhPT02KXtcXFxcbnZhciBzaWk9cGFyc2VJbnQodGkuc3BsaXQoJzonKVswXSwxMCkqNjArcGFyc2VJbnQodGkuc3BsaXQoJzonKVsxXSwxMCk7XFxcXG5cXFxcblxcXFxuaWYoc2k8c2lpJiZjcz09MCl7XFxcXG5kLnB1c2goe3RpdGxlOiflvZPliY3ml7bpl7TvvJrigJzigJwnK2grJzonK20rJ+KAneKAnScsXFxcXG51cmw6YGhpa2VyOi8vZW1wdHlAbGF6eVJ1bGU9LmpzOnJlZnJlc2hQYWdlKGZhbHNlKTsndG9hc3Q6Ly/liLfmlrDlrozmr5XvvIEnYCxcXFxcbmRlc2M6J+eCueWHu+WIt+aWsCcsXFxcXG5jb2xfdHlwZTondGV4dF9jZW50ZXJfMSdcXFxcbn0pO1xcXFxuY3MrKztcXFxcbnN0PScnO1xcXFxufVxcXFxufVxcXFxuXFxcXG52YXIgbm49c3Q9PScnPyfljbPlsIbmm7TmlrAgJzon5bey5pu05paw6IezICc7XFxcXG52YXIgdT15bVtpXS51cmw7XFxcXG52YXIgYnQ9eW1baV0udGl0bGU7XFxcXG4vL2J0PWJ0LnNsaWNlKDAsMjUpKyhidC5sZW5ndGg+MjU/Jy4uLic6JycpO1xcXFxudmFyIHpmPWdldFZhcignbGIxJykuaW5jbHVkZXModSk/cGluKGJ0LHN0PT0nJz8wOjEpOmJ0O1xcXFxudmFyIGRlPSc8c3Ryb25nPicrbisnPC9zdHJvbmc+4oCY4oCY4oCZ4oCZPGZvbnQgY29sb3I9XFxcXFxcXCIjZmY4MDAwXFxcXFxcXCI+ICcrdGkrJyA8L2ZvbnQ+5pu05pawJztcXFxcbnN0MT15bVtpXS5wdWJfaW5kZXg/c3Q6Jyc7XFxcXG52YXIgZHI9eW1baV0uZGVsYXlfcmVhc29uO1xcXFxuZC5wdXNoKHtcXFxcblxcXFx0dGl0bGU6IHN0MSsoc3Q9PScnPyfigJzigJzigJ3igJ0nOicnKSsnPHN0cm9uZz4nK3pmKyc8L3N0cm9uZz4nKydcXFxcXFxcXG4nKyh5bVtpXS5wdWJfaW5kZXg/KG5uKyc8Zm9udCBjb2xvcj1cXFxcXFxcImJsdWVcXFxcXFxcIj4nKyh5bVtpXS5wdWJfaW5kZXgpKyc8L2ZvbnQ+Jyk6KCc8Zm9udCBjb2xvcj1cXFxcXFxcImdyZXlcXFxcXFxcIj4nKyfmnKzlkajlgZzmm7QgJyt5bVtpXS5kZWxheV9pbmRleCsnPC9mb250PicpKSxcXFxcbiAgZGVzYzohZHI/ZGU6KCc8ZGVsPicrZGUrJzwvZGVsPicpLFxcXFxuICBwaWNfdXJsOiB5bVtpXS5zcXVhcmVfY292ZXIrKHUuaW5jbHVkZXMoJ2JpbGliaWxpJyk/J0BSZWZlcmVyPWh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbSc6JycpLFxcXFxuXFxcXHR1cmw6dSsnIyMnK3ltW2ldLnRpdGxlKycmJicrdSsnJiYnK3ltW2ldLnNxdWFyZV9jb3ZlcisnIyMnLFxcXFxuXFxcXHRjb2xfdHlwZTogJ21vdmllXzEnXFxcXG59KTtcXFxcblxcXFxuaWYoYT09NiYmc2k+PXNpaSYmaT09eW0ubGVuZ3RoLTEpe1xcXFxuZC5wdXNoKHt0aXRsZTon5b2T5YmN5pe26Ze077ya4oCc4oCcJytoKyc6JyttKyfigJ3igJ0nLFxcXFxudXJsOmBoaWtlcjovL2VtcHR5QGxhenlSdWxlPS5qczpyZWZyZXNoUGFnZShmYWxzZSk7J3RvYXN0Oi8v5Yi35paw5a6M5q+V77yBJ2AsXFxcXG5kZXNjOifku4rml6Xnlarliaflt7Llhajpg6jmm7TmlrDvvIzmhJ/osKLkvb/nlKjvvIEnLFxcXFxuY29sX3R5cGU6J3RleHRfY2VudGVyXzEnXFxcXG59KTtcXFxcbn1cXFxcblxcXFxufVxcXFxufVxcXFxucmVzLmRhdGEgPSBkO1xcXFxuc2V0SG9tZVJlc3VsdChyZXMpO1xcXCIsXFxcImdyb3VwXFxcIjpcXFwi4pGi5Yqo5ryrXFxcIixcXFwiaWNvblxcXCI6XFxcImh0dHBzOi8vZ2ltZzAuYmFpZHUuY29tL2dpbWcvc3JjPWh0dHAlM0ElMkYlMkZnZG93bi5iYWlkdS5jb20lMkZpbWclMkYwJTJGNTEyXzUxMiUyRmExODk5NTUyZGIyYjRhYWZlMDBjOWNjMGZjYzc1NTdjLnBuZyZhcHA9MjAwOCZzaXplPWIyMTksMjE5Jm49MCZnPTBuJnNlYz0xNjM2MjAxNTgzJnQ9NDI4NzgzMGM5NjcwODUwYTQ2ZTc3ODVlYTk1MzA4MDNcXFwiLFxcXCJsYXN0X2NoYXB0ZXJfcnVsZVxcXCI6XFxcImpzOlxcXFxudmFyIHltPWdldFJlc0NvZGUoKTtcXFxcbnRyeXtcXFxcbmlmKE1ZX1VSTC5pbmNsdWRlcygnYmlsaWJpbGknKSl7XFxcXG52YXIgZXA9SlNPTi5wYXJzZSh5bS5zcGxpdCgnXFxcXFxcXCJlcExpc3RcXFxcXFxcIjonKVsxXS5zcGxpdCgnfV0nKVswXSsnfV0nKTsgXFxcXG52YXIgZ3h6PWVwW2VwLmxlbmd0aC0xXS50aXRsZTt9XFxcXG59Y2F0Y2goZSl7Z3h6PVxcXFxcXFwi5pu05paw5YaF5a656I635Y+W5aSx6LSl77yBXFxcXFxcXCI7fVxcXFxudHJ5e1xcXFxuaWYoTVlfVVJMLmluY2x1ZGVzKCdxcScpKXtcXFxcbnZhciBodG09SlNPTi5wYXJzZSh5bS5zcGxpdCgnQ09WRVJfSU5GTyA9ICcpWzFdLnNwbGl0KCd2YXInKVswXSk7XFxcXG52YXIgZ3h6PSfnrKwnK2h0bS5ub21hbF9pZHMuZmlsdGVyKGE9PntpZihhLkY9PTJ8fGEuRj09NylyZXR1cm4gYTt9KS5sZW5ndGgrJ+ivnSc7XFxcXG59XFxcXG59Y2F0Y2goZSl7Z3h6PVxcXFxcXFwi5pu05paw5YaF5a656I635Y+W5aSx6LSl77yBXFxcXFxcXCI7fVxcXFxuc2V0UmVzdWx0KCfmm7TmlrDoh7PvvJonK2d4eik7XFxcIixcXFwicGFnZUxpc3RcXFwiOltdLFxcXCJwYWdlc1xcXCI6XFxcIltdXFxcIixcXFwicHJlUnVsZVxcXCI6XFxcInB1dFZhcjIoJ2xiMScsIGZldGNoKFxcXFxcXFwiaGlrZXI6Ly9maWxlcy/nlarliafmm7TmlrDooagv5oiR55qE6L+955WqLnR4dFxcXFxcXFwiLCB7fSkpO1xcXFxuXFxcXG5cXFxcbnB1dFZhcjIoJ2xhMScsIGBAbGF6eVJ1bGU9LmpzOnZhciBsYj1mZXRjaChcXFxcXFxcImhpa2VyOi8vZmlsZXMv55Wq5Ymn5pu05paw6KGoL+aIkeeahOi/veeVqi50eHRcXFxcXFxcIix7fSk7aW5wdXQ9aW5wdXQuc3BsaXQoJyMnKVsxXTt2YXIgeHI9aW5wdXQrJywnK2xiO3dyaXRlRmlsZShcXFxcXFxcImhpa2VyOi8vZmlsZXMv55Wq5Ymn5pu05paw6KGoL+aIkeeahOi/veeVqi50eHRcXFxcXFxcIix4cik7cmVmcmVzaFBhZ2UoZmFsc2UpOyd0b2FzdDovL+i/veeVquaIkOWKnydgKTtcXFxcblxcXFxucHV0VmFyMignbGEyJywgYEBsYXp5UnVsZT0uanM6IHZhciBsYj1mZXRjaChcXFxcXFxcImhpa2VyOi8vZmlsZXMv55Wq5Ymn5pu05paw6KGoL+aIkeeahOi/veeVqi50eHRcXFxcXFxcIix7fSk7aW5wdXQ9aW5wdXQuc3BsaXQoJyMnKVsxXS5zcGxpdCgnJiYnKVswXTt2YXIgc2M9bmV3IFJlZ0V4cChpbnB1dCsnJiZbXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxzXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxTXSo/LCcsJ2cnKTt2YXIgeHI9bGIucmVwbGFjZShzYywnJyk7d3JpdGVGaWxlKFxcXFxcXFwiaGlrZXI6Ly9maWxlcy/nlarliafmm7TmlrDooagv5oiR55qE6L+955WqLnR4dFxcXFxcXFwiLHhyKTtyZWZyZXNoUGFnZShmYWxzZSk7J3RvYXN0Oi8v5Y+W5raI6L+955Wq5oiQ5Yqf77yBJ2ApO1xcXFxuXFxcXG5wdXRWYXIoJ3JDJywgYHZhciBtPVtdO3ZhciBsaT1mZXRjaChcXFxcXFxcImhpa2VyOi8vZmlsZXMv55Wq5Ymn5pu05paw6KGoL+aIkeeahOi/veeVqi50eHRcXFxcXFxcIix7fSkuc3BsaXQoJywnKS5maWx0ZXIoYT0+e3JldHVybiBhIT0nJzt9KTt2YXIgcz1pbnB1dC5zcGxpdCgnIyMnKTtpbnB1dD1zWzBdO2Zvcih2YXIgaSBpbiBsaSl7dmFyIGo9bGlbaV0uc3BsaXQoJyYmJyk7aWYoZ2V0VmFyKCd1cmwnKS5pbmNsdWRlcyhqWzFdKSl7alszXT1zWzFdO3ZhciBqMT1qLmpvaW4oJyYmJyk7bGkuc3BsaWNlKGksMSk7bT1tLmNvbmNhdChqMSxsaSkuam9pbignLCcpKycsJzt3cml0ZUZpbGUoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL+eVquWJp+abtOaWsOihqC/miJHnmoTov73nlaoudHh0XFxcXFxcXCIsbSk7YnJlYWs7fX1gKTtcXFxcblxcXFxuXFxcXG5wdXRWYXIyKCdhYScsIGBAcnVsZT1qczovKiovdmFyIHJlczEgPSB7fTt2YXIgZDEgPSBbXTt0cnl7dmFyIHltPWdldFJlc0NvZGUoKS5yZXBsYWNlKC9cXFxcXFxcXFxcXFxcXFxcdTAwMkYvZywnLycpO3RyeXt2YXIgcXVhbj1wYXJzZURvbUZvckh0bWwoeW0sJy5wZW9wbGVfbnVtJiZUZXh0Jyk7fWNhdGNoKGUpe3ZhciBxdWFuPScnO31wdXRWYXIoJ3VybCcsTVlfVVJMKTtmdW5jdGlvbiBjb2xvKGEpe3ZhciBsaT1mZXRjaChcXFxcXFxcImhpa2VyOi8vZmlsZXMv55Wq5Ymn5pu05paw6KGoL+aIkeeahOi/veeVqi50eHRcXFxcXFxcIix7fSkuc3BsaXQoJywnKS5maWx0ZXIoYT0+e3JldHVybiBhIT0nJzt9KTtmb3IodmFyIGkgaW4gbGkpe3ZhciBqPWxpW2ldLnNwbGl0KCcmJicpO2lmKGdldFZhcigndXJsJykuaW5jbHVkZXMoalsxXSkmJmoubGVuZ3RoPj00JiZhPT1qWzNdKXtpZihnZXRWYXIoJ3VybCcpLmluY2x1ZGVzKCdiaWxpYmlsaS5jb20nKSlyZXR1cm4gYSsnICDinJMnO2Vsc2UgcmV0dXJuICfigJzigJwnK2ErJ+KAneKAnSc7fX1yZXR1cm4gYTt9dmFyIGxiPWZldGNoKFxcXFxcXFwiaGlrZXI6Ly9maWxlcy/nlarliafmm7TmlrDooagv5oiR55qE6L+955WqLnR4dFxcXFxcXFwiLHt9KTt2YXIgbmFtPXBhcnNlRG9tRm9ySHRtbCh5bSwndGl0bGUmJlRleHQnKS5yZXBsYWNlKC8g56ysXFxcXFxcXFxcXFxcXFxcXGQr6ZuGfFxcXFxcXFxcXFxcXFxcXFxkK18vZywnJykuc3BsaXQoJ18nKVswXS5zcGxpdCgnLScpWzBdO3ZhciBpbmZvPU1ZX1VSTC5zcGxpdCgnIyMnKVsxXTtpZihpbmZvKXtpbmZvPWluZm8uc3BsaXQoJyYmJyk7aW5mb1swXT1uYW07IGluZm89aW5mby5qb2luKCcmJicpO3ZhciBxPWluZm8uc3BsaXQoJyYmJylbMV07aWYocS5zbGljZSgtMSk9PScvJylxPXEuc3BsaXQoJy8nKS5zbGljZSgwLC0xKS5qb2luKCcvJyk7IHZhciBwZD1sYi5pbmNsdWRlcyhxKTt2YXIgbGE9cGQ/Z2V0VmFyKCdsYTInKTpnZXRWYXIoJ2xhMScpO3RyeXt2YXIgd2o9ZmV0Y2goJ2hpa2VyOi8vZmlsZXMvY2FjaGUvTXlQYXJzZVNldC5qc29uJyx7fSk7aWYod2ohPScnKWV2YWwoZmV0Y2goSlNPTi5wYXJzZSh3aikuY2ose30pKTtlbHNle3ZhciB3aj1mZXRjaCgnaGlrZXI6Ly9maWxlcy9ydWxlcy9qcy9QYXJzZS1WMl9Ebi5qcycpO2V2YWwod2opO319Y2F0Y2goZSl7dmFyIHdqPWZldGNoKCdoaWtlcjovL2ZpbGVzL3J1bGVzL2pzL0xvY2FsUGFyc2VfRG4uanMnKTtldmFsKHdqKTt9dHJ5e2QxLnB1c2goeyB0aXRsZTppbmZvLnNwbGl0KCcmJicpWzBdLCBpbWc6aW5mby5zcGxpdCgnJiYnKVsyXSwgdXJsOnNldFVybCwgY29sX3R5cGU6ICdpY29uXzJfcm91bmQnIH0pO31jYXRjaChlKXtkMS5wdXNoKHsgdGl0bGU6aW5mby5zcGxpdCgnJiYnKVswXSwgaW1nOmluZm8uc3BsaXQoJyYmJylbMl0sIHVybDondG9hc3Q6Ly/ml6Dmj5Lku7bvvIzor7flronoo4Xmj5Lku7bvvIzlkKbliJnml6Dms5Xop6PmnpDvvIEnLCBjb2xfdHlwZTogJ2ljb25fMl9yb3VuZCcgfSk7fSBkMS5wdXNoKHsgdGl0bGU6KHBkPyfigJjigJjlj5bmtojov73nlarigJnigJknOifigJzigJwr6L+955Wq4oCd4oCdJyksIHVybDonaGlrZXI6Ly9lbXB0eSMnK2luZm8rbGEsIGNvbF90eXBlOiAndGV4dF8yJyB9KTt9IGQxLnB1c2goe2Rlc2M6JzAnLGNvbF90eXBlOiAneDVfd2Vidmlld19zaW5nbGUnfSk7IHRyeXt2YXIgZGVzPUpTT04ucGFyc2UoeW0uc3BsaXQoJ25ld2VzdEVwXFxcXFxcXCI6JylbMV0uc3BsaXQoJ30nKVswXSsnfScpLmRlc2M7fWNhdGNoKGUpe3ZhciBodG09SlNPTi5wYXJzZSh5bS5zcGxpdCgnQ09WRVJfSU5GTyA9ICcpWzFdLnNwbGl0KCd2YXIgJylbMF0udHJpbSgpKTt2YXIgZGVzPWh0bS51cGRhdGVfbm90aWZ5X2Rlc2M7aWYoIWRlcylkZXM9aHRtLnNlY29uZF90aXRsZTt9ZDEucHVzaCh7dGl0bGU6Jzxmb250IGNvbG9yPVxcXFxcXFwicHVycGxlXFxcXFxcXCI+PHN0cm9uZz48YmlnPicrbmFtKyc8L2JpZz48L3N0cm9uZz48L2ZvbnQ+JysnXFxcXFxcXFxcXFxcXFxcXG7igJzigJznirbmgIHvvJonK2Rlcysn4oCd4oCd44CCPGZvbnQgY29sb3I9XFxcXFxcXCJibHVlXFxcXFxcXCI+JytxdWFuKyc8L2ZvbnQ+Jyx1cmw6J2hpa2VyOi8vc2VhcmNoP3M9JytuYW0rJyZncm91cD3ikaDliqjmvKvotYTmupAnLGNvbF90eXBlOid0ZXh0XzEnfSk7ZDEucHVzaCh7Y29sX3R5cGU6J2JpZ19ibGFua19ibG9jayd9KTtpZih5bS5pbmNsdWRlcygnXFxcXFxcXCJlcExpc3RcXFxcXFxcIjpbJykpeyB2YXIgZXA9SlNPTi5wYXJzZSh5bS5zcGxpdCgnXFxcXFxcXCJlcExpc3RcXFxcXFxcIjonKVsxXS5zcGxpdCgnfV0nKVswXSsnfV0nKTsgdHJ5e2xhcnU9bGF6eTt9Y2F0Y2goZSl7bGFydT0nY29uZmlybTovL+aXoOino+aekOaPkuS7tu+8jOS9huW3suiusOW9lei2s+i/ue+8gSc7fWZvcih2YXIgaT0wO2k8ZXAubGVuZ3RoO2krKyl7IGQxLnB1c2goeyB0aXRsZTpjb2xvKGVwW2ldLnRpdGxlKSwgaW1nOmVwW2ldLmNvdmVyLCBkZXNjOmVwW2ldLmxvbmdfdGl0bGUsdXJsOmVwW2ldLmxpbmsrJyMjJytlcFtpXS50aXRsZStcXFxcXFxcIkBsYXp5UnVsZT0uanM6XFxcXFxcXCIrZ2V0VmFyKCdyQycpK2xhcnV9KTt9aWYoeW0uaW5kZXhPZignXFxcXFxcXCJzZWFzb25MaXN0XFxcXFxcXCI6W3snKT4tMSl7ZDEucHVzaCh7Y29sX3R5cGU6J2xpbmUnfSk7ZDEucHVzaCh7dGl0bGU6KGdldFZhcigneGwnKT09JzEnPyfigJzigJziipnmm7TlpJrns7vliJfigJ3igJ0nOifigJjigJjiipXmm7TlpJrns7vliJfigJnigJknKSx1cmw6J2hpa2VyOi8vZW1wdHkjJytnZXRWYXIoJ3hsJykrXFxcXFxcXFxgQGxhenlSdWxlPS5qczp2YXIgYT1pbnB1dC5zcGxpdCgnIycpWzFdO2lmKGE9PScxJyl7cHV0VmFyMigneGwnLCcnKTt9ZWxzZXtwdXRWYXIyKCd4bCcsJzEnKTt9cmVmcmVzaFBhZ2UoZmFsc2UpO2E9PScxJz8ndG9hc3Q6Ly/lt7LmlLbotbcnOid0b2FzdDovL+W3suWxleW8gCdcXFxcXFxcXGAsY29sX3R5cGU6J3RleHRfMid9KTtkMS5wdXNoKHt0aXRsZTooZ2V0VmFyKCd0aicpPT0nMSc/J+KAnOKAnOKKmeabtOWkmuaOqOiNkOKAneKAnSc6J+KAmOKAmOKKleabtOWkmuaOqOiNkOKAmeKAmScpLHVybDonaGlrZXI6Ly9lbXB0eSMnK2dldFZhcigndGonKStcXFxcXFxcXGBAbGF6eVJ1bGU9LmpzOnZhciBhPWlucHV0LnNwbGl0KCcjJylbMV07aWYoYT09JzEnKXtwdXRWYXIyKCd0aicsJycpO31lbHNle3B1dFZhcjIoJ3RqJywnMScpO31yZWZyZXNoUGFnZShmYWxzZSk7YT09JzEnPyd0b2FzdDovL+W3suaUtui1tyc6J3RvYXN0Oi8v5bey5bGV5byAJ1xcXFxcXFxcYCxjb2xfdHlwZTondGV4dF8yJ30pO2lmKGdldFZhcigneGwnKT09JzEnKXsgdmFyIHRqPUpTT04ucGFyc2UoeW0uc3BsaXQoJ1xcXFxcXFwic2Vhc29uTGlzdFxcXFxcXFwiOicpWzFdLnNwbGl0KCd9XScpWzBdKyd9XScpOyBmb3IodmFyIG89MDt0aiE9bnVsbCYmbzx0ai5sZW5ndGg7bysrKXt2YXIgY3U9TVlfVVJMLmluY2x1ZGVzKHRqW29dLnNlYXNvbl9pZCk/JyAg4pyTJzonJzt2YXIgc3g9TVlfVVJMLmluY2x1ZGVzKHRqW29dLnNlYXNvbl9pZCk/XFxcXFxcXCJAbGF6eVJ1bGU9LmpzOnJlZnJlc2hQYWdlKGZhbHNlKTsndG9hc3Q6Ly/lt7LliLfmlrDvvIEnO1xcXFxcXFwiOmdldFZhcignYWEnKTtkMS5wdXNoKHsgdGl0bGU6dGpbb10uc2Vhc29uX3RpdGxlK2N1LGltZzp0altvXS5jb3ZlcixkZXNjOnRqW29dLmluZGV4X3Nob3csIHVybDonaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL2Jhbmd1bWkvcGxheS9zcycrdGpbb10uc2Vhc29uX2lkKycjIycrbmFtKycgJyt0altvXS5zZWFzb25fdGl0bGUrJyYmJysnaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL2Jhbmd1bWkvcGxheS9zcycrdGpbb10uc2Vhc29uX2lkKycmJicrdGpbb10uY292ZXIrJyMjJytzeCwgY29sX3R5cGU6J21vdmllXzInIH0pO31wdXRWYXIyKCd4bCcsJycpO319dmFyIHJlYz1KU09OLnBhcnNlKGZldGNoKCdodHRwczovL2FwaS5iaWxpYmlsaS5jb20vcGdjL3NlYXNvbi93ZWIvcmVsYXRlZC9yZWNvbW1lbmQ/c2Vhc29uX2lkPScrTVlfVVJMLnNwbGl0KCdzcycpWzFdLHt9KSkuZGF0YS5zZWFzb247aWYoZ2V0VmFyKCd0aicpPT0nMScpe2ZvcihpPTA7aTxyZWMubGVuZ3RoO2krKyl7ZDEucHVzaCh7IHRpdGxlOnJlY1tpXS50aXRsZSxpbWc6cmVjW2ldLm5ld19lcC5jb3ZlcixkZXNjOnJlY1tpXS5uZXdfZXAuaW5kZXhfc2hvdyx1cmw6cmVjW2ldLnVybCsnIyMnK3JlY1tpXS50aXRsZSsnJiYnK3JlY1tpXSsnJiYnK3JlY1tpXS5uZXdfZXAuY292ZXIrJyMjJytnZXRWYXIoJ2FhJyksIGNvbF90eXBlOidtb3ZpZV8yJyB9KTt9cHV0VmFyMigndGonLCcnKTt9fWVsc2V7dmFyIGxlPWh0bS5ub21hbF9pZHM7dmFyIHVyPU1ZX1VSTC5pbmNsdWRlcygnaW5kZXguaHRtJyk/KCdodHRwczovL3YucXEuY29tL3gvY292ZXIvJytodG0uaWQpOk1ZX1VSTC5zcGxpdCgnLmh0bWwnKVswXTt2YXIgaD0xO2Zvcih2YXIgaSBpbiBsZSl7aWYobGVbaV0uRj09Mnx8bGVbaV0uRj09Nyl7ZDEucHVzaCh7dGl0bGU6Y29sbygn56ysJytoKyfor50nKSx1cmw6dXIrJy8nK2xlW2ldLlYrJy5odG1sIyPnrKwnK2grJ+ivnScrJ0BsYXp5UnVsZT0uanM6JytnZXRWYXIoJ3JDJykrbGF6eSxjb2xfdHlwZTondGV4dF8zJ30pO2grKzt9fX19Y2F0Y2goZSl7ZDEucHVzaCh7dGl0bGU6J+KAnOKAnOS8keaBr+WQp++8jOi/veeVquS5n+S4jeimgei/meS5iOaLvO+8geKAneKAnScsY29sX3R5cGU6J3RleHRfY2VudGVyXzEnfSk7fXJlczEuZGF0YSA9IGQxOyBzZXRIb21lUmVzdWx0KHJlczEpO2ApO1xcXCIsXFxcInNkZXRhaWxfY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8xXFxcIixcXFwic2RldGFpbF9maW5kX3J1bGVcXFwiOlxcXCIqXFxcIixcXFwic2VhcmNoRmluZFxcXCI6XFxcImpzOi8vMjI5XFxcXG52YXIgcmVzID0ge307XFxcXG52YXIgZCA9IFtdO1xcXFxudmFyIG5hPU1ZX1VSTC5zcGxpdCgnIycpWzFdO1xcXFxudmFyIGxiMT1mZXRjaChcXFxcXFxcImhpa2VyOi8vZmlsZXMv55Wq5Ymn5pu05paw6KGoL+aIkeeahOi/veeVqi50eHRcXFxcXFxcIiwge30pO1xcXFxudmFyIHg9WydtZWRpYV9iYW5ndW1pJywnbWVkaWFfZnQnXTtcXFxcbnZhciB5PVtdO1xcXFxuLy90cnl7XFxcXG5mb3IodmFyIGpqPTA7amo8eC5sZW5ndGg7amorKyl7XFxcXG52YXIgeW0xPUpTT04ucGFyc2UoZmV0Y2goJ2h0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3dlYi1pbnRlcmZhY2Uvc2VhcmNoL3R5cGU/a2V5d29yZD0nK25hKycmcGFnZT0xJnNlYXJjaF90eXBlPScreFtqal0rJyZvcmRlcj10b3RhbHJhbmsmcGFnZXNpemU9MjAnLHt9KSkuZGF0YS5udW1QYWdlcztcXFxcbmZvcih2YXIgaj0xLGc9MDtqPD15bTEmJmo8NTtqKyspe1xcXFxudmFyIHkxPUpTT04ucGFyc2UoZmV0Y2goJ2h0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3dlYi1pbnRlcmZhY2Uvc2VhcmNoL3R5cGU/a2V5d29yZD0nK25hKycmcGFnZT0nK2orJyZzZWFyY2hfdHlwZT0nK3hbampdKycmb3JkZXI9dG90YWxyYW5rJnBhZ2VzaXplPTIwJyx7fSkpLmRhdGEucmVzdWx0O1xcXFxudmFyIHk9eS5jb25jYXQoeTEpO319XFxcXG5mb3IodmFyIGk9MDt5IT1udWxsJiZpPHkubGVuZ3RoO2krKyl7XFxcXG52YXIgdGk9eVtpXS50aXRsZS5yZXBsYWNlKC88ZW0gY2xhc3M9XFxcXFxcXCJrZXl3b3JkXFxcXFxcXCI+fDxcXFxcXFxcXC9lbT4vZywnJyk7XFxcXG5pZigoSlNPTi5zdHJpbmdpZnkoeSkuaW5jbHVkZXMobmEpJiZ0aS5pbmNsdWRlcyhuYSkpfHwhSlNPTi5zdHJpbmdpZnkoeSkuaW5jbHVkZXMobmEpKXtcXFxcbnZhciB6Zj1sYjEuaW5jbHVkZXMoJ3NzJyt5W2ldLnNlYXNvbl9pZCk/JzxzbWFsbD7miJHnmoTov73nlaogPC9zbWFsbD4nOicnO1xcXFxuZC5wdXNoKHtcXFxcbnRpdGxlOnpmK3RpLFxcXFxuaW1nOnlbaV0uY292ZXIrJ0BSZWZlcmVyPWh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbScsXFxcXG5kZXNjOnlbaV0uc3R5bGVzLFxcXFxuY29udGVudDp5W2ldLmRlc2MsXFxcXG51cmw6eVtpXS5nb3RvX3VybCsnIyMnK3RpKycmJmh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9iYW5ndW1pL3BsYXkvc3MnK3lbaV0uc2Vhc29uX2lkKycmJicreVtpXS5jb3ZlcisnIyMnLFxcXFxufSk7XFxcXG5nKys7XFxcXG59XFxcXG5pZihnPT04KXtqPTY7YnJlYWs7fVxcXFxufS8vfWNhdGNoKGUpe31cXFxcbnRyeXtcXFxcbnZhciB5bT1mZXRjaCgnaHR0cHM6Ly92LnFxLmNvbS94L3NlYXJjaC8/cT0nK01ZX1VSTC5zcGxpdCgnIycpWzFdLHtoZWFkZXJzOntcXFxcXFxcIlVzZXItQWdlbnRcXFxcXFxcIjpQQ19VQX19KTtcXFxcbnZhciBsZW49cGFyc2VEb21Gb3JBcnJheSh5bSwnLl9pbmZvcycpO1xcXFxudHJ5e1xcXFxudmFyIGxlbjE9cGFyc2VEb21Gb3JBcnJheSh5bSwnLmZpZ3VyZXNfbGlzdCYmLmxpc3RfaXRlbScpO1xcXFxubGVuPWxlbi5jb25jYXQobGVuMSk7XFxcXG59Y2F0Y2goZSl7fVxcXFxuZm9yKHZhciBqIGluIGxlbil7XFxcXG50cnl7dmFyIGRlcz1wYXJzZURvbUZvckh0bWwobGVuW2pdLCcuZmlndXJlX2NhcHRpb258fC5yZXN1bHRfc2NvcmV8fC5maWd1cmVfZGVzYyYmVGV4dCcpO1xcXFxuZj1kZXMuc3BsaXQoJzonKS5tYXAoTnVtYmVyKTtcXFxcbnZhciB0aW1lPWZbMF0qMzYwMCtmWzFdKjYwK2ZbMl07XFxcXG5cXFxcbn1jYXRjaChlKXt2YXIgZGVzPScnO31cXFxcblxcXFxudHJ5e3ZhciB5Zz1wYXJzZURvbUZvckh0bWwobGVuW2pdLCcubWFya192JiZpbWcmJmFsdCcpO31jYXRjaChlKXt2YXIgeWc9J+ayoeaciSc7fVxcXFxuXFxcXG52YXIgdXI9cGFyc2VEb21Gb3JIdG1sKGxlbltqXSwnYSYmaHJlZicpO1xcXFxuaWYoIXVyLmluY2x1ZGVzKCdzZWFyY2hfcmVkaXJlY3QnKSYmIXlnLmluY2x1ZGVzKCfpooTlkYonKSYmKHRpbWU+NSo2MHx8aXNOYU4odGltZSkpKXtcXFxcbnRyeXt2YXIgY29uPXBhcnNlRG9tRm9ySHRtbChsZW5bal0sJy5kZXNjX3RleHQmJlRleHQnKTt9Y2F0Y2goZSl7dmFyIGNvbj0nJzt9XFxcXG52YXIgYnQ9cGFyc2VEb21Gb3JIdG1sKGxlbltqXSwnaW1nJiZhbHQnKTtcXFxcbnZhciBwaT1wYXJzZURvbUZvckh0bWwobGVuW2pdLCdpbWcmJnNyYycpO1xcXFxudmFyIHpmPWdldFZhcignbGIxJykuaW5jbHVkZXModXIpPyc8c21hbGw+5oiR55qE6L+955WqIDwvc21hbGw+JzonJztcXFxcbmQucHVzaCh7XFxcXG5cXFxcdHRpdGxlOiB6ZitidCwgXFxcXG5kZXNjOmRlcyxcXFxcbmNvbnRlbnQ6Y29uLFxcXFxuICBwaWNfdXJsOnBpLFxcXFxuXFxcXHR1cmw6dXIrJyMjJytidCsnJiYnK3VyKycmJicrcGkrJyMjJyxcXFxcbn0pO1xcXFxufVxcXFxufVxcXFxufWNhdGNoKGUpe31cXFxcbnJlcy5kYXRhID0gZDtcXFxcbnNldFNlYXJjaFJlc3VsdChyZXMpO1xcXCIsXFxcInNlYXJjaF91cmxcXFwiOlxcXCJoaWtlcjovL2VtcHR5IyoqXFxcIixcXFwic29ydF9uYW1lXFxcIjpcXFwiXFxcIixcXFwic29ydF91cmxcXFwiOlxcXCJcXFwiLFxcXCJ0aXRsZVxcXCI6XFxcIuaWsOeVquabtOaWsOihqFxcXCIsXFxcInRpdGxlQ29sb3JcXFwiOlxcXCJcXFwiLFxcXCJ1YVxcXCI6XFxcIm1vYmlsZVxcXCIsXFxcInVybFxcXCI6XFxcImhpa2VyOi8vZW1wdHkjZnlwYWdlXFxcIixcXFwidmVyc2lvblxcXCI6MCxcXFwidmlzaWJsZVxcXCI6dHJ1ZSxcXFwieWVhcl9uYW1lXFxcIjpcXFwiXFxcIixcXFwieWVhcl91cmxcXFwiOlxcXCJcXFwifX1cIixcInNhdmVkXCI6ZmFsc2UsXCJ0aXRsZVwiOlwi5Yqo5ryr5ZCI6ZuGXCIsXCJ2ZXJzaW9uXCI6MCxcInVybFwiOlwiaGlrZXI6Ly9wYWdlL2luZGV4TG9hZD8jZnlwYWdlI25vSGlzdG9yeSNcIixcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJmaW5kX3J1bGVcIjpcImpzOlxcbmxldCBteUNvbGxlY3Rpb25fZWwgPSBbXSxcXG4gICAgcGFnZU51bSA9IHBhcnNlSW50KE1ZX1VSTC5zcGxpdCgnIycpWzFdKSxcXG4gICAgUlVMRSA9IE1ZX1BBUkFNUy5SVUxFLFxcbiAgICBmeUFsbCA9IFJVTEUudXJsLmluY2x1ZGVzKCdmeUFsbCcpLFxcbiAgICAvLyDliqDovb1DbGFzc1RhYue7hOS7tlxcbiAgICBDbGFzc1RhYiA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL0NsYXNzVGFiP3J1bGU9JyArIGdldEl0ZW0oJ215Q29sbGVjdGlvbicpKSxcXG4gICAgdGFiSGVhZGVyID0gW11cXG5cXG5pZiAoUlVMRS5jbGFzc19uYW1lKSB0YWJIZWFkZXIucHVzaCh7XFxuICAgIGlkOiBmeUFsbCA/ICdmeUFsbCcgOiAnZnljbGFzcycsXFxuICAgIGNsYXNzX25hbWU6IFJVTEUuY2xhc3NfbmFtZSxcXG4gICAgY2xhc3NfdXJsOiBSVUxFLmNsYXNzX3VybFxcbn0pXFxuaWYgKFJVTEUuYXJlYV9uYW1lKSB0YWJIZWFkZXIucHVzaCh7XFxuICAgIGlkOiBmeUFsbCA/ICdmeUFsbCcgOiAnZnlhcmVhJyxcXG4gICAgY2xhc3NfbmFtZTogUlVMRS5hcmVhX25hbWUsXFxuICAgIGNsYXNzX3VybDogUlVMRS5hcmVhX3VybFxcbn0pXFxuaWYgKFJVTEUueWVhcl9uYW1lKSB0YWJIZWFkZXIucHVzaCh7XFxuICAgIGlkOiBmeUFsbCA/ICdmeUFsbCcgOiAnZnl5ZWFyJyxcXG4gICAgY2xhc3NfbmFtZTogUlVMRS55ZWFyX25hbWUsXFxuICAgIGNsYXNzX3VybDogUlVMRS55ZWFyX3VybFxcbn0pXFxuaWYgKFJVTEUuc29ydF9uYW1lKSB0YWJIZWFkZXIucHVzaCh7XFxuICAgIGlkOiBmeUFsbCA/ICdmeUFsbCcgOiAnZnlzb3J0JyxcXG4gICAgY2xhc3NfbmFtZTogUlVMRS5zb3J0X25hbWUsXFxuICAgIGNsYXNzX3VybDogUlVMRS5zb3J0X3VybFxcbn0pXFxudGFiSGVhZGVyID0gbmV3IENsYXNzVGFiKHRhYkhlYWRlciwgeyBuYW1lOiBSVUxFLnRpdGxlIH0pXFxuaWYgKHBhZ2VOdW0gPT0gMSkge1xcbiAgICBhZGRMaXN0ZW5lcignb25DbG9zZScsICdjbGVhclZhcihcXFwibXlDb2xsZWN0aW9uLXNlYXJjaE1vZGVcXFwiKScpXFxuICAgIHB1dFZhcignbXlDb2xsZWN0aW9uLXNlYXJjaE1vZGUnLCBSVUxFLnRpdGxlKVxcbiAgICB0YWJIZWFkZXIubG9hZChteUNvbGxlY3Rpb25fZWwpXFxuICAgIGlmIChSVUxFLnNlYXJjaF91cmwpIG15Q29sbGVjdGlvbl9lbC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi5pCc57SiXFxcIixcXG4gICAgICAgIGRlc2M6IFxcXCLmkJzkvaDmg7PopoHnmoQuLi5cXFwiLFxcbiAgICAgICAgdXJsOiAnXFxcImhpa2VyOi8vcGFnZS9zaW5nbGVTZWFyY2g/a2V5d29yZD1cXFwiK2lucHV0K1xcXCImcGFnZT1meXBhZ2VcXFwiJyxcXG4gICAgICAgIGV4dHJhOiB7IHJ1bGU6IGdldEl0ZW0oJ215Q29sbGVjdGlvbicpLCBSVUxFOiBSVUxFIH0sXFxuICAgICAgICBjb2xfdHlwZTogXFxcImlucHV0XFxcIixcXG4gICAgfSlcXG59XFxuLy8g5aSE55CGTVlfVVJM5ZKMTVlfUlVMRVxcbk1ZX1JVTEUudWEgPSBSVUxFLnVhXFxuTVlfUlVMRS50aXRsZSA9IFJVTEUudGl0bGVcXG5NWV9SVUxFLmNvbF90eXBlID0gUlVMRS5jb2xfdHlwZVxcbk1ZX1JVTEUuZGV0YWlsX2NvbF90eXBlID0gUlVMRS5kZXRhaWxfY29sX3R5cGVcXG5NWV9SVUxFLmZpbmRfcnVsZSA9IFJVTEUuZmluZF9ydWxlXFxuTVlfUlVMRS5kZXRhaWxfZmluZF9ydWxlID0gUlVMRS5kZXRhaWxfZmluZF9ydWxlXFxuTVlfUlVMRS5wcmVSdWxlID0gUlVMRS5wcmVSdWxlXFxuTVlfUlVMRS5wYWdlTGlzdCA9IEpTT04ucGFyc2UoUlVMRS5wYWdlcyB8fCAnW10nKVxcbk1ZX1JVTEUucGFnZXMgPSBKU09OLnN0cmluZ2lmeShNWV9SVUxFLnBhZ2VMaXN0KVxcbk1ZX1JVTEUubGFzdF9jaGFwdGVyX3J1bGUgPSBSVUxFLmxhc3RfY2hhcHRlcl9ydWxlXFxuTVlfUlVMRS5wYXJhbXMgPSB7fVxcblxcbmNvbnN0IHsgcnVuQ29kZSwgdXJsUGFyc2UgfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL3V0aWxpdHk/cnVsZT0nICsgZ2V0SXRlbSgnbXlDb2xsZWN0aW9uJykpXFxudmFyIHsgTVlfVVJMLCBNWV9VUkxfT3B0aW9ucyB9ID0gdXJsUGFyc2UoUlVMRS51cmwsIHt9LCBwYWdlTnVtLCAodXJsKSA9PiB7XFxuICAgIHVybFswXSA9IGZ5QWxsID8gdXJsWzBdLnJlcGxhY2UoL2Z5QWxsL2csICckJHtmeUFsbH0nKSA6IHVybFswXS5yZXBsYWNlKC9meShjbGFzc3xhcmVhfHllYXJ8c29ydCkvZywgJyQke2Z5JDF9JylcXG4gICAgdXJsWzBdID0gdGFiSGVhZGVyLnNldFVybCh1cmxbMF0pXFxufSksXFxuICAgIGluZGV4SHRtbCA9IGZldGNoKE1ZX1VSTCwgTVlfVVJMX09wdGlvbnMpXFxuTVlfUlVMRS51cmwgPSBNWV9VUkxcXG5NWV9SVUxFLnVybEhlYWRlcnMgPSBNWV9VUkxfT3B0aW9ucy5oZWFkZXJzXFxubG9nKE1ZX1VSTClcXG4vLyDmraPmlofop6PmnpBcXG5pZiAocGFnZU51bSA9PSAxKSBldmFsKE1ZX1JVTEUucHJlUnVsZSlcXG5pZiAoTVlfUlVMRS5maW5kX3J1bGUuc3RhcnRzV2l0aCgnanM6JykpIHtcXG4gICAgZnVuY3Rpb24gZ2V0VXJsKCkge1xcbiAgICAgICAgcmV0dXJuIE1ZX1VSTFxcbiAgICB9XFxuXFxuICAgIGZ1bmN0aW9uIGdldFJlc0NvZGUoKSB7XFxuICAgICAgICByZXR1cm4gaW5kZXhIdG1sXFxuICAgIH1cXG5cXG4gICAgZnVuY3Rpb24gc2V0UmVzdWx0KGVsLCBwYXJhbTEsIHBhcmFtMiwgcGFyYW0zKSB7XFxuICAgICAgICBwYXJhbTEgPSBDQUxMQkFDS19LRVlcXG4gICAgICAgIHBhcmFtMiA9IE1ZX1JVTEVcXG4gICAgICAgIHBhcmFtMyA9IE1ZX1RZUEVcXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGVsLmRhdGEpKSBlbCA9IGVsLmRhdGFcXG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KG15Q29sbGVjdGlvbl9lbCwgZWwubWFwKCh2KSA9PiB7XFxuICAgICAgICAgICAgbGV0IE1ZX19SVUxFID0gT2JqZWN0LmFzc2lnbih7fSwgTVlfUlVMRSlcXG4gICAgICAgICAgICB2LmNvbF90eXBlID0gdi5jb2xfdHlwZSB8fCBNWV9SVUxFLmNvbF90eXBlXFxuXFxuICAgICAgICAgICAgaWYgKCF2LnVybCkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdlxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodi51cmwuaW5jbHVkZXMoJ0BydWxlPScpKSB7XFxuICAgICAgICAgICAgICAgIGxldCBbXywgdXJsLCBydWxlXSA9IHYudXJsLm1hdGNoKC9eKFtcXFxcc1xcXFxTXSo/KUBydWxlPShbXFxcXHNcXFxcU10qKSQvKVxcbiAgICAgICAgICAgICAgICB2LnVybCA9IHVybFxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5kZXRhaWxfZmluZF9ydWxlID0gcnVsZVxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5kZXRhaWxfY29sX3R5cGUgPSBNWV9SVUxFLmNvbF90eXBlXFxuICAgICAgICAgICAgfSBlbHNlIGlmICh2LnVybC5zdGFydHNXaXRoKCdoaWtlcjovL3BhZ2UvJykpIHtcXG4gICAgICAgICAgICAgICAgaWYgKHYudXJsLmluY2x1ZGVzKCdydWxlPScpIHx8ICh2LmV4dHJhIHx8IHt9KS5ydWxlKVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZcXG4gICAgICAgICAgICAgICAgbGV0IFtfLCBwYXRoLCBwYXJhbXNdID0gdi51cmwuc3BsaXQoJyMnKVswXS5tYXRjaCgvXmhpa2VyOlxcXFwvXFxcXC9wYWdlXFxcXC8oLis/KSg/OlxcXFw/KC4qKSk/JC8pLFxcbiAgICAgICAgICAgICAgICAgICAgc3ViUGFnZSA9IE1ZX1JVTEUucGFnZUxpc3QuZmluZCgodikgPT4gdi5wYXRoID09IHBhdGgpLFxcbiAgICAgICAgICAgICAgICAgICAgc3ViVXJsID0gKHBhcmFtcyB8fCAnJykuc3BsaXQoJyYnKS5maW5kKCh2KSA9PiB2LnN0YXJ0c1dpdGgoJ3VybD0nKSlcXG4gICAgICAgICAgICAgICAgdi51cmwgPSBzdWJVcmwgPyBzdWJVcmwuc2xpY2UoNCkucmVwbGFjZSgv77yf77yfL2csICc/JykucmVwbGFjZSgv77yG77yGL2csICcmJykgOiAodi5leHRyYSB8fCB7fSkudXJsIHx8ICdoaWtlcjovL2VtcHR5PycgKyAocGFyYW1zIHx8ICcnKVxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5kZXRhaWxfZmluZF9ydWxlID0gc3ViUGFnZS5ydWxlXFxuICAgICAgICAgICAgICAgIE1ZX19SVUxFLmRldGFpbF9jb2xfdHlwZSA9IHN1YlBhZ2UuY29sX3R5cGVcXG4gICAgICAgICAgICAgICAgTVlfX1JVTEUucGFyYW1zID0gdi5leHRyYSB8fCB7fVxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodi51cmwuaW5jbHVkZXMoJ0BsYXp5UnVsZT0nKSkge1xcbiAgICAgICAgICAgICAgICB2LnVybCA9IHYudXJsLnJlcGxhY2UoJy5qczonLCAnLmpzOlxcXFxuaWYoTVlfUlVMRSlPYmplY3QuYXNzaWduKE1ZX1JVTEUsJyArICQuc3RyaW5naWZ5KHsgcGFnZXM6IE1ZX1JVTEUucGFnZXMsIHBhZ2VMaXN0OiBNWV9SVUxFLnBhZ2VMaXN0LCBmaW5kX3J1bGU6ICcnLCBwYXJhbXM6ICcnIH0pICsgJyk7TVlfVVJMPVxcXCInICsgTVlfVVJMICsgJ1xcXCI7JylcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFNWV9SVUxFLmRldGFpbF9maW5kX3J1bGUgfHwgdi51cmwuc3RhcnRzV2l0aCgnaGlrZXI6Ly8nKSkgeyByZXR1cm4gdiB9XFxuICAgICAgICAgICAgdi5leHRyYSA9IHsgdXJsOiB2LnVybCwgUlVMRTogTVlfX1JVTEUsIHBhZ2VUaXRsZTogdi50aXRsZSB9XFxuICAgICAgICAgICAgdi51cmwgPSAnaGlrZXI6Ly9wYWdlL2RldGFpbExvYWQ/cnVsZT0nICsgZ2V0SXRlbSgnbXlDb2xsZWN0aW9uJylcXG4gICAgICAgICAgICBpZiAodi5leHRyYS5SVUxFLnVybC5pbmNsdWRlcygnI2ltbWVyc2l2ZVRoZW1lIycpKSB2LnVybCArPSAnJiNpbW1lcnNpdmVUaGVtZSMnXFxuICAgICAgICAgICAgcmV0dXJuIHZcXG4gICAgICAgIH0pKVxcbiAgICAgICAgbWV0aG9kX3NldFJlc3VsdC5pbnZva2UoamF2YUNvbnRleHQsIG15Q29sbGVjdGlvbl9lbCwgcGFyYW0xLCBwYXJhbTIsIHBhcmFtMylcXG4gICAgfVxcbiAgICBzZXRIb21lUmVzdWx0ID0gc2V0UmVzdWx0XFxuICAgIHNldFNlYXJjaFJlc3VsdCA9IHNldFJlc3VsdFxcblxcbiAgICBldmFsKE1ZX1JVTEUuZmluZF9ydWxlLnNsaWNlKDMpKVxcbn0gZWxzZSB7XFxuICAgIGxldCBmaW5kUnVsZSA9IE1ZX1JVTEUuZmluZF9ydWxlLnNwbGl0KCc7JylcXG4gICAgcGFyc2VEb21Gb3JBcnJheShpbmRleEh0bWwsIGZpbmRSdWxlLnNoaWZ0KCkpLmZvckVhY2goKGRhdGEpID0+IHtcXG4gICAgICAgIGxldCBbdGl0bGUsIGltZywgZGVzYywgdXJsXSA9IGZpbmRSdWxlLm1hcCgodiwgaSkgPT4ge1xcbiAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKHYgPT0gJyonKSByZXR1cm4gJydcXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgdiA9IChpID09IDEgfHwgaSA9PSAzKSA/XFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VEb20oZGF0YSwgdikgOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRG9tRm9ySHRtbChkYXRhLCB2KVxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT0gMykgdiA9IHJ1bkNvZGUodilcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2XFxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsgcmV0dXJuICcnIH1cXG4gICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICByZXMgPSB7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgdXJsOiB1cmwsXFxuICAgICAgICAgICAgICAgIGRlc2M6IGRlc2MsXFxuICAgICAgICAgICAgICAgIGltZzogaW1nLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogTVlfUlVMRS5jb2xfdHlwZVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIGlmIChyZXMudXJsKSB7XFxuICAgICAgICAgICAgaWYgKHJlcy51cmwuaW5jbHVkZXMoJ0BsYXp5UnVsZT0nKSkge1xcbiAgICAgICAgICAgICAgICByZXMudXJsID0gcmVzLnVybC5yZXBsYWNlKCcuanM6JywgJy5qczpcXFxcbmlmKE1ZX1JVTEUpT2JqZWN0LmFzc2lnbihNWV9SVUxFLCcgKyAkLnN0cmluZ2lmeSh7IHBhZ2VzOiBNWV9SVUxFLnBhZ2VzLCBwYWdlTGlzdDogTVlfUlVMRS5wYWdlTGlzdCwgZmluZF9ydWxlOiAnJywgcGFyYW1zOiAnJyB9KSArICcpO01ZX1VSTD1cXFwiJyArIE1ZX1VSTCArICdcXFwiOycpXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChNWV9SVUxFLmRldGFpbF9maW5kX3J1bGUpIHtcXG4gICAgICAgICAgICAgICAgcmVzLmV4dHJhID0geyB1cmw6IHVybCwgUlVMRTogTVlfUlVMRSwgcGFnZVRpdGxlOiB0aXRsZSB9XFxuICAgICAgICAgICAgICAgIHJlcy51cmwgPSAnaGlrZXI6Ly9wYWdlL2RldGFpbExvYWQ/cnVsZT0nICsgZ2V0SXRlbSgnbXlDb2xsZWN0aW9uJylcXG4gICAgICAgICAgICAgICAgaWYgKHJlcy5leHRyYS5SVUxFLnVybC5pbmNsdWRlcygnI2ltbWVyc2l2ZVRoZW1lIycpKSByZXMudXJsICs9ICcmI2ltbWVyc2l2ZVRoZW1lIydcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICBteUNvbGxlY3Rpb25fZWwucHVzaChyZXMpXFxuICAgIH0pXFxuICAgIHNldFJlc3VsdChteUNvbGxlY3Rpb25fZWwpXFxufVxcblwiLFwiZ3JvdXBcIjpcIuKRoOi9u+WQiOmbhlwiLFwidWFcIjpcIm1vYmlsZVwiLFwicHJlUnVsZVwiOlwic2V0SXRlbSgnbXlDb2xsZWN0aW9uJywgTVlfUlVMRS50aXRsZSlcXG5zZXRJdGVtKCdyZW1vdGVVcmwnLCAnaGlrZXI6Ly9maWxlcy9ydWxlcy9RaW5naGVqaS9EbS5qc29uJylcXG4vLyDljIXoo7nplJnor69cIixcInBhZ2VzXCI6XCJbe1xcXCJjb2xfdHlwZVxcXCI6XFxcInRleHRfMVxcXCIsXFxcIm5hbWVcXFwiOlxcXCJDbGFzc1RhYlxcXCIsXFxcInBhdGhcXFwiOlxcXCJDbGFzc1RhYlxcXCIsXFxcInJ1bGVcXFwiOlxcXCJmdW5jdGlvbiBDbGFzc1RhYihjbGFzc0FycmF5LCBwYXJhbXMpIHtcXFxcbiAgICBPYmplY3QuYXNzaWduKHRoaXMsIHBhcmFtcylcXFxcbiAgICB0aGlzLmFyciA9IGNsYXNzQXJyYXkubWFwKHYgPT4gdGhpcy5pbml0KHYpKVxcXFxuICAgIHRoaXMuc2lnbiA9ICckJyArIE1ZX1JVTEUudGl0bGUgKyAnXycgKyAodGhpcy5uYW1lIHx8ICcnKSArICdfJ1xcXFxuICAgIHRoaXMuY29sb3IgPSB0aGlzLmNvbG9yIHx8ICcjMTJiNjY4J1xcXFxuICAgIHRoaXMuYm91bmRhcnkgPSB0aGlzLmJvdW5kYXJ5IHx8ICdibGFua19ibG9jaydcXFxcbn1cXFxcbkNsYXNzVGFiLnByb3RvdHlwZSA9IHtcXFxcbiAgICBjb25zdHJ1Y3RvcjogQ2xhc3NUYWIsXFxcXG4gICAgbG9hZChlbCkge1xcXFxuICAgICAgICBsZXQgZm9sZGVkID0gZ2V0VmFyKCdmb2xkXycgKyB0aGlzLnNpZ24sICcnKVxcXFxuICAgICAgICBpZiAodGhpcy5mb2xkKSBlbC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjojMDQ5ZWZmXFxcXFxcXCI+JyArIChmb2xkZWQgPyAn4pa2JyA6ICfilrwnKSxcXFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoc2lnbiwgZm9sZGVkKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgcHV0VmFyKCdmb2xkXycgKyBzaWduLCB7ICcnOiAnVCcsICdUJzogJycgfSBbZm9sZGVkXSlcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxcXG4gICAgICAgICAgICB9LCB0aGlzLnNpZ24sIGZvbGRlZCksXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxcXG4gICAgICAgIH0pXFxcXG4gICAgICAgIGxldCBhcnIgPSBmb2xkZWQgPyBbdGhpcy5hcnJbMF1dIDogdGhpcy5hcnJcXFxcbiAgICAgICAgYXJyLmZvckVhY2goKHYpID0+IHtcXFxcbiAgICAgICAgICAgIGxldCB7IGlkLCBjbGFzc19uYW1lLCBjbGFzc191cmwgfSA9IHYsXFxcXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmdldENsYXNzKGlkKSlcXFxcbiAgICAgICAgICAgIGNsYXNzX25hbWUuZm9yRWFjaCgobmFtZSwgaSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIGxldCB1cmwgPSBjbGFzc191cmxbaV0sXFxcXG4gICAgICAgICAgICAgICAgICAgIG5vdyA9IEpTT04uc3RyaW5naWZ5KHsgbmFtZTogbmFtZSwgdXJsOiB1cmwgfSlcXFxcbiAgICAgICAgICAgICAgICBlbC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IChzZWxlY3RlZCA9PSBub3cgPyAn4oCc4oCc4oCd4oCdPHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjonICsgdGhpcy5jb2xvciArICdcXFxcXFxcIj48Yj4nIDogJycpICsgbmFtZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChzaWduLCBpZCwgbm93KSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRWYXIoc2lnbiArIGlkLCBub3cpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRWYXIoc2lnbiwgbm93KVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxcXG4gICAgICAgICAgICAgICAgICAgIH0sIHRoaXMuc2lnbiwgaWQsIG5vdyksXFxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXFxcbiAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgIGVsLnB1c2goeyBjb2xfdHlwZTogdGhpcy5ib3VuZGFyeSB9KVxcXFxuICAgICAgICB9KVxcXFxuICAgIH0sXFxcXG4gICAgaW5pdChjbGFzc09iamVjdCkge1xcXFxuICAgICAgICBpZiAodHlwZW9mIGNsYXNzT2JqZWN0LmNsYXNzX25hbWUgPT0gJ3N0cmluZycpXFxcXG4gICAgICAgICAgICBjbGFzc09iamVjdC5jbGFzc19uYW1lID0gY2xhc3NPYmplY3QuY2xhc3NfbmFtZS5zcGxpdCgnJicpXFxcXG4gICAgICAgIGlmICh0eXBlb2YgY2xhc3NPYmplY3QuY2xhc3NfdXJsID09ICdzdHJpbmcnKVxcXFxuICAgICAgICAgICAgY2xhc3NPYmplY3QuY2xhc3NfdXJsID0gY2xhc3NPYmplY3QuY2xhc3NfdXJsLnNwbGl0KCcmJykubWFwKCh2KSA9PiB2LnRyaW0oKSlcXFxcbiAgICAgICAgcmV0dXJuIGNsYXNzT2JqZWN0XFxcXG4gICAgfSxcXFxcbiAgICBwdXNoKGNsYXNzT2JqZWN0KSB7XFxcXG4gICAgICAgIHRoaXMuYXJyLnB1c2godGhpcy5pbml0KGNsYXNzT2JqZWN0KSlcXFxcbiAgICB9LFxcXFxuICAgIGdldENsYXNzKGlkKSB7XFxcXG4gICAgICAgIGxldCBkZWZhdWx0Q2xhc3MgPSB0aGlzLmFyci5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PSBpZClcXFxcbiAgICAgICAgaWYgKGRlZmF1bHRDbGFzcykgZGVmYXVsdENsYXNzID0gSlNPTi5zdHJpbmdpZnkoe1xcXFxuICAgICAgICAgICAgbmFtZTogZGVmYXVsdENsYXNzLmNsYXNzX25hbWVbMF0sXFxcXG4gICAgICAgICAgICB1cmw6IGRlZmF1bHRDbGFzcy5jbGFzc191cmxbMF1cXFxcbiAgICAgICAgfSlcXFxcbiAgICAgICAgZWxzZSB0aHJvdyBuZXcgRXJyb3IoJ2Nhbm5vdCBmaW5kIGlkOiAnICsgaWQgKyAnIGluIGNsYXNzVGFiOiAnICsgdGhpcy5zaWduKVxcXFxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShnZXRWYXIodGhpcy5zaWduICsgaWQsIGRlZmF1bHRDbGFzcykpXFxcXG4gICAgfSxcXFxcbiAgICBnZXRMYXN0Q2xpY2soKSB7XFxcXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGdldFZhcih0aGlzLnNpZ24sICd7fScpKVxcXFxuICAgIH0sXFxcXG4gICAgc2V0VXJsKHVybCkge1xcXFxuICAgICAgICByZXR1cm4gdXJsLnJlcGxhY2UoL1xcXFxcXFxcJFxcXFxcXFxceyhbXn1dKilcXFxcXFxcXH0vZywgKF8sIGlkKSA9PiB0aGlzLmdldENsYXNzKGlkKS51cmwpXFxcXG4gICAgfVxcXFxufVxcXFxuJC5leHBvcnRzID0gQ2xhc3NUYWJcXFxcblxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIummlumhtVxcXCIsXFxcInBhdGhcXFwiOlxcXCJpbmRleExvYWRcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG5sZXQgbXlDb2xsZWN0aW9uX2VsID0gW10sXFxcXG4gICAgcGFnZU51bSA9IHBhcnNlSW50KE1ZX1VSTC5zcGxpdCgnIycpWzFdKSxcXFxcbiAgICBSVUxFID0gTVlfUEFSQU1TLlJVTEUsXFxcXG4gICAgZnlBbGwgPSBSVUxFLnVybC5pbmNsdWRlcygnZnlBbGwnKSxcXFxcbiAgICAvLyDliqDovb1DbGFzc1RhYue7hOS7tlxcXFxuICAgIENsYXNzVGFiID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvQ2xhc3NUYWI/cnVsZT0nICsgZ2V0SXRlbSgnbXlDb2xsZWN0aW9uJykpLFxcXFxuICAgIHRhYkhlYWRlciA9IFtdXFxcXG5cXFxcbmlmIChSVUxFLmNsYXNzX25hbWUpIHRhYkhlYWRlci5wdXNoKHtcXFxcbiAgICBpZDogZnlBbGwgPyAnZnlBbGwnIDogJ2Z5Y2xhc3MnLFxcXFxuICAgIGNsYXNzX25hbWU6IFJVTEUuY2xhc3NfbmFtZSxcXFxcbiAgICBjbGFzc191cmw6IFJVTEUuY2xhc3NfdXJsXFxcXG59KVxcXFxuaWYgKFJVTEUuYXJlYV9uYW1lKSB0YWJIZWFkZXIucHVzaCh7XFxcXG4gICAgaWQ6IGZ5QWxsID8gJ2Z5QWxsJyA6ICdmeWFyZWEnLFxcXFxuICAgIGNsYXNzX25hbWU6IFJVTEUuYXJlYV9uYW1lLFxcXFxuICAgIGNsYXNzX3VybDogUlVMRS5hcmVhX3VybFxcXFxufSlcXFxcbmlmIChSVUxFLnllYXJfbmFtZSkgdGFiSGVhZGVyLnB1c2goe1xcXFxuICAgIGlkOiBmeUFsbCA/ICdmeUFsbCcgOiAnZnl5ZWFyJyxcXFxcbiAgICBjbGFzc19uYW1lOiBSVUxFLnllYXJfbmFtZSxcXFxcbiAgICBjbGFzc191cmw6IFJVTEUueWVhcl91cmxcXFxcbn0pXFxcXG5pZiAoUlVMRS5zb3J0X25hbWUpIHRhYkhlYWRlci5wdXNoKHtcXFxcbiAgICBpZDogZnlBbGwgPyAnZnlBbGwnIDogJ2Z5c29ydCcsXFxcXG4gICAgY2xhc3NfbmFtZTogUlVMRS5zb3J0X25hbWUsXFxcXG4gICAgY2xhc3NfdXJsOiBSVUxFLnNvcnRfdXJsXFxcXG59KVxcXFxudGFiSGVhZGVyID0gbmV3IENsYXNzVGFiKHRhYkhlYWRlciwgeyBuYW1lOiBSVUxFLnRpdGxlIH0pXFxcXG5pZiAocGFnZU51bSA9PSAxKSB7XFxcXG4gICAgYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAnY2xlYXJWYXIoXFxcXFxcXCJteUNvbGxlY3Rpb24tc2VhcmNoTW9kZVxcXFxcXFwiKScpXFxcXG4gICAgcHV0VmFyKCdteUNvbGxlY3Rpb24tc2VhcmNoTW9kZScsIFJVTEUudGl0bGUpXFxcXG4gICAgdGFiSGVhZGVyLmxvYWQobXlDb2xsZWN0aW9uX2VsKVxcXFxuICAgIGlmIChSVUxFLnNlYXJjaF91cmwpIG15Q29sbGVjdGlvbl9lbC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IFxcXFxcXFwi5pCc57SiXFxcXFxcXCIsXFxcXG4gICAgICAgIGRlc2M6IFxcXFxcXFwi5pCc5L2g5oOz6KaB55qELi4uXFxcXFxcXCIsXFxcXG4gICAgICAgIHVybDogJ1xcXFxcXFwiaGlrZXI6Ly9wYWdlL3NpbmdsZVNlYXJjaD9rZXl3b3JkPVxcXFxcXFwiK2lucHV0K1xcXFxcXFwiJnBhZ2U9ZnlwYWdlXFxcXFxcXCInLFxcXFxuICAgICAgICBleHRyYTogeyBydWxlOiBnZXRJdGVtKCdteUNvbGxlY3Rpb24nKSwgUlVMRTogUlVMRSB9LFxcXFxuICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJpbnB1dFxcXFxcXFwiLFxcXFxuICAgIH0pXFxcXG59XFxcXG4vLyDlpITnkIZNWV9VUkzlkoxNWV9SVUxFXFxcXG5NWV9SVUxFLnVhID0gUlVMRS51YVxcXFxuTVlfUlVMRS50aXRsZSA9IFJVTEUudGl0bGVcXFxcbk1ZX1JVTEUuY29sX3R5cGUgPSBSVUxFLmNvbF90eXBlXFxcXG5NWV9SVUxFLmRldGFpbF9jb2xfdHlwZSA9IFJVTEUuZGV0YWlsX2NvbF90eXBlXFxcXG5NWV9SVUxFLmZpbmRfcnVsZSA9IFJVTEUuZmluZF9ydWxlXFxcXG5NWV9SVUxFLmRldGFpbF9maW5kX3J1bGUgPSBSVUxFLmRldGFpbF9maW5kX3J1bGVcXFxcbk1ZX1JVTEUucHJlUnVsZSA9IFJVTEUucHJlUnVsZVxcXFxuTVlfUlVMRS5wYWdlTGlzdCA9IEpTT04ucGFyc2UoUlVMRS5wYWdlcyB8fCAnW10nKVxcXFxuTVlfUlVMRS5wYWdlcyA9IEpTT04uc3RyaW5naWZ5KE1ZX1JVTEUucGFnZUxpc3QpXFxcXG5NWV9SVUxFLmxhc3RfY2hhcHRlcl9ydWxlID0gUlVMRS5sYXN0X2NoYXB0ZXJfcnVsZVxcXFxuTVlfUlVMRS5wYXJhbXMgPSB7fVxcXFxuXFxcXG5jb25zdCB7IHJ1bkNvZGUsIHVybFBhcnNlIH0gPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS91dGlsaXR5P3J1bGU9JyArIGdldEl0ZW0oJ215Q29sbGVjdGlvbicpKVxcXFxudmFyIHsgTVlfVVJMLCBNWV9VUkxfT3B0aW9ucyB9ID0gdXJsUGFyc2UoUlVMRS51cmwsIHt9LCBwYWdlTnVtLCAodXJsKSA9PiB7XFxcXG4gICAgdXJsWzBdID0gZnlBbGwgPyB1cmxbMF0ucmVwbGFjZSgvZnlBbGwvZywgJyQke2Z5QWxsfScpIDogdXJsWzBdLnJlcGxhY2UoL2Z5KGNsYXNzfGFyZWF8eWVhcnxzb3J0KS9nLCAnJCR7ZnkkMX0nKVxcXFxuICAgIHVybFswXSA9IHRhYkhlYWRlci5zZXRVcmwodXJsWzBdKVxcXFxufSksXFxcXG4gICAgaW5kZXhIdG1sID0gZmV0Y2goTVlfVVJMLCBNWV9VUkxfT3B0aW9ucylcXFxcbk1ZX1JVTEUudXJsID0gTVlfVVJMXFxcXG5NWV9SVUxFLnVybEhlYWRlcnMgPSBNWV9VUkxfT3B0aW9ucy5oZWFkZXJzXFxcXG5sb2coTVlfVVJMKVxcXFxuLy8g5q2j5paH6Kej5p6QXFxcXG5pZiAocGFnZU51bSA9PSAxKSBldmFsKE1ZX1JVTEUucHJlUnVsZSlcXFxcbmlmIChNWV9SVUxFLmZpbmRfcnVsZS5zdGFydHNXaXRoKCdqczonKSkge1xcXFxuICAgIGZ1bmN0aW9uIGdldFVybCgpIHtcXFxcbiAgICAgICAgcmV0dXJuIE1ZX1VSTFxcXFxuICAgIH1cXFxcblxcXFxuICAgIGZ1bmN0aW9uIGdldFJlc0NvZGUoKSB7XFxcXG4gICAgICAgIHJldHVybiBpbmRleEh0bWxcXFxcbiAgICB9XFxcXG5cXFxcbiAgICBmdW5jdGlvbiBzZXRSZXN1bHQoZWwsIHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMpIHtcXFxcbiAgICAgICAgcGFyYW0xID0gQ0FMTEJBQ0tfS0VZXFxcXG4gICAgICAgIHBhcmFtMiA9IE1ZX1JVTEVcXFxcbiAgICAgICAgcGFyYW0zID0gTVlfVFlQRVxcXFxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShlbC5kYXRhKSkgZWwgPSBlbC5kYXRhXFxcXG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KG15Q29sbGVjdGlvbl9lbCwgZWwubWFwKCh2KSA9PiB7XFxcXG4gICAgICAgICAgICBsZXQgTVlfX1JVTEUgPSBPYmplY3QuYXNzaWduKHt9LCBNWV9SVUxFKVxcXFxuICAgICAgICAgICAgdi5jb2xfdHlwZSA9IHYuY29sX3R5cGUgfHwgTVlfUlVMRS5jb2xfdHlwZVxcXFxuXFxcXG4gICAgICAgICAgICBpZiAoIXYudXJsKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodi51cmwuaW5jbHVkZXMoJ0BydWxlPScpKSB7XFxcXG4gICAgICAgICAgICAgICAgbGV0IFtfLCB1cmwsIHJ1bGVdID0gdi51cmwubWF0Y2goL14oW1xcXFxcXFxcc1xcXFxcXFxcU10qPylAcnVsZT0oW1xcXFxcXFxcc1xcXFxcXFxcU10qKSQvKVxcXFxuICAgICAgICAgICAgICAgIHYudXJsID0gdXJsXFxcXG4gICAgICAgICAgICAgICAgTVlfX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSA9IHJ1bGVcXFxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5kZXRhaWxfY29sX3R5cGUgPSBNWV9SVUxFLmNvbF90eXBlXFxcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHYudXJsLnN0YXJ0c1dpdGgoJ2hpa2VyOi8vcGFnZS8nKSkge1xcXFxuICAgICAgICAgICAgICAgIGlmICh2LnVybC5pbmNsdWRlcygncnVsZT0nKSB8fCAodi5leHRyYSB8fCB7fSkucnVsZSlcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZcXFxcbiAgICAgICAgICAgICAgICBsZXQgW18sIHBhdGgsIHBhcmFtc10gPSB2LnVybC5zcGxpdCgnIycpWzBdLm1hdGNoKC9eaGlrZXI6XFxcXFxcXFwvXFxcXFxcXFwvcGFnZVxcXFxcXFxcLyguKz8pKD86XFxcXFxcXFw/KC4qKSk/JC8pLFxcXFxuICAgICAgICAgICAgICAgICAgICBzdWJQYWdlID0gTVlfUlVMRS5wYWdlTGlzdC5maW5kKCh2KSA9PiB2LnBhdGggPT0gcGF0aCksXFxcXG4gICAgICAgICAgICAgICAgICAgIHN1YlVybCA9IChwYXJhbXMgfHwgJycpLnNwbGl0KCcmJykuZmluZCgodikgPT4gdi5zdGFydHNXaXRoKCd1cmw9JykpXFxcXG4gICAgICAgICAgICAgICAgdi51cmwgPSBzdWJVcmwgPyBzdWJVcmwuc2xpY2UoNCkucmVwbGFjZSgv77yf77yfL2csICc/JykucmVwbGFjZSgv77yG77yGL2csICcmJykgOiAodi5leHRyYSB8fCB7fSkudXJsIHx8ICdoaWtlcjovL2VtcHR5PycgKyAocGFyYW1zIHx8ICcnKVxcXFxuICAgICAgICAgICAgICAgIE1ZX19SVUxFLmRldGFpbF9maW5kX3J1bGUgPSBzdWJQYWdlLnJ1bGVcXFxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5kZXRhaWxfY29sX3R5cGUgPSBzdWJQYWdlLmNvbF90eXBlXFxcXG4gICAgICAgICAgICAgICAgTVlfX1JVTEUucGFyYW1zID0gdi5leHRyYSB8fCB7fVxcXFxuICAgICAgICAgICAgfSBlbHNlIGlmICh2LnVybC5pbmNsdWRlcygnQGxhenlSdWxlPScpKSB7XFxcXG4gICAgICAgICAgICAgICAgdi51cmwgPSB2LnVybC5yZXBsYWNlKCcuanM6JywgJy5qczpcXFxcXFxcXG5pZihNWV9SVUxFKU9iamVjdC5hc3NpZ24oTVlfUlVMRSwnICsgJC5zdHJpbmdpZnkoeyBwYWdlczogTVlfUlVMRS5wYWdlcywgcGFnZUxpc3Q6IE1ZX1JVTEUucGFnZUxpc3QsIGZpbmRfcnVsZTogJycsIHBhcmFtczogJycgfSkgKyAnKTtNWV9VUkw9XFxcXFxcXCInICsgTVlfVVJMICsgJ1xcXFxcXFwiOycpXFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIU1ZX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSB8fCB2LnVybC5zdGFydHNXaXRoKCdoaWtlcjovLycpKSB7IHJldHVybiB2IH1cXFxcbiAgICAgICAgICAgIHYuZXh0cmEgPSB7IHVybDogdi51cmwsIFJVTEU6IE1ZX19SVUxFLCBwYWdlVGl0bGU6IHYudGl0bGUgfVxcXFxuICAgICAgICAgICAgdi51cmwgPSAnaGlrZXI6Ly9wYWdlL2RldGFpbExvYWQ/cnVsZT0nICsgZ2V0SXRlbSgnbXlDb2xsZWN0aW9uJylcXFxcbiAgICAgICAgICAgIGlmICh2LmV4dHJhLlJVTEUudXJsLmluY2x1ZGVzKCcjaW1tZXJzaXZlVGhlbWUjJykpIHYudXJsICs9ICcmI2ltbWVyc2l2ZVRoZW1lIydcXFxcbiAgICAgICAgICAgIHJldHVybiB2XFxcXG4gICAgICAgIH0pKVxcXFxuICAgICAgICBtZXRob2Rfc2V0UmVzdWx0Lmludm9rZShqYXZhQ29udGV4dCwgbXlDb2xsZWN0aW9uX2VsLCBwYXJhbTEsIHBhcmFtMiwgcGFyYW0zKVxcXFxuICAgIH1cXFxcbiAgICBzZXRIb21lUmVzdWx0ID0gc2V0UmVzdWx0XFxcXG4gICAgc2V0U2VhcmNoUmVzdWx0ID0gc2V0UmVzdWx0XFxcXG5cXFxcbiAgICBldmFsKE1ZX1JVTEUuZmluZF9ydWxlLnNsaWNlKDMpKVxcXFxufSBlbHNlIHtcXFxcbiAgICBsZXQgZmluZFJ1bGUgPSBNWV9SVUxFLmZpbmRfcnVsZS5zcGxpdCgnOycpXFxcXG4gICAgcGFyc2VEb21Gb3JBcnJheShpbmRleEh0bWwsIGZpbmRSdWxlLnNoaWZ0KCkpLmZvckVhY2goKGRhdGEpID0+IHtcXFxcbiAgICAgICAgbGV0IFt0aXRsZSwgaW1nLCBkZXNjLCB1cmxdID0gZmluZFJ1bGUubWFwKCh2LCBpKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKHYgPT0gJyonKSByZXR1cm4gJydcXFxcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB2ID0gKGkgPT0gMSB8fCBpID09IDMpID9cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRG9tKGRhdGEsIHYpIDpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRG9tRm9ySHRtbChkYXRhLCB2KVxcXFxuICAgICAgICAgICAgICAgICAgICBpZiAoaSAhPSAzKSB2ID0gcnVuQ29kZSh2KVxcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdlxcXFxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsgcmV0dXJuICcnIH1cXFxcbiAgICAgICAgICAgIH0pLFxcXFxuICAgICAgICAgICAgcmVzID0ge1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXFxcbiAgICAgICAgICAgICAgICB1cmw6IHVybCxcXFxcbiAgICAgICAgICAgICAgICBkZXNjOiBkZXNjLFxcXFxuICAgICAgICAgICAgICAgIGltZzogaW1nLFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBNWV9SVUxFLmNvbF90eXBlXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIGlmIChyZXMudXJsKSB7XFxcXG4gICAgICAgICAgICBpZiAocmVzLnVybC5pbmNsdWRlcygnQGxhenlSdWxlPScpKSB7XFxcXG4gICAgICAgICAgICAgICAgcmVzLnVybCA9IHJlcy51cmwucmVwbGFjZSgnLmpzOicsICcuanM6XFxcXFxcXFxuaWYoTVlfUlVMRSlPYmplY3QuYXNzaWduKE1ZX1JVTEUsJyArICQuc3RyaW5naWZ5KHsgcGFnZXM6IE1ZX1JVTEUucGFnZXMsIHBhZ2VMaXN0OiBNWV9SVUxFLnBhZ2VMaXN0LCBmaW5kX3J1bGU6ICcnLCBwYXJhbXM6ICcnIH0pICsgJyk7TVlfVVJMPVxcXFxcXFwiJyArIE1ZX1VSTCArICdcXFxcXFxcIjsnKVxcXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChNWV9SVUxFLmRldGFpbF9maW5kX3J1bGUpIHtcXFxcbiAgICAgICAgICAgICAgICByZXMuZXh0cmEgPSB7IHVybDogdXJsLCBSVUxFOiBNWV9SVUxFLCBwYWdlVGl0bGU6IHRpdGxlIH1cXFxcbiAgICAgICAgICAgICAgICByZXMudXJsID0gJ2hpa2VyOi8vcGFnZS9kZXRhaWxMb2FkP3J1bGU9JyArIGdldEl0ZW0oJ215Q29sbGVjdGlvbicpXFxcXG4gICAgICAgICAgICAgICAgaWYgKHJlcy5leHRyYS5SVUxFLnVybC5pbmNsdWRlcygnI2ltbWVyc2l2ZVRoZW1lIycpKSByZXMudXJsICs9ICcmI2ltbWVyc2l2ZVRoZW1lIydcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBteUNvbGxlY3Rpb25fZWwucHVzaChyZXMpXFxcXG4gICAgfSlcXFxcbiAgICBzZXRSZXN1bHQobXlDb2xsZWN0aW9uX2VsKVxcXFxufVxcXFxuXFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi6K+m5oOFXFxcIixcXFwicGF0aFxcXCI6XFxcImRldGFpbExvYWRcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG5sZXQgbXlDb2xsZWN0aW9uX2VsID0gW11cXFxcblxcXFxuLy8g5aSE55CGTVlfVVJM5ZKMTVlfUlVMRVxcXFxubGV0IFJVTEUgPSBNWV9QQVJBTVMuUlVMRVxcXFxuTVlfUlVMRS51YSA9IFJVTEUudWFcXFxcbk1ZX1JVTEUudGl0bGUgPSBSVUxFLnRpdGxlXFxcXG5NWV9SVUxFLmNvbF90eXBlID0gUlVMRS5kZXRhaWxfY29sX3R5cGVcXFxcbk1ZX1JVTEUuZmluZF9ydWxlID0gUlVMRS5kZXRhaWxfZmluZF9ydWxlXFxcXG5NWV9SVUxFLnByZVJ1bGUgPSBSVUxFLnByZVJ1bGVcXFxcbk1ZX1JVTEUucGFnZUxpc3QgPSBSVUxFLnBhZ2VMaXN0XFxcXG5NWV9SVUxFLnBhZ2VzID0gUlVMRS5wYWdlc1xcXFxuTVlfUlVMRS5sYXN0X2NoYXB0ZXJfcnVsZSA9IFJVTEUubGFzdF9jaGFwdGVyX3J1bGVcXFxcbk1ZX1JVTEUucGFyYW1zID0gUlVMRS5wYXJhbXNcXFxcblxcXFxuY29uc3QgeyBydW5Db2RlLCB1cmxQYXJzZSB9ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvdXRpbGl0eT9ydWxlPScgKyBnZXRJdGVtKCdteUNvbGxlY3Rpb24nKSlcXFxcbnZhciB7IE1ZX1VSTCwgTVlfVVJMX09wdGlvbnMgfSA9IHVybFBhcnNlKE1ZX1BBUkFNUy51cmwsIFJVTEUudXJsSGVhZGVycywgMSksXFxcXG4gICAgaW5kZXhIdG1sID0gZmV0Y2goTVlfVVJMLCBNWV9VUkxfT3B0aW9ucylcXFxcbk1ZX1JVTEUudXJsID0gTVlfVVJMXFxcXG5NWV9SVUxFLnVybEhlYWRlcnMgPSBNWV9VUkxfT3B0aW9ucy5oZWFkZXJzXFxcXG4vLyDop6PmnpDmraPmlodcXFxcbmlmIChNWV9QQVJBTVMucGFnZVRpdGxlKSBzZXRQYWdlVGl0bGUoTVlfUEFSQU1TLnBhZ2VUaXRsZSlcXFxcbmV2YWwoTVlfUlVMRS5wcmVSdWxlKVxcXFxuc2V0TGFzdENoYXB0ZXJSdWxlKE1ZX1JVTEUubGFzdF9jaGFwdGVyX3J1bGUpXFxcXG5NWV9QQVJBTVMgPSBNWV9SVUxFLnBhcmFtc1xcXFxuaWYgKE1ZX1JVTEUuZmluZF9ydWxlLnN0YXJ0c1dpdGgoJ2pzOicpKSB7XFxcXG4gICAgZnVuY3Rpb24gZ2V0VXJsKCkge1xcXFxuICAgICAgICByZXR1cm4gTVlfVVJMXFxcXG4gICAgfVxcXFxuXFxcXG4gICAgZnVuY3Rpb24gZ2V0UmVzQ29kZSgpIHtcXFxcbiAgICAgICAgcmV0dXJuIGluZGV4SHRtbFxcXFxuICAgIH1cXFxcblxcXFxuICAgIGZ1bmN0aW9uIHNldFJlc3VsdChlbCwgcGFyYW0xLCBwYXJhbTIsIHBhcmFtMykge1xcXFxuICAgICAgICBwYXJhbTEgPSBDQUxMQkFDS19LRVlcXFxcbiAgICAgICAgcGFyYW0yID0gTVlfUlVMRVxcXFxuICAgICAgICBwYXJhbTMgPSBNWV9UWVBFXFxcXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGVsLmRhdGEpKSBlbCA9IGVsLmRhdGFcXFxcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkobXlDb2xsZWN0aW9uX2VsLCBlbC5tYXAoKHYpID0+IHtcXFxcbiAgICAgICAgICAgIGxldCBNWV9fUlVMRSA9IE9iamVjdC5hc3NpZ24oe30sIE1ZX1JVTEUpXFxcXG4gICAgICAgICAgICB2LmNvbF90eXBlID0gdi5jb2xfdHlwZSB8fCBNWV9SVUxFLmNvbF90eXBlXFxcXG5cXFxcbiAgICAgICAgICAgIGlmICghdi51cmwpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gdlxcXFxuICAgICAgICAgICAgfSBlbHNlIGlmICh2LnVybC5pbmNsdWRlcygnQHJ1bGU9JykpIHtcXFxcbiAgICAgICAgICAgICAgICBsZXQgW18sIHVybCwgcnVsZV0gPSB2LnVybC5tYXRjaCgvXihbXFxcXFxcXFxzXFxcXFxcXFxTXSo/KUBydWxlPShbXFxcXFxcXFxzXFxcXFxcXFxTXSopJC8pXFxcXG4gICAgICAgICAgICAgICAgdi51cmwgPSB1cmxcXFxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5kZXRhaWxfZmluZF9ydWxlID0gcnVsZVxcXFxuICAgICAgICAgICAgICAgIE1ZX19SVUxFLmRldGFpbF9jb2xfdHlwZSA9IE1ZX1JVTEUuY29sX3R5cGVcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodi51cmwuc3RhcnRzV2l0aCgnaGlrZXI6Ly9wYWdlLycpKSB7XFxcXG4gICAgICAgICAgICAgICAgaWYgKHYudXJsLmluY2x1ZGVzKCdydWxlPScpIHx8ICh2LmV4dHJhIHx8IHt9KS5ydWxlKVxcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdlxcXFxuICAgICAgICAgICAgICAgIGxldCBbXywgcGF0aCwgcGFyYW1zXSA9IHYudXJsLnNwbGl0KCcjJylbMF0ubWF0Y2goL15oaWtlcjpcXFxcXFxcXC9cXFxcXFxcXC9wYWdlXFxcXFxcXFwvKC4rPykoPzpcXFxcXFxcXD8oLiopKT8kLyksXFxcXG4gICAgICAgICAgICAgICAgICAgIHN1YlBhZ2UgPSBNWV9SVUxFLnBhZ2VMaXN0LmZpbmQoKHYpID0+IHYucGF0aCA9PSBwYXRoKSxcXFxcbiAgICAgICAgICAgICAgICAgICAgc3ViVXJsID0gKHBhcmFtcyB8fCAnJykuc3BsaXQoJyYnKS5maW5kKCh2KSA9PiB2LnN0YXJ0c1dpdGgoJ3VybD0nKSlcXFxcbiAgICAgICAgICAgICAgICB2LnVybCA9IHN1YlVybCA/IHN1YlVybC5zbGljZSg0KS5yZXBsYWNlKC/vvJ/vvJ8vZywgJz8nKS5yZXBsYWNlKC/vvIbvvIYvZywgJyYnKSA6ICh2LmV4dHJhIHx8IHt9KS51cmwgfHwgJ2hpa2VyOi8vZW1wdHk/JyArIChwYXJhbXMgfHwgJycpXFxcXG4gICAgICAgICAgICAgICAgTVlfX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSA9IHN1YlBhZ2UucnVsZVxcXFxuICAgICAgICAgICAgICAgIE1ZX19SVUxFLmRldGFpbF9jb2xfdHlwZSA9IHN1YlBhZ2UuY29sX3R5cGVcXFxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5wYXJhbXMgPSB2LmV4dHJhIHx8IHt9XFxcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHYudXJsLmluY2x1ZGVzKCdAbGF6eVJ1bGU9JykpIHtcXFxcbiAgICAgICAgICAgICAgICB2LnVybCA9IHYudXJsLnJlcGxhY2UoJy5qczonLCAnLmpzOlxcXFxcXFxcbmlmKE1ZX1JVTEUpT2JqZWN0LmFzc2lnbihNWV9SVUxFLCcgKyAkLnN0cmluZ2lmeSh7IHBhZ2VzOiBNWV9SVUxFLnBhZ2VzLCBwYWdlTGlzdDogTVlfUlVMRS5wYWdlTGlzdCwgZmluZF9ydWxlOiAnJywgcGFyYW1zOiAnJyB9KSArICcpO01ZX1VSTD1cXFxcXFxcIicgKyBNWV9VUkwgKyAnXFxcXFxcXCI7JylcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gdlxcXFxuICAgICAgICAgICAgfSBlbHNlIHsgcmV0dXJuIHYgfVxcXFxuICAgICAgICAgICAgdi5leHRyYSA9IHsgdXJsOiB2LnVybCwgUlVMRTogTVlfX1JVTEUgfVxcXFxuICAgICAgICAgICAgdi51cmwgPSAnaGlrZXI6Ly9wYWdlL2RldGFpbExvYWQ/cnVsZT0nICsgZ2V0SXRlbSgnbXlDb2xsZWN0aW9uJylcXFxcbiAgICAgICAgICAgIGlmICh2LmV4dHJhLlJVTEUudXJsLmluY2x1ZGVzKCcjaW1tZXJzaXZlVGhlbWUjJykpIHYudXJsICs9ICcmI2ltbWVyc2l2ZVRoZW1lIydcXFxcbiAgICAgICAgICAgIHJldHVybiB2XFxcXG4gICAgICAgIH0pKVxcXFxuICAgICAgICBtZXRob2Rfc2V0UmVzdWx0Lmludm9rZShqYXZhQ29udGV4dCwgbXlDb2xsZWN0aW9uX2VsLCBwYXJhbTEsIHBhcmFtMiwgcGFyYW0zKVxcXFxuICAgIH1cXFxcbiAgICBzZXRIb21lUmVzdWx0ID0gc2V0UmVzdWx0XFxcXG4gICAgc2V0U2VhcmNoUmVzdWx0ID0gc2V0UmVzdWx0XFxcXG5cXFxcbiAgICBldmFsKE1ZX1JVTEUuZmluZF9ydWxlLnNsaWNlKDMpKVxcXFxufSBlbHNlIHtcXFxcbiAgICBsZXQgW18sIGZpbmRSdWxlLCBkZXRhaWxGaW5kUnVsZV0gPSBNWV9SVUxFLmZpbmRfcnVsZS5tYXRjaCgvXiguKj8pKD86PT0+KC4qKSk/JC8pXFxcXG4gICAgZmluZFJ1bGUgPSBmaW5kUnVsZS5zcGxpdCgnOycpXFxcXG4gICAgcGFyc2VEb21Gb3JBcnJheShpbmRleEh0bWwsIGZpbmRSdWxlLnNoaWZ0KCkpLmZvckVhY2goKGRhdGEpID0+IHtcXFxcbiAgICAgICAgbGV0IFt0aXRsZSwgaW1nLCBkZXNjLCB1cmxdID0gZmluZFJ1bGUubWFwKCh2LCBpKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKHYgPT0gJyonKSByZXR1cm4gJydcXFxcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB2ID0gKGkgPT0gMSB8fCBpID09IDMpID9cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRG9tKGRhdGEsIHYpIDpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRG9tRm9ySHRtbChkYXRhLCB2KVxcXFxuICAgICAgICAgICAgICAgICAgICBpZiAoaSAhPSAzKSB2ID0gcnVuQ29kZSh2KVxcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdlxcXFxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsgcmV0dXJuICcnIH1cXFxcbiAgICAgICAgICAgIH0pLFxcXFxuICAgICAgICAgICAgcmVzID0ge1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXFxcbiAgICAgICAgICAgICAgICB1cmw6IHVybCxcXFxcbiAgICAgICAgICAgICAgICBkZXNjOiBkZXNjLFxcXFxuICAgICAgICAgICAgICAgIGltZzogaW1nLFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBNWV9SVUxFLmNvbF90eXBlXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIGlmIChyZXMudXJsKSB7XFxcXG4gICAgICAgICAgICBpZiAocmVzLnVybC5pbmNsdWRlcygnQGxhenlSdWxlPScpKSB7XFxcXG4gICAgICAgICAgICAgICAgcmVzLnVybCA9IHJlcy51cmwucmVwbGFjZSgnLmpzOicsICcuanM6XFxcXFxcXFxuaWYoTVlfUlVMRSlPYmplY3QuYXNzaWduKE1ZX1JVTEUsJyArICQuc3RyaW5naWZ5KHsgcGFnZXM6IE1ZX1JVTEUucGFnZXMsIHBhZ2VMaXN0OiBNWV9SVUxFLnBhZ2VMaXN0LCBmaW5kX3J1bGU6ICcnLCBwYXJhbXM6ICcnIH0pICsgJyk7TVlfVVJMPVxcXFxcXFwiJyArIE1ZX1VSTCArICdcXFxcXFxcIjsnKVxcXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChkZXRhaWxGaW5kUnVsZSkge1xcXFxuICAgICAgICAgICAgICAgIHJlcy5leHRyYSA9IHsgdXJsOiB1cmwsIFJVTEU6IE9iamVjdC5hc3NpZ24oe30sIE1ZX1JVTEUsIHsgZGV0YWlsX2ZpbmRfcnVsZTogZGV0YWlsRmluZFJ1bGUgfSkgfVxcXFxuICAgICAgICAgICAgICAgIHJlcy51cmwgPSAnaGlrZXI6Ly9wYWdlL2RldGFpbExvYWQ/cnVsZT0nICsgZ2V0SXRlbSgnbXlDb2xsZWN0aW9uJylcXFxcbiAgICAgICAgICAgICAgICBpZiAocmVzLmV4dHJhLlJVTEUudXJsLmluY2x1ZGVzKCcjaW1tZXJzaXZlVGhlbWUjJykpIHJlcy51cmwgKz0gJyYjaW1tZXJzaXZlVGhlbWUjJ1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIG15Q29sbGVjdGlvbl9lbC5wdXNoKHJlcylcXFxcbiAgICB9KVxcXFxuICAgIHNldFJlc3VsdChteUNvbGxlY3Rpb25fZWwpXFxcXG59XFxcXG5cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLlt6Xlhbfpm4ZcXFwiLFxcXCJwYXRoXFxcIjpcXFwidXRpbGl0eVxcXCIsXFxcInJ1bGVcXFwiOlxcXCIkLmV4cG9ydHMgPSB7XFxcXG4gICAgZGF0YUxvYWQ6IGZ1bmN0aW9uKHNob3dBbGwpIHtcXFxcbiAgICAgICAgLy/mo4Dmn6Xpl7TpmpTvvIzpu5jorqTkuIDlpKlcXFxcbiAgICAgICAgbGV0IG1pbiA9IDYwICogMjQgKiAxLFxcXFxuICAgICAgICAgICAgZGF0YSA9IFtdLFxcXFxuICAgICAgICAgICAgdGltZSA9IHBhcnNlSW50KHJlYWRGaWxlKCd1cGRhdGV0aW1lJykpIHx8IDAsXFxcXG4gICAgICAgICAgICBub3cgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKVxcXFxuICAgICAgICBpZiAobm93IC0gdGltZSA+IDEwMDAgKiA2MCAqIG1pbikge1xcXFxuICAgICAgICAgICAgbG9nKCfmm7TmlrDkuobmlbDmja4nKVxcXFxuICAgICAgICAgICAgLy8g6I635Y+W6L+c56iL5pWw5o2uXFxcXG4gICAgICAgICAgICBsZXQgdXJsID0gZ2V0SXRlbSgncmVtb3RlVXJsJylcXFxcbiAgICAgICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICAgICAgZGF0YSA9IGZldGNoKHVybClcXFxcbiAgICAgICAgICAgICAgICBpZiAodXJsLnN0YXJ0c1dpdGgoJ2hpa2VyOi8vcGFnZS8nKSlcXFxcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IEpTT04ucGFyc2UoZGF0YSkucnVsZVxcXFxuICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpXFxcXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxcXG4gICAgICAgICAgICAgICAgZGF0YSA9IFtdXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBkYXRhID0gZGF0YS5maWx0ZXIoKHYpID0+IHsgcmV0dXJuIHYudGl0bGUgIT0gZ2V0SXRlbSgnbXlDb2xsZWN0aW9uJykgJiYgIXYuYXV0aG9yLmluY2x1ZGVzKCfovbvlkIjpm4bnlJ/miJDlmagnKSB9KVxcXFxuICAgICAgICAgICAgc2F2ZUZpbGUoJ2RhdGFDYWNoZScsIEpTT04uc3RyaW5naWZ5KGRhdGEpKVxcXFxuICAgICAgICAgICAgc2F2ZUZpbGUoJ3VwZGF0ZXRpbWUnLCAnJyArIG5vdylcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIGxvZygn5rKh5pyJ5pu05paw5pWw5o2uJylcXFxcbiAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKHJlYWRGaWxlKCdkYXRhQ2FjaGUnKSlcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICAvLyDlhpnlhaXoh6rlrprkuYnmlbDmja5cXFxcbiAgICAgICAgbGV0IGN1c3RvbURhdGEgPSBKU09OLnBhcnNlKHJlYWRGaWxlKCdjdXN0b21EYXRhJykgfHwgJ1tdJyksXFxcXG4gICAgICAgICAgICByZXdyaXRlRGF0YSA9IFtdXFxcXG4gICAgICAgIGN1c3RvbURhdGEgPSBjdXN0b21EYXRhLnJlZHVjZSgoc2VsZiwgdikgPT4ge1xcXFxuICAgICAgICAgICAgbGV0IGluZGV4ID0gZGF0YS5maW5kSW5kZXgoKHZ2KSA9PiB2LnRpdGxlID09IHZ2LnRpdGxlKVxcXFxuICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcXFxcbiAgICAgICAgICAgICAgICBzZWxmLnB1c2godilcXFxcbiAgICAgICAgICAgICAgICBsZXQgcnVsZSA9IGRhdGEuc3BsaWNlKGluZGV4LCAxKVswXVxcXFxuICAgICAgICAgICAgICAgIGlmKHNob3dBbGwgfHwgdi52aXNpYmxlKVxcXFxuICAgICAgICAgICAgICAgICAgICByZXdyaXRlRGF0YS5wdXNoKE9iamVjdC5hc3NpZ24ocnVsZSwgdikpXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICByZXR1cm4gc2VsZlxcXFxuICAgICAgICB9LCBbXSlcXFxcbiAgICAgICAgZGF0YS5mb3JFYWNoKCh2KSA9PiBjdXN0b21EYXRhLnB1c2goeyB0aXRsZTogdi50aXRsZSwgdmlzaWJsZTogdHJ1ZSB9KSlcXFxcbiAgICAgICAgc2F2ZUZpbGUoJ2N1c3RvbURhdGEnLCBKU09OLnN0cmluZ2lmeShjdXN0b21EYXRhKSlcXFxcbiAgICAgICAgcmV0dXJuIHJld3JpdGVEYXRhLmNvbmNhdChkYXRhKVxcXFxuICAgIH0sXFxcXG4gICAgcnVuQ29kZTogZnVuY3Rpb24ocnVsZSkge1xcXFxuICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgbGV0IFtpbnB1dCwgY29kZV0gPSBydWxlLnNwbGl0KCcuanM6JylcXFxcbiAgICAgICAgICAgIHJldHVybiBjb2RlID8gZXZhbChjb2RlKSA6IHJ1bGVcXFxcbiAgICAgICAgfSBjYXRjaCAoZSkgeyByZXR1cm4gcnVsZSB9XFxcXG4gICAgfSxcXFxcbiAgICB1cmxQYXJzZTogZnVuY3Rpb24odXJsLCBoZWFkZXJzLCBwYWdlTnVtLCBmdW5jKSB7XFxcXG4gICAgICAgIHVybCA9IHVybC5zcGxpdCgnOycpLm1hcCgodikgPT4gdi5yZXBsYWNlKC/vvJvvvJsvZywgJzsnKSlcXFxcbiAgICAgICAgaWYgKGZ1bmMpIGZ1bmModXJsKVxcXFxuICAgICAgICB1cmxbMF0gPSB1cmxbMF0ucmVwbGFjZSgvZnlwYWdlKD86QCgtP1xcXFxcXFxcZCspQCk/KD86XFxcXFxcXFwqKFxcXFxcXFxcZCspQCk/LywgKF8sIHN0YXJ0LCBzcGFjZSkgPT4gcGFyc2VJbnQoc3RhcnQgfHwgMCkgKyAxICsgKHBhZ2VOdW0gLSAxKSAqIHBhcnNlSW50KHNwYWNlIHx8IDEpKVxcXFxuICAgICAgICB1cmxbMF0gPSAvXiguKj8pKD86XFxcXFxcXFxbZmlyc3RQYWdlPSguKj8pXFxcXFxcXFxdKT8kLy5leGVjKHVybFswXSlcXFxcbiAgICAgICAgdXJsWzBdID0gcnVuQ29kZSh1cmxbMF1bMl0gJiYgcGFnZU51bSA9PSAxID8gdXJsWzBdWzJdIDogdXJsWzBdWzFdKVxcXFxuICAgICAgICBsZXQgb3B0aW9ucyA9IHsgaGVhZGVyczogaGVhZGVycywgbWV0aG9kOiB1cmxbMV0gfVxcXFxuICAgICAgICAvLyBwb3N05pa55rOV5pe26L2s5o2i5Y+C5pWwXFxcXG4gICAgICAgIGlmICgvXnBvc3QkL2kudGVzdChvcHRpb25zWydtZXRob2QnXSkpIHtcXFxcbiAgICAgICAgICAgIGxldCBbb3JpVXJsLCBib2R5XSA9IHVybFswXS5zcGxpdCgnPycpXFxcXG4gICAgICAgICAgICB1cmxbMF0gPSBvcmlVcmwucmVwbGFjZSgv77yf77yfL2csICc/JylcXFxcbiAgICAgICAgICAgIGlmIChib2R5LnN0YXJ0c1dpdGgoJ0pzb25Cb2R5PScpKSBib2R5ID0gYm9keS5zbGljZSg5KVxcXFxuICAgICAgICAgICAgb3B0aW9uc1snYm9keSddID0gYm9keVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGlmICh1cmxbMl0pIG9wdGlvbnMuaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSAndGV4dC9wbGFpbjtjaGFyc3Q9JyArIHVybFsyXVxcXFxuICAgICAgICBpZiAodXJsWzNdKSB1cmxbM10ubWF0Y2goL3soLiopfS8pWzFdLnNwbGl0KCcmJicpLmZvckVhY2goKHYpID0+IHtcXFxcbiAgICAgICAgICAgIGxldCBba2V5LCB2YWx1ZV0gPSB2LnNwbGl0KCdAJylcXFxcbiAgICAgICAgICAgIG9wdGlvbnMuaGVhZGVyc1trZXldID0gcnVuQ29kZSh2YWx1ZSlcXFxcbiAgICAgICAgfSlcXFxcbiAgICAgICAgLy8g5re75Yqg5YWo5bGAVUFcXFxcbiAgICAgICAgaWYgKCFvcHRpb25zLmhlYWRlcnNbJ1VzZXItQWdlbnQnXSkge1xcXFxuICAgICAgICAgICAgaWYgKE1ZX1JVTEUudWEgPT0gJ3BjJylcXFxcbiAgICAgICAgICAgICAgICBvcHRpb25zLmhlYWRlcnNbJ1VzZXItQWdlbnQnXSA9IFBDX1VBXFxcXG4gICAgICAgICAgICBlbHNlIGlmIChNWV9SVUxFLnVhID09ICdtb2JpbGUnKVxcXFxuICAgICAgICAgICAgICAgIG9wdGlvbnMuaGVhZGVyc1snVXNlci1BZ2VudCddID0gTU9CSUxFX1VBXFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgcmV0dXJuIHsgTVlfVVJMOiB1cmxbMF0sIE1ZX1VSTF9PcHRpb25zOiBvcHRpb25zIH1cXFxcbiAgICB9XFxcXG59XFxcXG5cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfMV92ZXJ0aWNhbF9waWNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5Y2V5pCcXFxcIixcXFwicGF0aFxcXCI6XFxcInNpbmdsZVNlYXJjaFxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbmxldCBteUNvbGxlY3Rpb25fZWwgPSBbXSxcXFxcbiAgICBSVUxFID0gTVlfUEFSQU1TLlJVTEUsXFxcXG4gICAga2V5d29yZCA9IGdldFBhcmFtKCdrZXl3b3JkJyksXFxcXG4gICAgcGFnZU51bSA9IHBhcnNlSW50KGdldFBhcmFtKCdwYWdlJykpXFxcXG5cXFxcbi8vIOWkhOeQhk1ZX1VSTOWSjE1ZX1JVTEVcXFxcbk1ZX1JVTEUudWEgPSBSVUxFLnVhXFxcXG5NWV9SVUxFLnRpdGxlID0gUlVMRS50aXRsZVxcXFxuTVlfUlVMRS5jb2xfdHlwZSA9IFJVTEUuY29sX3R5cGVcXFxcbk1ZX1JVTEUuZGV0YWlsX2NvbF90eXBlID0gWycnLCAnKiddLmluY2x1ZGVzKFJVTEUuc2RldGFpbF9maW5kX3J1bGUpID8gUlVMRS5kZXRhaWxfY29sX3R5cGUgOiBSVUxFLnNkZXRhaWxfY29sX3R5cGVcXFxcbk1ZX1JVTEUuZmluZF9ydWxlID0gUlVMRS5zZWFyY2hGaW5kXFxcXG5NWV9SVUxFLmRldGFpbF9maW5kX3J1bGUgPSBbJycsICcqJ10uaW5jbHVkZXMoUlVMRS5zZGV0YWlsX2ZpbmRfcnVsZSkgPyBSVUxFLmRldGFpbF9maW5kX3J1bGUgOiBSVUxFLnNkZXRhaWxfZmluZF9ydWxlXFxcXG5NWV9SVUxFLnByZVJ1bGUgPSBSVUxFLnByZVJ1bGVcXFxcbk1ZX1JVTEUucGFnZUxpc3QgPSBKU09OLnBhcnNlKFJVTEUucGFnZXMgfHwgJ1tdJylcXFxcbk1ZX1JVTEUucGFnZXMgPSBKU09OLnN0cmluZ2lmeShNWV9SVUxFLnBhZ2VMaXN0KVxcXFxuTVlfUlVMRS5sYXN0X2NoYXB0ZXJfcnVsZSA9IFJVTEUubGFzdF9jaGFwdGVyX3J1bGVcXFxcbk1ZX1JVTEUucGFyYW1zID0ge31cXFxcblxcXFxuY29uc3QgeyBydW5Db2RlLCB1cmxQYXJzZSB9ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvdXRpbGl0eT9ydWxlPScgKyBnZXRJdGVtKCdteUNvbGxlY3Rpb24nKSlcXFxcbnZhciB7IE1ZX1VSTCwgTVlfVVJMX09wdGlvbnMgfSA9IHVybFBhcnNlKFJVTEUuc2VhcmNoX3VybCwge30sIHBhZ2VOdW0sICh1cmwpID0+IHtcXFxcbiAgICB1cmxbMF0gPSB1cmxbMF0ucmVwbGFjZSh1cmxbMF0uaW5jbHVkZXMoJyUlJykgPyAvJSUvZyA6IC9cXFxcXFxcXCpcXFxcXFxcXCovZywgZW5jb2RlU3RyKGtleXdvcmQsIHVybFsyXSkpXFxcXG59KSxcXFxcbiAgICBpbmRleEh0bWwgPSBmZXRjaChNWV9VUkwsIE1ZX1VSTF9PcHRpb25zKVxcXFxuTVlfUlVMRS51cmwgPSBNWV9VUkxcXFxcbk1ZX1JVTEUudXJsSGVhZGVycyA9IE1ZX1VSTF9PcHRpb25zLmhlYWRlcnNcXFxcbi8vIOato+aWh+ino+aekFxcXFxuaWYgKHBhZ2VOdW0gPT0gMSkgc2V0UGFnZVRpdGxlKCfigJwnICsga2V5d29yZCArICfigJ3nmoTmkJzntKLnu5PmnpwnKVxcXFxuaWYgKE1ZX1JVTEUuZmluZF9ydWxlLnN0YXJ0c1dpdGgoJ2pzOicpKSB7XFxcXG4gICAgZnVuY3Rpb24gZ2V0VXJsKCkge1xcXFxuICAgICAgICByZXR1cm4gTVlfVVJMXFxcXG4gICAgfVxcXFxuXFxcXG4gICAgZnVuY3Rpb24gZ2V0UmVzQ29kZSgpIHtcXFxcbiAgICAgICAgcmV0dXJuIGluZGV4SHRtbFxcXFxuICAgIH1cXFxcblxcXFxuICAgIGZ1bmN0aW9uIHNldFJlc3VsdChlbCwgcGFyYW0xLCBwYXJhbTIsIHBhcmFtMykge1xcXFxuICAgICAgICBwYXJhbTEgPSBDQUxMQkFDS19LRVlcXFxcbiAgICAgICAgcGFyYW0yID0gTVlfUlVMRVxcXFxuICAgICAgICBwYXJhbTMgPSBNWV9UWVBFXFxcXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGVsLmRhdGEpKSBlbCA9IGVsLmRhdGFcXFxcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkobXlDb2xsZWN0aW9uX2VsLCBlbC5tYXAoKHYpID0+IHtcXFxcbiAgICAgICAgICAgIGxldCBNWV9fUlVMRSA9IE9iamVjdC5hc3NpZ24oe30sIE1ZX1JVTEUpLFxcXFxuICAgICAgICAgICAgICAgIHN1YlRpdGxlID0gdi50aXRsZVxcXFxuICAgICAgICAgICAgdi50aXRsZSArPSAn4oCc4oCc4oCd4oCdPGJyPicgKyAoUlVMRS50aXRsZS5mb250Y29sb3IoJyMxMmI2NjgnKSArICcg4paqICcgKyAodi5kZXNjIHx8ICcnKS5mb250Y29sb3IoJyM2NjY2NjYnKSkuc21hbGwoKVxcXFxuICAgICAgICAgICAgdi5kZXNjID0gdi5jb250ZW50IHx8ICcnXFxcXG4gICAgICAgICAgICBpZighdi5pbWcpIHYuY29sX3R5cGUgPSAndGV4dF8xJ1xcXFxuICAgICAgICAgICAgZGVsZXRlIHYuY29udGVudFxcXFxuXFxcXG4gICAgICAgICAgICBpZiAoIXYudXJsKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodi51cmwuaW5jbHVkZXMoJ0BydWxlPScpKSB7XFxcXG4gICAgICAgICAgICAgICAgbGV0IFtfLCB1cmwsIHJ1bGVdID0gdi51cmwubWF0Y2goL14oW1xcXFxcXFxcc1xcXFxcXFxcU10qPylAcnVsZT0oW1xcXFxcXFxcc1xcXFxcXFxcU10qKSQvKVxcXFxuICAgICAgICAgICAgICAgIHYudXJsID0gdXJsXFxcXG4gICAgICAgICAgICAgICAgTVlfX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSA9IHJ1bGVcXFxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5kZXRhaWxfY29sX3R5cGUgPSBNWV9SVUxFLmNvbF90eXBlXFxcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHYudXJsLnN0YXJ0c1dpdGgoJ2hpa2VyOi8vcGFnZS8nKSkge1xcXFxuICAgICAgICAgICAgICAgIGlmICh2LnVybC5pbmNsdWRlcygncnVsZT0nKSB8fCAodi5leHRyYSB8fCB7fSkucnVsZSlcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZcXFxcbiAgICAgICAgICAgICAgICBsZXQgW18sIHBhdGgsIHBhcmFtc10gPSB2LnVybC5zcGxpdCgnIycpWzBdLm1hdGNoKC9eaGlrZXI6XFxcXFxcXFwvXFxcXFxcXFwvcGFnZVxcXFxcXFxcLyguKz8pKD86XFxcXFxcXFw/KC4qKSk/JC8pLFxcXFxuICAgICAgICAgICAgICAgICAgICBzdWJQYWdlID0gTVlfUlVMRS5wYWdlTGlzdC5maW5kKCh2KSA9PiB2LnBhdGggPT0gcGF0aCksXFxcXG4gICAgICAgICAgICAgICAgICAgIHN1YlVybCA9IChwYXJhbXMgfHwgJycpLnNwbGl0KCcmJykuZmluZCgodikgPT4gdi5zdGFydHNXaXRoKCd1cmw9JykpXFxcXG4gICAgICAgICAgICAgICAgdi51cmwgPSBzdWJVcmwgPyBzdWJVcmwuc2xpY2UoNCkucmVwbGFjZSgv77yf77yfL2csICc/JykucmVwbGFjZSgv77yG77yGL2csICcmJykgOiAodi5leHRyYSB8fCB7fSkudXJsIHx8ICdoaWtlcjovL2VtcHR5PycgKyAocGFyYW1zIHx8ICcnKVxcXFxuICAgICAgICAgICAgICAgIE1ZX19SVUxFLmRldGFpbF9maW5kX3J1bGUgPSBzdWJQYWdlLnJ1bGVcXFxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5kZXRhaWxfY29sX3R5cGUgPSBzdWJQYWdlLmNvbF90eXBlXFxcXG4gICAgICAgICAgICAgICAgTVlfX1JVTEUucGFyYW1zID0gdi5leHRyYSB8fCB7fVxcXFxuICAgICAgICAgICAgfSBlbHNlIGlmICh2LnVybC5pbmNsdWRlcygnQGxhenlSdWxlPScpKSB7XFxcXG4gICAgICAgICAgICAgICAgdi51cmwgPSB2LnVybC5yZXBsYWNlKCcuanM6JywgJy5qczpcXFxcXFxcXG5pZihNWV9SVUxFKU9iamVjdC5hc3NpZ24oTVlfUlVMRSwnICsgJC5zdHJpbmdpZnkoeyBwYWdlczogTVlfUlVMRS5wYWdlcywgcGFnZUxpc3Q6IE1ZX1JVTEUucGFnZUxpc3QsIGZpbmRfcnVsZTogJycsIHBhcmFtczogJycgfSkgKyAnKTtNWV9VUkw9XFxcXFxcXCInICsgTVlfVVJMICsgJ1xcXFxcXFwiOycpXFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIU1ZX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSB8fCB2LnVybC5zdGFydHNXaXRoKCdoaWtlcjovLycpKSB7IHJldHVybiB2IH1cXFxcbiAgICAgICAgICAgIHYuZXh0cmEgPSB7IHVybDogdi51cmwsIFJVTEU6IE1ZX19SVUxFLCBwYWdlVGl0bGU6IHN1YlRpdGxlIH1cXFxcbiAgICAgICAgICAgIHYudXJsID0gJ2hpa2VyOi8vcGFnZS9kZXRhaWxMb2FkP3J1bGU9JyArIGdldEl0ZW0oJ215Q29sbGVjdGlvbicpXFxcXG4gICAgICAgICAgICBpZiAodi5leHRyYS5SVUxFLnVybC5pbmNsdWRlcygnI2ltbWVyc2l2ZVRoZW1lIycpKSB2LnVybCArPSAnJiNpbW1lcnNpdmVUaGVtZSMnXFxcXG4gICAgICAgICAgICByZXR1cm4gdlxcXFxuICAgICAgICB9KSlcXFxcbiAgICAgICAgbWV0aG9kX3NldFJlc3VsdC5pbnZva2UoamF2YUNvbnRleHQsIG15Q29sbGVjdGlvbl9lbCwgcGFyYW0xLCBwYXJhbTIsIHBhcmFtMylcXFxcbiAgICB9XFxcXG4gICAgc2V0SG9tZVJlc3VsdCA9IHNldFJlc3VsdFxcXFxuICAgIHNldFNlYXJjaFJlc3VsdCA9IHNldFJlc3VsdFxcXFxuXFxcXG4gICAgZXZhbChNWV9SVUxFLmZpbmRfcnVsZS5zbGljZSgzKSlcXFxcbn0gZWxzZSB7XFxcXG4gICAgbGV0IGZpbmRSdWxlID0gTVlfUlVMRS5maW5kX3J1bGUuc3BsaXQoJzsnKVxcXFxuICAgIHBhcnNlRG9tRm9yQXJyYXkoaW5kZXhIdG1sLCBmaW5kUnVsZS5zaGlmdCgpKS5mb3JFYWNoKChkYXRhKSA9PiB7XFxcXG4gICAgICAgIGxldCBbdGl0bGUsIHVybCwgZGVzYywgY29udGVudCwgaW1nXSA9IGZpbmRSdWxlLm1hcCgodiwgaSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGlmICh2ID09ICcqJykgcmV0dXJuICcnXFxcXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgdiA9IChpID09IDEgfHwgaSA9PSA0KSA/XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZURvbShkYXRhLCB2KSA6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZURvbUZvckh0bWwoZGF0YSwgdilcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT0gMSkgdiA9IHJ1bkNvZGUodilcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZcXFxcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7IHJldHVybiAnJyB9XFxcXG4gICAgICAgICAgICB9KSxcXFxcbiAgICAgICAgICAgIHJlcyA9IHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUgKyAn4oCc4oCc4oCd4oCdPGJyPicgKyAoUlVMRS50aXRsZS5mb250Y29sb3IoJyMxMmI2NjgnKSArICcg4paqICcgKyBkZXNjLmZvbnRjb2xvcignIzY2NjY2NicpKS5zbWFsbCgpLFxcXFxuICAgICAgICAgICAgICAgIHVybDogdXJsLFxcXFxuICAgICAgICAgICAgICAgIGRlc2M6IGNvbnRlbnQsXFxcXG4gICAgICAgICAgICAgICAgaW1nOiBpbWdcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgaWYoIXJlcy5pbWcpIHJlcy5jb2xfdHlwZSA9ICd0ZXh0XzEnXFxcXG4gICAgICAgIGlmIChyZXMudXJsKSB7XFxcXG4gICAgICAgICAgICBpZiAocmVzLnVybC5pbmNsdWRlcygnQGxhenlSdWxlPScpKSB7XFxcXG4gICAgICAgICAgICAgICAgcmVzLnVybCA9IHJlcy51cmwucmVwbGFjZSgnLmpzOicsICcuanM6XFxcXFxcXFxuaWYoTVlfUlVMRSlPYmplY3QuYXNzaWduKE1ZX1JVTEUsJyArICQuc3RyaW5naWZ5KHsgcGFnZXM6IE1ZX1JVTEUucGFnZXMsIHBhZ2VMaXN0OiBNWV9SVUxFLnBhZ2VMaXN0LCBmaW5kX3J1bGU6ICcnLCBwYXJhbXM6ICcnIH0pICsgJyk7TVlfVVJMPVxcXFxcXFwiJyArIE1ZX1VSTCArICdcXFxcXFxcIjsnKVxcXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChNWV9SVUxFLmRldGFpbF9maW5kX3J1bGUpIHtcXFxcbiAgICAgICAgICAgICAgICByZXMuZXh0cmEgPSB7IHVybDogdXJsLCBSVUxFOiBNWV9SVUxFLCBwYWdlVGl0bGU6IHRpdGxlIH1cXFxcbiAgICAgICAgICAgICAgICByZXMudXJsID0gJ2hpa2VyOi8vcGFnZS9kZXRhaWxMb2FkP3J1bGU9JyArIGdldEl0ZW0oJ215Q29sbGVjdGlvbicpXFxcXG4gICAgICAgICAgICAgICAgaWYgKHJlcy5leHRyYS5SVUxFLnVybC5pbmNsdWRlcygnI2ltbWVyc2l2ZVRoZW1lIycpKSByZXMudXJsICs9ICcmI2ltbWVyc2l2ZVRoZW1lIydcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBteUNvbGxlY3Rpb25fZWwucHVzaChyZXMpXFxcXG4gICAgfSlcXFxcbiAgICBzZXRSZXN1bHQobXlDb2xsZWN0aW9uX2VsKVxcXFxufVxcXFxuXFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcImljb25fMl9yb3VuZFxcXCIsXFxcIm5hbWVcXFwiOlxcXCLorr7nva5cXFwiLFxcXCJwYXRoXFxcIjpcXFwiQ29uZmlnXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxuYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAnY2xlYXJWYXIoXFxcXFxcXCJteUNvbGxlY3Rpb24tc29ydEZsYWdcXFxcXFxcIik7cmVmcmVzaFBhZ2UoKScpXFxcXG5zZXRQYWdlVGl0bGUoJ+KamSDovbvlkIjpm4borr7nva4g4pqZJylcXFxcbmxldCBlbCA9IFt7XFxcXG4gICAgICAgIHRpdGxlOiAn5riF6Zmk57yT5a2YLOeri+WNs+abtOaWsCA8c21hbGw+IO+8iOWfuuS6jui/nOeoi+S7k+W6kyzkuI3opoHpopHnuYHngrnlh7vvvIknLFxcXFxuICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoKSA9PiB7XFxcXG4gICAgICAgICAgICBkZWxldGVGaWxlKCd1cGRhdGV0aW1lJylcXFxcbiAgICAgICAgICAgIGJhY2sodHJ1ZSlcXFxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lmm7TmlrAnXFxcXG4gICAgICAgIH0pLFxcXFxuICAgICAgICBpbWc6ICdoaWtlcjovL2ltYWdlcy9pY29uMScsXFxcXG4gICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJ1xcXFxuICAgIH1dLFxcXFxuICAgIHNlYXJjaFRoZCA9IHBhcnNlSW50KHJlYWRGaWxlKCdzZWFyY2hUaGQnKSB8fCAnNScpLFxcXFxuICAgIG5ld1dpbmRvdyA9IHJlYWRGaWxlKCduZXdXaW5kb3cnKSxcXFxcbiAgICBlZGl0TW9kZSA9IGdldFZhcignbXlDb2xsZWN0aW9uLWVkaXRNb2RlJywgJ+WQr+eUqC/npoHnlKgnKVxcXFxuXFxcXG5lbC5wdXNoKHtcXFxcbiAgICB0aXRsZTogJ/CflI0g5pCc57Si5qih5byPOiAnICsgKHNlYXJjaFRoZCA9PSAwID8gJ+WIlycgOiAn6IGaJyArIHNlYXJjaFRoZCksXFxcXG4gICAgdXJsOiAkKFsn5YiX6KGo5pCc57SiJywgJ+iBmuWQiOaQnOe0oiddLCAxKS5zZWxlY3QoKHNlYXJjaFRoZCkgPT4ge1xcXFxuICAgICAgICBpZiAoaW5wdXQgPT0gJ+WIl+ihqOaQnOe0oicpIHtcXFxcbiAgICAgICAgICAgIHNhdmVGaWxlKCdzZWFyY2hUaGQnLCAnMCcpXFxcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICBpZiAoc2VhcmNoVGhkID09IDApIHNlYXJjaFRoZCA9IDVcXFxcbiAgICAgICAgICAgIHJldHVybiAkKHNlYXJjaFRoZCwgJ+i+k+WFpeaQnOe0oue6v+eoi++8jOacgOWlveS4jeimgei2hei/hzE2JykuaW5wdXQoKCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIHNhdmVGaWxlKCdzZWFyY2hUaGQnLCBpbnB1dClcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICB9XFxcXG4gICAgfSwgc2VhcmNoVGhkKSxcXFxcbiAgICBjb2xfdHlwZTogJ3RleHRfMidcXFxcbn0sIHtcXFxcbiAgICB0aXRsZTogJ/CflqUg54us56uL6aaW6aG1OiAnICsgKG5ld1dpbmRvdyA/ICfmmK8nIDogJ+WQpicpLFxcXFxuICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgobmV3V2luZG93KSA9PiB7XFxcXG4gICAgICAgIHNhdmVGaWxlKCduZXdXaW5kb3cnLCBuZXdXaW5kb3cgPyAnJyA6ICcxJylcXFxcbiAgICAgICAgcmVmcmVzaFBhZ2UoKVxcXFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxcXG4gICAgfSwgbmV3V2luZG93KSxcXFxcbiAgICBjb2xfdHlwZTogJ3RleHRfMidcXFxcbn0pXFxcXG5cXFxcbmVsLnB1c2goeyBjb2xfdHlwZTogJ2xpbmUnIH0sIHsgY29sX3R5cGU6ICdiaWdfYmxhbmtfYmxvY2snIH0pO1xcXFxuWyflkK/nlKgv56aB55SoJywgJ+mHjeaWsOaOkuW6jycsICfmm7TmlLnlm77moIcnLCAn5a+85YWl5rW36ZiUJ10uZm9yRWFjaCgodikgPT4ge1xcXFxuICAgIGVsLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogdiA9PSBlZGl0TW9kZSA/ICfigJzigJzigJ3igJ0nICsgdi5ib2xkKCkuZm9udGNvbG9yKCcjMTJiNjY4JykgOiB2LFxcXFxuICAgICAgICB1cmw6IHYgPT0gZWRpdE1vZGUgPyAnaGlrZXI6Ly9lbXB0eScgOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCh2KSA9PiB7XFxcXG4gICAgICAgICAgICBwdXRWYXIoJ215Q29sbGVjdGlvbi1lZGl0TW9kZScsIHYpXFxcXG4gICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcXFxcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXFxcbiAgICAgICAgfSwgdiksXFxcXG4gICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXFxcbiAgICB9KVxcXFxufSlcXFxcbmVsLnB1c2goe1xcXFxuICAgIHRpdGxlOiAn5oGi5aSN5Ye65Y6C5pWw5o2uJyxcXFxcbiAgICB1cmw6ICQoJ+ehruWumuimgeaBouWkjeWHuuWOgu+8jOa4healmuiHquWumuS5ieaVsOaNruWQl++8nycpLmNvbmZpcm0oKCkgPT4ge1xcXFxuICAgICAgICBkZWxldGVGaWxlKCdjdXN0b21EYXRhJylcXFxcbiAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxcXG4gICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7LmgaLlpI3lh7rljoLmlbDmja4nXFxcXG4gICAgfSksXFxcXG4gICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcXFxufSlcXFxcblxcXFxuY29uc3QgeyBkYXRhTG9hZCB9ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvdXRpbGl0eT9ydWxlPScgKyBnZXRJdGVtKCdteUNvbGxlY3Rpb24nKSlcXFxcbmxldCBkYXRhID0gZGF0YUxvYWQodHJ1ZSlcXFxcbkpTT04ucGFyc2UocmVhZEZpbGUoJ2N1c3RvbURhdGEnKSB8fCAnW10nKS5mb3JFYWNoKCh2LCBpKSA9PiB7XFxcXG4gICAgbGV0IGQgPSB7IHRpdGxlOiB2LnRpdGxlLCBpbWc6IGRhdGFbaV0uaWNvbiB9XFxcXG4gICAgc3dpdGNoIChlZGl0TW9kZSkge1xcXFxuICAgICAgICBjYXNlICflkK/nlKgv56aB55SoJzpcXFxcbiAgICAgICAgICAgIGQudGl0bGUgPSAodi52aXNpYmxlID8gJ/Cfn6IgICcgOiAn8J+UtCAgJykgKyBkLnRpdGxlXFxcXG4gICAgICAgICAgICBkLnVybCA9ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHJ1bGUpID0+IHtcXFxcbiAgICAgICAgICAgICAgICBsZXQgcnVsZXMgPSBKU09OLnBhcnNlKHJlYWRGaWxlKCdjdXN0b21EYXRhJykgfHwgJ1tdJyksXFxcXG4gICAgICAgICAgICAgICAgICAgIGluZGV4ID0gcnVsZXMuZmluZEluZGV4KCh2KSA9PiB2LnRpdGxlID09IHJ1bGUudGl0bGUpXFxcXG4gICAgICAgICAgICAgICAgcnVsZXNbaW5kZXhdLnZpc2libGUgPSAhcnVsZXNbaW5kZXhdLnZpc2libGVcXFxcbiAgICAgICAgICAgICAgICBzYXZlRmlsZSgnY3VzdG9tRGF0YScsIEpTT04uc3RyaW5naWZ5KHJ1bGVzKSlcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxcXG4gICAgICAgICAgICB9LCB2KVxcXFxuICAgICAgICAgICAgYnJlYWtcXFxcbiAgICAgICAgY2FzZSAn6YeN5paw5o6S5bqPJzpcXFxcbiAgICAgICAgICAgIGxldCBzb3J0RmxhZyA9IHBhcnNlSW50KGdldFZhcignbXlDb2xsZWN0aW9uLXNvcnRGbGFnJywgJy0xJykpXFxcXG4gICAgICAgICAgICBkLnRpdGxlID0gKHNvcnRGbGFnID09IGkgPyAn8J+UhCAgJyA6ICcnKSArIGQudGl0bGVcXFxcbiAgICAgICAgICAgIGlmIChzb3J0RmxhZyA9PSAtMSlcXFxcbiAgICAgICAgICAgICAgICBkLnVybCA9ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGkpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcHV0VmFyKCdteUNvbGxlY3Rpb24tc29ydEZsYWcnLCBpLnRvU3RyaW5nKCkpXFxcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6YCJ5oup6KaB56e75Yqo5Yiw55qE5L2N572uJ1xcXFxuICAgICAgICAgICAgICAgIH0sIGkpXFxcXG4gICAgICAgICAgICBlbHNlXFxcXG4gICAgICAgICAgICAgICAgZC51cmwgPSAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChvbGRJbmRleCwgbmV3SW5kZXgpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJ1bGVzID0gSlNPTi5wYXJzZShyZWFkRmlsZSgnY3VzdG9tRGF0YScpIHx8ICdbXScpXFxcXG4gICAgICAgICAgICAgICAgICAgIHJ1bGVzLnNwbGljZShuZXdJbmRleCwgMCwgcnVsZXMuc3BsaWNlKG9sZEluZGV4LCAxKVswXSlcXFxcbiAgICAgICAgICAgICAgICAgICAgc2F2ZUZpbGUoJ2N1c3RvbURhdGEnLCBKU09OLnN0cmluZ2lmeShydWxlcykpXFxcXG4gICAgICAgICAgICAgICAgICAgIHB1dFZhcignbXlDb2xsZWN0aW9uLXNvcnRGbGFnJywgJy0xJylcXFxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXFxcbiAgICAgICAgICAgICAgICB9LCBzb3J0RmxhZywgaSlcXFxcbiAgICAgICAgICAgIGJyZWFrXFxcXG4gICAgICAgIGNhc2UgJ+abtOaUueWbvuaghyc6XFxcXG4gICAgICAgICAgICBkLnVybCA9ICQodi5pY29uIHx8ICcnLCAn6L6T5YWl5paw5Zu+5qCH5Zyw5Z2A5oiW6aKc6Imy5Luj56CB77yaJykuaW5wdXQoKHJ1bGUpID0+IHtcXFxcbiAgICAgICAgICAgICAgICBsZXQgcnVsZXMgPSBKU09OLnBhcnNlKHJlYWRGaWxlKCdjdXN0b21EYXRhJykgfHwgJ1tdJyksXFxcXG4gICAgICAgICAgICAgICAgICAgIGluZGV4ID0gcnVsZXMuZmluZEluZGV4KCh2KSA9PiB2LnRpdGxlID09IHJ1bGUudGl0bGUpXFxcXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0KVxcXFxuICAgICAgICAgICAgICAgICAgICBydWxlc1tpbmRleF0uaWNvbiA9IGlucHV0XFxcXG4gICAgICAgICAgICAgICAgZWxzZVxcXFxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcnVsZXNbaW5kZXhdLmljb25cXFxcbiAgICAgICAgICAgICAgICBzYXZlRmlsZSgnY3VzdG9tRGF0YScsIEpTT04uc3RyaW5naWZ5KHJ1bGVzKSlcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxcXG4gICAgICAgICAgICB9LCB2KVxcXFxuICAgICAgICAgICAgYnJlYWtcXFxcbiAgICAgICAgY2FzZSAn5a+85YWl5rW36ZiUJzpcXFxcbiAgICAgICAgICAgIGQudXJsID0gJ3J1bGU6Ly8nICsgYmFzZTY0RW5jb2RlKEpTT04uc3RyaW5naWZ5KGRhdGFbaV0pKVxcXFxuICAgICAgICAgICAgYnJlYWtcXFxcbiAgICB9XFxcXG4gICAgZWwucHVzaChkKVxcXFxufSlcXFxcbnNldFJlc3VsdChlbClcXFxcblxcXCJ9XVwifSIsInBpY1VybCI6Imh0dHBzOi8vZ2ltZzAuYmFpZHUuY29tL2dpbWcvc3JjPWh0dHAlM0ElMkYlMkZnZG93bi5iYWlkdS5jb20lMkZpbWclMkYwJTJGNTEyXzUxMiUyRmExODk5NTUyZGIyYjRhYWZlMDBjOWNjMGZjYzc1NTdjLnBuZyZhcHA9MjAwOCZzaXplPWIyMTksMjE5Jm49MCZnPTBuJnNlYz0xNjM2MjAxNTgzJnQ9NDI4NzgzMGM5NjcwODUwYTQ2ZTc3ODVlYTk1MzA4MDMiLCJ0aXRsZSI6IuaWsOeVquabtOaWsOihqCJ9
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement