LyoqCiAqIFRoaXMgZmlsZSBoYXMgbm8gY29weXJpZ2h0IGFzc2lnbmVkIGFuZCBpcyBwbGFjZWQgaW4gdGhlIFB1YmxpYyBEb21haW4uCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSB3NjQgbWluZ3ctcnVudGltZSBwYWNrYWdlLgogKiBObyB3YXJyYW50eSBpcyBnaXZlbjsgcmVmZXIgdG8gdGhlIGZpbGUgRElTQ0xBSU1FUiB3aXRoaW4gdGhpcyBwYWNrYWdlLgogKi8KICNpZmRlZiBfV0lONjQKCS5maWxlCSJsb2cybC5TIgoJLnRleHQKCS5hbGlnbiA0Cm9uZToJLmRvdWJsZSAxLjAKCS8qIEl0IGlzIG5vdCBpbXBvcnRhbnQgdGhhdCB0aGlzIGNvbnN0YW50IGlzIHByZWNpc2UuICBJdCBpcyBvbmx5CgkgICBhIHZhbHVlIHdoaWNoIGlzIGtub3duIHRvIGJlIG9uIHRoZSBzYWZlIHNpZGUgZm9yIHVzaW5nIHRoZQoJICAgZnlsMnhwMSBpbnN0cnVjdGlvbi4gICovCmxpbWl0OgkuZG91YmxlIDAuMjkKCgkudGV4dAoJLmFsaWduIDQKLmdsb2JsIF9sb2cybAoJLmRlZglfbG9nMmw7CS5zY2wJMjsJLnR5cGUJMzI7CS5lbmRlZgpfbG9nMmw6CglmbGRsCW9uZQoJZmxkdAkoJXJkeCkJCS8vIHggOiAxCglmeGFtCglmbnN0c3cKCWZsZAklc3QJCS8vIHggOiB4IDogMQoJc2FoZgoJamMJM2YJCS8vIGluIGNhc2UgeCBpcyBOYU4gb3IgsUluZgo0Oglmc3ViCSVzdCgyKSwgJXN0CS8vIHgtMSA6IHggOiAxCglmbGQJJXN0CQkvLyB4LTEgOiB4LTEgOiB4IDogMQoJZmFicwkJCS8vIHx4LTF8IDogeC0xIDogeCA6IDEKCWZjb21wbAlsaW1pdAkJLy8geC0xIDogeCA6IDEKCWZuc3RzdwkJCS8vIHgtMSA6IHggOiAxCglhbmRiCSQweDQ1LCAlYWgKCWp6CTJmCglmc3RwCSVzdCgxKQkJLy8geC0xIDogMQoJZnlsMnhwMQkJCS8vIGxvZyh4KQoJbW92cQklcmN4LCVyYXgKCWZzdHB0CSglcmN4KQoJcmV0CgoyOglmc3RwCSVzdCgwKQkJLy8geCA6IDEKCWZ5bDJ4CQkJLy8gbG9nKHgpCgltb3ZxCSVyY3gsJXJheAoJZnN0cHQJKCVyY3gpCglyZXQKCjM6CWpwCTRiCQkvLyBpbiBjYXNlIHggaXMgsUluZgoJZnN0cAklc3QoMSkKCWZzdHAJJXN0KDEpCgltb3ZxCSVyY3gsJXJheAoJZnN0cHQJKCVyY3gpCglyZXQKI2Vsc2UKCS5maWxlCSJsb2cybC5TIgoJLnRleHQKCS5hbGlnbiA0Cm9uZToJLmRvdWJsZSAxLjAKCS8qIEl0IGlzIG5vdCBpbXBvcnRhbnQgdGhhdCB0aGlzIGNvbnN0YW50IGlzIHByZWNpc2UuICBJdCBpcyBvbmx5CgkgICBhIHZhbHVlIHdoaWNoIGlzIGtub3duIHRvIGJlIG9uIHRoZSBzYWZlIHNpZGUgZm9yIHVzaW5nIHRoZQoJICAgZnlsMnhwMSBpbnN0cnVjdGlvbi4gICovCmxpbWl0OgkuZG91YmxlIDAuMjkKCgkudGV4dAoJLmFsaWduIDQKLmdsb2JsIF9sb2cybAoJLmRlZglfbG9nMmw7CS5zY2wJMjsJLnR5cGUJMzI7CS5lbmRlZgpfbG9nMmw6CglmbGRsCW9uZQoJZmxkdAk0KCVlc3ApCQkvLyB4IDogMQoJZnhhbQoJZm5zdHN3CglmbGQJJXN0CQkvLyB4IDogeCA6IDEKCXNhaGYKCWpjCTNmCQkvLyBpbiBjYXNlIHggaXMgTmFOIG9yILFJbmYKNDoJZnN1Ygklc3QoMiksICVzdAkvLyB4LTEgOiB4IDogMQoJZmxkCSVzdAkJLy8geC0xIDogeC0xIDogeCA6IDEKCWZhYnMJCQkvLyB8eC0xfCA6IHgtMSA6IHggOiAxCglmY29tcGwJbGltaXQJCS8vIHgtMSA6IHggOiAxCglmbnN0c3cJCQkvLyB4LTEgOiB4IDogMQoJYW5kYgkkMHg0NSwgJWFoCglqegkyZgoJZnN0cAklc3QoMSkJCS8vIHgtMSA6IDEKCWZ5bDJ4cDEJCQkvLyBsb2coeCkKCXJldAoKMjoJZnN0cAklc3QoMCkJCS8vIHggOiAxCglmeWwyeAkJCS8vIGxvZyh4KQoJcmV0CgozOglqcAk0YgkJLy8gaW4gY2FzZSB4IGlzILFJbmYKCWZzdHAJJXN0KDEpCglmc3RwCSVzdCgxKQoJcmV0CiNlbmRpZgo=