LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQ29weXJpZ2h0IChjKSAyMDE2IEZ1bmRhY2nzbiBUZWNuYWxpYSBSZXNlYXJjaCAmIElubm92YXRpb24uCiAqCiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CiAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCiAqCiAqIENvbnRyaWJ1dG9yczoKICogICBIdWFzY2FyIEVzcGlub3phIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAqICAgQWxlamFuZHJhIFJ17XogLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICogICBJZG95YSBEZWwgUu1vIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAqICAgTWFyaSBDYXJtZW4gUGFsYWNpb3MgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICogICBBbmdlbCBM83BleiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyoqCiAqIEdlbmVyYXRlZCB3aXRoIEFjY2VsZW8KICovCnBhY2thZ2Ugb3JnLmVjbGlwc2Uub3BlbmNlcnQuYXBtLmFzc3VycHJvai5hc3N1cmFuY2Vwcm9qZWN0LnByb3ZpZGVyczsKCmltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwoKLyoqCiAqIAogKiAKICovCnB1YmxpYyBjbGFzcyBBc3N1cmFuY2Vwcm9qZWN0TWVzc2FnZXMgZXh0ZW5kcyBOTFMgewoJCglwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSAib3JnLmVjbGlwc2Uub3BlbmNlcnQuYXBtLmFzc3VycHJvai5hc3N1cmFuY2Vwcm9qZWN0LnByb3ZpZGVycy5hc3N1cmFuY2Vwcm9qZWN0TWVzc2FnZXMiOyAvLyROT04tTkxTLTEkCgoJCglwdWJsaWMgc3RhdGljIFN0cmluZyBBc3N1cmFuY2VQcm9qZWN0UHJvcGVydGllc0VkaXRpb25QYXJ0X1Byb3BlcnRpZXNHcm91cExhYmVsOwoKCQoJcHVibGljIHN0YXRpYyBTdHJpbmcgUGVybWlzc2lvbkNvbmZpZ1Byb3BlcnRpZXNFZGl0aW9uUGFydF9Qcm9wZXJ0aWVzR3JvdXBMYWJlbDsKCgkKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFzc2V0c1BhY2thZ2VQcm9wZXJ0aWVzRWRpdGlvblBhcnRfUHJvcGVydGllc0dyb3VwTGFiZWw7CgoJCglwdWJsaWMgc3RhdGljIFN0cmluZyBCYXNlbGluZUNvbmZpZ1Byb3BlcnRpZXNFZGl0aW9uUGFydF9Qcm9wZXJ0aWVzR3JvdXBMYWJlbDsKCgkKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFzc3VyYW5jZUFzc2V0c1Byb3BlcnRpZXNFZGl0aW9uUGFydF9Qcm9wZXJ0aWVzR3JvdXBMYWJlbDsKCgkKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBlcm1pc3Npb25Db25maWd1cmF0aW9uc1Byb3BlcnRpZXNFZGl0aW9uUGFydF9Qcm9wZXJ0aWVzR3JvdXBMYWJlbDsKCgkKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFByb2plY3RCYXNlbGluZXNQcm9wZXJ0aWVzRWRpdGlvblBhcnRfUHJvcGVydGllc0dyb3VwTGFiZWw7CgoKCQoJcHVibGljIHN0YXRpYyBTdHJpbmcgQXNzdXJhbmNlUHJvamVjdF9SZWFkT25seTsKCgkKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFzc3VyYW5jZVByb2plY3RfUGFydF9UaXRsZTsKCgkKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBlcm1pc3Npb25Db25maWdfUmVhZE9ubHk7CgoJCglwdWJsaWMgc3RhdGljIFN0cmluZyBQZXJtaXNzaW9uQ29uZmlnX1BhcnRfVGl0bGU7CgoJCglwdWJsaWMgc3RhdGljIFN0cmluZyBBc3NldHNQYWNrYWdlX1JlYWRPbmx5OwoKCQoJcHVibGljIHN0YXRpYyBTdHJpbmcgQXNzZXRzUGFja2FnZV9QYXJ0X1RpdGxlOwoKCQoJcHVibGljIHN0YXRpYyBTdHJpbmcgQmFzZWxpbmVDb25maWdfUmVhZE9ubHk7CgoJCglwdWJsaWMgc3RhdGljIFN0cmluZyBCYXNlbGluZUNvbmZpZ19QYXJ0X1RpdGxlOwoKCQoJcHVibGljIHN0YXRpYyBTdHJpbmcgQXNzdXJhbmNlQXNzZXRzX1JlYWRPbmx5OwoKCQoJcHVibGljIHN0YXRpYyBTdHJpbmcgQXNzdXJhbmNlQXNzZXRzX1BhcnRfVGl0bGU7CgoJCglwdWJsaWMgc3RhdGljIFN0cmluZyBQZXJtaXNzaW9uQ29uZmlndXJhdGlvbnNfUmVhZE9ubHk7CgoJCglwdWJsaWMgc3RhdGljIFN0cmluZyBQZXJtaXNzaW9uQ29uZmlndXJhdGlvbnNfUGFydF9UaXRsZTsKCgkKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFByb2plY3RCYXNlbGluZXNfUmVhZE9ubHk7CgoJCglwdWJsaWMgc3RhdGljIFN0cmluZyBQcm9qZWN0QmFzZWxpbmVzX1BhcnRfVGl0bGU7CgoKCQoJcHVibGljIHN0YXRpYyBTdHJpbmcgQXNzdXJhbmNlUHJvamVjdFByb3BlcnRpZXNFZGl0aW9uUGFydF9JZExhYmVsOwoKCQoJcHVibGljIHN0YXRpYyBTdHJpbmcgQXNzdXJhbmNlUHJvamVjdFByb3BlcnRpZXNFZGl0aW9uUGFydF9OYW1lTGFiZWw7CgoJCglwdWJsaWMgc3RhdGljIFN0cmluZyBBc3N1cmFuY2VQcm9qZWN0UHJvcGVydGllc0VkaXRpb25QYXJ0X0Rlc2NyaXB0aW9uTGFiZWw7CgoJCglwdWJsaWMgc3RhdGljIFN0cmluZyBBc3N1cmFuY2VQcm9qZWN0UHJvcGVydGllc0VkaXRpb25QYXJ0X0NyZWF0ZWRCeUxhYmVsOwoKCQoJcHVibGljIHN0YXRpYyBTdHJpbmcgQXNzdXJhbmNlUHJvamVjdFByb3BlcnRpZXNFZGl0aW9uUGFydF9SZXNwb25zaWJsZUxhYmVsOwoKCQoJcHVibGljIHN0YXRpYyBTdHJpbmcgQXNzdXJhbmNlUHJvamVjdFByb3BlcnRpZXNFZGl0aW9uUGFydF9EYXRlTGFiZWw7CgoJCglwdWJsaWMgc3RhdGljIFN0cmluZyBBc3N1cmFuY2VQcm9qZWN0UHJvcGVydGllc0VkaXRpb25QYXJ0X1ZlcnNpb25MYWJlbDsKCgkKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFzc3VyYW5jZVByb2plY3RQcm9wZXJ0aWVzRWRpdGlvblBhcnRfU3ViUHJvamVjdExhYmVsOwoKCQoJcHVibGljIHN0YXRpYyBTdHJpbmcgUGVybWlzc2lvbkNvbmZpZ1Byb3BlcnRpZXNFZGl0aW9uUGFydF9JZExhYmVsOwoKCQoJcHVibGljIHN0YXRpYyBTdHJpbmcgUGVybWlzc2lvbkNvbmZpZ1Byb3BlcnRpZXNFZGl0aW9uUGFydF9OYW1lTGFiZWw7CgoJCglwdWJsaWMgc3RhdGljIFN0cmluZyBQZXJtaXNzaW9uQ29uZmlnUHJvcGVydGllc0VkaXRpb25QYXJ0X0Rlc2NyaXB0aW9uTGFiZWw7CgoJCglwdWJsaWMgc3RhdGljIFN0cmluZyBQZXJtaXNzaW9uQ29uZmlnUHJvcGVydGllc0VkaXRpb25QYXJ0X0lzQWN0aXZlTGFiZWw7CgoJCglwdWJsaWMgc3RhdGljIFN0cmluZyBBc3NldHNQYWNrYWdlUHJvcGVydGllc0VkaXRpb25QYXJ0X0lkTGFiZWw7CgoJCglwdWJsaWMgc3RhdGljIFN0cmluZyBBc3NldHNQYWNrYWdlUHJvcGVydGllc0VkaXRpb25QYXJ0X05hbWVMYWJlbDsKCgkKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFzc2V0c1BhY2thZ2VQcm9wZXJ0aWVzRWRpdGlvblBhcnRfRGVzY3JpcHRpb25MYWJlbDsKCgkKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFzc2V0c1BhY2thZ2VQcm9wZXJ0aWVzRWRpdGlvblBhcnRfSXNBY3RpdmVMYWJlbDsKCgkKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFzc2V0c1BhY2thZ2VQcm9wZXJ0aWVzRWRpdGlvblBhcnRfQXJ0ZWZhY3RzTW9kZWxMYWJlbDsKCgkKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFzc2V0c1BhY2thZ2VQcm9wZXJ0aWVzRWRpdGlvblBhcnRfQXJndW1lbnRhdGlvbk1vZGVsTGFiZWw7CgoJCglwdWJsaWMgc3RhdGljIFN0cmluZyBBc3NldHNQYWNrYWdlUHJvcGVydGllc0VkaXRpb25QYXJ0X1Byb2Nlc3NNb2RlbExhYmVsOwoKCQoJcHVibGljIHN0YXRpYyBTdHJpbmcgQmFzZWxpbmVDb25maWdQcm9wZXJ0aWVzRWRpdGlvblBhcnRfSWRMYWJlbDsKCgkKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJhc2VsaW5lQ29uZmlnUHJvcGVydGllc0VkaXRpb25QYXJ0X05hbWVMYWJlbDsKCgkKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJhc2VsaW5lQ29uZmlnUHJvcGVydGllc0VkaXRpb25QYXJ0X0Rlc2NyaXB0aW9uTGFiZWw7CgoJCglwdWJsaWMgc3RhdGljIFN0cmluZyBCYXNlbGluZUNvbmZpZ1Byb3BlcnRpZXNFZGl0aW9uUGFydF9Db21wbGlhbmNlTWFwR3JvdXBMYWJlbDsKCgkKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJhc2VsaW5lQ29uZmlnUHJvcGVydGllc0VkaXRpb25QYXJ0X0lzQWN0aXZlTGFiZWw7CgoJCglwdWJsaWMgc3RhdGljIFN0cmluZyBCYXNlbGluZUNvbmZpZ1Byb3BlcnRpZXNFZGl0aW9uUGFydF9SZWZGcmFtZXdvcmtMYWJlbDsKCgkKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFzc3VyYW5jZUFzc2V0c1Byb3BlcnRpZXNFZGl0aW9uUGFydF9Bc3NldHNQYWNrYWdlTGFiZWw7CgoJCglwdWJsaWMgc3RhdGljIFN0cmluZyBBc3N1cmFuY2VBc3NldHNQcm9wZXJ0aWVzRWRpdGlvblBhcnRfQXNzZXRzUGFja2FnZVRhYmxlTGFiZWw7CgoJCglwdWJsaWMgc3RhdGljIFN0cmluZyBQZXJtaXNzaW9uQ29uZmlndXJhdGlvbnNQcm9wZXJ0aWVzRWRpdGlvblBhcnRfUGVybWlzc2lvbkNvbmZMYWJlbDsKCgkKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBlcm1pc3Npb25Db25maWd1cmF0aW9uc1Byb3BlcnRpZXNFZGl0aW9uUGFydF9QZXJtaXNzaW9uQ29uZlRhYmxlTGFiZWw7CgoJCglwdWJsaWMgc3RhdGljIFN0cmluZyBQcm9qZWN0QmFzZWxpbmVzUHJvcGVydGllc0VkaXRpb25QYXJ0X0Jhc2VsaW5lQ29uZmlnTGFiZWw7CgoJCglwdWJsaWMgc3RhdGljIFN0cmluZyBQcm9qZWN0QmFzZWxpbmVzUHJvcGVydGllc0VkaXRpb25QYXJ0X0Jhc2VsaW5lQ29uZmlnVGFibGVMYWJlbDsKCgoJCglwdWJsaWMgc3RhdGljIFN0cmluZyBQcm9wZXJ0aWVzRWRpdGlvblBhcnRfRG9jdW1lbnRhdGlvbkxhYmVsOwoKCQoJcHVibGljIHN0YXRpYyBTdHJpbmcgUHJvcGVydGllc0VkaXRpb25QYXJ0X0ludGVnZXJWYWx1ZU1lc3NhZ2U7CgoJCglwdWJsaWMgc3RhdGljIFN0cmluZyBQcm9wZXJ0aWVzRWRpdGlvblBhcnRfRmxvYXRWYWx1ZU1lc3NhZ2U7CgoJCglwdWJsaWMgc3RhdGljIFN0cmluZyBQcm9wZXJ0aWVzRWRpdGlvblBhcnRfU2hvcnRWYWx1ZU1lc3NhZ2U7CgoJCglwdWJsaWMgc3RhdGljIFN0cmluZyBQcm9wZXJ0aWVzRWRpdGlvblBhcnRfTG9uZ1ZhbHVlTWVzc2FnZTsKCgkKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFByb3BlcnRpZXNFZGl0aW9uUGFydF9CeXRlVmFsdWVNZXNzYWdlOwoKCQoJcHVibGljIHN0YXRpYyBTdHJpbmcgUHJvcGVydGllc0VkaXRpb25QYXJ0X0JpZ0ludGVnZXJWYWx1ZU1lc3NhZ2U7CgoJCglwdWJsaWMgc3RhdGljIFN0cmluZyBQcm9wZXJ0aWVzRWRpdGlvblBhcnRfQmlnRGVjaW1hbFZhbHVlTWVzc2FnZTsKCgkKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFByb3BlcnRpZXNFZGl0aW9uUGFydF9Eb3VibGVWYWx1ZU1lc3NhZ2U7CgoJCglwdWJsaWMgc3RhdGljIFN0cmluZyBQcm9wZXJ0aWVzRWRpdGlvblBhcnRfUHJvcGVydGllc0dyb3VwTGFiZWw7CgoJCglwdWJsaWMgc3RhdGljIFN0cmluZyBQcm9wZXJ0aWVzRWRpdGlvblBhcnRfUmVxdWlyZWRGZWF0dXJlTWVzc2FnZTsKCgkKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFByb3BlcnRpZXNFZGl0aW9uUGFydF9BZGRUYWJsZVZpZXdlckxhYmVsOwoKCQoJcHVibGljIHN0YXRpYyBTdHJpbmcgUHJvcGVydGllc0VkaXRpb25QYXJ0X0VkaXRUYWJsZVZpZXdlckxhYmVsOwoKCQoJcHVibGljIHN0YXRpYyBTdHJpbmcgUHJvcGVydGllc0VkaXRpb25QYXJ0X1JlbW92ZVRhYmxlVmlld2VyTGFiZWw7CgoJCglwdWJsaWMgc3RhdGljIFN0cmluZyBQcm9wZXJ0aWVzRWRpdGlvblBhcnRfQWRkTGlzdFZpZXdlckxhYmVsOwoKCQoJcHVibGljIHN0YXRpYyBTdHJpbmcgUHJvcGVydGllc0VkaXRpb25QYXJ0X1JlbW92ZUxpc3RWaWV3ZXJMYWJlbDsKCgkvLyBTdGFydCBvZiB1c2VyIGNvZGUgZm9yIGFkZGl0aW9ubmFsIE5MUyBDb25zdGFudHMKCQoJLy8gRW5kIG9mIHVzZXIgY29kZQoKCXN0YXRpYyB7CgkJLy8gaW5pdGlhbGl6ZSByZXNvdXJjZSBidW5kbGUKCQlOTFMuaW5pdGlhbGl6ZU1lc3NhZ2VzKEJVTkRMRV9OQU1FLCBBc3N1cmFuY2Vwcm9qZWN0TWVzc2FnZXMuY2xhc3MpOwoJfQoKCQoJcHJpdmF0ZSBBc3N1cmFuY2Vwcm9qZWN0TWVzc2FnZXMoKSB7CgkJLy9wcm90ZWN0IGluc3RhbmNpYXRpb24KCX0KfQo=