LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQ29weXJpZ2h0IChjKSAyMDA0IEV0ZXJhdGlvbiBCaWxpc2ltIEEuUy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4goCBUaGlzIHByb2dyYW0KICogYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlCiAqIENvbW1vbiBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMKICogYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sCiAqIAogKiBDb250cmlidXRvcnM6IEdvcmtlbSBFcmNhbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKICogICAgICAgICAgICAgICBOYWNpIE0uIERhaQogKiAKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLAogKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5ECiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBFVEVSQVRJT24gQS5TLgogKiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCiAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsCiAqIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKICogTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLAogKiBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKiAKICogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkgaW5kaXZpZHVhbHMgb24KICogYmVoYWxmIG9mIHRoZSBFdGVyYXRpb24gQmlsaXNpbSBBLlMuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGV0ZXJhdGlvbiwKICogcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5ldGVyYXRpb24uY29tLz4uCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LnNlcnZlci5nZW5lcmljLmludGVybmFsLmNvcmU7CgppbXBvcnQgamF2YS51dGlsLkxpc3Q7CgppbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247CmltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwppbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7CmltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwppbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5JTGF1bmNoQ29uZmlndXJhdGlvbldvcmtpbmdDb3B5OwoKaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyQ29uZmlndXJhdGlvbldvcmtpbmdDb3B5OwppbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXJTdGF0ZTsKaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyV29ya2luZ0NvcHk7CmltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVRhc2s7CmltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUubW9kZWwuSU1vZHVsZTsKaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5tb2RlbC5JTW9kdWxlRXZlbnQ7CmltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUubW9kZWwuSU1vZHVsZUZhY3RvcnlFdmVudDsKaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5tb2RlbC5JUHVibGlzaGVyOwppbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLm1vZGVsLklTZXJ2ZXJXb3JraW5nQ29weURlbGVnYXRlOwppbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnJlc291cmNlcy5JTW9kdWxlUmVzb3VyY2VEZWx0YTsKCnB1YmxpYyBjbGFzcyBHZW5lcmljU2VydmVyV29ya2luZ0NvcHkgZXh0ZW5kcyBHZW5lcmljU2VydmVyIGltcGxlbWVudHMKCQlJU2VydmVyV29ya2luZ0NvcHlEZWxlZ2F0ZSB7CgoJcHJvdGVjdGVkIElTZXJ2ZXJXb3JraW5nQ29weSB3b3JraW5nQ29weTsKCglwcml2YXRlIElTZXJ2ZXJTdGF0ZSBsaXZlU2VydmVyOwoKCS8qCgkgKiAobm9uLUphdmFkb2MpCgkgKiAKCSAqIEBzZWUgY29tLmlibS53dHAuc2VydmVyLmNvcmUubW9kZWwuSVNlcnZlcldvcmtpbmdDb3B5RGVsZWdhdGUjaW5pdGlhbGl6ZShjb20uaWJtLnd0cC5zZXJ2ZXIuY29yZS5JU2VydmVyV29ya2luZ0NvcHkpCgkgKi8KCXB1YmxpYyB2b2lkIGluaXRpYWxpemUoSVNlcnZlcldvcmtpbmdDb3B5IHdvcmtpbmdDb3B5KSB7CgkJdGhpcy53b3JraW5nQ29weSA9IHdvcmtpbmdDb3B5OwoJfQoKCS8qCgkgKiAobm9uLUphdmFkb2MpCgkgKiAKCSAqIEBzZWUgY29tLmlibS53dHAuc2VydmVyLmNvcmUubW9kZWwuSVNlcnZlcldvcmtpbmdDb3B5RGVsZWdhdGUjc2V0RGVmYXVsdHMoKQoJICovCglwdWJsaWMgdm9pZCBzZXREZWZhdWx0cygpIHsKCX0KCgkvKgoJICogKG5vbi1KYXZhZG9jKQoJICogCgkgKiBAc2VlIGNvbS5pYm0ud3RwLnNlcnZlci5jb3JlLm1vZGVsLklTZXJ2ZXJXb3JraW5nQ29weURlbGVnYXRlI21vZGlmeU1vZHVsZXMoY29tLmlibS53dHAuc2VydmVyLmNvcmUubW9kZWwuSU1vZHVsZVtdLAoJICogICAgICBjb20uaWJtLnd0cC5zZXJ2ZXIuY29yZS5tb2RlbC5JTW9kdWxlW10sCgkgKiAgICAgIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yKQoJICovCglwdWJsaWMgdm9pZCBtb2RpZnlNb2R1bGVzKElNb2R1bGVbXSBhZGQsIElNb2R1bGVbXSByZW1vdmUsCgkJCUlQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24gewoKCQlJU2VydmVyQ29uZmlndXJhdGlvbldvcmtpbmdDb3B5IHNjd2MgPSBsaXZlU2VydmVyCgkJCQkuZ2V0U2VydmVyQ29uZmlndXJhdGlvbigpLmdldFdvcmtpbmdDb3B5KCk7CgoJCU9iamVjdCB3YyA9IHNjd2MuZ2V0V29ya2luZ0NvcHlEZWxlZ2F0ZSgpOwoJCWJvb2xlYW4gY2hhbmdlID0gZmFsc2U7CgoJCWlmIChhZGQgIT0gbnVsbCkgewoJCQlpbnQgc2l6ZSA9IGFkZC5sZW5ndGg7CgkJCWZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CgkJCQlJTW9kdWxlIG1vZHVsZTMgPSBhZGRbaV07CgkJCQljaGFuZ2UgPSB0cnVlOwoJCQl9CgkJfQoKCQlpZiAocmVtb3ZlICE9IG51bGwpIHsKCQkJaW50IHNpemUyID0gcmVtb3ZlLmxlbmd0aDsKCQkJZm9yIChpbnQgaiA9IDA7IGogPCBzaXplMjsgaisrKSB7CgkJCQlJTW9kdWxlIG1vZHVsZTMgPSByZW1vdmVbal07CgkJCQlTdHJpbmcgbWVtZW50byA9IG1vZHVsZTMuZ2V0RmFjdG9yeUlkKCkgKyAiOiIgKyBtb2R1bGUzLmdldElkKCk7CgkJCX0KCQl9CgkJaWYgKCFjaGFuZ2UpCgkJCXNjd2MucmVsZWFzZSgpOwoJCWVsc2UKCQkJc2N3Yy5zYXZlKG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwoJfQoKCS8qCgkgKiAobm9uLUphdmFkb2MpCgkgKiAKCSAqIEBzZWUgY29tLmlibS53dHAuc2VydmVyLmNvcmUubW9kZWwuSVNlcnZlckRlbGVnYXRlI2luaXRpYWxpemUoY29tLmlibS53dHAuc2VydmVyLmNvcmUuSVNlcnZlclN0YXRlKQoJICovCglwdWJsaWMgdm9pZCBpbml0aWFsaXplKElTZXJ2ZXJTdGF0ZSBsaXZlU2VydmVyKSB7CgkJdGhpcy5saXZlU2VydmVyID0gbGl2ZVNlcnZlcjsKCX0KCgkvKgoJICogKG5vbi1KYXZhZG9jKQoJICogCgkgKiBAc2VlIGNvbS5pYm0ud3RwLnNlcnZlci5jb3JlLm1vZGVsLklTZXJ2ZXJEZWxlZ2F0ZSNkaXNwb3NlKCkKCSAqLwoJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCgoJfQoKCS8qCgkgKiAobm9uLUphdmFkb2MpCgkgKiAKCSAqIEBzZWUgY29tLmlibS53dHAuc2VydmVyLmNvcmUubW9kZWwuSVNlcnZlckRlbGVnYXRlI2dldFB1Ymxpc2hlcihqYXZhLnV0aWwuTGlzdCwKCSAqICAgICAgY29tLmlibS53dHAuc2VydmVyLmNvcmUubW9kZWwuSU1vZHVsZSkKCSAqLwoJcHVibGljIElQdWJsaXNoZXIgZ2V0UHVibGlzaGVyKExpc3QgcGFyZW50cywgSU1vZHVsZSBtb2R1bGUpIHsKCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCgkJcmV0dXJuIG51bGw7Cgl9CgoJLyoKCSAqIChub24tSmF2YWRvYykKCSAqIAoJICogQHNlZSBjb20uaWJtLnd0cC5zZXJ2ZXIuY29yZS5tb2RlbC5JU2VydmVyRGVsZWdhdGUjdXBkYXRlQ29uZmlndXJhdGlvbigpCgkgKi8KCXB1YmxpYyB2b2lkIHVwZGF0ZUNvbmZpZ3VyYXRpb24oKSB7CgkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgoKCX0KCgkvKgoJICogKG5vbi1KYXZhZG9jKQoJICogCgkgKiBAc2VlIGNvbS5pYm0ud3RwLnNlcnZlci5jb3JlLm1vZGVsLklTZXJ2ZXJEZWxlZ2F0ZSN1cGRhdGVNb2R1bGUoY29tLmlibS53dHAuc2VydmVyLmNvcmUubW9kZWwuSU1vZHVsZSwKCSAqICAgICAgY29tLmlibS53dHAuc2VydmVyLmNvcmUucmVzb3VyY2VzLklNb2R1bGVSZXNvdXJjZURlbHRhKQoJICovCglwdWJsaWMgdm9pZCB1cGRhdGVNb2R1bGUoSU1vZHVsZSBtb2R1bGUsIElNb2R1bGVSZXNvdXJjZURlbHRhIGRlbHRhKSB7CgkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgoKCX0KCgkvKgoJICogKG5vbi1KYXZhZG9jKQoJICogCgkgKiBAc2VlIGNvbS5pYm0ud3RwLnNlcnZlci5jb3JlLm1vZGVsLklTZXJ2ZXJEZWxlZ2F0ZSNwdWJsaXNoU3RhcnQob3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3IpCgkgKi8KCXB1YmxpYyBJU3RhdHVzIHB1Ymxpc2hTdGFydChJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCgkJcmV0dXJuIG51bGw7Cgl9CgoJLyoKCSAqIChub24tSmF2YWRvYykKCSAqIAoJICogQHNlZSBjb20uaWJtLnd0cC5zZXJ2ZXIuY29yZS5tb2RlbC5JU2VydmVyRGVsZWdhdGUjcHVibGlzaENvbmZpZ3VyYXRpb24ob3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3IpCgkgKi8KCXB1YmxpYyBJU3RhdHVzIHB1Ymxpc2hDb25maWd1cmF0aW9uKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgewoJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKCQlyZXR1cm4gbnVsbDsKCX0KCgkvKgoJICogKG5vbi1KYXZhZG9jKQoJICogCgkgKiBAc2VlIGNvbS5pYm0ud3RwLnNlcnZlci5jb3JlLm1vZGVsLklTZXJ2ZXJEZWxlZ2F0ZSNwdWJsaXNoU3RvcChvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcikKCSAqLwoJcHVibGljIElTdGF0dXMgcHVibGlzaFN0b3AoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7CgkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgoJCXJldHVybiBudWxsOwoJfQoKCS8qCgkgKiAobm9uLUphdmFkb2MpCgkgKiAKCSAqIEBzZWUgY29tLmlibS53dHAuc2VydmVyLmNvcmUubW9kZWwuSVNlcnZlckRlbGVnYXRlI2Nhbk1vZGlmeU1vZHVsZXMoY29tLmlibS53dHAuc2VydmVyLmNvcmUubW9kZWwuSU1vZHVsZVtdLAoJICogICAgICBjb20uaWJtLnd0cC5zZXJ2ZXIuY29yZS5tb2RlbC5JTW9kdWxlW10pCgkgKi8KCXB1YmxpYyBJU3RhdHVzIGNhbk1vZGlmeU1vZHVsZXMoSU1vZHVsZVtdIGFkZCwgSU1vZHVsZVtdIHJlbW92ZSkgewoJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKCX0KCgkvKgoJICogKG5vbi1KYXZhZG9jKQoJICogCgkgKiBAc2VlIGNvbS5pYm0ud3RwLnNlcnZlci5jb3JlLm1vZGVsLklTZXJ2ZXJEZWxlZ2F0ZSNnZXRNb2R1bGVzKCkKCSAqLwoJcHVibGljIElNb2R1bGVbXSBnZXRNb2R1bGVzKCkgewoJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKCQlyZXR1cm4gbnVsbDsKCX0KCgkvKgoJICogKG5vbi1KYXZhZG9jKQoJICogCgkgKiBAc2VlIGNvbS5pYm0ud3RwLnNlcnZlci5jb3JlLm1vZGVsLklTZXJ2ZXJEZWxlZ2F0ZSNnZXRSZXBhaXJDb21tYW5kcyhjb20uaWJtLnd0cC5zZXJ2ZXIuY29yZS5tb2RlbC5JTW9kdWxlRmFjdG9yeUV2ZW50W10sCgkgKiAgICAgIGNvbS5pYm0ud3RwLnNlcnZlci5jb3JlLm1vZGVsLklNb2R1bGVFdmVudFtdKQoJICovCglwdWJsaWMgSVRhc2tbXSBnZXRSZXBhaXJDb21tYW5kcyhJTW9kdWxlRmFjdG9yeUV2ZW50W10gZmFjdG9yeUV2ZW50LAoJCQlJTW9kdWxlRXZlbnRbXSBtb2R1bGVFdmVudCkgewoJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKCQlyZXR1cm4gbnVsbDsKCX0KCgkvKgoJICogKG5vbi1KYXZhZG9jKQoJICogCgkgKiBAc2VlIGNvbS5pYm0ud3RwLnNlcnZlci5jb3JlLm1vZGVsLklTZXJ2ZXJEZWxlZ2F0ZSNnZXRDaGlsZE1vZHVsZXMoY29tLmlibS53dHAuc2VydmVyLmNvcmUubW9kZWwuSU1vZHVsZSkKCSAqLwoJcHVibGljIExpc3QgZ2V0Q2hpbGRNb2R1bGVzKElNb2R1bGUgbW9kdWxlKSB7CgkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgoJCXJldHVybiBudWxsOwoJfQoKCS8qCgkgKiAobm9uLUphdmFkb2MpCgkgKiAKCSAqIEBzZWUgY29tLmlibS53dHAuc2VydmVyLmNvcmUubW9kZWwuSVNlcnZlckRlbGVnYXRlI2dldFBhcmVudE1vZHVsZXMoY29tLmlibS53dHAuc2VydmVyLmNvcmUubW9kZWwuSU1vZHVsZSkKCSAqLwoJcHVibGljIExpc3QgZ2V0UGFyZW50TW9kdWxlcyhJTW9kdWxlIG1vZHVsZSkgdGhyb3dzIENvcmVFeGNlcHRpb24gewoJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKCQlyZXR1cm4gbnVsbDsKCX0KCgkvKgoJICogKG5vbi1KYXZhZG9jKQoJICogCgkgKiBAc2VlIGNvbS5pYm0ud3RwLnNlcnZlci5jb3JlLm1vZGVsLklTZXJ2ZXJEZWxlZ2F0ZSNzZXRMYXVuY2hEZWZhdWx0cyhvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLklMYXVuY2hDb25maWd1cmF0aW9uV29ya2luZ0NvcHkpCgkgKi8KCXB1YmxpYyB2b2lkIHNldExhdW5jaERlZmF1bHRzKElMYXVuY2hDb25maWd1cmF0aW9uV29ya2luZ0NvcHkgd29ya2luZ0NvcHkpIHsKCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCgoJfQoKCS8qCgkgKiAobm9uLUphdmFkb2MpCgkgKiAKCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLm1vZGVsLklTZXJ2ZXJXb3JraW5nQ29weURlbGVnYXRlI2hhbmRsZVNhdmUoYnl0ZSwKCSAqICAgICAgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3IpCgkgKi8KCXB1YmxpYyB2b2lkIGhhbmRsZVNhdmUoYnl0ZSBpZCwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7CgkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgoKCX0KCgkvKgoJICogKG5vbi1KYXZhZG9jKQoJICogCgkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5tb2RlbC5JU2VydmVyRGVsZWdhdGUjZ2V0TW9kdWxlU3RhdGUob3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLm1vZGVsLklNb2R1bGUpCgkgKi8KCXB1YmxpYyBieXRlIGdldE1vZHVsZVN0YXRlKElNb2R1bGUgbW9kdWxlKSB7CgkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgoJCXJldHVybiAwOwoJfQoKfQ==