I2luY2x1ZGUgPGxvY2FsZS5oPgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKCnN0YXRpYyBzdHJ1Y3QKewogIGNvbnN0IGNoYXIgKmxvY2FsZTsKICBjb25zdCBjaGFyICpzdHIxOwogIGNvbnN0IGNoYXIgKnN0cjI7CiAgaW50IHJlc3VsdDsKfSB0ZXN0c1tdID0KICB7CiAgICB7ICJDIiwgIlRSQU5TTElUIiwgInRyYW5zbGl0IiwgMCB9LAogICAgeyAiZGVfREUuSVNPLTg4NTktMSIsICJUUkFOU0xJVCIsICJ0cmFuc2xpdCIsIDAgfSwKICAgIHsgImRlX0RFLklTTy04ODU5LTEiLCAiVFJBTlNMSVQiLCAidHLEbnNsaXQiLCAtMSB9LAogICAgeyAiZGVfREUuVVRGLTgiLCAiVFJBTlNMSVQiLCAidHJhbnNsaXQiLCAwIH0sCiAgICB7ICJkZV9ERS5JU08tODg1OS0xIiwgIuQiLCAixCIsIDEgfQogIH07CiNkZWZpbmUgbnRlc3RzIChzaXplb2YgKHRlc3RzKSAvIHNpemVvZiAodGVzdHNbMF0pKQoKCnN0YXRpYyBpbnQKZG9fdGVzdCAodm9pZCkKewogIHNpemVfdCBjbnQ7CiAgaW50IHJlc3VsdCA9IDA7CiAgbG9jYWxlX3QgbG9jID0gbmV3bG9jYWxlICgxIDw8IExDX0FMTCwgIkMiLCBOVUxMKTsKCiAgZm9yIChjbnQgPSAwOyBjbnQgPCBudGVzdHM7ICsrY250KQogICAgewogICAgICBpbnQgcjsKCiAgICAgIGlmIChzZXRsb2NhbGUgKExDX0FMTCwgdGVzdHNbY250XS5sb2NhbGUpID09IE5VTEwpCgl7CgkgIHByaW50ZiAoImNhbm5vdCBzZXQgbG9jYWxlIFwiJXNcIjogJW1cbiIsIHRlc3RzW2NudF0ubG9jYWxlKTsKCSAgcmVzdWx0ID0gMTsKCSAgY29udGludWU7Cgl9CgogICAgICBwcmludGYgKCJcbnN0cmNhc2VjbXBfbCAoXCIlc1wiLCBcIiVzXCIsIGxvYylcbiIsCgkgICAgICB0ZXN0c1tjbnRdLnN0cjEsIHRlc3RzW2NudF0uc3RyMik7CgogICAgICByID0gc3RyY2FzZWNtcF9sICh0ZXN0c1tjbnRdLnN0cjEsIHRlc3RzW2NudF0uc3RyMiwgbG9jKTsKICAgICAgaWYgKHRlc3RzW2NudF0ucmVzdWx0ID09IDApCgl7CgkgIGlmIChyICE9IDApCgkgICAgewoJICAgICAgcHJpbnRmICgiXCIlc1wiIGFuZCBcIiVzXCIgZXhwZWN0ZWQgdG8gYmUgdGhlIHNhbWUsIHJlc3VsdCAlZFxuIiwKCQkgICAgICB0ZXN0c1tjbnRdLnN0cjEsIHRlc3RzW2NudF0uc3RyMiwgcik7CgkgICAgICByZXN1bHQgPSAxOwoJICAgIH0KCX0KICAgICAgZWxzZSBpZiAodGVzdHNbY250XS5yZXN1bHQgPCAwKQoJewoJICBpZiAociA+PSAwKQoJICAgIHsKCSAgICAgIHByaW50ZiAoIlwiJXNcIiBleHBlY3RlZCB0byBiZSBzbWFsbGVyIHRoYW4gXCIlc1wiLCByZXN1bHQgJWRcbiIsCgkJICAgICAgdGVzdHNbY250XS5zdHIxLCB0ZXN0c1tjbnRdLnN0cjIsIHIpOwoJICAgICAgcmVzdWx0ID0gMTsKCSAgICB9Cgl9CiAgICAgIGVsc2UKCXsKCSAgaWYgKHIgPD0gMCkKCSAgICB7CgkgICAgICBwcmludGYgKCJcIiVzXCIgZXhwZWN0ZWQgdG8gYmUgbGFyZ2VyIHRoYW4gXCIlc1wiLCByZXN1bHQgJWRcbiIsCgkJICAgICAgdGVzdHNbY250XS5zdHIxLCB0ZXN0c1tjbnRdLnN0cjIsIHIpOwoJICAgICAgcmVzdWx0ID0gMTsKCSAgICB9Cgl9CiAgICB9CgogIHJldHVybiByZXN1bHQ7Cn0KCiNkZWZpbmUgVEVTVF9GVU5DVElPTiBkb190ZXN0ICgpCiNpbmNsdWRlICIuLi90ZXN0LXNrZWxldG9uLmMiCg==