LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQWdlcmUgU3lzdGVtcyBJbmMuCiAqIFdpcmVsZXNzIGRldmljZSBkcml2ZXIgZm9yIExpbnV4ICh3bGFnczQ5KS4KICoKICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMgQWdlcmUgU3lzdGVtcyBJbmMuCiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqICAgaHR0cDovL3d3dy5hZ2VyZS5jb20KICoKICogSW5pdGlhbGx5IGRldmVsb3BlZCBieSBUcmlwbGVQb2ludCwgSW5jLgogKiAgIGh0dHA6Ly93d3cudHJpcGxlcG9pbnQuY29tCiAqCiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqCiAqICAgVGhpcyBmaWxlIGNvbnRhaW5zIERIRiBjb25maWd1cmF0aW9uIGluZm8uCiAqCiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqCiAqIFNPRlRXQVJFIExJQ0VOU0UKICoKICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMsCiAqIHdoaWNoIHlvdSBzaG91bGQgcmVhZCBjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4gIFVzaW5nIHRoaXMKICogc29mdHdhcmUgaW5kaWNhdGVzIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIElmIHlvdSBkbwogKiBub3QgYWdyZWUgd2l0aCB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgZG8gbm90IHVzZSB0aGUgc29mdHdhcmUuCiAqCiAqIENvcHlyaWdodCAoYykgMjAwMyBBZ2VyZSBTeXN0ZW1zIEluYy4KICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICogbW9kaWZpY2F0aW9ucywgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogKgogKiAuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcwogKiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhcyBjb21tZW50cyBpbiB0aGUgY29kZSBhcwogKiAgICB3ZWxsIGFzIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKICogICAgZGlzdHJpYnV0aW9uLgogKgogKiAuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgogKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICoKICogLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFnZXJlIFN5c3RlbXMgSW5jLiBub3IgdGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMKICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCiAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgogKgogKiBEaXNjbGFpbWVyCiAqCiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgk0FTIElTlCBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAogKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCiAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBBTlkKICogVVNFLCBNT0RJRklDQVRJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRISVMgU09GVFdBUkUgSVMgU09MRUxZIEFUIFRIRSBVU0VSUyBPV04KICogUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgQUdFUkUgU1lTVEVNUyBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQogKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwogKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CiAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAogKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIENPTlRSQUNULCBTVFJJQ1QKICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKICogREFNQUdFLgogKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKI2lmbmRlZiBESEZDRkdfSAojZGVmaW5lIERIRkNGR19ICi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogRmlsZSBESEZDRkcuSAogKgogKiBDb250ZW50czogI2RlZmluZXMgZm9yIHRoZSBESEYgbW9kdWxlCiAqCiAqIENvbW1lbnRzOgogKiAgIFNvbWUgY29tYmluYXRpb25zIG9mIHRoZSAjZGVmaW5lcyBpbiB0aGlzIGZpbGUgYXJlIGlsbGVnYWwgKGFzIG5vdGVkIGJlbG93KS4KICogICBJZiBhbiBpbGxlZ2FsIGNvbWJpbmF0aW9ucyBvZiAjZGVmaW5lcyBpcyBzcGVjaWZpZWQgYSBjb21waWxlIGVycm9yIGlzCiAqICAgZ2VuZXJhdGVkLiBTZWUgZG9jdW1lbnQgREhGVUcuRE9DIGZvciBtb3JlIGluZm9ybWF0aW9uLgogKgogKiBBdXRob3I6IEpvaG4gTWVlcnRlbnMKICogRGF0ZTogICAxMS0wMS0yMDAwCiAqCiAqIENoYW5nZSBoaXN0b3J5OgogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgoKLyogRGVmaW5lIERIRl9XQ0kgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBXQ0kgdG8gYWNjZXNzIHRoZSBPUmlOT0NPIGNhcmQuCiAgIERlZmluZSBESEZfVUlMIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgVUlMIHRvIGFjY2VzcyB0aGUgT1JpTk9DTyBjYXJkLgogICBZb3UgbXVzdCBkZWZpbmUgZWl0aGVyIERIRl9XQ0kgb3IgREhGX1VJTC4gSWYgbmVpdGhlciBvZiB0aGUgdHdvIGlzIGRlZmluZWQKICAgb3IgYm90aCBhIGNvbXBpbGUgZXJyb3IgaXMgZ2VuZXJhdGVkLiAqLwojZGVmaW5lIERIRl9XQ0kKLyogISEhI2RlZmluZSBESEZfVUlMICovCgovKiBEZWZpbmUgREhGX0JJR19FTkRJQU4gaWYgeW91IGFyZSB3b3JraW5nIG9uIGEgYmlnIGVuZGlhbiBwbGF0Zm9ybS4KICAgRGVmaW5lIERIRl9MSVRUTEVfRU5ESUFOIGlmIHlvdSBhcmUgd29ya2luZyBvbiBhIGxpdHRsZSBlbmRpYW4gcGxhdGZvcm0uCiAgIFlvdSBtdXN0IGRlZmluZSBlaXRoZXIgREhGX0JJR19FTkRJQU4gb3IgREhGX0xJVFRMRV9FTkRJQU4uIElmIG5laXRoZXIgb2YKICAgdGhlIHR3byBpcyBkZWZpbmVkIG9yIGJvdGggYSBjb21waWxlIGVycm9yIGlzIGdlbmVyYXRlZC4gKi8KI2lmZGVmIFVTRV9CSUdfRU5ESUFOCiNkZWZpbmUgREhGX0JJR19FTkRJQU4KI2Vsc2UKI2RlZmluZSBESEZfTElUVExFX0VORElBTgojZW5kaWYgIC8qIFVTRV9CSUdfRU5ESUFOICovCgovKiBEZWZpbmUgREhGX1dJTiBpZiB5b3UgYXJlIHdvcmtpbmcgb24gV2luZG93cyBwbGF0Zm9ybS4KICAgRGVmaW5lIERIRl9ET1MgaWYgeW91IGFyZSB3b3JraW5nIG9uIERPUy4KICAgWW91IG11c3QgZGVmaW5lIGVpdGhlciBESEZfV0lOIG9yIERIRl9ET1MuIElmIG5laXRoZXIgb2YKICAgdGhlIHR3byBpcyBkZWZpbmVkIG9yIGJvdGggYSBjb21waWxlIGVycm9yIGlzIGdlbmVyYXRlZC4KICAhISEjZGVmaW5lIERIRl9XSU4KICAhISEjZGVmaW5lIERIRl9ET1MgKi8KCi8qIERlZmluZSBpZiB5b3Ugd2FudCB0aGUgREhGIHRvIHVzZXJzLiBOb3QgZGVmaW5pbmcgREhGX0dFVF9SRVNfTVNHCiAgIGxlYWRzIHRvIGEgZGVjcmVhc2UgaW4gY29kZSBzaXplIGFzIG1lc3NhZ2Ugc3RyaW5ncyBhcmUgbm90IGluY2x1ZGVkLgogICEhISNkZWZpbmUgREhGX0dFVF9SRVNfTVNHICovCgovKiBMaW51eCBkcml2ZXIgc3BlY2lmaWMKICAgUHJldmVudCBpbmNsdXNpb24gb2Ygc3RkbGliLmggYW5kIHN0cmluZy5oICovCiNkZWZpbmUgX0lOQ19TVERMSUIKI2RlZmluZSBfSU5DX1NUUklORwoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBEZWZpbmUgb25lIG9yIG1vcmUgb2YgdGhlIGZvbGxvd2luZyBEU0YgI2RlZmluZXMgaWYgeW91IHdhbnQgdG8gaW1wbGVtZW50CiAgIHRoZSByZWxhdGVkIERTRi1mdW5jdGlvbi4gRnVuY3Rpb24gZHNmX2NhbGxiYWNrIG11c3QgYWxsd2F5cyBiZSBpbXBsZW1lbnRlZC4KICAgU2VlIGZpbGUgREhGLkggZm9yIHByb3RvdHlwZXMgb2YgdGhlIGZ1bmN0aW9ucy4gKi8KCi8qIERlZmluZSBEU0ZfQUxMT0MgaWYgeW91IHdhbnQgdG8gbWFuYWdlIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBkZS1hbGxvY2F0aW9uCiAgIGZvciB0aGUgREhGLiBJZiBEU0ZfQUxMT0MgaXMgZGVmaW5lZCB5b3UgbXVzdCBpbXBsZW1lbnQgZHNmX2FsbG9jIGFuZCBkc2ZfZnJlZS4KICAhISEjZGVmaW5lIERTRl9BTExPQyAqLwoKLyogRGVmaW5lIERTRl9DT05GSVJNIGlmIHlvdSB3YW50IHRoZSBESEYgdG8gYXNrIHRoZSB1c2VyIGZvciBjb25maXJtYXRpb24gaW4gYQogICBudW1iZXIgb2Ygc2l0dWF0aW9ucy4gSWYgRFNGX0NPTkZJUk0gaXMgZGVmaW5lZCB5b3UgbXVzdCBpbXBsZW1lbnQgZHNmX2NvbmZpcm0uCiAgIE5vdCBkZWZpbmluZyBEU0ZfQ09ORklSTSBsZWFkcyB0byBhIGRlY3JlYXNlIGluIGNvZGUgc2l6ZSBhcyBjb25maXJtYXRpb24KICAgc3RyaW5ncyBhcmUgbm90IGluY2x1ZGVkLgogICEhISNkZWZpbmUgRFNGX0NPTkZJUk0gKi8KCi8qIERlZmluZSBEU0ZfREVCVUdfTUVTU0FHRSBpZiB5b3Ugd2FudCBkZWJ1ZyBtZXNzYWdlcyBhZGRlZCB0byB5b3VyIG91dHB1dC4KICAgSWYgeW91IGRlZmluZSBEU0ZfREVCVUdfTUVTU0FHRSB0aGVuIHlvdSBtdXN0IGltcGxlbWVudCBmdW5jdGlvbgogICBkc2ZfZGVidWdfbWVzc2FnZS4KICAjZGVmaW5lIERTRl9ERUJVR19NRVNTQUdFICovCgovKiBEZWZpbmUgRFNGX0FTU0VSVCBpZiB5b3Ugd2FudCBhc3NlcnRzIHRvIGJlIGFjdGl2YXRlZC4KICAgSWYgeW91IGRlZmluZSBEU0ZfQVNTRVJUIHRoZW4geW91IG11c3QgaW1wbGVtZW50IGZ1bmN0aW9uIGRzZl9hc3NlcnQuCiAgI2RlZmluZSBEQkcgMQogICNkZWZpbmUgRFNGX0FTU0VSVCAqLwoKLyogRGVmaW5lIERTRl9EQldJTiBpZiB5b3Ugd2FudCBhc3NlcnRzIGFuZCBkZWJ1ZyBtZXNzYWdlcyB0byBiZSBzZW5kIHRvIGEgZGVidWcKICAgd2luZG93IGxpa2UgU09GVElDRSBvciBEZWJ1Z1ZpZXcgZnJvbSBTeXNJbnRlcm5hbHMuCiAgISEhI2RlZmluZSBEU0ZfREJXSU4KICAhISEgTm90IGltcGxlbWVudGVkIHlldCEgKi8KCi8qIERlZmluZSBEU0ZfVk9MQVRJTEVfT05MWSBpZiB5b3Ugb25seSB3YW50cyB0byB1c2UgdmFsYXRpbGUgZnVuY3Rpb25zCiAgIFRoaXMgaXMgYSB0eXBpY2FsIHNldHRpbmcgZm9yIGEgQVAgYW5kIGEgZHJpdmVyLiAqLwojZGVmaW5lIERTRl9WT0xBVElMRV9PTkxZCgovKiBEZWZpbmUgRFNGX0hFUk1FU0lJIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgREhGIGZvciB0aGUgSGVybWVzLUlJICovCiNpZmRlZiBIRVJNRVMyCiNkZWZpbmUgRFNGX0hFUk1FU0lJCiNlbHNlCiN1bmRlZiBEU0ZfSEVSTUVTSUkKI2VuZGlmIC8qIEhFUk1FUzIgKi8KCi8qIERlZmluZSBEU0ZfQklOQVJZX0ZJTEUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBESEYgaW4gY29tYmluYXRpb24gd2l0aAogICByZWFkaW5nIHRoZSBGaXJtd2FyZSBmcm9tIGEgc2VwYXJhdGUgYmluYXJ5IGZpbGUuCiAgISEhI2RlZmluZSBEU0ZfQklOQVJZX0ZJTEUgKi8KCiNlbmRpZiAvKiBESEZDRkdfSCAqLwo=