ZGlmZiAtLWdpdCBhL3BsdWdpbnMvc3FsdG9vbHMvb3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLmRhdGEudWkvc3JjL29yZy9lY2xpcHNlL2RhdGF0b29scy9zcWx0b29scy9kYXRhL2ludGVybmFsL3VpL0ZpbGVGb3JtYXRXaXphcmRQYWdlLmphdmEgYi9wbHVnaW5zL3NxbHRvb2xzL29yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5kYXRhLnVpL3NyYy9vcmcvZWNsaXBzZS9kYXRhdG9vbHMvc3FsdG9vbHMvZGF0YS9pbnRlcm5hbC91aS9GaWxlRm9ybWF0V2l6YXJkUGFnZS5qYXZhCmluZGV4IGY1ZGEzM2UuLjdkZThlYTIgMTAwNjQ0Ci0tLSBhL3BsdWdpbnMvc3FsdG9vbHMvb3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLmRhdGEudWkvc3JjL29yZy9lY2xpcHNlL2RhdGF0b29scy9zcWx0b29scy9kYXRhL2ludGVybmFsL3VpL0ZpbGVGb3JtYXRXaXphcmRQYWdlLmphdmEKKysrIGIvcGx1Z2lucy9zcWx0b29scy9vcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuZGF0YS51aS9zcmMvb3JnL2VjbGlwc2UvZGF0YXRvb2xzL3NxbHRvb2xzL2RhdGEvaW50ZXJuYWwvdWkvRmlsZUZvcm1hdFdpemFyZFBhZ2UuamF2YQpAQCAtMzMsNyArMzMsNyBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkZpbGVEaWFsb2c7CiBpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuR3JvdXA7CiBpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaGVscC5Xb3JrYmVuY2hIZWxwOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7CiAKIAogcHVibGljIGNsYXNzIEZpbGVGb3JtYXRXaXphcmRQYWdlIGV4dGVuZHMgV2l6YXJkUGFnZQpAQCAtODIsNyArODIsNyBAQAogICAgICAgICBDb21wb3NpdGUgYyA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7CiAgICAgICAgIGMuc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KDMsIGZhbHNlKSk7CiAgICAgICAgIGlmIChnZXRIZWxwSUQoKSE9bnVsbCkKLSAgICAgICAgCVdvcmtiZW5jaEhlbHAuc2V0SGVscChjLCBnZXRIZWxwSUQoKSk7CisgICAgICAgIAlQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKGMsIGdldEhlbHBJRCgpKTsKICAgICAgICAgCiAgICAgICAgIExhYmVsIGwgPSBuZXcgTGFiZWwoYywgU1dULk5PTkUpOwogICAgICAgICBpZiAoZXh0cmFjdCkKZGlmZiAtLWdpdCBhL3BsdWdpbnMvc3FsdG9vbHMvb3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2RhdGF0b29scy9zcWx0b29scy9zcWxidWlsZGVyL2FjdGlvbnMvTmV3U1FMU3RhdGVtZW50RGlhbG9nLmphdmEgYi9wbHVnaW5zL3NxbHRvb2xzL29yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9kYXRhdG9vbHMvc3FsdG9vbHMvc3FsYnVpbGRlci9hY3Rpb25zL05ld1NRTFN0YXRlbWVudERpYWxvZy5qYXZhCmluZGV4IDUyNzhkOTkuLjBjNWNiMzEgMTAwNjQ0Ci0tLSBhL3BsdWdpbnMvc3FsdG9vbHMvb3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2RhdGF0b29scy9zcWx0b29scy9zcWxidWlsZGVyL2FjdGlvbnMvTmV3U1FMU3RhdGVtZW50RGlhbG9nLmphdmEKKysrIGIvcGx1Z2lucy9zcWx0b29scy9vcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZGF0YXRvb2xzL3NxbHRvb2xzL3NxbGJ1aWxkZXIvYWN0aW9ucy9OZXdTUUxTdGF0ZW1lbnREaWFsb2cuamF2YQpAQCAtMSw1ICsxLDUgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgqSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQ29weXJpZ2h0IO+/vSAyMDAwLCAyMDE4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwogICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAgKiB3aGljaCBpcyBhdmFpbGFibGUgYXQKQEAgLTIzLDcgKzIzLDcgQEAKIGltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CiBpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKIGltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5oZWxwLldvcmtiZW5jaEhlbHA7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKIAogCiAvKioKQEAgLTg5LDcgKzg5LDcgQEAKICAgICAgICAgLy8gdGhlIHN0YXRlIG9mIHRoZSBjb250cm9sLgogICAgICAgICBmRGlhbG9nQXJlYS5nZXRTdGF0ZW1lbnROYW1lVGV4dCgpLmFkZE1vZGlmeUxpc3RlbmVyKHRoaXMpOwogICAgICAgICAKLSAgICAgICAgV29ya2JlbmNoSGVscC5zZXRIZWxwKGZEaWFsb2dBcmVhLCBTUUxCdWlsZGVyQ29udGV4dElkcy5TUUxEX05FV19TVE1UX0RJQUxPRyk7CisgICAgICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoZkRpYWxvZ0FyZWEsIFNRTEJ1aWxkZXJDb250ZXh0SWRzLlNRTERfTkVXX1NUTVRfRElBTE9HKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiBmRGlhbG9nQXJlYTsKICAgICB9CmRpZmYgLS1naXQgYS9wbHVnaW5zL3NxbHRvb2xzL29yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9kYXRhdG9vbHMvc3FsdG9vbHMvc3FsYnVpbGRlci9hY3Rpb25zL1RhYmxlQWxpYXNBY3Rpb24uamF2YSBiL3BsdWdpbnMvc3FsdG9vbHMvb3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2RhdGF0b29scy9zcWx0b29scy9zcWxidWlsZGVyL2FjdGlvbnMvVGFibGVBbGlhc0FjdGlvbi5qYXZhCmluZGV4IGU3ZTgwMzkuLjhiMDAwYjQgMTAwNjQ0Ci0tLSBhL3BsdWdpbnMvc3FsdG9vbHMvb3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2RhdGF0b29scy9zcWx0b29scy9zcWxidWlsZGVyL2FjdGlvbnMvVGFibGVBbGlhc0FjdGlvbi5qYXZhCisrKyBiL3BsdWdpbnMvc3FsdG9vbHMvb3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2RhdGF0b29scy9zcWx0b29scy9zcWxidWlsZGVyL2FjdGlvbnMvVGFibGVBbGlhc0FjdGlvbi5qYXZhCkBAIC0xLDUgKzEsNSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCCpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBDb3B5cmlnaHQg77+9IDIwMDAsIDIwMTggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCiAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKICAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdApAQCAtMTIsMjIgKzEyLDE0IEBACiAKIGltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CiAKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSUlucHV0VmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSW5wdXREaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhlbHAuV29ya2JlbmNoSGVscDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kYXRhdG9vbHMubW9kZWxiYXNlLnNxbC5zY2hlbWEuRGF0YWJhc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGF0YXRvb2xzLm1vZGVsYmFzZS5zcWwudGFibGVzLlRhYmxlOwotCiBpbXBvcnQgb3JnLmVjbGlwc2UuZGF0YXRvb2xzLm1vZGVsYmFzZS5zcWwucXVlcnkuUXVlcnlEZWxldGVTdGF0ZW1lbnQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UuZGF0YXRvb2xzLm1vZGVsYmFzZS5zcWwucXVlcnkuUXVlcnlTZWxlY3RTdGF0ZW1lbnQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UuZGF0YXRvb2xzLm1vZGVsYmFzZS5zcWwucXVlcnkuUXVlcnlVcGRhdGVTdGF0ZW1lbnQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UuZGF0YXRvb2xzLm1vZGVsYmFzZS5zcWwucXVlcnkuU1FMUXVlcnlPYmplY3Q7CiBpbXBvcnQgb3JnLmVjbGlwc2UuZGF0YXRvb2xzLm1vZGVsYmFzZS5zcWwucXVlcnkuVGFibGVFeHByZXNzaW9uOwogaW1wb3J0IG9yZy5lY2xpcHNlLmRhdGF0b29scy5tb2RlbGJhc2Uuc3FsLnF1ZXJ5LmhlbHBlci5UYWJsZUhlbHBlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5kYXRhdG9vbHMubW9kZWxiYXNlLnNxbC5zY2hlbWEuRGF0YWJhc2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZGF0YXRvb2xzLm1vZGVsYmFzZS5zcWwudGFibGVzLlRhYmxlOwogaW1wb3J0IG9yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxidWlsZGVyLk1lc3NhZ2VzOwogaW1wb3J0IG9yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxidWlsZGVyLlNRTEJ1aWxkZXJDb250ZXh0SWRzOwogaW1wb3J0IG9yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxidWlsZGVyLm1vZGVsLkRhdGFiYXNlSGVscGVyOwpAQCAtMzUsNiArMjcsMTMgQEAKIGltcG9ydCBvcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsYnVpbGRlci5tb2RlbC5TUUxEb21haW5Nb2RlbDsKIGltcG9ydCBvcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsYnVpbGRlci5tb2RlbC5TZWxlY3RIZWxwZXI7CiBpbXBvcnQgb3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGJ1aWxkZXIubW9kZWwuVXBkYXRlSGVscGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5JSW5wdXRWYWxpZGF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5JbnB1dERpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKIAogcHVibGljIGNsYXNzIFRhYmxlQWxpYXNBY3Rpb24gZXh0ZW5kcyBBY3Rpb24gewogCkBAIC02NSw3ICs2NCw3IEBACiAgICAgICAgIEFsaWFzVmFsaWRhdG9yIGFsaWFzVmFsaWRhdG9yID0gbmV3IEFsaWFzVmFsaWRhdG9yKHRhYmxlQWxpYXNOYW1lKTsKIAogICAgICAgICBTaGVsbCBhbGlhc1NoZWxsID0gRGlzcGxheS5nZXRDdXJyZW50KCkuZ2V0QWN0aXZlU2hlbGwoKTsKLSAgICAgICAgV29ya2JlbmNoSGVscC5zZXRIZWxwKGFsaWFzU2hlbGwsIFNRTEJ1aWxkZXJDb250ZXh0SWRzLlNRTEdfVVBEQVRFX0FMSUFTX1RFWFQpOworICAgICAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKGFsaWFzU2hlbGwsIFNRTEJ1aWxkZXJDb250ZXh0SWRzLlNRTEdfVVBEQVRFX0FMSUFTX1RFWFQpOwogCiAgICAgICAgIFVwZGF0ZVRhYmxlQWxpYXNEaWFsb2cgdXBkYXRlQWxpYXNEaWFsb2cgPSBuZXcgVXBkYXRlVGFibGVBbGlhc0RpYWxvZyhhbGlhc1NoZWxsLCBNZXNzYWdlcy5fVUlfRElBTE9HX0NIQU5HRV9BTElBU19USVRMRSwKICAgICAgICAgICAgICAgICBNZXNzYWdlcy5fVUlfRElBTE9HX0NIQU5HRV9BTElBU19URVhULCB0YWJsZUFsaWFzTmFtZSwgYWxpYXNWYWxpZGF0b3IpOyAKZGlmZiAtLWdpdCBhL3BsdWdpbnMvc3FsdG9vbHMvb3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2RhdGF0b29scy9zcWx0b29scy9zcWxidWlsZGVyL2RpYWxvZ3MvQWRkVGFibGVEaWFsb2cuamF2YSBiL3BsdWdpbnMvc3FsdG9vbHMvb3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2RhdGF0b29scy9zcWx0b29scy9zcWxidWlsZGVyL2RpYWxvZ3MvQWRkVGFibGVEaWFsb2cuamF2YQppbmRleCBkYmMyNmEwLi5kODQ1MzM2IDEwMDY0NAotLS0gYS9wbHVnaW5zL3NxbHRvb2xzL29yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9kYXRhdG9vbHMvc3FsdG9vbHMvc3FsYnVpbGRlci9kaWFsb2dzL0FkZFRhYmxlRGlhbG9nLmphdmEKKysrIGIvcGx1Z2lucy9zcWx0b29scy9vcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZGF0YXRvb2xzL3NxbHRvb2xzL3NxbGJ1aWxkZXIvZGlhbG9ncy9BZGRUYWJsZURpYWxvZy5qYXZhCkBAIC0xLDUgKzEsNSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCCpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBDb3B5cmlnaHQg77+9IDIwMDAsIDIwMTggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCiAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKICAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdApAQCAtNTQsNyArNTQsNyBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7CiBpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZTsKIGltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlSXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5oZWxwLldvcmtiZW5jaEhlbHA7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKIAogCiAvKioKQEAgLTMwMCw3ICszMDAsNyBAQAogICAgICAqLwogICAgIHB1YmxpYyBDb250cm9sIGNyZWF0ZURpYWxvZ0FyZWEoQ29tcG9zaXRlIHBhcmVudCkgewogICAgICAgICBDb21wb3NpdGUgcGFuZWwgPSBWaWV3VXRpbGl0eS5jcmVhdGVDb21wb3NpdGUocGFyZW50LCAxLCB0cnVlLCB0cnVlKTsKLSAgICAgICAgV29ya2JlbmNoSGVscC5zZXRIZWxwKHBhbmVsLCBTUUxCdWlsZGVyQ29udGV4dElkcy5TUUxCX0FERF9UQUJMRV9ESUFMT0cpOworICAgICAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHBhbmVsLCBTUUxCdWlsZGVyQ29udGV4dElkcy5TUUxCX0FERF9UQUJMRV9ESUFMT0cpOwogICAgICAgICBjcmVhdGVJbnB1dFBhbmVsKHBhbmVsKTsKIAogICAgICAgICByZXR1cm4gcGFuZWw7CmRpZmYgLS1naXQgYS9wbHVnaW5zL3NxbHRvb2xzL29yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9kYXRhdG9vbHMvc3FsdG9vbHMvc3FsYnVpbGRlci9kaWFsb2dzL0NoYW5nZVNldE9wZXJhdG9yRGlhbG9nLmphdmEgYi9wbHVnaW5zL3NxbHRvb2xzL29yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9kYXRhdG9vbHMvc3FsdG9vbHMvc3FsYnVpbGRlci9kaWFsb2dzL0NoYW5nZVNldE9wZXJhdG9yRGlhbG9nLmphdmEKaW5kZXggYmYzMDIyMi4uODRiOTJiYyAxMDA2NDQKLS0tIGEvcGx1Z2lucy9zcWx0b29scy9vcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZGF0YXRvb2xzL3NxbHRvb2xzL3NxbGJ1aWxkZXIvZGlhbG9ncy9DaGFuZ2VTZXRPcGVyYXRvckRpYWxvZy5qYXZhCisrKyBiL3BsdWdpbnMvc3FsdG9vbHMvb3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2RhdGF0b29scy9zcWx0b29scy9zcWxidWlsZGVyL2RpYWxvZ3MvQ2hhbmdlU2V0T3BlcmF0b3JEaWFsb2cuamF2YQpAQCAtMSw1ICsxLDUgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgqSAyMDAwLCAyMDA5IFN5YmFzZSwgSW5jLiBhbmQgb3RoZXJzLgorICogQ29weXJpZ2h0IO+/vSAyMDAwLCAyMDE4IFN5YmFzZSwgSW5jLiBhbmQgb3RoZXJzLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwogICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAgKiB3aGljaCBpcyBhdmFpbGFibGUgYXQKQEAgLTI1LDcgKzI1LDcgQEAKIGltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwogaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkdyb3VwOwogaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhlbHAuV29ya2JlbmNoSGVscDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwogCiAvKioKICAqIERpYWxvZyB0aGF0IGxldHMgdGhlIHVzZXIgc2VsZWN0IGEgbmV3IFNRTCBTZXQgT3BlcmF0b3IuCkBAIC0xMDQsNyArMTA0LDcgQEAKIAkJR3JpZERhdGEgZ2QgPSBudWxsOwogCQkKICAgICAgICAgQ29tcG9zaXRlIGNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7Ci0gICAgICAgIFdvcmtiZW5jaEhlbHAuc2V0SGVscChjb21wb3NpdGUsIFNRTEJ1aWxkZXJDb250ZXh0SWRzLlNRTEJfQUREX1RBQkxFX0RJQUxPRyk7IC8vIFRPRE8KKyAgICAgICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChjb21wb3NpdGUsIFNRTEJ1aWxkZXJDb250ZXh0SWRzLlNRTEJfQUREX1RBQkxFX0RJQUxPRyk7IC8vIFRPRE8KICAgICAgICAgCiAgICAgICAgIEdyaWRMYXlvdXQgY29tcG9zaXRlTGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoMSwgdHJ1ZSk7CiAgICAgICAgIGNvbXBvc2l0ZS5zZXRMYXlvdXQoY29tcG9zaXRlTGF5b3V0KTsKZGlmZiAtLWdpdCBhL3BsdWdpbnMvc3FsdG9vbHMvb3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2RhdGF0b29scy9zcWx0b29scy9zcWxidWlsZGVyL2RpYWxvZ3MvQ2hhbmdlU3RhdGVtZW50VHlwZURpYWxvZy5qYXZhIGIvcGx1Z2lucy9zcWx0b29scy9vcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZGF0YXRvb2xzL3NxbHRvb2xzL3NxbGJ1aWxkZXIvZGlhbG9ncy9DaGFuZ2VTdGF0ZW1lbnRUeXBlRGlhbG9nLmphdmEKaW5kZXggODM3YzllZC4uODgxODJhZiAxMDA2NDQKLS0tIGEvcGx1Z2lucy9zcWx0b29scy9vcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZGF0YXRvb2xzL3NxbHRvb2xzL3NxbGJ1aWxkZXIvZGlhbG9ncy9DaGFuZ2VTdGF0ZW1lbnRUeXBlRGlhbG9nLmphdmEKKysrIGIvcGx1Z2lucy9zcWx0b29scy9vcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZGF0YXRvb2xzL3NxbHRvb2xzL3NxbGJ1aWxkZXIvZGlhbG9ncy9DaGFuZ2VTdGF0ZW1lbnRUeXBlRGlhbG9nLmphdmEKQEAgLTEsNSArMSw1IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IKkgMjAwMCwgMjAwNyBTeWJhc2UsIEluYy4gYW5kIG90aGVycy4KKyAqIENvcHlyaWdodCDvv70gMjAwMCwgMjAxOCBTeWJhc2UsIEluYy4gYW5kIG90aGVycy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAogICogd2hpY2ggaXMgYXZhaWxhYmxlIGF0CkBAIC0yNSw3ICsyNSw3IEBACiBpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuR3JvdXA7CiBpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7CiBpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaGVscC5Xb3JrYmVuY2hIZWxwOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7CiAKIC8qKgogICogRGlhbG9nIHRoYXQgbGV0cyB0aGUgdXNlciBzZWxlY3QgYSBuZXcgU1FMIHN0YXRlbWVudCB0eXBlLgpAQCAtOTksNyArOTksNyBAQAogCQlHcmlkRGF0YSBnZCA9IG51bGw7CiAJCQogICAgICAgICBDb21wb3NpdGUgY29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLSAgICAgICAgV29ya2JlbmNoSGVscC5zZXRIZWxwKGNvbXBvc2l0ZSwgU1FMQnVpbGRlckNvbnRleHRJZHMuU1FMQl9BRERfVEFCTEVfRElBTE9HKTsgLy8gVE9ETworICAgICAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKGNvbXBvc2l0ZSwgU1FMQnVpbGRlckNvbnRleHRJZHMuU1FMQl9BRERfVEFCTEVfRElBTE9HKTsgLy8gVE9ETwogICAgICAgICAKICAgICAgICAgR3JpZExheW91dCBjb21wb3NpdGVMYXlvdXQgPSBuZXcgR3JpZExheW91dCgxLCB0cnVlKTsKICAgICAgICAgY29tcG9zaXRlLnNldExheW91dChjb21wb3NpdGVMYXlvdXQpOwpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9zcWx0b29scy9vcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZGF0YXRvb2xzL3NxbHRvb2xzL3NxbGJ1aWxkZXIvZGlhbG9ncy9EZWZpbmVUeXBlQ29tcG9zaXRlLmphdmEgYi9wbHVnaW5zL3NxbHRvb2xzL29yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9kYXRhdG9vbHMvc3FsdG9vbHMvc3FsYnVpbGRlci9kaWFsb2dzL0RlZmluZVR5cGVDb21wb3NpdGUuamF2YQppbmRleCA1MTYyYzJhLi44NGEyZGE2IDEwMDY0NAotLS0gYS9wbHVnaW5zL3NxbHRvb2xzL29yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9kYXRhdG9vbHMvc3FsdG9vbHMvc3FsYnVpbGRlci9kaWFsb2dzL0RlZmluZVR5cGVDb21wb3NpdGUuamF2YQorKysgYi9wbHVnaW5zL3NxbHRvb2xzL29yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9kYXRhdG9vbHMvc3FsdG9vbHMvc3FsYnVpbGRlci9kaWFsb2dzL0RlZmluZVR5cGVDb21wb3NpdGUuamF2YQpAQCAtMSw1ICsxLDUgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgqSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQ29weXJpZ2h0IO+/vSAyMDAwLCAyMDE4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwogICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAgKiB3aGljaCBpcyBhdmFpbGFibGUgYXQKQEAgLTI1LDcgKzI1LDcgQEAKIGltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwogaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkdyb3VwOwogaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhlbHAuV29ya2JlbmNoSGVscDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwogCiAKIHB1YmxpYyBjbGFzcyBEZWZpbmVUeXBlQ29tcG9zaXRlIHsKQEAgLTM5LDcgKzM5LDcgQEAKIAogICAgIHB1YmxpYyBEZWZpbmVUeXBlQ29tcG9zaXRlKENvbXBvc2l0ZSBwYXJlbnQsIFNRTERvbWFpbk1vZGVsIGRvbWFpbk1vZGVsLCBpbnQgam9pbktpbmQpIHsKICAgICAgICAgdHlwZUNvbnRyb2xzID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OVUxMKTsKLSAgICAgICAgV29ya2JlbmNoSGVscC5zZXRIZWxwKHR5cGVDb250cm9scywgU1FMQnVpbGRlckNvbnRleHRJZHMuU1FMR19ERUZJTkVfSk9JTlRZUEVfRElBTE9HKTsKKyAgICAgICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscCh0eXBlQ29udHJvbHMsIFNRTEJ1aWxkZXJDb250ZXh0SWRzLlNRTEdfREVGSU5FX0pPSU5UWVBFX0RJQUxPRyk7CiAKICAgICAgICAgR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwogICAgICAgICBsYXlvdXQubnVtQ29sdW1ucyA9IDE7CkBAIC03MCwxMCArNzAsMTAgQEAKICAgICAgICAgZnVsbE91dGVySm9pblJhZGlvID0gVmlld1V0aWxpdHkuY3JlYXRlUmFkaW9CdXR0b24oYnV0dG9uR3JvdXAsIAogICAgICAgICAgICAgICAgIE1lc3NhZ2VzLl9VSV9SQURJT19GVUxMX09VVEVSX0pPSU4pOwogCi0gICAgICAgIFdvcmtiZW5jaEhlbHAuc2V0SGVscChpbm5lckpvaW5SYWRpbywgU1FMQnVpbGRlckNvbnRleHRJZHMuU1FMR19ERUZJTkVfSk9JTlRZUEVfRElBTE9HKTsKLSAgICAgICAgV29ya2JlbmNoSGVscC5zZXRIZWxwKGxlZnRPdXRlckpvaW5SYWRpbywgU1FMQnVpbGRlckNvbnRleHRJZHMuU1FMR19ERUZJTkVfSk9JTlRZUEVfRElBTE9HKTsKLSAgICAgICAgV29ya2JlbmNoSGVscC5zZXRIZWxwKHJpZ2h0T3V0ZXJKb2luUmFkaW8sIFNRTEJ1aWxkZXJDb250ZXh0SWRzLlNRTEdfREVGSU5FX0pPSU5UWVBFX0RJQUxPRyk7Ci0gICAgICAgIFdvcmtiZW5jaEhlbHAuc2V0SGVscChmdWxsT3V0ZXJKb2luUmFkaW8sIFNRTEJ1aWxkZXJDb250ZXh0SWRzLlNRTEdfREVGSU5FX0pPSU5UWVBFX0RJQUxPRyk7CisgICAgICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoaW5uZXJKb2luUmFkaW8sIFNRTEJ1aWxkZXJDb250ZXh0SWRzLlNRTEdfREVGSU5FX0pPSU5UWVBFX0RJQUxPRyk7CisgICAgICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAobGVmdE91dGVySm9pblJhZGlvLCBTUUxCdWlsZGVyQ29udGV4dElkcy5TUUxHX0RFRklORV9KT0lOVFlQRV9ESUFMT0cpOworICAgICAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHJpZ2h0T3V0ZXJKb2luUmFkaW8sIFNRTEJ1aWxkZXJDb250ZXh0SWRzLlNRTEdfREVGSU5FX0pPSU5UWVBFX0RJQUxPRyk7CisgICAgICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoZnVsbE91dGVySm9pblJhZGlvLCBTUUxCdWlsZGVyQ29udGV4dElkcy5TUUxHX0RFRklORV9KT0lOVFlQRV9ESUFMT0cpOwogCiAgICAgICAgIGlmIChkb21haW5Nb2RlbC5nZXRWZW5kb3IoKS5pc0RCMigpIHx8IGRvbWFpbk1vZGVsLmdldFZlbmRvcigpLmlzTVNTUUxTZXJ2ZXIoKSB8fCAKICAgICAgICAgICAgICAgICBkb21haW5Nb2RlbC5nZXRWZW5kb3IoKS5pc0luc3RhbnREQigpKSB7CmRpZmYgLS1naXQgYS9wbHVnaW5zL3NxbHRvb2xzL29yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9kYXRhdG9vbHMvc3FsdG9vbHMvc3FsYnVpbGRlci9kaWFsb2dzL09taXRDdXJyZW50U2NoZW1hRGlhbG9nLmphdmEgYi9wbHVnaW5zL3NxbHRvb2xzL29yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9kYXRhdG9vbHMvc3FsdG9vbHMvc3FsYnVpbGRlci9kaWFsb2dzL09taXRDdXJyZW50U2NoZW1hRGlhbG9nLmphdmEKaW5kZXggOTMzNmVkNC4uMDA3MjlmZSAxMDA2NDQKLS0tIGEvcGx1Z2lucy9zcWx0b29scy9vcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZGF0YXRvb2xzL3NxbHRvb2xzL3NxbGJ1aWxkZXIvZGlhbG9ncy9PbWl0Q3VycmVudFNjaGVtYURpYWxvZy5qYXZhCisrKyBiL3BsdWdpbnMvc3FsdG9vbHMvb3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2RhdGF0b29scy9zcWx0b29scy9zcWxidWlsZGVyL2RpYWxvZ3MvT21pdEN1cnJlbnRTY2hlbWFEaWFsb2cuamF2YQpAQCAtMSw1ICsxLDUgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgqSAyMDAwLCAyMDA3IFN5YmFzZSwgSW5jLiBhbmQgb3RoZXJzLgorICogQ29weXJpZ2h0IO+/vSAyMDAwLCAyMDE4IFN5YmFzZSwgSW5jLiBhbmQgb3RoZXJzLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwogICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAgKiB3aGljaCBpcyBhdmFpbGFibGUgYXQKQEAgLTI4LDcgKzI4LDcgQEAKIGltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Hcm91cDsKIGltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKIGltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhlbHAuV29ya2JlbmNoSGVscDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwogCiAvKioKICAqIERpYWxvZyB0aGF0IHNob3dzIHRoZSBzZXR0aW5ncyBmb3IgT21pdHRpbmcgb3IgSW5jbHVkaW5nIHRoZSBjdXJyZW50CkBAIC04OSw3ICs4OSw3IEBACiAJCUdyaWREYXRhIGdkID0gbnVsbDsKIAkJCiAgICAgICAgIENvbXBvc2l0ZSBjb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotICAgICAgICBXb3JrYmVuY2hIZWxwLnNldEhlbHAoY29tcG9zaXRlLCBTUUxCdWlsZGVyQ29udGV4dElkcy5TUUxCX0FERF9UQUJMRV9ESUFMT0cpOyAvLyBUT0RPCisgICAgICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoY29tcG9zaXRlLCBTUUxCdWlsZGVyQ29udGV4dElkcy5TUUxCX0FERF9UQUJMRV9ESUFMT0cpOyAvLyBUT0RPCiAgICAgICAgIAogICAgICAgICBHcmlkTGF5b3V0IGNvbXBvc2l0ZUxheW91dCA9IG5ldyBHcmlkTGF5b3V0KDEsIHRydWUpOwogICAgICAgICBjb21wb3NpdGUuc2V0TGF5b3V0KGNvbXBvc2l0ZUxheW91dCk7CmRpZmYgLS1naXQgYS9wbHVnaW5zL3NxbHRvb2xzL29yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9kYXRhdG9vbHMvc3FsdG9vbHMvc3FsYnVpbGRlci9kaWFsb2dzL1NvdXJjZVRhcmdldERpYWxvZy5qYXZhIGIvcGx1Z2lucy9zcWx0b29scy9vcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZGF0YXRvb2xzL3NxbHRvb2xzL3NxbGJ1aWxkZXIvZGlhbG9ncy9Tb3VyY2VUYXJnZXREaWFsb2cuamF2YQppbmRleCAyMjllNmJlLi5hZDViM2VlIDEwMDY0NAotLS0gYS9wbHVnaW5zL3NxbHRvb2xzL29yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9kYXRhdG9vbHMvc3FsdG9vbHMvc3FsYnVpbGRlci9kaWFsb2dzL1NvdXJjZVRhcmdldERpYWxvZy5qYXZhCisrKyBiL3BsdWdpbnMvc3FsdG9vbHMvb3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2RhdGF0b29scy9zcWx0b29scy9zcWxidWlsZGVyL2RpYWxvZ3MvU291cmNlVGFyZ2V0RGlhbG9nLmphdmEKQEAgLTEsNSArMSw1IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IKkgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIENvcHlyaWdodCDvv70gMjAwMCwgMjAxOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAogICogd2hpY2ggaXMgYXZhaWxhYmxlIGF0CkBAIC00MCw3ICs0MCw3IEBACiBpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7CiBpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTWVzc2FnZUJveDsKIGltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5oZWxwLldvcmtiZW5jaEhlbHA7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKIAogCiAvKioKQEAgLTIyMiw3ICsyMjIsNyBAQAogICAgIHB1YmxpYyBDb250cm9sIGNyZWF0ZURpYWxvZ0FyZWEoQ29tcG9zaXRlIHBhcmVudCkgewogICAgICAgICBDb21wb3NpdGUgY2xpZW50ID0gKENvbXBvc2l0ZSkgc3VwZXIuY3JlYXRlRGlhbG9nQXJlYShwYXJlbnQpOwogCi0gICAgICAgIFdvcmtiZW5jaEhlbHAuc2V0SGVscChjbGllbnQsIFNRTEJ1aWxkZXJDb250ZXh0SWRzLlNRTEdfQ1JFQVRFX0pPSU5fRElBTE9HKTsKKyAgICAgICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChjbGllbnQsIFNRTEJ1aWxkZXJDb250ZXh0SWRzLlNRTEdfQ1JFQVRFX0pPSU5fRElBTE9HKTsKICAgICAgICAgR3JpZExheW91dCBsYXlvdXQgPSAoR3JpZExheW91dCkgY2xpZW50LmdldExheW91dCgpOwogICAgICAgICBsYXlvdXQubnVtQ29sdW1ucyA9IDE7CiAgICAgICAgIGxheW91dC5tYWtlQ29sdW1uc0VxdWFsV2lkdGggPSB0cnVlOwpAQCAtMjM3LDEzICsyMzcsMTMgQEAKICAgICAgICAgVmlld1V0aWxpdHkuY3JlYXRlTGFiZWwoZ3JwMSwgCiAgICAgICAgICAgICAgICAgTWVzc2FnZXMuX1VJX0xBQkVMX1RBUkdFVF9UQUJMRSk7CiAgICAgICAgIHNyY1RhYmxlRmllbGQgPSBWaWV3VXRpbGl0eS5jcmVhdGVDb21ib0JveChncnAxKTsKLSAgICAgICAgV29ya2JlbmNoSGVscC5zZXRIZWxwKHNyY1RhYmxlRmllbGQsIAorICAgICAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHNyY1RhYmxlRmllbGQsIAogICAgICAgICAgICAgICAgIFNRTEJ1aWxkZXJDb250ZXh0SWRzLlNRTEdfQ1JFQVRFX0pPSU5fRElBTE9HKTsKIAogICAgICAgICBWaWV3VXRpbGl0eS5jcmVhdGVMYWJlbChncnAxLCAKICAgICAgICAgICAgICAgICBNZXNzYWdlcy5fVUlfTEFCRUxfQ09MVU1OKTsKICAgICAgICAgc3JjQ29sdW1uRmllbGQgPSBWaWV3VXRpbGl0eS5jcmVhdGVDb21ib0JveChncnAxKTsKLSAgICAgICAgV29ya2JlbmNoSGVscC5zZXRIZWxwKHNyY0NvbHVtbkZpZWxkLCAKKyAgICAgICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChzcmNDb2x1bW5GaWVsZCwgCiAgICAgICAgICAgICAgICAgU1FMQnVpbGRlckNvbnRleHRJZHMuU1FMR19DUkVBVEVfSk9JTl9ESUFMT0cpOwogCiAgICAgICAgIFZpZXdVdGlsaXR5LmNyZWF0ZUxhYmVsKGdycDEsIApAQCAtMjU0LDExICsyNTQsMTEgQEAKICAgICAgICAgICAgICAgICBNZXNzYWdlcy5fVUlfR1JPVVBfVEFSR0VULCBmYWxzZSk7CiAgICAgICAgIFZpZXdVdGlsaXR5LmNyZWF0ZUxhYmVsKGdycDIsIE1lc3NhZ2VzLl9VSV9MQUJFTF9UQUJMRSk7CiAgICAgICAgIHRndFRhYmxlRmllbGQgPSBWaWV3VXRpbGl0eS5jcmVhdGVDb21ib0JveChncnAyKTsKLSAgICAgICAgV29ya2JlbmNoSGVscC5zZXRIZWxwKHRndFRhYmxlRmllbGQsIFNRTEJ1aWxkZXJDb250ZXh0SWRzLlNRTEdfQ1JFQVRFX0pPSU5fRElBTE9HKTsKKyAgICAgICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscCh0Z3RUYWJsZUZpZWxkLCBTUUxCdWlsZGVyQ29udGV4dElkcy5TUUxHX0NSRUFURV9KT0lOX0RJQUxPRyk7CiAKICAgICAgICAgVmlld1V0aWxpdHkuY3JlYXRlTGFiZWwoZ3JwMiwgTWVzc2FnZXMuX1VJX0xBQkVMX1RBUkdFVF9DT0xVTU4pOwogICAgICAgICB0Z3RDb2x1bW5GaWVsZCA9IFZpZXdVdGlsaXR5LmNyZWF0ZUNvbWJvQm94KGdycDIpOwotICAgICAgICBXb3JrYmVuY2hIZWxwLnNldEhlbHAodGd0Q29sdW1uRmllbGQsIFNRTEJ1aWxkZXJDb250ZXh0SWRzLlNRTEdfQ1JFQVRFX0pPSU5fRElBTE9HKTsKKyAgICAgICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscCh0Z3RDb2x1bW5GaWVsZCwgU1FMQnVpbGRlckNvbnRleHRJZHMuU1FMR19DUkVBVEVfSk9JTl9ESUFMT0cpOwogCiAgICAgICAgIFZpZXdVdGlsaXR5LmNyZWF0ZUxhYmVsKGdycDIsIE1lc3NhZ2VzLl9VSV9MQUJFTF9KT0lOX1RHVENPTF9UWVBFKTsKICAgICAgICAgdGFyZ2V0VHlwZSA9IFZpZXdVdGlsaXR5LmNyZWF0ZUxhYmVsKGdycDIsICIiKTsKZGlmZiAtLWdpdCBhL3BsdWdpbnMvc3FsdG9vbHMvb3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2RhdGF0b29scy9zcWx0b29scy9zcWxidWlsZGVyL2V4cHJlc3Npb25idWlsZGVyL01haW5FeHByZXNzaW9uUGFnZS5qYXZhIGIvcGx1Z2lucy9zcWx0b29scy9vcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZGF0YXRvb2xzL3NxbHRvb2xzL3NxbGJ1aWxkZXIvZXhwcmVzc2lvbmJ1aWxkZXIvTWFpbkV4cHJlc3Npb25QYWdlLmphdmEKaW5kZXggNDk5Yjk5OC4uZjM2YjBhMCAxMDA2NDQKLS0tIGEvcGx1Z2lucy9zcWx0b29scy9vcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZGF0YXRvb2xzL3NxbHRvb2xzL3NxbGJ1aWxkZXIvZXhwcmVzc2lvbmJ1aWxkZXIvTWFpbkV4cHJlc3Npb25QYWdlLmphdmEKKysrIGIvcGx1Z2lucy9zcWx0b29scy9vcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZGF0YXRvb2xzL3NxbHRvb2xzL3NxbGJ1aWxkZXIvZXhwcmVzc2lvbmJ1aWxkZXIvTWFpbkV4cHJlc3Npb25QYWdlLmphdmEKQEAgLTEsNSArMSw1IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IKkgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIENvcHlyaWdodCDvv70gMjAwMCwgMjAxOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAogICogd2hpY2ggaXMgYXZhaWxhYmxlIGF0CkBAIC0yMyw3ICsyMyw3IEBACiBpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwogaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKIGltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaGVscC5Xb3JrYmVuY2hIZWxwOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7CiAKIAogcHVibGljIGNsYXNzIE1haW5FeHByZXNzaW9uUGFnZSBleHRlbmRzIFdpemFyZFBhZ2UgaW1wbGVtZW50cyBTZWxlY3Rpb25MaXN0ZW5lciB7CkBAIC02Miw3ICs2Miw3IEBACiAKICAgICBwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKICAgICAgICAgQ29tcG9zaXRlIG1haW5QYW5lbCA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7Ci0gICAgICAgIFdvcmtiZW5jaEhlbHAuc2V0SGVscChtYWluUGFuZWwsIFNRTEJ1aWxkZXJDb250ZXh0SWRzLlNRTEVfU0VMRUNUX1RZUEVfUEFHRSk7CisgICAgICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAobWFpblBhbmVsLCBTUUxCdWlsZGVyQ29udGV4dElkcy5TUUxFX1NFTEVDVF9UWVBFX1BBR0UpOwogICAgICAgICBHcmlkTGF5b3V0IG1haW5QYW5lbExheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7CiAgICAgICAgIG1haW5QYW5lbC5zZXRMYXlvdXQobWFpblBhbmVsTGF5b3V0KTsKIApkaWZmIC0tZ2l0IGEvcGx1Z2lucy9zcWx0b29scy9vcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZGF0YXRvb2xzL3NxbHRvb2xzL3NxbGJ1aWxkZXIvZXhwcmVzc2lvbmJ1aWxkZXIvY2FzZWV4cHIvQ2FzZU9wdGlvbnNQYWdlLmphdmEgYi9wbHVnaW5zL3NxbHRvb2xzL29yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9kYXRhdG9vbHMvc3FsdG9vbHMvc3FsYnVpbGRlci9leHByZXNzaW9uYnVpbGRlci9jYXNlZXhwci9DYXNlT3B0aW9uc1BhZ2UuamF2YQppbmRleCA5MjU0YjZjLi4yN2M2NjVlIDEwMDY0NAotLS0gYS9wbHVnaW5zL3NxbHRvb2xzL29yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9kYXRhdG9vbHMvc3FsdG9vbHMvc3FsYnVpbGRlci9leHByZXNzaW9uYnVpbGRlci9jYXNlZXhwci9DYXNlT3B0aW9uc1BhZ2UuamF2YQorKysgYi9wbHVnaW5zL3NxbHRvb2xzL29yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9kYXRhdG9vbHMvc3FsdG9vbHMvc3FsYnVpbGRlci9leHByZXNzaW9uYnVpbGRlci9jYXNlZXhwci9DYXNlT3B0aW9uc1BhZ2UuamF2YQpAQCAtMSw1ICsxLDUgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgqSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQ29weXJpZ2h0IO+/vSAyMDAwLCAyMDE4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwogICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAgKiB3aGljaCBpcyBhdmFpbGFibGUgYXQKQEAgLTI4LDcgKzI4LDcgQEAKIGltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CiBpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7CiBpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaGVscC5Xb3JrYmVuY2hIZWxwOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7CiAKIAogcHVibGljIGNsYXNzIENhc2VPcHRpb25zUGFnZSBleHRlbmRzIFdpemFyZFBhZ2UgaW1wbGVtZW50cyBTZWxlY3Rpb25MaXN0ZW5lciB7CkBAIC01Niw3ICs1Niw3IEBACiAKICAgICBwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKICAgICAgICAgbWFpblBhbmVsID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLSAgICAgICAgV29ya2JlbmNoSGVscC5zZXRIZWxwKG1haW5QYW5lbCwgU1FMQnVpbGRlckNvbnRleHRJZHMuU1FMRV9DQVNFX09QVElPTlNfUEFHRSk7CisgICAgICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAobWFpblBhbmVsLCBTUUxCdWlsZGVyQ29udGV4dElkcy5TUUxFX0NBU0VfT1BUSU9OU19QQUdFKTsKICAgICAgICAgR3JpZExheW91dCBtYWluUGFuZWxMYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwogICAgICAgICBtYWluUGFuZWwuc2V0TGF5b3V0KG1haW5QYW5lbExheW91dCk7CiAgICAgICAgIG1haW5QYW5lbC5zZXRMYXlvdXREYXRhKFZpZXdVdGlsaXR5LmNyZWF0ZUZpbGwoKSk7CmRpZmYgLS1naXQgYS9wbHVnaW5zL3NxbHRvb2xzL29yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9kYXRhdG9vbHMvc3FsdG9vbHMvc3FsYnVpbGRlci9leHByZXNzaW9uYnVpbGRlci9jYXNlZXhwci9DYXNlU2VhcmNoUGFnZS5qYXZhIGIvcGx1Z2lucy9zcWx0b29scy9vcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZGF0YXRvb2xzL3NxbHRvb2xzL3NxbGJ1aWxkZXIvZXhwcmVzc2lvbmJ1aWxkZXIvY2FzZWV4cHIvQ2FzZVNlYXJjaFBhZ2UuamF2YQppbmRleCBhZGI5YjQxLi41MjA0ZDU1IDEwMDY0NAotLS0gYS9wbHVnaW5zL3NxbHRvb2xzL29yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9kYXRhdG9vbHMvc3FsdG9vbHMvc3FsYnVpbGRlci9leHByZXNzaW9uYnVpbGRlci9jYXNlZXhwci9DYXNlU2VhcmNoUGFnZS5qYXZhCisrKyBiL3BsdWdpbnMvc3FsdG9vbHMvb3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2RhdGF0b29scy9zcWx0b29scy9zcWxidWlsZGVyL2V4cHJlc3Npb25idWlsZGVyL2Nhc2VleHByL0Nhc2VTZWFyY2hQYWdlLmphdmEKQEAgLTEsNSArMSw1IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IKkgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIENvcHlyaWdodCDvv70gMjAwMCwgMjAxOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAogICogd2hpY2ggaXMgYXZhaWxhYmxlIGF0CkBAIC0zOCw3ICszOCw3IEBACiBpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwogaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7CiBpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaGVscC5Xb3JrYmVuY2hIZWxwOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7CiAKIAogcHVibGljIGNsYXNzIENhc2VTZWFyY2hQYWdlIGV4dGVuZHMgV2l6YXJkUGFnZSBpbXBsZW1lbnRzIFNlbGVjdGlvbkxpc3RlbmVyIHsKQEAgLTc0LDcgKzc0LDcgQEAKIAogICAgIHB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgewogICAgICAgICBDb21wb3NpdGUgbWFpblBhbmVsID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLSAgICAgICAgV29ya2JlbmNoSGVscC5zZXRIZWxwKG1haW5QYW5lbCwgU1FMQnVpbGRlckNvbnRleHRJZHMuU1FMRV9TRUFSQ0hfVFlQRV9QQUdFKTsKKyAgICAgICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChtYWluUGFuZWwsIFNRTEJ1aWxkZXJDb250ZXh0SWRzLlNRTEVfU0VBUkNIX1RZUEVfUEFHRSk7CiAgICAgICAgIEdyaWRMYXlvdXQgbWFpblBhbmVsTGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKICAgICAgICAgbWFpblBhbmVsLnNldExheW91dChtYWluUGFuZWxMYXlvdXQpOwogICAgICAgICBtYWluUGFuZWwuc2V0TGF5b3V0RGF0YShWaWV3VXRpbGl0eS5jcmVhdGVGaWxsKCkpOwpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9zcWx0b29scy9vcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZGF0YXRvb2xzL3NxbHRvb2xzL3NxbGJ1aWxkZXIvZXhwcmVzc2lvbmJ1aWxkZXIvY2FzZWV4cHIvQ2FzZVNpbXBsZVBhZ2UuamF2YSBiL3BsdWdpbnMvc3FsdG9vbHMvb3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2RhdGF0b29scy9zcWx0b29scy9zcWxidWlsZGVyL2V4cHJlc3Npb25idWlsZGVyL2Nhc2VleHByL0Nhc2VTaW1wbGVQYWdlLmphdmEKaW5kZXggYmI2YTVhYS4uOTcxMWUyMCAxMDA2NDQKLS0tIGEvcGx1Z2lucy9zcWx0b29scy9vcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZGF0YXRvb2xzL3NxbHRvb2xzL3NxbGJ1aWxkZXIvZXhwcmVzc2lvbmJ1aWxkZXIvY2FzZWV4cHIvQ2FzZVNpbXBsZVBhZ2UuamF2YQorKysgYi9wbHVnaW5zL3NxbHRvb2xzL29yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9kYXRhdG9vbHMvc3FsdG9vbHMvc3FsYnVpbGRlci9leHByZXNzaW9uYnVpbGRlci9jYXNlZXhwci9DYXNlU2ltcGxlUGFnZS5qYXZhCkBAIC0xLDUgKzEsNSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNywgMjAxOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAxOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAogICogd2hpY2ggaXMgYXZhaWxhYmxlIGF0CkBAIC02MCw3ICs2MCw3IEBACiBpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKIGltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKIGltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhlbHAuV29ya2JlbmNoSGVscDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwogCiAKIHB1YmxpYyBjbGFzcyBDYXNlU2ltcGxlUGFnZSBleHRlbmRzIFdpemFyZFBhZ2UgaW1wbGVtZW50cyBTZWxlY3Rpb25MaXN0ZW5lciB7CkBAIC0xMDcsNyArMTA3LDcgQEAKIAogICAgIHB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgewogICAgICAgICBDb21wb3NpdGUgbWFpblBhbmVsID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLSAgICAgICAgV29ya2JlbmNoSGVscC5zZXRIZWxwKG1haW5QYW5lbCwgU1FMQnVpbGRlckNvbnRleHRJZHMuU1FMRV9TSU1QTEVfVFlQRV9QQUdFKTsKKyAgICAgICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChtYWluUGFuZWwsIFNRTEJ1aWxkZXJDb250ZXh0SWRzLlNRTEVfU0lNUExFX1RZUEVfUEFHRSk7CiAgICAgICAgIEdyaWRMYXlvdXQgbWFpblBhbmVsTGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKICAgICAgICAgbWFpblBhbmVsLnNldExheW91dChtYWluUGFuZWxMYXlvdXQpOwogICAgICAgICBtYWluUGFuZWwuc2V0TGF5b3V0RGF0YShWaWV3VXRpbGl0eS5jcmVhdGVGaWxsKCkpOwpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9zcWx0b29scy9vcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZGF0YXRvb2xzL3NxbHRvb2xzL3NxbGJ1aWxkZXIvZXhwcmVzc2lvbmJ1aWxkZXIvY2FzdC9DYXN0QnVpbGRlclBhZ2UuamF2YSBiL3BsdWdpbnMvc3FsdG9vbHMvb3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2RhdGF0b29scy9zcWx0b29scy9zcWxidWlsZGVyL2V4cHJlc3Npb25idWlsZGVyL2Nhc3QvQ2FzdEJ1aWxkZXJQYWdlLmphdmEKaW5kZXggNTYyYjlhYy4uYjkwODdhMSAxMDA2NDQKLS0tIGEvcGx1Z2lucy9zcWx0b29scy9vcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZGF0YXRvb2xzL3NxbHRvb2xzL3NxbGJ1aWxkZXIvZXhwcmVzc2lvbmJ1aWxkZXIvY2FzdC9DYXN0QnVpbGRlclBhZ2UuamF2YQorKysgYi9wbHVnaW5zL3NxbHRvb2xzL29yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9kYXRhdG9vbHMvc3FsdG9vbHMvc3FsYnVpbGRlci9leHByZXNzaW9uYnVpbGRlci9jYXN0L0Nhc3RCdWlsZGVyUGFnZS5qYXZhCkBAIC0xLDUgKzEsNSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCCpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBDb3B5cmlnaHQg77+9IDIwMDAsIDIwMTggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCiAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKICAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdApAQCAtNDMsNyArNDMsNyBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKIGltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKIGltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhlbHAuV29ya2JlbmNoSGVscDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwogCiAKIHB1YmxpYyBjbGFzcyBDYXN0QnVpbGRlclBhZ2UgZXh0ZW5kcyBXaXphcmRQYWdlIGltcGxlbWVudHMgU2VsZWN0aW9uTGlzdGVuZXIsIEtleUxpc3RlbmVyIHsKQEAgLTg2LDcgKzg2LDcgQEAKIAogICAgIHB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgewogICAgICAgICBtYWluUGFuZWwgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotICAgICAgICBXb3JrYmVuY2hIZWxwLnNldEhlbHAobWFpblBhbmVsLCBTUUxCdWlsZGVyQ29udGV4dElkcy5TUUxFX0NBU1RfQlVJTERFUl9QQUdFKTsKKyAgICAgICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChtYWluUGFuZWwsIFNRTEJ1aWxkZXJDb250ZXh0SWRzLlNRTEVfQ0FTVF9CVUlMREVSX1BBR0UpOwogICAgICAgICBHcmlkTGF5b3V0IG1haW5QYW5lbExheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7CiAgICAgICAgIG1haW5QYW5lbC5zZXRMYXlvdXQobWFpblBhbmVsTGF5b3V0KTsKICAgICAgICAgbWFpblBhbmVsLnNldExheW91dERhdGEoVmlld1V0aWxpdHkuY3JlYXRlRmlsbCgpKTsKZGlmZiAtLWdpdCBhL3BsdWdpbnMvc3FsdG9vbHMvb3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2RhdGF0b29scy9zcWx0b29scy9zcWxidWlsZGVyL2V4cHJlc3Npb25idWlsZGVyL2NvbnN0YW50L0NvbnN0YW50T3B0aW9uc1BhZ2UuamF2YSBiL3BsdWdpbnMvc3FsdG9vbHMvb3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2RhdGF0b29scy9zcWx0b29scy9zcWxidWlsZGVyL2V4cHJlc3Npb25idWlsZGVyL2NvbnN0YW50L0NvbnN0YW50T3B0aW9uc1BhZ2UuamF2YQppbmRleCAyZGY4MTE0Li4wNmFhNmViIDEwMDY0NAotLS0gYS9wbHVnaW5zL3NxbHRvb2xzL29yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9kYXRhdG9vbHMvc3FsdG9vbHMvc3FsYnVpbGRlci9leHByZXNzaW9uYnVpbGRlci9jb25zdGFudC9Db25zdGFudE9wdGlvbnNQYWdlLmphdmEKKysrIGIvcGx1Z2lucy9zcWx0b29scy9vcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZGF0YXRvb2xzL3NxbHRvb2xzL3NxbGJ1aWxkZXIvZXhwcmVzc2lvbmJ1aWxkZXIvY29uc3RhbnQvQ29uc3RhbnRPcHRpb25zUGFnZS5qYXZhCkBAIC0xLDUgKzEsNSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCCpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBDb3B5cmlnaHQg77+9IDIwMDAsIDIwMTggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCiAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKICAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdApAQCAtMjUsNyArMjUsNyBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKIGltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CiBpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaGVscC5Xb3JrYmVuY2hIZWxwOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7CiAKIAogcHVibGljIGNsYXNzIENvbnN0YW50T3B0aW9uc1BhZ2UgZXh0ZW5kcyBXaXphcmRQYWdlIGltcGxlbWVudHMgU2VsZWN0aW9uTGlzdGVuZXIgewpAQCAtNTMsNyArNTMsNyBAQAogCiAgICAgcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7CiAgICAgICAgIG1haW5QYW5lbCA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7Ci0gICAgICAgIFdvcmtiZW5jaEhlbHAuc2V0SGVscChtYWluUGFuZWwsIFNRTEJ1aWxkZXJDb250ZXh0SWRzLlNRTEVfQ09OU1RBTlRfT1BUSU9OU19QQUdFKTsKKyAgICAgICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChtYWluUGFuZWwsIFNRTEJ1aWxkZXJDb250ZXh0SWRzLlNRTEVfQ09OU1RBTlRfT1BUSU9OU19QQUdFKTsKICAgICAgICAgR3JpZExheW91dCBtYWluUGFuZWxMYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwogICAgICAgICBtYWluUGFuZWwuc2V0TGF5b3V0KG1haW5QYW5lbExheW91dCk7CiAgICAgICAgIG1haW5QYW5lbC5zZXRMYXlvdXREYXRhKFZpZXdVdGlsaXR5LmNyZWF0ZUZpbGwoKSk7CmRpZmYgLS1naXQgYS9wbHVnaW5zL3NxbHRvb2xzL29yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9kYXRhdG9vbHMvc3FsdG9vbHMvc3FsYnVpbGRlci9leHByZXNzaW9uYnVpbGRlci9jb25zdGFudC9TdHJpbmdDb25zdGFudEJ1aWxkZXJQYWdlLmphdmEgYi9wbHVnaW5zL3NxbHRvb2xzL29yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9kYXRhdG9vbHMvc3FsdG9vbHMvc3FsYnVpbGRlci9leHByZXNzaW9uYnVpbGRlci9jb25zdGFudC9TdHJpbmdDb25zdGFudEJ1aWxkZXJQYWdlLmphdmEKaW5kZXggOWE2YmEzNS4uNDk5ZjkwNCAxMDA2NDQKLS0tIGEvcGx1Z2lucy9zcWx0b29scy9vcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZGF0YXRvb2xzL3NxbHRvb2xzL3NxbGJ1aWxkZXIvZXhwcmVzc2lvbmJ1aWxkZXIvY29uc3RhbnQvU3RyaW5nQ29uc3RhbnRCdWlsZGVyUGFnZS5qYXZhCisrKyBiL3BsdWdpbnMvc3FsdG9vbHMvb3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2RhdGF0b29scy9zcWx0b29scy9zcWxidWlsZGVyL2V4cHJlc3Npb25idWlsZGVyL2NvbnN0YW50L1N0cmluZ0NvbnN0YW50QnVpbGRlclBhZ2UuamF2YQpAQCAtMSw1ICsxLDUgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgqSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQ29weXJpZ2h0IO+/vSAyMDAwLCAyMDE4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwogICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAgKiB3aGljaCBpcyBhdmFpbGFibGUgYXQKQEAgLTMyLDcgKzMyLDcgQEAKIGltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Hcm91cDsKIGltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKIGltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhlbHAuV29ya2JlbmNoSGVscDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwogCiAKIHB1YmxpYyBjbGFzcyBTdHJpbmdDb25zdGFudEJ1aWxkZXJQYWdlIGV4dGVuZHMgV2l6YXJkUGFnZSBpbXBsZW1lbnRzIFNlbGVjdGlvbkxpc3RlbmVyLCBLZXlMaXN0ZW5lciB7CkBAIC03OSw3ICs3OSw3IEBACiAKICAgICBwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKICAgICAgICAgQ29tcG9zaXRlIG1haW5QYW5lbCA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7Ci0gICAgICAgIFdvcmtiZW5jaEhlbHAuc2V0SGVscChtYWluUGFuZWwsIFNRTEJ1aWxkZXJDb250ZXh0SWRzLlNRTEVfU1RSSU5HX0NPTlNUQU5UX1BBR0UpOworICAgICAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKG1haW5QYW5lbCwgU1FMQnVpbGRlckNvbnRleHRJZHMuU1FMRV9TVFJJTkdfQ09OU1RBTlRfUEFHRSk7CiAgICAgICAgIEdyaWRMYXlvdXQgbWFpblBhbmVsTGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKICAgICAgICAgbWFpblBhbmVsLnNldExheW91dChtYWluUGFuZWxMYXlvdXQpOwogICAgICAgICBtYWluUGFuZWwuc2V0TGF5b3V0RGF0YShWaWV3VXRpbGl0eS5jcmVhdGVGaWxsKCkpOwpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9zcWx0b29scy9vcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZGF0YXRvb2xzL3NxbHRvb2xzL3NxbGJ1aWxkZXIvZXhwcmVzc2lvbmJ1aWxkZXIvZnVuY3Rpb24vRnVuY3Rpb25CdWlsZGVyUGFnZS5qYXZhIGIvcGx1Z2lucy9zcWx0b29scy9vcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZGF0YXRvb2xzL3NxbHRvb2xzL3NxbGJ1aWxkZXIvZXhwcmVzc2lvbmJ1aWxkZXIvZnVuY3Rpb24vRnVuY3Rpb25CdWlsZGVyUGFnZS5qYXZhCmluZGV4IGEzNmIyYTAuLmU2MGMyMDMgMTAwNjQ0Ci0tLSBhL3BsdWdpbnMvc3FsdG9vbHMvb3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2RhdGF0b29scy9zcWx0b29scy9zcWxidWlsZGVyL2V4cHJlc3Npb25idWlsZGVyL2Z1bmN0aW9uL0Z1bmN0aW9uQnVpbGRlclBhZ2UuamF2YQorKysgYi9wbHVnaW5zL3NxbHRvb2xzL29yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9kYXRhdG9vbHMvc3FsdG9vbHMvc3FsYnVpbGRlci9leHByZXNzaW9uYnVpbGRlci9mdW5jdGlvbi9GdW5jdGlvbkJ1aWxkZXJQYWdlLmphdmEKQEAgLTEsNSArMSw1IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IKkgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIENvcHlyaWdodCDvv70gMjAwMCwgMjAxOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAogICogd2hpY2ggaXMgYXZhaWxhYmxlIGF0CkBAIC00Nyw3ICs0Nyw3IEBACiBpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7CiBpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7CiBpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5oZWxwLldvcmtiZW5jaEhlbHA7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKIAogCiBwdWJsaWMgY2xhc3MgRnVuY3Rpb25CdWlsZGVyUGFnZSBleHRlbmRzIFdpemFyZFBhZ2UgaW1wbGVtZW50cyBTZWxlY3Rpb25MaXN0ZW5lciB7CkBAIC0xMDAsNyArMTAwLDcgQEAKIAogICAgIHB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgewogICAgICAgICBDb21wb3NpdGUgbWFpblBhbmVsID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLSAgICAgICAgV29ya2JlbmNoSGVscC5zZXRIZWxwKG1haW5QYW5lbCwgU1FMQnVpbGRlckNvbnRleHRJZHMuU1FMRV9GVU5DVElPTl9CVUlMREVSX1BBR0UpOworICAgICAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKG1haW5QYW5lbCwgU1FMQnVpbGRlckNvbnRleHRJZHMuU1FMRV9GVU5DVElPTl9CVUlMREVSX1BBR0UpOwogICAgICAgICBHcmlkTGF5b3V0IG1haW5QYW5lbExheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7CiAgICAgICAgIG1haW5QYW5lbC5zZXRMYXlvdXQobWFpblBhbmVsTGF5b3V0KTsKICAgICAgICAgbWFpblBhbmVsLnNldExheW91dERhdGEoVmlld1V0aWxpdHkuY3JlYXRlRmlsbCgpKTsKZGlmZiAtLWdpdCBhL3BsdWdpbnMvc3FsdG9vbHMvb3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2RhdGF0b29scy9zcWx0b29scy9zcWxidWlsZGVyL2V4cHJlc3Npb25idWlsZGVyL211bHRpZXhwci9FeHByZXNzaW9uc0J5T3BlcmF0b3JzUGFnZS5qYXZhIGIvcGx1Z2lucy9zcWx0b29scy9vcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZGF0YXRvb2xzL3NxbHRvb2xzL3NxbGJ1aWxkZXIvZXhwcmVzc2lvbmJ1aWxkZXIvbXVsdGlleHByL0V4cHJlc3Npb25zQnlPcGVyYXRvcnNQYWdlLmphdmEKaW5kZXggN2E3OTQwNS4uMjJiNGQ1YyAxMDA2NDQKLS0tIGEvcGx1Z2lucy9zcWx0b29scy9vcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZGF0YXRvb2xzL3NxbHRvb2xzL3NxbGJ1aWxkZXIvZXhwcmVzc2lvbmJ1aWxkZXIvbXVsdGlleHByL0V4cHJlc3Npb25zQnlPcGVyYXRvcnNQYWdlLmphdmEKKysrIGIvcGx1Z2lucy9zcWx0b29scy9vcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZGF0YXRvb2xzL3NxbHRvb2xzL3NxbGJ1aWxkZXIvZXhwcmVzc2lvbmJ1aWxkZXIvbXVsdGlleHByL0V4cHJlc3Npb25zQnlPcGVyYXRvcnNQYWdlLmphdmEKQEAgLTEsNSArMSw1IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IKkgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIENvcHlyaWdodCDvv70gMjAwMCwgMjAxOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAogICogd2hpY2ggaXMgYXZhaWxhYmxlIGF0CkBAIC0yNyw3ICsyNyw3IEBACiBpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwogaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwogaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaGVscC5Xb3JrYmVuY2hIZWxwOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7CiAKIAogcHVibGljIGNsYXNzIEV4cHJlc3Npb25zQnlPcGVyYXRvcnNQYWdlIGV4dGVuZHMgV2l6YXJkUGFnZSBpbXBsZW1lbnRzIFNlbGVjdGlvbkxpc3RlbmVyIHsKQEAgLTYyLDcgKzYyLDcgQEAKIAogICAgIHB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgewogICAgICAgICBDb21wb3NpdGUgbWFpblBhbmVsID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLSAgICAgICAgV29ya2JlbmNoSGVscC5zZXRIZWxwKG1haW5QYW5lbCwgU1FMQnVpbGRlckNvbnRleHRJZHMuU1FMRV9FWFBSRVNTSU9OU19CWV9PUEVSQVRPUl9QQUdFKTsKKyAgICAgICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChtYWluUGFuZWwsIFNRTEJ1aWxkZXJDb250ZXh0SWRzLlNRTEVfRVhQUkVTU0lPTlNfQllfT1BFUkFUT1JfUEFHRSk7CiAgICAgICAgIEdyaWRMYXlvdXQgbWFpblBhbmVsTGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKICAgICAgICAgbWFpblBhbmVsLnNldExheW91dChtYWluUGFuZWxMYXlvdXQpOwogICAgICAgICBtYWluUGFuZWwuc2V0TGF5b3V0RGF0YShWaWV3VXRpbGl0eS5jcmVhdGVGaWxsKCkpOwpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9zcWx0b29scy9vcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZGF0YXRvb2xzL3NxbHRvb2xzL3NxbGJ1aWxkZXIvZXhwcmVzc2lvbmJ1aWxkZXIvc3VicXVlcnkvU3ViUXVlcnlQYWdlLmphdmEgYi9wbHVnaW5zL3NxbHRvb2xzL29yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9kYXRhdG9vbHMvc3FsdG9vbHMvc3FsYnVpbGRlci9leHByZXNzaW9uYnVpbGRlci9zdWJxdWVyeS9TdWJRdWVyeVBhZ2UuamF2YQppbmRleCAxOGM1ZTY2Li4yOTQxMWM5IDEwMDY0NAotLS0gYS9wbHVnaW5zL3NxbHRvb2xzL29yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9kYXRhdG9vbHMvc3FsdG9vbHMvc3FsYnVpbGRlci9leHByZXNzaW9uYnVpbGRlci9zdWJxdWVyeS9TdWJRdWVyeVBhZ2UuamF2YQorKysgYi9wbHVnaW5zL3NxbHRvb2xzL29yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9kYXRhdG9vbHMvc3FsdG9vbHMvc3FsYnVpbGRlci9leHByZXNzaW9uYnVpbGRlci9zdWJxdWVyeS9TdWJRdWVyeVBhZ2UuamF2YQpAQCAtMSw1ICsxLDUgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgqSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQ29weXJpZ2h0IO+/vSAyMDAwLCAyMDE4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwogICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAgKiB3aGljaCBpcyBhdmFpbGFibGUgYXQKQEAgLTQ3LDcgKzQ3LDcgQEAKIGltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudDsKIGltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKIGltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhlbHAuV29ya2JlbmNoSGVscDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwogaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuUGFnZUJvb2s7CiAKIApAQCAtODAsNyArODAsNyBAQAogCiAgICAgcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7CiAgICAgICAgIG1haW5QYW5lbCA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7Ci0gICAgICAgIFdvcmtiZW5jaEhlbHAuc2V0SGVscChtYWluUGFuZWwsIFNRTEJ1aWxkZXJDb250ZXh0SWRzLlNRTEVfU1VCUVVFUllfUEFHRSk7CisgICAgICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAobWFpblBhbmVsLCBTUUxCdWlsZGVyQ29udGV4dElkcy5TUUxFX1NVQlFVRVJZX1BBR0UpOwogICAgICAgICBHcmlkTGF5b3V0IG1haW5QYW5lbExheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7CiAgICAgICAgIG1haW5QYW5lbC5zZXRMYXlvdXQobWFpblBhbmVsTGF5b3V0KTsKICAgICAgICAgbWFpblBhbmVsLnNldExheW91dERhdGEoVmlld1V0aWxpdHkuY3JlYXRlRmlsbCgpKTsKZGlmZiAtLWdpdCBhL3BsdWdpbnMvc3FsdG9vbHMvb3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2RhdGF0b29scy9zcWx0b29scy9zcWxidWlsZGVyL3ZpZXdzL0Rlc2lnblZpZXdlci5qYXZhIGIvcGx1Z2lucy9zcWx0b29scy9vcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZGF0YXRvb2xzL3NxbHRvb2xzL3NxbGJ1aWxkZXIvdmlld3MvRGVzaWduVmlld2VyLmphdmEKaW5kZXggM2FkMDE1ZS4uMTE0OGJiNiAxMDA2NDQKLS0tIGEvcGx1Z2lucy9zcWx0b29scy9vcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZGF0YXRvb2xzL3NxbHRvb2xzL3NxbGJ1aWxkZXIvdmlld3MvRGVzaWduVmlld2VyLmphdmEKKysrIGIvcGx1Z2lucy9zcWx0b29scy9vcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZGF0YXRvb2xzL3NxbHRvb2xzL3NxbGJ1aWxkZXIvdmlld3MvRGVzaWduVmlld2VyLmphdmEKQEAgLTEsNSArMSw1IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IKkgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIENvcHlyaWdodCDvv70gMjAwMCwgMjAxOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAogICogd2hpY2ggaXMgYXZhaWxhYmxlIGF0CkBAIC0xMiwxMSArMTIsNiBAQAogCiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiAKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhlbHAuV29ya2JlbmNoSGVscDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LlBhZ2VCb29rOwogaW1wb3J0IG9yZy5lY2xpcHNlLmRhdGF0b29scy5tb2RlbGJhc2Uuc3FsLnF1ZXJ5LlF1ZXJ5Q29tYmluZWQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UuZGF0YXRvb2xzLm1vZGVsYmFzZS5zcWwucXVlcnkuUXVlcnlEZWxldGVTdGF0ZW1lbnQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UuZGF0YXRvb2xzLm1vZGVsYmFzZS5zcWwucXVlcnkuUXVlcnlFeHByZXNzaW9uQm9keTsKQEAgLTM5LDYgKzM0LDExIEBACiBpbXBvcnQgb3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGJ1aWxkZXIudmlld3MudXBkYXRlLlVwZGF0ZVZpZXdlcjsKIGltcG9ydCBvcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsYnVpbGRlci52aWV3cy53aXRoLldpdGhTdGF0ZW1lbnRWaWV3ZXI7CiBpbXBvcnQgb3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGJ1aWxkZXIudmlld3Mud2l0aC5XaXRoVGFibGVWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuUGFnZUJvb2s7CiAKIC8qKgogICogRGVzaWduIFBhbmUgCkBAIC0xMjIsMTcgKzEyMiwxNyBAQAogICAgICAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBRdWVyeUluc2VydFN0YXRlbWVudCkgewogICAgICAgICAgICAgc2hvd1BhZ2UoaW5zZXJ0Vmlld2VyLmdldENvbnRyb2woKSk7ICAgICAgICAgICAgCiAgICAgICAgICAgICBpbnNlcnRWaWV3ZXIuc2V0SW5wdXQoaW5wdXQpOwotICAgICAgICAgICAgV29ya2JlbmNoSGVscC5zZXRIZWxwKGdldFBhcmVudCgpLCBTUUxCdWlsZGVyQ29udGV4dElkcy5TUUxCX0lOU0VSVF9WSUVXKTsKKyAgICAgICAgICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoZ2V0UGFyZW50KCksIFNRTEJ1aWxkZXJDb250ZXh0SWRzLlNRTEJfSU5TRVJUX1ZJRVcpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGlucHV0IGluc3RhbmNlb2YgUXVlcnlVcGRhdGVTdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIHNob3dQYWdlKHVwZGF0ZVZpZXdlci5nZXRDb250cm9sKCkpOyAgICAgICAgICAgIAogICAgICAgICAgICAgdXBkYXRlVmlld2VyLnNldElucHV0KGlucHV0KTsKLSAgICAgICAgICAgIFdvcmtiZW5jaEhlbHAuc2V0SGVscChnZXRQYXJlbnQoKSwgU1FMQnVpbGRlckNvbnRleHRJZHMuU1FMQl9VUERBVEVfVklFVyk7CisgICAgICAgICAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKGdldFBhcmVudCgpLCBTUUxCdWlsZGVyQ29udGV4dElkcy5TUUxCX1VQREFURV9WSUVXKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChpbnB1dCBpbnN0YW5jZW9mIFF1ZXJ5RGVsZXRlU3RhdGVtZW50KSB7CiAgICAgICAgICAgICBzaG93UGFnZShkZWxldGVWaWV3ZXIuZ2V0Q29udHJvbCgpKTsgICAgICAgICAgICAKICAgICAgICAgICAgIGRlbGV0ZVZpZXdlci5zZXRJbnB1dChpbnB1dCk7Ci0gICAgICAgICAgICBXb3JrYmVuY2hIZWxwLnNldEhlbHAoZ2V0UGFyZW50KCksIFNRTEJ1aWxkZXJDb250ZXh0SWRzLlNRTEJfREVMRVRFX1ZJRVcpOworICAgICAgICAgICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChnZXRQYXJlbnQoKSwgU1FMQnVpbGRlckNvbnRleHRJZHMuU1FMQl9ERUxFVEVfVklFVyk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoaW5wdXQgaW5zdGFuY2VvZiBRdWVyeVNlbGVjdFN0YXRlbWVudCkgewogICAgICAgICAgICAgUXVlcnlFeHByZXNzaW9uQm9keSBxdWVyeUJvZHkgPSBTZWxlY3RIZWxwZXIuZ2V0UXVlcnlFeHByZXNzaW9uQm9keSgoUXVlcnlTZWxlY3RTdGF0ZW1lbnQpIGlucHV0KTsKQEAgLTE0NCw1NCArMTQ0LDU0IEBACiAgICAgICAgICAgICAgICAgTGlzdCB3aXRoQ2xhdXNlID0gc3FsU2VsZWN0U3RhdGVtZW50LmdldFF1ZXJ5RXhwcigpLmdldFdpdGhDbGF1c2UoKTsKICAgICAgICAgICAgICAgICBpZih3aXRoQ2xhdXNlLmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFdvcmtiZW5jaEhlbHAuc2V0SGVscChnZXRQYXJlbnQoKSwgU1FMQnVpbGRlckNvbnRleHRJZHMuU1FMQl9TRUxFQ1RfVklFVyk7CisgICAgICAgICAgICAgICAgCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoZ2V0UGFyZW50KCksIFNRTEJ1aWxkZXJDb250ZXh0SWRzLlNRTEJfU0VMRUNUX1ZJRVcpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBXb3JrYmVuY2hIZWxwLnNldEhlbHAoZ2V0UGFyZW50KCksIFNRTEJ1aWxkZXJDb250ZXh0SWRzLlNRTEJfV0lUSF9TVEFURU1FTlRfVklFVyk7CisgICAgICAgICAgICAgICAgCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoZ2V0UGFyZW50KCksIFNRTEJ1aWxkZXJDb250ZXh0SWRzLlNRTEJfV0lUSF9TVEFURU1FTlRfVklFVyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBpZiAocXVlcnlCb2R5IGluc3RhbmNlb2YgUXVlcnlDb21iaW5lZCkgewogICAgICAgICAgICAgICAgIHNob3dQYWdlKGZ1bGxTZWxlY3QpOyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBmdWxsU2VsZWN0Vmlld2VyLnNldElucHV0KHF1ZXJ5Qm9keSk7Ci0gICAgICAgICAgICAgICAgV29ya2JlbmNoSGVscC5zZXRIZWxwKGdldFBhcmVudCgpLCBTUUxCdWlsZGVyQ29udGV4dElkcy5TUUxCX0ZVTExfU0VMRUNUX1ZJRVcpOworICAgICAgICAgICAgICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoZ2V0UGFyZW50KCksIFNRTEJ1aWxkZXJDb250ZXh0SWRzLlNRTEJfRlVMTF9TRUxFQ1RfVklFVyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmIChxdWVyeUJvZHkgaW5zdGFuY2VvZiBRdWVyeVZhbHVlcykgewogICAgICAgICAgICAgICAgIHNob3dQYWdlKHZhbHVlc1Jvd1BhZ2UpOyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICB2YWx1ZXNSb3dWaWV3ZXIuc2V0SW5wdXQocXVlcnlCb2R5KTsKLSAgICAgICAgICAgICAgICBXb3JrYmVuY2hIZWxwLnNldEhlbHAoZ2V0UGFyZW50KCksIFNRTEJ1aWxkZXJDb250ZXh0SWRzLlNRTEJfVkFMVUVTX0NMQVVTRV9WSUVXKTsKKyAgICAgICAgICAgICAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKGdldFBhcmVudCgpLCBTUUxCdWlsZGVyQ29udGV4dElkcy5TUUxCX1ZBTFVFU19DTEFVU0VfVklFVyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBzZWxlY3RWaWV3ZXIuc2V0SW5wdXQoaW5wdXQpOwogICAgICAgICAgICAgICAgIHNob3dQYWdlKHNlbGVjdFZpZXdlci5nZXRDb250cm9sKCkpOyAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBXb3JrYmVuY2hIZWxwLnNldEhlbHAoZ2V0UGFyZW50KCksIFNRTEJ1aWxkZXJDb250ZXh0SWRzLlNRTEJfU0VMRUNUX1ZJRVcpOworICAgICAgICAgICAgICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoZ2V0UGFyZW50KCksIFNRTEJ1aWxkZXJDb250ZXh0SWRzLlNRTEJfU0VMRUNUX1ZJRVcpOwogICAgICAgICAgICAgfQogCiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoaW5wdXQgaW5zdGFuY2VvZiBXaXRoVGFibGVTcGVjaWZpY2F0aW9uKSB7CiAgICAgICAgICAgICBzaG93UGFnZSh3aXRoVGFibGUpOyAgICAgICAgICAgIAogICAgICAgICAgICAgd2l0aFRhYmxlVmlld2VyLnNldElucHV0KGlucHV0KTsKLSAgICAgICAgICAgIFdvcmtiZW5jaEhlbHAuc2V0SGVscChnZXRQYXJlbnQoKSwgU1FMQnVpbGRlckNvbnRleHRJZHMuU1FMQl9XSVRIX1RBQkxFX1ZJRVcpOworICAgICAgICAgICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChnZXRQYXJlbnQoKSwgU1FMQnVpbGRlckNvbnRleHRJZHMuU1FMQl9XSVRIX1RBQkxFX1ZJRVcpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGlucHV0IGluc3RhbmNlb2YgUXVlcnlTZWxlY3QpIHsKICAgICAgICAgICAgIHNlbGVjdFZpZXdlci5zZXRJbnB1dChpbnB1dCk7CiAgICAgICAgICAgICBzaG93UGFnZShzZWxlY3RWaWV3ZXIuZ2V0Q29udHJvbCgpKTsgICAgICAgICAgICAKLSAgICAgICAgICAgIFdvcmtiZW5jaEhlbHAuc2V0SGVscChnZXRQYXJlbnQoKSwgU1FMQnVpbGRlckNvbnRleHRJZHMuU1FMQl9TRUxFQ1RfVklFVyk7CisgICAgICAgICAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKGdldFBhcmVudCgpLCBTUUxCdWlsZGVyQ29udGV4dElkcy5TUUxCX1NFTEVDVF9WSUVXKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChpbnB1dCBpbnN0YW5jZW9mIFF1ZXJ5Q29tYmluZWQpIHsKICAgICAgICAgICAgIHNob3dQYWdlKGZ1bGxTZWxlY3QpOyAgICAgICAgICAgIAogICAgICAgICAgICAgZnVsbFNlbGVjdFZpZXdlci5zZXRJbnB1dChpbnB1dCk7Ci0gICAgICAgICAgICBXb3JrYmVuY2hIZWxwLnNldEhlbHAoZ2V0UGFyZW50KCksIFNRTEJ1aWxkZXJDb250ZXh0SWRzLlNRTEJfRlVMTF9TRUxFQ1RfVklFVyk7CisgICAgICAgICAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKGdldFBhcmVudCgpLCBTUUxCdWlsZGVyQ29udGV4dElkcy5TUUxCX0ZVTExfU0VMRUNUX1ZJRVcpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGlucHV0IGluc3RhbmNlb2YgUXVlcnlWYWx1ZXMpIHsKICAgICAgICAgICAgIHNob3dQYWdlKHZhbHVlc0NsYXVzZSk7ICAgICAgICAgICAgCiAgICAgICAgICAgICB2YWx1ZXNWaWV3ZXIuc2V0SW5wdXQoaW5wdXQpOwotICAgICAgICAgICAgV29ya2JlbmNoSGVscC5zZXRIZWxwKGdldFBhcmVudCgpLCBTUUxCdWlsZGVyQ29udGV4dElkcy5TUUxCX1ZBTFVFU19DTEFVU0VfVklFVyk7CisgICAgICAgICAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKGdldFBhcmVudCgpLCBTUUxCdWlsZGVyQ29udGV4dElkcy5TUUxCX1ZBTFVFU19DTEFVU0VfVklFVyk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoaW5wdXQgaW5zdGFuY2VvZiBWYWx1ZXNSb3cpIHsKICAgICAgICAgICAgIHNob3dQYWdlKHZhbHVlc1Jvd1BhZ2UpOyAgICAgICAgICAgICAKICAgICAgICAgICAgIHZhbHVlc1Jvd1ZpZXdlci5zZXRJbnB1dChpbnB1dCk7Ci0gICAgICAgICAgICBXb3JrYmVuY2hIZWxwLnNldEhlbHAoZ2V0UGFyZW50KCksIFNRTEJ1aWxkZXJDb250ZXh0SWRzLlNRTEJfVkFMVUVTX1JPV19WSUVXKTsKKyAgICAgICAgICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoZ2V0UGFyZW50KCksIFNRTEJ1aWxkZXJDb250ZXh0SWRzLlNRTEJfVkFMVUVTX1JPV19WSUVXKTsKICAgICAgICAgfQogICAgIH0KICAgICAKZGlmZiAtLWdpdCBhL3BsdWdpbnMvc3FsdG9vbHMvb3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2RhdGF0b29scy9zcWx0b29scy9zcWxidWlsZGVyL3ZpZXdzL2NyaXRlcmlhL0NyaXRlcmlhR3JpZFZpZXdlci5qYXZhIGIvcGx1Z2lucy9zcWx0b29scy9vcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZGF0YXRvb2xzL3NxbHRvb2xzL3NxbGJ1aWxkZXIvdmlld3MvY3JpdGVyaWEvQ3JpdGVyaWFHcmlkVmlld2VyLmphdmEKaW5kZXggODUxMDMzMC4uZjJjNzYyYyAxMDA2NDQKLS0tIGEvcGx1Z2lucy9zcWx0b29scy9vcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZGF0YXRvb2xzL3NxbHRvb2xzL3NxbGJ1aWxkZXIvdmlld3MvY3JpdGVyaWEvQ3JpdGVyaWFHcmlkVmlld2VyLmphdmEKKysrIGIvcGx1Z2lucy9zcWx0b29scy9vcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZGF0YXRvb2xzL3NxbHRvb2xzL3NxbGJ1aWxkZXIvdmlld3MvY3JpdGVyaWEvQ3JpdGVyaWFHcmlkVmlld2VyLmphdmEKQEAgLTEsNSArMSw1IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IKkgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIENvcHlyaWdodCDvv70gMjAwMCwgMjAxOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAogICogd2hpY2ggaXMgYXZhaWxhYmxlIGF0CkBAIC00NCw3ICs0NCw3IEBACiBpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGU7CiBpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGVDb2x1bW47CiBpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGVJdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhlbHAuV29ya2JlbmNoSGVscDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwogCiAKIHB1YmxpYyBjbGFzcyBDcml0ZXJpYUdyaWRWaWV3ZXIgZXh0ZW5kcyBOYXZpZ2FibGVUYWJsZVZpZXdlciBpbXBsZW1lbnRzIElNZW51TGlzdGVuZXIgewpAQCAtODcsNyArODcsNyBAQAogICAgICAgICB0YWJsZS5zZXRIZWFkZXJWaXNpYmxlKHRydWUpOwogICAgICAgICB0YWJsZS5zZXRMaW5lc1Zpc2libGUodHJ1ZSk7CiAKLSAgICAgICAgV29ya2JlbmNoSGVscC5zZXRIZWxwKHRhYmxlLCBTUUxCdWlsZGVyQ29udGV4dElkcy5TUVNTX1NIQVJFRF9TRUxfVVBfREVMX0dSSUQpOworICAgICAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHRhYmxlLCBTUUxCdWlsZGVyQ29udGV4dElkcy5TUVNTX1NIQVJFRF9TRUxfVVBfREVMX0dSSUQpOwogCiAgICAgICAgIGNvbHVtbkVkaXRvciA9IG5ldyBEeW5hbWljQ29tYm9Cb3hDZWxsRWRpdG9yKHRhYmxlLCBudWxsLCB0aGlzKTsKICAgICAgICAgSVRleHRQcm92aWRlciBjb2x1bW5UZXh0UHJvdmlkZXIgPSBuZXcgSVRleHRQcm92aWRlcigpIHsKZGlmZiAtLWdpdCBhL3BsdWdpbnMvc3FsdG9vbHMvb3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2RhdGF0b29scy9zcWx0b29scy9zcWxidWlsZGVyL3ZpZXdzL2Z1bGxzZWxlY3QvRnVsbFNlbGVjdEdyaWRWaWV3ZXIuamF2YSBiL3BsdWdpbnMvc3FsdG9vbHMvb3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2RhdGF0b29scy9zcWx0b29scy9zcWxidWlsZGVyL3ZpZXdzL2Z1bGxzZWxlY3QvRnVsbFNlbGVjdEdyaWRWaWV3ZXIuamF2YQppbmRleCAxNDQwMjk1Li44MjA4MGJkIDEwMDY0NAotLS0gYS9wbHVnaW5zL3NxbHRvb2xzL29yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9kYXRhdG9vbHMvc3FsdG9vbHMvc3FsYnVpbGRlci92aWV3cy9mdWxsc2VsZWN0L0Z1bGxTZWxlY3RHcmlkVmlld2VyLmphdmEKKysrIGIvcGx1Z2lucy9zcWx0b29scy9vcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZGF0YXRvb2xzL3NxbHRvb2xzL3NxbGJ1aWxkZXIvdmlld3MvZnVsbHNlbGVjdC9GdWxsU2VsZWN0R3JpZFZpZXdlci5qYXZhCkBAIC0xLDUgKzEsNSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCCpIDIwMDAsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBDb3B5cmlnaHQg77+9IDIwMDAsIDIwMTggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCiAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKICAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdApAQCAtNDgsNyArNDgsNyBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLk1lbnU7CiBpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGU7CiBpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGVDb2x1bW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaGVscC5Xb3JrYmVuY2hIZWxwOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7CiAKIAogcHVibGljIGNsYXNzIEZ1bGxTZWxlY3RHcmlkVmlld2VyIGV4dGVuZHMgTmF2aWdhYmxlVGFibGVWaWV3ZXIgaW1wbGVtZW50cyBJTWVudUxpc3RlbmVyIHsKQEAgLTc0LDcgKzc0LDcgQEAKICAgICAgICAgdGFibGUuc2V0TGluZXNWaXNpYmxlKHRydWUpOwogICAgICAgICB0YWJsZS5zZXRIZWFkZXJWaXNpYmxlKHRydWUpOwogICAgICAgICB0YWJsZS5zZXRMYXlvdXREYXRhKFZpZXdVdGlsaXR5LmNyZWF0ZUZpbGwoKSk7Ci0gICAgICAgIFdvcmtiZW5jaEhlbHAuc2V0SGVscCh0YWJsZSwgU1FMQnVpbGRlckNvbnRleHRJZHMuU1FERl9TVE1UX09QRVJfR1JJRCk7CisgICAgICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAodGFibGUsIFNRTEJ1aWxkZXJDb250ZXh0SWRzLlNRREZfU1RNVF9PUEVSX0dSSUQpOwogCiAgICAgICAgIFRhYmxlTGF5b3V0IGxheW91dCA9IG5ldyBUYWJsZUxheW91dCgpOwogICAgICAgICBsYXlvdXQuYWRkQ29sdW1uRGF0YShuZXcgQ29sdW1uV2VpZ2h0RGF0YSg1MCwgdHJ1ZSkpOyAvLyBzdGF0ZW1lbnQKZGlmZiAtLWdpdCBhL3BsdWdpbnMvc3FsdG9vbHMvb3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2RhdGF0b29scy9zcWx0b29scy9zcWxidWlsZGVyL3ZpZXdzL2Z1bGxzZWxlY3QvRnVsbFNlbGVjdE9yZGVyVmlld2VyLmphdmEgYi9wbHVnaW5zL3NxbHRvb2xzL29yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9kYXRhdG9vbHMvc3FsdG9vbHMvc3FsYnVpbGRlci92aWV3cy9mdWxsc2VsZWN0L0Z1bGxTZWxlY3RPcmRlclZpZXdlci5qYXZhCmluZGV4IDJhMWYyNmQuLmI0NjI3MzIgMTAwNjQ0Ci0tLSBhL3BsdWdpbnMvc3FsdG9vbHMvb3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2RhdGF0b29scy9zcWx0b29scy9zcWxidWlsZGVyL3ZpZXdzL2Z1bGxzZWxlY3QvRnVsbFNlbGVjdE9yZGVyVmlld2VyLmphdmEKKysrIGIvcGx1Z2lucy9zcWx0b29scy9vcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZGF0YXRvb2xzL3NxbHRvb2xzL3NxbGJ1aWxkZXIvdmlld3MvZnVsbHNlbGVjdC9GdWxsU2VsZWN0T3JkZXJWaWV3ZXIuamF2YQpAQCAtMSw1ICsxLDUgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgqSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQ29weXJpZ2h0IO+/vSAyMDAwLCAyMDE4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwogICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAgKiB3aGljaCBpcyBhdmFpbGFibGUgYXQKQEAgLTU3LDcgKzU3LDcgQEAKIGltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5NZW51OwogaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlOwogaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlQ29sdW1uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhlbHAuV29ya2JlbmNoSGVscDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwogCiAKIHB1YmxpYyBjbGFzcyBGdWxsU2VsZWN0T3JkZXJWaWV3ZXIgZXh0ZW5kcyBOYXZpZ2FibGVUYWJsZVZpZXdlciBpbXBsZW1lbnRzIElNZW51TGlzdGVuZXIgewpAQCAtODEsNyArODEsNyBAQAogICAgICAgICB0YWJsZS5zZXRMaW5lc1Zpc2libGUodHJ1ZSk7CiAgICAgICAgIHRhYmxlLnNldEhlYWRlclZpc2libGUodHJ1ZSk7CiAgICAgICAgIHRhYmxlLnNldExheW91dERhdGEoVmlld1V0aWxpdHkuY3JlYXRlRmlsbCgpKTsKLSAgICAgICAgV29ya2JlbmNoSGVscC5zZXRIZWxwKHRhYmxlLCBTUUxCdWlsZGVyQ29udGV4dElkcy5TUURGX0NPTF9TT1JUVF9TT1JUT19HUklEKTsKKyAgICAgICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscCh0YWJsZSwgU1FMQnVpbGRlckNvbnRleHRJZHMuU1FERl9DT0xfU09SVFRfU09SVE9fR1JJRCk7CiAKICAgICAgICAgVGFibGVMYXlvdXQgbGF5b3V0ID0gbmV3IFRhYmxlTGF5b3V0KCk7CiAgICAgICAgIGxheW91dC5hZGRDb2x1bW5EYXRhKG5ldyBDb2x1bW5XZWlnaHREYXRhKDUwLCB0cnVlKSk7IC8vIHN0YXRlbWVudApkaWZmIC0tZ2l0IGEvcGx1Z2lucy9zcWx0b29scy9vcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZGF0YXRvb2xzL3NxbHRvb2xzL3NxbGJ1aWxkZXIvdmlld3MvaW5zZXJ0L0luc2VydEdyaWRWaWV3ZXIuamF2YSBiL3BsdWdpbnMvc3FsdG9vbHMvb3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2RhdGF0b29scy9zcWx0b29scy9zcWxidWlsZGVyL3ZpZXdzL2luc2VydC9JbnNlcnRHcmlkVmlld2VyLmphdmEKaW5kZXggZDk3NjYwZi4uYmUxNWVmYiAxMDA2NDQKLS0tIGEvcGx1Z2lucy9zcWx0b29scy9vcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZGF0YXRvb2xzL3NxbHRvb2xzL3NxbGJ1aWxkZXIvdmlld3MvaW5zZXJ0L0luc2VydEdyaWRWaWV3ZXIuamF2YQorKysgYi9wbHVnaW5zL3NxbHRvb2xzL29yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9kYXRhdG9vbHMvc3FsdG9vbHMvc3FsYnVpbGRlci92aWV3cy9pbnNlcnQvSW5zZXJ0R3JpZFZpZXdlci5qYXZhCkBAIC0xLDUgKzEsNSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCCpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBDb3B5cmlnaHQg77+9IDIwMDAsIDIwMTggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCiAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKICAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdApAQCAtMTAsNiArMTAsMTcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsYnVpbGRlci52aWV3cy5pbnNlcnQ7CiAKK2ltcG9ydCBvcmcuZWNsaXBzZS5kYXRhdG9vbHMubW9kZWxiYXNlLnNxbC5kYXRhdHlwZXMuQ2hhcmFjdGVyU3RyaW5nRGF0YVR5cGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZGF0YXRvb2xzLm1vZGVsYmFzZS5zcWwuZGF0YXR5cGVzLlhNTERhdGFUeXBlOworaW1wb3J0IG9yZy5lY2xpcHNlLmRhdGF0b29scy5tb2RlbGJhc2Uuc3FsLnF1ZXJ5LlZhbHVlRXhwcmVzc2lvbkNvbHVtbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsYnVpbGRlci5NZXNzYWdlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsYnVpbGRlci5TUUxCdWlsZGVyQ29udGV4dElkczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsYnVpbGRlci5tb2RlbC5TUUxCdWlsZGVyQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxidWlsZGVyLm1vZGVsLlNRTERvbWFpbk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxidWlsZGVyLnV0aWwuTGFiZWxWYWx1ZVBhaXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGJ1aWxkZXIudmlld3MuRHluYW1pY0NvbWJvQm94Q2VsbEVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsYnVpbGRlci52aWV3cy5HcmlkVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxidWlsZGVyLnZpZXdzLk1vZGlmaWVyOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5DZWxsRWRpdG9yOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQ29sdW1uUGl4ZWxEYXRhOwpAQCAtMjAsMTkgKzMxLDcgQEAKIGltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7CiBpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwogaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlQ29sdW1uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhlbHAuV29ya2JlbmNoSGVscDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kYXRhdG9vbHMubW9kZWxiYXNlLnNxbC5kYXRhdHlwZXMuQ2hhcmFjdGVyU3RyaW5nRGF0YVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGF0YXRvb2xzLm1vZGVsYmFzZS5zcWwuZGF0YXR5cGVzLlhNTERhdGFUeXBlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZGF0YXRvb2xzLm1vZGVsYmFzZS5zcWwucXVlcnkuVmFsdWVFeHByZXNzaW9uQ29sdW1uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxidWlsZGVyLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxidWlsZGVyLlNRTEJ1aWxkZXJDb250ZXh0SWRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxidWlsZGVyLm1vZGVsLlNRTEJ1aWxkZXJDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGJ1aWxkZXIubW9kZWwuU1FMRG9tYWluTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGJ1aWxkZXIudXRpbC5MYWJlbFZhbHVlUGFpcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsYnVpbGRlci52aWV3cy5EeW5hbWljQ29tYm9Cb3hDZWxsRWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxidWlsZGVyLnZpZXdzLkdyaWRWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGJ1aWxkZXIudmlld3MuTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKIAogcHVibGljIGNsYXNzIEluc2VydEdyaWRWaWV3ZXIgZXh0ZW5kcyBHcmlkVmlld2VyIHsKIApAQCAtNDUsNyArNDQsNyBAQAogCiAgICAgICAgIHRoaXMuZG9tYWluTW9kZWwgPSBkb21haW5Nb2RlbDsKIAotICAgICAgICBXb3JrYmVuY2hIZWxwLnNldEhlbHAodGFibGUsIFNRTEJ1aWxkZXJDb250ZXh0SWRzLlNRTEJfSU5TRVJUX1ZJRVcpOworICAgICAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHRhYmxlLCBTUUxCdWlsZGVyQ29udGV4dElkcy5TUUxCX0lOU0VSVF9WSUVXKTsKIAogICAgICAgICBjMiA9IG5ldyBUYWJsZUNvbHVtbih0YWJsZSwgU1dULk5VTEwpOwogICAgICAgICBjMi5zZXRUZXh0KE1lc3NhZ2VzLl9VSV9DT0xVTU5fSU5TRVJUX1ZBTFVFKTsKZGlmZiAtLWdpdCBhL3BsdWdpbnMvc3FsdG9vbHMvb3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2RhdGF0b29scy9zcWx0b29scy9zcWxidWlsZGVyL3ZpZXdzL2luc2VydC9JbnNlcnRTZWxlY3RWaWV3ZXIuamF2YSBiL3BsdWdpbnMvc3FsdG9vbHMvb3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2RhdGF0b29scy9zcWx0b29scy9zcWxidWlsZGVyL3ZpZXdzL2luc2VydC9JbnNlcnRTZWxlY3RWaWV3ZXIuamF2YQppbmRleCAyYjNmM2RjLi4yY2JiNDk0IDEwMDY0NAotLS0gYS9wbHVnaW5zL3NxbHRvb2xzL29yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9kYXRhdG9vbHMvc3FsdG9vbHMvc3FsYnVpbGRlci92aWV3cy9pbnNlcnQvSW5zZXJ0U2VsZWN0Vmlld2VyLmphdmEKKysrIGIvcGx1Z2lucy9zcWx0b29scy9vcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZGF0YXRvb2xzL3NxbHRvb2xzL3NxbGJ1aWxkZXIvdmlld3MvaW5zZXJ0L0luc2VydFNlbGVjdFZpZXdlci5qYXZhCkBAIC0xLDUgKzEsNSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCCpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBDb3B5cmlnaHQg77+9IDIwMDAsIDIwMTggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCiAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKICAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdApAQCAtNTMsNyArNTMsNyBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7CiBpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7CiBpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaGVscC5Xb3JrYmVuY2hIZWxwOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7CiAKIAogLyoqCkBAIC05Miw3ICs5Miw3IEBACiAgICAgICAgIC8vIHJhdGlvIDAuNDUKICAgICAgICAgbGlzdFBhbmVsLnNldERhdGEoImxheW91dCByYXRpbyIsIG5ldyBMb25nKCgoKGxvbmcpIDQ1IDw8IDE2KSArIDk5KSAvIDEwMCkpOyAvLyROT04tTkxTLTEkCiAgICAgICAgIGNvbHVtbkxpc3QgPSBuZXcgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdChsaXN0UGFuZWwsIFNXVC5IX1NDUk9MTCB8IFNXVC5WX1NDUk9MTCB8IFNXVC5NVUxUSSB8IFNXVC5CT1JERVIpOwotICAgICAgICBXb3JrYmVuY2hIZWxwLnNldEhlbHAoY29sdW1uTGlzdCwgU1FMQnVpbGRlckNvbnRleHRJZHMuU1FMQl9JTlNFUlRfVklFVyk7CisgICAgICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoY29sdW1uTGlzdCwgU1FMQnVpbGRlckNvbnRleHRJZHMuU1FMQl9JTlNFUlRfVklFVyk7CiAgICAgICAgIEdyaWREYXRhIGdyaWREYXRhID0gVmlld1V0aWxpdHkuY3JlYXRlRmlsbCgpOwogICAgICAgICBncmlkRGF0YS5ob3Jpem9udGFsU3BhbiA9IDI7CiAgICAgICAgIGdyaWREYXRhLndpZHRoSGludCA9IDEwOwpAQCAtMTA4LDI3ICsxMDgsMjcgQEAKICAgICAgICAgYWRkQnV0dG9uID0gVmlld1V0aWxpdHkuY3JlYXRlUHVzaEJ1dHRvbihidXR0b25QYW5lbCwgIj4iKTsgLy8kTk9OLU5MUy0xJAogICAgICAgICBTZWxlY3RMaXN0ZW5lciBhZGRCdXR0b25MaXN0ZW5lciA9IG5ldyBTZWxlY3RMaXN0ZW5lcigpOwogICAgICAgICBhZGRCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIoYWRkQnV0dG9uTGlzdGVuZXIpOwotICAgICAgICBXb3JrYmVuY2hIZWxwLnNldEhlbHAoYWRkQnV0dG9uLCBTUUxCdWlsZGVyQ29udGV4dElkcy5TUUxCX0lOU0VSVF9WSUVXKTsKKyAgICAgICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChhZGRCdXR0b24sIFNRTEJ1aWxkZXJDb250ZXh0SWRzLlNRTEJfSU5TRVJUX1ZJRVcpOwogCiAgICAgICAgIHJlbW92ZUJ1dHRvbiA9IFZpZXdVdGlsaXR5LmNyZWF0ZVB1c2hCdXR0b24oYnV0dG9uUGFuZWwsICI8Iik7IC8vJE5PTi1OTFMtMSQKICAgICAgICAgU2VsZWN0TGlzdGVuZXIgcmVtb3ZlQnV0dG9uTGlzdGVuZXIgPSBuZXcgU2VsZWN0TGlzdGVuZXIoKTsKICAgICAgICAgcmVtb3ZlQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHJlbW92ZUJ1dHRvbkxpc3RlbmVyKTsKLSAgICAgICAgV29ya2JlbmNoSGVscC5zZXRIZWxwKHJlbW92ZUJ1dHRvbiwgU1FMQnVpbGRlckNvbnRleHRJZHMuU1FMQl9JTlNFUlRfVklFVyk7CisgICAgICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAocmVtb3ZlQnV0dG9uLCBTUUxCdWlsZGVyQ29udGV4dElkcy5TUUxCX0lOU0VSVF9WSUVXKTsKIAogICAgICAgICBhZGRBbGxCdXR0b24gPSBWaWV3VXRpbGl0eS5jcmVhdGVQdXNoQnV0dG9uKGJ1dHRvblBhbmVsLCAiPj4iKTsgLy8kTk9OLU5MUy0xJAogICAgICAgICBTZWxlY3RMaXN0ZW5lciBhZGRBbGxCdXR0b25MaXN0ZW5lciA9IG5ldyBTZWxlY3RMaXN0ZW5lcigpOwogICAgICAgICBhZGRBbGxCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIoYWRkQWxsQnV0dG9uTGlzdGVuZXIpOwotICAgICAgICBXb3JrYmVuY2hIZWxwLnNldEhlbHAoYWRkQWxsQnV0dG9uLCBTUUxCdWlsZGVyQ29udGV4dElkcy5TUUxCX0lOU0VSVF9WSUVXKTsKKyAgICAgICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChhZGRBbGxCdXR0b24sIFNRTEJ1aWxkZXJDb250ZXh0SWRzLlNRTEJfSU5TRVJUX1ZJRVcpOwogCiAgICAgICAgIHJlbW92ZUFsbEJ1dHRvbiA9IFZpZXdVdGlsaXR5LmNyZWF0ZVB1c2hCdXR0b24oYnV0dG9uUGFuZWwsICI8PCIpOyAvLyROT04tTkxTLTEkCiAgICAgICAgIFNlbGVjdExpc3RlbmVyIHJlbW92ZUFsbEJ1dHRvbkxpc3RlbmVyID0gbmV3IFNlbGVjdExpc3RlbmVyKCk7CiAgICAgICAgIHJlbW92ZUFsbEJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihyZW1vdmVBbGxCdXR0b25MaXN0ZW5lcik7Ci0gICAgICAgIFdvcmtiZW5jaEhlbHAuc2V0SGVscChyZW1vdmVBbGxCdXR0b24sIFNRTEJ1aWxkZXJDb250ZXh0SWRzLlNRTEJfSU5TRVJUX1ZJRVcpOworICAgICAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHJlbW92ZUFsbEJ1dHRvbiwgU1FMQnVpbGRlckNvbnRleHRJZHMuU1FMQl9JTlNFUlRfVklFVyk7CiAKICAgICAgICAgQ29tcG9zaXRlIGNvbEdyb3VwID0gVmlld1V0aWxpdHkuY3JlYXRlQ29tcG9zaXRlKGNhbnZhcywgMiwgdHJ1ZSk7CiAgICAgICAgIC8vIHJhdGlvIDAuNDUKICAgICAgICAgY29sR3JvdXAuc2V0RGF0YSgibGF5b3V0IHJhdGlvIiwgbmV3IExvbmcoKCgobG9uZykgNDUgPDwgMTYpICsgOTkpIC8gMTAwKSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgV29ya2JlbmNoSGVscC5zZXRIZWxwKGNvbEdyb3VwLCBTUUxCdWlsZGVyQ29udGV4dElkcy5TUUxCX0lOU0VSVF9WSUVXKTsKKyAgICAgICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChjb2xHcm91cCwgU1FMQnVpbGRlckNvbnRleHRJZHMuU1FMQl9JTlNFUlRfVklFVyk7CiAKICAgICAgICAgY29sdW1uR3JpZCA9IG5ldyBDb2x1bW5MaXN0R3JpZFZpZXdlcihkb21haW5Nb2RlbCwgY29sR3JvdXApOwogICAgICAgICBncmlkRGF0YSA9IFZpZXdVdGlsaXR5LmNyZWF0ZUZpbGwoKTsKZGlmZiAtLWdpdCBhL3BsdWdpbnMvc3FsdG9vbHMvb3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2RhdGF0b29scy9zcWx0b29scy9zcWxidWlsZGVyL3ZpZXdzL2luc2VydC9JbnNlcnRUeXBlVmlld2VyLmphdmEgYi9wbHVnaW5zL3NxbHRvb2xzL29yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9kYXRhdG9vbHMvc3FsdG9vbHMvc3FsYnVpbGRlci92aWV3cy9pbnNlcnQvSW5zZXJ0VHlwZVZpZXdlci5qYXZhCmluZGV4IDhhYzk5NzQuLjBmOGM3ZTkgMTAwNjQ0Ci0tLSBhL3BsdWdpbnMvc3FsdG9vbHMvb3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2RhdGF0b29scy9zcWx0b29scy9zcWxidWlsZGVyL3ZpZXdzL2luc2VydC9JbnNlcnRUeXBlVmlld2VyLmphdmEKKysrIGIvcGx1Z2lucy9zcWx0b29scy9vcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZGF0YXRvb2xzL3NxbHRvb2xzL3NxbGJ1aWxkZXIvdmlld3MvaW5zZXJ0L0luc2VydFR5cGVWaWV3ZXIuamF2YQpAQCAtMSw1ICsxLDUgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgqSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQ29weXJpZ2h0IO+/vSAyMDAwLCAyMDE4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwogICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAgKiB3aGljaCBpcyBhdmFpbGFibGUgYXQKQEAgLTQyLDcgKzQyLDcgQEAKIGltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKIGltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CiBpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5oZWxwLldvcmtiZW5jaEhlbHA7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKIGltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LlBhZ2VCb29rOwogCiAKQEAgLTkwLDEyICs5MCwxMiBAQAogICAgICAgICB2YWx1ZXNCdXR0b24gPSBWaWV3VXRpbGl0eS5jcmVhdGVSYWRpb0J1dHRvbihidXR0b25Hcm91cCwgTWVzc2FnZXMuX1VJX1JBRElPX1ZBTFVFUyk7CiAgICAgICAgIFNlbGVjdExpc3RlbmVyIHZhbHVlc0J1dHRvblNlbGVjdExpc3RlbmVyID0gbmV3IFNlbGVjdExpc3RlbmVyKCk7CiAgICAgICAgIHZhbHVlc0J1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcih2YWx1ZXNCdXR0b25TZWxlY3RMaXN0ZW5lcik7Ci0gICAgICAgIFdvcmtiZW5jaEhlbHAuc2V0SGVscCh2YWx1ZXNCdXR0b24sIFNRTEJ1aWxkZXJDb250ZXh0SWRzLlNRTEJfSU5TRVJUX1ZJRVcpOworICAgICAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHZhbHVlc0J1dHRvbiwgU1FMQnVpbGRlckNvbnRleHRJZHMuU1FMQl9JTlNFUlRfVklFVyk7CiAKICAgICAgICAgcXVlcnlCdXR0b24gPSBWaWV3VXRpbGl0eS5jcmVhdGVSYWRpb0J1dHRvbihidXR0b25Hcm91cCwgTWVzc2FnZXMuX1VJX1JBRElPX0lOU0VSVF9GUk9NX1NVQlFVRVJZKTsKICAgICAgICAgU2VsZWN0TGlzdGVuZXIgcXVlcnlCdXR0b25TZWxlY3RMaXN0ZW5lciA9IG5ldyBTZWxlY3RMaXN0ZW5lcigpOwogICAgICAgICBxdWVyeUJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihxdWVyeUJ1dHRvblNlbGVjdExpc3RlbmVyKTsKLSAgICAgICAgV29ya2JlbmNoSGVscC5zZXRIZWxwKHF1ZXJ5QnV0dG9uLCBTUUxCdWlsZGVyQ29udGV4dElkcy5TUUxCX0lOU0VSVF9WSUVXKTsKKyAgICAgICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChxdWVyeUJ1dHRvbiwgU1FMQnVpbGRlckNvbnRleHRJZHMuU1FMQl9JTlNFUlRfVklFVyk7CiAKICAgICAgICAgdmFsdWVzQnV0dG9uLnNldFNlbGVjdGlvbih0cnVlKTsKICAgICAgICAgcXVlcnlCdXR0b24uc2V0U2VsZWN0aW9uKGZhbHNlKTsKQEAgLTEwMyw3ICsxMDMsNyBAQAogICAgICAgICBWaWV3VXRpbGl0eS5jcmVhdGVMYWJlbChidXR0b25Hcm91cCwgTWVzc2FnZXMuX1VJX0xBQkVMX1FVRVJZX05BTUUpOwogICAgICAgICBpbnNlcnRRdWVyeUNvbWJvID0gVmlld1V0aWxpdHkuY3JlYXRlQ29tYm9Cb3goYnV0dG9uR3JvdXApOwogICAgICAgICBpbnNlcnRRdWVyeUNvbWJvLnNldFRleHQoIiIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgIFdvcmtiZW5jaEhlbHAuc2V0SGVscChpbnNlcnRRdWVyeUNvbWJvLCBTUUxCdWlsZGVyQ29udGV4dElkcy5TUUxCX0lOU0VSVF9WSUVXKTsKKyAgICAgICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChpbnNlcnRRdWVyeUNvbWJvLCBTUUxCdWlsZGVyQ29udGV4dElkcy5TUUxCX0lOU0VSVF9WSUVXKTsKIAogICAgICAgICBTZWxlY3RMaXN0ZW5lciBxdWVyeUNvbWJvTGlzdGVuZXIgPSBuZXcgU2VsZWN0TGlzdGVuZXIoKTsKICAgICAgICAgaW5zZXJ0UXVlcnlDb21iby5hZGRTZWxlY3Rpb25MaXN0ZW5lcihxdWVyeUNvbWJvTGlzdGVuZXIpOwpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9zcWx0b29scy9vcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZGF0YXRvb2xzL3NxbHRvb2xzL3NxbGJ1aWxkZXIvdmlld3Mvc2VsZWN0L0dyb3VwQnlDb250ZW50Vmlld2VyLmphdmEgYi9wbHVnaW5zL3NxbHRvb2xzL29yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9kYXRhdG9vbHMvc3FsdG9vbHMvc3FsYnVpbGRlci92aWV3cy9zZWxlY3QvR3JvdXBCeUNvbnRlbnRWaWV3ZXIuamF2YQppbmRleCA4NGRlYTg3Li44ODY0OWI5IDEwMDY0NAotLS0gYS9wbHVnaW5zL3NxbHRvb2xzL29yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9kYXRhdG9vbHMvc3FsdG9vbHMvc3FsYnVpbGRlci92aWV3cy9zZWxlY3QvR3JvdXBCeUNvbnRlbnRWaWV3ZXIuamF2YQorKysgYi9wbHVnaW5zL3NxbHRvb2xzL29yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9kYXRhdG9vbHMvc3FsdG9vbHMvc3FsYnVpbGRlci92aWV3cy9zZWxlY3QvR3JvdXBCeUNvbnRlbnRWaWV3ZXIuamF2YQpAQCAtMSw1ICsxLDUgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgqSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQ29weXJpZ2h0IO+/vSAyMDAwLCAyMDE4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwogICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAgKiB3aGljaCBpcyBhdmFpbGFibGUgYXQKQEAgLTc1LDcgKzc1LDcgQEAKIGltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKIGltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKIGltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZUl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaGVscC5Xb3JrYmVuY2hIZWxwOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7CiAKIAogcHVibGljIGNsYXNzIEdyb3VwQnlDb250ZW50Vmlld2VyIGV4dGVuZHMgQ29udGVudFZpZXdlciB7CkBAIC0zMDYsNyArMzA2LDcgQEAKICAgICAgICAgY2FudmFzID0gc2FzaEZvcm07CiAKICAgICAgICAgZ3JvdXBCeUNvbnRlbnRMaXN0ID0gVmlld1V0aWxpdHkuY3JlYXRlTGlzdEJveChjYW52YXMsIDEwLCBmYWxzZSk7Ci0gICAgICAgIFdvcmtiZW5jaEhlbHAuc2V0SGVscChncm91cEJ5Q29udGVudExpc3QsIFNRTEJ1aWxkZXJDb250ZXh0SWRzLlNRRFNfU0VMRUNUX0dST1VQU19XSElURV9GSUVMRCk7CisgICAgICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoZ3JvdXBCeUNvbnRlbnRMaXN0LCBTUUxCdWlsZGVyQ29udGV4dElkcy5TUURTX1NFTEVDVF9HUk9VUFNfV0hJVEVfRklFTEQpOwogCiAgICAgICAgIC8vIHJhdGlvIDAuMwogICAgICAgICBncm91cEJ5Q29udGVudExpc3Quc2V0RGF0YSgibGF5b3V0IHJhdGlvIiwgbmV3IExvbmcoKCgobG9uZykgMzAgPDwgMTYpICsgOTkpIC8gMTAwKSk7IC8vJE5PTi1OTFMtMSQKQEAgLTMyOSw3ICszMjksNyBAQAogICAgICAgICB9KTsKIAogICAgICAgICBDb21wb3NpdGUgdHlwZUdyb3VwID0gVmlld1V0aWxpdHkuY3JlYXRlQ29tcG9zaXRlKGNhbnZhcywgMiwgdHJ1ZSk7Ci0gICAgICAgIFdvcmtiZW5jaEhlbHAuc2V0SGVscCh0eXBlR3JvdXAsIFNRTEJ1aWxkZXJDb250ZXh0SWRzLlNRRFNfU0VMRUNUX0dST1VQU19XSElURV9GSUVMRCk7CisgICAgICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAodHlwZUdyb3VwLCBTUUxCdWlsZGVyQ29udGV4dElkcy5TUURTX1NFTEVDVF9HUk9VUFNfV0hJVEVfRklFTEQpOwogCiAgICAgICAgIC8vIHJhdGlvIDAuNwogICAgICAgICB0eXBlR3JvdXAuc2V0RGF0YSgibGF5b3V0IHJhdGlvIiwgbmV3IExvbmcoKCgobG9uZykgNzAgPDwgMTYpICsgOTkpIC8gMTAwKSk7IC8vJE5PTi1OTFMtMSQKQEAgLTMzNyw3ICszMzcsNyBAQAogICAgICAgICBsYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLl9VSV9MQUJFTF9HUk9VUFNfVFlQRSk7CiAKICAgICAgICAgdHlwZUNvbWJvID0gbmV3IENvbWJvKHR5cGVHcm91cCwgU1dULlJFQURfT05MWSk7Ci0gICAgICAgIFdvcmtiZW5jaEhlbHAuc2V0SGVscCh0eXBlQ29tYm8sIFNRTEJ1aWxkZXJDb250ZXh0SWRzLlNRRFNfU0VMRUNUX0dST1VQU19XSElURV9GSUVMRCk7CisgICAgICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAodHlwZUNvbWJvLCBTUUxCdWlsZGVyQ29udGV4dElkcy5TUURTX1NFTEVDVF9HUk9VUFNfV0hJVEVfRklFTEQpOwogCiAgICAgICAgIHR5cGVDb21iby5hZGQoUF9OT05FKTsKICAgICAgICAgdHlwZUNvbWJvLmFkZChQX1JPTExVUCk7CmRpZmYgLS1naXQgYS9wbHVnaW5zL3NxbHRvb2xzL29yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9kYXRhdG9vbHMvc3FsdG9vbHMvc3FsYnVpbGRlci92aWV3cy9zZWxlY3QvU2VsZWN0R3JpZFZpZXdlci5qYXZhIGIvcGx1Z2lucy9zcWx0b29scy9vcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZGF0YXRvb2xzL3NxbHRvb2xzL3NxbGJ1aWxkZXIvdmlld3Mvc2VsZWN0L1NlbGVjdEdyaWRWaWV3ZXIuamF2YQppbmRleCAzNGEyZDRhLi4wZjczMTEwIDEwMDY0NAotLS0gYS9wbHVnaW5zL3NxbHRvb2xzL29yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9kYXRhdG9vbHMvc3FsdG9vbHMvc3FsYnVpbGRlci92aWV3cy9zZWxlY3QvU2VsZWN0R3JpZFZpZXdlci5qYXZhCisrKyBiL3BsdWdpbnMvc3FsdG9vbHMvb3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2RhdGF0b29scy9zcWx0b29scy9zcWxidWlsZGVyL3ZpZXdzL3NlbGVjdC9TZWxlY3RHcmlkVmlld2VyLmphdmEKQEAgLTEsNSArMSw1IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IKkgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIENvcHlyaWdodCDvv70gMjAwMCwgMjAxOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAogICogd2hpY2ggaXMgYXZhaWxhYmxlIGF0CkBAIC01MSw3ICs1MSw3IEBACiBpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKIGltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwogaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlQ29sdW1uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhlbHAuV29ya2JlbmNoSGVscDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwogCiAvKioKICAqIEdyaWQgdmlld2VyIGZvciBzZWxlY3Qgc3RhdGVtZW50CkBAIC03MSw3ICs3MSw3IEBACiAgICAgcHVibGljIFNlbGVjdEdyaWRWaWV3ZXIoU1FMRG9tYWluTW9kZWwgZG9tYWluTW9kZWwsIENvbXBvc2l0ZSBwYXJlbnQpIHsKICAgICAgICAgc3VwZXIoZG9tYWluTW9kZWwsIHBhcmVudCk7CiAKLSAgICAgICAgV29ya2JlbmNoSGVscC5zZXRIZWxwKHRhYmxlLCBTUUxCdWlsZGVyQ29udGV4dElkcy5TUURTX0NPTFVNTlNfVEFCX0dSSUQpOworICAgICAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHRhYmxlLCBTUUxCdWlsZGVyQ29udGV4dElkcy5TUURTX0NPTFVNTlNfVEFCX0dSSUQpOwogCiAgICAgICAgIGMyID0gbmV3IFRhYmxlQ29sdW1uKHRhYmxlLCBTV1QuTlVMTCk7CiAgICAgICAgIGMyLnNldFRleHQoTWVzc2FnZXMuX1VJX0NPTFVNTl9TRUxFQ1RfQUxJQVMpOwpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9zcWx0b29scy9vcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZGF0YXRvb2xzL3NxbHRvb2xzL3NxbGJ1aWxkZXIvdmlld3Mvc2VsZWN0L1NlbGVjdFN0YXRlbWVudERpc3RpbmN0Vmlld2VyLmphdmEgYi9wbHVnaW5zL3NxbHRvb2xzL29yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9kYXRhdG9vbHMvc3FsdG9vbHMvc3FsYnVpbGRlci92aWV3cy9zZWxlY3QvU2VsZWN0U3RhdGVtZW50RGlzdGluY3RWaWV3ZXIuamF2YQppbmRleCA5MGM0NGMwLi44MzhlNjJjIDEwMDY0NAotLS0gYS9wbHVnaW5zL3NxbHRvb2xzL29yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9kYXRhdG9vbHMvc3FsdG9vbHMvc3FsYnVpbGRlci92aWV3cy9zZWxlY3QvU2VsZWN0U3RhdGVtZW50RGlzdGluY3RWaWV3ZXIuamF2YQorKysgYi9wbHVnaW5zL3NxbHRvb2xzL29yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9kYXRhdG9vbHMvc3FsdG9vbHMvc3FsYnVpbGRlci92aWV3cy9zZWxlY3QvU2VsZWN0U3RhdGVtZW50RGlzdGluY3RWaWV3ZXIuamF2YQpAQCAtMSw1ICsxLDUgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgqSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQ29weXJpZ2h0IO+/vSAyMDAwLCAyMDE4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwogICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAgKiB3aGljaCBpcyBhdmFpbGFibGUgYXQKQEAgLTI3LDcgKzI3LDcgQEAKIGltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247CiBpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwogaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaGVscC5Xb3JrYmVuY2hIZWxwOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7CiAKIAogLyoqCkBAIC05Nyw3ICs5Nyw3IEBACiAKICAgICAgICAgY2hlY2tCb3ggPSBWaWV3VXRpbGl0eS5jcmVhdGVDaGVja0JveChtYWluVUlDb21wb25lbnQsICJESVNUSU5DVCIpOyAvLyROT04tTkxTLTEkCiAgICAgICAgIGNoZWNrQm94LmFkZFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOwotICAgICAgICBXb3JrYmVuY2hIZWxwLnNldEhlbHAoY2hlY2tCb3gsIFNRTEJ1aWxkZXJDb250ZXh0SWRzLlNRTEJfU0VMRUNUX1ZJRVcpOworICAgICAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKGNoZWNrQm94LCBTUUxCdWlsZGVyQ29udGV4dElkcy5TUUxCX1NFTEVDVF9WSUVXKTsKIAogICAgICAgICBob29rQ29udHJvbChnZXRDb250cm9sKCkpOwogICAgICAgICByZXR1cm4gZ2V0Q29udHJvbCgpOwpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9zcWx0b29scy9vcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZGF0YXRvb2xzL3NxbHRvb2xzL3NxbGJ1aWxkZXIvdmlld3Mvc2VsZWN0L1NlbGVjdFZpZXdlci5qYXZhIGIvcGx1Z2lucy9zcWx0b29scy9vcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZGF0YXRvb2xzL3NxbHRvb2xzL3NxbGJ1aWxkZXIvdmlld3Mvc2VsZWN0L1NlbGVjdFZpZXdlci5qYXZhCmluZGV4IDg4ZTgzNTQuLjY0ZjkxNzYgMTAwNjQ0Ci0tLSBhL3BsdWdpbnMvc3FsdG9vbHMvb3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2RhdGF0b29scy9zcWx0b29scy9zcWxidWlsZGVyL3ZpZXdzL3NlbGVjdC9TZWxlY3RWaWV3ZXIuamF2YQorKysgYi9wbHVnaW5zL3NxbHRvb2xzL29yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9kYXRhdG9vbHMvc3FsdG9vbHMvc3FsYnVpbGRlci92aWV3cy9zZWxlY3QvU2VsZWN0Vmlld2VyLmphdmEKQEAgLTEsNSArMSw1IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IKkgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIENvcHlyaWdodCDvv70gMjAwMCwgMjAxOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAogICogd2hpY2ggaXMgYXZhaWxhYmxlIGF0CkBAIC0yMyw3ICsyMyw3IEBACiBpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwogaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKIGltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhlbHAuV29ya2JlbmNoSGVscDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwogCiAKIHB1YmxpYyBjbGFzcyBTZWxlY3RWaWV3ZXIgZXh0ZW5kcyBDb250ZW50Vmlld2VyIHsKQEAgLTU4LDcgKzU4LDcgQEAKICAgICAgICAgc2VsZWN0U3RhdGVtZW50RGlzdGluY3RWaWV3ZXIgPSBuZXcgU2VsZWN0U3RhdGVtZW50RGlzdGluY3RWaWV3ZXIoc3FsRG9tYWluTW9kZWwpOwogICAgICAgICBzZWxlY3RTdGF0ZW1lbnREaXN0aW5jdFZpZXdlci5jcmVhdGVDb250cm9sKGNhbnZhcyk7CiAKLSAgICAgICAgV29ya2JlbmNoSGVscC5zZXRIZWxwKGNhbnZhcywgU1FMQnVpbGRlckNvbnRleHRJZHMuU1FMQl9TRUxFQ1RfVklFVyk7CisgICAgICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoY2FudmFzLCBTUUxCdWlsZGVyQ29udGV4dElkcy5TUUxCX1NFTEVDVF9WSUVXKTsKICAgICAgICAgV29ya2Jvb2sgd29ya2Jvb2sgPSBuZXcgV29ya2Jvb2soY2FudmFzKTsKIAogICAgICAgICBzZWxlY3RHcmlkVmlld2VyID0gbmV3IFNlbGVjdEdyaWRWaWV3ZXIoc3FsRG9tYWluTW9kZWwsIHdvcmtib29rLmdldENsaWVudENvbXBvc2l0ZSgpKTsKZGlmZiAtLWdpdCBhL3BsdWdpbnMvc3FsdG9vbHMvb3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2RhdGF0b29scy9zcWx0b29scy9zcWxidWlsZGVyL3ZpZXdzL3VwZGF0ZS9VcGRhdGVEZXNpZ25WaWV3ZXIuamF2YSBiL3BsdWdpbnMvc3FsdG9vbHMvb3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2RhdGF0b29scy9zcWx0b29scy9zcWxidWlsZGVyL3ZpZXdzL3VwZGF0ZS9VcGRhdGVEZXNpZ25WaWV3ZXIuamF2YQppbmRleCAwNzg0ZjQ2Li4wZDM0ZmQ5IDEwMDY0NAotLS0gYS9wbHVnaW5zL3NxbHRvb2xzL29yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9kYXRhdG9vbHMvc3FsdG9vbHMvc3FsYnVpbGRlci92aWV3cy91cGRhdGUvVXBkYXRlRGVzaWduVmlld2VyLmphdmEKKysrIGIvcGx1Z2lucy9zcWx0b29scy9vcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZGF0YXRvb2xzL3NxbHRvb2xzL3NxbGJ1aWxkZXIvdmlld3MvdXBkYXRlL1VwZGF0ZURlc2lnblZpZXdlci5qYXZhCkBAIC0xLDUgKzEsNSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCCpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBDb3B5cmlnaHQg77+9IDIwMDAsIDIwMTggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCiAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKICAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdApAQCAtNTIsNyArNTIsNyBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7CiBpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7CiBpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaGVscC5Xb3JrYmVuY2hIZWxwOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7CiAKIAogLyoqCkBAIC0xMDYsNyArMTA2LDcgQEAKIAogICAgICAgICBzZXRDb250ZW50TGlzdCA9IG5ldyBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0KGNhbnZhcywgU1dULk1VTFRJIHwgU1dULkJPUkRFUiB8IFNXVC5IX1NDUk9MTCB8IFNXVC5WX1NDUk9MTCk7CiAgICAgICAgIC8vIHJhdGlvIDAuMzUKLSAgICAgICAgV29ya2JlbmNoSGVscC5zZXRIZWxwKHNldENvbnRlbnRMaXN0LCBTUUxCdWlsZGVyQ29udGV4dElkcy5TUURVX1NFVF9UQUIpOworICAgICAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHNldENvbnRlbnRMaXN0LCBTUUxCdWlsZGVyQ29udGV4dElkcy5TUURVX1NFVF9UQUIpOwogCiAgICAgICAgIHNldENvbnRlbnRIZWxwZXIgPSBuZXcgT2JqZWN0TGlzdEhlbHBlcihzZXRDb250ZW50TGlzdCk7CiAgICAgICAgIFNldENvbnRlbnRMaXN0ZW5lciBzZXRDb250ZW50TGlzdGVuZXIgPSBuZXcgU2V0Q29udGVudExpc3RlbmVyKCk7CkBAIC0xMTgsMTkgKzExOCwxOSBAQAogICAgICAgICBCdXR0b25TZWxlY3RMaXN0ZW5lciBhZGRCdXR0b25MaXN0ZW5lciA9IG5ldyBCdXR0b25TZWxlY3RMaXN0ZW5lcigpOwogICAgICAgICBhZGRCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIoYWRkQnV0dG9uTGlzdGVuZXIpOwogICAgICAgICBhZGRCdXR0b24uc2V0VG9vbFRpcFRleHQoTWVzc2FnZXMuX1VJX1RPT0xUSVBfVVBEQVRFX0FERF9DT0wpOwotICAgICAgICBXb3JrYmVuY2hIZWxwLnNldEhlbHAoYWRkQnV0dG9uLCBTUUxCdWlsZGVyQ29udGV4dElkcy5TUURVX1NFVF9UQUIpOworICAgICAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKGFkZEJ1dHRvbiwgU1FMQnVpbGRlckNvbnRleHRJZHMuU1FEVV9TRVRfVEFCKTsKIAogICAgICAgICByZW1vdmVCdXR0b24gPSBWaWV3VXRpbGl0eS5jcmVhdGVQdXNoQnV0dG9uKGJ1dHRvblBhbmVsLCAiPCIpOwogICAgICAgICBCdXR0b25TZWxlY3RMaXN0ZW5lciByZW1vdmVCdXR0b25MaXN0ZW5lciA9IG5ldyBCdXR0b25TZWxlY3RMaXN0ZW5lcigpOwogICAgICAgICByZW1vdmVCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIocmVtb3ZlQnV0dG9uTGlzdGVuZXIpOwotICAgICAgICBXb3JrYmVuY2hIZWxwLnNldEhlbHAocmVtb3ZlQnV0dG9uLCBTUUxCdWlsZGVyQ29udGV4dElkcy5TUURVX1NFVF9UQUIpOworICAgICAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHJlbW92ZUJ1dHRvbiwgU1FMQnVpbGRlckNvbnRleHRJZHMuU1FEVV9TRVRfVEFCKTsKIAogICAgICAgICBncm91cEJ1dHRvbiA9IFZpZXdVdGlsaXR5LmNyZWF0ZVB1c2hCdXR0b24oYnV0dG9uUGFuZWwsICI+Iik7CiAgICAgICAgIGdyb3VwQnV0dG9uLnNldEltYWdlKFNRTEJ1aWxkZXJQbHVnaW4uZ2V0UGx1Z2luKCkuZ2V0SW1hZ2UoU1FMUmVzb3VyY2UuU1FMX0NPTFVNTl9HUk9VUCkpOwogICAgICAgICBncm91cEJ1dHRvbi5zZXRUb29sVGlwVGV4dChNZXNzYWdlcy5fVUlfVE9PTFRJUF9VUERBVEVfQUREX0dSUCk7CiAgICAgICAgIEJ1dHRvblNlbGVjdExpc3RlbmVyIGdyb3VwQnV0dG9uTGlzdGVuZXIgPSBuZXcgQnV0dG9uU2VsZWN0TGlzdGVuZXIoKTsKICAgICAgICAgZ3JvdXBCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIoZ3JvdXBCdXR0b25MaXN0ZW5lcik7Ci0gICAgICAgIFdvcmtiZW5jaEhlbHAuc2V0SGVscChncm91cEJ1dHRvbiwgU1FMQnVpbGRlckNvbnRleHRJZHMuU1FEVV9TRVRfVEFCKTsKKyAgICAgICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChncm91cEJ1dHRvbiwgU1FMQnVpbGRlckNvbnRleHRJZHMuU1FEVV9TRVRfVEFCKTsKIAogICAgICAgICB1cGRhdGVUcmVlVmlld2VyID0gbmV3IFVwZGF0ZVRyZWVWaWV3ZXIoZG9tYWluTW9kZWwsIGNhbnZhcyk7CiAgICAgICAgIC8vIHJhdGlvIDAuNTUKZGlmZiAtLWdpdCBhL3BsdWdpbnMvc3FsdG9vbHMvb3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2RhdGF0b29scy9zcWx0b29scy9zcWxidWlsZGVyL3ZpZXdzL3VwZGF0ZS9VcGRhdGVUcmVlVmlld2VyLmphdmEgYi9wbHVnaW5zL3NxbHRvb2xzL29yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9kYXRhdG9vbHMvc3FsdG9vbHMvc3FsYnVpbGRlci92aWV3cy91cGRhdGUvVXBkYXRlVHJlZVZpZXdlci5qYXZhCmluZGV4IDY4NzdhZjYuLmNkMWQ1ZDAgMTAwNjQ0Ci0tLSBhL3BsdWdpbnMvc3FsdG9vbHMvb3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2RhdGF0b29scy9zcWx0b29scy9zcWxidWlsZGVyL3ZpZXdzL3VwZGF0ZS9VcGRhdGVUcmVlVmlld2VyLmphdmEKKysrIGIvcGx1Z2lucy9zcWx0b29scy9vcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuc3FsYnVpbGRlci9zcmMvb3JnL2VjbGlwc2UvZGF0YXRvb2xzL3NxbHRvb2xzL3NxbGJ1aWxkZXIvdmlld3MvdXBkYXRlL1VwZGF0ZVRyZWVWaWV3ZXIuamF2YQpAQCAtMSw1ICsxLDUgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgqSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQ29weXJpZ2h0IO+/vSAyMDAwLCAyMDE4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwogICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAgKiB3aGljaCBpcyBhdmFpbGFibGUgYXQKQEAgLTYzLDcgKzYzLDcgQEAKIGltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5JdGVtOwogaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlOwogaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlQ29sdW1uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhlbHAuV29ya2JlbmNoSGVscDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwogCiAKIC8qKgpAQCAtOTQsNyArOTQsNyBAQAogICAgICAgICB0YWJsZSA9IGdldFRhYmxlVHJlZSgpLmdldFRhYmxlKCk7CiAKICAgICAgICAgZmluYWwgVGFibGUgdGJsID0gZ2V0VGFibGVUcmVlKCkuZ2V0VGFibGUoKTsKLSAgICAgICAgV29ya2JlbmNoSGVscC5zZXRIZWxwKHRibCwgU1FMQnVpbGRlckNvbnRleHRJZHMuU1FEVV9TRVRfVEFCKTsKKyAgICAgICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscCh0YmwsIFNRTEJ1aWxkZXJDb250ZXh0SWRzLlNRRFVfU0VUX1RBQik7CiAKICAgICAgICAgbmF2aWdhdG9yID0gbmV3IFRhYmxlTmF2aWdhdG9yKHRibCwgdGhpcyk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7CmRpZmYgLS1naXQgYS9wbHVnaW5zL3NxbHRvb2xzL29yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxidWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9kYXRhdG9vbHMvc3FsdG9vbHMvc3FsYnVpbGRlci92aWV3cy93aXRoL1dpdGhTdGF0ZW1lbnRWaWV3ZXIuamF2YSBiL3BsdWdpbnMvc3FsdG9vbHMvb3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2RhdGF0b29scy9zcWx0b29scy9zcWxidWlsZGVyL3ZpZXdzL3dpdGgvV2l0aFN0YXRlbWVudFZpZXdlci5qYXZhCmluZGV4IDE2Mjc3M2EuLjU5NDI3ZDUgMTAwNjQ0Ci0tLSBhL3BsdWdpbnMvc3FsdG9vbHMvb3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2RhdGF0b29scy9zcWx0b29scy9zcWxidWlsZGVyL3ZpZXdzL3dpdGgvV2l0aFN0YXRlbWVudFZpZXdlci5qYXZhCisrKyBiL3BsdWdpbnMvc3FsdG9vbHMvb3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLnNxbGJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2RhdGF0b29scy9zcWx0b29scy9zcWxidWlsZGVyL3ZpZXdzL3dpdGgvV2l0aFN0YXRlbWVudFZpZXdlci5qYXZhCkBAIC0xLDUgKzEsNSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCCpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBDb3B5cmlnaHQg77+9IDIwMDAsIDIwMTggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCiAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKICAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdApAQCAtMjMsNyArMjMsNyBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7CiBpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7CiBpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5oZWxwLldvcmtiZW5jaEhlbHA7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKIAogCiAvKioKQEAgLTQ1LDcgKzQ1LDcgQEAKIAogICAgICAgICBWaWV3VXRpbGl0eS5jcmVhdGVMYWJlbChjbGllbnQsIE1lc3NhZ2VzLl9VSV9MQUJFTF9XSVRIX1NUQVRFTUVOVCk7CiAgICAgICAgIG5hbWVGaWVsZCA9IG5ldyBUZXh0KGNsaWVudCwgU1dULlNJTkdMRSB8IFNXVC5CT1JERVIgfCBTV1QuUkVBRF9PTkxZKTsKLSAgICAgICAgV29ya2JlbmNoSGVscC5zZXRIZWxwKG5hbWVGaWVsZCwgU1FMQnVpbGRlckNvbnRleHRJZHMuU1FEV19TVE1UX05BTUVfRklFTEQpOworICAgICAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKG5hbWVGaWVsZCwgU1FMQnVpbGRlckNvbnRleHRJZHMuU1FEV19TVE1UX05BTUVfRklFTEQpOwogICAgICAgICBHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CiAgICAgICAgIGRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CiAgICAgICAgIGRhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7Cg==