IiBUZXN0cyBmb3IgcmVnZXhwIGluIHV0ZjggZW5jb2RpbmcKCmZ1bmMgczplcXVpdmFsZW5jZV90ZXN0KCkKICBsZXQgc3RyID0gIkHDgMOBw4LDg8OEw4XEgMSCxITHjceex6DhuqIgQuG4guG4hiBDw4fEhsSIxIrEjCBExI7EkOG4iuG4juG4kCBFw4jDicOKw4vEksSUxJbEmMSa4bq64bq8IEbhuJ4gR8ScxJ7EoMSix6THpse04bigIEjEpMSm4bii4bim4bioIEnDjMONw47Dj8SoxKrErMSuxLDHj+G7iCBKxLQgS8S2x6jhuLDhuLQgTMS5xLvEvcS/xYHhuLogTeG4vuG5gCBOw5HFg8WFxYfhuYThuYggT8OSw5PDlMOVw5bDmMWMxY7FkMagx5HHqses4buOIFDhuZThuZYgUSBSxZTFlsWY4bmY4bmeIFPFmsWcxZ7FoOG5oCBUxaLFpMWm4bmq4bmuIFXDmcOaw5vDnMWoxarFrMWuxbDFssavx5Phu6YgVuG5vCBXxbThuoDhuoLhuoThuoYgWOG6iuG6jCBZw53FtsW44bqO4buy4bu24bu4IFrFucW7xb3GteG6kOG6lCBhw6DDocOiw6PDpMOlxIHEg8SFx47Hn8eh4bqjIGLhuIPhuIcgY8OnxIfEicSLxI0gZMSPxJHhuIvhuI/huJEgZcOow6nDqsOrxJPElcSXxJnEm+G6u+G6vSBm4bifIGfEncSfxKHEo8elx6fHteG4oSBoxKXEp+G4o+G4p+G4qeG6liBpw6zDrcOuw6/EqcSrxK3Er8eQ4buJIGrEtcewIGvEt8ep4bix4bi1IGzEusS8xL7FgMWC4bi7IG3huL/huYEgbsOxxYTFhsWIxYnhuYXhuYkgb8Oyw7PDtMO1w7bDuMWNxY/Fkcahx5LHq8et4buPIHDhuZXhuZcgcSByxZXFl8WZ4bmZ4bmfIHPFm8WdxZ/FoeG5oSB0xaPFpcWn4bmr4bmv4bqXIHXDucO6w7vDvMWpxavFrcWvxbHFs8awx5Thu6cgduG5vSB3xbXhuoHhuoPhuoXhuofhupggeOG6i+G6jSB5w73Dv8W34bqP4bqZ4buz4bu34bu5IHrFusW8xb7GtuG6keG6lSIKICBsZXQgZ3JvdXBzID0gc3BsaXQoc3RyKQogIGZvciBncm91cDEgaW4gZ3JvdXBzCiAgICAgIGZvciBjIGluIHNwbGl0KGdyb3VwMSwgJ1x6cycpCgkiIG5leHQgc3RhdGVtZW50IGNvbmZpcm1zIHRoYXQgZXF1aXZhbGVuY2UgY2xhc3MgbWF0Y2hlcyBldmVyeQoJIiBjaGFyYWN0ZXIgaW4gZ3JvdXAKICAgICAgICBjYWxsIGFzc2VydF9tYXRjaCgnXltbPScgLiBjIC4gJz1dXSokJywgZ3JvdXAxKQogICAgICAgIGZvciBncm91cDIgaW4gZ3JvdXBzCiAgICAgICAgICBpZiBncm91cDIgIT0gZ3JvdXAxCgkgICAgIiBuZXh0IHN0YXRlbWVudCBjb252ZXJ0cyB0aGF0IGVxdWl2YWxlbmNlIGNsYXNzIGRvZXNuJ3QgbWF0Y2gKCSAgICAiIGNoYXJhY3RlciBpbiBhbnkgb3RoZXIgZ3JvdXAKICAgICAgICAgICAgY2FsbCBhc3NlcnRfZXF1YWwoLTEsIG1hdGNoKGdyb3VwMiwgJ1tbPScgLiBjIC4gJz1dXScpKQogICAgICAgICAgZW5kaWYKICAgICAgICBlbmRmb3IKICAgICAgZW5kZm9yCiAgZW5kZm9yCmVuZGZ1bmMKCmZ1bmMgVGVzdF9lcXVpdmFsZW5jZV9yZTEoKQogIHNldCByZT0xCiAgY2FsbCBzOmVxdWl2YWxlbmNlX3Rlc3QoKQogIHNldCByZT0wCmVuZGZ1bmMKCmZ1bmMgVGVzdF9lcXVpdmFsZW5jZV9yZTIoKQogIHNldCByZT0yCiAgY2FsbCBzOmVxdWl2YWxlbmNlX3Rlc3QoKQogIHNldCByZT0wCmVuZGZ1bmMKCmZ1bmMgczpjbGFzc2VzX3Rlc3QoKQogIGlmIGhhcygnd2luMzInKQogICAgc2V0IGlza2V5d29yZD1ALDQ4LTU3LF8sMTkyLTI1NQogIGVuZGlmCiAgc2V0IGlzcHJpbnQ9QCwxNjEtMjU1CiAgY2FsbCBhc3NlcnRfZXF1YWwoJ01vdMO2cmhlYWQnLCBtYXRjaHN0cignTW90w7ZyaGVhZCcsICdbWzpwcmludDpdXVwrJykpCgogIGxldCBhbG51bWNoYXJzID0gJycKICBsZXQgYWxwaGFjaGFycyA9ICcnCiAgbGV0IGJhY2tzcGFjZWNoYXIgPSAnJwogIGxldCBibGFua2NoYXJzID0gJycKICBsZXQgY250cmxjaGFycyA9ICcnCiAgbGV0IGRpZ2l0Y2hhcnMgPSAnJwogIGxldCBlc2NhcGVjaGFyID0gJycKICBsZXQgZ3JhcGhjaGFycyA9ICcnCiAgbGV0IGxvd2VyY2hhcnMgPSAnJwogIGxldCBwcmludGNoYXJzID0gJycKICBsZXQgcHVuY3RjaGFycyA9ICcnCiAgbGV0IHJldHVybmNoYXIgPSAnJwogIGxldCBzcGFjZWNoYXJzID0gJycKICBsZXQgdGFiY2hhciA9ICcnCiAgbGV0IHVwcGVyY2hhcnMgPSAnJwogIGxldCB4ZGlnaXRjaGFycyA9ICcnCiAgbGV0IGlkZW50Y2hhcnMgPSAnJwogIGxldCBpZGVudGNoYXJzMSA9ICcnCiAgbGV0IGt3b3JkY2hhcnMgPSAnJwogIGxldCBrd29yZGNoYXJzMSA9ICcnCiAgbGV0IGZuYW1lY2hhcnMgPSAnJwogIGxldCBmbmFtZWNoYXJzMSA9ICcnCiAgbGV0IGkgPSAxCiAgd2hpbGUgaSA8PSAyNTUKICAgIGxldCBjID0gbnIyY2hhcihpKQogICAgaWYgYyA9fiAnW1s6YWxwaGE6XV0nCiAgICAgIGxldCBhbHBoYWNoYXJzIC49IGMKICAgIGVuZGlmCiAgICBpZiBjID1+ICdbWzphbG51bTpdXScKICAgICAgbGV0IGFsbnVtY2hhcnMgLj0gYwogICAgZW5kaWYKICAgIGlmIGMgPX4gJ1tbOmJhY2tzcGFjZTpdXScKICAgICAgbGV0IGJhY2tzcGFjZWNoYXIgLj0gYwogICAgZW5kaWYKICAgIGlmIGMgPX4gJ1tbOmJsYW5rOl1dJwogICAgICBsZXQgYmxhbmtjaGFycyAuPSBjCiAgICBlbmRpZgogICAgaWYgYyA9fiAnW1s6Y250cmw6XV0nCiAgICAgIGxldCBjbnRybGNoYXJzIC49IGMKICAgIGVuZGlmCiAgICBpZiBjID1+ICdbWzpkaWdpdDpdXScKICAgICAgbGV0IGRpZ2l0Y2hhcnMgLj0gYwogICAgZW5kaWYKICAgIGlmIGMgPX4gJ1tbOmVzY2FwZTpdXScKICAgICAgbGV0IGVzY2FwZWNoYXIgLj0gYwogICAgZW5kaWYKICAgIGlmIGMgPX4gJ1tbOmdyYXBoOl1dJwogICAgICBsZXQgZ3JhcGhjaGFycyAuPSBjCiAgICBlbmRpZgogICAgaWYgYyA9fiAnW1s6bG93ZXI6XV0nCiAgICAgIGxldCBsb3dlcmNoYXJzIC49IGMKICAgIGVuZGlmCiAgICBpZiBjID1+ICdbWzpwcmludDpdXScKICAgICAgbGV0IHByaW50Y2hhcnMgLj0gYwogICAgZW5kaWYKICAgIGlmIGMgPX4gJ1tbOnB1bmN0Ol1dJwogICAgICBsZXQgcHVuY3RjaGFycyAuPSBjCiAgICBlbmRpZgogICAgaWYgYyA9fiAnW1s6cmV0dXJuOl1dJwogICAgICBsZXQgcmV0dXJuY2hhciAuPSBjCiAgICBlbmRpZgogICAgaWYgYyA9fiAnW1s6c3BhY2U6XV0nCiAgICAgIGxldCBzcGFjZWNoYXJzIC49IGMKICAgIGVuZGlmCiAgICBpZiBjID1+ICdbWzp0YWI6XV0nCiAgICAgIGxldCB0YWJjaGFyIC49IGMKICAgIGVuZGlmCiAgICBpZiBjID1+ICdbWzp1cHBlcjpdXScKICAgICAgbGV0IHVwcGVyY2hhcnMgLj0gYwogICAgZW5kaWYKICAgIGlmIGMgPX4gJ1tbOnhkaWdpdDpdXScKICAgICAgbGV0IHhkaWdpdGNoYXJzIC49IGMKICAgIGVuZGlmCiAgICBpZiBjID1+ICdbWzppZGVudDpdXScKICAgICAgbGV0IGlkZW50Y2hhcnMgLj0gYwogICAgZW5kaWYKICAgIGlmIGMgPX4gJ1xpJwogICAgICBsZXQgaWRlbnRjaGFyczEgLj0gYwogICAgZW5kaWYKICAgIGlmIGMgPX4gJ1tbOmtleXdvcmQ6XV0nCiAgICAgIGxldCBrd29yZGNoYXJzIC49IGMKICAgIGVuZGlmCiAgICBpZiBjID1+ICdcaycKICAgICAgbGV0IGt3b3JkY2hhcnMxIC49IGMKICAgIGVuZGlmCiAgICBpZiBjID1+ICdbWzpmbmFtZTpdXScKICAgICAgbGV0IGZuYW1lY2hhcnMgLj0gYwogICAgZW5kaWYKICAgIGlmIGMgPX4gJ1xmJwogICAgICBsZXQgZm5hbWVjaGFyczEgLj0gYwogICAgZW5kaWYKICAgIGxldCBpICs9IDEKICBlbmR3aGlsZQoKICBjYWxsIGFzc2VydF9lcXVhbCgnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicsIGFscGhhY2hhcnMpCiAgY2FsbCBhc3NlcnRfZXF1YWwoJzAxMjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JywgYWxudW1jaGFycykKICBjYWxsIGFzc2VydF9lcXVhbCgiXGIiLCBiYWNrc3BhY2VjaGFyKQogIGNhbGwgYXNzZXJ0X2VxdWFsKCJcdCAiLCBibGFua2NoYXJzKQogIGNhbGwgYXNzZXJ0X2VxdWFsKCJceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHgwYlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXGVceDFjXHgxZFx4MWVceDFmXHg3ZiIsIGNudHJsY2hhcnMpCiAgY2FsbCBhc3NlcnRfZXF1YWwoIjAxMjM0NTY3ODkiLCBkaWdpdGNoYXJzKQogIGNhbGwgYXNzZXJ0X2VxdWFsKCJcPEVzYz4iLCBlc2NhcGVjaGFyKQogIGNhbGwgYXNzZXJ0X2VxdWFsKCchIiMkJSYnJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9ficsIGdyYXBoY2hhcnMpCiAgY2FsbCBhc3NlcnRfZXF1YWwoJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6wrXDn8Ogw6HDosOjw6TDpcOmw6fDqMOpw6rDq8Osw63DrsOvw7DDscOyw7PDtMO1w7bDuMO5w7rDu8O8w73DvsO/JywgbG93ZXJjaGFycykKICBjYWxsIGFzc2VydF9lcXVhbCgnICEiIyQlJicnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+wqDCocKiwqPCpMKlwqbCp8KowqnCqsKrwqzCrcKuwq/CsMKxwrLCs8K0wrXCtsK3wrjCucK6wrvCvMK9wr7Cv8OAw4HDgsODw4TDhcOGw4fDiMOJw4rDi8OMw43DjsOPw5DDkcOSw5PDlMOVw5bDl8OYw5nDmsObw5zDncOew5/DoMOhw6LDo8Okw6XDpsOnw6jDqcOqw6vDrMOtw67Dr8Oww7HDssOzw7TDtcO2w7fDuMO5w7rDu8O8w73DvsO/JywgcHJpbnRjaGFycykKICBjYWxsIGFzc2VydF9lcXVhbCgnISIjJCUmJycoKSorLC0uLzo7PD0+P0BbXF1eX2B7fH1+JywgcHVuY3RjaGFycykKICBjYWxsIGFzc2VydF9lcXVhbCgnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVrDgMOBw4LDg8OEw4XDhsOHw4jDicOKw4vDjMONw47Dj8OQw5HDksOTw5TDlcOWw5jDmcOaw5vDnMOdw54nLCB1cHBlcmNoYXJzKQogIGNhbGwgYXNzZXJ0X2VxdWFsKCJcciIsIHJldHVybmNoYXIpCiAgY2FsbCBhc3NlcnRfZXF1YWwoIlx0XG5ceDBiXGZcciAiLCBzcGFjZWNoYXJzKQogIGNhbGwgYXNzZXJ0X2VxdWFsKCJcdCIsIHRhYmNoYXIpCiAgY2FsbCBhc3NlcnRfZXF1YWwoJzAxMjM0NTY3ODlBQkNERUZhYmNkZWYnLCB4ZGlnaXRjaGFycykKCiAgaWYgaGFzKCd3aW4zMicpCiAgICBsZXQgaWRlbnRjaGFyc19vayA9ICcwMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXrCgMKBwoLCg8KEwoXChsKHwojCicKKwovCjMKNwo7Cj8KQwpHCksKTwpTClcKWwpfCmMKZwprCm8Kcwp3CnsKfwqDCocKiwqPCpMKlwqbCp8K1w4DDgcOCw4PDhMOFw4bDh8OIw4nDisOLw4zDjcOOw4/DkMORw5LDk8OUw5XDlsOYw5nDmsObw5zDncOew5/DoMOhw6LDo8Okw6XDpsOnw6jDqcOqw6vDrMOtw67Dr8Oww7HDssOzw7TDtcO2w7jDucO6w7vDvMO9w77DvycKICAgIGxldCBrd29yZGNoYXJzX29rID0gJzAxMjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5esK1w4DDgcOCw4PDhMOFw4bDh8OIw4nDisOLw4zDjcOOw4/DkMORw5LDk8OUw5XDlsOXw5jDmcOaw5vDnMOdw57Dn8Ogw6HDosOjw6TDpcOmw6fDqMOpw6rDq8Osw63DrsOvw7DDscOyw7PDtMO1w7bDt8O4w7nDusO7w7zDvcO+w78nCiAgZWxzZWlmIGhhcygnZWJjZGljJykKICAgIGxldCBpZGVudGNoYXJzX29rID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6woDCjMKNwo7CnMKewqzCrsK1wrrCv8OAw4HDgsODw4TDhcOGw4fDiMOJw4rDi8OMw43DjsOPw5DDkcOSw5PDlMOVw5bDmMOZw5rDm8Ocw53DnsOfw6DDocOiw6PDpMOlw6bDp8Oow6nDqsOrw6zDrcOuw6/DsMOxw7LDs8O0w7XDtsO3w7jDucO6w7vDvMO9w77DvycKICAgIGxldCBrd29yZGNoYXJzX29rID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6woDCjMKNwo7CnMKewqzCrsK1wrrCv8OAw4HDgsODw4TDhcOGw4fDiMOJw4rDi8OMw43DjsOPw5DDkcOSw5PDlMOVw5bDmMOZw5rDm8Ocw53DnsOfw6DDocOiw6PDpMOlw6bDp8Oow6nDqsOrw6zDrcOuw6/DsMOxw7LDs8O0w7XDtsO3w7jDucO6w7vDvMO9w77DvycKICBlbHNlCiAgICBsZXQgaWRlbnRjaGFyc19vayA9ICcwMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXrCtcOAw4HDgsODw4TDhcOGw4fDiMOJw4rDi8OMw43DjsOPw5DDkcOSw5PDlMOVw5bDl8OYw5nDmsObw5zDncOew5/DoMOhw6LDo8Okw6XDpsOnw6jDqcOqw6vDrMOtw67Dr8Oww7HDssOzw7TDtcO2w7fDuMO5w7rDu8O8w73DvsO/JwogICAgbGV0IGt3b3JkY2hhcnNfb2sgPSAnMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6wrXDgMOBw4LDg8OEw4XDhsOHw4jDicOKw4vDjMONw47Dj8OQw5HDksOTw5TDlcOWw5fDmMOZw5rDm8Ocw53DnsOfw6DDocOiw6PDpMOlw6bDp8Oow6nDqsOrw6zDrcOuw6/DsMOxw7LDs8O0w7XDtsO3w7jDucO6w7vDvMO9w77DvycKICBlbmRpZgoKICBpZiBoYXMoJ3dpbjMyJykKICAgIGxldCBmbmFtZWNoYXJzX29rID0gJyEjJCUrLC0uLzAxMjM0NTY3ODk6PUBBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent9fsKgwqHCosKjwqTCpcKmwqfCqMKpwqrCq8Kswq3CrsKvwrDCscKywrPCtMK1wrbCt8K4wrnCusK7wrzCvcK+wr/DgMOBw4LDg8OEw4XDhsOHw4jDicOKw4vDjMONw47Dj8OQw5HDksOTw5TDlcOWw5fDmMOZw5rDm8Ocw53DnsOfw6DDocOiw6PDpMOlw6bDp8Oow6nDqsOrw6zDrcOuw6/DsMOxw7LDs8O0w7XDtsO3w7jDucO6w7vDvMO9w77DvycKICBlbHNlaWYgaGFzKCdhbWlnYScpCiAgICBsZXQgZm5hbWVjaGFyc19vayA9ICckKywtLi8wMTIzNDU2Nzg5OkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6fsKgwqHCosKjwqTCpcKmwqfCqMKpwqrCq8Kswq3CrsKvwrDCscKywrPCtMK1wrbCt8K4wrnCusK7wrzCvcK+wr/DgMOBw4LDg8OEw4XDhsOHw4jDicOKw4vDjMONw47Dj8OQw5HDksOTw5TDlcOWw5fDmMOZw5rDm8Ocw53DnsOfw6DDocOiw6PDpMOlw6bDp8Oow6nDqsOrw6zDrcOuw6/DsMOxw7LDs8O0w7XDtsO3w7jDucO6w7vDvMO9w77DvycKICBlbHNlaWYgaGFzKCd2bXMnKQogICAgbGV0IGZuYW1lY2hhcnNfb2sgPSAnIyQlKywtLi8wMTIzNDU2Nzg5Ojs8PkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW11fYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp+wqDCocKiwqPCpMKlwqbCp8KowqnCqsKrwqzCrcKuwq/CsMKxwrLCs8K0wrXCtsK3wrjCucK6wrvCvMK9wr7Cv8OAw4HDgsODw4TDhcOGw4fDiMOJw4rDi8OMw43DjsOPw5DDkcOSw5PDlMOVw5bDl8OYw5nDmsObw5zDncOew5/DoMOhw6LDo8Okw6XDpsOnw6jDqcOqw6vDrMOtw67Dr8Oww7HDssOzw7TDtcO2w7fDuMO5w7rDu8O8w73DvsO/JwogIGVsc2VpZiBoYXMoJ2ViY2RpYycpCiAgICBsZXQgZm5hbWVjaGFyc19vayA9ICcjJCUrLC0uLz1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5en7CoMKhwqLCo8KkwqXCpsKnwqjCqcKqwqvCrMKtwq7Cr8KwwrHCssKzwrTCtcK2wrfCuMK5wrrCu8K8wr3CvsK/w4DDgcOCw4PDhMOFw4bDh8OIw4nDisOLw4zDjcOOw4/DkMORw5LDk8OUw5XDlsOXw5jDmcOaw5vDnMOdw57Dn8Ogw6HDosOjw6TDpcOmw6fDqMOpw6rDq8Osw63DrsOvw7DDscOyw7PDtMO1w7bDt8O4w7nDusO7w7zDvcO+w78nCiAgZWxzZQogICAgbGV0IGZuYW1lY2hhcnNfb2sgPSAnIyQlKywtLi8wMTIzNDU2Nzg5PUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6fsKgwqHCosKjwqTCpcKmwqfCqMKpwqrCq8Kswq3CrsKvwrDCscKywrPCtMK1wrbCt8K4wrnCusK7wrzCvcK+wr/DgMOBw4LDg8OEw4XDhsOHw4jDicOKw4vDjMONw47Dj8OQw5HDksOTw5TDlcOWw5fDmMOZw5rDm8Ocw53DnsOfw6DDocOiw6PDpMOlw6bDp8Oow6nDqsOrw6zDrcOuw6/DsMOxw7LDs8O0w7XDtsO3w7jDucO6w7vDvMO9w77DvycKICBlbmRpZgoKICBjYWxsIGFzc2VydF9lcXVhbChpZGVudGNoYXJzX29rLCBpZGVudGNoYXJzKQogIGNhbGwgYXNzZXJ0X2VxdWFsKGt3b3JkY2hhcnNfb2ssIGt3b3JkY2hhcnMpCiAgY2FsbCBhc3NlcnRfZXF1YWwoZm5hbWVjaGFyc19vaywgZm5hbWVjaGFycykKCiAgY2FsbCBhc3NlcnRfZXF1YWwoaWRlbnRjaGFyczEsIGlkZW50Y2hhcnMpCiAgY2FsbCBhc3NlcnRfZXF1YWwoa3dvcmRjaGFyczEsIGt3b3JkY2hhcnMpCiAgY2FsbCBhc3NlcnRfZXF1YWwoZm5hbWVjaGFyczEsIGZuYW1lY2hhcnMpCmVuZGZ1bmMKCmZ1bmMgVGVzdF9jbGFzc2VzX3JlMSgpCiAgc2V0IHJlPTEKICBjYWxsIHM6Y2xhc3Nlc190ZXN0KCkKICBzZXQgcmU9MAplbmRmdW5jCgpmdW5jIFRlc3RfY2xhc3Nlc19yZTIoKQogIHNldCByZT0yCiAgY2FsbCBzOmNsYXNzZXNfdGVzdCgpCiAgc2V0IHJlPTAKZW5kZnVuYwoKZnVuYyBUZXN0X3JldmVyc2VkX3JhbmdlKCkKICBmb3IgcmUgaW4gcmFuZ2UoMCwgMikKICAgIGV4ZSAnc2V0IHJlPScgLiByZQogICAgY2FsbCBhc3NlcnRfZmFpbHMoJ2NhbGwgbWF0Y2goImFiYyBkZWYiLCAiW2MtYV0iKScsICdFOTQ0OicpCiAgZW5kZm9yCiAgc2V0IHJlPTAKZW5kZnVuYwoKZnVuYyBUZXN0X2xhcmdlX2NsYXNzKCkKICBzZXQgcmU9MQogIGNhbGwgYXNzZXJ0X2ZhaWxzKCdjYWxsIG1hdGNoKCJhYmMgZGVmIiwgIltcdTMwMDAtXHU0MDAwXSIpJywgJ0U5NDU6JykKICBzZXQgcmU9MgogIGNhbGwgYXNzZXJ0X2VxdWFsKDAsICdhYmMgZGVmJyA9fiMgJ1tcdTMwMDAtXHU0MDAwXScpCiAgY2FsbCBhc3NlcnRfZXF1YWwoMSwgIlx1MzA0MiIgPX4jICdbXHUzMDAwLVx1NDAwMF0nKQogIHNldCByZT0wCmVuZGZ1bmMKCmZ1bmMgVGVzdF9vcHRtYXRjaF90b29sb25nKCkKICBzZXQgcmU9MQogICIgQ2FuIG9ubHkgaGFuZGxlIGFib3V0IDgwMDAgY2hhcmFjdGVycy4KICBsZXQgcGF0ID0gJ1xcJVsnIC4uIHJlcGVhdCgneCcsIDkwMDApIC4uICddJwogIGNhbGwgYXNzZXJ0X2ZhaWxzKCdjYWxsIG1hdGNoKCJhYmMgZGVmIiwgIicgLi4gcGF0IC4uICciKScsICdFMzM5OicpCiAgc2V0IHJlPTAKZW5kZnVuYwoKIiBUZXN0IGZvciByZWdleHAgcGF0dGVybnMgd2l0aCBtdWx0aS1ieXRlIHN1cHBvcnQsIHVzaW5nIHV0Zi04LgpmdW5jIFRlc3RfbXVsdGlieXRlX2NoYXJzKCkKICAiIHRsIGlzIGEgTGlzdCBvZiBMaXN0cyB3aXRoOgogICIgICAgMjogdGVzdCBhdXRvL29sZC9uZXcgIDA6IHRlc3QgYXV0by9vbGQgIDE6IHRlc3QgYXV0by9uZXcKICAiICAgIHJlZ2V4cCBwYXR0ZXJuCiAgIiAgICB0ZXh0IHRvIHRlc3QgdGhlIHBhdHRlcm4gb24KICAiICAgIGV4cGVjdGVkIG1hdGNoIChvcHRpb25hbCkKICAiICAgIGV4cGVjdGVkIHN1Ym1hdGNoIDEgKG9wdGlvbmFsKQogICIgICAgZXhwZWN0ZWQgc3VibWF0Y2ggMiAob3B0aW9uYWwpCiAgIiAgICBldGMuCiAgIiAgV2hlbiB0aGVyZSBpcyBubyBtYXRjaCB1c2Ugb25seSB0aGUgZmlyc3QgdHdvIGl0ZW1zLgogIGxldCB0bCA9IFtdCgogICIgTXVsdGktYnl0ZSBjaGFyYWN0ZXIgdGVzdHMuIFRoZXNlIHdpbGwgZmFpbCB1bmxlc3MgdmltIGlzIGNvbXBpbGVkCiAgIiB3aXRoIE11bHRpYnl0ZSAoRkVBVF9NQllURSkgb3IgQklHL0hVR0UgZmVhdHVyZXMuCiAgY2FsbCBhZGQodGwsIFsyLCAnW1s6YWxwaGE6XVs9YT1dXVwrJywgJzg3OSBhaWHDo8OiYWl1dm5hICcsICdhaWHDo8OiYWl1dm5hJ10pCiAgY2FsbCBhZGQodGwsIFsyLCAnW1s9YT1dXVwrJywgJ2RkYcOjw6JiY2QnLCAnYcOjw6InXSkJCQkJCQkJCSIgZXF1aXZhbGVuY2UgY2xhc3NlcwogIGNhbGwgYWRkKHRsLCBbMiwgJ1te4LihIF1cKycsICfguKHguKEgb2lqYXNvaWZqb3MgaWZqb2lzaiBmIG9zaWogaiDguKHguKHguKHguKHguKEgYWJjZCcsICdvaWphc29pZmpvcyddKQogIGNhbGwgYWRkKHRsLCBbMiwgJyBbXiBdXCsnLCAnc3RhcnQg4LihYWJjZOC4oSAnLCAnIOC4oWFiY2TguKEnXSkKICBjYWxsIGFkZCh0bCwgWzIsICdb4LihWzphbHBoYTpdWz1hPV1dXCsnLCAnODc5IGFpYcOj4Lihw6LguKFhaXV2bmEgJywgJ2FpYcOj4Lihw6LguKFhaXV2bmEnXSkKCiAgIiB0aGlzIGlzIG5vdCBhIG5vcm1hbCAiaSIgYnV0IDB4ZWMKICBjYWxsIGFkZCh0bCwgWzIsICdccFwrJywgJ8OsYScsICfDrGEnXSkKICBjYWxsIGFkZCh0bCwgWzIsICdccConLCAnYeOBgicsICdh44GCJ10pCgogICIgVGVzdCByZWNvZ25pdGlvbiBvZiBzb21lIGNoYXJhY3RlciBjbGFzc2VzCiAgY2FsbCBhZGQodGwsIFsyLCAnXGlcKycsICcmKsKoeHggJywgJ3h4J10pCiAgY2FsbCBhZGQodGwsIFsyLCAnXGZcKycsICcmKsKfZm5hbWUgJywgJ2ZuYW1lJ10pCgogICIgVGVzdCBjb21wb3NpbmcgY2hhcmFjdGVyIG1hdGNoaW5nCiAgY2FsbCBhZGQodGwsIFsyLCAnLuC4oScsICd44Lih4LmIeCB54LiheScsICd54LihJ10pCiAgY2FsbCBhZGQodGwsIFsyLCAnLuC4oeC5iCcsICd44Lih4LmIeCB54LiheScsICd44Lih4LmIJ10pCiAgY2FsbCBhZGQodGwsIFsyLCAiXHUwNWI5IiwgIiB4XHUwNWI5ICIsICJ4XHUwNWI5Il0pCiAgY2FsbCBhZGQodGwsIFsyLCAiLlx1MDViOSIsICIgeFx1MDViOSAiLCAieFx1MDViOSJdKQogIGNhbGwgYWRkKHRsLCBbMiwgIlx1MDViOVx1MDViYiIsICIgeFx1MDViOVx1MDViYiAiLCAieFx1MDViOVx1MDViYiJdKQogIGNhbGwgYWRkKHRsLCBbMiwgIi5cdTA1YjlcdTA1YmIiLCAiIHhcdTA1YjlcdTA1YmIgIiwgInhcdTA1YjlcdTA1YmIiXSkKICBjYWxsIGFkZCh0bCwgWzIsICJcdTA1YmJcdTA1YjkiLCAiIHhcdTA1YjlcdTA1YmIgIiwgInhcdTA1YjlcdTA1YmIiXSkKICBjYWxsIGFkZCh0bCwgWzIsICIuXHUwNWJiXHUwNWI5IiwgIiB4XHUwNWI5XHUwNWJiICIsICJ4XHUwNWI5XHUwNWJiIl0pCiAgY2FsbCBhZGQodGwsIFsyLCAiXHUwNWI5IiwgIiB5XHUwNWJiIHhcdTA1YjkgIiwgInhcdTA1YjkiXSkKICBjYWxsIGFkZCh0bCwgWzIsICIuXHUwNWI5IiwgIiB5XHUwNWJiIHhcdTA1YjkgIiwgInhcdTA1YjkiXSkKICBjYWxsIGFkZCh0bCwgWzIsICJcdTA1YjkiLCAiIHlcdTA1YmJcdTA1YjkgeFx1MDViOSAiLCAieVx1MDViYlx1MDViOSJdKQogIGNhbGwgYWRkKHRsLCBbMiwgIi5cdTA1YjkiLCAiIHlcdTA1YmJcdTA1YjkgeFx1MDViOSAiLCAieVx1MDViYlx1MDViOSJdKQogIGNhbGwgYWRkKHRsLCBbMSwgIlx1MDViOVx1MDViYiIsICIgeVx1MDViOSB4XHUwNWI5XHUwNWJiICIsICJ4XHUwNWI5XHUwNWJiIl0pCiAgY2FsbCBhZGQodGwsIFsyLCAiLlx1MDViOVx1MDViYiIsICIgeVx1MDViYiB4XHUwNWI5XHUwNWJiICIsICJ4XHUwNWI5XHUwNWJiIl0pCiAgY2FsbCBhZGQodGwsIFsyLCAiYSIsICJjYVx1MDMwMHQiXSkKICBjYWxsIGFkZCh0bCwgWzIsICJjYSIsICJjYVx1MDMwMHQiXSkKICBjYWxsIGFkZCh0bCwgWzIsICJhXHUwMzAwIiwgImNhXHUwMzAwdCIsICJhXHUwMzAwIl0pCiAgY2FsbCBhZGQodGwsIFsyLCAnYVwlQycsICJjYVx1MDMwMHQiLCAiYVx1MDMwMCJdKQogIGNhbGwgYWRkKHRsLCBbMiwgJ2NhXCVDJywgImNhXHUwMzAwdCIsICJjYVx1MDMwMCJdKQogIGNhbGwgYWRkKHRsLCBbMiwgJ2NhXCVDdCcsICJjYVx1MDMwMHQiLCAiY2FcdTAzMDB0Il0pCgogICIgVGVzdCBcWgogIGNhbGwgYWRkKHRsLCBbMiwgJ8O6XFonLCAneCddKQogIGNhbGwgYWRkKHRsLCBbMiwgJ9eZ15TXldeUXFonLCAn15nXlNeV15QnLCAn15nXlNeV15QnXSkKICBjYWxsIGFkZCh0bCwgWzIsICfXmdaw15TXlda415RcWicsICfXmdeU15XXlCcsICfXmdeU15XXlCddKQogIGNhbGwgYWRkKHRsLCBbMiwgJ9eZ15TXldeUXFonLCAn15nWsNeU15XWuNeUJywgJ9eZ1rDXlNeV1rjXlCddKQogIGNhbGwgYWRkKHRsLCBbMiwgJ9eZ1rDXlNeV1rjXlFxaJywgJ9eZ1rDXlNeV1rjXlCcsICfXmdaw15TXlda415QnXSkKICBjYWxsIGFkZCh0bCwgWzIsICfXmdawXFonLCAn15XWsNeZ1rcnLCAn15nWtyddKQogIGNhbGwgYWRkKHRsLCBbMiwgItenXHUyMDBkXHUwNWI5eFxcWiIsICJ416dcdTIwMGRcdTA1Yjl4eSIsICLXp1x1MjAwZFx1MDViOXgiXSkKICBjYWxsIGFkZCh0bCwgWzIsICLXp1x1MjAwZFx1MDViOXhcXFoiLCAieNenXHUyMDBkeHkiLCAi16dcdTIwMGR4Il0pCiAgY2FsbCBhZGQodGwsIFsyLCAi16dcdTIwMGR4XFxaIiwgInjXp1x1MjAwZFx1MDViOXh5IiwgItenXHUyMDBkXHUwNWI5eCJdKQogIGNhbGwgYWRkKHRsLCBbMiwgItenXHUyMDBkeFxcWiIsICJ416dcdTIwMGR4eSIsICLXp1x1MjAwZHgiXSkKICBjYWxsIGFkZCh0bCwgWzIsICJcdTA1YjlcXFoiLCAieHl6Il0pCiAgY2FsbCBhZGQodGwsIFsyLCAiXFxaXHUwNWI5IiwgInh5eiJdKQogIGNhbGwgYWRkKHRsLCBbMiwgIlx1MDViOVxcWiIsICJ4eVx1MDViOXoiLCAieVx1MDViOSJdKQogIGNhbGwgYWRkKHRsLCBbMiwgIlxcWlx1MDViOSIsICJ4eVx1MDViOXoiLCAieVx1MDViOSJdKQogIGNhbGwgYWRkKHRsLCBbMSwgIlx1MDViOVxcK1xcWiIsICJ4eVx1MDViOXpcdTA1YjkgIiwgInlcdTA1Yjl6XHUwNWI5Il0pCiAgY2FsbCBhZGQodGwsIFsxLCAiXFxaXHUwNWI5XFwrIiwgInh5XHUwNWI5elx1MDViOSAiLCAieVx1MDViOXpcdTA1YjkiXSkKCiAgIiBDb21iaW5pbmcgZGlmZmVyZW50IHRlc3RzIGFuZCBmZWF0dXJlcwogIGNhbGwgYWRkKHRsLCBbMiwgJ1teWz1hPV1dXCsnLCAnZGRhw6PDomJjZCcsICdkZCddKQoKICAiIFJ1biB0aGUgdGVzdHMKICBmb3IgdCBpbiB0bAogICAgbGV0IHJlID0gdFswXQogICAgbGV0IHBhdCA9IHRbMV0KICAgIGxldCB0ZXh0ID0gdFsyXQogICAgbGV0IG1hdGNoaWR4ID0gMwogICAgZm9yIGVuZ2luZSBpbiBbMCwgMSwgMl0KICAgICAgaWYgZW5naW5lID09IDIgJiYgcmUgPT0gMCB8fCBlbmdpbmUgPT0gMSAmJiByZSA9PSAxCiAgICAgICAgY29udGludWUKICAgICAgZW5kaWYKICAgICAgbGV0ICZyZWdleHBlbmdpbmUgPSBlbmdpbmUKICAgICAgdHJ5CiAgICAgICAgbGV0IGwgPSBtYXRjaGxpc3QodGV4dCwgcGF0KQogICAgICBjYXRjaAogICAgICAgIGNhbGwgYXNzZXJ0X3JlcG9ydCgnRXJyb3IgJyAuIGVuZ2luZSAuICc6IHBhdDogXCInIC4gcGF0IC4KCQkgICAgXCAnXCIsIHRleHQ6IFwiJyAuIHRleHQgLgoJCSAgICBcICdcIiwgY2F1c2VkIGFuIGV4Y2VwdGlvbjogXCInIC4gdjpleGNlcHRpb24gLiAnXCInKQogICAgICBlbmR0cnkKICAgICAgIiBjaGVjayB0aGUgbWF0Y2ggaXRzZWxmCiAgICAgIGlmIGxlbihsKSA9PSAwICYmIGxlbih0KSA+IG1hdGNoaWR4CiAgICAgICAgY2FsbCBhc3NlcnRfcmVwb3J0KCdFcnJvciAnIC4gZW5naW5lIC4gJzogcGF0OiBcIicgLiBwYXQgLgoJCSAgICBcICdcIiwgdGV4dDogXCInIC4gdGV4dCAuCgkJICAgIFwgJ1wiLCBkaWQgbm90IG1hdGNoLCBleHBlY3RlZDogXCInIC4gdFttYXRjaGlkeF0gLiAnXCInKQogICAgICBlbHNlaWYgbGVuKGwpID4gMCAmJiBsZW4odCkgPT0gbWF0Y2hpZHgKICAgICAgICBjYWxsIGFzc2VydF9yZXBvcnQoJ0Vycm9yICcgLiBlbmdpbmUgLiAnOiBwYXQ6IFwiJyAuIHBhdCAuCgkJICAgIFwgJ1wiLCB0ZXh0OiBcIicgLiB0ZXh0IC4gJ1wiLCBtYXRjaDogXCInIC4gbFswXSAuCgkJICAgIFwgJ1wiLCBleHBlY3RlZCBubyBtYXRjaCcpCiAgICAgIGVsc2VpZiBsZW4odCkgPiBtYXRjaGlkeCAmJiBsWzBdICE9IHRbbWF0Y2hpZHhdCiAgICAgICAgY2FsbCBhc3NlcnRfcmVwb3J0KCdFcnJvciAnIC4gZW5naW5lIC4gJzogcGF0OiBcIicgLiBwYXQgLgoJCSAgICBcICdcIiwgdGV4dDogXCInIC4gdGV4dCAuICdcIiwgbWF0Y2g6IFwiJyAuIGxbMF0gLgoJCSAgICBcICdcIiwgZXhwZWN0ZWQ6IFwiJyAuIHRbbWF0Y2hpZHhdIC4gJ1wiJykKICAgICAgZWxzZQogICAgICAgICIgVGVzdCBwYXNzZWQKICAgICAgZW5kaWYKICAgICAgaWYgbGVuKGwpID4gMAogICAgICAgICIgY2hlY2sgYWxsIHRoZSBuaW5lIHN1Ym1hdGNoZXMKICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCA5KQogICAgICAgICAgaWYgbGVuKHQpIDw9IG1hdGNoaWR4ICsgaQogICAgICAgICAgICBsZXQgZSA9ICcnCiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGxldCBlID0gdFttYXRjaGlkeCArIGldCiAgICAgICAgICBlbmRpZgogICAgICAgICAgaWYgbFtpXSAhPSBlCiAgICAgICAgICAgIGNhbGwgYXNzZXJ0X3JlcG9ydCgnRXJyb3IgJyAuIGVuZ2luZSAuICc6IHBhdDogXCInIC4gcGF0IC4KICAgICAgICAgICAgICAgICAgXCAnXCIsIHRleHQ6IFwiJyAuIHRleHQgLiAnXCIsIHN1Ym1hdGNoICcgLiBpIC4KICAgICAgICAgICAgICAgICAgXCAnOiBcIicgLiBsW2ldIC4gJ1wiLCBleHBlY3RlZDogXCInIC4gZSAuICdcIicpCiAgICAgICAgICBlbmRpZgogICAgICAgIGVuZGZvcgogICAgICAgIHVubGV0IGkKICAgICAgZW5kaWYKICAgIGVuZGZvcgogIGVuZGZvcgogIHNldCByZWdleHBlbmdpbmUmCmVuZGZ1bmMKCiIgY2hlY2sgdGhhdCAnYW1iaXdpZHRoJyBkb2VzIG5vdCBjaGFuZ2UgdGhlIG1lYW5pbmcgb2YgXHAKZnVuYyBUZXN0X2FtYml3aWR0aCgpCiAgc2V0IHJlZ2V4cGVuZ2luZT0xIGFtYml3aWR0aD1zaW5nbGUKICBjYWxsIGFzc2VydF9lcXVhbCgwLCBtYXRjaCgiXHUwMEVDIiwgJ1xwJykpCiAgc2V0IHJlZ2V4cGVuZ2luZT0xIGFtYml3aWR0aD1kb3VibGUKICBjYWxsIGFzc2VydF9lcXVhbCgwLCBtYXRjaCgiXHUwMEVDIiwgJ1xwJykpCiAgc2V0IHJlZ2V4cGVuZ2luZT0yIGFtYml3aWR0aD1zaW5nbGUKICBjYWxsIGFzc2VydF9lcXVhbCgwLCBtYXRjaCgiXHUwMEVDIiwgJ1xwJykpCiAgc2V0IHJlZ2V4cGVuZ2luZT0yIGFtYml3aWR0aD1kb3VibGUKICBjYWxsIGFzc2VydF9lcXVhbCgwLCBtYXRjaCgiXHUwMEVDIiwgJ1xwJykpCiAgc2V0IHJlZ2V4cGVuZ2luZSYgYW1iaXdpZHRoJgplbmRmdW5jCgpmdW5jIFJ1bl9yZWdleHBfaWdub3JlX2Nhc2UoKQogIGNhbGwgYXNzZXJ0X2VxdWFsKCdpScSwJywgc3Vic3RpdHV0ZSgnaUnEsCcsICdcKFtpScSwXVwpJywgJ1wxJywgJ2cnKSkKCiAgY2FsbCBhc3NlcnRfZXF1YWwoJ2lJeCcsIHN1YnN0aXR1dGUoJ2lJxLAnLCAnXGNcKFvEsF1cKScsICd4JywgJ2cnKSkKICBjYWxsIGFzc2VydF9lcXVhbCgneHjEsCcsIHN1YnN0aXR1dGUoJ2lJxLAnLCAnXChpXGNcKScsICd4JywgJ2cnKSkKICBjYWxsIGFzc2VydF9lcXVhbCgnaUl4Jywgc3Vic3RpdHV0ZSgnaUnEsCcsICdcKMSwXGNcKScsICd4JywgJ2cnKSkKICBjYWxsIGFzc2VydF9lcXVhbCgnaUl4Jywgc3Vic3RpdHV0ZSgnaUnEsCcsICdcY1woXCV1MDEzMFwpJywgJ3gnLCAnZycpKQogIGNhbGwgYXNzZXJ0X2VxdWFsKCdpSXgnLCBzdWJzdGl0dXRlKCdpScSwJywgJ1xjXChbXHUwMTMwXVwpJywgJ3gnLCAnZycpKQogIGNhbGwgYXNzZXJ0X2VxdWFsKCdpSXgnLCBzdWJzdGl0dXRlKCdpScSwJywgJ1xjXChbXHUwMTJmLVx1MDEzMV1cKScsICd4JywgJ2cnKSkKZW5kZnVuYwoKZnVuYyBUZXN0X3JlZ2V4cF9pZ25vcmVfY2FzZSgpCiAgc2V0IHJlZ2V4cGVuZ2luZT0xCiAgY2FsbCBSdW5fcmVnZXhwX2lnbm9yZV9jYXNlKCkKICBzZXQgcmVnZXhwZW5naW5lPTIKICBjYWxsIFJ1bl9yZWdleHBfaWdub3JlX2Nhc2UoKQogIHNldCByZWdleHBlbmdpbmUmCmVuZGZ1bmMKCiIgVGVzdHMgZm9yIHJlZ2V4cCB3aXRoIG11bHRpLWJ5dGUgZW5jb2RpbmcgYW5kIHZhcmlvdXMgbWFnaWMgc2V0dGluZ3MKZnVuYyBSdW5fcmVnZXhwX211bHRpYnl0ZV9tYWdpYygpCiAgbGV0IHRleHQgPTw8IHRyaW0gRU5ECiAgICAxIGEgYWEgYWJiIGFiYmNjYwogICAgMiBkIGRkIGRlZSBkZWVmZmYKICAgIDMgZyBnZyBnaGggZ2hoaWlpCiAgICA0IGogamogamtrIGpra2xsbAogICAgNSBtIG1tIG1ubiBtbm5vb28KICAgIDYgeCBeYWEkIHgKICAgIDcgKGEpKGIpIGFiYmFhCiAgICA4IGF4eCBbYWJdeHgKICAgIDkg4Lir4Lih4LmIeCDguK3guKF4CiAgICBhIOC4reC4oXgg4Lir4Lih4LmIeAogICAgYiDjgaHjgqvjg6jjga8KICAgIGMgeCDCrOKCrHgKICAgIGQg5aSp5L2/eAogICAgZSD8ko2Fmbh5CiAgICBmIPySjYqvjXoKICAgIGcgYeWVt2JiCiAgICBqIDAxMjPinaR4CiAgICBrIGNvbWJpbmF0aW9ucwogICAgbCDDpMO2IMO8zrHMhMyGzIEKICBFTkQKCiAgbmV3CiAgY2FsbCBzZXRsaW5lKDEsIHRleHQpCiAgZXhlICdub3JtYWwgL2EqYlx7Mn1jXCsvZScgLi4gIlw8Q1I+eCIKICBjYWxsIGFzc2VydF9lcXVhbCgnMSBhIGFhIGFiYiBhYmJjYycsIGdldGxpbmUoJy4nKSkKICBleGUgJ25vcm1hbCAvXE1kXCplXHsyfWZcKy9lJyAuLiAiXDxDUj54IgogIGNhbGwgYXNzZXJ0X2VxdWFsKCcyIGQgZGQgZGVlIGRlZWZmJywgZ2V0bGluZSgnLicpKQogIHNldCBub21hZ2ljCiAgZXhlICdub3JtYWwgL2dcKmhcezJ9aVwrL2UnIC4uICJcPENSPngiCiAgY2FsbCBhc3NlcnRfZXF1YWwoJzMgZyBnZyBnaGggZ2hoaWknLCBnZXRsaW5lKCcuJykpCiAgZXhlICdub3JtYWwgL1xtaiprXHsyfWxcKy9lJyAuLiAiXDxDUj54IgogIGNhbGwgYXNzZXJ0X2VxdWFsKCc0IGogamogamtrIGpra2xsJywgZ2V0bGluZSgnLicpKQogIGV4ZSAnbm9ybWFsIC9cdm0qbnsyfW8rL2UnIC4uICJcPENSPngiCiAgY2FsbCBhc3NlcnRfZXF1YWwoJzUgbSBtbSBtbm4gbW5ub28nLCBnZXRsaW5lKCcuJykpCiAgZXhlICdub3JtYWwgL1xWXmFhJC8nIC4uICJcPENSPngiCiAgY2FsbCBhc3NlcnRfZXF1YWwoJzYgeCBhYSQgeCcsIGdldGxpbmUoJy4nKSkKICBzZXQgbWFnaWMKICBleGUgJ25vcm1hbCAvXHYoYSkoYilcMlwxXDEvZScgLi4gIlw8Q1I+eCIKICBjYWxsIGFzc2VydF9lcXVhbCgnNyAoYSkoYikgYWJiYScsIGdldGxpbmUoJy4nKSkKICBleGUgJ25vcm1hbCAvXFZbYWJdXChcW3h5XVwpXDEnIC4uICJcPENSPngiCiAgY2FsbCBhc3NlcnRfZXF1YWwoJzggYXh4IGFiXXh4JywgZ2V0bGluZSgnLicpKQoKICAiIHNlYXJjaCBmb3IgbXVsdGktYnl0ZSB3aXRob3V0IGNvbXBvc2luZyBjaGFyCiAgZXhlICdub3JtYWwgL+C4oScgLi4gIlw8Q1I+eCIKICBjYWxsIGFzc2VydF9lcXVhbCgnOSDguKvguKHguYh4IOC4rXgnLCBnZXRsaW5lKCcuJykpCgogICIgc2VhcmNoIGZvciBtdWx0aS1ieXRlIHdpdGggY29tcG9zaW5nIGNoYXIKICBleGUgJ25vcm1hbCAv4Lih4LmIJyAuLiAiXDxDUj54IgogIGNhbGwgYXNzZXJ0X2VxdWFsKCdhIOC4reC4oXgg4LireCcsIGdldGxpbmUoJy4nKSkKCiAgIiBmaW5kIHdvcmQgYnkgY2hhbmdlIG9mIHdvcmQgY2xhc3MKICBleGUgJ25vcm1hbCAv44GhXDzjgqvjg6hcPuOBrycgLi4gIlw8Q1I+eCIKICBjYWxsIGFzc2VydF9lcXVhbCgnYiDjgqvjg6jjga8nLCBnZXRsaW5lKCcuJykpCgogICIgVGVzdCBcJXUsIFtcdV0gYW5kIGZyaWVuZHMKICAiIGMKICBleGUgJ25vcm1hbCAvXCV1MjBhYycgLi4gIlw8Q1I+eCIKICBjYWxsIGFzc2VydF9lcXVhbCgnYyB4IMKseCcsIGdldGxpbmUoJy4nKSkKICAiIGQKICBleGUgJ25vcm1hbCAvW1x1NGY3Zlx1NTkyOV1cKycgLi4gIlw8Q1I+eCIKICBjYWxsIGFzc2VydF9lcXVhbCgnZCDkvb94JywgZ2V0bGluZSgnLicpKQogICIgZQogIGV4ZSAnbm9ybWFsIC9cJVUxMjM0NTY3OCcgLi4gIlw8Q1I+eCIKICBjYWxsIGFzc2VydF9lcXVhbCgnZSB5JywgZ2V0bGluZSgnLicpKQogICIgZgogIGV4ZSAnbm9ybWFsIC9bXFUxMjM0YWJjZFx1MTIzNFx1YWJjZF0nIC4uICJcPENSPngiCiAgY2FsbCBhc3NlcnRfZXF1YWwoJ2YgeicsIGdldGxpbmUoJy4nKSkKICAiIGcKICBleGUgJ25vcm1hbCAvXCVkMjE4NzliJyAuLiAiXDxDUj54IgogIGNhbGwgYXNzZXJ0X2VxdWFsKCdnIGFiYicsIGdldGxpbmUoJy4nKSkKCiAgIiBqIFRlc3QgYmFja3dhcmRzIHNlYXJjaCBmcm9tIGEgbXVsdGktYnl0ZSBjaGFyCiAgZXhlICJub3JtYWwgL3hcPENSPng/Llw8Q1I+eCIKICBjYWxsIGFzc2VydF9lcXVhbCgnaiAwMTLinaQnLCBnZXRsaW5lKCcuJykpCiAgIiBrCiAgbGV0IEB3PSc6JXMjY29tYltpXW5hdGlvbnMjxZPMhOG5o8yBbcylzITOscyEzIbMgSNnJwogIEB3CiAgY2FsbCBhc3NlcnRfZXF1YWwoJ2sgxZPMhOG5o8yBbcylzITOscyEzIbMgScsIGdldGxpbmUoMTgpKQoKICBjbG9zZSEKZW5kZnVuYwoKZnVuYyBUZXN0X3JlZ2V4cF9tdWx0aWJ5dGVfbWFnaWMoKQogIHNldCByZWdleHBlbmdpbmU9MQogIGNhbGwgUnVuX3JlZ2V4cF9tdWx0aWJ5dGVfbWFnaWMoKQogIHNldCByZWdleHBlbmdpbmU9MgogIGNhbGwgUnVuX3JlZ2V4cF9tdWx0aWJ5dGVfbWFnaWMoKQogIHNldCByZWdleHBlbmdpbmUmCmVuZGZ1bmMKCiIgVGVzdCBmb3IgNy4zLjE5MgoiIGNvbW1hbmQgIjpzLyBcPy8gL2ciIHNwbGl0cyBtdWx0aS1ieXRlIGNoYXJhY3RlcnMgaW50byBieXRlcwpmdW5jIFRlc3Rfc3BsaXRfbXVsdGlieXRlX3RvX2J5dGVzKCkKICBuZXcKICBjYWxsIHNldGxpbmUoMSwgJ2wgw6TDtiDDvM6xzITMhsyBJykKICBzLyBcPy8gL2cKICBjYWxsIGFzc2VydF9lcXVhbCgnIGwgw6Qgw7Ygw7wgzrHMhMyGzIEnLCBnZXRsaW5lKDEpKQogIGNsb3NlIQplbmRmdW5jCgoiIFRlc3QgZm9yIG1hdGNoc3RyKCkgd2l0aCBtdWx0aWJ5dGUgY2hhcmFjdGVycwpmdW5jIFRlc3RfbWF0Y2hzdHJfbXVsdGlieXRlKCkKICBuZXcKICBjYWxsIGFzc2VydF9lcXVhbCgn15EnLCBtYXRjaHN0cigi15DXkdeS15MiLCAiLiIsIDAsIDIpKQogIGNhbGwgYXNzZXJ0X2VxdWFsKCfXkdeSJywgbWF0Y2hzdHIoIteQ15HXkteTIiwgIi4uIiwgMCwgMikpCiAgY2FsbCBhc3NlcnRfZXF1YWwoJ9eQJywgbWF0Y2hzdHIoIteQ15HXkteTIiwgIi4iLCAwLCAwKSkKICBjYWxsIGFzc2VydF9lcXVhbCgn15InLCBtYXRjaHN0cigi15DXkdeS15MiLCAiLiIsIDQsIC0xKSkKICBjbG9zZSEKZW5kZnVuYwoKIiBUZXN0IGZvciA3LjQuNjM2CiIgQSBzZWFyY2ggd2l0aCBlbmQgb2Zmc2V0IGdldHMgc3R1Y2sgYXQgZW5kIG9mIGZpbGUuCmZ1bmMgVGVzdF9zZWFyY2hfd2l0aF9lbmRfb2Zmc2V0KCkKICBuZXcKICBjYWxsIHNldGxpbmUoMSwgWycnLCAnZG9nKGEnLCAnY2F0KCddKQogIGV4ZSAibm9ybWFsIC8oL2UrXDxDUj4iCiAgbm9ybWFsIG4iYXluCiAgY2FsbCBhc3NlcnRfZXF1YWwoImFcbmNhdCgiLCBAYSkKICBjbG9zZSEKZW5kZnVuYwoKIiBDaGVjayB0aGF0ICJeIiBtYXRjaGVzIGV2ZW4gd2hlbiB0aGUgbGluZSBzdGFydHMgd2l0aCBhIGNvbWJpbmluZyBjaGFyCmZ1bmMgVGVzdF9tYXRjaF9zdGFydF9vZl9saW5lX2NvbWJpbmluZygpCiAgbmV3CiAgY2FsbCBzZXRsaW5lKDEsIFsnJywgIlx1MDVhZSIsICcnXSkKICBleGUgIm5vcm1hbCBnZy9eXDxDUj4iCiAgY2FsbCBhc3NlcnRfZXF1YWwoMiwgZ2V0Y3VycG9zKClbMV0pCiAgYndpcGUhCmVuZGZ1bmMKCiIgQ2hlY2sgdGhhdCBbWzp1cHBlcjpdXSBtYXRjaGVzIGZvciBhdXRvbWF0aWMgZW5naW5lCmZ1bmMgVGVzdF9tYXRjaF9jaGFyX2NsYXNzX3VwcGVyKCkKICBuZXcKICBsZXQgX2VuZ2luZT0mcmVnZXhwZW5naW5lCgogICIgVGVzdCAxOiBbWzp1cHBlcjpdXVx7MixcfQogIHNldCByZWdleHBlbmdpbmU9MAogIGNhbGwgc2V0bGluZSgxLCBbJzA1LiDQn9CV0KHQndCvINCeINCT0JXQoNCe0K/QpSDQvNGD0LcuINCQLiDQlNCw0LLQuNC00LXQvdC60L4sINCcLiDQmtC+0LLQsNC70Y8g0Lgg0JEuINCo0LXRhdGC0LXRgNCwIC4uLicsICcwNS4gUEpFU05KQSBPIEdKRVJPSkFLSCBtdXMuIEEuIERhdmlkamVua28sIE0uIEtvdmFsamEgaSBCLiBTaGpla2h0amVyYSAuLi4nXSkKICBjYWxsIGN1cnNvcigxLDEpCiAgbGV0IHNlYXJjaF9jbWQ9J25vcm0gL1w8W1s6dXBwZXI6XV1cezIsXH1cPicgLi4gIlw8Q1I+IgogIGV4ZSBzZWFyY2hfY21kCiAgY2FsbCBhc3NlcnRfZXF1YWwoNCwgc2VhcmNoY291bnQoKS50b3RhbCwgJ1RFU1QgMScpCiAgc2V0IHJlZ2V4cGVuZ2luZT0xCiAgZXhlIHNlYXJjaF9jbWQKICBjYWxsIGFzc2VydF9lcXVhbCgyLCBzZWFyY2hjb3VudCgpLnRvdGFsLCAnVEVTVCAxJykKICBzZXQgcmVnZXhwZW5naW5lPTIKICBleGUgc2VhcmNoX2NtZAogIGNhbGwgYXNzZXJ0X2VxdWFsKDQsIHNlYXJjaGNvdW50KCkudG90YWwsICdURVNUIDEnKQoKICAiIFRlc3QgMjogW1s6dXBwZXI6XV0uXCsKICBsZXQgc2VhcmNoX2NtZD0nbm9ybSAvXDxbWzp1cHBlcjpdXS5cK1w+JyAuLiAiXDxDUj4iCiAgc2V0IHJlZ2V4cGVuZ2luZT0wCiAgZXhlIHNlYXJjaF9jbWQKICBjYWxsIGFzc2VydF9lcXVhbCgyLCBzZWFyY2hjb3VudCgpLnRvdGFsLCAnVEVTVCAyJykKICBzZXQgcmVnZXhwZW5naW5lPTEKICBleGUgc2VhcmNoX2NtZAogIGNhbGwgYXNzZXJ0X2VxdWFsKDEsIHNlYXJjaGNvdW50KCkudG90YWwsICdURVNUIDInKQogIHNldCByZWdleHBlbmdpbmU9MgogIGV4ZSBzZWFyY2hfY21kCiAgY2FsbCBhc3NlcnRfZXF1YWwoMiwgc2VhcmNoY291bnQoKS50b3RhbCwgJ1RFU1QgMicpCgogICIgVGVzdCAzOiBbWzpsb3dlcjpdXVwrCiAgbGV0IHNlYXJjaF9jbWQ9J25vcm0gL1w8W1s6bG93ZXI6XV1cK1w+JyAuLiAiXDxDUj4iCiAgc2V0IHJlZ2V4cGVuZ2luZT0wCiAgZXhlIHNlYXJjaF9jbWQKICBjYWxsIGFzc2VydF9lcXVhbCg0LCBzZWFyY2hjb3VudCgpLnRvdGFsLCAnVEVTVCAzIGxvd2VyJykKICBzZXQgcmVnZXhwZW5naW5lPTEKICBleGUgc2VhcmNoX2NtZAogIGNhbGwgYXNzZXJ0X2VxdWFsKDIsIHNlYXJjaGNvdW50KCkudG90YWwsICdURVNUIDMgbG93ZXInKQogIHNldCByZWdleHBlbmdpbmU9MgogIGV4ZSBzZWFyY2hfY21kCiAgY2FsbCBhc3NlcnRfZXF1YWwoNCwgc2VhcmNoY291bnQoKS50b3RhbCwgJ1RFU1QgMyBsb3dlcicpCgogICIgY2xlYW4gdXAKICBsZXQgJnJlZ2V4cGVuZ2luZT1fZW5naW5lCiAgYndpcGUhCmVuZGZ1bmMKCiIgdmltOiBzaGlmdHdpZHRoPTIgc3RzPTIgZXhwYW5kdGFiCg==