LS0gJElkOiB0ZXN0ZXMvc3RyaW5ncy5sdWEgJAotLSBTZWUgQ29weXJpZ2h0IE5vdGljZSBpbiBmaWxlIGFsbC5sdWEKCnByaW50KCd0ZXN0aW5nIHN0cmluZ3MgYW5kIHN0cmluZyBsaWJyYXJ5JykKCmxvY2FsIG1heGkgPGNvbnN0PiA9IG1hdGgubWF4aW50ZWdlcgpsb2NhbCBtaW5pIDxjb25zdD4gPSBtYXRoLm1pbmludGVnZXIKCgpsb2NhbCBmdW5jdGlvbiBjaGVja2Vycm9yIChtc2csIGYsIC4uLikKICBsb2NhbCBzLCBlcnIgPSBwY2FsbChmLCAuLi4pCiAgYXNzZXJ0KG5vdCBzIGFuZCBzdHJpbmcuZmluZChlcnIsIG1zZykpCmVuZAoKCi0tIHRlc3Rpbmcgc3RyaW5nIGNvbXBhcmlzb25zCmFzc2VydCgnYWxvJyA8ICdhbG8xJykKYXNzZXJ0KCcnIDwgJ2EnKQphc3NlcnQoJ2Fsb1wwYWxvJyA8ICdhbG9cMGInKQphc3NlcnQoJ2Fsb1wwYWxvXDBcMCcgPiAnYWxvXDBhbG9cMCcpCmFzc2VydCgnYWxvJyA8ICdhbG9cMCcpCmFzc2VydCgnYWxvXDAnID4gJ2FsbycpCmFzc2VydCgnXDAnIDwgJ1wxJykKYXNzZXJ0KCdcMFwwJyA8ICdcMFwxJykKYXNzZXJ0KCdcMVwwYVwwYScgPD0gJ1wxXDBhXDBhJykKYXNzZXJ0KG5vdCAoJ1wxXDBhXDBiJyA8PSAnXDFcMGFcMGEnKSkKYXNzZXJ0KCdcMFwwXDAnIDwgJ1wwXDBcMFwwJykKYXNzZXJ0KG5vdCgnXDBcMFwwXDAnIDwgJ1wwXDBcMCcpKQphc3NlcnQoJ1wwXDBcMCcgPD0gJ1wwXDBcMFwwJykKYXNzZXJ0KG5vdCgnXDBcMFwwXDAnIDw9ICdcMFwwXDAnKSkKYXNzZXJ0KCdcMFwwXDAnIDw9ICdcMFwwXDAnKQphc3NlcnQoJ1wwXDBcMCcgPj0gJ1wwXDBcMCcpCmFzc2VydChub3QgKCdcMFwwYicgPCAnXDBcMGFcMCcpKQoKLS0gdGVzdGluZyBzdHJpbmcuc3ViCmFzc2VydChzdHJpbmcuc3ViKCIxMjM0NTY3ODkiLDIsNCkgPT0gIjIzNCIpCmFzc2VydChzdHJpbmcuc3ViKCIxMjM0NTY3ODkiLDcpID09ICI3ODkiKQphc3NlcnQoc3RyaW5nLnN1YigiMTIzNDU2Nzg5Iiw3LDYpID09ICIiKQphc3NlcnQoc3RyaW5nLnN1YigiMTIzNDU2Nzg5Iiw3LDcpID09ICI3IikKYXNzZXJ0KHN0cmluZy5zdWIoIjEyMzQ1Njc4OSIsMCwwKSA9PSAiIikKYXNzZXJ0KHN0cmluZy5zdWIoIjEyMzQ1Njc4OSIsLTEwLDEwKSA9PSAiMTIzNDU2Nzg5IikKYXNzZXJ0KHN0cmluZy5zdWIoIjEyMzQ1Njc4OSIsMSw5KSA9PSAiMTIzNDU2Nzg5IikKYXNzZXJ0KHN0cmluZy5zdWIoIjEyMzQ1Njc4OSIsLTEwLC0yMCkgPT0gIiIpCmFzc2VydChzdHJpbmcuc3ViKCIxMjM0NTY3ODkiLC0xKSA9PSAiOSIpCmFzc2VydChzdHJpbmcuc3ViKCIxMjM0NTY3ODkiLC00KSA9PSAiNjc4OSIpCmFzc2VydChzdHJpbmcuc3ViKCIxMjM0NTY3ODkiLC02LCAtNCkgPT0gIjQ1NiIpCmFzc2VydChzdHJpbmcuc3ViKCIxMjM0NTY3ODkiLCBtaW5pLCAtNCkgPT0gIjEyMzQ1NiIpCmFzc2VydChzdHJpbmcuc3ViKCIxMjM0NTY3ODkiLCBtaW5pLCBtYXhpKSA9PSAiMTIzNDU2Nzg5IikKYXNzZXJ0KHN0cmluZy5zdWIoIjEyMzQ1Njc4OSIsIG1pbmksIG1pbmkpID09ICIiKQphc3NlcnQoc3RyaW5nLnN1YigiXDAwMDEyMzQ1Njc4OSIsMyw1KSA9PSAiMjM0IikKYXNzZXJ0KCgiXDAwMDEyMzQ1Njc4OSIpOnN1Yig4KSA9PSAiNzg5IikKCi0tIHRlc3Rpbmcgc3RyaW5nLmZpbmQKYXNzZXJ0KHN0cmluZy5maW5kKCIxMjM0NTY3ODkiLCAiMzQ1IikgPT0gMykKYSxiID0gc3RyaW5nLmZpbmQoIjEyMzQ1Njc4OSIsICIzNDUiKQphc3NlcnQoc3RyaW5nLnN1YigiMTIzNDU2Nzg5IiwgYSwgYikgPT0gIjM0NSIpCmFzc2VydChzdHJpbmcuZmluZCgiMTIzNDU2Nzg5MDEyMzQ1Njc4OSIsICIzNDUiLCAzKSA9PSAzKQphc3NlcnQoc3RyaW5nLmZpbmQoIjEyMzQ1Njc4OTAxMjM0NTY3ODkiLCAiMzQ1IiwgNCkgPT0gMTMpCmFzc2VydChub3Qgc3RyaW5nLmZpbmQoIjEyMzQ1Njc4OTAxMjM0NTY3ODkiLCAiMzQ2IiwgNCkpCmFzc2VydChzdHJpbmcuZmluZCgiMTIzNDU2Nzg5MDEyMzQ1Njc4OSIsICIuNDUiLCAtOSkgPT0gMTMpCmFzc2VydChub3Qgc3RyaW5nLmZpbmQoImFiY2RlZmciLCAiXDAiLCA1LCAxKSkKYXNzZXJ0KHN0cmluZy5maW5kKCIiLCAiIikgPT0gMSkKYXNzZXJ0KHN0cmluZy5maW5kKCIiLCAiIiwgMSkgPT0gMSkKYXNzZXJ0KG5vdCBzdHJpbmcuZmluZCgiIiwgIiIsIDIpKQphc3NlcnQobm90IHN0cmluZy5maW5kKCcnLCAnYWFhJywgMSkpCmFzc2VydCgoJ2FsbyguKWFsbycpOmZpbmQoJyguKScsIDEsIDEpID09IDQpCgphc3NlcnQoc3RyaW5nLmxlbigiIikgPT0gMCkKYXNzZXJ0KHN0cmluZy5sZW4oIlwwXDBcMCIpID09IDMpCmFzc2VydChzdHJpbmcubGVuKCIxMjM0NTY3ODkwIikgPT0gMTApCgphc3NlcnQoIyIiID09IDApCmFzc2VydCgjIlwwXDBcMCIgPT0gMykKYXNzZXJ0KCMiMTIzNDU2Nzg5MCIgPT0gMTApCgotLSB0ZXN0aW5nIHN0cmluZy5ieXRlL3N0cmluZy5jaGFyCmFzc2VydChzdHJpbmcuYnl0ZSgiYSIpID09IDk3KQphc3NlcnQoc3RyaW5nLmJ5dGUoIlx4ZTQiKSA+IDEyNykKYXNzZXJ0KHN0cmluZy5ieXRlKHN0cmluZy5jaGFyKDI1NSkpID09IDI1NSkKYXNzZXJ0KHN0cmluZy5ieXRlKHN0cmluZy5jaGFyKDApKSA9PSAwKQphc3NlcnQoc3RyaW5nLmJ5dGUoIlwwIikgPT0gMCkKYXNzZXJ0KHN0cmluZy5ieXRlKCJcMFwwYWxvXDB4IiwgLTEpID09IHN0cmluZy5ieXRlKCd4JykpCmFzc2VydChzdHJpbmcuYnl0ZSgiYmEiLCAyKSA9PSA5NykKYXNzZXJ0KHN0cmluZy5ieXRlKCJcblxuIiwgMiwgLTEpID09IDEwKQphc3NlcnQoc3RyaW5nLmJ5dGUoIlxuXG4iLCAyLCAyKSA9PSAxMCkKYXNzZXJ0KHN0cmluZy5ieXRlKCIiKSA9PSBuaWwpCmFzc2VydChzdHJpbmcuYnl0ZSgiaGkiLCAtMykgPT0gbmlsKQphc3NlcnQoc3RyaW5nLmJ5dGUoImhpIiwgMykgPT0gbmlsKQphc3NlcnQoc3RyaW5nLmJ5dGUoImhpIiwgOSwgMTApID09IG5pbCkKYXNzZXJ0KHN0cmluZy5ieXRlKCJoaSIsIDIsIDEpID09IG5pbCkKYXNzZXJ0KHN0cmluZy5jaGFyKCkgPT0gIiIpCmFzc2VydChzdHJpbmcuY2hhcigwLCAyNTUsIDApID09ICJcMFwyNTVcMCIpCmFzc2VydChzdHJpbmcuY2hhcigwLCBzdHJpbmcuYnl0ZSgiXHhlNCIpLCAwKSA9PSAiXDBceGU0XDAiKQphc3NlcnQoc3RyaW5nLmNoYXIoc3RyaW5nLmJ5dGUoIlx4ZTRsXDDzdSIsIDEsIC0xKSkgPT0gIlx4ZTRsXDDzdSIpCmFzc2VydChzdHJpbmcuY2hhcihzdHJpbmcuYnl0ZSgiXHhlNGxcMPN1IiwgMSwgMCkpID09ICIiKQphc3NlcnQoc3RyaW5nLmNoYXIoc3RyaW5nLmJ5dGUoIlx4ZTRsXDDzdSIsIC0xMCwgMTAwKSkgPT0gIlx4ZTRsXDDzdSIpCgpjaGVja2Vycm9yKCJvdXQgb2YgcmFuZ2UiLCBzdHJpbmcuY2hhciwgMjU2KQpjaGVja2Vycm9yKCJvdXQgb2YgcmFuZ2UiLCBzdHJpbmcuY2hhciwgLTEpCmNoZWNrZXJyb3IoIm91dCBvZiByYW5nZSIsIHN0cmluZy5jaGFyLCBtYXRoLm1heGludGVnZXIpCmNoZWNrZXJyb3IoIm91dCBvZiByYW5nZSIsIHN0cmluZy5jaGFyLCBtYXRoLm1pbmludGVnZXIpCgphc3NlcnQoc3RyaW5nLnVwcGVyKCJhYlwwYyIpID09ICJBQlwwQyIpCmFzc2VydChzdHJpbmcubG93ZXIoIlwwQUJDYyUkIikgPT0gIlwwYWJjYyUkIikKYXNzZXJ0KHN0cmluZy5yZXAoJ3Rlc3RlJywgMCkgPT0gJycpCmFzc2VydChzdHJpbmcucmVwKCd06XNcMDB06icsIDIpID09ICd06XNcMHTqdOlzXDAwMHTqJykKYXNzZXJ0KHN0cmluZy5yZXAoJycsIDEwKSA9PSAnJykKCmlmIHN0cmluZy5wYWNrc2l6ZSgiaSIpID09IDQgdGhlbgogIC0tIHJlc3VsdCBsZW5ndGggd291bGQgYmUgMl4zMSAoaW50IG92ZXJmbG93KQogIGNoZWNrZXJyb3IoInRvbyBsYXJnZSIsIHN0cmluZy5yZXAsICdhYScsICgxIDw8IDMwKSkKICBjaGVja2Vycm9yKCJ0b28gbGFyZ2UiLCBzdHJpbmcucmVwLCAnYScsICgxIDw8IDMwKSwgJywnKQplbmQKCi0tIHJlcGV0aXRpb25zIHdpdGggc2VwYXJhdG9yCmFzc2VydChzdHJpbmcucmVwKCd0ZXN0ZScsIDAsICd4dXh1JykgPT0gJycpCmFzc2VydChzdHJpbmcucmVwKCd0ZXN0ZScsIDEsICd4dXh1JykgPT0gJ3Rlc3RlJykKYXNzZXJ0KHN0cmluZy5yZXAoJ1wxXDBcMScsIDIsICdcMFwwJykgPT0gJ1wxXDBcMVwwXDBcMVwwXDEnKQphc3NlcnQoc3RyaW5nLnJlcCgnJywgMTAsICcuJykgPT0gc3RyaW5nLnJlcCgnLicsIDkpKQphc3NlcnQobm90IHBjYWxsKHN0cmluZy5yZXAsICJhYSIsIG1heGkgLy8gMiArIDEwKSkKYXNzZXJ0KG5vdCBwY2FsbChzdHJpbmcucmVwLCAiIiwgbWF4aSAvLyAyICsgMTAsICJhYSIpKQoKYXNzZXJ0KHN0cmluZy5yZXZlcnNlIiIgPT0gIiIpCmFzc2VydChzdHJpbmcucmV2ZXJzZSJcMFwxXDJcMyIgPT0gIlwzXDJcMVwwIikKYXNzZXJ0KHN0cmluZy5yZXZlcnNlIlwwMDAxMjM0IiA9PSAiNDMyMVwwIikKCmZvciBpPTAsMzAgZG8gYXNzZXJ0KHN0cmluZy5sZW4oc3RyaW5nLnJlcCgnYScsIGkpKSA9PSBpKSBlbmQKCmFzc2VydCh0eXBlKHRvc3RyaW5nKG5pbCkpID09ICdzdHJpbmcnKQphc3NlcnQodHlwZSh0b3N0cmluZygxMikpID09ICdzdHJpbmcnKQphc3NlcnQoc3RyaW5nLmZpbmQodG9zdHJpbmd7fSwgJ3RhYmxlOicpKQphc3NlcnQoc3RyaW5nLmZpbmQodG9zdHJpbmcocHJpbnQpLCAnZnVuY3Rpb246JykpCmFzc2VydCgjdG9zdHJpbmcoJ1wwJykgPT0gMSkKYXNzZXJ0KHRvc3RyaW5nKHRydWUpID09ICJ0cnVlIikKYXNzZXJ0KHRvc3RyaW5nKGZhbHNlKSA9PSAiZmFsc2UiKQphc3NlcnQodG9zdHJpbmcoLTEyMDMpID09ICItMTIwMyIpCmFzc2VydCh0b3N0cmluZygxMjAzLjEyNSkgPT0gIjEyMDMuMTI1IikKYXNzZXJ0KHRvc3RyaW5nKC0wLjUpID09ICItMC41IikKYXNzZXJ0KHRvc3RyaW5nKC0zMjc2NykgPT0gIi0zMjc2NyIpCmlmIG1hdGgudG9pbnRlZ2VyKDIxNDc0ODM2NDcpIHRoZW4gICAtLSBubyBvdmVyZmxvdz8gKDMyIGJpdHMpCiAgYXNzZXJ0KHRvc3RyaW5nKC0yMTQ3NDgzNjQ3KSA9PSAiLTIxNDc0ODM2NDciKQplbmQKaWYgbWF0aC50b2ludGVnZXIoNDYxMTY4NjAxODQyNzM4NzkwNCkgdGhlbiAgIC0tIG5vIG92ZXJmbG93PyAoNjQgYml0cykKICBhc3NlcnQodG9zdHJpbmcoNDYxMTY4NjAxODQyNzM4NzkwNCkgPT0gIjQ2MTE2ODYwMTg0MjczODc5MDQiKQogIGFzc2VydCh0b3N0cmluZygtNDYxMTY4NjAxODQyNzM4NzkwNCkgPT0gIi00NjExNjg2MDE4NDI3Mzg3OTA0IikKZW5kCgppZiB0b3N0cmluZygwLjApID09ICIwLjAiIHRoZW4gICAtLSAic3RhbmRhcmQiIGNvZXJjaW9uIGZsb2F0LT5zdHJpbmcKICBhc3NlcnQoJycgLi4gMTIgPT0gJzEyJyBhbmQgMTIuMCAuLiAnJyA9PSAnMTIuMCcpCiAgYXNzZXJ0KHRvc3RyaW5nKC0xMjAzICsgMC4wKSA9PSAiLTEyMDMuMCIpCmVsc2UgICAtLSBjb21wYXRpYmxlIGNvZXJjaW9uCiAgYXNzZXJ0KHRvc3RyaW5nKDAuMCkgPT0gIjAiKQogIGFzc2VydCgnJyAuLiAxMiA9PSAnMTInIGFuZCAxMi4wIC4uICcnID09ICcxMicpCiAgYXNzZXJ0KHRvc3RyaW5nKC0xMjAzICsgMC4wKSA9PSAiLTEyMDMiKQplbmQKCmRvICAtLSB0ZXN0cyBmb3IgJyVwJyBmb3JtYXQKICAtLSBub3QgbXVjaCB0byB0ZXN0LCBhcyBDIGRvZXMgbm90IHNwZWNpZnkgd2hhdCAnJXAnIGRvZXMuCiAgLS0gKCJUaGUgdmFsdWUgb2YgdGhlIHBvaW50ZXIgaXMgY29udmVydGVkIHRvIGEgc2VxdWVuY2Ugb2YgcHJpbnRpbmcKICAtLSBjaGFyYWN0ZXJzLCBpbiBhbiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIG1hbm5lci4iKQogIGxvY2FsIG51bGwgPSBzdHJpbmcuZm9ybWF0KCIlcCIsIG5pbCkKICBhc3NlcnQoc3RyaW5nLmZvcm1hdCgiJXAiLCB7fSkgfj0gbnVsbCkKICBhc3NlcnQoc3RyaW5nLmZvcm1hdCgiJXAiLCA0KSA9PSBudWxsKQogIGFzc2VydChzdHJpbmcuZm9ybWF0KCIlcCIsIHRydWUpID09IG51bGwpCiAgYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiVwIiwgcHJpbnQpIH49IG51bGwpCiAgYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiVwIiwgY29yb3V0aW5lLnJ1bm5pbmcoKSkgfj0gbnVsbCkKICBhc3NlcnQoc3RyaW5nLmZvcm1hdCgiJXAiLCBpby5zdGRpbikgfj0gbnVsbCkKICBhc3NlcnQoc3RyaW5nLmZvcm1hdCgiJXAiLCBpby5zdGRpbikgPT0gc3RyaW5nLmZvcm1hdCgiJXAiLCBpby5zdGRpbikpCiAgZG8KICAgIGxvY2FsIHQxID0ge307IGxvY2FsIHQyID0ge30KICAgIGFzc2VydChzdHJpbmcuZm9ybWF0KCIlcCIsIHQxKSB+PSBzdHJpbmcuZm9ybWF0KCIlcCIsIHQyKSkKICBlbmQKICBkbyAgICAgLS0gc2hvcnQgc3RyaW5ncyBhcmUgaW50ZXJuYWxpemVkCiAgICBsb2NhbCBzMSA9IHN0cmluZy5yZXAoImEiLCAxMCkKICAgIGxvY2FsIHMyID0gc3RyaW5nLnJlcCgiYSIsIDEwKQogIGFzc2VydChzdHJpbmcuZm9ybWF0KCIlcCIsIHMxKSA9PSBzdHJpbmcuZm9ybWF0KCIlcCIsIHMyKSkKICBlbmQKICBkbyAgICAgLS0gbG9uZyBzdHJpbmdzIGFyZW4ndCBpbnRlcm5hbGl6ZWQKICAgIGxvY2FsIHMxID0gc3RyaW5nLnJlcCgiYSIsIDMwMCk7IGxvY2FsIHMyID0gc3RyaW5nLnJlcCgiYSIsIDMwMCkKICAgIGFzc2VydChzdHJpbmcuZm9ybWF0KCIlcCIsIHMxKSB+PSBzdHJpbmcuZm9ybWF0KCIlcCIsIHMyKSkKICBlbmQKICBhc3NlcnQoI3N0cmluZy5mb3JtYXQoIiU5MHAiLCB7fSkgPT0gOTApCmVuZAoKeCA9ICci7WxvIlxuXFwnCmFzc2VydChzdHJpbmcuZm9ybWF0KCclcSVzJywgeCwgeCkgPT0gJyJcXCLtbG9cXCJcXFxuXFxcXCIi7WxvIlxuXFwnKQphc3NlcnQoc3RyaW5nLmZvcm1hdCgnJXEnLCAiXDAiKSA9PSBbWyJcMCJdXSkKYXNzZXJ0KGxvYWQoc3RyaW5nLmZvcm1hdCgncmV0dXJuICVxJywgeCkpKCkgPT0geCkKeCA9ICJcMFwxXDAwMjNcNVwwMDA5Igphc3NlcnQobG9hZChzdHJpbmcuZm9ybWF0KCdyZXR1cm4gJXEnLCB4KSkoKSA9PSB4KQphc3NlcnQoc3RyaW5nLmZvcm1hdCgiXDAlY1wwJWMleFwwIiwgc3RyaW5nLmJ5dGUoIlx4ZTQiKSwgc3RyaW5nLmJ5dGUoImIiKSwgMTQwKSA9PQogICAgICAgICAgICAgICJcMFx4ZTRcMGI4Y1wwIikKYXNzZXJ0KHN0cmluZy5mb3JtYXQoJycpID09ICIiKQphc3NlcnQoc3RyaW5nLmZvcm1hdCgiJWMiLDM0KS4uc3RyaW5nLmZvcm1hdCgiJWMiLDQ4KS4uc3RyaW5nLmZvcm1hdCgiJWMiLDkwKS4uc3RyaW5nLmZvcm1hdCgiJWMiLDEwMCkgPT0KICAgICAgIHN0cmluZy5mb3JtYXQoIiVjJWMlYyVjIiwgMzQsIDQ4LCA5MCwgMTAwKSkKYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiVzXDAgaXMgbm90IFwwJXMiLCAnbm90IGJlJywgJ2JlJykgPT0gJ25vdCBiZVwwIGlzIG5vdCBcMGJlJykKYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiUlJWQgJTAxMGQiLCAxMCwgMjMpID09ICIlMTAgMDAwMDAwMDAyMyIpCmFzc2VydCh0b251bWJlcihzdHJpbmcuZm9ybWF0KCIlZiIsIDEwLjMpKSA9PSAxMC4zKQp4ID0gc3RyaW5nLmZvcm1hdCgnIiUtNTBzIicsICdhJykKYXNzZXJ0KCN4ID09IDUyKQphc3NlcnQoc3RyaW5nLnN1Yih4LCAxLCA0KSA9PSAnImEgICcpCgphc3NlcnQoc3RyaW5nLmZvcm1hdCgiLSUuMjBzLjIwcyIsIHN0cmluZy5yZXAoIiUiLCAyMDAwKSkgPT0KICAgICAgICAgICAgICAgICAgICAgIi0iLi5zdHJpbmcucmVwKCIlIiwgMjApLi4iLjIwcyIpCmFzc2VydChzdHJpbmcuZm9ybWF0KCciLSUyMHMuMjBzIicsIHN0cmluZy5yZXAoIiUiLCAyMDAwKSkgPT0KICAgICAgIHN0cmluZy5mb3JtYXQoIiVxIiwgIi0iLi5zdHJpbmcucmVwKCIlIiwgMjAwMCkuLiIuMjBzIikpCgpkbwogIGxvY2FsIGZ1bmN0aW9uIGNoZWNrUSAodikKICAgIGxvY2FsIHMgPSBzdHJpbmcuZm9ybWF0KCIlcSIsIHYpCiAgICBsb2NhbCBudiA9IGxvYWQoInJldHVybiAiIC4uIHMpKCkKICAgIGFzc2VydCh2ID09IG52IGFuZCBtYXRoLnR5cGUodikgPT0gbWF0aC50eXBlKG52KSkKICBlbmQKICBjaGVja1EoIlwwXDBcMVwyNTVcdXsyMzR9IikKICBjaGVja1EobWF0aC5tYXhpbnRlZ2VyKQogIGNoZWNrUShtYXRoLm1pbmludGVnZXIpCiAgY2hlY2tRKG1hdGgucGkpCiAgY2hlY2tRKDAuMSkKICBjaGVja1EodHJ1ZSkKICBjaGVja1EobmlsKQogIGNoZWNrUShmYWxzZSkKICBjaGVja1EobWF0aC5odWdlKQogIGNoZWNrUSgtbWF0aC5odWdlKQogIGFzc2VydChzdHJpbmcuZm9ybWF0KCIlcSIsIDAvMCkgPT0gIigwLzApIikgICAtLSBOYU4KICBjaGVja2Vycm9yKCJubyBsaXRlcmFsIiwgc3RyaW5nLmZvcm1hdCwgIiVxIiwge30pCmVuZAoKYXNzZXJ0KHN0cmluZy5mb3JtYXQoIlwwJXNcMCIsICJcMFwwXDEiKSA9PSAiXDBcMFwwXDFcMCIpCmNoZWNrZXJyb3IoImNvbnRhaW5zIHplcm9zIiwgc3RyaW5nLmZvcm1hdCwgIiUxMHMiLCAiXDAiKQpjaGVja2Vycm9yKCJjYW5ub3QgaGF2ZSBtb2RpZmllcnMiLCBzdHJpbmcuZm9ybWF0LCAiJTEwcSIsICIxIikKCi0tIGZvcm1hdCB4IHRvc3RyaW5nCmFzc2VydChzdHJpbmcuZm9ybWF0KCIlcyAlcyIsIG5pbCwgdHJ1ZSkgPT0gIm5pbCB0cnVlIikKYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiVzICUuNHMiLCBmYWxzZSwgdHJ1ZSkgPT0gImZhbHNlIHRydWUiKQphc3NlcnQoc3RyaW5nLmZvcm1hdCgiJS4zcyAlLjNzIiwgZmFsc2UsIHRydWUpID09ICJmYWwgdHJ1IikKbG9jYWwgbSA9IHNldG1ldGF0YWJsZSh7fSwge19fdG9zdHJpbmcgPSBmdW5jdGlvbiAoKSByZXR1cm4gImhlbGxvIiBlbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25hbWUgPSAiaGkifSkKYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiVzICUuMTBzIiwgbSwgbSkgPT0gImhlbGxvIGhlbGxvIikKZ2V0bWV0YXRhYmxlKG0pLl9fdG9zdHJpbmcgPSBuaWwgICAtLSB3aWxsIHVzZSAnX19uYW1lJyBmcm9tIG5vdyBvbgphc3NlcnQoc3RyaW5nLmZvcm1hdCgiJS40cyIsIG0pID09ICJoaTogIikKCmdldG1ldGF0YWJsZShtKS5fX3Rvc3RyaW5nID0gZnVuY3Rpb24gKCkgcmV0dXJuIHt9IGVuZApjaGVja2Vycm9yKCInX190b3N0cmluZycgbXVzdCByZXR1cm4gYSBzdHJpbmciLCB0b3N0cmluZywgbSkKCgphc3NlcnQoc3RyaW5nLmZvcm1hdCgiJXgiLCAwLjApID09ICIwIikKYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiUwMngiLCAwLjApID09ICIwMCIpCmFzc2VydChzdHJpbmcuZm9ybWF0KCIlMDhYIiwgMHhGRkZGRkZGRikgPT0gIkZGRkZGRkZGIikKYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiUrMDhkIiwgMzE1MDEpID09ICIrMDAzMTUwMSIpCmFzc2VydChzdHJpbmcuZm9ybWF0KCIlKzA4ZCIsIC0zMDkyNykgPT0gIi0wMDMwOTI3IikKCgpkbyAgICAtLSBsb25nZXN0IG51bWJlciB0aGF0IGNhbiBiZSBmb3JtYXR0ZWQKICBsb2NhbCBpID0gMQogIGxvY2FsIGogPSAxMDAwMAogIHdoaWxlIGkgKyAxIDwgaiBkbyAgIC0tIGJpbmFyeSBzZWFyY2ggZm9yIG1heGltdW0gZmluaXRlIGZsb2F0CiAgICBsb2NhbCBtID0gKGkgKyBqKSAvLyAyCiAgICBpZiAxMF5tIDwgbWF0aC5odWdlIHRoZW4gaSA9IG0gZWxzZSBqID0gbSBlbmQKICBlbmQKICBhc3NlcnQoMTBeaSA8IG1hdGguaHVnZSBhbmQgMTBeaiA9PSBtYXRoLmh1Z2UpCiAgbG9jYWwgcyA9IHN0cmluZy5mb3JtYXQoJyUuOTlmJywgLSgxMF5pKSkKICBhc3NlcnQoc3RyaW5nLmxlbihzKSA+PSBpICsgMTAxKQogIGFzc2VydCh0b251bWJlcihzKSA9PSAtKDEwXmkpKQoKICAtLSBsaW1pdCBmb3IgZmxvYXRzCiAgYXNzZXJ0KDEwXjM4IDwgbWF0aC5odWdlKQogIGxvY2FsIHMgPSBzdHJpbmcuZm9ybWF0KCclLjk5ZicsIC0oMTBeMzgpKQogIGFzc2VydChzdHJpbmcubGVuKHMpID49IDM4ICsgMTAxKQogIGFzc2VydCh0b251bWJlcihzKSA9PSAtKDEwXjM4KSkKZW5kCgoKLS0gdGVzdGluZyBsYXJnZSBudW1iZXJzIGZvciBmb3JtYXQKZG8gICAtLSBhc3N1bWUgYXQgbGVhc3QgMzIgYml0cwogIGxvY2FsIG1heCwgbWluID0gMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDAgICAgLS0gImxhcmdlIiBmb3IgMzIgYml0cwogIGFzc2VydChzdHJpbmcuc3ViKHN0cmluZy5mb3JtYXQoIiU4eCIsIC0xKSwgLTgpID09ICJmZmZmZmZmZiIpCiAgYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiV4IiwgbWF4KSA9PSAiN2ZmZmZmZmYiKQogIGFzc2VydChzdHJpbmcuc3ViKHN0cmluZy5mb3JtYXQoIiV4IiwgbWluKSwgLTgpID09ICI4MDAwMDAwMCIpCiAgYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiVkIiwgbWF4KSA9PSAgIjIxNDc0ODM2NDciKQogIGFzc2VydChzdHJpbmcuZm9ybWF0KCIlZCIsIG1pbikgPT0gIi0yMTQ3NDgzNjQ4IikKICBhc3NlcnQoc3RyaW5nLmZvcm1hdCgiJXUiLCAweGZmZmZmZmZmKSA9PSAiNDI5NDk2NzI5NSIpCiAgYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiVvIiwgMHhBQkNEKSA9PSAiMTI1NzE1IikKCiAgbWF4LCBtaW4gPSAweDdmZmZmZmZmZmZmZmZmZmYsIC0weDgwMDAwMDAwMDAwMDAwMDAKICBpZiBtYXggPiAyLjBeNTMgdGhlbiAgLS0gb25seSBmb3IgNjQgYml0cwogICAgYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiV4IiwgKDJeNTIgfCAwKSAtIDEpID09ICJmZmZmZmZmZmZmZmZmIikKICAgIGFzc2VydChzdHJpbmcuZm9ybWF0KCIweCU4WCIsIDB4OGYwMDAwMDMpID09ICIweDhGMDAwMDAzIikKICAgIGFzc2VydChzdHJpbmcuZm9ybWF0KCIlZCIsIDJeNTMpID09ICI5MDA3MTk5MjU0NzQwOTkyIikKICAgIGFzc2VydChzdHJpbmcuZm9ybWF0KCIlaSIsIC0yXjUzKSA9PSAiLTkwMDcxOTkyNTQ3NDA5OTIiKQogICAgYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiV4IiwgbWF4KSA9PSAiN2ZmZmZmZmZmZmZmZmZmZiIpCiAgICBhc3NlcnQoc3RyaW5nLmZvcm1hdCgiJXgiLCBtaW4pID09ICI4MDAwMDAwMDAwMDAwMDAwIikKICAgIGFzc2VydChzdHJpbmcuZm9ybWF0KCIlZCIsIG1heCkgPT0gICI5MjIzMzcyMDM2ODU0Nzc1ODA3IikKICAgIGFzc2VydChzdHJpbmcuZm9ybWF0KCIlZCIsIG1pbikgPT0gIi05MjIzMzcyMDM2ODU0Nzc1ODA4IikKICAgIGFzc2VydChzdHJpbmcuZm9ybWF0KCIldSIsIH4oLTEgPDwgNjQpKSA9PSAiMTg0NDY3NDQwNzM3MDk1NTE2MTUiKQogICAgYXNzZXJ0KHRvc3RyaW5nKDEyMzQ1Njc4OTAxMjMpID09ICcxMjM0NTY3ODkwMTIzJykKICBlbmQKZW5kCgoKZG8gcHJpbnQoInRlc3RpbmcgJ2Zvcm1hdCAlYSAlQSciKQogIGxvY2FsIGZ1bmN0aW9uIG1hdGNoaGV4YSAobikKICAgIGxvY2FsIHMgPSBzdHJpbmcuZm9ybWF0KCIlYSIsIG4pCiAgICAtLSByZXN1bHQgbWF0Y2hlcyBJU08gQyByZXF1aXJlbWVudHMKICAgIGFzc2VydChzdHJpbmcuZmluZChzLCAiXiUtPzB4WzEtOWEtZl0lLj9bMC05YS1mXSpwWy0rXT8lZCskIikpCiAgICBhc3NlcnQodG9udW1iZXIocykgPT0gbikgIC0tIGFuZCBoYXMgZnVsbCBwcmVjaXNpb24KICAgIHMgPSBzdHJpbmcuZm9ybWF0KCIlQSIsIG4pCiAgICBhc3NlcnQoc3RyaW5nLmZpbmQocywgIl4lLT8wWFsxLTlBLUZdJS4/WzAtOUEtRl0qUFstK10/JWQrJCIpKQogICAgYXNzZXJ0KHRvbnVtYmVyKHMpID09IG4pCiAgZW5kCiAgZm9yIF8sIG4gaW4gaXBhaXJzezAuMSwgLTAuMSwgMS8zLCAtMS8zLCAxZTMwLCAtMWUzMCwKICAgICAgICAgICAgICAgICAgICAgLTQ1LzI0NywgMSwgLTEsIDIsIC0yLCAzZS0yMCwgLTNlLTIwfSBkbwogICAgbWF0Y2hoZXhhKG4pCiAgZW5kCgogIGFzc2VydChzdHJpbmcuZmluZChzdHJpbmcuZm9ybWF0KCIlQSIsIDAuMCksICJeMFgwJS4/MCpQJSs/MCQiKSkKICBhc3NlcnQoc3RyaW5nLmZpbmQoc3RyaW5nLmZvcm1hdCgiJWEiLCAtMC4wKSwgIl4lLTB4MCUuPzAqcCUrPzAkIikpCgogIGlmIG5vdCBfcG9ydCB0aGVuICAgLS0gdGVzdCBpbmYsIC1pbmYsIE5hTiwgYW5kIC0wLjAKICAgIGFzc2VydChzdHJpbmcuZmluZChzdHJpbmcuZm9ybWF0KCIlYSIsIDEvMCksICJeaW5mIikpCiAgICBhc3NlcnQoc3RyaW5nLmZpbmQoc3RyaW5nLmZvcm1hdCgiJUEiLCAtMS8wKSwgIl4lLUlORiIpKQogICAgYXNzZXJ0KHN0cmluZy5maW5kKHN0cmluZy5mb3JtYXQoIiVhIiwgMC8wKSwgIl4lLT9uYW4iKSkKICAgIGFzc2VydChzdHJpbmcuZmluZChzdHJpbmcuZm9ybWF0KCIlYSIsIC0wLjApLCAiXiUtMHgwIikpCiAgZW5kCiAgCiAgaWYgbm90IHBjYWxsKHN0cmluZy5mb3JtYXQsICIlLjNhIiwgMCkgdGhlbgogICAgKE1lc3NhZ2Ugb3IgcHJpbnQpKCJcbiA+Pj4gbW9kaWZpZXJzIGZvciBmb3JtYXQgJyVhJyBub3QgYXZhaWxhYmxlIDw8PFxuIikKICBlbHNlCiAgICBhc3NlcnQoc3RyaW5nLmZpbmQoc3RyaW5nLmZvcm1hdCgiJSsuMkEiLCAxMiksICJeJSswWCV4JS4leDBQJSs/JWQkIikpCiAgICBhc3NlcnQoc3RyaW5nLmZpbmQoc3RyaW5nLmZvcm1hdCgiJS40QSIsIC0xMiksICJeJS0wWCV4JS4leDAwMFAlKz8lZCQiKSkKICBlbmQKZW5kCgoKLS0gZXJyb3JzIGluIGZvcm1hdAoKbG9jYWwgZnVuY3Rpb24gY2hlY2sgKGZtdCwgbXNnKQogIGNoZWNrZXJyb3IobXNnLCBzdHJpbmcuZm9ybWF0LCBmbXQsIDEwKQplbmQKCmxvY2FsIGF1eCA9IHN0cmluZy5yZXAoJzAnLCA2MDApCmNoZWNrKCIlMTAwLjNkIiwgInRvbyBsb25nIikKY2hlY2soIiUxIi4uYXV4Li4iLjNkIiwgInRvbyBsb25nIikKY2hlY2soIiUxLjEwMGQiLCAidG9vIGxvbmciKQpjaGVjaygiJTEwLjEiLi5hdXguLiIwMDRkIiwgInRvbyBsb25nIikKY2hlY2soIiV0IiwgImludmFsaWQgY29udmVyc2lvbiIpCmNoZWNrKCIlIi4uYXV4Li4iZCIsICJyZXBlYXRlZCBmbGFncyIpCmNoZWNrKCIlZCAlZCIsICJubyB2YWx1ZSIpCgoKYXNzZXJ0KGxvYWQoInJldHVybiAxXG4tLWNvbW1lbnQgd2l0aG91dCBlbmRpbmcgRU9MIikoKSA9PSAxKQoKCmNoZWNrZXJyb3IoInRhYmxlIGV4cGVjdGVkIiwgdGFibGUuY29uY2F0LCAzKQphc3NlcnQodGFibGUuY29uY2F0e30gPT0gIiIpCmFzc2VydCh0YWJsZS5jb25jYXQoe30sICd4JykgPT0gIiIpCmFzc2VydCh0YWJsZS5jb25jYXQoeydcMCcsICdcMFwxJywgJ1wwXDFcMid9LCAnLlwwLicpID09ICJcMC5cMC5cMFwxLlwwLlwwXDFcMiIpCmxvY2FsIGEgPSB7fTsgZm9yIGk9MSwzMDAgZG8gYVtpXSA9ICJ4dXh1IiBlbmQKYXNzZXJ0KHRhYmxlLmNvbmNhdChhLCAiMTIzIikuLiIxMjMiID09IHN0cmluZy5yZXAoInh1eHUxMjMiLCAzMDApKQphc3NlcnQodGFibGUuY29uY2F0KGEsICJiIiwgMjAsIDIwKSA9PSAieHV4dSIpCmFzc2VydCh0YWJsZS5jb25jYXQoYSwgIiIsIDIwLCAyMSkgPT0gInh1eHV4dXh1IikKYXNzZXJ0KHRhYmxlLmNvbmNhdChhLCAieCIsIDIyLCAyMSkgPT0gIiIpCmFzc2VydCh0YWJsZS5jb25jYXQoYSwgIjMiLCAyOTkpID09ICJ4dXh1M3h1eHUiKQphc3NlcnQodGFibGUuY29uY2F0KHt9LCAieCIsIG1heGksIG1heGkgLSAxKSA9PSAiIikKYXNzZXJ0KHRhYmxlLmNvbmNhdCh7fSwgIngiLCBtaW5pICsgMSwgbWluaSkgPT0gIiIpCmFzc2VydCh0YWJsZS5jb25jYXQoe30sICJ4IiwgbWF4aSwgbWluaSkgPT0gIiIpCmFzc2VydCh0YWJsZS5jb25jYXQoe1ttYXhpXSA9ICJhbG8ifSwgIngiLCBtYXhpLCBtYXhpKSA9PSAiYWxvIikKYXNzZXJ0KHRhYmxlLmNvbmNhdCh7W21heGldID0gImFsbyIsIFttYXhpIC0gMV0gPSAieSJ9LCAiLSIsIG1heGkgLSAxLCBtYXhpKQogICAgICAgPT0gInktYWxvIikKCmFzc2VydChub3QgcGNhbGwodGFibGUuY29uY2F0LCB7ImEiLCAiYiIsIHt9fSkpCgphID0geyJhIiwiYiIsImMifQphc3NlcnQodGFibGUuY29uY2F0KGEsICIsIiwgMSwgMCkgPT0gIiIpCmFzc2VydCh0YWJsZS5jb25jYXQoYSwgIiwiLCAxLCAxKSA9PSAiYSIpCmFzc2VydCh0YWJsZS5jb25jYXQoYSwgIiwiLCAxLCAyKSA9PSAiYSxiIikKYXNzZXJ0KHRhYmxlLmNvbmNhdChhLCAiLCIsIDIpID09ICJiLGMiKQphc3NlcnQodGFibGUuY29uY2F0KGEsICIsIiwgMykgPT0gImMiKQphc3NlcnQodGFibGUuY29uY2F0KGEsICIsIiwgNCkgPT0gIiIpCgppZiBub3QgX3BvcnQgdGhlbgoKICBsb2NhbCBsb2NhbGVzID0geyAicHRiIiwgInB0X0JSLmlzbzg4NTkxIiwgIklTTy04ODU5LTEiIH0KICBsb2NhbCBmdW5jdGlvbiB0cnlsb2NhbGUgKHcpCiAgICBmb3IgaSA9IDEsICNsb2NhbGVzIGRvCiAgICAgIGlmIG9zLnNldGxvY2FsZShsb2NhbGVzW2ldLCB3KSB0aGVuCiAgICAgICAgcHJpbnQoc3RyaW5nLmZvcm1hdCgiJyVzJyBsb2NhbGUgc2V0IHRvICclcyciLCB3LCBsb2NhbGVzW2ldKSkKICAgICAgICByZXR1cm4gbG9jYWxlc1tpXQogICAgICBlbmQKICAgIGVuZAogICAgcHJpbnQoc3RyaW5nLmZvcm1hdCgiJyVzJyBsb2NhbGUgbm90IGZvdW5kIiwgdykpCiAgICByZXR1cm4gZmFsc2UKICBlbmQKCiAgaWYgdHJ5bG9jYWxlKCJjb2xsYXRlIikgIHRoZW4KICAgIGFzc2VydCgiYWxvIiA8ICLhbG8iIGFuZCAi4WxvIiA8ICJhbW8iKQogIGVuZAoKICBpZiB0cnlsb2NhbGUoImN0eXBlIikgdGhlbgogICAgYXNzZXJ0KHN0cmluZy5nc3ViKCLh6e3z+iIsICIlYSIsICJ4IikgPT0gInh4eHh4IikKICAgIGFzc2VydChzdHJpbmcuZ3N1Yigi4cHpySIsICIlbCIsICJ4IikgPT0gInjBeMkiKQogICAgYXNzZXJ0KHN0cmluZy5nc3ViKCLhwenJIiwgIiV1IiwgIngiKSA9PSAi4XjpeCIpCiAgICBhc3NlcnQoc3RyaW5nLnVwcGVyIuHB6Xt4dXh1fefjbyIgPT0gIsHByXtYVVhVfcfDTyIpCiAgZW5kCgogIG9zLnNldGxvY2FsZSgiQyIpCiAgYXNzZXJ0KG9zLnNldGxvY2FsZSgpID09ICdDJykKICBhc3NlcnQob3Muc2V0bG9jYWxlKG5pbCwgIm51bWVyaWMiKSA9PSAnQycpCgplbmQKCgotLSBidWcgaW4gTHVhIDUuMy4yCi0tICdnbWF0Y2gnIGl0ZXJhdG9yIGRvZXMgbm90IHdvcmsgYWNyb3NzIGNvcm91dGluZXMKZG8KICBsb2NhbCBmID0gc3RyaW5nLmdtYXRjaCgiMSAyIDMgNCA1IiwgIiVkKyIpCiAgYXNzZXJ0KGYoKSA9PSAiMSIpCiAgY28gPSBjb3JvdXRpbmUud3JhcChmKQogIGFzc2VydChjbygpID09ICIyIikKZW5kCgoKaWYgVD09bmlsIHRoZW4KICAoTWVzc2FnZSBvciBwcmludCkKICAgICAoIlxuID4+PiB0ZXN0QyBub3QgYWN0aXZlOiBza2lwcGluZyAncHVzaGZzdHJpbmcnIHRlc3RzIDw8PFxuIikKZWxzZQoKICBwcmludCJ0ZXN0aW5nICdwdXNoZnN0cmluZyciCgogIC0tIGZvcm1hdHMgJVUsICVmLCAlSSBhbHJlYWR5IHRlc3RlZCBlbHNld2hlcmUKCiAgbG9jYWwgYmxlbiA9IDQwMCAgICAtLSBpbnRlcm5hbCBidWZmZXIgbGVuZ3RoIGluICdsdWFPX3B1c2hmc3RyaW5nJwoKICBsb2NhbCBmdW5jdGlvbiBjYWxscGZzIChvcCwgZm10LCBuKQogICAgbG9jYWwgeCA9IHtULnRlc3RDKCJwdXNoZnN0cmluZyIgLi4gb3AgLi4gIjsgcmV0dXJuICoiLCBmbXQsIG4pfQogICAgLS0gc3RhY2sgaGFzIGNvZGUsICdmbXQnLCAnbicsIGFuZCByZXN1bHQgZnJvbSBvcGVyYXRpb24KICAgIGFzc2VydCgjeCA9PSA0KSAgLS0gbWFrZSBzdXJlIG5vdGhpbmcgZWxzZSB3YXMgbGVmdCBpbiB0aGUgc3RhY2sKICAgIHJldHVybiB4WzRdCiAgZW5kCgogIGxvY2FsIGZ1bmN0aW9uIHRlc3RwZnMgKG9wLCBmbXQsIG4pCiAgICBhc3NlcnQoY2FsbHBmcyhvcCwgZm10LCBuKSA9PSBzdHJpbmcuZm9ybWF0KGZtdCwgbikpCiAgZW5kCgogIHRlc3RwZnMoIkkiLCAiIiwgMCkKICB0ZXN0cGZzKCJJIiwgc3RyaW5nLnJlcCgiYSIsIGJsZW4gLSAxKSwgMCkKICB0ZXN0cGZzKCJJIiwgc3RyaW5nLnJlcCgiYSIsIGJsZW4pLCAwKQogIHRlc3RwZnMoIkkiLCBzdHJpbmcucmVwKCJhIiwgYmxlbiArIDEpLCAwKQoKICBsb2NhbCBzdHIgPSBzdHJpbmcucmVwKCJhYiIsIGJsZW4pIC4uICIlZCIgLi4gc3RyaW5nLnJlcCgiZCIsIGJsZW4gLyAyKQogIHRlc3RwZnMoIkkiLCBzdHIsIDJeMTQpCiAgdGVzdHBmcygiSSIsIHN0ciwgLTJeMTUpCgogIHN0ciA9ICIlZCIgLi4gc3RyaW5nLnJlcCgiY2QiLCBibGVuKQogIHRlc3RwZnMoIkkiLCBzdHIsIDJeMTQpCiAgdGVzdHBmcygiSSIsIHN0ciwgLTJeMTUpCgogIHN0ciA9IHN0cmluZy5yZXAoImMiLCBibGVuIC0gMikgLi4gIiVkIgogIHRlc3RwZnMoIkkiLCBzdHIsIDJeMTQpCiAgdGVzdHBmcygiSSIsIHN0ciwgLTJeMTUpCgogIGZvciBsID0gMTIsIDE0IGRvCiAgICBsb2NhbCBzdHIxID0gc3RyaW5nLnJlcCgiYSIsIGwpCiAgICBmb3IgaSA9IDAsIDUwMCwgMTMgZG8KICAgICAgZm9yIGogPSAwLCA1MDAsIDEzIGRvCiAgICAgICAgc3RyID0gc3RyaW5nLnJlcCgiYSIsIGkpIC4uICIlcyIgLi4gc3RyaW5nLnJlcCgiZCIsIGopCiAgICAgICAgdGVzdHBmcygiUyIsIHN0ciwgc3RyMSkKICAgICAgICB0ZXN0cGZzKCJTIiwgc3RyLCBzdHIpCiAgICAgIGVuZAogICAgZW5kCiAgZW5kCgogIHN0ciA9ICJhYmMgJWMgZGVmIgogIHRlc3RwZnMoIkkiLCBzdHIsIHN0cmluZy5ieXRlKCJBIikpCiAgdGVzdHBmcygiSSIsIHN0ciwgMjU1KQoKICBzdHIgPSBzdHJpbmcucmVwKCJhIiwgYmxlbiAtIDEpIC4uICIlcCIgLi4gc3RyaW5nLnJlcCgiY2QiLCBibGVuKQogIHRlc3RwZnMoIlAiLCBzdHIsIHt9KQoKICBzdHIgPSBzdHJpbmcucmVwKCIlJSIsIDMgKiBibGVuKSAuLiAiJXAiIC4uIHN0cmluZy5yZXAoIiUlIiwgMiAqIGJsZW4pCiAgdGVzdHBmcygiUCIsIHN0ciwge30pCmVuZAoKCnByaW50KCdPSycpCgo=