Ly8geyBkZy1yZXF1aXJlLW5hbWVkbG9jYWxlICIiIH0KCi8vIDIwMDEtMDgtMTUgQmVuamFtaW4gS29zbmlrICA8YmtvekByZWRoYXQuY29tPgoKLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA1LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgovLwovLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCi8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQovLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQovLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKLy8gYW55IGxhdGVyIHZlcnNpb24uCgovLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQovLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgoKLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgoKLy8gMjIuMi40LjEuMSBjb2xsYXRlIG1lbWJlcnMKCiNpbmNsdWRlIDxsb2NhbGU+CiNpbmNsdWRlIDx0ZXN0c3VpdGVfaG9va3MuaD4KCnZvaWQgdGVzdDAyKCkKewogIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAgdHlwZWRlZiBzdGQ6OmNvbGxhdGU8Y2hhcj46OnN0cmluZ190eXBlIHN0cmluZ190eXBlOwoKICBib29sIHRlc3QgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgPSB0cnVlOwoKICAvLyBiYXNpYyBjb25zdHJ1Y3Rpb24KICBsb2NhbGUgbG9jX2MgPSBsb2NhbGU6OmNsYXNzaWMoKTsKICBsb2NhbGUgbG9jX3VzID0gbG9jYWxlKCJlbl9VUyIpOwogIGxvY2FsZSBsb2NfZnIgPSBsb2NhbGUoImZyX0ZSIik7CiAgbG9jYWxlIGxvY19kZSA9IGxvY2FsZSgiZGVfREUiKTsKICBWRVJJRlkoIGxvY19jICE9IGxvY19kZSApOwogIFZFUklGWSggbG9jX3VzICE9IGxvY19mciApOwogIFZFUklGWSggbG9jX3VzICE9IGxvY19kZSApOwogIFZFUklGWSggbG9jX2RlICE9IGxvY19mciApOwoKICAvLyBjYWNoZSB0aGUgY29sbGF0ZSBmYWNldHMKICBjb25zdCBjb2xsYXRlPGNoYXI+JiBjb2xsX2RlID0gdXNlX2ZhY2V0PGNvbGxhdGU8Y2hhcj4gPihsb2NfZGUpOyAKCiAgLy8gbG9uZyBoYXNoKGNvbnN0IGNoYXJUKiwgY29uc3QgY2hhclQqKSBjb3NudAogIGNvbnN0IGNoYXIqIHN0cmxpdDMgPSAixHVnbGVpbiBBdWdtZW50IjsgLy8gIkMiID09ICJBdWdtZW50IMR1Z2xlaW4iCiAgY29uc3QgY2hhciogc3RybGl0NCA9ICJCYXNlIGJh3yBCYd8gQmFzdCI7IC8vICJDIiA9PSAiQmFzZSBiYd8gQmHfIEJhc3QiCgogIGludCBpMTsKICBpbnQgaTI7CiAgaW50IHNpemUzID0gY2hhcl90cmFpdHM8Y2hhcj46Omxlbmd0aChzdHJsaXQzKSAtIDE7CiAgaW50IHNpemU0ID0gY2hhcl90cmFpdHM8Y2hhcj46Omxlbmd0aChzdHJsaXQ0KSAtIDE7CgogIHN0cmluZ190eXBlIHN0cjMgPSBjb2xsX2RlLnRyYW5zZm9ybShzdHJsaXQzLCBzdHJsaXQzICsgc2l6ZTMpOwogIHN0cmluZ190eXBlIHN0cjQgPSBjb2xsX2RlLnRyYW5zZm9ybShzdHJsaXQ0LCBzdHJsaXQ0ICsgc2l6ZTQpOwogIGkxID0gc3RyMy5jb21wYXJlKHN0cjQpOwogIGkyID0gY29sbF9kZS5jb21wYXJlKHN0cmxpdDMsIHN0cmxpdDMgKyBzaXplMywgc3RybGl0NCwgc3RybGl0NCArIHNpemU0KTsKICBWRVJJRlkgKCBpMiA9PSAtMSApOwogIFZFUklGWSAoIGkxICogaTIgPiAwICk7Cn0KCmludCBtYWluKCkKewogIHRlc3QwMigpOwogIHJldHVybiAwOwp9Cg==