ZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmplbS50ZXN0cy1mZWF0dXJlLy5wcm9qZWN0IGIvZmVhdHVyZXMvb3JnLmVjbGlwc2UuamVtLnRlc3RzLWZlYXR1cmUvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1ZTg3OTQuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuamVtLnRlc3RzLWZlYXR1cmUvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLmplbS50ZXN0cy1mZWF0dXJlPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuamVtLnRlc3RzLWZlYXR1cmUvYXJjaGl2ZWQudHh0IGIvZmVhdHVyZXMvb3JnLmVjbGlwc2UuamVtLnRlc3RzLWZlYXR1cmUvYXJjaGl2ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTdjMzIxLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmplbS50ZXN0cy1mZWF0dXJlL2FyY2hpdmVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotVGhpcyBmZWF0dXJlIGlzIG5vIGxvbmdlciB1c2VkLCAKLXNvIEkgaGF2ZSAibnVsbGVkIG91dCIgdGhlIGhlYWQgc3RyZWFtIAotdG8gYXZvaWQgY29uZnVzaW9uLiAKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmoyZWUuY29yZS50ZXN0cy5wZXJmb3JtYW5jZS8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmoyZWUuY29yZS50ZXN0cy5wZXJmb3JtYW5jZS8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTFjOGYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmNvcmUudGVzdHMucGVyZm9ybWFuY2UvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmNvcmUudGVzdHMucGVyZm9ybWFuY2UvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmNvcmUudGVzdHMucGVyZm9ybWFuY2UvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDU4NmVlMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuajJlZS5jb3JlLnRlc3RzLnBlcmZvcm1hbmNlLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLWJpbgotdGVtcC5mb2xkZXIKLWJ1aWxkLnhtbAotY29yZS1wZXJmb3JtYW5jZS5qYXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmNvcmUudGVzdHMucGVyZm9ybWFuY2UvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuajJlZS5jb3JlLnRlc3RzLnBlcmZvcm1hbmNlLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2UxMmZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmNvcmUudGVzdHMucGVyZm9ybWFuY2UvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS5qc3QuajJlZS5jb3JlLnRlc3RzLnBlcmZvcm1hbmNlPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmNvcmUudGVzdHMucGVyZm9ybWFuY2UvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmNvcmUudGVzdHMucGVyZm9ybWFuY2UvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5OWRmMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuajJlZS5jb3JlLnRlc3RzLnBlcmZvcm1hbmNlL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmNvcmUudGVzdHMucGVyZm9ybWFuY2UvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmNvcmUudGVzdHMucGVyZm9ybWFuY2UvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBhOTBkMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuajJlZS5jb3JlLnRlc3RzLnBlcmZvcm1hbmNlL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLXNvdXJjZS5jb3JlLXBlcmZvcm1hbmNlLmphciA9IHNyYy8KLW91dHB1dC5jb3JlLXBlcmZvcm1hbmNlLmphciA9IGJpbi8KLWJpbi5pbmNsdWRlcyA9IHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgY29yZS1wZXJmb3JtYW5jZS5qYXIsXAotICAgICAgICAgICAgICAgdGVzdC54bWwsXAotICAgICAgICAgICAgICAgdGVzdGNhc2UueG1sLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmNvcmUudGVzdHMucGVyZm9ybWFuY2UvcGx1Z2luLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmNvcmUudGVzdHMucGVyZm9ybWFuY2UvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzdmZDUxMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuajJlZS5jb3JlLnRlc3RzLnBlcmZvcm1hbmNlL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotPHBsdWdpbgotICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC5qMmVlLmNvcmUudGVzdHMucGVyZm9ybWFuY2UiCi0gICBuYW1lPSJDb3JlIFBlcmZvcm1hbmNlIFBsdWctaW4iCi0gICB2ZXJzaW9uPSIxLjEuMCIKLSAgIHByb3ZpZGVyLW5hbWU9IiIKLSAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3QuajJlZS5jb3JlLnRlc3RzLnBlcmZvcm1hbmNlLkNvcmVQZXJmb3JtYW5jZVRlc3RQbHVnaW4iPgotCi0gICA8cnVudGltZT4KLSAgICAgIDxsaWJyYXJ5IG5hbWU9ImNvcmUtcGVyZm9ybWFuY2UuamFyIj4KLSAgICAgICAgIDxleHBvcnQgbmFtZT0iKiIvPgotICAgICAgPC9saWJyYXJ5PgotICAgPC9ydW50aW1lPgotCi0gICA8cmVxdWlyZXM+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UudWkiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUiLz4KLSAgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmp1bml0Ii8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuanN0LmoyZWUudGVzdHMucGVyZm9ybWFuY2UiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3QuY29tbW9uLnRlc3RzIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuanN0LmoyZWUuY29yZS50ZXN0cyIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmpzdC5qMmVlLnRlc3RzIi8+Ci0gICA8L3JlcXVpcmVzPgotCi08L3BsdWdpbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmNvcmUudGVzdHMucGVyZm9ybWFuY2Uvc3JjL29yZy9lY2xpcHNlL2pzdC9qMmVlL2NvcmUvdGVzdHMvcGVyZm9ybWFuY2UvQWxsQ29yZVBlcmZvcm1hbmNlVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmNvcmUudGVzdHMucGVyZm9ybWFuY2Uvc3JjL29yZy9lY2xpcHNlL2pzdC9qMmVlL2NvcmUvdGVzdHMvcGVyZm9ybWFuY2UvQWxsQ29yZVBlcmZvcm1hbmNlVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjZkNDIzMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuajJlZS5jb3JlLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3QvajJlZS9jb3JlL3Rlc3RzL3BlcmZvcm1hbmNlL0FsbENvcmVQZXJmb3JtYW5jZVRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0vKgotICogQ3JlYXRlZCBvbiBOb3YgMjgsIDIwMDQKLSAqCi0gKiBUT0RPIFRvIGNoYW5nZSB0aGUgdGVtcGxhdGUgZm9yIHRoaXMgZ2VuZXJhdGVkIGZpbGUgZ28gdG8KLSAqIFdpbmRvdyAtIFByZWZlcmVuY2VzIC0gSmF2YSAtIENvZGUgU3R5bGUgLSBDb2RlIFRlbXBsYXRlcwotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qMmVlLmNvcmUudGVzdHMucGVyZm9ybWFuY2U7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuYXJjaGl2ZS5lbWZ0ZXN0cy5BcHBDbGllbnRFTUZFZGl0VGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5hcmNoaXZlLmVtZnRlc3RzLkFwcENsaWVudEVNRlRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuYXJjaGl2ZS5lbWZ0ZXN0cy5FYXJFTUZFZGl0VGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5hcmNoaXZlLmVtZnRlc3RzLkVhckVNRlRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuYXJjaGl2ZS5lbWZ0ZXN0cy5FamJFTUZFZGl0VGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5hcmNoaXZlLmVtZnRlc3RzLlJhckVNRkVkaXRUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmFyY2hpdmUuZW1mdGVzdHMuUmFyRU1GVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5hcmNoaXZlLmVtZnRlc3RzLldhckVNRkVkaXRUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmFyY2hpdmUuZW1mdGVzdHMuV2FyRU1GVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5hcmNoaXZlLmVtZnRlc3RzLldlYlNlcnZpY2VzRU1GVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS50ZXN0cy5wZXJmb3JtYW5jZS5CYXNlUGVyZm9ybWFuY2VUZXN0Q2FzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS50ZXN0cy5wZXJmb3JtYW5jZS5QZXJmb3JtYW5jZVRlc3RDYXNlV3JhcHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53dHAuajJlZS5oZWFkbGVzcy50ZXN0cy5hcHBjbGllbnQub3BlcmF0aW9ucy5BcHBDbGllbnRQcm9qZWN0Q3JlYXRpb25PcGVyYXRpb25UZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnd0cC5qMmVlLmhlYWRsZXNzLnRlc3RzLmVqYi5vcGVyYXRpb25zLkVKQkltcG9ydE9wZXJhdGlvblRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3RwLmoyZWUuaGVhZGxlc3MudGVzdHMuZWpiLm9wZXJhdGlvbnMuRUpCUHJvamVjdENyZWF0aW9uT3BlcmF0aW9uVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53dHAuajJlZS5oZWFkbGVzcy50ZXN0cy5qY2Eub3BlcmF0aW9ucy5KQ0FQcm9qZWN0Q3JlYXRpb25PcGVyYXRpb25UZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnd0cC5qMmVlLmhlYWRsZXNzLnRlc3RzLndlYi5vcGVyYXRpb25zLldlYlByb2plY3RDcmVhdGlvbk9wZXJhdGlvblRlc3Q7Ci0KLS8qKgotICoKLSAqIFRPRE8gVG8gY2hhbmdlIHRoZSB0ZW1wbGF0ZSBmb3IgdGhpcyBnZW5lcmF0ZWQgdHlwZSBjb21tZW50IGdvIHRvCi0gKiBXaW5kb3cgLSBQcmVmZXJlbmNlcyAtIEphdmEgLSBDb2RlIFN0eWxlIC0gQ29kZSBUZW1wbGF0ZXMKLSAqLwotcHVibGljIGNsYXNzIEFsbENvcmVQZXJmb3JtYW5jZVRlc3RzIGV4dGVuZHMgQmFzZVBlcmZvcm1hbmNlVGVzdENhc2V7Ci0JCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQotCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKCJQZXJmb3JtYW5jZSBUZXN0IGZvciBjb20uaWJtLmV0b29scy5hcmNoaXZlLmVtZnRlc3QiKTsKLQkJYWRkUGVyZm9ybWFuY2VUZXN0KHN1aXRlLCBuZXcgQXBwQ2xpZW50RU1GRWRpdFRlc3QoInRlc3RBcHBsaWNhdGlvbkNsaWVudEVkaXQiKSwgUGVyZm9ybWFuY2VUZXN0Q2FzZVdyYXBwZXIuR0xPQkFMLCAiQXBwbGljYXRpb24gQ2xpZW50IGVtZiBlZGl0IHRlc3QiICk7Ci0JCWFkZFBlcmZvcm1hbmNlVGVzdChzdWl0ZSwgbmV3IEFwcENsaWVudEVNRlRlc3QoInRlc3RBcHBsaWNhdGlvbkNsaWVudFBvcHVsYXRpb24iKSwgUGVyZm9ybWFuY2VUZXN0Q2FzZVdyYXBwZXIuTE9DQUwsICJBcHBsaWNhdGlvbiBDbGllbnQgZW1mIHRlc3QiICk7Ci0JCWFkZFBlcmZvcm1hbmNlVGVzdChzdWl0ZSwgbmV3IEFwcENsaWVudEVNRlRlc3QoInRlc3QxNEFwcGxpY2F0aW9uQ2xpZW50UG9wdWxhdGlvbiIpLCBQZXJmb3JtYW5jZVRlc3RDYXNlV3JhcHBlci5HTE9CQUwsICJBcHBsaWNhdGlvbiBDbGllbnQgMTQgZW1mIHRlc3QiICk7Ci0JCQotCQlhZGRQZXJmb3JtYW5jZVRlc3Qoc3VpdGUsIG5ldyBFYXJFTUZFZGl0VGVzdCgidGVzdEVBUkVkaXQiKSwgUGVyZm9ybWFuY2VUZXN0Q2FzZVdyYXBwZXIuR0xPQkFMLCAiRUFSIGVtZiBlZGl0IHRlc3QiICk7Ci0JCS8vYWRkUGVyZm9ybWFuY2VUZXN0KHN1aXRlLCBuZXcgRWFyRU1GVGVzdCgidGVzdEVBUlBvcHVsYXRpb24iKSwgUGVyZm9ybWFuY2VUZXN0Q2FzZVdyYXBwZXIuTE9DQUwsICJFQVIgIGVtZiB0ZXN0IiApOwotCQlhZGRQZXJmb3JtYW5jZVRlc3Qoc3VpdGUsIG5ldyBFYXJFTUZUZXN0KCJ0ZXN0MTRFQVJQb3B1bGF0aW9uIiksIFBlcmZvcm1hbmNlVGVzdENhc2VXcmFwcGVyLkdMT0JBTCwgIkVBUiAxNCBlbWYgdGVzdCIgKTsKLQkJCi0JCS8vYWRkUGVyZm9ybWFuY2VUZXN0KHN1aXRlLCBuZXcgRWpiRU1GRWRpdFRlc3QoInRlc3RFSkJKYXJFZGl0IiksIFBlcmZvcm1hbmNlVGVzdENhc2VXcmFwcGVyLkdMT0JBTCwgIkVKQiBlbWYgZWRpdCB0ZXN0IC10ZXN0RUpCSmFyRWRpdCIgKTsKLQkJYWRkUGVyZm9ybWFuY2VUZXN0KHN1aXRlLCBuZXcgRWpiRU1GRWRpdFRlc3QoInRlc3RXQ0NNSmFyIiksIFBlcmZvcm1hbmNlVGVzdENhc2VXcmFwcGVyLkxPQ0FMLCAiRUpCIGVtZiBlZGl0IHRlc3QgLSB0ZXN0V0NDTUphciIgKTsKLQkJLy9hZGRQZXJmb3JtYW5jZVRlc3Qoc3VpdGUsIG5ldyBFamJFTUZUZXN0KCJ0ZXN0RUpCSmFyUG9wdWxhdGlvbiIpLCBQZXJmb3JtYW5jZVRlc3RDYXNlV3JhcHBlci5MT0NBTCwgIkVKQiAgZW1mIHRlc3QiICk7Ci0JCS8vYWRkUGVyZm9ybWFuY2VUZXN0KHN1aXRlLCBuZXcgRWpiRU1GVGVzdCgidGVzdDE0RUpCSmFyUG9wdWxhdGlvbiIpLCBQZXJmb3JtYW5jZVRlc3RDYXNlV3JhcHBlci5HTE9CQUwsICJFSkIgMTQgZW1mIHRlc3QiICk7Ci0JCi0JCWFkZFBlcmZvcm1hbmNlVGVzdChzdWl0ZSwgbmV3IFJhckVNRkVkaXRUZXN0KCJ0ZXN0UkFSRWRpdCIpLCBQZXJmb3JtYW5jZVRlc3RDYXNlV3JhcHBlci5HTE9CQUwsICJSQVIgZW1mIGVkaXQgdGVzdCIgKTsKLQkJYWRkUGVyZm9ybWFuY2VUZXN0KHN1aXRlLCBuZXcgUmFyRU1GVGVzdCgidGVzdFJBUlBvcHVsYXRpb24iKSwgUGVyZm9ybWFuY2VUZXN0Q2FzZVdyYXBwZXIuTE9DQUwsICJSQVIgIGVtZiB0ZXN0IiApOwotCQlhZGRQZXJmb3JtYW5jZVRlc3Qoc3VpdGUsIG5ldyBSYXJFTUZUZXN0KCJ0ZXN0MTRSQVJQb3B1bGF0aW9uIiksIFBlcmZvcm1hbmNlVGVzdENhc2VXcmFwcGVyLkdMT0JBTCwgIlJBUiAxNCBlbWYgdGVzdCIgKTsKLQkKLQkJYWRkUGVyZm9ybWFuY2VUZXN0KHN1aXRlLCBuZXcgV2FyRU1GRWRpdFRlc3QoInRlc3RXQVJFZGl0IiksIFBlcmZvcm1hbmNlVGVzdENhc2VXcmFwcGVyLkdMT0JBTCwgIldBUiBlbWYgZWRpdCB0ZXN0IiApOwotCQkvL2FkZFBlcmZvcm1hbmNlVGVzdChzdWl0ZSwgbmV3IFdhckVNRlRlc3QoInRlc3RXQVJQb3B1bGF0aW9uIiksIFBlcmZvcm1hbmNlVGVzdENhc2VXcmFwcGVyLkxPQ0FMLCAiV0FSICBlbWYgdGVzdCIgKTsKLQkJYWRkUGVyZm9ybWFuY2VUZXN0KHN1aXRlLCBuZXcgV2FyRU1GVGVzdCgidGVzdDE0V0FSUG9wdWxhdGlvbiIpLCBQZXJmb3JtYW5jZVRlc3RDYXNlV3JhcHBlci5HTE9CQUwsICJXQVIgMTQgZW1mIHRlc3QiICk7Ci0JCQotCQlhZGRQZXJmb3JtYW5jZVRlc3Qoc3VpdGUsIG5ldyBXZWJTZXJ2aWNlc0VNRlRlc3QoInRlc3QxM1dlYlNlcnZpY2VzQ2xpZW50UG9wdWxhdGlvbiIpLCBQZXJmb3JtYW5jZVRlc3RDYXNlV3JhcHBlci5OT05FLCAiV2ViIFNlcnZpY2UgQ2xpZW50IDEzIGVtZiB0ZXN0IiApOwotCQlhZGRQZXJmb3JtYW5jZVRlc3Qoc3VpdGUsIG5ldyBXZWJTZXJ2aWNlc0VNRlRlc3QoInRlc3QxM1dlYlNlcnZpY2VzRERQb3B1bGF0aW9uIiksIFBlcmZvcm1hbmNlVGVzdENhc2VXcmFwcGVyLkxPQ0FMLCAiV2ViIHNlcnZpY2VzIDEzIGVtZiB0ZXN0IiApOwotCQlhZGRQZXJmb3JtYW5jZVRlc3Qoc3VpdGUsIG5ldyBXZWJTZXJ2aWNlc0VNRlRlc3QoInRlc3QxNFdlYlNlcnZpY2VzRERQb3B1bGF0aW9uIiksIFBlcmZvcm1hbmNlVGVzdENhc2VXcmFwcGVyLkdMT0JBTCwgIldlYiBzZXJ2aWNlcyAxNCBlbWYgdGVzdCIgKTsKLQkJYWRkUGVyZm9ybWFuY2VUZXN0KHN1aXRlLCBuZXcgV2ViU2VydmljZXNFTUZUZXN0KCJ0ZXN0SmF4UlBDTWFwUG9wdWxhdGlvbiIpLCBQZXJmb3JtYW5jZVRlc3RDYXNlV3JhcHBlci5HTE9CQUwsICJKYXhSUENNYXBwaW5nIGVtZiB0ZXN0IiApOwotCQkKLQkJCi0JCS8vQ3JlYXRpb24gdGVzdHMKLQkJYWRkUGVyZm9ybWFuY2VUZXN0KHN1aXRlLCBuZXcgRUpCUHJvamVjdENyZWF0aW9uT3BlcmF0aW9uVGVzdCgidGVzdEVKQjIxX0RlZmF1bHRzIiksIFBlcmZvcm1hbmNlVGVzdENhc2VXcmFwcGVyLk5PTkUsICJFSkIgQ29tcG9uZW50IGNyZWF0aW9uIHRlc3QiICk7Ci0JCWFkZFBlcmZvcm1hbmNlVGVzdChzdWl0ZSwgbmV3IEFwcENsaWVudFByb2plY3RDcmVhdGlvbk9wZXJhdGlvblRlc3QoInRlc3RBQzUwX0RlZmF1bHRzIiksIFBlcmZvcm1hbmNlVGVzdENhc2VXcmFwcGVyLkxPQ0FMLCAiQXBwIENsaWVudCBDb21wb25lbnQgY3JlYXRpb24gdGVzdCIgKTsKLQkJYWRkUGVyZm9ybWFuY2VUZXN0KHN1aXRlLCBuZXcgSkNBUHJvamVjdENyZWF0aW9uT3BlcmF0aW9uVGVzdCgidGVzdENvbm5lY3RvcjE1X0RlZmF1bHRzIiksIFBlcmZvcm1hbmNlVGVzdENhc2VXcmFwcGVyLkdMT0JBTCwgIkNvbm5lY3RvciBDb21wb25lbnQgY3JlYXRpb24gdGVzdCIgKTsKLQkJYWRkUGVyZm9ybWFuY2VUZXN0KHN1aXRlLCBuZXcgV2ViUHJvamVjdENyZWF0aW9uT3BlcmF0aW9uVGVzdCgidGVzdFdlYjI0X0RlZmF1bHRzIiksIFBlcmZvcm1hbmNlVGVzdENhc2VXcmFwcGVyLkdMT0JBTCwgIldlYiBDb21wb25lbnQgY3JlYXRpb24gdGVzdCIgKTsKLQkJCi0JCWFkZFBlcmZvcm1hbmNlVGVzdChzdWl0ZSwgbmV3IEVKQkltcG9ydE9wZXJhdGlvblRlc3QoInRlc3RFSkJJbXBvcnQyMV9EZWZhdWx0cyIpLCBQZXJmb3JtYW5jZVRlc3RDYXNlV3JhcHBlci5OT05FLCAiRUpCIENvbXBvbmVudCBpbXBvcnQgdGVzdCIgKTsKLQkJcmV0dXJuIHN1aXRlOwotCX0KLQotCQotCQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmoyZWUuY29yZS50ZXN0cy5wZXJmb3JtYW5jZS9zcmMvb3JnL2VjbGlwc2UvanN0L2oyZWUvY29yZS90ZXN0cy9wZXJmb3JtYW5jZS9Db3JlUGVyZm9ybWFuY2VUZXN0UGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuajJlZS5jb3JlLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3QvajJlZS9jb3JlL3Rlc3RzL3BlcmZvcm1hbmNlL0NvcmVQZXJmb3JtYW5jZVRlc3RQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDg3NjllYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuajJlZS5jb3JlLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3QvajJlZS9jb3JlL3Rlc3RzL3BlcmZvcm1hbmNlL0NvcmVQZXJmb3JtYW5jZVRlc3RQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmoyZWUuY29yZS50ZXN0cy5wZXJmb3JtYW5jZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi4qOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OwotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIFRoZSBtYWluIHBsdWdpbiBjbGFzcyB0byBiZSB1c2VkIGluIHRoZSBkZXNrdG9wLgotICovCi1wdWJsaWMgY2xhc3MgQ29yZVBlcmZvcm1hbmNlVGVzdFBsdWdpbiBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4gewotCS8vVGhlIHNoYXJlZCBpbnN0YW5jZS4KLQlwcml2YXRlIHN0YXRpYyBDb3JlUGVyZm9ybWFuY2VUZXN0UGx1Z2luIHBsdWdpbjsKLQkvL1Jlc291cmNlIGJ1bmRsZS4KLQlwcml2YXRlIFJlc291cmNlQnVuZGxlIHJlc291cmNlQnVuZGxlOwotCQotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3Rvci4KLQkgKi8KLQlwdWJsaWMgQ29yZVBlcmZvcm1hbmNlVGVzdFBsdWdpbigpIHsKLQkJc3VwZXIoKTsKLQkJcGx1Z2luID0gdGhpczsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdXBvbiBwbHVnLWluIGFjdGl2YXRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zdGFydChjb250ZXh0KTsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgcGx1Zy1pbiBpcyBzdG9wcGVkCi0JICovCi0JcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zdG9wKGNvbnRleHQpOwotCQlwbHVnaW4gPSBudWxsOwotCQlyZXNvdXJjZUJ1bmRsZSA9IG51bGw7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgQ29yZVBlcmZvcm1hbmNlVGVzdFBsdWdpbiBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHN0cmluZyBmcm9tIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsCi0JICogb3IgJ2tleScgaWYgbm90IGZvdW5kLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFJlc291cmNlU3RyaW5nKFN0cmluZyBrZXkpIHsKLQkJUmVzb3VyY2VCdW5kbGUgYnVuZGxlID0gQ29yZVBlcmZvcm1hbmNlVGVzdFBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UmVzb3VyY2VCdW5kbGUoKTsKLQkJdHJ5IHsKLQkJCXJldHVybiAoYnVuZGxlICE9IG51bGwpID8gYnVuZGxlLmdldFN0cmluZyhrZXkpIDoga2V5OwotCQl9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIGtleTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2VCdW5kbGUgZ2V0UmVzb3VyY2VCdW5kbGUoKSB7Ci0JCXRyeSB7Ci0JCQlpZiAocmVzb3VyY2VCdW5kbGUgPT0gbnVsbCkKLQkJCQlyZXNvdXJjZUJ1bmRsZSA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZSgib3JnLmVjbGlwc2UuanN0LmoyZWUuY29yZS50ZXN0cy5wZXJmb3JtYW5jZS5QZXJmb3JtYW5jZVBsdWdpblJlc291cmNlcyIpOwotCQl9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24geCkgewotCQkJcmVzb3VyY2VCdW5kbGUgPSBudWxsOwotCQl9Ci0JCXJldHVybiByZXNvdXJjZUJ1bmRsZTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuajJlZS5jb3JlLnRlc3RzLnBlcmZvcm1hbmNlL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmoyZWUuY29yZS50ZXN0cy5wZXJmb3JtYW5jZS90ZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWIzY2ZkNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuajJlZS5jb3JlLnRlc3RzLnBlcmZvcm1hbmNlL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci0KLTxwcm9qZWN0IG5hbWU9IkoyRUUgUGVyZm9ybWFuY2UgdGVzdCIgZGVmYXVsdD0icGVyZm9ybWFuY2UiIGJhc2VkaXI9Ii4iPgotICA8IS0tIFRoZSBwcm9wZXJ0eSAke2VjbGlwc2UtaG9tZX0gc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotICA8IS0tIFNldCBhIG1lYW5pbmdmdWwgZGVmYXVsdCB2YWx1ZSBmb3Igd2hlbiBpdCBpcyBub3QuIC0tPgotICA8cHJvcGVydHkgbmFtZT0iZWNsaXBzZS1ob21lIiB2YWx1ZT0iJHtiYXNlZGlyfS8uLi8uLiIvPgotCi0gIDwhLS0gc2V0cyB0aGUgcHJvcGVydGllcyBlY2xpcHNlLWhvbWUsIGFuZCBsaWJyYXJ5LWZpbGUgLS0+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmpzdC5qMmVlLmNvcmUudGVzdHMucGVyZm9ybWFuY2UiLz4KLSAgPHByb3BlcnR5IG5hbWU9ImxpYnJhcnktZmlsZSIKLSAgICAgICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIi8+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJwZXJmLXRlc3RzLWZpbGUiCi0gICAgICAgICAgICB2YWx1ZT0iJHt0ZXN0RGlyfS9wZXJmb3JtYW5jZS10ZXN0cy54bWwiLz4KLSAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iLVhteDUxMk0iLz4KLQotICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+Ci0gIDwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0gIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgotICA8dGFyZ2V0IG5hbWU9ImluaXQiPgotICAgIDx0c3RhbXAvPgotICAgIDxkZWxldGU+Ci0gICAgICA8ZmlsZXNldCBkaXI9IiR7ZWNsaXBzZS1ob21lfSIgaW5jbHVkZXM9Im9yZyoueG1sIi8+Ci0gICAgPC9kZWxldGU+Ci0gIDwvdGFyZ2V0PgotCi0gIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgotICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0gIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KLSAgPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KLSAgPC90YXJnZXQ+Ci0KLSAKLSAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSBwZXJmb3JtYW5jZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLTx0YXJnZXQgbmFtZT0icGVyZm9ybWFuY2Utc3VpdGUiPgotICA8cHJvcGVydHkgbmFtZT0icGVyZm9ybWFuY2UtZm9sZGVyIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BlcmZvcm1hbmNlX2ZvbGRlciIvPgotICA8ZGVsZXRlIGRpcj0iJHtwZXJmb3JtYW5jZS1mb2xkZXJ9IiBxdWlldD0idHJ1ZSIvPgotICA8YW50IHRhcmdldD0iY29yZS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHtwZXJmb3JtYW5jZS1mb2xkZXJ9Ii8+Ci0gICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5qc3QuajJlZS5jb3JlLnRlc3RzLnBlcmZvcm1hbmNlLkFsbENvcmVQZXJmb3JtYW5jZVRlc3RzIi8+Ci0gICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0gIDwvYW50PgotPC90YXJnZXQ+Ci0gICAgICAgICAgICAgICAgICAgIAotPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSBwZXJmb3JtYW5jZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgotPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgotPHRhcmdldCBuYW1lPSJwZXJmb3JtYW5jZSIgZGVwZW5kcz0iaW5pdCxwZXJmb3JtYW5jZS1zdWl0ZSxjbGVhbnVwIj4KLSAgPGFudCB0YXJnZXQ9ImNvbGxlY3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgIDxwcm9wZXJ0eSBuYW1lPSJpbmNsdWRlcyIgdmFsdWU9Im9yZyoueG1sIi8+Ci0gICAgPHByb3BlcnR5IG5hbWU9Im91dHB1dC1maWxlIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0ueG1sIi8+Ci0gIDwvYW50PgotPC90YXJnZXQ+Ci08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuajJlZS5jb3JlLnRlc3RzLnBlcmZvcm1hbmNlL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmNvcmUudGVzdHMucGVyZm9ybWFuY2UvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTcxODY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qMmVlLmNvcmUudGVzdHMucGVyZm9ybWFuY2UvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08dGVzdENhc2VzPgotCTx0ZXN0Q2FzZSBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LmoyZWUuYXJjaGl2ZS5lbWZ0ZXN0cy5FYXJFTUZFZGl0VGVzdCI+Ci0JCTxtZXRob2QgbmFtZT0idGVzdEVBUkVkaXQiIHRhZ2dpbmc9IkdMT0JBTCIgc2hvcnROYW1lPSJFQVIgZW1mIGVkaXQiIC8+Ci0JPC90ZXN0Q2FzZT4KLQk8dGVzdENhc2UgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC5qMmVlLmFyY2hpdmUuZW1mdGVzdHMuRWFyRU1GVGVzdCI+Ci0JCTxtZXRob2QgbmFtZT0idGVzdDE0RUFSUG9wdWxhdGlvbiIgdGFnZ2luZz0iR0xPQkFMIiBzaG9ydE5hbWU9IkVBUiAxNCBlbWYgdGVzdCIgLz4KLSAJPC90ZXN0Q2FzZT4KLSAJPHRlc3RDYXNlIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3QuajJlZS5hcmNoaXZlLmVtZnRlc3RzLkVqYkVNRkVkaXRUZXN0Ij4KLQkJPG1ldGhvZCBuYW1lPSJ0ZXN0RUpCSmFyRWRpdCIgdGFnZ2luZz0iR0xPQkFMIiBzaG9ydE5hbWU9IkVKQiBlbWYgZWRpdCIgLz4KLSAJPC90ZXN0Q2FzZT4KLSAJPHRlc3RDYXNlIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3QuajJlZS5hcmNoaXZlLmVtZnRlc3RzLkVqYkVNRkVkaXRUZXN0Ij4KLQkJPG1ldGhvZCBuYW1lPSJ0ZXN0V0NDTUphciIgdGFnZ2luZz0iR0xPQkFMIiBzaG9ydE5hbWU9IkVKQiBlbWYgZWRpdCIgLz4KLSAJPC90ZXN0Q2FzZT4KLSAJPHRlc3RDYXNlIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3QuajJlZS5hcmNoaXZlLmVtZnRlc3RzLkVqYkVNRlRlc3QiPgotCQk8bWV0aG9kIG5hbWU9InRlc3RFSkJKYXJQb3B1bGF0aW9uIiB0YWdnaW5nPSJHTE9CQUwiIHNob3J0TmFtZT0iRUpCIGVtZiB0ZXN0IiAvPgotIAk8L3Rlc3RDYXNlPgotIAk8dGVzdENhc2UgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC5qMmVlLmFyY2hpdmUuZW1mdGVzdHMuRWpiRU1GVGVzdCI+Ci0JCTxtZXRob2QgbmFtZT0idGVzdDE0RUpCSmFyUG9wdWxhdGlvbiIgdGFnZ2luZz0iR0xPQkFMIiBzaG9ydE5hbWU9IkVKQiAxNCBlbWYgdGVzdCIgLz4KLSAJPC90ZXN0Q2FzZT4KLSAJPHRlc3RDYXNlIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3QuajJlZS5hcmNoaXZlLmVtZnRlc3RzLkFwcENsaWVudEVNRkVkaXRUZXN0Ij4KLQkJPG1ldGhvZCBuYW1lPSJ0ZXN0QXBwbGljYXRpb25DbGllbnRFZGl0IiB0YWdnaW5nPSJHTE9CQUwiIHNob3J0TmFtZT0iQXBwbGljYXRpb24gQ2xpZW50IGVtZiBlZGl0IiAvPgotIAk8L3Rlc3RDYXNlPgotIAk8dGVzdENhc2UgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC5qMmVlLmFyY2hpdmUuZW1mdGVzdHMuQXBwQ2xpZW50RU1GVGVzdCI+Ci0JCTxtZXRob2QgbmFtZT0idGVzdDE0QXBwbGljYXRpb25DbGllbnRQb3B1bGF0aW9uIiB0YWdnaW5nPSJHTE9CQUwiIHNob3J0TmFtZT0iQXBwbGljYXRpb24gQ2xpZW50IDE0IGVtZiB0ZXN0IiAvPgotIAk8L3Rlc3RDYXNlPgotIAkKLSAJPHRlc3RDYXNlIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3QuajJlZS5hcmNoaXZlLmVtZnRlc3RzLlJhckVNRkVkaXRUZXN0Ij4KLQkJPG1ldGhvZCBuYW1lPSJ0ZXN0UkFSRWRpdCIgdGFnZ2luZz0iR0xPQkFMIiBzaG9ydE5hbWU9IkNvbm5lY3RvciBlbWYgZWRpdCIgLz4KLSAJPC90ZXN0Q2FzZT4KLSAJCi0gCTx0ZXN0Q2FzZSBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LmoyZWUuYXJjaGl2ZS5lbWZ0ZXN0cy5SYXJFTUZUZXN0Ij4KLQkJPG1ldGhvZCBuYW1lPSJ0ZXN0MTRSQVJQb3B1bGF0aW9uIiB0YWdnaW5nPSJHTE9CQUwiIHNob3J0TmFtZT0iQ29ubmVjdG9yIDE0IGVtZiB0ZXN0IiAvPgotIAk8L3Rlc3RDYXNlPgotIAk8dGVzdENhc2UgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC5qMmVlLmFyY2hpdmUuZW1mdGVzdHMuV2FyRU1GRWRpdFRlc3QiPgotCQk8bWV0aG9kIG5hbWU9InRlc3RXQVJFZGl0IiB0YWdnaW5nPSJHTE9CQUwiIHNob3J0TmFtZT0iV2ViIGVtZiBlZGl0IiAvPgotIAk8L3Rlc3RDYXNlPgotIAk8dGVzdENhc2UgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC5qMmVlLmFyY2hpdmUuZW1mdGVzdHMuV2FyRU1GVGVzdCI+Ci0JCTxtZXRob2QgbmFtZT0idGVzdDE0V0FSUG9wdWxhdGlvbiIgdGFnZ2luZz0iR0xPQkFMIiBzaG9ydE5hbWU9IldlYiAxNCBlbWYgdGVzdCIgLz4KLSAJPC90ZXN0Q2FzZT4KLSAJCi0gCTx0ZXN0Q2FzZSBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LmoyZWUuYXJjaGl2ZS5lbWZ0ZXN0cy5XZWJTZXJ2aWNlc0VNRlRlc3QiPgotCQk8bWV0aG9kIG5hbWU9InRlc3QxNFdlYlNlcnZpY2VzRERQb3B1bGF0aW9uIiB0YWdnaW5nPSJHTE9CQUwiIHNob3J0TmFtZT0iV2ViIHNlcnZpY2VzIDE0IGVtZiB0ZXN0IiAvPgotIAk8L3Rlc3RDYXNlPiAKLSAJCi08L3Rlc3RDYXNlcz4KLQkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuajJlZS50ZXN0cy5wZXJmb3JtYW5jZS8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmoyZWUudGVzdHMucGVyZm9ybWFuY2UvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGJmNjcwZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuajJlZS50ZXN0cy5wZXJmb3JtYW5jZS8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJjb21tb24vIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qMmVlLnRlc3RzLnBlcmZvcm1hbmNlLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuajJlZS50ZXN0cy5wZXJmb3JtYW5jZS8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0M2FjNjA2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qMmVlLnRlc3RzLnBlcmZvcm1hbmNlLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLWJpbgotdGVtcC5mb2xkZXIKLWJ1aWxkLnhtbAotcGVyZm9ybWFuY2UuamFyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuajJlZS50ZXN0cy5wZXJmb3JtYW5jZS8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qMmVlLnRlc3RzLnBlcmZvcm1hbmNlLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYWVkMzNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qMmVlLnRlc3RzLnBlcmZvcm1hbmNlLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanN0LmoyZWUudGVzdHMucGVyZm9ybWFuY2U8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmoyZWUudGVzdHMucGVyZm9ybWFuY2UvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qMmVlLnRlc3RzLnBlcmZvcm1hbmNlL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmoyZWUudGVzdHMucGVyZm9ybWFuY2UvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmoyZWUudGVzdHMucGVyZm9ybWFuY2UvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qMmVlLnRlc3RzLnBlcmZvcm1hbmNlL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxZDQ1NDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmoyZWUudGVzdHMucGVyZm9ybWFuY2UvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotc291cmNlLnBlcmZvcm1hbmNlLmphciA9IGNvbW1vbi8KLW91dHB1dC5wZXJmb3JtYW5jZS5qYXIgPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIHBlcmZvcm1hbmNlLmphcixcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuajJlZS50ZXN0cy5wZXJmb3JtYW5jZS9jb21tb24vb3JnL2VjbGlwc2UvanN0L2oyZWUvdGVzdHMvcGVyZm9ybWFuY2UvQmFzZVBlcmZvcm1hbmNlVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qMmVlLnRlc3RzLnBlcmZvcm1hbmNlL2NvbW1vbi9vcmcvZWNsaXBzZS9qc3QvajJlZS90ZXN0cy9wZXJmb3JtYW5jZS9CYXNlUGVyZm9ybWFuY2VUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTc1NmFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qMmVlLnRlc3RzLnBlcmZvcm1hbmNlL2NvbW1vbi9vcmcvZWNsaXBzZS9qc3QvajJlZS90ZXN0cy9wZXJmb3JtYW5jZS9CYXNlUGVyZm9ybWFuY2VUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY2ICswLDAgQEAKLS8qCi0gKiBDcmVhdGVkIG9uIERlYyA2LCAyMDA0Ci0gKgotICogVE9ETyBUbyBjaGFuZ2UgdGhlIHRlbXBsYXRlIGZvciB0aGlzIGdlbmVyYXRlZCBmaWxlIGdvIHRvCi0gKiBXaW5kb3cgLSBQcmVmZXJlbmNlcyAtIEphdmEgLSBDb2RlIFN0eWxlIC0gQ29kZSBUZW1wbGF0ZXMKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuajJlZS50ZXN0cy5wZXJmb3JtYW5jZTsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkNvbnN0cnVjdG9yOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25UYXJnZXRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udGVzdHMuQmFzZVRlc3RDYXNlOwotCi0vKioKLSAqIEBhdXRob3IgQWRtaW4KLSAqCi0gKiBUT0RPIFRvIGNoYW5nZSB0aGUgdGVtcGxhdGUgZm9yIHRoaXMgZ2VuZXJhdGVkIHR5cGUgY29tbWVudCBnbyB0bwotICogV2luZG93IC0gUHJlZmVyZW5jZXMgLSBKYXZhIC0gQ29kZSBTdHlsZSAtIENvZGUgVGVtcGxhdGVzCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBCYXNlUGVyZm9ybWFuY2VUZXN0Q2FzZSBleHRlbmRzIEJhc2VUZXN0Q2FzZSB7Ci0JcHJvdGVjdGVkIHN0YXRpYyBNYXAgcGVyZm9ybWFuY2VDbGFzcyA9IG51bGw7Ci0Jc3RhdGljIENsYXNzTG9hZGVyIGNsYXp6TG9hZGVyID0gbnVsbDsKLQlwcm90ZWN0ZWQgc3RhdGljIFN0cmluZyBmaWxlPSBudWxsOyAKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXBlcmZvcm1hbmNlQ2xhc3MgPSBudWxsOwotCQlyZXR1cm4gY3JlYXRlVGVzdFN1aXRlcygpIDsKLQl9Ci0JLyoqCi0JICogCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgVGVzdCBjcmVhdGVUZXN0U3VpdGVzKCkgewotCQljcmVhdGVQZXJmb3JtYW5jZUNsYXNzKCk7Ci0JCVRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBUZXN0U3VpdGUoKTsKLQkJZm9yIChJdGVyYXRvciBpdGVyID0gcGVyZm9ybWFuY2VDbGFzcy5rZXlTZXQoKS5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspIHsKLQkJCUNsYXNzIGNsYXp6ID0gKENsYXNzKSBpdGVyLm5leHQoKTsKLQkJCUxpc3QgbWV0aG9kTGlzdCA9IChMaXN0KXBlcmZvcm1hbmNlQ2xhc3MuZ2V0KGNsYXp6KTsKLQkJCWZvciAoaW50IHg9MDsgeDwgbWV0aG9kTGlzdC5zaXplKCk7ICsreCkgewotCQkJCVBlcmZvcm1hbmNlVGVzdE9iamVjdCB0ZXN0T2JqZWN0ID0gKFBlcmZvcm1hbmNlVGVzdE9iamVjdCltZXRob2RMaXN0LmdldCh4KTsKLQkJCQlUZXN0IHRlc3QgPSBjcmVhdGVUZXN0KGNsYXp6LHRlc3RPYmplY3QuZ2V0TmFtZSgpKTsKLQkJCQlpZiAodGVzdCBpbnN0YW5jZW9mIEJhc2VUZXN0Q2FzZSkgewotCQkJCQlzdWl0ZS5hZGRUZXN0KG5ldyBQZXJmb3JtYW5jZVRlc3RDYXNlV3JhcHBlcigoQmFzZVRlc3RDYXNlKXRlc3QsIHRlc3RPYmplY3QuZ2V0VGFnZ2luZygpICwgdGVzdE9iamVjdC5nZXRTaG9ydE5hbWUoKSkpOwotCQkJCX0KLQkJCX0KLQkJfQkJCi0JCXJldHVybiBzdWl0ZTsKLQl9Ci0JCi0Jc3RhdGljIHB1YmxpYyBUZXN0IGNyZWF0ZVRlc3QoQ2xhc3MgdGhlQ2xhc3MsIFN0cmluZyBuYW1lKSB7Ci0JCUNvbnN0cnVjdG9yIGNvbnN0cnVjdG9yOwotCQl0cnkgewotCQkJY29uc3RydWN0b3I9IGdldFRlc3RDb25zdHJ1Y3Rvcih0aGVDbGFzcyk7Ci0JCX0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBlKSB7Ci0JCQlyZXR1cm4gd2FybmluZygiQ2xhc3MgIit0aGVDbGFzcy5nZXROYW1lKCkrIiBoYXMgbm8gcHVibGljIGNvbnN0cnVjdG9yIFRlc3RDYXNlKFN0cmluZyBuYW1lKSBvciBUZXN0Q2FzZSgpIik7Ci0JCX0KLQkJT2JqZWN0IHRlc3Q7Ci0JCXRyeSB7Ci0JCQlpZiAoY29uc3RydWN0b3IuZ2V0UGFyYW1ldGVyVHlwZXMoKS5sZW5ndGggPT0gMCkgewotCQkJCXRlc3Q9IGNvbnN0cnVjdG9yLm5ld0luc3RhbmNlKG5ldyBPYmplY3RbMF0pOwotCQkJCWlmICh0ZXN0IGluc3RhbmNlb2YgVGVzdENhc2UpCi0JCQkJCSgoVGVzdENhc2UpIHRlc3QpLnNldE5hbWUobmFtZSk7Ci0JCQl9IGVsc2UgewotCQkJCXRlc3Q9IGNvbnN0cnVjdG9yLm5ld0luc3RhbmNlKG5ldyBPYmplY3RbXXtuYW1lfSk7Ci0JCQl9Ci0JCX0gY2F0Y2ggKEluc3RhbnRpYXRpb25FeGNlcHRpb24gZSkgewotCQkJcmV0dXJuKHdhcm5pbmcoIkNhbm5vdCBpbnN0YW50aWF0ZSB0ZXN0IGNhc2U6ICIrbmFtZSsiICgiK2V4Y2VwdGlvblRvU3RyaW5nKGUpKyIpIikpOwotCQl9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGUpIHsKLQkJCXJldHVybih3YXJuaW5nKCJFeGNlcHRpb24gaW4gY29uc3RydWN0b3I6ICIrbmFtZSsiICgiK2V4Y2VwdGlvblRvU3RyaW5nKGUuZ2V0VGFyZ2V0RXhjZXB0aW9uKCkpKyIpIikpOwotCQl9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGUpIHsKLQkJCXJldHVybih3YXJuaW5nKCJDYW5ub3QgYWNjZXNzIHRlc3QgY2FzZTogIituYW1lKyIgKCIrZXhjZXB0aW9uVG9TdHJpbmcoZSkrIikiKSk7Ci0JCX0KLQkJcmV0dXJuIChUZXN0KSB0ZXN0OwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIGEgdGVzdCB3aGljaCB3aWxsIGZhaWwgYW5kIGxvZyBhIHdhcm5pbmcgbWVzc2FnZS4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBUZXN0IHdhcm5pbmcoZmluYWwgU3RyaW5nIG1lc3NhZ2UpIHsKLQkJcmV0dXJuIG5ldyBUZXN0Q2FzZSgid2FybmluZyIpIHsKLQkJCXByb3RlY3RlZCB2b2lkIHJ1blRlc3QoKSB7Ci0JCQkJZmFpbChtZXNzYWdlKTsKLQkJCX0KLQkJfTsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBDb25zdHJ1Y3RvciBnZXRUZXN0Q29uc3RydWN0b3IoQ2xhc3MgdGhlQ2xhc3MpIHRocm93cyBOb1N1Y2hNZXRob2RFeGNlcHRpb24gewotCQlDbGFzc1tdIGFyZ3M9IHsgU3RyaW5nLmNsYXNzIH07Ci0JCXRyeSB7Ci0JCQlyZXR1cm4gdGhlQ2xhc3MuZ2V0Q29uc3RydWN0b3IoYXJncyk7CQotCQl9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZSkgewotCQkJLy8gZmFsbCB0aHJvdWdoCi0JCX0KLQkJcmV0dXJuIHRoZUNsYXNzLmdldENvbnN0cnVjdG9yKG5ldyBDbGFzc1swXSk7Ci0JfQotCQotCXByaXZhdGUgc3RhdGljIFN0cmluZyBleGNlcHRpb25Ub1N0cmluZyhUaHJvd2FibGUgdCkgewotCQlTdHJpbmdXcml0ZXIgc3RyaW5nV3JpdGVyPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0JCVByaW50V3JpdGVyIHdyaXRlcj0gbmV3IFByaW50V3JpdGVyKHN0cmluZ1dyaXRlcik7Ci0JCXQucHJpbnRTdGFja1RyYWNlKHdyaXRlcik7Ci0JCXJldHVybiBzdHJpbmdXcml0ZXIudG9TdHJpbmcoKTsKLQotCX0KLQkvKioKLQkgKiBAcGFyYW0gcGVyZm9ybWFuY2VDbGFzczIKLQkgKi8KLQkKLQlwdWJsaWMgc3RhdGljIE1hcCBnZXRQZXJmb3JtYW5jZUNsYXNzKCkgewotCQlpZiAocGVyZm9ybWFuY2VDbGFzcyA9PSBudWxsKSB7Ci0JCQljcmVhdGVQZXJmb3JtYW5jZUNsYXNzKCk7Ci0JCX0KLQkJcmV0dXJuIHBlcmZvcm1hbmNlQ2xhc3M7Ci0JfQotCQotCQkKLQlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgY3JlYXRlUGVyZm9ybWFuY2VDbGFzcygpIHsKLQkJaWYgKHBlcmZvcm1hbmNlQ2xhc3MgPT0gbnVsbCkgewotCQkJcGVyZm9ybWFuY2VDbGFzcyA9IG5ldyBUZXN0Q2FzZVNBWFBhcnNlcigpLmRvTG9hZChuZXcgRmlsZShmaWxlKSk7Ci0JCX0KLQl9Ci0JCi0KLQkvKioKLQkgKiBAcmV0dXJuIFJldHVybnMgdGhlIGNsYXp6TG9hZGVyLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgQ2xhc3NMb2FkZXIgZ2V0Q2xhc3NMb2FkZXIoKSB7Ci0JCXJldHVybiBjbGF6ekxvYWRlcjsKLQl9Ci0JLyoqCi0JICogQHBhcmFtIGNsYXp6TG9hZGVyIFRoZSBjbGF6ekxvYWRlciB0byBzZXQuCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIHNldENsYXNzTG9hZGVyKENsYXNzTG9hZGVyIGNsYXp6TG9hZGVyKSB7Ci0JCUJhc2VQZXJmb3JtYW5jZVRlc3RDYXNlLmNsYXp6TG9hZGVyID0gY2xhenpMb2FkZXI7Ci0JfQotCS8qKgotCSAqIEByZXR1cm4gUmV0dXJucyB0aGUgZmlsZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRGaWxlKCkgewotCQlyZXR1cm4gZmlsZTsKLQl9Ci0JLyoqCi0JICogQHBhcmFtIGZpbGUgVGhlIGZpbGUgdG8gc2V0LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgdm9pZCBzZXRGaWxlKFN0cmluZyBmaWxlKSB7Ci0JCUJhc2VQZXJmb3JtYW5jZVRlc3RDYXNlLmZpbGUgPSBmaWxlOwotCX0KLQkKLQkvKioKLQkgKiBAcGFyYW0gc3VpdGUKLQkgKiBAcGFyYW0gdGVzdAotCSAqIEBwYXJhbSBnbG9iYWwKLQkgKiBAcGFyYW0gc3RyaW5nCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyB2b2lkIGFkZFBlcmZvcm1hbmNlVGVzdChUZXN0U3VpdGUgc3VpdGUsIEJhc2VUZXN0Q2FzZSB0ZXN0LCBpbnQgdGFnZ2luZywgU3RyaW5nIHNob3J0TmFtZSkgewotCQlQZXJmb3JtYW5jZVRlc3RDYXNlV3JhcHBlciB0ZXN0Q2FzZSA9IG5ldyBQZXJmb3JtYW5jZVRlc3RDYXNlV3JhcHBlcih0ZXN0LCB0YWdnaW5nICwgc2hvcnROYW1lKTsKLQkJc3VpdGUuYWRkVGVzdCh0ZXN0Q2FzZSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmoyZWUudGVzdHMucGVyZm9ybWFuY2UvY29tbW9uL29yZy9lY2xpcHNlL2pzdC9qMmVlL3Rlc3RzL3BlcmZvcm1hbmNlL0VKQlByb2plY3RDcmVhdGlvblRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuajJlZS50ZXN0cy5wZXJmb3JtYW5jZS9jb21tb24vb3JnL2VjbGlwc2UvanN0L2oyZWUvdGVzdHMvcGVyZm9ybWFuY2UvRUpCUHJvamVjdENyZWF0aW9uVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjZkNGRjNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuajJlZS50ZXN0cy5wZXJmb3JtYW5jZS9jb21tb24vb3JnL2VjbGlwc2UvanN0L2oyZWUvdGVzdHMvcGVyZm9ybWFuY2UvRUpCUHJvamVjdENyZWF0aW9uVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmoyZWUudGVzdHMucGVyZm9ybWFuY2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlLkRpbWVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlLlBlcmZvcm1hbmNlVGVzdENhc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3RwLmoyZWUuaGVhZGxlc3MudGVzdHMuZWpiLm9wZXJhdGlvbnMuRUpCUHJvamVjdENyZWF0aW9uT3BlcmF0aW9uVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53dHAuajJlZS5oZWFkbGVzcy50ZXN0cy5qMmVlLm9wZXJhdGlvbnMuSmF2YUVFRmFjZXRDb25zdGFudHM7Ci0KLXB1YmxpYyBjbGFzcyBFSkJQcm9qZWN0Q3JlYXRpb25UZXN0Q2FzZSBleHRlbmRzIFBlcmZvcm1hbmNlVGVzdENhc2UgewotCi0JcHVibGljIHZvaWQgdGVzdEVKQjMwX0RlZmF1bHRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCURpbWVuc2lvbltdIGRpbXMgPSBuZXcgRGltZW5zaW9uW10geyBEaW1lbnNpb24uRUxBUFNFRF9QUk9DRVNTLCBEaW1lbnNpb24uVVNFRF9KQVZBX0hFQVAgfTsKLQkJdGFnQXNHbG9iYWxTdW1tYXJ5KCJFSkIgcHJvamVjdCBjcmVhdGlvbiIsIGRpbXMpOwotCQlzdGFydE1lYXN1cmluZygpOwotCQkKLQkJLy8gQ3JlYXRlIGFuIEVKQiAzLjAgcHJvamVjdCB3aXRoIGRlZmF1bHQgc2V0dGluZ3MKLQkJRUpCUHJvamVjdENyZWF0aW9uT3BlcmF0aW9uVGVzdC4KLQkJCWdldEVKQkRhdGFNb2RlbCgiZWpiMzBfZGVmYXVsdHMiLCAgICAgICAgICAgIC8qIHByb2pOYW1lICovCi0JCQkJCQkJbnVsbCwgICAgICAgICAgICAgICAgICAgICAgICAvKiBjbGllbnROYW1lICovCi0JCQkJCQkJbnVsbCwgICAgICAgICAgICAgICAgICAgICAgICAvKiBjbGllbnRTb3VyY2VGb2xkZXIgKi8KLQkJCQkJCQludWxsLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVhck5hbWUgKi8KLQkJCQkJCQlKYXZhRUVGYWNldENvbnN0YW50cy5FSkJfMywgIC8qIHZlcnNpb24gKi8KLQkJCQkJCQlmYWxzZSAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNyZWF0ZUREICovCi0JCQkpOwotCQkKLQkJc3RvcE1lYXN1cmluZygpOwotCQljb21taXRNZWFzdXJlbWVudHMoKTsKLQkJYXNzZXJ0UGVyZm9ybWFuY2UoKTsKLQl9Ci0JCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuajJlZS50ZXN0cy5wZXJmb3JtYW5jZS9jb21tb24vb3JnL2VjbGlwc2UvanN0L2oyZWUvdGVzdHMvcGVyZm9ybWFuY2UvSGVhZGVyUGFyc2VyUGVyZm9ybWFuY2VUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuajJlZS50ZXN0cy5wZXJmb3JtYW5jZS9jb21tb24vb3JnL2VjbGlwc2UvanN0L2oyZWUvdGVzdHMvcGVyZm9ybWFuY2UvSGVhZGVyUGFyc2VyUGVyZm9ybWFuY2VUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzYTc2ZTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmoyZWUudGVzdHMucGVyZm9ybWFuY2UvY29tbW9uL29yZy9lY2xpcHNlL2pzdC9qMmVlL3Rlc3RzL3BlcmZvcm1hbmNlL0hlYWRlclBhcnNlclBlcmZvcm1hbmNlVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMyICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmoyZWUudGVzdHMucGVyZm9ybWFuY2U7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuaW50ZXJuYWwuSjJFRVZlcnNpb25Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmplZS51dGlsLmludGVybmFsLkphdmFFRVF1aWNrUGVlazsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnRlc3RzLlByb2plY3RVdGlsaXR5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnd0cC5qMmVlLmhlYWRsZXNzLnRlc3RzLnBsdWdpbi5IZWFkbGVzc1Rlc3RzUGx1Z2luOwotCi1wdWJsaWMgY2xhc3MgSGVhZGVyUGFyc2VyUGVyZm9ybWFuY2VUZXN0IHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREFUQV9ESVIgPSAiVGVzdERhdGEiICsgamF2YS5pby5GaWxlLnNlcGFyYXRvckNoYXIgKyAiaGVhZGVyUGFyc2VyVGVzdERhdGEiICsgamF2YS5pby5GaWxlLnNlcGFyYXRvckNoYXI7Ci0JCi0JcHVibGljIHZvaWQgdGVzdFNwZWVkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUxpc3QgZGF0YSA9IGdldFhNTERhdGEoKTsKLQkJbG9uZ1tdIHRpbWVzID0gbmV3IGxvbmdbZGF0YS5zaXplKCldOwotCQlJbnB1dFN0cmVhbSBpbiA9IG51bGw7Ci0KLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBkYXRhLnNpemUoKTsgaSsrKSB7Ci0JCQl0cnkgewotCQkJCVRlc3REYXRhIHRlc3REYXRhID0gKFRlc3REYXRhKSBkYXRhLmdldChpKTsKLQkJCQlpbiA9IG5ldyBGaWxlSW5wdXRTdHJlYW0obmV3IEZpbGUoZ2V0RGF0YVBhdGgodGVzdERhdGEuZmlsZU5hbWUpKSk7Ci0JCQkJbG9uZyBzdGFydCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQkJCUphdmFFRVF1aWNrUGVlayBwZWVrID0gbmV3IEphdmFFRVF1aWNrUGVlayhpbik7Ci0JCQkJbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJCQl0aW1lc1tpXSA9IGVuZCAtIHN0YXJ0OwotCQkJCWlmICh0aW1lc1tpXSA9PSAwKSB7Ci0JCQkJCXRpbWVzW2ldID0gMTA7IC8vIHN0dWIgaW4gYSBtaW5pbXVtIHRpbWUKLQkJCQl9Ci0JCQkJQXNzZXJ0LmFzc2VydEVxdWFscyh0ZXN0RGF0YS50eXBlLCBwZWVrLmdldFR5cGUoKSk7Ci0JCQkJQXNzZXJ0LmFzc2VydEVxdWFscyh0ZXN0RGF0YS5tb2RWZXJzaW9uLCBwZWVrLmdldFZlcnNpb24oKSk7Ci0JCQkJQXNzZXJ0LmFzc2VydEVxdWFscyh0ZXN0RGF0YS5lZVZlcnNpb24sIHBlZWsuZ2V0SmF2YUVFVmVyc2lvbigpKTsKLQkJCX0gZmluYWxseSB7Ci0JCQkJaWYgKGluICE9IG51bGwpIHsKLQkJCQkJaW4uY2xvc2UoKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJLy8gYWxsIHRpbWVzIHNob3VsZCBiZSB0aGUgc2FtZQotCQlBcnJheXMuc29ydCh0aW1lcyk7Ci0JCWlmICh0aW1lc1swXSAqIDIgPCB0aW1lc1t0aW1lcy5sZW5ndGggLSAxXSkgewotCQkJQXNzZXJ0LmZhaWwoKTsKLQkJfQotCX0KLQkKLQlwcml2YXRlIExpc3QgZ2V0WE1MRGF0YSgpIHsKLQkJTGlzdCBkYXRhID0gbmV3IEFycmF5TGlzdCgpOwotCQlkYXRhLmFkZChuZXcgVGVzdERhdGEoImFwcGxpY2F0aW9uLWNsaWVudDEyLnhtbCIsIEoyRUVWZXJzaW9uQ29uc3RhbnRzLkFQUExJQ0FUSU9OX0NMSUVOVF9UWVBFLCBKMkVFVmVyc2lvbkNvbnN0YW50cy5KMkVFXzFfMl9JRCwgSjJFRVZlcnNpb25Db25zdGFudHMuSjJFRV8xXzJfSUQpKTsKLQkJZGF0YS5hZGQobmV3IFRlc3REYXRhKCJhcHBsaWNhdGlvbi1jbGllbnQxMy54bWwiLCBKMkVFVmVyc2lvbkNvbnN0YW50cy5BUFBMSUNBVElPTl9DTElFTlRfVFlQRSwgSjJFRVZlcnNpb25Db25zdGFudHMuSjJFRV8xXzNfSUQsIEoyRUVWZXJzaW9uQ29uc3RhbnRzLkoyRUVfMV8zX0lEKSk7Ci0JCWRhdGEuYWRkKG5ldyBUZXN0RGF0YSgiYXBwbGljYXRpb24tY2xpZW50MTQueG1sIiwgSjJFRVZlcnNpb25Db25zdGFudHMuQVBQTElDQVRJT05fQ0xJRU5UX1RZUEUsIEoyRUVWZXJzaW9uQ29uc3RhbnRzLkoyRUVfMV80X0lELCBKMkVFVmVyc2lvbkNvbnN0YW50cy5KMkVFXzFfNF9JRCkpOwotCQlkYXRhLmFkZChuZXcgVGVzdERhdGEoImFwcGxpY2F0aW9uLWNsaWVudDUueG1sIiwgSjJFRVZlcnNpb25Db25zdGFudHMuQVBQTElDQVRJT05fQ0xJRU5UX1RZUEUsIEoyRUVWZXJzaW9uQ29uc3RhbnRzLkpFRV81XzBfSUQsIEoyRUVWZXJzaW9uQ29uc3RhbnRzLkpFRV81XzBfSUQpKTsKLQotCQlkYXRhLmFkZChuZXcgVGVzdERhdGEoImFwcGxpY2F0aW9uMTIueG1sIiwgSjJFRVZlcnNpb25Db25zdGFudHMuQVBQTElDQVRJT05fVFlQRSwgSjJFRVZlcnNpb25Db25zdGFudHMuSjJFRV8xXzJfSUQsIEoyRUVWZXJzaW9uQ29uc3RhbnRzLkoyRUVfMV8yX0lEKSk7Ci0JCWRhdGEuYWRkKG5ldyBUZXN0RGF0YSgiYXBwbGljYXRpb24xMy54bWwiLCBKMkVFVmVyc2lvbkNvbnN0YW50cy5BUFBMSUNBVElPTl9UWVBFLCBKMkVFVmVyc2lvbkNvbnN0YW50cy5KMkVFXzFfM19JRCwgSjJFRVZlcnNpb25Db25zdGFudHMuSjJFRV8xXzNfSUQpKTsKLQkJZGF0YS5hZGQobmV3IFRlc3REYXRhKCJhcHBsaWNhdGlvbjE0LnhtbCIsIEoyRUVWZXJzaW9uQ29uc3RhbnRzLkFQUExJQ0FUSU9OX1RZUEUsIEoyRUVWZXJzaW9uQ29uc3RhbnRzLkoyRUVfMV80X0lELCBKMkVFVmVyc2lvbkNvbnN0YW50cy5KMkVFXzFfNF9JRCkpOwotCQlkYXRhLmFkZChuZXcgVGVzdERhdGEoImFwcGxpY2F0aW9uNS54bWwiLCBKMkVFVmVyc2lvbkNvbnN0YW50cy5BUFBMSUNBVElPTl9UWVBFLCBKMkVFVmVyc2lvbkNvbnN0YW50cy5KRUVfNV8wX0lELCBKMkVFVmVyc2lvbkNvbnN0YW50cy5KRUVfNV8wX0lEKSk7Ci0KLQkJZGF0YS5hZGQobmV3IFRlc3REYXRhKCJlamItamFyMTEueG1sIiwgSjJFRVZlcnNpb25Db25zdGFudHMuRUpCX1RZUEUsIEoyRUVWZXJzaW9uQ29uc3RhbnRzLkVKQl8xXzFfSUQsIEoyRUVWZXJzaW9uQ29uc3RhbnRzLkoyRUVfMV8yX0lEKSk7Ci0JCWRhdGEuYWRkKG5ldyBUZXN0RGF0YSgiZWpiLWphcjIwLnhtbCIsIEoyRUVWZXJzaW9uQ29uc3RhbnRzLkVKQl9UWVBFLCBKMkVFVmVyc2lvbkNvbnN0YW50cy5FSkJfMl8wX0lELCBKMkVFVmVyc2lvbkNvbnN0YW50cy5KMkVFXzFfM19JRCkpOwotCQlkYXRhLmFkZChuZXcgVGVzdERhdGEoImVqYi1qYXIyMS54bWwiLCBKMkVFVmVyc2lvbkNvbnN0YW50cy5FSkJfVFlQRSwgSjJFRVZlcnNpb25Db25zdGFudHMuRUpCXzJfMV9JRCwgSjJFRVZlcnNpb25Db25zdGFudHMuSjJFRV8xXzRfSUQpKTsKLQkJZGF0YS5hZGQobmV3IFRlc3REYXRhKCJlamItamFyMzAueG1sIiwgSjJFRVZlcnNpb25Db25zdGFudHMuRUpCX1RZUEUsIEoyRUVWZXJzaW9uQ29uc3RhbnRzLkVKQl8zXzBfSUQsIEoyRUVWZXJzaW9uQ29uc3RhbnRzLkpFRV81XzBfSUQpKTsKLQotCQlkYXRhLmFkZChuZXcgVGVzdERhdGEoInJhMTAueG1sIiwgSjJFRVZlcnNpb25Db25zdGFudHMuQ09OTkVDVE9SX1RZUEUsIEoyRUVWZXJzaW9uQ29uc3RhbnRzLkpDQV8xXzBfSUQsIEoyRUVWZXJzaW9uQ29uc3RhbnRzLkoyRUVfMV8zX0lEKSk7Ci0JCWRhdGEuYWRkKG5ldyBUZXN0RGF0YSgicmExNS54bWwiLCBKMkVFVmVyc2lvbkNvbnN0YW50cy5DT05ORUNUT1JfVFlQRSwgSjJFRVZlcnNpb25Db25zdGFudHMuSkNBXzFfNV9JRCwgSjJFRVZlcnNpb25Db25zdGFudHMuSjJFRV8xXzRfSUQpKTsKLQotCQlkYXRhLmFkZChuZXcgVGVzdERhdGEoIndlYjIyLnhtbCIsIEoyRUVWZXJzaW9uQ29uc3RhbnRzLldFQl9UWVBFLCBKMkVFVmVyc2lvbkNvbnN0YW50cy5XRUJfMl8yX0lELCBKMkVFVmVyc2lvbkNvbnN0YW50cy5KMkVFXzFfMl9JRCkpOwotCQlkYXRhLmFkZChuZXcgVGVzdERhdGEoIndlYjIzLnhtbCIsIEoyRUVWZXJzaW9uQ29uc3RhbnRzLldFQl9UWVBFLCBKMkVFVmVyc2lvbkNvbnN0YW50cy5XRUJfMl8zX0lELCBKMkVFVmVyc2lvbkNvbnN0YW50cy5KMkVFXzFfM19JRCkpOwotCQlkYXRhLmFkZChuZXcgVGVzdERhdGEoIndlYjI0LnhtbCIsIEoyRUVWZXJzaW9uQ29uc3RhbnRzLldFQl9UWVBFLCBKMkVFVmVyc2lvbkNvbnN0YW50cy5XRUJfMl80X0lELCBKMkVFVmVyc2lvbkNvbnN0YW50cy5KMkVFXzFfNF9JRCkpOwotCQlkYXRhLmFkZChuZXcgVGVzdERhdGEoIndlYjI1LnhtbCIsIEoyRUVWZXJzaW9uQ29uc3RhbnRzLldFQl9UWVBFLCBKMkVFVmVyc2lvbkNvbnN0YW50cy5XRUJfMl81X0lELCBKMkVFVmVyc2lvbkNvbnN0YW50cy5KRUVfNV8wX0lEKSk7Ci0KLQkJLy8gdGVzdCBzb21lIGJvZ3VzIGRkcyBhcyB3ZWxsCi0JCWRhdGEuYWRkKG5ldyBUZXN0RGF0YSgibm90eG1sLnhtbCIsIEoyRUVWZXJzaW9uQ29uc3RhbnRzLlVOS05PV04sIEoyRUVWZXJzaW9uQ29uc3RhbnRzLlVOS05PV04sIEoyRUVWZXJzaW9uQ29uc3RhbnRzLlVOS05PV04pKTsKLQkJZGF0YS5hZGQobmV3IFRlc3REYXRhKCJub3RqYXZhZWUueG1sIiwgSjJFRVZlcnNpb25Db25zdGFudHMuVU5LTk9XTiwgSjJFRVZlcnNpb25Db25zdGFudHMuVU5LTk9XTiwgSjJFRVZlcnNpb25Db25zdGFudHMuVU5LTk9XTikpOwotCi0JCWRhdGEuYWRkKG5ldyBUZXN0RGF0YSgiYXBwbGljYXRpb24tY2xpZW50MC54bWwiLCBKMkVFVmVyc2lvbkNvbnN0YW50cy5BUFBMSUNBVElPTl9DTElFTlRfVFlQRSwgSjJFRVZlcnNpb25Db25zdGFudHMuVU5LTk9XTiwgSjJFRVZlcnNpb25Db25zdGFudHMuVU5LTk9XTikpOwotCQlkYXRhLmFkZChuZXcgVGVzdERhdGEoImFwcGxpY2F0aW9uLWNsaWVudDAwLnhtbCIsIEoyRUVWZXJzaW9uQ29uc3RhbnRzLkFQUExJQ0FUSU9OX0NMSUVOVF9UWVBFLCBKMkVFVmVyc2lvbkNvbnN0YW50cy5VTktOT1dOLCBKMkVFVmVyc2lvbkNvbnN0YW50cy5VTktOT1dOKSk7Ci0JCWRhdGEuYWRkKG5ldyBUZXN0RGF0YSgiYXBwbGljYXRpb24tY2xpZW50MDAwLnhtbCIsIEoyRUVWZXJzaW9uQ29uc3RhbnRzLkFQUExJQ0FUSU9OX0NMSUVOVF9UWVBFLCBKMkVFVmVyc2lvbkNvbnN0YW50cy5VTktOT1dOLCBKMkVFVmVyc2lvbkNvbnN0YW50cy5VTktOT1dOKSk7Ci0KLQkJZGF0YS5hZGQobmV3IFRlc3REYXRhKCJhcHBsaWNhdGlvbjAueG1sIiwgSjJFRVZlcnNpb25Db25zdGFudHMuQVBQTElDQVRJT05fVFlQRSwgSjJFRVZlcnNpb25Db25zdGFudHMuVU5LTk9XTiwgSjJFRVZlcnNpb25Db25zdGFudHMuVU5LTk9XTikpOwotCQlkYXRhLmFkZChuZXcgVGVzdERhdGEoImFwcGxpY2F0aW9uMDAueG1sIiwgSjJFRVZlcnNpb25Db25zdGFudHMuQVBQTElDQVRJT05fVFlQRSwgSjJFRVZlcnNpb25Db25zdGFudHMuVU5LTk9XTiwgSjJFRVZlcnNpb25Db25zdGFudHMuVU5LTk9XTikpOwotCQlkYXRhLmFkZChuZXcgVGVzdERhdGEoImFwcGxpY2F0aW9uMDAwLnhtbCIsIEoyRUVWZXJzaW9uQ29uc3RhbnRzLkFQUExJQ0FUSU9OX1RZUEUsIEoyRUVWZXJzaW9uQ29uc3RhbnRzLlVOS05PV04sIEoyRUVWZXJzaW9uQ29uc3RhbnRzLlVOS05PV04pKTsKLQotCQlkYXRhLmFkZChuZXcgVGVzdERhdGEoImVqYi1qYXIwLnhtbCIsIEoyRUVWZXJzaW9uQ29uc3RhbnRzLkVKQl9UWVBFLCBKMkVFVmVyc2lvbkNvbnN0YW50cy5VTktOT1dOLCBKMkVFVmVyc2lvbkNvbnN0YW50cy5VTktOT1dOKSk7Ci0JCWRhdGEuYWRkKG5ldyBUZXN0RGF0YSgiZWpiLWphcjAwLnhtbCIsIEoyRUVWZXJzaW9uQ29uc3RhbnRzLkVKQl9UWVBFLCBKMkVFVmVyc2lvbkNvbnN0YW50cy5VTktOT1dOLCBKMkVFVmVyc2lvbkNvbnN0YW50cy5VTktOT1dOKSk7Ci0JCWRhdGEuYWRkKG5ldyBUZXN0RGF0YSgiZWpiLWphcjAwMC54bWwiLCBKMkVFVmVyc2lvbkNvbnN0YW50cy5FSkJfVFlQRSwgSjJFRVZlcnNpb25Db25zdGFudHMuVU5LTk9XTiwgSjJFRVZlcnNpb25Db25zdGFudHMuVU5LTk9XTikpOwotCi0JCWRhdGEuYWRkKG5ldyBUZXN0RGF0YSgicmEwLnhtbCIsIEoyRUVWZXJzaW9uQ29uc3RhbnRzLkNPTk5FQ1RPUl9UWVBFLCBKMkVFVmVyc2lvbkNvbnN0YW50cy5VTktOT1dOLCBKMkVFVmVyc2lvbkNvbnN0YW50cy5VTktOT1dOKSk7Ci0JCWRhdGEuYWRkKG5ldyBUZXN0RGF0YSgicmEwMC54bWwiLCBKMkVFVmVyc2lvbkNvbnN0YW50cy5DT05ORUNUT1JfVFlQRSwgSjJFRVZlcnNpb25Db25zdGFudHMuVU5LTk9XTiwgSjJFRVZlcnNpb25Db25zdGFudHMuVU5LTk9XTikpOwotCQlkYXRhLmFkZChuZXcgVGVzdERhdGEoInJhMDAwLnhtbCIsIEoyRUVWZXJzaW9uQ29uc3RhbnRzLkNPTk5FQ1RPUl9UWVBFLCBKMkVFVmVyc2lvbkNvbnN0YW50cy5VTktOT1dOLCBKMkVFVmVyc2lvbkNvbnN0YW50cy5VTktOT1dOKSk7Ci0KLQkJZGF0YS5hZGQobmV3IFRlc3REYXRhKCJ3ZWIwLnhtbCIsIEoyRUVWZXJzaW9uQ29uc3RhbnRzLldFQl9UWVBFLCBKMkVFVmVyc2lvbkNvbnN0YW50cy5VTktOT1dOLCBKMkVFVmVyc2lvbkNvbnN0YW50cy5VTktOT1dOKSk7Ci0JCWRhdGEuYWRkKG5ldyBUZXN0RGF0YSgid2ViMDAueG1sIiwgSjJFRVZlcnNpb25Db25zdGFudHMuV0VCX1RZUEUsIEoyRUVWZXJzaW9uQ29uc3RhbnRzLlVOS05PV04sIEoyRUVWZXJzaW9uQ29uc3RhbnRzLlVOS05PV04pKTsKLQkJZGF0YS5hZGQobmV3IFRlc3REYXRhKCJ3ZWIwMDAueG1sIiwgSjJFRVZlcnNpb25Db25zdGFudHMuV0VCX1RZUEUsIEoyRUVWZXJzaW9uQ29uc3RhbnRzLlVOS05PV04sIEoyRUVWZXJzaW9uQ29uc3RhbnRzLlVOS05PV04pKTsKLQkJcmV0dXJuIGRhdGE7Ci0JfQotCQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0RGF0YVBhdGgoU3RyaW5nIHNob3J0TmFtZSkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUhlYWRsZXNzVGVzdHNQbHVnaW4gcGx1Z2luID0gSGVhZGxlc3NUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCk7Ci0JCVN0cmluZyBwbHVnaW5SZWxhdGl2ZUZpbGVOYW1lID0gREFUQV9ESVIgKyBqYXZhLmlvLkZpbGUuc2VwYXJhdG9yQ2hhciArIHNob3J0TmFtZTsKLQkJcmV0dXJuIFByb2plY3RVdGlsaXR5LmdldEZ1bGxGaWxlTmFtZShwbHVnaW4sIHBsdWdpblJlbGF0aXZlRmlsZU5hbWUpOwotCX0KLQkKLQlwcml2YXRlIGNsYXNzIFRlc3REYXRhIHsKLQkJU3RyaW5nIGZpbGVOYW1lOwotCi0JCWludCB0eXBlOwotCi0JCWludCBtb2RWZXJzaW9uOwotCi0JCWludCBlZVZlcnNpb247Ci0KLQkJQ2xhc3MgbW9kZWxPYmplY3RJbnRlcmZhY2U7Ci0KLQkJcHVibGljIFRlc3REYXRhKFN0cmluZyBmaWxlTmFtZSwgaW50IHR5cGUsIGludCBtb2RWZXJzaW9uLCBpbnQgZWVWZXJzaW9uKSB7Ci0JCQl0aGlzLmZpbGVOYW1lID0gZmlsZU5hbWU7Ci0JCQl0aGlzLnR5cGUgPSB0eXBlOwotCQkJdGhpcy5tb2RWZXJzaW9uID0gbW9kVmVyc2lvbjsKLQkJCXRoaXMuZWVWZXJzaW9uID0gZWVWZXJzaW9uOwotCQl9Ci0KLQkJcHVibGljIFRlc3REYXRhKFN0cmluZyBmaWxlTmFtZSwgaW50IHR5cGUsIGludCBtb2RWZXJzaW9uLCBpbnQgZWVWZXJzaW9uLCBDbGFzcyBtb2RlbFR5cGVDbGFzcykgewotCQkJdGhpcyhmaWxlTmFtZSwgdHlwZSwgbW9kVmVyc2lvbiwgZWVWZXJzaW9uKTsKLQkJCXRoaXMubW9kZWxPYmplY3RJbnRlcmZhY2UgPSBtb2RlbFR5cGVDbGFzczsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qMmVlLnRlc3RzLnBlcmZvcm1hbmNlL2NvbW1vbi9vcmcvZWNsaXBzZS9qc3QvajJlZS90ZXN0cy9wZXJmb3JtYW5jZS9QZXJmb3JtYW5jZVBsdWdpbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmoyZWUudGVzdHMucGVyZm9ybWFuY2UvY29tbW9uL29yZy9lY2xpcHNlL2pzdC9qMmVlL3Rlc3RzL3BlcmZvcm1hbmNlL1BlcmZvcm1hbmNlUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkNTViNzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmoyZWUudGVzdHMucGVyZm9ybWFuY2UvY29tbW9uL29yZy9lY2xpcHNlL2pzdC9qMmVlL3Rlc3RzL3BlcmZvcm1hbmNlL1BlcmZvcm1hbmNlUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qMmVlLnRlc3RzLnBlcmZvcm1hbmNlOwotCi1pbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIFBlcmZvcm1hbmNlUGx1Z2luIGV4dGVuZHMgQWJzdHJhY3RVSVBsdWdpbiB7Ci0JLy9UaGUgc2hhcmVkIGluc3RhbmNlLgotCXByaXZhdGUgc3RhdGljIFBlcmZvcm1hbmNlUGx1Z2luIHBsdWdpbjsKLQkvL1Jlc291cmNlIGJ1bmRsZS4KLQlwcml2YXRlIFJlc291cmNlQnVuZGxlIHJlc291cmNlQnVuZGxlOwotCQotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3Rvci4KLQkgKi8KLQlwdWJsaWMgUGVyZm9ybWFuY2VQbHVnaW4oKSB7Ci0JCXN1cGVyKCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHVwb24gcGx1Zy1pbiBhY3RpdmF0aW9uCi0JICovCi0JcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RhcnQoY29udGV4dCk7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIHBsdWctaW4gaXMgc3RvcHBlZAotCSAqLwotCXB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RvcChjb250ZXh0KTsKLQkJcGx1Z2luID0gbnVsbDsKLQkJcmVzb3VyY2VCdW5kbGUgPSBudWxsOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFBlcmZvcm1hbmNlUGx1Z2luIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc3RyaW5nIGZyb20gdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKiBvciAna2V5JyBpZiBub3QgZm91bmQuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UmVzb3VyY2VTdHJpbmcoU3RyaW5nIGtleSkgewotCQlSZXNvdXJjZUJ1bmRsZSBidW5kbGUgPSBQZXJmb3JtYW5jZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UmVzb3VyY2VCdW5kbGUoKTsKLQkJdHJ5IHsKLQkJCXJldHVybiAoYnVuZGxlICE9IG51bGwpID8gYnVuZGxlLmdldFN0cmluZyhrZXkpIDoga2V5OwotCQl9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIGtleTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2VCdW5kbGUgZ2V0UmVzb3VyY2VCdW5kbGUoKSB7Ci0JCXRyeSB7Ci0JCQlpZiAocmVzb3VyY2VCdW5kbGUgPT0gbnVsbCkKLQkJCQlyZXNvdXJjZUJ1bmRsZSA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZSgib3JnLmVjbGlwc2UuanN0LmoyZWUudGVzdHMucGVyZm9ybWFuY2UuUGVyZm9ybWFuY2VQbHVnaW5SZXNvdXJjZXMiKTsKLQkJfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIHgpIHsKLQkJCXJlc291cmNlQnVuZGxlID0gbnVsbDsKLQkJfQotCQlyZXR1cm4gcmVzb3VyY2VCdW5kbGU7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmoyZWUudGVzdHMucGVyZm9ybWFuY2UvY29tbW9uL29yZy9lY2xpcHNlL2pzdC9qMmVlL3Rlc3RzL3BlcmZvcm1hbmNlL1BlcmZvcm1hbmNlVGVzdENhc2VXcmFwcGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuajJlZS50ZXN0cy5wZXJmb3JtYW5jZS9jb21tb24vb3JnL2VjbGlwc2UvanN0L2oyZWUvdGVzdHMvcGVyZm9ybWFuY2UvUGVyZm9ybWFuY2VUZXN0Q2FzZVdyYXBwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGY4N2M4OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuajJlZS50ZXN0cy5wZXJmb3JtYW5jZS9jb21tb24vb3JnL2VjbGlwc2UvanN0L2oyZWUvdGVzdHMvcGVyZm9ybWFuY2UvUGVyZm9ybWFuY2VUZXN0Q2FzZVdyYXBwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MiArMCwwIEBACi0vKgotICogQ3JlYXRlZCBvbiBOb3YgMjQsIDIwMDQKLSAqCi0gKiBUT0RPIFRvIGNoYW5nZSB0aGUgdGVtcGxhdGUgZm9yIHRoaXMgZ2VuZXJhdGVkIGZpbGUgZ28gdG8KLSAqIFdpbmRvdyAtIFByZWZlcmVuY2VzIC0gSmF2YSAtIENvZGUgU3R5bGUgLSBDb2RlIFRlbXBsYXRlcwotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qMmVlLnRlc3RzLnBlcmZvcm1hbmNlOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlLkRpbWVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlLlBlcmZvcm1hbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnRlc3QucGVyZm9ybWFuY2UuUGVyZm9ybWFuY2VUZXN0Q2FzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnRlc3RzLkJhc2VUZXN0Q2FzZTsKLQotLyoqCi0gKiBAYXV0aG9yIEFkbWluCi0gKgotICogVE9ETyBUbyBjaGFuZ2UgdGhlIHRlbXBsYXRlIGZvciB0aGlzIGdlbmVyYXRlZCB0eXBlIGNvbW1lbnQgZ28gdG8KLSAqIFdpbmRvdyAtIFByZWZlcmVuY2VzIC0gSmF2YSAtIENvZGUgU3R5bGUgLSBDb2RlIFRlbXBsYXRlcwotICovCi1wdWJsaWMgIGNsYXNzIFBlcmZvcm1hbmNlVGVzdENhc2VXcmFwcGVyIGV4dGVuZHMgUGVyZm9ybWFuY2VUZXN0Q2FzZSB7Ci0JcHJvdGVjdGVkIEJhc2VUZXN0Q2FzZSBmVGVzdDsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBOT05FID0gMDsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMT0NBTCA9IDE7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xPQkFMID0gMjsJCi0JCi0JcHJpdmF0ZSBib29sZWFuIHRhZ0FzR2xvYmFsU3VtbWFyeTsKLQlwcml2YXRlIGJvb2xlYW4gdGFnQXNTdW1tYXJ5OwotCXByaXZhdGUgU3RyaW5nIHNob3J0TmFtZTsKLQkKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJVEVSQVRJT05TID0gMTA7Ci0KLQlwdWJsaWMgUGVyZm9ybWFuY2VUZXN0Q2FzZVdyYXBwZXIoQmFzZVRlc3RDYXNlIHRlc3QsIAotCQkJCQkJCQkJaW50IHRhZ2dpbmcsCi0JCQkJCQkJCQlTdHJpbmcgc2hvcnROYW1lKSB7Ci0JCWZUZXN0PXRlc3Q7Ci0JCXRhZ0FzR2xvYmFsU3VtbWFyeSA9ICgodGFnZ2luZyAmIEdMT0JBTCkgIT0gMCk7Ci0JICAgIHRhZ0FzU3VtbWFyeSA9ICgodGFnZ2luZyAmIExPQ0FMKSAhPSAwKTsKLQkgICAgdGhpcy5zaG9ydE5hbWUgPSAgc2hvcnROYW1lOwotCX0KLQkKLQlwdWJsaWMgaW50IGNvdW50VGVzdENhc2VzKCkgewotCQlyZXR1cm4gZlRlc3QuY291bnRUZXN0Q2FzZXMoKTsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQkJcmV0dXJuIGZUZXN0LnRvU3RyaW5nKCk7Ci0JfQotCi0JcHVibGljIFRlc3QgZ2V0VGVzdCgpIHsKLQkJcmV0dXJuIGZUZXN0OwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlLlBlcmZvcm1hbmNlVGVzdENhc2Ujc2V0VXAoKQotCSAqLwotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWZUZXN0LnNldFVwVGVzdCgpOwotCX0KLQkKLQlwcm90ZWN0ZWQgdm9pZCBiYXNpY1NldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVBlcmZvcm1hbmNlIHBlcmZvcm1hbmNlPSBQZXJmb3JtYW5jZS5nZXREZWZhdWx0KCk7Ci0JCWZQZXJmb3JtYW5jZU1ldGVyPSBwZXJmb3JtYW5jZS5jcmVhdGVQZXJmb3JtYW5jZU1ldGVyKHBlcmZvcm1hbmNlLmdldERlZmF1bHRTY2VuYXJpb0lkKGZUZXN0KSk7Ci0JfQotCi0JCi0JLyoqCi0JICogUnVucyB0aGUgYmFyZSB0ZXN0IHNlcXVlbmNlLgotCSAqIEBleGNlcHRpb24gVGhyb3dhYmxlIGlmIGFueSBleGNlcHRpb24gaXMgdGhyb3duCi0JICovCi0JcHVibGljIHZvaWQgcnVuQmFyZSgpIHRocm93cyBUaHJvd2FibGUgewotCQliYXNpY1NldFVwKCk7Ci0JCXRhZ0lmTmVjZXNzYXJ5KHNob3J0TmFtZSwgRGltZW5zaW9uLkNQVV9USU1FKTsKLQkJdHJ5IHsKLQkJCWZvciAoaW50IGk9IDA7IGkgPCBJVEVSQVRJT05TOyBpKyspIHsKLQkJCQlzZXRVcCgpOwotCQkJCXN0YXJ0TWVhc3VyaW5nKCk7Ci0JCQkJcnVuVGVzdCgpOwotCQkJCXN0b3BNZWFzdXJpbmcoKTsKLQkJCX0KLQkJfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKLQkJCS8vIGxvZyB0aGUgZXJyb3IsIHRocm93biBieSB0aGUgSlVuaXQgdGVzdCwgaW4gdGhlIGNvbnNvbGUgYW5kIHJlLXRocm93IGl0Ci0JCQl0LnByaW50U3RhY2tUcmFjZSgpOwotCQkJdGhyb3cgdDsKLQkJfSBmaW5hbGx5IHsKLQkJCWNvbW1pdE1lYXN1cmVtZW50cygpOwotCQkJYXNzZXJ0UGVyZm9ybWFuY2UoKTsKLQkJCXRlYXJEb3duKCk7Ci0JCX0KLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3J1blRlc3QoKQotCSAqLwotCXByb3RlY3RlZCB2b2lkIHJ1blRlc3QoKSB0aHJvd3MgVGhyb3dhYmxlIHsKLQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCQlmVGVzdC5ydW5Db3JlVGVzdCgpOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlLlBlcmZvcm1hbmNlVGVzdENhc2UjdGVhckRvd24oKQotCSAqLwotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQkJZlRlc3QudGVhckRvd25UZXN0KCk7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXROYW1lKGphdmEubGFuZy5TdHJpbmcpCi0JICovCi0JcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkgewotCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0JCWZUZXN0LnNldE5hbWUobmFtZSk7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNnZXROYW1lKCkKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQkJcmV0dXJuIGZUZXN0LmdldE5hbWUoKTsKLQl9Ci0JCi0gICAgLyoqCi0gICAgICogQW5zd2VycyB3aGV0aGVyIHRoaXMgdGVzdCBzaG91bGQgYmUgdGFnZ2VkIGdsb2JhbGx5LgotICAgICAqIAotICAgICAqIEByZXR1cm4gd2hldGhlciB0aGlzIHRlc3Qgc2hvdWxkIGJlIHRhZ2dlZCBnbG9iYWxseQotICAgICAqLwotICAgIHByaXZhdGUgYm9vbGVhbiBzaG91bGRHbG9iYWxseVRhZygpIHsKLSAgICAJcmV0dXJuIHRhZ0FzR2xvYmFsU3VtbWFyeTsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQW5zd2VycyB3aGV0aGVyIHRoaXMgdGVzdCBzaG91bGQgYmUgdGFnZ2VkIGxvY2FsbHkuCi0gICAgICogCi0gICAgICogQHJldHVybiB3aGV0aGVyIHRoaXMgdGVzdCBzaG91bGQgYmUgdGFnZ2VkIGxvY2FsbHkKLSAgICAgKi8KLSAgICBwcml2YXRlIGJvb2xlYW4gc2hvdWxkTG9jYWxseVRhZygpIHsKLSAgICAJcmV0dXJuIHRhZ0FzU3VtbWFyeTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgdGFnSWZOZWNlc3NhcnkoU3RyaW5nIHNob3J0TmFtZSwgRGltZW5zaW9uIGRpbWVuc2lvbikgewotCQlpZiAoc2hvdWxkR2xvYmFsbHlUYWcoKSkgewotCQkJdGFnQXNHbG9iYWxTdW1tYXJ5KHNob3J0TmFtZSwgZGltZW5zaW9uKTsKLQkJfQotCQlpZiAoc2hvdWxkTG9jYWxseVRhZygpKSB7Ci0JCQl0YWdBc1N1bW1hcnkoc2hvcnROYW1lLCBkaW1lbnNpb24pOwotCQl9Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRhZ0lmTmVjZXNzYXJ5KFN0cmluZyBzaG9ydE5hbWUsIERpbWVuc2lvbiBbXSBkaW1lbnNpb25zKSB7Ci0JCWlmIChzaG91bGRHbG9iYWxseVRhZygpKSB7Ci0JCQl0YWdBc0dsb2JhbFN1bW1hcnkoc2hvcnROYW1lLCBkaW1lbnNpb25zKTsKLQkJfQotCQlpZiAoc2hvdWxkTG9jYWxseVRhZygpKSB7Ci0JCQl0YWdBc1N1bW1hcnkoc2hvcnROYW1lLCBkaW1lbnNpb25zKTsKLQkJfQotCX0KLQkKLQkKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qMmVlLnRlc3RzLnBlcmZvcm1hbmNlL2NvbW1vbi9vcmcvZWNsaXBzZS9qc3QvajJlZS90ZXN0cy9wZXJmb3JtYW5jZS9QZXJmb3JtYW5jZVRlc3RPYmplY3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qMmVlLnRlc3RzLnBlcmZvcm1hbmNlL2NvbW1vbi9vcmcvZWNsaXBzZS9qc3QvajJlZS90ZXN0cy9wZXJmb3JtYW5jZS9QZXJmb3JtYW5jZVRlc3RPYmplY3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODAzOTM0ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuajJlZS50ZXN0cy5wZXJmb3JtYW5jZS9jb21tb24vb3JnL2VjbGlwc2UvanN0L2oyZWUvdGVzdHMvcGVyZm9ybWFuY2UvUGVyZm9ybWFuY2VUZXN0T2JqZWN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKgotICogQ3JlYXRlZCBvbiBOb3YgMjYsIDIwMDQKLSAqCi0gKiBUT0RPIFRvIGNoYW5nZSB0aGUgdGVtcGxhdGUgZm9yIHRoaXMgZ2VuZXJhdGVkIGZpbGUgZ28gdG8KLSAqIFdpbmRvdyAtIFByZWZlcmVuY2VzIC0gSmF2YSAtIENvZGUgU3R5bGUgLSBDb2RlIFRlbXBsYXRlcwotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qMmVlLnRlc3RzLnBlcmZvcm1hbmNlOwotCi0vKioKLSAqIEBhdXRob3IgQWRtaW4KLSAqCi0gKiBUT0RPIFRvIGNoYW5nZSB0aGUgdGVtcGxhdGUgZm9yIHRoaXMgZ2VuZXJhdGVkIHR5cGUgY29tbWVudCBnbyB0bwotICogV2luZG93IC0gUHJlZmVyZW5jZXMgLSBKYXZhIC0gQ29kZSBTdHlsZSAtIENvZGUgVGVtcGxhdGVzCi0gKi8KLXB1YmxpYyBjbGFzcyBQZXJmb3JtYW5jZVRlc3RPYmplY3QgewotCWludCB0YWdnaW5nOwotCVN0cmluZyBzaG9ydE5hbWU7Ci0JU3RyaW5nIG5hbWU7Ci0JLyoqCi0JICogCi0JICovCi0JcHVibGljIFBlcmZvcm1hbmNlVGVzdE9iamVjdChTdHJpbmcgbmFtZSxpbnQgdGFnZ2luZywgU3RyaW5nIHNob3J0bmFtZSkgewotCQlzdXBlcigpOwotCQl0aGlzLnRhZ2dpbmcgPSB0YWdnaW5nOwotCQl0aGlzLm5hbWUgPSBuYW1lOwotCQl0aGlzLnNob3J0TmFtZSA9IHNob3J0bmFtZTsKLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuIFJldHVybnMgdGhlIG5hbWUuCi0JICovCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotCQlyZXR1cm4gbmFtZTsKLQl9Ci0JLyoqCi0JICogQHJldHVybiBSZXR1cm5zIHRoZSBzaG9ydE5hbWUuCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRTaG9ydE5hbWUoKSB7Ci0JCXJldHVybiBzaG9ydE5hbWU7Ci0JfQotCS8qKgotCSAqIEByZXR1cm4gUmV0dXJucyB0aGUgdGFnZ2luZy4KLQkgKi8KLQlwdWJsaWMgaW50IGdldFRhZ2dpbmcoKSB7Ci0JCXJldHVybiB0YWdnaW5nOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qMmVlLnRlc3RzLnBlcmZvcm1hbmNlL2NvbW1vbi9vcmcvZWNsaXBzZS9qc3QvajJlZS90ZXN0cy9wZXJmb3JtYW5jZS9QZXJmb3JtYW5jZVRlc3RTdWl0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmoyZWUudGVzdHMucGVyZm9ybWFuY2UvY29tbW9uL29yZy9lY2xpcHNlL2pzdC9qMmVlL3Rlc3RzL3BlcmZvcm1hbmNlL1BlcmZvcm1hbmNlVGVzdFN1aXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhMjgzMTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmoyZWUudGVzdHMucGVyZm9ybWFuY2UvY29tbW9uL29yZy9lY2xpcHNlL2pzdC9qMmVlL3Rlc3RzL3BlcmZvcm1hbmNlL1BlcmZvcm1hbmNlVGVzdFN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioKLSAqIAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qMmVlLnRlc3RzLnBlcmZvcm1hbmNlOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udGVzdHMuQmFzZVRlc3RDYXNlOwotCi0vKioKLSAqIEBhdXRob3IgaXRld2sKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBQZXJmb3JtYW5jZVRlc3RTdWl0ZSBleHRlbmRzIFRlc3RTdWl0ZSB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfU0lNUExFX05BTUUgPSAiUGVyZm9ybWFuY2UgVGVzdCI7Ci0JCi0JLyoqCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgUGVyZm9ybWFuY2VUZXN0U3VpdGUoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIGFkZFRlc3QoVGVzdCB0ZXN0KSB7Ci0JCS8vbXVzdCBiZSBhIEJhc2VUZXN0Q2FzZSBzbyBpdCBjYW4gYmUgd3JhcHBlZCBpbiBhIFBlcmZvcm1hbmNlVGVzdENhc2VXcmFwcGVyCi0JCWlmKHRlc3QgaW5zdGFuY2VvZiBCYXNlVGVzdENhc2UpIHsKLQkJCVBlcmZvcm1hbmNlVGVzdENhc2VXcmFwcGVyIHBlcmZvcm1hbmNlVGVzdCA9IG5ldyBQZXJmb3JtYW5jZVRlc3RDYXNlV3JhcHBlcigKLQkJCQkJKEJhc2VUZXN0Q2FzZSl0ZXN0LFBlcmZvcm1hbmNlVGVzdENhc2VXcmFwcGVyLkdMT0JBTCxERUZBVUxUX1NJTVBMRV9OQU1FKTsKLQkJCXN1cGVyLmFkZFRlc3QocGVyZm9ybWFuY2VUZXN0KTsKLQkJfQotCX0KLQkKLQkvKioKLQkgKiAKLQkgKi8KLQlwdWJsaWMgdm9pZCBhZGRUZXN0KFRlc3QgdGVzdCwgU3RyaW5nIHNpbXBsZU5hbWUpIHsKLQkJLy9tdXN0IGJlIGEgQmFzZVRlc3RDYXNlIHNvIGl0IGNhbiBiZSB3cmFwcGVkIGluIGEgUGVyZm9ybWFuY2VUZXN0Q2FzZVdyYXBwZXIKLQkJaWYodGVzdCBpbnN0YW5jZW9mIEJhc2VUZXN0Q2FzZSkgewotCQkJUGVyZm9ybWFuY2VUZXN0Q2FzZVdyYXBwZXIgcGVyZm9ybWFuY2VUZXN0ID0gbmV3IFBlcmZvcm1hbmNlVGVzdENhc2VXcmFwcGVyKAotCQkJCQkoQmFzZVRlc3RDYXNlKXRlc3QsUGVyZm9ybWFuY2VUZXN0Q2FzZVdyYXBwZXIuR0xPQkFMLHNpbXBsZU5hbWUpOwotCQkJc3VwZXIuYWRkVGVzdChwZXJmb3JtYW5jZVRlc3QpOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmoyZWUudGVzdHMucGVyZm9ybWFuY2UvY29tbW9uL29yZy9lY2xpcHNlL2pzdC9qMmVlL3Rlc3RzL3BlcmZvcm1hbmNlL1Rlc3RDYXNlU0FYUGFyc2VyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuajJlZS50ZXN0cy5wZXJmb3JtYW5jZS9jb21tb24vb3JnL2VjbGlwc2UvanN0L2oyZWUvdGVzdHMvcGVyZm9ybWFuY2UvVGVzdENhc2VTQVhQYXJzZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzE4OWVhMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuajJlZS50ZXN0cy5wZXJmb3JtYW5jZS9jb21tb24vb3JnL2VjbGlwc2UvanN0L2oyZWUvdGVzdHMvcGVyZm9ybWFuY2UvVGVzdENhc2VTQVhQYXJzZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzOSArMCwwIEBACi0vKgotICogQ3JlYXRlZCBvbiBOb3YgMjksIDIwMDQKLSAqCi0gKiBUT0RPIFRvIGNoYW5nZSB0aGUgdGVtcGxhdGUgZm9yIHRoaXMgZ2VuZXJhdGVkIGZpbGUgZ28gdG8KLSAqIFdpbmRvdyAtIFByZWZlcmVuY2VzIC0gSmF2YSAtIENvZGUgU3R5bGUgLSBDb2RlIFRlbXBsYXRlcwotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qMmVlLnRlc3RzLnBlcmZvcm1hbmNlOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5TQVhQYXJzZXI7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuU0FYUGFyc2VyRmFjdG9yeTsKLQotaW1wb3J0IG9yZy54bWwuc2F4LkF0dHJpYnV0ZXM7Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uOwotaW1wb3J0IG9yZy54bWwuc2F4LmhlbHBlcnMuRGVmYXVsdEhhbmRsZXI7Ci0KLS8qKgotICogQGF1dGhvciBBZG1pbgotICoKLSAqIFRPRE8gVG8gY2hhbmdlIHRoZSB0ZW1wbGF0ZSBmb3IgdGhpcyBnZW5lcmF0ZWQgdHlwZSBjb21tZW50IGdvIHRvCi0gKiBXaW5kb3cgLSBQcmVmZXJlbmNlcyAtIEphdmEgLSBDb2RlIFN0eWxlIC0gQ29kZSBUZW1wbGF0ZXMKLSAqLwotcHVibGljIGNsYXNzIFRlc3RDYXNlU0FYUGFyc2VyIGV4dGVuZHMgRGVmYXVsdEhhbmRsZXIgewotCXByaXZhdGUgc3RhdGljIE1hcCBwZXJmb3JtYW5jZUNhc2VzID0gbnVsbDsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9DQVNFID0gInRlc3RDYXNlIjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0xBU1MgPSAiY2xhc3MiOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBNRVRIT0QgPSAibWV0aG9kIjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0hPUlRfTkFNRSA9ICJzaG9ydE5hbWUiOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUdHSU5HID0gInRhZ2dpbmciOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBNRVRIT0RfTkFNRSA9ICJuYW1lIjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgR0xPQkFMID0gIkdMT0JBTCI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIExPQ0FMID0gIkxPQ0FMIjsKLQlwcml2YXRlIHN0YXRpYyBDbGFzcyBjdXJyZW50Q2xhenogPSBudWxsOwotCQotCi0JCi0JcHVibGljIE1hcCBkb0xvYWQoRmlsZSBmaWxlKSB7Ci0JCSBwZXJmb3JtYW5jZUNhc2VzID0gbmV3IEhhc2hNYXAoKTsKLQkJIERlZmF1bHRIYW5kbGVyIGhhbmRsZXIgPSBuZXcgVGVzdENhc2VTQVhQYXJzZXIoKTsKLQkJIFNBWFBhcnNlckZhY3RvcnkgZmFjdG9yeSA9IFNBWFBhcnNlckZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLQkJIHRyeSB7Ci0JCSAgU0FYUGFyc2VyIHNheFBhcnNlciA9IGZhY3RvcnkubmV3U0FYUGFyc2VyKCk7Ci0JCSAgc2F4UGFyc2VyLnBhcnNlKGZpbGUgLCBoYW5kbGVyICk7Ci0JCSB9Ci0JCSBjYXRjaCAoUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBleCkgewotCQkgIFN5c3RlbS5lcnIucHJpbnRsbiAoIkZhaWxlZCB0byBjcmVhdGUgU0FYIHBhcnNlcjoiICsgZXgpOwotCQkgfQotCQkgY2F0Y2ggKFNBWEV4Y2VwdGlvbiBleCkgewotCQkgIFN5c3RlbS5lcnIucHJpbnRsbiAoIlNBWCBwYXJzZXIgZXhjZWVwdGlvbjoiICsgZXgpOwotCQkgfQotCQkgY2F0Y2ggKElPRXhjZXB0aW9uIGV4KSB7Ci0JCSAgU3lzdGVtLmVyci5wcmludGxuICgiSU8gZXhlY2VwdGlvbjoiICsgZXgpOwotCQkgfQotCQkgY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBleCkgewotCQkgIFN5c3RlbS5lcnIucHJpbnRsbiAoIkludmFsaWQgZmlsZSBhcmd1bWVudCIgKyBleCk7Ci0JCSB9Ci0JCSByZXR1cm4gcGVyZm9ybWFuY2VDYXNlczsKLQkgfQotCQotCSBwdWJsaWMgdm9pZCBzdGFydEVsZW1lbnQoU3RyaW5nIHVyaSwgU3RyaW5nIGxvY2FsTmFtZSwgCi0JICBTdHJpbmcgcXVhbGlmaWVkTmFtZSwgQXR0cmlidXRlcyBhdHRyaWJ1dGVzKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHsKLQkgCWlmIChxdWFsaWZpZWROYW1lLmVxdWFscyhURVNUX0NBU0UpKSB7Ci0JCSAgZm9yIChpbnQgaSA9IDA7IGk8IGF0dHJpYnV0ZXMuZ2V0TGVuZ3RoKCk7IGkrKykgewotCQkgICAgaWYgKGF0dHJpYnV0ZXMuZ2V0UU5hbWUoaSkuZXF1YWxzSWdub3JlQ2FzZShDTEFTUykpIHsKLQkJICAgIAl0cnkgewotCQkgICAgCQljdXJyZW50Q2xhenogPSBsb2FkQ2xhc3MoYXR0cmlidXRlcy5nZXRWYWx1ZShpKSk7Ci0JCQkJCWlmIChwZXJmb3JtYW5jZUNhc2VzLmdldChjdXJyZW50Q2xhenopID09IG51bGwpIHsKLQkJCSAgICAJCUFycmF5TGlzdCBtZXRob2RMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCQkJICAgIAkJcGVyZm9ybWFuY2VDYXNlcy5wdXQoY3VycmVudENsYXp6LG1ldGhvZExpc3QpOwotCQkgICAgCQl9Ci0JCQkJfSBjYXRjaCAoQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCWN1cnJlbnRDbGF6eiA9IG51bGw7Ci0JCQkJCSBTeXN0ZW0uZXJyLnByaW50bG4gKCJGYWlsZWQgdG8gbG9hZCBjbGFzczoiICsgYXR0cmlidXRlcy5nZXRWYWx1ZShpKSk7Ci0JCQkJCS8vZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCQl9Ci0JCSAgICB9IC8vIGVuZCBvZiBpZgotCQkgIH0gLy8gZW5kIG9mIGZvcgotCSAJfSAvLyBlbmQgb2YgaWYgVEVTVF9DQVNFCi0JIAllbHNlIGlmIChxdWFsaWZpZWROYW1lLmVxdWFsc0lnbm9yZUNhc2UoTUVUSE9EKSkgewotCSAJCSBTdHJpbmcgbWV0aG9kTmFtZSA9IG51bGw7Ci0JIAkJIGludCB0YWdnaW5nID0gMDsKLQkgCQkgU3RyaW5nIHNob3J0TmFtZSA9IG51bGw7Ci0JIAkJIAotCSAJCSBpZiAoY3VycmVudENsYXp6ID09IG51bGwpIHJldHVybjsKLQkgCQkgCi0JIAkJIGZvciAoaW50IGkgPSAwOyBpPCBhdHRyaWJ1dGVzLmdldExlbmd0aCgpOyBpKyspIHsKLQkgCQkgICAgaWYgKGF0dHJpYnV0ZXMuZ2V0UU5hbWUoaSkuZXF1YWxzSWdub3JlQ2FzZShNRVRIT0RfTkFNRSkpIHsKLQkgCQkgICAgCW1ldGhvZE5hbWUgPSBhdHRyaWJ1dGVzLmdldFZhbHVlKGkpOwotCSAJCSAgICB9IAotCSAJCSAgICBlbHNlIGlmIChhdHRyaWJ1dGVzLmdldFFOYW1lKGkpLmVxdWFsc0lnbm9yZUNhc2UoVEFHR0lORykpewotCSAJCSAgICAJaWYgKGF0dHJpYnV0ZXMuZ2V0VmFsdWUoaSkuZXF1YWxzSWdub3JlQ2FzZShHTE9CQUwpKSB7Ci0JIAkJICAgIAkJdGFnZ2luZyA9IFBlcmZvcm1hbmNlVGVzdENhc2VXcmFwcGVyLkdMT0JBTDsKLQkgCQkgICAgCX0gZWxzZSBpZiAoYXR0cmlidXRlcy5nZXRWYWx1ZShpKS5lcXVhbHNJZ25vcmVDYXNlKExPQ0FMKSkgewotCSAJCSAgICAJCXRhZ2dpbmcgPSBQZXJmb3JtYW5jZVRlc3RDYXNlV3JhcHBlci5MT0NBTDsKLQkgCQkgICAgCX0gZWxzZSB7Ci0JIAkJICAgIAkJdGFnZ2luZyA9IFBlcmZvcm1hbmNlVGVzdENhc2VXcmFwcGVyLk5PTkU7Ci0JIAkJICAgIAl9Ci0JIAkJIAl9IGVsc2UgaWYoYXR0cmlidXRlcy5nZXRRTmFtZShpKS5lcXVhbHNJZ25vcmVDYXNlKFNIT1JUX05BTUUpKSB7Ci0JIAkJIAkJc2hvcnROYW1lID0gYXR0cmlidXRlcy5nZXRWYWx1ZShpKTsKLQkgCQkJfQotCSAJCSB9IC8vIGVuZCBvZiBmb3IKLQkgCQkgTGlzdCBtZXRob2RMaXN0ID0gKExpc3QpIHBlcmZvcm1hbmNlQ2FzZXMuZ2V0KGN1cnJlbnRDbGF6eik7Ci0JIAkJIG1ldGhvZExpc3QuYWRkKG5ldyBQZXJmb3JtYW5jZVRlc3RPYmplY3QobWV0aG9kTmFtZSx0YWdnaW5nLHNob3J0TmFtZSkpOwotCSAJIH0KLQkgfQotCi0JIHB1YmxpYyB2b2lkIGVuZEVsZW1lbnQoU3RyaW5nIHVyaSwgU3RyaW5nIGxvY2FsTmFtZSwgU3RyaW5nIHF1YWxpZmllZE5hbWUpCi0JICAgICB0aHJvd3MgU0FYRXhjZXB0aW9uIHsKLQkgICAgaWYgKHF1YWxpZmllZE5hbWUuZXF1YWxzKFRFU1RfQ0FTRSkpIHsKLQkgIAkJY3VycmVudENsYXp6ID0gbnVsbDsKLQkgIAl9Ci0JIH0KLQkgCi0JIC8qKgotCSAqIExvYWRzIHRoZSB0ZXN0IHN1aXRlIGNsYXNzLgotCSAqLwotCSBwcml2YXRlIENsYXNzIGxvYWRDbGFzcyhTdHJpbmcgY2xhc3NOYW1lKSB0aHJvd3MgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiB7Ci0JCWlmIChjbGFzc05hbWUgPT0gbnVsbCkgCi0JCQlyZXR1cm4gbnVsbDsKLQkJcmV0dXJuIGdldENsYXNzTG9hZGVyKCkubG9hZENsYXNzKGNsYXNzTmFtZSk7Ci0JIH0KLQkgCi0JIC8qKgotCSAqIFRoZSBjbGFzcyBsb2FkZXIgdG8gYmUgdXNlZCBmb3IgbG9hZGluZyB0ZXN0cy4KLQkgKiBTdWJjbGFzc2VzIG1heSBvdmVycmlkZSB0byB1c2UgYW5vdGhlciBjbGFzcyBsb2FkZXIuCi0JICovCi0JIHByb3RlY3RlZCBDbGFzc0xvYWRlciBnZXRDbGFzc0xvYWRlcigpIHsKLQkJcmV0dXJuIEJhc2VQZXJmb3JtYW5jZVRlc3RDYXNlLmdldENsYXNzTG9hZGVyKCk7Ci0JIH0KLQkgCi19Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qMmVlLnRlc3RzLnBlcmZvcm1hbmNlL2NvbW1vbi9vcmcvZWNsaXBzZS9qc3QvajJlZS90ZXN0cy9wZXJmb3JtYW5jZS9XVFBIZWFkbGVzc1BlcmZvcm1hbmNlVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qMmVlLnRlc3RzLnBlcmZvcm1hbmNlL2NvbW1vbi9vcmcvZWNsaXBzZS9qc3QvajJlZS90ZXN0cy9wZXJmb3JtYW5jZS9XVFBIZWFkbGVzc1BlcmZvcm1hbmNlVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTE4Y2RjMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuajJlZS50ZXN0cy5wZXJmb3JtYW5jZS9jb21tb24vb3JnL2VjbGlwc2UvanN0L2oyZWUvdGVzdHMvcGVyZm9ybWFuY2UvV1RQSGVhZGxlc3NQZXJmb3JtYW5jZVRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi0vKioKLSAqIAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qMmVlLnRlc3RzLnBlcmZvcm1hbmNlOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53dHAuajJlZS5oZWFkbGVzcy50ZXN0cy5lYXIub3BlcmF0aW9ucy5FQVJQcm9qZWN0Q3JlYXRpb25PcGVyYXRpb25UZXN0OwotCi0vKioKLSAqIEBhdXRob3IgaXRld2sKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBXVFBIZWFkbGVzc1BlcmZvcm1hbmNlVGVzdHMgZXh0ZW5kcyBQZXJmb3JtYW5jZVRlc3RTdWl0ZSB7Ci0JcHVibGljIFdUUEhlYWRsZXNzUGVyZm9ybWFuY2VUZXN0cygpIHsKLQkJc3VwZXIoIkFsbCBXVFAgSGVhZGxlc3MgUGVyZm9ybWFuY2VzIFRlc3RzIik7Ci0JCQotCQlhZGRUZXN0KG5ldyBFQVJQcm9qZWN0Q3JlYXRpb25PcGVyYXRpb25UZXN0KCJ0ZXN0RUFSMTRfV2l0aERlcGVuZGVuY2llcyIpLCAiVGVzdCBFQVIgMS40IFByb2plY3QgQ3JlYXRpb24gd2l0aCBEZXBlbmRpbmNpZXMiKTsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCl7Ci0JCXJldHVybiBuZXcgV1RQSGVhZGxlc3NQZXJmb3JtYW5jZVRlc3RzKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmoyZWUudGVzdHMucGVyZm9ybWFuY2UvcGx1Z2luLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qMmVlLnRlc3RzLnBlcmZvcm1hbmNlL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1ZTU1YmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmoyZWUudGVzdHMucGVyZm9ybWFuY2UvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+Ci08cGx1Z2luCi0gICBpZD0ib3JnLmVjbGlwc2UuanN0LmoyZWUudGVzdHMucGVyZm9ybWFuY2UiCi0gICBuYW1lPSJQZXJmb3JtYW5jZSBQbHVnLWluIgotICAgdmVyc2lvbj0iMS4xLjAiCi0gICBwcm92aWRlci1uYW1lPSIiCi0gICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LmoyZWUudGVzdHMucGVyZm9ybWFuY2UuUGVyZm9ybWFuY2VQbHVnaW4iPgotCi0gICA8cnVudGltZT4KLSAgICAgIDxsaWJyYXJ5IG5hbWU9InBlcmZvcm1hbmNlLmphciI+Ci0gICAgICAgICA8ZXhwb3J0IG5hbWU9IioiLz4KLSAgICAgIDwvbGlicmFyeT4KLSAgIDwvcnVudGltZT4KLQotICAgPHJlcXVpcmVzPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnVpIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UudGVzdC5wZXJmb3JtYW5jZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5qdW5pdCIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC5jb21tb24udGVzdHMiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5qc3QuajJlZS5jb3JlIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuanN0LmoyZWUudGVzdHMiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZSIvPgotICAgPC9yZXF1aXJlcz4KLQotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud2ViX3Rlc3RzLmZlYXR1cmUucGF0Y2gvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud2ViX3Rlc3RzLmZlYXR1cmUucGF0Y2gvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiZWMzNDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndlYl90ZXN0cy5mZWF0dXJlLnBhdGNoLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanN0LndlYl90ZXN0cy5mZWF0dXJlLnBhdGNoPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZU5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndlYl90ZXN0cy5mZWF0dXJlLnBhdGNoL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud2ViX3Rlc3RzLmZlYXR1cmUucGF0Y2gvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRmOTNhOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud2ViX3Rlc3RzLmZlYXR1cmUucGF0Y2gvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IGZlYXR1cmUueG1sCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud2ViX3Rlc3RzLmZlYXR1cmUucGF0Y2gvZmVhdHVyZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud2ViX3Rlc3RzLmZlYXR1cmUucGF0Y2gvZmVhdHVyZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYTljYzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndlYl90ZXN0cy5mZWF0dXJlLnBhdGNoL2ZlYXR1cmUueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxmZWF0dXJlCi0gICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndlYl90ZXN0cy5mZWF0dXJlLnBhdGNoIgotICAgICAgbGFiZWw9IlBhdGNoIGZlYXR1cmUgZm9yIHRlc3RzIgotICAgICAgdmVyc2lvbj0iMy4xLjIucXVhbGlmaWVyIgotICAgICAgcHJvdmlkZXItbmFtZT0iRWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0iPgotCi0gICA8cmVxdWlyZXM+Ci0gICAgICA8aW1wb3J0IGZlYXR1cmU9Im9yZy5lY2xpcHNlLmpzdC53ZWJfdGVzdHMuZmVhdHVyZSIgdmVyc2lvbj0iMy4xLjEudjIwMDkwODEyMTYwOS03OTRGWi1FVlZGSXdGaFJ0TG5XVyIgcGF0Y2g9InRydWUiLz4KLSAgIDwvcmVxdWlyZXM+Ci0gICAKLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3QuajJlZS50ZXN0cyIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotICAgICAgICAgCi08L2ZlYXR1cmU+Cg==