I2luY2x1ZGUgPGxvY2FsZS5oPgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKCnN0YXRpYyBzdHJ1Y3QKewogIGNvbnN0IGNoYXIgKmxvY2FsZTsKICBjb25zdCBjaGFyICpzdHIxOwogIGNvbnN0IGNoYXIgKnN0cjI7CiAgaW50IHJlc3VsdDsKfSB0ZXN0c1tdID0KICB7CiAgICB7ICJDIiwgIlRSQU5TTElUIiwgInRyYW5zbGl0IiwgMCB9LAogICAgeyAiZGVfREUuSVNPLTg4NTktMSIsICJUUkFOU0xJVCIsICJ0cmFuc2xpdCIsIDAgfSwKICAgIHsgImRlX0RFLklTTy04ODU5LTEiLCAiVFJBTlNMSVQiLCAidHLEbnNsaXQiLCAtMSB9LAogICAgeyAiZGVfREUuVVRGLTgiLCAiVFJBTlNMSVQiLCAidHJhbnNsaXQiLCAwIH0sCiAgICB7ICJkZV9ERS5JU08tODg1OS0xIiwgIuQiLCAixCIsIDEgfQogIH07CiNkZWZpbmUgbnRlc3RzIChzaXplb2YgKHRlc3RzKSAvIHNpemVvZiAodGVzdHNbMF0pKQoKCmludAptYWluICh2b2lkKQp7CiAgc2l6ZV90IGNudDsKICBpbnQgcmVzdWx0ID0gMDsKICBsb2NhbGVfdCBsb2MgPSBuZXdsb2NhbGUgKDEgPDwgTENfQUxMLCAiQyIsIE5VTEwpOwoKICBmb3IgKGNudCA9IDA7IGNudCA8IG50ZXN0czsgKytjbnQpCiAgICB7CiAgICAgIGludCByOwoKICAgICAgaWYgKHNldGxvY2FsZSAoTENfQUxMLCB0ZXN0c1tjbnRdLmxvY2FsZSkgPT0gTlVMTCkKCXsKCSAgcHJpbnRmICgiY2Fubm90IHNldCBsb2NhbGUgXCIlc1wiOiAlbVxuIiwgdGVzdHNbY250XS5sb2NhbGUpOwoJICByZXN1bHQgPSAxOwoJICBjb250aW51ZTsKCX0KCiAgICAgIHByaW50ZiAoIlxuc3RyY2FzZWNtcF9sIChcIiVzXCIsIFwiJXNcIiwgbG9jKVxuIiwKCSAgICAgIHRlc3RzW2NudF0uc3RyMSwgdGVzdHNbY250XS5zdHIyKTsKCiAgICAgIHIgPSBzdHJjYXNlY21wX2wgKHRlc3RzW2NudF0uc3RyMSwgdGVzdHNbY250XS5zdHIyLCBsb2MpOwogICAgICBpZiAodGVzdHNbY250XS5yZXN1bHQgPT0gMCkKCXsKCSAgaWYgKHIgIT0gMCkKCSAgICB7CgkgICAgICBwcmludGYgKCJcIiVzXCIgYW5kIFwiJXNcIiBleHBlY3RlZCB0byBiZSB0aGUgc2FtZSwgcmVzdWx0ICVkXG4iLAoJCSAgICAgIHRlc3RzW2NudF0uc3RyMSwgdGVzdHNbY250XS5zdHIyLCByKTsKCSAgICAgIHJlc3VsdCA9IDE7CgkgICAgfQoJfQogICAgICBlbHNlIGlmICh0ZXN0c1tjbnRdLnJlc3VsdCA8IDApCgl7CgkgIGlmIChyID49IDApCgkgICAgewoJICAgICAgcHJpbnRmICgiXCIlc1wiIGV4cGVjdGVkIHRvIGJlIHNtYWxsZXIgdGhhbiBcIiVzXCIsIHJlc3VsdCAlZFxuIiwKCQkgICAgICB0ZXN0c1tjbnRdLnN0cjEsIHRlc3RzW2NudF0uc3RyMiwgcik7CgkgICAgICByZXN1bHQgPSAxOwoJICAgIH0KCX0KICAgICAgZWxzZQoJewoJICBpZiAociA8PSAwKQoJICAgIHsKCSAgICAgIHByaW50ZiAoIlwiJXNcIiBleHBlY3RlZCB0byBiZSBsYXJnZXIgdGhhbiBcIiVzXCIsIHJlc3VsdCAlZFxuIiwKCQkgICAgICB0ZXN0c1tjbnRdLnN0cjEsIHRlc3RzW2NudF0uc3RyMiwgcik7CgkgICAgICByZXN1bHQgPSAxOwoJICAgIH0KCX0KICAgIH0KCiAgcmV0dXJuIHJlc3VsdDsKfQo=