LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQ29weXJpZ2h0IChjKSAyMDAyIElCTSBDb3JwLiBhbmQgb3RoZXJzLgpBbGwgcmlnaHRzIHJlc2VydmVkLiCgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ29tbW9uIFB1YmxpYyBMaWNlbnNlIHYwLjUKd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjA1Lmh0bWwKoApDb250cmlidXRvcnM6CiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpwYWNrYWdlIG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLnV0aWw7CgppbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUudXRpbC5DbGFzc0Zvcm1hdEV4Y2VwdGlvbjsKaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLnV0aWwuSUF0dHJpYnV0ZU5hbWVzQ29uc3RhbnRzOwppbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUudXRpbC5JQ29uc3RhbnRQb29sOwppbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUudXRpbC5JTGluZU51bWJlckF0dHJpYnV0ZTsKCi8qKgogKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIElMaW5lTnVtYmVyQXR0cmlidXRlLgogKi8KcHVibGljIGNsYXNzIExpbmVOdW1iZXJBdHRyaWJ1dGUKCWV4dGVuZHMgQ2xhc3NGaWxlQXR0cmlidXRlCglpbXBsZW1lbnRzIElMaW5lTnVtYmVyQXR0cmlidXRlIHsKCglwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnRbXVtdIE5PX0VOVFJJRVMgPSBuZXcgaW50WzBdWzBdOwoJcHJpdmF0ZSBpbnQgbGluZU51bWJlclRhYmxlTGVuZ3RoOwoJcHJpdmF0ZSBpbnRbXVtdIGxpbmVOdW1iZXJUYWJsZTsKCQoJLyoqCgkgKiBDb25zdHJ1Y3RvciBmb3IgTGluZU51bWJlckF0dHJpYnV0ZS4KCSAqIEBwYXJhbSBjbGFzc0ZpbGVCeXRlcwoJICogQHBhcmFtIGNvbnN0YW50UG9vbAoJICogQHBhcmFtIG9mZnNldAoJICogQHRocm93cyBDbGFzc0Zvcm1hdEV4Y2VwdGlvbgoJICovCglwdWJsaWMgTGluZU51bWJlckF0dHJpYnV0ZSgKCQlieXRlW10gY2xhc3NGaWxlQnl0ZXMsCgkJSUNvbnN0YW50UG9vbCBjb25zdGFudFBvb2wsCgkJaW50IG9mZnNldCkKCQl0aHJvd3MgQ2xhc3NGb3JtYXRFeGNlcHRpb24gewoJCXN1cGVyKGNsYXNzRmlsZUJ5dGVzLCBjb25zdGFudFBvb2wsIG9mZnNldCk7CgkJCgkJdGhpcy5saW5lTnVtYmVyVGFibGVMZW5ndGggPSB1MkF0KGNsYXNzRmlsZUJ5dGVzLCA2LCBvZmZzZXQpOwoJCXRoaXMubGluZU51bWJlclRhYmxlID0gTk9fRU5UUklFUzsKCQlpZiAodGhpcy5saW5lTnVtYmVyVGFibGVMZW5ndGggIT0gMCkgewoJCQl0aGlzLmxpbmVOdW1iZXJUYWJsZSA9IG5ldyBpbnRbdGhpcy5saW5lTnVtYmVyVGFibGVMZW5ndGhdWzJdOwoJCX0KCQlpbnQgcmVhZE9mZnNldCA9IDg7CgkJZm9yIChpbnQgaSA9IDAsIG1heCA9IHRoaXMubGluZU51bWJlclRhYmxlTGVuZ3RoOyBpIDwgbWF4OyBpKyspIHsKCQkJdGhpcy5saW5lTnVtYmVyVGFibGVbaV1bMF0gPSB1MkF0KGNsYXNzRmlsZUJ5dGVzLCByZWFkT2Zmc2V0LCBvZmZzZXQpOwoJCQl0aGlzLmxpbmVOdW1iZXJUYWJsZVtpXVsxXSA9IHUyQXQoY2xhc3NGaWxlQnl0ZXMsIHJlYWRPZmZzZXQgKyAyLCBvZmZzZXQpOwoJCQlyZWFkT2Zmc2V0ICs9IDQ7CgkJfQoJfQoKCS8qKgoJICogQHNlZSBvcmcuZWNsaXBzZS5qZHQuY29yZS51dGlsLklDbGFzc0ZpbGVBdHRyaWJ1dGUjZ2V0QXR0cmlidXRlTmFtZSgpCgkgKi8KCXB1YmxpYyBjaGFyW10gZ2V0QXR0cmlidXRlTmFtZSgpIHsKCQlyZXR1cm4gSUF0dHJpYnV0ZU5hbWVzQ29uc3RhbnRzLkxJTkVfTlVNQkVSOwoJfQoKCS8qKgoJICogQHNlZSBJTGluZU51bWJlckF0dHJpYnV0ZSNnZXRMaW5lTnVtYmVyVGFibGUoKQoJICovCglwdWJsaWMgaW50W11bXSBnZXRMaW5lTnVtYmVyVGFibGUoKSB7CgkJcmV0dXJuIHRoaXMubGluZU51bWJlclRhYmxlOwoJfQoKCS8qKgoJICogQHNlZSBJTGluZU51bWJlckF0dHJpYnV0ZSNnZXRMaW5lTnVtYmVyVGFibGVMZW5ndGgoKQoJICovCglwdWJsaWMgaW50IGdldExpbmVOdW1iZXJUYWJsZUxlbmd0aCgpIHsKCQlyZXR1cm4gdGhpcy5saW5lTnVtYmVyVGFibGVMZW5ndGg7Cgl9Cgp9Cg==