cGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLmludGVybmFsLndpemFyZDsKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQ29weXJpZ2h0IChjKSAyMDAzIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLiCgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ29tbW9uIFB1YmxpYyBMaWNlbnNlIHYxLjAKICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwKoCoKICogQ29udHJpYnV0b3JzOgogKiAgICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmltcG9ydCBqYXZhLnV0aWwuTGlzdDsKCmltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuKjsKaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkuaW50ZXJuYWwuU2VydmVyVUlQbHVnaW47CmltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLmludGVybmFsLnRhc2suUmVsZWFzZVNlcnZlclRhc2s7CmltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLmludGVybmFsLnRhc2suU2F2ZVNlcnZlclRhc2s7CmltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLmludGVybmFsLndpemFyZC5mcmFnbWVudC5Nb2RpZnlNb2R1bGVzV2l6YXJkRnJhZ21lbnQ7CmltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLnVpLmludGVybmFsLndpemFyZC5mcmFnbWVudC5UYXNrc1dpemFyZEZyYWdtZW50OwppbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS53aXphcmQuVGFza1dpemFyZDsKaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIudWkud2l6YXJkLldpemFyZEZyYWdtZW50OwoKLyoqCiAqIEEgd2l6YXJkIHVzZWQgdG8gYWRkIGFuZCByZW1vdmUgbW9kdWxlcy4KICovCnB1YmxpYyBjbGFzcyBNb2RpZnlNb2R1bGVzV2l6YXJkIGV4dGVuZHMgVGFza1dpemFyZCB7CglzdGF0aWMgY2xhc3MgTW9kaWZ5TW9kdWxlc1dpemFyZDIgZXh0ZW5kcyBXaXphcmRGcmFnbWVudCB7CgkJcHJvdGVjdGVkIElTZXJ2ZXIgc2VydmVyOwoJCQoJCXB1YmxpYyBNb2RpZnlNb2R1bGVzV2l6YXJkMihJU2VydmVyV29ya2luZ0NvcHkgc2VydmVyKSB7CgkJCXRoaXMuc2VydmVyID0gc2VydmVyOwoJCX0KCgkJcHVibGljIHZvaWQgY3JlYXRlU3ViRnJhZ21lbnRzKExpc3QgbGlzdCkgewoJCQlsaXN0LmFkZChuZXcgV2l6YXJkRnJhZ21lbnQoKSB7CgkJCQlwdWJsaWMgdm9pZCBlbnRlcigpIHsKCQkJCQlnZXRUYXNrTW9kZWwoKS5wdXRPYmplY3QoSVRhc2tNb2RlbC5UQVNLX1NFUlZFUiwgc2VydmVyKTsKCQkJCX0KCQkJfSk7CgkJCWxpc3QuYWRkKG5ldyBNb2RpZnlNb2R1bGVzV2l6YXJkRnJhZ21lbnQoKSk7CgkJCWxpc3QuYWRkKG5ldyBUYXNrc1dpemFyZEZyYWdtZW50KCkpOwoJCQlsaXN0LmFkZChuZXcgV2l6YXJkRnJhZ21lbnQoKSB7CgkJCQlwdWJsaWMgSVRhc2sgY3JlYXRlQ2FuY2VsVGFzaygpIHsKCQkJCQlyZXR1cm4gbmV3IFJlbGVhc2VTZXJ2ZXJUYXNrKCk7CgkJCQl9CgkJCQkKCQkJCXB1YmxpYyBJVGFzayBjcmVhdGVGaW5pc2hUYXNrKCkgewoJCQkJCXJldHVybiBuZXcgU2F2ZVNlcnZlclRhc2soKTsKCQkJCX0KCQkJfSk7CgkJfQoJfQoKCS8qKgoJICogTW9kaWZ5TW9kdWxlc1dpemFyZCBjb25zdHJ1Y3RvciBjb21tZW50LgoJICovCglwdWJsaWMgTW9kaWZ5TW9kdWxlc1dpemFyZChJU2VydmVyIHNlcnZlcikgewoJCXN1cGVyKFNlcnZlclVJUGx1Z2luLmdldFJlc291cmNlKCIld2l6TW9kdWxlV2l6YXJkVGl0bGUiKSwgbmV3IE1vZGlmeU1vZHVsZXNXaXphcmQyKHNlcnZlci5nZXRXb3JraW5nQ29weSgpKSk7CgkKCQlzZXROZWVkc1Byb2dyZXNzTW9uaXRvcih0cnVlKTsKCX0KfQ==