xiaomianao666

小程序:阅漫君

Aug 20th, 2024
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@阅漫君@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6IiIsInRpdGxlIjoi6ZiF5ryr5ZCbIiwiYXV0aG9yIjoi5bCP57Gz57KlJuWbouWtkCbkvJfkvY3lpKfkvawiLCJ1cmwiOiJoaWtlcjovL2VtcHR5IiwidmVyc2lvbiI6OTIsImNvbF90eXBlIjoiaWNvbl9zbWFsbF80IiwiY2xhc3NfbmFtZSI6IiIsInR5cGUiOiJjYXJ0b29uIiwiY2xhc3NfdXJsIjoiIiwiYXJlYV9uYW1lIjoiIiwiYXJlYV91cmwiOiIiLCJzb3J0X25hbWUiOiIiLCJ5ZWFyX25hbWUiOiIiLCJzb3J0X3VybCI6IiIsInllYXJfdXJsIjoiIiwiZmluZF9ydWxlIjoianM6XG5jb25zdCBRSU5HX1RJVExFID0gZ2V0TXlWYXIoJ215Q29sbGVjdGlvbicpLFxuICAgIG5ld1dpbmRvdyA9IHJlYWRGaWxlKCduZXdXaW5kb3cnKSxcbiAgICB0eXBlU2hvdyA9IGdldE15VmFyKCd0eXBlU2hvdycsICdAJyksXG4gICAgdHlwZXMgPSB7XG4gICAgICAgICdjYXJ0b29uJzogJ/CflK7mvKvnlLsnLFxuICAgICAgICAnb3RoZXInOiAn4pyI77iP5qKv5a2QJyxcbiAgICAgICAgJ2FsbCc6ICfwn4yx5LyY6LSo5Yqo5ryrJyxcbiAgICAgICAgJ211c2ljJzogJ/Cfkr3pn7PkuZAnLFxuICAgICAgICAnbGl2ZSc6ICfwn46b55u05pKtJyxcbiAgICAgICAgJ3JlYWQnOiAn8J+TmeS5picsXG4gICAgICAgICdwaWN0dXJlJzogJ/Cfk5rlm77niYcnLFxuICAgICAgICAnbmV3cyc6ICfwn5qr5peg5pCc57SiJyxcbiAgICAgICAgJ3Rvb2wnOiAn8J+TpeS4i+i9vSdcbiAgICB9XG5sZXQgZWwgPSBbe1xuICAgICAgICB0aXRsZTogJyAnICsgUUlOR19USVRMRS5ib2xkKCkgKyAnICZuYnNwICZuYnNwICcgKyAn4pqZIOmYhea8q+WQm/CfjLHorr7nva4g4pqZJy5zbWFsbCgpLFxuICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UvQ29uZmlnP3J1bGU9JyArIFFJTkdfVElUTEUgKyAnJiNub1JlY29yZEhpc3RvcnkjJyxcbiAgICAgIGltZzpcbidodHRwczovL2ltZy52aW51YS5jbi9pbWFnZXMvdmtoUncuanBlZycsXG4gICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJyxcbiAgICAgICAgZXh0cmE6IHtcbiAgICAgICAgICAgIHZlcnNpb246IE1ZX1JVTEUudmVyc2lvblxuICAgICAgICB9XG4gICAgfSwge1xuICAgICAgICBkZXNjOiAnMCcsXG4gICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS9NYWluLnZpZXc/cnVsZT3mnKzlnLDotYTmupDnrqHnkIYnLFxuICAgICAgICBpbWc6ICdodHRwczovL2ltZy52aW51YS5jbi9pbWFnZXMvdmtoUncuanBlZycsXG4gICAgICAgIGNvbF90eXBlOiAnY2FyZF9waWNfMSdcbiAgICB9LCB7XG4gICAgICAgIHVybDogJ1wiaGlrZXI6Ly9zZWFyY2g/cz1cIitpbnB1dCcsXG4gICAgICAgIGRlc2M6ICflgL7lkJvkuYvoqIDvvIzpmIXmsLTlpKnkuIDoibJ+fumYhea8q+WQmycsXG4gICAgICAgIHRpdGxlOiAn5pCc57SiJyxcbiAgICAgICAgY29sX3R5cGU6ICdpbnB1dCcsXG4gICAgICAgIGV4dHJhOiB7XG4gICAgICAgICAgICBydWxlczogJC50b1N0cmluZygoUUlOR19USVRMRSwgdHlwZVNob3cpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgcnVsZXMgPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9kYXRhTG9hZD9ydWxlPScgKyBRSU5HX1RJVExFKVxuICAgICAgICAgICAgICAgIGlmICh0eXBlU2hvd1swXSA9PSAnQCcpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZpbHRlcktleSA9IHR5cGVTaG93LnNsaWNlKDEpXG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJLZXkpIHJ1bGVzID0gcnVsZXMuZmlsdGVyKCh2KSA9PiB2LnRpdGxlLmluY2x1ZGVzKGZpbHRlcktleSkpXG4gICAgICAgICAgICAgICAgfSBlbHNlIHJ1bGVzID0gcnVsZXMuZmlsdGVyKCh2KSA9PiB2LnR5cGUgPT0gdHlwZVNob3cpO1xuICAgICAgICAgICAgICAgIGxldCB5dXg9XCJ5dXhcIitEYXRlLm5vdygpO1xuICAgICAgICAgICAgICAgIGxldCBlbCA9ICQudG9TdHJpbmcoKFFJTkdfVElUTEUsIHl1eCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGlqYWNrRWxcbiAgICAgICAgICAgICAgICAgICAgfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL2Z1bmNUb29scz9ydWxlPScgKyBRSU5HX1RJVExFLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBRSU5HX1RJVExFOlFJTkdfVElUTEUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0luZGV4OiAkLmhpa2VyW3l1eF0sXG4gICAgICAgICAgICAgICAgICAgICAgICBNWV9SVUxFOk1ZX1JVTEVcbiAgICAgICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgICAgICAkLmhpa2VyLnNldFJlc3VsdCA9IGZ1bmN0aW9uKHBhcmFtMCwgcGFyYW0xLCBwYXJhbTIsIHBhcmFtMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW0xID0gQ0FMTEJBQ0tfS0VZXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbTIgPSBNWV9SVUxFXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbTMgPSBNWV9UWVBFXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJhbTAuZGF0YSkpIHBhcmFtMCA9IHBhcmFtMC5kYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbTAgPSBwYXJhbTAubWFwKGhpamFja0VsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZF9zZXRSZXN1bHQuaW52b2tlKGphdmFDb250ZXh0LCBwYXJhbTAsIHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgJC5oaWtlci5zZXRIb21lUmVzdWx0ID0gc2V0UmVzdWx0XG4gICAgICAgICAgICAgICAgICAgICQuaGlrZXIuc2V0U2VhcmNoUmVzdWx0ID0gc2V0UmVzdWx0XG4gICAgICAgICAgICAgICAgfSwgUUlOR19USVRMRSwgeXV4KTtcbiAgICAgICAgICAgICAgICBydWxlcyA9IHJ1bGVzLm1hcCgodixpKT0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHYuc2VhcmNoRmluZC5zdGFydHNXaXRoKCdqczonKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdi5zZWFyY2hGaW5kID0gXCJqczokLmhpa2VyLlwiK3l1eCtcIj1cIitpK1wiO1wiICsgZWwgKyBcIjtcIiArIHYuc2VhcmNoRmluZC5zbGljZSgzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocnVsZXMpXG4gICAgICAgICAgICB9LCBRSU5HX1RJVExFLCB0eXBlU2hvdyksXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldE15VmFyKCdzZWFyY2hLZXknLCAnJyksXG4gICAgICAgICAgICBvbkNoYW5nZTogXCJwdXRNeVZhcignc2VhcmNoS2V5JyxpbnB1dClcIlxuICAgICAgICB9XG4gICAgfV0sXG4gICAgcnVsZXMgPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9kYXRhTG9hZD9ydWxlPScgKyBRSU5HX1RJVExFKSxcbiAgICBydWxlc1R5cGUgPSBydWxlcy5yZWR1Y2UoKG9iaiwgdikgPT4ge1xuICAgICAgICBsZXQgdHlwZSA9IHYudHlwZVxuICAgICAgICBpZiAodHlwZSkge1xuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9ialt0eXBlXSkpXG4gICAgICAgICAgICAgICAgb2JqW3R5cGVdID0gW11cbiAgICAgICAgICAgIG9ialt0eXBlXS5wdXNoKHYpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9ialxuICAgIH0sIHt9KVxuaWYgKHR5cGVTaG93WzBdID09ICdAJykge1xuICAgIGxldCBmaWx0ZXJLZXkgPSB0eXBlU2hvdy5zbGljZSgxKVxuICAgIGlmIChmaWx0ZXJLZXkpIHJ1bGVzID0gcnVsZXMuZmlsdGVyKCh2KSA9PiB2LnRpdGxlLmluY2x1ZGVzKGZpbHRlcktleSkpXG59XG5lbC5wdXNoKHtcbiAgICBpbWc6ICdodHRwczovL2ltZy52aW51YS5jbi9pbWFnZXMvdmtoUncuanBlZycsXG4gICAgdGl0bGU6ICfmlLbol48nLFxuICAgIHVybDogXCJoaWtlcjovL2NvbGxlY3Rpb24/Z3JvdXA96ZiF5ryr5ZCbXCIsXG4gICAgY29sX3R5cGU6IFwiaWNvbl8yXCJcbn0sIHtcbiAgICBpbWc6ICdodHRwczovL2ltZy52aW51YS5jbi9pbWFnZXMvdmtoUncuanBlZycsXG4gICAgdGl0bGU6ICfljoblj7InLFxuICAgIHVybDogXCJoaWtlcjovL2hpc3RvcnlcIixcbiAgICBjb2xfdHlwZTogXCJpY29uXzJcIlxufSlcbmVsLnB1c2godHlwZVNob3dbMF0gPT0gJ0AnID8ge1xuICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdJyArICgn5YWo6YOoJyArICh0eXBlU2hvd1sxXSA/ICdbJyArIHR5cGVTaG93LnNsaWNlKDEpICsgJ10nIDogJycpKS5ib2xkKCkuZm9udGNvbG9yKCcjMTJiNjY4JykgKyAnICcgKyAocnVsZXMubGVuZ3RoKS50b1N0cmluZygpLnNtYWxsKCksXG4gICAgdXJsOiAkKHR5cGVTaG93LnNsaWNlKDUpLCAn5p+l5om+5bCP56iL5bqP5YWz6ZSu6K+NJykuaW5wdXQoKCkgPT4ge1xuICAgICAgICBwdXRNeVZhcigndHlwZVNob3cnLCAnQCcgKyBpbnB1dClcbiAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcbiAgICB9KSxcbiAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXG59IDoge1xuICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCd5YWo6YOoICcgKyAocnVsZXMubGVuZ3RoKS50b1N0cmluZygpLnNtYWxsKCksXG4gICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCgpID0+IHtcbiAgICAgICAgcHV0TXlWYXIoJ3R5cGVTaG93JywgJ0AnKVxuICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcbiAgICAgICAgcmV0dXJuICd0b2FzdDovL+WGjeasoeeCueWHu+OAkOWFqOmDqOOAkeWPr+afpeaJvuWwj+eoi+W6jydcbiAgICB9KSxcbiAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXG59KVxuXG5mb3IgKGxldCBrIGluIHR5cGVzKVxuICAgIGlmIChrIGluIHJ1bGVzVHlwZSlcbiAgICAgICAgZWwucHVzaCh7XG4gICAgICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnScgKyAoayA9PSB0eXBlU2hvdyA/IHR5cGVzW2tdLmJvbGQoKS5mb250Y29sb3IoJyMxMmI2NjgnKSA6IHR5cGVzW2tdKSArICcgJyArIChydWxlc1R5cGVba10ubGVuZ3RoKS50b1N0cmluZygpLnNtYWxsKCksXG4gICAgICAgICAgICB1cmw6IGsgPT0gdHlwZVNob3cgPyAnaGlrZXI6Ly9lbXB0eScgOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChrKSA9PiB7XG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3R5cGVTaG93JywgaylcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXG4gICAgICAgICAgICB9LCBrKSxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcbiAgICAgICAgfSlcbmlmIChnZXRJdGVtKFwicmVhZF9wb2xpY3lcIikgIT09IFwiMVwiKSB7XG4gICAgZWwucHVzaCh7XG4gICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPHNtYWxsPjxmb250IGNvbG9yPSM4NzFmNzg+5Lul5LiL5pWw5o2u5rqQ5LqO572R57uc77yM6K+35pSv5oyB5a6Y5pa577yBPC9mb250Pjwvc21hbGw+JyxcbiAgICAgICAgZGVzYzogJ+KAnOKAnOKAneKAnTxzbWFsbD48Zm9udCBjb2xvcj0jZjIwYzAwPuacrOinhOWImemBk+mVv+S7k+W6k+S9nOiAhe+8muWwj+Wwj++8iOWwj+exs+eype+8ieS/ruaUue+8jOW3suaOiOadg+aOpeaJi+WbouWtkOWkp+S9rOeahOiBmua8q++8jOS7hemZkOWFjei0ueWtpuS5oOS6pOa1geS9v+eUqO+8jOivt+S6juWvvOWFpeWQjjI05bCP5pe25YaF5Yig6Zmk77yM5Lu75L2V57uE57uH5oiW5Liq5Lq65LiN5b6X5Lul5Lu75L2V5pa55byP5pa55rOV5Lyg5pKt5oiW5ZSu5Y2W5q2k6KeE5YiZ55qE5pW05L2T5oiW6YOo5YiG77yB5pys56iL5bqP5Luj56CB5p2l5rqQ5LqO572R57uc77yM5pyJ6IO95Yqb6K+35pSv5oyB5a6Y5pa5PC9mb250Pjwvc21hbGw+JyxcbiAgICAgICAgdXJsOiAkKCcjbm9IaXN0b3J5IycpLmxhenlSdWxlKCgpID0+IHtcbiAgICAgICAgICAgIHNldEl0ZW0oXCJyZWFkX3BvbGljeVwiLCBcIjFcIilcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxuICAgICAgICAgICAgcmV0dXJuIFwidG9hc3Q6Ly/kvaDlt7LlkIzmhI/or6XljY/orq5cIlxuICAgICAgICB9KSxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xuICAgIH0pXG59XG5cbmlmIChnZXRJdGVtKFwiZGF0YVwiKSAhPT0gXCIxXCIpIHtcbiAgICB1cmwgPSBnZXRNeVZhcigncmVtb3RlVXJsJylcbiAgICBlbC5wdXNoKHtcbiAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ08c21hbGw+PGZvbnQgY29sb3I9Izg3MWY3OD7ngrnlh7vojrflj5bmvKvnlLvmupA8L2ZvbnQ+PC9zbWFsbD4nLFxuICAgICAgICB1cmw6ICQoJyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKHVybCkgPT4ge1xuICAgICAgICAgICAgc2V0SXRlbShcImRhdGFcIiwgXCIxXCIpXG5cbiAgICAgICByZXF1aXJlRG93bmxvYWQoJ2h0dHBzOi8vZ2hwcm94eS5uZXQvaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL1FRMTk5M0hVQU5HL0EvbWFpbi/pmIXmvKvlkJsuanNvbicsIHVybClcbiAgICAgICAgICAgIGJhY2soZmFsc2UpXG4gICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKVxuICAgICAgICAgICAgcmV0dXJuIFwidG9hc3Q6Ly/mlbDmja7lt7Lojrflj5ZcIlxuICAgICAgICB9LCB1cmwpLFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXG4gICAgfSlcbn1cbmlmICh0eXBlU2hvd1swXSAhPSAnQCcpIHJ1bGVzID0gcnVsZXNUeXBlW3R5cGVTaG93XVxubGV0IHsgcGFyYW1IYW5kbGUgfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL2Z1bmNUb29scz9ydWxlPScgKyBRSU5HX1RJVExFLCB7fSlcbnJ1bGVzLmZvckVhY2goKHYpID0+IHtcbiAgICBsZXQgdXJsUGFyYW0gPSB2LnVybC5zcGxpdCgnOycpLFxuICAgICAgICBydWxlVG1wID0ge1xuICAgICAgICAgICAgdGl0bGU6IHYudGl0bGUsIHVybDogdXJsUGFyYW0uc2hpZnQoKSxcbiAgICAgICAgICAgIGNsYXNzX25hbWU6IHYuY2xhc3NfbmFtZSwgY2xhc3NfdXJsOiB2LmNsYXNzX3VybCxcbiAgICAgICAgICAgIGFyZWFfbmFtZTogdi5hcmVhX25hbWUsIGFyZWFfdXJsOiB2LmFyZWFfdXJsLFxuICAgICAgICAgICAgeWVhcl9uYW1lOiB2LnllYXJfbmFtZSwgeWVhcl91cmw6IHYueWVhcl91cmwsXG4gICAgICAgICAgICBzb3J0X25hbWU6IHYuc29ydF9uYW1lLCBzb3J0X3VybDogdi5zb3J0X3VybFxuICAgICAgICB9LFxuICAgICAgICBmeXBhZ2UgPSBydWxlVG1wLnVybC5pbmNsdWRlcygnZnlwYWdlJykgPyAnZnlwYWdlJyA6ICcxJyxcbiAgICAgICAgZG9tYWluID0gKC9eaHR0cHM/OlxcL1xcL1teLz8jXSsvaS5leGVjKHJ1bGVUbXAudXJsKSB8fCBbJ2hpa2VyOi8vZW1wdHknXSlbMF0sXG4gICAgICAgIGQgPSB7XG4gICAgICAgICAgICB0aXRsZTogdi50aXRsZSxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS9mcmFtZUxvYWQnLFxuICAgICAgICAgICAgaW1nOiB2Lmljb24gfHwgJ2hpa2VyOi8vaW1hZ2VzL2ljb24xJyxcbiAgICAgICAgICAgIGV4dHJhOiB7XG4gICAgICAgICAgICAgICAgdXJsOiBkb21haW4gKyAnLyNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSMjIyMnICsgZnlwYWdlICtcbiAgICAgICAgICAgICAgICAgICAgJy5qczpsZXQgeyBydW5Db2RlLCBpbmRleFVybCB9ID0gJC5yZXF1aXJlKFwiaGlrZXI6Ly9wYWdlL2Z1bmNUb29sc++8n++8n3J1bGU9JyArIFFJTkdfVElUTEUgKyAnXCIsICdcbiAgICAgICAgICAgICAgICAgICAgICsgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgICAgICAgTVlfUlVMRTogYmFzZTY0RW5jb2RlKEpTT04uc3RyaW5naWZ5KHJ1bGVUbXApKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFFJTkdfVElUTEU6IFFJTkdfVElUTEVcbiAgICAgICAgICAgICAgICAgICAgfSkgKyAnKe+8m++8m2luZGV4VXJsKGlucHV0KTsnICsgcGFyYW1IYW5kbGUodXJsUGFyYW0sIHYudWEpLFxuICAgICAgICAgICAgICAgIFJVTEU6IGJhc2U2NEVuY29kZShKU09OLnN0cmluZ2lmeSh7IHRpdGxlOiB2LnRpdGxlIH0pKSxcbiAgICAgICAgICAgICAgICBpc0luZGV4OiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICBpZiAobmV3V2luZG93KSBPYmplY3QuYXNzaWduKGQuZXh0cmEsIHtcbiAgICAgICAgbmV3V2luZG93OiB0cnVlLFxuICAgICAgICB3aW5kb3dJZDogUUlOR19USVRMRSArICdfJyArIGQudGl0bGVcbiAgICB9KVxuICAgIGVsLnB1c2goZClcbn0pXG5zZXRSZXN1bHQoZWwpIiwic2VhcmNoX3VybCI6Imhpa2VyOi8vZW1wdHk/a2V5d29yZD0qKiIsImdyb3VwIjoi4pGg5b2x6KeG5ryr55S7Iiwic2VhcmNoRmluZCI6ImpzOlxuc2V0UmVzdWx0KFt7XG4gICAgdGl0bGU6IFwi54K55oiR5byA5aeL6ZiF5ryr5ZCb4oCi6KeG55WM6IGa5pCcXCIsXG4gICAgdXJsOiBcImhpa2VyOi8vc2VhcmNoP3M9XCIgKyBnZXRQYXJhbShcImtleXdvcmRcIiksXG4gICAgZXh0cmE6IHtcbiAgICAgICAgcnVsZXM6ICQudG9TdHJpbmcoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgUUlOR19USVRMRSA9IGdldE15VmFyKCdteUNvbGxlY3Rpb24nKSxcbiAgICAgICAgICAgICAgICB0eXBlU2hvdyA9IGdldE15VmFyKCd0eXBlU2hvdycsICdAJylcbiAgICAgICAgICAgIGxldCBydWxlcyA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL2RhdGFMb2FkP3J1bGU9JyArIFFJTkdfVElUTEUpXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVTaG93WzBdID09ICdAJykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZmlsdGVyS2V5ID0gdHlwZVNob3cuc2xpY2UoMSlcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlcktleSkgcnVsZXMgPSBydWxlcy5maWx0ZXIoKHYpID0+IHYudGl0bGUuaW5jbHVkZXMoZmlsdGVyS2V5KSlcbiAgICAgICAgICAgICAgICB9IGVsc2UgcnVsZXMgPSBydWxlcy5maWx0ZXIoKHYpID0+IHYudHlwZSA9PSB0eXBlU2hvdyk7XG4gICAgICAgICAgICAgICAgbGV0IHl1eD1cInl1eFwiK0RhdGUubm93KCk7XG4gICAgICAgICAgICAgICAgbGV0IGVsID0gJC50b1N0cmluZygoUUlOR19USVRMRSwgeXV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoaWphY2tFbFxuICAgICAgICAgICAgICAgICAgICB9ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvZnVuY1Rvb2xzP3J1bGU9JyArIFFJTkdfVElUTEUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFFJTkdfVElUTEU6UUlOR19USVRMRSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzSW5kZXg6ICQuaGlrZXJbeXV4XSxcbiAgICAgICAgICAgICAgICAgICAgICAgIE1ZX1JVTEU6TVlfUlVMRVxuICAgICAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgICAgICQuaGlrZXIuc2V0UmVzdWx0ID0gZnVuY3Rpb24ocGFyYW0wLCBwYXJhbTEsIHBhcmFtMiwgcGFyYW0zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbTEgPSBDQUxMQkFDS19LRVlcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtMiA9IE1ZX1JVTEVcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtMyA9IE1ZX1RZUEVcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBhcmFtMC5kYXRhKSkgcGFyYW0wID0gcGFyYW0wLmRhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtMCA9IHBhcmFtMC5tYXAoaGlqYWNrRWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kX3NldFJlc3VsdC5pbnZva2UoamF2YUNvbnRleHQsIHBhcmFtMCwgcGFyYW0xLCBwYXJhbTIsIHBhcmFtMylcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAkLmhpa2VyLnNldEhvbWVSZXN1bHQgPSBzZXRSZXN1bHRcbiAgICAgICAgICAgICAgICAgICAgJC5oaWtlci5zZXRTZWFyY2hSZXN1bHQgPSBzZXRSZXN1bHRcbiAgICAgICAgICAgICAgICB9LCBRSU5HX1RJVExFLCB5dXgpO1xuICAgICAgICAgICAgICAgIHJ1bGVzID0gcnVsZXMubWFwKCh2LGkpPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodi5zZWFyY2hGaW5kLnN0YXJ0c1dpdGgoJ2pzOicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2LnNlYXJjaEZpbmQgPSBcImpzOiQuaGlrZXIuXCIreXV4K1wiPVwiK2krXCI7XCIgKyBlbCArIFwiO1wiICsgdi5zZWFyY2hGaW5kLnNsaWNlKDMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShydWxlcylcbiAgICAgICAgfSlcbiAgICB9XG59XSlcbiIsImRldGFpbF9jb2xfdHlwZSI6Im1vdmllXzEiLCJkZXRhaWxfZmluZF9ydWxlIjoiIiwic2RldGFpbF9jb2xfdHlwZSI6Im1vdmllXzEiLCJzZGV0YWlsX2ZpbmRfcnVsZSI6IiIsInVhIjoibW9iaWxlIiwicHJlUnVsZSI6InB1dE15VmFyKCdteUNvbGxlY3Rpb24nLCBNWV9SVUxFLnRpdGxlKVxucHV0TXlWYXIoJ3JlbW90ZVVybCcsICdodHRwczovL2doLmNvbi5zaC9odHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vUVExOTkzSFVBTkcvQS9tYWluL+mYhea8q+WQmy5qc29uJylcbi8vIFxuLypcbiovIiwicGFnZXMiOiJbe1wiY29sX3R5cGVcIjpcInRleHRfMVwiLFwibmFtZVwiOlwiQ2xhc3NUYWJcIixcInBhdGhcIjpcIkNsYXNzVGFiXCIsXCJydWxlXCI6XCJ2YXIge1xcbiAgICBRSU5HX1RJVExFLCB0aXRsZSwgdXJsLFxcbiAgICBjbGFzc19uYW1lLCBjbGFzc191cmwsXFxuICAgIGFyZWFfbmFtZSwgYXJlYV91cmwsXFxuICAgIHllYXJfbmFtZSwgeWVhcl91cmwsXFxuICAgIHNvcnRfbmFtZSwgc29ydF91cmxcXG59ID0gJC5pbXBvcnRQYXJhbVxcbmNvbnN0IENsYXNzVGFiID0gZnVuY3Rpb24oY2xhc3NBcnJheSwgcGFyYW1zKSB7XFxuICAgIE9iamVjdC5hc3NpZ24odGhpcywgcGFyYW1zKVxcbiAgICB0aGlzLmFyciA9IGNsYXNzQXJyYXkubWFwKHYgPT4gdGhpcy5pbml0KHYpKVxcbiAgICB0aGlzLnNpZ24gPSAnJCcgKyBRSU5HX1RJVExFICsgJ18nICsgKHRoaXMubmFtZSB8fCAnJykgKyAnXydcXG4gICAgdGhpcy5jb2xvciA9IHRoaXMuY29sb3IgfHwgJyMxMmI2NjgnXFxuICAgIHRoaXMuYm91bmRhcnkgPSB0aGlzLmJvdW5kYXJ5IHx8ICdibGFua19ibG9jaydcXG59XFxuQ2xhc3NUYWIucHJvdG90eXBlID0ge1xcbiAgICBjb25zdHJ1Y3RvcjogQ2xhc3NUYWIsXFxuICAgIGxvYWQoZWwpIHtcXG4gICAgICAgIGxldCBmb2xkZWQgPSB0aGlzLmZvbGQgJiYgZ2V0VmFyKCckZm9sZF8nICsgdGhpcy5zaWduLCAnJylcXG4gICAgICAgIGlmICh0aGlzLmFyci5sZW5ndGggPiAxICYmIHRoaXMuZm9sZCkgZWwucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ0nICsgKGZvbGRlZCA/ICfilrYnIDogJ+KWvCcpLmZvbnRjb2xvcignIzA0OWVmZicpLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoc2lnbiwgZm9sZGVkKSA9PiB7XFxuICAgICAgICAgICAgICAgIHB1dFZhcignJGZvbGRfJyArIHNpZ24sIGZvbGRlZCA/ICcnIDogJ1QnKVxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgIH0sIHRoaXMuc2lnbiwgZm9sZGVkKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxuICAgICAgICB9KVxcbiAgICAgICAgbGV0IGFyciA9IGZvbGRlZCA/IFt0aGlzLmFyclswXV0gOiB0aGlzLmFyclxcbiAgICAgICAgYXJyLmZvckVhY2goKHYpID0+IHtcXG4gICAgICAgICAgICBsZXQgeyBpZCwgY2xhc3NfbmFtZSwgY2xhc3NfdXJsIH0gPSB2LFxcbiAgICAgICAgICAgIHNlbGVjdGVkID0gSlNPTi5zdHJpbmdpZnkodGhpcy5nZXRDbGFzcyhpZCkpXFxuICAgICAgICAgICAgY2xhc3NfbmFtZS5mb3JFYWNoKChuYW1lLCBpKSA9PiB7XFxuICAgICAgICAgICAgICAgIGxldCB1cmwgPSBjbGFzc191cmxbaV0sXFxuICAgICAgICAgICAgICAgICAgICBub3cgPSBKU09OLnN0cmluZ2lmeSh7IG5hbWU6IG5hbWUsIHVybDogdXJsIH0pXFxuICAgICAgICAgICAgICAgIGVsLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHNlbGVjdGVkID09IG5vdyA/ICfigJzigJzigJ3igJ0nICsgbmFtZS5mb250Y29sb3IodGhpcy5jb2xvcikuYm9sZCgpIDogbmFtZSxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogc2VsZWN0ZWQgPT0gbm93ID8gJ2hpa2VyOi8vZW1wdHknIDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoc2lnbiwgaWQsIG5vdykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dFZhcihzaWduICsgaWQsIG5vdylcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgICAgICAgICB9LCB0aGlzLnNpZ24sIGlkLCBub3cpLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgZWwucHVzaCh7IGNvbF90eXBlOiB0aGlzLmJvdW5kYXJ5IH0pXFxuICAgICAgICB9KVxcbiAgICB9LFxcbiAgICBpbml0KGNsYXNzT2JqZWN0KSB7XFxuICAgICAgICBpZiAodHlwZW9mIGNsYXNzT2JqZWN0LmNsYXNzX25hbWUgPT0gJ3N0cmluZycpXFxuICAgICAgICAgICAgY2xhc3NPYmplY3QuY2xhc3NfbmFtZSA9IGNsYXNzT2JqZWN0LmNsYXNzX25hbWUuc3BsaXQoJyYnKVxcbiAgICAgICAgaWYgKHR5cGVvZiBjbGFzc09iamVjdC5jbGFzc191cmwgPT0gJ3N0cmluZycpXFxuICAgICAgICAgICAgY2xhc3NPYmplY3QuY2xhc3NfdXJsID0gY2xhc3NPYmplY3QuY2xhc3NfdXJsLnNwbGl0KCcmJykubWFwKCh2KSA9PiB2LnRyaW0oKSlcXG4gICAgICAgIHJldHVybiBjbGFzc09iamVjdFxcbiAgICB9LFxcbiAgICBwdXNoKGNsYXNzT2JqZWN0KSB7XFxuICAgICAgICB0aGlzLmFyci5wdXNoKHRoaXMuaW5pdChjbGFzc09iamVjdCkpXFxuICAgIH0sXFxuICAgIGdldENsYXNzKGlkKSB7XFxuICAgICAgICBsZXQgZGVmYXVsdENsYXNzID0gdGhpcy5hcnIuZmluZChpdGVtID0+IGl0ZW0uaWQgPT0gaWQpXFxuICAgICAgICBkZWZhdWx0Q2xhc3MgPSBKU09OLnN0cmluZ2lmeShkZWZhdWx0Q2xhc3MgPyB7XFxuICAgICAgICAgICAgbmFtZTogZGVmYXVsdENsYXNzLmNsYXNzX25hbWVbMF0sXFxuICAgICAgICAgICAgdXJsOiBkZWZhdWx0Q2xhc3MuY2xhc3NfdXJsWzBdXFxuICAgICAgICB9IDogeyBuYW1lOiAgJ2Nhbm5vdCBmaW5kIGlkOiAnICsgaWQgKyAnIGluIGNsYXNzVGFiOiAnICsgdGhpcy5zaWduLCB1cmw6ICcnfSlcXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGdldFZhcih0aGlzLnNpZ24gKyBpZCwgZGVmYXVsdENsYXNzKSlcXG4gICAgfSxcXG4gICAgc2V0VXJsKHVybCkge1xcbiAgICAgICAgcmV0dXJuIHVybC5yZXBsYWNlKC9cXFxcJFxcXFx7KFtefV0qKVxcXFx9L2csIChfLCBpZCkgPT4gdGhpcy5nZXRDbGFzcyhpZCkudXJsKVxcbiAgICB9XFxufVxcbi8vIOeUn+aIkOWktOmDqOWIhuexu1xcbmxldCBmeUFsbCA9IHVybC5pbmNsdWRlcygnZnlBbGwnKSxcXG4gICAgdGFiSGVhZGVyID0gW11cXG5pZiAoY2xhc3NfbmFtZSkgdGFiSGVhZGVyLnB1c2goe1xcbiAgICBpZDogZnlBbGwgPyAnZnlBbGwnIDogJ2Z5Y2xhc3MnLFxcbiAgICBjbGFzc19uYW1lOiBjbGFzc19uYW1lLFxcbiAgICBjbGFzc191cmw6IGNsYXNzX3VybFxcbn0pXFxuaWYgKGFyZWFfbmFtZSkgdGFiSGVhZGVyLnB1c2goe1xcbiAgICBpZDogZnlBbGwgPyAnZnlBbGwnIDogJ2Z5YXJlYScsXFxuICAgIGNsYXNzX25hbWU6IGFyZWFfbmFtZSxcXG4gICAgY2xhc3NfdXJsOiBhcmVhX3VybFxcbn0pXFxuaWYgKHllYXJfbmFtZSkgdGFiSGVhZGVyLnB1c2goe1xcbiAgICBpZDogZnlBbGwgPyAnZnlBbGwnIDogJ2Z5eWVhcicsXFxuICAgIGNsYXNzX25hbWU6IHllYXJfbmFtZSxcXG4gICAgY2xhc3NfdXJsOiB5ZWFyX3VybFxcbn0pXFxuaWYgKHNvcnRfbmFtZSkgdGFiSGVhZGVyLnB1c2goe1xcbiAgICBpZDogZnlBbGwgPyAnZnlBbGwnIDogJ2Z5c29ydCcsXFxuICAgIGNsYXNzX25hbWU6IHNvcnRfbmFtZSxcXG4gICAgY2xhc3NfdXJsOiBzb3J0X3VybFxcbn0pXFxuJC5leHBvcnRzID0ge1xcbiAgICBmeUFsbDogZnlBbGwsXFxuICAgIHRhYkhlYWRlcjogbmV3IENsYXNzVGFiKHRhYkhlYWRlciwgeyBuYW1lOiB0aXRsZSwgZm9sZDogcmVhZEZpbGUoJ3RhYkZvbGQnKSwgfSlcXG59XFxuXCJ9LHtcImNvbF90eXBlXCI6XCJpY29uXzJfcm91bmRcIixcIm5hbWVcIjpcIuiuvue9rlwiLFwicGF0aFwiOlwiQ29uZmlnXCIsXCJydWxlXCI6XCJqczpcXG5hZGRMaXN0ZW5lcignb25DbG9zZScsICdjbGVhck15VmFyKFxcXCJzb3J0RmxhZ1xcXCIpO3JlZnJlc2hQYWdlKCknKVxcbnNldFBhZ2VUaXRsZSgn4pqZIOmYhea8q+WQm+iuvue9riDimpknKVxcbmNvbnN0IFFJTkdfVElUTEUgPSBnZXRNeVZhcignbXlDb2xsZWN0aW9uJyksXFxuICAgIHVybCA9IGdldE15VmFyKCdyZW1vdGVVcmwnKVxcbmxldCBkYXRhID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvZGF0YUxvYWQ/cnVsZT0nICsgUUlOR19USVRMRSwgdHJ1ZSksXFxuICAgIGVsID0gW3tcXG4gICAgICAgIHRpdGxlOiAnPGI+IOa4hemZpOe8k+WtmO+8jOeri+WNs+abtOaWsCA8c21hbGw+IO+8iOWfuuS6jui/nOeoi+S7k+W6k++8jOayoeS6i+WIq+eCue+8jOWPr+avj+aciOeCueS4gOasoeabtOaWsO+8iScsXFxuICAgICAgICB1cmw6ICQoXFxcIua4hemZpOe8k+WtmO+8jOeri+WNs+abtOaWsFxcXCIpLmNvbmZpcm0oKHVybCkgPT4ge1xcbiAgICAgICAgICAgIC8v6L+c56iL5L6d6LWW57Si5byV5paH5Lu25Luj55CG5Zyw5Z2A5YiX6KGoXFxuICAgICAgICAgICAgbGV0IHJlcXVpcmVsaXN0ID0gWydodHRwczovL2docHJveHkubmV0L2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9RUTE5OTNIVUFORy9BL21haW4vJ11cXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVpcmVsaXN0Lmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgICAgIHRyeSB7IC8v6L+c56iL5L6d6LWW57Si5byVXFxuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzID0gcmVxdWVzdChyZXF1aXJlbGlzdFtpXSArICdRUTE5OTNIVUFORy9BL21haW4nLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgd2l0aFN0YXR1c0NvZGU6IHRydWVcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICBpZiAoSlNPTi5wYXJzZShyZXMpLnN0YXR1c0NvZGUgPT0gMjAwKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbGVFeGlzdCh1cmwpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZUZpbGUodXJsKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlRG93bmxvYWQocmVxdWlyZWxpc3RbaV0gKyAnUVExOTkzSFVBTkcvQS9tYWluJyx1cmwpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZURvd25sb2FkKHJlcXVpcmVsaXN0W2ldICsgJ1FRMTk5M0hVQU5HL0EvbWFpbicsdXJsKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSlcXG4gICAgICAgICAgICBiYWNrKGZhbHNlKVxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lmm7TmlrAnXFxuICAgICAgICB9LCB1cmwpLFxcbiAgICAgICAgaW1nOiAnaGlrZXI6Ly9pbWFnZXMvaWNvbjQnLFxcbiAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInXFxuICAgIH1dLFxcbiAgICB1cGRhdGVJbnRlcnZhbCA9IHJlYWRGaWxlKCd1cGRhdGVJbnRlcnZhbCcpIHx8ICcxJyxcXG4gICAgbmV3V2luZG93ID0gcmVhZEZpbGUoJ25ld1dpbmRvdycpLFxcbiAgICB0YWJGb2xkID0gcmVhZEZpbGUoJ3RhYkZvbGQnKSxcXG4gICAgZGlzYWJsZUN1c3RvbSA9IHJlYWRGaWxlKCdkaXNhYmxlQ3VzdG9tJyksXFxuICAgIGVkaXRNb2RlID0gZGlzYWJsZUN1c3RvbSA/ICflr7zlhaXmtbfpmJQnIDogZ2V0TXlWYXIoJ2VkaXRNb2RlJywgJ+WQr+eUqC/npoHnlKgnKVxcblxcbmVsLnB1c2goe1xcbiAgICB0aXRsZTogJyAg8J+SoSDmm7TmlrDpopHnjoc6ICcgKyAodXBkYXRlSW50ZXJ2YWwgPT0gMCA/ICfmiYvliqgnIDogdXBkYXRlSW50ZXJ2YWwgKyAn5aSpJykgKyAnICAnLFxcbiAgICB1cmw6ICQodXBkYXRlSW50ZXJ2YWwsICfovpPlhaXmm7TmlrDpl7TpmpTvvIjlpKnvvInvvIzkuLow5YiZ5omL5Yqo5pu05pawXFxcXG7mnKzlnLDmlofku7bpk77mjqXml6DmlYgnKS5pbnB1dCgoKSA9PiB7XFxuICAgICAgICBpbnB1dCA9IHBhcnNlSW50KGlucHV0KVxcbiAgICAgICAgaWYgKE51bWJlci5pc05hTihpbnB1dCkpIGlucHV0ID0gMVxcbiAgICAgICAgZWxzZSBpZiAoaW5wdXQgPCAxKSBpbnB1dCA9IDBcXG4gICAgICAgIHNhdmVGaWxlKCd1cGRhdGVJbnRlcnZhbCcsIGlucHV0LnRvU3RyaW5nKCkpXFxuICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgIH0pLFxcbiAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxufSwge1xcbiAgICB0aXRsZTogJyAg8J+WpSDni6znq4vpppbpobU6ICcgKyAobmV3V2luZG93ID8gJ+aYrycgOiAn5ZCmJykgKyAnICAnLFxcbiAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKG5ld1dpbmRvdykgPT4ge1xcbiAgICAgICAgc2F2ZUZpbGUoJ25ld1dpbmRvdycsIG5ld1dpbmRvdyA/ICcnIDogJ1QnKVxcbiAgICAgICAgcmVmcmVzaFBhZ2UoKVxcbiAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICB9LCBuZXdXaW5kb3cpLFxcbiAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxufSwge1xcbiAgICB0aXRsZTogJyAg8J+SoCDliIbnsbvmipjlj6A6ICcgKyAodGFiRm9sZCA/ICfmmK8nIDogJ+WQpicpICsgJyAgJyxcXG4gICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCh0YWJGb2xkKSA9PiB7XFxuICAgICAgICBzYXZlRmlsZSgndGFiRm9sZCcsIHRhYkZvbGQgPyAnJyA6ICdUJylcXG4gICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgfSwgdGFiRm9sZCksXFxuICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG59LCB7XFxuICAgIHRpdGxlOiAnICDwn5K8IOWkh+S7veaBouWkjSAgJyxcXG4gICAgdXJsOiAkKFsn5aSH5Lu9JywgJ+aBouWkjSddLCAxKS5zZWxlY3QoKFFJTkdfVElUTEUsIHVwZGF0ZUludGVydmFsLCBuZXdXaW5kb3csIHRhYkZvbGQsIGRpc2FibGVDdXN0b20pID0+IHtcXG4gICAgICAgIGxldCB1cmwgPSBnZXRNeVZhcigncmVtb3RlVXJsJylcXG4gICAgICAgIGlmICghdXJsLnN0YXJ0c1dpdGgoJ2hpa2VyOi8vJykgJiYgIXVybC5zdGFydHNXaXRoKCdmaWxlOi8vJykpXFxuICAgICAgICAgICAgdXJsID0gJ2hpa2VyOi8vZmlsZXMvbGlicy8nICsgbWQ1KHVybCkgKyAnLmpzJ1xcbiAgICAgICAgZWxzZSBpZiAodXJsLnN0YXJ0c1dpdGgoJ2hpa2VyOi8vcGFnZS8nKSkgdXJsID0gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICBpZiAoaW5wdXQgPT0gJ+Wkh+S7vScpIHJldHVybiAkKCdoaWtlcjovL2ZpbGVzL3RtcC8nICsgUUlOR19USVRMRSArICdfYmFja3VwLmpzb24nLCAn6L6T5YWl5aSH5Lu96Lev5b6EJylcXG4gICAgICAgICAgICAuaW5wdXQoKHVybCwgdXBkYXRlSW50ZXJ2YWwsIG5ld1dpbmRvdywgdGFiRm9sZCwgZGlzYWJsZUN1c3RvbSkgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgcnVsZXMgPSByZXF1ZXN0KHVybCksXFxuICAgICAgICAgICAgICAgICAgICBjdXN0b21EYXRhID0gcmVhZEZpbGUoJ2N1c3RvbURhdGEnKVxcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUoaW5wdXQsIEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUludGVydmFsOiB1cGRhdGVJbnRlcnZhbCxcXG4gICAgICAgICAgICAgICAgICAgIG5ld1dpbmRvdzogbmV3V2luZG93LFxcbiAgICAgICAgICAgICAgICAgICAgdGFiRm9sZDogdGFiRm9sZCxcXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVDdXN0b206IGRpc2FibGVDdXN0b20sXFxuICAgICAgICAgICAgICAgICAgICBjdXN0b21EYXRhOiBjdXN0b21EYXRhLFxcbiAgICAgICAgICAgICAgICAgICAgcnVsZXM6IHJ1bGVzXFxuICAgICAgICAgICAgICAgIH0pKVxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5aSH5Lu977yM5rOo5oSP6Iul5LuT5bqT5Li65a2Q6aG16Z2i5YiZ5LiN5aSH5Lu9J1xcbiAgICAgICAgICAgIH0sIHVybCwgdXBkYXRlSW50ZXJ2YWwsIG5ld1dpbmRvdywgdGFiRm9sZCwgZGlzYWJsZUN1c3RvbSlcXG4gICAgICAgIGVsc2UgcmV0dXJuICQoJ2hpa2VyOi8vZmlsZXMvdG1wLycgKyBRSU5HX1RJVExFICsgJ19iYWNrdXAuanNvbicsICfovpPlhaXlpIfku73ot6/lvoQnKS5pbnB1dCgodXJsKSA9PiB7XFxuICAgICAgICAgICAgbGV0IHsgdXBkYXRlSW50ZXJ2YWwsIG5ld1dpbmRvdywgdGFiRm9sZCwgZGlzYWJsZUN1c3RvbSwgY3VzdG9tRGF0YSwgcnVsZXMgfSA9IEpTT04ucGFyc2UocmVxdWVzdChpbnB1dCkpXFxuICAgICAgICAgICAgc2F2ZUZpbGUoJ3VwZGF0ZUludGVydmFsJywgdXBkYXRlSW50ZXJ2YWwpXFxuICAgICAgICAgICAgc2F2ZUZpbGUoJ25ld1dpbmRvdycsIG5ld1dpbmRvdylcXG4gICAgICAgICAgICBzYXZlRmlsZSgndGFiRm9sZCcsIHRhYkZvbGQpXFxuICAgICAgICAgICAgc2F2ZUZpbGUoJ2Rpc2FibGVDdXN0b20nLCBkaXNhYmxlQ3VzdG9tKVxcbiAgICAgICAgICAgIHNhdmVGaWxlKCdjdXN0b21EYXRhJywgY3VzdG9tRGF0YSlcXG4gICAgICAgICAgICBpZiAocnVsZXMpIHdyaXRlRmlsZSh1cmwsIHJ1bGVzKVxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5oGi5aSN77yM5aaC5p6c5LiN5oOz5ZCM5q2l6L+c56iL5LuT5bqT77yM5Y+v5Lul6K6+572u5pu05paw6aKR546H5Li65omL5YqoJ1xcbiAgICAgICAgfSwgdXJsKVxcbiAgICB9LCBRSU5HX1RJVExFLCB1cGRhdGVJbnRlcnZhbCwgbmV3V2luZG93LCB0YWJGb2xkLCBkaXNhYmxlQ3VzdG9tKSxcXG4gICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbn0sIHtcXG4gICAgdGl0bGU6ICfigJzigJzigJ3igJ08Zm9udCBjb2xvcj1cXFwiIzY2NjY2NlxcXCI+PHNtYWxsPueJueWIq+m4o+iwou+8jOWwj+eoi+W6j+aPkOS+m+iAhe+8muWbouWtkC/lopnkvawv6YGT6ZW/LyAgICDlsI/nqIvluo/nu7TmiqTvvJrlsI/nsbPnsqVcXFxcbidcXG4gICAgICAgIC8qZGF0YS5yZWR1Y2UoKHNlbGYsIHYpID0+IHYuYXV0aG9yID8gc2VsZi5jb25jYXQodi5hdXRob3Iuc3BsaXQoJyYnKSkgOiBzZWxmLCBbXSlcXG4gICAgICAgIC5maWx0ZXIoKHYsIGksIGFycikgPT4gdiAmJiBhcnIuaW5kZXhPZih2KSA9PSBpKS5qb2luKCfjgIEnKSovLFxcbiAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcbn0pXFxuZWwucHVzaCh7XFxuICAgIHRpdGxlOiBcXFwi5pu05pawJuWPjemmiFxcXCIsXFxuICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9VcCNub1JlZnJlc2gjI25vUmVjb3JkSGlzdG9yeSMjbm9IaXN0b3J5I1xcXCIsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICB2ZXJzaW9uOiBNWV9QQVJBTVMudmVyc2lvbiB8fCBcXFwi6I635Y+W54mI5pys5aSx6LSl77yM6Ieq6KGM5p+l55yLXFxcIlxcbiAgICB9LFxcbiAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiXFxufSk7XFxuZWwucHVzaCh7IGNvbF90eXBlOiAnbGluZScgfSwge1xcbiAgICB0aXRsZTogJ+KAnOKAnOKAneKAnScgKyAn8J+TnScuc21hbGwoKSArICcmbmJzcCDpmIXmvKvlkJvoh6rlrprkuYkgJm5ic3AnLmJvbGQoKS5mb250Y29sb3IoJyM3NTc1NzUnKSArIChkaXNhYmxlQ3VzdG9tID8gJ+KdjCcgOiAn4q2VJykuc21hbGwoKSxcXG4gICAgdXJsOiAkKFsoZGlzYWJsZUN1c3RvbSA/ICflkK/nlKgnIDogJ+emgeeUqCcpICsgJ+WQiOmbhuiHquWumuS5iScsICfmuIXpmaToh6rlrprkuYnmlbDmja4nLCAn57yW6L6RSlNPTiddLCAxKS5zZWxlY3QoKCkgPT4ge1xcbiAgICAgICAgc3dpdGNoIChpbnB1dC5zbGljZSgwLCAyKSkge1xcbiAgICAgICAgICAgIGNhc2UgJ+a4hemZpCc6XFxuICAgICAgICAgICAgICAgIGRlbGV0ZUZpbGUoJ2N1c3RvbURhdGEnKVxcbiAgICAgICAgICAgICAgICBicmVha1xcbiAgICAgICAgICAgIGNhc2UgJ+WQr+eUqCc6XFxuICAgICAgICAgICAgICAgIHNhdmVGaWxlKCdkaXNhYmxlQ3VzdG9tJywgJycpXFxuICAgICAgICAgICAgICAgIGJyZWFrXFxuICAgICAgICAgICAgY2FzZSAn56aB55SoJzpcXG4gICAgICAgICAgICAgICAgc2F2ZUZpbGUoJ2Rpc2FibGVDdXN0b20nLCAnVCcpXFxuICAgICAgICAgICAgICAgIGlucHV0ICs9ICdcXFxcbuWwj+eoi+W6j+WQr+eUqC/npoHnlKjjgIHph43mlrDmjpLluo/nrYnmk43kvZzlnYfkuI3kvJrkvZPnjrDlnKjpppbpobXlsI/nqIvluo/liJfooajkuK0nXFxuICAgICAgICAgICAgICAgIGJyZWFrXFxuICAgICAgICAgICAgY2FzZSAn57yW6L6RJzpcXG4gICAgICAgICAgICAgICAgbGV0IHVybCA9IGdldE15VmFyKCdyZW1vdGVVcmwnKVxcbiAgICAgICAgICAgICAgICBpZiAoIXVybC5zdGFydHNXaXRoKCdoaWtlcjovL2ZpbGVzLycpICYmICF1cmwuc3RhcnRzV2l0aCgnZmlsZTovLycpKVxcbiAgICAgICAgICAgICAgICAgICAgdXJsID0gJ2hpa2VyOi8vZmlsZXMvbGlicy8nICsgbWQ1KHVybCkgKyAnLmpzJ1xcbiAgICAgICAgICAgICAgICByZXR1cm4gICdoaWtlcjovL3BhZ2UvaW50ZXJmYWNlI25vUmVmcmVzaCMjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjP3J1bGU9SlNPTue8lui+keWZqCZKc29uPScrYmFzZTY0RW5jb2RlKHVybClcXG4gICAgICAgIH1cXG4gICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcbiAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3sicgKyBpbnB1dFxcbiAgICB9KSxcXG4gICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJyxcXG4gICAgZXh0cmE6IHsgbGluZVZpc2libGU6IGZhbHNlIH1cXG59KTsvKlxcbihkaXNhYmxlQ3VzdG9tID8gWyflr7zlhaXmtbfpmJQnXSA6IFsn5ZCv55SoL+emgeeUqCcsICfph43mlrDmjpLluo8nLCAn5pu05pS55Zu+5qCHJywgJ+WvvOWFpea1t+mYlCddKS5mb3JFYWNoKCh2KSA9PiB7XFxuICAgIGVsLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IHYgPT0gZWRpdE1vZGUgPyAn4oCc4oCc4oCd4oCdJyArIHYuYm9sZCgpLmZvbnRjb2xvcignIzEyYjY2OCcpIDogdixcXG4gICAgICAgIHVybDogdiA9PSBlZGl0TW9kZSA/ICdoaWtlcjovL2VtcHR5JyA6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHYpID0+IHtcXG4gICAgICAgICAgICBwdXRNeVZhcignZWRpdE1vZGUnLCB2KVxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgIH0sIHYpLFxcbiAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbiAgICB9KVxcbn0pO1xcbmlmIChlZGl0TW9kZSA9PSAn5a+85YWl5rW36ZiUJykgZWwucHVzaCh7XFxuICAgIHRpdGxlOiAn5YWo6YOo5a+85YWlJyxcXG4gICAgdXJsOiAn5rW36ZiU6KeG55WM77+laG9tZV9ydWxlX3VybO+/pScgKyAodXJsLnN0YXJ0c1dpdGgoJ2hpa2VyOi8vJykgfHwgdXJsLnN0YXJ0c1dpdGgoJ2ZpbGU6Ly8nKSA/IHVybCA6ICdoaWtlcjovL2ZpbGVzL2xpYnMvJyArIG1kNSh1cmwpICsgJy5qcycpLFxcbiAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnLFxcbiAgICBleHRyYTogeyBsaW5lVmlzaWJsZTogZmFsc2UgfVxcbn0pO1xcbihkaXNhYmxlQ3VzdG9tID8gZGF0YSA6IEpTT04ucGFyc2UocmVhZEZpbGUoJ2N1c3RvbURhdGEnKSB8fCAnW10nKSkuZm9yRWFjaCgodiwgaSkgPT4ge1xcbiAgICBsZXQgZCA9IHsgdGl0bGU6IHYudGl0bGUsIGltZzogZGF0YVtpXS5pY29uIH1cXG4gICAgc3dpdGNoIChlZGl0TW9kZSkge1xcbiAgICAgICAgY2FzZSAn5ZCv55SoL+emgeeUqCc6XFxuICAgICAgICAgICAgZC50aXRsZSA9ICh2LnZpc2libGUgPyAn8J+foiAgJyA6ICfwn5S0ICAnKSArIGQudGl0bGVcXG4gICAgICAgICAgICBkLnVybCA9ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGkpID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IHJ1bGVzID0gSlNPTi5wYXJzZShyZWFkRmlsZSgnY3VzdG9tRGF0YScpIHx8ICdbXScpXFxuICAgICAgICAgICAgICAgIHJ1bGVzW2ldLnZpc2libGUgPSAhcnVsZXNbaV0udmlzaWJsZVxcbiAgICAgICAgICAgICAgICBzYXZlRmlsZSgnY3VzdG9tRGF0YScsIEpTT04uc3RyaW5naWZ5KHJ1bGVzKSlcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICB9LCBpKVxcbiAgICAgICAgICAgIGJyZWFrXFxuICAgICAgICBjYXNlICfph43mlrDmjpLluo8nOlxcbiAgICAgICAgICAgIGxldCBzb3J0RmxhZyA9IHBhcnNlSW50KGdldE15VmFyKCdzb3J0RmxhZycsICctMScpKVxcbiAgICAgICAgICAgIGQudGl0bGUgPSAoc29ydEZsYWcgPT0gaSA/ICfwn5SDICAnIDogJycpICsgZC50aXRsZVxcbiAgICAgICAgICAgIGlmIChzb3J0RmxhZyA9PSAtMSlcXG4gICAgICAgICAgICAgICAgZC51cmwgPSAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChpKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignc29ydEZsYWcnLCBpLnRvU3RyaW5nKCkpXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/pgInmi6nopoHnp7vliqjliLDnmoTkvY3nva4nXFxuICAgICAgICAgICAgICAgIH0sIGkpXFxuICAgICAgICAgICAgZWxzZVxcbiAgICAgICAgICAgICAgICBkLnVybCA9ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKG9sZEluZGV4LCBuZXdJbmRleCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJ1bGVzID0gSlNPTi5wYXJzZShyZWFkRmlsZSgnY3VzdG9tRGF0YScpIHx8ICdbXScpXFxuICAgICAgICAgICAgICAgICAgICBydWxlcy5zcGxpY2UobmV3SW5kZXgsIDAsIHJ1bGVzLnNwbGljZShvbGRJbmRleCwgMSlbMF0pXFxuICAgICAgICAgICAgICAgICAgICBzYXZlRmlsZSgnY3VzdG9tRGF0YScsIEpTT04uc3RyaW5naWZ5KHJ1bGVzKSlcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdzb3J0RmxhZycsICctMScpXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICAgICAgfSwgc29ydEZsYWcsIGkpXFxuICAgICAgICAgICAgYnJlYWtcXG4gICAgICAgIGNhc2UgJ+abtOaUueWbvuaghyc6XFxuICAgICAgICAgICAgZC51cmwgPSAkKHYuaWNvbiB8fCAnJywgJ+i+k+WFpeaWsOWbvuagh+WcsOWdgOaIluminOiJsuS7o+egge+8micpLmlucHV0KChpKSA9PiB7XFxuICAgICAgICAgICAgICAgIGxldCBydWxlcyA9IEpTT04ucGFyc2UocmVhZEZpbGUoJ2N1c3RvbURhdGEnKSB8fCAnW10nKVxcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQpXFxuICAgICAgICAgICAgICAgICAgICBydWxlc1tpXS5pY29uID0gaW5wdXRcXG4gICAgICAgICAgICAgICAgZWxzZVxcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJ1bGVzW2ldLmljb25cXG4gICAgICAgICAgICAgICAgc2F2ZUZpbGUoJ2N1c3RvbURhdGEnLCBKU09OLnN0cmluZ2lmeShydWxlcykpXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgfSwgaSlcXG4gICAgICAgICAgICBicmVha1xcbiAgICAgICAgY2FzZSAn5a+85YWl5rW36ZiUJzpcXG4gICAgICAgICAgICBkLnVybCA9ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGkpID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IGRhdGEgPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9kYXRhTG9hZD9ydWxlPScgKyBnZXRNeVZhcignbXlDb2xsZWN0aW9uJyksIHRydWUpXFxuICAgICAgICAgICAgICAgIHJldHVybiAncnVsZTovLycgKyBiYXNlNjRFbmNvZGUoSlNPTi5zdHJpbmdpZnkoZGF0YVtpXSkpXFxuICAgICAgICAgICAgfSwgaSlcXG4gICAgICAgICAgICBicmVha1xcbiAgICB9XFxuICAgIGVsLnB1c2goZClcXG59KSovXFxuKGRpc2FibGVDdXN0b20gPyBbJ+WvvOWFpea1t+mYlCddIDogWyflkK/nlKgv56aB55SoJywgJ+mHjeaWsOaOkuW6jycsICfmm7TmlLnlm77moIcnLCAn5a+85YWl5rW36ZiUJ10pLmZvckVhY2goKHYpID0+IHtcXG4gICAgZWwucHVzaCh7XFxuICAgICAgICB0aXRsZTogdiA9PSBlZGl0TW9kZSA/ICfigJzigJzigJ3igJ0nICsgdi5ib2xkKCkuZm9udGNvbG9yKCcjMTJiNjY4JykgOiB2LFxcbiAgICAgICAgdXJsOiB2ID09IGVkaXRNb2RlID8gJ2hpa2VyOi8vZW1wdHknIDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgodikgPT4ge1xcbiAgICAgICAgICAgIHB1dE15VmFyKCdlZGl0TW9kZScsIHYpXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgfSwgdiksXFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxuICAgIH0pXFxufSk7XFxuaWYoZWRpdE1vZGUgPT09ICflr7zlhaXmtbfpmJQnKSB7XFxuICAgIGVsLnB1c2goe1xcbiAgICAgICAgdGl0bGU6J+aQnOe0oicsXFxuICAgICAgICBkZXNjOifovpPlhaXlsI/nqIvluo/moIfpoph85Zyw5Z2A6L+b6KGM5pCc57SiLi4uJyxcXG4gICAgICAgIHVybDokLnRvU3RyaW5nKCgpPT57XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgfSksXFxuICAgICAgICBjb2xfdHlwZTonaW5wdXQnLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBvbkNoYW5nZTogXFxcInB1dE15VmFyKCdpbXBvcnRTZWFyY2hLZXknLGlucHV0KVxcXCIsXFxuICAgICAgICAgICAgdGl0bGVWaXNpYmxlOiB0cnVlLFxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTpnZXRNeVZhcignaW1wb3J0U2VhcmNoS2V5JywnJylcXG4gICAgICAgIH0sXFxuICAgIH0pO1xcbiAgICBlbC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn5YWo6YOo5a+85YWlKOmdnuaQnOe0oui/h+a7pOWQjue7k+aenCknLFxcbiAgICAgICAgdXJsOiAn5rW36ZiU6KeG55WM77+laG9tZV9ydWxlX3VybO+/pScgKyAodXJsLnN0YXJ0c1dpdGgoJ2hpa2VyOi8vJykgfHwgdXJsLnN0YXJ0c1dpdGgoJ2ZpbGU6Ly8nKSA/IHVybCA6ICdoaWtlcjovL2ZpbGVzL2xpYnMvJyArIG1kNSh1cmwpICsgJy5qcycpLFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJyxcXG4gICAgICAgIGV4dHJhOiB7bGluZVZpc2libGU6IGZhbHNlfVxcbiAgICB9KTtcXG59XFxudmFyIGRhdGFzID0gKGRpc2FibGVDdXN0b20gPyBkYXRhIDogSlNPTi5wYXJzZShyZWFkRmlsZSgnY3VzdG9tRGF0YScpIHx8ICdbXScpKTtcXG5sZXQgc2sgPSBnZXRNeVZhcignaW1wb3J0U2VhcmNoS2V5JywnJyk7XFxuaWYoZWRpdE1vZGUgPT09ICflr7zlhaXmtbfpmJQnJiZzaykge1xcbiAgICBkYXRhcyA9IGRhdGFzLmZpbHRlcihpdD0+aXQudGl0bGUuaW5jbHVkZXMoc2spfHwoaXQudXJsJiZpdC51cmwuaW5jbHVkZXMoc2spKSk7XFxuICAgIGRhdGEgPSBkYXRhLmZpbHRlcihpdD0+aXQudGl0bGUuaW5jbHVkZXMoc2spfHwoaXQudXJsJiZpdC51cmwuaW5jbHVkZXMoc2spKSk7XFxufVxcbmRhdGFzLmZvckVhY2goKHYsIGkpID0+IHtcXG4gICAgbGV0IGQgPSB7IHRpdGxlOiB2LnRpdGxlLCBpbWc6IGRhdGFbaV0uaWNvbiB9XFxuICAgIHN3aXRjaCAoZWRpdE1vZGUpIHtcXG4gICAgICAgIGNhc2UgJ+WQr+eUqC/npoHnlKgnOlxcbiAgICAgICAgICAgIGQudGl0bGUgPSAodi52aXNpYmxlID8gJ/Cfn6IgICcgOiAn8J+UtCAgJykgKyBkLnRpdGxlXFxuICAgICAgICAgICAgZC51cmwgPSAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChpKSA9PiB7XFxuICAgICAgICAgICAgICAgIGxldCBydWxlcyA9IEpTT04ucGFyc2UocmVhZEZpbGUoJ2N1c3RvbURhdGEnKSB8fCAnW10nKVxcbiAgICAgICAgICAgICAgICBydWxlc1tpXS52aXNpYmxlID0gIXJ1bGVzW2ldLnZpc2libGVcXG4gICAgICAgICAgICAgICAgc2F2ZUZpbGUoJ2N1c3RvbURhdGEnLCBKU09OLnN0cmluZ2lmeShydWxlcykpXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgfSwgaSlcXG4gICAgICAgICAgICBicmVha1xcbiAgICAgICAgY2FzZSAn6YeN5paw5o6S5bqPJzpcXG4gICAgICAgICAgICBsZXQgc29ydEZsYWcgPSBwYXJzZUludChnZXRNeVZhcignc29ydEZsYWcnLCAnLTEnKSlcXG4gICAgICAgICAgICBkLnRpdGxlID0gKHNvcnRGbGFnID09IGkgPyAn8J+UgyAgJyA6ICcnKSArIGQudGl0bGVcXG4gICAgICAgICAgICBpZiAoc29ydEZsYWcgPT0gLTEpXFxuICAgICAgICAgICAgICAgIGQudXJsID0gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3NvcnRGbGFnJywgaS50b1N0cmluZygpKVxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6YCJ5oup6KaB56e75Yqo5Yiw55qE5L2N572uJ1xcbiAgICAgICAgICAgICAgICB9LCBpKVxcbiAgICAgICAgICAgIGVsc2VcXG4gICAgICAgICAgICAgICAgZC51cmwgPSAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChvbGRJbmRleCwgbmV3SW5kZXgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBydWxlcyA9IEpTT04ucGFyc2UocmVhZEZpbGUoJ2N1c3RvbURhdGEnKSB8fCAnW10nKVxcbiAgICAgICAgICAgICAgICAgICAgcnVsZXMuc3BsaWNlKG5ld0luZGV4LCAwLCBydWxlcy5zcGxpY2Uob2xkSW5kZXgsIDEpWzBdKVxcbiAgICAgICAgICAgICAgICAgICAgc2F2ZUZpbGUoJ2N1c3RvbURhdGEnLCBKU09OLnN0cmluZ2lmeShydWxlcykpXFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignc29ydEZsYWcnLCAnLTEnKVxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgICAgIH0sIHNvcnRGbGFnLCBpKVxcbiAgICAgICAgICAgIGJyZWFrXFxuICAgICAgICBjYXNlICfmm7TmlLnlm77moIcnOlxcbiAgICAgICAgICAgIGQudXJsID0gJCh2Lmljb24gfHwgJycsICfovpPlhaXmlrDlm77moIflnLDlnYDmiJbpopzoibLku6PnoIHvvJonKS5pbnB1dCgoaSkgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgcnVsZXMgPSBKU09OLnBhcnNlKHJlYWRGaWxlKCdjdXN0b21EYXRhJykgfHwgJ1tdJylcXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0KVxcbiAgICAgICAgICAgICAgICAgICAgcnVsZXNbaV0uaWNvbiA9IGlucHV0XFxuICAgICAgICAgICAgICAgIGVsc2VcXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBydWxlc1tpXS5pY29uXFxuICAgICAgICAgICAgICAgIHNhdmVGaWxlKCdjdXN0b21EYXRhJywgSlNPTi5zdHJpbmdpZnkocnVsZXMpKVxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgIH0sIGkpXFxuICAgICAgICAgICAgYnJlYWtcXG4gICAgICAgIGNhc2UgJ+WvvOWFpea1t+mYlCc6XFxuICAgICAgICAgICAgZC51cmwgPSAncnVsZTovLycgKyBiYXNlNjRFbmNvZGUoSlNPTi5zdHJpbmdpZnkoZGF0YVtpXSkpO1xcbiAgICAgICAgICAgIGJyZWFrXFxuICAgIH1cXG4gICAgZWwucHVzaChkKVxcbn0pXFxuc2V0UmVzdWx0KGVsKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6aG16Z2i6L295YWlXCIsXCJwYXRoXCI6XCJmcmFtZUxvYWRcIixcInJ1bGVcIjpcImpzOlxcbmNvbnN0IFFJTkdfVElUTEUgPSBnZXRNeVZhcignbXlDb2xsZWN0aW9uJylcXG52YXIgbXlDb2xsX2VsID0gW11cXG5ldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9oaWphY2tFbnY/cnVsZT0nICsgUUlOR19USVRMRSkpLnJ1bGUpXFxuXFxuaWYgKCFpc0luZGV4KSB7XFxuICAgIGlmIChwYWdlVGl0bGUpIHNldFBhZ2VUaXRsZShwYWdlVGl0bGUpXFxuICAgIHNldExhc3RDaGFwdGVyUnVsZShvcmlSVUxFLmxhc3RfY2hhcHRlcl9ydWxlKVxcbiAgICBNWV9QQVJBTVMgPSBNWV9SVUxFLnBhcmFtc1xcbn0gZWxzZSBpZiAoTVlfUEFHRSA9PSAxKSB7XFxuICAgIHRhYkhlYWRlci5sb2FkKG15Q29sbF9lbClcXG4gICAgaWYgKFJVTEUuc2VhcmNoX3VybCkgbXlDb2xsX2VsLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCLmkJzntKJcXFwiLFxcbiAgICAgICAgZGVzYzogXFxcIui/meaYr+mYhea8q+WQm+eahOaQnOe0ouWTpn5+XFxcIixcXG4gICAgICAgIHVybDogJ1xcXCJoaWtlcjovL3NlYXJjaD9zPVxcXCIraW5wdXQnLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBydWxlczogJC50b1N0cmluZygoUUlOR19USVRMRSwgdGl0bGUpID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IHJ1bGVzID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvZGF0YUxvYWQ/cnVsZT0nICsgUUlOR19USVRMRSlcXG4gICAgICAgICAgICAgICAgcnVsZXMgPSBbcnVsZXMuZmluZCgodikgPT4gdi50aXRsZSA9PSB0aXRsZSldXFxuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShydWxlcylcXG4gICAgICAgICAgICB9LCBRSU5HX1RJVExFLCBSVUxFLnRpdGxlKSxcXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldE15VmFyKCdzZWFyY2hLZXknLCAnJyksXFxuICAgICAgICAgICAgb25DaGFuZ2U6IFxcXCJwdXRNeVZhcignc2VhcmNoS2V5JyxpbnB1dClcXFwiXFxuICAgICAgICB9LFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJpbnB1dFxcXCIsXFxuICAgIH0pXFxufVxcbi8vIOato+aWh+ino+aekFxcbnZhciB7XFxuICAgIHBhcmFtSGFuZGxlLFxcbiAgICBydW5QcmVSdWxlLFxcbiAgICBnZW5FeFVybCxcXG4gICAgaGlqYWNrTGF6eVJ1bGVcXG59ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvZnVuY1Rvb2xzP3J1bGU9JyArIFFJTkdfVElUTEUpXFxucnVuUHJlUnVsZShvcmlSVUxFLnByZVJ1bGUpXFxuaWYgKE1ZX1JVTEUuZmluZF9ydWxlLnN0YXJ0c1dpdGgoJ2pzOicpKSB7XFxuICAgIGxldCB7IGhpamFja0VsIH0gPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9mdW5jVG9vbHM/cnVsZT0nICsgUUlOR19USVRMRSlcXG4gICAgc2V0UmVzdWx0ID0gZnVuY3Rpb24ocGFyYW0wLCBwYXJhbTEsIHBhcmFtMiwgcGFyYW0zKSB7XFxuICAgICAgICBwYXJhbTEgPSBDQUxMQkFDS19LRVlcXG4gICAgICAgIHBhcmFtMiA9IE1ZX1JVTEVcXG4gICAgICAgIHBhcmFtMyA9IE1ZX1RZUEVcXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBhcmFtMC5kYXRhKSkgcGFyYW0wID0gcGFyYW0wLmRhdGFcXG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KG15Q29sbF9lbCwgcGFyYW0wLm1hcChoaWphY2tFbCkpXFxuICAgICAgICBtZXRob2Rfc2V0UmVzdWx0Lmludm9rZShqYXZhQ29udGV4dCwgbXlDb2xsX2VsLCBwYXJhbTEsIHBhcmFtMiwgcGFyYW0zKVxcbiAgICB9XFxuICAgIHNldEhvbWVSZXN1bHQgPSBzZXRSZXN1bHRcXG4gICAgc2V0U2VhcmNoUmVzdWx0ID0gc2V0UmVzdWx0XFxuXFxuICAgIGV2YWwoTVlfUlVMRS5maW5kX3J1bGUuc2xpY2UoMykpXFxufSBlbHNlIHtcXG4gICAgbGV0IHsgcnVuQ29kZSB9ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvZnVuY1Rvb2xzP3J1bGU9JyArIFFJTkdfVElUTEUpLFxcbiAgICAgICAgW18sIGZpbmRSdWxlLCBkZXRhaWxGaW5kUnVsZV0gPSBNWV9SVUxFLmZpbmRfcnVsZS5tYXRjaCgvXihbXFxcXHNcXFxcU10qPykoPzo9PT4oW1xcXFxzXFxcXFNdKikpPyQvKVxcbiAgICBmaW5kUnVsZSA9IGZpbmRSdWxlLnNwbGl0KCc7JylcXG4gICAgcGFyc2VEb21Gb3JBcnJheShnZXRSZXNDb2RlKCksIGZpbmRSdWxlLnNoaWZ0KCkpLmZvckVhY2goKGRhdGEpID0+IHtcXG4gICAgICAgIGxldCBbdGl0bGUsIGltZywgZGVzYywgdXJsXSA9IGZpbmRSdWxlLm1hcCgodiwgaSkgPT4ge1xcbiAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKHYgPT0gJyonKSByZXR1cm4gJydcXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgdiA9IChpID09IDEgfHwgaSA9PSAzKSA/XFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VEb20oZGF0YSwgdikgOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRG9tRm9ySHRtbChkYXRhLCB2KVxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT0gMykgdiA9IHJ1bkNvZGUodilcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2XFxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsgcmV0dXJuICcnIH1cXG4gICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICByZXMgPSB7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSwgdXJsOiB1cmwsXFxuICAgICAgICAgICAgICAgIGRlc2M6IGRlc2MsIGltZzogaW1nLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogTVlfUlVMRS5jb2xfdHlwZVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIGlmIChyZXMudXJsKSB7XFxuICAgICAgICAgICAgaWYgKHJlcy51cmwuaW5jbHVkZXMoJ0BsYXp5UnVsZT0nKSkge1xcbiAgICAgICAgICAgICAgICBsZXQgcmVJbmRleCA9IHJlcy51cmwuaW5kZXhPZignLmpzOicpXFxuICAgICAgICAgICAgICAgIGlmIChyZUluZGV4ID49IDApIHJlcy51cmwgPSByZXMudXJsLnNsaWNlKDAsIHJlSW5kZXgpICsgJy5qczonICsgaGlqYWNrTGF6eVJ1bGUgKyAnOycgKyByZXMudXJsLnNsaWNlKHJlSW5kZXggKyA0KVxcbiAgICAgICAgICAgIH0gZWxzZSAgaWYgKGRldGFpbEZpbmRSdWxlKSB7XFxuICAgICAgICAgICAgICAgIHJlcy5leHRyYSA9IHtcXG4gICAgICAgICAgICAgICAgICAgIHVybDogZ2VuRXhVcmwodXJsKSxcXG4gICAgICAgICAgICAgICAgICAgIFJVTEU6IGJhc2U2NEVuY29kZShKU09OLnN0cmluZ2lmeShPYmplY3QuYXNzaWduKGdlbk15UnVsZSgpLCB7IGRldGFpbF9maW5kX3J1bGU6IGRldGFpbEZpbmRSdWxlIH0pKSksXFxuICAgICAgICAgICAgICAgICAgICBwYWdlVGl0bGU6IGlzSW5kZXggJiYgdGl0bGVcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXMudXJsID0gJ2hpa2VyOi8vcGFnZS9mcmFtZUxvYWQ/cnVsZT0nICsgUUlOR19USVRMRVxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoTVlfUlVMRS5kZXRhaWxfZmluZF9ydWxlKSB7XFxuICAgICAgICAgICAgICAgIHJlcy5leHRyYSA9IHtcXG4gICAgICAgICAgICAgICAgICAgIHVybDogZ2VuRXhVcmwodXJsKSxcXG4gICAgICAgICAgICAgICAgICAgIFJVTEU6IGJhc2U2NEVuY29kZShKU09OLnN0cmluZ2lmeShnZW5NeVJ1bGUoKSkpLFxcbiAgICAgICAgICAgICAgICAgICAgcGFnZVRpdGxlOiBpc0luZGV4ICYmIHRpdGxlXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmVzLnVybCA9ICdoaWtlcjovL3BhZ2UvZnJhbWVMb2FkP3J1bGU9JyArIFFJTkdfVElUTEVcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICBteUNvbGxfZWwucHVzaChyZXMpXFxuICAgIH0pXFxuICAgIHNldFJlc3VsdChteUNvbGxfZWwpXFxufVxcblwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5pWw5o2u6L295YWlXCIsXCJwYXRoXCI6XCJkYXRhTG9hZFwiLFwicnVsZVwiOlwibGV0IHNob3dBbGwgPSAkLmltcG9ydFBhcmFtLFxcbiAgICB1cmwgPSBnZXRNeVZhcigncmVtb3RlVXJsJyksXFxuICAgIGRhdGEgPSBbXVxcbmlmICh1cmwuc3RhcnRzV2l0aCgnaGlrZXI6Ly8nKSB8fCB1cmwuc3RhcnRzV2l0aCgnZmlsZTovLycpKSB7XFxuICAgIC8vIOWmguaenOS4uuacrOWcsOaWh+S7tuWImeS4jei/m+ihjOe8k+WtmFxcbiAgICB0cnkge1xcbiAgICAgICAgbGV0IG9yaURhdGEgPSBmZXRjaCh1cmwpXFxuICAgICAgICBpZiAodXJsLnN0YXJ0c1dpdGgoJ2hpa2VyOi8vcGFnZS8nKSlcXG4gICAgICAgICAgICBvcmlEYXRhID0gSlNPTi5wYXJzZShvcmlEYXRhKS5ydWxlXFxuICAgICAgICBkYXRhID0gSlNPTi5wYXJzZShvcmlEYXRhKVxcbiAgICB9IGNhdGNoIChlKSB7fVxcbn0gZWxzZSB7XFxuICAgIC8vIOiOt+WPlui/nOeoi+aVsOaNru+8jOajgOafpemXtOmalOm7mOiupOS4gOWkqVxcbiAgICBsZXQgaW50ZXJ2YWwgPSBwYXJzZUludChyZWFkRmlsZSgndXBkYXRlSW50ZXJ2YWwnKSB8fCAnMScpLFxcbiAgICAgICAgb2xkRGF0YSA9IGZldGNoKCdoaWtlcjovL2ZpbGVzL2xpYnMvJyArIG1kNSh1cmwpICsgJy5qcycpLFxcbiAgICAgICAgcmVtb3RlRGF0YSA9IFtdXFxuICAgIGlmIChpbnRlcnZhbCA9PSAwKSBpbnRlcnZhbCA9IC0xXFxuICAgIHRyeSB7IHJlbW90ZURhdGEgPSBKU09OLnBhcnNlKGZldGNoQ2FjaGUodXJsLCAyNCAqIGludGVydmFsLCB7IHRpbWVvdXQ6IDUwMDAwIH0pKSB9IGNhdGNoIChlKSB7fVxcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocmVtb3RlRGF0YSkpIHJlbW90ZURhdGEgPSBbXVxcbiAgICBpZiAocmVtb3RlRGF0YS5sZW5ndGggPCAzKSB7XFxuICAgICAgICBsb2coJ+acquiOt+WPluWIsOaVsOaNricpXFxuICAgICAgICBpZiAob2xkRGF0YSkgd3JpdGVGaWxlKCdoaWtlcjovL2ZpbGVzL2xpYnMvJyArIG1kNSh1cmwpICsgJy5qcycsIG9sZERhdGEpXFxuICAgICAgICBkYXRhID0gSlNPTi5wYXJzZShvbGREYXRhIHx8ICdbXScpXFxuICAgIH0gZWxzZSB7XFxuICAgICAgICBsb2coJ+W3suiOt+WPluWIsOaVsOaNricpXFxuICAgICAgICBkYXRhID0gcmVtb3RlRGF0YVxcbiAgICB9XFxufVxcbmRhdGEgPSBkYXRhLmZpbHRlcigodikgPT4gdi50aXRsZSAhPSBnZXRNeVZhcignbXlDb2xsZWN0aW9uJykgJiYgISh2LmF1dGhvciB8fCAnJykuaW5jbHVkZXMoJ+mYhea8q+WQm+eUn+aIkOWZqCcpKVxcbmlmIChyZWFkRmlsZSgnZGlzYWJsZUN1c3RvbScpKSAkLmV4cG9ydHMgPSBkYXRhXFxuZWxzZSB7IC8vIOWGmeWFpeiHquWumuS5ieaVsOaNrlxcbiAgICBsZXQgY3VzdG9tRGF0YSA9IEpTT04ucGFyc2UocmVhZEZpbGUoJ2N1c3RvbURhdGEnKSB8fCAnW10nKSxcXG4gICAgICAgIHJld3JpdGVEYXRhID0gW11cXG4gICAgY3VzdG9tRGF0YSA9IGN1c3RvbURhdGEucmVkdWNlKChzZWxmLCB2KSA9PiB7XFxuICAgICAgICBsZXQgaW5kZXggPSBkYXRhLmZpbmRJbmRleCgodnYpID0+IHYudGl0bGUgPT0gdnYudGl0bGUpXFxuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xcbiAgICAgICAgICAgIHNlbGYucHVzaCh2KVxcbiAgICAgICAgICAgIGxldCBydWxlID0gZGF0YS5zcGxpY2UoaW5kZXgsIDEpWzBdXFxuICAgICAgICAgICAgaWYgKHNob3dBbGwgfHwgdi52aXNpYmxlKVxcbiAgICAgICAgICAgICAgICByZXdyaXRlRGF0YS5wdXNoKE9iamVjdC5hc3NpZ24ocnVsZSwgdikpXFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gc2VsZlxcbiAgICB9LCBbXSlcXG4gICAgZGF0YS5mb3JFYWNoKCh2KSA9PiBjdXN0b21EYXRhLnB1c2goeyB0aXRsZTogdi50aXRsZSwgdmlzaWJsZTogdHJ1ZSB9KSlcXG4gICAgc2F2ZUZpbGUoJ2N1c3RvbURhdGEnLCBKU09OLnN0cmluZ2lmeShjdXN0b21EYXRhKSlcXG4gICAgJC5leHBvcnRzID0gcmV3cml0ZURhdGEuY29uY2F0KGRhdGEpXFxufVxcblwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6ZO+5o6l5aSE55CGKlwiLFwicGF0aFwiOlwidXJsUGFyc2VcIixcInJ1bGVcIjpcIi8vIOmmlumhtemTvuaOpeabv+aNouWIhuexu1xcbmZ1bmN0aW9uIGluZGV4VXJsKHBhcmFtKSB7XFxuICAgIGZ1bmN0aW9uIHJ1bkNvZGUocnVsZSkge1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICBsZXQgW2lucHV0LCBjb2RlXSA9IHJ1bGUuc3BsaXQoJy5qczonKVxcbiAgICAgICAgICAgIHJldHVybiBjb2RlID8gZXZhbChjb2RlKSA6IHJ1bGVcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgcmV0dXJuIHJ1bGUgfVxcbiAgICB9XFxuICAgIGxldCB7IFJVTEUsIHBhZ2VOdW0sIFFJTkdfVElUTEUgfSA9IEpTT04ucGFyc2UocGFyYW0uc3BsaXQoJyMjIycpWzFdKVxcbiAgICBSVUxFID0gSlNPTi5wYXJzZShiYXNlNjREZWNvZGUoUlVMRSkpXFxuICAgIHBhZ2VOdW0gPSBwYXJzZUludChwYWdlTnVtKVxcbiAgICBsZXQgdXJsID0gUlVMRS51cmxcXG5cXG4gICAgZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvQ2xhc3NUYWI/cnVsZT0nICsgUUlOR19USVRMRSkpLnJ1bGUpXFxuICAgIHVybCA9IHRhYkhlYWRlci5zZXRVcmwoZnlBbGwgPyB1cmwucmVwbGFjZSgvZnlBbGwvZywgJyQke2Z5QWxsfScpIDogdXJsLnJlcGxhY2UoL2Z5KGNsYXNzfGFyZWF8eWVhcnxzb3J0KS9nLCAnJCR7ZnkkMX0nKSlcXG4gICAgdXJsID0gdXJsLnJlcGxhY2UoL2Z5cGFnZSg/OkAoLT9cXFxcZCspQCk/KD86XFxcXCooXFxcXGQrKUApPy9nLCAoXywgc3RhcnQsIHNwYWNlKSA9PiBwYXJzZUludChzdGFydCB8fCAwKSArIDEgKyAocGFnZU51bSAtIDEpICogcGFyc2VJbnQoc3BhY2UgfHwgMSkpXFxuICAgIHVybCA9IC9eKFtcXFxcc1xcXFxTXSo/KSg/OlxcXFxbZmlyc3RQYWdlPShbXFxcXHNcXFxcU10qPylcXFxcXSk/KD86KFxcXFwuanM6W1xcXFxzXFxcXFNdKj8pKT8kLy5leGVjKHVybClcXG4gICAgaWYgKHBhZ2VOdW0gPT0gMSAmJiB1cmxbMl0pIHVybFsxXSA9IHVybFsyXVxcbiAgICBpZiAodXJsWzNdICYmICF1cmxbMV0uaW5jbHVkZXMoJy5qczonKSkgdXJsWzFdICs9IHVybFszXVxcbiAgICByZXR1cm4gcnVuQ29kZSh1cmxbMV0pXFxufVxcbmZ1bmN0aW9uIHBhcmFtSGFuZGxlKHVybFBhcmFtLCB1YSwgdXJsVG1wKSB7XFxuICAgIGxldCBjaGFyc2V0LCBwYXJhbVRtcFxcbiAgICB0cnkgeyAvLyDpk77mjqXnmoTnvJbnoIHjgIFVQeWSjFJlZmVyZXLlupTor6XmmK/pppblhYjnu6fmib/pppbpobXpk77mjqVcXG4gICAgICAgIFssICwgY2hhcnNldCwgcGFyYW1UbXBdID0gdXJsVG1wLnNwbGl0KCc7JylcXG4gICAgICAgIHBhcmFtVG1wID0gcGFyYW1UbXAubWF0Y2goL157KC4qKX0kLylbMV0uc3BsaXQoJyYmJylcXG4gICAgfSBjYXRjaCAoZSkgeyBwYXJhbVRtcCA9IFtdIH1cXG4gICAgbGV0IFVzZXJBZ2VudCA9IHBhcmFtVG1wLmZpbmQoKHYpID0+IHYuc3RhcnRzV2l0aCgnVXNlci1BZ2VudEAnKSksXFxuICAgICAgICBSZWZlcmVyID0gcGFyYW1UbXAuZmluZCgodikgPT4gdi5zdGFydHNXaXRoKCdSZWZlcmVyQCcpKVxcbiAgICB1cmxQYXJhbVswXSA9IHVybFBhcmFtWzBdIHx8ICdHRVQnXFxuICAgIHVybFBhcmFtWzFdID0gdXJsUGFyYW1bMV0gfHwgY2hhcnNldCB8fCAnVVRGLTgnXFxuICAgIHRyeSB7XFxuICAgICAgICB1cmxQYXJhbVsyXSA9IHVybFBhcmFtWzJdLm1hdGNoKC9eeyguKil9JC8pWzFdLnNwbGl0KCcmJicpXFxuICAgIH0gY2F0Y2ggKGUpIHsgdXJsUGFyYW1bMl0gPSBbXSB9XFxuICAgIC8vIOa3u+WKoOWFqOWxgFVB5ZKM5LiK57qnUmVmZXJlclxcbiAgICBpZiAoIXVybFBhcmFtWzJdLnNvbWUoKHYpID0+IHYuc3RhcnRzV2l0aCgnVXNlci1BZ2VudEAnKSkpIHtcXG4gICAgICAgIGlmIChVc2VyQWdlbnQpIHVybFBhcmFtWzJdLnB1c2goVXNlckFnZW50KVxcbiAgICAgICAgZWxzZSBpZiAodWEgPT0gJ3BjJylcXG4gICAgICAgICAgICB1cmxQYXJhbVsyXS5wdXNoKCdVc2VyLUFnZW50QCcgKyBQQ19VQS5yZXBsYWNlKC87L2csICfvvJvvvJsnKS5yZXBsYWNlKC9cXFxcPy8sICfvvJ/vvJ8nKSlcXG4gICAgICAgIGVsc2UgaWYgKHVhID09ICdtb2JpbGUnKVxcbiAgICAgICAgICAgIHVybFBhcmFtWzJdLnB1c2goJ1VzZXItQWdlbnRAJyArIE1PQklMRV9VQS5yZXBsYWNlKC87L2csICfvvJvvvJsnKS5yZXBsYWNlKC9cXFxcPy8sICfvvJ/vvJ8nKSlcXG4gICAgfVxcbiAgICBpZiAoUmVmZXJlciAmJiAhdXJsUGFyYW1bMl0uc29tZSgodikgPT4gdi5zdGFydHNXaXRoKCdSZWZlcmVyQCcpKSlcXG4gICAgICAgIHVybFBhcmFtWzJdLnB1c2goUmVmZXJlcilcXG4gICAgdXJsUGFyYW1bMl0gPSAneycgKyB1cmxQYXJhbVsyXS5qb2luKCcmJicpICsgJ30nXFxuICAgIHJldHVybiB1cmxQYXJhbS5qb2luKCc7JylcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLkuoznuqdb5LiAXSpcIixcInBhdGhcIjpcImVqdG9vbFwiLFwicnVsZVwiOlwiZnVuY3Rpb24gY292ZXIo5qCH6aKYLCDkvZzogIUsIOWIhuexuywg54q25oCBLCDnq6DoioIsIOabtOaWsCwg566A5LuLLOWwgemdouWbvueJhyx0cnVlX3VybCwgaGFzTGluZSkge1xcclxcbnZhciDmoIfpopgsIOS9nOiAhSwg5YiG57G7LCDnirbmgIEsIOeroOiKgiwg5pu05pawLCDnroDku4ss5bCB6Z2i5Zu+54mHLHRydWVfdXJsLCBoYXNMaW5lO1xcclxcblxcdHRyeSB7XFxyXFxuXFx0XFx0ZC5wdXNoKHtcXHJcXG5cXHRcXHRcXHR0aXRsZTogJ+KAmOKAmOKAmeKAmTxzbWFsbD48Zm9udCBjb2xvcj1cXFwiI0ZBNzI5OFxcXCI+JyvkvZzogIUuc2xpY2UoMCwxNSkrXFxcIiZuYnNwO1xcXCIr54q25oCBKyc8L2ZvbnQ+PC9zbWFsbD4nKyfigJjigJjigJnigJk8c21hbGw+PGZvbnQgY29sb3I9XFxcIiNCMTVCRkZcXFwiPicrXFxcIlxcXFxuXFxcIivliIbnsbsrJzwvZm9udD48L3NtYWxsPicrJ+KAmOKAmOKAmeKAmTxzbWFsbD48Zm9udCBjb2xvcj1cXFwiI0ZGMzU5QVxcXCI+JytcXFwiXFxcXG5cXFwiK+eroOiKgitcXFwiJm5ic3A7XFxcIivmm7TmlrArJzwvZm9udD48L3NtYWxsPicsXFxyXFxuXFx0XFx0XFx0ZGVzYzon4oCY4oCY4oCZ4oCZPHNtYWxsPicgK+eugOS7iysgJzwvc21hbGw+JyxcXHJcXG5cXHRcXHRcXHRwaWNfdXJsOiAg5bCB6Z2i5Zu+54mHLFxcclxcblxcdFxcdFxcdHVybDogdHJ1ZV91cmwsXFxyXFxuXFx0XFx0XFx0Y29sX3R5cGU6ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpY19ibHVyJ1xcclxcblxcdFxcdH0pO1xcblxcdFxcdGQucHVzaCh7XFxyXFxuXFx0XFx0XFx0Y29sX3R5cGU6ICdsaW5lX2JsYW5rJyxcXHJcXG5cXHRcXHR9KTtcXG5cXHRcXHRkLnB1c2goe1xcclxcblxcdFxcdFxcdGNvbF90eXBlOiAnbGluZScsXFxyXFxuXFx0XFx0fSk7XFxyXFxuXFx0XFx0aWYgKGhhc0xpbmUpIHtcXHJcXG5cXHRcXHRcXHRpdGVtLmV4dHJhID0ge1xcclxcblxcdFxcdFxcdFxcdGxpbmVWaXNpYmxlOiBmYWxzZVxcclxcblxcdFxcdFxcdH1cXHJcXG5cXHRcXHR9XFxyXFxuXFx0XFx0ZC5wdXNoKGl0ZW0pO1xcclxcblxcdH0gY2F0Y2ggKGUpIHt9XFxyXFxufVxcclxcbmZ1bmN0aW9uIGNoYXB0ZXIodGl0bGUscGljX3VybCxjaGFwdGVyTGlzdCwgY2hhcHRlclRpdGxlLCBjaGFwdGVyVXJsLCBkZWZhdWx0T3JkZXIsIGhhc0xpbmUsZG93bmxvYWRsYXp5KSB7XFxyXFxuXFx0dmFyIGxpc3QgPSBjaGFwdGVyTGlzdDtcXHJcXG5cXHR2YXIgb3JpZ2luYWwgPSBbe1xcclxcblxcdFxcdHVybDogTVlfVVJMLFxcclxcblxcdFxcdG9yZGVyOiBkZWZhdWx0T3JkZXJcXHJcXG5cXHR9XTtcXHJcXG5cXHQhZmlsZUV4aXN0KCdoaWtlcjovL2ZpbGVzL3J1bGVzL2NvbWljL2NvbWljTG9nRmlsZS5qcycpID8gKHdyaXRlRmlsZSgnaGlrZXI6Ly9maWxlcy9ydWxlcy9jb21pYy9jb21pY0xvZ0ZpbGUuanMnLCBKU09OLnN0cmluZ2lmeShvcmlnaW5hbCkpKSA6IDA7XFxyXFxuXFx0dmFyIGxvZyA9IEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vZmlsZXMvcnVsZXMvY29taWMvY29taWNMb2dGaWxlLmpzJykpO1xcclxcblxcdGZvciAodmFyIGkgaW4gbG9nKSB7XFxyXFxuXFx0XFx0aWYgKGxvZ1tpXS51cmwgPT0gTVlfVVJMKSB7XFxyXFxuXFx0XFx0XFx0dmFyIG5vdyA9IGk7XFxyXFxuXFx0XFx0XFx0dmFyIG9yZGVyID0gbG9nW2ldLm9yZGVyO1xcclxcblxcdFxcdFxcdGJyZWFrO1xcclxcblxcdFxcdH0gZWxzZSB7XFxyXFxuXFx0XFx0XFx0dmFyIG5vdyA9ICcnO1xcclxcblxcdFxcdFxcdHZhciBvcmRlciA9IGRlZmF1bHRPcmRlcjtcXHJcXG5cXHRcXHR9XFxyXFxuXFx0fVxcclxcblxcdGxldCBvcmRlckl0ZW0gPSB7XFxyXFxuXFx0XFx0dGl0bGU6IFxcXCLigJzigJzigJ3igJ1cXFwiICsgJzxzdHJvbmc+PGZvbnQgY29sb3I9XFxcIiMwOThBQzFcXFwiPicgKyAn56ug6IqC5o6S5bqP4oeFJyArICc8L2ZvbnQ+PC9zdHJvbmc+JyxcXHJcXG5cXHRcXHR1cmw6IE1ZX1VSTCArIGBAbGF6eVJ1bGU9LmpzOnZhciBsb2cgPSBKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL2ZpbGVzL3J1bGVzL2NvbWljL2NvbWljTG9nRmlsZS5qcycpKTt2YXIgbm93PSdgICsgbm93ICsgYCc7aWYobm93IT0nJyl7dmFyIG5vdz1wYXJzZUludChub3cpO3ZhciBvcmRlcj1sb2dbbm93XS5vcmRlcn1lbHNle3ZhciBub3c9cGFyc2VJbnQobG9nLmxlbmd0aCk7dmFyIG9yZGVyPWAgKyBkZWZhdWx0T3JkZXIgKyBgO2xvZy5wdXNoKHt1cmw6aW5wdXQsb3JkZXI6b3JkZXJ9KTt9aWYobG9nW25vd10ub3JkZXIpe2xvZ1tub3ddLm9yZGVyPTA7fWVsc2V7bG9nW25vd10ub3JkZXI9MTt9O3dyaXRlRmlsZSgnaGlrZXI6Ly9maWxlcy9ydWxlcy9jb21pYy9jb21pY0xvZ0ZpbGUuanMnLCBKU09OLnN0cmluZ2lmeShsb2cpKTtyZWZyZXNoUGFnZSgpOydoaWtlcjovL2VtcHR5J2AsXFxyXFxuXFx0XFx0Y29sX3R5cGU6ICd0ZXh0XzInXFxyXFxuXFx0fVxcclxcblxcdGlmIChoYXNMaW5lKSB7XFxyXFxuXFx0XFx0b3JkZXJJdGVtLnRpdGxlID0gXFxcIuKAnOKAnOKAneKAnVxcXCIgKyAnPHN0cm9uZz48Zm9udCBjb2xvcj1cXFwiIzA5OEFDMVxcXCI+JyArICfpm4bmlbDmjpLluo/ih4UnICsgJzwvZm9udD48L3N0cm9uZz4nO1xcclxcblxcdFxcdG9yZGVySXRlbS5jb2xfdHlwZSA9IFxcXCJ0ZXh0XzJcXFwiXFxyXFxuXFx0fVxcclxcblxcdGxldCBjaGFwdGVyTGlzdHMgPSBsaXN0Lm1hcCgoaXRlbSk9Pih7XFxyXFxuXFx0XFx0dGl0bGU6IHBkZmgoaXRlbSxcXFwiYSYmVGV4dFxcXCIpLFxcclxcblxcdFxcdHVybDogcGQoaXRlbSxcXFwiYSYmaHJlZlxcXCIpLFxcclxcblxcdH0pKTtcXHJcXG5kLnB1c2goe1xcclxcblxcdHRpdGxlOiAn4oCY4oCY4oCZ4oCZPHN0cm9uZz48Zm9udCBjb2xvcj0gXFxcIiMwOThBQzFcXFwiPicgKyBcXFwi5LiL6L295ryr55S7XFxcIiArICc8L2Zyb250Pjwvc3Ryb25nPicsXFxyXFxuXFx0dXJsOiBcXFwiaGlrZXI6Ly9wYWdlL2Rvd25sb2FkLnZpZXcjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjI25vUmVmcmVzaCM/cnVsZT3mnKzlnLDotYTmupDnrqHnkIZcXFwiLFxcclxcblxcdGNvbF90eXBlOiBcXFwidGV4dF8yXFxcIixcXHJcXG5cXHRleHRyYToge1xcclxcblxcdFxcdGNoYXB0ZXJMaXN0OiBjaGFwdGVyTGlzdHMsXFxyXFxuXFx0XFx0aW5mbzp7XFxyXFxuXFx0XFx0XFx0Ym9va05hbWU6IHRpdGxlLFxcclxcblxcdFxcdFxcdHJ1bGVOYW1lOiBNWV9SVUxFLnRpdGxlLFxcclxcblxcdFxcdFxcdGJvb2tUb3BQaWM6IHBpY191cmwsXFxyXFxuXFx0XFx0XFx0cGFyc2VDb2RlOiBkb3dubG9hZGxhenlcXHJcXG5cXHRcXHR9LFxcclxcblxcdFxcdGRlZmF1bHRWaWV3OlxcXCIxXFxcIlxcclxcblxcdH1cXHJcXG59KTtcXHJcXG5cXHRkLnB1c2goe1xcclxcblxcdFxcdHRpdGxlOiAn4oCY4oCY4oCZ4oCZPHN0cm9uZz48Zm9udCBjb2xvcj0gXFxcIiMwOThBQzFcXFwiPicgKyBcXFwi5pys5Zyw5Lmm5p62XFxcIiArICc8L2Zyb250Pjwvc3Ryb25nPicsXFxyXFxuXFx0XFx0dXJsOiBcXFwiaGlrZXI6Ly9wYWdlL01haW4udmlldz9ydWxlPeacrOWcsOi1hOa6kOeuoeeQhlxcXCIsXFxyXFxuXFx0XFx0Y29sX3R5cGU6IFxcXCJ0ZXh0XzJcXFwiLFxcclxcblxcdH0pOyAgXFxyXFxuXFx0ZC5wdXNoKG9yZGVySXRlbSk7XFxyXFxuXFx0ZC5wdXNoKHtjb2xfdHlwZTogJ2xpbmUnfSk7XFx0XFxyXFxuXFx0dmFyIGxpc3QgPSBvcmRlciA/IGxpc3QgOiBsaXN0LnJldmVyc2UoKTtcXG5cXHRpZighbGlzdHx8bGlzdD09XFxcIlxcXCIpe1xcclxcblxcdFxcdGQucHVzaCh7XFxyXFxuXFx0XFx0XFx0dGl0bGU6ICfmraTmvKvnlLvlt7LkuIvmnrYhIScsXFxyXFxuXFx0XFx0XFx0Y29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJyxcXHJcXG5cXHRcXHR9KTtcXHJcXG5cXHR9XFxyXFxuXFx0Zm9yICh2YXIgaSBpbiBsaXN0KSB7XFxyXFxuXFx0XFx0dHJ5IHtcXHJcXG5cXHRcXHRcXHRkLnB1c2goe1xcclxcblxcdFxcdFxcdFxcdHRpdGxlOiBwZGZoKGxpc3RbaV0sIGNoYXB0ZXJUaXRsZSksXFxyXFxuXFx0XFx0XFx0XFx0dXJsOiBwZChsaXN0W2ldLCBjaGFwdGVyVXJsKSArIGxhenksXFxyXFxuXFx0XFx0XFx0XFx0Y29sX3R5cGU6ICd0ZXh0XzInLFxcclxcblxcdFxcdFxcdH0pO1xcclxcblxcdFxcdH1jYXRjaCAoZSkge31cXHJcXG5cXHR9XFxyXFxufVxcclxcblxcclxcbmZ1bmN0aW9uIGxpbmUobGluZUxpc3QsIGxpbmVUaXRsZVJ1bGUsIHZhcktleSkge1xcclxcblxcdGxldCBsaXN0ID0gbGluZUxpc3RcXHJcXG5cXHR2YXJLZXkgPSB2YXJLZXkgPT0gbnVsbCA/IChNWV9SVUxFLnVybCArICcjbGluZS1pbmRleCcpOiB2YXJLZXk7XFxyXFxuXFx0YWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAkLnRvU3RyaW5nKChrZXlMaXN0KSA9PiB7XFxyXFxuXFx0XFx0Zm9yIChsZXQgaSBpbiBrZXlMaXN0KSB7Y2xlYXJWYXIoa2V5TGlzdFtpXSl9XFxyXFxuXFx0fSwgW3ZhcktleSwgTVlfUlVMRS50aXRsZSArICcjbGluZS10aXRsZSddKSlcXHJcXG5cXHRsZXQgbGluZTBUaXRsZSA9ICcnO1xcclxcblxcdHRyeSB7XFxyXFxuXFx0XFx0bGluZTBUaXRsZSA9IHBkZmgobGlzdFswXSwgbGluZVRpdGxlUnVsZSkucmVwbGFjZShcXFwi56ug6IqC5YiX6KGo77yaXFxcIixcXFwiXFxcIik7XFxyXFxuXFx0fSBjYXRjaCAoZSkge31cXHJcXG5cXHRsb2coTVlfUlVMRS50aXRsZSArIGdldE15VmFyKChNWV9SVUxFLnRpdGxlICsgJyNsaW5lLXRpdGxlJykpKVxcclxcblxcdGZvciAobGV0IGkgaW4gbGlzdCkge1xcclxcblxcdFxcdHRyeSB7XFxyXFxuXFx0XFx0XFx0bGV0IGxpbmVUaXRsZSA9IHBkZmgobGlzdFtpXSwgbGluZVRpdGxlUnVsZSkucmVwbGFjZShcXFwi56ug6IqC5YiX6KGo77yaXFxcIixcXFwiXFxcIik7XFxyXFxuXFx0XFx0XFx0ZC5wdXNoKHtcXHJcXG5cXHRcXHRcXHRcXHR0aXRsZTogZ2V0TXlWYXIoKE1ZX1JVTEUudGl0bGUgKyAnI2xpbmUtdGl0bGUnKSwgbGluZTBUaXRsZSkgPT09IGxpbmVUaXRsZSA/IFxcXCLliIfmjaI64oCY4oCYXFxcIiArIGxpbmVUaXRsZStcXFwiXFxcIjpsaW5lVGl0bGUrXFxcIuKAmOKAmDrliIfmjaJcXFwiLFxcclxcblxcdFxcdFxcdFxcdHVybDogJCgpLmxhenlSdWxlKCh2YXJLZXksIGxpbmVJbmRleCwgbGluZVRpdGxlKSA9PiB7XFxyXFxuXFx0XFx0XFx0XFx0XFx0cHV0TXlWYXIodmFyS2V5LCBsaW5lSW5kZXgudG9TdHJpbmcoKSk7XFxyXFxuXFx0XFx0XFx0XFx0XFx0cHV0TXlWYXIoKE1ZX1JVTEUudGl0bGUgKyAnI2xpbmUtdGl0bGUnKSwgbGluZVRpdGxlKTtcXHJcXG5cXHRcXHRcXHRcXHRcXHRsb2coTVlfUlVMRS50aXRsZSArIGdldE15VmFyKChNWV9SVUxFLnRpdGxlICsgJyNsaW5lLXRpdGxlJykpKTtcXHJcXG5cXHRcXHRcXHRcXHRcXHRyZWZyZXNoUGFnZSgpO1xcclxcblxcdFxcdFxcdFxcdFxcdHJldHVybiBcXFwidG9hc3Q6Ly/lt7LliIfmjaLoh7NcXFwiICsgbGluZVRpdGxlO1xcclxcblxcdFxcdFxcdFxcdH0sIHZhcktleSwgaSwgbGluZVRpdGxlKSxcXHJcXG5cXHRcXHRcXHRcXHRjb2xfdHlwZTogJ3RleHRfMicsXFxyXFxuXFx0XFx0XFx0fSk7XFxyXFxuXFx0XFx0fSBjYXRjaCAoZSkge31cXHJcXG5cXHR9XFxyXFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5LqM57qnW+S6jF0qXCIsXCJwYXRoXCI6XCJjb21pY0Z1bmN0aW9uRmlsZS5qc1wiLFwicnVsZVwiOlwiZnVuY3Rpb24gY292ZXIoY292ZXJUaXRsZSwgY292ZXJUaXRsZTEsIGNvdmVyVGl0bGUyLCBjb3ZlclRpdGxlMywgY292ZXJEZXNjLCBjb3ZlclBpYywgY292ZXJVcmwsIGhhc0xpbmUpIHtcXG4gICAgdHJ5IHtcXG4gICAgICAgIGNvbnN0IENvbG9yID0gXFxcIiMxOUI4OURcXFwiO1xcbiAgICAgICAgdmFyIGRlc19kZXNjID0gcGRmaChodG1sLCBjb3ZlckRlc2MpLnJlcGxhY2UoJ+eugOOAgOOAgOS7i++8micsICcnKS5yZXBsYWNlKCfmvKvnlLvnroDku4vvvJonLCAnJyk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPD48Zm9udCBjb2xvcj1cXFwiI0ZBNzI5OFxcXCI+JyArIHBkZmgoaHRtbCwgY292ZXJUaXRsZSkgKyAnXFxcXG4nICsgJ+KAmOKAmOKAmeKAmTw+PGZvbnQgY29sb3I9XFxcIiM3MzQzMzhcXFwiPicgKyBwZGZoKGh0bWwsIGNvdmVyVGl0bGUxKSArICdcXFxcbicsXFxuICAgICAgICAgICAgZGVzYzogJ+KAmOKAmOKAmeKAmTw+PGZvbnQgY29sb3I9XFxcIiM5NTRBNDVcXFwiPicgKyBwZGZoKGh0bWwsIGNvdmVyVGl0bGUyKSArICdcXFxcbicgKyAn4oCY4oCY4oCZ4oCZPD48Zm9udCBjb2xvcj1cXFwiIzk1NEE0NVxcXCI+JyArIHBkZmgoaHRtbCwgY292ZXJUaXRsZTMpLFxcbiAgICAgICAgICAgIHBpY191cmw6IHBkKGh0bWwsIGNvdmVyUGljKXx8Y292ZXJQaWMsXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9zZWFyY2g/cz0nK01ZX1BBUkFNUy55dGl0bGUrJyZydWxlPemYhea8q+WQmycsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpY19ibHVyJ1xcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIGNvbF90eXBlOiAnbGluZSdcXG4gICAgICAgIH0pO1xcbiAgICAgICAgLy92YXIgamogPSBnZXRNeVZhcihcXFwiampzXFxcIiwgXFxcIuaUtui1t1xcXCIpO1xcbiAgICAgICAgLy92YXIgamp1cmwgPSAnaGlrZXI6Ly9lbXB0eUBsYXp5UnVsZT0uanM6Z2V0TXlWYXIoXFxcImpqc1xcXCIpID09IFxcXCLmlLbotbdcXFwiP3B1dE15VmFyKFxcXCJqanNcXFwiLFxcXCLlsZXlvIBcXFwiKTpwdXRNeVZhcihcXFwiampzXFxcIixcXFwi5pS26LW3XFxcIik7XFxcImhpa2VyOi8vZW1wdHlcXFwiJztcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfnroDku4sgPHNtYWxsPjxzbWFsbD48c3BhbiBzdHlsZT1cXFwiY29sb3I6IzE5Qjg5RFxcXCI+5bGV5byAPjwvc3Bhbj48L3NtYWxsPjwvc21hbGw+JyxcXG4gICAgICAgICAgICBpbWc6IFxcXCJodHRwczovL2xhbm1laWd1b2ppYW5nLmNvbS90dWJpYW8vbW9yZS8xOTcucG5nXFxcIixcXG4gICAgICAgICAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKGpqaWQsIGRlY2lkLCBkZXNfZGVzYykgPT4ge1xcbiAgICAgICAgICAgICAgICBpZiAoZ2V0TXlWYXIoXFxcImpqc1xcXCIsIFxcXCLmlLbotbdcXFwiKSA9PSBcXFwi5pS26LW3XFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcImpqc1xcXCIsIFxcXCLlsZXlvIBcXFwiKTtcXG5cXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0oe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBqamlkXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+eugOS7iyA8c21hbGw+PHNtYWxsPjxzcGFuIHN0eWxlPVxcXCJjb2xvcjojMTlCODlEXFxcIj7mlLbotbc+PC9zcGFuPjwvc21hbGw+PC9zbWFsbD4nXFxuICAgICAgICAgICAgICAgICAgICB9KVxcblxcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlSXRlbSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFNpemU6IDE0LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lU3BhY2luZzogMyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGRlY2lkXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJzxzcGFuIHN0eWxlPVxcXCJjb2xvcjojODA4MDgwXFxcIj4nICsgZGVzX2Rlc2MgKyAnLi4uPC9zcGFuPidcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwiampzXFxcIiwgXFxcIuaUtui1t1xcXCIpO1xcblxcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlSXRlbSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGpqaWRcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn566A5LuLIDxzbWFsbD48c21hbGw+PHNwYW4gc3R5bGU9XFxcImNvbG9yOiMxOUI4OURcXFwiPuWxleW8gD48L3NwYW4+PC9zbWFsbD48L3NtYWxsPidcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuXFxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0U2l6ZTogMTQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVTcGFjaW5nOiAzLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogZGVjaWRcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAnPHNwYW4gc3R5bGU9XFxcImNvbG9yOiM4MDgwODBcXFwiPicgKyBkZXNfZGVzYy5zdWJzdHIoMCwgMzApICsgJy4uLjwvc3Bhbj4nXFxuICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgfSwgTVlfUlVMRSArIFxcXCJfamppZFxcXCIsIE1ZX1JVTEUgKyBcXFwiX2RlY2lkXFxcIiwgZGVzX2Rlc2MpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIixcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBpZDogTVlfUlVMRSArIFxcXCJfamppZFxcXCJcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG5cXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICc8c3BhbiBzdHlsZT1cXFwiY29sb3I6IzgwODA4MFxcXCI+JyArIGRlc19kZXNjLnN1YnN0cigwLCAzMCkgKyAnLi4uPC9zcGFuPicsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJyaWNoX3RleHRcXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIHRleHRTaXplOiAxNCxcXG4gICAgICAgICAgICAgICAgbGluZVNwYWNpbmc6IDMsXFxuICAgICAgICAgICAgICAgIGlkOiBNWV9SVUxFICsgXFxcIl9kZWNpZFxcXCJcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lJ1xcbiAgICAgICAgfSlcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lJ1xcbiAgICAgICAgfSlcXG4gICAgfSBjYXRjaCAoZSkge31cXG59XFxuXFxuZnVuY3Rpb24gZG93bihUaXRsZSwgY2hhcHRlclBpYywgbGlzdCwgY2hhcHRlclRpdGxlLCBjaGFwdGVyTGluZSwgZG93bmxvYWRsYXp5KSB7XFxuICAgIHRyeSB7XFxuICAgICAgICBsZXQgZG9MaXN0ID0gbGlzdC5tYXAoKGl0ZW0pID0+ICh7XFxuICAgICAgICAgICAgdGl0bGU6IHBkZmgoaXRlbSwgY2hhcHRlclRpdGxlKSxcXG4gICAgICAgICAgICB1cmw6IHBkKGl0ZW0sIGNoYXB0ZXJMaW5lKSxcXG4gICAgICAgIH0pKTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ08Yj48c3BhbiBzdHlsZT1cXFwiY29sb3I6ICMxYWFkMTlcXFwiPuS4i+i9vea8q+eUu/CflLk8L3NwYW4+PC9iPicsXFxuICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL2Rvd25sb2FkLnZpZXcjbm9SZWNvcmRIaXN0b3J5IyNub1JlZnJlc2gjP3J1bGU95pys5Zyw6LWE5rqQ566h55CGXFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGNoYXB0ZXJMaXN0OiBkb0xpc3QsXFxuICAgICAgICAgICAgICAgIGluZm86IHtcXG4gICAgICAgICAgICAgICAgICAgIGJvb2tOYW1lOiBwZGZoKGh0bWwsIFRpdGxlKSxcXG4gICAgICAgICAgICAgICAgICAgIHJ1bGVOYW1lOiBNWV9SVUxFLnRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgYm9va1RvcFBpYzogcGQoaHRtbCwgY2hhcHRlclBpYyksXFxuICAgICAgICAgICAgICAgICAgICBwYXJzZUNvZGU6IGRvd25sb2FkbGF6eVxcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICBkZWZhdWx0VmlldzogXFxcIjFcXFwiXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIGNvbF90eXBlOiAnbGluZSdcXG4gICAgICAgIH0pO1xcbiAgICB9IGNhdGNoIChlKSB7fVxcbn1cXG5cXG5mdW5jdGlvbiBjaGFwdGVyKGNoYXB0ZXJMaXN0LCBjaGFwdGVyVGl0bGUsIGNoYXB0ZXJVcmwsIGRlZmF1bHRPcmRlciwgaGFzTGluZSkge1xcbiAgICB2YXIgbGlzdCA9IGNoYXB0ZXJMaXN0O1xcbiAgICB2YXIgb3JpZ2luYWwgPSBbe1xcbiAgICAgICAgdXJsOiBNWV9VUkwsXFxuICAgICAgICBvcmRlcjogZGVmYXVsdE9yZGVyXFxuICAgIH1dO1xcbiAgICAhZmlsZUV4aXN0KCdoaWtlcjovL2ZpbGVzL3J1bGVzL2NvbWljL2NvbWljTG9nRmlsZS5qcycpID8gKHdyaXRlRmlsZSgnaGlrZXI6Ly9maWxlcy9ydWxlcy9jb21pYy9jb21pY0xvZ0ZpbGUuanMnLCBKU09OLnN0cmluZ2lmeShvcmlnaW5hbCkpKSA6IDA7XFxuICAgIHZhciBsb2cgPSBKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL2ZpbGVzL3J1bGVzL2NvbWljL2NvbWljTG9nRmlsZS5qcycpKTtcXG4gICAgZm9yICh2YXIgaSBpbiBsb2cpIHtcXG4gICAgICAgIGlmIChsb2dbaV0udXJsID09IE1ZX1VSTCkge1xcbiAgICAgICAgICAgIHZhciBub3cgPSBpO1xcbiAgICAgICAgICAgIHZhciBvcmRlciA9IGxvZ1tpXS5vcmRlcjtcXG4gICAgICAgICAgICBicmVhaztcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgdmFyIG5vdyA9ICcnO1xcbiAgICAgICAgICAgIHZhciBvcmRlciA9IGRlZmF1bHRPcmRlcjtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBsZXQgb3JkZXJJdGVtID0ge1xcbiAgICAgICAgdGl0bGU6IFxcXCLigJzigJzigJ3igJ1cXFwiICsgJzxmb250IGNvbG9yPVxcXCIjZjM3MzM1XFxcIj4nICsgJ+eroOiKguaOkuW6j+KHhScgKyAnPC9mb250PicsXFxuICAgICAgICB1cmw6IE1ZX1VSTCArIGBAbGF6eVJ1bGU9LmpzOnZhciBsb2cgPSBKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL2ZpbGVzL3J1bGVzL2NvbWljL2NvbWljTG9nRmlsZS5qcycpKTt2YXIgbm93PSdgICsgbm93ICsgYCc7aWYobm93IT0nJyl7dmFyIG5vdz1wYXJzZUludChub3cpO3ZhciBvcmRlcj1sb2dbbm93XS5vcmRlcn1lbHNle3ZhciBub3c9cGFyc2VJbnQobG9nLmxlbmd0aCk7dmFyIG9yZGVyPWAgKyBkZWZhdWx0T3JkZXIgKyBgO2xvZy5wdXNoKHt1cmw6aW5wdXQsb3JkZXI6b3JkZXJ9KTt9aWYobG9nW25vd10ub3JkZXIpe2xvZ1tub3ddLm9yZGVyPTA7fWVsc2V7bG9nW25vd10ub3JkZXI9MTt9O3dyaXRlRmlsZSgnaGlrZXI6Ly9maWxlcy9ydWxlcy9jb21pYy9jb21pY0xvZ0ZpbGUuanMnLCBKU09OLnN0cmluZ2lmeShsb2cpKTtyZWZyZXNoUGFnZSgpOydoaWtlcjovL2VtcHR5J2AsXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxuICAgIH1cXG4gICAgaWYgKGhhc0xpbmUpIHtcXG4gICAgICAgIG9yZGVySXRlbS50aXRsZSA9IFxcXCLigJzigJzigJ3igJ1cXFwiICsgJzxmb250IGNvbG9yPVxcXCIjZjM3MzM1XFxcIj4nICsgJ+mbhuaVsOaOkuW6j+KHhScgKyAnPC9mb250Pic7XFxuICAgICAgICBvcmRlckl0ZW0uY29sX3R5cGUgPSBcXFwidGV4dF9jZW50ZXJfMVxcXCJcXG4gICAgfVxcbiAgICBkLnB1c2gob3JkZXJJdGVtKTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIGNvbF90eXBlOiAnbGluZSdcXG4gICAgfSk7XFxuXFxuICAgIHZhciBsaXN0ID0gb3JkZXIgPyBsaXN0IDogbGlzdC5yZXZlcnNlKCk7XFxuICAgIGZvciAobGV0IGkgaW4gbGlzdCkge1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnTxzbWFsbD4nICsgcGRmaChsaXN0W2ldLCBjaGFwdGVyVGl0bGUpICsgJzwvc21hbGw+JyxcXG4gICAgICAgICAgICAgICAgdXJsOiBwZChsaXN0W2ldLCBjaGFwdGVyVXJsKSArIGxhenksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF8yJyxcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHt9XFxuICAgIH1cXG59XFxuXFxuZnVuY3Rpb24gbGluZShsaW5lTGlzdCwgbGluZVRpdGxlUnVsZSwgdmFyS2V5KSB7XFxuICAgIGxldCBsaXN0ID0gbGluZUxpc3RcXG4gICAgdmFyS2V5ID0gdmFyS2V5ID09IG51bGwgPyAoTVlfUlVMRS51cmwgKyAnI2xpbmUtaW5kZXgnKSA6IHZhcktleTtcXG4gICAgYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAkLnRvU3RyaW5nKChrZXlMaXN0KSA9PiB7XFxuICAgICAgICBmb3IgKGxldCBpIGluIGtleUxpc3QpIHtcXG4gICAgICAgICAgICBjbGVhclZhcihrZXlMaXN0W2ldKVxcbiAgICAgICAgfVxcblxcbiAgICB9LCBbdmFyS2V5LCBNWV9SVUxFLnRpdGxlICsgJyNsaW5lLXRpdGxlJ10pKVxcbiAgICBsZXQgbGluZTBUaXRsZSA9ICcnXFxuICAgIHRyeSB7XFxuICAgICAgICBsaW5lMFRpdGxlID0gcGRmaChsaXN0WzBdLCBsaW5lVGl0bGVSdWxlKTtcXG4gICAgfSBjYXRjaCAoZSkge31cXG4gICAgbG9nKE1ZX1JVTEUudGl0bGUgKyBnZXRNeVZhcigoTVlfUlVMRS50aXRsZSArICcjbGluZS10aXRsZScpKSlcXG4gICAgZm9yIChsZXQgaSBpbiBsaXN0KSB7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIGxldCBsaW5lVGl0bGUgPSBwZGZoKGxpc3RbaV0sIGxpbmVUaXRsZVJ1bGUpO1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBnZXRNeVZhcigoTVlfUlVMRS50aXRsZSArICcjbGluZS10aXRsZScpLCBsaW5lMFRpdGxlKSA9PT0gbGluZVRpdGxlID8gXFxcIuWIh+aNojrigJjigJhcXFwiICsgbGluZVRpdGxlICsgXFxcIlxcXCIgOiBsaW5lVGl0bGUgKyBcXFwi4oCY4oCYOuWIh+aNolxcXCIsXFxuICAgICAgICAgICAgICAgIHVybDogJCgpLmxhenlSdWxlKCh2YXJLZXksIGxpbmVJbmRleCwgbGluZVRpdGxlKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcih2YXJLZXksIGxpbmVJbmRleC50b1N0cmluZygpKVxcbiAgICAgICAgICAgICAgICAgICAgLy8gbG9nKE1ZX1JVTEUudXJsKVxcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoKE1ZX1JVTEUudGl0bGUgKyAnI2xpbmUtdGl0bGUnKSwgbGluZVRpdGxlKVxcbiAgICAgICAgICAgICAgICAgICAgbG9nKE1ZX1JVTEUudGl0bGUgKyBnZXRNeVZhcigoTVlfUlVMRS50aXRsZSArICcjbGluZS10aXRsZScpKSlcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/lt7LliIfmjaLoh7NcXFwiICsgbGluZVRpdGxlXFxuICAgICAgICAgICAgICAgIH0sIHZhcktleSwgaSwgbGluZVRpdGxlKSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdmbGV4X2J1dHRvbidcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHt9XFxuICAgIH1cXG4gICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lJ1xcbiAgICAgICAgICAgIH0pO1xcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuWKqOaAgVvkuoxdKlwiLFwicGF0aFwiOlwiZHRmbFwiLFwicnVsZVwiOlwiY29uc3QgZW1wdHkgPSBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG5cXG5pZiAodHlwZW9mKOaLvOaOpeWIhuexuykgIT0gJ3VuZGVmaW5lZCcgJiYg5ou85o6l5YiG57G7ICE9ICcnKSB7XFxuICAgIHZhciBjYXRlZ29yaWVzID0gcGRmYShodG1sLCDlpKfnsbvlrprkvY0pLmNvbmNhdChwZGZhKGh0bWwsIOaLvOaOpeWIhuexuykpXFxufSBlbHNlIHtcXG4gICAgdmFyIGNhdGVnb3JpZXMgPSBwZGZhKGh0bWwsIOWkp+exu+WumuS9jSlcXG59XFxuXFxubGV0IGluaXRfY2F0ZSA9IFtdXFxuXFxuZm9yIChsZXQgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XFxuICAgIGluaXRfY2F0ZS5wdXNoKFxcXCIwXFxcIilcXG59XFxuXFxuY29uc3QgZm9sZCA9IGdldE15VmFyKE1ZX1JVTEUuZ3JvdXAsIFxcXCIwXFxcIilcXG5jb25zdCBjYXRlX3RlbXBfanNvbiA9IGdldE15VmFyKE1ZX1JVTEUudGl0bGUsIEpTT04uc3RyaW5naWZ5KGluaXRfY2F0ZSkpXFxuY29uc3QgY2F0ZV90ZW1wID0gSlNPTi5wYXJzZShjYXRlX3RlbXBfanNvbilcXG5cXG5pZiAocGFyc2VJbnQocGFnZSkgPT09IDEpIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBmb2xkID09PSAnMScgPyAn4oCc4oCc4oCd4oCdPGI+JyArICfiiKgnLmZvbnRjb2xvcihcXFwiI0ZGMDAwMFxcXCIpICsgJzwvYj4nIDogJ+KAnOKAnOKAneKAnTxiPicgKyAn4oinJy5mb250Y29sb3IoXFxcIiMxYWFkMTlcXFwiKSArICc8L2I+JyxcXG4gICAgICAgIHVybDogJCgpLmxhenlSdWxlKChmb2xkKSA9PiB7XFxuICAgICAgICAgICAgcHV0TXlWYXIoTVlfUlVMRS5ncm91cCwgZm9sZCA9PT0gJzEnID8gJzAnIDogJzEnKTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgfSwgZm9sZCksXFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICB9KVxcbiAgICBjYXRlZ29yaWVzLmZvckVhY2goKGNhdGVnb3J5LCBpbmRleCkgPT4ge1xcbiAgICAgICAgbGV0IHN1Yl9jYXRlZ29yaWVzID0gcGRmYShjYXRlZ29yeSwg5bCP57G75a6a5L2NKTtcXG4gICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xcbiAgICAgICAgICAgIHN1Yl9jYXRlZ29yaWVzLmZvckVhY2goKGl0ZW0sIGtleSkgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSBwZGZoKGl0ZW0sIOWIhuexu+agh+mimClcXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZijmjpLpmaQpICE9ICd1bmRlZmluZWQnICYmIOaOkumZpCAhPSAnJykge1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSB0aXRsZS5yZXBsYWNlKG5ldyBSZWdFeHAo5o6S6ZmkLCBcXFwiZ1xcXCIpLCBcXFwiXFxcIilcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGtleS50b1N0cmluZygpID09PSBjYXRlX3RlbXBbaW5kZXhdID8gXFxcIuKAnOKAnOKAneKAnVxcXCIgKyB0aXRsZS5mb250Y29sb3Io5YiG57G76aKc6ImyKSA6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAkKHBkKGl0ZW0sIOWIhuexu+mTvuaOpSkgKyAnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgocGFyYW1zKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5ld19jYXRlID0gW11cXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuY2F0ZV90ZW1wLmZvckVhY2goKGNhdGUsIGluZGV4KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19jYXRlLnB1c2goaW5kZXggPT09IDAgPyBwYXJhbXMua2V5LnRvU3RyaW5nKCkgOiBcXFwiMFxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihNWV9SVUxFLnRpdGxlLCBKU09OLnN0cmluZ2lmeShuZXdfY2F0ZSkpXFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoTVlfUlVMRS51cmwsIGlucHV0KVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVfdGVtcDogY2F0ZV90ZW1wLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleToga2V5LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2U6IHBhZ2UsXFxuICAgICAgICAgICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIlxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfSBlbHNlIGlmIChmb2xkID09PSAnMScpIHtcXG4gICAgICAgICAgICBzdWJfY2F0ZWdvcmllcy5mb3JFYWNoKChpdGVtLCBrZXkpID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IHRpdGxlID0gcGRmaChpdGVtLCDliIbnsbvmoIfpopgpXFxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yo5o6S6ZmkKSAhPSAndW5kZWZpbmVkJyAmJiDmjpLpmaQgIT0gJycpIHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlID0gdGl0bGUucmVwbGFjZShuZXcgUmVnRXhwKOaOkumZpCwgXFxcImdcXFwiKSwgXFxcIlxcXCIpXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBrZXkudG9TdHJpbmcoKSA9PT0gY2F0ZV90ZW1wW2luZGV4XSA/IFxcXCLigJzigJzigJ3igJ1cXFwiICsgdGl0bGUuZm9udGNvbG9yKOWIhuexu+minOiJsikgOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJChwZChpdGVtLCDliIbnsbvpk77mjqUpICsgJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHBhcmFtcykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5jYXRlX3RlbXBbcGFyYW1zLmluZGV4XSA9IHBhcmFtcy5rZXkudG9TdHJpbmcoKVxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKE1ZX1JVTEUudGl0bGUsIEpTT04uc3RyaW5naWZ5KHBhcmFtcy5jYXRlX3RlbXApKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKE1ZX1JVTEUudXJsLCBpbnB1dClcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRlX3RlbXA6IGNhdGVfdGVtcCxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaW5kZXgsXFxuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBrZXksXFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogcGFnZSxcXG4gICAgICAgICAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9XFxuICAgIH0pXFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5Yqo5oCBW+S4gF0qXCIsXCJwYXRoXCI6XCJjYXRlZ29yaWVzLWhlYWRlclwiLFwicnVsZVwiOlwiLyoqXFxuICog5pys5Zyw572R6aG15o+S5Lu26ZO+5o6lIGhpa2VyOi8vZmlsZXMvcnVsZXMvanMvY2F0ZWdvcmllcy1oZWFkZXIuanNcXG4gKiDlrZDpobXpnaLpk77mjqUgaGlrZXI6Ly9wYWdlL2NhdGVnb3JpZXMtaGVhZGVyXFxuICog6YGT6ZW/5LuT5bqT6ZO+5o6lIGh0dHA6Ly9oaWtlci5ub2tpYS5wcmVzcy9oaWtlcnVsZS9ydWxlbGlzdC5qc29uP2lkPTI3MDVcXG4gKiDnoIHkupEgR2l0ZWUg6ZO+5o6lIGh0dHBzOi8vZ2l0ZWUuY29tL3JlYm9ybjAvSGlrZXJSdWxlcy9yYXcvbWFzdGVyL3BsdWdpbnMvY2F0ZWdvcmllcy1oZWFkZXIuanNcXG4gKi9cXG4vKipcXG4gKiBPYmplY3QuYXNzaWduIOeUqOazleWPguiAg+mTvuaOpVxcbiAqXFxuICogMS5odHRwczovL3d3dy5kYWltYWppYW9saXUuY29tL2RhaW1hLzQ3MTM5YTllNzEwMDQwN1xcbiAqIDIuaHR0cHM6Ly9zZWdtZW50ZmF1bHQuY29tL2EvMTE5MDAwMDAxMTc3ODg3NVxcbiAqIDMuaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvemgtQ04vZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2Fzc2lnblxcbiAqL1xcbi8vIOWIqeeUqCBTeW1ib2wg5a6e546w56eB5pyJ5Y+Y6YeP5ZKM56eB5pyJ5pa55rOV77yM5aSW55WM5LiN5Y+v6K6/6Zeu77yI5Y+C6ICD6ZO+5o6lMu+8iVxcbmNvbnN0IHN5bWJvbE1hcCA9IHtcXG4gICAgLy8gY2hlY2tQYXJhbXM6IFN5bWJvbCgnY2hlY2tQYXJhbXMnKSxcXG4gICAgbUxheW91dDogU3ltYm9sKCdtTGF5b3V0JyksXFxuICAgIHRydWVfdXJsOiBTeW1ib2woJ3RydWVfdXJsJyksXFxuICAgIG1QYWdlOiBTeW1ib2woJ21QYWdlJyksXFxuICAgIHNyYzogU3ltYm9sKCdzcmMnKSxcXG4gICAgcnVsZU9iakxpc3Q6IFN5bWJvbCgncnVsZU9iakxpc3QnKSxcXG4gICAgbUZvbGQ6IFN5bWJvbCgnbUZvbGQnKSxcXG4gICAgbUZvbGRJbm5lckVuYWJsZTogU3ltYm9sKCdtRm9sZElubmVyRW5hYmxlJyksXFxuICAgIG1Gb2xkSW5kZXg6IFN5bWJvbCgnbUZvbGRJbmRleCcpLFxcbiAgICBtRm9sZExheW91dDogU3ltYm9sKCdtRm9sZExheW91dCcpLFxcbiAgICBtQ29sb3I6IFN5bWJvbCgnbUNvbG9yJyksXFxuICAgIG1UYWc6IFN5bWJvbCgnbVRhZycpLFxcbn1cXG5cXG5mdW5jdGlvbiBDYXRlZ29yaWVzSGVhZGVyKGNvbG9yKSB7XFxuICAgIC8vICd1c2Ugc3RyaWN0JztcXG4gICAgLy8gLi4uXFxuICAgIC8vIHRoaXNbc3ltYm9sTWFwLmxpc3RSdWxlXSA9IFtdXFxuICAgIC8vIHRoaXNbc3ltYm9sTWFwLnN1Ykxpc3RSdWxlXSA9IFtdXFxuICAgIHRoaXNbc3ltYm9sTWFwLm1Db2xvcl0gPSBjb2xvciB8fCBcXFwiI0ZBNzI5OFxcXCI7XFxuICAgIHRoaXNbc3ltYm9sTWFwLnJ1bGVPYmpMaXN0XSA9IFtdXFxuICAgIHRoaXMuVkFSTUFQID0ge1xcbiAgICAgICAgQ0FURUdPUlk6IFxcXCJoZWFkZXIuY2F0ZWdvcnlcXFwiLFxcbiAgICAgICAgVVJMOiBcXFwiaGVhZGVyLnVybFxcXCIsXFxuICAgICAgICBGT0xEOiBcXFwiaGVhZGVyLmZvbGRcXFwiLFxcbiAgICB9XFxuICAgIHRoaXNbc3ltYm9sTWFwLm1Gb2xkTGF5b3V0XSA9IHtcXG4gICAgICAgIGluamVjdEluZGV4OiAxXFxuICAgIH1cXG4gICAgdGhpc1tzeW1ib2xNYXAubUZvbGRJbmRleF0gPSAxXFxufVxcblxcbk9iamVjdC5hc3NpZ24oQ2F0ZWdvcmllc0hlYWRlci5wcm90b3R5cGUsIHtcXG4gICAgLy8gT3ZlcnJpZGUg5p6E6YCg5pa55rOV77yM55u45b2T5LqOIGZ1bmN0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9ICguLi4pID0+IHsuLi5977yMbmV3IGZ1bmN0aW9uKCkg55qE5pe25YCZ5Lya6Ieq5Yqo5omn6KGMXFxuICAgIGNvbnN0cnVjdG9yOiBDYXRlZ29yaWVzSGVhZGVyLFxcbiAgICAvLyDlrprkuYnnp4HmnInmlrnms5VcXG4gICAgVkVSU0lPTjogMjAyMTExMzAxOTAwLFxcbiAgICBjaGVja1BhcmFtcygpIHtcXG4gICAgICAgIGlmICghdGhpc1tzeW1ib2xNYXAubUxheW91dF0pIHtcXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuivt+iwg+eUqCBsYXlvdXQoZCkg5Lyg5YWl5b2T5YmN55WM6Z2iXFxcIilcXG4gICAgICAgIH1cXG4gICAgICAgIGlmICghdGhpc1tzeW1ib2xNYXAudHJ1ZV91cmxdKSB7XFxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLor7fosIPnlKggdHJ1ZVVybCh1cmwpIOS8oOWFpeW9k+WJjeWIhuexu+eahOmTvuaOpVxcXCIpXFxuICAgICAgICB9XFxuICAgICAgICBpZiAoIXRoaXNbc3ltYm9sTWFwLm1QYWdlXSkge1xcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi6K+36LCD55SoIHBhZ2UobVBhZ2UpIOS8oOWFpeW9k+WJjemhteaVsFxcXCIpXFxuICAgICAgICB9XFxuICAgICAgICBpZiAodGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdLmxlbmd0aCA8IDEpIHtcXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuivt+iwg+eUqOebuOWFs+aWueazleS8oOWFpeWumuS9jeinhOWImVxcXCIpXFxuICAgICAgICB9XFxuICAgICAgICBpZiAoIXRoaXNbc3ltYm9sTWFwLm1Gb2xkXSkge1xcbiAgICAgICAgICAgIHRoaXNbc3ltYm9sTWFwLm1Gb2xkXSA9ICcwJ1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICBsYXlvdXQobUxheW91dCkge1xcbiAgICAgICAgdGhpc1tzeW1ib2xNYXAubUxheW91dF0gPSBtTGF5b3V0XFxuICAgICAgICByZXR1cm4gdGhpc1xcbiAgICB9LFxcbiAgICB0cnVlVXJsKHVybCkge1xcbiAgICAgICAgdGhpc1tzeW1ib2xNYXAudHJ1ZV91cmxdID0gdXJsXFxuICAgICAgICByZXR1cm4gdGhpc1xcbiAgICB9LFxcbiAgICBwYWdlKG1QYWdlKSB7XFxuICAgICAgICBpZiAodHlwZW9mIChtUGFnZSkgPT09ICdzdHJpbmcnKSB7XFxuICAgICAgICAgICAgbVBhZ2UgPSBwYXJzZUludChtUGFnZSlcXG4gICAgICAgIH1cXG4gICAgICAgIHRoaXNbc3ltYm9sTWFwLm1QYWdlXSA9IG1QYWdlXFxuICAgICAgICByZXR1cm4gdGhpc1xcbiAgICB9LFxcbiAgICBodG1sKG1TcmMpIHtcXG4gICAgICAgIHRoaXNbc3ltYm9sTWFwLnNyY10gPSBtU3JjXFxuICAgICAgICByZXR1cm4gdGhpc1xcbiAgICB9LFxcbiAgICBsaXN0KHJ1bGUpIHtcXG4gICAgICAgIGlmICh0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF0ubGVuZ3RoID4gMCkge1xcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwibGlzdChydWxlKSBhZGQocnVsZU9iaikg5Y+q6IO95LqM6YCJ5LiA77yBXFxcIilcXG4gICAgICAgIH1cXG4gICAgICAgIHRoaXNbc3ltYm9sTWFwLnJ1bGVPYmpMaXN0XSA9IFt7fV1cXG4gICAgICAgIHRoaXNbc3ltYm9sTWFwLnJ1bGVPYmpMaXN0XVswXS5saXN0UnVsZSA9IHJ1bGVcXG4gICAgICAgIHRoaXNbc3ltYm9sTWFwLnJ1bGVPYmpMaXN0XVswXVsn5LiA57qn5YiG57G7J10gPSBydWxlXFxuICAgICAgICByZXR1cm4gdGhpc1xcbiAgICB9LFxcbiAgICBzdWJMaXN0KHJ1bGUpIHtcXG4gICAgICAgIGlmICh0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF0ubGVuZ3RoID4gMSkge1xcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwic3ViTGlzdChydWxlKSBhZGQocnVsZU9iaikg5Y+q6IO95LqM6YCJ5LiA77yBXFxcIilcXG4gICAgICAgIH1cXG4gICAgICAgIGlmICghdGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdWzBdIHx8ICghdGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdWzBdLmxpc3RSdWxlICYmICF0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF1bMF1bJ+S4gOe6p+WIhuexuyddKSkge1xcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi6K+35YWI6LCD55SoIGxpc3QocnVsZSkg5oiWIOS4gOe6p+WIhuexuyhydWxlKSDlrprkvY3kuIDnuqfliIbnsbtcXFwiKVxcbiAgICAgICAgfVxcbiAgICAgICAgdGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdWzBdLnN1Ykxpc3RSdWxlID0gcnVsZVxcbiAgICAgICAgdGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdWzBdWyflrZDliIbnsbsnXSA9IHJ1bGVcXG4gICAgICAgIHJldHVybiB0aGlzXFxuICAgIH0sXFxuICAgIHRpdGxlKHJ1bGUpIHtcXG4gICAgICAgIGlmICh0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF0ubGVuZ3RoID4gMSkge1xcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwidGl0bGUocnVsZSkgYWRkKHJ1bGVPYmopIOWPquiDveS6jOmAieS4gO+8gVxcXCIpXFxuICAgICAgICB9XFxuICAgICAgICBpZiAoIXRoaXNbc3ltYm9sTWFwLnJ1bGVPYmpMaXN0XVswXSB8fCAoIXRoaXNbc3ltYm9sTWFwLnJ1bGVPYmpMaXN0XVswXS5saXN0UnVsZSAmJiAhdGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdWzBdWyfkuIDnuqfliIbnsbsnXSkpIHtcXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuivt+WFiOiwg+eUqCBsaXN0KHJ1bGUpIOaIliDkuIDnuqfliIbnsbsocnVsZSkg5a6a5L2N5LiA57qn5YiG57G7XFxcIilcXG4gICAgICAgIH1cXG4gICAgICAgIHRoaXNbc3ltYm9sTWFwLnJ1bGVPYmpMaXN0XVswXS50aXRsZVJ1bGUgPSBydWxlXFxuICAgICAgICB0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF1bMF1bJ+WIhuexu+agh+mimCddID0gdGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdWzBdLnRpdGxlUnVsZVxcbiAgICAgICAgcmV0dXJuIHRoaXNcXG4gICAgfSxcXG4gICAgdXJsKHJ1bGUpIHtcXG4gICAgICAgIGlmICh0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF0ubGVuZ3RoID4gMSkge1xcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwidXJsKHJ1bGUpIGFkZChydWxlT2JqKSDlj6rog73kuozpgInkuIDvvIFcXFwiKVxcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKCF0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF1bMF0gfHwgKCF0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF1bMF0ubGlzdFJ1bGUgJiYgIXRoaXNbc3ltYm9sTWFwLnJ1bGVPYmpMaXN0XVswXVsn5LiA57qn5YiG57G7J10pKSB7XFxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLor7flhYjosIPnlKggbGlzdChydWxlKSDmiJYg5LiA57qn5YiG57G7KHJ1bGUpIOWumuS9jeS4gOe6p+WIhuexu1xcXCIpXFxuICAgICAgICB9XFxuICAgICAgICB0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF1bMF0udXJsUnVsZSA9IHJ1bGVcXG4gICAgICAgIHRoaXNbc3ltYm9sTWFwLnJ1bGVPYmpMaXN0XVswXVsn5YiG57G76ZO+5o6lJ10gPSB0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF1bMF0udXJsUnVsZVxcbiAgICAgICAgcmV0dXJuIHRoaXNcXG4gICAgfSxcXG4gICAgLyoqXFxuICAgICAqIOaYr+WQpuW8gOWQr+aKmOWPoOWKn+iDvVxcbiAgICAgKlxcbiAgICAgKiBAcGFyYW0gZW5hYmxlZCB0cnVlIOihqOekuuW8gOWQr++8jGZhbHNlIOihqOekuuemgeeUqFxcbiAgICAgKiBAcmV0dXJucyB7Q2F0ZWdvcmllc0hlYWRlcn1cXG4gICAgICovXFxuICAgIGZvbGRJbm5lcihlbmFibGVkKSB7XFxuICAgICAgICBpZiAoISh0eXBlb2YgKGVuYWJsZWQpID09PSAnYm9vbGVhbicpKSB7XFxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLor7fkvKDlhaUgdHJ1ZSDmiJYgZmFsc2Ug6KGo56S65byA5ZCv5oiW5YWz6Zet5oqY5Y+g5Yqf6IO977yBXFxcIilcXG4gICAgICAgIH1cXG4gICAgICAgIHRoaXNbc3ltYm9sTWFwLm1Gb2xkSW5uZXJFbmFibGVdID0gZW5hYmxlZFxcbiAgICAgICAgcmV0dXJuIHRoaXNcXG4gICAgfSxcXG4gICAgLyoqXFxuICAgICAqIOS7juesrCBpbmRleCDooYzlvIDlp4vmipjlj6BcXG4gICAgICpcXG4gICAgICogQHBhcmFtIGluZGV4IOW8gOWni+aKmOWPoOeahOihjOaVsFxcbiAgICAgKiBAcmV0dXJucyB7Q2F0ZWdvcmllc0hlYWRlcn1cXG4gICAgICovXFxuICAgIGZvbGRJbmRleChpbmRleCkge1xcbiAgICAgICAgaWYgKCEodHlwZW9mIChpbmRleCkgPT09ICdudW1iZXInKSkge1xcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi5byA5aeL5oqY5Y+g6KGM6K+35Lyg5YWl5pWw5a2X77yBXFxcIilcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChpbmRleCA8IDEpIHtcXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuW8gOWni+aKmOWPoOihjOivt+S8oOWFpeWkp+S6jiAwIOeahOaVtOaVsO+8gVxcXCIpXFxuICAgICAgICB9XFxuICAgICAgICB0aGlzW3N5bWJvbE1hcC5tRm9sZEluZGV4XSA9IGluZGV4IHx8IDE7XFxuICAgICAgICByZXR1cm4gdGhpc1xcbiAgICB9LFxcbiAgICAvKipcXG4gICAgICog5oqY5Y+g5oyJ6ZKu55qE55WM6Z2iXFxuICAgICAqXFxuICAgICAqIEBwYXJhbSBsYXlvdXQg5LiOIGQucHVzaCDnu5PmnoTkuIDoh7TvvIxcXG4gICAgICogICAgICAgIOS+i++8mnsgdGl0bGU6XFxcIuagh+mimDFcXFwiLCB1cmw6XFxcInh4eFxcXCIsIGNvbF90eXBlOlxcXCJzY3JvbGxfYnV0dG9uXFxcIiB9O1xcbiAgICAgKiAgICAgICAg5Y+C5pWw6YeH55So5Y+v6YCJ6KaG55uW5qih5byP77yM5LiN5YaZ55qE5Y+C5pWw5YiZ5L2/55So6buY6K6kO1xcbiAgICAgKiAgICAgICAg5q+U5aaC5Lyg5YWlIHsgY29sX3R5cGU6XFxcInRleHRfMVxcXCIgfe+8jOmCo+acgOe7iOe7k+aenOWwseaYryB7IHRpdGxlOlxcXCLmoIfpopgxXFxcIiwgdXJsOlxcXCJ4eHhcXFwiLCBjb2xfdHlwZTpcXFwidGV4dF8xXFxcIiB9XFxuICAgICAqIEByZXR1cm5zIHtDYXRlZ29yaWVzSGVhZGVyfVxcbiAgICAgKi9cXG4gICAgZm9sZExheW91dChsYXlvdXQpIHtcXG4gICAgICAgIGlmICh0eXBlb2YgbGF5b3V0ID09PSAnb2JqZWN0Jykge1xcbiAgICAgICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMobGF5b3V0KVxcbiAgICAgICAgICAgIGxldCBpbmplY3RJbmRleCA9IGxheW91dC5pbmplY3RJbmRleCB8fCBsYXlvdXRbJ+aKmOWPoOaMiemSruaPkuWFpeihjCddXFxuICAgICAgICAgICAgaWYgKGxheW91dC50aXRsZSB8fCBsYXlvdXQudXJsIHx8IGxheW91dC5jb2xfdHlwZSB8fCBpbmplY3RJbmRleCkge1xcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGtleXNbaV1cXG4gICAgICAgICAgICAgICAgICAgIHRoaXNbc3ltYm9sTWFwLm1Gb2xkTGF5b3V0XVtrZXldID0gbGF5b3V0W2tleV07XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuivt+S8oOWFpeato+ehrueahOaKmOWPoOeVjOmdouWFg+e0oO+8gVxcXCIpXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIC8vIGluamVjdEluZGV4IOaKmOWPoOaMiemSruaPkuWFpeesrCBpbmplY3RJbmRleCDooYxcXG4gICAgICAgICAgICBpZiAoaW5qZWN0SW5kZXgpIHtcXG4gICAgICAgICAgICAgICAgaWYgKCEodHlwZW9mIChpbmplY3RJbmRleCkgPT09ICdudW1iZXInKSkge1xcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLmipjlj6DmjInpkq7mj5LlhaXooYzor7fkvKDlhaXmlbDlrZfvvIFcXFwiKVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGlmIChpbmplY3RJbmRleCA8IDEpIHtcXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi5oqY5Y+g5oyJ6ZKu5o+S5YWl6KGM6K+35Lyg5YWl5aSn5LqOIDAg55qE5pW05pWw77yBXFxcIilcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAoaW5qZWN0SW5kZXggPiB0aGlzW3N5bWJvbE1hcC5tRm9sZEluZGV4XSkge1xcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLmipjlj6DmjInpkq7mj5LlhaXooYzkuI3lvpflpKfkuo7mmL7npLrmipjlj6DooYzmlbDvvIHor7fosIPnlKggLmZvbGRJbmRleChpbmRleCkg5oiWIC7nrKzlh6DooYzlvIDlp4vmipjlj6AoaW5kZXgpIOS8oOWFpeato+ehrueahOaYvuekuuaKmOWPoOihjOaVsFxcXCIpXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgdGhpc1tzeW1ib2xNYXAubUZvbGRMYXlvdXRdLmluamVjdEluZGV4ID0gaW5qZWN0SW5kZXggfHwgMTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi6K+35Lyg5YWl5q2j56Gu55qE5oqY5Y+g55WM6Z2i5YWD57Sg77yBXFxcIilcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiB0aGlzO1xcbiAgICB9LFxcbiAgICAvLyDlvZPliY3mmK/lkKbmipjlj6BcXG4gICAgZm9sZChpc0ZvbGQpIHtcXG4gICAgICAgIGlmICh0eXBlb2YgKGlzRm9sZCkgPT09ICdzdHJpbmcnKSB7XFxuICAgICAgICAgICAgaXNGb2xkID0gaXNGb2xkID09PSAnMSdcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChpc0ZvbGQpIHtcXG4gICAgICAgICAgICB0aGlzW3N5bWJvbE1hcC5tRm9sZF0gPSAnMSc7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHRoaXNbc3ltYm9sTWFwLm1Gb2xkXSA9ICcwJztcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiB0aGlzXFxuICAgIH0sXFxuICAgIGNvbG9yKG1Db2xvcikge1xcbiAgICAgICAgdGhpc1tzeW1ib2xNYXAubUNvbG9yXSA9IG1Db2xvclxcbiAgICAgICAgcmV0dXJuIHRoaXNcXG4gICAgfSxcXG4gICAgdGFnKG1UYWcpIHtcXG4gICAgICAgIHRoaXNbc3ltYm9sTWFwLm1UYWddID0gbVRhZ1xcbiAgICAgICAgcmV0dXJuIHRoaXNcXG4gICAgfSxcXG4gICAgYWRkKHJ1bGVPYmopIHtcXG4gICAgICAgIC8vIGxvZygkLnN0cmluZ2lmeShydWxlT2JqKSlcXG4gICAgICAgIGlmIChydWxlT2JqLmNvbnN0cnVjdG9yID09PSBBcnJheSkge1xcbiAgICAgICAgICAgIHRoaXNbc3ltYm9sTWFwLnJ1bGVPYmpMaXN0XSA9IHRoaXNbc3ltYm9sTWFwLnJ1bGVPYmpMaXN0XS5jb25jYXQocnVsZU9iailcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgdGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdLnB1c2gocnVsZU9iailcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiB0aGlzO1xcbiAgICB9LFxcbiAgICBldmFsSlNSdWxlKGl0ZW0sIGpzUnVsZSkge1xcbiAgICAgICAgbGV0IHJ1bGUgPSBqc1J1bGUucmVwbGFjZShcXFwiQGpzOlxcXCIsIFxcXCJcXFwiKVxcbiAgICAgICAgcnVsZSA9IHJ1bGUudHJpbSgpXFxuICAgICAgICAvLyBsb2coJC5zdHJpbmdpZnkocnVsZSkpXFxuICAgICAgICBsZXQgaW5wdXQgPSBpdGVtXFxuICAgICAgICBpZiAocnVsZS5zdGFydHNXaXRoKFxcXCIoXFxcIikpIHtcXG4gICAgICAgICAgICBldmFsKCdyZXN1bHQgPSAnICsgcnVsZSlcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgLyoqXFxuICAgICAgICAgICAgICog6L+Y5Y6f5oiQICQudG9TdHJpbmcoLi4uKSDnmoTmnIDnu4jnu5PmnpzvvIzovr7liLDmnIDnu4jlpITnkIbmlrnlvI/ot5/kuIrpnaLnmoQgaWYg5LiA6Ie055qE55uu55qEXFxuICAgICAgICAgICAgICovXFxuICAgICAgICAgICAgZXZhbCgncmVzdWx0ID0gJyArICcoKCkgPT4geycgKyBydWxlICsgJ30pKCknKVxcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIChyZXN1bHQgfHwgJycpXFxuICAgIH0sXFxuICAgIGdldFRpdGxlKHNyYywgY2F0ZWdvcnkpIHtcXG4gICAgICAgIGxldCB0aXRsZSA9ICcnXFxuICAgICAgICBsZXQgdGl0bGVSdWxlID0gY2F0ZWdvcnkudGl0bGVSdWxlIHx8ICdhJiZUZXh0J1xcbiAgICAgICAgaWYgKHRpdGxlUnVsZS5zdGFydHNXaXRoKFxcXCJAanM6XFxcIikpIHtcXG4gICAgICAgICAgICB0aXRsZSA9IHRoaXMuZXZhbEpTUnVsZShzcmMsIHRpdGxlUnVsZSlcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgdGl0bGUgPSBwYXJzZURvbUZvckh0bWwoc3JjLCB0aXRsZVJ1bGUpXFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gdGl0bGUgfHwgXFxcIlxcXCI7XFxuICAgIH0sXFxuICAgIGdldFVybChzcmMsIGNhdGVnb3J5KSB7XFxuICAgICAgICBsZXQgdXJsID0gJydcXG4gICAgICAgIGxldCB1cmxSdWxlID0gY2F0ZWdvcnkudXJsUnVsZSB8fCAnYSYmaHJlZidcXG4gICAgICAgIGlmICh0eXBlb2YgdXJsUnVsZSA9PT0gJ29iamVjdCcpIHtcXG4gICAgICAgICAgICBsZXQgbVVybFJ1bGUgPSB1cmxSdWxlLnJ1bGUgfHwgdXJsUnVsZVsn6Kej5p6Q6KeE5YiZJ10gfHwgJ2EmJmhyZWYnO1xcbiAgICAgICAgICAgIGlmIChtVXJsUnVsZS5zdGFydHNXaXRoKFxcXCJAanM6XFxcIikpIHtcXG4gICAgICAgICAgICAgICAgdXJsID0gdGhpcy5ldmFsSlNSdWxlKHNyYywgbVVybFJ1bGUpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGxldCBwYXJzZSA9IHBhcnNlRG9tO1xcbiAgICAgICAgICAgICAgICBpZiAodXJsUnVsZS5wYXJzZU9wdGlvbikge1xcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh1cmxSdWxlLnBhcnNlT3B0aW9uKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwicGFyc2VEb21cXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcInBkXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2UgPSBwYXJzZURvbTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwicGFyc2VEb21Gb3JIdG1sXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJwZGZoXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2UgPSBwYXJzZURvbUZvckh0bWw7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlID0gcGFyc2VEb207XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodXJsUnVsZVtcXFwi6Kej5p6Q5pa55rOVXFxcIl0pIHtcXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodXJsUnVsZVtcXFwi6Kej5p6Q5pa55rOVXFxcIl0pIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJwYXJzZURvbVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwicGRcXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZSA9IHBhcnNlRG9tO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJwYXJzZURvbUZvckh0bWxcXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcInBkZmhcXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZSA9IHBhcnNlRG9tRm9ySHRtbDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2UgPSBwYXJzZURvbTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB1cmwgPSBwYXJzZShzcmMsIG1VcmxSdWxlKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKHVybFJ1bGUuZGVhbFVybCkge1xcbiAgICAgICAgICAgICAgICB1cmwgPSB1cmxSdWxlLmRlYWxVcmwodXJsKVxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodXJsUnVsZVsn5LqM5qyh5aSE55CGJ10pIHtcXG4gICAgICAgICAgICAgICAgdXJsID0gdXJsUnVsZVsn5LqM5qyh5aSE55CGJ10odXJsKVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgaWYgKHVybFJ1bGUuc3RhcnRzV2l0aChcXFwiQGpzOlxcXCIpKSB7XFxuICAgICAgICAgICAgICAgIHVybCA9IHRoaXMuZXZhbEpTUnVsZShzcmMsIHVybFJ1bGUpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHVybCA9IHBhcnNlRG9tKHNyYywgdXJsUnVsZSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIHVybCB8fCBcXFwiXFxcIjtcXG4gICAgfSxcXG4gICAgYnVpbGQoKSB7XFxuICAgICAgICAvLyDmo4DmtYvmmK/lkKbkvKDlhaXpnIDopoHnmoTlj4LmlbBcXG4gICAgICAgIHRoaXMuY2hlY2tQYXJhbXMoKVxcbiAgICAgICAgLy8g5q+P5LiA5Liq5YiG57G755qE5ZSv5LiA5qCH6K+GXFxuICAgICAgICBsZXQgbVRhZyA9IHRoaXNbc3ltYm9sTWFwLm1UYWddIHx8IFxcXCJcXFwiXFxuICAgICAgICAvL+e/u+mhtSDpnIDopoHmoLnmja7lrp7pmYXmm7/mjaJcXG4gICAgICAgIGNvbnN0IGh0bWwgPSB0aGlzW3N5bWJvbE1hcC5zcmNdIHx8IHJlcXVlc3QodGhpc1tzeW1ib2xNYXAudHJ1ZV91cmxdKVxcbiAgICAgICAgY29uc3QgZW1wdHkgPSBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgIC8v6I635Y+W5YiX6KGoXFxuICAgICAgICBjb25zdCBjYXRlZ29yaWVzID0gW11cXG4gICAgICAgIHRoaXNbc3ltYm9sTWFwLnJ1bGVPYmpMaXN0XS5tYXAocnVsZU9iaiA9PiB7XFxuICAgICAgICAgICAgbGV0IGxpc3QgPSBbXVxcbiAgICAgICAgICAgIGxldCBsaXN0UnVsZSA9IHJ1bGVPYmoubGlzdFJ1bGUgfHwgcnVsZU9ialtcXFwi5LiA57qn5YiG57G7XFxcIl1cXG4gICAgICAgICAgICBpZiAobGlzdFJ1bGUuc3RhcnRzV2l0aChcXFwiQGpzOlxcXCIpKSB7XFxuICAgICAgICAgICAgICAgIC8vIGxvZygkLnN0cmluZ2lmeShsaXN0UnVsZSkpXFxuICAgICAgICAgICAgICAgIGxpc3QgPSB0aGlzLmV2YWxKU1J1bGUoaHRtbCwgbGlzdFJ1bGUpXFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgbGlzdCA9IHBhcnNlRG9tRm9yQXJyYXkoaHRtbCwgbGlzdFJ1bGUpXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIC8vIGxvZyhsaXN0KVxcbiAgICAgICAgICAgIGxpc3QubWFwKGNhdGVnb3J5ID0+IHtcXG4gICAgICAgICAgICAgICAgY2F0ZWdvcmllcy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIGxpc3Q6IGNhdGVnb3J5LFxcbiAgICAgICAgICAgICAgICAgICAgc3ViTGlzdFJ1bGU6IHJ1bGVPYmouc3ViTGlzdFJ1bGUgfHwgcnVsZU9ialtcXFwi5a2Q5YiG57G7XFxcIl0sXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZVJ1bGU6IHJ1bGVPYmoudGl0bGVSdWxlIHx8IHJ1bGVPYmpbXFxcIuWIhuexu+agh+mimFxcXCJdLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsUnVsZTogcnVsZU9iai51cmxSdWxlIHx8IHJ1bGVPYmpbXFxcIuWIhuexu+mTvuaOpVxcXCJdLFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfSlcXG5cXG4gICAgICAgIC8vIGxvZygkLnN0cmluZ2lmeShjYXRlZ29yaWVzKSlcXG5cXG4gICAgICAgIGxldCBpbml0X2NhdGUgPSBbXVxcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XFxuICAgICAgICAgICAgaW5pdF9jYXRlLnB1c2goXFxcIjBcXFwiKVxcbiAgICAgICAgfVxcblxcbiAgICAgICAgY29uc3QgY2F0ZV90ZW1wX2pzb24gPSBnZXRNeVZhcihtVGFnICsgdGhpcy5WQVJNQVAuQ0FURUdPUlksIEpTT04uc3RyaW5naWZ5KGluaXRfY2F0ZSkpXFxuICAgICAgICBjb25zdCBjYXRlX3RlbXAgPSBKU09OLnBhcnNlKGNhdGVfdGVtcF9qc29uKVxcblxcbiAgICAgICAgaWYgKHRoaXNbc3ltYm9sTWFwLm1QYWdlXSA9PT0gMSkge1xcblxcbiAgICAgICAgICAgIGNhdGVnb3JpZXMuZm9yRWFjaCgoY2F0ZWdvcnksIGluZGV4KSA9PiB7XFxuXFxuICAgICAgICAgICAgICAgIC8vIOaKmOWPoCBVSVxcbiAgICAgICAgICAgICAgICBpZiAodGhpc1tzeW1ib2xNYXAubUZvbGRJbm5lckVuYWJsZV0gJiYgdGhpc1tzeW1ib2xNYXAubUZvbGRMYXlvdXRdLmluamVjdEluZGV4ID09PSAoaW5kZXgrMSkpIHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBmb2xkTGF5b3V0ID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aGlzW3N5bWJvbE1hcC5tRm9sZExheW91dF0udGl0bGUgfHwgKHRoaXNbc3ltYm9sTWFwLm1Gb2xkXSA9PT0gJzEnID8gJ+KAnOKAnOKAneKAnTxiPjxzcGFuIHN0eWxlPVxcXCJjb2xvcjogI0ZGMDAwMFxcXCI+4oioPC9zcGFuPjwvYj4nIDogJ+KAnOKAnOKAneKAnTxiPjxzcGFuIHN0eWxlPVxcXCJjb2xvcjogIzFhYWQxOVxcXCI+4oinPC9zcGFuPjwvYj4nKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHRoaXNbc3ltYm9sTWFwLm1Gb2xkTGF5b3V0XS51cmwgfHwgJChcXFwiaGlrZXI6Ly9lbXB0eSNub0hpc3RvcnkjXFxcIikubGF6eVJ1bGUoKHBhcmFtcykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihwYXJhbXMubVRhZyArIHBhcmFtcy5WQVJNQVAuRk9MRCwgZ2V0TXlWYXIocGFyYW1zLm1UYWcgKyBwYXJhbXMuVkFSTUFQLkZPTEQsIHBhcmFtcy5pc0ZvbGQpID09PSAnMScgPyAnMCcgOiAnMScpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRhZzogbVRhZyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNGb2xkOiB0aGlzW3N5bWJvbE1hcC5tRm9sZF0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZBUk1BUDogdGhpcy5WQVJNQVBcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogdGhpc1tzeW1ib2xNYXAubUZvbGRMYXlvdXRdLmNvbF90eXBlIHx8IFxcXCJzY3JvbGxfYnV0dG9uXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIHRoaXNbc3ltYm9sTWFwLm1MYXlvdXRdLnB1c2goZm9sZExheW91dClcXG4gICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICAgICAvL+WFt+S9k+WIl+ihqOS4i+eahOWIhuexu1xcbiAgICAgICAgICAgICAgICBsZXQgc3ViX2NhdGVnb3JpZXMgPSBbXTtcXG4gICAgICAgICAgICAgICAgaWYgKGNhdGVnb3J5LnN1Ykxpc3RSdWxlLnN0YXJ0c1dpdGgoXFxcIkBqczpcXFwiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgc3ViX2NhdGVnb3JpZXMgPSB0aGlzLmV2YWxKU1J1bGUoY2F0ZWdvcnkubGlzdCwgY2F0ZWdvcnkuc3ViTGlzdFJ1bGUpXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBzdWJfY2F0ZWdvcmllcyA9IHBhcnNlRG9tRm9yQXJyYXkoY2F0ZWdvcnkubGlzdCwgY2F0ZWdvcnkuc3ViTGlzdFJ1bGUpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA8ICh0aGlzW3N5bWJvbE1hcC5tRm9sZEluZGV4XSB8fCAxKSkge1xcbiAgICAgICAgICAgICAgICAgICAgc3ViX2NhdGVnb3JpZXMuZm9yRWFjaCgoaXRlbSwga2V5KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRpdGxlID0gdGhpcy5nZXRUaXRsZShpdGVtLCBjYXRlZ29yeSlcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdXJsID0gdGhpcy5nZXRVcmwoaXRlbSwgY2F0ZWdvcnkpXFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1tzeW1ib2xNYXAubUxheW91dF0ucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBrZXkudG9TdHJpbmcoKSA9PT0gY2F0ZV90ZW1wW2luZGV4XSA/ICfigJzigJzigJ3igJ08Yj48Zm9udCBjb2xvcj0nICsgdGhpc1tzeW1ib2xNYXAubUNvbG9yXSArICc+JyArIHRpdGxlICsgJyA8L2ZvbnQ+PC9iPicgOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKHVybCkubGF6eVJ1bGUoKHBhcmFtcykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5ld19jYXRlID0gW11cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbXMuaW5kZXggPT09IDApIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuY2F0ZV90ZW1wLmZvckVhY2goKGNhdGUsIGluZGV4KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19jYXRlLnB1c2goaW5kZXggPT09IDAgPyBwYXJhbXMua2V5LnRvU3RyaW5nKCkgOiBcXFwiMFxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5jYXRlX3RlbXBbcGFyYW1zLmluZGV4XSA9IHBhcmFtcy5rZXkudG9TdHJpbmcoKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIocGFyYW1zLnRhZyArIHBhcmFtcy5WQVJNQVAuQ0FURUdPUlksIEpTT04uc3RyaW5naWZ5KHBhcmFtcy5pbmRleCA9PT0gMCA/IG5ld19jYXRlIDogcGFyYW1zLmNhdGVfdGVtcCkpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihwYXJhbXMudGFnICsgcGFyYW1zLlZBUk1BUC5VUkwsIGlucHV0KVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSlcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZV90ZW1wOiBjYXRlX3RlbXAsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaW5kZXgsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWQVJNQVA6IHRoaXMuVkFSTUFQLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnOiBtVGFnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBrZXksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlOiB0aGlzW3N5bWJvbE1hcC5tUGFnZV0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgdGhpc1tzeW1ib2xNYXAubUxheW91dF0ucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJibGFua19ibG9ja1xcXCJcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXNbc3ltYm9sTWFwLm1Gb2xkXSA9PT0gJzAnKSB7XFxuICAgICAgICAgICAgICAgICAgICBzdWJfY2F0ZWdvcmllcy5mb3JFYWNoKChpdGVtLCBrZXkpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSB0aGlzLmdldFRpdGxlKGl0ZW0sIGNhdGVnb3J5KVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB1cmwgPSB0aGlzLmdldFVybChpdGVtLCBjYXRlZ29yeSlcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzW3N5bWJvbE1hcC5tTGF5b3V0XS5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGtleS50b1N0cmluZygpID09PSBjYXRlX3RlbXBbaW5kZXhdID8gJ+KAnOKAnOKAneKAnTxiPjxmb250IGNvbG9yPScgKyB0aGlzW3N5bWJvbE1hcC5tQ29sb3JdICsgJz4nICsgdGl0bGUgKyAnIDwvZm9udD48L2I+JyA6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQodXJsKS5sYXp5UnVsZSgocGFyYW1zKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuY2F0ZV90ZW1wW3BhcmFtcy5pbmRleF0gPSBwYXJhbXMua2V5LnRvU3RyaW5nKClcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKHBhcmFtcy50YWcgKyBwYXJhbXMuVkFSTUFQLkNBVEVHT1JZLCBKU09OLnN0cmluZ2lmeShwYXJhbXMuY2F0ZV90ZW1wKSlcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKHBhcmFtcy50YWcgKyBwYXJhbXMuVkFSTUFQLlVSTCwgaW5wdXQpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlX3RlbXA6IGNhdGVfdGVtcCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpbmRleCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZBUk1BUDogdGhpcy5WQVJNQVAsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWc6IG1UYWcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGtleSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2U6IHRoaXNbc3ltYm9sTWFwLm1QYWdlXSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICB0aGlzW3N5bWJvbE1hcC5tTGF5b3V0XS5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG4gICAgfSxcXG5cXG4gICAg55WM6Z2iKGxheW91dCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMubGF5b3V0KGxheW91dClcXG4gICAgfSxcXG4gICAg5YiG57G76ZO+5o6lKHRydWVVcmwpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLnRydWVVcmwodHJ1ZVVybCk7XFxuICAgIH0sXFxuICAgIOmhteeggShwYWdlKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5wYWdlKHBhZ2UpO1xcbiAgICB9LFxcbiAgICDmupDnoIEoaHRtbCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMuaHRtbChodG1sKTtcXG4gICAgfSxcXG4gICAg5a6a5L2N5LiA57qn5YiG57G7KGxpc3QpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLmxpc3QobGlzdCk7XFxuICAgIH0sXFxuICAgIOWumuS9jeWtkOWIhuexuyhzdWJMaXN0KSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5zdWJMaXN0KHN1Ykxpc3QpO1xcbiAgICB9LFxcbiAgICDlrprkvY3liIbnsbvmoIfpopgodGl0bGUpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLnRpdGxlKHRpdGxlKTtcXG4gICAgfSxcXG4gICAg5a6a5L2N5YiG57G76ZO+5o6lKHVybCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMudXJsKHVybCk7XFxuICAgIH0sXFxuICAgIOW8gOWQr+WGhee9ruaKmOWPoOWKn+iDvSgpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLmZvbGRJbm5lcih0cnVlKTtcXG4gICAgfSxcXG4gICAg5YWz6Zet5YaF572u5oqY5Y+g5Yqf6IO9KCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9sZElubmVyKGZhbHNlKTtcXG4gICAgfSxcXG4gICAg56ys5Yeg6KGM5byA5aeL5oqY5Y+gKGluZGV4KSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5mb2xkSW5kZXgoaW5kZXgpO1xcbiAgICB9LFxcbiAgICDmipjlj6DmjInpkq7moLflvI8obGF5b3V0KSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5mb2xkTGF5b3V0KGxheW91dClcXG4gICAgfSxcXG4gICAg5oqY5Y+gKGZvbGQpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLmZvbGQoZm9sZCk7XFxuICAgIH0sXFxuICAgIOmAieS4reeahOWIhuexu+minOiJsihjb2xvcikge1xcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sb3IoY29sb3IpO1xcbiAgICB9LFxcbiAgICDllK/kuIDmoIfor4YobVRhZykge1xcbiAgICAgICAgcmV0dXJuIHRoaXMudGFnKG1UYWcpXFxuICAgIH0sXFxuICAgIOa3u+WKoOWIhuexu+WumuS9jShydWxlT2JqKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5hZGQocnVsZU9iaik7XFxuICAgIH0sXFxuICAgIOW8gOWni+aJk+mAoOWIhuexuygpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLmJ1aWxkKCk7XFxuICAgIH0sXFxuXFxufSlcXG4kLmV4cG9ydHMgPSBuZXcgQ2F0ZWdvcmllc0hlYWRlcigpO1xcbiQuZXhwb3J0c1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6ZO+5o6l5aSE55CGW+S6jF0qXCIsXCJwYXRoXCI6XCJ1cmwtcHJvY2Vzc29yXCIsXCJydWxlXCI6XCIvKipcXG4gKiDmnKzlnLDnvZHpobXmj5Lku7bpk77mjqUgaGlrZXI6Ly9maWxlcy9ydWxlcy9qcy9VcmxQcm9jZXNzb3IuanNcXG4gKiDlrZDpobXpnaLpk77mjqUgaGlrZXI6Ly9wYWdlL3VybC1wcm9jZXNzb3JcXG4gKiDpgZPplb/ku5PlupPpk77mjqUgaHR0cDovL2hpa2VyLm5va2lhLnByZXNzL2hpa2VydWxlL3J1bGVsaXN0Lmpzb24/aWQ9Mjg0OVxcbiAqIOeggeS6kSBHaXRlZSDpk77mjqUgaHR0cHM6Ly9naXRlZS5jb20vcmVib3JuMC9IaWtlclJ1bGVzL3Jhdy9tYXN0ZXIvcGx1Z2lucy9VcmxQcm9jZXNzb3IuanNcXG4gKi9cXG5mdW5jdGlvbiBVcmxQcm9jZXNzb3IoKSB7XFxuICAgIHRoaXMucGFyYW1zID0ge31cXG4gICAgdGhpcy5yZWdleE1hcCA9IFtcXG4gICAgICAgIHtcXG4gICAgICAgICAgICByZWc6ICcodm9kdHlwZXx2aWRlb3QpXFxcXFxcXFwvXFxcXFxcXFx3KycsXFxuICAgICAgICAgICAgZXhlYzogKCkgPT4ge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJhbXMudXJsXFxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvLVxcXFxkKy5odG1sLywgJy0nICsgdGhpcy5wYXJhbXMucGFnZSArICcuaHRtbCcpXFxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvKCh2b2R0eXBlfHZpZGVvdClcXFxcL1xcXFx3KykuaHRtbC8sICckMS0nICsgdGhpcy5wYXJhbXMucGFnZSArICcuaHRtbCcpXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICByZWc6ICdcXFxcXFxcXC8/W1xcXFxcXFxcd1xcXFxcXFxcZF0rLS4qPy0uKj8tLio/LS4qPy0uKj8tLio/LS4qPy1cXFxcXFxcXGQqLS0tXFxcXFxcXFxkKi5odG1sJyxcXG4gICAgICAgICAgICBleGVjOiAoKSA9PiB7XFxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmFtcy51cmxcXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXFxcZCooLS0tLmh0bWwpLywgdGhpcy5wYXJhbXMucGFnZSArICckMScpXFxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvKC0tLVxcXFxkKy5odG1sKS8sIHRoaXMucGFyYW1zLnBhZ2UgKyAnJDEnKTsgLy8g5ou85o6l6aG156CBXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICByZWc6ICcoKFxcXFxcXFxcL3ZvZFxcXFxcXFxcL3Nob3cpPyhcXFxcXFxcXC9hcmVhXFxcXFxcXFwvW1xcXFxcXFxcd1xcXFxcXFxcZCVdKyk/KFxcXFxcXFxcL2J5XFxcXFxcXFwvW1xcXFxcXFxcd1xcXFxcXFxcZCVdKyk/KFxcXFxcXFxcL2lkXFxcXFxcXFwvXFxcXFxcXFxkKyk/KFxcXFxcXFxcL2xldHRlclxcXFxcXFxcL1tcXFxcXFxcXHdcXFxcXFxcXGQlXSspPykoXFxcXFxcXFwvcGFnZVxcXFxcXFxcL1xcXFxcXFxcZCspPyhcXFxcXFxcXC95ZWFyXFxcXFxcXFwvXFxcXFxcXFxkKyk/XFxcXFxcXFwuaHRtbCcsXFxuICAgICAgICAgICAgZXhlYzogKCkgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgcmVnRXhwID0gLygoXFxcXC92b2RcXFxcL3Nob3cpPyhcXFxcL2FyZWFcXFxcL1tcXFxcd1xcXFxkJV0rKT8oXFxcXC9ieVxcXFwvW1xcXFx3XFxcXGQlXSspPyhcXFxcL2lkXFxcXC9cXFxcZCspPyhcXFxcL2xldHRlclxcXFwvW1xcXFx3XFxcXGQlXSspPykoXFxcXC9wYWdlXFxcXC9cXFxcZCspPyhcXFxcL3llYXJcXFxcL1xcXFxkKyk/XFxcXC5odG1sL1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJhbXMudXJsXFxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShyZWdFeHAsICckMScgKyAoXFxcIi9wYWdlL1xcXCIgKyB0aGlzLnBhcmFtcy5wYWdlKSArICckOCcgKyBcXFwiLmh0bWxcXFwiKVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgXVxcbn1cXG5cXG5PYmplY3QuYXNzaWduKFVybFByb2Nlc3Nvci5wcm90b3R5cGUsIHtcXG4gICAgY29uc3RydWN0b3I6IFVybFByb2Nlc3NvcixcXG4gICAgY2hlY2tQYXJhbXMoKSB7XFxuICAgICAgICBpZiAoIXRoaXMucGFyYW1zLnVybCkge1xcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi6K+35YWI6LCD55SoIC5iYXNlVXJsKHVybCkg5Lyg5YWl6ZO+5o6l6L+b6KGM5Yid5aeL5YyWIVxcXCIpXFxuICAgICAgICB9XFxuICAgICAgICBpZiAoIXRoaXMucGFyYW1zLnBhZ2UpIHtcXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuivt+WFiOiwg+eUqCAucGFnZShwYWdlKSDkvKDlhaXpobXnoIHov5vooYzliJ3lp4vljJYhXFxcIilcXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAgYmFzZVVybCh1cmwpe1xcbiAgICAgICAgdGhpcy5wYXJhbXMudXJsID0gdXJsXFxuICAgICAgICByZXR1cm4gdGhpc1xcbiAgICB9LFxcbiAgICBwYWdlKHBhZ2Upe1xcbiAgICAgICAgdGhpcy5wYXJhbXMucGFnZSA9IHBhZ2VcXG4gICAgICAgIHJldHVybiB0aGlzXFxuICAgIH0sXFxuICAgIGFkZEV4dHJhKHJlZ0V4cCkge1xcbiAgICAgICAgaWYgKHJlZ0V4cC5jb25zdHJ1Y3RvciA9PT0gQXJyYXkpIHtcXG4gICAgICAgICAgICB0aGlzLnJlZ2V4TWFwID0gdGhpcy5yZWdleE1hcC5jb25jYXQocmVnRXhwKVxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICB0aGlzLnJlZ2V4TWFwLnB1c2gocmVnRXhwKVxcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgIH0sXFxuICAgIGRlYnVnKCkge1xcbiAgICAgICAgdGhpcy5wYXJhbXMuZGVidWcgPSB0cnVlXFxuICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgfSxcXG4gICAgZXhlYygpIHtcXG4gICAgICAgIHRoaXMuY2hlY2tQYXJhbXMoKVxcbiAgICAgICAgbGV0IHRydWVfdXJsID0gJydcXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yZWdleE1hcC5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgIGxldCByZWdPYmogPSB0aGlzLnJlZ2V4TWFwW2ldO1xcbiAgICAgICAgICAgIGxldCB1cmxFeHAgPSByZWdPYmoucmVnO1xcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdXJsRXhwID09PSAnc3RyaW5nJykge1xcbiAgICAgICAgICAgICAgICB1cmxFeHAgPSBuZXcgUmVnRXhwKHVybEV4cClcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKHVybEV4cC50ZXN0KHRoaXMucGFyYW1zLnVybCkpIHtcXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGFyYW1zLmRlYnVnKSB7XFxuICAgICAgICAgICAgICAgICAgICBsb2codXJsRXhwLnRvU3RyaW5nKCkpXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgdHJ1ZV91cmwgPSByZWdPYmouZXhlYygpO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICBpZiAodHJ1ZV91cmwpIHtcXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZV91cmw7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmFtcy51cmxcXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAg6I635Y+W5aSE55CG57uT5p6cKCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhlYygpXFxuICAgIH0sXFxuICAgIOmTvuaOpSh1cmwpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VVcmwodXJsKVxcbiAgICB9LFxcbiAgICDpobXnoIEocGFnZSkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMucGFnZShwYWdlKVxcbiAgICB9LFxcbiAgICDmj5LlhaXmlrDlpITnkIbop4TliJkocmVnRXhwKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5hZGRFeHRyYShyZWdFeHApXFxuICAgIH0sXFxuICAgIOiwg+ivleaooeW8jygpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLmRlYnVnKCk7XFxuICAgIH1cXG59KVxcbiQuZXhwb3J0cz1uZXcgVXJsUHJvY2Vzc29yKClcXG4kLmV4cG9ydHNcXG5cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuS4gOe6pypcIixcInBhdGhcIjpcInlqdG9vbFwiLFwicnVsZVwiOlwiZnVuY3Rpb24gY29udmVydDEoc3RyKSB7XFxuICAgIGxldCBjID0gc3RyLnNwbGl0KFxcXCI7XFxcIilcXG4gICAgcmV0dXJuIHtcXG4gICAgICAgIOWIl+ihqDogY1swXSxcXG4gICAgICAgIOagh+mimDogY1sxXSxcXG4gICAgICAgIOWbvueJhzogY1syXSxcXG4gICAgICAgIOaPj+i/sDogY1szXSxcXG4gICAgICAgIOmTvuaOpTogY1s0XVxcbiAgICB9XFxufVxcblxcbmZ1bmN0aW9uIG1lcmdlKHNvdXJjZSwgdGFyZ2V0KSB7XFxuICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMoc291cmNlKVxcbiAgICBmb3IgKGxldCBpIGluIGtleXMpIHtcXG4gICAgICAgIHRhcmdldFtrZXlzW2ldXSA9IHNvdXJjZVtrZXlzW2ldXVxcbiAgICB9XFxufVxcblxcbmZ1bmN0aW9uIOS4gOe6pyhvYmopIHtcXG4gICAgdmFyIGQgPSBbXTtcXG4gICAgaWYgKCQudHlwZShvYmopID09IFxcXCJzdHJpbmdcXFwiKSB7XFxuICAgICAgICBvYmogPSBjb252ZXJ0MShvYmopXFxuICAgIH1cXG4gICAgaWYgKG9iai7op4TliJkpIHtcXG4gICAgICAgIGxldCBjID0gY29udmVydDEob2JqLuinhOWImSlcXG4gICAgICAgIG1lcmdlKGMsIG9iailcXG4gICAgfVxcbiAgICBsZXQgYXJyID0gcGRmYShnZXRSZXNDb2RlKCksIG9iai7liJfooagpO1xcbiAgICAgICBpZiAob2JqLuWIl+ihqOWkhOeQhiAhPSBudWxsKSB7XFxuICAgICAgICAgICAgYXJyID0gb2JqLumTvuaOpeWkhOeQhihhcnIpXFxuICAgICAgICB9XFxuICAgIGZvciAobGV0IGl0IG9mIGFycikge1xcbiAgICAgICAgbGV0IHVybCA9IHBkKGl0LCBvYmou6ZO+5o6lKVxcbiAgICAgICAgaWYgKG9iai7pk77mjqXlpITnkIYgIT0gbnVsbCkge1xcbiAgICAgICAgICAgIHVybCA9IG9iai7pk77mjqXlpITnkIYodXJsKVxcbiAgICAgICAgfVxcbiAgICAgICAgbGV0IHRpdGxlID0gcGRmaChpdCwgb2JqLuagh+mimClcXG4gICAgICAgIGlmIChvYmou5qCH6aKY5aSE55CGICE9IG51bGwpIHtcXG4gICAgICAgICAgICB0aXRsZSA9IG9iai7moIfpopjlpITnkIYodGl0bGUpXFxuICAgICAgICB9XFxuICAgICAgICBsZXQgcGljID0gcGQoaXQsIG9iai7lm77niYcpXFxuICAgICAgICBpZiAob2JqLuWbvueJh+WkhOeQhiAhPSBudWxsKSB7XFxuICAgICAgICAgICAgcGljID0gb2JqLuWbvueJh+WkhOeQhihwaWMpXFxuICAgICAgICB9XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBvYmou5qCH6aKYID8gcGRmaChpdCwgb2JqLuagh+mimCkgOiBcXFwiXFxcIixcXG4gICAgICAgICAgICB1cmw6IHVybCsnI2F1dG9DYWNoZSMnLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiXFxcIixcXG4gICAgICAgICAgICBkZXNjOiBvYmou5o+P6L+wID8gcGRmaChpdCwgb2JqLuaPj+i/sCkgOiBcXFwiXFxcIixcXG4gICAgICAgICAgICBwaWNfdXJsOiBwaWMsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgeXRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgeXBpYzogcGljLFxcbiAgICAgICAgICAgICAgICB5dXJsOiB1cmwucmVwbGFjZSgnaGlrZXI6Ly9lbXB0eSMjJywnJylcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG5cXG4gICAgfVxcbiAgICBzZXRSZXN1bHQoZCk7XFxufVxcbnZhciB0b29sID0ge1xcbiAgICDkuIDnuqc6IOS4gOe6p1xcbn1cXG4kLmV4cG9ydHMgPSB0b29sXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLkuIDnuqdb5LqMXSpcIixcInBhdGhcIjpcInlpamlcIixcInJ1bGVcIjpcImZ1bmN0aW9uIOS4gOe6pygpIHt9O1xcclxcbk9iamVjdC5hc3NpZ24o5LiA57qnLnByb3RvdHlwZSwge1xcclxcblxcdGNvbnN0cnVjdG9yOiDkuIDnuqcsXFxyXFxuXFx0dGVzdCgpIHt9LFxcclxcblxcdOiOt+WPlua6kOeggSh1cmwsIGhlYWRlcikge3JldHVybiBmZXRjaCh0cnVlX3VybCwge2hlYWRlcnM6IGhlYWRlciB8fCB7J1VzZXItQWdlbnQnOiBQQ19VQX19KSB9LC8vIOm7mOiupOe7n+S4gOS9v+eUqE1PQklMRV9VQVxcclxcblxcdOaQnOe0ouahhuaetihwYWdlKSB7XFxyXFxuXFx0XFx0aWYgKHBhZ2UgPT0gJzEnKSB7XFxuLypcXHJcXG5cXHRcXHRcXHRkLnB1c2goe1xcclxcblxcdFxcdFxcdFxcdHRpdGxlOiBcXFwi5pCc57Si5pys6KeE5YiZXFxcIixcXHJcXG5cXHRcXHRcXHRcXHR1cmw6IFxcXCInaGlrZXI6Ly9zZWFyY2g/cnVsZT1cXFwiICsgTVlfUlVMRS50aXRsZSArIFxcXCImcz0nK2lucHV0XFxcIixcXHJcXG5cXHRcXHRcXHRcXHRkZXNjOiBcXFwiIFxcXCIsXFxyXFxuXFx0XFx0XFx0XFx0Y29sX3R5cGU6IFxcXCJpbnB1dFxcXCJcXHJcXG5cXHRcXHRcXHR9KTtcXG4qL1xcclxcblxcdFxcdH1cXHJcXG5cXHR9LFxcclxcblxcdOiOt+WPlumTvuaOpShwYWdlLCByZWdleCkge1xcclxcblxcdFxcdGxldCB0cnVlX3VybCA9IGdldE15VmFyKCdoZWFkZXIudXJsJywgTVlfVVJMKTtcXHJcXG5cXHRcXHQvL2xldCDpk77mjqXlpITnkIblt6XlhbcgPSByZXF1aXJlQ2FjaGUoY29uZmlnLumTvuaOpeWkhOeQhuW3peWFt+S+nei1lilcXHJcXG5cXHRcXHQvL2xldCDpk77mjqXlpITnkIblt6XlhbcgPSByZXF1aXJlQ2FjaGUoJ2h0dHA6Ly9oaWtlci5ub2tpYS5wcmVzcy9oaWtlcnVsZS9ydWxlbGlzdC5qc29uP2lkPTI4NDknKVxcclxcblxcdFxcdC8vbGV0IOmTvuaOpeWkhOeQhuW3peWFtyA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL3VybC1wcm9jZXNzb3InKVxcclxcblxcdFxcdGxldCDpk77mjqXlpITnkIblt6XlhbcgPSByZXF1aXJlQ2FjaGUoJ2h0dHA6Ly9oaWtlci5ub2tpYS5wcmVzcy9oaWtlcnVsZS9ydWxlbGlzdC5qc29uP2lkPTI4NDknKVxcclxcblxcdFxcdHRydWVfdXJsID0g6ZO+5o6l5aSE55CG5bel5YW3XFxyXFxuXFx0XFx0XFx0LumTvuaOpSh0cnVlX3VybClcXHJcXG5cXHRcXHRcXHQu6aG156CBKHBhZ2UpXFxyXFxuXFx0XFx0XFx0LuaPkuWFpeaWsOWkhOeQhuinhOWImShyZWdleCB8fCBbXSlcXHJcXG5cXHRcXHRcXHQu6I635Y+W5aSE55CG57uT5p6cKCk7XFxyXFxuXFx0XFx0cmV0dXJuIHRydWVfdXJsO1xcclxcblxcdH0sXFxyXFxuXFx05omT6YCg5YiG57G7KHJ1bGVMaXN0KSB7XFxyXFxuXFx0XFx0Ly8gIGxldCBodG1sQ2F0ZWdvcmllcyA9IHJlcXVpcmVDYWNoZShjb25maWcu5Yqo5oCB5YiG57G75L6d6LWWKVxcclxcblxcdFxcdC8vbGV0IGh0bWxDYXRlZ29yaWVzID0gcmVxdWlyZUNhY2hlKCdodHRwOi8vaGlrZXIubm9raWEucHJlc3MvaGlrZXJ1bGUvcnVsZWxpc3QuanNvbj9pZD0yNzA1JylcXHJcXG5cXHRcXHRpZiAoIXJ1bGVMaXN0KSB7XFxyXFxuXFx0XFx0XFx0bGV0IOWIhuexu+WumuS9jSA9IFt7XFxyXFxuXFx0XFx0XFx0XFx0XFx05LiA57qn5YiG57G7OiDkuIDnuqflrprkvY1BLFxcclxcblxcdFxcdFxcdFxcdFxcdOWtkOWIhuexuzog57uf5LiA5a6a5L2NQiB8fCDkuIDnuqflrprkvY1CLFxcclxcblxcdFxcdFxcdFxcdFxcdOWIhuexu+mTvuaOpToge+S6jOasoeWkhOeQhih1cmwpIHt0cnkge3JldHVybiDkuIDnuqflpITnkIZDKHVybCl9IGNhdGNoIChlKSB7cmV0dXJuIHVybH19fVxcclxcblxcdFxcdFxcdH1dXFxyXFxuXFx0XFx0XFx0aWYgKOS6jOe6p+WumuS9jUEgJiYgKOe7n+S4gOWumuS9jUIgfHwg5LqM57qn5a6a5L2NQikpIHtcXHJcXG5cXHRcXHRcXHRcXHTliIbnsbvlrprkvY0ucHVzaCh7XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx05LiA57qn5YiG57G7OiDkuoznuqflrprkvY1BLFxcclxcblxcdFxcdFxcdFxcdFxcdFxcdOWtkOWIhuexuzog57uf5LiA5a6a5L2NQiB8fCDkuoznuqflrprkvY1CLFxcclxcblxcdFxcdFxcdFxcdFxcdFxcdOWIhuexu+mTvuaOpToge+S6jOasoeWkhOeQhih1cmwpIHt0cnkge3JldHVybiDkuoznuqflpITnkIZDKHVybCl9IGNhdGNoIChlKSB7cmV0dXJuIHVybH19fVxcclxcblxcdFxcdFxcdFxcdH0pXFxyXFxuXFx0XFx0XFx0fVxcclxcblxcdFxcdFxcdGlmICjkuInnuqflrprkvY1BICYmICjnu5/kuIDlrprkvY1CIHx8IOS4iee6p+WumuS9jUIpKSB7XFxyXFxuXFx0XFx0XFx0XFx05YiG57G75a6a5L2NLnB1c2goe1xcclxcblxcdFxcdFxcdFxcdFxcdFxcdOS4gOe6p+WIhuexuzog5LiJ57qn5a6a5L2NQSxcXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHTlrZDliIbnsbs6IOe7n+S4gOWumuS9jUIgfHwg5LiJ57qn5a6a5L2NQixcXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHTliIbnsbvpk77mjqU6IHvkuozmrKHlpITnkIYodXJsKSB7dHJ5IHtyZXR1cm4g5LiJ57qn5aSE55CGQyh1cmwpfSBjYXRjaCAoZSkge3JldHVybiB1cmx9fX1cXHJcXG5cXHRcXHRcXHRcXHR9KVxcclxcblxcdFxcdFxcdH1cXHJcXG5cXHRcXHRcXHRpZiAo5Zub57qn5a6a5L2NQSAmJiAo57uf5LiA5a6a5L2NQiB8fCDlm5vnuqflrprkvY1CKSkge1xcclxcblxcdFxcdFxcdFxcdOWIhuexu+WumuS9jS5wdXNoKHtcXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHTkuIDnuqfliIbnsbs6IOWbm+e6p+WumuS9jUEsXFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx05a2Q5YiG57G7OiDnu5/kuIDlrprkvY1CIHx8IOWbm+e6p+WumuS9jUIsXFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx05YiG57G76ZO+5o6lOiB75LqM5qyh5aSE55CGKHVybCkge3RyeSB7cmV0dXJuIOWbm+e6p+WkhOeQhkModXJsKX0gY2F0Y2ggKGUpIHtyZXR1cm4gdXJsfX19XFxyXFxuXFx0XFx0XFx0XFx0fSlcXHJcXG5cXHRcXHRcXHR9XFxyXFxuXFx0XFx0XFx0cnVsZUxpc3QgPSDliIbnsbvlrprkvY07XFxyXFxuXFx0XFx0fVxcclxcblxcdFxcdC8vICcwJyDkuLrpu5jorqTkuI3mipjlj6DvvIwnMScg5Li66buY6K6k5oqY5Y+gXFxyXFxuXFx0XFx0Y29uc3Qg5b2T5YmN5oqY5Y+g54q25oCBID0gZ2V0TXlWYXIoJ2hlYWRlci5mb2xkJywgJzAnKVxcclxcblxcdFxcdC8vIOW8leWFpeWKqOaAgeWIhuexu+S+nei1llxcclxcblxcdFxcdGxldCBodG1sQ2F0ZWdvcmllcyA9IHJlcXVpcmVDYWNoZSgnaHR0cDovL2hpa2VyLm5va2lhLnByZXNzL2hpa2VydWxlL3J1bGVsaXN0Lmpzb24/aWQ9MjcwNScpXFxyXFxuXFx0XFx0dmFyIGdldFJhbmdlQ29sb3JzID0gZnVuY3Rpb24oKSB7XFxyXFxuXFx0XFx0XFx0cmV0dXJuICcjJyArICgnMDAwMDAnICsgKE1hdGgucmFuZG9tKCkgKiAweDEwMDAwMDAgPDwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xcclxcblxcdFxcdH0gLy8g6ZqP5py66YCJ5Lit55qE5YiG57G76aKc6ImyXFxyXFxuXFx0XFx0dmFyIGNvbG91cjtcXHJcXG5cXHRcXHRpZiAo5YiG57G76aKc6ImyICE9PSAnJykge1xcclxcblxcdFxcdFxcdGNvbG91ciA9IOWIhuexu+minOiJslxcclxcblxcdFxcdH0gZWxzZSB7XFxyXFxuXFx0XFx0XFx0Y29sb3VyID0gZ2V0UmFuZ2VDb2xvcnMoKVxcclxcblxcdFxcdH1cXHJcXG5cXHRcXHRodG1sQ2F0ZWdvcmllcy7nlYzpnaIoZClcXHJcXG5cXHRcXHRcXHQvLy7liIbnsbvpk77mjqUodHJ1ZV91cmwpXFxyXFxuXFx0XFx0XFx0Lua6kOeggShodG1sKVxcclxcblxcdFxcdFxcdC7pobXnoIEocGFnZSlcXHJcXG5cXHRcXHRcXHQu5re75Yqg5YiG57G75a6a5L2NKHJ1bGVMaXN0KVxcclxcblxcdFxcdFxcdC7lvIDlkK/lhoXnva7mipjlj6Dlip/og70oKSAvLyDlv4XpobtcXHJcXG5cXHRcXHRcXHQu5oqY5Y+gKOW9k+WJjeaKmOWPoOeKtuaAgSkgLy8g5b+F6aG7XFxyXFxuXFx0XFx0XFx0LuaKmOWPoOaMiemSruagt+W8jyh7XFxyXFxuXFx0XFx0XFx0XFx0dGl0bGU6IOW9k+WJjeaKmOWPoOeKtuaAgSA9PSBcXFwiMVxcXCIgPyBcXFwi4oCc4oCc4oCd4oCdPGJpZz48Yj48Zm9udCBjb2xvcj0nIzU5NTlBQic+XFxcIiArIOWKqOaAgee8qeWwjyArIFxcXCI8L2ZvbnQ+PC9iPjwvYmlnPlxcXCIgOiBcXFwi4oCc4oCc4oCd4oCdPGJpZz48Yj48Zm9udCBjb2xvcj0nI0Y3NUQ1OSc+XFxcIiArIOWKqOaAgeaJqeWxlSArIFxcXCI8L2ZvbnQ+PC9iPjwvYmlnPlxcXCJcXHJcXG5cXHRcXHRcXHR9KSAvLyDlj6/pgIlcXHJcXG5cXHRcXHRcXHQvLyAu56ys5Yeg6KGM5byA5aeL5oqY5Y+gKDIpIC8vIOWPr+mAiVxcclxcblxcdFxcdFxcdC8vIC7mipjlj6DmjInpkq7moLflvI8oeyDmipjlj6DmjInpkq7mj5LlhaXooYw6IDIgfSkgIC8vIOWPr+mAie+8jOS9huW/hemhu+WFiOiwg+eUqCAu56ys5Yeg6KGM5byA5aeL5oqY5Y+gKGluZGV4Ke+8jOeEtuWQjuWGjeS8oOWFpSB7IOaKmOWPoOaMiemSruaPkuWFpeihjDogaW5kZXggfVxcclxcblxcdFxcdFxcdC7pgInkuK3nmoTliIbnsbvpopzoibIoY29sb3VyKVxcclxcblxcdFxcdFxcdC7lvIDlp4vmiZPpgKDliIbnsbsoKTtcXHJcXG5cXHR9LFxcclxcblxcclxcblxcdOeUn+aIkOeJh+WNlShkLGh0bWwpIHtcXHJcXG5cXHJcXG5cXHRcXHR2YXIg5YiX6KGoXFxyXFxuXFx0XFx0dmFyIOagh+mimFxcclxcblxcdFxcdHZhciDmj4/ov7BcXHJcXG5cXHRcXHR2YXIg5Zu+54mHXFxyXFxuXFx0XFx0dmFyIOmTvuaOpVxcclxcblxcclxcblxcdFxcdGlmICjmoYbmnrbnsbvlnosgPT09ICdteXVpLXZvZGxpc3QnKSB7XFxyXFxuXFx0XFx0XFx05YiX6KGoID0gJy5teXVpLXZvZGxpc3QmJmxpJztcXHJcXG5cXHRcXHRcXHTmoIfpopggPSAnaDQmJlRleHQnO1xcclxcblxcdFxcdFxcdOaPj+i/sCA9ICcucGljLXRhZ3x8LnBpYy10ZXh0JiZUZXh0JztcXHJcXG5cXHRcXHRcXHTlm77niYcgPSAnLmxhenlsb2FkJiZkYXRhLW9yaWdpbmFsJztcXHJcXG5cXHRcXHRcXHTpk77mjqUgPSAnYSYmaHJlZic7XFxyXFxuXFx0XFx0XFx0Ly9sb2coJ+ahhuaetuexu+Wei8K3bXl1aS12b2RsaXN0JylcXHJcXG5cXHRcXHR9IGVsc2UgaWYgKOahhuaetuexu+WeiyA9PT0gJyNkYXRhX2xpc3QnKSB7XFxyXFxuXFx0XFx0XFx05YiX6KGoID0gJyNkYXRhX2xpc3QmJmxpJztcXHJcXG5cXHRcXHRcXHTmoIfpopggPSAnYSYmdGl0bGUnO1xcclxcblxcdFxcdFxcdOaPj+i/sCA9ICdlbSYmVGV4dCc7XFxyXFxuXFx0XFx0XFx05Zu+54mHID0gJ2ltZyYmZGF0YS1zcmNsJztcXHJcXG5cXHRcXHRcXHTpk77mjqUgPSAnYSYmaHJlZic7XFxyXFxuXFx0XFx0XFx0Ly9sb2coJ+ahhuaetuexu+Wei8K3ZGF0YV9saXN0JylcXHJcXG5cXHRcXHR9IGVsc2UgaWYgKOahhuaetuexu+WeiyA9PT0gJ2ZlZC1saXN0LXRpdGxlJykge1xcclxcblxcdFxcdFxcdOWIl+ihqCA9ICcuZmVkLWxpc3QtaW5mbyYmbGknO1xcclxcblxcdFxcdFxcdOagh+mimCA9ICcuZmVkLWxpc3QtdGl0bGUmJlRleHQnO1xcclxcblxcdFxcdFxcdOaPj+i/sCA9ICcuZmVkLXRleHQtY2VudGVyJiZUZXh0JztcXHJcXG5cXHRcXHRcXHTlm77niYcgPSAnYSYmZGF0YS1vcmlnaW5hbCc7XFxyXFxuXFx0XFx0XFx06ZO+5o6lID0gJ2EmJmhyZWYnO1xcclxcblxcdFxcdFxcdC8vbG9nKCfmoYbmnrbnsbvlnovCty5mZWQtbGlzdC1pbmZvJylcXHJcXG5cXHRcXHR9IGVsc2UgaWYgKOahhuaetuexu+WeiyA9PT0gJ2l0ZW0nKSB7XFxyXFxuXFx0XFx0XFx05YiX6KGoID0gJ2JvZHkmJi5pdGVtJztcXHJcXG5cXHRcXHRcXHTmoIfpopggPSAnaW1nJiZhbHQnO1xcclxcblxcdFxcdFxcdOaPj+i/sCA9ICdwJiZUZXh0JztcXHJcXG5cXHRcXHRcXHTlm77niYcgPSAnaW1nJiZzcmNsJztcXHJcXG5cXHRcXHRcXHTpk77mjqUgPSAnYSYmaHJlZic7XFxyXFxuXFx0XFx0fSBlbHNlIGlmICjmoYbmnrbnsbvlnosgPT09ICdtb2R1bGUtaXRlbXMnKSB7XFxyXFxuXFx0XFx0XFx05YiX6KGoID0gJy5tb2R1bGUtaXRlbXMmJi5tb2R1bGUtaXRlbSc7XFxyXFxuXFx0XFx0XFx05qCH6aKYID0gJ2EmJnRpdGxlJztcXHJcXG5cXHRcXHRcXHTmj4/ov7AgPSAnLm1vZHVsZS1pdGVtLXRleHQmJlRleHQnO1xcclxcblxcdFxcdFxcdOWbvueJhyA9ICdpbWd8fC5sYXp5JiZkYXRhLXNyYyc7XFxyXFxuXFx0XFx0XFx06ZO+5o6lID0gJ2EmJmhyZWYnO1xcclxcblxcdFxcdH0gZWxzZSBpZiAo5qGG5p6257G75Z6LID09PSAncGFjay15a3BhY2snKSB7XFxyXFxuXFx0XFx0XFx05YiX6KGoID0gJ2JvZHkmJi5wYWNrLXlrcGFjayc7XFxyXFxuXFx0XFx0XFx05qCH6aKYID0gJ2EmJnRpdGxlJztcXHJcXG5cXHRcXHRcXHTmj4/ov7AgPSAnc3BhbiwtMSYmVGV4dCc7XFxyXFxuXFx0XFx0XFx05Zu+54mHID0gJy5lY2xhenkmJmRhdGEtb3JpZ2luYWwnO1xcclxcblxcdFxcdFxcdOmTvuaOpSA9ICdhJiZocmVmJztcXHJcXG5cXHRcXHR9IGVsc2UgaWYgKOahhuaetuexu+WeiyA9PT0gJ3N0dWktdm9kbGlzdCcpIHtcXHJcXG5cXHRcXHRcXHTliJfooaggPSAnLnN0dWktdm9kbGlzdCYmbGknO1xcclxcblxcdFxcdFxcdOagh+mimCA9ICdhJiZ0aXRsZSc7XFxyXFxuXFx0XFx0XFx05o+P6L+wID0gJy5waWMtdGV4dCYmVGV4dCc7XFxyXFxuXFx0XFx0XFx05Zu+54mHID0gJy5sYXp5bG9hZHx8YSYmZGF0YS1vcmlnaW5hbCc7XFxyXFxuXFx0XFx0XFx06ZO+5o6lID0gJ2EmJmhyZWYnO1xcclxcblxcdFxcdH0gZWxzZSBpZiAo5qGG5p6257G75Z6LID09PSAndm9kbGlzdCcpIHtcXHJcXG5cXHRcXHRcXHTliJfooaggPSAnLnZvZGxpc3QmJmxpJztcXHJcXG5cXHRcXHRcXHTmoIfpopggPSAnYSYmdGl0bGUnO1xcclxcblxcdFxcdFxcdOaPj+i/sCA9ICdhJiZUZXh0JztcXHJcXG5cXHRcXHRcXHTlm77niYcgPSAnLmxhenlsb2FkJiZkYXRhLW9yaWdpbmFsJztcXHJcXG5cXHRcXHRcXHTpk77mjqUgPSAnYSYmaHJlZic7XFxyXFxuXFx0XFx0fSBlbHNlIGlmICjmoYbmnrbnsbvlnosgPT09ICfmtYvor5UnKSB7XFxyXFxuXFx0XFx0XFx05YiX6KGoID0gJ2JvZHkmJmEnO1xcclxcblxcdFxcdFxcdOagh+mimCA9ICdib2R5JiZhJztcXHJcXG5cXHRcXHRcXHTmj4/ov7AgPSAnYm9keSYmYSc7XFxyXFxuXFx0XFx0XFx05Zu+54mHID0gJ2JvZHkmJmEnO1xcclxcblxcdFxcdFxcdOmTvuaOpSA9ICdib2R5JiZhJztcXHJcXG5cXHRcXHR9IGVsc2UgaWYgKOahhuaetuexu+WeiyA9PT0gJycpIHtcXHJcXG5cXHRcXHRcXHTliJfooaggPSDmoYbmnrbliJfooag7XFxyXFxuXFx0XFx0XFx05qCH6aKYID0g5qGG5p625qCH6aKYO1xcclxcblxcdFxcdFxcdOaPj+i/sCA9IOahhuaetuaPj+i/sDtcXHJcXG5cXHRcXHRcXHTlm77niYcgPSDmoYbmnrblm77niYc7XFxyXFxuXFx0XFx0XFx06ZO+5o6lID0g5qGG5p626ZO+5o6lO1xcclxcblxcdFxcdH1cXHJcXG5cXHRcXHRsZXQgbGlzdCA9IHBkZmEoaHRtbCwg5YiX6KGoKTtcXHJcXG5cXHRcXHRmb3IgKGxldCBrIGluIGxpc3QpIHtcXHJcXG5cXHRcXHRcXHRkLnB1c2goe1xcclxcblxcdFxcdFxcdFxcdHRpdGxlOiBwZGZoKGxpc3Rba10sIOagh+mimCksXFxyXFxuXFx0XFx0XFx0XFx0ZGVzYzogcGRmaChsaXN0W2tdLCDmj4/ov7ApLFxcclxcblxcdFxcdFxcdFxcdGltZzogcGQobGlzdFtrXSwg5Zu+54mHKSArICdAUmVmZXJlcj0nLFxcclxcblxcdFxcdFxcdFxcdHVybDogcGQobGlzdFtrXSwg6ZO+5o6lKStcXFwiI2ltbWVyc2l2ZVRoZW1lIyNhdXRvQ2FjaGUjXFxcIixcXHJcXG5cXHRcXHRcXHR9KTtcXHJcXG5cXHRcXHR9XFxyXFxuXFx0XFx0ZC5wdXNoKHtcXHJcXG5cXHRcXHRcXHRjb2xfdHlwZTogJ2JpZ19iaWdfYmxhbmtfYmxvY2snLFxcclxcblxcdFxcdH0pO1xcclxcblxcdH1cXHJcXG59KVxcclxcblxcclxcbiQuZXhwb3J0cyA9IG5ldyDkuIDnuqcoKTtcXHJcXG4kLmV4cG9ydHNcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuWHveaVsOe7hOS7tipcIixcInBhdGhcIjpcInFzXCIsXCJydWxlXCI6XCJmdW5jdGlvbiDkvJjljJbot6/nur/nq6DoioLmlbDmja4o5aSa6Lev57q/5ZCmLCDmupDmlbDmja4sIOi3r+e6v+WIl+ihqCwg6Lev57q/5ZCNLCDpgInpm4bmgLvliJfooagsIOmAiembhuWIl+ihqCwg6ZuG5ZCNLCDpm4Z1cmwsIOWJjee8gCwg5qCH6aKYLCDlm77niYcpIHtcXG5cXG4gICAgLy/lvZPlpJrot6/nur/lkKYg6YCJ6ZuG5oC75YiX6KGo5Li656m6XFxuICAgIC8v5pyA57uI6L+U5ZueIFt7dGl0bGU6ICfot6/nur/lkI0nLGxpc3Q6IFt7dGl0bGU6J+mAiembhuWQjScsdXJsOifpgInpm4Z1cmwnLC4uLn1dLHNqc3M6J+S4i+i9vei1hOaWmSd9LC4uLi5dXFxuICAgIC8v6YCJ6ZuG5YiX6KGoIOesrOS4gOmhueaYr2Nzc+mAieaLqeWZqO+8jOS5i+WQjuWPr+S7peeUqCTliIblibLmt7vliqDopoHliKDpmaTnq6DoioLlkI1cXG5cXG5cXG4gICAgdmFyIOeroOiKgmpzb24gPSBbXTtcXG4gICAgdmFyIOWNlei3r+e6v+eroOiKgiA9ICfnq6DoioLliJfooagnXFxuXFxuICAgIHZhciDliJfooajlkI0gPSBbXTtcXG4gICAgaWYgKCHlpJrot6/nur/lkKYpIHtcXG5cXG4gICAgICAgIOWIl+ihqOWQjS5wdXNoKOWNlei3r+e6v+eroOiKgilcXG5cXG4gICAgfSBlbHNlIHtcXG5cXG4gICAgICAgIHBkZmEo5rqQ5pWw5o2uLCDot6/nur/liJfooagpLmZvckVhY2goZnVuY3Rpb24oZGF0YSkge1xcbiAgICAgICAgICAgIOWIl+ihqOWQjS5wdXNoKHBkZmgoZGF0YSwg6Lev57q/5ZCNKSlcXG4gICAgICAgIH0pO1xcblxcbiAgICB9XFxuXFxuICAgIHZhciDpm4bmlbDnu4QgPSBbXTtcXG5cXG5cXG52YXIg5o6S6Zmk56ug6IqCID0gW107XFxuaWYo6YCJ6ZuG5YiX6KGoLmluY2x1ZGVzKCckJykpe1xcbuaOkumZpOeroOiKgiA9IOmAiembhuWIl+ihqC5zcGxpdCgnJCcpXFxu6YCJ6ZuG5YiX6KGoID0g5o6S6Zmk56ug6IqCLnNoaWZ0KClcXG59XFxuXFxuICAgIGlmICgh5aSa6Lev57q/5ZCmKSB7XFxuICAgICAgICDpm4bmlbDnu4QucHVzaChwZGZhKOa6kOaVsOaNriwg6YCJ6ZuG5YiX6KGoKSlcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIHBkZmEo5rqQ5pWw5o2uLCDpgInpm4bmgLvliJfooagpLmZvckVhY2goZnVuY3Rpb24oZGF0YSkge1xcbiAgICAgICAgICAgIOmbhuaVsOe7hC5wdXNoKHBkZmEoZGF0YSwg6YCJ6ZuG5YiX6KGoKSlcXG4gICAgICAgIH0pO1xcbiAgICB9XFxuXFxuXFxuICAgIGZvciAobGV0IGkgaW4g6ZuG5pWw57uEKSB7XFxuXFxuICAgICAgICB2YXIgZG9MaXN0ID0gW107XFxuXFxu5o6S6Zmk56ug6IqCLmZvckVhY2goZnVuY3Rpb24oZGF0YSkge1xcbiAgICB2YXIg5qCH6K+GaWQgPSDpm4bmlbDnu4RbaV0uZmluZEluZGV4KOi/lOWbniA9PiDov5Tlm54uaW5kZXhPZihkYXRhKSAhPSAtMSk7XFxuICAgIGlmICjmoIfor4ZpZCAhPSAtMSkge1xcbiAgICAgIOmbhuaVsOe7hFtpXS5zcGxpY2Uo5qCH6K+GaWQsIDEpXFxuICAgIH07XFxuICB9KTtcXG5cXG4gICAgICAgIGZvciAobGV0IGl0IG9mIOmbhuaVsOe7hFtpXSkge1xcbiAgICAgICAgICAgIHZhciBkb0xpc3R1cmwgPSBwZGZoKGl0LCDpm4Z1cmwpXFxuICAgICAgICAgICAgZG9MaXN0dXJsID0gZG9MaXN0dXJsLmluY2x1ZGVzKFxcXCJodHRwXFxcIikgPyBkb0xpc3R1cmwgOiDliY3nvIAgKyBkb0xpc3R1cmxcXG4gICAgICAgICAgICBkb0xpc3QucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPHNtYWxsPicgKyBwZGZoKGl0LCDpm4blkI0pICsgJzwvc21hbGw+JyxcXG4gICAgICAgICAgICAgICAgdXJsOiBkb0xpc3R1cmxcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfVxcblxcbiAgICAgICAgdmFyIGJvb2tOYW1lID0gIeWkmui3r+e6v+WQpiA/IOagh+mimCA6IOagh+mimCArICctJyArIOWIl+ihqOWQjVtpXVxcblxcbiAgICAgICAg56ug6IqCanNvbi5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTog5YiX6KGo5ZCNW2ldLFxcbiAgICAgICAgICAgIGxpc3Q6IGRvTGlzdCxcXG4gICAgICAgICAgICBzanNzOiB7XFxuICAgICAgICAgICAgICAgIGNoYXB0ZXJMaXN0OiBkb0xpc3QsXFxuICAgICAgICAgICAgICAgIGluZm86IHtcXG4gICAgICAgICAgICAgICAgICAgIGJvb2tOYW1lOiBib29rTmFtZSwgLy/mvKvnlLvlkI3np7AsXFxuICAgICAgICAgICAgICAgICAgICBydWxlTmFtZTogTVlfUlVMRS50aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgIGJvb2tUb3BQaWM6IOWbvueJhyxcXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlQ29kZTogZG93bmxvYWRsYXp5LFxcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICBkZWZhdWx0VmlldzogXFxcIjFcXFwiXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSlcXG4gICAgfVxcbiAgICByZXR1cm4g56ug6IqCanNvblxcbn1cXG5cXG5cXG5mdW5jdGlvbiDmt7vliqDlpLTpg6jliJfooagoZCwg5qCH6aKYLCDlm77niYcsIOaPj+i/sCwg5L2c6ICFLCDml7bpl7QsIOWIhuexuyzpobVVUkwpIHtcXG5cXG4gICAg5qCH6aKYID0gIeagh+mimCA/ICcnIDog5qCH6aKYICsgJ1xcXFxuJ1xcbiAgICDlm77niYcgPSAh5Zu+54mHID8gJycgOiDlm77niYdcXG4gICAg5o+P6L+wID0gIeaPj+i/sCA/ICcnIDog5o+P6L+wLnJlcGxhY2UoXFxcIuabtOaWsOiHs++8mlxcXCIsICcnKVxcblxcbiAgICDkvZzogIUgPSAh5L2c6ICFID8gJycgOiAnXFxcXG4nICsg5L2c6ICFXFxuICAgIOaXtumXtCA9ICHml7bpl7QgPyAnJyA6ICdcXFxcbicgKyDml7bpl7RcXG4gICAg5YiG57G7ID0gIeWIhuexuyA/ICcnIDogJ1xcXFxuJyArIOWIhuexu1xcblxcblxcbiAgICB2YXIg5aS06YOodGl0bGUgPSBbJ+KAmOKAmOKAmeKAmTxiPicsJzwvYj4gPHNtYWxsPjxmb250IGNvbG9yPSNGQTcyOTg+JywnPC9mb250PicsJzwvc21hbGw+J11cXG4gICAgdmFyIOWktOmDqGRlc2MgPSBbJ+KAmOKAmOKAmeKAmTxmb250IGNvbG9yPSNmOGVjYzk+JywnPC9mb250PiddXFxuXFxuXFxuXFxuICAgIOWktOmDqHRpdGxlID0g5aS06YOodGl0bGVbMF0r5qCH6aKYK+WktOmDqHRpdGxlWzFdK+aPj+i/sCvlpLTpg6h0aXRsZVsyXSvkvZzogIUr5aS06YOodGl0bGVbM11cXG5cXG4gICAg5aS06YOoZGVzYyA9IOWktOmDqGRlc2NbMF0r5pe26Ze0K+WIhuexuyvlpLTpg6hkZXNjWzFdXFxuXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTog5aS06YOodGl0bGUsXFxuICAgICAgICBkZXNjOiDlpLTpg6hkZXNjLFxcbiAgICAgICAgcGljX3VybDog5Zu+54mHLFxcbiAgICAgICAgdXJsOiAnaGlrZXI6Ly9zZWFyY2g/cz0nK2dldFBhcmFtKCdOYW1lJykrJyZydWxlPemYhea8q+WQmycsXFxuICAgICAgICBjb2xfdHlwZTogJ21vdmllXzFfdmVydGljYWxfcGljX2JsdXInXFxuICAgIH0pO1xcblxcbn1cXG5cXG5cXG5mdW5jdGlvbiDmt7vliqDnroDku4soZCwg5pWw5o2u5rqQLCDpobVVUkwsIOWbvueJhykge1xcbiAgICAvL+iOt+WPluaVsOaNrlxcbiAgICB2YXIg566A5LuL5YaF5a65ID0g5pWw5o2u5rqQXFxuICAgIOeugOS7i+WGheWuuSA9IOeugOS7i+WGheWuuS5yZXBsYWNlKFxcXCLnroDku4vvvJpcXFwiLCBcXFwiXFxcIikucmVwbGFjZShcXFwi5LuL57uNOlxcXCIsIFxcXCJcXFwiKS5yZXBsYWNlKFxcXCLmvKvnlLtcXFwiLCBcXFwiXFxcIikucmVwbGFjZShcXFwi4oCm4oCmXFxcIiwgXFxcIlxcXCIpLnJlcGxhY2UoXFxcIueugOS7i1xcXCIsIFxcXCJcXFwiKVxcblxcbiAgICB2YXIg566A5LuL5YaF5a655pS2O1xcbiAgICBpZiAo566A5LuL5YaF5a65Lmxlbmd0aCA+IDQ1KSB7XFxuICAgICAgICDnroDku4vlhoXlrrnmlLYgPSDnroDku4vlhoXlrrkuc3Vic3RyKDAsIDQ1KSArICcuLi4nXFxuICAgIH0gZWxzZSB7XFxuICAgICAgICDnroDku4vlhoXlrrnmlLYgPSDnroDku4vlhoXlrrkgKyAnLi4uJ1xcbiAgICB9XFxuXFxuICAgIC8v5Zu+5qCH6I635Y+WXFxuICAgIGlmICgh5Zu+54mHKSB7XFxuICAgICAgICDlm77niYcgPSAnaHR0cHM6Ly9sYW5tZWlndW9qaWFuZy5jb20vdHViaWFvL3EvMTA3LnBuZydcXG4gICAgfVxcblxcbiAgICAvL+mhtVVSTCDojrflj5ZcXG4gICAgaWYgKCHpobVVUkwpIHtcXG4gICAgICAgIOmhtVVSTCA9IE1ZX1JVTEUudGl0bGVcXG4gICAgfVxcblxcbiAgICAvL+agh+mimOS4jueugOS7i+agt+W8j1xcbiAgICB2YXIgbXp0ZXh0ID0gXFxcIiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxzbWFsbD7nroDku4s8L3NtYWxsPjxicj5cXFwiXFxuICAgIHZhciBidHRpdGxlID0gJzxmb250IGNvbG9yPVxcXCIjMDk4QUMxXFxcIj7mvKvnlLvnroDku4sgIDwvZm9udD48c21hbGw+PHNtYWxsPjxmb250IGNvbG9yPVxcXCIjZjQ3OTgzXFxcIj7nroDku4vmlLY+PC9mb250Pjwvc21hbGw+PC9zbWFsbD4nXFxuXFxuICAgIC8v5bGV5byA5LiO5pS257yp5pON5L2cXFxuICAgIHZhciBqaiA9IGdldE15VmFyKOmhtVVSTCArIFxcXCLnroDku4vmlLZcXFwiLCBcXFwi5bey5pS26LW3XFxcIik7XFxuICAgIHZhciBqanVybCA9ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKOeugOS7i+WGheWuuSwg566A5LuL5YaF5a655pS2LCDmlLYsIOaUtuWGheWuuSwg5b2T5YmNVVJMKSA9PiB7XFxuICAgICAgICB2YXIganNibCA9IOW9k+WJjVVSTCArIFxcXCLnroDku4vmlLZcXFwiO1xcbiAgICAgICAgdmFyIGpqID0gZ2V0TXlWYXIo5b2T5YmNVVJMICsgXFxcIueugOS7i+aUtlxcXCIsIFxcXCLlt7LmlLbotbdcXFwiKTtcXG4gICAgICAgIGpqID0gamogPT0gXFxcIuW3suaUtui1t1xcXCIgPyBcXFwi5bGV5byAXFxcIiA6IFxcXCLlt7LmlLbotbdcXFwiO1xcbiAgICAgICAgcHV0TXlWYXIoanNibCwgamopXFxuICAgICAgICB1cGRhdGVJdGVtKHtcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBpZDog5b2T5YmNVVJMICsgXFxcIl9idFxcXCJcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIHRpdGxlOiDmlLYucmVwbGFjZShcXFwi566A5LuL5pS2XFxcIiwgamopXFxuICAgICAgICB9KVxcblxcbiAgICAgICAgdXBkYXRlSXRlbSh7XFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgaWQ6IOW9k+WJjVVSTCArIFxcXCJfbXpcXFwiXFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICB0aXRsZTogamogPT0gXFxcIuW3suaUtui1t1xcXCIgPyDmlLblhoXlrrkucmVwbGFjZShcXFwi566A5LuLXFxcIiwg566A5LuL5YaF5a655pS2KSA6IOaUtuWGheWuuS5yZXBsYWNlKFxcXCLnroDku4tcXFwiLCDnroDku4vlhoXlrrkpXFxuICAgICAgICB9KVxcbiAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICB9LCDnroDku4vlhoXlrrksIOeugOS7i+WGheWuueaUtiwgYnR0aXRsZSwgbXp0ZXh0LCDpobVVUkwpXFxuXFxuXFxuICAgIC8v5qCH6aKYXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogYnR0aXRsZS5yZXBsYWNlKFxcXCLnroDku4vmlLZcXFwiLCBqaiksXFxuICAgICAgICB1cmw6IGpqdXJsLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJhdmF0YXJcXFwiLFxcbiAgICAgICAgcGljX3VybDog5Zu+54mHLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBpZDog6aG1VVJMICsgXFxcIl9idFxcXCJcXG4gICAgICAgIH1cXG4gICAgfSk7XFxuXFxuICAgIC8v566A5LuLXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogamogPT0gXFxcIuW3suaUtui1t1xcXCIgPyBtenRleHQucmVwbGFjZShcXFwi566A5LuLXFxcIiwg566A5LuL5YaF5a655pS2KSA6IG16dGV4dC5yZXBsYWNlKFxcXCLnroDku4tcXFwiLCDnroDku4vlhoXlrrkpLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJyaWNoX3RleHRcXFwiLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBpZDog6aG1VVJMICsgXFxcIl9telxcXCJcXG4gICAgICAgIH1cXG4gICAgfSk7XFxuXFxufVxcblxcbmZ1bmN0aW9uIOa3u+WKoOWIl+ihqOeroOiKgihkLCDmoIfpopjmlbDmja4sIOWIl+ihqOaVsOaNriwg6Kej5p6Q5Luj56CBLCDpobVVUkwsIOWbvueJhykge1xcblxcblxcbiAgICAvL2TkuI7lpJbnlYxk77yM5Li65ZCM5YaF5a2Y5Zyw5Z2A77yM5LiN55So6L+U5ZueXFxuICAgIC8v5qCH6aKY5pWw5o2uICDljbPmoIfpopjlkI3lrZdcXG4gICAgLy/liJfooajmlbDmja7lv4XpobvmmK9KU09OICDmoLzlvI/mmK9be3RpdGxlOicnLHVybDonJyx9LC4uLi4uXSAg5LiUdXJs5b+F6aG75pyJ5YmN57yAXFxuXFxuICAgIC8v5Zu+5qCH6I635Y+WXFxuICAgIGlmICgh5Zu+54mHKSB7XFxuICAgICAgICDlm77niYcgPSAnaHR0cHM6Ly9sYW5tZWlndW9qaWFuZy5jb20vdHViaWFvL3EvMTgucG5nJ1xcbiAgICB9XFxuXFxuICAgIC8v6aG1VVJMIOiOt+WPllxcbiAgICBpZiAoIemhtVVSTCkge1xcbiAgICAgICAg6aG1VVJMID0gTVlfUlVMRS50aXRsZVxcbiAgICB9XFxuXFxuICAgIC8v5qCH6aKY5ZCNXFxuICAgIHZhciDmoIfpopjlkI0gPSAnPGI+6Lev57q/PC9iPiAgPHNtYWxsPjxzbWFsbD48Zm9udCBjb2xvcj0jZjk5MDZmPuaOkuW6jyA+PC9mb250Pjwvc21hbGw+PC9zbWFsbD4nXFxuXFxuXFxuICAgIHZhciDmjpLluo8gPSBnZXRNeVZhcijpobVVUkwgKyBcXFwi56ug6IqC5o6S5bqPXFxcIiwgXFxcIuato+W6j1xcXCIpO1xcbiAgICB2YXIg5o+Q56S6ID0g5o6S5bqPID09ICflgJLluo8nID8gJ+ato+W6jycgOiAn5YCS5bqPJztcXG5cXG4gICAgdmFyIOaOkuW6j3VybCA9ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKOagh+mimOWQjSwg5qCH6aKY5pWw5o2uLCDliJfooajmlbDmja4sIOino+aekOS7o+eggSwg6aG1VVJMKSA9PiB7XFxuICAgICAgICB2YXIg5o6S5bqPID0gZ2V0TXlWYXIo6aG1VVJMICsgXFxcIueroOiKguaOkuW6j1xcXCIsIFxcXCLmraPluo9cXFwiKTtcXG4gICAgICAgIHZhciDmj5DnpLogPSDmjpLluo8gPT0gJ+WAkuW6jycgPyAn5q2j5bqPJyA6ICflgJLluo8nO1xcbiAgICAgICAgdXBkYXRlSXRlbSh7XFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgaWQ6IOmhtVVSTCArIFxcXCJf5o6S5bqPXFxcIlxcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgdGl0bGU6IOagh+mimOWQjS5yZXBsYWNlKCfot6/nur8nLCDmoIfpopjmlbDmja4pLnJlcGxhY2UoJ+aOkuW6jycsIOaPkOekuilcXG4gICAgICAgIH0pXFxuXFxuXFxuICAgICAgICBpZiAo5o+Q56S6ID09ICflgJLluo8nKSB7XFxuICAgICAgICAgICAg5YiX6KGo5pWw5o2uLnJldmVyc2UoKVxcbiAgICAgICAgfVxcbiAgICAgICAg5YiX6KGo5pWw5o2uLmZvckVhY2goZnVuY3Rpb24oZGF0YSwgc3NpZCkge1xcbiAgICAgICAgICAgIHVwZGF0ZUl0ZW0oe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXG4gICAgICAgICAgICAgICAgdXJsOiBkYXRhLnVybCArIOino+aekOS7o+eggSxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGlkOiDpobVVUkwgKyBcXFwiX+mAiembhlxcXCIgKyBzc2lkXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH0pO1xcblxcblxcbiAgICAgICAgcHV0TXlWYXIo6aG1VVJMICsgXFxcIueroOiKguaOkuW6j1xcXCIsIOaPkOekuilcXG4gICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgfSwg5qCH6aKY5ZCNLCDmoIfpopjmlbDmja4sIOWIl+ihqOaVsOaNriwg6Kej5p6Q5Luj56CBLCDpobVVUkwpXFxuXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTog5qCH6aKY5ZCNLnJlcGxhY2UoJ+i3r+e6vycsIOagh+mimOaVsOaNrikucmVwbGFjZSgn5o6S5bqPJywg5o6S5bqPKSxcXG4gICAgICAgIHBpY191cmw6IOWbvueJhyxcXG4gICAgICAgIHVybDog5o6S5bqPdXJsLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJhdmF0YXJcXFwiLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBpZDog6aG1VVJMICsgXFxcIl/mjpLluo9cXFwiXFxuICAgICAgICB9XFxuICAgIH0pO1xcblxcbiAgICBpZiAo5o6S5bqPID09ICflgJLluo8nKSB7XFxuICAgICAgICDliJfooajmlbDmja4ucmV2ZXJzZSgpXFxuICAgIH1cXG5cXG4gICAg5YiX6KGo5pWw5o2uLmZvckVhY2goZnVuY3Rpb24oZGF0YSwgaWQpIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxuICAgICAgICAgICAgdXJsOiBkYXRhLnVybCArIOino+aekOS7o+eggSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfMlxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgaWQ6IOmhtVVSTCArIFxcXCJf6YCJ6ZuGXFxcIiArIGlkXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgIH0pO1xcblxcbn1cXG5cXG4vKlxcbmZ1bmN0aW9uIOa3u+WKoOmYsuatoue9kemhtSjpobl1cmwsIFVBKSB7XFxuXFxuICAgIC8v5LiK57qn6Lez6L2s5Yiw5b2T5YmN6aG155qE6ZO+5o6l5b+F6aG75pivaGlrZXI6Ly9lbXB0ee+8m+S4jeeEtuS4gOWIt+aWsOi/mOaYr+S8mumHjeWkjeWKoOi9vVxcbiAgICAvL1VBICcn5oiWZmFsc2XmiJYn5omL5py6JyDpu5jorqTmmK/miYvmnLrnq68gOyDnlLXohJEgJ1BDJ1xcblxcbiAgICB2YXIg5Yi35paw6YeN5aSNID0gTVlfUlVMRS50aXRsZSArIFxcXCLnvZHpobXmupDnoIFcXFwiXFxuICAgIHZhciBwY+mTvuaOpSA9IOmhuXVybC5yZXBsYWNlKFxcXCJtLlxcXCIsIFxcXCJ3d3cuXFxcIilcXG4gICAgdmFyIOaJi+acuumTvuaOpSA9IOmhuXVybC5yZXBsYWNlKFxcXCJ3d3cuXFxcIiwgXFxcIm0uXFxcIilcXG5cXG4gICAgdmFyIGNvZGU7XFxuICAgIGlmIChnZXRNeVZhcijliLfmlrDph43lpI0sIFxcXCJmYWxzZVxcXCIpID09IFxcXCJmYWxzZVxcXCIpIHtcXG5cXG4gICAgICAgIGNvZGUgPSBVQSA9PSAnUEMnID8gZmV0Y2gocGPpk77mjqUpIDogcmVxdWVzdCjmiYvmnLrpk77mjqUpO1xcbiAgICAgICAgcHV0TXlWYXIo5Yi35paw6YeN5aSNLCBnZXRQYXJhbSgndXJsJykgKyBcXFwi77+lJu+/pVxcXCIgKyBjb2RlKVxcblxcbiAgICB9IGVsc2Uge1xcblxcbiAgICAgICAgdmFyIHBtID0gZ2V0TXlWYXIo5Yi35paw6YeN5aSNKS5zcGxpdChcXFwi77+lJu+/pVxcXCIpXFxuICAgICAgICBpZiAocG1bMF0gPT0gZ2V0UGFyYW0oJ3VybCcpKSB7XFxuICAgICAgICAgICAgY29kZSA9IHBtWzFdXFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGNvZGUgPSBVQSA9PSAnUEMnID8gZmV0Y2gocGPpk77mjqUpIDogcmVxdWVzdCjmiYvmnLrpk77mjqUpO1xcbiAgICAgICAgICAgIHB1dE15VmFyKOWIt+aWsOmHjeWkjSwgZ2V0UGFyYW0oJ3VybCcpICsgXFxcIu+/pSbvv6VcXFwiICsgY29kZSlcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gY29kZVxcbn1cXG4qL1xcblxcbmZ1bmN0aW9uIOa3u+WKoOmAieaLqei3r+e6vyhkLCDot6/nur/mlbDmja4sIOmhtVVSTCwg5aSa6Lev57q/5ZCmKSB7XFxuXFxuICAgIC8v6Lev57q/5pWw5o2uIOagvOW8j1t7dGl0bGU6J+i3r+e6v+WQjSd9LC4uLi5dXFxuICAgIC8v5aSa6Lev57q/5ZCmICBmYWxzZSDliJnkuI3lkK/nlKjpgInmi6not6/nur/vvJt0cnVlIOWImeWQr+eUqFxcblxcbiAgICB2YXIg6YCJ5oup5YiX6KGoID0gZ2V0SXRlbSjpobVVUkwgKyBcXFwi6YCJ5oup5YiX6KGoXFxcIiwgXFxcIjBcXFwiKVxcblxcbiAgICBpZiAo5aSa6Lev57q/5ZCmKSB7XFxuXFxuICAgICAgICB2YXIg6Lev57q/6YCJ5LitID0gJ+KAmOKAmOKAmeKAmTxmb250IGNvbG9yPSMwOThBQzE+6YCJ5LitPC9mb250PidcXG5cXG5cXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfigJjigJjigJnigJnwn5OWPGZvbnQgY29sb3I9XFxcIiNGQTcyOThcXFwiPiDlm77mupDliJfooag8L2ZvbnQ+IO+8micsXFxuICAgICAgICAgICAgdXJsOiBcXFwidG9hc3Q6Ly/ngrnmiJHlubLllaXlkaJcXFwiLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnZmxleF9idXR0b24nXFxuICAgICAgICB9KTtcXG5cXG5cXG4gICAgICAgIOi3r+e6v+aVsOaNri5mb3JFYWNoKGZ1bmN0aW9uKGRhdGEsIGlkKSB7XFxuXFxuICAgICAgICAgICAgdmFyIGpqdXJsID0gJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgo6aG1VVJMLGlkKSA9PiB7XFxuICAgICAgICAgICAgICAgIHNldEl0ZW0o6aG1VVJMICsgJ+mAieaLqeWIl+ihqCcsaWQrJycpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICAgICAgfSzpobVVUkwsaWQpO1xcblxcbiAgICAgICAgICAgIHZhciDmoIfpopjlkI0gPSBpZCA9PSDpgInmi6nliJfooaggPyDot6/nur/pgInkuK0ucmVwbGFjZSgn6YCJ5LitJywgZGF0YS50aXRsZSkgOiBkYXRhLnRpdGxlO1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiDmoIfpopjlkI0sXFxuICAgICAgICAgICAgICAgIHVybDogamp1cmwsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnZmxleF9idXR0b24nLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgaWQ6IOmhtVVSTCArIFxcXCJf6Lev57q/XFxcIiArIGlkXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH0pO1xcblxcbiAgICB9XFxuICAgIHJldHVybiDpgInmi6nliJfooahcXG59XFxuXFxuXFxuZnVuY3Rpb24g5re75Yqg6YCJ5oup5LiL6L29KGQsIOi3r+e6v+aVsOaNriwg5aSa6Lev57q/5ZCmKSB7XFxuICAgIGQucHVzaCh7XFxuICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZ8J+Xszxmb250IGNvbG9yPVxcXCIjZjQ3OTgzXFxcIj4g5Lmm5p62PC9mb250PiAnLFxcbiAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvQm9va3JhY2sudmlldz9ydWxlPeacrOWcsOi1hOa6kOeuoeeQhiZydWxlTmFtZT1cXFwiK01ZX1JVTEUudGl0bGUsXFxuICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG59KTtcXG5cXG4gICAgLy/ot6/nur/mlbDmja4g5qC85byPW3t0aXRsZTon6Lev57q/5ZCNJyxzanNzOifkuIvovb3otYTmlpnkv6Hmga8nfSwuLi4uXVxcbiAgICAvL+Wkmui3r+e6v+WQpiAgZmFsc2Ug5YiZ5Y+q5pyJ4pGg5Liq5LiL6L29IOagh+mimOS4uiDngrnlh7vkuIvovb3vvJt0cnVlIOWImeWkmuS4quS4i+i9vVxcblxcbmlmKOWkmui3r+e6v+WQpil7XFxuXFxuZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZ8J+TpTxmb250IGNvbG9yPVxcXCIjZjQ3OTgzXFxcIj4g5LiL6L29PC9mb250PiDvvJonLFxcbiAgICAgICAgdXJsOiBcXFwidG9hc3Q6Ly/ngrnmiJHlubLllaXlkaJcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbiAgICB9KTtcXG5cXG59XFxuXFxuICAgIOi3r+e6v+aVsOaNri5mb3JFYWNoKGZ1bmN0aW9uKGRhdGEsIGlkKSB7XFxuXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLmluY2x1ZGVzKCfnq6DoioLliJfooagnKSA/ICfngrnlh7vkuIvovb0nIDogZGF0YS50aXRsZSxcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UvZG93bmxvYWQudmlldyNub1JlY29yZEhpc3RvcnkjI25vUmVmcmVzaCMjbm9IaXN0b3J5Iz9ydWxlPeacrOWcsOi1hOa6kOeuoeeQhicsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgICBleHRyYTogZGF0YS5zanNzXFxuICAgICAgICB9KTtcXG4gICAgfSk7XFxuXFxuICAgIGlmICjlpJrot6/nur/lkKYpIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJsaW5lX2JsYW5rXFxcIlxcbiAgICAgICAgfSk7XFxuICAgIH1cXG5cXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCJDU1PpgInmi6nlmajmqKHniYgqXCIsXCJwYXRoXCI6XCJlandiLmpzXCIsXCJydWxlXCI6XCJmdW5jdGlvbiDkuIDnuqco5YiX6KGoLCDmoIfpopgsIOWbvueJhywg6ZuG5pWwLCDpk77mjqUsIOiuv+mXruWktCkge1xcbiAgICDorr/pl67lpLQgPSAh6K6/6Zeu5aS0ID8gJycgOiDorr/pl67lpLRcXG4gICAgdmFyIGQgPSBbXTtcXG4gICAgdmFyIGNvZGUgPSBnZXRDb2RlKClcXG4gICAgcGRmYShjb2RlLCDliJfooagpLmZvckVhY2goZnVuY3Rpb24oZGF0YSkge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogcGRmaChkYXRhLCDmoIfpopgpLFxcbiAgICAgICAgICAgIGRlc2M6IHBkZmgoZGF0YSwg6ZuG5pWwKSxcXG4gICAgICAgICAgICBwaWNfdXJsOiBwZChkYXRhLCDlm77niYcpfHzlm77niYcgKyBcXFwiQFJlZmVyZXI9XFxcIiArIOiuv+mXruWktCxcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5I2ltbWVyc2l2ZVRoZW1lIyNhdXRvQ2FjaGUjJyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcIm1vdmllXzNcXFwiLFxcbmV4dHJhOiB7XFxuICAgICAgICAgICAgbmFtZTogcGRmaChkYXRhLCDmoIfpopgpLFxcbiAgICAgICAgICAgIHVybDogcGQoZGF0YSwg6ZO+5o6lKSxcXG4gICAgICAgICAgICBxejogTVlfSE9NRVxcbiAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgIH0pO1xcbiAgICBzZXRSZXN1bHQoZCk7XFxufVxcblxcblxcblxcbmZ1bmN0aW9uIOaQnOe0oijliJfooagsIOagh+mimCwg6ZO+5o6lLCDmj4/ov7AsIOivpuaDhSwg5Zu+54mHLCDorr/pl67lpLQpIHtcXG4gICAgdmFyIGQgPSBbXTtcXG4gICAg6K6/6Zeu5aS0ID0gIeiuv+mXruWktCA/ICcnIDog6K6/6Zeu5aS0XFxuICAgIHBkZmEoZ2V0UmVzQ29kZSgpLCDliJfooagpLmZvckVhY2goZnVuY3Rpb24oZGF0YSkge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogcGRmaChkYXRhLCDmoIfpopgpLFxcbiAgICAgICAgICAgIGRlc2M6IHBkZmgoZGF0YSwg5o+P6L+wKSxcXG4gICAgICAgICAgICBwaWNfdXJsOiBwZChkYXRhLCDlm77niYcpICsgXFxcIkBSZWZlcmVyPVxcXCIgKyDorr/pl67lpLQsXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eSNpbW1lcnNpdmVUaGVtZSMjYXV0b0NhY2hlIycsXFxuICAgICAgICAgICAgY29udGVudDogcGRmaChkYXRhLCDor6bmg4UpLFxcblxcbmV4dHJhOiB7XFxuICAgICAgICAgICAgbmFtZTogcGRmaChkYXRhLCDmoIfpopgpLFxcbiAgICAgICAgICAgIHVybDogcGQoZGF0YSwg6ZO+5o6lKSxcXG4gICAgICAgICAgICBxejogTVlfSE9NRVxcbiAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgIH0pO1xcbiAgICBzZXRSZXN1bHQoZCk7XFxufVxcblxcblxcblxcblxcbmZ1bmN0aW9uIOacgOaWsCjpgInmi6nlmagsIFVBKSB7XFxuICAgIGlmIChVQSA9PSBcXFwiUENcXFwiKSB7XFxuICAgICAgICB2YXIgY29kZSA9IGZldGNoKGdldFBhcmFtKCd1cmwnKS5yZXBsYWNlKFxcXCJtLlxcXCIsIFxcXCJ3d3cuXFxcIikpO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgdmFyIGNvZGUgPSByZXF1ZXN0KGdldFBhcmFtKCd1cmwnKS5yZXBsYWNlKFxcXCJ3d3cuXFxcIiwgXFxcIm0uXFxcIikpO1xcbiAgICB9XFxuICAgIHNldFJlc3VsdChwZGZoKGNvZGUsIOmAieaLqeWZqCkpXFxufVxcblxcblxcblxcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL3BhZ2UvcXM/cnVsZT3pmIXmvKvlkJtcXFwiKSkucnVsZSlcXG5cXG5mdW5jdGlvbiDkuoznuqco5aS06YOo5YiX6KGoLCDmoIfpopgsIOWbvueJhywg5o+P6L+wLCDorr/pl67lpLQsIOS9nOiAhSwg5pe26Ze0LCDliIbnsbssIOeugOS7iywg5aSa6Lev57q/5ZCmLCDot6/nur/liJfooagsIOi3r+e6v+WQjSwg6YCJ6ZuG5oC75YiX6KGoLCDpgInpm4bliJfooagsIOmbhuWQjSwg6ZuGdXJsLCBkb3dubG9hZGxhenks5b2T5YmNVVJMLOW9k+WJjemhteWQjSzliY3nvIAsVUEs6Ziy6YeN6L295ZCmKSB7XFxuICAgIHZhciBkID0gW107XFxuXFxuLy/lpLTpg6jliJfooaggIOWImem7mOiupOS9v+eUqCBjb2RlIOadpeS9nOS4uuWktOmDqOWIl+ihqOaVsOaNrlxcbi8v5aSa6Lev57q/5ZCmICB0cnVlIOWImeS9v+eUqOWkmui3r+e6v++8m2ZhbHNlIOWImeS9v+eUqOeroOi3r+e6v1xcbi8vVUEgIOS4jeWhq+WImeS9v+eUqOaJi+acuuerryAgJ1BDJ+WImeaJi+acuuerr1xcblxcbmlmICjlvZPliY3pobXlkI0pIHtcXG4gICAgc2V0UGFnZVRpdGxlKOW9k+WJjemhteWQjSlcXG59XFxuXFxuaWYo6Ziy6YeN6L295ZCmKXtcXG4vL+e9kemhteWGheWuuSvpmLLmraLph43mi4lcXG4gICAgdmFyIGNvZGUgPSDmt7vliqDpmLLmraLnvZHpobUo5b2T5YmNVVJMLCBVQSlcXG59ZWxzZXtcXG4gICAgdmFyIGNvZGUgPSBnZXRDb2RlKClcXG59XFxuICAgIFxcblxcbiAgICAvL+WktOmDqOWIl+ihqOaVsOaNrlxcbiAgICB2YXIg5aS06YOoID0gIeWktOmDqOWIl+ihqCA/IGNvZGUgOiBwZGZhKGNvZGUsIOWktOmDqOWIl+ihqClbMF07XFxuICAgIOagh+mimCA9IHBkZmgo5aS06YOoLCDmoIfpopgpXFxuICAgIOWbvueJhyA9IHBkZmgo5aS06YOoLCDlm77niYcpfHzlm77niYdcXG4gICAgaWYgKOWbvueJhykge1xcbiAgICAgICAg5Zu+54mHID0g5Zu+54mHLmluY2x1ZGVzKCdodHRwJykgPyDlm77niYcgOiDliY3nvIAgKyDlm77niYdcXG4gICAgICAgIGlmICgh6K6/6Zeu5aS0KSB7fSBlbHNlIGlmICjorr/pl67lpLQuc3Vic3RyKDAsIDEpID09ICdAJykge1xcbiAgICAgICAgICAgIOWbvueJhyA9IOWbvueJhyArIOiuv+mXruWktFxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICDlm77niYcgPSDlm77niYcgKyBcXFwiQFJlZmVyZXI9XFxcIiArIOiuv+mXruWktFxcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIFxcblxcbuaPj+i/sCA9IOaPj+i/sC5pbmNsdWRlcygnJCcpID8g5o+P6L+wLnNwbGl0KCckJylbMV0gKyBwZGZoKOWktOmDqCwg5o+P6L+wLnNwbGl0KCckJylbMF0pIDogcGRmaCjlpLTpg6gsIOaPj+i/sClcXG5cXG7kvZzogIUgPSDkvZzogIUuaW5jbHVkZXMoJyQnKSA/IOS9nOiAhS5zcGxpdCgnJCcpWzFdICsgcGRmaCjlpLTpg6gsIOS9nOiAhS5zcGxpdCgnJCcpWzBdKSA6IHBkZmgo5aS06YOoLCDkvZzogIUpXFxuICAgIFxcbuaXtumXtCA9IOaXtumXtC5pbmNsdWRlcygnJCcpID8g5pe26Ze0LnNwbGl0KCckJylbMV0gKyBwZGZoKOWktOmDqCwg5pe26Ze0LnNwbGl0KCckJylbMF0pIDogcGRmaCjlpLTpg6gsIOaXtumXtClcXG5cXG7liIbnsbsgPSDliIbnsbsuaW5jbHVkZXMoJyQnKSA/IOWIhuexuy5zcGxpdCgnJCcpWzFdICsgcGRmaCjlpLTpg6gsIOWIhuexuy5zcGxpdCgnJCcpWzBdKSA6IHBkZmgo5aS06YOoLCDliIbnsbspXFxuXFxuICAgIFxcbiAgICAvL+WktOmDqOWIl+ihqFxcbiAgICDmt7vliqDlpLTpg6jliJfooagoZCwg5qCH6aKYLCDlm77niYcsIOaPj+i/sCwg5L2c6ICFLCDml7bpl7QsIOWIhuexuyzlvZPliY1VUkwpXFxuICAgIFxcbiAgICAvL+i3r+e6v+WQjeS4jumAiembhuaVsOaNrlxcbiAgICB2YXIg56ug6IqCanNvbiA9IOS8mOWMlui3r+e6v+eroOiKguaVsOaNrijlpJrot6/nur/lkKYsIGNvZGUsIOi3r+e6v+WIl+ihqCzot6/nur/lkI0s6YCJ6ZuG5oC75YiX6KGoLOmAiembhuWIl+ihqCzpm4blkI0s6ZuGdXJsLOWJjee8gCzlvZPliY3pobXlkI0s5Zu+54mHKVxcblxcbiAgICAvL+eugOS7i1xcbiAgICDmt7vliqDnroDku4soZCwgcGRmaChjb2RlLCDnroDku4spLCDlvZPliY1VUkwsICcnKVxcblxcbiAgIC8v5b2T5rKh5pyJ56ug6IqC5YaF5a6577yM5bCx5LiN5pi+56S6XFxuICAgIGlmICjnq6DoioJqc29uLmxlbmd0aCA+IDApIHtcXG5cXG4gICAgICAgIC8v6Lev57q/6YCJ5oupXFxuICAgICAgICB2YXIg6YCJ5oup5YiX6KGoID0g5re75Yqg6YCJ5oup6Lev57q/KGQsIOeroOiKgmpzb24sIOW9k+WJjVVSTCwg5aSa6Lev57q/5ZCmKVxcblxcbiAgICAgICAgLy/pgInmi6nkuIvovb1cXG4gICAgICAgIOa3u+WKoOmAieaLqeS4i+i9vShkLCDnq6DoioJqc29uLOWkmui3r+e6v+WQpilcXG5cXG4gICAgICAgIC8v5o6S5bqP5LiO6YCJ6ZuGXFxuICAgICAgICDmt7vliqDliJfooajnq6DoioIoZCwg56ug6IqCanNvblvpgInmi6nliJfooahdLnRpdGxlLCDnq6DoioJqc29uW+mAieaLqeWIl+ihqF0ubGlzdCwgbGF6eSwg5b2T5YmNVVJMLCAnJylcXG5cXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJsb25nX3RleHRcXFwiXFxuICAgICAgICB9KTtcXG4gICAgfVxcbiAgICBzZXRSZXN1bHQoZClcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLkuoznuqfliJfooagqXCIsXCJwYXRoXCI6XCJlamxiXCIsXCJydWxlXCI6XCJ2YXIgdGFicyA9IFtdXFxudmFyIGxpc3RzID0gW11cXG52YXIgYXJ0cyA9IHBkZmEoaHRtbCwg57q/6LevKTtcXG5hcnRzLmZvckVhY2goKGRhdGEsIGlkKSA9PiB7XFxuICAgIHRhYnMucHVzaChwZGZoKGRhdGEsIOe6v+i3r+WQjSkpXFxufSlcXG52YXIgY29udHMgPSBwZGZhKGh0bWwsIOmAiembhik7XFxuY29udHMuZm9yRWFjaCgoZGF0YSwgaWQpID0+IHtcXG4gICAgbGlzdHMucHVzaChwZGZhKGRhdGEsIOmAiembhuWIl+ihqCkpXFxufSlcXG5hZGRMaXN0ZW5lcihcXFwib25DbG9zZVxcXCIsICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICBjbGVhck15VmFyKFxcXCJsaXN0c1xcXCIpO1xcbn0pKTtcXG5zdG9yYWdlMC5wdXRNeVZhcihcXFwibGlzdHNcXFwiLCBsaXN0cyk7XFxudmFyIGxpc3QgPSBsaXN0c1tnZXRNeVZhcihNWV9VUkwsICcwJyldO1xcbnZhciDmjpLluo8gPSBnZXRNeVZhcihNWV9VUkwgKyBcXFwi56ug6IqC5o6S5bqPXFxcIiwgJyMxYWFkMTlcXFwiPuato+W6jycpO1xcbnZhciDmj5DnpLogPSDmjpLluo8gPT0gJyNGRjAwMDBcXFwiPuWAkuW6jycgPyAnIzFhYWQxOVxcXCI+5q2j5bqPJyA6ICcjRkYwMDAwXFxcIj7lgJLluo8nO1xcbnZhciDmjpLluo/lkI0gPSAn4oCc4oCc4oCd4oCdPGI+PHNwYW4gc3R5bGU9XFxcImNvbG9yOuaOkuW6jzwvc3Bhbj48L2I+J1xcblxcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPGI+PHNwYW4gc3R5bGU9XFxcImNvbG9yOiAnICsg5o6S5bqPICsgJzwvc3Bhbj48L2I+JyxcXG4gICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKCjmjpLluo/lkI0sIGxhenkpID0+IHtcXG4gICAgICAgIHZhciBsaXN0cyA9IHN0b3JhZ2UwLmdldE15VmFyKFxcXCJsaXN0c1xcXCIpO1xcbiAgICAgICAgdmFyIOeroOiKgiA9IGxpc3RzW2dldE15VmFyKE1ZX1VSTCwgJzAnKV07XFxuICAgICAgICB2YXIg5o6S5bqPID0gZ2V0TXlWYXIoTVlfVVJMICsgXFxcIueroOiKguaOkuW6j1xcXCIsICcjMWFhZDE5XFxcIj7mraPluo8nKTtcXG4gICAgICAgIHZhciDmj5DnpLogPSDmjpLluo8gPT0gJyNGRjAwMDBcXFwiPuWAkuW6jycgPyAnIzFhYWQxOVxcXCI+5q2j5bqPJyA6ICcjRkYwMDAwXFxcIj7lgJLluo8nO1xcbiAgICAgICAgdXBkYXRlSXRlbSh7XFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgaWQ6IE1ZX1VSTCArIFxcXCJf5o6S5bqPXFxcIlxcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgdGl0bGU6IOaOkuW6j+WQjS5yZXBsYWNlKCfmjpLluo8nLCDmj5DnpLopXFxuICAgICAgICB9KVxcbiAgICAgICAgaWYgKOaOkuW6jyA9PSAnIzFhYWQxOVxcXCI+5q2j5bqPJykge1xcbiAgICAgICAgICAgIOeroOiKgi5yZXZlcnNlKClcXG4gICAgICAgIH1cXG4gICAgICAgIGxldCBjcCA9IOeroOiKgi5tYXAoKGRhdGEsIHNzaWQpID0+IHtcXG4gICAgICAgICAgICByZXR1cm4ge1xcbiAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChkYXRhLCAnYSYmVGV4dCcpLFxcbiAgICAgICAgICAgICAgICB1cmw6IHBkKGRhdGEsICdhJiZocmVmJykgKyBsYXp5LFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfMicsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBjbHM6IE1ZX1VSTCArIFxcXCJf6YCJ6ZuGXFxcIlxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfTtcXG4gICAgICAgIH0pO1xcbiAgICAgICAgZGVsZXRlSXRlbUJ5Q2xzKE1ZX1VSTCArIFxcXCJf6YCJ6ZuGXFxcIik7XFxuICAgICAgICBhZGRJdGVtQmVmb3JlKE1ZX1VSTCArIFxcXCJmb290ZXJcXFwiLCBjcCk7XFxuICAgICAgICBwdXRNeVZhcihNWV9VUkwgKyBcXFwi56ug6IqC5o6S5bqPXFxcIiwg5o+Q56S6KVxcbiAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICB9LCDmjpLluo/lkI0sIGxhenkpLFxcbiAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgaWQ6IE1ZX1VSTCArIFxcXCJf5o6S5bqPXFxcIlxcbiAgICB9XFxufSlcXG50YWJzLmZvckVhY2goKGRhdGEsIGlkKSA9PiB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogZ2V0TXlWYXIoTVlfVVJMLCAnMCcpID09IGlkID8gJ+KAnOKAnCcgKyBkYXRhICsgJ+KAneKAnScgOiBkYXRhLFxcbiAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKCjnur/ot68sIGxhenksIGlkKSA9PiB7XFxuICAgICAgICAgICAgdmFyIGxpc3RzID0gc3RvcmFnZTAuZ2V0TXlWYXIoXFxcImxpc3RzXFxcIik7XFxuICAgICAgICAgICAgdmFyIOaOkuW6jyA9IGdldE15VmFyKE1ZX1VSTCArIFxcXCLnq6DoioLmjpLluo9cXFwiLCAnIzFhYWQxOVxcXCI+5q2j5bqPJyk7XFxuICAgICAgICAgICAgdmFyIOaPkOekuiA9IOaOkuW6jyA9PSAnI0ZGMDAwMFxcXCI+5YCS5bqPJyA/ICcjMWFhZDE5XFxcIj7mraPluo8nIDogJyNGRjAwMDBcXFwiPuWAkuW6jyc7XFxuXFxuICAgICAgICAgICAg57q/6LevLmZvckVhY2goKGRhdGEsIHhsaWQpID0+IHtcXG4gICAgICAgICAgICAgICAgdXBkYXRlSXRlbSh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogaWQgPT0geGxpZCA/ICfigJzigJwnICsgZGF0YSArICfigJ3igJ0nIDogZGF0YSxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IE1ZX1VSTCArIFxcXCJf57q/6LevXFxcIiArIHhsaWRcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICBwdXRNeVZhcihNWV9VUkwsIGlkKVxcbiAgICAgICAgICAgIHZhciDnq6DoioIgPSBsaXN0c1tnZXRNeVZhcihNWV9VUkwsICcwJyldO1xcbiAgICAgICAgICAgIGlmICjmjpLluo8gPT0gJyNGRjAwMDBcXFwiPuWAkuW6jycpIHtcXG4gICAgICAgICAgICAgICAg56ug6IqCLnJldmVyc2UoKVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBsZXQgY3AgPSDnq6DoioIubWFwKChkYXRhLCBzc2lkKSA9PiB7XFxuICAgICAgICAgICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChkYXRhLCAnYSYmVGV4dCcpLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBwZChkYXRhLCAnYSYmaHJlZicpICsgbGF6eSxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF8yJyxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xzOiBNWV9VUkwgKyBcXFwiX+mAiembhlxcXCJcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBkZWxldGVJdGVtQnlDbHMoTVlfVVJMICsgXFxcIl/pgInpm4ZcXFwiKTtcXG4gICAgICAgICAgICBhZGRJdGVtQmVmb3JlKE1ZX1VSTCArIFxcXCJmb290ZXJcXFwiLCBjcCk7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgfSwgdGFicywgbGF6eSwgaWQpLFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJyxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgaWQ6IE1ZX1VSTCArIFxcXCJf57q/6LevXFxcIiArIGlkXFxuICAgICAgICB9XFxuICAgIH0pO1xcbn0pXFxuXFxuaWYgKOaOkuW6jyA9PSAnI0ZGMDAwMFxcXCI+5YCS5bqPJykge1xcbiAgICBsaXN0LnJldmVyc2UoKVxcbn1cXG5saXN0LmZvckVhY2goKGRhdGEsIGlkKSA9PiB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogcGRmaChkYXRhLCAnYSYmVGV4dCcpLFxcbiAgICAgICAgdXJsOiBwZChkYXRhLCAnYSYmaHJlZicpICsgbGF6eSxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF8yJyxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgY2xzOiBNWV9VUkwgKyBcXFwiX+mAiembhlxcXCJcXG4gICAgICAgIH1cXG4gICAgfSk7XFxufSlcXG5sZXQgbmV3c3RpcCA9IGxpc3QubGVuZ3RoO1xcbmlmIChuZXdzdGlwKSB7XFxuICAgIHNldExhc3RDaGFwdGVyUnVsZSgnanM6JyArICQudG9TdHJpbmcoKG5ld3N0aXApID0+IHtcXG4gICAgICAgIHNldFJlc3VsdCgn5pu05paw6IezOiDnrKwnICsgbmV3c3RpcCArIFxcXCLpm4ZcXFwiKTtcXG4gICAgfSwgbmV3c3RpcCkpO1xcbn1cXG5cXG5kLnB1c2goe1xcbiAgICBjb2xfdHlwZTogXFxcImJpZ19ibGFua19ibG9ja1xcXCIsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBpZDogTVlfVVJMICsgXFxcImZvb3RlclxcXCJcXG4gICAgfVxcbn0pO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi546v5aKD5Yqr5oyBXCIsXCJwYXRoXCI6XCJoaWphY2tFbnZcIixcInJ1bGVcIjpcInZhciB7IFJVTEUsIGlzSW5kZXgsIHBhZ2VUaXRsZSB9ID0gTVlfUEFSQU1TXFxuUlVMRSA9IEpTT04ucGFyc2UoYmFzZTY0RGVjb2RlKFJVTEUpKVxcbnZhciBvcmlSVUxFID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvZGF0YUxvYWQ/cnVsZT0nICsgUUlOR19USVRMRSkuZmluZCgodikgPT4gdi50aXRsZSA9PSBSVUxFLnRpdGxlKVxcbmlmIChpc0luZGV4KSB7XFxuICAgIFJVTEUgPSBvcmlSVUxFXFxuICAgIHZhciB7IHRhYkhlYWRlciwgZnlBbGwgfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL0NsYXNzVGFiP3J1bGU9JyArIFFJTkdfVElUTEUsIE9iamVjdC5hc3NpZ24oeyBRSU5HX1RJVExFOiBRSU5HX1RJVExFIH0sIFJVTEUpKVxcbiAgICAvLyDlpITnkIZNWV9SVUxFXFxuICAgIE1ZX1JVTEUuY2xhc3NfdXJsID0gdGFiSGVhZGVyLmdldENsYXNzKGZ5QWxsID8gJ2Z5QWxsJyA6ICdmeWNsYXNzJykudXJsXFxuICAgIE1ZX1JVTEUuYXJlYV91cmwgPSBmeUFsbCA/IE1ZX1JVTEUuY2xhc3NfdXJsIDogdGFiSGVhZGVyLmdldENsYXNzKCdmeWFyZWEnKS51cmxcXG4gICAgTVlfUlVMRS55ZWFyX3VybCA9IGZ5QWxsID8gTVlfUlVMRS5jbGFzc191cmwgOiB0YWJIZWFkZXIuZ2V0Q2xhc3MoJ2Z5eWVhcicpLnVybFxcbiAgICBNWV9SVUxFLnNvcnRfdXJsID0gZnlBbGwgPyBNWV9SVUxFLmNsYXNzX3VybCA6IHRhYkhlYWRlci5nZXRDbGFzcygnZnlzb3J0JykudXJsXFxuICAgIE1ZX1JVTEUudXJsID0gUlVMRS51cmxcXG4gICAgTVlfUlVMRS5jb2xfdHlwZSA9IFJVTEUuY29sX3R5cGVcXG4gICAgTVlfUlVMRS5kZXRhaWxfY29sX3R5cGUgPSBSVUxFLmRldGFpbF9jb2xfdHlwZVxcbiAgICBNWV9SVUxFLmZpbmRfcnVsZSA9IFJVTEUuZmluZF9ydWxlXFxuICAgIE1ZX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSA9IFJVTEUuZGV0YWlsX2ZpbmRfcnVsZVxcbiAgICBNWV9SVUxFLnBhcmFtcyA9IHt9XFxufSBlbHNlIHtcXG4gICAgUlVMRS5wYWdlcyA9IG9yaVJVTEUucGFnZXNcXG4gICAgLy8g5aSE55CGTVlfUlVMRVxcbiAgICBNWV9SVUxFLnVybCA9IE1ZX1BBUkFNUy51cmxcXG4gICAgTVlfUlVMRS5jb2xfdHlwZSA9IFJVTEUuZGV0YWlsX2NvbF90eXBlXFxuICAgIE1ZX1JVTEUuZmluZF9ydWxlID0gUlVMRS5kZXRhaWxfZmluZF9ydWxlXFxuICAgIE1ZX1JVTEUucGFyYW1zID0gUlVMRS5wYXJhbXNcXG59XFxuTVlfUlVMRS5wYWdlcyA9IFJVTEUucGFnZXNcXG5NWV9SVUxFLnBhZ2VMaXN0ID0gSlNPTi5wYXJzZShNWV9SVUxFLnBhZ2VzIHx8ICdbXScpXFxuTVlfUlVMRS50aXRsZSA9IFJVTEUudGl0bGVcXG5NWV9SVUxFLnVhID0gUlVMRS51YVxcbmxvZyhNWV9SVUxFLnVybClcXG4vLyDovb3lhaXlh73mlbDlt6XlhbdcXG52YXIgeyBnZW5NeVJ1bGUgfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL2Z1bmNUb29scz9ydWxlPScgKyBRSU5HX1RJVExFLCB7XFxuICAgIFFJTkdfVElUTEU6IFFJTkdfVElUTEUsXFxuICAgIE1ZX1JVTEU6IE1ZX1JVTEUsXFxuICAgIGlzSW5kZXg6IGlzSW5kZXhcXG59KVxcbi8vIOmYsuatonJlcXVpcmXlpJrmrKHov5DooYxcXG5jb25zdCBteUNvbGxfcmVxdWlyZWQgPSB7fVxcbnJlcXVpcmUgPSBmdW5jdGlvbihwYXJhbTAsIHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMsIHBhcmFtNCkge1xcbiAgICBpZiAobXlDb2xsX3JlcXVpcmVkW3BhcmFtMF0pIHJldHVyblxcbiAgICBteUNvbGxfcmVxdWlyZWRbcGFyYW0wXSA9IHRydWVcXG4gICAgcGFyYW0yID0gcGFyYW0yICE9IG51bGwgPyBwYXJhbTIgOiAwXFxuICAgIHBhcmFtMyA9IE1ZX1RJQ0tFVFxcbiAgICBwYXJhbTQgPSBldmFsXFxuICAgIHJldHVybiBtZXRob2RfcmVxdWlyZS5pbnZva2UoamF2YUNvbnRleHQsIHBhcmFtMCwgcGFyYW0xLCBwYXJhbTIsIHBhcmFtMywgcGFyYW00KVxcbn1cXG5yZXF1aXJlQ2FjaGUgPSBmdW5jdGlvbihwYXJhbTAsIHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMsIHBhcmFtNCwgcGFyYW01KSB7XFxuICAgIGlmIChteUNvbGxfcmVxdWlyZWRbcGFyYW0wXSkgcmV0dXJuXFxuICAgIG15Q29sbF9yZXF1aXJlZFtwYXJhbTBdID0gdHJ1ZVxcbiAgICBwYXJhbTMgPSBwYXJhbTMgIT0gbnVsbCA/IHBhcmFtMyA6IDBcXG4gICAgcGFyYW00ID0gTVlfVElDS0VUXFxuICAgIHBhcmFtNSA9IGV2YWxcXG4gICAgcmV0dXJuIG1ldGhvZF9yZXF1aXJlQ2FjaGUuaW52b2tlKGphdmFDb250ZXh0LCBwYXJhbTAsIHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMsIHBhcmFtNCwgcGFyYW01KVxcbn1cXG5yYyA9IHJlcXVpcmVDYWNoZVxcbi8vIOacgOaWsOeroOiKguinhOWImeeOr+Wig+WKq+aMgVxcbnNldExhc3RDaGFwdGVyUnVsZSA9IGZ1bmN0aW9uKHBhcmFtMCkge1xcbiAgICBpZiAocGFyYW0wLnN0YXJ0c1dpdGgoXFxcImpzOlxcXCIpKSB7XFxuICAgICAgICBwYXJhbTAgPSAnanM6JyArICQudG9TdHJpbmcoKFFJTkdfVElUTEUsIE1ZX1BBUkFNUykgPT4ge1xcbiAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL2hpamFja0Vudj9ydWxlPScgKyBRSU5HX1RJVExFKSkucnVsZSlcXG4gICAgICAgICAgICB2YXIgeyBydW5QcmVSdWxlIH0gPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9mdW5jVG9vbHM/cnVsZT0nICsgUUlOR19USVRMRSlcXG4gICAgICAgICAgICBydW5QcmVSdWxlKG9yaVJVTEUucHJlUnVsZSlcXG4gICAgICAgIH0sIFFJTkdfVElUTEUsIHsgdXJsOiBNWV9SVUxFLnVybCwgUlVMRTogYmFzZTY0RW5jb2RlKEpTT04uc3RyaW5naWZ5KGdlbk15UnVsZSgpKSksIGlzSW5kZXg6IGlzSW5kZXggfSkgKyAnOycgKyBwYXJhbTAuc2xpY2UoMylcXG4gICAgfVxcbiAgICBtZXRob2Rfc2V0TGFzdENoYXB0ZXJSdWxlLmludm9rZShqYXZhQ29udGV4dCwgcGFyYW0wKVxcbn1cXG4vLyDliqjmgIHmlrDlop7lh73mlbDliqvmjIFcXG5hZGRJdGVtQWZ0ZXIgPSBmdW5jdGlvbihwYXJhbTAsIHBhcmFtMSkge1xcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJhbTEpKSBwYXJhbTEgPSBwYXJhbTEubWFwKGhpamFja0VsKVxcbiAgICBlbHNlIHBhcmFtMSA9IGhpamFja0VsKHBhcmFtMSlcXG4gICAgbWV0aG9kX2FkZEl0ZW1BZnRlci5pbnZva2UoamF2YUNvbnRleHQsIHBhcmFtMCwgcGFyYW0xKVxcbn1cXG5hZGRJdGVtQmVmb3JlID0gZnVuY3Rpb24ocGFyYW0wLCBwYXJhbTEpIHtcXG4gICAgaWYgKEFycmF5LmlzQXJyYXkocGFyYW0xKSkgcGFyYW0xID0gcGFyYW0xLm1hcChoaWphY2tFbClcXG4gICAgZWxzZSBwYXJhbTEgPSBoaWphY2tFbChwYXJhbTEpXFxuICAgIG1ldGhvZF9hZGRJdGVtQmVmb3JlLmludm9rZShqYXZhQ29udGV4dCwgcGFyYW0wLCBwYXJhbTEpXFxufVxcbi8vQOiPnOWboiDnjq/looPliqvmjIHliqvmjIHlk6rph4zliqDkuKrov5nkuKotTOS9rFxcbnJlcXVlc3QgPSBmdW5jdGlvbihwYXJhbTAsIHBhcmFtMSwgcGFyYW0yKSB7XFxuICAgIGlmIChwYXJhbTAuaW5jbHVkZXMoXFxcImhpa2VyOi8vcGFnZS9cXFwiKSkge1xcbiAgICAgICAgbGV0IHJ1bGUgPSAocGFyYW0wLnNwbGl0KC9cXFxcPy4qcnVsZT0vKVsxXSB8fCBcXFwiXFxcIikuc3BsaXQoXFxcIiZcXFwiKVswXTtcXG4gICAgICAgIGxldCBwYWdlVXJsID0gcGFyYW0wLnNwbGl0KFxcXCJoaWtlcjovL3BhZ2UvXFxcIilbMV0uc3BsaXQoXFxcIj9cXFwiKVswXTtcXG4gICAgICAgIGlmIChydWxlICE9PSBRSU5HX1RJVExFKSB7XFxuICAgICAgICAgICAgbGV0IHJ1bGVDb2RlO1xcbiAgICAgICAgICAgIGlmICghcnVsZSB8fCBydWxlID09PSBSVUxFLnRpdGxlKSB7XFxuICAgICAgICAgICAgICAgIHJ1bGVDb2RlID0gKFJVTEUucGFnZUxpc3QgfHwgKFJVTEUucGFnZUxpc3QgPSBKU09OLnBhcnNlKFJVTEUucGFnZXMpKSkuZmluZCh2ID0+IHYucGF0aCA9PT0gcGFnZVVybCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmKHJ1bGVDb2RlKXtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHJ1bGVDb2RlKTtcXG4gICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJcXFwiO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBwYXJhbTIgPSBNWV9SVUxFO1xcbiAgICB2YXIgcmV0U3RyID0gbWV0aG9kX3JlcXVlc3QuaW52b2tlKGphdmFDb250ZXh0LCBwYXJhbTAsIHBhcmFtMSwgcGFyYW0yKTtcXG4gICAgdHJ5IHtcXG4gICAgICAgIGlmIChyZXRTdHIgaW5zdGFuY2VvZiBqYXZhLmlvLklucHV0U3RyZWFtKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHJldFN0cjtcXG4gICAgICAgIH1cXG4gICAgfSBjYXRjaCAoZSkge31cXG4gICAgcmV0dXJuIHJldFN0ciA9PSBudWxsID8gcmV0U3RyIDogcmV0U3RyICsgXFxcIlxcXCI7XFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5Ye95pWw5bel5YW3XCIsXCJwYXRoXCI6XCJmdW5jVG9vbHNcIixcInJ1bGVcIjpcImxldCB7IFFJTkdfVElUTEUsIE1ZX1JVTEUsIGlzSW5kZXggfSA9ICQuaW1wb3J0UGFyYW1cXG5pZiAoIU1ZX1JVTEUpIE1ZX1JVTEUgPSB7fVxcblxcbmZ1bmN0aW9uIHJ1bkNvZGUocnVsZSkge1xcbiAgICB0cnkge1xcbiAgICAgICAgbGV0IFtpbnB1dCwgY29kZV0gPSBydWxlLnNwbGl0KCcuanM6JylcXG4gICAgICAgIHJldHVybiBjb2RlID8gZXZhbChjb2RlKSA6IHJ1bGVcXG4gICAgfSBjYXRjaCAoZSkgeyByZXR1cm4gcnVsZSB9XFxufVxcbi8vIOmmlumhtemTvuaOpeabv+aNouWIhuexu1xcbmZ1bmN0aW9uIGluZGV4VXJsKHBhcmFtKSB7XFxuICAgIE1ZX1JVTEUgPSBKU09OLnBhcnNlKGJhc2U2NERlY29kZShNWV9SVUxFKSlcXG4gICAgbGV0IHBhZ2VOdW0gPSBwYXJzZUludChwYXJhbS5zcGxpdCgnIyMjJylbMV0pLFxcbiAgICAgICAgdXJsID0gTVlfUlVMRS51cmwsXFxuICAgICAgICB7IGZ5QWxsLCB0YWJIZWFkZXIgfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL0NsYXNzVGFiP3J1bGU9JyArIFFJTkdfVElUTEUsIE9iamVjdC5hc3NpZ24oeyBRSU5HX1RJVExFOiBRSU5HX1RJVExFIH0sIE1ZX1JVTEUpKVxcblxcbiAgICB1cmwgPSB0YWJIZWFkZXIuc2V0VXJsKGZ5QWxsID8gdXJsLnJlcGxhY2UoL2Z5QWxsL2csICckJHtmeUFsbH0nKSA6IHVybC5yZXBsYWNlKC9meShjbGFzc3xhcmVhfHllYXJ8c29ydCkvZywgJyQke2Z5JDF9JykpXFxuICAgIHVybCA9IHVybC5yZXBsYWNlKC9meXBhZ2UoPzpAKC0/XFxcXGQrKUApPyg/OlxcXFwqKFxcXFxkKylAKT8vZywgKF8sIHN0YXJ0LCBzcGFjZSkgPT4gcGFyc2VJbnQoc3RhcnQgfHwgMCkgKyAxICsgKHBhZ2VOdW0gLSAxKSAqIHBhcnNlSW50KHNwYWNlIHx8IDEpKVxcbiAgICB1cmwgPSAvXihbXFxcXHNcXFxcU10qPykoPzpcXFxcW2ZpcnN0UGFnZT0oW1xcXFxzXFxcXFNdKj8pXFxcXF0pPyg/OihcXFxcLmpzOltcXFxcc1xcXFxTXSo/KSk/JC8uZXhlYyh1cmwpXFxuICAgIGlmIChwYWdlTnVtID09IDEgJiYgdXJsWzJdKSB1cmxbMV0gPSB1cmxbMl1cXG4gICAgaWYgKHVybFszXSAmJiAhdXJsWzFdLmluY2x1ZGVzKCcuanM6JykpIHVybFsxXSArPSB1cmxbM11cXG4gICAgcmV0dXJuIHJ1bkNvZGUodXJsWzFdKVxcbn1cXG5cXG5mdW5jdGlvbiBwYXJhbUhhbmRsZSh1cmxQYXJhbSwgdWEsIHVybFRtcCkge1xcbiAgICBsZXQgY2hhcnNldCwgcGFyYW1UbXBcXG4gICAgdHJ5IHsgLy8g6ZO+5o6l55qE57yW56CB44CBVUHlkoxSZWZlcmVy5bqU6K+l5piv6aaW5YWI57un5om/6aaW6aG16ZO+5o6lXFxuICAgICAgICBbLCAsIGNoYXJzZXQsIHBhcmFtVG1wXSA9IHVybFRtcC5zcGxpdCgnOycpXFxuICAgICAgICBwYXJhbVRtcCA9IHBhcmFtVG1wLm1hdGNoKC9eeyguKil9JC8pWzFdLnNwbGl0KCcmJicpXFxuICAgIH0gY2F0Y2ggKGUpIHsgcGFyYW1UbXAgPSBbXSB9XFxuICAgIGxldCBVc2VyQWdlbnQgPSBwYXJhbVRtcC5maW5kKCh2KSA9PiB2LnN0YXJ0c1dpdGgoJ1VzZXItQWdlbnRAJykpLFxcbiAgICAgICAgUmVmZXJlciA9IHBhcmFtVG1wLmZpbmQoKHYpID0+IHYuc3RhcnRzV2l0aCgnUmVmZXJlckAnKSlcXG4gICAgdXJsUGFyYW1bMF0gPSB1cmxQYXJhbVswXSB8fCAnR0VUJ1xcbiAgICB1cmxQYXJhbVsxXSA9IHVybFBhcmFtWzFdIHx8IGNoYXJzZXQgfHwgJ1VURi04J1xcbiAgICB0cnkge1xcbiAgICAgICAgdXJsUGFyYW1bMl0gPSB1cmxQYXJhbVsyXS5tYXRjaCgvXnsoLiopfSQvKVsxXS5zcGxpdCgnJiYnKVxcbiAgICB9IGNhdGNoIChlKSB7IHVybFBhcmFtWzJdID0gW10gfVxcbiAgICAvLyDmt7vliqDlhajlsYBVQeWSjOS4iue6p1JlZmVyZXJcXG4gICAgaWYgKCF1cmxQYXJhbVsyXS5zb21lKCh2KSA9PiB2LnN0YXJ0c1dpdGgoJ1VzZXItQWdlbnRAJykpKSB7XFxuICAgICAgICBpZiAoVXNlckFnZW50KSB1cmxQYXJhbVsyXS5wdXNoKFVzZXJBZ2VudClcXG4gICAgICAgIGVsc2UgaWYgKHVhID09ICdwYycpXFxuICAgICAgICAgICAgdXJsUGFyYW1bMl0ucHVzaCgnVXNlci1BZ2VudEAnICsgUENfVUEucmVwbGFjZSgvOy9nLCAn77yb77ybJykucmVwbGFjZSgvXFxcXD8vLCAn77yf77yfJykpXFxuICAgICAgICBlbHNlIGlmICh1YSA9PSAnbW9iaWxlJylcXG4gICAgICAgICAgICB1cmxQYXJhbVsyXS5wdXNoKCdVc2VyLUFnZW50QCcgKyBNT0JJTEVfVUEucmVwbGFjZSgvOy9nLCAn77yb77ybJykucmVwbGFjZSgvXFxcXD8vLCAn77yf77yfJykpXFxuICAgIH1cXG4gICAgaWYgKFJlZmVyZXIgJiYgIXVybFBhcmFtWzJdLnNvbWUoKHYpID0+IHYuc3RhcnRzV2l0aCgnUmVmZXJlckAnKSkpXFxuICAgICAgICB1cmxQYXJhbVsyXS5wdXNoKFJlZmVyZXIpXFxuICAgIHVybFBhcmFtWzJdID0gJ3snICsgdXJsUGFyYW1bMl0uam9pbignJiYnKSArICd9J1xcbiAgICByZXR1cm4gdXJsUGFyYW0uam9pbignOycpXFxufVxcbi8vIOmihOWkhOeQhuW5tuWIneWni+WMlmNvbmZpZ1xcbmZ1bmN0aW9uIHJ1blByZVJ1bGUocnVsZSkge1xcbiAgICBpZiAoKHR5cGVvZiBNWV9QQUdFICE9ICd1bmRlZmluZWQnICYmICBNWV9QQUdFID09IDEpICYmXFxuICAgICAgICAgKGlzSW5kZXggfHwgIWdldE15VmFyKCckcHJlUnVsZV8nICsgTVlfUlVMRS50aXRsZSkpKSB7XFxuICAgICAgICBldmFsKHJ1bGUpXFxuICAgICAgICBwdXRNeVZhcignJHByZVJ1bGVfJyArIE1ZX1JVTEUudGl0bGUsICdUJylcXG4gICAgfVxcbiAgICBsZXQgX2NmZyA9IGdldE15VmFyKCdpbml0Q29uZmlnJywgJ3t9JylcXG4gICAgaWYgKF9jZmcgJiYgX2NmZy5sZW5ndGggPiAwKSB7XFxuICAgICAgICBjb25maWcgPSBKU09OLnBhcnNlKF9jZmcpXFxuICAgIH1cXG59XFxuLy8g5q2j5paH6Kej5p6Q6YCa55So5Y+Y6YePXFxuZnVuY3Rpb24gZ2VuTXlSdWxlKCkge1xcbiAgICBsZXQgUlVMRSA9IE9iamVjdC5hc3NpZ24oe30sIE1ZX1JVTEUpXFxuICAgIGRlbGV0ZSBSVUxFLmxhc3RfY2hhcHRlcl9ydWxlXFxuICAgIGRlbGV0ZSBSVUxFLnByZVJ1bGVcXG4gICAgZGVsZXRlIFJVTEUucGFnZUxpc3RcXG4gICAgZGVsZXRlIFJVTEUucGFnZXNcXG4gICAgcmV0dXJuIFJVTEVcXG59XFxuXFxuZnVuY3Rpb24gZ2VuRXhVcmwodXJsKSB7XFxuICAgIHVybCA9IHVybC5zcGxpdCgnOycpXFxuICAgIHJldHVybiB1cmwuc2hpZnQoKSArICc7JyArIHBhcmFtSGFuZGxlKHVybCwgTVlfUlVMRS51YSwgTVlfUlVMRS51cmwpXFxufVxcblxcbmhpamFja0xhenlSdWxlID0gJC50b1N0cmluZygoUUlOR19USVRMRSwgTVlfUEFSQU1TKSA9PiB7XFxuICAgIGlmICghTVlfUlVMRSkgTVlfUlVMRSA9IHt9XFxuICAgIE1ZX1BBUkFNUyA9IEpTT04ucGFyc2UoYmFzZTY0RGVjb2RlKE1ZX1BBUkFNUykpXFxuICAgIGV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL2hpamFja0Vudj9ydWxlPScgKyBRSU5HX1RJVExFKSkucnVsZSlcXG4gICAgdmFyIHtcXG4gICAgICAgIHBhcmFtSGFuZGxlLFxcbiAgICAgICAgZ2VuRXhVcmwsXFxuICAgICAgICBoaWphY2tMYXp5UnVsZSxcXG4gICAgICAgIGhpamFja0VsXFxuICAgIH0gPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9mdW5jVG9vbHM/cnVsZT0nICsgUUlOR19USVRMRSlcXG59LCBRSU5HX1RJVExFLCBiYXNlNjRFbmNvZGUoSlNPTi5zdHJpbmdpZnkoeyB1cmw6IE1ZX1JVTEUudXJsLCBSVUxFOiBiYXNlNjRFbmNvZGUoSlNPTi5zdHJpbmdpZnkoZ2VuTXlSdWxlKCkpKSwgaXNJbmRleDogaXNJbmRleCB9KSkpXFxuXFxuZnVuY3Rpb24gaGlqYWNrRWwoZWwpIHtcXG4gICAgaWYoIWVsIHx8IHR5cGVvZiBlbCAhPSAnb2JqZWN0JykgcmV0dXJuXFxuICAgIGlmICghZWwuZXh0cmEpIGVsLmV4dHJhID0ge31cXG4gICAgZWwuY29sX3R5cGUgPSBlbC5jb2xfdHlwZSB8fCBNWV9SVUxFLmNvbF90eXBlXFxuICAgIGxldCBOT1dfUlVMRSA9IE9iamVjdC5hc3NpZ24oZ2VuTXlSdWxlKCksIHsgcGFyYW1zOiBlbC5leHRyYSB9KVxcblxcbiAgICBpZiAodHlwZW9mIGVsLnVybCAhPSAnc3RyaW5nJyB8fFxcbiAgICAgICAgWyd4NV93ZWJ2aWV3X3NpbmdsZScsICdpbnB1dCddLnNvbWUoKHYpID0+IGVsLmNvbF90eXBlID09IHYpIHx8XFxuICAgICAgICBbJ+a1t+mYlOinhueVjCcsICdqYXZhc2NyaXB0OiddLnNvbWUoKHYpID0+IGVsLnVybC5zdGFydHNXaXRoKHYpKSB8fFxcbiAgICAgICAgWydydWxlJywgJ3BpY3MnLCAndG9hc3QnLCAnY29weScsICdlZGl0RmlsZScsICd4NScsICd4NVdlYlZpZXcnLCAneDVQbGF5JywgJ3dlYicsICd4NVJ1bGUnLCAnd2ViUnVsZScsXFxuICAgICAgICAgICAgJ2Rvd25sb2FkJywgJ3NoYXJlJywgJ2ZpbGVTZWxlY3QnLCAndmlkZW8nXS5zb21lKCh2KSA9PiBlbC51cmwuc3RhcnRzV2l0aCh2ICsgJzovLycpKSkge1xcbiAgICAgICAgcmV0dXJuIGVsXFxuICAgIH0gZWxzZSBpZiAoZWwudXJsLnN0YXJ0c1dpdGgoJ2lucHV0Oi8vJykpIHtcXG4gICAgICAgIGxldCBwYXJhID0gSlNPTi5wYXJzZShlbC51cmwuc2xpY2UoOCkpXFxuICAgICAgICBpZiAocGFyYS5qcykgcGFyYS5qcyA9IGhpamFja0xhenlSdWxlICsgJzsnICsgcGFyYS5qc1xcbiAgICAgICAgZWwudXJsID0gJ2lucHV0Oi8vJyArIEpTT04uc3RyaW5naWZ5KHBhcmEpXFxuICAgICAgICByZXR1cm4gZWxcXG4gICAgfSBlbHNlIGlmIChlbC51cmwuc3RhcnRzV2l0aCgnY29uZmlybTovLycpKSB7XFxuICAgICAgICBsZXQgcmVJbmRleCA9IGVsLnVybC5pbmRleE9mKCcuanM6JylcXG4gICAgICAgIGlmIChyZUluZGV4ID49IDApIGVsLnVybCA9IGVsLnVybC5zbGljZSgwLCByZUluZGV4KSArICcuanM6JyArIGhpamFja0xhenlSdWxlICsgJzsnICsgZWwudXJsLnNsaWNlKHJlSW5kZXggKyA0KVxcbiAgICAgICAgcmV0dXJuIGVsXFxuICAgIH0gZWxzZSBpZiAoZWwudXJsLnN0YXJ0c1dpdGgoJ3NlbGVjdDovLycpKSB7XFxuICAgICAgICBsZXQgcGFyYSA9IEpTT04ucGFyc2UoZWwudXJsLnNsaWNlKDkpKVxcbiAgICAgICAgaWYgKHBhcmEuanMpIHBhcmEuanMgPSBoaWphY2tMYXp5UnVsZSArICc7JyArIHBhcmEuanNcXG4gICAgICAgIGVsLnVybCA9ICdzZWxlY3Q6Ly8nICsgSlNPTi5zdHJpbmdpZnkocGFyYSlcXG4gICAgICAgIHJldHVybiBlbFxcbiAgICB9IGVsc2UgaWYgKGVsLnVybC5pbmNsdWRlcygnQHJ1bGU9JykpIHtcXG4gICAgICAgIGxldCBbXywgdXJsLCBydWxlXSA9IGVsLnVybC5tYXRjaCgvXihbXFxcXHNcXFxcU10qPylAcnVsZT0oW1xcXFxzXFxcXFNdKikkLylcXG4gICAgICAgIGVsLnVybCA9IHVybFxcbiAgICAgICAgTk9XX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSA9IHJ1bGVcXG4gICAgICAgIE5PV19SVUxFLmRldGFpbF9jb2xfdHlwZSA9IE1ZX1JVTEUuY29sX3R5cGVcXG4gICAgfSBlbHNlIGlmIChlbC51cmwuc3RhcnRzV2l0aCgnaGlrZXI6Ly9wYWdlLycpKSB7XFxuICAgICAgICBpZiAoZWwudXJsLmluY2x1ZGVzKCdydWxlPScpIHx8IGVsLmV4dHJhLnJ1bGUpXFxuICAgICAgICAgICAgcmV0dXJuIGVsXFxuICAgICAgICBsZXQgW18sIHBhdGgsIGZsYWcsIHBhcmFtc10gPSBlbC51cmwubWF0Y2goL15oaWtlcjpcXFxcL1xcXFwvcGFnZVxcXFwvKC4rPykoIy4qPyk/KD86XFxcXD8oLiopKT8kLyksXFxuICAgICAgICAgICAgc3ViUGFnZSA9IE1ZX1JVTEUucGFnZUxpc3QuZmluZCgodikgPT4gdi5wYXRoID09IHBhdGgpLFxcbiAgICAgICAgICAgIHN1YlVybCA9IChwYXJhbXMgfHwgJycpLnNwbGl0KCcmJykuZmluZCgodikgPT4gdi5zdGFydHNXaXRoKCd1cmw9JykpXFxuICAgICAgICBlbC51cmwgPSAoc3ViVXJsID8gc3ViVXJsLnNsaWNlKDQpLnJlcGxhY2UoL++8n++8ny9nLCAnPycpLnJlcGxhY2UoL++8hu+8hi9nLCAnJicpIDogKGVsLmV4dHJhIHx8IHt9KS51cmwpIHx8ICdoaWtlcjovL2VtcHR5JyArIGZsYWcgKyAnPycgKyAocGFyYW1zIHx8ICcnKVxcbiAgICAgICAgTk9XX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSA9IHN1YlBhZ2UucnVsZVxcbiAgICAgICAgTk9XX1JVTEUuZGV0YWlsX2NvbF90eXBlID0gc3ViUGFnZS5jb2xfdHlwZVxcbiAgICB9IGVsc2UgaWYgKGVsLnVybC5pbmNsdWRlcygnQGxhenlSdWxlPScpKSB7XFxuICAgICAgICBsZXQgcmVJbmRleCA9IGVsLnVybC5pbmRleE9mKCcuanM6JylcXG4gICAgICAgIGlmIChyZUluZGV4ID49IDApIGVsLnVybCA9IGVsLnVybC5zbGljZSgwLCByZUluZGV4KSArICcuanM6JyArIGhpamFja0xhenlSdWxlICsgJzsnICsgZWwudXJsLnNsaWNlKHJlSW5kZXggKyA0KVxcbiAgICAgICAgcmV0dXJuIGVsXFxuICAgIH0gZWxzZSBpZiAoaXNJbmRleCkge1xcbiAgICAgICAgaWYgKCFNWV9SVUxFLmRldGFpbF9maW5kX3J1bGUgfHwgL2hpa2VyOlxcXFwvXFxcXC8oPyFlbXB0eS4rJCkvLnRlc3QoZWwudXJsKSkgcmV0dXJuIGVsXFxuICAgIH0gZWxzZSB7XFxuICAgICAgICByZXR1cm4gZWxcXG4gICAgfVxcbiAgICBlbC5leHRyYSA9IE9iamVjdC5hc3NpZ24oe30sIGVsLmV4dHJhLCB7XFxuICAgICAgICB1cmw6IGdlbkV4VXJsKGVsLnVybCksXFxuICAgICAgICBSVUxFOiBiYXNlNjRFbmNvZGUoSlNPTi5zdHJpbmdpZnkoTk9XX1JVTEUpKSxcXG4gICAgICAgIHBhZ2VUaXRsZTogaXNJbmRleCAmJiBlbC50aXRsZVxcbiAgICB9KVxcbiAgICBlbC51cmwgPSAnaGlrZXI6Ly9wYWdlL2ZyYW1lTG9hZD9ydWxlPScgKyBRSU5HX1RJVExFXFxuICAgIHJldHVybiBlbFxcbn1cXG4kLmV4cG9ydHMgPSB7XFxuICAgIHJ1bkNvZGU6IHJ1bkNvZGUsXFxuICAgIGluZGV4VXJsOiBpbmRleFVybCxcXG4gICAgcGFyYW1IYW5kbGU6IHBhcmFtSGFuZGxlLFxcbiAgICBydW5QcmVSdWxlOiBydW5QcmVSdWxlLFxcbiAgICBnZW5NeVJ1bGU6IGdlbk15UnVsZSxcXG4gICAgZ2VuRXhVcmw6IGdlbkV4VXJsLFxcbiAgICBoaWphY2tMYXp5UnVsZTogaGlqYWNrTGF6eVJ1bGUsXFxuICAgIGhpamFja0VsOiBoaWphY2tFbFxcbn1cXG5cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIua8q+eUu+ino+aekCpcIixcInBhdGhcIjpcImpzXCIsXCJydWxlXCI6XCJmdW5jdGlvbiDniLHnsbPmjqjnsbsoaW5wdXQpIHtcXG5cXHR0cnl7XFxuICAgICAgICB2YXIgdXJsID0gaW5wdXRcXG4gICAgICAgIC5yZXBsYWNlKCdtLid8fCdtaC4nfHwnd2FwLicsICd3d3cuJylcXG4gICAgICAgIC5yZXBsYWNlKCdpa3IuJywgJ2ljZWtyLicpO1xcbiAgICAgICAgdmFyIGh0bWwgPSByZXF1ZXN0KHVybCwge1xcbiAgICBoZWFkZXJzOiB7XFxuICAgICAgICAnVXNlci1BZ2VudCc6IFBDX1VBLFxcbiAgICAgICAgJ1JlZmVyZXInOiB1cmxcXG4gICAgfVxcbn0pXFxuICAgIGV2YWwocGRmaChwZGZhKGh0bWwsICdib2R5JiZzY3JpcHQ6bm90KFtzcmNdKTpub3QoW3R5cGVdKScpWzBdLCAnc2NyaXB0JiZIdG1sJykpO1xcbiAgICB2YXIgcGljcyA9IFtdO1xcbiAgICBpZiAoY2hhcHRlckltYWdlcy5sZW5ndGggPiAwKSB7XFxuICAgICAgICB2YXIgaG9zdCA9IHJlcXVlc3QoaW5wdXQpLm1hdGNoKC9pbWcgc3JjPVxcXCIoLio/KVxcXFwvaW1hZ2UvKVsxXTtcXG4gICAgICAgIGNoYXB0ZXJJbWFnZXMuZm9yRWFjaChpbWcgPT4ge1xcbiAgICAgICAgICAgIGlmIChpbWcuaW5kZXhPZihcXFwiaHR0cFxcXCIpID4gLTEpIHtcXG4gICAgICAgICAgICBwaWNzLnB1c2goaW1nICsgJ0BSZWZlcmVyPScgKyB1cmwpXFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBwaWNzLnB1c2goaG9zdCArIGltZyArICdAUmVmZXJlcj0nICsgdXJsKVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuICAgIH0gZWxzZSB7XFxuICAgICAgICB2YXIgaHRtbCA9IHJlcXVlc3QoaW5wdXQpO1xcbiAgICAgICAgdmFyIHBpY3MgPSBbXTtcXG4gICAgICAgIGlmKC9rX3RvdGFsLy50ZXN0KGh0bWwpKXtcXG4gICAgICAgICAgICB2YXIgUGFnZSA9IHBkZmgoaHRtbCwgJyNrX3RvdGFsJiZUZXh0Jyk7XFxuICAgICAgICAgICAgaWYoUGFnZS5sZW5ndGggPiAwKXtcXG4gICAgICAgICAgICAgICAgdmFyIGhvc3QgPSBodG1sLm1hdGNoKC9taXAtaW1nIHNyYz1cXFwiKC4qPylpbWFnZS8pWzFdO1xcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgUGFnZTsgaSsrKSB7XFxuICAgICAgICBwaWNzLnB1c2goaG9zdCArICdpbWFnZS92aWV3LycgKyBpbnB1dC5tYXRjaCgvXFxcXGQrLylbMF0gKyAnLycgKyBpICsgJy53ZWJwJysgJ0BSZWZlcmVyPScpXFxuICAgICAgICAgICAgfVxcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgdmFyIHJlczEgPSB7fTtcXG4gICAgICAgIHZhciBkMSA9IFtdO1xcbiAgICAgICAgdmFyIGpzSHRtbCA9IGZldGNoKGlucHV0LCB7XFxuICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICBcXFwiY29udGVudC10eXBlXFxcIjogXFxcIlVURi04XFxcIixcXG4gICAgICAgICAgICAgICAgXFxcIlVzZXItQWdlbnRcXFwiOiBcXFwiTW9iaWxlXFxcIlxcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgbWV0aG9kOiBcXFwiR0VUXFxcIlxcbiAgICAgICAgfSk7XFxuICAgICAgICB2YXIgcGljcyA9IFtdO1xcbiAgICAgICAgZm9yICh2YXIgayA9IDE7OyBrKyspIHtcXG4gICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICB2YXIganNIdG1sID0gZmV0Y2goaW5wdXQuc3BsaXQoXFxcIi5odG1sXFxcIilbMF0gKyBcXFwiLVxcXCIgKyBrICsgXFxcIi5odG1sXFxcIiwge1xcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJjb250ZW50LXR5cGVcXFwiOiBcXFwiVVRGLThcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogXFxcIk1vYmlsZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IFxcXCJHRVRcXFwiXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBsZXQgcGFnZSA9IHBkZmgoanNIdG1sLCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgICAgIGlmIChwYWdlICYmIHBhZ2UuaW5jbHVkZXMoXFxcIi9cXFwiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgcGFnZSA9IHBhcnNlSW50KHBhZ2Uuc3BsaXQoXFxcIi9cXFwiKVsxXSk7XFxuICAgICAgICAgICAgICAgICAgICB2YXIganNVcmwgPSBwYXJzZURvbUZvckh0bWwoanNIdG1sLCBcXFwiLmVyUGFnJiZtaXAtaW1nfHxpbWcmJnNyY1xcXCIpKyAnQFJlZmVyZXI9JztcXG4gICAgICAgICAgICAgICAgICAgIGlmIChqc1VybC5pbmRleE9mKFxcXCJwbmdcXFwiKSA+IC0xKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIGxldCB1cmxzID0gW107XFxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMjsgaSA8PSBwYWdlOyBpKyspIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmxzLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IGlucHV0LnNwbGl0KFxcXCIuaHRtbFxcXCIpWzBdICsgXFxcIi1cXFwiICsgaSArIFxcXCIuaHRtbFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiY29udGVudC10eXBlXFxcIjogXFxcIlVURi04XFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6IFxcXCJNb2JpbGVcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBcXFwiR0VUXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIGxldCBodG1scyA9IGJmKHVybHMpO1xcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBodG1scy5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBqc1VybCA9IHBhcnNlRG9tRm9ySHRtbChodG1sc1tpXSwgXFxcIi5lclBhZyYmbWlwLWltZ3x8aW1nJiZzcmNcXFwiKSsgJ0BSZWZlcmVyPSc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpzVXJsLmluZGV4T2YoXFxcInBuZ1xcXCIpID4gLTEpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBwaWNzLnB1c2goanNVcmwpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHZhciBqc1VybCA9IHBhcnNlRG9tRm9ySHRtbChqc0h0bWwsIFxcXCIuZXJQYWcmJm1pcC1pbWd8fGltZyYmc3JjXFxcIikrICdAUmVmZXJlcj0nO1xcbiAgICAgICAgICAgICAgICBpZiAoanNVcmwuaW5kZXhPZihcXFwicG5nXFxcIikgPiAtMSkge1xcbiAgICAgICAgICAgICAgICAgICAgYnJlYWtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHBpY3MucHVzaChqc1VybCk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgIGJyZWFrXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICB9XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHZhciBsaXN0ID0gcGRmYShodG1sLCAnYm9keSYmLnNjcm9sbC1pdGVtfHwuaW1hZ2UtY29udGVudHx8I3Njcm9sbC1pbWFnZScpO1xcbiAgICAgICAgdmFyIGZpcnN0ID0gcGRmYShodG1sLCAnYm9keSYmI2ltYWdlJyk7XFxuICAgICAgICBsaXN0ID0gZmlyc3QuY29uY2F0KGxpc3QpO1xcbiAgICAgICAgbGlzdC5mb3JFYWNoKGltZyA9PiB7XFxuICAgICAgICAgICAgcGljcy5wdXNoKHBkZmgoaW1nLCAnaW1nJiZkYXRhLXNyY3x8c3JjJykgKyAnQFJlZmVyZXI9JyArIGlucHV0KVxcbiAgICAgICAgfSlcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICB9IGNhdGNoKGUpIHtcXG4gICAgICAgIHZhciBodG1sID0gcmVxdWVzdChpbnB1dCk7XFxuICAgICAgICB2YXIgcGljcyA9IFtdO1xcbiAgICAgICAgdmFyIGxpc3QgPSBwZGZhKGh0bWwsICdib2R5JiYuc2Nyb2xsLWl0ZW18fC5pbWFnZS1jb250ZW50fHwjc2Nyb2xsLWltYWdlJyk7XFxuICAgICAgICB2YXIgZmlyc3QgPSBwZGZhKGh0bWwsICdib2R5JiYjaW1hZ2UnKTtcXG4gICAgICAgIGxpc3QgPSBmaXJzdC5jb25jYXQobGlzdCk7XFxuICAgICAgICBsaXN0LmZvckVhY2goaW1nID0+IHtcXG4gICAgICAgICAgICBwaWNzLnB1c2gocGRmaChpbWcsICdpbWcmJmRhdGEtc3JjfHxzcmMnKSArICdAUmVmZXJlcj0nICsgaW5wdXQpXFxuICAgICAgICB9KVxcbiAgICB9XFxuICAgIHJldHVybiBcXFwicGljczovL1xcXCIgKyBwaWNzLmpvaW4oXFxcIiYmXFxcIilcXG59XFxuJC5leHBvcnRzLmp4PeeIseexs+aOqOexuztcXG5cXG5mdW5jdGlvbiDljIXlrZAoaW5wdXQpIHtcXG4gICAgdmFyIGlkID0gdHJ1ZTtcXG4gICAgdmFyIGNvZGUgPSByZXF1ZXN0KGlucHV0KVxcbiAgICB2YXIgcGljcyA9IFtdO1xcbiAgICB2YXIgdG9fUmVwZWF0ID0gZmFsc2U7XFxuXFxuXFxuICAgIHdoaWxlIChpZCkge1xcbiAgICAgICAgcGRmYShjb2RlLCBcXFwiLmNoYXB0ZXItbWFpbiYmYW1wLWltZ1xcXCIpXFxuICAgICAgICAgICAgLmZvckVhY2goZGF0YSA9PiBwaWNzLnB1c2gocGRmaChkYXRhLCBcXFwiYW1wLWltZyYmc3JjXFxcIikgKyAnQFJlZmVyZXI9aHR0cHM6Ly93d3cud2VibW90YS5jb20vJykpO1xcbiAgICAgICAgdmFyIG5leHRfUGFnZSA9IHBkZmgoY29kZSwgXFxcIi5uZXh0X2NoYXB0ZXIsLTEmJkh0bWxcXFwiKVxcbiAgICAgICAgaWYgKG5leHRfUGFnZS5pbmNsdWRlcygn5LiL5LiA6aG1JykpIHtcXG4gICAgICAgICAgICBjb2RlID0gcmVxdWVzdChwZGZoKG5leHRfUGFnZSwgXFxcImEmJmhyZWZcXFwiKSlcXG4gICAgICAgICAgICB0b19SZXBlYXQgPSB0cnVlO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBpZCA9IGZhbHNlO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIC8v5Y676Zmk6YeN5aSN5Zu+54mHXFxuICAgIGlmICh0b19SZXBlYXQpIHtcXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGljcy5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgIHdoaWxlIChwaWNzLmluZGV4T2YocGljc1tpXSwgaSArIDEpICE9IC0xKSB7XFxuICAgICAgICAgICAgICAgIHBpY3Muc3BsaWNlKHBpY3MuaW5kZXhPZihwaWNzW2ldLCBpICsgMSksIDEpXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIHJldHVybiBcXFwicGljczovL1xcXCIgKyBwaWNzLmpvaW4oXFxcIiYmXFxcIik7XFxufVxcbiQuZXhwb3J0cy5iej3ljIXlrZA7XFxuXFxuZnVuY3Rpb24g5Y+k6aOOKGlucHV0KSB7XFxuXFx0dmFyIGh0bWwgPSBmZXRjaFBDKGlucHV0KTtcXG5cXHRldmFsKHBkZmgocGRmYShodG1sLCAnYm9keSYmc2NyaXB0Om5vdChbc3JjXSk6bm90KFt0eXBlXSknKVswXSwgJ3NjcmlwdCYmSHRtbCcpKTtcXG5cXHR2YXIgcGljcyA9IFtdO1xcblxcdGZvciAodmFyIGkgaW4gY2hhcHRlckltYWdlcykge1xcblxcdFxcdHBpY3MucHVzaCgnaHR0cHM6Ly9yZXMueGlhb3FpbnJlLmNvbS8nICsgY2hhcHRlclBhdGggKyBjaGFwdGVySW1hZ2VzW2ldICsgJ0BSZWZlcmVyPWh0dHBzOi8vd3d3LjEyM2dmLmNvbScpXFxuXFx0XFx0fVxcblxcdHJldHVybiBcXFwicGljczovL1xcXCIgKyBwaWNzLmpvaW4oXFxcIiYmXFxcIilcXG59XFxuJC5leHBvcnRzLkdGPeWPpOmjjjtcXG5cXG5mdW5jdGlvbiDniLHnsbMoaW5wdXQpIHtcXG4gICAgICAgIHZhciBodG1sID0gcmVxdWVzdChpbnB1dCk7XFxuICAgICAgICB2YXIgcGljcyA9IFtdO1xcbiAgICAgICAgdmFyIGxpc3QgPSBwZGZhKGh0bWwsICdib2R5JiYuc2Nyb2xsLWl0ZW18fC5pbWFnZS1jb250ZW50fHwjc2Nyb2xsLWltYWdlJyk7XFxuICAgICAgICB2YXIgZmlyc3QgPSBwZGZhKGh0bWwsICdib2R5JiYjaW1hZ2UnKTtcXG4gICAgICAgIGxpc3QgPSBmaXJzdC5jb25jYXQobGlzdCk7XFxuICAgICAgICBsaXN0LmZvckVhY2goaW1nID0+IHtcXG4gICAgICAgICAgICBwaWNzLnB1c2gocGRmaChpbWcsICdpbWcmJmRhdGEtc3JjfHxzcmMnKSArICdAUmVmZXJlcj0nICsgaW5wdXQpXFxuICAgICAgICB9KVxcbiAgICAgICAgcmV0dXJuIFxcXCJwaWNzOi8vXFxcIiArIHBpY3Muam9pbihcXFwiJiZcXFwiKVxcbn1cXG4kLmV4cG9ydHMuSU0954ix57GzO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5LqR5Y+j5LukKlwiLFwicGF0aFwiOlwiaW1wb3J0XCIsXCJydWxlXCI6XCJ3cml0ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvL3J1bGVzL1R6L0pNJyxmZXRjaChpbnB1dCkpXFxuJ3RvYXN0Oi8v5bey5LuO5LqR5Y+j5Luk6I635Y+W6ZiF5ryr5ZCb5rqQJ1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5pu05paw6K+m5oOFKlwiLFwicGF0aFwiOlwiVXBcIixcInJ1bGVcIjpcImpzOlxcbnZhciByZXMgPSB7fTtcXG52YXIgaXRlbXMgPSBbXTtcXG52YXIgaW1nID0gJ2h0dHBzOi8vYmluZy5pbWcucnVuLzEzNjZ4NzY4LnBocCc7XFxuaXRlbXMucHVzaCh7XFxuICAgIGltZzogaW1nLFxcbiAgICB1cmw6IGltZyArIFxcXCIjLmpwZ1xcXCIsXFxuICAgIGRlc2M6ICcwJyxcXG4gICAgY29sX3R5cGU6ICdjYXJkX3BpY18xJ1xcbn0pO1xcblxcbml0ZW1zLnB1c2goe1xcbiAgICB0aXRsZTogXFxcIuKAnOKAnOKAneKAnTxoND7jgJDpmIXmvKvlkJvlj43ppojmlLbpm4bjgJE8L2g0PlxcXCIgKyAnPHNwYW4gc3R5bGU9XFxcImNvbG9yOiBncmV5XFxcIj7lsI/lsI88L3NwYW4+JyxcXG4gICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL21hbmFnZVJ1bGUjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjP3J1bGU96YGT6ZW/5LuT5bqTUHJvXFxcIixcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIGx2ZXI6IE1ZX1BBUkFNUy52ZXJzaW9uIHx8IFxcXCLojrflj5bniYjmnKzlpLHotKXvvIzoh6rooYzmn6XnnItcXFwiLFxcbiAgICAgICAgaWQ6IFxcXCI2NzkxXFxcIlxcbiAgICB9XFxufSk7XFxuXFxuaWYgKGdldEl0ZW0oXFxcInJlYWRfcG9saWN5XFxcIikgIT09IFxcXCIxXFxcIikge1xcbiAgICBpdGVtcy5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPHNtYWxsPjxmb250IGNvbG9yPSM4NzFmNzg+5pys6KeE5YiZ5pWw5o2u5p2l5rqQ5LqO572R57uc77yM5aaC5oKo5Zac5qyi77yM6K+35pSv5oyB5a6Y5pa5PC9mb250Pjwvc21hbGw+JyxcXG4gICAgICAgIGRlc2M6ICfigJzigJzigJ3igJ08c21hbGw+PGZvbnQgY29sb3I9I2YyMGMwMD7mnKzop4TliJnku4XpmZDlhY3otLnlrabkuaDkuqTmtYHkvb/nlKjvvIzor7fkuo7lr7zlhaXlkI4yNOWwj+aXtuWGheWIoOmZpO+8jOS7u+S9lee7hOe7h+aIluS4quS6uuS4jeW+l+S7peS7u+S9leaWueW8j+aWueazleS8oOaSreaIluWUruWNluatpOinhOWImeeahOaVtOS9k+aIlumDqOWIhu+8gTwvZm9udD48L3NtYWxsPicsXFxuICAgICAgICB1cmw6ICQoJyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKCkgPT4ge1xcbiAgICAgICAgICAgIHNldEl0ZW0oXFxcInJlYWRfcG9saWN5XFxcIiwgXFxcIjFcXFwiKVxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/kvaDlt7LlkIzmhI/or6XljY/orq5cXFwiXFxuICAgICAgICB9KSxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXG4gICAgfSlcXG59XFxuXFxuaXRlbXMucHVzaCh7XFxuICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPGI+5L2/55So6K+05piOPC9iPicsXFxuICAgIHVybDogXFxcIuWIh+aNouWIhue7hOaQnOe0ouWNs+WPr1xcXCIsXFxuICAgIGNvbF90eXBlOiBcXFwidGV4dF8yXFxcIlxcbn0pO1xcblxcbmxldCBuZXdWZXJzaW9uO1xcbmxldCBteVZlcnNpb24gPSBNWV9QQVJBTVMudmVyc2lvbjtcXG50cnkge1xcbiAgICBuZXdWZXJzaW9uID0gSlNPTi5wYXJzZShmZXRjaFBDKFxcXCJodHRwOi8vaGlrZXIubm9raWEucHJlc3MvaGlrZXJ1bGUvZGV2L2dldGJ5aWQ/aWQ9Njc0OVxcXCIsIHtcXG4gICAgICAgIHRpbWVvdXQ6IDEwMDBcXG4gICAgfSkpLnJlc3VsdC52ZXI7XFxufSBjYXRjaCAoZSkge1xcbiAgICB0b2FzdChcXFwi6YGT6ZW/5LuT5bqT5oq96aOO5LqG77yM5pys5qyh5pyq5qOA5rWL5Yiw5paw54mI5L+h5oGvXFxcIik7XFxuICAgIG5ld1ZlcnNpb24gPSBteVZlcnNpb247XFxufVxcbmxldCBpc1VwZGF0ZSA9IE51bWJlcihuZXdWZXJzaW9uKSA+IE51bWJlcihteVZlcnNpb24pO1xcbmxldCBpc1ZlciA9IE51bWJlcihuZXdWZXJzaW9uKSA9PT0gTnVtYmVyKG15VmVyc2lvbik7XFxuaWYgKGlzVXBkYXRlKSB7XFxuICAgIGxvZygn5pyJ5paw54mI5pysOicgKyBuZXdWZXJzaW9uICsgJyzlvZPliY06JyArIG15VmVyc2lvbik7XFxufVxcbml0ZW1zLnB1c2goe1xcbiAgICB0aXRsZTogaXNVcGRhdGUgPyBcXFwi8J+GmeaWsOeJiOacrFxcXCIgOiBcXFwi6KeE5YiZ5Y+R5biD6aG1JuWPjemmiFxcXCIsXFxuICAgIHVybDogaXNVcGRhdGUgPyBcXFwicnVsZTovLzVyVzM2WmlVNktlRzU1V002YWFXNmFHMTZhS1I2WUdUNktlRTVZaVo0NENRNklHYTVyeXI4SitVcnVPQWtlKy9wV2h2YldWZmNuVnNaVjkxY216dnY2Vm9kSFJ3T2k4dmFHbHJaWEl1Ym05cmFXRXVjSEpsYzNNdmFHbHJaWEoxYkdVdmNuVnNaV3hwYzNRdWFuTnZiajlwWkQweU9EUTNcXFwiIDogXFxcImhpa2VyOi8vcGFnZS9tYW5hZ2VSdWxlI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5Iz9ydWxlPemBk+mVv+S7k+W6k1Byb1xcXCIsXFxuICAgIGNvbF90eXBlOiBcXFwidGV4dF8yXFxcIixcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIGx2ZXI6IE1ZX1BBUkFNUy52ZXJzaW9uIHx8IFxcXCLojrflj5bniYjmnKzlpLHotKXvvIzoh6rooYzmn6XnnItcXFwiLFxcbiAgICAgICAgaWQ6IFxcXCI2NzkxXFxcIlxcbiAgICB9XFxufSk7XFxuY29uc3QgQ29sb3IgPSBcXFwiIzE5Qjg5RFxcXCI7XFxudmFyIGRlc19kZXNjID0gXFxuJzxoMSBzdHlsZT1cXFwidGV4dC1hbGlnbjogY2VudGVyO1xcXCI+8J+QvuabtOaWsFsyMDI0MDYwMl08L2gxPicgK1xcbiAgICAnPDxibG9ja3F1b3RlPjxmb250IGNvbG9yPVxcXCJyZWRcXFwiPuKRoOWJlOmZpOWkseaViOa6kO+8jOa8q+ibmS/mi7fotJ3lm73lhoUv5YiG57G7L+aQnOe0ouS/ruWkjTwvYnI+PC88YmxvY2txdW90ZT4nICtcXG5cXG4nPGgxIHN0eWxlPVxcXCJ0ZXh0LWFsaWduOiBjZW50ZXI7XFxcIj7wn5C+5pu05pawWzExMDVdPC9oMT4nICtcXG4gICAgJzw8YmxvY2txdW90ZT48Zm9udCBjb2xvcj1cXFwicmVkXFxcIj7ikaDmm7TmjaLov5znqIvku5PlupPvvIzkvJjljJbliqDovb3pgJ/luqYg5bm25aKe5Yqg5pu05paw6ZW/5oyJ6KeE5YiZ5ZCNIOa4hemZpOe8k+WtmOWNs+WPrzwvYnI+4pGh5L+u5aSN5ryr6JuZ5Zu+5rqQ5Yqg6L295LiN5Ye65p2lPGJyPjwvPGJsb2NrcXVvdGU+JyArXFxuXFxuJzxoMSBzdHlsZT1cXFwidGV4dC1hbGlnbjogY2VudGVyO1xcXCI+8J+QvuabtOaWsFsyMzEwMjNdPC9oMT4nICtcXG4gICAgJzw8YmxvY2txdW90ZT48Zm9udCBjb2xvcj1cXFwicmVkXFxcIj7ikaDlop7liqDmvKvnpZ4v6YeO6Juu5ryr55S7PC9icj48YnI+4pGh5LyY5YyW6ZiF5ryr5ZCb5pys5L2T77yM5LiO5pen6KeE5YiZ5LiN5YW85a6577yM6ZyA5Yig6Zmk5pu05paw6KeE5YiZ5pys5ZywPC9icj48YnI+4pGi5YmU6Zmk5peg55So5rqQ77yM5L+u5aSN6YOo5YiG5rqQ5oql6ZSZPC9icj48LzxibG9ja3F1b3RlPidcXG5cXG5pdGVtcy5wdXNoKHtcXG4gICAgdGl0bGU6ICfmm7TmlrDor6bmg4UgPHNtYWxsPjxzbWFsbD48c3BhbiBzdHlsZT1cXFwiY29sb3I6IzE5Qjg5RFxcXCI+5bGV5byAPjwvc3Bhbj48L3NtYWxsPjwvc21hbGw+JyxcXG4gICAgaW1nOiBcXFwiaHR0cHM6Ly9sYW5tZWlndW9qaWFuZy5jb20vdHViaWFvL21vcmUvMTk3LnBuZ1xcXCIsXFxuICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoamppZCwgZGVjaWQsIGRlc19kZXNjKSA9PiB7XFxuICAgICAgICBpZiAoZ2V0TXlWYXIoXFxcImpqc1xcXCIsIFxcXCLmlLbotbdcXFwiKSA9PSBcXFwi5pS26LW3XFxcIikge1xcbiAgICAgICAgICAgIHB1dE15VmFyKFxcXCJqanNcXFwiLCBcXFwi5bGV5byAXFxcIik7XFxuXFxuICAgICAgICAgICAgdXBkYXRlSXRlbSh7XFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBpZDogamppZFxcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+abtOaWsOivpuaDhSA8c21hbGw+PHNtYWxsPjxzcGFuIHN0eWxlPVxcXCJjb2xvcjojMTlCODlEXFxcIj7mlLbotbc+PC9zcGFuPjwvc21hbGw+PC9zbWFsbD4nXFxuICAgICAgICAgICAgfSlcXG5cXG4gICAgICAgICAgICB1cGRhdGVJdGVtKHtcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIHRleHRTaXplOiAxNCxcXG4gICAgICAgICAgICAgICAgICAgIGxpbmVTcGFjaW5nOiAzLFxcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGRlY2lkXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIHRpdGxlOiAnPHNwYW4gc3R5bGU9XFxcImNvbG9yOiM4MDgwODBcXFwiPicgKyBkZXNfZGVzYyArICc8L3NwYW4+J1xcbiAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBwdXRNeVZhcihcXFwiampzXFxcIiwgXFxcIuaUtui1t1xcXCIpO1xcblxcbiAgICAgICAgICAgIHVwZGF0ZUl0ZW0oe1xcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGpqaWRcXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfmm7TmlrDor6bmg4U8c21hbGw+PHNtYWxsPjxzcGFuIHN0eWxlPVxcXCJjb2xvcjojMTlCODlEXFxcIj7lsZXlvIA+PC9zcGFuPjwvc21hbGw+PC9zbWFsbD4nXFxuICAgICAgICAgICAgfSlcXG5cXG4gICAgICAgICAgICB1cGRhdGVJdGVtKHtcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIHRleHRTaXplOiAxNCxcXG4gICAgICAgICAgICAgICAgICAgIGxpbmVTcGFjaW5nOiAzLFxcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGRlY2lkXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIHRpdGxlOiAnPHNwYW4gc3R5bGU9XFxcImNvbG9yOiM4MDgwODBcXFwiPicgKyBkZXNfZGVzYy5zdWJzdHIoMCwgMTUwKVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgfVxcblxcbiAgICB9LCBNWV9SVUxFICsgXFxcIl9qamlkXFxcIiwgTVlfUlVMRSArIFxcXCJfZGVjaWRcXFwiLCBkZXNfZGVzYyksXFxuICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIixcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIGlkOiBNWV9SVUxFICsgXFxcIl9qamlkXFxcIlxcbiAgICB9XFxufSk7XFxuXFxuaXRlbXMucHVzaCh7XFxuICAgIHRpdGxlOiAnPHNwYW4gc3R5bGU9XFxcImNvbG9yOiM4MDgwODBcXFwiPicgKyBkZXNfZGVzYy5zdWJzdHIoMCwgMTUwKSxcXG4gICAgY29sX3R5cGU6IFxcXCJyaWNoX3RleHRcXFwiLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgdGV4dFNpemU6IDE0LFxcbiAgICAgICAgbGluZVNwYWNpbmc6IDMsXFxuICAgICAgICBpZDogTVlfUlVMRSArIFxcXCJfZGVjaWRcXFwiXFxuICAgIH1cXG59KTtcXG5cXG5yZXMuZGF0YSA9IGl0ZW1zO1xcbnNldEhvbWVSZXN1bHQocmVzKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuS9v+eUqOW4ruWKqSpcIixcInBhdGhcIjpcIkhlbHBcIixcInJ1bGVcIjpcImpzOlxcbnZhciByZXMgPSB7fTtcXG52YXIgaXRlbXMgPSBbXTtcXG5cXG5pdGVtcy5wdXNoKHtcXG4gICAgdGl0bGU6J+S6jOe6p+mhtemdouagh+mimOWPjOWHu+S8mOWMlu+8jOWcqOmhtumDqOWImeWPjOWHu+WIsOW6lemDqO+8jOWQpuWImeWPjOWHu+WbnumhtumDqCcsXFxuICAgIGNvbF90eXBlOiAncmljaF90ZXh0J1xcbn0pO1xcblxcbml0ZW1zLnB1c2goe1xcbiAgICBpbWc6ICdodHRwczovL3MxLmF4MXguY29tLzIwMjIvMTEvMDQveExoZ29SLmpwZycsXFxuICAgIGRlc2M6ICcwJyxcXG4gICAgY29sX3R5cGU6ICdwaWNfMV9mdWxsJ1xcbn0pO1xcblxcbml0ZW1zLnB1c2goe1xcbiAgICBpbWc6ICdodHRwczovL3MxLmF4MXguY29tLzIwMjIvMTEvMDQveExoY3c5LmpwZycsXFxuICAgIGRlc2M6ICcwJyxcXG4gICAgY29sX3R5cGU6ICdwaWNfMV9mdWxsJ1xcbn0pO1xcblxcbnJlcy5kYXRhID0gaXRlbXM7XFxuc2V0SG9tZVJlc3VsdChyZXMpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5pCc57SiKlwiLFwicGF0aFwiOlwic2VhcmNoXCIsXCJydWxlXCI6XCJmdW5jdGlvbiBjb252ZXJ0MShzdHIpIHtcXG4gICAgbGV0IGMgPSBzdHIuc3BsaXQoXFxcIjtcXFwiKVxcbiAgICByZXR1cm4ge1xcbiAgICAgICAg5YiX6KGoOiBjWzBdLFxcbiAgICAgICAg5qCH6aKYOiBjWzFdLFxcbiAgICAgICAg6ZO+5o6lOiBjWzJdLFxcbiAgICAgICAg5o+P6L+wOiBjWzNdLFxcbiAgICAgICAg6K+m5oOFOiBjWzRdLFxcbiAgICAgICAg5Zu+54mHOiBjWzVdXFxuICAgIH1cXG59XFxuXFxuZnVuY3Rpb24gbWVyZ2Uoc291cmNlLCB0YXJnZXQpIHtcXG4gICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpXFxuICAgIGZvciAobGV0IGkgaW4ga2V5cykge1xcbiAgICAgICAgdGFyZ2V0W2tleXNbaV1dID0gc291cmNlW2tleXNbaV1dXFxuICAgIH1cXG59XFxuXFxuZnVuY3Rpb24g5pCc57SiKG9iaikge1xcbiAgICB2YXIgZCA9IFtdO1xcbiAgICBpZiAoJC50eXBlKG9iaikgPT0gXFxcInN0cmluZ1xcXCIpIHtcXG4gICAgICAgIG9iaiA9IGNvbnZlcnQxKG9iailcXG4gICAgfVxcbiAgICBpZiAob2JqLuinhOWImSkge1xcbiAgICAgICAgbGV0IGMgPSBjb252ZXJ0MShvYmou6KeE5YiZKVxcbiAgICAgICAgbWVyZ2UoYywgb2JqKVxcbiAgICB9XFxuICAgIGxldCBhcnIgPSBwZGZhKGdldFJlc0NvZGUoKSwgb2JqLuWIl+ihqCk7XFxuICAgICAgIGlmIChvYmou5YiX6KGo5aSE55CGICE9IG51bGwpIHtcXG4gICAgICAgICAgICBhcnIgPSBvYmou6ZO+5o6l5aSE55CGKGFycilcXG4gICAgICAgIH1cXG4gICAgZm9yIChsZXQgaXQgb2YgYXJyKSB7XFxuICAgICAgICBsZXQgdXJsID0gcGQoaXQsIG9iai7pk77mjqUpXFxuICAgICAgICBpZiAob2JqLumTvuaOpeWkhOeQhiAhPSBudWxsKSB7XFxuICAgICAgICAgICAgdXJsID0gb2JqLumTvuaOpeWkhOeQhih1cmwpXFxuICAgICAgICB9XFxuICAgICAgICBsZXQgdGl0bGUgPSBwZGZoKGl0LCBvYmou5qCH6aKYKVxcbiAgICAgICAgaWYgKG9iai7moIfpopjlpITnkIYgIT0gbnVsbCkge1xcbiAgICAgICAgICAgIHRpdGxlID0gb2JqLuagh+mimOWkhOeQhih0aXRsZSlcXG4gICAgICAgIH1cXG4gICAgICAgIGxldCBwaWMgPSBwZChpdCwgb2JqLuWbvueJhylcXG4gICAgICAgIGlmIChvYmou5Zu+54mH5aSE55CGICE9IG51bGwpIHtcXG4gICAgICAgICAgICBwaWMgPSBvYmou5Zu+54mH5aSE55CGKHBpYylcXG4gICAgICAgIH1cXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IG9iai7moIfpopggPyBwZGZoKGl0LCBvYmou5qCH6aKYKSA6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIHVybDogdXJsKycjYXV0b0NhY2hlIycsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIGRlc2M6IG9iai7mj4/ov7AgPyBwZGZoKGl0LCBvYmou5o+P6L+wKSA6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIGNvbnRlbnQ6IG9iai7or6bmg4UgPyBwZGZoKGl0LCBvYmou6K+m5oOFKSA6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIHBpY191cmw6IHBpYyxcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICB5dGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICB5cGljOiBwaWMsXFxuICAgICAgICAgICAgICAgIHl1cmw6IHVybC5yZXBsYWNlKCdoaWtlcjovL2VtcHR5IyMnLCcnKVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcblxcbiAgICB9XFxuICAgIHNldFJlc3VsdChkKTtcXG59XFxudmFyIHRvb2wgPSB7XFxuICAgIOaQnOe0ojog5pCc57SiXFxufVxcbiQuZXhwb3J0cyA9IHRvb2xcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuWbvueJh+ino+WvhipcIixcInBhdGhcIjpcImltZ0RFU1wiLFwicnVsZVwiOlwiJC5leHBvcnRzLmltZ0RlY3J5cHQgPSBmdW5jdGlvbigpIHtcXG4gICAgdmFyIGphdmFJbXBvcnQgPSBuZXcgSmF2YUltcG9ydGVyKCk7XFxuICAgIGphdmFJbXBvcnQuaW1wb3J0UGFja2FnZShcXG4gICAgICAgIFBhY2thZ2VzLmNvbS5leGFtcGxlLmhpa2Vydmlldy51dGlscyxcXG4gICAgICAgIFBhY2thZ2VzLmphdmEubGFuZyxcXG4gICAgICAgIFBhY2thZ2VzLmphdmEuc2VjdXJpdHksXFxuICAgICAgICBQYWNrYWdlcy5qYXZhLnV0aWwsXFxuICAgICAgICBQYWNrYWdlcy5qYXZhLmlvLFxcbiAgICAgICAgUGFja2FnZXMuamF2YS50ZXh0LFxcbiAgICAgICAgUGFja2FnZXMuamF2YXguY3J5cHRvLFxcbiAgICAgICAgUGFja2FnZXMuamF2YXguY3J5cHRvLnNwZWNcXG4gICAgKTtcXG4gICAgd2l0aChqYXZhSW1wb3J0KSB7XFxuICAgICAgICBsZXQgYnl0ZXMgPSBGaWxlVXRpbC50b0J5dGVzKGlucHV0KTtcXG4gICAgICAgIGZ1bmN0aW9uIGRlY3J5cHREYXRhKGJBcnIpIHtcXG4gICAgICAgICAgICB2YXIgZ2VuZXJhdGVTZWNyZXQgPSBTZWNyZXRLZXlGYWN0b3J5LmdldEluc3RhbmNlKFxcXCJkZXNlZGVcXFwiKS5nZW5lcmF0ZVNlY3JldChuZXcgREVTZWRlS2V5U3BlYyhTdHJpbmcoJ09XODRVOEVlcmRiOTlydHNUWFdTSUxETycpLmdldEJ5dGVzKCkpKTtcXG4gICAgICAgICAgICB2YXIgY2lwaGVyID0gQ2lwaGVyLmdldEluc3RhbmNlKFxcXCJkZXNlZGUvQ0JDL1BLQ1M1UGFkZGluZ1xcXCIpO1xcbiAgICAgICAgICAgIGNpcGhlci5pbml0KDIsIGdlbmVyYXRlU2VjcmV0LCBuZXcgSXZQYXJhbWV0ZXJTcGVjKFN0cmluZygnU0s4Ym5jVnUnKS5nZXRCeXRlcygpKSk7XFxuICAgICAgICAgICAgcmV0dXJuIGNpcGhlci5kb0ZpbmFsKGJBcnIpO1xcbiAgICAgICAgfVxcbiAgICAgICAgLy9kZWNyeXB0RGF0YeS4uuino+WvhuaWueazlVxcbiAgICAgICAgYnl0ZXMgPSBkZWNyeXB0RGF0YShieXRlcyk7XFxuICAgICAgICByZXR1cm4gRmlsZVV0aWwudG9JbnB1dFN0cmVhbShieXRlcyk7XFxuICAgIH1cXG5cXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCJERVMqXCIsXCJwYXRoXCI6XCJkZXNcIixcInJ1bGVcIjpcInZhciBqYXZhSW1wb3J0ID0gbmV3IEphdmFJbXBvcnRlcigpO1xcbmphdmFJbXBvcnQuaW1wb3J0UGFja2FnZShcXG4gICAgUGFja2FnZXMuamF2YS5sYW5nLFxcbiAgICBQYWNrYWdlcy5qYXZhLnNlY3VyaXR5LFxcbiAgICBQYWNrYWdlcy5qYXZhLnV0aWwsXFxuICAgIFBhY2thZ2VzLmphdmEuaW8sXFxuICAgIFBhY2thZ2VzLmphdmEudGV4dCxcXG4gICAgUGFja2FnZXMuamF2YXguY3J5cHRvLFxcbiAgICBQYWNrYWdlcy5qYXZheC5jcnlwdG8uc3BlY1xcbik7XFxud2l0aChqYXZhSW1wb3J0KSB7XFxuICAgZnVuY3Rpb24gRGUoc3RyKSB7XFxuICAgICAgICB2YXIgZ2VuZXJhdGVTZWNyZXQgPSBTZWNyZXRLZXlGYWN0b3J5LmdldEluc3RhbmNlKFxcXCJkZXNlZGVcXFwiKS5nZW5lcmF0ZVNlY3JldChuZXcgREVTZWRlS2V5U3BlYyhTdHJpbmcoJ09XODRVOEVlcmRiOTlydHNUWFdTSUxETycpLmdldEJ5dGVzKCkpKTtcXG4gICAgICAgIHZhciBpbnN0YW5jZSA9IENpcGhlci5nZXRJbnN0YW5jZShcXFwiZGVzZWRlL0NCQy9QS0NTNVBhZGRpbmdcXFwiKTtcXG4gICAgICAgIGluc3RhbmNlLmluaXQoMiwgZ2VuZXJhdGVTZWNyZXQsIG5ldyBJdlBhcmFtZXRlclNwZWMoU3RyaW5nKCdTSzhibmNWdScpLmdldEJ5dGVzKCkpKTtcXG4gICAgICAgIHJldHVybiBTdHJpbmcoaW5zdGFuY2UuZG9GaW5hbChfYmFzZTY0LmRlY29kZShzdHIsIDIpKSk7ICAgICAgICBcXG4gICAgfVxcbn1cXG5cXG4vKlxcbmV2YWwoZ2V0Q3J5cHRvSlMoKSlcXG52YXIga2V5ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoJ09XODRVOEVlcmRiOTlydHNUWFdTSUxETycpXFxudmFyIGl2ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoJ1NLOGJuY1Z1JylcXG5cXG5mdW5jdGlvbiBEZShkYXRhLCBlbmNvZGluZykge1xcbiAgICB2YXIgZGVjcnlwdGVkID0gQ3J5cHRvSlMuVHJpcGxlREVTLmRlY3J5cHQoZGF0YSwga2V5LCB7XFxuICAgICAgICBpdjogaXYsXFxuICAgICAgICBtb2RlOiBDcnlwdG9KUy5tb2RlLkNCQyxcXG4gICAgICAgIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Qa2NzN1xcbiAgICB9KTtcXG4gICAgaWYgKCFlbmNvZGluZykge1xcbiAgICAgICAgcmV0dXJuIGRlY3J5cHRlZC50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCk7XFxuICAgIH1cXG4gICAgcmV0dXJuIGRlY3J5cHRlZC50b1N0cmluZyhDcnlwdG9KUy5lbmMuQmFzZTY0KTtcXG59O1xcbiovXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLmvKvom5kqXCIsXCJwYXRoXCI6XCJpbWFnZVwiLFwicnVsZVwiOlwianM6XFxuY29uc3QgU29mdFJlZmVyZW5jZSA9IGphdmEubGFuZy5yZWYuU29mdFJlZmVyZW5jZTtcXG5jb25zdCBDaXBoZXIgPSBDaXBoZXIgPSBqYXZheC5jcnlwdG8uQ2lwaGVyO1xcbmNvbnN0IEl2UGFyYW1ldGVyU3BlYyA9IGphdmF4LmNyeXB0by5zcGVjLkl2UGFyYW1ldGVyU3BlYztcXG5jb25zdCBTZWNyZXRLZXlTcGVjID0gamF2YXguY3J5cHRvLnNwZWMuU2VjcmV0S2V5U3BlYztcXG5jb25zdCBLRVkgPSBuZXcgamF2YS5sYW5nLlN0cmluZyhcXFwibXkyZWNyZXQ3ODJlY3JldFxcXCIpO1xcbmNvbnN0IGYyMzE5SVYgPSBuZXcgamF2YS5sYW5nLlN0cmluZyhcXFwibXkyZWNyZXQ3ODJlY3JldFxcXCIpO1xcbmNvbnN0IEtFWV9BTEdPUklUSE0gPSBcXFwiQUVTXFxcIjtcXG5jb25zdCBBRVNfTU9ERSA9IFxcXCJBRVMvQ0JDL1BLQ1M3UGFkZGluZ1xcXCI7XFxuXFxuZnVuY3Rpb24gZGVjcnlwdERhdGEoZmlsZTJCeXRlcykge1xcbiAgICB0cnkge1xcbiAgICAgICAgbGV0IHNlY3JldEtleVNwZWMgPSBuZXcgU2VjcmV0S2V5U3BlYyhLRVkuZ2V0Qnl0ZXMoKSwgS0VZX0FMR09SSVRITSk7XFxuICAgICAgICBsZXQgaXZQYXJhbWV0ZXJTcGVjID0gbmV3IEl2UGFyYW1ldGVyU3BlYyhmMjMxOUlWLmdldEJ5dGVzKCkpO1xcbiAgICAgICAgbGV0IGNpcGhlciA9IENpcGhlci5nZXRJbnN0YW5jZShBRVNfTU9ERSk7XFxuICAgICAgICBjaXBoZXIuaW5pdCgyLCBzZWNyZXRLZXlTcGVjLCBpdlBhcmFtZXRlclNwZWMpO1xcbiAgICAgICAgcmV0dXJuIGNpcGhlci5kb0ZpbmFsKGZpbGUyQnl0ZXMpO1xcbiAgICAgICAgcmV0dXJuIG5ldyBTb2Z0UmVmZXJlbmNlKGNpcGhlci5kb0ZpbmFsKGZpbGUyQnl0ZXMpKS5nZXQoKTtcXG4gICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgLy9lLnByaW50U3RhY2tUcmFjZSgpO1xcbiAgICAgICAgbG9nKGUudG9TdHJpbmcoKSk7XFxuICAgICAgICByZXR1cm4gbnVsbDtcXG4gICAgfVxcbn1cXG5cXG4kLmV4cG9ydHMuaW1hZ2VEZWNyeXB0ID0gZnVuY3Rpb24oKSB7XFxuICAgIGxldCBqYXZhSW1wb3J0ID0gbmV3IEphdmFJbXBvcnRlcigpO1xcbiAgICBqYXZhSW1wb3J0LmltcG9ydFBhY2thZ2UoXFxuICAgICAgICBQYWNrYWdlcy5jb20uZXhhbXBsZS5oaWtlcnZpZXcudXRpbHNcXG4gICAgKTtcXG4gICAgd2l0aChqYXZhSW1wb3J0KSB7XFxuICAgICAgICBsZXQgYnl0ZXMgPSBGaWxlVXRpbC50b0J5dGVzKGlucHV0KTtcXG4gICAgICAgIGJ5dGVzID0gZGVjcnlwdERhdGEoYnl0ZXMpO1xcbiAgICAgICAgcmV0dXJuIEZpbGVVdGlsLnRvSW5wdXRTdHJlYW0oYnl0ZXMpO1xcbiAgICB9XFxufVxcblwifV0iLCJpY29uIjoiaHR0cHM6Ly9pbWcudmludWEuY24vaW1hZ2VzL3ZraFJ3LmpwZWciLCJwcm94eSI6IiJ9
Add Comment
Please, Sign In to add comment