LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCiAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENvbW1vbiBQdWJsaWMgTGljZW5zZSB2MS4wCiAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CiAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sCqAqCiAqIENvbnRyaWJ1dG9yczoKICogICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpwYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLmNvcmU7Ci8qKgogKiBSZXByZXNlbnRzIHRoZSBtb25pdG9yIHRoYXQgbW9uaXRvcnMgdGhlIG5ldHdvcmsgdHJhZmZpYyBiZXR3ZWVuIGEgc2VydmVyIGFuZCBhIGNsaWVudC4KICogVGhlIGdsb2JhbCBsaXN0IG9mIGtub3duIG1vbml0b3JzIGlzIGF2YWlsYWJsZSB2aWEge0BsaW5rIE1vbml0b3JDb3JlLmdldE1vbml0b3JzKCl9LgogKiA8cD4KICogVGhpcyBpbnRlcmZhY2UgaXMgbm90IGludGVuZGVkIHRvIGJlIGltcGxlbWVudGVkIGJ5IGNsaWVudHMuCiAqIDwvcD4KICogQHNlZSBJTW9uaXRvcldvcmtpbmdDb3B5CiAqIEBzaW5jZSAxLjAKICovCnB1YmxpYyBpbnRlcmZhY2UgSU1vbml0b3IgewoJLyoqCgkgKiBSZXR1cm5zIHRoZSBpZCBvZiB0aGlzIG1vbml0b3IuCgkgKiBFYWNoIG1vbml0b3IgaGFzIGEgZGlzdGluY3QsIGZpeGVkIGlkLiBJZHMgYXJlIGludGVuZGVkIHRvIGJlIHVzZWQgaW50ZXJuYWxseSBhcyBrZXlzOwoJICogdGhleSBhcmUgbm90IGludGVuZGVkIHRvIGJlIHNob3duIHRvIGVuZCB1c2Vycy4KCSAqIAoJICogQHJldHVybiB0aGUgZWxlbWVudCBpZAoJICovCglwdWJsaWMgU3RyaW5nIGdldElkKCk7CgoJLyoqCgkgKiBSZXR1cm5zIHRoZSByZW1vdGUgaG9zdCBuYW1lIG9mIHRoZSBzZXJ2ZXIgdG8gYmUgbW9uaXRvcmVkLiAKCSAqIAoJICogQHJldHVybiB0aGUgcmVtb3RlIGhvc3QgbmFtZQoJICovCglwdWJsaWMgU3RyaW5nIGdldFJlbW90ZUhvc3QoKTsKCQoJLyoqCgkgKiBSZXR1cm5zIHRoZSByZW1vdGUgcG9ydCBudW1iZXIgb2YgdGhlIHNlcnZlciB0byBiZSBtb25pdG9yZWQuCgkgKiAgCgkgKiBAcmV0dXJuIHRoZSByZW1vdGUgcG9ydCBudW1iZXIKCSAqLwoJcHVibGljIGludCBnZXRSZW1vdGVQb3J0KCk7CgkKCS8qKgoJICogUmV0dXJucyB0aGUgbG9jYWwgcG9ydCBudW1iZXIgb2YgdGhlIGNsaWVudCB0aGF0IG1vbml0b3IgdHJhZmZpYyB3aWxsIHVzZWQuCgkgKiAgCgkgKiBAcmV0dXJuIHRoZSBsb2NhbCBwb3J0IG51bWJlcgoJICovCglwdWJsaWMgaW50IGdldExvY2FsUG9ydCgpOwoJCgkvKioKCSAqIFJldHVybnMgdGhlIHByb3RvY29sIGFkYXB0ZXIgdGhhdCB0aGUgbW9uaXRvciB3aWxsIGJlIHVzZWQgdG8gcmVhZCB0aGUgbW9uaXRvciB0cmFmZmljLgoJICogICAKCSAqIEByZXR1cm4gdGhlIHByb3RvY29sIGFkYXB0ZXIKCSAqLwoJcHVibGljIElQcm90b2NvbEFkYXB0ZXIgZ2V0UHJvdG9jb2xBZGFwdGVyKCk7CgkKCS8qKgoJICogUmV0dXJucyB3aGV0aGVyIHRoaXMgbW9uaXRvciBpcyBjdXJyZW50bHkgcnVubmluZy4KCSAqIAoJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgbW9uaXRvciBpcyBjdXJyZW50bHkgcnVubmluZzsgb3RoZXJ3aXNlLCByZXR1cm4gPGNvZGU+ZmFsc2U8L2NvZGU+LgoJICovCglwdWJsaWMgYm9vbGVhbiBpc1J1bm5pbmcoKTsKCQoJLyoqCgkgKiBEZWxldGVzIHRoaXMgbW9uaXRvci4gVGhlIG1vbml0b3Igd2lsbCBubyBsb25nZXIgYmUgYXZhaWxhYmxlIHRvIHVzZXJzLgoJICogVGhpcyBtZXRob2QgaGFzIG5vIGVmZmVjdCBpZiB0aGUgbW9uaXRvciBoYXMgYWxyZWFkeSBiZWVuIGRlbGV0ZWQuCgkgKi8KCXB1YmxpYyB2b2lkIGRlbGV0ZSgpOwoJCgkvKioKCSAqIFJldHVybnMgd2hldGhlciB0aGlzIG1vbml0b3IgaXMgYSB3b3JraW5nIGNvcHkuIE1vbml0b3JzIHdoaWNoIHJldHVybgoJICogPGNvZGU+dHJ1ZTwvY29kZT4gdG8gdGhpcyBtZXRob2QgY2FuIGJlIHNhZmVseSBjYXN0IHRvIAoJICogPGNvZGU+b3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IuY29yZS5JTW9uaXRvcldvcmtpbmdDb3B5PC9jb2RlPgoJICogCgkgKiBAcmV0dXJuIHdoZXRoZXIgdGhpcyBtb25pdG9yIGlzIGEgd29ya2luZyBjb3B5CgkgKi8KCXB1YmxpYyBib29sZWFuIGlzV29ya2luZ0NvcHkoKTsKCQoJLyoqCgkgKiBSZXR1cm5zIGEgd29ya2luZyBjb3B5IG9mIHRoaXMgbW9uaXRvci4gQ2hhbmdlcyB0byB0aGUgd29ya2luZyBjb3B5IHdpbGwgYmUKCSAqIGFwcGxpZWQgdG8gdGhpcyBtb25pdG9yIHdoZW4gc2F2ZWQuCgkgKiAKCSAqIEByZXR1cm4gYSB3b3JraW5nIGNvcHkgb2YgdGhpcyBtb25pdG9yCgkgKi8KCXB1YmxpYyBJTW9uaXRvcldvcmtpbmdDb3B5IGdldFdvcmtpbmdDb3B5KCk7Cn0=