LyoKICogV3JpdHRlbiBieSBKLlQuIENvbmtsaW4gPGp0Y0BuZXRic2Qub3JnPi4KICogUHVibGljIGRvbWFpbi4KICogQWRhcHRlZCBmb3IgZmxvYXQgdHlwZSBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPi4KICoKICogQ2hhbmdlZCB0byB1c2UgZnlsMnhwMSBmb3IgdmFsdWVzIG5lYXIgMSwgPGRyZXBwZXJAY3lnbnVzLmNvbT4uCiAqLwoKI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CgoJLnNlY3Rpb24gLnJvZGF0YS5jc3Q4LCJhTSIsQHByb2diaXRzLDgKCgkucDJhbGlnbiAzCgkudHlwZSBvbmUsQG9iamVjdApvbmU6CS5kb3VibGUgMS4wCglBU01fU0laRV9ESVJFQ1RJVkUob25lKQoJLyogSXQgaXMgbm90IGltcG9ydGFudCB0aGF0IHRoaXMgY29uc3RhbnQgaXMgcHJlY2lzZS4gIEl0IGlzIG9ubHkKCSAgIGEgdmFsdWUgd2hpY2ggaXMga25vd24gdG8gYmUgb24gdGhlIHNhZmUgc2lkZSBmb3IgdXNpbmcgdGhlCgkgICBmeWwyeHAxIGluc3RydWN0aW9uLiAgKi8KCS50eXBlIGxpbWl0LEBvYmplY3QKbGltaXQ6CS5kb3VibGUgMC4yOQoJQVNNX1NJWkVfRElSRUNUSVZFKGxpbWl0KQoKCiNpZmRlZiBQSUMKIyBkZWZpbmUgTU8ob3ApIG9wIyNAR09UT0ZGKCVlZHgpCiNlbHNlCiMgZGVmaW5lIE1PKG9wKSBvcAojZW5kaWYKCgkudGV4dApFTlRSWShfX2llZWU3NTRfbG9nMTBmKQoJZmxkbGcyCQkJLy8gbG9nMTAoMikKCWZsZHMJNCglZXNwKQkJLy8geCA6IGxvZzEwKDIpCiNpZmRlZiBQSUMKCUxPQURfUElDX1JFRyAoZHgpCiNlbmRpZgoJZnhhbQoJZm5zdHN3CglmbGQJJXN0CQkvLyB4IDogeCA6IGxvZzEwKDIpCglzYWhmCglqYwkzZgkJLy8gaW4gY2FzZSB4IGlzIE5hTiBvciCxSW5mCjQ6CWZzdWJsCU1PKG9uZSkJCS8vIHgtMSA6IHggOiBsb2cxMCgyKQoJZmxkCSVzdAkJLy8geC0xIDogeC0xIDogeCA6IGxvZzEwKDIpCglmYWJzCQkJLy8gfHgtMXwgOiB4LTEgOiB4IDogbG9nMTAoMikKCWZjb21wbAlNTyhsaW1pdCkJLy8geC0xIDogeCA6IGxvZzEwKDIpCglmbnN0c3cJCQkvLyB4LTEgOiB4IDogbG9nMTAoMikKCWFuZGIJJDB4NDUsICVhaAoJanoJMmYKCWZzdHAJJXN0KDEpCQkvLyB4LTEgOiBsb2cxMCgyKQoJZnlsMnhwMQkJCS8vIGxvZzEwKHgpCglyZXQKCjI6CWZzdHAJJXN0KDApCQkvLyB4IDogbG9nMTAoMikKCWZ5bDJ4CQkJLy8gbG9nMTAoeCkKCXJldAoKMzoJanAJNGIJCS8vIGluIGNhc2UgeCBpcyCxSW5mCglmc3RwCSVzdCgxKQoJZnN0cAklc3QoMSkKCXJldApFTkQgKF9faWVlZTc1NF9sb2cxMGYpCnN0cm9uZ19hbGlhcyAoX19pZWVlNzU0X2xvZzEwZiwgX19sb2cxMGZfZmluaXRlKQo=