LyoqCiAqIFRoaXMgZmlsZSBoYXMgbm8gY29weXJpZ2h0IGFzc2lnbmVkIGFuZCBpcyBwbGFjZWQgaW4gdGhlIFB1YmxpYyBEb21haW4uCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSB3NjQgbWluZ3ctcnVudGltZSBwYWNrYWdlLgogKiBObyB3YXJyYW50eSBpcyBnaXZlbjsgcmVmZXIgdG8gdGhlIGZpbGUgRElTQ0xBSU1FUiB3aXRoaW4gdGhpcyBwYWNrYWdlLgogKi8KICNpZmRlZiBfV0lONjQKCS5maWxlCSJsb2cxMGwuUyIKCS50ZXh0CgkuYWxpZ24gNApvbmU6CS5kb3VibGUgMS4wCgkvKiBJdCBpcyBub3QgaW1wb3J0YW50IHRoYXQgdGhpcyBjb25zdGFudCBpcyBwcmVjaXNlLiAgSXQgaXMgb25seQoJICAgYSB2YWx1ZSB3aGljaCBpcyBrbm93biB0byBiZSBvbiB0aGUgc2FmZSBzaWRlIGZvciB1c2luZyB0aGUKCSAgIGZ5bDJ4cDEgaW5zdHJ1Y3Rpb24uICAqLwpsaW1pdDoJLmRvdWJsZSAwLjI5CgoJLnRleHQKCS5hbGlnbiA4Ci5nbG9ibCBfbG9nMTBsCgkuZGVmCV9sb2cxMGw7CS5zY2wJMjsJLnR5cGUJMzI7CS5lbmRlZgpfbG9nMTBsOgoJZmxkbGcyCQkJLy8gbG9nMTAoMikKCWZsZHQJKCVyZHgpCQkvLyB4IDogbG9nMTAoMikKCWZ4YW0KCWZuc3RzdwoJZmxkCSVzdAkJLy8geCA6IHggOiBsb2cxMCgyKQoJc2FoZgoJamMJM2YJCS8vIGluIGNhc2UgeCBpcyBOYU4gb3IgsUluZgo0Oglmc3VibAlvbmUJCS8vIHgtMSA6IHggOiBsb2cxMCgyKQoJZmxkCSVzdAkJLy8geC0xIDogeC0xIDogeCA6IGxvZzEwKDIpCglmYWJzCQkJLy8gfHgtMXwgOiB4LTEgOiB4IDogbG9nMTAoMikKCWZjb21wbAlsaW1pdAkJLy8geC0xIDogeCA6IGxvZzEwKDIpCglmbnN0c3cJCQkvLyB4LTEgOiB4IDogbG9nMTAoMikKCWFuZGIJJDB4NDUsICVhaAoJanoJMmYKCWZzdHAJJXN0KDEpCQkvLyB4LTEgOiBsb2cxMCgyKQoJZnlsMnhwMQkJCS8vIGxvZzEwKHgpCgltb3ZxCSVyY3gsJXJheAoJZnN0cHQJKCVyY3gpCglyZXQKCjI6CWZzdHAJJXN0KDApCQkvLyB4IDogbG9nMTAoMikKCWZ5bDJ4CQkJLy8gbG9nMTAoeCkKCW1vdnEJJXJjeCwlcmF4Cglmc3RwdAkoJXJjeCkKCXJldAoKMzoJanAJNGIJCS8vIGluIGNhc2UgeCBpcyCxSW5mCglmc3RwCSVzdCgxKQoJZnN0cAklc3QoMSkKCW1vdnEJJXJjeCwlcmF4Cglmc3RwdAkoJXJjeCkKCXJldAojZWxzZQoJLmZpbGUJImxvZzEwbC5TIgoJLnRleHQKCS5hbGlnbiA0Cm9uZToJLmRvdWJsZSAxLjAKCS8qIEl0IGlzIG5vdCBpbXBvcnRhbnQgdGhhdCB0aGlzIGNvbnN0YW50IGlzIHByZWNpc2UuICBJdCBpcyBvbmx5CgkgICBhIHZhbHVlIHdoaWNoIGlzIGtub3duIHRvIGJlIG9uIHRoZSBzYWZlIHNpZGUgZm9yIHVzaW5nIHRoZQoJICAgZnlsMnhwMSBpbnN0cnVjdGlvbi4gICovCmxpbWl0OgkuZG91YmxlIDAuMjkKCgkudGV4dAoJLmFsaWduIDQKLmdsb2JsIF9sb2cxMGwKCS5kZWYJX2xvZzEwbDsJLnNjbAkyOwkudHlwZQkzMjsJLmVuZGVmCl9sb2cxMGw6CglmbGRsZzIJCQkvLyBsb2cxMCgyKQoJZmxkdAk0KCVlc3ApCQkvLyB4IDogbG9nMTAoMikKCWZ4YW0KCWZuc3RzdwoJZmxkCSVzdAkJLy8geCA6IHggOiBsb2cxMCgyKQoJc2FoZgoJamMJM2YJCS8vIGluIGNhc2UgeCBpcyBOYU4gb3IgsUluZgo0Oglmc3VibAlvbmUJCS8vIHgtMSA6IHggOiBsb2cxMCgyKQoJZmxkCSVzdAkJLy8geC0xIDogeC0xIDogeCA6IGxvZzEwKDIpCglmYWJzCQkJLy8gfHgtMXwgOiB4LTEgOiB4IDogbG9nMTAoMikKCWZjb21wbAlsaW1pdAkJLy8geC0xIDogeCA6IGxvZzEwKDIpCglmbnN0c3cJCQkvLyB4LTEgOiB4IDogbG9nMTAoMikKCWFuZGIJJDB4NDUsICVhaAoJanoJMmYKCWZzdHAJJXN0KDEpCQkvLyB4LTEgOiBsb2cxMCgyKQoJZnlsMnhwMQkJCS8vIGxvZzEwKHgpCglyZXQKCjI6CWZzdHAJJXN0KDApCQkvLyB4IDogbG9nMTAoMikKCWZ5bDJ4CQkJLy8gbG9nMTAoeCkKCXJldAoKMzoJanAJNGIJCS8vIGluIGNhc2UgeCBpcyCxSW5mCglmc3RwCSVzdCgxKQoJZnN0cAklc3QoMSkKCXJldAojZW5kaWYK