LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rKioKKip8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8KioKKip8IENvcHlyaWdodCAxOTk4LTIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4gLSBodHRwOi8vd3d3LnRpLmNvbS8gICAgICAgICB8KioKKip8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8KioKKip8IExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAgICAgICAgICB8KioKKip8IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gICAgICAgICB8KioKKip8IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8KioKKip8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8KioKKip8ICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgICAgICAgICAgICAgICAgICAgICAgICAgICB8KioKKip8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8KioKKip8IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgICAgICB8KioKKip8IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsICAgICAgICB8KioKKip8IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiB8KioKKip8IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgICAgICB8KioKKip8IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8KioKKip8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8KioKKiorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rKioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwovKiBNb2R1bGU6CQlUSV9BZGFwdGVyU0cuaCovCi8qKi8KLyogUHVycG9zZToJCVRoaXMgQVBJIGVuYWJsZXMgLyBkaXNhYmxlcyB0aGUgQmx1ZXRvb3RoIGNvZXhpc3RlbmNlIHN1cHBvcnQsICovCi8qICAgICAgICAgICAgICBzZXRzIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBCbHVldG9vdGggY29leGlzdGVuY2UgZmVhdHVyZSBhbmQgKi8KLyogICAgICAgICAgICAgIHJldHJpZXZlIGl0cyBzdGF0dXMuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdXN1YWxseSB1bmF2YWlsYWJsZSwgKi8KLyogICAgICAgICAgICAgIHVubGVzcyB0aGUgV2lMaW5rwpkgNC4wIFdMQU4gZHJpdmVyIGlzIHNwZWNpZmljYWxseSBjb21waWxlZCB0byAqLwovKiAgICAgICAgICAgICAgc3VwcG9ydCBCbHVldG9vdGggY29leGlzdGVuY2UuKi8KLyoqLwovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCiNpZm5kZWYgVElfQURBUFRFUl9TR19ICiNkZWZpbmUgVElfQURBUFRFUl9TR19ICgojaWZkZWYgX19jcGx1c3BsdXMKZXh0ZXJuICJDIiB7CiNlbmRpZgogICAgCiAjaW5jbHVkZSAic29mdEdlbWluaVR5cGVzLmgiCiAgICAKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCiAgICBOYW1lOiAgIFRJX1NldEJ0Q29lRW5hYmxlCQogICAgRGVzYzoJVGhpcyBmdW5jdGlvbiBlbmFibGVzIGFuZCBkaXNhYmxlcyB0aGUgQmx1ZXRvb3RoIGNvZXhpc3RlbmNlIGZlYXR1cmUKICAgIFBhcmFtczoJaEFkYXB0ZXIgLSBUaGUgQWRhcHRlciBoYW5kbGUgcmV0dXJuZWQgYnkgVElfQWRhcHRlckluaXQoKS4KICAgIE1vZGVFbmFibGUgLSBPbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICAgICAgICAgICAgICAgIFNHX0VOQUJMRSgwKSCWV0xBTiBlbmFibGVkCiAgICAgICAgICAgICAgICAgIFNHX0RJU0FCTEUoMSkgliBXTEFOIGRpc2FibGVkCiAgICAgICAgICAgICAgICAgIFNHX1NFTlNFX05PX0FDVElWSVRZKDIpIJZXTEFOIGRpc2FibGVkLCB3YWl0aW5nIGZvciBhIEJUSCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbnNlIGludGVycnVwdAogICAgICAgICAgICAgICAgICBTR19TRU5TRV9BQ1RJVkUoMykgLSBXTEFOIGVuYWJsZWQsIHdhaXRpbmcgZm9yIGEgQlRIIHNlbnNlIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQuCiAgICBSZXR1cm46CVRJX1JFU1VMVF9PSyBvbiBzdWNjZXNzLiBBbnkgb3RoZXIgdmFsdWUgaW5kaWNhdGVzIGFuIGVycm9yLgoJCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KdGlJTlQzMiAgICAgVElfU2V0QnRDb2VFbmFibGUgICAgICAgICAgICAgICAoVElfSEFORExFICBoQWRhcHRlciwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpVUlOVDMyIE1vZGVFbmFibGUgKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCiAgICBOYW1lOiAgIFRJX1NldEJ0Q29lUmF0ZQkKICAgIERlc2M6CVRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgcmF0ZSB0byBiZSB1c2VkIHdoZW4gQmx1ZXRvb3RoIGNvZXhpc3RlbmNlIAogICAgICAgICAgICBmZWF0dXJlIGlzIGVuYWJsZWQuCiAgICBQYXJhbXM6CWhBZGFwdGVyIC0gVGhlIEFkYXB0ZXIgaGFuZGxlIHJldHVybmVkIGJ5IFRJX0FkYXB0ZXJJbml0KCkuCiAgICAgICAgICAgIHBSYXRlIC0gT25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAgICAgICAgICAgICAgICAgIDAgliAxMSBNYnBzCiAgICAgICAgICAgICAgICAgICAgMSCWIDUuNSBhbmQgMTEgTWJwcwogICAgICAgICAgICAgICAgICAgIDIgliA1LjUsIDExIGFuZCAyMiBNYnBzCiAgICAgICAgICAgICAgICAgICAgMyCWIDExIGFuZCAyMiBNYnBzLgogICAgUmV0dXJuOglUSV9SRVNVTFRfT0sgb24gc3VjY2Vzcy4gQW55IG90aGVyIHZhbHVlIGluZGljYXRlcyBhbiBlcnJvci4KCQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnRpSU5UMzIgICAgIFRJX1NldEJ0Q29lUmF0ZSAgICAgICAgICAgICAgICAgKFRJX0hBTkRMRSAgaEFkYXB0ZXIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aVVJTlQ4ICpwUmF0ZSApOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKICAgIE5hbWU6ICAgVElfU2V0QnRDb2VDb25maWcJCiAgICBEZXNjOglUaGlzIGZ1bmN0aW9uIGNvbmZpZ3VyZXMgQmx1ZXRvb3RoIGNvZXhpc3RlbmNlIHBhcmFtZXRlcnMuCiAgICBQYXJhbXM6CWhBZGFwdGVyIC0gVGhlIEFkYXB0ZXIgaGFuZGxlIHJldHVybmVkIGJ5IFRJX0FkYXB0ZXJJbml0KCkuCiAgICBwQ29uZmlnIC0gUG9pbnRlciB0aGF0IGhvbGRzIHRoZSBibHVldG9vdGggY29leGlzdGVuY2UgcGFyYW1hdGVycywgCiAgICAgICAgICAgICAgaW4gdGhlIGZvbGxvd2luZyBvcmRlciAoZWFjaCBwYXJhbWV0ZXIgaXMgMzIgYml0cyBsb25nKToKICAgICAgICAgICAgICAtIHRoZSBsZW5ndGggaW5tc2VjIG9mIHRoZSBCVCBwZXJpb2QgaW4gdGhlIFRETQogICAgICAgICAgICAgIC0gdGhlIGxlbmd0aCBpbiBtc2VjIG9mIHRoZSBXTEFOIHBlcmlvZCBpbiB0aGUgVERNCiAgICAgICAgICAgICAgLSB0aGUgbGVuZ3RoIGluIG1zZWMgb2YgdGhlIEJUIHBlcmlvZCBpbiB0aGUgVERNIGluIEFGSCBtb2RlCiAgICAgICAgICAgICAgLSB0aGUgbGVuZ3RoIGluIG1zZWMgb2YgdGhlIEJPVEggcGVyaW9kIGluIHRoZSBURE0gaW4gQUZIIG1vZGUKICAgICAgICAgICAgICAtIG1pbiB0aW1lIGluIG1zZWMgYmV0d2VlbiBsYXN0IEJUIGFjdGl2aXR5ICYgZGVmaW5pbmcgQlQgYXMgCiAgICAgICAgICAgICAgICBpbmFjdGl2ZQogICAgICAgICAgICAgIC0gbWluIHRpbWUgaW4gbXNlYyBiZXR3ZWVuIGxhc3QgV0xBTiBhY3Rpdml0eSAmIGRlZmluaW5nIFdMQU4gCiAgICAgICAgICAgICAgICBhcyBpbmFjdGl2ZQogICAgICAgICAgICAgIC0gbWluIHRpbWUgaW4gbXNlYyBiZXR3ZWVuIGxhc3QgV0xBTiBhY3Rpdml0eSAmIGRlZmluaW5nIFdMQU4gYXMKICAgICAgICAgICAgICAgIGluIFJ4R3VhcmQgbW9kZQogICAgICAgICAgICAgIC0gdGhlIG1heGltdW0gbGVuZ3RoIG9mIHRpbWUgdGhlIEJUIEhQIHdpbGwgYmUgcmVzcGVjdGVkCiAgICAgICAgICAgICAgLSB0aGUgbWF4aW11bSBsZW5ndGggb2YgdGltZSB0aGUgV0xBTiBIUCB3aWxsIGJlIHJlc3BlY3RlZAogICAgICAgICAgICAgIC0gdGhlIGxlbmd0aCBvZiB0aW1lIHdoZW4gd29ya2luZyBpbiBTRU5TRSBtb2RlIHRoYXQgdGhlIEJUIG5lZWRzCiAgICAgICAgICAgICAgICB0byBiZSBpbmFjdGl2ZSBpbiBvcmRlciB0byBESVNBQkxFIHRoZSBTRwogICAgICAgICAgICAgIC0gdGhlIGxlbmd0aCBpbiBtc2VjIG9mIEJ0IHRpbWUgYmV0d2VlbiBldmVyeSBXTEFOIFJ4R3VhcmQuCiAgICAgICAgICAgICAgLSB0aGUgbGVuZ3RoIGluIG1zZWMgbGVmdCBmb3IgV2xhbiBpbiBSeEd1YXJkIHN0YXRlCiAgICAgICAgICAgICAgLSBXTEFOIEhXIGdlbmVyYXRlZCBtb2RlIGR1cmluZyBCVCBwZXJpb2QKICAgICAgICAgICAgICAtIHNwZWNpZmllcyB3aGV0aGVyIHRvIHVzZSB0aGUgQUZIIGluZm9ybWF0aW9uIGZyb20gdGhlIEJUCiAgICBSZXR1cm46CVRJX1JFU1VMVF9PSyBvbiBzdWNjZXNzLiBBbnkgb3RoZXIgdmFsdWUgaW5kaWNhdGVzIGFuIGVycm9yLgoJCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KdGlJTlQzMiAgICAgVElfU2V0QnRDb2VDb25maWcgICAgICAgICAgICAgICAoVElfSEFORExFICBoQWRhcHRlciwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpVUlOVDMyICpwQ29uZmlnICk7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgogICAgTmFtZTogICBUSV9TZXRCdENvZUdldFN0YXR1cwkKICAgIERlc2M6CVRoaXMgZnVuY3Rpb24gcmV0cmlldmVzIEJsdWV0b290aCBjb2V4aXN0ZW5jZSBmZWF0dXJlIHBhcmFtZXRlcnMuCiAgICBQYXJhbXM6CWhBZGFwdGVyIC0gVGhlIEFkYXB0ZXIgaGFuZGxlIHJldHVybmVkIGJ5IFRJX0FkYXB0ZXJJbml0KCkuCiAgICAgICAgICAgIHBTdGF0dXMgLSBQb2ludGVyIHRoYXQgaG9sZHMgdGhlIEJsdWV0b290aCBjb2V4aXN0ZW5jZSBmZWF0dXJlIAogICAgICAgICAgICBzdGF0dXMuIDE2IDQtYnl0ZSB3b3JkcyBzaG91bGQgYmUgYWxsb2NhdGVkLgogICAgICAgICAgICBUaGUgMXN0IHdvcmQgd2lsbCBob2xkIHRoZSBlbmFibGUgc3RhdHVzIChzZXQgYnkgVElfU2V0QnRDb2VFbmFibGUpLgogICAgICAgICAgICBUaGUgMm5kIHdvcmQgd2lsbCBob2xkIHRoZSByYXRlIChzZXQgYnkgVElfU2V0QnRDb2VSYXRlKS4KICAgICAgICAgICAgV29yZHMgMyB0byAxNSB3aWxsIGhvbGQgYWxsIHRoZSBwYXJhbWV0ZXJzIHNldCBieSBUSV9TZXRCdENvZUNvbmZpZy4KICAgIFJldHVybjoJVElfUkVTVUxUX09LIG9uIHN1Y2Nlc3MuIEFueSBvdGhlciB2YWx1ZSBpbmRpY2F0ZXMgYW4gZXJyb3IuCgkKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp0aUlOVDMyICAgICBUSV9TZXRCdENvZUdldFN0YXR1cyAgICAgICAgICAgIChUSV9IQU5ETEUgIGhBZGFwdGVyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlVSU5UMzIgKnBTdGF0dXMgKTsKI2lmZGVmIF9fY3BsdXNwbHVzCn0KI2VuZGlmCgojZW5kaWYgLyogVElfQURBUFRFUl9TR19IKi8K