LyoKICogV3JpdHRlbiBieSBKLlQuIENvbmtsaW4gPGp0Y0BuZXRic2Qub3JnPi4KICogQWRhcHRlZCBmb3IgdXNlIGFzIGxvZzIgYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4uCiAqIFB1YmxpYyBkb21haW4uCiAqCiAqIENoYW5nZWQgdG8gdXNlIGZ5bDJ4cDEgZm9yIHZhbHVlcyBuZWFyIDEsIDxkcmVwcGVyQGN5Z251cy5jb20+LgogKiBBZGFwdGVkIGZvciB4ODYtNjQgYnkgQW5kcmVhcyBKYWVnZXIgPGFqQHN1c2UuZGU+LgogKi8KCiNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgoKCS5zZWN0aW9uIC5yb2RhdGEuY3N0OCwiYU0iLEBwcm9nYml0cyw4CgoJLnAyYWxpZ24gMwoJLnR5cGUgb25lLEBvYmplY3QKb25lOgkuZG91YmxlIDEuMAoJQVNNX1NJWkVfRElSRUNUSVZFKG9uZSkKCS8qIEl0IGlzIG5vdCBpbXBvcnRhbnQgdGhhdCB0aGlzIGNvbnN0YW50IGlzIHByZWNpc2UuICBJdCBpcyBvbmx5CgkgICBhIHZhbHVlIHdoaWNoIGlzIGtub3duIHRvIGJlIG9uIHRoZSBzYWZlIHNpZGUgZm9yIHVzaW5nIHRoZQoJICAgZnlsMnhwMSBpbnN0cnVjdGlvbi4gICovCgkudHlwZSBsaW1pdCxAb2JqZWN0CmxpbWl0OgkuZG91YmxlIDAuMjkKCUFTTV9TSVpFX0RJUkVDVElWRShsaW1pdCkKCgojaWZkZWYgUElDCiMgZGVmaW5lIE1PKG9wKSBvcCMjKCVyaXApCiNlbHNlCiMgZGVmaW5lIE1PKG9wKSBvcAojZW5kaWYKCgkudGV4dApFTlRSWShfX2llZWU3NTRfbG9nMmwpCglmbGRsCU1PKG9uZSkKCWZsZHQJOCglcnNwKQkJLy8geCA6IDEKCWZ4YW0KCWZuc3RzdwoJZmxkCSVzdAkJLy8geCA6IHggOiAxCgl0ZXN0YgkkMSwgJWFoCglqbnoJM2YJCS8vIGluIGNhc2UgeCBpcyBOYU4gb3IgsUluZgo0Oglmc3ViCSVzdCgyKSwgJXN0CS8vIHgtMSA6IHggOiAxCglmbGQJJXN0CQkvLyB4LTEgOiB4LTEgOiB4IDogMQoJZmFicwkJCS8vIHx4LTF8IDogeC0xIDogeCA6IDEKCWZjb21wbAlNTyhsaW1pdCkJLy8geC0xIDogeCA6IDEKCWZuc3RzdwkJCS8vIHgtMSA6IHggOiAxCglhbmRiCSQweDQ1LCAlYWgKCWp6CTJmCglmc3RwCSVzdCgxKQkJLy8geC0xIDogMQoJZnlsMnhwMQkJCS8vIGxvZyh4KQoJcmV0CgoyOglmc3RwCSVzdCgwKQkJLy8geCA6IDEKCWZ5bDJ4CQkJLy8gbG9nKHgpCglyZXQKCjM6CXRlc3RiCSQ0LCAlYWgKCWpuegk0YgkJLy8gaW4gY2FzZSB4IGlzILFJbmYKCWZzdHAJJXN0KDEpCglmc3RwCSVzdCgxKQoJcmV0CkVORCAoX19pZWVlNzU0X2xvZzJsKQoKCkVOVFJZKF9fbG9nMmxfZmluaXRlKQoJZmxkbAlNTyhvbmUpCglmbGR0CTgoJXJzcCkJCS8vIHggOiAxCglmbGQJJXN0CQkvLyB4IDogeCA6IDEKCWZzdWIJJXN0KDIpLCAlc3QJLy8geC0xIDogeCA6IDEKCWZsZAklc3QJCS8vIHgtMSA6IHgtMSA6IHggOiAxCglmYWJzCQkJLy8gfHgtMXwgOiB4LTEgOiB4IDogMQoJZmNvbXBsCU1PKGxpbWl0KQkvLyB4LTEgOiB4IDogMQoJZm5zdHN3CQkJLy8geC0xIDogeCA6IDEKCWFuZGIJJDB4NDUsICVhaAoJanoJMmIKCWZzdHAJJXN0KDEpCQkvLyB4LTEgOiAxCglmeWwyeHAxCQkJLy8gbG9nKHgpCglyZXQKRU5EIChfX2xvZzJsX2Zpbml0ZSkK