LyogQm9vc3QgaW50ZXJ2YWwvZGV0YWlsL2J1Z3MuaHBwIGZpbGUKICoKICogQ29weXJpZ2h0IDIwMDAgSmVucyBNYXVyZXIKICogQ29weXJpZ2h0IDIwMDIgSGVydukgQnL2bm5pbWFubiwgR3VpbGxhdW1lIE1lbHF1aW9uZCwgU3lsdmFpbiBQaW9uCiAqCiAqIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KICogKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IKICogY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCiAqLwoKI2lmbmRlZiBCT09TVF9OVU1FUklDX0lOVEVSVkFMX0RFVEFJTF9CVUdTCiNkZWZpbmUgQk9PU1RfTlVNRVJJQ19JTlRFUlZBTF9ERVRBSUxfQlVHUwoKI2luY2x1ZGUgPGJvb3N0L2NvbmZpZy5ocHA+CgojaWYgZGVmaW5lZChfX0dMSUJDX18pICYmIChkZWZpbmVkKF9fVVNFX01JU0MpIHx8IGRlZmluZWQoX19VU0VfWE9QRU5fRVhURU5ERUQpIHx8IGRlZmluZWQoX19VU0VfSVNPQzk5KSkgJiYgIWRlZmluZWQoX19JQ0MpCiMgIGRlZmluZSBCT09TVF9IQVNfSU5WX0hZUEVSQk9MSUMKI2VuZGlmCgojaWZkZWYgQk9PU1RfTk9fU1REQ19OQU1FU1BBQ0UKIyAgZGVmaW5lIEJPT1NUX05VTUVSSUNfSU5URVJWQUxfdXNpbmdfbWF0aChhKSB1c2luZyA6OmEKIyAgaWZkZWYgQk9PU1RfSEFTX0lOVl9IWVBFUkJPTElDCiMgICAgZGVmaW5lIEJPT1NUX05VTUVSSUNfSU5URVJWQUxfdXNpbmdfYWh5cChhKSB1c2luZyA6OmEKIyAgZW5kaWYKI2Vsc2UKIyAgZGVmaW5lIEJPT1NUX05VTUVSSUNfSU5URVJWQUxfdXNpbmdfbWF0aChhKSB1c2luZyBzdGQ6OmEKIyAgaWYgZGVmaW5lZChCT09TVF9IQVNfSU5WX0hZUEVSQk9MSUMpCiMgICAgaWYgZGVmaW5lZChfX0dMSUJDUFBfXykgfHwgZGVmaW5lZChfX0dMSUJDWFhfXykKIyAgICBkZWZpbmUgQk9PU1RfTlVNRVJJQ19JTlRFUlZBTF91c2luZ19haHlwKGEpIHVzaW5nIDo6YQojICAgIGVsc2UKIyAgICBkZWZpbmUgQk9PU1RfTlVNRVJJQ19JTlRFUlZBTF91c2luZ19haHlwKGEpIHVzaW5nIHN0ZDo6YQojICBlbmRpZgojICBlbmRpZgojZW5kaWYKCiNpZiBkZWZpbmVkKF9fQ09NT19fKSB8fCBkZWZpbmVkKEJPT1NUX0lOVEVMKQojICBkZWZpbmUgQk9PU1RfTlVNRVJJQ19JTlRFUlZBTF91c2luZ19tYXgoYSkgdXNpbmcgc3RkOjphCiNlbGlmIGRlZmluZWQoQk9PU1RfTk9fU1REQ19OQU1FU1BBQ0UpCiMgIGRlZmluZSBCT09TVF9OVU1FUklDX0lOVEVSVkFMX3VzaW5nX21heChhKSB1c2luZyA6OmEKI2Vsc2UKIyAgZGVmaW5lIEJPT1NUX05VTUVSSUNfSU5URVJWQUxfdXNpbmdfbWF4KGEpIHVzaW5nIHN0ZDo6YQojZW5kaWYKCiNpZm5kZWYgQk9PU1RfTlVNRVJJQ19JTlRFUlZBTF91c2luZ19haHlwCiMgIGRlZmluZSBCT09TVF9OVU1FUklDX0lOVEVSVkFMX3VzaW5nX2FoeXAoYSkKI2VuZGlmCgojaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKF9fR05VQ19fIDw9IDIpCi8vIGNmIFBSIGMrKy8xOTgxIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBidWcKI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGJvb3N0L2NvbmZpZy9ub190cjEvY21hdGguaHBwPgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgbnVtZXJpYyB7CiAgdXNpbmcgc3RkOjptaW47CiAgdXNpbmcgc3RkOjptYXg7CiAgdXNpbmcgc3RkOjpzcXJ0OwogIHVzaW5nIHN0ZDo6ZXhwOwogIHVzaW5nIHN0ZDo6bG9nOwogIHVzaW5nIHN0ZDo6Y29zOwogIHVzaW5nIHN0ZDo6dGFuOwogIHVzaW5nIHN0ZDo6YXNpbjsKICB1c2luZyBzdGQ6OmFjb3M7CiAgdXNpbmcgc3RkOjphdGFuOwogIHVzaW5nIHN0ZDo6Y2VpbDsKICB1c2luZyBzdGQ6OmZsb29yOwogIHVzaW5nIHN0ZDo6c2luaDsKICB1c2luZyBzdGQ6OmNvc2g7CiAgdXNpbmcgc3RkOjp0YW5oOwojIHVuZGVmIEJPT1NUX05VTUVSSUNfSU5URVJWQUxfdXNpbmdfbWF4CiMgdW5kZWYgQk9PU1RfTlVNRVJJQ19JTlRFUlZBTF91c2luZ19tYXRoCiMgZGVmaW5lIEJPT1NUX05VTUVSSUNfSU5URVJWQUxfdXNpbmdfbWF4KGEpCiMgZGVmaW5lIEJPT1NUX05VTUVSSUNfSU5URVJWQUxfdXNpbmdfbWF0aChhKQojIHVuZGVmIEJPT1NUX05VTUVSSUNfSU5URVJWQUxfdXNpbmdfYWh5cAojIGRlZmluZSBCT09TVF9OVU1FUklDX0lOVEVSVkFMX3VzaW5nX2FoeXAoYSkKfSAvLyBuYW1lc3BhY2UgbnVtZXJpYwp9IC8vIG5hbWVzcGFjZSBib29zdAojZW5kaWYKCiNlbmRpZiAvLyBCT09TVF9OVU1FUklDX0lOVEVSVkFMX0RFVEFJTF9CVUdTCg==