xiaomianao666

ε°η¨‹εΊοΌšπ‰πšπ―πƒπ

May 22nd, 2024
248
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ζ΅·ι˜”θ§†η•Œθ§„εˆ™εˆ†δΊ«οΌŒε½“ε‰εˆ†δΊ«ηš„ζ˜―οΌšε°η¨‹εΊοΏ₯home_rule_v2οΏ₯base64://@π‰πšπ―πƒπ@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6IiIsInRpdGxlIjoi8J2QifCdkJrwnZCv8J2Qg/CdkIEiLCJhdXRob3IiOiLOseaooeadvyZSIiwidXJsIjoiaGlrZXI6Ly9lbXB0eSMjaHR0cHM6Ly9qYXZkYi5jb20vIyNmeXBhZ2UiLCJ2ZXJzaW9uIjoyMDI0MDUyMiwiY29sX3R5cGUiOiJtb3ZpZV8zIiwiY2xhc3NfbmFtZSI6IiIsInR5cGUiOiJ2aWRlbyIsImNsYXNzX3VybCI6IuS6kTZvb29vbGUveHh4eHh4L3hvenhkd2ppNXJyaHJsNnYiLCJhcmVhX25hbWUiOiIiLCJhcmVhX3VybCI6IiIsInNvcnRfbmFtZSI6IiIsInllYXJfbmFtZSI6IiIsInNvcnRfdXJsIjoiIiwieWVhcl91cmwiOiIiLCJmaW5kX3J1bGUiOiJqczpcbnZhciBkID0gW107XG5hZGRMaXN0ZW5lcihcIm9uQ2xvc2VcIiwgJC50b1N0cmluZygoKSA9PiB7XG4gICAgbGV0IGtleXMgPSBsaXN0TXlWYXJLZXlzKCk7XG4gICAgZm9yIChsZXQgaXQgb2Yga2V5cykge1xuICAgICAgICBjbGVhck15VmFyKGl0KTtcbiAgICB9XG59KSk7XG5cbmNvbnN0IOS4i+S4gOmhtSA9IFwicGQoaHRtbCwgJy5wYWdpbmF0aW9uJiZhW3JlbD1uZXh0XSYmaHJlZicpXCI7XG5jb25zdCBwYWdlID0gTVlfUEFHRTtcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UveWknKSkucnVsZSlcblxudmFyIOWumuS9jeS/oeaBryA9IFt7XG4gICAg5aSn57G75a6a5L2NOiAnLm5hdmJhci1zdGFydCYmLm5hdmJhci1saW5rJyxcbiAgICDlop7liqA6IFsnPGEgaHJlZj1cIicgKyBNWV9IT01FICsgJy9cIj7pppbpobU8L0E+JywnPGEgaHJlZj1cIi9hYm91dFwiPuaUtuiXjzwvQT4nXSxcbiAgICDlsI/nsbs6ICdib2R5JiZhOm5vdCg6bWF0Y2hlcyjwn5SlKSknLFxuICAgIOmTvuaOpeWkhOeQhjogKHUpID0+IHtcbiAgICAgICAgbGV0IHVybCA9IHUucmVwbGFjZSgvdHlwZShcXC9cXGQrKVxcLmh0bWwvLCAnc2hvdyQxLS0tLS0tLS0tLS0uaHRtbCcpO1xuICAgICAgICByZXR1cm4gdXJsXG4gICAgfVxufSx7XG4gICAg5LiA57qn5a6a5L2NOiAnLm5hdmJhci1pdGVtW2hyZWY9L2xvZ2luXScsXG59LC8qe1xuICAgIOS4gOe6p+WumuS9jTogJ2JvZHkmJi5uYXZiYXItZHJvcGRvd246aGFzKGhyKScsXG4gICAg5bCP57G7OiAnYm9keSYmYTpub3QoOm1hdGNoZXMo5oiR55qE5riF5ZaufOaUr+S7mOiomOmMhHzlgIvkurrkv6Hmga8pKScsXG59LCovIHtcbiAgICDkuIDnuqflrprkvY06IFwiQGpzOlwiICsgJC50b1N0cmluZygoKSA9PiB7XG4gICAgICAgICAgICBpZigvc2VhcmNoLy50ZXN0KHRydWVfdXJsKSl7XG4gICAgICAgICAgICB2YXIgbGlzdCA9IFtdXG59IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGxpc3Q9cGRmYShodG1sLCAnYm9keSYmLnRhYnN8fC5idXR0b25zLmhhcy1hZGRvbnMnKTtcbiAgICAgICAgICAgIGlmKCEvYWJvdXR8cmFua2luZ3N8dGFnc3xzZXJpZXN8bWFrZXJzfHVzZXJzfGxvZ2lufGFjdG9ycy8udGVzdCh0cnVlX3VybCkpe1xuICAgICAgICAgICAgbGlzdGYgPSBwZGZhKGxpc3RbMF0sXCJib2R5JiZhXCIpXG4gICAgICAgICAgICBsaXN0YiA9IGxpc3RmLmNvbmNhdChbJzxhIGhyZWY9XCJodHRwczovL3d3dy5iYWlkdS5jb21cIj7wnZCF8J2QgvCdn5A8L0E+J10pXG4gICAgICAgICAgICBsaXN0WzBdID0gbGlzdGIuam9pbihcIixcIik7XG4gICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHZhciBzaSA9IDJcbiAgICAgICAgICAgIGxpc3RhID0gcGRmYShsaXN0W3NpXSxcImJvZHkmJmFcIilcbiAgICAgICAgICAgIGVsZW1lbnQgPSBsaXN0YS5zcGxpY2UoMiwxKVswXVxuICAgICAgICAgICAgbGlzdGEudW5zaGlmdChlbGVtZW50KTtcbiAgICAgICAgICAgIGxpc3Rbc2ldID0gbGlzdGEuam9pbihcIixcIik7fVxuICAgICAgICAgICAgcmV0dXJuIGxpc3RcbiAgICB9KSxcbiAgICDlsI/nsbs6ICdib2R5JiZhOm5vdCg6bWF0Y2hlcyjng63mkq18MjUwfOWwgemdonznjJzkvaB8RkMyKSknLFxuICAg5qCH6aKYOiAnVGV4dC5qczppbnB1dC5yZXBsYWNlKFwi5ZCrXCIsXCJcIikucmVwbGFjZShcIuS4reWtl+WPr+aSreaUvlwiLFwi5Lit5a2XXCIpLnJlcGxhY2UoXCLlj6/mkq3mlL5cIixcIuWPr+aSrVwiKScsXG59LCB7XG4gICAg5LiA57qn5a6a5L2NOiAnI3RhZ3MmJmR0JyxcbiAgICDlsI/nsbs6ICdib2R5JiZhOm5vdCg6bWF0Y2hlcyjmm7TlpJopKScsXG59LHtcbiAgICDkuIDnuqflrprkvY06ICcuYWN0b3ItZmlsdGVyJiYuZmlsdGVyLXNsaWRlcjptYXRjaGVzKOi6q+mrmCknLFxuICAgIOWwj+exuzogJ2JvZHkmJi5maWx0ZXItc2xpZGVyJyxcbiAgICDooaXlhYU6IFtcbic8aW5wdXQgaWQ9XCIvYWN0b3JzL2NlbnNvcmVkP3Q9ZmlsdGVyJmFnZT0xOSUyQzY1JmhlaWdodD0xMzAlMkMxNDcmY3VwPTAlMkMxNSZidXN0PTcwJTJDMTIwJndhaXN0PTUwJTJDOTAmaGlwcz03MCUyQzEyMFwiPjEzMC0xNDcnLFxuJzxpbnB1dCBpZD1cIi9hY3RvcnMvY2Vuc29yZWQ/dD1maWx0ZXImYWdlPTE5JTJDNjUmaGVpZ2h0PTE0NyUyQzE2MCZjdXA9MCUyQzE1JmJ1c3Q9NzAlMkMxMjAmd2Fpc3Q9NTAlMkM5MCZoaXBzPTcwJTJDMTIwXCI+MTQ3LTE2MCcsXG4nPGlucHV0IGlkPVwiL2FjdG9ycy9jZW5zb3JlZD90PWZpbHRlciZhZ2U9MTklMkM2NSZoZWlnaHQ9MTYwJTJDMTY1JmN1cD0wJTJDMTUmYnVzdD03MCUyQzEyMCZ3YWlzdD01MCUyQzkwJmhpcHM9NzAlMkMxMjBcIj4xNjAtMTY1Jyxcbic8aW5wdXQgaWQ9XCIvYWN0b3JzL2NlbnNvcmVkP3Q9ZmlsdGVyJmFnZT0xOSUyQzY1JmhlaWdodD0xNjUlMkMxNjkmY3VwPTAlMkMxNSZidXN0PTcwJTJDMTIwJndhaXN0PTUwJTJDOTAmaGlwcz03MCUyQzEyMFwiPjE2NS0xNjknLFxuJzxpbnB1dCBpZD1cIi9hY3RvcnMvY2Vuc29yZWQ/dD1maWx0ZXImYWdlPTE5JTJDNjUmaGVpZ2h0PTE2OSUyQzE3NSZjdXA9MCUyQzE1JmJ1c3Q9NzAlMkMxMjAmd2Fpc3Q9NTAlMkM5MCZoaXBzPTcwJTJDMTIwXCI+MTY5LTE3NScsXG4nPGlucHV0IGlkPVwiL2FjdG9ycy9jZW5zb3JlZD90PWZpbHRlciZhZ2U9MTklMkM2NSZoZWlnaHQ9MTc1JTJDMTg1JmN1cD0wJTJDMTUmYnVzdD03MCUyQzEyMCZ3YWlzdD01MCUyQzkwJmhpcHM9NzAlMkMxMjBcIj4xNzUtMTg1Jyxcbl0sXG4gICAg5qCH6aKYOiAnVGV4dCcsXG4gICAg6ZO+5o6lOiAnaW5wdXQmJmlkLmpzOmlucHV0LnJlcGxhY2UoXCJhZi1oZWlnaHQtaW5wdXRcIixcIi9hY3RvcnMvY2Vuc29yZWRcIiknLFxufSx7XG4gICAg5LiA57qn5a6a5L2NOiAnLmFjdG9yLWZpbHRlciYmLmZpbHRlci1zbGlkZXI6bWF0Y2hlcyjnvanmna8pJyxcbiAgICDlsI/nsbs6ICdib2R5JiYuZmlsdGVyLXNsaWRlcicsXG4gICAg6KGl5YWFOiBbXG4nPGlucHV0IGlkPVwiL2FjdG9ycy9jZW5zb3JlZD90PWZpbHRlciZhZ2U9MTklMkM2NSZoZWlnaHQ9MTMwJTJDMTg1JmN1cD0wJTJDMSZidXN0PTcwJTJDMTE1JndhaXN0PTUwJTJDOTAmaGlwcz03MCUyQzEyMFwiPkEnLFxuJzxpbnB1dCBpZD1cIi9hY3RvcnMvY2Vuc29yZWQ/dD1maWx0ZXImYWdlPTE5JTJDNjUmaGVpZ2h0PTEzMCUyQzE4NSZjdXA9MSUyQzMmYnVzdD03MCUyQzExNSZ3YWlzdD01MCUyQzkwJmhpcHM9NzAlMkMxMjBcIj5CQycsXG4nPGlucHV0IGlkPVwiL2FjdG9ycy9jZW5zb3JlZD90PWZpbHRlciZhZ2U9MTklMkM2NSZoZWlnaHQ9MTMwJTJDMTg1JmN1cD0zJTJDNCZidXN0PTcwJTJDMTE1JndhaXN0PTUwJTJDOTAmaGlwcz03MCUyQzEyMFwiPkQnLFxuJzxpbnB1dCBpZD1cIi9hY3RvcnMvY2Vuc29yZWQ/dD1maWx0ZXImYWdlPTE5JTJDNjUmaGVpZ2h0PTEzMCUyQzE4NSZjdXA9NCUyQzYmYnVzdD03MCUyQzExNSZ3YWlzdD01MCUyQzkwJmhpcHM9NzAlMkMxMjBcIj5FRicsXG4nPGlucHV0IGlkPVwiL2FjdG9ycy9jZW5zb3JlZD90PWZpbHRlciZhZ2U9MTklMkM2NSZoZWlnaHQ9MTMwJTJDMTg1JmN1cD02JTJDOCZidXN0PTcwJTJDMTE1JndhaXN0PTUwJTJDOTAmaGlwcz03MCUyQzEyMFwiPkdIJyxcbic8aW5wdXQgaWQ9XCIvYWN0b3JzL2NlbnNvcmVkP3Q9ZmlsdGVyJmFnZT0xOSUyQzY1JmhlaWdodD0xMzAlMkMxODUmY3VwPTglMkMxMCZidXN0PTcwJTJDMTE1JndhaXN0PTUwJTJDOTAmaGlwcz03MCUyQzEyMFwiPklKJyxcbic8aW5wdXQgaWQ9XCIvYWN0b3JzL2NlbnNvcmVkP3Q9ZmlsdGVyJmFnZT0xOSUyQzY1JmhlaWdodD0xMzAlMkMxODUmY3VwPTEwJTJDMTUmYnVzdD03MCUyQzExNSZ3YWlzdD01MCUyQzkwJmhpcHM9NzAlMkMxMjBcIj5LficsXG5dLFxuICAgIOagh+mimDogJ1RleHQnLFxuICAgIOmTvuaOpTogJ2lucHV0JiZpZC5qczppbnB1dC5yZXBsYWNlKFwiYWYtY3VwLWlucHV0XCIsXCIvYWN0b3JzL2NlbnNvcmVkXCIpJyxcbn1dXG5cbk1ZX1VSTCA9IE1ZX1VSTC5zcGxpdCgnIyMnKVsxXVxubGV0IHRydWVfdXJsID0gZ2V0VHJ1ZWxpbmsoTVlfUlVMRS51cmwsIE1ZX1VSTCwgcGFnZSk7XG5sb2codHJ1ZV91cmwpXG52YXIgaHRtbCA9IGZldGNoKHRydWVfdXJsLCB7XG4gICAgaGVhZGVyczoge1xuICAgICAgICBjb29raWU6IGZldGNoUEMoJ2hpa2VyOi8vZmlsZXMvY2FjaGUvamF2ZGJfY29va2llLnR4dCcpIHx8ICcnLFxuICAgIH0sXG4gICAgcmVkaXJlY3Q6IGZhbHNlXG59KTtcbi8vbG9nKGh0bWwpXG5pZiAoL3JlZGlyZWN0ZWQvLnRlc3QoaHRtbCkmJiEvXFwvZmMyLy50ZXN0KHRydWVfdXJsKSkge1xuICAgIHdyaXRlRmlsZSgnaGlrZXI6Ly9maWxlcy9jYWNoZS9qYXZkYl9jb29raWUudHh0JywgJycpO1xuICAgIGh0bWwgPSBmZXRjaCh0cnVlX3VybCwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICBjb29raWU6IGZldGNoUEMoJ2hpa2VyOi8vZmlsZXMvY2FjaGUvamF2ZGJfY29va2llLnR4dCcpIHx8ICcnLFxuICAgICAgICB9LFxuICAgICAgICByZWRpcmVjdDogZmFsc2VcbiAgICB9KVxufVxuXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL3NlYXJjaCcpKS5ydWxlKVxuXG5jb25zdCBkYyA9IGR5bmFtaWNDbGFzcyh7XG4gICAg5YiG57G76aKc6ImyOiBnZXRSYW5nZUNvbG9ycygpXG59KTtcbmRjLuW8gOWQr+aKmOWPoChmYWxzZSlcbmRjLuW8gOWQr+aQnOe0oihmYWxzZSlcbmRjLuWIm+W7uuWKqOaAgeWIhuexuyjlrprkvY3kv6Hmga8pXG5cbnZhciBwYXJzZVJ1bGUgPSB7XG4gICAgbGlzdDogJ2JvZHkmJi5pdGVtJyxcbiAgICB0aXRsZTogJy52aWRlby10aXRsZSYmVGV4dCcsXG4gICAgZGVzYzE6ICcudGFnJiZUZXh0JyxcbiAgICBkZXNjOiAnLm1ldGEmJlRleHQnLFxuICAgIGltZzogJ2ltZ3x8YSYmc3JjfHxkYXRhLW9yaWdpbmFsJyxcbiAgICB1cmw6ICdhJiZocmVmJyxcbiAgICByZWY6ICdAUmVmZXJlcj0nLFxuICAgIGNvbF90eXBlOiAnbW92aWVfMicsXG4gICAgaW10OiBmYWxzZSxcbiAgICAvL2JhY2tpbWc6IHRydWUsXG59XG5cbnZhciBwYXJzZVJ1bGUxID0ge1xuICAgIGxpc3Q6ICdib2R5JiYuYWN0b3ItYm94JywgXG4gICAgdGl0bGU6ICdhJiZ0aXRsZScsXG4gICAgZGVzYzogJy5tZXRhJiZUZXh0JyxcbiAgICBpbWc6ICdpbWd8fGEmJnNyY3x8ZGF0YS1vcmlnaW5hbCcsXG4gICAgdXJsOiAnYSYmaHJlZicsXG4gICAgcmVmOiAnQFJlZmVyZXI9JyxcbiAgICBjb2xfdHlwZTogJ2NhcmRfcGljXzMnLFxuICAgIGltdDogZmFsc2UsXG4gICAgLy9iYWNraW1nOiB0cnVlLFxufVxuXG52YXIgcGFyc2VSdWxlMiA9IHtcbiAgICBsaXN0OiAnI3NlcmllcyYmLmJveCcsXG4gICAgdGl0bGU6ICdzdHJvbmcmJlRleHQnLFxuICAgIGRlc2M6ICdzcGFuJiZUZXh0JyxcbiAgICBpbWc6ICdhJiZocmVmLmpzOmlucHV0LnJlcGxhY2UoaW5wdXQsXCJodHRwczovL2hpa2VyZmFucy5jb20vdHViaWFvL21vdmllLzMwLnN2Z1wiKScsXG4gICAgdXJsOiAnYSYmaHJlZicsXG4gICAgcmVmOiAnQFJlZmVyZXI9JyxcbiAgICBjb2xfdHlwZTogJ2F2YXRhcicsXG4gICAgaW10OiBmYWxzZSxcbiAgICAvL2JhY2tpbWc6IHRydWUsXG59XG5cbnZhciBwYXJzZVJ1bGUzID0ge1xuICAgIGxpc3Q6ICcjbWFrZXJzJiYuYm94JyxcbiAgICB0aXRsZTogJ3N0cm9uZyYmVGV4dCcsXG4gICAgZGVzYzogJ3NwYW4mJlRleHQnLFxuICAgIGltZzogJ2EmJmhyZWYuanM6aW5wdXQucmVwbGFjZShpbnB1dCxcImh0dHBzOi8vaGlrZXJmYW5zLmNvbS90dWJpYW8vbW92aWUvMzAuc3ZnXCIpJyxcbiAgICB1cmw6ICdhJiZocmVmJyxcbiAgICByZWY6ICdAUmVmZXJlcj0nLFxuICAgIGNvbF90eXBlOiAnYXZhdGFyJyxcbiAgICBpbXQ6IGZhbHNlLFxuICAgIC8vYmFja2ltZzogdHJ1ZSxcbn1cblxudmFyIHBhcnNlUnVsZTQgPSB7XG4gICAgbGlzdDogJyNkaXJlY3RvcnMmJi5ib3gnLFxuICAgIHRpdGxlOiAnc3Ryb25nJiZUZXh0JyxcbiAgICBkZXNjOiAnc3BhbiYmVGV4dCcsXG4gICAgaW1nOiAnYSYmaHJlZi5qczppbnB1dC5yZXBsYWNlKGlucHV0LFwiaHR0cHM6Ly9pbWcudmludWEuY24vaW1hZ2VzL1hhMmhELnBuZ1wiKScsXG4gICAgdXJsOiAnYSYmaHJlZicsXG4gICAgcmVmOiAnQFJlZmVyZXI9JyxcbiAgICBjb2xfdHlwZTogJ2F2YXRhcicsXG4gICAgaW10OiBmYWxzZSxcbiAgICAvL2JhY2tpbWc6IHRydWUsXG59XG5cbnZhciBwYXJzZVJ1bGU1ID0ge1xuICAgIGxpc3Q6ICcjY29kZXMmJi5ib3gnLFxuICAgIHRpdGxlOiAnc3Ryb25nJiZUZXh0JyxcbiAgICBkZXNjOiAnc3BhbiYmVGV4dCcsXG4gICAgaW1nOiAnYSYmaHJlZi5qczppbnB1dC5yZXBsYWNlKGlucHV0LFwiaHR0cHM6Ly9pbWcudmludWEuY24vaW1hZ2VzL09UTTRrLnBuZ1wiKScsXG4gICAgdXJsOiAnYSYmaHJlZicsXG4gICAgcmVmOiAnQFJlZmVyZXI9JyxcbiAgICBjb2xfdHlwZTogJ2F2YXRhcicsXG4gICAgaW10OiBmYWxzZSxcbiAgICAvL2JhY2tpbWc6IHRydWUsXG59XG5cbnZhciBwYXJzZVJ1bGU2ID0ge1xuICAgIGxpc3Q6ICcjbGlzdHMmJmEnLFxuICAgIHRpdGxlOiAnc3Ryb25nJiZUZXh0JyxcbiAgICBkZXNjOiAnYSYmdGl0bGUnLFxuICAgIGltZzogJ2EmJmhyZWYuanM6aW5wdXQucmVwbGFjZShpbnB1dCxcImh0dHBzOi8vaGlrZXJmYW5zLmNvbS90dWJpYW8vbW92aWUvMzAuc3ZnXCIpJyxcbiAgICB1cmw6ICdhJiZocmVmJyxcbiAgICByZWY6ICdAUmVmZXJlcj0nLFxuICAgIGNvbF90eXBlOiAnYXZhdGFyJyxcbiAgICBpbXQ6IGZhbHNlLFxuICAgIC8vYmFja2ltZzogdHJ1ZSxcbn1cblxuaWYgKHRydWVfdXJsLmluY2x1ZGVzKCcvYWJvdXQnKSl7XG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL+aUtuiXjycpKS5ydWxlKVxufVxuXG5pZiAodHJ1ZV91cmwuaW5jbHVkZXMoJy9sb2dvdXQnKSl7XG53cml0ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvY2FjaGUvamF2ZGJfY29va2llLnR4dCcsICcnKTtcbiAgICB0b2FzdCgn6LSm5Y+35bey55m75Ye6Jyk7XG59XG5cbmlmICh0cnVlX3VybC5pbmNsdWRlcygnL2xvZ2luJykpe1xuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS/nmbvlvZUnKSkucnVsZSlcbn1cblxuQ3JlYXRlLnJ1bGVMaXN0KGQsIGh0bWwsIHBhcnNlUnVsZSk7XG5cbkNyZWF0ZS5MaXN0KGQsIGh0bWwsIHBhcnNlUnVsZTEpO1xuXG5DcmVhdGUuTGlzdChkLCBodG1sLCBwYXJzZVJ1bGUyKTtcblxuQ3JlYXRlLkxpc3QoZCwgaHRtbCwgcGFyc2VSdWxlMyk7XG5cbmlmICgvc2VhcmNofGNvbGxlY3Rpb25fZGlyZWN0b3JzLy50ZXN0KHRydWVfdXJsKSl7XG5DcmVhdGUuTGlzdChkLCBodG1sLCBwYXJzZVJ1bGU0KTt9XG5cbmlmICh0cnVlX3VybC5pbmNsdWRlcygnY29sbGVjdGlvbl9jb2RlcycpKXtcbkNyZWF0ZS5MaXN0KGQsIGh0bWwsIHBhcnNlUnVsZTUpO31cblxuaWYgKHRydWVfdXJsLmluY2x1ZGVzKCdzZWFyY2g/Zj1saXN0Jykpe1xuQ3JlYXRlLkxpc3QoZCwgaHRtbCwgcGFyc2VSdWxlNik7fVxuXG5hdXRvUGFnZSgpO1xuXG5zZXRSZXN1bHQoZCkiLCJzZWFyY2hfdXJsIjoiaGlrZXI6Ly9lbXB0eSMjaHR0cHM6Ly9qYXZkYi5jb20vc2VhcmNoP2Y9YWxsJnBhZ2U9ZnlwYWdlJnE9KioiLCJncm91cCI6IuaIkeeahOWwj+eoi+W6jyIsInNlYXJjaEZpbmQiOiJqczpcbiQucmVxdWlyZShcInlqXCIpXG4vKlxuaGlrZXI6Ly9lbXB0eSMjKipcbnZhciBkID0gW107XG5sZXQgSE9NRSA9IFwiaGlrZXI6Ly9lbXB0eSMjXCIgKyBNWV9SVUxFLnVybC5zcGxpdChcIiMjXCIpWzFdO1xubGV0IGtleSA9IE1ZX1VSTC5zcGxpdChcIiMjXCIpWzFdO1xuZC5wdXNoKHtcbiAgICB0aXRsZTogXCLngrnmiJHlvIDlp4vmkJzntKJcIiArIGtleSxcbiAgICB1cmw6IEhPTUUgKyBcInNlYXJjaD9mPWFsbCZwYWdlPWZ5cGFnZSZxPVwiICsga2V5ICsgJ0BydWxlPWpzOiQucmVxdWlyZShcInlqXCIpJyxcbiAgICBleHRyYToge1xuICAgICAgICBwYWdlVGl0bGU6IGtleSxcbiAgICAgICAga2V5OiBrZXlcbiAgICB9XG59KTtcbiovXG5zZXRSZXN1bHQoZCk7IiwiZGV0YWlsX2NvbF90eXBlIjoibW92aWVfMSIsImRldGFpbF9maW5kX3J1bGUiOiIiLCJzZGV0YWlsX2NvbF90eXBlIjoibW92aWVfMSIsInNkZXRhaWxfZmluZF9ydWxlIjoiKiIsInVhIjoibW9iaWxlIiwicHJlUnVsZSI6Ii8vQExveURnSWvlpKfkvazlhpnnmoToh6rliqjmm7TmlrDvvIzlpI3liLbpu4/otLTlsLHlrozkuovvvIzmhJ/osKLlpKfkvaznmoTliIbkuqtcblxudmFyIOabtOaWsOmXtOmalCA9IDIyMyA7Ly8o5aSpKVxubGV0IHRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKS50b1N0cmluZygpXG5sZXQg5pe26Ze06Ze06ZqUID0gdGltZS1nZXRJdGVtKCd0aW1lJywgbmV3IERhdGUoKS5nZXRUaW1lKCkudG9TdHJpbmcoKSlcblxubGV0IOmXtOmalOWkqeaVsCA9IE1hdGguZmxvb3Io5pe26Ze06Ze06ZqUIC8gKDI0ICogNjAgKiA2MCAqIDEwMDApKTtcbi8qXG5sZXQg6Ze06ZqU5pe25pWwID0gTWF0aC5mbG9vcijml7bpl7Tpl7TpmpQgLyAoNjAgKiA2MCAqIDEwMDApKTtcbmxldCDpl7TpmpTliIbmlbAgPSBNYXRoLmZsb29yKOaXtumXtOmXtOmalCAvICggNjAgKiAxMDAwKSk7XG5sZXQg6Ze06ZqU56eS5pWwID0gTWF0aC5mbG9vcijml7bpl7Tpl7TpmpQgLyAxMDAwKTtcbi8vbG9nKOmXtOmalOaXtuaVsCkqL1xuaWYgKOmXtOmalOWkqeaVsD495pu05paw6Ze06ZqUICkge1xuICAgICAgICAgICAgc2V0SXRlbSgndGltZScsIHRpbWUpO1xuICAgICAgICAgICAgbGV0IEhPTUUgPSBNWV9SVUxFLnVybC5tYXRjaCgvaHR0cHM/OlxcL1xcL1teIy8/Jl0rXFwvLylbMF07XG4gICAgICAgICAgICB2YXIgaHRtbCA9IGZldGNoKEhPTUUgKyAnYWJvdXQnLHtkbnM6J2h0dHBzOi8vMS4xLjEuMS9kbnMtcXVlcnknfSk7XG4gICAgICAgICAgICB2YXIgdXJsID0gcGRmaChodG1sLCcuc3ViLWhlYWRlciYmLmNvbnRlbnQmJmFbaHJlZn49Y29tXSYmaHJlZicpXG4vL2xvZygn5YWN57+75Zyw5Z2A77yaJyt1cmwpXG5pZiAoSE9NRSAhPT0gdXJsKSB7XG4gICAgY29uZmlybSh7XG4gICAgICAgIHRpdGxlOiBcIuabtOaWsOaPkOekulwiLFxuICAgICAgICBjb250ZW50OiBcIuacieacgOaWsOWFjee/u+WcsOWdgCzmmK/lkKbmm7TmlrBcIixcbiAgICAgICAgY29uZmlybTogKCkgPT4ge1xuICAgICAgICAgICAgc2hvd0xvYWRpbmcoXCLmraPlnKjojrflj5bmnIDmlrDln5/lkI1cIik7XG4gICAgICAgICAgICB2YXIgaG9tZSA9IE1ZX1JVTEUudXJsLm1hdGNoKC9odHRwcz86XFwvXFwvW14jLz8mXStcXC8vKVswXTtcbiAgICAgICAgICAgIHZhciBodG0gPSBmZXRjaChob21lICsgJy9hYm91dCcpO1xuICAgICAgICAgICAgdmFyIGhvc3QgPSBwZGZoKGh0bSwnLnN1Yi1oZWFkZXImJi5jb250ZW50JiZhW2hyZWZ+PWNvbV0mJmhyZWYnKVxuICAgICAgICAgICAgaGlkZUxvYWRpbmcoKTtcbiAgICAgICAgICAgIGlmICghaG9zdCkgcmV0dXJuIFwidG9hc3Q6Ly/ojrflj5blpLHotKVcIjtcbiAgICAgICAgICAgIHRvYXN0KGhvc3QpO1xuICAgICAgICAgICAgdmFyIGN1cnJlbnREYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgICAgIHZhciB5ZWFyID0gY3VycmVudERhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICAgIHZhciBtb250aCA9IFN0cmluZyhjdXJyZW50RGF0ZS5nZXRNb250aCgpICsgMSkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICAgICAgICAgIHZhciBkYXkgPSBTdHJpbmcoY3VycmVudERhdGUuZ2V0RGF0ZSgpKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgICAgICAgICAgTVlfUlVMRS52ZXJzaW9uID0gYCR7eWVhcn0ke21vbnRofSR7ZGF5fWA7XG4gICAgICAgICAgICAvKGh0dHBzPzpcXC9cXC9bXiMvPyZdK1xcLykvLnRlc3QoTVlfUlVMRS51cmwpO1xuICAgICAgICAgICAgTVlfUlVMRS51cmwgPSBNWV9SVUxFLnVybC5yZXBsYWNlKFJlZ0V4cC4kMSwgaG9zdCk7XG4gICAgICAgICAgICByZXR1cm4gXCJydWxlOi8vXCIgKyBiYXNlNjRFbmNvZGUoXCLmtbfpmJTop4bnlYzvv6Vob21lX3J1bGXvv6VcIiArIEpTT04uc3RyaW5naWZ5KE1ZX1JVTEUpKTsgICAgICAgICAgICBcbiAgICAgICAgfSxcbiAgICAgICAgY2FuY2VsOiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gXCJ0b2FzdDovL/CfmIdcIjtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgfVxufVxuXG5pZiAoIGdldEl0ZW0oXCJ2ZXJzaW9uXCIpICE9PSBNWV9SVUxFLnZlcnNpb24udG9TdHJpbmcoKSkge1xuc2V0SXRlbShcInZlcnNpb25cIixNWV9SVUxFLnZlcnNpb24udG9TdHJpbmcoKSk7XG53cml0ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvcnVsZXMvYXBvbGxvL0NvZGVMYXp5LmpzJywgJycpO1xufVxuXG5wdXRNeVZhcigneW9uZ2ppdScsJ2h0dHBzOi8vamF2ZGIuY29tJylcbnB1dE15VmFyKCdmYzInLFwiaHR0cHM6Ly9qYXZtZW51LmNvbS96aC9mYzIvZmlsdGVyP29yZGVyPXVwZGF0ZVwiKVxuaG9zdCA9IE1ZX1JVTEUudXJsLm1hdGNoKC9odHRwcz86XFwvXFwvKFteIy8/Jl0rKS8pWzFdO1xuZ2xvYmFsTWFwMC5wdXRWYXIoJ2phdmRiMCcsaG9zdCk7XG4vKlxucmVnaXN0ZXJETlMoe1xuICAgIFwiamF2ZGIuY29tXCI6IFwiaHR0cHM6Ly8yMjMuNS41LjUvZG5zLXF1ZXJ5XCIsXG4gICAgIGhvc3Q6IFwiaHR0cHM6Ly8yMjMuNS41LjUvZG5zLXF1ZXJ5XCIsXG4gICAgXCJmaXZldGl1LmNvbVwiOlwiaHR0cHM6Ly8yMjMuNS41LjUvZG5zLXF1ZXJ5XCIsXG4gICAgJ21pc3Nhdi5jb20nOiAnaHR0cHM6Ly8yMjMuNS41LjUvZG5zLXF1ZXJ5Jyxcbn0pOyovIiwicGFnZXMiOiJbe1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuKRoOS4gOe6p+WIhuexu+WIl+ihqFwiLFwicGF0aFwiOlwieWlcIixcInJ1bGVcIjpcImpzOlxcbi8qXFxuYnkgzrEoemV0YWxwaGEpXFxu5LiA57qn5bCB6KOFXFxu5Yqo5oCB5YiG57G7IOWIl+ihqOWIm+W7uiDoh6rliqjkuIvkuIDpobVcXG52ZXIgMjAyMzEwMTcgMS4wXFxuKi9cXG5cXG4vL+maj+acuuminOiJslxcbnZhciBnZXRSYW5nZUNvbG9ycyA9IGZ1bmN0aW9uKCkge1xcbiAgICByZXR1cm4gJyMnICsgKCcwMDAwMCcgKyAoTWF0aC5yYW5kb20oKSAqIDB4MTAwMDAwMCA8PCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XFxufVxcblxcbi8v5Yqo5oCB5YiG57G7XFxuZnVuY3Rpb24gZHluYW1pY0NsYXNzKG9wdGlvbnMpIHtcXG4gICAgY29uc3Qgb2JqID0ge1xcbiAgICAgICAgLy/pu5jorqTlgLxcXG4gICAgICAgIGxheW91dDogXFxcInVuZGVmaW5lZFxcXCIsXFxuICAgICAgICBodG1sOiBcXFwiZW1wdHlcXFwiLFxcbiAgICAgICAgcGFnZTogMCxcXG4gICAgICAgIOWIhuexu+minOiJsjogXFxcIiNGQTcyOThcXFwiLFxcbiAgICAgICAg5oqY5Y+gOiBcXFwi4oCc4oCc4oCd4oCdPGI+XFxcIiArIFxcXCLiiKdcXFwiLmZvbnRjb2xvcihcXFwiIzFhYWQxOVxcXCIpICsgXFxcIjwvYj5cXFwiLFxcbiAgICAgICAg5bGV5byAOiBcXFwi4oCc4oCc4oCd4oCdPGI+XFxcIiArIFxcXCLiiKhcXFwiLmZvbnRjb2xvcihcXFwiI0ZGMDAwMFxcXCIpICsgXFxcIjwvYj5cXFwiLFxcbiAgICAgICAgb3BlbjogdHJ1ZSxcXG4gICAgICAgIHN0YXRlOiBNWV9SVUxFLnVybCxcXG4gICAgICAgIHNlYXJjaDogZmFsc2UsXFxuICAgICAgICBjbGVhcnM6IFtdLFxcbiAgICAgICAgY2xlYXJhbGw6IFtcXFwieWlfZmlyc3RwYWdlXFxcIl0sXFxuICAgICAgICBkZWJ1ZzogZmFsc2UsXFxuXFxuICAgICAgICDpooTorr4ocGFyYW0pIHtcXG4gICAgICAgICAgICBpZiAocGFyYW0gPT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICAgICAgICAgIHBhcmFtID0gW107XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHBhcmFtKS5mb3JFYWNoKChwcm9wZXJ0eSkgPT4ge1xcbiAgICAgICAgICAgICAgICAvLyDlr7nmr4/kuKrlsZ7mgKflkI3miafooYzmk43kvZxcXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBwYXJhbVtwcm9wZXJ0eV07IC8vIOiOt+WPluWxnuaAp+WAvFxcbiAgICAgICAgICAgICAgICAvLyDlnKjov5nph4zmiafooYzmgqjnmoTmk43kvZxcXG4gICAgICAgICAgICAgICAgdGhpc1twcm9wZXJ0eV0gPSB2YWx1ZTtcXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHByb3BlcnR5ICsgXFxcIjpcXFwiICsgdmFsdWUpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9LFxcbiAgICAgICAgZXZhbEpTUnVsZShpdGVtLFxcbiAgICAgICAgICAgIGpzUnVsZSkge1xcbiAgICAgICAgICAgIGxldCBydWxlID0ganNSdWxlLnJlcGxhY2UoXFxcIkBqczpcXFwiLFxcbiAgICAgICAgICAgICAgICBcXFwiXFxcIik7XFxuICAgICAgICAgICAgcnVsZSA9IHJ1bGUudHJpbSgpO1xcbiAgICAgICAgICAgIC8vbG9nKCQuc3RyaW5naWZ5KHJ1bGUpKVxcbiAgICAgICAgICAgIGxldCBpbnB1dCA9IGl0ZW07XFxuICAgICAgICAgICAgaWYgKHJ1bGUuc3RhcnRzV2l0aChcXFwiKFxcXCIpKSB7XFxuICAgICAgICAgICAgICAgIGV2YWwoXFxcInJlc3VsdCA9IFxcXCIgKyBydWxlKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAvKipcXG4gICAgICAgICAgICAgICAgICog6L+Y5Y6f5oiQICQudG9TdHJpbmcoLi4uKSDnmoTmnIDnu4jnu5PmnpzvvIzovr7liLDmnIDnu4jlpITnkIbmlrnlvI/ot5/kuIrpnaLnmoQgaWYg5LiA6Ie055qE55uu55qEXFxuICAgICAgICAgICAgICAgICAqL1xcbiAgICAgICAgICAgICAgICBldmFsKFxcXCJyZXN1bHQgPSBcXFwiICsgXFxcIigoKSA9PiB7XFxcIiArIHJ1bGUgKyBcXFwifSkoKVxcXCIpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0IHx8IFxcXCJcXFwiO1xcbiAgICAgICAgfSxcXG4gICAgICAgIGdldFRpdGxlKHNyYywgY2F0ZWdvcnkpIHtcXG4gICAgICAgICAgICBsZXQgdGl0bGUgPSBcXFwiXFxcIjtcXG4gICAgICAgICAgICBsZXQgdGl0bGVSdWxlID0gY2F0ZWdvcnkgfHwgXFxcImEmJlRleHRcXFwiO1xcbiAgICAgICAgICAgIGlmICh0aXRsZVJ1bGUuc3RhcnRzV2l0aChcXFwiQGpzOlxcXCIpKSB7XFxuICAgICAgICAgICAgICAgIHRpdGxlID0gdGhpcy5ldmFsSlNSdWxlKHNyYywgdGl0bGVSdWxlKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB0aXRsZSA9IHBhcnNlRG9tRm9ySHRtbChzcmMsIHRpdGxlUnVsZSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiB0aXRsZSB8fCBcXFwiXFxcIjtcXG4gICAgICAgIH0sXFxuICAgICAgICBnZXRVcmwoc3JjLCBjYXRlZ29yeSkge1xcbiAgICAgICAgICAgIGxldCB1cmwgPSBcXFwiXFxcIjtcXG4gICAgICAgICAgICBsZXQgdXJsUnVsZSA9IGNhdGVnb3J5LumTvuaOpSB8fCBcXFwiYSYmaHJlZlxcXCI7XFxuICAgICAgICAgICAgaWYgKHVybFJ1bGUuc3RhcnRzV2l0aChcXFwiQGpzOlxcXCIpKSB7XFxuICAgICAgICAgICAgICAgIHVybCA9IHRoaXMuZXZhbEpTUnVsZShzcmMsIHVybFJ1bGUpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHVybCA9IHBkKHNyYywgdXJsUnVsZSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2F0ZWdvcnku6ZO+5o6l5aSE55CGID09IFxcXCJmdW5jdGlvblxcXCIpIHtcXG4gICAgICAgICAgICAgICAgdXJsID0gY2F0ZWdvcnku6ZO+5o6l5aSE55CGKHVybCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiB1cmwgfHwgXFxcIlxcXCI7XFxuICAgICAgICB9LFxcbiAgICAgICAgaXNOdWxsKHBhcmFtKSB7XFxuICAgICAgICAgICAgaWYgKHBhcmFtID09IG51bGwpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgICAgIH0sXFxuICAgICAgICBpc0Jvb2xlYW4odmFyaWFibGUpIHtcXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhcmlhYmxlICE9PSBcXFwiYm9vbGVhblxcXCIpIHtcXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLlvIDlkK/mipjlj6Dor7fkvKDlhaXluIPlsJTlgLxcXFwiKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LFxcbiAgICAgICAg5riF6ZmkKGxpc3QpIHtcXG4gICAgICAgICAgICBpZiAodGhpcy5pc051bGwobGlzdCkpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmIChsaXN0LmNvbnN0cnVjdG9yID09IFN0cmluZykge1xcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIua4hemZpOaKpemUmTror7fkvKDliJfooahcXFwiKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdGhpcy5jbGVhcnMgPSBsaXN0O1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xcbiAgICAgICAgfSxcXG4gICAgICAgIOWFqOa4hShsaXN0KSB7XFxuICAgICAgICAgICAgaWYgKHRoaXMuaXNOdWxsKGxpc3QpKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB2YXIgYyA9IHRoaXMuY2xlYXJhbGw7XFxuICAgICAgICAgICAgbGlzdCA9IGMuY29uY2F0KGxpc3QpO1xcbiAgICAgICAgICAgIHRoaXMuY2xlYXJhbGwgPSBsaXN0O1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xcbiAgICAgICAgfSxcXG4gICAgICAgIOa6kOeggShpbnB1dCkge1xcbiAgICAgICAgICAgIHRoaXMuaHRtbCA9IGlucHV0O1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xcbiAgICAgICAgfSxcXG4gICAgICAgIOeVjOmdoihpbnB1dCkge1xcbiAgICAgICAgICAgIHRoaXMubGF5b3V0ID0gaW5wdXQ7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICB9LFxcbiAgICAgICAg6aG156CBKGlucHV0KSB7XFxuICAgICAgICAgICAgdGhpcy5wYWdlID0gaW5wdXQ7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICB9LFxcbiAgICAgICAg54q25oCBKGlucHV0KSB7XFxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IGlucHV0O1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xcbiAgICAgICAgfSxcXG4gICAgICAgIOW8gOWQr+aQnOe0oihpbnB1dCkge1xcbiAgICAgICAgICAgIGlmIChpbnB1dCA9PSB1bmRlZmluZWQpIHtcXG4gICAgICAgICAgICAgICAgaW5wdXQgPSB0cnVlO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB0aGlzLnNlYXJjaCA9IGlucHV0O1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xcbiAgICAgICAgfSxcXG4gICAgICAgIOW8gOWQr+aKmOWPoChpbnB1dCkge1xcbiAgICAgICAgICAgIGlmIChpbnB1dCA9PSB1bmRlZmluZWQpIHtcXG4gICAgICAgICAgICAgICAgaW5wdXQgPSB0cnVlO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB0aGlzLmlzQm9vbGVhbihpbnB1dCk7XFxuICAgICAgICAgICAgdGhpcy5vcGVuID0gaW5wdXQ7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICB9LFxcbiAgICAgICAgc2V0VGl0bGUoaywgaSwgdCkge1xcbiAgICAgICAgICAgIHJldHVybiBrID09IGkgPyBcXFwi4oCc4oCc4oCd4oCdXFxcIiArIHQuZm9udGNvbG9yKHRoaXMu5YiG57G76aKc6ImyKSA6IHQ7XFxuICAgICAgICB9LFxcbiAgICAgICAgYWN0aW9uKG9iaikge1xcbiAgICAgICAgICAgIHJldHVybiBbe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogXFxcIua4hemZpOeKtuaAgVxcXCIsXFxuICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKChvYmopID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGxvZyhvYmopO1xcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihvYmouc3RhdGUpO1xcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihcXFwiaGVhZC5jYXRlXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKCdjYXRlX2J1dHRvbicpO1xcbiAgICAgICAgICAgICAgICAgICAgb2JqLmFsbC5mb3JFYWNoKChpdGVtKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihpdGVtKTtcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgb2JqLmNsLmZvckVhY2goKGl0ZW0pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKGl0ZW0pO1xcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICB9LCBvYmopLFxcbiAgICAgICAgICAgIH0sIF07XFxuICAgICAgICB9LFxcbiAgICAgICAgY2hlY2tQYXJhbSgpIHtcXG4gICAgICAgICAgICB2YXIgb2JqID0ge307XFxuICAgICAgICAgICAgaWYgKHRoaXMucGFnZSA9PSAwICYmIHR5cGVvZiBwYWdlID09IFxcXCJ1bmRlZmluZWRcXFwiKSB7XFxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi6K+35Lyg5YWl6aG156CBXFxcIik7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwYWdlID09IFxcXCJ1bmRlZmluZWRcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICBvYmpbXFxcIumhteeggVxcXCJdID0gdGhpcy5wYWdlO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgb2JqW1xcXCLpobXnoIFcXFwiXSA9IHBhZ2U7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKHRoaXMuaHRtbCA9PSBcXFwiZW1wdHlcXFwiICYmIHR5cGVvZiBodG1sID09IFxcXCJ1bmRlZmluZWRcXFwiKSB7XFxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi6K+35Lyg5YWl5rqQ56CBXFxcIik7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBodG1sID09IFxcXCJ1bmRlZmluZWRcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICBvYmpbXFxcIua6kOeggVxcXCJdID0gdGhpcy5odG1sO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgb2JqW1xcXCLmupDnoIFcXFwiXSA9IGh0bWw7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKHRoaXMubGF5b3V0ID09IFxcXCJ1bmRlZmluZWRcXFwiICYmIHR5cGVvZiBkID09IFxcXCJ1bmRlZmluZWRcXFwiKSB7XFxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi6K+35Lyg5YWl55WM6Z2iXFxcIik7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkID09IFxcXCJ1bmRlZmluZWRcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICBvYmpbXFxcIueVjOmdolxcXCJdID0gdGhpcy5sYXlvdXQ7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBvYmpbXFxcIueVjOmdolxcXCJdID0gZDtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gb2JqO1xcbiAgICAgICAgfSxcXG4gICAgICAgIOWIm+W7uuWKqOaAgeWIhuexuyhydWxlT2JqKSB7XFxuICAgICAgICAgICAgbGV0IGl0ZW1zID0gW107XFxuICAgICAgICAgICAgbGV0IGNhdGVzID0gW107XFxuICAgICAgICAgICAgaWYgKHJ1bGVPYmogPT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICAgICAgICAgIHJ1bGVPYmogPSBbXTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgLy/liJ3lp4vljJblj5jph4/lvIDlp4tcXG4gICAgICAgICAgICBjb25zdCBwYXJhbSA9IHRoaXMuY2hlY2tQYXJhbSgpO1xcbiAgICAgICAgICAgIGNvbnN0IHBhZ2UgPSBwYXJhbS7pobXnoIE7XFxuICAgICAgICAgICAgY29uc3QgaHRtbCA9IHBhcmFtLua6kOeggTtcXG4gICAgICAgICAgICBjb25zdCBkID0gcGFyYW0u55WM6Z2iO1xcbiAgICAgICAgICAgIGNvbnN0IOeKtuaAgSA9IHRoaXMuc3RhdGU7XFxuICAgICAgICAgICAgY29uc3Qgc2VhcmNoID0gdGhpcy5zZWFyY2g7XFxuICAgICAgICAgICAgY29uc3QgZW1wdHkgPSBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICAgICAgY29uc3Qg5oqY5Y+g54q25oCBID0gdGhpcy5vcGVuO1xcbiAgICAgICAgICAgIHZhciDlsZXlvIAgPSB0aGlzLuWxleW8gDtcXG4gICAgICAgICAgICB2YXIg5oqY5Y+gID0gdGhpcy7mipjlj6A7XFxuICAgICAgICAgICAgdmFyIOWFqOa4hSA9IHRoaXMuY2xlYXJhbGw7XFxuICAgICAgICAgICAgdmFyIOa4hemZpCA9IHRoaXMuY2xlYXJzO1xcbiAgICAgICAgICAgIC8v5Yid5aeL5YyW5Y+Y6YeP57uT5p2fXFxuICAgICAgICAgICAgbGV0IGluaXRfY2F0ZSA9IG5ldyBBcnJheSgyMCkuZmlsbChcXFwiMFxcXCIpO1xcbiAgICAgICAgICAgIGNvbnN0IGZvbGQgPSBnZXRNeVZhcihNWV9SVUxFLmdyb3VwLCBcXFwiMFxcXCIpO1xcbiAgICAgICAgICAgIGNvbnN0IGNhdGVfdGVtcCA9IEpTT04ucGFyc2UoXFxuICAgICAgICAgICAgICAgIGdldE15VmFyKFxcXCJoZWFkLmNhdGVcXFwiLCBKU09OLnN0cmluZ2lmeShpbml0X2NhdGUpKVxcbiAgICAgICAgICAgICk7XFxuICAgICAgICAgICAgaWYgKHNlYXJjaCAmJiBwYWdlID09IDEpIHtcXG4gICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCInaGlrZXI6Ly9zZWFyY2g/cnVsZT1cXFwiICsgTVlfUlVMRS50aXRsZSArIFxcXCImcz0nK2lucHV0XFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXCLmkJzntKLlhbPplK7or41cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJpbnB1dFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0TXlWYXIoXFxcImtleXdvcmRcXFwiLCBcXFwiXFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwia2V5d29yZFxcXCIsIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBjb25zdCBjYXRlZ29yaWVzID0gW107XFxuICAgICAgICAgICAgcnVsZU9iai5mb3JFYWNoKCh4KSA9PiB7XFxuICAgICAgICAgICAgICAgIHZhciBsaXN0ID0gW107XFxuICAgICAgICAgICAgICAgIC8vbG9nKHgpXFxuICAgICAgICAgICAgICAgIGlmICh4Lmpzb24gIT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICAgICAgICAgICAgICB4Lmpzb24ubWFwKGsgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3JpZXMucHVzaChKU09OLnN0cmluZ2lmeShrKS5yZXBsYWNlKC9eXFxcXFt8XFxcXF0kL2csICcnKSlcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICAvL2NhdGVnb3JpZXMucHVzaCh4Lmpzb24pXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaWYgKHgu5LiA57qn5a6a5L2NKSB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoeC7kuIDnuqflrprkvY0uc3RhcnRzV2l0aChcXFwiQGpzOlxcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IHRoaXMuZXZhbEpTUnVsZShodG1sLCB4LuS4gOe6p+WumuS9jSk7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QgPSBwZGZhKGh0bWwsIHgu5LiA57qn5a6a5L2NKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAoeC7lpKfnsbvlrprkvY0pIHtcXG4gICAgICAgICAgICAgICAgICAgIGlmICh4LuWkp+exu+WumuS9jS5zdGFydHNXaXRoKFxcXCJAanM6XFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ID0gdGhpcy5ldmFsSlNSdWxlKGh0bWwsIHgu5aSn57G75a6a5L2NKTtcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IFtwZGZhKGh0bWwsIHgu5aSn57G75a6a5L2NKS5qb2luKCdcXFxcbicpXTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcblxcblxcbiAgICAgICAgdmFyIOS4gOe6pyA9IGxpc3QubWFwKChzKSA9PiB7XFxuICAgICAgICAgIHZhciBzbGlzdCA9IFtdO1xcbiAgICAgICAgICBpZiAoIShcXFwi5bCP57G7XFxcIiBpbiB4KSkge1xcbiAgICAgICAgICAgIHgu5bCP57G7ID0gXFxcImJvZHkmJmE6bm90KDptYXRjaGVzKOmmlumhtSkpOm5vdChhOm5vdChbaHJlZl0pKVxcXCI7XFxuICAgICAgICAgIH1cXG4gICAgICAgICAgaWYgKHgu5bCP57G7LnN0YXJ0c1dpdGgoXFxcIkBqczpcXFwiKSkge1xcbiAgICAgICAgICAgIHNsaXN0ID0gdGhpcy5ldmFsSlNSdWxlKHMsIHgu5bCP57G7KTtcXG4gICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBzbGlzdCA9IHBkZmEocywgeC7lsI/nsbspO1xcbiAgICAgICAgICB9XFxuICAgICAgICAgIC8vLS3pop3lpJblpITnkIYtLVxcbiAgICAgICAgICBpZiAoKCflop7liqAnIGluIHgpKSB7XFxuICAgICAgICAgICAgaWYgKHgu5aKe5YqgLmNvbnN0cnVjdG9yID09IFN0cmluZykge1xcbiAgICAgICAgICAgICAgeC7lop7liqAgPSBldmFsKHgu5aKe5YqgKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgc2xpc3QgPSB4LuWinuWKoC5jb25jYXQoc2xpc3QpO1xcbiAgICAgICAgICB9XFxuICAgICAgICAgIGlmICgoJ+ihpeWFhScgaW4geCkpIHtcXG4gICAgICAgICAgICBpZiAoeC7ooaXlhYUuY29uc3RydWN0b3IgPT0gU3RyaW5nKSB7XFxuICAgICAgICAgICAgICB4LuihpeWFhSA9IGV2YWwoeC7ooaXlhYUpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBzbGlzdCA9IHNsaXN0LmNvbmNhdCh4LuihpeWFhSk7XFxuICAgICAgICAgIH1cXG4gICAgICAgICAgLy8tLemineWkluWkhOeQhi0tXFxuICAgICAgICAgIHZhciDlrprkvY0gPSBzbGlzdC5tYXAoKGl0ZW0pID0+IHtcXG4gICAgICAgICAgICB2YXIgdGl0bGUgPSB0aGlzLmdldFRpdGxlKGl0ZW0sIHgu5qCH6aKYKTtcXG4gICAgICAgICAgICB2YXIgdXJsID0gdGhpcy5nZXRVcmwoaXRlbSwgeCk7XFxuICAgICAgICAgICAgdmFyIG9iaiA9IHtcXG4gICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSwgdXJsOiB1cmxcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIGlmICgoJ2V4dCcgaW4geCkpIHtcXG4gICAgICAgICAgICAgIG9ialsnZXh0J10gPSB4LmV4dDtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iaik7XFxuICAgICAgICAgIH0pO1xcbiAgICAgICAgICByZXR1cm4g5a6a5L2NO1xcbiAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIC8vbG9nKOS4gOe6pylcXG4gICAgICAgICAgICAgICAgLy9sb2co5LiA57qnLmxlbmd0aClcXG4gICAgICAgICAgICAgICAgaWYgKOS4gOe6py5sZW5ndGggPT0gMSkge1xcbiAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcmllcy5wdXNoKOS4gOe6py5qb2luKFxcXCJcXFxcblxcXCIpKTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIOS4gOe6py5mb3JFYWNoKChpdGVtKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcmllcy5wdXNoKGl0ZW0uam9pbihcXFwiLFxcXCIpKTtcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIC8vbG9nKGNhdGVnb3JpZXMpXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgaWYgKOaKmOWPoOeKtuaAgSkge1xcbiAgICAgICAgICAgICAgICBpZiAocGFnZSA9PSAxKSB7XFxuICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZm9sZCA9PT0gXFxcIjFcXFwiID8g5oqY5Y+gIDog5bGV5byALFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZShcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRpdGxlLCBmb2xkLCB1LCBhbGwsIGV4cHMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb2xkID0gZ2V0TXlWYXIoTVlfUlVMRS5ncm91cCwgZm9sZCk7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgW+WxleW8gCwg5oqY5Y+gXSA9IGV4cHM7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9sZCA9PSAxKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN4ID0gZmluZEl0ZW1zQnlDbHModGl0bGUgKyAnY2F0ZV9idXR0b24nKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcignY2F0ZV9idXR0b24nLCBjeCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlSXRlbUJ5Q2xzKHRpdGxlICsgJ2NhdGVfYnV0dG9uJyk7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjeCA9IHN0b3JhZ2UwLmdldE15VmFyKCdjYXRlX2J1dHRvbicsIFtdKS5tYXAoeCA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhbJ2NvbF90eXBlJ10gPSB4Wydjb2xfdHlwZSddID8geFsnY29sX3R5cGUnXSA6IHhbJ3R5cGUnXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHg7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkSXRlbUFmdGVyKHRpdGxlICsgJ2NhdGVfbGluZScsIGN4KVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyphbGwuZm9yRWFjaCgoaXRlbSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKGl0ZW0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ki9cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0odGl0bGUgKyAnY2F0ZV9leHAnLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGZvbGQgPT0gMSA/IOWxleW8gCA6IOaKmOWPoCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihNWV9SVUxFLmdyb3VwLCBmb2xkID09PSBcXFwiMVxcXCIgPyBcXFwiMFxcXCIgOiBcXFwiMVxcXCIpO1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9yZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNWV9SVUxFLnRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICDnirbmgIEsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIOWFqOa4hSwgW+WxleW8gCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOaKmOWPoFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICksXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogTVlfUlVMRS50aXRsZSArICdjYXRlX2V4cCcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmdDbGljazogdGhpcy5hY3Rpb24oe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU6IOeKtuaAgSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbDog5YWo5riFLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2w6IOa4hemZpCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmIChwYWdlID09IDEpIHtcXG4gICAgICAgICAgICAgICAgY2F0ZWdvcmllcy5mb3JFYWNoKChjYXRlZ29yeSwgaW5kZXgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIC8vbG9nKGNhdGVnb3J5KVxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHN1Yl9jYXRlZ29yaWVzID0gW107XFxuICAgICAgICAgICAgICAgICAgICAvKmlmICjlsI/nsbvlrprkvY0uaW5jbHVkZXMoXFxcIjtcXFwiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICBzdWJfY2F0ZWdvcmllcyA9IHBkZmEoY2F0ZWdvcnksIOWwj+exu+WumuS9jS5zcGxpdChcXFwiO1xcXCIpWzBdKTtcXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Yl9jYXRlZ29yaWVzLmxlbmd0aCA9PSAwKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc3ViX2NhdGVnb3JpZXMgPSBwZGZhKGNhdGVnb3J5LCDlsI/nsbvlrprkvY0uc3BsaXQoXFxcIjtcXFwiKVsxXSk7XFxuICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ki9cXG4gICAgICAgICAgICAgICAgICAgIC8vbG9nKGluZGV4KVxcbiAgICAgICAgICAgICAgICAgICAgc3ViX2NhdGVnb3JpZXMgPSBKU09OLnBhcnNlKGBbJHtjYXRlZ29yeX1dYCk7XFxuICAgICAgICAgICAgICAgICAgICAvL2xvZyhzdWJfY2F0ZWdvcmllcylcXG4gICAgICAgICAgICAgICAgICAgIC8vIHN1Yl9jYXRlZ29yaWVzID0gcGRmYShjYXRlZ29yeSwg5bCP57G75a6a5L2NKTtcXG4gICAgICAgICAgICAgICAgICAgIC8vfVxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy/lpKfnsbtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJfY2F0ZWdvcmllcy5mb3JFYWNoKChpdGVtLCBrZXkpID0+IHtcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9sZXQgdGl0bGUgPSBwZGZoKGl0ZW0sIF/lpKfnsbvmoIfpopgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSBpdGVtLnRpdGxlO1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIOaOkumZpCAhPSBcXFwidW5kZWZpbmVkXFxcIiAmJiDmjpLpmaQgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gdGl0bGUucmVwbGFjZShuZXdSZWdFeHAo5o6S6ZmkLCBcXFwiZ1xcXCIpLCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGpzb24gPSAnJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uID0gaXRlbS51cmw7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwYXJhbXMgPSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlX3RlbXA6IGNhdGVfdGVtcCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleToga2V5LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogcGFnZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyczog5riF6ZmkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbjoganNvbixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlOiDnirbmgIEsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxjbGVhcnM6IOWFqOa4hSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9sZXQgdXJsID0gcGQoaXRlbSwgX+Wkp+exu+mTvuaOpSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB1cmwgPSBpdGVtLnVybDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyppZiAo5aSn57G75aSE55CGKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0g5LiA57qn5YiG57G75aSE55CGKHVybCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0qL1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2xvZyh1cmwpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuc2V0VGl0bGUoa2V5LnRvU3RyaW5nKCksIGNhdGVfdGVtcFtpbmRleF0sIHRpdGxlKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoXFxcImhpa2VyOi8vZW1wdHkjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChwYXJhbXMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5ld19jYXRlID0gW107XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5jbGVhcnMuZm9yRWFjaCgoaXRlbSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihpdGVtKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5hbGxjbGVhcnMuZm9yRWFjaCgoaXRlbSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihpdGVtKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoJ2NhdGVfYnV0dG9uJyk7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5jYXRlX3RlbXAuZm9yRWFjaCgoY2F0ZSwgaW5kZXgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19jYXRlLnB1c2goaW5kZXggPT09IDAgPyBwYXJhbXMua2V5LnRvU3RyaW5nKCkgOiBcXFwiMFxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcImhlYWQuY2F0ZVxcXCIsIEpTT04uc3RyaW5naWZ5KG5ld19jYXRlKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbXMuanNvbi5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwiZHRfXFxcIiArIHBhcmFtcy5qc29uLnR5cGUsIHBhcmFtcy5qc29uLnZhbHVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKHBhcmFtcy5zdGF0ZSwgcGFyYW1zLmpzb24pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IE1ZX1JVTEUudGl0bGUgKyAnY2F0ZV9saW5lJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL+Wwj+exu1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Yl9jYXRlZ29yaWVzLmZvckVhY2goKGl0ZW0sIGtleSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXh0cmFwb3MgPSBmYWxzZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyppZiAoaXRlbS5pbmNsdWRlcygndHlwZT1cXFwiQGV4dHJhXFxcIicpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFwb3MgPSB0cnVlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbG9nKCfpmYTliqDlrprkvY0nKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ki9cXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4dHJhcG9zKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSBwZGZoKGl0ZW0sIFxcXCJhJiZUZXh0XFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIOaOkumZpCAhPSBcXFwidW5kZWZpbmVkXFxcIiAmJiDmjpLpmaQgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IHRpdGxlLnJlcGxhY2UobmV3IFJlZ0V4cCjmjpLpmaQsIFxcXCJnXFxcIiksIFxcXCJcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBqc29uID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHBkZmgoaXRlbSwgXFxcImEmJnN0YXRlXFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHBkZmgoaXRlbSwgXFxcImEmJnZhbHVlXFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy92YXIgdGl0bGUgPSBwZGZoKGl0ZW0sIOWIhuexu+agh+mimCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSBpdGVtLnRpdGxlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiDmjpLpmaQgIT0gXFxcInVuZGVmaW5lZFxcXCIgJiYg5o6S6ZmkICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSB0aXRsZS5yZXBsYWNlKG5ldyBSZWdFeHAo5o6S6ZmkLCBcXFwiZ1xcXCIpLCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIganNvbiA9IFxcXCJcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypzd2l0Y2ggKHRydWUpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSDliIbnsbvpk77mjqUuaW5jbHVkZXMoXFxcIkBAQFxcXCIpOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24gPSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBwZGZoKGl0ZW0sIOWIhuexu+mTvuaOpS5zcGxpdChcXFwiQEBAXFxcIilbMF0pLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHBkZmgoaXRlbSwg5YiG57G76ZO+5o6lLnNwbGl0KFxcXCJAQEBcXFwiKVsxXSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSDliIbnsbvpk77mjqUuaW5jbHVkZXMoXFxcIkBAXFxcIik6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbiA9IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IOWIhuexu+mTvuaOpS5zcGxpdChcXFwiQEBcXFwiKVswXSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBwZGZoKGl0ZW0sIOWIhuexu+mTvuaOpS5zcGxpdChcXFwiQEBcXFwiKVsxXSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uID0gaXRlbS51cmw7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8ganNvbiA9IHBkKGl0ZW0sIOWIhuexu+mTvuaOpSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ki9cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24gPSBpdGVtLnVybDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdmFyIGpzb2495YiG57G76ZO+5o6lLmluY2x1ZGVzKCdAQEAnKT97XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOnBkZmgoaXRlbSzliIbnsbvpk77mjqUuc3BsaXQoJ0BAQCcpWzBdKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOnBkZmgoaXRlbSzliIbnsbvpk77mjqUuc3BsaXQoJ0BAQCcpWzFdKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTpwZChpdGVtLOWIhuexu+mTvuaOpSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb2495YiG57G76ZO+5o6lLmluY2x1ZGVzKCdAQCcpP3tcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU65YiG57G76ZO+5o6lLnNwbGl0KCdAQCcpWzBdLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6cGRmaChpdGVtLOWIhuexu+mTvuaOpS5zcGxpdCgnQEAnKVsxXSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH06cGQoaXRlbSzliIbnsbvpk77mjqUpOyovXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBhcmFtcyA9IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVfdGVtcDogY2F0ZV90ZW1wLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBrZXksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlOiBwYWdlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbjoganNvbixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlOiDnirbmgIEsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxjbGVhcnM6IOWFqOa4hSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZXMucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGhpcy5zZXRUaXRsZShrZXkudG9TdHJpbmcoKSwgY2F0ZV90ZW1wW2luZGV4XSwgdGl0bGUpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiB0aXRsZSA9PSBcXFwi8J2QhfCdkILwnZ+QXFxcIiA/IFxcXCJoaWtlcjovL3BhZ2UvZmMyP3VybD1cXFwiICsgZ2V0TXlWYXIoXFxcImZjMlxcXCIpICsgXFxcIiNmeXBhZ2Ujbm9IaXN0b3J5I1xcXCIgOiAkKFxcXCJoaWtlcjovL2VtcHR5XFxcIiArIFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChwYXJhbXMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmFsbGNsZWFycy5mb3JFYWNoKChpdGVtKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKGl0ZW0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcignY2F0ZV9idXR0b24nKTtcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmNhdGVfdGVtcFtwYXJhbXMuaW5kZXhdID0gcGFyYW1zLmtleS50b1N0cmluZygpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwiaGVhZC5jYXRlXFxcIiwgSlNPTi5zdHJpbmdpZnkocGFyYW1zLmNhdGVfdGVtcCkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1zLmpzb24uY29uc3RydWN0b3IgPT09IE9iamVjdCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcImR0X1xcXCIgKyBwYXJhbXMuanNvbi50eXBlLCBwYXJhbXMuanNvbi52YWx1ZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihwYXJhbXMuc3RhdGUsIHBhcmFtcy5qc29uKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsczogTVlfUlVMRS50aXRsZSArICdjYXRlX2J1dHRvbicsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVzLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsczogTVlfUlVMRS50aXRsZSArICdjYXRlX2J1dHRvbicsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmIChmb2xkID09PSBcXFwiMVxcXCIgfHwg5oqY5Y+g54q25oCBID09IGZhbHNlKSB7XFxuICAgICAgICAgICAgICAgIGl0ZW1zID0gaXRlbXMuY29uY2F0KGNhdGVzKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKGZvbGQgPT09IFxcXCIwXFxcIikge1xcbiAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcignY2F0ZV9idXR0b24nLCBjYXRlcylcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzZXRQcmVSZXN1bHQgIT0gJ3VuZGVmaW5lZCcpIHtcXG4gICAgICAgICAgICAgICAgaXRlbXMgPSBkLmNvbmNhdChpdGVtcyk7XFxuICAgICAgICAgICAgICAgIC8v5riF56m657un5om/5pWw57uEXFxuICAgICAgICAgICAgICAgIGQubGVuZ3RoID0gMDtcXG4gICAgICAgICAgICAgICAgc2V0UHJlUmVzdWx0KGl0ZW1zKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBpdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKGl0ZW0pO1xcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sXFxuICAgIH07XFxuICAgIG9iai7pooTorr4ob3B0aW9ucyk7XFxuICAgIHJldHVybiBvYmo7XFxufVxcblxcbnZhciDnirbmgIEgPVxcbiAgICB0eXBlb2Yg54q25oCB5qCH6K6wICE9IFxcXCJ1bmRlZmluZWRcXFwiICYmIOeKtuaAgeagh+iusCAhPSBcXFwiXFxcIiA/IOeKtuaAgeagh+iusCA6IE1ZX1JVTEUudXJsO1xcblxcbmxldCBkdF9kZWJ1ZyA9IGZhbHNlO1xcblxcbmFkZExpc3RlbmVyKFxcbiAgICBcXFwib25DbG9zZVxcXCIsXFxuICAgICQudG9TdHJpbmcoKCkgPT4ge30pXFxuKTtcXG5cXG52YXIgQ3JlYXRlID0ge1xcbiAgICBuZXh0UGFnZTogZnVuY3Rpb24oKSB7XFxuICAgICAgICB2YXIgcmVzdWx0ID0gZmFsc2U7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIHZhciBuZXh0ID0gZXZhbCjkuIvkuIDpobUpO1xcbiAgICAgICAgICAgIC8vbG9nKCduOicrbmV4dClcXG4gICAgICAgICAgICBpZiAobmV4dCA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+S4i+S4gOmhtemTvuaOpeS4uuepuicpXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7XFxuICAgICAgICAgICAgaWYgKHRydWVfdXJsID09IG5leHQpIHtcXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgIC8vbG9nKFxcXCLlj6/og73kuI3lrZjlnKjkuIvkuIDpobXmiJbogIXkuIvkuIDpobXlrprkvY3mnInpl67pophcXFwiKTtcXG4gICAgICAgICAgICAvL2xvZyhcXFwi6ZSZ6K+v5L+h5oGvOlxcXCIgKyBlLm1lc3NhZ2UpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKChuZXh0ID09IFxcXCJcXFwiIHx8IG5leHQgPT0gdW5kZWZpbmVkKSAmJiBwYWdlID09IDEpIHtcXG4gICAgICAgICAgICBuZXh0ID0gdHJ1ZV91cmw7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIC8vcmVzdWx0PWZhbHNlO1xcbiAgICAgICAgICAgIG5leHQgPSBnZXRNeVZhcijnirbmgIEpO1xcbiAgICAgICAgfVxcbiAgICAgICAgLy9sb2coJ2wnK3RydWVfdXJsKVxcbiAgICAgICAgLy9sb2coJ24nK25leHQpXFxuICAgICAgICBpZiAocGFnZSAhPSAxKSB7XFxuICAgICAgICAgICAgaWYgKHRydWVfdXJsID09IG5leHQgJiYgIXJlc3VsdCkge1xcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiByZXN1bHQ7XFxuICAgICAgICAvL3B1dE15VmFyKOeKtuaAgSwgbmV4dCk7XFxuICAgIH0sXFxuICAgIGdldEJhY2tJbWFnZTogZnVuY3Rpb24oaW1ndXJsKSB7XFxuICAgICAgICB2YXIgcmVzdWx0ID0gaW1ndXJsO1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICByZXN1bHQgPSAvdXJsKD86XFxcXHMrKT9cXFxcKCguKj8pXFxcXCkvZ1xcbiAgICAgICAgICAgICAgICAuZXhlYyhpbWd1cmwpWzFdXFxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8oJ3xcXFwifCZxdW90OykvZ20sIFxcXCJcXFwiKTtcXG4gICAgICAgIH0gY2F0Y2gge31cXG4gICAgICAgIHJldHVybiByZXN1bHQ7XFxuICAgIH0sXFxuICAgIGh0dHBIYW5kbGU6IGZ1bmN0aW9uKGlucHV0KSB7XFxuICAgICAgICBpZiAoaW5wdXQuc3RhcnRzV2l0aChcXFwiaHR0cFxcXCIpKSB7XFxuICAgICAgICAgICAgcmV0dXJuIGlucHV0O1xcbiAgICAgICAgfSBlbHNlIGlmIChpbnB1dC5zdGFydHNXaXRoKFxcXCIvL1xcXCIpKSB7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJodHRwczpcXFwiICsgaW5wdXQ7XFxuICAgICAgICB9IGVsc2UgaWYgKGlucHV0LnN0YXJ0c1dpdGgoXFxcIi9cXFwiKSkge1xcbiAgICAgICAgICAgIHJldHVybiBNWV9IT01FICsgaW5wdXQ7XFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgIGltZ0hhbmRsZTogZnVuY3Rpb24oaXRlbSwgcnVsZSkge1xcbiAgICAgICAgdmFyIGltZyA9IFxcXCJcXFwiO1xcbiAgICAgICAgaWYgKHJ1bGUuaW1nLnN0YXJ0c1dpdGgoXFxcInBkXFxcIikpIHtcXG4gICAgICAgICAgICBpbWcgPSBldmFsKHJ1bGUuaW1nKTtcXG4gICAgICAgIH0gZWxzZSBpZiAocnVsZS5iYWNraW1nKSB7XFxuICAgICAgICAgICAgaW1nID0gcGRmaChpdGVtLCBydWxlLmltZyk7XFxuICAgICAgICAgICAgaW1nID0gdGhpcy5nZXRCYWNrSW1hZ2UoaW1nKTtcXG4gICAgICAgICAgICBpbWcgPSB0aGlzLmh0dHBIYW5kbGUoaW1nKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgaW1nID0gcGRmaChpdGVtLCBydWxlLmltZyk7XFxuICAgICAgICAgICAgaWYgKCFpbWcuc3RhcnRzV2l0aChcXFwiaHR0cFxcXCIpKSB7XFxuICAgICAgICAgICAgICAgIGltZyA9IHBkKGl0ZW0sIHJ1bGUuaW1nKTtcXG4gICAgICAgICAgICAgICAgaW1nID0gdGhpcy5odHRwSGFuZGxlKGltZyk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIGltZyArIHJ1bGUucmVmO1xcbiAgICB9LFxcbiAgICB1cmxIYW5kbGU6IGZ1bmN0aW9uKGl0ZW0sIHJ1bGUpIHtcXG4gICAgICAgIHZhciBocmVmID0gXFxcIlxcXCI7XFxuICAgICAgICBpZiAocnVsZS51cmwuc3RhcnRzV2l0aChcXFwicGRcXFwiKSkge1xcbiAgICAgICAgICAgIGhyZWYgPSBldmFsKHJ1bGUudXJsKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgaHJlZiA9IHBkKGl0ZW0sIHJ1bGUudXJsKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGhyZWYgPSBydWxlLmltdCA/IGhyZWYgKyBcXFwiI2ltbWVyc2l2ZVRoZW1lI1xcXCIgOiBocmVmO1xcbiAgICAgICAgcmV0dXJuIGhyZWY7XFxuICAgIH0sXFxuICAgIHNldENvbnRlbnQ6IGZ1bmN0aW9uKGl0ZW0sIGlucHV0KSB7XFxuICAgICAgICBsZXQgb3V0cHV0ID0gXFxcIlxcXCI7XFxuICAgICAgICBpZiAoaW5wdXQgPT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChpbnB1dC5zdGFydHNXaXRoKFxcXCJwZFxcXCIpKSB7XFxuICAgICAgICAgICAgb3V0cHV0ID0gZXZhbChpbnB1dCk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIG91dHB1dCA9IHBkZmgoaXRlbSwgaW5wdXQpO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIG91dHB1dDtcXG4gICAgfSxcXG4gICAgcmVmcmVzaDogZnVuY3Rpb24oKSB7XFxuICAgICAgICBhZGRMaXN0ZW5lcihcXG4gICAgICAgICAgICBcXFwib25SZWZyZXNoXFxcIixcXG4gICAgICAgICAgICAkLnRvU3RyaW5nKCh1KSA9PiB7XFxuICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoXFxcInlpbGlzdFxcXCIpO1xcbiAgICAgICAgICAgICAgICAvL3ZhciBwID0gc3RvcmFnZTAuZ2V0TXlWYXIoJ3NwYWdlJywgJycpO1xcbiAgICAgICAgICAgICAgICAvL3B1dE15VmFyKHUsIHApO1xcbiAgICAgICAgICAgIH0sIOeKtuaAgSlcXG4gICAgICAgICk7XFxuICAgIH0sXFxuICAgIGdldEJvb2xlYW5WYWx1ZTogZnVuY3Rpb24odmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xcbiAgICAgICAgcmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgPyBCb29sZWFuKHZhbHVlKSA6IChkZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCA/IGRlZmF1bHRWYWx1ZSA6IHRydWUpO1xcbiAgICB9LFxcbiAgICBkZWJ1Z2xvZzogZnVuY3Rpb24oaSwgaXRlbSwgcnVsZSwgb2JqKSB7XFxuICAgICAgICBsb2coJy0tLS0tLS0tLS0nICsgKGkgKyAxKSArICc66LCD6K+V5byA5aeLLS0tLS0tLS0tLScpO1xcbiAgICAgICAgaWYgKGl0ZW0uY29uc3RydWN0b3IgPT0gT2JqZWN0KSB7XFxuICAgICAgICAgICAgaXRlbSA9IEpTT04uc3RyaW5naWZ5KGl0ZW0pO1xcbiAgICAgICAgfVxcbiAgICAgICAgbG9nKCdpdGVt5YaF5a65OlxcXFxyXFxcXG4nICsgaXRlbSArICdcXFxcclxcXFxuJyArXFxuICAgICAgICAgICAgYFxcXFxuXFxcXHR0aXRsZeWumuS9jTogICR7cnVsZS50aXRsZX0gIC0tLT4g57uT5p6cOiAgJHtvYmoudGl0bGV9YCArXFxuICAgICAgICAgICAgYFxcXFxuXFxcXHRkZXNj5a6a5L2NOiAgJHtydWxlLmRlc2N9ICAtLS0+IOe7k+aenDogICR7b2JqLmRlc2N9YCArXFxuICAgICAgICAgICAgYFxcXFxuXFxcXHRpbWflrprkvY06ICAke3J1bGUuaW1nfSAgLS0tPiDnu5Pmnpw6ICAke29iai5pbWd9YCArXFxuICAgICAgICAgICAgKHJ1bGUuY29udGVudCAhPSB1bmRlZmluZWQgPyBgXFxcXG5cXFxcdGNvbnRlbnTlrprkvY06ICAke3J1bGUuY29udGVudH0gIC0tLT4g57uT5p6cOiAgJHtvYmouY29udGVudH1gIDogJycpICtcXG4gICAgICAgICAgICBgXFxcXG5cXFxcdHVybOWumuS9jTogICR7cnVsZS51cmx9ICAtLS0+IOe7k+aenDogICR7b2JqLnVybH1gXFxuICAgICAgICApO1xcbiAgICAgICAgbG9nKCctLS0tLS0tLS0tJyArIChpICsgMSkgKyAnOuiwg+ivlee7k+adny0tLS0tLS0tLS0nKTtcXG4gICAgfSxcXG4gICAganNvbkxpc3Q6IGZ1bmN0aW9uKGFyciwganNvbiwgcnVsZSkge1xcbiAgICAgICAgaWYgKGpzb24uY29uc3RydWN0b3IgIT0gT2JqZWN0KSB7XFxuICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAganNvbiA9IEpTT04ucGFyc2UoanNvbik7XFxuICAgICAgICAgICAgfSBjYXRjaCB7fVxcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKGpzb25bcnVsZS5saXN0XSA9PSB1bmRlZmluZWQpIHtcXG4gICAgICAgICAgICBhcnIucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9XFxcImdyZXlcXFwiPjxzbWFsbD7ml6DlhoXlrrk8L3NtYWxsPjwvZm9udD4nLFxcbiAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHt9LFxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIHJldHVybjtcXG4gICAgICAgIH1cXG4gICAgICAgIHZhciBkZWJ1ZyA9IHRoaXMuZ2V0Qm9vbGVhblZhbHVlKHJ1bGUuZGVidWcsIGZhbHNlKTtcXG4gICAgICAgIHZhciBlbXB0eSA9IHRoaXMuZ2V0Qm9vbGVhblZhbHVlKHJ1bGUuZW1wdHkpO1xcbiAgICAgICAgaWYgKGRlYnVnKSB7XFxuICAgICAgICAgICAgbG9nKCflrprkvY3liJfooag6JyArIHJ1bGUubGlzdCk7XFxuICAgICAgICB9XFxuICAgICAgICBqc29uW3J1bGUubGlzdF0uZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xcbiAgICAgICAgICAgIHZhciB0aXRsZSA9IGV2YWwocnVsZS50aXRsZSk7XFxuICAgICAgICAgICAgdmFyIGRlc2MgPSBldmFsKHJ1bGUuZGVzYyk7XFxuICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSBldmFsKHJ1bGUuY29udGVudCk7XFxuICAgICAgICAgICAgdmFyIGltZyA9IGV2YWwocnVsZS5pbWcpICsgcnVsZS5yZWY7XFxuICAgICAgICAgICAgdmFyIGhyZWYgPSBldmFsKHJ1bGUudXJsKTtcXG4gICAgICAgICAgICB2YXIgdXJsID0gcnVsZS5pbXQgPyBocmVmICsgXFxcIiNpbW1lcnNpdmVUaGVtZSNcXFwiIDogaHJlZjtcXG4gICAgICAgICAgICB2YXIgbGF6eSA9IHJ1bGUubGF6eSA/IHJ1bGUubGF6eSA6IFxcXCJcXFwiO1xcblxcbiAgICAgICAgICAgIHZhciBkZCA9IHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBkZXNjLFxcbiAgICAgICAgICAgICAgICBjb250ZW50OiBjb250ZW50LFxcbiAgICAgICAgICAgICAgICBwaWNfdXJsOiBpbWcsXFxuICAgICAgICAgICAgICAgIHVybDogKGVtcHR5ID8gXFxcImhpa2VyOi8vZW1wdHkjI1xcXCIgOiAnJykgKyB1cmwsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBydWxlLmNvbF90eXBlLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgcGFnZVRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgIGltZzogaW1nLFxcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIH07XFxuXFxuICAgICAgICAgICAgaWYgKGRlYnVnKSB7XFxuICAgICAgICAgICAgICAgIHZhciByeCA9IHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYyxcXG4gICAgICAgICAgICAgICAgICAgIGltZyxcXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQsXFxuICAgICAgICAgICAgICAgICAgICB1cmxcXG4gICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgdGhpcy5kZWJ1Z2xvZyhpLCBpdGVtLCBydWxlLCByeCk7XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIGlmIChsYXp5ICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgIGRkW1xcXCJ1cmxcXFwiXSA9IGhyZWYgKyBsYXp5O1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBhcnIucHVzaChkZCk7XFxuICAgICAgICB9KTtcXG4gICAgfSxcXG4gICAgcnVsZUxpc3Q6IGZ1bmN0aW9uKGFyciwgaHRtbCwgcnVsZSkge1xcbiAgICAgICAgdmFyIGxpc3QgPSBwZGZhKGh0bWwsXFxuICAgICAgICAgICAgcnVsZS5saXN0KTtcXG4gICAgICAgIHZhciBkZWJ1ZyA9IHRoaXMuZ2V0Qm9vbGVhblZhbHVlKHJ1bGUuZGVidWcsXFxuICAgICAgICAgICAgZmFsc2UpO1xcbiAgICAgICAgdmFyIGVtcHR5ID0gdGhpcy5nZXRCb29sZWFuVmFsdWUocnVsZS5lbXB0eSk7XFxuICAgICAgICBpZiAoZGVidWcpIHtcXG4gICAgICAgICAgICBsb2coJ+WumuS9jeWIl+ihqDonICsgcnVsZS5saXN0KTtcXG4gICAgICAgIH1cXG4gICAgICAgIGxpc3QuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xcbiAgICAgICAgICAgIHZhciB0aXRsZSA9IHRoaXMuc2V0Q29udGVudChpdGVtLCBydWxlLnRpdGxlKTtcXG4gICAgICAgICAgICB2YXIgZGVzYyA9IHRoaXMuc2V0Q29udGVudChpdGVtLCBydWxlLmRlc2MpO1xcbiAgICAgICAgICAgIHZhciBkZXNjMSA9IHRoaXMuc2V0Q29udGVudChpdGVtLCBydWxlLmRlc2MxKTtcXG4gICAgICAgICAgICB2YXIgZGVzYzIgPSB0aGlzLnNldENvbnRlbnQoaXRlbSwgcnVsZS5kZXNjMik7XFxuICAgICAgICAgICAgdmFyIGltZyA9IHRoaXMuaW1nSGFuZGxlKGl0ZW0sIHJ1bGUpO1xcbiAgICAgICAgICAgIHZhciB1cmwgPSB0aGlzLnVybEhhbmRsZShpdGVtLCBydWxlKTtcXG4gICAgICAgICAgICB2YXIgY29udGVudCA9IHRoaXMuc2V0Q29udGVudChpdGVtLCBydWxlLmNvbnRlbnQpO1xcblxcbiAgICAgICAgICAgIGlmIChkZWJ1Zykge1xcbiAgICAgICAgICAgICAgICB2YXIgcnggPSB7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2MsXFxuICAgICAgICAgICAgICAgICAgICBpbWcsXFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50LFxcbiAgICAgICAgICAgICAgICAgICAgdXJsXFxuICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgIHRoaXMuZGVidWdsb2coaSwgaXRlbSwgcnVsZSwgcngpO1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICB2YXIgbGF6eSA9IHJ1bGUubGF6eSA/IHJ1bGUubGF6eSA6IFxcXCJcXFwiO1xcbiAgICAgICAgICAgIHZhciBkZCA9IHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBkZXNjMSArIFxcXCJcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXCIgKyBkZXNjLFxcbiAgICAgICAgICAgICAgICBwaWNfdXJsOiBpbWcsXFxuICAgICAgICAgICAgICAgIHVybDogKGVtcHR5ID8gXFxcImhpa2VyOi8vZW1wdHkjI1xcXCIgOiAnJykgKyB1cmwgKyAnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJlalxcXCIpJyxcXG4gICAgICAgICAgICAgICAgY29udGVudDogY29udGVudCxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IHJ1bGUuY29sX3R5cGUsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBwYWdlVGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgaW1nOiBpbWcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmdDbGljazogW3tcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+OAkOi3s+mhteOAkScsXFxuICAgICAgICAgICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKHRydWVfdXJsKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKCcnLCAnMeWIsDgx5LmL6Ze055qE55qE6aG156CBJylcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5pbnB1dCgodHJ1ZV91cmwpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZUludChpbnB1dCkgPiAxICYmIHBhcnNlSW50KGlucHV0KSA8IDgxICYmIHBhcnNlSW50KGlucHV0KSAlIDEgPT0gMCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBqdW1wdSA9IHRydWVfdXJsLnJlcGxhY2UoLyhcXFxcP3BhZ2U9XFxcXGQrfFxcXFwmcGFnZT1cXFxcZCt8JCkvLCAobWF0Y2gpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoLnN0YXJ0c1dpdGgoJz9wYWdlPScpIHx8IG1hdGNoLnN0YXJ0c1dpdGgoJyZwYWdlPScpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2guY2hhckF0KDApICsgJ3BhZ2U9JyArIGlucHV0O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh0cnVlX3VybC5pbmNsdWRlcygnPycpID8gJyZwYWdlPScgOiAnP3BhZ2U9JykgKyBpbnB1dDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dFZhcihNWV9SVUxFLnVybCwganVtcHUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCd5aV9maXJzdHBhZ2UnLCBqdW1wdSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/kvaDlt7Lnu4/nqb/otorliLDkuoYnICsgaW5wdXQgKyAn6aG1J1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v6K+36L6T5YWl5q2j56Gu55qE6aG156CBXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB0cnVlX3VybClcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRydWVfdXJsKVxcbiAgICAgICAgICAgICAgICAgICAgfV1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgaWYgKGxhenkgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgZGRbXFxcInVybFxcXCJdID0gdXJsICsgbGF6eTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgYXJyLnB1c2goZGQpO1xcbiAgICAgICAgfSk7XFxuICAgIH0sXFxuICAgIExpc3Q6IGZ1bmN0aW9uKGFyciwgaHRtbCwgcnVsZSwgcGFyYW0pIHtcXG4gICAgICAgIHBhcmFtID0gcGFyYW0gPyBwYXJhbSA6IHt9O1xcbiAgICAgICAgdmFyIGF1dG8gPSBwYXJhbS5hdXRvID8gcGFyYW0uYXV0byA6IGZhbHNlO1xcbiAgICAgICAgdmFyIHNob3cgPSBwYXJhbS5zaG93ID8gcGFyYW0uc2hvdyA6IGZhbHNlO1xcbiAgICAgICAgaWYgKHBhZ2UgPT0gMSkge1xcbiAgICAgICAgICAgIC8vdGhpcy5zcGFnZS5zZXQodHJ1ZV91cmwpO1xcbiAgICAgICAgfVxcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XFxuICAgICAgICB2YXIgZGVidWcgPSB0aGlzLmdldEJvb2xlYW5WYWx1ZShydWxlLmRlYnVnLCBmYWxzZSk7XFxuICAgICAgICB2YXIgZW1wdHkgPSB0aGlzLmdldEJvb2xlYW5WYWx1ZShydWxlLmVtcHR5KTtcXG4gICAgICAgIHZhciBsaXN0ID0gcGRmYShodG1sLCBydWxlLmxpc3QpO1xcbiAgICAgICAgaWYgKGRlYnVnKSB7XFxuICAgICAgICAgICAgbG9nKCflrprkvY3liJfooag6JyArIHJ1bGUubGlzdCk7XFxuICAgICAgICB9XFxuICAgICAgICAvL2xvZyh0aGlzLm5leHRQYWdlKCkpXFxuICAgICAgICBpZiAoKHN0b3JhZ2UwLmdldE15VmFyKCd5aV9pc25leHQnLCAndCcpID09ICd0JyAmJiBsaXN0Lmxlbmd0aCA+IDApIHx8IHBhZ2UgPT0gMSkge1xcbiAgICAgICAgICAgIGxpc3QuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xcbiAgICAgICAgICAgICAgICBkZWxldGVJdGVtKFxcXCJwYWdlbnVtXFxcIik7XFxuICAgICAgICAgICAgICAgIGRlbGV0ZUl0ZW0oXFxcInBhZ2VsaW5lXFxcIik7XFxuICAgICAgICAgICAgICAgIHZhciBpZCA9IFxcXCJcXFwiO1xcbiAgICAgICAgICAgICAgICB2YXIgY2xzID0gXFxcIlxcXCI7XFxuICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9IHRoaXMuc2V0Q29udGVudChpdGVtLCBydWxlLnRpdGxlKTtcXG4gICAgICAgICAgICAgICAgdmFyIGRlc2MgPSB0aGlzLnNldENvbnRlbnQoaXRlbSwgcnVsZS5kZXNjKTtcXG4gICAgICAgICAgICAgICAgdmFyIGltZyA9IHRoaXMuaW1nSGFuZGxlKGl0ZW0sIHJ1bGUpO1xcbiAgICAgICAgICAgICAgICB2YXIgdXJsID0gdGhpcy51cmxIYW5kbGUoaXRlbSwgcnVsZSk7XFxuICAgICAgICAgICAgICAgIHZhciBjb250ZW50ID0gdGhpcy5zZXRDb250ZW50KGl0ZW0sIHJ1bGUuY29udGVudCk7XFxuXFxuICAgICAgICAgICAgICAgIGlmIChkZWJ1Zykge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJ4ID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2MsXFxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsXFxuICAgICAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWJ1Z2xvZyhpLCBpdGVtLCBydWxlLCByeCk7XFxuICAgICAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAgICAgaWYgKGkgPT0gbGlzdC5sZW5ndGggLSAxKSB7XFxuICAgICAgICAgICAgICAgICAgICBpZCA9IFxcXCJsYXN0aWRfXFxcIiArIHBhZ2U7XFxuICAgICAgICAgICAgICAgICAgICBjbHMgPSBcXFwibGFzdG1hcmtcXFwiO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBkZXNjLFxcbiAgICAgICAgICAgICAgICAgICAgcGljX3VybDogaW1nLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAoZW1wdHkgPyBcXFwiaGlrZXI6Ly9lbXB0eSMjXFxcIiA6ICcnKSArIHVybCArICc/cGFnZT1meXBhZ2VAcnVsZT1qczokLnJlcXVpcmUoXFxcInlqXFxcIiknLFxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogY29udGVudCxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBydWxlLmNvbF90eXBlLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlVGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZzogaW1nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBpZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjbHM6IGNscyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsb25nQ2xpY2s6IFt7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfjgJDot7PpobXjgJEnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCh0cnVlX3VybCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCgnJywgJzHliLAzMeS5i+mXtOeahOeahOmhteeggScpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaW5wdXQoKHRydWVfdXJsKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VJbnQoaW5wdXQpID4gMSAmJiBwYXJzZUludChpbnB1dCkgPCA4MSAmJiBwYXJzZUludChpbnB1dCkgJSAxID09IDApIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIganVtcHUgPSB0cnVlX3VybC5yZXBsYWNlKC8oXFxcXD9wYWdlPVxcXFxkK3xcXFxcJnBhZ2U9XFxcXGQrfCQpLywgKG1hdGNoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaC5zdGFydHNXaXRoKCc/cGFnZT0nKSB8fCBtYXRjaC5zdGFydHNXaXRoKCcmcGFnZT0nKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoLmNoYXJBdCgwKSArICdwYWdlPScgKyBpbnB1dDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAodHJ1ZV91cmwuaW5jbHVkZXMoJz8nKSA/ICcmcGFnZT0nIDogJz9wYWdlPScpICsgaW5wdXQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRWYXIoTVlfUlVMRS51cmwsIGp1bXB1KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcigneWlfZmlyc3RwYWdlJywganVtcHUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5L2g5bey57uP56m/6LaK5Yiw5LqGJyArIGlucHV0ICsgJ+mhtSdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+ivt+i+k+WFpeato+ehrueahOmhteeggVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdHJ1ZV91cmwpXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnVlX3VybClcXG4gICAgICAgICAgICAgICAgICAgIH1dXFxuICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgaWYgKGkgPT0gbGlzdC5sZW5ndGggLSAxICYmIHNob3cpIHtcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJsaW5lXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogXFxcInBhZ2VsaW5lXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi4oCc4oCc4oCd4oCdPHNtYWxsPuWKoOi9veS4rS4uLjwvc21hbGw+XFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcXFwicGFnZW51bVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHVwZGF0ZUl0ZW0oXFxcInBhZ2VudW1cXFwiLCB7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9XFxcImdyZXlcXFwiPjxzbWFsbD7liLDlupXkuoY8L3NtYWxsPjwvZm9udD4nLFxcbiAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGlkOiBcXFwibGFzdFxcXCIsXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9XFxuLypcXG4gICAgICAgIGlmIChsaXN0Lmxlbmd0aCA9PSAwICYmIHBhZ2UgPT0gMSkge1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwibGluZVxcXCIsXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ08Zm9udCBjb2xvcj1cXFwiZ3JleVxcXCI+PHNtYWxsPuaXoOWGheWuuTwvc21hbGw+PC9mb250PicsXFxuICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgICAgICBleHRyYToge30sXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9Ki9cXG4gICAgICAgIGlmICh0aGlzLm5leHRQYWdlKCkpIHtcXG4gICAgICAgICAgICAvL2xvZygndCcpO1xcbiAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKCd5aV9pc25leHQnLCAndCcpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAvL2xvZygnZicpO1xcbiAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKCd5aV9pc25leHQnLCAnZicpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKGF1dG8pIHtcXG4gICAgICAgICAgICAvL2NyZWF0ZU5leHRQYWdlKCk7XFxuICAgICAgICAgICAgYXV0b1BhZ2UoKTtcXG4gICAgICAgIH1cXG4gICAgfSxcXG59O1xcblxcbnZhciBleHRNZXRob2QgPSB7XFxuICAgIFRvUGFyYW1zOiBmdW5jdGlvbigpIHtcXG4gICAgICAgIHZhciBqc29uID0gYXJndW1lbnRzWzBdO1xcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGpzb24pXFxuICAgICAgICAgICAgLm1hcCgoa2V5KSA9PiBrZXkgKyBcXFwiPVxcXCIgKyBqc29uW2tleV0pXFxuICAgICAgICAgICAgLmpvaW4oXFxcIiZcXFwiKTtcXG4gICAgfSxcXG4gICAgdXJsUGFyc2U6IGZ1bmN0aW9uKHUpIHtcXG4gICAgICAgIHZhciBkaWN0ID0ge307XFxuICAgICAgICBkaWN0LlNvdXJjZSA9IHU7XFxuICAgICAgICBsZXQgcGFyYW1zID0gKHVybCkgPT4ge1xcbiAgICAgICAgICAgIGxldCBxdWVyeVBhcmFtcyA9IHt9O1xcbiAgICAgICAgICAgIGxldCByZWcgPSAvKFtePz0mXSspPShbXj89Jl0rKS9nO1xcbiAgICAgICAgICAgIHVybC5yZXBsYWNlKHJlZywgZnVuY3Rpb24oKSB7XFxuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zW2FyZ3VtZW50c1sxXV0gPSBhcmd1bWVudHNbMl07XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5UGFyYW1zO1xcbiAgICAgICAgfTtcXG4gICAgICAgIHZhciBqYXZhVXJsID0gSmF2YUltcG9ydGVyKGphdmEubmV0LlVSTCk7XFxuICAgICAgICB3aXRoKGphdmFVcmwpIHtcXG4gICAgICAgICAgICB2YXIgdXJsID0gbmV3IFVSTCh1KTtcXG4gICAgICAgICAgICBkaWN0LlByb3RvY29sID0gdXJsLmdldFByb3RvY29sKCk7XFxuICAgICAgICAgICAgZGljdC5Ib3N0ID0gdXJsLmdldEhvc3QoKTtcXG4gICAgICAgICAgICBkaWN0LlBvcnQgPSB1cmwuZ2V0UG9ydCgpO1xcbiAgICAgICAgICAgIGRpY3QuRmlsZSA9IHVybC5nZXRGaWxlKCk7XFxuICAgICAgICAgICAgZGljdC5QYXRoID0gdXJsLmdldFBhdGgoKTtcXG4gICAgICAgICAgICBkaWN0LlJlZiA9IHVybC5nZXRSZWYoKTtcXG4gICAgICAgICAgICBkaWN0Lkhvc3RzID0gYCR7ZGljdC5Qcm90b2NvbH06Ly8ke3VybC5nZXRIb3N0KCl9YDtcXG4gICAgICAgIH1cXG4gICAgICAgIGRpY3QuUGFyYW1zID0gcGFyYW1zKHUpO1xcbiAgICAgICAgcmV0dXJuIGRpY3Q7XFxuICAgIH0sXFxuICAgIGlzRXF1YWw6IGZ1bmN0aW9uKHgsIHkpIHtcXG4gICAgICAgIGNvbnN0IG9rID0gT2JqZWN0LmtleXMsXFxuICAgICAgICAgICAgdHggPSB0eXBlb2YgeCxcXG4gICAgICAgICAgICB0eSA9IHR5cGVvZiB5O1xcbiAgICAgICAgcmV0dXJuIHggJiYgeSAmJiB0eCA9PT0gXFxcIm9iamVjdFxcXCIgJiYgdHggPT09IHR5ID9cXG4gICAgICAgICAgICBvayh4KS5sZW5ndGggPT09IG9rKHkpLmxlbmd0aCAmJlxcbiAgICAgICAgICAgIG9rKHgpLmV2ZXJ5KChrZXkpID0+IHRoaXMuaXNFcXVhbCh4W2tleV0sIHlba2V5XSkpIDogeCA9PT0geTtcXG4gICAgfSxcXG4gICAgZmluZERpZmZlcmVudEluZGV4OiBmdW5jdGlvbihzdHIxLCBzdHIyKSB7XFxuICAgICAgICBjb25zdCBkaWZmQ2hhcnMgPSBbXTtcXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyMi5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgIGlmIChzdHIxW2ldICE9PSBzdHIyW2ldKSB7XFxuICAgICAgICAgICAgICAgIGRpZmZDaGFycy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIGluZGV4OiBpLFxcbiAgICAgICAgICAgICAgICAgICAgczE6IHN0cjFbaV0sXFxuICAgICAgICAgICAgICAgICAgICBzMjogc3RyMltpXSxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIGRpZmZDaGFycztcXG4gICAgfSxcXG4gICAgcmVwbGFjZUNoYXJBdDogZnVuY3Rpb24oc3RyLCBpbmRleCwgcmVwbGFjZW1lbnQpIHtcXG4gICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gc3RyLmxlbmd0aCkge1xcbiAgICAgICAgICAgIHJldHVybiBzdHI7XFxuICAgICAgICB9XFxuICAgICAgICAvL2xvZyhpbmRleClcXG4gICAgICAgIGNvbnN0IGFyciA9IHN0ci5zcGxpdChcXFwiXFxcIik7XFxuICAgICAgICBhcnJbaW5kZXhdID0gcmVwbGFjZW1lbnQ7XFxuICAgICAgICByZXR1cm4gYXJyLmpvaW4oXFxcIlxcXCIpO1xcbiAgICB9LFxcbiAgICBnZXRPYmplY3RLZXlzRGlmZjogZnVuY3Rpb24ob2JqMSwgb2JqMikge1xcbiAgICAgICAgY29uc3QgZGlmZmVyZW50S2V5cyA9IFtdO1xcbiAgICAgICAgZm9yIChsZXQga2V5IGluIG9iajEpIHtcXG4gICAgICAgICAgICBpZiAoIW9iajIuaGFzT3duUHJvcGVydHkoa2V5KSB8fCBvYmoxW2tleV0gIT09IG9iajJba2V5XSkge1xcbiAgICAgICAgICAgICAgICBkaWZmZXJlbnRLZXlzLnB1c2goa2V5KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gb2JqMikge1xcbiAgICAgICAgICAgIGlmICghb2JqMS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XFxuICAgICAgICAgICAgICAgIGRpZmZlcmVudEtleXMucHVzaChrZXkpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBkaWZmZXJlbnRLZXlzO1xcbiAgICB9LFxcbiAgICBnZXROZXh0VXJsOiBmdW5jdGlvbihzb3VyY2UsIHRhcmdldCwgcGFyYW1zKSB7XFxuICAgICAgICB2YXIgdTEgPSB0aGlzLnVybFBhcnNlKHNvdXJjZSk7XFxuICAgICAgICB2YXIgdTIgPSB0aGlzLnVybFBhcnNlKHRhcmdldCk7XFxuICAgICAgICB2YXIgcGEgPSB1bmRlZmluZWQ7XFxuICAgICAgICBpZiAodHlwZW9mIHBhcmFtcyA9PSBcXFwib2JqZWN0XFxcIikge1xcbiAgICAgICAgICAgIHBhID0gcGFyYW1zLmhhc093blByb3BlcnR5KFxcXCLnibnlvoFcXFwiKSA/IHBhcmFtcy7nibnlvoEgOiB1bmRlZmluZWQ7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgbmV4dHVybCA9IHNvdXJjZTtcXG4gICAgICAgIHZhciBjYSA9IE9iamVjdC5rZXlzKHUyLlBhcmFtcykubGVuZ3RoID09IDAgPyBcXFwiXFxcIiA6IFxcXCI/XFxcIjtcXG4gICAgICAgIGlmIChwYSAhPSB1bmRlZmluZWQpIHtcXG4gICAgICAgICAgICB2YXIgcnMgPSBTdHJpbmcodTIuUGF0aCkucmVwbGFjZShuZXcgUmVnRXhwKHBhKSwgXFxcIiQxZnlwYWdlXFxcIik7XFxuICAgICAgICAgICAgbmV4dHVybCA9IHUyLkhvc3RzICsgcnMgKyBjYSArIHRoaXMuVG9QYXJhbXModTIuUGFyYW1zKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgaWYgKHRoaXMuaXNFcXVhbCh1MS5QYXJhbXMsIHUyLlBhcmFtcykpIHtcXG4gICAgICAgICAgICAgICAgaWYgKGR0X2RlYnVnKSB7XFxuICAgICAgICAgICAgICAgICAgICBsb2codTEuUGF0aCk7XFxuICAgICAgICAgICAgICAgICAgICBsb2codTIuUGF0aCk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgdmFyIGRmID0gdGhpcy5maW5kRGlmZmVyZW50SW5kZXgoU3RyaW5nKHUxLlBhdGgpLCBTdHJpbmcodTIuUGF0aCkpO1xcbiAgICAgICAgICAgICAgICBpZiAoZHRfZGVidWcpIHtcXG4gICAgICAgICAgICAgICAgICAgIGxvZyhkZik7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaWYgKGRmLmxlbmd0aCA9PSAxKSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgcmUgPSBkZlswXS5pbmRleDtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBmID0gZGYuZmlsdGVyKCh4KSA9PiAvXFxcXGQrLy50ZXN0KHguczIpKTtcXG4gICAgICAgICAgICAgICAgICAgIHZhciByZSA9IGZbMF0uaW5kZXg7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgdmFyIGVxID0gdGhpcy5yZXBsYWNlQ2hhckF0KFN0cmluZyh1Mi5QYXRoKSwgcmUsIFxcXCJmeXBhZ2VcXFwiKTtcXG4gICAgICAgICAgICAgICAgbmV4dHVybCA9IHUyLkhvc3RzICsgZXEgKyBjYSArIHRoaXMuVG9QYXJhbXModTIuUGFyYW1zKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB2YXIgZXAgPSB0aGlzLmdldE9iamVjdEtleXNEaWZmKHUxLlBhcmFtcywgdTIuUGFyYW1zKVxcbiAgICAgICAgICAgICAgICBpZiAoZXAubGVuZ3RoID09IDEpIHtcXG4gICAgICAgICAgICAgICAgICAgIHUxLlBhcmFtc1tlcFswXV0gPSAnZnlwYWdlJ1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgbG9nKGVwKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB2YXIgZXEgPSBTdHJpbmcodTEuUGF0aCkucmVwbGFjZSgvXFxcXGQrLywgXFxcImZ5cGFnZVxcXCIpO1xcbiAgICAgICAgICAgICAgICBuZXh0dXJsID0gdTEuSG9zdHMgKyBlcSArIGNhICsgdGhpcy5Ub1BhcmFtcyh1MS5QYXJhbXMpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIC8vbG9nKCduZXh0OicrbmV4dHVybClcXG4gICAgICAgIHJldHVybiBuZXh0dXJsO1xcbiAgICB9LFxcbn07XFxuXFxuZnVuY3Rpb24gZ2V0VHJ1ZWxpbmsobWFyaywgdXJsLCBwYWdlKSB7XFxuICAgIHZhciBwID0gZ2V0TXlWYXIobWFyaywgdXJsKS5yZXBsYWNlKFxcXCJmeXBhZ2VcXFwiLCBwYWdlKTtcXG4gICAgaWYgKHBhZ2UgPT0gMSkge1xcbiAgICAgICAgcmV0dXJuIGdldE15VmFyKFxcXCJ5aV9maXJzdHBhZ2VcXFwiLCBwKTtcXG4gICAgfSBlbHNlIGlmIChwICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICByZXR1cm4gcDtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIHJldHVybiB1cmw7XFxuICAgIH1cXG59XFxuLy/mnoTlu7pcXG5mdW5jdGlvbiBjcmVhdGVOZXh0UGFnZSgpIHtcXG4gICAgbGV0IHN0YXJ0bnVtID0gMTtcXG4gICAgdmFyIG9iaiA9IGFyZ3VtZW50c1swXTtcXG4gICAgaWYgKHRydWVfdXJsICE9IGdldE15VmFyKFxcXCJ5aV9wYWdldXJsXFxcIiwgXFxcIlxcXCIpKSB7XFxuICAgICAgICBjbGVhck15VmFyKFxcXCJ5aV9wYWdldXJsXFxcIik7XFxuICAgIH1cXG4gICAgaWYgKHBhZ2UgPT0gc3RhcnRudW0gJiYgZ2V0TXlWYXIoXFxcInlpX3BhZ2V1cmxcXFwiKSA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgcHV0TXlWYXIoXFxcInlpX2ZpcnN0cGFnZVxcXCIsIHRydWVfdXJsKTtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgdmFyIG5leHQgPSBldmFsKOS4i+S4gOmhtSk7XFxuICAgICAgICAgICAgLy9sb2coXFxcIm5leHRcXFwiKTtcXG4gICAgICAgICAgICAvL2xvZyhuZXh0KTtcXG4gICAgICAgIH0gY2F0Y2gge1xcbiAgICAgICAgICAgIGxvZyhcXFwi5Y+v6IO95LiN5a2Y5Zyo5LiL5LiA6aG15oiW6ICF5LiL5LiA6aG15a6a5L2N5pyJ6Zeu6aKYXFxcIik7XFxuICAgICAgICAgICAgbmV4dCA9IFxcXCJcXFwiO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKG5leHQgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICB2YXIgbnh1cmwgPSBleHRNZXRob2QuZ2V0TmV4dFVybCh0cnVlX3VybCwgbmV4dCwgb2JqKTtcXG4gICAgICAgICAgICAvL2xvZyhcXFwibnh1cmw6XFxcIiArIG54dXJsKTtcXG4gICAgICAgICAgICBwdXRNeVZhcijnirbmgIEsIG54dXJsKTtcXG4gICAgICAgICAgICBwdXRNeVZhcihcXFwieWlfcGFnZXVybFxcXCIsIG54dXJsKTtcXG4gICAgICAgIH1cXG4gICAgfVxcbn1cXG5cXG5mdW5jdGlvbiBhdXRvUGFnZSgpIHtcXG4gICAgaWYgKHBhZ2UgPT0gMSkge1xcbiAgICAgICAgcHV0TXlWYXIoXFxcInlpX2ZpcnN0cGFnZVxcXCIsIHRydWVfdXJsKTtcXG4gICAgfVxcbiAgICB0cnkge1xcbiAgICAgICAgdmFyIG5leHQgPSBldmFsKOS4i+S4gOmhtSk7XFxuICAgICAgICAvL2xvZyhcXFwibmV4dFxcXCIpO1xcbiAgICAgICAgLy9sb2coJ25leHQ6JytuZXh0KTtcXG4gICAgfSBjYXRjaCB7XFxuICAgICAgICBsb2coXFxcIuWPr+iDveS4jeWtmOWcqOS4i+S4gOmhteaIluiAheS4i+S4gOmhteWumuS9jeaciemXrumimFxcXCIpO1xcbiAgICAgICAgbmV4dCA9IFxcXCJcXFwiO1xcbiAgICB9XFxuICAgIGlmIChuZXh0ICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICBwdXRNeVZhcijnirbmgIEsIG5leHQpO1xcbiAgICB9XFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi4pGi5LqM57qn5aSW6YOo6Kej5p6QXCIsXCJwYXRoXCI6XCJ0b29sXCIsXCJydWxlXCI6XCJcXG4gICB2YXIgY29kZWxhenkgPSBmZXRjaCgnaGlrZXI6Ly9maWxlcy9ydWxlcy9hcG9sbG8vQ29kZUxhenkuanMnKSB8fCBcXFwiXFxcIjtcXG5cXG4gICBmdW5jdGlvbiBkb3duY29kZSgpIHtcXG4gICAgICAgdmFyIGpzID0gZmV0Y2goXFxcImh0dHBzOi8vbWlycm9yLmdocHJveHkuY29tL2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9BcG9sbG9SaW9vL1IvbWFzdGVyL0Fwb2xsb0FcXFwiKTtcXG4gICAgICAgd3JpdGVGaWxlKCdoaWtlcjovL2ZpbGVzL3J1bGVzL2Fwb2xsby9Db2RlTGF6eS5qcycsIGpzKTtcXG4gICAgICAgdG9hc3QoXFxcIui/nOeoi+aVsOaNruW3suabtOaWsOWIsOacrOWcsFxcXCIpXFxuICAgICAgIGNvZGVsYXp5ID0gZmV0Y2goJ2hpa2VyOi8vZmlsZXMvcnVsZXMvYXBvbGxvL0NvZGVMYXp5LmpzJylcXG4gICB9XFxuICAgaWYgKCFjb2RlbGF6eSkge1xcbiAgICAgICBkb3duY29kZSgpXFxuICAgfVxcbiAgIHRyeSB7XFxuICAgICAgIGV2YWwoY29kZWxhenkpXFxuICAgfSBjYXRjaCB7XFxuICAgICAgIGRvd25jb2RlKClcXG4gICAgICAgZXZhbChjb2RlbGF6eSlcXG4gICAgICAgbG9nKFxcXCLor7vlj5blpLHotKXmm7TmlrDov5znqIvmlbDmja5cXFwiKVxcbiAgIH1cXG4gICBDb2RlTGF6eSjor4bliKvnoIEpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLop6PmnpBcIixcInBhdGhcIjpcImxhenlcIixcInJ1bGVcIjpcInZhciBsYXp5ID0gJCgnJykubGF6eVJ1bGUoKE1ZX0hPTUUpID0+IHtcXG4gICAgdmFyIGlucCA9IGZldGNoKGlucHV0LHt9KTsgXFxuICAgIHJldHVybiBcXFwicGljczovL1xcXCIrcGRmYShpbnAsICcucHJldmlldy1pbWFnZXMmJmEsMTonKS5tYXAoaW1nID0+cGQoaW1nLCAnYSYmaHJlZicpK1xcXCJAUmVmZXJlcj1cXFwiLCkuam9pbihcXFwiJiZcXFwiKSAgXFxufSxNWV9IT01FKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi4pGg5LiA57qn6aG16Z2i5YaF5a65XCIsXCJwYXRoXCI6XCJ5alwiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG5cXG5hZGRMaXN0ZW5lcihcXFwib25DbG9zZVxcXCIsICgpID0+IHtcXG4gICAgICAgIGNsZWFyTXlWYXIoXFxcInVybFxcXCIpO1xcbiAgICAgICAgY2xlYXJNeVZhcihcXFwibmV4dFBhZ2VcXFwiKTtcXG4gICAgICAgIGNsZWFySXRlbSgnbm93JylcXG4gICAgICAgIGNsZWFySXRlbSgnbm8nKVxcbiAgICAgICAgY2xlYXJJdGVtKCdwYWdlcycpXFxufSk7XFxuYWRkTGlzdGVuZXIoXFxcIm9uUmVmcmVzaFxcXCIsICgpID0+IHtcXG4gICAgY2xlYXJNeVZhcihcXFwidXJsXFxcIik7XFxuICAgIGNsZWFyTXlWYXIoXFxcIm5leHRQYWdlXFxcIik7XFxuICAgIGNsZWFySXRlbSgnbm93Jyk7XFxuICAgIGNsZWFySXRlbSgnbm8nKTtcXG4gICAgY2xlYXJJdGVtKCdwYWdlcycpXFxufSk7XFxuXFxuTVlfVVJMPU1ZX1VSTC5yZXBsYWNlKCdoaWtlcjovL2VtcHR5IyMnLCcnKTtcXG5sZXQgdHJ1ZV91cmwgPSBnZXRNeVZhcihcXFwidXJsXFxcIiwgTVlfVVJMKTtcXG5jb25zdCBwYWdlID0gTVlfUEFHRTtcXG4vL+iOt+WPluS4iuasoee8k+WtmOeahOS4i+mhtemTvuaOpVxcbmxldCBuZXh0UGFnZSA9IGdldE15VmFyKFxcXCJuZXh0UGFnZVxcXCIsIFxcXCJcXFwiKTtcXG4vL+WmguaenOacieS4i+S4gOmhteS4lOS4jeaYr+esrOS4gOmhteWwseS9v+eUqOS4i+S4gOmhtemTvuaOpVxcbmlmIChuZXh0UGFnZSAmJiBNWV9QQUdFID4gMSkge1xcbiAgICB0cnVlX3VybCA9IG5leHRQYWdlO1xcbn1cXG5sb2codHJ1ZV91cmwpO1xcbnZhciBodG1sID0gcmVxdWVzdCh0cnVlX3VybCk7XFxuXFxudHJ5IHtcXG4gICAgLy/nvJPlrZjkuIvkuIDpobVcXG4gICAgbGV0IG5leHRVcmwgPSBwZChodG1sLCBcXFwiYTpjb250YWlucyjkuIvkuIApJiZocmVmXFxcIik7XFxuICAgIHB1dE15VmFyKFxcXCJuZXh0UGFnZVxcXCIsIG5leHRVcmwgfHwgXFxcImhpa2VyOi8vZW1wdHlcXFwiKTtcXG4gICAgLy9sb2coXFxcIuS4i+S4gOmhte+8mlxcXCIgKyBuZXh0VXJsKVxcbn0gY2F0Y2ggKGUpIHtcXG4gICAgLy9jbGVhck15VmFyKFxcXCJuZXh0UGFnZVxcXCIpO1xcbiAgICBsZXQgbmV4dFVybCA9IFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgdG9hc3QoXFxcIuWlveWDj+ayoeacieS4i+S4gOmhteS6hu+8gVxcXCIpO1xcbn1cXG5cXG52YXIgcGFnZXM7XFxuaWYoTVlfUEFHRT09MSAmJiAhdHJ1ZV91cmwuaW5jbHVkZXMoXFxcInNlYXJjaFxcXCIpKXtcXG4vL+a8lOWRmOWbvlxcbnRyeXtcXG4gIHRyeXtcXG4gICAgdmFyIGltZyA9ICBwZGZoKGh0bWwsXFxcIi5zZWN0aW9uLWNvbHVtbnMmJi5pbWFnZSYmLmF2YXRhciYmc3R5bGVcXFwiKTtcXG4gICAgfWNhdGNoeyBcXG4gICAgdmFyIGltZyA9IFxcXCJodHRwczovL3RodW1ic25hcC5jb20vaS9zeVNNUTdNZy5qcGdcXFwiO31cXG52YXIg5o+P6L+wMSA9IHBkZmgoaHRtbCwgXFxcIi5zZWN0aW9uLWNvbHVtbnMmJmgyLS0uc2VjdGlvbi1tZXRhLC0xJiZUZXh0XFxcIik7XFxudmFyIOaPj+i/sDIgPSBwZGZoKGh0bWwsIFxcXCIuc2VjdGlvbi1jb2x1bW5zJiZoMiYmLnNlY3Rpb24tbWV0YSwtMSYmVGV4dFxcXCIpO1xcbnZhciBudW0gPSDmj4/ov7AyLm1hdGNoKC9cXFxcZCsvKVswXSB8fCAnMSdcXG52YXIgcGFnZXMgPSBNYXRoLmZsb29yKG51bSAvIDQwKTtcXG5pZiAobnVtICUgNDAgIT09IDApIHtcXG4gIHBhZ2VzICs9IDE7XFxufVxcblxcbnZhciBsaXN0QWN0b3JzID0gSlNPTi5wYXJzZShmZXRjaFBDKCdoaWtlcjovL2ZpbGVzL3J1bGVzL2Fwb2xsby9qYXZkYi9qYXZkYl9hY3Rvci50eHQnKSB8fCAnW10nKTtcXG52YXIgc3RyID0g5o+P6L+wMSArICdAQCcgKyBpbWcgKyAnQEAnICsgcGRmaChodG1sLCdsaW5rW3JlbD1jYW5vbmljYWxdJiZocmVmJykgKyAnP3BhZ2U9ZnlwYWdlJztcXG5pZiAobGlzdEFjdG9ycy5pbmRleE9mKHN0cikgPT0gJy0xJykge1xcbiAgICB2YXIgdCA9ICfwn6SN5pyq5pS26JeP8J+kjScuc21hbGwoKVxcbn0gZWxzZSB7XFxuICAgIHZhciB0ID0gJzxiPjxzbWFsbD48Zm9udCBjb2xvcj0jRkYwMEZGPvCfkp3lt7LmlLbol4/wn5KdPC9mb250Pjwvc21hbGw+J1xcbn1cXG5cXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwiSmF2REJcXFwiLFxcbiAgICAgICAgZGVzYzogXFxcIjBcXFwiLFxcbiAgICAgICAgaW1nOiBpbWcsXFxuICAgICAgICB1cmw6ICdjb3B5Oi8vJyArIOaPj+i/sDEgKyAnLGhpa2VyOi8vcGFnZS95aj91cmw9JyArIE1ZX1VSTC5yZXBsYWNlKC9cXFxcL1xcXFwvXFxcXHcrXFxcXC4vLCcvL2phdmRiLicpLnJlcGxhY2UoJ3BhZ2U9MScsJ3BhZ2U9ZnlwYWdlJykgKyAnJnJ1bGU98J2QifCdkJrwnZCv8J2Qg/CdkIEsJyArIGltZyxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiY2FyZF9waWNfMlxcXCIsXFxuICAgICAgICAgfSlcXG4gICAgIGQucHVzaCh7XFxuICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGI+PHNtYWxsPjxmb250IGNvbG9yPVxcXCIjZmU1YzRiXFxcIj7nprvmgJ3kupTpppbCt+WFtuWbm8K35ZSQwrflhYPnqLlcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx05pu+57uP5rKn5rW36Zq+5Li65rC077yMXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdOmZpOWNtOW3q+WxseS4jeaYr+S6keOAglxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHTlj5bmrKHoirHkuJvmh5Llm57pob7vvIxcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx05Y2K57yY5L+u6YGT5Y2K57yY5ZCb44CCXFxcXG48L2ZvbnQ+PC9zbWFsbD48Yj48c21hbGw+PGZvbnQgY29sb3I9XFxcImN5YW5cXFwiPiAnICsg5o+P6L+wMS5zbGljZSgwLDEzKSArICc8L2ZvbnQ+PC9zbWFsbD48Yj48c21hbGw+PGZvbnQgY29sb3I9XFxcIiMxRTkwRkZcXFwiPlxcXFxuICcgKyDmj4/ov7AyICsgJ1xcXFx0XFxcXHQ8L2ZvbnQ+PC9zbWFsbD4nICsgdCArICc8Yj48c21hbGw+PGZvbnQgY29sb3I9XFxcIiNGRkUxMDBcXFwiPlxcXFxu5Lmf6K645pyJJyArIHBhZ2VzICsgJ+mhte+8jOayoemql+S9oOWQpzwvZm9udD48L3NtYWxsPicsXFxuICAgIGRlc2M6ICcwJyxcXG4gICAgLy9pbWc6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgY29sX3R5cGU6IFxcXCJjYXJkX3BpY18yXFxcIixcXG4gICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChuYW1lKSA9PiB7XFxuICAgICAgICAgICAgICAgIHZhciBzdHIgPSBmZXRjaFBDKCdoaWtlcjovL2ZpbGVzL3J1bGVzL2Fwb2xsby9qYXZkYi9qYXZkYl9hY3Rvci50eHQnKTtcXG4gICAgICAgICAgICAgICAgaWYgKCFzdHIpIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBsaXN0ID0gW25hbWVdO1xcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKCdoaWtlcjovL2ZpbGVzL3J1bGVzL2Fwb2xsby9qYXZkYi9qYXZkYl9hY3Rvci50eHQnLCBKU09OLnN0cmluZ2lmeShsaXN0KSk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgbGlzdCA9IEpTT04ucGFyc2Uoc3RyKTtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChsaXN0LmluZGV4T2YobmFtZSkgPT0gJy0xJykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgLy8gbGlzdC5wdXNoKG5hbWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QudW5zaGlmdChuYW1lKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvcnVsZXMvYXBvbGxvL2phdmRiL2phdmRiX2FjdG9yLnR4dCcsIEpTT04uc3RyaW5naWZ5KGxpc3QpKTtcXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBsaXN0LmluZGV4T2YobmFtZSk7XFxuICAgICAgICAgICAgICAgICAgICAgIGxpc3Quc3BsaWNlKGluZGV4LCAxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKCdoaWtlcjovL2ZpbGVzL3J1bGVzL2Fwb2xsby9qYXZkYi9qYXZkYl9hY3Rvci50eHQnLCBKU09OLnN0cmluZ2lmeShsaXN0KSk7XFxuICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgfSwgc3RyKSxcXG4gICAgZXh0cmE6IHtcXFwiZ3JhZGllbnRcXFwiOnRydWV9XFxufSk7XFxuICAgIH1jYXRjaHt9XFxuICAgICAgIGlmICh0eXBlb2YgcGFnZXMgIT09ICd1bmRlZmluZWQnICYmIHBhZ2VzICE9PSBudWxsKSB7XFxuICAgICAgICAgIHNldEl0ZW0oJ3BhZ2VzJywgcGFnZXMudG9TdHJpbmcoKSk7XFxuICAgICAgICAgfSBcXG5cXG4vL+a8lOWRmOWIhuexu1xcbiAgIHRyeXtcXG4gICAgICAgIHZhciBjYXRlZ29yeSA9IHBkZmEoaHRtbCxcXFwiLmFjdG9yLXRhZ3MmJi50YWcsMDo1XFxcIilcXG5sZXQgbm8gPSBnZXRJdGVtKCdubycsICflhajpg6gnKTtcXG4gICAgICAgY2F0ZWdvcnkuZm9yRWFjaChpdGVtPT57XFxuICAgICAgICAgICB2YXIgdGl0bGUgPSBwZGZoKGl0ZW0sXFxcIlRleHRcXFwiKTtcXG4gICAgICAgICAgIHZhciB1cmwgPSBwZChpdGVtLFxcXCJhJiZocmVmXFxcIikgIT09Jyc/cGQoaXRlbSxcXFwiYSYmaHJlZlxcXCIpOiBwZChpdGVtLFxcXCJidXR0b24mJm9uY2xpY2suanM6aW5wdXQuc3BsaXQoJ1xcXFwnJylbMV1cXFwiKTtcXG4gICAgICAgICAgIHVybCA9IHVybC5pbmNsdWRlcygnP3BhZ2UnKT91cmw6KHVybC5pbmNsdWRlcygnPycpP3VybCArIFxcXCImcGFnZT0xXFxcIjp1cmwgKyBcXFwiP3BhZ2U9MVxcXCIpXFxuICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgIHRpdGxlOiBubyA9PXRpdGxlPyAn4oCc4oCc4oCd4oCdJyArIHRpdGxlLmZvbnRjb2xvcignZ3JlZW4nKSA6ICfigJzigJzigJ3igJ0nICsgdGl0bGUuZm9udGNvbG9yKCcjRDNEM0QzJyksXFxuICAgICAgICAgICAgICAgdXJsOiB1cmwgKyAkKCcnKS5sYXp5UnVsZSgodGl0bGUpID0+IHtcXG4gICAgICAgICAgICBzZXRJdGVtKFxcXCJub1xcXCIsdGl0bGUpO1xcbiAgICAgICAgICAgIHB1dE15VmFyKFxcXCJ1cmxcXFwiLCBpbnB1dCk7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgfSx0aXRsZSksXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIixcXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICB9KVxcbiAgICAgICAgfWNhdGNoe31cXG4gLy/liIblibJcXG4gICAgZC5wdXNoKHtcXG4gICAgICBjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIlxcbiAgICAgICAgfSlcXG59XFxuXFxudmFyIHBhZ2VzID0gZ2V0SXRlbSgncGFnZXMnKTtcXG5cXG50cnl7XFxubGV0IG5vdyA9IGdldEl0ZW0oJ25vdycpO1xcbmlmKHBhZ2VzPjEmJnBhZ2VzPDM3KXtcXG5mb3IgKHZhciBqID0gMTsgaiA8PSBwYWdlczsgaiArKyl7XFxudmFyIHVybCA9IHRydWVfdXJsLnJlcGxhY2UoL3BhZ2U9XFxcXGQrLywgJ3BhZ2U9JytqKTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBqID09TVlfUEFHRSB8fCBub3cgPT0oIGogKyAn6aG1Jyk/ICfigJzigJzigJ3igJ0nICsgKGogKyAn6aG1JykuZm9udGNvbG9yKCdyZWQnKSA6IChqICsgJ+mhtScpLFxcbiAgICAgICAgdXJsOiQodXJsKS5sYXp5UnVsZSgoaikgPT4ge1xcbiAgICAgICAgICAgIHNldEl0ZW0oXFxcIm5vd1xcXCIsKCBqICsgJ+mhtScpKTtcXG4gICAgICAgICAgICBwdXRNeVZhcihcXFwidXJsXFxcIiwgaW5wdXQpO1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgIH0saiksXFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbn0pXFxufVxcbn1lbHNlIGlmKHBhZ2VzPjM3KXtcXG5mb3IgKHZhciBqID0gMTsgaiA8PSA2MTsgaiArPShqPT0xKT8yOjMpe1xcbnZhciB1cmwgPSB0cnVlX3VybC5yZXBsYWNlKC9wYWdlPVxcXFxkKy8sICdwYWdlPScraik7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogaiA9PU1ZX1BBR0UgfHwgbm93ID09KCBqICsgJ+mhtScpPyAn4oCc4oCc4oCd4oCdJyArIChqICsgJ+mhtScpLmZvbnRjb2xvcigncmVkJykgOiAoaiArICfpobUnKSxcXG4gICAgICAgIHVybDokKHVybCkubGF6eVJ1bGUoKGopID0+IHtcXG4gICAgICAgICAgICBzZXRJdGVtKFxcXCJub3dcXFwiLCggaiArICfpobUnKSk7XFxuICAgICAgICAgICAgcHV0TXlWYXIoXFxcInVybFxcXCIsIGlucHV0KTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICB9LGopLFxcbiAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG59KVxcbn1cXG59XFxufWNhdGNoe31cXG5cXG5cXG5sZXQgbGlzdCA9IHBkZmEoaHRtbCwgJ2JvZHkmJi5pdGVtJyk7XFxuaWYobGlzdC5sZW5ndGg+MCl7XFxubGlzdC5mb3JFYWNoKHggPT4geyAgIFxcbmxldCBpbWcgPSAhdHJ1ZV91cmwuaW5jbHVkZXMoXFxcInNlYXJjaFxcXCIpID8gcGQoeCwnaW1nfHxhJiZzcmN8fGRhdGEtb3JpZ2luYWwnKSA6IHBkKHgsJ2ltZ3x8YSYmc3JjfHxkYXRhLW9yaWdpbmFsJykucmVwbGFjZShcXFwiY292ZXJzXFxcIixcXFwidGh1bWJzXFxcIik7XFxuIGQucHVzaCh7XFxuICAgIHRpdGxlOiBwZGZoKHgsICcudmlkZW8tdGl0bGUmJlRleHQnKSxcXG4gICAgZGVzYzogcGRmaCh4LCcubWV0YSYmVGV4dCcpLFxcbiAgICBpbWc6IGltZyxcXG4gICAgdXJsOiAnaGlrZXI6Ly9wYWdlL2VqP3VybD0nK3BkKHgsICdhJiZocmVmJykrJyNub0hpc3RvcnkjJyxcXG4gICAgY29sX3R5cGU6ICdtb3ZpZV8yJyxcXG4gICAgZXh0cmE6IHtwYWdlVGl0bGU6IHBkZmgoeCwgJy52aWRlby10aXRsZSYmVGV4dCcpLH1cXG4gIH0pO1xcbn0pXFxufWVsc2V7XFxuLypcXG4gIGZ1bmN0aW9uIGdldEJpZ1RleHQodGV4dCwgY291bnQpIHtcXG4gICAgaWYgKGNvdW50ID4gMCkge1xcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XFxuICAgICAgICAgICAgdGV4dCA9IHRleHQuYmlnKCk7XFxuICAgICAgICB9XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IC1jb3VudDsgaSsrKSB7XFxuICAgICAgICAgICAgdGV4dCA9IHRleHQuc21hbGwoKTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gdGV4dDtcXG4gICAgfVxcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBcXFwi4oCc4oCc4oCd4oCdXFxcIitnZXRCaWdUZXh0KFxcXCI8YmlnPjxmb250IGNvbG9yPScjRkVCRDZGJz7lt7Lnu4/otoXov4fkuobmnIDnu4jpobXnoIE8L2ZvbnQ+PC9iaWc+PGJyPjxzbWFsbD48Zm9udCBjb2xvcj0nI0ZCNkM3Myc+5LiN5L+h54K55Ye75omT5byA572R6aG1PC9mb250Pjwvc21hbGw+XFxcIiwgNSksXFxuICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMScsXFxuICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgodHJ1ZV91cmwpID0+IHtcXG5yZXR1cm4gdHJ1ZV91cmxcXG4gICAgIH0sdHJ1ZV91cmwpLFxcbiAgICBleHRyYTp7bGluZVZpc2libGU6ZmFsc2V9XFxuICAgIH0pXFxuKi9cXG59XFxuXFxuc2V0UmVzdWx0KGQpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLikaHkuoznuqfpobXpnaLlhoXlrrlcIixcInBhdGhcIjpcImVqXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdXFxuTVlfVVJMPU1ZX1VSTC5yZXBsYWNlKCdoaWtlcjovL2VtcHR5IyMnLCcnKTtcXG5sb2coTVlfVVJMKVxcbnZhciBodG1sID0gZmV0Y2goTVlfVVJMKTtcXG5cXG4vL2V2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL2xhenknLCB7fSkpLnJ1bGUpO1xcblxcbnRyeXtcXG52YXIgdGl0bGUgPSBwZGZoKGh0bWwsJ2gyJiZzdHJvbmcmJlRleHQnKSArICcgJyArIHBkZmgoaHRtbCwnaDImJi5jdXJyZW50LXRpdGxlJiZUZXh0Jyk7XFxuICAgaWYodGl0bGUgIT09bnVsbCAmJiAhdGl0bGUuaW5jbHVkZXMoXFxcIumWi+mAmlZJUCBcXFwiKSl7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnTxtaWRkbGU+PGZvbnQgY29sb3I9I0U1N0ExQT4nK3RpdGxlKyc8L2ZvbnQ+PC9taWRkbGU+JyxcXG4gICAgICAgIHVybDogXFxcImNvcHk6Ly9cXFwiICsgdGl0bGUsXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfMScsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2UsXFxuICAgICAgICAgICAgICAgIGxvbmdDbGljazogW3t0aXRsZTogJ+e9kemhtScsIGpzOiAkLnRvU3RyaW5nKCgpPT57IFxcbiAgICAgICAgcmV0dXJuIFxcXCJ3ZWI6Ly9cXFwiICsgTVlfVVJMXFxuICAgICAgICAgICAgICAgICAgICAgICB9KX0se3RpdGxlOiAn55m+5bqm57+76K+RJywganM6ICQudG9TdHJpbmcoKHRpdGxlKT0+eyBcXG4gICAgICAgIHJldHVybiBcXFwieDU6Ly9odHRwczovL2ZhbnlpLmJhaWR1LmNvbS8janAvemgvXFxcIiArIHRpdGxlXFxuICAgICAgICAgICAgICAgICAgICAgICB9LHRpdGxlKX0se3RpdGxlOiAnRGVlcGznv7vor5EnLCBqczogJC50b1N0cmluZygodGl0bGUpPT57IFxcbiAgICAgICAgcmV0dXJuIFxcXCJ4NTovL2h0dHBzOi8vd3d3LmRlZXBsLmNvbS96aC90cmFuc2xhdG9yLW1vYmlsZSNqYS96aC9cXFwiICsgdGl0bGVcXG4gICAgICAgICAgICAgICAgICAgICAgIH0sdGl0bGUpfSx7dGl0bGU6ICfosLfmrYznv7vor5EnLCBqczogJC50b1N0cmluZygodGl0bGUpPT57IFxcbiAgICAgICAgcmV0dXJuIFxcXCJ4NTovL2h0dHBzOi8vdHJhbnNsYXRlLmdvb2dsZS5jb20vP2hsPXpoLUNOJnNsPWphJnRsPXpoLUNOJnRleHQ9XFxcIiArIHRpdGxlXFxuICAgICAgICAgICAgICAgICAgICAgICB9LHRpdGxlKX1dXFxufVxcbiAgICB9KVxcbn1cXG5cXG4vL3NldFBhZ2VUaXRsZSh0aXRsZSkgLy9mY+mhtemdouiOt+WPluagh+mimFxcblxcbnZhciDor4bliKvnoIEgPSBwZGZoKGh0bWwsICdib2R5JiYuZmlyc3QtYmxvY2smJi52YWx1ZSYmVGV4dCcpLnRvTG93ZXJDYXNlKCk7XFxuXFxudmFyIGltZyA9IHBkKGh0bWwsJy5jb2x1bW4tdmlkZW8tY292ZXImJmltZyYmc3JjJyk7XFxuLy92YXIgaW1nID0gTVlfUEFSQU1TLmltZztcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgIGltZzogaW1nLFxcbiAgICAgICAgICAgICB1cmw6IFxcXCJjb3B5Oi8vXFxcIiArIGltZyxcXG4gICAgICAgICAgICAgY29sX3R5cGU6ICdwaWNfMV9mdWxsJyxcXG4gICAgICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgICBsaW5lVmlzaWJsZTpmYWxzZSxcXG4gICAgICAgICAgICAgICAgbG9uZ0NsaWNrOiBbe3RpdGxlOiAnZG1t5Zu+54mHJywganM6ICQudG9TdHJpbmcoKOivhuWIq+eggSk9PntcXG4gICAgICAgICAgICByZXR1cm4gXFxcImh0dHBzOi8vcGljcy5kbW0uY28uanAvbW9uby9tb3ZpZS9hZHVsdC9cXFwiICsg6K+G5Yir56CBLnJlcGxhY2UoLy18Xy8sJycpICsgJy8nICsg6K+G5Yir56CBLnJlcGxhY2UoLy18Xy8sJycpICsgXFxcInBsLmpwZ1xcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgIH0s6K+G5Yir56CBKX0se3RpdGxlOiAn5Zu+54mH6aKE6KeIJywganM6ICQudG9TdHJpbmcoKGh0bWwpPT57IFxcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBpY3MgPSBwZGZhKGh0bWwsXFxcIi5wcmV2aWV3LWltYWdlcyYmLnRpbGUtaXRlbSwxOm5cXFwiKS5tYXAoaXRlbT0+cGRmaChpdGVtLFxcXCJhJiZocmVmXFxcIikpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGljcyAhPVxcXCJcXFwiID8gXFxcInBpY3M6Ly9cXFwiK3BpY3Muam9pbihcXFwiJiZcXFwiKSA6IFxcXCJ0b2FzdDovL+ayoeacieWbvueJh+mihOiniOWTpvCfmJBcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICB9LGh0bWwpfSx7dGl0bGU6ICfmiZPlvIDlm77niYcnLCBqczogJC50b1N0cmluZygoaW1nKT0+eyBcXG4gICAgICAgIHJldHVybiBpbWdcXG4gICAgICAgICAgICAgICAgICAgICAgIH0saW1nKX1dXFxuICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICB9KTtcXG5cXG5ldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS95aXlhbicsIHt9KSkucnVsZSk7XFxuXFxuXFxudmFyIHNjb3JlID0gcGRmaChodG1sLFxcXCIucGFuZWwmJi5wYW5lbC1ibG9jazptYXRjaGVzKOipleWIhjopJiZUZXh0XFxcIilcXG52YXIgc3RhciA9IHBkZmEoaHRtbCxcXFwiLnBhbmVsJiYucGFuZWwtYmxvY2s6bWF0Y2hlcyjoqZXliIY6KSYmaTpub3QoLmdyYXkpXFxcIilcXG52YXIgYXJyID0gW11cXG5mb3IgKGxldCBpID0gMDsgaSA8IDU7IGkrKykge1xcbmlmKGk8c3Rhci5sZW5ndGgpe1xcbiAgICBhcnIucHVzaCgn8J+UpScpO1xcbiAgfSBlbHNlIHtcXG4gICAgYXJyLnB1c2goJ/CfpbYnKTtcXG4gIH1cXG59XFxuaWYoc2NvcmUpe1xcbnZhciBzY29yZXMgPSBzY29yZS5tYXRjaCgv55SxKFxcXFxkKynkurroqZXlg7kvKVsxXS50b1N0cmluZygpXFxuZC5wdXNoKHtcXG50aXRsZTogc2NvcmVzIDwgMzAwID8gJ/CfpJY6JyArIGRheV9zYXkuZm9udGNvbG9yKFxcXCIjRkYwMDAwXFxcIikuc21hbGwoKSA6IFxcXCLoqZXliIbvvJpcXFwiICsgYXJyLmpvaW4oXFxcIlxcXCIpICsgXFxcIlxcXFx0XFxcXHRcXFwiICsgIHNjb3JlLnJlcGxhY2UoXFxcIuipleWIhjpcXFwiLFxcXCJcXFwiKS5mb250Y29sb3IoXFxcIiNEQkRCREJcXFwiKSxcXG51cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG5jb2xfdHlwZTogXFxcInJpY2hfdGV4dFxcXCJcXG59KVxcbn1cXG5cXG5ldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS90b29sJywge30pKS5ydWxlKTtcXG5cXG5kLnB1c2goe1xcbiAgICBjb2xfdHlwZTogJ2JsYW5rX2Jsb2NrJ1xcbn0pXFxuXFxudmFyIGxpc3RWaWRlb3MgPSBKU09OLnBhcnNlKGZldGNoUEMoJ2hpa2VyOi8vZmlsZXMvcnVsZXMvYXBvbGxvL2phdmRiL2phdmRiX3ZpZGVvLnR4dCcpIHx8ICdbXScpO1xcbnZhciBzdHIgPSB0aXRsZSArICdAQCcgKyBpbWcgKyAnQEAnICsgcGRmaChodG1sLCdsaW5rW3JlbD1jYW5vbmljYWxdJiZocmVmJyk7XFxuaWYgKGxpc3RWaWRlb3MuaW5kZXhPZihzdHIpID09ICctMScpIHtcXG4gICAgdmFyIHQgPSAn4oCc4oCc4oCd4oCdPGI+PGZvbnQgY29sb3I9PvCfkpvmnKrmlLbol4/wn5KbJ1xcbn0gZWxzZSB7XFxuICAgIHZhciB0ID0gJ+KAnOKAnOKAneKAnTxiPjxmb250IGNvbG9yPSNGRkUxMDA+8J+SluW3suaUtuiXj/CfkpYnXFxufVxcblxcbmxldCBpbmZvID0gcGRmYShodG1sLCAnLnBhbmVsJiYucGFuZWwtYmxvY2s6bWF0Y2hlcyjnlaromZ985pel5pyffOaZgumVtyknKTtcXG5pbmZvLmZvckVhY2goKGxpc3QsIGluZGV4KSA9PiB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogaW5kZXggPT0gMCA/ICfigJzigJzigJ3igJ0nICsgcGRmaChsaXN0LCAnc3Ryb25nJiZUZXh0JykuZm9udGNvbG9yKCcjRkZFMTAwJykgOiBwZGZoKGxpc3QsICdzdHJvbmcmJlRleHQnKSxcXG4gICAgICAgIHVybDogaW5kZXggPT0gMCA/IFxcXCJjb3B5Oi8vXFxcIiArIOivhuWIq+eggS50b1VwcGVyQ2FzZSgpIDogJ2hpa2VyOi8vZW1wdHknLFxcbiAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG4gICAgfSk7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogaW5kZXggPT0gMCA/IChwZGZhKGxpc3QsICcudmFsdWUmJmEnKS5sZW5ndGggPiAwID8gKCAn4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9I0ZGRTEwMD4nICsgcGRmaChsaXN0LCAnLnZhbHVlJiZhJiZUZXh0JykgKyAnPC9mb250PicgKyAn4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9Z3JlZW4+JyArIHBkZmgobGlzdCwgJy52YWx1ZS0tYSYmVGV4dCcpICsgJzwvZm9udD4nICkgOiAn4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9I0ZGRTEwMD4nICsgcGRmaChsaXN0LCAnLnZhbHVlJiZUZXh0JykgKyAnPC9mb250PicpIDogcGRmaChsaXN0LCAnLnZhbHVlJiZUZXh0JyksXFxuICAgICAgICB1cmw6IGluZGV4ID09IDAgPyAocGQoaHRtbCwgJy52aWRlby1kZXRhaWwmJi5maXJzdC1ibG9jayYmYSYmaHJlZicpID8gcGQoaHRtbCwgJy52aWRlby1kZXRhaWwmJi5maXJzdC1ibG9jayYmYSYmaHJlZicpICsgJz9wYWdlPWZ5cGFnZSZzb3J0X3R5cGU9NUBydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3lqXFxcIiknIDogXFxcImhpa2VyOi8vZW1wdHlcXFwiICk6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCIsXFxuICAgICAgICBleHRyYTogaW5kZXggPT0gMCA/IHtcXG4gICAgICAgICAgICBwYWdlVGl0bGU6IFxcXCLnlarlj7fns7vliJfvvJpcXFwiICsgcGRmaChodG1sLCAnLnZpZGVvLWRldGFpbCYmLmZpcnN0LWJsb2NrJiZhJiZUZXh0JyksXFxuICAgICAgICAgICAgbG9uZ0NsaWNrOiBbe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+iwt+atjOaQnOe0oicsXFxuICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCjor4bliKvnoIEpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9zZWFyY2g/cT1cXFwiICsg6K+G5Yir56CBO1xcbiAgICAgICAgICAgICAgICB9LCDor4bliKvnoIEpXFxuICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+ejgeWKm+aQnOagh+mimCcsXFxuICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCh0aXRsZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL3BhZ2Uvc291P3J1bGU956OB5Yqb5ZCbLueugCZwPWZ5cGFnZSZzZWFyY2hUZXJtcz1cXFwiICsgdGl0bGVcXG4gICAgICAgICAgICAgICAgfSwgdGl0bGUpXFxuICAgICAgICAgICAgfV1cXG4gICAgICAgIH0gOiAnJ1xcbiAgICB9KTtcXG4gICAgaWYgKGluZGV4ID09IDApIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IHQsXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChuYW1lKSA9PiB7XFxuICAgICAgICAgICAgICAgIHZhciBzdHIgPSBmZXRjaFBDKCdoaWtlcjovL2ZpbGVzL3J1bGVzL2Fwb2xsby9qYXZkYi9qYXZkYl92aWRlby50eHQnKTtcXG4gICAgICAgICAgICAgICAgaWYgKCFzdHIpIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBsaXN0ID0gW25hbWVdO1xcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKCdoaWtlcjovL2ZpbGVzL3J1bGVzL2Fwb2xsby9qYXZkYi9qYXZkYl92aWRlby50eHQnLCBKU09OLnN0cmluZ2lmeShsaXN0KSk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgbGlzdCA9IEpTT04ucGFyc2Uoc3RyKTtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChsaXN0LmluZGV4T2YobmFtZSkgPT0gJy0xJykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgLy8gbGlzdC5wdXNoKG5hbWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QudW5zaGlmdChuYW1lKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvcnVsZXMvYXBvbGxvL2phdmRiL2phdmRiX3ZpZGVvLnR4dCcsIEpTT04uc3RyaW5naWZ5KGxpc3QpKTtcXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBsaXN0LmluZGV4T2YobmFtZSk7XFxuICAgICAgICAgICAgICAgICAgICAgIGxpc3Quc3BsaWNlKGluZGV4LCAxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKCdoaWtlcjovL2ZpbGVzL3J1bGVzL2Fwb2xsby9qYXZkYi9qYXZkYl92aWRlby50eHQnLCBKU09OLnN0cmluZ2lmeShsaXN0KSk7XFxuICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgfSwgc3RyKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgfSk7XFxuZC5wdXNoKHtcXG5jb2xfdHlwZTpcXFwiYmxhbmtfYmxvY2tcXFwiXFxufSlcXG4gICAgfVxcbn0pO1xcblxcbi8v54mH5ZWGXFxudHJ5IHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi54mH5ZWGOlxcXCIsXFxuICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxuICAgIH0pXFxuICAgIHZhciBtYWtlcnMgPSBwZGZoKGh0bWwsICcucGFuZWwmJi5wYW5lbC1ibG9jazptYXRjaGVzKOeJh+WVhikmJi52YWx1ZSYmVGV4dCcpO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfigJjigJjigJnigJk8Yj48bWlkZGxlPjxmb250IGNvbG9yPVxcXCIjMUU5MEZGXFxcIj4nICsgbWFrZXJzICsgJzwvZm9udD48L21pZGRsZT48L2I+JyxcXG4gICAgICAgIHVybDogcGQoaHRtbCwgJy5wYW5lbCYmLnBhbmVsLWJsb2NrOm1hdGNoZXMo54mH5ZWGKSYmYSYmaHJlZicpICsgJyZwYWdlPWZ5cGFnZUBydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3lqXFxcIiknLCAvL+mTvuaOpVxcbiAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgcGFnZVRpdGxlOiBtYWtlcnNcXG4gICAgICAgIH1cXG4gICAgfSlcXG59IGNhdGNoIHt9XFxuXFxuICAgIGQucHVzaCh7XFxuICAgICAgICBjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIixcXG4gICAgfSlcXG4vL+a8lOWRmFxcbnZhciBhcnRzID0gcGFyc2VEb21Gb3JBcnJheShodG1sLCAnYm9keSYmLnBhbmVsLWJsb2NrOmNvbnRhaW5zKOa8lOWToTopJiZhJyk7XFxuaWYoYXJ0cy5sZW5ndGg+MCl7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICAgICB0aXRsZTogXFxcIua8lOWToTpcXFwiLFxcbiAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbn0pXFxuZm9yICh2YXIgaSBpbiBhcnRzKSB7XFxuICAgIHZhciB0aXRsZSA9IHBhcnNlRG9tRm9ySHRtbChhcnRzW2ldLCAnVGV4dCcpO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfigJjigJjigJnigJk8Yj48bWlkZGxlPjxmb250IGNvbG9yPVxcXCIjMUUyMDgwMFxcXCI+Jyt0aXRsZSsnPC9mb250PjwvbWlkZGxlPjwvYj4nLFxcbiAgICAgICAgdXJsOiBwYXJzZURvbShhcnRzW2ldLCAnYSYmaHJlZicpICsgJz9wYWdlPWZ5cGFnZUBydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3lqXFxcIiknLFxcbiAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgcGFnZVRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgbG9uZ0NsaWNrOiBbe3RpdGxlOiAn5aSN5Yi25ryU5ZGYJywganM6ICQudG9TdHJpbmcoKHRpdGxlKT0+eyByZXR1cm4gXFxcImNvcHk6Ly9cXFwiICsgdGl0bGU7fSx0aXRsZSl9LHt0aXRsZTogJ+iwt+atjOaQnOe0oicsIGpzOiAkLnRvU3RyaW5nKCh0aXRsZSk9PnsgcmV0dXJuIFxcXCJodHRwczovL3d3dy5nb29nbGUuY29tL3NlYXJjaD9xPVxcXCIgKyB0aXRsZTt9LHRpdGxlKX0se3RpdGxlOiAn55m+5bqm5pCc57SiJywganM6ICQudG9TdHJpbmcoKHRpdGxlKT0+eyByZXR1cm4gXFxcImh0dHBzOi8vd3d3LmJhaWR1LmNvbS9zP3dkPVxcXCIgKyB0aXRsZTt9LHRpdGxlKX0se3RpdGxlOiAn56OB5Yqb5pCc5ryU5ZGYJywganM6ICQudG9TdHJpbmcoKHRpdGxlKT0+eyBcXG4gICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9wYWdlL3NvdT9ydWxlPeejgeWKm+WQmy7nroAmcD1meXBhZ2Umc2VhcmNoVGVybXM9XFxcIiArIHRpdGxlXFxuICAgICAgICAgICAgICAgICAgICAgICB9LHRpdGxlKX1dXFxuICAgICAgICB9XFxufSlcXG59XFxufVxcblxcbi8v5a+85ryUXFxudHJ5IHtcXG4gICAgdmFyIGRpcmVjdG9yID0gcGRmaChodG1sLCAnLnBhbmVsJiYucGFuZWwtYmxvY2s6bWF0Y2hlcyjlsI7mvJQpJiYudmFsdWUmJlRleHQnKTtcXG4gICAgaWYgKGRpcmVjdG9yKSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi5bCO5ryUOlxcXCIsXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgIH0pXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGI+PG1pZGRsZT48Zm9udCBjb2xvcj1cXFwiIzFFOTBGRlxcXCI+JyArIGRpcmVjdG9yICsgJzwvZm9udD48L21pZGRsZT48L2I+JyxcXG4gICAgICAgICAgICB1cmw6IHBkKGh0bWwsICcucGFuZWwmJi5wYW5lbC1ibG9jazptYXRjaGVzKOWwjua8lCkmJmEmJmhyZWYnKSArICc/cGFnZT1meXBhZ2VAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS95alxcXCIpJywgLy/pk77mjqVcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLCAvL+e7hOS7tuagt+W8j1xcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIHBhZ2VUaXRsZTogZGlyZWN0b3JcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgfVxcbn0gY2F0Y2gge31cXG5cXG4vL+exu+WIq1xcbnZhciBhcnRzID0gcGFyc2VEb21Gb3JBcnJheShodG1sLCAnYm9keSYmLnBhbmVsLWJsb2NrOmNvbnRhaW5zKOmhnuWIpSkmJmEnKTtcXG5pZihhcnRzLmxlbmd0aD4wKXtcXG5kLnB1c2goe1xcbmNvbF90eXBlOlxcXCJibGFua19ibG9ja1xcXCJcXG59KVxcbiAgICBkLnB1c2goe1xcbiAgICAgICB0aXRsZTogXFxcIumhnuWIpTpcXFwiLFxcbiAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJywgICAgICBcXG59KTtcXG5mb3IgKHZhciBpIGluIGFydHMpIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGI+PG1pZGRsZT48Zm9udCBjb2xvcj1cXFwiIzFFODg4NFxcXCI+JytwYXJzZURvbUZvckh0bWwoYXJ0c1tpXSwgJ1RleHQnKSsnPC9mb250PjwvbWlkZGxlPjwvYj4nLFxcbiAgICAgICAgdXJsOiBwYXJzZURvbShhcnRzW2ldLCAnYSYmaHJlZicpICsgJyZwYWdlPWZ5cGFnZUBydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3lqXFxcIiknLC8v6ZO+5o6lXFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLC8v57uE5Lu25qC35byPXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIHBhZ2VUaXRsZTogcGFyc2VEb21Gb3JIdG1sKGFydHNbaV0sICdUZXh0JylcXG4gICAgICAgIH1cXG59KVxcbn1cXG5kLnB1c2goe1xcbmNvbF90eXBlOlxcXCJibGFua19ibG9ja1xcXCJcXG59KVxcbn1cXG5cXG4vL+ezu+WIl1xcbnZhciBhcnRzID0gcGFyc2VEb21Gb3JBcnJheShodG1sLCAnYm9keSYmLnBhbmVsLWJsb2NrOmNvbnRhaW5zKOezu+WIlykmJmEnKTtcXG5pZihhcnRzLmxlbmd0aD4wKXtcXG5kLnB1c2goe1xcbiAgICAgICAgY29sX3R5cGU6IFxcXCJibGFua19ibG9ja1xcXCIsXFxuICAgIH0pXFxuICAgIGQucHVzaCh7XFxuICAgICAgIHRpdGxlOiBcXFwi57O75YiXOlxcXCIsXFxuICAgICAgIHVybDogXFxcInRvYXN0Oi8v54K55LqG5Lmf5LmI5pyJ55So8J+lslxcXCIsXFxuICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxufSlcXG5mb3IgKHZhciBpIGluIGFydHMpIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGI+PG1pZGRsZT48Zm9udCBjb2xvcj1cXFwiIzAwZDBmNFxcXCI+JytwYXJzZURvbUZvckh0bWwoYXJ0c1tpXSwgJ1RleHQnKSsnPC9mb250PjwvbWlkZGxlPjwvYj4nLFxcbiAgICAgICAgdXJsOiBwYXJzZURvbShhcnRzW2ldLCAnYSYmaHJlZicpICsgJz9wYWdlPWZ5cGFnZUBydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3lqXFxcIiknLC8v6ZO+5o6lXFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLC8v57uE5Lu25qC35byPXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIHBhZ2VUaXRsZTogcGFyc2VEb21Gb3JIdG1sKGFydHNbaV0sICdUZXh0JylcXG4gICAgICAgIH1cXG59KVxcbn1cXG5kLnB1c2goe1xcbmNvbF90eXBlOlxcXCJibGFua19ibG9ja1xcXCJcXG59KVxcbn1cXG5cXG5cXG52YXIg55+t6KmVID0gcGRmaChodG1sLFxcXCIudGFicyYmbGlbZGF0YS1tb3ZpZS10YWItdGFyZ2V0PXJldmlld1RhYl0mJlRleHRcXFwiKVxcbnZhciBjaWxpID0gcGFyc2VEb21Gb3JBcnJheShodG1sLCAnYm9keSYmLml0ZW0uY29sdW1ucy5pcy1kZXNrdG9wJyk7XFxudmFyIHRhYnMgPSBbXFxcIumgkOimvVxcXCIsXFxcIuejgemPiChcXFwiICsgY2lsaS5sZW5ndGggKyBcXFwiKVxcXCIs55+t6KmVXTtcXG5cXG5mdW5jdGlvbiBzZXRUYWJzKHRhYnMsIHRhYnVybCkge1xcbiAgICB2YXIgQ29sb3IxID0gXFxcIiMxM0I2NkFcXFwiO1xcbiAgICBmdW5jdGlvbiBnZXRIZWFkKHRpdGxlKSB7XFxuICAgICAgICByZXR1cm4gJ+KAmOKAmOKAmeKAmTxzdHJvbmc+PGZvbnQgY29sb3I9XFxcIicgKyBDb2xvcjEgKyAnXFxcIj4nICsgdGl0bGUgKyAnPC9mcm9udD48L3N0cm9uZz4nO1xcbiAgICAgICAgIH1cXG4gICAgdmFyIENvbG9yMiA9IFxcXCIjRkYwMEZGXFxcIjtcXG4gICAgZnVuY3Rpb24gZ2V0SGVhcih0aXRsZSkge1xcbiAgICAgICAgcmV0dXJuICfigJjigJjigJnigJk8c3Ryb25nPjxmb250IGNvbG9yPVxcXCInICsgQ29sb3IyICsgJ1xcXCI+JyArIHRpdGxlICsgJzwvZnJvbnQ+PC9zdHJvbmc+JztcXG4gICAgICAgIH1cXG5cXG4gICAgZm9yICh2YXIgaSBpbiB0YWJzKSB7XFxuICAgICAgICB2YXIgdGFibmFtZSA9IHRhYnNbaV07XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBnZXRNeVZhcih0YWJ1cmwsICcxJykgPT0gaSA/IGdldEhlYWQodGFibmFtZSkgOiBnZXRIZWFyKHRhYm5hbWUpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnZmxleF9idXR0b24nLFxcbiAgICAgICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgodGFibmFtZSwgdGFidXJsLCBpKSA9PiB7XFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKHRhYnVybCwgaSlcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgIH0sIHRhYm5hbWUsIHRhYnVybCwgaSlcXG4gICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIH1cXG4gICAgfVxcblxcbnZhciBsaXN0cyA9IFtdO1xcbmZ1bmN0aW9uIHNldExpc3RzKGxpc3RzLCBpbmRleCkge1xcbiAgICBmdW5jdGlvbiBwbGF5TGlzdHMoKSB7XFxuICAgICAgIGlmIChpbmRleCA9PSAwKSB7XFxuLy/pooTop4jop4bpopFcXG4gICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ08bWlkZGxlPjxmb250IGNvbG9yPWJsYWNrPvCfk7rpoJDopr3oppbpoLvikaA8L2ZvbnQ+PC9taWRkbGU+JyxcXG4gICAgICAgIHVybDogTVlfVVJMICsgJCgnJykubGF6eVJ1bGUoKOivhuWIq+eggSkgPT4ge1xcbiAgICAgICAgICAgICB0cnl7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgaHRtbCA9IHJlcXVlc3QoaW5wdXQpXFxuICAgICAgICAgICAgICAgICAgICB2YXIgdXJsID0gcGRmaChodG1sLFxcXCIubWVzc2FnZS1ib2R5JiZzb3VyY2UmJnNyY1xcXCIpXFxuICAgICAgICAgICAgICAgICAgIGlmKCAhdXJsLnN0YXJ0c1dpdGgoXFxcImh0dHBcXFwiKSYmdXJsIT09XFxcIlxcXCIpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IFxcXCJodHRwczpcXFwiICsgdXJsXFxuICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKHVybD09XFxcIlxcXCIpe1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+aykuaciemgkOimveWSr1xcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXJsXFxuICAgICAgICAgICAgIH1jYXRjaHtyZXR1cm4gXFxcInRvYXN0Oi8v5rKS5pyJ6aCQ6Ka95ZKvXFxcIn1cXG4gICAgICAgICAgICAgICAgICB9LOivhuWIq+eggSksXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfMicsXFxuICAgICAgICBleHRyYToge2xpbmVWaXNpYmxlOiBmYWxzZX1cXG4gICAgICAgICAgICAgICAgIH0pXFxuICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPG1pZGRsZT48Zm9udCBjb2xvcj1ibGFjaz7wn5O66aCQ6Ka96KaW6aC74pGhPC9mb250PjwvbWlkZGxlPicsXFxuICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIiArICQoJycpLmxhenlSdWxlKCjor4bliKvnoIEpID0+IHtcXG4gICAgICAgICAgICAgdHJ5e1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNlYXJjaCA9IFxcXCJodHRwczovL2phdnN1YnRpdGxlZC5jb20vemgvc2VhcmNoP2tleXdvcmRzPVxcXCIgKyDor4bliKvnoIFcXG4gICAgICAgICAgICAgICAgICAgIHZhciBjb2RldXJsID0gXFxcImh0dHBzOi8vamF2c3VidGl0bGVkLmNvbS9cXFwiICsgcGRmaChyZXF1ZXN0KHNlYXJjaCksXFxcImJvZHkmJi52aWRlb2JveCYmYSYmaHJlZlxcXCIpXFxuICAgICAgICAgICAgICAgICAgICB2YXIgcGxheWxpc3QgPSBmZXRjaChjb2RldXJsKS5tYXRjaCgvaHR0cHM/OlxcXFwvXFxcXC9cXFxcUytcXFxcLm0zdTgvKVswXVxcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBsYXloZCA9IGZldGNoKHBsYXlsaXN0KS5tYXRjaCgvW15cXFwiXFxcXG5dK1xcXFwubTN1OC9nKS5wb3AoKVxcbiAgICAgICAgICAgICAgICAgICAgdmFyIHVybCA9IHBsYXlsaXN0LnJlcGxhY2UoXFxcInBsYXlsaXN0Lm0zdThcXFwiLHBsYXloZClcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1cmxcXG4gICAgICAgICAgICAgfWNhdGNoe3JldHVybiBcXFwidG9hc3Q6Ly/mjILmoq/miJbmspLmnInpoJDopr3lkq9cXFwifVxcbiAgICAgICAgICAgICAgICAgIH0s6K+G5Yir56CBKSxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF8yJyxcXG4gICAgICAgIGV4dHJhOiB7bGluZVZpc2libGU6IGZhbHNlfVxcbiAgICAgICAgICAgICAgICAgfSlcXG4vL+mihOiniOWbvueJh1xcbnRyeXtcXG4gICAgdmFyIGxpc3QgPSBwZGZhKGh0bWwsXFxcIi5wcmV2aWV3LWltYWdlcyYmLnRpbGUtaXRlbSwxOlxcXCIpXFxuaWYobGlzdC5sZW5ndGg+MCl7XFxuICAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ08bWlkZGxlPjxmb250IGNvbG9yPSNGRjhDMDA+8J+nlvCfj7vigI3imYDvuI/mqKPlk4HlnJblg486IOWFseaciScgKyBsaXN0Lmxlbmd0aCArICflvLXlnJbniYfwn5GHPC9mb250PjwvbWlkZGxlPicsXFxuICAgICAgICB1cmw6IE1ZX1VSTCArICQoJycpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBodG1sID0gcmVxdWVzdChpbnB1dClcXG4gICAgICAgICAgICAgICAgICAgIHZhciBwaWNzID0gcGRmYShodG1sLFxcXCIucHJldmlldy1pbWFnZXMmJi50aWxlLWl0ZW1cXFwiKS5tYXAoaXRlbT0+cGRmaChpdGVtLFxcXCJhJiZocmVmXFxcIikpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInBpY3M6Ly9cXFwiK3BpY3Muam9pbihcXFwiJiZcXFwiKVxcbiAgICAgICAgICAgICAgICAgIH0pLFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzEnLFxcbiAgICAgICAgZXh0cmE6IHtsaW5lVmlzaWJsZTogZmFsc2V9XFxuICAgICAgICAgICAgICAgICB9KSAgIFxcbn0gICAgICAgXFxuICAgIGxpc3QuZm9yRWFjaChpdGVtPT57XFxuICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICBpbWc6IHBkZmgoaXRlbSxcXFwiYSYmaHJlZlxcXCIpLFxcbiAgICAgICAgICAgIHVybDogcGRmaChpdGVtLFxcXCJhJiZocmVmXFxcIiksXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJwaWNfM19zcXVhcmVcXFwiXFxuICAgICAgICAgIH0pXFxuICAgICAgICB9KVxcbiAgICAgfWNhdGNoe30gICAgICAgIFxcbiAgICAgICB9ZWxzZSBpZiAoaW5kZXggPT0gMSkge1xcbi8v56OB5Yqb5YaF5a65XFxudHJ5e1xcbmNpbGkuZm9yRWFjaCh2aWRlbyA9PiB7XFxuLy92YXIgdGl0bGUgPSBwYXJzZURvbUZvckh0bWwodmlkZW8sICdhJiZUZXh0Jyk7XFxudHJ5e1xcbnZhciBzaXplID0gcGFyc2VEb21Gb3JIdG1sKHZpZGVvLCAnLm1ldGEmJlRleHQnKS5tYXRjaCgvXFxcXGQrKD86XFxcXC5cXFxcZCspP1tnbV0oYik/L2kpWzBdXFxufWNhdGNoe1xcbnZhciBzaXplID0gJzAuMDBHQidcXG59XFxudmFyIHRhZyA9IHBhcnNlRG9tRm9ySHRtbCh2aWRlbywgJy50YWdzJiZUZXh0JylcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiDor4bliKvnoIEudG9VcHBlckNhc2UoKSxcXG4gICAgICAgIGRlc2M6IHRhZyArICdcXFxcdFxcXFx08J+TgFxcXFx0JyArIHNpemUgKyAnXFxcXHRcXFxcdPCfl5NcXFxcdCcgK3BhcnNlRG9tRm9ySHRtbCh2aWRlbywgJy50aW1lJiZUZXh0JyksXFxuICAgICAgICBwaWNfdXJsOiAnaHR0cHM6Ly9pbWcudmludWEuY24vaW1hZ2VzL09jcXBqLnBuZycsXFxuICAgICAgICB1cmw6IHBkZmgodmlkZW8sICdhJiZocmVmJykuc3BsaXQoXFxcIiZcXFwiKVswXSxcXG4gICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJywvL+e7hOS7tuagt+W8j1xcbiAgICB9KTtcXG59KVxcbn1jYXRjaHt9XFxuICAgICAgIH1lbHNlIGlmIChpbmRleCA9PSAyKSB7XFxudHJ5e1xcbiAgICAgICB2YXIgdXJsID0gcGQoaHRtbCxcXFwiLnRhYnMmJmxpW2RhdGEtbW92aWUtdGFiLXRhcmdldD1yZXZpZXdUYWJdJiZhJiZkYXRhLXVybFxcXCIpXFxuICAgICAgIHZhciBoID0gZmV0Y2godXJsKVxcbiAgICAgICB2YXIgbGlzdCA9IHBkZmEoaCxcXFwiLm1lc3NhZ2UtYm9keSYmLnJldmlldy1pdGVtOmhhcygucmV2aWV3LXRpdGxlKVxcXCIpXFxuICAgICAgIGxpc3QuZm9yRWFjaChpdGVtPT57XFxuICAgICAgICAgdmFyIGRlc2MgPSAnPG1pZGRsZT48Zm9udCBjb2xvcj0jRkY4QzAwPicgKyBwZGZoKGl0ZW0sXFxcIi5yZXZpZXctdGl0bGUtLS5saWtlcy0tLnJlcG9ydCYmVGV4dFxcXCIpICsgJzwvZm9udD48L21pZGRsZT4nOyAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGRlc2MgKyAnPGJyPicgKyAnPHNtYWxsPjxmb250IGNvbG9yPSNmZjY4Nzc+XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdCcgKyBwZGZoKGl0ZW0sXFxcIi5jb250ZW50JiZUZXh0XFxcIikgKyAnPC9mb250Pjwvc21hbGw+JywgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInJpY2hfdGV4dFxcXCIsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7bGluZVZpc2libGU6ZmFsc2V9XFxuICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICB9KVxcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPHNtYWxsPjxmb250IGNvbG9yPSMxM0I2NkE+5pu05aSa55+t6KmV5Y+v5oiQ5Li6VklQ5oiW6Iez5a6Y5pa5QXBw5Lit5p+l55yLPC9mb250Pjwvc21hbGw+JyxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCcnKS5sYXp5UnVsZSgo6K+G5Yir56CBKSA9PiB7ICAgICAgICAgICAgICAgXFxuICAgICAgICAgb3BlbkFwcEludGVudCgneHh4LnBvcm5odWIuZnVjaycsICd4eHgucG9ybmh1Yi5mdWNrLk1haW5BY3Rpdml0eScsIHtpbnRlbnREYXRhOiDor4bliKvnoIF9KVxcbiAgICAgICAgICAgIHJldHVybiBcXFwiY29weTovL1xcXCIgKyDor4bliKvnoIFcXG4gICAgICAgICAgICAgICAgICB9LOivhuWIq+eggSksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7bGluZVZpc2libGU6ZmFsc2V9XFxuICAgICAgICAgICAgICAgfSlcXG59Y2F0Y2h7fVxcbiAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIHBsYXlMaXN0cygpICAgICAgICBcXG4gICAgICAgICAgICB9XFxuXFxuc2V0VGFicyh0YWJzLCBNWV9VUkwpO1xcbnNldExpc3RzKGxpc3RzLCBnZXRNeVZhcihNWV9VUkwsICcxJykpO1xcblxcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAnPHNwYW4gc3R5bGU9XFxcImNvbG9yOiAjRkYwMEZGO1xcXCI+VEEo5YCRKemChOWHuua8lOmBjjwvc3Bhbj4nLFxcbiAgICBwaWNfdXJsOiBcXFwiaHR0cHM6Ly9sYW5tZWlndW9qaWFuZy5jb20vdHViaWFvL2tlLzEwMC5wbmdcXFwiLFxcbiAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCdcXG59KTtcXG5cXG50cnl7XFxudmFyIGxpc3QgPSBwYXJzZURvbUZvckFycmF5KGh0bWwsICdib2R5JiYubWVzc2FnZTptYXRjaGVzKOmChOWHuua8lOmBjikmJi50aWxlLXNtYWxsJiZhJyk7XFxuXFxubGlzdC5mb3JFYWNoKHZpZGVvID0+IHtcXG4gICAgdmFyIHRpdGxlID0gcGFyc2VEb21Gb3JIdG1sKHZpZGVvLCAnLnZpZGVvLW51bWJlciYmVGV4dCcpICsgJyAnICsgcGFyc2VEb21Gb3JIdG1sKHZpZGVvLCAnYSYmdGl0bGUnKTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAgdGl0bGUsXFxuICAgICAgICAvL2Rlc2M6IHBhcnNlRG9tRm9ySHRtbCh2aWRlbywgJy52aWRlby1udW1iZXImJlRleHQnKSxcXG4gICAgICAgIGltZzogcGFyc2VEb20odmlkZW8sICdpbWcmJnNyYycpLnJlcGxhY2UoXFxcInRodW1ic1xcXCIsXFxcImNvdmVyc1xcXCIpICsgXFxcIkBSZWZlcmVyPVxcXCIsXFxuICAgICAgICB1cmw6IHBhcnNlRG9tKHZpZGVvLCAnYSYmaHJlZicpICsgJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiZWpcXFwiKScsXFxuICAgICAgICBjb2xfdHlwZTogJ21vdmllXzInLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBwYWdlVGl0bGU6IHRpdGxlLFxcbiAgICAgICAgfVxcbiAgfSk7XFxufSkgICBcXG59IGNhdGNoIChlcnIpIHtcXG4gIC8vY29uc29sZS5sb2coJ+ayoeacieWHuua8lOWIl+ihqCcsIGVycik7XFxufTtcXG5cXG5cXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJzxzcGFuIHN0eWxlPVxcXCJjb2xvcjogI0ZGMDBGRjtcXFwiPuS9oOWPr+iDveS5n+WWnOatoTwvc3Bhbj4nLFxcbiAgICBwaWNfdXJsOiBcXFwiaHR0cHM6Ly9sYW5tZWlndW9qaWFuZy5jb20vdHViaWFvL2tlLzEwMC5wbmdcXFwiLFxcbiAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCdcXG59KTtcXG5cXG50cnl7XFxudmFyIGxpc3QgPSBwYXJzZURvbUZvckFycmF5KGh0bWwsICdib2R5JiYubWVzc2FnZTptYXRjaGVzKOS9oOWPr+iDveS5n+WWnOatoSkmJi50aWxlLXNtYWxsJiZhJyk7XFxuXFxubGlzdC5mb3JFYWNoKHZpZGVvID0+IHtcXG4gICAgdmFyIHRpdGxlID0gcGFyc2VEb21Gb3JIdG1sKHZpZGVvLCAnLnZpZGVvLW51bWJlciYmVGV4dCcpICsgJyAnICsgcGFyc2VEb21Gb3JIdG1sKHZpZGVvLCAnYSYmdGl0bGUnKTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAgdGl0bGUsXFxuICAgICAgICAvL2Rlc2M6IHBhcnNlRG9tRm9ySHRtbCh2aWRlbywgJy52aWRlby1udW1iZXImJlRleHQnKSxcXG4gICAgICAgIGltZzogcGFyc2VEb20odmlkZW8sICdpbWcmJnNyYycpLnJlcGxhY2UoXFxcInRodW1ic1xcXCIsXFxcImNvdmVyc1xcXCIpICsgXFxcIkBSZWZlcmVyPVxcXCIsXFxuICAgICAgICB1cmw6IHBhcnNlRG9tKHZpZGVvLCAnYSYmaHJlZicpICsgJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiZWpcXFwiKScsXFxuICAgICAgICBjb2xfdHlwZTogJ21vdmllXzInLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBwYWdlVGl0bGU6IHRpdGxlLFxcbiAgICAgICAgfVxcbiAgfSk7XFxufSkgICBcXG59IGNhdGNoIChlcnIpIHtcXG4gIC8vY29uc29sZS5sb2coJ+ayoeacieaOqOiNkOWIl+ihqCcsIGVycik7XFxufTtcXG5cXG59Y2F0Y2h7XFxudmFyIOivhuWIq+eggSA9IGdldFBhZ2VUaXRsZSgpLnNwbGl0KFxcXCIgXFxcIilbMF0ucmVwbGFjZShcXFwiRkMyXFxcIixcXFwiRkMyLVBQVlxcXCIpO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICBcXFwiZmMy6ZyA6KaBVklQ55m75b2VXFxcIixcXG4gICAgICAgIGRlc2M6IFxcXCIzMDDlpKfmtIvvvIzmiY3mmL7npLrpobXpnaLvvIzosLfmrYzmkJzntKLkuIDkuIvmiJbmiLPkuIvpnaLlm77moIdcXFwiLFxcbiAgICAgICAgdXJsOiBcXFwiaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9zZWFyY2g/cT1cXFwiICsg6K+G5Yir56CBLFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJyxcXG4gICAgICAgIGV4dHJhOntsaW5lVmlzaWJsZTpmYWxzZX1cXG4gICAgICAgIH0pO1xcbmV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL3Rvb2wnLCB7fSkpLnJ1bGUpO1xcblxcbn1cXG5cXG5mb3IgKHZhciBiID0gMDsgYiA8IDI7IGIrKykge1xcbmQucHVzaCh7XFxuICAgIGNvbF90eXBlOiAnYmlnX2JsYW5rX2Jsb2NrJ1xcbn0pXFxufVxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi4pGj5LiA57qn5pS26JeP6aG16Z2iXCIsXCJwYXRoXCI6XCLmlLbol49cIixcInJ1bGVcIjpcImZ1bmN0aW9uIGdldEhlYWQodGl0bGUsY29sb3IpIHtcXG4gICAgcmV0dXJuICfigJjigJjigJnigJk8c3Ryb25nPjxiaWc+PGZvbnQgY29sb3I9XFxcIicrY29sb3IrJ1xcXCI+JyArIHRpdGxlICsgJzwvZnJvbnQ+PC9iaWc+PC9zdHJvbmc+JztcXG59XFxuXFxudmFyIGxhYmVsID0gZ2V0VmFyKFxcXCJsYWJlbFxcXCIpID8gZ2V0VmFyKFxcXCJsYWJlbFxcXCIpIDogXFxcIuW9seeJh1xcXCI7XFxuaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IGxhYmVsID09IFxcXCLlvbHniYdcXFwiID8gZ2V0SGVhZChcXFwiPeKLmeW9seeJh+KLmD1cXFwiLFxcXCIjRkYwMEZGXFxcIikgOiBnZXRIZWFkKFxcXCI94ouZ5b2x54mH4ouYPVxcXCIsXFxcIiNEM0QzRDNcXFwiKSxcXG4gICAgICAgaW1nOiBcXFwiaHR0cHM6Ly9jZG4xLmljb25maW5kZXIuY29tL2RhdGEvaWNvbnMvdWktdXNlci1pbnRlcmZhY2UtOS8xMDAwL1ZpZGVvX0NhbWVyYS0xMjgucG5nXFxcIixcXG4gICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHkjbm9Mb2FkaW5nI0BsYXp5UnVsZT0uanM6cHV0VmFyKCdsYWJlbCcsJ+W9seeJhycpO3JlZnJlc2hQYWdlKGZhbHNlKTsndG9hc3Q6Ly/liIfmjaLmiJDlip8nXFxcIixcXG4gICAgICAgIGNvbF90eXBlOiAnaWNvbl8yX3JvdW5kJ1xcbiAgICB9KTtcXG59XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogbGFiZWwgPT0gXFxcIua8lOWToVxcXCIgPyBnZXRIZWFkKFxcXCI94ouZ5ryU5ZOh4ouYPVxcXCIsXFxcIiNGRjAwRkZcXFwiKSA6IGdldEhlYWQoXFxcIj3ii5nmvJTlk6Hii5g9XFxcIixcXFwiI0QzRDNEM1xcXCIpLFxcbiAgICAgICAgaW1nOiBcXFwiaHR0cHM6Ly9jZG4yLmljb25maW5kZXIuY29tL2RhdGEvaWNvbnMvdmFsZW50aW5lLWRheS0xNi81MTIvNzA2X3Blbl9sb3ZlX2hlYXJ0X3dlZGRpbmdfdmFsZW50aW5lX3ZhbGVudGluZXNfZGF5X2xvdmUtMTI4LnBuZ1xcXCIsXFxuICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5I25vTG9hZGluZyNAbGF6eVJ1bGU9LmpzOnB1dFZhcignbGFiZWwnLCfmvJTlk6EnKTtyZWZyZXNoUGFnZShmYWxzZSk7J3RvYXN0Oi8v5YiH5o2i5oiQ5YqfJ1xcXCIsXFxuICAgICAgICBjb2xfdHlwZTogJ2ljb25fMl9yb3VuZCdcXG4gICAgfSk7XFxuXFxuXFxudmFyIHUgPSBsYWJlbCA9PSBcXFwi5b2x54mHXFxcIiA/ICdoaWtlcjovL2ZpbGVzL3J1bGVzL2Fwb2xsby9qYXZkYi9qYXZkYl92aWRlby50eHQnIDogJ2hpa2VyOi8vZmlsZXMvcnVsZXMvYXBvbGxvL2phdmRiL2phdmRiX2FjdG9yLnR4dCc7XFxudmFyIHN0ciA9IHJlYWRGaWxlKHUsIDApO1xcbmlmIChzdHIpIHtcXG4gICAgdmFyIGxpc3QgPSBKU09OLnBhcnNlKHN0cik7XFxuICAgIGxpc3QuZm9yRWFjaCgobGlzdCkgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogbGlzdC5zcGxpdCgnQEAnKVswXSxcXG4gICAgICAgICAgICBpbWc6IGxpc3Quc3BsaXQoJ0BAJylbMV0sXFxuICAgICAgICAgICAgdXJsOiBsYWJlbCA9PSBcXFwi5ryU5ZOhXFxcIj8naGlrZXI6Ly9wYWdlL3lqJzonaGlrZXI6Ly9wYWdlL2VqJyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogbGFiZWwgPT0gXFxcIua8lOWToVxcXCIgPyAnY2FyZF9waWNfMycgOiAnbW92aWVfMicsXFxuICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgdXJsOiBsaXN0LnNwbGl0KCdAQCcpWzJdLnJlcGxhY2UoZ2V0TXlWYXIoJ3lvbmdqaXUnKSxNWV9IT01FKSxcXG4gICAgICAgICAgICAgIHBhZ2VUaXRsZTogbGlzdC5zcGxpdCgnQEAnKVswXSxcXG4gICAgICAgICAgICAgIGxvbmdDbGljazogW3tcXG4gICAgICAgICAgICAgICAgICB0aXRsZTogJ+WPlua2iOaUtuiXjycsXFxuICAgICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKGxpc3QsIHUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBKU09OLnBhcnNlKGZldGNoUEModSkgfHwgJ1tdJyk7XFxuICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhLmZpbHRlcih4ID0+IHggIT0gbGlzdCk7XFxuICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZSh1LCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XFxuICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICAgICAgICAgICAgfSwgbGlzdCwgdSlcXG4gICAgICAgICAgICAgIH1dLFxcbiAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgfSk7XFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi4pGj5LiA57qn6aG16Z2i55m75b2VXCIsXCJwYXRoXCI6XCLnmbvlvZVcIixcInJ1bGVcIjpcIlxcbmlmKGZldGNoKCdoaWtlcjovL2ZpbGVzL2NhY2hlL2phdmRiX2Nvb2tpZS50eHQnKSl7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPGJpZz48Zm9udCBjb2xvcj0jRkYwMEZGPui0puWPt+W3sueZu+W9lTwvZm9udD48L2JpZz4nLFxcbiAgICAgICAgICAgIGRlc2M6ICfigJzigJzigJ3igJ0nICsgJ+WIh+aNouWIhuexu+WIt+aWsOmhtemdouWGheWuuScuZm9udGNvbG9yKCcjRkYwMEZGJykuYmlnKCksXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJyxcXG4gICAgICAgIH0pO1xcbiAgICB9ZWxzZXtcXG5cXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdJyArICfngrnlh7vnmbvlvZXotKblj7cnLmZvbnRjb2xvcignI0ZGMDBGRicpLmJpZygpLFxcbiAgICAgICAgdXJsOiB0cnVlX3VybCArICQoJycpLnJ1bGUoKCkgPT4ge1xcbiAgICAgICAgICAgIHZhciBkID0gW107XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICd4NV93ZWJ2aWV3X3NpbmdsZScsXFxuICAgICAgICAgICAgICAgIHVybDogTVlfVVJMLFxcbiAgICAgICAgICAgICAgICBkZXNjOiAnbGlzdCYmc2NyZWVuJyxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIHVhOiBQQ19VQSxcXG4gICAgICAgICAgICAgICAgICAgIHNob3dQcm9ncmVzczogZmFsc2UsXFxuICAgICAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygodSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNoZWNrKCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2xldCBub2RlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyN0YWdzJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjbyA9IGZiYS5nZXRDb29raWUodSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vZmJhLmxvZygnY286Ojo6OjonICsgY28pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY28uaW5jbHVkZXMoJ3JlbWVtYmVyX21lX3Rva2VuJykpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZiYS5wYXJzZUxhenlSdWxlKCQkJCgpLmxhenlSdWxlKChjbykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZSgnaGlrZXI6Ly9maWxlcy9jYWNoZS9qYXZkYl9jb29raWUudHh0JywgY28pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0KCfotKblj7flt7LnmbvlvZUnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgY28pKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoY2hlY2ssIDUwMCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2soKTtcXG4gICAgICAgICAgICAgICAgICAgIH0sIE1ZX1VSTClcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIHJldHVybiBzZXRSZXN1bHQoZCk7XFxuICAgICAgICB9KSxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXG4gICAgfSk7XFxuXFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5pCc57SiXCIsXCJwYXRoXCI6XCJzZWFyY2hcIixcInJ1bGVcIjpcIiAgICAgICAgaWYgKHBhZ2UgPT09IDEpIHtcXG4gICAgICAgICAgICB2YXIgdGFicyA9IFtcXFwi5b2x54mHXFxcIiwgXFxcIua8lOWRmFxcXCIsIFxcXCLlj6/mkq3mlL5cXFwiLCBcXFwi5Lit5a2XXFxcIiwgXFxcIuejgemTvlxcXCIsIFxcXCLmuIXljZVcXFwiXVxcbiAgICAgICAgICAgIHZhciBsaXN0cyA9IFtcXFwiYWxsXFxcIiwgXFxcImFjdG9yXFxcIiwgXFxcInBsYXlhYmxlXFxcIiwgXFxcImNuc3ViXFxcIiwgXFxcImRvd25sb2FkXFxcIiwgXFxcImxpc3RcXFwiXVxcblxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBzZXRUYWJzKHRhYnMpIHtcXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgaW4gdGFicykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBnZXRNeVZhcihcXFwidGFiXFxcIiwgJzAnKSA9PSBpID8gJ+KAmOKAmOKAmeKAmTxzdHJvbmc+PGZvbnQgY29sb3I9XFxcIiNGRjAwRkZcXFwiPicgKyB0YWJzW2ldICsgJzwvZm9udD48L3N0cm9uZz4nIDogdGFic1tpXSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdmbGV4X2J1dHRvbicsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmxhenlSdWxlKChpLCBsaXN0cykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcInRhYlxcXCIsIGkpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2V0TXlWYXIoJ2tleScpID09IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGtleXMgPSBsaXN0TXlWYXJLZXlzKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaXQgb2Yga2V5cykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKGl0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcInRhYlxcXCIsIGkpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dFZhcihNWV9SVUxFLnVybCwgXFxcImh0dHBzOi8vamF2ZGIuY29tL3NlYXJjaD9mPVxcXCIgKyBsaXN0c1tpXSArIFxcXCImcT1cXFwiICsgZ2V0TXlWYXIoJ2tleScpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcigneWlfZmlyc3RwYWdlJywgXFxcImh0dHBzOi8vamF2ZGIuY29tL3NlYXJjaD9mPVxcXCIgKyBsaXN0c1tpXSArIFxcXCImcT1cXFwiICsgZ2V0TXlWYXIoJ2tleScpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgaSwgbGlzdHMpXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBzZXRMaXN0cyhsaXN0cywgaW5kZXgpIHtcXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHBsYXlMaXN0cygpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIvCfko5cXFwiICsgdGFic1tpbmRleF0gKyBcXFwi8J+SjlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6ICfmkJzntKLkvaDmg7PopoHnmoQnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2lucHV0JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkLnRvU3RyaW5nKChsaXN0cywgaW5kZXgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdrZXknLCBpbnB1dClcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBrZXlzID0gbGlzdE15VmFyS2V5cygpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGl0IG9mIGtleXMpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihpdCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRWYXIoTVlfUlVMRS51cmwsIFxcXCJodHRwczovL2phdmRiLmNvbS9zZWFyY2g/Zj1cXFwiICsgbGlzdHNbaW5kZXhdICsgXFxcIiZxPVxcXCIgKyBpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3lpX2ZpcnN0cGFnZScsIFxcXCJodHRwczovL2phdmRiLmNvbS9zZWFyY2g/Zj1cXFwiICsgbGlzdHNbaW5kZXhdICsgXFxcIiZxPVxcXCIgKyBpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgbGlzdHMsIGluZGV4KSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0TXlWYXIoJ2tleScsICcnKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBcXFwicHV0TXlWYXIoJ2tleScsIGlucHV0KVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBwbGF5TGlzdHMoKVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgc2V0VGFicyh0YWJzLCB0cnVlX3VybCk7XFxuICAgICAgICAgICAgc2V0TGlzdHMobGlzdHMsIGdldE15VmFyKCd0YWInLCAnMCcpKTtcXG4gICAgICAgIH07XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLikaDkuIDnuqflpJbpg6hGYzJcIixcInBhdGhcIjpcImZjMlwiLFwicnVsZVwiOlwianM6IFxcbi8vc2V4ODA4NkBnbWFpbC5jb21cXG4vL2h0dHBzOi8vamF2bGlzdC5tZS9wb3N0LnBocFxcblxcbmFkZExpc3RlbmVyKFxcXCJvbkNsb3NlXFxcIiwgKCkgPT4ge1xcbiAgICAgICAvLyBjbGVhck15VmFyKFxcXCJmY3VybFxcXCIpO1xcbn0pO1xcblxcbiAgICB2YXIgZCA9IFtdXFxuXFxuICAgIE1ZX1VSTCA9IE1ZX1VSTC5zcGxpdChcXFwiI1xcXCIpWzBdXFxuXFxuICAgIHNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5q+P5pel5LiA6KiAXCIsXCJwYXRoXCI6XCJ5aXlhblwiLFwicnVsZVwiOlwiLy9hdXRob3I657KJ5aa5XFxuZnVuY3Rpb24gc2F2ZV9kYXlfc2F5X2NhY2hlKCkge1xcbiAgICBsZXQgZGF5X3NheV9jYWNoZSA9IHt9XFxuICAgIGxldCBkYXlfc2F5X2h0bWwgPSBmZXRjaCgnaHR0cHM6Ly92MS5oaXRva290by5jbicsIHtcXG4gICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAnVXNlci1BZ2VudCc6XFxuICAgICAgICAgICAgICAgICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTIyLjAuMC4wIFNhZmFyaS81MzcuMzYnLFxcbiAgICAgICAgfSxcXG4gICAgfSlcXG4gICAgZGF5X3NheV9odG1sID0gSlNPTi5wYXJzZShkYXlfc2F5X2h0bWwpXFxuICAgIGRheV9zYXlfY2FjaGVbJ2NvbnRlbnQnXSA9IGRheV9zYXlfaHRtbFsnaGl0b2tvdG8nXVxcbiAgICBkYXlfc2F5X2NhY2hlWyd0aW1lJ10gPSBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKVxcbiAgICBnbG9iYWxNYXAwLnB1dE15VmFyKCdkYXlzYXknLCBkYXlfc2F5X2NhY2hlKVxcbiAgICByZXR1cm4gZGF5X3NheV9odG1sWydoaXRva290byddXFxufVxcblxcbiAgICBsZXQgZGF5X3NheSA9ICcnXFxuICAgIHRyeSB7XFxuICAgICAgICBsZXQgZGF5X3NheV9jYWNoZSA9IHt9XFxuICAgICAgICBsZXQgZGF5X3RpbWUgPSAwXFxuICAgICAgICBpZiAoZ2xvYmFsTWFwMC5oYXNNeVZhcignZGF5c2F5JykpIHtcXG4gICAgICAgICAgICBkYXlfc2F5X2NhY2hlID0gZ2xvYmFsTWFwMC5nZXRNeVZhcignZGF5c2F5Jywge30pXFxuICAgICAgICAgICAgZGF5X3RpbWUgPSBkYXlfc2F5X2NhY2hlWyd0aW1lJ11cXG4gICAgICAgICAgICBpZiAoTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCkgLSBkYXlfdGltZSA+PSA2MDApIHtcXG4gICAgICAgICAgICAgICAgZGF5X3NheSA9IHNhdmVfZGF5X3NheV9jYWNoZSgpXFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgZGF5X3NheSA9IGRheV9zYXlfY2FjaGVbJ2NvbnRlbnQnXVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgZGF5X3NheSA9IHNhdmVfZGF5X3NheV9jYWNoZSgpXFxuICAgICAgICB9XFxuICAgIH0gY2F0Y2gge1xcbiAgICAgICAgZGF5X3NheSA9ICcnXFxuICAgIH1cIn1dIiwiaWNvbiI6Imh0dHBzOi8vaW1nLnZpbnVhLmNuL2ltYWdlcy96ckxrUS5wbmciLCJwcm94eSI6IiJ9
Add Comment
Please, Sign In to add comment