LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCiAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAogKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAogKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAqgKiAKICogQ29udHJpYnV0b3JzOgogKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpwYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkuaW50ZXJuYWw7CgppbXBvcnQgamF2YS50ZXh0LlNpbXBsZURhdGVGb3JtYXQ7CmltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKLyoqCiAqIEhlbHBlciBjbGFzcyB0byByb3V0ZSB0cmFjZSBvdXRwdXQuCiAqLwpwdWJsaWMgY2xhc3MgVHJhY2UgewoJcHVibGljIHN0YXRpYyBieXRlIENPTkZJRyA9IDA7CglwdWJsaWMgc3RhdGljIGJ5dGUgSU5GTyA9IDE7CglwdWJsaWMgc3RhdGljIGJ5dGUgV0FSTklORyA9IDI7CglwdWJsaWMgc3RhdGljIGJ5dGUgU0VWRVJFID0gMzsKCXB1YmxpYyBzdGF0aWMgYnl0ZSBGSU5FU1QgPSA0OwoJcHVibGljIHN0YXRpYyBieXRlIEZJTkVSID0gNTsKCXB1YmxpYyBzdGF0aWMgYnl0ZSBQRVJGT1JNQU5DRSA9IDY7CglwdWJsaWMgc3RhdGljIGJ5dGUgRVhURU5TSU9OX1BPSU5UID0gNzsKCQoJcHJvdGVjdGVkIHN0YXRpYyBpbnQgcGx1Z2luTGVuZ3RoID0gLTE7CgkKCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIGxldmVsTmFtZXMgPSBuZXcgU3RyaW5nW10gewoJCSJDT05GSUcgIiwgIklORk8gICAiLCAiV0FSTklORyIsICJTRVZFUkUgIiwgIkZJTkVSICAiLCAiRklORVNUICIsICJQRVJGICAgIiwgIkVYVEVOU0lPTiJ9OwoJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIHNwYWNlciA9ICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI7CgoJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU2ltcGxlRGF0ZUZvcm1hdCBzZGYgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgiZGQvTU0veXkgSEg6bW0uc3MuU1NTIik7CgoJLyoqCgkgKiBUcmFjZSBjb25zdHJ1Y3RvciBjb21tZW50LgoJICovCglwcml2YXRlIFRyYWNlKCkgewoJCXN1cGVyKCk7Cgl9CgoJLyoqCgkgKiBUcmFjZSB0aGUgZ2l2ZW4gdGV4dC4KCSAqCgkgKiBAcGFyYW0gcyBqYXZhLmxhbmcuU3RyaW5nCgkgKi8KCXB1YmxpYyBzdGF0aWMgdm9pZCB0cmFjZShieXRlIGxldmVsLCBTdHJpbmcgcykgewoJCXRyYWNlKGxldmVsLCBzLCBudWxsKTsKCX0KCQoJLyoqCgkgKiBUcmFjZSB0aGUgZ2l2ZW4gbWVzc2FnZSBhbmQgZXhjZXB0aW9uLgoJICoKCSAqIEBwYXJhbSBzIGphdmEubGFuZy5TdHJpbmcKCSAqIEBwYXJhbSB0IGphdmEubGFuZy5UaHJvd2FibGUKCSAqLwoJcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlKGJ5dGUgbGV2ZWwsIFN0cmluZyBzLCBUaHJvd2FibGUgdCkgewoJCWlmICghU2VydmVyVUlQbHVnaW4uZ2V0SW5zdGFuY2UoKS5pc0RlYnVnZ2luZygpKQoJCQlyZXR1cm47CgoJCVN0cmluZyBwbHVnaW5JZCA9IFNlcnZlclVJUGx1Z2luLlBMVUdJTl9JRDsKCQlTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKHBsdWdpbklkKTsKCQlpZiAocGx1Z2luSWQubGVuZ3RoKCkgPiBwbHVnaW5MZW5ndGgpCgkJCXBsdWdpbkxlbmd0aCA9IHBsdWdpbklkLmxlbmd0aCgpOwoJCWVsc2UgaWYgKHBsdWdpbklkLmxlbmd0aCgpIDwgcGx1Z2luTGVuZ3RoKQoJCQlzYi5hcHBlbmQoc3BhY2VyLnN1YnN0cmluZygwLCBwbHVnaW5MZW5ndGggLSBwbHVnaW5JZC5sZW5ndGgoKSkpOwoJCXNiLmFwcGVuZCgiICIpOwoJCXNiLmFwcGVuZChsZXZlbE5hbWVzW2xldmVsXSk7CgkJc2IuYXBwZW5kKCIgIik7CgkJc2IuYXBwZW5kKHNkZi5mb3JtYXQobmV3IERhdGUoKSkpOwoJCXNiLmFwcGVuZCgiICIpOwoJCXNiLmFwcGVuZChzKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oc2IudG9TdHJpbmcoKSk7CgkJaWYgKHQgIT0gbnVsbCkKCQkJdC5wcmludFN0YWNrVHJhY2UoKTsKCX0KfQ==