LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBAZmlsZSAgICAgYXBwX3NwaV9tYXN0ZXIuYwogKgogKiBAYnJpZWYgICAgZm9yIFRMU1IgY2hpcHMKICoKICogQGF1dGhvciAgIHB1YmxpY0B0ZWxpbmstc2VtaS5jb207CiAqIEBkYXRlICAgICBTZXAuIDMwLCAyMDEwCiAqCiAqIEBhdHRlbnRpb24KICoKICogIENvcHlyaWdodCAoQykgMjAxOS0yMDIwIFRlbGluayBTZW1pY29uZHVjdG9yIChTaGFuZ2hhaSkgQ28uLCBMdGQuCiAqCiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKICogIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAogKgogKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogKgogKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKICogIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KI2luY2x1ZGUgInRsX2NvbW1vbi5oIgojaW5jbHVkZSAiZHJpdmVycy5oIgoKI2lmIChEUklWRVJfVEVTVF9NT0RFID09IFRFU1RfU1BJKQoKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgIDgyNTggRGVtbyBDb2RlIENvbmZpZwogICAxLiBzZWxlY3Qgc3BpIGRlbW86ICBtYXN0ZXIgb3Igc2xhdmUoIGNvbmZpZyBpdCBpbiBhcHBfY29uZmlnLmggKQogICAyLiBpZiBzcGkgc2xhdmUgZGVtbywgIHNlbGVjdCBzbGF2ZSB3b3JraW5nIG1vZGU6IGRtYSBtb2RlCiAgIDMuIGlmIHNwaSBtYXN0ZXIgZGVtbywgc2VsZWN0IHRoZSBwZWVyIGRldmljZSBzcGkgc2xhdmUgYWRkcmVzcyBtb2RlOgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgICNkZWZpbmUgICAgIFNMQVZFX1RFTElOS184MjV4X0RNQV9NT0RFICAgICAgMSAvL3NsYXZlICA4MjV4IGRtYSBtb2RlLCBtYXN0ZXIgc2VuZCAzIGJ5dGUgc3JhbSBhZGRyZXNzKDB4NDAwMDB+MHg0ZmZmZikKCSNkZWZpbmUgICAgIFNMQVZFX1RFTElOS184MjZ4X0RNQV9NT0RFICAgICAgMiAvL3NsYXZlICA4MjZ4IGRtYSBtb2RlLCBtYXN0ZXIgc2VuZCAyIGJ5dGUgc3JhbSBhZGRyZXNzKDB4ODAwMH4weGZmZmYpCgkjZGVmaW5lCQlQRUVSX1NMQVZFX0RFVklDRQkJCQlTTEFWRV9URUxJTktfODI1eF9ETUFfTU9ERQogICAgI2RlZmluZSAgICAgU1BJX0NTX1BJTgkJCQkgICAgICAgIEdQSU9fUEQ2Ly9TUEkgQ1MgcGluCgojaWYgKFBFRVJfU0xBVkVfREVWSUNFID09IFNMQVZFX1RFTElOS184MjV4X0RNQV9NT0RFKQogICAgdW5zaWduZWQgY2hhciBzbGF2ZVJlZ0FkZHJfV3JpdGVDTURbXSA9IHtTTEFWRV9SRUdBRERSMSxTTEFWRV9SRUdBRERSMixTTEFWRV9SRUdBRERSMyxTUElfV1JJVEVfQ01EfTsKCXVuc2lnbmVkIGNoYXIgc2xhdmVSZWdBZGRyX1JlYWRDTURbXSAgPSB7U0xBVkVfUkVHQUREUjEsU0xBVkVfUkVHQUREUjIsU0xBVkVfUkVHQUREUjMsU1BJX1JFQURfQ01EfTsKI2VsaWYoUEVFUl9TTEFWRV9ERVZJQ0UgPT0gU0xBVkVfVEVMSU5LXzgyNnhfRE1BX01PREUpCiAgICB1bnNpZ25lZCBjaGFyIHNsYXZlUmVnQWRkcl9Xcml0ZUNNRFtdID0ge1NMQVZFX1JFR0FERFIyLFNMQVZFX1JFR0FERFIzLFNQSV9XUklURV9DTUR9OwogICAgdW5zaWduZWQgY2hhciBzbGF2ZVJlZ0FkZHJfUmVhZENNRFtdICA9IHtTTEFWRV9SRUdBRERSMixTTEFWRV9SRUdBRERSMyxTUElfUkVBRF9DTUR9OwojZW5kaWYKLy93cml0ZSBidWZmCnZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgc3BpX21hc3Rlcl90eF9idWZmW0RCR19EQVRBX0xFTl09ezB4MDAsMHgxMSwweDIyLDB4MzMsMHg0NCwweDU1LDB4NjYsMHg3NywweDg4LDB4OTksMHhhYSwweGJiLDB4Y2MsMHhkZCwweGVlLDB4ZmZ9OwovL3JlYWQgYnVmZgp2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIHNwaV9tYXN0ZXJfcnhfX2J1ZmZbREJHX0RBVEFfTEVOXT17MHgwMH07Cgp2b2lkIHNwaV9tYXN0ZXJfdGVzdF9pbml0KHZvaWQpCnsKCS8vc3BpIGNsb2NrIDUwMEssIG9ubHkgbWFzdGVyIG5lZWQgc2V0IGkyYyBjbG9jawoJc3BpX21hc3Rlcl9pbml0KCh1bnNpZ25lZCBjaGFyKShDTE9DS19TWVNfQ0xPQ0tfSFovKDIqNTAwMDAwKS0xKSxTUElfTU9ERTApOyAgICAgICAgICAvL2Rpdl9jbG9jay4gc3BpX2NsayA9IHN5c19jbGsvKChkaXZfY2xrKzEpKjIpLG1vZGUgc2VsZWN0CiAgICBzcGlfbWFzdGVyX2dwaW9fc2V0KFNQSV9HUElPX1NDTF9BNCxTUElfR1BJT19DU19ENixTUElfR1BJT19TRE9fQTIsU1BJX0dQSU9fU0RJX0EzKTsgICAgLy9tYXN0ZXIgbW9kZSCjunNwaSBwaW4gc2V0Cn0KCnZvaWQgc3BpX21hc3Rlcl9tYWlubG9vcCh2b2lkKQp7CglXYWl0TXMoMTAwMCk7ICAgLy8xUwoJc3BpX21hc3Rlcl90eF9idWZmWzBdICs9IDE7CglzcGlfbWFzdGVyX3R4X2J1ZmZbMF0gJj0gMHhmZjsKI2lmIChQRUVSX1NMQVZFX0RFVklDRSA9PSBTTEFWRV9URUxJTktfODI1eF9ETUFfTU9ERSkKICAgIHNwaV93cml0ZShzbGF2ZVJlZ0FkZHJfV3JpdGVDTUQsIDQsKHVuc2lnbmVkIGNoYXIqKXNwaV9tYXN0ZXJfdHhfYnVmZiwgREJHX0RBVEFfTEVOLFNQSV9DU19QSU4pOy8vIHBscyByZWZlciB0byB0aGUgZGF0YXNoZWV0IGZvciB0aGUgd3JpdGUgYW5kIHJlYWQgZm9ybWF0IG9mIHNwaS4KCXNwaV9yZWFkKCBzbGF2ZVJlZ0FkZHJfUmVhZENNRCAsIDQsKHVuc2lnbmVkIGNoYXIqKXNwaV9tYXN0ZXJfcnhfX2J1ZmYsREJHX0RBVEFfTEVOLFNQSV9DU19QSU4pOwojZWxpZiAoUEVFUl9TTEFWRV9ERVZJQ0UgPT0gU0xBVkVfVEVMSU5LXzgyNnhfRE1BX01PREUpCglzcGlfd3JpdGUoc2xhdmVSZWdBZGRyX1dyaXRlQ01ELCAzLCh1bnNpZ25lZCBjaGFyKilzcGlfbWFzdGVyX3R4X2J1ZmYsIERCR19EQVRBX0xFTixTUElfQ1NfUElOKTsvLyBwbHMgcmVmZXIgdG8gdGhlIGRhdGFzaGVldCBmb3IgdGhlIHdyaXRlIGFuZCByZWFkIGZvcm1hdCBvZiBzcGkuCiAgICBzcGlfcmVhZCggc2xhdmVSZWdBZGRyX1JlYWRDTUQgLCAzLCh1bnNpZ25lZCBjaGFyKilzcGlfbWFzdGVyX3J4X19idWZmLERCR19EQVRBX0xFTixTUElfQ1NfUElOKTsKI2VuZGlmCn0KCgoKCiNlbmRpZiAvL2VuZCBvZiBEUklWRVJfVEVTVF9NT0RFID09IFRFU1RfU1BJCg==