LyoKICogV3JpdHRlbiBieSBKLlQuIENvbmtsaW4gPGp0Y0BuZXRic2Qub3JnPi4KICogUHVibGljIGRvbWFpbi4KICoKICogQWRhcHRlZCBmb3IgYGxvbmcgZG91YmxlJyBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPi4KICoKICogQ2hhbmdlZCB0byB1c2UgZnlsMnhwMSBmb3IgdmFsdWVzIG5lYXIgMSwgPGRyZXBwZXJAY3lnbnVzLmNvbT4uCiAqIEFkYXB0ZWQgZm9yIHg4Ni02NCBieSBBbmRyZWFzIEphZWdlciA8YWpAc3VzZS5kZT4uCiAqLwoKI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CgoJLnNlY3Rpb24gLnJvZGF0YS5jc3Q4LCJhTSIsQHByb2diaXRzLDgKCgkucDJhbGlnbiAzCgkudHlwZSBvbmUsQG9iamVjdApvbmU6CS5kb3VibGUgMS4wCglBU01fU0laRV9ESVJFQ1RJVkUob25lKQoJLyogSXQgaXMgbm90IGltcG9ydGFudCB0aGF0IHRoaXMgY29uc3RhbnQgaXMgcHJlY2lzZS4gIEl0IGlzIG9ubHkKCSAgIGEgdmFsdWUgd2hpY2ggaXMga25vd24gdG8gYmUgb24gdGhlIHNhZmUgc2lkZSBmb3IgdXNpbmcgdGhlCgkgICBmeWwyeHAxIGluc3RydWN0aW9uLiAgKi8KCS50eXBlIGxpbWl0LEBvYmplY3QKbGltaXQ6CS5kb3VibGUgMC4yOQoJQVNNX1NJWkVfRElSRUNUSVZFKGxpbWl0KQoKCiNpZmRlZiBQSUMKIyBkZWZpbmUgTU8ob3ApIG9wIyMoJXJpcCkKI2Vsc2UKIyBkZWZpbmUgTU8ob3ApIG9wCiNlbmRpZgoKCS50ZXh0CkVOVFJZKF9faWVlZTc1NF9sb2cxMGwpCglmbGRsZzIJCQkvLyBsb2cxMCgyKQoJZmxkdAk4KCVyc3ApCQkvLyB4IDogbG9nMTAoMikKCWZ4YW0KCWZuc3RzdwoJZmxkCSVzdAkJLy8geCA6IHggOiBsb2cxMCgyKQoJdGVzdGIJJDEsICVhaAoJam56CTNmCQkvLyBpbiBjYXNlIHggaXMgTmFOIG9yILFJbmYKNDoJZnN1YmwJTU8ob25lKQkJLy8geC0xIDogeCA6IGxvZzEwKDIpCglmbGQJJXN0CQkvLyB4LTEgOiB4LTEgOiB4IDogbG9nMTAoMikKCWZhYnMJCQkvLyB8eC0xfCA6IHgtMSA6IHggOiBsb2cxMCgyKQoJZmNvbXBsCU1PKGxpbWl0KQkvLyB4LTEgOiB4IDogbG9nMTAoMikKCWZuc3RzdwkJCS8vIHgtMSA6IHggOiBsb2cxMCgyKQoJYW5kYgkkMHg0NSwgJWFoCglqegkyZgoJZnhhbQoJZm5zdHN3CglhbmRiCSQweDQ1LCAlYWgKCWNtcGIJJDB4NDAsICVhaAoJam5lCTVmCglmYWJzCQkJLy8gbG9nMTAoMSkgaXMgKzAgaW4gYWxsIHJvdW5kaW5nIG1vZGVzLgo1Oglmc3RwCSVzdCgxKQkJLy8geC0xIDogbG9nMTAoMikKCWZ5bDJ4cDEJCQkvLyBsb2cxMCh4KQoJcmV0CgoyOglmc3RwCSVzdCgwKQkJLy8geCA6IGxvZzEwKDIpCglmeWwyeAkJCS8vIGxvZzEwKHgpCglyZXQKCjM6CXRlc3RiCSQ0LCAlYWgKCWpuegk0YgkJLy8gaW4gY2FzZSB4IGlzILFJbmYKCWZzdHAJJXN0KDEpCglmc3RwCSVzdCgxKQoJZmFkZAklc3QoMCkKCXJldApFTkQoX19pZWVlNzU0X2xvZzEwbCkKCgpFTlRSWShfX2xvZzEwbF9maW5pdGUpCglmbGRsZzIJCQkvLyBsb2cxMCgyKQoJZmxkdAk4KCVyc3ApCQkvLyB4IDogbG9nMTAoMikKCWZsZAklc3QJCS8vIHggOiB4IDogbG9nMTAoMikKNDoJZnN1YmwJTU8ob25lKQkJLy8geC0xIDogeCA6IGxvZzEwKDIpCglmbGQJJXN0CQkvLyB4LTEgOiB4LTEgOiB4IDogbG9nMTAoMikKCWZhYnMJCQkvLyB8eC0xfCA6IHgtMSA6IHggOiBsb2cxMCgyKQoJZmNvbXBsCU1PKGxpbWl0KQkvLyB4LTEgOiB4IDogbG9nMTAoMikKCWZuc3RzdwkJCS8vIHgtMSA6IHggOiBsb2cxMCgyKQoJYW5kYgkkMHg0NSwgJWFoCglqegkyYgoJZnhhbQoJZm5zdHN3CglhbmRiCSQweDQ1LCAlYWgKCWNtcGIJJDB4NDAsICVhaAoJam5lCTZmCglmYWJzCQkJLy8gbG9nMTAoMSkgaXMgKzAgaW4gYWxsIHJvdW5kaW5nIG1vZGVzLgo2Oglmc3RwCSVzdCgxKQkJLy8geC0xIDogbG9nMTAoMikKCWZ5bDJ4cDEJCQkvLyBsb2cxMCh4KQoJcmV0CkVORChfX2xvZzEwbF9maW5pdGUpCg==