ZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQuY29yZS50ZXN0cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC5jb3JlLnRlc3RzLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0YzVlMzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC5jb3JlLnRlc3RzLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC5jb3JlLnRlc3RzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC5jb3JlLnRlc3RzLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNWZjYWNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQuY29yZS50ZXN0cy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQuY29yZS50ZXN0czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjhhMDEwOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi0jRnJpIFNlcCAyNSAyMjo0NzozNCBHTVQgMjAwOQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRjMDAwZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LmNvcmUudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC5jb3JlLnRlc3RzCi1CdW5kbGUtVmVyc2lvbjogMS4wLjAucXVhbGlmaWVyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LmNvcmUudGVzdHMuRVhTTFRDb3JlVGVzdHNQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmp1bml0O2J1bmRsZS12ZXJzaW9uPSIzLjguMiIsCi0gb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcztidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQotQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LmNvcmUuaW50ZXJuYWwucmVzb2x2ZXIudGVzdHM7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LmNvcmUudGVzdHMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQuY29yZS50ZXN0cy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC5jb3JlLnRlc3RzL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC5jb3JlLnRlc3RzL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQuY29yZS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC5jb3JlLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyOTU5NzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC5jb3JlLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi1zb3VyY2UuLiA9IHNyYy8KLW91dHB1dC4uID0gYmluLwotYmluLmluY2x1ZGVzID0gTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIC4sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcwotc3JjLmluY2x1ZGVzID0gcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgc3JjLyxcCi0gICAgICAgICAgICAgICBidWlsZC5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQuY29yZS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQuY29yZS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTE5YWZkZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LmNvcmUudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNQcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS50ZXN0cwotcGx1Z2luTmFtZSA9IEVYU0xUIENvcmUgUGx1Z2luIFRlc3RzCi1wcm92aWRlck5hbWUgPSBFY2xpcHNlLm9yZwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9leHNsdC9jb3JlL2ludGVybmFsL3Jlc29sdmVyL3Rlc3RzL0VYU0xUUmVzb2x2ZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvZXhzbHQvY29yZS9pbnRlcm5hbC9yZXNvbHZlci90ZXN0cy9FWFNMVFJlc29sdmVyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjIzZmQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9leHNsdC9jb3JlL2ludGVybmFsL3Jlc29sdmVyL3Rlc3RzL0VYU0xUUmVzb2x2ZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQuY29yZS5pbnRlcm5hbC5yZXNvbHZlci50ZXN0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQuY29yZS5pbnRlcm5hbC5FWFNMVENvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC5jb3JlLmludGVybmFsLnJlc29sdmVyLkVYU0xUUmVzb2x2ZXJFeHRlbnNpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLXB1YmxpYyBjbGFzcyBFWFNMVFJlc29sdmVyVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQkKLQlwcml2YXRlIEVYU0xUUmVzb2x2ZXJFeHRlbnNpb24gcmVzb2x2ZXIgPSBudWxsOwotCQotCUBPdmVycmlkZQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnNldFVwKCk7Ci0JCXJlc29sdmVyID0gbmV3IEVYU0xUUmVzb2x2ZXJFeHRlbnNpb24oKTsKLQl9Ci0JCi0KLQlwdWJsaWMgdm9pZCB0ZXN0Q29tbW9uTmFtZXNwYWNlKCkgewotCQlTdHJpbmcgbmFtZXNwYWNlID0gRVhTTFRDb3JlLkVYU0xUX0NPTU1PTl9OQU1FU1BBQ0U7Ci0JCVN0cmluZyB1cmkgPSByZXNvbHZlci5yZXNvbHZlKG51bGwsIG51bGwsIG5hbWVzcGFjZSwgbnVsbCk7Ci0JCWFzc2VydFRydWUoIkRpZCBub3QgZmluZCBodHRwOi8vZXhzbHQub3JnL2NvbW1vbiIsIHVyaS5jb250YWlucygiL3NjaGVtYXMvY29tbW9uLnhzZCIpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFVSSU5vdFJlc29sdmVkKCkgewotCQlTdHJpbmcgbmFtZXNwYWNlID0gImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIjsKLQkJU3RyaW5nIHVyaSA9IHJlc29sdmVyLnJlc29sdmUobnVsbCwgbnVsbCwgbmFtZXNwYWNlLCBudWxsKTsKLQkJYXNzZXJ0TnVsbCgiRm91bmQgaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLCB1cmkpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9leHNsdC9jb3JlL3Rlc3RzL0VYU0xUQ29yZVRlc3RTdWl0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2V4c2x0L2NvcmUvdGVzdHMvRVhTTFRDb3JlVGVzdFN1aXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjMDgwM2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2V4c2x0L2NvcmUvdGVzdHMvRVhTTFRDb3JlVGVzdFN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC5jb3JlLnRlc3RzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC5jb3JlLmludGVybmFsLnJlc29sdmVyLnRlc3RzLkVYU0xUUmVzb2x2ZXJUZXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotcHVibGljIGNsYXNzIEVYU0xUQ29yZVRlc3RTdWl0ZSBleHRlbmRzIFRlc3RTdWl0ZSB7Ci0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IEVYU0xUQ29yZVRlc3RTdWl0ZSgpOwotCX0KLQotCXB1YmxpYyBFWFNMVENvcmVUZXN0U3VpdGUoKSB7Ci0JCXN1cGVyKCJFWFNMVCBDb3JlIFRlc3QgU3VpdGUiKTsKLQkJYWRkVGVzdFN1aXRlKEVYU0xUUmVzb2x2ZXJUZXN0LmNsYXNzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvZXhzbHQvY29yZS90ZXN0cy9FWFNMVENvcmVUZXN0c1BsdWdpbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2V4c2x0L2NvcmUvdGVzdHMvRVhTTFRDb3JlVGVzdHNQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjRjYTMxZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvZXhzbHQvY29yZS90ZXN0cy9FWFNMVENvcmVUZXN0c1BsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LmNvcmUudGVzdHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OwotCi0vKioKLSAqIFRoZSBhY3RpdmF0b3IgY2xhc3MgY29udHJvbHMgdGhlIHBsdWctaW4gbGlmZSBjeWNsZQotICovCi1wdWJsaWMgY2xhc3MgRVhTTFRDb3JlVGVzdHNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCi0JLy8gVGhlIHBsdWctaW4gSUQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC5jb3JlLnRlc3RzIjsKLQotCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UKLQlwcml2YXRlIHN0YXRpYyBFWFNMVENvcmVUZXN0c1BsdWdpbiBwbHVnaW47Ci0JCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yCi0JICovCi0JcHVibGljIEVYU0xUQ29yZVRlc3RzUGx1Z2luKCkgewotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbnMjc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCi0JICovCi0JcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RhcnQoY29udGV4dCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCi0JICovCi0JcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlwbHVnaW4gPSBudWxsOwotCQlzdXBlci5zdG9wKGNvbnRleHQpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZQotCSAqCi0JICogQHJldHVybiB0aGUgc2hhcmVkIGluc3RhbmNlCi0JICovCi0JcHVibGljIHN0YXRpYyBFWFNMVENvcmVUZXN0c1BsdWdpbiBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC51aS50ZXN0cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC51aS50ZXN0cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGM1ZTMxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQudWkudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpLnRlc3RzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC51aS50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzY0Y2YwNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpLnRlc3RzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC51aS50ZXN0czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTRkYjk0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi0jVHVlIFNlcCAyOSAyMTo0MjowMCBHTVQgMjAwOQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Y2NkZDY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC51aS50ZXN0cwotQnVuZGxlLVZlcnNpb246IDEuMC4wLnF1YWxpZmllcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC51aS50ZXN0cy5FWFNMVFVJVGVzdHNQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLnVpLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLnRlc3RzO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjAsMi4wLjApIiwKLSBvcmcuanVuaXQ7YnVuZGxlLXZlcnNpb249IjMuOC4wIiwKLSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0O2J1bmRsZS12ZXJzaW9uPSJbMy40LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcztidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMi4wLjApIgotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41Ci1CdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC50ZXN0O3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC51aS50ZXN0cwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC51aS50ZXN0cy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC51aS50ZXN0cy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTk5ZGYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQudWkudGVzdHMvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC51aS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC51aS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTFjMzI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQudWkudGVzdHMvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLXNvdXJjZS4uID0gc3JjLwotb3V0cHV0Li4gPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgLixcCi0gICAgICAgICAgICAgICBwcm9qZWN0ZmlsZXMvLFwKLSAgICAgICAgICAgICAgIGJpbi8sXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbAotc3JjLmluY2x1ZGVzID0gcHJvamVjdGZpbGVzLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC51aS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI3ODgzYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jUHJvcGVydGllcyBmaWxlIGZvciBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUudGVzdHMKLXBsdWdpbk5hbWUgPSBFWFNMVCBVSSBQbHVnaW4gVGVzdHMKLXByb3ZpZGVyTmFtZSA9IEVjbGlwc2Uub3JnClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC51aS50ZXN0cy9wcm9qZWN0ZmlsZXMvY29tbW9uRWxlbWVudHMueHNsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC51aS50ZXN0cy9wcm9qZWN0ZmlsZXMvY29tbW9uRWxlbWVudHMueHNsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTE0MjFjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQudWkudGVzdHMvcHJvamVjdGZpbGVzL2NvbW1vbkVsZW1lbnRzLnhzbAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIxLjAiIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgotICAgICB4bWxuczpjb21tb249Imh0dHA6Ly9leHNsdC5vcmcvY29tbW9uIgotICAgICBleHRlbnNpb24tZWxlbWVudC1wcmVmaXhlcz0iY29tbW9uIj4KLQk8eHNsOnRlbXBsYXRlIG1hdGNoPSIvIj4KLSAgICAgICAgICAgICAgICAgICAgCi0JPC94c2w6dGVtcGxhdGU+Ci08L3hzbDpzdHlsZXNoZWV0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQudWkudGVzdHMvcHJvamVjdGZpbGVzL2NvbW1vblhwYXRoRnVuY3Rpb25zLnhzbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQudWkudGVzdHMvcHJvamVjdGZpbGVzL2NvbW1vblhwYXRoRnVuY3Rpb25zLnhzbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQ4ZGJhZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpLnRlc3RzL3Byb2plY3RmaWxlcy9jb21tb25YcGF0aEZ1bmN0aW9ucy54c2wKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzbDpzdHlsZXNoZWV0IHZlcnNpb249IjEuMCIgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCi0gICAgIHhtbG5zOmNvbW1vbj0iaHR0cDovL2V4c2x0Lm9yZy9jb21tb24iCi0gICAgIGV4dGVuc2lvbi1lbGVtZW50LXByZWZpeGVzPSJjb21tb24iPgotCTx4c2w6dGVtcGxhdGUgbWF0Y2g9Ii8iPgotICAgICAgICA8eHNsOmlmIHRlc3Q9IiI+Ci0gICAgICAgIAotICAgICAgICA8L3hzbDppZj4KLSAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiIvPiAgICAgICAgICAgIAotCTwveHNsOnRlbXBsYXRlPgotPC94c2w6c3R5bGVzaGVldD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2V4c2x0L3VpL2ludGVybmFsL2NvbnRlbnRhc3Npc3QvdGVzdC9FWFNMVENvbW1vbkNvbnRlbnRBc3Npc3RUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2V4c2x0L3VpL2ludGVybmFsL2NvbnRlbnRhc3Npc3QvdGVzdC9FWFNMVENvbW1vbkNvbnRlbnRBc3Npc3RUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkZjk0MWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9leHNsdC91aS9pbnRlcm5hbC9jb250ZW50YXNzaXN0L3Rlc3QvRVhTTFRDb21tb25Db250ZW50QXNzaXN0VGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QudGVzdDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5CYWRMb2NhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmNvbnRlbnRhc3Npc3QuSUNvbXBsZXRpb25Qcm9wb3NhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuRVhTTFRDb21tb25Db250ZW50QXNzaXN0UHJvY2Vzc29yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQudWkudGVzdHMuRVhTTFRVSVRlc3RzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wudWkudGVzdHMuQWJzdHJhY3RTb3VyY2VWaWV3ZXJUZXN0OwotCi0KLXB1YmxpYyBjbGFzcyBFWFNMVENvbW1vbkNvbnRlbnRBc3Npc3RUZXN0IGV4dGVuZHMgQWJzdHJhY3RTb3VyY2VWaWV3ZXJUZXN0IHsKLQkKLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlpZiAoIWZUZXN0UHJvamVjdEluaXRpYWxpemVkKQotCQl7Ci0JCQlnZXRBbmRDcmVhdGVQcm9qZWN0KCk7Ci0JCQlGaWxlIHNyY0RpciA9IEVYU0xUVUlUZXN0c1BsdWdpbi5nZXRUZXN0RmlsZSgiLyIgKyBQUk9KRUNUX0ZJTEVTKTsKLQkJCVN0cmluZyBkZXN0aW5hdGlvblByb2plY3RTdHJpbmcgPSBmVGVzdFByb2plY3QuZ2V0TG9jYXRpb24oKS50b09TU3RyaW5nKCk7Ci0JCQlTdHJpbmcgZGVzdGluYXRpb25Gb2xkZXIgPSBkZXN0aW5hdGlvblByb2plY3RTdHJpbmcgKyAiLyI7Ci0JCQlGaWxlIHRhcmdldERpciA9IG5ldyBGaWxlKGRlc3RpbmF0aW9uRm9sZGVyKTsKLQkJCWNvcHlEaXIoc3JjRGlyLCB0YXJnZXREaXIpOwotCi0JCQlmVGVzdFByb2plY3QucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JCQlmVGVzdFByb2plY3RJbml0aWFsaXplZCA9IHRydWU7Ci0JCX0KLQkJCi0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3REb2N1bWVudEVsZW1lbnRQcm9wc29hbEF2YWlsYWJsZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlmaWxlTmFtZSA9ICJjb21tb25FbGVtZW50cy54c2wiOwotCQlTdHJpbmcgeHNsRmlsZVBhdGggPSBwcm9qZWN0TmFtZSArIEZpbGUuc2VwYXJhdG9yICsgZmlsZU5hbWU7Ci0JCWxvYWRGaWxlRm9yVGVzdGluZyh4c2xGaWxlUGF0aCk7Ci0JCXRyeSB7Ci0JCQlJQ29tcGxldGlvblByb3Bvc2FsW10gcHJvcG9zYWxzID0gZ2V0WE1MUHJvcG9zYWxzKDUsOSk7Ci0JCQlhc3NlcnROb3ROdWxsKCJEaWQgbm90IGZpbmQgcHJvcG9zYWxzLiIsIHByb3Bvc2Fscyk7Ci0KLQkJCWZvciAoSUNvbXBsZXRpb25Qcm9wb3NhbCBwcm9wb3NhbCA6IHByb3Bvc2FscykgewotCQkJCWlmIChwcm9wb3NhbC5nZXREaXNwbGF5U3RyaW5nKCkuZXF1YWxzKCJjb21tb246ZG9jdW1lbnQiKSkgewotCQkJCQlyZXR1cm47Ci0JCQkJfQotCQkJfQotCQl9IGZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQkJCi0JCWZhaWwoIkRpZCBub3QgZmluZCBFWFNMVCBDb21tb25kIGRvY3VtZW50IGVsZW1lbnQgaW4gcHJvcG9zYWwgbGlzdC4iKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdE5vZGVTZXRGdW5jdGlvbkV4aXN0cygpICB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZmlsZU5hbWUgPSAiY29tbW9uWHBhdGhGdW5jdGlvbnMueHNsIjsKLQkJU3RyaW5nIHhzbEZpbGVQYXRoID0gcHJvamVjdE5hbWUgKyBGaWxlLnNlcGFyYXRvciArIGZpbGVOYW1lOwotCQlsb2FkRmlsZUZvclRlc3RpbmcoeHNsRmlsZVBhdGgpOwotCQl0cnkgewotCQkJSUNvbXBsZXRpb25Qcm9wb3NhbFtdIHByb3Bvc2FscyA9IGdldFByb3Bvc2Fscyg1LDIzKTsKLQkJCWFzc2VydE5vdE51bGwoIkRpZCBub3QgZmluZCBwcm9wb3NhbHMuIiwgcHJvcG9zYWxzKTsKLQotCQkJZm9yIChJQ29tcGxldGlvblByb3Bvc2FsIHByb3Bvc2FsIDogcHJvcG9zYWxzKSB7Ci0JCQkJaWYgKHByb3Bvc2FsLmdldERpc3BsYXlTdHJpbmcoKS5lcXVhbHMoImNvbW1vbjpub2RlLXNldCggKSIpKSB7Ci0JCQkJCXJldHVybjsKLQkJCQl9Ci0JCQl9Ci0JCX0gZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCQkKLQkJZmFpbCgiRGlkIG5vdCBmaW5kIEVYU0xUIENvbW1vbiBub2RlLXNldCBmdW5jdGlvbiBpbiB0ZXN0IGF0dHJpYnV0ZSBwcm9wb3NhbCBsaXN0LiIpOwotCQkKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9kZVNldEZ1bmN0aW9uRXhpc3RzU2VsZWN0KCkgIHRocm93cyBFeGNlcHRpb24gewotCQlmaWxlTmFtZSA9ICJjb21tb25YcGF0aEZ1bmN0aW9ucy54c2wiOwotCQlTdHJpbmcgeHNsRmlsZVBhdGggPSBwcm9qZWN0TmFtZSArIEZpbGUuc2VwYXJhdG9yICsgZmlsZU5hbWU7Ci0JCWxvYWRGaWxlRm9yVGVzdGluZyh4c2xGaWxlUGF0aCk7Ci0JCXRyeSB7Ci0JCQlJQ29tcGxldGlvblByb3Bvc2FsW10gcHJvcG9zYWxzID0gZ2V0UHJvcG9zYWxzKDgsMzEpOwotCQkJYXNzZXJ0Tm90TnVsbCgiRGlkIG5vdCBmaW5kIHByb3Bvc2Fscy4iLCBwcm9wb3NhbHMpOwotCi0JCQlmb3IgKElDb21wbGV0aW9uUHJvcG9zYWwgcHJvcG9zYWwgOiBwcm9wb3NhbHMpIHsKLQkJCQlpZiAocHJvcG9zYWwuZ2V0RGlzcGxheVN0cmluZygpLmVxdWFscygiY29tbW9uOm5vZGUtc2V0KCApIikpIHsKLQkJCQkJcmV0dXJuOwotCQkJCX0KLQkJCX0KLQkJfSBmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JCQotCQlmYWlsKCJEaWQgbm90IGZpbmQgRVhTTFQgQ29tbW9uIG5vZGUtc2V0IGZ1bmN0aW9uIGluIHNlbGVjdCBhdHRyaWJ1dGUgcHJvcG9zYWwgbGlzdC4iKTsKLQkJCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdE9iamVjdFR5cGVGdW5jdGlvbkV4aXN0c1NlbGVjdCgpICB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZmlsZU5hbWUgPSAiY29tbW9uWHBhdGhGdW5jdGlvbnMueHNsIjsKLQkJU3RyaW5nIHhzbEZpbGVQYXRoID0gcHJvamVjdE5hbWUgKyBGaWxlLnNlcGFyYXRvciArIGZpbGVOYW1lOwotCQlsb2FkRmlsZUZvclRlc3RpbmcoeHNsRmlsZVBhdGgpOwotCQl0cnkgewotCQkJSUNvbXBsZXRpb25Qcm9wb3NhbFtdIHByb3Bvc2FscyA9IGdldFByb3Bvc2Fscyg4LDMxKTsKLQkJCWFzc2VydE5vdE51bGwoIkRpZCBub3QgZmluZCBwcm9wb3NhbHMuIiwgcHJvcG9zYWxzKTsKLQotCQkJZm9yIChJQ29tcGxldGlvblByb3Bvc2FsIHByb3Bvc2FsIDogcHJvcG9zYWxzKSB7Ci0JCQkJaWYgKHByb3Bvc2FsLmdldERpc3BsYXlTdHJpbmcoKS5lcXVhbHMoImNvbW1vbjpvYmplY3QtdHlwZSggKSIpKSB7Ci0JCQkJCXJldHVybjsKLQkJCQl9Ci0JCQl9Ci0JCX0gZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCQkKLQkJZmFpbCgiRGlkIG5vdCBmaW5kIEVYU0xUIENvbW1vbiBub2RlLXNldCBmdW5jdGlvbiBpbiBzZWxlY3QgYXR0cmlidXRlIHByb3Bvc2FsIGxpc3QuIik7Ci0JCQotCX0KLQkKLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgSUNvbXBsZXRpb25Qcm9wb3NhbFtdIGdldFByb3Bvc2FscyhpbnQgbGluZU51bWJlciwgaW50IG51bWJlck9mQ2hhcmFjdGVycykgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJaW50IG9mZnNldCA9IGNhbGN1bGF0ZU9mZnNldChsaW5lTnVtYmVyLCBudW1iZXJPZkNoYXJhY3RlcnMpOwotCQlyZXR1cm4gbmV3IEVYU0xUQ29tbW9uQ29udGVudEFzc2lzdFByb2Nlc3NvcigpLmNvbXB1dGVDb21wbGV0aW9uUHJvcG9zYWxzKHNvdXJjZVZpZXdlciwgb2Zmc2V0KTsKLQl9CQotCQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9leHNsdC91aS90ZXN0cy9FWFNMVFVJVGVzdFN1aXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2V4c2x0L3VpL3Rlc3RzL0VYU0xUVUlUZXN0U3VpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Y1M2IzYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2V4c2x0L3VpL3Rlc3RzL0VYU0xUVUlUZXN0U3VpdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpLnRlc3RzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LnRlc3QuRVhTTFRDb21tb25Db250ZW50QXNzaXN0VGVzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLXB1YmxpYyBjbGFzcyBFWFNMVFVJVGVzdFN1aXRlIGV4dGVuZHMgVGVzdFN1aXRlIHsKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgRVhTTFRVSVRlc3RTdWl0ZSgpOwotCX0KLQotCXB1YmxpYyBFWFNMVFVJVGVzdFN1aXRlKCkgewotCQlzdXBlcigiRVhTTFQgVUkgVGVzdCBTdWl0ZSIpOwotCQlhZGRUZXN0U3VpdGUoRVhTTFRDb21tb25Db250ZW50QXNzaXN0VGVzdC5jbGFzcyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9leHNsdC91aS90ZXN0cy9FWFNMVFVJVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvZXhzbHQvdWkvdGVzdHMvRVhTTFRVSVRlc3RzUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4MDBhM2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9leHNsdC91aS90ZXN0cy9FWFNMVFVJVGVzdHNQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpLnRlc3RzOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotLyoqCi0gKiBUaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGUKLSAqLwotcHVibGljIGNsYXNzIEVYU0xUVUlUZXN0c1BsdWdpbiBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4gewotCi0JLy8gVGhlIHBsdWctaW4gSUQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC51aS50ZXN0cyI7Ci0KLQkvLyBUaGUgc2hhcmVkIGluc3RhbmNlCi0JcHJpdmF0ZSBzdGF0aWMgRVhTTFRVSVRlc3RzUGx1Z2luIHBsdWdpbjsKLQkKLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IKLQkgKi8KLQlwdWJsaWMgRVhTTFRVSVRlc3RzUGx1Z2luKCkgewotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW4jc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCi0JICovCi0JcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RhcnQoY29udGV4dCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbiNzdG9wKG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQotCSAqLwotCXB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJcGx1Z2luID0gbnVsbDsKLQkJc3VwZXIuc3RvcChjb250ZXh0KTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UKLQkgKgotCSAqIEByZXR1cm4gdGhlIHNoYXJlZCBpbnN0YW5jZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgRVhTTFRVSVRlc3RzUGx1Z2luIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgVVJMIGdldEluc3RhbGxMb2NhdGlvbigpIHsKLQkJVVJMIGluc3RhbGxMb2NhdGlvbiA9IFBsYXRmb3JtLmdldEJ1bmRsZShQTFVHSU5fSUQpLmdldEVudHJ5KCIvIik7Ci0JCVVSTCByZXNvbHZlZExvY2F0aW9uID0gbnVsbDsKLQkJdHJ5IHsKLQkJCXJlc29sdmVkTG9jYXRpb24gPSBGaWxlTG9jYXRvci5yZXNvbHZlKGluc3RhbGxMb2NhdGlvbik7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCS8vIGltcG9zc2libAotCQkJdGhyb3cgbmV3IEVycm9yKGUpOwotCQl9Ci0JCXJldHVybiByZXNvbHZlZExvY2F0aW9uOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgRmlsZSBnZXRUZXN0RmlsZShTdHJpbmcgZmlsZXBhdGgpIHsKLQkJVVJMIGluc3RhbGxVUkwgPSBnZXRJbnN0YWxsTG9jYXRpb24oKTsKLQkJLy9TdHJpbmcgc2NoZW1lID0gaW5zdGFsbFVSTC5nZXRQcm90b2NvbCgpOwotCQlTdHJpbmcgcGF0aCA9IGluc3RhbGxVUkwuZ2V0UGF0aCgpOwotCQlTdHJpbmcgbG9jYXRpb24gPSBwYXRoICsgZmlsZXBhdGg7Ci0JCUZpbGUgcmVzdWx0ID0gbmV3IEZpbGUobG9jYXRpb24pOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnRlc3QvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy50ZXN0Ly5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0YzVlMzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnRlc3QvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudGVzdC8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy50ZXN0Ly5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NWI5Nzg0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy50ZXN0Ly5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnRlc3Q8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnRlc3QvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnRlc3QvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiY2ZjZjEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy50ZXN0Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotI1NhdCBKYW4gMDIgMTU6MDU6MDcgR01ULTA1OjAwIDIwMTAKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudGVzdC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxN2Q5ODI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogSkFYUCBEZWJ1ZyBUZXN0cwotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnRlc3QKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMC5xdWFsaWZpZXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy50ZXN0LlRlc3RKYVhQRGVidWdQbHVnaW4KLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmFwYWNoZS54bWwucmVzb2x2ZXI7YnVuZGxlLXZlcnNpb249IjEuMS4wIiwKLSBvcmcuYXBhY2hlLnhlcmNlcztidW5kbGUtdmVyc2lvbj0iMi45LjAiLAotIG9yZy5hcGFjaGUueGFsYW47YnVuZGxlLXZlcnNpb249IjIuNy4xIiwKLSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWc7YnVuZGxlLXZlcnNpb249IjEuMC4xMDAiLAotIG9yZy5qdW5pdDtidW5kbGUtdmVyc2lvbj0iMy44LjIiCi1CdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41Ci1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmludm9rZXIudGVzdCwKLSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnRlc3QvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy50ZXN0L2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnRlc3QvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnRlc3QvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy50ZXN0L2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljYmFiM2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnRlc3QvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotc291cmNlLi4gPSBzcmMvCi1vdXRwdXQuLiA9IGJpbi8KLWJpbi5pbmNsdWRlcyA9IE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICAuLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwKLXNyYy5pbmNsdWRlcyA9IGFib3V0Lmh0bWwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy50ZXN0L3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvaW52b2tlci90ZXN0LzEtaW5wdXQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnRlc3Qvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy9pbnZva2VyL3Rlc3QvMS1pbnB1dC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3NTdkZGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnRlc3Qvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy9pbnZva2VyL3Rlc3QvMS1pbnB1dC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdD4KLQk8ZWxlbWVudCBhdHRyaWJ1dGU9InllcyIvPgotPC9yb290PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnRlc3Qvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy9pbnZva2VyL3Rlc3QvMS10cmFuc2Zvcm0ueHNsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnRlc3Qvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy9pbnZva2VyL3Rlc3QvMS10cmFuc2Zvcm0ueHNsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNmFmNDhjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy50ZXN0L3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvaW52b2tlci90ZXN0LzEtdHJhbnNmb3JtLnhzbAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIxLjAiIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIj4KLQk8eHNsOnRlbXBsYXRlIG1hdGNoPSIvL3Jvb3QiPgotCQk8cm9vdC1vdXQvPgotCTwveHNsOnRlbXBsYXRlPgotPC94c2w6c3R5bGVzaGVldD4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnRlc3Qvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy9pbnZva2VyL3Rlc3QvUGlwZWxpbmVEZWZpbnRpb25UZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudGVzdC9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL2ludm9rZXIvdGVzdC9QaXBlbGluZURlZmludGlvblRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzRiYzdmMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudGVzdC9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL2ludm9rZXIvdGVzdC9QaXBlbGluZURlZmludGlvblRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgSW50YWxpbyBJbmMuIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKEludGFsaW8pIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmludm9rZXIudGVzdDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMuamF4cC5TQVhQYXJzZXJJbXBsLkpBWFBTQVhQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmludm9rZXIuUGlwZWxpbmVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy5pbnZva2VyLlRyYW5zZm9ybURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmludm9rZXIuVHlwZWRWYWx1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcuaW52b2tlci5pbnRlcm5hbC5KQVhQU0FYUHJvY2Vzc29ySW52b2tlcjsKLQotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1wdWJsaWMgY2xhc3MgUGlwZWxpbmVEZWZpbnRpb25UZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCVBpcGVsaW5lRGVmaW5pdGlvbiBwbGRlZiA9IG51bGw7Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlwbGRlZiA9IG5ldyBQaXBlbGluZURlZmluaXRpb24oKTsKLQl9Ci0JCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJcGxkZWYgPSBudWxsOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0QWRkVHJhbnNmb3JtRGVmaW5pdGlvbigpIHRocm93cyBFeGNlcHRpb24gewotCQlzZXR1cFRyYW5zZm9ybURlZmluaXRpb24oKTsKLQkJTGlzdDxUcmFuc2Zvcm1EZWZpbml0aW9uPiB0ZGVmcyA9IHBsZGVmLmdldFRyYW5zZm9ybURlZnMoKTsKLQkJYXNzZXJ0Tm90TnVsbCh0ZGVmcyk7Ci0JCWFzc2VydEVxdWFscygiRGlkIG5vdCBmaW5kIGV4cGVjdGVkIHRyYW5zZm9ybWF0aW9uIGRlZnMiLCAxLCB0ZGVmcy5zaXplKCkpOwotCX0KLQotCXByaXZhdGUgVHJhbnNmb3JtRGVmaW5pdGlvbiBzZXR1cFRyYW5zZm9ybURlZmluaXRpb24oKSB7Ci0JCVRyYW5zZm9ybURlZmluaXRpb24gdGRlZiA9IG5ldyBUcmFuc2Zvcm1EZWZpbml0aW9uKCk7Ci0JCXBsZGVmLmFkZFRyYW5zZm9ybURlZih0ZGVmKTsKLQkJcmV0dXJuIHRkZWY7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RSZW1vdmVUcmFuc2Zvcm1EZWZpbnRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJVHJhbnNmb3JtRGVmaW5pdGlvbiB0ZGVmID0gc2V0dXBUcmFuc2Zvcm1EZWZpbml0aW9uKCk7Ci0JCWFzc2VydEVxdWFscygxLCBwbGRlZi5nZXRUcmFuc2Zvcm1EZWZzKCkuc2l6ZSgpKTsKLQkJcGxkZWYucmVtb3ZlVHJhbnNmb3JtRGVmKHRkZWYpOwotCQlhc3NlcnRFcXVhbHMoMCwgcGxkZWYuZ2V0VHJhbnNmb3JtRGVmcygpLnNpemUoKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RBZGRBdHRyaWJ1dGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc2V0dXBBdHRyaWJ1dGUoKTsKLQkJYXNzZXJ0RXF1YWxzKDEsIHBsZGVmLmdldEF0dHJpYnV0ZXMoKS5zaXplKCkpOwotCX0KLQotCXByaXZhdGUgVHlwZWRWYWx1ZSBzZXR1cEF0dHJpYnV0ZSgpIHsKLQkJVHlwZWRWYWx1ZSBhdHRyID0gbmV3IFR5cGVkVmFsdWUoImF0dHIiLCBUeXBlZFZhbHVlLlRZUEVfU1RSSU5HLCAiMSIpOwotCQlwbGRlZi5hZGRBdHRyaWJ1dGUoYXR0cik7Ci0JCXJldHVybiBhdHRyOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0UmVtb3ZlQXR0cmlidXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVR5cGVkVmFsdWUgYXR0ciA9IHNldHVwQXR0cmlidXRlKCk7Ci0JCXBsZGVmLmFkZEF0dHJpYnV0ZShhdHRyKTsKLQkJYXNzZXJ0RXF1YWxzKDEsIHBsZGVmLmdldEF0dHJpYnV0ZXMoKS5zaXplKCkpOwotCQlwbGRlZi5yZW1vdmVBdHRyaWJ1dGUoYXR0cik7Ci0JCWFzc2VydEVxdWFscygwLCBwbGRlZi5nZXRBdHRyaWJ1dGVzKCkuc2l6ZSgpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdENvbmZpZ3VyZUludm9rZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJSkFYUFNBWFByb2Nlc3Nvckludm9rZXIgaW52b2tlciA9IG5ldyBKQVhQU0FYUHJvY2Vzc29ySW52b2tlcigpOwotCQlwbGRlZi5jb25maWd1cmUoaW52b2tlcik7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudGVzdC9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL2ludm9rZXIvdGVzdC9UZXN0SkFYUFByb2Nlc3Nvckludm9rZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy50ZXN0L3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvaW52b2tlci90ZXN0L1Rlc3RKQVhQUHJvY2Vzc29ySW52b2tlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTFmZjg4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy50ZXN0L3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvaW52b2tlci90ZXN0L1Rlc3RKQVhQUHJvY2Vzc29ySW52b2tlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcuaW52b2tlci50ZXN0OwotCi1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5SZXN1bHQ7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5kb20uRE9NUmVzdWx0OwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uc2F4LlNBWFNvdXJjZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy5pbnZva2VyLlBpcGVsaW5lRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcuaW52b2tlci5UcmFuc2Zvcm1EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy5pbnZva2VyLmludGVybmFsLkpBWFBTQVhQcm9jZXNzb3JJbnZva2VyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnhtbC5zYXguSW5wdXRTb3VyY2U7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0SkFYUFByb2Nlc3Nvckludm9rZXIgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JSkFYUFNBWFByb2Nlc3Nvckludm9rZXIgaW52b2tlciA9IG51bGw7Ci0JCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJaW52b2tlciA9IG5ldyBKQVhQU0FYUHJvY2Vzc29ySW52b2tlcigpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlVHJhbnNmb3JtKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVVSTCBzdXJsID0gVGVzdEpBWFBQcm9jZXNzb3JJbnZva2VyLmNsYXNzLmdldFJlc291cmNlKCIxLWlucHV0LnhtbCIpOwotCQlVUkwgeHNsdCA9IFRlc3RKQVhQUHJvY2Vzc29ySW52b2tlci5jbGFzcy5nZXRSZXNvdXJjZSgiMS10cmFuc2Zvcm0ueHNsIik7Ci0JCQotCQlQaXBlbGluZURlZmluaXRpb24gcGlwZSA9IG5ldyBQaXBlbGluZURlZmluaXRpb24oKTsKLQkJVHJhbnNmb3JtRGVmaW5pdGlvbiB0ZGVmID0gbmV3IFRyYW5zZm9ybURlZmluaXRpb24oKTsKLQkJdGRlZi5zZXRTdHlsZXNoZWV0VVJMKHhzbHQudG9FeHRlcm5hbEZvcm0oKSk7Ci0JCXBpcGUuYWRkVHJhbnNmb3JtRGVmKHRkZWYpOwotCQlwaXBlLmNvbmZpZ3VyZShpbnZva2VyKTsKLQkJSW5wdXRTb3VyY2Ugc291cmNlID0gbmV3IElucHV0U291cmNlKHN1cmwub3BlblN0cmVhbSgpKTsKLQkJRE9NUmVzdWx0IHJlc3VsdCA9ICBuZXcgRE9NUmVzdWx0KCk7Ci0JCWludm9rZXIudHJhbnNmb3JtKHNvdXJjZSwgcmVzdWx0KTsKLQkJRG9jdW1lbnQgbm9kZSA9IChEb2N1bWVudClyZXN1bHQuZ2V0Tm9kZSgpOwotCQlhc3NlcnROb3ROdWxsKCJEaWQgbm90IGdldCBhIHJlc3VsdCBkb2N1bWVudC4iLCBub2RlKTsKLQkJYXNzZXJ0RXF1YWxzKCJNaXNzaW5nIHJvb3Qtb3V0IG5vZGUgbmFtZS4iLCAicm9vdC1vdXQiLCBub2RlLmdldERvY3VtZW50RWxlbWVudCgpLmdldExvY2FsTmFtZSgpKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudGVzdC9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL2ludm9rZXIvdGVzdC9UcmFuc2Zvcm1EZWZpbml0b25UZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudGVzdC9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL2ludm9rZXIvdGVzdC9UcmFuc2Zvcm1EZWZpbml0b25UZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwYzQxZGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnRlc3Qvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy9pbnZva2VyL3Rlc3QvVHJhbnNmb3JtRGVmaW5pdG9uVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgSW50YWxpbyBJbmMuIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKEludGFsaW8pIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmludm9rZXIudGVzdDsKLQotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy5pbnZva2VyLlRyYW5zZm9ybURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmludm9rZXIuVHlwZWRWYWx1ZTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotcHVibGljIGNsYXNzIFRyYW5zZm9ybURlZmluaXRvblRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JVHJhbnNmb3JtRGVmaW5pdGlvbiB0ZGVmID0gbnVsbDsKLQkKLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQl0ZGVmID0gbmV3IFRyYW5zZm9ybURlZmluaXRpb24oKTsKLQl9Ci0JCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJdGRlZiA9IG51bGw7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3REZWZhdWx0UmVzb2x2ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHJlc29sdmVyID0gdGRlZi5nZXRSZXNvbHZlckNsYXNzKCk7Ci0JCWFzc2VydEVxdWFscygiRGlkIG5vdCBmaW5kIGRlZmF1bHQgcmVzb2x2ZXIiLCBUcmFuc2Zvcm1EZWZpbml0aW9uLkRFRkFVTFRfQ0FUQUxPR19SRVNPTFZFUiwgcmVzb2x2ZXIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Q2hhbmdlUmVzb2x2ZXJGcm9tRGVmYXVsdCgpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmcgcmVzb2x2ZXIgPSAib3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLlVSSVJlc29sdmVyIjsKLQkJdGRlZi5zZXRSZXNvbHZlckNsYXNzKHJlc29sdmVyKTsKLQkJYXNzZXJ0RXF1YWxzKCJQcm9ibGVtIHNldHRpbmcgYSBuZXcgcmVzb2x2ZXIiLCByZXNvbHZlciwgdGRlZi5nZXRSZXNvbHZlckNsYXNzKCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0QWRkUGFyYW1ldGVycygpIHRocm93cyBFeGNlcHRpb24gewotCQlzZXR1cFBhcmFtZXRlcnMoKTsKLQkJYXNzZXJ0Tm90TnVsbCgiTWlzc2luZyBwYXJhbWVydGVycyIsIHRkZWYuZ2V0UGFyYW1ldGVycygpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldFBhcmFtZXRlcnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc2V0dXBQYXJhbWV0ZXJzKCk7Ci0JCVNldDxUeXBlZFZhbHVlPiBwYXJtU2V0ID0gdGRlZi5nZXRQYXJhbWV0ZXJzKCk7Ci0JCWFzc2VydEVxdWFscygiSW5jb3JyZWN0IHNpemUgcmV0dXJuZWQuIiwgMSwgcGFybVNldC5zaXplKCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0UGFyYW1ldGVyc0FzTWFwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXNldHVwUGFyYW1ldGVycygpOwotCQlNYXA8U3RyaW5nLCBPYmplY3Q+IHBhcm1NYXAgPSB0ZGVmLmdldFBhcmFtZXRlcnNBc01hcCgpOwotCQlhc3NlcnROb3ROdWxsKCJNaXNzaW5nIHBhcm1hdGVyIE1BUC4iLCBwYXJtTWFwKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFN0eWxlU2hlZXRTb3VyY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHN0eWxlc2hlZXQgPSAiaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zdHlsZXNoZWV0LnhzbCI7Ci0JCXRkZWYuc2V0U3R5bGVzaGVldFVSTChzdHlsZXNoZWV0KTsKLQkJYXNzZXJ0Tm90TnVsbCgiTWlzc2luZyBzdHlsZXNoZWV0LiIsIHRkZWYuZ2V0U3R5bGVzaGVldFVSTCgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJJbmNvcnJlY3Qgc3R5bGVzaGVldC4iLCBzdHlsZXNoZWV0LCB0ZGVmLmdldFN0eWxlc2hlZXRVUkwoKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RSZW1vdmVQYXJhbWV0ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJVHlwZWRWYWx1ZSBwYXJhbSA9IHNldHVwUGFyYW1ldGVycygpOwotCQlhc3NlcnRUcnVlKHRkZWYuZ2V0UGFyYW1ldGVycygpLnNpemUoKSA+IDApOwotCQl0ZGVmLnJlbW92ZVBhcmFtZXRlcihwYXJhbSk7Ci0JCWFzc2VydFRydWUoIkZvdW5kIHBhcmFtZXRlcnMgd2hlbiB0aGVyZSBzaG91bGQgYmUgemVyby4iLCB0ZGVmLmdldFBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RTZXRPdXRwdXRQcm9wZXJ0eSgpIHRocm93cyBFeGNlcHRpb24gewotCQl0ZGVmLnNldE91dHB1dFByb3BlcnR5KCJvdXRwdXQiLCAidGVzdCIpOwotCQlTdHJpbmcgdmFsdWUgPSB0ZGVmLmdldE91dHB1dFByb3BlcnRpZXMoKS5nZXRQcm9wZXJ0eSgib3V0cHV0Iik7Ci0JCWFzc2VydEVxdWFscygiSW5jb3JyZWN0IHZhbHVlIiwgInRlc3QiLCB2YWx1ZSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3ROb091dHB1dFByb3BlcnRpZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJYXNzZXJ0RXF1YWxzKCJGb3VuZCBvdXRwdXQgcHJvcGVydGllcyB3aGVuIHRoZXJlIHNob3VsZCBiZSBub25lLiIsIDAsIHRkZWYuZ2V0T3V0cHV0UHJvcGVydGllcygpLnNpemUoKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RSZW1vdmVPdXRwdXRQcm9wZXJ0eSgpIHRocm93cyBFeGNlcHRpb24gewotCQl0ZGVmLnNldE91dHB1dFByb3BlcnR5KCJvdXRwdXQiLCAidGVzdCIpOwotCQlQcm9wZXJ0aWVzIHByb3BlcnRpZXMgPSB0ZGVmLmdldE91dHB1dFByb3BlcnRpZXMoKTsKLQkJYXNzZXJ0RXF1YWxzKDEscHJvcGVydGllcy5zaXplKCkpOwotCQl0ZGVmLnJlbW92ZU91dHB1dFByb3BlcnR5KCJvdXRwdXQiKTsKLQl9Ci0KLQlwcml2YXRlIFR5cGVkVmFsdWUgc2V0dXBQYXJhbWV0ZXJzKCkgewotCQlUeXBlZFZhbHVlIHBhcmFtID0gbmV3IFR5cGVkVmFsdWUoInBhcmFtIiwgVHlwZWRWYWx1ZS5UWVBFX1NUUklORywgInRlc3QiKTsKLQkJdGRlZi5hZGRQYXJhbWV0ZXIocGFyYW0pOwotCQlyZXR1cm4gcGFyYW07Ci0JfQotCQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnRlc3Qvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy90ZXN0L0FsbEpBWFBEZWJ1Z1Rlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudGVzdC9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3Rlc3QvQWxsSkFYUERlYnVnVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmNkOWRjOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudGVzdC9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3Rlc3QvQWxsSkFYUERlYnVnVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnRlc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcuaW52b2tlci50ZXN0LlBpcGVsaW5lRGVmaW50aW9uVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcuaW52b2tlci50ZXN0LlRlc3RKQVhQUHJvY2Vzc29ySW52b2tlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcuaW52b2tlci50ZXN0LlRyYW5zZm9ybURlZmluaXRvblRlc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1wdWJsaWMgY2xhc3MgQWxsSkFYUERlYnVnVGVzdHMgewotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKEFsbEpBWFBEZWJ1Z1Rlc3RzLmNsYXNzLmdldE5hbWUoKSk7Ci0JCS8vJEpVbml0LUJFR0lOJAotCQkgICBzdWl0ZS5hZGRUZXN0U3VpdGUoVHJhbnNmb3JtRGVmaW5pdG9uVGVzdC5jbGFzcyk7Ci0JCSAgIHN1aXRlLmFkZFRlc3RTdWl0ZShQaXBlbGluZURlZmludGlvblRlc3QuY2xhc3MpOwotCQkgICBzdWl0ZS5hZGRUZXN0U3VpdGUoVGVzdEpBWFBQcm9jZXNzb3JJbnZva2VyLmNsYXNzKTsKLQkJLy8kSlVuaXQtRU5EJAotCQlyZXR1cm4gc3VpdGU7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudGVzdC9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3Rlc3QvVGVzdEphWFBEZWJ1Z1BsdWdpbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnRlc3Qvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy90ZXN0L1Rlc3RKYVhQRGVidWdQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDEzN2JlNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudGVzdC9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3Rlc3QvVGVzdEphWFBEZWJ1Z1BsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudGVzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7Ci0KLS8qKgotICogVGhlIGFjdGl2YXRvciBjbGFzcyBjb250cm9scyB0aGUgcGx1Zy1pbiBsaWZlIGN5Y2xlCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0SmFYUERlYnVnUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHsKLQotCS8vIFRoZSBwbHVnLWluIElECi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy50ZXN0IjsgLy8kTk9OLU5MUy0xJAotCi0JLy8gVGhlIHNoYXJlZCBpbnN0YW5jZQotCXByaXZhdGUgc3RhdGljIFRlc3RKYVhQRGVidWdQbHVnaW4gcGx1Z2luOwotCQotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3RvcgotCSAqLwotCXB1YmxpYyBUZXN0SmFYUERlYnVnUGx1Z2luKCkgewotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbnMjc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCi0JICovCi0JcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RhcnQoY29udGV4dCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCi0JICovCi0JcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlwbHVnaW4gPSBudWxsOwotCQlzdXBlci5zdG9wKGNvbnRleHQpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZQotCSAqCi0JICogQHJldHVybiB0aGUgc2hhcmVkIGluc3RhbmNlCi0JICovCi0JcHVibGljIHN0YXRpYyBUZXN0SmFYUERlYnVnUGx1Z2luIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy50ZXN0cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcudGVzdHMvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzEwMGE2Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy50ZXN0cy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJ0ZXN0LWxhdW5jaGluZy1zcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJ4c2wtdGVzdC1yZXNvdXJjZXMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLnRlc3RzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcudGVzdHMvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiMDhiOGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcudGVzdHMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy50ZXN0czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmNzgyNGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVGh1IEphbiAwMyAyMjoyNDozNyBFU1QgMjAwOAotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWVuY29kaW5nLzxwcm9qZWN0Pj1JU08tODg1OS0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmYjljM2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0jRnJpIEphbiAwNCAwOTowODo0MiBFU1QgMjAwOAotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRkODU2OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotI0ZyaSBKYW4gMDQgMDk6MDQ6NDMgRVNUIDIwMDgKLWNvbXBpbGVycy5pbmNvbXBhdGlibGUtZW52aXJvbm1lbnQ9MQotY29tcGlsZXJzLnAuYnVpbGQ9MAotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5taXNzaW5nLWJ1bmRsZS1jbGFzc3BhdGgtZW50cmllcz0wCi1jb21waWxlcnMucC5taXNzaW5nLXBhY2thZ2VzPTIKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0wCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTEKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0wCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTEKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTU3MzBhMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy50ZXN0cwotQnVuZGxlLVZlcnNpb246IDEuMS4wLnF1YWxpZmllcgotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLnVpO2J1bmRsZS12ZXJzaW9uPSJbMy40LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcztidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lO2J1bmRsZS12ZXJzaW9uPSJbMy40LjAsNC4wLjApIiwKLSBvcmcuanVuaXQ7YnVuZGxlLXZlcnNpb249IjMuOC4yIiwKLSBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMy40LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZztidW5kbGUtdmVyc2lvbj0iWzEuMC4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aTtidW5kbGUtdmVyc2lvbj0iWzEuMC4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2UuZGVidWcudWk7YnVuZGxlLXZlcnNpb249IlszLjQuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLnN3dDtidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZztidW5kbGUtdmVyc2lvbj0iMS4wLjAiLAotIG9yZy5lY2xpcHNlLndzdC54c2wudWk7YnVuZGxlLXZlcnNpb249IlsxLjAuMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpLmlkZTtidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjMwMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQ7YnVuZGxlLXZlcnNpb249IlszLjQuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMS4zMDAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS51aS53b3JrYmVuY2gudGV4dGVkaXRvcjtidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS51aTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC51aTtidW5kbGUtdmVyc2lvbj0iWzEuMC40MDAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWk7YnVuZGxlLXZlcnNpb249IlsxLjAsMi4wLjApIgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcudGVzdHMuQWN0aXZhdG9yCi1CdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKLUJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yLjAKLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy50ZXN0cywKLSBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy50ZXN0cy50ZXN0Y2FzZQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy50ZXN0cy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcudGVzdHMvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5OWRmMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy50ZXN0cy9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcudGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Q1ZDJkNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotc291cmNlLi4gPSB0ZXN0LWxhdW5jaGluZy1zcmMvLFwKLSAgICAgICAgICAgeHNsLXRlc3QtcmVzb3VyY2VzLwotb3V0cHV0Li4gPSBiaW4vCi1zcmMuaW5jbHVkZXMgPSB0ZXN0RmlsZXMvCi1iaW4uaW5jbHVkZXMgPSAuLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIHhzbC10ZXN0LXJlc291cmNlcy8sXAotICAgICAgICAgICAgICAgYmluLyxcCi0gICAgICAgICAgICAgICB0ZXN0RmlsZXMvCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy50ZXN0cy9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTFhOTc1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jUHJvcGVydGllcyBmaWxlIGZvciBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy50ZXN0cwotQnVuZGxlLU5hbWUuMCA9IFhTVCBDb3JlIFRlc3QgUGx1Zy1pbgotQnVuZGxlLVZlbmRvci4wID0gRWNsaXBzZS5vcmcKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy50ZXN0cy90ZXN0LWxhdW5jaGluZy1zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvdGVzdHMvQWJzdHJhY3RMYXVuY2hpbmdUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy50ZXN0cy90ZXN0LWxhdW5jaGluZy1zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvdGVzdHMvQWJzdHJhY3RMYXVuY2hpbmdUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2NWIxOTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcudGVzdHMvdGVzdC1sYXVuY2hpbmctc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvbGF1bmNoaW5nL3Rlc3RzL0Fic3RyYWN0TGF1bmNoaW5nVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNjIwNDYgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLnRlc3RzOwotCi1pbXBvcnQgamF2YS5pby4qOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLio7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5pbnRlcm5hbC51aS5EZWJ1Z1VJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmludGVybmFsLnVpLmxhdW5jaENvbmZpZ3VyYXRpb25zLkxhdW5jaENvbmZpZ3VyYXRpb25NYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmludGVybmFsLnVpLmxhdW5jaENvbmZpZ3VyYXRpb25zLkxhdW5jaFNob3J0Y3V0RXh0ZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLlhTTExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdExhdW5jaGluZ1Rlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhTTF9URVNUX1BST0pFQ1QgPSAiWFNMVGVzdFByb2plY3QiOwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFhTTF9MQVVOQ0hfU0hPUlRDVVRfSUQgPSAib3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS5sYXVuY2hzaG9ydGN1dCI7Ci0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgTEFVTkNIQ09ORklHUyA9ICJsYXVuY2hDb25maWdzIjsKLQlwcm90ZWN0ZWQgVGVzdEVudmlyb25tZW50IGVudjsKLQlwcm90ZWN0ZWQgSVByb2plY3QgdGVzdFByb2plY3Q7Ci0JcHJvdGVjdGVkIElGb2xkZXIgZm9sZGVyOwotCi0JcHVibGljIEFic3RyYWN0TGF1bmNoaW5nVGVzdCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgQWJzdHJhY3RMYXVuY2hpbmdUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnNldFVwKCk7Ci0JCWNyZWF0ZVByb2plY3QoKTsKLQkJY3JlYXRlRW1wdHlMYXVuY2hDb25maWdzRm9sZGVyKCk7Ci0JCWRlbGV0ZUV4aXN0aW5nTGF1bmNoQ29uZmlncygpOwotCX0KLQotCXByaXZhdGUgdm9pZCBjcmVhdGVQcm9qZWN0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQllbnYgPSBuZXcgVGVzdEVudmlyb25tZW50KCk7Ci0JCXRlc3RQcm9qZWN0ID0gZW52LmNyZWF0ZVByb2plY3QoWFNMX1RFU1RfUFJPSkVDVCk7Ci0JfQotCQotCXByaXZhdGUgdm9pZCBjcmVhdGVFbXB0eUxhdW5jaENvbmZpZ3NGb2xkZXIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlQYXRoIHBhdGggPSB0ZXN0UHJvamVjdC5nZXRGdWxsUGF0aCgpOwotCQlmb2xkZXIgPSB0ZXN0UHJvamVjdC5nZXRGb2xkZXIoTEFVTkNIQ09ORklHUyk7Ci0JCWlmIChmb2xkZXIuZXhpc3RzKCkpIHsKLQkJCWZvbGRlci5kZWxldGUodHJ1ZSwgbnVsbCk7Ci0JCX0KLQkJZm9sZGVyLmNyZWF0ZSh0cnVlLCB0cnVlLCBudWxsKTsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIGRlbGV0ZUV4aXN0aW5nTGF1bmNoQ29uZmlncygpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJSUxhdW5jaENvbmZpZ3VyYXRpb25bXSBjb25maWdzID0gZ2V0TGF1bmNoTWFuYWdlcigpCi0JCQkJLmdldExhdW5jaENvbmZpZ3VyYXRpb25zKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY29uZmlncy5sZW5ndGg7IGkrKykgewotCQkJY29uZmlnc1tpXS5kZWxldGUoKTsKLQkJfQotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnRlYXJEb3duKCk7Ci0JCXRlc3RQcm9qZWN0LmRlbGV0ZSh0cnVlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBjb3B5Q29uZmlndXJhdGlvblRvV29ya3NwYWNlKElQYXRoIGZvbGRlciwgU3RyaW5nIGZpbGVuYW1lKQotCQkJdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVVSTCB1cmwgPSBBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5KAotCQkJCSJ0ZXN0RmlsZXMiICsgRmlsZS5zZXBhcmF0b3IgKyBmaWxlbmFtZSk7Ci0KLQkJU3RyaW5nIHdvcmtzcGFjZVBhdGggPSBnZXRXb3Jrc3BhY2VQYXRoKCk7Ci0KLQkJRmlsZSB0YXJnZXQgPSBuZXcgRmlsZSh3b3Jrc3BhY2VQYXRoICsgZm9sZGVyLnRvUG9ydGFibGVTdHJpbmcoKQotCQkJCSsgRmlsZS5zZXBhcmF0b3IgKyBmaWxlbmFtZSk7Ci0JCWNvcHlGaWxlKHVybCwgdGFyZ2V0KTsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBnZXRXb3Jrc3BhY2VQYXRoKCkgewotCQlJV29ya3NwYWNlIHdvcmtzcGFjZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKTsKLQkJSVdvcmtzcGFjZVJvb3Qgcm9vdCA9IHdvcmtzcGFjZS5nZXRSb290KCk7Ci0JCUlQYXRoIHJvb3RQYXRoID0gcm9vdC5nZXRMb2NhdGlvbigpOwotCQlTdHJpbmcgd29ya3NwYWNlUGF0aCA9IHJvb3RQYXRoLnRvUG9ydGFibGVTdHJpbmcoKTsKLQkJcmV0dXJuIHdvcmtzcGFjZVBhdGg7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNvcHlGaWxlKFVSTCBzcmMsIEZpbGUgdGFyZ2V0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJQnVmZmVyZWRPdXRwdXRTdHJlYW0gYm9zID0gbmV3IEJ1ZmZlcmVkT3V0cHV0U3RyZWFtKAotCQkJCW5ldyBGaWxlT3V0cHV0U3RyZWFtKHRhcmdldCkpOwotCQlCdWZmZXJlZElucHV0U3RyZWFtIGJpcyA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKHNyYy5vcGVuU3RyZWFtKCkpOwotCQl0cnkgewotCQkJd2hpbGUgKGJpcy5hdmFpbGFibGUoKSA+IDApIHsKLQkJCQlpbnQgc2l6ZSA9IGJpcy5hdmFpbGFibGUoKTsKLQkJCQlpZiAoc2l6ZSA+IDEwMjQpCi0JCQkJCXNpemUgPSAxMDI0OwotCQkJCWJ5dGVbXSBiID0gbmV3IGJ5dGVbc2l6ZV07Ci0JCQkJYmlzLnJlYWQoYiwgMCwgYi5sZW5ndGgpOwotCQkJCWJvcy53cml0ZShiKTsKLQkJCX0KLQkJfSBmaW5hbGx5IHsKLQkJCWlmIChiaXMgIT0gbnVsbCkgewotCQkJCWJpcy5jbG9zZSgpOwotCQkJfQotCQkJaWYgKGJvcyAhPSBudWxsKSB7Ci0JCQkJYm9zLmNsb3NlKCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBsYXVuY2ggc2hvcnRjdXQgd2l0aCB0aGUgZ2l2ZW4gaWQKLQkgKiAKLQkgKiBAcGFyYW0gaWQKLQkgKiBAcmV0dXJuIHRoZSA8Y29kZT5MYXVuY2hTaG9ydGN1dEV4dGVuc2lvbjwvY29kZT4gd2l0aCB0aGUgZ2l2ZW4gaWQsIG9yCi0JICogICAgICAgICA8Y29kZT5udWxsPC9jb2RlPiBpZiBub25lCi0JICogCi0JICogQHNpbmNlIDEuMAotCSAqLwotCXByb3RlY3RlZCBMYXVuY2hTaG9ydGN1dEV4dGVuc2lvbiBnZXRMYXVuY2hTaG9ydGN1dEV4dGVuc2lvbihTdHJpbmcgaWQpIHsKLQkJTGlzdCBleHRzID0gZ2V0TGF1bmNoQ29uZmlndXJhdGlvbk1hbmFnZXIoKS5nZXRMYXVuY2hTaG9ydGN1dHMoKTsKLQkJTGF1bmNoU2hvcnRjdXRFeHRlbnNpb24gZXh0ID0gbnVsbDsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBleHRzLnNpemUoKTsgaSsrKSB7Ci0JCQlleHQgPSAoTGF1bmNoU2hvcnRjdXRFeHRlbnNpb24pIGV4dHMuZ2V0KGkpOwotCQkJaWYgKGV4dC5nZXRJZCgpLmVxdWFscyhpZCkpIHsKLQkJCQlyZXR1cm4gZXh0OwotCQkJfQotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUKLQkgKiA8Y29kZT5MYXVuY2hDb25maWd1cmF0aW9uTWFuYWdlcjwvY29kZT4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlCi0JICogICAgICAgICA8Y29kZT5MYXVuY2hDb25maWd1cmF0aW9uTWFuYWdlcjwvY29kZT4KLQkgKiBAc2luY2UgMS4wCi0JICovCi0JcHJvdGVjdGVkIExhdW5jaENvbmZpZ3VyYXRpb25NYW5hZ2VyIGdldExhdW5jaENvbmZpZ3VyYXRpb25NYW5hZ2VyKCkgewotCQlyZXR1cm4gRGVidWdVSVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0TGF1bmNoQ29uZmlndXJhdGlvbk1hbmFnZXIoKTsKLQl9Ci0KLQlwcml2YXRlIElMYXVuY2hNYW5hZ2VyIGdldExhdW5jaE1hbmFnZXIoKSB7Ci0JCXJldHVybiBEZWJ1Z1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0TGF1bmNoTWFuYWdlcigpOwotCX0KLQotCXByb3RlY3RlZCBJTGF1bmNoIGxhdW5jaChTdHJpbmcgbmFtZSkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlMYXVuY2hDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBnZXRMYXVuY2hDb25maWd1cmF0aW9uKG5hbWUpOwotCQlJTGF1bmNoIGxhdW5jaCA9IGNvbmZpZ3VyYXRpb24ubGF1bmNoKElMYXVuY2hNYW5hZ2VyLlJVTl9NT0RFLAotCQkJCW5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQlyZXR1cm4gbGF1bmNoOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGxhdW5jaCBjb25maWd1cmF0aW9uIGZvciB0aGUgZ2l2ZW4gbWFpbiB0eXBlCi0JICogCi0JICogQHBhcmFtIG1haW5UeXBlTmFtZQotCSAqICAgICAgICAgICAgcHJvZ3JhbSB0byBsYXVuY2gKLQkgKiBAc2VlIFByb2plY3RDcmVhdGlvbkRlY29yYXRvcgotCSAqLwotCXByb3RlY3RlZCBJTGF1bmNoQ29uZmlndXJhdGlvbiBnZXRMYXVuY2hDb25maWd1cmF0aW9uKFN0cmluZyBtYWluVHlwZU5hbWUpIHRocm93cyBFeGNlcHRpb24gewotCQlJTGF1bmNoTWFuYWdlciBtZ3IgPSBEZWJ1Z1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0TGF1bmNoTWFuYWdlcigpOwotCQlJRmlsZSBmaWxlID0gdGVzdFByb2plY3QuZ2V0UHJvamVjdCgpLmdldEZvbGRlcigibGF1bmNoQ29uZmlncyIpCi0JCQkJLmdldEZpbGUobWFpblR5cGVOYW1lICsgIi5sYXVuY2giKTsKLQkJSUxhdW5jaENvbmZpZ3VyYXRpb24gbWluZSA9IG1nci5nZXRMYXVuY2hDb25maWd1cmF0aW9uKGZpbGUpOwotCQlhc3NlcnRFcXVhbHMoIldyb25nIHR5cGUgZm91bmQ6ICIsCi0JCQkJWFNMTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5JRF9MQVVOQ0hfQ09ORklHX1RZUEUsIG1pbmUKLQkJCQkJCS5nZXRUeXBlKCkuZ2V0SWRlbnRpZmllcigpKTsKLQkKLQkJcmV0dXJuIG1pbmU7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgcmVmcmVzaFByb2plY3QoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwKLQkJCUludGVycnVwdGVkRXhjZXB0aW9uIHsKLQkJCQl0ZXN0UHJvamVjdC5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLAotCQkJCQkJbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQkJd2hpbGUgKHRlc3RQcm9qZWN0LmlzU3luY2hyb25pemVkKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSkgPT0gZmFsc2UpIHsKLQkJCQkJVGhyZWFkLnNsZWVwKDEwMDApOwotCQkJCX0KLQkJCX0KLQotCXByb3RlY3RlZCB2b2lkIGxhdW5jaENvbmZpZ3VyYXRpb24oU3RyaW5nIGxhdW5jaENvbmZpZ05hbWUpIHRocm93cyBFeGNlcHRpb24gewotCQlJTGF1bmNoIGxhdW5jaCA9IGxhdW5jaChsYXVuY2hDb25maWdOYW1lKTsKLQkJLy8gV2FpdCB1bnRpbCB0aGUgbGF1bmNoIGNvbmZpZ3VyYXRpb24gdGVybWluYXRlcy4KLQkJd2hpbGUgKGxhdW5jaC5pc1Rlcm1pbmF0ZWQoKSA9PSBmYWxzZSkgewotCQkJVGhyZWFkLnNsZWVwKDEwMDApOwotCQl9Ci0JCXJlZnJlc2hQcm9qZWN0KCk7Ci0JfQotCi0JcHJvdGVjdGVkIFN0cmluZyByZWFkRmlsZShJbnB1dFN0cmVhbSBpbnB1dCkgewotCQlTdHJpbmcgc3RyOwotCQlTdHJpbmcgZmluYWxTdHJpbmcgPSAiIjsKLQkJdHJ5IHsKLQkJCUJ1ZmZlcmVkUmVhZGVyIGluID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpbnB1dCkpOwotCQkJd2hpbGUgKChzdHIgPSBpbi5yZWFkTGluZSgpKSAhPSBudWxsKSB7Ci0JCQkJZmluYWxTdHJpbmcgPSBmaW5hbFN0cmluZyArIHN0ciArICJcbiI7Ci0JCQl9Ci0JCQlpbi5jbG9zZSgpOwotCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCX0KLQkJcmV0dXJuIGZpbmFsU3RyaW5nOwotCX0KLQotCXByb3RlY3RlZCBEb2N1bWVudCBwYXJzZVhtbChJbnB1dFN0cmVhbSBjb250ZW50cykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCURvY3VtZW50QnVpbGRlckZhY3RvcnkgYnVpbGRlckZhY3RvcnkgPSBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5Ci0JCQkJLm5ld0luc3RhbmNlKCk7Ci0JCURvY3VtZW50QnVpbGRlciBidWlsZGVyID0gYnVpbGRlckZhY3RvcnkubmV3RG9jdW1lbnRCdWlsZGVyKCk7Ci0JCi0JCXJldHVybiBidWlsZGVyLnBhcnNlKGNvbnRlbnRzKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLnRlc3RzL3Rlc3QtbGF1bmNoaW5nLXNyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy90ZXN0cy9BY3RpdmF0b3IuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLnRlc3RzL3Rlc3QtbGF1bmNoaW5nLXNyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy90ZXN0cy9BY3RpdmF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGUyYWEwNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy50ZXN0cy90ZXN0LWxhdW5jaGluZy1zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvdGVzdHMvQWN0aXZhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgR2FyeSBLYXJhc2l1ayAoSUJNIENvcnBvcmF0aW9uKSAtIGluaXRpYWwgaW1wbGVtZW50YXRpb24KLSAqICAgICBKZXNwZXIgU3RlZW4gTfhsbGVyIC0gYWRhcHRlZCBmb3IgWFNMCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy50ZXN0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotLyoqCi0gKiBUaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGUKLSAqLwotcHVibGljIGNsYXNzIEFjdGl2YXRvciBleHRlbmRzIFBsdWdpbiB7Ci0KLQkvKiogb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcudGVzdHMgLSBwbHVnLWluIGlkICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLnRlc3RzIjsKLQotCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UKLQlwcml2YXRlIHN0YXRpYyBBY3RpdmF0b3IgcGx1Z2luOwotCQotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3RvcgotCSAqLwotCXB1YmxpYyBBY3RpdmF0b3IoKSB7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2lucyNzdGFydChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zdGFydChjb250ZXh0KTsKLQkJcGx1Z2luID0gdGhpczsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW4jc3RvcChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXBsdWdpbiA9IG51bGw7Ci0JCXN1cGVyLnN0b3AoY29udGV4dCk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlCi0JICoKLQkgKiBAcmV0dXJuIHRoZSBzaGFyZWQgaW5zdGFuY2UKLQkgKi8KLQlwdWJsaWMgc3RhdGljIEFjdGl2YXRvciBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBoYW5kbGVFeGNlcHRpb24oRXhjZXB0aW9uIGUpewotCQlTdGF0dXMgc3RhdHVzID0gbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBQTFVHSU5fSUQsIGUuZ2V0TG9jYWxpemVkTWVzc2FnZSgpLCBlKTsKLQkJZ2V0TG9nKCkubG9nKHN0YXR1cyk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy50ZXN0cy90ZXN0LWxhdW5jaGluZy1zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvdGVzdHMvTGF1bmNoaW5nU3VpdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLnRlc3RzL3Rlc3QtbGF1bmNoaW5nLXNyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy90ZXN0cy9MYXVuY2hpbmdTdWl0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZmRlN2RjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLnRlc3RzL3Rlc3QtbGF1bmNoaW5nLXNyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy90ZXN0cy9MYXVuY2hpbmdTdWl0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjYyMDQ2IC0gcmVmYWN0b3JlZCBsYXVuY2hpbmcgc3VpdGUuICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLnRlc3RzLnRlc3RjYXNlLkxhdW5jaFNob3J0Y3V0VGVzdHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcudGVzdHMudGVzdGNhc2UuUmVzdWx0UnVubmFibGVUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLnRlc3RzLnRlc3RjYXNlLlRlc3RJbnB1dEZpbGVCbG9jazsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy50ZXN0cy50ZXN0Y2FzZS5YU0xMYXVuY2hpbmdUZXN0czsKLQotCi0vKioKLSAqIFRoaXMgY2xhc3MgZG9lcyBzcGVjaWZpZXMgYWxsIHRoZSBjbGFzc2VzIGluIHRoaXMgYnVuZGxlCi0gKiB0aGF0IHByb3ZpZGUgdGVzdHMuIEl0IGlzIHByaW1hcmlseSBmb3IgdGhlIGNvbnZlbmllbmNlIG9mIAotICogdGhlIEFsbFRlc3RzU3VpdGUuCi0gKiAgCi0gKi8KLXB1YmxpYyBjbGFzcyBMYXVuY2hpbmdTdWl0ZSBleHRlbmRzIFRlc3RTdWl0ZSB7Ci0JcHVibGljIHN0YXRpYyBUZXN0U3VpdGUgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgTGF1bmNoaW5nU3VpdGUoKTsKLQl9Ci0KLQlwdWJsaWMgTGF1bmNoaW5nU3VpdGUoKSB7Ci0JCXN1cGVyKCJYU0wgTGF1bmNoaW5nIFRlc3QgU3VpdGUiKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFhTTExhdW5jaGluZ1Rlc3RzLmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0SW5wdXRGaWxlQmxvY2suY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKExhdW5jaFNob3J0Y3V0VGVzdHMuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFJlc3VsdFJ1bm5hYmxlVGVzdC5jbGFzcykpOwotCX0KLQotCXB1YmxpYyBMYXVuY2hpbmdTdWl0ZShDbGFzcyB0aGVDbGFzcywgU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIodGhlQ2xhc3MsIG5hbWUpOwotCX0KLQotCXB1YmxpYyBMYXVuY2hpbmdTdWl0ZShDbGFzcyB0aGVDbGFzcykgewotCQlzdXBlcih0aGVDbGFzcyk7Ci0JfQotCi0JcHVibGljIExhdW5jaGluZ1N1aXRlKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLnRlc3RzL3Rlc3QtbGF1bmNoaW5nLXNyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy90ZXN0cy9NaXNjLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy50ZXN0cy90ZXN0LWxhdW5jaGluZy1zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvdGVzdHMvTWlzYy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDc4YzRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLnRlc3RzL3Rlc3QtbGF1bmNoaW5nLXNyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy90ZXN0cy9NaXNjLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgR2FyeSBLYXJhc2l1ayAoSUJNIENvcnBvcmF0aW9uKSAtIGluaXRpYWwgaW1wbGVtZW50YXRpb24KLSAqICAgICBKZXNwZXIgU3RlZW4gTfhsbGVyIC0gYWRhcHRlZCBmb3IgWFNMCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy50ZXN0czsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLnRleHQuRGF0ZUZvcm1hdDsKLWltcG9ydCBqYXZhLnRleHQuU2ltcGxlRGF0ZUZvcm1hdDsKLWltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKLQotLyoqCi0gKiBTb21lIG1pc2NlbGxhbmVvdXMgaGVscGVyIG1ldGhvZHMuIAotICogQGF1dGhvciBrYXJhc2l1awotICoKLSAqLwotcHVibGljIGNsYXNzIE1pc2MgewotCQotCXByaXZhdGUgc3RhdGljIERhdGVGb3JtYXQgX2RmID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoIkhIOm1tOnNzLlNTU1MiKTsgLy8kTk9OLU5MUy0xJAotCQotCXB1YmxpYyBzdGF0aWMgdm9pZCBjbG9zZShJbnB1dFN0cmVhbSBpbil7Ci0JCWlmIChpbiA9PSBudWxsKXJldHVybjsKLQkJdHJ5IHsKLQkJCWluLmNsb3NlKCk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpewotCQkJLy8gZWF0IGl0Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgY2xvc2UoT3V0cHV0U3RyZWFtIG91dCkgewotCQlpZiAob3V0ID09IG51bGwpcmV0dXJuOwotCQl0cnkgewotCQkJb3V0LmNsb3NlKCk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpewotCQkJLy8gZWF0IGl0Ci0JCX0JCQotCX0KLQkKLQkvKioKLQkgKiBXcml0ZSBhIGxpbmUgdG8gdGhlIGNvbnNvbGUgZm9yIGRlYnVnZ2luZy4KLQkgKiBAcGFyYW0gbGluZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2coU3RyaW5nIGxpbmUpewotCQlTeXN0ZW0uZXJyLnByaW50bG4odGltZXN0YW1wSXQobGluZSkpOyAgCi0JfQotCQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIHRpbWVzdGFtcEl0KFN0cmluZyBsaW5lKXsKLQkJRGF0ZSBkYXRlID0gbmV3IERhdGUoKTsKLQkJbG9uZyB0aHJlYWQgPSBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldElkKCk7Ci0JCXJldHVybiBfZGYuZm9ybWF0KGRhdGUpICsgIiAiICsgdGhyZWFkICsgIiAiICsgbGluZTsvLyROT04tTkxTLTEkLy8kTk9OLU5MUy0yJAotCX0KLQkKLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nKFN0cmluZ0J1ZmZlciBiKXsKLQkJbG9nKGIudG9TdHJpbmcoKSk7Ci0JCWIuc2V0TGVuZ3RoKDApOwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIHZvaWQgbml5KFN0cmluZyBtc2cpewotCQlpZiAobXNnID09IG51bGwpbXNnID0gIlNvcnJ5LCB0aGlzIGZ1bmN0aW9uIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiOyAvLyROT04tTkxTLTEkCi0JCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKG1zZyk7Ci0JfQotCQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcudGVzdHMvdGVzdC1sYXVuY2hpbmctc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvbGF1bmNoaW5nL3Rlc3RzL01vY2tYU0xMYXVuY2hTaG9ydEN1dC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcudGVzdHMvdGVzdC1sYXVuY2hpbmctc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvbGF1bmNoaW5nL3Rlc3RzL01vY2tYU0xMYXVuY2hTaG9ydEN1dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzAwNjM0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLnRlc3RzL3Rlc3QtbGF1bmNoaW5nLXNyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy90ZXN0cy9Nb2NrWFNMTGF1bmNoU2hvcnRDdXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNjIwNDYgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLnRlc3RzOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5EZWJ1Z1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLklMYXVuY2hDb25maWd1cmF0aW9uVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLklMYXVuY2hNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmludGVybmFsLmNvcmUuSUNvbmZpZ3VyYXRpb25FbGVtZW50Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuWFNMTGF1bmNoU2hvcnRjdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuWFNMTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50czsKLQotcHVibGljIGNsYXNzIE1vY2tYU0xMYXVuY2hTaG9ydEN1dCBleHRlbmRzIFhTTExhdW5jaFNob3J0Y3V0IHsKLQkKLQlwdWJsaWMgSUxhdW5jaE1hbmFnZXIgdGVzdEdldExhdW5jaE1hbmFnZXIoKQotCXsKLQkJcmV0dXJuIERlYnVnUGx1Z2luLmdldERlZmF1bHQoKS5nZXRMYXVuY2hNYW5hZ2VyKCk7Ci0JfQotCi0JcHVibGljIElMYXVuY2hDb25maWd1cmF0aW9uVHlwZSB0ZXN0R2V0Q29uZmlndXJhdGlvblR5cGUoKQotCXsKLQkJcmV0dXJuIGdldExhdW5jaE1hbmFnZXIoKS5nZXRMYXVuY2hDb25maWd1cmF0aW9uVHlwZShYU0xMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLklEX0xBVU5DSF9DT05GSUdfVFlQRSk7Ci0JfQotCQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy50ZXN0cy90ZXN0LWxhdW5jaGluZy1zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvdGVzdHMvVGVzdEVudmlyb25tZW50LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy50ZXN0cy90ZXN0LWxhdW5jaGluZy1zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvdGVzdHMvVGVzdEVudmlyb25tZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzMTAwODkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcudGVzdHMvdGVzdC1sYXVuY2hpbmctc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvbGF1bmNoaW5nL3Rlc3RzL1Rlc3RFbnZpcm9ubWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBHYXJ5IEthcmFzaXVrIChJQk0gQ29ycG9yYXRpb24pIC0gaW5pdGlhbCBpbXBsZW1lbnRhdGlvbgotICogICAgIEplc3BlciBTdGVlbiBN+GxsZXIgLSBhZGFwdGVkIGZvciBYU0wKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy50ZXN0czsKLQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSdW5uYWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JbmNyZW1lbnRhbFByb2plY3RCdWlsZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmpvYnMuSm9iOwotCi1wdWJsaWMgY2xhc3MgVGVzdEVudmlyb25tZW50IHsKLQkKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUcgPSB0cnVlOwotCQotCXByaXZhdGUgSVdvcmtzcGFjZQlfd29ya3NwYWNlOwotCXByaXZhdGUgSGFzaE1hcDxTdHJpbmcsIElQcm9qZWN0PiBfcHJvamVjdHMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIElQcm9qZWN0PigyMCk7Ci0JCi0JcHVibGljIFRlc3RFbnZpcm9ubWVudCgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJX3dvcmtzcGFjZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKTsKLQkJaWYgKERFQlVHKXsKLQkJCV93b3Jrc3BhY2UuZ2V0Um9vdCgpLmRlbGV0ZSh0cnVlLCB0cnVlLCBudWxsKTsKLQkJfQotCX0KLQkKLQlwdWJsaWMgSVBhdGggYWRkRm9sZGVyKElQYXRoIHJvb3QsIFN0cmluZyBmb2xkZXJOYW1lKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlQYXRoIHBhdGggPSByb290LmFwcGVuZChmb2xkZXJOYW1lKTsKLQkJY3JlYXRlRm9sZGVyKHBhdGgpOwotCQlyZXR1cm4gcGF0aDsKLQl9Ci0JCi0JcHVibGljIHZvaWQgaW5jcmVtZW50YWxCdWlsZCgpIHRocm93cyBDb3JlRXhjZXB0aW9uewotCQlnZXRXb3Jrc3BhY2UoKS5idWlsZChJbmNyZW1lbnRhbFByb2plY3RCdWlsZGVyLklOQ1JFTUVOVEFMX0JVSUxELCBudWxsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgZnVsbEJ1aWxkKCkgdGhyb3dzIENvcmVFeGNlcHRpb257Ci0JCWdldFdvcmtzcGFjZSgpLmJ1aWxkKEluY3JlbWVudGFsUHJvamVjdEJ1aWxkZXIuRlVMTF9CVUlMRCwgbnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHdhaXRGb3JCdWlsZCgpewotCQlib29sZWFuIHdhc0ludGVycnVwdGVkID0gZmFsc2U7Ci0JCWRvIHsKLQkJCXRyeSB7Ci0JCQkJSm9iLmdldEpvYk1hbmFnZXIoKS5qb2luKFJlc291cmNlc1BsdWdpbi5GQU1JTFlfTUFOVUFMX0JVSUxELCBudWxsKTsKLQkJCQl3YXNJbnRlcnJ1cHRlZCA9IGZhbHNlOwotCQkJfQotCQkJY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpewotCQkJCXdhc0ludGVycnVwdGVkID0gdHJ1ZTsKLQkJCX0KLQkJfSB3aGlsZSh3YXNJbnRlcnJ1cHRlZCk7Ci0JfQotCi0JcHJpdmF0ZSBJRm9sZGVyIGNyZWF0ZUZvbGRlcihJUGF0aCBwYXRoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCWlmIChwYXRoLnNlZ21lbnRDb3VudCgpIDw9IDEpcmV0dXJuIG51bGw7Ci0JCQotCQlJRm9sZGVyIGZvbGRlciA9IF93b3Jrc3BhY2UuZ2V0Um9vdCgpLmdldEZvbGRlcihwYXRoKTsKLQkJaWYgKCFmb2xkZXIuZXhpc3RzKCkpewotCQkJZm9sZGVyLmNyZWF0ZSh0cnVlLCB0cnVlLCBudWxsKTsKLQkJfQotCQlyZXR1cm4gZm9sZGVyOwotCX0KLQotCXB1YmxpYyBJUHJvamVjdCBjcmVhdGVQcm9qZWN0KFN0cmluZyBuYW1lKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCWZpbmFsIElQcm9qZWN0IHByb2plY3QgPSBfd29ya3NwYWNlLmdldFJvb3QoKS5nZXRQcm9qZWN0KG5hbWUpOwotCQlJV29ya3NwYWNlUnVubmFibGUgY3JlYXRlID0gbmV3IElXb3Jrc3BhY2VSdW5uYWJsZSgpIHsKLQotCQkJcHVibGljIHZvaWQgcnVuKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQkJCXByb2plY3QuY3JlYXRlKG1vbml0b3IpOwotCQkJCXByb2plY3Qub3Blbihtb25pdG9yKTsJCi0JCQl9CQkKLQkJfTsKLQkJCi0JCV93b3Jrc3BhY2UucnVuKGNyZWF0ZSwgbnVsbCk7Ci0JCV9wcm9qZWN0cy5wdXQobmFtZSwgcHJvamVjdCk7Ci0JCQotCQlyZXR1cm4gcHJvamVjdDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlpZiAoREVCVUcpcmV0dXJuOwotCQlmb3IgKEl0ZXJhdG9yPElQcm9qZWN0PiBpdD1fcHJvamVjdHMudmFsdWVzKCkuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOyl7Ci0JCQlJUHJvamVjdCBwcm9qZWN0ID0gaXQubmV4dCgpOwotCQkJcHJvamVjdC5kZWxldGUodHJ1ZSwgbnVsbCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgSVBhdGggYWRkRmlsZShJUGF0aCBmb2xkZXIsIFN0cmluZyBmaWxlTmFtZSwgU3RyaW5nIGNvbnRlbnRzKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiB7Ci0JCUlQYXRoIGZpbGVQYXRoID0gZm9sZGVyLmFwcGVuZChmaWxlTmFtZSk7Ci0JCWNyZWF0ZUZpbGUoZmlsZVBhdGgsIGNvbnRlbnRzLmdldEJ5dGVzKCJVVEY4IikpOwotCQlyZXR1cm4gZmlsZVBhdGg7Ci0JfQotCQotCXB1YmxpYyBJUGF0aCBhZGRGaWxlRnJvbVJlc291cmNlKElQYXRoIGZvbGRlciwgU3RyaW5nIGZpbGVOYW1lLCBTdHJpbmcgcGF0aCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlJUGF0aCBmaWxlUGF0aCA9IGZvbGRlci5hcHBlbmQoZmlsZU5hbWUpOwotCQljcmVhdGVGaWxlRnJvbVJlc291cmNlKGZpbGVQYXRoLCBwYXRoKTsKLQkJcmV0dXJuIGZpbGVQYXRoOwotCX0KLQkKLQlwcml2YXRlIElGaWxlIGNyZWF0ZUZpbGUoSVBhdGggZmlsZVBhdGgsIGJ5dGVbXSBjb250ZW50cykgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlJRmlsZSBmaWxlID0gX3dvcmtzcGFjZS5nZXRSb290KCkuZ2V0RmlsZShmaWxlUGF0aCk7Ci0JCUJ5dGVBcnJheUlucHV0U3RyZWFtIGluID0gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKGNvbnRlbnRzKTsKLQkJaWYgKGZpbGUuZXhpc3RzKCkpZmlsZS5zZXRDb250ZW50cyhpbiwgdHJ1ZSwgZmFsc2UsIG51bGwpOwotCQllbHNlIGZpbGUuY3JlYXRlKGluLCB0cnVlLCBudWxsKTsKLQkJcmV0dXJuIGZpbGU7Ci0JfQotCi0JcHJpdmF0ZSBJRmlsZSBjcmVhdGVGaWxlRnJvbVJlc291cmNlKElQYXRoIGZpbGVQYXRoLCBTdHJpbmcgcGF0aCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlJRmlsZSBmaWxlID0gX3dvcmtzcGFjZS5nZXRSb290KCkuZ2V0RmlsZShmaWxlUGF0aCk7Ci0JCUlucHV0U3RyZWFtIGluID0gVGVzdEVudmlyb25tZW50LmNsYXNzLmdldFJlc291cmNlQXNTdHJlYW0ocGF0aCk7Ci0JCWlmIChmaWxlLmV4aXN0cygpKWZpbGUuc2V0Q29udGVudHMoaW4sIHRydWUsIGZhbHNlLCBudWxsKTsKLQkJZWxzZSBmaWxlLmNyZWF0ZShpbiwgdHJ1ZSwgbnVsbCk7Ci0JCXJldHVybiBmaWxlOwotCX0KLQlwdWJsaWMgSVdvcmtzcGFjZSBnZXRXb3Jrc3BhY2UoKXsKLQkJcmV0dXJuIF93b3Jrc3BhY2U7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy50ZXN0cy90ZXN0LWxhdW5jaGluZy1zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvdGVzdHMvdGVzdGNhc2UvTGF1bmNoU2hvcnRjdXRUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcudGVzdHMvdGVzdC1sYXVuY2hpbmctc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvbGF1bmNoaW5nL3Rlc3RzL3Rlc3RjYXNlL0xhdW5jaFNob3J0Y3V0VGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggOTNhZjZhZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy50ZXN0cy90ZXN0LWxhdW5jaGluZy1zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvdGVzdHMvdGVzdGNhc2UvTGF1bmNoU2hvcnRjdXRUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI2MjA0NiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLnRlc3RzLnRlc3RjYXNlOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuaW50ZXJuYWwudWkubGF1bmNoQ29uZmlndXJhdGlvbnMuTGF1bmNoU2hvcnRjdXRFeHRlbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aXZpdGllcy5Xb3JrYmVuY2hBY3Rpdml0eUhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5YU0xMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLnRlc3RzLkFic3RyYWN0TGF1bmNoaW5nVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy50ZXN0cy5Nb2NrWFNMTGF1bmNoU2hvcnRDdXQ7Ci0KLS8qKgotICogVGVzdHMgdGhlIGNhcGFiaWxpdGllcyBvZiBsYXVuY2ggc2hvcnRjdXRzIGZyb20gdGhlIDxjb2RlPkxhdW5jaFNob3J0Y3V0czwvY29kZT4gZXh0ZW5zaW9uIHBvaW50Ci0gKiAKLSAqIEBzaW5jZSAxLjAKLSAqLwotcHVibGljIGNsYXNzIExhdW5jaFNob3J0Y3V0VGVzdHMgZXh0ZW5kcyBBYnN0cmFjdExhdW5jaGluZ1Rlc3QgewotCi0JCi0JLyoqCi0JICogQ29uc3RydWN0b3IKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBMYXVuY2hTaG9ydGN1dFRlc3RzKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQkKLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0JCXN1cGVyLnNldFVwKCk7Ci0JCUlQYXRoIHBhdGggPSBmb2xkZXIuZ2V0RnVsbFBhdGgoKTsKLQkJY29weUNvbmZpZ3VyYXRpb25Ub1dvcmtzcGFjZShwYXRoLCAiU2ltcGxlVHJhbnNmb3JtLmxhdW5jaCIpOwotCX0KLQkKLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQllbnYuZGlzcG9zZSgpOwotCQlzdXBlci50ZWFyRG93bigpOwotCX0KLQkKLQkvKioKLQkgKiBUZXN0cyB0aGF0IHRoZSBzaG9ydCBjdXQgaXMgZGVmaW5lZCB2aWEgdGhlIGV4dGVuc2lvbiBwb2ludC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0U2hvcnRjdXRFeHRlbnNpb25Qb2ludENvbmZpZ3VyZWQoKSB7Ci0JCUxhdW5jaFNob3J0Y3V0RXh0ZW5zaW9uIGV4dCA9IGdldExhdW5jaFNob3J0Y3V0RXh0ZW5zaW9uKFhTTF9MQVVOQ0hfU0hPUlRDVVRfSUQpOwotCQlhc3NlcnROb3ROdWxsKCJYU0xUIHN0eWxlc2hlZXQgc2hvcnRjdXQgbm90IGZvdW5kIiwgZXh0KTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0WFNMTGF1bmNoQ29uZmlnVHlwZURlZmluZWQoKSB7Ci0JCU1vY2tYU0xMYXVuY2hTaG9ydEN1dCBzaG9ydEN1dCA9IG5ldyBNb2NrWFNMTGF1bmNoU2hvcnRDdXQoKTsKLQotCQlTdHJpbmcgdHlwZWlkID0gWFNMTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5JRF9MQVVOQ0hfQ09ORklHX1RZUEU7IAotCQlhc3NlcnRFcXVhbHMoIlVuZXhwZWN0ZWQgc2hvcnRjdXQgVHlwZSIsIHR5cGVpZCwgc2hvcnRDdXQudGVzdEdldENvbmZpZ3VyYXRpb25UeXBlKCkuZ2V0SWRlbnRpZmllcigpKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyB0aGF0IHRoZSBsb2NhbCBqYXZhIGFwcCBzaG9ydGN1dCBkb2VzIG5vdCBzdXBwb3J0IHNvbWUgZmFrZSB0eXBlIGlkICdmb28nCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEFzc29jaWF0ZWRDb25maWd1cmF0aW9uVHlwZU5vdFN1cHBvcnRlZCgpIHsKLQkJTGF1bmNoU2hvcnRjdXRFeHRlbnNpb24gZXh0ID0gZ2V0TGF1bmNoU2hvcnRjdXRFeHRlbnNpb24oWFNMX0xBVU5DSF9TSE9SVENVVF9JRCk7Ci0JCWFzc2VydE5vdE51bGwoIlhTTFQgc2hvcnRjdXQgbm90IGZvdW5kIiwgZXh0KTsgLy8kTk9OLU5MUy0xJAotCQlTdHJpbmcgdHlwZWlkID0gIm9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuZm9vIjsgLy8kTk9OLU5MUy0xJAotCQlhc3NlcnRUcnVlKCJsb2NhbCB4c2x0IGFwcCBzaG9ydGN1dCBzaG91bGQgbm90IHN1cHBvcnQgZm9vIiwgIWV4dC5nZXRBc3NvY2lhdGVkQ29uZmlndXJhdGlvblR5cGVzKCkuY29udGFpbnModHlwZWlkKSk7IC8vJE5PTi1OTFMtMSQKLQl9CQotCQotCQotCS8qKgotCSAqIFJldHVybnMgYSBsaXN0aW5nIG9mIGFsbCBhcHBsaWNhYmxlIDxjb2RlPkxhdW5jaFNob3J0Y3V0RXh0ZW5zaW9uPC9jb2RlPnMgZm9yIHRoZSBnaXZlbgotCSAqIGxhdW5jaCBjb25maWd1cmF0aW9uIHR5cGUgaWQuCi0JICogQHBhcmFtIHR5cGVpZCB0aGUgaWQgb2YgdGhlIGxhdW5jaCBjb25maWd1cmF0aW9uCi0JICogQHJldHVybiBhIGxpc3Rpbmcgb2YgPGNvZGU+TGF1bmNoU2hvcnRjdXRFeHRlbnNpb248L2NvZGU+cyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZCBsYXVuY2ggY29uZmlndXJhdGlvbgotCSAqIHR5cGUgaWQgb3IgYW4gZW1wdHkgbGlzdCwgbmV2ZXIgPGNvZGU+bnVsbDwvY29kZT4KLQkgKiAKLQkgKiBAc2luY2UgMS4wCi0JICovCi0JcHVibGljIExpc3QgZ2V0QXBwbGljYWJsZUxhdW5jaFNob3J0Y3V0cyhTdHJpbmcgdHlwZWlkKSB7Ci0JCUxpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJTGF1bmNoU2hvcnRjdXRFeHRlbnNpb24gZXh0ID0gbnVsbDsKLQkJTGlzdCBzaG9ydGN1dHMgPSBnZXRMYXVuY2hDb25maWd1cmF0aW9uTWFuYWdlcigpLmdldExhdW5jaFNob3J0Y3V0cygpOwotCQlmb3IoaW50IGkgPSAwOyBpIDwgc2hvcnRjdXRzLnNpemUoKTsgaSsrKSB7Ci0JCQlleHQgPSAoTGF1bmNoU2hvcnRjdXRFeHRlbnNpb24pIHNob3J0Y3V0cy5nZXQoaSk7Ci0JCQlpZihleHQuZ2V0QXNzb2NpYXRlZENvbmZpZ3VyYXRpb25UeXBlcygpLmNvbnRhaW5zKHR5cGVpZCkgJiYgIVdvcmtiZW5jaEFjdGl2aXR5SGVscGVyLmZpbHRlckl0ZW0oZXh0KSkgewotCQkJCWxpc3QuYWRkKGV4dCk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGxpc3Q7Ci0JfQkKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLnRlc3RzL3Rlc3QtbGF1bmNoaW5nLXNyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy90ZXN0cy90ZXN0Y2FzZS9Nb2NrSW5wdXRGaWxlQmxvY2suamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLnRlc3RzL3Rlc3QtbGF1bmNoaW5nLXNyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy90ZXN0cy90ZXN0Y2FzZS9Nb2NrSW5wdXRGaWxlQmxvY2suamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTNkNDdiMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy50ZXN0cy90ZXN0LWxhdW5jaGluZy1zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvdGVzdHMvdGVzdGNhc2UvTW9ja0lucHV0RmlsZUJsb2NrLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICpDb3B5cmlnaHQgKGMpIDIwMDggU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuCi0gKkFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKndoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICpDb250cmlidXRvcnM6Ci0gKiAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjE0MjI4IC0gVmVyaWZ5IHRoYXQgRmlsZSBFeHRlbnNpb25zIGF2YWlsYWJsZSBmb3IgaW5wdXQgYmxvY2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy50ZXN0cy50ZXN0Y2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5tYWluLklucHV0RmlsZUJsb2NrOwotCi1wdWJsaWMgY2xhc3MgTW9ja0lucHV0RmlsZUJsb2NrIGV4dGVuZHMgSW5wdXRGaWxlQmxvY2sgewotCi0JcHVibGljIE1vY2tJbnB1dEZpbGVCbG9jayhJRmlsZSBkZWZhdWx0RmlsZSkgewotCQlzdXBlcihkZWZhdWx0RmlsZSk7Ci0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY29uc3RydWN0b3Igc3R1YgotCX0KLQkKLQlwdWJsaWMgU3RyaW5nW10gZ2V0QXZhaWxhYmxlRmlsZUV4dGVuc2lvbnMoKSB7Ci0JCS8vIFNpbmNlIHRoaXMgaXMgcHJpdmF0ZSB3ZSBuZWVkIHRvIGV4cG9zZSBpdCBmb3IgdGVzdGluZy4KLQkJcmV0dXJuIGdldEZpbGVFeHRlbnNpb25zKCk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy50ZXN0cy90ZXN0LWxhdW5jaGluZy1zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvdGVzdHMvdGVzdGNhc2UvTW9ja1Jlc3VsdFJ1bm5hYmxlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy50ZXN0cy90ZXN0LWxhdW5jaGluZy1zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvdGVzdHMvdGVzdGNhc2UvTW9ja1Jlc3VsdFJ1bm5hYmxlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0ODU2MGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcudGVzdHMvdGVzdC1sYXVuY2hpbmctc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvbGF1bmNoaW5nL3Rlc3RzL3Rlc3RjYXNlL01vY2tSZXN1bHRSdW5uYWJsZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI1OTA1MyAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLnRlc3RzLnRlc3RjYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuU291cmNlVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0U2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkuaW50ZXJuYWwudmlld3MuUmVzdWx0UnVubmFibGU7Ci0KLXB1YmxpYyBjbGFzcyBNb2NrUmVzdWx0UnVubmFibGUgZXh0ZW5kcyBSZXN1bHRSdW5uYWJsZSB7Ci0KLQlwdWJsaWMgTW9ja1Jlc3VsdFJ1bm5hYmxlKFNvdXJjZVZpZXdlciB2aWV3ZXIsIFN0cmluZyByZXN1bHRzLAotCQkJSVdvcmtiZW5jaFBhcnRTaXRlIHNpdGUpIHsKLQkJc3VwZXIodmlld2VyLCByZXN1bHRzLCBzaXRlKTsKLQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjb25zdHJ1Y3RvciBzdHViCi0JfQotCQotCXB1YmxpYyBJRG9jdW1lbnQgdGVzdENyZWF0ZURvY3VtZW50KCkgewotCQlyZXR1cm4gY3JlYXRlRG9jdW1lbnQoKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLnRlc3RzL3Rlc3QtbGF1bmNoaW5nLXNyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy90ZXN0cy90ZXN0Y2FzZS9SZXN1bHRSdW5uYWJsZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLnRlc3RzL3Rlc3QtbGF1bmNoaW5nLXNyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy90ZXN0cy90ZXN0Y2FzZS9SZXN1bHRSdW5uYWJsZVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjViMjQwYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy50ZXN0cy90ZXN0LWxhdW5jaGluZy1zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvdGVzdHMvdGVzdGNhc2UvUmVzdWx0UnVubmFibGVUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqQ29weXJpZ2h0IChjKSAyMDA5IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzLgotICpBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKmFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICp3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICpodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqQ29udHJpYnV0b3JzOgotICogICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLnRlc3RzLnRlc3RjYXNlOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3REZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5CYWRMb2NhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmNvbnRlbnRhc3Npc3QuSUNvbXBsZXRpb25Qcm9wb3NhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5JVGV4dEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXhjZXB0aW9ucy5SZXNvdXJjZUFscmVhZHlFeGlzdHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV4Y2VwdGlvbnMuUmVzb3VyY2VJblVzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuU3RydWN0dXJlZFRleHRWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmVuY29kaW5nLlhNTERvY3VtZW50TG9hZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uWFNMOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS5pbnRlcm5hbC52aWV3cy4qOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgaXMgYW4gYWJzdHJhY3QgY2xhc3MgZm9yIENvbnRlbnQgQ29tcGxldGlvbiBUZXN0cy4gSXQgcHJvdmlkZXMgYWxsCi0gKiBvZiB0aGUgY29tbW9uIG1ldGhvZHMgdGhhdCBhcmUgdXNlZCBieSB0aGUgY29tcGxldGlvbiB0ZXN0cyBzbyB0aGF0IHRoZXkKLSAqIGFyZW4ndCBkdXBsaWNhdGVkIGFjcm9zcyB0aGUgdmFyaW91cyBjbGFzc2VzLiBPdmVycmlkZXMgY2FuIGJlIGRvbmUgd2hlcmUKLSAqIGFwcHJvcHJpYXRlLgotICogCi0gKiBAYXV0aG9yIERhdmlkIENhcnZlcgotICogCi0gKi8KLXB1YmxpYyBjbGFzcyBSZXN1bHRSdW5uYWJsZVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcm90ZWN0ZWQgU3RydWN0dXJlZFRleHRWaWV3ZXIgc291cmNlVmlld2VyID0gbnVsbDsKLQlwcm90ZWN0ZWQgU2hlbGwgc2hlbGwgPSBudWxsOwotCXByb3RlY3RlZCBDb21wb3NpdGUgcGFyZW50ID0gbnVsbDsKLQotCi0JcHVibGljIFJlc3VsdFJ1bm5hYmxlVGVzdCgpIHsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplU291cmNlVmlld2VyKCkgewotCQkvLyBzb21lIHRlc3QgZW52aXJvbm1lbnRzIG1pZ2h0IG5vdCBoYXZlIGEgInJlYWwiIGRpc3BsYXkKLQkJaWYgKERpc3BsYXkuZ2V0Q3VycmVudCgpICE9IG51bGwpIHsKLQotCi0JCQlpZiAoUGxhdGZvcm1VSS5pc1dvcmtiZW5jaFJ1bm5pbmcoKSkgewotCQkJCXNoZWxsID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKQotCQkJCQkJLmdldFNoZWxsKCk7Ci0JCQl9IGVsc2UgewotCQkJCXNoZWxsID0gbmV3IFNoZWxsKERpc3BsYXkuZ2V0Q3VycmVudCgpKTsKLQkJCX0KLQkJCXBhcmVudCA9IG5ldyBDb21wb3NpdGUoc2hlbGwsIFNXVC5OT05FKTsKLQotCQkJLy8gZHVtbXkgdmlld2VyCi0JCQlzb3VyY2VWaWV3ZXIgPSBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXIocGFyZW50LCBudWxsLCBudWxsLCBmYWxzZSwKLQkJCQkJU1dULk5PTkUpOwotCQl9IGVsc2UgewotCQkJQXNzZXJ0Ci0JCQkJCS5mYWlsKCJVbmFibGUgdG8gcnVuIHRoZSB0ZXN0IGFzIGEgZGlzcGxheSBtdXN0IGJlIGF2YWlsYWJsZS4iKTsKLQkJfQotCi0JCWNvbmZpZ3VyZVNvdXJjZVZpZXdlcigpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGNvbmZpZ3VyZVNvdXJjZVZpZXdlcigpIHsKLQkJc291cmNlVmlld2VyLmNvbmZpZ3VyZShuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uWFNMKCkpOwotCi0JfQotCi0JLyoqCi0JICogU2V0dXAgdGhlIG5lY2Vzc2FyeSBwcm9qZWN0cywgZmlsZXMsIGFuZCBzb3VyY2Ugdmlld2VyIGZvciB0aGUgdGVzdHMuCi0JICovCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJaW5pdGlhbGl6ZVNvdXJjZVZpZXdlcigpOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXBhcmVudC5kaXNwb3NlKCk7Ci0JCXN1cGVyLnRlYXJEb3duKCk7Ci0JfQotCQotCi0JcHVibGljIHZvaWQgdGVzdE5vUHJvY2Vzc2luZ0luc3RydWN0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVN0cmluZyByZXN1bHRzID0gIlRoaXMgaXMgc29tZSBzYW1wbGUgdGV4dC4iOwotCQlNb2NrUmVzdWx0UnVubmFibGUgcnVubmFibGUgPSBuZXcgTW9ja1Jlc3VsdFJ1bm5hYmxlKHNvdXJjZVZpZXdlciwgcmVzdWx0cywgbnVsbCk7Ci0JCUlEb2N1bWVudCBkb2N1bWVudCA9IHJ1bm5hYmxlLnRlc3RDcmVhdGVEb2N1bWVudCgpOwotCQlhc3NlcnROb3ROdWxsKCJTdHJ1Y3R1cmVkIERvY3VtZW50IHdhc24gbm90IGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5LiIsIGRvY3VtZW50KTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy50ZXN0cy90ZXN0LWxhdW5jaGluZy1zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvdGVzdHMvdGVzdGNhc2UvVGVzdElucHV0RmlsZUJsb2NrLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy50ZXN0cy90ZXN0LWxhdW5jaGluZy1zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvdGVzdHMvdGVzdGNhc2UvVGVzdElucHV0RmlsZUJsb2NrLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlNDcwYzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcudGVzdHMvdGVzdC1sYXVuY2hpbmctc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvbGF1bmNoaW5nL3Rlc3RzL3Rlc3RjYXNlL1Rlc3RJbnB1dEZpbGVCbG9jay5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqQ29weXJpZ2h0IChjKSAyMDA4IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzLgotICpBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKmFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICp3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICpodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqQ29udHJpYnV0b3JzOgotICogICAgRGF2aWQgQ2FydmVyIC0gYnVnIDIxNDIyOCAtIFZlcmlmeSB0aGF0IEZpbGUgRXh0ZW5zaW9ucyBhdmFpbGFibGUgZm9yIGlucHV0IGJsb2NrCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcudGVzdHMudGVzdGNhc2U7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLQotcHVibGljIGNsYXNzIFRlc3RJbnB1dEZpbGVCbG9jayBleHRlbmRzIFRlc3RDYXNlIHsKLQkKLQlwdWJsaWMgdm9pZCB0ZXN0WE1MRmlsZUV4dGVuc2lvbnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJTW9ja0lucHV0RmlsZUJsb2NrIGZpbGVCbG9jayA9IG5ldyBNb2NrSW5wdXRGaWxlQmxvY2sobnVsbCk7Ci0JCVN0cmluZ1tdIGZpbGVFeHRlbnNpb25zID0gZmlsZUJsb2NrLmdldEF2YWlsYWJsZUZpbGVFeHRlbnNpb25zKCk7Ci0JCWFzc2VydE5vdE51bGwoIk5vIGZpbGUgZXh0ZW5zaW9ucyByZXR1cm5lZC4iLCBmaWxlRXh0ZW5zaW9ucyk7Ci0JCWFzc2VydFRydWUoIkRpZCBub3QgZmluZCAneG1sJyIsIGZpbmRFeHRlbnNpb24oInhtbCIsIGZpbGVFeHRlbnNpb25zKSk7Ci0JCWFzc2VydFRydWUoIkRpZCBub3QgZmluZCAneHNsJyIsIGZpbmRFeHRlbnNpb24oInhzbCIsIGZpbGVFeHRlbnNpb25zKSk7Ci0JCWFzc2VydFRydWUoIkRpZCBub3QgZmluZCAneHNsdCciLCBmaW5kRXh0ZW5zaW9uKCJ4c2x0IiwgZmlsZUV4dGVuc2lvbnMpKTsKLQkJYXNzZXJ0VHJ1ZSgiRGlkIG5vdCBmaW5kICd4bWknIiwgZmluZEV4dGVuc2lvbigieG1pIiwgZmlsZUV4dGVuc2lvbnMpKTsKLQl9Ci0JCi0JcHJpdmF0ZSBib29sZWFuIGZpbmRFeHRlbnNpb24oU3RyaW5nIGV4dGVuc2lvbiwgU3RyaW5nW10gZXh0cykgewotCQlib29sZWFuIGZvdW5kc3cgPSBmYWxzZTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBleHRzLmxlbmd0aDsgaSsrKSB7Ci0JCQlpZiAoZXh0ZW5zaW9uLmVxdWFsc0lnbm9yZUNhc2UoZXh0c1tpXSkpIHsKLQkJCQlmb3VuZHN3ID0gdHJ1ZTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZm91bmRzdzsKLQl9Ci0JCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy50ZXN0cy90ZXN0LWxhdW5jaGluZy1zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvdGVzdHMvdGVzdGNhc2UvWFNMTGF1bmNoaW5nVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLnRlc3RzL3Rlc3QtbGF1bmNoaW5nLXNyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy90ZXN0cy90ZXN0Y2FzZS9YU0xMYXVuY2hpbmdUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTM5MDczLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLnRlc3RzL3Rlc3QtbGF1bmNoaW5nLXNyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy90ZXN0cy90ZXN0Y2FzZS9YU0xMYXVuY2hpbmdUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBKZXNwZXIgU3RlZW4gTfhsbGVyCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBKZXNwZXIgU3RlZW4gTfhsbGVyIC0gaW5pdGlhbCBYU0wgbGF1bmNoaW5nIHRlc3QKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI2MjA0NiAtIHJlZmFjdG9yZWQgZm9yIGJldHRlciByZWxpYWJpbGl0eS4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLnRlc3RzLnRlc3RjYXNlOwotCi1pbXBvcnQgamF2YS5pby4qOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLio7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS4qOwotaW1wb3J0IG9yZy53M2MuZG9tLio7Ci1pbXBvcnQgb3JnLnhtbC5zYXguKjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLnRlc3RzLkFic3RyYWN0TGF1bmNoaW5nVGVzdDsKLQotcHVibGljIGNsYXNzIFhTTExhdW5jaGluZ1Rlc3RzIGV4dGVuZHMgQWJzdHJhY3RMYXVuY2hpbmdUZXN0IHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUUkFOU0ZPUk1fQ09NTUVOVFMgPSAiVHJhbnNmb3JtQ29tbWVudHMiOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTSU1QTEVfVFJBTlNGT1JNID0gIlNpbXBsZVRyYW5zZm9ybSI7Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCi0JCUlQYXRoIHBhdGggPSBmb2xkZXIuZ2V0RnVsbFBhdGgoKTsKLQkJY29weUNvbmZpZ3VyYXRpb25Ub1dvcmtzcGFjZShwYXRoLCAiU2ltcGxlVHJhbnNmb3JtLmxhdW5jaCIpOwotCQljb3B5Q29uZmlndXJhdGlvblRvV29ya3NwYWNlKHBhdGgsICJUcmFuc2Zvcm1Db21tZW50cy5sYXVuY2giKTsKLQkJdGVzdFByb2plY3QucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwKLQkJCQluZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJd2hpbGUgKHRlc3RQcm9qZWN0LmlzU3luY2hyb25pemVkKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSkgPT0gZmFsc2UpIHsKLQkJCVRocmVhZC5zbGVlcCgxMDApOwotCQl9Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZW52LmRpc3Bvc2UoKTsKLQkJc3VwZXIudGVhckRvd24oKTsKLQl9Ci0JCi0JcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHRlc3RTaW1wbGVUcmFuc2Zvcm1hdGlvbigpIHRocm93cyBFeGNlcHRpb24gewotCQlJUGF0aCBmb2xkZXIgPSB0ZXN0UHJvamVjdC5nZXRGdWxsUGF0aCgpOwotCQllbnYuYWRkRmlsZUZyb21SZXNvdXJjZShmb2xkZXIsICIxLWlucHV0LnhtbCIsICIxLWlucHV0LnhtbCIpOwotCQllbnYuYWRkRmlsZUZyb21SZXNvdXJjZShmb2xkZXIsICIxLXRyYW5zZm9ybS54c2wiLCAiMS10cmFuc2Zvcm0ueHNsIik7Ci0JCXJlZnJlc2hQcm9qZWN0KCk7Ci0KLQkJbGF1bmNoQ29uZmlndXJhdGlvbihTSU1QTEVfVFJBTlNGT1JNKTsKLQkJSUZpbGUgb3V0cHV0ID0gdGVzdFByb2plY3QuZ2V0RmlsZSgiMS1pbnB1dC5vdXQueG1sIik7Ci0JCURvY3VtZW50IGRvYyA9IHBhcnNlWG1sKG91dHB1dC5nZXRDb250ZW50cyh0cnVlKSk7Ci0JCWFzc2VydEVxdWFscygicm9vdC1vdXQiLCBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCkuZ2V0Tm9kZU5hbWUoKSk7Ci0JfQotCi0JLyoqCi0JICogVGVzdCB0byBtYWtlIHN1cmUgY29tbWVudHMgYXJlIGJlaW5nIGNvcGllZCBvdXQgdG8gdGhlIG91dHB1dCBmaWxlLiBidWcKLQkgKiAyNTM3MDMKLQkgKiAKLQkgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24KLQkgKiBAdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uCi0JICogQHRocm93cyBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uCi0JICogQHRocm93cyBTQVhFeGNlcHRpb24KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHRlc3RUcmFuc2Zvcm1Db21tZW50cygpIHRocm93cyBFeGNlcHRpb24gewotCQlJUGF0aCBmb2xkZXIgPSB0ZXN0UHJvamVjdC5nZXRGdWxsUGF0aCgpOwotCQllbnYuYWRkRmlsZUZyb21SZXNvdXJjZShmb2xkZXIsICJ0ZXN0Q29tbWVudElucHV0LnhtbCIsCi0JCQkJInRlc3RDb21tZW50SW5wdXQueG1sIik7Ci0JCWVudi5hZGRGaWxlRnJvbVJlc291cmNlKGZvbGRlciwgInRlc3RDb21tZW50cy54c2wiLCAidGVzdENvbW1lbnRzLnhzbCIpOwotCQllbnYuYWRkRmlsZUZyb21SZXNvdXJjZShmb2xkZXIsICJleHBlY3RlZC54bWwiLAotCQkJCSJ0ZXN0Q29tbWVudHNFeHBlY3RlZC54bWwiKTsKLQkJcmVmcmVzaFByb2plY3QoKTsKLQotCQlsYXVuY2hDb25maWd1cmF0aW9uKFRSQU5TRk9STV9DT01NRU5UUyk7Ci0JCUlGaWxlIG91dHB1dCA9IHRlc3RQcm9qZWN0LmdldEZpbGUoInRlc3RDb21tZW50SW5wdXQub3V0LnhtbCIpOwotCQlJRmlsZSBleHBlY3RlZCA9IHRlc3RQcm9qZWN0LmdldEZpbGUoImV4cGVjdGVkLnhtbCIpOwotCi0JCVN0cmluZyByZXN1bHQgPSByZWFkRmlsZShvdXRwdXQuZ2V0Q29udGVudHMoKSk7Ci0JCVN0cmluZyB3YW50ZWQgPSByZWFkRmlsZShleHBlY3RlZC5nZXRDb250ZW50cygpKTsKLQotCQlhc3NlcnRFcXVhbHMoIlVuZXhwZWN0ZWQgcmVzdWx0czoiLCB3YW50ZWQsIHJlc3VsdCk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy50ZXN0cy90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLnRlc3RzL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDBlNDhkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLnRlc3RzL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0KLTxwcm9qZWN0Ci0gICAgbmFtZT0idGVzdHN1aXRlIgotICAgIGRlZmF1bHQ9InJ1biIKLSAgICBiYXNlZGlyPSIuIj4KLSAgICAKLSAgICA8IS0tIFRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyBzaG91bGQgYmUgcGFzc2VkIGludG8gdGhpcyBzY3JpcHQgLS0+Ci0gICAgPCEtLSAke2VjbGlwc2UtaG9tZX0gICAtLT4KLSAgICA8IS0tICR7YnVpbGREaXJlY3Rvcnl9ICAtLT4KLSAgICA8IS0tICR7YnVpbGRMYWJlbH0gICAgICAgIC0tPgotCi0gICAgPCEtLSBzaG91bGQgYmUgbGl0dGxlIG5lZWQgdG8gY2hhbmdlIHdoYXQncyBhYm92ZSAgLS0+Ci0gICAgCi0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9InBsdWdpbi1uYW1lIgotICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcudGVzdHMiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImNsYXNzbmFtZSIKLSAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLnRlc3RzLkxhdW5jaGluZ1N1aXRlIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJ0ZXN0VHlwZSIKLSAgICAgICAgdmFsdWU9ImNvcmUtdGVzdCIgLz4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYmVsb3cgLS0+Ci0KLSAgICA8ZWNobyBtZXNzYWdlPSJiYXNlZGlyOiAke2Jhc2VkaXJ9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImVjbGlwc2UtaG9tZTogJHtlY2xpcHNlLWhvbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImJ1aWxkRGlyZWN0b3J5OiAke2J1aWxkRGlyZWN0b3J5fSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJwbHVnaW4tbmFtZTogJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iY2xhc3NuYW1lOiAke2NsYXNzbmFtZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0idGVzdFR5cGUgJHt0ZXN0VHlwZX0iIC8+Ci0KLQotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJsaWJyYXJ5LWZpbGUiCi0gICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJ3b3Jrc3BhY2UiCi0gICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vanVuaXR3b3Jrc3BhY2VzLyR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICAKLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+Ci0gICAgPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KLSAgICA8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImluaXQiPgotICAgICAgICA8dHN0YW1wIC8+Ci0gICAgICAgIDxkZWxldGU+Ci0gICAgICAgICAgICA8ZmlsZXNldAotICAgICAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9IgotICAgICAgICAgICAgICAgIGluY2x1ZGVzPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICA8L2RlbGV0ZT4KLSAgICAgICAgPCEtLSBtYWtlIGRpcmVjdG9yeSwgaW4gY2FzZSBwYXRoIGRvZXNuJ3QgZXhpc3QgeWV0IC0tPgotICAgICAgICA8bWtkaXIgZGlyPSIke3dvcmtzcGFjZX0iIC8+Ci0gICAgICAgIDwhLS0gIGJ1dCBkZWxldGUgdG8gbWFrZSBzdXJlIGZyZXNoIGNvbnRlbnRzLS0+Ci0gICAgICAgIDxkZWxldGUKLSAgICAgICAgICAgIGRpcj0iJHt3b3Jrc3BhY2V9IgotICAgICAgICAgICAgcXVpZXQ9InRydWUiIC8+Ci0KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJzdWl0ZSI+Ci0KLSAgICAgICAgPGFudAotICAgICAgICAgICAgdGFyZ2V0PSIke3Rlc3RUeXBlfSIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImRhdGEtZGlyIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3dvcmtzcGFjZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJwbHVnaW4tbmFtZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7Y2xhc3NuYW1lfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1wYXRoIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgPC9hbnQ+Ci0KLSAgICAgICAgPGNvcHkKLSAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIKLSAgICAgICAgICAgIGZpbGU9IiR7d29ya3NwYWNlfS8ubWV0YWRhdGEvLmxvZyIKLSAgICAgICAgICAgIHRvZmlsZT0iJHtidWlsZERpcmVjdG9yeX0vJHtidWlsZExhYmVsfS90ZXN0UmVzdWx0cy9jb25zb2xlbG9ncy8ke3BsdWdpbi1uYW1lfS5jb25zb2xlbG9nLnR4dCIgLz4KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+Ci0gICAgPCEtLSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIC0tPgotICAgIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgotICAgICAgICA8IS0tIHVzdWFsbHkgbm8gbmVlZCB0byBkZWxldGUgd29ya3NwYWNlIHVudGlsIG5leHQgcnVuLCBhbmQgbGVhdmluZyBpdCBhbGxvd3MgaW5zcGVjdGlvbiAtLT4KLSAgICAgICAgPCEtLSA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIgLz4gLS0+Ci0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0gICAgPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgotICAgIDx0YXJnZXQKLSAgICAgICAgbmFtZT0icnVuIgotICAgICAgICBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgotICAgICAgICA8YW50Ci0gICAgICAgICAgICB0YXJnZXQ9ImNvbGxlY3QiCi0gICAgICAgICAgICBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0gICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJpbmNsdWRlcyIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0uKnhtbCIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9Im91dHB1dC1maWxlIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiIC8+Ci0gICAgICAgIDwvYW50PgotICAgIDwvdGFyZ2V0PgotCi08L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcudGVzdHMvdGVzdEZpbGVzL1NpbXBsZVRyYW5zZm9ybS5sYXVuY2ggYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy50ZXN0cy90ZXN0RmlsZXMvU2ltcGxlVHJhbnNmb3JtLmxhdW5jaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjIxNTFmZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy50ZXN0cy90ZXN0RmlsZXMvU2ltcGxlVHJhbnNmb3JtLmxhdW5jaAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgotPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcubGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgotPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuQVRUUl9BVFRSSUJVVEVTIiB2YWx1ZT0iJmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDsgc3RhbmRhbG9uZT0mcXVvdDtubyZxdW90Oz8mZ3Q7JiMxMDsmbHQ7QXR0cmlidXRlcy8mZ3Q7JiMxMDsiLz4KLTxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLkFUVFJfT1VUUFVUX1BST1BFUlRJRVMiIHZhbHVlPSImbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90OyBzdGFuZGFsb25lPSZxdW90O25vJnF1b3Q7PyZndDsmIzEwOyZsdDtQcm9wZXJ0aWVzLyZndDsmIzEwOyIvPgotPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuQVRUUl9QUk9DRVNTT1IiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy54YWxhbi5wcm9jZXNzb3IiLz4KLTxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLkFUVFJfVFJBTlNGT1JNRVJfRkFDVE9SWSIgdmFsdWU9Im9yZy5hcGFjaGUueGFsYW4ucHJvY2Vzc29yLlRyYW5zZm9ybWVyRmFjdG9yeUltcGwiLz4KLTxib29sZWFuQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5BVFRSX1VTRV9ERUZBVUxUX1BST0NFU1NPUiIgdmFsdWU9ImZhbHNlIi8+Ci08c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JTlZPS0VSX0RFU0NSSVBUT1IiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5qYXhwLmludm9rZSIvPgotPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5BVFRSX0ZPUk1BVF9GSUxFIiB2YWx1ZT0iZmFsc2UiLz4KLTxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5BVFRSX0lOUFVUX0ZJTEUiIHZhbHVlPSIke3dvcmtzcGFjZV9sb2M6L1hTTFRlc3RQcm9qZWN0LzEtaW5wdXQueG1sfSIvPgotPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5BVFRSX09QRU5fRklMRSIgdmFsdWU9InRydWUiLz4KLTxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5BVFRSX09VVFBVVF9GSUxFTkFNRSIgdmFsdWU9IiIvPgotPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLkFUVFJfT1VUUFVUX0ZPTERFUiIgdmFsdWU9IiIvPgotPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLkFUVFJfUElQRUxJTkUiIHZhbHVlPSImbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90OyBzdGFuZGFsb25lPSZxdW90O25vJnF1b3Q7PyZndDsmIzEwOyZsdDtQaXBlbGluZSZndDsmIzEwOyZsdDtPdXRwdXRQcm9wZXJ0aWVzLyZndDsmIzEwOyZsdDtUcmFuc2Zvcm0gcGF0aD0mcXVvdDsvWFNMVGVzdFByb2plY3QvMS10cmFuc2Zvcm0ueHNsJnF1b3Q7IHBhdGhUeXBlPSZxdW90O3Jlc291cmNlJnF1b3Q7IHVyaVJlc29sdmVyPSZxdW90OyZxdW90OyZndDsmIzEwOyZsdDtQYXJhbWV0ZXJzLyZndDsmIzEwOyZsdDsvVHJhbnNmb3JtJmd0OyYjMTA7Jmx0Oy9QaXBlbGluZSZndDsmIzEwOyIvPgotPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5BVFRSX1VTRV9ERUZBVUxUX09VVFBVVF9GSUxFIiB2YWx1ZT0idHJ1ZSIvPgotPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcudGVzdHMvdGVzdEZpbGVzL1RyYW5zZm9ybUNvbW1lbnRzLmxhdW5jaCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLnRlc3RzL3Rlc3RGaWxlcy9UcmFuc2Zvcm1Db21tZW50cy5sYXVuY2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3OTBkZTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcudGVzdHMvdGVzdEZpbGVzL1RyYW5zZm9ybUNvbW1lbnRzLmxhdW5jaAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgotPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcubGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgotPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuQVRUUl9BVFRSSUJVVEVTIiB2YWx1ZT0iJmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDsgc3RhbmRhbG9uZT0mcXVvdDtubyZxdW90Oz8mZ3Q7JiMxMDsmbHQ7QXR0cmlidXRlcy8mZ3Q7JiMxMDsiLz4KLTxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLkFUVFJfT1VUUFVUX1BST1BFUlRJRVMiIHZhbHVlPSImbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90OyBzdGFuZGFsb25lPSZxdW90O25vJnF1b3Q7PyZndDsmIzEwOyZsdDtQcm9wZXJ0aWVzLyZndDsmIzEwOyIvPgotPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuQVRUUl9QUk9DRVNTT1IiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy54YWxhbi5wcm9jZXNzb3IiLz4KLTxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLkFUVFJfVFJBTlNGT1JNRVJfRkFDVE9SWSIgdmFsdWU9Im9yZy5hcGFjaGUueGFsYW4ucHJvY2Vzc29yLlRyYW5zZm9ybWVyRmFjdG9yeUltcGwiLz4KLTxib29sZWFuQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5BVFRSX1VTRV9ERUZBVUxUX1BST0NFU1NPUiIgdmFsdWU9ImZhbHNlIi8+Ci08c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JTlZPS0VSX0RFU0NSSVBUT1IiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5qYXhwLmludm9rZSIvPgotPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5BVFRSX0ZPUk1BVF9GSUxFIiB2YWx1ZT0iZmFsc2UiLz4KLTxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5BVFRSX0lOUFVUX0ZJTEUiIHZhbHVlPSIke3dvcmtzcGFjZV9sb2M6L1hTTFRlc3RQcm9qZWN0L3Rlc3RDb21tZW50SW5wdXQueG1sfSIvPgotPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5BVFRSX09QRU5fRklMRSIgdmFsdWU9InRydWUiLz4KLTxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5BVFRSX09VVFBVVF9GSUxFTkFNRSIgdmFsdWU9InRlc3RDb21tZW50SW5wdXQub3V0LnhtbCIvPgotPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLkFUVFJfT1VUUFVUX0ZPTERFUiIgdmFsdWU9IiR7d29ya3NwYWNlX2xvYzovWFNMVGVzdFByb2plY3R9Ii8+Ci08c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuQVRUUl9QSVBFTElORSIgdmFsdWU9IiZsdDs/eG1sIHZlcnNpb249JnF1b3Q7MS4wJnF1b3Q7IGVuY29kaW5nPSZxdW90O1VURi04JnF1b3Q7IHN0YW5kYWxvbmU9JnF1b3Q7bm8mcXVvdDs/Jmd0OyYjMTA7Jmx0O1BpcGVsaW5lJmd0OyYjMTA7Jmx0O091dHB1dFByb3BlcnRpZXMvJmd0OyYjMTA7Jmx0O1RyYW5zZm9ybSBwYXRoPSZxdW90Oy9YU0xUZXN0UHJvamVjdC90ZXN0Q29tbWVudHMueHNsJnF1b3Q7IHBhdGhUeXBlPSZxdW90O3Jlc291cmNlJnF1b3Q7IHVyaVJlc29sdmVyPSZxdW90OyZxdW90OyZndDsmIzEwOyZsdDtQYXJhbWV0ZXJzLyZndDsmIzEwOyZsdDsvVHJhbnNmb3JtJmd0OyYjMTA7Jmx0Oy9QaXBlbGluZSZndDsmIzEwOyIvPgotPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5BVFRSX1VTRV9ERUZBVUxUX09VVFBVVF9GSUxFIiB2YWx1ZT0idHJ1ZSIvPgotPC9sYXVuY2hDb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcudGVzdHMveHNsLXRlc3QtcmVzb3VyY2VzL29yZy9lY2xpcHNlL3dzdC94c2wvbGF1bmNoaW5nL3Rlc3RzLzEtaW5wdXQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcudGVzdHMveHNsLXRlc3QtcmVzb3VyY2VzL29yZy9lY2xpcHNlL3dzdC94c2wvbGF1bmNoaW5nL3Rlc3RzLzEtaW5wdXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzU3ZGRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLnRlc3RzL3hzbC10ZXN0LXJlc291cmNlcy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy90ZXN0cy8xLWlucHV0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgotCTxlbGVtZW50IGF0dHJpYnV0ZT0ieWVzIi8+Ci08L3Jvb3Q+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy50ZXN0cy94c2wtdGVzdC1yZXNvdXJjZXMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvdGVzdHMvMS10cmFuc2Zvcm0ueHNsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcudGVzdHMveHNsLXRlc3QtcmVzb3VyY2VzL29yZy9lY2xpcHNlL3dzdC94c2wvbGF1bmNoaW5nL3Rlc3RzLzEtdHJhbnNmb3JtLnhzbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzZhZjQ4Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy50ZXN0cy94c2wtdGVzdC1yZXNvdXJjZXMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvdGVzdHMvMS10cmFuc2Zvcm0ueHNsCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzbDpzdHlsZXNoZWV0IHZlcnNpb249IjEuMCIgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iPgotCTx4c2w6dGVtcGxhdGUgbWF0Y2g9Ii8vcm9vdCI+Ci0JCTxyb290LW91dC8+Ci0JPC94c2w6dGVtcGxhdGU+Ci08L3hzbDpzdHlsZXNoZWV0PgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy50ZXN0cy94c2wtdGVzdC1yZXNvdXJjZXMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvdGVzdHMvdGVzdENvbW1lbnRJbnB1dC5vdXQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcudGVzdHMveHNsLXRlc3QtcmVzb3VyY2VzL29yZy9lY2xpcHNlL3dzdC94c2wvbGF1bmNoaW5nL3Rlc3RzL3Rlc3RDb21tZW50SW5wdXQub3V0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjM1MTI4Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy50ZXN0cy94c2wtdGVzdC1yZXNvdXJjZXMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvdGVzdHMvdGVzdENvbW1lbnRJbnB1dC5vdXQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pjxyb290PjxlbGVtZW50PgotICAgPC9lbGVtZW50PjxlbGVtZW50PgotICAgICAKLSAgIDwvZWxlbWVudD48ZWxlbWVudD4KLSAgIAotPC9lbGVtZW50Pjwvcm9vdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy50ZXN0cy94c2wtdGVzdC1yZXNvdXJjZXMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvdGVzdHMvdGVzdENvbW1lbnRJbnB1dC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy50ZXN0cy94c2wtdGVzdC1yZXNvdXJjZXMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvdGVzdHMvdGVzdENvbW1lbnRJbnB1dC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExYWJjOTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcudGVzdHMveHNsLXRlc3QtcmVzb3VyY2VzL29yZy9lY2xpcHNlL3dzdC94c2wvbGF1bmNoaW5nL3Rlc3RzL3Rlc3RDb21tZW50SW5wdXQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGRvYz4KLSAgIDx0ZXN0PgotICAgICA8IS0tZmlyc3QgY29tbWVudC0tPgotICAgPC90ZXN0PgotICAgPCEtLXNlY29uZCBjb21tZW50LS0+Ci08L2RvYz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy50ZXN0cy94c2wtdGVzdC1yZXNvdXJjZXMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvdGVzdHMvdGVzdENvbW1lbnRzLnhzbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLnRlc3RzL3hzbC10ZXN0LXJlc291cmNlcy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy90ZXN0cy90ZXN0Q29tbWVudHMueHNsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MWVlM2QxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLnRlc3RzL3hzbC10ZXN0LXJlc291cmNlcy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy90ZXN0cy90ZXN0Q29tbWVudHMueHNsCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgotCXZlcnNpb249IjEuMCI+Ci0JPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY29tbWVudCgpIj4KLQkJPHhzbDpjb3B5IC8+Ci0JPC94c2w6dGVtcGxhdGU+Ci08L3hzbDpzdHlsZXNoZWV0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLnRlc3RzL3hzbC10ZXN0LXJlc291cmNlcy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy90ZXN0cy90ZXN0Q29tbWVudHNFeHBlY3RlZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy50ZXN0cy94c2wtdGVzdC1yZXNvdXJjZXMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvdGVzdHMvdGVzdENvbW1lbnRzRXhwZWN0ZWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMzhhYWFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLnRlc3RzL3hzbC10ZXN0LXJlc291cmNlcy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy90ZXN0cy90ZXN0Q29tbWVudHNFeHBlY3RlZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0gICAKLSAgICAgPCEtLWZpcnN0IGNvbW1lbnQtLT4KLSAgIAotICAgPCEtLXNlY29uZCBjb21tZW50LS0+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC50ZXN0cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC50ZXN0cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzJlZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLnRlc3RzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDI5M2EzZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLnRlc3RzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnhzbC50ZXN0czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NmQ3MGVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi0jV2VkIEFwciAwNyAwNzowMDowMSBQRFQgMjAxMAotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDA4OTU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUuMAotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LnhzbC50ZXN0cztzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjEuMC5xdWFsaWZpZXIKLUJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yLjAKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcudGVzdHM7YnVuZGxlLXZlcnNpb249IjEuMC4wIiwKLSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLnRlc3RzO2J1bmRsZS12ZXJzaW9uPSIxLjAuMCIsCi0gb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLnRlc3RzO2J1bmRsZS12ZXJzaW9uPSIxLjAuMCIsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLnRlc3RzO2J1bmRsZS12ZXJzaW9uPSIxLjAuMCIsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnRlc3RzO2J1bmRsZS12ZXJzaW9uPSIxLjAuMCIsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lO2J1bmRsZS12ZXJzaW9uPSJbMy40LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LmNvcmUudGVzdHM7YnVuZGxlLXZlcnNpb249IjEuMC4wIiwKLSBvcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpLnRlc3RzO2J1bmRsZS12ZXJzaW9uPSIxLjAuMCIsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS50ZXN0cztidW5kbGUtdmVyc2lvbj0iMS4wLjAiLAotIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy50ZXN0O2J1bmRsZS12ZXJzaW9uPSIxLjAuMCIsCi0gb3JnLmp1bml0Ci1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LnhzbC50ZXN0cwotQnVuZGxlLUNsYXNzUGF0aDogLgotQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC54c2wudGVzdHMuWFNMVGVzdFBsdWdpbgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC50ZXN0cy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC50ZXN0cy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTk5ZGYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wudGVzdHMvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDNiNzg3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wudGVzdHMvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLXNvdXJjZS4uID0gc3JjLwotb3V0cHV0Li4gPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgLixcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIGJpbi8KLXNvdXJjZS4uID0gc3JjLwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC50ZXN0cy9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3MGM1ZDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC50ZXN0cy9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSNQcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLndzdC54c2wudGVzdHMKLUJ1bmRsZS1OYW1lLjAgPSBUZXN0cyBQbHVnLWluCi1CdW5kbGUtVmVuZG9yLjAgPSBFY2xpcHNlLm9yZwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdGVzdHMvQWxsVGVzdHNTdWl0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC90ZXN0cy9BbGxUZXN0c1N1aXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwZTQ3NjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC90ZXN0cy9BbGxUZXN0c1N1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUudGVzdHMuWFBhdGhDb3JlVGVzdHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5pbnRlcm5hbC5oYW5kZXIudGVzdHMuVGVzdFhQYXRoUHJvY2Vzc29ySGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IudGVzdC5BbGxQc3ljaG9QYXRoVGVzdHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLnRlc3RzLlhTTENvcmVUZXN0U3VpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC5jb3JlLnRlc3RzLkVYU0xUQ29yZVRlc3RTdWl0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudGVzdC5BbGxKQVhQRGVidWdUZXN0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy50ZXN0cy5MYXVuY2hpbmdTdWl0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLnVpLnRlc3RzLlhTTFVJVGVzdFN1aXRlOwotCi0vKioKLSAqIFRoaXMgY2xhc3Mgc3BlY2lmaWVzIGFsbCB0aGUgYnVuZGxlcyBvZiB0aGlzIGNvbXBvbmVudCB0aGF0IHByb3ZpZGUgYSB0ZXN0Ci0gKiBzdWl0ZSB0byBydW4gZHVyaW5nIGF1dG9tYXRlZCB0ZXN0aW5nLgotICovCi1wdWJsaWMgY2xhc3MgQWxsVGVzdHNTdWl0ZSBleHRlbmRzIFRlc3RTdWl0ZSB7Ci0KLQotCXB1YmxpYyBBbGxUZXN0c1N1aXRlKCkgewotCQlzdXBlcigiQWxsIFhTTCBUZXN0IFN1aXRlcyIpOwotCQlhZGRUZXN0KFhTTFVJVGVzdFN1aXRlLnN1aXRlKCkpOwotCQlhZGRUZXN0KFhTTENvcmVUZXN0U3VpdGUuc3VpdGUoKSk7Ci0JCWFkZFRlc3QoWFBhdGhDb3JlVGVzdHMuc3VpdGUoKSk7Ci0JCWFkZFRlc3QoTGF1bmNoaW5nU3VpdGUuc3VpdGUoKSk7Ci0JCWFkZFRlc3QoQWxsSkFYUERlYnVnVGVzdHMuc3VpdGUoKSk7Ci0JCWFkZFRlc3QoQWxsUHN5Y2hvUGF0aFRlc3RzLnN1aXRlKCkpOwotCQlhZGRUZXN0KEVYU0xUQ29yZVRlc3RTdWl0ZS5zdWl0ZSgpKTsKLQkJYWRkVGVzdFN1aXRlKFRlc3RYUGF0aFByb2Nlc3NvckhhbmRsZXIuY2xhc3MpOwotCS8vCWFkZFRlc3QoRVhTTFRVSVRlc3RTdWl0ZS5zdWl0ZSgpKTsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIGlzIGp1c3QgbmVlZCB0byBydW4gaW4gYSBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCB3b3JrYmVuY2guCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEFsbCgpIHsKLQkJLy8gdGhpcyBtZXRob2QgbmVlZHMgdG8gZXhpc3QsIGJ1dCBkb2Vzbid0IHJlYWxseSBkbyBhbnl0aGluZwotCQkvLyBvdGhlciB0aGFuIHRvIHNpZ25hbCB0byBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcy4KLQkJLy8gVGhlIHJlc3QgaXQgYXV0b21hdGljIGZyb20gdGhlIHRlc3RzIGFkZGVkIGluIGNvbnN0cnVjdG9yLgotCi0JfQotCS8qIAotCSAqIEFkZGVkIGZvciBzdHJpY3QgSlVuaXQgNCBlbnZpcm9ubWVudC4gKE5vdCBzdXJlIGlmICJ0ZXN0QWxsIiBtZXRob2QgaXMgc3RpbGwgcmVxdWlyZWQuIAotCSAqIFNlZSBkaXNjdXNzaW9uIGZvciBzaW1pbGFyIGlzc3VlIGluIGJ1ZyAzMDA5NTEuCi0JICogaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTMwMDk1MQotCSAqLwotICAgIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBBbGxUZXN0c1N1aXRlKCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC90ZXN0cy9YU0xUZXN0UGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3Rlc3RzL1hTTFRlc3RQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTI5NzlmYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3Rlc3RzL1hTTFRlc3RQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC50ZXN0czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OwotCi0KLXB1YmxpYyBjbGFzcyBYU0xUZXN0UGx1Z2luIGV4dGVuZHMgUGx1Z2luIHsKLQotCS8vIFRoZSBwbHVnLWluIElECi0JLyoqCi0JICogVE9ETzogQWRkIEphdmFEb2MKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlIjsgLy8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBCdW5kbGVDb250ZXh0IGJ1bmRsZUNvbnRleHQ7Ci0JCi0JLy8gVGhlIHNoYXJlZCBpbnN0YW5jZQotCXByaXZhdGUgc3RhdGljIFhTTFRlc3RQbHVnaW4gcGx1Z2luOwkKLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luI3N0YXJ0KG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQotCSAqLwotCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnN0YXJ0KGNvbnRleHQpOwotCQlidW5kbGVDb250ZXh0ID0gY29udGV4dDsKLQkJcGx1Z2luID0gdGhpczsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCi0JICovCi0JcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlwbHVnaW4gPSBudWxsOwotCQlzdXBlci5zdG9wKGNvbnRleHQpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZQotCSAqCi0JICogQHJldHVybiB0aGUgc2hhcmVkIGluc3RhbmNlCi0JICovCi0JcHVibGljIHN0YXRpYyBYU0xUZXN0UGx1Z2luIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC50ZXN0cy90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2wudGVzdHMvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5MTJjYjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzbC50ZXN0cy90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotCi08cHJvamVjdAotICAgIG5hbWU9InRlc3RzdWl0ZSIKLSAgICBkZWZhdWx0PSJydW4iCi0gICAgYmFzZWRpcj0iLiI+Ci0gICAgCi0gICAgPCEtLSBUaGUgZm9sbG93aW5nIHByb3BlcnRpZXMgc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotICAgIDwhLS0gJHtlY2xpcHNlLWhvbWV9ICAgLS0+Ci0gICAgPCEtLSAke2J1aWxkRGlyZWN0b3J5fSAgLS0+Ci0gICAgPCEtLSAke2J1aWxkTGFiZWx9ICAgICAgICAtLT4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYWJvdmUgIC0tPgotICAgIAotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJwbHVnaW4tbmFtZSIKLSAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54c2wudGVzdHMiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImNsYXNzbmFtZSIKLSAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54c2wudGVzdHMuQWxsVGVzdHNTdWl0ZSIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0idGVzdFR5cGUiCi0gICAgICAgIHZhbHVlPSJ1aS10ZXN0IiAvPgotCi0gICAgPCEtLSBzaG91bGQgYmUgbGl0dGxlIG5lZWQgdG8gY2hhbmdlIHdoYXQncyBiZWxvdyAtLT4KLQotICAgIDxlY2hvIG1lc3NhZ2U9ImJhc2VkaXI6ICR7YmFzZWRpcn0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iZWNsaXBzZS1ob21lOiAke2VjbGlwc2UtaG9tZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iYnVpbGREaXJlY3Rvcnk6ICR7YnVpbGREaXJlY3Rvcnl9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9InBsdWdpbi1uYW1lOiAke3BsdWdpbi1uYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJjbGFzc25hbWU6ICR7Y2xhc3NuYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJ0ZXN0VHlwZSAke3Rlc3RUeXBlfSIgLz4KLQotCi0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImxpYnJhcnktZmlsZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9IndvcmtzcGFjZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9qdW5pdHdvcmtzcGFjZXMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgIAotICAgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KLSAgICA8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgotICAgIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iaW5pdCI+Ci0gICAgICAgIDx0c3RhbXAgLz4KLSAgICAgICAgPGRlbGV0ZT4KLSAgICAgICAgICAgIDxmaWxlc2V0Ci0gICAgICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iCi0gICAgICAgICAgICAgICAgaW5jbHVkZXM9IiR7cGx1Z2luLW5hbWV9Lip4bWwiIC8+Ci0gICAgICAgIDwvZGVsZXRlPgotICAgICAgICA8IS0tIG1ha2UgZGlyZWN0b3J5LCBpbiBjYXNlIHBhdGggZG9lc24ndCBleGlzdCB5ZXQgLS0+Ci0gICAgICAgIDxta2RpciBkaXI9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgPCEtLSAgYnV0IGRlbGV0ZSB0byBtYWtlIHN1cmUgZnJlc2ggY29udGVudHMtLT4KLSAgICAgICAgPGRlbGV0ZQotICAgICAgICAgICAgZGlyPSIke3dvcmtzcGFjZX0iCi0gICAgICAgICAgICBxdWlldD0idHJ1ZSIgLz4KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9InN1aXRlIj4KLQotICAgICAgICA8YW50Ci0gICAgICAgICAgICB0YXJnZXQ9IiR7dGVzdFR5cGV9IgotICAgICAgICAgICAgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iZGF0YS1kaXIiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1uYW1lIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImNsYXNzbmFtZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtjbGFzc25hbWV9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0icGx1Z2luLXBhdGgiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICA8L2FudD4KLQotICAgICAgICA8Y29weQotICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIgotICAgICAgICAgICAgZmlsZT0iJHt3b3Jrc3BhY2V9Ly5tZXRhZGF0YS8ubG9nIgotICAgICAgICAgICAgdG9maWxlPSIke2J1aWxkRGlyZWN0b3J5fS8ke2J1aWxkTGFiZWx9L3Rlc3RSZXN1bHRzL2NvbnNvbGVsb2dzLyR7cGx1Z2luLW5hbWV9LmNvbnNvbGVsb2cudHh0IiAvPgotCi0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0gICAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iY2xlYW51cCI+Ci0gICAgICAgIDwhLS0gdXN1YWxseSBubyBuZWVkIHRvIGRlbGV0ZSB3b3Jrc3BhY2UgdW50aWwgbmV4dCBydW4sIGFuZCBsZWF2aW5nIGl0IGFsbG93cyBpbnNwZWN0aW9uIC0tPgotICAgICAgICA8IS0tIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIiAvPiAtLT4KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0gICAgPHRhcmdldAotICAgICAgICBuYW1lPSJydW4iCi0gICAgICAgIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0gICAgICAgIDxhbnQKLSAgICAgICAgICAgIHRhcmdldD0iY29sbGVjdCIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImluY2x1ZGVzIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0ib3V0cHV0LWZpbGUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIgLz4KLSAgICAgICAgPC9hbnQ+Ci0gICAgPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCg==