LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQ29weXJpZ2h0IChjKSAyMDAyIElCTSBDb3JwLiBhbmQgb3RoZXJzLgpBbGwgcmlnaHRzIHJlc2VydmVkLiCgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ29tbW9uIFB1YmxpYyBMaWNlbnNlIHYwLjUKd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjA1Lmh0bWwKoApDb250cmlidXRvcnM6CiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpwYWNrYWdlIG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLnV0aWw7CgppbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUudXRpbC5DbGFzc0Zvcm1hdEV4Y2VwdGlvbjsKaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLnV0aWwuSUF0dHJpYnV0ZU5hbWVzQ29uc3RhbnRzOwppbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUudXRpbC5JQ29uc3RhbnRQb29sOwppbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUudXRpbC5JTG9jYWxWYXJpYWJsZUF0dHJpYnV0ZTsKaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLnV0aWwuSUxvY2FsVmFyaWFibGVUYWJsZUVudHJ5OwoKLyoqCiAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgSUxvY2FsVmFyaWFibGVBdHRyaWJ1dGUuCiAqLwpwdWJsaWMgY2xhc3MgTG9jYWxWYXJpYWJsZUF0dHJpYnV0ZQoJZXh0ZW5kcyBDbGFzc0ZpbGVBdHRyaWJ1dGUKCWltcGxlbWVudHMgSUxvY2FsVmFyaWFibGVBdHRyaWJ1dGUgewoKCXByaXZhdGUgc3RhdGljIGZpbmFsIElMb2NhbFZhcmlhYmxlVGFibGVFbnRyeVtdIE5PX0VOVFJJRVMgPSBuZXcgSUxvY2FsVmFyaWFibGVUYWJsZUVudHJ5WzBdOwoJcHJpdmF0ZSBpbnQgbG9jYWxWYXJpYWJsZVRhYmxlTGVuZ3RoOwoJcHJpdmF0ZSBJTG9jYWxWYXJpYWJsZVRhYmxlRW50cnlbXSBsb2NhbFZhcmlhYmxlVGFibGU7CgkKCS8qKgoJICogQ29uc3RydWN0b3IgZm9yIExvY2FsVmFyaWFibGVBdHRyaWJ1dGUuCgkgKiBAcGFyYW0gY2xhc3NGaWxlQnl0ZXMKCSAqIEBwYXJhbSBjb25zdGFudFBvb2wKCSAqIEBwYXJhbSBvZmZzZXQKCSAqIEB0aHJvd3MgQ2xhc3NGb3JtYXRFeGNlcHRpb24KCSAqLwoJcHVibGljIExvY2FsVmFyaWFibGVBdHRyaWJ1dGUoCgkJYnl0ZVtdIGNsYXNzRmlsZUJ5dGVzLAoJCUlDb25zdGFudFBvb2wgY29uc3RhbnRQb29sLAoJCWludCBvZmZzZXQpCgkJdGhyb3dzIENsYXNzRm9ybWF0RXhjZXB0aW9uIHsKCQlzdXBlcihjbGFzc0ZpbGVCeXRlcywgY29uc3RhbnRQb29sLCBvZmZzZXQpOwoJCXRoaXMubG9jYWxWYXJpYWJsZVRhYmxlTGVuZ3RoID0gdTJBdChjbGFzc0ZpbGVCeXRlcywgNiwgb2Zmc2V0KTsKCQlpbnQgcmVhZE9mZnNldCA9IDg7CgkJaW50IGxlbmd0aCA9IHRoaXMubG9jYWxWYXJpYWJsZVRhYmxlTGVuZ3RoOwoJCXRoaXMubG9jYWxWYXJpYWJsZVRhYmxlID0gTk9fRU5UUklFUzsKCQlpZiAobGVuZ3RoICE9IDApIHsKCQkJdGhpcy5sb2NhbFZhcmlhYmxlVGFibGUgPSBuZXcgTG9jYWxWYXJpYWJsZVRhYmxlRW50cnlbbGVuZ3RoXTsKCQl9CgkJZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewoJCQl0aGlzLmxvY2FsVmFyaWFibGVUYWJsZVtpXSA9IG5ldyBMb2NhbFZhcmlhYmxlVGFibGVFbnRyeShjbGFzc0ZpbGVCeXRlcywgY29uc3RhbnRQb29sLCBvZmZzZXQgKyByZWFkT2Zmc2V0KTsKCQkJcmVhZE9mZnNldCArPSAxMDsKCQl9Cgl9CgoJLyoqCgkgKiBAc2VlIG9yZy5lY2xpcHNlLmpkdC5jb3JlLnV0aWwuSUNsYXNzRmlsZUF0dHJpYnV0ZSNnZXRBdHRyaWJ1dGVOYW1lKCkKCSAqLwoJcHVibGljIGNoYXJbXSBnZXRBdHRyaWJ1dGVOYW1lKCkgewoJCXJldHVybiBJQXR0cmlidXRlTmFtZXNDb25zdGFudHMuTE9DQUxfVkFSSUFCTEU7Cgl9CgoJLyoqCgkgKiBAc2VlIElMb2NhbFZhcmlhYmxlQXR0cmlidXRlI2dldExvY2FsVmFyaWFibGVUYWJsZSgpCgkgKi8KCXB1YmxpYyBJTG9jYWxWYXJpYWJsZVRhYmxlRW50cnlbXSBnZXRMb2NhbFZhcmlhYmxlVGFibGUoKSB7CgkJcmV0dXJuIHRoaXMubG9jYWxWYXJpYWJsZVRhYmxlOwoJfQoKCS8qKgoJICogQHNlZSBJTG9jYWxWYXJpYWJsZUF0dHJpYnV0ZSNnZXRMb2NhbFZhcmlhYmxlVGFibGVMZW5ndGgoKQoJICovCglwdWJsaWMgaW50IGdldExvY2FsVmFyaWFibGVUYWJsZUxlbmd0aCgpIHsKCQlyZXR1cm4gdGhpcy5sb2NhbFZhcmlhYmxlVGFibGVMZW5ndGg7Cgl9Cgp9Cg==