xiaomianao666

插件名:global_oo.movie

Sep 26th, 2024
236
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:网页插件¥js_url¥global_oo.movie@base64://Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgICBvby5tb3ZpZe+8iCBWSVDop4bpopHop6PmnpAgKyDnsr7pgInlnKjnur/op4LnnIvmupAg77yJCi8vIEBuYW1lOmVuICAgICAgb28ubW92aWUKLy8gQHZlcnNpb24gICAgICAyMC4zLjE0Ci8vIEBkZXNjcmlwdGlvbiAg57K+6YCJVklQ6KeG6aKR6Kej5p6Q5ZKM5Zyo57q/6KeC55yL5rqQ77yM6KeG6aKR5bm/5ZGK5bCR77yM5Y6f572R6aG16Kej5p6Q77yM5Lqr5Y+XVklQ55qE5Y6f55S76KeC5b2x5L2T6aqM44CC5pSv5oyB6IW+6K6v6KeG6aKR44CB54ix5aWH6Im644CB5LyY6YW344CB6IqS5p6cVFbjgIHmkJzni5Dop4bpopHjgIFQUFRW44CBMTkwNeOAgeS5kOinhuetiee9keermeOAglZJUOino+aekOivhOWIhuaOkuW6j++8jOS4jeWQjOe9keermeS4jeWQjOaOkuW6j++8jOi2iuWlveeUqOeahOino+aekOi2iumdoOWJjeOAggovLyBAZGVzY3JpcHRpb246ZW4gIE5PIFZJUCBOTyBWSURFTy4gRm9yIHYucXEsIGlxaXlpLCB5b3VrdSwgbWd0diwgdHYuc29odSwgcHB0diwgMTkwNSwgbGV0di4KLy8gQGF1dGhvciAgICAgICAob8uY4pehy5hvKQovLyBAbmFtZXNwYWNlICAgIGh0dHBzOi8vZ2l0ZWUuY29tL2VjcnVvcy9vbwovLyBAdXBkYXRlVVJMICAgIGh0dHBzOi8vZ2l0ZWUuY29tL2VjcnVvcy9vby9yYXcvbWFzdGVyL3NjcmlwdHMvb28ubW92aWUuanMKLy8gQHN1cHBvcnRVUkwgICBodHRwczovL2dpdGVlLmNvbS9lY3J1b3Mvb28KLy8gQGljb24gICAgICAgICBodHRwczovL2d3LmFsaWNkbi5jb20vdGZzL1RCMVp2d1N5Y2JwSzFSalNaRnlYWFhfcUZYYS00OC00OC5pY28KLy8gQGxpY2Vuc2UgICAgICBHUEwgTGljZW5zZQovLyBAcnVuLWF0ICAgICAgIGRvY3VtZW50LXN0YXJ0Ci8vIEBpbmNsdWRlICAgICAgKgovLyA9PS9Vc2VyU2NyaXB0PT0KCiEgZnVuY3Rpb24oKSB7CiAgdmFyIFZJUOino+aekCA9ICIiLAogICAg5pCc57Si5rqQID0gIlxuXG4gIOixhueToyAgaHR0cHM6Ly9zZWFyY2guZG91YmFuLmNvbS9tb3ZpZS9zdWJqZWN0X3NlYXJjaD9zZWFyY2hfdGV4dD0qKiAgaHR0cHM6Ly9tLmRvdWJhbi5jb20vc2VhcmNoLz90eXBlPW1vdmllJnF1ZXJ5PSoqXG5cbiAg6IW+6K6vICBodHRwczovL20udi5xcS5jb20vc2VhcmNoLmh0bWw/YWN0PTAma2V5V29yZD0qKiAgIGh0dHBzOi8vdi5xcS5jb20veC9zZWFyY2gvP3E9KipcblxuICDniLHlpYfoibogIGh0dHBzOi8vbS5pcWl5aS5jb20vc2VhcmNoLmh0bWw/c291cmNlPWRlZmF1bHQma2V5PSoqICBodHRwczovL3NvLmlxaXlpLmNvbS9zby9xXyoqXG5cbiAg5LyY6YW3ICBodHRwczovL3d3dy5zb2t1LmNvbS9tL3kvdmlkZW8/cT0qKiAgaHR0cHM6Ly9zby55b3VrdS5jb20vc2VhcmNoX3ZpZGVvL3FfKipcblxuICDoipLmnpwgIGh0dHBzOi8vbS5tZ3R2LmNvbS9zby8/az0qKiAgaHR0cHM6Ly9zby5tZ3R2LmNvbS9zby9rLSoqXG5cbiAg5ZOU5ZOp5ZOU5ZOpICBodHRwczovL20uYmlsaWJpbGkuY29tL3NlYXJjaC5odG1sP2tleXdvcmQ9KiogIGh0dHBzOi8vc2VhcmNoLmJpbGliaWxpLmNvbS9hbGw/a2V5d29yZD0qKlxuXG4gIDEwOTAgIGh0dHBzOi8vMTA5MHlzLmNvbS8/Yz1zZWFyY2gmc29ydD1hZGR0aW1lJm9yZGVyPWRlc2MmcGFnZT0xJndkPSoqXG5cbiAg5ZOU5ru0ICBodHRwczovL2JkZTQuY29tL3NlYXJjaC8qKlxuXG4gIOS6keaSrSAgaHR0cHM6Ly9tLnl1bmJ0di5jb20vdm9kc2VhcmNoLy0tLS0tLS0tLS0tLS0uaHRtbD93ZD0qKiAgaHR0cHM6Ly93d3cueXVuYnR2LmNvbS92b2RzZWFyY2gvLS0tLS0tLS0tLS0tLS5odG1sP3dkPSoqXG5cbiAg6aOe5p6B6YCfICBodHRwOi8vbS5mZWlqaXN1OC5jb20vc2VhcmNoLyoqICBodHRwOi8vZmVpamlzdTguY29tL3NlYXJjaC8qKlxuXG4gIFBQVFYgaHR0cHM6Ly9zb3UucHB0di5jb20vc192aWRlbz9rdz0qKiAgaHR0cHM6Ly9tc291LnBwdHYuY29tL3NfdmlkZW8vcGdfcmVzdWx0P2tleXdvcmQ9KipcblxuICDmkJzni5AgIGh0dHBzOi8vbS50di5zb2h1LmNvbS91cGxvYWQvaDUvbS9tc28uaHRtbD9rZXk9KiogIGh0dHBzOi8vc28udHYuc29odS5jb20vbXRzP3dkPSoqXG5cbiAgMTkwNSBodHRwczovL3ZpcC4xOTA1LmNvbS9TZWFyY2g/cT0qKlxuXG4gIOS5kOinhiAgaHR0cHM6Ly9tLmxlLmNvbS9zZWFyY2g/d2Q9KiogIGh0dHBzOi8vc28ubGUuY29tL3M/d2Q9KipcblxuICDlroznvo4gIGh0dHBzOi8vd3d3Lndhbm1laWtrLm1lL3NlYXJjaC8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9KipcblxuIiwKICAgIEJFVFRFUl9BRERPTlMgPSBbewogICAgICBuYW1lOiAi5ZOU5ZOp5ZOU5ZOpwrfmkJzntKIiLAogICAgICBtYXRjaDogL2JpbGliaWxpLmNvbVwvc2VhcmNofHNlYXJjaC5iaWxpYmlsaS5jb20vLAogICAgICBqdW1wOiAiI2FsbC1saXN0IHwgYXBwZW5kLCAuaW5kZXhfX2JvYXJkX19zcmMtc2VhcmNoLWJvYXJkLSIKICAgIH0sIHsKICAgICAgbmFtZTogIuWTlOWTqeWTlOWTqSAtIG0iLAogICAgICBtYXRjaDogL21cLmJpbGliaWxpXC5jb20vLAogICAgICBzaWduOiAiLm1nLWZvb3Rlci1jb3B5cmlnaHQiLAogICAgICBoaWRlOiAiLmluZGV4X19vcGVuQXBwQnRuX19zcmMtY29tbW9uQ29tcG9uZW50LXRvcEFyZWEtLCAuaW5kZXhfX2NvbnRhaW5lcl9fc3JjLWNvbW1vbkNvbXBvbmVudC1ib3R0b21PcGVuQXBwLSwgLmJpbGktYXBwLCAucmVjb20td3JhcHBlciwgLmItZm9vdGVyLCAub3Blbi1hcHAtYmFyLCAub3Blbi1hcHAtZmxvYXQsIC5tb3JlLXJldmlldy13cmFwcGVyIgogICAgfSwgewogICAgICBuYW1lOiAi6IW+6K6vwrfmkJzntKIiLAogICAgICBtYXRjaDogL3YucXEuY29tXC8oXHcrXC8pP3NlYXJjaC8sCiAgICAgIGp1bXA6ICIjcmVzdWx0LCAud3JhcHBlcl9tYWluID4gLm1vZF9wYWdlcyIsCiAgICAgIHNpZ246ICIuY29weXJpZ2h0IiwKICAgICAgaGlkZTogIi50dnBfYXBwX2JhciIKICAgIH0sIHsKICAgICAgbmFtZTogIuiFvuiur8K35pKt5pS+6aG1IiwKICAgICAgbWF0Y2g6IC92XC5xcVwuY29tXC8oY292ZXJ8cGxheXx4XC9jb3Zlcnx4XC9wYWdlfHhcL3BsYXl8eFwvbVwvY292ZXJ8eFwvbVwvcGFnZXx4XC9tXC9wbGF5KS8sCiAgICAgIHZpcDogIiN2aXBfdGl0bGUsIC5VX2JveF9iZ19hLCAucGxheWVyX2hlYWRsaW5lLCAubW9kX3ZpZGVvX2luZm8iLAogICAgICB0aXRsZTogIi5tb2RfdmlkZW9faW5mbyAudmlkZW9fdGl0bGUsIC5fbWFpbl90aXRsZSwgLnBsYXllcl90aXRsZSIsCiAgICAgIGZpeFVybDogZnVuY3Rpb24obikgewogICAgICAgIGlmIChuLmluY2x1ZGVzKCJjaWQ9IikpIHsKICAgICAgICAgIHZhciBlID0gbi5tYXRjaCgvY2lkPShcdyspLylbMV0sCiAgICAgICAgICAgIHQgPSBuLm1hdGNoKC92aWQ9KFx3KykvKTsKICAgICAgICAgIHJldHVybiB0ID0gdCA/ICIvIiArIHRbMV0gOiAiIiwgImh0dHBzOi8vdi5xcS5jb20veC9jb3Zlci8iLmNvbmNhdChlKS5jb25jYXQodCwgIi5odG1sIikKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG4uaW5jbHVkZXMoIi94L2NvdmVyIikgPyBuLnJlcGxhY2UoL1wuaHRtbC4qLywgIi5odG1sIikgOiBuCiAgICAgIH0sCiAgICAgIGhpZGU6ICcubW9kX3NvdXJjZSwgLnZpZGVvX2Z1bmN0aW9uLCAubW9kX3Byb21vdGlvbiwgI3ZpcF9wcml2aWxlZ2UsICN2aXBfYWN0aXZpdHksIC5VX2JnX2IsIC5idG5fb3Blbl92LCAuYnRuX29wZW5hcHAsICN2aXBfaGVhZGVyLCAuYnRuX3VzZXJfaGQsIC5tb2Rfc2lkZXNsaXBfcHJpdmlsZWdlcywgLm1vZF9nYW1lX3JlYywgLm1vZF9zb3VyY2UsIC5tb2RfcHJvbW90aW9uLCAubW9kX3NpZGVzbGlwX2gsIC5idG5fb3BlbiwgLmJ0bl9wYXksIC5tb2RfYm94X2xhc3R2aWV3LCAubW9kX3ZpcF9wb3B1cCwgLm1vZF92aXBfcG9wdXAgKyAubWFza19sYXllciwgdHhwZGl2W2RhdGEtcm9sZT0iaGQtYWQtYWRhcHRlci1pbnRlcmFjdGl2ZWxheWVyIl0nLAogICAgICBjc3M6ICJcbmJvZHksICN2aXBfdGl0bGUge1xuICBwYWRkaW5nLWJvdHRvbTogMCAhaW1wb3J0YW50O1xufVxuXG4ubW9kX2VwaXNvZGVzX251bWJlcnMuaXMtdmlwIC5pdGVtIHtcbiAgd2lkdGg6IGF1dG87XG4gIHBhZGRpbmc6IDAgMWVtO1xufVxuXG4uVV9odG1sX2JnIC5jb250YWluZXIge1xuICBwYWRkaW5nLWJvdHRvbTogMzBweDtcbn1cblxuLm1vZF9wbGF5IC5tb2RfcGxheWVyX3ZpcHRpcHMgLmJ0bl90cnkge1xuICBsZWZ0OiAzMCU7XG59IgogICAgfSwgewogICAgICBuYW1lOiAi54ix5aWH6Im6wrfmkJzntKIiLAogICAgICBtYXRjaDogL20uaXFpeWkuY29tXC9zZWFyY2h8c28uaXFpeWkuY29tLywKICAgICAganVtcDogIi0ubS1ib3gsIC5zZWFyY2gtY29uLXBhZ2UiLAogICAgICBzaWduOiAiLm0tZm9vdGVyIiwKICAgICAgaGlkZTogIi5idG4tdGlja2V0LCAuYnRuLXl1eXVlLCAuYnRuLWRvd25sb2FkLCAubS1pcXlEb3duIgogICAgfSwgewogICAgICBuYW1lOiAi54ix5aWH6Im6wrfmkq3mlL7pobUiLAogICAgICBtYXRjaDogL1wuaXFpeWlcLmNvbVwvdl8vLAogICAgICB2aXA6ICdkaXZbbmFtZT0ibS12aWRlb0luZm8iXSwgI2Jsb2NrLUMnLAogICAgICB0aXRsZTogIiN3aWRnZXQtdmlkZW90aXRsZSwgLnZpZGVvLXRpdGxlLCAuYy10aXRsZS1saW5rLCAucGxheWVyLXRpdGxlIGEiLAogICAgICBmaXhVcmw6ICEwLAogICAgICBzaWduOiAiLm0tZm9vdGVyIiwKICAgICAgaGlkZTogJy5tLWlxeURvd24sIC5oZWFkZXItbG9naW4gKyBkaXYsIC5tLXZpZGVvLWFjdGlvbiwgZGl2W25hbWU9Im0tdmlwUmlnaHRzIl0sIGRpdltuYW1lPSJtLWV4dGVuZEJhciJdLCAubS1pcXlsaW5rLWRpdmVyc2lvbiwgLm0taXF5bGluay1ndWlkZSwgLmMtb3BlblZpcCwgLmMtc2NvcmUtYnRuLCAubS12aWRlb1VzZXItc3BhY2luZywgLm0tcHAtZW50cmFuY2UsIC5tLWhvdFdvcmRzLWJvdHRvbSwgZGl2W3RlbXBsYXRlLXR5cGU9IkFMQlVNIl0gLm0tcGxheWVyLXRpcCwgLmlxcC1ib3gtaW50ZWdyYWwnLAogICAgICBjc3M6ICdcbi5wYWdlX3BsYXkge1xuICBwYWRkaW5nLWJvdHRvbTogMDtcbn1cblxuZGl2W25hbWU9Im0tdmlkZW9JbmZvIl0ge1xuICBwYWRkaW5nLXRvcDogMWVtO1xufVxuXG4ubS1ib3gtaXRlbXMgLm9vLWFsYnVtLWl0ZW0ge1xuICBib3JkZXItcmFkaXVzOiAwLjA1ZW07XG4gIGJhY2tncm91bmQtY29sb3I6ICNlOWVjZWY7XG4gIGNvbG9yOiAjNDk1MDU3O1xuICBwYWRkaW5nOiAwLjVlbSAxZW07XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgbWFyZ2luOiAwLjI1ZW07XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuXG4ubS12aWRlby1wbGF5ZXIgI29vLXBsYXllciB7XG4gIHBhZGRpbmctdG9wOiA1Ni4yNSU7XG4gIHRvcDogNTAlO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG59XG4nCiAgICB9LCB7CiAgICAgIG5hbWU6ICLkvJjphbfCt+aQnOe0oiIsCiAgICAgIG1hdGNoOiAvc29rdS5jb21cL20uK3E9fHNvLnlvdWt1LmNvbVwvc2VhcmNoX3ZpZGVvLywKICAgICAganVtcDogIiNicG1vZHVsZS1tYWluLCAueWtfcmVzdWx0IgogICAgfSwgewogICAgICBuYW1lOiAi5LyY6YW3wrfmkq3mlL7pobUiLAogICAgICBtYXRjaDogL21cLnlvdWt1XC5jb21cL2F8bVwueW91a3VcLmNvbVwvdnx2XC55b3VrdVwuY29tXC92Xy8sCiAgICAgIHZpcDogIi5oNS1kZXRhaWwtaW5mbywgLnBsYXllci10aXRsZSIsCiAgICAgIHRpdGxlOiAiLnBsYXllci10aXRsZSAuc3VidGl0bGUgYSwgLm1vZHVsZS1uYW1lLCAuYW50aG9sb2d5LXRpdGxlLXdyYXAgLnRpdGxlLCAudGl0bGUtbGluayIsCiAgICAgIGZpeFVybDogITAsCiAgICAgIHNpZ246ICIuY29weXJpZ2h0IiwKICAgICAgaGlkZTogIi5oNS1kZXRhaWwtZ3VpZGUsIC5oNS1kZXRhaWwtYWQsIC5icmllZi1idG0sIC5zbWFydEJhbm5lckJ0biwgLmNtdC11c2VyLWFjdGlvbiwgI3JpZ2h0LXRpdGxlLWFkLWJhbm5lciwgLkNvcm5lci1jb250YWluZXIiLAogICAgICBjc3M6ICJcbiNicG1vZHVsZS1wbGF5cFxuLy8gTk9URSBTUExJVEVSYWdlLWxlZnR0aXRsZSB7XG4gIGhlaWdodDogYXV0byAhaW1wb3J0YW50O1xufSIKICAgIH0sIHsKICAgICAgbmFtZTogIuWcn+ixhsK35pKt5pS+6aG1IiwKICAgICAgbWF0Y2g6IC9cLnR1ZG91LmNvbVwvdlwvLywKICAgICAgdmlwOiAiLnBsYXktdmlkZW8tZGVzYywgLnRkLXBsYXlfX2Jhc2VpbmZvIiwKICAgICAgdGl0bGU6ICIudGQtbGlzdGJveF9fdGl0bGUsIC52aWRlby1kZXNjLXRpdGxlIiwKICAgICAgZml4VXJsOiAhMCwKICAgICAgaGlkZTogIi52aWRlby1wbGF5ZXItdG9wYmFyLCAudGQtaDVfX3BsYXllcl9fYXBwZ3VpZGUsICN0dWRvdS1mb290ZXIsIC5kcm9wZG93bl9fcGFuZWxfX2NvbiIKICAgIH0sIHsKICAgICAgbmFtZTogIuiKkuaenMK35pCc57SiIiwKICAgICAgbWF0Y2g6IC9tLm1ndHYuY29tXC9zb1wvfHNvLm1ndHYuY29tXC9zby8sCiAgICAgIGp1bXA6ICIjcGFnaW5hdG9yLCAucmVzdWx0LWJveCAubWVkaWEiLAogICAgICBrZXl3b3JkOiAva1stPV0oW14mXD9cL1wuXSspLwogICAgfSwgewogICAgICBuYW1lOiAi6IqS5p6cwrfmkq3mlL7pobUiLAogICAgICBtYXRjaDogL1wubWd0dlwuY29tXC8oYnxsKVwvLywKICAgICAgdmlwOiBbIi54dWFuamkgfCBiZWZvcmUiLCAiLnYtcGFuZWwtYm94Il0sCiAgICAgIHRpdGxlOiAiLnYtcGFuZWwtdGl0bGUsIC52dC10eHQiLAogICAgICBmaXhVcmw6ICEwLAogICAgICBzaWduOiAiLm1nLWZvb3Rlci1jb3B5cmlnaHQiLAogICAgICBoaWRlOiAiLmFkLWJhbm5lciwgLnZpZGVvLWFyZWEtYmFyLCAudmlkZW8tZXJyb3IgLmJ0biwgLm0tdmlwLWxpc3QsIC5tLXZpcC1saXN0ICsgZGl2Om5vdChbY2xhc3NdKSwgLnRvYXBwLCAudmlkZW8tY29tbWVudCAuZnQsIC5tZy1hcHAtc3dpcCIKICAgIH0sIHsKICAgICAgbmFtZTogIuaQnOeLkMK35pCc57SiIiwKICAgICAgbWF0Y2g6IC9tLnR2LnNvaHUuY29tLitrZXk9fHNvLnR2LnNvaHUuY29tLit3ZD0vLAogICAgICBqdW1wOiAiLnNzTW9yZSB8IGJlZm9yZSwgLnNlbGVjdC1jb250YWluZXIgfCBiZWZvcmUiCiAgICB9LCB7CiAgICAgIG5hbWU6ICLmkJzni5DCt+aSreaUvumhtSIsCiAgICAgIG1hdGNoOiAvZmlsbVwuc29odVwuY29tXC9hbGJ1bVwvfHR2XC5zb2h1XC5jb21cLyh2fHBob25lX3BsYXlfZmlsbSkvLAogICAgICB2aXA6ICIudGl0bGUtd3JhcCwgLnZpZGVvSW5mbywgLnR3LWluZm8sIC5wbGF5ZXItZGV0YWlsLCAubW92aWUtaW5mby1jb250ZW50IiwKICAgICAgdGl0bGU6ICIjdmluZm9ib3ggaDIsIC50LWluZm8sIC5tb3ZpZS10IGgzIiwKICAgICAgZml4VXJsOiBmdW5jdGlvbihuKSB7CiAgICAgICAgaWYgKC9waG9uZV9wbGF5X2ZpbG0uK2NoYW5uZWxlZD0vLnRlc3QobikpIHsKICAgICAgICAgIHZhciBlID0gbi5tYXRjaCgvY2hhbm5lbGVkPShcdyspLylbMV0sCiAgICAgICAgICAgIHQgPSBuLm1hdGNoKC9haWQ9KFx3KykvKVsxXTsKICAgICAgICAgIHJldHVybiAiaHR0cHM6Ly9maWxtLnNvaHUuY29tL2FsYnVtLyIuY29uY2F0KHQsICIuaHRtbD9jaGFubmVsZWQ9IikuY29uY2F0KGUpCiAgICAgICAgfQogICAgICAgIHJldHVybiBuCiAgICAgIH0sCiAgICAgIHNpZ246ICIubGlua3MiLAogICAgICBoaWRlOiAiLmFjdHYtYmFubmVyLCAuYnRuLXh6LWFwcCwgLnR3aW5mb19pY29ud3JhcCwgLmJ0bi1jb21tZW50LWFwcCwgI2FkX2Jhbm5lciwgLmFkdmVydGlzZSwgLm1haW4tYWQtdmlldy1ib3gsIC5mb290LnNvaHUtc3dpcGVyLCAuYXBwLXN0YXItdmJveCwgLmFwcC1ndWVzcy12Ym94LCAubWFpbi1yZWMtdmlldy1ib3gsIC5hcHAtcWlhbmZhbi1ib3gsIC5jb21tZW50LWVtcHR5LWJnLCAuY29weWluZm8sIC5waC12Ym94LCAuYnRuX21fYWN0aW9uLCAuYnRuLXh6LWFwcCwgI2ZpbG1fdG9wX2Jhbm5lciwgLmJ0bi1jb21tZW50LWFwcCIsCiAgICAgIGNzczogIlxuLmNvbW1lbnQtZW1wdHktdHh0IHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cblxuLmFwcC12aWV3LWJveCArIGZvb3RlciB7XG4gIHBhZGRpbmc6IDA7XG4gIG9wYWNpdHk6IDAuNTtcbn1cblxuI3NvaHVwbGF5ZXIgI21lbnUge1xuICB6LWluZGV4OiAyMTQ3NDgzNjQ3O1xufSIKICAgIH0sIHsKICAgICAgbmFtZTogIuS5kOinhsK35pCc57SiIiwKICAgICAgbWF0Y2g6IC9tLmxlLmNvbVwvc2VhcmNofHNvLmxlLmNvbVwvcy8sCiAgICAgIGp1bXA6ICIuY29sdW1uX3RpdCB8IGJlZm9yZSwgLlJlbGF0ZSB8IGJlZm9yZSIKICAgIH0sIHsKICAgICAgbmFtZTogIuS5kOinhsK35pKt5pS+6aG1IiwKICAgICAgbWF0Y2g6IC9cLmxlXC5jb21cLyhwdHZcL3ZwbGF5XC98dnBsYXlfKS8sCiAgICAgIHZpcDogIi5pbnRyb2R1Y3Rpb25fYm94LCAuYnJpZWZJbnRyb19sZWZ0IC5pbmZvX2xpc3QiLAogICAgICB0aXRsZTogIi5icmllZkludHJvX2luZm8gLmluZm9fdGl0LCAjai1pbnRyb2R1Y3Rpb24gaDIiLAogICAgICBmaXhVcmw6ICEwLAogICAgICBoaWRlOiAiLmdhbWVQcm9tb3Rpb24sIC5nYW1lUHJvbW90aW9uVHh0LCAjai1sZWFwcE1vcmUsIC5sYnpEYW9saXUsIC5hcmtCb3giCiAgICB9LCB7CiAgICAgIG5hbWU6ICLlkqrlkpUuY27Ct+aQnOe0oiIsCiAgICAgIG1hdGNoOiAvXC5taWd1XC5jblwvc2VhcmNoXC5odG1sLywKICAgICAganVtcDogIi5wYWdpbmF0aW9uLCAuY29weXJpZ2h0IHwgYmVmb3JlIiwKICAgICAga2V5d29yZDogL2NvbnRlbnQ9KFteJlw/XC9cLl0rKS8sCiAgICAgIGhpZGU6ICIuZG93bi1idG4iCiAgICB9LCB7CiAgICAgIG5hbWU6ICLlkqrlkpXCt+aQnOe0oiIsCiAgICAgIG1hdGNoOiAvXC5taWd1dmlkZW9cLmNvbVwvLipzZWFyY2guaHRtbC8sCiAgICAgIGp1bXA6ICIuc2VhcmNoLXBhZ2luYXRpb24sIC5zZWFyY2gtbWFpbiIsCiAgICAgIGtleXdvcmQ6IC9rZXl3b3Jkcz0oW14mXD9cL1wuXSspfFw/LiojKFteJlw/XC9cLl0rKS8KICAgIH0sIHsKICAgICAgbmFtZTogIuWSquWSlcK35pKt5pS+6aG1IiwKICAgICAgbWF0Y2g6IC9taWd1dmlkZW9cLmNvbVwvLitcL2RldGFpbFwuaHRtbC8sCiAgICAgIHZpcDogIi5wbGF5ZXJGb290ZXIsIC5wcm9ncmFtZ3JvdXAiLAogICAgICB0aXRsZTogIi5sZWZ0LWJveCAudGl0bGUsIC5lcGlzb2RlVGl0bGUsIC52aWRlb190aXRsZSIsCiAgICAgIGhpZGU6ICcuZ3JvdXAtaXRlbVtuYW1lKj0i5bm/5ZGKIl0sIC5vcGVuQ2xpZW50JwogICAgfSwgewogICAgICBuYW1lOiAiUFBUVsK35pCc57SiIiwKICAgICAgbWF0Y2g6IC9zb3UucHB0di5jb21cL3NfdmlkZW8uK2t3PXxtc291LnBwdHYuY29tXC9zX3ZpZGVvXC8uK2tleXdvcmQ9LywKICAgICAganVtcDogIi5wYWdpbmF0aW9uLCAuemhlbmdwaWFuLWJveCB8IGFwcGVuZCIKICAgIH0sIHsKICAgICAgbmFtZTogIlBQVFbCt+aSreaUvumhtSIsCiAgICAgIG1hdGNoOiAvKHZ8bSlcLnBwdHZcLmNvbVwvc2hvd1wvLywKICAgICAgdmlwOiAiLm0gLmNmLCAudm9kLXRpdCwgLnZvZC1pbnRvciIsCiAgICAgIHRpdGxlOiAiI3ZpZGVvLWluZm8gaDEsIC52b2QtdGl0LWluIHNwYW4sIC50aXQiLAogICAgICBmaXhVcmw6ICEwLAogICAgICBoaWRlOiAnLnctdmlkZW8tdmFzdGFkLCAjdmlkZW8tZG93bmxvYWQtZ2FtZSwgZGl2W2NsYXNzKj0ib3BlbmFwcCJdLCBkaXZbY2xhc3MqPSJzaWRlLWFkdiJdLCBkaXZbaWQqPSJhZnBfIl0sIGRpdltpZCo9Ii1hZnAiXSwgaWZyYW1lW3NyYyo9Ii9nYW1lLyJdLCAuYWZwUG9zaXRpb24sIC5kb3dubG9hZC1pY29uYmFyJwogICAgfSwgewogICAgICBuYW1lOiAi5Y2O5pWwwrfmkJzntKIiLAogICAgICBtYXRjaDogL3dhc3VcLmNuXC8uK1NlYXJjaFwvLitrPS8sCiAgICAgIGp1bXA6ICIjdG9wVm9kIgogICAgfSwgewogICAgICBuYW1lOiAi5Y2O5pWwwrfmkq3mlL7pobUiLAogICAgICBtYXRjaDogL3dhc3VcLmNuXC8uKltwUF1sYXlcL3Nob3dcLy8sCiAgICAgIHZpcDogIi5tb3ZpZV90aXRsZSIsCiAgICAgIHRpdGxlOiAiLm1vdmllX3RpdGxlIGgyIiwKICAgICAgZml4VXJsOiAhMCwKICAgICAgaGlkZTogJ2RpdltpZCo9IkJBSURVIl0sIC5wbGF5ZXJfbWVudV9jb24sIGJvZHkgPiBkaXZbc3R5bGUqPSJmaXhlZCJdJwogICAgfSwgewogICAgICBuYW1lOiAiMTkwNcK35pCc57SiIiwKICAgICAgbWF0Y2g6IC9cLjE5MDVcLmNvbVwvKFNlYXJjaHxzZWFyY2gpLywKICAgICAganVtcDogIi5wYWdpbmF0aW9uLCAjbmV3X3BhZ2UiCiAgICB9LCB7CiAgICAgIG5hbWU6ICIxOTA1wrfmkq3mlL7pobUiLAogICAgICBtYXRjaDogLzE5MDUuY29tXC9wbGF5LywKICAgICAgdmlwOiAiLnBsYXllckJveC1pbmZvLCAjbW92aWVfaW5mbywgLnBsYXllci1uYXYiLAogICAgICB0aXRsZTogIiNtb3ZpZV9pbmZvIC5pbmZvSW5uZXIgLnRpdGxlLCAubW92aWUtdGl0bGUsIC50dl90aXRsZSIsCiAgICAgIGZpeFVybDogITAsCiAgICAgIGhpZGU6ICIjYXBwX3N0b3JlLCAub3Blbk1lbWJlcnNoaXBCdG4sIGJvZHkgPiBkaXZbaWRdID4gaWZyYW1lLCAucHYyLWFkdmVydGlzZW1lbnQsIC5vcGVuLWFwcCIsCiAgICAgIGNzczogIlxuI21vdmllX2luZm8ge1xuICBtYXJnaW4tdG9wOiAxZW07XG59IgogICAgfSwgewogICAgICBuYW1lOiAi5a6M576O55yL55yLwrfmkJzntKIiLAogICAgICBtYXRjaDogL3dhbm1laWtrXC5tZVwvc2VhcmNoLywKICAgICAganVtcDogIi5zdHVpLXBhZ2UsIC5zdHVpLXBhbm5lbCIKICAgIH0sIHsKICAgICAgbmFtZTogIuWujOe+jueci+eciyIsCiAgICAgIG1hdGNoOiAvd2FubWVpa2tcLm1lLywKICAgICAgaGlkZTogIi5jb250YWluZXIgfiAqW2lkXSIKICAgIH0sIHsKICAgICAgbmFtZTogIumjnuaegemAn8K35pCc57SiIiwKICAgICAgbWF0Y2g6ICJmZWlqaXN1OC5jb20vc2VhcmNoIiwKICAgICAganVtcDogIiNyZXN1bHQiCiAgICB9LCB7CiAgICAgIG5hbWU6ICLpo57mnoHpgJ8iLAogICAgICBtYXRjaDogL2ZlaWppc3U4XC5jb20vLAogICAgICBoaWRlOiAiLmluZGV4LXRvcCB+IGRpdiwgLnYtdG9wIH4gZGl2LCAuZm9vdGVyIH4gZGl2LCAuZm9vdGVyIH4gYnJkZSwgYm9keSA+IGRpdjpub3QoW2NsYXNzXSkiCiAgICB9LCB7CiAgICAgIG5hbWU6ICIxMDkw5b2x6KeGwrfmkJzntKIiLAogICAgICBtYXRjaDogLzEwOTB5cy5jb21cLy4rYz1zZWFyY2gvLAogICAgICBqdW1wOiAiLnN0dWktcGFnZSwgLnN0dWktcGFubmVsIgogICAgfSwgewogICAgICBuYW1lOiAiMTA5MOW9seinhiIsCiAgICAgIG1hdGNoOiAvMTA5MHlzXC5jb20vLAogICAgICBoaWRlOiAiLmNvbnRhaW5lciB+ICpbaWRdIiwKICAgICAgY3NzOiAiXG5ib2R5IHtcbiAgcGFkZGluZy1ib3R0b206IDAgIWltcG9ydGFudDtcbn0iCiAgICB9LCB7CiAgICAgIG5hbWU6ICLlk5Tmu7TCt+aQnOe0oiIsCiAgICAgIG1hdGNoOiAvYmRlNC5jb21cL3NlYXJjaFwvLywKICAgICAganVtcDogIi5zZWFyY2gtbGlzdCIKICAgIH0sIHsKICAgICAgbmFtZTogIuWTlOa7tCIsCiAgICAgIG1hdGNoOiAvYmRlNFwuY29tLywKICAgICAgaGlkZTogImJvZHkgPiAqW2lkXSIKICAgIH0sIHsKICAgICAgbmFtZTogIuS6keaSrcK35pCc57SiIiwKICAgICAgbWF0Y2g6ICJ5dW5idHYuY29tL3ZvZHNlYXJjaCIsCiAgICAgIGp1bXA6ICIucGFnZXIiLAogICAgICBrZXl3b3JkOiAiLmJyZWFkY3J1bWIgZm9udCIKICAgIH1dLAogICAgUHVyaWZ5S2V5d29yZFJlZ2V4ID0gLy4q44CKfOOAiy4qfFxzKuesrC57MSwzfVvlraPpm4ZdW1xzXGRdKiR8XHMrXGR7MiwzfVxzKiQvZywKICAgIENvbW1vblNlYXJjaEtleXdvcmRSZWdleCA9IC8od2R8a2V5fGtleXdvcmR8a2V5V29yZHxrd3xxKT0oW14mXD9cL1wuLV0rKXwoc2VhcmNoXC98c2VhY2hlci18cV8pKFteJlw/XC9cLi1dKykvLAogICAgUHVyaWZ5U3R5bGUgPSAiXG5kaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG52aXNpYmlsaXR5OiBoaWRkZW4gIWltcG9ydGFudDtcbndpZHRoOiAwICFpbXBvcnRhbnQ7XG5oZWlnaHQ6IDAgIWltcG9ydGFudDtcbm1heC13aWR0aDogMCAhaW1wb3J0YW50O1xubWF4LWhlaWdodDogMCAhaW1wb3J0YW50O1xub3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50O1xucG9zaXRpb246IGFic29sdXRlICFpbXBvcnRhbnQ7XG5sZWZ0OiAtOTk5OTlweCAhaW1wb3J0YW50O1xub3BhY2l0eTogMCAhaW1wb3J0YW50O1xucG9pbnRlci1ldmVudHM6IG5vbmUgIWltcG9ydGFudDtcbnotaW5kZXg6IC0xICFpbXBvcnRhbnQ7IiwKICAgIFBsYXllclNlbGVjdG9yID0gIiNpZnJhbWFXcmFwcGVyLCAjbWd0di1wbGF5ZXItd3JhcCwgI3NvaHVwbGF5ZXIgLngtcGxheWVyLCAjd1BsYXllciwgI3ZpZGVvLWJveCwgI3BsYXllcmJveCwgLnRkLWg1X19wbGF5ZXIsIC50ZC1wbGF5Ym94LCAuaXFwLXBsYXllciwgLmctcGxheSAudmlkZW8tYXJlYSwgI21vZF9wbGF5ZXIsICNwbGF5Qm94LCAjai1wbGF5ZXIsICN2aWRlbywgLm0tdmlkZW8tcGxheWVyLCAuc2l0ZV9wbGF5ZXIiLAogICAgVkVSU0lPTiA9ICIyMC4yLjIwIiwKICAgIEhyZWYgPSBsb2NhdGlvbi5ocmVmOwoKICBmdW5jdGlvbiBJcyhuKSB7CiAgICByZXR1cm4gbi50ZXN0KEhyZWYpCiAgfQoKICBmdW5jdGlvbiBJc05vdChuKSB7CiAgICByZXR1cm4gIUlzKG4pCiAgfQogIGlmICghSXMoL21cLmxlXC5jb20vKSB8fCAhSXNOb3QoL20ubGUuY29tXC9zZWFyY2h8c28ubGUuY29tXC9zfFwubGVcLmNvbVwvKHB0dlwvdnBsYXlcL3x2cGxheV8pLykpIHsKICAgIHZhciBEID0gZGVjb2RlVVJJQ29tcG9uZW50LAogICAgICBjaGFyVG9OdW0gPSBmdW5jdGlvbihuKSB7CiAgICAgICAgcmV0dXJuIG4uY2hhckNvZGVBdCgwKSAtIDk3CiAgICAgIH0sCiAgICAgIG51bVRvQ2hhciA9IGZ1bmN0aW9uKG4pIHsKICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSg5NyArIG4pCiAgICAgIH0sCiAgICAgIENhZXNhclNoaWZ0ID0gKG5ldyBEYXRlKS5nZXRNb250aCgpICsgMywKICAgICAgY2Flc2FyID0gZnVuY3Rpb24obiwgZSkgewogICAgICAgIHJldHVybiBudW1Ub0NoYXIoY2hhclRvTnVtKG4pICsgZSAlIDI2KQogICAgICB9LAogICAgICBjYWVzYXJEZWMgPSBmdW5jdGlvbihuLCBlKSB7CiAgICAgICAgcmV0dXJuIG51bVRvQ2hhcihjaGFyVG9OdW0obikgLSBlICUgMjYpCiAgICAgIH0sCiAgICAgIFBMVUdJTl9JRCA9IENhZXNhckRlY3J5cHQoRChSZXZlcnNlKGF0b2IoIlF6SWxjME01SlVKREpUVkJKVGM1SlRKRkpVTTVKVUpESlhNdE5ESWxjM015Y1hONmJXayIpKSksIDQpLAogICAgICBQTFVHSU5fQVRUUiA9ICJvby1tb3ZpZSIsCiAgICAgIEhUTUwgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaHRtbCIpWzBdOwogICAgaWYgKEhUTUwuZ2V0QXR0cmlidXRlKFBMVUdJTl9BVFRSKSAhPT0gUExVR0lOX0lEKSB7CiAgICAgIHZhciBERUJVRyA9ICExLAogICAgICAgIHNjcmVlbldpZHRoID0gd2luZG93LnNjcmVlbi53aWR0aCwKICAgICAgICBpc01vYmlsZSA9IHNjcmVlbldpZHRoIDw9IDYwMCB8fCAvQW5kcm9pZHx3ZWJPU3xpUGhvbmV8aVBhZHxpUG9kfEJsYWNrQmVycnl8SUVNb2JpbGV8T3BlcmEgTWluaS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkgfHwgREVCVUcgJiYgSXMoL1wvXC9tXC4vKTsKICAgICAgbG9nKC9BbmRyb2lkfHdlYk9TfGlQaG9uZXxpUGFkfGlQb2R8QmxhY2tCZXJyeXxJRU1vYmlsZXxPcGVyYSBNaW5pL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSwgbmF2aWdhdG9yLnVzZXJBZ2VudCk7CiAgICAgIHZhciBjb2xsYXBzZU51bSA9IGlzTW9iaWxlID8gOCA6IDEyLAogICAgICAgIFZJUF9VUkxTID0gIiI7CiAgICAgIHRyeSB7CiAgICAgICAgVklQX1VSTFMgPSAod2luZG93LlZJUF9VUkxTIHx8IFZJUOino+aekCB8fCAiIikudHJpbSgpCiAgICAgIH0gY2F0Y2ggKG4pIHt9CiAgICAgIOaQnOe0oua6kCA9IHdpbmRvdy7mkJzntKLmupAgfHwg5pCc57Si5rqQIHx8ICIiLCBJc05vdCgvZG91YmFuXC5jb20vKSAmJiBpc01vYmlsZSAmJiDmkJzntKLmupAgJiYgKOaQnOe0oua6kCA9ICLpgInlvbHop4YgIGh0dHBzOi8vbW92aWUuZG91YmFuLmNvbS90YWcvIy9cblxuIiArIOaQnOe0oua6kCk7CiAgICAgIHZhciBPT19TSUdOID0gQ2Flc2FyRGVjcnlwdChEKFJldmVyc2UoYXRvYigiUXpJbGMwTTVKVUpESlRWQkpUYzVKVEpGSlVNNUpVSkRKWE10IikpKSwgNCk7CiAgICAgIGxvZygi4pyUIExvYWRlZCIsIGlzTW9iaWxlID8gImlzTW9iaWxlIiA6ICJpc05vdE1vYmlsZSIpLCDmkJzntKLmupAgPSBlbnN1cmVBcnJheSjmkJzntKLmupApLm1hcCgoZnVuY3Rpb24obikgewogICAgICAgIHZhciBlID0gcGFyc2VPb1VybChuKTsKICAgICAgICByZXR1cm4gewogICAgICAgICAgdXJsOiBlLnVybCwKICAgICAgICAgIG5hbWU6IGUubmFtZQogICAgICAgIH0KICAgICAgfSkpOwogICAgICB2YXIgREVGQVVMVF9WSVBfVVJMUyA9IENhZXNhckRlY3J5cHQoRChSZXZlcnNlKGF0b2IoIlJUQWxSVEFsTkRJbE5ESWxOalF5TlRReUpUaENKVEJDSlRaRkpUTTVKVUk0SlRoRkpUUXlKVGxCSlVaQ0pVWkZKVFF5SlRWRU15VTBPVEEzTUhFME1pVXdPQ1V5UXlVME1pVnRkVzFFTnlWdE1EVXdjVFF5SlRBNEpUSkRKVFF5SlhGcmVIb3dPVEJ4TkRJbE1EZ2xNa01sTkRJbGRIUjRlakE1TUhFME1pVXdPQ1V5UXlVME1pVjNjMng1TURVeVF6TWxNSEUwTWlVd09DVXlReVUwTWlWNk1uVjFNRFl5TlRCeE5ESWxNRGdsTWtNbE5ESWxSRGNsYzNsdmVUQTJNall3Y1RReUpUUXlKV3g0ZUhSM1JUTWxNek4wZERKbGJYZHhNbWRuTTNSbGRuZHBNME41ZG5CQk9Ea2xRemtsTWtVbFJUQWxSVEFsTkRJbE5ESWxOVUl6SlRJM05ESWxOVUlsTVVJbE5VVWxORGdsTUVFbE5rVWxORElsT1VFbFJrSWxSa1VsTkRJbE5VUXpKVFE1TURReVFUTWxORElsTURnbE1rTWxORElsYlhWdFJEY2xiVEExTWtNekpUQnhORElsTURnbE1rTWxORElsY0drd05UQnhORElsTURnbE1rTWxORElsY1d0NGVqQTNNa016SlRCeE5ESWxNRGdsTWtNbE5ESWxkSFI0ZWpBNE1rTXpKVEJ4TkRJbE1EZ2xNa01sTkRJbGQzTnNlVEExTUhFME1pVXdPQ1V5UXlVME1pVjZNblYxTURZeU56QnhORElsTURnbE1rTWxORElsUkRjbGMzbHZlVEEyTUhFME1pVTBNaVZzZUhoMGQwVXpKVE16YzI5dVF6Y2xNbWRuTTBONWRuQkJPRGtsUXprbE1rVWxSVEFsUlRBbE5ESWxORElsTlVJekpUSTFORElsTVRnbE5FSWxOa1VsTkVJbE5UZ2xOVVVsTkRJbE9VRWxSa0lsUmtVbE5ESWxOVVF6SlRRNU1EY3djVFF5SlRBNEpUSkRKVFF5SlcxMWJVUTNKVzB3TlRCeE5ESWxNRGdsTWtNbE5ESWxjR2t3TlRCeE5ESWxNRGdsTWtNbE5ESWxjV3Q0ZWpBNE1IRTBNaVV3T0NVeVF5VTBNaVYwZEhoNk1EY3djVFF5SlRBNEpUSkRKVFF5SlhveWRYVXdOVFF5SlRBNEpUSkRKVFF5SlVRM0pYTjViM2t3TmpJMU1IRTBNaVUwTWlWc2VIaDBkMFV6SlRNelprUTNKVEpvUkRjbFpteHlNbWR6Y1RORGVYWndRVGc1SlVNNUpUSkZKVVV3SlVVd0pUUXlKVFF5SlRWQk15VXlOVFF5SlVRNEpVUTVKVGhGSlRkQkpURkJKVGhGSlRReUpUbEJKVVpDSlVaRkpUUXlKVFZFTXlVME9UQTFNSEUwTWlVd09DVXlReVUwTWlWdGRXMUVOeVZ0TURVd2NUUXlKVEE0SlRKREpUUXlKWEJwTURVd2NUUXlKVEE0SlRKREpUUXlKWEZyZUhvd09EQnhORElsTURnbE1rTWxORElsZEhSNGVqQTNNSEUwTWlVd09DVXlReVUwTWlWNk1uVjFNRGd3Y1RReUpUQTRKVEpESlRReUpVUTNKWE41YjNrd05qSTFNSEUwTWlVME1pVnNlSGgwZDBVekpUTXplakpuWlhKK2JHMTNjM0pyTW1keU0zb3lkR3gwUTNsMmNFRTRPU1ZET1NVeVJTVkZNQ1ZGTUNVME1pVTBNaVUxUVRNbE5ESWxRamtsUkRnbE5VVWxNMEVsT0RrbE5rVWxORElsT1VFbFJrSWxSa1VsTkRJbGJYVnRSRGNsYlRBNE5ESWxNRGdsTWtNbE5ESWxjR2t3T0RReUpUQTRKVEpESlRReUpYRnJlSG93T0RReUpUQTRKVEpESlRReUpYb3lkWFV3T0RReUpUUXlKV3g0ZUhSRk15VXpNMlpwYlc1dFF6Y2xkekpuY2pORGVYWndRVVV3SlVVd0pUUXlKVFF5SlRVNE1qazBNaVV5T0NWRk9TVTJSU1UyT0NWQk9DVTRSU1UwTWlVNVFTVkdRaVZHUlNVME1pVTFSRE1sTkRrd05UQnhORElsTURnbE1rTWxORElsYlhWdFJEY2xiVEExTUhFME1pVXdPQ1V5UXlVME1pVndhVEExTUhFME1pVXdPQ1V5UXlVME1pVnhhM2g2TURnd2NUUXlKVEE0SlRKREpUUXlKWFIwZUhvd056QnhORElsTURnbE1rTWxORElsZWpKMWRUQTRNSEUwTWlVd09DVXlReVUwTWlWRU55VnplVzk1TURReU9UQnhORElsTkRJbGJIaDRkSGRGTXlVek0yNUROeVV5UkRjbGJYSnJRemNsYldWeWEyWmxjekpuY2pONmJYUXlkR3gwUTNsMmNFRTRPU1ZET1NVeVJTVkZNQ1ZGTUNVME1pVTBNaVUxT0RJNE5ESWxPRGdsUlRnbE4wVWxOamdsUmpnbE5VVWxORElsT1VFbFJrSWxSa1VsTkRJbE5VUXpKVFE1TURReVFUTWxNSEUwTWlVd09DVXlReVUwTWlWdGRXMUVOeVZ0TURVd2NUUXlKVEE0SlRKREpUUXlKWEJwTURVd2NUUXlKVEE0SlRKREpUUXlKWEZyZUhvd056QnhORElsTURnbE1rTWxORElsZEhSNGVqQTNNSEUwTWlVd09DVXlReVUwTWlWM2MyeDVNRFV5T1RCeE5ESWxNRGdsTWtNbE5ESWxlakoxZFRBMk1qWXdjVFF5SlRBNEpUSkRKVFF5SlVRM0pYTjViM2t3TmpJMU1IRTBNaVUwTWlWc2VIaDBkMFV6SlRNelFqY2xRamNsUWpjbE1uRkVOeVZETnlWdGNqSjRjM1F6YmtNM0pUTmxkRzB6UTNsMmNFRTRPU1ZET1NVeVJTVkZNQ1ZGTUNVME1pVTBNaVUxT0RKQk15VTBNaVUyUWlWQ09TVTJSU1UyUWlWRk9DVTRSU1UwTWlVNVFTVkdRaVZHUlNVME1pVTFSRE1sTkRrd05ESTFNSEUwTWlVd09DVXlReVUwTWlWdGRXMUVOeVZ0TURVME1pVXdPQ1V5UXlVME1pVnhhM2g2TURrd2NUUXlKVEE0SlRKREpUUXlKWGR6Ykhrd05UQnhORElsTURnbE1rTWxORElsZWpKMWRUQTJNamt3Y1RReUpUQTRKVEpESlRReUpVUTNKWE41YjNrd09UQnhORElsTkRJbGJIaDRkSGRGTXlVek0wSTNKVUkzSlVJM0pUSm5iM0Z6ZWpKNmJYUXpaWFJ0TW5Sc2RFTjVkbkJCT0RrbFF6a2xNa1VsUlRBbFJUQWxORElsTkRJbE5UZ3lOelF5SlRZNUpVUTVKVGxGSlRRNUpVSTVKVGRGSlRReUpUbEJKVVpDSlVaRkpUUXlKVFZFTXlVME9UQTFNSEUwTWlVd09DVXlReVUwTWlWdGRXMUVOeVZ0TURVeU9UQnhORElsTURnbE1rTWxORElsY0drd05UQnhORElsTURnbE1rTWxORElsY1d0NGVqQTNNSEUwTWlVd09DVXlReVUwTWlWMGRIaDZNRFl3Y1RReUpUQTRKVEpESlRReUpYZHpiSGt3TlRJNU1IRTBNaVV3T0NVeVF5VTBNaVY2TW5WMU1EWXlOakJ4TkRJbE1EZ2xNa01sTkRJbFJEY2xjM2x2ZVRBMk1qVTBNaVUwTWlWc2VIaDBkMFV6SlRNelFqY2xRamNsUWpjbE1uSkROeVZxY0hveVozTnhNME41ZG5CQk9Ea2xRemtsTWtVbFJUQWxSVEFsTkRJbE5ESWxOVGN5T1RReUpVUkJKVFJCSlRWRkpUQkNKVFk0SlRWRkpUUXlKVGxCSlVaQ0pVWkZKVFF5SlRWRU15VTBPVEExTUhFME1pVXdPQ1V5UXlVME1pVnRkVzFFTnlWdE1EWXdjVFF5SlRBNEpUSkRKVFF5SlhCcE1EVXdjVFF5SlRBNEpUSkRKVFF5SlhGcmVIb3dOVEJ4TkRJbE1EZ2xNa01sTkRJbGRIUjRlakEzTUhFME1pVXdPQ1V5UXlVME1pVjNjMng1TURVeU9UQnhORElsTURnbE1rTWxORElsZWpKMWRUQTRNamt3Y1RReUpUQTRKVEpESlRReUpVUTNKWE41YjNrd05ESTVNSEUwTWlVME1pVnNlSGgwZDBVekpUTXpaWFJ0TW5oNlJETWxOalF5WjNOeE0yNUROeVV6UTNsMmNFRTRPU1ZET1NVeVJTVkZNQ1ZGTUNVME1pVTBNaVUxTmpJNE5ESWxRamdsTmprbE5rVWxSRUlsUWtFbE4wVWxORElsT1VFbFJrSWxSa1VsTkRJbE5VUXpKVFE1TURVd2NUUXlKVEE0SlRKREpUUXlKWEZyZUhvd09EQnhORElsTURnbE1rTWxORElsZEhSNGVqQTNNSEUwTWlVd09DVXlReVUwTWlWNk1uVjFNRFl5TnpCeE5ESWxNRGdsTWtNbE5ESWxSRGNsYzNsdmVUQTJNalUwTWlVME1pVnNlSGgwZDBVekpUTXpRamNsUWpjbFFqY2xNbXhwYlhGdGJrTTNKVEpuYzNFemJrTTNKVE5sZEcwemJrTTNKVEowYkhSRGVYWndRVGc1SlVNNUpUSkZKVVV3SlVVd0pUUXlKVFF5SlRVMk1qYzBNaVUxUVNWR1FpVTBSU1UzUWlWR09TVTNSU1UwTWlVNVFTVkdRaVZHUlNVME1pVnhhM2g2TURnd2NUUXlKVEE0SlRKREpUUXlKVzExYlVRM0pXMHdOakJ4TkRJbE1EZ2xNa01sTkRJbGVqSjFkVEEzTWpjd2NUUXlKVEE0SlRKREpUUXlKVVEzSlhONWIza3dOekJ4TkRJbE5ESWxiSGg0ZEhkRk15VXpNMjV0YVVNM0pXMHlORUl6SlRWRE15VTFOVEpuWnpOdVF6Y2xNblJzZEVONWRuQkJPRGtsUXprbE1rVWxSVEFsUlRBbE5ESWxORElsTlRReVFqTWxORElsTURrbE56Z2xOVVVsUkRnbE0wSWxOa1VsTkRJbE9VRWxSa0lsUmtVbE5ESWxOVVF6SlRRNU1EVXdjVFF5SlRBNEpUSkRKVFF5SlcxMWJVUTNKVzB3TmpJNU1IRTBNaVV3T0NVeVF5VTBNaVZ4YTNoNk1EUXlPVEJ4TkRJbE1EZ2xNa01sTkRJbGRIUjRlakExTUhFME1pVXdPQ1V5UXlVME1pVjNjMng1TURVeU5qQnhORElsTURnbE1rTWxORElsZWpKMWRUQTRNSEUwTWlVd09DVXlReVUwTWlWRU55VnplVzk1TURReU9UQnhORElsTkRJbGJIaDRkSGRGTXlVek0yNXRhVU0zSlcweU4wTXpKVFJ2TW1kemNUTkRlWFp3UVRnNUpVTTVKVEpGSlVVd0pVVXdKVFF5SlRReUpUVTBNamswTWlVMU9DVkNRaVUwUlNVeVFTVkVPU1UyUlNVME1pVTVRU1ZHUWlWR1JTVTBNaVUxUkRNbE5Ea3dOVEJ4TkRJbE1EZ2xNa01sTkRJbGJYVnRSRGNsYlRBMU1IRTBNaVV3T0NVeVF5VTBNaVZ4YTNoNk1EWXdjVFF5SlRBNEpUSkRKVFF5SlhSMGVIb3dOekJ4TkRJbE1EZ2xNa01sTkRJbGVqSjFkVEE0TUhFME1pVXdPQ1V5UXlVME1pVkVOeVZ6ZVc5NU1EUXlPVEJ4TkRJbE5ESWxiSGg0ZEhkRk15VXpNMmQxUkRjbGJYZHNhWEo0WlhKck1tZHlNM3B0YUdsek1uUnNkRU41ZG5CQk9Ea2xRemtsTWtVbFJUQWxSVEFsTkRJbE5ESWxSRE1sTWtJekpUUXlKVEZCSlRkQ0pUVkZKVE01SlVZNUpUWkZKVFF5SlRsQkpVWkNKVVpGSlRReUpUVkVNeVUwT1RBMU1qVXdjVFF5SlRBNEpUSkRKVFF5SlcxMWJVUTNKVzB3TkRJMk1IRTBNaVV3T0NVeVF5VTBNaVZ4YTNoNk1EY3djVFF5SlRBNEpUSkRKVFF5SlhkemJIa3dOVEkyTUhFME1pVXdPQ1V5UXlVME1pVjZNblYxTURZeU5qUXlKVEE0SlRKREpUUXlKVVEzSlhONWIza3dOakJ4TkRJbE5ESWxiSGg0ZEhkRk15VXpNMEkzSlVJM0pVSTNKVEowY0dWRU55VnhOM2xETXlVeVozSXpibTFwUXpjbGJUSjBiSFJEZVhad1FUZzVKVU01SlRKRkpVVXdKVVV3SlRReUpUUXlKVU16SlRKRE15VTBNaVZFT0NWRU9DVTRSU1V3T1NVNVFpVTBSU1UwTWlVNVFTVkdRaVZHUlNVME1pVTFSRE1sTkRrd05ESkJNeVV3Y1RReUpUQTRKVEpESlRReUpXMTFiVVEzSlcwd05ESTVNSEUwTWlVd09DVXlReVUwTWlWd2FUQTFNSEUwTWlVd09DVXlReVUwTWlWeGEzaDZNRFl5T1RCeE5ESWxNRGdsTWtNbE5ESWxkM05zZVRBMU1qWXdjVFF5SlRBNEpUSkRKVFF5SlhveWRYVXdOakk1TUhFd1FqY2xORElsTURnbE1rTWxORElsUkRjbGMzbHZlVEEwTWprd2NUUXlKVFF5Sld4NGVIUjNSVE1sTXpOQ055VkNOeVZDTnlVeU5VSXpKVFZDTXlWRU55VjVjakpuYzNFemJrTTNKVE40UkRjbE1uUnNkRU41ZG5CQk9Ea2xRemtsTWtVbFJUQWxSVEFsTkRJbE5ESWxRek1sTWprME1pVkdRU1UwUWlVM1JTVkVPU1ZCT0NVNFJTVTBNaVU1UVNWR1FpVkdSU1UwTWlVMVJETWxORGt3TlRCeE5ESWxNRGdsTWtNbE5ESWxiWFZ0UkRjbGJUQTJNSEUwTWlVd09DVXlReVUwTWlWeGEzaDZNRFF5T1RCeE5ESWxNRGdsTWtNbE5ESWxkM05zZVRBMU1qa3djVFF5SlRBNEpUSkRKVFF5SlhveWRYVXdOekJ4TkRJbE1EZ2xNa01sTkRJbFJEY2xjM2x2ZVRBME1qa3djVFF5SlRReUpXeDRlSFIzUlRNbE16TnViV2xETnlWdE1tWnhRVE1sYldzeVozSXpRM2wyY0VFNE9TVkRPU1V5UlNWRk1DVkZNQ1UwTWlVME1pVTFPVFF5SlRSQ0pVVkNKVGhGSlRZNEpUQkJKVGRGSlRReUpUbEJKVVpDSlVaRkpUUXlKVFZFTXlVME9UQTFNSEUwTWlVd09DVXlReVUwTWlWdGRXMUVOeVZ0TURnd2NUUXlKVEE0SlRKREpUUXlKWEJwTURjd2NUUXlKVEE0SlRKREpUUXlKWEZ0YTNsNmJXaHBjekExTUhFME1pVXdPQ1V5UXlVME1pVnhhM2g2TURVeU9UQnhORElsTURnbE1rTWxORElsZEhSNGVqQTJNSEUwTWlVd09DVXlReVUwTWlWM2MyeDVNRFUwTWlVd09DVXlReVUwTWlWNk1uVjFNRFl3Y1RReUpUQTRKVEpESlRReUpVUTNKWE41YjNrd056QnhORElsTkRJbGJIaDRkSGRGTXlVek0zNDFNbkUxUkRNbE5FSXpKVEpuY2pORGJrTTNKVUZGTUNWRk1DVSIpKSksIDQpLAogICAgICAgIG1heFZpcFdlaWdodCA9IDEsCiAgICAgICAgTm9Jbm5lclZpcFVybFJlZ2V4ID0gL1wvYmVpaml4c1wuY24vLAogICAgICAgIE5vTW9iaWxlVmlwVXJsUmVnZXggPSAvanhcLndzbG1mXC5jb218YmVpaml4c1wuY24vOwogICAgICBWSVBfVVJMUyA9IGVuc3VyZUFycmF5KFZJUF9VUkxTKS5maWx0ZXIoKGZ1bmN0aW9uKG4pIHsKICAgICAgICByZXR1cm4gbi5pbmNsdWRlcygiaHR0cCIpCiAgICAgIH0pKTsKICAgICAgdmFyIGlzVXNlRGVmYXVsdFZpcFVybHMgPSAhMTsKICAgICAgMCA9PT0gVklQX1VSTFMubGVuZ3RoICYmIChWSVBfVVJMUyA9IGVuc3VyZUFycmF5KERFRkFVTFRfVklQX1VSTFMpLCBpc1VzZURlZmF1bHRWaXBVcmxzID0gITApLCBWSVBfVVJMUyA9IFZJUF9VUkxTLmZpbHRlcigoZnVuY3Rpb24obikgewogICAgICAgIHJldHVybiAhaXNNb2JpbGUgfHwgIU5vTW9iaWxlVmlwVXJsUmVnZXgudGVzdChuKQogICAgICB9KSk7CiAgICAgIHZhciBWSVBfQURET05fVVJMUyA9IFZJUF9VUkxTLmZpbHRlcigoZnVuY3Rpb24obikgewogICAgICAgICAgcmV0dXJuIG4uaW5jbHVkZXMoIuKclCIpCiAgICAgICAgfSkpLAogICAgICAgIGlzVmlwVXJsUmVnZXggPSB0b1VybFJlZ2V4KFZJUF9VUkxTKSwKICAgICAgICBpc1ZpcEFkZG9uVXJsUmVnZXggPSBWSVBfQURET05fVVJMUy5sZW5ndGggPiAwID8gdG9VcmxSZWdleChWSVBfQURET05fVVJMUykgOiAvJF4vLAogICAgICAgIHZpcFNpdGVTaWduID0gSHJlZi5tYXRjaCgvW1wuXC9dKFx3KylcLihcdyspXC8vKTsKICAgICAgdmlwU2l0ZVNpZ24gPSB2aXBTaXRlU2lnbiA/IHZpcFNpdGVTaWduWzFdIDogIm9vLm1vdmllIiwgVklQX1VSTFMgPSBWSVBfVVJMUy5tYXAoKGZ1bmN0aW9uKG4pIHsKICAgICAgICB2YXIgZSA9IHBhcnNlT29Vcmwobi5yZXBsYWNlKC89aHR0cC4rL2csICI9IikucmVwbGFjZSgvXHMq4pyULiovZywgIiIpKTsKICAgICAgICBpZiAoZS53ZWlnaHQgPSAwLCBlLm5hbWUuaW5jbHVkZXMoIu+/pSIpKSB7CiAgICAgICAgICB2YXIgdCA9IGUubmFtZS5zcGxpdCgvXHMq77+lXHMqLyk7CiAgICAgICAgICBpZiAoMSA9PT0gdC5sZW5ndGggPyB0ID0gdFswXSA6IChlLm5hbWUgPSB0WzBdLnJlcGxhY2UoL15ccypbXGRcLl0rXHMqLywgIiIpLCB0ID0gdFsxXSksIHQuaW5jbHVkZXModmlwU2l0ZVNpZ24pKSB7CiAgICAgICAgICAgIHZhciBpID0gdC5zcGxpdCgvXHMqXHxccyovKTsKICAgICAgICAgICAgZS53ZWlnaHQgKz0gLjA1ICogKGkubGVuZ3RoICsgMSksIGkuZm9yRWFjaCgoZnVuY3Rpb24obikgewogICAgICAgICAgICAgIGlmIChuLmluY2x1ZGVzKHZpcFNpdGVTaWduKSkgewogICAgICAgICAgICAgICAgaXNNb2JpbGUgJiYgbi5pbmNsdWRlcygiLG0iKSAmJiAoZS5pc00gPSAhMCk7CiAgICAgICAgICAgICAgICB2YXIgdCA9IG4ubWF0Y2goLywoW1xkXC5dKykvKTsKICAgICAgICAgICAgICAgIHQgJiYgKGUud2VpZ2h0ICs9IE51bWJlcih0WzFdKSkKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pKSwgZS51cmwuaW5jbHVkZXMoIm0xOTA3IikgPyBlLndlaWdodCA9IGUud2VpZ2h0ICogKGlzTW9iaWxlID8gLjQ1IDogLjc1KSA6IGUudXJsLmluY2x1ZGVzKCJ5aW5neGlhbmdiYW8iKSA/IGUud2VpZ2h0ID0gLjcgKiBlLndlaWdodCA6IGUudXJsLmluY2x1ZGVzKCJiZWlqaXhzIikgJiYgKGUud2VpZ2h0ID0gLjY1ICogZS53ZWlnaHQpCiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGUud2VpZ2h0ID0gLTE7CiAgICAgICAgcmV0dXJuIG1heFZpcFdlaWdodCA9IE1hdGgubWF4KG1heFZpcFdlaWdodCwgZS53ZWlnaHQpLCBlCiAgICAgIH0pKTsKICAgICAgdmFyIGdldFZpcFVybFdlaWdodCA9IGZ1bmN0aW9uKG4pIHsKICAgICAgICByZXR1cm4gbi5pc00gPyBuLndlaWdodCArIDEwMCA6IG4ud2VpZ2h0CiAgICAgIH07CiAgICAgIFZJUF9VUkxTLnNvcnQoKGZ1bmN0aW9uKG4sIGUpIHsKICAgICAgICByZXR1cm4gZ2V0VmlwVXJsV2VpZ2h0KGUpIC0gZ2V0VmlwVXJsV2VpZ2h0KG4pCiAgICAgIH0pKSwgbWF4VmlwV2VpZ2h0ICo9IGlzTW9iaWxlID8gMS4yIDogMS4xOwogICAgICB2YXIgcGxheWVyVGl0bGUgPSAiIiwKICAgICAgICBpc0hpa2VyID0gISF3aW5kb3cuZnlfYnJpZGdlX2FwcCwKICAgICAgICBpc01peGlhID0gISF3aW5kb3cubXhfYnJvd3Nlcl9vYmosCiAgICAgICAgaXNBbGxvd0hpa2VyU25pZmYgPSBpc0hpa2VyICYmICEhd2luZG93LmZ5X2JyaWRnZV9hcHAuZ2V0TmV0d29ya1JlY29yZHMsCiAgICAgICAgaXNBbGxvd01peGlhU25pZmYgPSBpc01peGlhICYmICEhd2luZG93Lm14X2Jyb3dzZXJfb2JqLmdldHdlYmxvZywKICAgICAgICBpc0FsbG93U25pZmYgPSBpc1VzZURlZmF1bHRWaXBVcmxzICYmIChpc0FsbG93SGlrZXJTbmlmZiB8fCBpc0FsbG93TWl4aWFTbmlmZiksCiAgICAgICAgc25pZmZUaW1lc3RhbXAgPSBEYXRlLm5vdygpLAogICAgICAgIHNuaWZmTmFtZSA9IGlzSGlrZXIgPyAi6KeG55WMIiA6IGlzTWl4aWEgPyAi57Gz5L6gIiA6ICLll4XmjqIiLAogICAgICAgIGlzU25pZmZpbmcgPSAhMSwKICAgICAgICBzbmlmZlRpY2sgPSAwOwogICAgICBsb2coIuOAkCIuY29uY2F0KHNuaWZmTmFtZSwgIuOAkWlzQWxsb3dTbmlmZjoiKSwgaXNBbGxvd1NuaWZmKTsKICAgICAgdmFyIGlzSW52YWxpZFNuaWZmVXJsUmVnZXggPSAvYnRyYWNlXC52aWRlb1wucXFcLmNvbS8sCiAgICAgICAgaXNWaWRlb1VybFJlZ2V4ID0gL1wuKG1wNHxtM3U4fDNncHx3bXZ8Zmx2fGF2aXxybXZifG00dnx0cykvLAogICAgICAgIGlzQmFkVmlkZW9VcmxSZWdleCA9IC8oNzFlZGdlfGNvbS1sLXlvdWt1KVwuY29tLywKICAgICAgICBaZXB0byA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgdmFyIG4sIGUsIHQsIGksIG8sIHIgPSBbXSwKICAgICAgICAgICAgYSA9IHIuY29uY2F0LAogICAgICAgICAgICBsID0gci5maWx0ZXIsCiAgICAgICAgICAgIHMgPSByLnNsaWNlLAogICAgICAgICAgICBjID0gd2luZG93LmRvY3VtZW50LAogICAgICAgICAgICBwID0ge30sCiAgICAgICAgICAgIHUgPSB7fSwKICAgICAgICAgICAgZCA9IHsKICAgICAgICAgICAgICAiY29sdW1uLWNvdW50IjogMSwKICAgICAgICAgICAgICBjb2x1bW5zOiAxLAogICAgICAgICAgICAgICJmb250LXdlaWdodCI6IDEsCiAgICAgICAgICAgICAgImxpbmUtaGVpZ2h0IjogMSwKICAgICAgICAgICAgICBvcGFjaXR5OiAxLAogICAgICAgICAgICAgICJ6LWluZGV4IjogMSwKICAgICAgICAgICAgICB6b29tOiAxCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGYgPSAvXlxzKjwoXHcrfCEpW14+XSo+LywKICAgICAgICAgICAgbSA9IC9ePChcdyspXHMqXC8/Pig/OjxcL1wxPnwpJC8sCiAgICAgICAgICAgIGggPSAvPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbXHc6XSspW14+XSopXC8+L2dpLAogICAgICAgICAgICB2ID0gL14oPzpib2R5fGh0bWwpJC9pLAogICAgICAgICAgICBnID0gLyhbQS1aXSkvZywKICAgICAgICAgICAgeSA9IFsidmFsIiwgImNzcyIsICJodG1sIiwgInRleHQiLCAiZGF0YSIsICJ3aWR0aCIsICJoZWlnaHQiLCAib2Zmc2V0Il0sCiAgICAgICAgICAgIGIgPSBjLmNyZWF0ZUVsZW1lbnQoInRhYmxlIiksCiAgICAgICAgICAgIE0gPSBjLmNyZWF0ZUVsZW1lbnQoInRyIiksCiAgICAgICAgICAgIHcgPSB7CiAgICAgICAgICAgICAgdHI6IGMuY3JlYXRlRWxlbWVudCgidGJvZHkiKSwKICAgICAgICAgICAgICB0Ym9keTogYiwKICAgICAgICAgICAgICB0aGVhZDogYiwKICAgICAgICAgICAgICB0Zm9vdDogYiwKICAgICAgICAgICAgICB0ZDogTSwKICAgICAgICAgICAgICB0aDogTSwKICAgICAgICAgICAgICAiKiI6IGMuY3JlYXRlRWxlbWVudCgiZGl2IikKICAgICAgICAgICAgfSwKICAgICAgICAgICAgVCA9IC9jb21wbGV0ZXxsb2FkZWR8aW50ZXJhY3RpdmUvLAogICAgICAgICAgICBVID0gL15bXHctXSokLywKICAgICAgICAgICAgeCA9IHt9LAogICAgICAgICAgICBEID0geC50b1N0cmluZywKICAgICAgICAgICAgSiA9IHt9LAogICAgICAgICAgICBOID0gYy5jcmVhdGVFbGVtZW50KCJkaXYiKSwKICAgICAgICAgICAgayA9IHsKICAgICAgICAgICAgICB0YWJpbmRleDogInRhYkluZGV4IiwKICAgICAgICAgICAgICByZWFkb25seTogInJlYWRPbmx5IiwKICAgICAgICAgICAgICBmb3I6ICJodG1sRm9yIiwKICAgICAgICAgICAgICBjbGFzczogImNsYXNzTmFtZSIsCiAgICAgICAgICAgICAgbWF4bGVuZ3RoOiAibWF4TGVuZ3RoIiwKICAgICAgICAgICAgICBjZWxsc3BhY2luZzogImNlbGxTcGFjaW5nIiwKICAgICAgICAgICAgICBjZWxscGFkZGluZzogImNlbGxQYWRkaW5nIiwKICAgICAgICAgICAgICByb3dzcGFuOiAicm93U3BhbiIsCiAgICAgICAgICAgICAgY29sc3BhbjogImNvbFNwYW4iLAogICAgICAgICAgICAgIHVzZW1hcDogInVzZU1hcCIsCiAgICAgICAgICAgICAgZnJhbWVib3JkZXI6ICJmcmFtZUJvcmRlciIsCiAgICAgICAgICAgICAgY29udGVudGVkaXRhYmxlOiAiY29udGVudEVkaXRhYmxlIgogICAgICAgICAgICB9LAogICAgICAgICAgICBJID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbihuKSB7CiAgICAgICAgICAgICAgcmV0dXJuIG4gaW5zdGFuY2VvZiBBcnJheQogICAgICAgICAgICB9OwoKICAgICAgICAgIGZ1bmN0aW9uIF8obikgewogICAgICAgICAgICByZXR1cm4gbnVsbCA9PSBuID8gU3RyaW5nKG4pIDogeFtELmNhbGwobildIHx8ICJvYmplY3QiCiAgICAgICAgICB9CgogICAgICAgICAgZnVuY3Rpb24gUyhuKSB7CiAgICAgICAgICAgIHJldHVybiAiZnVuY3Rpb24iID09IF8obikKICAgICAgICAgIH0KCiAgICAgICAgICBmdW5jdGlvbiBRKG4pIHsKICAgICAgICAgICAgcmV0dXJuIG51bGwgIT0gbiAmJiBuID09IG4ud2luZG93CiAgICAgICAgICB9CgogICAgICAgICAgZnVuY3Rpb24gVihuKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsICE9IG4gJiYgbi5ub2RlVHlwZSA9PSBuLkRPQ1VNRU5UX05PREUKICAgICAgICAgIH0KCiAgICAgICAgICBmdW5jdGlvbiBqKG4pIHsKICAgICAgICAgICAgcmV0dXJuICJvYmplY3QiID09IF8obikKICAgICAgICAgIH0KCiAgICAgICAgICBmdW5jdGlvbiBFKG4pIHsKICAgICAgICAgICAgcmV0dXJuIGoobikgJiYgIVEobikgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKG4pID09IE9iamVjdC5wcm90b3R5cGUKICAgICAgICAgIH0KCiAgICAgICAgICBmdW5jdGlvbiBSKG4pIHsKICAgICAgICAgICAgdmFyIHQgPSAhIW4gJiYgImxlbmd0aCIgaW4gbiAmJiBuLmxlbmd0aCwKICAgICAgICAgICAgICBpID0gZS50eXBlKG4pOwogICAgICAgICAgICByZXR1cm4gImZ1bmN0aW9uIiAhPSBpICYmICFRKG4pICYmICgiYXJyYXkiID09IGkgfHwgMCA9PT0gdCB8fCAibnVtYmVyIiA9PSB0eXBlb2YgdCAmJiB0ID4gMCAmJiB0IC0gMSBpbiBuKQogICAgICAgICAgfQoKICAgICAgICAgIGZ1bmN0aW9uIEEobikgewogICAgICAgICAgICByZXR1cm4gbi5yZXBsYWNlKC86Oi9nLCAiLyIpLnJlcGxhY2UoLyhbQS1aXSspKFtBLVpdW2Etel0pL2csICIkMV8kMiIpLnJlcGxhY2UoLyhbYS16XGRdKShbQS1aXSkvZywgIiQxXyQyIikucmVwbGFjZSgvXy9nLCAiLSIpLnRvTG93ZXJDYXNlKCkKICAgICAgICAgIH0KCiAgICAgICAgICBmdW5jdGlvbiBPKG4pIHsKICAgICAgICAgICAgcmV0dXJuIG4gaW4gdSA/IHVbbl0gOiB1W25dID0gbmV3IFJlZ0V4cCgiKF58XFxzKSIgKyBuICsgIihcXHN8JCkiKQogICAgICAgICAgfQoKICAgICAgICAgIGZ1bmN0aW9uIEMobiwgZSkgewogICAgICAgICAgICByZXR1cm4gIm51bWJlciIgIT0gdHlwZW9mIGUgfHwgZFtBKG4pXSA/IGUgOiBlICsgInB4IgogICAgICAgICAgfQoKICAgICAgICAgIGZ1bmN0aW9uICQobikgewogICAgICAgICAgICByZXR1cm4gImNoaWxkcmVuIiBpbiBuID8gcy5jYWxsKG4uY2hpbGRyZW4pIDogZS5tYXAobi5jaGlsZE5vZGVzLCAoZnVuY3Rpb24obikgewogICAgICAgICAgICAgIGlmICgxID09IG4ubm9kZVR5cGUpIHJldHVybiBuCiAgICAgICAgICAgIH0pKQogICAgICAgICAgfQoKICAgICAgICAgIGZ1bmN0aW9uIHoobiwgZSkgewogICAgICAgICAgICB2YXIgdCwgaSA9IG4gPyBuLmxlbmd0aCA6IDA7CiAgICAgICAgICAgIGZvciAodCA9IDA7IHQgPCBpOyB0KyspIHRoaXNbdF0gPSBuW3RdOwogICAgICAgICAgICB0aGlzLmxlbmd0aCA9IGksIHRoaXMuc2VsZWN0b3IgPSBlIHx8ICIiCiAgICAgICAgICB9CgogICAgICAgICAgZnVuY3Rpb24gSChlLCB0LCBpKSB7CiAgICAgICAgICAgIGZvciAobiBpbiB0KSBpICYmIChFKHRbbl0pIHx8IEkodFtuXSkpID8gKEUodFtuXSkgJiYgIUUoZVtuXSkgJiYgKGVbbl0gPSB7fSksIEkodFtuXSkgJiYgIUkoZVtuXSkgJiYgKGVbbl0gPSBbXSksIEgoZVtuXSwgdFtuXSwgaSkpIDogdm9pZCAwICE9PSB0W25dICYmIChlW25dID0gdFtuXSkKICAgICAgICAgIH0KCiAgICAgICAgICBmdW5jdGlvbiBCKG4sIHQpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGwgPT0gdCA/IGUobikgOiBlKG4pLmZpbHRlcih0KQogICAgICAgICAgfQoKICAgICAgICAgIGZ1bmN0aW9uIFAobiwgZSwgdCwgaSkgewogICAgICAgICAgICByZXR1cm4gUyhlKSA/IGUuY2FsbChuLCB0LCBpKSA6IGUKICAgICAgICAgIH0KCiAgICAgICAgICBmdW5jdGlvbiBGKG4sIGUsIHQpIHsKICAgICAgICAgICAgbnVsbCA9PSB0ID8gbi5yZW1vdmVBdHRyaWJ1dGUoZSkgOiBuLnNldEF0dHJpYnV0ZShlLCB0KQogICAgICAgICAgfQoKICAgICAgICAgIGZ1bmN0aW9uIEwobiwgZSkgewogICAgICAgICAgICB2YXIgdCA9IG4uY2xhc3NOYW1lIHx8ICIiLAogICAgICAgICAgICAgIGkgPSB0ICYmIHZvaWQgMCAhPT0gdC5iYXNlVmFsOwogICAgICAgICAgICBpZiAodm9pZCAwID09PSBlKSByZXR1cm4gaSA/IHQuYmFzZVZhbCA6IHQ7CiAgICAgICAgICAgIGkgPyB0LmJhc2VWYWwgPSBlIDogbi5jbGFzc05hbWUgPSBlCiAgICAgICAgICB9CgogICAgICAgICAgZnVuY3Rpb24gcShuKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgcmV0dXJuIG4gPyAidHJ1ZSIgPT0gbiB8fCAiZmFsc2UiICE9IG4gJiYgKCJudWxsIiA9PSBuID8gbnVsbCA6ICtuICsgIiIgPT0gbiA/ICtuIDogL15bXFtce10vLnRlc3QobikgPyBlLnBhcnNlSlNPTihuKSA6IG4pIDogbgogICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgcmV0dXJuIG4KICAgICAgICAgICAgfQogICAgICAgICAgfQoKICAgICAgICAgIGZ1bmN0aW9uIFgobiwgZSkgewogICAgICAgICAgICBlKG4pOwogICAgICAgICAgICBmb3IgKHZhciB0ID0gMCwgaSA9IG4uY2hpbGROb2Rlcy5sZW5ndGg7IHQgPCBpOyB0KyspIFgobi5jaGlsZE5vZGVzW3RdLCBlKQogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIEoubWF0Y2hlcyA9IGZ1bmN0aW9uKG4sIGUpIHsKICAgICAgICAgICAgaWYgKCFlIHx8ICFuIHx8IDEgIT09IG4ubm9kZVR5cGUpIHJldHVybiAhMTsKICAgICAgICAgICAgdmFyIHQgPSBuLm1hdGNoZXMgfHwgbi53ZWJraXRNYXRjaGVzU2VsZWN0b3IgfHwgbi5tb3pNYXRjaGVzU2VsZWN0b3IgfHwgbi5vTWF0Y2hlc1NlbGVjdG9yIHx8IG4ubWF0Y2hlc1NlbGVjdG9yOwogICAgICAgICAgICBpZiAodCkgcmV0dXJuIHQuY2FsbChuLCBlKTsKICAgICAgICAgICAgdmFyIGksIG8gPSBuLnBhcmVudE5vZGUsCiAgICAgICAgICAgICAgciA9ICFvOwogICAgICAgICAgICByZXR1cm4gciAmJiAobyA9IE4pLmFwcGVuZENoaWxkKG4pLCBpID0gfkoucXNhKG8sIGUpLmluZGV4T2YobiksIHIgJiYgTi5yZW1vdmVDaGlsZChuKSwgaQogICAgICAgICAgfSwgaSA9IGZ1bmN0aW9uKG4pIHsKICAgICAgICAgICAgcmV0dXJuIG4ucmVwbGFjZSgvLSsoLik/L2csIChmdW5jdGlvbihuLCBlKSB7CiAgICAgICAgICAgICAgcmV0dXJuIGUgPyBlLnRvVXBwZXJDYXNlKCkgOiAiIgogICAgICAgICAgICB9KSkKICAgICAgICAgIH0sIG8gPSBmdW5jdGlvbihuKSB7CiAgICAgICAgICAgIHJldHVybiBsLmNhbGwobiwgKGZ1bmN0aW9uKGUsIHQpIHsKICAgICAgICAgICAgICByZXR1cm4gbi5pbmRleE9mKGUpID09IHQKICAgICAgICAgICAgfSkpCiAgICAgICAgICB9LCBKLmZyYWdtZW50ID0gZnVuY3Rpb24obiwgdCwgaSkgewogICAgICAgICAgICB2YXIgbywgciwgYTsKICAgICAgICAgICAgcmV0dXJuIG0udGVzdChuKSAmJiAobyA9IGUoYy5jcmVhdGVFbGVtZW50KFJlZ0V4cC4kMSkpKSwgbyB8fCAobi5yZXBsYWNlICYmIChuID0gbi5yZXBsYWNlKGgsICI8JDE+PC8kMj4iKSksIHZvaWQgMCA9PT0gdCAmJiAodCA9IGYudGVzdChuKSAmJiBSZWdFeHAuJDEpLCB0IGluIHcgfHwgKHQgPSAiKiIpLCAoYSA9IHdbdF0pLmlubmVySFRNTCA9ICIiICsgbiwgbyA9IGUuZWFjaChzLmNhbGwoYS5jaGlsZE5vZGVzKSwgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgIGEucmVtb3ZlQ2hpbGQodGhpcykKICAgICAgICAgICAgfSkpKSwgRShpKSAmJiAociA9IGUobyksIGUuZWFjaChpLCAoZnVuY3Rpb24obiwgZSkgewogICAgICAgICAgICAgIHkuaW5kZXhPZihuKSA+IC0xID8gcltuXShlKSA6IHIuYXR0cihuLCBlKQogICAgICAgICAgICB9KSkpLCBvCiAgICAgICAgICB9LCBKLlogPSBmdW5jdGlvbihuLCBlKSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgeihuLCBlKQogICAgICAgICAgfSwgSi5pc1ogPSBmdW5jdGlvbihuKSB7CiAgICAgICAgICAgIHJldHVybiBuIGluc3RhbmNlb2YgSi5aCiAgICAgICAgICB9LCBKLmluaXQgPSBmdW5jdGlvbihuLCB0KSB7CiAgICAgICAgICAgIHZhciBpLCBvOwogICAgICAgICAgICBpZiAoIW4pIHJldHVybiBKLlooKTsKICAgICAgICAgICAgaWYgKCJzdHJpbmciID09IHR5cGVvZiBuKQogICAgICAgICAgICAgIGlmICgiPCIgPT0gKG4gPSBuLnRyaW0oKSlbMF0gJiYgZi50ZXN0KG4pKSBpID0gSi5mcmFnbWVudChuLCBSZWdFeHAuJDEsIHQpLCBuID0gbnVsbDsKICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGlmICh2b2lkIDAgIT09IHQpIHJldHVybiBlKHQpLmZpbmQobik7CiAgICAgICAgICAgICAgICBpID0gSi5xc2EoYywgbikKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgIGlmIChTKG4pKSByZXR1cm4gZShjKS5yZWFkeShuKTsKICAgICAgICAgICAgICBpZiAoSi5pc1oobikpIHJldHVybiBuOwogICAgICAgICAgICAgIGlmIChJKG4pKSBvID0gbiwgaSA9IGwuY2FsbChvLCAoZnVuY3Rpb24obikgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGwgIT0gbgogICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICBlbHNlIGlmIChqKG4pKSBpID0gW25dLCBuID0gbnVsbDsKICAgICAgICAgICAgICBlbHNlIGlmIChmLnRlc3QobikpIGkgPSBKLmZyYWdtZW50KG4udHJpbSgpLCBSZWdFeHAuJDEsIHQpLCBuID0gbnVsbDsKICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGlmICh2b2lkIDAgIT09IHQpIHJldHVybiBlKHQpLmZpbmQobik7CiAgICAgICAgICAgICAgICBpID0gSi5xc2EoYywgbikKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIEouWihpLCBuKQogICAgICAgICAgfSwgKGUgPSBmdW5jdGlvbihuLCBlKSB7CiAgICAgICAgICAgIHJldHVybiBKLmluaXQobiwgZSkKICAgICAgICAgIH0pLmV4dGVuZCA9IGZ1bmN0aW9uKG4pIHsKICAgICAgICAgICAgdmFyIGUsIHQgPSBzLmNhbGwoYXJndW1lbnRzLCAxKTsKICAgICAgICAgICAgcmV0dXJuICJib29sZWFuIiA9PSB0eXBlb2YgbiAmJiAoZSA9IG4sIG4gPSB0LnNoaWZ0KCkpLCB0LmZvckVhY2goKGZ1bmN0aW9uKHQpIHsKICAgICAgICAgICAgICBIKG4sIHQsIGUpCiAgICAgICAgICAgIH0pKSwgbgogICAgICAgICAgfSwgSi5xc2EgPSBmdW5jdGlvbihuLCBlKSB7CiAgICAgICAgICAgIHZhciB0LCBpID0gIiMiID09IGVbMF0sCiAgICAgICAgICAgICAgbyA9ICFpICYmICIuIiA9PSBlWzBdLAogICAgICAgICAgICAgIHIgPSBpIHx8IG8gPyBlLnNsaWNlKDEpIDogZSwKICAgICAgICAgICAgICBhID0gVS50ZXN0KHIpOwogICAgICAgICAgICByZXR1cm4gbi5nZXRFbGVtZW50QnlJZCAmJiBhICYmIGkgPyAodCA9IG4uZ2V0RWxlbWVudEJ5SWQocikpID8gW3RdIDogW10gOiAxICE9PSBuLm5vZGVUeXBlICYmIDkgIT09IG4ubm9kZVR5cGUgJiYgMTEgIT09IG4ubm9kZVR5cGUgPyBbXSA6IHMuY2FsbChhICYmICFpICYmIG4uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSA/IG8gPyBuLmdldEVsZW1lbnRzQnlDbGFzc05hbWUocikgOiBuLmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpIDogbi5xdWVyeVNlbGVjdG9yQWxsKGUpKQogICAgICAgICAgfSwgZS5jb250YWlucyA9IGMuZG9jdW1lbnRFbGVtZW50LmNvbnRhaW5zID8gZnVuY3Rpb24obiwgZSkgewogICAgICAgICAgICByZXR1cm4gbiAhPT0gZSAmJiBuLmNvbnRhaW5zKGUpCiAgICAgICAgICB9IDogZnVuY3Rpb24obiwgZSkgewogICAgICAgICAgICBmb3IgKDsgZSAmJiAoZSA9IGUucGFyZW50Tm9kZSk7KQogICAgICAgICAgICAgIGlmIChlID09PSBuKSByZXR1cm4gITA7CiAgICAgICAgICAgIHJldHVybiAhMQogICAgICAgICAgfSwgZS50eXBlID0gXywgZS5pc0Z1bmN0aW9uID0gUywgZS5pc1dpbmRvdyA9IFEsIGUuaXNBcnJheSA9IEksIGUuaXNQbGFpbk9iamVjdCA9IEUsIGUuaXNFbXB0eU9iamVjdCA9IGZ1bmN0aW9uKG4pIHsKICAgICAgICAgICAgdmFyIGU7CiAgICAgICAgICAgIGZvciAoZSBpbiBuKSByZXR1cm4gITE7CiAgICAgICAgICAgIHJldHVybiAhMAogICAgICAgICAgfSwgZS5pc051bWVyaWMgPSBmdW5jdGlvbihuKSB7CiAgICAgICAgICAgIHZhciBlID0gTnVtYmVyKG4pLAogICAgICAgICAgICAgIHQgPSB0eXBlb2YgbjsKICAgICAgICAgICAgcmV0dXJuIG51bGwgIT0gbiAmJiAiYm9vbGVhbiIgIT0gdCAmJiAoInN0cmluZyIgIT0gdCB8fCBuLmxlbmd0aCkgJiYgIWlzTmFOKGUpICYmIGlzRmluaXRlKGUpIHx8ICExCiAgICAgICAgICB9LCBlLmluQXJyYXkgPSBmdW5jdGlvbihuLCBlLCB0KSB7CiAgICAgICAgICAgIHJldHVybiByLmluZGV4T2YuY2FsbChlLCBuLCB0KQogICAgICAgICAgfSwgZS5jYW1lbENhc2UgPSBpLCBlLnRyaW0gPSBmdW5jdGlvbihuKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsID09IG4gPyAiIiA6IFN0cmluZy5wcm90b3R5cGUudHJpbS5jYWxsKG4pCiAgICAgICAgICB9LCBlLnV1aWQgPSAwLCBlLnN1cHBvcnQgPSB7fSwgZS5leHByID0ge30sIGUubm9vcCA9IGZ1bmN0aW9uKCkge30sIGUubWFwID0gZnVuY3Rpb24obiwgdCkgewogICAgICAgICAgICB2YXIgaSwgbywgciwgYSwgbCA9IFtdOwogICAgICAgICAgICBpZiAoUihuKSkKICAgICAgICAgICAgICBmb3IgKG8gPSAwOyBvIDwgbi5sZW5ndGg7IG8rKykgbnVsbCAhPSAoaSA9IHQobltvXSwgbykpICYmIGwucHVzaChpKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIGZvciAociBpbiBuKSBudWxsICE9IChpID0gdChuW3JdLCByKSkgJiYgbC5wdXNoKGkpOwogICAgICAgICAgICByZXR1cm4gKGEgPSBsKS5sZW5ndGggPiAwID8gZS5mbi5jb25jYXQuYXBwbHkoW10sIGEpIDogYQogICAgICAgICAgfSwgZS5lYWNoID0gZnVuY3Rpb24obiwgZSkgewogICAgICAgICAgICB2YXIgdCwgaTsKICAgICAgICAgICAgaWYgKFIobikpIHsKICAgICAgICAgICAgICBmb3IgKHQgPSAwOyB0IDwgbi5sZW5ndGg7IHQrKykKICAgICAgICAgICAgICAgIGlmICghMSA9PT0gZS5jYWxsKG5bdF0sIHQsIG5bdF0pKSByZXR1cm4gbgogICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICBmb3IgKGkgaW4gbikKICAgICAgICAgICAgICAgIGlmICghMSA9PT0gZS5jYWxsKG5baV0sIGksIG5baV0pKSByZXR1cm4gbjsKICAgICAgICAgICAgcmV0dXJuIG4KICAgICAgICAgIH0sIGUuZ3JlcCA9IGZ1bmN0aW9uKG4sIGUpIHsKICAgICAgICAgICAgcmV0dXJuIGwuY2FsbChuLCBlKQogICAgICAgICAgfSwgd2luZG93LkpTT04gJiYgKGUucGFyc2VKU09OID0gSlNPTi5wYXJzZSksIGUuZWFjaCgiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCBFcnJvciIuc3BsaXQoIiAiKSwgKGZ1bmN0aW9uKG4sIGUpIHsKICAgICAgICAgICAgeFsiW29iamVjdCAiICsgZSArICJdIl0gPSBlLnRvTG93ZXJDYXNlKCkKICAgICAgICAgIH0pKSwgZS5mbiA9IHsKICAgICAgICAgICAgY29uc3RydWN0b3I6IEouWiwKICAgICAgICAgICAgbGVuZ3RoOiAwLAogICAgICAgICAgICBmb3JFYWNoOiByLmZvckVhY2gsCiAgICAgICAgICAgIHJlZHVjZTogci5yZWR1Y2UsCiAgICAgICAgICAgIHB1c2g6IHIucHVzaCwKICAgICAgICAgICAgc29ydDogci5zb3J0LAogICAgICAgICAgICBzcGxpY2U6IHIuc3BsaWNlLAogICAgICAgICAgICBpbmRleE9mOiByLmluZGV4T2YsCiAgICAgICAgICAgIGNvbmNhdDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgdmFyIG4sIGUsIHQgPSBbXTsKICAgICAgICAgICAgICBmb3IgKG4gPSAwOyBuIDwgYXJndW1lbnRzLmxlbmd0aDsgbisrKSBlID0gYXJndW1lbnRzW25dLCB0W25dID0gSi5pc1ooZSkgPyBlLnRvQXJyYXkoKSA6IGU7CiAgICAgICAgICAgICAgcmV0dXJuIGEuYXBwbHkoSi5pc1oodGhpcykgPyB0aGlzLnRvQXJyYXkoKSA6IHRoaXMsIHQpCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIG1hcDogZnVuY3Rpb24obikgewogICAgICAgICAgICAgIHJldHVybiBlKGUubWFwKHRoaXMsIChmdW5jdGlvbihlLCB0KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbi5jYWxsKGUsIHQsIGUpCiAgICAgICAgICAgICAgfSkpKQogICAgICAgICAgICB9LAogICAgICAgICAgICBzbGljZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgcmV0dXJuIGUocy5hcHBseSh0aGlzLCBhcmd1bWVudHMpKQogICAgICAgICAgICB9LAogICAgICAgICAgICByZWFkeTogZnVuY3Rpb24obikgewogICAgICAgICAgICAgIHJldHVybiBULnRlc3QoYy5yZWFkeVN0YXRlKSAmJiBjLmJvZHkgPyBuKGUpIDogYy5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgbihlKQogICAgICAgICAgICAgIH0pLCAhMSksIHRoaXMKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbihuKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgMCA9PT0gbiA/IHMuY2FsbCh0aGlzKSA6IHRoaXNbbiA+PSAwID8gbiA6IG4gKyB0aGlzLmxlbmd0aF0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgdG9BcnJheTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KCkKICAgICAgICAgICAgfSwKICAgICAgICAgICAgc2l6ZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGVuZ3RoCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHJlbW92ZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBudWxsICE9IHRoaXMucGFyZW50Tm9kZSAmJiB0aGlzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcykKICAgICAgICAgICAgICB9KSkKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZWFjaDogZnVuY3Rpb24obikgewogICAgICAgICAgICAgIHJldHVybiByLmV2ZXJ5LmNhbGwodGhpcywgKGZ1bmN0aW9uKGUsIHQpIHsKICAgICAgICAgICAgICAgIHJldHVybiAhMSAhPT0gbi5jYWxsKGUsIHQsIGUpCiAgICAgICAgICAgICAgfSkpLCB0aGlzCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGZpbHRlcjogZnVuY3Rpb24obikgewogICAgICAgICAgICAgIHJldHVybiBTKG4pID8gdGhpcy5ub3QodGhpcy5ub3QobikpIDogZShsLmNhbGwodGhpcywgKGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgICAgIHJldHVybiBKLm1hdGNoZXMoZSwgbikKICAgICAgICAgICAgICB9KSkpCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGFkZDogZnVuY3Rpb24obiwgdCkgewogICAgICAgICAgICAgIHJldHVybiBlKG8odGhpcy5jb25jYXQoZShuLCB0KSkpKQogICAgICAgICAgICB9LAogICAgICAgICAgICBpczogZnVuY3Rpb24obikgewogICAgICAgICAgICAgIHJldHVybiB0aGlzLmxlbmd0aCA+IDAgJiYgSi5tYXRjaGVzKHRoaXNbMF0sIG4pCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIG5vdDogZnVuY3Rpb24obikgewogICAgICAgICAgICAgIHZhciB0ID0gW107CiAgICAgICAgICAgICAgaWYgKFMobikgJiYgdm9pZCAwICE9PSBuLmNhbGwpIHRoaXMuZWFjaCgoZnVuY3Rpb24oZSkgewogICAgICAgICAgICAgICAgbi5jYWxsKHRoaXMsIGUpIHx8IHQucHVzaCh0aGlzKQogICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBpID0gInN0cmluZyIgPT0gdHlwZW9mIG4gPyB0aGlzLmZpbHRlcihuKSA6IFIobikgJiYgUyhuLml0ZW0pID8gcy5jYWxsKG4pIDogZShuKTsKICAgICAgICAgICAgICAgIHRoaXMuZm9yRWFjaCgoZnVuY3Rpb24obikgewogICAgICAgICAgICAgICAgICBpLmluZGV4T2YobikgPCAwICYmIHQucHVzaChuKQogICAgICAgICAgICAgICAgfSkpCiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBlKHQpCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGhhczogZnVuY3Rpb24obikgewogICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbHRlcigoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gaihuKSA/IGUuY29udGFpbnModGhpcywgbikgOiBlKHRoaXMpLmZpbmQobikuc2l6ZSgpCiAgICAgICAgICAgICAgfSkpCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGVxOiBmdW5jdGlvbihuKSB7CiAgICAgICAgICAgICAgcmV0dXJuIC0xID09PSBuID8gdGhpcy5zbGljZShuKSA6IHRoaXMuc2xpY2UobiwgK24gKyAxKQogICAgICAgICAgICB9LAogICAgICAgICAgICBmaXJzdDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgdmFyIG4gPSB0aGlzWzBdOwogICAgICAgICAgICAgIHJldHVybiBuICYmICFqKG4pID8gbiA6IGUobikKICAgICAgICAgICAgfSwKICAgICAgICAgICAgbGFzdDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgdmFyIG4gPSB0aGlzW3RoaXMubGVuZ3RoIC0gMV07CiAgICAgICAgICAgICAgcmV0dXJuIG4gJiYgIWoobikgPyBuIDogZShuKQogICAgICAgICAgICB9LAogICAgICAgICAgICBmaW5kOiBmdW5jdGlvbihuKSB7CiAgICAgICAgICAgICAgdmFyIHQgPSB0aGlzOwogICAgICAgICAgICAgIHJldHVybiBuID8gIm9iamVjdCIgPT0gdHlwZW9mIG4gPyBlKG4pLmZpbHRlcigoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB2YXIgbiA9IHRoaXM7CiAgICAgICAgICAgICAgICByZXR1cm4gci5zb21lLmNhbGwodCwgKGZ1bmN0aW9uKHQpIHsKICAgICAgICAgICAgICAgICAgcmV0dXJuIGUuY29udGFpbnModCwgbikKICAgICAgICAgICAgICAgIH0pKQogICAgICAgICAgICAgIH0pKSA6IDEgPT0gdGhpcy5sZW5ndGggPyBlKEoucXNhKHRoaXNbMF0sIG4pKSA6IHRoaXMubWFwKChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHJldHVybiBKLnFzYSh0aGlzLCBuKQogICAgICAgICAgICAgIH0pKSA6IGUoKQogICAgICAgICAgICB9LAogICAgICAgICAgICBjbG9zZXN0OiBmdW5jdGlvbihuLCB0KSB7CiAgICAgICAgICAgICAgdmFyIGkgPSBbXSwKICAgICAgICAgICAgICAgIG8gPSAib2JqZWN0IiA9PSB0eXBlb2YgbiAmJiBlKG4pOwogICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKGUsIHIpIHsKICAgICAgICAgICAgICAgIGZvciAoOyByICYmICEobyA/IG8uaW5kZXhPZihyKSA+PSAwIDogSi5tYXRjaGVzKHIsIG4pKTspIHIgPSByICE9PSB0ICYmICFWKHIpICYmIHIucGFyZW50Tm9kZTsKICAgICAgICAgICAgICAgIHIgJiYgaS5pbmRleE9mKHIpIDwgMCAmJiBpLnB1c2gocikKICAgICAgICAgICAgICB9KSksIGUoaSkKICAgICAgICAgICAgfSwKICAgICAgICAgICAgcGFyZW50czogZnVuY3Rpb24obikgewogICAgICAgICAgICAgIGZvciAodmFyIHQgPSBbXSwgaSA9IHRoaXM7IGkubGVuZ3RoID4gMDspIGkgPSBlLm1hcChpLCAoZnVuY3Rpb24obikgewogICAgICAgICAgICAgICAgaWYgKChuID0gbi5wYXJlbnROb2RlKSAmJiAhVihuKSAmJiB0LmluZGV4T2YobikgPCAwKSByZXR1cm4gdC5wdXNoKG4pLCBuCiAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAgIHJldHVybiBCKHQsIG4pCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHBhcmVudDogZnVuY3Rpb24obikgewogICAgICAgICAgICAgIHJldHVybiBCKG8odGhpcy5wbHVjaygicGFyZW50Tm9kZSIpKSwgbikKICAgICAgICAgICAgfSwKICAgICAgICAgICAgY2hpbGRyZW46IGZ1bmN0aW9uKG4pIHsKICAgICAgICAgICAgICByZXR1cm4gQih0aGlzLm1hcCgoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJCh0aGlzKQogICAgICAgICAgICAgIH0pKSwgbikKICAgICAgICAgICAgfSwKICAgICAgICAgICAgY29udGVudHM6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgIHJldHVybiB0aGlzLm1hcCgoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb250ZW50RG9jdW1lbnQgfHwgcy5jYWxsKHRoaXMuY2hpbGROb2RlcykKICAgICAgICAgICAgICB9KSkKICAgICAgICAgICAgfSwKICAgICAgICAgICAgc2libGluZ3M6IGZ1bmN0aW9uKG4pIHsKICAgICAgICAgICAgICByZXR1cm4gQih0aGlzLm1hcCgoZnVuY3Rpb24obiwgZSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGwuY2FsbCgkKGUucGFyZW50Tm9kZSksIChmdW5jdGlvbihuKSB7CiAgICAgICAgICAgICAgICAgIHJldHVybiBuICE9PSBlCiAgICAgICAgICAgICAgICB9KSkKICAgICAgICAgICAgICB9KSksIG4pCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGVtcHR5OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHRoaXMuaW5uZXJIVE1MID0gIiIKICAgICAgICAgICAgICB9KSkKICAgICAgICAgICAgfSwKICAgICAgICAgICAgcGx1Y2s6IGZ1bmN0aW9uKG4pIHsKICAgICAgICAgICAgICByZXR1cm4gZS5tYXAodGhpcywgKGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgICAgIHJldHVybiBlW25dCiAgICAgICAgICAgICAgfSkpCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHNob3c6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdmFyIG4sIGUsIHQ7CiAgICAgICAgICAgICAgICAibm9uZSIgPT0gdGhpcy5zdHlsZS5kaXNwbGF5ICYmICh0aGlzLnN0eWxlLmRpc3BsYXkgPSAiIiksICJub25lIiA9PSBnZXRDb21wdXRlZFN0eWxlKHRoaXMsICIiKS5nZXRQcm9wZXJ0eVZhbHVlKCJkaXNwbGF5IikgJiYgKHRoaXMuc3R5bGUuZGlzcGxheSA9IChuID0gdGhpcy5ub2RlTmFtZSwgcFtuXSB8fCAoZSA9IGMuY3JlYXRlRWxlbWVudChuKSwgYy5ib2R5LmFwcGVuZENoaWxkKGUpLCB0ID0gZ2V0Q29tcHV0ZWRTdHlsZShlLCAiIikuZ2V0UHJvcGVydHlWYWx1ZSgiZGlzcGxheSIpLCBlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZSksICJub25lIiA9PSB0ICYmICh0ID0gImJsb2NrIiksIHBbbl0gPSB0KSwgcFtuXSkpCiAgICAgICAgICAgICAgfSkpCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHJlcGxhY2VXaXRoOiBmdW5jdGlvbihuKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmVmb3JlKG4pLnJlbW92ZSgpCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHdyYXA6IGZ1bmN0aW9uKG4pIHsKICAgICAgICAgICAgICB2YXIgdCA9IFMobik7CiAgICAgICAgICAgICAgaWYgKHRoaXNbMF0gJiYgIXQpIHZhciBpID0gZShuKS5nZXQoMCksCiAgICAgICAgICAgICAgICBvID0gaS5wYXJlbnROb2RlIHx8IHRoaXMubGVuZ3RoID4gMTsKICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbihyKSB7CiAgICAgICAgICAgICAgICBlKHRoaXMpLndyYXBBbGwodCA/IG4uY2FsbCh0aGlzLCByKSA6IG8gPyBpLmNsb25lTm9kZSghMCkgOiBpKQogICAgICAgICAgICAgIH0pKQogICAgICAgICAgICB9LAogICAgICAgICAgICB3cmFwQWxsOiBmdW5jdGlvbihuKSB7CiAgICAgICAgICAgICAgaWYgKHRoaXNbMF0pIHsKICAgICAgICAgICAgICAgIHZhciB0OwogICAgICAgICAgICAgICAgZm9yIChlKHRoaXNbMF0pLmJlZm9yZShuID0gZShuKSk7CiAgICAgICAgICAgICAgICAgICh0ID0gbi5jaGlsZHJlbigpKS5sZW5ndGg7KSBuID0gdC5maXJzdCgpOwogICAgICAgICAgICAgICAgZShuKS5hcHBlbmQodGhpcykKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMKICAgICAgICAgICAgfSwKICAgICAgICAgICAgd3JhcElubmVyOiBmdW5jdGlvbihuKSB7CiAgICAgICAgICAgICAgdmFyIHQgPSBTKG4pOwogICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKGkpIHsKICAgICAgICAgICAgICAgIHZhciBvID0gZSh0aGlzKSwKICAgICAgICAgICAgICAgICAgciA9IG8uY29udGVudHMoKSwKICAgICAgICAgICAgICAgICAgYSA9IHQgPyBuLmNhbGwodGhpcywgaSkgOiBuOwogICAgICAgICAgICAgICAgci5sZW5ndGggPyByLndyYXBBbGwoYSkgOiBvLmFwcGVuZChhKQogICAgICAgICAgICAgIH0pKQogICAgICAgICAgICB9LAogICAgICAgICAgICB1bndyYXA6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudCgpLmVhY2goKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgZSh0aGlzKS5yZXBsYWNlV2l0aChlKHRoaXMpLmNoaWxkcmVuKCkpCiAgICAgICAgICAgICAgfSkpLCB0aGlzCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGNsb25lOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tYXAoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmVOb2RlKCEwKQogICAgICAgICAgICAgIH0pKQogICAgICAgICAgICB9LAogICAgICAgICAgICBoaWRlOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jc3MoImRpc3BsYXkiLCAibm9uZSIpCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHRvZ2dsZTogZnVuY3Rpb24obikgewogICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdmFyIHQgPSBlKHRoaXMpOwogICAgICAgICAgICAgICAgKHZvaWQgMCA9PT0gbiA/ICJub25lIiA9PSB0LmNzcygiZGlzcGxheSIpIDogbikgPyB0LnNob3coKTogdC5oaWRlKCkKICAgICAgICAgICAgICB9KSkKICAgICAgICAgICAgfSwKICAgICAgICAgICAgcHJldjogZnVuY3Rpb24obikgewogICAgICAgICAgICAgIHJldHVybiBlKHRoaXMucGx1Y2soInByZXZpb3VzRWxlbWVudFNpYmxpbmciKSkuZmlsdGVyKG4gfHwgIioiKQogICAgICAgICAgICB9LAogICAgICAgICAgICBuZXh0OiBmdW5jdGlvbihuKSB7CiAgICAgICAgICAgICAgcmV0dXJuIGUodGhpcy5wbHVjaygibmV4dEVsZW1lbnRTaWJsaW5nIikpLmZpbHRlcihuIHx8ICIqIikKICAgICAgICAgICAgfSwKICAgICAgICAgICAgaHRtbDogZnVuY3Rpb24obikgewogICAgICAgICAgICAgIHJldHVybiAwIGluIGFyZ3VtZW50cyA/IHRoaXMuZWFjaCgoZnVuY3Rpb24odCkgewogICAgICAgICAgICAgICAgdmFyIGkgPSB0aGlzLmlubmVySFRNTDsKICAgICAgICAgICAgICAgIGUodGhpcykuZW1wdHkoKS5hcHBlbmQoUCh0aGlzLCBuLCB0LCBpKSkKICAgICAgICAgICAgICB9KSkgOiAwIGluIHRoaXMgPyB0aGlzWzBdLmlubmVySFRNTCA6IG51bGwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgdGV4dDogZnVuY3Rpb24obikgewogICAgICAgICAgICAgIHJldHVybiAwIGluIGFyZ3VtZW50cyA/IHRoaXMuZWFjaCgoZnVuY3Rpb24oZSkgewogICAgICAgICAgICAgICAgdmFyIHQgPSBQKHRoaXMsIG4sIGUsIHRoaXMudGV4dENvbnRlbnQpOwogICAgICAgICAgICAgICAgdGhpcy50ZXh0Q29udGVudCA9IG51bGwgPT0gdCA/ICIiIDogIiIgKyB0CiAgICAgICAgICAgICAgfSkpIDogMCBpbiB0aGlzID8gdGhpcy5wbHVjaygidGV4dENvbnRlbnQiKS5qb2luKCIiKSA6IG51bGwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgYXR0cjogZnVuY3Rpb24oZSwgdCkgewogICAgICAgICAgICAgIHZhciBpOwogICAgICAgICAgICAgIHJldHVybiAic3RyaW5nIiAhPSB0eXBlb2YgZSB8fCAxIGluIGFyZ3VtZW50cyA/IHRoaXMuZWFjaCgoZnVuY3Rpb24oaSkgewogICAgICAgICAgICAgICAgaWYgKDEgPT09IHRoaXMubm9kZVR5cGUpCiAgICAgICAgICAgICAgICAgIGlmIChqKGUpKQogICAgICAgICAgICAgICAgICAgIGZvciAobiBpbiBlKSBGKHRoaXMsIG4sIGVbbl0pOwogICAgICAgICAgICAgICAgICBlbHNlIEYodGhpcywgZSwgUCh0aGlzLCB0LCBpLCB0aGlzLmdldEF0dHJpYnV0ZShlKSkpCiAgICAgICAgICAgICAgfSkpIDogMCBpbiB0aGlzICYmIDEgPT0gdGhpc1swXS5ub2RlVHlwZSAmJiBudWxsICE9IChpID0gdGhpc1swXS5nZXRBdHRyaWJ1dGUoZSkpID8gaSA6IHZvaWQgMAogICAgICAgICAgICB9LAogICAgICAgICAgICByZW1vdmVBdHRyOiBmdW5jdGlvbihuKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAxID09PSB0aGlzLm5vZGVUeXBlICYmIG4uc3BsaXQoIiAiKS5mb3JFYWNoKChmdW5jdGlvbihuKSB7CiAgICAgICAgICAgICAgICAgIEYodGhpcywgbikKICAgICAgICAgICAgICAgIH0pLCB0aGlzKQogICAgICAgICAgICAgIH0pKQogICAgICAgICAgICB9LAogICAgICAgICAgICBwcm9wOiBmdW5jdGlvbihuLCBlKSB7CiAgICAgICAgICAgICAgcmV0dXJuIG4gPSBrW25dIHx8IG4sIDEgaW4gYXJndW1lbnRzID8gdGhpcy5lYWNoKChmdW5jdGlvbih0KSB7CiAgICAgICAgICAgICAgICB0aGlzW25dID0gUCh0aGlzLCBlLCB0LCB0aGlzW25dKQogICAgICAgICAgICAgIH0pKSA6IHRoaXNbMF0gJiYgdGhpc1swXVtuXQogICAgICAgICAgICB9LAogICAgICAgICAgICByZW1vdmVQcm9wOiBmdW5jdGlvbihuKSB7CiAgICAgICAgICAgICAgcmV0dXJuIG4gPSBrW25dIHx8IG4sIHRoaXMuZWFjaCgoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBkZWxldGUgdGhpc1tuXQogICAgICAgICAgICAgIH0pKQogICAgICAgICAgICB9LAogICAgICAgICAgICBkYXRhOiBmdW5jdGlvbihuLCBlKSB7CiAgICAgICAgICAgICAgdmFyIHQgPSAiZGF0YS0iICsgbi5yZXBsYWNlKGcsICItJDEiKS50b0xvd2VyQ2FzZSgpLAogICAgICAgICAgICAgICAgaSA9IDEgaW4gYXJndW1lbnRzID8gdGhpcy5hdHRyKHQsIGUpIDogdGhpcy5hdHRyKHQpOwogICAgICAgICAgICAgIHJldHVybiBudWxsICE9PSBpID8gcShpKSA6IHZvaWQgMAogICAgICAgICAgICB9LAogICAgICAgICAgICB2YWw6IGZ1bmN0aW9uKG4pIHsKICAgICAgICAgICAgICByZXR1cm4gMCBpbiBhcmd1bWVudHMgPyAobnVsbCA9PSBuICYmIChuID0gIiIpLCB0aGlzLmVhY2goKGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBQKHRoaXMsIG4sIGUsIHRoaXMudmFsdWUpCiAgICAgICAgICAgICAgfSkpKSA6IHRoaXNbMF0gJiYgKHRoaXNbMF0ubXVsdGlwbGUgPyBlKHRoaXNbMF0pLmZpbmQoIm9wdGlvbiIpLmZpbHRlcigoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZAogICAgICAgICAgICAgIH0pKS5wbHVjaygidmFsdWUiKSA6IHRoaXNbMF0udmFsdWUpCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIG9mZnNldDogZnVuY3Rpb24obikgewogICAgICAgICAgICAgIGlmIChuKSByZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbih0KSB7CiAgICAgICAgICAgICAgICB2YXIgaSA9IGUodGhpcyksCiAgICAgICAgICAgICAgICAgIG8gPSBQKHRoaXMsIG4sIHQsIGkub2Zmc2V0KCkpLAogICAgICAgICAgICAgICAgICByID0gaS5vZmZzZXRQYXJlbnQoKS5vZmZzZXQoKSwKICAgICAgICAgICAgICAgICAgYSA9IHsKICAgICAgICAgICAgICAgICAgICB0b3A6IG8udG9wIC0gci50b3AsCiAgICAgICAgICAgICAgICAgICAgbGVmdDogby5sZWZ0IC0gci5sZWZ0CiAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAic3RhdGljIiA9PSBpLmNzcygicG9zaXRpb24iKSAmJiAoYS5wb3NpdGlvbiA9ICJyZWxhdGl2ZSIpLCBpLmNzcyhhKQogICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICBpZiAoIXRoaXMubGVuZ3RoKSByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICBpZiAoYy5kb2N1bWVudEVsZW1lbnQgIT09IHRoaXNbMF0gJiYgIWUuY29udGFpbnMoYy5kb2N1bWVudEVsZW1lbnQsIHRoaXNbMF0pKSByZXR1cm4gewogICAgICAgICAgICAgICAgdG9wOiAwLAogICAgICAgICAgICAgICAgbGVmdDogMAogICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgdmFyIHQgPSB0aGlzWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBsZWZ0OiB0LmxlZnQgKyB3aW5kb3cucGFnZVhPZmZzZXQsCiAgICAgICAgICAgICAgICB0b3A6IHQudG9wICsgd2luZG93LnBhZ2VZT2Zmc2V0LAogICAgICAgICAgICAgICAgd2lkdGg6IE1hdGgucm91bmQodC53aWR0aCksCiAgICAgICAgICAgICAgICBoZWlnaHQ6IE1hdGgucm91bmQodC5oZWlnaHQpCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBjc3M6IGZ1bmN0aW9uKHQsIG8pIHsKICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHsKICAgICAgICAgICAgICAgIHZhciByID0gdGhpc1swXTsKICAgICAgICAgICAgICAgIGlmICgic3RyaW5nIiA9PSB0eXBlb2YgdCkgewogICAgICAgICAgICAgICAgICBpZiAoIXIpIHJldHVybjsKICAgICAgICAgICAgICAgICAgcmV0dXJuIHIuc3R5bGVbaSh0KV0gfHwgZ2V0Q29tcHV0ZWRTdHlsZShyLCAiIikuZ2V0UHJvcGVydHlWYWx1ZSh0KQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKEkodCkpIHsKICAgICAgICAgICAgICAgICAgaWYgKCFyKSByZXR1cm47CiAgICAgICAgICAgICAgICAgIHZhciBhID0ge30sCiAgICAgICAgICAgICAgICAgICAgbCA9IGdldENvbXB1dGVkU3R5bGUociwgIiIpOwogICAgICAgICAgICAgICAgICByZXR1cm4gZS5lYWNoKHQsIChmdW5jdGlvbihuLCBlKSB7CiAgICAgICAgICAgICAgICAgICAgYVtlXSA9IHIuc3R5bGVbaShlKV0gfHwgbC5nZXRQcm9wZXJ0eVZhbHVlKGUpCiAgICAgICAgICAgICAgICAgIH0pKSwgYQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB2YXIgcyA9ICIiOwogICAgICAgICAgICAgIGlmICgic3RyaW5nIiA9PSBfKHQpKSBvIHx8IDAgPT09IG8gPyBzID0gQSh0KSArICI6IiArIEModCwgbykgOiB0aGlzLmVhY2goKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShBKHQpKQogICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBmb3IgKG4gaW4gdCkgdFtuXSB8fCAwID09PSB0W25dID8gcyArPSBBKG4pICsgIjoiICsgQyhuLCB0W25dKSArICI7IiA6IHRoaXMuZWFjaCgoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgIHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoQShuKSkKICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHRoaXMuc3R5bGUuY3NzVGV4dCArPSAiOyIgKyBzCiAgICAgICAgICAgICAgfSkpCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGluZGV4OiBmdW5jdGlvbihuKSB7CiAgICAgICAgICAgICAgcmV0dXJuIG4gPyB0aGlzLmluZGV4T2YoZShuKVswXSkgOiB0aGlzLnBhcmVudCgpLmNoaWxkcmVuKCkuaW5kZXhPZih0aGlzWzBdKQogICAgICAgICAgICB9LAogICAgICAgICAgICBoYXNDbGFzczogZnVuY3Rpb24obikgewogICAgICAgICAgICAgIHJldHVybiAhIW4gJiYgci5zb21lLmNhbGwodGhpcywgKGZ1bmN0aW9uKG4pIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRlc3QoTChuKSkKICAgICAgICAgICAgICB9KSwgTyhuKSkKICAgICAgICAgICAgfSwKICAgICAgICAgICAgYWRkQ2xhc3M6IGZ1bmN0aW9uKG4pIHsKICAgICAgICAgICAgICByZXR1cm4gbiA/IHRoaXMuZWFjaCgoZnVuY3Rpb24oaSkgewogICAgICAgICAgICAgICAgaWYgKCJjbGFzc05hbWUiIGluIHRoaXMpIHsKICAgICAgICAgICAgICAgICAgdCA9IFtdOwogICAgICAgICAgICAgICAgICB2YXIgbyA9IEwodGhpcyk7CiAgICAgICAgICAgICAgICAgIFAodGhpcywgbiwgaSwgbykuc3BsaXQoL1xzKy9nKS5mb3JFYWNoKChmdW5jdGlvbihuKSB7CiAgICAgICAgICAgICAgICAgICAgZSh0aGlzKS5oYXNDbGFzcyhuKSB8fCB0LnB1c2gobikKICAgICAgICAgICAgICAgICAgfSksIHRoaXMpLCB0Lmxlbmd0aCAmJiBMKHRoaXMsIG8gKyAobyA/ICIgIiA6ICIiKSArIHQuam9pbigiICIpKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0pKSA6IHRoaXMKICAgICAgICAgICAgfSwKICAgICAgICAgICAgcmVtb3ZlQ2xhc3M6IGZ1bmN0aW9uKG4pIHsKICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgICBpZiAoImNsYXNzTmFtZSIgaW4gdGhpcykgewogICAgICAgICAgICAgICAgICBpZiAodm9pZCAwID09PSBuKSByZXR1cm4gTCh0aGlzLCAiIik7CiAgICAgICAgICAgICAgICAgIHQgPSBMKHRoaXMpLCBQKHRoaXMsIG4sIGUsIHQpLnNwbGl0KC9ccysvZykuZm9yRWFjaCgoZnVuY3Rpb24obikgewogICAgICAgICAgICAgICAgICAgIHQgPSB0LnJlcGxhY2UoTyhuKSwgIiAiKQogICAgICAgICAgICAgICAgICB9KSksIEwodGhpcywgdC50cmltKCkpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSkpCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHRvZ2dsZUNsYXNzOiBmdW5jdGlvbihuLCB0KSB7CiAgICAgICAgICAgICAgcmV0dXJuIG4gPyB0aGlzLmVhY2goKGZ1bmN0aW9uKGkpIHsKICAgICAgICAgICAgICAgIHZhciBvID0gZSh0aGlzKTsKICAgICAgICAgICAgICAgIFAodGhpcywgbiwgaSwgTCh0aGlzKSkuc3BsaXQoL1xzKy9nKS5mb3JFYWNoKChmdW5jdGlvbihuKSB7CiAgICAgICAgICAgICAgICAgICh2b2lkIDAgPT09IHQgPyAhby5oYXNDbGFzcyhuKSA6IHQpID8gby5hZGRDbGFzcyhuKTogby5yZW1vdmVDbGFzcyhuKQogICAgICAgICAgICAgICAgfSkpCiAgICAgICAgICAgICAgfSkpIDogdGhpcwogICAgICAgICAgICB9LAogICAgICAgICAgICBzY3JvbGxUb3A6IGZ1bmN0aW9uKG4pIHsKICAgICAgICAgICAgICBpZiAodGhpcy5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIHZhciBlID0gInNjcm9sbFRvcCIgaW4gdGhpc1swXTsKICAgICAgICAgICAgICAgIHJldHVybiB2b2lkIDAgPT09IG4gPyBlID8gdGhpc1swXS5zY3JvbGxUb3AgOiB0aGlzWzBdLnBhZ2VZT2Zmc2V0IDogdGhpcy5lYWNoKGUgPyBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb3AgPSBuCiAgICAgICAgICAgICAgICB9IDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG8odGhpcy5zY3JvbGxYLCBuKQogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHNjcm9sbExlZnQ6IGZ1bmN0aW9uKG4pIHsKICAgICAgICAgICAgICBpZiAodGhpcy5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIHZhciBlID0gInNjcm9sbExlZnQiIGluIHRoaXNbMF07CiAgICAgICAgICAgICAgICByZXR1cm4gdm9pZCAwID09PSBuID8gZSA/IHRoaXNbMF0uc2Nyb2xsTGVmdCA6IHRoaXNbMF0ucGFnZVhPZmZzZXQgOiB0aGlzLmVhY2goZSA/IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbExlZnQgPSBuCiAgICAgICAgICAgICAgICB9IDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG8obiwgdGhpcy5zY3JvbGxZKQogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHBvc2l0aW9uOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICBpZiAodGhpcy5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIHZhciBuID0gdGhpc1swXSwKICAgICAgICAgICAgICAgICAgdCA9IHRoaXMub2Zmc2V0UGFyZW50KCksCiAgICAgICAgICAgICAgICAgIGkgPSB0aGlzLm9mZnNldCgpLAogICAgICAgICAgICAgICAgICBvID0gdi50ZXN0KHRbMF0ubm9kZU5hbWUpID8gewogICAgICAgICAgICAgICAgICAgIHRvcDogMCwKICAgICAgICAgICAgICAgICAgICBsZWZ0OiAwCiAgICAgICAgICAgICAgICAgIH0gOiB0Lm9mZnNldCgpOwogICAgICAgICAgICAgICAgcmV0dXJuIGkudG9wIC09IHBhcnNlRmxvYXQoZShuKS5jc3MoIm1hcmdpbi10b3AiKSkgfHwgMCwgaS5sZWZ0IC09IHBhcnNlRmxvYXQoZShuKS5jc3MoIm1hcmdpbi1sZWZ0IikpIHx8IDAsIG8udG9wICs9IHBhcnNlRmxvYXQoZSh0WzBdKS5jc3MoImJvcmRlci10b3Atd2lkdGgiKSkgfHwgMCwgby5sZWZ0ICs9IHBhcnNlRmxvYXQoZSh0WzBdKS5jc3MoImJvcmRlci1sZWZ0LXdpZHRoIikpIHx8IDAsIHsKICAgICAgICAgICAgICAgICAgdG9wOiBpLnRvcCAtIG8udG9wLAogICAgICAgICAgICAgICAgICBsZWZ0OiBpLmxlZnQgLSBvLmxlZnQKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIG9mZnNldFBhcmVudDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFwKChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIGZvciAodmFyIG4gPSB0aGlzLm9mZnNldFBhcmVudCB8fCBjLmJvZHk7IG4gJiYgIXYudGVzdChuLm5vZGVOYW1lKSAmJiAic3RhdGljIiA9PSBlKG4pLmNzcygicG9zaXRpb24iKTspIG4gPSBuLm9mZnNldFBhcmVudDsKICAgICAgICAgICAgICAgIHJldHVybiBuCiAgICAgICAgICAgICAgfSkpCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sIGUuZm4uZGV0YWNoID0gZS5mbi5yZW1vdmUsIFsid2lkdGgiLCAiaGVpZ2h0Il0uZm9yRWFjaCgoZnVuY3Rpb24obikgewogICAgICAgICAgICB2YXIgdCA9IG4ucmVwbGFjZSgvLi8sIChmdW5jdGlvbihuKSB7CiAgICAgICAgICAgICAgcmV0dXJuIG5bMF0udG9VcHBlckNhc2UoKQogICAgICAgICAgICB9KSk7CiAgICAgICAgICAgIGUuZm5bbl0gPSBmdW5jdGlvbihpKSB7CiAgICAgICAgICAgICAgdmFyIG8sIHIgPSB0aGlzWzBdOwogICAgICAgICAgICAgIHJldHVybiB2b2lkIDAgPT09IGkgPyBRKHIpID8gclsiaW5uZXIiICsgdF0gOiBWKHIpID8gci5kb2N1bWVudEVsZW1lbnRbInNjcm9sbCIgKyB0XSA6IChvID0gdGhpcy5vZmZzZXQoKSkgJiYgb1tuXSA6IHRoaXMuZWFjaCgoZnVuY3Rpb24odCkgewogICAgICAgICAgICAgICAgKHIgPSBlKHRoaXMpKS5jc3MobiwgUCh0aGlzLCBpLCB0LCByW25dKCkpKQogICAgICAgICAgICAgIH0pKQogICAgICAgICAgICB9CiAgICAgICAgICB9KSksIFsiYWZ0ZXIiLCAicHJlcGVuZCIsICJiZWZvcmUiLCAiYXBwZW5kIl0uZm9yRWFjaCgoZnVuY3Rpb24obiwgdCkgewogICAgICAgICAgICB2YXIgaSA9IHQgJSAyOwogICAgICAgICAgICBlLmZuW25dID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgdmFyIG4sIG8sIHIgPSBlLm1hcChhcmd1bWVudHMsIChmdW5jdGlvbih0KSB7CiAgICAgICAgICAgICAgICAgIHZhciBpID0gW107CiAgICAgICAgICAgICAgICAgIHJldHVybiAiYXJyYXkiID09IChuID0gXyh0KSkgPyAodC5mb3JFYWNoKChmdW5jdGlvbihuKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgMCAhPT0gbi5ub2RlVHlwZSA/IGkucHVzaChuKSA6IGUuemVwdG8uaXNaKG4pID8gaSA9IGkuY29uY2F0KG4uZ2V0KCkpIDogdm9pZChpID0gaS5jb25jYXQoSi5mcmFnbWVudChuKSkpCiAgICAgICAgICAgICAgICAgIH0pKSwgaSkgOiAib2JqZWN0IiA9PSBuIHx8IG51bGwgPT0gdCA/IHQgOiBKLmZyYWdtZW50KHQpCiAgICAgICAgICAgICAgICB9KSksCiAgICAgICAgICAgICAgICBhID0gdGhpcy5sZW5ndGggPiAxOwogICAgICAgICAgICAgIHJldHVybiByLmxlbmd0aCA8IDEgPyB0aGlzIDogdGhpcy5lYWNoKChmdW5jdGlvbihuLCBsKSB7CiAgICAgICAgICAgICAgICBvID0gaSA/IGwgOiBsLnBhcmVudE5vZGUsIGwgPSAwID09IHQgPyBsLm5leHRTaWJsaW5nIDogMSA9PSB0ID8gbC5maXJzdENoaWxkIDogMiA9PSB0ID8gbCA6IG51bGw7CiAgICAgICAgICAgICAgICB2YXIgcyA9IGUuY29udGFpbnMoYy5kb2N1bWVudEVsZW1lbnQsIG8pOwogICAgICAgICAgICAgICAgci5mb3JFYWNoKChmdW5jdGlvbihuKSB7CiAgICAgICAgICAgICAgICAgIGlmIChhKSBuID0gbi5jbG9uZU5vZGUoITApOwogICAgICAgICAgICAgICAgICBlbHNlIGlmICghbykgcmV0dXJuIGUobikucmVtb3ZlKCk7CiAgICAgICAgICAgICAgICAgIG8uaW5zZXJ0QmVmb3JlKG4sIGwpLCBzICYmIFgobiwgKGZ1bmN0aW9uKG4pIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIShudWxsID09IG4ubm9kZU5hbWUgfHwgIlNDUklQVCIgIT09IG4ubm9kZU5hbWUudG9VcHBlckNhc2UoKSB8fCBuLnR5cGUgJiYgInRleHQvamF2YXNjcmlwdCIgIT09IG4udHlwZSB8fCBuLnNyYykpIHsKICAgICAgICAgICAgICAgICAgICAgIHZhciBlID0gbi5vd25lckRvY3VtZW50ID8gbi5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3IDogd2luZG93OwogICAgICAgICAgICAgICAgICAgICAgZS5ldmFsLmNhbGwoZSwgbi5pbm5lckhUTUwpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9KSkKICAgICAgICAgICAgICAgIH0pKQogICAgICAgICAgICAgIH0pKQogICAgICAgICAgICB9LCBlLmZuW2kgPyBuICsgIlRvIiA6ICJpbnNlcnQiICsgKHQgPyAiQmVmb3JlIiA6ICJBZnRlciIpXSA9IGZ1bmN0aW9uKHQpIHsKICAgICAgICAgICAgICByZXR1cm4gZSh0KVtuXSh0aGlzKSwgdGhpcwogICAgICAgICAgICB9CiAgICAgICAgICB9KSksIEouWi5wcm90b3R5cGUgPSB6LnByb3RvdHlwZSA9IGUuZm4sIEoudW5pcSA9IG8sIEouZGVzZXJpYWxpemVWYWx1ZSA9IHEsIGUuemVwdG8gPSBKLCBlCiAgICAgICAgfSgpOwogICAgICB3aW5kb3cuWmVwdG8gPSBaZXB0bywgdm9pZCAwID09PSB3aW5kb3cuJCAmJiAod2luZG93LiQgPSBaZXB0byksCiAgICAgICAgZnVuY3Rpb24obikgewogICAgICAgICAgdmFyIGUgPSAxLAogICAgICAgICAgICB0ID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLAogICAgICAgICAgICBpID0gbi5pc0Z1bmN0aW9uLAogICAgICAgICAgICBvID0gZnVuY3Rpb24obikgewogICAgICAgICAgICAgIHJldHVybiAic3RyaW5nIiA9PSB0eXBlb2YgbgogICAgICAgICAgICB9LAogICAgICAgICAgICByID0ge30sCiAgICAgICAgICAgIGEgPSB7fSwKICAgICAgICAgICAgbCA9ICJvbmZvY3VzaW4iIGluIHdpbmRvdywKICAgICAgICAgICAgcyA9IHsKICAgICAgICAgICAgICBmb2N1czogImZvY3VzaW4iLAogICAgICAgICAgICAgIGJsdXI6ICJmb2N1c291dCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgYyA9IHsKICAgICAgICAgICAgICBtb3VzZWVudGVyOiAibW91c2VvdmVyIiwKICAgICAgICAgICAgICBtb3VzZWxlYXZlOiAibW91c2VvdXQiCiAgICAgICAgICAgIH07CgogICAgICAgICAgZnVuY3Rpb24gcChuKSB7CiAgICAgICAgICAgIHJldHVybiBuLl96aWQgfHwgKG4uX3ppZCA9IGUrKykKICAgICAgICAgIH0KCiAgICAgICAgICBmdW5jdGlvbiB1KG4sIGUsIHQsIGkpIHsKICAgICAgICAgICAgaWYgKChlID0gZChlKSkubnMpIHZhciBvID0gKGEgPSBlLm5zLCBuZXcgUmVnRXhwKCIoPzpefCApIiArIGEucmVwbGFjZSgiICIsICIgLiogPyIpICsgIig/OiB8JCkiKSk7CiAgICAgICAgICAgIHZhciBhOwogICAgICAgICAgICByZXR1cm4gKHJbcChuKV0gfHwgW10pLmZpbHRlcigoZnVuY3Rpb24obikgewogICAgICAgICAgICAgIHJldHVybiBuICYmICghZS5lIHx8IG4uZSA9PSBlLmUpICYmICghZS5ucyB8fCBvLnRlc3Qobi5ucykpICYmICghdCB8fCBwKG4uZm4pID09PSBwKHQpKSAmJiAoIWkgfHwgbi5zZWwgPT0gaSkKICAgICAgICAgICAgfSkpCiAgICAgICAgICB9CgogICAgICAgICAgZnVuY3Rpb24gZChuKSB7CiAgICAgICAgICAgIHZhciBlID0gKCIiICsgbikuc3BsaXQoIi4iKTsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICBlOiBlWzBdLAogICAgICAgICAgICAgIG5zOiBlLnNsaWNlKDEpLnNvcnQoKS5qb2luKCIgIikKICAgICAgICAgICAgfQogICAgICAgICAgfQoKICAgICAgICAgIGZ1bmN0aW9uIGYobiwgZSkgewogICAgICAgICAgICByZXR1cm4gbi5kZWwgJiYgIWwgJiYgbi5lIGluIHMgfHwgISFlCiAgICAgICAgICB9CgogICAgICAgICAgZnVuY3Rpb24gbShuKSB7CiAgICAgICAgICAgIHJldHVybiBjW25dIHx8IGwgJiYgc1tuXSB8fCBuCiAgICAgICAgICB9CgogICAgICAgICAgZnVuY3Rpb24gaChlLCB0LCBpLCBvLCBhLCBsLCBzKSB7CiAgICAgICAgICAgIHZhciB1ID0gcChlKSwKICAgICAgICAgICAgICBoID0gclt1XSB8fCAoclt1XSA9IFtdKTsKICAgICAgICAgICAgdC5zcGxpdCgvXHMvKS5mb3JFYWNoKChmdW5jdGlvbih0KSB7CiAgICAgICAgICAgICAgaWYgKCJyZWFkeSIgPT0gdCkgcmV0dXJuIG4oZG9jdW1lbnQpLnJlYWR5KGkpOwogICAgICAgICAgICAgIHZhciByID0gZCh0KTsKICAgICAgICAgICAgICByLmZuID0gaSwgci5zZWwgPSBhLCByLmUgaW4gYyAmJiAoaSA9IGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgICAgIHZhciB0ID0gZS5yZWxhdGVkVGFyZ2V0OwogICAgICAgICAgICAgICAgaWYgKCF0IHx8IHQgIT09IHRoaXMgJiYgIW4uY29udGFpbnModGhpcywgdCkpIHJldHVybiByLmZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykKICAgICAgICAgICAgICB9KSwgci5kZWwgPSBsOwogICAgICAgICAgICAgIHZhciBwID0gbCB8fCBpOwogICAgICAgICAgICAgIHIucHJveHkgPSBmdW5jdGlvbihuKSB7CiAgICAgICAgICAgICAgICBpZiAoIShuID0gdyhuKSkuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSkgewogICAgICAgICAgICAgICAgICBuLmRhdGEgPSBvOwogICAgICAgICAgICAgICAgICB2YXIgdCA9IHAuYXBwbHkoZSwgbnVsbCA9PSBuLl9hcmdzID8gW25dIDogW25dLmNvbmNhdChuLl9hcmdzKSk7CiAgICAgICAgICAgICAgICAgIHJldHVybiAhMSA9PT0gdCAmJiAobi5wcmV2ZW50RGVmYXVsdCgpLCBuLnN0b3BQcm9wYWdhdGlvbigpKSwgdAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0sIHIuaSA9IGgubGVuZ3RoLCBoLnB1c2gociksICJhZGRFdmVudExpc3RlbmVyIiBpbiBlICYmIGUuYWRkRXZlbnRMaXN0ZW5lcihtKHIuZSksIHIucHJveHksIGYociwgcykpCiAgICAgICAgICAgIH0pKQogICAgICAgICAgfQoKICAgICAgICAgIGZ1bmN0aW9uIHYobiwgZSwgdCwgaSwgbykgewogICAgICAgICAgICB2YXIgYSA9IHAobik7CiAgICAgICAgICAgIChlIHx8ICIiKS5zcGxpdCgvXHMvKS5mb3JFYWNoKChmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgdShuLCBlLCB0LCBpKS5mb3JFYWNoKChmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgICBkZWxldGUgclthXVtlLmldLCAicmVtb3ZlRXZlbnRMaXN0ZW5lciIgaW4gbiAmJiBuLnJlbW92ZUV2ZW50TGlzdGVuZXIobShlLmUpLCBlLnByb3h5LCBmKGUsIG8pKQogICAgICAgICAgICAgIH0pKQogICAgICAgICAgICB9KSkKICAgICAgICAgIH0KICAgICAgICAgIGEuY2xpY2sgPSBhLm1vdXNlZG93biA9IGEubW91c2V1cCA9IGEubW91c2Vtb3ZlID0gIk1vdXNlRXZlbnRzIiwgbi5ldmVudCA9IHsKICAgICAgICAgICAgYWRkOiBoLAogICAgICAgICAgICByZW1vdmU6IHYKICAgICAgICAgIH0sIG4ucHJveHkgPSBmdW5jdGlvbihlLCByKSB7CiAgICAgICAgICAgIHZhciBhID0gMiBpbiBhcmd1bWVudHMgJiYgdC5jYWxsKGFyZ3VtZW50cywgMik7CiAgICAgICAgICAgIGlmIChpKGUpKSB7CiAgICAgICAgICAgICAgdmFyIGwgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHJldHVybiBlLmFwcGx5KHIsIGEgPyBhLmNvbmNhdCh0LmNhbGwoYXJndW1lbnRzKSkgOiBhcmd1bWVudHMpCiAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICByZXR1cm4gbC5femlkID0gcChlKSwgbAogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChvKHIpKSByZXR1cm4gYSA/IChhLnVuc2hpZnQoZVtyXSwgZSksIG4ucHJveHkuYXBwbHkobnVsbCwgYSkpIDogbi5wcm94eShlW3JdLCBlKTsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhwZWN0ZWQgZnVuY3Rpb24iKQogICAgICAgICAgfSwgbi5mbi5iaW5kID0gZnVuY3Rpb24obiwgZSwgdCkgewogICAgICAgICAgICByZXR1cm4gdGhpcy5vbihuLCBlLCB0KQogICAgICAgICAgfSwgbi5mbi51bmJpbmQgPSBmdW5jdGlvbihuLCBlKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLm9mZihuLCBlKQogICAgICAgICAgfSwgbi5mbi5vbmUgPSBmdW5jdGlvbihuLCBlLCB0LCBpKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLm9uKG4sIGUsIHQsIGksIDEpCiAgICAgICAgICB9OwogICAgICAgICAgdmFyIGcgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICByZXR1cm4gITAKICAgICAgICAgICAgfSwKICAgICAgICAgICAgeSA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgIHJldHVybiAhMQogICAgICAgICAgICB9LAogICAgICAgICAgICBiID0gL14oW0EtWl18cmV0dXJuVmFsdWUkfGxheWVyW1hZXSR8d2Via2l0TW92ZW1lbnRbWFldJCkvLAogICAgICAgICAgICBNID0gewogICAgICAgICAgICAgIHByZXZlbnREZWZhdWx0OiAiaXNEZWZhdWx0UHJldmVudGVkIiwKICAgICAgICAgICAgICBzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246ICJpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCIsCiAgICAgICAgICAgICAgc3RvcFByb3BhZ2F0aW9uOiAiaXNQcm9wYWdhdGlvblN0b3BwZWQiCiAgICAgICAgICAgIH07CgogICAgICAgICAgZnVuY3Rpb24gdyhlLCB0KSB7CiAgICAgICAgICAgIHJldHVybiAhdCAmJiBlLmlzRGVmYXVsdFByZXZlbnRlZCB8fCAodCB8fCAodCA9IGUpLCBuLmVhY2goTSwgKGZ1bmN0aW9uKG4sIGkpIHsKICAgICAgICAgICAgICB2YXIgbyA9IHRbbl07CiAgICAgICAgICAgICAgZVtuXSA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNbaV0gPSBnLCBvICYmIG8uYXBwbHkodCwgYXJndW1lbnRzKQogICAgICAgICAgICAgIH0sIGVbaV0gPSB5CiAgICAgICAgICAgIH0pKSwgZS50aW1lU3RhbXAgfHwgKGUudGltZVN0YW1wID0gRGF0ZS5ub3coKSksICh2b2lkIDAgIT09IHQuZGVmYXVsdFByZXZlbnRlZCA/IHQuZGVmYXVsdFByZXZlbnRlZCA6ICJyZXR1cm5WYWx1ZSIgaW4gdCA/ICExID09PSB0LnJldHVyblZhbHVlIDogdC5nZXRQcmV2ZW50RGVmYXVsdCAmJiB0LmdldFByZXZlbnREZWZhdWx0KCkpICYmIChlLmlzRGVmYXVsdFByZXZlbnRlZCA9IGcpKSwgZQogICAgICAgICAgfQoKICAgICAgICAgIGZ1bmN0aW9uIFQobikgewogICAgICAgICAgICB2YXIgZSwgdCA9IHsKICAgICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBuCiAgICAgICAgICAgIH07CiAgICAgICAgICAgIGZvciAoZSBpbiBuKSBiLnRlc3QoZSkgfHwgdm9pZCAwID09PSBuW2VdIHx8ICh0W2VdID0gbltlXSk7CiAgICAgICAgICAgIHJldHVybiB3KHQsIG4pCiAgICAgICAgICB9CiAgICAgICAgICBuLmZuLmRlbGVnYXRlID0gZnVuY3Rpb24obiwgZSwgdCkgewogICAgICAgICAgICByZXR1cm4gdGhpcy5vbihlLCBuLCB0KQogICAgICAgICAgfSwgbi5mbi51bmRlbGVnYXRlID0gZnVuY3Rpb24obiwgZSwgdCkgewogICAgICAgICAgICByZXR1cm4gdGhpcy5vZmYoZSwgbiwgdCkKICAgICAgICAgIH0sIG4uZm4ubGl2ZSA9IGZ1bmN0aW9uKGUsIHQpIHsKICAgICAgICAgICAgcmV0dXJuIG4oZG9jdW1lbnQuYm9keSkuZGVsZWdhdGUodGhpcy5zZWxlY3RvciwgZSwgdCksIHRoaXMKICAgICAgICAgIH0sIG4uZm4uZGllID0gZnVuY3Rpb24oZSwgdCkgewogICAgICAgICAgICByZXR1cm4gbihkb2N1bWVudC5ib2R5KS51bmRlbGVnYXRlKHRoaXMuc2VsZWN0b3IsIGUsIHQpLCB0aGlzCiAgICAgICAgICB9LCBuLmZuLm9uID0gZnVuY3Rpb24oZSwgciwgYSwgbCwgcykgewogICAgICAgICAgICB2YXIgYywgcCwgdSA9IHRoaXM7CiAgICAgICAgICAgIHJldHVybiBlICYmICFvKGUpID8gKG4uZWFjaChlLCAoZnVuY3Rpb24obiwgZSkgewogICAgICAgICAgICAgIHUub24obiwgciwgYSwgZSwgcykKICAgICAgICAgICAgfSkpLCB1KSA6IChvKHIpIHx8IGkobCkgfHwgITEgPT09IGwgfHwgKGwgPSBhLCBhID0gciwgciA9IHZvaWQgMCksIHZvaWQgMCAhPT0gbCAmJiAhMSAhPT0gYSB8fCAobCA9IGEsIGEgPSB2b2lkIDApLCAhMSA9PT0gbCAmJiAobCA9IHkpLCB1LmVhY2goKGZ1bmN0aW9uKGksIG8pIHsKICAgICAgICAgICAgICBzICYmIChjID0gZnVuY3Rpb24obikgewogICAgICAgICAgICAgICAgcmV0dXJuIHYobywgbi50eXBlLCBsKSwgbC5hcHBseSh0aGlzLCBhcmd1bWVudHMpCiAgICAgICAgICAgICAgfSksIHIgJiYgKHAgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgICB2YXIgaSwgYSA9IG4oZS50YXJnZXQpLmNsb3Nlc3QociwgbykuZ2V0KDApOwogICAgICAgICAgICAgICAgaWYgKGEgJiYgYSAhPT0gbykgcmV0dXJuIGkgPSBuLmV4dGVuZChUKGUpLCB7CiAgICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXQ6IGEsCiAgICAgICAgICAgICAgICAgIGxpdmVGaXJlZDogbwogICAgICAgICAgICAgICAgfSksIChjIHx8IGwpLmFwcGx5KGEsIFtpXS5jb25jYXQodC5jYWxsKGFyZ3VtZW50cywgMSkpKQogICAgICAgICAgICAgIH0pLCBoKG8sIGUsIGwsIGEsIHIsIHAgfHwgYykKICAgICAgICAgICAgfSkpKQogICAgICAgICAgfSwgbi5mbi5vZmYgPSBmdW5jdGlvbihlLCB0LCByKSB7CiAgICAgICAgICAgIHZhciBhID0gdGhpczsKICAgICAgICAgICAgcmV0dXJuIGUgJiYgIW8oZSkgPyAobi5lYWNoKGUsIChmdW5jdGlvbihuLCBlKSB7CiAgICAgICAgICAgICAgYS5vZmYobiwgdCwgZSkKICAgICAgICAgICAgfSkpLCBhKSA6IChvKHQpIHx8IGkocikgfHwgITEgPT09IHIgfHwgKHIgPSB0LCB0ID0gdm9pZCAwKSwgITEgPT09IHIgJiYgKHIgPSB5KSwgYS5lYWNoKChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICB2KHRoaXMsIGUsIHIsIHQpCiAgICAgICAgICAgIH0pKSkKICAgICAgICAgIH0sIG4uZm4udHJpZ2dlciA9IGZ1bmN0aW9uKGUsIHQpIHsKICAgICAgICAgICAgcmV0dXJuIChlID0gbyhlKSB8fCBuLmlzUGxhaW5PYmplY3QoZSkgPyBuLkV2ZW50KGUpIDogdyhlKSkuX2FyZ3MgPSB0LCB0aGlzLmVhY2goKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgIGUudHlwZSBpbiBzICYmICJmdW5jdGlvbiIgPT0gdHlwZW9mIHRoaXNbZS50eXBlXSA/IHRoaXNbZS50eXBlXSgpIDogImRpc3BhdGNoRXZlbnQiIGluIHRoaXMgPyB0aGlzLmRpc3BhdGNoRXZlbnQoZSkgOiBuKHRoaXMpLnRyaWdnZXJIYW5kbGVyKGUsIHQpCiAgICAgICAgICAgIH0pKQogICAgICAgICAgfSwgbi5mbi50cmlnZ2VySGFuZGxlciA9IGZ1bmN0aW9uKGUsIHQpIHsKICAgICAgICAgICAgdmFyIGksIHI7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKGEsIGwpIHsKICAgICAgICAgICAgICAoaSA9IFQobyhlKSA/IG4uRXZlbnQoZSkgOiBlKSkuX2FyZ3MgPSB0LCBpLnRhcmdldCA9IGwsIG4uZWFjaCh1KGwsIGUudHlwZSB8fCBlKSwgKGZ1bmN0aW9uKG4sIGUpIHsKICAgICAgICAgICAgICAgIGlmIChyID0gZS5wcm94eShpKSwgaS5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpKSByZXR1cm4gITEKICAgICAgICAgICAgICB9KSkKICAgICAgICAgICAgfSkpLCByCiAgICAgICAgICB9LCAiZm9jdXNpbiBmb2N1c291dCBmb2N1cyBibHVyIGxvYWQgcmVzaXplIHNjcm9sbCB1bmxvYWQgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGVycm9yIi5zcGxpdCgiICIpLmZvckVhY2goKGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgbi5mbltlXSA9IGZ1bmN0aW9uKG4pIHsKICAgICAgICAgICAgICByZXR1cm4gMCBpbiBhcmd1bWVudHMgPyB0aGlzLmJpbmQoZSwgbikgOiB0aGlzLnRyaWdnZXIoZSkKICAgICAgICAgICAgfQogICAgICAgICAgfSkpLCBuLkV2ZW50ID0gZnVuY3Rpb24obiwgZSkgewogICAgICAgICAgICBvKG4pIHx8IChuID0gKGUgPSBuKS50eXBlKTsKICAgICAgICAgICAgdmFyIHQgPSBkb2N1bWVudC5jcmVhdGVFdmVudChhW25dIHx8ICJFdmVudHMiKSwKICAgICAgICAgICAgICBpID0gITA7CiAgICAgICAgICAgIGlmIChlKQogICAgICAgICAgICAgIGZvciAodmFyIHIgaW4gZSkgImJ1YmJsZXMiID09IHIgPyBpID0gISFlW3JdIDogdFtyXSA9IGVbcl07CiAgICAgICAgICAgIHJldHVybiB0LmluaXRFdmVudChuLCBpLCAhMCksIHcodCkKICAgICAgICAgIH0KICAgICAgICB9KFplcHRvKSwKICAgICAgICBmdW5jdGlvbihuKSB7CiAgICAgICAgICB2YXIgZSwgdCwgaSA9ICtuZXcgRGF0ZSwKICAgICAgICAgICAgbyA9IHdpbmRvdy5kb2N1bWVudCwKICAgICAgICAgICAgciA9IC88c2NyaXB0XGJbXjxdKig/Oig/ITxcL3NjcmlwdD4pPFtePF0qKSo8XC9zY3JpcHQ+L2dpLAogICAgICAgICAgICBhID0gL14oPzp0ZXh0fGFwcGxpY2F0aW9uKVwvamF2YXNjcmlwdC9pLAogICAgICAgICAgICBsID0gL14oPzp0ZXh0fGFwcGxpY2F0aW9uKVwveG1sL2ksCiAgICAgICAgICAgIHMgPSAvXlxzKiQvLAogICAgICAgICAgICBjID0gby5jcmVhdGVFbGVtZW50KCJhIik7CgogICAgICAgICAgZnVuY3Rpb24gcChlLCB0LCBpLCByKSB7CiAgICAgICAgICAgIGlmIChlLmdsb2JhbCkgcmV0dXJuIGZ1bmN0aW9uKGUsIHQsIGkpIHsKICAgICAgICAgICAgICB2YXIgbyA9IG4uRXZlbnQodCk7CiAgICAgICAgICAgICAgcmV0dXJuIG4oZSkudHJpZ2dlcihvLCBpKSwgIW8uaXNEZWZhdWx0UHJldmVudGVkKCkKICAgICAgICAgICAgfSh0IHx8IG8sIGksIHIpCiAgICAgICAgICB9CgogICAgICAgICAgZnVuY3Rpb24gdShuLCBlKSB7CiAgICAgICAgICAgIHZhciB0ID0gZS5jb250ZXh0OwogICAgICAgICAgICBpZiAoITEgPT09IGUuYmVmb3JlU2VuZC5jYWxsKHQsIG4sIGUpIHx8ICExID09PSBwKGUsIHQsICJhamF4QmVmb3JlU2VuZCIsIFtuLCBlXSkpIHJldHVybiAhMTsKICAgICAgICAgICAgcChlLCB0LCAiYWpheFNlbmQiLCBbbiwgZV0pCiAgICAgICAgICB9CgogICAgICAgICAgZnVuY3Rpb24gZChuLCBlLCB0LCBpKSB7CiAgICAgICAgICAgIHZhciBvID0gdC5jb250ZXh0OwogICAgICAgICAgICB0LnN1Y2Nlc3MuY2FsbChvLCBuLCAic3VjY2VzcyIsIGUpLCBpICYmIGkucmVzb2x2ZVdpdGgobywgW24sICJzdWNjZXNzIiwgZV0pLCBwKHQsIG8sICJhamF4U3VjY2VzcyIsIFtlLCB0LCBuXSksIG0oInN1Y2Nlc3MiLCBlLCB0KQogICAgICAgICAgfQoKICAgICAgICAgIGZ1bmN0aW9uIGYobiwgZSwgdCwgaSwgbykgewogICAgICAgICAgICB2YXIgciA9IGkuY29udGV4dDsKICAgICAgICAgICAgaS5lcnJvci5jYWxsKHIsIHQsIGUsIG4pLCBvICYmIG8ucmVqZWN0V2l0aChyLCBbdCwgZSwgbl0pLCBwKGksIHIsICJhamF4RXJyb3IiLCBbdCwgaSwgbiB8fCBlXSksIG0oZSwgdCwgaSkKICAgICAgICAgIH0KCiAgICAgICAgICBmdW5jdGlvbiBtKGUsIHQsIGkpIHsKICAgICAgICAgICAgdmFyIG8gPSBpLmNvbnRleHQ7CiAgICAgICAgICAgIGkuY29tcGxldGUuY2FsbChvLCB0LCBlKSwgcChpLCBvLCAiYWpheENvbXBsZXRlIiwgW3QsIGldKSwKICAgICAgICAgICAgICBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgICBlLmdsb2JhbCAmJiAhLS1uLmFjdGl2ZSAmJiBwKGUsIG51bGwsICJhamF4U3RvcCIpCiAgICAgICAgICAgICAgfShpKQogICAgICAgICAgfQoKICAgICAgICAgIGZ1bmN0aW9uIGgoKSB7fQoKICAgICAgICAgIGZ1bmN0aW9uIHYobiwgZSkgewogICAgICAgICAgICByZXR1cm4gIiIgPT0gZSA/IG4gOiAobiArICImIiArIGUpLnJlcGxhY2UoL1smP117MSwyfS8sICI/IikKICAgICAgICAgIH0KCiAgICAgICAgICBmdW5jdGlvbiBnKGUsIHQsIGksIG8pIHsKICAgICAgICAgICAgcmV0dXJuIG4uaXNGdW5jdGlvbih0KSAmJiAobyA9IGksIGkgPSB0LCB0ID0gdm9pZCAwKSwgbi5pc0Z1bmN0aW9uKGkpIHx8IChvID0gaSwgaSA9IHZvaWQgMCksIHsKICAgICAgICAgICAgICB1cmw6IGUsCiAgICAgICAgICAgICAgZGF0YTogdCwKICAgICAgICAgICAgICBzdWNjZXNzOiBpLAogICAgICAgICAgICAgIGRhdGFUeXBlOiBvCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGMuaHJlZiA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLCBuLmFjdGl2ZSA9IDAsIG4uYWpheEpTT05QID0gZnVuY3Rpb24oZSwgdCkgewogICAgICAgICAgICBpZiAoISgidHlwZSIgaW4gZSkpIHJldHVybiBuLmFqYXgoZSk7CiAgICAgICAgICAgIHZhciByLCBhLCBsID0gZS5qc29ucENhbGxiYWNrLAogICAgICAgICAgICAgIHMgPSAobi5pc0Z1bmN0aW9uKGwpID8gbCgpIDogbCkgfHwgIlplcHRvIiArIGkrKywKICAgICAgICAgICAgICBjID0gby5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSwKICAgICAgICAgICAgICBwID0gd2luZG93W3NdLAogICAgICAgICAgICAgIG0gPSBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgICBuKGMpLnRyaWdnZXJIYW5kbGVyKCJlcnJvciIsIGUgfHwgImFib3J0IikKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIGggPSB7CiAgICAgICAgICAgICAgICBhYm9ydDogbQogICAgICAgICAgICAgIH07CiAgICAgICAgICAgIHJldHVybiB0ICYmIHQucHJvbWlzZShoKSwgbihjKS5vbigibG9hZCBlcnJvciIsIChmdW5jdGlvbihpLCBvKSB7CiAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGEpLCBuKGMpLm9mZigpLnJlbW92ZSgpLCAiZXJyb3IiICE9IGkudHlwZSAmJiByID8gZChyWzBdLCBoLCBlLCB0KSA6IGYobnVsbCwgbyB8fCAiZXJyb3IiLCBoLCBlLCB0KSwgd2luZG93W3NdID0gcCwgciAmJiBuLmlzRnVuY3Rpb24ocCkgJiYgcChyWzBdKSwgcCA9IHIgPSB2b2lkIDAKICAgICAgICAgICAgfSkpLCAhMSA9PT0gdShoLCBlKSA/IChtKCJhYm9ydCIpLCBoKSA6ICh3aW5kb3dbc10gPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICByID0gYXJndW1lbnRzCiAgICAgICAgICAgIH0sIGMuc3JjID0gZS51cmwucmVwbGFjZSgvXD8oLispPVw/LywgIj8kMT0iICsgcyksIG8uaGVhZC5hcHBlbmRDaGlsZChjKSwgZS50aW1lb3V0ID4gMCAmJiAoYSA9IHNldFRpbWVvdXQoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgIG0oInRpbWVvdXQiKQogICAgICAgICAgICB9KSwgZS50aW1lb3V0KSksIGgpCiAgICAgICAgICB9LCBuLmFqYXhTZXR0aW5ncyA9IHsKICAgICAgICAgICAgdHlwZTogIkdFVCIsCiAgICAgICAgICAgIGJlZm9yZVNlbmQ6IGgsCiAgICAgICAgICAgIHN1Y2Nlc3M6IGgsCiAgICAgICAgICAgIGVycm9yOiBoLAogICAgICAgICAgICBjb21wbGV0ZTogaCwKICAgICAgICAgICAgY29udGV4dDogbnVsbCwKICAgICAgICAgICAgZ2xvYmFsOiAhMCwKICAgICAgICAgICAgeGhyOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICByZXR1cm4gbmV3IHdpbmRvdy5YTUxIdHRwUmVxdWVzdAogICAgICAgICAgICB9LAogICAgICAgICAgICBhY2NlcHRzOiB7CiAgICAgICAgICAgICAgc2NyaXB0OiAidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQiLAogICAgICAgICAgICAgIGpzb246ICJhcHBsaWNhdGlvbi9qc29uIiwKICAgICAgICAgICAgICB4bWw6ICJhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sIiwKICAgICAgICAgICAgICBodG1sOiAidGV4dC9odG1sIiwKICAgICAgICAgICAgICB0ZXh0OiAidGV4dC9wbGFpbiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgY3Jvc3NEb21haW46ICExLAogICAgICAgICAgICB0aW1lb3V0OiAwLAogICAgICAgICAgICBwcm9jZXNzRGF0YTogITAsCiAgICAgICAgICAgIGNhY2hlOiAhMCwKICAgICAgICAgICAgZGF0YUZpbHRlcjogaAogICAgICAgICAgfSwgbi5hamF4ID0gZnVuY3Rpb24oaSkgewogICAgICAgICAgICB2YXIgciwgbSwgZyA9IG4uZXh0ZW5kKHt9LCBpIHx8IHt9KSwKICAgICAgICAgICAgICB5ID0gbi5EZWZlcnJlZCAmJiBuLkRlZmVycmVkKCk7CiAgICAgICAgICAgIGZvciAoZSBpbiBuLmFqYXhTZXR0aW5ncykgdm9pZCAwID09PSBnW2VdICYmIChnW2VdID0gbi5hamF4U2V0dGluZ3NbZV0pOwogICAgICAgICAgICAhIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgICBlLmdsb2JhbCAmJiAwID09IG4uYWN0aXZlKysgJiYgcChlLCBudWxsLCAiYWpheFN0YXJ0IikKICAgICAgICAgICAgfShnKSwgZy5jcm9zc0RvbWFpbiB8fCAoKHIgPSBvLmNyZWF0ZUVsZW1lbnQoImEiKSkuaHJlZiA9IGcudXJsLCByLmhyZWYgPSByLmhyZWYsIGcuY3Jvc3NEb21haW4gPSBjLnByb3RvY29sICsgIi8vIiArIGMuaG9zdCAhPSByLnByb3RvY29sICsgIi8vIiArIHIuaG9zdCksIGcudXJsIHx8IChnLnVybCA9IHdpbmRvdy5sb2NhdGlvbi50b1N0cmluZygpKSwgKG0gPSBnLnVybC5pbmRleE9mKCIjIikpID4gLTEgJiYgKGcudXJsID0gZy51cmwuc2xpY2UoMCwgbSkpLAogICAgICAgICAgICAgIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgICAgIGUucHJvY2Vzc0RhdGEgJiYgZS5kYXRhICYmICJzdHJpbmciICE9IG4udHlwZShlLmRhdGEpICYmIChlLmRhdGEgPSBuLnBhcmFtKGUuZGF0YSwgZS50cmFkaXRpb25hbCkpLCAhZS5kYXRhIHx8IGUudHlwZSAmJiAiR0VUIiAhPSBlLnR5cGUudG9VcHBlckNhc2UoKSAmJiAianNvbnAiICE9IGUuZGF0YVR5cGUgfHwgKGUudXJsID0gdihlLnVybCwgZS5kYXRhKSwgZS5kYXRhID0gdm9pZCAwKQogICAgICAgICAgICAgIH0oZyk7CiAgICAgICAgICAgIHZhciBiID0gZy5kYXRhVHlwZSwKICAgICAgICAgICAgICBNID0gL1w/Lis9XD8vLnRlc3QoZy51cmwpOwogICAgICAgICAgICBpZiAoTSAmJiAoYiA9ICJqc29ucCIpLCAhMSAhPT0gZy5jYWNoZSAmJiAoaSAmJiAhMCA9PT0gaS5jYWNoZSB8fCAic2NyaXB0IiAhPSBiICYmICJqc29ucCIgIT0gYikgfHwgKGcudXJsID0gdihnLnVybCwgIl89IiArIERhdGUubm93KCkpKSwgImpzb25wIiA9PSBiKSByZXR1cm4gTSB8fCAoZy51cmwgPSB2KGcudXJsLCBnLmpzb25wID8gZy5qc29ucCArICI9PyIgOiAhMSA9PT0gZy5qc29ucCA/ICIiIDogImNhbGxiYWNrPT8iKSksIG4uYWpheEpTT05QKGcsIHkpOwogICAgICAgICAgICB2YXIgdywgVCA9IGcuYWNjZXB0c1tiXSwKICAgICAgICAgICAgICBVID0ge30sCiAgICAgICAgICAgICAgeCA9IGZ1bmN0aW9uKG4sIGUpIHsKICAgICAgICAgICAgICAgIFVbbi50b0xvd2VyQ2FzZSgpXSA9IFtuLCBlXQogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgRCA9IC9eKFtcdy1dKzopXC9cLy8udGVzdChnLnVybCkgPyBSZWdFeHAuJDEgOiB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wsCiAgICAgICAgICAgICAgSiA9IGcueGhyKCksCiAgICAgICAgICAgICAgTiA9IEouc2V0UmVxdWVzdEhlYWRlcjsKICAgICAgICAgICAgaWYgKHkgJiYgeS5wcm9taXNlKEopLCBnLmNyb3NzRG9tYWluIHx8IHgoIlgtUmVxdWVzdGVkLVdpdGgiLCAiWE1MSHR0cFJlcXVlc3QiKSwgeCgiQWNjZXB0IiwgVCB8fCAiKi8qIiksIChUID0gZy5taW1lVHlwZSB8fCBUKSAmJiAoVC5pbmRleE9mKCIsIikgPiAtMSAmJiAoVCA9IFQuc3BsaXQoIiwiLCAyKVswXSksIEoub3ZlcnJpZGVNaW1lVHlwZSAmJiBKLm92ZXJyaWRlTWltZVR5cGUoVCkpLCAoZy5jb250ZW50VHlwZSB8fCAhMSAhPT0gZy5jb250ZW50VHlwZSAmJiBnLmRhdGEgJiYgIkdFVCIgIT0gZy50eXBlLnRvVXBwZXJDYXNlKCkpICYmIHgoIkNvbnRlbnQtVHlwZSIsIGcuY29udGVudFR5cGUgfHwgImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpLCBnLmhlYWRlcnMpCiAgICAgICAgICAgICAgZm9yICh0IGluIGcuaGVhZGVycykgeCh0LCBnLmhlYWRlcnNbdF0pOwogICAgICAgICAgICBpZiAoSi5zZXRSZXF1ZXN0SGVhZGVyID0geCwgSi5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIGlmICg0ID09IEoucmVhZHlTdGF0ZSkgewogICAgICAgICAgICAgICAgICBKLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGgsIGNsZWFyVGltZW91dCh3KTsKICAgICAgICAgICAgICAgICAgdmFyIGUsIHQgPSAhMTsKICAgICAgICAgICAgICAgICAgaWYgKEouc3RhdHVzID49IDIwMCAmJiBKLnN0YXR1cyA8IDMwMCB8fCAzMDQgPT0gSi5zdGF0dXMgfHwgMCA9PSBKLnN0YXR1cyAmJiAiZmlsZToiID09IEQpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoYiA9IGIgfHwgZnVuY3Rpb24obikgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbiAmJiAobiA9IG4uc3BsaXQoIjsiLCAyKVswXSksIG4gJiYgKCJ0ZXh0L2h0bWwiID09IG4gPyAiaHRtbCIgOiAiYXBwbGljYXRpb24vanNvbiIgPT0gbiA/ICJqc29uIiA6IGEudGVzdChuKSA/ICJzY3JpcHQiIDogbC50ZXN0KG4pICYmICJ4bWwiKSB8fCAidGV4dCIKICAgICAgICAgICAgICAgICAgICAgIH0oZy5taW1lVHlwZSB8fCBKLmdldFJlc3BvbnNlSGVhZGVyKCJjb250ZW50LXR5cGUiKSksICJhcnJheWJ1ZmZlciIgPT0gSi5yZXNwb25zZVR5cGUgfHwgImJsb2IiID09IEoucmVzcG9uc2VUeXBlKSBlID0gSi5yZXNwb25zZTsKICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgIGUgPSBKLnJlc3BvbnNlVGV4dDsKICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBmdW5jdGlvbihuLCBlLCB0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQuZGF0YUZpbHRlciA9PSBoKSByZXR1cm4gbjsKICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IHQuY29udGV4dDsKICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdC5kYXRhRmlsdGVyLmNhbGwoaSwgbiwgZSkKICAgICAgICAgICAgICAgICAgICAgICAgfShlLCBiLCBnKSwgInNjcmlwdCIgPT0gYiA/ICgwLCBldmFsKShlKSA6ICJ4bWwiID09IGIgPyBlID0gSi5yZXNwb25zZVhNTCA6ICJqc29uIiA9PSBiICYmIChlID0gcy50ZXN0KGUpID8gbnVsbCA6IG4ucGFyc2VKU09OKGUpKQogICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAobikgewogICAgICAgICAgICAgICAgICAgICAgICB0ID0gbgogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgaWYgKHQpIHJldHVybiBmKHQsICJwYXJzZXJlcnJvciIsIEosIGcsIHkpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGQoZSwgSiwgZywgeSkKICAgICAgICAgICAgICAgICAgfSBlbHNlIGYoSi5zdGF0dXNUZXh0IHx8IG51bGwsIEouc3RhdHVzID8gImVycm9yIiA6ICJhYm9ydCIsIEosIGcsIHkpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSwgITEgPT09IHUoSiwgZykpIHJldHVybiBKLmFib3J0KCksIGYobnVsbCwgImFib3J0IiwgSiwgZywgeSksIEo7CiAgICAgICAgICAgIHZhciBrID0gISgiYXN5bmMiIGluIGcpIHx8IGcuYXN5bmM7CiAgICAgICAgICAgIGlmIChKLm9wZW4oZy50eXBlLCBnLnVybCwgaywgZy51c2VybmFtZSwgZy5wYXNzd29yZCksIGcueGhyRmllbGRzKQogICAgICAgICAgICAgIGZvciAodCBpbiBnLnhockZpZWxkcykgSlt0XSA9IGcueGhyRmllbGRzW3RdOwogICAgICAgICAgICBmb3IgKHQgaW4gVSkgTi5hcHBseShKLCBVW3RdKTsKICAgICAgICAgICAgcmV0dXJuIGcudGltZW91dCA+IDAgJiYgKHcgPSBzZXRUaW1lb3V0KChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICBKLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGgsIEouYWJvcnQoKSwgZihudWxsLCAidGltZW91dCIsIEosIGcsIHkpCiAgICAgICAgICAgIH0pLCBnLnRpbWVvdXQpKSwgSi5zZW5kKGcuZGF0YSA/IGcuZGF0YSA6IG51bGwpLCBKCiAgICAgICAgICB9LCBuLmdldCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICByZXR1cm4gbi5hamF4KGcuYXBwbHkobnVsbCwgYXJndW1lbnRzKSkKICAgICAgICAgIH0sIG4ucG9zdCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICB2YXIgZSA9IGcuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsKICAgICAgICAgICAgcmV0dXJuIGUudHlwZSA9ICJQT1NUIiwgbi5hamF4KGUpCiAgICAgICAgICB9LCBuLmdldEpTT04gPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyIGUgPSBnLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CiAgICAgICAgICAgIHJldHVybiBlLmRhdGFUeXBlID0gImpzb24iLCBuLmFqYXgoZSkKICAgICAgICAgIH0sIG4uZm4ubG9hZCA9IGZ1bmN0aW9uKGUsIHQsIGkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLmxlbmd0aCkgcmV0dXJuIHRoaXM7CiAgICAgICAgICAgIHZhciBvLCBhID0gdGhpcywKICAgICAgICAgICAgICBsID0gZS5zcGxpdCgvXHMvKSwKICAgICAgICAgICAgICBzID0gZyhlLCB0LCBpKSwKICAgICAgICAgICAgICBjID0gcy5zdWNjZXNzOwogICAgICAgICAgICByZXR1cm4gbC5sZW5ndGggPiAxICYmIChzLnVybCA9IGxbMF0sIG8gPSBsWzFdKSwgcy5zdWNjZXNzID0gZnVuY3Rpb24oZSkgewogICAgICAgICAgICAgIGEuaHRtbChvID8gbigiPGRpdj4iKS5odG1sKGUucmVwbGFjZShyLCAiIikpLmZpbmQobykgOiBlKSwgYyAmJiBjLmFwcGx5KGEsIGFyZ3VtZW50cykKICAgICAgICAgICAgfSwgbi5hamF4KHMpLCB0aGlzCiAgICAgICAgICB9OwogICAgICAgICAgdmFyIHkgPSBlbmNvZGVVUklDb21wb25lbnQ7CiAgICAgICAgICBuLnBhcmFtID0gZnVuY3Rpb24oZSwgdCkgewogICAgICAgICAgICB2YXIgaSA9IFtdOwogICAgICAgICAgICByZXR1cm4gaS5hZGQgPSBmdW5jdGlvbihlLCB0KSB7CiAgICAgICAgICAgICAgICBuLmlzRnVuY3Rpb24odCkgJiYgKHQgPSB0KCkpLCBudWxsID09IHQgJiYgKHQgPSAiIiksIHRoaXMucHVzaCh5KGUpICsgIj0iICsgeSh0KSkKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIGZ1bmN0aW9uIGUodCwgaSwgbywgcikgewogICAgICAgICAgICAgICAgdmFyIGEsIGwgPSBuLmlzQXJyYXkoaSksCiAgICAgICAgICAgICAgICAgIHMgPSBuLmlzUGxhaW5PYmplY3QoaSk7CiAgICAgICAgICAgICAgICBuLmVhY2goaSwgKGZ1bmN0aW9uKGksIGMpIHsKICAgICAgICAgICAgICAgICAgYSA9IG4udHlwZShjKSwgciAmJiAoaSA9IG8gPyByIDogciArICJbIiArIChzIHx8ICJvYmplY3QiID09IGEgfHwgImFycmF5IiA9PSBhID8gaSA6ICIiKSArICJdIiksICFyICYmIGwgPyB0LmFkZChjLm5hbWUsIGMudmFsdWUpIDogImFycmF5IiA9PSBhIHx8ICFvICYmICJvYmplY3QiID09IGEgPyBlKHQsIGMsIG8sIGkpIDogdC5hZGQoaSwgYykKICAgICAgICAgICAgICAgIH0pKQogICAgICAgICAgICAgIH0oaSwgZSwgdCksIGkuam9pbigiJiIpLnJlcGxhY2UoLyUyMC9nLCAiKyIpCiAgICAgICAgICB9CiAgICAgICAgfShaZXB0byksCiAgICAgICAgZnVuY3Rpb24obikgewogICAgICAgICAgbi5mbi5zZXJpYWxpemVBcnJheSA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICB2YXIgZSwgdCwgaSA9IFtdOwogICAgICAgICAgICByZXR1cm4gdGhpc1swXSAmJiBuLmVhY2godGhpc1swXS5lbGVtZW50cywgKGZ1bmN0aW9uKG8sIHIpIHsKICAgICAgICAgICAgICB0ID0gci50eXBlLCAoZSA9IHIubmFtZSkgJiYgImZpZWxkc2V0IiAhPSByLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgJiYgIXIuZGlzYWJsZWQgJiYgInN1Ym1pdCIgIT0gdCAmJiAicmVzZXQiICE9IHQgJiYgImJ1dHRvbiIgIT0gdCAmJiAiZmlsZSIgIT0gdCAmJiAoInJhZGlvIiAhPSB0ICYmICJjaGVja2JveCIgIT0gdCB8fCByLmNoZWNrZWQpICYmIGZ1bmN0aW9uIG4odCkgewogICAgICAgICAgICAgICAgaWYgKHQuZm9yRWFjaCkgcmV0dXJuIHQuZm9yRWFjaChuKTsKICAgICAgICAgICAgICAgIGkucHVzaCh7CiAgICAgICAgICAgICAgICAgIG5hbWU6IGUsCiAgICAgICAgICAgICAgICAgIHZhbHVlOiB0CiAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgIH0obihyKS52YWwoKSkKICAgICAgICAgICAgfSkpLCBpCiAgICAgICAgICB9LCBuLmZuLnNlcmlhbGl6ZSA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICB2YXIgbiA9IFtdOwogICAgICAgICAgICByZXR1cm4gdGhpcy5zZXJpYWxpemVBcnJheSgpLmZvckVhY2goKGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgICBuLnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KGUubmFtZSkgKyAiPSIgKyBlbmNvZGVVUklDb21wb25lbnQoZS52YWx1ZSkpCiAgICAgICAgICAgIH0pKSwgbi5qb2luKCImIikKICAgICAgICAgIH0sIG4uZm4uc3VibWl0ID0gZnVuY3Rpb24oZSkgewogICAgICAgICAgICBpZiAoMCBpbiBhcmd1bWVudHMpIHRoaXMuYmluZCgic3VibWl0IiwgZSk7CiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMubGVuZ3RoKSB7CiAgICAgICAgICAgICAgdmFyIHQgPSBuLkV2ZW50KCJzdWJtaXQiKTsKICAgICAgICAgICAgICB0aGlzLmVxKDApLnRyaWdnZXIodCksIHQuaXNEZWZhdWx0UHJldmVudGVkKCkgfHwgdGhpcy5nZXQoMCkuc3VibWl0KCkKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gdGhpcwogICAgICAgICAgfQogICAgICAgIH0oWmVwdG8pLAogICAgICAgIGZ1bmN0aW9uKCkgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZSh2b2lkIDApCiAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgIHZhciBuID0gZ2V0Q29tcHV0ZWRTdHlsZTsKICAgICAgICAgICAgd2luZG93LmdldENvbXB1dGVkU3R5bGUgPSBmdW5jdGlvbihlLCB0KSB7CiAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIHJldHVybiBuKGUsIHQpCiAgICAgICAgICAgICAgfSBjYXRjaCAobikgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGwKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9KCk7CiAgICAgIHZhciAkID0gd2luZG93LlplcHRvIHx8IHdpbmRvdy5qUXVlcnkgfHwgd2luZG93LiQ7CiAgICAgIGlmIChJcyhpc1ZpcFVybFJlZ2V4KSB8fCBJcygvb29cLm1vdmllJi8pKSBJcygvPWh0dHAvKSAmJiAoJCgidGl0bGUiKS5odG1sKFBMVUdJTl9JRCksIF8kKChmdW5jdGlvbigpIHsKICAgICAgICBpZiAoJCgidGl0bGUiKS5odG1sKFBMVUdJTl9JRCksIElzKC9iZWlqaXhzXC5jblwvLykpCiAgICAgICAgICBpZiAoSXMoLyVcZC8pKSB7CiAgICAgICAgICAgIGFkZFN0eWxlKCJcbmJvZHkgPiBmb3JtIHtcbiAgcG9zaXRpb246IGFic29sdXRlICFpbXBvcnRhbnQ7XG4gIGxlZnQ6IDAgIWltcG9ydGFudDtcbiAgcmlnaHQ6IDAgIWltcG9ydGFudDtcbiAgdG9wOiAwICFpbXBvcnRhbnQ7XG4gIGJvdHRvbTogMCAhaW1wb3J0YW50O1xuICBiYWNrZ3JvdW5kOiAjZWVlOGQzICFpbXBvcnRhbnQ7XG4gIHotaW5kZXg6IDIxNDc0ODM2NDcgIWltcG9ydGFudDtcbn1cblxuZm9ybSAjZGl2Y3NzNSB7XG4gIGhlaWdodDogYXV0bztcbiAgbWluLWhlaWdodDogOTB2aDtcbn1cblxuLm9vLWZhaWwge1xuICBoZWlnaHQ6IGF1dG8gIWltcG9ydGFudDtcbn1cblxuLm9vLWZhaWwgPiBkaXYge1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjNDk1MDU3O1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzQ5NTA1NztcbiAgcGFkZGluZzogMWVtO1xuICBjb2xvcjogI2Q5NDgwZjtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjRlNjtcbn1cblxuLm9vLWZhaWwgPiBkaXYgPiBkaXYgKyBkaXYge1xuICBtYXJnaW4tdG9wOiAxZW07XG59XG4iKTsKICAgICAgICAgICAgdCA9IDAsIGkgPSBzZXRJbnRlcnZhbCgoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgdmFyIG4gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJ2aWRlbyIpOwogICAgICAgICAgICAgIGlmIChuLmR1cmF0aW9uIDwgMzkwKSB7CiAgICAgICAgICAgICAgICBuLnBhdXNlKCk7CiAgICAgICAgICAgICAgICB2YXIgZSA9ICQoIiNUZXh0Qm94MiIpLmF0dHIoInZhbHVlIikgfHwgIiI7CiAgICAgICAgICAgICAgICAkKCIudmlkZW8tanMiKS5hZGRDbGFzcygib28tZmFpbCIpLmh0bWwoIjxkaXY+XG4gIDxkaXY+6Kej5p6Q5aSx6LSlPC9kaXY+Ii5jb25jYXQoZSA/ICI8ZGl2PiIgKyBlICsgIjwvZGl2PiIgOiAiIiwgIlxuPC9kaXY+IikpLCBjbGVhckludGVydmFsKGkpCiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHQrKyA+IDEwMCAmJiBjbGVhckludGVydmFsKGkpCiAgICAgICAgICAgIH0pLCAxMDApCiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB2YXIgbiA9IEhyZWYuc3BsaXQoInVybD0iKVsxXTsKICAgICAgICAgICAgaWYgKG4pIHsKICAgICAgICAgICAgICAkKCIjVGV4dEJveDEiKS52YWwoZGVjb2RlVVJJKG4pKTsKICAgICAgICAgICAgICB2YXIgZSA9ICQoIiNCdXR0b24xIik7CiAgICAgICAgICAgICAgZS5sZW5ndGggPiAwICYmICgkKCIudmlkZW8tanMiKS5jc3MoImRpc3BsYXkiLCAibm9uZSAhaW1wb3J0YW50IiksIGUuY2xpY2soKSkKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgdCA9IDAsCiAgICAgICAgICAgICAgaSA9IHNldEludGVydmFsKChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHZhciBuID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigidmlkZW8iKTsKICAgICAgICAgICAgICAgIG4gJiYgbi5wYXVzZSgpLCB0KysgPiAxMDAgJiYgY2xlYXJJbnRlcnZhbChpKQogICAgICAgICAgICAgIH0pLCAxMDApCiAgICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoSXMoL20xOTA3XC5jbi8pKSB7CiAgICAgICAgICBhZGRTdHlsZSgiXG4jcy1wbGF5ZXIgKyAuc2hvdyA+IGRpdlt0aXRsZV0sXG4jcy1jb250cm9scyArIGRpdiA+IGRpdjpudGgtY2hpbGQobis1KTpub3QoOmxhc3QtY2hpbGQpXG57Ii5jb25jYXQoUHVyaWZ5U3R5bGUsICJ9XG4iKSk7CiAgICAgICAgICB0ID0gMCwgaSA9IHNldEludGVydmFsKChmdW5jdGlvbigpIHsKICAgICAgICAgICAgKCQoIiNzLXBsYXllciArIC5zaG93IikubGVuZ3RoID4gMCB8fCB0KysgPiAxNSkgJiYgKGNsZWFySW50ZXJ2YWwoaSksICQoIiNzLWNvbnRyb2xzID4gZGl2IGltZyArIHNwYW4iKS5jbGljaygpKQogICAgICAgICAgfSksIDIwMCk7CiAgICAgICAgICB3aW5kb3cuYWxlcnQgPSBmdW5jdGlvbigpIHt9CiAgICAgICAgfQogICAgICB9KSkpLCAoSXMoLz1odHRwLykgJiYgKElzKGlzVmlwQWRkb25VcmxSZWdleCkgfHwgd2luZG93LnRvcCAhPT0gd2luZG93LnNlbGYgJiYgSXNOb3QoL20xOTA3XC5jbi8pKSB8fCBJcygvb29cLm1vdmllJi8pKSAmJiB2aXBBZGRvbkdvKCk7CiAgICAgIGVsc2UgaWYgKElzKC9zZWFyY2hcLmRvdWJhblwuY29tXC9tb3ZpZVwvLykpIGxvZygi6LGG55OjwrfnlLXlvbHCt+aQnOe0oiAtIHBjIiksIGFkZFN0eWxlKCJcbiNkYWxlX21vdmllX3N1YmplY3Rfc2VhcmNoX2JvdHRvbSxcbiNkYWxlX21vdmllX3N1YmplY3Rfc2VhcmNoX3RvcF9yaWdodCxcbiNkYWxlX21vdmllX3N1YmplY3RfdG9wX3JpZ2h0LFxuI2RhbGVfbW92aWVfc3ViamVjdF9ib3R0b21fc3VwZXJfYmFubmVyLFxuI2RhbGVfbW92aWVfc3ViamVjdF9taWRkbGVfcmlnaHQgeyIuY29uY2F0KFB1cmlmeVN0eWxlLCAifVxuXG4ub28tc291cmNlcyB7XG4gIHBhZGRpbmctbGVmdDogMWVtO1xufVxuXG4ub28tc291cmNlcyBhIHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXggIWltcG9ydGFudDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBmb250LXNpemU6IDAuNzVlbTtcbiAgaGVpZ2h0OiAyZW07XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBsaW5lLWhlaWdodDogMS41O1xuICBwYWRkaW5nLWxlZnQ6IDAuNzVlbTtcbiAgcGFkZGluZy1yaWdodDogMC43NWVtO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWZmYWYzO1xuICBjb2xvcjogIzI1Nzk0MjtcbiAgbWFyZ2luLXRvcDogMC41ZW07XG4gIG1hcmdpbi1yaWdodDogMC41ZW07XG59XG4iKSksIF8kKChmdW5jdGlvbigpIHsKICAgICAgICAkKCIjaWNwIikuaHRtbChPT19TSUdOKSwgJCgiLmdlbXpjcCIpLmVhY2goKGZ1bmN0aW9uKG4sIGUpIHsKICAgICAgICAgIHZhciB0ID0gJCgiLnRpdGxlIiwgZSkudGV4dCgpOwogICAgICAgICAgJChlKS5hcHBlbmQoJzxwIGNsYXNzPSJvby1zb3VyY2VzIj5cbicuY29uY2F0KGdldFNlYXJjaFNvdXJjZXNIdG1sKHQpLCAiXG48L3A+IikpCiAgICAgICAgfSkpCiAgICAgIH0pKTsKICAgICAgZWxzZSBpZiAoSXMoL21cLmRvdWJhblwuY29tXC9zZWFyY2hcL1w/Lip0eXBlPW1vdmllLykpIGxvZygi6LGG55OjwrfnlLXlvbHCt+aQnOe0oiAtIG0iKSwgYWRkU3R5bGUoIlxuI1RhbGlvbk5hdixcbi5zZWFyY2gtcmVzdWx0cy1tb2R1bGVzLW5hbWUgeyIuY29uY2F0KFB1cmlmeVN0eWxlLCAifVxuXG4uc2VhcmNoLW1vZHVsZSB7XG4gIG1hcmdpbi10b3A6IDA7XG59XG5cbi5zZWFyY2gtcmVzdWx0cyBpbWcge1xuICB3aWR0aDogODBweDtcbn1cblxuLnNlYXJjaC1yZXN1bHRzIHtcbiAgcGFkZGluZy1ib3R0b206IDEwcHg7XG59XG5cbi5zZWFyY2gtcmVzdWx0cyBsaSBhIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuLnNlYXJjaC1yZXN1bHRzIGltZyB7XG4gIGhlaWdodDogMTAwJTtcbiAgcGFkZGluZzogMDtcbiAgbWFyZ2luOiA1cHggMDtcbiAgYm9yZGVyOiAycHggc29saWQ7XG4gIGJvcmRlci1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgIzJiNjhjNCAwJSwjY2YyZDZlIDEwMCUpMTtcbn1cbiIpKSwgXyQoKGZ1bmN0aW9uKCkgewogICAgICAgICQoIiNtb3JlLXNlYXJjaCIpLmFwcGVuZCgiICAgICIgKyBPT19TSUdOKSwgJCgiLnN1YmplY3QtaW5mbyIpLmVhY2goKGZ1bmN0aW9uKG4sIGUpIHsKICAgICAgICAgIGluc2VydFNlYXJjaEFkZG9uKCQoIi5zdWJqZWN0LXRpdGxlIiwgZSkudGV4dCgpLCBlLCAiYXBwZW5kIikKICAgICAgICB9KSksICQoIi5zZWFyY2gtaGQgaW5wdXQiKS5vbigia2V5dXAiLCAoZnVuY3Rpb24obikgewogICAgICAgICAgMTMgPT09IG4ua2V5Q29kZSAmJiAobi5wcmV2ZW50RGVmYXVsdCgpLCBsb2NhdGlvbi5ocmVmID0gIi9zZWFyY2gvP3F1ZXJ5PSIgKyBuLnRhcmdldC52YWx1ZSArICImdHlwZT1tb3ZpZSIpCiAgICAgICAgfSkpLCAkKCIuc2VhcmNoLWhkIC5idXR0b24tc2VhcmNoIikuYXR0cigiaWQiLCBPT19TSUdOKSwgJCgiLnNlYXJjaC1oZCAuYnV0dG9uLXNlYXJjaCIpLm9uKCJjbGljayIsIChmdW5jdGlvbihuKSB7CiAgICAgICAgICBuLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICB2YXIgZSA9ICQoIi5zZWFyY2gtaGQgaW5wdXQiKS52YWwoKTsKICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSAiL3NlYXJjaC8/cXVlcnk9IiArIGUgKyAiJnR5cGU9bW92aWUiCiAgICAgICAgfSkpCiAgICAgIH0pKTsKICAgICAgZWxzZSBpZiAoSXMoL21vdmllLmRvdWJhbi5jb21cL3N1YmplY3RcLy8pKSBsb2coIuixhueTo8K355S15b2xwrfor6bmg4UgLSBwYyIpLCBhZGRTdHlsZSgiXG4jZGFsZV9tb3ZpZV9zdWJqZWN0X3NlYXJjaF9ib3R0b20sXG4jZGFsZV9tb3ZpZV9zdWJqZWN0X3NlYXJjaF90b3BfcmlnaHQsXG4jZGFsZV9tb3ZpZV9zdWJqZWN0X3RvcF9yaWdodCxcbiNkYWxlX21vdmllX3N1YmplY3RfYm90dG9tX3N1cGVyX2Jhbm5lcixcbiNkYWxlX21vdmllX3N1YmplY3RfbWlkZGxlX3JpZ2h0IHsiLmNvbmNhdChQdXJpZnlTdHlsZSwgIn1cbiIpKSwgXyQoKGZ1bmN0aW9uKCkgewogICAgICAgICQoIiNpY3AiKS5odG1sKE9PX1NJR04pLCBsb2coInRpY2siKTsKICAgICAgICB2YXIgbiA9IHB1cmlmeUtleXdvcmQoJCgidGl0bGUiKS50ZXh0KCkucmVwbGFjZSgiKOixhueToykiLCAiIikudHJpbSgpKTsKICAgICAgICBsb2coInRpdGxlOiIsIG4pLCBsb2coIiNpbmZvOiIsICQoIiNpbmZvIikubGVuZ3RoKSwgJCgiI2luZm8iKS5hcHBlbmQoJzxkaXY+XG48c3BhbiBjbGFzcz0icGwiPuWcqOe6v+inguecizo8L3NwYW4+XG48c3Bhbj5cbicuY29uY2F0KOaQnOe0oua6kC5maWx0ZXIoKGZ1bmN0aW9uKG4pIHsKICAgICAgICAgIHJldHVybiAhL2RvdWJhblwuY29tLy50ZXN0KG4udXJsKQogICAgICAgIH0pKS5tYXAoKGZ1bmN0aW9uKGUpIHsKICAgICAgICAgIHJldHVybiAiPHNwYW4+PGEgIiArIChpc01vYmlsZSA/ICIiIDogJ3RhcmdldD0iX2JsYW5rIiAnKSArICdocmVmPSInICsgdG9TZWFyY2hVcmwoZS51cmwsIG4pICsgJyI+JyArIGUubmFtZSArICI8L2E+IgogICAgICAgIH0pKS5qb2luKCIgLyA8L3NwYW4+IiksICJcbjwvc3Bhbj48L3NwYW4+PC9kaXY+XG4iKSkKICAgICAgfSkpOwogICAgICBlbHNlIGlmIChJcygvbVwuZG91YmFuXC5jb21cL21vdmllXC9zdWJqZWN0XC8vKSkgbG9nKCLosYbnk6PCt+eUteW9scK36K+m5oOFIC0gbSIpLCBhZGRTdHlsZSgiXG4uc2NvcmUtd3JpdGUsXG5hW2hyZWYqPSd0b19hcHAnXTpub3QoLnN1Yi1ob25vcik6bm90KC5zdWItY292ZXIpLFxuYVtocmVmKj0nZG91YmFuYXBwJ10sXG5kaXZbaWQqPSdCQUlEVSddLFxuZGl2W2lkKj0nZ29vZ2xlJ10sXG5zZWN0aW9uICsgLmNlbnRlcixcbi5ib3R0b21fYWRfZG93bmxvYWQsXG4uc3ViLXZlbmRvcixcbi50b19wYyxcbi5UYWxpb25OYXYtc3RhdGljLFxuLnN1Yi1kZXRhaWwgLm1hcmstbW92aWUsXG4uc3ViLWRldGFpbCAubWFyay10dixcbi5zdWJqZWN0LWJhbm5lcixcbi5ib3R0b21fYWRfZG93bmxvYWQsXG4uY292ZXItY291bnQsXG4jZ29vZ2xlX2VzZixcbi5hZHNieWdvb2dsZSxcbi5BZHZlcnRpc2VtZW50LFxuLlRhbGlvbk5hdi1wcmltYXJ5IC5uYXYtYnRucy5jYW5jZWwgeyIuY29uY2F0KFB1cmlmeVN0eWxlLCAnfVxuXG4uc3ViLWluZm8gLnN1Yi1jb3ZlciB7XG4gIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG59XG5cbi5UYWxpb25OYXYtcHJpbWFyeSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZSAhaW1wb3J0YW50O1xufVxuXG4uc3ViamVjdC1jb21tZW50cyxcbi5zdWJqZWN0LXJldmlld3Mge1xuICBtYXJnaW4tYm90dG9tOiAwICFpbXBvcnRhbnQ7XG59XG5cbi5UYWxpb25OYXYgLlRhbGlvbk5hdi1wcmltYXJ5IC5zZWFyY2gtYm94IHtcbiAgd2lkdGg6IDIyMHB4O1xuICBmbGV4OiAyMjBweCAwIDA7XG4gIGFuaW1hdGlvbjogbm9uZTtcbn1cblxuLnN1Yi1vcmlnaW5hbC10aXRsZSB7XG4gIHBhZGRpbmc6IDAuMjVlbSAwO1xufVxuXG4uX1Zfc2lnbiB7XG4gIGZvbnQtc2l6ZTogMC44NWVtO1xuICBvcGFjaXR5OiAwLjE1O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHBhZGRpbmctYm90dG9tOiAxZW07XG59XG5cbi5fVl9zb3VyY2UsIC5zdWItc2NvcmUgKyAuc3ViLXNjb3JlIHtcbiAgbWFyZ2luLXRvcDogMS41ZW0gIWltcG9ydGFudDtcbiAgY29sb3I6ICNmZmY7XG59XG5cbi5fVl9zb3VyY2UgLnN1Yi1zY29yZSAuc3ViLWNvbnRlbnQge1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuLl9WX3NvdXJjZSAuc3ViLXNjb3JlIGEge1xuICBwYWRkaW5nOiAwLjI1ZW0gMC41ZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjU7XG4gIG1hcmdpbjogMCAwLjE1ZW07XG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4yKTtcbiAgZm9udC1zaXplOiAxLjA1ZW07XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBsZXR0ZXItc3BhY2luZzogMXB4O1xuICBtYXJnaW4tdG9wOiAwLjVlbTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBjb2xvcjogI2ZmZThjYztcbiAgYmFja2dyb3VuZDogcmdiYSgyMzksIDIzOCwgMjM4LCAwLjA1KTtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xufVxuXG4jVGFsaW9uTmF2IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuI1RhbGlvbk5hdiAubG9nbyB7XG4gIGJhY2tncm91bmQ6IG5vbmU7XG4gIGZvbnQtc2l6ZTogMWVtO1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGNvbG9yOiAjZGVlMmU2O1xufVxuXG4uc2VhcmNoLWJveDpub3QoLm9uLXNlYXJjaCkge1xuICBvcGFjaXR5OiAwLjc7XG59XG5cbiNjaGFubmVsX3RhZ3Mge1xuICBtYXJnaW4tYm90dG9tOiAxMHB4O1xufVxuXG4uc3ViamVjdC1oZWFkZXItd3JhcCAuc3ViLWRldGFpbCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kO1xufVxuXG4jY2hhbm5lbF90YWdzIHtcbiAgbWFyZ2luLXRvcDogMTBweDtcbn1cblxuaW5wdXRbdHlwZT0ic2VhcmNoIl06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24sXG5pbnB1dFt0eXBlPSJzZWFyY2giXTo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbixcbmlucHV0W3R5cGU9InNlYXJjaCJdOjotd2Via2l0LXNlYXJjaC1yZXN1bHRzLWJ1dHRvbixcbmlucHV0W3R5cGU9InNlYXJjaCJdOjotd2Via2l0LXNlYXJjaC1yZXN1bHRzLWRlY29yYXRpb24ge1xuICAtd2Via2l0LWFwcGVhcmFuY2U6bm9uZTtcbn1cbicpKSwgXyQoKGZ1bmN0aW9uKCkgewogICAgICAgICQoIi5tb3ZpZS1yZXZpZXdzIC5zaG93LWFsbCIpLmFmdGVyKCc8ZGl2IGNsYXNzPSJfVl9zaWduIj48YSBocmVmPSJodHRwczovL2dpdGVlLmNvbS9lY3J1b3Mvb28iPuixhueTo8K35YeA5YyWICcuY29uY2F0KE9PX1NJR04sICI8L2E+PC9kaXY+IikpLCAkKCJzZWN0aW9uICsgLmNlbnRlciIpLmVhY2goKGZ1bmN0aW9uKG4sIGUpIHsKICAgICAgICAgICQoZSkucmVtb3ZlKCkKICAgICAgICB9KSksICQoIi5zdWJqZWN0LWhlYWRlci13cmFwIikuYWZ0ZXIoJCgiI1RhbGlvbk5hdiIpKSwgJCgiI1RhbGlvbk5hdiIpLmNzcygiZGlzcGxheSIsICJibG9jayIpLCAkKCIjVGFsaW9uTmF2IC5sb2dvIikuaHRtbChPT19TSUdOKS5hdHRyKCJocmVmIiwgImh0dHBzOi8vbW92aWUuZG91YmFuLmNvbS90YWcvIy8iKSwgJCgiLnNlYXJjaC1ib3giKS5yZW1vdmUoKSwgJCgiLlRhbGlvbk5hdi1wcmltYXJ5IC5sb2dvIikuYWZ0ZXIoJzxkaXYgY2xhc3M9InNlYXJjaC1ib3giPjxpbnB1dCBjbGFzcz0ic2VhcmNoLWlucHV0IiB0eXBlPSJzZWFyY2giIHBsYWNlaG9sZGVyPSLmkJzntKIiPjwvZGl2PicpLCAkKCIuc2VhcmNoLWlucHV0Iikub24oImZvY3VzIiwgKGZ1bmN0aW9uKCkgewogICAgICAgICAgJCh0aGlzKS5wYXJlbnQoKS5hZGRDbGFzcygib24tc2VhcmNoIikKICAgICAgICB9KSkub24oImJsdXIiLCAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAkKHRoaXMpLnBhcmVudCgpLnJlbW92ZUNsYXNzKCJvbi1zZWFyY2giKQogICAgICAgIH0pKSwgJCgiLnNlYXJjaC1pbnB1dCIpLm9uKCJrZXl1cCIsIChmdW5jdGlvbihuKSB7CiAgICAgICAgICAxMyA9PT0gbi5rZXlDb2RlICYmIChuLnByZXZlbnREZWZhdWx0KCksIGxvY2F0aW9uLmhyZWYgPSAiL3NlYXJjaC8/cXVlcnk9IiArIG4udGFyZ2V0LnZhbHVlICsgIiZ0eXBlPW1vdmllIikKICAgICAgICB9KSk7CiAgICAgICAgdmFyIG4gPSBwdXJpZnlLZXl3b3JkKCQoIi5zdWItdGl0bGUiKS50ZXh0KCkudHJpbSgpKTsKICAgICAgICAwID09PSAkKCIuX1Zfc291cmNlIikubGVuZ3RoICYmICQoIi5zdWJqZWN0LWhlYWRlci13cmFwIikuYXBwZW5kKCc8ZGl2IGNsYXNzPSJfVl9zb3VyY2Ugc3ViamVjdC1tYXJrIj5cblxuPGRpdiBjbGFzcz0ic3ViLXNjb3JlIj5cbiAgPGRpdiBjbGFzcz0ic3ViLXRyYWRlbWFyayI+XG4gIOWcqOe6v+ingueci1xuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0ic3ViLWNvbnRlbnQiPlxuJy5jb25jYXQoZ2V0U2VhcmNoU291cmNlc0h0bWwobiwgITEpLCAiXG4gIDwvZGl2PlxuPC9kaXY+XG5cbjwvZGl2PiIpKSwgc2V0VGltZW91dCgoZnVuY3Rpb24oKSB7CiAgICAgICAgICAkKCIuc3ViamVjdC1pbnRybyAuYmQgcCIpLmNsaWNrKCksICQoIi5zdWItY292ZXIiKS5hdHRyKCJocmVmIiwgIiMiKSwgJCgiI3N1YmplY3QtaG9ub3Itcm9vdCBhIikuYXR0cigiaHJlZiIsICIjIikKICAgICAgICB9KSwgMWUzKTsKICAgICAgICB2YXIgZSA9IDAsCiAgICAgICAgICB0ID0gc2V0SW50ZXJ2YWwoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAkKCJib2R5ID4gaW5zLCBib2R5ID4gaWZyYW1lLCAuYWRzYnlnb29nbGUiKS5yZW1vdmUoKSwgZSsrID4gNSAmJiBjbGVhckludGVydmFsKHQpCiAgICAgICAgICB9KSwgNTAwKTsKICAgICAgICAhIGZ1bmN0aW9uIG4oKSB7CiAgICAgICAgICB2YXIgZSA9ICQoIiNzdWJqZWN0LWhlYWRlci1jb250YWluZXIiKS5hdHRyKCJzdHlsZSIpOwogICAgICAgICAgaWYgKGUpIHsKICAgICAgICAgICAgdmFyIHQgPSBlLm1hdGNoKC86XHMqKFteO10rKTs/LylbMV0sCiAgICAgICAgICAgICAgaSA9IHQucmVwbGFjZSgiKSIsICIsIDApIik7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgYWRkU3R5bGUoIlxuLnN1Yi1jb3Zlcjo6YmVmb3JlIHtcbiAgYmFja2dyb3VuZDogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQoYm90dG9tLCAiLmNvbmNhdCh0LCAiIDAlLCAiKS5jb25jYXQoaSwgIiAxNSUpLCAtd2Via2l0LWxpbmVhci1ncmFkaWVudChyaWdodCwgIikuY29uY2F0KHQsICIgMCUsICIpLmNvbmNhdChpLCAiIDE1JSksLXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCAiKS5jb25jYXQodCwgIiAwJSwgIikuY29uY2F0KGksICIgMTUlKSwgLXdlYmtpdC1saW5lYXItZ3JhZGllbnQobGVmdCwgIikuY29uY2F0KHQsICIgMCUsICIpLmNvbmNhdChpLCAnIDE1JSk7XG4gIGNvbnRlbnQ6ICIiO1xuICBib3R0b206IDA7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogMDtcbiAgcmlnaHQ6IDA7XG4gIHRvcDogMDtcbiAgd2lkdGg6IDEwMnB4O1xuICBoZWlnaHQ6IDE0MnB4O1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG59XG4nKSkKICAgICAgICAgICAgfSBjYXRjaCAobikgewogICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoInN5bmNDb3ZlckNvbG9yOiIsIG4pCiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSBzZXRUaW1lb3V0KChmdW5jdGlvbigpIHsKICAgICAgICAgICAgbigpCiAgICAgICAgICB9KSwgMTAwKQogICAgICAgIH0oKQogICAgICB9KSk7CiAgICAgIGVsc2UgewogICAgICAgIGlmIChJcygvbVwudHZcLnNvaHVcLmNvbVwvcGhvbmVfcGxheV9maWxtLit2aWQ9LykpIHJldHVybiBsb2NhdGlvbi5ocmVmID0gSHJlZi5yZXBsYWNlKCJwaG9uZV9wbGF5X2ZpbG0iLCAidiIuY29uY2F0KEhyZWYubWF0Y2goL3ZpZD0oXGQrKS8pWzFdLCAiLnNodG1sIikpOwogICAgICAgIGlmIChpc01vYmlsZSAmJiBJcygvbW92aWVcLmRvdWJhblwuY29tXC90YWdcLyMvKSkgewogICAgICAgICAgbG9nKCLosYbnk6PCt+mAieW9seinhiIpOwogICAgICAgICAgdmFyIG51bSA9IDM7CiAgICAgICAgICBhZGRTdHlsZShwcmVmaXhDc3MoIlxuLmNhdGVnb3J5IHtcbiAgd2lkdGg6IDEwMCU7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIG92ZXJmbG93LXg6IGF1dG87XG59XG5cbi50YWdzIHtcbiAgbWFyZ2luLWJvdHRvbTogMWVtO1xufVxuXG4uY2hlY2tib3hfX2lucHV0IHtcbiAgdmVydGljYWwtYWxpZ246IHRleHQtdG9wO1xufVxuXG4udGFnLW5hdiB7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBmb250LXNpemU6IDEycHg7XG59XG5cbi50YWctbmF2IC50YWJzLCAudGFnLW5hdiAuY2hlY2sge1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDtcbn1cblxuLnRhZy1uYXYgLnRhYnMgYSB7XG4gIHBhZGRpbmc6IDcuNXB4IDVweCA1cHg7XG59XG5cbi50YWJzIGE6bm90KC50YWItY2hlY2tlZCkge1xuICBib3JkZXI6IDFweCBzb2xpZCAjZGZkZmRmO1xufVxuXG4udGFicyAudGFiLWNoZWNrZWQge1xuICBib3JkZXI6IDFweCBzb2xpZCAjMjU4ZGNkIWltcG9ydGFudDtcbn1cblxuLnRhYi1jaGVja2VkOmFmdGVyIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLmNoZWNrYm94LCAucmFuZ2Uge1xuICBtYXJnaW4tcmlnaHQ6IDVweDtcbn1cblxuLmNoZWNrIHtcbiAgZmxvYXQ6IG5vbmU7XG4gIG1hcmdpbi10b3A6IDVweDtcbn1cblxuLmxpc3Qtd3AsIC5pdGVtIC5jb3Zlci13cCB7XG4gIG92ZXJmbG93OiB1bnNldDtcbn1cblxuYSBpbWcge1xuICBwYWRkaW5nOiAycHg7XG4gIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgIzJiNjhjNCAwJSwjY2YyZDZlIDEwMCUpO1xufVxuXG5hLml0ZW0ge1xuICB3aWR0aDogIi5jb25jYXQocGFyc2VJbnQoMTAwIC8gbnVtKSwgIiU7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuYS5pdGVtIHAge1xuICBwYWRkaW5nLXJpZ2h0OiAwO1xufVxuXG5hLml0ZW0gLmNvdmVyLXdwIHtcbiAgaGVpZ2h0OiBhdXRvO1xuICBwYWRkaW5nOiAwIDAuNWVtO1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuYS5pdGVtIC5jb3Zlci13cDphZnRlciwgLnBvc3RlcjphZnRlciB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbmEuaXRlbSAucGljIGltZyB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6ICIpLmNvbmNhdChwYXJzZUludCg0ICogc2NyZWVuV2lkdGggLyAzIC8gbnVtKSwgInB4O1xuICBtYXgtd2lkdGg6IDE1MHB4O1xuICBvYmplY3QtZml0OiBjb3Zlcjtcbn1cblxuLnRhZy1uYXYgLnJhbmdlLWRyb3Bkb3duIHtcbiAgbGVmdDogMCAhaW1wb3J0YW50O1xuICB3aWR0aDogYXV0byAhaW1wb3J0YW50O1xuICByaWdodDogMCAhaW1wb3J0YW50O1xuICB0b3A6IC00ZW0gIWltcG9ydGFudDtcbn1cblxuLm1vcmUge1xuICBtYXJnaW46IDAgMWVtIDAuNWVtO1xufVxuXG4iKSwgIi5vbyIpICsgIlxuYm9keSA+ICo6bm90KC5vbykgeyIuY29uY2F0KFB1cmlmeVN0eWxlLCAifVxuXG4jYXBwIC5hcnRpY2xlLCAuYXJ0aWNsZS5vbyB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICByaWdodDogMDtcbiAgcGFkZGluZzogMTBweCA2cHg7XG4gIHRyYW5zaXRpb246IGFsbCAwLjhzO1xufVxuXG4uY2F0ZWdvcnk6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgd2lkdGg6IDFweDtcbiAgaGVpZ2h0OiAxcHg7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjIzLCAyMjMsIDIyMywgMC4yNSk7XG59XG5cbi5jYXRlZ29yeTo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sge1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyOiAwcHggbm9uZSAjZmZmZmZmO1xuICBib3JkZXItcmFkaXVzOiA1MHB4O1xufVxuXG4uY2F0ZWdvcnk6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDAgMi41cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuICBib3gtc2hhZG93OiBpbnNldCAwIDAgMi41cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuICBib3JkZXItcmFkaXVzOiAyLjVweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyMjMsIDIyMywgMjIzLCAwLjI1KTtcbiAgb3BhY2l0eTogMC43O1xuICB0cmFuc2l0aW9uOiBvcGFjaXR5IGVhc2UtaW4tb3V0IDIwMG1zO1xufVxuXG4uY2F0ZWdvcnk6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHtcbiAgb3BhY2l0eTogMTtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyMjMsIDIyMywgMjIzLCAwLjI1KTtcbn1cblxuLm9vLXNlYXJjaCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogZmxleDtcbiAgbWFyZ2luLWJvdHRvbTogNXB4O1xufVxuXG4ub28tc2VhcmNoIC5pbnAge1xuICBoZWlnaHQ6IDM0cHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgY3Vyc29yOiB0ZXh0O1xuICB3aWR0aDogOTAlO1xufVxuXG4ub28tc2VhcmNoIC5pbnAgaW5wdXQge1xuICBiYWNrZ3JvdW5kOiAjZmZmO1xuICB3aWR0aDogOTYlO1xuICBtYXJnaW46IDA7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIGhlaWdodDogMzBweDtcbiAgcGFkZGluZy1sZWZ0OiAxMHB4O1xuICBvdXRsaW5lOiBub25lO1xufVxuXG4ub28tc2VhcmNoIGlucHV0IHtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICBib3JkZXI6IG5vbmU7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xufVxuXG4ub28tc2VhcmNoIC5pbnAtYnRuIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogMzdweDtcbiAgaGVpZ2h0OiAzNHB4O1xufVxuXG4ub28tc2VhcmNoIC5pbnAtYnRuIGlucHV0IHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgZm9udC1zaXplOiAwO1xuICBwYWRkaW5nOiAzNXB4IDAgMCAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBjb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLm9vLXNlYXJjaCAuaW5wLWJ0biBpbnB1dDpmb2N1cyB7XG4gIG91dGxpbmU6IG5vbmU7XG59XG5cbi5vby1zZWFyY2ggLmlucCB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybCgvL2ltZzMuZG91YmFuaW8uY29tL2RhZS9hY2NvdW50cy9yZXNvdXJjZXMvYTRhMzhhNS9tb3ZpZS9hc3NldHMvbmF2X212X2JnLnBuZz9zPTEpO1xufVxuXG4ub28tc2VhcmNoIC5pbnAtYnRuIGlucHV0IHtcbiAgYmFja2dyb3VuZDogdXJsKC8vaW1nMy5kb3ViYW5pby5jb20vZGFlL2FjY291bnRzL3Jlc291cmNlcy9hNGEzOGE1L21vdmllL2Fzc2V0cy9uYXZfbXZfYmcucG5nP3M9MSkgbm8tcmVwZWF0IDAgLTQwcHg7XG59XG4iKSksIF8kKChmdW5jdGlvbigpIHsKICAgICAgICAgICAgJCgidGl0bGUiKS5odG1sKCLpgInlvbHop4YgLSBvby5tb3ZpZSIpLCAkKCIjYXBwIC5hcnRpY2xlIC50YWdzIikuYmVmb3JlKCc8ZGl2IGNsYXNzPSJvby1zZWFyY2giPlxuICA8ZGl2IGNsYXNzPSJpbnAiPjxpbnB1dCBuYW1lPSInLmNvbmNhdChPT19TSUdOLCAnIiBzaXplPSIyMiIgbWF4bGVuZ3RoPSI2MCIgcGxhY2Vob2xkZXI9IuaQnOe0oueUteW9seOAgeeUteinhuWJp+OAgee7vOiJuuOAgeW9seS6uiIgdmFsdWU9IiIgYXV0b2NvbXBsZXRlPSJvZmYiPjwvZGl2PlxuICA8ZGl2IGNsYXNzPSJpbnAtYnRuIj48aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0i5pCc57SiIj48L2Rpdj5cbjwvZGl2PicpKSwgJCgiYm9keSIpLmFwcGVuZCgkKCIjYXBwIC5hcnRpY2xlIikuYWRkQ2xhc3MoIm9vIikpLCAkKCIub28tc2VhcmNoIGlucHV0Iikub24oImtleXVwIiwgKGZ1bmN0aW9uKG4pIHsKICAgICAgICAgICAgICAxMyA9PT0gbi5rZXlDb2RlICYmIChuLnByZXZlbnREZWZhdWx0KCksIGxvY2F0aW9uLmhyZWYgPSAiaHR0cHM6Ly9tLmRvdWJhbi5jb20vc2VhcmNoLz9xdWVyeT0iICsgbi50YXJnZXQudmFsdWUgKyAiJnR5cGU9bW92aWUiKQogICAgICAgICAgICB9KSksICQoIi5vby1zZWFyY2ggLmlucC1idG4gaW5wdXQiKS5vbigiY2xpY2siLCAoZnVuY3Rpb24obikgewogICAgICAgICAgICAgIG4ucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICB2YXIgZSA9ICQoIi5vby1zZWFyY2ggaW5wdXQiKS52YWwoKTsKICAgICAgICAgICAgICBsb2NhdGlvbi5ocmVmID0gImh0dHBzOi8vbS5kb3ViYW4uY29tL3NlYXJjaC8/cXVlcnk9IiArIGUgKyAiJnR5cGU9bW92aWUiCiAgICAgICAgICAgIH0pKSwgJCgiYS5pdGVtIikuZWFjaCgoZnVuY3Rpb24obiwgZSkgewogICAgICAgICAgICAgICQoZSkuYXR0cigiaHJlZiIsICQoZSkuYXR0cigiaHJlZiIpLnJlcGxhY2UoIm1vdmllLmRvdWJhbi5jb20iLCAibS5kb3ViYW4uY29tL21vdmllIikpLnJlbW92ZUF0dHIoInRhcmdldCIpCiAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgdmFyIG4gPSAhMTsKCiAgICAgICAgICAgIGZ1bmN0aW9uIGUoKSB7CiAgICAgICAgICAgICAgIW4gJiYgJCh3aW5kb3cpLnNjcm9sbFRvcCgpICsgJCh3aW5kb3cpLmhlaWdodCgpID4gJChkb2N1bWVudCkuaGVpZ2h0KCkgLSA0MCAmJiAobiA9ICEwLCBzZXRUaW1lb3V0KChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICQod2luZG93KS5zY3JvbGxUb3AoKSArICQod2luZG93KS5oZWlnaHQoKSA+ICQoZG9jdW1lbnQpLmhlaWdodCgpIC0gNDAgJiYgKCQod2luZG93KS51bmJpbmQoInNjcm9sbCIpLCAkKCIubW9yZSIpLmNsaWNrKCkpLCBuID0gITEKICAgICAgICAgICAgICB9KSwgMTIwMCkpCiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIHQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIubGlzdC13cCIpOwogICAgICAgICAgICBuZXcgTXV0YXRpb25PYnNlcnZlcigoZnVuY3Rpb24obikgewogICAgICAgICAgICAgIHZhciB0ID0gITEsCiAgICAgICAgICAgICAgICBpID0gITAsCiAgICAgICAgICAgICAgICBvID0gITEsCiAgICAgICAgICAgICAgICByID0gdm9pZCAwOwogICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBhLCBsID0gbltTeW1ib2wuaXRlcmF0b3JdKCk7ICEoaSA9IChhID0gbC5uZXh0KCkpLmRvbmUpOyBpID0gITApIHsKICAgICAgICAgICAgICAgICAgdmFyIHMgPSBhLnZhbHVlOwogICAgICAgICAgICAgICAgICAiY2hpbGRMaXN0IiA9PSBzLnR5cGUgJiYgKHQgPSAhMCwgcy5hZGRlZE5vZGVzLmZvckVhY2goKGZ1bmN0aW9uKG4pIHsKICAgICAgICAgICAgICAgICAgICBuLmNsYXNzTGlzdC5jb250YWlucygiaXRlbSIpICYmIChuLnNldEF0dHJpYnV0ZSgiaHJlZiIsIG4uZ2V0QXR0cmlidXRlKCJocmVmIikucmVwbGFjZSgibW92aWUuZG91YmFuLmNvbSIsICJtLmRvdWJhbi5jb20vbW92aWUiKSksIG4ucmVtb3ZlQXR0cmlidXRlKCJ0YXJnZXQiKSkKICAgICAgICAgICAgICAgICAgfSkpKSwgdCAmJiBzZXRUaW1lb3V0KChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAkKHdpbmRvdykuc2Nyb2xsKGUpCiAgICAgICAgICAgICAgICAgIH0pLCAxNTAwKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0gY2F0Y2ggKG4pIHsKICAgICAgICAgICAgICAgIG8gPSAhMCwgciA9IG4KICAgICAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgaSB8fCBudWxsID09IGwucmV0dXJuIHx8IGwucmV0dXJuKCkKICAgICAgICAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICAgICAgIGlmIChvKSB0aHJvdyByCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KSkub2JzZXJ2ZSh0LCB7CiAgICAgICAgICAgICAgYXR0cmlidXRlczogITAsCiAgICAgICAgICAgICAgY2hpbGRMaXN0OiAhMAogICAgICAgICAgICB9KQogICAgICAgICAgfSkpCiAgICAgICAgfSBlbHNlIElzKC9cdys6MTIzNHxlY3J1b3NcLmdpdGVlXC5pb1wvb25lLykgPyAobG9nKCJPbmXCt+S4u+mhtSIpLCBfJCgoZnVuY3Rpb24oKSB7CiAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiT25lLnBsdWdpbi52ZXJzaW9uIiwgVkVSU0lPTikKICAgICAgICB9KSkpIDogSXMoL1wuYmlsaWJpbGlcLmNvbVwvYmFuZ3VtaVwvcGxheVwvLykgJiYgKGxvZygi5ZOU5ZOp5ZOU5ZOpwrflvbHop4bmkq3mlL7pobUiKSwgXyQoKGZ1bmN0aW9uKCkgewogICAgICAgICAgdmFyIG4gPSAwLAogICAgICAgICAgICBlID0gc2V0SW50ZXJ2YWwoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgIGlmICgkKCIuZXAtaW5mby1pbWFnZSBpbWcsIC5tZWRpYS1jb3ZlciBpbWciKS5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgICB2YXIgdCA9ICQoIi5tZWRpYS10aXRsZSwgLmVwLWluZm8tdGl0bGUiKS5lcSgwKS50ZXh0KCk7CiAgICAgICAgICAgICAgICB0ICYmIChjbGVhckludGVydmFsKGUpLCBpbnNlcnRTZWFyY2hBZGRvbih0LCAiLm1lZGlhLXdyYXBwZXIsIC5lcC1saXN0LXByZS13cmFwcGVyIikpCiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIG4rKyA+IDUwICYmIGNsZWFySW50ZXJ2YWwoZSkKICAgICAgICAgICAgfSksIDIwMCkKICAgICAgICB9KSkpCiAgICAgIH0KICAgICAgbWFrZUJldHRlckFkZG9ucygpLCBjYWxsYmFja1doZW5Eb25lKCksIElzKC9tXC52XC5xcVwuY29tLykgJiYgdXJsRGV0ZWN0b3IoKGZ1bmN0aW9uKCkgewogICAgICAgIGlmIChJcygvdlwucXFcLmNvbVwvKGNvdmVyfHBsYXl8eFwvY292ZXJ8eFwvcGFnZXx4XC9wbGF5fHhcL21cL2NvdmVyfHhcL21cL3BhZ2V8eFwvbVwvcGxheSkvKSkgdmFyIG4gPSAwLAogICAgICAgICAgZSA9ICExLAogICAgICAgICAgdCA9IHNldEludGVydmFsKChmdW5jdGlvbigpIHsKICAgICAgICAgICAgZSB8fCAoZSA9ICEwLCBtYWtlQmV0dGVyQWRkb25zKCksIG4rKyA+IDQwIHx8ICQoIi5vby12aXAiKS5sZW5ndGggPiAwID8gY2xlYXJJbnRlcnZhbCh0KSA6IGUgPSAhMSkKICAgICAgICAgIH0pLCAyNTApCiAgICAgIH0pKSwgXyQoKGZ1bmN0aW9uKCkgewogICAgICAgICQoIiNhMSwgLmRwbGF5ZXIiKS5sZW5ndGggPiAwICYmIGFkZFN0eWxlKCJcbmJvZHk6YWZ0ZXIsXG4jYTEgfiBzY3JpcHQgfiBkaXYsXG4uZHBsYXllciA+ICpbaWRePWFkXVxueyIuY29uY2F0KFB1cmlmeVN0eWxlLCAifVxuIikpCiAgICAgIH0pKQogICAgfQogIH0KCiAgZnVuY3Rpb24gUmV2ZXJzZShuKSB7CiAgICB2YXIgZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzFdID8gYXJndW1lbnRzWzFdIDogIiI7CiAgICByZXR1cm4gbi5zcGxpdCgiIikucmV2ZXJzZSgpLmpvaW4oZSkKICB9CgogIGZ1bmN0aW9uIFJSZXZlcnNlKG4pIHsKICAgIHZhciBlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbMV0gPyBhcmd1bWVudHNbMV0gOiAiIjsKICAgIHJldHVybiBuLnNwbGl0KGUpLnJldmVyc2UoKS5qb2luKCIiKQogIH0KCiAgZnVuY3Rpb24gcmFuZG9tSW50KG4sIGUpIHsKICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAoZSAtIG4gKyAxKSArIG4pCiAgfQoKICBmdW5jdGlvbiBDYWVzYXJFbmNyeXB0KG4pIHsKICAgIHZhciBlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbMV0gPyBhcmd1bWVudHNbMV0gOiBDYWVzYXJTaGlmdCwKICAgICAgdCA9IG4uc3BsaXQoIiIpLnJldmVyc2UoKTsKICAgIHJldHVybiB0Lm1hcCgoZnVuY3Rpb24obikgewogICAgICByZXR1cm4gY2Flc2FyKG4sIGUpCiAgICB9KSkuam9pbigiIikKICB9CgogIGZ1bmN0aW9uIENhZXNhckRlY3J5cHQobikgewogICAgdmFyIGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1sxXSA/IGFyZ3VtZW50c1sxXSA6IENhZXNhclNoaWZ0LAogICAgICB0ID0gbi5zcGxpdCgiIikucmV2ZXJzZSgpOwogICAgcmV0dXJuIHQubWFwKChmdW5jdGlvbihuKSB7CiAgICAgIHJldHVybiBjYWVzYXJEZWMobiwgZSkKICAgIH0pKS5qb2luKCIiKQogIH0KCiAgZnVuY3Rpb24gbG9nKCkgewogICAgaWYgKERFQlVHKSB7CiAgICAgIHZhciBuID0gW107CiAgICAgIG4ucHVzaChQTFVHSU5fSUQgKyAiICAiKTsKICAgICAgZm9yICh2YXIgZSA9IDA7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIG4ucHVzaChhcmd1bWVudHNbZV0pOwogICAgICBjb25zb2xlLmxvZy5hcHBseShjb25zb2xlLCBuKQogICAgfQogIH0KCiAgZnVuY3Rpb24gXyQobikgewogICAgJCgoZnVuY3Rpb24oKSB7CiAgICAgIHRyeSB7CiAgICAgICAgbigpCiAgICAgIH0gY2F0Y2ggKG4pIHsKICAgICAgICBjb25zb2xlLmVycm9yKCJvby5tb3ZpZTogIiArIG4pCiAgICAgIH0KICAgIH0pKQogIH0KCiAgZnVuY3Rpb24gZ2V0S2V5d29yZEZyb21VcmwobiwgZSkgewogICAgdmFyIHQgPSAoZSB8fCBsb2NhdGlvbi5ocmVmKS5tYXRjaChuIHx8IENvbW1vblNlYXJjaEtleXdvcmRSZWdleCk7CiAgICByZXR1cm4gdCA/IEQoKG4gPyB0WzFdIHx8IHRbMl0gOiB0WzJdIHx8IHRbNF0pIHx8ICIiKSA6ICIiCiAgfQoKICBmdW5jdGlvbiBwdXJpZnlLZXl3b3JkKG4pIHsKICAgIHJldHVybiAoUHVyaWZ5S2V5d29yZFJlZ2V4ID8gbi5yZXBsYWNlKFB1cmlmeUtleXdvcmRSZWdleCwgIiIpIDogbikucmVwbGFjZSgvXHMqOlxzKiQvLCAiIikudHJpbSgpCiAgfQoKICBmdW5jdGlvbiBwcmVmaXhDc3MobiwgZSkgewogICAgdmFyIHQsIGksIG8sIHIsIGEgPSBlLmxlbmd0aDsKICAgIGUgKz0gIiAiLCBuID0gKG4gPSAobiA9IG4ucmVwbGFjZSgvXC9cKig/Oig/IVwqXC8pW1xzXFNdKSpcKlwvfFtcclxuXHRdKy9nLCAiIikpLnJlcGxhY2UoL30oXHMqKUAvZywgIn1AIikpLnJlcGxhY2UoL30oXHMqKX0vZywgIn19Iik7CiAgICBmb3IgKHZhciBsID0gMDsgbCA8IG4ubGVuZ3RoIC0gMjsgbCsrKSB0ID0gbltsXSwgaSA9IG5bbCArIDFdLCAiQCIgPT09IHQgJiYgKG8gPSAhMCksIG8gfHwgInsiICE9PSB0IHx8IChyID0gITApLCByICYmICJ9IiA9PT0gdCAmJiAociA9ICExKSwgciB8fCAiQCIgPT09IGkgfHwgIn0iID09PSBpIHx8ICJ9IiAhPT0gdCAmJiAiLCIgIT09IHQgJiYgKCJ7IiAhPT0gdCAmJiAiOyIgIT09IHQgfHwgIW8pIHx8IChuID0gbi5zbGljZSgwLCBsICsgMSkgKyBlICsgbi5zbGljZShsICsgMSksIGwgKz0gYSwgbyA9ICExKTsKICAgIHJldHVybiAwICE9PSBuLmluZGV4T2YoZSkgJiYgMCAhPT0gbi5pbmRleE9mKCJAIikgJiYgKG4gPSBlICsgbiksIG4KICB9CgogIGZ1bmN0aW9uIGFkZFN0eWxlKG4sIGUpIHsKICAgIGUgJiYgKG4gPSBwcmVmaXhDc3MobiwgZSkpLCBuID0gbi5yZXBsYWNlKC9cbitccyovZywgIiAiKTsKICAgIHZhciB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTsKICAgIHQudHlwZSA9ICJ0ZXh0L2NzcyIsIHQuc3R5bGVTaGVldCA/IHQuc3R5bGVTaGVldC5jc3NUZXh0ID0gbiA6IHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobikpLCBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLmFwcGVuZENoaWxkKHQpCiAgfQoKICBmdW5jdGlvbiBmaXhVcmwobikgewogICAgcmV0dXJuIG4ucmVwbGFjZSgvW1w/I10uKy9nLCAiIikKICB9CgogIGZ1bmN0aW9uIGZpeFZpcFVybChuKSB7CiAgICB2YXIgZSA9IEJFVFRFUl9BRERPTlMuZmluZCgoZnVuY3Rpb24oZSkgewogICAgICByZXR1cm4gZS5maXhVcmwgJiYgZS5tYXRjaC50ZXN0KG4pCiAgICB9KSk7CiAgICByZXR1cm4gZSA/ICEwID09PSBlLmZpeFVybCA/IGZpeFVybChuKSA6IGUuZml4VXJsKG4pIDogbgogIH0KCiAgZnVuY3Rpb24gcGFyc2VPb1VybChuLCBlKSB7CiAgICB2YXIgdCwgaSwgbyA9IG4udHJpbSgpLnNwbGl0KC9bXHNAXSsvKSwKICAgICAgciA9IG8uZmlsdGVyKChmdW5jdGlvbihuKSB7CiAgICAgICAgcmV0dXJuIC9odHRwcz86XC9cLy8udGVzdChuKQogICAgICB9KSk7CiAgICBvID0gby5maWx0ZXIoKGZ1bmN0aW9uKG4pIHsKICAgICAgcmV0dXJuICEvaHR0cHM/OlwvXC8vLnRlc3QobikKICAgIH0pKSwgci5mb3JFYWNoKChmdW5jdGlvbihuKSB7CiAgICAgIC9cL1wvbVwufFwvbVwvfFwvXC9tc291Ly50ZXN0KG4pID8gdCA9IG4gOiBpID0gbgogICAgfSkpOwogICAgdmFyIGEgPSAoaXNNb2JpbGUgPyB0IDogaSkgfHwgclswXTsKICAgIGUgJiYgKGEgPSB0b1NlYXJjaFVybChhLCBlKSk7CiAgICB2YXIgbCA9IG8ubGVuZ3RoID4gMCA/IG8uam9pbigiICIpIDogYS5tYXRjaCgvXC9cLyguK1wuKT8oW15cL10rKVwuXHcrXC8vKVsyXS5yZXBsYWNlKC9eKFx3KS8sIChmdW5jdGlvbihuKSB7CiAgICAgIHJldHVybiBuLnRvVXBwZXJDYXNlKCkKICAgIH0pKTsKICAgIHJldHVybiB7CiAgICAgIHVybDogYSwKICAgICAgbmFtZTogbAogICAgfQogIH0KCiAgZnVuY3Rpb24gdG9TZWFyY2hVcmwobiwgZSkgewogICAgcmV0dXJuIG4uaW5jbHVkZXMoIioqIikgPyBuLnJlcGxhY2UoIioqIiwgZSkgOiAvbW92aWVcLmRvdWJhblwuY29tXC90YWcvLnRlc3QobikgPyBuIDogbiArIGUKICB9CgogIGZ1bmN0aW9uIGVuc3VyZUFycmF5KG4pIHsKICAgIHJldHVybiBBcnJheS5pc0FycmF5KG4pID8gbiA6IG4udHJpbSgpLnNwbGl0KC9bXG5cc10qXG4rW1xuXHNdKi8pCiAgfQoKICBmdW5jdGlvbiB0b1VybFJlZ2V4KG4pIHsKICAgIHJldHVybiBuZXcgUmVnRXhwKG4ubWFwKChmdW5jdGlvbihuKSB7CiAgICAgIHJldHVybiBuLnJlcGxhY2UoLy4rXC9cL3xcLy4rL2csICIiKS5yZXBsYWNlKC9cLi9nLCAiXFwuIikKICAgIH0pKS5qb2luKCJ8IikpCiAgfQoKICBmdW5jdGlvbiBwYXVzZVBsYXkoKSB7CiAgICB0cnkgewogICAgICAkKCJ2aWRlbywgYXVkaW8iKS5lYWNoKChmdW5jdGlvbihuLCBlKSB7CiAgICAgICAgZS5wYXVzZSgpLCBlLm11dGVkID0gIm11dGVkIiwgJChlKS5yZW1vdmUoKQogICAgICB9KSkKICAgIH0gY2F0Y2ggKG4pIHsKICAgICAgY29uc29sZS5lcnJvcigib28ubW92aWUgcGxheTogIiArIG4pCiAgICB9CiAgfQoKICBmdW5jdGlvbiBzbWFydENvbGxhcHNlKG4pIHsKICAgIGxvZygic21hcnRDb2xsYXBzZToiLCBuKTsKICAgIHZhciBlID0gMCwKICAgICAgdCA9ICExOwogICAgJChuKS5lYWNoKChmdW5jdGlvbihuLCBpKSB7CiAgICAgIG4gPCBjb2xsYXBzZU51bSA/IG4gPj0gY29sbGFwc2VOdW0gLSAxICYmIChlID0gJChpKS5wb3NpdGlvbigpLnRvcCkgOiB0IHx8IGUgIT09ICQoaSkucG9zaXRpb24oKS50b3AgPyAodCA9ICEwLCAkKGkpLnByZXYoIiIpLmFkZENsYXNzKCJvby1oaWRlIikpIDogIXQgJiYgJChpKS5oYXNDbGFzcygib28tY29sbGFwc2UiKSAmJiAkKGkpLmFkZENsYXNzKCJvby1oaWRlIikKICAgIH0pKQogIH0KCiAgZnVuY3Rpb24gZ2V0VmlwVGFyZ2V0VXJsKCkgewogICAgdmFyIG4gPSBJcyhpc1ZpcFVybFJlZ2V4KSA/IGxvY2F0aW9uLmhyZWYucmVwbGFjZSgvLis9aHR0cC8sICJodHRwIikgOiBsb2NhdGlvbi5ocmVmLnJlcGxhY2UoLyY/XHcrPWh0dHBbXiZdKy8sICIiKS5yZXBsYWNlKC8uK2h0dHAvLCAiaHR0cCIpOwogICAgcmV0dXJuIG4gPSBkZWNvZGVVUkkoZml4VmlwVXJsKG4pIHx8IG4pCiAgfQoKICBmdW5jdGlvbiBpc1ZhbGlkVmlkZW9VcmwobikgewogICAgcmV0dXJuIGlzVmlkZW9VcmxSZWdleC50ZXN0KG4pICYmICFpc0ludmFsaWRTbmlmZlVybFJlZ2V4LnRlc3QobikgJiYgKCFpc0JhZFZpZGVvVXJsUmVnZXgudGVzdChuKSB8fCBEYXRlLm5vdygpIC0gc25pZmZUaW1lc3RhbXAgPiA4ZTMpCiAgfQoKICBmdW5jdGlvbiBzbmlmZlN0YXJ0KG4pIHsKICAgIGlzU25pZmZpbmcgPSAhMCwgc25pZmZUaW1lc3RhbXAgPSBEYXRlLm5vdygpLCBuICYmICgkKCIub28tdmlwLWxpc3QiKS5hZGRDbGFzcygiaXMtc25pZmZpbmciKSwgJCgiLm9vLW5vdGlmaWNhdGlvbiIpLnJlbW92ZSgpKQogIH0KCiAgZnVuY3Rpb24gc25pZmZEb25lKCkgewogICAgaXNTbmlmZmluZyA9ICExLCAkKCIub28tdmlwLWxpc3QiKS5yZW1vdmVDbGFzcygiaXMtc25pZmZpbmciKQogIH0KCiAgZnVuY3Rpb24gc25pZmZTdWNjZXNzKG4pIHsKICAgIGxvZygi4pyUIHNuaWZmU3VjY2VzczoiLCBuKSwgc25pZmZEb25lKCksICQoIi5vby1pZnJhbWVzIikuZW1wdHkoKSwgJCgiLm9vLW5vdGlmaWNhdGlvbiIpLnJlbW92ZSgpLCAkKCIub28tdmlwLWxpc3QiKS5hZnRlcignPGRpdiBjbGFzcz0ib28tbm90aWZpY2F0aW9uIG9vLXN1Y2Nlc3MiPuino+aekOaIkOWKn++8jOWXheaOouWIsOaSreaUvuWcsOWdgO+8mjxicj48Y29kZT4nLmNvbmNhdChuLCAiPC9jb2RlPjwvZGl2PiIpKQogIH0KCiAgZnVuY3Rpb24gc25pZmZGYWlsKG4pIHsKICAgIGxvZygiw5cgc25pZmZGYWlsIiksIHNuaWZmRG9uZSgpLCAkKCIub28tbm90aWZpY2F0aW9uIikucmVtb3ZlKCksICQoIi5vby12aXAtbGlzdCIpLmFmdGVyKCc8ZGl2IGNsYXNzPSJvby1ub3RpZmljYXRpb24gb28td2FybmluZyI+6Kej5p6Q5aSx6LSl77yMJy5jb25jYXQobiA/ICIiIDogIuWPr+S7peWwneivleWFtuWug+ino+aekOa6kO+8jOS5nyIsICLlj6/ku6XogIPomZHlnKjlhbblroPmraPniYjnvZHnq5nkuIrop6PmnpDvvIzmiJbkvb/nlKjmkJzntKLmupDmkJzntKLlnKjnur/op4LnnIs8L2Rpdj4iKSkKICB9CgogIGZ1bmN0aW9uIGhpa2VyU25pZmYoc25pZmZUaWNrSWQpIHsKICAgIGlmIChzbmlmZlRpY2tJZCA9PT0gc25pZmZUaWNrKSB7CiAgICAgIGxvZygiaGlrZXJTbmlmZiIpOwogICAgICB2YXIgcmVzb3VyY2UgPSBldmFsKHdpbmRvdy5meV9icmlkZ2VfYXBwLmdldE5ldHdvcmtSZWNvcmRzKCkpOwogICAgICBpZiAocmVzb3VyY2UgPSByZXNvdXJjZS5maWx0ZXIoKGZ1bmN0aW9uKG4pIHsKICAgICAgICAgIHJldHVybiBuLnRpbWVzdGFtcCA+IHNuaWZmVGltZXN0YW1wICYmIC92aWRlby9pLnRlc3Qobi5tZWRpYVR5cGUubmFtZSkgJiYgaXNWYWxpZFZpZGVvVXJsKG4udXJsKQogICAgICAgIH0pKSwgREVCVUcpIHsKICAgICAgICB2YXIgbG9nSW5mbyA9ICJDb3VudDogIi5jb25jYXQocmVzb3VyY2UubGVuZ3RoLCAiICgiKS5jb25jYXQoKG5ldyBEYXRlKS50b0lTT1N0cmluZygpLCAiKTxicj4iKSArIHJlc291cmNlLm1hcCgoZnVuY3Rpb24obiwgZSkgewogICAgICAgICAgcmV0dXJuICIiLmNvbmNhdChlICsgMSwgIiAtICIpLmNvbmNhdChuLm1lZGlhVHlwZS5uYW1lLCAiKCIpLmNvbmNhdChuLm1lZGlhVHlwZS50eXBlLCAiKSAtICIpLmNvbmNhdChuLnVybCkKICAgICAgICB9KSkuam9pbigiPGJyPiIpOwogICAgICAgICQoIi5vby1zb3VyY2VzIikuaHRtbChsb2dJbmZvKQogICAgICB9CiAgICAgIGlmICgwICE9PSByZXNvdXJjZS5sZW5ndGgpIHsKICAgICAgICBpZiAoaXNTbmlmZmluZykgewogICAgICAgICAgdmFyIHJlc291cmNlVXJsID0gcmVzb3VyY2VbMF0udXJsOwogICAgICAgICAgc25pZmZTdWNjZXNzKHJlc291cmNlVXJsKSwgd2luZG93LmZ5X2JyaWRnZV9hcHAucGxheVZpZGVvKHJlc291cmNlVXJsKQogICAgICAgIH0KICAgICAgfSBlbHNlIGlzU25pZmZpbmcgJiYgc2V0VGltZW91dCgoZnVuY3Rpb24oKSB7CiAgICAgICAgaGlrZXJTbmlmZihzbmlmZlRpY2tJZCkKICAgICAgfSksIDEwMCkKICAgIH0KICB9CgogIGZ1bmN0aW9uIG1peGlhU25pZmYobikgewogICAgaWYgKG4gPT09IHNuaWZmVGljaykgewogICAgICBsb2coIm1peGlhU25pZmYiKTsKICAgICAgdmFyIGUgPSBbXSwKICAgICAgICB0ID0gd2luZG93Lm14X2Jyb3dzZXJfb2JqLmdldHdlYmxvZ3MoImh0dHAiKTsKICAgICAgaWYgKCJlcnJvciIgIT09IHQgJiYgKGUgPSAoZSA9IHQudHJpbSgpLnNwbGl0KC9ccypcbltcblxzXSovKSkuZmlsdGVyKChmdW5jdGlvbihuKSB7CiAgICAgICAgICByZXR1cm4gaXNWYWxpZFZpZGVvVXJsKG4pCiAgICAgICAgfSkpKSwgREVCVUcpIHsKICAgICAgICB2YXIgaSA9ICJDb3VudDogIi5jb25jYXQoZS5sZW5ndGgsICIgKCIpLmNvbmNhdCgobmV3IERhdGUpLnRvSVNPU3RyaW5nKCksICIpPGJyPiIpICsgZS5tYXAoKGZ1bmN0aW9uKG4sIGUpIHsKICAgICAgICAgIHJldHVybiAiIi5jb25jYXQoZSArIDEsICIgLSAiKS5jb25jYXQobikKICAgICAgICB9KSkuam9pbigiPGJyPiIpOwogICAgICAgICQoIi5vby1zb3VyY2VzIikuaHRtbChpKQogICAgICB9CiAgICAgIGlmICgwICE9PSBlLmxlbmd0aCkgewogICAgICAgIGlmIChpc1NuaWZmaW5nKSB7CiAgICAgICAgICB2YXIgbyA9IGVbMF07CiAgICAgICAgICBzbmlmZlN1Y2Nlc3MobyksIHdpbmRvdy5teF9icm93c2VyX29iai5wbGF5dmlkZW8obywgbykKICAgICAgICB9CiAgICAgIH0gZWxzZSBpc1NuaWZmaW5nICYmIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCkgewogICAgICAgIG1peGlhU25pZmYobikKICAgICAgfSksIDEwMCkKICAgIH0KICB9CgogIGZ1bmN0aW9uIHNuaWZmKG4pIHsKICAgIHZhciBlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbMV0gJiYgYXJndW1lbnRzWzFdOwogICAgaWYgKGxvZygic25pZmY6IiwgcGxheWVyVGl0bGUpLCBzbmlmZlN0YXJ0KGUpLCBpc0FsbG93SGlrZXJTbmlmZikgaGlrZXJTbmlmZihuKTsKICAgIGVsc2UgewogICAgICBpZiAoIWlzQWxsb3dNaXhpYVNuaWZmKSByZXR1cm4gdm9pZCBzbmlmZkRvbmUoKTsKICAgICAgbWl4aWFTbmlmZihuKQogICAgfQogICAgZSA/IHNuaWZmVmlwKCkgOiBzZXRUaW1lb3V0KChmdW5jdGlvbigpIHsKICAgICAgbiA9PT0gc25pZmZUaWNrICYmIHNuaWZmRmFpbChlKQogICAgfSksIDEzZTMpCiAgfQoKICBmdW5jdGlvbiBzbmlmZlZpcCgpIHsKICAgIHZhciBuID0gZ2V0VmlwUGxheWVyKCk7CiAgICBuLmxlbmd0aCA+IDAgJiYgbi5lbXB0eSgpLmFwcGVuZCgnPGRpdiBjbGFzcz0ib28tcGxheWVyLWJveCI+PGRpdiBjbGFzcz0ib28tcGxheWVyLWJnIj48L2Rpdj48L2Rpdj4nKSwgcGF1c2VQbGF5KCksIDAgPT09ICQoIi5vby1pZnJhbWVzIikubGVuZ3RoICYmICQoImJvZHkiKS5hcHBlbmQoJzxkaXYgY2xhc3M9Im9vLWlmcmFtZXMiPjwvZGl2PicpLCBnb1NuaWZmKCkKICB9CgogIGZ1bmN0aW9uIGdvU25pZmYoKSB7CiAgICB2YXIgbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzBdID8gYXJndW1lbnRzWzBdIDogMDsKICAgIGlmIChpc1NuaWZmaW5nKSB7CiAgICAgIHZhciBlID0gVklQX1VSTFNbbl07CiAgICAgIGlmIChsb2coIuOAkCIuY29uY2F0KG4sICLjgJFnb1NuaWZmOiIpLCBlKSwgZSkgewogICAgICAgIHZhciB0ID0gZ2V0VmlwVGFyZ2V0VXJsKCksCiAgICAgICAgICBpID0gZS51cmwgKyB0OwogICAgICAgIGxvZygic25pZmY6ICIgKyBpKSwgJCgiLm9vLWlmcmFtZXMiKS5hcHBlbmQoJzxpZnJhbWUgc3JjPSInLmNvbmNhdChpLCAnIj48L2lmcmFtZT4nKSksIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCkgewogICAgICAgICAgbG9nKCJyZW1vdmUgaWZyYW1lIiksICQoIi5vby1pZnJhbWVzID4gaWZyYW1lIikuZXEoMCkucmVtb3ZlKCksIG4gPT09IFZJUF9VUkxTLmxlbmd0aCAmJiBzbmlmZkZhaWwoITApCiAgICAgICAgfSksIDFlNCksIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCkgewogICAgICAgICAgZ29TbmlmZihuICsgMSkKICAgICAgICB9KSwgbiA8IDUgPyA1MCA6IE1hdGgubWluKDEwMCArIDUwICogbiwgMWUzKSkKICAgICAgfQogICAgfQogIH0KCiAgZnVuY3Rpb24gZ2V0VmlwUGxheWVyKCkgewogICAgdmFyIG4gPSAkKFBsYXllclNlbGVjdG9yKS5lcSgwKTsKICAgIHJldHVybiAwID09PSBuLmxlbmd0aCAmJiAobiA9ICQoIiNwbGF5ZXIsIC5wbGF5ZXIiKS5lcSgwKSksIG4KICB9CgogIGZ1bmN0aW9uIGluc2VydFZpcFNvdXJjZShuKSB7CiAgICB2YXIgZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzFdID8gYXJndW1lbnRzWzFdIDogImFmdGVyIiwKICAgICAgdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzJdID8gYXJndW1lbnRzWzJdIDogMDsKICAgIGlmICghKCQoIi5vby12aXAiKS5sZW5ndGggPiAwIHx8IHQgPiAyMCkpIHsKICAgICAgdmFyIGkgPSAkKG4pOwogICAgICBpZiAoMCAhPT0gaS5sZW5ndGgpIHsKICAgICAgICBsb2coImluc2VydFZpcFNvdXJjZSIpLCBhZGRTdHlsZSgiXG4ub28tdmlwIHtcbiAgcGFkZGluZy1ib3R0b206IDAuNWVtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpO1xuICBib3JkZXItcmFkaXVzOiA1cHg7XG4gIHdpZHRoOiAxMDAlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4ub28tdmlwICsgLm9vLXZpcCwgLm9vLWlmcmFtZXMgeyIuY29uY2F0KFB1cmlmeVN0eWxlLCAifVxuXG4ub28taWZyYW1lcyA+IGlmcmFtZSB7XG4gIG1heC13aWR0aDogMzMuMyU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cblxuLm9vLXZpcC1wYW5lbCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgcGFkZGluZzogMTBweCAxMHB4IDA7XG4gIGZvbnQtc2l6ZTogMTVweDtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbi5vby12aXAtcGFuZWwuaXMtc2V0dGluZyB7XG4gIHBhZGRpbmctYm90dG9tOiAwLjVlbTtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoNzMsIDgwLCA4NywgMC4xNSk7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2JhKDczLCA4MCwgODcsIDAuMTUpO1xuICBmb250LXNpemU6IDAuOTVlbTtcbiAgb3BhY2l0eTogMC44O1xufVxuXG4ub28tdmlwLXBhbmVsLmlzLXNldHRpbmcgYSB7XG4gIGNvbG9yOiAjMWM3ZWQ2O1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIG1hcmdpbi1yaWdodDogMWVtO1xufVxuXG4ub28tdmlwLXBhbmVsLmlzLXNldHRpbmcgLm9vLW5hdi1saW5rcyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kO1xuICB3aWR0aDogMTAwJTtcbn1cblxuLm9vLXZpcC1wYW5lbC5pcy1zZXR0aW5nOm5vdCguaXMtb3Blbikge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4ub28tdmlwLXRpdGxlIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGNvbG9yOiAjMjU3OTQyO1xuICB3aWR0aDogMTAwJTtcbn1cblxuLm9vLXZpcC1zbWFsbCB7XG4gIGZvbnQtc2l6ZTogMC43NWVtO1xuICBtYXJnaW46IDAgMTBweDtcbiAgY29sb3I6ICNjZWQ0ZGE7XG59XG5cbi5vby12aXAtdGl0bGUsIC5vby12aXAtc2lnbiB7XG4gIHBhZGRpbmc6IDAuNWVtO1xufVxuXG4ub28tdmlwLXRpdGxlLXRleHQsIC5vby12aXAtc2lnbiB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLm9vLXZpcC1wYW5lbCwgLm9vLXZpcC1saXN0IHtcbiAgaGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7XG59XG5cbi5vby12aXAtc2lnbiB7XG4gIG9wYWNpdHk6IDAuMjU7XG4gIG1hcmdpbi1yaWdodDogMWVtO1xuICBtaW4td2lkdGg6IDVlbTtcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gIGFuaW1hdGlvbjogb28tY29sb3ItY2hhbmdlLW9wYWNpdHkgNXMgbm9ybWFsIGluZmluaXRlIGVhc2UtaW4tb3V0O1xufVxuXG5Aa2V5ZnJhbWVzIG9vLWNvbG9yLWNoYW5nZS1vcGFjaXR5IHtcbiAgMCUgICB7IG9wYWNpdHk6IDAuMjU7IH1cbiAgNTAlIHsgb3BhY2l0eTogMC40NTsgfVxuICAxMDAlIHsgb3BhY2l0eTogMC4yNTsgfVxufVxuXG4ub28tdmlwLWxpc3Qge1xuICBwYWRkaW5nOiAwLjVlbTtcbiAgbGV0dGVyLXNwYWNpbmc6IDFweDtcbn1cblxuLm9vLXZpcC1saXN0IC5vby12aXAtaXRlbSB7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVmNmZjO1xuICBjb2xvcjogIzFkNzJhYTtcbiAgbWFyZ2luOiA0cHg7XG4gIHBhZGRpbmc6IDAuNWVtIDAuNWVtIDAuMzVlbTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBmb250LXNpemU6IDE0cHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjI7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB0cmFuc2l0aW9uOiBhbGwgMC4yNXM7XG59XG5cbi5vby12aXAtbGlzdC5pcy1zbmlmZmluZyAub28tdmlwLWl0ZW0ge1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICBvcGFjaXR5OiAwLjU7XG59XG5cbi5vby12aXAtbGlzdC5pcy1zbmlmZmluZyAub28tc25pZmYge1xuICBhbmltYXRpb246IG9vLWJlYXQgMC4yNXMgaW5maW5pdGUgYWx0ZXJuYXRlO1xufVxuXG4ub28tdmlwLWxpc3QgLm9vLXZpcC1pdGVtLm9vLXNuaWZmIHtcbiAgY29sb3I6ICMwOTkyNjg7XG59XG5cbi5vby12aXAtbGlzdC5pcy1zbmlmZmluZyAub28tc25pZmYgLm9vLXZpcC13ZWlnaHQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDk5MjY4O1xufVxuXG4ub28tbm90aWZpY2F0aW9uIHtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBwYWRkaW5nOiAxZW0gMmVtIDFlbSAxZW07XG4gIG1hcmdpbjogMC41ZW07XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBmb250LXNpemU6IDAuOWVtO1xufVxuXG4ub28tbm90aWZpY2F0aW9uLm9vLXdhcm5pbmcge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZkZDU3O1xuICBjb2xvcjogcmdiYSgwLDAsMCwwLjcpO1xufVxuXG4ub28tbm90aWZpY2F0aW9uLm9vLXN1Y2Nlc3Mge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDhjNzc0O1xuICBjb2xvcjogI2ZmZjtcbn1cblxuQGtleWZyYW1lcyBvby1iZWF0e1xuXHR0byB7IHRyYW5zZm9ybTogc2NhbGUoMS40KTsgfVxufVxuXG4ub28tY29sbGFwc2Uge1xuICBtaW4td2lkdGg6IDJlbTtcbn1cblxuLm9vLXZpcC13ZWlnaHQtYmcsIC5vby12aXAtd2VpZ2h0IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206IDA7XG4gIGhlaWdodDogMnB4O1xuICBsZWZ0OiAtMXB4O1xuICByaWdodDogLTFweDtcbiAgdHJhbnNpdGlvbjogYWxsIDAuNXM7XG59XG5cbi5vby12aXAtd2VpZ2h0LWJnIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogLTFweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2NlZDRkYTtcbn1cblxuLm9vLXZpcC13ZWlnaHQtYmcuaXMtZnVsbCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwY2E2Nzg7XG59XG5cbi5vby12aXAtd2VpZ2h0IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzJiOGEzZTtcbiAgYm9yZGVyLXJhZGl1czogMXB4O1xufVxuXG4ub28tdmlwLWxpc3QgLm9vLXZpcC1pdGVtOmhvdmVyIC5vby12aXAtd2VpZ2h0LWJnLCAub28tdmlwLWxpc3QgLm9vLXZpcC1pdGVtOmhvdmVyIC5vby12aXAtd2VpZ2h0LCAub28tdmlwLWxpc3QgLm9vLXZpcC1pdGVtLmlzLWFjdGl2ZSAub28tdmlwLXdlaWdodC1iZywgLm9vLXZpcC1saXN0IC5vby12aXAtaXRlbS5pcy1hY3RpdmUgLm9vLXZpcC13ZWlnaHQge1xuICBvcGFjaXR5OiAwO1xufVxuXG4ub28tdmlwLWxpc3QgLm9vLXZpcC1pdGVtOmhvdmVyLCAub28tdmlwLWxpc3QgLm9vLXZpcC1pdGVtOmFjdGl2ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMxZDcyYWE7XG4gIGNvbG9yOiAjZWVmNmZjICFpbXBvcnRhbnQ7XG59XG5cbi5vby12aXAtbGlzdCAub28tdmlwLWl0ZW0uaXMtZ29vZCB7XG4gIGNvbG9yOiByZ2IoMTQsIDk1LCAxNDkpO1xufVxuXG4ub28tdmlwLWxpc3QgLm9vLXZpcC1pdGVtLmlzLWJhZCB7XG4gIG9wYWNpdHk6IDAuODU7XG59XG5cbi5vby12aXAtbGlzdCAub28tdmlwLWl0ZW0uaXMtYmFkOmhvdmVyLCAub28tdmlwLWxpc3QgLm9vLXZpcC1pdGVtLmlzLWJhZDphY3RpdmUge1xuICBvcGFjaXR5OiAwLjk1O1xufVxuXG4ub28tdmlwLWxpc3QgLm9vLXZpcC1pdGVtLmlzLWFjdGl2ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMyYjhhM2U7XG4gIGNvbG9yOiAjZWVmNmZjO1xufVxuXG4ub28tdmlwLWxpc3QuaXMtb3BlbiAub28tY29sbGFwc2UsXG4ub28tc291cmNlcy5pcy1vcGVuIC5vby1jb2xsYXBzZSB7XG4gIHRyYW5zZm9ybTpzY2FsZVgoLTEpO1xufVxuXG4ub28tdmlwLWxpc3Q6bm90KC5pcy1vcGVuKSAub28taGlkZSB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cblxuLm9vLXZpcC10aXAge1xuICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSg3MywgODAsIDg3LCAwLjE1KTtcbiAgcGFkZGluZzogMWVtIDFlbSAwLjVlbTtcbiAgZm9udC1zaXplOiAwLjg1ZW07XG4gIGNvbG9yOiAjMzQzYTQwO1xuICBvcGFjaXR5OiAxO1xuICBhbmltYXRpb246IG9vLWNvbG9yLWNoYW5nZS1saWdodCA1cyBub3JtYWwgZm9yd2FyZHMgZWFzZS1pbi1vdXQ7XG59XG5cbi5vby12aXAtdGlwLmlzLXdhcm5pbmcge1xuICBjb2xvcjogI2U4NTkwYztcbiAgYW5pbWF0aW9uOiBvby1jb2xvci1jaGFuZ2UtbGlnaHQyIDVzIG5vcm1hbCBmb3J3YXJkcyBlYXNlLWluLW91dDtcbn1cblxuQGtleWZyYW1lcyBvby1jb2xvci1jaGFuZ2UtbGlnaHQge1xuICAwJSAgIHsgY29sb3I6ICMzNDNhNDA7IG9wYWNpdHk6IDE7IH1cbiAgMTAwJSB7IGNvbG9yOiAjOTc5YWFiOyBvcGFjaXR5OiAwLjg1OyB9XG59XG5cbkBrZXlmcmFtZXMgb28tY29sb3ItY2hhbmdlLWxpZ2h0MiB7XG4gIDAlICAgeyBjb2xvcjogI2U4NTkwYzsgb3BhY2l0eTogMTsgfVxuICAxMDAlIHsgY29sb3I6ICNmZDdlMTQ7IG9wYWNpdHk6IDAuODU7IH1cbn1cblxuLm9vLXZpcC10aXAgc3Ryb25nIHtcbiAgbWFyZ2luOiAwIDAuNWVtO1xuICBmb250LXNpemU6IDEuMjVlbTtcbiAgb3BhY2l0eTogMC44O1xufVxuXG4ub28tdmlwLXRpcCBzdHJvbmcgYSwgLm9vLXZpcC10aXAgc3Ryb25nIGE6dmlzaXRlZHtcbiAgY29sb3I6ICMyMjhiZTY7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuXG4ub28tdmlwLXdhcm5pbmcge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTY3NzAwO1xuICBwYWRkaW5nOiAwLjVlbSAxZW07XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1zaXplOiAwLjg1ZW07XG59XG5cbi5vby12aXAtd2FybmluZyBhIHtcbiAgY29sb3I6ICNmZmYgIWltcG9ydGFudDtcbn1cblxuLm9vLXBsYXllci1iZyB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDA7XG4gIHJpZ2h0OiAwO1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChodHRwczovL3AucHN0YXRwLmNvbS9vcmlnaW4vZmY0NjAwMDBmNTMwNjgzMDlkNzcpO1xuICB6LWluZGV4OiAyMTQ3NDgzNjQ2O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cbiIpKTsKICAgICAgICB2YXIgbyA9IERFQlVHIHx8IGlzTW9iaWxlID8gJzxkaXYgY2xhc3M9Im9vLXZpcC1wYW5lbCBpcy1zZXR0aW5nIj5cbjxkaXYgY2xhc3M9Im9vLW5hdi1saW5rcyI+XG4gIDxhIGhyZWY9Imh0dHBzOi8vZ3JlYXN5Zm9yay5vcmcvemgtQ04vc2NyaXB0cy8zOTMyODQiIHRhcmdldD0iX2JsYW5rIj7msrnnjLTlnLDlnYA8L2E+PGEgaHJlZj0iaHR0cHM6Ly9naXRlZS5jb20vZWNydW9zL29vIiB0YXJnZXQ9Il9ibGFuayI+5Luj56CB5LuT5bqTPC9hPjxhIGhyZWY9Imh0dHBzOi8vZWNydW9zLmdpdGVlLmlvL29uZS8iIHRhcmdldD0iX2JsYW5rIj5PbmXkuLvpobU8L2E+XG48L2Rpdj5cbjwvZGl2PicgOiAiIjsKICAgICAgICBpLmVxKDApW2VdKCdcbjxkaXYgY2xhc3M9Im9vLXZpcCI+XG4gIDxkaXYgY2xhc3M9Im9vLXZpcC1wYW5lbCI+XG4gICAgPGRpdiBjbGFzcz0ib28tdmlwLXRpdGxlIj48c3BhbiBjbGFzcz0ib28tdmlwLXRpdGxlLXRleHQiPlZJUCDop6PmnpA8c3BhbiBjbGFzcz0ib28tdmlwLXNtYWxsIj52Jy5jb25jYXQoVkVSU0lPTiwgJzwvc3Bhbj48L3NwYW4+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz0ib28tdmlwLXNpZ24iPicpLmNvbmNhdChPT19TSUdOLCAiPC9kaXY+XG4gIDwvZGl2PiIpLmNvbmNhdChvLCAnXG4gIDxkaXYgY2xhc3M9Im9vLXZpcC1saXN0Ij5cbicpLmNvbmNhdChpc0FsbG93U25pZmYgPyAnPHNwYW4gY2xhc3M9Im9vLXZpcC1pdGVtIG9vLW5vcm1hbCBvby1zbmlmZiI+Jy5jb25jYXQoc25pZmZOYW1lLCAnPHNwYW4gY2xhc3M9Im9vLXZpcC13ZWlnaHQiIHN0eWxlPSJ3aWR0aDoxMDAlOyI+PC9zcGFuPjwvc3Bhbj4nKSA6ICIiLCAiXG4iKS5jb25jYXQoVklQX1VSTFMubWFwKChmdW5jdGlvbihuLCBlKSB7CiAgICAgICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPSInICsgKCJvby12aXAtaXRlbSIgKyAoSXMoaXNWaXBVcmxSZWdleCkgfHwgIWlzVXNlRGVmYXVsdFZpcFVybHMgPyAiIiA6IGlzTW9iaWxlICYmIG4uaXNNIHx8ICFpc01vYmlsZSAmJiBuLndlaWdodCA+PSAxID8gIiBpcy1nb29kIiA6ICIgaXMtYmFkIikpICsgJyIgX29vS2V5PSInICsgQ2Flc2FyRW5jcnlwdChTdHJpbmcoZSkpICsgJyIgX29vV2VpZ2h0PSInICsgbi53ZWlnaHQudG9GaXhlZCgyKSArICciPicgKyBuLm5hbWUgKyAnPHNwYW4gY2xhc3M9Im9vLXZpcC13ZWlnaHQtYmcnICsgKG4uaXNNID8gIiBpcy1mdWxsIiA6ICIiKSArICciPjwvc3Bhbj48c3BhbiBjbGFzcz0ib28tdmlwLXdlaWdodCIgc3R5bGU9IndpZHRoOicgKyBuLndlaWdodCAvIG1heFZpcFdlaWdodCAqIDEwMCArICclOyI+PC9zcGFuPjwvc3Bhbj4nCiAgICAgICAgfSkpLmpvaW4oIlxuIikpLmNvbmNhdChWSVBfVVJMUy5sZW5ndGggPiBjb2xsYXBzZU51bSA/ICc8c3BhbiBjbGFzcz0ib28tdmlwLWl0ZW0gb28tbm9ybWFsIG9vLWNvbGxhcHNlIj7inqI8L3NwYW4+JyA6ICIiLCAiXG4gIDwvZGl2PlxuICAiKS5jb25jYXQoaXNNb2JpbGUgPyAnPGRpdiBjbGFzcz0ib28tdmlwLXRpcCcuY29uY2F0KGlzQWxsb3dTbmlmZiA/ICIiIDogIiBpcy13YXJuaW5nIiwgJyI+6YWN5ZCI5rWP6KeI5Zmo55qEPHN0cm9uZz7lub/lkYrmi6bmiKo8L3N0cm9uZz7lkow8c3Ryb25nPuWXheaOouaSreaUvjwvc3Ryb25nPuWKn+iDveS9v+eUqO+8jOS9k+mqjOabtOS9s+OAgicpLmNvbmNhdChpc0hpa2VyID8gIiIgOiAnPGJyPuWPr+iHquihjOaLpuaIquino+aekOe9keermeeahOWbvueJh+W5v+WRiu+8jOaIluiuoumYhSA8c3Ryb25nPjxhIGhyZWY9Imh0dHBzOi8vZ2l0ZWUuY29tL2VjcnVvcy9vby9yYXcvbWFzdGVyL3NjcmlwdHMvb28ubW92aWUuYWRibG9jay50eHQiIHRhcmdldD0iX2JsYW5rIj5vby5tb3ZpZSBhZGJsb2NrPC9hPjwvc3Ryb25nPiDmi6bmiKrop4TliJnjgIInLCAiPC9kaXY+IikgOiAiIiwgIlxuPC9kaXY+XG4iKSksIHNtYXJ0Q29sbGFwc2UoIi5vby12aXAtaXRlbSIpOwogICAgICAgIHZhciByID0gITE7CiAgICAgICAgdSgpOwogICAgICAgIHZhciBhID0gMCwKICAgICAgICAgIGwgPSBzZXRJbnRlcnZhbCgoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHUoKSwgYSsrID4gMjUgJiYgY2xlYXJJbnRlcnZhbChsKQogICAgICAgICAgfSksIDUwMCkKICAgICAgfSBlbHNlIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCkgewogICAgICAgIGluc2VydFZpcFNvdXJjZShuLCBlLCB0ICsgMSkKICAgICAgfSksIDI1MCkKICAgIH0KCiAgICBmdW5jdGlvbiBzKG4pIHsKICAgICAgJCgiLm9vLW5vdGlmaWNhdGlvbiIpLnJlbW92ZSgpOwogICAgICB2YXIgZSA9IGdldFZpcFBsYXllcigpOwogICAgICBpZiAoMCAhPT0gZS5sZW5ndGgpIHsKICAgICAgICBwYXVzZVBsYXkoKSwgZS5lbXB0eSgpLmFwcGVuZCgnPGRpdiBjbGFzcz0ib28tcGxheWVyLWJveCI+PGRpdiBjbGFzcz0ib28tcGxheWVyLWJnIj48L2Rpdj48aWZyYW1lIGlkPSJvby1wbGF5ZXIiIHN0eWxlPSInLmNvbmNhdCgid2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTsgYm9yZGVyOiBub25lOyBvdXRsaW5lOiBub25lOyBtYXJnaW46IDA7IHBhZGRpbmc6IDA7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgei1pbmRleDogMjE0NzQ4MzY0NzsgbGVmdDogMDsiLCAnIiAnKS5jb25jYXQoJyB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBhbGxvd2Z1bGxzY3JlZW49InRydWUiIGFsbG93dHJhbnNwYXJlbmN5PSJ0cnVlIiBmcmFtZWJvcmRlcj0iMCIgc2Nyb2xsaW5nPSJubyInLCAnIHNyYz0iJykuY29uY2F0KG4sICciPjwvaWZyYW1lPjwvZGl2PicpKQogICAgICB9IGVsc2UgbG9jYXRpb24uaHJlZiA9IG4KICAgIH0KCiAgICBmdW5jdGlvbiBjKG4sIGUpIHsKICAgICAgdmFyIHQgPSBuICsgZ2V0VmlwVGFyZ2V0VXJsKCk7CiAgICAgIGxvZygiY2xpY2s6ICIgKyB0KSwgJCgiLm9vLXZpcC1pdGVtIikucmVtb3ZlQ2xhc3MoImlzLWFjdGl2ZSIpLCAkKGUpLmFkZENsYXNzKCJpcy1hY3RpdmUiKSwgTm9Jbm5lclZpcFVybFJlZ2V4LnRlc3QobikgfHwgL2h0dHA6Ly50ZXN0KG4pID8gKHBhdXNlUGxheSgpLCAkKCIjb28tcGxheWVyIikucmVtb3ZlKCksIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCkgewogICAgICAgIHdpbmRvdy5vcGVuKHQsICJfYmxhbmsiKQogICAgICB9KSwgMTAwKSkgOiBzKHQpCiAgICB9CgogICAgZnVuY3Rpb24gcChuLCBlKSB7CiAgICAgICQobikuY2xpY2soKGZ1bmN0aW9uKG4pIHsKICAgICAgICByIHx8IChyID0gITAsIG4ucHJldmVudERlZmF1bHQoKSwgZSh0aGlzKSwgc2V0VGltZW91dCgoZnVuY3Rpb24oKSB7CiAgICAgICAgICByID0gITEKICAgICAgICB9KSwgNTAwKSkKICAgICAgfSkpCiAgICB9CgogICAgZnVuY3Rpb24gdSgpIHsKICAgICAgcCgiLm9vLXZpcC1pdGVtOm5vdCgub28tbm9ybWFsKSIsIChmdW5jdGlvbihuKSB7CiAgICAgICAgJCgiLm9vLXZpcC1saXN0LmlzLXNuaWZmaW5nIikubGVuZ3RoID4gMCB8fCAoc25pZmZEb25lKCksIHNuaWZmKCsrc25pZmZUaWNrKSwgYyhWSVBfVVJMU1tDYWVzYXJEZWNyeXB0KCQobikuYXR0cigiX29vS2V5IikpXS51cmwsIG4pKQogICAgICB9KSksIHAoIi5vby12aXAtbGlzdCAub28tY29sbGFwc2UiLCAoZnVuY3Rpb24obikgewogICAgICAgICQobikucGFyZW50KCIub28tdmlwLWxpc3QiKS50b2dnbGVDbGFzcygiaXMtb3BlbiIpCiAgICAgIH0pKSwgcCgiLm9vLXZpcC1saXN0IC5vby1zbmlmZiIsIChmdW5jdGlvbigpIHsKICAgICAgICBzbmlmZigrK3NuaWZmVGljaywgITApCiAgICAgIH0pKSwgcCgiLm9vLXZpcC1zaWduIiwgKGZ1bmN0aW9uKG4pIHsKICAgICAgICBERUJVRyB8fCBpc01vYmlsZSA/ICQobikucGFyZW50KCIub28tdmlwLXBhbmVsIikuc2libGluZ3MoIi5pcy1zZXR0aW5nIikudG9nZ2xlQ2xhc3MoImlzLW9wZW4iKSA6IGxvY2F0aW9uLmhyZWYgPSAiaHR0cHM6Ly9naXRlZS5jb20vZWNydW9zL29vIgogICAgICB9KSksIHAoIi5vby12aXAtdGl0bGUtdGV4dCIsIChmdW5jdGlvbihuKSB7CiAgICAgICAgaXNNb2JpbGUgPyAkKG4pLnBhcmVudCgiLm9vLXZpcC1wYW5lbCIpLnNpYmxpbmdzKCIuaXMtc2V0dGluZyIpLnRvZ2dsZUNsYXNzKCJpcy1vcGVuIikgOiBsb2NhdGlvbi5ocmVmID0gImh0dHBzOi8vZ3JlYXN5Zm9yay5vcmcvemgtQ04vc2NyaXB0cy8zOTMyODQiCiAgICAgIH0pKQogICAgfQogIH0KCiAgZnVuY3Rpb24gY2FsbGJhY2tXaGVuRG9uZSgpIHsKICAgIF8kKChmdW5jdGlvbigpIHsKICAgICAgSFRNTC5zZXRBdHRyaWJ1dGUoUExVR0lOX0FUVFIsIFBMVUdJTl9JRCksIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCkgewogICAgICAgIEhUTUwucmVtb3ZlQXR0cmlidXRlKFBMVUdJTl9BVFRSKQogICAgICB9KSwgM2UzKQogICAgfSkpCiAgfQoKICBmdW5jdGlvbiBnZXRTZWFyY2hTb3VyY2VzSHRtbChuKSB7CiAgICB2YXIgZSA9ICEoYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbMV0pIHx8IGFyZ3VtZW50c1sxXSwKICAgICAgdCA9IEhyZWYubWF0Y2goL1wvXC8oW15cL10rKS8pWzFdOwogICAgcmV0dXJuIOaQnOe0oua6kC5tYXAoKGZ1bmN0aW9uKGUpIHsKICAgICAgcmV0dXJuIGUudXJsLmluY2x1ZGVzKHQpID8gIiIgOiAnPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9IicgKyB0b1NlYXJjaFVybChlLnVybCwgbikgKyAnIj4nICsgZS5uYW1lICsgIjwvYT4iCiAgICB9KSkuam9pbigiXG4iKSArIChlICYmIOaQnOe0oua6kC5sZW5ndGggPiBjb2xsYXBzZU51bSA/ICc8YSBjbGFzcz0ib28tY29sbGFwc2UiPuKeojwvYT4nIDogIiIpCiAgfQoKICBmdW5jdGlvbiBpbnNlcnRTZWFyY2hBZGRvbihuLCBlKSB7CiAgICB2YXIgdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzJdID8gYXJndW1lbnRzWzJdIDogImFmdGVyIiwKICAgICAgaSA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzNdID8gYXJndW1lbnRzWzNdIDogMCwKICAgICAgbyA9IEhyZWYuaW5jbHVkZXMoIm0uZG91YmFuLmNvbS9zZWFyY2giKTsKICAgIGlmICghKCFuIHx8ICFvICYmICQoIi5vby1zb3VyY2VzIikubGVuZ3RoID4gMCB8fCBpID4gMjApKSB7CiAgICAgIHZhciByOwogICAgICBsb2coImluc2VydFNlYXJjaEFkZG9uIik7CiAgICAgIHZhciBhID0gITE7CiAgICAgIHBsYXllclRpdGxlID0gbiwgInN0cmluZyIgPT0gdHlwZW9mIGUgJiYgKGEgPSBlLnN0YXJ0c1dpdGgoIi0iKSkgJiYgKGUgPSBlLnNsaWNlKDEpKSwgMCAhPT0gKHIgPSAkKGUpKS5sZW5ndGggPyAoYWRkU3R5bGUoIlxuLm9vLXNvdXJjZXMge1xuICBtYXgtd2lkdGg6IDEwMDBweDtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIHBhZGRpbmc6IDEwcHg7XG59XG5cbi5vby12aXAgLm9vLXNvdXJjZXMge1xuICBtYXgtd2lkdGg6IHVuc2V0O1xuICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSg3MywgODAsIDg3LCAwLjE1KTtcbiAgbWFyZ2luLXRvcDogNXB4O1xufVxuXG4ub28tc291cmNlcyArIC5vby1zb3VyY2VzIHsiLmNvbmNhdChQdXJpZnlTdHlsZSwgIn1cblxuLm9vLXNvdXJjZXMgYSB7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4ICFpbXBvcnRhbnQ7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIGZvbnQtc2l6ZTogMTJweCAhaW1wb3J0YW50O1xuICBsaW5lLWhlaWdodDogMS4yO1xuICBwYWRkaW5nOiA1cHggMTBweCAzcHg7XG4gIG1hcmdpbi10b3A6IDhweDtcbiAgbWFyZ2luLXJpZ2h0OiA2cHg7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlZmZhZjMgIWltcG9ydGFudDtcbiAgY29sb3I6ICMyNTc5NDIgIWltcG9ydGFudDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBib3JkZXI6IDFweCBzb2xpZCAjZjFmM2Y1O1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIHRyYW5zaXRpb246IGFsbCAwLjI1cztcbn1cblxuLm9vLXZpcC1saXN0ICsgLm9vLXNvdXJjZXMgLm9vLWNvbGxhcHNlIHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXggIWltcG9ydGFudDtcbn1cblxuLm9vLXNvdXJjZXM6bm90KC5pcy1vcGVuKSAub28taGlkZSB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cblxuLm9vLWNvbGxhcHNlIHtcbiAgbWluLXdpZHRoOiAyZW07XG59XG5cbi5vby1zb3VyY2VzIGE6aG92ZXIge1xuICBib3JkZXI6IDFweCBzb2xpZCAjMDk5MjY4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjU3OTQyICFpbXBvcnRhbnQ7XG4gIGNvbG9yOiAjZWZmYWYzICFpbXBvcnRhbnQ7XG59XG4iKSksIHJbYSA/ICJsYXN0IiA6ICJmaXJzdCJdKClbdF0oJzxkaXYgY2xhc3M9Im9vLXNvdXJjZXMiPlxuJy5jb25jYXQoZ2V0U2VhcmNoU291cmNlc0h0bWwocHVyaWZ5S2V5d29yZChuKSwgIW8pLCAiXG48L2Rpdj4iKSksIG8gfHwgc21hcnRDb2xsYXBzZSgiLm9vLXNvdXJjZXMgYSIpLCAkKCIub28tc291cmNlcyAub28tY29sbGFwc2UiKS5jbGljaygoZnVuY3Rpb24oKSB7CiAgICAgICAgJCh0aGlzKS5wYXJlbnQoIi5vby1zb3VyY2VzIikudG9nZ2xlQ2xhc3MoImlzLW9wZW4iKQogICAgICB9KSkpIDogc2V0VGltZW91dCgoZnVuY3Rpb24oKSB7CiAgICAgICAgaW5zZXJ0U2VhcmNoQWRkb24obiwgZSwgdCwgaSArIDEpCiAgICAgIH0pLCA1MDApCiAgICB9CiAgfQoKICBmdW5jdGlvbiB2aXBBZGRvbkdvKCkgewogICAgdmFyIG4gPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1swXSA/IGFyZ3VtZW50c1swXSA6ICJib2R5IjsKCiAgICBmdW5jdGlvbiBlKGUpIHsKICAgICAgJChuKS5hZGRDbGFzcygib28iKS5hcHBlbmQoZSksICQoZSkuYXR0cih7CiAgICAgICAgYXV0b3BsYXk6ICEwLAogICAgICAgIGNvbnRyb2xzOiAhMAogICAgICB9KSwgZS5wbGF5KCksIGUub25jYW5wbGF5ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgZS5wbGF5KCkKICAgICAgfQogICAgfQogICAgYWRkU3R5bGUoIlxuYm9keTphZnRlcixcbiNhMSB+IHNjcmlwdCB+IGRpdixcbi5kcGxheWVyID4gKltpZF49YWRdIHsiLmNvbmNhdChQdXJpZnlTdHlsZSwgIn1cblxuIikuY29uY2F0KG4sICIgPiB2aWRlbyB7XG4gIHBvc2l0aW9uOiBmaXhlZCAhaW1wb3J0YW50O1xuICB0b3A6IDBweCAhaW1wb3J0YW50O1xuICBsZWZ0OiAwcHggIWltcG9ydGFudDtcbiAgbWluLXdpZHRoOiAwcHggIWltcG9ydGFudDtcbiAgbWluLWhlaWdodDogMHB4ICFpbXBvcnRhbnQ7XG4gIG1heC13aWR0aDogOTkuOTklICFpbXBvcnRhbnQ7XG4gIG1heC1oZWlnaHQ6IDk5Ljk5JSAhaW1wb3J0YW50O1xuICBtYXJnaW46IDBweCAhaW1wb3J0YW50O1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlICFpbXBvcnRhbnQ7XG4gIGJvcmRlci13aWR0aDogMHB4ICFpbXBvcnRhbnQ7XG4gIGJhY2tncm91bmQ6IGJsYWNrICFpbXBvcnRhbnQ7XG4gIHotaW5kZXg6IDIxNDc0ODM2NDcgIWltcG9ydGFudDtcbiAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbiAgaGVpZ2h0OiAxMDAlICFpbXBvcnRhbnQ7XG59XG5cbi5vby5pcy1mYWlsIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDA7XG59XG5cbi5vby5pcy1mYWlsIC50aXAge1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHBhZGRpbmc6IDFlbTtcbiAgY29sb3I6IHdoaXRlO1xufVxuICAgICIpKSwgXyQoKGZ1bmN0aW9uKCkgewogICAgICB2YXIgdCwgaSA9ICEwLAogICAgICAgIG8gPSAhMSwKICAgICAgICByID0gITEsCiAgICAgICAgYSA9IHNldEludGVydmFsKChmdW5jdGlvbigpIHsKICAgICAgICAgIGlmICghcikKICAgICAgICAgICAgaWYgKHIgPSAhMCwgJChuKS5oYXNDbGFzcygib28iKSkgY2xlYXJJbnRlcnZhbChhKTsKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgKHQgPSAkKCJ2aWRlbyIpLmdldCgwKSkgJiYgZSh0KTsKICAgICAgICAgICAgICB2YXIgbCA9ICQoImlmcmFtZSIpOwogICAgICAgICAgICAgIGlmICgwICE9PSBsLmxlbmd0aCkgewogICAgICAgICAgICAgICAgZm9yICh2YXIgczsgMCA9PT0gKHQgPSBsLmNvbnRlbnRzKCkuZmluZCgidmlkZW8iKSkubGVuZ3RoICYmIChzID0gbC5jb250ZW50cygpLmZpbmQoImlmcmFtZSIpKS5sZW5ndGggPiAwOykgbCA9IHM7CiAgICAgICAgICAgICAgICB0Lmxlbmd0aCA+IDAgJiYgdC5hdHRyKCJzcmMiKSA/IChjbGVhckludGVydmFsKGEpLCBpICYmIChpID0gITAsIGUodCkpKSA6IG8gJiYgY2xlYXJJbnRlcnZhbChhKSwgciA9ICExLCAkKCJ0aXRsZSIpLmh0bWwoKSAhPT0gUExVR0lOX0lEICYmICQoInRpdGxlIikuaHRtbChQTFVHSU5fSUQpCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSksIDI1MCk7CiAgICAgIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCkgewogICAgICAgIG8gPSAhMAogICAgICB9KSwgMTVlMykKICAgIH0pKQogIH0KCiAgZnVuY3Rpb24gZXhlY1F1aWNrQWRkb25zKG4pIHsKICAgIGxvZygiZXhlY1F1aWNrQWRkb25zOiIsIG4ubmFtZSB8fCBuLm1hdGNoKTsKICAgIHZhciBlID0gIiI7CiAgICBuLmhpZGUgJiYgKGUgKz0gIlxuIi5jb25jYXQobi5oaWRlLCAiIHsiKS5jb25jYXQoUHVyaWZ5U3R5bGUsICJ9XG4iKSksIG4uY3NzICYmIChlICs9IG4uY3NzKSwgZSAmJiBhZGRTdHlsZShlKSwgXyQoKGZ1bmN0aW9uKCkgewogICAgICBpZiAoKG4uc2lnbiAmJiAkKG4uc2lnbikuaHRtbChPT19TSUdOKSwgbi52aXApICYmICgoQXJyYXkuaXNBcnJheShuLnZpcCkgPyBuLnZpcCA6IFtuLnZpcF0pLmZvckVhY2goKGZ1bmN0aW9uKG4pIHsKICAgICAgICAgIGluc2VydFZpcFNvdXJjZSgobiA9IG4uc3BsaXQoL1xzKlx8XHMqLykpWzBdLCBuWzFdKQogICAgICAgIH0pKSwgbi50aXRsZSkpIHZhciBlID0gMCwKICAgICAgICB0ID0gc2V0SW50ZXJ2YWwoKGZ1bmN0aW9uKCkgewogICAgICAgICAgdmFyIGkgPSAkKG4udGl0bGUpLmVxKDApLnRleHQoKTsKICAgICAgICAgIGkgJiYgKGNsZWFySW50ZXJ2YWwodCksIGluc2VydFNlYXJjaEFkZG9uKGksICIub28tdmlwLWxpc3QiLCAiYWZ0ZXIiKSksIGUrKyA+IDUwICYmIGNsZWFySW50ZXJ2YWwodCkKICAgICAgICB9KSwgMjAwKTsKICAgICAgbi5qdW1wICYmIChsb2coInNlYXJjaEFkZG9uOiIsIG4pLCBfJCgoZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGUgPSAic3RyaW5nIiA9PSB0eXBlb2Ygbi5rZXl3b3JkID8gJChuLmtleXdvcmQpLmVxKDApLnRleHQoKSA6ICJmdW5jdGlvbiIgPT0gdHlwZW9mIG4ua2V5d29yZCA/IG4ua2V5d29yZCgkKSA6IGdldEtleXdvcmRGcm9tVXJsKG4ua2V5d29yZCk7CiAgICAgICAgKEFycmF5LmlzQXJyYXkobi5qdW1wKSA/IG4uanVtcCA6IG4uanVtcC5zcGxpdCgvXHMqLFxzKi8pKS5mb3JFYWNoKChmdW5jdGlvbihuKSB7CiAgICAgICAgICBuID0gbi5zcGxpdCgvXHMqXHxccyovKSwgaW5zZXJ0U2VhcmNoQWRkb24oZSwgblswXSwgblsxXSB8fCAiYWZ0ZXIiKQogICAgICAgIH0pKQogICAgICB9KSkpCiAgICB9KSkKICB9CgogIGZ1bmN0aW9uIG1ha2VCZXR0ZXJBZGRvbnMoKSB7CiAgICBCRVRURVJfQURET05TLmZvckVhY2goKGZ1bmN0aW9uKG4pIHsKICAgICAgKCJzdHJpbmciID09IHR5cGVvZiBuLm1hdGNoID8gSHJlZi5pbmNsdWRlcyhuLm1hdGNoKSA6IElzKG4ubWF0Y2gpKSAmJiBleGVjUXVpY2tBZGRvbnMobikKICAgIH0pKQogIH0KCiAgZnVuY3Rpb24gdXJsRGV0ZWN0b3IobikgewogICAgc2V0SW50ZXJ2YWwoKGZ1bmN0aW9uKCkgewogICAgICBIcmVmICE9PSB3aW5kb3cubG9jYXRpb24uaHJlZiAmJiAoSHJlZiA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLCBuICYmIG4oKSkKICAgIH0pLCAyNTApCiAgfQp9KCk7Cg==
Add Comment
Please, Sign In to add comment