LyoKICogV3JpdHRlbiBieSBKLlQuIENvbmtsaW4gPGp0Y0BuZXRic2Qub3JnPi4KICogQWRhcHRlZCBmb3IgdXNlIGFzIGxvZzIgYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4uCiAqIFB1YmxpYyBkb21haW4uCiAqCiAqIENoYW5nZWQgdG8gdXNlIGZ5bDJ4cDEgZm9yIHZhbHVlcyBuZWFyIDEsIDxkcmVwcGVyQGN5Z251cy5jb20+LgogKi8KCiNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgoKI2lmZGVmIF9fRUxGX18KCS5zZWN0aW9uIC5yb2RhdGEKI2Vsc2UKCS50ZXh0CiNlbmRpZgoJLmFsaWduIEFMSUdOQVJHKDQpCglBU01fVFlQRV9ESVJFQ1RJVkUob25lLEBvYmplY3QpCm9uZToJLmRvdWJsZSAxLjAKCUFTTV9TSVpFX0RJUkVDVElWRShvbmUpCgkvKiBJdCBpcyBub3QgaW1wb3J0YW50IHRoYXQgdGhpcyBjb25zdGFudCBpcyBwcmVjaXNlLiAgSXQgaXMgb25seQoJICAgYSB2YWx1ZSB3aGljaCBpcyBrbm93biB0byBiZSBvbiB0aGUgc2FmZSBzaWRlIGZvciB1c2luZyB0aGUKCSAgIGZ5bDJ4cDEgaW5zdHJ1Y3Rpb24uICAqLwoJQVNNX1RZUEVfRElSRUNUSVZFKGxpbWl0LEBvYmplY3QpCmxpbWl0OgkuZG91YmxlIDAuMjkKCUFTTV9TSVpFX0RJUkVDVElWRShsaW1pdCkKCgojaWZkZWYgUElDCiNkZWZpbmUgTU8ob3ApIG9wIyNAR09UT0ZGKCVlZHgpCiNlbHNlCiNkZWZpbmUgTU8ob3ApIG9wCiNlbmRpZgoKCS50ZXh0CkVOVFJZKF9faWVlZTc1NF9sb2cybCkKI2lmZGVmIFBJQwoJTE9BRF9QSUNfUkVHIChkeCkKI2VuZGlmCglmbGRsCU1PKG9uZSkKCWZsZHQJNCglZXNwKQkJLy8geCA6IDEKCWZ4YW0KCWZuc3RzdwoJZmxkCSVzdAkJLy8geCA6IHggOiAxCglzYWhmCglqYwkzZgkJLy8gaW4gY2FzZSB4IGlzIE5hTiBvciCxSW5mCjQ6CWZzdWIJJXN0KDIpLCAlc3QJLy8geC0xIDogeCA6IDEKCWZsZAklc3QJCS8vIHgtMSA6IHgtMSA6IHggOiAxCglmYWJzCQkJLy8gfHgtMXwgOiB4LTEgOiB4IDogMQoJZmNvbXBsCU1PKGxpbWl0KQkvLyB4LTEgOiB4IDogMQoJZm5zdHN3CQkJLy8geC0xIDogeCA6IDEKCWFuZGIJJDB4NDUsICVhaAoJanoJMmYKCWZzdHAJJXN0KDEpCQkvLyB4LTEgOiAxCglmeWwyeHAxCQkJLy8gbG9nKHgpCglyZXQKCjI6CWZzdHAJJXN0KDApCQkvLyB4IDogMQoJZnlsMngJCQkvLyBsb2coeCkKCXJldAoKMzoJanAJNGIJCS8vIGluIGNhc2UgeCBpcyCxSW5mCglmc3RwCSVzdCgxKQoJZnN0cAklc3QoMSkKCXJldApFTkQgKF9faWVlZTc1NF9sb2cybCkK