LyoKICogRE9TIEVYRSBsb2FkZXIKICoKICogQ29weXJpZ2h0IDE5OTggT3ZlIEvldmVuCiAqLwoKI2lmbmRlZiBfX1dJTkVfRE9TRVhFX0gKI2RlZmluZSBfX1dJTkVfRE9TRVhFX0gKCiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4gLyogcGlkX3QgKi8KI2luY2x1ZGUgIndpbmJhc2UuaCIgICAvKiBmb3IgTFBTVEFSVFVQSU5GTzMyQSAqLwojaW5jbHVkZSAid2lubnQuaCIgICAgIC8qIGZvciBQQ09OVEVYVCAqLwoKc3RydWN0IF9ET1NFVkVOVDsKCnR5cGVkZWYgc3RydWN0IF9ET1NUQVNLIHsKIFdPUkQgcHNwX3NlZywgcmV0dmFsOwogV09SRCBkcG1pX2ZsYWc7Cn0gRE9TVEFTSywgKkxQRE9TVEFTSzsKCiNkZWZpbmUgRE9TX1BSSU9SSVRZX1JFQUxUSU1FIDAgIC8qIElSUTAgKi8KI2RlZmluZSBET1NfUFJJT1JJVFlfS0VZQk9BUkQgMSAgLyogSVJRMSAqLwojZGVmaW5lIERPU19QUklPUklUWV9WR0EgICAgICAyICAvKiBJUlE5ICovCiNkZWZpbmUgRE9TX1BSSU9SSVRZX01PVVNFICAgIDUgIC8qIElSUTEyICovCiNkZWZpbmUgRE9TX1BSSU9SSVRZX1NFUklBTCAgIDEwIC8qIElSUTQgKi8KCiNpZiBkZWZpbmVkKGxpbnV4KSAmJiBkZWZpbmVkKF9faTM4Nl9fKQojZGVmaW5lIE1aX1NVUFBPUlRFRAojZW5kaWYgLyogbGludXgtaTM4NiAqLwoKI2RlZmluZSBWODZfRkxBRyAweDAwMDIwMDAwCgpleHRlcm4gQk9PTCBXSU5BUEkgTVpfTG9hZEltYWdlKCBMUENTVFIgY21kbGluZSApOwpleHRlcm4gQk9PTCBXSU5BUEkgTVpfRXhlYyggQ09OVEVYVDg2ICpjb250ZXh0LCBMUENTVFIgZmlsZW5hbWUsIEJZVEUgZnVuYywgTFBWT0lEIHBhcmFtYmxrICk7CmV4dGVybiB2b2lkIFdJTkFQSSBNWl9FeGl0KCBDT05URVhUODYgKmNvbnRleHQsIEJPT0wgY3NfcHNwLCBXT1JEIHJldHZhbCApOwpleHRlcm4gTFBET1NUQVNLIFdJTkFQSSBNWl9DdXJyZW50KCB2b2lkICk7CmV4dGVybiBMUERPU1RBU0sgV0lOQVBJIE1aX0FsbG9jRFBNSVRhc2soIHZvaWQgKTsKZXh0ZXJuIGludCBXSU5BUEkgRE9TVk1fRW50ZXIoIENPTlRFWFQ4NiAqY29udGV4dCApOwpleHRlcm4gdm9pZCBXSU5BUEkgRE9TVk1fV2FpdCggaW50IHJlYWRfcGlwZSwgSEFORExFIGhPYmplY3QgKTsKZXh0ZXJuIHZvaWQgV0lOQVBJIERPU1ZNX1F1ZXVlRXZlbnQoIGludCBpcnEsIGludCBwcmlvcml0eSwgdm9pZCAoKnJlbGF5KShDT05URVhUODYqLHZvaWQqKSwgdm9pZCAqZGF0YSApOwpleHRlcm4gdm9pZCBXSU5BUEkgRE9TVk1fUElDX2lvcG9ydF9vdXQoIFdPUkQgcG9ydCwgQllURSB2YWwgKTsKZXh0ZXJuIHZvaWQgV0lOQVBJIERPU1ZNX1NldFRpbWVyKCB1bnNpZ25lZCB0aWNrcyApOwpleHRlcm4gdW5zaWduZWQgV0lOQVBJIERPU1ZNX0dldFRpbWVyKCB2b2lkICk7CgojZW5kaWYgLyogX19XSU5FX0RPU0VYRV9IICovCg==