LS0gJElkOiB0ZXN0ZXMvc3RyaW5ncy5sdWEgJAotLSBTZWUgQ29weXJpZ2h0IE5vdGljZSBpbiBmaWxlIGFsbC5sdWEKCi0tIElTTyBMYXRpbiBlbmNvZGluZwoKCnByaW50KCd0ZXN0aW5nIHN0cmluZ3MgYW5kIHN0cmluZyBsaWJyYXJ5JykKCmxvY2FsIG1heGkgPGNvbnN0PiA9IG1hdGgubWF4aW50ZWdlcgpsb2NhbCBtaW5pIDxjb25zdD4gPSBtYXRoLm1pbmludGVnZXIKCgpsb2NhbCBmdW5jdGlvbiBjaGVja2Vycm9yIChtc2csIGYsIC4uLikKICBsb2NhbCBzLCBlcnIgPSBwY2FsbChmLCAuLi4pCiAgYXNzZXJ0KG5vdCBzIGFuZCBzdHJpbmcuZmluZChlcnIsIG1zZykpCmVuZAoKCi0tIHRlc3Rpbmcgc3RyaW5nIGNvbXBhcmlzb25zCmFzc2VydCgnYWxvJyA8ICdhbG8xJykKYXNzZXJ0KCcnIDwgJ2EnKQphc3NlcnQoJ2Fsb1wwYWxvJyA8ICdhbG9cMGInKQphc3NlcnQoJ2Fsb1wwYWxvXDBcMCcgPiAnYWxvXDBhbG9cMCcpCmFzc2VydCgnYWxvJyA8ICdhbG9cMCcpCmFzc2VydCgnYWxvXDAnID4gJ2FsbycpCmFzc2VydCgnXDAnIDwgJ1wxJykKYXNzZXJ0KCdcMFwwJyA8ICdcMFwxJykKYXNzZXJ0KCdcMVwwYVwwYScgPD0gJ1wxXDBhXDBhJykKYXNzZXJ0KG5vdCAoJ1wxXDBhXDBiJyA8PSAnXDFcMGFcMGEnKSkKYXNzZXJ0KCdcMFwwXDAnIDwgJ1wwXDBcMFwwJykKYXNzZXJ0KG5vdCgnXDBcMFwwXDAnIDwgJ1wwXDBcMCcpKQphc3NlcnQoJ1wwXDBcMCcgPD0gJ1wwXDBcMFwwJykKYXNzZXJ0KG5vdCgnXDBcMFwwXDAnIDw9ICdcMFwwXDAnKSkKYXNzZXJ0KCdcMFwwXDAnIDw9ICdcMFwwXDAnKQphc3NlcnQoJ1wwXDBcMCcgPj0gJ1wwXDBcMCcpCmFzc2VydChub3QgKCdcMFwwYicgPCAnXDBcMGFcMCcpKQoKLS0gdGVzdGluZyBzdHJpbmcuc3ViCmFzc2VydChzdHJpbmcuc3ViKCIxMjM0NTY3ODkiLDIsNCkgPT0gIjIzNCIpCmFzc2VydChzdHJpbmcuc3ViKCIxMjM0NTY3ODkiLDcpID09ICI3ODkiKQphc3NlcnQoc3RyaW5nLnN1YigiMTIzNDU2Nzg5Iiw3LDYpID09ICIiKQphc3NlcnQoc3RyaW5nLnN1YigiMTIzNDU2Nzg5Iiw3LDcpID09ICI3IikKYXNzZXJ0KHN0cmluZy5zdWIoIjEyMzQ1Njc4OSIsMCwwKSA9PSAiIikKYXNzZXJ0KHN0cmluZy5zdWIoIjEyMzQ1Njc4OSIsLTEwLDEwKSA9PSAiMTIzNDU2Nzg5IikKYXNzZXJ0KHN0cmluZy5zdWIoIjEyMzQ1Njc4OSIsMSw5KSA9PSAiMTIzNDU2Nzg5IikKYXNzZXJ0KHN0cmluZy5zdWIoIjEyMzQ1Njc4OSIsLTEwLC0yMCkgPT0gIiIpCmFzc2VydChzdHJpbmcuc3ViKCIxMjM0NTY3ODkiLC0xKSA9PSAiOSIpCmFzc2VydChzdHJpbmcuc3ViKCIxMjM0NTY3ODkiLC00KSA9PSAiNjc4OSIpCmFzc2VydChzdHJpbmcuc3ViKCIxMjM0NTY3ODkiLC02LCAtNCkgPT0gIjQ1NiIpCmFzc2VydChzdHJpbmcuc3ViKCIxMjM0NTY3ODkiLCBtaW5pLCAtNCkgPT0gIjEyMzQ1NiIpCmFzc2VydChzdHJpbmcuc3ViKCIxMjM0NTY3ODkiLCBtaW5pLCBtYXhpKSA9PSAiMTIzNDU2Nzg5IikKYXNzZXJ0KHN0cmluZy5zdWIoIjEyMzQ1Njc4OSIsIG1pbmksIG1pbmkpID09ICIiKQphc3NlcnQoc3RyaW5nLnN1YigiXDAwMDEyMzQ1Njc4OSIsMyw1KSA9PSAiMjM0IikKYXNzZXJ0KCgiXDAwMDEyMzQ1Njc4OSIpOnN1Yig4KSA9PSAiNzg5IikKCi0tIHRlc3Rpbmcgc3RyaW5nLmZpbmQKYXNzZXJ0KHN0cmluZy5maW5kKCIxMjM0NTY3ODkiLCAiMzQ1IikgPT0gMykKbG9jYWwgYSxiID0gc3RyaW5nLmZpbmQoIjEyMzQ1Njc4OSIsICIzNDUiKQphc3NlcnQoc3RyaW5nLnN1YigiMTIzNDU2Nzg5IiwgYSwgYikgPT0gIjM0NSIpCmFzc2VydChzdHJpbmcuZmluZCgiMTIzNDU2Nzg5MDEyMzQ1Njc4OSIsICIzNDUiLCAzKSA9PSAzKQphc3NlcnQoc3RyaW5nLmZpbmQoIjEyMzQ1Njc4OTAxMjM0NTY3ODkiLCAiMzQ1IiwgNCkgPT0gMTMpCmFzc2VydChub3Qgc3RyaW5nLmZpbmQoIjEyMzQ1Njc4OTAxMjM0NTY3ODkiLCAiMzQ2IiwgNCkpCmFzc2VydChzdHJpbmcuZmluZCgiMTIzNDU2Nzg5MDEyMzQ1Njc4OSIsICIuNDUiLCAtOSkgPT0gMTMpCmFzc2VydChub3Qgc3RyaW5nLmZpbmQoImFiY2RlZmciLCAiXDAiLCA1LCAxKSkKYXNzZXJ0KHN0cmluZy5maW5kKCIiLCAiIikgPT0gMSkKYXNzZXJ0KHN0cmluZy5maW5kKCIiLCAiIiwgMSkgPT0gMSkKYXNzZXJ0KG5vdCBzdHJpbmcuZmluZCgiIiwgIiIsIDIpKQphc3NlcnQobm90IHN0cmluZy5maW5kKCcnLCAnYWFhJywgMSkpCmFzc2VydCgoJ2FsbyguKWFsbycpOmZpbmQoJyguKScsIDEsIDEpID09IDQpCgphc3NlcnQoc3RyaW5nLmxlbigiIikgPT0gMCkKYXNzZXJ0KHN0cmluZy5sZW4oIlwwXDBcMCIpID09IDMpCmFzc2VydChzdHJpbmcubGVuKCIxMjM0NTY3ODkwIikgPT0gMTApCgphc3NlcnQoIyIiID09IDApCmFzc2VydCgjIlwwXDBcMCIgPT0gMykKYXNzZXJ0KCMiMTIzNDU2Nzg5MCIgPT0gMTApCgotLSB0ZXN0aW5nIHN0cmluZy5ieXRlL3N0cmluZy5jaGFyCmFzc2VydChzdHJpbmcuYnl0ZSgiYSIpID09IDk3KQphc3NlcnQoc3RyaW5nLmJ5dGUoIlx4ZTQiKSA+IDEyNykKYXNzZXJ0KHN0cmluZy5ieXRlKHN0cmluZy5jaGFyKDI1NSkpID09IDI1NSkKYXNzZXJ0KHN0cmluZy5ieXRlKHN0cmluZy5jaGFyKDApKSA9PSAwKQphc3NlcnQoc3RyaW5nLmJ5dGUoIlwwIikgPT0gMCkKYXNzZXJ0KHN0cmluZy5ieXRlKCJcMFwwYWxvXDB4IiwgLTEpID09IHN0cmluZy5ieXRlKCd4JykpCmFzc2VydChzdHJpbmcuYnl0ZSgiYmEiLCAyKSA9PSA5NykKYXNzZXJ0KHN0cmluZy5ieXRlKCJcblxuIiwgMiwgLTEpID09IDEwKQphc3NlcnQoc3RyaW5nLmJ5dGUoIlxuXG4iLCAyLCAyKSA9PSAxMCkKYXNzZXJ0KHN0cmluZy5ieXRlKCIiKSA9PSBuaWwpCmFzc2VydChzdHJpbmcuYnl0ZSgiaGkiLCAtMykgPT0gbmlsKQphc3NlcnQoc3RyaW5nLmJ5dGUoImhpIiwgMykgPT0gbmlsKQphc3NlcnQoc3RyaW5nLmJ5dGUoImhpIiwgOSwgMTApID09IG5pbCkKYXNzZXJ0KHN0cmluZy5ieXRlKCJoaSIsIDIsIDEpID09IG5pbCkKYXNzZXJ0KHN0cmluZy5jaGFyKCkgPT0gIiIpCmFzc2VydChzdHJpbmcuY2hhcigwLCAyNTUsIDApID09ICJcMFwyNTVcMCIpCmFzc2VydChzdHJpbmcuY2hhcigwLCBzdHJpbmcuYnl0ZSgiXHhlNCIpLCAwKSA9PSAiXDBceGU0XDAiKQphc3NlcnQoc3RyaW5nLmNoYXIoc3RyaW5nLmJ5dGUoIlx4ZTRsXDDzdSIsIDEsIC0xKSkgPT0gIlx4ZTRsXDDzdSIpCmFzc2VydChzdHJpbmcuY2hhcihzdHJpbmcuYnl0ZSgiXHhlNGxcMPN1IiwgMSwgMCkpID09ICIiKQphc3NlcnQoc3RyaW5nLmNoYXIoc3RyaW5nLmJ5dGUoIlx4ZTRsXDDzdSIsIC0xMCwgMTAwKSkgPT0gIlx4ZTRsXDDzdSIpCgpjaGVja2Vycm9yKCJvdXQgb2YgcmFuZ2UiLCBzdHJpbmcuY2hhciwgMjU2KQpjaGVja2Vycm9yKCJvdXQgb2YgcmFuZ2UiLCBzdHJpbmcuY2hhciwgLTEpCmNoZWNrZXJyb3IoIm91dCBvZiByYW5nZSIsIHN0cmluZy5jaGFyLCBtYXRoLm1heGludGVnZXIpCmNoZWNrZXJyb3IoIm91dCBvZiByYW5nZSIsIHN0cmluZy5jaGFyLCBtYXRoLm1pbmludGVnZXIpCgphc3NlcnQoc3RyaW5nLnVwcGVyKCJhYlwwYyIpID09ICJBQlwwQyIpCmFzc2VydChzdHJpbmcubG93ZXIoIlwwQUJDYyUkIikgPT0gIlwwYWJjYyUkIikKYXNzZXJ0KHN0cmluZy5yZXAoJ3Rlc3RlJywgMCkgPT0gJycpCmFzc2VydChzdHJpbmcucmVwKCd06XNcMDB06icsIDIpID09ICd06XNcMHTqdOlzXDAwMHTqJykKYXNzZXJ0KHN0cmluZy5yZXAoJycsIDEwKSA9PSAnJykKCmlmIHN0cmluZy5wYWNrc2l6ZSgiaSIpID09IDQgdGhlbgogIC0tIHJlc3VsdCBsZW5ndGggd291bGQgYmUgMl4zMSAoaW50IG92ZXJmbG93KQogIGNoZWNrZXJyb3IoInRvbyBsYXJnZSIsIHN0cmluZy5yZXAsICdhYScsICgxIDw8IDMwKSkKICBjaGVja2Vycm9yKCJ0b28gbGFyZ2UiLCBzdHJpbmcucmVwLCAnYScsICgxIDw8IDMwKSwgJywnKQplbmQKCi0tIHJlcGV0aXRpb25zIHdpdGggc2VwYXJhdG9yCmFzc2VydChzdHJpbmcucmVwKCd0ZXN0ZScsIDAsICd4dXh1JykgPT0gJycpCmFzc2VydChzdHJpbmcucmVwKCd0ZXN0ZScsIDEsICd4dXh1JykgPT0gJ3Rlc3RlJykKYXNzZXJ0KHN0cmluZy5yZXAoJ1wxXDBcMScsIDIsICdcMFwwJykgPT0gJ1wxXDBcMVwwXDBcMVwwXDEnKQphc3NlcnQoc3RyaW5nLnJlcCgnJywgMTAsICcuJykgPT0gc3RyaW5nLnJlcCgnLicsIDkpKQphc3NlcnQobm90IHBjYWxsKHN0cmluZy5yZXAsICJhYSIsIG1heGkgLy8gMiArIDEwKSkKYXNzZXJ0KG5vdCBwY2FsbChzdHJpbmcucmVwLCAiIiwgbWF4aSAvLyAyICsgMTAsICJhYSIpKQoKYXNzZXJ0KHN0cmluZy5yZXZlcnNlIiIgPT0gIiIpCmFzc2VydChzdHJpbmcucmV2ZXJzZSJcMFwxXDJcMyIgPT0gIlwzXDJcMVwwIikKYXNzZXJ0KHN0cmluZy5yZXZlcnNlIlwwMDAxMjM0IiA9PSAiNDMyMVwwIikKCmZvciBpPTAsMzAgZG8gYXNzZXJ0KHN0cmluZy5sZW4oc3RyaW5nLnJlcCgnYScsIGkpKSA9PSBpKSBlbmQKCmFzc2VydCh0eXBlKHRvc3RyaW5nKG5pbCkpID09ICdzdHJpbmcnKQphc3NlcnQodHlwZSh0b3N0cmluZygxMikpID09ICdzdHJpbmcnKQphc3NlcnQoc3RyaW5nLmZpbmQodG9zdHJpbmd7fSwgJ3RhYmxlOicpKQphc3NlcnQoc3RyaW5nLmZpbmQodG9zdHJpbmcocHJpbnQpLCAnZnVuY3Rpb246JykpCmFzc2VydCgjdG9zdHJpbmcoJ1wwJykgPT0gMSkKYXNzZXJ0KHRvc3RyaW5nKHRydWUpID09ICJ0cnVlIikKYXNzZXJ0KHRvc3RyaW5nKGZhbHNlKSA9PSAiZmFsc2UiKQphc3NlcnQodG9zdHJpbmcoLTEyMDMpID09ICItMTIwMyIpCmFzc2VydCh0b3N0cmluZygxMjAzLjEyNSkgPT0gIjEyMDMuMTI1IikKYXNzZXJ0KHRvc3RyaW5nKC0wLjUpID09ICItMC41IikKYXNzZXJ0KHRvc3RyaW5nKC0zMjc2NykgPT0gIi0zMjc2NyIpCmlmIG1hdGgudG9pbnRlZ2VyKDIxNDc0ODM2NDcpIHRoZW4gICAtLSBubyBvdmVyZmxvdz8gKDMyIGJpdHMpCiAgYXNzZXJ0KHRvc3RyaW5nKC0yMTQ3NDgzNjQ3KSA9PSAiLTIxNDc0ODM2NDciKQplbmQKaWYgbWF0aC50b2ludGVnZXIoNDYxMTY4NjAxODQyNzM4NzkwNCkgdGhlbiAgIC0tIG5vIG92ZXJmbG93PyAoNjQgYml0cykKICBhc3NlcnQodG9zdHJpbmcoNDYxMTY4NjAxODQyNzM4NzkwNCkgPT0gIjQ2MTE2ODYwMTg0MjczODc5MDQiKQogIGFzc2VydCh0b3N0cmluZygtNDYxMTY4NjAxODQyNzM4NzkwNCkgPT0gIi00NjExNjg2MDE4NDI3Mzg3OTA0IikKZW5kCgppZiB0b3N0cmluZygwLjApID09ICIwLjAiIHRoZW4gICAtLSAic3RhbmRhcmQiIGNvZXJjaW9uIGZsb2F0LT5zdHJpbmcKICBhc3NlcnQoJycgLi4gMTIgPT0gJzEyJyBhbmQgMTIuMCAuLiAnJyA9PSAnMTIuMCcpCiAgYXNzZXJ0KHRvc3RyaW5nKC0xMjAzICsgMC4wKSA9PSAiLTEyMDMuMCIpCmVsc2UgICAtLSBjb21wYXRpYmxlIGNvZXJjaW9uCiAgYXNzZXJ0KHRvc3RyaW5nKDAuMCkgPT0gIjAiKQogIGFzc2VydCgnJyAuLiAxMiA9PSAnMTInIGFuZCAxMi4wIC4uICcnID09ICcxMicpCiAgYXNzZXJ0KHRvc3RyaW5nKC0xMjAzICsgMC4wKSA9PSAiLTEyMDMiKQplbmQKCgpsb2NhbCBmdW5jdGlvbiB0b3BvaW50ZXIgKHMpCiAgcmV0dXJuIHN0cmluZy5mb3JtYXQoIiVwIiwgcykKZW5kCgoKZG8gIC0tIHRlc3RzIGZvciAnJXAnIGZvcm1hdAogIC0tIG5vdCBtdWNoIHRvIHRlc3QsIGFzIEMgZG9lcyBub3Qgc3BlY2lmeSB3aGF0ICclcCcgZG9lcy4KICAtLSAoIlRoZSB2YWx1ZSBvZiB0aGUgcG9pbnRlciBpcyBjb252ZXJ0ZWQgdG8gYSBzZXF1ZW5jZSBvZiBwcmludGluZwogIC0tIGNoYXJhY3RlcnMsIGluIGFuIGltcGxlbWVudGF0aW9uLWRlZmluZWQgbWFubmVyLiIpCiAgbG9jYWwgbnVsbCA9ICIobnVsbCkiICAgIC0tIG51bGxzIGFyZSBmb3JtYXR0ZWQgYnkgTHVhCiAgYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiVwIiwgNCkgPT0gbnVsbCkKICBhc3NlcnQoc3RyaW5nLmZvcm1hdCgiJXAiLCB0cnVlKSA9PSBudWxsKQogIGFzc2VydChzdHJpbmcuZm9ybWF0KCIlcCIsIG5pbCkgPT0gbnVsbCkKICBhc3NlcnQoc3RyaW5nLmZvcm1hdCgiJXAiLCB7fSkgfj0gbnVsbCkKICBhc3NlcnQoc3RyaW5nLmZvcm1hdCgiJXAiLCBwcmludCkgfj0gbnVsbCkKICBhc3NlcnQoc3RyaW5nLmZvcm1hdCgiJXAiLCBjb3JvdXRpbmUucnVubmluZygpKSB+PSBudWxsKQogIGFzc2VydChzdHJpbmcuZm9ybWF0KCIlcCIsIGlvLnN0ZGluKSB+PSBudWxsKQogIGFzc2VydChzdHJpbmcuZm9ybWF0KCIlcCIsIGlvLnN0ZGluKSA9PSBzdHJpbmcuZm9ybWF0KCIlcCIsIGlvLnN0ZGluKSkKICBhc3NlcnQoc3RyaW5nLmZvcm1hdCgiJXAiLCBwcmludCkgPT0gc3RyaW5nLmZvcm1hdCgiJXAiLCBwcmludCkpCiAgYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiVwIiwgcHJpbnQpIH49IHN0cmluZy5mb3JtYXQoIiVwIiwgYXNzZXJ0KSkKCiAgYXNzZXJ0KCNzdHJpbmcuZm9ybWF0KCIlOTBwIiwge30pID09IDkwKQogIGFzc2VydCgjc3RyaW5nLmZvcm1hdCgiJS02MHAiLCB7fSkgPT0gNjApCiAgYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiUxMHAiLCBmYWxzZSkgPT0gc3RyaW5nLnJlcCgiICIsIDEwIC0gI251bGwpIC4uIG51bGwpCiAgYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiUtMTJwIiwgMS41KSA9PSBudWxsIC4uIHN0cmluZy5yZXAoIiAiLCAxMiAtICNudWxsKSkKCiAgZG8KICAgIGxvY2FsIHQxID0ge307IGxvY2FsIHQyID0ge30KICAgIGFzc2VydCh0b3BvaW50ZXIodDEpIH49IHRvcG9pbnRlcih0MikpCiAgZW5kCgogIGRvICAgICAtLSBzaG9ydCBzdHJpbmdzIGFyZSBpbnRlcm5hbGl6ZWQKICAgIGxvY2FsIHMxID0gc3RyaW5nLnJlcCgiYSIsIDEwKQogICAgbG9jYWwgczIgPSBzdHJpbmcucmVwKCJhYSIsIDUpCiAgYXNzZXJ0KHRvcG9pbnRlcihzMSkgPT0gdG9wb2ludGVyKHMyKSkKICBlbmQKCiAgZG8gICAgIC0tIGxvbmcgc3RyaW5ncyBhcmVuJ3QgaW50ZXJuYWxpemVkCiAgICBsb2NhbCBzMSA9IHN0cmluZy5yZXAoImEiLCAzMDApOyBsb2NhbCBzMiA9IHN0cmluZy5yZXAoImEiLCAzMDApCiAgICBhc3NlcnQodG9wb2ludGVyKHMxKSB+PSB0b3BvaW50ZXIoczIpKQogIGVuZAplbmQKCmxvY2FsIHggPSAnIu1sbyJcblxcJwphc3NlcnQoc3RyaW5nLmZvcm1hdCgnJXElcycsIHgsIHgpID09ICciXFwi7WxvXFwiXFxcblxcXFwiIu1sbyJcblxcJykKYXNzZXJ0KHN0cmluZy5mb3JtYXQoJyVxJywgIlwwIikgPT0gW1siXDAiXV0pCmFzc2VydChsb2FkKHN0cmluZy5mb3JtYXQoJ3JldHVybiAlcScsIHgpKSgpID09IHgpCnggPSAiXDBcMVwwMDIzXDVcMDAwOSIKYXNzZXJ0KGxvYWQoc3RyaW5nLmZvcm1hdCgncmV0dXJuICVxJywgeCkpKCkgPT0geCkKYXNzZXJ0KHN0cmluZy5mb3JtYXQoIlwwJWNcMCVjJXhcMCIsIHN0cmluZy5ieXRlKCJceGU0IiksIHN0cmluZy5ieXRlKCJiIiksIDE0MCkgPT0KICAgICAgICAgICAgICAiXDBceGU0XDBiOGNcMCIpCmFzc2VydChzdHJpbmcuZm9ybWF0KCcnKSA9PSAiIikKYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiVjIiwzNCkuLnN0cmluZy5mb3JtYXQoIiVjIiw0OCkuLnN0cmluZy5mb3JtYXQoIiVjIiw5MCkuLnN0cmluZy5mb3JtYXQoIiVjIiwxMDApID09CiAgICAgICBzdHJpbmcuZm9ybWF0KCIlMWMlLWMlLTFjJWMiLCAzNCwgNDgsIDkwLCAxMDApKQphc3NlcnQoc3RyaW5nLmZvcm1hdCgiJXNcMCBpcyBub3QgXDAlcyIsICdub3QgYmUnLCAnYmUnKSA9PSAnbm90IGJlXDAgaXMgbm90IFwwYmUnKQphc3NlcnQoc3RyaW5nLmZvcm1hdCgiJSUlZCAlMDEwZCIsIDEwLCAyMykgPT0gIiUxMCAwMDAwMDAwMDIzIikKYXNzZXJ0KHRvbnVtYmVyKHN0cmluZy5mb3JtYXQoIiVmIiwgMTAuMykpID09IDEwLjMpCmFzc2VydChzdHJpbmcuZm9ybWF0KCciJS01MHMiJywgJ2EnKSA9PSAnImEnIC4uIHN0cmluZy5yZXAoJyAnLCA0OSkgLi4gJyInKQoKYXNzZXJ0KHN0cmluZy5mb3JtYXQoIi0lLjIwcy4yMHMiLCBzdHJpbmcucmVwKCIlIiwgMjAwMCkpID09CiAgICAgICAgICAgICAgICAgICAgICItIi4uc3RyaW5nLnJlcCgiJSIsIDIwKS4uIi4yMHMiKQphc3NlcnQoc3RyaW5nLmZvcm1hdCgnIi0lMjBzLjIwcyInLCBzdHJpbmcucmVwKCIlIiwgMjAwMCkpID09CiAgICAgICBzdHJpbmcuZm9ybWF0KCIlcSIsICItIi4uc3RyaW5nLnJlcCgiJSIsIDIwMDApLi4iLjIwcyIpKQoKZG8KICBsb2NhbCBmdW5jdGlvbiBjaGVja1EgKHYpCiAgICBsb2NhbCBzID0gc3RyaW5nLmZvcm1hdCgiJXEiLCB2KQogICAgbG9jYWwgbnYgPSBsb2FkKCJyZXR1cm4gIiAuLiBzKSgpCiAgICBhc3NlcnQodiA9PSBudiBhbmQgbWF0aC50eXBlKHYpID09IG1hdGgudHlwZShudikpCiAgZW5kCiAgY2hlY2tRKCJcMFwwXDFcMjU1XHV7MjM0fSIpCiAgY2hlY2tRKG1hdGgubWF4aW50ZWdlcikKICBjaGVja1EobWF0aC5taW5pbnRlZ2VyKQogIGNoZWNrUShtYXRoLnBpKQogIGNoZWNrUSgwLjEpCiAgY2hlY2tRKHRydWUpCiAgY2hlY2tRKG5pbCkKICBjaGVja1EoZmFsc2UpCiAgY2hlY2tRKG1hdGguaHVnZSkKICBjaGVja1EoLW1hdGguaHVnZSkKICBhc3NlcnQoc3RyaW5nLmZvcm1hdCgiJXEiLCAwLzApID09ICIoMC8wKSIpICAgLS0gTmFOCiAgY2hlY2tlcnJvcigibm8gbGl0ZXJhbCIsIHN0cmluZy5mb3JtYXQsICIlcSIsIHt9KQplbmQKCmFzc2VydChzdHJpbmcuZm9ybWF0KCJcMCVzXDAiLCAiXDBcMFwxIikgPT0gIlwwXDBcMFwxXDAiKQpjaGVja2Vycm9yKCJjb250YWlucyB6ZXJvcyIsIHN0cmluZy5mb3JtYXQsICIlMTBzIiwgIlwwIikKCi0tIGZvcm1hdCB4IHRvc3RyaW5nCmFzc2VydChzdHJpbmcuZm9ybWF0KCIlcyAlcyIsIG5pbCwgdHJ1ZSkgPT0gIm5pbCB0cnVlIikKYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiVzICUuNHMiLCBmYWxzZSwgdHJ1ZSkgPT0gImZhbHNlIHRydWUiKQphc3NlcnQoc3RyaW5nLmZvcm1hdCgiJS4zcyAlLjNzIiwgZmFsc2UsIHRydWUpID09ICJmYWwgdHJ1IikKbG9jYWwgbSA9IHNldG1ldGF0YWJsZSh7fSwge19fdG9zdHJpbmcgPSBmdW5jdGlvbiAoKSByZXR1cm4gImhlbGxvIiBlbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25hbWUgPSAiaGkifSkKYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiVzICUuMTBzIiwgbSwgbSkgPT0gImhlbGxvIGhlbGxvIikKZ2V0bWV0YXRhYmxlKG0pLl9fdG9zdHJpbmcgPSBuaWwgICAtLSB3aWxsIHVzZSAnX19uYW1lJyBmcm9tIG5vdyBvbgphc3NlcnQoc3RyaW5nLmZvcm1hdCgiJS40cyIsIG0pID09ICJoaTogIikKCmdldG1ldGF0YWJsZShtKS5fX3Rvc3RyaW5nID0gZnVuY3Rpb24gKCkgcmV0dXJuIHt9IGVuZApjaGVja2Vycm9yKCInX190b3N0cmluZycgbXVzdCByZXR1cm4gYSBzdHJpbmciLCB0b3N0cmluZywgbSkKCgphc3NlcnQoc3RyaW5nLmZvcm1hdCgiJXgiLCAwLjApID09ICIwIikKYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiUwMngiLCAwLjApID09ICIwMCIpCmFzc2VydChzdHJpbmcuZm9ybWF0KCIlMDhYIiwgMHhGRkZGRkZGRikgPT0gIkZGRkZGRkZGIikKYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiUrMDhkIiwgMzE1MDEpID09ICIrMDAzMTUwMSIpCmFzc2VydChzdHJpbmcuZm9ybWF0KCIlKzA4ZCIsIC0zMDkyNykgPT0gIi0wMDMwOTI3IikKCgpkbyAgICAtLSBsb25nZXN0IG51bWJlciB0aGF0IGNhbiBiZSBmb3JtYXR0ZWQKICBsb2NhbCBpID0gMQogIGxvY2FsIGogPSAxMDAwMAogIHdoaWxlIGkgKyAxIDwgaiBkbyAgIC0tIGJpbmFyeSBzZWFyY2ggZm9yIG1heGltdW0gZmluaXRlIGZsb2F0CiAgICBsb2NhbCBtID0gKGkgKyBqKSAvLyAyCiAgICBpZiAxMF5tIDwgbWF0aC5odWdlIHRoZW4gaSA9IG0gZWxzZSBqID0gbSBlbmQKICBlbmQKICBhc3NlcnQoMTBeaSA8IG1hdGguaHVnZSBhbmQgMTBeaiA9PSBtYXRoLmh1Z2UpCiAgbG9jYWwgcyA9IHN0cmluZy5mb3JtYXQoJyUuOTlmJywgLSgxMF5pKSkKICBhc3NlcnQoc3RyaW5nLmxlbihzKSA+PSBpICsgMTAxKQogIGFzc2VydCh0b251bWJlcihzKSA9PSAtKDEwXmkpKQoKICAtLSBsaW1pdCBmb3IgZmxvYXRzCiAgYXNzZXJ0KDEwXjM4IDwgbWF0aC5odWdlKQogIGxvY2FsIHMgPSBzdHJpbmcuZm9ybWF0KCclLjk5ZicsIC0oMTBeMzgpKQogIGFzc2VydChzdHJpbmcubGVuKHMpID49IDM4ICsgMTAxKQogIGFzc2VydCh0b251bWJlcihzKSA9PSAtKDEwXjM4KSkKZW5kCgoKLS0gdGVzdGluZyBsYXJnZSBudW1iZXJzIGZvciBmb3JtYXQKZG8gICAtLSBhc3N1bWUgYXQgbGVhc3QgMzIgYml0cwogIGxvY2FsIG1heCwgbWluID0gMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDAgICAgLS0gImxhcmdlIiBmb3IgMzIgYml0cwogIGFzc2VydChzdHJpbmcuc3ViKHN0cmluZy5mb3JtYXQoIiU4eCIsIC0xKSwgLTgpID09ICJmZmZmZmZmZiIpCiAgYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiV4IiwgbWF4KSA9PSAiN2ZmZmZmZmYiKQogIGFzc2VydChzdHJpbmcuc3ViKHN0cmluZy5mb3JtYXQoIiV4IiwgbWluKSwgLTgpID09ICI4MDAwMDAwMCIpCiAgYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiVkIiwgbWF4KSA9PSAgIjIxNDc0ODM2NDciKQogIGFzc2VydChzdHJpbmcuZm9ybWF0KCIlZCIsIG1pbikgPT0gIi0yMTQ3NDgzNjQ4IikKICBhc3NlcnQoc3RyaW5nLmZvcm1hdCgiJXUiLCAweGZmZmZmZmZmKSA9PSAiNDI5NDk2NzI5NSIpCiAgYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiVvIiwgMHhBQkNEKSA9PSAiMTI1NzE1IikKCiAgbWF4LCBtaW4gPSAweDdmZmZmZmZmZmZmZmZmZmYsIC0weDgwMDAwMDAwMDAwMDAwMDAKICBpZiBtYXggPiAyLjBeNTMgdGhlbiAgLS0gb25seSBmb3IgNjQgYml0cwogICAgYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiV4IiwgKDJeNTIgfCAwKSAtIDEpID09ICJmZmZmZmZmZmZmZmZmIikKICAgIGFzc2VydChzdHJpbmcuZm9ybWF0KCIweCU4WCIsIDB4OGYwMDAwMDMpID09ICIweDhGMDAwMDAzIikKICAgIGFzc2VydChzdHJpbmcuZm9ybWF0KCIlZCIsIDJeNTMpID09ICI5MDA3MTk5MjU0NzQwOTkyIikKICAgIGFzc2VydChzdHJpbmcuZm9ybWF0KCIlaSIsIC0yXjUzKSA9PSAiLTkwMDcxOTkyNTQ3NDA5OTIiKQogICAgYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiV4IiwgbWF4KSA9PSAiN2ZmZmZmZmZmZmZmZmZmZiIpCiAgICBhc3NlcnQoc3RyaW5nLmZvcm1hdCgiJXgiLCBtaW4pID09ICI4MDAwMDAwMDAwMDAwMDAwIikKICAgIGFzc2VydChzdHJpbmcuZm9ybWF0KCIlZCIsIG1heCkgPT0gICI5MjIzMzcyMDM2ODU0Nzc1ODA3IikKICAgIGFzc2VydChzdHJpbmcuZm9ybWF0KCIlZCIsIG1pbikgPT0gIi05MjIzMzcyMDM2ODU0Nzc1ODA4IikKICAgIGFzc2VydChzdHJpbmcuZm9ybWF0KCIldSIsIH4oLTEgPDwgNjQpKSA9PSAiMTg0NDY3NDQwNzM3MDk1NTE2MTUiKQogICAgYXNzZXJ0KHRvc3RyaW5nKDEyMzQ1Njc4OTAxMjMpID09ICcxMjM0NTY3ODkwMTIzJykKICBlbmQKZW5kCgoKZG8gcHJpbnQoInRlc3RpbmcgJ2Zvcm1hdCAlYSAlQSciKQogIGxvY2FsIGZ1bmN0aW9uIG1hdGNoaGV4YSAobikKICAgIGxvY2FsIHMgPSBzdHJpbmcuZm9ybWF0KCIlYSIsIG4pCiAgICAtLSByZXN1bHQgbWF0Y2hlcyBJU08gQyByZXF1aXJlbWVudHMKICAgIGFzc2VydChzdHJpbmcuZmluZChzLCAiXiUtPzB4WzEtOWEtZl0lLj9bMC05YS1mXSpwWy0rXT8lZCskIikpCiAgICBhc3NlcnQodG9udW1iZXIocykgPT0gbikgIC0tIGFuZCBoYXMgZnVsbCBwcmVjaXNpb24KICAgIHMgPSBzdHJpbmcuZm9ybWF0KCIlQSIsIG4pCiAgICBhc3NlcnQoc3RyaW5nLmZpbmQocywgIl4lLT8wWFsxLTlBLUZdJS4/WzAtOUEtRl0qUFstK10/JWQrJCIpKQogICAgYXNzZXJ0KHRvbnVtYmVyKHMpID09IG4pCiAgZW5kCiAgZm9yIF8sIG4gaW4gaXBhaXJzezAuMSwgLTAuMSwgMS8zLCAtMS8zLCAxZTMwLCAtMWUzMCwKICAgICAgICAgICAgICAgICAgICAgLTQ1LzI0NywgMSwgLTEsIDIsIC0yLCAzZS0yMCwgLTNlLTIwfSBkbwogICAgbWF0Y2hoZXhhKG4pCiAgZW5kCgogIGFzc2VydChzdHJpbmcuZmluZChzdHJpbmcuZm9ybWF0KCIlQSIsIDAuMCksICJeMFgwJS4/MCpQJSs/MCQiKSkKICBhc3NlcnQoc3RyaW5nLmZpbmQoc3RyaW5nLmZvcm1hdCgiJWEiLCAtMC4wKSwgIl4lLTB4MCUuPzAqcCUrPzAkIikpCgogIGlmIG5vdCBfcG9ydCB0aGVuICAgLS0gdGVzdCBpbmYsIC1pbmYsIE5hTiwgYW5kIC0wLjAKICAgIGFzc2VydChzdHJpbmcuZmluZChzdHJpbmcuZm9ybWF0KCIlYSIsIDEvMCksICJeaW5mIikpCiAgICBhc3NlcnQoc3RyaW5nLmZpbmQoc3RyaW5nLmZvcm1hdCgiJUEiLCAtMS8wKSwgIl4lLUlORiIpKQogICAgYXNzZXJ0KHN0cmluZy5maW5kKHN0cmluZy5mb3JtYXQoIiVhIiwgMC8wKSwgIl4lLT9uYW4iKSkKICAgIGFzc2VydChzdHJpbmcuZmluZChzdHJpbmcuZm9ybWF0KCIlYSIsIC0wLjApLCAiXiUtMHgwIikpCiAgZW5kCiAgCiAgaWYgbm90IHBjYWxsKHN0cmluZy5mb3JtYXQsICIlLjNhIiwgMCkgdGhlbgogICAgKE1lc3NhZ2Ugb3IgcHJpbnQpKCJcbiA+Pj4gbW9kaWZpZXJzIGZvciBmb3JtYXQgJyVhJyBub3QgYXZhaWxhYmxlIDw8PFxuIikKICBlbHNlCiAgICBhc3NlcnQoc3RyaW5nLmZpbmQoc3RyaW5nLmZvcm1hdCgiJSsuMkEiLCAxMiksICJeJSswWCV4JS4leDBQJSs/JWQkIikpCiAgICBhc3NlcnQoc3RyaW5nLmZpbmQoc3RyaW5nLmZvcm1hdCgiJS40QSIsIC0xMiksICJeJS0wWCV4JS4leDAwMFAlKz8lZCQiKSkKICBlbmQKZW5kCgoKLS0gdGVzdGluZyBzb21lIGZsYWdzICAoYWxsIHRoZXNlIHJlc3VsdHMgYXJlIHJlcXVpcmVkIGJ5IElTTyBDKQphc3NlcnQoc3RyaW5nLmZvcm1hdCgiJSMxMm8iLCAxMCkgPT0gIiAgICAgICAgIDAxMiIpCmFzc2VydChzdHJpbmcuZm9ybWF0KCIlIzEweCIsIDEwMCkgPT0gIiAgICAgIDB4NjQiKQphc3NlcnQoc3RyaW5nLmZvcm1hdCgiJSMtMTdYIiwgMTAwKSA9PSAiMFg2NCAgICAgICAgICAgICAiKQphc3NlcnQoc3RyaW5nLmZvcm1hdCgiJTAxM2kiLCAtMTAwKSA9PSAiLTAwMDAwMDAwMDEwMCIpCmFzc2VydChzdHJpbmcuZm9ybWF0KCIlMi41ZCIsIC0xMDApID09ICItMDAxMDAiKQphc3NlcnQoc3RyaW5nLmZvcm1hdCgiJS51IiwgMCkgPT0gIiIpCmFzc2VydChzdHJpbmcuZm9ybWF0KCIlKyMwMTQuMGYiLCAxMDApID09ICIrMDAwMDAwMDAwMTAwLiIpCmFzc2VydChzdHJpbmcuZm9ybWF0KCIlLTE2YyIsIDk3KSA9PSAiYSAgICAgICAgICAgICAgICIpCmFzc2VydChzdHJpbmcuZm9ybWF0KCIlKy4zRyIsIDEuNSkgPT0gIisxLjUiKQphc3NlcnQoc3RyaW5nLmZvcm1hdCgiJS4wcyIsICJhbG8iKSAgPT0gIiIpCmFzc2VydChzdHJpbmcuZm9ybWF0KCIlLnMiLCAiYWxvIikgID09ICIiKQoKLS0gSVNPIEM4OSBzYXlzIHRoYXQgIlRoZSBleHBvbmVudCBhbHdheXMgY29udGFpbnMgYXQgbGVhc3QgdHdvIGRpZ2l0cyIsCi0tIGJ1dCB1bmxpa2UgSVNPIEM5OSBpdCBkb2VzIG5vdCBlbnN1cmUgdGhhdCBpdCBjb250YWlucyAib25seSBhcyBtYW55Ci0tIG1vcmUgZGlnaXRzIGFzIG5lY2Vzc2FyeSIuCmFzc2VydChzdHJpbmcubWF0Y2goc3RyaW5nLmZvcm1hdCgiJSAxLjBFIiwgMTAwKSwgIl4gMUUlKzArMiQiKSkKYXNzZXJ0KHN0cmluZy5tYXRjaChzdHJpbmcuZm9ybWF0KCIlIC4xZyIsIDJeMTApLCAiXiAxZSUrMCszJCIpKQoKCi0tIGVycm9ycyBpbiBmb3JtYXQKCmxvY2FsIGZ1bmN0aW9uIGNoZWNrIChmbXQsIG1zZykKICBjaGVja2Vycm9yKG1zZywgc3RyaW5nLmZvcm1hdCwgZm10LCAxMCkKZW5kCgpsb2NhbCBhdXggPSBzdHJpbmcucmVwKCcwJywgNjAwKQpjaGVjaygiJTEwMC4zZCIsICJpbnZhbGlkIGNvbnZlcnNpb24iKQpjaGVjaygiJTEiLi5hdXguLiIuM2QiLCAidG9vIGxvbmciKQpjaGVjaygiJTEuMTAwZCIsICJpbnZhbGlkIGNvbnZlcnNpb24iKQpjaGVjaygiJTEwLjEiLi5hdXguLiIwMDRkIiwgInRvbyBsb25nIikKY2hlY2soIiV0IiwgImludmFsaWQgY29udmVyc2lvbiIpCmNoZWNrKCIlIi4uYXV4Li4iZCIsICJ0b28gbG9uZyIpCmNoZWNrKCIlZCAlZCIsICJubyB2YWx1ZSIpCmNoZWNrKCIlMDEwYyIsICJpbnZhbGlkIGNvbnZlcnNpb24iKQpjaGVjaygiJS4xMGMiLCAiaW52YWxpZCBjb252ZXJzaW9uIikKY2hlY2soIiUwLjM0cyIsICJpbnZhbGlkIGNvbnZlcnNpb24iKQpjaGVjaygiJSNpIiwgImludmFsaWQgY29udmVyc2lvbiIpCmNoZWNrKCIlMy4xcCIsICJpbnZhbGlkIGNvbnZlcnNpb24iKQpjaGVjaygiJTAucyIsICJpbnZhbGlkIGNvbnZlcnNpb24iKQpjaGVjaygiJTEwcSIsICJjYW5ub3QgaGF2ZSBtb2RpZmllcnMiKQpjaGVjaygiJUYiLCAiaW52YWxpZCBjb252ZXJzaW9uIikgICAtLSB1c2VsZXNzIGFuZCBub3QgaW4gQzg5CgoKYXNzZXJ0KGxvYWQoInJldHVybiAxXG4tLWNvbW1lbnQgd2l0aG91dCBlbmRpbmcgRU9MIikoKSA9PSAxKQoKCmNoZWNrZXJyb3IoInRhYmxlIGV4cGVjdGVkIiwgdGFibGUuY29uY2F0LCAzKQpjaGVja2Vycm9yKCJhdCBpbmRleCAiIC4uIG1heGksIHRhYmxlLmNvbmNhdCwge30sICIgIiwgbWF4aSwgbWF4aSkKLS0gJyUnIGVzY2FwZXMgZm9sbG93aW5nIG1pbnVzIHNpZ25hbApjaGVja2Vycm9yKCJhdCBpbmRleCAlIiAuLiBtaW5pLCB0YWJsZS5jb25jYXQsIHt9LCAiICIsIG1pbmksIG1pbmkpCmFzc2VydCh0YWJsZS5jb25jYXR7fSA9PSAiIikKYXNzZXJ0KHRhYmxlLmNvbmNhdCh7fSwgJ3gnKSA9PSAiIikKYXNzZXJ0KHRhYmxlLmNvbmNhdCh7J1wwJywgJ1wwXDEnLCAnXDBcMVwyJ30sICcuXDAuJykgPT0gIlwwLlwwLlwwXDEuXDAuXDBcMVwyIikKbG9jYWwgYSA9IHt9OyBmb3IgaT0xLDMwMCBkbyBhW2ldID0gInh1eHUiIGVuZAphc3NlcnQodGFibGUuY29uY2F0KGEsICIxMjMiKS4uIjEyMyIgPT0gc3RyaW5nLnJlcCgieHV4dTEyMyIsIDMwMCkpCmFzc2VydCh0YWJsZS5jb25jYXQoYSwgImIiLCAyMCwgMjApID09ICJ4dXh1IikKYXNzZXJ0KHRhYmxlLmNvbmNhdChhLCAiIiwgMjAsIDIxKSA9PSAieHV4dXh1eHUiKQphc3NlcnQodGFibGUuY29uY2F0KGEsICJ4IiwgMjIsIDIxKSA9PSAiIikKYXNzZXJ0KHRhYmxlLmNvbmNhdChhLCAiMyIsIDI5OSkgPT0gInh1eHUzeHV4dSIpCmFzc2VydCh0YWJsZS5jb25jYXQoe30sICJ4IiwgbWF4aSwgbWF4aSAtIDEpID09ICIiKQphc3NlcnQodGFibGUuY29uY2F0KHt9LCAieCIsIG1pbmkgKyAxLCBtaW5pKSA9PSAiIikKYXNzZXJ0KHRhYmxlLmNvbmNhdCh7fSwgIngiLCBtYXhpLCBtaW5pKSA9PSAiIikKYXNzZXJ0KHRhYmxlLmNvbmNhdCh7W21heGldID0gImFsbyJ9LCAieCIsIG1heGksIG1heGkpID09ICJhbG8iKQphc3NlcnQodGFibGUuY29uY2F0KHtbbWF4aV0gPSAiYWxvIiwgW21heGkgLSAxXSA9ICJ5In0sICItIiwgbWF4aSAtIDEsIG1heGkpCiAgICAgICA9PSAieS1hbG8iKQoKYXNzZXJ0KG5vdCBwY2FsbCh0YWJsZS5jb25jYXQsIHsiYSIsICJiIiwge319KSkKCmEgPSB7ImEiLCJiIiwiYyJ9CmFzc2VydCh0YWJsZS5jb25jYXQoYSwgIiwiLCAxLCAwKSA9PSAiIikKYXNzZXJ0KHRhYmxlLmNvbmNhdChhLCAiLCIsIDEsIDEpID09ICJhIikKYXNzZXJ0KHRhYmxlLmNvbmNhdChhLCAiLCIsIDEsIDIpID09ICJhLGIiKQphc3NlcnQodGFibGUuY29uY2F0KGEsICIsIiwgMikgPT0gImIsYyIpCmFzc2VydCh0YWJsZS5jb25jYXQoYSwgIiwiLCAzKSA9PSAiYyIpCmFzc2VydCh0YWJsZS5jb25jYXQoYSwgIiwiLCA0KSA9PSAiIikKCmlmIG5vdCBfcG9ydCB0aGVuCgogIGxvY2FsIGxvY2FsZXMgPSB7ICJwdGIiLCAicHRfQlIuaXNvODg1OTEiLCAiSVNPLTg4NTktMSIgfQogIGxvY2FsIGZ1bmN0aW9uIHRyeWxvY2FsZSAodykKICAgIGZvciBpID0gMSwgI2xvY2FsZXMgZG8KICAgICAgaWYgb3Muc2V0bG9jYWxlKGxvY2FsZXNbaV0sIHcpIHRoZW4KICAgICAgICBwcmludChzdHJpbmcuZm9ybWF0KCInJXMnIGxvY2FsZSBzZXQgdG8gJyVzJyIsIHcsIGxvY2FsZXNbaV0pKQogICAgICAgIHJldHVybiBsb2NhbGVzW2ldCiAgICAgIGVuZAogICAgZW5kCiAgICBwcmludChzdHJpbmcuZm9ybWF0KCInJXMnIGxvY2FsZSBub3QgZm91bmQiLCB3KSkKICAgIHJldHVybiBmYWxzZQogIGVuZAoKICBpZiB0cnlsb2NhbGUoImNvbGxhdGUiKSAgdGhlbgogICAgYXNzZXJ0KCJhbG8iIDwgIuFsbyIgYW5kICLhbG8iIDwgImFtbyIpCiAgZW5kCgogIGlmIHRyeWxvY2FsZSgiY3R5cGUiKSB0aGVuCiAgICBhc3NlcnQoc3RyaW5nLmdzdWIoIuHp7fP6IiwgIiVhIiwgIngiKSA9PSAieHh4eHgiKQogICAgYXNzZXJ0KHN0cmluZy5nc3ViKCLhwenJIiwgIiVsIiwgIngiKSA9PSAieMF4ySIpCiAgICBhc3NlcnQoc3RyaW5nLmdzdWIoIuHB6ckiLCAiJXUiLCAieCIpID09ICLheOl4IikKICAgIGFzc2VydChzdHJpbmcudXBwZXIi4cHpe3h1eHV95+NvIiA9PSAiwcHJe1hVWFV9x8NPIikKICBlbmQKCiAgb3Muc2V0bG9jYWxlKCJDIikKICBhc3NlcnQob3Muc2V0bG9jYWxlKCkgPT0gJ0MnKQogIGFzc2VydChvcy5zZXRsb2NhbGUobmlsLCAibnVtZXJpYyIpID09ICdDJykKCmVuZAoKCi0tIGJ1ZyBpbiBMdWEgNS4zLjIKLS0gJ2dtYXRjaCcgaXRlcmF0b3IgZG9lcyBub3Qgd29yayBhY3Jvc3MgY29yb3V0aW5lcwpkbwogIGxvY2FsIGYgPSBzdHJpbmcuZ21hdGNoKCIxIDIgMyA0IDUiLCAiJWQrIikKICBhc3NlcnQoZigpID09ICIxIikKICBsb2NhbCBjbyA9IGNvcm91dGluZS53cmFwKGYpCiAgYXNzZXJ0KGNvKCkgPT0gIjIiKQplbmQKCgppZiBUPT1uaWwgdGhlbgogIChNZXNzYWdlIG9yIHByaW50KQogICAgICgiXG4gPj4+IHRlc3RDIG5vdCBhY3RpdmU6IHNraXBwaW5nICdwdXNoZnN0cmluZycgdGVzdHMgPDw8XG4iKQplbHNlCgogIHByaW50InRlc3RpbmcgJ3B1c2hmc3RyaW5nJyIKCiAgLS0gZm9ybWF0cyAlVSwgJWYsICVJIGFscmVhZHkgdGVzdGVkIGVsc2V3aGVyZQoKICBsb2NhbCBibGVuID0gMjAwICAgIC0tIGludGVybmFsIGJ1ZmZlciBsZW5ndGggaW4gJ2x1YU9fcHVzaGZzdHJpbmcnCgogIGxvY2FsIGZ1bmN0aW9uIGNhbGxwZnMgKG9wLCBmbXQsIG4pCiAgICBsb2NhbCB4ID0ge1QudGVzdEMoInB1c2hmc3RyaW5nIiAuLiBvcCAuLiAiOyByZXR1cm4gKiIsIGZtdCwgbil9CiAgICAtLSBzdGFjayBoYXMgY29kZSwgJ2ZtdCcsICduJywgYW5kIHJlc3VsdCBmcm9tIG9wZXJhdGlvbgogICAgYXNzZXJ0KCN4ID09IDQpICAtLSBtYWtlIHN1cmUgbm90aGluZyBlbHNlIHdhcyBsZWZ0IGluIHRoZSBzdGFjawogICAgcmV0dXJuIHhbNF0KICBlbmQKCiAgbG9jYWwgZnVuY3Rpb24gdGVzdHBmcyAob3AsIGZtdCwgbikKICAgIGFzc2VydChjYWxscGZzKG9wLCBmbXQsIG4pID09IHN0cmluZy5mb3JtYXQoZm10LCBuKSkKICBlbmQKCiAgdGVzdHBmcygiSSIsICIiLCAwKQogIHRlc3RwZnMoIkkiLCBzdHJpbmcucmVwKCJhIiwgYmxlbiAtIDEpLCAwKQogIHRlc3RwZnMoIkkiLCBzdHJpbmcucmVwKCJhIiwgYmxlbiksIDApCiAgdGVzdHBmcygiSSIsIHN0cmluZy5yZXAoImEiLCBibGVuICsgMSksIDApCgogIGxvY2FsIHN0ciA9IHN0cmluZy5yZXAoImFiIiwgYmxlbikgLi4gIiVkIiAuLiBzdHJpbmcucmVwKCJkIiwgYmxlbiAvIDIpCiAgdGVzdHBmcygiSSIsIHN0ciwgMl4xNCkKICB0ZXN0cGZzKCJJIiwgc3RyLCAtMl4xNSkKCiAgc3RyID0gIiVkIiAuLiBzdHJpbmcucmVwKCJjZCIsIGJsZW4pCiAgdGVzdHBmcygiSSIsIHN0ciwgMl4xNCkKICB0ZXN0cGZzKCJJIiwgc3RyLCAtMl4xNSkKCiAgc3RyID0gc3RyaW5nLnJlcCgiYyIsIGJsZW4gLSAyKSAuLiAiJWQiCiAgdGVzdHBmcygiSSIsIHN0ciwgMl4xNCkKICB0ZXN0cGZzKCJJIiwgc3RyLCAtMl4xNSkKCiAgZm9yIGwgPSAxMiwgMTQgZG8KICAgIGxvY2FsIHN0cjEgPSBzdHJpbmcucmVwKCJhIiwgbCkKICAgIGZvciBpID0gMCwgNTAwLCAxMyBkbwogICAgICBmb3IgaiA9IDAsIDUwMCwgMTMgZG8KICAgICAgICBzdHIgPSBzdHJpbmcucmVwKCJhIiwgaSkgLi4gIiVzIiAuLiBzdHJpbmcucmVwKCJkIiwgaikKICAgICAgICB0ZXN0cGZzKCJTIiwgc3RyLCBzdHIxKQogICAgICAgIHRlc3RwZnMoIlMiLCBzdHIsIHN0cikKICAgICAgZW5kCiAgICBlbmQKICBlbmQKCiAgc3RyID0gImFiYyAlYyBkZWYiCiAgdGVzdHBmcygiSSIsIHN0ciwgc3RyaW5nLmJ5dGUoIkEiKSkKICB0ZXN0cGZzKCJJIiwgc3RyLCAyNTUpCgogIHN0ciA9IHN0cmluZy5yZXAoImEiLCBibGVuIC0gMSkgLi4gIiVwIiAuLiBzdHJpbmcucmVwKCJjZCIsIGJsZW4pCiAgdGVzdHBmcygiUCIsIHN0ciwge30pCgogIHN0ciA9IHN0cmluZy5yZXAoIiUlIiwgMyAqIGJsZW4pIC4uICIlcCIgLi4gc3RyaW5nLnJlcCgiJSUiLCAyICogYmxlbikKICB0ZXN0cGZzKCJQIiwgc3RyLCB7fSkKZW5kCgppZiBUID09IG5pbCB0aGVuCiAgKE1lc3NhZ2Ugb3IgcHJpbnQpKCdcbiA+Pj4gdGVzdEMgbm90IGFjdGl2ZTogc2tpcHBpbmcgZXh0ZXJuYWwgc3RyaW5ncyB0ZXN0cyA8PDxcbicpCmVsc2UKICBwcmludCgidGVzdGluZyBleHRlcm5hbCBzdHJpbmdzIikKICBsb2NhbCB4ID0gVC5leHRlcm5Lc3RyKCJoZWxsbyIpICAgLS0gZXh0ZXJuYWwgZml4ZWQgc2hvcnQgc3RyaW5nCiAgYXNzZXJ0KHggPT0gImhlbGxvIikKICBsb2NhbCB4ID0gVC5leHRlcm5zdHIoImhlbGxvIikgICAtLSBleHRlcm5hbCBhbGxvY2F0ZWQgc2hvcnQgc3RyaW5nCiAgYXNzZXJ0KHggPT0gImhlbGxvIikKICB4ID0gc3RyaW5nLnJlcCgiYSIsIDEwMCkgICAtLSBsb25nIHN0cmluZwogIGxvY2FsIHkgPSBULmV4dGVybktzdHIoeCkgICAtLSBleHRlcm5hbCBmaXhlZCBsb25nIHN0cmluZwogIGFzc2VydCh5ID09IHgpCiAgbG9jYWwgeiA9IFQuZXh0ZXJuc3RyKHgpICAgLS0gZXh0ZXJuYWwgYWxsb2NhdGVkIGxvbmcgc3RyaW5nCiAgYXNzZXJ0KHogPT0geSkKZW5kCgpwcmludCgnT0snKQoK