LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQ29weXJpZ2h0IChjKSAyMDE2IEZ1bmRhY2nzbiBUZWNuYWxpYSBSZXNlYXJjaCAmIElubm92YXRpb24uCiAqCiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CiAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCiAqCiAqIENvbnRyaWJ1dG9yczoKICogICBIdWFzY2FyIEVzcGlub3phIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAqICAgQWxlamFuZHJhIFJ17XogLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICogICBJZG95YSBEZWwgUu1vIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAqICAgTWFyaSBDYXJtZW4gUGFsYWNpb3MgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICogICBBbmdlbCBM83BleiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyoqCiAqLwpwYWNrYWdlIG9yZy5lY2xpcHNlLm9wZW5jZXJ0LnNhbS5hZ3JlZS5hZ3JlZW1lbnQ7CgppbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CgovKioKICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UGF0dGVybjwvYj48L2VtPicuCiAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgogKgogKiA8cD4KICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgogKiA8dWw+CiAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5vcGVuY2VydC5zYW0uYWdyZWUuYWdyZWVtZW50LlBhdHRlcm4jZ2V0UHJlbWlzZSA8ZW0+UHJlbWlzZTwvZW0+fTwvbGk+CiAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5vcGVuY2VydC5zYW0uYWdyZWUuYWdyZWVtZW50LlBhdHRlcm4jZ2V0RXZlbnQgPGVtPkV2ZW50PC9lbT59PC9saT4KICogPC91bD4KICogPC9wPgogKgogKiBAc2VlIG9yZy5lY2xpcHNlLm9wZW5jZXJ0LnNhbS5hZ3JlZS5hZ3JlZW1lbnQuQWdyZWVtZW50UGFja2FnZSNnZXRQYXR0ZXJuKCkKICogQG1vZGVsCiAqIEBnZW5lcmF0ZWQKICovCnB1YmxpYyBpbnRlcmZhY2UgUGF0dGVybiBleHRlbmRzIEVPYmplY3QKewogIC8qKgogICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlByZW1pc2U8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgogICAqIDxwPgogICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlByZW1pc2U8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAogICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KICAgKiA8L3A+CiAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CiAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+UHJlbWlzZTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCiAgICogQHNlZSAjc2V0UHJlbWlzZShub25mdW5jdGlvbmFsKQogICAqIEBzZWUgb3JnLmVjbGlwc2Uub3BlbmNlcnQuc2FtLmFncmVlLmFncmVlbWVudC5BZ3JlZW1lbnRQYWNrYWdlI2dldFBhdHRlcm5fUHJlbWlzZSgpCiAgICogQG1vZGVsIGNvbnRhaW5tZW50PSJ0cnVlIgogICAqIEBnZW5lcmF0ZWQKICAgKi8KICBub25mdW5jdGlvbmFsIGdldFByZW1pc2UoKTsKCiAgLyoqCiAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uub3BlbmNlcnQuc2FtLmFncmVlLmFncmVlbWVudC5QYXR0ZXJuI2dldFByZW1pc2UgPGVtPlByZW1pc2U8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgogICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgogICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlByZW1pc2U8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgogICAqIEBzZWUgI2dldFByZW1pc2UoKQogICAqIEBnZW5lcmF0ZWQKICAgKi8KICB2b2lkIHNldFByZW1pc2Uobm9uZnVuY3Rpb25hbCB2YWx1ZSk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkV2ZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCiAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KICAgKiA8cD4KICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FdmVudDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCiAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgogICAqIDwvcD4KICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FdmVudDwvZW0+JyBhdHRyaWJ1dGUuCiAgICogQHNlZSAjc2V0RXZlbnQoU3RyaW5nKQogICAqIEBzZWUgb3JnLmVjbGlwc2Uub3BlbmNlcnQuc2FtLmFncmVlLmFncmVlbWVudC5BZ3JlZW1lbnRQYWNrYWdlI2dldFBhdHRlcm5fRXZlbnQoKQogICAqIEBtb2RlbAogICAqIEBnZW5lcmF0ZWQKICAgKi8KICBTdHJpbmcgZ2V0RXZlbnQoKTsKCiAgLyoqCiAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uub3BlbmNlcnQuc2FtLmFncmVlLmFncmVlbWVudC5QYXR0ZXJuI2dldEV2ZW50IDxlbT5FdmVudDwvZW0+fScgYXR0cmlidXRlLgogICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CiAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CiAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RXZlbnQ8L2VtPicgYXR0cmlidXRlLgogICAqIEBzZWUgI2dldEV2ZW50KCkKICAgKiBAZ2VuZXJhdGVkCiAgICovCiAgdm9pZCBzZXRFdmVudChTdHJpbmcgdmFsdWUpOwoKfSAvLyBQYXR0ZXJuCg==