LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogIEBmaWxlOiAgbG9jX2FwaV9ycGNfZ2x1ZS5oCiAgQGJyaWVmOiAgTG9jIEFQSSBBbmRyb2lkIGdsdWUgY29kZSBoZWFkZXIKCiAgREVTQ1JJUFRJT04KICAgICBMb2MgQVBJIEFuZHJvaWQgZ2x1ZSBjb2RlIGhlYWRlcgoKICBJTklUSUFMSVpBVElPTiBBTkQgU0VRVUVOQ0lORyBSRVFVSVJFTUVOVFMKCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQ29weXJpZ2h0IChjKSAyMDA5LCBRVUFMQ09NTSBVU0EsIElOQy4KCkFsbCByaWdodHMgcmVzZXJ2ZWQuCgpSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Cgq3ICAgICAgICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKCrcgICAgICAgICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAoKtyAgICAgICAgIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFFVQUxDT01NIFVTQSwgSU5DLiAgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCgpUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgovKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAgICAgICAgICBFRElUIEhJU1RPUlkgRk9SIE1PRFVMRQoKICBUaGlzIHNlY3Rpb24gY29udGFpbnMgY29tbWVudHMgZGVzY3JpYmluZyBjaGFuZ2VzIG1hZGUgdG8gdGhlIG1vZHVsZS4KICBOb3RpY2UgdGhhdCBjaGFuZ2VzIGFyZSBsaXN0ZWQgaW4gcmV2ZXJzZSBjaHJvbm9sb2dpY2FsIG9yZGVyLgoKd2hlbiAgICAgICB3aG8gICAgICB3aGF0LCB3aGVyZSwgd2h5Ci0tLS0tLS0tICAgLS0tICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQowMy8xNy8wOSAgIGR4ICAgICAgIEluaXRpYWwgdmVyc2lvbgoKJElkOiAvL3NvdXJjZS9xY29tL3FjdC9tb2RlbS9ncHMvY2dwcy9kZXYvbG9jYXRpb25taWRkbGV3YXJlL2xvY2FwaS9hcHAtbGludXgvc291cmNlL3Rlc3QvbG9jX2FwaV90ZXN0L2xvY19hcGlfY2JfbG9nLmgjNCAkCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwoKI2lmbmRlZiBMT0NfQVBJX1JQQ19HTFVFX0gKI2RlZmluZSBMT0NfQVBJX1JQQ19HTFVFX0gKCi8qIEluY2x1ZGUgUlBDIGhlYWRlcnMgKi8KI2luY2x1ZGUgImxvY19hcGlfY29tbW9uLmgiCiNpbmNsdWRlICJsb2NfYXBpLmgiCiNpbmNsdWRlICJsb2NfYXBpX2NiLmgiCiNpbmNsdWRlICJsb2NfYXBpX2ZpeHVwLmgiCgojaWZkZWYgX19jcGx1c3BsdXMKZXh0ZXJuICJDIgp7CiNlbmRpZgoKLyogQm9vbGVhbiAqLwovKiBPdGhlciBkYXRhIHR5cGVzIGluIGNvbWRlZi5oIGFyZSBkZWZpbmVkIGluIHJwYyBzdHVicywgc28gZml4IGl0IGhlcmUgKi8KdHlwZWRlZiB1bnNpZ25lZCBjaGFyIGJvb2xlYW47CiNkZWZpbmUgVFJVRSAxCiNkZWZpbmUgRkFMU0UgMAoKZXh0ZXJuIGludCBsb2NfYXBpX2dsdWVfaW5pdCh2b2lkKTsKZXh0ZXJuIGludCBsb2NfYXBpX251bGwodm9pZCk7Cgp0eXBlZGVmIGludDMyIChsb2NfZXZlbnRfY2JfZl90eXBlKSgKICAgICAgcnBjX2xvY19jbGllbnRfaGFuZGxlX3R5cGUgICAgICAgICAgICBsb2NfaGFuZGxlLCAgICAgICAgICAgICAvKiBoYW5kbGUgb2YgdGhlIGNsaWVudCAqLwogICAgICBycGNfbG9jX2V2ZW50X21hc2tfdHlwZSAgICAgICAgICAgICAgIGxvY19ldmVudCwgICAgICAgICAgICAgIC8qIGV2ZW50IG1hc2sgICAgICAgICAgICovCiAgICAgIGNvbnN0IHJwY19sb2NfZXZlbnRfcGF5bG9hZF91X3R5cGUqICAgbG9jX2V2ZW50X3BheWxvYWQgICAgICAgLyogcGF5bG9hZCAgICAgICAgICAgICAgKi8KKTsKCmV4dGVybiBycGNfbG9jX2NsaWVudF9oYW5kbGVfdHlwZSBsb2Nfb3BlbigKICAgICAgcnBjX2xvY19ldmVudF9tYXNrX3R5cGUgICAgICAgZXZlbnRfcmVnX21hc2ssCiAgICAgIGxvY19ldmVudF9jYl9mX3R5cGUgICAgICAgKmV2ZW50X2NhbGxiYWNrCik7CgpleHRlcm4gaW50MzIgbG9jX2Nsb3NlCigKICAgICAgcnBjX2xvY19jbGllbnRfaGFuZGxlX3R5cGUgaGFuZGxlCik7CgpleHRlcm4gaW50MzIgbG9jX3N0YXJ0X2ZpeAooCiAgICAgIHJwY19sb2NfY2xpZW50X2hhbmRsZV90eXBlIGhhbmRsZQopOwoKZXh0ZXJuIGludDMyIGxvY19zdG9wX2ZpeAooCiAgICAgIHJwY19sb2NfY2xpZW50X2hhbmRsZV90eXBlIGhhbmRsZQopOwoKZXh0ZXJuIGludDMyIGxvY19pb2N0bAooCiAgICAgIHJwY19sb2NfY2xpZW50X2hhbmRsZV90eXBlICAgICAgICAgICBoYW5kbGUsCiAgICAgIHJwY19sb2NfaW9jdGxfZV90eXBlICAgICAgICAgICAgICAgICBpb2N0bF90eXBlLAogICAgICBycGNfbG9jX2lvY3RsX2RhdGFfdV90eXBlKiAgICAgICAgICAgaW9jdGxfZGF0YQopOwoKI2lmZGVmIF9fY3BsdXNwbHVzCn0KI2VuZGlmCgojZW5kaWYgLyogTE9DX0FQSV9SUENfR0xVRV9IICovCg==