xiaomianao666

小程序:绅士漫画

Dec 13th, 2024
456
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@绅士漫画@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6IiIsInRpdGxlIjoi57uF5aOr5ryr55S7IiwiYXV0aG9yIjoi5a2j6aOOIiwidXJsIjoiaGlrZXI6Ly9lbXB0eSMjYWxidW1zLWluZGV4LXBhZ2UtZnlwYWdlLWNhdGUtNi5odG1sIiwidmVyc2lvbiI6MCwiY29sX3R5cGUiOiJtb3ZpZV8zX21hcnF1ZWUiLCJjbGFzc19uYW1lIjoiIiwidHlwZSI6InZpZGVvIiwiY2xhc3NfdXJsIjoiIiwiYXJlYV9uYW1lIjoiIiwiYXJlYV91cmwiOiIiLCJzb3J0X25hbWUiOiIiLCJ5ZWFyX25hbWUiOiIiLCJzb3J0X3VybCI6IiIsInllYXJfdXJsIjoiIiwiZmluZF9ydWxlIjoianM6XG52YXIgZCA9IFtdO1xudmFyIHdob3N0ID0gY29uZmlnLmhvc3RcbmNvbnN0IGhvc3QgPXdob3N0KydhbGJ1bXMtaW5kZXgtcGFnZS1meXBhZ2UtY2F0ZS02Lmh0bWwnO1xuZXZhbChKU09OLnBhcnNlKGZldGNoKFwiaGlrZXI6Ly9wYWdlL2ppYW5cIikpLnJ1bGUpO1xuY29uc3QgcGFnZSA9IE1ZX1BBR0U7XG52YXIgZ2V0UmFuZ2VDb2xvcnMgPSBmdW5jdGlvbigpIHvCoMKgwqDCoMKgwqDCoFxuICAgIHJldHVybiAoJzAwMDAwJyArIChNYXRoLnJhbmRvbSgpICogMHgxMDAwMDAwIDw8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTvCoMKgwqDCoMKgXG59XG5pZiAoTVlfUEFHRSA9PSAxKVxuIHsgIFxuZC5wdXNoKHtcbiAgICAgICAgdGl0bGU6IFwi5pCc57SiXCIsXG4gICAgICAgIGNvbF90eXBlOiBcImljb25fMV9zZWFyY2hcIixcbiAgICAgICAgdXJsOiAkKFwiXCIpLmlucHV0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICghaW5wdXQpIHJldHVybjtcbiAgICAgICAgICAgIHJldHVybiBcImhpa2VyOi8vcGFnZS9zZWFyY2g/cGFnZT1meXBhZ2UmdGl0bGU9XCIraW5wdXQrXCIjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjXCI7XG4gICAgICAgIH0pLFxuICAgICAgICBwaWNfdXJsOiBcImhpa2VyOi8vaW1hZ2VzL21lbnVfc2VhcmNoMlwiLFxuICAgIH0pO1xubGV0IG5hdiA9IFtcIummlumhtVwiLFwi5YiG57G7XCIsIFwi5pyA5pawXCJdO1xubGV0IGNvbG9ycz0gWyc5RjVGOUYnLCdmN2U4YWEnLCcyMGExNjInXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hdi5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgbXl0aXRsZSA9IG5hdltpXTtcbiAgICAgICAgZC5wdXNoKHtcbiAgICAgICAgICAgIHRpdGxlOiBnZXRNeVZhcignbmF2dGl0bGUnLCBcIummlumhtVwiKSA9PSBteXRpdGxlID8gY29sb3IobXl0aXRsZSxnZXRSYW5nZUNvbG9ycygpKTogbXl0aXRsZSxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMjbm9IaXN0b3J5IycpLmxhenlSdWxlKChteXRpdGxlKSA9PiB7XG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoXCJuYXZ0aXRsZVwiLCBteXRpdGxlKTtcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcbiAgICAgICAgICAgIH0sIG15dGl0bGUpLFxuICAgICAgICAgICAgY29sX3R5cGU6IFwidGV4dF8zXCJcbiAgICAgICAgfSk7XG4gICAgfVxufVxuaWYgKGdldE15VmFyKCduYXZ0aXRsZScsIFwi6aaW6aG1XCIpID09IFwi6aaW6aG1XCIpIHtcbnZhciBNWV9VUkwgPSB3aG9zdDtcbnZhciBodG1sID0gZmV0Y2goTVlfVVJMKTtcbnZhciBMYWIxID0gcGRmYShodG1sLCdib2R5JiYuaW1nQm94Jyk7XHJcbiAgICAgICAgTGFiMS5mb3JFYWNoKChkYXRhKSA9PiB7XG4gICAgICAgICAgICB2YXIgdXJscyA9IHBkKGRhdGEsICcuU3ViX0gyJiZhJiZocmVmJyx3aG9zdCk7XG4gICAgICAgICAgICB2YXIgdXJsYiA9IC9pbmRleC8udGVzdCh1cmxzKT91cmxzLnJlcGxhY2UoJ2luZGV4JywnaW5kZXgtcGFnZS1meXBhZ2UnKTp1cmxzLnJlcGxhY2UoJ2FsYnVtcycsJ2FsYnVtcy1pbmRleC1wYWdlLWZ5cGFnZScpO1xuZC5wdXNoKHtcclxuICAgICAgICAgICAgICAgIHRpdGxlOiBzcChwZGZoKGRhdGEsICcuVGl0bGUmJlRleHQnKSksXG4gICAgICAgICAgICAgICAgZGVzYzogXCLmm7TlpJrigbpcIixcbiAgICAgICAgICAgICAgICBwaWNfdXJsOiBwZChkYXRhLCAnLlN1Yl9IMiYmaW1nJiZzcmMnLHdob3N0KSxcbiAgICAgICAgICAgICAgICB1cmw6IHVybGIgKyAnQHJ1bGU9anM6JC5yZXF1aXJlKFwiaGlrZXI6Ly9wYWdlL3p4XCIpJyxcbmNvbF90eXBlOiBcImF2YXRhclwiLFxyXG4gICAgICAgICAgICB9KTsgICAgICAgICAgICBcclxuICAgICAgICAgICAgdmFyIGl0ZW0gPSBwZGZhKGRhdGEsICcuY29sXzNfMiYmbGknKTtcclxuICAgICAgICAgICAgaXRlbS5mb3JFYWNoKChkYXRhcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgZC5wdXNoKHsgXHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHNwKHBkZmgoZGF0YXMsICcudHh0QSYmVGV4dCcpKSxcclxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBzcChwZGZoKGRhdGFzLCAnLmluZm8mJlRleHQnKSksXHJcbiAgICAgICAgICAgICAgICAgICAgcGljX3VybDogcGQoZGF0YXMsICdpbWcmJnNyYycpLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcIm1vdmllXzNfbWFycXVlZVwiLFxuICAgICAgICAgICAgICAgICAgICAgIHVybDogcGQoZGF0YXMsICdhJiZocmVmJykrJyNpbW1lcnNpdmVUaGVtZSMjYXV0b0NhY2hlI0BydWxlPWpzOiQucmVxdWlyZShcIuS6jOe6p1wiKScsXG5leHRyYTogeyAgICBpbWc6IHBkKGRhdGFzLCAnaW1nJiZzcmMnKSxcbiAgICAgICAgICAgICAgICB9LFxufSk7XG59KVxufSlcbn1cbmVsc2UgaWYgKGdldE15VmFyKFwibmF2dGl0bGVcIikgPT0gXCLliIbnsbtcIikge1xudmFyIGdldFJhbmdlQ29sb3JzID0gZnVuY3Rpb24oKSB7wqDCoMKgwqDCoMKgwqBcbiAgICByZXR1cm4gJyMnICsgKCcwMDAwMCcgKyAoTWF0aC5yYW5kb20oKSAqIDB4MTAwMDAwMCA8PCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7wqDCoMKgwqDCoFxufVxuY29uc3Qg5LiL5LiA6aG1ID0gXCJwZChodG1sLCAnYTptYXRjaGVzKOW+jOmggSkmJmhyZWYnKVwiO1xuZXZhbChKU09OLnBhcnNlKGZldGNoKFwiaGlrZXI6Ly9wYWdlL3lqXCIsIHt9KSkucnVsZSk7XG5cbnZhciDlrprkvY3kv6Hmga8gPSBbe1xuICAgIOWkp+exu+WumuS9jTogJycsXG4gICAg5bCP57G7OiAnYm9keSYmYTpub3QoOm1hdGNoZXMo6aaWfOeIsXzorrrlnZt86LWEfOS4k3znlZl85pyAfOaOkikpJyxcbiAgXG59LCB7XG4gICAg5LiA57qn5a6a5L2NOiAnI2FsYnVtX3RhYnMmJmxpLDI6NicsXG5cbn1dXG5cbk1ZX1VSTD0gaG9zdDtcbmxldCB0cnVlX3VybCA9IGdldFRydWVsaW5rKE1ZX1JVTEUudXJsLCBNWV9VUkwsIHBhZ2UpO1xuLy9sb2codHJ1ZV91cmwpXG5cbnZhciBodG1sID0gZmV0Y2hQQyh0cnVlX3VybClcbmNvbnN0IGRjID0gZHluYW1pY0NsYXNzKHtcbiAgICDliIbnsbvpopzoibI6IGdldFJhbmdlQ29sb3JzKClcbn0pO1xuZGMu5byA5ZCv5oqY5Y+gKGZhbHNlKVxuZGMu5byA5ZCv5pCc57SiKGZhbHNlKVxuZGMu5Yib5bu65Yqo5oCB5YiG57G7KOWumuS9jeS/oeaBrylcbi8qXG52YXIgcGFyc2VSdWxlID0ge1xuICAgIGxpc3Q6ICcuZ2FsbGFyeV93cmFwJiZsaScsIC8v57uf5LiAaXRlbVxuICAgIHRpdGxlOiAnaW1nJiZhbHQnLFxuICAgIGRlc2M6ICcuaW5mb19jb2wmJlRleHQnLFxuICAgIGltZzogJ2ltZyYmc3JjJyxcbiAgICB1cmw6ICdhJiZocmVmJyxcbiAgICByZWY6ICdAUmVmZXJlcj0nLFxuICAgIGltdDogdHJ1ZSxcbiAgICAvL2JhY2tpbWc6IHRydWUsXG59XG5DcmVhdGUuTGlzdChkLCBodG1sLCBwYXJzZVJ1bGUpO1xuKi9cbnZhciBsaXN0ID0gcGRmYShodG1sLCAnLmdhbGxhcnlfd3JhcCYmbGknKTtcbmZvciAodmFyIGogaW4gbGlzdCkge1xuICAgIGQucHVzaCh7XG4gICAgICAgIHRpdGxlOiBzcChwZGZoKGxpc3Rbal0sICdpbWcmJmFsdCcpKSxcbiAgICAgICAgZGVzYzogc3AocGRmaChsaXN0W2pdLCAnLmluZm9fY29sJiZUZXh0JykpLFxuICAgICAgICBpbWc6IHBkKGxpc3Rbal0sICdpbWcmJnNyYycsd2hvc3QpLFxuICAgICAgICB1cmw6IHBkKGxpc3Rbal0sICdhJiZocmVmJyx3aG9zdCkrJyNpbW1lcnNpdmVUaGVtZSMjYXV0b0NhY2hlI0BydWxlPWpzOiQucmVxdWlyZShcIuS6jOe6p1wiKScsXG4gICAgIGV4dHJhOiB7aW1nOiBwZChsaXN0W2pdLCAnaW1nJiZzcmMnLHdob3N0KX0sXG4gICAgfSk7XG59XG5hdXRvUGFnZSgpO1xufVxuZWxzZSBpZiAoZ2V0TXlWYXIoXCJuYXZ0aXRsZVwiKSA9PSBcIuacgOaWsFwiKSB7XG52YXIgdXJsID0gd2hvc3QrXCJhbGJ1bXMtaW5kZXgtcGFnZS1cIitwYWdlK1wiLmh0bWxcIlxudmFyIGh0bWwgPSBmZXRjaCh1cmwpO1xudmFyIGl0ZW0gPSBwZGZhKGh0bWwsICcuY29sXzImJmxpJyk7XHJcbiAgICAgICAgICAgIGl0ZW0uZm9yRWFjaCgoZGF0YXMpID0+IHtcclxuICAgICAgICAgICAgICAgIGQucHVzaCh7IFxyXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBzcChwZGZoKGRhdGFzLCAnLnR4dEEmJlRleHQnKSksXHJcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogc3AocGRmaChkYXRhcywgJy5pbmZvJiZUZXh0JykpLFxyXG4gICAgICAgICAgICAgICAgICAgIHBpY191cmw6IHBkKGRhdGFzLCAnaW1nJiZzcmMnLHdob3N0KSxcclxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXCJtb3ZpZV8zX21hcnF1ZWVcIixcbiAgICAgICAgICAgICAgICAgICAgICB1cmw6IHBkKGRhdGFzLCAnYSYmaHJlZicsd2hvc3QpKycjaW1tZXJzaXZlVGhlbWUjI2F1dG9DYWNoZSNAcnVsZT1qczokLnJlcXVpcmUoXCLkuoznuqdcIiknLFxuZXh0cmE6IHsgICAgaW1nOiBwZChkYXRhcywgJ2ltZyYmc3JjJyx3aG9zdCksXG4gICAgICAgICAgICAgICAgfSxcbn0pO1xufSlcblxufVxuc2V0UmVzdWx0KGQpIiwic2VhcmNoX3VybCI6Imhpa2VyOi8vZW1wdHkjI3EvaW5kZXgucGhwP3E9KiombT0mZj1fYWxsJnN5bj15ZXMmcz1jcmVhdGVfdGltZV9ERVNDJnA9ZnlwYWdlIiwiZ3JvdXAiOiIj77iP4oOj4pGi5ryr55S7Iiwic2VhcmNoRmluZCI6ImpzOlxudmFyIGQgPSBbXTtcbmV2YWwoSlNPTi5wYXJzZShmZXRjaChcImhpa2VyOi8vcGFnZS9qaWFuXCIpKS5ydWxlKTtcbnZhciBob3N0ID0gY29uZmlnLmhvc3Rcbk1ZX1VSTCA9IGhvc3QrIE1ZX1VSTC5yZXBsYWNlKCdoaWtlcjovL2VtcHR5IyMnLCAnJyk7XG5sZXQgaHRtbCA9IGZldGNoKE1ZX1VSTCwge1xuICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ1VzZXItQWdlbnQnOiBNT0JJTEVfVUEsXG4gICAgICAgICdyZWZlcmVyJzogTVlfVVJMXG4gICAgfVxufSk7XG5jb25zdCBsaXN0ID0gcGRmYShodG1sLCAnI2NsYXNzaWZ5X2NvbnRhaW5lciYmbGknKTtcbmxpc3QuIGZvckVhY2goaXRlbSA9PiB7XG4gICAgZC5wdXNoKHtcbiAgICAgICAgdGl0bGU6IHNwKHBkZmgoaXRlbSwgJy50eHRBJiZUZXh0JykpLFxuICAgICAgICBkZXNjOiBzcChwZGZoKGl0ZW0sICcuaW5mbyYmVGV4dCcpKSxcbiAgICAgICAgaW1nOiBwZChpdGVtLCAnaW1nJiZzcmMnLGhvc3QpLFxuICAgICAgICB1cmw6IHBkKGl0ZW0sICdhJiZocmVmJyxob3N0KSsnI2ltbWVyc2l2ZVRoZW1lIyNhdXRvQ2FjaGUjQHJ1bGU9anM6JC5yZXF1aXJlKFwi5LqM57qnXCIpJyxcbiAgICAgICAgZXh0cmE6IHtpbWc6IHBkKGl0ZW0sICdpbWcmJnNyYycsaG9zdCl9LFxuICAgICAgICBjb2xfdHlwZTogJ21vdmllXzMnLFxuICAgICAgICAgICAgfSlcbn0pO1xuc2V0UmVzdWx0KGQpIiwiZGV0YWlsX2NvbF90eXBlIjoibW92aWVfMSIsImRldGFpbF9maW5kX3J1bGUiOiIiLCJzZGV0YWlsX2NvbF90eXBlIjoibW92aWVfMSIsInNkZXRhaWxfZmluZF9ydWxlIjoiKiIsInVhIjoibW9iaWxlIiwicHJlUnVsZSI6ImxldCBmYiA9ICdodHRwczovL3duYWNnLmRhdGUvJztcbmZ1bmN0aW9uIGdldFdlZWtPZk1vbnRoKGRhdGUpIHtcbiAgdmFyIGZpcnN0RGF5ID0gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIDEpLmdldERheSgpO1xuICByZXR1cm4gTWF0aC5jZWlsKChkYXRlLmdldERhdGUoKSArIGZpcnN0RGF5KSAvIDcpO1xufVxudmFyIHRvZGF5ID0gbmV3IERhdGUoKTtcbmxldCB3ZWVrID0gZ2V0V2Vla09mTW9udGgodG9kYXkpLnRvU3RyaW5nKCk7XG5sZXQgZmJyZXEgPSBKU09OLnBhcnNlKHJlcXVlc3QoZ2V0SXRlbSgnbGluaycsICdodHRwczovL3d3dy5obTE5LmxvbCcpLCB7XG4gICAgICAgICAgICB3aXRoSGVhZGVyczogdHJ1ZSxcbiAgICAgICAgICAgIG9ubHlIZWFkZXJzOiB0cnVlXG4gICAgICAgIH0pKTtcbmlmIChmYnJlcS5zdGF0dXNDb2RlICE9PSAyMDApIHtcbiAgICBsZXQgZmFidSA9IHJlcXVlc3QoZmIpO1xuICAgIGxldCBsaW5rcyA9IHBkZmEoZmFidSwgJ2JvZHkmJnVsJiZhOmhhcyhpKScpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlua3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IGxpbmsgPSBwZChsaW5rc1tpXSwgJ2EmJmhyZWYnLGZiKTtcbiAgICAgICAgbGV0IHJlcSA9IEpTT04ucGFyc2UocmVxdWVzdChsaW5rLCB7XG4gICAgICAgICAgICB3aXRoSGVhZGVyczogdHJ1ZSxcbiAgICAgICAgICAgIG9ubHlIZWFkZXJzOiB0cnVlXG4gICAgICAgIH0pKTtcblxuICAgICAgICBpZiAocmVxLnN0YXR1c0NvZGUgPT0gMjAwKSB7XG4gICAgc2V0SXRlbSgnd2VlaycsIHdlZWspO1xuICAgIHNldEl0ZW0oJ2xpbmsnLCBsaW5rKTtcbiAgICB0b2FzdCgn5pu05paw5Z+f5ZCNJyk7XG4gICAgbG9nKCfmm7TmlrDln5/lkI0nKTtcbiAgICBsb2cobGluayk7XG4gICAgYnJlYWtcbiAgICB9XG4gICAgfVxuICAgIH1cbmluaXRDb25maWcoe1xuICAgIGhvc3Q6IGdldEl0ZW0oJ2xpbmsnLCAnaHR0cHM6Ly93d3cuaG0xOS5sb2wnKVxufSk7IiwicGFnZXMiOiJbe1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuino+aekCjml6cpXCIsXCJwYXRoXCI6XCJsYXp5XCIsXCJydWxlXCI6XCJ2YXIgbGF6eSA9ICQoJycpLmxhenlSdWxlKCh0YWcpID0+IHtcXG4gIHZhciBodG1sID0gZmV0Y2hQQyhpbnB1dCk7XFxuICB2YXIgY29udGVudHMgPSBwZGZhKGh0bWwsICdib2R5JiYucGFnaW5hdG9yJiZhJyk7XFxuICB2YXIgY29udGVudCA9IGNvbnRlbnRzLm1hcCh4ID0+IHBkZmgoeCwgJ2EmJlRleHQnKSk7XFxuICB2YXIgbnVtID0gY29udGVudFtjb250ZW50Lmxlbmd0aC0yXSA/IGNvbnRlbnRbY29udGVudC5sZW5ndGgtMl0gOiBcXFwiMVxcXCI7XFxuICB2YXIgYWxsUGljcyA9IFtdO1xcbiAgdmFyIHBhZ2UgPSBbXTtcXG4gIGZvciAodmFyIGkgPSAxOyBpIDw9IG51bTsgaSsrKSB7XFxuICAgIHBhZ2UucHVzaCh7XFxuICAgICAgdXJsOiBpbnB1dC5yZXBsYWNlKFxcXCJpbmRleFxcXCIsIFxcXCJpbmRleC1wYWdlLVxcXCIgKyBpKSxcXG4gICAgICBvcHRpb25zOiB7IGhlYWRlcnM6IHtcXG4gICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogXFxcIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMDUuMC4wLjAgU2FmYXJpLzUzNy4zNlxcXCJcXG4gICAgICB9fVxcbiAgICB9KTtcXG4gIH1cXG4gIC8vbG9nKHBhZ2UpXFxuICB2YXIgdGltZyA9IHRhZzw0P1xcXCJpbWcxXFxcIjpcXFwiaW1nNVxcXCJcXG4gIHZhciBwaWNzID0gYmF0Y2hGZXRjaChwYWdlKS5tYXAoZnVuY3Rpb24oaXRlbSkge1xcbiAgICB2YXIgbGlzdCA9IHBkZmEoaXRlbSwgXFxcImJvZHkmJi5nYWxsYXJ5X2l0ZW1cXFwiKTtcXG4gICAgcmV0dXJuIGxpc3QubWFwKGZ1bmN0aW9uKGxpc3RJdGVtKSB7XFxuICAgICAgdmFyIG5hbWUgPSBwZGZoKGxpc3RJdGVtLCBcXFwiLm5hbWUmJlRleHRcXFwiKTtcXG4gICAgICByZXR1cm4gcGQobGlzdEl0ZW0sIFxcXCJpbWcmJnNyY1xcXCIpXFxuICAgICAgICAucmVwbGFjZSgvdFxcXFxkLywgdGltZylcXG4gICAgICAgIC5yZXBsYWNlKCdkYXRhL3QnLCAnZGF0YScpXFxuICAgICAgICAucmVwbGFjZSgvW14vXSsoPz1cXFxcLmpwZ3wucG5nJCkvLCBuYW1lKTtcXG4gICAgfSk7XFxuICB9KS5mbGF0KCk7XFxuICAvL2xvZyhwaWNzKTtcXG4gIHJldHVybiBcXFwicGljczovL1xcXCIgKyBwaWNzLmpvaW4oXFxcIiYmXFxcIik7XFxufSx0YWcpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi566A57mB5bel5YW3XCIsXCJwYXRoXCI6XCJqaWFuXCIsXCJydWxlXCI6XCJmdW5jdGlvbiBjaGFyUFlTdHIoKXtcXG5cXHRyZXR1cm4gJ+mUleeakeiUvOeijeeIseWXs+WrkueRt+aap+mcreiwmemTtem5jOiCruiihOWlpeWqqumqnOmzjOWdnee9oumSr+aRhui0peWRl+migeWKnue7iumSo+W4rue7kemVkeiwpOWJpemlseWuneaKpemyjem4qOm+hei+iOi0nemSoeeLiOWkh+aDq+m5jui0sumUm+e7t+eslOavleavmeW4gemXreiNnOWTlOa7l+mTi+etmui3uOi+uee8lui0rOWPmOi+qei+q+iLhOe8j+esvuagh+mqoOmjkemjmemVlumVs+mzlOmzluWIq+eYqua/kua7qOWuvuaRiOWCp+e8pOann+auoeiGkemVlOmrjOmsk+mlvOemgOaLqOmStemTgumps+mlvemSuem5geihpemSuOi0ouWPguialeaui+aDreaDqOeBv+mqlum7quiLjeiIseS7k+ayp+WOleS+p+WGjOa1i+aBu+Wxguivp+mUuOS+qumSl+aQgOaOuuidiemmi+iwl+e8oOmTsuS6p+mYkOmipOWGgeiwhOiwtuiSh+W/j+Wptemqo+inh+emhemVoeWcuuWwnemVv+WBv+iCoOWOgueVheS8peiLjOaAhemYiumys+mSnui9puW9u+egl+WwmOmZiOihrOS8p+iwjOamh+einOm+gOaSkeensOaDqeivmumqi+aeqOafvemTlumTm+eXtOi/n+mpsOiAu+m9v+eCvemlrOm4seWGsuWGsuiZq+WuoOmTs+eVtOi4jOetuee7uOS/puW4semboOapseWOqOmUhOmbj+ehgOWCqOinpuWkhOWIjee7jOi5sOS8oOmSj+eWrumXr+WIm+aAhumUpOe8jee6r+m5kee7sOi+jem+iui+nuivjei1kOm5muiBquiRseWbseS7juS4m+iLgemqouaenuWHkei+j+i5v+eqnOaSuumUmemUiem5vui+vuWTkumekeW4pui0t+mqgOe7kOaLheWNlemDuOaOuOiDhuaDruivnuW8ueaumui1leeYheeuquW9k+aMoeWFmuiNoeaho+iwoOeggOijhuaNo+Wym+elt+WvvOebl+eEmOeBr+mCk+mVq+aVjOa2pOmAkue8lOextOivi+iwm+e7qOinjOmVnemioOeCueWeq+eUteW3hemSv+eZq+mSk+iwg+mTq+myt+iwjeWPoOmyvemSiemhtumUreiuoumTpOS4oumTpeS4nOWKqOagi+WGu+Wyvem4q+eqpueKiueLrOivu+i1jOmVgOa4juakn+eJjeesg+m7qemUu+aWree8juewluWFkemYn+WvueaAvOmVpuWQqOmhv+mSneeClui2uOWkuuWglemTjum5hemineiuueaBtumlv+iwlOWeqemYj+i9remUh+mUt+m5l+mimumim+mzhOivtuWEv+WwlOmltei0sOi/qemTkum4uOmyleWPkee9mumYgOePkOefvumSkueDpui0qemlreiuv+e6uumSq+mygumjnuivveW6n+i0uee7r+mVhOmysee6t+Wdn+Wli+aEpOeyquWBvuS4sOaeq+mUi+mjjueWr+WGr+e8neiuveWHpOayo+iCpOi+kOaKmui+hei1i+Wkjei0n+iuo+Wmh+e8muWHq+mpuOe7gue7i+i1mem6uOmyi+mzhumShuivpemSmeeblui1headhui1tuenhui1o+WwtOaTgOe7gOWGiOWImumSoue6suWyl+aIhumVkOedvuivsOe8n+mUhuaQgem4vemYgemTrOS4que6pemViemijee7meS6mOi1k+e7oOmyoOm+muWuq+W3qei0oemSqeayn+iLn+aehOi0reWkn+ivn+e8keinj+ibiumhvuivguavgumStOmUoum4qum5hOm5mOWJkOaMgum4ueaOtOWFs+ingummhuaDr+i0r+ivluaOvOm5s+mzj+W5v+eKt+inhOW9kum+n+mXuui9qOivoei0teWIveWMpuWIv+Wmq+ahp+mykemznOi+iua7muihrue7sumyp+mUheWbvei/h+WfmuWRmeW4vOakgeidiOmTqumqh+mfqeaxiemYmue7l+miieWPt+eBj+mioumYgum5pOi0uuivg+mYluibjuaoqui9sOm4v+e6oum7ieiup+iNremXs+myjuWjtuaKpOayquaIt+a1kum5leWTl+WNjueUu+WIkuivnemqheahpumTp+aAgOWdj+asoueOr+i/mOe8k+aNouWUpOeXqueElea2o+Wlgue8s+mUvumyqem7hOiwjumzh+aMpei+ieavgei0v+enveS8mueDqeaxh+ius+ivsue7mOivmeiNn+WTlea1jee8i+ePsuaZluiNpOa1keivqOmmhOmYjeiOt+i0p+eluOmSrOmVrOWHu+acuuenr+mlpei/ueiupem4oee7qee8ieaegei+kee6p+aMpOWHoOiTn+WJgua1juiuoeiusOmZhee7p+e6quiupuivmOiNoOWPveWTnOmqpeeOkeinium9keeftue+geiZv+i3u+mcgemymumyq+WkueiNmumiiui0vumSvuS7t+mpvumDj+a1g+mTl+mVk+ibsuatvOebkeWdmuesuumXtOiJsOe8hOiMp+ajgOeiseeht+aLo+aNoeeugOS/reWHj+iNkOanm+mJtOi3tei0seingemUruiIsOWJkemlr+a4kOa6hea2p+iwj+e8o+aIi+aIrOedkem5o+eslemyo+mer+Wwhua1huiSi+ahqOWlluiusumFsee7m+e8sOiDtua1h+mqhOWoh+aQhemTsOefq+S+peiEmumluue8tOe7nui9v+i+g+aMouWzpOm5qumym+mYtuiKgua0gee7k+ivq+WxiueWlumijOmykue0p+mUpuS7heiwqOi/m+aZi+eDrOWwveWKsuiNhuiMjuWNuuiNqemmkee8mei1huinkOmyuOaDiue7j+miiOmdmemVnOW+hOeXieernuWHgOWIreazvui/s+W8quiDq+mdk+e6oOWOqeaXp+mYhOm4oOm5q+mpueS4vuaNrumUr+aDp+WJp+iuteWxpuamiemjk+mSnOmUlOeqrem+g+m5g+e7oumUqemVjOmaveinieWGs+e7neiwsuePj+mSp+WGm+mqj+easuW8gOWHr+WJgOWesuW/vuaBuumToOmUtOm+m+mXtumSqumTkOmil+Wjs+ivvumqkue8gui9sumStumUnumilOWepuaBs+m+iOmTv+aKoOW6k+ijpOWWvuWdl+S+qemDkOWTmeiEjeWuveeLr+mri+efv+aXt+WGteivk+ivs+mCneWcuee6qei0tuS6j+Wyv+eqpemmiOa6g+WMruiSieaEpuiBqeevkemYg+mUn+mysuaJqemYlOibtOicoeiFiuiOseadpei1luW0g+W+lea2nua/kei1ieedkOmTvOeZnuexgeiTneagj+aLpuevrumYkeWFsOa+nOiwsOaPveiniOaHkue8hueDgua7peWymuamhOaWk+mVp+iktOeQhemYhumUkuaNnuWKs+a2neWUoOW0gumTkemTueeXqOS5kOmzk+mVreWekuexu+azquivlOe8p+evseeLuOemu+mypOekvOS4veWOieWKseegvuWOhuaypematuS/qumDpuWdnOiLiOiOheiToOWRlumApumqiue8oeaepeagjui9ueeguumUgum5gueWoOeynei3numbs+myoemzouS/qeiBlOiOsui/numVsOaAnOa2n+W4mOaVm+iEuOmTvuaBi+eCvOe7g+iUueWlgea9i+eQj+auk+ijouijo+myoueyruWHieS4pOi+huiwhemtieeWl+i+vemVo+e8remSjOm5qeeMjuS4tOmCu+mznuWHm+i1geiUuuW7quaqqei+mui6j+m+hOmTg+eBteWyremihue7q+ajguibj+myrummj+WImOa1j+mqnee7uumVj+m5qOm+meiBi+WSmeesvOWehOaLoumZh+iMj+azt+ePkeagiuiDp+egu+alvOWohOaQguevk+WBu+iSjOWWveW1nemVgueYmOiAp+idvOmrheiKpuWNoumiheW6kOeCieaOs+WNpOiZj+mygei1guemhOW9lemZhuWehuaSuOWZnOmXvuazuOa4jOagjOapuei9s+i+gui+mOawh+iDqum4rOm5reiIu+myiOWzpuaMm+Wtqua7puS5seiElOWoiOagvum4vumKruaKoei9ruS8puS7keaypue6tuiuuuWbteiQnee9l+mAu+mUo+euqemqoemqhue7nOiNpueMoeazuuakpOiEtumVmemptOWQlemTneS+o+Wxoee8leiZkea7pOe7v+amiOikm+mUiuWRkuWmiOeOm+eggeiagumprOmqguWQl+WUm+Wst+adqeS5sOm6puWNlui/iOiEieWKoueekummkuibrua7oeiwqee8pumVmOmioemzl+eMq+mUmumThui0uOm6veayoemVgemXqOmXt+S7rOaJqueEluaHkemSlOmUsOaipuecr+iwnOW8peinheW5guiKiOiwp+eMleeloue7tee8hea4keiFvOm7vuW6mee8iOe8queBreaCr+mXvemXtee8l+m4o+mTreiwrOiwn+iTpummjeaugemVhuiwi+S6qemSvOWRkOmSoOe6s+mavuaMoOiEkeaBvOmXuemTmeiut+mmgeWGheaLn+iFu+mTjOmyteaStei+h+mytumFv+m4n+iMkeiiheiBguWVrumViumVjemZp+iYluWXq+min+i5keafoOeLnuWugeaLp+aznuiLjuWSm+iBjemSrue6veiEk+a1k+WGnOS+rOWTnempvemSleivuuWCqeeWn+asp+m4peautOWRleaypOiutOaAhOeTr+ebmOi5kuW6nuaKm+eWsei1lOi+lOWWt+m5j+e6sOe9tOmTjemql+iwnemqiOmjmOe8pemikei0q+WrlOiLueWHreivhOazvOmih+mSi+aJkemTuuactOiwsemVpOmVqOagluiEkOm9kOmqkeWyguWQr+awlOW8g+iuq+iVsumqkOe7ruahpOeim+migOmig+mzjeeJtemSjumThei/geetvuiwpumSsemSs+a9nOa1heiwtOWgkeS9peiNqOaCremqnue8seakoOmSpOaequWRm+WimeiUt+W8uuaKouWrseaor+aIl+eCnemUlumUtemVque+n+i3hOmUueahpeS5lOS+qOe/mOeqjeivruiwr+iNnue8suehl+i3t+eqg+aDrOmUsueup+mSpuS6suWvnemUk+i9u+awouWAvumht+ivt+W6huaPv+myreeQvOept+iMleibseW3r+i1h+iZrumzhei2i+WMuui6r+mpsem+i+ivjuWylumYkuinkem4sumip+adg+WKneivoOe7u+i+gemTqOWNtOm5iuehrumYlemYmeaCq+iuqemltuaJsOe7leiNm+WohuahoeeDremfp+iupOe6q+mlqui9q+iNo+e7kuW1mOidvue8m+mTt+mipui9r+mUkOiarOmXsOa2pua0kuiQqOmjkumzg+i1m+S8nuavteezgeS4p+mqmuaJq+e8q+a2qeWVrOmTr+epkeadgOWIuee6semTqemyqOetm+aZkumFvuWIoOmXqumZlei1oee8ruiuquWnl+mqn+mSkOmzneWikuS8pOi1j+Wep+auh+innueDp+e7jei1iuaRhOaFkeiuvuWOjea7oOeVsue7heWuoeWptuiCvua4l+ivnOiwgua4luWjsOe7s+iDnOW4iOeLrua5v+ivl+aXtuiagOWunuivhumptuWKv+mAgumHiumlsOinhuivleiwpeWfmOiOs+W8kei9vOi0s+mTiOmypeWvv+WFvee7tuaeoui+k+S5pui1juWxnuacr+agkeerluaVsOaRhee6vuW4hemXqeWPjOiwgeeojumhuuivtOehleeDgemThOS4nemlsuWOrumpt+e8jOmUtum4tuiAuOaAgumiguiuvOivteaTnuiWrummiumjlemUvOiLj+ivieiCg+iwoeeoo+iZvemaj+e7peWygeiwh+WtmeaNn+esi+iNqueLsue8qeeQkOmUgeWUouedg+eNreaMnumXvOmTiumzjuWPsOaAgemSm+mykOaRiui0queYq+a7qeWdm+iwreiwiOWPueaYmemSvemUrOmhuOaxpOeDq+WCpemlp+mTtOmVl+a2m+e7puiuqOmfrOmTveiFvuiqiumUkemimOS9k+Wxiee8h+m5iOmYl+adoeeynOm+humypui0tOmTgeWOheWQrOeDg+mTnOe7n+aBuOWktOmSreeng+WbvumSjeWbouaKn+mik+iclemlqOiEsem4temprumpvOakreeuqOm8jeiinOWosuiFveW8r+a5vumhveS4h+e6qOe7vue9kei+i+mfpui/neWbtOS4uua9jee7tOiLh+S8n+S8que6rOiwk+WNq+ivv+W4j+mXseayqea2oOeOrumfqueCnOmylOa4qemXu+e6ueeos+mXrumYjOeTruaMneicl+a2oeeqneWNp+iOtOm+jOWRnOmSqOS5jOivrOaXoOiKnOWQtOWdnumbvuWKoeivr+mCrOW6keaAg+Wmqemqm+m5iem5nOmUoeeJuuiireS5oOmTo+aIj+e7humlqemYi+eOuuini+iZvui+luWzoeS+oOeLreWOpuWQk+ehlumynOe6pOi0pOihlOmXsuaYvumZqeeOsOeMruWOv+mmhee+oeWuque6v+iLi+iOtuiXk+WymOeMg+WotOm5h+eXq+ianeexvOi3ueWOoumVtuS5oeivpuWTjemhueiKl+mlt+mqp+e8g+mjqOiQp+Wao+mUgOaZk+WVuOWTk+a9h+mqgee7oeaereeuq+WNj+aMn+aQuuiDgeiwkOWGmeazu+iwouS6teaSt+e7gee8rOmUjOihheWFtOmZieiNpeWHtuaxuemUiOe7o+mmkOm4uuiZmuWYmOmhu+iuuOWPmee7que7reivqemhvOi9qeaCrOmAieeZo+e7muiwlumTiemVn+WtpuiwkeaztumzleWLi+ivouWvu+mpr+iureiur+mAiuWfmea1lOmyn+WOi+m4pum4reWTkeS6muiutuWereWoheahoOawqemYieeDn+ebkOS4peWyqeminOmYjuiJs+WOjOegmuW9puiwmumqjOWOo+i1neS/qOWFluiws+aBuemXq+mFvemth+mkjem8uem4r+adqOaJrOeWoemYs+eXkuWFu+agt+eCgOeRtuaRh+Wwp+mBpeeqkeiwo+iNr+i9uum5numzkOeIt+mhteS4muWPtumdpeiwkumCuuaZlOeDqOWMu+mTsemikOmBl+S7quiageiJuuS6v+W/huS5ieivo+iuruiwiuivkeW8gue7juivkuWRk+WzhOmltOaAv+mpv+e8oui9tui0u+mSh+mVkumVseeYl+iIo+iNq+mYtOmTtumlrumakOmTn+eYvuaoseWptOm5sOW6lOe8qOiOueiQpOiQpeiNp+idh+i1oumiluiMlOiOuuiQpuiTpeaShOWYpOa7oua9hueSjum5pueYv+mij+e9guWTn+aLpeS9o+eXiOi4iuWSj+mVm+S8mOW/p+mCrumTgOeKueivseiOuOmTlemxv+iIhumxvOa4lOWoseS4juWxv+ivreeLseiqiemihOmpreS8m+S/o+iwgOiwleiTo+W1m+mlq+mYiOWmque6oeinjuaspOmSsOm5hum5rOm+iem4s+a4iui+leWbreWRmOWchue8mOi/nOapvOm4oum8i+e6pui3g+mSpeeypOaCpumYhemSuumDp+WMgOmZqOi/kOiVtOmFneaZlemftemDk+iKuOaBveaEoOe6remfq+aukuawsuadgueBvui9veaUkuaagui1nueTkui2semMvui1g+iEj+mpteWHv+aeo+i0o+aLqeWImeazvei1nOWVp+W4u+eupui0vOiwrui1oOe7vOe8r+i9p+mToemXuOagheiviOaWi+WAuuavoeebj+aWqei+l+W0reagiOaImOe7veiwteW8oOa2qOW4kOi0puiDgOi1teivj+mSiuibsOi+memUl+i/meiwqui+hOm5p+i0numSiOS+puiviumVh+mYtea1iOe8nOahoui9uOi1iOelr+m4qeaMo+edgeeLsOS6ieW4p+eXh+mDkeivgeivpOWzpemSsumTruetnee7h+iBjOaJp+e6uOaMmuaOt+W4nOi0qOa7numqmOagieaggOi9tei9vui0vem4t+ibs+e1t+i4rOi4r+inr+mSn+e7iOenjeiCv+S8l+mUuuivjOi9tOeaseaYvOmqpOe6o+e7ieeMquivuOivm+eDm+eeqeWYsei0rumTuOmpu+S8q+anoOmTouS4k+eglui9rOi1muWVremmlOminuahqeW6hOijheWmhuWjrueKtumUpei1mOWdoOe8gOmqk+e8kuiwhuWHhuedgOa1iuivvOmVr+WFuei1hOa4jeiwmOe8gei+jui1gOecpumUsem+h+myu+i4quaAu+e6teWBrOmCueivuempuumysOivhee7hOmVnumSu+e8tei6nOmzn+e/seW5tuWNnOayieS4kea3gOi/reaWl+iMg+W5sueai+ehheafnOWQjuS8meenuOadsOivgOWkuOmHjOWHjOS5iOmcieaNu+WHhOaJpuWco+WwuOaKrOa2gua0vOWWguaxoemUqOWSuOidjuW9nea2jOa4uOWQgeW+oeaEv+Wys+S6keeBtuaJjuacreetkeS6juW/l+azqOWHi+iuoOiwq+mDhOWLkOWHvOWdguWeheWetOWfr+WfneiLmOiNrOiNruiOnOiOvOiPsOiXgeaPuOWQkuWQo+WSlOWSneWStOWZmOWZvOWar+W5nuWymeW1tOW9t+W+vOeKuOeLjemmgOmmh+mmk+mmleaEo+aGt+aHlOS4rOa6hua7n+a6t+a8pOa9tOa+ueeUr+e6n+e7lOe7seePieaep+ahiuahieanlOappei9sei9t+i1jeiCt+iDqOmjmueFs+eFheeGmOaEjea3vOegnOejmeecjemSmumSt+mTmOmTnumUg+mUjemUjumUj+mUmOmUnemUqumUq+mUv+mVhemVjumVoumVpemVqemVsueohum5i+m5m+m5seeWrOeWtOeXlueZr+ijpeilgeiAoumipeieqOm6tOmyhemyhumyh+mynumytOmyuumyvOmziumzi+mzmOmzmemekumetOm9hCc7XFxufVxcbmZ1bmN0aW9uIGZ0UFlTdHIoKXtcXG5cXHRyZXR1cm4gJ+mMkueamuiXueekmeaEm+WZr+WsoeeSpuablumdhOirs+mKqOm1qumqr+illuWlp+WqvOmpgemwsuWjqee9t+mIgOaTuuaVl+WUhOmgkui+pue1humIkeW5q+e2gemOiuisl+WJnemjveWvtuWgsemukem0h+m9mei8qeiynemLh+eLveWCmeaGium1r+izgemMm+e5g+ethueVouaWg+W5o+mWieiTveWXtua9t+mJjeevs+i5lemCiue3qOiytuiuiui+r+i+ruiKkOe3tuexqeaomempg+mirumjhumPoumRo+mwvumxieWIpeeZn+eAlea/seizk+aTr+WEkOe5veaqs+aur+iHj+mRjOmrlemsoumkheeon+aSpee8vemJkemngemkkemIuOm1k+ijnOmIveiyoeWPg+igtuaumOaFmuaFmOeHpumpgum7suiSvOiJmeWAiea7hOW7geWBtOWGiua4rOaDu+WxpOipq+mNpOWElemHteaUmeaRu+ifrOmlnuiukue6j+mPn+eUoumXoemhq+WbheirguiuluiVhuaHuuWsi+mpj+immOemqumQlOWgtOWYl+mVt+WEn+iFuOW7oOaaouWAgOiQh+aCtemWtumvp+mIlOi7iuW+ueehqOWhtemZs+ilr+WCluirtuarrOejo+m9lOaSkOeoseaHsuiqoOmogeajluaqiemLrumQuueZoemBsumms+aBpem9kueGvumjrem0n+ayluihneifsuWvtemKg+eWh+i6iuexjOe2ouWElOW5rOiujuarpeW7mumLpOmbm+ekjuWEsuinuOiZleiKu+e1gOi6leWCs+mHp+eYoemXluWJteaEtOmMmOe2nue0lOm2iee2vei8n+m9qui+reipnuiznOm2v+iBsOiUpeWbquW+nuWPouiTr+mphOaohea5iui8s+i6peerhOaUm+mMr+mKvOm5uumBlOWZoOmfg+W4tuiyuOmnmOe0v+aTlOWWrumEsuaSo+iGveaGmuiqleW9iOauq+izp+eZieewnueVtuaTi+m7qOiVqeaqlOiunOeireiloOaQl+WztuemseWwjuebnOeHvueHiOmEp+mQmeaVtea7jOmBnue3oOeztOiphuirpue2iOimv+mPkemhm+m7nuWiiumbu+W3lOmIv+eZsumHo+iqv+mKmumvm+irnOeWiumwiOmHmOmggumMoOiogumLjOS4n+mKqeadseWLleajn+WHjeW0oOm2h+erh+eKoueNqOiugOizremNjeeAhuarneeJmOevpOm7t+mNm+aWt+e3nuexquWFjOmaiuWwjeaHn+mQk+WZuOmgk+mIjeeHiei6ieWlquWirumQuOm1nemhjeiom+aDoemkk+irpOWgiumWvOi7m+mLqOmNlOm2mumhjumhk+mxt+iqkuWFkueIvumkjOiys+mCh+mJuum0r+munueZvOe9sOmWpeeQuuekrOmHqeeFqeiyqemjr+ioque0oemIgemttOmjm+iqueW7ouiyu+e3i+mQqOmvoee0m+Wis+WlruaGpOeznuWDqOixkOalk+mLkumiqOeYi+mmrue4q+irt+mzs+eBg+iGmui8u+aSq+i8lOizpuW+qeiyoOiog+Wppue4m+mzp+mnmee0see0vOizu+m6qemukumwkumHk+ipsumIo+iTi+izheahv+i2leeoiOi0m+Wwt+aQn+e0uuWyoeWJm+mLvOe2seW0l+aIh+mOrOedquiqpee4numLr+aTsem0v+mWo+mJu+WAi+e0h+mOmOa9gee1puS6meizoee2humvgem+lOWurumej+iyoumJpOa6neiMjeani+izvOWkoOiprOe3seimr+igsemhp+ipgei9gumIt+mMrum0o+m1oOm2u+WJruaOm+m0sOaRkemXnOingOmkqOaFo+iyq+ipv+aRnOm4m+mwpeW7o+eNt+imj+atuOm+nOmWqOi7jOipreiytOWKiuWMreWKjOWqr+aqnOmuremxlui8pea7vuiinue3hOmvgOmNi+Wci+mBjuWgneWSvOW5l+anqOifiOmJv+mnremfk+a8oumXnue1jumgoeiZn+eBnemhpemWoem2tOizgOiotumXlOigo+apq+i9n+m0u+e0hem7jOiojOiRkumWjumxn+Wjuuitt+a7rOaItua7uOm2mOWYqeiPr+eVq+WKg+ipsempiuaouumPteaHt+WjnuatoeeSsOmChOe3qeaPm+WWmueYk+eFpea4meWlkOe5r+mNsOmvh+m7g+isiumwieaPrui8neavgOizhOepouacg+eHtOWMr+irseiqqOe5quipvOiWiOWZpua+rue5oueQv+aaieiRt+a4vuiroumkm+mWveeNsuiyqOemjemIpemRiuaTiuapn+epjemlkei3oeitj+mbnue4vue3nealtei8r+e0muaToOW5vuiWiuWKkea/n+ioiOiomOmam+e5vOe0gOiokOipsOiWuuWYsOWajOmppeeSo+imrOm9j+ejr+e+iOighui6i+mcvemxremvveWkvuiOoumgsOiziOmJgOWDuemnlemDn+a1uemLj+mOteifr+ausuebo+Wgheeui+mWk+iJsee3mOe5reaqouWgv+m5vOaPgOaSv+ewoeWEiea4m+iWpuaqu+mRkui4kOizpOimi+mNteiJpuWKjemknua8uOa/uua+l+irq+e4keaIlOaIqeeevOm2vOetp+mwuemfieWwh+a8v+iUo+ans+eNjuism+mGrOe1s+mfgeiGoOa+humpleWsjOaUqumJuOefr+WDpeiFs+mkg+e5s+e1nui9jui8g+aSn+W2oOm3pumuq+majuevgOa9lOe1kOiqoeWxhueZpOmgnOmumue3iumMpuWDheisuemAsuaZieeHvOeboeWLgeiNiuiOluW3ueiXjumliee4iei0kOimsumvqOmpmue2k+mguOmdnOmPoeW+keeXmeertuWHiOWJhOa2h+mAleW8s+iEm+mdmuezvuW7hOiIiumsrumzqem3sumnkuiIieaTmumLuOaHvOWKh+ipjuWxqOaruOmitumJhemLpueqtum9n+m1kee1uemMiOmQq+mbi+imuuaxuue1leitjueOqOmInui7jemnv+eauOmWi+WHseWJtOWhj+aEvuaEt+mOp+mNh+m+lemWjOmIp+mKrOmhhuauvOiqsumojee3mei7u+mIs+mMgemgt+WivuaHh+m9pumPl+aRs+W6q+iksuWas+WhiuWEiOmEtuWZsuiGvuWvrOeNqumrluekpuaboOazgeiqhuiqkemEuuWjmee6iuiyuuiZp+W3i+equumli+a9sOWMseiVouaGkuiBteewo+mWq+mMlemvpOaTtOmXiuigkOign+iHmOiQiuS+huiztOW0jeW+oOa3tueAqOizmuednumMuOeZqeexn+iXjeashOaUlOexg+mXjOiYreeAvuiuleaUrOimveaHtue6nOeIm+a/q+W1kOasluaWlemRreilpOeRr+mWrOmLg+aSiOWLnua+h+WYruW2l+mKoOmQkueZhuaogumws+mQs+WjmOmhnua3muiqhOe4suexrOiyjemboumvieemrum6l+WOsuWLteekq+att+eAnemauOWEt+mFiOWjouiXtuiSnuiYuuWapumCkOmpque4rearquarn+i9ouekqumLsOm4neeZmOezsui6kumdgumxuumxp+WAhuiBr+iTrumAo+mQruaGkOa8o+ewvuaWguiHiemPiOaIgOeFiee3tOiYnuWlqeeAsueSieauruiks+ilnemwseezp+a2vOWFqei8m+irkumtjueZgumBvOmQkOe5mumHlem3r+eNteiHqOmEsOmxl+WHnOizg+iXuuW7qeaqgei9lOi6qum9oemItOmdiOW2uumgmOe2vuasnuiftumvqumkvuWKieeAj+morue2uemOpum3mum+jeiBvuWaqOexoOWjn+aUj+matOiYoueAp+eTj+ars+acp+ekseaok+WpgeaRn+ewjeWDguiUnuWYjeW2gemPpOeYuuiArOieu+mrj+iYhuebp+mhseW7rOeIkOaThOm5teiZnOmtr+izguelv+mMhOmZuOWjmuaTvOWalemWreeAmOa3pearqOark+i9pOi8hei9huawjOiHmum4lem3uuiJq+mxuOW3kuaUo+Wtv+eBpOS6guiHoOWtjOaskum4numRvuaOhOi8quWAq+S+lua3que2uOirluWch+iYv+e+hemCj+mRvOexrumovumnsee1oeeKlueOgOa/vOasj+iFoemPjempouWRgumLgeS+tuWxoue4t+aFrua/vue2oOarmuikuOmLneWYuOWqveeRqueivOienummrOe9teWXjuWYnOWspOamquiyt+m6peizo+mCgeiEiOWLseeenumlheigu+a7v+isvue4temPnemhmemwu+iyk+mMqOmJmuiyv+m6vOaykumOgumWgOaCtuWAkeaNq+eHnOaHo+mNhumMs+Wkoueeh+isjuW9jOimk+WGque+i+iskOeNvOemsOe2v+e3rOa+oOmdpum7veW7n+e3sue5hua7heaGq+mWqemWlOe3oemztOmKmOisrOisqOmpgOmlg+atv+mPjOisgOeVnemJrOWQtumIiee0jembo+aSk+iFpuaDsemsp+mQg+iopemkkuWFp+aTrOiGqemIrumvouaUhui8pumvsOmHgOmzpeiUpuijiuiBtuWamemRt+mOs+maieiYl+Wbgemhoui6oeaquOeNsOWvp+aTsOa/mOiLp+WagOiBuemIlee0kOiGv+a/g+i+suWEguWZpemnkemHueirvuWEuueYp+atkOm3l+avhuWYlOa8muiss+aFqueUjOebpOi5o+m+kOaLi+easOizoOi9oeWZtOm1rOe0lee+humIuemomeirnumnoumjhOe4uemgu+iyp+WsquiYi+aGkeiplea9kemgl+mHmeaSsumLquaouOitnOmPt+mQoOajsuiHjem9iumojuixiOWVn+awo+ajhOioluiYhOmoj+e2uuamv+ejp+mgjumgj+mwreeJvemHrOmJm+mBt+ewveismemMoumJl+a9m+a3uuittOWhueWDieiVgeaFs+moq+e5vuanp+mIkOanjeWXhuWiu+iWlOW8t+aQtuWsmeaqo+aIp+eGl+mMhumPmOmPuee+pei5jOmNrOapi+WWrOWDkee/ueerheiqmuitmeiVjue5sOejvei5uueriuaEnOmNpeevi+asveimquWvoumLn+i8leawq+WCvumgg+iri+aFtuaSs+mvlueTiueqrueFouibuuW3sOizleifo+mwjei2qOWNgOi7gOmphem9suipmOW2h+mXg+imt+m0nemhtOasiuWLuOiprue2o+i8h+mKk+WNu+m1sueiuumXi+mXleaEqOiuk+mlkuaTvue5nuiVmOWsiOapiOeGsemfjOiqjee0iemjqui7lOamrue1qOW2uOigkee4n+mKo+mhsOi7n+mKs+ichumWj+a9pOeBkeiWqemir+mwk+izveWCmOavv+ezneWWqumot+aOg+e5hea+gOWXh+mKq+epoeauuuWJjue0l+mOqemviuevqeabrOmHg+WIqumWg+mZnOi0jee5leioleWnjemouOmHpOmxlOWikeWCt+iznuWdsOaupOintOeHkue0ueizkuaUneaHvuioreWOmeeBhOeVrOe0s+WvqeWsuOiFjua7suipteirl+eAi+iBsue5qeWLneW4q+eNhea/leipqeaZguidleWvpuitmOmnm+WLoumBqemHi+mjvuimluippuismuWhkuiSlOW8kui7vuiysOmIsOmwo+WjveeNuOe2rOaonui8uOabuOi0luWxrOihk+aoueixjuaVuOaUhOe0k+W4pemWgumbmeiqsOeohemghuiqqueiqeeIjemRoOe1sumjvOW7nemnn+e3pumNtum3peiBs+aFq+mgjOion+iqpuaTu+iXqumkv+mivOmOquiYh+iotOiCheisluepjOmblumaqOe2j+atsuiqtuWtq+aQjeetjeiTgOeMu+e4rueRo+mOluWXqeiEp+eNuuaSu+mXpemJiOmwqOiHuuaFi+mIpumukOaUpOiyqueZseeBmOWjh+itmuirh+WYhuabh+mJremMn+mgh+a5r+eHmeWEu+mks+mQi+mPnOa/pOe1s+iojumfnOmLsemosOishOmKu+mhjOmrlOWxnOe3uem1nOmXkOaineeztum9oOmwt+iyvOmQteW7s+iBveeDtOmKhee1seaFn+mgremIhOemv+WclumHt+WcmOaRtumgueibu+mjqeiEq+m0lemmsemnneapouexnOm8ieilquWqp+iGg+W9jueBo+mgkeiQrOe0iOe2sOe2sui8numfi+mBleWcjeeCuua/sOe2reiRpuWBieWBvee3r+isguihm+irieW5g+mXiOa6iOa9v+eRi+mfmeeFkumuqua6q+iBnue0i+epqeWVj+mWv+eUleaSvuiduOa4pueqqeiHpeiQtem9t+WXmumOoueDj+iqo+eEoeiVquWQs+Whoumcp+WLmeiqpOmElOW7oeaGruWrtemolum1oem2qemMq+eKp+ilsue/kumKkeaIsue0sOmkvOmsqeeSveimoeidpui9hOWzveS/oOeLueW7iOWah+ehpOmurue6luizoumKnOmWkemhr+maquePvueNu+e4o+mkoee+qOaGsue3muiOp+iWn+iYmuWztOeNq+Wru+m3tOeZh+iglOeniOi6muW7gumRsumEieips+mfv+mgheiWjOmkiemppOe3l+mll+iVreWbgumKt+abieWYr+WYteeAn+mpjee2g+ain+ewq+WNlOaMvuaUnOiEheirp+Wvq+eAieisneiku+aTt+e0sue6iOmLhemHgeiIiOmZmOa7juWFh+a0tumKuee5oemliOm1guiZm+WZk+mgiOioseaVmOe3kue6jOipoemgiui7kuaHuOmBuOeZrOe1ouirvOmJiemPh+WtuOislOa+qemxiOWLm+ipouWwi+mmtOiok+ioiumBnOWhpOa9r+mxmOWjk+m0iem0qOWVnuS6nuioneWfoeWpreakj+awrOmWueeFmem5veWatOW3lumhj+mWu+iJt+WOreehr+W9peiruumpl+WOtOi0l+WEvOWFl+iunuaHqOmWhumHhemtmOmlnOm8tOm0pualiuaPmueYjemZveeZoumkiuaoo+eFrOeRpOaQluWgr+mBmeeqr+isoOiXpei7uum3gumwqeeIuumggealreiRiemdqOisgemEtOabhOeHgemGq+mKpemgpOmBuuWEgOifu+iXneWEhOaGtue+qeipo+itsOiqvOitr+eVsOe5ueipkuWbiOW2p+mjtOaHjOmpm+e4iui7vOiyvemHlOmOsOmQv+eYnuiJpOiUremZsOmKgOmjsumasemKpueZruaru+WssOm3ueaHiee6k+eRqeieoueHn+eGkuighei0j+epjuWhi+m2r+e4iOmOo+aUluWatueAheeAoOeTlOm4mueZremgpue9jOWWsuaTgeWCreeZsOi4tOipoOmPnuWEquaGgumDtemIvueMtuiqmOiVlemKqumtt+i8v+mtmua8geWom+iIh+W2vOiqnueNhOitvemgkOmmreWCtOS/geirm+irreiVt+W0s+mjq+mWvuWrl+e0huimpuatn+mIuum1kum3uOm9rOm0m+a3tei9heWckuWToeWck+e3o+mBoOarnumztum7v+e0hOi6jemRsOeyteaChemWsemJnumEluWLu+malemBi+iYiumGnuaaiOmfu+mEhuiVk+aDsuaFjee0nOmfnuaunuaws+mbnOeBvei8ieaUouaaq+i0iueTmui2sumPqOi0k+iHn+mnlOmRv+ajl+iyrOaTh+WJh+a+pOizvuWYluW5mOewgOiziuitlui0iOe2nOe5kui7i+mNmOmWmOafteipkOm9i+WCteawiOebnuaWrOi8vuW2hOajp+aIsOe2u+itq+W8tea8suW4s+izrOiEuei2meiplOmHl+ifhOi9jemNuumAmeisq+i8kum3k+iynumHneWBteiouumOrumZo+a5nue4nealqOi7q+izkeemjum0huaOmeednOeMmeeIreW5gOeZpemEreitieirjeW0oumJpumMmueuj+e5lOiBt+Wft+e0meaRr+aTsuW5n+izqua7r+morearm+ailOi7uei8iui0hOm3meiehOe4tui6k+i6keintumQmOe1gueoruiFq+ecvumNvuishei7uOeauuaZnempn+e0gue4kOixrOiruOiqheeHreefmuWbkeiyr+mRhOmnkOS9h+arp+mKluWwiOejmui9ieizuuWbgOmljOmhs+aogeiOiuijneWmneWjr+eLgOmMkOi0heWinOe2tOmohee4i+irhOa6luiRl+a/geirkemQsuiMsuizh+a8rOirrue3h+i8nOiysuecpemMmem9nOmvlOi5pOe4vee4seWCr+mEkuirj+motumvq+ipm+e1hOmPg+mJhue6mOi6pumxkue/uuS4puiUlOayiOmGnOa+seWPoOmspeevhOW5ueiHr+efvearg+W+jOWkpeeoreWCkeioo+iqh+ijj+a3qem6vem7tOaSmua3kuaJoeiBluWxjeaToeWhl+eqqumkteaxmemNgem5ueigjeW9nOa5p+mBiuexsuempumhmOW2vembsueriOe0ruWKhOevieaWvOiqjOiou+mbleiogeitvumDpOeMm+awuemYquWjn+WgluWeteWiiuaqvuiVkuiRpOiTp+iSk+iPh+angeaRo+WSpOWUmuWTouWZneWZheaSheWKiOislOilhuW2tOiEiuS7v+WDpeeNgem6hemkmOmkt+mliumloualnuaAteaHjeeIv+a8teeBqea3t+a/q+eApua3oeWvp+ezuOe1nee3lOeRieaimOajrOahiOapsOarq+i7sui7pOizq+iGgeiFlumjiOeziueFhua6nOa5o+a4uueiuOa7vueemOmIiOmJlemLo+mKsemLpemLtumQpumQp+mNqemNgOmNg+mMh+mOhOmOh+mOv+mQnemRpemRuemRlOeprem2k+m2pem4jOeZp+WxmeeYguiHkuilh+e5iOiArumhrOifjum6r+mugemug+mujumvl+mvnemvtOmxnemvv+mwoOmwtemxhemevemfnem9hyc7XFxufVxcblxcblxcbmZ1bmN0aW9uIFRyYWRpdGlvbmFsaXplZChjYyl7XFxuXFx0XFx0dmFyIHN0cj0nJztcXG5cXHRcXHRmb3IodmFyIGk9MDtpPGNjLmxlbmd0aDtpKyspe1xcblxcdFxcdFxcdGlmKGNoYXJQWVN0cigpLmluZGV4T2YoY2MuY2hhckF0KGkpKSE9LTEpXFxuXFx0XFx0XFx0XFx0c3RyKz1mdFBZU3RyKCkuY2hhckF0KGNoYXJQWVN0cigpLmluZGV4T2YoY2MuY2hhckF0KGkpKSk7XFxuXFx0XFx0XFx0ZWxzZVxcblxcdFxcdFxcdFxcdHN0cis9Y2MuY2hhckF0KGkpO1xcblxcdFxcdH1cXG5cXHRcXHRyZXR1cm4gc3RyO1xcblxcdH1cXG4gXFxuZnVuY3Rpb24gc3AoY2Mpe1xcblxcdFxcdHZhciBzdHI9Jyc7XFxuXFx0XFx0Zm9yKHZhciBpPTA7aTxjYy5sZW5ndGg7aSsrKXtcXG5cXHRcXHRcXHRpZihmdFBZU3RyKCkuaW5kZXhPZihjYy5jaGFyQXQoaSkpIT0tMSlcXG5cXHRcXHRcXHRcXHRzdHIrPWNoYXJQWVN0cigpLmNoYXJBdChmdFBZU3RyKCkuaW5kZXhPZihjYy5jaGFyQXQoaSkpKTtcXG5cXHRcXHRcXHRlbHNlXFxuXFx0XFx0XFx0XFx0c3RyKz1jYy5jaGFyQXQoaSk7XFxuXFx0XFx0fVxcblxcdFxcdHJldHVybiBzdHI7XFxufVxcbmZ1bmN0aW9uIGNvbG9yQ29kZShkKSB7XFxuICAgIHZhciBzdHIgPSBBcnJheS5mcm9tKGQudG9TdHJpbmcoKS5yZXBsYWNlKCcjJywgJycpKTtcXG4gICAgaWYgKHN0ci5sZW5ndGggIT0gNikge1xcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgZm9yICh2YXIgayBpbiBzdHIpIHtcXG4gICAgICAgICAgICBpZiAoISgoc3RyW2tdID49ICcwJyAmJiBzdHJba10gPD0gJzknKSB8fCAoc3RyW2tdID49ICdhJyAmJiBzdHJba10gPD0gJ2YnKSB8fCAoc3RyW2tdID49ICdBJyAmJiBzdHJba10gPD0gJ0YnKSkpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiB0cnVlO1xcbiAgICB9XFxufVxcbmZ1bmN0aW9uIGNvbG9yKGQsIGMpIHtpZiAoY29sb3JDb2RlKGQpICYmICFjb2xvckNvZGUoYykpIHtcXG4gICAgICAgIHZhciB0bXAgPSBkO1xcbiAgICAgICAgZCA9IGM7XFxuICAgICAgICBjID0gdG1wO1xcbiAgICB9XFxuICAgIHJldHVybiAn4oCY4oCY4oCZ4oCZPGZvbnQgY29sb3I9IycgKyAoYyB8fCAnMDAwMDAwJykgKyAnPicgKyBkICsgJzwvZm9udD4nO1xcbn1cXG5mdW5jdGlvbiBzbWFsbChkLCBjKSB7aWYgKGNvbG9yQ29kZShkKSAmJiAhY29sb3JDb2RlKGMpKSB7XFxuICAgICAgICB2YXIgdG1wID0gZDtcXG4gICAgICAgIGQgPSBjO1xcbiAgICAgICAgYyA9IHRtcDtcXG4gICAgfVxcbiAgICByZXR1cm4gJ+KAmOKAmOKAmeKAmTxzbWFsbD48Zm9udCBjb2xvcj0jJyArIChjIHx8ICcwMDAwMDAnKSArICc+JyArIGQgKyAnPC9mb250Pjwvc21hbGw+JztcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLkuIDnuqdcIixcInBhdGhcIjpcInlqXCIsXCJydWxlXCI6XCJqczpcXG4vKlxcbmJ5IM6xKHpldGFscGhhKVxcbuS4gOe6p+WwgeijhVxcbuWKqOaAgeWIhuexuyDliJfooajliJvlu7og6Ieq5Yqo5LiL5LiA6aG1XFxudmVyIDIwMjMxMDE3IDEuMFxcbiovXFxuXFxuLy/pmo/mnLrpopzoibJcXG52YXIgZ2V0UmFuZ2VDb2xvcnMgPSBmdW5jdGlvbigpIHtcXG4gICAgcmV0dXJuICcjJyArICgnMDAwMDAnICsgKE1hdGgucmFuZG9tKCkgKiAweDEwMDAwMDAgPDwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xcbn1cXG5ldmFsKEpTT04ucGFyc2UoZmV0Y2goXFxcImhpa2VyOi8vcGFnZS9qaWFuXFxcIikpLnJ1bGUpO1xcbi8v5Yqo5oCB5YiG57G7XFxuZnVuY3Rpb24gZHluYW1pY0NsYXNzKG9wdGlvbnMpIHtcXG4gICAgY29uc3Qgb2JqID0ge1xcbiAgICAgICAgLy/pu5jorqTlgLxcXG4gICAgICAgIGxheW91dDogXFxcInVuZGVmaW5lZFxcXCIsXFxuICAgICAgICBodG1sOiBcXFwiZW1wdHlcXFwiLFxcbiAgICAgICAgcGFnZTogMCxcXG4gICAgICAgIOWIhuexu+minOiJsjogXFxcIiNGQTcyOThcXFwiLFxcbiAgICAgICAg5oqY5Y+gOiBcXFwi4oCc4oCc4oCd4oCdPGI+XFxcIiArIFxcXCLiiKdcXFwiLmZvbnRjb2xvcihcXFwiIzFhYWQxOVxcXCIpICsgXFxcIjwvYj5cXFwiLFxcbiAgICAgICAg5bGV5byAOiBcXFwi4oCc4oCc4oCd4oCdPGI+XFxcIiArIFxcXCLiiKhcXFwiLmZvbnRjb2xvcihcXFwiI0ZGMDAwMFxcXCIpICsgXFxcIjwvYj5cXFwiLFxcbiAgICAgICAgb3BlbjogdHJ1ZSxcXG4gICAgICAgIHN0YXRlOiBNWV9SVUxFLnVybCxcXG4gICAgICAgIHNlYXJjaDogZmFsc2UsXFxuICAgICAgICBjbGVhcnM6IFtdLFxcbiAgICAgICAgY2xlYXJhbGw6IFtcXFwieWlfZmlyc3RwYWdlXFxcIl0sXFxuICAgICAgICBkZWJ1ZzogZmFsc2UsXFxuXFxuICAgICAgICDpooTorr4ocGFyYW0pIHtcXG4gICAgICAgICAgICBpZiAocGFyYW0gPT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICAgICAgICAgIHBhcmFtID0gW107XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHBhcmFtKS5mb3JFYWNoKChwcm9wZXJ0eSkgPT4ge1xcbiAgICAgICAgICAgICAgICAvLyDlr7nmr4/kuKrlsZ7mgKflkI3miafooYzmk43kvZxcXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBwYXJhbVtwcm9wZXJ0eV07IC8vIOiOt+WPluWxnuaAp+WAvFxcbiAgICAgICAgICAgICAgICAvLyDlnKjov5nph4zmiafooYzmgqjnmoTmk43kvZxcXG4gICAgICAgICAgICAgICAgdGhpc1twcm9wZXJ0eV0gPSB2YWx1ZTtcXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHByb3BlcnR5ICsgXFxcIjpcXFwiICsgdmFsdWUpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9LFxcbiAgICAgICAgZXZhbEpTUnVsZShpdGVtLFxcbiAgICAgICAgICAgIGpzUnVsZSkge1xcbiAgICAgICAgICAgIGxldCBydWxlID0ganNSdWxlLnJlcGxhY2UoXFxcIkBqczpcXFwiLFxcbiAgICAgICAgICAgICAgICBcXFwiXFxcIik7XFxuICAgICAgICAgICAgcnVsZSA9IHJ1bGUudHJpbSgpO1xcbiAgICAgICAgICAgIC8vbG9nKCQuc3RyaW5naWZ5KHJ1bGUpKVxcbiAgICAgICAgICAgIGxldCBpbnB1dCA9IGl0ZW07XFxuICAgICAgICAgICAgaWYgKHJ1bGUuc3RhcnRzV2l0aChcXFwiKFxcXCIpKSB7XFxuICAgICAgICAgICAgICAgIGV2YWwoXFxcInJlc3VsdCA9IFxcXCIgKyBydWxlKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAvKipcXG4gICAgICAgICAgICAgICAgICog6L+Y5Y6f5oiQICQudG9TdHJpbmcoLi4uKSDnmoTmnIDnu4jnu5PmnpzvvIzovr7liLDmnIDnu4jlpITnkIbmlrnlvI/ot5/kuIrpnaLnmoQgaWYg5LiA6Ie055qE55uu55qEXFxuICAgICAgICAgICAgICAgICAqL1xcbiAgICAgICAgICAgICAgICBldmFsKFxcXCJyZXN1bHQgPSBcXFwiICsgXFxcIigoKSA9PiB7XFxcIiArIHJ1bGUgKyBcXFwifSkoKVxcXCIpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0IHx8IFxcXCJcXFwiO1xcbiAgICAgICAgfSxcXG4gICAgICAgIGdldFRpdGxlKHNyYywgY2F0ZWdvcnkpIHtcXG4gICAgICAgICAgICBsZXQgdGl0bGUgPSBcXFwiXFxcIjtcXG4gICAgICAgICAgICBsZXQgdGl0bGVSdWxlID0gY2F0ZWdvcnkgfHwgXFxcImEmJlRleHRcXFwiO1xcbiAgICAgICAgICAgIGlmICh0aXRsZVJ1bGUuc3RhcnRzV2l0aChcXFwiQGpzOlxcXCIpKSB7XFxuICAgICAgICAgICAgICAgIHRpdGxlID0gc3AodGhpcy5ldmFsSlNSdWxlKHNyYywgdGl0bGVSdWxlKSk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgdGl0bGUgPSBzcChwYXJzZURvbUZvckh0bWwoc3JjLCB0aXRsZVJ1bGUpKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIHRpdGxlIHx8IFxcXCJcXFwiO1xcbiAgICAgICAgfSxcXG4gICAgICAgIGdldFVybChzcmMsIGNhdGVnb3J5KSB7XFxuICAgICAgICAgICAgbGV0IHVybCA9IFxcXCJcXFwiO1xcbiAgICAgICAgICAgIGxldCB1cmxSdWxlID0gY2F0ZWdvcnku6ZO+5o6lIHx8IFxcXCJhJiZocmVmXFxcIjtcXG4gICAgICAgICAgICBpZiAodXJsUnVsZS5zdGFydHNXaXRoKFxcXCJAanM6XFxcIikpIHtcXG4gICAgICAgICAgICAgICAgdXJsID0gdGhpcy5ldmFsSlNSdWxlKHNyYywgdXJsUnVsZSk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgdXJsID0gcGQoc3JjLCB1cmxSdWxlKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjYXRlZ29yeS7pk77mjqXlpITnkIYgPT0gXFxcImZ1bmN0aW9uXFxcIikge1xcbiAgICAgICAgICAgICAgICB1cmwgPSBjYXRlZ29yeS7pk77mjqXlpITnkIYodXJsKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIHVybCB8fCBcXFwiXFxcIjtcXG4gICAgICAgIH0sXFxuICAgICAgICBpc051bGwocGFyYW0pIHtcXG4gICAgICAgICAgICBpZiAocGFyYW0gPT0gbnVsbCkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICAgICAgfSxcXG4gICAgICAgIGlzQm9vbGVhbih2YXJpYWJsZSkge1xcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFyaWFibGUgIT09IFxcXCJib29sZWFuXFxcIikge1xcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuW8gOWQr+aKmOWPoOivt+S8oOWFpeW4g+WwlOWAvFxcXCIpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sXFxuICAgICAgICDmuIXpmaQobGlzdCkge1xcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTnVsbChsaXN0KSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKGxpc3QuY29uc3RydWN0b3IgPT0gU3RyaW5nKSB7XFxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi5riF6Zmk5oql6ZSZOuivt+S8oOWIl+ihqFxcXCIpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB0aGlzLmNsZWFycyA9IGxpc3Q7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICB9LFxcbiAgICAgICAg5YWo5riFKGxpc3QpIHtcXG4gICAgICAgICAgICBpZiAodGhpcy5pc051bGwobGlzdCkpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHZhciBjID0gdGhpcy5jbGVhcmFsbDtcXG4gICAgICAgICAgICBsaXN0ID0gYy5jb25jYXQobGlzdCk7XFxuICAgICAgICAgICAgdGhpcy5jbGVhcmFsbCA9IGxpc3Q7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICB9LFxcbiAgICAgICAg5rqQ56CBKGlucHV0KSB7XFxuICAgICAgICAgICAgdGhpcy5odG1sID0gaW5wdXQ7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICB9LFxcbiAgICAgICAg55WM6Z2iKGlucHV0KSB7XFxuICAgICAgICAgICAgdGhpcy5sYXlvdXQgPSBpbnB1dDtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgICAgIH0sXFxuICAgICAgICDpobXnoIEoaW5wdXQpIHtcXG4gICAgICAgICAgICB0aGlzLnBhZ2UgPSBpbnB1dDtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgICAgIH0sXFxuICAgICAgICDnirbmgIEoaW5wdXQpIHtcXG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gaW5wdXQ7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICB9LFxcbiAgICAgICAg5byA5ZCv5pCc57SiKGlucHV0KSB7XFxuICAgICAgICAgICAgaWYgKGlucHV0ID09IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICAgICAgICBpbnB1dCA9IHRydWU7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoID0gaW5wdXQ7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICB9LFxcbiAgICAgICAg5byA5ZCv5oqY5Y+gKGlucHV0KSB7XFxuICAgICAgICAgICAgaWYgKGlucHV0ID09IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICAgICAgICBpbnB1dCA9IHRydWU7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHRoaXMuaXNCb29sZWFuKGlucHV0KTtcXG4gICAgICAgICAgICB0aGlzLm9wZW4gPSBpbnB1dDtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgICAgIH0sXFxuICAgICAgICBzZXRUaXRsZShrLCBpLCB0KSB7XFxuICAgICAgICAgICAgcmV0dXJuIGsgPT0gaSA/IFxcXCLigJzigJzigJ3igJ1cXFwiICsgdC5mb250Y29sb3IodGhpcy7liIbnsbvpopzoibIpIDogdDtcXG4gICAgICAgIH0sXFxuICAgICAgICBhY3Rpb24ob2JqKSB7XFxuICAgICAgICAgICAgcmV0dXJuIFt7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi5riF6Zmk54q25oCBXFxcIixcXG4gICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKG9iaikgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgbG9nKG9iaik7XFxuICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKG9iai5zdGF0ZSk7XFxuICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKFxcXCJoZWFkLmNhdGVcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoJ2NhdGVfYnV0dG9uJyk7XFxuICAgICAgICAgICAgICAgICAgICBvYmouYWxsLmZvckVhY2goKGl0ZW0pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKGl0ZW0pO1xcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICBvYmouY2wuZm9yRWFjaCgoaXRlbSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoaXRlbSk7XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgIH0sIG9iaiksXFxuICAgICAgICAgICAgfSwgXTtcXG4gICAgICAgIH0sXFxuICAgICAgICBjaGVja1BhcmFtKCkge1xcbiAgICAgICAgICAgIHZhciBvYmogPSB7fTtcXG4gICAgICAgICAgICBpZiAodGhpcy5wYWdlID09IDAgJiYgdHlwZW9mIHBhZ2UgPT0gXFxcInVuZGVmaW5lZFxcXCIpIHtcXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLor7fkvKDlhaXpobXnoIFcXFwiKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHBhZ2UgPT0gXFxcInVuZGVmaW5lZFxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgIG9ialtcXFwi6aG156CBXFxcIl0gPSB0aGlzLnBhZ2U7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBvYmpbXFxcIumhteeggVxcXCJdID0gcGFnZTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAodGhpcy5odG1sID09IFxcXCJlbXB0eVxcXCIgJiYgdHlwZW9mIGh0bWwgPT0gXFxcInVuZGVmaW5lZFxcXCIpIHtcXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLor7fkvKDlhaXmupDnoIFcXFwiKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGh0bWwgPT0gXFxcInVuZGVmaW5lZFxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgIG9ialtcXFwi5rqQ56CBXFxcIl0gPSB0aGlzLmh0bWw7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBvYmpbXFxcIua6kOeggVxcXCJdID0gaHRtbDtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAodGhpcy5sYXlvdXQgPT0gXFxcInVuZGVmaW5lZFxcXCIgJiYgdHlwZW9mIGQgPT0gXFxcInVuZGVmaW5lZFxcXCIpIHtcXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLor7fkvKDlhaXnlYzpnaJcXFwiKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGQgPT0gXFxcInVuZGVmaW5lZFxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgIG9ialtcXFwi55WM6Z2iXFxcIl0gPSB0aGlzLmxheW91dDtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIG9ialtcXFwi55WM6Z2iXFxcIl0gPSBkO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBvYmo7XFxuICAgICAgICB9LFxcbiAgICAgICAg5Yib5bu65Yqo5oCB5YiG57G7KHJ1bGVPYmopIHtcXG4gICAgICAgICAgICBsZXQgaXRlbXMgPSBbXTtcXG4gICAgICAgICAgICBsZXQgY2F0ZXMgPSBbXTtcXG4gICAgICAgICAgICBpZiAocnVsZU9iaiA9PSB1bmRlZmluZWQpIHtcXG4gICAgICAgICAgICAgICAgcnVsZU9iaiA9IFtdO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAvL+WIneWni+WMluWPmOmHj+W8gOWni1xcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtID0gdGhpcy5jaGVja1BhcmFtKCk7XFxuICAgICAgICAgICAgY29uc3QgcGFnZSA9IHBhcmFtLumhteeggTtcXG4gICAgICAgICAgICBjb25zdCBodG1sID0gcGFyYW0u5rqQ56CBO1xcbiAgICAgICAgICAgIGNvbnN0IGQgPSBwYXJhbS7nlYzpnaI7XFxuICAgICAgICAgICAgY29uc3Qg54q25oCBID0gdGhpcy5zdGF0ZTtcXG4gICAgICAgICAgICBjb25zdCBzZWFyY2ggPSB0aGlzLnNlYXJjaDtcXG4gICAgICAgICAgICBjb25zdCBlbXB0eSA9IFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgICAgICBjb25zdCDmipjlj6DnirbmgIEgPSB0aGlzLm9wZW47XFxuICAgICAgICAgICAgdmFyIOWxleW8gCA9IHRoaXMu5bGV5byAO1xcbiAgICAgICAgICAgIHZhciDmipjlj6AgPSB0aGlzLuaKmOWPoDtcXG4gICAgICAgICAgICB2YXIg5YWo5riFID0gdGhpcy5jbGVhcmFsbDtcXG4gICAgICAgICAgICB2YXIg5riF6ZmkID0gdGhpcy5jbGVhcnM7XFxuICAgICAgICAgICAgLy/liJ3lp4vljJblj5jph4/nu5PmnZ9cXG4gICAgICAgICAgICBsZXQgaW5pdF9jYXRlID0gbmV3IEFycmF5KDIwKS5maWxsKFxcXCIwXFxcIik7XFxuICAgICAgICAgICAgY29uc3QgZm9sZCA9IGdldE15VmFyKE1ZX1JVTEUuZ3JvdXAsIFxcXCIwXFxcIik7XFxuICAgICAgICAgICAgY29uc3QgY2F0ZV90ZW1wID0gSlNPTi5wYXJzZShcXG4gICAgICAgICAgICAgICAgZ2V0TXlWYXIoXFxcImhlYWQuY2F0ZVxcXCIsIEpTT04uc3RyaW5naWZ5KGluaXRfY2F0ZSkpXFxuICAgICAgICAgICAgKTtcXG4gICAgICAgICAgICBpZiAoc2VhcmNoICYmIHBhZ2UgPT0gMSkge1xcbiAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIHVybDogXFxcIidoaWtlcjovL3NlYXJjaD9ydWxlPVxcXCIgKyBNWV9SVUxFLnRpdGxlICsgXFxcIiZzPScraW5wdXRcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcIuaQnOe0ouWFs+mUruivjVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImlucHV0XFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRNeVZhcihcXFwia2V5d29yZFxcXCIsIFxcXCJcXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZTogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJrZXl3b3JkXFxcIiwgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGNvbnN0IGNhdGVnb3JpZXMgPSBbXTtcXG4gICAgICAgICAgICBydWxlT2JqLmZvckVhY2goKHgpID0+IHtcXG4gICAgICAgICAgICAgICAgdmFyIGxpc3QgPSBbXTtcXG4gICAgICAgICAgICAgICAgLy9sb2coeClcXG4gICAgICAgICAgICAgICAgaWYgKHguanNvbiAhPSB1bmRlZmluZWQpIHtcXG4gICAgICAgICAgICAgICAgICAgIHguanNvbi5tYXAoayA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcmllcy5wdXNoKEpTT04uc3RyaW5naWZ5KGspLnJlcGxhY2UoL15cXFxcW3xcXFxcXSQvZywgJycpKVxcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgIC8vY2F0ZWdvcmllcy5wdXNoKHguanNvbilcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAoeC7kuIDnuqflrprkvY0pIHtcXG4gICAgICAgICAgICAgICAgICAgIGlmICh4LuS4gOe6p+WumuS9jS5zdGFydHNXaXRoKFxcXCJAanM6XFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ID0gdGhpcy5ldmFsSlNSdWxlKGh0bWwsIHgu5LiA57qn5a6a5L2NKTtcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IHBkZmEoaHRtbCwgeC7kuIDnuqflrprkvY0pO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGlmICh4LuWkp+exu+WumuS9jSkge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKHgu5aSn57G75a6a5L2NLnN0YXJ0c1dpdGgoXFxcIkBqczpcXFwiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QgPSB0aGlzLmV2YWxKU1J1bGUoaHRtbCwgeC7lpKfnsbvlrprkvY0pO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ID0gW3BkZmEoaHRtbCwgeC7lpKfnsbvlrprkvY0pLmpvaW4oJ1xcXFxuJyldO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIC8vLS3pop3lpJblpITnkIYtLVxcbiAgICAgICAgICAgICAgICBpZiAoKCflop7liqAnIGluIHgpKSB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoeC7lop7liqAuY29uc3RydWN0b3IgPT0gU3RyaW5nKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgeC7lop7liqAgPSBldmFsKHgu5aKe5YqgKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIHNsaXN0ID0geC7lop7liqAuY29uY2F0KHNsaXN0KTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAoKCfooaXlhYUnIGluIHgpKSB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoeC7ooaXlhYUuY29uc3RydWN0b3IgPT0gU3RyaW5nKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgeC7ooaXlhYUgPSBldmFsKHgu6KGl5YWFKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIHNsaXN0ID0gc2xpc3QuY29uY2F0KHgu6KGl5YWFKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAvLy0t6aKd5aSW5aSE55CGLS1cXG4gICAgICAgICAgICAgICAgdmFyIOS4gOe6pyA9IGxpc3QubWFwKChzKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgc2xpc3QgPSBbXTtcXG4gICAgICAgICAgICAgICAgICAgIGlmICghKFxcXCLlsI/nsbtcXFwiIGluIHgpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgeC7lsI/nsbsgPSBcXFwiYm9keSYmYTpub3QoOm1hdGNoZXMo6aaW6aG1KSk6bm90KGE6bm90KFtocmVmXSkpXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIGlmICh4LuWwj+exuy5zdGFydHNXaXRoKFxcXCJAanM6XFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzbGlzdCA9IHRoaXMuZXZhbEpTUnVsZShzLCB4LuWwj+exuyk7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHNsaXN0ID0gcGRmYShzLCB4LuWwj+exuyk7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB2YXIg5a6a5L2NID0gc2xpc3QubWFwKChpdGVtKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gc3AodGhpcy5nZXRUaXRsZShpdGVtLCB4Luagh+mimCkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1cmwgPSB0aGlzLmdldFVybChpdGVtLCB4KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogdXJsXFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqKTtcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIOWumuS9jTtcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIC8vbG9nKOS4gOe6pylcXG4gICAgICAgICAgICAgICAgLy9sb2co5LiA57qnLmxlbmd0aClcXG4gICAgICAgICAgICAgICAgaWYgKOS4gOe6py5sZW5ndGggPT0gMSkge1xcbiAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcmllcy5wdXNoKOS4gOe6py5qb2luKFxcXCJcXFxcblxcXCIpKTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIOS4gOe6py5mb3JFYWNoKChpdGVtKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcmllcy5wdXNoKGl0ZW0uam9pbihcXFwiLFxcXCIpKTtcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIC8vbG9nKGNhdGVnb3JpZXMpXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgaWYgKOaKmOWPoOeKtuaAgSkge1xcbiAgICAgICAgICAgICAgICBpZiAocGFnZSA9PSAxKSB7XFxuICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZm9sZCA9PT0gXFxcIjFcXFwiID8g5oqY5Y+gIDog5bGV5byALFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZShcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRpdGxlLCBmb2xkLCB1LCBhbGwsIGV4cHMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb2xkID0gZ2V0TXlWYXIoTVlfUlVMRS5ncm91cCwgZm9sZCk7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgW+WxleW8gCwg5oqY5Y+gXSA9IGV4cHM7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9sZCA9PSAxKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN4ID0gZmluZEl0ZW1zQnlDbHModGl0bGUgKyAnY2F0ZV9idXR0b24nKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcignY2F0ZV9idXR0b24nLCBjeCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlSXRlbUJ5Q2xzKHRpdGxlICsgJ2NhdGVfYnV0dG9uJyk7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjeCA9IHN0b3JhZ2UwLmdldE15VmFyKCdjYXRlX2J1dHRvbicsIFtdKS5tYXAoeCA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhbJ2NvbF90eXBlJ10gPSB4Wydjb2xfdHlwZSddID8geFsnY29sX3R5cGUnXSA6IHhbJ3R5cGUnXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHg7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkSXRlbUFmdGVyKHRpdGxlICsgJ2NhdGVfbGluZScsIGN4KVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyphbGwuZm9yRWFjaCgoaXRlbSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKGl0ZW0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ki9cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0odGl0bGUgKyAnY2F0ZV9leHAnLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGZvbGQgPT0gMSA/IOWxleW8gCA6IOaKmOWPoCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihNWV9SVUxFLmdyb3VwLCBmb2xkID09PSBcXFwiMVxcXCIgPyBcXFwiMFxcXCIgOiBcXFwiMVxcXCIpO1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9yZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNWV9SVUxFLnRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICDnirbmgIEsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIOWFqOa4hSwgW+WxleW8gCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOaKmOWPoFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICksXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogTVlfUlVMRS50aXRsZSArICdjYXRlX2V4cCcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmdDbGljazogdGhpcy5hY3Rpb24oe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU6IOeKtuaAgSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbDog5YWo5riFLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2w6IOa4hemZpCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmIChwYWdlID09IDEpIHtcXG4gICAgICAgICAgICAgICAgY2F0ZWdvcmllcy5mb3JFYWNoKChjYXRlZ29yeSwgaW5kZXgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIC8vbG9nKGNhdGVnb3J5KVxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHN1Yl9jYXRlZ29yaWVzID0gW107XFxuICAgICAgICAgICAgICAgICAgICAvKmlmICjlsI/nsbvlrprkvY0uaW5jbHVkZXMoXFxcIjtcXFwiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICBzdWJfY2F0ZWdvcmllcyA9IHBkZmEoY2F0ZWdvcnksIOWwj+exu+WumuS9jS5zcGxpdChcXFwiO1xcXCIpWzBdKTtcXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Yl9jYXRlZ29yaWVzLmxlbmd0aCA9PSAwKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc3ViX2NhdGVnb3JpZXMgPSBwZGZhKGNhdGVnb3J5LCDlsI/nsbvlrprkvY0uc3BsaXQoXFxcIjtcXFwiKVsxXSk7XFxuICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ki9cXG4gICAgICAgICAgICAgICAgICAgIC8vbG9nKGluZGV4KVxcbiAgICAgICAgICAgICAgICAgICAgc3ViX2NhdGVnb3JpZXMgPSBKU09OLnBhcnNlKGBbJHtjYXRlZ29yeX1dYCk7XFxuICAgICAgICAgICAgICAgICAgICAvL2xvZyhzdWJfY2F0ZWdvcmllcylcXG4gICAgICAgICAgICAgICAgICAgIC8vIHN1Yl9jYXRlZ29yaWVzID0gcGRmYShjYXRlZ29yeSwg5bCP57G75a6a5L2NKTtcXG4gICAgICAgICAgICAgICAgICAgIC8vfVxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy/lpKfnsbtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJfY2F0ZWdvcmllcy5mb3JFYWNoKChpdGVtLCBrZXkpID0+IHtcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9sZXQgdGl0bGUgPSBwZGZoKGl0ZW0sIF/lpKfnsbvmoIfpopgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSBzcChpdGVtLnRpdGxlKTtcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiDmjpLpmaQgIT0gXFxcInVuZGVmaW5lZFxcXCIgJiYg5o6S6ZmkICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IHRpdGxlLnJlcGxhY2UobmV3UmVnRXhwKOaOkumZpCwgXFxcImdcXFwiKSwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBqc29uID0gJydcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbiA9IGl0ZW0udXJsO1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGFyYW1zID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZV90ZW1wOiBjYXRlX3RlbXAsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGtleSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2U6IHBhZ2UsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhcnM6IOa4hemZpCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb246IGpzb24sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTog54q25oCBLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsY2xlYXJzOiDlhajmuIUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbGV0IHVybCA9IHBkKGl0ZW0sIF/lpKfnsbvpk77mjqUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdXJsID0gaXRlbS51cmw7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qaWYgKOWkp+exu+WkhOeQhikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IOS4gOe6p+WIhuexu+WkhOeQhih1cmwpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ki9cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9sb2codXJsKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdJytzcCh0aGlzLnNldFRpdGxlKGtleS50b1N0cmluZygpLCBjYXRlX3RlbXBbaW5kZXhdLCB0aXRsZSkpLnNtYWxsKCksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKFxcXCJoaWtlcjovL2VtcHR5I25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgocGFyYW1zKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXdfY2F0ZSA9IFtdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuY2xlYXJzLmZvckVhY2goKGl0ZW0pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoaXRlbSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuYWxsY2xlYXJzLmZvckVhY2goKGl0ZW0pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoaXRlbSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKCdjYXRlX2J1dHRvbicpO1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuY2F0ZV90ZW1wLmZvckVhY2goKGNhdGUsIGluZGV4KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfY2F0ZS5wdXNoKGluZGV4ID09PSAwID8gcGFyYW1zLmtleS50b1N0cmluZygpIDogXFxcIjBcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJoZWFkLmNhdGVcXFwiLCBKU09OLnN0cmluZ2lmeShuZXdfY2F0ZSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1zLmpzb24uY29uc3RydWN0b3IgPT09IE9iamVjdCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcImR0X1xcXCIgKyBwYXJhbXMuanNvbi50eXBlLCBwYXJhbXMuanNvbi52YWx1ZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihwYXJhbXMuc3RhdGUsIHBhcmFtcy5qc29uKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBNWV9SVUxFLnRpdGxlICsgJ2NhdGVfbGluZScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy/lsI/nsbtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJfY2F0ZWdvcmllcy5mb3JFYWNoKChpdGVtLCBrZXkpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGV4dHJhcG9zID0gZmFsc2U7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qaWYgKGl0ZW0uaW5jbHVkZXMoJ3R5cGU9XFxcIkBleHRyYVxcXCInKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhcG9zID0gdHJ1ZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2xvZygn6ZmE5Yqg5a6a5L2NJylcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSovXFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleHRyYXBvcykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gc3AocGRmaChpdGVtLCBcXFwiYSYmVGV4dFxcXCIpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yg5o6S6ZmkICE9IFxcXCJ1bmRlZmluZWRcXFwiICYmIOaOkumZpCAhPSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gdGl0bGUucmVwbGFjZShuZXcgUmVnRXhwKOaOkumZpCwgXFxcImdcXFwiKSwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGpzb24gPSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogcGRmaChpdGVtLCBcXFwiYSYmc3RhdGVcXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcGRmaChpdGVtLCBcXFwiYSYmdmFsdWVcXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3ZhciB0aXRsZSA9IHBkZmgoaXRlbSwg5YiG57G75qCH6aKYKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9IGl0ZW0udGl0bGU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIOaOkumZpCAhPSBcXFwidW5kZWZpbmVkXFxcIiAmJiDmjpLpmaQgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IHRpdGxlLnJlcGxhY2UobmV3IFJlZ0V4cCjmjpLpmaQsIFxcXCJnXFxcIiksIFxcXCJcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBqc29uID0gXFxcIlxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnN3aXRjaCAodHJ1ZSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIOWIhuexu+mTvuaOpS5pbmNsdWRlcyhcXFwiQEBAXFxcIik6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbiA9IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHBkZmgoaXRlbSwg5YiG57G76ZO+5o6lLnNwbGl0KFxcXCJAQEBcXFwiKVswXSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcGRmaChpdGVtLCDliIbnsbvpk77mjqUuc3BsaXQoXFxcIkBAQFxcXCIpWzFdKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIOWIhuexu+mTvuaOpS5pbmNsdWRlcyhcXFwiQEBcXFwiKTpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTog5YiG57G76ZO+5o6lLnNwbGl0KFxcXCJAQFxcXCIpWzBdLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHBkZmgoaXRlbSwg5YiG57G76ZO+5o6lLnNwbGl0KFxcXCJAQFxcXCIpWzFdKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24gPSBpdGVtLnVybDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBqc29uID0gcGQoaXRlbSwg5YiG57G76ZO+5o6lKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0qL1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbiA9IGl0ZW0udXJsO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp2YXIganNvbj3liIbnsbvpk77mjqUuaW5jbHVkZXMoJ0BAQCcpP3tcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6cGRmaChpdGVtLOWIhuexu+mTvuaOpS5zcGxpdCgnQEBAJylbMF0pLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6cGRmaChpdGVtLOWIhuexu+mTvuaOpS5zcGxpdCgnQEBAJylbMV0pLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OnBkKGl0ZW0s5YiG57G76ZO+5o6lKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbj3liIbnsbvpk77mjqUuaW5jbHVkZXMoJ0BAJyk/e1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTrliIbnsbvpk77mjqUuc3BsaXQoJ0BAJylbMF0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTpwZGZoKGl0ZW0s5YiG57G76ZO+5o6lLnNwbGl0KCdAQCcpWzFdKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTpwZChpdGVtLOWIhuexu+mTvuaOpSk7Ki9cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGFyYW1zID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZV90ZW1wOiBjYXRlX3RlbXAsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaW5kZXgsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGtleSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2U6IHBhZ2UsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uOiBqc29uLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU6IOeKtuaAgSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbGNsZWFyczog5YWo5riFLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlcy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdJyt0aGlzLnNldFRpdGxlKGtleS50b1N0cmluZygpLCBjYXRlX3RlbXBbaW5kZXhdLCB0aXRsZSkuc21hbGwoKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJChcXFwiaGlrZXI6Ly9lbXB0eVxcXCIgKyBcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgocGFyYW1zKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5hbGxjbGVhcnMuZm9yRWFjaCgoaXRlbSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihpdGVtKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoJ2NhdGVfYnV0dG9uJyk7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5jYXRlX3RlbXBbcGFyYW1zLmluZGV4XSA9IHBhcmFtcy5rZXkudG9TdHJpbmcoKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcImhlYWQuY2F0ZVxcXCIsIEpTT04uc3RyaW5naWZ5KHBhcmFtcy5jYXRlX3RlbXApKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtcy5qc29uLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJkdF9cXFwiICsgcGFyYW1zLmpzb24udHlwZSwgcGFyYW1zLmpzb24udmFsdWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIocGFyYW1zLnN0YXRlLCBwYXJhbXMuanNvbik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHM6IE1ZX1JVTEUudGl0bGUgKyAnY2F0ZV9idXR0b24nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRlcy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJibGFua19ibG9ja1xcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHM6IE1ZX1JVTEUudGl0bGUgKyAnY2F0ZV9idXR0b24nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAoZm9sZCA9PT0gXFxcIjFcXFwiIHx8IOaKmOWPoOeKtuaAgSA9PSBmYWxzZSkge1xcbiAgICAgICAgICAgICAgICBpdGVtcyA9IGl0ZW1zLmNvbmNhdChjYXRlcyk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmIChmb2xkID09PSBcXFwiMFxcXCIpIHtcXG4gICAgICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoJ2NhdGVfYnV0dG9uJywgY2F0ZXMpXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2V0UHJlUmVzdWx0ICE9ICd1bmRlZmluZWQnKSB7XFxuICAgICAgICAgICAgICAgIGl0ZW1zID0gZC5jb25jYXQoaXRlbXMpO1xcbiAgICAgICAgICAgICAgICAvL+a4heepuue7p+aJv+aVsOe7hFxcbiAgICAgICAgICAgICAgICBkLmxlbmd0aCA9IDA7XFxuICAgICAgICAgICAgICAgIHNldFByZVJlc3VsdChpdGVtcyk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaChpdGVtKTtcXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LFxcbiAgICB9O1xcbiAgICBvYmou6aKE6K6+KG9wdGlvbnMpO1xcbiAgICByZXR1cm4gb2JqO1xcbn1cXG5cXG52YXIg54q25oCBID1cXG4gICAgdHlwZW9mIOeKtuaAgeagh+iusCAhPSBcXFwidW5kZWZpbmVkXFxcIiAmJiDnirbmgIHmoIforrAgIT0gXFxcIlxcXCIgPyDnirbmgIHmoIforrAgOiBNWV9SVUxFLnVybDtcXG5cXG5sZXQgZHRfZGVidWcgPSBmYWxzZTtcXG5cXG5hZGRMaXN0ZW5lcihcXG4gICAgXFxcIm9uQ2xvc2VcXFwiLFxcbiAgICAkLnRvU3RyaW5nKCgpID0+IHt9KVxcbik7XFxuXFxudmFyIENyZWF0ZSA9IHtcXG4gICAgbmV4dFBhZ2U6IGZ1bmN0aW9uKCkge1xcbiAgICAgICAgdmFyIHJlc3VsdCA9IGZhbHNlO1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICB2YXIgbmV4dCA9IGV2YWwo5LiL5LiA6aG1KTtcXG4gICAgICAgICAgICAvL2xvZygnbjonK25leHQpXFxuICAgICAgICAgICAgaWYgKG5leHQgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfkuIvkuIDpobXpk77mjqXkuLrnqbonKVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXN1bHQgPSB0cnVlO1xcbiAgICAgICAgICAgIGlmICh0cnVlX3VybCA9PSBuZXh0KSB7XFxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICAvL2xvZyhcXFwi5Y+v6IO95LiN5a2Y5Zyo5LiL5LiA6aG15oiW6ICF5LiL5LiA6aG15a6a5L2N5pyJ6Zeu6aKYXFxcIik7XFxuICAgICAgICAgICAgbG9nKFxcXCLplJnor6/kv6Hmga86XFxcIiArIGUubWVzc2FnZSk7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoKG5leHQgPT0gXFxcIlxcXCIgfHwgbmV4dCA9PSB1bmRlZmluZWQpICYmIHBhZ2UgPT0gMSkge1xcbiAgICAgICAgICAgIG5leHQgPSB0cnVlX3VybDtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgLy9yZXN1bHQ9ZmFsc2U7XFxuICAgICAgICAgICAgbmV4dCA9IGdldE15VmFyKOeKtuaAgSk7XFxuICAgICAgICB9XFxuICAgICAgICAvL2xvZygnbCcrdHJ1ZV91cmwpXFxuICAgICAgICAvL2xvZygnbicrbmV4dClcXG4gICAgICAgIGlmIChwYWdlICE9IDEpIHtcXG4gICAgICAgICAgICBpZiAodHJ1ZV91cmwgPT0gbmV4dCAmJiAhcmVzdWx0KSB7XFxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcXG4gICAgICAgIC8vcHV0TXlWYXIo54q25oCBLCBuZXh0KTtcXG4gICAgfSxcXG4gICAgZ2V0QmFja0ltYWdlOiBmdW5jdGlvbihpbWd1cmwpIHtcXG4gICAgICAgIHZhciByZXN1bHQgPSBpbWd1cmw7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIHJlc3VsdCA9IC91cmwoPzpcXFxccyspP1xcXFwoKC4qPylcXFxcKS9nXFxuICAgICAgICAgICAgICAgIC5leGVjKGltZ3VybClbMV1cXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoLygnfFxcXCJ8JnF1b3Q7KS9nbSwgXFxcIlxcXCIpO1xcbiAgICAgICAgfSBjYXRjaCB7fVxcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcXG4gICAgfSxcXG4gICAgaHR0cEhhbmRsZTogZnVuY3Rpb24oaW5wdXQpIHtcXG4gICAgICAgIGlmIChpbnB1dC5zdGFydHNXaXRoKFxcXCJodHRwXFxcIikpIHtcXG4gICAgICAgICAgICByZXR1cm4gaW5wdXQ7XFxuICAgICAgICB9IGVsc2UgaWYgKGlucHV0LnN0YXJ0c1dpdGgoXFxcIi8vXFxcIikpIHtcXG4gICAgICAgICAgICByZXR1cm4gXFxcImh0dHBzOlxcXCIgKyBpbnB1dDtcXG4gICAgICAgIH0gZWxzZSBpZiAoaW5wdXQuc3RhcnRzV2l0aChcXFwiL1xcXCIpKSB7XFxuICAgICAgICAgICAgcmV0dXJuIE1ZX0hPTUUgKyBpbnB1dDtcXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAgaW1nSGFuZGxlOiBmdW5jdGlvbihpdGVtLCBydWxlKSB7XFxuICAgICAgICB2YXIgaW1nID0gXFxcIlxcXCI7XFxuICAgICAgICBpZiAocnVsZS5pbWcuc3RhcnRzV2l0aChcXFwicGRcXFwiKSkge1xcbiAgICAgICAgICAgIGltZyA9IGV2YWwocnVsZS5pbWcpO1xcbiAgICAgICAgfSBlbHNlIGlmIChydWxlLmJhY2tpbWcpIHtcXG4gICAgICAgICAgICBpbWcgPSBwZGZoKGl0ZW0sIHJ1bGUuaW1nKTtcXG4gICAgICAgICAgICBpbWcgPSB0aGlzLmdldEJhY2tJbWFnZShpbWcpO1xcbiAgICAgICAgICAgIGltZyA9IHRoaXMuaHR0cEhhbmRsZShpbWcpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBpbWcgPSBwZGZoKGl0ZW0sIHJ1bGUuaW1nKTtcXG4gICAgICAgICAgICBpZiAoIWltZy5zdGFydHNXaXRoKFxcXCJodHRwXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgaW1nID0gcGQoaXRlbSwgcnVsZS5pbWcpO1xcbiAgICAgICAgICAgICAgICBpbWcgPSB0aGlzLmh0dHBIYW5kbGUoaW1nKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gaW1nICsgcnVsZS5yZWY7XFxuICAgIH0sXFxuICAgIHVybEhhbmRsZTogZnVuY3Rpb24oaXRlbSwgcnVsZSkge1xcbiAgICAgICAgdmFyIGhyZWYgPSBcXFwiXFxcIjtcXG4gICAgICAgIGlmIChydWxlLnVybC5zdGFydHNXaXRoKFxcXCJwZFxcXCIpKSB7XFxuICAgICAgICAgICAgaHJlZiA9IGV2YWwocnVsZS51cmwpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBocmVmID0gcGQoaXRlbSwgcnVsZS51cmwpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaHJlZiA9IHJ1bGUuaW10ID8gaHJlZiArIFxcXCIjaW1tZXJzaXZlVGhlbWUjI2F1dG9DYWNoZSNcXFwiIDogaHJlZjtcXG4gICAgICAgIHJldHVybiBocmVmO1xcbiAgICB9LFxcbiAgICBzZXRDb250ZW50OiBmdW5jdGlvbihpdGVtLCBpbnB1dCkge1xcbiAgICAgICAgbGV0IG91dHB1dCA9IFxcXCJcXFwiO1xcbiAgICAgICAgaWYgKGlucHV0ID09IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoaW5wdXQuc3RhcnRzV2l0aChcXFwicGRcXFwiKSkge1xcbiAgICAgICAgICAgIG91dHB1dCA9IGV2YWwoaW5wdXQpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBvdXRwdXQgPSBwZGZoKGl0ZW0sIGlucHV0KTtcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBvdXRwdXQ7XFxuICAgIH0sXFxuICAgIHJlZnJlc2g6IGZ1bmN0aW9uKCkge1xcbiAgICAgICAgYWRkTGlzdGVuZXIoXFxuICAgICAgICAgICAgXFxcIm9uUmVmcmVzaFxcXCIsXFxuICAgICAgICAgICAgJC50b1N0cmluZygodSkgPT4ge1xcbiAgICAgICAgICAgICAgICBjbGVhck15VmFyKFxcXCJ5aWxpc3RcXFwiKTtcXG4gICAgICAgICAgICAgICAgLy92YXIgcCA9IHN0b3JhZ2UwLmdldE15VmFyKCdzcGFnZScsICcnKTtcXG4gICAgICAgICAgICAgICAgLy9wdXRNeVZhcih1LCBwKTtcXG4gICAgICAgICAgICB9LCDnirbmgIEpXFxuICAgICAgICApO1xcbiAgICB9LFxcbiAgICBnZXRCb29sZWFuVmFsdWU6IGZ1bmN0aW9uKHZhbHVlLCBkZWZhdWx0VmFsdWUpIHtcXG4gICAgICAgIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gQm9vbGVhbih2YWx1ZSkgOiAoZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgPyBkZWZhdWx0VmFsdWUgOiB0cnVlKTtcXG4gICAgfSxcXG4gICAgZGVidWdsb2c6IGZ1bmN0aW9uKGksIGl0ZW0sIHJ1bGUsIG9iaikge1xcbiAgICAgICAgbG9nKCctLS0tLS0tLS0tJyArIChpICsgMSkgKyAnOuiwg+ivleW8gOWniy0tLS0tLS0tLS0nKTtcXG4gICAgICAgIGlmIChpdGVtLmNvbnN0cnVjdG9yID09IE9iamVjdCkge1xcbiAgICAgICAgICAgIGl0ZW0gPSBKU09OLnN0cmluZ2lmeShpdGVtKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGxvZygnaXRlbeWGheWuuTpcXFxcclxcXFxuJyArIGl0ZW0gKyAnXFxcXHJcXFxcbicgK1xcbiAgICAgICAgICAgIGBcXFxcblxcXFx0dGl0bGXlrprkvY06ICAke3J1bGUudGl0bGV9ICAtLS0+IOe7k+aenDogICR7b2JqLnRpdGxlfWAgK1xcbiAgICAgICAgICAgIGBcXFxcblxcXFx0ZGVzY+WumuS9jTogICR7cnVsZS5kZXNjfSAgLS0tPiDnu5Pmnpw6ICAke29iai5kZXNjfWAgK1xcbiAgICAgICAgICAgIGBcXFxcblxcXFx0aW1n5a6a5L2NOiAgJHtydWxlLmltZ30gIC0tLT4g57uT5p6cOiAgJHtvYmouaW1nfWAgK1xcbiAgICAgICAgICAgIChydWxlLmNvbnRlbnQgIT0gdW5kZWZpbmVkID8gYFxcXFxuXFxcXHRjb250ZW505a6a5L2NOiAgJHtydWxlLmNvbnRlbnR9ICAtLS0+IOe7k+aenDogICR7b2JqLmNvbnRlbnR9YCA6ICcnKSArXFxuICAgICAgICAgICAgYFxcXFxuXFxcXHR1cmzlrprkvY06ICAke3J1bGUudXJsfSAgLS0tPiDnu5Pmnpw6ICAke29iai51cmx9YFxcbiAgICAgICAgKTtcXG4gICAgICAgIGxvZygnLS0tLS0tLS0tLScgKyAoaSArIDEpICsgJzrosIPor5Xnu5PmnZ8tLS0tLS0tLS0tJyk7XFxuICAgIH0sXFxuICAgIGpzb25MaXN0OiBmdW5jdGlvbihhcnIsIGpzb24sIHJ1bGUpIHtcXG4gICAgICAgIGlmIChqc29uLmNvbnN0cnVjdG9yICE9IE9iamVjdCkge1xcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIGpzb24gPSBKU09OLnBhcnNlKGpzb24pO1xcbiAgICAgICAgICAgIH0gY2F0Y2gge31cXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChqc29uW3J1bGUubGlzdF0gPT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICAgICAgYXJyLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnTxmb250IGNvbG9yPVxcXCJncmV5XFxcIj48c21hbGw+5peg5YaF5a65PC9zbWFsbD48L2ZvbnQ+JyxcXG4gICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7fSxcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICByZXR1cm47XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgZGVidWcgPSB0aGlzLmdldEJvb2xlYW5WYWx1ZShydWxlLmRlYnVnLCBmYWxzZSk7XFxuICAgICAgICB2YXIgZW1wdHkgPSB0aGlzLmdldEJvb2xlYW5WYWx1ZShydWxlLmVtcHR5KTtcXG4gICAgICAgIGlmIChkZWJ1Zykge1xcbiAgICAgICAgICAgIGxvZygn5a6a5L2N5YiX6KGoOicgKyBydWxlLmxpc3QpO1xcbiAgICAgICAgfVxcbiAgICAgICAganNvbltydWxlLmxpc3RdLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcXG4gICAgICAgICAgICB2YXIgdGl0bGUgPSBzcChldmFsKHJ1bGUudGl0bGUpKTtcXG4gICAgICAgICAgICB2YXIgZGVzYyA9IHNwKGV2YWwocnVsZS5kZXNjKSk7XFxuICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSBzcChldmFsKHJ1bGUuY29udGVudCkpO1xcbiAgICAgICAgICAgIHZhciBpbWcgPSBldmFsKHJ1bGUuaW1nKSArIHJ1bGUucmVmO1xcbiAgICAgICAgICAgIHZhciBocmVmID0gZXZhbChydWxlLnVybCk7XFxuICAgICAgICAgICAgdmFyIHVybCA9IHJ1bGUuaW10ID8gaHJlZiArIFxcXCIjaW1tZXJzaXZlVGhlbWUjI2F1dG9DYWNoZSNcXFwiIDogaHJlZjtcXG4gICAgICAgICAgICB2YXIgbGF6eSA9IHJ1bGUubGF6eSA/IHJ1bGUubGF6eSA6IFxcXCJcXFwiO1xcblxcbiAgICAgICAgICAgIHZhciBkZCA9IHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBkZXNjLFxcbiAgICAgICAgICAgICAgICBjb250ZW50OiBjb250ZW50LFxcbiAgICAgICAgICAgICAgICBwaWNfdXJsOiBpbWcsXFxuICAgICAgICAgICAgICAgIHVybDogKGVtcHR5ID8gXFxcImhpa2VyOi8vZW1wdHkjI1xcXCIgOiAnJykgKyB1cmwsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBydWxlLmNvbF90eXBlLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgaW1nOiBpbWcsXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgfTtcXG5cXG4gICAgICAgICAgICBpZiAoZGVidWcpIHtcXG4gICAgICAgICAgICAgICAgdmFyIHJ4ID0ge1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjLFxcbiAgICAgICAgICAgICAgICAgICAgaW1nLFxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudCxcXG4gICAgICAgICAgICAgICAgICAgIHVybFxcbiAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICB0aGlzLmRlYnVnbG9nKGksIGl0ZW0sIHJ1bGUsIHJ4KTtcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgaWYgKGxhenkgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgZGRbXFxcInVybFxcXCJdID0gaHJlZiArIGxhenk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGFyci5wdXNoKGRkKTtcXG4gICAgICAgIH0pO1xcbiAgICB9LFxcbiAgICBydWxlTGlzdDogZnVuY3Rpb24oYXJyLCBodG1sLCBydWxlKSB7XFxuICAgICAgICB2YXIgbGlzdCA9IHBkZmEoaHRtbCxcXG4gICAgICAgICAgICBydWxlLmxpc3QpO1xcbiAgICAgICAgdmFyIGRlYnVnID0gdGhpcy5nZXRCb29sZWFuVmFsdWUocnVsZS5kZWJ1ZyxcXG4gICAgICAgICAgICBmYWxzZSk7XFxuICAgICAgICB2YXIgZW1wdHkgPSB0aGlzLmdldEJvb2xlYW5WYWx1ZShydWxlLmVtcHR5KTtcXG4gICAgICAgIGlmIChkZWJ1Zykge1xcbiAgICAgICAgICAgIGxvZygn5a6a5L2N5YiX6KGoOicgKyBydWxlLmxpc3QpO1xcbiAgICAgICAgfVxcbiAgICAgICAgbGlzdC5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XFxuICAgICAgICAgICAgdmFyIHRpdGxlID0gc3AodGhpcy5zZXRDb250ZW50KGl0ZW0sIHJ1bGUudGl0bGUpKTtcXG4gICAgICAgICAgICB2YXIgZGVzYyA9IHNwKHRoaXMuc2V0Q29udGVudChpdGVtLCBydWxlLmRlc2MpKTtcXG4gICAgICAgICAgICB2YXIgaW1nID0gdGhpcy5pbWdIYW5kbGUoaXRlbSwgcnVsZSk7XFxuICAgICAgICAgICAgdmFyIHVybCA9IHRoaXMudXJsSGFuZGxlKGl0ZW0sIHJ1bGUpO1xcbiAgICAgICAgICAgIHZhciBjb250ZW50ID0gc3AodGhpcy5zZXRDb250ZW50KGl0ZW0sIHJ1bGUuY29udGVudCkpO1xcblxcbiAgICAgICAgICAgIGlmIChkZWJ1Zykge1xcbiAgICAgICAgICAgICAgICB2YXIgcnggPSB7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2MsXFxuICAgICAgICAgICAgICAgICAgICBpbWcsXFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50LFxcbiAgICAgICAgICAgICAgICAgICAgdXJsXFxuICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgIHRoaXMuZGVidWdsb2coaSwgaXRlbSwgcnVsZSwgcngpO1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICB2YXIgbGF6eSA9IHJ1bGUubGF6eSA/IHJ1bGUubGF6eSA6IFxcXCJcXFwiO1xcbiAgICAgICAgICAgIHZhciBkZCA9IHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBkZXNjLFxcbiAgICAgICAgICAgICAgICBwaWNfdXJsOiBpbWcsXFxuICAgICAgICAgICAgICAgIHVybDogKGVtcHR5ID8gXFxcImhpa2VyOi8vZW1wdHkjI1xcXCIgOiAnJykgKyB1cmwsXFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBydWxlLmNvbF90eXBlLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgaW1nOiBpbWcsXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICBpZiAobGF6eSAhPSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICBkZFtcXFwidXJsXFxcIl0gPSB1cmwgKyBsYXp5O1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBhcnIucHVzaChkZCk7XFxuICAgICAgICB9KTtcXG4gICAgfSxcXG4gICAgTGlzdDogZnVuY3Rpb24oYXJyLCBodG1sLCBydWxlLCBwYXJhbSkge1xcbiAgICAgICAgcGFyYW0gPSBwYXJhbSA/IHBhcmFtIDoge307XFxuICAgICAgICB2YXIgYXV0byA9IHBhcmFtLmF1dG8gPyBwYXJhbS5hdXRvIDogZmFsc2U7XFxuICAgICAgICB2YXIgc2hvdyA9IHBhcmFtLnNob3cgPyBwYXJhbS5zaG93IDogZmFsc2U7XFxuICAgICAgICBpZiAocGFnZSA9PSAxKSB7XFxuICAgICAgICAgICAgLy90aGlzLnNwYWdlLnNldCh0cnVlX3VybCk7XFxuICAgICAgICB9XFxuICAgICAgICB0aGlzLnJlZnJlc2goKTtcXG4gICAgICAgIHZhciBkZWJ1ZyA9IHRoaXMuZ2V0Qm9vbGVhblZhbHVlKHJ1bGUuZGVidWcsIGZhbHNlKTtcXG4gICAgICAgIHZhciBlbXB0eSA9IHRoaXMuZ2V0Qm9vbGVhblZhbHVlKHJ1bGUuZW1wdHkpO1xcbiAgICAgICAgdmFyIGxpc3QgPSBwZGZhKGh0bWwsIHJ1bGUubGlzdCk7XFxuICAgICAgICBpZiAoZGVidWcpIHtcXG4gICAgICAgICAgICBsb2coJ+WumuS9jeWIl+ihqDonICsgcnVsZS5saXN0KTtcXG4gICAgICAgIH1cXG4gICAgICAgIC8vbG9nKHRoaXMubmV4dFBhZ2UoKSlcXG4gICAgICAgIGlmICgoc3RvcmFnZTAuZ2V0TXlWYXIoJ3lpX2lzbmV4dCcsICd0JykgPT0gJ3QnICYmIGxpc3QubGVuZ3RoID4gMCkgfHwgcGFnZSA9PSAxKSB7XFxuICAgICAgICAgICAgbGlzdC5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XFxuICAgICAgICAgICAgICAgIGRlbGV0ZUl0ZW0oXFxcInBhZ2VudW1cXFwiKTtcXG4gICAgICAgICAgICAgICAgZGVsZXRlSXRlbShcXFwicGFnZWxpbmVcXFwiKTtcXG4gICAgICAgICAgICAgICAgdmFyIGlkID0gXFxcIlxcXCI7XFxuICAgICAgICAgICAgICAgIHZhciBjbHMgPSBcXFwiXFxcIjtcXG4gICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gc3AodGhpcy5zZXRDb250ZW50KGl0ZW0sIHJ1bGUudGl0bGUpKTtcXG4gICAgICAgICAgICAgICAgdmFyIGRlc2MgPSBzcCh0aGlzLnNldENvbnRlbnQoaXRlbSwgcnVsZS5kZXNjKSk7XFxuICAgICAgICAgICAgICAgIHZhciBpbWcgPSB0aGlzLmltZ0hhbmRsZShpdGVtLCBydWxlKTtcXG4gICAgICAgICAgICAgICAgdmFyIHVybCA9IHRoaXMudXJsSGFuZGxlKGl0ZW0sIHJ1bGUpO1xcbiAgICAgICAgICAgICAgICB2YXIgY29udGVudCA9IHNwKHRoaXMuc2V0Q29udGVudChpdGVtLCBydWxlLmNvbnRlbnQpKTtcXG5cXG4gICAgICAgICAgICAgICAgaWYgKGRlYnVnKSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgcnggPSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzYyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmxcXG4gICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlYnVnbG9nKGksIGl0ZW0sIHJ1bGUsIHJ4KTtcXG4gICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICAgICBpZiAoaSA9PSBsaXN0Lmxlbmd0aCAtIDEpIHtcXG4gICAgICAgICAgICAgICAgICAgIGlkID0gXFxcImxhc3RpZF9cXFwiICsgcGFnZTtcXG4gICAgICAgICAgICAgICAgICAgIGNscyA9IFxcXCJsYXN0bWFya1xcXCI7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IGRlc2MsXFxuICAgICAgICAgICAgICAgICAgICBwaWNfdXJsOiBpbWcsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IChlbXB0eSA/IFxcXCJoaWtlcjovL2VtcHR5IyNcXFwiIDogJycpICsgdXJsLFxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogY29udGVudCxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBydWxlLmNvbF90eXBlLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWc6IGltZyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogaWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xzOiBjbHMsXFxuICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgaWYgKGkgPT0gbGlzdC5sZW5ndGggLSAxICYmIHNob3cpIHtcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJsaW5lXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogXFxcInBhZ2VsaW5lXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi4oCc4oCc4oCd4oCdPHNtYWxsPuWKoOi9veS4rS4uLjwvc21hbGw+XFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcXFwicGFnZW51bVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHVwZGF0ZUl0ZW0oXFxcInBhZ2VudW1cXFwiLCB7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9XFxcImdyZXlcXFwiPjxzbWFsbD7liLDlupXkuoY8L3NtYWxsPjwvZm9udD4nLFxcbiAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGlkOiBcXFwibGFzdFxcXCIsXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAobGlzdC5sZW5ndGggPT0gMCAmJiBwYWdlID09IDEpIHtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImxpbmVcXFwiLFxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9XFxcImdyZXlcXFwiPjxzbWFsbD7ml6DlhoXlrrk8L3NtYWxsPjwvZm9udD4nLFxcbiAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHt9LFxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKHRoaXMubmV4dFBhZ2UoKSkge1xcbiAgICAgICAgICAgIC8vbG9nKCd0Jyk7XFxuICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoJ3lpX2lzbmV4dCcsICd0Jyk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIC8vbG9nKCdmJyk7XFxuICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoJ3lpX2lzbmV4dCcsICdmJyk7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoYXV0bykge1xcbiAgICAgICAgICAgIC8vY3JlYXRlTmV4dFBhZ2UoKTtcXG4gICAgICAgICAgICBhdXRvUGFnZSgpO1xcbiAgICAgICAgfVxcbiAgICB9LFxcbn07XFxuXFxudmFyIGV4dE1ldGhvZCA9IHtcXG4gICAgVG9QYXJhbXM6IGZ1bmN0aW9uKCkge1xcbiAgICAgICAgdmFyIGpzb24gPSBhcmd1bWVudHNbMF07XFxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoanNvbilcXG4gICAgICAgICAgICAubWFwKChrZXkpID0+IGtleSArIFxcXCI9XFxcIiArIGpzb25ba2V5XSlcXG4gICAgICAgICAgICAuam9pbihcXFwiJlxcXCIpO1xcbiAgICB9LFxcbiAgICB1cmxQYXJzZTogZnVuY3Rpb24odSkge1xcbiAgICAgICAgdmFyIGRpY3QgPSB7fTtcXG4gICAgICAgIGRpY3QuU291cmNlID0gdTtcXG4gICAgICAgIGxldCBwYXJhbXMgPSAodXJsKSA9PiB7XFxuICAgICAgICAgICAgbGV0IHF1ZXJ5UGFyYW1zID0ge307XFxuICAgICAgICAgICAgbGV0IHJlZyA9IC8oW14/PSZdKyk9KFtePz0mXSspL2c7XFxuICAgICAgICAgICAgdXJsLnJlcGxhY2UocmVnLCBmdW5jdGlvbigpIHtcXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbXNbYXJndW1lbnRzWzFdXSA9IGFyZ3VtZW50c1syXTtcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICByZXR1cm4gcXVlcnlQYXJhbXM7XFxuICAgICAgICB9O1xcbiAgICAgICAgdmFyIGphdmFVcmwgPSBKYXZhSW1wb3J0ZXIoamF2YS5uZXQuVVJMKTtcXG4gICAgICAgIHdpdGgoamF2YVVybCkge1xcbiAgICAgICAgICAgIHZhciB1cmwgPSBuZXcgVVJMKHUpO1xcbiAgICAgICAgICAgIGRpY3QuUHJvdG9jb2wgPSB1cmwuZ2V0UHJvdG9jb2woKTtcXG4gICAgICAgICAgICBkaWN0Lkhvc3QgPSB1cmwuZ2V0SG9zdCgpO1xcbiAgICAgICAgICAgIGRpY3QuUG9ydCA9IHVybC5nZXRQb3J0KCk7XFxuICAgICAgICAgICAgZGljdC5GaWxlID0gdXJsLmdldEZpbGUoKTtcXG4gICAgICAgICAgICBkaWN0LlBhdGggPSB1cmwuZ2V0UGF0aCgpO1xcbiAgICAgICAgICAgIGRpY3QuUmVmID0gdXJsLmdldFJlZigpO1xcbiAgICAgICAgICAgIGRpY3QuSG9zdHMgPSBgJHtkaWN0LlByb3RvY29sfTovLyR7dXJsLmdldEhvc3QoKX1gO1xcbiAgICAgICAgfVxcbiAgICAgICAgZGljdC5QYXJhbXMgPSBwYXJhbXModSk7XFxuICAgICAgICByZXR1cm4gZGljdDtcXG4gICAgfSxcXG4gICAgaXNFcXVhbDogZnVuY3Rpb24oeCwgeSkge1xcbiAgICAgICAgY29uc3Qgb2sgPSBPYmplY3Qua2V5cyxcXG4gICAgICAgICAgICB0eCA9IHR5cGVvZiB4LFxcbiAgICAgICAgICAgIHR5ID0gdHlwZW9mIHk7XFxuICAgICAgICByZXR1cm4geCAmJiB5ICYmIHR4ID09PSBcXFwib2JqZWN0XFxcIiAmJiB0eCA9PT0gdHkgP1xcbiAgICAgICAgICAgIG9rKHgpLmxlbmd0aCA9PT0gb2soeSkubGVuZ3RoICYmXFxuICAgICAgICAgICAgb2soeCkuZXZlcnkoKGtleSkgPT4gdGhpcy5pc0VxdWFsKHhba2V5XSwgeVtrZXldKSkgOiB4ID09PSB5O1xcbiAgICB9LFxcbiAgICBmaW5kRGlmZmVyZW50SW5kZXg6IGZ1bmN0aW9uKHN0cjEsIHN0cjIpIHtcXG4gICAgICAgIGNvbnN0IGRpZmZDaGFycyA9IFtdO1xcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIyLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgaWYgKHN0cjFbaV0gIT09IHN0cjJbaV0pIHtcXG4gICAgICAgICAgICAgICAgZGlmZkNoYXJzLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGksXFxuICAgICAgICAgICAgICAgICAgICBzMTogc3RyMVtpXSxcXG4gICAgICAgICAgICAgICAgICAgIHMyOiBzdHIyW2ldLFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gZGlmZkNoYXJzO1xcbiAgICB9LFxcbiAgICByZXBsYWNlQ2hhckF0OiBmdW5jdGlvbihzdHIsIGluZGV4LCByZXBsYWNlbWVudCkge1xcbiAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBzdHIubGVuZ3RoKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHN0cjtcXG4gICAgICAgIH1cXG4gICAgICAgIC8vbG9nKGluZGV4KVxcbiAgICAgICAgY29uc3QgYXJyID0gc3RyLnNwbGl0KFxcXCJcXFwiKTtcXG4gICAgICAgIGFycltpbmRleF0gPSByZXBsYWNlbWVudDtcXG4gICAgICAgIHJldHVybiBhcnIuam9pbihcXFwiXFxcIik7XFxuICAgIH0sXFxuICAgIGdldE9iamVjdEtleXNEaWZmOiBmdW5jdGlvbihvYmoxLCBvYmoyKSB7XFxuICAgICAgICBjb25zdCBkaWZmZXJlbnRLZXlzID0gW107XFxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gb2JqMSkge1xcbiAgICAgICAgICAgIGlmICghb2JqMi5oYXNPd25Qcm9wZXJ0eShrZXkpIHx8IG9iajFba2V5XSAhPT0gb2JqMltrZXldKSB7XFxuICAgICAgICAgICAgICAgIGRpZmZlcmVudEtleXMucHVzaChrZXkpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIGZvciAobGV0IGtleSBpbiBvYmoyKSB7XFxuICAgICAgICAgICAgaWYgKCFvYmoxLmhhc093blByb3BlcnR5KGtleSkpIHtcXG4gICAgICAgICAgICAgICAgZGlmZmVyZW50S2V5cy5wdXNoKGtleSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIGRpZmZlcmVudEtleXM7XFxuICAgIH0sXFxuICAgIGdldE5leHRVcmw6IGZ1bmN0aW9uKHNvdXJjZSwgdGFyZ2V0LCBwYXJhbXMpIHtcXG4gICAgICAgIHZhciB1MSA9IHRoaXMudXJsUGFyc2Uoc291cmNlKTtcXG4gICAgICAgIHZhciB1MiA9IHRoaXMudXJsUGFyc2UodGFyZ2V0KTtcXG4gICAgICAgIHZhciBwYSA9IHVuZGVmaW5lZDtcXG4gICAgICAgIGlmICh0eXBlb2YgcGFyYW1zID09IFxcXCJvYmplY3RcXFwiKSB7XFxuICAgICAgICAgICAgcGEgPSBwYXJhbXMuaGFzT3duUHJvcGVydHkoXFxcIueJueW+gVxcXCIpID8gcGFyYW1zLueJueW+gSA6IHVuZGVmaW5lZDtcXG4gICAgICAgIH1cXG4gICAgICAgIHZhciBuZXh0dXJsID0gc291cmNlO1xcbiAgICAgICAgdmFyIGNhID0gT2JqZWN0LmtleXModTIuUGFyYW1zKS5sZW5ndGggPT0gMCA/IFxcXCJcXFwiIDogXFxcIj9cXFwiO1xcbiAgICAgICAgaWYgKHBhICE9IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICAgIHZhciBycyA9IFN0cmluZyh1Mi5QYXRoKS5yZXBsYWNlKG5ldyBSZWdFeHAocGEpLCBcXFwiJDFmeXBhZ2VcXFwiKTtcXG4gICAgICAgICAgICBuZXh0dXJsID0gdTIuSG9zdHMgKyBycyArIGNhICsgdGhpcy5Ub1BhcmFtcyh1Mi5QYXJhbXMpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBpZiAodGhpcy5pc0VxdWFsKHUxLlBhcmFtcywgdTIuUGFyYW1zKSkge1xcbiAgICAgICAgICAgICAgICBpZiAoZHRfZGVidWcpIHtcXG4gICAgICAgICAgICAgICAgICAgIGxvZyh1MS5QYXRoKTtcXG4gICAgICAgICAgICAgICAgICAgIGxvZyh1Mi5QYXRoKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB2YXIgZGYgPSB0aGlzLmZpbmREaWZmZXJlbnRJbmRleChTdHJpbmcodTEuUGF0aCksIFN0cmluZyh1Mi5QYXRoKSk7XFxuICAgICAgICAgICAgICAgIGlmIChkdF9kZWJ1Zykge1xcbiAgICAgICAgICAgICAgICAgICAgbG9nKGRmKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAoZGYubGVuZ3RoID09IDEpIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciByZSA9IGRmWzBdLmluZGV4O1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIGYgPSBkZi5maWx0ZXIoKHgpID0+IC9cXFxcZCsvLnRlc3QoeC5zMikpO1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlID0gZlswXS5pbmRleDtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB2YXIgZXEgPSB0aGlzLnJlcGxhY2VDaGFyQXQoU3RyaW5nKHUyLlBhdGgpLCByZSwgXFxcImZ5cGFnZVxcXCIpO1xcbiAgICAgICAgICAgICAgICBuZXh0dXJsID0gdTIuSG9zdHMgKyBlcSArIGNhICsgdGhpcy5Ub1BhcmFtcyh1Mi5QYXJhbXMpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHZhciBlcCA9IHRoaXMuZ2V0T2JqZWN0S2V5c0RpZmYodTEuUGFyYW1zLCB1Mi5QYXJhbXMpXFxuICAgICAgICAgICAgICAgIGlmIChlcC5sZW5ndGggPT0gMSkge1xcbiAgICAgICAgICAgICAgICAgICAgdTEuUGFyYW1zW2VwWzBdXSA9ICdmeXBhZ2UnXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBsb2coZXApO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHZhciBlcSA9IFN0cmluZyh1MS5QYXRoKS5yZXBsYWNlKC9cXFxcZCsvLCBcXFwiZnlwYWdlXFxcIik7XFxuICAgICAgICAgICAgICAgIG5leHR1cmwgPSB1MS5Ib3N0cyArIGVxICsgY2EgKyB0aGlzLlRvUGFyYW1zKHUxLlBhcmFtcyk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgLy9sb2coJ25leHQ6JytuZXh0dXJsKVxcbiAgICAgICAgcmV0dXJuIG5leHR1cmw7XFxuICAgIH0sXFxufTtcXG5cXG5mdW5jdGlvbiBnZXRUcnVlbGluayhtYXJrLCB1cmwsIHBhZ2UpIHtcXG4gICAgdmFyIHAgPSBnZXRNeVZhcihtYXJrLCB1cmwpLnJlcGxhY2UoXFxcImZ5cGFnZVxcXCIsIHBhZ2UpO1xcbiAgICBpZiAocGFnZSA9PSAxKSB7XFxuICAgICAgICByZXR1cm4gZ2V0TXlWYXIoXFxcInlpX2ZpcnN0cGFnZVxcXCIsIHApO1xcbiAgICB9IGVsc2UgaWYgKHAgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgIHJldHVybiBwO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgcmV0dXJuIHVybDtcXG4gICAgfVxcbn1cXG4vL+aehOW7ulxcbmZ1bmN0aW9uIGNyZWF0ZU5leHRQYWdlKCkge1xcbiAgICBsZXQgc3RhcnRudW0gPSAxO1xcbiAgICB2YXIgb2JqID0gYXJndW1lbnRzWzBdO1xcbiAgICBpZiAodHJ1ZV91cmwgIT0gZ2V0TXlWYXIoXFxcInlpX3BhZ2V1cmxcXFwiLCBcXFwiXFxcIikpIHtcXG4gICAgICAgIGNsZWFyTXlWYXIoXFxcInlpX3BhZ2V1cmxcXFwiKTtcXG4gICAgfVxcbiAgICBpZiAocGFnZSA9PSBzdGFydG51bSAmJiBnZXRNeVZhcihcXFwieWlfcGFnZXVybFxcXCIpID09IFxcXCJcXFwiKSB7XFxuICAgICAgICBwdXRNeVZhcihcXFwieWlfZmlyc3RwYWdlXFxcIiwgdHJ1ZV91cmwpO1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICB2YXIgbmV4dCA9IGV2YWwo5LiL5LiA6aG1KTtcXG4gICAgICAgICAgICAvL2xvZyhcXFwibmV4dFxcXCIpO1xcbiAgICAgICAgICAgIC8vbG9nKG5leHQpO1xcbiAgICAgICAgfSBjYXRjaCB7XFxuICAgICAgICAgICAgbG9nKFxcXCLlj6/og73kuI3lrZjlnKjkuIvkuIDpobXmiJbogIXkuIvkuIDpobXlrprkvY3mnInpl67pophcXFwiKTtcXG4gICAgICAgICAgICBuZXh0ID0gXFxcIlxcXCI7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAobmV4dCAhPSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgIHZhciBueHVybCA9IGV4dE1ldGhvZC5nZXROZXh0VXJsKHRydWVfdXJsLCBuZXh0LCBvYmopO1xcbiAgICAgICAgICAgIC8vbG9nKFxcXCJueHVybDpcXFwiICsgbnh1cmwpO1xcbiAgICAgICAgICAgIHB1dE15VmFyKOeKtuaAgSwgbnh1cmwpO1xcbiAgICAgICAgICAgIHB1dE15VmFyKFxcXCJ5aV9wYWdldXJsXFxcIiwgbnh1cmwpO1xcbiAgICAgICAgfVxcbiAgICB9XFxufVxcblxcbmZ1bmN0aW9uIGF1dG9QYWdlKCkge1xcbiAgICBpZiAocGFnZSA9PSAxKSB7XFxuICAgICAgICBwdXRNeVZhcihcXFwieWlfZmlyc3RwYWdlXFxcIiwgdHJ1ZV91cmwpO1xcbiAgICB9XFxuICAgIHRyeSB7XFxuICAgICAgICB2YXIgbmV4dCA9IGV2YWwo5LiL5LiA6aG1KTtcXG4gICAgICAgIC8vbG9nKFxcXCJuZXh0XFxcIik7XFxuICAgICAgICAvL2xvZygnbmV4dDonK25leHQpO1xcbiAgICB9IGNhdGNoIHtcXG4gICAgICAgIGxvZyhcXFwi5Y+v6IO95LiN5a2Y5Zyo5LiL5LiA6aG15oiW6ICF5LiL5LiA6aG15a6a5L2N5pyJ6Zeu6aKYXFxcIik7XFxuICAgICAgICBuZXh0ID0gXFxcIlxcXCI7XFxuICAgIH1cXG4gICAgaWYgKG5leHQgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgIHB1dE15VmFyKOeKtuaAgSwgbmV4dCk7XFxuICAgIH1cXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLkuoznuqdcIixcInBhdGhcIjpcIuS6jOe6p1wiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG5NWV9VUkw9TVlfVVJMLnJlcGxhY2UoJ2hpa2VyOi8vZW1wdHkjIycsJycpLnJlcGxhY2UoJyNpbW1lcnNpdmVUaGVtZSMjYXV0b0NhY2hlIycsJycpO1xcbmNvbnN0IGhvc3QgPSBjb25maWcuaG9zdFxcbnZhciBodG1sID0gZmV0Y2hQQyhNWV9VUkwpO1xcbmV2YWwoSlNPTi5wYXJzZShmZXRjaChcXFwiaGlrZXI6Ly9wYWdlL2ppYW5cXFwiKSkucnVsZSk7XFxudmFyIGltZyA9IE1ZX1BBUkFNUy5pbWc7XFxudmFyIHRpdGxlID0gc21hbGwoc3AocGRmaChodG1sLCAnaDImJlRleHQnKSksJ2Y3ZThhYScpO1xcbnZhciBkZXNjID0gc21hbGwoc3AocGRmaChodG1sLCAnbGFiZWwmJlRleHQnKSsnXFxcXG4nK3BkZmgoaHRtbCwgJ2xhYmVsLDEmJlRleHQnKSksJ2Y4ZThjMScpO1xcbnZhciB0YWdzID0gcGRmYShodG1sLCAnYm9keSYmLmFkZHRhZ3MmJmFbaHJlZl0nKTtcXG52YXIgYXV0aG9yID0gcGRmaChodG1sLFxcXCIudXd1aW5mbyYmYSYmVGV4dFxcXCIpXFxudmFyIGF1dGhvcl9pbWcgPSBwZChodG1sLFxcXCIudXd1aW5mbyYmaW1nJiZzcmNcXFwiKVxcbnZhciBhdXRob3JfdXJsID0gcGQoaHRtbCxcXFwiLnV3dWluZm8mJmEmJmhyZWZcXFwiKS5yZXBsYWNlKCdwPTEnLCdwPWZ5cGFnZScpXFxuc2V0UGFnZVRpdGxlKHNwKHBkZmgoaHRtbCwgJ2gyJiZUZXh0JykpKVxcbmQucHVzaCh7XFxuICAgIGltZzogaW1nLFxcbiAgICB0aXRsZTogdGl0bGUsXFxuICAgIGRlc2M6IGRlc2MsXFxuICAgIHVybDogTVlfVVJMLFxcbiAgICBjb2xfdHlwZTogJ21vdmllXzFfdmVydGljYWxfcGljX2JsdXInLFxcbmV4dHJhOiB7XFxuICAgICAgICAgICAgZ3JhZGllbnQ6IHRydWVcXG4gICAgICAgIH1cXG59LHtcXG4gICAgdGl0bGU6YXV0aG9yLFxcbiAgICBwaWNfdXJsOmF1dGhvcl9pbWcsXFxuICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9zZWFyY2g/cGFnZT1meXBhZ2Ujbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjXFxcIixcXG4gICAgY29sX3R5cGU6IFxcXCJpY29uXzJfcm91bmRcXFwiLFxcbiAgICBleHRyYTp7XFxuICAgICAgICB1cmw6IGF1dGhvcl91cmwsXFxuICAgICAgICBhdXRob3I6IGF1dGhvclxcbiAgICB9XFxufSx7XFxudGl0bGU6IFxcXCLmoIfnrb5cXFwiLFxcbnBpY191cmw6IGhvc3QrXFxcInRoZW1lcy9tby9pbWFnZXMvaWNvbl9oMl81LnBuZ1xcXCIsXFxudXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKCh0YWdzLGhvc3QpID0+IHtcXG4gICAgICBjb25zdCBoaWtlclBvcCA9IHJlcXVpcmUoXFxcImh0dHBzOi8vaGlrZXJmYW5zLmNvbS93ZWlzeXIvanMvaGlrZXJQb3AuanNcXFwiKTtcXG4gICAgICBsZXQg5qCH562+ID0gdGFncy5tYXAoeCA9PiB7XFxuICAgICAgICAgIGxldCB0aXRsZSA9IHBkZmgoeCwnYSYmVGV4dCcpO1xcbiAgICAgICAgICBsZXQgdXJsID0gcGQoeCwnYSYmaHJlZicsaG9zdCkucmVwbGFjZShcXFwiaW5kZXhcXFwiLCBcXFwiaW5kZXgtcGFnZS1meXBhZ2VcXFwiKVxcbiAgICAgICAgICAgICAgcmV0dXJuIHsgICAgICAgIFxcbiAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLCAgICAgICAgXFxuICAgICAgICAgICAgICBpY29uOiBob3N0K1xcXCJ0aGVtZXMvbW8vaW1hZ2VzL2ljb25faDJfNS5wbmdcXFwiLCAgICAgICAgXFxuICAgICAgICAgICAgICB1cmw6IHVybCwgICAgfX0pOyAgICAgICAgICAgaGlrZXJQb3Auc2VsZWN0Q2VudGVySWNvbih7XFxuICAgICAgICAgICAgICBpY29uTGlzdDog5qCH562+LCAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgdGl0bGU6IFxcXCLmoIfnrb5cXFwiLCAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgY29sdW1uczogMiwgICAgICAgICAgICBcXG4gICAgICAgICAgICAgIGNsaWNrKGEpIHsgICAgICAgIFxcbiAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL3BhZ2Uvc2VhcmNoP3VybD1cXFwiK2ErXFxcIiNub0hpc3RvcnkjXFxcIjsgICAgICAgICAgICB9ICAgICAgICB9KTsgICAgICAgIFxcbiAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjsgICAgfSx0YWdzLGhvc3QpLFxcbmNvbF90eXBlOiBcXFwiaWNvbl8yX3JvdW5kXFxcIixcXG59KVxcbmV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL2p4Jywge30pKS5ydWxlKTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogc3AocGRmaChodG1sLCAnaDImJlRleHQnKSksXFxuICAgIHVybDogTVlfVVJMK2xhenksXFxuICAgIGNvbF90eXBlOlxcXCJ0ZXh0XzFcXFwiXFxufSlcXG52YXIgUHJldmlldyA9IHBkZmEoaHRtbCwgXFxcImJvZHkmJi5nYWxsYXJ5X2l0ZW1cXFwiKVxcbnZhciBwcmV2aWV3ID0gZ2V0SXRlbSgncHJldmlldycsIFxcXCIwXFxcIik7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6ICgn4oCc4oCc4oCd4oCd6aKE6KeI5ryr55S7JyArIChwcmV2aWV3ID09IFxcXCIwXFxcIiA/IFxcXCJb5YWzXVxcXCIuZm9udGNvbG9yKFxcXCJyZWRcXFwiKSA6IFxcXCJb5byAXVxcXCIuZm9udGNvbG9yKFxcXCJncmVlblxcXCIpKSkuc21hbGwoKSxcXG4gICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJyxcXG4gICAgdXJsOiAkKCcnKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICB2YXIgaSA9IGdldEl0ZW0oJ3ByZXZpZXcnLCBcXFwiMFxcXCIpO1xcbiAgICAgICAgc2V0SXRlbSgncHJldmlldycsIGkgPT0gXFxcIjBcXFwiID8gXFxcIjFcXFwiIDogXFxcIjBcXFwiKTtcXG4gICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgIH0pLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgbGluZVZpc2libGU6IGZhbHNlXFxuICAgIH1cXG59KVxcblxcbmlmIChwcmV2aWV3ID09IFxcXCIxXFxcIikge1xcblByZXZpZXcubWFwKHggPT4ge1xcbiAgICBsZXQgaW1nID0gcGQoeCwnaW1nJiZzcmMnKTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHBpYzogaW1nK1xcXCIjLmpwZ0BSZWZlcmVyPVxcXCIsXFxuICAgICAgICB1cmw6IGltZytcXFwiIy5qcGdcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJwaWNfM1xcXCIsXFxuICAgIH0pICAgXFxuICAgIH0pXFxuICAgIH1cXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuacgOaWsFwiLFwicGF0aFwiOlwienhcIixcInJ1bGVcIjpcImpzOlxcbmxldCBkID0gW107XFxuZXZhbChKU09OLnBhcnNlKGZldGNoKFxcXCJoaWtlcjovL3BhZ2UvamlhblxcXCIpKS5ydWxlKTtcXG52YXIgaG9zdCA9IGNvbmZpZy5ob3N0XFxudmFyIGh0bWwgPSBnZXRSZXNDb2RlKCk7XFxuY29uc3QgcGFnZSA9IE1ZX1BBR0U7XFxudmFyIGl0ZW0gPSBwZGZhKGh0bWwsICcuY29sXzImJmxpJyk7XFxyXFxuICAgICAgICAgICAgaXRlbS5mb3JFYWNoKChkYXRhcykgPT4ge1xcclxcbiAgICAgICAgICAgICAgICBkLnB1c2goeyBcXHJcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBzcChwZGZoKGRhdGFzLCAnLnR4dEEmJlRleHQnKSksXFxyXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBzcChwZGZoKGRhdGFzLCAnLmluZm8mJlRleHQnKSksXFxyXFxuICAgICAgICAgICAgICAgICAgICBwaWNfdXJsOiBwZChkYXRhcywgJ2ltZyYmc3JjJyxob3N0KSxcXHJcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwibW92aWVfM19tYXJxdWVlXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgdXJsOiBwZChkYXRhcywgJ2EmJmhyZWYnLGhvc3QpKycjaW1tZXJzaXZlVGhlbWUjI2F1dG9DYWNoZSNAcnVsZT1qczokLnJlcXVpcmUoXFxcIuS6jOe6p1xcXCIpJyxcXG5leHRyYTogeyAgICBpbWc6IHBkKGRhdGFzLCAnaW1nJiZzcmMnLGhvc3QpLFxcbiAgICAgICAgICAgICAgICB9LFxcbn0pO1xcbn0pXFxuc2V0UmVzdWx0KGQpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLmkJzntKJcIixcInBhdGhcIjpcInNlYXJjaFwiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG5ldmFsKEpTT04ucGFyc2UoZmV0Y2goXFxcImhpa2VyOi8vcGFnZS9qaWFuXFxcIikpLnJ1bGUpO1xcbnZhciBob3N0ID0gY29uZmlnLmhvc3RcXG5jb25zdCBwYWdlID0gTVlfUEFHRTtcXG52YXIgVGl0bGUgPSBnZXRQYXJhbSgndGl0bGUnKTtcXG52YXIgVGFnID0gcGRmaChmZXRjaFBDKE1ZX1VSTCksXFxcIi5icmVhZCYmVGV4dFxcXCIpLnNwbGl0KCfvvJonKVsxXVxcbnZhciBBdXRob3IgPSBNWV9QQVJBTVMuYXV0aG9yXFxudmFyIEhlYWRlcnMgPSBUaXRsZT9cXFwi5pCc57SiLS1cXFwiK1RpdGxlOkF1dGhvcj9cXFwi5LiK5LygLS1cXFwiK0F1dGhvcjpcXFwi5qCH562+LS1cXFwiK1RhZ1xcbnNldFBhZ2VUaXRsZShIZWFkZXJzKVxcbnZhciBVUkwgPSBUaXRsZT9ob3N0K1xcXCJzZWFyY2gvP3E9XFxcIitlbmNvZGVVUklDb21wb25lbnQoVGl0bGUpK1xcXCImZj1fYWxsJnM9Y3JlYXRlX3RpbWVfREVTQyZzeW49eWVzJnA9XFxcIitwYWdlOkF1dGhvcj9NWV9QQVJBTVMudXJsLnJlcGxhY2UoJ2Z5cGFnZScsJycpK3BhZ2U6TVlfVVJMXFxubG9nKFVSTClcXG4vL3ZhciBodG1sID0gZ2V0UmVzQ29kZSgpO1xcbi8qXFxubGV0IG5vdyA9IGdldEl0ZW0oJ25vdycsICfliJvlu7rml7bpl7QnKTtcXG5sZXQgYXJyID0gW1xcXCLliJvlu7rml7bpl7RcXFwiLFxcXCLkuIrkvKDml7bpl7RcXFwiLFxcXCLlm77niYfmlbBcXFwiXTtcXG5pZihNWV9QQUdFPT0xKXtcXG5mb3IgKGxldCBpdCBvZiBhcnIpIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IG5vdyA9PSBpdCA/ICfigJzigJzigJ3igJ0nICsgaXQuZm9udGNvbG9yKCdyZWQnKSA6IGl0LFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChpdCkgPT4ge1xcbiAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXCJub3dcXFwiLCBpdCk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgfSwgaXQpXFxuICAgICAgICB9KVxcbiAgICB9XFxufVxcbmlmIChub3cgPT0gJ+WIm+W7uuaXtumXtCcpIHtcXG52YXIgaHRtbCA9IGZldGNoUEMoVVJMKTtcXG59ZWxzZSBpZiAobm93ID09ICfkuIrkvKDml7bpl7QnKSB7XFxudmFyIGh0bWwgPSBmZXRjaFBDKFVSTC5yZXBsYWNlKCdjdF9hc2MnLCd1dF9kZXNjJykpO1xcbn1lbHNlIGlmIChub3cgPT0gJ+WbvueJh+aVsCcpIHtcXG52YXIgaHRtbCA9IGZldGNoUEMoVVJMLnJlcGxhY2UoJ2N0X2FzYycsJ3BfZGVzYycpKTtcXG59XFxuKi9cXG52YXIgaHRtbCA9IGZldGNoUEMoVVJMKVxcbmNvbnN0IGxpc3QgPSBwZGZhKGh0bWwsICdib2R5JiYuZ2FsbGFyeV9pdGVtJyk7XFxubGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IHNwKHBkZmgoaXRlbSwgJ2ltZyYmYWx0JykpLFxcbiAgICAgICAgZGVzYzogc3AocGRmaChpdGVtLCAnLmluZm9fY29sJiZUZXh0JykpLFxcbiAgICAgICAgaW1nOiBwZChpdGVtLCAnaW1nJiZzcmMnLGhvc3QpLFxcbiAgICAgICAgdXJsOiBwZChpdGVtLCAnYSYmaHJlZicsaG9zdCkrJyNpbW1lcnNpdmVUaGVtZSMjYXV0b0NhY2hlI0BydWxlPWpzOiQucmVxdWlyZShcXFwi5LqM57qnXFxcIiknLFxcbiAgICAgICAgZXh0cmE6IHtpbWc6IHBkKGl0ZW0sICdpbWcmJnNyYycsaG9zdCl9LFxcbiAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8zJyxcXG4gICAgICAgICAgICB9KVxcbn0pO1xcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6Kej5p6QXCIsXCJwYXRoXCI6XCJqeFwiLFwicnVsZVwiOlwidmFyIGxhenkgPSAkKCcnKS5sYXp5UnVsZSgoTVlfSE9NRSkgPT4ge1xcbnZhciBsaXN0ID0gZmV0Y2goaW5wdXQucmVwbGFjZSgnaW5kZXgnLCd3ZWJwJykpLm1hdGNoKC92YXIgaW1nbGlzdCA9IChcXFxcWy4qP1xcXFxdKTsvcylbMV1cXG52YXIgaW1nbGlzdCA9IGxpc3QucmVwbGFjZSgvZmFzdF9pbWdfaG9zdFxcXFwrL2csICcnKSAucmVwbGFjZSgvKFt7LF0pKFxcXFxzKikoW0EtWmEtejAtOV9dKz8pXFxcXHMqOi9nLCAnJDFcXFwiJDNcXFwiOicpIC5yZXBsYWNlKC86XFxcXHMqKFteXFxcIl0rPykoLHxdKS9nLCAnOiBcXFwiJDFcXFwiJDInKS5yZXBsYWNlKC9cXFxcXFxcXFxcXFxcXFwiL2csICdcXFwiJylcXG52YXIgcGljcyA9IEpTT04ucGFyc2UoaW1nbGlzdCkubWFwKGZ1bmN0aW9uKGl0ZW0pIHtcXG4gICAgdmFyIHBhdGggPSBpdGVtLnVybFxcbiAgICBpZiAocGF0aC5zdGFydHNXaXRoKCdodHRwJykgfHwgcGF0aC5zdGFydHNXaXRoKCdodHRwcycpKSB7XFxuICAgICAgcmV0dXJuIHBhdGg7XFxuICAgIH1cXG4gICAgaWYgKHBhdGguc3RhcnRzV2l0aCgnLy8nKSkge1xcbiAgICAgIHJldHVybiAnaHR0cHM6JyArIHBhdGg7XFxuICAgIH1cXG4gICAgcmV0dXJuIE1ZX0hPTUUgKyBwYXRoO1xcbn0pO1xcbnJldHVybiBcXFwicGljczovL1xcXCIgKyBwaWNzLmpvaW4oXFxcIiYmXFxcIik7XFxufSxNWV9IT01FKTtcIn1dIiwiaWNvbiI6Imh0dHBzOi8vaS41MjExMi5jb20vaWNvbi9qcGcvMjU2LzIwMTkwMzIyLzMzNjM3LzE2Mzk4NTQuanBnIiwicHJveHkiOiIifQ==
Add Comment
Please, Sign In to add comment