LyoqCiAqIFRoaXMgZmlsZSBoYXMgbm8gY29weXJpZ2h0IGFzc2lnbmVkIGFuZCBpcyBwbGFjZWQgaW4gdGhlIFB1YmxpYyBEb21haW4uCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSB3NjQgbWluZ3ctcnVudGltZSBwYWNrYWdlLgogKiBObyB3YXJyYW50eSBpcyBnaXZlbjsgcmVmZXIgdG8gdGhlIGZpbGUgRElTQ0xBSU1FUi5QRCB3aXRoaW4gdGhpcyBwYWNrYWdlLgogKi8KI2luY2x1ZGUgPF9taW5nd19tYWMuaD4KCgkuZmlsZQkibG9nMTBsLlMiCgkudGV4dAojaWZkZWYgX1dJTjY0CgkuYWxpZ24gOAojZWxzZQoJLmFsaWduIDQKI2VuZGlmCm9uZToJLmRvdWJsZSAxLjAKCS8qIEl0IGlzIG5vdCBpbXBvcnRhbnQgdGhhdCB0aGlzIGNvbnN0YW50IGlzIHByZWNpc2UuICBJdCBpcyBvbmx5CgkgICBhIHZhbHVlIHdoaWNoIGlzIGtub3duIHRvIGJlIG9uIHRoZSBzYWZlIHNpZGUgZm9yIHVzaW5nIHRoZQoJICAgZnlsMnhwMSBpbnN0cnVjdGlvbi4gICovCmxpbWl0OgkuZG91YmxlIDAuMjkKCgkudGV4dAojaWZkZWYgX1dJTjY0CgkuYWxpZ24gOAojZWxzZQoJLmFsaWduIDQKI2VuZGlmCi5nbG9ibCBfX01JTkdXX1VTWU1CT0wobG9nMTBsKQoJLmRlZglfX01JTkdXX1VTWU1CT0wobG9nMTBsKTsJLnNjbAkyOwkudHlwZQkzMjsJLmVuZGVmCl9fTUlOR1dfVVNZTUJPTChsb2cxMGwpOgojaWZkZWYgX1dJTjY0CglmbGRsZzIJCQkvLyBsb2cxMCgyKQoJZmxkdAkoJXJkeCkJCS8vIHggOiBsb2cxMCgyKQoJZnhhbQoJZm5zdHN3CglmbGQJJXN0CQkvLyB4IDogeCA6IGxvZzEwKDIpCglzYWhmCglqYwkzZgkJLy8gaW4gY2FzZSB4IGlzIE5hTiBvciCxSW5mCjQ6CWZzdWJsCW9uZQkJLy8geC0xIDogeCA6IGxvZzEwKDIpCglmbGQJJXN0CQkvLyB4LTEgOiB4LTEgOiB4IDogbG9nMTAoMikKCWZhYnMJCQkvLyB8eC0xfCA6IHgtMSA6IHggOiBsb2cxMCgyKQoJZmNvbXBsCWxpbWl0CQkvLyB4LTEgOiB4IDogbG9nMTAoMikKCWZuc3RzdwkJCS8vIHgtMSA6IHggOiBsb2cxMCgyKQoJYW5kYgkkMHg0NSwgJWFoCglqegkyZgoJZnN0cAklc3QoMSkJCS8vIHgtMSA6IGxvZzEwKDIpCglmeWwyeHAxCQkJLy8gbG9nMTAoeCkKCW1vdnEJJXJjeCwlcmF4Cgltb3ZxCSQwLDgoJXJjeCkKCWZzdHB0CSglcmN4KQoJcmV0CgoyOglmc3RwCSVzdCgwKQkJLy8geCA6IGxvZzEwKDIpCglmeWwyeAkJCS8vIGxvZzEwKHgpCgltb3ZxCSVyY3gsJXJheAoJbW92cQkkMCw4KCVyY3gpCglmc3RwdAkoJXJjeCkKCXJldAoKMzoJanAJNGIJCS8vIGluIGNhc2UgeCBpcyCxSW5mCglmc3RwCSVzdCgxKQoJZnN0cAklc3QoMSkKCW1vdnEJJXJjeCwlcmF4Cgltb3ZxCSQwLDgoJXJjeCkKCWZzdHB0CSglcmN4KQoJcmV0CiNlbHNlCglmbGRsZzIJCQkvLyBsb2cxMCgyKQoJZmxkdAk0KCVlc3ApCQkvLyB4IDogbG9nMTAoMikKCWZ4YW0KCWZuc3RzdwoJZmxkCSVzdAkJLy8geCA6IHggOiBsb2cxMCgyKQoJc2FoZgoJamMJM2YJCS8vIGluIGNhc2UgeCBpcyBOYU4gb3IgsUluZgo0Oglmc3VibAlvbmUJCS8vIHgtMSA6IHggOiBsb2cxMCgyKQoJZmxkCSVzdAkJLy8geC0xIDogeC0xIDogeCA6IGxvZzEwKDIpCglmYWJzCQkJLy8gfHgtMXwgOiB4LTEgOiB4IDogbG9nMTAoMikKCWZjb21wbAlsaW1pdAkJLy8geC0xIDogeCA6IGxvZzEwKDIpCglmbnN0c3cJCQkvLyB4LTEgOiB4IDogbG9nMTAoMikKCWFuZGIJJDB4NDUsICVhaAoJanoJMmYKCWZzdHAJJXN0KDEpCQkvLyB4LTEgOiBsb2cxMCgyKQoJZnlsMnhwMQkJCS8vIGxvZzEwKHgpCglyZXQKCjI6CWZzdHAJJXN0KDApCQkvLyB4IDogbG9nMTAoMikKCWZ5bDJ4CQkJLy8gbG9nMTAoeCkKCXJldAoKMzoJanAJNGIJCS8vIGluIGNhc2UgeCBpcyCxSW5mCglmc3RwCSVzdCgxKQoJZnN0cAklc3QoMSkKCXJldAojZW5kaWYK